[
  {
    "path": ".config/1espt/PipelineAutobaseliningConfig.yml",
    "content": "## DO NOT MODIFY THIS FILE MANUALLY. This is part of auto-baselining from 1ES Pipeline Templates. Go to [https://aka.ms/1espt-autobaselining] for more details.\n\npipelines:\n  111:\n    retail:\n      source:\n        credscan:\n          lastModifiedDate: 2024-09-10\n        eslint:\n          lastModifiedDate: 2024-09-10\n        psscriptanalyzer:\n          lastModifiedDate: 2024-09-10\n        armory:\n          lastModifiedDate: 2024-09-10\n      binary:\n        credscan:\n          lastModifiedDate: 2025-02-04\n        binskim:\n          lastModifiedDate: 2025-02-04\n        spotbugs:\n          lastModifiedDate: 2025-02-04\n"
  },
  {
    "path": ".config/guardian/.gdnbaselines",
    "content": "{\n  \"properties\": {\n    \"helpUri\": \"https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines\"\n  },\n  \"version\": \"1.0.0\",\n  \"baselines\": {\n    \"default\": {\n      \"name\": \"default\",\n      \"createdDate\": \"2025-01-28 06:29:05Z\",\n      \"lastUpdatedDate\": \"2025-01-28 06:29:05Z\"\n    }\n  },\n  \"results\": {\n    \"ea3b2bf4f5b3d0bd8a6ad35cc61e49f2a1596660fd66d17d740e4806e7ed7dcc\": {\n      \"signature\": \"ea3b2bf4f5b3d0bd8a6ad35cc61e49f2a1596660fd66d17d740e4806e7ed7dcc\",\n      \"alternativeSignatures\": [\n        \"ff528c0b5a010ae7b5e9178b004a8b816a429a28ba98ce8336466b490a09dcef\"\n      ],\n      \"target\": \".build/win32-arm64/system-setup/VSCodeSetup-arm64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-01-30 19:19:49Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"12babbc85192ed1c8d927693da788537c1eef199bbecbe226f940a2d0e97637c\": {\n      \"signature\": \"12babbc85192ed1c8d927693da788537c1eef199bbecbe226f940a2d0e97637c\",\n      \"alternativeSignatures\": [\n        \"35b0519e201e56fb87fc6fb085e6fb1df5b89715142bb9086a5b2006e0fd4ced\"\n      ],\n      \"target\": \".build/win32-arm64/system-setup/VSCodeSetup-arm64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-01-30 19:19:49Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"49163bd1dc9d965d3baced1694dc8c43305b8bf96e884f478d8e4bd124454ba0\": {\n      \"signature\": \"49163bd1dc9d965d3baced1694dc8c43305b8bf96e884f478d8e4bd124454ba0\",\n      \"alternativeSignatures\": [\n        \"aa80bcf44aa8ddd20fb9802e9032c1257048b973896a944ded70bb195f060b2a\"\n      ],\n      \"target\": \".build/win32-arm64/user-setup/VSCodeUserSetup-arm64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-01-30 19:21:17Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"c405af02e021c3a473d4e45ec4daa658db1527ea7430c6be968d182e7b50fbd1\": {\n      \"signature\": \"c405af02e021c3a473d4e45ec4daa658db1527ea7430c6be968d182e7b50fbd1\",\n      \"alternativeSignatures\": [\n        \"619d2a1a77f55b4181493b8cfdf09be5261e539115752af2e4938f5ac04af132\"\n      ],\n      \"target\": \".build/win32-arm64/user-setup/VSCodeUserSetup-arm64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-01-30 19:21:17Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"71b8515b2eb51cfd5eace11cedb15189d51ce9e479095a5938334416088cbc03\": {\n      \"signature\": \"71b8515b2eb51cfd5eace11cedb15189d51ce9e479095a5938334416088cbc03\",\n      \"alternativeSignatures\": [\n        \"b34279fc5fec828b8dcd9ca873804e85d7d9cd78554ec109d2dd493351a7a244\"\n      ],\n      \"target\": \".build/win32-x64/system-setup/VSCodeSetup-x64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-01-30 19:51:51Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"9238de77a5320039def14694d1b6f501cc2288f13c9c688d2e0501fc5a56ee61\": {\n      \"signature\": \"9238de77a5320039def14694d1b6f501cc2288f13c9c688d2e0501fc5a56ee61\",\n      \"alternativeSignatures\": [\n        \"1d17616a549e9f36d814c4e802d651b1af453ce0a23d4478eef39be81adcc16b\"\n      ],\n      \"target\": \".build/win32-x64/system-setup/VSCodeSetup-x64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-01-30 19:51:51Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"bad8b698b48c1da9ece953903581c66bf98bc829ae1a6adcd3b5c2056a6fcd01\": {\n      \"signature\": \"bad8b698b48c1da9ece953903581c66bf98bc829ae1a6adcd3b5c2056a6fcd01\",\n      \"alternativeSignatures\": [\n        \"057376d31b97e8ce3ecf6a180a553b932d7e5be6e2b07a08027d5dfabe35e82c\"\n      ],\n      \"target\": \".build/win32-x64/user-setup/VSCodeUserSetup-x64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-01-30 19:53:13Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"cc7c248b0fd4c105e9a393ae232bf0d314ec50e65357a5e7e7d68f6f10c77077\": {\n      \"signature\": \"cc7c248b0fd4c105e9a393ae232bf0d314ec50e65357a5e7e7d68f6f10c77077\",\n      \"alternativeSignatures\": [\n        \"f3867098aff3368682df9926e85a35ec05cf905f27d0c157430021c3169f899d\"\n      ],\n      \"target\": \".build/win32-x64/user-setup/VSCodeUserSetup-x64-1.97.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-01-30 19:53:13Z\",\n      \"expirationDate\": \"2025-07-19 21:12:48Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-01-30 21:12:48Z\"\n    },\n    \"8c53250a171412b84dedcbb22cdab9ec365d9b52d74b09c070097fff45372de0\": {\n      \"signature\": \"8c53250a171412b84dedcbb22cdab9ec365d9b52d74b09c070097fff45372de0\",\n      \"alternativeSignatures\": [\n        \"314267784b0ea867006e00b809a93498fae3264e42d1a3a7745ab13180a5b6ef\"\n      ],\n      \"target\": \".build/win32-arm64/system-setup/VSCodeSetup-arm64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-02-04 06:16:33Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    },\n    \"a6a58d971da858f4af219672cef73ffd0aacc47f1e2c12b8b44a428e1330d3de\": {\n      \"signature\": \"a6a58d971da858f4af219672cef73ffd0aacc47f1e2c12b8b44a428e1330d3de\",\n      \"alternativeSignatures\": [\n        \"4e40f2f1683f0bf2245f35d0ebbcf2f446274d84b1db09d8e76ddfdcad5d4479\"\n      ],\n      \"target\": \".build/win32-arm64/system-setup/VSCodeSetup-arm64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-02-04 06:16:33Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    },\n    \"90e0f060e01e4a55620f609ac3241b62e8f54a059e9f4d292e93a4305fd3c39e\": {\n      \"signature\": \"90e0f060e01e4a55620f609ac3241b62e8f54a059e9f4d292e93a4305fd3c39e\",\n      \"alternativeSignatures\": [\n        \"377fe43ff8404d07f4a6ca763175004f360397ded6cf5d55b655646ada90e39c\"\n      ],\n      \"target\": \".build/win32-arm64/user-setup/VSCodeUserSetup-arm64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-02-04 06:17:54Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    },\n    \"f36c3dc19566098a923877d16d6ebfcbd971f8fcd8210afb8f5558fb5ba1f203\": {\n      \"signature\": \"f36c3dc19566098a923877d16d6ebfcbd971f8fcd8210afb8f5558fb5ba1f203\",\n      \"alternativeSignatures\": [\n        \"1af1f475c1617701e3d7a8fd465916bcc60c3125b8807af5d47d49137d9d468c\"\n      ],\n      \"target\": \".build/win32-arm64/user-setup/VSCodeUserSetup-arm64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-02-04 06:17:54Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    },\n    \"71193d108c53bb802f5c491276365bcff0645fb380be57288f3fbd6896166d3a\": {\n      \"signature\": \"71193d108c53bb802f5c491276365bcff0645fb380be57288f3fbd6896166d3a\",\n      \"alternativeSignatures\": [\n        \"420cae2e6e34b93d7b74fc1ffddfdf23b57650ae989d838bb2d67f28e4e1db0e\"\n      ],\n      \"target\": \".build/win32-x64/system-setup/VSCodeSetup-x64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-02-04 07:11:19Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    },\n    \"444c302f49bdedcafe772322a09727b2279e3265d99deb2e307defeae3ef200b\": {\n      \"signature\": \"444c302f49bdedcafe772322a09727b2279e3265d99deb2e307defeae3ef200b\",\n      \"alternativeSignatures\": [\n        \"4ff6ccbdb0745d43d3b61f82fb2f4d8a64fe9787525df81a6d7b825e79282085\"\n      ],\n      \"target\": \".build/win32-x64/system-setup/VSCodeSetup-x64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-02-04 07:11:19Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    },\n    \"4670c7c096a69ca428429ffa1f5250aac9f2e07beac0ffe587ffb37bdb1da4d4\": {\n      \"signature\": \"4670c7c096a69ca428429ffa1f5250aac9f2e07beac0ffe587ffb37bdb1da4d4\",\n      \"alternativeSignatures\": [\n        \"7cead96cb508ab6e37e27bcc0f8b7ed8d0761b77f4793958c46c5ff3892ab1b6\"\n      ],\n      \"target\": \".build/win32-x64/user-setup/VSCodeUserSetup-x64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2009\",\n      \"createdDate\": \"2025-02-04 07:13:22Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    },\n    \"a359b4a5ed2378a73f3bba93e3fb1c595db7423c3082635d12d101bbeb0a51b8\": {\n      \"signature\": \"a359b4a5ed2378a73f3bba93e3fb1c595db7423c3082635d12d101bbeb0a51b8\",\n      \"alternativeSignatures\": [\n        \"125b52a21ef619a95e695085deb9492280bcf2c1decdd5e87e6416af5982d02d\"\n      ],\n      \"target\": \".build/win32-x64/user-setup/VSCodeUserSetup-x64-1.98.0-insider.exe\",\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"tool\": \"binskim\",\n      \"ruleId\": \"BA2018\",\n      \"createdDate\": \"2025-02-04 07:13:22Z\",\n      \"expirationDate\": \"2025-07-24 07:25:17Z\",\n      \"justification\": \"This error is baselined with an expiration date of 180 days from 2025-02-04 07:25:17Z\"\n    }\n  }\n}"
  },
  {
    "path": ".config/guardian/.gdnsuppress",
    "content": "{\n  \"hydrated\": false,\n  \"properties\": {\n    \"helpUri\": \"https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/suppressions\"\n  },\n  \"version\": \"1.0.0\",\n  \"suppressionSets\": {\n    \"default\": {\n      \"name\": \"default\",\n      \"createdDate\": \"2025-03-17 11:52:32Z\",\n      \"lastUpdatedDate\": \"2025-03-17 11:52:32Z\"\n    }\n  },\n  \"results\": {\n    \"216e2ac9cb596796224b47799f656570a01fa0d9b5f935608b47d15ab613c8e8\": {\n      \"signature\": \"216e2ac9cb596796224b47799f656570a01fa0d9b5f935608b47d15ab613c8e8\",\n      \"alternativeSignatures\": [\n        \"07746898f43afab7cc50931b33154c2d9e1a35f82a649dbe8aecf785b3d5a813\"\n      ],\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"createdDate\": \"2025-03-17 11:52:32Z\"\n    },\n    \"77797a3e44634bb2994bd13ccc95ff4575bba474585dbd2cf3068a1c16bc0624\": {\n      \"signature\": \"77797a3e44634bb2994bd13ccc95ff4575bba474585dbd2cf3068a1c16bc0624\",\n      \"alternativeSignatures\": [\n        \"4a6cb67bd4b401e9669c13a2162660aaefc0a94a4122e5b50c198414db545672\"\n      ],\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"createdDate\": \"2025-03-17 11:52:32Z\"\n    },\n    \"30418bcc5269eaeb2832a2404465784431d4e72a2af332320c2b1db4768902ad\": {\n      \"signature\": \"30418bcc5269eaeb2832a2404465784431d4e72a2af332320c2b1db4768902ad\",\n      \"alternativeSignatures\": [\n        \"b7b9eb974d7d3a4ae14df8695ca5a62592c8c9d20b7eda70a6535d50cbda3e7f\"\n      ],\n      \"memberOf\": [\n        \"default\"\n      ],\n      \"createdDate\": \"2025-03-17 11:52:32Z\"\n    }\n  }\n}\n"
  },
  {
    "path": ".configurations/configuration.dsc.yaml",
    "content": "# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2\n# Reference: https://github.com/microsoft/vscode/wiki/How-to-Contribute\nproperties:\n  resources:\n    - resource: Microsoft.WinGet.DSC/WinGetPackage\n      directives:\n        description: Install Git\n        allowPrerelease: true\n      settings:\n        id: Git.Git\n        source: winget\n    - resource: Microsoft.WinGet.DSC/WinGetPackage\n      id: npm\n      directives:\n        description: Install NodeJS version 20\n        allowPrerelease: true\n      settings:\n        id: OpenJS.NodeJS.LTS\n        version: \"20.14.0\"\n        source: winget\n    - resource: Microsoft.WinGet.DSC/WinGetPackage\n      directives:\n        description: Install Python 3.10\n        allowPrerelease: true\n      settings:\n        id: Python.Python.3.10\n        source: winget\n    - resource: Microsoft.WinGet.DSC/WinGetPackage\n      id: vsPackage\n      directives:\n        description: Install Visual Studio 2022 (any edition is OK)\n        allowPrerelease: true\n      settings:\n        id: Microsoft.VisualStudio.2022.BuildTools\n        source: winget\n    - resource: Microsoft.VisualStudio.DSC/VSComponents\n      dependsOn:\n        - vsPackage\n      directives:\n        description: Install required VS workloads\n        allowPrerelease: true\n      settings:\n        productId: Microsoft.VisualStudio.Product.BuildTools\n        channelId: VisualStudio.17.Release\n        includeRecommended: true\n        components:\n          - Microsoft.VisualStudio.Workload.VCTools\n    - resource: NpmDsc/NpmInstall\n      dependsOn:\n        - npm\n      directives:\n        description: Install dependencies\n        allowPrerelease: true\n      settings:\n        PackageDirectory: '${WinGetConfigRoot}\\..\\'\n  configurationVersion: 0.2.0\n"
  },
  {
    "path": ".devcontainer/Dockerfile",
    "content": "FROM mcr.microsoft.com/devcontainers/typescript-node:20-bookworm\n\nADD install-vscode.sh /root/\nRUN /root/install-vscode.sh\n\nRUN git config --system codespaces-theme.hide-status 1\n\nUSER node\nRUN npm install -g node-gyp\nRUN NPM_CACHE=\"$(npm config get cache)\" && rm -rf \"$NPM_CACHE\" && ln -s /vscode-dev/npm-cache \"$NPM_CACHE\"\nRUN echo 'export DISPLAY=\"${DISPLAY:-:1}\"' | tee -a ~/.bashrc >> ~/.zshrc\n\nUSER root\nCMD chown node:node /vscode-dev && sudo -u node mkdir -p /vscode-dev/npm-cache && sleep inf\n"
  },
  {
    "path": ".devcontainer/README.md",
    "content": "# Code - OSS Development Container\n\n[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode)\n\nThis repository includes configuration for a development container for working with Code - OSS in a local container or using [GitHub Codespaces](https://github.com/features/codespaces).\n\n> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` and a web client is available on port `6080`.\n\n## Quick start - local\n\nIf you already have VS Code and Docker installed, you can click the badge above or [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode) to get started. Clicking these links will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use.\n\n1. Install Docker Desktop or Docker for Linux on your local machine. (See [docs](https://aka.ms/vscode-remote/containers/getting-started) for additional details.)\n\n2. **Important**: Docker needs at least **4 Cores and 8 GB of RAM** to run a full build with **9 GB of RAM** being recommended. If you are on macOS, or are using the old Hyper-V engine for Windows, update these values for Docker Desktop by right-clicking on the Docker status bar item and going to **Preferences/Settings > Resources > Advanced**.\n\n   > **Note:** The [Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor) extension is included in the container so you can keep an eye on CPU/Memory in the status bar.\n\n3. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Dev Containers](https://aka.ms/vscode-remote/download/containers) extension.\n\n   ![Image of Dev Containers extension](https://microsoft.github.io/vscode-remote-release/images/dev-containers-extn.png)\n\n   > **Note:** The Dev Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details.\n\n4. Press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd> and select **Dev Containers: Clone Repository in Container Volume...**.\n\n   > **Tip:** While you can use your local source tree instead, operations like `npm i` can be slow on macOS or when using the Hyper-V engine on Windows. We recommend using the WSL filesystem on Windows or the \"clone repository in container\" approach on Windows and macOS instead since it uses \"named volume\" rather than the local filesystem.\n\n5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press <kbd>Enter</kbd>.\n\n6. After the container is running:\n    1. If you have the `DISPLAY` or `WAYLAND_DISPLAY` environment variables set locally (or in WSL on Windows), desktop apps in the container will be shown in local windows.\n    2. If these are not set, open a web browser and go to [http://localhost:6080](http://localhost:6080), or use a [VNC Viewer][def] to connect to `localhost:5901` and enter `vscode` as the password. Anything you start in VS Code, or the integrated terminal, will appear here.\n\nNext: **[Try it out!](#try-it)**\n\n## Quick start - GitHub Codespaces\n\n1. From the [microsoft/vscode GitHub repository](https://github.com/microsoft/vscode), click on the **Code** dropdown, select **Open with Codespaces**, and then click on **New codespace**. If prompted, select the **Standard** machine size (which is also the default).\n\n   > **Note:** You will not see these options within GitHub if you are not in the Codespaces beta.\n\n2. After the codespace is up and running in your browser, press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd> and select **Ports: Focus on Ports View**.\n\n3. You should see **VNC web client (6080)** under in the list of ports. Select the line and click on the globe icon to open it in a browser tab.\n\n    > **Tip:** If you do not see the port, <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd>, select **Forward a Port** and enter port `6080`.\n\n4. In the new tab, you should see noVNC. Click **Connect** and enter `vscode` as the password.\n\nAnything you start in VS Code, or the integrated terminal, will appear here.\n\nNext: **[Try it out!](#try-it)**\n\n### Using VS Code with GitHub Codespaces\n\nYou may see improved VNC responsiveness when accessing a codespace from VS Code client since you can use a [VNC Viewer][def]. Here's how to do it.\n\n1. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [GitHub Codespaces extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces).\n\n    > **Note:** The GitHub Codespaces extension requires the Visual Studio Code distribution of Code - OSS.\n\n2. After the VS Code is up and running, press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd>, choose **Codespaces: Create New Codespace**, and use the following settings:\n\n- `microsoft/vscode` for the repository.\n- Select any branch (e.g. **main**) - you can select a different one later.\n- Choose **Standard** (4-core, 8GB) as the size.\n\n3. After you have connected to the codespace, you can use a [VNC Viewer][def] to connect to `localhost:5901` and enter `vscode` as the password.\n\n    > **Tip:** You may also need change your VNC client's **Picture Quality** setting to **High** to get a full color desktop.\n\n4. Anything you start in VS Code, or the integrated terminal, will appear here.\n\nNext: **[Try it out!](#try-it)**\n\n## Try it\n\nThis container uses the [Fluxbox](http://fluxbox.org/) window manager to keep things lean. **Right-click on the desktop** to see menu options. It works with GNOME and GTK applications, so other tools can be installed if needed.\n\n   > **Note:** You can also set the resolution from the command line by typing `set-resolution`.\n\nTo start working with Code - OSS, follow these steps:\n\n1. In your local VS Code client, open a terminal (<kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>\\`</kbd>) and type the following commands:\n\n   ```bash\n   npm i\n   bash scripts/code.sh\n   ```\n\n2. After the build is complete, open a web browser or a [VNC Viewer][def] to connect to the desktop environment as described in the quick start and enter `vscode` as the password.\n\n3. You should now see Code - OSS!\n\nNext, let's try debugging.\n\n1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window through your browser or VNC viewer.\n\n2. Go to your local VS Code client, and use the **Run / Debug** view to launch the **VS Code** configuration. (Typically the default, so you can likely just press <kbd>F5</kbd>).\n\n   > **Note:** If launching times out, you can increase the value of `timeout` in the \"VS Code\", \"Attach Main Process\", \"Attach Extension Host\", and \"Attach to Shared Process\" configurations in [launch.json](../../.vscode/launch.json). However, running `./scripts/code.sh` first will set up Electron which will usually solve timeout issues.\n\n3. After a bit, Code - OSS will appear with the debugger attached!\n\nEnjoy!\n\n### Notes\n\nThe container comes with VS Code Insiders installed. To run it from an Integrated Terminal use `VSCODE_IPC_HOOK_CLI= /usr/bin/code-insiders .`.\n\n[def]: https://www.realvnc.com/en/connect/download/viewer/\n"
  },
  {
    "path": ".devcontainer/devcontainer-lock.json",
    "content": "{\n  \"features\": {\n    \"ghcr.io/devcontainers/features/desktop-lite:1\": {\n      \"version\": \"1.0.8\",\n      \"resolved\": \"ghcr.io/devcontainers/features/desktop-lite@sha256:e7dc4d37ab9e3d6e7ebb221bac741f5bfe07dae47025399d038b17af2ed8ddb7\",\n      \"integrity\": \"sha256:e7dc4d37ab9e3d6e7ebb221bac741f5bfe07dae47025399d038b17af2ed8ddb7\"\n    },\n    \"ghcr.io/devcontainers/features/rust:1\": {\n      \"version\": \"1.1.3\",\n      \"resolved\": \"ghcr.io/devcontainers/features/rust@sha256:aba6f47303b197976902bf544c786b5efecc03c238ff593583e5e74dfa9c7ccb\",\n      \"integrity\": \"sha256:aba6f47303b197976902bf544c786b5efecc03c238ff593583e5e74dfa9c7ccb\"\n    }\n  }\n}"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "{\n\t\"name\": \"Code - OSS\",\n\t\"build\": {\n\t\t\"dockerfile\": \"Dockerfile\"\n\t},\n\t\"features\": {\n\t\t\"ghcr.io/devcontainers/features/desktop-lite:1\": {},\n\t\t\"ghcr.io/devcontainers/features/rust:1\": {}\n\t},\n\t\"containerEnv\": {\n\t\t\"DISPLAY\": \"\" // Allow the Dev Containers extension to set DISPLAY, post-create.sh will add it back in ~/.bashrc and ~/.zshrc if not set.\n\t},\n\t\"overrideCommand\": false,\n\t\"privileged\": true,\n\t\"mounts\": [\n\t\t{\n\t\t\t\"source\": \"vscode-dev\",\n\t\t\t\"target\": \"/vscode-dev\",\n\t\t\t\"type\": \"volume\"\n\t\t}\n\t],\n\t\"postCreateCommand\": \"./.devcontainer/post-create.sh\",\n\t\"customizations\": {\n\t\t\"vscode\": {\n\t\t\t\"settings\": {\n\t\t\t\t\"resmon.show.battery\": false,\n\t\t\t\t\"resmon.show.cpufreq\": false\n\t\t\t},\n\t\t\t\"extensions\": [\n\t\t\t\t\"dbaeumer.vscode-eslint\",\n\t\t\t\t\"EditorConfig.EditorConfig\",\n\t\t\t\t\"GitHub.vscode-pull-request-github\",\n\t\t\t\t\"ms-vscode.vscode-github-issue-notebooks\",\n\t\t\t\t\"ms-vscode.vscode-selfhost-test-provider\",\n\t\t\t\t\"mutantdino.resourcemonitor\"\n\t\t\t]\n\t\t}\n\t},\n\t\"forwardPorts\": [6080, 5901],\n\t\"portsAttributes\": {\n\t\t\"6080\": {\n\t\t\t\"label\": \"VNC web client (noVNC)\",\n\t\t\t\"onAutoForward\": \"silent\"\n\t\t},\n\t\t\"5901\": {\n\t\t\t\"label\": \"VNC TCP port\",\n\t\t\t\"onAutoForward\": \"silent\"\n\t\t}\n\t},\n\t\"hostRequirements\": {\n\t\t\"memory\": \"9gb\"\n\t}\n}\n"
  },
  {
    "path": ".devcontainer/install-vscode.sh",
    "content": "#!/bin/sh\n\napt update\napt install -y wget gpg\n\nwget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg\ninstall -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg\nsh -c 'echo \"deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main\" > /etc/apt/sources.list.d/vscode.list'\nrm -f packages.microsoft.gpg\n\napt update\napt install -y code-insiders libsecret-1-dev libxkbfile-dev libkrb5-dev\n"
  },
  {
    "path": ".devcontainer/post-create.sh",
    "content": "#!/bin/sh\n\nnpm i\nnpm run electron\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Tab indentation\n[*]\nindent_style = tab\ntrim_trailing_whitespace = true\n\n# The indent size used in the `package.json` file cannot be changed\n# https://github.com/npm/npm/pull/3180#issuecomment-16336516\n[{*.yml,*.yaml,package.json}]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".eslint-ignore",
    "content": "**/build/*/**/*.js\n**/dist/**/*.js\n**/extensions/**/*.d.ts\n**/extensions/**/build/**\n**/extensions/**/colorize-fixtures/**\n**/extensions/css-language-features/server/test/pathCompletionFixtures/**\n**/extensions/html-language-features/server/lib/jquery.d.ts\n**/extensions/html-language-features/server/src/test/pathCompletionFixtures/**\n**/extensions/ipynb/notebook-out/**\n**/extensions/markdown-language-features/media/**\n**/extensions/markdown-language-features/notebook-out/**\n**/extensions/markdown-math/notebook-out/**\n**/extensions/notebook-renderers/renderer-out/index.js\n**/extensions/simple-browser/media/index.js\n**/extensions/terminal-suggest/src/completions/upstream/**\n**/extensions/terminal-suggest/src/shell/zshBuiltinsCache.ts\n**/extensions/terminal-suggest/src/shell/fishBuiltinsCache.ts\n**/extensions/terminal-suggest/third_party/**\n**/extensions/typescript-language-features/test-workspace/**\n**/extensions/typescript-language-features/extension.webpack.config.js\n**/extensions/typescript-language-features/extension-browser.webpack.config.js\n**/extensions/typescript-language-features/package-manager/node-maintainer/**\n**/extensions/vscode-api-tests/testWorkspace/**\n**/extensions/vscode-api-tests/testWorkspace2/**\n**/fixtures/**\n**/node_modules/**\n**/out-*/**/*.js\n**/out-editor-*/**\n**/out/**/*.js\n**/src/**/dompurify.js\n**/src/**/marked.js\n**/src/**/semver.js\n**/src/typings/**/*.d.ts\n**/src/vs/*/**/*.d.ts\n**/src/vs/base/test/common/filters.perf.data.js\n**/src/vs/loader.js\n**/test/unit/assert.js\n**/test/automation/out/**\n**/typings/**\n**/.build/**\n!.vscode\n"
  },
  {
    "path": ".eslint-plugin-local/code-amd-node-module.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { join } from 'path';\n\n\nexport = new class ApiProviderNaming implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tamdX: 'Use `import type` for import declarations, use `amdX#importAMDNodeModule` for import expressions'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst modules = new Set<string>();\n\n\t\ttry {\n\t\t\tconst { dependencies, optionalDependencies } = require(join(__dirname, '../package.json'));\n\t\t\tconst all = Object.keys(dependencies).concat(Object.keys(optionalDependencies));\n\t\t\tfor (const key of all) {\n\t\t\t\tmodules.add(key);\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tthrow e;\n\t\t}\n\n\n\t\tconst checkImport = (node: any) => {\n\n\t\t\tif (node.type !== 'Literal' || typeof node.value !== 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node.parent.importKind === 'type') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!modules.has(node.value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'amdX'\n\t\t\t});\n\t\t};\n\n\t\treturn {\n\t\t\t['ImportExpression Literal']: checkImport,\n\t\t\t['ImportDeclaration Literal']: checkImport\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-declare-service-brand.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\n\nexport = new class DeclareServiceBrand implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tfixable: 'code',\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\treturn {\n\t\t\t['PropertyDefinition[key.name=\"_serviceBrand\"][value]']: (node: any) => {\n\t\t\t\treturn context.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: `The '_serviceBrand'-property should not have a value`,\n\t\t\t\t\tfix: (fixer) => {\n\t\t\t\t\t\treturn fixer.replaceText(node, 'declare _serviceBrand: undefined;');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-ensure-no-disposables-leak-in-test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { Node } from 'estree';\n\nexport = new class EnsureNoDisposablesAreLeakedInTestSuite implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\ttype: 'problem',\n\t\tmessages: {\n\t\t\tensure: 'Suites should include a call to `ensureNoDisposablesAreLeakedInTestSuite()` to ensure no disposables are leaked in tests.'\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tconst config = <{ exclude: string[] }>context.options[0];\n\n\t\tconst needle = context.getFilename().replace(/\\\\/g, '/');\n\t\tif (config.exclude.some((e) => needle.endsWith(e))) {\n\t\t\treturn {};\n\t\t}\n\n\t\treturn {\n\t\t\t[`Program > ExpressionStatement > CallExpression[callee.name='suite']`]: (node: Node) => {\n\t\t\t\tconst src = context.getSourceCode().getText(node);\n\t\t\t\tif (!src.includes('ensureNoDisposablesAreLeakedInTestSuite(')) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'ensure',\n\t\t\t\t\t\tfix: (fixer) => {\n\t\t\t\t\t\t\tconst updatedSrc = src.replace(/(suite\\(.*\\n)/, '$1\\n\\tensureNoDisposablesAreLeakedInTestSuite();\\n');\n\t\t\t\t\t\t\treturn fixer.replaceText(node, updatedSrc);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-import-patterns.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\nimport * as path from 'path';\nimport minimatch from 'minimatch';\nimport { createImportRuleListener } from './utils';\n\nconst REPO_ROOT = path.normalize(path.join(__dirname, '../'));\n\ninterface ConditionalPattern {\n\twhen?: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test';\n\tpattern: string;\n}\n\ninterface RawImportPatternsConfig {\n\ttarget: string;\n\tlayer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-utility' | 'electron-main';\n\ttest?: boolean;\n\trestrictions: string | (string | ConditionalPattern)[];\n}\n\ninterface LayerAllowRule {\n\twhen: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test';\n\tallow: string[];\n}\n\ntype RawOption = RawImportPatternsConfig | LayerAllowRule;\n\nfunction isLayerAllowRule(option: RawOption): option is LayerAllowRule {\n\treturn !!((<LayerAllowRule>option).when && (<LayerAllowRule>option).allow);\n}\n\ninterface ImportPatternsConfig {\n\ttarget: string;\n\trestrictions: string[];\n}\n\nexport = new class implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tbadImport: 'Imports violates \\'{{restrictions}}\\' restrictions. See https://github.com/microsoft/vscode/wiki/Source-Code-Organization',\n\t\t\tbadFilename: 'Missing definition in `code-import-patterns` for this file. Define rules at https://github.com/microsoft/vscode/blob/main/eslint.config.js',\n\t\t\tbadAbsolute: 'Imports have to be relative to support ESM',\n\t\t\tbadExtension: 'Imports have to end with `.js` or `.css` to support ESM',\n\t\t},\n\t\tdocs: {\n\t\t\turl: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tconst options = <RawOption[]>context.options;\n\t\tconst configs = this._processOptions(options);\n\t\tconst relativeFilename = getRelativeFilename(context);\n\n\t\tfor (const config of configs) {\n\t\t\tif (minimatch(relativeFilename, config.target)) {\n\t\t\t\treturn createImportRuleListener((node, value) => this._checkImport(context, config, node, value));\n\t\t\t}\n\t\t}\n\n\t\tcontext.report({\n\t\t\tloc: { line: 1, column: 0 },\n\t\t\tmessageId: 'badFilename'\n\t\t});\n\n\t\treturn {};\n\t}\n\n\tprivate _optionsCache = new WeakMap<RawOption[], ImportPatternsConfig[]>();\n\n\tprivate _processOptions(options: RawOption[]): ImportPatternsConfig[] {\n\t\tif (this._optionsCache.has(options)) {\n\t\t\treturn this._optionsCache.get(options)!;\n\t\t}\n\n\t\ttype Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-utility' | 'electron-main';\n\n\t\tinterface ILayerRule {\n\t\t\tlayer: Layer;\n\t\t\tdeps: string;\n\t\t\tisBrowser?: boolean;\n\t\t\tisNode?: boolean;\n\t\t\tisElectron?: boolean;\n\t\t}\n\n\t\tfunction orSegment(variants: Layer[]): string {\n\t\t\treturn (variants.length === 1 ? variants[0] : `{${variants.join(',')}}`);\n\t\t}\n\n\t\tconst layerRules: ILayerRule[] = [\n\t\t\t{ layer: 'common', deps: orSegment(['common']) },\n\t\t\t{ layer: 'worker', deps: orSegment(['common', 'worker']) },\n\t\t\t{ layer: 'browser', deps: orSegment(['common', 'browser']), isBrowser: true },\n\t\t\t{ layer: 'electron-sandbox', deps: orSegment(['common', 'browser', 'electron-sandbox']), isBrowser: true },\n\t\t\t{ layer: 'node', deps: orSegment(['common', 'node']), isNode: true },\n\t\t\t{ layer: 'electron-utility', deps: orSegment(['common', 'node', 'electron-utility']), isNode: true, isElectron: true },\n\t\t\t{ layer: 'electron-main', deps: orSegment(['common', 'node', 'electron-utility', 'electron-main']), isNode: true, isElectron: true },\n\t\t];\n\n\t\tlet browserAllow: string[] = [];\n\t\tlet nodeAllow: string[] = [];\n\t\tlet electronAllow: string[] = [];\n\t\tlet testAllow: string[] = [];\n\t\tfor (const option of options) {\n\t\t\tif (isLayerAllowRule(option)) {\n\t\t\t\tif (option.when === 'hasBrowser') {\n\t\t\t\t\tbrowserAllow = option.allow.slice(0);\n\t\t\t\t} else if (option.when === 'hasNode') {\n\t\t\t\t\tnodeAllow = option.allow.slice(0);\n\t\t\t\t} else if (option.when === 'hasElectron') {\n\t\t\t\t\telectronAllow = option.allow.slice(0);\n\t\t\t\t} else if (option.when === 'test') {\n\t\t\t\t\ttestAllow = option.allow.slice(0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction findLayer(layer: Layer): ILayerRule | null {\n\t\t\tfor (const layerRule of layerRules) {\n\t\t\t\tif (layerRule.layer === layer) {\n\t\t\t\t\treturn layerRule;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction generateConfig(layerRule: ILayerRule, target: string, rawRestrictions: (string | ConditionalPattern)[]): [ImportPatternsConfig, ImportPatternsConfig] {\n\t\t\tconst restrictions: string[] = [];\n\t\t\tconst testRestrictions: string[] = [...testAllow];\n\n\t\t\tif (layerRule.isBrowser) {\n\t\t\t\trestrictions.push(...browserAllow);\n\t\t\t}\n\n\t\t\tif (layerRule.isNode) {\n\t\t\t\trestrictions.push(...nodeAllow);\n\t\t\t}\n\n\t\t\tif (layerRule.isElectron) {\n\t\t\t\trestrictions.push(...electronAllow);\n\t\t\t}\n\n\t\t\tfor (const rawRestriction of rawRestrictions) {\n\t\t\t\tlet importPattern: string;\n\t\t\t\tlet when: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test' | undefined = undefined;\n\t\t\t\tif (typeof rawRestriction === 'string') {\n\t\t\t\t\timportPattern = rawRestriction;\n\t\t\t\t} else {\n\t\t\t\t\timportPattern = rawRestriction.pattern;\n\t\t\t\t\twhen = rawRestriction.when;\n\t\t\t\t}\n\t\t\t\tif (typeof when === 'undefined'\n\t\t\t\t\t|| (when === 'hasBrowser' && layerRule.isBrowser)\n\t\t\t\t\t|| (when === 'hasNode' && layerRule.isNode)\n\t\t\t\t\t|| (when === 'hasElectron' && layerRule.isElectron)\n\t\t\t\t) {\n\t\t\t\t\trestrictions.push(importPattern.replace(/\\/\\~$/, `/${layerRule.deps}/**`));\n\t\t\t\t\ttestRestrictions.push(importPattern.replace(/\\/\\~$/, `/test/${layerRule.deps}/**`));\n\t\t\t\t} else if (when === 'test') {\n\t\t\t\t\ttestRestrictions.push(importPattern.replace(/\\/\\~$/, `/${layerRule.deps}/**`));\n\t\t\t\t\ttestRestrictions.push(importPattern.replace(/\\/\\~$/, `/test/${layerRule.deps}/**`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttestRestrictions.push(...restrictions);\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttarget: target.replace(/\\/\\~$/, `/${layerRule.layer}/**`),\n\t\t\t\t\trestrictions: restrictions\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttarget: target.replace(/\\/\\~$/, `/test/${layerRule.layer}/**`),\n\t\t\t\t\trestrictions: testRestrictions\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\n\t\tconst configs: ImportPatternsConfig[] = [];\n\t\tfor (const option of options) {\n\t\t\tif (isLayerAllowRule(option)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst target = option.target;\n\t\t\tconst targetIsVS = /^src\\/vs\\//.test(target);\n\t\t\tconst restrictions = (typeof option.restrictions === 'string' ? [option.restrictions] : option.restrictions).slice(0);\n\n\t\t\tif (targetIsVS) {\n\t\t\t\t// Always add \"vs/nls\" and \"vs/amdX\"\n\t\t\t\trestrictions.push('vs/nls.js');\n\t\t\t\trestrictions.push('vs/amdX.js'); // TODO@jrieken remove after ESM is real\n\t\t\t}\n\n\t\t\tif (targetIsVS && option.layer) {\n\t\t\t\t// single layer => simple substitution for /~\n\t\t\t\tconst layerRule = findLayer(option.layer);\n\t\t\t\tif (layerRule) {\n\t\t\t\t\tconst [config, testConfig] = generateConfig(layerRule, target, restrictions);\n\t\t\t\t\tif (option.test) {\n\t\t\t\t\t\tconfigs.push(testConfig);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfigs.push(config);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (targetIsVS && /\\/\\~$/.test(target)) {\n\t\t\t\t// generate all layers\n\t\t\t\tfor (const layerRule of layerRules) {\n\t\t\t\t\tconst [config, testConfig] = generateConfig(layerRule, target, restrictions);\n\t\t\t\t\tconfigs.push(config);\n\t\t\t\t\tconfigs.push(testConfig);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconfigs.push({ target, restrictions: <string[]>restrictions.filter(r => typeof r === 'string') });\n\t\t\t}\n\t\t}\n\t\tthis._optionsCache.set(options, configs);\n\t\treturn configs;\n\t}\n\n\tprivate _checkImport(context: eslint.Rule.RuleContext, config: ImportPatternsConfig, node: TSESTree.Node, importPath: string) {\n\t\tconst targetIsVS = /^src\\/vs\\//.test(getRelativeFilename(context));\n\t\tif (targetIsVS) {\n\n\t\t\t// ESM: check for import ending with \".js\" or \".css\"\n\t\t\tif (importPath[0] === '.' && !importPath.endsWith('.js') && !importPath.endsWith('.css')) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: node.loc,\n\t\t\t\t\tmessageId: 'badExtension',\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// check for import being relative\n\t\t\tif (importPath.startsWith('vs/')) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: node.loc,\n\t\t\t\t\tmessageId: 'badAbsolute',\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// resolve relative paths\n\t\tif (importPath[0] === '.') {\n\t\t\tconst relativeFilename = getRelativeFilename(context);\n\t\t\timportPath = path.posix.join(path.posix.dirname(relativeFilename), importPath);\n\t\t\tif (/^src\\/vs\\//.test(importPath)) {\n\t\t\t\t// resolve using base url\n\t\t\t\timportPath = importPath.substring('src/'.length);\n\t\t\t}\n\t\t}\n\n\t\tconst restrictions = config.restrictions;\n\n\t\tlet matched = false;\n\t\tfor (const pattern of restrictions) {\n\t\t\tif (minimatch(importPath, pattern)) {\n\t\t\t\tmatched = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!matched) {\n\t\t\t// None of the restrictions matched\n\t\t\tcontext.report({\n\t\t\t\tloc: node.loc,\n\t\t\t\tmessageId: 'badImport',\n\t\t\t\tdata: {\n\t\t\t\t\trestrictions: restrictions.join(' or ')\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n\n/**\n * Returns the filename relative to the project root and using `/` as separators\n */\nfunction getRelativeFilename(context: eslint.Rule.RuleContext): string {\n\tconst filename = path.normalize(context.getFilename());\n\treturn filename.substring(REPO_ROOT.length).replace(/\\\\/g, '/');\n}\n"
  },
  {
    "path": ".eslint-plugin-local/code-layering.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { join, dirname } from 'path';\nimport { createImportRuleListener } from './utils';\n\ntype Config = {\n\tallowed: Set<string>;\n\tdisallowed: Set<string>;\n};\n\nexport = new class implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tlayerbreaker: 'Bad layering. You are not allowed to access {{from}} from here, allowed layers are: [{{allowed}}]'\n\t\t},\n\t\tdocs: {\n\t\t\turl: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tadditionalProperties: {\n\t\t\t\t\ttype: 'array',\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst fileDirname = dirname(context.getFilename());\n\t\tconst parts = fileDirname.split(/\\\\|\\//);\n\t\tconst ruleArgs = <Record<string, string[]>>context.options[0];\n\n\t\tlet config: Config | undefined;\n\t\tfor (let i = parts.length - 1; i >= 0; i--) {\n\t\t\tif (ruleArgs[parts[i]]) {\n\t\t\t\tconfig = {\n\t\t\t\t\tallowed: new Set(ruleArgs[parts[i]]).add(parts[i]),\n\t\t\t\t\tdisallowed: new Set()\n\t\t\t\t};\n\t\t\t\tObject.keys(ruleArgs).forEach(key => {\n\t\t\t\t\tif (!config!.allowed.has(key)) {\n\t\t\t\t\t\tconfig!.disallowed.add(key);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!config) {\n\t\t\t// nothing\n\t\t\treturn {};\n\t\t}\n\n\t\treturn createImportRuleListener((node, path) => {\n\t\t\tif (path[0] === '.') {\n\t\t\t\tpath = join(dirname(context.getFilename()), path);\n\t\t\t}\n\n\t\t\tconst parts = dirname(path).split(/\\\\|\\//);\n\t\t\tfor (let i = parts.length - 1; i >= 0; i--) {\n\t\t\t\tconst part = parts[i];\n\n\t\t\t\tif (config!.allowed.has(part)) {\n\t\t\t\t\t// GOOD - same layer\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (config!.disallowed.has(part)) {\n\t\t\t\t\t// BAD - wrong layer\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\tmessageId: 'layerbreaker',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfrom: part,\n\t\t\t\t\t\t\tallowed: [...config!.allowed.keys()].join(', ')\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n"
  },
  {
    "path": ".eslint-plugin-local/code-limited-top-functions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { dirname, relative } from 'path';\nimport minimatch from 'minimatch';\n\nexport = new class implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tlayerbreaker: 'You are only allowed to define limited top level functions.'\n\t\t},\n\t\tschema: {\n\t\t\ttype: 'array',\n\t\t\titems: {\n\t\t\t\ttype: 'object',\n\t\t\t\tadditionalProperties: {\n\t\t\t\t\ttype: 'array',\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tlet fileRelativePath = relative(dirname(__dirname), context.getFilename());\n\t\tif (!fileRelativePath.endsWith('/')) {\n\t\t\tfileRelativePath += '/';\n\t\t}\n\t\tconst ruleArgs = <Record<string, string[]>>context.options[0];\n\n\t\tconst matchingKey = Object.keys(ruleArgs).find(key => fileRelativePath.startsWith(key) || minimatch(fileRelativePath, key));\n\t\tif (!matchingKey) {\n\t\t\t// nothing\n\t\t\treturn {};\n\t\t}\n\n\t\tconst restrictedFunctions = ruleArgs[matchingKey];\n\n\t\treturn {\n\t\t\tFunctionDeclaration: (node: any) => {\n\t\t\t\tconst isTopLevel = node.parent.type === 'Program';\n\t\t\t\tconst functionName = node.id.name;\n\t\t\t\tif (isTopLevel && !restrictedFunctions.includes(node.id.name)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: `Top-level function '${functionName}' is restricted in this file. Allowed functions are: ${restrictedFunctions.join(', ')}.`\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tExportNamedDeclaration(node: any) {\n\t\t\t\tif (node.declaration && node.declaration.type === 'FunctionDeclaration') {\n\t\t\t\t\tconst functionName = node.declaration.id.name;\n\t\t\t\t\tconst isTopLevel = node.parent.type === 'Program';\n\t\t\t\t\tif (isTopLevel && !restrictedFunctions.includes(node.declaration.id.name)) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessage: `Top-level function '${functionName}' is restricted in this file. Allowed functions are: ${restrictedFunctions.join(', ')}.`\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-must-use-result.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\nconst VALID_USES = new Set<TSESTree.AST_NODE_TYPES | undefined>([\n\tTSESTree.AST_NODE_TYPES.AwaitExpression,\n\tTSESTree.AST_NODE_TYPES.VariableDeclarator,\n]);\n\nexport = new class MustUseResults implements eslint.Rule.RuleModule {\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tschema: false\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst config = <{ message: string; functions: string[] }[]>context.options[0];\n\t\tconst listener: eslint.Rule.RuleListener = {};\n\n\t\tfor (const { message, functions } of config) {\n\t\t\tfor (const fn of functions) {\n\t\t\t\tconst query = `CallExpression[callee.property.name='${fn}'], CallExpression[callee.name='${fn}']`;\n\t\t\t\tlistener[query] = (node: any) => {\n\t\t\t\t\tconst cast: TSESTree.CallExpression = node;\n\t\t\t\t\tif (!VALID_USES.has(cast.parent?.type)) {\n\t\t\t\t\t\tcontext.report({ node, message });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn listener;\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-must-use-super-dispose.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\n\nexport = new class NoAsyncSuite implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tfunction doesCallSuperDispose(node: any) {\n\n\t\t\tif (!node.override) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst body = context.getSourceCode().getText(node);\n\n\t\t\tif (body.includes('super.dispose')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: 'dispose() should call super.dispose()'\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\t['MethodDefinition[override][key.name=\"dispose\"]']: doesCallSuperDispose,\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-dangerous-type-assertions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\nexport = new class NoDangerousTypeAssertions implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\t// Disable in tests for now\n\t\tif (context.getFilename().includes('.test')) {\n\t\t\treturn {};\n\t\t}\n\n\t\treturn {\n\t\t\t// Disallow type assertions on object literals: <T>{ ... } or {} as T\n\t\t\t['TSTypeAssertion > ObjectExpression, TSAsExpression > ObjectExpression']: (node: any) => {\n\t\t\t\tconst objectNode = node as TSESTree.Node;\n\n\t\t\t\tconst parent = objectNode.parent as TSESTree.TSTypeAssertion | TSESTree.TSAsExpression;\n\t\t\t\tif (\n\t\t\t\t\t// Allow `as const` assertions\n\t\t\t\t\t(parent.typeAnnotation.type === 'TSTypeReference' && parent.typeAnnotation.typeName.type === 'Identifier' && parent.typeAnnotation.typeName.name === 'const')\n\n\t\t\t\t\t// For also now still allow `any` casts\n\t\t\t\t\t|| (parent.typeAnnotation.type === 'TSAnyKeyword')\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: `Don't use type assertions for creating objects as this can hide type errors.`\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-global-document-listener.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\n\nexport = new class NoGlobalDocumentListener implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\treturn {\n\t\t\tCallExpression(node: any) {\n\t\t\t\tif (\n\t\t\t\t\t(\n\t\t\t\t\t\tnode.callee.name === 'addDisposableListener' ||\n\t\t\t\t\t\tnode.callee.property?.name === 'addDisposableListener'\n\t\t\t\t\t) &&\n\t\t\t\t\tnode.arguments.length > 0 &&\n\t\t\t\t\tnode.arguments[0].type === 'Identifier' &&\n\t\t\t\t\tnode.arguments[0].name === 'document'\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: 'Use <targetWindow>.document to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-native-private.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\n\nexport = new class ApiProviderNaming implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tslow: 'Native private fields are much slower and should only be used when needed. Ignore this warning if you know what you are doing, use compile-time private otherwise. See https://github.com/microsoft/vscode/issues/185991#issuecomment-1614468158 for details',\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\treturn {\n\t\t\t['PropertyDefinition PrivateIdentifier']: (node: any) => {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'slow'\n\t\t\t\t});\n\t\t\t},\n\t\t\t['MethodDefinition PrivateIdentifier']: (node: any) => {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'slow'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-nls-in-standalone-editor.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { join } from 'path';\nimport { createImportRuleListener } from './utils';\n\nexport = new class NoNlsInStandaloneEditorRule implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tnoNls: 'Not allowed to import vs/nls in standalone editor modules. Use standaloneStrings.ts'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst fileName = context.getFilename();\n\t\tif (\n\t\t\t/vs(\\/|\\\\)editor(\\/|\\\\)standalone(\\/|\\\\)/.test(fileName)\n\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)common(\\/|\\\\)standalone(\\/|\\\\)/.test(fileName)\n\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)editor.api/.test(fileName)\n\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)editor.main/.test(fileName)\n\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)editor.worker.start/.test(fileName)\n\t\t) {\n\t\t\treturn createImportRuleListener((node, path) => {\n\t\t\t\t// resolve relative paths\n\t\t\t\tif (path[0] === '.') {\n\t\t\t\t\tpath = join(context.getFilename(), path);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t/vs(\\/|\\\\)nls/.test(path)\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\tmessageId: 'noNls'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn {};\n\t}\n};\n\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-potentially-unsafe-disposables.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\n\n/**\n * Checks for potentially unsafe usage of `DisposableStore` / `MutableDisposable`.\n *\n * These have been the source of leaks in the past.\n */\nexport = new class implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tfunction checkVariableDeclaration(inNode: any) {\n\t\t\tcontext.report({\n\t\t\t\tnode: inNode,\n\t\t\t\tmessage: `Use const for 'DisposableStore' to avoid leaks by accidental reassignment.`\n\t\t\t});\n\t\t}\n\n\t\tfunction checkProperty(inNode: any) {\n\t\t\tcontext.report({\n\t\t\t\tnode: inNode,\n\t\t\t\tmessage: `Use readonly for DisposableStore/MutableDisposable to avoid leaks through accidental reassignment.`\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\t'VariableDeclaration[kind!=\"const\"] NewExpression[callee.name=\"DisposableStore\"]': checkVariableDeclaration,\n\n\t\t\t'PropertyDefinition[readonly!=true][typeAnnotation.typeAnnotation.typeName.name=/DisposableStore|MutableDisposable/]': checkProperty,\n\t\t\t'PropertyDefinition[readonly!=true] NewExpression[callee.name=/DisposableStore|MutableDisposable/]': checkProperty,\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-runtime-import.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TSESTree } from '@typescript-eslint/typescript-estree';\nimport * as eslint from 'eslint';\nimport { dirname, join, relative } from 'path';\nimport minimatch from 'minimatch';\nimport { createImportRuleListener } from './utils';\n\nexport = new class implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tlayerbreaker: 'You are only allowed to import {{import}} from here using `import type ...`.'\n\t\t},\n\t\tschema: {\n\t\t\ttype: 'array',\n\t\t\titems: {\n\t\t\t\ttype: 'object',\n\t\t\t\tadditionalProperties: {\n\t\t\t\t\ttype: 'array',\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tlet fileRelativePath = relative(dirname(__dirname), context.getFilename());\n\t\tif (!fileRelativePath.endsWith('/')) {\n\t\t\tfileRelativePath += '/';\n\t\t}\n\t\tconst ruleArgs = <Record<string, string[]>>context.options[0];\n\n\t\tconst matchingKey = Object.keys(ruleArgs).find(key => fileRelativePath.startsWith(key) || minimatch(fileRelativePath, key));\n\t\tif (!matchingKey) {\n\t\t\t// nothing\n\t\t\treturn {};\n\t\t}\n\n\t\tconst restrictedImports = ruleArgs[matchingKey];\n\t\treturn createImportRuleListener((node, path) => {\n\t\t\tif (path[0] === '.') {\n\t\t\t\tpath = join(dirname(context.getFilename()), path);\n\t\t\t}\n\n\t\t\tif ((\n\t\t\t\trestrictedImports.includes(path) || restrictedImports.some(restriction => minimatch(path, restriction))\n\t\t\t) && !(\n\t\t\t\t(node.parent?.type === TSESTree.AST_NODE_TYPES.ImportDeclaration && node.parent.importKind === 'type') ||\n\t\t\t\t(node.parent && 'exportKind' in node.parent && node.parent.exportKind === 'type'))) { // the export could be multiple types\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: node.parent!.loc,\n\t\t\t\t\tmessageId: 'layerbreaker',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\timport: path\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-standalone-editor.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { join } from 'path';\nimport { createImportRuleListener } from './utils';\n\nexport = new class NoNlsInStandaloneEditorRule implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tbadImport: 'Not allowed to import standalone editor modules.'\n\t\t},\n\t\tdocs: {\n\t\t\turl: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tif (/vs(\\/|\\\\)editor/.test(context.getFilename())) {\n\t\t\t// the vs/editor folder is allowed to use the standalone editor\n\t\t\treturn {};\n\t\t}\n\n\t\treturn createImportRuleListener((node, path) => {\n\n\t\t\t// resolve relative paths\n\t\t\tif (path[0] === '.') {\n\t\t\t\tpath = join(context.getFilename(), path);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t/vs(\\/|\\\\)editor(\\/|\\\\)standalone(\\/|\\\\)/.test(path)\n\t\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)common(\\/|\\\\)standalone(\\/|\\\\)/.test(path)\n\t\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)editor.api/.test(path)\n\t\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)editor.main/.test(path)\n\t\t\t\t|| /vs(\\/|\\\\)editor(\\/|\\\\)editor.worker.start/.test(path)\n\t\t\t) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: node.loc,\n\t\t\t\t\tmessageId: 'badImport'\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n};\n\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-static-self-ref.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\n/**\n * WORKAROUND for https://github.com/evanw/esbuild/issues/3823\n */\nexport = new class implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tfunction checkProperty(inNode: any) {\n\n\t\t\tconst classDeclaration = context.sourceCode.getAncestors(inNode).find(node => node.type === 'ClassDeclaration');\n\t\t\tconst propertyDefinition = <TSESTree.PropertyDefinition>inNode;\n\n\t\t\tif (!classDeclaration || !classDeclaration.id?.name) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!propertyDefinition.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst classCtor = classDeclaration.body.body.find(node => node.type === 'MethodDefinition' && node.kind === 'constructor');\n\n\t\t\tif (!classCtor) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst name = classDeclaration.id.name;\n\t\t\tconst valueText = context.sourceCode.getText(<any>propertyDefinition.value);\n\n\t\t\tif (valueText.includes(name + '.')) {\n\n\t\t\t\tif (classCtor.value?.type === 'FunctionExpression' && !classCtor.value.params.find((param: any) => param.type === 'TSParameterProperty' && param.decorators?.length > 0)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: propertyDefinition.value.loc,\n\t\t\t\t\tmessage: `Static properties in decorated classes should not reference the class they are defined in. Use 'this' instead. This is a workaround for https://github.com/evanw/esbuild/issues/3823.`\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\t'PropertyDefinition[static=true]': checkProperty,\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-test-async-suite.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TSESTree } from '@typescript-eslint/utils';\nimport * as eslint from 'eslint';\n\nfunction isCallExpression(node: TSESTree.Node): node is TSESTree.CallExpression {\n\treturn node.type === 'CallExpression';\n}\n\nfunction isFunctionExpression(node: TSESTree.Node): node is TSESTree.FunctionExpression {\n\treturn node.type.includes('FunctionExpression');\n}\n\nexport = new class NoAsyncSuite implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tfunction hasAsyncSuite(node: any) {\n\t\t\tif (isCallExpression(node) && node.arguments.length >= 2 && isFunctionExpression(node.arguments[1]) && node.arguments[1].async) {\n\t\t\t\treturn context.report({\n\t\t\t\t\tnode: node as any,\n\t\t\t\t\tmessage: 'suite factory function should never be async'\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t['CallExpression[callee.name=/suite$/][arguments]']: hasAsyncSuite,\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-test-only.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\n\nexport = new class NoTestOnly implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\treturn {\n\t\t\t['MemberExpression[object.name=/^(test|suite)$/][property.name=\"only\"]']: (node: any) => {\n\t\t\t\treturn context.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: 'only is a dev-time tool and CANNOT be pushed'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-unexternalized-strings.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils';\n\nfunction isStringLiteral(node: TSESTree.Node | null | undefined): node is TSESTree.StringLiteral {\n\treturn !!node && node.type === AST_NODE_TYPES.Literal && typeof node.value === 'string';\n}\n\nfunction isDoubleQuoted(node: TSESTree.StringLiteral): boolean {\n\treturn node.raw[0] === '\"' && node.raw[node.raw.length - 1] === '\"';\n}\n\nexport = new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {\n\n\tprivate static _rNlsKeys = /^[_a-zA-Z0-9][ .\\-_a-zA-Z0-9]*$/;\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tdoubleQuoted: 'Only use double-quoted strings for externalized strings.',\n\t\t\tbadKey: 'The key \\'{{key}}\\' doesn\\'t conform to a valid localize identifier.',\n\t\t\tduplicateKey: 'Duplicate key \\'{{key}}\\' with different message value.',\n\t\t\tbadMessage: 'Message argument to \\'{{message}}\\' must be a string literal.'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst externalizedStringLiterals = new Map<string, { call: TSESTree.CallExpression; message: TSESTree.Node }[]>();\n\t\tconst doubleQuotedStringLiterals = new Set<TSESTree.Node>();\n\n\t\tfunction collectDoubleQuotedStrings(node: TSESTree.Literal) {\n\t\t\tif (isStringLiteral(node) && isDoubleQuoted(node)) {\n\t\t\t\tdoubleQuotedStringLiterals.add(node);\n\t\t\t}\n\t\t}\n\n\t\tfunction visitLocalizeCall(node: TSESTree.CallExpression) {\n\n\t\t\t// localize(key, message)\n\t\t\tconst [keyNode, messageNode] = (<TSESTree.CallExpression>node).arguments;\n\n\t\t\t// (1)\n\t\t\t// extract key so that it can be checked later\n\t\t\tlet key: string | undefined;\n\t\t\tif (isStringLiteral(keyNode)) {\n\t\t\t\tdoubleQuotedStringLiterals.delete(keyNode);\n\t\t\t\tkey = keyNode.value;\n\n\t\t\t} else if (keyNode.type === AST_NODE_TYPES.ObjectExpression) {\n\t\t\t\tfor (const property of keyNode.properties) {\n\t\t\t\t\tif (property.type === AST_NODE_TYPES.Property && !property.computed) {\n\t\t\t\t\t\tif (property.key.type === AST_NODE_TYPES.Identifier && property.key.name === 'key') {\n\t\t\t\t\t\t\tif (isStringLiteral(property.value)) {\n\t\t\t\t\t\t\t\tdoubleQuotedStringLiterals.delete(property.value);\n\t\t\t\t\t\t\t\tkey = property.value.value;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof key === 'string') {\n\t\t\t\tlet array = externalizedStringLiterals.get(key);\n\t\t\t\tif (!array) {\n\t\t\t\t\tarray = [];\n\t\t\t\t\texternalizedStringLiterals.set(key, array);\n\t\t\t\t}\n\t\t\t\tarray.push({ call: node, message: messageNode });\n\t\t\t}\n\n\t\t\t// (2)\n\t\t\t// remove message-argument from doubleQuoted list and make\n\t\t\t// sure it is a string-literal\n\t\t\tdoubleQuotedStringLiterals.delete(messageNode);\n\t\t\tif (!isStringLiteral(messageNode)) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tloc: messageNode.loc,\n\t\t\t\t\tmessageId: 'badMessage',\n\t\t\t\t\tdata: { message: context.getSourceCode().getText(<any>node) }\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction visitL10NCall(node: TSESTree.CallExpression) {\n\n\t\t\t// localize(key, message)\n\t\t\tconst [messageNode] = (<TSESTree.CallExpression>node).arguments;\n\n\t\t\t// remove message-argument from doubleQuoted list and make\n\t\t\t// sure it is a string-literal\n\t\t\tif (isStringLiteral(messageNode)) {\n\t\t\t\tdoubleQuotedStringLiterals.delete(messageNode);\n\t\t\t} else if (messageNode.type === AST_NODE_TYPES.ObjectExpression) {\n\t\t\t\tfor (const prop of messageNode.properties) {\n\t\t\t\t\tif (prop.type === AST_NODE_TYPES.Property) {\n\t\t\t\t\t\tif (prop.key.type === AST_NODE_TYPES.Identifier && prop.key.name === 'message') {\n\t\t\t\t\t\t\tdoubleQuotedStringLiterals.delete(prop.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction reportBadStringsAndBadKeys() {\n\t\t\t// (1)\n\t\t\t// report all strings that are in double quotes\n\t\t\tfor (const node of doubleQuotedStringLiterals) {\n\t\t\t\tcontext.report({ loc: node.loc, messageId: 'doubleQuoted' });\n\t\t\t}\n\n\t\t\tfor (const [key, values] of externalizedStringLiterals) {\n\n\t\t\t\t// (2)\n\t\t\t\t// report all invalid NLS keys\n\t\t\t\tif (!key.match(NoUnexternalizedStrings._rNlsKeys)) {\n\t\t\t\t\tfor (const value of values) {\n\t\t\t\t\t\tcontext.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// (2)\n\t\t\t\t// report all invalid duplicates (same key, different message)\n\t\t\t\tif (values.length > 1) {\n\t\t\t\t\tfor (let i = 1; i < values.length; i++) {\n\t\t\t\t\t\tif (context.getSourceCode().getText(<any>values[i - 1].message) !== context.getSourceCode().getText(<any>values[i].message)) {\n\t\t\t\t\t\t\tcontext.report({ loc: values[i].call.loc, messageId: 'duplicateKey', data: { key } });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t['Literal']: (node: any) => collectDoubleQuotedStrings(node),\n\t\t\t['ExpressionStatement[directive] Literal:exit']: (node: any) => doubleQuotedStringLiterals.delete(node),\n\n\t\t\t// localize(...)\n\t\t\t['CallExpression[callee.type=\"MemberExpression\"][callee.object.name=\"nls\"][callee.property.name=\"localize\"]:exit']: (node: any) => visitLocalizeCall(node),\n\n\t\t\t// localize2(...)\n\t\t\t['CallExpression[callee.type=\"MemberExpression\"][callee.object.name=\"nls\"][callee.property.name=\"localize2\"]:exit']: (node: any) => visitLocalizeCall(node),\n\n\t\t\t// vscode.l10n.t(...)\n\t\t\t['CallExpression[callee.type=\"MemberExpression\"][callee.object.property.name=\"l10n\"][callee.property.name=\"t\"]:exit']: (node: any) => visitL10NCall(node),\n\n\t\t\t// l10n.t(...)\n\t\t\t['CallExpression[callee.object.name=\"l10n\"][callee.property.name=\"t\"]:exit']: (node: any) => visitL10NCall(node),\n\n\t\t\t['CallExpression[callee.name=\"localize\"][arguments.length>=2]:exit']: (node: any) => visitLocalizeCall(node),\n\t\t\t['CallExpression[callee.name=\"localize2\"][arguments.length>=2]:exit']: (node: any) => visitLocalizeCall(node),\n\t\t\t['Program:exit']: reportBadStringsAndBadKeys,\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-no-unused-expressions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// FORKED FROM https://github.com/eslint/eslint/blob/b23ad0d789a909baf8d7c41a35bc53df932eaf30/lib/rules/no-unused-expressions.js\n// and added support for `OptionalCallExpression`, see https://github.com/facebook/create-react-app/issues/8107 and https://github.com/eslint/eslint/issues/12642\n\n/**\n * @fileoverview Flag expressions in statement position that do not side effect\n * @author Michael Ficarra\n */\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\nimport * as ESTree from 'estree';\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n\tmeta: {\n\t\ttype: 'suggestion',\n\n\t\tdocs: {\n\t\t\tdescription: 'disallow unused expressions',\n\t\t\tcategory: 'Best Practices',\n\t\t\trecommended: false,\n\t\t\turl: 'https://eslint.org/docs/rules/no-unused-expressions'\n\t\t},\n\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tallowShortCircuit: {\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\tdefault: false\n\t\t\t\t\t},\n\t\t\t\t\tallowTernary: {\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\tdefault: false\n\t\t\t\t\t},\n\t\t\t\t\tallowTaggedTemplates: {\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\tdefault: false\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false\n\t\t\t}\n\t\t]\n\t},\n\n\tcreate(context: eslint.Rule.RuleContext) {\n\t\tconst config = context.options[0] || {},\n\t\t\tallowShortCircuit = config.allowShortCircuit || false,\n\t\t\tallowTernary = config.allowTernary || false,\n\t\t\tallowTaggedTemplates = config.allowTaggedTemplates || false;\n\n\t\t \n\t\t/**\n\t\t * @param node any node\n\t\t * @returns whether the given node structurally represents a directive\n\t\t */\n\t\tfunction looksLikeDirective(node: TSESTree.Node): boolean {\n\t\t\treturn node.type === 'ExpressionStatement' &&\n\t\t\t\tnode.expression.type === 'Literal' && typeof node.expression.value === 'string';\n\t\t}\n\n\t\t \n\t\t/**\n\t\t * @param predicate ([a] -> Boolean) the function used to make the determination\n\t\t * @param list the input list\n\t\t * @returns the leading sequence of members in the given list that pass the given predicate\n\t\t */\n\t\tfunction takeWhile<T>(predicate: (item: T) => boolean, list: T[]): T[] {\n\t\t\tfor (let i = 0; i < list.length; ++i) {\n\t\t\t\tif (!predicate(list[i])) {\n\t\t\t\t\treturn list.slice(0, i);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn list.slice();\n\t\t}\n\n\t\t \n\t\t/**\n\t\t * @param node a Program or BlockStatement node\n\t\t * @returns the leading sequence of directive nodes in the given node's body\n\t\t */\n\t\tfunction directives(node: TSESTree.Program | TSESTree.BlockStatement): TSESTree.Node[] {\n\t\t\treturn takeWhile(looksLikeDirective, node.body);\n\t\t}\n\n\t\t \n\t\t/**\n\t\t * @param node any node\n\t\t * @param ancestors the given node's ancestors\n\t\t * @returns whether the given node is considered a directive in its current position\n\t\t */\n\t\tfunction isDirective(node: TSESTree.Node, ancestors: TSESTree.Node[]): boolean {\n\t\t\tconst parent = ancestors[ancestors.length - 1],\n\t\t\t\tgrandparent = ancestors[ancestors.length - 2];\n\n\t\t\treturn (parent.type === 'Program' || parent.type === 'BlockStatement' &&\n\t\t\t\t(/Function/u.test(grandparent.type))) &&\n\t\t\t\tdirectives(parent).indexOf(node) >= 0;\n\t\t}\n\n\t\t/**\n\t\t * Determines whether or not a given node is a valid expression. Recurses on short circuit eval and ternary nodes if enabled by flags.\n\t\t * @param node any node\n\t\t * @returns whether the given node is a valid expression\n\t\t */\n\t\tfunction isValidExpression(node: TSESTree.Node): boolean {\n\t\t\tif (allowTernary) {\n\n\t\t\t\t// Recursive check for ternary and logical expressions\n\t\t\t\tif (node.type === 'ConditionalExpression') {\n\t\t\t\t\treturn isValidExpression(node.consequent) && isValidExpression(node.alternate);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (allowShortCircuit) {\n\t\t\t\tif (node.type === 'LogicalExpression') {\n\t\t\t\t\treturn isValidExpression(node.right);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (allowTaggedTemplates && node.type === 'TaggedTemplateExpression') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (node.type === 'ExpressionStatement') {\n\t\t\t\treturn isValidExpression(node.expression);\n\t\t\t}\n\n\t\t\treturn /^(?:Assignment|OptionalCall|Call|New|Update|Yield|Await|Chain)Expression$/u.test(node.type) ||\n\t\t\t\t(node.type === 'UnaryExpression' && ['delete', 'void'].indexOf(node.operator) >= 0);\n\t\t}\n\n\t\treturn {\n\t\t\tExpressionStatement(node: TSESTree.ExpressionStatement) {\n\t\t\t\tif (!isValidExpression(node.expression) && !isDirective(node, <TSESTree.Node[]>context.sourceCode.getAncestors(node))) {\n\t\t\t\t\tcontext.report({ node: <ESTree.Node>node, message: `Expected an assignment or function call and instead saw an expression. ${node.expression}` });\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-parameter-properties-must-have-explicit-accessibility.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\n/**\n * Enforces that all parameter properties have an explicit access modifier (public, protected, private).\n *\n * This catches a common bug where a service is accidentally made public by simply writing: `readonly prop: Foo`\n */\nexport = new class implements eslint.Rule.RuleModule {\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\tfunction check(inNode: any) {\n\t\t\tconst node: TSESTree.TSParameterProperty = inNode;\n\n\t\t\t// For now, only apply to injected services\n\t\t\tconst firstDecorator = node.decorators?.at(0);\n\t\t\tif (\n\t\t\t\tfirstDecorator?.expression.type !== 'Identifier'\n\t\t\t\t|| !firstDecorator.expression.name.endsWith('Service')\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!node.accessibility) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode: inNode,\n\t\t\t\t\tmessage: 'Parameter properties must have an explicit access modifier.'\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t['TSParameterProperty']: check,\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/code-translation-remind.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\nimport { readFileSync } from 'fs';\nimport { createImportRuleListener } from './utils';\n\n\nexport = new class TranslationRemind implements eslint.Rule.RuleModule {\n\n\tprivate static NLS_MODULE = 'vs/nls';\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tmissing: 'Please add \\'{{resource}}\\' to ./build/lib/i18n.resources.json file to use translations here.'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\treturn createImportRuleListener((node, path) => this._checkImport(context, node, path));\n\t}\n\n\tprivate _checkImport(context: eslint.Rule.RuleContext, node: TSESTree.Node, path: string) {\n\n\t\tif (path !== TranslationRemind.NLS_MODULE) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentFile = context.getFilename();\n\t\tconst matchService = currentFile.match(/vs\\/workbench\\/services\\/\\w+/);\n\t\tconst matchPart = currentFile.match(/vs\\/workbench\\/contrib\\/\\w+/);\n\t\tif (!matchService && !matchPart) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resource = matchService ? matchService[0] : matchPart![0];\n\t\tlet resourceDefined = false;\n\n\t\tlet json;\n\t\ttry {\n\t\t\tjson = readFileSync('./build/lib/i18n.resources.json', 'utf8');\n\t\t} catch (e) {\n\t\t\tconsole.error('[translation-remind rule]: File with resources to pull from Transifex was not found. Aborting translation resource check for newly defined workbench part/service.');\n\t\t\treturn;\n\t\t}\n\t\tconst workbenchResources = JSON.parse(json).workbench;\n\n\t\tworkbenchResources.forEach((existingResource: any) => {\n\t\t\tif (existingResource.name === resource) {\n\t\t\t\tresourceDefined = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\n\t\tif (!resourceDefined) {\n\t\t\tcontext.report({\n\t\t\t\tloc: node.loc,\n\t\t\t\tmessageId: 'missing',\n\t\t\t\tdata: { resource }\n\t\t\t});\n\t\t}\n\t}\n};\n\n"
  },
  {
    "path": ".eslint-plugin-local/index.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst glob = require('glob');\nconst path = require('path');\n\nrequire('ts-node').register({ experimentalResolver: true, transpileOnly: true });\n\n// Re-export all .ts files as rules\nconst rules = {};\nglob.sync(`${__dirname}/*.ts`).forEach((file) => {\n\trules[path.basename(file, '.ts')] = require(file);\n});\n\nexports.rules = rules;\n"
  },
  {
    "path": ".eslint-plugin-local/package.json",
    "content": "{\n\t\"type\": \"commonjs\"\n}\n"
  },
  {
    "path": ".eslint-plugin-local/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"es2020\",\n\t\t\"lib\": [\n\t\t\t\"ES2020\"\n\t\t],\n\t\t\"module\": \"commonjs\",\n\t\t\"esModuleInterop\": true,\n\t\t\"alwaysStrict\": true,\n\t\t\"allowJs\": true,\n\t\t\"strict\": true,\n\t\t\"exactOptionalPropertyTypes\": false,\n\t\t\"useUnknownInCatchVariables\": false,\n\t\t\"noUnusedLocals\": true,\n\t\t\"noUnusedParameters\": true,\n\t\t\"newLine\": \"lf\",\n\t\t\"noEmit\": true\n\t},\n\t\"include\": [\n\t\t\"**/*.ts\",\n\t\t\"**/*.js\"\n\t],\n\t\"exclude\": [\n\t\t\"node_modules/**\"\n\t]\n}\n"
  },
  {
    "path": ".eslint-plugin-local/utils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\nexport function createImportRuleListener(validateImport: (node: TSESTree.Literal, value: string) => any): eslint.Rule.RuleListener {\n\n\tfunction _checkImport(node: TSESTree.Node | null) {\n\t\tif (node && node.type === 'Literal' && typeof node.value === 'string') {\n\t\t\tvalidateImport(node, node.value);\n\t\t}\n\t}\n\n\treturn {\n\t\t// import ??? from 'module'\n\t\tImportDeclaration: (node: any) => {\n\t\t\t_checkImport((<TSESTree.ImportDeclaration>node).source);\n\t\t},\n\t\t// import('module').then(...) OR await import('module')\n\t\t['CallExpression[callee.type=\"Import\"][arguments.length=1] > Literal']: (node: any) => {\n\t\t\t_checkImport(node);\n\t\t},\n\t\t// import foo = ...\n\t\t['TSImportEqualsDeclaration > TSExternalModuleReference > Literal']: (node: any) => {\n\t\t\t_checkImport(node);\n\t\t},\n\t\t// export ?? from 'module'\n\t\tExportAllDeclaration: (node: any) => {\n\t\t\t_checkImport((<TSESTree.ExportAllDeclaration>node).source);\n\t\t},\n\t\t// export {foo} from 'module'\n\t\tExportNamedDeclaration: (node: any) => {\n\t\t\t_checkImport((<TSESTree.ExportNamedDeclaration>node).source);\n\t\t},\n\n\t};\n}\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-cancellation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils';\n\nexport = new class ApiProviderNaming implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tnoToken: 'Function lacks a cancellation token, preferable as last argument',\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\treturn {\n\t\t\t['TSInterfaceDeclaration[id.name=/.+Provider/] TSMethodSignature[key.name=/^(provide|resolve).+/]']: (node: any) => {\n\n\t\t\t\tlet found = false;\n\t\t\t\tfor (const param of (<TSESTree.TSMethodSignature>node).params) {\n\t\t\t\t\tif (param.type === AST_NODE_TYPES.Identifier) {\n\t\t\t\t\t\tfound = found || param.name === 'token';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'noToken'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-create-func.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils';\n\nexport = new class ApiLiteralOrTypes implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tdocs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines#creating-objects' },\n\t\tmessages: { sync: '`createXYZ`-functions are constructor-replacements and therefore must return sync', },\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\treturn {\n\t\t\t['TSDeclareFunction Identifier[name=/create.*/]']: (node: any) => {\n\n\t\t\t\tconst decl = <TSESTree.FunctionDeclaration>(<TSESTree.Identifier>node).parent;\n\n\t\t\t\tif (decl.returnType?.typeAnnotation.type !== AST_NODE_TYPES.TSTypeReference) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (decl.returnType.typeAnnotation.typeName.type !== AST_NODE_TYPES.Identifier) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst ident = decl.returnType.typeAnnotation.typeName.name;\n\t\t\t\tif (ident === 'Promise' || ident === 'Thenable') {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'sync'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-event-naming.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils';\n\nexport = new class ApiEventNaming implements eslint.Rule.RuleModule {\n\n\tprivate static _nameRegExp = /on(Did|Will)([A-Z][a-z]+)([A-Z][a-z]+)?/;\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tdocs: {\n\t\t\turl: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines#event-naming'\n\t\t},\n\t\tmessages: {\n\t\t\tnaming: 'Event names must follow this patten: `on[Did|Will]<Verb><Subject>`',\n\t\t\tverb: 'Unknown verb \\'{{verb}}\\' - is this really a verb? Iff so, then add this verb to the configuration',\n\t\t\tsubject: 'Unknown subject \\'{{subject}}\\' - This subject has not been used before but it should refer to something in the API',\n\t\t\tunknown: 'UNKNOWN event declaration, lint-rule needs tweaking'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst config = <{ allowed: string[]; verbs: string[] }>context.options[0];\n\t\tconst allowed = new Set(config.allowed);\n\t\tconst verbs = new Set(config.verbs);\n\n\t\treturn {\n\t\t\t['TSTypeAnnotation TSTypeReference Identifier[name=\"Event\"]']: (node: any) => {\n\n\t\t\t\tconst def = (<TSESTree.Identifier>node).parent?.parent?.parent;\n\t\t\t\tconst ident = this.getIdent(def);\n\n\t\t\t\tif (!ident) {\n\t\t\t\t\t// event on unknown structure...\n\t\t\t\t\treturn context.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: 'unknown'\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (allowed.has(ident.name)) {\n\t\t\t\t\t// configured exception\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst match = ApiEventNaming._nameRegExp.exec(ident.name);\n\t\t\t\tif (!match) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: ident,\n\t\t\t\t\t\tmessageId: 'naming'\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// check that <verb> is spelled out (configured) as verb\n\t\t\t\tif (!verbs.has(match[2].toLowerCase())) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: ident,\n\t\t\t\t\t\tmessageId: 'verb',\n\t\t\t\t\t\tdata: { verb: match[2] }\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// check that a subject (if present) has occurred\n\t\t\t\tif (match[3]) {\n\t\t\t\t\tconst regex = new RegExp(match[3], 'ig');\n\t\t\t\t\tconst parts = context.getSourceCode().getText().split(regex);\n\t\t\t\t\tif (parts.length < 3) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: ident,\n\t\t\t\t\t\t\tmessageId: 'subject',\n\t\t\t\t\t\t\tdata: { subject: match[3] }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate getIdent(def: TSESTree.Node | undefined): TSESTree.Identifier | undefined {\n\t\tif (!def) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (def.type === AST_NODE_TYPES.Identifier) {\n\t\t\treturn def;\n\t\t} else if ((def.type === AST_NODE_TYPES.TSPropertySignature || def.type === AST_NODE_TYPES.PropertyDefinition) && def.key.type === AST_NODE_TYPES.Identifier) {\n\t\t\treturn def.key;\n\t\t}\n\n\t\treturn this.getIdent(def.parent);\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-interface-naming.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\nexport = new class ApiInterfaceNaming implements eslint.Rule.RuleModule {\n\n\tprivate static _nameRegExp = /^I[A-Z]/;\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tnaming: 'Interfaces must not be prefixed with uppercase `I`',\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\treturn {\n\t\t\t['TSInterfaceDeclaration Identifier']: (node: any) => {\n\n\t\t\t\tconst name = (<TSESTree.Identifier>node).name;\n\t\t\t\tif (ApiInterfaceNaming._nameRegExp.test(name)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'naming'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-literal-or-types.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\nexport = new class ApiLiteralOrTypes implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tdocs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines#enums' },\n\t\tmessages: { useEnum: 'Use enums, not literal-or-types', },\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\treturn {\n\t\t\t['TSTypeAnnotation TSUnionType']: (node: any) => {\n\t\t\t\tif ((<TSESTree.TSUnionType>node).types.every(value => value.type === 'TSLiteralType')) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: node,\n\t\t\t\t\t\tmessageId: 'useEnum'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-provider-naming.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\nexport = new class ApiProviderNaming implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tnaming: 'A provider should only have functions like provideXYZ or resolveXYZ',\n\t\t},\n\t\tschema: false,\n\t};\n\n\tprivate static _providerFunctionNames = /^(provide|resolve|prepare).+/;\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst config = <{ allowed: string[] }>context.options[0];\n\t\tconst allowed = new Set(config.allowed);\n\n\t\treturn {\n\t\t\t['TSInterfaceDeclaration[id.name=/.+Provider/] TSMethodSignature']: (node: any) => {\n\n\n\t\t\t\tconst interfaceName = (<TSESTree.TSInterfaceDeclaration>(<TSESTree.Identifier>node).parent?.parent).id.name;\n\t\t\t\tif (allowed.has(interfaceName)) {\n\t\t\t\t\t// allowed\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst methodName = (<any>(<TSESTree.TSMethodSignatureNonComputedName>node).key).name;\n\n\t\t\t\tif (!ApiProviderNaming._providerFunctionNames.test(methodName)) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'naming'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-string-type-literals.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport { TSESTree } from '@typescript-eslint/utils';\n\nexport = new class ApiTypeDiscrimination implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tdocs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines' },\n\t\tmessages: {\n\t\t\tnoTypeDiscrimination: 'Do not use type discrimination properties'\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\treturn {\n\t\t\t['TSPropertySignature[optional=false] TSTypeAnnotation TSLiteralType Literal']: (node: any) => {\n\t\t\t\tconst raw = String((<TSESTree.Literal>node).raw);\n\n\t\t\t\tif (/^('|\").*\\1$/.test(raw)) {\n\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: node,\n\t\t\t\t\t\tmessageId: 'noTypeDiscrimination'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-use-export.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TSESTree } from '@typescript-eslint/utils';\nimport * as eslint from 'eslint';\n\nexport = new class VscodeDtsUseExport implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tuseExport: `Public api types must use 'export'`,\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\t\treturn {\n\t\t\t['TSModuleDeclaration :matches(TSInterfaceDeclaration, ClassDeclaration, VariableDeclaration, TSEnumDeclaration, TSTypeAliasDeclaration)']: (node: any) => {\n\t\t\t\tconst parent = (<TSESTree.Node>node).parent;\n\t\t\t\tif (parent && parent.type !== TSESTree.AST_NODE_TYPES.ExportNamedDeclaration) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'useExport'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-use-thenable.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\n\nexport = new class ApiEventNaming implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tusage: 'Use the Thenable-type instead of the Promise type',\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\n\n\t\treturn {\n\t\t\t['TSTypeAnnotation TSTypeReference Identifier[name=\"Promise\"]']: (node: any) => {\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'usage',\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".eslint-plugin-local/vscode-dts-vscode-in-comments.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as eslint from 'eslint';\nimport type * as estree from 'estree';\n\nexport = new class ApiVsCodeInComments implements eslint.Rule.RuleModule {\n\n\treadonly meta: eslint.Rule.RuleMetaData = {\n\t\tmessages: {\n\t\t\tcomment: `Don't use the term 'vs code' in comments`\n\t\t},\n\t\tschema: false,\n\t};\n\n\tcreate(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {\n\n\t\tconst sourceCode = context.getSourceCode();\n\n\t\treturn {\n\t\t\t['Program']: (_node: any) => {\n\n\t\t\t\tfor (const comment of sourceCode.getAllComments()) {\n\t\t\t\t\tif (comment.type !== 'Block') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!comment.range) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst startIndex = comment.range[0] + '/*'.length;\n\t\t\t\t\tconst re = /vs code/ig;\n\t\t\t\t\tlet match: RegExpExecArray | null;\n\t\t\t\t\twhile ((match = re.exec(comment.value))) {\n\t\t\t\t\t\t// Allow using 'VS Code' in quotes\n\t\t\t\t\t\tif (comment.value[match.index - 1] === `'` && comment.value[match.index + match[0].length] === `'`) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Types for eslint seem incorrect\n\t\t\t\t\t\tconst start = sourceCode.getLocFromIndex(startIndex + match.index) as any as estree.Position;\n\t\t\t\t\t\tconst end = sourceCode.getLocFromIndex(startIndex + match.index + match[0].length) as any as estree.Position;\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tmessageId: 'comment',\n\t\t\t\t\t\t\tloc: { start, end }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n"
  },
  {
    "path": ".git-blame-ignore-revs",
    "content": "# https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-fileltfilegt\n# https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view\n\n# mjbvz: Fix spacing\n13f4f052582bcec3d6c6c6a70d995c9dee2cac13\n\n# mjbvz: Add script to run build with noImplicitOverride\nae1452eea678f5266ef513f22dacebb90955d6c9\n\n# alexdima: Revert \"bump version\"\n537ba0ef1791c090bb18bc68d727816c0451c117\n\n# alexdima: bump version\n387a0dcb82df729e316ca2518a9ed81a75482b18\n\n# joaomoreno: add ghooks dev dependency\n0dfc06e0f9de5925de792cdf9f0e6597bb25908f\n\n# joaomoreno: line endings\n12ab70d329a13dd5b18d892cd40edd7138259bc3\n\n# mjbvz: organize imports\n494cbbd02d67e87727ec885f98d19551aa33aad1\na3cb14be7f2cceadb17adf843675b1a59537dbbd\nee1655a82ebdfd38bf8792088a6602c69f7bbd94\n\n# jrieken: new eslint-rule\n4a130c40ed876644ed8af2943809d08221375408\n\n# bpasero: ESM migration\n6b924c51528e663dda5091a1493229a361676aca\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n\nLICENSE.txt eol=crlf\nThirdPartyNotices.txt eol=crlf\n\n*.bat eol=crlf\n*.cmd eol=crlf\n*.ps1 eol=lf\n*.sh eol=lf\n*.rtf -text\n**/*.json linguist-language=jsonc\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/issue_template.md",
    "content": "---\nname: Issue\nabout: Submit an Issue to Void\ntitle: For VSCode-related issues (eg builds), please start the title with `[App]`. Otherwise, start it with `[Bug]` or `[Feature]`.\n---\n\n1. Press `Cmd+Shift+P` in Void, and type `Help: About`. Please paste the information here. Also let us know any other relevant details, like the model and provider you're using if applicable.\n\n2. Describe the issue/feature here!\n"
  },
  {
    "path": ".github/scripts/issue_triage.py",
    "content": "#!/usr/bin/env python\nfrom __future__ import annotations\nimport os, sys, json, datetime, pathlib, textwrap, requests\nfrom openai import OpenAI\n\nREPO = \"voideditor/void\"\nCACHE_FILE = pathlib.Path(\".github/triage_cache.json\")\nSTAMP_FILE = pathlib.Path(\".github/last_triage.txt\")\n\nTHEMES_MD = textwrap.dedent(\"\"\"\\\n1. 🔗 LLM Integration & Provider Support\n2. 🖥 App Build & Platform Compatibility\n3. 🎯 Prompt, Token, and Cost Management\n4. 🧩 Editor UX & Interaction Design\n5. 🤖 Agent & Automation Features\n6. ⚙️ System Config & Environment Setup\n7. 🗃 Meta: Feature Comparison, Structure, and Naming\n\"\"\").strip()\n\nclient  = OpenAI(api_key=os.environ[\"OPENAI_API_KEY\"])\nheaders = {\"Authorization\": f\"Bearer {os.environ['GITHUB_TOKEN']}\"}\n\n\n# ───────── helpers ────────────────────────────────────────────────────────\ndef utc_iso_now() -> str:\n    return datetime.datetime.utcnow().replace(microsecond=0, tzinfo=datetime.timezone.utc).isoformat()\n\ndef read_stamp() -> str:\n    return STAMP_FILE.read_text().strip() if STAMP_FILE.exists() else \"1970-01-01T00:00:00Z\"\n\ndef save_stamp():\n    STAMP_FILE.parent.mkdir(parents=True, exist_ok=True)\n    STAMP_FILE.write_text(utc_iso_now())\n\ndef load_cache() -> dict[int, str]:\n    return json.loads(CACHE_FILE.read_text()) if CACHE_FILE.exists() else {}\n\ndef save_cache(d: dict[int, str]):\n    CACHE_FILE.parent.mkdir(parents=True, exist_ok=True)\n    CACHE_FILE.write_text(json.dumps(d, indent=2))\n\ndef fetch_open_issues(since_iso: str | None = None) -> list[dict]:\n    issues, page = [], 1\n    while True:\n        url = (\n            f\"https://api.github.com/repos/{REPO}/issues\"\n            f\"?state=open&per_page=100&page={page}\"\n            + (f\"&since={since_iso}\" if since_iso else \"\")\n        )\n        chunk = requests.get(url, headers=headers).json()\n        if not chunk or (isinstance(chunk, dict) and chunk.get(\"message\")):\n            break\n        issues.extend(i for i in chunk if \"pull_request\" not in i)\n        page += 1\n    return issues\n\n\n# ───────── main ───────────────────────────────────────────────────────────\nlast_stamp = read_stamp()\nchanged    = fetch_open_issues(since_iso=last_stamp)\n\n# Fallback if **nothing** changed AND we have *no* existing output\nif not changed:\n    cache_exists = CACHE_FILE.exists()\n    wiki_exists  = pathlib.Path(\"wiki/Issue-Categories.md\").exists()\n    if not cache_exists or not wiki_exists:\n        # first run or someone wiped the wiki → build from scratch\n        print(\"⏩ First run or empty wiki — fetching ALL open issues.\", file=sys.stderr)\n        changed = fetch_open_issues()         # full list\n    else:\n        print(f\"✅ No issues updated since {last_stamp}. Nothing to classify.\", file=sys.stderr)\n        save_stamp()\n        sys.exit(0)\n\n# ---------------------------------------------------------------- prompt\nissue_lines = \"\\n\".join(f\"- {i['title']} ({i['html_url']})\" for i in changed)\nprompt = textwrap.dedent(f\"\"\"\\\nYou are an AI assistant helping triage GitHub issues into exactly 7 predefined themes.\n\nEach issue must go into exactly one of the themes below:\n\n{THEMES_MD}\n\nFormat your output in Markdown like:\n## 🎯 Prompt, Token, and Cost Management\n- [#123](https://github.com/org/repo/issues/123) – Title here\n\nClassify these issues:\n{issue_lines}\n\"\"\")\n\nresp = client.chat.completions.create(\n    model=\"gpt-4.1\",\n    messages=[{\"role\": \"user\", \"content\": prompt}],\n    temperature=0.2,\n)\n\nmd = resp.choices[0].message.content\n\n# ---------------------------------------------------------------- parse GPT\nnew_map: dict[int, str] = {}\ncurrent = None\nfor ln in md.splitlines():\n    if ln.startswith(\"##\"):\n        current = ln.lstrip(\"# \").strip()\n    elif ln.lstrip().startswith(\"- [#\"):\n        try:\n            num = int(ln.split(\"[#\")[1].split(\"]\")[0])\n            new_map[num] = current\n        except Exception:\n            pass  # ignore malformed lines\n\ncache = load_cache()\ncache.update(new_map)\nsave_cache(cache)\nsave_stamp()\n\n# ---------------------------------------------------------------- rebuild wiki\norder = [\n    \"🔗 LLM Integration & Provider Support\",\n    \"🖥 App Build & Platform Compatibility\",\n    \"🎯 Prompt, Token, and Cost Management\",\n    \"🧩 Editor UX & Interaction Design\",\n    \"🤖 Agent & Automation Features\",\n    \"⚙️ System Config & Environment Setup\",\n    \"🗃 Meta: Feature Comparison, Structure, and Naming\",\n]\n\nsections: dict[str, list[int]] = {t: [] for t in order}\n\n# ── fetch ALL current open issues once  (PRs filtered out) ────────────────\ntitle_map: dict[int, tuple[str, str]] = {}\nopen_now: set[int] = set()\n\npage = 1\nwhile True:\n    batch = fetch_open_issues(since_iso=None) if page == 1 else []\n    if not batch:\n        break\n    for it in batch:\n        num = it[\"number\"]\n        title_map[num] = (it[\"title\"], it[\"html_url\"])\n        open_now.add(num)\n    page += 1\n\n# 🧹 drop any cached IDs that are no longer open issues (e.g., became a PR or were closed)\nfor stale in set(cache) - open_now:\n    del cache[stale]\nsave_cache(cache)            # persist cleaned cache\n\n# build sections from cleaned cache\nfor num, theme in cache.items():\n    if theme in sections:          # extra safety\n        sections[theme].append(num)\n\n# ---------------------------------------------------------------- print roadmap\nfor theme in order:\n    issues = sections[theme]\n    if issues:\n        print(f\"## {theme}\")\n        for n in sorted(issues):\n            title, url = title_map.get(n, (\"(missing)\", f\"https://github.com/{REPO}/issues/{n}\"))\n            print(f\"- [#{n}]({url}) – {title}\")\n        print()\n"
  },
  {
    "path": ".github/workflows/triage.yml",
    "content": "name: Issue Triage to Wiki\n\non:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 */6 * * *'    # every 6 hrs (UTC)\n\njobs:\n  roadmap:\n    runs-on: ubuntu-latest\n\n    steps:\n      # 1️⃣ Check out code (so the script and cache files are present)\n      - name: Checkout code\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 1    # shallow clone\n\n      # 2️⃣ Set up Python\n      - name: Set up Python\n        uses: actions/setup-python@v4\n        with:\n          python-version: '3.11'\n\n      # 3️⃣ Install dependencies\n      - name: Install Python dependencies\n        run: |\n          pip install openai requests\n\n      # 4️⃣ Clone your fork’s Wiki\n      - name: Clone your fork's Wiki\n        run: |\n          git clone https://x-access-token:${{ secrets.WIKI_TOKEN }}@github.com/${{ github.repository }}.wiki.git wiki\n\n      # 5️⃣ (Optional) Show repo tree for debugging\n      - name: Show repo tree (debug)\n        run: |\n          echo \"PWD: $(pwd)\"\n          ls -al\n          ls -al .github/scripts || true\n          ls -al void/.github/scripts || true\n\n      # 6️⃣ Generate roadmap and push only if it changed\n      - name: Generate roadmap directly into wiki\n        run: |\n          python .github/scripts/issue_triage.py > wiki/_new.md\n          if ! cmp -s wiki/_new.md wiki/Issue-Categories.md ; then\n            mv wiki/_new.md wiki/Issue-Categories.md\n            cd wiki\n            git config user.name \"github-actions[bot]\"\n            git config user.email \"41898282+github-actions[bot]@users.noreply.github.com\"\n            git add Issue-Categories.md\n            git commit -m \"Auto-update Issue-Categories.md from GPT triage\"\n            git push\n          else\n            echo \"No content change – skipping wiki update\"\n          fi\n        env:\n          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}\n          GITHUB_TOKEN:   ${{ secrets.WIKI_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.cache\nnpm-debug.log\nThumbs.db\nnode_modules/\n.build/\n.vscode/extensions/**/out/\nextensions/**/dist/\n/out*/\n/extensions/**/out/\nbuild/node_modules\ncoverage/\ntest_data/\ntest-results/\ntest-results.xml\nvscode.lsif\nvscode.db\n/.profile-oss\n/cli/target\n/cli/openssl\nproduct.overrides.json\n*.snap.actual\n.vscode-test\n\n# Void added these:\n.tmp/\n.tmp2/\n.tool-versions\nsrc/vs/workbench/contrib/void/browser/react/out/**\nsrc/vs/workbench/contrib/void/browser/react/src2/**\n"
  },
  {
    "path": ".idx/dev.nix",
    "content": "# Created for Void\n# To learn more about how to use Nix to configure your environment\n# see: https://developers.google.com/idx/guides/customize-idx-env\n{pkgs}: {\n  # Which nixpkgs channel to use.\n  channel = \"stable-23.11\"; # or \"unstable\"\n  # Use https://search.nixos.org/packages to find packages\n  packages = [\n    pkgs.nodejs_20\n    pkgs.yarn\n    pkgs.nodePackages.pnpm\n    pkgs.bun\n    pkgs.gh\n  ];\n  # Sets environment variables in the workspace\n  env = {};\n  idx = {\n    # Search for the extensions you want on https://open-vsx.org/ and use \"publisher.id\"\n    extensions = [\n      # \"vscodevim.vim\"\n    ];\n    workspace = {\n      # Runs when a workspace is first created with this `dev.nix` file\n      onCreate = {\n        npm-install = \"npm ci --no-audit --prefer-offline --no-progress --timing\";\n        # Open editors for the following files by default, if they exist:\n        default.openFiles = [\n          # Cover all the variations of language, src-dir, router (app/pages)\n          \"pages/index.tsx\" \"pages/index.jsx\"\n          \"src/pages/index.tsx\" \"src/pages/index.jsx\"\n          \"app/page.tsx\" \"app/page.jsx\"\n          \"src/app/page.tsx\" \"src/app/page.jsx\"\n        ];\n      };\n      # To run something each time the workspace is (re)started, use the `onStart` hook\n    };\n    # Enable previews and customize configuration\n    previews = {\n      enable = true;\n      previews = {\n        web = {\n          command = [\"npm\" \"run\" \"dev\" \"--\" \"--port\" \"$PORT\" \"--hostname\" \"0.0.0.0\"];\n          manager = \"web\";\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": ".lsifrc.json",
    "content": "{\n\t\"project\": \"src/tsconfig.json\",\n\t\"source\": \"./package.json\",\n\t\"package\": \"package.json\",\n\t\"out\": \"vscode.lsif\"\n}\n"
  },
  {
    "path": ".mailmap",
    "content": "Daniel Imms <daimms@microsoft.com> Daniel Imms <tyriar@tyriar.com>\nRaymond Zhao <raymondzhao@microsoft.com>\nTyler Leonhardt <tyleonha@microsoft.com> Tyler Leonhardt <me@tylerleonhardt.com>\nJoão Moreno <joao.moreno@microsoft.com> João Moreno <mail@joaomoreno.com>\n"
  },
  {
    "path": ".mention-bot",
    "content": "{\n  \"maxReviewers\": 2,\n  \"requiredOrgs\": [\"Microsoft\"],\n  \"skipAlreadyAssignedPR\": true,\n  \"skipAlreadyMentionedPR\": true,\n  \"skipCollaboratorPR\": true\n}"
  },
  {
    "path": ".npmrc",
    "content": "disturl=\"https://electronjs.org/headers\"\ntarget=\"34.3.2\"\nms_build_id=\"11161073\"\nruntime=\"electron\"\nbuild_from_source=\"true\"\nlegacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": ".nvmrc",
    "content": "20.18.2\n"
  },
  {
    "path": ".voidrules",
    "content": "This is a fork of the VSCode repo called Void.\n\nMost code we care about lives in src/vs/workbench/contrib/void.\n\nYou may often need to explore the full repo to find relevant parts of code.\nLook for services and built-in functions that you might need to use to solve the problem.\n\nIn typescript, do NOT cast to types if not neccessary. NEVER lazily cast to 'any'. Find the correct type to apply and use it.\n\nDo not add or remove semicolons to any of my files. Just go with convention and make the least number of changes.\n\nNever modify files outside src/vs/workbench/contrib/void without consulting with the user first.\n\nAll types that map from a value A to B should be called bOfA. For example, if you create a hashmap that goes from toolId to toolName, it should be called toolNameOfToolId, etc.\n\nDo not run anything to validate your changes; tell the user what to do instead.\n"
  },
  {
    "path": ".vscode/cglicenses.schema.json",
    "content": "{\n\t\"type\": \"array\",\n\t\"items\": {\n\t\t\"oneOf\": [\n\t\t\t{\n\t\t\t\t\"type\": \"object\",\n\t\t\t\t\"required\": [\n\t\t\t\t\t\"name\",\n\t\t\t\t\t\"prependLicenseText\"\n\t\t\t\t],\n\t\t\t\t\"properties\": {\n\t\t\t\t\t\"name\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"The name of the dependency\"\n\t\t\t\t\t},\n\t\t\t\t\t\"fullLicenseText\": {\n\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\"description\": \"The complete license text of the dependency\",\n\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"prependLicenseText\": {\n\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\"description\": \"A piece of text to prepend to the auto-detected license text of the dependency\",\n\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"object\",\n\t\t\t\t\"required\": [\n\t\t\t\t\t\"name\",\n\t\t\t\t\t\"fullLicenseText\"\n\t\t\t\t],\n\t\t\t\t\"properties\": {\n\t\t\t\t\t\"name\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"The name of the dependency\"\n\t\t\t\t\t},\n\t\t\t\t\t\"fullLicenseText\": {\n\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\"description\": \"The complete license text of the dependency\",\n\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"prependLicenseText\": {\n\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\"description\": \"A piece of text to prepend to the auto-detected license text of the dependency\",\n\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"object\",\n\t\t\t\t\"required\": [\n\t\t\t\t\t\"name\",\n\t\t\t\t\t\"fullLicenseTextUri\"\n\t\t\t\t],\n\t\t\t\t\"properties\": {\n\t\t\t\t\t\"name\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"The name of the dependency\"\n\t\t\t\t\t},\n\t\t\t\t\t\"fullLicenseTextUri\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"The URI to the license text of this repository\",\n\t\t\t\t\t\t\"format\": \"uri\"\n\t\t\t\t\t},\n\t\t\t\t\t\"prependLicenseText\": {\n\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\"description\": \"A piece of text to prepend to the auto-detected license text of the dependency\",\n\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json",
    "content": "{\n\t\"configurations\": [\n\t\t{\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\",\n\t\t\t\t\"--enable-proposed-api=ms-vscode.vscode-selfhost-import-aid\"\n\t\t\t],\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"request\": \"launch\",\n\t\t\t\"type\": \"extensionHost\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json",
    "content": "{\n\t\"editor.formatOnSave\": true,\n\t\"editor.defaultFormatter\": \"vscode.typescript-language-features\",\n\t\"editor.codeActionsOnSave\": {\n\t\t\"source.organizeImports\": \"always\"\n\t}\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-import-aid/package.json",
    "content": "{\n  \"name\": \"vscode-selfhost-import-aid\",\n  \"displayName\": \"VS Code Selfhost Import Aid\",\n  \"description\": \"Util to improve dealing with imports\",\n  \"engines\": {\n    \"vscode\": \"^1.88.0\"\n  },\n  \"version\": \"0.0.1\",\n  \"publisher\": \"ms-vscode\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"activationEvents\": [\n    \"onLanguage:typescript\"\n  ],\n  \"main\": \"./out/extension.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  },\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:vscode-selfhost-import-aid\",\n    \"watch\": \"gulp watch-extension:vscode-selfhost-import-aid\"\n  },\n  \"dependencies\": {\n    \"typescript\": \"5.5.4\"\n  }\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-import-aid/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as ts from 'typescript';\nimport * as path from 'path';\n\nexport async function activate(context: vscode.ExtensionContext) {\n\n\tconst fileIndex = new class {\n\n\t\tprivate _currentRun?: Thenable<void>;\n\n\t\tprivate _disposables: vscode.Disposable[] = [];\n\n\t\tprivate readonly _index = new Map<string, vscode.Uri>();\n\n\t\tconstructor() {\n\t\t\tconst watcher = vscode.workspace.createFileSystemWatcher('**/*.ts', false, true, false);\n\t\t\tthis._disposables.push(watcher.onDidChange(e => { this._index.set(e.toString(), e); }));\n\t\t\tthis._disposables.push(watcher.onDidDelete(e => { this._index.delete(e.toString()); }));\n\t\t\tthis._disposables.push(watcher);\n\n\t\t\tthis._refresh(false);\n\t\t}\n\n\t\tdispose(): void {\n\t\t\tfor (const disposable of this._disposables) {\n\t\t\t\tdisposable.dispose();\n\t\t\t}\n\t\t\tthis._disposables = [];\n\t\t\tthis._index.clear();\n\t\t}\n\n\t\tasync all(token: vscode.CancellationToken) {\n\n\t\t\tawait Promise.race([this._currentRun, new Promise<void>(resolve => token.onCancellationRequested(resolve))]);\n\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn Array.from(this._index.values());\n\t\t}\n\n\t\tprivate _refresh(clear: boolean) {\n\t\t\t// TODO@jrieken LATEST API! findFiles2New\n\t\t\tthis._currentRun = vscode.workspace.findFiles('src/vs/**/*.ts', '{**/node_modules/**,**/extensions/**}').then(all => {\n\t\t\t\tif (clear) {\n\t\t\t\t\tthis._index.clear();\n\t\t\t\t}\n\t\t\t\tfor (const item of all) {\n\t\t\t\t\tthis._index.set(item.toString(), item);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tconst selector: vscode.DocumentSelector = 'typescript';\n\n\tfunction findNodeAtPosition(document: vscode.TextDocument, node: ts.Node, position: vscode.Position): ts.Node | undefined {\n\t\tif (node.getStart() <= document.offsetAt(position) && node.getEnd() >= document.offsetAt(position)) {\n\t\t\treturn ts.forEachChild(node, child => findNodeAtPosition(document, child, position)) || node;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tfunction findImportAt(document: vscode.TextDocument, position: vscode.Position): ts.ImportDeclaration | undefined {\n\t\tconst sourceFile = ts.createSourceFile(document.fileName, document.getText(), ts.ScriptTarget.Latest, true);\n\t\tconst node = findNodeAtPosition(document, sourceFile, position);\n\t\tif (node && ts.isStringLiteral(node) && ts.isImportDeclaration(node.parent)) {\n\t\t\treturn node.parent;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tconst completionProvider = new class implements vscode.CompletionItemProvider {\n\t\tasync provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.CompletionList | undefined> {\n\n\t\t\tconst index = document.getText().lastIndexOf(' from \\'');\n\t\t\tif (index < 0 || document.positionAt(index).line < position.line) {\n\t\t\t\t// line after last import is before position\n\t\t\t\t// -> no completion, safe a parse call\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst node = findImportAt(document, position);\n\t\t\tif (!node) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst range = new vscode.Range(document.positionAt(node.moduleSpecifier.pos), document.positionAt(node.moduleSpecifier.end));\n\t\t\tconst uris = await fileIndex.all(token);\n\n\t\t\tif (!uris) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst result = new vscode.CompletionList();\n\t\t\tresult.isIncomplete = true;\n\n\t\t\tfor (const item of uris) {\n\n\t\t\t\tif (!item.path.endsWith('.ts')) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet relativePath = path.relative(path.dirname(document.uri.path), item.path);\n\t\t\t\trelativePath = relativePath.startsWith('.') ? relativePath : `./${relativePath}`;\n\n\t\t\t\tconst label = path.basename(item.path, path.extname(item.path));\n\t\t\t\tconst insertText = ` '${relativePath.replace(/\\.ts$/, '.js')}'`;\n\t\t\t\tconst filterText = ` '${label}'`;\n\n\t\t\t\tconst completion = new vscode.CompletionItem({\n\t\t\t\t\tlabel: label,\n\t\t\t\t\tdescription: vscode.workspace.asRelativePath(item),\n\t\t\t\t});\n\t\t\t\tcompletion.kind = vscode.CompletionItemKind.File;\n\t\t\t\tcompletion.insertText = insertText;\n\t\t\t\tcompletion.filterText = filterText;\n\t\t\t\tcompletion.range = range;\n\n\t\t\t\tresult.items.push(completion);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t};\n\n\tclass ImportCodeActions implements vscode.CodeActionProvider {\n\n\t\tstatic FixKind = vscode.CodeActionKind.QuickFix.append('esmImport');\n\n\t\tstatic SourceKind = vscode.CodeActionKind.SourceFixAll.append('esmImport');\n\n\t\tasync provideCodeActions(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise<vscode.CodeAction[] | undefined> {\n\n\t\t\tif (context.only && ImportCodeActions.SourceKind.intersects(context.only)) {\n\t\t\t\treturn this._provideFixAll(document, context, token);\n\t\t\t}\n\n\t\t\treturn this._provideFix(document, range, context, token);\n\t\t}\n\n\t\tprivate async _provideFixAll(document: vscode.TextDocument, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise<vscode.CodeAction[] | undefined> {\n\n\t\t\tconst diagnostics = context.diagnostics\n\t\t\t\t.filter(d => d.code === 2307)\n\t\t\t\t.sort((a, b) => b.range.start.compareTo(a.range.start));\n\n\t\t\tif (diagnostics.length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst uris = await fileIndex.all(token);\n\t\t\tif (!uris) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst result = new vscode.CodeAction(`Fix All ESM Imports`, ImportCodeActions.SourceKind);\n\t\t\tresult.edit = new vscode.WorkspaceEdit();\n\t\t\tresult.diagnostics = [];\n\n\t\t\tfor (const diag of diagnostics) {\n\n\t\t\t\tconst actions = this._provideFixesForDiag(document, diag, uris);\n\n\t\t\t\tif (actions.length === 0) {\n\t\t\t\t\tconsole.log(`ESM: no fixes for \"${diag.message}\"`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (actions.length > 1) {\n\t\t\t\t\tconsole.log(`ESM: more than one fix for \"${diag.message}\", taking first`);\n\t\t\t\t\tconsole.log(actions);\n\t\t\t\t}\n\n\t\t\t\tconst [first] = actions;\n\t\t\t\tresult.diagnostics.push(diag);\n\n\t\t\t\tfor (const [uri, edits] of first.edit!.entries()) {\n\t\t\t\t\tresult.edit.set(uri, edits);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// console.log(result.edit.get(document.uri));\n\t\t\treturn [result];\n\t\t}\n\n\t\tprivate async _provideFix(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise<vscode.CodeAction[] | undefined> {\n\t\t\tconst uris = await fileIndex.all(token);\n\t\t\tif (!uris) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst diag = context.diagnostics.find(d => d.code === 2307 && d.range.intersection(range));\n\t\t\treturn diag && this._provideFixesForDiag(document, diag, uris);\n\t\t}\n\n\t\tprivate _provideFixesForDiag(document: vscode.TextDocument, diag: vscode.Diagnostic, uris: Iterable<vscode.Uri>): vscode.CodeAction[] {\n\n\t\t\tconst node = findImportAt(document, diag.range.start)?.moduleSpecifier;\n\t\t\tif (!node || !ts.isStringLiteral(node)) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst nodeRange = new vscode.Range(document.positionAt(node.pos), document.positionAt(node.end));\n\t\t\tconst name = path.basename(node.text, path.extname(node.text));\n\n\t\t\tconst result: vscode.CodeAction[] = [];\n\n\t\t\tfor (const item of uris) {\n\t\t\t\tif (path.basename(item.path, path.extname(item.path)) === name) {\n\t\t\t\t\tlet relativePath = path.relative(path.dirname(document.uri.path), item.path).replace(/\\.ts$/, '.js');\n\t\t\t\t\trelativePath = relativePath.startsWith('.') ? relativePath : `./${relativePath}`;\n\n\t\t\t\t\tconst action = new vscode.CodeAction(`Fix to '${relativePath}'`, ImportCodeActions.FixKind);\n\t\t\t\t\taction.edit = new vscode.WorkspaceEdit();\n\t\t\t\t\taction.edit.replace(document.uri, nodeRange, ` '${relativePath}'`);\n\t\t\t\t\taction.diagnostics = [diag];\n\t\t\t\t\tresult.push(action);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tcontext.subscriptions.push(fileIndex);\n\tcontext.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, completionProvider));\n\tcontext.subscriptions.push(vscode.languages.registerCodeActionsProvider(selector, new ImportCodeActions(), { providedCodeActionKinds: [ImportCodeActions.FixKind, ImportCodeActions.SourceKind] }));\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-import-aid/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../../extensions/tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\",\n\t\t\t\"mocha\",\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/.vscode/launch.json",
    "content": "{\n\t\"configurations\": [\n\t\t{\n\t\t\t\"args\": [\"--extensionDevelopmentPath=${workspaceFolder}\", \"--enable-proposed-api=ms-vscode.vscode-selfhost-test-provider\"],\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*.js\"],\n\t\t\t\"request\": \"launch\",\n\t\t\t\"type\": \"extensionHost\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/.vscode/settings.json",
    "content": "{\n\t\"editor.formatOnSave\": true,\n\t\"editor.defaultFormatter\": \"vscode.typescript-language-features\",\n\t\"editor.codeActionsOnSave\": {\n\t\t\"source.organizeImports\": \"always\"\n\t}\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/package.json",
    "content": "{\n  \"name\": \"vscode-selfhost-test-provider\",\n  \"displayName\": \"VS Code Selfhost Test Provider\",\n  \"description\": \"Test provider for the VS Code project\",\n  \"enabledApiProposals\": [\n    \"testObserver\",\n    \"testRelatedCode\"\n  ],\n  \"engines\": {\n    \"vscode\": \"^1.88.0\"\n  },\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"command\": \"selfhost-test-provider.updateSnapshot\",\n        \"title\": \"Update Snapshot\",\n        \"category\": \"Testing\",\n        \"icon\": \"$(merge)\"\n      },\n      {\n        \"command\": \"selfhost-test-provider.openFailureLog\",\n        \"title\": \"Open Selfhost Failure Logs\",\n        \"category\": \"Testing\",\n        \"icon\": \"$(merge)\"\n      }\n    ],\n    \"menus\": {\n      \"commandPalette\": [\n        {\n          \"command\": \"selfhost-test-provider.updateSnapshot\",\n          \"when\": \"false\"\n        }\n      ],\n      \"testing/message/context\": [\n        {\n          \"command\": \"selfhost-test-provider.updateSnapshot\",\n          \"group\": \"inline@1\",\n          \"when\": \"testMessage == isSelfhostSnapshotMessage && !testResultOutdated\"\n        }\n      ],\n      \"testing/message/content\": [\n        {\n          \"command\": \"selfhost-test-provider.updateSnapshot\",\n          \"when\": \"testMessage == isSelfhostSnapshotMessage && !testResultOutdated\"\n        }\n      ]\n    }\n  },\n  \"icon\": \"icon.png\",\n  \"version\": \"0.4.0\",\n  \"publisher\": \"ms-vscode\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"activationEvents\": [\n    \"workspaceContains:src/vs/loader.js\"\n  ],\n  \"workspaceTrust\": {\n    \"request\": \"onDemand\",\n    \"description\": \"Trust is required to execute tests in the workspace.\"\n  },\n  \"main\": \"./out/extension.js\",\n  \"prettier\": {\n    \"printWidth\": 100,\n    \"singleQuote\": true,\n    \"tabWidth\": 2,\n    \"arrowParens\": \"avoid\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  },\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:vscode-selfhost-test-provider\",\n    \"watch\": \"gulp watch-extension:vscode-selfhost-test-provider\",\n    \"test\": \"npx mocha --ui tdd 'out/*.test.js'\"\n  },\n  \"devDependencies\": {\n    \"@types/mocha\": \"^10.0.6\",\n    \"@types/node\": \"20.x\"\n  },\n  \"dependencies\": {\n    \"@jridgewell/trace-mapping\": \"^0.3.25\",\n    \"ansi-styles\": \"^5.2.0\",\n    \"cockatiel\": \"^3.1.3\",\n    \"istanbul-to-vscode\": \"^2.0.1\"\n  }\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/coverageProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IstanbulCoverageContext } from 'istanbul-to-vscode';\nimport * as vscode from 'vscode';\nimport { SearchStrategy, SourceLocationMapper, SourceMapStore } from './testOutputScanner';\nimport { IScriptCoverage, OffsetToPosition, RangeCoverageTracker } from './v8CoverageWrangling';\n\nexport const istanbulCoverageContext = new IstanbulCoverageContext();\n\n/**\n * Tracks coverage in per-script coverage mode. There are two modes of coverage\n * in this extension: generic istanbul reports, and reports from the runtime\n * sent before and after each test case executes. This handles the latter.\n */\nexport class PerTestCoverageTracker {\n\tprivate readonly scripts = new Map</* script ID */ string, Script>();\n\n\tconstructor(private readonly maps: SourceMapStore) { }\n\n\tpublic add(coverage: IScriptCoverage, test?: vscode.TestItem) {\n\t\tconst script = this.scripts.get(coverage.scriptId);\n\t\tif (script) {\n\t\t\treturn script.add(coverage, test);\n\t\t}\n\t\t// ignore internals and node_modules\n\t\tif (!coverage.url.startsWith('file://') || coverage.url.includes('node_modules')) {\n\t\t\treturn;\n\t\t}\n\t\tif (!coverage.source) {\n\t\t\tthrow new Error('expected to have source the first time a script is seen');\n\t\t}\n\n\t\tconst src = new Script(vscode.Uri.parse(coverage.url), coverage.source, this.maps);\n\t\tthis.scripts.set(coverage.scriptId, src);\n\t\tsrc.add(coverage, test);\n\t}\n\n\tpublic async report(run: vscode.TestRun) {\n\t\tawait Promise.all(Array.from(this.scripts.values()).map(s => s.report(run)));\n\t}\n}\n\nclass Script {\n\tprivate converter: OffsetToPosition;\n\n\t/** Tracking the overall coverage for the file */\n\tprivate overall = new ScriptCoverageTracker();\n\t/** Range tracking per-test item */\n\tprivate readonly perItem = new Map<vscode.TestItem, ScriptCoverageTracker>();\n\n\tconstructor(\n\t\tpublic readonly uri: vscode.Uri,\n\t\tsource: string,\n\t\tprivate readonly maps: SourceMapStore\n\t) {\n\t\tthis.converter = new OffsetToPosition(source);\n\t}\n\n\tpublic add(coverage: IScriptCoverage, test?: vscode.TestItem) {\n\t\tthis.overall.add(coverage);\n\t\tif (test) {\n\t\t\tconst p = new ScriptCoverageTracker();\n\t\t\tp.add(coverage);\n\t\t\tthis.perItem.set(test, p);\n\t\t}\n\t}\n\n\tpublic async report(run: vscode.TestRun) {\n\t\tconst mapper = await this.maps.getSourceLocationMapper(this.uri.toString());\n\t\tconst originalUri = (await this.maps.getSourceFile(this.uri.toString())) || this.uri;\n\t\trun.addCoverage(this.overall.report(originalUri, this.converter, mapper, this.perItem));\n\t}\n}\n\nclass ScriptCoverageTracker {\n\tprivate coverage = new RangeCoverageTracker();\n\n\tpublic add(coverage: IScriptCoverage) {\n\t\tfor (const range of RangeCoverageTracker.initializeBlocks(coverage.functions)) {\n\t\t\tthis.coverage.setCovered(range.start, range.end, range.covered);\n\t\t}\n\t}\n\n\tpublic *toDetails(\n\t\turi: vscode.Uri,\n\t\tconvert: OffsetToPosition,\n\t\tmapper: SourceLocationMapper | undefined,\n\t) {\n\t\tfor (const range of this.coverage) {\n\t\t\tif (range.start === range.end) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst startCov = convert.toLineColumn(range.start);\n\t\t\tlet start = new vscode.Position(startCov.line, startCov.column);\n\n\t\t\tconst endCov = convert.toLineColumn(range.end);\n\t\t\tlet end = new vscode.Position(endCov.line, endCov.column);\n\t\t\tif (mapper) {\n\t\t\t\tconst startMap = mapper(start.line, start.character, SearchStrategy.FirstAfter);\n\t\t\t\tconst endMap = startMap && mapper(end.line, end.character, SearchStrategy.FirstBefore);\n\t\t\t\tif (!endMap || uri.toString().toLowerCase() !== endMap.uri.toString().toLowerCase()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstart = startMap.range.start;\n\t\t\t\tend = endMap.range.end;\n\t\t\t}\n\n\t\t\tfor (let i = start.line; i <= end.line; i++) {\n\t\t\t\tyield new vscode.StatementCoverage(\n\t\t\t\t\trange.covered,\n\t\t\t\t\tnew vscode.Range(\n\t\t\t\t\t\tnew vscode.Position(i, i === start.line ? start.character : 0),\n\t\t\t\t\t\tnew vscode.Position(i, i === end.line ? end.character : Number.MAX_SAFE_INTEGER)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Generates the script's coverage for the test run.\n\t *\n\t * If a source location mapper is given, it assumes the `uri` is the mapped\n\t * URI, and that any unmapped locations/outside the URI should be ignored.\n\t */\n\tpublic report(\n\t\turi: vscode.Uri,\n\t\tconvert: OffsetToPosition,\n\t\tmapper: SourceLocationMapper | undefined,\n\t\titems: Map<vscode.TestItem, ScriptCoverageTracker>,\n\t): V8CoverageFile {\n\t\tconst file = new V8CoverageFile(uri, items, convert, mapper);\n\t\tfor (const detail of this.toDetails(uri, convert, mapper)) {\n\t\t\tfile.add(detail);\n\t\t}\n\n\t\treturn file;\n\t}\n}\n\nexport class V8CoverageFile extends vscode.FileCoverage {\n\tpublic details: vscode.StatementCoverage[] = [];\n\n\tconstructor(\n\t\turi: vscode.Uri,\n\t\tprivate readonly perTest: Map<vscode.TestItem, ScriptCoverageTracker>,\n\t\tprivate readonly convert: OffsetToPosition,\n\t\tprivate readonly mapper: SourceLocationMapper | undefined,\n\t) {\n\t\tsuper(uri, { covered: 0, total: 0 }, undefined, undefined, [...perTest.keys()]);\n\t}\n\n\tpublic add(detail: vscode.StatementCoverage) {\n\t\tthis.details.push(detail);\n\t\tthis.statementCoverage.total++;\n\t\tif (detail.executed) {\n\t\t\tthis.statementCoverage.covered++;\n\t\t}\n\t}\n\n\tpublic testDetails(test: vscode.TestItem): vscode.FileCoverageDetail[] {\n\t\tconst t = this.perTest.get(test);\n\t\treturn t ? [...t.toDetails(this.uri, this.convert, this.mapper)] : [];\n\t}\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/debounce.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Debounces the function call for an interval.\n */\nexport function debounce(duration: number, fn: () => void): (() => void) & { clear: () => void } {\n\tlet timeout: NodeJS.Timeout | void;\n\tconst debounced = () => {\n\t\tif (timeout !== undefined) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\n\t\ttimeout = setTimeout(() => {\n\t\t\ttimeout = undefined;\n\t\t\tfn();\n\t\t}, duration);\n\t};\n\n\tdebounced.clear = () => {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t}\n\t};\n\n\treturn debounced;\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { randomBytes } from 'crypto';\nimport { tmpdir } from 'os';\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport { V8CoverageFile } from './coverageProvider';\nimport { FailingDeepStrictEqualAssertFixer } from './failingDeepStrictEqualAssertFixer';\nimport { FailureTracker } from './failureTracker';\nimport { registerSnapshotUpdate } from './snapshot';\nimport { scanTestOutput } from './testOutputScanner';\nimport {\n\tTestCase,\n\tTestFile,\n\tclearFileDiagnostics,\n\tguessWorkspaceFolder,\n\titemData,\n} from './testTree';\nimport { BrowserTestRunner, PlatformTestRunner, VSCodeTestRunner } from './vscodeTestRunner';\nimport { ImportGraph } from './importGraph';\n\nconst TEST_FILE_PATTERN = 'src/vs/**/*.{test,integrationTest}.ts';\n\nconst getWorkspaceFolderForTestFile = (uri: vscode.Uri) =>\n\t(uri.path.endsWith('.test.ts') || uri.path.endsWith('.integrationTest.ts')) &&\n\t\turi.path.includes('/src/vs/')\n\t\t? vscode.workspace.getWorkspaceFolder(uri)\n\t\t: undefined;\n\nconst browserArgs: [name: string, arg: string][] = [\n\t['Chrome', 'chromium'],\n\t['Firefox', 'firefox'],\n\t['Webkit', 'webkit'],\n];\n\ntype FileChangeEvent = { uri: vscode.Uri; removed: boolean };\n\nexport async function activate(context: vscode.ExtensionContext) {\n\tconst ctrl = vscode.tests.createTestController('selfhost-test-controller', 'VS Code Tests');\n\tconst fileChangedEmitter = new vscode.EventEmitter<FileChangeEvent>();\n\n\tcontext.subscriptions.push(vscode.tests.registerTestFollowupProvider({\n\t\tasync provideFollowup(_result, test, taskIndex, messageIndex, _token) {\n\t\t\treturn [{\n\t\t\t\ttitle: '$(sparkle) Fix with Copilot',\n\t\t\t\tcommand: 'github.copilot.tests.fixTestFailure',\n\t\t\t\targuments: [{ source: 'peekFollowup', test, message: test.taskStates[taskIndex].messages[messageIndex] }]\n\t\t\t}];\n\t\t},\n\t}));\n\n\tlet initialWatchPromise: Promise<vscode.Disposable> | undefined;\n\tconst resolveHandler = async (test?: vscode.TestItem) => {\n\t\tif (!test) {\n\t\t\tif (!initialWatchPromise) {\n\t\t\t\tinitialWatchPromise = startWatchingWorkspace(ctrl, fileChangedEmitter);\n\t\t\t\tcontext.subscriptions.push(await initialWatchPromise);\n\t\t\t} else {\n\t\t\t\tawait initialWatchPromise;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst data = itemData.get(test);\n\t\tif (data instanceof TestFile) {\n\t\t\t// No need to watch this, updates will be triggered on file changes\n\t\t\t// either by the text document or file watcher.\n\t\t\tawait data.updateFromDisk(ctrl, test);\n\t\t}\n\t};\n\n\tctrl.resolveHandler = resolveHandler;\n\n\tguessWorkspaceFolder().then(folder => {\n\t\tif (!folder) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst graph = new ImportGraph(\n\t\t\tfolder.uri, async () => {\n\t\t\t\tawait resolveHandler();\n\t\t\t\treturn [...ctrl.items].map(([, item]) => item);\n\t\t\t}, uri => ctrl.items.get(uri.toString().toLowerCase()));\n\t\tctrl.relatedCodeProvider = graph;\n\n\t\tif (context.storageUri) {\n\t\t\tcontext.subscriptions.push(new FailureTracker(context.storageUri.fsPath, folder.uri.fsPath));\n\t\t}\n\n\t\tcontext.subscriptions.push(fileChangedEmitter.event(e => graph.didChange(e.uri, e.removed)));\n\t});\n\n\tconst createRunHandler = (\n\t\trunnerCtor: { new(folder: vscode.WorkspaceFolder): VSCodeTestRunner },\n\t\tkind: vscode.TestRunProfileKind,\n\t\targs: string[] = []\n\t) => {\n\t\tconst doTestRun = async (\n\t\t\treq: vscode.TestRunRequest,\n\t\t\tcancellationToken: vscode.CancellationToken\n\t\t) => {\n\t\t\tconst folder = await guessWorkspaceFolder();\n\t\t\tif (!folder) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst runner = new runnerCtor(folder);\n\t\t\tconst map = await getPendingTestMap(ctrl, req.include ?? gatherTestItems(ctrl.items));\n\t\t\tconst task = ctrl.createTestRun(req);\n\t\t\tfor (const test of map.values()) {\n\t\t\t\ttask.enqueued(test);\n\t\t\t}\n\n\t\t\tlet coverageDir: string | undefined;\n\t\t\tlet currentArgs = args;\n\t\t\tif (kind === vscode.TestRunProfileKind.Coverage) {\n\t\t\t\t// todo: browser runs currently don't support per-test coverage\n\t\t\t\tif (args.includes('--browser')) {\n\t\t\t\t\tcoverageDir = path.join(\n\t\t\t\t\t\ttmpdir(),\n\t\t\t\t\t\t`vscode-test-coverage-${randomBytes(8).toString('hex')}`\n\t\t\t\t\t);\n\t\t\t\t\tcurrentArgs = [\n\t\t\t\t\t\t...currentArgs,\n\t\t\t\t\t\t'--coverage',\n\t\t\t\t\t\t'--coveragePath',\n\t\t\t\t\t\tcoverageDir,\n\t\t\t\t\t\t'--coverageFormats',\n\t\t\t\t\t\t'json',\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcurrentArgs = [...currentArgs, '--per-test-coverage'];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn await scanTestOutput(\n\t\t\t\tmap,\n\t\t\t\ttask,\n\t\t\t\tkind === vscode.TestRunProfileKind.Debug\n\t\t\t\t\t? await runner.debug(task, currentArgs, req.include)\n\t\t\t\t\t: await runner.run(currentArgs, req.include),\n\t\t\t\tcoverageDir,\n\t\t\t\tcancellationToken\n\t\t\t);\n\t\t};\n\n\t\treturn async (req: vscode.TestRunRequest, cancellationToken: vscode.CancellationToken) => {\n\t\t\tif (!req.continuous) {\n\t\t\t\treturn doTestRun(req, cancellationToken);\n\t\t\t}\n\n\t\t\tconst queuedFiles = new Set<string>();\n\t\t\tlet debounced: NodeJS.Timeout | undefined;\n\n\t\t\tconst listener = fileChangedEmitter.event(({ uri, removed }) => {\n\t\t\t\tclearTimeout(debounced);\n\n\t\t\t\tif (req.include && !req.include.some(i => i.uri?.toString() === uri.toString())) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (removed) {\n\t\t\t\t\tqueuedFiles.delete(uri.toString());\n\t\t\t\t} else {\n\t\t\t\t\tqueuedFiles.add(uri.toString());\n\t\t\t\t}\n\n\t\t\t\tdebounced = setTimeout(() => {\n\t\t\t\t\tconst include =\n\t\t\t\t\t\treq.include?.filter(t => t.uri && queuedFiles.has(t.uri?.toString())) ??\n\t\t\t\t\t\t[...queuedFiles]\n\t\t\t\t\t\t\t.map(f => getOrCreateFile(ctrl, vscode.Uri.parse(f)))\n\t\t\t\t\t\t\t.filter((f): f is vscode.TestItem => !!f);\n\t\t\t\t\tqueuedFiles.clear();\n\n\t\t\t\t\tdoTestRun(\n\t\t\t\t\t\tnew vscode.TestRunRequest(include, req.exclude, req.profile, true),\n\t\t\t\t\t\tcancellationToken\n\t\t\t\t\t);\n\t\t\t\t}, 1000);\n\t\t\t});\n\n\t\t\tcancellationToken.onCancellationRequested(() => {\n\t\t\t\tclearTimeout(debounced);\n\t\t\t\tlistener.dispose();\n\t\t\t});\n\t\t};\n\t};\n\n\tctrl.createRunProfile(\n\t\t'Run in Electron',\n\t\tvscode.TestRunProfileKind.Run,\n\t\tcreateRunHandler(PlatformTestRunner, vscode.TestRunProfileKind.Run),\n\t\ttrue,\n\t\tundefined,\n\t\ttrue\n\t);\n\n\tctrl.createRunProfile(\n\t\t'Debug in Electron',\n\t\tvscode.TestRunProfileKind.Debug,\n\t\tcreateRunHandler(PlatformTestRunner, vscode.TestRunProfileKind.Debug),\n\t\ttrue,\n\t\tundefined,\n\t\ttrue\n\t);\n\n\tconst coverage = ctrl.createRunProfile(\n\t\t'Coverage in Electron',\n\t\tvscode.TestRunProfileKind.Coverage,\n\t\tcreateRunHandler(PlatformTestRunner, vscode.TestRunProfileKind.Coverage),\n\t\ttrue,\n\t\tundefined,\n\t\ttrue\n\t);\n\n\tcoverage.loadDetailedCoverage = async (_run, coverage) => coverage instanceof V8CoverageFile ? coverage.details : [];\n\tcoverage.loadDetailedCoverageForTest = async (_run, coverage, test) => coverage instanceof V8CoverageFile ? coverage.testDetails(test) : [];\n\n\tfor (const [name, arg] of browserArgs) {\n\t\tconst cfg = ctrl.createRunProfile(\n\t\t\t`Run in ${name}`,\n\t\t\tvscode.TestRunProfileKind.Run,\n\t\t\tcreateRunHandler(BrowserTestRunner, vscode.TestRunProfileKind.Run, [' --browser', arg]),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\ttrue\n\t\t);\n\n\t\tcfg.configureHandler = () => vscode.window.showInformationMessage(`Configuring ${name}`);\n\n\t\tctrl.createRunProfile(\n\t\t\t`Debug in ${name}`,\n\t\t\tvscode.TestRunProfileKind.Debug,\n\t\t\tcreateRunHandler(BrowserTestRunner, vscode.TestRunProfileKind.Debug, [\n\t\t\t\t'--browser',\n\t\t\t\targ,\n\t\t\t\t'--debug-browser',\n\t\t\t]),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\ttrue\n\t\t);\n\t}\n\n\tfunction updateNodeForDocument(e: vscode.TextDocument) {\n\t\tconst node = getOrCreateFile(ctrl, e.uri);\n\t\tconst data = node && itemData.get(node);\n\t\tif (data instanceof TestFile) {\n\t\t\tdata.updateFromContents(ctrl, e.getText(), node!);\n\t\t}\n\t}\n\n\tfor (const document of vscode.workspace.textDocuments) {\n\t\tupdateNodeForDocument(document);\n\t}\n\n\tcontext.subscriptions.push(\n\t\tctrl,\n\t\tfileChangedEmitter.event(({ uri, removed }) => {\n\t\t\tif (!removed) {\n\t\t\t\tconst node = getOrCreateFile(ctrl, uri);\n\t\t\t\tif (node) {\n\t\t\t\t\tctrl.invalidateTestResults();\n\t\t\t\t}\n\t\t\t}\n\t\t}),\n\t\tvscode.workspace.onDidOpenTextDocument(updateNodeForDocument),\n\t\tvscode.workspace.onDidChangeTextDocument(e => updateNodeForDocument(e.document)),\n\t\tregisterSnapshotUpdate(ctrl),\n\t\tnew FailingDeepStrictEqualAssertFixer()\n\t);\n}\n\nexport function deactivate() {\n\t// no-op\n}\n\nfunction getOrCreateFile(\n\tcontroller: vscode.TestController,\n\turi: vscode.Uri\n): vscode.TestItem | undefined {\n\tconst folder = getWorkspaceFolderForTestFile(uri);\n\tif (!folder) {\n\t\treturn undefined;\n\t}\n\n\tconst data = new TestFile(uri, folder);\n\tconst existing = controller.items.get(data.getId());\n\tif (existing) {\n\t\treturn existing;\n\t}\n\n\tconst file = controller.createTestItem(data.getId(), data.getLabel(), uri);\n\tcontroller.items.add(file);\n\tfile.canResolveChildren = true;\n\titemData.set(file, data);\n\n\treturn file;\n}\n\nfunction gatherTestItems(collection: vscode.TestItemCollection) {\n\tconst items: vscode.TestItem[] = [];\n\tcollection.forEach(item => items.push(item));\n\treturn items;\n}\n\nasync function startWatchingWorkspace(\n\tcontroller: vscode.TestController,\n\tfileChangedEmitter: vscode.EventEmitter<FileChangeEvent>\n) {\n\tconst workspaceFolder = await guessWorkspaceFolder();\n\tif (!workspaceFolder) {\n\t\treturn new vscode.Disposable(() => undefined);\n\t}\n\n\tconst pattern = new vscode.RelativePattern(workspaceFolder, TEST_FILE_PATTERN);\n\tconst watcher = vscode.workspace.createFileSystemWatcher(pattern);\n\n\twatcher.onDidCreate(uri => {\n\t\tgetOrCreateFile(controller, uri);\n\t\tfileChangedEmitter.fire({ removed: false, uri });\n\t});\n\twatcher.onDidChange(uri => fileChangedEmitter.fire({ removed: false, uri }));\n\twatcher.onDidDelete(uri => {\n\t\tfileChangedEmitter.fire({ removed: true, uri });\n\t\tclearFileDiagnostics(uri);\n\t\tcontroller.items.delete(uri.toString());\n\t});\n\n\tfor (const file of await vscode.workspace.findFiles(pattern)) {\n\t\tgetOrCreateFile(controller, file);\n\t}\n\n\treturn watcher;\n}\n\nasync function getPendingTestMap(ctrl: vscode.TestController, tests: Iterable<vscode.TestItem>) {\n\tconst queue = [tests];\n\tconst titleMap = new Map<string, vscode.TestItem>();\n\twhile (queue.length) {\n\t\tfor (const item of queue.pop()!) {\n\t\t\tconst data = itemData.get(item);\n\t\t\tif (data instanceof TestFile) {\n\t\t\t\tif (!data.hasBeenRead) {\n\t\t\t\t\tawait data.updateFromDisk(ctrl, item);\n\t\t\t\t}\n\t\t\t\tqueue.push(gatherTestItems(item.children));\n\t\t\t} else if (data instanceof TestCase) {\n\t\t\t\ttitleMap.set(data.fullName, item);\n\t\t\t} else {\n\t\t\t\tqueue.push(gatherTestItems(item.children));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn titleMap;\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/failingDeepStrictEqualAssertFixer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as ts from 'typescript';\nimport {\n\tcommands,\n\tDisposable,\n\tlanguages,\n\tPosition,\n\tRange,\n\tTestMessage,\n\tTestResultSnapshot,\n\tTestRunResult,\n\ttests,\n\tTextDocument,\n\tUri,\n\tworkspace,\n\tWorkspaceEdit,\n} from 'vscode';\nimport { memoizeLast } from './memoize';\nimport { getTestMessageMetadata } from './metadata';\n\nconst enum Constants {\n\tFixCommandId = 'selfhost-test.fix-test',\n}\n\nexport class FailingDeepStrictEqualAssertFixer {\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor() {\n\t\tthis.disposables.push(\n\t\t\tcommands.registerCommand(Constants.FixCommandId, async (uri: Uri, position: Position) => {\n\t\t\t\tconst document = await workspace.openTextDocument(uri);\n\n\t\t\t\tconst failingAssertion = detectFailingDeepStrictEqualAssertion(document, position);\n\t\t\t\tif (!failingAssertion) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst expectedValueNode = failingAssertion.assertion.expectedValue;\n\t\t\t\tif (!expectedValueNode) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst start = document.positionAt(expectedValueNode.getStart());\n\t\t\t\tconst end = document.positionAt(expectedValueNode.getEnd());\n\n\t\t\t\tconst edit = new WorkspaceEdit();\n\t\t\t\tedit.replace(uri, new Range(start, end), formatJsonValue(failingAssertion.actualJSONValue));\n\t\t\t\tawait workspace.applyEdit(edit);\n\t\t\t})\n\t\t);\n\n\t\tthis.disposables.push(\n\t\t\tlanguages.registerCodeActionsProvider('typescript', {\n\t\t\t\tprovideCodeActions: (document, range) => {\n\t\t\t\t\tconst failingAssertion = detectFailingDeepStrictEqualAssertion(document, range.start);\n\t\t\t\t\tif (!failingAssertion) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: 'Fix Expected Value',\n\t\t\t\t\t\t\tcommand: Constants.FixCommandId,\n\t\t\t\t\t\t\targuments: [document.uri, range.start],\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t},\n\t\t\t})\n\t\t);\n\t}\n\n\tdispose() {\n\t\tfor (const d of this.disposables) {\n\t\t\td.dispose();\n\t\t}\n\t}\n}\n\nconst identifierLikeRe = /^[$a-z_][a-z0-9_$]*$/i;\n\nconst tsPrinter = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\nconst formatJsonValue = (value: unknown) => {\n\tif (typeof value !== 'object') {\n\t\treturn JSON.stringify(value);\n\t}\n\n\tconst src = ts.createSourceFile('', `(${JSON.stringify(value)})`, ts.ScriptTarget.ES5, true);\n\tconst outerExpression = src.statements[0] as ts.ExpressionStatement;\n\tconst parenExpression = outerExpression.expression as ts.ParenthesizedExpression;\n\n\tconst unquoted = ts.transform(parenExpression, [\n\t\tcontext => (node: ts.Node) => {\n\t\t\tconst visitor = (node: ts.Node): ts.Node =>\n\t\t\t\tts.isPropertyAssignment(node) &&\n\t\t\t\t\tts.isStringLiteralLike(node.name) &&\n\t\t\t\t\tidentifierLikeRe.test(node.name.text)\n\t\t\t\t\t? ts.factory.createPropertyAssignment(\n\t\t\t\t\t\tts.factory.createIdentifier(node.name.text),\n\t\t\t\t\t\tts.visitNode(node.initializer, visitor) as ts.Expression\n\t\t\t\t\t)\n\t\t\t\t\t: ts.isStringLiteralLike(node) && node.text === '[undefined]'\n\t\t\t\t\t\t? ts.factory.createIdentifier('undefined')\n\t\t\t\t\t\t: ts.visitEachChild(node, visitor, context);\n\n\t\t\treturn ts.visitNode(node, visitor);\n\t\t},\n\t]);\n\n\treturn tsPrinter.printNode(ts.EmitHint.Expression, unquoted.transformed[0], src);\n};\n\n/** Parses the source file, memoizing the last document so cursor moves are efficient */\nconst parseSourceFile = memoizeLast((text: string) =>\n\tts.createSourceFile('', text, ts.ScriptTarget.ES5, true)\n);\n\nconst assertionFailureMessageRe = /^Expected values to be strictly (deep-)?equal:/;\n\n/** Gets information about the failing assertion at the poisition, if any. */\nfunction detectFailingDeepStrictEqualAssertion(\n\tdocument: TextDocument,\n\tposition: Position\n): { assertion: StrictEqualAssertion; actualJSONValue: unknown } | undefined {\n\tconst sf = parseSourceFile(document.getText());\n\tconst offset = document.offsetAt(position);\n\tconst assertion = StrictEqualAssertion.atPosition(sf, offset);\n\tif (!assertion) {\n\t\treturn undefined;\n\t}\n\n\tconst startLine = document.positionAt(assertion.offsetStart).line;\n\tconst messages = getAllTestStatusMessagesAt(document.uri, startLine);\n\tconst strictDeepEqualMessage = messages.find(m =>\n\t\tassertionFailureMessageRe.test(typeof m.message === 'string' ? m.message : m.message.value)\n\t);\n\n\tif (!strictDeepEqualMessage) {\n\t\treturn undefined;\n\t}\n\n\tconst metadata = getTestMessageMetadata(strictDeepEqualMessage);\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tassertion: assertion,\n\t\tactualJSONValue: metadata.actualValue,\n\t};\n}\n\nclass StrictEqualAssertion {\n\t/**\n\t * Extracts the assertion at the current node, if it is one.\n\t */\n\tpublic static fromNode(node: ts.Node): StrictEqualAssertion | undefined {\n\t\tif (!ts.isCallExpression(node)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst expr = node.expression.getText();\n\t\tif (expr !== 'assert.deepStrictEqual' && expr !== 'assert.strictEqual') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn new StrictEqualAssertion(node);\n\t}\n\n\t/**\n\t * Gets the equals assertion at the given offset in the file.\n\t */\n\tpublic static atPosition(sf: ts.SourceFile, offset: number): StrictEqualAssertion | undefined {\n\t\tlet node = findNodeAt(sf, offset);\n\n\t\twhile (node.parent) {\n\t\t\tconst obj = StrictEqualAssertion.fromNode(node);\n\t\t\tif (obj) {\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\tnode = node.parent;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tconstructor(private readonly expression: ts.CallExpression) { }\n\n\t/** Gets the expected value */\n\tpublic get expectedValue(): ts.Expression | undefined {\n\t\treturn this.expression.arguments[1];\n\t}\n\n\t/** Gets the position of the assertion expression. */\n\tpublic get offsetStart(): number {\n\t\treturn this.expression.getStart();\n\t}\n}\n\nfunction findNodeAt(parent: ts.Node, offset: number): ts.Node {\n\tfor (const child of parent.getChildren()) {\n\t\tif (child.getStart() <= offset && offset <= child.getEnd()) {\n\t\t\treturn findNodeAt(child, offset);\n\t\t}\n\t}\n\treturn parent;\n}\n\nfunction getAllTestStatusMessagesAt(uri: Uri, lineNumber: number): TestMessage[] {\n\tif (tests.testResults.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst run = tests.testResults[0];\n\tconst snapshots = getTestResultsWithUri(run, uri);\n\tconst result: TestMessage[] = [];\n\n\tfor (const snapshot of snapshots) {\n\t\tfor (const m of snapshot.taskStates[0].messages) {\n\t\t\tif (\n\t\t\t\tm.location &&\n\t\t\t\tm.location.range.start.line <= lineNumber &&\n\t\t\t\tlineNumber <= m.location.range.end.line\n\t\t\t) {\n\t\t\t\tresult.push(m);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction getTestResultsWithUri(testRun: TestRunResult, uri: Uri): TestResultSnapshot[] {\n\tconst results: TestResultSnapshot[] = [];\n\n\tconst walk = (r: TestResultSnapshot) => {\n\t\tfor (const c of r.children) {\n\t\t\twalk(c);\n\t\t}\n\t\tif (r.uri?.toString() === uri.toString()) {\n\t\t\tresults.push(r);\n\t\t}\n\t};\n\n\tfor (const r of testRun.results) {\n\t\twalk(r);\n\t}\n\n\treturn results;\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/failureTracker.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { spawn } from 'child_process';\nimport { existsSync, mkdirSync, renameSync } from 'fs';\nimport { readFile, writeFile } from 'fs/promises';\nimport { dirname, join } from 'path';\nimport * as vscode from 'vscode';\n\ninterface IGitState {\n\tcommitId: string;\n\ttracked: string;\n\tuntracked: Record<string, string>;\n}\n\ninterface ITrackedRemediation {\n\tsnapshot: vscode.TestResultSnapshot;\n\tfailing: IGitState;\n\tpassing: IGitState;\n}\n\nconst MAX_FAILURES = 10;\n\nexport class FailureTracker {\n\tprivate readonly disposables: vscode.Disposable[] = [];\n\tprivate readonly lastFailed = new Map<\n\t\tstring,\n\t\t{ snapshot: vscode.TestResultSnapshot; failing: IGitState }\n\t>();\n\n\tprivate readonly logFile: string;\n\tprivate logs?: ITrackedRemediation[];\n\n\tconstructor(storageLocation: string, private readonly rootDir: string) {\n\t\tthis.logFile = join(storageLocation, '.build/vscode-test-failures.json');\n\t\tmkdirSync(dirname(this.logFile), { recursive: true });\n\n\t\tconst oldLogFile = join(rootDir, '.build/vscode-test-failures.json');\n\t\tif (existsSync(oldLogFile)) {\n\t\t\ttry {\n\t\t\t\trenameSync(oldLogFile, this.logFile);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t}\n\n\t\tthis.disposables.push(\n\t\t\tvscode.commands.registerCommand('selfhost-test-provider.openFailureLog', async () => {\n\t\t\t\tconst doc = await vscode.workspace.openTextDocument(this.logFile);\n\t\t\t\tawait vscode.window.showTextDocument(doc);\n\t\t\t})\n\t\t);\n\n\t\tthis.disposables.push(\n\t\t\tvscode.tests.onDidChangeTestResults(() => {\n\t\t\t\tconst last = vscode.tests.testResults[0];\n\t\t\t\tif (!last) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet gitState: Promise<IGitState> | undefined;\n\t\t\t\tconst getGitState = () => gitState ?? (gitState = this.captureGitState());\n\n\t\t\t\tconst queue = [last.results];\n\t\t\t\tfor (let i = 0; i < queue.length; i++) {\n\t\t\t\t\tfor (const snapshot of queue[i]) {\n\t\t\t\t\t\t// only interested in states of leaf tests\n\t\t\t\t\t\tif (snapshot.children.length) {\n\t\t\t\t\t\t\tqueue.push(snapshot.children);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst key = `${snapshot.uri}/${snapshot.id}`;\n\t\t\t\t\t\tconst prev = this.lastFailed.get(key);\n\t\t\t\t\t\tif (snapshot.taskStates.some(s => s.state === vscode.TestResultState.Failed)) {\n\t\t\t\t\t\t\t// unset the parent to avoid a circular JSON structure:\n\t\t\t\t\t\t\tgetGitState().then(s =>\n\t\t\t\t\t\t\t\tthis.lastFailed.set(key, {\n\t\t\t\t\t\t\t\t\tsnapshot: { ...snapshot, parent: undefined },\n\t\t\t\t\t\t\t\t\tfailing: s,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (prev) {\n\t\t\t\t\t\t\tthis.lastFailed.delete(key);\n\t\t\t\t\t\t\tgetGitState().then(s => this.append({ ...prev, passing: s }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate async append(log: ITrackedRemediation) {\n\t\tif (!this.logs) {\n\t\t\ttry {\n\t\t\t\tthis.logs = JSON.parse(await readFile(this.logFile, 'utf-8'));\n\t\t\t} catch {\n\t\t\t\tthis.logs = [];\n\t\t\t}\n\t\t}\n\n\t\tconst logs = this.logs!;\n\t\tlogs.push(log);\n\t\tif (logs.length > MAX_FAILURES) {\n\t\t\tlogs.splice(0, logs.length - MAX_FAILURES);\n\t\t}\n\n\t\tawait writeFile(this.logFile, JSON.stringify(logs, undefined, 2));\n\t}\n\n\tprivate async captureGitState() {\n\t\tconst [commitId, tracked, untracked] = await Promise.all([\n\t\t\tthis.exec('git', ['rev-parse', 'HEAD']),\n\t\t\tthis.exec('git', ['diff', 'HEAD']),\n\t\t\tthis.exec('git', ['ls-files', '--others', '--exclude-standard']).then(async output => {\n\t\t\t\tconst mapping: Record<string, string> = {};\n\t\t\t\tawait Promise.all(\n\t\t\t\t\toutput\n\t\t\t\t\t\t.trim()\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map(async f => {\n\t\t\t\t\t\t\tmapping[f] = await readFile(join(this.rootDir, f), 'utf-8');\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\treturn mapping;\n\t\t\t}),\n\t\t]);\n\t\treturn { commitId, tracked, untracked };\n\t}\n\n\tpublic dispose() {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n\n\tprivate exec(command: string, args: string[]): Promise<string> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst child = spawn(command, args, { stdio: 'pipe', cwd: this.rootDir });\n\t\t\tlet output = '';\n\t\t\tchild.stdout.setEncoding('utf-8').on('data', b => (output += b));\n\t\t\tchild.stderr.setEncoding('utf-8').on('data', b => (output += b));\n\t\t\tchild.on('error', reject);\n\t\t\tchild.on('exit', code =>\n\t\t\t\tcode === 0\n\t\t\t\t\t? resolve(output)\n\t\t\t\t\t: reject(new Error(`Failed with error code ${code}\\n${output}`))\n\t\t\t);\n\t\t});\n\t}\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/importGraph.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { join } from 'path';\nimport * as vscode from 'vscode';\nimport { bulkhead } from 'cockatiel';\nimport { promises as fs } from 'fs';\n\nconst maxInt32 = 2 ** 31 - 1;\n\n// limit concurrency to avoid overwhelming the filesystem during discovery\nconst discoverLimiter = bulkhead(8, Infinity);\n\n// Max import distance when listing related code to improve relevancy.\nconst defaultMaxDistance = 3;\n\n/**\n * Maintains a graph of imports in the codebase. This works lazily resolving\n * imports and re-parsing files only on request.\n *\n * This is a rough, file-level graph derived from simple regex matching on\n * source files to avoid having to parse the AST of every file in the codebase,\n * which is possible but more intensive. (See: all the years of work from the\n * TS language server.)\n *\n * A more advanced implementation could use references from the language server.\n */\nexport class ImportGraph implements vscode.TestRelatedCodeProvider {\n\tprivate graph = new Map<string, FileNode>();\n\n\tconstructor(\n\t\tprivate readonly root: vscode.Uri,\n\t\tprivate readonly discoverWorkspaceTests: () => Thenable<vscode.TestItem[]>,\n\t\tprivate readonly getTestNodeForDoc: (uri: vscode.Uri) => vscode.TestItem | undefined,\n\t) { }\n\n\t/** @inheritdoc */\n\tpublic async provideRelatedCode(test: vscode.TestItem, token: vscode.CancellationToken): Promise<vscode.Location[]> {\n\t\t// this is kind of a stub for this implementation. Naive following imports\n\t\t// isn't that useful for finding a test's related code.\n\t\tconst node = await this.discoverOutwards(test.uri, new Set(), defaultMaxDistance, token);\n\t\tif (!node) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst imports = new Set<string>();\n\t\tconst queue = [{ distance: 0, next: node.imports }];\n\t\twhile (queue.length) {\n\t\t\tconst { distance, next } = queue.shift()!;\n\t\t\tfor (const imp of next) {\n\t\t\t\tif (imports.has(imp.path)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\timports.add(imp.path);\n\t\t\t\tif (distance < defaultMaxDistance) {\n\t\t\t\t\tqueue.push({ next: imp.imports, distance: distance + 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [...imports].map(importPath =>\n\t\t\tnew vscode.Location(\n\t\t\t\tvscode.Uri.file(join(this.root.fsPath, 'src', `${importPath}.ts`)),\n\t\t\t\tnew vscode.Range(0, 0, maxInt32, 0),\n\t\t\t),\n\t\t);\n\t}\n\n\t/** @inheritdoc */\n\tpublic async provideRelatedTests(document: vscode.TextDocument, _position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.TestItem[]> {\n\t\t// Expand all known tests to ensure imports of this file are realized.\n\t\tconst rootTests = await this.discoverWorkspaceTests();\n\t\tconst seen = new Set<string>();\n\t\tawait Promise.all(rootTests.map(v => v.uri && this.discoverOutwards(v.uri, seen, defaultMaxDistance, token)));\n\n\t\tconst node = this.getNode(document.uri);\n\t\tif (!node) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst tests: vscode.TestItem[] = [];\n\t\tconst queue: { next: FileNode; distance: number }[] = [{ next: node, distance: 0 }];\n\t\tconst visited = new Set<FileNode>();\n\t\tlet maxDistance = Infinity;\n\n\t\twhile (queue.length) {\n\t\t\tconst { next, distance } = queue.shift()!;\n\t\t\tif (visited.has(next)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvisited.add(next);\n\t\t\tconst testForDoc = this.getTestNodeForDoc(next.uri);\n\t\t\tif (testForDoc) {\n\t\t\t\ttests.push(testForDoc);\n\t\t\t\t// only look for tests half again as far away as the closest test to keep things relevant\n\t\t\t\tif (!Number.isFinite(maxDistance)) {\n\t\t\t\t\tmaxDistance = distance * 3 / 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (distance < maxDistance) {\n\t\t\t\tfor (const importedByNode of next.importedBy) {\n\t\t\t\t\tqueue.push({ next: importedByNode, distance: distance + 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn tests;\n\t}\n\n\tpublic didChange(uri: vscode.Uri, deleted: boolean) {\n\t\tconst rel = this.uriToImportPath(uri);\n\t\tconst node = rel && this.graph.get(rel);\n\t\tif (!node) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (deleted) {\n\t\t\tthis.graph.delete(rel);\n\t\t\tfor (const imp of node.imports) {\n\t\t\t\timp.importedBy.delete(node);\n\t\t\t}\n\t\t} else {\n\t\t\tnode.isSynced = false;\n\t\t}\n\t}\n\n\tprivate getNode(uri: vscode.Uri | undefined): FileNode | undefined {\n\t\tconst rel = this.uriToImportPath(uri);\n\t\treturn rel ? this.graph.get(rel) : undefined;\n\t}\n\n\t/** Discover all nodes that import the file */\n\tprivate async discoverOutwards(uri: vscode.Uri | undefined, seen: Set<string>, maxDistance: number, token: vscode.CancellationToken): Promise<FileNode | undefined> {\n\t\tconst rel = this.uriToImportPath(uri);\n\t\tif (!rel) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet node = this.graph.get(rel);\n\t\tif (!node) {\n\t\t\tnode = new FileNode(uri!, rel);\n\t\t\tthis.graph.set(rel, node);\n\t\t}\n\n\t\tawait this.discoverOutwardsInner(node, seen, maxDistance, token);\n\t\treturn node;\n\t}\n\n\tprivate async discoverOutwardsInner(node: FileNode, seen: Set<string>, maxDistance: number, token: vscode.CancellationToken) {\n\t\tif (seen.has(node.path) || maxDistance === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tseen.add(node.path);\n\t\tif (node.isSynced === false) {\n\t\t\tawait this.syncNode(node);\n\t\t} else if (node.isSynced instanceof Promise) {\n\t\t\tawait node.isSynced;\n\t\t}\n\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\t\tawait Promise.all([...node.imports].map(i => this.discoverOutwardsInner(i, seen, maxDistance - 1, token)));\n\t}\n\n\tprivate async syncNode(node: FileNode) {\n\t\tnode.isSynced = discoverLimiter.execute(async () => {\n\t\t\tconst doc = vscode.workspace.textDocuments.find(d => d.uri.toString() === node.uri.toString());\n\n\t\t\tlet text: string;\n\t\t\tif (doc) {\n\t\t\t\ttext = doc.getText();\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\ttext = await fs.readFile(node.uri.fsPath, 'utf8');\n\t\t\t\t} catch {\n\t\t\t\t\ttext = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const imp of node.imports) {\n\t\t\t\timp.importedBy.delete(node);\n\t\t\t}\n\t\t\tnode.imports.clear();\n\n\t\t\tfor (const [, importPath] of text.matchAll(IMPORT_RE)) {\n\t\t\t\tlet imp = this.graph.get(importPath);\n\t\t\t\tif (!imp) {\n\t\t\t\t\timp = new FileNode(this.importPathToUri(importPath), importPath);\n\t\t\t\t\tthis.graph.set(importPath, imp);\n\t\t\t\t}\n\n\t\t\t\timp.importedBy.add(node);\n\t\t\t\tnode.imports.add(imp);\n\t\t\t}\n\n\t\t\tnode.isSynced = true;\n\t\t});\n\n\t\tawait node.isSynced;\n\t}\n\n\tprivate uriToImportPath(uri: vscode.Uri | undefined) {\n\t\tif (!uri) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst relativePath = vscode.workspace.asRelativePath(uri).replaceAll('\\\\', '/');\n\t\tif (!relativePath.startsWith('src/vs/') || !relativePath.endsWith('.ts')) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn relativePath.slice('src/'.length, -'.ts'.length);\n\t}\n\n\tprivate importPathToUri(importPath: string) {\n\t\treturn vscode.Uri.file(join(this.root.fsPath, 'src', `${importPath}.ts`));\n\t}\n}\n\nconst IMPORT_RE = /import .*? from [\"'](vs\\/[^\"']+)/g;\n\nclass FileNode {\n\tpublic imports = new Set<FileNode>();\n\tpublic importedBy = new Set<FileNode>();\n\tpublic isSynced: boolean | Promise<void> = false;\n\n\t// Path is the *import path* starting with `vs/`\n\tconstructor(\n\t\tpublic readonly uri: vscode.Uri,\n\t\tpublic readonly path: string,\n\t) { }\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/memoize.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const memoizeLast = <A, T>(fn: (args: A) => T): ((args: A) => T) => {\n\tlet last: { arg: A; result: T } | undefined;\n\treturn arg => {\n\t\tif (last && last.arg === arg) {\n\t\t\treturn last.result;\n\t\t}\n\n\t\tconst result = fn(arg);\n\t\tlast = { arg, result };\n\t\treturn result;\n\t};\n};\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/metadata.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { TestMessage } from 'vscode';\n\nexport interface TestMessageMetadata {\n\texpectedValue: unknown;\n\tactualValue: unknown;\n}\n\nconst cache = new Array<{ id: string; metadata: TestMessageMetadata }>();\n\nlet id = 0;\n\nfunction getId(): string {\n\treturn `msg:${id++}:`;\n}\n\nconst regexp = /msg:\\d+:/;\n\nexport function attachTestMessageMetadata(\n\tmessage: TestMessage,\n\tmetadata: TestMessageMetadata\n): void {\n\tconst existingMetadata = getTestMessageMetadata(message);\n\tif (existingMetadata) {\n\t\tObject.assign(existingMetadata, metadata);\n\t\treturn;\n\t}\n\n\tconst id = getId();\n\n\tif (typeof message.message === 'string') {\n\t\tmessage.message = `${message.message}\\n${id}`;\n\t} else {\n\t\tmessage.message.appendText(`\\n${id}`);\n\t}\n\n\tcache.push({ id, metadata });\n\twhile (cache.length > 100) {\n\t\tcache.shift();\n\t}\n}\n\nexport function getTestMessageMetadata(message: TestMessage): TestMessageMetadata | undefined {\n\tlet value: string;\n\tif (typeof message.message === 'string') {\n\t\tvalue = message.message;\n\t} else {\n\t\tvalue = message.message.value;\n\t}\n\n\tconst result = regexp.exec(value);\n\tif (!result) {\n\t\treturn undefined;\n\t}\n\n\tconst id = result[0];\n\treturn cache.find(c => c.id === id)?.metadata;\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/snapshot.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { promises as fs } from 'fs';\nimport * as vscode from 'vscode';\n\nexport const snapshotComment = '\\n\\n// Snapshot file: ';\n\nexport const registerSnapshotUpdate = (ctrl: vscode.TestController) =>\n\tvscode.commands.registerCommand('selfhost-test-provider.updateSnapshot', async args => {\n\t\tconst message: vscode.TestMessage = args.message;\n\t\tconst index = message.expectedOutput?.indexOf(snapshotComment);\n\t\tif (!message.expectedOutput || !message.actualOutput || !index || index === -1) {\n\t\t\tvscode.window.showErrorMessage('Could not find snapshot comment in message');\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = message.expectedOutput.slice(index + snapshotComment.length);\n\t\tawait fs.writeFile(file, message.actualOutput);\n\t\tctrl.invalidateTestResults(args.test);\n\t});\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as ts from 'typescript';\nimport * as vscode from 'vscode';\nimport { TestCase, TestConstruct, TestSuite, VSCodeTest } from './testTree';\n\nconst suiteNames = new Set(['suite', 'flakySuite']);\nconst testNames = new Set(['test']);\n\nexport const enum Action {\n\tSkip,\n\tRecurse,\n}\n\nexport const extractTestFromNode = (src: ts.SourceFile, node: ts.Node, parent: VSCodeTest) => {\n\tif (!ts.isCallExpression(node)) {\n\t\treturn Action.Recurse;\n\t}\n\n\tconst asSuite = identifyCall(node.expression, suiteNames);\n\tconst asTest = identifyCall(node.expression, testNames);\n\tconst either = asSuite || asTest;\n\tif (either === IdentifiedCall.Skipped) {\n\t\treturn Action.Skip;\n\t}\n\tif (either === IdentifiedCall.Nothing) {\n\t\treturn Action.Recurse;\n\t}\n\n\tconst name = node.arguments[0];\n\tconst func = node.arguments[1];\n\tif (!name || !ts.isStringLiteralLike(name) || !func) {\n\t\treturn Action.Recurse;\n\t}\n\n\tconst start = src.getLineAndCharacterOfPosition(name.pos);\n\tconst end = src.getLineAndCharacterOfPosition(func.end);\n\tconst range = new vscode.Range(\n\t\tnew vscode.Position(start.line, start.character),\n\t\tnew vscode.Position(end.line, end.character)\n\t);\n\n\tconst cparent = parent instanceof TestConstruct ? parent : undefined;\n\n\t// we know this is either a suite or a test because we checked for skipped/nothing above\n\n\tif (asTest) {\n\t\treturn new TestCase(name.text, range, cparent);\n\t}\n\n\tif (asSuite) {\n\t\treturn new TestSuite(name.text, range, cparent);\n\t}\n\n\tthrow new Error('unreachable');\n};\n\nconst enum IdentifiedCall {\n\tNothing,\n\tSkipped,\n\tIsThing,\n}\n\nconst identifyCall = (lhs: ts.Node, needles: ReadonlySet<string>): IdentifiedCall => {\n\tif (ts.isIdentifier(lhs)) {\n\t\treturn needles.has(lhs.escapedText || lhs.text) ? IdentifiedCall.IsThing : IdentifiedCall.Nothing;\n\t}\n\n\tif (isPropertyCall(lhs) && lhs.name.text === 'skip') {\n\t\treturn needles.has(lhs.expression.text) ? IdentifiedCall.Skipped : IdentifiedCall.Nothing;\n\t}\n\n\tif (ts.isParenthesizedExpression(lhs) && ts.isConditionalExpression(lhs.expression)) {\n\t\treturn Math.max(identifyCall(lhs.expression.whenTrue, needles), identifyCall(lhs.expression.whenFalse, needles));\n\t}\n\n\treturn IdentifiedCall.Nothing;\n};\n\nconst isPropertyCall = (\n\tlhs: ts.Node\n): lhs is ts.PropertyAccessExpression & { expression: ts.Identifier; name: ts.Identifier } =>\n\tts.isPropertyAccessExpression(lhs) &&\n\tts.isIdentifier(lhs.expression) &&\n\tts.isIdentifier(lhs.name);\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/stackTraceParser.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Copied from https://github.com/microsoft/vscode-js-debug/blob/1d104b5184736677ab5cc280c70bbd227403850c/src/common/stackTraceParser.ts#L18\n\n// Either match lines like\n// \"    at fulfilled (/Users/roblou/code/testapp-node2/out/app.js:5:58)\"\n// or\n// \"    at /Users/roblou/code/testapp-node2/out/app.js:60:23\"\n// and replace the path in them\nconst re1 = /^(\\W*at .*\\()(.*):(\\d+):(\\d+)(\\))$/;\nconst re2 = /^(\\W*at )(.*):(\\d+):(\\d+)$/;\n\nconst getLabelRe = /^\\W*at (.*) \\($/;\n\n/**\n * Parses a textual stack trace.\n */\nexport class StackTraceParser {\n    /** Gets whether the stacktrace has any locations in it. */\n    public static isStackLike(str: string) {\n        return re1.test(str) || re2.test(str);\n    }\n    constructor(private readonly stack: string) { }\n\n    /** Iterates over segments of text and locations in the stack. */\n    *[Symbol.iterator]() {\n        for (const line of this.stack.split('\\n')) {\n            const match = re1.exec(line) || re2.exec(line);\n            if (!match) {\n                yield line + '\\n';\n                continue;\n            }\n\n            const [, prefix, url, lineNo, columnNo, suffix] = match;\n            if (prefix) {\n                yield prefix;\n            }\n\n            yield new StackTraceLocation(getLabelRe.exec(prefix)?.[1], url, Number(lineNo), Number(columnNo));\n\n            if (suffix) {\n                yield suffix;\n            }\n\n            yield '\\n';\n        }\n    }\n}\n\nexport class StackTraceLocation {\n    constructor(\n        public readonly label: string | undefined,\n        public readonly path: string,\n        public readonly lineBase1: number,\n        public readonly columnBase1: number,\n    ) { }\n}"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/streamSplitter.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// DO NOT EDIT DIRECTLY: copied from src/vs/base/node/nodeStreams.ts\n\nimport { Transform } from 'stream';\n\n/**\n * A Transform stream that splits the input on the \"splitter\" substring.\n * The resulting chunks will contain (and trail with) the splitter match.\n * The last chunk when the stream ends will be emitted even if a splitter\n * is not encountered.\n */\nexport class StreamSplitter extends Transform {\n\tprivate buffer: Buffer | undefined;\n\tprivate readonly splitter: number;\n\tprivate readonly spitterLen: number;\n\n\tconstructor(splitter: string | number | Buffer) {\n\t\tsuper();\n\t\tif (typeof splitter === 'number') {\n\t\t\tthis.splitter = splitter;\n\t\t\tthis.spitterLen = 1;\n\t\t} else {\n\t\t\tthrow new Error('not implemented here');\n\t\t}\n\t}\n\n\toverride _transform(\n\t\tchunk: Buffer,\n\t\t_encoding: string,\n\t\tcallback: (error?: Error | null, data?: any) => void\n\t): void {\n\t\tif (!this.buffer) {\n\t\t\tthis.buffer = chunk;\n\t\t} else {\n\t\t\tthis.buffer = Buffer.concat([this.buffer, chunk]);\n\t\t}\n\n\t\tlet offset = 0;\n\t\twhile (offset < this.buffer.length) {\n\t\t\tconst index = this.buffer.indexOf(this.splitter, offset);\n\t\t\tif (index === -1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.push(this.buffer.slice(offset, index + this.spitterLen));\n\t\t\toffset = index + this.spitterLen;\n\t\t}\n\n\t\tthis.buffer = offset === this.buffer.length ? undefined : this.buffer.slice(offset);\n\t\tcallback();\n\t}\n\n\toverride _flush(callback: (error?: Error | null, data?: any) => void): void {\n\t\tif (this.buffer) {\n\t\t\tthis.push(this.buffer);\n\t\t}\n\n\t\tcallback();\n\t}\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/testOutputScanner.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n\tdecodedMappings,\n\tGREATEST_LOWER_BOUND,\n\tLEAST_UPPER_BOUND,\n\toriginalPositionFor,\n\tTraceMap,\n} from '@jridgewell/trace-mapping';\nimport * as styles from 'ansi-styles';\nimport { ChildProcessWithoutNullStreams } from 'child_process';\nimport * as vscode from 'vscode';\nimport { istanbulCoverageContext, PerTestCoverageTracker } from './coverageProvider';\nimport { attachTestMessageMetadata } from './metadata';\nimport { snapshotComment } from './snapshot';\nimport { StackTraceLocation, StackTraceParser } from './stackTraceParser';\nimport { StreamSplitter } from './streamSplitter';\nimport { getContentFromFilesystem } from './testTree';\nimport { IScriptCoverage } from './v8CoverageWrangling';\n\nexport const enum MochaEvent {\n\tStart = 'start',\n\tTestStart = 'testStart',\n\tPass = 'pass',\n\tFail = 'fail',\n\tEnd = 'end',\n\n\t// custom events:\n\tCoverageInit = 'coverageInit',\n\tCoverageIncrement = 'coverageIncrement',\n}\n\nexport interface IStartEvent {\n\ttotal: number;\n}\n\nexport interface ITestStartEvent {\n\ttitle: string;\n\tfullTitle: string;\n\tfile: string;\n\tcurrentRetry: number;\n\tspeed: string;\n}\n\nexport interface IPassEvent extends ITestStartEvent {\n\tduration: number;\n}\n\nexport interface IFailEvent extends IPassEvent {\n\terr: string;\n\tstack: string | null;\n\texpected?: string;\n\tactual?: string;\n\texpectedJSON?: unknown;\n\tactualJSON?: unknown;\n\tsnapshotPath?: string;\n}\n\nexport interface IEndEvent {\n\tsuites: number;\n\ttests: number;\n\tpasses: number;\n\tpending: number;\n\tfailures: number;\n\tstart: string /* ISO date */;\n\tend: string /* ISO date */;\n}\n\nexport interface ITestCoverageCoverage {\n\tfile: string;\n\tfullTitle: string;\n\tcoverage: { result: IScriptCoverage[] };\n}\n\nexport type MochaEventTuple =\n\t| [MochaEvent.Start, IStartEvent]\n\t| [MochaEvent.TestStart, ITestStartEvent]\n\t| [MochaEvent.Pass, IPassEvent]\n\t| [MochaEvent.Fail, IFailEvent]\n\t| [MochaEvent.End, IEndEvent]\n\t| [MochaEvent.CoverageInit, { result: IScriptCoverage[] }]\n\t| [MochaEvent.CoverageIncrement, ITestCoverageCoverage];\n\nconst LF = '\\n'.charCodeAt(0);\n\nexport class TestOutputScanner implements vscode.Disposable {\n\tprotected mochaEventEmitter = new vscode.EventEmitter<MochaEventTuple>();\n\tprotected outputEventEmitter = new vscode.EventEmitter<string>();\n\tprotected onExitEmitter = new vscode.EventEmitter<string | undefined>();\n\n\t/**\n\t * Fired when a mocha event comes in.\n\t */\n\tpublic readonly onMochaEvent = this.mochaEventEmitter.event;\n\n\t/**\n\t * Fired when other output from the process comes in.\n\t */\n\tpublic readonly onOtherOutput = this.outputEventEmitter.event;\n\n\t/**\n\t * Fired when the process encounters an error, or exits.\n\t */\n\tpublic readonly onRunnerExit = this.onExitEmitter.event;\n\n\tconstructor(private readonly process: ChildProcessWithoutNullStreams, private args?: string[]) {\n\t\tprocess.stdout.pipe(new StreamSplitter(LF)).on('data', this.processData);\n\t\tprocess.stderr.pipe(new StreamSplitter(LF)).on('data', this.processData);\n\t\tprocess.on('error', e => this.onExitEmitter.fire(e.message));\n\t\tprocess.on('exit', code =>\n\t\t\tthis.onExitEmitter.fire(code ? `Test process exited with code ${code}` : undefined)\n\t\t);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tpublic dispose() {\n\t\ttry {\n\t\t\tthis.process.kill();\n\t\t} catch {\n\t\t\t// ignored\n\t\t}\n\t}\n\n\tprotected readonly processData = (data: string | Buffer) => {\n\t\tif (this.args) {\n\t\t\tthis.outputEventEmitter.fire(`./scripts/test ${this.args.join(' ')}`);\n\t\t\tthis.args = undefined;\n\t\t}\n\n\t\tdata = data.toString();\n\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(data.trim()) as unknown;\n\t\t\tif (parsed instanceof Array && parsed.length === 2 && typeof parsed[0] === 'string') {\n\t\t\t\tthis.mochaEventEmitter.fire(parsed as MochaEventTuple);\n\t\t\t} else {\n\t\t\t\tthis.outputEventEmitter.fire(data);\n\t\t\t}\n\t\t} catch {\n\t\t\tthis.outputEventEmitter.fire(data);\n\t\t}\n\t};\n}\n\ntype QueuedOutput = string | [string, vscode.Location | undefined, vscode.TestItem | undefined];\n\nexport async function scanTestOutput(\n\ttests: Map<string, vscode.TestItem>,\n\ttask: vscode.TestRun,\n\tscanner: TestOutputScanner,\n\tcoverageDir: string | undefined,\n\tcancellation: vscode.CancellationToken\n): Promise<void> {\n\tconst exitBlockers: Set<Promise<unknown>> = new Set();\n\tconst skippedTests = new Set(tests.values());\n\tconst store = new SourceMapStore();\n\tlet outputQueue = Promise.resolve();\n\tconst enqueueOutput = (fn: QueuedOutput | (() => Promise<QueuedOutput>)) => {\n\t\texitBlockers.delete(outputQueue);\n\t\toutputQueue = outputQueue.finally(async () => {\n\t\t\tconst r = typeof fn === 'function' ? await fn() : fn;\n\t\t\ttypeof r === 'string' ? task.appendOutput(r) : task.appendOutput(...r);\n\t\t});\n\t\texitBlockers.add(outputQueue);\n\t\treturn outputQueue;\n\t};\n\tconst enqueueExitBlocker = <T>(prom: Promise<T>): Promise<T> => {\n\t\texitBlockers.add(prom);\n\t\tprom.finally(() => exitBlockers.delete(prom));\n\t\treturn prom;\n\t};\n\n\tlet perTestCoverage: PerTestCoverageTracker | undefined;\n\tlet lastTest: vscode.TestItem | undefined;\n\tlet ranAnyTest = false;\n\n\ttry {\n\t\tif (cancellation.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait new Promise<void>(resolve => {\n\t\t\tcancellation.onCancellationRequested(() => {\n\t\t\t\tresolve();\n\t\t\t});\n\n\t\t\tlet currentTest: vscode.TestItem | undefined;\n\n\t\t\tscanner.onRunnerExit(err => {\n\t\t\t\tif (err) {\n\t\t\t\t\tenqueueOutput(err + crlf);\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t});\n\n\t\t\tscanner.onOtherOutput(str => {\n\t\t\t\tconst match = spdlogRe.exec(str);\n\t\t\t\tif (!match) {\n\t\t\t\t\tenqueueOutput(str + crlf);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst logLocation = store.getSourceLocation(match[2], Number(match[3]) - 1);\n\t\t\t\tconst logContents = replaceAllLocations(store, match[1]);\n\t\t\t\tconst test = currentTest;\n\n\t\t\t\tenqueueOutput(() =>\n\t\t\t\t\tPromise.all([logLocation, logContents]).then(([location, contents]) => [\n\t\t\t\t\t\tcontents + crlf,\n\t\t\t\t\t\tlocation,\n\t\t\t\t\t\ttest,\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tscanner.onMochaEvent(evt => {\n\t\t\t\tswitch (evt[0]) {\n\t\t\t\t\tcase MochaEvent.Start:\n\t\t\t\t\t\tbreak; // no-op\n\t\t\t\t\tcase MochaEvent.TestStart:\n\t\t\t\t\t\tcurrentTest = tests.get(evt[1].fullTitle);\n\t\t\t\t\t\tif (!currentTest) {\n\t\t\t\t\t\t\tconsole.warn(`Could not find test ${evt[1].fullTitle}`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskippedTests.delete(currentTest);\n\t\t\t\t\t\ttask.started(currentTest);\n\t\t\t\t\t\tranAnyTest = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MochaEvent.Pass:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst title = evt[1].fullTitle;\n\t\t\t\t\t\t\tconst tcase = tests.get(title);\n\t\t\t\t\t\t\tenqueueOutput(` ${styles.green.open}√${styles.green.close} ${title}\\r\\n`);\n\t\t\t\t\t\t\tif (tcase) {\n\t\t\t\t\t\t\t\tlastTest = tcase;\n\t\t\t\t\t\t\t\ttask.passed(tcase, evt[1].duration);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MochaEvent.Fail:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\terr,\n\t\t\t\t\t\t\t\tstack,\n\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\texpected,\n\t\t\t\t\t\t\t\texpectedJSON,\n\t\t\t\t\t\t\t\tactual,\n\t\t\t\t\t\t\t\tactualJSON,\n\t\t\t\t\t\t\t\tsnapshotPath,\n\t\t\t\t\t\t\t\tfullTitle: id,\n\t\t\t\t\t\t\t} = evt[1];\n\t\t\t\t\t\t\tlet tcase = tests.get(id);\n\t\t\t\t\t\t\t// report failures on hook to the last-seen test, or first test if none run yet\n\t\t\t\t\t\t\tif (!tcase && (id.includes('hook for') || id.includes('hook in'))) {\n\t\t\t\t\t\t\t\ttcase = lastTest ?? tests.values().next().value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tenqueueOutput(`${styles.red.open} x ${id}${styles.red.close}\\r\\n`);\n\t\t\t\t\t\t\tconst rawErr = stack || err;\n\t\t\t\t\t\t\tconst locationsReplaced = replaceAllLocations(store, forceCRLF(rawErr));\n\t\t\t\t\t\t\tif (rawErr) {\n\t\t\t\t\t\t\t\tenqueueOutput(async () => [await locationsReplaced, undefined, tcase]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!tcase) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst hasDiff =\n\t\t\t\t\t\t\t\tactual !== undefined &&\n\t\t\t\t\t\t\t\texpected !== undefined &&\n\t\t\t\t\t\t\t\t(expected !== '[undefined]' || actual !== '[undefined]');\n\t\t\t\t\t\t\tconst testFirstLine =\n\t\t\t\t\t\t\t\ttcase.range &&\n\t\t\t\t\t\t\t\tnew vscode.Location(\n\t\t\t\t\t\t\t\t\ttcase.uri!,\n\t\t\t\t\t\t\t\t\tnew vscode.Range(\n\t\t\t\t\t\t\t\t\t\ttcase.range.start,\n\t\t\t\t\t\t\t\t\t\tnew vscode.Position(tcase.range.start.line, 100)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tenqueueExitBlocker(\n\t\t\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\t\t\tconst stackInfo = await deriveStackLocations(store, rawErr, tcase!);\n\t\t\t\t\t\t\t\t\tlet message: vscode.TestMessage;\n\n\t\t\t\t\t\t\t\t\tif (hasDiff) {\n\t\t\t\t\t\t\t\t\t\tmessage = new vscode.TestMessage(tryMakeMarkdown(err));\n\t\t\t\t\t\t\t\t\t\tmessage.actualOutput = outputToString(actual);\n\t\t\t\t\t\t\t\t\t\tmessage.expectedOutput = outputToString(expected);\n\t\t\t\t\t\t\t\t\t\tif (snapshotPath) {\n\t\t\t\t\t\t\t\t\t\t\tmessage.contextValue = 'isSelfhostSnapshotMessage';\n\t\t\t\t\t\t\t\t\t\t\tmessage.expectedOutput += snapshotComment + snapshotPath;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tattachTestMessageMetadata(message, {\n\t\t\t\t\t\t\t\t\t\t\texpectedValue: expectedJSON,\n\t\t\t\t\t\t\t\t\t\t\tactualValue: actualJSON,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tmessage = new vscode.TestMessage(\n\t\t\t\t\t\t\t\t\t\t\tstack ? await sourcemapStack(store, stack) : await locationsReplaced\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tmessage.location = stackInfo.primary ?? testFirstLine;\n\t\t\t\t\t\t\t\t\tmessage.stackTrace = stackInfo.stack;\n\t\t\t\t\t\t\t\t\ttask.failed(tcase!, message, duration);\n\t\t\t\t\t\t\t\t})()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MochaEvent.End:\n\t\t\t\t\t\t// no-op, we wait until the process exits to ensure coverage is written out\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MochaEvent.CoverageInit:\n\t\t\t\t\t\tperTestCoverage ??= new PerTestCoverageTracker(store);\n\t\t\t\t\t\tfor (const result of evt[1].result) {\n\t\t\t\t\t\t\tperTestCoverage.add(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MochaEvent.CoverageIncrement: {\n\t\t\t\t\t\tconst { fullTitle, coverage } = evt[1];\n\t\t\t\t\t\tconst tcase = tests.get(fullTitle);\n\t\t\t\t\t\tif (tcase) {\n\t\t\t\t\t\t\tperTestCoverage ??= new PerTestCoverageTracker(store);\n\t\t\t\t\t\t\tfor (const result of coverage.result) {\n\t\t\t\t\t\t\t\tperTestCoverage.add(result, tcase);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tif (perTestCoverage) {\n\t\t\tenqueueExitBlocker(perTestCoverage.report(task));\n\t\t}\n\n\t\tawait Promise.all([...exitBlockers]);\n\n\t\tif (coverageDir) {\n\t\t\ttry {\n\t\t\t\tawait istanbulCoverageContext.apply(task, coverageDir, {\n\t\t\t\t\tmapFileUri: uri => store.getSourceFile(uri.toString()),\n\t\t\t\t\tmapLocation: (uri, position) =>\n\t\t\t\t\t\tstore.getSourceLocation(uri.toString(), position.line, position.character),\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tconst msg = `Error loading coverage:\\n\\n${e}\\n`;\n\t\t\t\ttask.appendOutput(msg.replace(/\\n/g, crlf));\n\t\t\t}\n\t\t}\n\n\t\t// no tests? Possible crash, show output:\n\t\tif (!ranAnyTest) {\n\t\t\tawait vscode.commands.executeCommand('testing.showMostRecentOutput');\n\t\t}\n\t} catch (e) {\n\t\ttask.appendOutput((e as Error).stack || (e as Error).message);\n\t} finally {\n\t\tscanner.dispose();\n\t\tfor (const test of skippedTests) {\n\t\t\ttask.skipped(test);\n\t\t}\n\t\ttask.end();\n\t}\n}\n\nconst spdlogRe = /\"(.+)\", source: (file:\\/\\/\\/.*?)+ \\(([0-9]+)\\)/;\nconst crlf = '\\r\\n';\n\nconst forceCRLF = (str: string) => str.replace(/(?<!\\r)\\n/gm, '\\r\\n');\n\nconst sourcemapStack = async (store: SourceMapStore, str: string) => {\n\tlocationRe.lastIndex = 0;\n\n\tconst replacements = await Promise.all(\n\t\t[...str.matchAll(locationRe)].map(async match => {\n\t\t\tconst location = await deriveSourceLocation(store, match);\n\t\t\tif (!location) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tfrom: match[0],\n\t\t\t\tto: location?.uri.with({\n\t\t\t\t\tfragment: `L${location.range.start.line + 1}:${location.range.start.character + 1}`,\n\t\t\t\t}),\n\t\t\t};\n\t\t})\n\t);\n\n\tfor (const replacement of replacements) {\n\t\tif (replacement) {\n\t\t\tstr = str.replace(replacement.from, replacement.to.toString(true));\n\t\t}\n\t}\n\n\treturn str;\n};\n\nconst outputToString = (output: unknown) =>\n\ttypeof output === 'object' ? JSON.stringify(output, null, 2) : String(output);\n\nconst tryMakeMarkdown = (message: string) => {\n\tconst lines = message.split('\\n');\n\tconst start = lines.findIndex(l => l.includes('+ actual'));\n\tif (start === -1) {\n\t\treturn message;\n\t}\n\n\tlines.splice(start, 1, '```diff');\n\tlines.push('```');\n\treturn new vscode.MarkdownString(lines.join('\\n'));\n};\n\nconst inlineSourcemapRe = /^\\/\\/# sourceMappingURL=data:application\\/json;base64,(.+)/m;\nconst sourceMapBiases = [GREATEST_LOWER_BOUND, LEAST_UPPER_BOUND] as const;\n\nexport const enum SearchStrategy {\n\tFirstBefore = -1,\n\tFirstAfter = 1,\n}\n\nexport type SourceLocationMapper = (line: number, col: number, strategy: SearchStrategy) => vscode.Location | undefined;\n\nexport class SourceMapStore {\n\tprivate readonly cache = new Map</* file uri */ string, Promise<TraceMap | undefined>>();\n\n\tasync getSourceLocationMapper(fileUri: string): Promise<SourceLocationMapper> {\n\t\tconst sourceMap = await this.loadSourceMap(fileUri);\n\t\treturn (line, col, strategy) => {\n\t\t\tif (!sourceMap) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t// 1. Look for the ideal position on this line if it exists\n\t\t\tconst idealPosition = originalPositionFor(sourceMap, { column: col, line: line + 1, bias: SearchStrategy.FirstAfter ? GREATEST_LOWER_BOUND : LEAST_UPPER_BOUND });\n\t\t\tif (idealPosition.line !== null && idealPosition.column !== null && idealPosition.source !== null) {\n\t\t\t\treturn new vscode.Location(\n\t\t\t\t\tthis.completeSourceMapUrl(sourceMap, idealPosition.source),\n\t\t\t\t\tnew vscode.Position(idealPosition.line - 1, idealPosition.column)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Otherwise get the first/last valid mapping on another line.\n\t\t\tconst decoded = decodedMappings(sourceMap);\n\t\t\tconst enum MapField {\n\t\t\t\tCOLUMN = 0,\n\t\t\t\tSOURCES_INDEX = 1,\n\t\t\t\tSOURCE_LINE = 2,\n\t\t\t\tSOURCE_COLUMN = 3,\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tline += strategy;\n\t\t\t\tconst segments = decoded[line];\n\t\t\t\tif (!segments?.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst index = strategy === SearchStrategy.FirstBefore\n\t\t\t\t\t? findLastIndex(segments, s => s.length !== 1)\n\t\t\t\t\t: segments.findIndex(s => s.length !== 1);\n\t\t\t\tconst segment = segments[index];\n\n\t\t\t\tif (!segment || segment.length === 1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\treturn new vscode.Location(\n\t\t\t\t\tthis.completeSourceMapUrl(sourceMap, sourceMap.sources[segment[MapField.SOURCES_INDEX]]!),\n\t\t\t\t\tnew vscode.Position(segment[MapField.SOURCE_LINE] - 1, segment[MapField.SOURCE_COLUMN])\n\t\t\t\t);\n\t\t\t} while (strategy === SearchStrategy.FirstBefore ? line > 0 : line < decoded.length);\n\n\t\t\treturn undefined;\n\t\t};\n\t}\n\n\t/** Gets an original location from a base 0 line and column */\n\tasync getSourceLocation(fileUri: string, line: number, col = 0) {\n\t\tconst sourceMap = await this.loadSourceMap(fileUri);\n\t\tif (!sourceMap) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet smLine = line + 1;\n\n\t\t// if the range is after the end of mappings, adjust it to the last mapped line\n\t\tconst decoded = decodedMappings(sourceMap);\n\t\tif (decoded.length <= line) {\n\t\t\tsmLine = decoded.length; // base 1, no -1 needed\n\t\t\tcol = Number.MAX_SAFE_INTEGER;\n\t\t}\n\n\t\tfor (const bias of sourceMapBiases) {\n\t\t\tconst position = originalPositionFor(sourceMap, { column: col, line: smLine, bias });\n\t\t\tif (position.line !== null && position.column !== null && position.source !== null) {\n\t\t\t\treturn new vscode.Location(\n\t\t\t\t\tthis.completeSourceMapUrl(sourceMap, position.source),\n\t\t\t\t\tnew vscode.Position(position.line - 1, position.column)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tasync getSourceFile(compiledUri: string) {\n\t\tconst sourceMap = await this.loadSourceMap(compiledUri);\n\t\tif (!sourceMap) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (sourceMap.sources[0]) {\n\t\t\treturn this.completeSourceMapUrl(sourceMap, sourceMap.sources[0]);\n\t\t}\n\n\t\tfor (const bias of sourceMapBiases) {\n\t\t\tconst position = originalPositionFor(sourceMap, { column: 0, line: 1, bias });\n\t\t\tif (position.source !== null) {\n\t\t\t\treturn this.completeSourceMapUrl(sourceMap, position.source);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate completeSourceMapUrl(sm: TraceMap, source: string) {\n\t\tif (sm.sourceRoot) {\n\t\t\ttry {\n\t\t\t\treturn vscode.Uri.parse(new URL(source, sm.sourceRoot).toString());\n\t\t\t} catch {\n\t\t\t\t// ignored\n\t\t\t}\n\t\t}\n\n\t\treturn vscode.Uri.parse(source);\n\t}\n\n\tprivate loadSourceMap(fileUri: string) {\n\t\tconst existing = this.cache.get(fileUri);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\n\t\tconst promise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst contents = await getContentFromFilesystem(vscode.Uri.parse(fileUri));\n\t\t\t\tconst sourcemapMatch = inlineSourcemapRe.exec(contents);\n\t\t\t\tif (!sourcemapMatch) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst decoded = Buffer.from(sourcemapMatch[1], 'base64').toString();\n\t\t\t\treturn new TraceMap(decoded, fileUri);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`Error parsing sourcemap for ${fileUri}: ${(e as Error).stack}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t})();\n\n\t\tthis.cache.set(fileUri, promise);\n\t\treturn promise;\n\t}\n}\n\nconst locationRe = /(file:\\/{3}.+):([0-9]+):([0-9]+)/g;\n\nasync function replaceAllLocations(store: SourceMapStore, str: string) {\n\tconst output: (string | Promise<string>)[] = [];\n\tlet lastIndex = 0;\n\n\tfor (const match of str.matchAll(locationRe)) {\n\t\tconst locationPromise = deriveSourceLocation(store, match);\n\t\tconst startIndex = match.index || 0;\n\t\tconst endIndex = startIndex + match[0].length;\n\n\t\tif (startIndex > lastIndex) {\n\t\t\toutput.push(str.substring(lastIndex, startIndex));\n\t\t}\n\n\t\toutput.push(\n\t\t\tlocationPromise.then(location =>\n\t\t\t\tlocation\n\t\t\t\t\t? `${location.uri}:${location.range.start.line + 1}:${location.range.start.character + 1}`\n\t\t\t\t\t: match[0]\n\t\t\t)\n\t\t);\n\n\t\tlastIndex = endIndex;\n\t}\n\n\t// Preserve the remaining string after the last match\n\tif (lastIndex < str.length) {\n\t\toutput.push(str.substring(lastIndex));\n\t}\n\n\tconst values = await Promise.all(output);\n\treturn values.join('');\n}\n\nasync function deriveStackLocations(\n\tstore: SourceMapStore,\n\tstack: string,\n\ttcase: vscode.TestItem\n) {\n\tlocationRe.lastIndex = 0;\n\n\tconst locationsRaw = [...new StackTraceParser(stack)].filter(t => t instanceof StackTraceLocation);\n\tconst locationsMapped = await Promise.all(locationsRaw.map(async location => {\n\t\tconst mapped = location.path.startsWith('file:') ? await store.getSourceLocation(location.path, location.lineBase1 - 1, location.columnBase1 - 1) : undefined;\n\t\tconst stack = new vscode.TestMessageStackFrame(location.label || '<anonymous>', mapped?.uri, mapped?.range.start || new vscode.Position(location.lineBase1 - 1, location.columnBase1 - 1));\n\t\treturn { location: mapped, stack };\n\t}));\n\n\tlet best: undefined | { location: vscode.Location; score: number };\n\tfor (const { location } of locationsMapped) {\n\t\tif (!location) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet score = 0;\n\t\tif (tcase.uri && tcase.uri.toString() === location.uri.toString()) {\n\t\t\tscore = 1;\n\t\t\tif (tcase.range && tcase.range.contains(location?.range)) {\n\t\t\t\tscore = 2;\n\t\t\t}\n\t\t}\n\t\tif (!best || score > best.score) {\n\t\t\tbest = { location, score };\n\t\t}\n\t}\n\n\treturn { stack: locationsMapped.map(s => s.stack), primary: best?.location };\n}\n\nasync function deriveSourceLocation(store: SourceMapStore, parts: RegExpMatchArray) {\n\tconst [, fileUri, line, col] = parts;\n\treturn store.getSourceLocation(fileUri, Number(line) - 1, Number(col));\n}\n\nfunction findLastIndex<T>(arr: T[], predicate: (value: T) => boolean) {\n\tfor (let i = arr.length - 1; i >= 0; i--) {\n\t\tif (predicate(arr[i])) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn -1;\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/testTree.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { join, relative } from 'path';\nimport * as ts from 'typescript';\nimport { TextDecoder } from 'util';\nimport * as vscode from 'vscode';\nimport { Action, extractTestFromNode } from './sourceUtils';\n\nconst textDecoder = new TextDecoder('utf-8');\nconst diagnosticCollection = vscode.languages.createDiagnosticCollection('selfhostTestProvider');\n\ntype ContentGetter = (uri: vscode.Uri) => Promise<string>;\n\nexport const itemData = new WeakMap<vscode.TestItem, VSCodeTest>();\n\nexport const clearFileDiagnostics = (uri: vscode.Uri) => diagnosticCollection.delete(uri);\n\n/**\n * Tries to guess which workspace folder VS Code is in.\n */\nexport const guessWorkspaceFolder = async () => {\n\tif (!vscode.workspace.workspaceFolders) {\n\t\treturn undefined;\n\t}\n\n\tif (vscode.workspace.workspaceFolders.length < 2) {\n\t\treturn vscode.workspace.workspaceFolders[0];\n\t}\n\n\tfor (const folder of vscode.workspace.workspaceFolders) {\n\t\ttry {\n\t\t\tawait vscode.workspace.fs.stat(vscode.Uri.joinPath(folder.uri, 'src/vs/loader.js'));\n\t\t\treturn folder;\n\t\t} catch {\n\t\t\t// ignored\n\t\t}\n\t}\n\n\treturn undefined;\n};\n\nexport const getContentFromFilesystem: ContentGetter = async uri => {\n\ttry {\n\t\tconst rawContent = await vscode.workspace.fs.readFile(uri);\n\t\treturn textDecoder.decode(rawContent);\n\t} catch (e) {\n\t\tconsole.warn(`Error providing tests for ${uri.fsPath}`, e);\n\t\treturn '';\n\t}\n};\n\nexport class TestFile {\n\tpublic hasBeenRead = false;\n\n\tconstructor(\n\t\tpublic readonly uri: vscode.Uri,\n\t\tpublic readonly workspaceFolder: vscode.WorkspaceFolder\n\t) {}\n\n\tpublic getId() {\n\t\treturn this.uri.toString().toLowerCase();\n\t}\n\n\tpublic getLabel() {\n\t\treturn relative(join(this.workspaceFolder.uri.fsPath, 'src'), this.uri.fsPath);\n\t}\n\n\tpublic async updateFromDisk(controller: vscode.TestController, item: vscode.TestItem) {\n\t\ttry {\n\t\t\tconst content = await getContentFromFilesystem(item.uri!);\n\t\t\titem.error = undefined;\n\t\t\tthis.updateFromContents(controller, content, item);\n\t\t} catch (e) {\n\t\t\titem.error = (e as Error).stack;\n\t\t}\n\t}\n\n\t/**\n\t * Refreshes all tests in this file, `sourceReader` provided by the root.\n\t */\n\tpublic updateFromContents(\n\t\tcontroller: vscode.TestController,\n\t\tcontent: string,\n\t\tfile: vscode.TestItem\n\t) {\n\t\ttry {\n\t\t\tconst diagnostics: vscode.Diagnostic[] = [];\n\t\t\tconst ast = ts.createSourceFile(\n\t\t\t\tthis.uri.path.split('/').pop()!,\n\t\t\t\tcontent,\n\t\t\t\tts.ScriptTarget.ESNext,\n\t\t\t\tfalse,\n\t\t\t\tts.ScriptKind.TS\n\t\t\t);\n\n\t\t\tconst parents: { item: vscode.TestItem; children: vscode.TestItem[] }[] = [\n\t\t\t\t{ item: file, children: [] },\n\t\t\t];\n\t\t\tconst traverse = (node: ts.Node) => {\n\t\t\t\tconst parent = parents[parents.length - 1];\n\t\t\t\tconst childData = extractTestFromNode(ast, node, itemData.get(parent.item)!);\n\t\t\t\tif (childData === Action.Skip) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (childData === Action.Recurse) {\n\t\t\t\t\tts.forEachChild(node, traverse);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst id = `${file.uri}/${childData.fullName}`.toLowerCase();\n\n\t\t\t\t// Skip duplicated tests. They won't run correctly with the way\n\t\t\t\t// mocha reports them, and will error if we try to insert them.\n\t\t\t\tconst existing = parent.children.find(c => c.id === id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tconst diagnostic = new vscode.Diagnostic(\n\t\t\t\t\t\tchildData.range,\n\t\t\t\t\t\t'Duplicate tests cannot be run individually and will not be reported correctly by the test framework. Please rename them.',\n\t\t\t\t\t\tvscode.DiagnosticSeverity.Warning\n\t\t\t\t\t);\n\n\t\t\t\t\tdiagnostic.relatedInformation = [\n\t\t\t\t\t\tnew vscode.DiagnosticRelatedInformation(\n\t\t\t\t\t\t\tnew vscode.Location(existing.uri!, existing.range!),\n\t\t\t\t\t\t\t'First declared here'\n\t\t\t\t\t\t),\n\t\t\t\t\t];\n\n\t\t\t\t\tdiagnostics.push(diagnostic);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst item = controller.createTestItem(id, childData.name, file.uri);\n\t\t\t\titemData.set(item, childData);\n\t\t\t\titem.range = childData.range;\n\t\t\t\tparent.children.push(item);\n\n\t\t\t\tif (childData instanceof TestSuite) {\n\t\t\t\t\tparents.push({ item: item, children: [] });\n\t\t\t\t\tts.forEachChild(node, traverse);\n\t\t\t\t\titem.children.replace(parents.pop()!.children);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tts.forEachChild(ast, traverse);\n\t\t\tfile.error = undefined;\n\t\t\tfile.children.replace(parents[0].children);\n\t\t\tdiagnosticCollection.set(this.uri, diagnostics.length ? diagnostics : undefined);\n\t\t\tthis.hasBeenRead = true;\n\t\t} catch (e) {\n\t\t\tfile.error = String((e as Error).stack || (e as Error).message);\n\t\t}\n\t}\n}\n\nexport abstract class TestConstruct {\n\tpublic fullName: string;\n\n\tconstructor(\n\t\tpublic readonly name: string,\n\t\tpublic readonly range: vscode.Range,\n\t\tparent?: TestConstruct\n\t) {\n\t\tthis.fullName = parent ? `${parent.fullName} ${name}` : name;\n\t}\n}\n\nexport class TestSuite extends TestConstruct {}\n\nexport class TestCase extends TestConstruct {}\n\nexport type VSCodeTest = TestFile | TestSuite | TestCase;\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/v8CoverageWrangling.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { RangeCoverageTracker } from './v8CoverageWrangling';\n\nsuite('v8CoverageWrangling', () => {\n\tsuite('RangeCoverageTracker', () => {\n\t\ttest('covers new range', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.cover(5, 10);\n\t\t\tassert.deepStrictEqual([...rt], [{ start: 5, end: 10, covered: true }]);\n\t\t});\n\n\t\ttest('non overlapping ranges', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.cover(5, 10);\n\t\t\trt.cover(15, 20);\n\t\t\trt.cover(12, 13);\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...rt],\n\t\t\t\t[\n\t\t\t\t\t{ start: 5, end: 10, covered: true },\n\t\t\t\t\t{ start: 12, end: 13, covered: true },\n\t\t\t\t\t{ start: 15, end: 20, covered: true },\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('covers exact', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.uncovered(5, 10);\n\t\t\trt.cover(5, 10);\n\t\t\tassert.deepStrictEqual([...rt], [{ start: 5, end: 10, covered: true }]);\n\t\t});\n\n\t\ttest('overlap at start', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.uncovered(5, 10);\n\t\t\trt.cover(2, 7);\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...rt],\n\t\t\t\t[\n\t\t\t\t\t{ start: 2, end: 7, covered: true },\n\t\t\t\t\t{ start: 7, end: 10, covered: false },\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('overlap at end', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.cover(5, 10);\n\t\t\trt.uncovered(2, 7);\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...rt],\n\t\t\t\t[\n\t\t\t\t\t{ start: 2, end: 5, covered: false },\n\t\t\t\t\t{ start: 5, end: 10, covered: true },\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('inner contained', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.cover(5, 10);\n\t\t\trt.uncovered(2, 12);\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...rt],\n\t\t\t\t[\n\t\t\t\t\t{ start: 2, end: 5, covered: false },\n\t\t\t\t\t{ start: 5, end: 10, covered: true },\n\t\t\t\t\t{ start: 10, end: 12, covered: false },\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('outer contained', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.uncovered(5, 10);\n\t\t\trt.cover(7, 9);\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...rt],\n\t\t\t\t[\n\t\t\t\t\t{ start: 5, end: 7, covered: false },\n\t\t\t\t\t{ start: 7, end: 9, covered: true },\n\t\t\t\t\t{ start: 9, end: 10, covered: false },\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('boundary touching', () => {\n\t\t\tconst rt = new RangeCoverageTracker();\n\t\t\trt.uncovered(5, 10);\n\t\t\trt.cover(10, 15);\n\t\t\trt.uncovered(15, 20);\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...rt],\n\t\t\t\t[\n\t\t\t\t\t{ start: 5, end: 10, covered: false },\n\t\t\t\t\t{ start: 10, end: 15, covered: true },\n\t\t\t\t\t{ start: 15, end: 20, covered: false },\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\tsuite('initializeBlock', () => {\n\t\t\ttest('simple tree', () => {\n\t\t\t\tconst rt = RangeCoverageTracker.initializeBlocks([\n\t\t\t\t\t{\n\t\t\t\t\t\tfunctionName: 'outer',\n\t\t\t\t\t\tisBlockCoverage: true,\n\t\t\t\t\t\tranges: [\n\t\t\t\t\t\t\t{ count: 1, startOffset: 5, endOffset: 30 },\n\t\t\t\t\t\t\t{ count: 1, startOffset: 8, endOffset: 10 },\n\t\t\t\t\t\t\t{ count: 0, startOffset: 15, endOffset: 20 },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t]);\n\n\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\t[...rt],\n\t\t\t\t\t[\n\t\t\t\t\t\t{ start: 5, end: 15, covered: true },\n\t\t\t\t\t\t{ start: 15, end: 20, covered: false },\n\t\t\t\t\t\t{ start: 20, end: 30, covered: true },\n\t\t\t\t\t]\n\t\t\t\t);\n\t\t\t});\n\n\t\t\ttest('separate branches', () => {\n\t\t\t\tconst rt = RangeCoverageTracker.initializeBlocks([\n\t\t\t\t\t{\n\t\t\t\t\t\tfunctionName: 'outer',\n\t\t\t\t\t\tisBlockCoverage: true,\n\t\t\t\t\t\tranges: [\n\t\t\t\t\t\t\t{ count: 1, startOffset: 5, endOffset: 8 },\n\t\t\t\t\t\t\t{ count: 1, startOffset: 10, endOffset: 12 },\n\t\t\t\t\t\t\t{ count: 0, startOffset: 15, endOffset: 20 },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t]);\n\n\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\t[...rt],\n\t\t\t\t\t[\n\t\t\t\t\t\t{ start: 5, end: 8, covered: true },\n\t\t\t\t\t\t{ start: 10, end: 12, covered: true },\n\t\t\t\t\t\t{ start: 15, end: 20, covered: false },\n\t\t\t\t\t]\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n});\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/v8CoverageWrangling.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface ICoverageRange {\n\tstart: number;\n\tend: number;\n\tcovered: boolean;\n}\n\nexport interface IV8FunctionCoverage {\n\tfunctionName: string;\n\tisBlockCoverage: boolean;\n\tranges: IV8CoverageRange[];\n}\n\nexport interface IV8CoverageRange {\n\tstartOffset: number;\n\tendOffset: number;\n\tcount: number;\n}\n\n/** V8 Script coverage data */\nexport interface IScriptCoverage {\n\tscriptId: string;\n\turl: string;\n\t// Script source added by the runner the first time the script is emitted.\n\tsource?: string;\n\tfunctions: IV8FunctionCoverage[];\n}\n\nexport class RangeCoverageTracker implements Iterable<ICoverageRange> {\n\t/**\n\t * A noncontiguous, non-overlapping, ordered set of ranges and whether\n\t * that range has been covered.\n\t */\n\tprivate ranges: readonly ICoverageRange[] = [];\n\n\t/**\n\t * Adds a coverage tracker initialized for a function with {@link isBlockCoverage} set to true.\n\t */\n\tpublic static initializeBlocks(fns: IV8FunctionCoverage[]) {\n\t\tconst rt = new RangeCoverageTracker();\n\n\t\tlet start = 0;\n\t\tconst stack: IV8CoverageRange[] = [];\n\n\t\t// note: comes pre-sorted from V8\n\t\tfor (const { ranges } of fns) {\n\t\t\tfor (const range of ranges) {\n\t\t\t\twhile (stack.length && stack[stack.length - 1].endOffset < range.startOffset) {\n\t\t\t\t\tconst last = stack.pop()!;\n\t\t\t\t\trt.setCovered(start, last.endOffset, last.count > 0);\n\t\t\t\t\tstart = last.endOffset;\n\t\t\t\t}\n\n\t\t\t\tif (range.startOffset > start && stack.length) {\n\t\t\t\t\trt.setCovered(start, range.startOffset, !!stack[stack.length - 1].count);\n\t\t\t\t}\n\n\t\t\t\tstart = range.startOffset;\n\t\t\t\tstack.push(range);\n\t\t\t}\n\t\t}\n\n\t\twhile (stack.length) {\n\t\t\tconst last = stack.pop()!;\n\t\t\trt.setCovered(start, last.endOffset, last.count > 0);\n\t\t\tstart = last.endOffset;\n\t\t}\n\n\t\treturn rt;\n\t}\n\n\t/** Makes a copy of the range tracker. */\n\tpublic clone() {\n\t\tconst rt = new RangeCoverageTracker();\n\t\trt.ranges = this.ranges.slice();\n\t\treturn rt;\n\t}\n\n\t/** Marks a range covered */\n\tpublic cover(start: number, end: number) {\n\t\tthis.setCovered(start, end, true);\n\t}\n\n\t/** Marks a range as uncovered */\n\tpublic uncovered(start: number, end: number) {\n\t\tthis.setCovered(start, end, false);\n\t}\n\n\t/** Iterates over coverage ranges */\n\t[Symbol.iterator]() {\n\t\treturn this.ranges[Symbol.iterator]();\n\t}\n\n\t/**\n\t * Marks the given character range as being covered or uncovered.\n\t *\n\t * todo@connor4312: this is a hot path is could probably be optimized to\n\t * avoid rebuilding the array. Maybe with a nice tree structure?\n\t */\n\tpublic setCovered(start: number, end: number, covered: boolean) {\n\t\tconst newRanges: ICoverageRange[] = [];\n\t\tlet i = 0;\n\t\tfor (; i < this.ranges.length && this.ranges[i].end <= start; i++) {\n\t\t\tnewRanges.push(this.ranges[i]);\n\t\t}\n\n\t\tconst push = (range: ICoverageRange) => {\n\t\t\tconst last = newRanges.length && newRanges[newRanges.length - 1];\n\t\t\tif (last && last.end === range.start && last.covered === range.covered) {\n\t\t\t\tlast.end = range.end;\n\t\t\t} else {\n\t\t\t\tnewRanges.push(range);\n\t\t\t}\n\t\t};\n\n\t\tpush({ start, end, covered });\n\n\t\tfor (; i < this.ranges.length; i++) {\n\t\t\tconst range = this.ranges[i];\n\t\t\tconst last = newRanges[newRanges.length - 1];\n\n\t\t\tif (range.start === last.start && range.end === last.end) {\n\t\t\t\t// ranges are equal:\n\t\t\t\tlast.covered ||= range.covered;\n\t\t\t} else if (range.end < last.start || range.start > last.end) {\n\t\t\t\t// ranges don't overlap\n\t\t\t\tpush(range);\n\t\t\t} else if (range.start < last.start && range.end > last.end) {\n\t\t\t\t// range contains last:\n\t\t\t\tnewRanges.pop();\n\t\t\t\tpush({ start: range.start, end: last.start, covered: range.covered });\n\t\t\t\tpush({ start: last.start, end: last.end, covered: range.covered || last.covered });\n\t\t\t\tpush({ start: last.end, end: range.end, covered: range.covered });\n\t\t\t} else if (range.start >= last.start && range.end <= last.end) {\n\t\t\t\t// last contains range:\n\t\t\t\tnewRanges.pop();\n\t\t\t\tpush({ start: last.start, end: range.start, covered: last.covered });\n\t\t\t\tpush({ start: range.start, end: range.end, covered: range.covered || last.covered });\n\t\t\t\tpush({ start: range.end, end: last.end, covered: last.covered });\n\t\t\t} else if (range.start < last.start && range.end <= last.end) {\n\t\t\t\t// range overlaps start of last:\n\t\t\t\tnewRanges.pop();\n\t\t\t\tpush({ start: range.start, end: last.start, covered: range.covered });\n\t\t\t\tpush({ start: last.start, end: range.end, covered: range.covered || last.covered });\n\t\t\t\tpush({ start: range.end, end: last.end, covered: last.covered });\n\t\t\t} else if (range.start >= last.start && range.end > last.end) {\n\t\t\t\t// range overlaps end of last:\n\t\t\t\tnewRanges.pop();\n\t\t\t\tpush({ start: last.start, end: range.start, covered: last.covered });\n\t\t\t\tpush({ start: range.start, end: last.end, covered: range.covered || last.covered });\n\t\t\t\tpush({ start: last.end, end: range.end, covered: range.covered });\n\t\t\t} else {\n\t\t\t\tthrow new Error('unreachable');\n\t\t\t}\n\t\t}\n\n\t\tthis.ranges = newRanges;\n\t}\n}\n\nexport class OffsetToPosition {\n\t/** Line numbers to byte offsets. */\n\tpublic readonly lines: number[] = [];\n\n\tpublic readonly totalLength: number;\n\n\tconstructor(source: string) {\n\t\tthis.lines.push(0);\n\t\tfor (let i = source.indexOf('\\n'); i !== -1; i = source.indexOf('\\n', i + 1)) {\n\t\t\tthis.lines.push(i + 1);\n\t\t}\n\t\tthis.totalLength = source.length;\n\t}\n\n\tpublic getLineLength(lineNumber: number): number {\n\t\treturn (\n\t\t\t(lineNumber < this.lines.length - 1 ? this.lines[lineNumber + 1] - 1 : this.totalLength) -\n\t\t\tthis.lines[lineNumber]\n\t\t);\n\t}\n\n\t/**\n\t * Gets the line the offset appears on.\n\t */\n\tpublic getLineOfOffset(offset: number): number {\n\t\tlet low = 0;\n\t\tlet high = this.lines.length;\n\t\twhile (low < high) {\n\t\t\tconst mid = Math.floor((low + high) / 2);\n\t\t\tif (this.lines[mid] > offset) {\n\t\t\t\thigh = mid;\n\t\t\t} else {\n\t\t\t\tlow = mid + 1;\n\t\t\t}\n\t\t}\n\n\t\treturn low - 1;\n\t}\n\n\t/**\n\t * Converts from a file offset to a base 0 line/column .\n\t */\n\tpublic toLineColumn(offset: number): { line: number; column: number } {\n\t\tconst line = this.getLineOfOffset(offset);\n\t\treturn { line: line, column: offset - this.lines[line] };\n\t}\n}\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { spawn } from 'child_process';\nimport { promises as fs } from 'fs';\nimport { AddressInfo, createServer } from 'net';\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport { TestOutputScanner } from './testOutputScanner';\nimport { TestCase, TestFile, TestSuite, itemData } from './testTree';\n\n/**\n * From MDN\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n */\nconst escapeRe = (s: string) => s.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst TEST_ELECTRON_SCRIPT_PATH = 'test/unit/electron/index.js';\nconst TEST_BROWSER_SCRIPT_PATH = 'test/unit/browser/index.js';\n\nconst ATTACH_CONFIG_NAME = 'Attach to VS Code';\nconst DEBUG_TYPE = 'pwa-chrome';\n\nexport abstract class VSCodeTestRunner {\n\tconstructor(protected readonly repoLocation: vscode.WorkspaceFolder) { }\n\n\tpublic async run(baseArgs: ReadonlyArray<string>, filter?: ReadonlyArray<vscode.TestItem>) {\n\t\tconst args = this.prepareArguments(baseArgs, filter);\n\t\tconst cp = spawn(await this.binaryPath(), args, {\n\t\t\tcwd: this.repoLocation.uri.fsPath,\n\t\t\tstdio: 'pipe',\n\t\t\tenv: this.getEnvironment(),\n\t\t});\n\n\t\treturn new TestOutputScanner(cp, args);\n\t}\n\n\tpublic async debug(testRun: vscode.TestRun, baseArgs: ReadonlyArray<string>, filter?: ReadonlyArray<vscode.TestItem>) {\n\t\tconst port = await this.findOpenPort();\n\t\tconst baseConfiguration = vscode.workspace\n\t\t\t.getConfiguration('launch', this.repoLocation)\n\t\t\t.get<vscode.DebugConfiguration[]>('configurations', [])\n\t\t\t.find(c => c.name === ATTACH_CONFIG_NAME);\n\n\t\tif (!baseConfiguration) {\n\t\t\tthrow new Error(`Could not find launch configuration ${ATTACH_CONFIG_NAME}`);\n\t\t}\n\n\t\tconst server = this.createWaitServer();\n\t\tconst args = [\n\t\t\t...this.prepareArguments(baseArgs, filter),\n\t\t\t`--remote-debugging-port=${port}`,\n\t\t\t// for breakpoint freeze: https://github.com/microsoft/vscode/issues/122225#issuecomment-885377304\n\t\t\t'--js-flags=\"--regexp_interpret_all\"',\n\t\t\t// for general runtime freezes: https://github.com/microsoft/vscode/issues/127861#issuecomment-904144910\n\t\t\t'--disable-features=CalculateNativeWinOcclusion',\n\t\t\t'--timeout=0',\n\t\t\t`--waitServer=${server.port}`,\n\t\t];\n\n\t\tconst cp = spawn(await this.binaryPath(), args, {\n\t\t\tcwd: this.repoLocation.uri.fsPath,\n\t\t\tstdio: 'pipe',\n\t\t\tenv: this.getEnvironment(port),\n\t\t});\n\n\t\t// Register a descriptor factory that signals the server when any\n\t\t// breakpoint set requests on the debugee have been completed.\n\t\tconst factory = vscode.debug.registerDebugAdapterTrackerFactory(DEBUG_TYPE, {\n\t\t\tcreateDebugAdapterTracker(session) {\n\t\t\t\tif (!session.parentSession || session.parentSession !== rootSession) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet initRequestId: number | undefined;\n\n\t\t\t\treturn {\n\t\t\t\t\tonDidSendMessage(message) {\n\t\t\t\t\t\tif (message.type === 'response' && message.request_seq === initRequestId) {\n\t\t\t\t\t\t\tserver.ready();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonWillReceiveMessage(message) {\n\t\t\t\t\t\tif (initRequestId !== undefined) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (message.command === 'launch' || message.command === 'attach') {\n\t\t\t\t\t\t\tinitRequestId = message.seq;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\n\t\tvscode.debug.startDebugging(this.repoLocation, { ...baseConfiguration, port }, { testRun });\n\n\t\tlet exited = false;\n\t\tlet rootSession: vscode.DebugSession | undefined;\n\t\tcp.once('exit', () => {\n\t\t\texited = true;\n\t\t\tserver.dispose();\n\t\t\tlistener.dispose();\n\t\t\tfactory.dispose();\n\n\t\t\tif (rootSession) {\n\t\t\t\tvscode.debug.stopDebugging(rootSession);\n\t\t\t}\n\t\t});\n\n\t\tconst listener = vscode.debug.onDidStartDebugSession(s => {\n\t\t\tif (s.name === ATTACH_CONFIG_NAME && !rootSession) {\n\t\t\t\tif (exited) {\n\t\t\t\t\tvscode.debug.stopDebugging(rootSession);\n\t\t\t\t} else {\n\t\t\t\t\trootSession = s;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn new TestOutputScanner(cp, args);\n\t}\n\n\tprivate findOpenPort(): Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst server = createServer();\n\t\t\tserver.listen(0, () => {\n\t\t\t\tconst address = server.address() as AddressInfo;\n\t\t\t\tconst port = address.port;\n\t\t\t\tserver.close(() => {\n\t\t\t\t\tresolve(port);\n\t\t\t\t});\n\t\t\t});\n\t\t\tserver.on('error', (error: Error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\tprotected getEnvironment(_remoteDebugPort?: number): NodeJS.ProcessEnv {\n\t\treturn {\n\t\t\t...process.env,\n\t\t\tELECTRON_RUN_AS_NODE: undefined,\n\t\t\tELECTRON_ENABLE_LOGGING: '1',\n\t\t};\n\t}\n\n\tprivate prepareArguments(\n\t\tbaseArgs: ReadonlyArray<string>,\n\t\tfilter?: ReadonlyArray<vscode.TestItem>\n\t) {\n\t\tconst args = [...this.getDefaultArgs(), ...baseArgs, '--reporter', 'full-json-stream'];\n\t\tif (!filter) {\n\t\t\treturn args;\n\t\t}\n\n\t\tconst grepRe: string[] = [];\n\t\tconst runPaths = new Set<string>();\n\t\tconst addTestFileRunPath = (data: TestFile) =>\n\t\t\trunPaths.add(\n\t\t\t\tpath.relative(data.workspaceFolder.uri.fsPath, data.uri.fsPath).replace(/\\\\/g, '/')\n\t\t\t);\n\n\t\tconst itemDatas = filter.map(f => itemData.get(f));\n\t\t/** If true, we have to be careful with greps, as a grep for one test file affects the run of the other test file. */\n\t\tconst hasBothTestCaseOrTestSuiteAndTestFileFilters =\n\t\t\titemDatas.some(d => (d instanceof TestCase) || (d instanceof TestSuite)) &&\n\t\t\titemDatas.some(d => d instanceof TestFile);\n\n\t\tfunction addTestCaseOrSuite(data: TestCase | TestSuite, test: vscode.TestItem): void {\n\t\t\tgrepRe.push(escapeRe(data.fullName) + (data instanceof TestCase ? '$' : ' '));\n\t\t\tfor (let p = test.parent; p; p = p.parent) {\n\t\t\t\tconst parentData = itemData.get(p);\n\t\t\t\tif (parentData instanceof TestFile) {\n\t\t\t\t\taddTestFileRunPath(parentData);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const test of filter) {\n\t\t\tconst data = itemData.get(test);\n\t\t\tif (data instanceof TestCase || data instanceof TestSuite) {\n\t\t\t\taddTestCaseOrSuite(data, test);\n\t\t\t} else if (data instanceof TestFile) {\n\t\t\t\tif (!hasBothTestCaseOrTestSuiteAndTestFileFilters) {\n\t\t\t\t\taddTestFileRunPath(data);\n\t\t\t\t} else {\n\t\t\t\t\t// We add all the items individually so they get their own grep expressions.\n\t\t\t\t\tfor (const [_id, nestedTest] of test.children) {\n\t\t\t\t\t\tconst childData = itemData.get(nestedTest);\n\t\t\t\t\t\tif (childData instanceof TestCase || childData instanceof TestSuite) {\n\t\t\t\t\t\t\taddTestCaseOrSuite(childData, nestedTest);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error('Unexpected test item in test file', nestedTest.id, nestedTest.label);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (grepRe.length) {\n\t\t\targs.push('--grep', `/^(${grepRe.join('|')})/`);\n\t\t}\n\n\t\tif (runPaths.size) {\n\t\t\targs.push(...[...runPaths].flatMap(p => ['--run', p]));\n\t\t}\n\n\t\treturn args;\n\t}\n\n\tprotected abstract getDefaultArgs(): string[];\n\n\tprotected abstract binaryPath(): Promise<string>;\n\n\tprotected async readProductJson() {\n\t\tconst projectJson = await fs.readFile(\n\t\t\tpath.join(this.repoLocation.uri.fsPath, 'product.json'),\n\t\t\t'utf-8'\n\t\t);\n\t\ttry {\n\t\t\treturn JSON.parse(projectJson);\n\t\t} catch (e) {\n\t\t\tthrow new Error(`Error parsing product.json: ${(e as Error).message}`);\n\t\t}\n\t}\n\n\tprivate createWaitServer() {\n\t\tconst onReady = new vscode.EventEmitter<void>();\n\t\tlet ready = false;\n\n\t\tconst server = createServer(socket => {\n\t\t\tif (ready) {\n\t\t\t\tsocket.end();\n\t\t\t} else {\n\t\t\t\tonReady.event(() => socket.end());\n\t\t\t}\n\t\t});\n\n\t\tserver.listen(0);\n\n\t\treturn {\n\t\t\tport: (server.address() as AddressInfo).port,\n\t\t\tready: () => {\n\t\t\t\tready = true;\n\t\t\t\tonReady.fire();\n\t\t\t},\n\t\t\tdispose: () => {\n\t\t\t\tserver.close();\n\t\t\t},\n\t\t};\n\t}\n}\n\nexport class BrowserTestRunner extends VSCodeTestRunner {\n\t/** @override */\n\tprotected binaryPath(): Promise<string> {\n\t\treturn Promise.resolve(process.execPath);\n\t}\n\n\t/** @override */\n\tprotected override getEnvironment(remoteDebugPort?: number) {\n\t\treturn {\n\t\t\t...super.getEnvironment(remoteDebugPort),\n\t\t\tPLAYWRIGHT_CHROMIUM_DEBUG_PORT: remoteDebugPort ? String(remoteDebugPort) : undefined,\n\t\t\tELECTRON_RUN_AS_NODE: '1',\n\t\t};\n\t}\n\n\t/** @override */\n\tprotected getDefaultArgs() {\n\t\treturn [TEST_BROWSER_SCRIPT_PATH];\n\t}\n}\n\nexport class WindowsTestRunner extends VSCodeTestRunner {\n\t/** @override */\n\tprotected async binaryPath() {\n\t\tconst { nameShort } = await this.readProductJson();\n\t\treturn path.join(this.repoLocation.uri.fsPath, `.build/electron/${nameShort}.exe`);\n\t}\n\n\t/** @override */\n\tprotected getDefaultArgs() {\n\t\treturn [TEST_ELECTRON_SCRIPT_PATH];\n\t}\n}\n\nexport class PosixTestRunner extends VSCodeTestRunner {\n\t/** @override */\n\tprotected async binaryPath() {\n\t\tconst { applicationName } = await this.readProductJson();\n\t\treturn path.join(this.repoLocation.uri.fsPath, `.build/electron/${applicationName}`);\n\t}\n\n\t/** @override */\n\tprotected getDefaultArgs() {\n\t\treturn [TEST_ELECTRON_SCRIPT_PATH];\n\t}\n}\n\nexport class DarwinTestRunner extends PosixTestRunner {\n\t/** @override */\n\tprotected override getDefaultArgs() {\n\t\treturn [\n\t\t\tTEST_ELECTRON_SCRIPT_PATH,\n\t\t\t'--no-sandbox',\n\t\t\t'--disable-dev-shm-usage',\n\t\t\t'--use-gl=swiftshader',\n\t\t];\n\t}\n\n\t/** @override */\n\tprotected override async binaryPath() {\n\t\tconst { nameLong } = await this.readProductJson();\n\t\treturn path.join(\n\t\t\tthis.repoLocation.uri.fsPath,\n\t\t\t`.build/electron/${nameLong}.app/Contents/MacOS/Electron`\n\t\t);\n\t}\n}\n\nexport const PlatformTestRunner =\n\tprocess.platform === 'win32'\n\t\t? WindowsTestRunner\n\t\t: process.platform === 'darwin'\n\t\t\t? DarwinTestRunner\n\t\t\t: PosixTestRunner;\n"
  },
  {
    "path": ".vscode/extensions/vscode-selfhost-test-provider/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../../extensions/tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\",\n\t\t\t\"mocha\",\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../../src/vscode-dts/vscode.proposed.testObserver.d.ts\",\n\t\t\"../../../src/vscode-dts/vscode.proposed.testRelatedCode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n\t// See https://go.microsoft.com/fwlink/?LinkId=827846\n\t// for the documentation about the extensions.json format\n\t\"recommendations\": [\n\t\t\"dbaeumer.vscode-eslint\",\n\t\t\"editorconfig.editorconfig\",\n\t\t\"github.vscode-pull-request-github\",\n\t\t\"ms-vscode.vscode-github-issue-notebooks\",\n\t\t\"ms-vscode.extension-test-runner\",\n\t\t\"jrieken.vscode-pr-pinger\"\n\t]\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n\t\"version\": \"0.1.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Gulp Build\",\n\t\t\t\"program\": \"${workspaceFolder}/node_modules/gulp/bin/gulp.js\",\n\t\t\t\"stopOnEntry\": true,\n\t\t\t\"args\": [\n\t\t\t\t\"hygiene\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"restart\": true,\n\t\t\t\"name\": \"Attach to Extension Host\",\n\t\t\t\"timeout\": 0,\n\t\t\t\"port\": 5870,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\",\n\t\t\t\t\"${workspaceFolder}/extensions/*/out/**/*.js\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"restart\": true,\n\t\t\t\"name\": \"Attach to Shared Process\",\n\t\t\t\"timeout\": 0,\n\t\t\t\"port\": 5879,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"name\": \"Attach to Search Process\",\n\t\t\t\"port\": 5876,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"name\": \"Attach to Pty Host Process\",\n\t\t\t\"port\": 5877,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"name\": \"Attach to CLI Process\",\n\t\t\t\"port\": 5874,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"name\": \"Attach to Main Process\",\n\t\t\t\"timeout\": 30000,\n\t\t\t\"port\": 5875,\n\t\t\t\"continueOnAttach\": true,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"hidden\": true,\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code Emmet Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"${workspaceFolder}/extensions/emmet/test-workspace\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/emmet\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/emmet/out/test\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 6\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code Configuration Editing Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/configuration-editing\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/configuration-editing/out/test\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 6\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code Git Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"/tmp/my4g9l\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/git\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/git/out/test\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/git/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 6\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code Github Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"${workspaceFolder}/extensions/github/testWorkspace\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/github\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/github/out/test\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/github/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 6\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code API Tests (single folder)\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t// \"${workspaceFolder}\", // Uncomment for running out of sources.\n\t\t\t\t\"${workspaceFolder}/extensions/vscode-api-tests/testWorkspace\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-api-tests\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out/singlefolder-tests\",\n\t\t\t\t\"--disable-extensions\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/vscode-api-tests/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 3\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code API Tests (workspace)\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"${workspaceFolder}/extensions/vscode-api-tests/testworkspace.code-workspace\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-api-tests\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out/workspace-tests\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/vscode-api-tests/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 4\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code Tokenizer Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"${workspaceFolder}/extensions/vscode-colorize-tests/test\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-colorize-tests\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/vscode-colorize-tests/out\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 5\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code Tokenizer Performance Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"${workspaceFolder}/extensions/vscode-colorize-perf-tests/test\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-colorize-perf-tests\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/vscode-colorize-perf-tests/out\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 6\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"chrome\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"name\": \"Attach to VS Code\",\n\t\t\t\"browserAttachLocation\": \"workspace\",\n\t\t\t\"port\": 9222,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"resolveSourceMapLocations\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"perScriptSourcemaps\": \"yes\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"chrome\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Launch VS Code Internal\",\n\t\t\t\"windows\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.bat\"\n\t\t\t},\n\t\t\t\"osx\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.sh\"\n\t\t\t},\n\t\t\t\"linux\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.sh\"\n\t\t\t},\n\t\t\t\"port\": 9222,\n\t\t\t\"timeout\": 0,\n\t\t\t\"env\": {\n\t\t\t\t\"VSCODE_EXTHOST_WILL_SEND_SOCKET\": null,\n\t\t\t\t\"VSCODE_SKIP_PRELAUNCH\": \"1\",\n\t\t\t},\n\t\t\t\"cleanUp\": \"wholeBrowser\",\n\t\t\t\"runtimeArgs\": [\n\t\t\t\t\"--inspect-brk=5875\",\n\t\t\t\t\"--no-cached-data\",\n\t\t\t\t\"--crash-reporter-directory=${workspaceFolder}/.profile-oss/crashes\",\n\t\t\t\t// for general runtime freezes: https://github.com/microsoft/vscode/issues/127861#issuecomment-904144910\n\t\t\t\t\"--disable-features=CalculateNativeWinOcclusion\",\n\t\t\t\t\"--disable-extension=vscode.vscode-api-tests\"\n\t\t\t],\n\t\t\t\"userDataDir\": \"${userHome}/.vscode-oss-dev\",\n\t\t\t\"webRoot\": \"${workspaceFolder}\",\n\t\t\t\"cascadeTerminateToConfigurations\": [\n\t\t\t\t\"Attach to Extension Host\"\n\t\t\t],\n\t\t\t\"pauseForSourceMap\": false,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"browserLaunchLocation\": \"workspace\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"hidden\": true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// To debug observables you also need the extension \"ms-vscode.debug-value-editor\"\n\t\t\t\"type\": \"chrome\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Launch VS Code Internal (Dev Debug)\",\n\t\t\t\"windows\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.bat\"\n\t\t\t},\n\t\t\t\"osx\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.sh\"\n\t\t\t},\n\t\t\t\"linux\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.sh\"\n\t\t\t},\n\t\t\t\"port\": 9222,\n\t\t\t\"timeout\": 0,\n\t\t\t\"env\": {\n\t\t\t\t\"VSCODE_EXTHOST_WILL_SEND_SOCKET\": null,\n\t\t\t\t\"VSCODE_SKIP_PRELAUNCH\": \"1\",\n\t\t\t\t\"VSCODE_DEV_DEBUG\": \"1\",\n\t\t\t},\n\t\t\t\"cleanUp\": \"wholeBrowser\",\n\t\t\t\"runtimeArgs\": [\n\t\t\t\t\"--inspect-brk=5875\",\n\t\t\t\t\"--no-cached-data\",\n\t\t\t\t\"--crash-reporter-directory=${workspaceFolder}/.profile-oss/crashes\",\n\t\t\t\t// for general runtime freezes: https://github.com/microsoft/vscode/issues/127861#issuecomment-904144910\n\t\t\t\t\"--disable-features=CalculateNativeWinOcclusion\",\n\t\t\t\t\"--disable-extension=vscode.vscode-api-tests\"\n\t\t\t],\n\t\t\t\"userDataDir\": \"${userHome}/.vscode-oss-dev\",\n\t\t\t\"webRoot\": \"${workspaceFolder}\",\n\t\t\t\"cascadeTerminateToConfigurations\": [\n\t\t\t\t\"Attach to Extension Host\"\n\t\t\t],\n\t\t\t\"pauseForSourceMap\": false,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"browserLaunchLocation\": \"workspace\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"hidden\": true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"VS Code Server (Web)\",\n\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code-server.sh\",\n\t\t\t\"windows\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code-server.bat\",\n\t\t\t},\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"0_vscode\",\n\t\t\t\t\"order\": 2\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Main Process\",\n\t\t\t\"attachSimplePort\": 5875,\n\t\t\t\"enableContentValidation\": false,\n\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.sh\",\n\t\t\t\"windows\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/scripts/code.bat\",\n\t\t\t},\n\t\t\t\"runtimeArgs\": [\n\t\t\t\t\"--inspect-brk=5875\",\n\t\t\t\t\"--no-cached-data\",\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"1_vscode\",\n\t\t\t\t\"order\": 1\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"chrome\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"outFiles\": [],\n\t\t\t\"perScriptSourcemaps\": \"yes\",\n\t\t\t\"name\": \"VS Code Server (Web, Chrome)\",\n\t\t\t\"url\": \"http://localhost:8080?tkn=dev-token\",\n\t\t\t\"preLaunchTask\": \"Run code server\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"0_vscode\",\n\t\t\t\t\"order\": 3\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"msedge\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"outFiles\": [],\n\t\t\t\"perScriptSourcemaps\": \"yes\",\n\t\t\t\"name\": \"VS Code Server (Web, Edge)\",\n\t\t\t\"url\": \"http://localhost:8080?tkn=dev-token\",\n\t\t\t\"pauseForSourceMap\": false,\n\t\t\t\"preLaunchTask\": \"Run code server\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"0_vscode\",\n\t\t\t\t\"order\": 3\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"chrome\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"outFiles\": [],\n\t\t\t\"perScriptSourcemaps\": \"yes\",\n\t\t\t\"name\": \"VS Code Web (Chrome)\",\n\t\t\t\"url\": \"http://localhost:8080\",\n\t\t\t\"preLaunchTask\": \"Run code web\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"0_vscode\",\n\t\t\t\t\"order\": 3\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"msedge\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"outFiles\": [],\n\t\t\t\"perScriptSourcemaps\": \"yes\",\n\t\t\t\"name\": \"VS Code Web (Edge)\",\n\t\t\t\"url\": \"http://localhost:8080\",\n\t\t\t\"pauseForSourceMap\": false,\n\t\t\t\"preLaunchTask\": \"Run code web\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"0_vscode\",\n\t\t\t\t\"order\": 3\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Git Unit Tests\",\n\t\t\t\"program\": \"${workspaceFolder}/extensions/git/node_modules/mocha/bin/_mocha\",\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"cwd\": \"${workspaceFolder}/extensions/git\",\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/git/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 10\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"HTML Server Unit Tests\",\n\t\t\t\"program\": \"${workspaceFolder}/extensions/html-language-features/server/test/index.js\",\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"cwd\": \"${workspaceFolder}/extensions/html-language-features/server\",\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/html-language-features/server/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 10\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"CSS Server Unit Tests\",\n\t\t\t\"program\": \"${workspaceFolder}/extensions/css-language-features/server/test/index.js\",\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"cwd\": \"${workspaceFolder}/extensions/css-language-features/server\",\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/css-language-features/server/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 10\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Markdown Extension Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"${workspaceFolder}/extensions/markdown-language-features/test-workspace\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/markdown-language-features\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/markdown-language-features/out/test\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/markdown-language-features/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 7\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"TypeScript Extension Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"${workspaceFolder}/extensions/typescript-language-features/test-workspace\",\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}/extensions/typescript-language-features\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/extensions/typescript-language-features/out/test\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/extensions/typescript-language-features/out/**/*.js\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"5_tests\",\n\t\t\t\t\"order\": 8\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Run Unit Tests\",\n\t\t\t\"program\": \"${workspaceFolder}/test/unit/electron/index.js\",\n\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/.build/electron/Code - OSS.app/Contents/MacOS/Electron\",\n\t\t\t\"windows\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/.build/electron/Code - OSS.exe\"\n\t\t\t},\n\t\t\t\"linux\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/.build/electron/code-oss\"\n\t\t\t},\n\t\t\t\"outputCapture\": \"std\",\n\t\t\t\"args\": [\n\t\t\t\t\"--remote-debugging-port=9222\"\n\t\t\t],\n\t\t\t\"cwd\": \"${workspaceFolder}\",\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"cascadeTerminateToConfigurations\": [\n\t\t\t\t\"Attach to VS Code\"\n\t\t\t],\n\t\t\t\"env\": {\n\t\t\t\t\"MOCHA_COLORS\": \"true\"\n\t\t\t},\n\t\t\t\"presentation\": {\n\t\t\t\t\"hidden\": true\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Run Unit Tests For Current File\",\n\t\t\t\"program\": \"${workspaceFolder}/test/unit/electron/index.js\",\n\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/.build/electron/Code - OSS.app/Contents/MacOS/Electron\",\n\t\t\t\"windows\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/.build/electron/Code - OSS.exe\"\n\t\t\t},\n\t\t\t\"linux\": {\n\t\t\t\t\"runtimeExecutable\": \"${workspaceFolder}/.build/electron/code-oss\"\n\t\t\t},\n\t\t\t\"cascadeTerminateToConfigurations\": [\n\t\t\t\t\"Attach to VS Code\"\n\t\t\t],\n\t\t\t\"outputCapture\": \"std\",\n\t\t\t\"args\": [\n\t\t\t\t\"--remote-debugging-port=9222\",\n\t\t\t\t\"--run\",\n\t\t\t\t\"${relativeFile}\"\n\t\t\t],\n\t\t\t\"cwd\": \"${workspaceFolder}\",\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"env\": {\n\t\t\t\t\"MOCHA_COLORS\": \"true\"\n\t\t\t},\n\t\t\t\"presentation\": {\n\t\t\t\t\"hidden\": true\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Launch Smoke Test\",\n\t\t\t\"program\": \"${workspaceFolder}/test/smoke/test/index.js\",\n\t\t\t\"cwd\": \"${workspaceFolder}/test/smoke\",\n\t\t\t\"timeout\": 240000,\n\t\t\t\"args\": [\n\t\t\t\t\"-l\",\n\t\t\t\t\"${workspaceFolder}/.build/electron/Code - OSS.app/Contents/MacOS/Electron\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${cwd}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"env\": {\n\t\t\t\t\"NODE_ENV\": \"development\",\n\t\t\t\t\"VSCODE_DEV\": \"1\",\n\t\t\t\t\"VSCODE_CLI\": \"1\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Launch Built-in Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceRoot}/extensions/debug-auto-launch\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Monaco Editor Playground\",\n\t\t\t\"type\": \"chrome\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"url\": \"http://localhost:5001\",\n\t\t\t\"preLaunchTask\": \"Launch Http Server\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"monaco\",\n\t\t\t\t\"order\": 4\n\t\t\t}\n\t\t}\n\t],\n\t\"compounds\": [\n\t\t{\n\t\t\t\"name\": \"VS Code\",\n\t\t\t\"stopAll\": true,\n\t\t\t\"configurations\": [\n\t\t\t\t\"Launch VS Code Internal\",\n\t\t\t\t\"Attach to Main Process\",\n\t\t\t\t\"Attach to Extension Host\",\n\t\t\t\t\"Attach to Shared Process\",\n\t\t\t],\n\t\t\t\"preLaunchTask\": \"Ensure Prelaunch Dependencies\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"0_vscode\",\n\t\t\t\t\"order\": 1\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"VS Code (Debug Observables)\",\n\t\t\t\"stopAll\": true,\n\t\t\t\"configurations\": [\n\t\t\t\t\"Launch VS Code Internal (Dev Debug)\",\n\t\t\t\t\"Attach to Main Process\",\n\t\t\t\t\"Attach to Extension Host\",\n\t\t\t\t\"Attach to Shared Process\",\n\t\t\t],\n\t\t\t\"preLaunchTask\": \"Ensure Prelaunch Dependencies\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"0_vscode\",\n\t\t\t\t\"order\": 1\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Search, Renderer, and Main processes\",\n\t\t\t\"configurations\": [\n\t\t\t\t\"Launch VS Code Internal\",\n\t\t\t\t\"Attach to Main Process\",\n\t\t\t\t\"Attach to Search Process\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"1_vscode\",\n\t\t\t\t\"order\": 4\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Renderer, Extension Host, and Main processes\",\n\t\t\t\"configurations\": [\n\t\t\t\t\"Launch VS Code Internal\",\n\t\t\t\t\"Attach to Main Process\",\n\t\t\t\t\"Attach to Extension Host\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"1_vscode\",\n\t\t\t\t\"order\": 3\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Debug Unit Tests\",\n\t\t\t\"configurations\": [\n\t\t\t\t\"Attach to VS Code\",\n\t\t\t\t\"Run Unit Tests\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"1_vscode\",\n\t\t\t\t\"order\": 2\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Debug Unit Tests (Current File)\",\n\t\t\t\"configurations\": [\n\t\t\t\t\"Attach to VS Code\",\n\t\t\t\t\"Run Unit Tests For Current File\"\n\t\t\t],\n\t\t\t\"presentation\": {\n\t\t\t\t\"group\": \"1_vscode\",\n\t\t\t\t\"order\": 2\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Renderer and Main processes\",\n\t\t\t\"stopAll\": true,\n\t\t\t\"configurations\": [\n\t\t\t\t\"Launch VS Code Internal\",\n\t\t\t\t\"Attach to Main Process\"\n\t\t\t],\n\t\t\t\"preLaunchTask\": \"Ensure Prelaunch Dependencies\"\n\t\t},\n\t]\n}\n"
  },
  {
    "path": ".vscode/notebooks/api.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Config\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPO=repo:microsoft/vscode\\n$MILESTONE=milestone:\\\"March 2025\\\"\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Finalization\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPO $MILESTONE label:api-finalization\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Proposals\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPO $MILESTONE is:open label:api-proposal sort:created-asc\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/endgame.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Macros\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\\r\\n\\r\\n$MILESTONE=milestone:\\\"March 2025\\\"\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Preparation\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Open Pull Requests on the Milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:pr is:open\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Unverified Older Insiders-Released Issues\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS -$MILESTONE is:issue is:closed reason:completed label:bug label:insiders-released -label:verified -label:*duplicate -label:*as-designed -label:z-author-verified -label:on-testplan -label:error-telemetry\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Unverified Older Insiders-Released Feature Requests\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS -$MILESTONE is:issue is:closed reason:completed label:feature-request label:insiders-released -label:on-testplan -label:verified -label:*duplicate -label:error-telemetry\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Open Issues on the Milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:open -label:iteration-plan -label:endgame-plan -label:testplan-item\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Feature Requests Missing Labels\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:closed reason:completed label:feature-request -label:verification-needed -label:on-testplan -label:verified -label:*duplicate\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Open Test Plan Items without milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:open label:testplan-item no:milestone\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Testing\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Test Plan Items\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS is:issue is:open label:testplan-item\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Verification Needed\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:closed reason:completed label:verification-needed -label:verified -label:on-testplan\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Verification\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Verifiable Fixes\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:z-author-verified -label:unreleased -label:*not-reproducible -label:*out-of-scope\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Verifiable Fixes Missing Steps\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug label:verification-steps-needed -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:z-author-verified -label:unreleased -label:*not-reproducible\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Unreleased Fixes\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:z-author-verified label:unreleased -label:*not-reproducible\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## All Unverified Fixes\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:z-author-verified -label:*not-reproducible\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Candidates\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE is:issue is:open label:candidate\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/grooming-delta.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Config\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$since=2021-10-01\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode\\n\\nQuery exceeds the maximum result. Run the query manually: `is:issue is:open closed:>2021-10-01`\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"//repo:microsoft/vscode is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"//repo:microsoft/vscode is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-remote-release\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-remote-release is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-remote-release is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# monaco-editor\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-editor is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-editor is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-docs\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-docs is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-docs is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-js-debug\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-js-debug is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-js-debug is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# language-server-protocol\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/language-server-protocol is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/language-server-protocol is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-eslint\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-eslint is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-eslint is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-css-languageservice\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-css-languageservice is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-css-languageservice is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-test\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-test is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-test is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-pull-request-github\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-pull-request-github is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-test is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-chrome-debug-core\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-chrome-debug-core is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-chrome-debug-core is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-debugadapter-node\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-debugadapter-node is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-debugadapter-node is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-emmet-helper\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-emmet-helper is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-emmet-helper is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-extension-vscode\\n\\nDeprecated\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-extension-vscode is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-extension-vscode is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-extension-samples\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-extension-samples is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-extension-samples is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-filewatcher-windows\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-filewatcher-windows is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-filewatcher-windows is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-generator-code\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-generator-code is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-generator-code is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-html-languageservice\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-html-languageservice is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-html-languageservice is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-json-languageservice\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-json-languageservice is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-json-languageservice is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-languageserver-node\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-languageserver-node is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-languageserver-node is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-loader\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-loader is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-loader is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-mono-debug\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-mono-debug is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-mono-debug is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-node-debug\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-node-debug is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-node-debug is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-node-debug2\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-node-debug2 is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-node-debug2 is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-recipes\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-recipes is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-recipes is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-textmate\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-textmate is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-textmate is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-themes\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-themes is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-themes is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-vsce\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-vsce is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-vsce is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-website\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-website is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-website is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-windows-process-tree\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-windows-process-tree is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-windows-process-tree is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# debug-adapter-protocol\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/debug-adapter-protocol is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/debug-adapter-protocol is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# inno-updater\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/inno-updater is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/inno-updater is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# monaco-languages\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-languages is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-languages is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# monaco-typescript\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-typescript is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-typescript is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# monaco-css\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-css is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-css is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# monaco-json\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-json is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-json is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# monaco-html\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-html is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-html is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# monaco-editor-webpack-plugin\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-editor-webpack-plugin is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/monaco-editor-webpack-plugin is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# node-jsonc-parser\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/node-jsonc-parser is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/node-jsonc-parser is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-jupyter\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-jupyter is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-jupyter is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-python\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-python is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-python is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-livepreview\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-livepreview is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-livepreview is:issue created:>$since\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode-test\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-test is:issue closed:>$since\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-test is:issue created:>$since\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/grooming.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Config\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"// list of repos we work in\\r\\n$repos=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\\r\\n\\r\\n$assignee=@me\\r\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Missing Type label\\r\\n\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos assignee:$assignee is:open type:issue -label:bug -label:\\\"info-needed\\\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering -label:endgame-plan\\r\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Missing Area Label\\r\\n\\r\\nFeature area labels are light or strong blue (`1d76db` or `c5def5`) and they denote a specific feature or feature area, like `editor-clipboard` or `file-explorer`\\r\\n\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode assignee:$assignee is:open type:issue -label:\\\"info-needed\\\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-widgets -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:chat -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-accessibility -label:notebook-api -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commands -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-serialization -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:notebook-sticky-scroll -label:notebook-format -label:notebook-code-actions -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-sticky-scroll -label:terminal-tabs -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:quick-chat -label:tasks -label:error-list -label:winget -label:tree-views -label:freeze-slow-crash-leak -label:engineering -label:cross-file-editing -label:microsoft-authentication -label:github-authentication -label:lm-access -label:secret-storage\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Missing Milestone\\r\\n\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos assignee:$assignee is:open type:issue no:milestone -label:info-needed -label:triage-needed -label:confirmation-pending -label:under-discussion\\r\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Not Actionable\\r\\n\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos assignee:$assignee is:open label:\\\"info-needed\\\"\\r\\n\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/inbox.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## tl;dr: Triage Inbox\\n\\nAll inbox issues but not those that need more information. These issues need to be triaged, e.g assigned to a user or ask for more information\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$inbox -label:\\\"info-needed\\\" sort:created-desc\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode label:triage-needed is:open\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"##### `Config`: defines the inbox query\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$inbox=repo:microsoft/vscode is:open no:assignee -label:feature-request -label:testplan-item -label:plan-item \"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Inbox tracking and Issue triage\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"New issues or pull requests submitted by the community are initially triaged by an [automatic classification bot](https://github.com/microsoft/vscode-github-triage-actions/tree/master/classifier-deep). Issues that the bot does not correctly triage are then triaged by a team member. The team rotates the inbox tracker on a weekly basis.\\n\\nA [mirror](https://github.com/JacksonKearl/testissues/issues) of the VS Code issue stream is available with details about how the bot classifies issues, including feature-area classifications and confidence ratings. Per-category confidence thresholds and feature-area ownership data is maintained in [.github/classifier.json](https://github.com/microsoft/vscode/blob/main/.github/classifier.json). \\n\\n💡 The bot is being run through a GitHub action that runs every 30 minutes. Give the bot the opportunity to classify an issue before doing it manually.\\n\\n### Inbox Tracking\\n\\nThe inbox tracker is responsible for the [global inbox](https://github.com/microsoft/vscode/issues?utf8=%E2%9C%93&q=is%3Aopen+no%3Aassignee+-label%3Afeature-request+-label%3Atestplan-item+-label%3Aplan-item) containing all **open issues and pull requests** that\\n- are neither **feature requests** nor **test plan items** nor **plan items** and\\n- have **no owner assignment**.\\n\\nThe **inbox tracker** may perform any step described in our [issue triaging documentation](https://github.com/microsoft/vscode/wiki/Issues-Triaging) but its main responsibility is to route issues to the actual feature area owner.\\n\\nFeature area owners track the **feature area inbox** containing all **open issues and pull requests** that\\n- are personally assigned to them and are not assigned to any milestone\\n- are labeled with their feature area label and are not assigned to any milestone.\\nThis secondary triage may involve any of the steps described in our [issue triaging documentation](https://github.com/microsoft/vscode/wiki/Issues-Triaging) and results in a fully triaged or closed issue.\\n\\nThe [github triage extension](https://github.com/microsoft/vscode-github-triage-extension) can be used to assist with triaging — it provides a \\\"Command Palette\\\"-style list of triaging actions like assignment, labeling, and triggers for various bot actions.\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## All Inbox Items\\n\\nAll issues that have no assignee and that have neither **feature requests** nor **test plan items** nor **plan items**.\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$inbox\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/my-endgame.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Macros\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\\n\\n$MILESTONE=milestone:\\\"March 2025\\\"\\n\\n$MINE=assignee:@me\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Preparation\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Open Pull Requests on the Milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:pr is:open\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Open Issues on the Milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue is:open -label:iteration-plan -label:endgame-plan -label:testplan-item\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Feature Requests Missing Labels\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request -label:verification-needed -label:on-testplan -label:verified -label:*duplicate\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Test Plan Items\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS is:issue is:open author:@me label:testplan-item\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Verification Needed\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request label:verification-needed -label:verified -label:on-testplan\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Testing\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Test Plan Items\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MINE is:issue is:open label:testplan-item\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Verification Needed\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed -assignee:@me -label:verified -label:z-author-verified label:feature-request label:verification-needed -label:verification-steps-needed -label:unreleased -label:on-testplan\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Fixing\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Open Issues\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue is:open -label:endgame-plan -label:testplan-item -label:iteration-plan\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Open Bugs\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue is:open label:bug\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Verification\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## My Issues (verification-steps-needed)\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue label:bug label:verification-steps-needed\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## My Issues (verification-found)\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue label:bug label:verification-found\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Issues filed by me\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed author:@me sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:triage-needed -label:verification-found -label:*not-reproducible\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Issues filed from outside team\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:*out-of-scope -label:error-telemetry -label:verification-steps-needed -label:verification-found -author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:andreamah -author:bamurtaugh -author:bpasero -author:chrisdias -author:chrmarti -author:Chuxel -author:claudiaregio -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:DonJayamanne -author:egamma -author:fiveisprime -author:ntrogh -author:hediet -author:isidorn -author:joaomoreno -author:joyceerhl -author:jrieken -author:kieferrm -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:roblourens -author:rzhao271 -author:sandy081 -author:sbatten -author:stevencl -author:tanhakabir -author:TylerLeonhardt -author:Tyriar -author:weinand -author:amunger -author:karthiknadig -author:eleanorjboyd -author:Yoyokrazy -author:paulacamargo25 -author:ulugbekna -author:aiday-mar -author:daviddossett -author:bhavyaus -author:justschen -author:benibenj -author:luabud -author:anthonykim1 -author:joshspicer -author:osortega -author:legomushroom\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Issues filed by others\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed -author:@me sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -label:*not-reproducible -label:*out-of-scope\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Test steps needed from others\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE -$MINE is:issue label:bug label:verification-steps-needed -label:verified\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# Release Notes\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request -label:on-release-notes\\r\\n$REPOS $MILESTONE $MINE is:issue is:closed reason:completed label:engineering -label:on-release-notes\\r\\n$REPOS $MILESTONE $MINE is:issue is:closed reason:completed label:plan-item -label:on-release-notes\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/my-work.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"##### `Config`: This should be changed every month/milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"// list of repos we work in\\n$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\\n\\n// current milestone name\\n$MILESTONE=milestone:\\\"March 2025\\\"\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Milestone Work\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS $MILESTONE assignee:@me is:open\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Bugs, Debt, Features...\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### My Bugs\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open label:bug\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Debt & Engineering\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open label:debt,engineering\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Performance 🐌 🔜 🏎\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open label:perf,perf-startup,perf-bloat,freeze-slow-crash-leak\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Feature Requests\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open label:feature-request milestone:Backlog sort:reactions-+1-desc\\n\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open milestone:\\\"Backlog Candidates\\\"\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Personal Inbox\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Triage Needed\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS is:open assignee:@me label:triage-needed\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"\\n#### Missing Type label\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open type:issue -label:bug -label:\\\"info-needed\\\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Missing Area Label\\n\\nFeature area labels are light or strong blue (`1d76db` or `c5def5`) and they denote a specific feature or feature area, like `editor-clipboard` or `file-explorer`\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode assignee:@me is:open type:issue -label:\\\"info-needed\\\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:code-lens -label:command-center -label:comments -label:config -label:context-keys -label:custom-editors -label:debug -label:debug-console -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-sticky-scroll-decorations -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet-parse -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extension-signature -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:icon-brand -label:icons-product -label:icons-widget -label:inlay-hints -label:inline-chat -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:javascript -label:json -label:json-sorting -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:multi-monitor -label:native-file-dialog -label:network -label:notebook -label:notebook-accessibility -label:notebook-api -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-code-actions -label:notebook-commands -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-format -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-serialization -label:notebook-statusbar -label:notebook-sticky-scroll -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:panel-chat -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:quickpick-chat -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-desktop -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-search -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:system-context-menu -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:unc -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-documents -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-auxwindow -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-voice -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:error-list -label:winget -label:cross-file-editing -label:editor-refactor-preview\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Missing Milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Not Actionable\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS assignee:@me is:open label:\\\"info-needed\\\"\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Pull Requests\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"✅ Approved\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS author:@me is:open is:pr review:approved\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"⌛ Pending Approval\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS author:@me is:open is:pr review:required\\n\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"⚠️ Changes Requested\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$REPOS author:@me is:open is:pr review:changes_requested\\n\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/papercuts.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Papercuts\\n\\nThis notebook serves as an ongoing collection of papercut issues that we encounter while dogfooding. With that in mind only promote issues that really turn you off, e.g. issues that make you want to stop using VS Code or its extensions. To mark an issue (bug, feature-request, etc.) as papercut add the labels: `papercut :drop_of_blood:`\",\n    \"editable\": true\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## All Papercuts\\n\\nThese are all papercut issues that we encounter while dogfooding vscode or extensions that we author.\",\n    \"editable\": true\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode is:open -label:notebook label:\\\"papercut :drop_of_blood:\\\"\",\n    \"editable\": true\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"## Native Notebook\",\n    \"editable\": true\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode is:open label:notebook label:\\\"papercut :drop_of_blood:\\\"\",\n    \"editable\": true\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### My Papercuts\",\n    \"editable\": true\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode is:open assignee:@me label:\\\"papercut :drop_of_blood:\\\"\",\n    \"editable\": true\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/verification.github-issues",
    "content": "[\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Bug Verification Queries\\n\\nBefore shipping we want to verify _all_ bugs. That means when a bug is fixed we check that the fix actually works. It's always best to start with bugs that you have filed and the proceed with bugs that have been filed from users outside the development team. \"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"#### Config: update list of `repos` and the `milestone`\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\\n$milestone=milestone:\\\"November 2023\\\"\\n$closedRecently=closed:>2023-09-29\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Bugs You Filed\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate author:@me\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Bugs From Outside\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate -author:@me -assignee:@me label:bug -label:verified -author:@me -author:aeschli -author:alexdima -author:alexr00 -author:bpasero -author:chrisdias -author:chrmarti -author:connor4312 -author:dbaeumer -author:deepak1556 -author:eamodio -author:egamma -author:gregvanl -author:isidorn -author:JacksonKearl -author:joaomoreno -author:jrieken -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:RMacfarlane -author:roblourens -author:sana-ajani -author:sandy081 -author:sbatten -author:Tyriar -author:weinand -author:rzhao271 -author:kieferrm -author:TylerLeonhardt -author:bamurtaugh -author:hediet -author:joyceerhl -author:rchiodo\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### All\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"### Issues recently closed via PR without a milestone\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$repos is:closed linked:pr $closedRecently no:milestone -label:verified -label:*duplicate\"\n  }\n]"
  },
  {
    "path": ".vscode/notebooks/vscode-dev.github-issues",
    "content": "[\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"$milestone=milestone:\\\"August 2024\\\"\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# vscode.dev repo\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-dev $milestone is:open\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-dev milestone:\\\"Backlog\\\" is:open\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# VS Code repo\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode label:vscode.dev is:open\"\n  },\n  {\n    \"kind\": 1,\n    \"language\": \"markdown\",\n    \"value\": \"# GitHub Repositories repos\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-remote-repositories-github $milestone is:open\"\n  },\n  {\n    \"kind\": 2,\n    \"language\": \"github-issues\",\n    \"value\": \"repo:microsoft/vscode-remotehub $milestone is:open\"\n  }\n]"
  },
  {
    "path": ".vscode/searches/ts36031.code-search",
    "content": "# Query: \\\\w+\\\\?\\\\.\\\\w+![(.[]\n# Flags: RegExp\n# ContextLines: 2\n\n8 results - 4 files\n\nsrc/vs/base/browser/ui/tree/asyncDataTree.ts:\n  241  \t\t\t} : () => 'treeitem',\n  242  \t\t\tisChecked: options.accessibilityProvider!.isChecked ? (e) => {\n  243: \t\t\t\treturn !!(options.accessibilityProvider?.isChecked!(e.element as T));\n  244  \t\t\t} : undefined,\n  245  \t\t\tgetAriaLabel(e) {\n\nsrc/vs/platform/list/browser/listService.ts:\n  463  \n  464  \t\tif (typeof options?.openOnSingleClick !== 'boolean' && options?.configurationService) {\n  465: \t\t\tthis.openOnSingleClick = options?.configurationService!.getValue(openModeSettingKey) !== 'doubleClick';\n  466  \t\t\tthis._register(options?.configurationService.onDidChangeConfiguration(() => {\n  467: \t\t\t\tthis.openOnSingleClick = options?.configurationService!.getValue(openModeSettingKey) !== 'doubleClick';\n  468  \t\t\t}));\n  469  \t\t} else {\n\nsrc/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts:\n  1526  \n  1527  \t\tawait this._ensureActiveKernel();\n  1528: \t\tawait this._activeKernel?.cancelNotebookCell!(this._notebookViewModel!.uri, undefined);\n  1529  \t}\n  1530  \n\n  1535  \n  1536  \t\tawait this._ensureActiveKernel();\n  1537: \t\tawait this._activeKernel?.executeNotebookCell!(this._notebookViewModel!.uri, undefined);\n  1538  \t}\n  1539  \n\n  1553  \n  1554  \t\tawait this._ensureActiveKernel();\n  1555: \t\tawait this._activeKernel?.cancelNotebookCell!(this._notebookViewModel!.uri, cell.handle);\n  1556  \t}\n  1557  \n\n  1567  \n  1568  \t\tawait this._ensureActiveKernel();\n  1569: \t\tawait this._activeKernel?.executeNotebookCell!(this._notebookViewModel!.uri, cell.handle);\n  1570  \t}\n  1571  \n\nsrc/vs/workbench/contrib/webview/electron-browser/iframeWebviewElement.ts:\n  89  \t\t\t.then(() => this._resourceRequestManager.ensureReady())\n  90  \t\t\t.then(() => {\n  91: \t\t\t\tthis.element?.contentWindow!.postMessage({ channel, args: data }, '*');\n  92  \t\t\t});\n  93  \t}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n\t\"editor.insertSpaces\": false,\n\t\"files.trimTrailingWhitespace\": true,\n\t\"files.exclude\": {\n\t\t\".git\": true,\n\t\t\".build\": true,\n\t\t\".profile-oss\": true,\n\t\t\"**/.DS_Store\": true,\n\t\t\".vscode-test\": true,\n\t\t\"cli/target\": true,\n\t\t\"build/**/*.js.map\": true,\n\t\t\"build/**/*.js\": {\n\t\t\t\"when\": \"$(basename).ts\"\n\t\t}\n\t},\n\t\"files.associations\": {\n\t\t\"cglicenses.json\": \"jsonc\",\n\t\t\"*.tst\": \"typescript\"\n\t},\n\t\"search.exclude\": {\n\t\t\"**/node_modules\": true,\n\t\t\"cli/target/**\": true,\n\t\t\".build/**\": true,\n\t\t\"out/**\": true,\n\t\t\"out-build/**\": true,\n\t\t\"out-vscode/**\": true,\n\t\t\"i18n/**\": true,\n\t\t\"extensions/**/dist/**\": true,\n\t\t\"extensions/**/out/**\": true,\n\t\t\"test/smoke/out/**\": true,\n\t\t\"test/automation/out/**\": true,\n\t\t\"test/integration/browser/out/**\": true,\n\t\t\"src/vs/base/test/common/filters.perf.data.js\": true,\n\t\t\"src/vs/base/test/node/uri.perf.data.txt\": true,\n\t\t\"src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts\": true,\n\t\t\"src/vs/base/test/node/uri.test.data.txt\": true,\n\t\t\"src/vs/editor/test/node/diffing/fixtures/**\": true,\n\t\t\"build/loader.min\": true\n\t},\n\t\"files.readonlyInclude\": {\n\t\t\"**/node_modules/**/*.*\": true,\n\t\t\"**/yarn.lock\": true,\n\t\t\"**/package-lock.json\": true,\n\t\t\"**/Cargo.lock\": true,\n\t\t\"build/**/*.js\": true,\n\t\t\"out/**\": true,\n\t\t\"out-build/**\": true,\n\t\t\"out-vscode/**\": true,\n\t\t\"out-vscode-reh/**\": true,\n\t\t\"extensions/**/dist/**\": true,\n\t\t\"extensions/**/out/**\": true,\n\t\t\"extensions/terminal-suggest/src/completions/upstream/**\": true,\n\t\t\"test/smoke/out/**\": true,\n\t\t\"test/automation/out/**\": true,\n\t\t\"test/integration/browser/out/**\": true\n\t},\n\t\"files.readonlyExclude\": {\n\t\t\"build/builtin/*.js\": true,\n\t\t\"build/monaco/*.js\": true,\n\t\t\"build/npm/*.js\": true,\n\t\t\"build/*.js\": true\n\t},\n\t\"lcov.path\": [\n\t\t\"./.build/coverage/lcov.info\",\n\t\t\"./.build/coverage-single/lcov.info\"\n\t],\n\t\"lcov.watch\": [\n\t\t{\n\t\t\t\"pattern\": \"**/*.test.js\",\n\t\t\t\"command\": \"${workspaceFolder}/scripts/test.sh --coverage --run ${file}\",\n\t\t\t\"windows\": {\n\t\t\t\t\"command\": \"${workspaceFolder}\\\\scripts\\\\test.bat --coverage --run ${file}\"\n\t\t\t}\n\t\t}\n\t],\n\t\"typescript.tsdk\": \"node_modules/typescript/lib\",\n\t\"npm.exclude\": \"**/extensions/**\",\n\t\"emmet.excludeLanguages\": [],\n\t\"typescript.preferences.importModuleSpecifier\": \"relative\",\n\t\"typescript.preferences.quoteStyle\": \"single\",\n\t\"json.schemas\": [\n\t\t{\n\t\t\t\"fileMatch\": [\n\t\t\t\t\"cgmanifest.json\"\n\t\t\t],\n\t\t\t\"url\": \"https://json.schemastore.org/component-detection-manifest.json\",\n\t\t},\n\t\t{\n\t\t\t\"fileMatch\": [\n\t\t\t\t\"cglicenses.json\"\n\t\t\t],\n\t\t\t\"url\": \"./.vscode/cglicenses.schema.json\"\n\t\t}\n\t],\n\t\"git.ignoreLimitWarning\": true,\n\t\"git.branchProtection\": [\n\t\t\"main\",\n\t\t\"distro\",\n\t\t\"release/*\"\n\t],\n\t\"git.branchProtectionPrompt\": \"alwaysCommitToNewBranch\",\n\t\"git.branchRandomName.enable\": true,\n\t\"git.pullBeforeCheckout\": true,\n\t\"git.mergeEditor\": true,\n\t\"remote.extensionKind\": {\n\t\t\"msjsdiag.debugger-for-chrome\": \"workspace\"\n\t},\n\t\"gulp.autoDetect\": \"off\",\n\t\"files.insertFinalNewline\": true,\n\t\"[plaintext]\": {\n\t\t\"files.insertFinalNewline\": false\n\t},\n\t\"[typescript]\": {\n\t\t\"editor.defaultFormatter\": \"vscode.typescript-language-features\",\n\t\t\"editor.formatOnSave\": true\n\t},\n\t\"[javascript]\": {\n\t\t\"editor.defaultFormatter\": \"vscode.typescript-language-features\",\n\t\t\"editor.formatOnSave\": true\n\t},\n\t\"[rust]\": {\n\t\t\"editor.defaultFormatter\": \"rust-lang.rust-analyzer\",\n\t\t\"editor.formatOnSave\": true,\n\t},\n\t\"rust-analyzer.linkedProjects\": [\n\t\t\"cli/Cargo.toml\"\n\t],\n\t\"typescript.tsc.autoDetect\": \"off\",\n\t\"testing.autoRun.mode\": \"rerun\",\n\t\"conventionalCommits.scopes\": [\n\t\t\"tree\",\n\t\t\"scm\",\n\t\t\"grid\",\n\t\t\"splitview\",\n\t\t\"table\",\n\t\t\"list\",\n\t\t\"git\",\n\t\t\"sash\"\n\t],\n\t\"githubPullRequests.experimental.createView\": true,\n\t\"debug.javascript.terminalOptions\": {\n\t\t\"outFiles\": [\n\t\t\t\"${workspaceFolder}/out/**/*.js\",\n\t\t\t\"${workspaceFolder}/build/**/*.js\"\n\t\t]\n\t},\n\t\"extension-test-runner.debugOptions\": {\n\t\t\"outFiles\": [\n\t\t\t\"${workspaceFolder}/extensions/*/out/**/*.js\",\n\t\t]\n\t},\n\t\"githubPullRequests.assignCreated\": \"${user}\",\n\t\"githubPullRequests.defaultMergeMethod\": \"squash\",\n\t\"githubPullRequests.ignoredPullRequestBranches\": [\n\t\t\"main\"\n\t],\n\t\"application.experimental.rendererProfiling\": true,\n\t\"editor.experimental.asyncTokenization\": true,\n\t\"editor.experimental.asyncTokenizationVerification\": true,\n\t\"terminal.integrated.suggest.enabled\": true,\n\t\"typescript.preferences.autoImportFileExcludePatterns\": [\n\t\t\"@xterm/xterm\",\n\t\t\"@xterm/headless\",\n\t\t\"node-pty\",\n\t\t\"vscode-notebook-renderer\",\n\t\t\"src/vs/workbench/workbench.web.main.internal.ts\"\n\t],\n\t\"[github-issues]\": {\n\t\t\"editor.wordWrap\": \"on\"\n\t},\n\t\"css.format.spaceAroundSelectorSeparator\": true,\n\t\"typescript.enablePromptUseWorkspaceTsdk\": true,\n\t\"eslint.useFlatConfig\": true,\n\t\"editor.occurrencesHighlightDelay\": 0,\n\t\"typescript.experimental.expandableHover\": true,\n\t\"git.diagnosticsCommitHook.Enabled\": true,\n\t\"git.diagnosticsCommitHook.Sources\": {\n\t\t\"*\": \"error\",\n\t\t\"ts\": \"warning\",\n\t\t\"eslint\": \"warning\"\n\t}\n}\n"
  },
  {
    "path": ".vscode/shared.code-snippets",
    "content": "{\n\t// Each snippet is defined under a snippet name and has a scope, prefix, body and\n\t// description. The scope defines in watch languages the snippet is applicable. The prefix is what is\n\t// used to trigger the snippet and the body will be expanded and inserted.Possible variables are:\n\t// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.\n\t// Placeholders with the same ids are connected.\n\t// Example:\n\t\"MSFT Copyright Header\": {\n\t\t\"scope\": \"javascript,typescript,css,rust\",\n\t\t\"prefix\": [\n\t\t\t\"header\",\n\t\t\t\"stub\",\n\t\t\t\"copyright\"\n\t\t],\n\t\t\"body\": [\n\t\t\t\"/*---------------------------------------------------------------------------------------------\",\n\t\t\t\" *  Copyright (c) Microsoft Corporation. All rights reserved.\",\n\t\t\t\" *  Licensed under the MIT License. See License.txt in the project root for license information.\",\n\t\t\t\" *--------------------------------------------------------------------------------------------*/\",\n\t\t\t\"\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"Insert Copyright Statement\"\n\t},\n\t\"TS -> Inject Service\": {\n\t\t\"scope\": \"typescript\",\n\t\t\"description\": \"Constructor Injection Pattern\",\n\t\t\"prefix\": \"@inject\",\n\t\t\"body\": \"@$1 private readonly _$2: ${1},$0\"\n\t},\n\t\"TS -> Event & Emitter\": {\n\t\t\"scope\": \"typescript\",\n\t\t\"prefix\": \"emitter\",\n\t\t\"description\": \"Add emitter and event properties\",\n\t\t\"body\": [\n\t\t\t\"private readonly _onDid$1 = new Emitter<$2>();\",\n\t\t\t\"readonly onDid$1: Event<$2> = this._onDid$1.event;\"\n\t\t],\n\t}\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"watch-clientd\",\n\t\t\t\"label\": \"Core - Build\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\",\n\t\t\t\t\"group\": \"buildWatchers\",\n\t\t\t\t\"close\": false\n\t\t\t},\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"owner\": \"typescript\",\n\t\t\t\t\"applyTo\": \"closedDocuments\",\n\t\t\t\t\"fileLocation\": [\n\t\t\t\t\t\"absolute\"\n\t\t\t\t],\n\t\t\t\t\"pattern\": {\n\t\t\t\t\t\"regexp\": \"Error: ([^(]+)\\\\((\\\\d+|\\\\d+,\\\\d+|\\\\d+,\\\\d+,\\\\d+,\\\\d+)\\\\): (.*)$\",\n\t\t\t\t\t\"file\": 1,\n\t\t\t\t\t\"location\": 2,\n\t\t\t\t\t\"message\": 3\n\t\t\t\t},\n\t\t\t\t\"background\": {\n\t\t\t\t\t\"beginsPattern\": \"Starting compilation...\",\n\t\t\t\t\t\"endsPattern\": \"Finished compilation with\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{   // Void added this\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"watchreactd\",\n\t\t\t\"label\": \"React - Build\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\",\n\t\t\t\t\"group\": \"buildWatchers\",\n\t\t\t\t\"close\": false\n\t\t\t},\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"owner\": \"typescript\",\n\t\t\t\t\"applyTo\": \"closedDocuments\",\n\t\t\t\t\"fileLocation\": [\n\t\t\t\t\t\"absolute\"\n\t\t\t\t],\n\t\t\t\t\"pattern\": {\n\t\t\t\t\t\"regexp\": \"Error: ([^(]+)\\\\((\\\\d+|\\\\d+,\\\\d+|\\\\d+,\\\\d+,\\\\d+,\\\\d+)\\\\): (.*)$\",\n\t\t\t\t\t\"file\": 1,\n\t\t\t\t\t\"location\": 2,\n\t\t\t\t\t\"message\": 3\n\t\t\t\t},\n\t\t\t\t\"background\": {\n\t\t\t\t\t\"beginsPattern\": \"Starting compilation\",\n\t\t\t\t\t\"endsPattern\": \"Finished compilation\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"watch-extensionsd\",\n\t\t\t\"label\": \"Ext - Build\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\",\n\t\t\t\t\"group\": \"buildWatchers\",\n\t\t\t\t\"close\": false\n\t\t\t},\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"owner\": \"typescript\",\n\t\t\t\t\"applyTo\": \"closedDocuments\",\n\t\t\t\t\"fileLocation\": [\n\t\t\t\t\t\"absolute\"\n\t\t\t\t],\n\t\t\t\t\"pattern\": {\n\t\t\t\t\t\"regexp\": \"Error: ([^(]+)\\\\((\\\\d+|\\\\d+,\\\\d+|\\\\d+,\\\\d+,\\\\d+,\\\\d+)\\\\): (.*)$\",\n\t\t\t\t\t\"file\": 1,\n\t\t\t\t\t\"location\": 2,\n\t\t\t\t\t\"message\": 3\n\t\t\t\t},\n\t\t\t\t\"background\": {\n\t\t\t\t\t\"beginsPattern\": \"Starting compilation\",\n\t\t\t\t\t\"endsPattern\": \"Finished compilation\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"label\": \"VS Code - Build\",\n\t\t\t\"dependsOn\": [\n\t\t\t\t\"Core - Build\",\n\t\t\t\t\"React - Build\",\n\t\t\t\t\"Ext - Build\"\n\t\t\t],\n\t\t\t\"group\": {\n\t\t\t\t\"kind\": \"build\",\n\t\t\t\t\"isDefault\": true\n\t\t\t},\n\t\t\t\"problemMatcher\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"kill-watch-clientd\",\n\t\t\t\"label\": \"Kill Core - Build\",\n\t\t\t\"group\": \"build\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\",\n\t\t\t\t\"group\": \"buildKillers\",\n\t\t\t\t\"close\": true\n\t\t\t},\n\t\t\t\"problemMatcher\": \"$tsc\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"kill-watch-extensionsd\",\n\t\t\t\"label\": \"Kill Ext - Build\",\n\t\t\t\"group\": \"build\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\",\n\t\t\t\t\"group\": \"buildKillers\",\n\t\t\t\t\"close\": true\n\t\t\t},\n\t\t\t\"problemMatcher\": \"$tsc\"\n\t\t},\n\t\t{\n\t\t\t\"label\": \"Kill VS Code - Build\",\n\t\t\t\"dependsOn\": [\n\t\t\t\t\"Kill Core - Build\",\n\t\t\t\t\"Kill Ext - Build\"\n\t\t\t],\n\t\t\t\"group\": \"build\",\n\t\t\t\"problemMatcher\": []\n\t\t},\n\t\t{\n\t\t\t\"label\": \"Restart VS Code - Build\",\n\t\t\t\"dependsOn\": [\n\t\t\t\t\"Kill VS Code - Build\",\n\t\t\t\t\"VS Code - Build\"\n\t\t\t],\n\t\t\t\"group\": \"build\",\n\t\t\t\"dependsOrder\": \"sequence\",\n\t\t\t\"problemMatcher\": []\n\t\t},\n\t\t{\n\t\t\t\"label\": \"Kill VS Code - Build, Npm, VS Code - Build\",\n\t\t\t\"dependsOn\": [\n\t\t\t\t\"Kill VS Code - Build\",\n\t\t\t\t\"npm: install\",\n\t\t\t\t\"VS Code - Build\"\n\t\t\t],\n\t\t\t\"group\": \"build\",\n\t\t\t\"dependsOrder\": \"sequence\",\n\t\t\t\"problemMatcher\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"watch-webd\",\n\t\t\t\"label\": \"Web Ext - Build\",\n\t\t\t\"group\": \"build\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\"\n\t\t\t},\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"owner\": \"typescript\",\n\t\t\t\t\"applyTo\": \"closedDocuments\",\n\t\t\t\t\"fileLocation\": [\n\t\t\t\t\t\"absolute\"\n\t\t\t\t],\n\t\t\t\t\"pattern\": {\n\t\t\t\t\t\"regexp\": \"Error: ([^(]+)\\\\((\\\\d+|\\\\d+,\\\\d+|\\\\d+,\\\\d+,\\\\d+,\\\\d+)\\\\): (.*)$\",\n\t\t\t\t\t\"file\": 1,\n\t\t\t\t\t\"location\": 2,\n\t\t\t\t\t\"message\": 3\n\t\t\t\t},\n\t\t\t\t\"background\": {\n\t\t\t\t\t\"beginsPattern\": \"Starting compilation\",\n\t\t\t\t\t\"endsPattern\": \"Finished compilation\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"kill-watch-webd\",\n\t\t\t\"label\": \"Kill Web Ext - Build\",\n\t\t\t\"group\": \"build\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\"\n\t\t\t},\n\t\t\t\"problemMatcher\": \"$tsc\"\n\t\t},\n\t\t{\n\t\t\t\"label\": \"Run tests\",\n\t\t\t\"type\": \"shell\",\n\t\t\t\"command\": \"./scripts/test.sh\",\n\t\t\t\"windows\": {\n\t\t\t\t\"command\": \".\\\\scripts\\\\test.bat\"\n\t\t\t},\n\t\t\t\"group\": \"test\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"echo\": true,\n\t\t\t\t\"reveal\": \"always\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"label\": \"Run Dev\",\n\t\t\t\"type\": \"shell\",\n\t\t\t\"command\": \"./scripts/code.sh\",\n\t\t\t\"windows\": {\n\t\t\t\t\"command\": \".\\\\scripts\\\\code.bat\"\n\t\t\t},\n\t\t\t\"problemMatcher\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"electron\",\n\t\t\t\"label\": \"Download electron\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"gulp\",\n\t\t\t\"task\": \"hygiene\",\n\t\t\t\"problemMatcher\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": \"shell\",\n\t\t\t\"command\": \"./scripts/code-server.sh\",\n\t\t\t\"windows\": {\n\t\t\t\t\"command\": \".\\\\scripts\\\\code-server.bat\"\n\t\t\t},\n\t\t\t\"args\": [\"--no-launch\", \"--connection-token\", \"dev-token\", \"--port\", \"8080\"],\n\t\t\t\"label\": \"Run code server\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"pattern\": {\n\t\t\t\t\t\"regexp\": \"\"\n\t\t\t\t},\n\t\t\t\t\"background\": {\n\t\t\t\t\t\"beginsPattern\": \".*node .*\",\n\t\t\t\t\t\"endsPattern\": \"Web UI available at .*\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"shell\",\n\t\t\t\"command\": \"./scripts/code-web.sh\",\n\t\t\t\"windows\": {\n\t\t\t\t\"command\": \".\\\\scripts\\\\code-web.bat\"\n\t\t\t},\n\t\t\t\"args\": [\"--port\", \"8080\", \"--browser\", \"none\"],\n\t\t\t\"label\": \"Run code web\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"pattern\": {\n\t\t\t\t\t\"regexp\": \"\"\n\t\t\t\t},\n\t\t\t\t\"background\": {\n\t\t\t\t\t\"beginsPattern\": \".*node .*\",\n\t\t\t\t\t\"endsPattern\": \"Listening on .*\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"eslint\",\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"source\": \"eslint\",\n\t\t\t\t\"base\": \"$eslint-stylish\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"shell\",\n\t\t\t\"command\": \"node build/lib/preLaunch.js\",\n\t\t\t\"label\": \"Ensure Prelaunch Dependencies\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"silent\",\n\t\t\t\t\"close\": true\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"tsec-compile-check\",\n\t\t\t\"problemMatcher\": [\n\t\t\t\t{\n\t\t\t\t\t\"base\": \"$tsc\",\n\t\t\t\t\t\"applyTo\": \"allDocuments\",\n\t\t\t\t\t\"owner\": \"tsec\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"group\": \"build\",\n\t\t\t\"label\": \"npm: tsec-compile-check\",\n\t\t\t\"detail\": \"node_modules/tsec/bin/tsec -p src/tsconfig.json --noEmit\"\n\t\t},\n\t\t{\n\t\t\t// Used for monaco editor playground launch config\n\t\t\t\"label\": \"Launch Http Server\",\n\t\t\t\"type\": \"shell\",\n\t\t\t\"command\": \"node_modules/.bin/ts-node -T ./scripts/playground-server\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"problemMatcher\": {\n\t\t\t\t\"pattern\": {\n\t\t\t\t\t\"regexp\": \"\"\n\t\t\t\t},\n\t\t\t\t\"background\": {\n\t\t\t\t\t\"activeOnStart\": true,\n\t\t\t\t\t\"beginsPattern\": \"never match\",\n\t\t\t\t\t\"endsPattern\": \".*\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"dependsOn\": [\n\t\t\t\t\"Core - Build\"\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": ".vscode-test.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\nimport { createRequire } from 'node:module';\nimport { fileURLToPath } from 'url';\nimport * as path from 'path';\nimport * as os from 'os';\n\nconst require = createRequire(import.meta.url);\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst { defineConfig } = require('@vscode/test-cli');\n\n/**\n * A list of extension folders who have opted into tests, or configuration objects.\n * Edit me to add more!\n *\n * @type {Array<Partial<import(\"@vscode/test-cli\").TestConfiguration> & { label: string }>}\n */\nconst extensions = [\n\t{\n\t\tlabel: 'markdown-language-features',\n\t\tworkspaceFolder: `extensions/markdown-language-features/test-workspace`,\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'ipynb',\n\t\tworkspaceFolder: path.join(os.tmpdir(), `ipynb-${Math.floor(Math.random() * 100000)}`),\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'notebook-renderers',\n\t\tworkspaceFolder: path.join(os.tmpdir(), `nbout-${Math.floor(Math.random() * 100000)}`),\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'vscode-colorize-tests',\n\t\tworkspaceFolder: `extensions/vscode-colorize-tests/test`,\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'terminal-suggest',\n\t\tworkspaceFolder: path.join(os.tmpdir(), `terminal-suggest-${Math.floor(Math.random() * 100000)}`),\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'vscode-colorize-perf-tests',\n\t\tworkspaceFolder: `extensions/vscode-colorize-perf-tests/test`,\n\t\tmocha: { timeout: 6000_000 }\n\t},\n\t{\n\t\tlabel: 'configuration-editing',\n\t\tworkspaceFolder: path.join(os.tmpdir(), `confeditout-${Math.floor(Math.random() * 100000)}`),\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'github-authentication',\n\t\tworkspaceFolder: path.join(os.tmpdir(), `msft-auth-${Math.floor(Math.random() * 100000)}`),\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'microsoft-authentication',\n\t\tmocha: { timeout: 60_000 }\n\t},\n\t{\n\t\tlabel: 'vscode-api-tests-folder',\n\t\textensionDevelopmentPath: `extensions/vscode-api-tests`,\n\t\tworkspaceFolder: `extensions/vscode-api-tests/testWorkspace`,\n\t\tmocha: { timeout: 60_000 },\n\t\tfiles: 'extensions/vscode-api-tests/out/singlefolder-tests/**/*.test.js',\n\t},\n\t{\n\t\tlabel: 'vscode-api-tests-workspace',\n\t\textensionDevelopmentPath: `extensions/vscode-api-tests`,\n\t\tworkspaceFolder: `extensions/vscode-api-tests/testworkspace.code-workspace`,\n\t\tmocha: { timeout: 60_000 },\n\t\tfiles: 'extensions/vscode-api-tests/out/workspace-tests/**/*.test.js',\n\t}\n];\n\n\nconst defaultLaunchArgs = process.env.API_TESTS_EXTRA_ARGS?.split(' ') || [\n\t'--disable-telemetry', '--skip-welcome', '--skip-release-notes', `--crash-reporter-directory=${__dirname}/.build/crashes`, `--logsPath=${__dirname}/.build/logs/integration-tests`, '--no-cached-data', '--disable-updates', '--use-inmemory-secretstorage', '--disable-extensions', '--disable-workspace-trust'\n];\n\nconst config = defineConfig(extensions.map(extension => {\n\t/** @type {import('@vscode/test-cli').TestConfiguration} */\n\tconst config = {\n\t\tplatform: 'desktop',\n\t\tfiles: `extensions/${extension.label}/out/**/*.test.js`,\n\t\textensionDevelopmentPath: `extensions/${extension.label}`,\n\t\t...extension,\n\t};\n\n\tconfig.mocha ??= {};\n\tif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\t\tlet suite = '';\n\t\tif (process.env.VSCODE_BROWSER) {\n\t\t\tsuite = `${process.env.VSCODE_BROWSER} Browser Integration ${config.label} tests`;\n\t\t} else if (process.env.REMOTE_VSCODE) {\n\t\t\tsuite = `Remote Integration ${config.label} tests`;\n\t\t} else {\n\t\t\tsuite = `Integration ${config.label} tests`;\n\t\t}\n\n\t\tconfig.mocha.reporter = 'mocha-multi-reporters';\n\t\tconfig.mocha.reporterOptions = {\n\t\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\t\tmochaJunitReporterReporterOptions: {\n\t\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t\t}\n\t\t};\n\t}\n\n\tif (!config.platform || config.platform === 'desktop') {\n\t\tconfig.launchArgs = defaultLaunchArgs;\n\t\tconfig.useInstallation = {\n\t\t\tfromPath: process.env.INTEGRATION_TEST_ELECTRON_PATH || `${__dirname}/scripts/code.${process.platform === 'win32' ? 'bat' : 'sh'}`,\n\t\t};\n\t\tconfig.env = {\n\t\t\t...config.env,\n\t\t\tVSCODE_SKIP_PRELAUNCH: '1',\n\t\t};\n\t} else {\n\t\t// web configs not supported, yet\n\t}\n\n\treturn config;\n}));\n\nexport default config;\n"
  },
  {
    "path": "CodeQL.yml",
    "content": "path_classifiers:\n  test:\n    # Classify all files in the top-level directories test/ and testsuites/ as test code.\n    - test\n    # Classify all files with suffix `.test` as test code.\n    # Note: use only forward slash / as a path separator.\n    # *  Matches any sequence of characters except a forward slash.\n    # ** Matches any sequence of characters, including a forward slash.\n    # This wildcard must either be surrounded by forward slash symbols, or used as the first segment of a path.\n    # It matches zero or more whole directory segments. There is no need to use a wildcard at the end of a directory path because all sub-directories are automatically matched.\n    # That is, /anything/ matches the anything directory and all its subdirectories.\n    # Always enclose the expression in double quotes if it includes *.\n    - \"**/*.test.ts\"\n\n  # The default behavior is to tag all files created during the\n  # build as `generated`. Results are hidden for generated code. You can tag\n  # further files as being generated by adding them to the `generated` section.\n  generated:\n    # generated code.\n    - out\n    - \"out-build\"\n    - \"out-vscode\"\n    - \"**/out/**\"\n    - \".build/distro/cli-patches/index.js\"\n\n  # The default behavior is to tag library code as `library`. Results are hidden\n  # for library code. You can tag further files as being library code by adding them\n  # to the `library` section.\n  library:\n    - \"**/node_modules/**\"\n"
  },
  {
    "path": "HOW_TO_CONTRIBUTE.md",
    "content": "# Contributing to Void\n### Welcome! 👋\nThis is the official guide on how to contribute to Void. We want to make it as easy as possible to contribute, so if you have any questions or comments, reach out via email or discord!\n\nThere are a few ways to contribute:\n\n- 💫 Complete items on the [Roadmap](https://github.com/orgs/voideditor/projects/2).\n- 💡 Make suggestions in our [Discord](https://discord.gg/RSNjgaugJs).\n- 🪴 Start new Issues - see [Issues](https://github.com/voideditor/void/issues).\n\n\n\n### Codebase Guide\n\nWe [highly recommend reading this](https://github.com/voideditor/void/blob/main/VOID_CODEBASE_GUIDE.md) guide that we put together on Void's sourcecode if you'd like to add new features.\n\nThe repo is not as intimidating as it first seems if you read the guide!\n\nMost of Void's code lives in the folder `src/vs/workbench/contrib/void/`.\n\n\n\n## Editing Void's Code\n\nIf you're making changes to Void's code as a contributor, you'll want to run a local version of Void to make sure your changes worked. Developer mode lets you do this. Here's how to use it.\n\n### a. Mac - Prerequisites\n\nIf you're using a Mac, you need Python and XCode. You probably have these by default.\n\n### b. Windows - Prerequisites\n\nIf you're using a Windows computer, first get [Visual Studio 2022](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community) (recommended) or [VS Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) (not recommended). If you already have both, you might need to run the next few steps on both of them.\n\nGo to the \"Workloads\" tab and select:\n- `Desktop development with C++`\n- `Node.js build tools`\n\nGo to the \"Individual Components\" tab and select:\n- `MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)`\n- `C++ ATL for latest build tools with Spectre Mitigations`\n- `C++ MFC for latest build tools with Spectre Mitigations`\n\nFinally, click Install.\n\n### c. Linux - Prerequisites\n\nFirst, run `npm install -g node-gyp`. Then:\n\n- Debian (Ubuntu, etc): `sudo apt-get install build-essential g++ libx11-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python-is-python3`.\n- Red Hat (Fedora, etc): `sudo dnf install @development-tools gcc gcc-c++ make libsecret-devel krb5-devel libX11-devel libxkbfile-devel`.\n- SUSE (openSUSE, etc): `sudo zypper install patterns-devel-C-C++-devel_C_C++  krb5-devel libsecret-devel libxkbfile-devel libX11-devel`.\n- Others: see [How to Contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute).\n\n### Developer Mode Instructions\n\nHere's how to start changing Void's code. These steps cover everything from cloning Void, to opening a Developer Mode window where you can play around with your updates.\n\n1. `git clone https://github.com/voideditor/void` to clone the repo.\n2. `npm install` to install all dependencies.\n3. Open Void or VSCode, and initialize Developer Mode (this can take ~5 min to finish, it's done when 2 of the 3 spinners turn to check marks):\n   - Windows: Press <kbd>Ctrl+Shift+B</kbd>.\n   - Mac: Press <kbd>Cmd+Shift+B</kbd>.\n   - Linux: Press <kbd>Ctrl+Shift+B</kbd>.\n4. Open the Void Developer Mode window:\n   - Windows: `./scripts/code.bat`.\n   - Mac: `./scripts/code.sh`.\n   - Linux: `./scripts/code.sh`.\n5. You're good to start editing Void's code! \n   - You won't see your changes unless you press <kbd>Ctrl+R</kbd> (<kbd>Cmd+R</kbd>) inside the new window to reload. Alternatively, press <kbd>Ctrl+Shift+P</kbd> and `Reload Window`.\n   - You might want to add the flags `--user-data-dir ./.tmp/user-data --extensions-dir ./.tmp/extensions` to the command in step 4, which lets you reset any IDE changes you made by deleting the `.tmp` folder.\n\t- You can kill any of the build scripts by pressing `Ctrl+D` in its terminal. If you press `Ctrl+C` the script will close but will keep running in the background.\n\nIf you get any errors, scroll down for common fixes.\n\n#### Common Fixes\n\n- Make sure you followed the prerequisite steps above.\n- Make sure you have Node version `20.18.2` (the version in `.nvmrc`).\n    - You can do this without changing your global Node version using [nvm](https://github.com/nvm-sh/nvm): run `nvm install`, followed by `nvm use` to install the version in `.nvmrc` locally.\n- Make sure the path to your Void folder does not have any spaces in it.\n- If you get `\"TypeError: Failed to fetch dynamically imported module\"`, make sure all imports end with `.js`.\n- If you get an error with React, try running `NODE_OPTIONS=\"--max-old-space-size=8192\" npm run buildreact`.\n- If you see missing styles, wait a few seconds and then reload.\n- If you get errors like `npm error libtool:   error: unrecognised option: '-static'`,  when running ./scripts/code.sh, make sure you have GNU libtool instead of BSD libtool (BSD is the default in macos)\n- If you get errors like `The SUID sandbox helper binary was found, but is not configured correctly` when running ./scripts/code.sh, run\n`sudo chown root:root .build/electron/chrome-sandbox && sudo chmod 4755 .build/electron/chrome-sandbox` and then run `./scripts/code.sh` again.\n- If you have any other questions, feel free to [submit an issue](https://github.com/voideditor/void/issues/new). You can also refer to VSCode's complete [How to Contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute) page.\n\n\n\n#### Building Void from Terminal\n\nTo build Void from the terminal instead of from inside VSCode, follow the steps above, but instead of pressing <kbd>Cmd+Shift+B</kbd>, run `npm run watch`. The build is done when you see something like this:\n\n```\n[watch-extensions] [00:37:39] Finished compilation extensions with 0 errors after 19303 ms\n[watch-client    ] [00:38:06] Finished compilation with 0 errors after 46248 ms\n[watch-client    ] [00:38:07] Starting compilation...\n[watch-client    ] [00:38:07] Finished compilation with 0 errors after 5 ms\n```\n\n\n\n### Distributing\nVoid's maintainers distribute Void on our website and in releases. Our build pipeline is a fork of VSCodium, and it works by running GitHub Actions which create the downloadables. The build repo with more instructions lives [here](https://github.com/voideditor/void-builder).\n\nIf you want to completely control Void's build pipeline for your own internal usage, which comes with a lot of time cost (and is typically not recommended), see our [`void-builder`](https://github.com/voideditor/void-builder) repo which builds Void and contains a few important notes about auto-updating and rebasing.\n\n\n#### Building a Local Executible\nWe don't usually recommend building a local executible of Void - typically you should follow the steps above to distribute a complete executible with the advantages of VSCodium baked-in, or you should just use Developer Mode to run Void locally which is much faster. If you're certain this is what you want, see details below.\n\n<details>\n\t<summary> Building Locally (not recommended)</summary>\nIf you're certain you want to build a local executible of Void, follow these steps. It can take ~25 minutes.\n\nMake sure you've already entered Developer Mode with Void first, then run one of the following commands. This will create a folder named `VSCode-darwin-arm64` or similar outside of the void/ repo (see below). \n\n\n##### Mac\n- `npm run gulp vscode-darwin-arm64` - most common (Apple Silicon)\n- `npm run gulp vscode-darwin-x64` (Intel)\n\n##### Windows\n- `npm run gulp vscode-win32-x64` - most common\n- `npm run gulp vscode-win32-arm64`\n\n##### Linux\n- `npm run gulp vscode-linux-x64` - most common\n- `npm run gulp vscode-linux-arm64`\n\n\n##### Local Executible Output\n\nThe local executible will be located in a folder outside of `void/`:\n```bash\nworkspace/\n├── void/   # Your Void fork\n└── VSCode-darwin-arm64/ # Generated output\n```\n\n</details>\n\n\n## Pull Request Guidelines\n\n\n- Please submit a pull request once you've made a change.\n- No need to submit an Issue unless you're creating a new feature that might involve multiple PRs.\n- Please don't use AI to write your PR 🙂\n\n\n\n\n"
  },
  {
    "path": "LICENSE-VS-Code.txt",
    "content": "Void is a fork of VS Code, which is licensed under the MIT License (below).\nVoid's additions and modifications are licensed under the Apache 2.0 License (see LICENSE.txt).\n\n--------------------\n\nMIT License\n\nCopyright (c) 2015 - present Microsoft Corporation\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": "LICENSE.txt",
    "content": "                                 Apache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright 2025 Glass Devtools, Inc.\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n"
  },
  {
    "path": "README.md",
    "content": "# Welcome to Void.\n\n<div align=\"center\">\n\t<img\n\t\tsrc=\"./src/vs/workbench/browser/parts/editor/media/slice_of_void.png\"\n\t \talt=\"Void Welcome\"\n\t\twidth=\"300\"\n\t \theight=\"300\"\n\t/>\n</div>\n\nVoid is the open-source Cursor alternative.\n\nUse AI agents on your codebase, checkpoint and visualize changes, and bring any model or host locally. Void sends messages directly to providers without retaining your data.\n\nThis repo contains the full sourcecode for Void. If you're new, welcome!\n\n- 🧭 [Website](https://voideditor.com)\n\n- 👋 [Discord](https://discord.gg/RSNjgaugJs)\n\n- 🚙 [Project Board](https://github.com/orgs/voideditor/projects/2)\n\n\n## Note\n\nWe've paused work on the Void IDE (this repo) to explore a few novel coding ideas. We want to focus on innovation over feature-parity. Void will continue running, but without maintenance some existing features might stop working over time. Depending on the direction of our new work, we might not resume Void as an IDE.\n\nWe won't be actively reviewing Issues and PRs, but we will respond to all [email](mailto:hello@voideditor.com) inquiries on building and maintaining your own version of Void while we're paused. \n\n## Reference\n\nVoid is a fork of the [vscode](https://github.com/microsoft/vscode) repository. For a guide to the codebase, see [VOID_CODEBASE_GUIDE](https://github.com/voideditor/void/blob/main/VOID_CODEBASE_GUIDE.md).\n\nFor a guide on how to develop your own version of Void, see [HOW_TO_CONTRIBUTE](https://github.com/voideditor/void/blob/main/HOW_TO_CONTRIBUTE.md) and [void-builder](https://github.com/voideditor/void-builder).\n\n\n\n\n## Support\nYou can always reach us in our Discord server or contact us via email: hello@voideditor.com.\n"
  },
  {
    "path": "ThirdPartyNotices.txt",
    "content": "NOTICES\r\n\r\nThis repository incorporates material as listed below or described in the code.\r\n\r\n\r\n\r\n---------------------------------------------------------\r\n\r\n@fig/autocomplete-shared 1.1.2\r\nhttps://github.com/withfig/autocomplete-tools\r\n\r\nMIT License\r\n\r\nCopyright (c) 2021 Hercules Labs Inc. (Fig)\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\n@iktakahiro/markdown-it-katex 4.0.2 - MIT\r\nhttps://github.com/mjbvz/markdown-it-katex\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2016 Waylon Flinn\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n\r\n---\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2018 Takahiro Ethan Ikeuchi @iktakahiro\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\namazon-q-developer-cli f66e0b0e917ab185eef528dc36eca56b78ca8b5d\r\nhttps://github.com/aws/amazon-q-developer-cli\r\n\r\nMIT License\r\n\r\nCopyright (c) 2024 Amazon.com, Inc. or its affiliates.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\natom/language-clojure 0.22.8 - MIT\r\nhttps://github.com/atom/language-clojure\r\n\r\nCopyright (c) 2014 GitHub Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\r\nThis package was derived from a TextMate bundle located at\r\nhttps://github.com/mmcgrana/textmate-clojure and distributed under the\r\nfollowing license, located in `LICENSE.md`:\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2010- Mark McGranaghan\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\natom/language-coffee-script 0.49.3 - MIT\r\nhttps://github.com/atom/language-coffee-script\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 GitHub Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\r\nThis package was derived from a TextMate bundle located at\r\nhttps://github.com/jashkenas/coffee-script-tmbundle and distributed under the\r\nfollowing license, located in `LICENSE`:\r\n\r\nCopyright (c) 2009-2014 Jeremy Ashkenas\r\n\r\nPermission is hereby granted, free of charge, to any person\r\nobtaining a copy of this software and associated documentation\r\nfiles (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use,\r\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the\r\nSoftware is furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\nOTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\natom/language-sass 0.61.4 - MIT\r\nhttps://github.com/atom/language-sass\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 GitHub Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\r\nThis package was derived from a TextMate bundle located at\r\nhttps://github.com/alexsancho/Sass.tmbundle and distributed under the following\r\nlicense, located in `LICENSE.md`:\r\n\r\nCopyright (c) 2012 Alex Sancho, http://alexsancho.name/\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\natom/language-xml 0.35.2 - MIT\r\nhttps://github.com/atom/language-xml\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 GitHub Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\r\nThis package was derived from a TextMate bundle located at\r\nhttps://github.com/textmate/xml.tmbundle and distributed under the following\r\nlicense, located in `README.mdown`:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nautocomplete 2.684.0 - MIT\r\nhttps://github.com/withfig/autocomplete\r\n\r\nMIT License\r\n\r\nCopyright (c) 2021 Hercules Labs Inc. (Fig)\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncacheable-request 7.0.4 - MIT\r\n\r\n\r\nCopyright (c) cacheable-request authors\r\n\r\nMIT License\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to\r\ndeal in the Software without restriction, including without limitation the\r\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\r\nsell copies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nColorsublime-Themes 0.1.0\r\nhttps://github.com/Colorsublime/Colorsublime-Themes\r\n\r\nCopyright (c) 2015 Colorsublime.com\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndaaain/Handlebars 1.8.0 - MIT\r\nhttps://github.com/daaain/Handlebars\r\n\r\n-- Credits\r\n\r\nAdapted from the great sublime-text-handlebars package by Nicholas Westlake.\r\n\r\nThanks a lot to all the generous contributors (in alphabetical order): @bittersweetryan, @bradcliffe, @calumbrodie, @duncanbeevers, @hlvnst, @jonschlinkert, @Krutius, @samselikoff, @utkarshkukreti, @zeppelin\r\n\r\n-- License\r\n\r\n(The MIT License)\r\n\r\nCopyright (c) daaain/Handlebars project authors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndart-lang/dart-syntax-highlight 0.0.0 - BSD\r\nhttps://github.com/dart-lang/dart-syntax-highlight\r\n\r\nCopyright 2020, the Dart project authors.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n    * Redistributions of source code must retain the above copyright\r\n    notice, this list of conditions and the following disclaimer.\r\n    * Redistributions in binary form must reproduce the above\r\n    copyright notice, this list of conditions and the following\r\n    disclaimer in the documentation and/or other materials provided\r\n    with the distribution.\r\n    * Neither the name of Google LLC nor the names of its\r\n    contributors may be used to endorse or promote products derived\r\n    from this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndavidrios/pug-tmbundle 0.0.0 - MIT\r\nhttps://github.com/davidrios/pug-tmbundle\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2016 David Rios\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndefinitelytyped  - MIT\r\nhttps://github.com/DefinitelyTyped/DefinitelyTyped\r\n\r\nThis project is licensed under the MIT license.\r\nCopyrights are respective of each contributor listed at the beginning of each definition file.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nDocument Object Model 4.0.0 - W3C License\r\nhttps://www.w3.org/DOM/\r\n\r\nW3C License\r\nThis work is being provided by the copyright holders under the following license.\r\nBy obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.\r\nPermission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following\r\non ALL copies of the work or portions thereof, including modifications:\r\n* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.\r\n* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.\r\n* Notice of any changes or modifications, through a copyright statement on the new code or document such as \"This software or document includes material copied from or derived\r\nfrom Document Object Model. Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang).\"\r\nDisclaimers\r\nTHIS WORK IS PROVIDED \"AS IS\r\n AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR\r\nFITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.\r\nCOPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.\r\nThe name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission.\r\nTitle to copyright in this work will at all times remain with copyright holders.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndompurify 3.1.7 - Apache 2.0\r\nhttps://github.com/cure53/DOMPurify\r\n\r\nDOMPurify\r\nCopyright 2025 Dr.-Ing. Mario Heiderich, Cure53\r\n\r\nDOMPurify is free software; you can redistribute it and/or modify it under the\r\nterms of either:\r\n\r\na) the Apache License Version 2.0, or\r\nb) the Mozilla Public License Version 2.0\r\n\r\n-----------------------------------------------------------------------------\r\n\r\n                                 Apache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n\r\n-----------------------------------------------------------------------------\r\nMozilla Public License, version 2.0\r\n\r\n1. Definitions\r\n\r\n1.1. \"Contributor\"\r\n\r\n     means each individual or legal entity that creates, contributes to the\r\n     creation of, or owns Covered Software.\r\n\r\n1.2. \"Contributor Version\"\r\n\r\n     means the combination of the Contributions of others (if any) used by a\r\n     Contributor and that particular Contributor’s Contribution.\r\n\r\n1.3. \"Contribution\"\r\n\r\n     means Covered Software of a particular Contributor.\r\n\r\n1.4. \"Covered Software\"\r\n\r\n     means Source Code Form to which the initial Contributor has attached the\r\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\r\n     Modifications of such Source Code Form, in each case including portions\r\n     thereof.\r\n\r\n1.5. \"Incompatible With Secondary Licenses\"\r\n     means\r\n\r\n     a. that the initial Contributor has attached the notice described in\r\n        Exhibit B to the Covered Software; or\r\n\r\n     b. that the Covered Software was made available under the terms of version\r\n        1.1 or earlier of the License, but not also under the terms of a\r\n        Secondary License.\r\n\r\n1.6. \"Executable Form\"\r\n\r\n     means any form of the work other than Source Code Form.\r\n\r\n1.7. \"Larger Work\"\r\n\r\n     means a work that combines Covered Software with other material, in a separate\r\n     file or files, that is not Covered Software.\r\n\r\n1.8. \"License\"\r\n\r\n     means this document.\r\n\r\n1.9. \"Licensable\"\r\n\r\n     means having the right to grant, to the maximum extent possible, whether at the\r\n     time of the initial grant or subsequently, any and all of the rights conveyed by\r\n     this License.\r\n\r\n1.10. \"Modifications\"\r\n\r\n     means any of the following:\r\n\r\n     a. any file in Source Code Form that results from an addition to, deletion\r\n        from, or modification of the contents of Covered Software; or\r\n\r\n     b. any new file in Source Code Form that contains any Covered Software.\r\n\r\n1.11. \"Patent Claims\" of a Contributor\r\n\r\n      means any patent claim(s), including without limitation, method, process,\r\n      and apparatus claims, in any patent Licensable by such Contributor that\r\n      would be infringed, but for the grant of the License, by the making,\r\n      using, selling, offering for sale, having made, import, or transfer of\r\n      either its Contributions or its Contributor Version.\r\n\r\n1.12. \"Secondary License\"\r\n\r\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\r\n      General Public License, Version 2.1, the GNU Affero General Public\r\n      License, Version 3.0, or any later versions of those licenses.\r\n\r\n1.13. \"Source Code Form\"\r\n\r\n      means the form of the work preferred for making modifications.\r\n\r\n1.14. \"You\" (or \"Your\")\r\n\r\n      means an individual or a legal entity exercising rights under this\r\n      License. For legal entities, \"You\" includes any entity that controls, is\r\n      controlled by, or is under common control with You. For purposes of this\r\n      definition, \"control\" means (a) the power, direct or indirect, to cause\r\n      the direction or management of such entity, whether by contract or\r\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\r\n      outstanding shares or beneficial ownership of such entity.\r\n\r\n\r\n2. License Grants and Conditions\r\n\r\n2.1. Grants\r\n\r\n     Each Contributor hereby grants You a world-wide, royalty-free,\r\n     non-exclusive license:\r\n\r\n     a. under intellectual property rights (other than patent or trademark)\r\n        Licensable by such Contributor to use, reproduce, make available,\r\n        modify, display, perform, distribute, and otherwise exploit its\r\n        Contributions, either on an unmodified basis, with Modifications, or as\r\n        part of a Larger Work; and\r\n\r\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\r\n        sale, have made, import, and otherwise transfer either its Contributions\r\n        or its Contributor Version.\r\n\r\n2.2. Effective Date\r\n\r\n     The licenses granted in Section 2.1 with respect to any Contribution become\r\n     effective for each Contribution on the date the Contributor first distributes\r\n     such Contribution.\r\n\r\n2.3. Limitations on Grant Scope\r\n\r\n     The licenses granted in this Section 2 are the only rights granted under this\r\n     License. No additional rights or licenses will be implied from the distribution\r\n     or licensing of Covered Software under this License. Notwithstanding Section\r\n     2.1(b) above, no patent license is granted by a Contributor:\r\n\r\n     a. for any code that a Contributor has removed from Covered Software; or\r\n\r\n     b. for infringements caused by: (i) Your and any other third party’s\r\n        modifications of Covered Software, or (ii) the combination of its\r\n        Contributions with other software (except as part of its Contributor\r\n        Version); or\r\n\r\n     c. under Patent Claims infringed by Covered Software in the absence of its\r\n        Contributions.\r\n\r\n     This License does not grant any rights in the trademarks, service marks, or\r\n     logos of any Contributor (except as may be necessary to comply with the\r\n     notice requirements in Section 3.4).\r\n\r\n2.4. Subsequent Licenses\r\n\r\n     No Contributor makes additional grants as a result of Your choice to\r\n     distribute the Covered Software under a subsequent version of this License\r\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\r\n     under the terms of Section 3.3).\r\n\r\n2.5. Representation\r\n\r\n     Each Contributor represents that the Contributor believes its Contributions\r\n     are its original creation(s) or it has sufficient rights to grant the\r\n     rights to its Contributions conveyed by this License.\r\n\r\n2.6. Fair Use\r\n\r\n     This License is not intended to limit any rights You have under applicable\r\n     copyright doctrines of fair use, fair dealing, or other equivalents.\r\n\r\n2.7. Conditions\r\n\r\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\r\n     Section 2.1.\r\n\r\n\r\n3. Responsibilities\r\n\r\n3.1. Distribution of Source Form\r\n\r\n     All distribution of Covered Software in Source Code Form, including any\r\n     Modifications that You create or to which You contribute, must be under the\r\n     terms of this License. You must inform recipients that the Source Code Form\r\n     of the Covered Software is governed by the terms of this License, and how\r\n     they can obtain a copy of this License. You may not attempt to alter or\r\n     restrict the recipients’ rights in the Source Code Form.\r\n\r\n3.2. Distribution of Executable Form\r\n\r\n     If You distribute Covered Software in Executable Form then:\r\n\r\n     a. such Covered Software must also be made available in Source Code Form,\r\n        as described in Section 3.1, and You must inform recipients of the\r\n        Executable Form how they can obtain a copy of such Source Code Form by\r\n        reasonable means in a timely manner, at a charge no more than the cost\r\n        of distribution to the recipient; and\r\n\r\n     b. You may distribute such Executable Form under the terms of this License,\r\n        or sublicense it under different terms, provided that the license for\r\n        the Executable Form does not attempt to limit or alter the recipients’\r\n        rights in the Source Code Form under this License.\r\n\r\n3.3. Distribution of a Larger Work\r\n\r\n     You may create and distribute a Larger Work under terms of Your choice,\r\n     provided that You also comply with the requirements of this License for the\r\n     Covered Software. If the Larger Work is a combination of Covered Software\r\n     with a work governed by one or more Secondary Licenses, and the Covered\r\n     Software is not Incompatible With Secondary Licenses, this License permits\r\n     You to additionally distribute such Covered Software under the terms of\r\n     such Secondary License(s), so that the recipient of the Larger Work may, at\r\n     their option, further distribute the Covered Software under the terms of\r\n     either this License or such Secondary License(s).\r\n\r\n3.4. Notices\r\n\r\n     You may not remove or alter the substance of any license notices (including\r\n     copyright notices, patent notices, disclaimers of warranty, or limitations\r\n     of liability) contained within the Source Code Form of the Covered\r\n     Software, except that You may alter any license notices to the extent\r\n     required to remedy known factual inaccuracies.\r\n\r\n3.5. Application of Additional Terms\r\n\r\n     You may choose to offer, and to charge a fee for, warranty, support,\r\n     indemnity or liability obligations to one or more recipients of Covered\r\n     Software. However, You may do so only on Your own behalf, and not on behalf\r\n     of any Contributor. You must make it absolutely clear that any such\r\n     warranty, support, indemnity, or liability obligation is offered by You\r\n     alone, and You hereby agree to indemnify every Contributor for any\r\n     liability incurred by such Contributor as a result of warranty, support,\r\n     indemnity or liability terms You offer. You may include additional\r\n     disclaimers of warranty and limitations of liability specific to any\r\n     jurisdiction.\r\n\r\n4. Inability to Comply Due to Statute or Regulation\r\n\r\n   If it is impossible for You to comply with any of the terms of this License\r\n   with respect to some or all of the Covered Software due to statute, judicial\r\n   order, or regulation then You must: (a) comply with the terms of this License\r\n   to the maximum extent possible; and (b) describe the limitations and the code\r\n   they affect. Such description must be placed in a text file included with all\r\n   distributions of the Covered Software under this License. Except to the\r\n   extent prohibited by statute or regulation, such description must be\r\n   sufficiently detailed for a recipient of ordinary skill to be able to\r\n   understand it.\r\n\r\n5. Termination\r\n\r\n5.1. The rights granted under this License will terminate automatically if You\r\n     fail to comply with any of its terms. However, if You become compliant,\r\n     then the rights granted under this License from a particular Contributor\r\n     are reinstated (a) provisionally, unless and until such Contributor\r\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\r\n     if such Contributor fails to notify You of the non-compliance by some\r\n     reasonable means prior to 60 days after You have come back into compliance.\r\n     Moreover, Your grants from a particular Contributor are reinstated on an\r\n     ongoing basis if such Contributor notifies You of the non-compliance by\r\n     some reasonable means, this is the first time You have received notice of\r\n     non-compliance with this License from such Contributor, and You become\r\n     compliant prior to 30 days after Your receipt of the notice.\r\n\r\n5.2. If You initiate litigation against any entity by asserting a patent\r\n     infringement claim (excluding declaratory judgment actions, counter-claims,\r\n     and cross-claims) alleging that a Contributor Version directly or\r\n     indirectly infringes any patent, then the rights granted to You by any and\r\n     all Contributors for the Covered Software under Section 2.1 of this License\r\n     shall terminate.\r\n\r\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\r\n     license agreements (excluding distributors and resellers) which have been\r\n     validly granted by You or Your distributors under this License prior to\r\n     termination shall survive termination.\r\n\r\n6. Disclaimer of Warranty\r\n\r\n   Covered Software is provided under this License on an \"as is\" basis, without\r\n   warranty of any kind, either expressed, implied, or statutory, including,\r\n   without limitation, warranties that the Covered Software is free of defects,\r\n   merchantable, fit for a particular purpose or non-infringing. The entire\r\n   risk as to the quality and performance of the Covered Software is with You.\r\n   Should any Covered Software prove defective in any respect, You (not any\r\n   Contributor) assume the cost of any necessary servicing, repair, or\r\n   correction. This disclaimer of warranty constitutes an essential part of this\r\n   License. No use of  any Covered Software is authorized under this License\r\n   except under this disclaimer.\r\n\r\n7. Limitation of Liability\r\n\r\n   Under no circumstances and under no legal theory, whether tort (including\r\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\r\n   distributes Covered Software as permitted above, be liable to You for any\r\n   direct, indirect, special, incidental, or consequential damages of any\r\n   character including, without limitation, damages for lost profits, loss of\r\n   goodwill, work stoppage, computer failure or malfunction, or any and all\r\n   other commercial damages or losses, even if such party shall have been\r\n   informed of the possibility of such damages. This limitation of liability\r\n   shall not apply to liability for death or personal injury resulting from such\r\n   party’s negligence to the extent applicable law prohibits such limitation.\r\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\r\n   consequential damages, so this exclusion and limitation may not apply to You.\r\n\r\n8. Litigation\r\n\r\n   Any litigation relating to this License may be brought only in the courts of\r\n   a jurisdiction where the defendant maintains its principal place of business\r\n   and such litigation shall be governed by laws of that jurisdiction, without\r\n   reference to its conflict-of-law provisions. Nothing in this Section shall\r\n   prevent a party’s ability to bring cross-claims or counter-claims.\r\n\r\n9. Miscellaneous\r\n\r\n   This License represents the complete agreement concerning the subject matter\r\n   hereof. If any provision of this License is held to be unenforceable, such\r\n   provision shall be reformed only to the extent necessary to make it\r\n   enforceable. Any law or regulation which provides that the language of a\r\n   contract shall be construed against the drafter shall not be used to construe\r\n   this License against a Contributor.\r\n\r\n\r\n10. Versions of the License\r\n\r\n10.1. New Versions\r\n\r\n      Mozilla Foundation is the license steward. Except as provided in Section\r\n      10.3, no one other than the license steward has the right to modify or\r\n      publish new versions of this License. Each version will be given a\r\n      distinguishing version number.\r\n\r\n10.2. Effect of New Versions\r\n\r\n      You may distribute the Covered Software under the terms of the version of\r\n      the License under which You originally received the Covered Software, or\r\n      under the terms of any subsequent version published by the license\r\n      steward.\r\n\r\n10.3. Modified Versions\r\n\r\n      If you create software not governed by this License, and you want to\r\n      create a new license for such software, you may create and use a modified\r\n      version of this License if you rename the license and remove any\r\n      references to the name of the license steward (except to note that such\r\n      modified license differs from this License).\r\n\r\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\r\n      If You choose to distribute Source Code Form that is Incompatible With\r\n      Secondary Licenses under the terms of this version of the License, the\r\n      notice described in Exhibit B of this License must be attached.\r\n\r\nExhibit A - Source Code Form License Notice\r\n\r\n      This Source Code Form is subject to the\r\n      terms of the Mozilla Public License, v.\r\n      2.0. If a copy of the MPL was not\r\n      distributed with this file, You can\r\n      obtain one at\r\n      http://mozilla.org/MPL/2.0/.\r\n\r\nIf it is not possible or desirable to put the notice in a particular file, then\r\nYou may include the notice in a location (such as a LICENSE file in a relevant\r\ndirectory) where a recipient would be likely to look for such a notice.\r\n\r\nYou may add additional accurate notices of copyright ownership.\r\n\r\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\r\n\r\n      This Source Code Form is \"Incompatible\r\n      With Secondary Licenses\", as defined by\r\n      the Mozilla Public License, v. 2.0.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndotnet/csharp-tmLanguage 0.1.0 - MIT\r\nhttps://github.com/dotnet/csharp-tmLanguage\r\n\r\nMIT License\r\n\r\nCopyright (c) 2016 .NET Foundation\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndotnet/razor 1.0.0 - MIT\r\nhttps://github.com/dotnet/razor\r\n\r\nMIT License\r\n\r\nCopyright (c) .NET Foundation and Contributors\r\nAll Rights Reserved\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nexpand-abbreviation 0.5.8 - MIT\r\nhttps://github.com/emmetio/expand-abbreviation\r\n\r\nMIT License\r\n\r\nCopyright (c) 2017 Emmet.io\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfadeevab/make.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/fadeevab/make.tmbundle\r\n\r\nCopyright (c) textmate-make.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfish-shell 3.7.1\r\nhttps://github.com/fish-shell/fish-shell\r\n\r\nFish is a smart and user-friendly command line shell.\r\n\r\nCopyright (C) 2005-2009 Axel Liljencrantz\r\nCopyright (C) 2009- fish-shell contributors\r\n\r\nfish is free software.\r\n\r\nMost of fish is licensed under the GNU General Public License version 2, and\r\nyou can redistribute it and/or modify it under the terms of the GNU GPL as\r\npublished by the Free Software Foundation.\r\n\r\nfish also includes software licensed under the Python Software Foundation License version 2, the MIT\r\nlicense, and the GNU Library General Public License version 2.\r\n\r\nFull licensing information is contained in doc_src/license.rst.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT\r\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r\nFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r\nmore details.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ngo-syntax 0.7.9 - MIT\r\nhttps://github.com/worlpaker/go-syntax\r\n\r\nMIT License\r\n\r\nCopyright (c) 2023 Furkan Ozalp\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nHTML 5.1 W3C Working Draft 08 October 2015 - W3C Document License\r\nhttp://www.w3.org/TR/2015/WD-html51-20151008/\r\n\r\nCopyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang). This software or document includes material copied\r\nfrom or derived from HTML 5.1 W3C Working Draft (http://www.w3.org/TR/2015/WD-html51-20151008/.)\r\n\r\nTHIS DOCUMENT IS PROVIDED \"AS IS,\" AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT\r\nNOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF\r\nTHE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY\r\nPATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.\r\n\r\nCOPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE\r\nDOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.\r\n\r\nThe name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to this document or its contents\r\nwithout specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nIonic documentation 1.2.4 - Apache-2.0\r\nhttps://github.com/ionic-team/ionic-site\r\n\r\nCopyright Drifty Co. http://drifty.com/.\r\n\r\nApache License\r\n\r\nVersion 2.0, January 2004\r\n\r\nhttp://www.apache.org/licenses/\r\n\r\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n1. Definitions.\r\n\r\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\r\n\r\n\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\r\n\r\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\r\n\r\n\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\r\n\r\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\r\n\r\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\r\n\r\n\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\r\n\r\n2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\r\n\r\n3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\r\n\r\n4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\r\n\r\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\r\n\r\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\r\n\r\nYou must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\r\n\r\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\r\n\r\n5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\r\n\r\n6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\r\n\r\n8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\r\n\r\n9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\r\n\r\nEND OF TERMS AND CONDITIONS\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nionide/ionide-fsgrammar 0.0.0 - MIT\r\nhttps://github.com/ionide/ionide-fsgrammar\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Krzysztof Cieslak\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nJames-Yu/LaTeX-Workshop 8.19.1 - MIT\r\nhttps://github.com/James-Yu/LaTeX-Workshop\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2016 James Yu\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njeff-hykin/better-c-syntax 1.13.2 - MIT\r\nhttps://github.com/jeff-hykin/better-c-syntax\r\n\r\nMIT License\r\n\r\nCopyright (c) 2019 Jeff Hykin\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njeff-hykin/better-cpp-syntax 1.17.4 - MIT\r\nhttps://github.com/jeff-hykin/better-cpp-syntax\r\n\r\nMIT License,,Copyright (c) 2019 Jeff Hykin,,Permission is hereby granted, free of charge, to any person obtaining a copy,of this software and associated documentation files (the \"Software\"), to deal,in the Software without restriction, including without limitation the rights,to use, copy, modify, merge, publish, distribute, sublicense, and/or sell,copies of the Software, and to permit persons to whom the Software is,furnished to do so, subject to the following conditions:,,The above copyright notice and this permission notice shall be included in all,copies or substantial portions of the Software.,,THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR,IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE,AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER,LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE,SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njeff-hykin/better-objc-syntax 0.2.0 - MIT\r\nhttps://github.com/jeff-hykin/better-objc-syntax\r\n\r\nMIT License\r\n\r\nCopyright (c) 2019 Jeff Hykin\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njeff-hykin/better-objcpp-syntax 0.1.0 - MIT\r\nhttps://github.com/jeff-hykin/better-objcpp-syntax\r\n\r\nMIT License\r\n\r\nCopyright (c) 2019 Jeff Hykin\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njeff-hykin/better-shell-syntax 1.8.7 - MIT\r\nhttps://github.com/jeff-hykin/better-shell-syntax\r\n\r\nMIT License\r\n\r\nCopyright (c) 2019 Jeff Hykin\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njeff-hykin/better-snippet-syntax 1.0.2 - MIT\r\nhttps://github.com/jeff-hykin/better-snippet-syntax\r\n\r\nMIT License\r\n\r\nCopyright (c) 2019 Jeff Hykin\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njlelong/vscode-latex-basics 1.9.0 - MIT\r\nhttps://github.com/jlelong/vscode-latex-basics\r\n\r\nCopyright (c) vscode-latex-basics authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the MIT License\r\n\r\n\r\nThe file syntaxes/LaTeX.tmLanguage.json is based on https://github.com/textmate/latex.tmbundle/blob/master/Syntaxes/LaTeX.plist\r\nbut has been largely modified. The original file falls under the following license\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nThe file syntaxes/markdown-latex-combined.tmLanguage.json is generated from the Markdown grammar\r\nincluded in VSCode and falls under the license described in markdown-latex-combined-license.txt.\r\n\r\nThe file syntaxes/cpp-grammar-bailout.tmLanguage.json is generated from https://github.com/jeff-hykin/better-cpp-syntax\r\nand falls under the license described in cpp-bailout-license.txt.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njs-beautify 1.6.8 - MIT\r\nhttps://github.com/beautify-web/js-beautify\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njtbandes/swift-tmlanguage  - MIT\r\nhttps://github.com/jtbandes/swift-tmlanguage\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright 2023 Jacob Bandes-Storch\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nJuliaEditorSupport/atom-language-julia 0.23.0 - MIT\r\nhttps://github.com/JuliaEditorSupport/atom-language-julia\r\n\r\nThe atom-language-julia package is licensed under the MIT \"Expat\" License:\r\n\r\n> Copyright (c) 2015\r\n>\r\n> Permission is hereby granted, free of charge, to any person obtaining\r\n> a copy of this software and associated documentation files (the\r\n> \"Software\"), to deal in the Software without restriction, including\r\n> without limitation the rights to use, copy, modify, merge, publish,\r\n> distribute, sublicense, and/or sell copies of the Software, and to\r\n> permit persons to whom the Software is furnished to do so, subject to\r\n> the following conditions:\r\n>\r\n> The above copyright notice and this permission notice shall be\r\n> included in all copies or substantial portions of the Software.\r\n>\r\n> THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nJxck/assert 1.0.0 - MIT\r\nhttps://github.com/Jxck/assert\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2011 Jxck\r\n\r\nOriginally from node.js (http://nodejs.org)\r\nCopyright Joyent, Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlanguage-docker 0.0.0 - Apache-2.0\r\nhttps://github.com/moby/moby\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        https://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   Copyright 2013-2018 Docker, Inc.\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       https://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlanguage-less 0.6.1 - MIT\r\nhttps://github.com/radium-v/Better-Less\r\n\r\nMIT License\r\n\r\nCopyright (c) 2017 John Kreitlow\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlanguage-php 0.49.0 - MIT\r\nhttps://github.com/KapitanOczywisty/language-php\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 GitHub Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\r\nThis package was derived from a TextMate bundle located at\r\nhttps://github.com/textmate/php.tmbundle and distributed under the following\r\nlicense, located in `README.mdown`:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nMagicStack/MagicPython 1.1.1 - MIT\r\nhttps://github.com/MagicStack/MagicPython\r\n\r\nThe MIT License\r\n\r\nCopyright (c) 2015-present MagicStack Inc.  http://magic.io\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmarked 14.0.0 - MIT\r\nhttps://github.com/markedjs/marked\r\n\r\ninformation\r\n\r\n## Contribution License Agreement\r\n\r\nIf you contribute code to this project, you are implicitly allowing your code\r\nto be distributed under the MIT license. You are also implicitly verifying that\r\nall code is your original work. `</legalese>`\r\n\r\n## Marked\r\n\r\nCopyright (c) 2018+, MarkedJS (https://github.com/markedjs/)\r\nCopyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n\r\n## Markdown\r\n\r\nCopyright © 2004, John Gruber\r\nhttp://daringfireball.net/\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\r\n* Neither the name \"Markdown\" nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\r\n\r\nThis software is provided by the copyright holders and contributors \"as is\" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmicrosoft/TypeScript-TmLanguage 0.0.1 - MIT\r\nhttps://github.com/microsoft/TypeScript-TmLanguage\r\n\r\nCopyright (c) Microsoft Corporation\r\nAll rights reserved.\r\n\r\nMIT License\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmicrosoft/vscode-css 0.0.0 - MIT License\r\nhttps://github.com/microsoft/vscode-css\r\n\r\nMIT License\r\n\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n--------------------------------------------------------------------\r\n\r\nThis package was derived from a TextMate bundle located at\r\nhttps://github.com/textmate/css.tmbundle and distributed under the following\r\nlicense, located in `README.mdown`:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmicrosoft/vscode-JSON.tmLanguage 0.0.0 - MIT\r\nhttps://github.com/microsoft/vscode-JSON.tmLanguage\r\n\r\nvscode-JSON.tmLanguage\r\n\r\nCopyright (c) Microsoft Corporation\r\n\r\nAll rights reserved.\r\n\r\nMIT License\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\r\ndocumentation files (the \"\"Software\"\"), to deal in the Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,\r\nand to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\r\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmicrosoft/vscode-markdown-tm-grammar 1.0.0 - MIT\r\nhttps://github.com/microsoft/vscode-markdown-tm-grammar\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) Microsoft 2018\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmicrosoft/vscode-mssql 1.29.0 - MIT\r\nhttps://github.com/microsoft/vscode-mssql\r\n\r\n------------------------------------------ START OF LICENSE -----------------------------------------\r\nvscode-mssql\r\nCopyright (c) Microsoft Corporation\r\nAll rights reserved.\r\nMIT License\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"\"Software\"\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\nCopyright (c) 2016 Microsoft\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\nTHE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n----------------------------------------------- END OF LICENSE -----------------------------------------\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmmims/language-batchfile 0.7.6 - MIT\r\nhttps://github.com/mmims/language-batchfile\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2021 Michael Mims\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nNVIDIA/cuda-cpp-grammar 0.0.0 - MIT\r\nhttps://github.com/NVIDIA/cuda-cpp-grammar\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright 2021 NVIDIA Corporation\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nPowerShell/EditorSyntax 1.0.0 - MIT\r\nhttps://github.com/PowerShell/EditorSyntax\r\n\r\nCopyright (c) Microsoft Corporation\r\n\r\nAll rights reserved.\r\n\r\nMIT License\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nRedCMD/YAML-Syntax-Highlighter 1.3.2 - MIT\r\nhttps://github.com/RedCMD/YAML-Syntax-Highlighter\r\n\r\nMIT License\r\n\r\nCopyright 2024 RedCMD\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nredhat-developer/vscode-java 1.26.0 - MIT\r\nhttps://github.com/redhat-developer/vscode-java\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 GitHub Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n--------------------------------------------------------------------\r\n\r\nThis package was derived from a TextMate bundle located at\r\nhttps://github.com/textmate/java.tmbundle and distributed under the following\r\nlicense, located in `README.mdown`:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nREditorSupport/vscode-R 2.8.4 - MIT\r\nhttps://github.com/REditorSupport/vscode-R\r\n\r\nMIT License\r\n\r\nCopyright (c) 2022 REditorSupport\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrust-syntax 0.6.1 - MIT\r\nhttps://github.com/dustypomerleau/rust-syntax\r\n\r\nMIT License\r\n\r\nCopyright (c) 2020 Dustin Pomerleau\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsemver 5.5.0 - The ISC License\r\nhttps://github.com/npm/node-semver\r\n\r\nThe ISC License\r\n\r\nCopyright (c) Isaac Z. Schlueter and Contributors\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted, provided that the above\r\ncopyright notice and this permission notice appear in all copies.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\r\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nseti-ui 0.1.0\r\nhttps://github.com/jesseweed/seti-ui\r\n\r\nCopyright (c) 2014 Jesse Weed\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nshaders-tmLanguage 0.1.0 - MIT\r\nhttps://github.com/tgjones/shaders-tmLanguage\r\n\r\nMIT License\r\n\r\nCopyright (c) 2017 Tim Jones\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nShopify/ruby-lsp 0.0.0 - MIT License\r\nhttps://github.com/Shopify/ruby-lsp\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2022-present, Shopify Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n\r\n================================================================================\r\nThe following files and related configuration in package.json are based on a\r\nsequence of adaptions: grammars/ruby.cson.json, grammars/erb.cson.json,\r\nlanguages/erb.json.\r\n\r\nCopyright (c) 2016 Peng Lv\r\nCopyright (c) 2017-2019 Stafford Brunk\r\nhttps://github.com/rubyide/vscode-ruby\r\n\r\n    Released under the MIT license\r\n    https://github.com/rubyide/vscode-ruby/blob/main/LICENSE.txt\r\n\r\nCopyright (c) 2014 GitHub Inc.\r\nhttps://github.com/atom/language-ruby\r\n\r\n    Released under the MIT license\r\n    https://github.com/atom/language-ruby/blob/master/LICENSE.md\r\n\r\nhttps://github.com/textmate/ruby.tmbundle\r\n    https://github.com/textmate/ruby.tmbundle#license\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsumneko/lua.tmbundle 1.0.0 - TextMate Bundle License\r\nhttps://github.com/sumneko/lua.tmbundle\r\n\r\nCopyright (c) sumneko-lua.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/asp.vb.net.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/asp.vb.net.tmbundle\r\n\r\nCopyright (c) textmate-asp.vb.net.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this folder fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/c.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/c.tmbundle\r\n\r\nCopyright (c) textmate-c.tmbundle authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/diff.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/diff.tmbundle\r\n\r\nCopyright (c) textmate-diff.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/git.tmbundle 0.0.0 - MIT\r\nhttps://github.com/textmate/git.tmbundle\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2008 Tim Harper\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\"\r\nSoftware\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/groovy.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/groovy.tmbundle\r\n\r\nCopyright (c) textmate-groovy.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/html.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/html.tmbundle\r\n\r\nCopyright (c) textmate-html.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/ini.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/ini.tmbundle\r\n\r\nCopyright (c) textmate-ini.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this folder fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/javascript.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/javascript.tmbundle\r\n\r\nCopyright (c) textmate-javascript.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/markdown.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/markdown.tmbundle\r\n\r\nCopyright (c) markdown.tmbundle authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntextmate/perl.tmbundle 0.0.0 - TextMate Bundle License\r\nhttps://github.com/textmate/perl.tmbundle\r\n\r\nCopyright (c) textmate-perl.tmbundle project authors\r\n\r\nIf not otherwise specified (see below), files in this repository fall under the following license:\r\n\r\nPermission to copy, use, modify, sell and distribute this\r\nsoftware is granted. This software is provided \"as is\" without\r\nexpress or implied warranty, and with no claim as to its\r\nsuitability for any purpose.\r\n\r\nAn exception is made for files in readable text which contain their own license information,\r\nor files where an accompanying file exists (in the same directory) with a \"-license\" suffix added\r\nto the base-name name of the original file, and an extension of txt, html, or similar. For example\r\n\"tidy\" is accompanied by \"tidy-license.txt\".\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntrond-snekvik/vscode-rst 1.5.3 - MIT\r\nhttps://github.com/trond-snekvik/vscode-rst\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright 2021 Trond Snekvik\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nTypeScript-TmLanguage 0.1.8 - MIT\r\nTypeScript-TmLanguage 1.0.0 - MIT\r\nhttps://github.com/microsoft/TypeScript-TmLanguage\r\n\r\nCopyright (c) Microsoft Corporation\r\nAll rights reserved.\r\n\r\nMIT License\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nUnicode 12.0.0 - UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE\r\nhttps://home.unicode.org/\r\n\r\nUnicode Data Files include all data files under the directories\r\nhttps://www.unicode.org/Public/, https://www.unicode.org/reports/,\r\nhttps://cldr.unicode.org, https://github.com/unicode-org/icu, and\r\nhttps://www.unicode.org/utility/trac/browser/.\r\n\r\nUnicode Data Files do not include PDF online code charts under the\r\ndirectory https://www.unicode.org/Public/.\r\n\r\nSoftware includes any source code published in the Unicode Standard\r\nor under the directories\r\nhttps://www.unicode.org/Public/, https://www.unicode.org/reports/,\r\nhttps://cldr.unicode.org, https://github.com/unicode-org/icu, and\r\nhttps://www.unicode.org/utility/trac/browser/.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement.\r\nBY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S\r\nDATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),\r\nYOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT.\r\nIF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE\r\nTHE DATA FILES OR SOFTWARE.\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright (c) 1991-2017 Unicode, Inc. All rights reserved.\r\nDistributed under the Terms of Use in http://www.unicode.org/copyright.html.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of the Unicode data files and any associated documentation\r\n(the \"Data Files\") or Unicode software and any associated documentation\r\n(the \"Software\") to deal in the Data Files or Software\r\nwithout restriction, including without limitation the rights to use,\r\ncopy, modify, merge, publish, distribute, and/or sell copies of\r\nthe Data Files or Software, and to permit persons to whom the Data Files\r\nor Software are furnished to do so, provided that either\r\n(a) this copyright and permission notice appear with all copies\r\nof the Data Files or Software, or\r\n(b) this copyright and permission notice appear in associated\r\nDocumentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\r\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\r\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\r\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\r\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\r\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder\r\nshall not be used in advertising or otherwise to promote the sale,\r\nuse or other dealings in these Data Files or Software without prior\r\nwritten authorization of the copyright holder.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nvscode-codicons 0.0.14 - MIT and Creative Commons Attribution 4.0\r\nhttps://github.com/microsoft/vscode-codicons\r\n\r\nAttribution 4.0 International\r\n\r\n=======================================================================\r\n\r\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\r\ndoes not provide legal services or legal advice. Distribution of\r\nCreative Commons public licenses does not create a lawyer-client or\r\nother relationship. Creative Commons makes its licenses and related\r\ninformation available on an \"as-is\" basis. Creative Commons gives no\r\nwarranties regarding its licenses, any material licensed under their\r\nterms and conditions, or any related information. Creative Commons\r\ndisclaims all liability for damages resulting from their use to the\r\nfullest extent possible.\r\n\r\nUsing Creative Commons Public Licenses\r\n\r\nCreative Commons public licenses provide a standard set of terms and\r\nconditions that creators and other rights holders may use to share\r\noriginal works of authorship and other material subject to copyright\r\nand certain other rights specified in the public license below. The\r\nfollowing considerations are for informational purposes only, are not\r\nexhaustive, and do not form part of our licenses.\r\n\r\n     Considerations for licensors: Our public licenses are\r\n     intended for use by those authorized to give the public\r\n     permission to use material in ways otherwise restricted by\r\n     copyright and certain other rights. Our licenses are\r\n     irrevocable. Licensors should read and understand the terms\r\n     and conditions of the license they choose before applying it.\r\n     Licensors should also secure all rights necessary before\r\n     applying our licenses so that the public can reuse the\r\n     material as expected. Licensors should clearly mark any\r\n     material not subject to the license. This includes other CC-\r\n     licensed material, or material used under an exception or\r\n     limitation to copyright. More considerations for licensors:\r\n\twiki.creativecommons.org/Considerations_for_licensors\r\n\r\n     Considerations for the public: By using one of our public\r\n     licenses, a licensor grants the public permission to use the\r\n     licensed material under specified terms and conditions. If\r\n     the licensor's permission is not necessary for any reason--for\r\n     example, because of any applicable exception or limitation to\r\n     copyright--then that use is not regulated by the license. Our\r\n     licenses grant only permissions under copyright and certain\r\n     other rights that a licensor has authority to grant. Use of\r\n     the licensed material may still be restricted for other\r\n     reasons, including because others have copyright or other\r\n     rights in the material. A licensor may make special requests,\r\n     such as asking that all changes be marked or described.\r\n     Although not required by our licenses, you are encouraged to\r\n     respect those requests where reasonable. More_considerations\r\n     for the public:\r\n\twiki.creativecommons.org/Considerations_for_licensees\r\n\r\n=======================================================================\r\n\r\nCreative Commons Attribution 4.0 International Public License\r\n\r\nBy exercising the Licensed Rights (defined below), You accept and agree\r\nto be bound by the terms and conditions of this Creative Commons\r\nAttribution 4.0 International Public License (\"Public License\"). To the\r\nextent this Public License may be interpreted as a contract, You are\r\ngranted the Licensed Rights in consideration of Your acceptance of\r\nthese terms and conditions, and the Licensor grants You such rights in\r\nconsideration of benefits the Licensor receives from making the\r\nLicensed Material available under these terms and conditions.\r\n\r\n\r\nSection 1 -- Definitions.\r\n\r\n  a. Adapted Material means material subject to Copyright and Similar\r\n     Rights that is derived from or based upon the Licensed Material\r\n     and in which the Licensed Material is translated, altered,\r\n     arranged, transformed, or otherwise modified in a manner requiring\r\n     permission under the Copyright and Similar Rights held by the\r\n     Licensor. For purposes of this Public License, where the Licensed\r\n     Material is a musical work, performance, or sound recording,\r\n     Adapted Material is always produced where the Licensed Material is\r\n     synched in timed relation with a moving image.\r\n\r\n  b. Adapter's License means the license You apply to Your Copyright\r\n     and Similar Rights in Your contributions to Adapted Material in\r\n     accordance with the terms and conditions of this Public License.\r\n\r\n  c. Copyright and Similar Rights means copyright and/or similar rights\r\n     closely related to copyright including, without limitation,\r\n     performance, broadcast, sound recording, and Sui Generis Database\r\n     Rights, without regard to how the rights are labeled or\r\n     categorized. For purposes of this Public License, the rights\r\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\r\n     Rights.\r\n\r\n  d. Effective Technological Measures means those measures that, in the\r\n     absence of proper authority, may not be circumvented under laws\r\n     fulfilling obligations under Article 11 of the WIPO Copyright\r\n     Treaty adopted on December 20, 1996, and/or similar international\r\n     agreements.\r\n\r\n  e. Exceptions and Limitations means fair use, fair dealing, and/or\r\n     any other exception or limitation to Copyright and Similar Rights\r\n     that applies to Your use of the Licensed Material.\r\n\r\n  f. Licensed Material means the artistic or literary work, database,\r\n     or other material to which the Licensor applied this Public\r\n     License.\r\n\r\n  g. Licensed Rights means the rights granted to You subject to the\r\n     terms and conditions of this Public License, which are limited to\r\n     all Copyright and Similar Rights that apply to Your use of the\r\n     Licensed Material and that the Licensor has authority to license.\r\n\r\n  h. Licensor means the individual(s) or entity(ies) granting rights\r\n     under this Public License.\r\n\r\n  i. Share means to provide material to the public by any means or\r\n     process that requires permission under the Licensed Rights, such\r\n     as reproduction, public display, public performance, distribution,\r\n     dissemination, communication, or importation, and to make material\r\n     available to the public including in ways that members of the\r\n     public may access the material from a place and at a time\r\n     individually chosen by them.\r\n\r\n  j. Sui Generis Database Rights means rights other than copyright\r\n     resulting from Directive 96/9/EC of the European Parliament and of\r\n     the Council of 11 March 1996 on the legal protection of databases,\r\n     as amended and/or succeeded, as well as other essentially\r\n     equivalent rights anywhere in the world.\r\n\r\n  k. You means the individual or entity exercising the Licensed Rights\r\n     under this Public License. Your has a corresponding meaning.\r\n\r\n\r\nSection 2 -- Scope.\r\n\r\n  a. License grant.\r\n\r\n       1. Subject to the terms and conditions of this Public License,\r\n          the Licensor hereby grants You a worldwide, royalty-free,\r\n          non-sublicensable, non-exclusive, irrevocable license to\r\n          exercise the Licensed Rights in the Licensed Material to:\r\n\r\n            a. reproduce and Share the Licensed Material, in whole or\r\n               in part; and\r\n\r\n            b. produce, reproduce, and Share Adapted Material.\r\n\r\n       2. Exceptions and Limitations. For the avoidance of doubt, where\r\n          Exceptions and Limitations apply to Your use, this Public\r\n          License does not apply, and You do not need to comply with\r\n          its terms and conditions.\r\n\r\n       3. Term. The term of this Public License is specified in Section\r\n          6(a).\r\n\r\n       4. Media and formats; technical modifications allowed. The\r\n          Licensor authorizes You to exercise the Licensed Rights in\r\n          all media and formats whether now known or hereafter created,\r\n          and to make technical modifications necessary to do so. The\r\n          Licensor waives and/or agrees not to assert any right or\r\n          authority to forbid You from making technical modifications\r\n          necessary to exercise the Licensed Rights, including\r\n          technical modifications necessary to circumvent Effective\r\n          Technological Measures. For purposes of this Public License,\r\n          simply making modifications authorized by this Section 2(a)\r\n          (4) never produces Adapted Material.\r\n\r\n       5. Downstream recipients.\r\n\r\n            a. Offer from the Licensor -- Licensed Material. Every\r\n               recipient of the Licensed Material automatically\r\n               receives an offer from the Licensor to exercise the\r\n               Licensed Rights under the terms and conditions of this\r\n               Public License.\r\n\r\n            b. No downstream restrictions. You may not offer or impose\r\n               any additional or different terms or conditions on, or\r\n               apply any Effective Technological Measures to, the\r\n               Licensed Material if doing so restricts exercise of the\r\n               Licensed Rights by any recipient of the Licensed\r\n               Material.\r\n\r\n       6. No endorsement. Nothing in this Public License constitutes or\r\n          may be construed as permission to assert or imply that You\r\n          are, or that Your use of the Licensed Material is, connected\r\n          with, or sponsored, endorsed, or granted official status by,\r\n          the Licensor or others designated to receive attribution as\r\n          provided in Section 3(a)(1)(A)(i).\r\n\r\n  b. Other rights.\r\n\r\n       1. Moral rights, such as the right of integrity, are not\r\n          licensed under this Public License, nor are publicity,\r\n          privacy, and/or other similar personality rights; however, to\r\n          the extent possible, the Licensor waives and/or agrees not to\r\n          assert any such rights held by the Licensor to the limited\r\n          extent necessary to allow You to exercise the Licensed\r\n          Rights, but not otherwise.\r\n\r\n       2. Patent and trademark rights are not licensed under this\r\n          Public License.\r\n\r\n       3. To the extent possible, the Licensor waives any right to\r\n          collect royalties from You for the exercise of the Licensed\r\n          Rights, whether directly or through a collecting society\r\n          under any voluntary or waivable statutory or compulsory\r\n          licensing scheme. In all other cases the Licensor expressly\r\n          reserves any right to collect such royalties.\r\n\r\n\r\nSection 3 -- License Conditions.\r\n\r\nYour exercise of the Licensed Rights is expressly made subject to the\r\nfollowing conditions.\r\n\r\n  a. Attribution.\r\n\r\n       1. If You Share the Licensed Material (including in modified\r\n          form), You must:\r\n\r\n            a. retain the following if it is supplied by the Licensor\r\n               with the Licensed Material:\r\n\r\n                 i. identification of the creator(s) of the Licensed\r\n                    Material and any others designated to receive\r\n                    attribution, in any reasonable manner requested by\r\n                    the Licensor (including by pseudonym if\r\n                    designated);\r\n\r\n                ii. a copyright notice;\r\n\r\n               iii. a notice that refers to this Public License;\r\n\r\n                iv. a notice that refers to the disclaimer of\r\n                    warranties;\r\n\r\n                 v. a URI or hyperlink to the Licensed Material to the\r\n                    extent reasonably practicable;\r\n\r\n            b. indicate if You modified the Licensed Material and\r\n               retain an indication of any previous modifications; and\r\n\r\n            c. indicate the Licensed Material is licensed under this\r\n               Public License, and include the text of, or the URI or\r\n               hyperlink to, this Public License.\r\n\r\n       2. You may satisfy the conditions in Section 3(a)(1) in any\r\n          reasonable manner based on the medium, means, and context in\r\n          which You Share the Licensed Material. For example, it may be\r\n          reasonable to satisfy the conditions by providing a URI or\r\n          hyperlink to a resource that includes the required\r\n          information.\r\n\r\n       3. If requested by the Licensor, You must remove any of the\r\n          information required by Section 3(a)(1)(A) to the extent\r\n          reasonably practicable.\r\n\r\n       4. If You Share Adapted Material You produce, the Adapter's\r\n          License You apply must not prevent recipients of the Adapted\r\n          Material from complying with this Public License.\r\n\r\n\r\nSection 4 -- Sui Generis Database Rights.\r\n\r\nWhere the Licensed Rights include Sui Generis Database Rights that\r\napply to Your use of the Licensed Material:\r\n\r\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\r\n     to extract, reuse, reproduce, and Share all or a substantial\r\n     portion of the contents of the database;\r\n\r\n  b. if You include all or a substantial portion of the database\r\n     contents in a database in which You have Sui Generis Database\r\n     Rights, then the database in which You have Sui Generis Database\r\n     Rights (but not its individual contents) is Adapted Material; and\r\n\r\n  c. You must comply with the conditions in Section 3(a) if You Share\r\n     all or a substantial portion of the contents of the database.\r\n\r\nFor the avoidance of doubt, this Section 4 supplements and does not\r\nreplace Your obligations under this Public License where the Licensed\r\nRights include other Copyright and Similar Rights.\r\n\r\n\r\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\r\n\r\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\r\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\r\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\r\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\r\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\r\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\r\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\r\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\r\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\r\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\r\n\r\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\r\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\r\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\r\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\r\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\r\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\r\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\r\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\r\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\r\n\r\n  c. The disclaimer of warranties and limitation of liability provided\r\n     above shall be interpreted in a manner that, to the extent\r\n     possible, most closely approximates an absolute disclaimer and\r\n     waiver of all liability.\r\n\r\n\r\nSection 6 -- Term and Termination.\r\n\r\n  a. This Public License applies for the term of the Copyright and\r\n     Similar Rights licensed here. However, if You fail to comply with\r\n     this Public License, then Your rights under this Public License\r\n     terminate automatically.\r\n\r\n  b. Where Your right to use the Licensed Material has terminated under\r\n     Section 6(a), it reinstates:\r\n\r\n       1. automatically as of the date the violation is cured, provided\r\n          it is cured within 30 days of Your discovery of the\r\n          violation; or\r\n\r\n       2. upon express reinstatement by the Licensor.\r\n\r\n     For the avoidance of doubt, this Section 6(b) does not affect any\r\n     right the Licensor may have to seek remedies for Your violations\r\n     of this Public License.\r\n\r\n  c. For the avoidance of doubt, the Licensor may also offer the\r\n     Licensed Material under separate terms or conditions or stop\r\n     distributing the Licensed Material at any time; however, doing so\r\n     will not terminate this Public License.\r\n\r\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\r\n     License.\r\n\r\n\r\nSection 7 -- Other Terms and Conditions.\r\n\r\n  a. The Licensor shall not be bound by any additional or different\r\n     terms or conditions communicated by You unless expressly agreed.\r\n\r\n  b. Any arrangements, understandings, or agreements regarding the\r\n     Licensed Material not stated herein are separate from and\r\n     independent of the terms and conditions of this Public License.\r\n\r\n\r\nSection 8 -- Interpretation.\r\n\r\n  a. For the avoidance of doubt, this Public License does not, and\r\n     shall not be interpreted to, reduce, limit, restrict, or impose\r\n     conditions on any use of the Licensed Material that could lawfully\r\n     be made without permission under this Public License.\r\n\r\n  b. To the extent possible, if any provision of this Public License is\r\n     deemed unenforceable, it shall be automatically reformed to the\r\n     minimum extent necessary to make it enforceable. If the provision\r\n     cannot be reformed, it shall be severed from this Public License\r\n     without affecting the enforceability of the remaining terms and\r\n     conditions.\r\n\r\n  c. No term or condition of this Public License will be waived and no\r\n     failure to comply consented to unless expressly agreed to by the\r\n     Licensor.\r\n\r\n  d. Nothing in this Public License constitutes or may be interpreted\r\n     as a limitation upon, or waiver of, any privileges and immunities\r\n     that apply to the Licensor or You, including from the legal\r\n     processes of any jurisdiction or authority.\r\n\r\n\r\n=======================================================================\r\n\r\nCreative Commons is not a party to its public\r\nlicenses. Notwithstanding, Creative Commons may elect to apply one of\r\nits public licenses to material it publishes and in those instances\r\nwill be considered the \"Licensor.\" The text of the Creative Commons\r\npublic licenses is dedicated to the public domain under the CC0 Public\r\nDomain Dedication. Except for the limited purpose of indicating that\r\nmaterial is shared under a Creative Commons public license or as\r\notherwise permitted by the Creative Commons policies published at\r\ncreativecommons.org/policies, Creative Commons does not authorize the\r\nuse of the trademark \"Creative Commons\" or any other trademark or logo\r\nof Creative Commons without its prior written consent including,\r\nwithout limitation, in connection with any unauthorized modifications\r\nto any of its public licenses or any other arrangements,\r\nunderstandings, or agreements concerning use of licensed material. For\r\nthe avoidance of doubt, this paragraph does not form part of the\r\npublic licenses.\r\n\r\nCreative Commons may be contacted at creativecommons.org.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nvscode-logfile-highlighter 3.3.4 - MIT\r\nhttps://github.com/emilast/vscode-logfile-highlighter\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 emilast\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nvscode-swift 0.0.1 - MIT\r\nhttps://github.com/owensd/vscode-swift\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 David Owens II\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nvscode-win32-app-container-tokens\r\nhttps://github.com/microsoft/vscode-win32-app-container-tokens\r\n\r\nMIT License\r\n\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwalles/git-commit-message-plus 1.0.0 - MIT\r\nhttps://github.com/walles/git-commit-message-plus\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2023 Johan Walles <johan.walles@gmail.com>\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\"\r\nSoftware\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nWeb Background Synchronization  - Apache-2.0\r\nhttps://github.com/WICG/background-sync\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright {yyyy} {name of copyright owner}\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzsh 5.9\r\nhttps://github.com/zsh-users/zsh\r\n\r\nUnless otherwise noted in the header of specific files, files in this distribution have the licence shown below.\r\n\r\nHowever, note that certain shell functions are licensed under versions of the GNU General Public Licence.  Anyone distributing the shell as a binary including those files needs to take account of this.  Search shell functions for \"Copyright\" for specific copyright information. None of the core functions are affected by this, so those files may simply be omitted.\r\n\r\n--\r\n\r\nThe Z Shell is copyright (c) 1992-2017 Paul Falstad, Richard Coleman, Zoltán Hidvégi, Andrew Main, Peter Stephenson, Sven Wischnowsky, and others.  All rights reserved.  Individual authors, whether or not specifically named, retain copyright in all changes; in what follows, they are referred to as `the Zsh Development Group'.  This is for convenience only and this body has no legal status.  The Z shell is distributed under the following licence; any provisions made in individual files take precedence.\r\n\r\nPermission is hereby granted, without written agreement and without licence or royalty fees, to use, copy, modify, and distribute this software and to distribute modified versions of this software for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software.\r\n\r\nIn no event shall the Zsh Development Group be liable to any party for direct, indirect, special, incidental, or consequential damages arising out of the use of this software and its documentation, even if the Zsh Development Group have been advised of the possibility of such damage.\r\n\r\nThe Zsh Development Group specifically disclaim any warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.  The software provided hereunder is on an \"as is\" basis, and the Zsh Development Group have no obligation to provide maintenance, support, updates, enhancements, or modifications.\r\n---------------------------------------------------------"
  },
  {
    "path": "VOID_CODEBASE_GUIDE.md",
    "content": "# Void Codebase Guide\n\nThe Void codebase is not as intimidating as it seems!\n\nMost of Void's code lives in the folder `src/vs/workbench/contrib/void/`.\n\nThe purpose of this document is to explain how Void's codebase works. If you want build instructions instead, see [Contributing](https://github.com/voideditor/void/blob/main/HOW_TO_CONTRIBUTE.md).\n\n\n\n\n\n\n\n\n\n## Void Codebase Guide\n\n### VSCode Rundown\nHere's a VSCode rundown if you're just getting started with Void. You can also see Microsoft's [wiki](https://github.com/microsoft/vscode/wiki/Source-Code-Organization) for some pictures. VSCode is an Electron app. Electron runs two processes: a **main** process (for internals) and a **browser** process (browser means HTML in general, not just \"web browser\").\n<p align=\"center\" >\n<img src=\"https://github.com/user-attachments/assets/eef80306-2bfe-4cac-ba15-6156f65ab3bb\" alt=\"Credit - https://github.com/microsoft/vscode/wiki/Source-Code-Organization\" width=\"700px\">\n</p>\n\n- Code in a  `browser/` folder always lives on the browser process, and it can use `window` and other browser items.\n- Code in an `electron-main/` folder always lives on the main process, and it can import `node_modules`.\n- Code in `common/` can be used by either process, but doesn't get any special imports.\n- The browser environment is not allowed to import `node_modules`. We came up with two workarounds:\n  1. Bundle the raw node_module code to the browser - we're doing this for React.\n  2. Implement the code on `electron-main/` and set up a channel between main/browser - we're doing this for sendLLMMessage.\n\n\n\n\n### Terminology\n\nHere's some terminology you might want to know about when working inside VSCode:\n- An **Editor** is the thing that you type your code in. If you have 10 tabs open, that's just one editor! Editors contain tabs (or \"models\").\n- A **Model** is an internal representation of a file's contents. It's shared between editors (for example, if you press `Cmd+\\` to make a new editor, then the model of a file like `A.ts` is shared between them. Two editors, one model. That's how changes sync.).\n- Each model has a **URI** it represents, like `/Users/.../my_file.txt`. (A URI or \"resource\" is generally just a path).\n- The **Workbench** is the wrapper that contains all the editors, the terminal, the file system tree, etc.\n- Usually you use the `ITextModel` type for models and the `ICodeEditor` type for editors. There aren't that many other types.\n<p align=\"center\" >\n<img src=\"https://github.com/user-attachments/assets/6521c228-dc96-4cf5-a673-6b9ca78b9b06\" alt=\"Credit - https://code.visualstudio.com/docs/getstarted/userinterface\" width=\"400px\">\n</p>\n\n\n\n- VSCode is organized into \"**Services**\". A service is just a class that mounts a single time (in computer science theory this is called a \"singleton\"). You can register services with `registerSingleton` so that you can easily use them in any constructor with `@<Service>`. See _dummyContrib for an example we put together on how to register them. The registration is the same every time.\n\n- \"**Actions**\" are functions you register on VSCode so that either you or the user can call them later. They're also called \"**Commands**\".\n\t- You can run actions as a user by pressing Cmd+Shift+P (opens the command pallete), or you can run them internally by using the commandService to call them by ID. We use actions to register keybinding listeners like Cmd+L, Cmd+K, etc. The nice thing about actions is the user can change the keybindings.\n\n\n### Internal LLM Message Pipeline\n\nHere's a picture of all the dependencies that are relevent between the time you first send a message through Void's sidebar, and the time a request is sent to your provider.\nSending LLM messages from the main process avoids CSP issues with local providers and lets us use node_modules more easily.\n\n\n<div align=\"center\">\n\t<img width=\"100%\" src=\"https://github.com/user-attachments/assets/9cf54dbb-82c4-4488-97a2-bd8dea890b50\">\n</div>\n\n\n\n**Notes:** `modelCapabilities` is an important file that must be updated when new models come out!\n\n\n### Apply\n\nVoid has two types of Apply: **Fast Apply** (uses Search/Replace, see below), and **Slow Apply** (rewrites whole file).\n\nWhen you click Apply and Fast Apply is enabled, we prompt the LLM to output Search/Replace block(s) like this:\n```\n<<<<<<< ORIGINAL\n// original code goes here\n=======\n// replaced code goes here\n>>>>>>> UPDATED\n```\nThis is what allows Void to quickly apply code even on 1000-line files. It's the same as asking the LLM to press Ctrl+F and enter in a search/replace query.\n\n### Apply Inner Workings\n\nThe `editCodeService` file runs Apply. The same exact code is also used when the LLM calls the Edit tool, and when you submit Cmd+K. Just different versions of Fast/Slow Apply mode.\n\nHere is some important terminology:\n- A **DiffZone** is a {startLine, endLine} region of text where we compute and show red/green areas, or **Diffs**. When any changes are made to a file, we loop through all the DiffAreas on that file and refresh its Diffs.\n- A **DiffArea** is a generalization that just tracks line numbers like a DiffZone.\n- The only type of DiffArea that can \"stream\" is a DiffZone. Each DiffZone has an llmCancelToken if it's streaming.\n\nHow Apply works:\n- When you click Apply, we create a **DiffZone** over that the full file so that any changes that the LLM makes will show up in red/green. We then stream the change.\n- When an LLM calls Edit, it's really calling Apply.\n- When you submit Cmd+K, it's the same as Apply except we create a smaller DiffZone (not on the whole file).\n\n\n### Writing Files Inner Workings\nWhen Void wants to change your code, it just writes to a text model. This means all you need to know to write to a file is its URI - you don't have to load it, save it, etc. There are some annoying background URI/model things to think about to get this to work, but we handled them all in `voidModelService`.\n\n### Void Settings Inner Workings\nWe have a service `voidSettingsService` that stores all your Void settings (providers, models, global Void settings, etc). Imagine this as an implicit dependency for any of the core Void services:\n\n<div align=\"center\">\n\t<img width=\"800\" src=\"https://github.com/user-attachments/assets/9f3cb68c-a61b-4810-8429-bb90b992b3fa\">\n</div>\n\nHere's a guide to some of the terminology we're using:\n- **FeatureName**: Autocomplete | Chat | CtrlK | Apply\n- **ModelSelection**: a {providerName, modelName} pair.\n- **ProviderName**: The name of a provider: `'ollama'`, `'openAI'`, etc.\n- **ModelName**: The name of a model (string type, eg `'gpt-4o'`).\n- **RefreshProvider**: a provider that we ping repeatedly to update the models list.\n- **ChatMode** = normal | gather | agent\n\n\n\n### Approval State\n`editCodeService`'s data structures contain all the information about changes that the user needs to review. However, they don't store that information in a useful format. We wrote the following service to get a more useful derived state:\n\n<div align=\"center\">\n\t<img width=\"600\" src=\"https://github.com/user-attachments/assets/f3645355-dff6-467c-bc38-ffe52077c08b\">\n</div>\n\n\n\n### Build process\nIf you want to know how our build pipeline works, see our build repo [here](https://github.com/voideditor/void-builder).\n\n\n\n## VSCode Codebase Guide\n\nFor additional references, the Void team put together this list of links to get up and running with VSCode.\n<details>\n\t\n\n#### Links for Beginners\n\n- [VSCode UI guide](https://code.visualstudio.com/docs/getstarted/userinterface)  - covers auxbar, panels, etc.\n- [UX guide](https://code.visualstudio.com/api/ux-guidelines/overview) - covers Containers, Views, Items, etc.\n\n#### Links for Contributors\n\n- [How VSCode's sourcecode is organized](https://github.com/microsoft/vscode/wiki/Source-Code-Organization) - this explains where the entry point files are, what `browser/` and `common/` mean, etc. This is the most important read on this whole list! We recommend reading the whole thing.\n- [Built-in VSCode styles](https://code.visualstudio.com/api/references/theme-color) - CSS variables that are built into VSCode. Use `var(--vscode-{theme but replacing . with -})`. You can also see their [Webview theming guide](https://code.visualstudio.com/api/extension-guides/webview#theming-webview-content).\n\n\n#### Misc\n\n- [Every command](https://code.visualstudio.com/api/references/commands) built-in to VSCode - not used often, but here for reference.\n- Note: VSCode's repo is the source code for the Monaco editor! An \"editor\" is a Monaco editor, and it shares the code for ITextModel, etc.\n\n\n#### VSCode's Extension API\n\nVoid is no longer an extension, so these links are no longer required, but they might be useful if we ever build an extension again.\n\n- [Files you need in an extension](https://code.visualstudio.com/api/get-started/extension-anatomy).\n- [An extension's `package.json` schema](https://code.visualstudio.com/api/references/extension-manifest).\n- [\"Contributes\" Guide](https://code.visualstudio.com/api/references/contribution-points) - the `\"contributes\"` part of `package.json` is how an extension mounts.\n- [The Full VSCode Extension API](https://code.visualstudio.com/api/references/vscode-api) - look on the right side for organization. The [bottom](https://code.visualstudio.com/api/references/vscode-api#api-patterns) of the page is easy to miss but is useful - cancellation tokens, events, disposables.\n- [Activation events](https://code.visualstudio.com/api/references/activation-events) you can define in `package.json` (not the most useful).\n\n\n</details>\n"
  },
  {
    "path": "build/.cachesalt",
    "content": "2024-12-11T00:28:56.838Z\n"
  },
  {
    "path": "build/.gitattributes",
    "content": "* text eol=lf\n*.exe binary\n*.dll binary\n"
  },
  {
    "path": "build/.gitignore",
    "content": "*.js.map\n"
  },
  {
    "path": "build/.moduleignore",
    "content": "# cleanup rules for node modules, .gitignore style\n\n# native node modules\n\nnan/**\n*/node_modules/nan/**\n\nfsevents/binding.gyp\nfsevents/fsevents.cc\nfsevents/build/**\nfsevents/src/**\nfsevents/test/**\n!fsevents/**/*.node\n\n@vscode/spdlog/binding.gyp\n@vscode/spdlog/build/**\n@vscode/spdlog/deps/**\n@vscode/spdlog/src/**\n@vscode/spdlog/test/**\n@vscode/spdlog/*.yml\n!@vscode/spdlog/build/Release/*.node\n\n@vscode/deviceid/binding.gyp\n@vscode/deviceid/build/**\n@vscode/deviceid/deps/**\n@vscode/deviceid/src/**\n@vscode/deviceid/test/**\n@vscode/deviceid/*.yml\n!@vscode/deviceid/build/Release/*.node\n\n\n@vscode/sqlite3/binding.gyp\n@vscode/sqlite3/benchmark/**\n@vscode/sqlite3/cloudformation/**\n@vscode/sqlite3/deps/**\n@vscode/sqlite3/test/**\n@vscode/sqlite3/build/**\n@vscode/sqlite3/src/**\n!@vscode/sqlite3/build/Release/*.node\n\n@vscode/windows-mutex/binding.gyp\n@vscode/windows-mutex/build/**\n@vscode/windows-mutex/src/**\n!@vscode/windows-mutex/**/*.node\n\n@vscode/windows-process-tree/binding.gyp\n@vscode/windows-process-tree/build/**\n@vscode/windows-process-tree/src/**\n@vscode/windows-process-tree/tsconfig.json\n@vscode/windows-process-tree/tslint.json\n!@vscode/windows-process-tree/**/*.node\n\n@vscode/windows-registry/binding.gyp\n@vscode/windows-registry/src/**\n@vscode/windows-registry/build/**\n!@vscode/windows-registry/build/Release/*.node\n\n@vscode/tree-sitter-wasm/wasm/tree-sitter-*.wasm\n!@vscode/tree-sitter-wasm/wasm/tree-sitter-typescript.wasm\n!@vscode/tree-sitter-wasm/wasm/tree-sitter-regex.wasm\n!@vscode/tree-sitter-wasm/wasm/tree-sitter-ini.wasm\n!@vscode/tree-sitter-wasm/wasm/tree-sitter-css.wasm\n\nnative-keymap/binding.gyp\nnative-keymap/build/**\nnative-keymap/src/**\nnative-keymap/deps/**\n!native-keymap/build/Release/*.node\n\nnative-is-elevated/binding.gyp\nnative-is-elevated/build/**\nnative-is-elevated/src/**\nnative-is-elevated/deps/**\n!native-is-elevated/build/Release/*.node\n\nnative-watchdog/binding.gyp\nnative-watchdog/build/**\nnative-watchdog/src/**\n!native-watchdog/build/Release/*.node\n\n@vscode/vsce-sign/**\n!@vscode/vsce-sign/src/main.d.ts\n!@vscode/vsce-sign/src/main.js\n!@vscode/vsce-sign/package.json\n!@vscode/vsce-sign/bin/**\n\nwindows-foreground-love/binding.gyp\nwindows-foreground-love/build/**\nwindows-foreground-love/src/**\n!windows-foreground-love/**/*.node\n\nkerberos/binding.gyp\nkerberos/build/**\nkerberos/src/**\nkerberos/node_modules/**\n!kerberos/**/*.node\n\nnode-pty/binding.gyp\nnode-pty/build/**\nnode-pty/src/**\nnode-pty/lib/*.test.js\nnode-pty/tools/**\nnode-pty/deps/**\nnode-pty/scripts/**\nnode-pty/third_party/**\n!node-pty/build/Release/spawn-helper\n!node-pty/build/Release/*.exe\n!node-pty/build/Release/*.dll\n!node-pty/build/Release/*.node\n!node-pty/build/Release/conpty/conpty.dll\n!node-pty/build/Release/conpty/OpenConsole.exe\n\n@parcel/watcher/binding.gyp\n@parcel/watcher/build/**\n@parcel/watcher/prebuilds/**\n@parcel/watcher/src/**\n!@parcel/watcher/build/Release/*.node\n\nvsda/**\n!vsda/index.js\n!vsda/index.d.ts\n!vsda/package.json\n!vsda/build/Release/vsda.node\n!vsda/rust/web/**\n!vsda/rust/bundler/**\n\n@vscode/policy-watcher/build/**\n@vscode/policy-watcher/.husky/**\n@vscode/policy-watcher/src/**\n@vscode/policy-watcher/binding.gyp\n@vscode/policy-watcher/README.md\n@vscode/policy-watcher/index.d.ts\n!@vscode/policy-watcher/build/Release/vscode-policy-watcher.node\n\n@vscode/windows-ca-certs/**/*\n!@vscode/windows-ca-certs/package.json\n!@vscode/windows-ca-certs/**/*.node\n\n@vscode/node-addon-api/**/*\nnode-addon-api/**/*\nprebuild-install/**/*\n\n# other node modules\n\n**/docs/**\n**/example/**\n**/examples/**\n**/test/**\n**/tests/**\n\n**/History.md\n**/CHANGELOG.md\n**/README.md\n**/readme.md\n**/readme.markdown\n**/CODE_OF_CONDUCT.md\n**/SUPPORT.md\n**/CONTRIBUTING.md\n\n**/*.ts\n\n# Exclude TS files that aren't needed by TS extension\ntypescript/lib/tsc.js\ntypescript/lib/typescriptServices.js\ntypescript/lib/tsserverlibrary.js\n# We still need to include stdlib d.ts\n!typescript/lib/lib*.d.ts\n\njschardet/index.js\njschardet/src/**\njschardet/dist/jschardet.js\n\nes6-promise/lib/**\n\nvscode-textmate/webpack.config.js\n\nzone.js/dist/**\n!zone.js/dist/zone-node.js\n\n# https://github.com/xtermjs/xterm.js/issues/3137\n@xterm/xterm/src/**\n@xterm/xterm/tsconfig.all.json\n\n# https://github.com/xtermjs/xterm.js/issues/3138\n@xterm/xterm-addon-*/src/**\n@xterm/xterm-addon-*/fixtures/**\n@xterm/xterm-addon-*/out/**\n@xterm/xterm-addon-*/out-test/**\n"
  },
  {
    "path": "build/.moduleignore.darwin",
    "content": "@vscode/windows-mutex/index.js\n@vscode/windows-mutex/**/*.node\n@vscode/windows-mutex/*.md\n@vscode/windows-mutex/package.json\n\n@vscode/windows-process-tree/lib/**\n@vscode/windows-process-tree/**/*.node\n@vscode/windows-process-tree/LICENSE\n@vscode/windows-process-tree/package.json\n@vscode/windows-process-tree/*.md\n\n@vscode/windows-registry/dist/**\n@vscode/windows-registry/**/*.node\n@vscode/windows-registry/*.md\n@vscode/windows-registry/*.txt\n@vscode/windows-registry/package.json\n!@vscode/windows-registry/dist/index.d.ts"
  },
  {
    "path": "build/.moduleignore.linux",
    "content": "@vscode/windows-mutex/index.js\n@vscode/windows-mutex/**/*.node\n@vscode/windows-mutex/*.md\n@vscode/windows-mutex/package.json\n\n@vscode/windows-process-tree/lib/**\n@vscode/windows-process-tree/**/*.node\n@vscode/windows-process-tree/LICENSE\n@vscode/windows-process-tree/package.json\n@vscode/windows-process-tree/*.md\n\n@vscode/windows-registry/dist/**\n@vscode/windows-registry/**/*.node\n@vscode/windows-registry/*.md\n@vscode/windows-registry/*.txt\n@vscode/windows-registry/package.json\n!@vscode/windows-registry/dist/index.d.ts"
  },
  {
    "path": "build/.moduleignore.win32",
    "content": ""
  },
  {
    "path": "build/.npmrc",
    "content": "disturl=\"https://nodejs.org/dist\"\nruntime=\"node\"\nbuild_from_source=\"true\"\nlegacy-peer-deps=\"true\"\nforce_process_config=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "build/.webignore",
    "content": "# cleanup rules for web node modules, .gitignore style\n\n**/*.txt\n**/*.json\n**/*.md\n**/*.d.ts\n**/*.js.map\n**/LICENSE\n**/CONTRIBUTORS\n\n**/docs/**\n**/example/**\n**/examples/**\n\njschardet/index.js\njschardet/src/**\njschardet/dist/jschardet.js\n\nvscode-textmate/webpack.config.js\n\n@xterm/xterm/src/**\n\n@xterm/addon-clipboard/src/**\n@xterm/addon-clipboard/out/**\n\n@xterm/addon-image/src/**\n@xterm/addon-image/out/**\n\n@xterm/addon-ligatures/src/**\n@xterm/addon-ligatures/out/**\n\n@xterm/addon-search/src/**\n@xterm/addon-search/out/**\n@xterm/addon-search/fixtures/**\n\n@xterm/addon-unicode11/src/**\n@xterm/addon-unicode11/out/**\n\n@xterm/addon-webgl/src/**\n@xterm/addon-webgl/out/**\n\n# This makes sure the model is included in the package\n!@vscode/vscode-languagedetection/model/**\n!@vscode/tree-sitter-wasm/wasm/**\n\n# Ensure only the required telemetry pieces are loaded in web to reduce bundle size\n@microsoft/1ds-core-js/**\n@microsoft/1ds-post-js/**\n@microsoft/applicationinsights-core-js/**\n@microsoft/applicationinsights-shims/**\n!@microsoft/1ds-core-js/dist/ms.core.min.js\n!@microsoft/1ds-core-js/bundle/ms.core.min.js\n!@microsoft/1ds-post-js/dist/ms.post.min.js\n!@microsoft/1ds-post-js/bundle/ms.post.min.js\n!@microsoft/applicationinsights-core-js/browser/applicationinsights-core-js.min.js\n!@microsoft/applicationinsights-shims/dist/umd/applicationinsights-shims.min.js\n\nvsda/**\n!vsda/rust/web/**\n"
  },
  {
    "path": "build/azure-pipelines/alpine/cli-build-alpine.yml",
    "content": "parameters:\n  - name: VSCODE_BUILD_ALPINE\n    type: boolean\n    default: false\n  - name: VSCODE_BUILD_ALPINE_ARM64\n    type: boolean\n    default: false\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_CHECK_ONLY\n    type: boolean\n    default: false\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ../cli/cli-apply-patches.yml@self\n\n    - script: |\n        set -e\n        npm ci\n      workingDirectory: build\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Install build dependencies\n\n  - task: Npm@1\n    displayName: Download openssl prebuilt\n    inputs:\n      command: custom\n      customCommand: pack @vscode-internal/openssl-prebuilt@0.0.11\n      customRegistry: useFeed\n      customFeed: \"Monaco/openssl-prebuilt\"\n      workingDir: $(Build.ArtifactStagingDirectory)\n\n  - script: |\n      set -e\n      mkdir $(Build.ArtifactStagingDirectory)/openssl\n      tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.11.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl\n    displayName: Extract openssl prebuilt\n\n  # inspired by: https://github.com/emk/rust-musl-builder/blob/main/Dockerfile\n  - bash: |\n      set -e\n      sudo apt-get update\n      sudo apt-get install -yq build-essential musl-dev musl-tools linux-libc-dev pkgconf xutils-dev lld\n      sudo ln -s \"/usr/bin/g++\" \"/usr/bin/musl-g++\" || echo \"link exists\"\n    displayName: Install musl build dependencies\n\n  - template: ../cli/install-rust-posix.yml@self\n    parameters:\n      targets:\n        - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:\n          - aarch64-unknown-linux-musl\n        - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:\n          - x86_64-unknown-linux-musl\n\n  - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_CLI_TARGET: aarch64-unknown-linux-musl\n        VSCODE_CLI_ARTIFACT: vscode_cli_alpine_arm64_cli\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_ENV:\n          CXX_aarch64-unknown-linux-musl: musl-g++\n          CC_aarch64-unknown-linux-musl: musl-gcc\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux-musl/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux-musl/include\n          OPENSSL_STATIC: \"1\"\n\n  - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_CLI_TARGET: x86_64-unknown-linux-musl\n        VSCODE_CLI_ARTIFACT: vscode_cli_alpine_x64_cli\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_ENV:\n          CXX_aarch64-unknown-linux-musl: musl-g++\n          CC_aarch64-unknown-linux-musl: musl-gcc\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux-musl/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux-musl/include\n          OPENSSL_STATIC: \"1\"\n\n  - ${{ if not(parameters.VSCODE_CHECK_ONLY) }}:\n    - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_alpine_arm64_cli.tar.gz\n          artifactName: vscode_cli_alpine_arm64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code Alpine arm64 CLI\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish vscode_cli_alpine_arm64_cli artifact\n\n    - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_alpine_x64_cli.tar.gz\n          artifactName: vscode_cli_alpine_x64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code Alpine x64 CLI\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish vscode_cli_alpine_x64_cli artifact\n"
  },
  {
    "path": "build/azure-pipelines/alpine/product-build-alpine.yml",
    "content": "steps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - template: ../distro/download-distro.yml@self\n\n  - task: AzureKeyVault@2\n    displayName: \"Azure Key Vault: Get Secrets\"\n    inputs:\n      azureSubscription: vscode\n      KeyVaultName: vscode-build-secrets\n      SecretsFilter: \"github-distro-mixin-password\"\n\n  - task: DownloadPipelineArtifact@2\n    inputs:\n      artifact: Compilation\n      path: $(Build.ArtifactStagingDirectory)\n    displayName: Download compilation output\n\n  - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz\n    displayName: Extract compilation output\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js alpine $VSCODE_ARCH > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - script: tar -xzf .build/node_modules_cache/cache.tgz\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - task: Docker@1\n    inputs:\n      azureSubscriptionEndpoint: vscode\n      azureContainerRegistry: vscodehub.azurecr.io\n      command: \"Run an image\"\n      imageName: \"vscode-linux-build-agent:alpine-$(VSCODE_ARCH)\"\n      containerCommand: uname\n    displayName: \"Pull image\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: sudo apt-get update && sudo apt-get install -y libkrb5-dev\n    displayName: Install build dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: |\n      set -e\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    env:\n      npm_config_arch: $(NPM_ARCH)\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME: vscodehub.azurecr.io/vscode-linux-build-agent:alpine-$(VSCODE_ARCH)\n      VSCODE_HOST_MOUNT: \"/mnt/vss/_work/1/s\"\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: node build/azure-pipelines/distro/mixin-npm\n    displayName: Mixin distro node modules\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: |\n      set -e\n      node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt\n      mkdir -p .build/node_modules_cache\n      tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n\n  - script: node build/azure-pipelines/distro/mixin-quality\n    displayName: Mixin distro quality\n\n  - template: ../common/install-builtin-extensions.yml@self\n\n  - script: |\n      set -e\n      TARGET=$([ \"$VSCODE_ARCH\" == \"x64\" ] && echo \"linux-alpine\" || echo \"alpine-arm64\") # TODO@joaomoreno\n      npm run gulp vscode-reh-$TARGET-min-ci\n      (cd .. && mv vscode-reh-$TARGET vscode-server-$TARGET) # TODO@joaomoreno\n      ARCHIVE_PATH=\".build/linux/server/vscode-server-$TARGET.tar.gz\"\n      DIR_PATH=\"$(realpath ../vscode-server-$TARGET)\"\n      mkdir -p $(dirname $ARCHIVE_PATH)\n      tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-$TARGET\n      echo \"##vso[task.setvariable variable=SERVER_DIR_PATH]$DIR_PATH\"\n      echo \"##vso[task.setvariable variable=SERVER_PATH]$ARCHIVE_PATH\"\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Build server\n\n  - script: |\n      set -e\n      TARGET=$([ \"$VSCODE_ARCH\" == \"x64\" ] && echo \"linux-alpine\" || echo \"alpine-arm64\")\n      npm run gulp vscode-reh-web-$TARGET-min-ci\n      (cd .. && mv vscode-reh-web-$TARGET vscode-server-$TARGET-web) # TODO@joaomoreno\n      ARCHIVE_PATH=\".build/linux/web/vscode-server-$TARGET-web.tar.gz\"\n      DIR_PATH=\"$(realpath ../vscode-server-$TARGET-web)\"\n      mkdir -p $(dirname $ARCHIVE_PATH)\n      tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-$TARGET-web\n      echo \"##vso[task.setvariable variable=WEB_DIR_PATH]$DIR_PATH\"\n      echo \"##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH\"\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Build server (web)\n\n  - script: echo \"##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_\"\n    condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues'))\n    displayName: Generate artifact prefix\n\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(SERVER_PATH)\n      artifactName: $(ARTIFACT_PREFIX)vscode_server_alpine_$(VSCODE_ARCH)_archive-unsigned\n      sbomBuildDropPath: $(SERVER_DIR_PATH)\n      sbomPackageName: \"VS Code Alpine $(VSCODE_ARCH) Server\"\n      sbomPackageVersion: $(Build.SourceVersion)\n    displayName: Publish server archive\n    condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], ''), ne(variables['VSCODE_ARCH'], 'x64'))\n\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(WEB_PATH)\n      artifactName: $(ARTIFACT_PREFIX)vscode_web_alpine_$(VSCODE_ARCH)_archive-unsigned\n      sbomBuildDropPath: $(WEB_DIR_PATH)\n      sbomPackageName: \"VS Code Alpine $(VSCODE_ARCH) Web\"\n      sbomPackageVersion: $(Build.SourceVersion)\n    displayName: Publish web server archive\n    condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], ''), ne(variables['VSCODE_ARCH'], 'x64'))\n\n  # same as above, keep legacy name\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(SERVER_PATH)\n      artifactName: $(ARTIFACT_PREFIX)vscode_server_linux_alpine_archive-unsigned\n      sbomEnabled: false\n    displayName: Publish x64 server archive\n    condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], ''), eq(variables['VSCODE_ARCH'], 'x64'))\n\n  # same as above, keep legacy name\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(WEB_PATH)\n      artifactName: $(ARTIFACT_PREFIX)vscode_web_linux_alpine_archive-unsigned\n      sbomEnabled: false\n    displayName: Publish x64 web server archive\n    condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], ''), eq(variables['VSCODE_ARCH'], 'x64'))\n"
  },
  {
    "path": "build/azure-pipelines/cli/cli-apply-patches.yml",
    "content": "steps:\n  - template: ../distro/download-distro.yml@self\n\n  - script: node build/azure-pipelines/distro/mixin-quality\n    displayName: Mixin distro quality\n\n  - script: node .build/distro/cli-patches/index.js\n    displayName: Apply distro patches\n"
  },
  {
    "path": "build/azure-pipelines/cli/cli-compile.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_CLI_TARGET\n    type: string\n  - name: VSCODE_CLI_ARTIFACT\n    type: string\n  - name: VSCODE_CLI_ENV\n    type: object\n    default: {}\n  - name: VSCODE_CHECK_ONLY\n    type: boolean\n    default: false\n\nsteps:\n  - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}:\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - pwsh: Write-Host \"##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/product.json\"\n        displayName: Set product.json path\n    - ${{ else }}:\n      - pwsh: Write-Host \"##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/.build/distro/mixin/${{ parameters.VSCODE_QUALITY }}/product.json\"\n        displayName: Set product.json path\n  - ${{ else }}:\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: echo \"##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/product.json\"\n        displayName: Set product.json path\n    - ${{ else }}:\n      - script: echo \"##vso[task.setvariable variable=VSCODE_CLI_PRODUCT_JSON]$(Build.SourcesDirectory)/.build/distro/mixin/${{ parameters.VSCODE_QUALITY }}/product.json\"\n        displayName: Set product.json path\n\n  - ${{ if parameters.VSCODE_CHECK_ONLY }}:\n    - script: cargo clippy --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code\n      displayName: Lint ${{ parameters.VSCODE_CLI_TARGET }}\n      workingDirectory: $(Build.SourcesDirectory)/cli\n      env:\n        CARGO_NET_GIT_FETCH_WITH_CLI: true\n        ${{ each pair in parameters.VSCODE_CLI_ENV }}:\n          ${{ pair.key }}: ${{ pair.value }}\n\n  - ${{ else }}:\n    - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-linux-') }}:\n      - script: |\n          set -e\n          if [ -n \"$SYSROOT_ARCH\" ]; then\n            export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots\n            node -e '(async () => { const { getVSCodeSysroot } = require(\"../build/linux/debian/install-sysroot.js\"); await getVSCodeSysroot(process.env[\"SYSROOT_ARCH\"]); })()'\n            if [ \"$SYSROOT_ARCH\" == \"arm64\" ]; then\n              export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=\"$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc\"\n              export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS=\"-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot\"\n              export CC_aarch64_unknown_linux_gnu=\"$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc --sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot\"\n              export PKG_CONFIG_LIBDIR_aarch64_unknown_linux_gnu=\"$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/usr/lib/aarch64-linux-gnu/pkgconfig:$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/usr/share/pkgconfig\"\n              export PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu=\"$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot\"\n              export OBJDUMP=\"$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/bin/objdump\"\n            elif [ \"$SYSROOT_ARCH\" == \"amd64\" ]; then\n              export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=\"$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc\"\n              export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS=\"-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot -C link-arg=-L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu\"\n              export CC_x86_64_unknown_linux_gnu=\"$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc --sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot\"\n              export PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu=\"$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu/pkgconfig:$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/share/pkgconfig\"\n              export PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu=\"$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot\"\n              export OBJDUMP=\"$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/bin/objdump\"\n            elif [ \"$SYSROOT_ARCH\" == \"armhf\" ]; then\n              export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=\"$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc\"\n              export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUSTFLAGS=\"-C link-arg=--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot\"\n              export CC_armv7_unknown_linux_gnueabihf=\"$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc --sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot\"\n              export PKG_CONFIG_LIBDIR_armv7_unknown_linux_gnueabihf=\"$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-rpi-linux-gnueabihf/pkgconfig:$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/share/pkgconfig\"\n              export PKG_CONFIG_SYSROOT_DIR_armv7_unknown_linux_gnueabihf=\"$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot\"\n              export OBJDUMP=\"$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/bin/objdump\"\n            fi\n          fi\n\n          cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code\n\n          # verify glibc requirement\n          if [ -n \"$SYSROOT_ARCH\" ]; then\n            glibc_version=\"2.28\"\n            while IFS= read -r line; do\n              if [[ $line == *\"GLIBC_\"* ]]; then\n                version=$(echo \"$line\" | awk '{print $5}' | tr -d '()')\n                version=${version#*_}\n                if [[ $(printf \"%s\\n%s\" \"$version\" \"$glibc_version\" | sort -V | tail -n1) == \"$version\" ]]; then\n                  glibc_version=$version\n                fi\n              fi\n            done < <(\"$OBJDUMP\" -T \"$PWD/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code\")\n            if [[ \"$glibc_version\" != \"2.28\" ]]; then\n              echo \"Error: binary has dependency on GLIBC > 2.28, found $glibc_version\"\n              exit 1\n            fi\n          fi\n        displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }}\n        workingDirectory: $(Build.SourcesDirectory)/cli\n        env:\n          CARGO_NET_GIT_FETCH_WITH_CLI: true\n          VSCODE_CLI_COMMIT: $(Build.SourceVersion)\n          GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n          ${{ each pair in parameters.VSCODE_CLI_ENV }}:\n            ${{ pair.key }}: ${{ pair.value }}\n\n    - ${{ else }}:\n      - script: cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code\n        displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }}\n        workingDirectory: $(Build.SourcesDirectory)/cli\n        env:\n          CARGO_NET_GIT_FETCH_WITH_CLI: true\n          VSCODE_CLI_COMMIT: $(Build.SourceVersion)\n          ${{ each pair in parameters.VSCODE_CLI_ENV }}:\n            ${{ pair.key }}: ${{ pair.value }}\n\n    - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}:\n      - task: PublishSymbols@2\n        inputs:\n          IndexSources: false\n          SymbolsFolder: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release\n          SearchPattern: 'code.pdb'\n          SymbolServerType: TeamServices\n          SymbolsProduct: 'code'\n          ArtifactServices.Symbol.AccountName: microsoft\n          ArtifactServices.Symbol.PAT: $(System.AccessToken)\n          ArtifactServices.Symbol.UseAAD: false\n        displayName: Publish Symbols\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $AppProductJson = Get-Content -Raw -Path \"$env:VSCODE_CLI_PRODUCT_JSON\" | ConvertFrom-Json\n          $env:VSCODE_CLI_APPLICATION_NAME = $AppProductJson.applicationName\n\n          Write-Host \"##vso[task.setvariable variable=VSCODE_CLI_APPLICATION_NAME]$env:VSCODE_CLI_APPLICATION_NAME\"\n\n          New-Item -ItemType Directory -Force -Path \"$(Build.ArtifactStagingDirectory)/cli\"\n          Move-Item -Path $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code.exe -Destination \"$(Build.ArtifactStagingDirectory)/cli/${env:VSCODE_CLI_APPLICATION_NAME}.exe\"\n        displayName: Stage CLI\n\n      - task: ArchiveFiles@2\n        displayName: Archive CLI\n        inputs:\n          rootFolderOrFile: $(Build.ArtifactStagingDirectory)/cli/$(VSCODE_CLI_APPLICATION_NAME).exe\n          includeRootFolder: false\n          archiveType: zip\n          archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip\n\n    - ${{ else }}:\n      - script: |\n          set -e\n          VSCODE_CLI_APPLICATION_NAME=$(node -p \"require(\\\"$VSCODE_CLI_PRODUCT_JSON\\\").applicationName\")\n          echo \"##vso[task.setvariable variable=VSCODE_CLI_APPLICATION_NAME]$VSCODE_CLI_APPLICATION_NAME\"\n\n          mkdir -p $(Build.ArtifactStagingDirectory)/cli\n          mv $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code $(Build.ArtifactStagingDirectory)/cli/$VSCODE_CLI_APPLICATION_NAME\n        displayName: Stage CLI\n\n      - task: ArchiveFiles@2\n        displayName: Archive CLI\n        inputs:\n          rootFolderOrFile: $(Build.ArtifactStagingDirectory)/cli/$(VSCODE_CLI_APPLICATION_NAME)\n          includeRootFolder: false\n          ${{ if contains(parameters.VSCODE_CLI_TARGET, '-darwin') }}:\n            archiveType: zip\n            archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip\n          ${{ else }}:\n            archiveType: tar\n            tarCompression: gz\n            archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz\n"
  },
  {
    "path": "build/azure-pipelines/cli/cli-darwin-sign.yml",
    "content": "parameters:\n  - name: VSCODE_CLI_ARTIFACTS\n    type: object\n    default: []\n\nsteps:\n  - task: UseDotNet@2\n    inputs:\n      version: 6.x\n\n  - task: EsrpCodeSigning@5\n    inputs:\n      UseMSIAuthentication: true\n      ConnectedServiceName: vscode-esrp\n      AppRegistrationClientId: $(ESRP_CLIENT_ID)\n      AppRegistrationTenantId: $(ESRP_TENANT_ID)\n      AuthAKVName: vscode-esrp\n      AuthSignCertName: esrp-sign\n      FolderPath: .\n      Pattern: noop\n    displayName: 'Install ESRP Tooling'\n\n  - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}:\n    - task: DownloadPipelineArtifact@2\n      displayName: Download ${{ target }}\n      inputs:\n        artifact: ${{ target }}\n        path: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}\n\n    - task: ExtractFiles@1\n      displayName: Extract artifact\n      inputs:\n        archiveFilePatterns: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/*.zip\n        destinationFolder: $(Build.ArtifactStagingDirectory)/sign/${{ target }}\n\n  - script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll sign-darwin $(Build.ArtifactStagingDirectory)/pkg \"*.zip\"\n    env:\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n    displayName: Codesign\n\n  - script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll notarize-darwin $(Build.ArtifactStagingDirectory)/pkg \"*.zip\"\n    env:\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n    displayName: Notarize\n\n  - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}:\n    - script: |\n        set -e\n        ASSET_ID=$(echo \"${{ target }}\" | sed \"s/unsigned_//\")\n        mv $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/${{ target }}.zip $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/$ASSET_ID.zip\n        echo \"##vso[task.setvariable variable=ASSET_ID]$ASSET_ID\"\n      displayName: Set asset id variable\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/$(ASSET_ID).zip\n        artifactName: $(ASSET_ID)\n        sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/sign/${{ target }}\n        sbomPackageName: \"VS Code macOS ${{ target }} CLI\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      displayName: Publish signed artifact with ID $(ASSET_ID)\n"
  },
  {
    "path": "build/azure-pipelines/cli/cli-win32-sign.yml",
    "content": "parameters:\n  - name: VSCODE_CLI_ARTIFACTS\n    type: object\n    default: []\n\nsteps:\n  - task: UseDotNet@2\n    inputs:\n      version: 6.x\n\n  - task: EsrpCodeSigning@5\n    inputs:\n      UseMSIAuthentication: true\n      ConnectedServiceName: vscode-esrp\n      AppRegistrationClientId: $(ESRP_CLIENT_ID)\n      AppRegistrationTenantId: $(ESRP_TENANT_ID)\n      AuthAKVName: vscode-esrp\n      AuthSignCertName: esrp-sign\n      FolderPath: .\n      Pattern: noop\n    displayName: 'Install ESRP Tooling'\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      $EsrpCodeSigningTool = (gci -directory -filter EsrpCodeSigning_* $(Agent.RootDirectory)\\_tasks | Select-Object -last 1).FullName\n      $Version = (gci -directory $EsrpCodeSigningTool | Select-Object -last 1).FullName\n      echo \"##vso[task.setvariable variable=EsrpCliDllPath]$Version\\net6.0\\esrpcli.dll\"\n    displayName: Find ESRP CLI\n\n  - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}:\n      - task: DownloadPipelineArtifact@2\n        displayName: Download artifact\n        inputs:\n          artifact: ${{ target }}\n          path: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}\n\n      - task: ExtractFiles@1\n        displayName: Extract artifact\n        inputs:\n          archiveFilePatterns: $(Build.ArtifactStagingDirectory)/pkg/${{ target }}/*.zip\n          destinationFolder: $(Build.ArtifactStagingDirectory)/sign/${{ target }}\n\n  - powershell: node build\\azure-pipelines\\common\\sign $env:EsrpCliDllPath sign-windows $(Build.ArtifactStagingDirectory)/sign \"*.exe\"\n    env:\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n    displayName: Codesign\n\n  - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}:\n      - powershell: |\n          $ASSET_ID = \"${{ target }}\".replace(\"unsigned_\", \"\");\n          echo \"##vso[task.setvariable variable=ASSET_ID]$ASSET_ID\"\n        displayName: Set asset id variable\n\n      - task: ArchiveFiles@2\n        displayName: Archive signed files\n        inputs:\n          rootFolderOrFile: $(Build.ArtifactStagingDirectory)/sign/${{ target }}\n          includeRootFolder: false\n          archiveType: zip\n          archiveFile: $(Build.ArtifactStagingDirectory)/$(ASSET_ID).zip\n\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/$(ASSET_ID).zip\n          artifactName: $(ASSET_ID)\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/sign/${{ target }}\n          sbomPackageName: \"VS Code Windows ${{ target }} CLI\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish signed artifact with ID $(ASSET_ID)\n"
  },
  {
    "path": "build/azure-pipelines/cli/install-rust-posix.yml",
    "content": "parameters:\n  - name: channel\n    type: string\n    default: 1.85\n  - name: targets\n    default: []\n    type: object\n\n# Todo: use 1ES pipeline once extension is installed in ADO\n\nsteps:\n  - task: RustInstaller@1\n    inputs:\n      rustVersion: ms-${{ parameters.channel }}\n      cratesIoFeedOverride: $(CARGO_REGISTRY)\n      additionalTargets: ${{ join(' ', parameters.targets) }}\n      toolchainFeed: https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/nuget/v3/index.json\n      default: true\n      addToPath: true\n    displayName: Install MSFT Rust\n    condition: and(succeeded(), ne(variables['CARGO_REGISTRY'], 'none'))\n\n  - script: |\n      set -e\n      curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal --default-toolchain $RUSTUP_TOOLCHAIN\n      echo \"##vso[task.setvariable variable=PATH;]$PATH:$HOME/.cargo/bin\"\n    env:\n      RUSTUP_TOOLCHAIN: ${{ parameters.channel }}\n    displayName: Install OSS Rust\n    condition: and(succeeded(), eq(variables['CARGO_REGISTRY'], 'none'))\n\n  - script: |\n      set -e\n      rustup default $RUSTUP_TOOLCHAIN\n      rustup update $RUSTUP_TOOLCHAIN\n      rustup component add clippy\n    env:\n      RUSTUP_TOOLCHAIN: ${{ parameters.channel }}\n    displayName: \"Set Rust version\"\n    condition: and(succeeded(), eq(variables['CARGO_REGISTRY'], 'none'))\n\n  - ${{ each target in parameters.targets }}:\n    - script: rustup target add ${{ target }}\n      displayName: \"Adding Rust target '${{ target }}'\"\n      condition: and(succeeded(), eq(variables['CARGO_REGISTRY'], 'none'))\n\n  - script: |\n      set -e\n      rustc --version\n      cargo --version\n    displayName: \"Check Rust versions\"\n"
  },
  {
    "path": "build/azure-pipelines/cli/install-rust-win32.yml",
    "content": "parameters:\n  - name: channel\n    type: string\n    default: 1.85\n  - name: targets\n    default: []\n    type: object\n\n# Todo: use 1ES pipeline once extension is installed in ADO\n\nsteps:\n  - task: RustInstaller@1\n    inputs:\n      rustVersion: ms-${{ parameters.channel }}\n      cratesIoFeedOverride: $(CARGO_REGISTRY)\n      additionalTargets: ${{ join(' ', parameters.targets) }}\n      toolchainFeed: https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/nuget/v3/index.json\n      default: true\n      addToPath: true\n    displayName: Install MSFT Rust\n    condition: and(succeeded(), ne(variables['CARGO_REGISTRY'], 'none'))\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      Invoke-WebRequest -Uri \"https://win.rustup.rs\" -Outfile $(Build.ArtifactStagingDirectory)/rustup-init.exe\n      exec { $(Build.ArtifactStagingDirectory)/rustup-init.exe -y --profile minimal --default-toolchain $env:RUSTUP_TOOLCHAIN --default-host x86_64-pc-windows-msvc }\n      echo \"##vso[task.prependpath]$env:USERPROFILE\\.cargo\\bin\"\n    env:\n      RUSTUP_TOOLCHAIN: ${{ parameters.channel }}\n    displayName: Install OSS Rust\n    condition: and(succeeded(), eq(variables['CARGO_REGISTRY'], 'none'))\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      exec { rustup default $RUSTUP_TOOLCHAIN }\n      exec { rustup update $RUSTUP_TOOLCHAIN }\n    env:\n      RUSTUP_TOOLCHAIN: ${{ parameters.channel }}\n    displayName: \"Set Rust version\"\n    condition: and(succeeded(), eq(variables['CARGO_REGISTRY'], 'none'))\n\n  - ${{ each target in parameters.targets }}:\n    - script: rustup target add ${{ target }}\n      displayName: \"Adding Rust target '${{ target }}'\"\n      condition: and(succeeded(), eq(variables['CARGO_REGISTRY'], 'none'))\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      exec { rustc --version }\n      exec { cargo --version }\n    displayName: \"Check Rust versions\"\n"
  },
  {
    "path": "build/azure-pipelines/cli/test.yml",
    "content": "steps:\n  - template: ./install-rust-posix.yml@self\n\n  - script: cargo clippy -- -D warnings\n    workingDirectory: cli\n    displayName: Clippy lint\n\n  - script: cargo test\n    workingDirectory: cli\n    displayName: Run unit tests\n"
  },
  {
    "path": "build/azure-pipelines/common/computeBuiltInDepsCacheKey.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst productjson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../../product.json'), 'utf8'));\nconst shasum = crypto_1.default.createHash('sha256');\nfor (const ext of productjson.builtInExtensions) {\n    shasum.update(`${ext.name}@${ext.version}`);\n}\nprocess.stdout.write(shasum.digest('hex'));\n//# sourceMappingURL=computeBuiltInDepsCacheKey.js.map"
  },
  {
    "path": "build/azure-pipelines/common/computeBuiltInDepsCacheKey.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport crypto from 'crypto';\n\nconst productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../product.json'), 'utf8'));\nconst shasum = crypto.createHash('sha256');\n\nfor (const ext of productjson.builtInExtensions) {\n\tshasum.update(`${ext.name}@${ext.version}`);\n}\n\nprocess.stdout.write(shasum.digest('hex'));\n"
  },
  {
    "path": "build/azure-pipelines/common/computeNodeModulesCacheKey.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst { dirs } = require('../../npm/dirs');\nconst ROOT = path_1.default.join(__dirname, '../../../');\nconst shasum = crypto_1.default.createHash('sha256');\nshasum.update(fs_1.default.readFileSync(path_1.default.join(ROOT, 'build/.cachesalt')));\nshasum.update(fs_1.default.readFileSync(path_1.default.join(ROOT, '.npmrc')));\nshasum.update(fs_1.default.readFileSync(path_1.default.join(ROOT, 'build', '.npmrc')));\nshasum.update(fs_1.default.readFileSync(path_1.default.join(ROOT, 'remote', '.npmrc')));\n// Add `package.json` and `package-lock.json` files\nfor (const dir of dirs) {\n    const packageJsonPath = path_1.default.join(ROOT, dir, 'package.json');\n    const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath).toString());\n    const relevantPackageJsonSections = {\n        dependencies: packageJson.dependencies,\n        devDependencies: packageJson.devDependencies,\n        optionalDependencies: packageJson.optionalDependencies,\n        resolutions: packageJson.resolutions,\n        distro: packageJson.distro\n    };\n    shasum.update(JSON.stringify(relevantPackageJsonSections));\n    const packageLockPath = path_1.default.join(ROOT, dir, 'package-lock.json');\n    shasum.update(fs_1.default.readFileSync(packageLockPath));\n}\n// Add any other command line arguments\nfor (let i = 2; i < process.argv.length; i++) {\n    shasum.update(process.argv[i]);\n}\nprocess.stdout.write(shasum.digest('hex'));\n//# sourceMappingURL=computeNodeModulesCacheKey.js.map"
  },
  {
    "path": "build/azure-pipelines/common/computeNodeModulesCacheKey.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport crypto from 'crypto';\nconst { dirs } = require('../../npm/dirs');\n\nconst ROOT = path.join(__dirname, '../../../');\n\nconst shasum = crypto.createHash('sha256');\n\nshasum.update(fs.readFileSync(path.join(ROOT, 'build/.cachesalt')));\nshasum.update(fs.readFileSync(path.join(ROOT, '.npmrc')));\nshasum.update(fs.readFileSync(path.join(ROOT, 'build', '.npmrc')));\nshasum.update(fs.readFileSync(path.join(ROOT, 'remote', '.npmrc')));\n\n// Add `package.json` and `package-lock.json` files\nfor (const dir of dirs) {\n\tconst packageJsonPath = path.join(ROOT, dir, 'package.json');\n\tconst packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());\n\tconst relevantPackageJsonSections = {\n\t\tdependencies: packageJson.dependencies,\n\t\tdevDependencies: packageJson.devDependencies,\n\t\toptionalDependencies: packageJson.optionalDependencies,\n\t\tresolutions: packageJson.resolutions,\n\t\tdistro: packageJson.distro\n\t};\n\tshasum.update(JSON.stringify(relevantPackageJsonSections));\n\n\tconst packageLockPath = path.join(ROOT, dir, 'package-lock.json');\n\tshasum.update(fs.readFileSync(packageLockPath));\n}\n\n// Add any other command line arguments\nfor (let i = 2; i < process.argv.length; i++) {\n\tshasum.update(process.argv[i]);\n}\n\nprocess.stdout.write(shasum.digest('hex'));\n"
  },
  {
    "path": "build/azure-pipelines/common/createBuild.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst identity_1 = require(\"@azure/identity\");\nconst cosmos_1 = require(\"@azure/cosmos\");\nconst retry_1 = require(\"./retry\");\nif (process.argv.length !== 3) {\n    console.error('Usage: node createBuild.js VERSION');\n    process.exit(-1);\n}\nfunction getEnv(name) {\n    const result = process.env[name];\n    if (typeof result === 'undefined') {\n        throw new Error('Missing env: ' + name);\n    }\n    return result;\n}\nasync function main() {\n    const [, , _version] = process.argv;\n    const quality = getEnv('VSCODE_QUALITY');\n    const commit = getEnv('BUILD_SOURCEVERSION');\n    const queuedBy = getEnv('BUILD_QUEUEDBY');\n    const sourceBranch = getEnv('BUILD_SOURCEBRANCH');\n    const version = _version + (quality === 'stable' ? '' : `-${quality}`);\n    console.log('Creating build...');\n    console.log('Quality:', quality);\n    console.log('Version:', version);\n    console.log('Commit:', commit);\n    const build = {\n        id: commit,\n        timestamp: (new Date()).getTime(),\n        version,\n        isReleased: false,\n        private: process.env['VSCODE_PRIVATE_BUILD']?.toLowerCase() === 'true',\n        sourceBranch,\n        queuedBy,\n        assets: [],\n        updates: {}\n    };\n    const aadCredentials = new identity_1.ClientAssertionCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], () => Promise.resolve(process.env['AZURE_ID_TOKEN']));\n    const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], aadCredentials });\n    const scripts = client.database('builds').container(quality).scripts;\n    await (0, retry_1.retry)(() => scripts.storedProcedure('createBuild').execute('', [{ ...build, _partitionKey: '' }]));\n}\nmain().then(() => {\n    console.log('Build successfully created');\n    process.exit(0);\n}, err => {\n    console.error(err);\n    process.exit(1);\n});\n//# sourceMappingURL=createBuild.js.map"
  },
  {
    "path": "build/azure-pipelines/common/createBuild.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ClientAssertionCredential } from '@azure/identity';\nimport { CosmosClient } from '@azure/cosmos';\nimport { retry } from './retry';\n\nif (process.argv.length !== 3) {\n\tconsole.error('Usage: node createBuild.js VERSION');\n\tprocess.exit(-1);\n}\n\nfunction getEnv(name: string): string {\n\tconst result = process.env[name];\n\n\tif (typeof result === 'undefined') {\n\t\tthrow new Error('Missing env: ' + name);\n\t}\n\n\treturn result;\n}\n\nasync function main(): Promise<void> {\n\tconst [, , _version] = process.argv;\n\tconst quality = getEnv('VSCODE_QUALITY');\n\tconst commit = getEnv('BUILD_SOURCEVERSION');\n\tconst queuedBy = getEnv('BUILD_QUEUEDBY');\n\tconst sourceBranch = getEnv('BUILD_SOURCEBRANCH');\n\tconst version = _version + (quality === 'stable' ? '' : `-${quality}`);\n\n\tconsole.log('Creating build...');\n\tconsole.log('Quality:', quality);\n\tconsole.log('Version:', version);\n\tconsole.log('Commit:', commit);\n\n\tconst build = {\n\t\tid: commit,\n\t\ttimestamp: (new Date()).getTime(),\n\t\tversion,\n\t\tisReleased: false,\n\t\tprivate: process.env['VSCODE_PRIVATE_BUILD']?.toLowerCase() === 'true',\n\t\tsourceBranch,\n\t\tqueuedBy,\n\t\tassets: [],\n\t\tupdates: {}\n\t};\n\n\tconst aadCredentials = new ClientAssertionCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, () => Promise.resolve(process.env['AZURE_ID_TOKEN']!));\n\tconst client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, aadCredentials });\n\tconst scripts = client.database('builds').container(quality).scripts;\n\tawait retry(() => scripts.storedProcedure('createBuild').execute('', [{ ...build, _partitionKey: '' }]));\n}\n\nmain().then(() => {\n\tconsole.log('Build successfully created');\n\tprocess.exit(0);\n}, err => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"
  },
  {
    "path": "build/azure-pipelines/common/extract-telemetry.sh",
    "content": "#!/usr/bin/env bash\nset -e\n\ncd $BUILD_STAGINGDIRECTORY\nmkdir extraction\ncd extraction\ngit clone --depth 1 https://github.com/microsoft/vscode-extension-telemetry.git\ngit clone --depth 1 https://github.com/microsoft/vscode-chrome-debug-core.git\ngit clone --depth 1 https://github.com/microsoft/vscode-node-debug2.git\ngit clone --depth 1 https://github.com/microsoft/vscode-node-debug.git\ngit clone --depth 1 https://github.com/microsoft/vscode-html-languageservice.git\ngit clone --depth 1 https://github.com/microsoft/vscode-json-languageservice.git\nnode $BUILD_SOURCESDIRECTORY/node_modules/.bin/vscode-telemetry-extractor --sourceDir $BUILD_SOURCESDIRECTORY --excludedDir $BUILD_SOURCESDIRECTORY/extensions --outputDir . --applyEndpoints\nnode $BUILD_SOURCESDIRECTORY/node_modules/.bin/vscode-telemetry-extractor --config $BUILD_SOURCESDIRECTORY/build/azure-pipelines/common/telemetry-config.json -o .\nmkdir -p $BUILD_SOURCESDIRECTORY/.build/telemetry\nmv declarations-resolved.json $BUILD_SOURCESDIRECTORY/.build/telemetry/telemetry-core.json\nmv config-resolved.json $BUILD_SOURCESDIRECTORY/.build/telemetry/telemetry-extensions.json\ncd ..\nrm -rf extraction\n"
  },
  {
    "path": "build/azure-pipelines/common/getPublishAuthTokens.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAccessToken = getAccessToken;\nconst msal_node_1 = require(\"@azure/msal-node\");\nfunction e(name) {\n    const result = process.env[name];\n    if (typeof result !== 'string') {\n        throw new Error(`Missing env: ${name}`);\n    }\n    return result;\n}\nasync function getAccessToken(endpoint, tenantId, clientId, idToken) {\n    const app = new msal_node_1.ConfidentialClientApplication({\n        auth: {\n            clientId,\n            authority: `https://login.microsoftonline.com/${tenantId}`,\n            clientAssertion: idToken\n        }\n    });\n    const result = await app.acquireTokenByClientCredential({ scopes: [`${endpoint}.default`] });\n    if (!result) {\n        throw new Error('Failed to get access token');\n    }\n    return {\n        token: result.accessToken,\n        expiresOnTimestamp: result.expiresOn.getTime(),\n        refreshAfterTimestamp: result.refreshOn?.getTime()\n    };\n}\nasync function main() {\n    const cosmosDBAccessToken = await getAccessToken(e('AZURE_DOCUMENTDB_ENDPOINT'), e('AZURE_TENANT_ID'), e('AZURE_CLIENT_ID'), e('AZURE_ID_TOKEN'));\n    const blobServiceAccessToken = await getAccessToken(`https://${e('VSCODE_STAGING_BLOB_STORAGE_ACCOUNT_NAME')}.blob.core.windows.net/`, process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_ID_TOKEN']);\n    console.log(JSON.stringify({ cosmosDBAccessToken, blobServiceAccessToken }));\n}\nif (require.main === module) {\n    main().then(() => {\n        process.exit(0);\n    }, err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=getPublishAuthTokens.js.map"
  },
  {
    "path": "build/azure-pipelines/common/getPublishAuthTokens.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AccessToken } from '@azure/core-auth';\nimport { ConfidentialClientApplication } from '@azure/msal-node';\n\nfunction e(name: string): string {\n\tconst result = process.env[name];\n\n\tif (typeof result !== 'string') {\n\t\tthrow new Error(`Missing env: ${name}`);\n\t}\n\n\treturn result;\n}\n\nexport async function getAccessToken(endpoint: string, tenantId: string, clientId: string, idToken: string): Promise<AccessToken> {\n\tconst app = new ConfidentialClientApplication({\n\t\tauth: {\n\t\t\tclientId,\n\t\t\tauthority: `https://login.microsoftonline.com/${tenantId}`,\n\t\t\tclientAssertion: idToken\n\t\t}\n\t});\n\n\tconst result = await app.acquireTokenByClientCredential({ scopes: [`${endpoint}.default`] });\n\n\tif (!result) {\n\t\tthrow new Error('Failed to get access token');\n\t}\n\n\treturn {\n\t\ttoken: result.accessToken,\n\t\texpiresOnTimestamp: result.expiresOn!.getTime(),\n\t\trefreshAfterTimestamp: result.refreshOn?.getTime()\n\t};\n}\n\nasync function main() {\n\tconst cosmosDBAccessToken = await getAccessToken(e('AZURE_DOCUMENTDB_ENDPOINT')!, e('AZURE_TENANT_ID')!, e('AZURE_CLIENT_ID')!, e('AZURE_ID_TOKEN')!);\n\tconst blobServiceAccessToken = await getAccessToken(`https://${e('VSCODE_STAGING_BLOB_STORAGE_ACCOUNT_NAME')}.blob.core.windows.net/`, process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_ID_TOKEN']!);\n\tconsole.log(JSON.stringify({ cosmosDBAccessToken, blobServiceAccessToken }));\n}\n\nif (require.main === module) {\n\tmain().then(() => {\n\t\tprocess.exit(0);\n\t}, err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/azure-pipelines/common/install-builtin-extensions.yml",
    "content": "steps:\n  - pwsh: mkdir .build -ea 0\n    condition: and(succeeded(), contains(variables['Agent.OS'], 'windows'))\n    displayName: Create .build folder\n\n  - script: mkdir -p .build\n    condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows')))\n    displayName: Create .build folder\n\n  - script: node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash\n    displayName: Prepare built-in extensions cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"builtin-extensions\" | .build/builtindepshash'\n      path: .build/builtInExtensions\n      cacheHitVar: BUILTIN_EXTENSIONS_RESTORED\n    displayName: Restore built-in extensions cache\n\n  - script: node build/lib/builtInExtensions.js\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    condition: and(succeeded(), ne(variables.BUILTIN_EXTENSIONS_RESTORED, 'true'))\n    displayName: Download built-in extensions\n"
  },
  {
    "path": "build/azure-pipelines/common/installPlaywright.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nprocess.env.DEBUG = 'pw:install'; // enable logging for this (https://github.com/microsoft/playwright/issues/17394)\nconst { installDefaultBrowsersForNpmInstall } = require('playwright-core/lib/server');\nasync function install() {\n    await installDefaultBrowsersForNpmInstall();\n}\ninstall();\n//# sourceMappingURL=installPlaywright.js.map"
  },
  {
    "path": "build/azure-pipelines/common/listNodeModules.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nif (process.argv.length !== 3) {\n    console.error('Usage: node listNodeModules.js OUTPUT_FILE');\n    process.exit(-1);\n}\nconst ROOT = path_1.default.join(__dirname, '../../../');\nfunction findNodeModulesFiles(location, inNodeModules, result) {\n    const entries = fs_1.default.readdirSync(path_1.default.join(ROOT, location));\n    for (const entry of entries) {\n        const entryPath = `${location}/${entry}`;\n        if (/(^\\/out)|(^\\/src$)|(^\\/.git$)|(^\\/.build$)/.test(entryPath)) {\n            continue;\n        }\n        let stat;\n        try {\n            stat = fs_1.default.statSync(path_1.default.join(ROOT, entryPath));\n        }\n        catch (err) {\n            continue;\n        }\n        if (stat.isDirectory()) {\n            findNodeModulesFiles(entryPath, inNodeModules || (entry === 'node_modules'), result);\n        }\n        else {\n            if (inNodeModules) {\n                result.push(entryPath.substr(1));\n            }\n        }\n    }\n}\nconst result = [];\nfindNodeModulesFiles('', false, result);\nfs_1.default.writeFileSync(process.argv[2], result.join('\\n') + '\\n');\n//# sourceMappingURL=listNodeModules.js.map"
  },
  {
    "path": "build/azure-pipelines/common/listNodeModules.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\n\nif (process.argv.length !== 3) {\n\tconsole.error('Usage: node listNodeModules.js OUTPUT_FILE');\n\tprocess.exit(-1);\n}\n\nconst ROOT = path.join(__dirname, '../../../');\n\nfunction findNodeModulesFiles(location: string, inNodeModules: boolean, result: string[]) {\n\tconst entries = fs.readdirSync(path.join(ROOT, location));\n\tfor (const entry of entries) {\n\t\tconst entryPath = `${location}/${entry}`;\n\n\t\tif (/(^\\/out)|(^\\/src$)|(^\\/.git$)|(^\\/.build$)/.test(entryPath)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet stat: fs.Stats;\n\t\ttry {\n\t\t\tstat = fs.statSync(path.join(ROOT, entryPath));\n\t\t} catch (err) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (stat.isDirectory()) {\n\t\t\tfindNodeModulesFiles(entryPath, inNodeModules || (entry === 'node_modules'), result);\n\t\t} else {\n\t\t\tif (inNodeModules) {\n\t\t\t\tresult.push(entryPath.substr(1));\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst result: string[] = [];\nfindNodeModulesFiles('', false, result);\nfs.writeFileSync(process.argv[2], result.join('\\n') + '\\n');\n"
  },
  {
    "path": "build/azure-pipelines/common/publish.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst stream_1 = require(\"stream\");\nconst promises_1 = require(\"node:stream/promises\");\nconst yauzl_1 = __importDefault(require(\"yauzl\"));\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst retry_1 = require(\"./retry\");\nconst cosmos_1 = require(\"@azure/cosmos\");\nconst child_process_1 = __importDefault(require(\"child_process\"));\nconst os_1 = __importDefault(require(\"os\"));\nconst node_worker_threads_1 = require(\"node:worker_threads\");\nconst msal_node_1 = require(\"@azure/msal-node\");\nconst storage_blob_1 = require(\"@azure/storage-blob\");\nconst jws_1 = __importDefault(require(\"jws\"));\nconst node_timers_1 = require(\"node:timers\");\nfunction e(name) {\n    const result = process.env[name];\n    if (typeof result !== 'string') {\n        throw new Error(`Missing env: ${name}`);\n    }\n    return result;\n}\nfunction hashStream(hashName, stream) {\n    return new Promise((c, e) => {\n        const shasum = crypto_1.default.createHash(hashName);\n        stream\n            .on('data', shasum.update.bind(shasum))\n            .on('error', e)\n            .on('close', () => c(shasum.digest()));\n    });\n}\nvar StatusCode;\n(function (StatusCode) {\n    StatusCode[\"Pass\"] = \"pass\";\n    StatusCode[\"Aborted\"] = \"aborted\";\n    StatusCode[\"Inprogress\"] = \"inprogress\";\n    StatusCode[\"FailCanRetry\"] = \"failCanRetry\";\n    StatusCode[\"FailDoNotRetry\"] = \"failDoNotRetry\";\n    StatusCode[\"PendingAnalysis\"] = \"pendingAnalysis\";\n    StatusCode[\"Cancelled\"] = \"cancelled\";\n})(StatusCode || (StatusCode = {}));\nfunction getCertificateBuffer(input) {\n    return Buffer.from(input.replace(/-----BEGIN CERTIFICATE-----|-----END CERTIFICATE-----|\\n/g, ''), 'base64');\n}\nfunction getThumbprint(input, algorithm) {\n    const buffer = getCertificateBuffer(input);\n    return crypto_1.default.createHash(algorithm).update(buffer).digest();\n}\nfunction getKeyFromPFX(pfx) {\n    const pfxCertificatePath = path_1.default.join(os_1.default.tmpdir(), 'cert.pfx');\n    const pemKeyPath = path_1.default.join(os_1.default.tmpdir(), 'key.pem');\n    try {\n        const pfxCertificate = Buffer.from(pfx, 'base64');\n        fs_1.default.writeFileSync(pfxCertificatePath, pfxCertificate);\n        child_process_1.default.execSync(`openssl pkcs12 -in \"${pfxCertificatePath}\" -nocerts -nodes -out \"${pemKeyPath}\" -passin pass:`);\n        const raw = fs_1.default.readFileSync(pemKeyPath, 'utf-8');\n        const result = raw.match(/-----BEGIN PRIVATE KEY-----[\\s\\S]+?-----END PRIVATE KEY-----/g)[0];\n        return result;\n    }\n    finally {\n        fs_1.default.rmSync(pfxCertificatePath, { force: true });\n        fs_1.default.rmSync(pemKeyPath, { force: true });\n    }\n}\nfunction getCertificatesFromPFX(pfx) {\n    const pfxCertificatePath = path_1.default.join(os_1.default.tmpdir(), 'cert.pfx');\n    const pemCertificatePath = path_1.default.join(os_1.default.tmpdir(), 'cert.pem');\n    try {\n        const pfxCertificate = Buffer.from(pfx, 'base64');\n        fs_1.default.writeFileSync(pfxCertificatePath, pfxCertificate);\n        child_process_1.default.execSync(`openssl pkcs12 -in \"${pfxCertificatePath}\" -nokeys -out \"${pemCertificatePath}\" -passin pass:`);\n        const raw = fs_1.default.readFileSync(pemCertificatePath, 'utf-8');\n        const matches = raw.match(/-----BEGIN CERTIFICATE-----[\\s\\S]+?-----END CERTIFICATE-----/g);\n        return matches ? matches.reverse() : [];\n    }\n    finally {\n        fs_1.default.rmSync(pfxCertificatePath, { force: true });\n        fs_1.default.rmSync(pemCertificatePath, { force: true });\n    }\n}\nclass ESRPReleaseService {\n    log;\n    clientId;\n    accessToken;\n    requestSigningCertificates;\n    requestSigningKey;\n    containerClient;\n    stagingSasToken;\n    static async create(log, tenantId, clientId, authCertificatePfx, requestSigningCertificatePfx, containerClient, stagingSasToken) {\n        const authKey = getKeyFromPFX(authCertificatePfx);\n        const authCertificate = getCertificatesFromPFX(authCertificatePfx)[0];\n        const requestSigningKey = getKeyFromPFX(requestSigningCertificatePfx);\n        const requestSigningCertificates = getCertificatesFromPFX(requestSigningCertificatePfx);\n        const app = new msal_node_1.ConfidentialClientApplication({\n            auth: {\n                clientId,\n                authority: `https://login.microsoftonline.com/${tenantId}`,\n                clientCertificate: {\n                    thumbprintSha256: getThumbprint(authCertificate, 'sha256').toString('hex'),\n                    privateKey: authKey,\n                    x5c: authCertificate\n                }\n            }\n        });\n        const response = await app.acquireTokenByClientCredential({\n            scopes: ['https://api.esrp.microsoft.com/.default']\n        });\n        return new ESRPReleaseService(log, clientId, response.accessToken, requestSigningCertificates, requestSigningKey, containerClient, stagingSasToken);\n    }\n    static API_URL = 'https://api.esrp.microsoft.com/api/v3/releaseservices/clients/';\n    constructor(log, clientId, accessToken, requestSigningCertificates, requestSigningKey, containerClient, stagingSasToken) {\n        this.log = log;\n        this.clientId = clientId;\n        this.accessToken = accessToken;\n        this.requestSigningCertificates = requestSigningCertificates;\n        this.requestSigningKey = requestSigningKey;\n        this.containerClient = containerClient;\n        this.stagingSasToken = stagingSasToken;\n    }\n    async createRelease(version, filePath, friendlyFileName) {\n        const correlationId = crypto_1.default.randomUUID();\n        const blobClient = this.containerClient.getBlockBlobClient(correlationId);\n        this.log(`Uploading ${filePath} to ${blobClient.url}`);\n        await blobClient.uploadFile(filePath);\n        this.log('Uploaded blob successfully');\n        try {\n            this.log(`Submitting release for ${version}: ${filePath}`);\n            const submitReleaseResult = await this.submitRelease(version, filePath, friendlyFileName, correlationId, blobClient);\n            this.log(`Successfully submitted release ${submitReleaseResult.operationId}. Polling for completion...`);\n            // Poll every 5 seconds, wait 60 minutes max -> poll 60/5*60=720 times\n            for (let i = 0; i < 720; i++) {\n                await new Promise(c => setTimeout(c, 5000));\n                const releaseStatus = await this.getReleaseStatus(submitReleaseResult.operationId);\n                if (releaseStatus.status === 'pass') {\n                    break;\n                }\n                else if (releaseStatus.status === 'aborted') {\n                    this.log(JSON.stringify(releaseStatus));\n                    throw new Error(`Release was aborted`);\n                }\n                else if (releaseStatus.status !== 'inprogress') {\n                    this.log(JSON.stringify(releaseStatus));\n                    throw new Error(`Unknown error when polling for release`);\n                }\n            }\n            const releaseDetails = await this.getReleaseDetails(submitReleaseResult.operationId);\n            if (releaseDetails.status !== 'pass') {\n                throw new Error(`Timed out waiting for release: ${JSON.stringify(releaseDetails)}`);\n            }\n            this.log('Successfully created release:', releaseDetails.files[0].fileDownloadDetails[0].downloadUrl);\n            return releaseDetails.files[0].fileDownloadDetails[0].downloadUrl;\n        }\n        finally {\n            this.log(`Deleting blob ${blobClient.url}`);\n            await blobClient.delete();\n            this.log('Deleted blob successfully');\n        }\n    }\n    async submitRelease(version, filePath, friendlyFileName, correlationId, blobClient) {\n        const size = fs_1.default.statSync(filePath).size;\n        const hash = await hashStream('sha256', fs_1.default.createReadStream(filePath));\n        const blobUrl = `${blobClient.url}?${this.stagingSasToken}`;\n        const message = {\n            customerCorrelationId: correlationId,\n            esrpCorrelationId: correlationId,\n            driEmail: ['joao.moreno@microsoft.com'],\n            createdBy: { userPrincipalName: 'jomo@microsoft.com' },\n            owners: [{ owner: { userPrincipalName: 'jomo@microsoft.com' } }],\n            approvers: [{ approver: { userPrincipalName: 'jomo@microsoft.com' }, isAutoApproved: true, isMandatory: false }],\n            releaseInfo: {\n                title: 'VS Code',\n                properties: {\n                    'ReleaseContentType': 'InstallPackage'\n                },\n                minimumNumberOfApprovers: 1\n            },\n            productInfo: {\n                name: 'VS Code',\n                version,\n                description: 'VS Code'\n            },\n            accessPermissionsInfo: {\n                mainPublisher: 'VSCode',\n                channelDownloadEntityDetails: {\n                    AllDownloadEntities: ['VSCode']\n                }\n            },\n            routingInfo: {\n                intent: 'filedownloadlinkgeneration'\n            },\n            files: [{\n                    name: path_1.default.basename(filePath),\n                    friendlyFileName,\n                    tenantFileLocation: blobUrl,\n                    tenantFileLocationType: 'AzureBlob',\n                    sourceLocation: {\n                        type: 'azureBlob',\n                        blobUrl\n                    },\n                    hashType: 'sha256',\n                    hash: Array.from(hash),\n                    sizeInBytes: size\n                }]\n        };\n        message.jwsToken = await this.generateJwsToken(message);\n        const res = await fetch(`${ESRPReleaseService.API_URL}${this.clientId}/workflows/release/operations`, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n                'Authorization': `Bearer ${this.accessToken}`\n            },\n            body: JSON.stringify(message)\n        });\n        if (!res.ok) {\n            const text = await res.text();\n            throw new Error(`Failed to submit release: ${res.statusText}\\n${text}`);\n        }\n        return await res.json();\n    }\n    async getReleaseStatus(releaseId) {\n        const url = `${ESRPReleaseService.API_URL}${this.clientId}/workflows/release/operations/grs/${releaseId}`;\n        const res = await fetch(url, {\n            headers: {\n                'Authorization': `Bearer ${this.accessToken}`\n            }\n        });\n        if (!res.ok) {\n            const text = await res.text();\n            throw new Error(`Failed to get release status: ${res.statusText}\\n${text}`);\n        }\n        return await res.json();\n    }\n    async getReleaseDetails(releaseId) {\n        const url = `${ESRPReleaseService.API_URL}${this.clientId}/workflows/release/operations/grd/${releaseId}`;\n        const res = await fetch(url, {\n            headers: {\n                'Authorization': `Bearer ${this.accessToken}`\n            }\n        });\n        if (!res.ok) {\n            const text = await res.text();\n            throw new Error(`Failed to get release status: ${res.statusText}\\n${text}`);\n        }\n        return await res.json();\n    }\n    async generateJwsToken(message) {\n        return jws_1.default.sign({\n            header: {\n                alg: 'RS256',\n                crit: ['exp', 'x5t'],\n                // Release service uses ticks, not seconds :roll_eyes: (https://stackoverflow.com/a/7968483)\n                exp: ((Date.now() + (6 * 60 * 1000)) * 10000) + 621355968000000000,\n                // Release service uses hex format, not base64url :roll_eyes:\n                x5t: getThumbprint(this.requestSigningCertificates[0], 'sha1').toString('hex'),\n                // Release service uses a '.' separated string, not an array of strings :roll_eyes:\n                x5c: this.requestSigningCertificates.map(c => getCertificateBuffer(c).toString('base64url')).join('.'),\n            },\n            payload: message,\n            privateKey: this.requestSigningKey,\n        });\n    }\n}\nclass State {\n    statePath;\n    set = new Set();\n    constructor() {\n        const pipelineWorkspacePath = e('PIPELINE_WORKSPACE');\n        const previousState = fs_1.default.readdirSync(pipelineWorkspacePath)\n            .map(name => /^artifacts_processed_(\\d+)$/.exec(name))\n            .filter((match) => !!match)\n            .map(match => ({ name: match[0], attempt: Number(match[1]) }))\n            .sort((a, b) => b.attempt - a.attempt)[0];\n        if (previousState) {\n            const previousStatePath = path_1.default.join(pipelineWorkspacePath, previousState.name, previousState.name + '.txt');\n            fs_1.default.readFileSync(previousStatePath, 'utf8').split(/\\n/).filter(name => !!name).forEach(name => this.set.add(name));\n        }\n        const stageAttempt = e('SYSTEM_STAGEATTEMPT');\n        this.statePath = path_1.default.join(pipelineWorkspacePath, `artifacts_processed_${stageAttempt}`, `artifacts_processed_${stageAttempt}.txt`);\n        fs_1.default.mkdirSync(path_1.default.dirname(this.statePath), { recursive: true });\n        fs_1.default.writeFileSync(this.statePath, [...this.set.values()].map(name => `${name}\\n`).join(''));\n    }\n    get size() {\n        return this.set.size;\n    }\n    has(name) {\n        return this.set.has(name);\n    }\n    add(name) {\n        this.set.add(name);\n        fs_1.default.appendFileSync(this.statePath, `${name}\\n`);\n    }\n    [Symbol.iterator]() {\n        return this.set[Symbol.iterator]();\n    }\n}\nconst azdoFetchOptions = {\n    headers: {\n        // Pretend we're a web browser to avoid download rate limits\n        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',\n        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',\n        'Accept-Encoding': 'gzip, deflate, br',\n        'Accept-Language': 'en-US,en;q=0.9',\n        'Referer': 'https://dev.azure.com',\n        Authorization: `Bearer ${e('SYSTEM_ACCESSTOKEN')}`\n    }\n};\nasync function requestAZDOAPI(path) {\n    const abortController = new AbortController();\n    const timeout = setTimeout(() => abortController.abort(), 2 * 60 * 1000);\n    try {\n        const res = await fetch(`${e('BUILDS_API_URL')}${path}?api-version=6.0`, { ...azdoFetchOptions, signal: abortController.signal });\n        if (!res.ok) {\n            throw new Error(`Unexpected status code: ${res.status}`);\n        }\n        return await res.json();\n    }\n    finally {\n        clearTimeout(timeout);\n    }\n}\nasync function getPipelineArtifacts() {\n    const result = await requestAZDOAPI('artifacts');\n    return result.value.filter(a => /^vscode_/.test(a.name) && !/sbom$/.test(a.name));\n}\nasync function getPipelineTimeline() {\n    return await requestAZDOAPI('timeline');\n}\nasync function downloadArtifact(artifact, downloadPath) {\n    const abortController = new AbortController();\n    const timeout = setTimeout(() => abortController.abort(), 4 * 60 * 1000);\n    try {\n        const res = await fetch(artifact.resource.downloadUrl, { ...azdoFetchOptions, signal: abortController.signal });\n        if (!res.ok) {\n            throw new Error(`Unexpected status code: ${res.status}`);\n        }\n        await (0, promises_1.pipeline)(stream_1.Readable.fromWeb(res.body), fs_1.default.createWriteStream(downloadPath));\n    }\n    finally {\n        clearTimeout(timeout);\n    }\n}\nasync function unzip(packagePath, outputPath) {\n    return new Promise((resolve, reject) => {\n        yauzl_1.default.open(packagePath, { lazyEntries: true, autoClose: true }, (err, zipfile) => {\n            if (err) {\n                return reject(err);\n            }\n            const result = [];\n            zipfile.on('entry', entry => {\n                if (/\\/$/.test(entry.fileName)) {\n                    zipfile.readEntry();\n                }\n                else {\n                    zipfile.openReadStream(entry, (err, istream) => {\n                        if (err) {\n                            return reject(err);\n                        }\n                        const filePath = path_1.default.join(outputPath, entry.fileName);\n                        fs_1.default.mkdirSync(path_1.default.dirname(filePath), { recursive: true });\n                        const ostream = fs_1.default.createWriteStream(filePath);\n                        ostream.on('finish', () => {\n                            result.push(filePath);\n                            zipfile.readEntry();\n                        });\n                        istream?.on('error', err => reject(err));\n                        istream.pipe(ostream);\n                    });\n                }\n            });\n            zipfile.on('close', () => resolve(result));\n            zipfile.readEntry();\n        });\n    });\n}\n// Contains all of the logic for mapping details to our actual product names in CosmosDB\nfunction getPlatform(product, os, arch, type) {\n    switch (os) {\n        case 'win32':\n            switch (product) {\n                case 'client': {\n                    switch (type) {\n                        case 'archive':\n                            return `win32-${arch}-archive`;\n                        case 'setup':\n                            return `win32-${arch}`;\n                        case 'user-setup':\n                            return `win32-${arch}-user`;\n                        default:\n                            throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n                    }\n                }\n                case 'server':\n                    return `server-win32-${arch}`;\n                case 'web':\n                    return `server-win32-${arch}-web`;\n                case 'cli':\n                    return `cli-win32-${arch}`;\n                default:\n                    throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n            }\n        case 'alpine':\n            switch (product) {\n                case 'server':\n                    return `server-alpine-${arch}`;\n                case 'web':\n                    return `server-alpine-${arch}-web`;\n                case 'cli':\n                    return `cli-alpine-${arch}`;\n                default:\n                    throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n            }\n        case 'linux':\n            switch (type) {\n                case 'snap':\n                    return `linux-snap-${arch}`;\n                case 'archive-unsigned':\n                    switch (product) {\n                        case 'client':\n                            return `linux-${arch}`;\n                        case 'server':\n                            return `server-linux-${arch}`;\n                        case 'web':\n                            if (arch === 'standalone') {\n                                return 'web-standalone';\n                            }\n                            return `server-linux-${arch}-web`;\n                        default:\n                            throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n                    }\n                case 'deb-package':\n                    return `linux-deb-${arch}`;\n                case 'rpm-package':\n                    return `linux-rpm-${arch}`;\n                case 'cli':\n                    return `cli-linux-${arch}`;\n                default:\n                    throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n            }\n        case 'darwin':\n            switch (product) {\n                case 'client':\n                    if (arch === 'x64') {\n                        return 'darwin';\n                    }\n                    return `darwin-${arch}`;\n                case 'server':\n                    if (arch === 'x64') {\n                        return 'server-darwin';\n                    }\n                    return `server-darwin-${arch}`;\n                case 'web':\n                    if (arch === 'x64') {\n                        return 'server-darwin-web';\n                    }\n                    return `server-darwin-${arch}-web`;\n                case 'cli':\n                    return `cli-darwin-${arch}`;\n                default:\n                    throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n            }\n        default:\n            throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n    }\n}\n// Contains all of the logic for mapping types to our actual types in CosmosDB\nfunction getRealType(type) {\n    switch (type) {\n        case 'user-setup':\n            return 'setup';\n        case 'deb-package':\n        case 'rpm-package':\n            return 'package';\n        default:\n            return type;\n    }\n}\nasync function withLease(client, fn) {\n    const lease = client.getBlobLeaseClient();\n    for (let i = 0; i < 360; i++) { // Try to get lease for 30 minutes\n        try {\n            await client.uploadData(new ArrayBuffer()); // blob needs to exist for lease to be acquired\n            await lease.acquireLease(60);\n            try {\n                const abortController = new AbortController();\n                const refresher = new Promise((c, e) => {\n                    abortController.signal.onabort = () => {\n                        (0, node_timers_1.clearInterval)(interval);\n                        c();\n                    };\n                    const interval = (0, node_timers_1.setInterval)(() => {\n                        lease.renewLease().catch(err => {\n                            (0, node_timers_1.clearInterval)(interval);\n                            e(new Error('Failed to renew lease ' + err));\n                        });\n                    }, 30_000);\n                });\n                const result = await Promise.race([fn(), refresher]);\n                abortController.abort();\n                return result;\n            }\n            finally {\n                await lease.releaseLease();\n            }\n        }\n        catch (err) {\n            if (err.statusCode !== 409 && err.statusCode !== 412) {\n                throw err;\n            }\n            await new Promise(c => setTimeout(c, 5000));\n        }\n    }\n    throw new Error('Failed to acquire lease on blob after 30 minutes');\n}\nasync function processArtifact(artifact, filePath) {\n    const log = (...args) => console.log(`[${artifact.name}]`, ...args);\n    const match = /^vscode_(?<product>[^_]+)_(?<os>[^_]+)(?:_legacy)?_(?<arch>[^_]+)_(?<unprocessedType>[^_]+)$/.exec(artifact.name);\n    if (!match) {\n        throw new Error(`Invalid artifact name: ${artifact.name}`);\n    }\n    const { cosmosDBAccessToken, blobServiceAccessToken } = JSON.parse(e('PUBLISH_AUTH_TOKENS'));\n    const quality = e('VSCODE_QUALITY');\n    const version = e('BUILD_SOURCEVERSION');\n    const friendlyFileName = `${quality}/${version}/${path_1.default.basename(filePath)}`;\n    const blobServiceClient = new storage_blob_1.BlobServiceClient(`https://${e('VSCODE_STAGING_BLOB_STORAGE_ACCOUNT_NAME')}.blob.core.windows.net/`, { getToken: async () => blobServiceAccessToken });\n    const leasesContainerClient = blobServiceClient.getContainerClient('leases');\n    await leasesContainerClient.createIfNotExists();\n    const leaseBlobClient = leasesContainerClient.getBlockBlobClient(friendlyFileName);\n    log(`Acquiring lease for: ${friendlyFileName}`);\n    await withLease(leaseBlobClient, async () => {\n        log(`Successfully acquired lease for: ${friendlyFileName}`);\n        const url = `${e('PRSS_CDN_URL')}/${friendlyFileName}`;\n        const res = await (0, retry_1.retry)(() => fetch(url));\n        if (res.status === 200) {\n            log(`Already released and provisioned: ${url}`);\n        }\n        else {\n            const stagingContainerClient = blobServiceClient.getContainerClient('staging');\n            await stagingContainerClient.createIfNotExists();\n            const now = new Date().valueOf();\n            const oneHour = 60 * 60 * 1000;\n            const oneHourAgo = new Date(now - oneHour);\n            const oneHourFromNow = new Date(now + oneHour);\n            const userDelegationKey = await blobServiceClient.getUserDelegationKey(oneHourAgo, oneHourFromNow);\n            const sasOptions = { containerName: 'staging', permissions: storage_blob_1.ContainerSASPermissions.from({ read: true }), startsOn: oneHourAgo, expiresOn: oneHourFromNow };\n            const stagingSasToken = (0, storage_blob_1.generateBlobSASQueryParameters)(sasOptions, userDelegationKey, e('VSCODE_STAGING_BLOB_STORAGE_ACCOUNT_NAME')).toString();\n            const releaseService = await ESRPReleaseService.create(log, e('RELEASE_TENANT_ID'), e('RELEASE_CLIENT_ID'), e('RELEASE_AUTH_CERT'), e('RELEASE_REQUEST_SIGNING_CERT'), stagingContainerClient, stagingSasToken);\n            await releaseService.createRelease(version, filePath, friendlyFileName);\n        }\n        const { product, os, arch, unprocessedType } = match.groups;\n        const platform = getPlatform(product, os, arch, unprocessedType);\n        const type = getRealType(unprocessedType);\n        const size = fs_1.default.statSync(filePath).size;\n        const stream = fs_1.default.createReadStream(filePath);\n        const [hash, sha256hash] = await Promise.all([hashStream('sha1', stream), hashStream('sha256', stream)]); // CodeQL [SM04514] Using SHA1 only for legacy reasons, we are actually only respecting SHA256\n        const asset = { platform, type, url, hash: hash.toString('hex'), sha256hash: sha256hash.toString('hex'), size, supportsFastUpdate: true };\n        log('Creating asset...');\n        const result = await (0, retry_1.retry)(async (attempt) => {\n            log(`Creating asset in Cosmos DB (attempt ${attempt})...`);\n            const client = new cosmos_1.CosmosClient({ endpoint: e('AZURE_DOCUMENTDB_ENDPOINT'), tokenProvider: () => Promise.resolve(`type=aad&ver=1.0&sig=${cosmosDBAccessToken.token}`) });\n            const scripts = client.database('builds').container(quality).scripts;\n            const { resource: result } = await scripts.storedProcedure('createAsset').execute('', [version, asset, true]);\n            return result;\n        });\n        if (result === 'already exists') {\n            log('Asset already exists!');\n        }\n        else {\n            log('Asset successfully created: ', JSON.stringify(asset, undefined, 2));\n        }\n    });\n    log(`Successfully released lease for: ${friendlyFileName}`);\n}\n// It is VERY important that we don't download artifacts too much too fast from AZDO.\n// AZDO throttles us SEVERELY if we do. Not just that, but they also close open\n// sockets, so the whole things turns to a grinding halt. So, downloading and extracting\n// happens serially in the main thread, making the downloads are spaced out\n// properly. For each extracted artifact, we spawn a worker thread to upload it to\n// the CDN and finally update the build in Cosmos DB.\nasync function main() {\n    if (!node_worker_threads_1.isMainThread) {\n        const { artifact, artifactFilePath } = node_worker_threads_1.workerData;\n        await processArtifact(artifact, artifactFilePath);\n        return;\n    }\n    const done = new State();\n    const processing = new Set();\n    for (const name of done) {\n        console.log(`\\u2705 ${name}`);\n    }\n    const stages = new Set(['Compile']);\n    if (e('VSCODE_BUILD_STAGE_LINUX') === 'True' ||\n        e('VSCODE_BUILD_STAGE_ALPINE') === 'True' ||\n        e('VSCODE_BUILD_STAGE_MACOS') === 'True' ||\n        e('VSCODE_BUILD_STAGE_WINDOWS') === 'True') {\n        stages.add('CompileCLI');\n    }\n    if (e('VSCODE_BUILD_STAGE_WINDOWS') === 'True') {\n        stages.add('Windows');\n    }\n    if (e('VSCODE_BUILD_STAGE_LINUX') === 'True') {\n        stages.add('Linux');\n    }\n    if (e('VSCODE_BUILD_STAGE_ALPINE') === 'True') {\n        stages.add('Alpine');\n    }\n    if (e('VSCODE_BUILD_STAGE_MACOS') === 'True') {\n        stages.add('macOS');\n    }\n    if (e('VSCODE_BUILD_STAGE_WEB') === 'True') {\n        stages.add('Web');\n    }\n    let resultPromise = Promise.resolve([]);\n    const operations = [];\n    while (true) {\n        const [timeline, artifacts] = await Promise.all([(0, retry_1.retry)(() => getPipelineTimeline()), (0, retry_1.retry)(() => getPipelineArtifacts())]);\n        const stagesCompleted = new Set(timeline.records.filter(r => r.type === 'Stage' && r.state === 'completed' && stages.has(r.name)).map(r => r.name));\n        const stagesInProgress = [...stages].filter(s => !stagesCompleted.has(s));\n        const artifactsInProgress = artifacts.filter(a => processing.has(a.name));\n        if (stagesInProgress.length === 0 && artifacts.length === done.size + processing.size) {\n            break;\n        }\n        else if (stagesInProgress.length > 0) {\n            console.log('Stages in progress:', stagesInProgress.join(', '));\n        }\n        else if (artifactsInProgress.length > 0) {\n            console.log('Artifacts in progress:', artifactsInProgress.map(a => a.name).join(', '));\n        }\n        else {\n            console.log(`Waiting for a total of ${artifacts.length}, ${done.size} done, ${processing.size} in progress...`);\n        }\n        for (const artifact of artifacts) {\n            if (done.has(artifact.name) || processing.has(artifact.name)) {\n                continue;\n            }\n            console.log(`[${artifact.name}] Found new artifact`);\n            const artifactZipPath = path_1.default.join(e('AGENT_TEMPDIRECTORY'), `${artifact.name}.zip`);\n            await (0, retry_1.retry)(async (attempt) => {\n                const start = Date.now();\n                console.log(`[${artifact.name}] Downloading (attempt ${attempt})...`);\n                await downloadArtifact(artifact, artifactZipPath);\n                const archiveSize = fs_1.default.statSync(artifactZipPath).size;\n                const downloadDurationS = (Date.now() - start) / 1000;\n                const downloadSpeedKBS = Math.round((archiveSize / 1024) / downloadDurationS);\n                console.log(`[${artifact.name}] Successfully downloaded after ${Math.floor(downloadDurationS)} seconds(${downloadSpeedKBS} KB/s).`);\n            });\n            const artifactFilePaths = await unzip(artifactZipPath, e('AGENT_TEMPDIRECTORY'));\n            const artifactFilePath = artifactFilePaths.filter(p => !/_manifest/.test(p))[0];\n            processing.add(artifact.name);\n            const promise = new Promise((resolve, reject) => {\n                const worker = new node_worker_threads_1.Worker(__filename, { workerData: { artifact, artifactFilePath } });\n                worker.on('error', reject);\n                worker.on('exit', code => {\n                    if (code === 0) {\n                        resolve();\n                    }\n                    else {\n                        reject(new Error(`[${artifact.name}] Worker stopped with exit code ${code}`));\n                    }\n                });\n            });\n            const operation = promise.then(() => {\n                processing.delete(artifact.name);\n                done.add(artifact.name);\n                console.log(`\\u2705 ${artifact.name} `);\n            });\n            operations.push({ name: artifact.name, operation });\n            resultPromise = Promise.allSettled(operations.map(o => o.operation));\n        }\n        await new Promise(c => setTimeout(c, 10_000));\n    }\n    console.log(`Found all ${done.size + processing.size} artifacts, waiting for ${processing.size} artifacts to finish publishing...`);\n    const artifactsInProgress = operations.filter(o => processing.has(o.name));\n    if (artifactsInProgress.length > 0) {\n        console.log('Artifacts in progress:', artifactsInProgress.map(a => a.name).join(', '));\n    }\n    const results = await resultPromise;\n    for (let i = 0; i < operations.length; i++) {\n        const result = results[i];\n        if (result.status === 'rejected') {\n            console.error(`[${operations[i].name}]`, result.reason);\n        }\n    }\n    if (results.some(r => r.status === 'rejected')) {\n        throw new Error('Some artifacts failed to publish');\n    }\n    console.log(`All ${done.size} artifacts published!`);\n}\nif (require.main === module) {\n    main().then(() => {\n        process.exit(0);\n    }, err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=publish.js.map"
  },
  {
    "path": "build/azure-pipelines/common/publish.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport { Readable } from 'stream';\nimport type { ReadableStream } from 'stream/web';\nimport { pipeline } from 'node:stream/promises';\nimport yauzl from 'yauzl';\nimport crypto from 'crypto';\nimport { retry } from './retry';\nimport { CosmosClient } from '@azure/cosmos';\nimport cp from 'child_process';\nimport os from 'os';\nimport { Worker, isMainThread, workerData } from 'node:worker_threads';\nimport { ConfidentialClientApplication } from '@azure/msal-node';\nimport { BlobClient, BlobServiceClient, BlockBlobClient, ContainerClient, ContainerSASPermissions, generateBlobSASQueryParameters } from '@azure/storage-blob';\nimport jws from 'jws';\nimport { clearInterval, setInterval } from 'node:timers';\n\nfunction e(name: string): string {\n\tconst result = process.env[name];\n\n\tif (typeof result !== 'string') {\n\t\tthrow new Error(`Missing env: ${name}`);\n\t}\n\n\treturn result;\n}\n\nfunction hashStream(hashName: string, stream: Readable): Promise<Buffer> {\n\treturn new Promise<Buffer>((c, e) => {\n\t\tconst shasum = crypto.createHash(hashName);\n\n\t\tstream\n\t\t\t.on('data', shasum.update.bind(shasum))\n\t\t\t.on('error', e)\n\t\t\t.on('close', () => c(shasum.digest()));\n\t});\n}\n\ninterface ReleaseSubmitResponse {\n\toperationId: string;\n\tesrpCorrelationId: string;\n\tcode?: string;\n\tmessage?: string;\n\ttarget?: string;\n\tinnerError?: any;\n}\n\ninterface ReleaseActivityInfo {\n\tactivityId: string;\n\tactivityType: string;\n\tname: string;\n\tstatus: string;\n\terrorCode: number;\n\terrorMessages: string[];\n\tbeginTime?: Date;\n\tendTime?: Date;\n\tlastModifiedAt?: Date;\n}\n\ninterface InnerServiceError {\n\tcode: string;\n\tdetails: { [key: string]: string };\n\tinnerError?: InnerServiceError;\n}\n\ninterface ReleaseError {\n\terrorCode: number;\n\terrorMessages: string[];\n}\n\nconst enum StatusCode {\n\tPass = 'pass',\n\tAborted = 'aborted',\n\tInprogress = 'inprogress',\n\tFailCanRetry = 'failCanRetry',\n\tFailDoNotRetry = 'failDoNotRetry',\n\tPendingAnalysis = 'pendingAnalysis',\n\tCancelled = 'cancelled'\n}\n\ninterface ReleaseResultMessage {\n\tactivities: ReleaseActivityInfo[];\n\tchildWorkflowType: string;\n\tclientId: string;\n\tcustomerCorrelationId: string;\n\terrorInfo: InnerServiceError;\n\tgroupId: string;\n\tlastModifiedAt: Date;\n\toperationId: string;\n\treleaseError: ReleaseError;\n\trequestSubmittedAt: Date;\n\troutedRegion: string;\n\tstatus: StatusCode;\n\ttotalFileCount: number;\n\ttotalReleaseSize: number;\n\tversion: string;\n}\n\ninterface ReleaseFileInfo {\n\tname?: string;\n\thash?: number[];\n\tsourceLocation?: FileLocation;\n\tsizeInBytes?: number;\n\thashType?: FileHashType;\n\tfileId?: any;\n\tdistributionRelativePath?: string;\n\tpartNumber?: string;\n\tfriendlyFileName?: string;\n\ttenantFileLocationType?: string;\n\ttenantFileLocation?: string;\n\tsignedEngineeringCopyLocation?: string;\n\tencryptedDistributionBlobLocation?: string;\n\tpreEncryptedDistributionBlobLocation?: string;\n\tsecondaryDistributionHashRequired?: boolean;\n\tsecondaryDistributionHashType?: FileHashType;\n\tlastModifiedAt?: Date;\n\tcultureCodes?: string[];\n\tdisplayFileInDownloadCenter?: boolean;\n\tisPrimaryFileInDownloadCenter?: boolean;\n\tfileDownloadDetails?: FileDownloadDetails[];\n}\n\ninterface ReleaseDetailsFileInfo extends ReleaseFileInfo { }\n\ninterface ReleaseDetailsMessage extends ReleaseResultMessage {\n\tclusterRegion: string;\n\tcorrelationVector: string;\n\treleaseCompletedAt?: Date;\n\treleaseInfo: ReleaseInfo;\n\tproductInfo: ProductInfo;\n\tcreatedBy: UserInfo;\n\towners: OwnerInfo[];\n\taccessPermissionsInfo: AccessPermissionsInfo;\n\tfiles: ReleaseDetailsFileInfo[];\n\tcomments: string[];\n\tcancellationReason: string;\n\tdownloadCenterInfo: DownloadCenterInfo;\n}\n\n\ninterface ProductInfo {\n\tname?: string;\n\tversion?: string;\n\tdescription?: string;\n}\n\ninterface ReleaseInfo {\n\ttitle?: string;\n\tminimumNumberOfApprovers: number;\n\tproperties?: { [key: string]: string };\n\tisRevision?: boolean;\n\trevisionNumber?: string;\n}\n\ntype FileLocationType = 'azureBlob';\n\ninterface FileLocation {\n\ttype: FileLocationType;\n\tblobUrl: string;\n\tuncPath?: string;\n\turl?: string;\n}\n\ntype FileHashType = 'sha256' | 'sha1';\n\ninterface FileDownloadDetails {\n\tportalName: string;\n\tdownloadUrl: string;\n}\n\ninterface RoutingInfo {\n\tintent?: string;\n\tcontentType?: string;\n\tcontentOrigin?: string;\n\tproductState?: string;\n\taudience?: string;\n}\n\ninterface ReleaseFileInfo {\n\tname?: string;\n\thash?: number[];\n\tsourceLocation?: FileLocation;\n\tsizeInBytes?: number;\n\thashType?: FileHashType;\n\tfileId?: any;\n\tdistributionRelativePath?: string;\n\tpartNumber?: string;\n\tfriendlyFileName?: string;\n\ttenantFileLocationType?: string;\n\ttenantFileLocation?: string;\n\tsignedEngineeringCopyLocation?: string;\n\tencryptedDistributionBlobLocation?: string;\n\tpreEncryptedDistributionBlobLocation?: string;\n\tsecondaryDistributionHashRequired?: boolean;\n\tsecondaryDistributionHashType?: FileHashType;\n\tlastModifiedAt?: Date;\n\tcultureCodes?: string[];\n\tdisplayFileInDownloadCenter?: boolean;\n\tisPrimaryFileInDownloadCenter?: boolean;\n\tfileDownloadDetails?: FileDownloadDetails[];\n}\n\ninterface UserInfo {\n\tuserPrincipalName?: string;\n}\n\ninterface OwnerInfo {\n\towner: UserInfo;\n}\n\ninterface ApproverInfo {\n\tapprover: UserInfo;\n\tisAutoApproved: boolean;\n\tisMandatory: boolean;\n}\n\ninterface AccessPermissionsInfo {\n\tmainPublisher?: string;\n\treleasePublishers?: string[];\n\tchannelDownloadEntityDetails?: { [key: string]: string[] };\n}\n\ninterface DownloadCenterLocaleInfo {\n\tcultureCode?: string;\n\tdownloadTitle?: string;\n\tshortName?: string;\n\tshortDescription?: string;\n\tlongDescription?: string;\n\tinstructions?: string;\n\tadditionalInfo?: string;\n\tkeywords?: string[];\n\tversion?: string;\n\trelatedLinks?: { [key: string]: URL };\n}\n\ninterface DownloadCenterInfo {\n\tdownloadCenterId: number;\n\tpublishToDownloadCenter?: boolean;\n\tpublishingGroup?: string;\n\toperatingSystems?: string[];\n\trelatedReleases?: string[];\n\tkbNumbers?: string[];\n\tsbNumbers?: string[];\n\tlocales?: DownloadCenterLocaleInfo[];\n\tadditionalProperties?: { [key: string]: string };\n}\n\ninterface ReleaseRequestMessage {\n\tdriEmail: string[];\n\tgroupId?: string;\n\tcustomerCorrelationId: string;\n\tesrpCorrelationId: string;\n\tcontextData?: { [key: string]: string };\n\treleaseInfo: ReleaseInfo;\n\tproductInfo: ProductInfo;\n\tfiles: ReleaseFileInfo[];\n\troutingInfo?: RoutingInfo;\n\tcreatedBy: UserInfo;\n\towners: OwnerInfo[];\n\tapprovers: ApproverInfo[];\n\taccessPermissionsInfo: AccessPermissionsInfo;\n\tjwsToken?: string;\n\tpublisherId?: string;\n\tdownloadCenterInfo?: DownloadCenterInfo;\n}\n\nfunction getCertificateBuffer(input: string) {\n\treturn Buffer.from(input.replace(/-----BEGIN CERTIFICATE-----|-----END CERTIFICATE-----|\\n/g, ''), 'base64');\n}\n\nfunction getThumbprint(input: string, algorithm: string): Buffer {\n\tconst buffer = getCertificateBuffer(input);\n\treturn crypto.createHash(algorithm).update(buffer).digest();\n}\n\nfunction getKeyFromPFX(pfx: string): string {\n\tconst pfxCertificatePath = path.join(os.tmpdir(), 'cert.pfx');\n\tconst pemKeyPath = path.join(os.tmpdir(), 'key.pem');\n\n\ttry {\n\t\tconst pfxCertificate = Buffer.from(pfx, 'base64');\n\t\tfs.writeFileSync(pfxCertificatePath, pfxCertificate);\n\t\tcp.execSync(`openssl pkcs12 -in \"${pfxCertificatePath}\" -nocerts -nodes -out \"${pemKeyPath}\" -passin pass:`);\n\t\tconst raw = fs.readFileSync(pemKeyPath, 'utf-8');\n\t\tconst result = raw.match(/-----BEGIN PRIVATE KEY-----[\\s\\S]+?-----END PRIVATE KEY-----/g)![0];\n\t\treturn result;\n\t} finally {\n\t\tfs.rmSync(pfxCertificatePath, { force: true });\n\t\tfs.rmSync(pemKeyPath, { force: true });\n\t}\n}\n\nfunction getCertificatesFromPFX(pfx: string): string[] {\n\tconst pfxCertificatePath = path.join(os.tmpdir(), 'cert.pfx');\n\tconst pemCertificatePath = path.join(os.tmpdir(), 'cert.pem');\n\n\ttry {\n\t\tconst pfxCertificate = Buffer.from(pfx, 'base64');\n\t\tfs.writeFileSync(pfxCertificatePath, pfxCertificate);\n\t\tcp.execSync(`openssl pkcs12 -in \"${pfxCertificatePath}\" -nokeys -out \"${pemCertificatePath}\" -passin pass:`);\n\t\tconst raw = fs.readFileSync(pemCertificatePath, 'utf-8');\n\t\tconst matches = raw.match(/-----BEGIN CERTIFICATE-----[\\s\\S]+?-----END CERTIFICATE-----/g);\n\t\treturn matches ? matches.reverse() : [];\n\t} finally {\n\t\tfs.rmSync(pfxCertificatePath, { force: true });\n\t\tfs.rmSync(pemCertificatePath, { force: true });\n\t}\n}\n\nclass ESRPReleaseService {\n\n\tstatic async create(\n\t\tlog: (...args: any[]) => void,\n\t\ttenantId: string,\n\t\tclientId: string,\n\t\tauthCertificatePfx: string,\n\t\trequestSigningCertificatePfx: string,\n\t\tcontainerClient: ContainerClient,\n\t\tstagingSasToken: string\n\t) {\n\t\tconst authKey = getKeyFromPFX(authCertificatePfx);\n\t\tconst authCertificate = getCertificatesFromPFX(authCertificatePfx)[0];\n\t\tconst requestSigningKey = getKeyFromPFX(requestSigningCertificatePfx);\n\t\tconst requestSigningCertificates = getCertificatesFromPFX(requestSigningCertificatePfx);\n\n\t\tconst app = new ConfidentialClientApplication({\n\t\t\tauth: {\n\t\t\t\tclientId,\n\t\t\t\tauthority: `https://login.microsoftonline.com/${tenantId}`,\n\t\t\t\tclientCertificate: {\n\t\t\t\t\tthumbprintSha256: getThumbprint(authCertificate, 'sha256').toString('hex'),\n\t\t\t\t\tprivateKey: authKey,\n\t\t\t\t\tx5c: authCertificate\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst response = await app.acquireTokenByClientCredential({\n\t\t\tscopes: ['https://api.esrp.microsoft.com/.default']\n\t\t});\n\n\t\treturn new ESRPReleaseService(log, clientId, response!.accessToken, requestSigningCertificates, requestSigningKey, containerClient, stagingSasToken);\n\t}\n\n\tprivate static API_URL = 'https://api.esrp.microsoft.com/api/v3/releaseservices/clients/';\n\n\tprivate constructor(\n\t\tprivate readonly log: (...args: any[]) => void,\n\t\tprivate readonly clientId: string,\n\t\tprivate readonly accessToken: string,\n\t\tprivate readonly requestSigningCertificates: string[],\n\t\tprivate readonly requestSigningKey: string,\n\t\tprivate readonly containerClient: ContainerClient,\n\t\tprivate readonly stagingSasToken: string\n\t) { }\n\n\tasync createRelease(version: string, filePath: string, friendlyFileName: string) {\n\t\tconst correlationId = crypto.randomUUID();\n\t\tconst blobClient = this.containerClient.getBlockBlobClient(correlationId);\n\n\t\tthis.log(`Uploading ${filePath} to ${blobClient.url}`);\n\t\tawait blobClient.uploadFile(filePath);\n\t\tthis.log('Uploaded blob successfully');\n\n\t\ttry {\n\t\t\tthis.log(`Submitting release for ${version}: ${filePath}`);\n\t\t\tconst submitReleaseResult = await this.submitRelease(version, filePath, friendlyFileName, correlationId, blobClient);\n\n\t\t\tthis.log(`Successfully submitted release ${submitReleaseResult.operationId}. Polling for completion...`);\n\n\t\t\t// Poll every 5 seconds, wait 60 minutes max -> poll 60/5*60=720 times\n\t\t\tfor (let i = 0; i < 720; i++) {\n\t\t\t\tawait new Promise(c => setTimeout(c, 5000));\n\t\t\t\tconst releaseStatus = await this.getReleaseStatus(submitReleaseResult.operationId);\n\n\t\t\t\tif (releaseStatus.status === 'pass') {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (releaseStatus.status === 'aborted') {\n\t\t\t\t\tthis.log(JSON.stringify(releaseStatus));\n\t\t\t\t\tthrow new Error(`Release was aborted`);\n\t\t\t\t} else if (releaseStatus.status !== 'inprogress') {\n\t\t\t\t\tthis.log(JSON.stringify(releaseStatus));\n\t\t\t\t\tthrow new Error(`Unknown error when polling for release`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst releaseDetails = await this.getReleaseDetails(submitReleaseResult.operationId);\n\n\t\t\tif (releaseDetails.status !== 'pass') {\n\t\t\t\tthrow new Error(`Timed out waiting for release: ${JSON.stringify(releaseDetails)}`);\n\t\t\t}\n\n\t\t\tthis.log('Successfully created release:', releaseDetails.files[0].fileDownloadDetails![0].downloadUrl);\n\t\t\treturn releaseDetails.files[0].fileDownloadDetails![0].downloadUrl;\n\t\t} finally {\n\t\t\tthis.log(`Deleting blob ${blobClient.url}`);\n\t\t\tawait blobClient.delete();\n\t\t\tthis.log('Deleted blob successfully');\n\t\t}\n\t}\n\n\tprivate async submitRelease(\n\t\tversion: string,\n\t\tfilePath: string,\n\t\tfriendlyFileName: string,\n\t\tcorrelationId: string,\n\t\tblobClient: BlobClient\n\t): Promise<ReleaseSubmitResponse> {\n\t\tconst size = fs.statSync(filePath).size;\n\t\tconst hash = await hashStream('sha256', fs.createReadStream(filePath));\n\t\tconst blobUrl = `${blobClient.url}?${this.stagingSasToken}`;\n\n\t\tconst message: ReleaseRequestMessage = {\n\t\t\tcustomerCorrelationId: correlationId,\n\t\t\tesrpCorrelationId: correlationId,\n\t\t\tdriEmail: ['joao.moreno@microsoft.com'],\n\t\t\tcreatedBy: { userPrincipalName: 'jomo@microsoft.com' },\n\t\t\towners: [{ owner: { userPrincipalName: 'jomo@microsoft.com' } }],\n\t\t\tapprovers: [{ approver: { userPrincipalName: 'jomo@microsoft.com' }, isAutoApproved: true, isMandatory: false }],\n\t\t\treleaseInfo: {\n\t\t\t\ttitle: 'VS Code',\n\t\t\t\tproperties: {\n\t\t\t\t\t'ReleaseContentType': 'InstallPackage'\n\t\t\t\t},\n\t\t\t\tminimumNumberOfApprovers: 1\n\t\t\t},\n\t\t\tproductInfo: {\n\t\t\t\tname: 'VS Code',\n\t\t\t\tversion,\n\t\t\t\tdescription: 'VS Code'\n\t\t\t},\n\t\t\taccessPermissionsInfo: {\n\t\t\t\tmainPublisher: 'VSCode',\n\t\t\t\tchannelDownloadEntityDetails: {\n\t\t\t\t\tAllDownloadEntities: ['VSCode']\n\t\t\t\t}\n\t\t\t},\n\t\t\troutingInfo: {\n\t\t\t\tintent: 'filedownloadlinkgeneration'\n\t\t\t},\n\t\t\tfiles: [{\n\t\t\t\tname: path.basename(filePath),\n\t\t\t\tfriendlyFileName,\n\t\t\t\ttenantFileLocation: blobUrl,\n\t\t\t\ttenantFileLocationType: 'AzureBlob',\n\t\t\t\tsourceLocation: {\n\t\t\t\t\ttype: 'azureBlob',\n\t\t\t\t\tblobUrl\n\t\t\t\t},\n\t\t\t\thashType: 'sha256',\n\t\t\t\thash: Array.from(hash),\n\t\t\t\tsizeInBytes: size\n\t\t\t}]\n\t\t};\n\n\t\tmessage.jwsToken = await this.generateJwsToken(message);\n\n\t\tconst res = await fetch(`${ESRPReleaseService.API_URL}${this.clientId}/workflows/release/operations`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t'Authorization': `Bearer ${this.accessToken}`\n\t\t\t},\n\t\t\tbody: JSON.stringify(message)\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tconst text = await res.text();\n\t\t\tthrow new Error(`Failed to submit release: ${res.statusText}\\n${text}`);\n\t\t}\n\n\t\treturn await res.json() as ReleaseSubmitResponse;\n\t}\n\n\tprivate async getReleaseStatus(releaseId: string): Promise<ReleaseResultMessage> {\n\t\tconst url = `${ESRPReleaseService.API_URL}${this.clientId}/workflows/release/operations/grs/${releaseId}`;\n\n\t\tconst res = await fetch(url, {\n\t\t\theaders: {\n\t\t\t\t'Authorization': `Bearer ${this.accessToken}`\n\t\t\t}\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tconst text = await res.text();\n\t\t\tthrow new Error(`Failed to get release status: ${res.statusText}\\n${text}`);\n\t\t}\n\n\t\treturn await res.json() as ReleaseResultMessage;\n\t}\n\n\tprivate async getReleaseDetails(releaseId: string): Promise<ReleaseDetailsMessage> {\n\t\tconst url = `${ESRPReleaseService.API_URL}${this.clientId}/workflows/release/operations/grd/${releaseId}`;\n\n\t\tconst res = await fetch(url, {\n\t\t\theaders: {\n\t\t\t\t'Authorization': `Bearer ${this.accessToken}`\n\t\t\t}\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tconst text = await res.text();\n\t\t\tthrow new Error(`Failed to get release status: ${res.statusText}\\n${text}`);\n\t\t}\n\n\t\treturn await res.json() as ReleaseDetailsMessage;\n\t}\n\n\tprivate async generateJwsToken(message: ReleaseRequestMessage): Promise<string> {\n\t\treturn jws.sign({\n\t\t\theader: {\n\t\t\t\talg: 'RS256',\n\t\t\t\tcrit: ['exp', 'x5t'],\n\t\t\t\t// Release service uses ticks, not seconds :roll_eyes: (https://stackoverflow.com/a/7968483)\n\t\t\t\texp: ((Date.now() + (6 * 60 * 1000)) * 10000) + 621355968000000000,\n\t\t\t\t// Release service uses hex format, not base64url :roll_eyes:\n\t\t\t\tx5t: getThumbprint(this.requestSigningCertificates[0], 'sha1').toString('hex'),\n\t\t\t\t// Release service uses a '.' separated string, not an array of strings :roll_eyes:\n\t\t\t\tx5c: this.requestSigningCertificates.map(c => getCertificateBuffer(c).toString('base64url')).join('.') as any,\n\t\t\t},\n\t\t\tpayload: message,\n\t\t\tprivateKey: this.requestSigningKey,\n\t\t});\n\t}\n}\n\nclass State {\n\n\tprivate statePath: string;\n\tprivate set = new Set<string>();\n\n\tconstructor() {\n\t\tconst pipelineWorkspacePath = e('PIPELINE_WORKSPACE');\n\t\tconst previousState = fs.readdirSync(pipelineWorkspacePath)\n\t\t\t.map(name => /^artifacts_processed_(\\d+)$/.exec(name))\n\t\t\t.filter((match): match is RegExpExecArray => !!match)\n\t\t\t.map(match => ({ name: match![0], attempt: Number(match![1]) }))\n\t\t\t.sort((a, b) => b.attempt - a.attempt)[0];\n\n\t\tif (previousState) {\n\t\t\tconst previousStatePath = path.join(pipelineWorkspacePath, previousState.name, previousState.name + '.txt');\n\t\t\tfs.readFileSync(previousStatePath, 'utf8').split(/\\n/).filter(name => !!name).forEach(name => this.set.add(name));\n\t\t}\n\n\t\tconst stageAttempt = e('SYSTEM_STAGEATTEMPT');\n\t\tthis.statePath = path.join(pipelineWorkspacePath, `artifacts_processed_${stageAttempt}`, `artifacts_processed_${stageAttempt}.txt`);\n\t\tfs.mkdirSync(path.dirname(this.statePath), { recursive: true });\n\t\tfs.writeFileSync(this.statePath, [...this.set.values()].map(name => `${name}\\n`).join(''));\n\t}\n\n\tget size(): number {\n\t\treturn this.set.size;\n\t}\n\n\thas(name: string): boolean {\n\t\treturn this.set.has(name);\n\t}\n\n\tadd(name: string): void {\n\t\tthis.set.add(name);\n\t\tfs.appendFileSync(this.statePath, `${name}\\n`);\n\t}\n\n\t[Symbol.iterator](): IterableIterator<string> {\n\t\treturn this.set[Symbol.iterator]();\n\t}\n}\n\nconst azdoFetchOptions = {\n\theaders: {\n\t\t// Pretend we're a web browser to avoid download rate limits\n\t\t'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',\n\t\t'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',\n\t\t'Accept-Encoding': 'gzip, deflate, br',\n\t\t'Accept-Language': 'en-US,en;q=0.9',\n\t\t'Referer': 'https://dev.azure.com',\n\t\tAuthorization: `Bearer ${e('SYSTEM_ACCESSTOKEN')}`\n\t}\n};\n\nasync function requestAZDOAPI<T>(path: string): Promise<T> {\n\tconst abortController = new AbortController();\n\tconst timeout = setTimeout(() => abortController.abort(), 2 * 60 * 1000);\n\n\ttry {\n\t\tconst res = await fetch(`${e('BUILDS_API_URL')}${path}?api-version=6.0`, { ...azdoFetchOptions, signal: abortController.signal });\n\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(`Unexpected status code: ${res.status}`);\n\t\t}\n\n\t\treturn await res.json();\n\t} finally {\n\t\tclearTimeout(timeout);\n\t}\n}\n\ninterface Artifact {\n\treadonly name: string;\n\treadonly resource: {\n\t\treadonly downloadUrl: string;\n\t\treadonly properties: {\n\t\t\treadonly artifactsize: number;\n\t\t};\n\t};\n}\n\nasync function getPipelineArtifacts(): Promise<Artifact[]> {\n\tconst result = await requestAZDOAPI<{ readonly value: Artifact[] }>('artifacts');\n\treturn result.value.filter(a => /^vscode_/.test(a.name) && !/sbom$/.test(a.name));\n}\n\ninterface Timeline {\n\treadonly records: {\n\t\treadonly name: string;\n\t\treadonly type: string;\n\t\treadonly state: string;\n\t}[];\n}\n\nasync function getPipelineTimeline(): Promise<Timeline> {\n\treturn await requestAZDOAPI<Timeline>('timeline');\n}\n\nasync function downloadArtifact(artifact: Artifact, downloadPath: string): Promise<void> {\n\tconst abortController = new AbortController();\n\tconst timeout = setTimeout(() => abortController.abort(), 4 * 60 * 1000);\n\n\ttry {\n\t\tconst res = await fetch(artifact.resource.downloadUrl, { ...azdoFetchOptions, signal: abortController.signal });\n\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(`Unexpected status code: ${res.status}`);\n\t\t}\n\n\t\tawait pipeline(Readable.fromWeb(res.body as ReadableStream), fs.createWriteStream(downloadPath));\n\t} finally {\n\t\tclearTimeout(timeout);\n\t}\n}\n\nasync function unzip(packagePath: string, outputPath: string): Promise<string[]> {\n\treturn new Promise((resolve, reject) => {\n\t\tyauzl.open(packagePath, { lazyEntries: true, autoClose: true }, (err, zipfile) => {\n\t\t\tif (err) {\n\t\t\t\treturn reject(err);\n\t\t\t}\n\n\t\t\tconst result: string[] = [];\n\t\t\tzipfile!.on('entry', entry => {\n\t\t\t\tif (/\\/$/.test(entry.fileName)) {\n\t\t\t\t\tzipfile!.readEntry();\n\t\t\t\t} else {\n\t\t\t\t\tzipfile!.openReadStream(entry, (err, istream) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst filePath = path.join(outputPath, entry.fileName);\n\t\t\t\t\t\tfs.mkdirSync(path.dirname(filePath), { recursive: true });\n\n\t\t\t\t\t\tconst ostream = fs.createWriteStream(filePath);\n\t\t\t\t\t\tostream.on('finish', () => {\n\t\t\t\t\t\t\tresult.push(filePath);\n\t\t\t\t\t\t\tzipfile!.readEntry();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tistream?.on('error', err => reject(err));\n\t\t\t\t\t\tistream!.pipe(ostream);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tzipfile!.on('close', () => resolve(result));\n\t\t\tzipfile!.readEntry();\n\t\t});\n\t});\n}\n\ninterface Asset {\n\tplatform: string;\n\ttype: string;\n\turl: string;\n\tmooncakeUrl?: string;\n\tprssUrl?: string;\n\thash: string;\n\tsha256hash: string;\n\tsize: number;\n\tsupportsFastUpdate?: boolean;\n}\n\n// Contains all of the logic for mapping details to our actual product names in CosmosDB\nfunction getPlatform(product: string, os: string, arch: string, type: string): string {\n\tswitch (os) {\n\t\tcase 'win32':\n\t\t\tswitch (product) {\n\t\t\t\tcase 'client': {\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase 'archive':\n\t\t\t\t\t\t\treturn `win32-${arch}-archive`;\n\t\t\t\t\t\tcase 'setup':\n\t\t\t\t\t\t\treturn `win32-${arch}`;\n\t\t\t\t\t\tcase 'user-setup':\n\t\t\t\t\t\t\treturn `win32-${arch}-user`;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcase 'server':\n\t\t\t\t\treturn `server-win32-${arch}`;\n\t\t\t\tcase 'web':\n\t\t\t\t\treturn `server-win32-${arch}-web`;\n\t\t\t\tcase 'cli':\n\t\t\t\t\treturn `cli-win32-${arch}`;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n\t\t\t}\n\t\tcase 'alpine':\n\t\t\tswitch (product) {\n\t\t\t\tcase 'server':\n\t\t\t\t\treturn `server-alpine-${arch}`;\n\t\t\t\tcase 'web':\n\t\t\t\t\treturn `server-alpine-${arch}-web`;\n\t\t\t\tcase 'cli':\n\t\t\t\t\treturn `cli-alpine-${arch}`;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n\t\t\t}\n\t\tcase 'linux':\n\t\t\tswitch (type) {\n\t\t\t\tcase 'snap':\n\t\t\t\t\treturn `linux-snap-${arch}`;\n\t\t\t\tcase 'archive-unsigned':\n\t\t\t\t\tswitch (product) {\n\t\t\t\t\t\tcase 'client':\n\t\t\t\t\t\t\treturn `linux-${arch}`;\n\t\t\t\t\t\tcase 'server':\n\t\t\t\t\t\t\treturn `server-linux-${arch}`;\n\t\t\t\t\t\tcase 'web':\n\t\t\t\t\t\t\tif (arch === 'standalone') {\n\t\t\t\t\t\t\t\treturn 'web-standalone';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn `server-linux-${arch}-web`;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n\t\t\t\t\t}\n\t\t\t\tcase 'deb-package':\n\t\t\t\t\treturn `linux-deb-${arch}`;\n\t\t\t\tcase 'rpm-package':\n\t\t\t\t\treturn `linux-rpm-${arch}`;\n\t\t\t\tcase 'cli':\n\t\t\t\t\treturn `cli-linux-${arch}`;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n\t\t\t}\n\t\tcase 'darwin':\n\t\t\tswitch (product) {\n\t\t\t\tcase 'client':\n\t\t\t\t\tif (arch === 'x64') {\n\t\t\t\t\t\treturn 'darwin';\n\t\t\t\t\t}\n\t\t\t\t\treturn `darwin-${arch}`;\n\t\t\t\tcase 'server':\n\t\t\t\t\tif (arch === 'x64') {\n\t\t\t\t\t\treturn 'server-darwin';\n\t\t\t\t\t}\n\t\t\t\t\treturn `server-darwin-${arch}`;\n\t\t\t\tcase 'web':\n\t\t\t\t\tif (arch === 'x64') {\n\t\t\t\t\t\treturn 'server-darwin-web';\n\t\t\t\t\t}\n\t\t\t\t\treturn `server-darwin-${arch}-web`;\n\t\t\t\tcase 'cli':\n\t\t\t\t\treturn `cli-darwin-${arch}`;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);\n\t}\n}\n\n// Contains all of the logic for mapping types to our actual types in CosmosDB\nfunction getRealType(type: string) {\n\tswitch (type) {\n\t\tcase 'user-setup':\n\t\t\treturn 'setup';\n\t\tcase 'deb-package':\n\t\tcase 'rpm-package':\n\t\t\treturn 'package';\n\t\tdefault:\n\t\t\treturn type;\n\t}\n}\n\nasync function withLease<T>(client: BlockBlobClient, fn: () => Promise<T>) {\n\tconst lease = client.getBlobLeaseClient();\n\n\tfor (let i = 0; i < 360; i++) { // Try to get lease for 30 minutes\n\t\ttry {\n\t\t\tawait client.uploadData(new ArrayBuffer()); // blob needs to exist for lease to be acquired\n\t\t\tawait lease.acquireLease(60);\n\n\t\t\ttry {\n\t\t\t\tconst abortController = new AbortController();\n\t\t\t\tconst refresher = new Promise<void>((c, e) => {\n\t\t\t\t\tabortController.signal.onabort = () => {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tc();\n\t\t\t\t\t};\n\n\t\t\t\t\tconst interval = setInterval(() => {\n\t\t\t\t\t\tlease.renewLease().catch(err => {\n\t\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\t\te(new Error('Failed to renew lease ' + err));\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 30_000);\n\t\t\t\t});\n\n\t\t\t\tconst result = await Promise.race([fn(), refresher]);\n\t\t\t\tabortController.abort();\n\t\t\t\treturn result;\n\t\t\t} finally {\n\t\t\t\tawait lease.releaseLease();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.statusCode !== 409 && err.statusCode !== 412) {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tawait new Promise(c => setTimeout(c, 5000));\n\t\t}\n\t}\n\n\tthrow new Error('Failed to acquire lease on blob after 30 minutes');\n}\n\nasync function processArtifact(\n\tartifact: Artifact,\n\tfilePath: string\n) {\n\tconst log = (...args: any[]) => console.log(`[${artifact.name}]`, ...args);\n\tconst match = /^vscode_(?<product>[^_]+)_(?<os>[^_]+)(?:_legacy)?_(?<arch>[^_]+)_(?<unprocessedType>[^_]+)$/.exec(artifact.name);\n\n\tif (!match) {\n\t\tthrow new Error(`Invalid artifact name: ${artifact.name}`);\n\t}\n\n\tconst { cosmosDBAccessToken, blobServiceAccessToken } = JSON.parse(e('PUBLISH_AUTH_TOKENS'));\n\tconst quality = e('VSCODE_QUALITY');\n\tconst version = e('BUILD_SOURCEVERSION');\n\tconst friendlyFileName = `${quality}/${version}/${path.basename(filePath)}`;\n\n\tconst blobServiceClient = new BlobServiceClient(`https://${e('VSCODE_STAGING_BLOB_STORAGE_ACCOUNT_NAME')}.blob.core.windows.net/`, { getToken: async () => blobServiceAccessToken });\n\tconst leasesContainerClient = blobServiceClient.getContainerClient('leases');\n\tawait leasesContainerClient.createIfNotExists();\n\tconst leaseBlobClient = leasesContainerClient.getBlockBlobClient(friendlyFileName);\n\n\tlog(`Acquiring lease for: ${friendlyFileName}`);\n\n\tawait withLease(leaseBlobClient, async () => {\n\t\tlog(`Successfully acquired lease for: ${friendlyFileName}`);\n\n\t\tconst url = `${e('PRSS_CDN_URL')}/${friendlyFileName}`;\n\t\tconst res = await retry(() => fetch(url));\n\n\t\tif (res.status === 200) {\n\t\t\tlog(`Already released and provisioned: ${url}`);\n\t\t} else {\n\t\t\tconst stagingContainerClient = blobServiceClient.getContainerClient('staging');\n\t\t\tawait stagingContainerClient.createIfNotExists();\n\n\t\t\tconst now = new Date().valueOf();\n\t\t\tconst oneHour = 60 * 60 * 1000;\n\t\t\tconst oneHourAgo = new Date(now - oneHour);\n\t\t\tconst oneHourFromNow = new Date(now + oneHour);\n\t\t\tconst userDelegationKey = await blobServiceClient.getUserDelegationKey(oneHourAgo, oneHourFromNow);\n\t\t\tconst sasOptions = { containerName: 'staging', permissions: ContainerSASPermissions.from({ read: true }), startsOn: oneHourAgo, expiresOn: oneHourFromNow };\n\t\t\tconst stagingSasToken = generateBlobSASQueryParameters(sasOptions, userDelegationKey, e('VSCODE_STAGING_BLOB_STORAGE_ACCOUNT_NAME')).toString();\n\n\t\t\tconst releaseService = await ESRPReleaseService.create(\n\t\t\t\tlog,\n\t\t\t\te('RELEASE_TENANT_ID'),\n\t\t\t\te('RELEASE_CLIENT_ID'),\n\t\t\t\te('RELEASE_AUTH_CERT'),\n\t\t\t\te('RELEASE_REQUEST_SIGNING_CERT'),\n\t\t\t\tstagingContainerClient,\n\t\t\t\tstagingSasToken\n\t\t\t);\n\n\t\t\tawait releaseService.createRelease(version, filePath, friendlyFileName);\n\t\t}\n\n\t\tconst { product, os, arch, unprocessedType } = match.groups!;\n\t\tconst platform = getPlatform(product, os, arch, unprocessedType);\n\t\tconst type = getRealType(unprocessedType);\n\t\tconst size = fs.statSync(filePath).size;\n\t\tconst stream = fs.createReadStream(filePath);\n\t\tconst [hash, sha256hash] = await Promise.all([hashStream('sha1', stream), hashStream('sha256', stream)]); // CodeQL [SM04514] Using SHA1 only for legacy reasons, we are actually only respecting SHA256\n\t\tconst asset: Asset = { platform, type, url, hash: hash.toString('hex'), sha256hash: sha256hash.toString('hex'), size, supportsFastUpdate: true };\n\t\tlog('Creating asset...');\n\n\t\tconst result = await retry(async (attempt) => {\n\t\t\tlog(`Creating asset in Cosmos DB (attempt ${attempt})...`);\n\t\t\tconst client = new CosmosClient({ endpoint: e('AZURE_DOCUMENTDB_ENDPOINT')!, tokenProvider: () => Promise.resolve(`type=aad&ver=1.0&sig=${cosmosDBAccessToken.token}`) });\n\t\t\tconst scripts = client.database('builds').container(quality).scripts;\n\t\t\tconst { resource: result } = await scripts.storedProcedure('createAsset').execute<'ok' | 'already exists'>('', [version, asset, true]);\n\t\t\treturn result;\n\t\t});\n\n\t\tif (result === 'already exists') {\n\t\t\tlog('Asset already exists!');\n\t\t} else {\n\t\t\tlog('Asset successfully created: ', JSON.stringify(asset, undefined, 2));\n\t\t}\n\t});\n\n\tlog(`Successfully released lease for: ${friendlyFileName}`);\n}\n\n// It is VERY important that we don't download artifacts too much too fast from AZDO.\n// AZDO throttles us SEVERELY if we do. Not just that, but they also close open\n// sockets, so the whole things turns to a grinding halt. So, downloading and extracting\n// happens serially in the main thread, making the downloads are spaced out\n// properly. For each extracted artifact, we spawn a worker thread to upload it to\n// the CDN and finally update the build in Cosmos DB.\nasync function main() {\n\tif (!isMainThread) {\n\t\tconst { artifact, artifactFilePath } = workerData;\n\t\tawait processArtifact(artifact, artifactFilePath);\n\t\treturn;\n\t}\n\n\tconst done = new State();\n\tconst processing = new Set<string>();\n\n\tfor (const name of done) {\n\t\tconsole.log(`\\u2705 ${name}`);\n\t}\n\n\tconst stages = new Set<string>(['Compile']);\n\n\tif (\n\t\te('VSCODE_BUILD_STAGE_LINUX') === 'True' ||\n\t\te('VSCODE_BUILD_STAGE_ALPINE') === 'True' ||\n\t\te('VSCODE_BUILD_STAGE_MACOS') === 'True' ||\n\t\te('VSCODE_BUILD_STAGE_WINDOWS') === 'True'\n\t) {\n\t\tstages.add('CompileCLI');\n\t}\n\n\tif (e('VSCODE_BUILD_STAGE_WINDOWS') === 'True') { stages.add('Windows'); }\n\tif (e('VSCODE_BUILD_STAGE_LINUX') === 'True') { stages.add('Linux'); }\n\tif (e('VSCODE_BUILD_STAGE_ALPINE') === 'True') { stages.add('Alpine'); }\n\tif (e('VSCODE_BUILD_STAGE_MACOS') === 'True') { stages.add('macOS'); }\n\tif (e('VSCODE_BUILD_STAGE_WEB') === 'True') { stages.add('Web'); }\n\n\tlet resultPromise = Promise.resolve<PromiseSettledResult<void>[]>([]);\n\tconst operations: { name: string; operation: Promise<void> }[] = [];\n\n\twhile (true) {\n\t\tconst [timeline, artifacts] = await Promise.all([retry(() => getPipelineTimeline()), retry(() => getPipelineArtifacts())]);\n\t\tconst stagesCompleted = new Set<string>(timeline.records.filter(r => r.type === 'Stage' && r.state === 'completed' && stages.has(r.name)).map(r => r.name));\n\t\tconst stagesInProgress = [...stages].filter(s => !stagesCompleted.has(s));\n\t\tconst artifactsInProgress = artifacts.filter(a => processing.has(a.name));\n\n\t\tif (stagesInProgress.length === 0 && artifacts.length === done.size + processing.size) {\n\t\t\tbreak;\n\t\t} else if (stagesInProgress.length > 0) {\n\t\t\tconsole.log('Stages in progress:', stagesInProgress.join(', '));\n\t\t} else if (artifactsInProgress.length > 0) {\n\t\t\tconsole.log('Artifacts in progress:', artifactsInProgress.map(a => a.name).join(', '));\n\t\t} else {\n\t\t\tconsole.log(`Waiting for a total of ${artifacts.length}, ${done.size} done, ${processing.size} in progress...`);\n\t\t}\n\n\t\tfor (const artifact of artifacts) {\n\t\t\tif (done.has(artifact.name) || processing.has(artifact.name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconsole.log(`[${artifact.name}] Found new artifact`);\n\n\t\t\tconst artifactZipPath = path.join(e('AGENT_TEMPDIRECTORY'), `${artifact.name}.zip`);\n\n\t\t\tawait retry(async (attempt) => {\n\t\t\t\tconst start = Date.now();\n\t\t\t\tconsole.log(`[${artifact.name}] Downloading (attempt ${attempt})...`);\n\t\t\t\tawait downloadArtifact(artifact, artifactZipPath);\n\t\t\t\tconst archiveSize = fs.statSync(artifactZipPath).size;\n\t\t\t\tconst downloadDurationS = (Date.now() - start) / 1000;\n\t\t\t\tconst downloadSpeedKBS = Math.round((archiveSize / 1024) / downloadDurationS);\n\t\t\t\tconsole.log(`[${artifact.name}] Successfully downloaded after ${Math.floor(downloadDurationS)} seconds(${downloadSpeedKBS} KB/s).`);\n\t\t\t});\n\n\t\t\tconst artifactFilePaths = await unzip(artifactZipPath, e('AGENT_TEMPDIRECTORY'));\n\t\t\tconst artifactFilePath = artifactFilePaths.filter(p => !/_manifest/.test(p))[0];\n\n\t\t\tprocessing.add(artifact.name);\n\t\t\tconst promise = new Promise<void>((resolve, reject) => {\n\t\t\t\tconst worker = new Worker(__filename, { workerData: { artifact, artifactFilePath } });\n\t\t\t\tworker.on('error', reject);\n\t\t\t\tworker.on('exit', code => {\n\t\t\t\t\tif (code === 0) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(new Error(`[${artifact.name}] Worker stopped with exit code ${code}`));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst operation = promise.then(() => {\n\t\t\t\tprocessing.delete(artifact.name);\n\t\t\t\tdone.add(artifact.name);\n\t\t\t\tconsole.log(`\\u2705 ${artifact.name} `);\n\t\t\t});\n\n\t\t\toperations.push({ name: artifact.name, operation });\n\t\t\tresultPromise = Promise.allSettled(operations.map(o => o.operation));\n\t\t}\n\n\t\tawait new Promise(c => setTimeout(c, 10_000));\n\t}\n\n\tconsole.log(`Found all ${done.size + processing.size} artifacts, waiting for ${processing.size} artifacts to finish publishing...`);\n\n\tconst artifactsInProgress = operations.filter(o => processing.has(o.name));\n\n\tif (artifactsInProgress.length > 0) {\n\t\tconsole.log('Artifacts in progress:', artifactsInProgress.map(a => a.name).join(', '));\n\t}\n\n\tconst results = await resultPromise;\n\n\tfor (let i = 0; i < operations.length; i++) {\n\t\tconst result = results[i];\n\n\t\tif (result.status === 'rejected') {\n\t\t\tconsole.error(`[${operations[i].name}]`, result.reason);\n\t\t}\n\t}\n\n\tif (results.some(r => r.status === 'rejected')) {\n\t\tthrow new Error('Some artifacts failed to publish');\n\t}\n\n\tconsole.log(`All ${done.size} artifacts published!`);\n}\n\nif (require.main === module) {\n\tmain().then(() => {\n\t\tprocess.exit(0);\n\t}, err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/azure-pipelines/common/releaseBuild.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst identity_1 = require(\"@azure/identity\");\nconst cosmos_1 = require(\"@azure/cosmos\");\nconst retry_1 = require(\"./retry\");\nfunction getEnv(name) {\n    const result = process.env[name];\n    if (typeof result === 'undefined') {\n        throw new Error('Missing env: ' + name);\n    }\n    return result;\n}\nfunction createDefaultConfig(quality) {\n    return {\n        id: quality,\n        frozen: false\n    };\n}\nasync function getConfig(client, quality) {\n    const query = `SELECT TOP 1 * FROM c WHERE c.id = \"${quality}\"`;\n    const res = await client.database('builds').container('config').items.query(query).fetchAll();\n    if (res.resources.length === 0) {\n        return createDefaultConfig(quality);\n    }\n    return res.resources[0];\n}\nasync function main(force) {\n    const commit = getEnv('BUILD_SOURCEVERSION');\n    const quality = getEnv('VSCODE_QUALITY');\n    const aadCredentials = new identity_1.ClientAssertionCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], () => Promise.resolve(process.env['AZURE_ID_TOKEN']));\n    const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], aadCredentials });\n    if (!force) {\n        const config = await getConfig(client, quality);\n        console.log('Quality config:', config);\n        if (config.frozen) {\n            console.log(`Skipping release because quality ${quality} is frozen.`);\n            return;\n        }\n    }\n    console.log(`Releasing build ${commit}...`);\n    const scripts = client.database('builds').container(quality).scripts;\n    await (0, retry_1.retry)(() => scripts.storedProcedure('releaseBuild').execute('', [commit]));\n}\nconst [, , force] = process.argv;\nconsole.log(process.argv);\nmain(/^true$/i.test(force)).then(() => {\n    console.log('Build successfully released');\n    process.exit(0);\n}, err => {\n    console.error(err);\n    process.exit(1);\n});\n//# sourceMappingURL=releaseBuild.js.map"
  },
  {
    "path": "build/azure-pipelines/common/releaseBuild.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ClientAssertionCredential } from '@azure/identity';\nimport { CosmosClient } from '@azure/cosmos';\nimport { retry } from './retry';\n\nfunction getEnv(name: string): string {\n\tconst result = process.env[name];\n\n\tif (typeof result === 'undefined') {\n\t\tthrow new Error('Missing env: ' + name);\n\t}\n\n\treturn result;\n}\n\ninterface Config {\n\tid: string;\n\tfrozen: boolean;\n}\n\nfunction createDefaultConfig(quality: string): Config {\n\treturn {\n\t\tid: quality,\n\t\tfrozen: false\n\t};\n}\n\nasync function getConfig(client: CosmosClient, quality: string): Promise<Config> {\n\tconst query = `SELECT TOP 1 * FROM c WHERE c.id = \"${quality}\"`;\n\n\tconst res = await client.database('builds').container('config').items.query(query).fetchAll();\n\n\tif (res.resources.length === 0) {\n\t\treturn createDefaultConfig(quality);\n\t}\n\n\treturn res.resources[0] as Config;\n}\n\nasync function main(force: boolean): Promise<void> {\n\tconst commit = getEnv('BUILD_SOURCEVERSION');\n\tconst quality = getEnv('VSCODE_QUALITY');\n\n\tconst aadCredentials = new ClientAssertionCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, () => Promise.resolve(process.env['AZURE_ID_TOKEN']!));\n\tconst client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, aadCredentials });\n\n\tif (!force) {\n\t\tconst config = await getConfig(client, quality);\n\n\t\tconsole.log('Quality config:', config);\n\n\t\tif (config.frozen) {\n\t\t\tconsole.log(`Skipping release because quality ${quality} is frozen.`);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconsole.log(`Releasing build ${commit}...`);\n\n\tconst scripts = client.database('builds').container(quality).scripts;\n\tawait retry(() => scripts.storedProcedure('releaseBuild').execute('', [commit]));\n}\n\nconst [, , force] = process.argv;\n\nconsole.log(process.argv);\n\nmain(/^true$/i.test(force)).then(() => {\n\tconsole.log('Build successfully released');\n\tprocess.exit(0);\n}, err => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"
  },
  {
    "path": "build/azure-pipelines/common/retry.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.retry = retry;\nasync function retry(fn) {\n    let lastError;\n    for (let run = 1; run <= 10; run++) {\n        try {\n            return await fn(run);\n        }\n        catch (err) {\n            if (!/fetch failed|terminated|aborted|timeout|TimeoutError|Timeout Error|RestError|Client network socket disconnected|socket hang up|ECONNRESET|CredentialUnavailableError|endpoints_resolution_error|Audience validation failed|end of central directory record signature not found/i.test(err.message)) {\n                throw err;\n            }\n            lastError = err;\n            // maximum delay is 10th retry: ~3 seconds\n            const millis = Math.floor((Math.random() * 200) + (50 * Math.pow(1.5, run)));\n            await new Promise(c => setTimeout(c, millis));\n        }\n    }\n    console.error(`Too many retries, aborting.`);\n    throw lastError;\n}\n//# sourceMappingURL=retry.js.map"
  },
  {
    "path": "build/azure-pipelines/common/retry.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport async function retry<T>(fn: (attempt: number) => Promise<T>): Promise<T> {\n\tlet lastError: Error | undefined;\n\n\tfor (let run = 1; run <= 10; run++) {\n\t\ttry {\n\t\t\treturn await fn(run);\n\t\t} catch (err) {\n\t\t\tif (!/fetch failed|terminated|aborted|timeout|TimeoutError|Timeout Error|RestError|Client network socket disconnected|socket hang up|ECONNRESET|CredentialUnavailableError|endpoints_resolution_error|Audience validation failed|end of central directory record signature not found/i.test(err.message)) {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tlastError = err;\n\n\t\t\t// maximum delay is 10th retry: ~3 seconds\n\t\t\tconst millis = Math.floor((Math.random() * 200) + (50 * Math.pow(1.5, run)));\n\t\t\tawait new Promise(c => setTimeout(c, millis));\n\t\t}\n\t}\n\n\tconsole.error(`Too many retries, aborting.`);\n\tthrow lastError;\n}\n"
  },
  {
    "path": "build/azure-pipelines/common/sign-win32.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sign_1 = require(\"./sign\");\nconst path_1 = __importDefault(require(\"path\"));\n(0, sign_1.main)([\n    process.env['EsrpCliDllPath'],\n    'sign-windows',\n    path_1.default.dirname(process.argv[2]),\n    path_1.default.basename(process.argv[2])\n]);\n//# sourceMappingURL=sign-win32.js.map"
  },
  {
    "path": "build/azure-pipelines/common/sign-win32.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { main } from './sign';\nimport path from 'path';\n\nmain([\n\tprocess.env['EsrpCliDllPath']!,\n\t'sign-windows',\n\tpath.dirname(process.argv[2]),\n\tpath.basename(process.argv[2])\n]);\n"
  },
  {
    "path": "build/azure-pipelines/common/sign.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Temp = void 0;\nexports.main = main;\nconst child_process_1 = __importDefault(require(\"child_process\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst os_1 = __importDefault(require(\"os\"));\nclass Temp {\n    _files = [];\n    tmpNameSync() {\n        const file = path_1.default.join(os_1.default.tmpdir(), crypto_1.default.randomBytes(20).toString('hex'));\n        this._files.push(file);\n        return file;\n    }\n    dispose() {\n        for (const file of this._files) {\n            try {\n                fs_1.default.unlinkSync(file);\n            }\n            catch (err) {\n                // noop\n            }\n        }\n    }\n}\nexports.Temp = Temp;\nfunction getParams(type) {\n    switch (type) {\n        case 'sign-windows':\n            return [\n                {\n                    keyCode: 'CP-230012',\n                    operationSetCode: 'SigntoolSign',\n                    parameters: [\n                        { parameterName: 'OpusName', parameterValue: 'VS Code' },\n                        { parameterName: 'OpusInfo', parameterValue: 'https://code.visualstudio.com/' },\n                        { parameterName: 'Append', parameterValue: '/as' },\n                        { parameterName: 'FileDigest', parameterValue: '/fd \"SHA256\"' },\n                        { parameterName: 'PageHash', parameterValue: '/NPH' },\n                        { parameterName: 'TimeStamp', parameterValue: '/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256' }\n                    ],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                },\n                {\n                    keyCode: 'CP-230012',\n                    operationSetCode: 'SigntoolVerify',\n                    parameters: [\n                        { parameterName: 'VerifyAll', parameterValue: '/all' }\n                    ],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                }\n            ];\n        case 'sign-windows-appx':\n            return [\n                {\n                    keyCode: 'CP-229979',\n                    operationSetCode: 'SigntoolSign',\n                    parameters: [\n                        { parameterName: 'OpusName', parameterValue: 'VS Code' },\n                        { parameterName: 'OpusInfo', parameterValue: 'https://code.visualstudio.com/' },\n                        { parameterName: 'FileDigest', parameterValue: '/fd \"SHA256\"' },\n                        { parameterName: 'PageHash', parameterValue: '/NPH' },\n                        { parameterName: 'TimeStamp', parameterValue: '/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256' }\n                    ],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                },\n                {\n                    keyCode: 'CP-229979',\n                    operationSetCode: 'SigntoolVerify',\n                    parameters: [],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                }\n            ];\n        case 'sign-pgp':\n            return [{\n                    keyCode: 'CP-450779-Pgp',\n                    operationSetCode: 'LinuxSign',\n                    parameters: [],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                }];\n        case 'sign-darwin':\n            return [{\n                    keyCode: 'CP-401337-Apple',\n                    operationSetCode: 'MacAppDeveloperSign',\n                    parameters: [{ parameterName: 'Hardening', parameterValue: '--options=runtime' }],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                }];\n        case 'notarize-darwin':\n            return [{\n                    keyCode: 'CP-401337-Apple',\n                    operationSetCode: 'MacAppNotarize',\n                    parameters: [],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                }];\n        case 'nuget':\n            return [{\n                    keyCode: 'CP-401405',\n                    operationSetCode: 'NuGetSign',\n                    parameters: [],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                }, {\n                    keyCode: 'CP-401405',\n                    operationSetCode: 'NuGetVerify',\n                    parameters: [],\n                    toolName: 'sign',\n                    toolVersion: '1.0'\n                }];\n        default:\n            throw new Error(`Sign type ${type} not found`);\n    }\n}\nfunction main([esrpCliPath, type, folderPath, pattern]) {\n    const tmp = new Temp();\n    process.on('exit', () => tmp.dispose());\n    const key = crypto_1.default.randomBytes(32);\n    const iv = crypto_1.default.randomBytes(16);\n    const cipher = crypto_1.default.createCipheriv('aes-256-cbc', key, iv);\n    const encryptedToken = cipher.update(process.env['SYSTEM_ACCESSTOKEN'].trim(), 'utf8', 'hex') + cipher.final('hex');\n    const encryptionDetailsPath = tmp.tmpNameSync();\n    fs_1.default.writeFileSync(encryptionDetailsPath, JSON.stringify({ key: key.toString('hex'), iv: iv.toString('hex') }));\n    const encryptedTokenPath = tmp.tmpNameSync();\n    fs_1.default.writeFileSync(encryptedTokenPath, encryptedToken);\n    const patternPath = tmp.tmpNameSync();\n    fs_1.default.writeFileSync(patternPath, pattern);\n    const paramsPath = tmp.tmpNameSync();\n    fs_1.default.writeFileSync(paramsPath, JSON.stringify(getParams(type)));\n    const dotnetVersion = child_process_1.default.execSync('dotnet --version', { encoding: 'utf8' }).trim();\n    const adoTaskVersion = path_1.default.basename(path_1.default.dirname(path_1.default.dirname(esrpCliPath)));\n    const federatedTokenData = {\n        jobId: process.env['SYSTEM_JOBID'],\n        planId: process.env['SYSTEM_PLANID'],\n        projectId: process.env['SYSTEM_TEAMPROJECTID'],\n        hub: process.env['SYSTEM_HOSTTYPE'],\n        uri: process.env['SYSTEM_COLLECTIONURI'],\n        managedIdentityId: process.env['VSCODE_ESRP_CLIENT_ID'],\n        managedIdentityTenantId: process.env['VSCODE_ESRP_TENANT_ID'],\n        serviceConnectionId: process.env['VSCODE_ESRP_SERVICE_CONNECTION_ID'],\n        tempDirectory: os_1.default.tmpdir(),\n        systemAccessToken: encryptedTokenPath,\n        encryptionKey: encryptionDetailsPath\n    };\n    const args = [\n        esrpCliPath,\n        'vsts.sign',\n        '-a', process.env['ESRP_CLIENT_ID'],\n        '-d', process.env['ESRP_TENANT_ID'],\n        '-k', JSON.stringify({ akv: 'vscode-esrp' }),\n        '-z', JSON.stringify({ akv: 'vscode-esrp', cert: 'esrp-sign' }),\n        '-f', folderPath,\n        '-p', patternPath,\n        '-u', 'false',\n        '-x', 'regularSigning',\n        '-b', 'input.json',\n        '-l', 'AzSecPack_PublisherPolicyProd.xml',\n        '-y', 'inlineSignParams',\n        '-j', paramsPath,\n        '-c', '9997',\n        '-t', '120',\n        '-g', '10',\n        '-v', 'Tls12',\n        '-s', 'https://api.esrp.microsoft.com/api/v1',\n        '-m', '0',\n        '-o', 'Microsoft',\n        '-i', 'https://www.microsoft.com',\n        '-n', '5',\n        '-r', 'true',\n        '-w', dotnetVersion,\n        '-skipAdoReportAttachment', 'false',\n        '-pendingAnalysisWaitTimeoutMinutes', '5',\n        '-adoTaskVersion', adoTaskVersion,\n        '-resourceUri', 'https://msazurecloud.onmicrosoft.com/api.esrp.microsoft.com',\n        '-esrpClientId', process.env['ESRP_CLIENT_ID'],\n        '-useMSIAuthentication', 'true',\n        '-federatedTokenData', JSON.stringify(federatedTokenData)\n    ];\n    try {\n        child_process_1.default.execFileSync('dotnet', args, { stdio: 'inherit' });\n    }\n    catch (err) {\n        console.error('ESRP failed');\n        console.error(err);\n        process.exit(1);\n    }\n}\nif (require.main === module) {\n    main(process.argv.slice(2));\n    process.exit(0);\n}\n//# sourceMappingURL=sign.js.map"
  },
  {
    "path": "build/azure-pipelines/common/sign.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport cp from 'child_process';\nimport fs from 'fs';\nimport crypto from 'crypto';\nimport path from 'path';\nimport os from 'os';\n\nexport class Temp {\n\tprivate _files: string[] = [];\n\n\ttmpNameSync(): string {\n\t\tconst file = path.join(os.tmpdir(), crypto.randomBytes(20).toString('hex'));\n\t\tthis._files.push(file);\n\t\treturn file;\n\t}\n\n\tdispose(): void {\n\t\tfor (const file of this._files) {\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(file);\n\t\t\t} catch (err) {\n\t\t\t\t// noop\n\t\t\t}\n\t\t}\n\t}\n}\n\ninterface Params {\n\treadonly keyCode: string;\n\treadonly operationSetCode: string;\n\treadonly parameters: {\n\t\treadonly parameterName: string;\n\t\treadonly parameterValue: string;\n\t}[];\n\treadonly toolName: string;\n\treadonly toolVersion: string;\n}\n\nfunction getParams(type: string): Params[] {\n\tswitch (type) {\n\t\tcase 'sign-windows':\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tkeyCode: 'CP-230012',\n\t\t\t\t\toperationSetCode: 'SigntoolSign',\n\t\t\t\t\tparameters: [\n\t\t\t\t\t\t{ parameterName: 'OpusName', parameterValue: 'VS Code' },\n\t\t\t\t\t\t{ parameterName: 'OpusInfo', parameterValue: 'https://code.visualstudio.com/' },\n\t\t\t\t\t\t{ parameterName: 'Append', parameterValue: '/as' },\n\t\t\t\t\t\t{ parameterName: 'FileDigest', parameterValue: '/fd \"SHA256\"' },\n\t\t\t\t\t\t{ parameterName: 'PageHash', parameterValue: '/NPH' },\n\t\t\t\t\t\t{ parameterName: 'TimeStamp', parameterValue: '/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256' }\n\t\t\t\t\t],\n\t\t\t\t\ttoolName: 'sign',\n\t\t\t\t\ttoolVersion: '1.0'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkeyCode: 'CP-230012',\n\t\t\t\t\toperationSetCode: 'SigntoolVerify',\n\t\t\t\t\tparameters: [\n\t\t\t\t\t\t{ parameterName: 'VerifyAll', parameterValue: '/all' }\n\t\t\t\t\t],\n\t\t\t\t\ttoolName: 'sign',\n\t\t\t\t\ttoolVersion: '1.0'\n\t\t\t\t}\n\t\t\t];\n\t\tcase 'sign-windows-appx':\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tkeyCode: 'CP-229979',\n\t\t\t\t\toperationSetCode: 'SigntoolSign',\n\t\t\t\t\tparameters: [\n\t\t\t\t\t\t{ parameterName: 'OpusName', parameterValue: 'VS Code' },\n\t\t\t\t\t\t{ parameterName: 'OpusInfo', parameterValue: 'https://code.visualstudio.com/' },\n\t\t\t\t\t\t{ parameterName: 'FileDigest', parameterValue: '/fd \"SHA256\"' },\n\t\t\t\t\t\t{ parameterName: 'PageHash', parameterValue: '/NPH' },\n\t\t\t\t\t\t{ parameterName: 'TimeStamp', parameterValue: '/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256' }\n\t\t\t\t\t],\n\t\t\t\t\ttoolName: 'sign',\n\t\t\t\t\ttoolVersion: '1.0'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkeyCode: 'CP-229979',\n\t\t\t\t\toperationSetCode: 'SigntoolVerify',\n\t\t\t\t\tparameters: [],\n\t\t\t\t\ttoolName: 'sign',\n\t\t\t\t\ttoolVersion: '1.0'\n\t\t\t\t}\n\t\t\t];\n\t\tcase 'sign-pgp':\n\t\t\treturn [{\n\t\t\t\tkeyCode: 'CP-450779-Pgp',\n\t\t\t\toperationSetCode: 'LinuxSign',\n\t\t\t\tparameters: [],\n\t\t\t\ttoolName: 'sign',\n\t\t\t\ttoolVersion: '1.0'\n\t\t\t}];\n\t\tcase 'sign-darwin':\n\t\t\treturn [{\n\t\t\t\tkeyCode: 'CP-401337-Apple',\n\t\t\t\toperationSetCode: 'MacAppDeveloperSign',\n\t\t\t\tparameters: [{ parameterName: 'Hardening', parameterValue: '--options=runtime' }],\n\t\t\t\ttoolName: 'sign',\n\t\t\t\ttoolVersion: '1.0'\n\t\t\t}];\n\t\tcase 'notarize-darwin':\n\t\t\treturn [{\n\t\t\t\tkeyCode: 'CP-401337-Apple',\n\t\t\t\toperationSetCode: 'MacAppNotarize',\n\t\t\t\tparameters: [],\n\t\t\t\ttoolName: 'sign',\n\t\t\t\ttoolVersion: '1.0'\n\t\t\t}];\n\t\tcase 'nuget':\n\t\t\treturn [{\n\t\t\t\tkeyCode: 'CP-401405',\n\t\t\t\toperationSetCode: 'NuGetSign',\n\t\t\t\tparameters: [],\n\t\t\t\ttoolName: 'sign',\n\t\t\t\ttoolVersion: '1.0'\n\t\t\t}, {\n\t\t\t\tkeyCode: 'CP-401405',\n\t\t\t\toperationSetCode: 'NuGetVerify',\n\t\t\t\tparameters: [],\n\t\t\t\ttoolName: 'sign',\n\t\t\t\ttoolVersion: '1.0'\n\t\t\t}];\n\t\tdefault:\n\t\t\tthrow new Error(`Sign type ${type} not found`);\n\t}\n}\n\nexport function main([esrpCliPath, type, folderPath, pattern]: string[]) {\n\tconst tmp = new Temp();\n\tprocess.on('exit', () => tmp.dispose());\n\n\tconst key = crypto.randomBytes(32);\n\tconst iv = crypto.randomBytes(16);\n\tconst cipher = crypto.createCipheriv('aes-256-cbc', key, iv);\n\tconst encryptedToken = cipher.update(process.env['SYSTEM_ACCESSTOKEN']!.trim(), 'utf8', 'hex') + cipher.final('hex');\n\n\tconst encryptionDetailsPath = tmp.tmpNameSync();\n\tfs.writeFileSync(encryptionDetailsPath, JSON.stringify({ key: key.toString('hex'), iv: iv.toString('hex') }));\n\n\tconst encryptedTokenPath = tmp.tmpNameSync();\n\tfs.writeFileSync(encryptedTokenPath, encryptedToken);\n\n\tconst patternPath = tmp.tmpNameSync();\n\tfs.writeFileSync(patternPath, pattern);\n\n\tconst paramsPath = tmp.tmpNameSync();\n\tfs.writeFileSync(paramsPath, JSON.stringify(getParams(type)));\n\n\tconst dotnetVersion = cp.execSync('dotnet --version', { encoding: 'utf8' }).trim();\n\tconst adoTaskVersion = path.basename(path.dirname(path.dirname(esrpCliPath)));\n\n\tconst federatedTokenData = {\n\t\tjobId: process.env['SYSTEM_JOBID'],\n\t\tplanId: process.env['SYSTEM_PLANID'],\n\t\tprojectId: process.env['SYSTEM_TEAMPROJECTID'],\n\t\thub: process.env['SYSTEM_HOSTTYPE'],\n\t\turi: process.env['SYSTEM_COLLECTIONURI'],\n\t\tmanagedIdentityId: process.env['VSCODE_ESRP_CLIENT_ID'],\n\t\tmanagedIdentityTenantId: process.env['VSCODE_ESRP_TENANT_ID'],\n\t\tserviceConnectionId: process.env['VSCODE_ESRP_SERVICE_CONNECTION_ID'],\n\t\ttempDirectory: os.tmpdir(),\n\t\tsystemAccessToken: encryptedTokenPath,\n\t\tencryptionKey: encryptionDetailsPath\n\t};\n\n\tconst args = [\n\t\tesrpCliPath,\n\t\t'vsts.sign',\n\t\t'-a', process.env['ESRP_CLIENT_ID']!,\n\t\t'-d', process.env['ESRP_TENANT_ID']!,\n\t\t'-k', JSON.stringify({ akv: 'vscode-esrp' }),\n\t\t'-z', JSON.stringify({ akv: 'vscode-esrp', cert: 'esrp-sign' }),\n\t\t'-f', folderPath,\n\t\t'-p', patternPath,\n\t\t'-u', 'false',\n\t\t'-x', 'regularSigning',\n\t\t'-b', 'input.json',\n\t\t'-l', 'AzSecPack_PublisherPolicyProd.xml',\n\t\t'-y', 'inlineSignParams',\n\t\t'-j', paramsPath,\n\t\t'-c', '9997',\n\t\t'-t', '120',\n\t\t'-g', '10',\n\t\t'-v', 'Tls12',\n\t\t'-s', 'https://api.esrp.microsoft.com/api/v1',\n\t\t'-m', '0',\n\t\t'-o', 'Microsoft',\n\t\t'-i', 'https://www.microsoft.com',\n\t\t'-n', '5',\n\t\t'-r', 'true',\n\t\t'-w', dotnetVersion,\n\t\t'-skipAdoReportAttachment', 'false',\n\t\t'-pendingAnalysisWaitTimeoutMinutes', '5',\n\t\t'-adoTaskVersion', adoTaskVersion,\n\t\t'-resourceUri', 'https://msazurecloud.onmicrosoft.com/api.esrp.microsoft.com',\n\t\t'-esrpClientId', process.env['ESRP_CLIENT_ID']!,\n\t\t'-useMSIAuthentication', 'true',\n\t\t'-federatedTokenData', JSON.stringify(federatedTokenData)\n\t];\n\n\ttry {\n\t\tcp.execFileSync('dotnet', args, { stdio: 'inherit' });\n\t} catch (err) {\n\t\tconsole.error('ESRP failed');\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t}\n}\n\nif (require.main === module) {\n\tmain(process.argv.slice(2));\n\tprocess.exit(0);\n}\n"
  },
  {
    "path": "build/azure-pipelines/common/telemetry-config.json",
    "content": "[\n\t{\n\t\t\"eventPrefix\": \"typescript-language-features/\",\n\t\t\"sourceDirs\": [\n\t\t\t\"../../s/extensions/typescript-language-features\"\n\t\t],\n\t\t\"excludedDirs\": [],\n\t\t\"applyEndpoints\": true\n\t},\n\t{\n\t\t\"eventPrefix\": \"git/\",\n\t\t\"sourceDirs\": [\n\t\t\t\"../../s/extensions/git\"\n\t\t],\n\t\t\"excludedDirs\": [],\n\t\t\"applyEndpoints\": true\n\t},\n\t{\n\t\t\"eventPrefix\": \"extension-telemetry/\",\n\t\t\"sourceDirs\": [\n\t\t\t\"vscode-extension-telemetry\"\n\t\t],\n\t\t\"excludedDirs\": [],\n\t\t\"applyEndpoints\": true\n\t},\n\t{\n\t\t\"eventPrefix\": \"vscode-markdown/\",\n\t\t\"sourceDirs\": [\n\t\t\t\"../../s/extensions/markdown-language-features\"\n\t\t],\n\t\t\"excludedDirs\": [],\n\t\t\"applyEndpoints\": true\n\t},\n\t{\n\t\t\"eventPrefix\": \"html-language-features/\",\n\t\t\"sourceDirs\": [\n\t\t\t\"../../s/extensions/html-language-features\",\n\t\t\t\"vscode-html-languageservice\"\n\t\t],\n\t\t\"excludedDirs\": [],\n\t\t\"applyEndpoints\": true\n\t},\n\t{\n\t\t\"eventPrefix\": \"json-language-features/\",\n\t\t\"sourceDirs\": [\n\t\t\t\"../../s/extensions/json-language-features\",\n\t\t\t\"vscode-json-languageservice\"\n\t\t],\n\t\t\"excludedDirs\": [],\n\t\t\"applyEndpoints\": true\n\t},\n\t{\n\t\t\"eventPrefix\": \"ms-vscode.node/\",\n\t\t\"sourceDirs\": [\n\t\t\t\"vscode-chrome-debug-core\",\n\t\t\t\"vscode-node-debug\"\n\t\t],\n\t\t\"excludedDirs\": [],\n\t\t\"applyEndpoints\": true,\n\t\t\"patchDebugEvents\": true\n\t}\n]\n"
  },
  {
    "path": "build/azure-pipelines/config/CredScanSuppressions.json",
    "content": "{\n\t\"tool\": \"Credential Scanner\",\n\t\"suppressions\": [\n\t\t{\n\t\t\t\"file\": [\n\t\t\t\t\"src/vs/base/test/common/uri.test.ts\",\n\t\t\t\t\"src/vs/workbench/api/test/browser/extHostTelemetry.test.ts\"\n\t\t\t],\n\t\t\t\"_justification\": \"These are dummy credentials in tests.\"\n\t\t},\n\t\t{\n\t\t\t\"file\": [\n\t\t\t\t\".build/linux/rpm/x86_64/rpmbuild/BUILD/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/x86_64/rpmbuild/BUILD/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/rpm/armv7hl/rpmbuild/BUILD/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/armv7hl/rpmbuild/BUILD/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/rpm/aarch64/rpmbuild/BUILD/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/aarch64/rpmbuild/BUILD/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/stage/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/stage/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/prime/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/prime/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/parts/code/build/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/parts/code/install/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/parts/code/src/usr/share/code/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/parts/code/build/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/parts/code/install/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-x64/parts/code/src/usr/share/code/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\"\n\t\t\t],\n\t\t\t\"_justification\": \"These are safe to ignore, since they are built artifacts (stable).\"\n\t\t},\n\t\t{\n\t\t\t\"file\": [\n\t\t\t\t\".build/linux/rpm/x86_64/rpmbuild/BUILD/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/x86_64/rpmbuild/BUILD/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/rpm/armv7hl/rpmbuild/BUILD/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/armv7hl/rpmbuild/BUILD/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/rpm/aarch64/rpmbuild/BUILD/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/aarch64/rpmbuild/BUILD/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/stage/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/stage/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/prime/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/prime/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/parts/code/build/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/parts/code/install/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/parts/code/src/usr/share/code-insiders/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/parts/code/build/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/parts/code/install/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-insiders-x64/parts/code/src/usr/share/code-insiders/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\"\n\t\t\t],\n\t\t\t\"_justification\": \"These are safe to ignore, since they are built artifacts (insiders).\"\n\t\t},\n\t\t{\n\t\t\t\"file\": [\n\t\t\t\t\".build/linux/rpm/x86_64/rpmbuild/BUILD/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/x86_64/rpmbuild/BUILD/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/rpm/armv7hl/rpmbuild/BUILD/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/armv7hl/rpmbuild/BUILD/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/rpm/aarch64/rpmbuild/BUILD/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/rpm/aarch64/rpmbuild/BUILD/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/stage/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/stage/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/prime/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/prime/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/parts/code/build/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/parts/code/install/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/parts/code/src/usr/share/code-exploration/resources/app/extensions/github-authentication/dist/extension.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/parts/code/build/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/parts/code/install/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\",\n\t\t\t\t\".build/linux/snap/x64/code-exploration-x64/parts/code/src/usr/share/code-exploration/resources/app/extensions/emmet/dist/node/emmetNodeMain.js\"\n\t\t\t],\n\t\t\t\"_justification\": \"These are safe to ignore, since they are built artifacts (exploration).\"\n\t\t},\n\t\t{\n\t\t\t\"file\": [\n\t\t\t\t\".build/web/extensions/github-authentication/dist/browser/extension.js\",\n\t\t\t\t\".build/web/extensions/emmet/dist/browser/emmetBrowserMain.js.map\",\n\t\t\t\t\".build/web/extensions/emmet/dist/browser/emmetBrowserMain.js\"\n\t\t\t],\n\t\t\t\"_justification\": \"These are safe to ignore, since they are built artifacts (web).\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "build/azure-pipelines/config/tsaoptions.json",
    "content": "{\n\t\"codebaseName\": \"devdiv_microsoft_vscode\",\n\t\"serviceTreeID\": \"79c048b2-322f-4ed5-a1ea-252a1250e4b3\",\n\t\"instanceUrl\": \"https://devdiv.visualstudio.com/defaultcollection\",\n\t\"projectName\": \"DevDiv\",\n\t\"areaPath\": \"DevDiv\\\\VS Code (compliance tracking only)\\\\Visual Studio Code Client\",\n\t\"notificationAliases\": [\n\t\t\"monacotools@microsoft.com\"\n\t],\n\t\"validateToolOutput\": \"None\",\n\t\"allTools\": true\n}\n"
  },
  {
    "path": "build/azure-pipelines/darwin/app-entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n    <key>com.apple.security.device.audio-input</key>\n    <true/>\n    <key>com.apple.security.device.camera</key>\n    <true/>\n    <key>com.apple.security.automation.apple-events</key>\n    <true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "build/azure-pipelines/darwin/cli-build-darwin.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_BUILD_MACOS\n    type: boolean\n    default: false\n  - name: VSCODE_BUILD_MACOS_ARM64\n    type: boolean\n    default: false\n  - name: VSCODE_CHECK_ONLY\n    type: boolean\n    default: false\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ../cli/cli-apply-patches.yml@self\n\n  - task: Npm@1\n    displayName: Download openssl prebuilt\n    inputs:\n      command: custom\n      customCommand: pack @vscode-internal/openssl-prebuilt@0.0.11\n      customRegistry: useFeed\n      customFeed: \"Monaco/openssl-prebuilt\"\n      workingDir: $(Build.ArtifactStagingDirectory)\n\n  - script: |\n      set -e\n      mkdir $(Build.ArtifactStagingDirectory)/openssl\n      tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.11.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl\n    displayName: Extract openssl prebuilt\n\n  - template: ../cli/install-rust-posix.yml@self\n    parameters:\n      targets:\n        - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:\n          - x86_64-apple-darwin\n        - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:\n          - aarch64-apple-darwin\n\n  - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_TARGET: x86_64-apple-darwin\n        VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_x64_cli\n        VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }}\n        VSCODE_CLI_ENV:\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/include\n\n  - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_TARGET: aarch64-apple-darwin\n        VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_arm64_cli\n        VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }}\n        VSCODE_CLI_ENV:\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/include\n\n  - ${{ if not(parameters.VSCODE_CHECK_ONLY) }}:\n    - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_darwin_x64_cli.zip\n          artifactName: unsigned_vscode_cli_darwin_x64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code macOS x64 CLI (unsigned)\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish unsigned_vscode_cli_darwin_x64_cli artifact\n\n    - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_darwin_arm64_cli.zip\n          artifactName: unsigned_vscode_cli_darwin_arm64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code macOS arm64 CLI (unsigned)\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish unsigned_vscode_cli_darwin_arm64_cli artifact\n"
  },
  {
    "path": "build/azure-pipelines/darwin/helper-gpu-entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "build/azure-pipelines/darwin/helper-plugin-entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.cs.allow-jit</key>\n\t<true/>\n\t<key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n\t<true/>\n\t<key>com.apple.security.cs.disable-library-validation</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "build/azure-pipelines/darwin/helper-renderer-entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml",
    "content": "parameters:\n  - name: VSCODE_BUILD_MACOS\n    type: boolean\n  - name: VSCODE_BUILD_MACOS_ARM64\n    type: boolean\n  - name: VSCODE_QUALITY\n    type: string\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - task: AzureKeyVault@2\n      displayName: \"Azure Key Vault: Get Secrets\"\n      inputs:\n        azureSubscription: vscode\n        KeyVaultName: vscode-build-secrets\n        SecretsFilter: \"github-distro-mixin-password\"\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY build\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - script: |\n      set -e\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    workingDirectory: build\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install build dependencies\n\n  - template: ../cli/cli-darwin-sign.yml@self\n    parameters:\n      VSCODE_CLI_ARTIFACTS:\n        - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:\n          - unsigned_vscode_cli_darwin_x64_cli\n        - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:\n          - unsigned_vscode_cli_darwin_arm64_cli\n"
  },
  {
    "path": "build/azure-pipelines/darwin/product-build-darwin-sign.yml",
    "content": "steps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - task: UseDotNet@2\n    inputs:\n      version: 6.x\n\n  - task: EsrpCodeSigning@5\n    inputs:\n      UseMSIAuthentication: true\n      ConnectedServiceName: vscode-esrp\n      AppRegistrationClientId: $(ESRP_CLIENT_ID)\n      AppRegistrationTenantId: $(ESRP_TENANT_ID)\n      AuthAKVName: vscode-esrp\n      AuthSignCertName: esrp-sign\n      FolderPath: .\n      Pattern: noop\n    displayName: 'Install ESRP Tooling'\n\n  - script: |\n      # For legacy purposes, arch for x64 is just 'darwin'\n      case $VSCODE_ARCH in\n        x64) ASSET_ID=\"darwin\" ;;\n        arm64) ASSET_ID=\"darwin-arm64\" ;;\n        universal) ASSET_ID=\"darwin-universal\" ;;\n      esac\n      echo \"##vso[task.setvariable variable=ASSET_ID]$ASSET_ID\"\n    displayName: Set asset id variable\n\n  - script: |\n      if [ -z \"$(ASSET_ID)\" ]; then\n        echo \"ASSET_ID is empty\"\n        exit 1\n      else\n        echo \"ASSET_ID is set to $(ASSET_ID)\"\n      fi\n    displayName: Check ASSET_ID variable\n\n  - download: current\n    artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive\n    displayName: Download $(VSCODE_ARCH) artifact\n\n  - script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll sign-darwin $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip\n    env:\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n    displayName: Codesign\n\n  - script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll notarize-darwin $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip\n    env:\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n    displayName: Notarize\n\n  - script: unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\n    displayName: Extract signed app\n\n  - script: |\n      set -e\n      APP_ROOT=\"$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\"\n      APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n      APP_PATH=\"$APP_ROOT/$APP_NAME\"\n      codesign -dv --deep --verbose=4 \"$APP_PATH\"\n      \"$APP_PATH/Contents/Resources/app/bin/code\" --export-default-configuration=.build\n    displayName: Verify signature\n    condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))\n\n  - script: mv $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-x64.zip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin.zip\n    displayName: Rename x64 build to its legacy name\n    condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))\n\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-$(ASSET_ID).zip\n      artifactName: vscode_client_darwin_$(VSCODE_ARCH)_archive\n      sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\n      sbomPackageName: \"VS Code macOS $(VSCODE_ARCH)\"\n      sbomPackageVersion: $(Build.SourceVersion)\n    displayName: Publish client archive\n"
  },
  {
    "path": "build/azure-pipelines/darwin/product-build-darwin-test.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_RUN_UNIT_TESTS\n    type: boolean\n  - name: VSCODE_RUN_INTEGRATION_TESTS\n    type: boolean\n  - name: VSCODE_RUN_SMOKE_TESTS\n    type: boolean\n\nsteps:\n  - script: npm exec -- npm-run-all -lp \"electron $(VSCODE_ARCH)\" \"playwright-install\"\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Download Electron and Playwright\n    retryCountOnTaskFailure: 3\n\n  - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: ./scripts/test.sh --tfs \"Unit Tests\"\n        displayName: Run unit tests (Electron)\n        timeoutInMinutes: 15\n      - script: npm run test-node\n        displayName: Run unit tests (node.js)\n        timeoutInMinutes: 15\n      - script: npm run test-browser-no-install -- --browser webkit --tfs \"Browser Unit Tests\"\n        env:\n          DEBUG: \"*browser*\"\n        displayName: Run unit tests (Browser, Webkit)\n        timeoutInMinutes: 30\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: ./scripts/test.sh --build --tfs \"Unit Tests\"\n        displayName: Run unit tests (Electron)\n        timeoutInMinutes: 15\n      - script: npm run test-node -- --build\n        displayName: Run unit tests (node.js)\n        timeoutInMinutes: 15\n      - script: npm run test-browser-no-install -- --build --browser webkit --tfs \"Browser Unit Tests\"\n        env:\n          DEBUG: \"*browser*\"\n        displayName: Run unit tests (Browser, Webkit)\n        timeoutInMinutes: 30\n\n  - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:\n    - script: |\n        set -e\n        npm run gulp \\\n          compile-extension:configuration-editing \\\n          compile-extension:css-language-features-server \\\n          compile-extension:emmet \\\n          compile-extension:git \\\n          compile-extension:github-authentication \\\n          compile-extension:html-language-features-server \\\n          compile-extension:ipynb \\\n          compile-extension:notebook-renderers \\\n          compile-extension:json-language-features-server \\\n          compile-extension:markdown-language-features \\\n          compile-extension-media \\\n          compile-extension:microsoft-authentication \\\n          compile-extension:typescript-language-features \\\n          compile-extension:vscode-api-tests \\\n          compile-extension:vscode-colorize-tests \\\n          compile-extension:vscode-colorize-perf-tests \\\n          compile-extension:vscode-test-resolver\n      displayName: Build integration tests\n\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: ./scripts/test-integration --tfs \"Integration Tests\"\n        displayName: Run integration tests (Electron)\n        timeoutInMinutes: 20\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: |\n          # Figure out the full absolute path of the product we just built\n          # including the remote server and configure the integration tests\n          # to run with these builds instead of running out of sources.\n          set -e\n          APP_ROOT=\"$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)\"\n          APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n          INTEGRATION_TEST_ELECTRON_PATH=\"$APP_ROOT/$APP_NAME/Contents/MacOS/Electron\" \\\n          ./scripts/test-integration.sh --build --tfs \"Integration Tests\"\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)\n        displayName: Run integration tests (Electron)\n        timeoutInMinutes: 20\n\n      - script: ./scripts/test-web-integration.sh --browser webkit\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web\n        displayName: Run integration tests (Browser, Webkit)\n        timeoutInMinutes: 20\n\n      - script: |\n          set -e\n          APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)\n          APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n          INTEGRATION_TEST_ELECTRON_PATH=\"$APP_ROOT/$APP_NAME/Contents/MacOS/Electron\" \\\n          ./scripts/test-remote-integration.sh\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)\n        displayName: Run integration tests (Remote)\n        timeoutInMinutes: 20\n\n  - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:\n    - script: ps -ef\n      displayName: Diagnostics before smoke test run\n      continueOnError: true\n      condition: succeededOrFailed()\n\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: npm run compile\n        workingDirectory: test/smoke\n        displayName: Compile smoke tests\n\n      - script: npm run gulp compile-extension-media\n        displayName: Compile extensions for smoke tests\n\n      - script: npm run smoketest-no-compile -- --tracing\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Electron)\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: |\n          set -e\n          APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)\n          APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n          npm run smoketest-no-compile -- --tracing --build \"$APP_ROOT/$APP_NAME\"\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Electron)\n\n      - script: npm run smoketest-no-compile -- --web --tracing --headless\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Browser, Chromium)\n\n      - script: |\n          set -e\n          npm run gulp compile-extension:vscode-test-resolver\n          APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)\n          APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n          npm run smoketest-no-compile -- --tracing --remote --build \"$APP_ROOT/$APP_NAME\"\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Remote)\n\n    - script: ps -ef\n      displayName: Diagnostics after smoke test run\n      continueOnError: true\n      condition: succeededOrFailed()\n\n  - ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: .build/crashes\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: crash-dump-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: crash-dump-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: crash-dump-macos-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Crash Reports\"\n      continueOnError: true\n      condition: failed()\n\n    # In order to properly symbolify above crash reports\n    # (if any), we need the compiled native modules too\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: node_modules\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: node-modules-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: node-modules-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: node-modules-macos-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Node Modules\"\n      continueOnError: true\n      condition: failed()\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: .build/logs\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: logs-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: logs-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: logs-macos-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Log Files\"\n      continueOnError: true\n      condition: succeededOrFailed()\n\n  - task: PublishTestResults@2\n    displayName: Publish Tests Results\n    inputs:\n      testResultsFiles: \"*-results.xml\"\n      searchFolder: \"$(Build.ArtifactStagingDirectory)/test-results\"\n    condition: succeededOrFailed()\n"
  },
  {
    "path": "build/azure-pipelines/darwin/product-build-darwin-universal.yml",
    "content": "steps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - template: ../distro/download-distro.yml@self\n\n  - task: AzureKeyVault@2\n    displayName: \"Azure Key Vault: Get Secrets\"\n    inputs:\n      azureSubscription: vscode\n      KeyVaultName: vscode-build-secrets\n      SecretsFilter: \"github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key\"\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY build\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - script: |\n      set -e\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    workingDirectory: build\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install build dependencies\n\n  - download: current\n    artifact: unsigned_vscode_client_darwin_x64_archive\n    displayName: Download x64 artifact\n\n  - download: current\n    artifact: unsigned_vscode_client_darwin_arm64_archive\n    displayName: Download arm64 artifact\n\n  - script: node build/azure-pipelines/distro/mixin-quality\n    displayName: Mixin distro quality\n\n  - script: |\n      set -e\n      unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64\n      unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64\n      DEBUG=* node build/darwin/create-universal-app.js $(agent.builddirectory)\n    displayName: Create Universal App\n\n  - script: |\n      set -e\n      APP_ROOT=\"$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\"\n      APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n      APP_PATH=\"$APP_ROOT/$APP_NAME\" node build/darwin/verify-macho.js universal\n    displayName: Verify arch of Mach-O objects\n\n  - script: |\n      set -e\n      security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain\n      security default-keychain -s $(agent.tempdirectory)/buildagent.keychain\n      security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain\n      echo \"$(macos-developer-certificate)\" | base64 -D > $(agent.tempdirectory)/cert.p12\n      security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P \"$(macos-developer-certificate-key)\" -T /usr/bin/codesign\n      export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi \"([0-9A-F]{40})\" | head -n 1)\n      security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain\n      DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory)\n    displayName: Set Hardened Entitlements\n\n  - script: pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd\n    displayName: Archive build\n\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip\n      artifactName: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive\n      sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\n      sbomPackageName: \"VS Code macOS $(VSCODE_ARCH) (unsigned)\"\n      sbomPackageVersion: $(Build.SourceVersion)\n    displayName: Publish client archive\n"
  },
  {
    "path": "build/azure-pipelines/darwin/product-build-darwin.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_CIBUILD\n    type: boolean\n  - name: VSCODE_RUN_UNIT_TESTS\n    type: boolean\n  - name: VSCODE_RUN_INTEGRATION_TESTS\n    type: boolean\n  - name: VSCODE_RUN_SMOKE_TESTS\n    type: boolean\n\nsteps:\n  - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n    - checkout: self\n      fetchDepth: 1\n      retryCountOnTaskFailure: 3\n\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ../distro/download-distro.yml@self\n\n    - task: AzureKeyVault@2\n      displayName: \"Azure Key Vault: Get Secrets\"\n      inputs:\n        azureSubscription: vscode\n        KeyVaultName: vscode-build-secrets\n        SecretsFilter: \"github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key\"\n\n    - task: DownloadPipelineArtifact@2\n      inputs:\n        artifact: Compilation\n        path: $(Build.ArtifactStagingDirectory)\n      displayName: Download compilation output\n\n    - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz\n      displayName: Extract compilation output\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js darwin $VSCODE_ARCH > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - script: tar -xzf .build/node_modules_cache/cache.tgz\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - script: |\n      set -e\n      c++ --version\n      xcode-select -print-path\n      python3 -m pip install setuptools\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    env:\n      npm_config_arch: $(VSCODE_ARCH)\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      # Avoid using dlopen to load Kerberos on macOS which can cause missing libraries\n      # https://github.com/mongodb-js/kerberos/commit/04044d2814ad1d01e77f1ce87f26b03d86692cf2\n      # flipped the default to support legacy linux distros which shouldn't happen\n      # on macOS.\n      GYP_DEFINES: \"kerberos_use_rtld=false\"\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: node build/azure-pipelines/distro/mixin-npm\n      condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n      displayName: Mixin distro node modules\n\n  - script: |\n      set -e\n      node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt\n      mkdir -p .build/node_modules_cache\n      tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: node build/azure-pipelines/distro/mixin-quality\n      displayName: Mixin distro quality\n\n  - template: ../common/install-builtin-extensions.yml@self\n\n  - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:\n    - script: node build/lib/policies darwin\n      displayName: Generate policy definitions\n      retryCountOnTaskFailure: 3\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: |\n        set -e\n        npm run gulp vscode-darwin-$(VSCODE_ARCH)-min-ci\n        echo \"##vso[task.setvariable variable=BUILT_CLIENT]true\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build client\n\n    - script: |\n        set -e\n        npm run gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci\n        mv ../vscode-reh-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH) # TODO@joaomoreno\n        ARCHIVE_PATH=\".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH).zip\"\n        mkdir -p $(dirname $ARCHIVE_PATH)\n        (cd .. && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH vscode-server-darwin-$(VSCODE_ARCH))\n        echo \"##vso[task.setvariable variable=SERVER_PATH]$ARCHIVE_PATH\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build server\n\n    - script: |\n        set -e\n        npm run gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci\n        mv ../vscode-reh-web-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH)-web # TODO@joaomoreno\n        ARCHIVE_PATH=\".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH)-web.zip\"\n        mkdir -p $(dirname $ARCHIVE_PATH)\n        (cd .. && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH vscode-server-darwin-$(VSCODE_ARCH)-web)\n        echo \"##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build server (web)\n\n  - ${{ else }}:\n      - script: npm run gulp transpile-client-esbuild transpile-extensions\n        env:\n          GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n        displayName: Transpile\n\n  - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n    - template: product-build-darwin-test.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}\n        VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}\n        VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}\n\n  - ${{ elseif and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:\n    - task: DownloadPipelineArtifact@2\n      inputs:\n        artifact: unsigned_vscode_cli_darwin_$(VSCODE_ARCH)_cli\n        patterns: \"**\"\n        path: $(Build.ArtifactStagingDirectory)/cli\n      displayName: Download VS Code CLI\n\n    - script: |\n        set -e\n        APP_ROOT=\"$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\"\n        APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n        APP_PATH=\"$APP_ROOT/$APP_NAME\"\n        unzip $(Build.ArtifactStagingDirectory)/cli/*.zip -d $(Build.ArtifactStagingDirectory)/cli\n        CLI_APP_NAME=$(node -p \"require(\\\"$APP_PATH/Contents/Resources/app/product.json\\\").tunnelApplicationName\")\n        APP_NAME=$(node -p \"require(\\\"$APP_PATH/Contents/Resources/app/product.json\\\").applicationName\")\n        mv \"$(Build.ArtifactStagingDirectory)/cli/$APP_NAME\" \"$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME\"\n        chmod +x \"$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME\"\n      displayName: Make CLI executable\n\n    - script: |\n        set -e\n        APP_ROOT=\"$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\"\n        APP_NAME=\"`ls $APP_ROOT | head -n 1`\"\n        APP_PATH=\"$APP_ROOT/$APP_NAME\" node build/darwin/verify-macho.js $(VSCODE_ARCH)\n        APP_PATH=\"$(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)\" node build/darwin/verify-macho.js $(VSCODE_ARCH)\n      displayName: Verify arch of Mach-O objects\n\n    # Setting hardened entitlements is a requirement for:\n    # * Apple notarization\n    # * Running tests on Big Sur (because Big Sur has additional security precautions)\n    - script: |\n        set -e\n        security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain\n        security default-keychain -s $(agent.tempdirectory)/buildagent.keychain\n        security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain\n        echo \"$(macos-developer-certificate)\" | base64 -D > $(agent.tempdirectory)/cert.p12\n        security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P \"$(macos-developer-certificate-key)\" -T /usr/bin/codesign\n        export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi \"([0-9A-F]{40})\" | head -n 1)\n        security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain\n        DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory)\n      displayName: Set Hardened Entitlements\n\n    - script: |\n        set -e\n        ARCHIVE_PATH=\".build/darwin/client/VSCode-darwin-$(VSCODE_ARCH).zip\"\n        mkdir -p $(dirname $ARCHIVE_PATH)\n        (cd ../VSCode-darwin-$(VSCODE_ARCH) && zip -Xry $(Build.SourcesDirectory)/$ARCHIVE_PATH *)\n        echo \"##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH\"\n      condition: and(succeededOrFailed(), eq(variables['BUILT_CLIENT'], 'true'))\n      displayName: Package client\n\n    - script: echo \"##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_\"\n      condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues'))\n      displayName: Generate artifact prefix\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(CLIENT_PATH)\n        artifactName: $(ARTIFACT_PREFIX)unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive\n        sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)\n        sbomPackageName: \"VS Code macOS $(VSCODE_ARCH) (unsigned)\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      displayName: Publish client archive\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(SERVER_PATH)\n        artifactName: $(ARTIFACT_PREFIX)vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned\n        sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)\n        sbomPackageName: \"VS Code macOS $(VSCODE_ARCH) Server\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], ''))\n      displayName: Publish server archive\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(WEB_PATH)\n        artifactName: $(ARTIFACT_PREFIX)vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned\n        sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web\n        sbomPackageName: \"VS Code macOS $(VSCODE_ARCH) Web\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], ''))\n      displayName: Publish web server archive\n"
  },
  {
    "path": "build/azure-pipelines/distro/download-distro.yml",
    "content": "steps:\n  - task: AzureKeyVault@2\n    displayName: \"Azure Key Vault: Get Secrets\"\n    inputs:\n      azureSubscription: vscode\n      KeyVaultName: vscode-build-secrets\n      SecretsFilter: \"github-distro-mixin-password\"\n\n  # TODO@joaomoreno: Keep pwsh once we move out of running entire jobs in containers\n  - pwsh: |\n      \"machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)\" | Out-File \"$Home/_netrc\" -Encoding ASCII\n    condition: and(succeeded(), contains(variables['Agent.OS'], 'windows'))\n    displayName: Setup distro auth (Windows)\n\n  - pwsh: |\n      $ErrorActionPreference = \"Stop\"\n      $ArchivePath = \"$(Agent.TempDirectory)/distro.zip\"\n      $PackageJson = Get-Content -Path package.json -Raw | ConvertFrom-Json\n      $DistroVersion = $PackageJson.distro\n\n      Invoke-WebRequest -Uri \"https://api.github.com/repos/microsoft/vscode-distro/zipball/$DistroVersion\" `\n        -OutFile $ArchivePath `\n        -Headers @{ \"Accept\" = \"application/vnd.github+json\"; \"Authorization\" = \"Bearer $(github-distro-mixin-password)\"; \"X-GitHub-Api-Version\" = \"2022-11-28\" }\n\n      New-Item -ItemType Directory -Path .build -Force\n      Expand-Archive -Path $ArchivePath -DestinationPath .build\n      Rename-Item -Path \".build/microsoft-vscode-distro-$DistroVersion\" -NewName distro\n    condition: and(succeeded(), contains(variables['Agent.OS'], 'windows'))\n    displayName: Download distro (Windows)\n\n  - script: |\n      mkdir -p .build\n      cat << EOF | tee ~/.netrc .build/.netrc > /dev/null\n      machine github.com\n      login vscode\n      password $(github-distro-mixin-password)\n      EOF\n    condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows')))\n    displayName: Setup distro auth (non-Windows)\n\n  - script: |\n      set -e\n      ArchivePath=\"$(Agent.TempDirectory)/distro.zip\"\n      DistroVersion=$(node -p \"require('./package.json').distro\")\n\n      curl -H \"Accept: application/vnd.github+json\" \\\n        -H \"Authorization: Bearer $(github-distro-mixin-password)\" \\\n        -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n        -o $ArchivePath \\\n        -L \"https://api.github.com/repos/microsoft/vscode-distro/zipball/$DistroVersion\"\n\n      unzip $ArchivePath -d .build\n      mv .build/microsoft-vscode-distro-$DistroVersion .build/distro\n    condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows')))\n    displayName: Download distro (non-Windows)\n"
  },
  {
    "path": "build/azure-pipelines/distro/mixin-npm.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst { dirs } = require('../../npm/dirs');\nfunction log(...args) {\n    console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);\n}\nfunction mixin(mixinPath) {\n    if (!fs_1.default.existsSync(`${mixinPath}/node_modules`)) {\n        log(`Skipping distro npm dependencies: ${mixinPath} (no node_modules)`);\n        return;\n    }\n    log(`Mixing in distro npm dependencies: ${mixinPath}`);\n    const distroPackageJson = JSON.parse(fs_1.default.readFileSync(`${mixinPath}/package.json`, 'utf8'));\n    const targetPath = path_1.default.relative('.build/distro/npm', mixinPath);\n    for (const dependency of Object.keys(distroPackageJson.dependencies)) {\n        fs_1.default.rmSync(`./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true });\n        fs_1.default.cpSync(`${mixinPath}/node_modules/${dependency}`, `./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true, dereference: true });\n    }\n    log(`Mixed in distro npm dependencies: ${mixinPath} ✔︎`);\n}\nfunction main() {\n    log(`Mixing in distro npm dependencies...`);\n    const mixinPaths = dirs.filter(d => /^.build\\/distro\\/npm/.test(d));\n    for (const mixinPath of mixinPaths) {\n        mixin(mixinPath);\n    }\n}\nmain();\n//# sourceMappingURL=mixin-npm.js.map"
  },
  {
    "path": "build/azure-pipelines/distro/mixin-npm.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nconst { dirs } = require('../../npm/dirs') as { dirs: string[] };\n\nfunction log(...args: any[]): void {\n\tconsole.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);\n}\n\nfunction mixin(mixinPath: string) {\n\tif (!fs.existsSync(`${mixinPath}/node_modules`)) {\n\t\tlog(`Skipping distro npm dependencies: ${mixinPath} (no node_modules)`);\n\t\treturn;\n\t}\n\n\tlog(`Mixing in distro npm dependencies: ${mixinPath}`);\n\n\tconst distroPackageJson = JSON.parse(fs.readFileSync(`${mixinPath}/package.json`, 'utf8'));\n\tconst targetPath = path.relative('.build/distro/npm', mixinPath);\n\n\tfor (const dependency of Object.keys(distroPackageJson.dependencies)) {\n\t\tfs.rmSync(`./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true });\n\t\tfs.cpSync(`${mixinPath}/node_modules/${dependency}`, `./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true, dereference: true });\n\t}\n\n\tlog(`Mixed in distro npm dependencies: ${mixinPath} ✔︎`);\n}\n\nfunction main() {\n\tlog(`Mixing in distro npm dependencies...`);\n\n\tconst mixinPaths = dirs.filter(d => /^.build\\/distro\\/npm/.test(d));\n\n\tfor (const mixinPath of mixinPaths) {\n\t\tmixin(mixinPath);\n\t}\n}\n\nmain();\n"
  },
  {
    "path": "build/azure-pipelines/distro/mixin-quality.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nfunction log(...args) {\n    console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);\n}\nfunction main() {\n    const quality = process.env['VSCODE_QUALITY'];\n    if (!quality) {\n        throw new Error('Missing VSCODE_QUALITY, skipping mixin');\n    }\n    log(`Mixing in distro quality...`);\n    const basePath = `.build/distro/mixin/${quality}`;\n    for (const name of fs_1.default.readdirSync(basePath)) {\n        const distroPath = path_1.default.join(basePath, name);\n        const ossPath = path_1.default.relative(basePath, distroPath);\n        if (ossPath === 'product.json') {\n            const distro = JSON.parse(fs_1.default.readFileSync(distroPath, 'utf8'));\n            const oss = JSON.parse(fs_1.default.readFileSync(ossPath, 'utf8'));\n            let builtInExtensions = oss.builtInExtensions;\n            if (Array.isArray(distro.builtInExtensions)) {\n                log('Overwriting built-in extensions:', distro.builtInExtensions.map(e => e.name));\n                builtInExtensions = distro.builtInExtensions;\n            }\n            else if (distro.builtInExtensions) {\n                const include = distro.builtInExtensions['include'] ?? [];\n                const exclude = distro.builtInExtensions['exclude'] ?? [];\n                log('OSS built-in extensions:', builtInExtensions.map(e => e.name));\n                log('Including built-in extensions:', include.map(e => e.name));\n                log('Excluding built-in extensions:', exclude);\n                builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));\n                builtInExtensions = [...builtInExtensions, ...include];\n                log('Final built-in extensions:', builtInExtensions.map(e => e.name));\n            }\n            else {\n                log('Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));\n            }\n            const result = { webBuiltInExtensions: oss.webBuiltInExtensions, ...distro, builtInExtensions };\n            fs_1.default.writeFileSync(ossPath, JSON.stringify(result, null, '\\t'), 'utf8');\n        }\n        else {\n            fs_1.default.cpSync(distroPath, ossPath, { force: true, recursive: true });\n        }\n        log(distroPath, '✔︎');\n    }\n}\nmain();\n//# sourceMappingURL=mixin-quality.js.map"
  },
  {
    "path": "build/azure-pipelines/distro/mixin-quality.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\n\ninterface IBuiltInExtension {\n\treadonly name: string;\n\treadonly version: string;\n\treadonly repo: string;\n\treadonly metadata: any;\n}\n\ninterface OSSProduct {\n\treadonly builtInExtensions: IBuiltInExtension[];\n\treadonly webBuiltInExtensions?: IBuiltInExtension[];\n}\n\ninterface Product {\n\treadonly builtInExtensions?: IBuiltInExtension[] | { 'include'?: IBuiltInExtension[]; 'exclude'?: string[] };\n\treadonly webBuiltInExtensions?: IBuiltInExtension[];\n}\n\nfunction log(...args: any[]): void {\n\tconsole.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);\n}\n\nfunction main() {\n\tconst quality = process.env['VSCODE_QUALITY'];\n\n\tif (!quality) {\n\t\tthrow new Error('Missing VSCODE_QUALITY, skipping mixin');\n\t}\n\n\tlog(`Mixing in distro quality...`);\n\n\tconst basePath = `.build/distro/mixin/${quality}`;\n\n\tfor (const name of fs.readdirSync(basePath)) {\n\t\tconst distroPath = path.join(basePath, name);\n\t\tconst ossPath = path.relative(basePath, distroPath);\n\n\t\tif (ossPath === 'product.json') {\n\t\t\tconst distro = JSON.parse(fs.readFileSync(distroPath, 'utf8')) as Product;\n\t\t\tconst oss = JSON.parse(fs.readFileSync(ossPath, 'utf8')) as OSSProduct;\n\t\t\tlet builtInExtensions = oss.builtInExtensions;\n\n\t\t\tif (Array.isArray(distro.builtInExtensions)) {\n\t\t\t\tlog('Overwriting built-in extensions:', distro.builtInExtensions.map(e => e.name));\n\n\t\t\t\tbuiltInExtensions = distro.builtInExtensions;\n\t\t\t} else if (distro.builtInExtensions) {\n\t\t\t\tconst include = distro.builtInExtensions['include'] ?? [];\n\t\t\t\tconst exclude = distro.builtInExtensions['exclude'] ?? [];\n\n\t\t\t\tlog('OSS built-in extensions:', builtInExtensions.map(e => e.name));\n\t\t\t\tlog('Including built-in extensions:', include.map(e => e.name));\n\t\t\t\tlog('Excluding built-in extensions:', exclude);\n\n\t\t\t\tbuiltInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));\n\t\t\t\tbuiltInExtensions = [...builtInExtensions, ...include];\n\n\t\t\t\tlog('Final built-in extensions:', builtInExtensions.map(e => e.name));\n\t\t\t} else {\n\t\t\t\tlog('Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));\n\t\t\t}\n\n\t\t\tconst result = { webBuiltInExtensions: oss.webBuiltInExtensions, ...distro, builtInExtensions };\n\t\t\tfs.writeFileSync(ossPath, JSON.stringify(result, null, '\\t'), 'utf8');\n\t\t} else {\n\t\t\tfs.cpSync(distroPath, ossPath, { force: true, recursive: true });\n\t\t}\n\n\t\tlog(distroPath, '✔︎');\n\t}\n}\n\nmain();\n"
  },
  {
    "path": "build/azure-pipelines/distro-build.yml",
    "content": "pool:\n  name: 1es-ubuntu-22.04-x64\n  os: linux\n\ntrigger:\n  branches:\n    include: [\"main\", \"release/*\"]\npr: none\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n  - template: ./distro/download-distro.yml@self\n"
  },
  {
    "path": "build/azure-pipelines/linux/.gitignore",
    "content": "pat"
  },
  {
    "path": "build/azure-pipelines/linux/apt-retry.sh",
    "content": "#!/bin/sh\n################################################################################\n##  Copied from https://github.com/actions/runner-images/blob/ubuntu22/20240825.1/images/ubuntu/scripts/build/configure-apt-mock.sh\n################################################################################\n\ni=1\nwhile [ $i -le 30 ];do\n  err=$(mktemp)\n  \"$@\" 2>$err\n\n  # no errors, break the loop and continue normal flow\n  test -f $err || break\n  cat $err >&2\n\n  retry=false\n\n  if grep -q 'Could not get lock' $err;then\n    # apt db locked needs retry\n    retry=true\n  elif grep -q 'Could not open file /var/lib/apt/lists' $err;then\n    # apt update is not completed, needs retry\n    retry=true\n  elif grep -q 'IPC connect call failed' $err;then\n    # the delay should help with gpg-agent not ready\n    retry=true\n  elif grep -q 'Temporary failure in name resolution' $err;then\n    # It looks like DNS is not updated with random generated hostname yet\n    retry=true\n  elif grep -q 'dpkg frontend is locked by another process' $err;then\n    # dpkg process is busy by another process\n    retry=true\n  fi\n\n  rm $err\n  if [ $retry = false ]; then\n    break\n  fi\n\n  sleep 5\n  echo \"...retry $i\"\n  i=$((i + 1))\ndone\n"
  },
  {
    "path": "build/azure-pipelines/linux/cli-build-linux.yml",
    "content": "parameters:\n  - name: VSCODE_BUILD_LINUX\n    type: boolean\n    default: false\n  - name: VSCODE_BUILD_LINUX_ARM64\n    type: boolean\n    default: false\n  - name: VSCODE_BUILD_LINUX_ARMHF\n    type: boolean\n    default: false\n  - name: VSCODE_CHECK_ONLY\n    type: boolean\n    default: false\n  - name: VSCODE_QUALITY\n    type: string\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ../cli/cli-apply-patches.yml@self\n\n  - task: Npm@1\n    displayName: Download openssl prebuilt\n    inputs:\n      command: custom\n      customCommand: pack @vscode-internal/openssl-prebuilt@0.0.11\n      customRegistry: useFeed\n      customFeed: \"Monaco/openssl-prebuilt\"\n      workingDir: $(Build.ArtifactStagingDirectory)\n\n  - script: |\n      set -e\n      mkdir $(Build.ArtifactStagingDirectory)/openssl\n      tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.11.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl\n    displayName: Extract openssl prebuilt\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: node build/setup-npm-registry.js $NPM_REGISTRY build\n      condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n      displayName: Setup NPM Registry\n\n    - script: |\n        set -e\n        # Set the private NPM registry to the global npmrc file\n        # so that authentication works for subfolders like build/, remote/, extensions/ etc\n        # which does not have their own .npmrc file\n        npm config set registry \"$NPM_REGISTRY\"\n        echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n      condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n      displayName: Setup NPM\n\n    - task: npmAuthenticate@0\n      inputs:\n        workingFile: $(NPMRC_PATH)\n      condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n      displayName: Setup NPM Authentication\n\n  - script: |\n      set -e\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    workingDirectory: build\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install build dependencies\n\n  - script: |\n      set -e\n      mkdir -p $(Build.SourcesDirectory)/.build\n    displayName: Create .build folder for misc dependencies\n\n  - template: ../cli/install-rust-posix.yml@self\n    parameters:\n      targets:\n        - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}:\n          - aarch64-unknown-linux-gnu\n        - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:\n          - x86_64-unknown-linux-gnu\n        - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}:\n          - armv7-unknown-linux-gnueabihf\n\n  - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_TARGET: aarch64-unknown-linux-gnu\n        VSCODE_CLI_ARTIFACT: vscode_cli_linux_arm64_cli\n        VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }}\n        VSCODE_CLI_ENV:\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/include\n          SYSROOT_ARCH: arm64\n\n  - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_TARGET: x86_64-unknown-linux-gnu\n        VSCODE_CLI_ARTIFACT: vscode_cli_linux_x64_cli\n        VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }}\n        VSCODE_CLI_ENV:\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/include\n          SYSROOT_ARCH: amd64\n\n  - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_TARGET: armv7-unknown-linux-gnueabihf\n        VSCODE_CLI_ARTIFACT: vscode_cli_linux_armhf_cli\n        VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }}\n        VSCODE_CLI_ENV:\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/include\n          SYSROOT_ARCH: armhf\n\n  - ${{ if not(parameters.VSCODE_CHECK_ONLY) }}:\n    - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_armhf_cli.tar.gz\n          artifactName: vscode_cli_linux_armhf_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code Linux armhf CLI\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish vscode_cli_linux_armhf_cli artifact\n\n    - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_x64_cli.tar.gz\n          artifactName: vscode_cli_linux_x64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code Linux x64 CLI\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish vscode_cli_linux_x64_cli artifact\n\n    - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/vscode_cli_linux_arm64_cli.tar.gz\n          artifactName: vscode_cli_linux_arm64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code Linux arm64 CLI\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish vscode_cli_linux_arm64_cli artifact\n"
  },
  {
    "path": "build/azure-pipelines/linux/product-build-linux-test.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_RUN_UNIT_TESTS\n    type: boolean\n  - name: VSCODE_RUN_INTEGRATION_TESTS\n    type: boolean\n  - name: VSCODE_RUN_SMOKE_TESTS\n    type: boolean\n  - name: PUBLISH_TASK_NAME\n    type: string\n    default: PublishPipelineArtifact@0\n\nsteps:\n  - script: npm exec -- npm-run-all -lp \"electron $(VSCODE_ARCH)\" \"playwright-install\"\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Download Electron and Playwright\n    retryCountOnTaskFailure: 3\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: |\n        set -e\n        APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)\n        ELECTRON_ROOT=.build/electron\n        sudo chown root $APP_ROOT/chrome-sandbox\n        sudo chown root $ELECTRON_ROOT/chrome-sandbox\n        sudo chmod 4755 $APP_ROOT/chrome-sandbox\n        sudo chmod 4755 $ELECTRON_ROOT/chrome-sandbox\n        stat $APP_ROOT/chrome-sandbox\n        stat $ELECTRON_ROOT/chrome-sandbox\n      displayName: Change setuid helper binary permission\n\n  - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: ./scripts/test.sh --tfs \"Unit Tests\"\n        env:\n          DISPLAY: \":10\"\n        displayName: Run unit tests (Electron)\n        timeoutInMinutes: 15\n      - script: npm run test-node\n        displayName: Run unit tests (node.js)\n        timeoutInMinutes: 15\n      - script: npm run test-browser-no-install -- --browser chromium --tfs \"Browser Unit Tests\"\n        env:\n          DEBUG: \"*browser*\"\n        displayName: Run unit tests (Browser, Chromium)\n        timeoutInMinutes: 15\n\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: ./scripts/test.sh --build --tfs \"Unit Tests\"\n        displayName: Run unit tests (Electron)\n        timeoutInMinutes: 15\n      - script: npm run test-node -- --build\n        displayName: Run unit tests (node.js)\n        timeoutInMinutes: 15\n      - script: npm run test-browser-no-install -- --build --browser chromium --tfs \"Browser Unit Tests\"\n        env:\n          DEBUG: \"*browser*\"\n        displayName: Run unit tests (Browser, Chromium)\n        timeoutInMinutes: 15\n\n  - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:\n    - script: |\n        set -e\n        npm run gulp \\\n          compile-extension:configuration-editing \\\n          compile-extension:css-language-features-server \\\n          compile-extension:emmet \\\n          compile-extension:git \\\n          compile-extension:github-authentication \\\n          compile-extension:html-language-features-server \\\n          compile-extension:ipynb \\\n          compile-extension:notebook-renderers \\\n          compile-extension:json-language-features-server \\\n          compile-extension:markdown-language-features \\\n          compile-extension-media \\\n          compile-extension:microsoft-authentication \\\n          compile-extension:typescript-language-features \\\n          compile-extension:vscode-api-tests \\\n          compile-extension:vscode-colorize-tests \\\n          compile-extension:vscode-colorize-perf-tests \\\n          compile-extension:vscode-test-resolver\n      displayName: Build integration tests\n\n  - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: ./scripts/test-integration.sh --tfs \"Integration Tests\"\n        env:\n          DISPLAY: \":10\"\n        displayName: Run integration tests (Electron)\n        timeoutInMinutes: 20\n\n      - script: ./scripts/test-web-integration.sh --browser chromium\n        displayName: Run integration tests (Browser, Chromium)\n        timeoutInMinutes: 20\n\n      - script: ./scripts/test-remote-integration.sh\n        displayName: Run integration tests (Remote)\n        timeoutInMinutes: 20\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: |\n          # Figure out the full absolute path of the product we just built\n          # including the remote server and configure the integration tests\n          # to run with these builds instead of running out of sources.\n          set -e\n          APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)\n          APP_NAME=$(node -p \"require(\\\"$APP_ROOT/resources/app/product.json\\\").applicationName\")\n          INTEGRATION_TEST_APP_NAME=\"$APP_NAME\" \\\n          INTEGRATION_TEST_ELECTRON_PATH=\"$APP_ROOT/$APP_NAME\" \\\n          ./scripts/test-integration.sh --build --tfs \"Integration Tests\"\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)\n        displayName: Run integration tests (Electron)\n        timeoutInMinutes: 20\n\n      - script: ./scripts/test-web-integration.sh --browser chromium\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web\n        displayName: Run integration tests (Browser, Chromium)\n        timeoutInMinutes: 20\n\n      - script: |\n          set -e\n          APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)\n          APP_NAME=$(node -p \"require(\\\"$APP_ROOT/resources/app/product.json\\\").applicationName\")\n          INTEGRATION_TEST_APP_NAME=\"$APP_NAME\" \\\n          INTEGRATION_TEST_ELECTRON_PATH=\"$APP_ROOT/$APP_NAME\" \\\n          ./scripts/test-remote-integration.sh\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)\n        displayName: Run integration tests (Remote)\n        timeoutInMinutes: 20\n\n  - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:\n    - script: |\n        set -e\n        ps -ef\n        cat /proc/sys/fs/inotify/max_user_watches\n        lsof | wc -l\n      displayName: Diagnostics before smoke test run (processes, max_user_watches, number of opened file handles)\n      continueOnError: true\n      condition: succeededOrFailed()\n\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: npm run compile\n        workingDirectory: test/smoke\n        displayName: Compile smoke tests\n\n      - script: npm run gulp compile-extension:markdown-language-features compile-extension:ipynb compile-extension-media compile-extension:vscode-test-resolver\n        displayName: Build extensions for smoke tests\n\n      - script: npm run gulp node\n        displayName: Download node.js for remote smoke tests\n        retryCountOnTaskFailure: 3\n\n      - script: npm run smoketest-no-compile -- --tracing\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Electron)\n\n      - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs=\"--disable-dev-shm-usage\"\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Browser, Chromium)\n\n      - script: npm run smoketest-no-compile -- --remote --tracing\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Remote)\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - script: npm run smoketest-no-compile -- --tracing --build \"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)\"\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Electron)\n\n      - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs=\"--disable-dev-shm-usage\"\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Browser, Chromium)\n\n      - script: |\n          set -e\n          npm run gulp compile-extension:vscode-test-resolver\n          APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)\n          VSCODE_REMOTE_SERVER_PATH=\"$(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)\" \\\n          npm run smoketest-no-compile -- --tracing --remote --build \"$APP_PATH\"\n        timeoutInMinutes: 20\n        displayName: Run smoke tests (Remote)\n\n    - script: |\n        set -e\n        ps -ef\n        cat /proc/sys/fs/inotify/max_user_watches\n        lsof | wc -l\n      displayName: Diagnostics after smoke test run (processes, max_user_watches, number of opened file handles)\n      continueOnError: true\n      condition: succeededOrFailed()\n\n  - ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n    - task: ${{ parameters.PUBLISH_TASK_NAME }}\n      inputs:\n        targetPath: .build/crashes\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: crash-dump-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: crash-dump-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: crash-dump-linux-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Crash Reports\"\n      continueOnError: true\n      condition: failed()\n\n    # In order to properly symbolify above crash reports\n    # (if any), we need the compiled native modules too\n    - task: ${{ parameters.PUBLISH_TASK_NAME }}\n      inputs:\n        targetPath: node_modules\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: node-modules-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: node-modules-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: node-modules-linux-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Node Modules\"\n      continueOnError: true\n      condition: failed()\n\n    - task: ${{ parameters.PUBLISH_TASK_NAME }}\n      inputs:\n        targetPath: .build/logs\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: logs-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: logs-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: logs-linux-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Log Files\"\n      continueOnError: true\n      condition: succeededOrFailed()\n\n  - task: PublishTestResults@2\n    displayName: Publish Tests Results\n    inputs:\n      testResultsFiles: \"*-results.xml\"\n      searchFolder: \"$(Build.ArtifactStagingDirectory)/test-results\"\n    condition: succeededOrFailed()\n"
  },
  {
    "path": "build/azure-pipelines/linux/product-build-linux.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_CIBUILD\n    type: boolean\n  - name: VSCODE_RUN_UNIT_TESTS\n    type: boolean\n  - name: VSCODE_RUN_INTEGRATION_TESTS\n    type: boolean\n  - name: VSCODE_RUN_SMOKE_TESTS\n    type: boolean\n  - name: VSCODE_ARCH\n    type: string\n\nsteps:\n  - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n    - checkout: self\n      fetchDepth: 1\n      retryCountOnTaskFailure: 3\n\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ../distro/download-distro.yml@self\n\n    - task: AzureKeyVault@2\n      displayName: \"Azure Key Vault: Get Secrets\"\n      inputs:\n        azureSubscription: vscode\n        KeyVaultName: vscode-build-secrets\n        SecretsFilter: \"github-distro-mixin-password\"\n\n    - task: DownloadPipelineArtifact@2\n      inputs:\n        artifact: Compilation\n        path: $(Build.ArtifactStagingDirectory)\n      displayName: Download compilation output\n\n    - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz\n      displayName: Extract compilation output\n\n  - script: |\n      set -e\n      # Start X server\n      ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update\n      ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y pkg-config \\\n        dbus \\\n        xvfb \\\n        libgtk-3-0 \\\n        libxkbfile-dev \\\n        libkrb5-dev \\\n        libgbm1 \\\n        rpm\n      sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb\n      sudo chmod +x /etc/init.d/xvfb\n      sudo update-rc.d xvfb defaults\n      sudo service xvfb start\n      # Start dbus session\n      sudo mkdir -p /var/run/dbus\n      DBUS_LAUNCH_RESULT=$(sudo dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address)\n      echo \"##vso[task.setvariable variable=DBUS_SESSION_BUS_ADDRESS]$DBUS_LAUNCH_RESULT\"\n    displayName: Setup system services\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - script: tar -xzf .build/node_modules_cache/cache.tgz\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - script: |\n      set -e\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    workingDirectory: build\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install build dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  # Step will be used by both Install dependencies and building rpm package,\n  # hence avoid adding it behind NODE_MODULES_RESTORED condition.\n  - script: |\n      set -e\n      SYSROOT_ARCH=$VSCODE_ARCH\n      if [ \"$SYSROOT_ARCH\" == \"x64\" ]; then\n        SYSROOT_ARCH=\"amd64\"\n      fi\n      export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots\n      SYSROOT_ARCH=\"$SYSROOT_ARCH\" node -e '(async () => { const { getVSCodeSysroot } = require(\"./build/linux/debian/install-sysroot.js\"); await getVSCodeSysroot(process.env[\"SYSROOT_ARCH\"]); })()'\n    env:\n      VSCODE_ARCH: $(VSCODE_ARCH)\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Download vscode sysroots\n\n  - ${{ if or(eq(parameters.VSCODE_ARCH, 'arm64'), eq(parameters.VSCODE_ARCH, 'armhf')) }}:\n    - script: |\n        set -e\n        includes=$(cat << 'EOF'\n        {\n          \"target_defaults\": {\n            \"conditions\": [\n              [\"OS=='linux'\", {\n                'cflags_cc!': [ '-std=gnu++20' ],\n                'cflags_cc': [ '-std=gnu++2a' ],\n              }]\n            ]\n          }\n        }\n        EOF\n        )\n        if [ ! -d \"$HOME/.gyp\" ]; then\n          mkdir -p \"$HOME/.gyp\"\n        fi\n        echo \"$includes\" > \"$HOME/.gyp/include.gypi\"\n      displayName: Override gnu target for arm64 and arm\n\n  - script: |\n      set -e\n\n      source ./build/azure-pipelines/linux/setup-env.sh\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    env:\n      npm_config_arch: $(NPM_ARCH)\n      VSCODE_ARCH: $(VSCODE_ARCH)\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: node build/azure-pipelines/distro/mixin-npm\n      condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n      displayName: Mixin distro node modules\n\n  - script: |\n      set -e\n      node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt\n      mkdir -p .build/node_modules_cache\n      tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: node build/azure-pipelines/distro/mixin-quality\n      displayName: Mixin distro quality\n\n  - template: ../common/install-builtin-extensions.yml@self\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: |\n        set -e\n        npm run gulp vscode-linux-$(VSCODE_ARCH)-min-ci\n        ARCHIVE_PATH=\".build/linux/client/code-${{ parameters.VSCODE_QUALITY }}-$(VSCODE_ARCH)-$(date +%s).tar.gz\"\n        mkdir -p $(dirname $ARCHIVE_PATH)\n        echo \"##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build client\n\n    - ${{ if ne(parameters.VSCODE_CIBUILD, true) }}:\n      - task: DownloadPipelineArtifact@2\n        inputs:\n          artifact: $(ARTIFACT_PREFIX)vscode_cli_linux_$(VSCODE_ARCH)_cli\n          patterns: \"**\"\n          path: $(Build.ArtifactStagingDirectory)/cli\n        displayName: Download VS Code CLI\n\n      - script: |\n          set -e\n          tar -xzvf $(Build.ArtifactStagingDirectory)/cli/*.tar.gz -C $(Build.ArtifactStagingDirectory)/cli\n          CLI_APP_NAME=$(node -p \"require(\\\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\\\").tunnelApplicationName\")\n          APP_NAME=$(node -p \"require(\\\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\\\").applicationName\")\n          mv $(Build.ArtifactStagingDirectory)/cli/$APP_NAME $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/$CLI_APP_NAME\n        displayName: Mix in CLI\n\n    - script: |\n        set -e\n        tar -czf $CLIENT_PATH -C .. VSCode-linux-$(VSCODE_ARCH)\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Archive client\n\n    - script: |\n        set -e\n        npm run gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci\n        mv ../vscode-reh-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH) # TODO@joaomoreno\n        ARCHIVE_PATH=\".build/linux/server/vscode-server-linux-$(VSCODE_ARCH).tar.gz\"\n        UNARCHIVE_PATH=\"`pwd`/../vscode-server-linux-$(VSCODE_ARCH)\"\n        mkdir -p $(dirname $ARCHIVE_PATH)\n        tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-linux-$(VSCODE_ARCH)\n        echo \"##vso[task.setvariable variable=SERVER_PATH]$ARCHIVE_PATH\"\n        echo \"##vso[task.setvariable variable=SERVER_UNARCHIVE_PATH]$UNARCHIVE_PATH\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build server\n\n    - script: |\n        set -e\n        npm run gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci\n        mv ../vscode-reh-web-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH)-web # TODO@joaomoreno\n        ARCHIVE_PATH=\".build/linux/web/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz\"\n        mkdir -p $(dirname $ARCHIVE_PATH)\n        tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-server-linux-$(VSCODE_ARCH)-web\n        echo \"##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build server (web)\n\n    - ${{ if or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64')) }}:\n      - script: |\n          set -e\n\n          EXPECTED_GLIBC_VERSION=\"2.28\" \\\n          EXPECTED_GLIBCXX_VERSION=\"3.4.25\" \\\n          ./build/azure-pipelines/linux/verify-glibc-requirements.sh\n        env:\n          SEARCH_PATH: $(SERVER_UNARCHIVE_PATH)\n          npm_config_arch: $(NPM_ARCH)\n          VSCODE_ARCH: $(VSCODE_ARCH)\n        displayName: Check GLIBC and GLIBCXX dependencies in server archive\n\n    - ${{ else }}:\n      - script: |\n          set -e\n\n          EXPECTED_GLIBC_VERSION=\"2.28\" \\\n          EXPECTED_GLIBCXX_VERSION=\"3.4.26\" \\\n          ./build/azure-pipelines/linux/verify-glibc-requirements.sh\n        env:\n          SEARCH_PATH: $(SERVER_UNARCHIVE_PATH)\n          npm_config_arch: $(NPM_ARCH)\n          VSCODE_ARCH: $(VSCODE_ARCH)\n        displayName: Check GLIBC and GLIBCXX dependencies in server archive\n\n  - ${{ else }}:\n    - script: npm run gulp \"transpile-client-esbuild\" \"transpile-extensions\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Transpile client and extensions\n\n  - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n    - template: product-build-linux-test.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}\n        VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}\n        VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}\n        ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n          PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1\n\n  - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:\n    - script:  |\n        set -e\n        npm run gulp \"vscode-linux-$(VSCODE_ARCH)-prepare-deb\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Prepare deb package\n\n    - script:  |\n        set -e\n        npm run gulp \"vscode-linux-$(VSCODE_ARCH)-build-deb\"\n        file_output=$(file $(ls .build/linux/deb/*/deb/*.deb))\n        if [[ \"$file_output\" != *\"data compression xz\"* ]]; then\n          echo \"Error: unknown compression. $file_output\"\n          exit 1\n        fi\n        echo \"##vso[task.setvariable variable=DEB_PATH]$(ls .build/linux/deb/*/deb/*.deb)\"\n      displayName: Build deb package\n\n    - script:  |\n        set -e\n        TRIPLE=\"\"\n        if [ \"$VSCODE_ARCH\" == \"x64\" ]; then\n          TRIPLE=\"x86_64-linux-gnu\"\n        elif [ \"$VSCODE_ARCH\" == \"arm64\" ]; then\n          TRIPLE=\"aarch64-linux-gnu\"\n        elif [ \"$VSCODE_ARCH\" == \"armhf\" ]; then\n          TRIPLE=\"arm-rpi-linux-gnueabihf\"\n        fi\n        export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots\n        export STRIP=\"$VSCODE_SYSROOT_DIR/$TRIPLE/$TRIPLE/bin/strip\"\n        npm run gulp \"vscode-linux-$(VSCODE_ARCH)-prepare-rpm\"\n      env:\n        VSCODE_ARCH: $(VSCODE_ARCH)\n      displayName: Prepare rpm package\n\n    - script:  |\n        set -e\n        npm run gulp \"vscode-linux-$(VSCODE_ARCH)-build-rpm\"\n        echo \"##vso[task.setvariable variable=RPM_PATH]$(ls .build/linux/rpm/*/*.rpm)\"\n      displayName: Build rpm package\n\n    - script: |\n        set -e\n        npm run gulp \"vscode-linux-$(VSCODE_ARCH)-prepare-snap\"\n        ARCHIVE_PATH=\".build/linux/snap-tarball/snap-$(VSCODE_ARCH).tar.gz\"\n        mkdir -p $(dirname $ARCHIVE_PATH)\n        tar -czf $ARCHIVE_PATH -C .build/linux snap\n        echo \"##vso[task.setvariable variable=SNAP_PATH]$ARCHIVE_PATH\"\n      displayName: Prepare snap package\n\n    - task: UseDotNet@2\n      inputs:\n        version: 6.x\n\n    - task: EsrpCodeSigning@5\n      inputs:\n        UseMSIAuthentication: true\n        ConnectedServiceName: vscode-esrp\n        AppRegistrationClientId: $(ESRP_CLIENT_ID)\n        AppRegistrationTenantId: $(ESRP_TENANT_ID)\n        AuthAKVName: vscode-esrp\n        AuthSignCertName: esrp-sign\n        FolderPath: .\n        Pattern: noop\n      displayName: 'Install ESRP Tooling'\n\n    - script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll sign-pgp .build/linux/deb '*.deb'\n      env:\n        SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n      displayName: Codesign deb\n\n    - script: node build/azure-pipelines/common/sign $(Agent.RootDirectory)/_tasks/EsrpCodeSigning_*/*/net6.0/esrpcli.dll sign-pgp .build/linux/rpm '*.rpm'\n      env:\n        SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n      displayName: Codesign rpm\n\n    - script: echo \"##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_\"\n      condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues'))\n      displayName: Generate artifact prefix\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(CLIENT_PATH)\n        artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned\n        sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-linux-$(VSCODE_ARCH)\n        sbomPackageName: \"VS Code Linux $(VSCODE_ARCH) (unsigned)\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      condition: and(succeededOrFailed(), ne(variables['CLIENT_PATH'], ''))\n      displayName: Publish client archive\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(SERVER_PATH)\n        artifactName: $(ARTIFACT_PREFIX)vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned\n        sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)\n        sbomPackageName: \"VS Code Linux $(VSCODE_ARCH) Server\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], ''))\n      displayName: Publish server archive\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(WEB_PATH)\n        artifactName: $(ARTIFACT_PREFIX)vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned\n        sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web\n        sbomPackageName: \"VS Code Linux $(VSCODE_ARCH) Web\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], ''))\n      displayName: Publish web server archive\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(DEB_PATH)\n        artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_deb-package\n        sbomBuildDropPath: .build/linux/deb\n        sbomPackageName: \"VS Code Linux $(VSCODE_ARCH) DEB\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      condition: and(succeededOrFailed(), ne(variables['DEB_PATH'], ''))\n      displayName: Publish deb package\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(RPM_PATH)\n        artifactName: $(ARTIFACT_PREFIX)vscode_client_linux_$(VSCODE_ARCH)_rpm-package\n        sbomBuildDropPath: .build/linux/rpm\n        sbomPackageName: \"VS Code Linux $(VSCODE_ARCH) RPM\"\n        sbomPackageVersion: $(Build.SourceVersion)\n      condition: and(succeededOrFailed(), ne(variables['RPM_PATH'], ''))\n      displayName: Publish rpm package\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(SNAP_PATH)\n        artifactName: $(ARTIFACT_PREFIX)snap-$(VSCODE_ARCH)\n        sbomEnabled: false\n      condition: and(succeededOrFailed(), ne(variables['SNAP_PATH'], ''))\n      displayName: Publish snap pre-package\n"
  },
  {
    "path": "build/azure-pipelines/linux/setup-env.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\n\nSYSROOT_ARCH=$VSCODE_ARCH\nif [ \"$SYSROOT_ARCH\" == \"x64\" ]; then\n  SYSROOT_ARCH=\"amd64\"\nfi\n\nexport VSCODE_SYSROOT_DIR=$PWD/.build/sysroots\nif [ -d \"$VSCODE_SYSROOT_DIR\" ]; then\n  echo \"Using cached sysroot\"\nelse\n  echo \"Downloading sysroot\"\n  SYSROOT_ARCH=\"$SYSROOT_ARCH\" node -e '(async () => { const { getVSCodeSysroot } = require(\"./build/linux/debian/install-sysroot.js\"); await getVSCodeSysroot(process.env[\"SYSROOT_ARCH\"]); })()'\nfi\n\nif [ \"$npm_config_arch\" == \"x64\" ]; then\n  # Download clang based on chromium revision used by vscode\n  curl -s https://raw.githubusercontent.com/chromium/chromium/132.0.6834.210/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux\n\n  # Download libcxx headers and objects from upstream electron releases\n  DEBUG=libcxx-fetcher \\\n  VSCODE_LIBCXX_OBJECTS_DIR=$PWD/.build/libcxx-objects \\\n  VSCODE_LIBCXX_HEADERS_DIR=$PWD/.build/libcxx_headers  \\\n  VSCODE_LIBCXXABI_HEADERS_DIR=$PWD/.build/libcxxabi_headers \\\n  VSCODE_ARCH=\"$npm_config_arch\" \\\n  node build/linux/libcxx-fetcher.js\n\n  # Set compiler toolchain\n  # Flags for the client build are based on\n  # https://source.chromium.org/chromium/chromium/src/+/refs/tags/132.0.6834.210:build/config/arm.gni\n  # https://source.chromium.org/chromium/chromium/src/+/refs/tags/132.0.6834.210:build/config/compiler/BUILD.gn\n  # https://source.chromium.org/chromium/chromium/src/+/refs/tags/132.0.6834.210:build/config/c++/BUILD.gn\n  export CC=\"$PWD/.build/CR_Clang/bin/clang --gcc-toolchain=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu\"\n  export CXX=\"$PWD/.build/CR_Clang/bin/clang++ --gcc-toolchain=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu\"\n  export CXXFLAGS=\"-nostdinc++ -D__NO_INLINE__ -DSPDLOG_USE_STD_FORMAT -I$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit -D_LIBCPP_ABI_NAMESPACE=Cr -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE --sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot\"\n  export LDFLAGS=\"-stdlib=libc++ --sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot -fuse-ld=lld -flto=thin -L$PWD/.build/libcxx-objects -lc++abi -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib/x86_64-linux-gnu -Wl,--lto-O0\"\n\n  # Set compiler toolchain for remote server\n  export VSCODE_REMOTE_CC=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc\n  export VSCODE_REMOTE_CXX=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-g++\n  export VSCODE_REMOTE_CXXFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot\"\n  export VSCODE_REMOTE_LDFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib/x86_64-linux-gnu\"\nelif [ \"$npm_config_arch\" == \"arm64\" ]; then\n  # Set compiler toolchain for client native modules\n  export CC=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc\n  export CXX=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-g++\n  export CXXFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot\"\n  export LDFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/usr/lib/aarch64-linux-gnu -L$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/lib/aarch64-linux-gnu\"\n\n  # Set compiler toolchain for remote server\n  export VSCODE_REMOTE_CC=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc\n  export VSCODE_REMOTE_CXX=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-g++\n  export VSCODE_REMOTE_CXXFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot\"\n  export VSCODE_REMOTE_LDFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/usr/lib/aarch64-linux-gnu -L$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/lib/aarch64-linux-gnu\"\nelif [ \"$npm_config_arch\" == \"arm\" ]; then\n  # Set compiler toolchain for client native modules\n  export CC=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc\n  export CXX=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-g++\n  export CXXFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot\"\n  export LDFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/lib/arm-linux-gnueabihf\"\n\n  # Set compiler toolchain for remote server\n  export VSCODE_REMOTE_CC=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc\n  export VSCODE_REMOTE_CXX=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-g++\n  export VSCODE_REMOTE_CXXFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot\"\n  export VSCODE_REMOTE_LDFLAGS=\"--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/lib/arm-linux-gnueabihf\"\nfi\n"
  },
  {
    "path": "build/azure-pipelines/linux/snap-build-linux.yml",
    "content": "steps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - task: DownloadPipelineArtifact@2\n    displayName: \"Download Pipeline Artifact\"\n    inputs:\n      artifact: snap-$(VSCODE_ARCH)\n      path: .build/linux/snap-tarball\n\n  - script: |\n      set -e\n\n      # Get snapcraft version\n      snapcraft --version\n\n      # Make sure we get latest packages\n      sudo apt-get update\n      sudo apt-get upgrade -y\n      sudo apt-get install -y curl apt-transport-https ca-certificates\n\n      # Define variables\n      SNAP_ROOT=\"$(pwd)/.build/linux/snap/$(VSCODE_ARCH)\"\n\n      # Unpack snap tarball artifact, in order to preserve file perms\n      (cd .build/linux && tar -xzf snap-tarball/snap-$(VSCODE_ARCH).tar.gz)\n\n      # Create snap package\n      BUILD_VERSION=\"$(date +%s)\"\n      SNAP_FILENAME=\"code-$VSCODE_QUALITY-$(VSCODE_ARCH)-$BUILD_VERSION.snap\"\n      SNAP_PATH=\"$SNAP_ROOT/$SNAP_FILENAME\"\n      case $(VSCODE_ARCH) in\n        x64) SNAPCRAFT_TARGET_ARGS=\"\" ;;\n        *) SNAPCRAFT_TARGET_ARGS=\"--target-arch $(VSCODE_ARCH)\" ;;\n      esac\n      (cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft snap $SNAPCRAFT_TARGET_ARGS --output \"$SNAP_PATH\")\n    displayName: Prepare for publish\n\n  - script: |\n      set -e\n      SNAP_ROOT=\"$(pwd)/.build/linux/snap/$(VSCODE_ARCH)\"\n      SNAP_EXTRACTED_PATH=$(find $SNAP_ROOT -maxdepth 1 -type d -name 'code-*')\n      SNAP_PATH=$(find $SNAP_ROOT -maxdepth 1 -type f -name '*.snap')\n\n      # SBOM tool doesn't like recursive symlinks\n      sudo find $SNAP_EXTRACTED_PATH -type l -delete\n\n      echo \"##vso[task.setvariable variable=SNAP_EXTRACTED_PATH]$SNAP_EXTRACTED_PATH\"\n      echo \"##vso[task.setvariable variable=SNAP_PATH]$SNAP_PATH\"\n    target:\n      container: host\n    displayName: Find host snap path & prepare for SBOM\n\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(SNAP_PATH)\n      artifactName: vscode_client_linux_$(VSCODE_ARCH)_snap\n      sbomBuildDropPath: $(SNAP_EXTRACTED_PATH)\n      sbomPackageName: \"VS Code Linux $(VSCODE_ARCH) SNAP\"\n      sbomPackageVersion: $(Build.SourceVersion)\n    displayName: Publish snap package\n"
  },
  {
    "path": "build/azure-pipelines/linux/verify-glibc-requirements.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\n\nTRIPLE=\"x86_64-linux-gnu\"\nif [ \"$VSCODE_ARCH\" == \"arm64\" ]; then\n  TRIPLE=\"aarch64-linux-gnu\"\nelif [ \"$VSCODE_ARCH\" == \"armhf\" ]; then\n  TRIPLE=\"arm-rpi-linux-gnueabihf\"\nfi\n\n# Get all files with .node extension from server folder\nfiles=$(find $SEARCH_PATH -name \"*.node\" -not -path \"*prebuilds*\" -not -path \"*extensions/node_modules/@parcel/watcher*\" -o -type f -executable -name \"node\")\n\necho \"Verifying requirements for files: $files\"\n\nfor file in $files; do\n  glibc_version=\"$EXPECTED_GLIBC_VERSION\"\n  glibcxx_version=\"$EXPECTED_GLIBCXX_VERSION\"\n  while IFS= read -r line; do\n    if [[ $line == *\"GLIBC_\"* ]]; then\n      version=$(echo \"$line\" | awk '{if ($5 ~ /^[0-9a-fA-F]+$/) print $6; else print $5}' | tr -d '()')\n      version=${version#*_}\n      if [[ $(printf \"%s\\n%s\" \"$version\" \"$glibc_version\" | sort -V | tail -n1) == \"$version\" ]]; then\n        glibc_version=$version\n      fi\n    elif [[ $line == *\"GLIBCXX_\"* ]]; then\n      version=$(echo \"$line\" | awk '{if ($5 ~ /^[0-9a-fA-F]+$/) print $6; else print $5}' | tr -d '()')\n      version=${version#*_}\n      if [[ $(printf \"%s\\n%s\" \"$version\" \"$glibcxx_version\" | sort -V | tail -n1) == \"$version\" ]]; then\n        glibcxx_version=$version\n      fi\n    fi\n  done < <(\"$PWD/.build/sysroots/$TRIPLE/$TRIPLE/bin/objdump\" -T \"$file\")\n\n  if [[ \"$glibc_version\" != \"$EXPECTED_GLIBC_VERSION\" ]]; then\n    echo \"Error: File $file has dependency on GLIBC > $EXPECTED_GLIBC_VERSION, found $glibc_version\"\n    exit 1\n  fi\n  if [[ \"$glibcxx_version\" != \"$EXPECTED_GLIBCXX_VERSION\" ]]; then\n    echo \"Error: File $file has dependency on GLIBCXX > $EXPECTED_GLIBCXX_VERSION, found $glibcxx_version\"\n    exit 1\n  fi\ndone\n"
  },
  {
    "path": "build/azure-pipelines/linux/xvfb.init",
    "content": "#!/bin/bash\n#\n# /etc/rc.d/init.d/xvfbd\n#\n# chkconfig: 345 95 28\n# description: Starts/Stops X Virtual Framebuffer server\n# processname: Xvfb\n#\n### BEGIN INIT INFO\n# Provides:          xvfb\n# Required-Start:    $remote_fs $syslog\n# Required-Stop:     $remote_fs $syslog\n# Default-Start:     2 3 4 5\n# Default-Stop:      0 1 6\n# Short-Description: Start xvfb at boot time\n# Description:       Enable xvfb provided by daemon.\n### END INIT INFO\n\n[ \"${NETWORKING}\" = \"no\" ] && exit 0\n\nPROG=\"/usr/bin/Xvfb\"\nPROG_OPTIONS=\":10 -ac -screen 0 1024x768x24\"\nPROG_OUTPUT=\"/tmp/Xvfb.out\"\n\ncase \"$1\" in\n\tstart)\n\t\techo \"Starting : X Virtual Frame Buffer \"\n\t\t$PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &\n\t\tdisown -ar\n\t;;\n\tstop)\n\t\techo \"Shutting down : X Virtual Frame Buffer\"\n\t\tkillproc $PROG\n\t\tRETVAL=$?\n\t\t[ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb\n\t\t/var/run/Xvfb.pid\n\t\techo\n\t;;\n\trestart|reload)\n\t\t$0 stop\n\t\t$0 start\n\t\tRETVAL=$?\n\t;;\n\tstatus)\n\t\tstatus Xvfb\n\t\tRETVAL=$?\n\t;;\n\t*)\n\t\techo $\"Usage: $0 (start|stop|restart|reload|status)\"\n\t\texit 1\nesac\n\nexit $RETVAL\n"
  },
  {
    "path": "build/azure-pipelines/oss/product-build-pr-cache-linux.yml",
    "content": "steps:\n  - checkout: self\n    fetchDepth: 1\n    retryCountOnTaskFailure: 3\n\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - script: tar -xzf .build/node_modules_cache/cache.tgz\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - script: |\n      set -e\n      ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update\n      ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y libkrb5-dev\n    displayName: Setup system services\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: |\n      set -e\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    env:\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: |\n      set -e\n      node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt\n      mkdir -p .build/node_modules_cache\n      tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n"
  },
  {
    "path": "build/azure-pipelines/oss/product-build-pr-cache-win32.yml",
    "content": "steps:\n  - checkout: self\n    fetchDepth: 1\n    retryCountOnTaskFailure: 3\n\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - pwsh: |\n      mkdir .build -ea 0\n      node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - powershell: 7z.exe x .build/node_modules_cache/cache.7z -aoa\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      exec { npm config set registry \"$env:NPM_REGISTRY\" }\n      $NpmrcPath = (npm config get userconfig)\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      exec { npm ci }\n    env:\n      npm_config_arch: $(VSCODE_ARCH)\n      npm_config_foreground_scripts: \"true\"\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    retryCountOnTaskFailure: 5\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      exec { node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt }\n      exec { mkdir -Force .build/node_modules_cache }\n      exec { 7z.exe a .build/node_modules_cache/cache.7z -mx3 `@.build/node_modules_list.txt }\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n"
  },
  {
    "path": "build/azure-pipelines/product-build-pr.yml",
    "content": "trigger:\n  - main\n  - release/*\n\npr:\n  branches:\n    include: [\"main\", \"release/*\"]\n\nvariables:\n  - name: Codeql.SkipTaskAutoInjection\n    value: true\n  - name: skipComponentGovernanceDetection\n    value: true\n  - name: NPM_REGISTRY\n    value: \"none\"\n  - name: CARGO_REGISTRY\n    value: \"none\"\n  - name: VSCODE_CIBUILD\n    value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}\n  - name: VSCODE_QUALITY\n    value: oss\n  - name: VSCODE_STEP_ON_IT\n    value: false\n\njobs:\n  - ${{ if ne(variables['VSCODE_CIBUILD'], true) }}:\n    - job: Compile\n      displayName: Compile & Hygiene\n      pool: 1es-oss-ubuntu-22.04-x64\n      timeoutInMinutes: 30\n      variables:\n        VSCODE_ARCH: x64\n      steps:\n        - template: product-compile.yml@self\n          parameters:\n            VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n\n    - job: Linuxx64UnitTest\n      displayName: Linux (Unit Tests)\n      pool: 1es-oss-ubuntu-22.04-x64\n      timeoutInMinutes: 30\n      variables:\n        VSCODE_ARCH: x64\n        NPM_ARCH: x64\n        DISPLAY: \":10\"\n      steps:\n        - template: linux/product-build-linux.yml@self\n          parameters:\n            VSCODE_ARCH: x64\n            VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n            VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n            VSCODE_RUN_UNIT_TESTS: true\n            VSCODE_RUN_INTEGRATION_TESTS: false\n            VSCODE_RUN_SMOKE_TESTS: false\n\n    - job: Linuxx64IntegrationTest\n      displayName: Linux (Integration Tests)\n      pool: 1es-oss-ubuntu-22.04-x64\n      timeoutInMinutes: 30\n      variables:\n        VSCODE_ARCH: x64\n        NPM_ARCH: x64\n        DISPLAY: \":10\"\n      steps:\n        - template: linux/product-build-linux.yml@self\n          parameters:\n            VSCODE_ARCH: x64\n            VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n            VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n            VSCODE_RUN_UNIT_TESTS: false\n            VSCODE_RUN_INTEGRATION_TESTS: true\n            VSCODE_RUN_SMOKE_TESTS: false\n\n    - job: Linuxx64SmokeTest\n      displayName: Linux (Smoke Tests)\n      pool: 1es-oss-ubuntu-22.04-x64\n      timeoutInMinutes: 30\n      variables:\n        VSCODE_ARCH: x64\n        NPM_ARCH: x64\n        DISPLAY: \":10\"\n      steps:\n        - template: linux/product-build-linux.yml@self\n          parameters:\n            VSCODE_ARCH: x64\n            VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n            VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n            VSCODE_RUN_UNIT_TESTS: false\n            VSCODE_RUN_INTEGRATION_TESTS: false\n            VSCODE_RUN_SMOKE_TESTS: true\n\n    - job: LinuxCLI\n      displayName: Linux (CLI)\n      pool: 1es-oss-ubuntu-22.04-x64\n      timeoutInMinutes: 30\n      steps:\n        - template: cli/test.yml@self\n\n    - job: Windowsx64UnitTests\n      displayName: Windows (Unit Tests)\n      pool: 1es-oss-windows-2022-x64\n      timeoutInMinutes: 30\n      variables:\n        VSCODE_ARCH: x64\n        NPM_ARCH: x64\n      steps:\n        - template: win32/product-build-win32.yml@self\n          parameters:\n            VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n            VSCODE_ARCH: x64\n            VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n            VSCODE_RUN_UNIT_TESTS: true\n            VSCODE_RUN_INTEGRATION_TESTS: false\n            VSCODE_RUN_SMOKE_TESTS: false\n\n    - job: Windowsx64IntegrationTests\n      displayName: Windows (Integration Tests)\n      pool: 1es-oss-windows-2022-x64\n      timeoutInMinutes: 60\n      variables:\n        VSCODE_ARCH: x64\n        NPM_ARCH: x64\n      steps:\n        - template: win32/product-build-win32.yml@self\n          parameters:\n            VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n            VSCODE_ARCH: x64\n            VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n            VSCODE_RUN_UNIT_TESTS: false\n            VSCODE_RUN_INTEGRATION_TESTS: true\n            VSCODE_RUN_SMOKE_TESTS: false\n\n    # - job: Windowsx64SmokeTests\n    #   displayName: Windows (Smoke Tests)\n    #   pool: 1es-oss-windows-2022-x64\n    #   timeoutInMinutes: 30\n    #   variables:\n    #     VSCODE_ARCH: x64\n    #     NPM_ARCH: x64\n    #   steps:\n    #     - template: win32/product-build-win32.yml@self\n    #       parameters:\n    #         VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n    #         VSCODE_ARCH: x64\n    #         VSCODE_RUN_UNIT_TESTS: false\n    #         VSCODE_RUN_INTEGRATION_TESTS: false\n    #         VSCODE_RUN_SMOKE_TESTS: true\n\n  - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:\n    - job: Linuxx64MaintainNodeModulesCache\n      displayName: Linux (Maintain node_modules cache)\n      pool: 1es-oss-ubuntu-22.04-x64\n      timeoutInMinutes: 30\n      variables:\n        VSCODE_ARCH: x64\n      steps:\n        - template: oss/product-build-pr-cache-linux.yml@self\n\n    - job: Windowsx64MaintainNodeModulesCache\n      displayName: Windows (Maintain node_modules cache)\n      pool: 1es-oss-windows-2022-x64\n      timeoutInMinutes: 30\n      variables:\n        VSCODE_ARCH: x64\n      steps:\n        - template: oss/product-build-pr-cache-win32.yml@self\n\n  # - job: macOSUnitTest\n  #   displayName: macOS (Unit Tests)\n  #   pool:\n  #     vmImage: macOS-11\n  #   timeoutInMinutes: 60\n  #   variables:\n  #     BUILDSECMON_OPT_IN: true\n  #     VSCODE_ARCH: x64\n  #   steps:\n  #     - template: darwin/product-build-darwin.yml@self\n  #       parameters:\n  #         VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n  #         VSCODE_RUN_UNIT_TESTS: true\n  #         VSCODE_RUN_INTEGRATION_TESTS: false\n  #         VSCODE_RUN_SMOKE_TESTS: false\n  # - job: macOSIntegrationTest\n  #   displayName: macOS (Integration Tests)\n  #   pool:\n  #     vmImage: macOS-11\n  #   timeoutInMinutes: 60\n  #   variables:\n  #     BUILDSECMON_OPT_IN: true\n  #     VSCODE_ARCH: x64\n  #   steps:\n  #     - template: darwin/product-build-darwin.yml@self\n  #       parameters:\n  #         VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n  #         VSCODE_RUN_UNIT_TESTS: false\n  #         VSCODE_RUN_INTEGRATION_TESTS: true\n  #         VSCODE_RUN_SMOKE_TESTS: false\n  # - job: macOSSmokeTest\n  #   displayName: macOS (Smoke Tests)\n  #   pool:\n  #     vmImage: macOS-11\n  #   timeoutInMinutes: 60\n  #   variables:\n  #     BUILDSECMON_OPT_IN: true\n  #     VSCODE_ARCH: x64\n  #   steps:\n  #     - template: darwin/product-build-darwin.yml@self\n  #       parameters:\n  #         VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n  #         VSCODE_RUN_UNIT_TESTS: false\n  #         VSCODE_RUN_INTEGRATION_TESTS: false\n  #         VSCODE_RUN_SMOKE_TESTS: true\n"
  },
  {
    "path": "build/azure-pipelines/product-build.yml",
    "content": "pr: none\n\nschedules:\n  - cron: \"0 5 * * Mon-Fri\"\n    displayName: Mon-Fri at 7:00\n    branches:\n      include:\n        - main\n\ntrigger:\n  batch: true\n  branches:\n    include: [\"main\", \"release/*\"]\n\nparameters:\n  - name: VSCODE_QUALITY\n    displayName: Quality\n    type: string\n    default: insider\n    values:\n      - exploration\n      - insider\n      - stable\n  - name: NPM_REGISTRY\n    displayName: \"Custom NPM Registry\"\n    type: string\n    default: 'https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/npm/registry/'\n  - name: CARGO_REGISTRY\n    displayName: \"Custom Cargo Registry\"\n    type: string\n    default: 'sparse+https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/Cargo/index/'\n  - name: VSCODE_BUILD_WIN32\n    displayName: \"🎯 Windows x64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_WIN32_ARM64\n    displayName: \"🎯 Windows arm64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_LINUX\n    displayName: \"🎯 Linux x64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_LINUX_ARM64\n    displayName: \"🎯 Linux arm64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_LINUX_ARMHF\n    displayName: \"🎯 Linux armhf\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_ALPINE\n    displayName: \"🎯 Alpine x64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_ALPINE_ARM64\n    displayName: \"🎯 Alpine arm64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_MACOS\n    displayName: \"🎯 macOS x64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_MACOS_ARM64\n    displayName: \"🎯 macOS arm64\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_MACOS_UNIVERSAL\n    displayName: \"🎯 macOS universal\"\n    type: boolean\n    default: true\n  - name: VSCODE_BUILD_WEB\n    displayName: \"🎯 Web\"\n    type: boolean\n    default: true\n  - name: VSCODE_PUBLISH\n    displayName: \"Publish to builds.code.visualstudio.com\"\n    type: boolean\n    default: true\n  - name: VSCODE_RELEASE\n    displayName: \"Release build if successful\"\n    type: boolean\n    default: false\n  - name: VSCODE_COMPILE_ONLY\n    displayName: \"Run Compile stage exclusively\"\n    type: boolean\n    default: false\n  - name: VSCODE_STEP_ON_IT\n    displayName: \"Skip tests\"\n    type: boolean\n    default: false\n\nvariables:\n  - name: VSCODE_PRIVATE_BUILD\n    value: ${{ ne(variables['Build.Repository.Uri'], 'https://github.com/microsoft/vscode.git') }}\n  - name: NPM_REGISTRY\n    ${{ if in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}: # disable terrapin when in VSCODE_CIBUILD\n      value: none\n    ${{ else }}:\n      value: ${{ parameters.NPM_REGISTRY }}\n  - name: CARGO_REGISTRY\n    value: ${{ parameters.CARGO_REGISTRY }}\n  - name: VSCODE_QUALITY\n    value: ${{ parameters.VSCODE_QUALITY }}\n  - name: VSCODE_BUILD_STAGE_WINDOWS\n    value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}\n  - name: VSCODE_BUILD_STAGE_LINUX\n    value: ${{ or(eq(parameters.VSCODE_BUILD_LINUX, true), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}\n  - name: VSCODE_BUILD_STAGE_ALPINE\n    value: ${{ or(eq(parameters.VSCODE_BUILD_ALPINE, true), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}\n  - name: VSCODE_BUILD_STAGE_MACOS\n    value: ${{ or(eq(parameters.VSCODE_BUILD_MACOS, true), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}\n  - name: VSCODE_BUILD_STAGE_WEB\n    value: ${{ eq(parameters.VSCODE_BUILD_WEB, true) }}\n  - name: VSCODE_CIBUILD\n    value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}\n  - name: VSCODE_PUBLISH\n    value: ${{ and(eq(parameters.VSCODE_PUBLISH, true), eq(variables.VSCODE_CIBUILD, false), eq(parameters.VSCODE_COMPILE_ONLY, false)) }}\n  - name: VSCODE_SCHEDULEDBUILD\n    value: ${{ eq(variables['Build.Reason'], 'Schedule') }}\n  - name: VSCODE_STEP_ON_IT\n    value: ${{ eq(parameters.VSCODE_STEP_ON_IT, true) }}\n  - name: VSCODE_BUILD_MACOS_UNIVERSAL\n    value: ${{ and(eq(parameters.VSCODE_BUILD_MACOS, true), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true), eq(parameters.VSCODE_BUILD_MACOS_UNIVERSAL, true)) }}\n  - name: VSCODE_STAGING_BLOB_STORAGE_ACCOUNT_NAME\n    value: vscodeesrp\n  - name: PRSS_CDN_URL\n    value: https://vscode.download.prss.microsoft.com/dbazure/download\n  - name: VSCODE_ESRP_SERVICE_CONNECTION_ID\n    value: fe07e6ce-6ffb-4df9-8d27-d129523a3f3e\n  - name: VSCODE_ESRP_TENANT_ID\n    value: 975f013f-7f24-47e8-a7d3-abc4752bf346\n  - name: VSCODE_ESRP_CLIENT_ID\n    value: 4ac7ed59-b5e9-4f66-9c30-8d1afa72d32d\n  - name: ESRP_TENANT_ID\n    value: 975f013f-7f24-47e8-a7d3-abc4752bf346\n  - name: ESRP_CLIENT_ID\n    value: c24324f7-e65f-4c45-8702-ed2d4c35df99\n  - name: AZURE_DOCUMENTDB_ENDPOINT\n    value: https://vscode.documents.azure.com/\n  - name: VSCODE_MIXIN_REPO\n    value: microsoft/vscode-distro\n  - name: skipComponentGovernanceDetection\n    value: true\n  - name: ComponentDetection.Timeout\n    value: 600\n  - name: Codeql.SkipTaskAutoInjection\n    value: true\n  - name: ARTIFACT_PREFIX\n    value: ''\n\nname: \"$(Date:yyyyMMdd).$(Rev:r) (${{ parameters.VSCODE_QUALITY }})\"\n\nresources:\n  pipelines:\n    - pipeline: vscode-7pm-kick-off\n      source: 'VS Code 7PM Kick-Off'\n      trigger: true\n  repositories:\n    - repository: 1ESPipelines\n      type: git\n      name: 1ESPipelineTemplates/1ESPipelineTemplates\n      ref: refs/tags/release\n\nextends:\n  template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines\n  parameters:\n    sdl:\n      tsa:\n        enabled: true\n        configFile: $(Build.SourcesDirectory)/build/azure-pipelines/config/tsaoptions.json\n      binskim:\n        analyzeTargetGlob: '+:file|$(Agent.BuildDirectory)/VSCode-*/**/*.exe;+:file|$(Agent.BuildDirectory)/VSCode-*/**/*.node;+:file|$(Agent.BuildDirectory)/VSCode-*/**/*.dll;-:file|$(Build.SourcesDirectory)/.build/**/system-setup/VSCodeSetup*.exe;-:file|$(Build.SourcesDirectory)/.build/**/user-setup/VSCodeUserSetup*.exe'\n      codeql:\n        runSourceLanguagesInSourceAnalysis: true\n        compiled:\n          enabled: false\n          justificationForDisabling: \"CodeQL breaks ESRP CodeSign on macOS (ICM #520035761, githubcustomers/microsoft-codeql-support#198)\"\n      credscan:\n        suppressionsFile: $(Build.SourcesDirectory)/build/azure-pipelines/config/CredScanSuppressions.json\n      eslint:\n        enabled: true\n        enableExclusions: true\n        exclusionsFilePath: $(Build.SourcesDirectory)/.eslint-ignore\n      sourceAnalysisPool: 1es-windows-2022-x64\n      createAdoIssuesForJustificationsForDisablement: false\n    containers:\n      snapcraft:\n        image: vscodehub.azurecr.io/vscode-linux-build-agent:snapcraft-x64\n      ubuntu-2004-arm64:\n        image: onebranch.azurecr.io/linux/ubuntu-2004-arm64:latest\n    stages:\n      - stage: Compile\n        jobs:\n          - job: Compile\n            timeoutInMinutes: 90\n            pool:\n              name: AcesShared\n              os: macOS\n            variables:\n              VSCODE_ARCH: arm64\n            steps:\n              - template: build/azure-pipelines/product-compile.yml@self\n                parameters:\n                  VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n\n      - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:\n        - stage: CompileCLI\n          dependsOn: []\n          jobs:\n            - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:\n              - job: CLILinuxX64\n                pool:\n                  name: 1es-ubuntu-22.04-x64\n                  os: linux\n                steps:\n                  - template: build/azure-pipelines/linux/cli-build-linux.yml@self\n                    parameters:\n                      VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_LINUX: ${{ parameters.VSCODE_BUILD_LINUX }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true))) }}:\n              - job: CLILinuxGnuARM\n                pool:\n                  name: 1es-ubuntu-22.04-x64\n                  os: linux\n                steps:\n                  - template: build/azure-pipelines/linux/cli-build-linux.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_LINUX_ARMHF: ${{ parameters.VSCODE_BUILD_LINUX_ARMHF }}\n                      VSCODE_BUILD_LINUX_ARM64: ${{ parameters.VSCODE_BUILD_LINUX_ARM64 }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}:\n              - job: CLIAlpineX64\n                pool:\n                  name: 1es-ubuntu-22.04-x64\n                  os: linux\n                steps:\n                  - template: build/azure-pipelines/alpine/cli-build-alpine.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_ALPINE: ${{ parameters.VSCODE_BUILD_ALPINE }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}:\n              - job: CLIAlpineARM64\n                pool:\n                  name: 1es-mariner-2.0-arm64\n                  os: linux\n                  hostArchitecture: arm64\n                container: ubuntu-2004-arm64\n                templateContext:\n                  authenticatedContainerRegistries:\n                    - registry: onebranch.azurecr.io\n                      tenant: AME\n                      identity: 1ESPipelineIdentity\n                steps:\n                  - template: build/azure-pipelines/alpine/cli-build-alpine.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_ALPINE_ARM64: ${{ parameters.VSCODE_BUILD_ALPINE_ARM64 }}\n\n            - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:\n              - job: CLIMacOSX64\n                pool:\n                  name: Azure Pipelines\n                  image: macOS-13\n                  os: macOS\n                variables:\n                  # todo@connor4312 to diagnose build flakes\n                  - name: MSRUSTUP_LOG\n                    value: debug\n                steps:\n                  - template: build/azure-pipelines/darwin/cli-build-darwin.yml@self\n                    parameters:\n                      VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}:\n              - job: CLIMacOSARM64\n                pool:\n                  name: Azure Pipelines\n                  image: macOS-13\n                  os: macOS\n                variables:\n                  # todo@connor4312 to diagnose build flakes\n                  - name: MSRUSTUP_LOG\n                    value: debug\n                steps:\n                  - template: build/azure-pipelines/darwin/cli-build-darwin.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }}\n\n            - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:\n              - job: CLIWindowsX64\n                pool:\n                  name: 1es-windows-2019-x64\n                  os: windows\n                steps:\n                  - template: build/azure-pipelines/win32/cli-build-win32.yml@self\n                    parameters:\n                      VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:\n              - job: CLIWindowsARM64\n                pool:\n                  name: 1es-windows-2019-x64\n                  os: windows\n                steps:\n                  - template: build/azure-pipelines/win32/cli-build-win32.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }}\n\n      - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false)) }}:\n        - stage: APIScan\n          dependsOn: []\n          pool:\n            name: 1es-windows-2019-x64\n            os: windows\n          jobs:\n            - job: WindowsAPIScan\n              steps:\n                - template: build/azure-pipelines/win32/sdl-scan-win32.yml@self\n                  parameters:\n                    VSCODE_ARCH: x64\n                    VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n\n      - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}:\n        - stage: Windows\n          dependsOn:\n            - Compile\n            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:\n              - CompileCLI\n          pool:\n            name: 1es-windows-2019-x64\n            os: windows\n          jobs:\n            - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:\n              - job: WindowsUnitTests\n                displayName: Unit Tests\n                timeoutInMinutes: 60\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/win32/product-build-win32.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_ARCH: x64\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: true\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n              - job: WindowsIntegrationTests\n                displayName: Integration Tests\n                timeoutInMinutes: 60\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/win32/product-build-win32.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_ARCH: x64\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: true\n                      VSCODE_RUN_SMOKE_TESTS: false\n              - job: WindowsSmokeTests\n                displayName: Smoke Tests\n                timeoutInMinutes: 60\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/win32/product-build-win32.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_ARCH: x64\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: true\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32, true)) }}:\n              - job: Windows\n                timeoutInMinutes: 120\n                variables:\n                  VSCODE_ARCH: x64\n                templateContext:\n                  sdl:\n                    suppression:\n                      suppressionFile: $(Build.SourcesDirectory)\\.config\\guardian\\.gdnsuppress\n                steps:\n                  - template: build/azure-pipelines/win32/product-build-win32.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_ARCH: x64\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n                      VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n                      VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n\n              - job: WindowsCLISign\n                timeoutInMinutes: 90\n                steps:\n                  - template: build/azure-pipelines/win32/product-build-win32-cli-sign.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }}\n                      VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:\n              - job: WindowsARM64\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: arm64\n                templateContext:\n                  sdl:\n                    suppression:\n                      suppressionFile: $(Build.SourcesDirectory)\\.config\\guardian\\.gdnsuppress\n                steps:\n                  - template: build/azure-pipelines/win32/product-build-win32.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_ARCH: arm64\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n\n      - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}:\n        - stage: Linux\n          dependsOn:\n            - Compile\n            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:\n              - CompileCLI\n          pool:\n            name: 1es-ubuntu-22.04-x64\n            os: linux\n          jobs:\n            - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:\n              - job: Linuxx64UnitTest\n                displayName: Unit Tests\n                variables:\n                  VSCODE_ARCH: x64\n                  NPM_ARCH: x64\n                  DISPLAY: \":10\"\n                steps:\n                  - template: build/azure-pipelines/linux/product-build-linux.yml@self\n                    parameters:\n                      VSCODE_ARCH: x64\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: true\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n              - job: Linuxx64IntegrationTest\n                displayName: Integration Tests\n                variables:\n                  VSCODE_ARCH: x64\n                  NPM_ARCH: x64\n                  DISPLAY: \":10\"\n                steps:\n                  - template: build/azure-pipelines/linux/product-build-linux.yml@self\n                    parameters:\n                      VSCODE_ARCH: x64\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: true\n                      VSCODE_RUN_SMOKE_TESTS: false\n              - job: Linuxx64SmokeTest\n                displayName: Smoke Tests\n                variables:\n                  VSCODE_ARCH: x64\n                  NPM_ARCH: x64\n                  DISPLAY: \":10\"\n                steps:\n                  - template: build/azure-pipelines/linux/product-build-linux.yml@self\n                    parameters:\n                      VSCODE_ARCH: x64\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: true\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}:\n              - job: Linuxx64\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: x64\n                  NPM_ARCH: x64\n                  DISPLAY: \":10\"\n                steps:\n                  - template: build/azure-pipelines/linux/product-build-linux.yml@self\n                    parameters:\n                      VSCODE_ARCH: x64\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n                      VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n                      VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}:\n              - job: LinuxSnap\n                dependsOn:\n                  - Linuxx64\n                container: snapcraft\n                variables:\n                  VSCODE_ARCH: x64\n                templateContext:\n                  authenticatedContainerRegistries:\n                    - registry: onebranch.azurecr.io\n                      tenant: AME\n                      identity: 1ESPipelineIdentity\n                steps:\n                  - template: build/azure-pipelines/linux/snap-build-linux.yml@self\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}:\n              - job: LinuxArmhf\n                variables:\n                  VSCODE_ARCH: armhf\n                  NPM_ARCH: arm\n                steps:\n                  - template: build/azure-pipelines/linux/product-build-linux.yml@self\n                    parameters:\n                      VSCODE_ARCH: armhf\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:\n              - job: LinuxArm64\n                variables:\n                  VSCODE_ARCH: arm64\n                  NPM_ARCH: arm64\n                steps:\n                  - template: build/azure-pipelines/linux/product-build-linux.yml@self\n                    parameters:\n                      VSCODE_ARCH: arm64\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n\n      - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_ALPINE'], true)) }}:\n        - stage: Alpine\n          dependsOn:\n            - Compile\n            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:\n              - CompileCLI\n          pool:\n            name: 1es-ubuntu-22.04-x64\n            os: linux\n          jobs:\n            - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:\n              - job: LinuxAlpine\n                variables:\n                  VSCODE_ARCH: x64\n                  NPM_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/alpine/product-build-alpine.yml@self\n\n            - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:\n              - job: LinuxAlpineArm64\n                timeoutInMinutes: 120\n                variables:\n                  VSCODE_ARCH: arm64\n                  NPM_ARCH: arm64\n                steps:\n                  - template: build/azure-pipelines/alpine/product-build-alpine.yml@self\n\n      - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_MACOS'], true)) }}:\n        - stage: macOS\n          dependsOn:\n            - Compile\n            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:\n              - CompileCLI\n          pool:\n            name: Azure Pipelines\n            image: macOS-13\n            os: macOS\n          variables:\n            BUILDSECMON_OPT_IN: true\n          jobs:\n            - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:\n              - job: macOSUnitTest\n                displayName: Unit Tests\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: true\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n              - job: macOSIntegrationTest\n                displayName: Integration Tests\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: true\n                      VSCODE_RUN_SMOKE_TESTS: false\n              - job: macOSSmokeTest\n                displayName: Smoke Tests\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: true\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS, true)) }}:\n              - job: macOS\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n\n              - ${{ if eq(parameters.VSCODE_STEP_ON_IT, false) }}:\n                - job: macOSTest\n                  timeoutInMinutes: 90\n                  variables:\n                    VSCODE_ARCH: x64\n                  steps:\n                    - template: build/azure-pipelines/darwin/product-build-darwin.yml@self\n                      parameters:\n                        VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                        VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                        VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n                        VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n                        VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}\n\n              - job: macOSSign\n                dependsOn:\n                  - macOS\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin-sign.yml@self\n\n              - job: macOSCLISign\n                timeoutInMinutes: 90\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }}\n                      VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }}\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}:\n              - job: macOSARM64\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: arm64\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self\n                    parameters:\n                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}\n                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}\n                      VSCODE_RUN_UNIT_TESTS: false\n                      VSCODE_RUN_INTEGRATION_TESTS: false\n                      VSCODE_RUN_SMOKE_TESTS: false\n\n              - job: macOSARM64Sign\n                dependsOn:\n                  - macOSARM64\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: arm64\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin-sign.yml@self\n\n            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(variables['VSCODE_BUILD_MACOS_UNIVERSAL'], true)) }}:\n              - job: macOSUniversal\n                dependsOn:\n                  - macOS\n                  - macOSARM64\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: universal\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin-universal.yml@self\n\n              - job: macOSUniversalSign\n                dependsOn:\n                  - macOSUniversal\n                timeoutInMinutes: 90\n                variables:\n                  VSCODE_ARCH: universal\n                steps:\n                  - template: build/azure-pipelines/darwin/product-build-darwin-sign.yml@self\n\n      - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WEB'], true)) }}:\n        - stage: Web\n          dependsOn:\n            - Compile\n          pool:\n            name: 1es-ubuntu-22.04-x64\n            os: linux\n          jobs:\n            - ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}:\n              - job: Web\n                variables:\n                  VSCODE_ARCH: x64\n                steps:\n                  - template: build/azure-pipelines/web/product-build-web.yml@self\n\n      - ${{ if eq(variables['VSCODE_PUBLISH'], 'true') }}:\n        - stage: Publish\n          dependsOn: []\n          pool:\n            name: 1es-windows-2019-x64\n            os: windows\n          variables:\n            - name: BUILDS_API_URL\n              value: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/\n          jobs:\n            - job: PublishBuild\n              timeoutInMinutes: 180\n              displayName: Publish Build\n              steps:\n                - template: build/azure-pipelines/product-publish.yml@self\n\n        - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}:\n          - stage: ApproveRelease\n            dependsOn: [] # run in parallel to compile stage\n            pool:\n              name: 1es-ubuntu-22.04-x64\n              os: linux\n            jobs:\n              - job: ApproveRelease\n                displayName: \"Approve Release\"\n                variables:\n                  - group: VSCodePeerApproval\n                  - name: skipComponentGovernanceDetection\n                    value: true\n\n        - ${{ if or(and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true))) }}:\n          - stage: Release\n            dependsOn:\n              - Publish\n              - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}:\n                - ApproveRelease\n            pool:\n              name: 1es-ubuntu-22.04-x64\n              os: linux\n            jobs:\n              - job: ReleaseBuild\n                displayName: Release Build\n                steps:\n                  - template: build/azure-pipelines/product-release.yml@self\n                    parameters:\n                      VSCODE_RELEASE: ${{ parameters.VSCODE_RELEASE }}\n"
  },
  {
    "path": "build/azure-pipelines/product-compile.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ./distro/download-distro.yml@self\n\n    - task: AzureKeyVault@2\n      displayName: \"Azure Key Vault: Get Secrets\"\n      inputs:\n        azureSubscription: vscode\n        KeyVaultName: vscode-build-secrets\n        SecretsFilter: \"github-distro-mixin-password\"\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js compile $VSCODE_ARCH > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - script: tar -xzf .build/node_modules_cache/cache.tgz\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: sudo apt update -y && sudo apt install -y build-essential pkg-config libx11-dev libx11-xcb-dev libxkbfile-dev libnotify-bin libkrb5-dev\n      displayName: Install build tools\n      condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: |\n      set -e\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    env:\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: node build/azure-pipelines/distro/mixin-npm\n      condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n      displayName: Mixin distro node modules\n\n  - script: |\n      set -e\n      node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt\n      mkdir -p .build/node_modules_cache\n      tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n\n  - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: npm run compile\n      workingDirectory: build\n      displayName: Compile /build/ folder\n\n    - script: .github/workflows/check-clean-git-state.sh\n      displayName: Check /build/ folder\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: node build/azure-pipelines/distro/mixin-quality\n      displayName: Mixin distro quality\n\n  - template: common/install-builtin-extensions.yml@self\n\n  - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: npm exec -- npm-run-all -lp core-ci-pr extensions-ci-pr hygiene eslint valid-layers-check property-init-order-check vscode-dts-compile-check tsec-compile-check\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Compile & Hygiene (OSS)\n  - ${{ else }}:\n    - script: npm exec -- npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check property-init-order-check vscode-dts-compile-check tsec-compile-check\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Compile & Hygiene (non-OSS)\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - script: |\n        set -e\n        npm run compile\n      displayName: Compile smoke test suites (non-OSS)\n      workingDirectory: test/smoke\n      condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))\n\n    - script: |\n        set -e\n        npm run compile\n      displayName: Compile integration test suites (non-OSS)\n      workingDirectory: test/integration/browser\n      condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))\n\n    - task: AzureCLI@2\n      displayName: Fetch secrets\n      inputs:\n        azureSubscription: vscode\n        scriptType: pscore\n        scriptLocation: inlineScript\n        addSpnToEnvironment: true\n        inlineScript: |\n          Write-Host \"##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId\"\n          Write-Host \"##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId\"\n          Write-Host \"##vso[task.setvariable variable=AZURE_ID_TOKEN;issecret=true]$env:idToken\"\n\n    - script: |\n        set -e\n        AZURE_STORAGE_ACCOUNT=\"vscodeweb\" \\\n        AZURE_TENANT_ID=\"$(AZURE_TENANT_ID)\" \\\n        AZURE_CLIENT_ID=\"$(AZURE_CLIENT_ID)\" \\\n        AZURE_ID_TOKEN=\"$(AZURE_ID_TOKEN)\" \\\n          node build/azure-pipelines/upload-sourcemaps\n      displayName: Upload sourcemaps to Azure\n\n    - script: ./build/azure-pipelines/common/extract-telemetry.sh\n      displayName: Generate lists of telemetry events\n\n    - script: tar -cz --exclude='.build/node_modules_cache' --exclude='.build/node_modules_list.txt' --exclude='.build/distro' -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz $(ls -d .build out-* test/integration/browser/out test/smoke/out test/automation/out 2>/dev/null)\n      displayName: Compress compilation artifact\n\n    - task: 1ES.PublishPipelineArtifact@1\n      inputs:\n        targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz\n        artifactName: Compilation\n        sbomEnabled: false\n      displayName: Publish compilation artifact\n\n    - script: npm run download-builtin-extensions-cg\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Download component details of built-in extensions\n\n    - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0\n      displayName: \"Component Detection\"\n      inputs:\n        sourceScanPath: $(Build.SourcesDirectory)\n        alertWarningLevel: Medium\n      continueOnError: true\n"
  },
  {
    "path": "build/azure-pipelines/product-npm-package-validate.yml",
    "content": "trigger: none\n\npr:\n  branches:\n    include: [\"main\"]\n  paths:\n    include: [\"package.json\", \"package-lock.json\"]\n\nvariables:\n  - name: NPM_REGISTRY\n    value: \"https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/npm/registry/\"\n  - name: VSCODE_CIBUILD\n    value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}\n  - name: VSCODE_QUALITY\n    value: oss\n\njobs:\n  - ${{ if ne(variables['VSCODE_CIBUILD'], true) }}:\n    - job: ValidateNpmPackage\n      displayName: Valiate NPM package against Terrapin\n      pool:\n        name: 1es-ubuntu-22.04-x64\n        os: linux\n      timeoutInMinutes: 40000\n      continueOnError: true\n      variables:\n        VSCODE_ARCH: x64\n      steps:\n        - task: NodeTool@0\n          inputs:\n            versionSource: fromFile\n            versionFilePath: .nvmrc\n            nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n        - script: node build/setup-npm-registry.js $NPM_REGISTRY\n          condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n          displayName: Setup NPM Registry\n\n        - script: |\n            set -e\n            # Set the private NPM registry to the global npmrc file\n            # so that authentication works for subfolders like build/, remote/, extensions/ etc\n            # which does not have their own .npmrc file\n            echo \"NPMRC Path: $(npm config get userconfig)\"\n            echo \"NPM Registry: $(npm config get registry)\"\n            npm config set registry \"$NPM_REGISTRY\"\n            echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n          condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n          displayName: Setup NPM\n\n        - task: npmAuthenticate@0\n          inputs:\n            workingFile: $(NPMRC_PATH)\n          condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n          displayName: Setup NPM Authentication\n\n        - script: sudo apt update -y && sudo apt install -y build-essential pkg-config libx11-dev libx11-xcb-dev libxkbfile-dev libnotify-bin libkrb5-dev\n          displayName: Install build tools\n          condition: succeeded()\n\n        - script: |\n            set -e\n\n            for attempt in {1..6}; do\n              if [ $attempt -gt 1 ]; then\n                echo \"Attempt $attempt: Waiting for 1 hour before retrying...\"\n                sleep 3600\n              fi\n\n              echo \"Attempt $attempt: Running npm ci\"\n              if npm i --ignore-scripts; then\n                if node build/npm/postinstall.js; then\n                  echo \"npm i succeeded on attempt $attempt\"\n                  exit 0\n                else\n                  echo \"node build/npm/postinstall.js failed on attempt $attempt\"\n                fi\n              else\n                echo \"npm i failed on attempt $attempt\"\n              fi\n            done\n\n            echo \"npm i failed after 6 attempts\"\n            exit 1\n          env:\n            npm_command: 'install --ignore-scripts'\n            ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n            PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n            GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n          displayName: Install dependencies with retries\n          timeoutInMinutes: 400\n\n        - script: .github/workflows/check-clean-git-state.sh\n          displayName: Check clean git state\n"
  },
  {
    "path": "build/azure-pipelines/product-publish.yml",
    "content": "steps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - task: AzureKeyVault@2\n    displayName: \"Azure Key Vault: Get Secrets\"\n    inputs:\n      azureSubscription: vscode\n      KeyVaultName: vscode-build-secrets\n      SecretsFilter: \"github-distro-mixin-password\"\n\n  - task: AzureKeyVault@2\n    displayName: \"Azure Key Vault: Get ESRP Secrets\"\n    inputs:\n      azureSubscription: vscode-esrp\n      KeyVaultName: vscode-esrp\n      SecretsFilter: esrp-auth,esrp-sign\n\n  # allow-any-unicode-next-line\n  - pwsh: Write-Host \"##vso[build.addbuildtag]🚀\"\n    displayName: Add build tag\n\n  - pwsh: |\n      npm ci\n    workingDirectory: build\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install build dependencies\n\n  - download: current\n    patterns: \"**/artifacts_processed_*.txt\"\n    displayName: Download all artifacts_processed text files\n\n  - task: AzureCLI@2\n    displayName: Fetch secrets\n    inputs:\n      azureSubscription: vscode\n      scriptType: pscore\n      scriptLocation: inlineScript\n      addSpnToEnvironment: true\n      inlineScript: |\n        Write-Host \"##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId\"\n        Write-Host \"##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId\"\n        Write-Host \"##vso[task.setvariable variable=AZURE_ID_TOKEN;issecret=true]$env:idToken\"\n\n  - pwsh: |\n      . build/azure-pipelines/win32/exec.ps1\n\n      if (Test-Path \"$(Pipeline.Workspace)/artifacts_processed_*/artifacts_processed_*.txt\") {\n        Write-Host \"Artifacts already processed so a build must have already been created.\"\n        return\n      }\n\n      $VERSION = node -p \"require('./package.json').version\"\n      Write-Host \"Creating build with version: $VERSION\"\n      exec { node build/azure-pipelines/common/createBuild.js $VERSION }\n    env:\n      AZURE_TENANT_ID: \"$(AZURE_TENANT_ID)\"\n      AZURE_CLIENT_ID: \"$(AZURE_CLIENT_ID)\"\n      AZURE_ID_TOKEN: \"$(AZURE_ID_TOKEN)\"\n    displayName: Create build if it hasn't been created before\n\n  - pwsh: |\n      $publishAuthTokens = (node build/azure-pipelines/common/getPublishAuthTokens)\n      Write-Host \"##vso[task.setvariable variable=PUBLISH_AUTH_TOKENS;issecret=true]$publishAuthTokens\"\n    env:\n      AZURE_TENANT_ID: \"$(AZURE_TENANT_ID)\"\n      AZURE_CLIENT_ID: \"$(AZURE_CLIENT_ID)\"\n      AZURE_ID_TOKEN: \"$(AZURE_ID_TOKEN)\"\n    displayName: Get publish auth tokens\n\n  - pwsh: node build/azure-pipelines/common/publish.js\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      AZURE_TENANT_ID: \"$(AZURE_TENANT_ID)\"\n      AZURE_CLIENT_ID: \"$(AZURE_CLIENT_ID)\"\n      AZURE_ID_TOKEN: \"$(AZURE_ID_TOKEN)\"\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n      PUBLISH_AUTH_TOKENS: \"$(PUBLISH_AUTH_TOKENS)\"\n      RELEASE_TENANT_ID: \"$(ESRP_TENANT_ID)\"\n      RELEASE_CLIENT_ID: \"$(ESRP_CLIENT_ID)\"\n      RELEASE_AUTH_CERT: \"$(esrp-auth)\"\n      RELEASE_REQUEST_SIGNING_CERT: \"$(esrp-sign)\"\n    displayName: Process artifacts\n    retryCountOnTaskFailure: 3\n\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(Pipeline.Workspace)/artifacts_processed_$(System.StageAttempt)/artifacts_processed_$(System.StageAttempt).txt\n      artifactName: artifacts_processed_$(System.StageAttempt)\n      sbomEnabled: false\n    displayName: Publish the artifacts processed for this stage attempt\n    condition: always()\n\n  - pwsh: |\n      $ErrorActionPreference = 'Stop'\n\n      # Determine which stages we need to watch\n      $stages = @(\n        if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }\n        if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }\n        if ($env:VSCODE_BUILD_STAGE_ALPINE -eq 'True') { 'Alpine' }\n        if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }\n        if ($env:VSCODE_BUILD_STAGE_WEB -eq 'True') { 'Web' }\n      )\n      Write-Host \"Stages to check: $stages\"\n\n      # Get the timeline and see if it says the other stage completed\n      $timeline = Invoke-RestMethod \"$($env:BUILDS_API_URL)timeline?api-version=6.0\" -Headers @{\n        Authorization = \"Bearer $env:SYSTEM_ACCESSTOKEN\"\n      }  -MaximumRetryCount 5 -RetryIntervalSec 1\n\n      $failedStages = @()\n      foreach ($stage in $stages) {\n        $didStageFail = $timeline.records | Where-Object {\n          $_.name -eq $stage -and $_.type -eq 'stage' -and $_.result -ne 'succeeded' -and $_.result -ne 'succeededWithIssues'\n        }\n\n        if($didStageFail) {\n          $failedStages += $stage\n          Write-Host \"'$stage' failed!\"\n          Write-Host $didStageFail\n        } else {\n          Write-Host \"'$stage' did not fail.\"\n        }\n      }\n\n      if ($failedStages.Length) {\n        throw \"Failed stages: $($failedStages -join ', '). This stage will now fail so that it is easier to retry failed jobs.\"\n      }\n    env:\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n    displayName: Determine if stage should succeed\n"
  },
  {
    "path": "build/azure-pipelines/product-release.yml",
    "content": "parameters:\n  - name: VSCODE_RELEASE\n    type: boolean\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - task: AzureCLI@2\n    displayName: Fetch secrets\n    inputs:\n      azureSubscription: vscode\n      scriptType: pscore\n      scriptLocation: inlineScript\n      addSpnToEnvironment: true\n      inlineScript: |\n        Write-Host \"##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId\"\n        Write-Host \"##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId\"\n        Write-Host \"##vso[task.setvariable variable=AZURE_ID_TOKEN;issecret=true]$env:idToken\"\n\n  - script: npm ci\n    workingDirectory: build\n    displayName: Install /build dependencies\n\n  - script: |\n      set -e\n      AZURE_TENANT_ID=\"$(AZURE_TENANT_ID)\" \\\n      AZURE_CLIENT_ID=\"$(AZURE_CLIENT_ID)\" \\\n      AZURE_ID_TOKEN=\"$(AZURE_ID_TOKEN)\" \\\n        node build/azure-pipelines/common/releaseBuild.js ${{ parameters.VSCODE_RELEASE }}\n    displayName: Release build\n"
  },
  {
    "path": "build/azure-pipelines/publish-types/check-version.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst child_process_1 = __importDefault(require(\"child_process\"));\nlet tag = '';\ntry {\n    tag = child_process_1.default\n        .execSync('git describe --tags `git rev-list --tags --max-count=1`')\n        .toString()\n        .trim();\n    if (!isValidTag(tag)) {\n        throw Error(`Invalid tag ${tag}`);\n    }\n}\ncatch (err) {\n    console.error(err);\n    console.error('Failed to update types');\n    process.exit(1);\n}\nfunction isValidTag(t) {\n    if (t.split('.').length !== 3) {\n        return false;\n    }\n    const [major, minor, bug] = t.split('.');\n    // Only release for tags like 1.34.0\n    if (bug !== '0') {\n        return false;\n    }\n    if (isNaN(parseInt(major, 10)) || isNaN(parseInt(minor, 10))) {\n        return false;\n    }\n    return true;\n}\n//# sourceMappingURL=check-version.js.map"
  },
  {
    "path": "build/azure-pipelines/publish-types/check-version.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport cp from 'child_process';\n\nlet tag = '';\ntry {\n\ttag = cp\n\t\t.execSync('git describe --tags `git rev-list --tags --max-count=1`')\n\t\t.toString()\n\t\t.trim();\n\n\tif (!isValidTag(tag)) {\n\t\tthrow Error(`Invalid tag ${tag}`);\n\t}\n} catch (err) {\n\tconsole.error(err);\n\tconsole.error('Failed to update types');\n\tprocess.exit(1);\n}\n\nfunction isValidTag(t: string) {\n\tif (t.split('.').length !== 3) {\n\t\treturn false;\n\t}\n\n\tconst [major, minor, bug] = t.split('.');\n\n\t// Only release for tags like 1.34.0\n\tif (bug !== '0') {\n\t\treturn false;\n\t}\n\n\tif (isNaN(parseInt(major, 10)) || isNaN(parseInt(minor, 10))) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"
  },
  {
    "path": "build/azure-pipelines/publish-types/publish-types.yml",
    "content": "# Publish @types/vscode for each release\n\ntrigger:\n  branches:\n    include: [\"refs/tags/*\"]\n\npr: none\n\npool:\n  vmImage: ubuntu-latest\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - bash: |\n      TAG_VERSION=$(git describe --tags `git rev-list --tags --max-count=1`)\n      CHANNEL=\"C1C14HJ2F\"\n\n      if [ \"$TAG_VERSION\" == \"1.999.0\" ]; then\n        MESSAGE=\"<!here>. Someone pushed 1.999.0 tag. Please delete it ASAP from remote and local.\"\n\n        curl -X POST -H \"Authorization: Bearer $(SLACK_TOKEN)\" \\\n        -H 'Content-type: application/json; charset=utf-8' \\\n        --data '{\"channel\":\"'\"$CHANNEL\"'\", \"link_names\": true, \"text\":\"'\"$MESSAGE\"'\"}' \\\n        https://slack.com/api/chat.postMessage\n\n        exit 1\n      fi\n    displayName: Check 1.999.0 tag\n\n  - bash: |\n      # Install build dependencies\n      (cd build && npm ci)\n      node build/azure-pipelines/publish-types/check-version.js\n    displayName: Check version\n\n  - bash: |\n      git config --global user.email \"vscode@microsoft.com\"\n      git config --global user.name \"VSCode\"\n\n      git clone https://$(GITHUB_TOKEN)@github.com/DefinitelyTyped/DefinitelyTyped.git --depth=1\n      node build/azure-pipelines/publish-types/update-types.js\n\n      TAG_VERSION=$(git describe --tags `git rev-list --tags --max-count=1`)\n\n      cd DefinitelyTyped\n\n      git diff --color | cat\n      git add -A\n      git status\n      git checkout -b \"vscode-types-$TAG_VERSION\"\n      git commit -m \"VS Code $TAG_VERSION Extension API\"\n      git push origin \"vscode-types-$TAG_VERSION\"\n\n    displayName: Push update to DefinitelyTyped\n\n  - bash: |\n      TAG_VERSION=$(git describe --tags `git rev-list --tags --max-count=1`)\n      CHANNEL=\"C1C14HJ2F\"\n\n      MESSAGE=\"DefinitelyTyped/DefinitelyTyped#vscode-types-$TAG_VERSION created. Endgame champion, please open this link, examine changes and create a PR:\"\n      LINK=\"https://github.com/DefinitelyTyped/DefinitelyTyped/compare/vscode-types-$TAG_VERSION?quick_pull=1&body=Updating%20VS%20Code%20Extension%20API.%20See%20https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fvscode%2Fissues%2F70175%20for%20details.\"\n      MESSAGE2=\"[@jrieken, @kmaetzel, @egamma]. Please review and merge PR to publish @types/vscode.\"\n\n      curl -X POST -H \"Authorization: Bearer $(SLACK_TOKEN)\" \\\n      -H 'Content-type: application/json; charset=utf-8' \\\n      --data '{\"channel\":\"'\"$CHANNEL\"'\", \"link_names\": true, \"text\":\"'\"$MESSAGE\"'\"}' \\\n      https://slack.com/api/chat.postMessage\n\n      curl -X POST -H \"Authorization: Bearer $(SLACK_TOKEN)\" \\\n      -H 'Content-type: application/json; charset=utf-8' \\\n      --data '{\"channel\":\"'\"$CHANNEL\"'\", \"link_names\": true, \"text\":\"'\"$LINK\"'\"}' \\\n      https://slack.com/api/chat.postMessage\n\n      curl -X POST -H \"Authorization: Bearer $(SLACK_TOKEN)\" \\\n      -H 'Content-type: application/json; charset=utf-8' \\\n      --data '{\"channel\":\"'\"$CHANNEL\"'\", \"link_names\": true, \"text\":\"'\"$MESSAGE2\"'\"}' \\\n      https://slack.com/api/chat.postMessage\n\n    displayName: Send message linking to changes on Slack\n"
  },
  {
    "path": "build/azure-pipelines/publish-types/update-types.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst child_process_1 = __importDefault(require(\"child_process\"));\nconst path_1 = __importDefault(require(\"path\"));\nlet tag = '';\ntry {\n    tag = child_process_1.default\n        .execSync('git describe --tags `git rev-list --tags --max-count=1`')\n        .toString()\n        .trim();\n    const dtsUri = `https://raw.githubusercontent.com/microsoft/vscode/${tag}/src/vscode-dts/vscode.d.ts`;\n    const outPath = path_1.default.resolve(process.cwd(), 'DefinitelyTyped/types/vscode/index.d.ts');\n    child_process_1.default.execSync(`curl ${dtsUri} --output ${outPath}`);\n    updateDTSFile(outPath, tag);\n    console.log(`Done updating vscode.d.ts at ${outPath}`);\n}\ncatch (err) {\n    console.error(err);\n    console.error('Failed to update types');\n    process.exit(1);\n}\nfunction updateDTSFile(outPath, tag) {\n    const oldContent = fs_1.default.readFileSync(outPath, 'utf-8');\n    const newContent = getNewFileContent(oldContent, tag);\n    fs_1.default.writeFileSync(outPath, newContent);\n}\nfunction repeat(str, times) {\n    const result = new Array(times);\n    for (let i = 0; i < times; i++) {\n        result[i] = str;\n    }\n    return result.join('');\n}\nfunction convertTabsToSpaces(str) {\n    return str.replace(/\\t/gm, value => repeat('    ', value.length));\n}\nfunction getNewFileContent(content, tag) {\n    const oldheader = [\n        `/*---------------------------------------------------------------------------------------------`,\n        ` *  Copyright (c) Microsoft Corporation. All rights reserved.`,\n        ` *  Licensed under the MIT License. See License.txt in the project root for license information.`,\n        ` *--------------------------------------------------------------------------------------------*/`\n    ].join('\\n');\n    return convertTabsToSpaces(getNewFileHeader(tag) + content.slice(oldheader.length));\n}\nfunction getNewFileHeader(tag) {\n    const [major, minor] = tag.split('.');\n    const shorttag = `${major}.${minor}`;\n    const header = [\n        `// Type definitions for Visual Studio Code ${shorttag}`,\n        `// Project: https://github.com/microsoft/vscode`,\n        `// Definitions by: Visual Studio Code Team, Microsoft <https://github.com/microsoft>`,\n        `// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped`,\n        ``,\n        `/*---------------------------------------------------------------------------------------------`,\n        ` *  Copyright (c) Microsoft Corporation. All rights reserved.`,\n        ` *  Licensed under the MIT License.`,\n        ` *  See https://github.com/microsoft/vscode/blob/main/LICENSE.txt for license information.`,\n        ` *--------------------------------------------------------------------------------------------*/`,\n        ``,\n        `/**`,\n        ` * Type Definition for Visual Studio Code ${shorttag} Extension API`,\n        ` * See https://code.visualstudio.com/api for more information`,\n        ` */`\n    ].join('\\n');\n    return header;\n}\n//# sourceMappingURL=update-types.js.map"
  },
  {
    "path": "build/azure-pipelines/publish-types/update-types.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport cp from 'child_process';\nimport path from 'path';\n\nlet tag = '';\ntry {\n\ttag = cp\n\t\t.execSync('git describe --tags `git rev-list --tags --max-count=1`')\n\t\t.toString()\n\t\t.trim();\n\n\tconst dtsUri = `https://raw.githubusercontent.com/microsoft/vscode/${tag}/src/vscode-dts/vscode.d.ts`;\n\tconst outPath = path.resolve(process.cwd(), 'DefinitelyTyped/types/vscode/index.d.ts');\n\tcp.execSync(`curl ${dtsUri} --output ${outPath}`);\n\n\tupdateDTSFile(outPath, tag);\n\n\tconsole.log(`Done updating vscode.d.ts at ${outPath}`);\n} catch (err) {\n\tconsole.error(err);\n\tconsole.error('Failed to update types');\n\tprocess.exit(1);\n}\n\nfunction updateDTSFile(outPath: string, tag: string) {\n\tconst oldContent = fs.readFileSync(outPath, 'utf-8');\n\tconst newContent = getNewFileContent(oldContent, tag);\n\n\tfs.writeFileSync(outPath, newContent);\n}\n\nfunction repeat(str: string, times: number): string {\n\tconst result = new Array(times);\n\tfor (let i = 0; i < times; i++) {\n\t\tresult[i] = str;\n\t}\n\treturn result.join('');\n}\n\nfunction convertTabsToSpaces(str: string): string {\n\treturn str.replace(/\\t/gm, value => repeat('    ', value.length));\n}\n\nfunction getNewFileContent(content: string, tag: string) {\n\tconst oldheader = [\n\t\t`/*---------------------------------------------------------------------------------------------`,\n\t\t` *  Copyright (c) Microsoft Corporation. All rights reserved.`,\n\t\t` *  Licensed under the MIT License. See License.txt in the project root for license information.`,\n\t\t` *--------------------------------------------------------------------------------------------*/`\n\t].join('\\n');\n\n\treturn convertTabsToSpaces(getNewFileHeader(tag) + content.slice(oldheader.length));\n}\n\nfunction getNewFileHeader(tag: string) {\n\tconst [major, minor] = tag.split('.');\n\tconst shorttag = `${major}.${minor}`;\n\n\tconst header = [\n\t\t`// Type definitions for Visual Studio Code ${shorttag}`,\n\t\t`// Project: https://github.com/microsoft/vscode`,\n\t\t`// Definitions by: Visual Studio Code Team, Microsoft <https://github.com/microsoft>`,\n\t\t`// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped`,\n\t\t``,\n\t\t`/*---------------------------------------------------------------------------------------------`,\n\t\t` *  Copyright (c) Microsoft Corporation. All rights reserved.`,\n\t\t` *  Licensed under the MIT License.`,\n\t\t` *  See https://github.com/microsoft/vscode/blob/main/LICENSE.txt for license information.`,\n\t\t` *--------------------------------------------------------------------------------------------*/`,\n\t\t``,\n\t\t`/**`,\n\t\t` * Type Definition for Visual Studio Code ${shorttag} Extension API`,\n\t\t` * See https://code.visualstudio.com/api for more information`,\n\t\t` */`\n\t].join('\\n');\n\n\treturn header;\n}\n"
  },
  {
    "path": "build/azure-pipelines/upload-cdn.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst vinyl_fs_1 = __importDefault(require(\"vinyl-fs\"));\nconst gulp_filter_1 = __importDefault(require(\"gulp-filter\"));\nconst gulp_gzip_1 = __importDefault(require(\"gulp-gzip\"));\nconst mime_1 = __importDefault(require(\"mime\"));\nconst identity_1 = require(\"@azure/identity\");\nconst azure = require('gulp-azure-storage');\nconst commit = process.env['BUILD_SOURCEVERSION'];\nconst credential = new identity_1.ClientAssertionCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], () => Promise.resolve(process.env['AZURE_ID_TOKEN']));\nmime_1.default.define({\n    'application/typescript': ['ts'],\n    'application/json': ['code-snippets'],\n});\n// From default AFD configuration\nconst MimeTypesToCompress = new Set([\n    'application/eot',\n    'application/font',\n    'application/font-sfnt',\n    'application/javascript',\n    'application/json',\n    'application/opentype',\n    'application/otf',\n    'application/pkcs7-mime',\n    'application/truetype',\n    'application/ttf',\n    'application/typescript',\n    'application/vnd.ms-fontobject',\n    'application/xhtml+xml',\n    'application/xml',\n    'application/xml+rss',\n    'application/x-font-opentype',\n    'application/x-font-truetype',\n    'application/x-font-ttf',\n    'application/x-httpd-cgi',\n    'application/x-javascript',\n    'application/x-mpegurl',\n    'application/x-opentype',\n    'application/x-otf',\n    'application/x-perl',\n    'application/x-ttf',\n    'font/eot',\n    'font/ttf',\n    'font/otf',\n    'font/opentype',\n    'image/svg+xml',\n    'text/css',\n    'text/csv',\n    'text/html',\n    'text/javascript',\n    'text/js',\n    'text/markdown',\n    'text/plain',\n    'text/richtext',\n    'text/tab-separated-values',\n    'text/xml',\n    'text/x-script',\n    'text/x-component',\n    'text/x-java-source'\n]);\nfunction wait(stream) {\n    return new Promise((c, e) => {\n        stream.on('end', () => c());\n        stream.on('error', (err) => e(err));\n    });\n}\nasync function main() {\n    const files = [];\n    const options = (compressed) => ({\n        account: process.env.AZURE_STORAGE_ACCOUNT,\n        credential,\n        container: '$web',\n        prefix: `${process.env.VSCODE_QUALITY}/${commit}/`,\n        contentSettings: {\n            contentEncoding: compressed ? 'gzip' : undefined,\n            cacheControl: 'max-age=31536000, public'\n        }\n    });\n    const all = vinyl_fs_1.default.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })\n        .pipe((0, gulp_filter_1.default)(f => !f.isDirectory()));\n    const compressed = all\n        .pipe((0, gulp_filter_1.default)(f => MimeTypesToCompress.has(mime_1.default.lookup(f.path))))\n        .pipe((0, gulp_gzip_1.default)({ append: false }))\n        .pipe(azure.upload(options(true)));\n    const uncompressed = all\n        .pipe((0, gulp_filter_1.default)(f => !MimeTypesToCompress.has(mime_1.default.lookup(f.path))))\n        .pipe(azure.upload(options(false)));\n    const out = event_stream_1.default.merge(compressed, uncompressed)\n        .pipe(event_stream_1.default.through(function (f) {\n        console.log('Uploaded:', f.relative);\n        files.push(f.relative);\n        this.emit('data', f);\n    }));\n    console.log(`Uploading files to CDN...`); // debug\n    await wait(out);\n    const listing = new vinyl_1.default({\n        path: 'files.txt',\n        contents: Buffer.from(files.join('\\n')),\n        stat: { mode: 0o666 }\n    });\n    const filesOut = event_stream_1.default.readArray([listing])\n        .pipe((0, gulp_gzip_1.default)({ append: false }))\n        .pipe(azure.upload(options(true)));\n    console.log(`Uploading: files.txt (${files.length} files)`); // debug\n    await wait(filesOut);\n}\nmain().catch(err => {\n    console.error(err);\n    process.exit(1);\n});\n//# sourceMappingURL=upload-cdn.js.map"
  },
  {
    "path": "build/azure-pipelines/upload-cdn.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport Vinyl from 'vinyl';\nimport vfs from 'vinyl-fs';\nimport filter from 'gulp-filter';\nimport gzip from 'gulp-gzip';\nimport mime from 'mime';\nimport { ClientAssertionCredential } from '@azure/identity';\nconst azure = require('gulp-azure-storage');\n\nconst commit = process.env['BUILD_SOURCEVERSION'];\nconst credential = new ClientAssertionCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, () => Promise.resolve(process.env['AZURE_ID_TOKEN']!));\n\nmime.define({\n\t'application/typescript': ['ts'],\n\t'application/json': ['code-snippets'],\n});\n\n// From default AFD configuration\nconst MimeTypesToCompress = new Set([\n\t'application/eot',\n\t'application/font',\n\t'application/font-sfnt',\n\t'application/javascript',\n\t'application/json',\n\t'application/opentype',\n\t'application/otf',\n\t'application/pkcs7-mime',\n\t'application/truetype',\n\t'application/ttf',\n\t'application/typescript',\n\t'application/vnd.ms-fontobject',\n\t'application/xhtml+xml',\n\t'application/xml',\n\t'application/xml+rss',\n\t'application/x-font-opentype',\n\t'application/x-font-truetype',\n\t'application/x-font-ttf',\n\t'application/x-httpd-cgi',\n\t'application/x-javascript',\n\t'application/x-mpegurl',\n\t'application/x-opentype',\n\t'application/x-otf',\n\t'application/x-perl',\n\t'application/x-ttf',\n\t'font/eot',\n\t'font/ttf',\n\t'font/otf',\n\t'font/opentype',\n\t'image/svg+xml',\n\t'text/css',\n\t'text/csv',\n\t'text/html',\n\t'text/javascript',\n\t'text/js',\n\t'text/markdown',\n\t'text/plain',\n\t'text/richtext',\n\t'text/tab-separated-values',\n\t'text/xml',\n\t'text/x-script',\n\t'text/x-component',\n\t'text/x-java-source'\n]);\n\nfunction wait(stream: es.ThroughStream): Promise<void> {\n\treturn new Promise<void>((c, e) => {\n\t\tstream.on('end', () => c());\n\t\tstream.on('error', (err: any) => e(err));\n\t});\n}\n\nasync function main(): Promise<void> {\n\tconst files: string[] = [];\n\tconst options = (compressed: boolean) => ({\n\t\taccount: process.env.AZURE_STORAGE_ACCOUNT,\n\t\tcredential,\n\t\tcontainer: '$web',\n\t\tprefix: `${process.env.VSCODE_QUALITY}/${commit}/`,\n\t\tcontentSettings: {\n\t\t\tcontentEncoding: compressed ? 'gzip' : undefined,\n\t\t\tcacheControl: 'max-age=31536000, public'\n\t\t}\n\t});\n\n\tconst all = vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })\n\t\t.pipe(filter(f => !f.isDirectory()));\n\n\tconst compressed = all\n\t\t.pipe(filter(f => MimeTypesToCompress.has(mime.lookup(f.path))))\n\t\t.pipe(gzip({ append: false }))\n\t\t.pipe(azure.upload(options(true)));\n\n\tconst uncompressed = all\n\t\t.pipe(filter(f => !MimeTypesToCompress.has(mime.lookup(f.path))))\n\t\t.pipe(azure.upload(options(false)));\n\n\tconst out = es.merge(compressed, uncompressed)\n\t\t.pipe(es.through(function (f) {\n\t\t\tconsole.log('Uploaded:', f.relative);\n\t\t\tfiles.push(f.relative);\n\t\t\tthis.emit('data', f);\n\t\t}));\n\n\tconsole.log(`Uploading files to CDN...`); // debug\n\tawait wait(out);\n\n\tconst listing = new Vinyl({\n\t\tpath: 'files.txt',\n\t\tcontents: Buffer.from(files.join('\\n')),\n\t\tstat: { mode: 0o666 } as any\n\t});\n\n\tconst filesOut = es.readArray([listing])\n\t\t.pipe(gzip({ append: false }))\n\t\t.pipe(azure.upload(options(true)));\n\n\tconsole.log(`Uploading: files.txt (${files.length} files)`); // debug\n\tawait wait(filesOut);\n}\n\nmain().catch(err => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"
  },
  {
    "path": "build/azure-pipelines/upload-nlsmetadata.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst vinyl_fs_1 = __importDefault(require(\"vinyl-fs\"));\nconst gulp_merge_json_1 = __importDefault(require(\"gulp-merge-json\"));\nconst gulp_gzip_1 = __importDefault(require(\"gulp-gzip\"));\nconst identity_1 = require(\"@azure/identity\");\nconst path = require(\"path\");\nconst fs_1 = require(\"fs\");\nconst azure = require('gulp-azure-storage');\nconst commit = process.env['BUILD_SOURCEVERSION'];\nconst credential = new identity_1.ClientAssertionCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], () => Promise.resolve(process.env['AZURE_ID_TOKEN']));\nfunction main() {\n    return new Promise((c, e) => {\n        const combinedMetadataJson = event_stream_1.default.merge(\n        // vscode: we are not using `out-build/nls.metadata.json` here because\n        // it includes metadata for translators for `keys`. but for our purpose\n        // we want only the `keys` and `messages` as `string`.\n        event_stream_1.default.merge(vinyl_fs_1.default.src('out-build/nls.keys.json', { base: 'out-build' }), vinyl_fs_1.default.src('out-build/nls.messages.json', { base: 'out-build' }))\n            .pipe((0, gulp_merge_json_1.default)({\n            fileName: 'vscode.json',\n            jsonSpace: '',\n            concatArrays: true,\n            edit: (parsedJson, file) => {\n                if (file.base === 'out-build') {\n                    if (file.basename === 'nls.keys.json') {\n                        return { keys: parsedJson };\n                    }\n                    else {\n                        return { messages: parsedJson };\n                    }\n                }\n            }\n        })), \n        // extensions\n        vinyl_fs_1.default.src('.build/extensions/**/nls.metadata.json', { base: '.build/extensions' }), vinyl_fs_1.default.src('.build/extensions/**/nls.metadata.header.json', { base: '.build/extensions' }), vinyl_fs_1.default.src('.build/extensions/**/package.nls.json', { base: '.build/extensions' })).pipe((0, gulp_merge_json_1.default)({\n            fileName: 'combined.nls.metadata.json',\n            jsonSpace: '',\n            concatArrays: true,\n            edit: (parsedJson, file) => {\n                if (file.basename === 'vscode.json') {\n                    return { vscode: parsedJson };\n                }\n                // Handle extensions and follow the same structure as the Core nls file.\n                switch (file.basename) {\n                    case 'package.nls.json':\n                        // put package.nls.json content in Core NlsMetadata format\n                        // language packs use the key \"package\" to specify that\n                        // translations are for the package.json file\n                        parsedJson = {\n                            messages: {\n                                package: Object.values(parsedJson)\n                            },\n                            keys: {\n                                package: Object.keys(parsedJson)\n                            },\n                            bundles: {\n                                main: ['package']\n                            }\n                        };\n                        break;\n                    case 'nls.metadata.header.json':\n                        parsedJson = { header: parsedJson };\n                        break;\n                    case 'nls.metadata.json': {\n                        // put nls.metadata.json content in Core NlsMetadata format\n                        const modules = Object.keys(parsedJson);\n                        const json = {\n                            keys: {},\n                            messages: {},\n                            bundles: {\n                                main: []\n                            }\n                        };\n                        for (const module of modules) {\n                            json.messages[module] = parsedJson[module].messages;\n                            json.keys[module] = parsedJson[module].keys;\n                            json.bundles.main.push(module);\n                        }\n                        parsedJson = json;\n                        break;\n                    }\n                }\n                // Get extension id and use that as the key\n                const folderPath = path.join(file.base, file.relative.split('/')[0]);\n                const manifest = (0, fs_1.readFileSync)(path.join(folderPath, 'package.json'), 'utf-8');\n                const manifestJson = JSON.parse(manifest);\n                const key = manifestJson.publisher + '.' + manifestJson.name;\n                return { [key]: parsedJson };\n            },\n        }));\n        const nlsMessagesJs = vinyl_fs_1.default.src('out-build/nls.messages.js', { base: 'out-build' });\n        event_stream_1.default.merge(combinedMetadataJson, nlsMessagesJs)\n            .pipe((0, gulp_gzip_1.default)({ append: false }))\n            .pipe(vinyl_fs_1.default.dest('./nlsMetadata'))\n            .pipe(event_stream_1.default.through(function (data) {\n            console.log(`Uploading ${data.path}`);\n            // trigger artifact upload\n            console.log(`##vso[artifact.upload containerfolder=nlsmetadata;artifactname=${data.basename}]${data.path}`);\n            this.emit('data', data);\n        }))\n            .pipe(azure.upload({\n            account: process.env.AZURE_STORAGE_ACCOUNT,\n            credential,\n            container: '$web',\n            prefix: `nlsmetadata/${commit}/`,\n            contentSettings: {\n                contentEncoding: 'gzip',\n                cacheControl: 'max-age=31536000, public'\n            }\n        }))\n            .on('end', () => c())\n            .on('error', (err) => e(err));\n    });\n}\nmain().catch(err => {\n    console.error(err);\n    process.exit(1);\n});\n//# sourceMappingURL=upload-nlsmetadata.js.map"
  },
  {
    "path": "build/azure-pipelines/upload-nlsmetadata.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport Vinyl from 'vinyl';\nimport vfs from 'vinyl-fs';\nimport merge from 'gulp-merge-json';\nimport gzip from 'gulp-gzip';\nimport { ClientAssertionCredential } from '@azure/identity';\nimport path = require('path');\nimport { readFileSync } from 'fs';\nconst azure = require('gulp-azure-storage');\n\nconst commit = process.env['BUILD_SOURCEVERSION'];\nconst credential = new ClientAssertionCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, () => Promise.resolve(process.env['AZURE_ID_TOKEN']!));\n\ninterface NlsMetadata {\n\tkeys: { [module: string]: string };\n\tmessages: { [module: string]: string };\n\tbundles: { [bundle: string]: string[] };\n}\n\nfunction main(): Promise<void> {\n\treturn new Promise((c, e) => {\n\t\tconst combinedMetadataJson = es.merge(\n\t\t\t// vscode: we are not using `out-build/nls.metadata.json` here because\n\t\t\t// it includes metadata for translators for `keys`. but for our purpose\n\t\t\t// we want only the `keys` and `messages` as `string`.\n\t\t\tes.merge(\n\t\t\t\tvfs.src('out-build/nls.keys.json', { base: 'out-build' }),\n\t\t\t\tvfs.src('out-build/nls.messages.json', { base: 'out-build' }))\n\t\t\t\t.pipe(merge({\n\t\t\t\t\tfileName: 'vscode.json',\n\t\t\t\t\tjsonSpace: '',\n\t\t\t\t\tconcatArrays: true,\n\t\t\t\t\tedit: (parsedJson, file) => {\n\t\t\t\t\t\tif (file.base === 'out-build') {\n\t\t\t\t\t\t\tif (file.basename === 'nls.keys.json') {\n\t\t\t\t\t\t\t\treturn { keys: parsedJson };\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn { messages: parsedJson };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})),\n\n\t\t\t// extensions\n\t\t\tvfs.src('.build/extensions/**/nls.metadata.json', { base: '.build/extensions' }),\n\t\t\tvfs.src('.build/extensions/**/nls.metadata.header.json', { base: '.build/extensions' }),\n\t\t\tvfs.src('.build/extensions/**/package.nls.json', { base: '.build/extensions' })\n\t\t).pipe(merge({\n\t\t\tfileName: 'combined.nls.metadata.json',\n\t\t\tjsonSpace: '',\n\t\t\tconcatArrays: true,\n\t\t\tedit: (parsedJson, file) => {\n\t\t\t\tif (file.basename === 'vscode.json') {\n\t\t\t\t\treturn { vscode: parsedJson };\n\t\t\t\t}\n\n\t\t\t\t// Handle extensions and follow the same structure as the Core nls file.\n\t\t\t\tswitch (file.basename) {\n\t\t\t\t\tcase 'package.nls.json':\n\t\t\t\t\t\t// put package.nls.json content in Core NlsMetadata format\n\t\t\t\t\t\t// language packs use the key \"package\" to specify that\n\t\t\t\t\t\t// translations are for the package.json file\n\t\t\t\t\t\tparsedJson = {\n\t\t\t\t\t\t\tmessages: {\n\t\t\t\t\t\t\t\tpackage: Object.values(parsedJson)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tkeys: {\n\t\t\t\t\t\t\t\tpackage: Object.keys(parsedJson)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbundles: {\n\t\t\t\t\t\t\t\tmain: ['package']\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'nls.metadata.header.json':\n\t\t\t\t\t\tparsedJson = { header: parsedJson };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'nls.metadata.json': {\n\t\t\t\t\t\t// put nls.metadata.json content in Core NlsMetadata format\n\t\t\t\t\t\tconst modules = Object.keys(parsedJson);\n\n\t\t\t\t\t\tconst json: NlsMetadata = {\n\t\t\t\t\t\t\tkeys: {},\n\t\t\t\t\t\t\tmessages: {},\n\t\t\t\t\t\t\tbundles: {\n\t\t\t\t\t\t\t\tmain: []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const module of modules) {\n\t\t\t\t\t\t\tjson.messages[module] = parsedJson[module].messages;\n\t\t\t\t\t\t\tjson.keys[module] = parsedJson[module].keys;\n\t\t\t\t\t\t\tjson.bundles.main.push(module);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparsedJson = json;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Get extension id and use that as the key\n\t\t\t\tconst folderPath = path.join(file.base, file.relative.split('/')[0]);\n\t\t\t\tconst manifest = readFileSync(path.join(folderPath, 'package.json'), 'utf-8');\n\t\t\t\tconst manifestJson = JSON.parse(manifest);\n\t\t\t\tconst key = manifestJson.publisher + '.' + manifestJson.name;\n\t\t\t\treturn { [key]: parsedJson };\n\t\t\t},\n\t\t}));\n\n\t\tconst nlsMessagesJs = vfs.src('out-build/nls.messages.js', { base: 'out-build' });\n\n\t\tes.merge(combinedMetadataJson, nlsMessagesJs)\n\t\t\t.pipe(gzip({ append: false }))\n\t\t\t.pipe(vfs.dest('./nlsMetadata'))\n\t\t\t.pipe(es.through(function (data: Vinyl) {\n\t\t\t\tconsole.log(`Uploading ${data.path}`);\n\t\t\t\t// trigger artifact upload\n\t\t\t\tconsole.log(`##vso[artifact.upload containerfolder=nlsmetadata;artifactname=${data.basename}]${data.path}`);\n\t\t\t\tthis.emit('data', data);\n\t\t\t}))\n\t\t\t.pipe(azure.upload({\n\t\t\t\taccount: process.env.AZURE_STORAGE_ACCOUNT,\n\t\t\t\tcredential,\n\t\t\t\tcontainer: '$web',\n\t\t\t\tprefix: `nlsmetadata/${commit}/`,\n\t\t\t\tcontentSettings: {\n\t\t\t\t\tcontentEncoding: 'gzip',\n\t\t\t\t\tcacheControl: 'max-age=31536000, public'\n\t\t\t\t}\n\t\t\t}))\n\t\t\t.on('end', () => c())\n\t\t\t.on('error', (err: any) => e(err));\n\t});\n}\n\nmain().catch(err => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"
  },
  {
    "path": "build/azure-pipelines/upload-sourcemaps.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path_1 = __importDefault(require(\"path\"));\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst vinyl_fs_1 = __importDefault(require(\"vinyl-fs\"));\nconst util = __importStar(require(\"../lib/util\"));\nconst dependencies_1 = require(\"../lib/dependencies\");\nconst identity_1 = require(\"@azure/identity\");\nconst azure = require('gulp-azure-storage');\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst commit = process.env['BUILD_SOURCEVERSION'];\nconst credential = new identity_1.ClientAssertionCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], () => Promise.resolve(process.env['AZURE_ID_TOKEN']));\n// optionally allow to pass in explicit base/maps to upload\nconst [, , base, maps] = process.argv;\nfunction src(base, maps = `${base}/**/*.map`) {\n    return vinyl_fs_1.default.src(maps, { base })\n        .pipe(event_stream_1.default.mapSync((f) => {\n        f.path = `${f.base}/core/${f.relative}`;\n        return f;\n    }));\n}\nfunction main() {\n    const sources = [];\n    // vscode client maps (default)\n    if (!base) {\n        const vs = src('out-vscode-min'); // client source-maps only\n        sources.push(vs);\n        const productionDependencies = (0, dependencies_1.getProductionDependencies)(root);\n        const productionDependenciesSrc = productionDependencies.map((d) => path_1.default.relative(root, d)).map((d) => `./${d}/**/*.map`);\n        const nodeModules = vinyl_fs_1.default.src(productionDependenciesSrc, { base: '.' })\n            .pipe(util.cleanNodeModules(path_1.default.join(root, 'build', '.moduleignore')))\n            .pipe(util.cleanNodeModules(path_1.default.join(root, 'build', `.moduleignore.${process.platform}`)));\n        sources.push(nodeModules);\n        const extensionsOut = vinyl_fs_1.default.src(['.build/extensions/**/*.js.map', '!**/node_modules/**'], { base: '.build' });\n        sources.push(extensionsOut);\n    }\n    // specific client base/maps\n    else {\n        sources.push(src(base, maps));\n    }\n    return new Promise((c, e) => {\n        event_stream_1.default.merge(...sources)\n            .pipe(event_stream_1.default.through(function (data) {\n            console.log('Uploading Sourcemap', data.relative); // debug\n            this.emit('data', data);\n        }))\n            .pipe(azure.upload({\n            account: process.env.AZURE_STORAGE_ACCOUNT,\n            credential,\n            container: '$web',\n            prefix: `sourcemaps/${commit}/`\n        }))\n            .on('end', () => c())\n            .on('error', (err) => e(err));\n    });\n}\nmain().catch(err => {\n    console.error(err);\n    process.exit(1);\n});\n//# sourceMappingURL=upload-sourcemaps.js.map"
  },
  {
    "path": "build/azure-pipelines/upload-sourcemaps.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport path from 'path';\nimport es from 'event-stream';\nimport Vinyl from 'vinyl';\nimport vfs from 'vinyl-fs';\nimport * as util from '../lib/util';\nimport { getProductionDependencies } from '../lib/dependencies';\nimport { ClientAssertionCredential } from '@azure/identity';\nconst azure = require('gulp-azure-storage');\n\nconst root = path.dirname(path.dirname(__dirname));\nconst commit = process.env['BUILD_SOURCEVERSION'];\nconst credential = new ClientAssertionCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, () => Promise.resolve(process.env['AZURE_ID_TOKEN']!));\n\n// optionally allow to pass in explicit base/maps to upload\nconst [, , base, maps] = process.argv;\n\nfunction src(base: string, maps = `${base}/**/*.map`) {\n\treturn vfs.src(maps, { base })\n\t\t.pipe(es.mapSync((f: Vinyl) => {\n\t\t\tf.path = `${f.base}/core/${f.relative}`;\n\t\t\treturn f;\n\t\t}));\n}\n\nfunction main(): Promise<void> {\n\tconst sources: any[] = [];\n\n\t// vscode client maps (default)\n\tif (!base) {\n\t\tconst vs = src('out-vscode-min'); // client source-maps only\n\t\tsources.push(vs);\n\n\t\tconst productionDependencies = getProductionDependencies(root);\n\t\tconst productionDependenciesSrc = productionDependencies.map((d: string) => path.relative(root, d)).map((d: string) => `./${d}/**/*.map`);\n\t\tconst nodeModules = vfs.src(productionDependenciesSrc, { base: '.' })\n\t\t\t.pipe(util.cleanNodeModules(path.join(root, 'build', '.moduleignore')))\n\t\t\t.pipe(util.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`)));\n\t\tsources.push(nodeModules);\n\n\t\tconst extensionsOut = vfs.src(['.build/extensions/**/*.js.map', '!**/node_modules/**'], { base: '.build' });\n\t\tsources.push(extensionsOut);\n\t}\n\n\t// specific client base/maps\n\telse {\n\t\tsources.push(src(base, maps));\n\t}\n\n\treturn new Promise((c, e) => {\n\t\tes.merge(...sources)\n\t\t\t.pipe(es.through(function (data: Vinyl) {\n\t\t\t\tconsole.log('Uploading Sourcemap', data.relative); // debug\n\t\t\t\tthis.emit('data', data);\n\t\t\t}))\n\t\t\t.pipe(azure.upload({\n\t\t\t\taccount: process.env.AZURE_STORAGE_ACCOUNT,\n\t\t\t\tcredential,\n\t\t\t\tcontainer: '$web',\n\t\t\t\tprefix: `sourcemaps/${commit}/`\n\t\t\t}))\n\t\t\t.on('end', () => c())\n\t\t\t.on('error', (err: any) => e(err));\n\t});\n}\n\nmain().catch(err => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n\n"
  },
  {
    "path": "build/azure-pipelines/web/product-build-web.yml",
    "content": "steps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - template: ../distro/download-distro.yml@self\n\n  - task: AzureKeyVault@2\n    displayName: \"Azure Key Vault: Get Secrets\"\n    inputs:\n      azureSubscription: vscode\n      KeyVaultName: vscode-build-secrets\n      SecretsFilter: \"github-distro-mixin-password\"\n\n  - task: DownloadPipelineArtifact@2\n    inputs:\n      artifact: Compilation\n      path: $(Build.ArtifactStagingDirectory)\n    displayName: Download compilation output\n\n  - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz\n    displayName: Extract compilation output\n\n  - script: node build/setup-npm-registry.js $NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js web > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - script: tar -xzf .build/node_modules_cache/cache.tgz\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - script: |\n      set -e\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      npm config set registry \"$NPM_REGISTRY\"\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - script: |\n      set -e\n      ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update\n      ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y libkrb5-dev\n    displayName: Setup system services\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: |\n      set -e\n\n      for i in {1..5}; do # try 5 times\n        npm ci && break\n        if [ $i -eq 5 ]; then\n          echo \"Npm install failed too many times\" >&2\n          exit 1\n        fi\n        echo \"Npm install failed $i, trying again...\"\n      done\n    env:\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - script: node build/azure-pipelines/distro/mixin-npm\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Mixin distro node modules\n\n  - script: |\n      set -e\n      node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt\n      mkdir -p .build/node_modules_cache\n      tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n\n  - script: node build/azure-pipelines/distro/mixin-quality\n    displayName: Mixin distro quality\n\n  - template: ../common/install-builtin-extensions.yml@self\n\n  - script: |\n      set -e\n      npm run gulp vscode-web-min-ci\n      ARCHIVE_PATH=\".build/web/vscode-web.tar.gz\"\n      mkdir -p $(dirname $ARCHIVE_PATH)\n      tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-web\n      echo \"##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH\"\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Build\n\n  - task: AzureCLI@2\n    displayName: Fetch secrets from Azure\n    inputs:\n      azureSubscription: vscode\n      scriptType: pscore\n      scriptLocation: inlineScript\n      addSpnToEnvironment: true\n      inlineScript: |\n        Write-Host \"##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId\"\n        Write-Host \"##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId\"\n        Write-Host \"##vso[task.setvariable variable=AZURE_ID_TOKEN;issecret=true]$env:idToken\"\n\n  - script: |\n      set -e\n      AZURE_STORAGE_ACCOUNT=\"vscodeweb\" \\\n      AZURE_TENANT_ID=\"$(AZURE_TENANT_ID)\" \\\n      AZURE_CLIENT_ID=\"$(AZURE_CLIENT_ID)\" \\\n      AZURE_ID_TOKEN=\"$(AZURE_ID_TOKEN)\" \\\n        node build/azure-pipelines/upload-cdn\n    displayName: Upload to CDN\n\n  - script: |\n      set -e\n      AZURE_STORAGE_ACCOUNT=\"vscodeweb\" \\\n      AZURE_TENANT_ID=\"$(AZURE_TENANT_ID)\" \\\n      AZURE_CLIENT_ID=\"$(AZURE_CLIENT_ID)\" \\\n      AZURE_ID_TOKEN=\"$(AZURE_ID_TOKEN)\" \\\n        node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.main.js.map\n    displayName: Upload sourcemaps (Web Main)\n\n  - script: |\n      set -e\n      AZURE_STORAGE_ACCOUNT=\"vscodeweb\" \\\n      AZURE_TENANT_ID=\"$(AZURE_TENANT_ID)\" \\\n      AZURE_CLIENT_ID=\"$(AZURE_CLIENT_ID)\" \\\n      AZURE_ID_TOKEN=\"$(AZURE_ID_TOKEN)\" \\\n        node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.main.internal.js.map\n    displayName: Upload sourcemaps (Web Internal)\n\n  - script: |\n      set -e\n      AZURE_STORAGE_ACCOUNT=\"vscodeweb\" \\\n      AZURE_TENANT_ID=\"$(AZURE_TENANT_ID)\" \\\n      AZURE_CLIENT_ID=\"$(AZURE_CLIENT_ID)\" \\\n      AZURE_ID_TOKEN=\"$(AZURE_ID_TOKEN)\" \\\n        node build/azure-pipelines/upload-nlsmetadata\n    displayName: Upload NLS Metadata\n\n  - script: echo \"##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_\"\n    condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues'))\n    displayName: Generate artifact prefix\n\n  - task: 1ES.PublishPipelineArtifact@1\n    inputs:\n      targetPath: $(WEB_PATH)\n      artifactName: $(ARTIFACT_PREFIX)vscode_web_linux_standalone_archive-unsigned\n      sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-web\n      sbomPackageName: \"VS Code Web\"\n      sbomPackageVersion: $(Build.SourceVersion)\n    condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], ''))\n    displayName: Publish web archive\n"
  },
  {
    "path": "build/azure-pipelines/win32/cli-build-win32.yml",
    "content": "parameters:\n  - name: VSCODE_BUILD_WIN32\n    type: boolean\n    default: false\n  - name: VSCODE_BUILD_WIN32_ARM64\n    type: boolean\n    default: false\n  - name: VSCODE_CHECK_ONLY\n    type: boolean\n    default: false\n  - name: VSCODE_QUALITY\n    type: string\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ../cli/cli-apply-patches.yml@self\n\n  - task: Npm@1\n    displayName: Download openssl prebuilt\n    inputs:\n      command: custom\n      customCommand: pack @vscode-internal/openssl-prebuilt@0.0.11\n      customRegistry: useFeed\n      customFeed: \"Monaco/openssl-prebuilt\"\n      workingDir: $(Build.ArtifactStagingDirectory)\n\n  - powershell: |\n      mkdir $(Build.ArtifactStagingDirectory)/openssl\n      tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.11.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl\n    displayName: Extract openssl prebuilt\n\n  - template: ../cli/install-rust-win32.yml@self\n    parameters:\n      targets:\n        - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:\n          - x86_64-pc-windows-msvc\n        - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}:\n          - aarch64-pc-windows-msvc\n\n  - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_TARGET: x86_64-pc-windows-msvc\n        VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_x64_cli\n        VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }}\n        VSCODE_CLI_ENV:\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-windows-static/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-windows-static/include\n          RUSTFLAGS: \"-Ctarget-feature=+crt-static -Clink-args=/guard:cf -Clink-args=/CETCOMPAT\"\n          CFLAGS: \"/guard:cf /Qspectre\"\n\n  - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}:\n    - template: ../cli/cli-compile.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_CLI_TARGET: aarch64-pc-windows-msvc\n        VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_arm64_cli\n        VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }}\n        VSCODE_CLI_ENV:\n          OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-windows-static/lib\n          OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-windows-static/include\n          RUSTFLAGS: \"-C target-feature=+crt-static -Clink-args=/guard:cf -Clink-args=/CETCOMPAT:NO\"\n          CFLAGS: \"/guard:cf /Qspectre\"\n\n  - ${{ if not(parameters.VSCODE_CHECK_ONLY) }}:\n    - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_win32_arm64_cli.zip\n          artifactName: unsigned_vscode_cli_win32_arm64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code Windows arm64 CLI (unsigned)\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish unsigned_vscode_cli_win32_arm64_cli artifact\n\n    - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_win32_x64_cli.zip\n          artifactName: unsigned_vscode_cli_win32_x64_cli\n          sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli\n          sbomPackageName: \"VS Code Windows x64 CLI (unsigned)\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        displayName: Publish unsigned_vscode_cli_win32_x64_cli artifact\n"
  },
  {
    "path": "build/azure-pipelines/win32/exec.ps1",
    "content": "# Taken from psake https://github.com/psake/psake\n\n<#\n.SYNOPSIS\n  This is a helper function that runs a scriptblock and checks the PS variable $lastexitcode\n  to see if an error occcured. If an error is detected then an exception is thrown.\n  This function allows you to run command-line programs without having to\n  explicitly check the $lastexitcode variable.\n\n.EXAMPLE\n  exec { svn info $repository_trunk } \"Error executing SVN. Please verify SVN command-line client is installed\"\n#>\nfunction Exec\n{\n\t[CmdletBinding()]\n\tparam(\n\t\t[Parameter(Position=0,Mandatory=1)][scriptblock]$cmd,\n\t\t[Parameter(Position=1,Mandatory=0)][string]$errorMessage = ($msgs.error_bad_command -f $cmd)\n\t)\n\t& $cmd\n\tif ($lastexitcode -ne 0) {\n\t\tthrow (\"Exec: \" + $errorMessage)\n\t}\n}"
  },
  {
    "path": "build/azure-pipelines/win32/import-esrp-auth-cert.ps1",
    "content": "param ($CertBase64)\n$ErrorActionPreference = \"Stop\"\n\n$CertBytes = [System.Convert]::FromBase64String($CertBase64)\n$CertCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection\n$CertCollection.Import($CertBytes, $null, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable -bxor [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::PersistKeySet)\n\n$CertStore = New-Object System.Security.Cryptography.X509Certificates.X509Store(\"My\",\"LocalMachine\")\n$CertStore.Open(\"ReadWrite\")\n$CertStore.AddRange($CertCollection)\n$CertStore.Close()\n\n$ESRPAuthCertificateSubjectName = $CertCollection[0].Subject\nWrite-Output (\"##vso[task.setvariable variable=ESRPAuthCertificateSubjectName;]$ESRPAuthCertificateSubjectName\")\n"
  },
  {
    "path": "build/azure-pipelines/win32/listprocesses.bat",
    "content": "echo \"------------------------------------\"\ntasklist /V\necho \"------------------------------------\"\n"
  },
  {
    "path": "build/azure-pipelines/win32/product-build-win32-cli-sign.yml",
    "content": "parameters:\n  - name: VSCODE_BUILD_WIN32\n    type: boolean\n  - name: VSCODE_BUILD_WIN32_ARM64\n    type: boolean\n  - name: VSCODE_QUALITY\n    type: string\n\nsteps:\n  - task: NodeTool@0\n    displayName: \"Use Node.js\"\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - task: AzureKeyVault@2\n      displayName: \"Azure Key Vault: Get Secrets\"\n      inputs:\n        azureSubscription: vscode\n        KeyVaultName: vscode-build-secrets\n        SecretsFilter: \"github-distro-mixin-password\"\n\n  - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY build\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      exec { npm config set registry \"$env:NPM_REGISTRY\" }\n      $NpmrcPath = (npm config get userconfig)\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath\"\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - powershell: |\n      . azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      exec { npm ci }\n    workingDirectory: build\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    retryCountOnTaskFailure: 5\n    displayName: Install build dependencies\n\n  - template: ../cli/cli-win32-sign.yml@self\n    parameters:\n      VSCODE_CLI_ARTIFACTS:\n        - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:\n          - unsigned_vscode_cli_win32_x64_cli\n        - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}:\n          - unsigned_vscode_cli_win32_arm64_cli\n"
  },
  {
    "path": "build/azure-pipelines/win32/product-build-win32-test.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_ARCH\n    type: string\n  - name: VSCODE_RUN_UNIT_TESTS\n    type: boolean\n  - name: VSCODE_RUN_INTEGRATION_TESTS\n    type: boolean\n  - name: VSCODE_RUN_SMOKE_TESTS\n    type: boolean\n  - name: PUBLISH_TASK_NAME\n    type: string\n    default: PublishPipelineArtifact@0\n\nsteps:\n  - powershell: npm exec -- npm-run-all -lp \"electron $(VSCODE_ARCH)\" \"playwright-install\"\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Download Electron and Playwright\n    retryCountOnTaskFailure: 3\n\n  - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - powershell: .\\scripts\\test.bat --tfs \"Unit Tests\"\n        displayName: Run unit tests (Electron)\n        timeoutInMinutes: 15\n      - powershell: npm run test-node\n        displayName: Run unit tests (node.js)\n        timeoutInMinutes: 15\n      - powershell: node test/unit/browser/index.js --browser chromium --tfs \"Browser Unit Tests\"\n        displayName: Run unit tests (Browser, Chromium)\n        timeoutInMinutes: 20\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - powershell: .\\scripts\\test.bat --build --tfs \"Unit Tests\"\n        displayName: Run unit tests (Electron)\n        timeoutInMinutes: 15\n      - powershell: npm run test-node -- --build\n        displayName: Run unit tests (node.js)\n        timeoutInMinutes: 15\n      - powershell: npm run test-browser-no-install -- --build --browser chromium --tfs \"Browser Unit Tests\"\n        displayName: Run unit tests (Browser, Chromium)\n        timeoutInMinutes: 20\n\n  - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:\n    - powershell: |\n        . build/azure-pipelines/win32/exec.ps1\n        $ErrorActionPreference = \"Stop\"\n        exec { npm run gulp `\n          compile-extension:configuration-editing `\n          compile-extension:css-language-features-server `\n          compile-extension:emmet `\n          compile-extension:git `\n          compile-extension:github-authentication `\n          compile-extension:html-language-features-server `\n          compile-extension:ipynb `\n          compile-extension:notebook-renderers `\n          compile-extension:json-language-features-server `\n          compile-extension:markdown-language-features `\n          compile-extension-media `\n          compile-extension:microsoft-authentication `\n          compile-extension:typescript-language-features `\n          compile-extension:vscode-api-tests `\n          compile-extension:vscode-colorize-tests `\n          compile-extension:vscode-colorize-perf-tests `\n          compile-extension:vscode-test-resolver `\n        }\n      displayName: Build integration tests\n\n    - powershell: .\\build\\azure-pipelines\\win32\\listprocesses.bat\n      displayName: Diagnostics before integration test runs\n      continueOnError: true\n      condition: succeededOrFailed()\n\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - powershell: .\\scripts\\test-integration.bat --tfs \"Integration Tests\"\n        displayName: Run integration tests (Electron)\n        timeoutInMinutes: 20\n\n      - powershell: .\\scripts\\test-web-integration.bat --browser chromium\n        displayName: Run integration tests (Browser, Chromium)\n        timeoutInMinutes: 20\n\n      - powershell: .\\scripts\\test-remote-integration.bat\n        displayName: Run integration tests (Remote)\n        timeoutInMinutes: 20\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - powershell: |\n          # Figure out the full absolute path of the product we just built\n          # including the remote server and configure the integration tests\n          # to run with these builds instead of running out of sources.\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $AppRoot = \"$(agent.builddirectory)\\VSCode-win32-$(VSCODE_ARCH)\"\n          $AppProductJson = Get-Content -Raw -Path \"$AppRoot\\resources\\app\\product.json\" | ConvertFrom-Json\n          $AppNameShort = $AppProductJson.nameShort\n          $env:INTEGRATION_TEST_ELECTRON_PATH = \"$AppRoot\\$AppNameShort.exe\"\n          $env:VSCODE_REMOTE_SERVER_PATH = \"$(agent.builddirectory)\\vscode-server-win32-$(VSCODE_ARCH)\"\n          exec { .\\scripts\\test-integration.bat --build --tfs \"Integration Tests\" }\n        displayName: Run integration tests (Electron)\n        timeoutInMinutes: 20\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $env:VSCODE_REMOTE_SERVER_PATH = \"$(agent.builddirectory)\\vscode-server-win32-$(VSCODE_ARCH)-web\"\n          exec { .\\scripts\\test-web-integration.bat --browser firefox }\n        displayName: Run integration tests (Browser, Firefox)\n        timeoutInMinutes: 20\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $AppRoot = \"$(agent.builddirectory)\\VSCode-win32-$(VSCODE_ARCH)\"\n          $AppProductJson = Get-Content -Raw -Path \"$AppRoot\\resources\\app\\product.json\" | ConvertFrom-Json\n          $AppNameShort = $AppProductJson.nameShort\n          $env:INTEGRATION_TEST_ELECTRON_PATH = \"$AppRoot\\$AppNameShort.exe\"\n          $env:VSCODE_REMOTE_SERVER_PATH = \"$(agent.builddirectory)\\vscode-server-win32-$(VSCODE_ARCH)\"\n          exec { .\\scripts\\test-remote-integration.bat }\n        displayName: Run integration tests (Remote)\n        timeoutInMinutes: 20\n\n      - powershell: .\\build\\azure-pipelines\\win32\\listprocesses.bat\n        displayName: Diagnostics after integration test runs\n        continueOnError: true\n        condition: succeededOrFailed()\n\n  - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:\n    - powershell: .\\build\\azure-pipelines\\win32\\listprocesses.bat\n      displayName: Diagnostics before smoke test run\n      continueOnError: true\n      condition: succeededOrFailed()\n\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n      - powershell: npm run compile\n        workingDirectory: test/smoke\n        displayName: Compile smoke tests\n\n      - powershell: npm run gulp compile-extension-media\n        displayName: Build extensions for smoke tests\n\n      - powershell: npm run smoketest-no-compile -- --tracing\n        displayName: Run smoke tests (Electron)\n        timeoutInMinutes: 20\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - powershell: npm run smoketest-no-compile -- --tracing --build \"$(agent.builddirectory)\\VSCode-win32-$(VSCODE_ARCH)\"\n        displayName: Run smoke tests (Electron)\n        timeoutInMinutes: 20\n\n      - powershell: npm run smoketest-no-compile -- --web --tracing --headless\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\\vscode-server-win32-$(VSCODE_ARCH)-web\n        displayName: Run smoke tests (Browser, Chromium)\n        timeoutInMinutes: 20\n\n      - powershell: npm run gulp compile-extension:vscode-test-resolver\n        displayName: Compile test resolver extension\n        timeoutInMinutes: 20\n\n      - powershell: npm run smoketest-no-compile -- --tracing --remote --build \"$(agent.builddirectory)\\VSCode-win32-$(VSCODE_ARCH)\"\n        env:\n          VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\\vscode-server-win32-$(VSCODE_ARCH)\n        displayName: Run smoke tests (Remote)\n        timeoutInMinutes: 20\n\n    - powershell: .\\build\\azure-pipelines\\win32\\listprocesses.bat\n      displayName: Diagnostics after smoke test run\n      continueOnError: true\n      condition: succeededOrFailed()\n\n  - ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n    - task: ${{ parameters.PUBLISH_TASK_NAME }}\n      inputs:\n        targetPath: .build\\crashes\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: crash-dump-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: crash-dump-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: crash-dump-windows-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Crash Reports\"\n      continueOnError: true\n      condition: failed()\n\n    # In order to properly symbolify above crash reports\n    # (if any), we need the compiled native modules too\n    - task: ${{ parameters.PUBLISH_TASK_NAME }}\n      inputs:\n        targetPath: node_modules\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: node-modules-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: node-modules-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: node-modules-windows-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Node Modules\"\n      continueOnError: true\n      condition: failed()\n\n    - task: ${{ parameters.PUBLISH_TASK_NAME }}\n      inputs:\n        targetPath: .build\\logs\n        ${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:\n          artifactName: logs-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt)\n        ${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n          artifactName: logs-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)\n        ${{ else }}:\n          artifactName: logs-windows-$(VSCODE_ARCH)-$(System.JobAttempt)\n        sbomEnabled: false\n      displayName: \"Publish Log Files\"\n      continueOnError: true\n      condition: succeededOrFailed()\n\n  - task: PublishTestResults@2\n    displayName: Publish Tests Results\n    inputs:\n      testResultsFiles: \"*-results.xml\"\n      searchFolder: \"$(Build.ArtifactStagingDirectory)/test-results\"\n    condition: succeededOrFailed()\n"
  },
  {
    "path": "build/azure-pipelines/win32/product-build-win32.yml",
    "content": "parameters:\n  - name: VSCODE_QUALITY\n    type: string\n  - name: VSCODE_ARCH\n    type: string\n  - name: VSCODE_CIBUILD\n    type: boolean\n  - name: VSCODE_RUN_UNIT_TESTS\n    type: boolean\n  - name: VSCODE_RUN_INTEGRATION_TESTS\n    type: boolean\n  - name: VSCODE_RUN_SMOKE_TESTS\n    type: boolean\n\nsteps:\n  - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n    - checkout: self\n      fetchDepth: 1\n      retryCountOnTaskFailure: 3\n\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - task: UsePythonVersion@0\n    inputs:\n      versionSpec: \"3.x\"\n      addToPath: true\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - template: ../distro/download-distro.yml@self\n\n    - task: AzureKeyVault@2\n      displayName: \"Azure Key Vault: Get Secrets\"\n      inputs:\n        azureSubscription: vscode\n        KeyVaultName: vscode-build-secrets\n        SecretsFilter: \"github-distro-mixin-password\"\n\n    - task: DownloadPipelineArtifact@2\n      inputs:\n        artifact: Compilation\n        path: $(Build.ArtifactStagingDirectory)\n      displayName: Download compilation output\n\n    - task: ExtractFiles@1\n      displayName: Extract compilation output\n      inputs:\n        archiveFilePatterns: \"$(Build.ArtifactStagingDirectory)/compilation.tar.gz\"\n        cleanDestinationFolder: false\n\n  - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - pwsh: |\n      mkdir .build -ea 0\n      node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/packagelockhash\n    displayName: Prepare node_modules cache key\n\n  - task: Cache@2\n    inputs:\n      key: '\"node_modules\" | .build/packagelockhash'\n      path: .build/node_modules_cache\n      cacheHitVar: NODE_MODULES_RESTORED\n    displayName: Restore node_modules cache\n\n  - powershell: 7z.exe x .build/node_modules_cache/cache.7z -aoa\n    condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Extract node_modules cache\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      exec { npm config set registry \"$env:NPM_REGISTRY\" }\n      $NpmrcPath = (npm config get userconfig)\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath\"\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      exec { npm ci }\n    env:\n      npm_config_arch: $(VSCODE_ARCH)\n      npm_config_foreground_scripts: \"true\"\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    retryCountOnTaskFailure: 5\n    displayName: Install dependencies\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - powershell: node build/azure-pipelines/distro/mixin-npm\n      condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n      displayName: Mixin distro node modules\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      exec { node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt }\n      exec { mkdir -Force .build/node_modules_cache }\n      exec { 7z.exe a .build/node_modules_cache/cache.7z -mx3 `@.build/node_modules_list.txt }\n    condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))\n    displayName: Create node_modules archive\n\n  - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n    - powershell: node build/azure-pipelines/distro/mixin-quality\n      displayName: Mixin distro quality\n\n  - template: ../common/install-builtin-extensions.yml@self\n\n  - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:\n    - powershell: node build\\lib\\policies win32\n      displayName: Generate Group Policy definitions\n      retryCountOnTaskFailure: 3\n\n  - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:\n    - powershell: npm run gulp \"transpile-client-esbuild\" \"transpile-extensions\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Transpile client and extensions\n\n  - ${{ else }}:\n    - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), eq(parameters.VSCODE_QUALITY, 'insider')) }}:\n      - powershell: node build/win32/explorer-appx-fetcher .build/win32/appx\n        displayName: Download Explorer Sparse Package\n\n    - powershell: |\n        . build/azure-pipelines/win32/exec.ps1\n        $ErrorActionPreference = \"Stop\"\n        exec { npm run gulp \"vscode-win32-$(VSCODE_ARCH)-min-ci\" }\n        exec { npm run gulp \"vscode-win32-$(VSCODE_ARCH)-inno-updater\" }\n        echo \"##vso[task.setvariable variable=BUILT_CLIENT]true\"\n        echo \"##vso[task.setvariable variable=CodeSigningFolderPath]$(Agent.BuildDirectory)/VSCode-win32-$(VSCODE_ARCH)\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build client\n\n    - powershell: |\n        . build/azure-pipelines/win32/exec.ps1\n        $ErrorActionPreference = \"Stop\"\n        exec { npm run gulp \"vscode-reh-win32-$(VSCODE_ARCH)-min-ci\" }\n        mv ..\\vscode-reh-win32-$(VSCODE_ARCH) ..\\vscode-server-win32-$(VSCODE_ARCH) # TODO@joaomoreno\n        echo \"##vso[task.setvariable variable=BUILT_SERVER]true\"\n        echo \"##vso[task.setvariable variable=CodeSigningFolderPath]$(CodeSigningFolderPath),$(Agent.BuildDirectory)/vscode-server-win32-$(VSCODE_ARCH)\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build server\n\n    - powershell: |\n        . build/azure-pipelines/win32/exec.ps1\n        $ErrorActionPreference = \"Stop\"\n        exec { npm run gulp \"vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci\" }\n        mv ..\\vscode-reh-web-win32-$(VSCODE_ARCH) ..\\vscode-server-win32-$(VSCODE_ARCH)-web # TODO@joaomoreno\n        echo \"##vso[task.setvariable variable=BUILT_WEB]true\"\n      env:\n        GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n      displayName: Build server (web)\n\n  - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:\n    - template: product-build-win32-test.yml@self\n      parameters:\n        VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n        VSCODE_ARCH: ${{ parameters.VSCODE_ARCH }}\n        VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}\n        VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}\n        VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}\n        ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n          PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1\n\n  - ${{ if ne(parameters.VSCODE_CIBUILD, true) }}:\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - task: DownloadPipelineArtifact@2\n        inputs:\n          artifact: unsigned_vscode_cli_win32_$(VSCODE_ARCH)_cli\n          patterns: \"**\"\n          path: $(Build.ArtifactStagingDirectory)/cli\n        displayName: Download VS Code CLI\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $ArtifactName = (gci -Path \"$(Build.ArtifactStagingDirectory)/cli\" | Select-Object -last 1).FullName\n          Expand-Archive -Path $ArtifactName -DestinationPath \"$(Build.ArtifactStagingDirectory)/cli\"\n          $AppProductJson = Get-Content -Raw -Path \"$(Agent.BuildDirectory)\\VSCode-win32-$(VSCODE_ARCH)\\resources\\app\\product.json\" | ConvertFrom-Json\n          $CliAppName = $AppProductJson.tunnelApplicationName\n          $AppName = $AppProductJson.applicationName\n          Move-Item -Path \"$(Build.ArtifactStagingDirectory)/cli/$AppName.exe\" -Destination \"$(Agent.BuildDirectory)/VSCode-win32-$(VSCODE_ARCH)/bin/$CliAppName.exe\"\n        displayName: Move VS Code CLI\n\n      - task: UseDotNet@2\n        inputs:\n          version: 6.x\n\n      - task: EsrpCodeSigning@5\n        inputs:\n          UseMSIAuthentication: true\n          ConnectedServiceName: vscode-esrp\n          AppRegistrationClientId: $(ESRP_CLIENT_ID)\n          AppRegistrationTenantId: $(ESRP_TENANT_ID)\n          AuthAKVName: vscode-esrp\n          AuthSignCertName: esrp-sign\n          FolderPath: .\n          Pattern: noop\n        displayName: 'Install ESRP Tooling'\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $EsrpCodeSigningTool = (gci -directory -filter EsrpCodeSigning_* $(Agent.RootDirectory)\\_tasks | Select-Object -last 1).FullName\n          $Version = (gci -directory $EsrpCodeSigningTool | Select-Object -last 1).FullName\n          echo \"##vso[task.setvariable variable=EsrpCliDllPath]$Version\\net6.0\\esrpcli.dll\"\n        displayName: Find ESRP CLI\n\n      - powershell: node build\\azure-pipelines\\common\\sign $env:EsrpCliDllPath sign-windows $(CodeSigningFolderPath) '*.dll,*.exe,*.node'\n        env:\n          SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n        displayName: Codesign executables and shared libraries\n\n      - powershell: node build\\azure-pipelines\\common\\sign $env:EsrpCliDllPath sign-windows-appx $(CodeSigningFolderPath) '*.ps1'\n        env:\n          SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n        displayName: Codesign Powershell scripts\n\n    - ${{ if eq(parameters.VSCODE_QUALITY, 'insider') }}:\n      - powershell: node build\\azure-pipelines\\common\\sign $env:EsrpCliDllPath sign-windows-appx $(CodeSigningFolderPath) '*.appx'\n        env:\n          SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n        displayName: Codesign context menu appx package\n\n    - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $PackageJson = Get-Content -Raw -Path ..\\VSCode-win32-$(VSCODE_ARCH)\\resources\\app\\package.json | ConvertFrom-Json\n          $Version = $PackageJson.version\n          echo \"##vso[task.setvariable variable=VSCODE_VERSION]$Version\"\n        condition: succeededOrFailed()\n        displayName: Get product version\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $ArchivePath = \".build\\win32-$(VSCODE_ARCH)\\VSCode-win32-$(VSCODE_ARCH)-$(VSCODE_VERSION).zip\"\n          New-Item -ItemType Directory -Path .build\\win32-$(VSCODE_ARCH) -Force\n          exec { 7z.exe a -tzip $ArchivePath ..\\VSCode-win32-$(VSCODE_ARCH)\\* \"-xr!CodeSignSummary*.md\" }\n          echo \"##vso[task.setvariable variable=CLIENT_PATH]$ArchivePath\"\n\n          echo \"Listing archive contents\"\n          7z.exe l $ArchivePath\n        condition: and(succeededOrFailed(), eq(variables['BUILT_CLIENT'], 'true'))\n        displayName: Package client\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $ArchivePath = \".build\\win32-$(VSCODE_ARCH)\\vscode-server-win32-$(VSCODE_ARCH).zip\"\n          New-Item -ItemType Directory -Path .build\\win32-$(VSCODE_ARCH) -Force\n          exec { 7z.exe a -tzip $ArchivePath ..\\vscode-server-win32-$(VSCODE_ARCH) }\n          echo \"##vso[task.setvariable variable=SERVER_PATH]$ArchivePath\"\n\n          echo \"Listing archive contents\"\n          7z.exe l $ArchivePath\n        condition: and(succeededOrFailed(), eq(variables['BUILT_SERVER'], 'true'))\n        displayName: Package server\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          $ArchivePath = \".build\\win32-$(VSCODE_ARCH)\\vscode-server-win32-$(VSCODE_ARCH)-web.zip\"\n          New-Item -ItemType Directory -Path .build\\win32-$(VSCODE_ARCH) -Force\n          exec { 7z.exe a -tzip $ArchivePath ..\\vscode-server-win32-$(VSCODE_ARCH)-web }\n          echo \"##vso[task.setvariable variable=WEB_PATH]$ArchivePath\"\n\n          echo \"Listing archive contents\"\n          7z.exe l $ArchivePath\n        condition: and(succeededOrFailed(), eq(variables['BUILT_WEB'], 'true'))\n        displayName: Package server (web)\n\n      - powershell: |\n          . build/azure-pipelines/win32/exec.ps1\n          $ErrorActionPreference = \"Stop\"\n          exec { npm exec -- npm-run-all -lp \"gulp vscode-win32-$(VSCODE_ARCH)-system-setup -- --sign\" \"gulp vscode-win32-$(VSCODE_ARCH)-user-setup -- --sign\"  }\n\n          $SystemSetupPath = \".build\\win32-$(VSCODE_ARCH)\\system-setup\\VSCodeSetup-$(VSCODE_ARCH)-$(VSCODE_VERSION).exe\"\n          $UserSetupPath = \".build\\win32-$(VSCODE_ARCH)\\user-setup\\VSCodeUserSetup-$(VSCODE_ARCH)-$(VSCODE_VERSION).exe\"\n\n          mv .build\\win32-$(VSCODE_ARCH)\\system-setup\\VSCodeSetup.exe $SystemSetupPath\n          mv .build\\win32-$(VSCODE_ARCH)\\user-setup\\VSCodeSetup.exe $UserSetupPath\n\n          echo \"##vso[task.setvariable variable=SYSTEM_SETUP_PATH]$SystemSetupPath\"\n          echo \"##vso[task.setvariable variable=USER_SETUP_PATH]$UserSetupPath\"\n        env:\n          SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n        displayName: Build setup packages (system, user)\n\n      - powershell: echo \"##vso[task.setvariable variable=ARTIFACT_PREFIX]attempt$(System.JobAttempt)_\"\n        condition: and(succeededOrFailed(), notIn(variables['Agent.JobStatus'], 'Succeeded', 'SucceededWithIssues'))\n        displayName: Generate artifact prefix\n\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(CLIENT_PATH)\n          artifactName: $(ARTIFACT_PREFIX)vscode_client_win32_$(VSCODE_ARCH)_archive\n          sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-win32-$(VSCODE_ARCH)\n          sbomPackageName: \"VS Code Windows $(VSCODE_ARCH)\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        condition: and(succeededOrFailed(), ne(variables['CLIENT_PATH'], ''))\n        displayName: Publish archive\n\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(SERVER_PATH)\n          artifactName: $(ARTIFACT_PREFIX)vscode_server_win32_$(VSCODE_ARCH)_archive\n          sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-win32-$(VSCODE_ARCH)\n          sbomPackageName: \"VS Code Windows $(VSCODE_ARCH) Server\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        condition: and(succeededOrFailed(), ne(variables['SERVER_PATH'], ''))\n        displayName: Publish server archive\n\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(WEB_PATH)\n          artifactName: $(ARTIFACT_PREFIX)vscode_web_win32_$(VSCODE_ARCH)_archive\n          sbomBuildDropPath: $(Agent.BuildDirectory)/vscode-server-win32-$(VSCODE_ARCH)-web\n          sbomPackageName: \"VS Code Windows $(VSCODE_ARCH) Web\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        condition: and(succeededOrFailed(), ne(variables['WEB_PATH'], ''))\n        displayName: Publish web server archive\n\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(SYSTEM_SETUP_PATH)\n          artifactName: $(ARTIFACT_PREFIX)vscode_client_win32_$(VSCODE_ARCH)_setup\n          sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-win32-$(VSCODE_ARCH)\n          sbomPackageName: \"VS Code Windows $(VSCODE_ARCH) System Setup\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        condition: and(succeededOrFailed(), ne(variables['SYSTEM_SETUP_PATH'], ''))\n        displayName: Publish system setup\n\n      - task: 1ES.PublishPipelineArtifact@1\n        inputs:\n          targetPath: $(USER_SETUP_PATH)\n          artifactName: $(ARTIFACT_PREFIX)vscode_client_win32_$(VSCODE_ARCH)_user-setup\n          sbomBuildDropPath: $(Agent.BuildDirectory)/VSCode-win32-$(VSCODE_ARCH)\n          sbomPackageName: \"VS Code Windows $(VSCODE_ARCH) User Setup\"\n          sbomPackageVersion: $(Build.SourceVersion)\n        condition: and(succeededOrFailed(), ne(variables['USER_SETUP_PATH'], ''))\n        displayName: Publish user setup\n"
  },
  {
    "path": "build/azure-pipelines/win32/retry.ps1",
    "content": "function Retry\n{\n\t[CmdletBinding()]\n\tparam(\n\t\t[Parameter(Position=0,Mandatory=1)][scriptblock]$cmd\n\t)\n\t$retry = 0\n\n\twhile ($retry++ -lt 5) {\n\t\ttry {\n\t\t\t& $cmd\n\t\t\treturn\n\t\t} catch {\n\t\t\t# noop\n\t\t}\n\t}\n\n\tthrow \"Max retries reached\"\n}\n"
  },
  {
    "path": "build/azure-pipelines/win32/sdl-scan-win32.yml",
    "content": "parameters:\n  - name: VSCODE_ARCH\n    type: string\n  - name: VSCODE_QUALITY\n    type: string\n\nsteps:\n  - task: NodeTool@0\n    inputs:\n      versionSource: fromFile\n      versionFilePath: .nvmrc\n      nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download\n\n  - task: UsePythonVersion@0\n    inputs:\n      versionSpec: \"3.x\"\n      addToPath: true\n\n  - template: ../distro/download-distro.yml@self\n\n  - task: AzureKeyVault@2\n    displayName: \"Azure Key Vault: Get Secrets\"\n    inputs:\n      azureSubscription: vscode\n      KeyVaultName: vscode-build-secrets\n      SecretsFilter: \"github-distro-mixin-password\"\n\n  - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Registry\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      # Set the private NPM registry to the global npmrc file\n      # so that authentication works for subfolders like build/, remote/, extensions/ etc\n      # which does not have their own .npmrc file\n      exec { npm config set registry \"$env:NPM_REGISTRY\" }\n      $NpmrcPath = (npm config get userconfig)\n      echo \"##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath\"\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM\n\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: $(NPMRC_PATH)\n    condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))\n    displayName: Setup NPM Authentication\n\n  - pwsh: |\n      $includes = @'\n        {\n          'target_defaults': {\n            'conditions': [\n              ['OS==\"win\"', {\n                'msvs_settings': {\n                  'VCCLCompilerTool': {\n                    'AdditionalOptions': [\n                      '/Zi',\n                      '/FS'\n                    ],\n                  },\n                  'VCLinkerTool': {\n                    'AdditionalOptions': [\n                      '/profile'\n                    ]\n                  }\n                }\n              }]\n            ]\n          }\n        }\n      '@\n\n      if (!(Test-Path \"~/.gyp\")) {\n        mkdir \"~/.gyp\"\n      }\n      echo $includes > \"~/.gyp/include.gypi\"\n    displayName: Create include.gypi\n\n  - powershell: |\n      . build/azure-pipelines/win32/exec.ps1\n      $ErrorActionPreference = \"Stop\"\n      exec { npm ci }\n    env:\n      npm_config_arch: ${{ parameters.VSCODE_ARCH }}\n      npm_config_foreground_scripts: \"true\"\n      ELECTRON_SKIP_BINARY_DOWNLOAD: 1\n      PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    retryCountOnTaskFailure: 5\n    displayName: Install dependencies\n\n  - script: node build/azure-pipelines/distro/mixin-npm\n    displayName: Mixin distro node modules\n\n  - script: node build/azure-pipelines/distro/mixin-quality\n    displayName: Mixin distro quality\n    env:\n      VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}\n\n  - powershell: npm run compile\n    displayName: Compile\n\n  - powershell: npm run gulp \"vscode-symbols-win32-${{ parameters.VSCODE_ARCH }}\"\n    env:\n      GITHUB_TOKEN: \"$(github-distro-mixin-password)\"\n    displayName: Download Symbols\n\n  - powershell: |\n      Get-ChildItem '$(Agent.BuildDirectory)\\scanbin' -Recurse -Filter \"*.exe\"\n      Get-ChildItem '$(Agent.BuildDirectory)\\scanbin' -Recurse -Filter \"*.dll\"\n      Get-ChildItem '$(Agent.BuildDirectory)\\scanbin' -Recurse -Filter \"*.node\"\n      Get-ChildItem '$(Agent.BuildDirectory)\\scanbin' -Recurse -Filter \"*.pdb\"\n    displayName: List files\n\n  - task: CopyFiles@2\n    displayName: 'Collect Symbols for API Scan'\n    inputs:\n      SourceFolder: $(Agent.BuildDirectory)\n      Contents: 'scanbin\\**\\*.pdb'\n      TargetFolder: '$(Agent.BuildDirectory)\\symbols'\n      flattenFolders: true\n    condition: succeeded()\n\n  - task: APIScan@2\n    inputs:\n      softwareFolder: $(Agent.BuildDirectory)\\scanbin\n      softwareName: 'vscode-client'\n      softwareVersionNum: '1'\n      symbolsFolder: 'srv*https://symweb.azurefd.net;$(Agent.BuildDirectory)\\symbols'\n      isLargeApp: false\n      toolVersion: 'Latest'\n      azureSubscription: 'vscode-apiscan'\n    displayName: Run ApiScan\n    condition: succeeded()\n    env:\n      AzureServicesAuthConnectionString: RunAs=App;AppId=c0940da5-8bd3-4dd3-8af1-40774b50edbd;TenantId=72f988bf-86f1-41af-91ab-2d7cd011db47;ServiceConnectionId=3e55d992-b60d-414d-9071-e4fad359c748;\n      SYSTEM_ACCESSTOKEN: $(System.AccessToken)\n\n  - task: PublishSecurityAnalysisLogs@3\n    inputs:\n      ArtifactName: CodeAnalysisLogs\n      ArtifactType: Container\n      PublishProcessedResults: false\n      AllTools: true\n\n  # TSA Upload\n  - task: securedevelopmentteam.vss-secure-development-tools.build-task-uploadtotsa.TSAUpload@2\n    displayName: TSA Upload\n    continueOnError: true\n    inputs:\n      GdnPublishTsaOnboard: true\n      GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)/build/azure-pipelines/config/tsaoptions.json'\n"
  },
  {
    "path": "build/buildfile.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * @param {string} name\n * @returns {import('./lib/bundle').IEntryPoint}\n */\nfunction createModuleDescription(name) {\n\treturn {\n\t\tname\n\t};\n}\n\nexports.workerEditor = createModuleDescription('vs/editor/common/services/editorWebWorkerMain');\nexports.workerExtensionHost = createModuleDescription('vs/workbench/api/worker/extensionHostWorkerMain');\nexports.workerNotebook = createModuleDescription('vs/workbench/contrib/notebook/common/services/notebookWebWorkerMain');\nexports.workerLanguageDetection = createModuleDescription('vs/workbench/services/languageDetection/browser/languageDetectionWebWorkerMain');\nexports.workerLocalFileSearch = createModuleDescription('vs/workbench/services/search/worker/localFileSearchMain');\nexports.workerProfileAnalysis = createModuleDescription('vs/platform/profiling/electron-sandbox/profileAnalysisWorkerMain');\nexports.workerOutputLinks = createModuleDescription('vs/workbench/contrib/output/common/outputLinkComputerMain');\nexports.workerBackgroundTokenization = createModuleDescription('vs/workbench/services/textMate/browser/backgroundTokenization/worker/textMateTokenizationWorker.workerMain');\n\nexports.workbenchDesktop = [\n\tcreateModuleDescription('vs/workbench/contrib/debug/node/telemetryApp'),\n\tcreateModuleDescription('vs/platform/files/node/watcher/watcherMain'),\n\tcreateModuleDescription('vs/platform/terminal/node/ptyHostMain'),\n\tcreateModuleDescription('vs/workbench/api/node/extensionHostProcess'),\n\tcreateModuleDescription('vs/workbench/workbench.desktop.main')\n];\n\nexports.workbenchWeb = createModuleDescription('vs/workbench/workbench.web.main');\n\nexports.keyboardMaps = [\n\tcreateModuleDescription('vs/workbench/services/keybinding/browser/keyboardLayouts/layout.contribution.linux'),\n\tcreateModuleDescription('vs/workbench/services/keybinding/browser/keyboardLayouts/layout.contribution.darwin'),\n\tcreateModuleDescription('vs/workbench/services/keybinding/browser/keyboardLayouts/layout.contribution.win')\n];\n\nexports.code = [\n\t// 'vs/code/electron-main/main' is not included here because it comes in via ./src/main.js\n\t// 'vs/code/node/cli' is not included here because it comes in via ./src/cli.js\n\tcreateModuleDescription('vs/code/node/cliProcessMain'),\n\tcreateModuleDescription('vs/code/electron-utility/sharedProcess/sharedProcessMain'),\n\tcreateModuleDescription('vs/code/electron-sandbox/processExplorer/processExplorerMain'),\n\tcreateModuleDescription('vs/code/electron-sandbox/workbench/workbench'),\n\tcreateModuleDescription('vs/code/electron-sandbox/processExplorer/processExplorer')\n];\n\nexports.codeWeb = createModuleDescription('vs/code/browser/workbench/workbench');\n\nexports.codeServer = [\n\t// 'vs/server/node/server.main' is not included here because it gets inlined via ./src/server-main.js\n\t// 'vs/server/node/server.cli' is not included here because it gets inlined via ./src/server-cli.js\n\tcreateModuleDescription('vs/workbench/api/node/extensionHostProcess'),\n\tcreateModuleDescription('vs/platform/files/node/watcher/watcherMain'),\n\tcreateModuleDescription('vs/platform/terminal/node/ptyHostMain')\n];\n\nexports.entrypoint = createModuleDescription;\n"
  },
  {
    "path": "build/builtin/.eslintrc",
    "content": "{\n\t\"env\": {\n\t\t\"node\": true,\n\t\t\"es6\": true,\n\t\t\"browser\": true\n\t},\n\t\"rules\": {\n\t\t\"no-console\": 0,\n\t\t\"no-cond-assign\": 0,\n\t\t\"no-unused-vars\": 1,\n\t\t\"no-extra-semi\": \"warn\",\n\t\t\"semi\": \"warn\"\n\t},\n\t\"extends\": \"eslint:recommended\",\n\t\"parserOptions\": {\n\t\t\"ecmaFeatures\": {\n\t\t\t\"experimentalObjectRestSpread\": true\n\t\t}\n\t}\n}"
  },
  {
    "path": "build/builtin/browser-main.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n//@ts-check\n\nconst fs = require('fs');\nconst path = require('path');\nconst os = require('os');\nconst { ipcRenderer } = require('electron');\n\nconst builtInExtensionsPath = path.join(__dirname, '..', '..', 'product.json');\nconst controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');\n\n/**\n * @param {string} filePath\n */\nfunction readJson(filePath) {\n\treturn JSON.parse(fs.readFileSync(filePath, { encoding: 'utf8' }));\n}\n\n/**\n * @param {string} filePath\n * @param {any} obj\n */\nfunction writeJson(filePath, obj) {\n\tfs.writeFileSync(filePath, JSON.stringify(obj, null, 2));\n}\n\n/**\n * @param {HTMLFormElement} form\n * @param {string} id\n * @param {string} title\n * @param {string} value\n * @param {boolean} checked\n */\nfunction renderOption(form, id, title, value, checked) {\n\tconst input = document.createElement('input');\n\tinput.type = 'radio';\n\tinput.id = id;\n\tinput.name = 'choice';\n\tinput.value = value;\n\tinput.checked = !!checked;\n\tform.appendChild(input);\n\n\tconst label = document.createElement('label');\n\tlabel.setAttribute('for', id);\n\tlabel.textContent = title;\n\tform.appendChild(label);\n\n\treturn input;\n}\n\n/**\n * @param {HTMLElement} el\n * @param {any} state\n */\nfunction render(el, state) {\n\t/**\n\t * @param {any} state\n\t */\n\tfunction setState(state) {\n\t\ttry {\n\t\t\twriteJson(controlFilePath, state.control);\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\n\t\tel.innerHTML = '';\n\t\trender(el, state);\n\t}\n\n\tconst ul = document.createElement('ul');\n\tconst { builtin, control } = state;\n\n\tfor (const ext of builtin) {\n\t\tconst controlState = control[ext.name] || 'marketplace';\n\n\t\tconst li = document.createElement('li');\n\t\tul.appendChild(li);\n\n\t\tconst name = document.createElement('code');\n\t\tname.textContent = ext.name;\n\t\tli.appendChild(name);\n\n\t\tconst form = document.createElement('form');\n\t\tli.appendChild(form);\n\n\t\tconst marketplaceInput = renderOption(form, `marketplace-${ext.name}`, 'Marketplace', 'marketplace', controlState === 'marketplace');\n\t\tmarketplaceInput.onchange = function () {\n\t\t\tcontrol[ext.name] = 'marketplace';\n\t\t\tsetState({ builtin, control });\n\t\t};\n\n\t\tconst disabledInput = renderOption(form, `disabled-${ext.name}`, 'Disabled', 'disabled', controlState === 'disabled');\n\t\tdisabledInput.onchange = function () {\n\t\t\tcontrol[ext.name] = 'disabled';\n\t\t\tsetState({ builtin, control });\n\t\t};\n\n\t\tlet local = undefined;\n\n\t\tif (controlState !== 'marketplace' && controlState !== 'disabled') {\n\t\t\tlocal = controlState;\n\t\t}\n\n\t\tconst localInput = renderOption(form, `local-${ext.name}`, 'Local', 'local', !!local);\n\t\tlocalInput.onchange = async function () {\n\t\t\tconst result = await ipcRenderer.invoke('pickdir');\n\n\t\t\tif (result) {\n\t\t\t\tcontrol[ext.name] = result;\n\t\t\t\tsetState({ builtin, control });\n\t\t\t}\n\t\t};\n\n\t\tif (local) {\n\t\t\tconst localSpan = document.createElement('code');\n\t\t\tlocalSpan.className = 'local';\n\t\t\tlocalSpan.textContent = local;\n\t\t\tform.appendChild(localSpan);\n\t\t}\n\t}\n\n\tel.appendChild(ul);\n}\n\nfunction main() {\n\tconst el = document.getElementById('extensions');\n\tconst builtin = readJson(builtInExtensionsPath).builtInExtensions;\n\tlet control;\n\n\ttry {\n\t\tcontrol = readJson(controlFilePath);\n\t} catch (err) {\n\t\tcontrol = {};\n\t}\n\n\tif (el) {\n\t\trender(el, { builtin, control });\n\t}\n}\n\nwindow.onload = main;\n"
  },
  {
    "path": "build/builtin/index.html",
    "content": "<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->\n\n<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta charset=\"utf-8\" />\n\t<title>Manage Built-in Extensions</title>\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<script src=\"browser-main.js\"></script>\n\t<style>\n\t\tbody {\n\t\t\tfont-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;\n\t\t\tfont-size: 10pt;\n\t\t}\n\n\t\tcode {\n\t\t\tfont-family: 'Menlo', 'Courier New', 'Courier', monospace;\n\t\t}\n\n\t\tul {\n\t\t\tpadding-left: 1em;\n\t\t}\n\n\t\tli {\n\t\t\tlist-style: none;\n\t\t\tpadding: 0.3em 0;\n\t\t}\n\n\t\tlabel {\n\t\t\tmargin-right: 1em;\n\t\t}\n\n\t\tform {\n\t\t\tpadding: 0.3em 0 0.3em 0.3em;\n\t\t}\n\t</style>\n</head>\n\n<body>\n\t<h1>Built-in Extensions</h1>\n\t<div id=\"extensions\"></div>\n</body>\n\n</html>\n"
  },
  {
    "path": "build/builtin/main.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\nconst { app, BrowserWindow, ipcMain, dialog } = require('electron');\nconst url = require('url');\nconst path = require('path');\n\nlet window = null;\n\nipcMain.handle('pickdir', async () => {\n\tconst result = await dialog.showOpenDialog(window, {\n\t\ttitle: 'Choose Folder',\n\t\tproperties: ['openDirectory']\n\t});\n\n\tif (result.canceled || result.filePaths.length < 1) {\n\t\treturn undefined;\n\t}\n\n\treturn result.filePaths[0];\n});\n\napp.once('ready', () => {\n\twindow = new BrowserWindow({\n\t\twidth: 800,\n\t\theight: 600,\n\t\twebPreferences: {\n\t\t\tnodeIntegration: true,\n\t\t\tcontextIsolation: false,\n\t\t\tenableWebSQL: false\n\t\t}\n\t});\n\twindow.setMenuBarVisibility(false);\n\twindow.loadURL(url.format({ pathname: path.join(__dirname, 'index.html'), protocol: 'file:', slashes: true }));\n\t// window.webContents.openDevTools();\n\twindow.once('closed', () => window = null);\n});\n\napp.on('window-all-closed', () => app.quit());\n"
  },
  {
    "path": "build/builtin/package.json",
    "content": "{\n\t\"name\": \"builtin\",\n\t\"version\": \"0.1.0\",\n\t\"main\": \"main.js\"\n}"
  },
  {
    "path": "build/checksums/electron.txt",
    "content": "c9b82c9f381742e839fea00aeb14f24519bcaf38a0f4eed25532191701f9535b *chromedriver-v34.3.2-darwin-arm64.zip\nd556c1e2b06f1bf131e83c2fb981de755c28e1083a884d257eb964815be16b0c *chromedriver-v34.3.2-darwin-x64.zip\n1cabad4f3303ac2ff172a9f22185f64944dbaa6fc68271609077158eaefdee35 *chromedriver-v34.3.2-linux-arm64.zip\n4213ce52c72ef414179b5c5c22ae8423847ff030d438296bd6c2aac763930a7b *chromedriver-v34.3.2-linux-armv7l.zip\n3c64c08221fdfc0f4be60ea8b1b126f2ecca45f60001b63778522f711022c6ea *chromedriver-v34.3.2-linux-x64.zip\ne8388734d88e011cb6cd79795431de9206820749219d80565ee49d90501d2bf3 *chromedriver-v34.3.2-mas-arm64.zip\n3ad1dd37bd6e0bb37e8503898db7aedd56bd5213e6d6760b05c3d11f4625062b *chromedriver-v34.3.2-mas-x64.zip\nd567b481a0f5d88e84bba7718f89fb08f56363bfc4cb5914e1c2086358a5c252 *chromedriver-v34.3.2-win32-arm64.zip\ndf6732e9dc61cb20a3c0b2a2de453aac7e2bd54e7cbff43512afa614852c15fa *chromedriver-v34.3.2-win32-ia32.zip\ndda0765c8d064924632e18cd152014ecd767f3808fc51c8249a053bfb7ca70a2 *chromedriver-v34.3.2-win32-x64.zip\n1945f15caff98f2e0f1ee539c483d352fb8d4d0c13f342caa7abe247676d828c *electron-api.json\nc078bbf727b3c3026f60e07a0f4643b85c06c581b54be017d0a6c284ba6772d3 *electron-v34.3.2-darwin-arm64-dsym-snapshot.zip\n35f587754d6a3272606258386bf73688d63dd53c7e572d3a7cbaae6f3f60bdae *electron-v34.3.2-darwin-arm64-dsym.zip\n08b14ee02c98353de3c738120dfd017322666e82b914a7f6de9b9888dcc5c0f0 *electron-v34.3.2-darwin-arm64-symbols.zip\n2a4aa7e8fa30f229e465ebd18d3e4722e2b41529dc51a68a954d333a7e556ffe *electron-v34.3.2-darwin-arm64.zip\n1509ccdeb80024f5e3edd5ecf804b4cef4e47ea2bd74e33ef0b39044b0ccf892 *electron-v34.3.2-darwin-x64-dsym-snapshot.zip\n3bbe5d587c3f582ed8c126b0fb635cc02ad9a14d077b04892fe6f862092445b0 *electron-v34.3.2-darwin-x64-dsym.zip\nfa7ece82e6ecaf1c94ed341e8ebff98e64687c68fe113f52cd9a21400302e22f *electron-v34.3.2-darwin-x64-symbols.zip\n23938c62257a65a863ed7aa7c7966ba5f257a7d3dc16c78293e826962cc39c5c *electron-v34.3.2-darwin-x64.zip\n0547eecf8ab538d74fa854f591ce8b888a3dbb339256d2db3038e7bb2c6dd929 *electron-v34.3.2-linux-arm64-debug.zip\n676d0dc2b1c1c85c8b2abbb8cd5376ee22ecdb910493b910d9ae5a998532136a *electron-v34.3.2-linux-arm64-symbols.zip\n774e4ccb39d553e5487994a9f8c60774a90f08cdb049ff65f3963fc27c969ff2 *electron-v34.3.2-linux-arm64.zip\n0547eecf8ab538d74fa854f591ce8b888a3dbb339256d2db3038e7bb2c6dd929 *electron-v34.3.2-linux-armv7l-debug.zip\nba33bf53fcb35dea568a2795f5b23ecf46c218abe8258946611c72a1f42f716c *electron-v34.3.2-linux-armv7l-symbols.zip\n73ae92c8fffb351d3a455569cf57ce9a3f676f42bf61939c613c607fe0fc3bfb *electron-v34.3.2-linux-armv7l.zip\ne61a9a69dd7ea6f2687708a8e83516670cdea53c728226e598e2f6f1fad5b77b *electron-v34.3.2-linux-x64-debug.zip\nf1a04df7fe67dd1cd29e7b87871525458d2eb24c0cf3b5835a1c56974707562a *electron-v34.3.2-linux-x64-symbols.zip\n7b74c0c4fae82e27c7e9cbca13e9763e046113dba8737d3e27de9a0b300ac87e *electron-v34.3.2-linux-x64.zip\n8571a6aa83e00925ceb39fdc5a45a9f6b9aa3d92fd84951c6f252ed723aea4ae *electron-v34.3.2-mas-arm64-dsym-snapshot.zip\n477410c6f9a6c5eeaedf376058a02c2996fc0a334aa40eeec7d3734c09347f4d *electron-v34.3.2-mas-arm64-dsym.zip\nc2e62dcd6630cb51b2d8e2869e74e47d29bda785521cea6e82e546d0fc58aabb *electron-v34.3.2-mas-arm64-symbols.zip\na1698e8546a062fd59b7f8e5507a7f3220fb00b347f2377de83fc9a07f7f3507 *electron-v34.3.2-mas-arm64.zip\n741a24ac230a3651dca81d211f9f00b835c428a5ed0c5f67d370d4e88b62f8d6 *electron-v34.3.2-mas-x64-dsym-snapshot.zip\naeff97ec9e5c9e173ac89e38acd94476025c5640d5f27be1e8c2abd54398bab3 *electron-v34.3.2-mas-x64-dsym.zip\n9f14b66b1d612ac66697288e8763171c388f7f200854871a5f0ab464a6a921c2 *electron-v34.3.2-mas-x64-symbols.zip\nc979d7e7175f1e8e03ca187997d4c156b878189fc3611b347fadebcb16f3e027 *electron-v34.3.2-mas-x64.zip\nf43c700641e8220205dd356952e32718d113cf530520c4ed7209b59851eac266 *electron-v34.3.2-win32-arm64-pdb.zip\n3ba6e01c99bffac6b5dd3fd6f122ecdb571cf6f675dc5498c65050bd7a382ef8 *electron-v34.3.2-win32-arm64-symbols.zip\nc23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.3.2-win32-arm64-toolchain-profile.zip\n9b9cb65d75a16782088b492f9ef3bb4d27525012b819c12bf29bd27e159d749b *electron-v34.3.2-win32-arm64.zip\n1006e7af4c149114b5ebc3497617aaa6cd1bb0b131e0a225fd73709ff308f9c5 *electron-v34.3.2-win32-ia32-pdb.zip\n1ecb6430cd04454f08f557c9579163f3552144bfcc0b67b768dad8868b5b891d *electron-v34.3.2-win32-ia32-symbols.zip\nc23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.3.2-win32-ia32-toolchain-profile.zip\nd004fd5f853754001fafaec33e383d1950b30c935ee71b297ec1c9e084355e9b *electron-v34.3.2-win32-ia32.zip\n4e0721552fd2f09e9466e88089af8b965f1bfbc4ae00a59aaf6245b1d1efabfd *electron-v34.3.2-win32-x64-pdb.zip\n9dea812a7e7cd0fb18e5fed9a99db5531959a068c24d3c0ecedceb644cd3ffa0 *electron-v34.3.2-win32-x64-symbols.zip\nc23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.3.2-win32-x64-toolchain-profile.zip\n1785e161420fb90d2331c26e50bba3413cae9625b7db3c8524ea02ade631efba *electron-v34.3.2-win32-x64.zip\n722b304c31ddac58b0083d94a241c5276464f04bd8ea4fcbfd33051d197be103 *electron.d.ts\n31ce159b2e47d1de5bc907d8e1c89726b0f2ba530ec2e9d7a8e5c723b1ccf6e0 *ffmpeg-v34.3.2-darwin-arm64.zip\n565539bac64a6ee9cf6f188070f520210a1507341718f5dc388ac7c454b1e1d5 *ffmpeg-v34.3.2-darwin-x64.zip\n6006ea0f46ab229feb2685be086b0fafd65981e2939dd2218a078459c75ab527 *ffmpeg-v34.3.2-linux-arm64.zip\n9404ce2e85df7c40f809f2cf62c7af607de299839fe6b7ae978c3015500abcc8 *ffmpeg-v34.3.2-linux-armv7l.zip\n79aec96898b7e2462826780ee0b52b9ab299dc662af333e128a34fd5ddae87f1 *ffmpeg-v34.3.2-linux-x64.zip\n9190743c78210574faf5d5ecb82a00f8fa15e5f2253378cb925a99ca9d39961b *ffmpeg-v34.3.2-mas-arm64.zip\n48915adcb1a6342efeda896035101300f0432c0304cfb38f2378e98c6309ebae *ffmpeg-v34.3.2-mas-x64.zip\n745d5ef786de6d4a720475079836e2fda7b501cfcd255819485a47de5b24b74e *ffmpeg-v34.3.2-win32-arm64.zip\nd0d86d60978439dc8ae4a723d4e4c1f853891d596bfd84033440a232fa762e2f *ffmpeg-v34.3.2-win32-ia32.zip\n4441539fd8c9cbe79880ff1bade9bdc0c3744c33d7409130af6404e57ee401ff *ffmpeg-v34.3.2-win32-x64.zip\n39edd1eeefe881aa75af0e438204e0b1c6e6724e34fa5819109276331c0c2c9a *hunspell_dictionaries.zip\n20dd417536e5f4ebc01f480221284c0673729c27b082bc04e2922f16cd571719 *libcxx-objects-v34.3.2-linux-arm64.zip\n7e53c5779c04f895f8282c0450ec4a63074d15a0e910e41006cfea133d0288af *libcxx-objects-v34.3.2-linux-armv7l.zip\n92e2283c924ab523ffec3ea22513beaab6417f7fc3d570f57d51a1e1ceb7f510 *libcxx-objects-v34.3.2-linux-x64.zip\n9bf3c6e8ad68f523fe086fada4148dd04e5bb0b9290d104873e66f2584a5cf50 *libcxx_headers.zip\n34e4b44f9c5e08b557a2caed55456ce7690abab910196a783a2a47b58d2b9ac9 *libcxxabi_headers.zip\n11f67635e6659f9188198e4086c51b89890b61a22f6c17c99eff35595ee8f51d *mksnapshot-v34.3.2-darwin-arm64.zip\nc0add9ef4ac27c73fa043d04b4c9635fd3fd9f5c16d7a03e961864ba05252813 *mksnapshot-v34.3.2-darwin-x64.zip\n6262adf86a340d8d28059937b01ef1117b93212e945fddbceea5c18d7e7c64f0 *mksnapshot-v34.3.2-linux-arm64-x64.zip\nf7db8ebe91a1cc8d24ef6aad12949a18d8e4975ac296e3e5e9ecd88c9bccb143 *mksnapshot-v34.3.2-linux-armv7l-x64.zip\n6642038e86bda362980ff1c8973a404e2b02efdd87de9e35b650fc1e743833da *mksnapshot-v34.3.2-linux-x64.zip\n15883bf8e8cd737c3682d1e719d7cbac92f50b525681aac324dca876861dfc7d *mksnapshot-v34.3.2-mas-arm64.zip\n4da23a950bfcc377ef21c37d496017ab4c36da03f3b41049ac114042c42608ce *mksnapshot-v34.3.2-mas-x64.zip\nfab59573d3c2f9bdf31146a1896d24ac0c51f736aad86d2f3c7ecef13c05a7fd *mksnapshot-v34.3.2-win32-arm64-x64.zip\n66f25e07c6f8d5d2009577a129440255a3baf63c929a5b60b2e77cd52e46105b *mksnapshot-v34.3.2-win32-ia32.zip\n8168bfbf61882cfac80aed1e71e364e1c7f2fccd11eac298e6abade8b46894ea *mksnapshot-v34.3.2-win32-x64.zip\n"
  },
  {
    "path": "build/checksums/nodejs.txt",
    "content": "1f15b7ed18a580af31cf32bc126572292d820f547bf55bf9cdce08041a24e1d9  node-v20.18.3-darwin-arm64.tar.gz\nba668f64df9239843fefcef095ee539f5ac5aa1b0fc15a71f1ecca16abedec7a  node-v20.18.3-darwin-x64.tar.gz\n93a9df19238adfaa289f4784041d03edaf2fdd89fbb247faffca2fe4a1000703  node-v20.18.3-linux-arm64.tar.gz\n8a84eb34287db6a273066934d7195e429f57b91686b62fc19497210204a2b3de  node-v20.18.3-linux-armv7l.tar.gz\n9fc3952da39b20d1fcfdb777b198cc035485afbbb1004b4df93f35245d61151e  node-v20.18.3-linux-x64.tar.gz\n4258e333f4b95060681d61bffa762542a8068547d3dffebe57c575b38d380dda  win-arm64/node.exe\n528a9aa64888a2a3ba71c6aea89434dd5ab5cb3caa9f0f31345cf5facf685ab0  win-x64/node.exe\n"
  },
  {
    "path": "build/checksums/vscode-sysroot.txt",
    "content": "0de422a81683cf9e8cf875dbd1e0c27545ac3c775b2d53015daf3ca2b31d3f15  aarch64-linux-gnu-glibc-2.28.tar.gz\n7aea163f7fad8cc50000c86b5108be880121d35e2f55d016ef8c96bbe54129eb  arm-rpi-linux-gnueabihf-glibc-2.28.tar.gz\ndbb927408393041664a020661f2641c9785741be3d29b050b9dac58980967784  x86_64-linux-gnu-glibc-2.28.tar.gz\n"
  },
  {
    "path": "build/darwin/create-universal-app.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path_1 = __importDefault(require(\"path\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst minimatch_1 = __importDefault(require(\"minimatch\"));\nconst vscode_universal_bundler_1 = require(\"vscode-universal-bundler\");\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nasync function main(buildDir) {\n    const arch = process.env['VSCODE_ARCH'];\n    if (!buildDir) {\n        throw new Error('Build dir not provided');\n    }\n    const product = JSON.parse(fs_1.default.readFileSync(path_1.default.join(root, 'product.json'), 'utf8'));\n    const appName = product.nameLong + '.app';\n    const x64AppPath = path_1.default.join(buildDir, 'VSCode-darwin-x64', appName);\n    const arm64AppPath = path_1.default.join(buildDir, 'VSCode-darwin-arm64', appName);\n    const asarRelativePath = path_1.default.join('Contents', 'Resources', 'app', 'node_modules.asar');\n    const outAppPath = path_1.default.join(buildDir, `VSCode-darwin-${arch}`, appName);\n    const productJsonPath = path_1.default.resolve(outAppPath, 'Contents', 'Resources', 'app', 'product.json');\n    const filesToSkip = [\n        '**/CodeResources',\n        '**/Credits.rtf',\n        '**/policies/{*.mobileconfig,**/*.plist}',\n        // TODO: Should we consider expanding this to other files in this area?\n        '**/node_modules/@parcel/node-addon-api/nothing.target.mk'\n    ];\n    await (0, vscode_universal_bundler_1.makeUniversalApp)({\n        x64AppPath,\n        arm64AppPath,\n        asarPath: asarRelativePath,\n        outAppPath,\n        force: true,\n        mergeASARs: true,\n        x64ArchFiles: '*/kerberos.node',\n        filesToSkipComparison: (file) => {\n            for (const expected of filesToSkip) {\n                if ((0, minimatch_1.default)(file, expected)) {\n                    return true;\n                }\n            }\n            return false;\n        }\n    });\n    const productJson = JSON.parse(fs_1.default.readFileSync(productJsonPath, 'utf8'));\n    Object.assign(productJson, {\n        darwinUniversalAssetId: 'darwin-universal'\n    });\n    fs_1.default.writeFileSync(productJsonPath, JSON.stringify(productJson, null, '\\t'));\n}\nif (require.main === module) {\n    main(process.argv[2]).catch(err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=create-universal-app.js.map"
  },
  {
    "path": "build/darwin/create-universal-app.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport path from 'path';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport { makeUniversalApp } from 'vscode-universal-bundler';\n\nconst root = path.dirname(path.dirname(__dirname));\n\nasync function main(buildDir?: string) {\n\tconst arch = process.env['VSCODE_ARCH'];\n\n\tif (!buildDir) {\n\t\tthrow new Error('Build dir not provided');\n\t}\n\n\tconst product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));\n\tconst appName = product.nameLong + '.app';\n\tconst x64AppPath = path.join(buildDir, 'VSCode-darwin-x64', appName);\n\tconst arm64AppPath = path.join(buildDir, 'VSCode-darwin-arm64', appName);\n\tconst asarRelativePath = path.join('Contents', 'Resources', 'app', 'node_modules.asar');\n\tconst outAppPath = path.join(buildDir, `VSCode-darwin-${arch}`, appName);\n\tconst productJsonPath = path.resolve(outAppPath, 'Contents', 'Resources', 'app', 'product.json');\n\n\tconst filesToSkip = [\n\t\t'**/CodeResources',\n\t\t'**/Credits.rtf',\n\t\t'**/policies/{*.mobileconfig,**/*.plist}',\n\t\t// TODO: Should we consider expanding this to other files in this area?\n\t\t'**/node_modules/@parcel/node-addon-api/nothing.target.mk'\n\t];\n\n\tawait makeUniversalApp({\n\t\tx64AppPath,\n\t\tarm64AppPath,\n\t\tasarPath: asarRelativePath,\n\t\toutAppPath,\n\t\tforce: true,\n\t\tmergeASARs: true,\n\t\tx64ArchFiles: '*/kerberos.node',\n\t\tfilesToSkipComparison: (file: string) => {\n\t\t\tfor (const expected of filesToSkip) {\n\t\t\t\tif (minimatch(file, expected)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t});\n\n\tconst productJson = JSON.parse(fs.readFileSync(productJsonPath, 'utf8'));\n\tObject.assign(productJson, {\n\t\tdarwinUniversalAssetId: 'darwin-universal'\n\t});\n\tfs.writeFileSync(productJsonPath, JSON.stringify(productJson, null, '\\t'));\n}\n\nif (require.main === module) {\n\tmain(process.argv[2]).catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/darwin/sign.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst electron_osx_sign_1 = __importDefault(require(\"electron-osx-sign\"));\nconst cross_spawn_promise_1 = require(\"@malept/cross-spawn-promise\");\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nfunction getElectronVersion() {\n    const npmrc = fs_1.default.readFileSync(path_1.default.join(root, '.npmrc'), 'utf8');\n    const target = /^target=\"(.*)\"$/m.exec(npmrc)[1];\n    return target;\n}\nasync function main(buildDir) {\n    const tempDir = process.env['AGENT_TEMPDIRECTORY'];\n    const arch = process.env['VSCODE_ARCH'];\n    const identity = process.env['CODESIGN_IDENTITY'];\n    if (!buildDir) {\n        throw new Error('$AGENT_BUILDDIRECTORY not set');\n    }\n    if (!tempDir) {\n        throw new Error('$AGENT_TEMPDIRECTORY not set');\n    }\n    const product = JSON.parse(fs_1.default.readFileSync(path_1.default.join(root, 'product.json'), 'utf8'));\n    const baseDir = path_1.default.dirname(__dirname);\n    const appRoot = path_1.default.join(buildDir, `VSCode-darwin-${arch}`);\n    const appName = product.nameLong + '.app';\n    const appFrameworkPath = path_1.default.join(appRoot, appName, 'Contents', 'Frameworks');\n    const helperAppBaseName = product.nameShort;\n    const gpuHelperAppName = helperAppBaseName + ' Helper (GPU).app';\n    const rendererHelperAppName = helperAppBaseName + ' Helper (Renderer).app';\n    const pluginHelperAppName = helperAppBaseName + ' Helper (Plugin).app';\n    const infoPlistPath = path_1.default.resolve(appRoot, appName, 'Contents', 'Info.plist');\n    const defaultOpts = {\n        app: path_1.default.join(appRoot, appName),\n        platform: 'darwin',\n        entitlements: path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'app-entitlements.plist'),\n        'entitlements-inherit': path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'app-entitlements.plist'),\n        hardenedRuntime: true,\n        'pre-auto-entitlements': false,\n        'pre-embed-provisioning-profile': false,\n        keychain: path_1.default.join(tempDir, 'buildagent.keychain'),\n        version: getElectronVersion(),\n        identity,\n        'gatekeeper-assess': false\n    };\n    const appOpts = {\n        ...defaultOpts,\n        // TODO(deepak1556): Incorrectly declared type in electron-osx-sign\n        ignore: (filePath) => {\n            return filePath.includes(gpuHelperAppName) ||\n                filePath.includes(rendererHelperAppName) ||\n                filePath.includes(pluginHelperAppName);\n        }\n    };\n    const gpuHelperOpts = {\n        ...defaultOpts,\n        app: path_1.default.join(appFrameworkPath, gpuHelperAppName),\n        entitlements: path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist'),\n        'entitlements-inherit': path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist'),\n    };\n    const rendererHelperOpts = {\n        ...defaultOpts,\n        app: path_1.default.join(appFrameworkPath, rendererHelperAppName),\n        entitlements: path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist'),\n        'entitlements-inherit': path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist'),\n    };\n    const pluginHelperOpts = {\n        ...defaultOpts,\n        app: path_1.default.join(appFrameworkPath, pluginHelperAppName),\n        entitlements: path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'helper-plugin-entitlements.plist'),\n        'entitlements-inherit': path_1.default.join(baseDir, 'azure-pipelines', 'darwin', 'helper-plugin-entitlements.plist'),\n    };\n    // Only overwrite plist entries for x64 and arm64 builds,\n    // universal will get its copy from the x64 build.\n    if (arch !== 'universal') {\n        await (0, cross_spawn_promise_1.spawn)('plutil', [\n            '-insert',\n            'NSAppleEventsUsageDescription',\n            '-string',\n            'An application in Visual Studio Code wants to use AppleScript.',\n            `${infoPlistPath}`\n        ]);\n        await (0, cross_spawn_promise_1.spawn)('plutil', [\n            '-replace',\n            'NSMicrophoneUsageDescription',\n            '-string',\n            'An application in Visual Studio Code wants to use the Microphone.',\n            `${infoPlistPath}`\n        ]);\n        await (0, cross_spawn_promise_1.spawn)('plutil', [\n            '-replace',\n            'NSCameraUsageDescription',\n            '-string',\n            'An application in Visual Studio Code wants to use the Camera.',\n            `${infoPlistPath}`\n        ]);\n    }\n    await electron_osx_sign_1.default.signAsync(gpuHelperOpts);\n    await electron_osx_sign_1.default.signAsync(rendererHelperOpts);\n    await electron_osx_sign_1.default.signAsync(pluginHelperOpts);\n    await electron_osx_sign_1.default.signAsync(appOpts);\n}\nif (require.main === module) {\n    main(process.argv[2]).catch(err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=sign.js.map"
  },
  {
    "path": "build/darwin/sign.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport codesign from 'electron-osx-sign';\nimport { spawn } from '@malept/cross-spawn-promise';\n\nconst root = path.dirname(path.dirname(__dirname));\n\nfunction getElectronVersion(): string {\n\tconst npmrc = fs.readFileSync(path.join(root, '.npmrc'), 'utf8');\n\tconst target = /^target=\"(.*)\"$/m.exec(npmrc)![1];\n\treturn target;\n}\n\nasync function main(buildDir?: string): Promise<void> {\n\tconst tempDir = process.env['AGENT_TEMPDIRECTORY'];\n\tconst arch = process.env['VSCODE_ARCH'];\n\tconst identity = process.env['CODESIGN_IDENTITY'];\n\n\tif (!buildDir) {\n\t\tthrow new Error('$AGENT_BUILDDIRECTORY not set');\n\t}\n\n\tif (!tempDir) {\n\t\tthrow new Error('$AGENT_TEMPDIRECTORY not set');\n\t}\n\n\tconst product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));\n\tconst baseDir = path.dirname(__dirname);\n\tconst appRoot = path.join(buildDir, `VSCode-darwin-${arch}`);\n\tconst appName = product.nameLong + '.app';\n\tconst appFrameworkPath = path.join(appRoot, appName, 'Contents', 'Frameworks');\n\tconst helperAppBaseName = product.nameShort;\n\tconst gpuHelperAppName = helperAppBaseName + ' Helper (GPU).app';\n\tconst rendererHelperAppName = helperAppBaseName + ' Helper (Renderer).app';\n\tconst pluginHelperAppName = helperAppBaseName + ' Helper (Plugin).app';\n\tconst infoPlistPath = path.resolve(appRoot, appName, 'Contents', 'Info.plist');\n\n\tconst defaultOpts: codesign.SignOptions = {\n\t\tapp: path.join(appRoot, appName),\n\t\tplatform: 'darwin',\n\t\tentitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'app-entitlements.plist'),\n\t\t'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'app-entitlements.plist'),\n\t\thardenedRuntime: true,\n\t\t'pre-auto-entitlements': false,\n\t\t'pre-embed-provisioning-profile': false,\n\t\tkeychain: path.join(tempDir, 'buildagent.keychain'),\n\t\tversion: getElectronVersion(),\n\t\tidentity,\n\t\t'gatekeeper-assess': false\n\t};\n\n\tconst appOpts = {\n\t\t...defaultOpts,\n\t\t// TODO(deepak1556): Incorrectly declared type in electron-osx-sign\n\t\tignore: (filePath: string) => {\n\t\t\treturn filePath.includes(gpuHelperAppName) ||\n\t\t\t\tfilePath.includes(rendererHelperAppName) ||\n\t\t\t\tfilePath.includes(pluginHelperAppName);\n\t\t}\n\t};\n\n\tconst gpuHelperOpts: codesign.SignOptions = {\n\t\t...defaultOpts,\n\t\tapp: path.join(appFrameworkPath, gpuHelperAppName),\n\t\tentitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist'),\n\t\t'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist'),\n\t};\n\n\tconst rendererHelperOpts: codesign.SignOptions = {\n\t\t...defaultOpts,\n\t\tapp: path.join(appFrameworkPath, rendererHelperAppName),\n\t\tentitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist'),\n\t\t'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist'),\n\t};\n\n\tconst pluginHelperOpts: codesign.SignOptions = {\n\t\t...defaultOpts,\n\t\tapp: path.join(appFrameworkPath, pluginHelperAppName),\n\t\tentitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-plugin-entitlements.plist'),\n\t\t'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-plugin-entitlements.plist'),\n\t};\n\n\t// Only overwrite plist entries for x64 and arm64 builds,\n\t// universal will get its copy from the x64 build.\n\tif (arch !== 'universal') {\n\t\tawait spawn('plutil', [\n\t\t\t'-insert',\n\t\t\t'NSAppleEventsUsageDescription',\n\t\t\t'-string',\n\t\t\t'An application in Visual Studio Code wants to use AppleScript.',\n\t\t\t`${infoPlistPath}`\n\t\t]);\n\t\tawait spawn('plutil', [\n\t\t\t'-replace',\n\t\t\t'NSMicrophoneUsageDescription',\n\t\t\t'-string',\n\t\t\t'An application in Visual Studio Code wants to use the Microphone.',\n\t\t\t`${infoPlistPath}`\n\t\t]);\n\t\tawait spawn('plutil', [\n\t\t\t'-replace',\n\t\t\t'NSCameraUsageDescription',\n\t\t\t'-string',\n\t\t\t'An application in Visual Studio Code wants to use the Camera.',\n\t\t\t`${infoPlistPath}`\n\t\t]);\n\t}\n\n\tawait codesign.signAsync(gpuHelperOpts);\n\tawait codesign.signAsync(rendererHelperOpts);\n\tawait codesign.signAsync(pluginHelperOpts);\n\tawait codesign.signAsync(appOpts as any);\n}\n\nif (require.main === module) {\n\tmain(process.argv[2]).catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/darwin/verify-macho.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert_1 = __importDefault(require(\"assert\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst promises_1 = require(\"fs/promises\");\nconst cross_spawn_promise_1 = require(\"@malept/cross-spawn-promise\");\nconst MACHO_PREFIX = 'Mach-O ';\nconst MACHO_64_MAGIC_LE = 0xfeedfacf;\nconst MACHO_UNIVERSAL_MAGIC_LE = 0xbebafeca;\nconst MACHO_ARM64_CPU_TYPE = new Set([\n    0x0c000001,\n    0x0100000c,\n]);\nconst MACHO_X86_64_CPU_TYPE = new Set([\n    0x07000001,\n    0x01000007,\n]);\nasync function read(file, buf, offset, length, position) {\n    let filehandle;\n    try {\n        filehandle = await (0, promises_1.open)(file);\n        await filehandle.read(buf, offset, length, position);\n    }\n    finally {\n        await filehandle?.close();\n    }\n}\nasync function checkMachOFiles(appPath, arch) {\n    const visited = new Set();\n    const invalidFiles = [];\n    const header = Buffer.alloc(8);\n    const file_header_entry_size = 20;\n    const checkx86_64Arch = (arch === 'x64');\n    const checkArm64Arch = (arch === 'arm64');\n    const checkUniversalArch = (arch === 'universal');\n    const traverse = async (p) => {\n        p = await (0, promises_1.realpath)(p);\n        if (visited.has(p)) {\n            return;\n        }\n        visited.add(p);\n        const info = await (0, promises_1.stat)(p);\n        if (info.isSymbolicLink()) {\n            return;\n        }\n        if (info.isFile()) {\n            let fileOutput = '';\n            try {\n                fileOutput = await (0, cross_spawn_promise_1.spawn)('file', ['--brief', '--no-pad', p]);\n            }\n            catch (e) {\n                if (e instanceof cross_spawn_promise_1.ExitCodeError) {\n                    /* silently accept error codes from \"file\" */\n                }\n                else {\n                    throw e;\n                }\n            }\n            if (fileOutput.startsWith(MACHO_PREFIX)) {\n                console.log(`Verifying architecture of ${p}`);\n                read(p, header, 0, 8, 0).then(_ => {\n                    const header_magic = header.readUInt32LE();\n                    if (header_magic === MACHO_64_MAGIC_LE) {\n                        const cpu_type = header.readUInt32LE(4);\n                        if (checkUniversalArch) {\n                            invalidFiles.push(p);\n                        }\n                        else if (checkArm64Arch && !MACHO_ARM64_CPU_TYPE.has(cpu_type)) {\n                            invalidFiles.push(p);\n                        }\n                        else if (checkx86_64Arch && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {\n                            invalidFiles.push(p);\n                        }\n                    }\n                    else if (header_magic === MACHO_UNIVERSAL_MAGIC_LE) {\n                        const num_binaries = header.readUInt32BE(4);\n                        assert_1.default.equal(num_binaries, 2);\n                        const file_entries_size = file_header_entry_size * num_binaries;\n                        const file_entries = Buffer.alloc(file_entries_size);\n                        read(p, file_entries, 0, file_entries_size, 8).then(_ => {\n                            for (let i = 0; i < num_binaries; i++) {\n                                const cpu_type = file_entries.readUInt32LE(file_header_entry_size * i);\n                                if (!MACHO_ARM64_CPU_TYPE.has(cpu_type) && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {\n                                    invalidFiles.push(p);\n                                }\n                            }\n                        });\n                    }\n                });\n            }\n        }\n        if (info.isDirectory()) {\n            for (const child of await (0, promises_1.readdir)(p)) {\n                await traverse(path_1.default.resolve(p, child));\n            }\n        }\n    };\n    await traverse(appPath);\n    return invalidFiles;\n}\nconst archToCheck = process.argv[2];\n(0, assert_1.default)(process.env['APP_PATH'], 'APP_PATH not set');\n(0, assert_1.default)(archToCheck === 'x64' || archToCheck === 'arm64' || archToCheck === 'universal', `Invalid architecture ${archToCheck} to check`);\ncheckMachOFiles(process.env['APP_PATH'], archToCheck).then(invalidFiles => {\n    if (invalidFiles.length > 0) {\n        console.error('\\x1b[31mThe following files are built for the wrong architecture:\\x1b[0m');\n        for (const file of invalidFiles) {\n            console.error(`\\x1b[31m${file}\\x1b[0m`);\n        }\n        process.exit(1);\n    }\n    else {\n        console.log('\\x1b[32mAll files are valid\\x1b[0m');\n    }\n}).catch(err => {\n    console.error(err);\n    process.exit(1);\n});\n//# sourceMappingURL=verify-macho.js.map"
  },
  {
    "path": "build/darwin/verify-macho.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport assert from 'assert';\nimport path from 'path';\nimport { open, stat, readdir, realpath } from 'fs/promises';\nimport { spawn, ExitCodeError } from '@malept/cross-spawn-promise';\n\nconst MACHO_PREFIX = 'Mach-O ';\nconst MACHO_64_MAGIC_LE = 0xfeedfacf;\nconst MACHO_UNIVERSAL_MAGIC_LE = 0xbebafeca;\nconst MACHO_ARM64_CPU_TYPE = new Set([\n\t0x0c000001,\n\t0x0100000c,\n]);\nconst MACHO_X86_64_CPU_TYPE = new Set([\n\t0x07000001,\n\t0x01000007,\n]);\n\nasync function read(file: string, buf: Buffer, offset: number, length: number, position: number) {\n\tlet filehandle;\n\ttry {\n\t\tfilehandle = await open(file);\n\t\tawait filehandle.read(buf, offset, length, position);\n\t} finally {\n\t\tawait filehandle?.close();\n\t}\n}\n\nasync function checkMachOFiles(appPath: string, arch: string) {\n\tconst visited = new Set();\n\tconst invalidFiles: string[] = [];\n\tconst header = Buffer.alloc(8);\n\tconst file_header_entry_size = 20;\n\tconst checkx86_64Arch = (arch === 'x64');\n\tconst checkArm64Arch = (arch === 'arm64');\n\tconst checkUniversalArch = (arch === 'universal');\n\tconst traverse = async (p: string) => {\n\t\tp = await realpath(p);\n\t\tif (visited.has(p)) {\n\t\t\treturn;\n\t\t}\n\t\tvisited.add(p);\n\n\t\tconst info = await stat(p);\n\t\tif (info.isSymbolicLink()) {\n\t\t\treturn;\n\t\t}\n\t\tif (info.isFile()) {\n\t\t\tlet fileOutput = '';\n\t\t\ttry {\n\t\t\t\tfileOutput = await spawn('file', ['--brief', '--no-pad', p]);\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof ExitCodeError) {\n\t\t\t\t\t/* silently accept error codes from \"file\" */\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (fileOutput.startsWith(MACHO_PREFIX)) {\n\t\t\t\tconsole.log(`Verifying architecture of ${p}`);\n\t\t\t\tread(p, header, 0, 8, 0).then(_ => {\n\t\t\t\t\tconst header_magic = header.readUInt32LE();\n\t\t\t\t\tif (header_magic === MACHO_64_MAGIC_LE) {\n\t\t\t\t\t\tconst cpu_type = header.readUInt32LE(4);\n\t\t\t\t\t\tif (checkUniversalArch) {\n\t\t\t\t\t\t\tinvalidFiles.push(p);\n\t\t\t\t\t\t} else if (checkArm64Arch && !MACHO_ARM64_CPU_TYPE.has(cpu_type)) {\n\t\t\t\t\t\t\tinvalidFiles.push(p);\n\t\t\t\t\t\t} else if (checkx86_64Arch && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {\n\t\t\t\t\t\t\tinvalidFiles.push(p);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (header_magic === MACHO_UNIVERSAL_MAGIC_LE) {\n\t\t\t\t\t\tconst num_binaries = header.readUInt32BE(4);\n\t\t\t\t\t\tassert.equal(num_binaries, 2);\n\t\t\t\t\t\tconst file_entries_size = file_header_entry_size * num_binaries;\n\t\t\t\t\t\tconst file_entries = Buffer.alloc(file_entries_size);\n\t\t\t\t\t\tread(p, file_entries, 0, file_entries_size, 8).then(_ => {\n\t\t\t\t\t\t\tfor (let i = 0; i < num_binaries; i++) {\n\t\t\t\t\t\t\t\tconst cpu_type = file_entries.readUInt32LE(file_header_entry_size * i);\n\t\t\t\t\t\t\t\tif (!MACHO_ARM64_CPU_TYPE.has(cpu_type) && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {\n\t\t\t\t\t\t\t\t\tinvalidFiles.push(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (info.isDirectory()) {\n\t\t\tfor (const child of await readdir(p)) {\n\t\t\t\tawait traverse(path.resolve(p, child));\n\t\t\t}\n\t\t}\n\t};\n\tawait traverse(appPath);\n\treturn invalidFiles;\n}\n\nconst archToCheck = process.argv[2];\nassert(process.env['APP_PATH'], 'APP_PATH not set');\nassert(archToCheck === 'x64' || archToCheck === 'arm64' || archToCheck === 'universal', `Invalid architecture ${archToCheck} to check`);\ncheckMachOFiles(process.env['APP_PATH'], archToCheck).then(invalidFiles => {\n\tif (invalidFiles.length > 0) {\n\t\tconsole.error('\\x1b[31mThe following files are built for the wrong architecture:\\x1b[0m');\n\t\tfor (const file of invalidFiles) {\n\t\t\tconsole.error(`\\x1b[31m${file}\\x1b[0m`);\n\t\t}\n\t\tprocess.exit(1);\n\t} else {\n\t\tconsole.log('\\x1b[32mAll files are valid\\x1b[0m');\n\t}\n}).catch(err => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"
  },
  {
    "path": "build/eslint.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst es = require('event-stream');\nconst vfs = require('vinyl-fs');\nconst { eslintFilter } = require('./filters');\n\nfunction eslint() {\n\tconst eslint = require('./gulp-eslint');\n\treturn vfs\n\t\t.src(eslintFilter, { base: '.', follow: true, allowEmpty: true })\n\t\t.pipe(\n\t\t\teslint((results) => {\n\t\t\t\tif (results.warningCount > 0 || results.errorCount > 0) {\n\t\t\t\t\tthrow new Error('eslint failed with warnings and/or errors');\n\t\t\t\t}\n\t\t\t})\n\t\t).pipe(es.through(function () { /* noop, important for the stream to end */ }));\n}\n\nif (require.main === module) {\n\teslint().on('error', (err) => {\n\t\tconsole.error();\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/filters.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Hygiene works by creating cascading subsets of all our files and\n * passing them through a sequence of checks. Here are the current subsets,\n * named according to the checks performed on them. Each subset contains\n * the following one, as described in mathematical notation:\n *\n * all ⊃ eol ⊇ indentation ⊃ copyright ⊃ typescript\n */\n\nconst { readFileSync } = require('fs');\nconst { join } = require('path');\n\nmodule.exports.all = [\n\t'*',\n\t'build/**/*',\n\t'extensions/**/*',\n\t'scripts/**/*',\n\t'src/**/*',\n\t'test/**/*',\n\t'!cli/**/*',\n\t'!out*/**',\n\t'!test/**/out/**',\n\t'!**/node_modules/**',\n];\n\nmodule.exports.unicodeFilter = [\n\t'**',\n\n\t'!**/ThirdPartyNotices.txt',\n\t'!**/ThirdPartyNotices.cli.txt',\n\t'!**/LICENSE.{txt,rtf}',\n\t'!LICENSES.chromium.html',\n\t'!**/LICENSE',\n\n\t'!**/*.{dll,exe,png,bmp,jpg,scpt,cur,ttf,woff,eot,template,ico,icns,opus,wasm}',\n\t'!**/test/**',\n\t'!**/*.test.ts',\n\t'!**/*.{d.ts,json,md}',\n\t'!**/*.mp3',\n\n\t'!build/win32/**',\n\t'!extensions/markdown-language-features/notebook-out/*.js',\n\t'!extensions/markdown-math/notebook-out/**',\n\t'!extensions/ipynb/notebook-out/**',\n\t'!extensions/notebook-renderers/renderer-out/**',\n\t'!extensions/php-language-features/src/features/phpGlobalFunctions.ts',\n\t'!extensions/terminal-suggest/src/completions/upstream/**',\n\t'!extensions/typescript-language-features/test-workspace/**',\n\t'!extensions/vscode-api-tests/testWorkspace/**',\n\t'!extensions/vscode-api-tests/testWorkspace2/**',\n\t'!extensions/**/dist/**',\n\t'!extensions/**/out/**',\n\t'!extensions/**/snippets/**',\n\t'!extensions/**/colorize-fixtures/**',\n\t'!extensions/terminal-suggest/src/shell/fishBuiltinsCache.ts',\n\n\t'!src/vs/base/browser/dompurify/**',\n\t'!src/vs/workbench/services/keybinding/browser/keyboardLayouts/**',\n];\n\nmodule.exports.indentationFilter = [\n\t'**',\n\n\t// except specific files\n\t'!**/ThirdPartyNotices.txt',\n\t'!**/ThirdPartyNotices.cli.txt',\n\t'!**/LICENSE.{txt,rtf}',\n\t'!LICENSES.chromium.html',\n\t'!**/LICENSE',\n\t'!**/*.mp3',\n\t'!src/vs/loader.js',\n\t'!src/vs/base/browser/dompurify/*',\n\t'!src/vs/base/common/marked/marked.js',\n\t'!src/vs/base/common/semver/semver.js',\n\t'!src/vs/base/node/terminateProcess.sh',\n\t'!src/vs/base/node/cpuUsage.sh',\n\t'!src/vs/editor/common/languages/highlights/*.scm',\n\t'!src/vs/editor/common/languages/injections/*.scm',\n\t'!test/unit/assert.js',\n\t'!resources/linux/snap/electron-launch',\n\t'!build/ext.js',\n\t'!build/npm/gyp/patches/gyp_spectre_mitigation_support.patch',\n\t'!product.overrides.json',\n\n\t// except specific folders\n\t'!test/automation/out/**',\n\t'!test/monaco/out/**',\n\t'!test/smoke/out/**',\n\t'!extensions/terminal-suggest/src/shell/zshBuiltinsCache.ts',\n\t'!extensions/terminal-suggest/src/shell/fishBuiltinsCache.ts',\n\t'!extensions/terminal-suggest/src/completions/upstream/**',\n\t'!extensions/typescript-language-features/test-workspace/**',\n\t'!extensions/typescript-language-features/resources/walkthroughs/**',\n\t'!extensions/typescript-language-features/package-manager/node-maintainer/**',\n\t'!extensions/markdown-math/notebook-out/**',\n\t'!extensions/ipynb/notebook-out/**',\n\t'!extensions/vscode-api-tests/testWorkspace/**',\n\t'!extensions/vscode-api-tests/testWorkspace2/**',\n\t'!build/monaco/**',\n\t'!build/win32/**',\n\n\t// except multiple specific files\n\t'!**/package.json',\n\t'!**/package-lock.json',\n\n\t// except multiple specific folders\n\t'!**/codicon/**',\n\t'!**/fixtures/**',\n\t'!**/lib/**',\n\t'!extensions/**/dist/**',\n\t'!extensions/**/out/**',\n\t'!extensions/**/snippets/**',\n\t'!extensions/**/syntaxes/**',\n\t'!extensions/**/themes/**',\n\t'!extensions/**/colorize-fixtures/**',\n\n\t// except specific file types\n\t'!src/vs/*/**/*.d.ts',\n\t'!src/typings/**/*.d.ts',\n\t'!extensions/**/*.d.ts',\n\t'!**/*.{svg,exe,png,bmp,jpg,scpt,bat,cmd,cur,ttf,woff,eot,md,ps1,psm1,template,yaml,yml,d.ts.recipe,ico,icns,plist,opus,admx,adml,wasm}',\n\t'!build/{lib,download,linux,darwin}/**/*.js',\n\t'!build/**/*.sh',\n\t'!build/azure-pipelines/**/*.js',\n\t'!build/azure-pipelines/**/*.config',\n\t'!**/Dockerfile',\n\t'!**/Dockerfile.*',\n\t'!**/*.Dockerfile',\n\t'!**/*.dockerfile',\n\n\t// except for built files\n\t'!extensions/markdown-language-features/media/*.js',\n\t'!extensions/markdown-language-features/notebook-out/*.js',\n\t'!extensions/markdown-math/notebook-out/*.js',\n\t'!extensions/ipynb/notebook-out/**',\n\t'!extensions/notebook-renderers/renderer-out/*.js',\n\t'!extensions/simple-browser/media/*.js',\n];\n\nmodule.exports.copyrightFilter = [\n\t'**',\n\t'!**/*.desktop',\n\t'!**/*.json',\n\t'!**/*.html',\n\t'!**/*.template',\n\t'!**/*.md',\n\t'!**/*.bat',\n\t'!**/*.cmd',\n\t'!**/*.ico',\n\t'!**/*.opus',\n\t'!**/*.mp3',\n\t'!**/*.icns',\n\t'!**/*.xml',\n\t'!**/*.sh',\n\t'!**/*.zsh',\n\t'!**/*.fish',\n\t'!**/*.txt',\n\t'!**/*.xpm',\n\t'!**/*.opts',\n\t'!**/*.disabled',\n\t'!**/*.code-workspace',\n\t'!**/*.js.map',\n\t'!**/*.wasm',\n\t'!build/**/*.init',\n\t'!build/linux/libcxx-fetcher.*',\n\t'!resources/linux/snap/snapcraft.yaml',\n\t'!resources/win32/bin/code.js',\n\t'!resources/completions/**',\n\t'!extensions/configuration-editing/build/inline-allOf.ts',\n\t'!extensions/markdown-language-features/media/highlight.css',\n\t'!extensions/markdown-math/notebook-out/**',\n\t'!extensions/ipynb/notebook-out/**',\n\t'!extensions/simple-browser/media/codicon.css',\n\t'!extensions/terminal-suggest/src/completions/upstream/**',\n\t'!extensions/typescript-language-features/node-maintainer/**',\n\t'!extensions/html-language-features/server/src/modes/typescript/*',\n\t'!extensions/*/server/bin/*',\n];\n\nmodule.exports.tsFormattingFilter = [\n\t'src/**/*.ts',\n\t'test/**/*.ts',\n\t'extensions/**/*.ts',\n\t'!src/vs/*/**/*.d.ts',\n\t'!src/typings/**/*.d.ts',\n\t'!extensions/**/*.d.ts',\n\t'!**/fixtures/**',\n\t'!**/typings/**',\n\t'!**/node_modules/**',\n\t'!extensions/**/colorize-fixtures/**',\n\t'!extensions/vscode-api-tests/testWorkspace/**',\n\t'!extensions/vscode-api-tests/testWorkspace2/**',\n\t'!extensions/**/*.test.ts',\n\t'!extensions/html-language-features/server/lib/jquery.d.ts',\n\t'!extensions/terminal-suggest/src/shell/zshBuiltinsCache.ts',\n\t'!extensions/terminal-suggest/src/shell/fishBuiltinsCache.ts',\n];\n\nmodule.exports.eslintFilter = [\n\t'**/*.js',\n\t'**/*.cjs',\n\t'**/*.mjs',\n\t'**/*.ts',\n\t'.eslint-plugin-local/**/*.ts',\n\t...readFileSync(join(__dirname, '..', '.eslint-ignore'))\n\t\t.toString()\n\t\t.split(/\\r\\n|\\n/)\n\t\t.filter(line => line && !line.startsWith('#'))\n\t\t.map(line => line.startsWith('!') ? line.slice(1) : `!${line}`)\n];\n\nmodule.exports.stylelintFilter = [\n\t'src/**/*.css'\n];\n"
  },
  {
    "path": "build/gulp-eslint.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst { ESLint } = require('eslint');\nconst { Transform } = require('stream');\nconst { relative } = require('path');\nconst fancyLog = require('fancy-log');\n\n/**\n * @param {Function} action - A function to handle all ESLint results\n * @returns {stream} gulp file stream\n */\nfunction eslint(action) {\n\tconst linter = new ESLint({});\n\tconst formatter = linter.loadFormatter('compact');\n\n\tconst results = [];\n\tresults.errorCount = 0;\n\tresults.warningCount = 0;\n\n\treturn transform(\n\t\tasync (file, enc, cb) => {\n\t\t\tconst filePath = relative(process.cwd(), file.path);\n\n\t\t\tif (file.isNull()) {\n\t\t\t\tcb(null, file);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (file.isStream()) {\n\t\t\t\tcb(new Error('vinyl files with Stream contents are not supported'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// TODO: Should this be checked?\n\t\t\t\tif (await linter.isPathIgnored(filePath)) {\n\t\t\t\t\tcb(null, file);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst result = (await linter.lintText(file.contents.toString(), { filePath }))[0];\n\t\t\t\tresults.push(result);\n\t\t\t\tresults.errorCount += result.errorCount;\n\t\t\t\tresults.warningCount += result.warningCount;\n\n\t\t\t\tconst message = (await formatter).format([result]);\n\t\t\t\tif (message) {\n\t\t\t\t\tfancyLog(message);\n\t\t\t\t}\n\t\t\t\tcb(null, file);\n\t\t\t} catch (error) {\n\t\t\t\tcb(error);\n\t\t\t}\n\t\t},\n\t\t(done) => {\n\t\t\ttry {\n\t\t\t\taction(results);\n\t\t\t\tdone();\n\t\t\t} catch (error) {\n\t\t\t\tdone(error);\n\t\t\t}\n\t\t});\n}\n\nfunction transform(transform, flush) {\n\treturn new Transform({\n\t\tobjectMode: true,\n\t\ttransform,\n\t\tflush\n\t});\n}\n\nmodule.exports = eslint;\n"
  },
  {
    "path": "build/gulpfile.cli.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst es = require('event-stream');\nconst gulp = require('gulp');\nconst path = require('path');\nconst fancyLog = require('fancy-log');\nconst ansiColors = require('ansi-colors');\nconst cp = require('child_process');\nconst { tmpdir } = require('os');\nconst { promises: fs, existsSync, mkdirSync, rmSync } = require('fs');\n\nconst task = require('./lib/task');\nconst watcher = require('./lib/watch');\nconst { debounce } = require('./lib/util');\nconst createReporter = require('./lib/reporter').createReporter;\n\nconst root = 'cli';\nconst rootAbs = path.resolve(__dirname, '..', root);\nconst src = `${root}/src`;\n\nconst platformOpensslDirName =\n\tprocess.platform === 'win32' ? (\n\t\tprocess.arch === 'arm64'\n\t\t\t? 'arm64-windows-static-md'\n\t\t\t: 'x64-windows-static-md')\n\t\t: process.platform === 'darwin' ? (\n\t\t\tprocess.arch === 'arm64'\n\t\t\t\t? 'arm64-osx'\n\t\t\t\t: 'x64-osx')\n\t\t\t: (process.arch === 'arm64'\n\t\t\t\t? 'arm64-linux'\n\t\t\t\t: process.arch === 'arm'\n\t\t\t\t\t? 'arm-linux'\n\t\t\t\t\t: 'x64-linux');\nconst platformOpensslDir = path.join(rootAbs, 'openssl', 'package', 'out', platformOpensslDirName);\n\nconst hasLocalRust = (() => {\n\t/** @type boolean | undefined */\n\tlet result = undefined;\n\treturn () => {\n\t\tif (result !== undefined) {\n\t\t\treturn result;\n\t\t}\n\n\t\ttry {\n\t\t\tconst r = cp.spawnSync('cargo', ['--version']);\n\t\t\tresult = r.status === 0;\n\t\t} catch (e) {\n\t\t\tresult = false;\n\t\t}\n\n\t\treturn result;\n\t};\n})();\n\nconst debounceEsStream = (fn, duration = 100) => {\n\tlet handle = undefined;\n\tlet pending = [];\n\tconst sendAll = (pending) => (event, ...args) => {\n\t\tfor (const stream of pending) {\n\t\t\tpending.emit(event, ...args);\n\t\t}\n\t};\n\n\treturn es.map(function (_, callback) {\n\t\tconsole.log('defer');\n\t\tif (handle !== undefined) {\n\t\t\tclearTimeout(handle);\n\t\t}\n\n\t\thandle = setTimeout(() => {\n\t\t\thandle = undefined;\n\n\t\t\tconst previous = pending;\n\t\t\tpending = [];\n\t\t\tfn()\n\t\t\t\t.on('error', sendAll('error'))\n\t\t\t\t.on('data', sendAll('data'))\n\t\t\t\t.on('end', sendAll('end'));\n\t\t}, duration);\n\n\t\tpending.push(this);\n\t});\n};\n\nconst compileFromSources = (callback) => {\n\tconst proc = cp.spawn('cargo', ['--color', 'always', 'build'], {\n\t\tcwd: root,\n\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\tenv: existsSync(platformOpensslDir) ? { OPENSSL_DIR: platformOpensslDir, ...process.env } : process.env\n\t});\n\n\t/** @type Buffer[] */\n\tconst stdoutErr = [];\n\tproc.stdout.on('data', d => stdoutErr.push(d));\n\tproc.stderr.on('data', d => stdoutErr.push(d));\n\tproc.on('error', callback);\n\tproc.on('exit', code => {\n\t\tif (code !== 0) {\n\t\t\tcallback(Buffer.concat(stdoutErr).toString());\n\t\t} else {\n\t\t\tcallback();\n\t\t}\n\t});\n};\n\nconst acquireBuiltOpenSSL = (callback) => {\n\tconst untar = require('gulp-untar');\n\tconst gunzip = require('gulp-gunzip');\n\tconst dir = path.join(tmpdir(), 'vscode-openssl-download');\n\tmkdirSync(dir, { recursive: true });\n\n\tcp.spawnSync(\n\t\tprocess.platform === 'win32' ? 'npm.cmd' : 'npm',\n\t\t['pack', '@vscode/openssl-prebuilt'],\n\t\t{ stdio: ['ignore', 'ignore', 'inherit'], cwd: dir }\n\t);\n\n\tgulp.src('*.tgz', { cwd: dir })\n\t\t.pipe(gunzip())\n\t\t.pipe(untar())\n\t\t.pipe(gulp.dest(`${root}/openssl`))\n\t\t.on('error', callback)\n\t\t.on('end', () => {\n\t\t\trmSync(dir, { recursive: true, force: true });\n\t\t\tcallback();\n\t\t});\n};\n\nconst compileWithOpenSSLCheck = (/** @type import('./lib/reporter').IReporter */ reporter) => es.map((_, callback) => {\n\tcompileFromSources(err => {\n\t\tif (!err) {\n\t\t\t// no-op\n\t\t} else if (err.toString().includes('Could not find directory of OpenSSL installation') && !existsSync(platformOpensslDir)) {\n\t\t\tfancyLog(ansiColors.yellow(`[cli]`), 'OpenSSL libraries not found, acquiring prebuilt bits...');\n\t\t\tacquireBuiltOpenSSL(err => {\n\t\t\t\tif (err) {\n\t\t\t\t\tcallback(err);\n\t\t\t\t} else {\n\t\t\t\t\tcompileFromSources(err => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treporter(err.toString());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallback(null, '');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\treporter(err.toString());\n\t\t}\n\n\t\tcallback(null, '');\n\t});\n});\n\nconst warnIfRustNotInstalled = () => {\n\tif (!hasLocalRust()) {\n\t\tfancyLog(ansiColors.yellow(`[cli]`), 'No local Rust install detected, compilation may fail.');\n\t\tfancyLog(ansiColors.yellow(`[cli]`), 'Get rust from: https://rustup.rs/');\n\t}\n};\n\nconst compileCliTask = task.define('compile-cli', () => {\n\twarnIfRustNotInstalled();\n\tconst reporter = createReporter('cli');\n\treturn gulp.src(`${root}/Cargo.toml`)\n\t\t.pipe(compileWithOpenSSLCheck(reporter))\n\t\t.pipe(reporter.end(true));\n});\n\n\nconst watchCliTask = task.define('watch-cli', () => {\n\twarnIfRustNotInstalled();\n\treturn watcher(`${src}/**`, { read: false })\n\t\t.pipe(debounce(compileCliTask));\n});\n\ngulp.task(compileCliTask);\ngulp.task(watchCliTask);\n"
  },
  {
    "path": "build/gulpfile.compile.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n'use strict';\n\nconst gulp = require('gulp');\nconst util = require('./lib/util');\nconst date = require('./lib/date');\nconst task = require('./lib/task');\nconst compilation = require('./lib/compilation');\n\n/**\n * @param {boolean} disableMangle\n */\nfunction makeCompileBuildTask(disableMangle) {\n\treturn task.series(\n\t\tutil.rimraf('out-build'),\n\t\tdate.writeISODate('out-build'),\n\t\tcompilation.compileApiProposalNamesTask,\n\t\tcompilation.compileTask('src', 'out-build', true, { disableMangle })\n\t);\n}\n\n// Local/PR compile, including nls and inline sources in sourcemaps, minification, no mangling\nconst compileBuildWithoutManglingTask = task.define('compile-build-without-mangling', makeCompileBuildTask(true));\ngulp.task(compileBuildWithoutManglingTask);\nexports.compileBuildWithoutManglingTask = compileBuildWithoutManglingTask;\n\n// CI compile, including nls and inline sources in sourcemaps, mangling, minification, for build\nconst compileBuildWithManglingTask = task.define('compile-build-with-mangling', makeCompileBuildTask(false));\ngulp.task(compileBuildWithManglingTask);\nexports.compileBuildWithManglingTask = compileBuildWithManglingTask;\n"
  },
  {
    "path": "build/gulpfile.editor.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst es = require('event-stream');\nconst File = require('vinyl');\nconst i18n = require('./lib/i18n');\nconst standalone = require('./lib/standalone');\nconst cp = require('child_process');\nconst compilation = require('./lib/compilation');\nconst monacoapi = require('./lib/monaco-api');\nconst fs = require('fs');\nconst filter = require('gulp-filter');\n\nconst root = path.dirname(__dirname);\nconst sha1 = getVersion(root);\nconst semver = require('./monaco/package.json').version;\nconst headerVersion = semver + '(' + sha1 + ')';\n\nconst BUNDLED_FILE_HEADER = [\n\t'/*!-----------------------------------------------------------',\n\t' * Copyright (c) Microsoft Corporation. All rights reserved.',\n\t' * Version: ' + headerVersion,\n\t' * Released under the MIT license',\n\t' * https://github.com/microsoft/vscode/blob/main/LICENSE.txt',\n\t' *-----------------------------------------------------------*/',\n\t''\n].join('\\n');\n\nconst extractEditorSrcTask = task.define('extract-editor-src', () => {\n\tconst apiusages = monacoapi.execute().usageContent;\n\tconst extrausages = fs.readFileSync(path.join(root, 'build', 'monaco', 'monaco.usage.recipe')).toString();\n\tstandalone.extractEditor({\n\t\tsourcesRoot: path.join(root, 'src'),\n\t\tentryPoints: [\n\t\t\t'vs/editor/editor.main',\n\t\t\t'vs/editor/editor.worker.start',\n\t\t\t'vs/editor/common/services/editorWebWorkerMain',\n\t\t],\n\t\tinlineEntryPoints: [\n\t\t\tapiusages,\n\t\t\textrausages\n\t\t],\n\t\ttypings: [],\n\t\tshakeLevel: 2, // 0-Files, 1-InnerFile, 2-ClassMembers\n\t\timportIgnorePattern: /\\.css$/,\n\t\tdestRoot: path.join(root, 'out-editor-src'),\n\t\ttsOutDir: '../out-monaco-editor-core/esm/vs',\n\t\tredirects: {\n\t\t\t'@vscode/tree-sitter-wasm': '../node_modules/@vscode/tree-sitter-wasm/wasm/web-tree-sitter',\n\t\t}\n\t});\n});\n\nconst compileEditorESMTask = task.define('compile-editor-esm', () => {\n\n\tconst src = 'out-editor-src';\n\tconst out = 'out-monaco-editor-core/esm';\n\n\tconst compile = compilation.createCompile(src, { build: true, emitError: true, transpileOnly: false, preserveEnglish: true });\n\tconst srcPipe = gulp.src(`${src}/**`, { base: `${src}` });\n\n\treturn (\n\t\tsrcPipe\n\t\t\t.pipe(compile())\n\t\t\t.pipe(i18n.processNlsFiles({\n\t\t\t\tout,\n\t\t\t\tfileHeader: BUNDLED_FILE_HEADER,\n\t\t\t\tlanguages: i18n.defaultLanguages,\n\t\t\t}))\n\t\t\t.pipe(filter(['**', '!**/inlineEntryPoint*', '!**/tsconfig.json', '!**/loader.js']))\n\t\t\t.pipe(gulp.dest(out))\n\t);\n});\n\n/**\n * @param {string} contents\n */\nfunction toExternalDTS(contents) {\n\tconst lines = contents.split(/\\r\\n|\\r|\\n/);\n\tlet killNextCloseCurlyBrace = false;\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i];\n\n\t\tif (killNextCloseCurlyBrace) {\n\t\t\tif ('}' === line) {\n\t\t\t\tlines[i] = '';\n\t\t\t\tkillNextCloseCurlyBrace = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (line.indexOf('    ') === 0) {\n\t\t\t\tlines[i] = line.substr(4);\n\t\t\t} else if (line.charAt(0) === '\\t') {\n\t\t\t\tlines[i] = line.substr(1);\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ('declare namespace monaco {' === line) {\n\t\t\tlines[i] = '';\n\t\t\tkillNextCloseCurlyBrace = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (line.indexOf('declare namespace monaco.') === 0) {\n\t\t\tlines[i] = line.replace('declare namespace monaco.', 'export namespace ');\n\t\t}\n\n\t\tif (line.indexOf('declare let MonacoEnvironment') === 0) {\n\t\t\tlines[i] = `declare global {\\n    let MonacoEnvironment: Environment | undefined;\\n}`;\n\t\t}\n\n\t\tif (line.indexOf('\\tMonacoEnvironment?') === 0) {\n\t\t\tlines[i] = `    MonacoEnvironment?: Environment | undefined;`;\n\t\t}\n\t}\n\treturn lines.join('\\n').replace(/\\n\\n\\n+/g, '\\n\\n');\n}\n\nconst finalEditorResourcesTask = task.define('final-editor-resources', () => {\n\treturn es.merge(\n\t\t// other assets\n\t\tes.merge(\n\t\t\tgulp.src('build/monaco/LICENSE'),\n\t\t\tgulp.src('build/monaco/ThirdPartyNotices.txt'),\n\t\t\tgulp.src('src/vs/monaco.d.ts')\n\t\t).pipe(gulp.dest('out-monaco-editor-core')),\n\n\t\t// place the .d.ts in the esm folder\n\t\tgulp.src('src/vs/monaco.d.ts')\n\t\t\t.pipe(es.through(function (data) {\n\t\t\t\tthis.emit('data', new File({\n\t\t\t\t\tpath: data.path.replace(/monaco\\.d\\.ts/, 'editor.api.d.ts'),\n\t\t\t\t\tbase: data.base,\n\t\t\t\t\tcontents: Buffer.from(toExternalDTS(data.contents.toString()))\n\t\t\t\t}));\n\t\t\t}))\n\t\t\t.pipe(gulp.dest('out-monaco-editor-core/esm/vs/editor')),\n\n\t\t// package.json\n\t\tgulp.src('build/monaco/package.json')\n\t\t\t.pipe(es.through(function (data) {\n\t\t\t\tconst json = JSON.parse(data.contents.toString());\n\t\t\t\tjson.private = false;\n\t\t\t\tdata.contents = Buffer.from(JSON.stringify(json, null, '  '));\n\t\t\t\tthis.emit('data', data);\n\t\t\t}))\n\t\t\t.pipe(gulp.dest('out-monaco-editor-core')),\n\n\t\t// version.txt\n\t\tgulp.src('build/monaco/version.txt')\n\t\t\t.pipe(es.through(function (data) {\n\t\t\t\tdata.contents = Buffer.from(`monaco-editor-core: https://github.com/microsoft/vscode/tree/${sha1}`);\n\t\t\t\tthis.emit('data', data);\n\t\t\t}))\n\t\t\t.pipe(gulp.dest('out-monaco-editor-core')),\n\n\t\t// README.md\n\t\tgulp.src('build/monaco/README-npm.md')\n\t\t\t.pipe(es.through(function (data) {\n\t\t\t\tthis.emit('data', new File({\n\t\t\t\t\tpath: data.path.replace(/README-npm\\.md/, 'README.md'),\n\t\t\t\t\tbase: data.base,\n\t\t\t\t\tcontents: data.contents\n\t\t\t\t}));\n\t\t\t}))\n\t\t\t.pipe(gulp.dest('out-monaco-editor-core')),\n\t);\n});\n\ngulp.task('extract-editor-src',\n\ttask.series(\n\t\tutil.rimraf('out-editor-src'),\n\t\textractEditorSrcTask\n\t)\n);\n\ngulp.task('editor-distro',\n\ttask.series(\n\t\ttask.parallel(\n\t\t\tutil.rimraf('out-editor-src'),\n\t\t\tutil.rimraf('out-monaco-editor-core'),\n\t\t),\n\t\textractEditorSrcTask,\n\t\tcompileEditorESMTask,\n\t\tfinalEditorResourcesTask\n\t)\n);\n\ngulp.task('monacodts', task.define('monacodts', () => {\n\tconst result = monacoapi.execute();\n\tfs.writeFileSync(result.filePath, result.content);\n\tfs.writeFileSync(path.join(root, 'src/vs/editor/common/standalone/standaloneEnums.ts'), result.enums);\n\treturn Promise.resolve(true);\n}));\n\n//#region monaco type checking\n\n/**\n * @param {boolean} watch\n */\nfunction createTscCompileTask(watch) {\n\treturn () => {\n\t\tconst createReporter = require('./lib/reporter').createReporter;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst args = ['./node_modules/.bin/tsc', '-p', './src/tsconfig.monaco.json', '--noEmit'];\n\t\t\tif (watch) {\n\t\t\t\targs.push('-w');\n\t\t\t}\n\t\t\tconst child = cp.spawn(`node`, args, {\n\t\t\t\tcwd: path.join(__dirname, '..'),\n\t\t\t\t// stdio: [null, 'pipe', 'inherit']\n\t\t\t});\n\t\t\tconst errors = [];\n\t\t\tconst reporter = createReporter('monaco');\n\n\t\t\t/** @type {NodeJS.ReadWriteStream | undefined} */\n\t\t\tlet report;\n\t\t\tconst magic = /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; // https://stackoverflow.com/questions/25245716/remove-all-ansi-colors-styles-from-strings\n\n\t\t\tchild.stdout.on('data', data => {\n\t\t\t\tlet str = String(data);\n\t\t\t\tstr = str.replace(magic, '').trim();\n\t\t\t\tif (str.indexOf('Starting compilation') >= 0 || str.indexOf('File change detected') >= 0) {\n\t\t\t\t\terrors.length = 0;\n\t\t\t\t\treport = reporter.end(false);\n\n\t\t\t\t} else if (str.indexOf('Compilation complete') >= 0) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\treport.end();\n\n\t\t\t\t} else if (str) {\n\t\t\t\t\tconst match = /(.*\\(\\d+,\\d+\\): )(.*: )(.*)/.exec(str);\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\t// trying to massage the message so that it matches the gulp-tsb error messages\n\t\t\t\t\t\t// e.g. src/vs/base/common/strings.ts(663,5): error TS2322: Type '1234' is not assignable to type 'string'.\n\t\t\t\t\t\tconst fullpath = path.join(root, match[1]);\n\t\t\t\t\t\tconst message = match[3];\n\t\t\t\t\t\treporter(fullpath + message);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treporter(str);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tchild.on('exit', resolve);\n\t\t\tchild.on('error', reject);\n\t\t});\n\t};\n}\n\nconst monacoTypecheckWatchTask = task.define('monaco-typecheck-watch', createTscCompileTask(true));\nexports.monacoTypecheckWatchTask = monacoTypecheckWatchTask;\n\nconst monacoTypecheckTask = task.define('monaco-typecheck', createTscCompileTask(false));\nexports.monacoTypecheckTask = monacoTypecheckTask;\n\n//#endregion\n"
  },
  {
    "path": "build/gulpfile.extensions.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Increase max listeners for event emitters\nrequire('events').EventEmitter.defaultMaxListeners = 100;\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst nodeUtil = require('util');\nconst es = require('event-stream');\nconst filter = require('gulp-filter');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst watcher = require('./lib/watch');\nconst createReporter = require('./lib/reporter').createReporter;\nconst glob = require('glob');\nconst root = path.dirname(__dirname);\nconst commit = getVersion(root);\nconst plumber = require('gulp-plumber');\nconst ext = require('./lib/extensions');\n\n// To save 250ms for each gulp startup, we are caching the result here\n// const compilations = glob.sync('**/tsconfig.json', {\n// \tcwd: extensionsPath,\n// \tignore: ['**/out/**', '**/node_modules/**']\n// });\nconst compilations = [\n\t'extensions/configuration-editing/tsconfig.json',\n\t'extensions/css-language-features/client/tsconfig.json',\n\t'extensions/css-language-features/server/tsconfig.json',\n\t'extensions/debug-auto-launch/tsconfig.json',\n\t'extensions/debug-server-ready/tsconfig.json',\n\t'extensions/emmet/tsconfig.json',\n\t'extensions/extension-editing/tsconfig.json',\n\t'extensions/git/tsconfig.json',\n\t'extensions/git-base/tsconfig.json',\n\t'extensions/github/tsconfig.json',\n\t'extensions/github-authentication/tsconfig.json',\n\t'extensions/grunt/tsconfig.json',\n\t'extensions/gulp/tsconfig.json',\n\t'extensions/html-language-features/client/tsconfig.json',\n\t'extensions/html-language-features/server/tsconfig.json',\n\t'extensions/ipynb/tsconfig.json',\n\t'extensions/jake/tsconfig.json',\n\t'extensions/json-language-features/client/tsconfig.json',\n\t'extensions/json-language-features/server/tsconfig.json',\n\t'extensions/markdown-language-features/preview-src/tsconfig.json',\n\t'extensions/markdown-language-features/tsconfig.json',\n\t'extensions/markdown-math/tsconfig.json',\n\t'extensions/media-preview/tsconfig.json',\n\t'extensions/merge-conflict/tsconfig.json',\n\t'extensions/terminal-suggest/tsconfig.json',\n\t'extensions/microsoft-authentication/tsconfig.json',\n\t'extensions/notebook-renderers/tsconfig.json',\n\t'extensions/npm/tsconfig.json',\n\t'extensions/php-language-features/tsconfig.json',\n\t'extensions/references-view/tsconfig.json',\n\t'extensions/search-result/tsconfig.json',\n\t'extensions/simple-browser/tsconfig.json',\n\t'extensions/tunnel-forwarding/tsconfig.json',\n\t'extensions/typescript-language-features/test-workspace/tsconfig.json',\n\t'extensions/typescript-language-features/web/tsconfig.json',\n\t'extensions/typescript-language-features/tsconfig.json',\n\t'extensions/vscode-api-tests/tsconfig.json',\n\t'extensions/vscode-colorize-tests/tsconfig.json',\n\t'extensions/vscode-colorize-perf-tests/tsconfig.json',\n\t'extensions/vscode-test-resolver/tsconfig.json',\n\n\t'.vscode/extensions/vscode-selfhost-test-provider/tsconfig.json',\n\t'.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json',\n];\n\nconst getBaseUrl = out => `https://main.vscode-cdn.net/sourcemaps/${commit}/${out}`;\n\nconst tasks = compilations.map(function (tsconfigFile) {\n\tconst absolutePath = path.join(root, tsconfigFile);\n\tconst relativeDirname = path.dirname(tsconfigFile.replace(/^(.*\\/)?extensions\\//i, ''));\n\n\tconst overrideOptions = {};\n\toverrideOptions.sourceMap = true;\n\n\tconst name = relativeDirname.replace(/\\//g, '-');\n\n\tconst srcRoot = path.dirname(tsconfigFile);\n\tconst srcBase = path.join(srcRoot, 'src');\n\tconst src = path.join(srcBase, '**');\n\tconst srcOpts = { cwd: root, base: srcBase, dot: true };\n\n\tconst out = path.join(srcRoot, 'out');\n\tconst baseUrl = getBaseUrl(out);\n\n\tlet headerId, headerOut;\n\tconst index = relativeDirname.indexOf('/');\n\tif (index < 0) {\n\t\theaderId = 'vscode.' + relativeDirname;\n\t\theaderOut = 'out';\n\t} else {\n\t\theaderId = 'vscode.' + relativeDirname.substr(0, index);\n\t\theaderOut = relativeDirname.substr(index + 1) + '/out';\n\t}\n\n\tfunction createPipeline(build, emitError, transpileOnly) {\n\t\tconst tsb = require('./lib/tsb');\n\t\tconst sourcemaps = require('gulp-sourcemaps');\n\n\t\tconst reporter = createReporter('extensions');\n\n\t\toverrideOptions.inlineSources = Boolean(build);\n\t\toverrideOptions.base = path.dirname(absolutePath);\n\n\t\tconst compilation = tsb.create(absolutePath, overrideOptions, { verbose: false, transpileOnly, transpileOnlyIncludesDts: transpileOnly, transpileWithSwc: true }, err => reporter(err.toString()));\n\n\t\tconst pipeline = function () {\n\t\t\tconst input = es.through();\n\t\t\tconst tsFilter = filter(['**/*.ts', '!**/lib/lib*.d.ts', '!**/node_modules/**'], { restore: true, dot: true });\n\t\t\tconst output = input\n\t\t\t\t.pipe(plumber({\n\t\t\t\t\terrorHandler: function (err) {\n\t\t\t\t\t\tif (err && !err.__reporter__) {\n\t\t\t\t\t\t\treporter(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}))\n\t\t\t\t.pipe(tsFilter)\n\t\t\t\t.pipe(util.loadSourcemaps())\n\t\t\t\t.pipe(compilation())\n\t\t\t\t.pipe(build ? util.stripSourceMappingURL() : es.through())\n\t\t\t\t.pipe(sourcemaps.write('.', {\n\t\t\t\t\tsourceMappingURL: !build ? null : f => `${baseUrl}/${f.relative}.map`,\n\t\t\t\t\taddComment: !!build,\n\t\t\t\t\tincludeContent: !!build,\n\t\t\t\t\t// note: trailing slash is important, else the source URLs in V8's file coverage are incorrect\n\t\t\t\t\tsourceRoot: '../src/',\n\t\t\t\t}))\n\t\t\t\t.pipe(tsFilter.restore)\n\t\t\t\t.pipe(reporter.end(emitError));\n\n\t\t\treturn es.duplex(input, output);\n\t\t};\n\n\t\t// add src-stream for project files\n\t\tpipeline.tsProjectSrc = () => {\n\t\t\treturn compilation.src(srcOpts);\n\t\t};\n\t\treturn pipeline;\n\t}\n\n\tconst cleanTask = task.define(`clean-extension-${name}`, util.rimraf(out));\n\n\tconst transpileTask = task.define(`transpile-extension:${name}`, task.series(cleanTask, () => {\n\t\tconst pipeline = createPipeline(false, true, true);\n\t\tconst nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));\n\t\tconst input = es.merge(nonts, pipeline.tsProjectSrc());\n\n\t\treturn input\n\t\t\t.pipe(pipeline())\n\t\t\t.pipe(gulp.dest(out));\n\t}));\n\n\tconst compileTask = task.define(`compile-extension:${name}`, task.series(cleanTask, () => {\n\t\tconst pipeline = createPipeline(false, true);\n\t\tconst nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));\n\t\tconst input = es.merge(nonts, pipeline.tsProjectSrc());\n\n\t\treturn input\n\t\t\t.pipe(pipeline())\n\t\t\t.pipe(gulp.dest(out));\n\t}));\n\n\tconst watchTask = task.define(`watch-extension:${name}`, task.series(cleanTask, () => {\n\t\tconst pipeline = createPipeline(false);\n\t\tconst nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));\n\t\tconst input = es.merge(nonts, pipeline.tsProjectSrc());\n\t\tconst watchInput = watcher(src, { ...srcOpts, ...{ readDelay: 200 } });\n\n\t\treturn watchInput\n\t\t\t.pipe(util.incremental(pipeline, input))\n\t\t\t.pipe(gulp.dest(out));\n\t}));\n\n\tconst compileBuildTask = task.define(`compile-build-extension-${name}`, task.series(cleanTask, () => {\n\t\tconst pipeline = createPipeline(true, true);\n\t\tconst nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));\n\t\tconst input = es.merge(nonts, pipeline.tsProjectSrc());\n\n\t\treturn input\n\t\t\t.pipe(pipeline())\n\t\t\t.pipe(gulp.dest(out));\n\t}));\n\n\t// Tasks\n\tgulp.task(transpileTask);\n\tgulp.task(compileTask);\n\tgulp.task(watchTask);\n\n\treturn { transpileTask, compileTask, watchTask, compileBuildTask };\n});\n\nconst transpileExtensionsTask = task.define('transpile-extensions', task.parallel(...tasks.map(t => t.transpileTask)));\ngulp.task(transpileExtensionsTask);\n\nconst compileExtensionsTask = task.define('compile-extensions', task.parallel(...tasks.map(t => t.compileTask)));\ngulp.task(compileExtensionsTask);\nexports.compileExtensionsTask = compileExtensionsTask;\n\nconst watchExtensionsTask = task.define('watch-extensions', task.parallel(...tasks.map(t => t.watchTask)));\ngulp.task(watchExtensionsTask);\nexports.watchExtensionsTask = watchExtensionsTask;\n\nconst compileExtensionsBuildLegacyTask = task.define('compile-extensions-build-legacy', task.parallel(...tasks.map(t => t.compileBuildTask)));\ngulp.task(compileExtensionsBuildLegacyTask);\n\n//#region Extension media\n\nconst compileExtensionMediaTask = task.define('compile-extension-media', () => ext.buildExtensionMedia(false));\ngulp.task(compileExtensionMediaTask);\nexports.compileExtensionMediaTask = compileExtensionMediaTask;\n\nconst watchExtensionMedia = task.define('watch-extension-media', () => ext.buildExtensionMedia(true));\ngulp.task(watchExtensionMedia);\nexports.watchExtensionMedia = watchExtensionMedia;\n\nconst compileExtensionMediaBuildTask = task.define('compile-extension-media-build', () => ext.buildExtensionMedia(false, '.build/extensions'));\ngulp.task(compileExtensionMediaBuildTask);\nexports.compileExtensionMediaBuildTask = compileExtensionMediaBuildTask;\n\n//#endregion\n\n//#region Azure Pipelines\n\n/**\n * Cleans the build directory for extensions\n */\nconst cleanExtensionsBuildTask = task.define('clean-extensions-build', util.rimraf('.build/extensions'));\nexports.cleanExtensionsBuildTask = cleanExtensionsBuildTask;\n\n/**\n * brings in the marketplace extensions for the build\n */\nconst bundleMarketplaceExtensionsBuildTask = task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream(false).pipe(gulp.dest('.build')));\n\n/**\n * Compiles the non-native extensions for the build\n * @note this does not clean the directory ahead of it. See {@link cleanExtensionsBuildTask} for that.\n */\nconst compileNonNativeExtensionsBuildTask = task.define('compile-non-native-extensions-build', task.series(\n\tbundleMarketplaceExtensionsBuildTask,\n\ttask.define('bundle-non-native-extensions-build', () => ext.packageNonNativeLocalExtensionsStream().pipe(gulp.dest('.build')))\n));\ngulp.task(compileNonNativeExtensionsBuildTask);\nexports.compileNonNativeExtensionsBuildTask = compileNonNativeExtensionsBuildTask;\n\n/**\n * Compiles the native extensions for the build\n * @note this does not clean the directory ahead of it. See {@link cleanExtensionsBuildTask} for that.\n */\nconst compileNativeExtensionsBuildTask = task.define('compile-native-extensions-build', () => ext.packageNativeLocalExtensionsStream().pipe(gulp.dest('.build')));\ngulp.task(compileNativeExtensionsBuildTask);\nexports.compileNativeExtensionsBuildTask = compileNativeExtensionsBuildTask;\n\n/**\n * Compiles the extensions for the build.\n * This is essentially a helper task that combines {@link cleanExtensionsBuildTask}, {@link compileNonNativeExtensionsBuildTask} and {@link compileNativeExtensionsBuildTask}\n */\nconst compileAllExtensionsBuildTask = task.define('compile-extensions-build', task.series(\n\tcleanExtensionsBuildTask,\n\tbundleMarketplaceExtensionsBuildTask,\n\ttask.define('bundle-extensions-build', () => ext.packageAllLocalExtensionsStream(false, false).pipe(gulp.dest('.build'))),\n));\ngulp.task(compileAllExtensionsBuildTask);\nexports.compileAllExtensionsBuildTask = compileAllExtensionsBuildTask;\n\n// This task is run in the compilation stage of the CI pipeline. We only compile the non-native extensions since those can be fully built regardless of platform.\n// This defers the native extensions to the platform specific stage of the CI pipeline.\ngulp.task(task.define('extensions-ci', task.series(compileNonNativeExtensionsBuildTask, compileExtensionMediaBuildTask)));\n\nconst compileExtensionsBuildPullRequestTask = task.define('compile-extensions-build-pr', task.series(\n\tcleanExtensionsBuildTask,\n\tbundleMarketplaceExtensionsBuildTask,\n\ttask.define('bundle-extensions-build-pr', () => ext.packageAllLocalExtensionsStream(false, true).pipe(gulp.dest('.build'))),\n));\ngulp.task(compileExtensionsBuildPullRequestTask);\n\n// This task is run in the compilation stage of the PR pipeline. We compile all extensions in it to verify compilation.\ngulp.task(task.define('extensions-ci-pr', task.series(compileExtensionsBuildPullRequestTask, compileExtensionMediaBuildTask)));\n\n//#endregion\n\nconst compileWebExtensionsTask = task.define('compile-web', () => buildWebExtensions(false));\ngulp.task(compileWebExtensionsTask);\nexports.compileWebExtensionsTask = compileWebExtensionsTask;\n\nconst watchWebExtensionsTask = task.define('watch-web', () => buildWebExtensions(true));\ngulp.task(watchWebExtensionsTask);\nexports.watchWebExtensionsTask = watchWebExtensionsTask;\n\n/**\n * @param {boolean} isWatch\n */\nasync function buildWebExtensions(isWatch) {\n\tconst extensionsPath = path.join(root, 'extensions');\n\tconst webpackConfigLocations = await nodeUtil.promisify(glob)(\n\t\tpath.join(extensionsPath, '**', 'extension-browser.webpack.config.js'),\n\t\t{ ignore: ['**/node_modules'] }\n\t);\n\treturn ext.webpackExtensions('packaging web extension', isWatch, webpackConfigLocations.map(configPath => ({ configPath })));\n}\n"
  },
  {
    "path": "build/gulpfile.hygiene.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst gulp = require('gulp');\nconst es = require('event-stream');\nconst path = require('path');\nconst task = require('./lib/task');\nconst { hygiene } = require('./hygiene');\n\n/**\n * @param {string} actualPath\n */\nfunction checkPackageJSON(actualPath) {\n\tconst actual = require(path.join(__dirname, '..', actualPath));\n\tconst rootPackageJSON = require('../package.json');\n\tconst checkIncluded = (set1, set2) => {\n\t\tfor (const depName in set1) {\n\t\t\tconst depVersion = set1[depName];\n\t\t\tconst rootDepVersion = set2[depName];\n\t\t\tif (!rootDepVersion) {\n\t\t\t\t// missing in root is allowed\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (depVersion !== rootDepVersion) {\n\t\t\t\tthis.emit(\n\t\t\t\t\t'error',\n\t\t\t\t\t`The dependency ${depName} in '${actualPath}' (${depVersion}) is different than in the root package.json (${rootDepVersion})`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\tcheckIncluded(actual.dependencies, rootPackageJSON.dependencies);\n\tcheckIncluded(actual.devDependencies, rootPackageJSON.devDependencies);\n}\n\nconst checkPackageJSONTask = task.define('check-package-json', () => {\n\treturn gulp.src('package.json').pipe(\n\t\tes.through(function () {\n\t\t\tcheckPackageJSON.call(this, 'remote/package.json');\n\t\t\tcheckPackageJSON.call(this, 'remote/web/package.json');\n\t\t\tcheckPackageJSON.call(this, 'build/package.json');\n\t\t})\n\t);\n});\ngulp.task(checkPackageJSONTask);\n\nconst hygieneTask = task.define('hygiene', task.series(checkPackageJSONTask, () => hygiene(undefined, false)));\ngulp.task(hygieneTask);\n"
  },
  {
    "path": "build/gulpfile.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\n// Increase max listeners for event emitters\nrequire('events').EventEmitter.defaultMaxListeners = 100;\n\nconst gulp = require('gulp');\nconst util = require('./lib/util');\nconst task = require('./lib/task');\nconst { transpileClientSWC, transpileTask, compileTask, watchTask, compileApiProposalNamesTask, watchApiProposalNamesTask } = require('./lib/compilation');\nconst { monacoTypecheckTask/* , monacoTypecheckWatchTask */ } = require('./gulpfile.editor');\nconst { compileExtensionsTask, watchExtensionsTask, compileExtensionMediaTask } = require('./gulpfile.extensions');\n\n// API proposal names\ngulp.task(compileApiProposalNamesTask);\ngulp.task(watchApiProposalNamesTask);\n\n// SWC Client Transpile\nconst transpileClientSWCTask = task.define('transpile-client-esbuild', task.series(util.rimraf('out'), transpileTask('src', 'out', true)));\ngulp.task(transpileClientSWCTask);\n\n// Transpile only\nconst transpileClientTask = task.define('transpile-client', task.series(util.rimraf('out'), transpileTask('src', 'out')));\ngulp.task(transpileClientTask);\n\n// Fast compile for development time\nconst compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));\ngulp.task(compileClientTask);\n\nconst watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask)));\ngulp.task(watchClientTask);\n\n// All\nconst _compileTask = task.define('compile', task.parallel(monacoTypecheckTask, compileClientTask, compileExtensionsTask, compileExtensionMediaTask));\ngulp.task(_compileTask);\n\ngulp.task(task.define('watch', task.parallel(/* monacoTypecheckWatchTask, */ watchClientTask, watchExtensionsTask)));\n\n// Default\ngulp.task('default', _compileTask);\n\nprocess.on('unhandledRejection', (reason, p) => {\n\tconsole.log('Unhandled Rejection at: Promise', p, 'reason:', reason);\n\tprocess.exit(1);\n});\n\n// Load all the gulpfiles only if running tasks other than the editor tasks\nrequire('glob').sync('gulpfile.*.js', { cwd: __dirname })\n\t.forEach(f => require(`./${f}`));\n"
  },
  {
    "path": "build/gulpfile.reh.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst es = require('event-stream');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst optimize = require('./lib/optimize');\nconst { inlineMeta } = require('./lib/inlineMeta');\nconst product = require('../product.json');\nconst rename = require('gulp-rename');\nconst replace = require('gulp-replace');\nconst filter = require('gulp-filter');\nconst { getProductionDependencies } = require('./lib/dependencies');\nconst { readISODate } = require('./lib/date');\nconst vfs = require('vinyl-fs');\nconst packageJson = require('../package.json');\nconst flatmap = require('gulp-flatmap');\nconst gunzip = require('gulp-gunzip');\nconst File = require('vinyl');\nconst fs = require('fs');\nconst glob = require('glob');\nconst { compileBuildWithManglingTask } = require('./gulpfile.compile');\nconst { cleanExtensionsBuildTask, compileNonNativeExtensionsBuildTask, compileNativeExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions');\nconst { vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web');\nconst cp = require('child_process');\nconst log = require('fancy-log');\nconst buildfile = require('./buildfile');\n\nconst REPO_ROOT = path.dirname(__dirname);\nconst commit = getVersion(REPO_ROOT);\nconst BUILD_ROOT = path.dirname(REPO_ROOT);\nconst REMOTE_FOLDER = path.join(REPO_ROOT, 'remote');\n\n// Targets\n\nconst BUILD_TARGETS = [\n\t{ platform: 'win32', arch: 'x64' },\n\t{ platform: 'win32', arch: 'arm64' },\n\t{ platform: 'darwin', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'arm64' },\n\t{ platform: 'linux', arch: 'x64' },\n\t{ platform: 'linux', arch: 'armhf' },\n\t{ platform: 'linux', arch: 'arm64' },\n\t{ platform: 'alpine', arch: 'arm64' },\n\t// legacy: we use to ship only one alpine so it was put in the arch, but now we ship\n\t// multiple alpine images and moved to a better model (alpine as the platform)\n\t{ platform: 'linux', arch: 'alpine' },\n];\n\nconst serverResourceIncludes = [\n\n\t// NLS\n\t'out-build/nls.messages.json',\n\n\t// Process monitor\n\t'out-build/vs/base/node/cpuUsage.sh',\n\t'out-build/vs/base/node/ps.sh',\n\n\t// External Terminal\n\t'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',\n\n\t// Terminal shell integration\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/CodeTabExpansion.psm1',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/GitTabExpansion.psm1',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-env.zsh',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-profile.zsh',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-login.zsh',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration.fish',\n\n];\n\nconst serverResourceExcludes = [\n\t'!out-build/vs/**/{electron-sandbox,electron-main,electron-utility}/**',\n\t'!out-build/vs/editor/standalone/**',\n\t'!out-build/vs/workbench/**/*-tb.png',\n\t'!**/test/**'\n];\n\nconst serverResources = [\n\t...serverResourceIncludes,\n\t...serverResourceExcludes\n];\n\nconst serverWithWebResourceIncludes = [\n\t...serverResourceIncludes,\n\t'out-build/vs/code/browser/workbench/*.html',\n\t...vscodeWebResourceIncludes\n];\n\nconst serverWithWebResourceExcludes = [\n\t...serverResourceExcludes,\n\t'!out-build/vs/code/**/*-dev.html'\n];\n\nconst serverWithWebResources = [\n\t...serverWithWebResourceIncludes,\n\t...serverWithWebResourceExcludes\n];\nconst serverEntryPoints = buildfile.codeServer;\n\nconst webEntryPoints = [\n\tbuildfile.workerEditor,\n\tbuildfile.workerExtensionHost,\n\tbuildfile.workerNotebook,\n\tbuildfile.workerLanguageDetection,\n\tbuildfile.workerLocalFileSearch,\n\tbuildfile.workerOutputLinks,\n\tbuildfile.workerBackgroundTokenization,\n\tbuildfile.keyboardMaps,\n\tbuildfile.codeWeb\n].flat();\n\nconst serverWithWebEntryPoints = [\n\n\t// Include all of server\n\t...serverEntryPoints,\n\n\t// Include all of web\n\t...webEntryPoints,\n].flat();\n\nconst bootstrapEntryPoints = [\n\t'out-build/server-main.js',\n\t'out-build/server-cli.js',\n\t'out-build/bootstrap-fork.js'\n];\n\nfunction getNodeVersion() {\n\tconst npmrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.npmrc'), 'utf8');\n\tconst nodeVersion = /^target=\"(.*)\"$/m.exec(npmrc)[1];\n\tconst internalNodeVersion = /^ms_build_id=\"(.*)\"$/m.exec(npmrc)[1];\n\treturn { nodeVersion, internalNodeVersion };\n}\n\nfunction getNodeChecksum(expectedName) {\n\tconst nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8');\n\tfor (const line of nodeJsChecksums.split('\\n')) {\n\t\tconst [checksum, name] = line.split(/\\s+/);\n\t\tif (name === expectedName) {\n\t\t\treturn checksum;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction extractAlpinefromDocker(nodeVersion, platform, arch) {\n\tconst imageName = arch === 'arm64' ? 'arm64v8/node' : 'node';\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`);\n\tconst contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \\`which node\\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' });\n\treturn es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]);\n}\n\nconst { nodeVersion, internalNodeVersion } = getNodeVersion();\n\nBUILD_TARGETS.forEach(({ platform, arch }) => {\n\tgulp.task(task.define(`node-${platform}-${arch}`, () => {\n\t\tconst nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`);\n\n\t\tif (!fs.existsSync(nodePath)) {\n\t\t\tutil.rimraf(nodePath);\n\n\t\t\treturn nodejs(platform, arch)\n\t\t\t\t.pipe(vfs.dest(nodePath));\n\t\t}\n\n\t\treturn Promise.resolve(null);\n\t}));\n});\n\nconst defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`);\n\nif (defaultNodeTask) {\n\tgulp.task(task.define('node', defaultNodeTask));\n}\n\nfunction nodejs(platform, arch) {\n\tconst { fetchUrls, fetchGithub } = require('./lib/fetch');\n\tconst untar = require('gulp-untar');\n\n\tif (arch === 'armhf') {\n\t\tarch = 'armv7l';\n\t} else if (arch === 'alpine') {\n\t\tplatform = 'alpine';\n\t\tarch = 'x64';\n\t}\n\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`);\n\n\tconst glibcPrefix = process.env['VSCODE_NODE_GLIBC'] ?? '';\n\tlet expectedName;\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\texpectedName = product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\t`win-${arch}-node.exe` : `win-${arch}/node.exe`;\n\t\t\tbreak;\n\n\t\tcase 'darwin':\n\t\t\texpectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`;\n\t\t\tbreak;\n\t\tcase 'linux':\n\t\t\texpectedName = `node-v${nodeVersion}${glibcPrefix}-${platform}-${arch}.tar.gz`;\n\t\t\tbreak;\n\t\tcase 'alpine':\n\t\t\texpectedName = `node-v${nodeVersion}-linux-${arch}-musl.tar.gz`;\n\t\t\tbreak;\n\t}\n\tconst checksumSha256 = getNodeChecksum(expectedName);\n\n\tif (checksumSha256) {\n\t\tlog(`Using SHA256 checksum for checking integrity: ${checksumSha256}`);\n\t} else {\n\t\tlog.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`);\n\t}\n\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 }))\n\t\t\t\t.pipe(rename('node.exe'));\n\t\tcase 'darwin':\n\t\tcase 'linux':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 })\n\t\t\t).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t.pipe(rename('node'));\n\t\tcase 'alpine':\n\t\t\treturn product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 })\n\t\t\t\t\t.pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t\t.pipe(rename('node'))\n\t\t\t\t: extractAlpinefromDocker(nodeVersion, platform, arch);\n\t}\n}\n\nfunction packageTask(type, platform, arch, sourceFolderName, destinationFolderName) {\n\tconst destination = path.join(BUILD_ROOT, destinationFolderName);\n\n\treturn () => {\n\t\tconst json = require('gulp-json-editor');\n\n\t\tconst src = gulp.src(sourceFolderName + '/**', { base: '.' })\n\t\t\t.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))\n\t\t\t.pipe(util.setExecutableBit(['**/*.sh']))\n\t\t\t.pipe(filter(['**', '!**/*.js.map']));\n\n\t\tconst workspaceExtensionPoints = ['debuggers', 'jsonValidation'];\n\t\tconst isUIExtension = (manifest) => {\n\t\t\tswitch (manifest.extensionKind) {\n\t\t\t\tcase 'ui': return true;\n\t\t\t\tcase 'workspace': return false;\n\t\t\t\tdefault: {\n\t\t\t\t\tif (manifest.main) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Default is UI Extension\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst localWorkspaceExtensions = glob.sync('extensions/*/package.json')\n\t\t\t.filter((extensionPath) => {\n\t\t\t\tif (type === 'reh-web') {\n\t\t\t\t\treturn true; // web: ship all extensions for now\n\t\t\t\t}\n\n\t\t\t\t// Skip shipping UI extensions because the client side will have them anyways\n\t\t\t\t// and they'd just increase the download without being used\n\t\t\t\tconst manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString());\n\t\t\t\treturn !isUIExtension(manifest);\n\t\t\t}).map((extensionPath) => path.basename(path.dirname(extensionPath)))\n\t\t\t.filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions\n\t\tconst marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions\n\t\t\t.filter(entry => !entry.platforms || new Set(entry.platforms).has(platform))\n\t\t\t.filter(entry => !entry.clientOnly)\n\t\t\t.map(entry => entry.name);\n\t\tconst extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions]\n\t\t\t.map(name => `.build/extensions/${name}/**`);\n\n\t\tconst extensions = gulp.src(extensionPaths, { base: '.build', dot: true });\n\t\tconst extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true });\n\t\tconst sources = es.merge(src, extensions, extensionsCommonDependencies)\n\t\t\t.pipe(filter(['**', '!**/*.js.map'], { dot: true }));\n\n\t\tlet version = packageJson.version;\n\t\tconst quality = product.quality;\n\n\t\tif (quality && quality !== 'stable') {\n\t\t\tversion += '-' + quality;\n\t\t}\n\n\t\tconst name = product.nameShort;\n\n\t\tlet packageJsonContents;\n\t\tconst packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' })\n\t\t\t.pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined, type: 'module' }))\n\t\t\t.pipe(es.through(function (file) {\n\t\t\t\tpackageJsonContents = file.contents.toString();\n\t\t\t\tthis.emit('data', file);\n\t\t\t}));\n\n\t\tlet productJsonContents;\n\t\tconst productJsonStream = gulp.src(['product.json'], { base: '.' })\n\t\t\t.pipe(json({ commit, date: readISODate('out-build'), version }))\n\t\t\t.pipe(es.through(function (file) {\n\t\t\t\tproductJsonContents = file.contents.toString();\n\t\t\t\tthis.emit('data', file);\n\t\t\t}));\n\n\t\tconst license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true });\n\n\t\tconst jsFilter = util.filter(data => !data.isDirectory() && /\\.js$/.test(data.path));\n\n\t\tconst productionDependencies = getProductionDependencies(REMOTE_FOLDER);\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();\n\t\tconst deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })\n\t\t\t// filter out unnecessary files, no source maps in server build\n\t\t\t.pipe(filter(['**', '!**/package-lock.json', '!**/*.js.map']))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))\n\t\t\t.pipe(jsFilter)\n\t\t\t.pipe(util.stripSourceMappingURL())\n\t\t\t.pipe(jsFilter.restore);\n\n\t\tconst nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`;\n\t\tconst node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true });\n\n\t\tlet web = [];\n\t\tif (type === 'reh-web') {\n\t\t\tweb = [\n\t\t\t\t'resources/server/favicon.ico',\n\t\t\t\t'resources/server/code-192.png',\n\t\t\t\t'resources/server/code-512.png',\n\t\t\t\t'resources/server/manifest.json'\n\t\t\t].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource)));\n\t\t}\n\n\t\tconst all = es.merge(\n\t\t\tpackageJsonStream,\n\t\t\tproductJsonStream,\n\t\t\tlicense,\n\t\t\tsources,\n\t\t\tdeps,\n\t\t\tnode,\n\t\t\t...web\n\t\t);\n\n\t\tlet result = all\n\t\t\t.pipe(util.skipDirectories())\n\t\t\t.pipe(util.fixWin32DirectoryPermissions());\n\n\t\tif (platform === 'win32') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/code-server.cmd', { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}.cmd`)),\n\t\t\t);\n\t\t} else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.sh`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit())\n\t\t\t);\n\t\t}\n\n\t\tif (platform === 'linux' || platform === 'alpine') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src(`resources/server/bin/helpers/check-requirements-linux.sh`, { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/helpers/check-requirements.sh`))\n\t\t\t\t\t.pipe(util.setExecutableBit())\n\t\t\t);\n\t\t}\n\n\t\tresult = inlineMeta(result, {\n\t\t\ttargetPaths: bootstrapEntryPoints,\n\t\t\tpackageJsonFn: () => packageJsonContents,\n\t\t\tproductJsonFn: () => productJsonContents\n\t\t});\n\n\t\treturn result.pipe(vfs.dest(destination));\n\t};\n}\n\n/**\n * @param {object} product The parsed product.json file contents\n */\nfunction tweakProductForServerWeb(product) {\n\tconst result = { ...product };\n\tdelete result.webEndpointUrlTemplate;\n\treturn result;\n}\n\n['reh', 'reh-web'].forEach(type => {\n\tconst bundleTask = task.define(`bundle-vscode-${type}`, task.series(\n\t\tutil.rimraf(`out-vscode-${type}`),\n\t\toptimize.bundleTask(\n\t\t\t{\n\t\t\t\tout: `out-vscode-${type}`,\n\t\t\t\tesm: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: [\n\t\t\t\t\t\t...(type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints),\n\t\t\t\t\t\t...bootstrapEntryPoints\n\t\t\t\t\t],\n\t\t\t\t\tresources: type === 'reh' ? serverResources : serverWithWebResources,\n\t\t\t\t\tfileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product)\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t));\n\n\tconst minifyTask = task.define(`minify-vscode-${type}`, task.series(\n\t\tbundleTask,\n\t\tutil.rimraf(`out-vscode-${type}-min`),\n\t\toptimize.minifyTask(`out-vscode-${type}`, `https://main.vscode-cdn.net/sourcemaps/${commit}/core`)\n\t));\n\tgulp.task(minifyTask);\n\n\tBUILD_TARGETS.forEach(buildTarget => {\n\t\tconst dashed = (str) => (str ? `-${str}` : ``);\n\t\tconst platform = buildTarget.platform;\n\t\tconst arch = buildTarget.arch;\n\n\t\t['', 'min'].forEach(minified => {\n\t\t\tconst sourceFolderName = `out-vscode-${type}${dashed(minified)}`;\n\t\t\tconst destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`;\n\n\t\t\tconst serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series(\n\t\t\t\tcompileNativeExtensionsBuildTask,\n\t\t\t\tgulp.task(`node-${platform}-${arch}`),\n\t\t\t\tutil.rimraf(path.join(BUILD_ROOT, destinationFolderName)),\n\t\t\t\tpackageTask(type, platform, arch, sourceFolderName, destinationFolderName)\n\t\t\t));\n\t\t\tgulp.task(serverTaskCI);\n\n\t\t\tconst serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series(\n\t\t\t\tcompileBuildWithManglingTask,\n\t\t\t\tcleanExtensionsBuildTask,\n\t\t\t\tcompileNonNativeExtensionsBuildTask,\n\t\t\t\tcompileExtensionMediaBuildTask,\n\t\t\t\tminified ? minifyTask : bundleTask,\n\t\t\t\tserverTaskCI\n\t\t\t));\n\t\t\tgulp.task(serverTask);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "build/gulpfile.scan.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst task = require('./lib/task');\nconst util = require('./lib/util');\nconst electron = require('@vscode/gulp-electron');\nconst { config } = require('./lib/electron');\nconst filter = require('gulp-filter');\nconst deps = require('./lib/dependencies');\nconst { existsSync, readdirSync } = require('fs');\n\nconst root = path.dirname(__dirname);\n\nconst BUILD_TARGETS = [\n\t{ platform: 'win32', arch: 'x64' },\n\t{ platform: 'win32', arch: 'arm64' },\n\t{ platform: 'darwin', arch: null, opts: { stats: true } },\n\t{ platform: 'linux', arch: 'x64' },\n\t{ platform: 'linux', arch: 'armhf' },\n\t{ platform: 'linux', arch: 'arm64' },\n];\n\n// The following files do not have PDBs downloaded for them during the download symbols process.\nconst excludedCheckList = ['d3dcompiler_47.dll'];\n\nBUILD_TARGETS.forEach(buildTarget => {\n\tconst dashed = (/** @type {string | null} */ str) => (str ? `-${str}` : ``);\n\tconst platform = buildTarget.platform;\n\tconst arch = buildTarget.arch;\n\n\tconst destinationExe = path.join(path.dirname(root), 'scanbin', `VSCode${dashed(platform)}${dashed(arch)}`, 'bin');\n\tconst destinationPdb = path.join(path.dirname(root), 'scanbin', `VSCode${dashed(platform)}${dashed(arch)}`, 'pdb');\n\n\tconst tasks = [];\n\n\t// removal tasks\n\ttasks.push(util.rimraf(destinationExe), util.rimraf(destinationPdb));\n\n\t// electron\n\ttasks.push(() => electron.dest(destinationExe, { ...config, platform, arch: arch === 'armhf' ? 'arm' : arch }));\n\n\t// pdbs for windows\n\tif (platform === 'win32') {\n\t\ttasks.push(\n\t\t\t() => electron.dest(destinationPdb, { ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, pdbs: true }),\n\t\t\t() => confirmPdbsExist(destinationExe, destinationPdb)\n\t\t);\n\t}\n\n\tif (platform === 'linux') {\n\t\ttasks.push(\n\t\t\t() => electron.dest(destinationPdb, { ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, symbols: true })\n\t\t);\n\t}\n\n\t// node modules\n\ttasks.push(\n\t\tnodeModules(destinationExe, destinationPdb, platform)\n\t);\n\n\tconst setupSymbolsTask = task.define(`vscode-symbols${dashed(platform)}${dashed(arch)}`,\n\t\ttask.series(...tasks)\n\t);\n\n\tgulp.task(setupSymbolsTask);\n});\n\nfunction getProductionDependencySources() {\n\tconst productionDependencies = deps.getProductionDependencies(root);\n\treturn productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();\n}\n\nfunction nodeModules(destinationExe, destinationPdb, platform) {\n\n\tconst exe = () => {\n\t\treturn gulp.src(getProductionDependencySources(), { base: '.', dot: true })\n\t\t\t.pipe(filter([\n\t\t\t\t'**/*.node',\n\t\t\t\t// Exclude these paths.\n\t\t\t\t// We don't build the prebuilt node files so we don't scan them\n\t\t\t\t'!**/prebuilds/**/*.node',\n\t\t\t\t// These are 3rd party modules that we should ignore\n\t\t\t\t'!**/@parcel/watcher/**/*']))\n\t\t\t.pipe(gulp.dest(destinationExe));\n\t};\n\n\tif (platform === 'win32') {\n\t\tconst pdb = () => {\n\t\t\treturn gulp.src(getProductionDependencySources(), { base: '.', dot: true })\n\t\t\t\t.pipe(filter(['**/*.pdb']))\n\t\t\t\t.pipe(gulp.dest(destinationPdb));\n\t\t};\n\n\t\treturn gulp.parallel(exe, pdb);\n\t}\n\n\tif (platform === 'linux') {\n\t\tconst pdb = () => {\n\t\t\treturn gulp.src(getProductionDependencySources(), { base: '.', dot: true })\n\t\t\t\t.pipe(filter(['**/*.sym']))\n\t\t\t\t.pipe(gulp.dest(destinationPdb));\n\t\t};\n\n\t\treturn gulp.parallel(exe, pdb);\n\t}\n\n\treturn exe;\n}\n\nfunction confirmPdbsExist(destinationExe, destinationPdb) {\n\treaddirSync(destinationExe).forEach(file => {\n\t\tif (excludedCheckList.includes(file)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (file.endsWith('.dll') || file.endsWith('.exe')) {\n\t\t\tconst pdb = `${file}.pdb`;\n\t\t\tif (!existsSync(path.join(destinationPdb, pdb))) {\n\t\t\t\tthrow new Error(`Missing pdb file for ${file}. Tried searching for ${pdb} in ${destinationPdb}.`);\n\t\t\t}\n\t\t}\n\t});\n\treturn Promise.resolve();\n}\n"
  },
  {
    "path": "build/gulpfile.vscode.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst fs = require('fs');\nconst path = require('path');\nconst es = require('event-stream');\nconst vfs = require('vinyl-fs');\nconst rename = require('gulp-rename');\nconst replace = require('gulp-replace');\nconst filter = require('gulp-filter');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst { readISODate } = require('./lib/date');\nconst task = require('./lib/task');\nconst buildfile = require('./buildfile');\nconst optimize = require('./lib/optimize');\nconst { inlineMeta } = require('./lib/inlineMeta');\nconst root = path.dirname(__dirname);\nconst commit = getVersion(root);\nconst packageJson = require('../package.json');\nconst product = require('../product.json');\nconst crypto = require('crypto');\nconst i18n = require('./lib/i18n');\nconst { getProductionDependencies } = require('./lib/dependencies');\nconst { config } = require('./lib/electron');\nconst createAsar = require('./lib/asar').createAsar;\nconst minimist = require('minimist');\nconst { compileBuildWithoutManglingTask, compileBuildWithManglingTask } = require('./gulpfile.compile');\nconst { compileNonNativeExtensionsBuildTask, compileNativeExtensionsBuildTask, compileAllExtensionsBuildTask, compileExtensionMediaBuildTask, cleanExtensionsBuildTask } = require('./gulpfile.extensions');\nconst { promisify } = require('util');\nconst glob = promisify(require('glob'));\nconst rcedit = promisify(require('rcedit'));\n\n// Build\nconst vscodeEntryPoints = [\n\tbuildfile.workerEditor,\n\tbuildfile.workerExtensionHost,\n\tbuildfile.workerNotebook,\n\tbuildfile.workerLanguageDetection,\n\tbuildfile.workerLocalFileSearch,\n\tbuildfile.workerProfileAnalysis,\n\tbuildfile.workerOutputLinks,\n\tbuildfile.workerBackgroundTokenization,\n\tbuildfile.workbenchDesktop,\n\tbuildfile.code\n].flat();\n\nconst vscodeResourceIncludes = [\n\n\t// NLS\n\t'out-build/nls.messages.json',\n\t'out-build/nls.keys.json',\n\n\t// Workbench\n\t'out-build/vs/code/electron-sandbox/workbench/workbench.html',\n\n\t// Electron Preload\n\t'out-build/vs/base/parts/sandbox/electron-sandbox/preload.js',\n\t'out-build/vs/base/parts/sandbox/electron-sandbox/preload-aux.js',\n\n\t// Node Scripts\n\t'out-build/vs/base/node/{terminateProcess.sh,cpuUsage.sh,ps.sh}',\n\n\t// Touchbar\n\t'out-build/vs/workbench/browser/parts/editor/media/*.png',\n\t'out-build/vs/workbench/contrib/debug/browser/media/*.png',\n\n\t// External Terminal\n\t'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',\n\n\t// Terminal shell integration\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/*.fish',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/*.ps1',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/*.psm1',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/*.sh',\n\t'out-build/vs/workbench/contrib/terminal/common/scripts/*.zsh',\n\n\t// Accessibility Signals\n\t'out-build/vs/platform/accessibilitySignal/browser/media/*.mp3',\n\n\t// Welcome\n\t'out-build/vs/workbench/contrib/welcomeGettingStarted/common/media/**/*.{svg,png}',\n\n\t// Extensions\n\t'out-build/vs/workbench/contrib/extensions/browser/media/{theme-icon.png,language-icon.svg}',\n\t'out-build/vs/workbench/services/extensionManagement/common/media/*.{svg,png}',\n\n\t// Webview\n\t'out-build/vs/workbench/contrib/webview/browser/pre/*.{js,html}',\n\n\t// Extension Host Worker\n\t'out-build/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html',\n\n\t// Process Explorer\n\t'out-build/vs/code/electron-sandbox/processExplorer/processExplorer.html',\n\n\t// Tree Sitter highlights\n\t'out-build/vs/editor/common/languages/highlights/*.scm',\n\n\t// Tree Sitter injection queries\n\t'out-build/vs/editor/common/languages/injections/*.scm',\n];\n\nconst vscodeResources = [\n\n\t// Includes\n\t...vscodeResourceIncludes,\n\n\t// Excludes\n\t'!out-build/vs/code/browser/**',\n\t'!out-build/vs/editor/standalone/**',\n\t'!out-build/vs/code/**/*-dev.html',\n\t'!out-build/vs/workbench/contrib/issue/**/*-dev.html',\n\t'!**/test/**'\n];\n\nconst bootstrapEntryPoints = [\n\t'out-build/main.js',\n\t'out-build/cli.js',\n\t'out-build/bootstrap-fork.js'\n];\n\nconst bundleVSCodeTask = task.define('bundle-vscode', task.series(\n\tutil.rimraf('out-vscode'),\n\t// Optimize: bundles source files automatically based on\n\t// import statements based on the passed in entry points.\n\t// In addition, concat window related bootstrap files into\n\t// a single file.\n\toptimize.bundleTask(\n\t\t{\n\t\t\tout: 'out-vscode',\n\t\t\tesm: {\n\t\t\t\tsrc: 'out-build',\n\t\t\t\tentryPoints: [\n\t\t\t\t\t...vscodeEntryPoints,\n\t\t\t\t\t...bootstrapEntryPoints\n\t\t\t\t],\n\t\t\t\tresources: vscodeResources,\n\t\t\t\tfileContentMapper: filePath => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tfilePath.endsWith('vs/code/electron-sandbox/workbench/workbench.js') ||\n\t\t\t\t\t\tfilePath.endsWith('vs/code/electron-sandbox/processExplorer/processExplorer.js')) {\n\t\t\t\t\t\treturn async (content) => {\n\t\t\t\t\t\t\tconst bootstrapWindowContent = await fs.promises.readFile(path.join(root, 'out-build', 'bootstrap-window.js'), 'utf-8');\n\t\t\t\t\t\t\treturn `${bootstrapWindowContent}\\n${content}`; // prepend bootstrap-window.js content to entry points that are Electron windows\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t},\n\t\t\t\tskipTSBoilerplateRemoval: entryPoint =>\n\t\t\t\t\tentryPoint === 'vs/code/electron-sandbox/workbench/workbench' ||\n\t\t\t\t\tentryPoint === 'vs/code/electron-sandbox/processExplorer/processExplorer',\n\t\t\t}\n\t\t}\n\t)\n));\ngulp.task(bundleVSCodeTask);\n\nconst sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;\nconst minifyVSCodeTask = task.define('minify-vscode', task.series(\n\tbundleVSCodeTask,\n\tutil.rimraf('out-vscode-min'),\n\toptimize.minifyTask('out-vscode', `${sourceMappingURLBase}/core`)\n));\ngulp.task(minifyVSCodeTask);\n\nconst coreCI = task.define('core-ci', task.series(\n\tgulp.task('compile-build-with-mangling'),\n\ttask.parallel(\n\t\tgulp.task('minify-vscode'),\n\t\tgulp.task('minify-vscode-reh'),\n\t\tgulp.task('minify-vscode-reh-web'),\n\t)\n));\ngulp.task(coreCI);\n\nconst coreCIPR = task.define('core-ci-pr', task.series(\n\tgulp.task('compile-build-without-mangling'),\n\ttask.parallel(\n\t\tgulp.task('minify-vscode'),\n\t\tgulp.task('minify-vscode-reh'),\n\t\tgulp.task('minify-vscode-reh-web'),\n\t)\n));\ngulp.task(coreCIPR);\n\n/**\n * Compute checksums for some files.\n *\n * @param {string} out The out folder to read the file from.\n * @param {string[]} filenames The paths to compute a checksum for.\n * @return {Object} A map of paths to checksums.\n */\nfunction computeChecksums(out, filenames) {\n\tconst result = {};\n\tfilenames.forEach(function (filename) {\n\t\tconst fullPath = path.join(process.cwd(), out, filename);\n\t\tresult[filename] = computeChecksum(fullPath);\n\t});\n\treturn result;\n}\n\n/**\n * Compute checksum for a file.\n *\n * @param {string} filename The absolute path to a filename.\n * @return {string} The checksum for `filename`.\n */\nfunction computeChecksum(filename) {\n\tconst contents = fs.readFileSync(filename);\n\n\tconst hash = crypto\n\t\t.createHash('sha256')\n\t\t.update(contents)\n\t\t.digest('base64')\n\t\t.replace(/=+$/, '');\n\n\treturn hash;\n}\n\nfunction packageTask(platform, arch, sourceFolderName, destinationFolderName, opts) {\n\topts = opts || {};\n\n\tconst destination = path.join(path.dirname(root), destinationFolderName);\n\tplatform = platform || process.platform;\n\n\treturn () => {\n\t\tconst electron = require('@vscode/gulp-electron');\n\t\tconst json = require('gulp-json-editor');\n\n\t\tconst out = sourceFolderName;\n\n\t\tconst checksums = computeChecksums(out, [\n\t\t\t'vs/base/parts/sandbox/electron-sandbox/preload.js',\n\t\t\t'vs/workbench/workbench.desktop.main.js',\n\t\t\t'vs/workbench/workbench.desktop.main.css',\n\t\t\t'vs/workbench/api/node/extensionHostProcess.js',\n\t\t\t'vs/code/electron-sandbox/workbench/workbench.html',\n\t\t\t'vs/code/electron-sandbox/workbench/workbench.js'\n\t\t]);\n\n\t\tconst src = gulp.src(out + '/**', { base: '.' })\n\t\t\t.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); }))\n\t\t\t.pipe(util.setExecutableBit(['**/*.sh']));\n\n\t\tconst platformSpecificBuiltInExtensionsExclusions = product.builtInExtensions.filter(ext => {\n\t\t\tif (!ext.platforms) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst set = new Set(ext.platforms);\n\t\t\treturn !set.has(platform);\n\t\t}).map(ext => `!.build/extensions/${ext.name}/**`);\n\n\t\tconst extensions = gulp.src(['.build/extensions/**', ...platformSpecificBuiltInExtensionsExclusions], { base: '.build', dot: true });\n\n\t\tconst sources = es.merge(src, extensions)\n\t\t\t.pipe(filter(['**', '!**/*.js.map'], { dot: true }));\n\n\t\tlet version = packageJson.version;\n\t\tconst quality = product.quality;\n\n\t\tif (quality && quality !== 'stable') {\n\t\t\tversion += '-' + quality;\n\t\t}\n\n\t\tconst name = product.nameShort;\n\t\tconst packageJsonUpdates = { name, version };\n\n\t\tif (platform === 'linux') {\n\t\t\tpackageJsonUpdates.desktopName = `${product.applicationName}.desktop`;\n\t\t}\n\n\t\tlet packageJsonContents;\n\t\tconst packageJsonStream = gulp.src(['package.json'], { base: '.' })\n\t\t\t.pipe(json(packageJsonUpdates))\n\t\t\t.pipe(es.through(function (file) {\n\t\t\t\tpackageJsonContents = file.contents.toString();\n\t\t\t\tthis.emit('data', file);\n\t\t\t}));\n\n\t\tlet productJsonContents;\n\t\tconst productJsonStream = gulp.src(['product.json'], { base: '.' })\n\t\t\t.pipe(json({ commit, date: readISODate('out-build'), checksums, version }))\n\t\t\t.pipe(es.through(function (file) {\n\t\t\t\tproductJsonContents = file.contents.toString();\n\t\t\t\tthis.emit('data', file);\n\t\t\t}));\n\n\t\tconst license = gulp.src([product.licenseFileName, 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.', allowEmpty: true });\n\n\t\t// TODO the API should be copied to `out` during compile, not here\n\t\tconst api = gulp.src('src/vscode-dts/vscode.d.ts').pipe(rename('out/vscode-dts/vscode.d.ts'));\n\n\t\tconst telemetry = gulp.src('.build/telemetry/**', { base: '.build/telemetry', dot: true });\n\n\t\tconst jsFilter = util.filter(data => !data.isDirectory() && /\\.js$/.test(data.path));\n\t\tconst root = path.resolve(path.join(__dirname, '..'));\n\t\tconst productionDependencies = getProductionDependencies(root);\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat().concat('!**/*.mk');\n\n\t\tconst deps = gulp.src(dependenciesSrc, { base: '.', dot: true })\n\t\t\t.pipe(filter(['**', `!**/${config.version}/**`, '!**/bin/darwin-arm64-87/**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))\n\t\t\t.pipe(jsFilter)\n\t\t\t.pipe(util.rewriteSourceMappingURL(sourceMappingURLBase))\n\t\t\t.pipe(jsFilter.restore)\n\t\t\t.pipe(createAsar(path.join(process.cwd(), 'node_modules'), [\n\t\t\t\t'**/*.node',\n\t\t\t\t'**/@vscode/ripgrep/bin/*',\n\t\t\t\t'**/node-pty/build/Release/*',\n\t\t\t\t'**/node-pty/build/Release/conpty/*',\n\t\t\t\t'**/node-pty/lib/worker/conoutSocketWorker.js',\n\t\t\t\t'**/node-pty/lib/shared/conout.js',\n\t\t\t\t'**/*.wasm',\n\t\t\t\t'**/@vscode/vsce-sign/bin/*',\n\t\t\t], [\n\t\t\t\t'**/*.mk',\n\t\t\t\t'!node_modules/vsda/**' // stay compatible with extensions that depend on us shipping `vsda` into ASAR\n\t\t\t], [\n\t\t\t\t'node_modules/vsda/**' // retain copy of `vsda` in node_modules for internal use\n\t\t\t], 'node_modules.asar'));\n\n\t\tlet all = es.merge(\n\t\t\tpackageJsonStream,\n\t\t\tproductJsonStream,\n\t\t\tlicense,\n\t\t\tapi,\n\t\t\ttelemetry,\n\t\t\tsources,\n\t\t\tdeps\n\t\t);\n\n\t\tif (platform === 'win32') {\n\t\t\tall = es.merge(all, gulp.src([\n\t\t\t\t'resources/win32/bower.ico',\n\t\t\t\t'resources/win32/c.ico',\n\t\t\t\t'resources/win32/config.ico',\n\t\t\t\t'resources/win32/cpp.ico',\n\t\t\t\t'resources/win32/csharp.ico',\n\t\t\t\t'resources/win32/css.ico',\n\t\t\t\t'resources/win32/default.ico',\n\t\t\t\t'resources/win32/go.ico',\n\t\t\t\t'resources/win32/html.ico',\n\t\t\t\t'resources/win32/jade.ico',\n\t\t\t\t'resources/win32/java.ico',\n\t\t\t\t'resources/win32/javascript.ico',\n\t\t\t\t'resources/win32/json.ico',\n\t\t\t\t'resources/win32/less.ico',\n\t\t\t\t'resources/win32/markdown.ico',\n\t\t\t\t'resources/win32/php.ico',\n\t\t\t\t'resources/win32/powershell.ico',\n\t\t\t\t'resources/win32/python.ico',\n\t\t\t\t'resources/win32/react.ico',\n\t\t\t\t'resources/win32/ruby.ico',\n\t\t\t\t'resources/win32/sass.ico',\n\t\t\t\t'resources/win32/shell.ico',\n\t\t\t\t'resources/win32/sql.ico',\n\t\t\t\t'resources/win32/typescript.ico',\n\t\t\t\t'resources/win32/vue.ico',\n\t\t\t\t'resources/win32/xml.ico',\n\t\t\t\t'resources/win32/yaml.ico',\n\t\t\t\t'resources/win32/code_70x70.png',\n\t\t\t\t'resources/win32/code_150x150.png'\n\t\t\t], { base: '.' }));\n\t\t} else if (platform === 'linux') {\n\t\t\tall = es.merge(all, gulp.src('resources/linux/code.png', { base: '.' }));\n\t\t} else if (platform === 'darwin') {\n\t\t\tconst shortcut = gulp.src('resources/darwin/bin/code.sh')\n\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t.pipe(rename('bin/code'));\n\t\t\tconst policyDest = gulp.src('.build/policies/darwin/**', { base: '.build/policies/darwin' })\n\t\t\t\t.pipe(rename(f => f.dirname = `policies/${f.dirname}`));\n\t\t\tall = es.merge(all, shortcut, policyDest);\n\t\t}\n\n\t\tlet result = all\n\t\t\t.pipe(util.skipDirectories())\n\t\t\t.pipe(util.fixWin32DirectoryPermissions())\n\t\t\t.pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523\n\t\t\t.pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false }))\n\t\t\t.pipe(filter(['**', '!LICENSE', '!version'], { dot: true }));\n\n\t\tif (platform === 'linux') {\n\t\t\tresult = es.merge(result, gulp.src('resources/completions/bash/code', { base: '.' })\n\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t.pipe(rename(function (f) { f.basename = product.applicationName; })));\n\n\t\t\tresult = es.merge(result, gulp.src('resources/completions/zsh/_code', { base: '.' })\n\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t.pipe(rename(function (f) { f.basename = '_' + product.applicationName; })));\n\t\t}\n\n\t\tif (platform === 'win32') {\n\t\t\tresult = es.merge(result, gulp.src('resources/win32/bin/code.js', { base: 'resources/win32', allowEmpty: true }));\n\n\t\t\tresult = es.merge(result, gulp.src('resources/win32/bin/code.cmd', { base: 'resources/win32' })\n\t\t\t\t.pipe(replace('@@NAME@@', product.nameShort))\n\t\t\t\t.pipe(rename(function (f) { f.basename = product.applicationName; })));\n\n\t\t\tresult = es.merge(result, gulp.src('resources/win32/bin/code.sh', { base: 'resources/win32' })\n\t\t\t\t.pipe(replace('@@NAME@@', product.nameShort))\n\t\t\t\t.pipe(replace('@@PRODNAME@@', product.nameLong))\n\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t.pipe(replace('@@SERVERDATAFOLDER@@', product.serverDataFolderName || '.vscode-remote'))\n\t\t\t\t.pipe(replace('@@QUALITY@@', quality))\n\t\t\t\t.pipe(rename(function (f) { f.basename = product.applicationName; f.extname = ''; })));\n\n\t\t\tresult = es.merge(result, gulp.src('resources/win32/VisualElementsManifest.xml', { base: 'resources/win32' })\n\t\t\t\t.pipe(rename(product.nameShort + '.VisualElementsManifest.xml')));\n\n\t\t\tresult = es.merge(result, gulp.src('.build/policies/win32/**', { base: '.build/policies/win32' })\n\t\t\t\t.pipe(rename(f => f.dirname = `policies/${f.dirname}`)));\n\n\t\t\tif (quality === 'insider') {\n\t\t\t\tresult = es.merge(result, gulp.src('.build/win32/appx/**', { base: '.build/win32' }));\n\t\t\t}\n\t\t} else if (platform === 'linux') {\n\t\t\tresult = es.merge(result, gulp.src('resources/linux/bin/code.sh', { base: '.' })\n\t\t\t\t.pipe(replace('@@PRODNAME@@', product.nameLong))\n\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t.pipe(rename('bin/' + product.applicationName)));\n\t\t}\n\n\t\tresult = inlineMeta(result, {\n\t\t\ttargetPaths: bootstrapEntryPoints,\n\t\t\tpackageJsonFn: () => packageJsonContents,\n\t\t\tproductJsonFn: () => productJsonContents\n\t\t});\n\n\t\treturn result.pipe(vfs.dest(destination));\n\t};\n}\n\nfunction patchWin32DependenciesTask(destinationFolderName) {\n\tconst cwd = path.join(path.dirname(root), destinationFolderName);\n\n\treturn async () => {\n\t\tconst deps = await glob('**/*.node', { cwd, ignore: 'extensions/node_modules/@parcel/watcher/**' });\n\t\tconst packageJson = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'package.json'), 'utf8'));\n\t\tconst product = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'product.json'), 'utf8'));\n\t\tconst baseVersion = packageJson.version.replace(/-.*$/, '');\n\n\t\tawait Promise.all(deps.map(async dep => {\n\t\t\tconst basename = path.basename(dep);\n\n\t\t\tawait rcedit(path.join(cwd, dep), {\n\t\t\t\t'file-version': baseVersion,\n\t\t\t\t'version-string': {\n\t\t\t\t\t'CompanyName': 'Microsoft Corporation',\n\t\t\t\t\t'FileDescription': product.nameLong,\n\t\t\t\t\t'FileVersion': packageJson.version,\n\t\t\t\t\t'InternalName': basename,\n\t\t\t\t\t'LegalCopyright': 'Copyright (C) 2022 Microsoft. All rights reserved',\n\t\t\t\t\t'OriginalFilename': basename,\n\t\t\t\t\t'ProductName': product.nameLong,\n\t\t\t\t\t'ProductVersion': packageJson.version,\n\t\t\t\t}\n\t\t\t});\n\t\t}));\n\t};\n}\n\nconst buildRoot = path.dirname(root);\n\nconst BUILD_TARGETS = [\n\t{ platform: 'win32', arch: 'x64' },\n\t{ platform: 'win32', arch: 'arm64' },\n\t{ platform: 'darwin', arch: 'x64', opts: { stats: true } },\n\t{ platform: 'darwin', arch: 'arm64', opts: { stats: true } },\n\t{ platform: 'linux', arch: 'x64' },\n\t{ platform: 'linux', arch: 'armhf' },\n\t{ platform: 'linux', arch: 'arm64' },\n];\nBUILD_TARGETS.forEach(buildTarget => {\n\tconst dashed = (str) => (str ? `-${str}` : ``);\n\tconst platform = buildTarget.platform;\n\tconst arch = buildTarget.arch;\n\tconst opts = buildTarget.opts;\n\n\tconst [vscode, vscodeMin] = ['', 'min'].map(minified => {\n\t\tconst sourceFolderName = `out-vscode${dashed(minified)}`;\n\t\tconst destinationFolderName = `VSCode${dashed(platform)}${dashed(arch)}`;\n\n\t\tconst tasks = [\n\t\t\tcompileNativeExtensionsBuildTask,\n\t\t\tutil.rimraf(path.join(buildRoot, destinationFolderName)),\n\t\t\tpackageTask(platform, arch, sourceFolderName, destinationFolderName, opts)\n\t\t];\n\n\t\tif (platform === 'win32') {\n\t\t\ttasks.push(patchWin32DependenciesTask(destinationFolderName));\n\t\t}\n\n\t\tconst vscodeTaskCI = task.define(`vscode${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series(...tasks));\n\t\tgulp.task(vscodeTaskCI);\n\n\t\tconst vscodeTask = task.define(`vscode${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series(\n\t\t\tminified ? compileBuildWithManglingTask : compileBuildWithoutManglingTask,\n\t\t\tcleanExtensionsBuildTask,\n\t\t\tcompileNonNativeExtensionsBuildTask,\n\t\t\tcompileExtensionMediaBuildTask,\n\t\t\tminified ? minifyVSCodeTask : bundleVSCodeTask,\n\t\t\tvscodeTaskCI\n\t\t));\n\t\tgulp.task(vscodeTask);\n\n\t\treturn vscodeTask;\n\t});\n\n\tif (process.platform === platform && process.arch === arch) {\n\t\tgulp.task(task.define('vscode', task.series(vscode)));\n\t\tgulp.task(task.define('vscode-min', task.series(vscodeMin)));\n\t}\n});\n\n// #region nls\n\nconst innoSetupConfig = {\n\t'zh-cn': { codePage: 'CP936', defaultInfo: { name: 'Simplified Chinese', id: '$0804', } },\n\t'zh-tw': { codePage: 'CP950', defaultInfo: { name: 'Traditional Chinese', id: '$0404' } },\n\t'ko': { codePage: 'CP949', defaultInfo: { name: 'Korean', id: '$0412' } },\n\t'ja': { codePage: 'CP932' },\n\t'de': { codePage: 'CP1252' },\n\t'fr': { codePage: 'CP1252' },\n\t'es': { codePage: 'CP1252' },\n\t'ru': { codePage: 'CP1251' },\n\t'it': { codePage: 'CP1252' },\n\t'pt-br': { codePage: 'CP1252' },\n\t'hu': { codePage: 'CP1250' },\n\t'tr': { codePage: 'CP1254' }\n};\n\ngulp.task(task.define(\n\t'vscode-translations-export',\n\ttask.series(\n\t\tcoreCI,\n\t\tcompileAllExtensionsBuildTask,\n\t\tfunction () {\n\t\t\tconst pathToMetadata = './out-build/nls.metadata.json';\n\t\t\tconst pathToExtensions = '.build/extensions/*';\n\t\t\tconst pathToSetup = 'build/win32/i18n/messages.en.isl';\n\n\t\t\treturn es.merge(\n\t\t\t\tgulp.src(pathToMetadata).pipe(i18n.createXlfFilesForCoreBundle()),\n\t\t\t\tgulp.src(pathToSetup).pipe(i18n.createXlfFilesForIsl()),\n\t\t\t\tgulp.src(pathToExtensions).pipe(i18n.createXlfFilesForExtensions())\n\t\t\t).pipe(vfs.dest('../vscode-translations-export'));\n\t\t}\n\t)\n));\n\ngulp.task('vscode-translations-import', function () {\n\tconst options = minimist(process.argv.slice(2), {\n\t\tstring: 'location',\n\t\tdefault: {\n\t\t\tlocation: '../vscode-translations-import'\n\t\t}\n\t});\n\treturn es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => {\n\t\tconst id = language.id;\n\t\treturn gulp.src(`${options.location}/${id}/vscode-setup/messages.xlf`)\n\t\t\t.pipe(i18n.prepareIslFiles(language, innoSetupConfig[language.id]))\n\t\t\t.pipe(vfs.dest(`./build/win32/i18n`));\n\t}));\n});\n\n// #endregion\n"
  },
  {
    "path": "build/gulpfile.vscode.linux.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst replace = require('gulp-replace');\nconst rename = require('gulp-rename');\nconst es = require('event-stream');\nconst vfs = require('vinyl-fs');\nconst { rimraf } = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst packageJson = require('../package.json');\nconst product = require('../product.json');\nconst dependenciesGenerator = require('./linux/dependencies-generator');\nconst debianRecommendedDependencies = require('./linux/debian/dep-lists').recommendedDeps;\nconst path = require('path');\nconst cp = require('child_process');\nconst util = require('util');\n\nconst exec = util.promisify(cp.exec);\nconst root = path.dirname(__dirname);\nconst commit = getVersion(root);\n\nconst linuxPackageRevision = Math.floor(new Date().getTime() / 1000);\n\n/**\n * @param {string} arch\n */\nfunction getDebPackageArch(arch) {\n\treturn { x64: 'amd64', armhf: 'armhf', arm64: 'arm64' }[arch];\n}\n\nfunction prepareDebPackage(arch) {\n\tconst binaryDir = '../VSCode-linux-' + arch;\n\tconst debArch = getDebPackageArch(arch);\n\tconst destination = '.build/linux/deb/' + debArch + '/' + product.applicationName + '-' + debArch;\n\n\treturn async function () {\n\t\tconst dependencies = await dependenciesGenerator.getDependencies('deb', binaryDir, product.applicationName, debArch);\n\n\t\tconst desktop = gulp.src('resources/linux/code.desktop', { base: '.' })\n\t\t\t.pipe(rename('usr/share/applications/' + product.applicationName + '.desktop'));\n\n\t\tconst desktopUrlHandler = gulp.src('resources/linux/code-url-handler.desktop', { base: '.' })\n\t\t\t.pipe(rename('usr/share/applications/' + product.applicationName + '-url-handler.desktop'));\n\n\t\tconst desktops = es.merge(desktop, desktopUrlHandler)\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@NAME_SHORT@@', product.nameShort))\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(replace('@@EXEC@@', `/usr/share/${product.applicationName}/${product.applicationName}`))\n\t\t\t.pipe(replace('@@ICON@@', product.linuxIconName))\n\t\t\t.pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));\n\n\t\tconst appdata = gulp.src('resources/linux/code.appdata.xml', { base: '.' })\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(replace('@@LICENSE@@', product.licenseName))\n\t\t\t.pipe(rename('usr/share/appdata/' + product.applicationName + '.appdata.xml'));\n\n\t\tconst workspaceMime = gulp.src('resources/linux/code-workspace.xml', { base: '.' })\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(rename('usr/share/mime/packages/' + product.applicationName + '-workspace.xml'));\n\n\t\tconst icon = gulp.src('resources/linux/code.png', { base: '.' })\n\t\t\t.pipe(rename('usr/share/pixmaps/' + product.linuxIconName + '.png'));\n\n\t\tconst bash_completion = gulp.src('resources/completions/bash/code')\n\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t.pipe(rename('usr/share/bash-completion/completions/' + product.applicationName));\n\n\t\tconst zsh_completion = gulp.src('resources/completions/zsh/_code')\n\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t.pipe(rename('usr/share/zsh/vendor-completions/_' + product.applicationName));\n\n\t\tconst code = gulp.src(binaryDir + '/**/*', { base: binaryDir })\n\t\t\t.pipe(rename(function (p) { p.dirname = 'usr/share/' + product.applicationName + '/' + p.dirname; }));\n\n\t\tlet size = 0;\n\t\tconst control = code.pipe(es.through(\n\t\t\tfunction (f) { size += f.isDirectory() ? 4096 : f.contents.length; },\n\t\t\tfunction () {\n\t\t\t\tconst that = this;\n\t\t\t\tgulp.src('resources/linux/debian/control.template', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t\t\t.pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision))\n\t\t\t\t\t.pipe(replace('@@ARCHITECTURE@@', debArch))\n\t\t\t\t\t.pipe(replace('@@DEPENDS@@', dependencies.join(', ')))\n\t\t\t\t\t.pipe(replace('@@RECOMMENDS@@', debianRecommendedDependencies.join(', ')))\n\t\t\t\t\t.pipe(replace('@@INSTALLEDSIZE@@', Math.ceil(size / 1024)))\n\t\t\t\t\t.pipe(rename('DEBIAN/control'))\n\t\t\t\t\t.pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); }));\n\t\t\t}));\n\n\t\tconst prerm = gulp.src('resources/linux/debian/prerm.template', { base: '.' })\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(rename('DEBIAN/prerm'));\n\n\t\tconst postrm = gulp.src('resources/linux/debian/postrm.template', { base: '.' })\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(rename('DEBIAN/postrm'));\n\n\t\tconst postinst = gulp.src('resources/linux/debian/postinst.template', { base: '.' })\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(rename('DEBIAN/postinst'));\n\n\t\tconst templates = gulp.src('resources/linux/debian/templates.template', { base: '.' })\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(rename('DEBIAN/templates'));\n\n\t\tconst all = es.merge(control, templates, postinst, postrm, prerm, desktops, appdata, workspaceMime, icon, bash_completion, zsh_completion, code);\n\n\t\treturn all.pipe(vfs.dest(destination));\n\t};\n}\n\n/**\n * @param {string} arch\n */\nfunction buildDebPackage(arch) {\n\tconst debArch = getDebPackageArch(arch);\n\tconst cwd = `.build/linux/deb/${debArch}`;\n\n\treturn async () => {\n\t\tawait exec(`chmod 755 ${product.applicationName}-${debArch}/DEBIAN/postinst ${product.applicationName}-${debArch}/DEBIAN/prerm ${product.applicationName}-${debArch}/DEBIAN/postrm`, { cwd });\n\t\tawait exec('mkdir -p deb', { cwd });\n\t\tawait exec(`fakeroot dpkg-deb -Zxz -b ${product.applicationName}-${debArch} deb`, { cwd });\n\t};\n}\n\n/**\n * @param {string} rpmArch\n */\nfunction getRpmBuildPath(rpmArch) {\n\treturn '.build/linux/rpm/' + rpmArch + '/rpmbuild';\n}\n\n/**\n * @param {string} arch\n */\nfunction getRpmPackageArch(arch) {\n\treturn { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64' }[arch];\n}\n\n/**\n * @param {string} arch\n */\nfunction prepareRpmPackage(arch) {\n\tconst binaryDir = '../VSCode-linux-' + arch;\n\tconst rpmArch = getRpmPackageArch(arch);\n\tconst stripBinary = process.env['STRIP'] ?? '/usr/bin/strip';\n\n\treturn async function () {\n\t\tconst dependencies = await dependenciesGenerator.getDependencies('rpm', binaryDir, product.applicationName, rpmArch);\n\n\t\tconst desktop = gulp.src('resources/linux/code.desktop', { base: '.' })\n\t\t\t.pipe(rename('BUILD/usr/share/applications/' + product.applicationName + '.desktop'));\n\n\t\tconst desktopUrlHandler = gulp.src('resources/linux/code-url-handler.desktop', { base: '.' })\n\t\t\t.pipe(rename('BUILD/usr/share/applications/' + product.applicationName + '-url-handler.desktop'));\n\n\t\tconst desktops = es.merge(desktop, desktopUrlHandler)\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@NAME_SHORT@@', product.nameShort))\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(replace('@@EXEC@@', `/usr/share/${product.applicationName}/${product.applicationName}`))\n\t\t\t.pipe(replace('@@ICON@@', product.linuxIconName))\n\t\t\t.pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));\n\n\t\tconst appdata = gulp.src('resources/linux/code.appdata.xml', { base: '.' })\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(replace('@@LICENSE@@', product.licenseName))\n\t\t\t.pipe(rename('BUILD/usr/share/appdata/' + product.applicationName + '.appdata.xml'));\n\n\t\tconst workspaceMime = gulp.src('resources/linux/code-workspace.xml', { base: '.' })\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(rename('BUILD/usr/share/mime/packages/' + product.applicationName + '-workspace.xml'));\n\n\t\tconst icon = gulp.src('resources/linux/code.png', { base: '.' })\n\t\t\t.pipe(rename('BUILD/usr/share/pixmaps/' + product.linuxIconName + '.png'));\n\n\t\tconst bash_completion = gulp.src('resources/completions/bash/code')\n\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t.pipe(rename('BUILD/usr/share/bash-completion/completions/' + product.applicationName));\n\n\t\tconst zsh_completion = gulp.src('resources/completions/zsh/_code')\n\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t.pipe(rename('BUILD/usr/share/zsh/site-functions/_' + product.applicationName));\n\n\t\tconst code = gulp.src(binaryDir + '/**/*', { base: binaryDir })\n\t\t\t.pipe(rename(function (p) { p.dirname = 'BUILD/usr/share/' + product.applicationName + '/' + p.dirname; }));\n\n\t\tconst spec = gulp.src('resources/linux/rpm/code.spec.template', { base: '.' })\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@ICON@@', product.linuxIconName))\n\t\t\t.pipe(replace('@@VERSION@@', packageJson.version))\n\t\t\t.pipe(replace('@@RELEASE@@', linuxPackageRevision))\n\t\t\t.pipe(replace('@@ARCHITECTURE@@', rpmArch))\n\t\t\t.pipe(replace('@@LICENSE@@', product.licenseName))\n\t\t\t.pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@'))\n\t\t\t.pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@'))\n\t\t\t.pipe(replace('@@DEPENDENCIES@@', dependencies.join(', ')))\n\t\t\t.pipe(replace('@@STRIP@@', stripBinary))\n\t\t\t.pipe(rename('SPECS/' + product.applicationName + '.spec'));\n\n\t\tconst specIcon = gulp.src('resources/linux/rpm/code.xpm', { base: '.' })\n\t\t\t.pipe(rename('SOURCES/' + product.applicationName + '.xpm'));\n\n\t\tconst all = es.merge(code, desktops, appdata, workspaceMime, icon, bash_completion, zsh_completion, spec, specIcon);\n\n\t\treturn all.pipe(vfs.dest(getRpmBuildPath(rpmArch)));\n\t};\n}\n\n/**\n * @param {string} arch\n */\nfunction buildRpmPackage(arch) {\n\tconst rpmArch = getRpmPackageArch(arch);\n\tconst rpmBuildPath = getRpmBuildPath(rpmArch);\n\tconst rpmOut = `${rpmBuildPath}/RPMS/${rpmArch}`;\n\tconst destination = `.build/linux/rpm/${rpmArch}`;\n\n\treturn async () => {\n\t\tawait exec(`mkdir -p ${destination}`);\n\t\tawait exec(`HOME=\"$(pwd)/${destination}\" rpmbuild -bb ${rpmBuildPath}/SPECS/${product.applicationName}.spec --target=${rpmArch}`);\n\t\tawait exec(`cp \"${rpmOut}/$(ls ${rpmOut})\" ${destination}/`);\n\t};\n}\n\n/**\n * @param {string} arch\n */\nfunction getSnapBuildPath(arch) {\n\treturn `.build/linux/snap/${arch}/${product.applicationName}-${arch}`;\n}\n\n/**\n * @param {string} arch\n */\nfunction prepareSnapPackage(arch) {\n\tconst binaryDir = '../VSCode-linux-' + arch;\n\tconst destination = getSnapBuildPath(arch);\n\n\treturn function () {\n\t\t// A desktop file that is placed in snap/gui will be placed into meta/gui verbatim.\n\t\tconst desktop = gulp.src('resources/linux/code.desktop', { base: '.' })\n\t\t\t.pipe(rename(`snap/gui/${product.applicationName}.desktop`));\n\n\t\t// A desktop file that is placed in snap/gui will be placed into meta/gui verbatim.\n\t\tconst desktopUrlHandler = gulp.src('resources/linux/code-url-handler.desktop', { base: '.' })\n\t\t\t.pipe(rename(`snap/gui/${product.applicationName}-url-handler.desktop`));\n\n\t\tconst desktops = es.merge(desktop, desktopUrlHandler)\n\t\t\t.pipe(replace('@@NAME_LONG@@', product.nameLong))\n\t\t\t.pipe(replace('@@NAME_SHORT@@', product.nameShort))\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(replace('@@EXEC@@', `${product.applicationName} --force-user-env`))\n\t\t\t.pipe(replace('@@ICON@@', `\\${SNAP}/meta/gui/${product.linuxIconName}.png`))\n\t\t\t.pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));\n\n\t\t// An icon that is placed in snap/gui will be placed into meta/gui verbatim.\n\t\tconst icon = gulp.src('resources/linux/code.png', { base: '.' })\n\t\t\t.pipe(rename(`snap/gui/${product.linuxIconName}.png`));\n\n\t\tconst code = gulp.src(binaryDir + '/**/*', { base: binaryDir })\n\t\t\t.pipe(rename(function (p) { p.dirname = `usr/share/${product.applicationName}/${p.dirname}`; }));\n\n\t\tconst snapcraft = gulp.src('resources/linux/snap/snapcraft.yaml', { base: '.' })\n\t\t\t.pipe(replace('@@NAME@@', product.applicationName))\n\t\t\t.pipe(replace('@@VERSION@@', commit.substr(0, 8)))\n\t\t\t// Possible run-on values https://snapcraft.io/docs/architectures\n\t\t\t.pipe(replace('@@ARCHITECTURE@@', arch === 'x64' ? 'amd64' : arch))\n\t\t\t.pipe(rename('snap/snapcraft.yaml'));\n\n\t\tconst electronLaunch = gulp.src('resources/linux/snap/electron-launch', { base: '.' })\n\t\t\t.pipe(rename('electron-launch'));\n\n\t\tconst all = es.merge(desktops, icon, code, snapcraft, electronLaunch);\n\n\t\treturn all.pipe(vfs.dest(destination));\n\t};\n}\n\n/**\n * @param {string} arch\n */\nfunction buildSnapPackage(arch) {\n\tconst cwd = getSnapBuildPath(arch);\n\treturn () => exec('snapcraft', { cwd });\n}\n\nconst BUILD_TARGETS = [\n\t{ arch: 'x64' },\n\t{ arch: 'armhf' },\n\t{ arch: 'arm64' },\n];\n\nBUILD_TARGETS.forEach(({ arch }) => {\n\tconst debArch = getDebPackageArch(arch);\n\tconst prepareDebTask = task.define(`vscode-linux-${arch}-prepare-deb`, task.series(rimraf(`.build/linux/deb/${debArch}`), prepareDebPackage(arch)));\n\tgulp.task(prepareDebTask);\n\tconst buildDebTask = task.define(`vscode-linux-${arch}-build-deb`, buildDebPackage(arch));\n\tgulp.task(buildDebTask);\n\n\tconst rpmArch = getRpmPackageArch(arch);\n\tconst prepareRpmTask = task.define(`vscode-linux-${arch}-prepare-rpm`, task.series(rimraf(`.build/linux/rpm/${rpmArch}`), prepareRpmPackage(arch)));\n\tgulp.task(prepareRpmTask);\n\tconst buildRpmTask = task.define(`vscode-linux-${arch}-build-rpm`, buildRpmPackage(arch));\n\tgulp.task(buildRpmTask);\n\n\tconst prepareSnapTask = task.define(`vscode-linux-${arch}-prepare-snap`, task.series(rimraf(`.build/linux/snap/${arch}`), prepareSnapPackage(arch)));\n\tgulp.task(prepareSnapTask);\n\tconst buildSnapTask = task.define(`vscode-linux-${arch}-build-snap`, task.series(prepareSnapTask, buildSnapPackage(arch)));\n\tgulp.task(buildSnapTask);\n});\n"
  },
  {
    "path": "build/gulpfile.vscode.web.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst es = require('event-stream');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst optimize = require('./lib/optimize');\nconst { readISODate } = require('./lib/date');\nconst product = require('../product.json');\nconst rename = require('gulp-rename');\nconst filter = require('gulp-filter');\nconst { getProductionDependencies } = require('./lib/dependencies');\nconst vfs = require('vinyl-fs');\nconst packageJson = require('../package.json');\nconst { compileBuildWithManglingTask } = require('./gulpfile.compile');\nconst extensions = require('./lib/extensions');\nconst VinylFile = require('vinyl');\n\nconst REPO_ROOT = path.dirname(__dirname);\nconst BUILD_ROOT = path.dirname(REPO_ROOT);\nconst WEB_FOLDER = path.join(REPO_ROOT, 'remote', 'web');\n\nconst commit = getVersion(REPO_ROOT);\nconst quality = product.quality;\nconst version = (quality && quality !== 'stable') ? `${packageJson.version}-${quality}` : packageJson.version;\n\nconst vscodeWebResourceIncludes = [\n\n\t// NLS\n\t'out-build/nls.messages.js',\n\n\t// Accessibility Signals\n\t'out-build/vs/platform/accessibilitySignal/browser/media/*.mp3',\n\n\t// Welcome\n\t'out-build/vs/workbench/contrib/welcomeGettingStarted/common/media/**/*.{svg,png}',\n\n\t// Extensions\n\t'out-build/vs/workbench/contrib/extensions/browser/media/{theme-icon.png,language-icon.svg}',\n\t'out-build/vs/workbench/services/extensionManagement/common/media/*.{svg,png}',\n\n\t// Webview\n\t'out-build/vs/workbench/contrib/webview/browser/pre/*.{js,html}',\n\n\t// Tree Sitter highlights\n\t'out-build/vs/editor/common/languages/highlights/*.scm',\n\n\t// Tree Sitter injections\n\t'out-build/vs/editor/common/languages/injections/*.scm',\n\n\t// Extension Host Worker\n\t'out-build/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html',\n];\nexports.vscodeWebResourceIncludes = vscodeWebResourceIncludes;\n\nconst vscodeWebResources = [\n\n\t// Includes\n\t...vscodeWebResourceIncludes,\n\n\t// Excludes\n\t'!out-build/vs/**/{node,electron-sandbox,electron-main,electron-utility}/**',\n\t'!out-build/vs/editor/standalone/**',\n\t'!out-build/vs/workbench/**/*-tb.png',\n\t'!out-build/vs/code/**/*-dev.html',\n\t'!**/test/**'\n];\n\nconst buildfile = require('./buildfile');\n\nconst vscodeWebEntryPoints = [\n\tbuildfile.workerEditor,\n\tbuildfile.workerExtensionHost,\n\tbuildfile.workerNotebook,\n\tbuildfile.workerLanguageDetection,\n\tbuildfile.workerLocalFileSearch,\n\tbuildfile.workerOutputLinks,\n\tbuildfile.workerBackgroundTokenization,\n\tbuildfile.keyboardMaps,\n\tbuildfile.workbenchWeb,\n\tbuildfile.entrypoint('vs/workbench/workbench.web.main.internal') // TODO@esm remove line when we stop supporting web-amd-esm-bridge\n].flat();\n\n/**\n * @param extensionsRoot {string} The location where extension will be read from\n * @param {object} product The parsed product.json file contents\n */\nconst createVSCodeWebFileContentMapper = (extensionsRoot, product) => {\n\treturn path => {\n\t\tif (path.endsWith('vs/platform/product/common/product.js')) {\n\t\t\treturn content => {\n\t\t\t\tconst productConfiguration = JSON.stringify({\n\t\t\t\t\t...product,\n\t\t\t\t\tversion,\n\t\t\t\t\tcommit,\n\t\t\t\t\tdate: readISODate('out-build')\n\t\t\t\t});\n\t\t\t\treturn content.replace('/*BUILD->INSERT_PRODUCT_CONFIGURATION*/', () => productConfiguration.substr(1, productConfiguration.length - 2) /* without { and }*/);\n\t\t\t};\n\t\t} else if (path.endsWith('vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.js')) {\n\t\t\treturn content => {\n\t\t\t\tconst builtinExtensions = JSON.stringify(extensions.scanBuiltinExtensions(extensionsRoot));\n\t\t\t\treturn content.replace('/*BUILD->INSERT_BUILTIN_EXTENSIONS*/', () => builtinExtensions.substr(1, builtinExtensions.length - 2) /* without [ and ]*/);\n\t\t\t};\n\t\t}\n\n\t\treturn undefined;\n\t};\n};\nexports.createVSCodeWebFileContentMapper = createVSCodeWebFileContentMapper;\n\nconst bundleVSCodeWebTask = task.define('bundle-vscode-web', task.series(\n\tutil.rimraf('out-vscode-web'),\n\toptimize.bundleTask(\n\t\t{\n\t\t\tout: 'out-vscode-web',\n\t\t\tesm: {\n\t\t\t\tsrc: 'out-build',\n\t\t\t\tentryPoints: vscodeWebEntryPoints,\n\t\t\t\tresources: vscodeWebResources,\n\t\t\t\tfileContentMapper: createVSCodeWebFileContentMapper('.build/web/extensions', product)\n\t\t\t}\n\t\t}\n\t)\n));\n\nconst minifyVSCodeWebTask = task.define('minify-vscode-web', task.series(\n\tbundleVSCodeWebTask,\n\tutil.rimraf('out-vscode-web-min'),\n\toptimize.minifyTask('out-vscode-web', `https://main.vscode-cdn.net/sourcemaps/${commit}/core`)\n));\ngulp.task(minifyVSCodeWebTask);\n\nfunction packageTask(sourceFolderName, destinationFolderName) {\n\tconst destination = path.join(BUILD_ROOT, destinationFolderName);\n\n\treturn () => {\n\t\tconst json = require('gulp-json-editor');\n\n\t\tconst src = gulp.src(sourceFolderName + '/**', { base: '.' })\n\t\t\t.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }));\n\n\t\tconst extensions = gulp.src('.build/web/extensions/**', { base: '.build/web', dot: true });\n\n\t\tconst loader = gulp.src('build/loader.min', { base: 'build', dot: true }).pipe(rename('out/vs/loader.js')); // TODO@esm remove line when we stop supporting web-amd-esm-bridge\n\n\t\tconst sources = es.merge(src, extensions, loader)\n\t\t\t.pipe(filter(['**', '!**/*.js.map'], { dot: true }))\n\t\t\t// TODO@esm remove me once we stop supporting our web-esm-bridge\n\t\t\t.pipe(es.through(function (file) {\n\t\t\t\tif (file.relative === 'out/vs/workbench/workbench.web.main.internal.css') {\n\t\t\t\t\tthis.emit('data', new VinylFile({\n\t\t\t\t\t\tcontents: file.contents,\n\t\t\t\t\t\tpath: file.path.replace('workbench.web.main.internal.css', 'workbench.web.main.css'),\n\t\t\t\t\t\tbase: file.base\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\tthis.emit('data', file);\n\t\t\t}));\n\n\t\tconst name = product.nameShort;\n\t\tconst packageJsonStream = gulp.src(['remote/web/package.json'], { base: 'remote/web' })\n\t\t\t.pipe(json({ name, version }));\n\n\t\tconst license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true });\n\n\t\tconst productionDependencies = getProductionDependencies(WEB_FOLDER);\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();\n\n\t\tconst deps = gulp.src(dependenciesSrc, { base: 'remote/web', dot: true })\n\t\t\t.pipe(filter(['**', '!**/package-lock.json']))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, '.webignore')));\n\n\t\tconst favicon = gulp.src('resources/server/favicon.ico', { base: 'resources/server' });\n\t\tconst manifest = gulp.src('resources/server/manifest.json', { base: 'resources/server' });\n\t\tconst pwaicons = es.merge(\n\t\t\tgulp.src('resources/server/code-192.png', { base: 'resources/server' }),\n\t\t\tgulp.src('resources/server/code-512.png', { base: 'resources/server' })\n\t\t);\n\n\t\tconst all = es.merge(\n\t\t\tpackageJsonStream,\n\t\t\tlicense,\n\t\t\tsources,\n\t\t\tdeps,\n\t\t\tfavicon,\n\t\t\tmanifest,\n\t\t\tpwaicons\n\t\t);\n\n\t\tconst result = all\n\t\t\t.pipe(util.skipDirectories())\n\t\t\t.pipe(util.fixWin32DirectoryPermissions());\n\n\t\treturn result.pipe(vfs.dest(destination));\n\t};\n}\n\nconst compileWebExtensionsBuildTask = task.define('compile-web-extensions-build', task.series(\n\ttask.define('clean-web-extensions-build', util.rimraf('.build/web/extensions')),\n\ttask.define('bundle-web-extensions-build', () => extensions.packageAllLocalExtensionsStream(true, false).pipe(gulp.dest('.build/web'))),\n\ttask.define('bundle-marketplace-web-extensions-build', () => extensions.packageMarketplaceExtensionsStream(true).pipe(gulp.dest('.build/web'))),\n\ttask.define('bundle-web-extension-media-build', () => extensions.buildExtensionMedia(false, '.build/web/extensions')),\n));\ngulp.task(compileWebExtensionsBuildTask);\n\nconst dashed = (/** @type {string} */ str) => (str ? `-${str}` : ``);\n\n['', 'min'].forEach(minified => {\n\tconst sourceFolderName = `out-vscode-web${dashed(minified)}`;\n\tconst destinationFolderName = `vscode-web`;\n\n\tconst vscodeWebTaskCI = task.define(`vscode-web${dashed(minified)}-ci`, task.series(\n\t\tcompileWebExtensionsBuildTask,\n\t\tminified ? minifyVSCodeWebTask : bundleVSCodeWebTask,\n\t\tutil.rimraf(path.join(BUILD_ROOT, destinationFolderName)),\n\t\tpackageTask(sourceFolderName, destinationFolderName)\n\t));\n\tgulp.task(vscodeWebTaskCI);\n\n\tconst vscodeWebTask = task.define(`vscode-web${dashed(minified)}`, task.series(\n\t\tcompileBuildWithManglingTask,\n\t\tvscodeWebTaskCI\n\t));\n\tgulp.task(vscodeWebTask);\n});\n"
  },
  {
    "path": "build/gulpfile.vscode.win32.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst fs = require('fs');\nconst assert = require('assert');\nconst cp = require('child_process');\nconst util = require('./lib/util');\nconst task = require('./lib/task');\nconst pkg = require('../package.json');\nconst product = require('../product.json');\nconst vfs = require('vinyl-fs');\nconst rcedit = require('rcedit');\n\nconst repoPath = path.dirname(__dirname);\nconst buildPath = (/** @type {string} */ arch) => path.join(path.dirname(repoPath), `VSCode-win32-${arch}`);\nconst setupDir = (/** @type {string} */ arch, /** @type {string} */ target) => path.join(repoPath, '.build', `win32-${arch}`, `${target}-setup`);\nconst issPath = path.join(__dirname, 'win32', 'code.iss');\nconst innoSetupPath = path.join(path.dirname(path.dirname(require.resolve('innosetup'))), 'bin', 'ISCC.exe');\nconst signWin32Path = path.join(repoPath, 'build', 'azure-pipelines', 'common', 'sign-win32');\n\nfunction packageInnoSetup(iss, options, cb) {\n\toptions = options || {};\n\n\tconst definitions = options.definitions || {};\n\n\tif (process.argv.some(arg => arg === '--debug-inno')) {\n\t\tdefinitions['Debug'] = 'true';\n\t}\n\n\tif (process.argv.some(arg => arg === '--sign')) {\n\t\tdefinitions['Sign'] = 'true';\n\t}\n\n\tconst keys = Object.keys(definitions);\n\n\tkeys.forEach(key => assert(typeof definitions[key] === 'string', `Missing value for '${key}' in Inno Setup package step`));\n\n\tconst defs = keys.map(key => `/d${key}=${definitions[key]}`);\n\tconst args = [\n\t\tiss,\n\t\t...defs,\n\t\t`/sesrp=node ${signWin32Path} $f`\n\t];\n\n\tcp.spawn(innoSetupPath, args, { stdio: ['ignore', 'inherit', 'inherit'] })\n\t\t.on('error', cb)\n\t\t.on('exit', code => {\n\t\t\tif (code === 0) {\n\t\t\t\tcb(null);\n\t\t\t} else {\n\t\t\t\tcb(new Error(`InnoSetup returned exit code: ${code}`));\n\t\t\t}\n\t\t});\n}\n\n/**\n * @param {string} arch\n * @param {string} target\n */\nfunction buildWin32Setup(arch, target) {\n\tif (target !== 'system' && target !== 'user') {\n\t\tthrow new Error('Invalid setup target');\n\t}\n\n\treturn cb => {\n\t\tconst x64AppId = target === 'system' ? product.win32x64AppId : product.win32x64UserAppId;\n\t\tconst arm64AppId = target === 'system' ? product.win32arm64AppId : product.win32arm64UserAppId;\n\n\t\tconst sourcePath = buildPath(arch);\n\t\tconst outputPath = setupDir(arch, target);\n\t\tfs.mkdirSync(outputPath, { recursive: true });\n\n\t\tconst originalProductJsonPath = path.join(sourcePath, 'resources/app/product.json');\n\t\tconst productJsonPath = path.join(outputPath, 'product.json');\n\t\tconst productJson = JSON.parse(fs.readFileSync(originalProductJsonPath, 'utf8'));\n\t\tproductJson['target'] = target;\n\t\tfs.writeFileSync(productJsonPath, JSON.stringify(productJson, undefined, '\\t'));\n\n\t\tconst quality = product.quality || 'dev';\n\t\tconst definitions = {\n\t\t\tNameLong: product.nameLong,\n\t\t\tNameShort: product.nameShort,\n\t\t\tDirName: product.win32DirName,\n\t\t\tVersion: pkg.version,\n\t\t\tRawVersion: pkg.version.replace(/-\\w+$/, ''),\n\t\t\tNameVersion: product.win32NameVersion + (target === 'user' ? ' (User)' : ''),\n\t\t\tExeBasename: product.nameShort,\n\t\t\tRegValueName: product.win32RegValueName,\n\t\t\tShellNameShort: product.win32ShellNameShort,\n\t\t\tAppMutex: product.win32MutexName,\n\t\t\tTunnelMutex: product.win32TunnelMutex,\n\t\t\tTunnelServiceMutex: product.win32TunnelServiceMutex,\n\t\t\tTunnelApplicationName: product.tunnelApplicationName,\n\t\t\tApplicationName: product.applicationName,\n\t\t\tArch: arch,\n\t\t\tAppId: { 'x64': x64AppId, 'arm64': arm64AppId }[arch],\n\t\t\tIncompatibleTargetAppId: { 'x64': product.win32x64AppId, 'arm64': product.win32arm64AppId }[arch],\n\t\t\tAppUserId: product.win32AppUserModelId,\n\t\t\tArchitecturesAllowed: { 'x64': 'x64', 'arm64': 'arm64' }[arch],\n\t\t\tArchitecturesInstallIn64BitMode: { 'x64': 'x64', 'arm64': 'arm64' }[arch],\n\t\t\tSourceDir: sourcePath,\n\t\t\tRepoDir: repoPath,\n\t\t\tOutputDir: outputPath,\n\t\t\tInstallTarget: target,\n\t\t\tProductJsonPath: productJsonPath,\n\t\t\tQuality: quality\n\t\t};\n\n\t\tif (quality === 'insider') {\n\t\t\tdefinitions['AppxPackage'] = `code_insiders_explorer_${arch}.appx`;\n\t\t\tdefinitions['AppxPackageFullname'] = `Microsoft.${product.win32RegValueName}_1.0.0.0_neutral__8wekyb3d8bbwe`;\n\t\t}\n\n\t\tpackageInnoSetup(issPath, { definitions }, cb);\n\t};\n}\n\n/**\n * @param {string} arch\n * @param {string} target\n */\nfunction defineWin32SetupTasks(arch, target) {\n\tconst cleanTask = util.rimraf(setupDir(arch, target));\n\tgulp.task(task.define(`vscode-win32-${arch}-${target}-setup`, task.series(cleanTask, buildWin32Setup(arch, target))));\n}\n\ndefineWin32SetupTasks('x64', 'system');\ndefineWin32SetupTasks('arm64', 'system');\ndefineWin32SetupTasks('x64', 'user');\ndefineWin32SetupTasks('arm64', 'user');\n\n/**\n * @param {string} arch\n */\nfunction copyInnoUpdater(arch) {\n\treturn () => {\n\t\treturn gulp.src('build/win32/{inno_updater.exe,vcruntime140.dll}', { base: 'build/win32' })\n\t\t\t.pipe(vfs.dest(path.join(buildPath(arch), 'tools')));\n\t};\n}\n\n/**\n * @param {string} executablePath\n */\nfunction updateIcon(executablePath) {\n\treturn cb => {\n\t\tconst icon = path.join(repoPath, 'resources', 'win32', 'code.ico');\n\t\trcedit(executablePath, { icon }, cb);\n\t};\n}\n\ngulp.task(task.define('vscode-win32-x64-inno-updater', task.series(copyInnoUpdater('x64'), updateIcon(path.join(buildPath('x64'), 'tools', 'inno_updater.exe')))));\ngulp.task(task.define('vscode-win32-arm64-inno-updater', task.series(copyInnoUpdater('arm64'), updateIcon(path.join(buildPath('arm64'), 'tools', 'inno_updater.exe')))));\n"
  },
  {
    "path": "build/hygiene.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst filter = require('gulp-filter');\nconst es = require('event-stream');\nconst VinylFile = require('vinyl');\nconst vfs = require('vinyl-fs');\nconst path = require('path');\nconst fs = require('fs');\nconst pall = require('p-all');\n\nconst { all, copyrightFilter, unicodeFilter, indentationFilter, tsFormattingFilter, eslintFilter, stylelintFilter } = require('./filters');\n\nconst copyrightHeaderLines = [\n\t'/*---------------------------------------------------------------------------------------------',\n\t' *  Copyright (c) Microsoft Corporation. All rights reserved.',\n\t' *  Licensed under the MIT License. See License.txt in the project root for license information.',\n\t' *--------------------------------------------------------------------------------------------*/',\n];\n\nfunction hygiene(some, linting = true) {\n\tconst eslint = require('./gulp-eslint');\n\tconst gulpstylelint = require('./stylelint');\n\tconst formatter = require('./lib/formatter');\n\n\tlet errorCount = 0;\n\n\tconst productJson = es.through(function (file) {\n\t\tconst product = JSON.parse(file.contents.toString('utf8'));\n\n\t\tif (product.extensionsGallery) {\n\t\t\tconsole.error(`product.json: Contains 'extensionsGallery'`);\n\t\t\terrorCount++;\n\t\t}\n\n\t\tthis.emit('data', file);\n\t});\n\n\tconst unicode = es.through(function (file) {\n\t\tconst lines = file.contents.toString('utf8').split(/\\r\\n|\\r|\\n/);\n\t\tfile.__lines = lines;\n\t\tconst allowInComments = lines.some(line => /allow-any-unicode-comment-file/.test(line));\n\t\tlet skipNext = false;\n\t\tlines.forEach((line, i) => {\n\t\t\tif (/allow-any-unicode-next-line/.test(line)) {\n\t\t\t\tskipNext = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (skipNext) {\n\t\t\t\tskipNext = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// If unicode is allowed in comments, trim the comment from the line\n\t\t\tif (allowInComments) {\n\t\t\t\tif (line.match(/\\s+(\\*)/)) { // Naive multi-line comment check\n\t\t\t\t\tline = '';\n\t\t\t\t} else {\n\t\t\t\t\tconst index = line.indexOf('\\/\\/');\n\t\t\t\t\tline = index === -1 ? line : line.substring(0, index);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Please do not add symbols that resemble ASCII letters!\n\t\t\t// eslint-disable-next-line no-misleading-character-class\n\t\t\tconst m = /([^\\t\\n\\r\\x20-\\x7E⊃⊇✔︎✓🎯⚠️🛑🔴🚗🚙🚕🎉✨❗⇧⌥⌘×÷¦⋯…↑↓￫→←↔⟷·•●◆▼⟪⟫┌└├⏎↩√φ]+)/g.exec(line);\n\t\t\tif (m) {\n\t\t\t\tconsole.error(\n\t\t\t\t\tfile.relative + `(${i + 1},${m.index + 1}): Unexpected unicode character: \"${m[0]}\" (charCode: ${m[0].charCodeAt(0)}). To suppress, use // allow-any-unicode-next-line`\n\t\t\t\t);\n\t\t\t\terrorCount++;\n\t\t\t}\n\t\t});\n\n\t\tthis.emit('data', file);\n\t});\n\n\tconst indentation = es.through(function (file) {\n\t\tconst lines = file.__lines || file.contents.toString('utf8').split(/\\r\\n|\\r|\\n/);\n\t\tfile.__lines = lines;\n\n\t\tlines.forEach((line, i) => {\n\t\t\tif (/^\\s*$/.test(line)) {\n\t\t\t\t// empty or whitespace lines are OK\n\t\t\t} else if (/^[\\t]*[^\\s]/.test(line)) {\n\t\t\t\t// good indent\n\t\t\t} else if (/^[\\t]* \\*/.test(line)) {\n\t\t\t\t// block comment using an extra space\n\t\t\t} else {\n\t\t\t\tconsole.error(\n\t\t\t\t\tfile.relative + '(' + (i + 1) + ',1): Bad whitespace indentation'\n\t\t\t\t);\n\t\t\t\terrorCount++;\n\t\t\t}\n\t\t});\n\n\t\tthis.emit('data', file);\n\t});\n\n\tconst copyrights = es.through(function (file) {\n\t\tconst lines = file.__lines;\n\n\t\tfor (let i = 0; i < copyrightHeaderLines.length; i++) {\n\t\t\tif (lines[i] !== copyrightHeaderLines[i]) {\n\t\t\t\tconsole.error(file.relative + ': Missing or bad copyright statement');\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.emit('data', file);\n\t});\n\n\tconst formatting = es.map(function (file, cb) {\n\t\ttry {\n\t\t\tconst rawInput = file.contents.toString('utf8');\n\t\t\tconst rawOutput = formatter.format(file.path, rawInput);\n\n\t\t\tconst original = rawInput.replace(/\\r\\n/gm, '\\n');\n\t\t\tconst formatted = rawOutput.replace(/\\r\\n/gm, '\\n');\n\t\t\tif (original !== formatted) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`File not formatted. Run the 'Format Document' command to fix it:`,\n\t\t\t\t\tfile.relative\n\t\t\t\t);\n\t\t\t\terrorCount++;\n\t\t\t}\n\t\t\tcb(null, file);\n\t\t} catch (err) {\n\t\t\tcb(err);\n\t\t}\n\t});\n\n\tlet input;\n\n\tif (Array.isArray(some) || typeof some === 'string' || !some) {\n\t\tconst options = { base: '.', follow: true, allowEmpty: true };\n\t\tif (some) {\n\t\t\tinput = vfs.src(some, options).pipe(filter(all)); // split this up to not unnecessarily filter all a second time\n\t\t} else {\n\t\t\tinput = vfs.src(all, options);\n\t\t}\n\t} else {\n\t\tinput = some;\n\t}\n\n\tconst productJsonFilter = filter('product.json', { restore: true });\n\tconst snapshotFilter = filter(['**', '!**/*.snap', '!**/*.snap.actual']);\n\tconst yarnLockFilter = filter(['**', '!**/yarn.lock']);\n\tconst unicodeFilterStream = filter(unicodeFilter, { restore: true });\n\n\tconst result = input\n\t\t.pipe(filter((f) => !f.stat.isDirectory()))\n\t\t.pipe(snapshotFilter)\n\t\t.pipe(yarnLockFilter)\n\t\t.pipe(productJsonFilter)\n\t\t.pipe(process.env['BUILD_SOURCEVERSION'] ? es.through() : productJson)\n\t\t.pipe(productJsonFilter.restore)\n\t\t.pipe(unicodeFilterStream)\n\t\t.pipe(unicode)\n\t\t.pipe(unicodeFilterStream.restore)\n\t\t.pipe(filter(indentationFilter))\n\t\t.pipe(indentation)\n\t\t.pipe(filter(copyrightFilter))\n\t\t.pipe(copyrights);\n\n\tconst streams = [\n\t\tresult.pipe(filter(tsFormattingFilter)).pipe(formatting)\n\t];\n\n\tif (linting) {\n\t\tstreams.push(\n\t\t\tresult\n\t\t\t\t.pipe(filter(eslintFilter))\n\t\t\t\t.pipe(\n\t\t\t\t\teslint((results) => {\n\t\t\t\t\t\terrorCount += results.warningCount;\n\t\t\t\t\t\terrorCount += results.errorCount;\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t);\n\t\tstreams.push(\n\t\t\tresult.pipe(filter(stylelintFilter)).pipe(gulpstylelint(((message, isError) => {\n\t\t\t\tif (isError) {\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t\terrorCount++;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(message);\n\t\t\t\t}\n\t\t\t})))\n\t\t);\n\t}\n\n\tlet count = 0;\n\treturn es.merge(...streams).pipe(\n\t\tes.through(\n\t\t\tfunction (data) {\n\t\t\t\tcount++;\n\t\t\t\tif (process.env['TRAVIS'] && count % 10 === 0) {\n\t\t\t\t\tprocess.stdout.write('.');\n\t\t\t\t}\n\t\t\t\tthis.emit('data', data);\n\t\t\t},\n\t\t\tfunction () {\n\t\t\t\tprocess.stdout.write('\\n');\n\t\t\t\tif (errorCount > 0) {\n\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\t'Hygiene failed with ' +\n\t\t\t\t\t\terrorCount +\n\t\t\t\t\t\t` errors. Check 'build / gulpfile.hygiene.js'.`\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.emit('end');\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t);\n}\n\nmodule.exports.hygiene = hygiene;\n\nfunction createGitIndexVinyls(paths) {\n\tconst cp = require('child_process');\n\tconst repositoryPath = process.cwd();\n\n\tconst fns = paths.map((relativePath) => () =>\n\t\tnew Promise((c, e) => {\n\t\t\tconst fullPath = path.join(repositoryPath, relativePath);\n\n\t\t\tfs.stat(fullPath, (err, stat) => {\n\t\t\t\tif (err && err.code === 'ENOENT') {\n\t\t\t\t\t// ignore deletions\n\t\t\t\t\treturn c(null);\n\t\t\t\t} else if (err) {\n\t\t\t\t\treturn e(err);\n\t\t\t\t}\n\n\t\t\t\tcp.exec(\n\t\t\t\t\tprocess.platform === 'win32' ? `git show :${relativePath}` : `git show ':${relativePath}'`,\n\t\t\t\t\t{ maxBuffer: stat.size, encoding: 'buffer' },\n\t\t\t\t\t(err, out) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tc(\n\t\t\t\t\t\t\tnew VinylFile({\n\t\t\t\t\t\t\t\tpath: fullPath,\n\t\t\t\t\t\t\t\tbase: repositoryPath,\n\t\t\t\t\t\t\t\tcontents: out,\n\t\t\t\t\t\t\t\tstat,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t})\n\t);\n\n\treturn pall(fns, { concurrency: 4 }).then((r) => r.filter((p) => !!p));\n}\n\n// Void - NO PRE COMMIT HOOKS!!!! for now... - Void team\n// // this allows us to run hygiene as a git pre-commit hook\n// if (require.main === module) {\n// \tconst cp = require('child_process');\n\n// \tprocess.on('unhandledRejection', (reason, p) => {\n// \t\tconsole.log('Unhandled Rejection at: Promise', p, 'reason:', reason);\n// \t\tprocess.exit(1);\n// \t});\n\n// \tif (process.argv.length > 2) {\n// \t\thygiene(process.argv.slice(2)).on('error', (err) => {\n// \t\t\tconsole.error();\n// \t\t\tconsole.error(err);\n// \t\t\tprocess.exit(1);\n// \t\t});\n// \t} else {\n// \t\tcp.exec(\n// \t\t\t'git diff --cached --name-only',\n// \t\t\t{ maxBuffer: 2000 * 1024 },\n// \t\t\t(err, out) => {\n// \t\t\t\tif (err) {\n// \t\t\t\t\tconsole.error();\n// \t\t\t\t\tconsole.error(err);\n// \t\t\t\t\tprocess.exit(1);\n// \t\t\t\t}\n\n// \t\t\t\tconst some = out.split(/\\r?\\n/).filter((l) => !!l);\n\n// \t\t\t\tif (some.length > 0) {\n// \t\t\t\t\tconsole.log('Reading git index versions...');\n\n// \t\t\t\t\tcreateGitIndexVinyls(some)\n// \t\t\t\t\t\t.then(\n// \t\t\t\t\t\t\t(vinyls) =>\n// \t\t\t\t\t\t\t\tnew Promise((c, e) =>\n// \t\t\t\t\t\t\t\t\thygiene(es.readArray(vinyls).pipe(filter(all)))\n// \t\t\t\t\t\t\t\t\t\t.on('end', () => c())\n// \t\t\t\t\t\t\t\t\t\t.on('error', e)\n// \t\t\t\t\t\t\t\t)\n// \t\t\t\t\t\t)\n// \t\t\t\t\t\t.catch((err) => {\n// \t\t\t\t\t\t\tconsole.error();\n// \t\t\t\t\t\t\tconsole.error(err);\n// \t\t\t\t\t\t\tprocess.exit(1);\n// \t\t\t\t\t\t});\n// \t\t\t\t}\n// \t\t\t}\n// \t\t);\n// \t}\n// }\n"
  },
  {
    "path": "build/lib/asar.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createAsar = createAsar;\nconst path_1 = __importDefault(require(\"path\"));\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst pickle = require('chromium-pickle-js');\nconst Filesystem = require('asar/lib/filesystem');\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst minimatch_1 = __importDefault(require(\"minimatch\"));\nfunction createAsar(folderPath, unpackGlobs, skipGlobs, duplicateGlobs, destFilename) {\n    const shouldUnpackFile = (file) => {\n        for (let i = 0; i < unpackGlobs.length; i++) {\n            if ((0, minimatch_1.default)(file.relative, unpackGlobs[i])) {\n                return true;\n            }\n        }\n        return false;\n    };\n    const shouldSkipFile = (file) => {\n        for (const skipGlob of skipGlobs) {\n            if ((0, minimatch_1.default)(file.relative, skipGlob)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    // Files that should be duplicated between\n    // node_modules.asar and node_modules\n    const shouldDuplicateFile = (file) => {\n        for (const duplicateGlob of duplicateGlobs) {\n            if ((0, minimatch_1.default)(file.relative, duplicateGlob)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    const filesystem = new Filesystem(folderPath);\n    const out = [];\n    // Keep track of pending inserts\n    let pendingInserts = 0;\n    let onFileInserted = () => { pendingInserts--; };\n    // Do not insert twice the same directory\n    const seenDir = {};\n    const insertDirectoryRecursive = (dir) => {\n        if (seenDir[dir]) {\n            return;\n        }\n        let lastSlash = dir.lastIndexOf('/');\n        if (lastSlash === -1) {\n            lastSlash = dir.lastIndexOf('\\\\');\n        }\n        if (lastSlash !== -1) {\n            insertDirectoryRecursive(dir.substring(0, lastSlash));\n        }\n        seenDir[dir] = true;\n        filesystem.insertDirectory(dir);\n    };\n    const insertDirectoryForFile = (file) => {\n        let lastSlash = file.lastIndexOf('/');\n        if (lastSlash === -1) {\n            lastSlash = file.lastIndexOf('\\\\');\n        }\n        if (lastSlash !== -1) {\n            insertDirectoryRecursive(file.substring(0, lastSlash));\n        }\n    };\n    const insertFile = (relativePath, stat, shouldUnpack) => {\n        insertDirectoryForFile(relativePath);\n        pendingInserts++;\n        // Do not pass `onFileInserted` directly because it gets overwritten below.\n        // Create a closure capturing `onFileInserted`.\n        filesystem.insertFile(relativePath, shouldUnpack, { stat: stat }, {}).then(() => onFileInserted(), () => onFileInserted());\n    };\n    return event_stream_1.default.through(function (file) {\n        if (file.stat.isDirectory()) {\n            return;\n        }\n        if (!file.stat.isFile()) {\n            throw new Error(`unknown item in stream!`);\n        }\n        if (shouldSkipFile(file)) {\n            this.queue(new vinyl_1.default({\n                base: '.',\n                path: file.path,\n                stat: file.stat,\n                contents: file.contents\n            }));\n            return;\n        }\n        if (shouldDuplicateFile(file)) {\n            this.queue(new vinyl_1.default({\n                base: '.',\n                path: file.path,\n                stat: file.stat,\n                contents: file.contents\n            }));\n        }\n        const shouldUnpack = shouldUnpackFile(file);\n        insertFile(file.relative, { size: file.contents.length, mode: file.stat.mode }, shouldUnpack);\n        if (shouldUnpack) {\n            // The file goes outside of xx.asar, in a folder xx.asar.unpacked\n            const relative = path_1.default.relative(folderPath, file.path);\n            this.queue(new vinyl_1.default({\n                base: '.',\n                path: path_1.default.join(destFilename + '.unpacked', relative),\n                stat: file.stat,\n                contents: file.contents\n            }));\n        }\n        else {\n            // The file goes inside of xx.asar\n            out.push(file.contents);\n        }\n    }, function () {\n        const finish = () => {\n            {\n                const headerPickle = pickle.createEmpty();\n                headerPickle.writeString(JSON.stringify(filesystem.header));\n                const headerBuf = headerPickle.toBuffer();\n                const sizePickle = pickle.createEmpty();\n                sizePickle.writeUInt32(headerBuf.length);\n                const sizeBuf = sizePickle.toBuffer();\n                out.unshift(headerBuf);\n                out.unshift(sizeBuf);\n            }\n            const contents = Buffer.concat(out);\n            out.length = 0;\n            this.queue(new vinyl_1.default({\n                base: '.',\n                path: destFilename,\n                contents: contents\n            }));\n            this.queue(null);\n        };\n        // Call finish() only when all file inserts have finished...\n        if (pendingInserts === 0) {\n            finish();\n        }\n        else {\n            onFileInserted = () => {\n                pendingInserts--;\n                if (pendingInserts === 0) {\n                    finish();\n                }\n            };\n        }\n    });\n}\n//# sourceMappingURL=asar.js.map"
  },
  {
    "path": "build/lib/asar.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport path from 'path';\nimport es from 'event-stream';\nconst pickle = require('chromium-pickle-js');\nconst Filesystem = <typeof AsarFilesystem>require('asar/lib/filesystem');\nimport VinylFile from 'vinyl';\nimport minimatch from 'minimatch';\n\ndeclare class AsarFilesystem {\n\treadonly header: unknown;\n\tconstructor(src: string);\n\tinsertDirectory(path: string, shouldUnpack?: boolean): unknown;\n\tinsertFile(path: string, shouldUnpack: boolean, file: { stat: { size: number; mode: number } }, options: {}): Promise<void>;\n}\n\nexport function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs: string[], duplicateGlobs: string[], destFilename: string): NodeJS.ReadWriteStream {\n\n\tconst shouldUnpackFile = (file: VinylFile): boolean => {\n\t\tfor (let i = 0; i < unpackGlobs.length; i++) {\n\t\t\tif (minimatch(file.relative, unpackGlobs[i])) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tconst shouldSkipFile = (file: VinylFile): boolean => {\n\t\tfor (const skipGlob of skipGlobs) {\n\t\t\tif (minimatch(file.relative, skipGlob)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t// Files that should be duplicated between\n\t// node_modules.asar and node_modules\n\tconst shouldDuplicateFile = (file: VinylFile): boolean => {\n\t\tfor (const duplicateGlob of duplicateGlobs) {\n\t\t\tif (minimatch(file.relative, duplicateGlob)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tconst filesystem = new Filesystem(folderPath);\n\tconst out: Buffer[] = [];\n\n\t// Keep track of pending inserts\n\tlet pendingInserts = 0;\n\tlet onFileInserted = () => { pendingInserts--; };\n\n\t// Do not insert twice the same directory\n\tconst seenDir: { [key: string]: boolean } = {};\n\tconst insertDirectoryRecursive = (dir: string) => {\n\t\tif (seenDir[dir]) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet lastSlash = dir.lastIndexOf('/');\n\t\tif (lastSlash === -1) {\n\t\t\tlastSlash = dir.lastIndexOf('\\\\');\n\t\t}\n\t\tif (lastSlash !== -1) {\n\t\t\tinsertDirectoryRecursive(dir.substring(0, lastSlash));\n\t\t}\n\t\tseenDir[dir] = true;\n\t\tfilesystem.insertDirectory(dir);\n\t};\n\n\tconst insertDirectoryForFile = (file: string) => {\n\t\tlet lastSlash = file.lastIndexOf('/');\n\t\tif (lastSlash === -1) {\n\t\t\tlastSlash = file.lastIndexOf('\\\\');\n\t\t}\n\t\tif (lastSlash !== -1) {\n\t\t\tinsertDirectoryRecursive(file.substring(0, lastSlash));\n\t\t}\n\t};\n\n\tconst insertFile = (relativePath: string, stat: { size: number; mode: number }, shouldUnpack: boolean) => {\n\t\tinsertDirectoryForFile(relativePath);\n\t\tpendingInserts++;\n\t\t// Do not pass `onFileInserted` directly because it gets overwritten below.\n\t\t// Create a closure capturing `onFileInserted`.\n\t\tfilesystem.insertFile(relativePath, shouldUnpack, { stat: stat }, {}).then(() => onFileInserted(), () => onFileInserted());\n\t};\n\n\treturn es.through(function (file) {\n\t\tif (file.stat.isDirectory()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!file.stat.isFile()) {\n\t\t\tthrow new Error(`unknown item in stream!`);\n\t\t}\n\t\tif (shouldSkipFile(file)) {\n\t\t\tthis.queue(new VinylFile({\n\t\t\t\tbase: '.',\n\t\t\t\tpath: file.path,\n\t\t\t\tstat: file.stat,\n\t\t\t\tcontents: file.contents\n\t\t\t}));\n\t\t\treturn;\n\t\t}\n\t\tif (shouldDuplicateFile(file)) {\n\t\t\tthis.queue(new VinylFile({\n\t\t\t\tbase: '.',\n\t\t\t\tpath: file.path,\n\t\t\t\tstat: file.stat,\n\t\t\t\tcontents: file.contents\n\t\t\t}));\n\t\t}\n\t\tconst shouldUnpack = shouldUnpackFile(file);\n\t\tinsertFile(file.relative, { size: file.contents.length, mode: file.stat.mode }, shouldUnpack);\n\n\t\tif (shouldUnpack) {\n\t\t\t// The file goes outside of xx.asar, in a folder xx.asar.unpacked\n\t\t\tconst relative = path.relative(folderPath, file.path);\n\t\t\tthis.queue(new VinylFile({\n\t\t\t\tbase: '.',\n\t\t\t\tpath: path.join(destFilename + '.unpacked', relative),\n\t\t\t\tstat: file.stat,\n\t\t\t\tcontents: file.contents\n\t\t\t}));\n\t\t} else {\n\t\t\t// The file goes inside of xx.asar\n\t\t\tout.push(file.contents);\n\t\t}\n\t}, function () {\n\n\t\tconst finish = () => {\n\t\t\t{\n\t\t\t\tconst headerPickle = pickle.createEmpty();\n\t\t\t\theaderPickle.writeString(JSON.stringify(filesystem.header));\n\t\t\t\tconst headerBuf = headerPickle.toBuffer();\n\n\t\t\t\tconst sizePickle = pickle.createEmpty();\n\t\t\t\tsizePickle.writeUInt32(headerBuf.length);\n\t\t\t\tconst sizeBuf = sizePickle.toBuffer();\n\n\t\t\t\tout.unshift(headerBuf);\n\t\t\t\tout.unshift(sizeBuf);\n\t\t\t}\n\n\t\t\tconst contents = Buffer.concat(out);\n\t\t\tout.length = 0;\n\n\t\t\tthis.queue(new VinylFile({\n\t\t\t\tbase: '.',\n\t\t\t\tpath: destFilename,\n\t\t\t\tcontents: contents\n\t\t\t}));\n\t\t\tthis.queue(null);\n\t\t};\n\n\t\t// Call finish() only when all file inserts have finished...\n\t\tif (pendingInserts === 0) {\n\t\t\tfinish();\n\t\t} else {\n\t\t\tonFileInserted = () => {\n\t\t\t\tpendingInserts--;\n\t\t\t\tif (pendingInserts === 0) {\n\t\t\t\t\tfinish();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "build/lib/builtInExtensions.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getExtensionStream = getExtensionStream;\nexports.getBuiltInExtensions = getBuiltInExtensions;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst os_1 = __importDefault(require(\"os\"));\nconst rimraf_1 = __importDefault(require(\"rimraf\"));\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst gulp_rename_1 = __importDefault(require(\"gulp-rename\"));\nconst vinyl_fs_1 = __importDefault(require(\"vinyl-fs\"));\nconst ext = __importStar(require(\"./extensions\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst productjson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../product.json'), 'utf8'));\nconst builtInExtensions = productjson.builtInExtensions || [];\nconst webBuiltInExtensions = productjson.webBuiltInExtensions || [];\nconst controlFilePath = path_1.default.join(os_1.default.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');\nconst ENABLE_LOGGING = !process.env['VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE'];\nfunction log(...messages) {\n    if (ENABLE_LOGGING) {\n        (0, fancy_log_1.default)(...messages);\n    }\n}\nfunction getExtensionPath(extension) {\n    return path_1.default.join(root, '.build', 'builtInExtensions', extension.name);\n}\nfunction isUpToDate(extension) {\n    const packagePath = path_1.default.join(getExtensionPath(extension), 'package.json');\n    if (!fs_1.default.existsSync(packagePath)) {\n        return false;\n    }\n    const packageContents = fs_1.default.readFileSync(packagePath, { encoding: 'utf8' });\n    try {\n        const diskVersion = JSON.parse(packageContents).version;\n        return (diskVersion === extension.version);\n    }\n    catch (err) {\n        return false;\n    }\n}\nfunction getExtensionDownloadStream(extension) {\n    let input;\n    if (extension.vsix) {\n        input = ext.fromVsix(path_1.default.join(root, extension.vsix), extension);\n    }\n    else if (productjson.extensionsGallery?.serviceUrl) {\n        input = ext.fromMarketplace(productjson.extensionsGallery.serviceUrl, extension);\n    }\n    else {\n        input = ext.fromGithub(extension);\n    }\n    return input.pipe((0, gulp_rename_1.default)(p => p.dirname = `${extension.name}/${p.dirname}`));\n}\nfunction getExtensionStream(extension) {\n    // if the extension exists on disk, use those files instead of downloading anew\n    if (isUpToDate(extension)) {\n        log('[extensions]', `${extension.name}@${extension.version} up to date`, ansi_colors_1.default.green('✔︎'));\n        return vinyl_fs_1.default.src(['**'], { cwd: getExtensionPath(extension), dot: true })\n            .pipe((0, gulp_rename_1.default)(p => p.dirname = `${extension.name}/${p.dirname}`));\n    }\n    return getExtensionDownloadStream(extension);\n}\nfunction syncMarketplaceExtension(extension) {\n    const galleryServiceUrl = productjson.extensionsGallery?.serviceUrl;\n    const source = ansi_colors_1.default.blue(galleryServiceUrl ? '[marketplace]' : '[github]');\n    if (isUpToDate(extension)) {\n        log(source, `${extension.name}@${extension.version}`, ansi_colors_1.default.green('✔︎'));\n        return event_stream_1.default.readArray([]);\n    }\n    rimraf_1.default.sync(getExtensionPath(extension));\n    return getExtensionDownloadStream(extension)\n        .pipe(vinyl_fs_1.default.dest('.build/builtInExtensions'))\n        .on('end', () => log(source, extension.name, ansi_colors_1.default.green('✔︎')));\n}\nfunction syncExtension(extension, controlState) {\n    if (extension.platforms) {\n        const platforms = new Set(extension.platforms);\n        if (!platforms.has(process.platform)) {\n            log(ansi_colors_1.default.gray('[skip]'), `${extension.name}@${extension.version}: Platform '${process.platform}' not supported: [${extension.platforms}]`, ansi_colors_1.default.green('✔︎'));\n            return event_stream_1.default.readArray([]);\n        }\n    }\n    switch (controlState) {\n        case 'disabled':\n            log(ansi_colors_1.default.blue('[disabled]'), ansi_colors_1.default.gray(extension.name));\n            return event_stream_1.default.readArray([]);\n        case 'marketplace':\n            return syncMarketplaceExtension(extension);\n        default:\n            if (!fs_1.default.existsSync(controlState)) {\n                log(ansi_colors_1.default.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but that path does not exist.`));\n                return event_stream_1.default.readArray([]);\n            }\n            else if (!fs_1.default.existsSync(path_1.default.join(controlState, 'package.json'))) {\n                log(ansi_colors_1.default.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but there is no 'package.json' file in that directory.`));\n                return event_stream_1.default.readArray([]);\n            }\n            log(ansi_colors_1.default.blue('[local]'), `${extension.name}: ${ansi_colors_1.default.cyan(controlState)}`, ansi_colors_1.default.green('✔︎'));\n            return event_stream_1.default.readArray([]);\n    }\n}\nfunction readControlFile() {\n    try {\n        return JSON.parse(fs_1.default.readFileSync(controlFilePath, 'utf8'));\n    }\n    catch (err) {\n        return {};\n    }\n}\nfunction writeControlFile(control) {\n    fs_1.default.mkdirSync(path_1.default.dirname(controlFilePath), { recursive: true });\n    fs_1.default.writeFileSync(controlFilePath, JSON.stringify(control, null, 2));\n}\nfunction getBuiltInExtensions() {\n    log('Synchronizing built-in extensions...');\n    log(`You can manage built-in extensions with the ${ansi_colors_1.default.cyan('--builtin')} flag`);\n    const control = readControlFile();\n    const streams = [];\n    for (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {\n        const controlState = control[extension.name] || 'marketplace';\n        control[extension.name] = controlState;\n        streams.push(syncExtension(extension, controlState));\n    }\n    writeControlFile(control);\n    return new Promise((resolve, reject) => {\n        event_stream_1.default.merge(streams)\n            .on('error', reject)\n            .on('end', resolve);\n    });\n}\nif (require.main === module) {\n    getBuiltInExtensions().then(() => process.exit(0)).catch(err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=builtInExtensions.js.map"
  },
  {
    "path": "build/lib/builtInExtensions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport rimraf from 'rimraf';\nimport es from 'event-stream';\nimport rename from 'gulp-rename';\nimport vfs from 'vinyl-fs';\nimport * as ext from './extensions';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\nimport { Stream } from 'stream';\n\nexport interface IExtensionDefinition {\n\tname: string;\n\tversion: string;\n\tsha256: string;\n\trepo: string;\n\tplatforms?: string[];\n\tvsix?: string;\n\tmetadata: {\n\t\tid: string;\n\t\tpublisherId: {\n\t\t\tpublisherId: string;\n\t\t\tpublisherName: string;\n\t\t\tdisplayName: string;\n\t\t\tflags: string;\n\t\t};\n\t\tpublisherDisplayName: string;\n\t};\n}\n\nconst root = path.dirname(path.dirname(__dirname));\nconst productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));\nconst builtInExtensions = <IExtensionDefinition[]>productjson.builtInExtensions || [];\nconst webBuiltInExtensions = <IExtensionDefinition[]>productjson.webBuiltInExtensions || [];\nconst controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');\nconst ENABLE_LOGGING = !process.env['VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE'];\n\nfunction log(...messages: string[]): void {\n\tif (ENABLE_LOGGING) {\n\t\tfancyLog(...messages);\n\t}\n}\n\nfunction getExtensionPath(extension: IExtensionDefinition): string {\n\treturn path.join(root, '.build', 'builtInExtensions', extension.name);\n}\n\nfunction isUpToDate(extension: IExtensionDefinition): boolean {\n\tconst packagePath = path.join(getExtensionPath(extension), 'package.json');\n\n\tif (!fs.existsSync(packagePath)) {\n\t\treturn false;\n\t}\n\n\tconst packageContents = fs.readFileSync(packagePath, { encoding: 'utf8' });\n\n\ttry {\n\t\tconst diskVersion = JSON.parse(packageContents).version;\n\t\treturn (diskVersion === extension.version);\n\t} catch (err) {\n\t\treturn false;\n\t}\n}\n\nfunction getExtensionDownloadStream(extension: IExtensionDefinition) {\n\tlet input: Stream;\n\n\tif (extension.vsix) {\n\t\tinput = ext.fromVsix(path.join(root, extension.vsix), extension);\n\t} else if (productjson.extensionsGallery?.serviceUrl) {\n\t\tinput = ext.fromMarketplace(productjson.extensionsGallery.serviceUrl, extension);\n\t} else {\n\t\tinput = ext.fromGithub(extension);\n\t}\n\n\treturn input.pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));\n}\n\nexport function getExtensionStream(extension: IExtensionDefinition) {\n\t// if the extension exists on disk, use those files instead of downloading anew\n\tif (isUpToDate(extension)) {\n\t\tlog('[extensions]', `${extension.name}@${extension.version} up to date`, ansiColors.green('✔︎'));\n\t\treturn vfs.src(['**'], { cwd: getExtensionPath(extension), dot: true })\n\t\t\t.pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`));\n\t}\n\n\treturn getExtensionDownloadStream(extension);\n}\n\nfunction syncMarketplaceExtension(extension: IExtensionDefinition): Stream {\n\tconst galleryServiceUrl = productjson.extensionsGallery?.serviceUrl;\n\tconst source = ansiColors.blue(galleryServiceUrl ? '[marketplace]' : '[github]');\n\tif (isUpToDate(extension)) {\n\t\tlog(source, `${extension.name}@${extension.version}`, ansiColors.green('✔︎'));\n\t\treturn es.readArray([]);\n\t}\n\n\trimraf.sync(getExtensionPath(extension));\n\n\treturn getExtensionDownloadStream(extension)\n\t\t.pipe(vfs.dest('.build/builtInExtensions'))\n\t\t.on('end', () => log(source, extension.name, ansiColors.green('✔︎')));\n}\n\nfunction syncExtension(extension: IExtensionDefinition, controlState: 'disabled' | 'marketplace'): Stream {\n\tif (extension.platforms) {\n\t\tconst platforms = new Set(extension.platforms);\n\n\t\tif (!platforms.has(process.platform)) {\n\t\t\tlog(ansiColors.gray('[skip]'), `${extension.name}@${extension.version}: Platform '${process.platform}' not supported: [${extension.platforms}]`, ansiColors.green('✔︎'));\n\t\t\treturn es.readArray([]);\n\t\t}\n\t}\n\n\tswitch (controlState) {\n\t\tcase 'disabled':\n\t\t\tlog(ansiColors.blue('[disabled]'), ansiColors.gray(extension.name));\n\t\t\treturn es.readArray([]);\n\n\t\tcase 'marketplace':\n\t\t\treturn syncMarketplaceExtension(extension);\n\n\t\tdefault:\n\t\t\tif (!fs.existsSync(controlState)) {\n\t\t\t\tlog(ansiColors.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but that path does not exist.`));\n\t\t\t\treturn es.readArray([]);\n\n\t\t\t} else if (!fs.existsSync(path.join(controlState, 'package.json'))) {\n\t\t\t\tlog(ansiColors.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but there is no 'package.json' file in that directory.`));\n\t\t\t\treturn es.readArray([]);\n\t\t\t}\n\n\t\t\tlog(ansiColors.blue('[local]'), `${extension.name}: ${ansiColors.cyan(controlState)}`, ansiColors.green('✔︎'));\n\t\t\treturn es.readArray([]);\n\t}\n}\n\ninterface IControlFile {\n\t[name: string]: 'disabled' | 'marketplace';\n}\n\nfunction readControlFile(): IControlFile {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(controlFilePath, 'utf8'));\n\t} catch (err) {\n\t\treturn {};\n\t}\n}\n\nfunction writeControlFile(control: IControlFile): void {\n\tfs.mkdirSync(path.dirname(controlFilePath), { recursive: true });\n\tfs.writeFileSync(controlFilePath, JSON.stringify(control, null, 2));\n}\n\nexport function getBuiltInExtensions(): Promise<void> {\n\tlog('Synchronizing built-in extensions...');\n\tlog(`You can manage built-in extensions with the ${ansiColors.cyan('--builtin')} flag`);\n\n\tconst control = readControlFile();\n\tconst streams: Stream[] = [];\n\n\tfor (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {\n\t\tconst controlState = control[extension.name] || 'marketplace';\n\t\tcontrol[extension.name] = controlState;\n\n\t\tstreams.push(syncExtension(extension, controlState));\n\t}\n\n\twriteControlFile(control);\n\n\treturn new Promise((resolve, reject) => {\n\t\tes.merge(streams)\n\t\t\t.on('error', reject)\n\t\t\t.on('end', resolve);\n\t});\n}\n\nif (require.main === module) {\n\tgetBuiltInExtensions().then(() => process.exit(0)).catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/lib/builtInExtensionsCG.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst url_1 = __importDefault(require(\"url\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst rootCG = path_1.default.join(root, 'extensionsCG');\nconst productjson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../product.json'), 'utf8'));\nconst builtInExtensions = productjson.builtInExtensions || [];\nconst webBuiltInExtensions = productjson.webBuiltInExtensions || [];\nconst token = process.env['GITHUB_TOKEN'];\nconst contentBasePath = 'raw.githubusercontent.com';\nconst contentFileNames = ['package.json', 'package-lock.json'];\nasync function downloadExtensionDetails(extension) {\n    const extensionLabel = `${extension.name}@${extension.version}`;\n    const repository = url_1.default.parse(extension.repo).path.substr(1);\n    const repositoryContentBaseUrl = `https://${token ? `${token}@` : ''}${contentBasePath}/${repository}/v${extension.version}`;\n    async function getContent(fileName) {\n        try {\n            const response = await fetch(`${repositoryContentBaseUrl}/${fileName}`);\n            if (response.ok) {\n                return { fileName, body: Buffer.from(await response.arrayBuffer()) };\n            }\n            else if (response.status === 404) {\n                return { fileName, body: undefined };\n            }\n            else {\n                return { fileName, body: null };\n            }\n        }\n        catch (e) {\n            return { fileName, body: null };\n        }\n    }\n    const promises = contentFileNames.map(getContent);\n    console.log(extensionLabel);\n    const results = await Promise.all(promises);\n    for (const result of results) {\n        if (result.body) {\n            const extensionFolder = path_1.default.join(rootCG, extension.name);\n            fs_1.default.mkdirSync(extensionFolder, { recursive: true });\n            fs_1.default.writeFileSync(path_1.default.join(extensionFolder, result.fileName), result.body);\n            console.log(`  - ${result.fileName} ${ansi_colors_1.default.green('✔︎')}`);\n        }\n        else if (result.body === undefined) {\n            console.log(`  - ${result.fileName} ${ansi_colors_1.default.yellow('⚠️')}`);\n        }\n        else {\n            console.log(`  - ${result.fileName} ${ansi_colors_1.default.red('🛑')}`);\n        }\n    }\n    // Validation\n    if (!results.find(r => r.fileName === 'package.json')?.body) {\n        // throw new Error(`The \"package.json\" file could not be found for the built-in extension - ${extensionLabel}`);\n    }\n    if (!results.find(r => r.fileName === 'package-lock.json')?.body) {\n        // throw new Error(`The \"package-lock.json\" could not be found for the built-in extension - ${extensionLabel}`);\n    }\n}\nasync function main() {\n    for (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {\n        await downloadExtensionDetails(extension);\n    }\n}\nmain().then(() => {\n    console.log(`Built-in extensions component data downloaded ${ansi_colors_1.default.green('✔︎')}`);\n    process.exit(0);\n}, err => {\n    console.log(`Built-in extensions component data could not be downloaded ${ansi_colors_1.default.red('🛑')}`);\n    console.error(err);\n    process.exit(1);\n});\n//# sourceMappingURL=builtInExtensionsCG.js.map"
  },
  {
    "path": "build/lib/builtInExtensionsCG.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport url from 'url';\nimport ansiColors from 'ansi-colors';\nimport { IExtensionDefinition } from './builtInExtensions';\n\nconst root = path.dirname(path.dirname(__dirname));\nconst rootCG = path.join(root, 'extensionsCG');\nconst productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));\nconst builtInExtensions = <IExtensionDefinition[]>productjson.builtInExtensions || [];\nconst webBuiltInExtensions = <IExtensionDefinition[]>productjson.webBuiltInExtensions || [];\nconst token = process.env['GITHUB_TOKEN'];\n\nconst contentBasePath = 'raw.githubusercontent.com';\nconst contentFileNames = ['package.json', 'package-lock.json'];\n\nasync function downloadExtensionDetails(extension: IExtensionDefinition): Promise<void> {\n\tconst extensionLabel = `${extension.name}@${extension.version}`;\n\tconst repository = url.parse(extension.repo).path!.substr(1);\n\tconst repositoryContentBaseUrl = `https://${token ? `${token}@` : ''}${contentBasePath}/${repository}/v${extension.version}`;\n\n\n\tasync function getContent(fileName: string): Promise<{ fileName: string; body: Buffer | undefined | null }> {\n\t\ttry {\n\t\t\tconst response = await fetch(`${repositoryContentBaseUrl}/${fileName}`);\n\t\t\tif (response.ok) {\n\t\t\t\treturn { fileName, body: Buffer.from(await response.arrayBuffer()) };\n\t\t\t} else if (response.status === 404) {\n\t\t\t\treturn { fileName, body: undefined };\n\t\t\t} else {\n\t\t\t\treturn { fileName, body: null };\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn { fileName, body: null };\n\t\t}\n\t}\n\n\tconst promises = contentFileNames.map(getContent);\n\n\tconsole.log(extensionLabel);\n\tconst results = await Promise.all(promises);\n\tfor (const result of results) {\n\t\tif (result.body) {\n\t\t\tconst extensionFolder = path.join(rootCG, extension.name);\n\t\t\tfs.mkdirSync(extensionFolder, { recursive: true });\n\t\t\tfs.writeFileSync(path.join(extensionFolder, result.fileName), result.body);\n\t\t\tconsole.log(`  - ${result.fileName} ${ansiColors.green('✔︎')}`);\n\t\t} else if (result.body === undefined) {\n\t\t\tconsole.log(`  - ${result.fileName} ${ansiColors.yellow('⚠️')}`);\n\t\t} else {\n\t\t\tconsole.log(`  - ${result.fileName} ${ansiColors.red('🛑')}`);\n\t\t}\n\t}\n\n\t// Validation\n\tif (!results.find(r => r.fileName === 'package.json')?.body) {\n\t\t// throw new Error(`The \"package.json\" file could not be found for the built-in extension - ${extensionLabel}`);\n\t}\n\tif (!results.find(r => r.fileName === 'package-lock.json')?.body) {\n\t\t// throw new Error(`The \"package-lock.json\" could not be found for the built-in extension - ${extensionLabel}`);\n\t}\n}\n\nasync function main(): Promise<void> {\n\tfor (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {\n\t\tawait downloadExtensionDetails(extension);\n\t}\n}\n\nmain().then(() => {\n\tconsole.log(`Built-in extensions component data downloaded ${ansiColors.green('✔︎')}`);\n\tprocess.exit(0);\n}, err => {\n\tconsole.log(`Built-in extensions component data could not be downloaded ${ansiColors.red('🛑')}`);\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"
  },
  {
    "path": "build/lib/bundle.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeAllTSBoilerplate = removeAllTSBoilerplate;\nfunction removeAllTSBoilerplate(source) {\n    const seen = new Array(BOILERPLATE.length).fill(true, 0, BOILERPLATE.length);\n    return removeDuplicateTSBoilerplate(source, seen);\n}\n// Taken from typescript compiler => emitFiles\nconst BOILERPLATE = [\n    { start: /^var __extends/, end: /^}\\)\\(\\);$/ },\n    { start: /^var __assign/, end: /^};$/ },\n    { start: /^var __decorate/, end: /^};$/ },\n    { start: /^var __metadata/, end: /^};$/ },\n    { start: /^var __param/, end: /^};$/ },\n    { start: /^var __awaiter/, end: /^};$/ },\n    { start: /^var __generator/, end: /^};$/ },\n    { start: /^var __createBinding/, end: /^}\\)\\);$/ },\n    { start: /^var __setModuleDefault/, end: /^}\\);$/ },\n    { start: /^var __importStar/, end: /^};$/ },\n    { start: /^var __addDisposableResource/, end: /^};$/ },\n    { start: /^var __disposeResources/, end: /^}\\);$/ },\n];\nfunction removeDuplicateTSBoilerplate(source, SEEN_BOILERPLATE = []) {\n    const lines = source.split(/\\r\\n|\\n|\\r/);\n    const newLines = [];\n    let IS_REMOVING_BOILERPLATE = false, END_BOILERPLATE;\n    for (let i = 0; i < lines.length; i++) {\n        const line = lines[i];\n        if (IS_REMOVING_BOILERPLATE) {\n            newLines.push('');\n            if (END_BOILERPLATE.test(line)) {\n                IS_REMOVING_BOILERPLATE = false;\n            }\n        }\n        else {\n            for (let j = 0; j < BOILERPLATE.length; j++) {\n                const boilerplate = BOILERPLATE[j];\n                if (boilerplate.start.test(line)) {\n                    if (SEEN_BOILERPLATE[j]) {\n                        IS_REMOVING_BOILERPLATE = true;\n                        END_BOILERPLATE = boilerplate.end;\n                    }\n                    else {\n                        SEEN_BOILERPLATE[j] = true;\n                    }\n                }\n            }\n            if (IS_REMOVING_BOILERPLATE) {\n                newLines.push('');\n            }\n            else {\n                newLines.push(line);\n            }\n        }\n    }\n    return newLines.join('\\n');\n}\n//# sourceMappingURL=bundle.js.map"
  },
  {
    "path": "build/lib/bundle.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IEntryPoint {\n\tname: string;\n\tinclude?: string[];\n\tdest?: string;\n}\n\nexport function removeAllTSBoilerplate(source: string) {\n\tconst seen = new Array<boolean>(BOILERPLATE.length).fill(true, 0, BOILERPLATE.length);\n\treturn removeDuplicateTSBoilerplate(source, seen);\n}\n\n// Taken from typescript compiler => emitFiles\nconst BOILERPLATE = [\n\t{ start: /^var __extends/, end: /^}\\)\\(\\);$/ },\n\t{ start: /^var __assign/, end: /^};$/ },\n\t{ start: /^var __decorate/, end: /^};$/ },\n\t{ start: /^var __metadata/, end: /^};$/ },\n\t{ start: /^var __param/, end: /^};$/ },\n\t{ start: /^var __awaiter/, end: /^};$/ },\n\t{ start: /^var __generator/, end: /^};$/ },\n\t{ start: /^var __createBinding/, end: /^}\\)\\);$/ },\n\t{ start: /^var __setModuleDefault/, end: /^}\\);$/ },\n\t{ start: /^var __importStar/, end: /^};$/ },\n\t{ start: /^var __addDisposableResource/, end: /^};$/ },\n\t{ start: /^var __disposeResources/, end: /^}\\);$/ },\n];\n\nfunction removeDuplicateTSBoilerplate(source: string, SEEN_BOILERPLATE: boolean[] = []): string {\n\tconst lines = source.split(/\\r\\n|\\n|\\r/);\n\tconst newLines: string[] = [];\n\tlet IS_REMOVING_BOILERPLATE = false, END_BOILERPLATE: RegExp;\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i];\n\t\tif (IS_REMOVING_BOILERPLATE) {\n\t\t\tnewLines.push('');\n\t\t\tif (END_BOILERPLATE!.test(line)) {\n\t\t\t\tIS_REMOVING_BOILERPLATE = false;\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let j = 0; j < BOILERPLATE.length; j++) {\n\t\t\t\tconst boilerplate = BOILERPLATE[j];\n\t\t\t\tif (boilerplate.start.test(line)) {\n\t\t\t\t\tif (SEEN_BOILERPLATE[j]) {\n\t\t\t\t\t\tIS_REMOVING_BOILERPLATE = true;\n\t\t\t\t\t\tEND_BOILERPLATE = boilerplate.end;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tSEEN_BOILERPLATE[j] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (IS_REMOVING_BOILERPLATE) {\n\t\t\t\tnewLines.push('');\n\t\t\t} else {\n\t\t\t\tnewLines.push(line);\n\t\t\t}\n\t\t}\n\t}\n\treturn newLines.join('\\n');\n}\n"
  },
  {
    "path": "build/lib/compilation.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.watchApiProposalNamesTask = exports.compileApiProposalNamesTask = void 0;\nexports.createCompile = createCompile;\nexports.transpileTask = transpileTask;\nexports.compileTask = compileTask;\nexports.watchTask = watchTask;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst gulp_1 = __importDefault(require(\"gulp\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst monacodts = __importStar(require(\"./monaco-api\"));\nconst nls = __importStar(require(\"./nls\"));\nconst reporter_1 = require(\"./reporter\");\nconst util = __importStar(require(\"./util\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst os_1 = __importDefault(require(\"os\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst task = __importStar(require(\"./task\"));\nconst index_1 = require(\"./mangle/index\");\nconst postcss_1 = require(\"./postcss\");\nconst ts = require(\"typescript\");\nconst watch = require('./watch');\n// --- gulp-tsb: compile and transpile --------------------------------\nconst reporter = (0, reporter_1.createReporter)();\nfunction getTypeScriptCompilerOptions(src) {\n    const rootDir = path_1.default.join(__dirname, `../../${src}`);\n    const options = {};\n    options.verbose = false;\n    options.sourceMap = true;\n    if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry\n        options.sourceMap = false;\n    }\n    options.rootDir = rootDir;\n    options.baseUrl = rootDir;\n    options.sourceRoot = util.toFileUri(rootDir);\n    options.newLine = /\\r\\n/.test(fs_1.default.readFileSync(__filename, 'utf8')) ? 0 : 1;\n    return options;\n}\nfunction createCompile(src, { build, emitError, transpileOnly, preserveEnglish }) {\n    const tsb = require('./tsb');\n    const sourcemaps = require('gulp-sourcemaps');\n    const projectPath = path_1.default.join(__dirname, '../../', src, 'tsconfig.json');\n    const overrideOptions = { ...getTypeScriptCompilerOptions(src), inlineSources: Boolean(build) };\n    if (!build) {\n        overrideOptions.inlineSourceMap = true;\n    }\n    const compilation = tsb.create(projectPath, overrideOptions, {\n        verbose: false,\n        transpileOnly: Boolean(transpileOnly),\n        transpileWithSwc: typeof transpileOnly !== 'boolean' && transpileOnly.esbuild\n    }, err => reporter(err));\n    function pipeline(token) {\n        const bom = require('gulp-bom');\n        const tsFilter = util.filter(data => /\\.ts$/.test(data.path));\n        const isUtf8Test = (f) => /(\\/|\\\\)test(\\/|\\\\).*utf8/.test(f.path);\n        const isRuntimeJs = (f) => f.path.endsWith('.js') && !f.path.includes('fixtures');\n        const isCSS = (f) => f.path.endsWith('.css') && !f.path.includes('fixtures');\n        const noDeclarationsFilter = util.filter(data => !(/\\.d\\.ts$/.test(data.path)));\n        const postcssNesting = require('postcss-nesting');\n        const input = event_stream_1.default.through();\n        const output = input\n            .pipe(util.$if(isUtf8Test, bom())) // this is required to preserve BOM in test files that loose it otherwise\n            .pipe(util.$if(!build && isRuntimeJs, util.appendOwnPathSourceURL()))\n            .pipe(util.$if(isCSS, (0, postcss_1.gulpPostcss)([postcssNesting()], err => reporter(String(err)))))\n            .pipe(tsFilter)\n            .pipe(util.loadSourcemaps())\n            .pipe(compilation(token))\n            .pipe(noDeclarationsFilter)\n            .pipe(util.$if(build, nls.nls({ preserveEnglish })))\n            .pipe(noDeclarationsFilter.restore)\n            .pipe(util.$if(!transpileOnly, sourcemaps.write('.', {\n            addComment: false,\n            includeContent: !!build,\n            sourceRoot: overrideOptions.sourceRoot\n        })))\n            .pipe(tsFilter.restore)\n            .pipe(reporter.end(!!emitError));\n        return event_stream_1.default.duplex(input, output);\n    }\n    pipeline.tsProjectSrc = () => {\n        return compilation.src({ base: src });\n    };\n    pipeline.projectPath = projectPath;\n    return pipeline;\n}\nfunction transpileTask(src, out, esbuild) {\n    const task = () => {\n        const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild }, preserveEnglish: false });\n        const srcPipe = gulp_1.default.src(`${src}/**`, { base: `${src}` });\n        return srcPipe\n            .pipe(transpile())\n            .pipe(gulp_1.default.dest(out));\n    };\n    task.taskName = `transpile-${path_1.default.basename(src)}`;\n    return task;\n}\nfunction compileTask(src, out, build, options = {}) {\n    const task = () => {\n        if (os_1.default.totalmem() < 4_000_000_000) {\n            throw new Error('compilation requires 4GB of RAM');\n        }\n        const compile = createCompile(src, { build, emitError: true, transpileOnly: false, preserveEnglish: !!options.preserveEnglish });\n        const srcPipe = gulp_1.default.src(`${src}/**`, { base: `${src}` });\n        const generator = new MonacoGenerator(false);\n        if (src === 'src') {\n            generator.execute();\n        }\n        // mangle: TypeScript to TypeScript\n        let mangleStream = event_stream_1.default.through();\n        if (build && !options.disableMangle) {\n            let ts2tsMangler = new index_1.Mangler(compile.projectPath, (...data) => (0, fancy_log_1.default)(ansi_colors_1.default.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true });\n            const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState']));\n            mangleStream = event_stream_1.default.through(async function write(data) {\n                const tsNormalPath = ts.normalizePath(data.path);\n                const newContents = (await newContentsByFileName).get(tsNormalPath);\n                if (newContents !== undefined) {\n                    data.contents = Buffer.from(newContents.out);\n                    data.sourceMap = newContents.sourceMap && JSON.parse(newContents.sourceMap);\n                }\n                this.push(data);\n            }, async function end() {\n                // free resources\n                (await newContentsByFileName).clear();\n                this.push(null);\n                ts2tsMangler = undefined;\n            });\n        }\n        return srcPipe\n            .pipe(mangleStream)\n            .pipe(generator.stream)\n            .pipe(compile())\n            .pipe(gulp_1.default.dest(out));\n    };\n    task.taskName = `compile-${path_1.default.basename(src)}`;\n    return task;\n}\nfunction watchTask(out, build, srcPath = 'src') {\n    const task = () => {\n        const compile = createCompile(srcPath, { build, emitError: false, transpileOnly: false, preserveEnglish: false });\n        const src = gulp_1.default.src(`${srcPath}/**`, { base: srcPath });\n        const watchSrc = watch(`${srcPath}/**`, { base: srcPath, readDelay: 200 });\n        const generator = new MonacoGenerator(true);\n        generator.execute();\n        return watchSrc\n            .pipe(generator.stream)\n            .pipe(util.incremental(compile, src, true))\n            .pipe(gulp_1.default.dest(out));\n    };\n    task.taskName = `watch-${path_1.default.basename(out)}`;\n    return task;\n}\nconst REPO_SRC_FOLDER = path_1.default.join(__dirname, '../../src');\nclass MonacoGenerator {\n    _isWatch;\n    stream;\n    _watchedFiles;\n    _fsProvider;\n    _declarationResolver;\n    constructor(isWatch) {\n        this._isWatch = isWatch;\n        this.stream = event_stream_1.default.through();\n        this._watchedFiles = {};\n        const onWillReadFile = (moduleId, filePath) => {\n            if (!this._isWatch) {\n                return;\n            }\n            if (this._watchedFiles[filePath]) {\n                return;\n            }\n            this._watchedFiles[filePath] = true;\n            fs_1.default.watchFile(filePath, () => {\n                this._declarationResolver.invalidateCache(moduleId);\n                this._executeSoon();\n            });\n        };\n        this._fsProvider = new class extends monacodts.FSProvider {\n            readFileSync(moduleId, filePath) {\n                onWillReadFile(moduleId, filePath);\n                return super.readFileSync(moduleId, filePath);\n            }\n        };\n        this._declarationResolver = new monacodts.DeclarationResolver(this._fsProvider);\n        if (this._isWatch) {\n            fs_1.default.watchFile(monacodts.RECIPE_PATH, () => {\n                this._executeSoon();\n            });\n        }\n    }\n    _executeSoonTimer = null;\n    _executeSoon() {\n        if (this._executeSoonTimer !== null) {\n            clearTimeout(this._executeSoonTimer);\n            this._executeSoonTimer = null;\n        }\n        this._executeSoonTimer = setTimeout(() => {\n            this._executeSoonTimer = null;\n            this.execute();\n        }, 20);\n    }\n    _run() {\n        const r = monacodts.run3(this._declarationResolver);\n        if (!r && !this._isWatch) {\n            // The build must always be able to generate the monaco.d.ts\n            throw new Error(`monaco.d.ts generation error - Cannot continue`);\n        }\n        return r;\n    }\n    _log(message, ...rest) {\n        (0, fancy_log_1.default)(ansi_colors_1.default.cyan('[monaco.d.ts]'), message, ...rest);\n    }\n    execute() {\n        const startTime = Date.now();\n        const result = this._run();\n        if (!result) {\n            // nothing really changed\n            return;\n        }\n        if (result.isTheSame) {\n            return;\n        }\n        fs_1.default.writeFileSync(result.filePath, result.content);\n        fs_1.default.writeFileSync(path_1.default.join(REPO_SRC_FOLDER, 'vs/editor/common/standalone/standaloneEnums.ts'), result.enums);\n        this._log(`monaco.d.ts is changed - total time took ${Date.now() - startTime} ms`);\n        if (!this._isWatch) {\n            this.stream.emit('error', 'monaco.d.ts is no longer up to date. Please run gulp watch and commit the new file.');\n        }\n    }\n}\nfunction generateApiProposalNames() {\n    let eol;\n    try {\n        const src = fs_1.default.readFileSync('src/vs/platform/extensions/common/extensionsApiProposals.ts', 'utf-8');\n        const match = /\\r?\\n/m.exec(src);\n        eol = match ? match[0] : os_1.default.EOL;\n    }\n    catch {\n        eol = os_1.default.EOL;\n    }\n    const pattern = /vscode\\.proposed\\.([a-zA-Z\\d]+)\\.d\\.ts$/;\n    const versionPattern = /^\\s*\\/\\/\\s*version\\s*:\\s*(\\d+)\\s*$/mi;\n    const proposals = new Map();\n    const input = event_stream_1.default.through();\n    const output = input\n        .pipe(util.filter((f) => pattern.test(f.path)))\n        .pipe(event_stream_1.default.through((f) => {\n        const name = path_1.default.basename(f.path);\n        const match = pattern.exec(name);\n        if (!match) {\n            return;\n        }\n        const proposalName = match[1];\n        const contents = f.contents.toString('utf8');\n        const versionMatch = versionPattern.exec(contents);\n        const version = versionMatch ? versionMatch[1] : undefined;\n        proposals.set(proposalName, {\n            proposal: `https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.${proposalName}.d.ts`,\n            version: version ? parseInt(version) : undefined\n        });\n    }, function () {\n        const names = [...proposals.keys()].sort();\n        const contents = [\n            '/*---------------------------------------------------------------------------------------------',\n            ' *  Copyright (c) Microsoft Corporation. All rights reserved.',\n            ' *  Licensed under the MIT License. See License.txt in the project root for license information.',\n            ' *--------------------------------------------------------------------------------------------*/',\n            '',\n            '// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.',\n            '',\n            'const _allApiProposals = {',\n            `${names.map(proposalName => {\n                const proposal = proposals.get(proposalName);\n                return `\\t${proposalName}: {${eol}\\t\\tproposal: '${proposal.proposal}',${eol}${proposal.version ? `\\t\\tversion: ${proposal.version}${eol}` : ''}\\t}`;\n            }).join(`,${eol}`)}`,\n            '};',\n            'export const allApiProposals = Object.freeze<{ [proposalName: string]: Readonly<{ proposal: string; version?: number }> }>(_allApiProposals);',\n            'export type ApiProposalName = keyof typeof _allApiProposals;',\n            '',\n        ].join(eol);\n        this.emit('data', new vinyl_1.default({\n            path: 'vs/platform/extensions/common/extensionsApiProposals.ts',\n            contents: Buffer.from(contents)\n        }));\n        this.emit('end');\n    }));\n    return event_stream_1.default.duplex(input, output);\n}\nconst apiProposalNamesReporter = (0, reporter_1.createReporter)('api-proposal-names');\nexports.compileApiProposalNamesTask = task.define('compile-api-proposal-names', () => {\n    return gulp_1.default.src('src/vscode-dts/**')\n        .pipe(generateApiProposalNames())\n        .pipe(gulp_1.default.dest('src'))\n        .pipe(apiProposalNamesReporter.end(true));\n});\nexports.watchApiProposalNamesTask = task.define('watch-api-proposal-names', () => {\n    const task = () => gulp_1.default.src('src/vscode-dts/**')\n        .pipe(generateApiProposalNames())\n        .pipe(apiProposalNamesReporter.end(true));\n    return watch('src/vscode-dts/**', { readDelay: 200 })\n        .pipe(util.debounce(task))\n        .pipe(gulp_1.default.dest('src'));\n});\n//# sourceMappingURL=compilation.js.map"
  },
  {
    "path": "build/lib/compilation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport fs from 'fs';\nimport gulp from 'gulp';\nimport path from 'path';\nimport * as monacodts from './monaco-api';\nimport * as nls from './nls';\nimport { createReporter } from './reporter';\nimport * as util from './util';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\nimport os from 'os';\nimport File from 'vinyl';\nimport * as task from './task';\nimport { Mangler } from './mangle/index';\nimport { RawSourceMap } from 'source-map';\nimport { gulpPostcss } from './postcss';\nimport ts = require('typescript');\nconst watch = require('./watch');\n\n\n// --- gulp-tsb: compile and transpile --------------------------------\n\nconst reporter = createReporter();\n\nfunction getTypeScriptCompilerOptions(src: string): ts.CompilerOptions {\n\tconst rootDir = path.join(__dirname, `../../${src}`);\n\tconst options: ts.CompilerOptions = {};\n\toptions.verbose = false;\n\toptions.sourceMap = true;\n\tif (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry\n\t\toptions.sourceMap = false;\n\t}\n\toptions.rootDir = rootDir;\n\toptions.baseUrl = rootDir;\n\toptions.sourceRoot = util.toFileUri(rootDir);\n\toptions.newLine = /\\r\\n/.test(fs.readFileSync(__filename, 'utf8')) ? 0 : 1;\n\treturn options;\n}\n\ninterface ICompileTaskOptions {\n\treadonly build: boolean;\n\treadonly emitError: boolean;\n\treadonly transpileOnly: boolean | { esbuild: boolean };\n\treadonly preserveEnglish: boolean;\n}\n\nexport function createCompile(src: string, { build, emitError, transpileOnly, preserveEnglish }: ICompileTaskOptions) {\n\tconst tsb = require('./tsb') as typeof import('./tsb');\n\tconst sourcemaps = require('gulp-sourcemaps') as typeof import('gulp-sourcemaps');\n\n\n\tconst projectPath = path.join(__dirname, '../../', src, 'tsconfig.json');\n\tconst overrideOptions = { ...getTypeScriptCompilerOptions(src), inlineSources: Boolean(build) };\n\tif (!build) {\n\t\toverrideOptions.inlineSourceMap = true;\n\t}\n\n\tconst compilation = tsb.create(projectPath, overrideOptions, {\n\t\tverbose: false,\n\t\ttranspileOnly: Boolean(transpileOnly),\n\t\ttranspileWithSwc: typeof transpileOnly !== 'boolean' && transpileOnly.esbuild\n\t}, err => reporter(err));\n\n\tfunction pipeline(token?: util.ICancellationToken) {\n\t\tconst bom = require('gulp-bom') as typeof import('gulp-bom');\n\n\t\tconst tsFilter = util.filter(data => /\\.ts$/.test(data.path));\n\t\tconst isUtf8Test = (f: File) => /(\\/|\\\\)test(\\/|\\\\).*utf8/.test(f.path);\n\t\tconst isRuntimeJs = (f: File) => f.path.endsWith('.js') && !f.path.includes('fixtures');\n\t\tconst isCSS = (f: File) => f.path.endsWith('.css') && !f.path.includes('fixtures');\n\t\tconst noDeclarationsFilter = util.filter(data => !(/\\.d\\.ts$/.test(data.path)));\n\n\t\tconst postcssNesting = require('postcss-nesting');\n\n\t\tconst input = es.through();\n\t\tconst output = input\n\t\t\t.pipe(util.$if(isUtf8Test, bom())) // this is required to preserve BOM in test files that loose it otherwise\n\t\t\t.pipe(util.$if(!build && isRuntimeJs, util.appendOwnPathSourceURL()))\n\t\t\t.pipe(util.$if(isCSS, gulpPostcss([postcssNesting()], err => reporter(String(err)))))\n\t\t\t.pipe(tsFilter)\n\t\t\t.pipe(util.loadSourcemaps())\n\t\t\t.pipe(compilation(token))\n\t\t\t.pipe(noDeclarationsFilter)\n\t\t\t.pipe(util.$if(build, nls.nls({ preserveEnglish })))\n\t\t\t.pipe(noDeclarationsFilter.restore)\n\t\t\t.pipe(util.$if(!transpileOnly, sourcemaps.write('.', {\n\t\t\t\taddComment: false,\n\t\t\t\tincludeContent: !!build,\n\t\t\t\tsourceRoot: overrideOptions.sourceRoot\n\t\t\t})))\n\t\t\t.pipe(tsFilter.restore)\n\t\t\t.pipe(reporter.end(!!emitError));\n\n\t\treturn es.duplex(input, output);\n\t}\n\tpipeline.tsProjectSrc = () => {\n\t\treturn compilation.src({ base: src });\n\t};\n\tpipeline.projectPath = projectPath;\n\treturn pipeline;\n}\n\nexport function transpileTask(src: string, out: string, esbuild: boolean): task.StreamTask {\n\n\tconst task = () => {\n\n\t\tconst transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild }, preserveEnglish: false });\n\t\tconst srcPipe = gulp.src(`${src}/**`, { base: `${src}` });\n\n\t\treturn srcPipe\n\t\t\t.pipe(transpile())\n\t\t\t.pipe(gulp.dest(out));\n\t};\n\n\ttask.taskName = `transpile-${path.basename(src)}`;\n\treturn task;\n}\n\nexport function compileTask(src: string, out: string, build: boolean, options: { disableMangle?: boolean; preserveEnglish?: boolean } = {}): task.StreamTask {\n\n\tconst task = () => {\n\n\t\tif (os.totalmem() < 4_000_000_000) {\n\t\t\tthrow new Error('compilation requires 4GB of RAM');\n\t\t}\n\n\t\tconst compile = createCompile(src, { build, emitError: true, transpileOnly: false, preserveEnglish: !!options.preserveEnglish });\n\t\tconst srcPipe = gulp.src(`${src}/**`, { base: `${src}` });\n\t\tconst generator = new MonacoGenerator(false);\n\t\tif (src === 'src') {\n\t\t\tgenerator.execute();\n\t\t}\n\n\t\t// mangle: TypeScript to TypeScript\n\t\tlet mangleStream = es.through();\n\t\tif (build && !options.disableMangle) {\n\t\t\tlet ts2tsMangler = new Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true });\n\t\t\tconst newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState']));\n\t\t\tmangleStream = es.through(async function write(data: File & { sourceMap?: RawSourceMap }) {\n\t\t\t\ttype TypeScriptExt = typeof ts & { normalizePath(path: string): string };\n\t\t\t\tconst tsNormalPath = (<TypeScriptExt>ts).normalizePath(data.path);\n\t\t\t\tconst newContents = (await newContentsByFileName).get(tsNormalPath);\n\t\t\t\tif (newContents !== undefined) {\n\t\t\t\t\tdata.contents = Buffer.from(newContents.out);\n\t\t\t\t\tdata.sourceMap = newContents.sourceMap && JSON.parse(newContents.sourceMap);\n\t\t\t\t}\n\t\t\t\tthis.push(data);\n\t\t\t}, async function end() {\n\t\t\t\t// free resources\n\t\t\t\t(await newContentsByFileName).clear();\n\n\t\t\t\tthis.push(null);\n\t\t\t\t(<any>ts2tsMangler) = undefined;\n\t\t\t});\n\t\t}\n\n\t\treturn srcPipe\n\t\t\t.pipe(mangleStream)\n\t\t\t.pipe(generator.stream)\n\t\t\t.pipe(compile())\n\t\t\t.pipe(gulp.dest(out));\n\t};\n\n\ttask.taskName = `compile-${path.basename(src)}`;\n\treturn task;\n}\n\nexport function watchTask(out: string, build: boolean, srcPath: string = 'src'): task.StreamTask {\n\n\tconst task = () => {\n\t\tconst compile = createCompile(srcPath, { build, emitError: false, transpileOnly: false, preserveEnglish: false });\n\n\t\tconst src = gulp.src(`${srcPath}/**`, { base: srcPath });\n\t\tconst watchSrc = watch(`${srcPath}/**`, { base: srcPath, readDelay: 200 });\n\n\t\tconst generator = new MonacoGenerator(true);\n\t\tgenerator.execute();\n\n\t\treturn watchSrc\n\t\t\t.pipe(generator.stream)\n\t\t\t.pipe(util.incremental(compile, src, true))\n\t\t\t.pipe(gulp.dest(out));\n\t};\n\ttask.taskName = `watch-${path.basename(out)}`;\n\treturn task;\n}\n\nconst REPO_SRC_FOLDER = path.join(__dirname, '../../src');\n\nclass MonacoGenerator {\n\tprivate readonly _isWatch: boolean;\n\tpublic readonly stream: NodeJS.ReadWriteStream;\n\n\tprivate readonly _watchedFiles: { [filePath: string]: boolean };\n\tprivate readonly _fsProvider: monacodts.FSProvider;\n\tprivate readonly _declarationResolver: monacodts.DeclarationResolver;\n\n\tconstructor(isWatch: boolean) {\n\t\tthis._isWatch = isWatch;\n\t\tthis.stream = es.through();\n\t\tthis._watchedFiles = {};\n\t\tconst onWillReadFile = (moduleId: string, filePath: string) => {\n\t\t\tif (!this._isWatch) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._watchedFiles[filePath]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._watchedFiles[filePath] = true;\n\n\t\t\tfs.watchFile(filePath, () => {\n\t\t\t\tthis._declarationResolver.invalidateCache(moduleId);\n\t\t\t\tthis._executeSoon();\n\t\t\t});\n\t\t};\n\t\tthis._fsProvider = new class extends monacodts.FSProvider {\n\t\t\tpublic readFileSync(moduleId: string, filePath: string): Buffer {\n\t\t\t\tonWillReadFile(moduleId, filePath);\n\t\t\t\treturn super.readFileSync(moduleId, filePath);\n\t\t\t}\n\t\t};\n\t\tthis._declarationResolver = new monacodts.DeclarationResolver(this._fsProvider);\n\n\t\tif (this._isWatch) {\n\t\t\tfs.watchFile(monacodts.RECIPE_PATH, () => {\n\t\t\t\tthis._executeSoon();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _executeSoonTimer: NodeJS.Timeout | null = null;\n\tprivate _executeSoon(): void {\n\t\tif (this._executeSoonTimer !== null) {\n\t\t\tclearTimeout(this._executeSoonTimer);\n\t\t\tthis._executeSoonTimer = null;\n\t\t}\n\t\tthis._executeSoonTimer = setTimeout(() => {\n\t\t\tthis._executeSoonTimer = null;\n\t\t\tthis.execute();\n\t\t}, 20);\n\t}\n\n\tprivate _run(): monacodts.IMonacoDeclarationResult | null {\n\t\tconst r = monacodts.run3(this._declarationResolver);\n\t\tif (!r && !this._isWatch) {\n\t\t\t// The build must always be able to generate the monaco.d.ts\n\t\t\tthrow new Error(`monaco.d.ts generation error - Cannot continue`);\n\t\t}\n\t\treturn r;\n\t}\n\n\tprivate _log(message: any, ...rest: any[]): void {\n\t\tfancyLog(ansiColors.cyan('[monaco.d.ts]'), message, ...rest);\n\t}\n\n\tpublic execute(): void {\n\t\tconst startTime = Date.now();\n\t\tconst result = this._run();\n\t\tif (!result) {\n\t\t\t// nothing really changed\n\t\t\treturn;\n\t\t}\n\t\tif (result.isTheSame) {\n\t\t\treturn;\n\t\t}\n\n\t\tfs.writeFileSync(result.filePath, result.content);\n\t\tfs.writeFileSync(path.join(REPO_SRC_FOLDER, 'vs/editor/common/standalone/standaloneEnums.ts'), result.enums);\n\t\tthis._log(`monaco.d.ts is changed - total time took ${Date.now() - startTime} ms`);\n\t\tif (!this._isWatch) {\n\t\t\tthis.stream.emit('error', 'monaco.d.ts is no longer up to date. Please run gulp watch and commit the new file.');\n\t\t}\n\t}\n}\n\nfunction generateApiProposalNames() {\n\tlet eol: string;\n\n\ttry {\n\t\tconst src = fs.readFileSync('src/vs/platform/extensions/common/extensionsApiProposals.ts', 'utf-8');\n\t\tconst match = /\\r?\\n/m.exec(src);\n\t\teol = match ? match[0] : os.EOL;\n\t} catch {\n\t\teol = os.EOL;\n\t}\n\n\tconst pattern = /vscode\\.proposed\\.([a-zA-Z\\d]+)\\.d\\.ts$/;\n\tconst versionPattern = /^\\s*\\/\\/\\s*version\\s*:\\s*(\\d+)\\s*$/mi;\n\tconst proposals = new Map<string, { proposal: string; version?: number }>();\n\n\tconst input = es.through();\n\tconst output = input\n\t\t.pipe(util.filter((f: File) => pattern.test(f.path)))\n\t\t.pipe(es.through((f: File) => {\n\t\t\tconst name = path.basename(f.path);\n\t\t\tconst match = pattern.exec(name);\n\n\t\t\tif (!match) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst proposalName = match[1];\n\n\t\t\tconst contents = f.contents.toString('utf8');\n\t\t\tconst versionMatch = versionPattern.exec(contents);\n\t\t\tconst version = versionMatch ? versionMatch[1] : undefined;\n\n\t\t\tproposals.set(proposalName, {\n\t\t\t\tproposal: `https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.${proposalName}.d.ts`,\n\t\t\t\tversion: version ? parseInt(version) : undefined\n\t\t\t});\n\t\t}, function () {\n\t\t\tconst names = [...proposals.keys()].sort();\n\t\t\tconst contents = [\n\t\t\t\t'/*---------------------------------------------------------------------------------------------',\n\t\t\t\t' *  Copyright (c) Microsoft Corporation. All rights reserved.',\n\t\t\t\t' *  Licensed under the MIT License. See License.txt in the project root for license information.',\n\t\t\t\t' *--------------------------------------------------------------------------------------------*/',\n\t\t\t\t'',\n\t\t\t\t'// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.',\n\t\t\t\t'',\n\t\t\t\t'const _allApiProposals = {',\n\t\t\t\t`${names.map(proposalName => {\n\t\t\t\t\tconst proposal = proposals.get(proposalName)!;\n\t\t\t\t\treturn `\\t${proposalName}: {${eol}\\t\\tproposal: '${proposal.proposal}',${eol}${proposal.version ? `\\t\\tversion: ${proposal.version}${eol}` : ''}\\t}`;\n\t\t\t\t}).join(`,${eol}`)}`,\n\t\t\t\t'};',\n\t\t\t\t'export const allApiProposals = Object.freeze<{ [proposalName: string]: Readonly<{ proposal: string; version?: number }> }>(_allApiProposals);',\n\t\t\t\t'export type ApiProposalName = keyof typeof _allApiProposals;',\n\t\t\t\t'',\n\t\t\t].join(eol);\n\n\t\t\tthis.emit('data', new File({\n\t\t\t\tpath: 'vs/platform/extensions/common/extensionsApiProposals.ts',\n\t\t\t\tcontents: Buffer.from(contents)\n\t\t\t}));\n\t\t\tthis.emit('end');\n\t\t}));\n\n\treturn es.duplex(input, output);\n}\n\nconst apiProposalNamesReporter = createReporter('api-proposal-names');\n\nexport const compileApiProposalNamesTask = task.define('compile-api-proposal-names', () => {\n\treturn gulp.src('src/vscode-dts/**')\n\t\t.pipe(generateApiProposalNames())\n\t\t.pipe(gulp.dest('src'))\n\t\t.pipe(apiProposalNamesReporter.end(true));\n});\n\nexport const watchApiProposalNamesTask = task.define('watch-api-proposal-names', () => {\n\tconst task = () => gulp.src('src/vscode-dts/**')\n\t\t.pipe(generateApiProposalNames())\n\t\t.pipe(apiProposalNamesReporter.end(true));\n\n\treturn watch('src/vscode-dts/**', { readDelay: 200 })\n\t\t.pipe(util.debounce(task))\n\t\t.pipe(gulp.dest('src'));\n});\n"
  },
  {
    "path": "build/lib/date.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.writeISODate = writeISODate;\nexports.readISODate = readISODate;\nconst path_1 = __importDefault(require(\"path\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst root = path_1.default.join(__dirname, '..', '..');\n/**\n * Writes a `outDir/date` file with the contents of the build\n * so that other tasks during the build process can use it and\n * all use the same date.\n */\nfunction writeISODate(outDir) {\n    const result = () => new Promise((resolve, _) => {\n        const outDirectory = path_1.default.join(root, outDir);\n        fs_1.default.mkdirSync(outDirectory, { recursive: true });\n        const date = new Date().toISOString();\n        fs_1.default.writeFileSync(path_1.default.join(outDirectory, 'date'), date, 'utf8');\n        resolve();\n    });\n    result.taskName = 'build-date-file';\n    return result;\n}\nfunction readISODate(outDir) {\n    const outDirectory = path_1.default.join(root, outDir);\n    return fs_1.default.readFileSync(path_1.default.join(outDirectory, 'date'), 'utf8');\n}\n//# sourceMappingURL=date.js.map"
  },
  {
    "path": "build/lib/date.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport path from 'path';\nimport fs from 'fs';\n\nconst root = path.join(__dirname, '..', '..');\n\n/**\n * Writes a `outDir/date` file with the contents of the build\n * so that other tasks during the build process can use it and\n * all use the same date.\n */\nexport function writeISODate(outDir: string) {\n\tconst result = () => new Promise<void>((resolve, _) => {\n\t\tconst outDirectory = path.join(root, outDir);\n\t\tfs.mkdirSync(outDirectory, { recursive: true });\n\n\t\tconst date = new Date().toISOString();\n\t\tfs.writeFileSync(path.join(outDirectory, 'date'), date, 'utf8');\n\n\t\tresolve();\n\t});\n\tresult.taskName = 'build-date-file';\n\treturn result;\n}\n\nexport function readISODate(outDir: string): string {\n\tconst outDirectory = path.join(root, outDir);\n\treturn fs.readFileSync(path.join(outDirectory, 'date'), 'utf8');\n}\n"
  },
  {
    "path": "build/lib/dependencies.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getProductionDependencies = getProductionDependencies;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst child_process_1 = __importDefault(require(\"child_process\"));\nconst root = fs_1.default.realpathSync(path_1.default.dirname(path_1.default.dirname(__dirname)));\nfunction getNpmProductionDependencies(folder) {\n    let raw;\n    try {\n        raw = child_process_1.default.execSync('npm ls --all --omit=dev --parseable', { cwd: folder, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, null] });\n    }\n    catch (err) {\n        const regex = /^npm ERR! .*$/gm;\n        let match;\n        while (match = regex.exec(err.message)) {\n            if (/ELSPROBLEMS/.test(match[0])) {\n                continue;\n            }\n            else if (/invalid: xterm/.test(match[0])) {\n                continue;\n            }\n            else if (/A complete log of this run/.test(match[0])) {\n                continue;\n            }\n            else {\n                throw err;\n            }\n        }\n        raw = err.stdout;\n    }\n    return raw.split(/\\r?\\n/).filter(line => {\n        return !!line.trim() && path_1.default.relative(root, line) !== path_1.default.relative(root, folder);\n    });\n}\nfunction getProductionDependencies(folderPath) {\n    const result = getNpmProductionDependencies(folderPath);\n    // Account for distro npm dependencies\n    const realFolderPath = fs_1.default.realpathSync(folderPath);\n    const relativeFolderPath = path_1.default.relative(root, realFolderPath);\n    const distroFolderPath = `${root}/.build/distro/npm/${relativeFolderPath}`;\n    if (fs_1.default.existsSync(distroFolderPath)) {\n        result.push(...getNpmProductionDependencies(distroFolderPath));\n    }\n    return [...new Set(result)];\n}\nif (require.main === module) {\n    console.log(JSON.stringify(getProductionDependencies(root), null, '  '));\n}\n//# sourceMappingURL=dependencies.js.map"
  },
  {
    "path": "build/lib/dependencies.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport cp from 'child_process';\nconst root = fs.realpathSync(path.dirname(path.dirname(__dirname)));\n\nfunction getNpmProductionDependencies(folder: string): string[] {\n\tlet raw: string;\n\n\ttry {\n\t\traw = cp.execSync('npm ls --all --omit=dev --parseable', { cwd: folder, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, null] });\n\t} catch (err) {\n\t\tconst regex = /^npm ERR! .*$/gm;\n\t\tlet match: RegExpExecArray | null;\n\n\t\twhile (match = regex.exec(err.message)) {\n\t\t\tif (/ELSPROBLEMS/.test(match[0])) {\n\t\t\t\tcontinue;\n\t\t\t} else if (/invalid: xterm/.test(match[0])) {\n\t\t\t\tcontinue;\n\t\t\t} else if (/A complete log of this run/.test(match[0])) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\traw = err.stdout;\n\t}\n\n\treturn raw.split(/\\r?\\n/).filter(line => {\n\t\treturn !!line.trim() && path.relative(root, line) !== path.relative(root, folder);\n\t});\n}\n\nexport function getProductionDependencies(folderPath: string): string[] {\n\tconst result = getNpmProductionDependencies(folderPath);\n\t// Account for distro npm dependencies\n\tconst realFolderPath = fs.realpathSync(folderPath);\n\tconst relativeFolderPath = path.relative(root, realFolderPath);\n\tconst distroFolderPath = `${root}/.build/distro/npm/${relativeFolderPath}`;\n\n\tif (fs.existsSync(distroFolderPath)) {\n\t\tresult.push(...getNpmProductionDependencies(distroFolderPath));\n\t}\n\n\treturn [...new Set(result)];\n}\n\nif (require.main === module) {\n\tconsole.log(JSON.stringify(getProductionDependencies(root), null, '  '));\n}\n"
  },
  {
    "path": "build/lib/electron.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = void 0;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst vinyl_fs_1 = __importDefault(require(\"vinyl-fs\"));\nconst gulp_filter_1 = __importDefault(require(\"gulp-filter\"));\nconst util = __importStar(require(\"./util\"));\nconst getVersion_1 = require(\"./getVersion\");\nfunction isDocumentSuffix(str) {\n    return str === 'document' || str === 'script' || str === 'file' || str === 'source code';\n}\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst product = JSON.parse(fs_1.default.readFileSync(path_1.default.join(root, 'product.json'), 'utf8'));\nconst commit = (0, getVersion_1.getVersion)(root);\nfunction createTemplate(input) {\n    return (params) => {\n        return input.replace(/<%=\\s*([^\\s]+)\\s*%>/g, (match, key) => {\n            return params[key] || match;\n        });\n    };\n}\nconst darwinCreditsTemplate = product.darwinCredits && createTemplate(fs_1.default.readFileSync(path_1.default.join(root, product.darwinCredits), 'utf8'));\n/**\n * Generate a `DarwinDocumentType` given a list of file extensions, an icon name, and an optional suffix or file type name.\n * @param extensions A list of file extensions, such as `['bat', 'cmd']`\n * @param icon A sentence-cased file type name that matches the lowercase name of a darwin icon resource.\n * For example, `'HTML'` instead of `'html'`, or `'Java'` instead of `'java'`.\n * This parameter is lowercased before it is used to reference an icon file.\n * @param nameOrSuffix An optional suffix or a string to use as the file type. If a suffix is provided,\n * it is used with the icon parameter to generate a file type string. If nothing is provided,\n * `'document'` is used with the icon parameter to generate file type string.\n *\n * For example, if you call `darwinBundleDocumentType(..., 'HTML')`, the resulting file type is `\"HTML document\"`,\n * and the `'html'` darwin icon is used.\n *\n * If you call `darwinBundleDocumentType(..., 'Javascript', 'file')`, the resulting file type is `\"Javascript file\"`.\n * and the `'javascript'` darwin icon is used.\n *\n * If you call `darwinBundleDocumentType(..., 'bat', 'Windows command script')`, the file type is `\"Windows command script\"`,\n * and the `'bat'` darwin icon is used.\n */\nfunction darwinBundleDocumentType(extensions, icon, nameOrSuffix, utis) {\n    // If given a suffix, generate a name from it. If not given anything, default to 'document'\n    if (isDocumentSuffix(nameOrSuffix) || !nameOrSuffix) {\n        nameOrSuffix = icon.charAt(0).toUpperCase() + icon.slice(1) + ' ' + (nameOrSuffix ?? 'document');\n    }\n    return {\n        name: nameOrSuffix,\n        role: 'Editor',\n        ostypes: ['TEXT', 'utxt', 'TUTX', '****'],\n        extensions,\n        iconFile: 'resources/darwin/' + icon.toLowerCase() + '.icns',\n        utis\n    };\n}\n/**\n * Generate several `DarwinDocumentType`s with unique names and a shared icon.\n * @param types A map of file type names to their associated file extensions.\n * @param icon A darwin icon resource to use. For example, `'HTML'` would refer to `resources/darwin/html.icns`\n *\n * Examples:\n * ```\n * darwinBundleDocumentTypes({ 'C header file': 'h', 'C source code': 'c' },'c')\n * darwinBundleDocumentTypes({ 'React source code': ['jsx', 'tsx'] }, 'react')\n * ```\n */\nfunction darwinBundleDocumentTypes(types, icon) {\n    return Object.keys(types).map((name) => {\n        const extensions = types[name];\n        return {\n            name,\n            role: 'Editor',\n            ostypes: ['TEXT', 'utxt', 'TUTX', '****'],\n            extensions: Array.isArray(extensions) ? extensions : [extensions],\n            iconFile: 'resources/darwin/' + icon + '.icns'\n        };\n    });\n}\nconst { electronVersion, msBuildId } = util.getElectronVersion();\nexports.config = {\n    version: electronVersion,\n    tag: product.electronRepository ? `v${electronVersion}-${msBuildId}` : undefined,\n    productAppName: product.nameLong,\n    companyName: 'Microsoft Corporation',\n    copyright: 'Copyright (C) 2024 Microsoft. All rights reserved',\n    darwinIcon: 'resources/darwin/code.icns',\n    darwinBundleIdentifier: product.darwinBundleIdentifier,\n    darwinApplicationCategoryType: 'public.app-category.developer-tools',\n    darwinHelpBookFolder: 'VS Code HelpBook',\n    darwinHelpBookName: 'VS Code HelpBook',\n    darwinBundleDocumentTypes: [\n        ...darwinBundleDocumentTypes({ 'C header file': 'h', 'C source code': 'c' }, 'c'),\n        ...darwinBundleDocumentTypes({ 'Git configuration file': ['gitattributes', 'gitconfig', 'gitignore'] }, 'config'),\n        ...darwinBundleDocumentTypes({ 'HTML template document': ['asp', 'aspx', 'cshtml', 'jshtm', 'jsp', 'phtml', 'shtml'] }, 'html'),\n        darwinBundleDocumentType(['bat', 'cmd'], 'bat', 'Windows command script'),\n        darwinBundleDocumentType(['bowerrc'], 'Bower'),\n        darwinBundleDocumentType(['config', 'editorconfig', 'ini', 'cfg'], 'config', 'Configuration file'),\n        darwinBundleDocumentType(['hh', 'hpp', 'hxx', 'h++'], 'cpp', 'C++ header file'),\n        darwinBundleDocumentType(['cc', 'cpp', 'cxx', 'c++'], 'cpp', 'C++ source code'),\n        darwinBundleDocumentType(['m'], 'default', 'Objective-C source code'),\n        darwinBundleDocumentType(['mm'], 'cpp', 'Objective-C++ source code'),\n        darwinBundleDocumentType(['cs', 'csx'], 'csharp', 'C# source code'),\n        darwinBundleDocumentType(['css'], 'css', 'CSS'),\n        darwinBundleDocumentType(['go'], 'go', 'Go source code'),\n        darwinBundleDocumentType(['htm', 'html', 'xhtml'], 'HTML'),\n        darwinBundleDocumentType(['jade'], 'Jade'),\n        darwinBundleDocumentType(['jav', 'java'], 'Java'),\n        darwinBundleDocumentType(['js', 'jscsrc', 'jshintrc', 'mjs', 'cjs'], 'Javascript', 'file'),\n        darwinBundleDocumentType(['json'], 'JSON'),\n        darwinBundleDocumentType(['less'], 'Less'),\n        darwinBundleDocumentType(['markdown', 'md', 'mdoc', 'mdown', 'mdtext', 'mdtxt', 'mdwn', 'mkd', 'mkdn'], 'Markdown'),\n        darwinBundleDocumentType(['php'], 'PHP', 'source code'),\n        darwinBundleDocumentType(['ps1', 'psd1', 'psm1'], 'Powershell', 'script'),\n        darwinBundleDocumentType(['py', 'pyi'], 'Python', 'script'),\n        darwinBundleDocumentType(['gemspec', 'rb', 'erb'], 'Ruby', 'source code'),\n        darwinBundleDocumentType(['scss', 'sass'], 'SASS', 'file'),\n        darwinBundleDocumentType(['sql'], 'SQL', 'script'),\n        darwinBundleDocumentType(['ts'], 'TypeScript', 'file'),\n        darwinBundleDocumentType(['tsx', 'jsx'], 'React', 'source code'),\n        darwinBundleDocumentType(['vue'], 'Vue', 'source code'),\n        darwinBundleDocumentType(['ascx', 'csproj', 'dtd', 'plist', 'wxi', 'wxl', 'wxs', 'xml', 'xaml'], 'XML'),\n        darwinBundleDocumentType(['eyaml', 'eyml', 'yaml', 'yml'], 'YAML'),\n        darwinBundleDocumentType([\n            'bash', 'bash_login', 'bash_logout', 'bash_profile', 'bashrc',\n            'profile', 'rhistory', 'rprofile', 'sh', 'zlogin', 'zlogout',\n            'zprofile', 'zsh', 'zshenv', 'zshrc'\n        ], 'Shell', 'script'),\n        // Default icon with specified names\n        ...darwinBundleDocumentTypes({\n            'Clojure source code': ['clj', 'cljs', 'cljx', 'clojure'],\n            'VS Code workspace file': 'code-workspace',\n            'CoffeeScript source code': 'coffee',\n            'Comma Separated Values': 'csv',\n            'CMake script': 'cmake',\n            'Dart script': 'dart',\n            'Diff file': 'diff',\n            'Dockerfile': 'dockerfile',\n            'Gradle file': 'gradle',\n            'Groovy script': 'groovy',\n            'Makefile': ['makefile', 'mk'],\n            'Lua script': 'lua',\n            'Pug document': 'pug',\n            'Jupyter': 'ipynb',\n            'Lockfile': 'lock',\n            'Log file': 'log',\n            'Plain Text File': 'txt',\n            'Xcode project file': 'xcodeproj',\n            'Xcode workspace file': 'xcworkspace',\n            'Visual Basic script': 'vb',\n            'R source code': 'r',\n            'Rust source code': 'rs',\n            'Restructured Text document': 'rst',\n            'LaTeX document': ['tex', 'cls'],\n            'F# source code': 'fs',\n            'F# signature file': 'fsi',\n            'F# script': ['fsx', 'fsscript'],\n            'SVG document': ['svg'],\n            'TOML document': 'toml',\n            'Swift source code': 'swift',\n        }, 'default'),\n        // Default icon with default name\n        darwinBundleDocumentType([\n            'containerfile', 'ctp', 'dot', 'edn', 'handlebars', 'hbs', 'ml', 'mli',\n            'pl', 'pl6', 'pm', 'pm6', 'pod', 'pp', 'properties', 'psgi', 'rt', 't'\n        ], 'default', product.nameLong + ' document'),\n        // Folder support ()\n        darwinBundleDocumentType([], 'default', 'Folder', ['public.folder'])\n    ],\n    darwinBundleURLTypes: [{\n            role: 'Viewer',\n            name: product.nameLong,\n            urlSchemes: [product.urlProtocol]\n        }],\n    darwinForceDarkModeSupport: true,\n    darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,\n    linuxExecutableName: product.applicationName,\n    winIcon: 'resources/win32/code.ico',\n    token: process.env['GITHUB_TOKEN'],\n    repo: product.electronRepository || undefined,\n    validateChecksum: true,\n    checksumFile: path_1.default.join(root, 'build', 'checksums', 'electron.txt'),\n};\nfunction getElectron(arch) {\n    return () => {\n        const electron = require('@vscode/gulp-electron');\n        const json = require('gulp-json-editor');\n        const electronOpts = {\n            ...exports.config,\n            platform: process.platform,\n            arch: arch === 'armhf' ? 'arm' : arch,\n            ffmpegChromium: false,\n            keepDefaultApp: true\n        };\n        return vinyl_fs_1.default.src('package.json')\n            .pipe(json({ name: product.nameShort }))\n            .pipe(electron(electronOpts))\n            .pipe((0, gulp_filter_1.default)(['**', '!**/app/package.json']))\n            .pipe(vinyl_fs_1.default.dest('.build/electron'));\n    };\n}\nasync function main(arch = process.arch) {\n    const version = electronVersion;\n    const electronPath = path_1.default.join(root, '.build', 'electron');\n    const versionFile = path_1.default.join(electronPath, 'version');\n    const isUpToDate = fs_1.default.existsSync(versionFile) && fs_1.default.readFileSync(versionFile, 'utf8') === `${version}`;\n    if (!isUpToDate) {\n        await util.rimraf(electronPath)();\n        await util.streamToPromise(getElectron(arch)());\n    }\n}\nif (require.main === module) {\n    main(process.argv[2]).catch(err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=electron.js.map"
  },
  {
    "path": "build/lib/electron.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport vfs from 'vinyl-fs';\nimport filter from 'gulp-filter';\nimport * as util from './util';\nimport { getVersion } from './getVersion';\n\ntype DarwinDocumentSuffix = 'document' | 'script' | 'file' | 'source code';\ntype DarwinDocumentType = {\n\tname: string;\n\trole: string;\n\tostypes: string[];\n\textensions: string[];\n\ticonFile: string;\n\tutis?: string[];\n};\n\nfunction isDocumentSuffix(str?: string): str is DarwinDocumentSuffix {\n\treturn str === 'document' || str === 'script' || str === 'file' || str === 'source code';\n}\n\nconst root = path.dirname(path.dirname(__dirname));\nconst product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));\nconst commit = getVersion(root);\n\nfunction createTemplate(input: string): (params: Record<string, string>) => string {\n\treturn (params: Record<string, string>) => {\n\t\treturn input.replace(/<%=\\s*([^\\s]+)\\s*%>/g, (match, key) => {\n\t\t\treturn params[key] || match;\n\t\t});\n\t};\n}\n\nconst darwinCreditsTemplate = product.darwinCredits && createTemplate(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));\n\n/**\n * Generate a `DarwinDocumentType` given a list of file extensions, an icon name, and an optional suffix or file type name.\n * @param extensions A list of file extensions, such as `['bat', 'cmd']`\n * @param icon A sentence-cased file type name that matches the lowercase name of a darwin icon resource.\n * For example, `'HTML'` instead of `'html'`, or `'Java'` instead of `'java'`.\n * This parameter is lowercased before it is used to reference an icon file.\n * @param nameOrSuffix An optional suffix or a string to use as the file type. If a suffix is provided,\n * it is used with the icon parameter to generate a file type string. If nothing is provided,\n * `'document'` is used with the icon parameter to generate file type string.\n *\n * For example, if you call `darwinBundleDocumentType(..., 'HTML')`, the resulting file type is `\"HTML document\"`,\n * and the `'html'` darwin icon is used.\n *\n * If you call `darwinBundleDocumentType(..., 'Javascript', 'file')`, the resulting file type is `\"Javascript file\"`.\n * and the `'javascript'` darwin icon is used.\n *\n * If you call `darwinBundleDocumentType(..., 'bat', 'Windows command script')`, the file type is `\"Windows command script\"`,\n * and the `'bat'` darwin icon is used.\n */\nfunction darwinBundleDocumentType(extensions: string[], icon: string, nameOrSuffix?: string | DarwinDocumentSuffix, utis?: string[]): DarwinDocumentType {\n\t// If given a suffix, generate a name from it. If not given anything, default to 'document'\n\tif (isDocumentSuffix(nameOrSuffix) || !nameOrSuffix) {\n\t\tnameOrSuffix = icon.charAt(0).toUpperCase() + icon.slice(1) + ' ' + (nameOrSuffix ?? 'document');\n\t}\n\n\treturn {\n\t\tname: nameOrSuffix,\n\t\trole: 'Editor',\n\t\tostypes: ['TEXT', 'utxt', 'TUTX', '****'],\n\t\textensions,\n\t\ticonFile: 'resources/darwin/' + icon.toLowerCase() + '.icns',\n\t\tutis\n\t};\n}\n\n/**\n * Generate several `DarwinDocumentType`s with unique names and a shared icon.\n * @param types A map of file type names to their associated file extensions.\n * @param icon A darwin icon resource to use. For example, `'HTML'` would refer to `resources/darwin/html.icns`\n *\n * Examples:\n * ```\n * darwinBundleDocumentTypes({ 'C header file': 'h', 'C source code': 'c' },'c')\n * darwinBundleDocumentTypes({ 'React source code': ['jsx', 'tsx'] }, 'react')\n * ```\n */\nfunction darwinBundleDocumentTypes(types: { [name: string]: string | string[] }, icon: string): DarwinDocumentType[] {\n\treturn Object.keys(types).map((name: string): DarwinDocumentType => {\n\t\tconst extensions = types[name];\n\t\treturn {\n\t\t\tname,\n\t\t\trole: 'Editor',\n\t\t\tostypes: ['TEXT', 'utxt', 'TUTX', '****'],\n\t\t\textensions: Array.isArray(extensions) ? extensions : [extensions],\n\t\t\ticonFile: 'resources/darwin/' + icon + '.icns'\n\t\t};\n\t});\n}\n\nconst { electronVersion, msBuildId } = util.getElectronVersion();\n\nexport const config = {\n\tversion: electronVersion,\n\ttag: product.electronRepository ? `v${electronVersion}-${msBuildId}` : undefined,\n\tproductAppName: product.nameLong,\n\tcompanyName: 'Microsoft Corporation',\n\tcopyright: 'Copyright (C) 2024 Microsoft. All rights reserved',\n\tdarwinIcon: 'resources/darwin/code.icns',\n\tdarwinBundleIdentifier: product.darwinBundleIdentifier,\n\tdarwinApplicationCategoryType: 'public.app-category.developer-tools',\n\tdarwinHelpBookFolder: 'VS Code HelpBook',\n\tdarwinHelpBookName: 'VS Code HelpBook',\n\tdarwinBundleDocumentTypes: [\n\t\t...darwinBundleDocumentTypes({ 'C header file': 'h', 'C source code': 'c' }, 'c'),\n\t\t...darwinBundleDocumentTypes({ 'Git configuration file': ['gitattributes', 'gitconfig', 'gitignore'] }, 'config'),\n\t\t...darwinBundleDocumentTypes({ 'HTML template document': ['asp', 'aspx', 'cshtml', 'jshtm', 'jsp', 'phtml', 'shtml'] }, 'html'),\n\t\tdarwinBundleDocumentType(['bat', 'cmd'], 'bat', 'Windows command script'),\n\t\tdarwinBundleDocumentType(['bowerrc'], 'Bower'),\n\t\tdarwinBundleDocumentType(['config', 'editorconfig', 'ini', 'cfg'], 'config', 'Configuration file'),\n\t\tdarwinBundleDocumentType(['hh', 'hpp', 'hxx', 'h++'], 'cpp', 'C++ header file'),\n\t\tdarwinBundleDocumentType(['cc', 'cpp', 'cxx', 'c++'], 'cpp', 'C++ source code'),\n\t\tdarwinBundleDocumentType(['m'], 'default', 'Objective-C source code'),\n\t\tdarwinBundleDocumentType(['mm'], 'cpp', 'Objective-C++ source code'),\n\t\tdarwinBundleDocumentType(['cs', 'csx'], 'csharp', 'C# source code'),\n\t\tdarwinBundleDocumentType(['css'], 'css', 'CSS'),\n\t\tdarwinBundleDocumentType(['go'], 'go', 'Go source code'),\n\t\tdarwinBundleDocumentType(['htm', 'html', 'xhtml'], 'HTML'),\n\t\tdarwinBundleDocumentType(['jade'], 'Jade'),\n\t\tdarwinBundleDocumentType(['jav', 'java'], 'Java'),\n\t\tdarwinBundleDocumentType(['js', 'jscsrc', 'jshintrc', 'mjs', 'cjs'], 'Javascript', 'file'),\n\t\tdarwinBundleDocumentType(['json'], 'JSON'),\n\t\tdarwinBundleDocumentType(['less'], 'Less'),\n\t\tdarwinBundleDocumentType(['markdown', 'md', 'mdoc', 'mdown', 'mdtext', 'mdtxt', 'mdwn', 'mkd', 'mkdn'], 'Markdown'),\n\t\tdarwinBundleDocumentType(['php'], 'PHP', 'source code'),\n\t\tdarwinBundleDocumentType(['ps1', 'psd1', 'psm1'], 'Powershell', 'script'),\n\t\tdarwinBundleDocumentType(['py', 'pyi'], 'Python', 'script'),\n\t\tdarwinBundleDocumentType(['gemspec', 'rb', 'erb'], 'Ruby', 'source code'),\n\t\tdarwinBundleDocumentType(['scss', 'sass'], 'SASS', 'file'),\n\t\tdarwinBundleDocumentType(['sql'], 'SQL', 'script'),\n\t\tdarwinBundleDocumentType(['ts'], 'TypeScript', 'file'),\n\t\tdarwinBundleDocumentType(['tsx', 'jsx'], 'React', 'source code'),\n\t\tdarwinBundleDocumentType(['vue'], 'Vue', 'source code'),\n\t\tdarwinBundleDocumentType(['ascx', 'csproj', 'dtd', 'plist', 'wxi', 'wxl', 'wxs', 'xml', 'xaml'], 'XML'),\n\t\tdarwinBundleDocumentType(['eyaml', 'eyml', 'yaml', 'yml'], 'YAML'),\n\t\tdarwinBundleDocumentType([\n\t\t\t'bash', 'bash_login', 'bash_logout', 'bash_profile', 'bashrc',\n\t\t\t'profile', 'rhistory', 'rprofile', 'sh', 'zlogin', 'zlogout',\n\t\t\t'zprofile', 'zsh', 'zshenv', 'zshrc'\n\t\t], 'Shell', 'script'),\n\t\t// Default icon with specified names\n\t\t...darwinBundleDocumentTypes({\n\t\t\t'Clojure source code': ['clj', 'cljs', 'cljx', 'clojure'],\n\t\t\t'VS Code workspace file': 'code-workspace',\n\t\t\t'CoffeeScript source code': 'coffee',\n\t\t\t'Comma Separated Values': 'csv',\n\t\t\t'CMake script': 'cmake',\n\t\t\t'Dart script': 'dart',\n\t\t\t'Diff file': 'diff',\n\t\t\t'Dockerfile': 'dockerfile',\n\t\t\t'Gradle file': 'gradle',\n\t\t\t'Groovy script': 'groovy',\n\t\t\t'Makefile': ['makefile', 'mk'],\n\t\t\t'Lua script': 'lua',\n\t\t\t'Pug document': 'pug',\n\t\t\t'Jupyter': 'ipynb',\n\t\t\t'Lockfile': 'lock',\n\t\t\t'Log file': 'log',\n\t\t\t'Plain Text File': 'txt',\n\t\t\t'Xcode project file': 'xcodeproj',\n\t\t\t'Xcode workspace file': 'xcworkspace',\n\t\t\t'Visual Basic script': 'vb',\n\t\t\t'R source code': 'r',\n\t\t\t'Rust source code': 'rs',\n\t\t\t'Restructured Text document': 'rst',\n\t\t\t'LaTeX document': ['tex', 'cls'],\n\t\t\t'F# source code': 'fs',\n\t\t\t'F# signature file': 'fsi',\n\t\t\t'F# script': ['fsx', 'fsscript'],\n\t\t\t'SVG document': ['svg'],\n\t\t\t'TOML document': 'toml',\n\t\t\t'Swift source code': 'swift',\n\t\t}, 'default'),\n\t\t// Default icon with default name\n\t\tdarwinBundleDocumentType([\n\t\t\t'containerfile', 'ctp', 'dot', 'edn', 'handlebars', 'hbs', 'ml', 'mli',\n\t\t\t'pl', 'pl6', 'pm', 'pm6', 'pod', 'pp', 'properties', 'psgi', 'rt', 't'\n\t\t], 'default', product.nameLong + ' document'),\n\t\t// Folder support ()\n\t\tdarwinBundleDocumentType([], 'default', 'Folder', ['public.folder'])\n\t],\n\tdarwinBundleURLTypes: [{\n\t\trole: 'Viewer',\n\t\tname: product.nameLong,\n\t\turlSchemes: [product.urlProtocol]\n\t}],\n\tdarwinForceDarkModeSupport: true,\n\tdarwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,\n\tlinuxExecutableName: product.applicationName,\n\twinIcon: 'resources/win32/code.ico',\n\ttoken: process.env['GITHUB_TOKEN'],\n\trepo: product.electronRepository || undefined,\n\tvalidateChecksum: true,\n\tchecksumFile: path.join(root, 'build', 'checksums', 'electron.txt'),\n};\n\nfunction getElectron(arch: string): () => NodeJS.ReadWriteStream {\n\treturn () => {\n\t\tconst electron = require('@vscode/gulp-electron');\n\t\tconst json = require('gulp-json-editor') as typeof import('gulp-json-editor');\n\n\t\tconst electronOpts = {\n\t\t\t...config,\n\t\t\tplatform: process.platform,\n\t\t\tarch: arch === 'armhf' ? 'arm' : arch,\n\t\t\tffmpegChromium: false,\n\t\t\tkeepDefaultApp: true\n\t\t};\n\n\t\treturn vfs.src('package.json')\n\t\t\t.pipe(json({ name: product.nameShort }))\n\t\t\t.pipe(electron(electronOpts))\n\t\t\t.pipe(filter(['**', '!**/app/package.json']))\n\t\t\t.pipe(vfs.dest('.build/electron'));\n\t};\n}\n\nasync function main(arch: string = process.arch): Promise<void> {\n\tconst version = electronVersion;\n\tconst electronPath = path.join(root, '.build', 'electron');\n\tconst versionFile = path.join(electronPath, 'version');\n\tconst isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;\n\n\tif (!isUpToDate) {\n\t\tawait util.rimraf(electronPath)();\n\t\tawait util.streamToPromise(getElectron(arch)());\n\t}\n}\n\nif (require.main === module) {\n\tmain(process.argv[2]).catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/lib/extensions.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMarketplace = fromMarketplace;\nexports.fromVsix = fromVsix;\nexports.fromGithub = fromGithub;\nexports.packageNonNativeLocalExtensionsStream = packageNonNativeLocalExtensionsStream;\nexports.packageNativeLocalExtensionsStream = packageNativeLocalExtensionsStream;\nexports.packageAllLocalExtensionsStream = packageAllLocalExtensionsStream;\nexports.packageMarketplaceExtensionsStream = packageMarketplaceExtensionsStream;\nexports.scanBuiltinExtensions = scanBuiltinExtensions;\nexports.translatePackageJSON = translatePackageJSON;\nexports.webpackExtensions = webpackExtensions;\nexports.buildExtensionMedia = buildExtensionMedia;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst child_process_1 = __importDefault(require(\"child_process\"));\nconst glob_1 = __importDefault(require(\"glob\"));\nconst gulp_1 = __importDefault(require(\"gulp\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst stats_1 = require(\"./stats\");\nconst util2 = __importStar(require(\"./util\"));\nconst vzip = require('gulp-vinyl-zip');\nconst gulp_filter_1 = __importDefault(require(\"gulp-filter\"));\nconst gulp_rename_1 = __importDefault(require(\"gulp-rename\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst gulp_buffer_1 = __importDefault(require(\"gulp-buffer\"));\nconst jsoncParser = __importStar(require(\"jsonc-parser\"));\nconst dependencies_1 = require(\"./dependencies\");\nconst builtInExtensions_1 = require(\"./builtInExtensions\");\nconst getVersion_1 = require(\"./getVersion\");\nconst fetch_1 = require(\"./fetch\");\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst commit = (0, getVersion_1.getVersion)(root);\nconst sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;\nfunction minifyExtensionResources(input) {\n    const jsonFilter = (0, gulp_filter_1.default)(['**/*.json', '**/*.code-snippets'], { restore: true });\n    return input\n        .pipe(jsonFilter)\n        .pipe((0, gulp_buffer_1.default)())\n        .pipe(event_stream_1.default.mapSync((f) => {\n        const errors = [];\n        const value = jsoncParser.parse(f.contents.toString('utf8'), errors, { allowTrailingComma: true });\n        if (errors.length === 0) {\n            // file parsed OK => just stringify to drop whitespace and comments\n            f.contents = Buffer.from(JSON.stringify(value));\n        }\n        return f;\n    }))\n        .pipe(jsonFilter.restore);\n}\nfunction updateExtensionPackageJSON(input, update) {\n    const packageJsonFilter = (0, gulp_filter_1.default)('extensions/*/package.json', { restore: true });\n    return input\n        .pipe(packageJsonFilter)\n        .pipe((0, gulp_buffer_1.default)())\n        .pipe(event_stream_1.default.mapSync((f) => {\n        const data = JSON.parse(f.contents.toString('utf8'));\n        f.contents = Buffer.from(JSON.stringify(update(data)));\n        return f;\n    }))\n        .pipe(packageJsonFilter.restore);\n}\nfunction fromLocal(extensionPath, forWeb, disableMangle) {\n    const webpackConfigFileName = forWeb ? 'extension-browser.webpack.config.js' : 'extension.webpack.config.js';\n    const isWebPacked = fs_1.default.existsSync(path_1.default.join(extensionPath, webpackConfigFileName));\n    let input = isWebPacked\n        ? fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle)\n        : fromLocalNormal(extensionPath);\n    if (isWebPacked) {\n        input = updateExtensionPackageJSON(input, (data) => {\n            delete data.scripts;\n            delete data.dependencies;\n            delete data.devDependencies;\n            if (data.main) {\n                data.main = data.main.replace('/out/', '/dist/');\n            }\n            return data;\n        });\n    }\n    return input;\n}\nfunction fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) {\n    const vsce = require('@vscode/vsce');\n    const webpack = require('webpack');\n    const webpackGulp = require('webpack-stream');\n    const result = event_stream_1.default.through();\n    const packagedDependencies = [];\n    const packageJsonConfig = require(path_1.default.join(extensionPath, 'package.json'));\n    if (packageJsonConfig.dependencies) {\n        const webpackRootConfig = require(path_1.default.join(extensionPath, webpackConfigFileName));\n        for (const key in webpackRootConfig.externals) {\n            if (key in packageJsonConfig.dependencies) {\n                packagedDependencies.push(key);\n            }\n        }\n    }\n    // TODO: add prune support based on packagedDependencies to vsce.PackageManager.Npm similar\n    // to vsce.PackageManager.Yarn.\n    // A static analysis showed there are no webpack externals that are dependencies of the current\n    // local extensions so we can use the vsce.PackageManager.None config to ignore dependencies list\n    // as a temporary workaround.\n    vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.None, packagedDependencies }).then(fileNames => {\n        const files = fileNames\n            .map(fileName => path_1.default.join(extensionPath, fileName))\n            .map(filePath => new vinyl_1.default({\n            path: filePath,\n            stat: fs_1.default.statSync(filePath),\n            base: extensionPath,\n            contents: fs_1.default.createReadStream(filePath)\n        }));\n        // check for a webpack configuration files, then invoke webpack\n        // and merge its output with the files stream.\n        const webpackConfigLocations = glob_1.default.sync(path_1.default.join(extensionPath, '**', webpackConfigFileName), { ignore: ['**/node_modules'] });\n        const webpackStreams = webpackConfigLocations.flatMap(webpackConfigPath => {\n            const webpackDone = (err, stats) => {\n                (0, fancy_log_1.default)(`Bundled extension: ${ansi_colors_1.default.yellow(path_1.default.join(path_1.default.basename(extensionPath), path_1.default.relative(extensionPath, webpackConfigPath)))}...`);\n                if (err) {\n                    result.emit('error', err);\n                }\n                const { compilation } = stats;\n                if (compilation.errors.length > 0) {\n                    result.emit('error', compilation.errors.join('\\n'));\n                }\n                if (compilation.warnings.length > 0) {\n                    result.emit('error', compilation.warnings.join('\\n'));\n                }\n            };\n            const exportedConfig = require(webpackConfigPath);\n            return (Array.isArray(exportedConfig) ? exportedConfig : [exportedConfig]).map(config => {\n                const webpackConfig = {\n                    ...config,\n                    ...{ mode: 'production' }\n                };\n                if (disableMangle) {\n                    if (Array.isArray(config.module.rules)) {\n                        for (const rule of config.module.rules) {\n                            if (Array.isArray(rule.use)) {\n                                for (const use of rule.use) {\n                                    if (String(use.loader).endsWith('mangle-loader.js')) {\n                                        use.options.disabled = true;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                const relativeOutputPath = path_1.default.relative(extensionPath, webpackConfig.output.path);\n                return webpackGulp(webpackConfig, webpack, webpackDone)\n                    .pipe(event_stream_1.default.through(function (data) {\n                    data.stat = data.stat || {};\n                    data.base = extensionPath;\n                    this.emit('data', data);\n                }))\n                    .pipe(event_stream_1.default.through(function (data) {\n                    // source map handling:\n                    // * rewrite sourceMappingURL\n                    // * save to disk so that upload-task picks this up\n                    if (path_1.default.extname(data.basename) === '.js') {\n                        const contents = data.contents.toString('utf8');\n                        data.contents = Buffer.from(contents.replace(/\\n\\/\\/# sourceMappingURL=(.*)$/gm, function (_m, g1) {\n                            return `\\n//# sourceMappingURL=${sourceMappingURLBase}/extensions/${path_1.default.basename(extensionPath)}/${relativeOutputPath}/${g1}`;\n                        }), 'utf8');\n                    }\n                    this.emit('data', data);\n                }));\n            });\n        });\n        event_stream_1.default.merge(...webpackStreams, event_stream_1.default.readArray(files))\n            // .pipe(es.through(function (data) {\n            // \t// debug\n            // \tconsole.log('out', data.path, data.contents.length);\n            // \tthis.emit('data', data);\n            // }))\n            .pipe(result);\n    }).catch(err => {\n        console.error(extensionPath);\n        console.error(packagedDependencies);\n        result.emit('error', err);\n    });\n    return result.pipe((0, stats_1.createStatsStream)(path_1.default.basename(extensionPath)));\n}\nfunction fromLocalNormal(extensionPath) {\n    const vsce = require('@vscode/vsce');\n    const result = event_stream_1.default.through();\n    vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Npm })\n        .then(fileNames => {\n        const files = fileNames\n            .map(fileName => path_1.default.join(extensionPath, fileName))\n            .map(filePath => new vinyl_1.default({\n            path: filePath,\n            stat: fs_1.default.statSync(filePath),\n            base: extensionPath,\n            contents: fs_1.default.createReadStream(filePath)\n        }));\n        event_stream_1.default.readArray(files).pipe(result);\n    })\n        .catch(err => result.emit('error', err));\n    return result.pipe((0, stats_1.createStatsStream)(path_1.default.basename(extensionPath)));\n}\nconst userAgent = 'VSCode Build';\nconst baseHeaders = {\n    'X-Market-Client-Id': 'VSCode Build',\n    'User-Agent': userAgent,\n    'X-Market-User-Id': '291C1CD0-051A-4123-9B4B-30D60EF52EE2',\n};\nfunction fromMarketplace(serviceUrl, { name: extensionName, version, sha256, metadata }) {\n    const json = require('gulp-json-editor');\n    const [publisher, name] = extensionName.split('.');\n    const url = `${serviceUrl}/publishers/${publisher}/vsextensions/${name}/${version}/vspackage`;\n    (0, fancy_log_1.default)('Downloading extension:', ansi_colors_1.default.yellow(`${extensionName}@${version}`), '...');\n    const packageJsonFilter = (0, gulp_filter_1.default)('package.json', { restore: true });\n    return (0, fetch_1.fetchUrls)('', {\n        base: url,\n        nodeFetchOptions: {\n            headers: baseHeaders\n        },\n        checksumSha256: sha256\n    })\n        .pipe(vzip.src())\n        .pipe((0, gulp_filter_1.default)('extension/**'))\n        .pipe((0, gulp_rename_1.default)(p => p.dirname = p.dirname.replace(/^extension\\/?/, '')))\n        .pipe(packageJsonFilter)\n        .pipe((0, gulp_buffer_1.default)())\n        .pipe(json({ __metadata: metadata }))\n        .pipe(packageJsonFilter.restore);\n}\nfunction fromVsix(vsixPath, { name: extensionName, version, sha256, metadata }) {\n    const json = require('gulp-json-editor');\n    (0, fancy_log_1.default)('Using local VSIX for extension:', ansi_colors_1.default.yellow(`${extensionName}@${version}`), '...');\n    const packageJsonFilter = (0, gulp_filter_1.default)('package.json', { restore: true });\n    return gulp_1.default.src(vsixPath)\n        .pipe((0, gulp_buffer_1.default)())\n        .pipe(event_stream_1.default.mapSync((f) => {\n        const hash = crypto_1.default.createHash('sha256');\n        hash.update(f.contents);\n        const checksum = hash.digest('hex');\n        if (checksum !== sha256) {\n            throw new Error(`Checksum mismatch for ${vsixPath} (expected ${sha256}, actual ${checksum}))`);\n        }\n        return f;\n    }))\n        .pipe(vzip.src())\n        .pipe((0, gulp_filter_1.default)('extension/**'))\n        .pipe((0, gulp_rename_1.default)(p => p.dirname = p.dirname.replace(/^extension\\/?/, '')))\n        .pipe(packageJsonFilter)\n        .pipe((0, gulp_buffer_1.default)())\n        .pipe(json({ __metadata: metadata }))\n        .pipe(packageJsonFilter.restore);\n}\nfunction fromGithub({ name, version, repo, sha256, metadata }) {\n    const json = require('gulp-json-editor');\n    (0, fancy_log_1.default)('Downloading extension from GH:', ansi_colors_1.default.yellow(`${name}@${version}`), '...');\n    const packageJsonFilter = (0, gulp_filter_1.default)('package.json', { restore: true });\n    return (0, fetch_1.fetchGithub)(new URL(repo).pathname, {\n        version,\n        name: name => name.endsWith('.vsix'),\n        checksumSha256: sha256\n    })\n        .pipe((0, gulp_buffer_1.default)())\n        .pipe(vzip.src())\n        .pipe((0, gulp_filter_1.default)('extension/**'))\n        .pipe((0, gulp_rename_1.default)(p => p.dirname = p.dirname.replace(/^extension\\/?/, '')))\n        .pipe(packageJsonFilter)\n        .pipe((0, gulp_buffer_1.default)())\n        .pipe(json({ __metadata: metadata }))\n        .pipe(packageJsonFilter.restore);\n}\n/**\n * All extensions that are known to have some native component and thus must be built on the\n * platform that is being built.\n */\nconst nativeExtensions = [\n    'microsoft-authentication',\n];\nconst excludedExtensions = [\n    'vscode-api-tests',\n    'vscode-colorize-tests',\n    'vscode-colorize-perf-tests',\n    'vscode-test-resolver',\n    'ms-vscode.node-debug',\n    'ms-vscode.node-debug2',\n];\nconst marketplaceWebExtensionsExclude = new Set([\n    'ms-vscode.node-debug',\n    'ms-vscode.node-debug2',\n    'ms-vscode.js-debug-companion',\n    'ms-vscode.js-debug',\n    'ms-vscode.vscode-js-profile-table'\n]);\nconst productJson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../product.json'), 'utf8'));\nconst builtInExtensions = productJson.builtInExtensions || [];\nconst webBuiltInExtensions = productJson.webBuiltInExtensions || [];\n/**\n * Loosely based on `getExtensionKind` from `src/vs/workbench/services/extensions/common/extensionManifestPropertiesService.ts`\n */\nfunction isWebExtension(manifest) {\n    if (Boolean(manifest.browser)) {\n        return true;\n    }\n    if (Boolean(manifest.main)) {\n        return false;\n    }\n    // neither browser nor main\n    if (typeof manifest.extensionKind !== 'undefined') {\n        const extensionKind = Array.isArray(manifest.extensionKind) ? manifest.extensionKind : [manifest.extensionKind];\n        if (extensionKind.indexOf('web') >= 0) {\n            return true;\n        }\n    }\n    if (typeof manifest.contributes !== 'undefined') {\n        for (const id of ['debuggers', 'terminal', 'typescriptServerPlugins']) {\n            if (manifest.contributes.hasOwnProperty(id)) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n/**\n * Package local extensions that are known to not have native dependencies. Mutually exclusive to {@link packageNativeLocalExtensionsStream}.\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @returns a stream\n */\nfunction packageNonNativeLocalExtensionsStream(forWeb, disableMangle) {\n    return doPackageLocalExtensionsStream(forWeb, disableMangle, false);\n}\n/**\n * Package local extensions that are known to have native dependencies. Mutually exclusive to {@link packageNonNativeLocalExtensionsStream}.\n * @note it's possible that the extension does not have native dependencies for the current platform, especially if building for the web,\n * but we simplify the logic here by having a flat list of extensions (See {@link nativeExtensions}) that are known to have native\n * dependencies on some platform and thus should be packaged on the platform that they are building for.\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @returns a stream\n */\nfunction packageNativeLocalExtensionsStream(forWeb, disableMangle) {\n    return doPackageLocalExtensionsStream(forWeb, disableMangle, true);\n}\n/**\n * Package all the local extensions... both those that are known to have native dependencies and those that are not.\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @returns a stream\n */\nfunction packageAllLocalExtensionsStream(forWeb, disableMangle) {\n    return event_stream_1.default.merge([\n        packageNonNativeLocalExtensionsStream(forWeb, disableMangle),\n        packageNativeLocalExtensionsStream(forWeb, disableMangle)\n    ]);\n}\n/**\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @param native build the extensions that are marked as having native dependencies\n */\nfunction doPackageLocalExtensionsStream(forWeb, disableMangle, native) {\n    const nativeExtensionsSet = new Set(nativeExtensions);\n    const localExtensionsDescriptions = (glob_1.default.sync('extensions/*/package.json')\n        .map(manifestPath => {\n        const absoluteManifestPath = path_1.default.join(root, manifestPath);\n        const extensionPath = path_1.default.dirname(path_1.default.join(root, manifestPath));\n        const extensionName = path_1.default.basename(extensionPath);\n        return { name: extensionName, path: extensionPath, manifestPath: absoluteManifestPath };\n    })\n        .filter(({ name }) => native ? nativeExtensionsSet.has(name) : !nativeExtensionsSet.has(name))\n        .filter(({ name }) => excludedExtensions.indexOf(name) === -1)\n        .filter(({ name }) => builtInExtensions.every(b => b.name !== name))\n        .filter(({ manifestPath }) => (forWeb ? isWebExtension(require(manifestPath)) : true)));\n    const localExtensionsStream = minifyExtensionResources(event_stream_1.default.merge(...localExtensionsDescriptions.map(extension => {\n        return fromLocal(extension.path, forWeb, disableMangle)\n            .pipe((0, gulp_rename_1.default)(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));\n    })));\n    let result;\n    if (forWeb) {\n        result = localExtensionsStream;\n    }\n    else {\n        // also include shared production node modules\n        const productionDependencies = (0, dependencies_1.getProductionDependencies)('extensions/');\n        const dependenciesSrc = productionDependencies.map(d => path_1.default.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();\n        result = event_stream_1.default.merge(localExtensionsStream, gulp_1.default.src(dependenciesSrc, { base: '.' })\n            .pipe(util2.cleanNodeModules(path_1.default.join(root, 'build', '.moduleignore')))\n            .pipe(util2.cleanNodeModules(path_1.default.join(root, 'build', `.moduleignore.${process.platform}`))));\n    }\n    return (result\n        .pipe(util2.setExecutableBit(['**/*.sh'])));\n}\nfunction packageMarketplaceExtensionsStream(forWeb) {\n    const marketplaceExtensionsDescriptions = [\n        ...builtInExtensions.filter(({ name }) => (forWeb ? !marketplaceWebExtensionsExclude.has(name) : true)),\n        ...(forWeb ? webBuiltInExtensions : [])\n    ];\n    const marketplaceExtensionsStream = minifyExtensionResources(event_stream_1.default.merge(...marketplaceExtensionsDescriptions\n        .map(extension => {\n        const src = (0, builtInExtensions_1.getExtensionStream)(extension).pipe((0, gulp_rename_1.default)(p => p.dirname = `extensions/${p.dirname}`));\n        return updateExtensionPackageJSON(src, (data) => {\n            delete data.scripts;\n            delete data.dependencies;\n            delete data.devDependencies;\n            return data;\n        });\n    })));\n    return (marketplaceExtensionsStream\n        .pipe(util2.setExecutableBit(['**/*.sh'])));\n}\nfunction scanBuiltinExtensions(extensionsRoot, exclude = []) {\n    const scannedExtensions = [];\n    try {\n        const extensionsFolders = fs_1.default.readdirSync(extensionsRoot);\n        for (const extensionFolder of extensionsFolders) {\n            if (exclude.indexOf(extensionFolder) >= 0) {\n                continue;\n            }\n            const packageJSONPath = path_1.default.join(extensionsRoot, extensionFolder, 'package.json');\n            if (!fs_1.default.existsSync(packageJSONPath)) {\n                continue;\n            }\n            const packageJSON = JSON.parse(fs_1.default.readFileSync(packageJSONPath).toString('utf8'));\n            if (!isWebExtension(packageJSON)) {\n                continue;\n            }\n            const children = fs_1.default.readdirSync(path_1.default.join(extensionsRoot, extensionFolder));\n            const packageNLSPath = children.filter(child => child === 'package.nls.json')[0];\n            const packageNLS = packageNLSPath ? JSON.parse(fs_1.default.readFileSync(path_1.default.join(extensionsRoot, extensionFolder, packageNLSPath)).toString()) : undefined;\n            const readme = children.filter(child => /^readme(\\.txt|\\.md|)$/i.test(child))[0];\n            const changelog = children.filter(child => /^changelog(\\.txt|\\.md|)$/i.test(child))[0];\n            scannedExtensions.push({\n                extensionPath: extensionFolder,\n                packageJSON,\n                packageNLS,\n                readmePath: readme ? path_1.default.join(extensionFolder, readme) : undefined,\n                changelogPath: changelog ? path_1.default.join(extensionFolder, changelog) : undefined,\n            });\n        }\n        return scannedExtensions;\n    }\n    catch (ex) {\n        return scannedExtensions;\n    }\n}\nfunction translatePackageJSON(packageJSON, packageNLSPath) {\n    const CharCode_PC = '%'.charCodeAt(0);\n    const packageNls = JSON.parse(fs_1.default.readFileSync(packageNLSPath).toString());\n    const translate = (obj) => {\n        for (const key in obj) {\n            const val = obj[key];\n            if (Array.isArray(val)) {\n                val.forEach(translate);\n            }\n            else if (val && typeof val === 'object') {\n                translate(val);\n            }\n            else if (typeof val === 'string' && val.charCodeAt(0) === CharCode_PC && val.charCodeAt(val.length - 1) === CharCode_PC) {\n                const translated = packageNls[val.substr(1, val.length - 2)];\n                if (translated) {\n                    obj[key] = typeof translated === 'string' ? translated : (typeof translated.message === 'string' ? translated.message : val);\n                }\n            }\n        }\n    };\n    translate(packageJSON);\n    return packageJSON;\n}\nconst extensionsPath = path_1.default.join(root, 'extensions');\n// Additional projects to run esbuild on. These typically build code for webviews\nconst esbuildMediaScripts = [\n    'markdown-language-features/esbuild-notebook.js',\n    'markdown-language-features/esbuild-preview.js',\n    'markdown-math/esbuild.js',\n    'notebook-renderers/esbuild.js',\n    'ipynb/esbuild.js',\n    'simple-browser/esbuild-preview.js',\n];\nasync function webpackExtensions(taskName, isWatch, webpackConfigLocations) {\n    const webpack = require('webpack');\n    const webpackConfigs = [];\n    for (const { configPath, outputRoot } of webpackConfigLocations) {\n        const configOrFnOrArray = require(configPath);\n        function addConfig(configOrFnOrArray) {\n            for (const configOrFn of Array.isArray(configOrFnOrArray) ? configOrFnOrArray : [configOrFnOrArray]) {\n                const config = typeof configOrFn === 'function' ? configOrFn({}, {}) : configOrFn;\n                if (outputRoot) {\n                    config.output.path = path_1.default.join(outputRoot, path_1.default.relative(path_1.default.dirname(configPath), config.output.path));\n                }\n                webpackConfigs.push(config);\n            }\n        }\n        addConfig(configOrFnOrArray);\n    }\n    function reporter(fullStats) {\n        if (Array.isArray(fullStats.children)) {\n            for (const stats of fullStats.children) {\n                const outputPath = stats.outputPath;\n                if (outputPath) {\n                    const relativePath = path_1.default.relative(extensionsPath, outputPath).replace(/\\\\/g, '/');\n                    const match = relativePath.match(/[^\\/]+(\\/server|\\/client)?/);\n                    (0, fancy_log_1.default)(`Finished ${ansi_colors_1.default.green(taskName)} ${ansi_colors_1.default.cyan(match[0])} with ${stats.errors.length} errors.`);\n                }\n                if (Array.isArray(stats.errors)) {\n                    stats.errors.forEach((error) => {\n                        fancy_log_1.default.error(error);\n                    });\n                }\n                if (Array.isArray(stats.warnings)) {\n                    stats.warnings.forEach((warning) => {\n                        fancy_log_1.default.warn(warning);\n                    });\n                }\n            }\n        }\n    }\n    return new Promise((resolve, reject) => {\n        if (isWatch) {\n            webpack(webpackConfigs).watch({}, (err, stats) => {\n                if (err) {\n                    reject();\n                }\n                else {\n                    reporter(stats?.toJson());\n                }\n            });\n        }\n        else {\n            webpack(webpackConfigs).run((err, stats) => {\n                if (err) {\n                    fancy_log_1.default.error(err);\n                    reject();\n                }\n                else {\n                    reporter(stats?.toJson());\n                    resolve();\n                }\n            });\n        }\n    });\n}\nasync function esbuildExtensions(taskName, isWatch, scripts) {\n    function reporter(stdError, script) {\n        const matches = (stdError || '').match(/\\> (.+): error: (.+)?/g);\n        (0, fancy_log_1.default)(`Finished ${ansi_colors_1.default.green(taskName)} ${script} with ${matches ? matches.length : 0} errors.`);\n        for (const match of matches || []) {\n            fancy_log_1.default.error(match);\n        }\n    }\n    const tasks = scripts.map(({ script, outputRoot }) => {\n        return new Promise((resolve, reject) => {\n            const args = [script];\n            if (isWatch) {\n                args.push('--watch');\n            }\n            if (outputRoot) {\n                args.push('--outputRoot', outputRoot);\n            }\n            const proc = child_process_1.default.execFile(process.argv[0], args, {}, (error, _stdout, stderr) => {\n                if (error) {\n                    return reject(error);\n                }\n                reporter(stderr, script);\n                return resolve();\n            });\n            proc.stdout.on('data', (data) => {\n                (0, fancy_log_1.default)(`${ansi_colors_1.default.green(taskName)}: ${data.toString('utf8')}`);\n            });\n        });\n    });\n    return Promise.all(tasks);\n}\nasync function buildExtensionMedia(isWatch, outputRoot) {\n    return esbuildExtensions('esbuilding extension media', isWatch, esbuildMediaScripts.map(p => ({\n        script: path_1.default.join(extensionsPath, p),\n        outputRoot: outputRoot ? path_1.default.join(root, outputRoot, path_1.default.dirname(p)) : undefined\n    })));\n}\n//# sourceMappingURL=extensions.js.map"
  },
  {
    "path": "build/lib/extensions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport fs from 'fs';\nimport cp from 'child_process';\nimport glob from 'glob';\nimport gulp from 'gulp';\nimport path from 'path';\nimport crypto from 'crypto';\nimport { Stream } from 'stream';\nimport File from 'vinyl';\nimport { createStatsStream } from './stats';\nimport * as util2 from './util';\nconst vzip = require('gulp-vinyl-zip');\nimport filter from 'gulp-filter';\nimport rename from 'gulp-rename';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\nimport buffer from 'gulp-buffer';\nimport * as jsoncParser from 'jsonc-parser';\nimport webpack from 'webpack';\nimport { getProductionDependencies } from './dependencies';\nimport { IExtensionDefinition, getExtensionStream } from './builtInExtensions';\nimport { getVersion } from './getVersion';\nimport { fetchUrls, fetchGithub } from './fetch';\n\nconst root = path.dirname(path.dirname(__dirname));\nconst commit = getVersion(root);\nconst sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;\n\nfunction minifyExtensionResources(input: Stream): Stream {\n\tconst jsonFilter = filter(['**/*.json', '**/*.code-snippets'], { restore: true });\n\treturn input\n\t\t.pipe(jsonFilter)\n\t\t.pipe(buffer())\n\t\t.pipe(es.mapSync((f: File) => {\n\t\t\tconst errors: jsoncParser.ParseError[] = [];\n\t\t\tconst value = jsoncParser.parse(f.contents.toString('utf8'), errors, { allowTrailingComma: true });\n\t\t\tif (errors.length === 0) {\n\t\t\t\t// file parsed OK => just stringify to drop whitespace and comments\n\t\t\t\tf.contents = Buffer.from(JSON.stringify(value));\n\t\t\t}\n\t\t\treturn f;\n\t\t}))\n\t\t.pipe(jsonFilter.restore);\n}\n\nfunction updateExtensionPackageJSON(input: Stream, update: (data: any) => any): Stream {\n\tconst packageJsonFilter = filter('extensions/*/package.json', { restore: true });\n\treturn input\n\t\t.pipe(packageJsonFilter)\n\t\t.pipe(buffer())\n\t\t.pipe(es.mapSync((f: File) => {\n\t\t\tconst data = JSON.parse(f.contents.toString('utf8'));\n\t\t\tf.contents = Buffer.from(JSON.stringify(update(data)));\n\t\t\treturn f;\n\t\t}))\n\t\t.pipe(packageJsonFilter.restore);\n}\n\nfunction fromLocal(extensionPath: string, forWeb: boolean, disableMangle: boolean): Stream {\n\tconst webpackConfigFileName = forWeb ? 'extension-browser.webpack.config.js' : 'extension.webpack.config.js';\n\n\tconst isWebPacked = fs.existsSync(path.join(extensionPath, webpackConfigFileName));\n\tlet input = isWebPacked\n\t\t? fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle)\n\t\t: fromLocalNormal(extensionPath);\n\n\tif (isWebPacked) {\n\t\tinput = updateExtensionPackageJSON(input, (data: any) => {\n\t\t\tdelete data.scripts;\n\t\t\tdelete data.dependencies;\n\t\t\tdelete data.devDependencies;\n\t\t\tif (data.main) {\n\t\t\t\tdata.main = data.main.replace('/out/', '/dist/');\n\t\t\t}\n\t\t\treturn data;\n\t\t});\n\t}\n\n\treturn input;\n}\n\n\nfunction fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, disableMangle: boolean): Stream {\n\tconst vsce = require('@vscode/vsce') as typeof import('@vscode/vsce');\n\tconst webpack = require('webpack');\n\tconst webpackGulp = require('webpack-stream');\n\tconst result = es.through();\n\n\tconst packagedDependencies: string[] = [];\n\tconst packageJsonConfig = require(path.join(extensionPath, 'package.json'));\n\tif (packageJsonConfig.dependencies) {\n\t\tconst webpackRootConfig = require(path.join(extensionPath, webpackConfigFileName));\n\t\tfor (const key in webpackRootConfig.externals) {\n\t\t\tif (key in packageJsonConfig.dependencies) {\n\t\t\t\tpackagedDependencies.push(key);\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: add prune support based on packagedDependencies to vsce.PackageManager.Npm similar\n\t// to vsce.PackageManager.Yarn.\n\t// A static analysis showed there are no webpack externals that are dependencies of the current\n\t// local extensions so we can use the vsce.PackageManager.None config to ignore dependencies list\n\t// as a temporary workaround.\n\tvsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.None, packagedDependencies }).then(fileNames => {\n\t\tconst files = fileNames\n\t\t\t.map(fileName => path.join(extensionPath, fileName))\n\t\t\t.map(filePath => new File({\n\t\t\t\tpath: filePath,\n\t\t\t\tstat: fs.statSync(filePath),\n\t\t\t\tbase: extensionPath,\n\t\t\t\tcontents: fs.createReadStream(filePath) as any\n\t\t\t}));\n\n\t\t// check for a webpack configuration files, then invoke webpack\n\t\t// and merge its output with the files stream.\n\t\tconst webpackConfigLocations = (<string[]>glob.sync(\n\t\t\tpath.join(extensionPath, '**', webpackConfigFileName),\n\t\t\t{ ignore: ['**/node_modules'] }\n\t\t));\n\n\t\tconst webpackStreams = webpackConfigLocations.flatMap(webpackConfigPath => {\n\n\t\t\tconst webpackDone = (err: any, stats: any) => {\n\t\t\t\tfancyLog(`Bundled extension: ${ansiColors.yellow(path.join(path.basename(extensionPath), path.relative(extensionPath, webpackConfigPath)))}...`);\n\t\t\t\tif (err) {\n\t\t\t\t\tresult.emit('error', err);\n\t\t\t\t}\n\t\t\t\tconst { compilation } = stats;\n\t\t\t\tif (compilation.errors.length > 0) {\n\t\t\t\t\tresult.emit('error', compilation.errors.join('\\n'));\n\t\t\t\t}\n\t\t\t\tif (compilation.warnings.length > 0) {\n\t\t\t\t\tresult.emit('error', compilation.warnings.join('\\n'));\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst exportedConfig = require(webpackConfigPath);\n\t\t\treturn (Array.isArray(exportedConfig) ? exportedConfig : [exportedConfig]).map(config => {\n\t\t\t\tconst webpackConfig = {\n\t\t\t\t\t...config,\n\t\t\t\t\t...{ mode: 'production' }\n\t\t\t\t};\n\t\t\t\tif (disableMangle) {\n\t\t\t\t\tif (Array.isArray(config.module.rules)) {\n\t\t\t\t\t\tfor (const rule of config.module.rules) {\n\t\t\t\t\t\t\tif (Array.isArray(rule.use)) {\n\t\t\t\t\t\t\t\tfor (const use of rule.use) {\n\t\t\t\t\t\t\t\t\tif (String(use.loader).endsWith('mangle-loader.js')) {\n\t\t\t\t\t\t\t\t\t\tuse.options.disabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst relativeOutputPath = path.relative(extensionPath, webpackConfig.output.path);\n\n\t\t\t\treturn webpackGulp(webpackConfig, webpack, webpackDone)\n\t\t\t\t\t.pipe(es.through(function (data) {\n\t\t\t\t\t\tdata.stat = data.stat || {};\n\t\t\t\t\t\tdata.base = extensionPath;\n\t\t\t\t\t\tthis.emit('data', data);\n\t\t\t\t\t}))\n\t\t\t\t\t.pipe(es.through(function (data: File) {\n\t\t\t\t\t\t// source map handling:\n\t\t\t\t\t\t// * rewrite sourceMappingURL\n\t\t\t\t\t\t// * save to disk so that upload-task picks this up\n\t\t\t\t\t\tif (path.extname(data.basename) === '.js') {\n\t\t\t\t\t\t\tconst contents = (<Buffer>data.contents).toString('utf8');\n\t\t\t\t\t\t\tdata.contents = Buffer.from(contents.replace(/\\n\\/\\/# sourceMappingURL=(.*)$/gm, function (_m, g1) {\n\t\t\t\t\t\t\t\treturn `\\n//# sourceMappingURL=${sourceMappingURLBase}/extensions/${path.basename(extensionPath)}/${relativeOutputPath}/${g1}`;\n\t\t\t\t\t\t\t}), 'utf8');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emit('data', data);\n\t\t\t\t\t}));\n\t\t\t});\n\t\t});\n\n\t\tes.merge(...webpackStreams, es.readArray(files))\n\t\t\t// .pipe(es.through(function (data) {\n\t\t\t// \t// debug\n\t\t\t// \tconsole.log('out', data.path, data.contents.length);\n\t\t\t// \tthis.emit('data', data);\n\t\t\t// }))\n\t\t\t.pipe(result);\n\n\t}).catch(err => {\n\t\tconsole.error(extensionPath);\n\t\tconsole.error(packagedDependencies);\n\t\tresult.emit('error', err);\n\t});\n\n\treturn result.pipe(createStatsStream(path.basename(extensionPath)));\n}\n\nfunction fromLocalNormal(extensionPath: string): Stream {\n\tconst vsce = require('@vscode/vsce') as typeof import('@vscode/vsce');\n\tconst result = es.through();\n\n\tvsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Npm })\n\t\t.then(fileNames => {\n\t\t\tconst files = fileNames\n\t\t\t\t.map(fileName => path.join(extensionPath, fileName))\n\t\t\t\t.map(filePath => new File({\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tstat: fs.statSync(filePath),\n\t\t\t\t\tbase: extensionPath,\n\t\t\t\t\tcontents: fs.createReadStream(filePath) as any\n\t\t\t\t}));\n\n\t\t\tes.readArray(files).pipe(result);\n\t\t})\n\t\t.catch(err => result.emit('error', err));\n\n\treturn result.pipe(createStatsStream(path.basename(extensionPath)));\n}\n\nconst userAgent = 'VSCode Build';\nconst baseHeaders = {\n\t'X-Market-Client-Id': 'VSCode Build',\n\t'User-Agent': userAgent,\n\t'X-Market-User-Id': '291C1CD0-051A-4123-9B4B-30D60EF52EE2',\n};\n\nexport function fromMarketplace(serviceUrl: string, { name: extensionName, version, sha256, metadata }: IExtensionDefinition): Stream {\n\tconst json = require('gulp-json-editor') as typeof import('gulp-json-editor');\n\n\tconst [publisher, name] = extensionName.split('.');\n\tconst url = `${serviceUrl}/publishers/${publisher}/vsextensions/${name}/${version}/vspackage`;\n\n\tfancyLog('Downloading extension:', ansiColors.yellow(`${extensionName}@${version}`), '...');\n\n\tconst packageJsonFilter = filter('package.json', { restore: true });\n\n\treturn fetchUrls('', {\n\t\tbase: url,\n\t\tnodeFetchOptions: {\n\t\t\theaders: baseHeaders\n\t\t},\n\t\tchecksumSha256: sha256\n\t})\n\t\t.pipe(vzip.src())\n\t\t.pipe(filter('extension/**'))\n\t\t.pipe(rename(p => p.dirname = p.dirname!.replace(/^extension\\/?/, '')))\n\t\t.pipe(packageJsonFilter)\n\t\t.pipe(buffer())\n\t\t.pipe(json({ __metadata: metadata }))\n\t\t.pipe(packageJsonFilter.restore);\n}\n\nexport function fromVsix(vsixPath: string, { name: extensionName, version, sha256, metadata }: IExtensionDefinition): Stream {\n\tconst json = require('gulp-json-editor') as typeof import('gulp-json-editor');\n\n\tfancyLog('Using local VSIX for extension:', ansiColors.yellow(`${extensionName}@${version}`), '...');\n\n\tconst packageJsonFilter = filter('package.json', { restore: true });\n\n\treturn gulp.src(vsixPath)\n\t\t.pipe(buffer())\n\t\t.pipe(es.mapSync((f: File) => {\n\t\t\tconst hash = crypto.createHash('sha256');\n\t\t\thash.update(f.contents as Buffer);\n\t\t\tconst checksum = hash.digest('hex');\n\t\t\tif (checksum !== sha256) {\n\t\t\t\tthrow new Error(`Checksum mismatch for ${vsixPath} (expected ${sha256}, actual ${checksum}))`);\n\t\t\t}\n\t\t\treturn f;\n\t\t}))\n\t\t.pipe(vzip.src())\n\t\t.pipe(filter('extension/**'))\n\t\t.pipe(rename(p => p.dirname = p.dirname!.replace(/^extension\\/?/, '')))\n\t\t.pipe(packageJsonFilter)\n\t\t.pipe(buffer())\n\t\t.pipe(json({ __metadata: metadata }))\n\t\t.pipe(packageJsonFilter.restore);\n}\n\n\nexport function fromGithub({ name, version, repo, sha256, metadata }: IExtensionDefinition): Stream {\n\tconst json = require('gulp-json-editor') as typeof import('gulp-json-editor');\n\n\tfancyLog('Downloading extension from GH:', ansiColors.yellow(`${name}@${version}`), '...');\n\n\tconst packageJsonFilter = filter('package.json', { restore: true });\n\n\treturn fetchGithub(new URL(repo).pathname, {\n\t\tversion,\n\t\tname: name => name.endsWith('.vsix'),\n\t\tchecksumSha256: sha256\n\t})\n\t\t.pipe(buffer())\n\t\t.pipe(vzip.src())\n\t\t.pipe(filter('extension/**'))\n\t\t.pipe(rename(p => p.dirname = p.dirname!.replace(/^extension\\/?/, '')))\n\t\t.pipe(packageJsonFilter)\n\t\t.pipe(buffer())\n\t\t.pipe(json({ __metadata: metadata }))\n\t\t.pipe(packageJsonFilter.restore);\n}\n\n/**\n * All extensions that are known to have some native component and thus must be built on the\n * platform that is being built.\n */\nconst nativeExtensions = [\n\t'microsoft-authentication',\n];\n\nconst excludedExtensions = [\n\t'vscode-api-tests',\n\t'vscode-colorize-tests',\n\t'vscode-colorize-perf-tests',\n\t'vscode-test-resolver',\n\t'ms-vscode.node-debug',\n\t'ms-vscode.node-debug2',\n];\n\nconst marketplaceWebExtensionsExclude = new Set([\n\t'ms-vscode.node-debug',\n\t'ms-vscode.node-debug2',\n\t'ms-vscode.js-debug-companion',\n\t'ms-vscode.js-debug',\n\t'ms-vscode.vscode-js-profile-table'\n]);\n\nconst productJson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));\nconst builtInExtensions: IExtensionDefinition[] = productJson.builtInExtensions || [];\nconst webBuiltInExtensions: IExtensionDefinition[] = productJson.webBuiltInExtensions || [];\n\ntype ExtensionKind = 'ui' | 'workspace' | 'web';\ninterface IExtensionManifest {\n\tmain?: string;\n\tbrowser?: string;\n\textensionKind?: ExtensionKind | ExtensionKind[];\n\textensionPack?: string[];\n\textensionDependencies?: string[];\n\tcontributes?: { [id: string]: any };\n}\n/**\n * Loosely based on `getExtensionKind` from `src/vs/workbench/services/extensions/common/extensionManifestPropertiesService.ts`\n */\nfunction isWebExtension(manifest: IExtensionManifest): boolean {\n\tif (Boolean(manifest.browser)) {\n\t\treturn true;\n\t}\n\tif (Boolean(manifest.main)) {\n\t\treturn false;\n\t}\n\t// neither browser nor main\n\tif (typeof manifest.extensionKind !== 'undefined') {\n\t\tconst extensionKind = Array.isArray(manifest.extensionKind) ? manifest.extensionKind : [manifest.extensionKind];\n\t\tif (extensionKind.indexOf('web') >= 0) {\n\t\t\treturn true;\n\t\t}\n\t}\n\tif (typeof manifest.contributes !== 'undefined') {\n\t\tfor (const id of ['debuggers', 'terminal', 'typescriptServerPlugins']) {\n\t\t\tif (manifest.contributes.hasOwnProperty(id)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Package local extensions that are known to not have native dependencies. Mutually exclusive to {@link packageNativeLocalExtensionsStream}.\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @returns a stream\n */\nexport function packageNonNativeLocalExtensionsStream(forWeb: boolean, disableMangle: boolean): Stream {\n\treturn doPackageLocalExtensionsStream(forWeb, disableMangle, false);\n}\n\n/**\n * Package local extensions that are known to have native dependencies. Mutually exclusive to {@link packageNonNativeLocalExtensionsStream}.\n * @note it's possible that the extension does not have native dependencies for the current platform, especially if building for the web,\n * but we simplify the logic here by having a flat list of extensions (See {@link nativeExtensions}) that are known to have native\n * dependencies on some platform and thus should be packaged on the platform that they are building for.\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @returns a stream\n */\nexport function packageNativeLocalExtensionsStream(forWeb: boolean, disableMangle: boolean): Stream {\n\treturn doPackageLocalExtensionsStream(forWeb, disableMangle, true);\n}\n\n/**\n * Package all the local extensions... both those that are known to have native dependencies and those that are not.\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @returns a stream\n */\nexport function packageAllLocalExtensionsStream(forWeb: boolean, disableMangle: boolean): Stream {\n\treturn es.merge([\n\t\tpackageNonNativeLocalExtensionsStream(forWeb, disableMangle),\n\t\tpackageNativeLocalExtensionsStream(forWeb, disableMangle)\n\t]);\n}\n\n/**\n * @param forWeb build the extensions that have web targets\n * @param disableMangle disable the mangler\n * @param native build the extensions that are marked as having native dependencies\n */\nfunction doPackageLocalExtensionsStream(forWeb: boolean, disableMangle: boolean, native: boolean): Stream {\n\tconst nativeExtensionsSet = new Set(nativeExtensions);\n\tconst localExtensionsDescriptions = (\n\t\t(<string[]>glob.sync('extensions/*/package.json'))\n\t\t\t.map(manifestPath => {\n\t\t\t\tconst absoluteManifestPath = path.join(root, manifestPath);\n\t\t\t\tconst extensionPath = path.dirname(path.join(root, manifestPath));\n\t\t\t\tconst extensionName = path.basename(extensionPath);\n\t\t\t\treturn { name: extensionName, path: extensionPath, manifestPath: absoluteManifestPath };\n\t\t\t})\n\t\t\t.filter(({ name }) => native ? nativeExtensionsSet.has(name) : !nativeExtensionsSet.has(name))\n\t\t\t.filter(({ name }) => excludedExtensions.indexOf(name) === -1)\n\t\t\t.filter(({ name }) => builtInExtensions.every(b => b.name !== name))\n\t\t\t.filter(({ manifestPath }) => (forWeb ? isWebExtension(require(manifestPath)) : true))\n\t);\n\tconst localExtensionsStream = minifyExtensionResources(\n\t\tes.merge(\n\t\t\t...localExtensionsDescriptions.map(extension => {\n\t\t\t\treturn fromLocal(extension.path, forWeb, disableMangle)\n\t\t\t\t\t.pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));\n\t\t\t})\n\t\t)\n\t);\n\n\tlet result: Stream;\n\tif (forWeb) {\n\t\tresult = localExtensionsStream;\n\t} else {\n\t\t// also include shared production node modules\n\t\tconst productionDependencies = getProductionDependencies('extensions/');\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();\n\n\t\tresult = es.merge(\n\t\t\tlocalExtensionsStream,\n\t\t\tgulp.src(dependenciesSrc, { base: '.' })\n\t\t\t\t.pipe(util2.cleanNodeModules(path.join(root, 'build', '.moduleignore')))\n\t\t\t\t.pipe(util2.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`))));\n\t}\n\n\treturn (\n\t\tresult\n\t\t\t.pipe(util2.setExecutableBit(['**/*.sh']))\n\t);\n}\n\nexport function packageMarketplaceExtensionsStream(forWeb: boolean): Stream {\n\tconst marketplaceExtensionsDescriptions = [\n\t\t...builtInExtensions.filter(({ name }) => (forWeb ? !marketplaceWebExtensionsExclude.has(name) : true)),\n\t\t...(forWeb ? webBuiltInExtensions : [])\n\t];\n\tconst marketplaceExtensionsStream = minifyExtensionResources(\n\t\tes.merge(\n\t\t\t...marketplaceExtensionsDescriptions\n\t\t\t\t.map(extension => {\n\t\t\t\t\tconst src = getExtensionStream(extension).pipe(rename(p => p.dirname = `extensions/${p.dirname}`));\n\t\t\t\t\treturn updateExtensionPackageJSON(src, (data: any) => {\n\t\t\t\t\t\tdelete data.scripts;\n\t\t\t\t\t\tdelete data.dependencies;\n\t\t\t\t\t\tdelete data.devDependencies;\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t)\n\t);\n\n\treturn (\n\t\tmarketplaceExtensionsStream\n\t\t\t.pipe(util2.setExecutableBit(['**/*.sh']))\n\t);\n}\n\nexport interface IScannedBuiltinExtension {\n\textensionPath: string;\n\tpackageJSON: any;\n\tpackageNLS?: any;\n\treadmePath?: string;\n\tchangelogPath?: string;\n}\n\nexport function scanBuiltinExtensions(extensionsRoot: string, exclude: string[] = []): IScannedBuiltinExtension[] {\n\tconst scannedExtensions: IScannedBuiltinExtension[] = [];\n\n\ttry {\n\t\tconst extensionsFolders = fs.readdirSync(extensionsRoot);\n\t\tfor (const extensionFolder of extensionsFolders) {\n\t\t\tif (exclude.indexOf(extensionFolder) >= 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst packageJSONPath = path.join(extensionsRoot, extensionFolder, 'package.json');\n\t\t\tif (!fs.existsSync(packageJSONPath)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst packageJSON = JSON.parse(fs.readFileSync(packageJSONPath).toString('utf8'));\n\t\t\tif (!isWebExtension(packageJSON)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst children = fs.readdirSync(path.join(extensionsRoot, extensionFolder));\n\t\t\tconst packageNLSPath = children.filter(child => child === 'package.nls.json')[0];\n\t\t\tconst packageNLS = packageNLSPath ? JSON.parse(fs.readFileSync(path.join(extensionsRoot, extensionFolder, packageNLSPath)).toString()) : undefined;\n\t\t\tconst readme = children.filter(child => /^readme(\\.txt|\\.md|)$/i.test(child))[0];\n\t\t\tconst changelog = children.filter(child => /^changelog(\\.txt|\\.md|)$/i.test(child))[0];\n\n\t\t\tscannedExtensions.push({\n\t\t\t\textensionPath: extensionFolder,\n\t\t\t\tpackageJSON,\n\t\t\t\tpackageNLS,\n\t\t\t\treadmePath: readme ? path.join(extensionFolder, readme) : undefined,\n\t\t\t\tchangelogPath: changelog ? path.join(extensionFolder, changelog) : undefined,\n\t\t\t});\n\t\t}\n\t\treturn scannedExtensions;\n\t} catch (ex) {\n\t\treturn scannedExtensions;\n\t}\n}\n\nexport function translatePackageJSON(packageJSON: string, packageNLSPath: string) {\n\tinterface NLSFormat {\n\t\t[key: string]: string | { message: string; comment: string[] };\n\t}\n\tconst CharCode_PC = '%'.charCodeAt(0);\n\tconst packageNls: NLSFormat = JSON.parse(fs.readFileSync(packageNLSPath).toString());\n\tconst translate = (obj: any) => {\n\t\tfor (const key in obj) {\n\t\t\tconst val = obj[key];\n\t\t\tif (Array.isArray(val)) {\n\t\t\t\tval.forEach(translate);\n\t\t\t} else if (val && typeof val === 'object') {\n\t\t\t\ttranslate(val);\n\t\t\t} else if (typeof val === 'string' && val.charCodeAt(0) === CharCode_PC && val.charCodeAt(val.length - 1) === CharCode_PC) {\n\t\t\t\tconst translated = packageNls[val.substr(1, val.length - 2)];\n\t\t\t\tif (translated) {\n\t\t\t\t\tobj[key] = typeof translated === 'string' ? translated : (typeof translated.message === 'string' ? translated.message : val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\ttranslate(packageJSON);\n\treturn packageJSON;\n}\n\nconst extensionsPath = path.join(root, 'extensions');\n\n// Additional projects to run esbuild on. These typically build code for webviews\nconst esbuildMediaScripts = [\n\t'markdown-language-features/esbuild-notebook.js',\n\t'markdown-language-features/esbuild-preview.js',\n\t'markdown-math/esbuild.js',\n\t'notebook-renderers/esbuild.js',\n\t'ipynb/esbuild.js',\n\t'simple-browser/esbuild-preview.js',\n];\n\nexport async function webpackExtensions(taskName: string, isWatch: boolean, webpackConfigLocations: { configPath: string; outputRoot?: string }[]) {\n\tconst webpack = require('webpack') as typeof import('webpack');\n\n\tconst webpackConfigs: webpack.Configuration[] = [];\n\n\tfor (const { configPath, outputRoot } of webpackConfigLocations) {\n\t\tconst configOrFnOrArray = require(configPath);\n\t\tfunction addConfig(configOrFnOrArray: webpack.Configuration | ((env: unknown, args: unknown) => webpack.Configuration) | webpack.Configuration[]) {\n\t\t\tfor (const configOrFn of Array.isArray(configOrFnOrArray) ? configOrFnOrArray : [configOrFnOrArray]) {\n\t\t\t\tconst config = typeof configOrFn === 'function' ? configOrFn({}, {}) : configOrFn;\n\t\t\t\tif (outputRoot) {\n\t\t\t\t\tconfig.output!.path = path.join(outputRoot, path.relative(path.dirname(configPath), config.output!.path!));\n\t\t\t\t}\n\t\t\t\twebpackConfigs.push(config);\n\t\t\t}\n\t\t}\n\t\taddConfig(configOrFnOrArray);\n\t}\n\tfunction reporter(fullStats: any) {\n\t\tif (Array.isArray(fullStats.children)) {\n\t\t\tfor (const stats of fullStats.children) {\n\t\t\t\tconst outputPath = stats.outputPath;\n\t\t\t\tif (outputPath) {\n\t\t\t\t\tconst relativePath = path.relative(extensionsPath, outputPath).replace(/\\\\/g, '/');\n\t\t\t\t\tconst match = relativePath.match(/[^\\/]+(\\/server|\\/client)?/);\n\t\t\t\t\tfancyLog(`Finished ${ansiColors.green(taskName)} ${ansiColors.cyan(match![0])} with ${stats.errors.length} errors.`);\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(stats.errors)) {\n\t\t\t\t\tstats.errors.forEach((error: any) => {\n\t\t\t\t\t\tfancyLog.error(error);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(stats.warnings)) {\n\t\t\t\t\tstats.warnings.forEach((warning: any) => {\n\t\t\t\t\t\tfancyLog.warn(warning);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn new Promise<void>((resolve, reject) => {\n\t\tif (isWatch) {\n\t\t\twebpack(webpackConfigs).watch({}, (err, stats) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject();\n\t\t\t\t} else {\n\t\t\t\t\treporter(stats?.toJson());\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\twebpack(webpackConfigs).run((err, stats) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tfancyLog.error(err);\n\t\t\t\t\treject();\n\t\t\t\t} else {\n\t\t\t\t\treporter(stats?.toJson());\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nasync function esbuildExtensions(taskName: string, isWatch: boolean, scripts: { script: string; outputRoot?: string }[]) {\n\tfunction reporter(stdError: string, script: string) {\n\t\tconst matches = (stdError || '').match(/\\> (.+): error: (.+)?/g);\n\t\tfancyLog(`Finished ${ansiColors.green(taskName)} ${script} with ${matches ? matches.length : 0} errors.`);\n\t\tfor (const match of matches || []) {\n\t\t\tfancyLog.error(match);\n\t\t}\n\t}\n\n\tconst tasks = scripts.map(({ script, outputRoot }) => {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst args = [script];\n\t\t\tif (isWatch) {\n\t\t\t\targs.push('--watch');\n\t\t\t}\n\t\t\tif (outputRoot) {\n\t\t\t\targs.push('--outputRoot', outputRoot);\n\t\t\t}\n\t\t\tconst proc = cp.execFile(process.argv[0], args, {}, (error, _stdout, stderr) => {\n\t\t\t\tif (error) {\n\t\t\t\t\treturn reject(error);\n\t\t\t\t}\n\t\t\t\treporter(stderr, script);\n\t\t\t\treturn resolve();\n\t\t\t});\n\n\t\t\tproc.stdout!.on('data', (data) => {\n\t\t\t\tfancyLog(`${ansiColors.green(taskName)}: ${data.toString('utf8')}`);\n\t\t\t});\n\t\t});\n\t});\n\treturn Promise.all(tasks);\n}\n\nexport async function buildExtensionMedia(isWatch: boolean, outputRoot?: string) {\n\treturn esbuildExtensions('esbuilding extension media', isWatch, esbuildMediaScripts.map(p => ({\n\t\tscript: path.join(extensionsPath, p),\n\t\toutputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(p)) : undefined\n\t})));\n}\n"
  },
  {
    "path": "build/lib/fetch.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchUrls = fetchUrls;\nexports.fetchUrl = fetchUrl;\nexports.fetchGithub = fetchGithub;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst through2_1 = __importDefault(require(\"through2\"));\nfunction fetchUrls(urls, options) {\n    if (options === undefined) {\n        options = {};\n    }\n    if (typeof options.base !== 'string' && options.base !== null) {\n        options.base = '/';\n    }\n    if (!Array.isArray(urls)) {\n        urls = [urls];\n    }\n    return event_stream_1.default.readArray(urls).pipe(event_stream_1.default.map((data, cb) => {\n        const url = [options.base, data].join('');\n        fetchUrl(url, options).then(file => {\n            cb(undefined, file);\n        }, error => {\n            cb(error);\n        });\n    }));\n}\nasync function fetchUrl(url, options, retries = 10, retryDelay = 1000) {\n    const verbose = !!options.verbose || !!process.env['CI'] || !!process.env['BUILD_ARTIFACTSTAGINGDIRECTORY'];\n    try {\n        let startTime = 0;\n        if (verbose) {\n            (0, fancy_log_1.default)(`Start fetching ${ansi_colors_1.default.magenta(url)}${retries !== 10 ? ` (${10 - retries} retry)` : ''}`);\n            startTime = new Date().getTime();\n        }\n        const controller = new AbortController();\n        const timeout = setTimeout(() => controller.abort(), 30 * 1000);\n        try {\n            const response = await fetch(url, {\n                ...options.nodeFetchOptions,\n                signal: controller.signal /* Typings issue with lib.dom.d.ts */\n            });\n            if (verbose) {\n                (0, fancy_log_1.default)(`Fetch completed: Status ${response.status}. Took ${ansi_colors_1.default.magenta(`${new Date().getTime() - startTime} ms`)}`);\n            }\n            if (response.ok && (response.status >= 200 && response.status < 300)) {\n                const contents = Buffer.from(await response.arrayBuffer());\n                if (options.checksumSha256) {\n                    const actualSHA256Checksum = crypto_1.default.createHash('sha256').update(contents).digest('hex');\n                    if (actualSHA256Checksum !== options.checksumSha256) {\n                        throw new Error(`Checksum mismatch for ${ansi_colors_1.default.cyan(url)} (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`);\n                    }\n                    else if (verbose) {\n                        (0, fancy_log_1.default)(`Verified SHA256 checksums match for ${ansi_colors_1.default.cyan(url)}`);\n                    }\n                }\n                else if (verbose) {\n                    (0, fancy_log_1.default)(`Skipping checksum verification for ${ansi_colors_1.default.cyan(url)} because no expected checksum was provided`);\n                }\n                if (verbose) {\n                    (0, fancy_log_1.default)(`Fetched response body buffer: ${ansi_colors_1.default.magenta(`${contents.byteLength} bytes`)}`);\n                }\n                return new vinyl_1.default({\n                    cwd: '/',\n                    base: options.base,\n                    path: url,\n                    contents\n                });\n            }\n            let err = `Request ${ansi_colors_1.default.magenta(url)} failed with status code: ${response.status}`;\n            if (response.status === 403) {\n                err += ' (you may be rate limited)';\n            }\n            throw new Error(err);\n        }\n        finally {\n            clearTimeout(timeout);\n        }\n    }\n    catch (e) {\n        if (verbose) {\n            (0, fancy_log_1.default)(`Fetching ${ansi_colors_1.default.cyan(url)} failed: ${e}`);\n        }\n        if (retries > 0) {\n            await new Promise(resolve => setTimeout(resolve, retryDelay));\n            return fetchUrl(url, options, retries - 1, retryDelay);\n        }\n        throw e;\n    }\n}\nconst ghApiHeaders = {\n    Accept: 'application/vnd.github.v3+json',\n    'User-Agent': 'VSCode Build',\n};\nif (process.env.GITHUB_TOKEN) {\n    ghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64');\n}\nconst ghDownloadHeaders = {\n    ...ghApiHeaders,\n    Accept: 'application/octet-stream',\n};\n/**\n * @param repo for example `Microsoft/vscode`\n * @param version for example `16.17.1` - must be a valid releases tag\n * @param assetName for example (name) => name === `win-x64-node.exe` - must be an asset that exists\n * @returns a stream with the asset as file\n */\nfunction fetchGithub(repo, options) {\n    return fetchUrls(`/repos/${repo.replace(/^\\/|\\/$/g, '')}/releases/tags/v${options.version}`, {\n        base: 'https://api.github.com',\n        verbose: options.verbose,\n        nodeFetchOptions: { headers: ghApiHeaders }\n    }).pipe(through2_1.default.obj(async function (file, _enc, callback) {\n        const assetFilter = typeof options.name === 'string' ? (name) => name === options.name : options.name;\n        const asset = JSON.parse(file.contents.toString()).assets.find((a) => assetFilter(a.name));\n        if (!asset) {\n            return callback(new Error(`Could not find asset in release of ${repo} @ ${options.version}`));\n        }\n        try {\n            callback(null, await fetchUrl(asset.url, {\n                nodeFetchOptions: { headers: ghDownloadHeaders },\n                verbose: options.verbose,\n                checksumSha256: options.checksumSha256\n            }));\n        }\n        catch (error) {\n            callback(error);\n        }\n    }));\n}\n//# sourceMappingURL=fetch.js.map"
  },
  {
    "path": "build/lib/fetch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport VinylFile from 'vinyl';\nimport log from 'fancy-log';\nimport ansiColors from 'ansi-colors';\nimport crypto from 'crypto';\nimport through2 from 'through2';\nimport { Stream } from 'stream';\n\nexport interface IFetchOptions {\n\tbase?: string;\n\tnodeFetchOptions?: RequestInit;\n\tverbose?: boolean;\n\tchecksumSha256?: string;\n}\n\nexport function fetchUrls(urls: string[] | string, options: IFetchOptions): es.ThroughStream {\n\tif (options === undefined) {\n\t\toptions = {};\n\t}\n\n\tif (typeof options.base !== 'string' && options.base !== null) {\n\t\toptions.base = '/';\n\t}\n\n\tif (!Array.isArray(urls)) {\n\t\turls = [urls];\n\t}\n\n\treturn es.readArray(urls).pipe(es.map<string, VinylFile | void>((data: string, cb) => {\n\t\tconst url = [options.base, data].join('');\n\t\tfetchUrl(url, options).then(file => {\n\t\t\tcb(undefined, file);\n\t\t}, error => {\n\t\t\tcb(error);\n\t\t});\n\t}));\n}\n\nexport async function fetchUrl(url: string, options: IFetchOptions, retries = 10, retryDelay = 1000): Promise<VinylFile> {\n\tconst verbose = !!options.verbose || !!process.env['CI'] || !!process.env['BUILD_ARTIFACTSTAGINGDIRECTORY'];\n\ttry {\n\t\tlet startTime = 0;\n\t\tif (verbose) {\n\t\t\tlog(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? ` (${10 - retries} retry)` : ''}`);\n\t\t\tstartTime = new Date().getTime();\n\t\t}\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => controller.abort(), 30 * 1000);\n\t\ttry {\n\t\t\tconst response = await fetch(url, {\n\t\t\t\t...options.nodeFetchOptions,\n\t\t\t\tsignal: controller.signal as any /* Typings issue with lib.dom.d.ts */\n\t\t\t});\n\t\t\tif (verbose) {\n\t\t\t\tlog(`Fetch completed: Status ${response.status}. Took ${ansiColors.magenta(`${new Date().getTime() - startTime} ms`)}`);\n\t\t\t}\n\t\t\tif (response.ok && (response.status >= 200 && response.status < 300)) {\n\t\t\t\tconst contents = Buffer.from(await response.arrayBuffer());\n\t\t\t\tif (options.checksumSha256) {\n\t\t\t\t\tconst actualSHA256Checksum = crypto.createHash('sha256').update(contents).digest('hex');\n\t\t\t\t\tif (actualSHA256Checksum !== options.checksumSha256) {\n\t\t\t\t\t\tthrow new Error(`Checksum mismatch for ${ansiColors.cyan(url)} (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`);\n\t\t\t\t\t} else if (verbose) {\n\t\t\t\t\t\tlog(`Verified SHA256 checksums match for ${ansiColors.cyan(url)}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (verbose) {\n\t\t\t\t\tlog(`Skipping checksum verification for ${ansiColors.cyan(url)} because no expected checksum was provided`);\n\t\t\t\t}\n\t\t\t\tif (verbose) {\n\t\t\t\t\tlog(`Fetched response body buffer: ${ansiColors.magenta(`${(contents as Buffer).byteLength} bytes`)}`);\n\t\t\t\t}\n\t\t\t\treturn new VinylFile({\n\t\t\t\t\tcwd: '/',\n\t\t\t\t\tbase: options.base,\n\t\t\t\t\tpath: url,\n\t\t\t\t\tcontents\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet err = `Request ${ansiColors.magenta(url)} failed with status code: ${response.status}`;\n\t\t\tif (response.status === 403) {\n\t\t\t\terr += ' (you may be rate limited)';\n\t\t\t}\n\t\t\tthrow new Error(err);\n\t\t} finally {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t} catch (e) {\n\t\tif (verbose) {\n\t\t\tlog(`Fetching ${ansiColors.cyan(url)} failed: ${e}`);\n\t\t}\n\t\tif (retries > 0) {\n\t\t\tawait new Promise(resolve => setTimeout(resolve, retryDelay));\n\t\t\treturn fetchUrl(url, options, retries - 1, retryDelay);\n\t\t}\n\t\tthrow e;\n\t}\n}\n\nconst ghApiHeaders: Record<string, string> = {\n\tAccept: 'application/vnd.github.v3+json',\n\t'User-Agent': 'VSCode Build',\n};\nif (process.env.GITHUB_TOKEN) {\n\tghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64');\n}\nconst ghDownloadHeaders = {\n\t...ghApiHeaders,\n\tAccept: 'application/octet-stream',\n};\n\nexport interface IGitHubAssetOptions {\n\tversion: string;\n\tname: string | ((name: string) => boolean);\n\tchecksumSha256?: string;\n\tverbose?: boolean;\n}\n\n/**\n * @param repo for example `Microsoft/vscode`\n * @param version for example `16.17.1` - must be a valid releases tag\n * @param assetName for example (name) => name === `win-x64-node.exe` - must be an asset that exists\n * @returns a stream with the asset as file\n */\nexport function fetchGithub(repo: string, options: IGitHubAssetOptions): Stream {\n\treturn fetchUrls(`/repos/${repo.replace(/^\\/|\\/$/g, '')}/releases/tags/v${options.version}`, {\n\t\tbase: 'https://api.github.com',\n\t\tverbose: options.verbose,\n\t\tnodeFetchOptions: { headers: ghApiHeaders }\n\t}).pipe(through2.obj(async function (file, _enc, callback) {\n\t\tconst assetFilter = typeof options.name === 'string' ? (name: string) => name === options.name : options.name;\n\t\tconst asset = JSON.parse(file.contents.toString()).assets.find((a: { name: string }) => assetFilter(a.name));\n\t\tif (!asset) {\n\t\t\treturn callback(new Error(`Could not find asset in release of ${repo} @ ${options.version}`));\n\t\t}\n\t\ttry {\n\t\t\tcallback(null, await fetchUrl(asset.url, {\n\t\t\t\tnodeFetchOptions: { headers: ghDownloadHeaders },\n\t\t\t\tverbose: options.verbose,\n\t\t\t\tchecksumSha256: options.checksumSha256\n\t\t\t}));\n\t\t} catch (error) {\n\t\t\tcallback(error);\n\t\t}\n\t}));\n}\n"
  },
  {
    "path": "build/lib/formatter.js",
    "content": "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.format = format;\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst typescript_1 = __importDefault(require(\"typescript\"));\nclass LanguageServiceHost {\n    files = {};\n    addFile(fileName, text) {\n        this.files[fileName] = typescript_1.default.ScriptSnapshot.fromString(text);\n    }\n    fileExists(path) {\n        return !!this.files[path];\n    }\n    readFile(path) {\n        return this.files[path]?.getText(0, this.files[path].getLength());\n    }\n    // for ts.LanguageServiceHost\n    getCompilationSettings = () => typescript_1.default.getDefaultCompilerOptions();\n    getScriptFileNames = () => Object.keys(this.files);\n    getScriptVersion = (_fileName) => '0';\n    getScriptSnapshot = (fileName) => this.files[fileName];\n    getCurrentDirectory = () => process.cwd();\n    getDefaultLibFileName = (options) => typescript_1.default.getDefaultLibFilePath(options);\n}\nconst defaults = {\n    baseIndentSize: 0,\n    indentSize: 4,\n    tabSize: 4,\n    indentStyle: typescript_1.default.IndentStyle.Smart,\n    newLineCharacter: '\\r\\n',\n    convertTabsToSpaces: false,\n    insertSpaceAfterCommaDelimiter: true,\n    insertSpaceAfterSemicolonInForStatements: true,\n    insertSpaceBeforeAndAfterBinaryOperators: true,\n    insertSpaceAfterConstructor: false,\n    insertSpaceAfterKeywordsInControlFlowStatements: true,\n    insertSpaceAfterFunctionKeywordForAnonymousFunctions: false,\n    insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,\n    insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,\n    insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n    insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,\n    insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,\n    insertSpaceAfterTypeAssertion: false,\n    insertSpaceBeforeFunctionParenthesis: false,\n    placeOpenBraceOnNewLineForFunctions: false,\n    placeOpenBraceOnNewLineForControlBlocks: false,\n    insertSpaceBeforeTypeAnnotation: false,\n};\nconst getOverrides = (() => {\n    let value;\n    return () => {\n        value ??= JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', '..', 'tsfmt.json'), 'utf8'));\n        return value;\n    };\n})();\nfunction format(fileName, text) {\n    const host = new LanguageServiceHost();\n    host.addFile(fileName, text);\n    const languageService = typescript_1.default.createLanguageService(host);\n    const edits = languageService.getFormattingEditsForDocument(fileName, { ...defaults, ...getOverrides() });\n    edits\n        .sort((a, b) => a.span.start - b.span.start)\n        .reverse()\n        .forEach(edit => {\n        const head = text.slice(0, edit.span.start);\n        const tail = text.slice(edit.span.start + edit.span.length);\n        text = `${head}${edit.newText}${tail}`;\n    });\n    return text;\n}\n//# sourceMappingURL=formatter.js.map"
  },
  {
    "path": "build/lib/formatter.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport fs from 'fs';\nimport path from 'path';\nimport ts from 'typescript';\n\n\nclass LanguageServiceHost implements ts.LanguageServiceHost {\n\tfiles: ts.MapLike<ts.IScriptSnapshot> = {};\n\taddFile(fileName: string, text: string) {\n\t\tthis.files[fileName] = ts.ScriptSnapshot.fromString(text);\n\t}\n\n\tfileExists(path: string): boolean {\n\t\treturn !!this.files[path];\n\t}\n\n\treadFile(path: string): string | undefined {\n\t\treturn this.files[path]?.getText(0, this.files[path]!.getLength());\n\t}\n\n\t// for ts.LanguageServiceHost\n\n\tgetCompilationSettings = () => ts.getDefaultCompilerOptions();\n\tgetScriptFileNames = () => Object.keys(this.files);\n\tgetScriptVersion = (_fileName: string) => '0';\n\tgetScriptSnapshot = (fileName: string) => this.files[fileName];\n\tgetCurrentDirectory = () => process.cwd();\n\tgetDefaultLibFileName = (options: ts.CompilerOptions) => ts.getDefaultLibFilePath(options);\n}\n\nconst defaults: ts.FormatCodeSettings = {\n\tbaseIndentSize: 0,\n\tindentSize: 4,\n\ttabSize: 4,\n\tindentStyle: ts.IndentStyle.Smart,\n\tnewLineCharacter: '\\r\\n',\n\tconvertTabsToSpaces: false,\n\tinsertSpaceAfterCommaDelimiter: true,\n\tinsertSpaceAfterSemicolonInForStatements: true,\n\tinsertSpaceBeforeAndAfterBinaryOperators: true,\n\tinsertSpaceAfterConstructor: false,\n\tinsertSpaceAfterKeywordsInControlFlowStatements: true,\n\tinsertSpaceAfterFunctionKeywordForAnonymousFunctions: false,\n\tinsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,\n\tinsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,\n\tinsertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n\tinsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,\n\tinsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,\n\tinsertSpaceAfterTypeAssertion: false,\n\tinsertSpaceBeforeFunctionParenthesis: false,\n\tplaceOpenBraceOnNewLineForFunctions: false,\n\tplaceOpenBraceOnNewLineForControlBlocks: false,\n\tinsertSpaceBeforeTypeAnnotation: false,\n};\n\nconst getOverrides = (() => {\n\tlet value: ts.FormatCodeSettings | undefined;\n\treturn () => {\n\t\tvalue ??= JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'tsfmt.json'), 'utf8'));\n\t\treturn value;\n\t};\n})();\n\nexport function format(fileName: string, text: string) {\n\n\tconst host = new LanguageServiceHost();\n\thost.addFile(fileName, text);\n\n\tconst languageService = ts.createLanguageService(host);\n\tconst edits = languageService.getFormattingEditsForDocument(fileName, { ...defaults, ...getOverrides() });\n\tedits\n\t\t.sort((a, b) => a.span.start - b.span.start)\n\t\t.reverse()\n\t\t.forEach(edit => {\n\t\t\tconst head = text.slice(0, edit.span.start);\n\t\t\tconst tail = text.slice(edit.span.start + edit.span.length);\n\t\t\ttext = `${head}${edit.newText}${tail}`;\n\t\t});\n\n\treturn text;\n}\n"
  },
  {
    "path": "build/lib/getVersion.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getVersion = getVersion;\nconst git = __importStar(require(\"./git\"));\nfunction getVersion(root) {\n    let version = process.env['BUILD_SOURCEVERSION'];\n    if (!version || !/^[0-9a-f]{40}$/i.test(version.trim())) {\n        version = git.getVersion(root);\n    }\n    return version;\n}\n//# sourceMappingURL=getVersion.js.map"
  },
  {
    "path": "build/lib/getVersion.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as git from './git';\n\nexport function getVersion(root: string): string | undefined {\n\tlet version = process.env['BUILD_SOURCEVERSION'];\n\n\tif (!version || !/^[0-9a-f]{40}$/i.test(version.trim())) {\n\t\tversion = git.getVersion(root);\n\t}\n\n\treturn version;\n}\n"
  },
  {
    "path": "build/lib/git.js",
    "content": "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getVersion = getVersion;\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst path_1 = __importDefault(require(\"path\"));\nconst fs_1 = __importDefault(require(\"fs\"));\n/**\n * Returns the sha1 commit version of a repository or undefined in case of failure.\n */\nfunction getVersion(repo) {\n    const git = path_1.default.join(repo, '.git');\n    const headPath = path_1.default.join(git, 'HEAD');\n    let head;\n    try {\n        head = fs_1.default.readFileSync(headPath, 'utf8').trim();\n    }\n    catch (e) {\n        return undefined;\n    }\n    if (/^[0-9a-f]{40}$/i.test(head)) {\n        return head;\n    }\n    const refMatch = /^ref: (.*)$/.exec(head);\n    if (!refMatch) {\n        return undefined;\n    }\n    const ref = refMatch[1];\n    const refPath = path_1.default.join(git, ref);\n    try {\n        return fs_1.default.readFileSync(refPath, 'utf8').trim();\n    }\n    catch (e) {\n        // noop\n    }\n    const packedRefsPath = path_1.default.join(git, 'packed-refs');\n    let refsRaw;\n    try {\n        refsRaw = fs_1.default.readFileSync(packedRefsPath, 'utf8').trim();\n    }\n    catch (e) {\n        return undefined;\n    }\n    const refsRegex = /^([0-9a-f]{40})\\s+(.+)$/gm;\n    let refsMatch;\n    const refs = {};\n    while (refsMatch = refsRegex.exec(refsRaw)) {\n        refs[refsMatch[2]] = refsMatch[1];\n    }\n    return refs[ref];\n}\n//# sourceMappingURL=git.js.map"
  },
  {
    "path": "build/lib/git.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport path from 'path';\nimport fs from 'fs';\n\n/**\n * Returns the sha1 commit version of a repository or undefined in case of failure.\n */\nexport function getVersion(repo: string): string | undefined {\n\tconst git = path.join(repo, '.git');\n\tconst headPath = path.join(git, 'HEAD');\n\tlet head: string;\n\n\ttry {\n\t\thead = fs.readFileSync(headPath, 'utf8').trim();\n\t} catch (e) {\n\t\treturn undefined;\n\t}\n\n\tif (/^[0-9a-f]{40}$/i.test(head)) {\n\t\treturn head;\n\t}\n\n\tconst refMatch = /^ref: (.*)$/.exec(head);\n\n\tif (!refMatch) {\n\t\treturn undefined;\n\t}\n\n\tconst ref = refMatch[1];\n\tconst refPath = path.join(git, ref);\n\n\ttry {\n\t\treturn fs.readFileSync(refPath, 'utf8').trim();\n\t} catch (e) {\n\t\t// noop\n\t}\n\n\tconst packedRefsPath = path.join(git, 'packed-refs');\n\tlet refsRaw: string;\n\n\ttry {\n\t\trefsRaw = fs.readFileSync(packedRefsPath, 'utf8').trim();\n\t} catch (e) {\n\t\treturn undefined;\n\t}\n\n\tconst refsRegex = /^([0-9a-f]{40})\\s+(.+)$/gm;\n\tlet refsMatch: RegExpExecArray | null;\n\tconst refs: { [ref: string]: string } = {};\n\n\twhile (refsMatch = refsRegex.exec(refsRaw)) {\n\t\trefs[refsMatch[2]] = refsMatch[1];\n\t}\n\n\treturn refs[ref];\n}\n"
  },
  {
    "path": "build/lib/i18n.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EXTERNAL_EXTENSIONS = exports.XLF = exports.Line = exports.extraLanguages = exports.defaultLanguages = void 0;\nexports.processNlsFiles = processNlsFiles;\nexports.getResource = getResource;\nexports.createXlfFilesForCoreBundle = createXlfFilesForCoreBundle;\nexports.createXlfFilesForExtensions = createXlfFilesForExtensions;\nexports.createXlfFilesForIsl = createXlfFilesForIsl;\nexports.prepareI18nPackFiles = prepareI18nPackFiles;\nexports.prepareIslFiles = prepareIslFiles;\nconst path_1 = __importDefault(require(\"path\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst event_stream_1 = require(\"event-stream\");\nconst gulp_merge_json_1 = __importDefault(require(\"gulp-merge-json\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst xml2js_1 = __importDefault(require(\"xml2js\"));\nconst gulp_1 = __importDefault(require(\"gulp\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst iconv_lite_umd_1 = __importDefault(require(\"@vscode/iconv-lite-umd\"));\nconst l10n_dev_1 = require(\"@vscode/l10n-dev\");\nconst REPO_ROOT_PATH = path_1.default.join(__dirname, '../..');\nfunction log(message, ...rest) {\n    (0, fancy_log_1.default)(ansi_colors_1.default.green('[i18n]'), message, ...rest);\n}\nexports.defaultLanguages = [\n    { id: 'zh-tw', folderName: 'cht', translationId: 'zh-hant' },\n    { id: 'zh-cn', folderName: 'chs', translationId: 'zh-hans' },\n    { id: 'ja', folderName: 'jpn' },\n    { id: 'ko', folderName: 'kor' },\n    { id: 'de', folderName: 'deu' },\n    { id: 'fr', folderName: 'fra' },\n    { id: 'es', folderName: 'esn' },\n    { id: 'ru', folderName: 'rus' },\n    { id: 'it', folderName: 'ita' }\n];\n// languages requested by the community to non-stable builds\nexports.extraLanguages = [\n    { id: 'pt-br', folderName: 'ptb' },\n    { id: 'hu', folderName: 'hun' },\n    { id: 'tr', folderName: 'trk' }\n];\nvar LocalizeInfo;\n(function (LocalizeInfo) {\n    function is(value) {\n        const candidate = value;\n        return candidate && typeof candidate.key === 'string' && (candidate.comment === undefined || (Array.isArray(candidate.comment) && candidate.comment.every(element => typeof element === 'string')));\n    }\n    LocalizeInfo.is = is;\n})(LocalizeInfo || (LocalizeInfo = {}));\nvar BundledFormat;\n(function (BundledFormat) {\n    function is(value) {\n        if (value === undefined) {\n            return false;\n        }\n        const candidate = value;\n        const length = Object.keys(value).length;\n        return length === 3 && !!candidate.keys && !!candidate.messages && !!candidate.bundles;\n    }\n    BundledFormat.is = is;\n})(BundledFormat || (BundledFormat = {}));\nvar NLSKeysFormat;\n(function (NLSKeysFormat) {\n    function is(value) {\n        if (value === undefined) {\n            return false;\n        }\n        const candidate = value;\n        return Array.isArray(candidate) && Array.isArray(candidate[1]);\n    }\n    NLSKeysFormat.is = is;\n})(NLSKeysFormat || (NLSKeysFormat = {}));\nclass Line {\n    buffer = [];\n    constructor(indent = 0) {\n        if (indent > 0) {\n            this.buffer.push(new Array(indent + 1).join(' '));\n        }\n    }\n    append(value) {\n        this.buffer.push(value);\n        return this;\n    }\n    toString() {\n        return this.buffer.join('');\n    }\n}\nexports.Line = Line;\nclass TextModel {\n    _lines;\n    constructor(contents) {\n        this._lines = contents.split(/\\r\\n|\\r|\\n/);\n    }\n    get lines() {\n        return this._lines;\n    }\n}\nclass XLF {\n    project;\n    buffer;\n    files;\n    numberOfMessages;\n    constructor(project) {\n        this.project = project;\n        this.buffer = [];\n        this.files = Object.create(null);\n        this.numberOfMessages = 0;\n    }\n    toString() {\n        this.appendHeader();\n        const files = Object.keys(this.files).sort();\n        for (const file of files) {\n            this.appendNewLine(`<file original=\"${file}\" source-language=\"en\" datatype=\"plaintext\"><body>`, 2);\n            const items = this.files[file].sort((a, b) => {\n                return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n            });\n            for (const item of items) {\n                this.addStringItem(file, item);\n            }\n            this.appendNewLine('</body></file>');\n        }\n        this.appendFooter();\n        return this.buffer.join('\\r\\n');\n    }\n    addFile(original, keys, messages) {\n        if (keys.length === 0) {\n            console.log('No keys in ' + original);\n            return;\n        }\n        if (keys.length !== messages.length) {\n            throw new Error(`Unmatching keys(${keys.length}) and messages(${messages.length}).`);\n        }\n        this.numberOfMessages += keys.length;\n        this.files[original] = [];\n        const existingKeys = new Set();\n        for (let i = 0; i < keys.length; i++) {\n            const key = keys[i];\n            let realKey;\n            let comment;\n            if (typeof key === 'string') {\n                realKey = key;\n                comment = undefined;\n            }\n            else if (LocalizeInfo.is(key)) {\n                realKey = key.key;\n                if (key.comment && key.comment.length > 0) {\n                    comment = key.comment.map(comment => encodeEntities(comment)).join('\\r\\n');\n                }\n            }\n            if (!realKey || existingKeys.has(realKey)) {\n                continue;\n            }\n            existingKeys.add(realKey);\n            const message = encodeEntities(messages[i]);\n            this.files[original].push({ id: realKey, message: message, comment: comment });\n        }\n    }\n    addStringItem(file, item) {\n        if (!item.id || item.message === undefined || item.message === null) {\n            throw new Error(`No item ID or value specified: ${JSON.stringify(item)}. File: ${file}`);\n        }\n        if (item.message.length === 0) {\n            log(`Item with id ${item.id} in file ${file} has an empty message.`);\n        }\n        this.appendNewLine(`<trans-unit id=\"${item.id}\">`, 4);\n        this.appendNewLine(`<source xml:lang=\"en\">${item.message}</source>`, 6);\n        if (item.comment) {\n            this.appendNewLine(`<note>${item.comment}</note>`, 6);\n        }\n        this.appendNewLine('</trans-unit>', 4);\n    }\n    appendHeader() {\n        this.appendNewLine('<?xml version=\"1.0\" encoding=\"utf-8\"?>', 0);\n        this.appendNewLine('<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">', 0);\n    }\n    appendFooter() {\n        this.appendNewLine('</xliff>', 0);\n    }\n    appendNewLine(content, indent) {\n        const line = new Line(indent);\n        line.append(content);\n        this.buffer.push(line.toString());\n    }\n    static parse = function (xlfString) {\n        return new Promise((resolve, reject) => {\n            const parser = new xml2js_1.default.Parser();\n            const files = [];\n            parser.parseString(xlfString, function (err, result) {\n                if (err) {\n                    reject(new Error(`XLF parsing error: Failed to parse XLIFF string. ${err}`));\n                }\n                const fileNodes = result['xliff']['file'];\n                if (!fileNodes) {\n                    reject(new Error(`XLF parsing error: XLIFF file does not contain \"xliff\" or \"file\" node(s) required for parsing.`));\n                }\n                fileNodes.forEach((file) => {\n                    const name = file.$.original;\n                    if (!name) {\n                        reject(new Error(`XLF parsing error: XLIFF file node does not contain original attribute to determine the original location of the resource file.`));\n                    }\n                    const language = file.$['target-language'];\n                    if (!language) {\n                        reject(new Error(`XLF parsing error: XLIFF file node does not contain target-language attribute to determine translated language.`));\n                    }\n                    const messages = {};\n                    const transUnits = file.body[0]['trans-unit'];\n                    if (transUnits) {\n                        transUnits.forEach((unit) => {\n                            const key = unit.$.id;\n                            if (!unit.target) {\n                                return; // No translation available\n                            }\n                            let val = unit.target[0];\n                            if (typeof val !== 'string') {\n                                // We allow empty source values so support them for translations as well.\n                                val = val._ ? val._ : '';\n                            }\n                            if (!key) {\n                                reject(new Error(`XLF parsing error: trans-unit ${JSON.stringify(unit, undefined, 0)} defined in file ${name} is missing the ID attribute.`));\n                                return;\n                            }\n                            messages[key] = decodeEntities(val);\n                        });\n                        files.push({ messages, name, language: language.toLowerCase() });\n                    }\n                });\n                resolve(files);\n            });\n        });\n    };\n}\nexports.XLF = XLF;\nfunction sortLanguages(languages) {\n    return languages.sort((a, b) => {\n        return a.id < b.id ? -1 : (a.id > b.id ? 1 : 0);\n    });\n}\nfunction stripComments(content) {\n    // Copied from stripComments.js\n    //\n    // First group matches a double quoted string\n    // Second group matches a single quoted string\n    // Third group matches a multi line comment\n    // Forth group matches a single line comment\n    // Fifth group matches a trailing comma\n    const regexp = /(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")|('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|(\\/\\*[^\\/\\*]*(?:(?:\\*|\\/)[^\\/\\*]*)*?\\*\\/)|(\\/{2,}.*?(?:(?:\\r?\\n)|$))|(,\\s*[}\\]])/g;\n    const result = content.replace(regexp, (match, _m1, _m2, m3, m4, m5) => {\n        // Only one of m1, m2, m3, m4, m5 matches\n        if (m3) {\n            // A block comment. Replace with nothing\n            return '';\n        }\n        else if (m4) {\n            // Since m4 is a single line comment is is at least of length 2 (e.g. //)\n            // If it ends in \\r?\\n then keep it.\n            const length = m4.length;\n            if (m4[length - 1] === '\\n') {\n                return m4[length - 2] === '\\r' ? '\\r\\n' : '\\n';\n            }\n            else {\n                return '';\n            }\n        }\n        else if (m5) {\n            // Remove the trailing comma\n            return match.substring(1);\n        }\n        else {\n            // We match a string\n            return match;\n        }\n    });\n    return result;\n}\nfunction processCoreBundleFormat(base, fileHeader, languages, json, emitter) {\n    const languageDirectory = path_1.default.join(REPO_ROOT_PATH, '..', 'vscode-loc', 'i18n');\n    if (!fs_1.default.existsSync(languageDirectory)) {\n        log(`No VS Code localization repository found. Looking at ${languageDirectory}`);\n        log(`To bundle translations please check out the vscode-loc repository as a sibling of the vscode repository.`);\n    }\n    const sortedLanguages = sortLanguages(languages);\n    sortedLanguages.forEach((language) => {\n        if (process.env['VSCODE_BUILD_VERBOSE']) {\n            log(`Generating nls bundles for: ${language.id}`);\n        }\n        const languageFolderName = language.translationId || language.id;\n        const i18nFile = path_1.default.join(languageDirectory, `vscode-language-pack-${languageFolderName}`, 'translations', 'main.i18n.json');\n        let allMessages;\n        if (fs_1.default.existsSync(i18nFile)) {\n            const content = stripComments(fs_1.default.readFileSync(i18nFile, 'utf8'));\n            allMessages = JSON.parse(content);\n        }\n        let nlsIndex = 0;\n        const nlsResult = [];\n        for (const [moduleId, nlsKeys] of json) {\n            const moduleTranslations = allMessages?.contents[moduleId];\n            for (const nlsKey of nlsKeys) {\n                nlsResult.push(moduleTranslations?.[nlsKey]); // pushing `undefined` is fine, as we keep english strings as fallback for monaco editor in the build\n                nlsIndex++;\n            }\n        }\n        emitter.queue(new vinyl_1.default({\n            contents: Buffer.from(`${fileHeader}\nglobalThis._VSCODE_NLS_MESSAGES=${JSON.stringify(nlsResult)};\nglobalThis._VSCODE_NLS_LANGUAGE=${JSON.stringify(language.id)};`),\n            base,\n            path: `${base}/nls.messages.${language.id}.js`\n        }));\n    });\n}\nfunction processNlsFiles(opts) {\n    return (0, event_stream_1.through)(function (file) {\n        const fileName = path_1.default.basename(file.path);\n        if (fileName === 'nls.keys.json') {\n            try {\n                const contents = file.contents.toString('utf8');\n                const json = JSON.parse(contents);\n                if (NLSKeysFormat.is(json)) {\n                    processCoreBundleFormat(file.base, opts.fileHeader, opts.languages, json, this);\n                }\n            }\n            catch (error) {\n                this.emit('error', `Failed to read component file: ${error}`);\n            }\n        }\n        this.queue(file);\n    });\n}\nconst editorProject = 'vscode-editor', workbenchProject = 'vscode-workbench', extensionsProject = 'vscode-extensions', setupProject = 'vscode-setup', serverProject = 'vscode-server';\nfunction getResource(sourceFile) {\n    let resource;\n    if (/^vs\\/platform/.test(sourceFile)) {\n        return { name: 'vs/platform', project: editorProject };\n    }\n    else if (/^vs\\/editor\\/contrib/.test(sourceFile)) {\n        return { name: 'vs/editor/contrib', project: editorProject };\n    }\n    else if (/^vs\\/editor/.test(sourceFile)) {\n        return { name: 'vs/editor', project: editorProject };\n    }\n    else if (/^vs\\/base/.test(sourceFile)) {\n        return { name: 'vs/base', project: editorProject };\n    }\n    else if (/^vs\\/code/.test(sourceFile)) {\n        return { name: 'vs/code', project: workbenchProject };\n    }\n    else if (/^vs\\/server/.test(sourceFile)) {\n        return { name: 'vs/server', project: serverProject };\n    }\n    else if (/^vs\\/workbench\\/contrib/.test(sourceFile)) {\n        resource = sourceFile.split('/', 4).join('/');\n        return { name: resource, project: workbenchProject };\n    }\n    else if (/^vs\\/workbench\\/services/.test(sourceFile)) {\n        resource = sourceFile.split('/', 4).join('/');\n        return { name: resource, project: workbenchProject };\n    }\n    else if (/^vs\\/workbench/.test(sourceFile)) {\n        return { name: 'vs/workbench', project: workbenchProject };\n    }\n    throw new Error(`Could not identify the XLF bundle for ${sourceFile}`);\n}\nfunction createXlfFilesForCoreBundle() {\n    return (0, event_stream_1.through)(function (file) {\n        const basename = path_1.default.basename(file.path);\n        if (basename === 'nls.metadata.json') {\n            if (file.isBuffer()) {\n                const xlfs = Object.create(null);\n                const json = JSON.parse(file.contents.toString('utf8'));\n                for (const coreModule in json.keys) {\n                    const projectResource = getResource(coreModule);\n                    const resource = projectResource.name;\n                    const project = projectResource.project;\n                    const keys = json.keys[coreModule];\n                    const messages = json.messages[coreModule];\n                    if (keys.length !== messages.length) {\n                        this.emit('error', `There is a mismatch between keys and messages in ${file.relative} for module ${coreModule}`);\n                        return;\n                    }\n                    else {\n                        let xlf = xlfs[resource];\n                        if (!xlf) {\n                            xlf = new XLF(project);\n                            xlfs[resource] = xlf;\n                        }\n                        xlf.addFile(`src/${coreModule}`, keys, messages);\n                    }\n                }\n                for (const resource in xlfs) {\n                    const xlf = xlfs[resource];\n                    const filePath = `${xlf.project}/${resource.replace(/\\//g, '_')}.xlf`;\n                    const xlfFile = new vinyl_1.default({\n                        path: filePath,\n                        contents: Buffer.from(xlf.toString(), 'utf8')\n                    });\n                    this.queue(xlfFile);\n                }\n            }\n            else {\n                this.emit('error', new Error(`File ${file.relative} is not using a buffer content`));\n                return;\n            }\n        }\n        else {\n            this.emit('error', new Error(`File ${file.relative} is not a core meta data file.`));\n            return;\n        }\n    });\n}\nfunction createL10nBundleForExtension(extensionFolderName, prefixWithBuildFolder) {\n    const prefix = prefixWithBuildFolder ? '.build/' : '';\n    return gulp_1.default\n        .src([\n        // For source code of extensions\n        `${prefix}extensions/${extensionFolderName}/{src,client,server}/**/*.{ts,tsx}`,\n        // // For any dependencies pulled in (think vscode-css-languageservice or @vscode/emmet-helper)\n        `${prefix}extensions/${extensionFolderName}/**/node_modules/{@vscode,vscode-*}/**/*.{js,jsx}`,\n        // // For any dependencies pulled in that bundle @vscode/l10n. They needed to export the bundle\n        `${prefix}extensions/${extensionFolderName}/**/bundle.l10n.json`,\n    ])\n        .pipe((0, event_stream_1.map)(function (data, callback) {\n        const file = data;\n        if (!file.isBuffer()) {\n            // Not a buffer so we drop it\n            callback();\n            return;\n        }\n        const extension = path_1.default.extname(file.relative);\n        if (extension !== '.json') {\n            const contents = file.contents.toString('utf8');\n            (0, l10n_dev_1.getL10nJson)([{ contents, extension }])\n                .then((json) => {\n                callback(undefined, new vinyl_1.default({\n                    path: `extensions/${extensionFolderName}/bundle.l10n.json`,\n                    contents: Buffer.from(JSON.stringify(json), 'utf8')\n                }));\n            })\n                .catch((err) => {\n                callback(new Error(`File ${file.relative} threw an error when parsing: ${err}`));\n            });\n            // signal pause?\n            return false;\n        }\n        // for bundle.l10n.jsons\n        let bundleJson;\n        try {\n            bundleJson = JSON.parse(file.contents.toString('utf8'));\n        }\n        catch (err) {\n            callback(new Error(`File ${file.relative} threw an error when parsing: ${err}`));\n            return;\n        }\n        // some validation of the bundle.l10n.json format\n        for (const key in bundleJson) {\n            if (typeof bundleJson[key] !== 'string' &&\n                (typeof bundleJson[key].message !== 'string' || !Array.isArray(bundleJson[key].comment))) {\n                callback(new Error(`Invalid bundle.l10n.json file. The value for key ${key} is not in the expected format.`));\n                return;\n            }\n        }\n        callback(undefined, file);\n    }))\n        .pipe((0, gulp_merge_json_1.default)({\n        fileName: `extensions/${extensionFolderName}/bundle.l10n.json`,\n        jsonSpace: '',\n        concatArrays: true\n    }));\n}\nexports.EXTERNAL_EXTENSIONS = [\n    'ms-vscode.js-debug',\n    'ms-vscode.js-debug-companion',\n    'ms-vscode.vscode-js-profile-table',\n];\nfunction createXlfFilesForExtensions() {\n    let counter = 0;\n    let folderStreamEnded = false;\n    let folderStreamEndEmitted = false;\n    return (0, event_stream_1.through)(function (extensionFolder) {\n        const folderStream = this;\n        const stat = fs_1.default.statSync(extensionFolder.path);\n        if (!stat.isDirectory()) {\n            return;\n        }\n        const extensionFolderName = path_1.default.basename(extensionFolder.path);\n        if (extensionFolderName === 'node_modules') {\n            return;\n        }\n        // Get extension id and use that as the id\n        const manifest = fs_1.default.readFileSync(path_1.default.join(extensionFolder.path, 'package.json'), 'utf-8');\n        const manifestJson = JSON.parse(manifest);\n        const extensionId = manifestJson.publisher + '.' + manifestJson.name;\n        counter++;\n        let _l10nMap;\n        function getL10nMap() {\n            if (!_l10nMap) {\n                _l10nMap = new Map();\n            }\n            return _l10nMap;\n        }\n        (0, event_stream_1.merge)(gulp_1.default.src([`.build/extensions/${extensionFolderName}/package.nls.json`, `.build/extensions/${extensionFolderName}/**/nls.metadata.json`], { allowEmpty: true }), createL10nBundleForExtension(extensionFolderName, exports.EXTERNAL_EXTENSIONS.includes(extensionId))).pipe((0, event_stream_1.through)(function (file) {\n            if (file.isBuffer()) {\n                const buffer = file.contents;\n                const basename = path_1.default.basename(file.path);\n                if (basename === 'package.nls.json') {\n                    const json = JSON.parse(buffer.toString('utf8'));\n                    getL10nMap().set(`extensions/${extensionId}/package`, json);\n                }\n                else if (basename === 'nls.metadata.json') {\n                    const json = JSON.parse(buffer.toString('utf8'));\n                    const relPath = path_1.default.relative(`.build/extensions/${extensionFolderName}`, path_1.default.dirname(file.path));\n                    for (const file in json) {\n                        const fileContent = json[file];\n                        const info = Object.create(null);\n                        for (let i = 0; i < fileContent.messages.length; i++) {\n                            const message = fileContent.messages[i];\n                            const { key, comment } = LocalizeInfo.is(fileContent.keys[i])\n                                ? fileContent.keys[i]\n                                : { key: fileContent.keys[i], comment: undefined };\n                            info[key] = comment ? { message, comment } : message;\n                        }\n                        getL10nMap().set(`extensions/${extensionId}/${relPath}/${file}`, info);\n                    }\n                }\n                else if (basename === 'bundle.l10n.json') {\n                    const json = JSON.parse(buffer.toString('utf8'));\n                    getL10nMap().set(`extensions/${extensionId}/bundle`, json);\n                }\n                else {\n                    this.emit('error', new Error(`${file.path} is not a valid extension nls file`));\n                    return;\n                }\n            }\n        }, function () {\n            if (_l10nMap?.size > 0) {\n                const xlfFile = new vinyl_1.default({\n                    path: path_1.default.join(extensionsProject, extensionId + '.xlf'),\n                    contents: Buffer.from((0, l10n_dev_1.getL10nXlf)(_l10nMap), 'utf8')\n                });\n                folderStream.queue(xlfFile);\n            }\n            this.queue(null);\n            counter--;\n            if (counter === 0 && folderStreamEnded && !folderStreamEndEmitted) {\n                folderStreamEndEmitted = true;\n                folderStream.queue(null);\n            }\n        }));\n    }, function () {\n        folderStreamEnded = true;\n        if (counter === 0) {\n            folderStreamEndEmitted = true;\n            this.queue(null);\n        }\n    });\n}\nfunction createXlfFilesForIsl() {\n    return (0, event_stream_1.through)(function (file) {\n        let projectName, resourceFile;\n        if (path_1.default.basename(file.path) === 'messages.en.isl') {\n            projectName = setupProject;\n            resourceFile = 'messages.xlf';\n        }\n        else {\n            throw new Error(`Unknown input file ${file.path}`);\n        }\n        const xlf = new XLF(projectName), keys = [], messages = [];\n        const model = new TextModel(file.contents.toString());\n        let inMessageSection = false;\n        model.lines.forEach(line => {\n            if (line.length === 0) {\n                return;\n            }\n            const firstChar = line.charAt(0);\n            switch (firstChar) {\n                case ';':\n                    // Comment line;\n                    return;\n                case '[':\n                    inMessageSection = '[Messages]' === line || '[CustomMessages]' === line;\n                    return;\n            }\n            if (!inMessageSection) {\n                return;\n            }\n            const sections = line.split('=');\n            if (sections.length !== 2) {\n                throw new Error(`Badly formatted message found: ${line}`);\n            }\n            else {\n                const key = sections[0];\n                const value = sections[1];\n                if (key.length > 0 && value.length > 0) {\n                    keys.push(key);\n                    messages.push(value);\n                }\n            }\n        });\n        const originalPath = file.path.substring(file.cwd.length + 1, file.path.split('.')[0].length).replace(/\\\\/g, '/');\n        xlf.addFile(originalPath, keys, messages);\n        // Emit only upon all ISL files combined into single XLF instance\n        const newFilePath = path_1.default.join(projectName, resourceFile);\n        const xlfFile = new vinyl_1.default({ path: newFilePath, contents: Buffer.from(xlf.toString(), 'utf-8') });\n        this.queue(xlfFile);\n    });\n}\nfunction createI18nFile(name, messages) {\n    const result = Object.create(null);\n    result[''] = [\n        '--------------------------------------------------------------------------------------------',\n        'Copyright (c) Microsoft Corporation. All rights reserved.',\n        'Licensed under the MIT License. See License.txt in the project root for license information.',\n        '--------------------------------------------------------------------------------------------',\n        'Do not edit this file. It is machine generated.'\n    ];\n    for (const key of Object.keys(messages)) {\n        result[key] = messages[key];\n    }\n    let content = JSON.stringify(result, null, '\\t');\n    if (process.platform === 'win32') {\n        content = content.replace(/\\n/g, '\\r\\n');\n    }\n    return new vinyl_1.default({\n        path: path_1.default.join(name + '.i18n.json'),\n        contents: Buffer.from(content, 'utf8')\n    });\n}\nconst i18nPackVersion = '1.0.0';\nfunction getRecordFromL10nJsonFormat(l10nJsonFormat) {\n    const record = {};\n    for (const key of Object.keys(l10nJsonFormat).sort()) {\n        const value = l10nJsonFormat[key];\n        record[key] = typeof value === 'string' ? value : value.message;\n    }\n    return record;\n}\nfunction prepareI18nPackFiles(resultingTranslationPaths) {\n    const parsePromises = [];\n    const mainPack = { version: i18nPackVersion, contents: {} };\n    const extensionsPacks = {};\n    const errors = [];\n    return (0, event_stream_1.through)(function (xlf) {\n        let project = path_1.default.basename(path_1.default.dirname(path_1.default.dirname(xlf.relative)));\n        // strip `-new` since vscode-extensions-loc uses the `-new` suffix to indicate that it's from the new loc pipeline\n        const resource = path_1.default.basename(path_1.default.basename(xlf.relative, '.xlf'), '-new');\n        if (exports.EXTERNAL_EXTENSIONS.find(e => e === resource)) {\n            project = extensionsProject;\n        }\n        const contents = xlf.contents.toString();\n        log(`Found ${project}: ${resource}`);\n        const parsePromise = (0, l10n_dev_1.getL10nFilesFromXlf)(contents);\n        parsePromises.push(parsePromise);\n        parsePromise.then(resolvedFiles => {\n            resolvedFiles.forEach(file => {\n                const path = file.name;\n                const firstSlash = path.indexOf('/');\n                if (project === extensionsProject) {\n                    // resource will be the extension id\n                    let extPack = extensionsPacks[resource];\n                    if (!extPack) {\n                        extPack = extensionsPacks[resource] = { version: i18nPackVersion, contents: {} };\n                    }\n                    // remove 'extensions/extensionId/' segment\n                    const secondSlash = path.indexOf('/', firstSlash + 1);\n                    extPack.contents[path.substring(secondSlash + 1)] = getRecordFromL10nJsonFormat(file.messages);\n                }\n                else {\n                    mainPack.contents[path.substring(firstSlash + 1)] = getRecordFromL10nJsonFormat(file.messages);\n                }\n            });\n        }).catch(reason => {\n            errors.push(reason);\n        });\n    }, function () {\n        Promise.all(parsePromises)\n            .then(() => {\n            if (errors.length > 0) {\n                throw errors;\n            }\n            const translatedMainFile = createI18nFile('./main', mainPack);\n            resultingTranslationPaths.push({ id: 'vscode', resourceName: 'main.i18n.json' });\n            this.queue(translatedMainFile);\n            for (const extensionId in extensionsPacks) {\n                const translatedExtFile = createI18nFile(`extensions/${extensionId}`, extensionsPacks[extensionId]);\n                this.queue(translatedExtFile);\n                resultingTranslationPaths.push({ id: extensionId, resourceName: `extensions/${extensionId}.i18n.json` });\n            }\n            this.queue(null);\n        })\n            .catch((reason) => {\n            this.emit('error', reason);\n        });\n    });\n}\nfunction prepareIslFiles(language, innoSetupConfig) {\n    const parsePromises = [];\n    return (0, event_stream_1.through)(function (xlf) {\n        const stream = this;\n        const parsePromise = XLF.parse(xlf.contents.toString());\n        parsePromises.push(parsePromise);\n        parsePromise.then(resolvedFiles => {\n            resolvedFiles.forEach(file => {\n                const translatedFile = createIslFile(file.name, file.messages, language, innoSetupConfig);\n                stream.queue(translatedFile);\n            });\n        }).catch(reason => {\n            this.emit('error', reason);\n        });\n    }, function () {\n        Promise.all(parsePromises)\n            .then(() => { this.queue(null); })\n            .catch(reason => {\n            this.emit('error', reason);\n        });\n    });\n}\nfunction createIslFile(name, messages, language, innoSetup) {\n    const content = [];\n    let originalContent;\n    if (path_1.default.basename(name) === 'Default') {\n        originalContent = new TextModel(fs_1.default.readFileSync(name + '.isl', 'utf8'));\n    }\n    else {\n        originalContent = new TextModel(fs_1.default.readFileSync(name + '.en.isl', 'utf8'));\n    }\n    originalContent.lines.forEach(line => {\n        if (line.length > 0) {\n            const firstChar = line.charAt(0);\n            if (firstChar === '[' || firstChar === ';') {\n                content.push(line);\n            }\n            else {\n                const sections = line.split('=');\n                const key = sections[0];\n                let translated = line;\n                if (key) {\n                    const translatedMessage = messages[key];\n                    if (translatedMessage) {\n                        translated = `${key}=${translatedMessage}`;\n                    }\n                }\n                content.push(translated);\n            }\n        }\n    });\n    const basename = path_1.default.basename(name);\n    const filePath = `${basename}.${language.id}.isl`;\n    const encoded = iconv_lite_umd_1.default.encode(Buffer.from(content.join('\\r\\n'), 'utf8').toString(), innoSetup.codePage);\n    return new vinyl_1.default({\n        path: filePath,\n        contents: Buffer.from(encoded),\n    });\n}\nfunction encodeEntities(value) {\n    const result = [];\n    for (let i = 0; i < value.length; i++) {\n        const ch = value[i];\n        switch (ch) {\n            case '<':\n                result.push('&lt;');\n                break;\n            case '>':\n                result.push('&gt;');\n                break;\n            case '&':\n                result.push('&amp;');\n                break;\n            default:\n                result.push(ch);\n        }\n    }\n    return result.join('');\n}\nfunction decodeEntities(value) {\n    return value.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');\n}\n//# sourceMappingURL=i18n.js.map"
  },
  {
    "path": "build/lib/i18n.resources.json",
    "content": "{\n\t\"editor\": [\n\t\t{\n\t\t\t\"name\": \"vs/platform\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor/contrib\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/base\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t}\n\t],\n\t\"workbench\": [\n\t\t{\n\t\t\t\"name\": \"vs/code\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/api/common\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/cli\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/callHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/typeHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeActions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/commands\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/markdown\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/comments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/debug\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/multiDiffEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/emmet\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/assignment\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/auxiliaryWindow\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalTerminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/folding\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/html\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/issue\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/inlayHints\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/interactive\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageStatus\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/limitIndicator\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/keybindings\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/markers\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/mergeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localization\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/logs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/output\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/performance\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/preferences\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/notebook\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/inlineChat\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/chat\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/quickaccess\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/relauncher\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/sash\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/scm\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/searchEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/snippets\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/format\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tags\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/speech\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/surveys\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tasks\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/testing\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/terminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/terminalContrib\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/trust\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/update\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/url\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/watermark\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webview\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webviewPanel\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspace\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/customEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalUriOpener\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeGettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomePage\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeViews\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeWalkthrough\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeDialog\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/outline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageDetection\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/accessibilitySignals\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/deprecatedExtensionMigrator\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bracketPairColorizer2Telemetry\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/scrollLocking\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/remoteTunnel\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/actions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authToken\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/backup\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/clipboard\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/commands\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configuration\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configurationResolver\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionManagement\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/filesConfiguration\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/history\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/hover\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/log\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/integrity\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/keybinding\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/lifecycle\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/language\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/progress\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/suggest\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textfile\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textMate\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workingCopy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/decorations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/label\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/preferences\",\n\t\t\t\"project\": \"vscode-preferences\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/notification\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/timeline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localHistory\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authentication\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionRecommendations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/gettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/host\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/localization\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/share\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/accessibility\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/issue\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/secrets\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/accountEntitlements\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/authentication\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/replNotebook\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/list\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "build/lib/i18n.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport path from 'path';\nimport fs from 'fs';\n\nimport { map, merge, through, ThroughStream } from 'event-stream';\nimport jsonMerge from 'gulp-merge-json';\nimport File from 'vinyl';\nimport xml2js from 'xml2js';\nimport gulp from 'gulp';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\nimport iconv from '@vscode/iconv-lite-umd';\nimport { l10nJsonFormat, getL10nXlf, l10nJsonDetails, getL10nFilesFromXlf, getL10nJson } from '@vscode/l10n-dev';\n\nconst REPO_ROOT_PATH = path.join(__dirname, '../..');\n\nfunction log(message: any, ...rest: any[]): void {\n\tfancyLog(ansiColors.green('[i18n]'), message, ...rest);\n}\n\nexport interface Language {\n\tid: string; // language id, e.g. zh-tw, de\n\ttranslationId?: string; // language id used in translation tools, e.g. zh-hant, de (optional, if not set, the id is used)\n\tfolderName?: string; // language specific folder name, e.g. cht, deu  (optional, if not set, the id is used)\n}\n\nexport interface InnoSetup {\n\tcodePage: string; //code page for encoding (http://www.jrsoftware.org/ishelp/index.php?topic=langoptionssection)\n}\n\nexport const defaultLanguages: Language[] = [\n\t{ id: 'zh-tw', folderName: 'cht', translationId: 'zh-hant' },\n\t{ id: 'zh-cn', folderName: 'chs', translationId: 'zh-hans' },\n\t{ id: 'ja', folderName: 'jpn' },\n\t{ id: 'ko', folderName: 'kor' },\n\t{ id: 'de', folderName: 'deu' },\n\t{ id: 'fr', folderName: 'fra' },\n\t{ id: 'es', folderName: 'esn' },\n\t{ id: 'ru', folderName: 'rus' },\n\t{ id: 'it', folderName: 'ita' }\n];\n\n// languages requested by the community to non-stable builds\nexport const extraLanguages: Language[] = [\n\t{ id: 'pt-br', folderName: 'ptb' },\n\t{ id: 'hu', folderName: 'hun' },\n\t{ id: 'tr', folderName: 'trk' }\n];\n\ninterface Item {\n\tid: string;\n\tmessage: string;\n\tcomment?: string;\n}\n\nexport interface Resource {\n\tname: string;\n\tproject: string;\n}\n\ninterface LocalizeInfo {\n\tkey: string;\n\tcomment: string[];\n}\n\nmodule LocalizeInfo {\n\texport function is(value: any): value is LocalizeInfo {\n\t\tconst candidate = value as LocalizeInfo;\n\t\treturn candidate && typeof candidate.key === 'string' && (candidate.comment === undefined || (Array.isArray(candidate.comment) && candidate.comment.every(element => typeof element === 'string')));\n\t}\n}\n\ninterface BundledFormat {\n\tkeys: Record<string, (string | LocalizeInfo)[]>;\n\tmessages: Record<string, string[]>;\n\tbundles: Record<string, string[]>;\n}\n\nmodule BundledFormat {\n\texport function is(value: any): value is BundledFormat {\n\t\tif (value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst candidate = value as BundledFormat;\n\t\tconst length = Object.keys(value).length;\n\n\t\treturn length === 3 && !!candidate.keys && !!candidate.messages && !!candidate.bundles;\n\t}\n}\n\ntype NLSKeysFormat = [string /* module ID */, string[] /* keys */];\n\nmodule NLSKeysFormat {\n\texport function is(value: any): value is NLSKeysFormat {\n\t\tif (value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst candidate = value as NLSKeysFormat;\n\t\treturn Array.isArray(candidate) && Array.isArray(candidate[1]);\n\t}\n}\n\ninterface BundledExtensionFormat {\n\t[key: string]: {\n\t\tmessages: string[];\n\t\tkeys: (string | LocalizeInfo)[];\n\t};\n}\n\ninterface I18nFormat {\n\tversion: string;\n\tcontents: {\n\t\t[module: string]: {\n\t\t\t[messageKey: string]: string;\n\t\t};\n\t};\n}\n\nexport class Line {\n\tprivate buffer: string[] = [];\n\n\tconstructor(indent: number = 0) {\n\t\tif (indent > 0) {\n\t\t\tthis.buffer.push(new Array(indent + 1).join(' '));\n\t\t}\n\t}\n\n\tpublic append(value: string): Line {\n\t\tthis.buffer.push(value);\n\t\treturn this;\n\t}\n\n\tpublic toString(): string {\n\t\treturn this.buffer.join('');\n\t}\n}\n\nclass TextModel {\n\tprivate _lines: string[];\n\n\tconstructor(contents: string) {\n\t\tthis._lines = contents.split(/\\r\\n|\\r|\\n/);\n\t}\n\n\tpublic get lines(): string[] {\n\t\treturn this._lines;\n\t}\n}\n\nexport class XLF {\n\tprivate buffer: string[];\n\tprivate files: Record<string, Item[]>;\n\tpublic numberOfMessages: number;\n\n\tconstructor(public project: string) {\n\t\tthis.buffer = [];\n\t\tthis.files = Object.create(null);\n\t\tthis.numberOfMessages = 0;\n\t}\n\n\tpublic toString(): string {\n\t\tthis.appendHeader();\n\n\t\tconst files = Object.keys(this.files).sort();\n\t\tfor (const file of files) {\n\t\t\tthis.appendNewLine(`<file original=\"${file}\" source-language=\"en\" datatype=\"plaintext\"><body>`, 2);\n\t\t\tconst items = this.files[file].sort((a: Item, b: Item) => {\n\t\t\t\treturn a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n\t\t\t});\n\t\t\tfor (const item of items) {\n\t\t\t\tthis.addStringItem(file, item);\n\t\t\t}\n\t\t\tthis.appendNewLine('</body></file>');\n\t\t}\n\t\tthis.appendFooter();\n\t\treturn this.buffer.join('\\r\\n');\n\t}\n\n\tpublic addFile(original: string, keys: (string | LocalizeInfo)[], messages: string[]) {\n\t\tif (keys.length === 0) {\n\t\t\tconsole.log('No keys in ' + original);\n\t\t\treturn;\n\t\t}\n\t\tif (keys.length !== messages.length) {\n\t\t\tthrow new Error(`Unmatching keys(${keys.length}) and messages(${messages.length}).`);\n\t\t}\n\t\tthis.numberOfMessages += keys.length;\n\t\tthis.files[original] = [];\n\t\tconst existingKeys = new Set<string>();\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\tlet realKey: string | undefined;\n\t\t\tlet comment: string | undefined;\n\t\t\tif (typeof key === 'string') {\n\t\t\t\trealKey = key;\n\t\t\t\tcomment = undefined;\n\t\t\t} else if (LocalizeInfo.is(key)) {\n\t\t\t\trealKey = key.key;\n\t\t\t\tif (key.comment && key.comment.length > 0) {\n\t\t\t\t\tcomment = key.comment.map(comment => encodeEntities(comment)).join('\\r\\n');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!realKey || existingKeys.has(realKey)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\texistingKeys.add(realKey);\n\t\t\tconst message: string = encodeEntities(messages[i]);\n\t\t\tthis.files[original].push({ id: realKey, message: message, comment: comment });\n\t\t}\n\t}\n\n\tprivate addStringItem(file: string, item: Item): void {\n\t\tif (!item.id || item.message === undefined || item.message === null) {\n\t\t\tthrow new Error(`No item ID or value specified: ${JSON.stringify(item)}. File: ${file}`);\n\t\t}\n\t\tif (item.message.length === 0) {\n\t\t\tlog(`Item with id ${item.id} in file ${file} has an empty message.`);\n\t\t}\n\n\t\tthis.appendNewLine(`<trans-unit id=\"${item.id}\">`, 4);\n\t\tthis.appendNewLine(`<source xml:lang=\"en\">${item.message}</source>`, 6);\n\n\t\tif (item.comment) {\n\t\t\tthis.appendNewLine(`<note>${item.comment}</note>`, 6);\n\t\t}\n\n\t\tthis.appendNewLine('</trans-unit>', 4);\n\t}\n\n\tprivate appendHeader(): void {\n\t\tthis.appendNewLine('<?xml version=\"1.0\" encoding=\"utf-8\"?>', 0);\n\t\tthis.appendNewLine('<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">', 0);\n\t}\n\n\tprivate appendFooter(): void {\n\t\tthis.appendNewLine('</xliff>', 0);\n\t}\n\n\tprivate appendNewLine(content: string, indent?: number): void {\n\t\tconst line = new Line(indent);\n\t\tline.append(content);\n\t\tthis.buffer.push(line.toString());\n\t}\n\n\tstatic parse = function (xlfString: string): Promise<l10nJsonDetails[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst parser = new xml2js.Parser();\n\n\t\t\tconst files: { messages: Record<string, string>; name: string; language: string }[] = [];\n\n\t\t\tparser.parseString(xlfString, function (err: any, result: any) {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(new Error(`XLF parsing error: Failed to parse XLIFF string. ${err}`));\n\t\t\t\t}\n\n\t\t\t\tconst fileNodes: any[] = result['xliff']['file'];\n\t\t\t\tif (!fileNodes) {\n\t\t\t\t\treject(new Error(`XLF parsing error: XLIFF file does not contain \"xliff\" or \"file\" node(s) required for parsing.`));\n\t\t\t\t}\n\n\t\t\t\tfileNodes.forEach((file) => {\n\t\t\t\t\tconst name = file.$.original;\n\t\t\t\t\tif (!name) {\n\t\t\t\t\t\treject(new Error(`XLF parsing error: XLIFF file node does not contain original attribute to determine the original location of the resource file.`));\n\t\t\t\t\t}\n\t\t\t\t\tconst language = file.$['target-language'];\n\t\t\t\t\tif (!language) {\n\t\t\t\t\t\treject(new Error(`XLF parsing error: XLIFF file node does not contain target-language attribute to determine translated language.`));\n\t\t\t\t\t}\n\t\t\t\t\tconst messages: Record<string, string> = {};\n\n\t\t\t\t\tconst transUnits = file.body[0]['trans-unit'];\n\t\t\t\t\tif (transUnits) {\n\t\t\t\t\t\ttransUnits.forEach((unit: any) => {\n\t\t\t\t\t\t\tconst key = unit.$.id;\n\t\t\t\t\t\t\tif (!unit.target) {\n\t\t\t\t\t\t\t\treturn; // No translation available\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet val = unit.target[0];\n\t\t\t\t\t\t\tif (typeof val !== 'string') {\n\t\t\t\t\t\t\t\t// We allow empty source values so support them for translations as well.\n\t\t\t\t\t\t\t\tval = val._ ? val._ : '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!key) {\n\t\t\t\t\t\t\t\treject(new Error(`XLF parsing error: trans-unit ${JSON.stringify(unit, undefined, 0)} defined in file ${name} is missing the ID attribute.`));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmessages[key] = decodeEntities(val);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfiles.push({ messages, name, language: language.toLowerCase() });\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tresolve(files);\n\t\t\t});\n\t\t});\n\t};\n}\n\nfunction sortLanguages(languages: Language[]): Language[] {\n\treturn languages.sort((a: Language, b: Language): number => {\n\t\treturn a.id < b.id ? -1 : (a.id > b.id ? 1 : 0);\n\t});\n}\n\nfunction stripComments(content: string): string {\n\t// Copied from stripComments.js\n\t//\n\t// First group matches a double quoted string\n\t// Second group matches a single quoted string\n\t// Third group matches a multi line comment\n\t// Forth group matches a single line comment\n\t// Fifth group matches a trailing comma\n\tconst regexp = /(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")|('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|(\\/\\*[^\\/\\*]*(?:(?:\\*|\\/)[^\\/\\*]*)*?\\*\\/)|(\\/{2,}.*?(?:(?:\\r?\\n)|$))|(,\\s*[}\\]])/g;\n\tconst result = content.replace(regexp, (match, _m1: string, _m2: string, m3: string, m4: string, m5: string) => {\n\t\t// Only one of m1, m2, m3, m4, m5 matches\n\t\tif (m3) {\n\t\t\t// A block comment. Replace with nothing\n\t\t\treturn '';\n\t\t} else if (m4) {\n\t\t\t// Since m4 is a single line comment is is at least of length 2 (e.g. //)\n\t\t\t// If it ends in \\r?\\n then keep it.\n\t\t\tconst length = m4.length;\n\t\t\tif (m4[length - 1] === '\\n') {\n\t\t\t\treturn m4[length - 2] === '\\r' ? '\\r\\n' : '\\n';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t} else if (m5) {\n\t\t\t// Remove the trailing comma\n\t\t\treturn match.substring(1);\n\t\t} else {\n\t\t\t// We match a string\n\t\t\treturn match;\n\t\t}\n\t});\n\treturn result;\n}\n\nfunction processCoreBundleFormat(base: string, fileHeader: string, languages: Language[], json: NLSKeysFormat, emitter: ThroughStream) {\n\tconst languageDirectory = path.join(REPO_ROOT_PATH, '..', 'vscode-loc', 'i18n');\n\tif (!fs.existsSync(languageDirectory)) {\n\t\tlog(`No VS Code localization repository found. Looking at ${languageDirectory}`);\n\t\tlog(`To bundle translations please check out the vscode-loc repository as a sibling of the vscode repository.`);\n\t}\n\tconst sortedLanguages = sortLanguages(languages);\n\tsortedLanguages.forEach((language) => {\n\t\tif (process.env['VSCODE_BUILD_VERBOSE']) {\n\t\t\tlog(`Generating nls bundles for: ${language.id}`);\n\t\t}\n\n\t\tconst languageFolderName = language.translationId || language.id;\n\t\tconst i18nFile = path.join(languageDirectory, `vscode-language-pack-${languageFolderName}`, 'translations', 'main.i18n.json');\n\t\tlet allMessages: I18nFormat | undefined;\n\t\tif (fs.existsSync(i18nFile)) {\n\t\t\tconst content = stripComments(fs.readFileSync(i18nFile, 'utf8'));\n\t\t\tallMessages = JSON.parse(content);\n\t\t}\n\n\t\tlet nlsIndex = 0;\n\t\tconst nlsResult: Array<string | undefined> = [];\n\t\tfor (const [moduleId, nlsKeys] of json) {\n\t\t\tconst moduleTranslations = allMessages?.contents[moduleId];\n\t\t\tfor (const nlsKey of nlsKeys) {\n\t\t\t\tnlsResult.push(moduleTranslations?.[nlsKey]); // pushing `undefined` is fine, as we keep english strings as fallback for monaco editor in the build\n\t\t\t\tnlsIndex++;\n\t\t\t}\n\t\t}\n\n\t\temitter.queue(new File({\n\t\t\tcontents: Buffer.from(`${fileHeader}\nglobalThis._VSCODE_NLS_MESSAGES=${JSON.stringify(nlsResult)};\nglobalThis._VSCODE_NLS_LANGUAGE=${JSON.stringify(language.id)};`),\n\t\t\tbase,\n\t\t\tpath: `${base}/nls.messages.${language.id}.js`\n\t\t}));\n\t});\n}\n\nexport function processNlsFiles(opts: { out: string; fileHeader: string; languages: Language[] }): ThroughStream {\n\treturn through(function (this: ThroughStream, file: File) {\n\t\tconst fileName = path.basename(file.path);\n\t\tif (fileName === 'nls.keys.json') {\n\t\t\ttry {\n\t\t\t\tconst contents = file.contents.toString('utf8');\n\t\t\t\tconst json = JSON.parse(contents);\n\t\t\t\tif (NLSKeysFormat.is(json)) {\n\t\t\t\t\tprocessCoreBundleFormat(file.base, opts.fileHeader, opts.languages, json, this);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.emit('error', `Failed to read component file: ${error}`);\n\t\t\t}\n\t\t}\n\t\tthis.queue(file);\n\t});\n}\n\nconst editorProject: string = 'vscode-editor',\n\tworkbenchProject: string = 'vscode-workbench',\n\textensionsProject: string = 'vscode-extensions',\n\tsetupProject: string = 'vscode-setup',\n\tserverProject: string = 'vscode-server';\n\nexport function getResource(sourceFile: string): Resource {\n\tlet resource: string;\n\n\tif (/^vs\\/platform/.test(sourceFile)) {\n\t\treturn { name: 'vs/platform', project: editorProject };\n\t} else if (/^vs\\/editor\\/contrib/.test(sourceFile)) {\n\t\treturn { name: 'vs/editor/contrib', project: editorProject };\n\t} else if (/^vs\\/editor/.test(sourceFile)) {\n\t\treturn { name: 'vs/editor', project: editorProject };\n\t} else if (/^vs\\/base/.test(sourceFile)) {\n\t\treturn { name: 'vs/base', project: editorProject };\n\t} else if (/^vs\\/code/.test(sourceFile)) {\n\t\treturn { name: 'vs/code', project: workbenchProject };\n\t} else if (/^vs\\/server/.test(sourceFile)) {\n\t\treturn { name: 'vs/server', project: serverProject };\n\t} else if (/^vs\\/workbench\\/contrib/.test(sourceFile)) {\n\t\tresource = sourceFile.split('/', 4).join('/');\n\t\treturn { name: resource, project: workbenchProject };\n\t} else if (/^vs\\/workbench\\/services/.test(sourceFile)) {\n\t\tresource = sourceFile.split('/', 4).join('/');\n\t\treturn { name: resource, project: workbenchProject };\n\t} else if (/^vs\\/workbench/.test(sourceFile)) {\n\t\treturn { name: 'vs/workbench', project: workbenchProject };\n\t}\n\n\tthrow new Error(`Could not identify the XLF bundle for ${sourceFile}`);\n}\n\n\nexport function createXlfFilesForCoreBundle(): ThroughStream {\n\treturn through(function (this: ThroughStream, file: File) {\n\t\tconst basename = path.basename(file.path);\n\t\tif (basename === 'nls.metadata.json') {\n\t\t\tif (file.isBuffer()) {\n\t\t\t\tconst xlfs: Record<string, XLF> = Object.create(null);\n\t\t\t\tconst json: BundledFormat = JSON.parse((file.contents as Buffer).toString('utf8'));\n\t\t\t\tfor (const coreModule in json.keys) {\n\t\t\t\t\tconst projectResource = getResource(coreModule);\n\t\t\t\t\tconst resource = projectResource.name;\n\t\t\t\t\tconst project = projectResource.project;\n\n\t\t\t\t\tconst keys = json.keys[coreModule];\n\t\t\t\t\tconst messages = json.messages[coreModule];\n\t\t\t\t\tif (keys.length !== messages.length) {\n\t\t\t\t\t\tthis.emit('error', `There is a mismatch between keys and messages in ${file.relative} for module ${coreModule}`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet xlf = xlfs[resource];\n\t\t\t\t\t\tif (!xlf) {\n\t\t\t\t\t\t\txlf = new XLF(project);\n\t\t\t\t\t\t\txlfs[resource] = xlf;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txlf.addFile(`src/${coreModule}`, keys, messages);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const resource in xlfs) {\n\t\t\t\t\tconst xlf = xlfs[resource];\n\t\t\t\t\tconst filePath = `${xlf.project}/${resource.replace(/\\//g, '_')}.xlf`;\n\t\t\t\t\tconst xlfFile = new File({\n\t\t\t\t\t\tpath: filePath,\n\t\t\t\t\t\tcontents: Buffer.from(xlf.toString(), 'utf8')\n\t\t\t\t\t});\n\t\t\t\t\tthis.queue(xlfFile);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.emit('error', new Error(`File ${file.relative} is not using a buffer content`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.emit('error', new Error(`File ${file.relative} is not a core meta data file.`));\n\t\t\treturn;\n\t\t}\n\t});\n}\n\nfunction createL10nBundleForExtension(extensionFolderName: string, prefixWithBuildFolder: boolean): NodeJS.ReadWriteStream {\n\tconst prefix = prefixWithBuildFolder ? '.build/' : '';\n\treturn gulp\n\t\t.src([\n\t\t\t// For source code of extensions\n\t\t\t`${prefix}extensions/${extensionFolderName}/{src,client,server}/**/*.{ts,tsx}`,\n\t\t\t// // For any dependencies pulled in (think vscode-css-languageservice or @vscode/emmet-helper)\n\t\t\t`${prefix}extensions/${extensionFolderName}/**/node_modules/{@vscode,vscode-*}/**/*.{js,jsx}`,\n\t\t\t// // For any dependencies pulled in that bundle @vscode/l10n. They needed to export the bundle\n\t\t\t`${prefix}extensions/${extensionFolderName}/**/bundle.l10n.json`,\n\t\t])\n\t\t.pipe(map(function (data, callback) {\n\t\t\tconst file = data as File;\n\t\t\tif (!file.isBuffer()) {\n\t\t\t\t// Not a buffer so we drop it\n\t\t\t\tcallback();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst extension = path.extname(file.relative);\n\t\t\tif (extension !== '.json') {\n\t\t\t\tconst contents = file.contents.toString('utf8');\n\t\t\t\tgetL10nJson([{ contents, extension }])\n\t\t\t\t\t.then((json) => {\n\t\t\t\t\t\tcallback(undefined, new File({\n\t\t\t\t\t\t\tpath: `extensions/${extensionFolderName}/bundle.l10n.json`,\n\t\t\t\t\t\t\tcontents: Buffer.from(JSON.stringify(json), 'utf8')\n\t\t\t\t\t\t}));\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tcallback(new Error(`File ${file.relative} threw an error when parsing: ${err}`));\n\t\t\t\t\t});\n\t\t\t\t// signal pause?\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// for bundle.l10n.jsons\n\t\t\tlet bundleJson;\n\t\t\ttry {\n\t\t\t\tbundleJson = JSON.parse(file.contents.toString('utf8'));\n\t\t\t} catch (err) {\n\t\t\t\tcallback(new Error(`File ${file.relative} threw an error when parsing: ${err}`));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// some validation of the bundle.l10n.json format\n\t\t\tfor (const key in bundleJson) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof bundleJson[key] !== 'string' &&\n\t\t\t\t\t(typeof bundleJson[key].message !== 'string' || !Array.isArray(bundleJson[key].comment))\n\t\t\t\t) {\n\t\t\t\t\tcallback(new Error(`Invalid bundle.l10n.json file. The value for key ${key} is not in the expected format.`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcallback(undefined, file);\n\t\t}))\n\t\t.pipe(jsonMerge({\n\t\t\tfileName: `extensions/${extensionFolderName}/bundle.l10n.json`,\n\t\t\tjsonSpace: '',\n\t\t\tconcatArrays: true\n\t\t}));\n}\n\nexport const EXTERNAL_EXTENSIONS = [\n\t'ms-vscode.js-debug',\n\t'ms-vscode.js-debug-companion',\n\t'ms-vscode.vscode-js-profile-table',\n];\n\nexport function createXlfFilesForExtensions(): ThroughStream {\n\tlet counter: number = 0;\n\tlet folderStreamEnded: boolean = false;\n\tlet folderStreamEndEmitted: boolean = false;\n\treturn through(function (this: ThroughStream, extensionFolder: File) {\n\t\tconst folderStream = this;\n\t\tconst stat = fs.statSync(extensionFolder.path);\n\t\tif (!stat.isDirectory()) {\n\t\t\treturn;\n\t\t}\n\t\tconst extensionFolderName = path.basename(extensionFolder.path);\n\t\tif (extensionFolderName === 'node_modules') {\n\t\t\treturn;\n\t\t}\n\t\t// Get extension id and use that as the id\n\t\tconst manifest = fs.readFileSync(path.join(extensionFolder.path, 'package.json'), 'utf-8');\n\t\tconst manifestJson = JSON.parse(manifest);\n\t\tconst extensionId = manifestJson.publisher + '.' + manifestJson.name;\n\n\t\tcounter++;\n\t\tlet _l10nMap: Map<string, l10nJsonFormat>;\n\t\tfunction getL10nMap() {\n\t\t\tif (!_l10nMap) {\n\t\t\t\t_l10nMap = new Map();\n\t\t\t}\n\t\t\treturn _l10nMap;\n\t\t}\n\t\tmerge(\n\t\t\tgulp.src([`.build/extensions/${extensionFolderName}/package.nls.json`, `.build/extensions/${extensionFolderName}/**/nls.metadata.json`], { allowEmpty: true }),\n\t\t\tcreateL10nBundleForExtension(extensionFolderName, EXTERNAL_EXTENSIONS.includes(extensionId))\n\t\t).pipe(through(function (file: File) {\n\t\t\tif (file.isBuffer()) {\n\t\t\t\tconst buffer: Buffer = file.contents as Buffer;\n\t\t\t\tconst basename = path.basename(file.path);\n\t\t\t\tif (basename === 'package.nls.json') {\n\t\t\t\t\tconst json: l10nJsonFormat = JSON.parse(buffer.toString('utf8'));\n\t\t\t\t\tgetL10nMap().set(`extensions/${extensionId}/package`, json);\n\t\t\t\t} else if (basename === 'nls.metadata.json') {\n\t\t\t\t\tconst json: BundledExtensionFormat = JSON.parse(buffer.toString('utf8'));\n\t\t\t\t\tconst relPath = path.relative(`.build/extensions/${extensionFolderName}`, path.dirname(file.path));\n\t\t\t\t\tfor (const file in json) {\n\t\t\t\t\t\tconst fileContent = json[file];\n\t\t\t\t\t\tconst info: l10nJsonFormat = Object.create(null);\n\t\t\t\t\t\tfor (let i = 0; i < fileContent.messages.length; i++) {\n\t\t\t\t\t\t\tconst message = fileContent.messages[i];\n\t\t\t\t\t\t\tconst { key, comment } = LocalizeInfo.is(fileContent.keys[i])\n\t\t\t\t\t\t\t\t? fileContent.keys[i] as LocalizeInfo\n\t\t\t\t\t\t\t\t: { key: fileContent.keys[i] as string, comment: undefined };\n\n\t\t\t\t\t\t\tinfo[key] = comment ? { message, comment } : message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgetL10nMap().set(`extensions/${extensionId}/${relPath}/${file}`, info);\n\t\t\t\t\t}\n\t\t\t\t} else if (basename === 'bundle.l10n.json') {\n\t\t\t\t\tconst json: l10nJsonFormat = JSON.parse(buffer.toString('utf8'));\n\t\t\t\t\tgetL10nMap().set(`extensions/${extensionId}/bundle`, json);\n\t\t\t\t} else {\n\t\t\t\t\tthis.emit('error', new Error(`${file.path} is not a valid extension nls file`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}, function () {\n\t\t\tif (_l10nMap?.size > 0) {\n\t\t\t\tconst xlfFile = new File({\n\t\t\t\t\tpath: path.join(extensionsProject, extensionId + '.xlf'),\n\t\t\t\t\tcontents: Buffer.from(getL10nXlf(_l10nMap), 'utf8')\n\t\t\t\t});\n\t\t\t\tfolderStream.queue(xlfFile);\n\t\t\t}\n\t\t\tthis.queue(null);\n\t\t\tcounter--;\n\t\t\tif (counter === 0 && folderStreamEnded && !folderStreamEndEmitted) {\n\t\t\t\tfolderStreamEndEmitted = true;\n\t\t\t\tfolderStream.queue(null);\n\t\t\t}\n\t\t}));\n\t}, function () {\n\t\tfolderStreamEnded = true;\n\t\tif (counter === 0) {\n\t\t\tfolderStreamEndEmitted = true;\n\t\t\tthis.queue(null);\n\t\t}\n\t});\n}\n\nexport function createXlfFilesForIsl(): ThroughStream {\n\treturn through(function (this: ThroughStream, file: File) {\n\t\tlet projectName: string,\n\t\t\tresourceFile: string;\n\t\tif (path.basename(file.path) === 'messages.en.isl') {\n\t\t\tprojectName = setupProject;\n\t\t\tresourceFile = 'messages.xlf';\n\t\t} else {\n\t\t\tthrow new Error(`Unknown input file ${file.path}`);\n\t\t}\n\n\t\tconst xlf = new XLF(projectName),\n\t\t\tkeys: string[] = [],\n\t\t\tmessages: string[] = [];\n\n\t\tconst model = new TextModel(file.contents.toString());\n\t\tlet inMessageSection = false;\n\t\tmodel.lines.forEach(line => {\n\t\t\tif (line.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst firstChar = line.charAt(0);\n\t\t\tswitch (firstChar) {\n\t\t\t\tcase ';':\n\t\t\t\t\t// Comment line;\n\t\t\t\t\treturn;\n\t\t\t\tcase '[':\n\t\t\t\t\tinMessageSection = '[Messages]' === line || '[CustomMessages]' === line;\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!inMessageSection) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst sections: string[] = line.split('=');\n\t\t\tif (sections.length !== 2) {\n\t\t\t\tthrow new Error(`Badly formatted message found: ${line}`);\n\t\t\t} else {\n\t\t\t\tconst key = sections[0];\n\t\t\t\tconst value = sections[1];\n\t\t\t\tif (key.length > 0 && value.length > 0) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tmessages.push(value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst originalPath = file.path.substring(file.cwd.length + 1, file.path.split('.')[0].length).replace(/\\\\/g, '/');\n\t\txlf.addFile(originalPath, keys, messages);\n\n\t\t// Emit only upon all ISL files combined into single XLF instance\n\t\tconst newFilePath = path.join(projectName, resourceFile);\n\t\tconst xlfFile = new File({ path: newFilePath, contents: Buffer.from(xlf.toString(), 'utf-8') });\n\t\tthis.queue(xlfFile);\n\t});\n}\n\nfunction createI18nFile(name: string, messages: any): File {\n\tconst result = Object.create(null);\n\tresult[''] = [\n\t\t'--------------------------------------------------------------------------------------------',\n\t\t'Copyright (c) Microsoft Corporation. All rights reserved.',\n\t\t'Licensed under the MIT License. See License.txt in the project root for license information.',\n\t\t'--------------------------------------------------------------------------------------------',\n\t\t'Do not edit this file. It is machine generated.'\n\t];\n\tfor (const key of Object.keys(messages)) {\n\t\tresult[key] = messages[key];\n\t}\n\n\tlet content = JSON.stringify(result, null, '\\t');\n\tif (process.platform === 'win32') {\n\t\tcontent = content.replace(/\\n/g, '\\r\\n');\n\t}\n\treturn new File({\n\t\tpath: path.join(name + '.i18n.json'),\n\t\tcontents: Buffer.from(content, 'utf8')\n\t});\n}\n\ninterface I18nPack {\n\tversion: string;\n\tcontents: {\n\t\t[path: string]: Record<string, string>;\n\t};\n}\n\nconst i18nPackVersion = '1.0.0';\n\nexport interface TranslationPath {\n\tid: string;\n\tresourceName: string;\n}\n\nfunction getRecordFromL10nJsonFormat(l10nJsonFormat: l10nJsonFormat): Record<string, string> {\n\tconst record: Record<string, string> = {};\n\tfor (const key of Object.keys(l10nJsonFormat).sort()) {\n\t\tconst value = l10nJsonFormat[key];\n\t\trecord[key] = typeof value === 'string' ? value : value.message;\n\t}\n\treturn record;\n}\n\nexport function prepareI18nPackFiles(resultingTranslationPaths: TranslationPath[]): NodeJS.ReadWriteStream {\n\tconst parsePromises: Promise<l10nJsonDetails[]>[] = [];\n\tconst mainPack: I18nPack = { version: i18nPackVersion, contents: {} };\n\tconst extensionsPacks: Record<string, I18nPack> = {};\n\tconst errors: any[] = [];\n\treturn through(function (this: ThroughStream, xlf: File) {\n\t\tlet project = path.basename(path.dirname(path.dirname(xlf.relative)));\n\t\t// strip `-new` since vscode-extensions-loc uses the `-new` suffix to indicate that it's from the new loc pipeline\n\t\tconst resource = path.basename(path.basename(xlf.relative, '.xlf'), '-new');\n\t\tif (EXTERNAL_EXTENSIONS.find(e => e === resource)) {\n\t\t\tproject = extensionsProject;\n\t\t}\n\t\tconst contents = xlf.contents.toString();\n\t\tlog(`Found ${project}: ${resource}`);\n\t\tconst parsePromise = getL10nFilesFromXlf(contents);\n\t\tparsePromises.push(parsePromise);\n\t\tparsePromise.then(\n\t\t\tresolvedFiles => {\n\t\t\t\tresolvedFiles.forEach(file => {\n\t\t\t\t\tconst path = file.name;\n\t\t\t\t\tconst firstSlash = path.indexOf('/');\n\n\t\t\t\t\tif (project === extensionsProject) {\n\t\t\t\t\t\t// resource will be the extension id\n\t\t\t\t\t\tlet extPack = extensionsPacks[resource];\n\t\t\t\t\t\tif (!extPack) {\n\t\t\t\t\t\t\textPack = extensionsPacks[resource] = { version: i18nPackVersion, contents: {} };\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// remove 'extensions/extensionId/' segment\n\t\t\t\t\t\tconst secondSlash = path.indexOf('/', firstSlash + 1);\n\t\t\t\t\t\textPack.contents[path.substring(secondSlash + 1)] = getRecordFromL10nJsonFormat(file.messages);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmainPack.contents[path.substring(firstSlash + 1)] = getRecordFromL10nJsonFormat(file.messages);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t).catch(reason => {\n\t\t\terrors.push(reason);\n\t\t});\n\t}, function () {\n\t\tPromise.all(parsePromises)\n\t\t\t.then(() => {\n\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\tthrow errors;\n\t\t\t\t}\n\t\t\t\tconst translatedMainFile = createI18nFile('./main', mainPack);\n\t\t\t\tresultingTranslationPaths.push({ id: 'vscode', resourceName: 'main.i18n.json' });\n\n\t\t\t\tthis.queue(translatedMainFile);\n\t\t\t\tfor (const extensionId in extensionsPacks) {\n\t\t\t\t\tconst translatedExtFile = createI18nFile(`extensions/${extensionId}`, extensionsPacks[extensionId]);\n\t\t\t\t\tthis.queue(translatedExtFile);\n\n\t\t\t\t\tresultingTranslationPaths.push({ id: extensionId, resourceName: `extensions/${extensionId}.i18n.json` });\n\t\t\t\t}\n\t\t\t\tthis.queue(null);\n\t\t\t})\n\t\t\t.catch((reason) => {\n\t\t\t\tthis.emit('error', reason);\n\t\t\t});\n\t});\n}\n\nexport function prepareIslFiles(language: Language, innoSetupConfig: InnoSetup): ThroughStream {\n\tconst parsePromises: Promise<l10nJsonDetails[]>[] = [];\n\n\treturn through(function (this: ThroughStream, xlf: File) {\n\t\tconst stream = this;\n\t\tconst parsePromise = XLF.parse(xlf.contents.toString());\n\t\tparsePromises.push(parsePromise);\n\t\tparsePromise.then(\n\t\t\tresolvedFiles => {\n\t\t\t\tresolvedFiles.forEach(file => {\n\t\t\t\t\tconst translatedFile = createIslFile(file.name, file.messages, language, innoSetupConfig);\n\t\t\t\t\tstream.queue(translatedFile);\n\t\t\t\t});\n\t\t\t}\n\t\t).catch(reason => {\n\t\t\tthis.emit('error', reason);\n\t\t});\n\t}, function () {\n\t\tPromise.all(parsePromises)\n\t\t\t.then(() => { this.queue(null); })\n\t\t\t.catch(reason => {\n\t\t\t\tthis.emit('error', reason);\n\t\t\t});\n\t});\n}\n\nfunction createIslFile(name: string, messages: l10nJsonFormat, language: Language, innoSetup: InnoSetup): File {\n\tconst content: string[] = [];\n\tlet originalContent: TextModel;\n\tif (path.basename(name) === 'Default') {\n\t\toriginalContent = new TextModel(fs.readFileSync(name + '.isl', 'utf8'));\n\t} else {\n\t\toriginalContent = new TextModel(fs.readFileSync(name + '.en.isl', 'utf8'));\n\t}\n\toriginalContent.lines.forEach(line => {\n\t\tif (line.length > 0) {\n\t\t\tconst firstChar = line.charAt(0);\n\t\t\tif (firstChar === '[' || firstChar === ';') {\n\t\t\t\tcontent.push(line);\n\t\t\t} else {\n\t\t\t\tconst sections: string[] = line.split('=');\n\t\t\t\tconst key = sections[0];\n\t\t\t\tlet translated = line;\n\t\t\t\tif (key) {\n\t\t\t\t\tconst translatedMessage = messages[key];\n\t\t\t\t\tif (translatedMessage) {\n\t\t\t\t\t\ttranslated = `${key}=${translatedMessage}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontent.push(translated);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst basename = path.basename(name);\n\tconst filePath = `${basename}.${language.id}.isl`;\n\tconst encoded = iconv.encode(Buffer.from(content.join('\\r\\n'), 'utf8').toString(), innoSetup.codePage);\n\n\treturn new File({\n\t\tpath: filePath,\n\t\tcontents: Buffer.from(encoded),\n\t});\n}\n\nfunction encodeEntities(value: string): string {\n\tconst result: string[] = [];\n\tfor (let i = 0; i < value.length; i++) {\n\t\tconst ch = value[i];\n\t\tswitch (ch) {\n\t\t\tcase '<':\n\t\t\t\tresult.push('&lt;');\n\t\t\t\tbreak;\n\t\t\tcase '>':\n\t\t\t\tresult.push('&gt;');\n\t\t\t\tbreak;\n\t\t\tcase '&':\n\t\t\t\tresult.push('&amp;');\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult.push(ch);\n\t\t}\n\t}\n\treturn result.join('');\n}\n\nfunction decodeEntities(value: string): string {\n\treturn value.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');\n}\n"
  },
  {
    "path": "build/lib/inlineMeta.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.inlineMeta = inlineMeta;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst path_1 = require(\"path\");\nconst packageJsonMarkerId = 'BUILD_INSERT_PACKAGE_CONFIGURATION';\n// TODO in order to inline `product.json`, more work is\n// needed to ensure that we cover all cases where modifications\n// are done to the product configuration during build. There are\n// at least 2 more changes that kick in very late:\n// - a `darwinUniversalAssetId` is added in`create-universal-app.ts`\n// - a `target` is added in `gulpfile.vscode.win32.js`\n// const productJsonMarkerId = 'BUILD_INSERT_PRODUCT_CONFIGURATION';\nfunction inlineMeta(result, ctx) {\n    return result.pipe(event_stream_1.default.through(function (file) {\n        if (matchesFile(file, ctx)) {\n            let content = file.contents.toString();\n            let markerFound = false;\n            const packageMarker = `${packageJsonMarkerId}:\"${packageJsonMarkerId}\"`; // this needs to be the format after esbuild has processed the file (e.g. double quotes)\n            if (content.includes(packageMarker)) {\n                content = content.replace(packageMarker, JSON.stringify(JSON.parse(ctx.packageJsonFn())).slice(1, -1) /* trim braces */);\n                markerFound = true;\n            }\n            // const productMarker = `${productJsonMarkerId}:\"${productJsonMarkerId}\"`; // this needs to be the format after esbuild has processed the file (e.g. double quotes)\n            // if (content.includes(productMarker)) {\n            // \tcontent = content.replace(productMarker, JSON.stringify(JSON.parse(ctx.productJsonFn())).slice(1, -1) /* trim braces */);\n            // \tmarkerFound = true;\n            // }\n            if (markerFound) {\n                file.contents = Buffer.from(content);\n            }\n        }\n        this.emit('data', file);\n    }));\n}\nfunction matchesFile(file, ctx) {\n    for (const targetPath of ctx.targetPaths) {\n        if (file.basename === (0, path_1.basename)(targetPath)) { // TODO would be nicer to figure out root relative path to not match on false positives\n            return true;\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=inlineMeta.js.map"
  },
  {
    "path": "build/lib/inlineMeta.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport { basename } from 'path';\nimport File from 'vinyl';\n\nexport interface IInlineMetaContext {\n\treadonly targetPaths: string[];\n\treadonly packageJsonFn: () => string;\n\treadonly productJsonFn: () => string;\n}\n\nconst packageJsonMarkerId = 'BUILD_INSERT_PACKAGE_CONFIGURATION';\n\n// TODO in order to inline `product.json`, more work is\n// needed to ensure that we cover all cases where modifications\n// are done to the product configuration during build. There are\n// at least 2 more changes that kick in very late:\n// - a `darwinUniversalAssetId` is added in`create-universal-app.ts`\n// - a `target` is added in `gulpfile.vscode.win32.js`\n// const productJsonMarkerId = 'BUILD_INSERT_PRODUCT_CONFIGURATION';\n\nexport function inlineMeta(result: NodeJS.ReadWriteStream, ctx: IInlineMetaContext): NodeJS.ReadWriteStream {\n\treturn result.pipe(es.through(function (file: File) {\n\t\tif (matchesFile(file, ctx)) {\n\t\t\tlet content = file.contents.toString();\n\t\t\tlet markerFound = false;\n\n\t\t\tconst packageMarker = `${packageJsonMarkerId}:\"${packageJsonMarkerId}\"`; // this needs to be the format after esbuild has processed the file (e.g. double quotes)\n\t\t\tif (content.includes(packageMarker)) {\n\t\t\t\tcontent = content.replace(packageMarker, JSON.stringify(JSON.parse(ctx.packageJsonFn())).slice(1, -1) /* trim braces */);\n\t\t\t\tmarkerFound = true;\n\t\t\t}\n\n\t\t\t// const productMarker = `${productJsonMarkerId}:\"${productJsonMarkerId}\"`; // this needs to be the format after esbuild has processed the file (e.g. double quotes)\n\t\t\t// if (content.includes(productMarker)) {\n\t\t\t// \tcontent = content.replace(productMarker, JSON.stringify(JSON.parse(ctx.productJsonFn())).slice(1, -1) /* trim braces */);\n\t\t\t// \tmarkerFound = true;\n\t\t\t// }\n\n\t\t\tif (markerFound) {\n\t\t\t\tfile.contents = Buffer.from(content);\n\t\t\t}\n\t\t}\n\n\t\tthis.emit('data', file);\n\t}));\n}\n\nfunction matchesFile(file: File, ctx: IInlineMetaContext): boolean {\n\tfor (const targetPath of ctx.targetPaths) {\n\t\tif (file.basename === basename(targetPath)) { // TODO would be nicer to figure out root relative path to not match on false positives\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n"
  },
  {
    "path": "build/lib/layersChecker.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst typescript_1 = __importDefault(require(\"typescript\"));\nconst fs_1 = require(\"fs\");\nconst path_1 = require(\"path\");\nconst minimatch_1 = require(\"minimatch\");\n//\n// #############################################################################################\n//\n// A custom typescript checker for the specific task of detecting the use of certain types in a\n// layer that does not allow such use. For example:\n// - using DOM globals in common/node/electron-main layer (e.g. HTMLElement)\n// - using node.js globals in common/browser layer (e.g. process)\n//\n// Make changes to below RULES to lift certain files from these checks only if absolutely needed\n//\n// #############################################################################################\n//\n// Types we assume are present in all implementations of JS VMs (node.js, browsers)\n// Feel free to add more core types as you see needed if present in node.js and browsers\nconst CORE_TYPES = [\n    'setTimeout',\n    'clearTimeout',\n    'setInterval',\n    'clearInterval',\n    'console',\n    'Console',\n    'Error',\n    'ErrorConstructor',\n    'String',\n    'TextDecoder',\n    'TextEncoder',\n    'self',\n    'queueMicrotask',\n    'Array',\n    'Uint8Array',\n    'Uint16Array',\n    'Uint32Array',\n    'Int8Array',\n    'Int16Array',\n    'Int32Array',\n    'Float32Array',\n    'Float64Array',\n    'Uint8ClampedArray',\n    'BigUint64Array',\n    'BigInt64Array',\n    'btoa',\n    'atob',\n    'AbortController',\n    'AbortSignal',\n    'MessageChannel',\n    'MessagePort',\n    'URL',\n    'URLSearchParams',\n    'ReadonlyArray',\n    'Event',\n    'EventTarget',\n    'BroadcastChannel',\n    'performance',\n    'Blob',\n    'crypto',\n    'File',\n    'fetch',\n    'RequestInit',\n    'Headers',\n    'Request',\n    'Response',\n    'Body',\n    '__type',\n    '__global',\n    'Performance',\n    'PerformanceMark',\n    'PerformanceObserver',\n    'ImportMeta',\n    'structuredClone',\n    // webcrypto has been available since Node.js 19, but still live in dom.d.ts\n    'Crypto',\n    'SubtleCrypto',\n    'JsonWebKey',\n    'MessageEvent',\n];\n// Types that are defined in a common layer but are known to be only\n// available in native environments should not be allowed in browser\nconst NATIVE_TYPES = [\n    'NativeParsedArgs',\n    'INativeEnvironmentService',\n    'AbstractNativeEnvironmentService',\n    'INativeWindowConfiguration',\n    'ICommonNativeHostService',\n    'INativeHostService',\n    'IMainProcessService'\n];\nconst RULES = [\n    // Tests: skip\n    {\n        target: '**/vs/**/test/**',\n        skip: true // -> skip all test files\n    },\n    // Common: vs/base/common/platform.ts\n    {\n        target: '**/vs/base/common/platform.ts',\n        allowedTypes: [\n            ...CORE_TYPES,\n            // Safe access to postMessage() and friends\n            'MessageEvent',\n        ],\n        disallowedTypes: NATIVE_TYPES,\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/base/common/async.ts\n    {\n        target: '**/vs/base/common/async.ts',\n        allowedTypes: [\n            ...CORE_TYPES,\n            // Safe access to requestIdleCallback & cancelIdleCallback\n            'requestIdleCallback',\n            'cancelIdleCallback'\n        ],\n        disallowedTypes: NATIVE_TYPES,\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/base/common/performance.ts\n    {\n        target: '**/vs/base/common/performance.ts',\n        allowedTypes: [\n            ...CORE_TYPES,\n            // Safe access to Performance\n            'Performance',\n            'PerformanceEntry',\n            'PerformanceTiming'\n        ],\n        disallowedTypes: NATIVE_TYPES,\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/platform/environment/common/*\n    {\n        target: '**/vs/platform/environment/common/*.ts',\n        allowedTypes: CORE_TYPES,\n        disallowedTypes: [ /* Ignore native types that are defined from here */],\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/platform/window/common/window.ts\n    {\n        target: '**/vs/platform/window/common/window.ts',\n        allowedTypes: CORE_TYPES,\n        disallowedTypes: [ /* Ignore native types that are defined from here */],\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/platform/native/common/native.ts\n    {\n        target: '**/vs/platform/native/common/native.ts',\n        allowedTypes: CORE_TYPES,\n        disallowedTypes: [ /* Ignore native types that are defined from here */],\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/platform/native/common/nativeHostService.ts\n    {\n        target: '**/vs/platform/native/common/nativeHostService.ts',\n        allowedTypes: CORE_TYPES,\n        disallowedTypes: [ /* Ignore native types that are defined from here */],\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/workbench/api/common/extHostExtensionService.ts\n    {\n        target: '**/vs/workbench/api/common/extHostExtensionService.ts',\n        allowedTypes: [\n            ...CORE_TYPES,\n            // Safe access to global\n            'global'\n        ],\n        disallowedTypes: NATIVE_TYPES,\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Common: vs/base/parts/sandbox/electron-sandbox/preload.ts\n    {\n        target: '**/vs/base/parts/sandbox/electron-sandbox/preload.ts',\n        allowedTypes: [\n            ...CORE_TYPES,\n            // Safe access to a very small subset of node.js\n            'process',\n            'NodeJS'\n        ],\n        disallowedTypes: NATIVE_TYPES,\n        disallowedDefinitions: [\n            '@types/node' // no node.js\n        ]\n    },\n    // Common\n    {\n        target: '**/vs/**/common/**',\n        allowedTypes: CORE_TYPES,\n        disallowedTypes: NATIVE_TYPES,\n        disallowedDefinitions: [\n            'lib.dom.d.ts', // no DOM\n            '@types/node' // no node.js\n        ]\n    },\n    // Browser\n    {\n        target: '**/vs/**/browser/**',\n        allowedTypes: CORE_TYPES,\n        disallowedTypes: NATIVE_TYPES,\n        allowedDefinitions: [\n            '@types/node/stream/consumers.d.ts' // node.js started to duplicate types from lib.dom.d.ts so we have to account for that\n        ],\n        disallowedDefinitions: [\n            '@types/node' // no node.js\n        ]\n    },\n    // Browser (editor contrib)\n    {\n        target: '**/src/vs/editor/contrib/**',\n        allowedTypes: CORE_TYPES,\n        disallowedTypes: NATIVE_TYPES,\n        disallowedDefinitions: [\n            '@types/node' // no node.js\n        ]\n    },\n    // node.js\n    {\n        target: '**/vs/**/node/**',\n        allowedTypes: CORE_TYPES,\n        disallowedDefinitions: [\n            'lib.dom.d.ts' // no DOM\n        ]\n    },\n    // Electron (sandbox)\n    {\n        target: '**/vs/**/electron-sandbox/**',\n        allowedTypes: CORE_TYPES,\n        disallowedDefinitions: [\n            '@types/node' // no node.js\n        ]\n    },\n    // Electron (utility)\n    {\n        target: '**/vs/**/electron-utility/**',\n        allowedTypes: [\n            ...CORE_TYPES,\n            // --> types from electron.d.ts that duplicate from lib.dom.d.ts\n            'Event',\n            'Request'\n        ],\n        disallowedTypes: [\n            'ipcMain' // not allowed, use validatedIpcMain instead\n        ],\n        disallowedDefinitions: [\n            'lib.dom.d.ts' // no DOM\n        ]\n    },\n    // Electron (main)\n    {\n        target: '**/vs/**/electron-main/**',\n        allowedTypes: [\n            ...CORE_TYPES,\n            // --> types from electron.d.ts that duplicate from lib.dom.d.ts\n            'Event',\n            'Request'\n        ],\n        disallowedTypes: [\n            'ipcMain' // not allowed, use validatedIpcMain instead\n        ],\n        disallowedDefinitions: [\n            'lib.dom.d.ts' // no DOM\n        ]\n    }\n];\nconst TS_CONFIG_PATH = (0, path_1.join)(__dirname, '../../', 'src', 'tsconfig.json');\nlet hasErrors = false;\nfunction checkFile(program, sourceFile, rule) {\n    checkNode(sourceFile);\n    function checkNode(node) {\n        if (node.kind !== typescript_1.default.SyntaxKind.Identifier) {\n            return typescript_1.default.forEachChild(node, checkNode); // recurse down\n        }\n        const checker = program.getTypeChecker();\n        const symbol = checker.getSymbolAtLocation(node);\n        if (!symbol) {\n            return;\n        }\n        let _parentSymbol = symbol;\n        while (_parentSymbol.parent) {\n            _parentSymbol = _parentSymbol.parent;\n        }\n        const parentSymbol = _parentSymbol;\n        const text = parentSymbol.getName();\n        if (rule.allowedTypes?.some(allowed => allowed === text)) {\n            return; // override\n        }\n        if (rule.disallowedTypes?.some(disallowed => disallowed === text)) {\n            const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n            console.log(`[build/lib/layersChecker.ts]: Reference to type '${text}' violates layer '${rule.target}' (${sourceFile.fileName} (${line + 1},${character + 1}). Learn more about our source code organization at https://github.com/microsoft/vscode/wiki/Source-Code-Organization.`);\n            hasErrors = true;\n            return;\n        }\n        const declarations = symbol.declarations;\n        if (Array.isArray(declarations)) {\n            DeclarationLoop: for (const declaration of declarations) {\n                if (declaration) {\n                    const parent = declaration.parent;\n                    if (parent) {\n                        const parentSourceFile = parent.getSourceFile();\n                        if (parentSourceFile) {\n                            const definitionFileName = parentSourceFile.fileName;\n                            if (rule.allowedDefinitions) {\n                                for (const allowedDefinition of rule.allowedDefinitions) {\n                                    if (definitionFileName.indexOf(allowedDefinition) >= 0) {\n                                        continue DeclarationLoop;\n                                    }\n                                }\n                            }\n                            if (rule.disallowedDefinitions) {\n                                for (const disallowedDefinition of rule.disallowedDefinitions) {\n                                    if (definitionFileName.indexOf(disallowedDefinition) >= 0) {\n                                        const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n                                        console.log(`[build/lib/layersChecker.ts]: Reference to symbol '${text}' from '${disallowedDefinition}' violates layer '${rule.target}' (${sourceFile.fileName} (${line + 1},${character + 1}) Learn more about our source code organization at https://github.com/microsoft/vscode/wiki/Source-Code-Organization.`);\n                                        hasErrors = true;\n                                        return;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\nfunction createProgram(tsconfigPath) {\n    const tsConfig = typescript_1.default.readConfigFile(tsconfigPath, typescript_1.default.sys.readFile);\n    const configHostParser = { fileExists: fs_1.existsSync, readDirectory: typescript_1.default.sys.readDirectory, readFile: file => (0, fs_1.readFileSync)(file, 'utf8'), useCaseSensitiveFileNames: process.platform === 'linux' };\n    const tsConfigParsed = typescript_1.default.parseJsonConfigFileContent(tsConfig.config, configHostParser, (0, path_1.resolve)((0, path_1.dirname)(tsconfigPath)), { noEmit: true });\n    const compilerHost = typescript_1.default.createCompilerHost(tsConfigParsed.options, true);\n    return typescript_1.default.createProgram(tsConfigParsed.fileNames, tsConfigParsed.options, compilerHost);\n}\n//\n// Create program and start checking\n//\nconst program = createProgram(TS_CONFIG_PATH);\nfor (const sourceFile of program.getSourceFiles()) {\n    for (const rule of RULES) {\n        if ((0, minimatch_1.match)([sourceFile.fileName], rule.target).length > 0) {\n            if (!rule.skip) {\n                checkFile(program, sourceFile, rule);\n            }\n            break;\n        }\n    }\n}\nif (hasErrors) {\n    process.exit(1);\n}\n//# sourceMappingURL=layersChecker.js.map"
  },
  {
    "path": "build/lib/layersChecker.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport ts from 'typescript';\nimport { readFileSync, existsSync } from 'fs';\nimport { resolve, dirname, join } from 'path';\nimport { match } from 'minimatch';\n\n//\n// #############################################################################################\n//\n// A custom typescript checker for the specific task of detecting the use of certain types in a\n// layer that does not allow such use. For example:\n// - using DOM globals in common/node/electron-main layer (e.g. HTMLElement)\n// - using node.js globals in common/browser layer (e.g. process)\n//\n// Make changes to below RULES to lift certain files from these checks only if absolutely needed\n//\n// #############################################################################################\n//\n\n// Types we assume are present in all implementations of JS VMs (node.js, browsers)\n// Feel free to add more core types as you see needed if present in node.js and browsers\nconst CORE_TYPES = [\n\t'setTimeout',\n\t'clearTimeout',\n\t'setInterval',\n\t'clearInterval',\n\t'console',\n\t'Console',\n\t'Error',\n\t'ErrorConstructor',\n\t'String',\n\t'TextDecoder',\n\t'TextEncoder',\n\t'self',\n\t'queueMicrotask',\n\t'Array',\n\t'Uint8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Uint8ClampedArray',\n\t'BigUint64Array',\n\t'BigInt64Array',\n\t'btoa',\n\t'atob',\n\t'AbortController',\n\t'AbortSignal',\n\t'MessageChannel',\n\t'MessagePort',\n\t'URL',\n\t'URLSearchParams',\n\t'ReadonlyArray',\n\t'Event',\n\t'EventTarget',\n\t'BroadcastChannel',\n\t'performance',\n\t'Blob',\n\t'crypto',\n\t'File',\n\t'fetch',\n\t'RequestInit',\n\t'Headers',\n\t'Request',\n\t'Response',\n\t'Body',\n\t'__type',\n\t'__global',\n\t'Performance',\n\t'PerformanceMark',\n\t'PerformanceObserver',\n\t'ImportMeta',\n\t'structuredClone',\n\n\t// webcrypto has been available since Node.js 19, but still live in dom.d.ts\n\t'Crypto',\n\t'SubtleCrypto',\n\t'JsonWebKey',\n\t'MessageEvent',\n];\n\n// Types that are defined in a common layer but are known to be only\n// available in native environments should not be allowed in browser\nconst NATIVE_TYPES = [\n\t'NativeParsedArgs',\n\t'INativeEnvironmentService',\n\t'AbstractNativeEnvironmentService',\n\t'INativeWindowConfiguration',\n\t'ICommonNativeHostService',\n\t'INativeHostService',\n\t'IMainProcessService'\n];\n\nconst RULES: IRule[] = [\n\n\t// Tests: skip\n\t{\n\t\ttarget: '**/vs/**/test/**',\n\t\tskip: true // -> skip all test files\n\t},\n\n\t// Common: vs/base/common/platform.ts\n\t{\n\t\ttarget: '**/vs/base/common/platform.ts',\n\t\tallowedTypes: [\n\t\t\t...CORE_TYPES,\n\n\t\t\t// Safe access to postMessage() and friends\n\t\t\t'MessageEvent',\n\t\t],\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/base/common/async.ts\n\t{\n\t\ttarget: '**/vs/base/common/async.ts',\n\t\tallowedTypes: [\n\t\t\t...CORE_TYPES,\n\n\t\t\t// Safe access to requestIdleCallback & cancelIdleCallback\n\t\t\t'requestIdleCallback',\n\t\t\t'cancelIdleCallback'\n\t\t],\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/base/common/performance.ts\n\t{\n\t\ttarget: '**/vs/base/common/performance.ts',\n\t\tallowedTypes: [\n\t\t\t...CORE_TYPES,\n\n\t\t\t// Safe access to Performance\n\t\t\t'Performance',\n\t\t\t'PerformanceEntry',\n\t\t\t'PerformanceTiming'\n\t\t],\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/platform/environment/common/*\n\t{\n\t\ttarget: '**/vs/platform/environment/common/*.ts',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedTypes: [/* Ignore native types that are defined from here */],\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/platform/window/common/window.ts\n\t{\n\t\ttarget: '**/vs/platform/window/common/window.ts',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedTypes: [/* Ignore native types that are defined from here */],\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/platform/native/common/native.ts\n\t{\n\t\ttarget: '**/vs/platform/native/common/native.ts',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedTypes: [/* Ignore native types that are defined from here */],\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/platform/native/common/nativeHostService.ts\n\t{\n\t\ttarget: '**/vs/platform/native/common/nativeHostService.ts',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedTypes: [/* Ignore native types that are defined from here */],\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/workbench/api/common/extHostExtensionService.ts\n\t{\n\t\ttarget: '**/vs/workbench/api/common/extHostExtensionService.ts',\n\t\tallowedTypes: [\n\t\t\t...CORE_TYPES,\n\n\t\t\t// Safe access to global\n\t\t\t'global'\n\t\t],\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common: vs/base/parts/sandbox/electron-sandbox/preload.ts\n\t{\n\t\ttarget: '**/vs/base/parts/sandbox/electron-sandbox/preload.ts',\n\t\tallowedTypes: [\n\t\t\t...CORE_TYPES,\n\n\t\t\t// Safe access to a very small subset of node.js\n\t\t\t'process',\n\t\t\t'NodeJS'\n\t\t],\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Common\n\t{\n\t\ttarget: '**/vs/**/common/**',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts', // no DOM\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Browser\n\t{\n\t\ttarget: '**/vs/**/browser/**',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tallowedDefinitions: [\n\t\t\t'@types/node/stream/consumers.d.ts' // node.js started to duplicate types from lib.dom.d.ts so we have to account for that\n\t\t],\n\t\tdisallowedDefinitions: [\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Browser (editor contrib)\n\t{\n\t\ttarget: '**/src/vs/editor/contrib/**',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedTypes: NATIVE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// node.js\n\t{\n\t\ttarget: '**/vs/**/node/**',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts'\t// no DOM\n\t\t]\n\t},\n\n\t// Electron (sandbox)\n\t{\n\t\ttarget: '**/vs/**/electron-sandbox/**',\n\t\tallowedTypes: CORE_TYPES,\n\t\tdisallowedDefinitions: [\n\t\t\t'@types/node'\t// no node.js\n\t\t]\n\t},\n\n\t// Electron (utility)\n\t{\n\t\ttarget: '**/vs/**/electron-utility/**',\n\t\tallowedTypes: [\n\t\t\t...CORE_TYPES,\n\n\t\t\t// --> types from electron.d.ts that duplicate from lib.dom.d.ts\n\t\t\t'Event',\n\t\t\t'Request'\n\t\t],\n\t\tdisallowedTypes: [\n\t\t\t'ipcMain' // not allowed, use validatedIpcMain instead\n\t\t],\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts'\t// no DOM\n\t\t]\n\t},\n\n\t// Electron (main)\n\t{\n\t\ttarget: '**/vs/**/electron-main/**',\n\t\tallowedTypes: [\n\t\t\t...CORE_TYPES,\n\n\t\t\t// --> types from electron.d.ts that duplicate from lib.dom.d.ts\n\t\t\t'Event',\n\t\t\t'Request'\n\t\t],\n\t\tdisallowedTypes: [\n\t\t\t'ipcMain' // not allowed, use validatedIpcMain instead\n\t\t],\n\t\tdisallowedDefinitions: [\n\t\t\t'lib.dom.d.ts'\t// no DOM\n\t\t]\n\t}\n];\n\nconst TS_CONFIG_PATH = join(__dirname, '../../', 'src', 'tsconfig.json');\n\ninterface IRule {\n\ttarget: string;\n\tskip?: boolean;\n\tallowedTypes?: string[];\n\tallowedDefinitions?: string[];\n\tdisallowedDefinitions?: string[];\n\tdisallowedTypes?: string[];\n}\n\nlet hasErrors = false;\n\nfunction checkFile(program: ts.Program, sourceFile: ts.SourceFile, rule: IRule) {\n\tcheckNode(sourceFile);\n\n\tfunction checkNode(node: ts.Node): void {\n\t\tif (node.kind !== ts.SyntaxKind.Identifier) {\n\t\t\treturn ts.forEachChild(node, checkNode); // recurse down\n\t\t}\n\n\t\tconst checker = program.getTypeChecker();\n\t\tconst symbol = checker.getSymbolAtLocation(node);\n\n\t\tif (!symbol) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet _parentSymbol: any = symbol;\n\n\t\twhile (_parentSymbol.parent) {\n\t\t\t_parentSymbol = _parentSymbol.parent;\n\t\t}\n\n\t\tconst parentSymbol = _parentSymbol as ts.Symbol;\n\t\tconst text = parentSymbol.getName();\n\n\t\tif (rule.allowedTypes?.some(allowed => allowed === text)) {\n\t\t\treturn; // override\n\t\t}\n\n\t\tif (rule.disallowedTypes?.some(disallowed => disallowed === text)) {\n\t\t\tconst { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n\t\t\tconsole.log(`[build/lib/layersChecker.ts]: Reference to type '${text}' violates layer '${rule.target}' (${sourceFile.fileName} (${line + 1},${character + 1}). Learn more about our source code organization at https://github.com/microsoft/vscode/wiki/Source-Code-Organization.`);\n\n\t\t\thasErrors = true;\n\t\t\treturn;\n\t\t}\n\n\t\tconst declarations = symbol.declarations;\n\t\tif (Array.isArray(declarations)) {\n\t\t\tDeclarationLoop: for (const declaration of declarations) {\n\t\t\t\tif (declaration) {\n\t\t\t\t\tconst parent = declaration.parent;\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tconst parentSourceFile = parent.getSourceFile();\n\t\t\t\t\t\tif (parentSourceFile) {\n\t\t\t\t\t\t\tconst definitionFileName = parentSourceFile.fileName;\n\t\t\t\t\t\t\tif (rule.allowedDefinitions) {\n\t\t\t\t\t\t\t\tfor (const allowedDefinition of rule.allowedDefinitions) {\n\t\t\t\t\t\t\t\t\tif (definitionFileName.indexOf(allowedDefinition) >= 0) {\n\t\t\t\t\t\t\t\t\t\tcontinue DeclarationLoop;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (rule.disallowedDefinitions) {\n\t\t\t\t\t\t\t\tfor (const disallowedDefinition of rule.disallowedDefinitions) {\n\t\t\t\t\t\t\t\t\tif (definitionFileName.indexOf(disallowedDefinition) >= 0) {\n\t\t\t\t\t\t\t\t\t\tconst { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n\n\t\t\t\t\t\t\t\t\t\tconsole.log(`[build/lib/layersChecker.ts]: Reference to symbol '${text}' from '${disallowedDefinition}' violates layer '${rule.target}' (${sourceFile.fileName} (${line + 1},${character + 1}) Learn more about our source code organization at https://github.com/microsoft/vscode/wiki/Source-Code-Organization.`);\n\n\t\t\t\t\t\t\t\t\t\thasErrors = true;\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction createProgram(tsconfigPath: string): ts.Program {\n\tconst tsConfig = ts.readConfigFile(tsconfigPath, ts.sys.readFile);\n\n\tconst configHostParser: ts.ParseConfigHost = { fileExists: existsSync, readDirectory: ts.sys.readDirectory, readFile: file => readFileSync(file, 'utf8'), useCaseSensitiveFileNames: process.platform === 'linux' };\n\tconst tsConfigParsed = ts.parseJsonConfigFileContent(tsConfig.config, configHostParser, resolve(dirname(tsconfigPath)), { noEmit: true });\n\n\tconst compilerHost = ts.createCompilerHost(tsConfigParsed.options, true);\n\n\treturn ts.createProgram(tsConfigParsed.fileNames, tsConfigParsed.options, compilerHost);\n}\n\n//\n// Create program and start checking\n//\nconst program = createProgram(TS_CONFIG_PATH);\n\nfor (const sourceFile of program.getSourceFiles()) {\n\tfor (const rule of RULES) {\n\t\tif (match([sourceFile.fileName], rule.target).length > 0) {\n\t\t\tif (!rule.skip) {\n\t\t\t\tcheckFile(program, sourceFile, rule);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nif (hasErrors) {\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "build/lib/mangle/index.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Mangler = void 0;\nconst node_v8_1 = __importDefault(require(\"node:v8\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst process_1 = require(\"process\");\nconst source_map_1 = require(\"source-map\");\nconst typescript_1 = __importDefault(require(\"typescript\"));\nconst url_1 = require(\"url\");\nconst workerpool_1 = __importDefault(require(\"workerpool\"));\nconst staticLanguageServiceHost_1 = require(\"./staticLanguageServiceHost\");\nconst buildfile = require('../../buildfile');\nclass ShortIdent {\n    prefix;\n    static _keywords = new Set(['await', 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger',\n        'default', 'delete', 'do', 'else', 'export', 'extends', 'false', 'finally', 'for', 'function', 'if',\n        'import', 'in', 'instanceof', 'let', 'new', 'null', 'return', 'static', 'super', 'switch', 'this', 'throw',\n        'true', 'try', 'typeof', 'var', 'void', 'while', 'with', 'yield']);\n    static _alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890$_'.split('');\n    _value = 0;\n    constructor(prefix) {\n        this.prefix = prefix;\n    }\n    next(isNameTaken) {\n        const candidate = this.prefix + ShortIdent.convert(this._value);\n        this._value++;\n        if (ShortIdent._keywords.has(candidate) || /^[_0-9]/.test(candidate) || isNameTaken?.(candidate)) {\n            // try again\n            return this.next(isNameTaken);\n        }\n        return candidate;\n    }\n    static convert(n) {\n        const base = this._alphabet.length;\n        let result = '';\n        do {\n            const rest = n % base;\n            result += this._alphabet[rest];\n            n = (n / base) | 0;\n        } while (n > 0);\n        return result;\n    }\n}\nvar FieldType;\n(function (FieldType) {\n    FieldType[FieldType[\"Public\"] = 0] = \"Public\";\n    FieldType[FieldType[\"Protected\"] = 1] = \"Protected\";\n    FieldType[FieldType[\"Private\"] = 2] = \"Private\";\n})(FieldType || (FieldType = {}));\nclass ClassData {\n    fileName;\n    node;\n    fields = new Map();\n    replacements;\n    parent;\n    children;\n    constructor(fileName, node) {\n        // analyse all fields (properties and methods). Find usages of all protected and\n        // private ones and keep track of all public ones (to prevent naming collisions)\n        this.fileName = fileName;\n        this.node = node;\n        const candidates = [];\n        for (const member of node.members) {\n            if (typescript_1.default.isMethodDeclaration(member)) {\n                // method `foo() {}`\n                candidates.push(member);\n            }\n            else if (typescript_1.default.isPropertyDeclaration(member)) {\n                // property `foo = 234`\n                candidates.push(member);\n            }\n            else if (typescript_1.default.isGetAccessor(member)) {\n                // getter: `get foo() { ... }`\n                candidates.push(member);\n            }\n            else if (typescript_1.default.isSetAccessor(member)) {\n                // setter: `set foo() { ... }`\n                candidates.push(member);\n            }\n            else if (typescript_1.default.isConstructorDeclaration(member)) {\n                // constructor-prop:`constructor(private foo) {}`\n                for (const param of member.parameters) {\n                    if (hasModifier(param, typescript_1.default.SyntaxKind.PrivateKeyword)\n                        || hasModifier(param, typescript_1.default.SyntaxKind.ProtectedKeyword)\n                        || hasModifier(param, typescript_1.default.SyntaxKind.PublicKeyword)\n                        || hasModifier(param, typescript_1.default.SyntaxKind.ReadonlyKeyword)) {\n                        candidates.push(param);\n                    }\n                }\n            }\n        }\n        for (const member of candidates) {\n            const ident = ClassData._getMemberName(member);\n            if (!ident) {\n                continue;\n            }\n            const type = ClassData._getFieldType(member);\n            this.fields.set(ident, { type, pos: member.name.getStart() });\n        }\n    }\n    static _getMemberName(node) {\n        if (!node.name) {\n            return undefined;\n        }\n        const { name } = node;\n        let ident = name.getText();\n        if (name.kind === typescript_1.default.SyntaxKind.ComputedPropertyName) {\n            if (name.expression.kind !== typescript_1.default.SyntaxKind.StringLiteral) {\n                // unsupported: [Symbol.foo] or [abc + 'field']\n                return;\n            }\n            // ['foo']\n            ident = name.expression.getText().slice(1, -1);\n        }\n        return ident;\n    }\n    static _getFieldType(node) {\n        if (hasModifier(node, typescript_1.default.SyntaxKind.PrivateKeyword)) {\n            return 2 /* FieldType.Private */;\n        }\n        else if (hasModifier(node, typescript_1.default.SyntaxKind.ProtectedKeyword)) {\n            return 1 /* FieldType.Protected */;\n        }\n        else {\n            return 0 /* FieldType.Public */;\n        }\n    }\n    static _shouldMangle(type) {\n        return type === 2 /* FieldType.Private */\n            || type === 1 /* FieldType.Protected */;\n    }\n    static makeImplicitPublicActuallyPublic(data, reportViolation) {\n        // TS-HACK\n        // A subtype can make an inherited protected field public. To prevent accidential\n        // mangling of public fields we mark the original (protected) fields as public...\n        for (const [name, info] of data.fields) {\n            if (info.type !== 0 /* FieldType.Public */) {\n                continue;\n            }\n            let parent = data.parent;\n            while (parent) {\n                if (parent.fields.get(name)?.type === 1 /* FieldType.Protected */) {\n                    const parentPos = parent.node.getSourceFile().getLineAndCharacterOfPosition(parent.fields.get(name).pos);\n                    const infoPos = data.node.getSourceFile().getLineAndCharacterOfPosition(info.pos);\n                    reportViolation(name, `'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`);\n                    parent.fields.get(name).type = 0 /* FieldType.Public */;\n                }\n                parent = parent.parent;\n            }\n        }\n    }\n    static fillInReplacement(data) {\n        if (data.replacements) {\n            // already done\n            return;\n        }\n        // fill in parents first\n        if (data.parent) {\n            ClassData.fillInReplacement(data.parent);\n        }\n        data.replacements = new Map();\n        const isNameTaken = (name) => {\n            // locally taken\n            if (data._isNameTaken(name)) {\n                return true;\n            }\n            // parents\n            let parent = data.parent;\n            while (parent) {\n                if (parent._isNameTaken(name)) {\n                    return true;\n                }\n                parent = parent.parent;\n            }\n            // children\n            if (data.children) {\n                const stack = [...data.children];\n                while (stack.length) {\n                    const node = stack.pop();\n                    if (node._isNameTaken(name)) {\n                        return true;\n                    }\n                    if (node.children) {\n                        stack.push(...node.children);\n                    }\n                }\n            }\n            return false;\n        };\n        const identPool = new ShortIdent('');\n        for (const [name, info] of data.fields) {\n            if (ClassData._shouldMangle(info.type)) {\n                const shortName = identPool.next(isNameTaken);\n                data.replacements.set(name, shortName);\n            }\n        }\n    }\n    // a name is taken when a field that doesn't get mangled exists or\n    // when the name is already in use for replacement\n    _isNameTaken(name) {\n        if (this.fields.has(name) && !ClassData._shouldMangle(this.fields.get(name).type)) {\n            // public field\n            return true;\n        }\n        if (this.replacements) {\n            for (const shortName of this.replacements.values()) {\n                if (shortName === name) {\n                    // replaced already (happens wih super types)\n                    return true;\n                }\n            }\n        }\n        if (isNameTakenInFile(this.node, name)) {\n            return true;\n        }\n        return false;\n    }\n    lookupShortName(name) {\n        let value = this.replacements.get(name);\n        let parent = this.parent;\n        while (parent) {\n            if (parent.replacements.has(name) && parent.fields.get(name)?.type === 1 /* FieldType.Protected */) {\n                value = parent.replacements.get(name) ?? value;\n            }\n            parent = parent.parent;\n        }\n        return value;\n    }\n    // --- parent chaining\n    addChild(child) {\n        this.children ??= [];\n        this.children.push(child);\n        child.parent = this;\n    }\n}\nfunction isNameTakenInFile(node, name) {\n    const identifiers = node.getSourceFile().identifiers;\n    if (identifiers instanceof Map) {\n        if (identifiers.has(name)) {\n            return true;\n        }\n    }\n    return false;\n}\nconst skippedExportMangledFiles = [\n    // Build\n    'css.build',\n    // Monaco\n    'editorCommon',\n    'editorOptions',\n    'editorZoom',\n    'standaloneEditor',\n    'standaloneEnums',\n    'standaloneLanguages',\n    // Generated\n    'extensionsApiProposals',\n    // Module passed around as type\n    'pfs',\n    // entry points\n    ...[\n        buildfile.workerEditor,\n        buildfile.workerExtensionHost,\n        buildfile.workerNotebook,\n        buildfile.workerLanguageDetection,\n        buildfile.workerLocalFileSearch,\n        buildfile.workerProfileAnalysis,\n        buildfile.workerOutputLinks,\n        buildfile.workerBackgroundTokenization,\n        buildfile.workbenchDesktop,\n        buildfile.workbenchWeb,\n        buildfile.code,\n        buildfile.codeWeb\n    ].flat().map(x => x.name),\n];\nconst skippedExportMangledProjects = [\n    // Test projects\n    'vscode-api-tests',\n    // These projects use webpack to dynamically rewrite imports, which messes up our mangling\n    'configuration-editing',\n    'microsoft-authentication',\n    'github-authentication',\n    'html-language-features/server',\n];\nconst skippedExportMangledSymbols = [\n    // Don't mangle extension entry points\n    'activate',\n    'deactivate',\n];\nclass DeclarationData {\n    fileName;\n    node;\n    replacementName;\n    constructor(fileName, node, fileIdents) {\n        this.fileName = fileName;\n        this.node = node;\n        // Todo: generate replacement names based on usage count, with more used names getting shorter identifiers\n        this.replacementName = fileIdents.next();\n    }\n    getLocations(service) {\n        if (typescript_1.default.isVariableDeclaration(this.node)) {\n            // If the const aliases any types, we need to rename those too\n            const definitionResult = service.getDefinitionAndBoundSpan(this.fileName, this.node.name.getStart());\n            if (definitionResult?.definitions && definitionResult.definitions.length > 1) {\n                return definitionResult.definitions.map(x => ({ fileName: x.fileName, offset: x.textSpan.start }));\n            }\n        }\n        return [{\n                fileName: this.fileName,\n                offset: this.node.name.getStart()\n            }];\n    }\n    shouldMangle(newName) {\n        const currentName = this.node.name.getText();\n        if (currentName.startsWith('$') || skippedExportMangledSymbols.includes(currentName)) {\n            return false;\n        }\n        // New name is longer the existing one :'(\n        if (newName.length >= currentName.length) {\n            return false;\n        }\n        // Don't mangle functions we've explicitly opted out\n        if (this.node.getFullText().includes('@skipMangle')) {\n            return false;\n        }\n        return true;\n    }\n}\n/**\n * TypeScript2TypeScript transformer that mangles all private and protected fields\n *\n * 1. Collect all class fields (properties, methods)\n * 2. Collect all sub and super-type relations between classes\n * 3. Compute replacement names for each field\n * 4. Lookup rename locations for these fields\n * 5. Prepare and apply edits\n */\nclass Mangler {\n    projectPath;\n    log;\n    config;\n    allClassDataByKey = new Map();\n    allExportedSymbols = new Set();\n    renameWorkerPool;\n    constructor(projectPath, log = () => { }, config) {\n        this.projectPath = projectPath;\n        this.log = log;\n        this.config = config;\n        this.renameWorkerPool = workerpool_1.default.pool(path_1.default.join(__dirname, 'renameWorker.js'), {\n            maxWorkers: 4,\n            minWorkers: 'max'\n        });\n    }\n    async computeNewFileContents(strictImplicitPublicHandling) {\n        const service = typescript_1.default.createLanguageService(new staticLanguageServiceHost_1.StaticLanguageServiceHost(this.projectPath));\n        // STEP:\n        // - Find all classes and their field info.\n        // - Find exported symbols.\n        const fileIdents = new ShortIdent('$');\n        const visit = (node) => {\n            if (this.config.manglePrivateFields) {\n                if (typescript_1.default.isClassDeclaration(node) || typescript_1.default.isClassExpression(node)) {\n                    const anchor = node.name ?? node;\n                    const key = `${node.getSourceFile().fileName}|${anchor.getStart()}`;\n                    if (this.allClassDataByKey.has(key)) {\n                        throw new Error('DUPE?');\n                    }\n                    this.allClassDataByKey.set(key, new ClassData(node.getSourceFile().fileName, node));\n                }\n            }\n            if (this.config.mangleExports) {\n                // Find exported classes, functions, and vars\n                if ((\n                // Exported class\n                typescript_1.default.isClassDeclaration(node)\n                    && hasModifier(node, typescript_1.default.SyntaxKind.ExportKeyword)\n                    && node.name) || (\n                // Exported function\n                typescript_1.default.isFunctionDeclaration(node)\n                    && typescript_1.default.isSourceFile(node.parent)\n                    && hasModifier(node, typescript_1.default.SyntaxKind.ExportKeyword)\n                    && node.name && node.body // On named function and not on the overload\n                ) || (\n                // Exported variable\n                typescript_1.default.isVariableDeclaration(node)\n                    && hasModifier(node.parent.parent, typescript_1.default.SyntaxKind.ExportKeyword) // Variable statement is exported\n                    && typescript_1.default.isSourceFile(node.parent.parent.parent))\n                // Disabled for now because we need to figure out how to handle\n                // enums that are used in monaco or extHost interfaces.\n                /* || (\n                    // Exported enum\n                    ts.isEnumDeclaration(node)\n                    && ts.isSourceFile(node.parent)\n                    && hasModifier(node, ts.SyntaxKind.ExportKeyword)\n                    && !hasModifier(node, ts.SyntaxKind.ConstKeyword) // Don't bother mangling const enums because these are inlined\n                    && node.name\n                */\n                ) {\n                    if (isInAmbientContext(node)) {\n                        return;\n                    }\n                    this.allExportedSymbols.add(new DeclarationData(node.getSourceFile().fileName, node, fileIdents));\n                }\n            }\n            typescript_1.default.forEachChild(node, visit);\n        };\n        for (const file of service.getProgram().getSourceFiles()) {\n            if (!file.isDeclarationFile) {\n                typescript_1.default.forEachChild(file, visit);\n            }\n        }\n        this.log(`Done collecting. Classes: ${this.allClassDataByKey.size}. Exported symbols: ${this.allExportedSymbols.size}`);\n        //  STEP: connect sub and super-types\n        const setupParents = (data) => {\n            const extendsClause = data.node.heritageClauses?.find(h => h.token === typescript_1.default.SyntaxKind.ExtendsKeyword);\n            if (!extendsClause) {\n                // no EXTENDS-clause\n                return;\n            }\n            const info = service.getDefinitionAtPosition(data.fileName, extendsClause.types[0].expression.getEnd());\n            if (!info || info.length === 0) {\n                // throw new Error('SUPER type not found');\n                return;\n            }\n            if (info.length !== 1) {\n                // inherits from declared/library type\n                return;\n            }\n            const [definition] = info;\n            const key = `${definition.fileName}|${definition.textSpan.start}`;\n            const parent = this.allClassDataByKey.get(key);\n            if (!parent) {\n                // throw new Error(`SUPER type not found: ${key}`);\n                return;\n            }\n            parent.addChild(data);\n        };\n        for (const data of this.allClassDataByKey.values()) {\n            setupParents(data);\n        }\n        //  STEP: make implicit public (actually protected) field really public\n        const violations = new Map();\n        let violationsCauseFailure = false;\n        for (const data of this.allClassDataByKey.values()) {\n            ClassData.makeImplicitPublicActuallyPublic(data, (name, what, why) => {\n                const arr = violations.get(what);\n                if (arr) {\n                    arr.push(why);\n                }\n                else {\n                    violations.set(what, [why]);\n                }\n                if (strictImplicitPublicHandling && !strictImplicitPublicHandling.has(name)) {\n                    violationsCauseFailure = true;\n                }\n            });\n        }\n        for (const [why, whys] of violations) {\n            this.log(`WARN: ${why} became PUBLIC because of: ${whys.join(' , ')}`);\n        }\n        if (violationsCauseFailure) {\n            const message = 'Protected fields have been made PUBLIC. This hurts minification and is therefore not allowed. Review the WARN messages further above';\n            this.log(`ERROR: ${message}`);\n            throw new Error(message);\n        }\n        // STEP: compute replacement names for each class\n        for (const data of this.allClassDataByKey.values()) {\n            ClassData.fillInReplacement(data);\n        }\n        this.log(`Done creating class replacements`);\n        // STEP: prepare rename edits\n        this.log(`Starting prepare rename edits`);\n        const editsByFile = new Map();\n        const appendEdit = (fileName, edit) => {\n            const edits = editsByFile.get(fileName);\n            if (!edits) {\n                editsByFile.set(fileName, [edit]);\n            }\n            else {\n                edits.push(edit);\n            }\n        };\n        const appendRename = (newText, loc) => {\n            appendEdit(loc.fileName, {\n                newText: (loc.prefixText || '') + newText + (loc.suffixText || ''),\n                offset: loc.textSpan.start,\n                length: loc.textSpan.length\n            });\n        };\n        const renameResults = [];\n        const queueRename = (fileName, pos, newName) => {\n            renameResults.push(Promise.resolve(this.renameWorkerPool.exec('findRenameLocations', [this.projectPath, fileName, pos]))\n                .then((locations) => ({ newName, locations })));\n        };\n        for (const data of this.allClassDataByKey.values()) {\n            if (hasModifier(data.node, typescript_1.default.SyntaxKind.DeclareKeyword)) {\n                continue;\n            }\n            fields: for (const [name, info] of data.fields) {\n                if (!ClassData._shouldMangle(info.type)) {\n                    continue fields;\n                }\n                // TS-HACK: protected became public via 'some' child\n                // and because of that we might need to ignore this now\n                let parent = data.parent;\n                while (parent) {\n                    if (parent.fields.get(name)?.type === 0 /* FieldType.Public */) {\n                        continue fields;\n                    }\n                    parent = parent.parent;\n                }\n                const newName = data.lookupShortName(name);\n                queueRename(data.fileName, info.pos, newName);\n            }\n        }\n        for (const data of this.allExportedSymbols.values()) {\n            if (data.fileName.endsWith('.d.ts')\n                || skippedExportMangledProjects.some(proj => data.fileName.includes(proj))\n                || skippedExportMangledFiles.some(file => data.fileName.endsWith(file + '.ts'))) {\n                continue;\n            }\n            if (!data.shouldMangle(data.replacementName)) {\n                continue;\n            }\n            const newText = data.replacementName;\n            for (const { fileName, offset } of data.getLocations(service)) {\n                queueRename(fileName, offset, newText);\n            }\n        }\n        await Promise.all(renameResults).then((result) => {\n            for (const { newName, locations } of result) {\n                for (const loc of locations) {\n                    appendRename(newName, loc);\n                }\n            }\n        });\n        await this.renameWorkerPool.terminate();\n        this.log(`Done preparing edits: ${editsByFile.size} files`);\n        // STEP: apply all rename edits (per file)\n        const result = new Map();\n        let savedBytes = 0;\n        for (const item of service.getProgram().getSourceFiles()) {\n            const { mapRoot, sourceRoot } = service.getProgram().getCompilerOptions();\n            const projectDir = path_1.default.dirname(this.projectPath);\n            const sourceMapRoot = mapRoot ?? (0, url_1.pathToFileURL)(sourceRoot ?? projectDir).toString();\n            // source maps\n            let generator;\n            let newFullText;\n            const edits = editsByFile.get(item.fileName);\n            if (!edits) {\n                // just copy\n                newFullText = item.getFullText();\n            }\n            else {\n                // source map generator\n                const relativeFileName = normalize(path_1.default.relative(projectDir, item.fileName));\n                const mappingsByLine = new Map();\n                // apply renames\n                edits.sort((a, b) => b.offset - a.offset);\n                const characters = item.getFullText().split('');\n                let lastEdit;\n                for (const edit of edits) {\n                    if (lastEdit && lastEdit.offset === edit.offset) {\n                        //\n                        if (lastEdit.length !== edit.length || lastEdit.newText !== edit.newText) {\n                            this.log('ERROR: Overlapping edit', item.fileName, edit.offset, edits);\n                            throw new Error('OVERLAPPING edit');\n                        }\n                        else {\n                            continue;\n                        }\n                    }\n                    lastEdit = edit;\n                    const mangledName = characters.splice(edit.offset, edit.length, edit.newText).join('');\n                    savedBytes += mangledName.length - edit.newText.length;\n                    // source maps\n                    const pos = item.getLineAndCharacterOfPosition(edit.offset);\n                    let mappings = mappingsByLine.get(pos.line);\n                    if (!mappings) {\n                        mappings = [];\n                        mappingsByLine.set(pos.line, mappings);\n                    }\n                    mappings.unshift({\n                        source: relativeFileName,\n                        original: { line: pos.line + 1, column: pos.character },\n                        generated: { line: pos.line + 1, column: pos.character },\n                        name: mangledName\n                    }, {\n                        source: relativeFileName,\n                        original: { line: pos.line + 1, column: pos.character + edit.length },\n                        generated: { line: pos.line + 1, column: pos.character + edit.newText.length },\n                    });\n                }\n                // source map generation, make sure to get mappings per line correct\n                generator = new source_map_1.SourceMapGenerator({ file: path_1.default.basename(item.fileName), sourceRoot: sourceMapRoot });\n                generator.setSourceContent(relativeFileName, item.getFullText());\n                for (const [, mappings] of mappingsByLine) {\n                    let lineDelta = 0;\n                    for (const mapping of mappings) {\n                        generator.addMapping({\n                            ...mapping,\n                            generated: { line: mapping.generated.line, column: mapping.generated.column - lineDelta }\n                        });\n                        lineDelta += mapping.original.column - mapping.generated.column;\n                    }\n                }\n                newFullText = characters.join('');\n            }\n            result.set(item.fileName, { out: newFullText, sourceMap: generator?.toString() });\n        }\n        service.dispose();\n        this.renameWorkerPool.terminate();\n        this.log(`Done: ${savedBytes / 1000}kb saved, memory-usage: ${JSON.stringify(node_v8_1.default.getHeapStatistics())}`);\n        return result;\n    }\n}\nexports.Mangler = Mangler;\n// --- ast utils\nfunction hasModifier(node, kind) {\n    const modifiers = typescript_1.default.canHaveModifiers(node) ? typescript_1.default.getModifiers(node) : undefined;\n    return Boolean(modifiers?.find(mode => mode.kind === kind));\n}\nfunction isInAmbientContext(node) {\n    for (let p = node.parent; p; p = p.parent) {\n        if (typescript_1.default.isModuleDeclaration(p)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction normalize(path) {\n    return path.replace(/\\\\/g, '/');\n}\nasync function _run() {\n    const root = path_1.default.join(__dirname, '..', '..', '..');\n    const projectBase = path_1.default.join(root, 'src');\n    const projectPath = path_1.default.join(projectBase, 'tsconfig.json');\n    const newProjectBase = path_1.default.join(path_1.default.dirname(projectBase), path_1.default.basename(projectBase) + '2');\n    fs_1.default.cpSync(projectBase, newProjectBase, { recursive: true });\n    const mangler = new Mangler(projectPath, console.log, {\n        mangleExports: true,\n        manglePrivateFields: true,\n    });\n    for (const [fileName, contents] of await mangler.computeNewFileContents(new Set(['saveState']))) {\n        const newFilePath = path_1.default.join(newProjectBase, path_1.default.relative(projectBase, fileName));\n        await fs_1.default.promises.mkdir(path_1.default.dirname(newFilePath), { recursive: true });\n        await fs_1.default.promises.writeFile(newFilePath, contents.out);\n        if (contents.sourceMap) {\n            await fs_1.default.promises.writeFile(newFilePath + '.map', contents.sourceMap);\n        }\n    }\n}\nif (__filename === process_1.argv[1]) {\n    _run();\n}\n//# sourceMappingURL=index.js.map"
  },
  {
    "path": "build/lib/mangle/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport v8 from 'node:v8';\nimport fs from 'fs';\nimport path from 'path';\nimport { argv } from 'process';\nimport { Mapping, SourceMapGenerator } from 'source-map';\nimport ts from 'typescript';\nimport { pathToFileURL } from 'url';\nimport workerpool from 'workerpool';\nimport { StaticLanguageServiceHost } from './staticLanguageServiceHost';\nconst buildfile = require('../../buildfile');\n\nclass ShortIdent {\n\n\tprivate static _keywords = new Set(['await', 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger',\n\t\t'default', 'delete', 'do', 'else', 'export', 'extends', 'false', 'finally', 'for', 'function', 'if',\n\t\t'import', 'in', 'instanceof', 'let', 'new', 'null', 'return', 'static', 'super', 'switch', 'this', 'throw',\n\t\t'true', 'try', 'typeof', 'var', 'void', 'while', 'with', 'yield']);\n\n\tprivate static _alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890$_'.split('');\n\n\tprivate _value = 0;\n\n\tconstructor(\n\t\tprivate readonly prefix: string\n\t) { }\n\n\tnext(isNameTaken?: (name: string) => boolean): string {\n\t\tconst candidate = this.prefix + ShortIdent.convert(this._value);\n\t\tthis._value++;\n\t\tif (ShortIdent._keywords.has(candidate) || /^[_0-9]/.test(candidate) || isNameTaken?.(candidate)) {\n\t\t\t// try again\n\t\t\treturn this.next(isNameTaken);\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tprivate static convert(n: number): string {\n\t\tconst base = this._alphabet.length;\n\t\tlet result = '';\n\t\tdo {\n\t\t\tconst rest = n % base;\n\t\t\tresult += this._alphabet[rest];\n\t\t\tn = (n / base) | 0;\n\t\t} while (n > 0);\n\t\treturn result;\n\t}\n}\n\nconst enum FieldType {\n\tPublic,\n\tProtected,\n\tPrivate\n}\n\nclass ClassData {\n\n\tfields = new Map<string, { type: FieldType; pos: number }>();\n\n\tprivate replacements: Map<string, string> | undefined;\n\n\tparent: ClassData | undefined;\n\tchildren: ClassData[] | undefined;\n\n\tconstructor(\n\t\treadonly fileName: string,\n\t\treadonly node: ts.ClassDeclaration | ts.ClassExpression,\n\t) {\n\t\t// analyse all fields (properties and methods). Find usages of all protected and\n\t\t// private ones and keep track of all public ones (to prevent naming collisions)\n\n\t\tconst candidates: (ts.NamedDeclaration)[] = [];\n\t\tfor (const member of node.members) {\n\t\t\tif (ts.isMethodDeclaration(member)) {\n\t\t\t\t// method `foo() {}`\n\t\t\t\tcandidates.push(member);\n\n\t\t\t} else if (ts.isPropertyDeclaration(member)) {\n\t\t\t\t// property `foo = 234`\n\t\t\t\tcandidates.push(member);\n\n\t\t\t} else if (ts.isGetAccessor(member)) {\n\t\t\t\t// getter: `get foo() { ... }`\n\t\t\t\tcandidates.push(member);\n\n\t\t\t} else if (ts.isSetAccessor(member)) {\n\t\t\t\t// setter: `set foo() { ... }`\n\t\t\t\tcandidates.push(member);\n\n\t\t\t} else if (ts.isConstructorDeclaration(member)) {\n\t\t\t\t// constructor-prop:`constructor(private foo) {}`\n\t\t\t\tfor (const param of member.parameters) {\n\t\t\t\t\tif (hasModifier(param, ts.SyntaxKind.PrivateKeyword)\n\t\t\t\t\t\t|| hasModifier(param, ts.SyntaxKind.ProtectedKeyword)\n\t\t\t\t\t\t|| hasModifier(param, ts.SyntaxKind.PublicKeyword)\n\t\t\t\t\t\t|| hasModifier(param, ts.SyntaxKind.ReadonlyKeyword)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcandidates.push(param);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const member of candidates) {\n\t\t\tconst ident = ClassData._getMemberName(member);\n\t\t\tif (!ident) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst type = ClassData._getFieldType(member);\n\t\t\tthis.fields.set(ident, { type, pos: member.name!.getStart() });\n\t\t}\n\t}\n\n\tprivate static _getMemberName(node: ts.NamedDeclaration): string | undefined {\n\t\tif (!node.name) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst { name } = node;\n\t\tlet ident = name.getText();\n\t\tif (name.kind === ts.SyntaxKind.ComputedPropertyName) {\n\t\t\tif (name.expression.kind !== ts.SyntaxKind.StringLiteral) {\n\t\t\t\t// unsupported: [Symbol.foo] or [abc + 'field']\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// ['foo']\n\t\t\tident = name.expression.getText().slice(1, -1);\n\t\t}\n\n\t\treturn ident;\n\t}\n\n\tprivate static _getFieldType(node: ts.Node): FieldType {\n\t\tif (hasModifier(node, ts.SyntaxKind.PrivateKeyword)) {\n\t\t\treturn FieldType.Private;\n\t\t} else if (hasModifier(node, ts.SyntaxKind.ProtectedKeyword)) {\n\t\t\treturn FieldType.Protected;\n\t\t} else {\n\t\t\treturn FieldType.Public;\n\t\t}\n\t}\n\n\tstatic _shouldMangle(type: FieldType): boolean {\n\t\treturn type === FieldType.Private\n\t\t\t|| type === FieldType.Protected\n\t\t\t;\n\t}\n\n\tstatic makeImplicitPublicActuallyPublic(data: ClassData, reportViolation: (name: string, what: string, why: string) => void): void {\n\t\t// TS-HACK\n\t\t// A subtype can make an inherited protected field public. To prevent accidential\n\t\t// mangling of public fields we mark the original (protected) fields as public...\n\t\tfor (const [name, info] of data.fields) {\n\t\t\tif (info.type !== FieldType.Public) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet parent: ClassData | undefined = data.parent;\n\t\t\twhile (parent) {\n\t\t\t\tif (parent.fields.get(name)?.type === FieldType.Protected) {\n\t\t\t\t\tconst parentPos = parent.node.getSourceFile().getLineAndCharacterOfPosition(parent.fields.get(name)!.pos);\n\t\t\t\t\tconst infoPos = data.node.getSourceFile().getLineAndCharacterOfPosition(info.pos);\n\t\t\t\t\treportViolation(name, `'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`);\n\n\t\t\t\t\tparent.fields.get(name)!.type = FieldType.Public;\n\t\t\t\t}\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic fillInReplacement(data: ClassData) {\n\n\t\tif (data.replacements) {\n\t\t\t// already done\n\t\t\treturn;\n\t\t}\n\n\t\t// fill in parents first\n\t\tif (data.parent) {\n\t\t\tClassData.fillInReplacement(data.parent);\n\t\t}\n\n\t\tdata.replacements = new Map();\n\n\t\tconst isNameTaken = (name: string) => {\n\t\t\t// locally taken\n\t\t\tif (data._isNameTaken(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// parents\n\t\t\tlet parent: ClassData | undefined = data.parent;\n\t\t\twhile (parent) {\n\t\t\t\tif (parent._isNameTaken(name)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\n\t\t\t// children\n\t\t\tif (data.children) {\n\t\t\t\tconst stack = [...data.children];\n\t\t\t\twhile (stack.length) {\n\t\t\t\t\tconst node = stack.pop()!;\n\t\t\t\t\tif (node._isNameTaken(name)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (node.children) {\n\t\t\t\t\t\tstack.push(...node.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t\tconst identPool = new ShortIdent('');\n\n\t\tfor (const [name, info] of data.fields) {\n\t\t\tif (ClassData._shouldMangle(info.type)) {\n\t\t\t\tconst shortName = identPool.next(isNameTaken);\n\t\t\t\tdata.replacements.set(name, shortName);\n\t\t\t}\n\t\t}\n\t}\n\n\t// a name is taken when a field that doesn't get mangled exists or\n\t// when the name is already in use for replacement\n\tprivate _isNameTaken(name: string) {\n\t\tif (this.fields.has(name) && !ClassData._shouldMangle(this.fields.get(name)!.type)) {\n\t\t\t// public field\n\t\t\treturn true;\n\t\t}\n\t\tif (this.replacements) {\n\t\t\tfor (const shortName of this.replacements.values()) {\n\t\t\t\tif (shortName === name) {\n\t\t\t\t\t// replaced already (happens wih super types)\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isNameTakenInFile(this.node, name)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tlookupShortName(name: string): string {\n\t\tlet value = this.replacements!.get(name)!;\n\t\tlet parent = this.parent;\n\t\twhile (parent) {\n\t\t\tif (parent.replacements!.has(name) && parent.fields.get(name)?.type === FieldType.Protected) {\n\t\t\t\tvalue = parent.replacements!.get(name)! ?? value;\n\t\t\t}\n\t\t\tparent = parent.parent;\n\t\t}\n\t\treturn value;\n\t}\n\n\t// --- parent chaining\n\n\taddChild(child: ClassData) {\n\t\tthis.children ??= [];\n\t\tthis.children.push(child);\n\t\tchild.parent = this;\n\t}\n}\n\nfunction isNameTakenInFile(node: ts.Node, name: string): boolean {\n\tconst identifiers = (<any>node.getSourceFile()).identifiers;\n\tif (identifiers instanceof Map) {\n\t\tif (identifiers.has(name)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nconst skippedExportMangledFiles = [\n\t// Build\n\t'css.build',\n\n\t// Monaco\n\t'editorCommon',\n\t'editorOptions',\n\t'editorZoom',\n\t'standaloneEditor',\n\t'standaloneEnums',\n\t'standaloneLanguages',\n\n\t// Generated\n\t'extensionsApiProposals',\n\n\t// Module passed around as type\n\t'pfs',\n\n\t// entry points\n\t...[\n\t\tbuildfile.workerEditor,\n\t\tbuildfile.workerExtensionHost,\n\t\tbuildfile.workerNotebook,\n\t\tbuildfile.workerLanguageDetection,\n\t\tbuildfile.workerLocalFileSearch,\n\t\tbuildfile.workerProfileAnalysis,\n\t\tbuildfile.workerOutputLinks,\n\t\tbuildfile.workerBackgroundTokenization,\n\t\tbuildfile.workbenchDesktop,\n\t\tbuildfile.workbenchWeb,\n\t\tbuildfile.code,\n\t\tbuildfile.codeWeb\n\t].flat().map(x => x.name),\n];\n\nconst skippedExportMangledProjects = [\n\t// Test projects\n\t'vscode-api-tests',\n\n\t// These projects use webpack to dynamically rewrite imports, which messes up our mangling\n\t'configuration-editing',\n\t'microsoft-authentication',\n\t'github-authentication',\n\t'html-language-features/server',\n];\n\nconst skippedExportMangledSymbols = [\n\t// Don't mangle extension entry points\n\t'activate',\n\t'deactivate',\n];\n\nclass DeclarationData {\n\n\treadonly replacementName: string;\n\n\tconstructor(\n\t\treadonly fileName: string,\n\t\treadonly node: ts.FunctionDeclaration | ts.ClassDeclaration | ts.EnumDeclaration | ts.VariableDeclaration,\n\t\tfileIdents: ShortIdent,\n\t) {\n\t\t// Todo: generate replacement names based on usage count, with more used names getting shorter identifiers\n\t\tthis.replacementName = fileIdents.next();\n\t}\n\n\tgetLocations(service: ts.LanguageService): Iterable<{ fileName: string; offset: number }> {\n\t\tif (ts.isVariableDeclaration(this.node)) {\n\t\t\t// If the const aliases any types, we need to rename those too\n\t\t\tconst definitionResult = service.getDefinitionAndBoundSpan(this.fileName, this.node.name.getStart());\n\t\t\tif (definitionResult?.definitions && definitionResult.definitions.length > 1) {\n\t\t\t\treturn definitionResult.definitions.map(x => ({ fileName: x.fileName, offset: x.textSpan.start }));\n\t\t\t}\n\t\t}\n\n\t\treturn [{\n\t\t\tfileName: this.fileName,\n\t\t\toffset: this.node.name!.getStart()\n\t\t}];\n\t}\n\n\tshouldMangle(newName: string): boolean {\n\t\tconst currentName = this.node.name!.getText();\n\t\tif (currentName.startsWith('$') || skippedExportMangledSymbols.includes(currentName)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// New name is longer the existing one :'(\n\t\tif (newName.length >= currentName.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Don't mangle functions we've explicitly opted out\n\t\tif (this.node.getFullText().includes('@skipMangle')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n}\n\nexport interface MangleOutput {\n\tout: string;\n\tsourceMap?: string;\n}\n\n/**\n * TypeScript2TypeScript transformer that mangles all private and protected fields\n *\n * 1. Collect all class fields (properties, methods)\n * 2. Collect all sub and super-type relations between classes\n * 3. Compute replacement names for each field\n * 4. Lookup rename locations for these fields\n * 5. Prepare and apply edits\n */\nexport class Mangler {\n\n\tprivate readonly allClassDataByKey = new Map<string, ClassData>();\n\tprivate readonly allExportedSymbols = new Set<DeclarationData>();\n\n\tprivate readonly renameWorkerPool: workerpool.WorkerPool;\n\n\tconstructor(\n\t\tprivate readonly projectPath: string,\n\t\tprivate readonly log: typeof console.log = () => { },\n\t\tprivate readonly config: { readonly manglePrivateFields: boolean; readonly mangleExports: boolean },\n\t) {\n\n\t\tthis.renameWorkerPool = workerpool.pool(path.join(__dirname, 'renameWorker.js'), {\n\t\t\tmaxWorkers: 4,\n\t\t\tminWorkers: 'max'\n\t\t});\n\t}\n\n\tasync computeNewFileContents(strictImplicitPublicHandling?: Set<string>): Promise<Map<string, MangleOutput>> {\n\n\t\tconst service = ts.createLanguageService(new StaticLanguageServiceHost(this.projectPath));\n\n\t\t// STEP:\n\t\t// - Find all classes and their field info.\n\t\t// - Find exported symbols.\n\n\t\tconst fileIdents = new ShortIdent('$');\n\n\t\tconst visit = (node: ts.Node): void => {\n\t\t\tif (this.config.manglePrivateFields) {\n\t\t\t\tif (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {\n\t\t\t\t\tconst anchor = node.name ?? node;\n\t\t\t\t\tconst key = `${node.getSourceFile().fileName}|${anchor.getStart()}`;\n\t\t\t\t\tif (this.allClassDataByKey.has(key)) {\n\t\t\t\t\t\tthrow new Error('DUPE?');\n\t\t\t\t\t}\n\t\t\t\t\tthis.allClassDataByKey.set(key, new ClassData(node.getSourceFile().fileName, node));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.config.mangleExports) {\n\t\t\t\t// Find exported classes, functions, and vars\n\t\t\t\tif (\n\t\t\t\t\t(\n\t\t\t\t\t\t// Exported class\n\t\t\t\t\t\tts.isClassDeclaration(node)\n\t\t\t\t\t\t&& hasModifier(node, ts.SyntaxKind.ExportKeyword)\n\t\t\t\t\t\t&& node.name\n\t\t\t\t\t) || (\n\t\t\t\t\t\t// Exported function\n\t\t\t\t\t\tts.isFunctionDeclaration(node)\n\t\t\t\t\t\t&& ts.isSourceFile(node.parent)\n\t\t\t\t\t\t&& hasModifier(node, ts.SyntaxKind.ExportKeyword)\n\t\t\t\t\t\t&& node.name && node.body // On named function and not on the overload\n\t\t\t\t\t) || (\n\t\t\t\t\t\t// Exported variable\n\t\t\t\t\t\tts.isVariableDeclaration(node)\n\t\t\t\t\t\t&& hasModifier(node.parent.parent, ts.SyntaxKind.ExportKeyword) // Variable statement is exported\n\t\t\t\t\t\t&& ts.isSourceFile(node.parent.parent.parent)\n\t\t\t\t\t)\n\n\t\t\t\t\t// Disabled for now because we need to figure out how to handle\n\t\t\t\t\t// enums that are used in monaco or extHost interfaces.\n\t\t\t\t\t/* || (\n\t\t\t\t\t\t// Exported enum\n\t\t\t\t\t\tts.isEnumDeclaration(node)\n\t\t\t\t\t\t&& ts.isSourceFile(node.parent)\n\t\t\t\t\t\t&& hasModifier(node, ts.SyntaxKind.ExportKeyword)\n\t\t\t\t\t\t&& !hasModifier(node, ts.SyntaxKind.ConstKeyword) // Don't bother mangling const enums because these are inlined\n\t\t\t\t\t\t&& node.name\n\t\t\t\t\t*/\n\t\t\t\t) {\n\t\t\t\t\tif (isInAmbientContext(node)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.allExportedSymbols.add(new DeclarationData(node.getSourceFile().fileName, node, fileIdents));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tts.forEachChild(node, visit);\n\t\t};\n\n\t\tfor (const file of service.getProgram()!.getSourceFiles()) {\n\t\t\tif (!file.isDeclarationFile) {\n\t\t\t\tts.forEachChild(file, visit);\n\t\t\t}\n\t\t}\n\t\tthis.log(`Done collecting. Classes: ${this.allClassDataByKey.size}. Exported symbols: ${this.allExportedSymbols.size}`);\n\n\n\t\t//  STEP: connect sub and super-types\n\n\t\tconst setupParents = (data: ClassData) => {\n\t\t\tconst extendsClause = data.node.heritageClauses?.find(h => h.token === ts.SyntaxKind.ExtendsKeyword);\n\t\t\tif (!extendsClause) {\n\t\t\t\t// no EXTENDS-clause\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst info = service.getDefinitionAtPosition(data.fileName, extendsClause.types[0].expression.getEnd());\n\t\t\tif (!info || info.length === 0) {\n\t\t\t\t// throw new Error('SUPER type not found');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (info.length !== 1) {\n\t\t\t\t// inherits from declared/library type\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [definition] = info;\n\t\t\tconst key = `${definition.fileName}|${definition.textSpan.start}`;\n\t\t\tconst parent = this.allClassDataByKey.get(key);\n\t\t\tif (!parent) {\n\t\t\t\t// throw new Error(`SUPER type not found: ${key}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparent.addChild(data);\n\t\t};\n\t\tfor (const data of this.allClassDataByKey.values()) {\n\t\t\tsetupParents(data);\n\t\t}\n\n\t\t//  STEP: make implicit public (actually protected) field really public\n\t\tconst violations = new Map<string, string[]>();\n\t\tlet violationsCauseFailure = false;\n\t\tfor (const data of this.allClassDataByKey.values()) {\n\t\t\tClassData.makeImplicitPublicActuallyPublic(data, (name: string, what, why) => {\n\t\t\t\tconst arr = violations.get(what);\n\t\t\t\tif (arr) {\n\t\t\t\t\tarr.push(why);\n\t\t\t\t} else {\n\t\t\t\t\tviolations.set(what, [why]);\n\t\t\t\t}\n\n\t\t\t\tif (strictImplicitPublicHandling && !strictImplicitPublicHandling.has(name)) {\n\t\t\t\t\tviolationsCauseFailure = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfor (const [why, whys] of violations) {\n\t\t\tthis.log(`WARN: ${why} became PUBLIC because of: ${whys.join(' , ')}`);\n\t\t}\n\t\tif (violationsCauseFailure) {\n\t\t\tconst message = 'Protected fields have been made PUBLIC. This hurts minification and is therefore not allowed. Review the WARN messages further above';\n\t\t\tthis.log(`ERROR: ${message}`);\n\t\t\tthrow new Error(message);\n\t\t}\n\n\t\t// STEP: compute replacement names for each class\n\t\tfor (const data of this.allClassDataByKey.values()) {\n\t\t\tClassData.fillInReplacement(data);\n\t\t}\n\t\tthis.log(`Done creating class replacements`);\n\n\t\t// STEP: prepare rename edits\n\t\tthis.log(`Starting prepare rename edits`);\n\n\t\ttype Edit = { newText: string; offset: number; length: number };\n\t\tconst editsByFile = new Map<string, Edit[]>();\n\n\t\tconst appendEdit = (fileName: string, edit: Edit) => {\n\t\t\tconst edits = editsByFile.get(fileName);\n\t\t\tif (!edits) {\n\t\t\t\teditsByFile.set(fileName, [edit]);\n\t\t\t} else {\n\t\t\t\tedits.push(edit);\n\t\t\t}\n\t\t};\n\t\tconst appendRename = (newText: string, loc: ts.RenameLocation) => {\n\t\t\tappendEdit(loc.fileName, {\n\t\t\t\tnewText: (loc.prefixText || '') + newText + (loc.suffixText || ''),\n\t\t\t\toffset: loc.textSpan.start,\n\t\t\t\tlength: loc.textSpan.length\n\t\t\t});\n\t\t};\n\n\t\ttype RenameFn = (projectName: string, fileName: string, pos: number) => ts.RenameLocation[];\n\n\t\tconst renameResults: Array<Promise<{ readonly newName: string; readonly locations: readonly ts.RenameLocation[] }>> = [];\n\n\t\tconst queueRename = (fileName: string, pos: number, newName: string) => {\n\t\t\trenameResults.push(Promise.resolve(this.renameWorkerPool.exec<RenameFn>('findRenameLocations', [this.projectPath, fileName, pos]))\n\t\t\t\t.then((locations) => ({ newName, locations })));\n\t\t};\n\n\t\tfor (const data of this.allClassDataByKey.values()) {\n\t\t\tif (hasModifier(data.node, ts.SyntaxKind.DeclareKeyword)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfields: for (const [name, info] of data.fields) {\n\t\t\t\tif (!ClassData._shouldMangle(info.type)) {\n\t\t\t\t\tcontinue fields;\n\t\t\t\t}\n\n\t\t\t\t// TS-HACK: protected became public via 'some' child\n\t\t\t\t// and because of that we might need to ignore this now\n\t\t\t\tlet parent = data.parent;\n\t\t\t\twhile (parent) {\n\t\t\t\t\tif (parent.fields.get(name)?.type === FieldType.Public) {\n\t\t\t\t\t\tcontinue fields;\n\t\t\t\t\t}\n\t\t\t\t\tparent = parent.parent;\n\t\t\t\t}\n\n\t\t\t\tconst newName = data.lookupShortName(name);\n\t\t\t\tqueueRename(data.fileName, info.pos, newName);\n\t\t\t}\n\t\t}\n\n\t\tfor (const data of this.allExportedSymbols.values()) {\n\t\t\tif (data.fileName.endsWith('.d.ts')\n\t\t\t\t|| skippedExportMangledProjects.some(proj => data.fileName.includes(proj))\n\t\t\t\t|| skippedExportMangledFiles.some(file => data.fileName.endsWith(file + '.ts'))\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!data.shouldMangle(data.replacementName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newText = data.replacementName;\n\t\t\tfor (const { fileName, offset } of data.getLocations(service)) {\n\t\t\t\tqueueRename(fileName, offset, newText);\n\t\t\t}\n\t\t}\n\n\t\tawait Promise.all(renameResults).then((result) => {\n\t\t\tfor (const { newName, locations } of result) {\n\t\t\t\tfor (const loc of locations) {\n\t\t\t\t\tappendRename(newName, loc);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tawait this.renameWorkerPool.terminate();\n\n\t\tthis.log(`Done preparing edits: ${editsByFile.size} files`);\n\n\t\t// STEP: apply all rename edits (per file)\n\t\tconst result = new Map<string, MangleOutput>();\n\t\tlet savedBytes = 0;\n\n\t\tfor (const item of service.getProgram()!.getSourceFiles()) {\n\n\t\t\tconst { mapRoot, sourceRoot } = service.getProgram()!.getCompilerOptions();\n\t\t\tconst projectDir = path.dirname(this.projectPath);\n\t\t\tconst sourceMapRoot = mapRoot ?? pathToFileURL(sourceRoot ?? projectDir).toString();\n\n\t\t\t// source maps\n\t\t\tlet generator: SourceMapGenerator | undefined;\n\n\t\t\tlet newFullText: string;\n\t\t\tconst edits = editsByFile.get(item.fileName);\n\t\t\tif (!edits) {\n\t\t\t\t// just copy\n\t\t\t\tnewFullText = item.getFullText();\n\n\t\t\t} else {\n\t\t\t\t// source map generator\n\t\t\t\tconst relativeFileName = normalize(path.relative(projectDir, item.fileName));\n\t\t\t\tconst mappingsByLine = new Map<number, Mapping[]>();\n\n\t\t\t\t// apply renames\n\t\t\t\tedits.sort((a, b) => b.offset - a.offset);\n\t\t\t\tconst characters = item.getFullText().split('');\n\n\t\t\t\tlet lastEdit: Edit | undefined;\n\n\t\t\t\tfor (const edit of edits) {\n\t\t\t\t\tif (lastEdit && lastEdit.offset === edit.offset) {\n\t\t\t\t\t\t//\n\t\t\t\t\t\tif (lastEdit.length !== edit.length || lastEdit.newText !== edit.newText) {\n\t\t\t\t\t\t\tthis.log('ERROR: Overlapping edit', item.fileName, edit.offset, edits);\n\t\t\t\t\t\t\tthrow new Error('OVERLAPPING edit');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlastEdit = edit;\n\t\t\t\t\tconst mangledName = characters.splice(edit.offset, edit.length, edit.newText).join('');\n\t\t\t\t\tsavedBytes += mangledName.length - edit.newText.length;\n\n\t\t\t\t\t// source maps\n\t\t\t\t\tconst pos = item.getLineAndCharacterOfPosition(edit.offset);\n\n\n\t\t\t\t\tlet mappings = mappingsByLine.get(pos.line);\n\t\t\t\t\tif (!mappings) {\n\t\t\t\t\t\tmappings = [];\n\t\t\t\t\t\tmappingsByLine.set(pos.line, mappings);\n\t\t\t\t\t}\n\t\t\t\t\tmappings.unshift({\n\t\t\t\t\t\tsource: relativeFileName,\n\t\t\t\t\t\toriginal: { line: pos.line + 1, column: pos.character },\n\t\t\t\t\t\tgenerated: { line: pos.line + 1, column: pos.character },\n\t\t\t\t\t\tname: mangledName\n\t\t\t\t\t}, {\n\t\t\t\t\t\tsource: relativeFileName,\n\t\t\t\t\t\toriginal: { line: pos.line + 1, column: pos.character + edit.length },\n\t\t\t\t\t\tgenerated: { line: pos.line + 1, column: pos.character + edit.newText.length },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// source map generation, make sure to get mappings per line correct\n\t\t\t\tgenerator = new SourceMapGenerator({ file: path.basename(item.fileName), sourceRoot: sourceMapRoot });\n\t\t\t\tgenerator.setSourceContent(relativeFileName, item.getFullText());\n\t\t\t\tfor (const [, mappings] of mappingsByLine) {\n\t\t\t\t\tlet lineDelta = 0;\n\t\t\t\t\tfor (const mapping of mappings) {\n\t\t\t\t\t\tgenerator.addMapping({\n\t\t\t\t\t\t\t...mapping,\n\t\t\t\t\t\t\tgenerated: { line: mapping.generated.line, column: mapping.generated.column - lineDelta }\n\t\t\t\t\t\t});\n\t\t\t\t\t\tlineDelta += mapping.original.column - mapping.generated.column;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnewFullText = characters.join('');\n\t\t\t}\n\t\t\tresult.set(item.fileName, { out: newFullText, sourceMap: generator?.toString() });\n\t\t}\n\n\t\tservice.dispose();\n\t\tthis.renameWorkerPool.terminate();\n\n\t\tthis.log(`Done: ${savedBytes / 1000}kb saved, memory-usage: ${JSON.stringify(v8.getHeapStatistics())}`);\n\t\treturn result;\n\t}\n}\n\n// --- ast utils\n\nfunction hasModifier(node: ts.Node, kind: ts.SyntaxKind) {\n\tconst modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;\n\treturn Boolean(modifiers?.find(mode => mode.kind === kind));\n}\n\nfunction isInAmbientContext(node: ts.Node): boolean {\n\tfor (let p = node.parent; p; p = p.parent) {\n\t\tif (ts.isModuleDeclaration(p)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction normalize(path: string): string {\n\treturn path.replace(/\\\\/g, '/');\n}\n\nasync function _run() {\n\tconst root = path.join(__dirname, '..', '..', '..');\n\tconst projectBase = path.join(root, 'src');\n\tconst projectPath = path.join(projectBase, 'tsconfig.json');\n\tconst newProjectBase = path.join(path.dirname(projectBase), path.basename(projectBase) + '2');\n\n\tfs.cpSync(projectBase, newProjectBase, { recursive: true });\n\n\tconst mangler = new Mangler(projectPath, console.log, {\n\t\tmangleExports: true,\n\t\tmanglePrivateFields: true,\n\t});\n\tfor (const [fileName, contents] of await mangler.computeNewFileContents(new Set(['saveState']))) {\n\t\tconst newFilePath = path.join(newProjectBase, path.relative(projectBase, fileName));\n\t\tawait fs.promises.mkdir(path.dirname(newFilePath), { recursive: true });\n\t\tawait fs.promises.writeFile(newFilePath, contents.out);\n\t\tif (contents.sourceMap) {\n\t\t\tawait fs.promises.writeFile(newFilePath + '.map', contents.sourceMap);\n\t\t}\n\t}\n}\n\nif (__filename === argv[1]) {\n\t_run();\n}\n"
  },
  {
    "path": "build/lib/mangle/renameWorker.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst typescript_1 = __importDefault(require(\"typescript\"));\nconst workerpool_1 = __importDefault(require(\"workerpool\"));\nconst staticLanguageServiceHost_1 = require(\"./staticLanguageServiceHost\");\nlet service;\nfunction findRenameLocations(projectPath, fileName, position) {\n    if (!service) {\n        service = typescript_1.default.createLanguageService(new staticLanguageServiceHost_1.StaticLanguageServiceHost(projectPath));\n    }\n    return service.findRenameLocations(fileName, position, false, false, {\n        providePrefixAndSuffixTextForRename: true,\n    }) ?? [];\n}\nworkerpool_1.default.worker({\n    findRenameLocations\n});\n//# sourceMappingURL=renameWorker.js.map"
  },
  {
    "path": "build/lib/mangle/renameWorker.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport ts from 'typescript';\nimport workerpool from 'workerpool';\nimport { StaticLanguageServiceHost } from './staticLanguageServiceHost';\n\nlet service: ts.LanguageService | undefined;\n\nfunction findRenameLocations(\n\tprojectPath: string,\n\tfileName: string,\n\tposition: number,\n): readonly ts.RenameLocation[] {\n\tif (!service) {\n\t\tservice = ts.createLanguageService(new StaticLanguageServiceHost(projectPath));\n\t}\n\n\treturn service.findRenameLocations(fileName, position, false, false, {\n\t\tprovidePrefixAndSuffixTextForRename: true,\n\t}) ?? [];\n}\n\nworkerpool.worker({\n\tfindRenameLocations\n});\n"
  },
  {
    "path": "build/lib/mangle/staticLanguageServiceHost.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StaticLanguageServiceHost = void 0;\nconst typescript_1 = __importDefault(require(\"typescript\"));\nconst path_1 = __importDefault(require(\"path\"));\nclass StaticLanguageServiceHost {\n    projectPath;\n    _cmdLine;\n    _scriptSnapshots = new Map();\n    constructor(projectPath) {\n        this.projectPath = projectPath;\n        const existingOptions = {};\n        const parsed = typescript_1.default.readConfigFile(projectPath, typescript_1.default.sys.readFile);\n        if (parsed.error) {\n            throw parsed.error;\n        }\n        this._cmdLine = typescript_1.default.parseJsonConfigFileContent(parsed.config, typescript_1.default.sys, path_1.default.dirname(projectPath), existingOptions);\n        if (this._cmdLine.errors.length > 0) {\n            throw parsed.error;\n        }\n    }\n    getCompilationSettings() {\n        return this._cmdLine.options;\n    }\n    getScriptFileNames() {\n        return this._cmdLine.fileNames;\n    }\n    getScriptVersion(_fileName) {\n        return '1';\n    }\n    getProjectVersion() {\n        return '1';\n    }\n    getScriptSnapshot(fileName) {\n        let result = this._scriptSnapshots.get(fileName);\n        if (result === undefined) {\n            const content = typescript_1.default.sys.readFile(fileName);\n            if (content === undefined) {\n                return undefined;\n            }\n            result = typescript_1.default.ScriptSnapshot.fromString(content);\n            this._scriptSnapshots.set(fileName, result);\n        }\n        return result;\n    }\n    getCurrentDirectory() {\n        return path_1.default.dirname(this.projectPath);\n    }\n    getDefaultLibFileName(options) {\n        return typescript_1.default.getDefaultLibFilePath(options);\n    }\n    directoryExists = typescript_1.default.sys.directoryExists;\n    getDirectories = typescript_1.default.sys.getDirectories;\n    fileExists = typescript_1.default.sys.fileExists;\n    readFile = typescript_1.default.sys.readFile;\n    readDirectory = typescript_1.default.sys.readDirectory;\n    // this is necessary to make source references work.\n    realpath = typescript_1.default.sys.realpath;\n}\nexports.StaticLanguageServiceHost = StaticLanguageServiceHost;\n//# sourceMappingURL=staticLanguageServiceHost.js.map"
  },
  {
    "path": "build/lib/mangle/staticLanguageServiceHost.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport ts from 'typescript';\nimport path from 'path';\n\nexport class StaticLanguageServiceHost implements ts.LanguageServiceHost {\n\n\tprivate readonly _cmdLine: ts.ParsedCommandLine;\n\tprivate readonly _scriptSnapshots: Map<string, ts.IScriptSnapshot> = new Map();\n\n\tconstructor(readonly projectPath: string) {\n\t\tconst existingOptions: Partial<ts.CompilerOptions> = {};\n\t\tconst parsed = ts.readConfigFile(projectPath, ts.sys.readFile);\n\t\tif (parsed.error) {\n\t\t\tthrow parsed.error;\n\t\t}\n\t\tthis._cmdLine = ts.parseJsonConfigFileContent(parsed.config, ts.sys, path.dirname(projectPath), existingOptions);\n\t\tif (this._cmdLine.errors.length > 0) {\n\t\t\tthrow parsed.error;\n\t\t}\n\t}\n\tgetCompilationSettings(): ts.CompilerOptions {\n\t\treturn this._cmdLine.options;\n\t}\n\tgetScriptFileNames(): string[] {\n\t\treturn this._cmdLine.fileNames;\n\t}\n\tgetScriptVersion(_fileName: string): string {\n\t\treturn '1';\n\t}\n\tgetProjectVersion(): string {\n\t\treturn '1';\n\t}\n\tgetScriptSnapshot(fileName: string): ts.IScriptSnapshot | undefined {\n\t\tlet result: ts.IScriptSnapshot | undefined = this._scriptSnapshots.get(fileName);\n\t\tif (result === undefined) {\n\t\t\tconst content = ts.sys.readFile(fileName);\n\t\t\tif (content === undefined) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tresult = ts.ScriptSnapshot.fromString(content);\n\t\t\tthis._scriptSnapshots.set(fileName, result);\n\t\t}\n\t\treturn result;\n\t}\n\tgetCurrentDirectory(): string {\n\t\treturn path.dirname(this.projectPath);\n\t}\n\tgetDefaultLibFileName(options: ts.CompilerOptions): string {\n\t\treturn ts.getDefaultLibFilePath(options);\n\t}\n\tdirectoryExists = ts.sys.directoryExists;\n\tgetDirectories = ts.sys.getDirectories;\n\tfileExists = ts.sys.fileExists;\n\treadFile = ts.sys.readFile;\n\treadDirectory = ts.sys.readDirectory;\n\t// this is necessary to make source references work.\n\trealpath = ts.sys.realpath;\n}\n"
  },
  {
    "path": "build/lib/monaco-api.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DeclarationResolver = exports.FSProvider = exports.RECIPE_PATH = void 0;\nexports.run3 = run3;\nexports.execute = execute;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst dtsv = '3';\nconst tsfmt = require('../../tsfmt.json');\nconst SRC = path_1.default.join(__dirname, '../../src');\nexports.RECIPE_PATH = path_1.default.join(__dirname, '../monaco/monaco.d.ts.recipe');\nconst DECLARATION_PATH = path_1.default.join(__dirname, '../../src/vs/monaco.d.ts');\nfunction logErr(message, ...rest) {\n    (0, fancy_log_1.default)(ansi_colors_1.default.yellow(`[monaco.d.ts]`), message, ...rest);\n}\nfunction isDeclaration(ts, a) {\n    return (a.kind === ts.SyntaxKind.InterfaceDeclaration\n        || a.kind === ts.SyntaxKind.EnumDeclaration\n        || a.kind === ts.SyntaxKind.ClassDeclaration\n        || a.kind === ts.SyntaxKind.TypeAliasDeclaration\n        || a.kind === ts.SyntaxKind.FunctionDeclaration\n        || a.kind === ts.SyntaxKind.ModuleDeclaration);\n}\nfunction visitTopLevelDeclarations(ts, sourceFile, visitor) {\n    let stop = false;\n    const visit = (node) => {\n        if (stop) {\n            return;\n        }\n        switch (node.kind) {\n            case ts.SyntaxKind.InterfaceDeclaration:\n            case ts.SyntaxKind.EnumDeclaration:\n            case ts.SyntaxKind.ClassDeclaration:\n            case ts.SyntaxKind.VariableStatement:\n            case ts.SyntaxKind.TypeAliasDeclaration:\n            case ts.SyntaxKind.FunctionDeclaration:\n            case ts.SyntaxKind.ModuleDeclaration:\n                stop = visitor(node);\n        }\n        if (stop) {\n            return;\n        }\n        ts.forEachChild(node, visit);\n    };\n    visit(sourceFile);\n}\nfunction getAllTopLevelDeclarations(ts, sourceFile) {\n    const all = [];\n    visitTopLevelDeclarations(ts, sourceFile, (node) => {\n        if (node.kind === ts.SyntaxKind.InterfaceDeclaration || node.kind === ts.SyntaxKind.ClassDeclaration || node.kind === ts.SyntaxKind.ModuleDeclaration) {\n            const interfaceDeclaration = node;\n            const triviaStart = interfaceDeclaration.pos;\n            const triviaEnd = interfaceDeclaration.name.pos;\n            const triviaText = getNodeText(sourceFile, { pos: triviaStart, end: triviaEnd });\n            if (triviaText.indexOf('@internal') === -1) {\n                all.push(node);\n            }\n        }\n        else {\n            const nodeText = getNodeText(sourceFile, node);\n            if (nodeText.indexOf('@internal') === -1) {\n                all.push(node);\n            }\n        }\n        return false /*continue*/;\n    });\n    return all;\n}\nfunction getTopLevelDeclaration(ts, sourceFile, typeName) {\n    let result = null;\n    visitTopLevelDeclarations(ts, sourceFile, (node) => {\n        if (isDeclaration(ts, node) && node.name) {\n            if (node.name.text === typeName) {\n                result = node;\n                return true /*stop*/;\n            }\n            return false /*continue*/;\n        }\n        // node is ts.VariableStatement\n        if (getNodeText(sourceFile, node).indexOf(typeName) >= 0) {\n            result = node;\n            return true /*stop*/;\n        }\n        return false /*continue*/;\n    });\n    return result;\n}\nfunction getNodeText(sourceFile, node) {\n    return sourceFile.getFullText().substring(node.pos, node.end);\n}\nfunction hasModifier(modifiers, kind) {\n    if (modifiers) {\n        for (let i = 0; i < modifiers.length; i++) {\n            const mod = modifiers[i];\n            if (mod.kind === kind) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nfunction isStatic(ts, member) {\n    if (ts.canHaveModifiers(member)) {\n        return hasModifier(ts.getModifiers(member), ts.SyntaxKind.StaticKeyword);\n    }\n    return false;\n}\nfunction isDefaultExport(ts, declaration) {\n    return (hasModifier(declaration.modifiers, ts.SyntaxKind.DefaultKeyword)\n        && hasModifier(declaration.modifiers, ts.SyntaxKind.ExportKeyword));\n}\nfunction getMassagedTopLevelDeclarationText(ts, sourceFile, declaration, importName, usage, enums) {\n    let result = getNodeText(sourceFile, declaration);\n    if (declaration.kind === ts.SyntaxKind.InterfaceDeclaration || declaration.kind === ts.SyntaxKind.ClassDeclaration) {\n        const interfaceDeclaration = declaration;\n        const staticTypeName = (isDefaultExport(ts, interfaceDeclaration)\n            ? `${importName}.default`\n            : `${importName}.${declaration.name.text}`);\n        let instanceTypeName = staticTypeName;\n        const typeParametersCnt = (interfaceDeclaration.typeParameters ? interfaceDeclaration.typeParameters.length : 0);\n        if (typeParametersCnt > 0) {\n            const arr = [];\n            for (let i = 0; i < typeParametersCnt; i++) {\n                arr.push('any');\n            }\n            instanceTypeName = `${instanceTypeName}<${arr.join(',')}>`;\n        }\n        const members = interfaceDeclaration.members;\n        members.forEach((member) => {\n            try {\n                const memberText = getNodeText(sourceFile, member);\n                if (memberText.indexOf('@internal') >= 0 || memberText.indexOf('private') >= 0) {\n                    result = result.replace(memberText, '');\n                }\n                else {\n                    const memberName = member.name.text;\n                    const memberAccess = (memberName.indexOf('.') >= 0 ? `['${memberName}']` : `.${memberName}`);\n                    if (isStatic(ts, member)) {\n                        usage.push(`a = ${staticTypeName}${memberAccess};`);\n                    }\n                    else {\n                        usage.push(`a = (<${instanceTypeName}>b)${memberAccess};`);\n                    }\n                }\n            }\n            catch (err) {\n                // life..\n            }\n        });\n    }\n    result = result.replace(/export default /g, 'export ');\n    result = result.replace(/export declare /g, 'export ');\n    result = result.replace(/declare /g, '');\n    const lines = result.split(/\\r\\n|\\r|\\n/);\n    for (let i = 0; i < lines.length; i++) {\n        if (/\\s*\\*/.test(lines[i])) {\n            // very likely a comment\n            continue;\n        }\n        lines[i] = lines[i].replace(/\"/g, '\\'');\n    }\n    result = lines.join('\\n');\n    if (declaration.kind === ts.SyntaxKind.EnumDeclaration) {\n        result = result.replace(/const enum/, 'enum');\n        enums.push({\n            enumName: declaration.name.getText(sourceFile),\n            text: result\n        });\n    }\n    return result;\n}\nfunction format(ts, text, endl) {\n    const REALLY_FORMAT = false;\n    text = preformat(text, endl);\n    if (!REALLY_FORMAT) {\n        return text;\n    }\n    // Parse the source text\n    const sourceFile = ts.createSourceFile('file.ts', text, ts.ScriptTarget.Latest, /*setParentPointers*/ true);\n    // Get the formatting edits on the input sources\n    const edits = ts.formatting.formatDocument(sourceFile, getRuleProvider(tsfmt), tsfmt);\n    // Apply the edits on the input code\n    return applyEdits(text, edits);\n    function countParensCurly(text) {\n        let cnt = 0;\n        for (let i = 0; i < text.length; i++) {\n            if (text.charAt(i) === '(' || text.charAt(i) === '{') {\n                cnt++;\n            }\n            if (text.charAt(i) === ')' || text.charAt(i) === '}') {\n                cnt--;\n            }\n        }\n        return cnt;\n    }\n    function repeatStr(s, cnt) {\n        let r = '';\n        for (let i = 0; i < cnt; i++) {\n            r += s;\n        }\n        return r;\n    }\n    function preformat(text, endl) {\n        const lines = text.split(endl);\n        let inComment = false;\n        let inCommentDeltaIndent = 0;\n        let indent = 0;\n        for (let i = 0; i < lines.length; i++) {\n            let line = lines[i].replace(/\\s$/, '');\n            let repeat = false;\n            let lineIndent = 0;\n            do {\n                repeat = false;\n                if (line.substring(0, 4) === '    ') {\n                    line = line.substring(4);\n                    lineIndent++;\n                    repeat = true;\n                }\n                if (line.charAt(0) === '\\t') {\n                    line = line.substring(1);\n                    lineIndent++;\n                    repeat = true;\n                }\n            } while (repeat);\n            if (line.length === 0) {\n                continue;\n            }\n            if (inComment) {\n                if (/\\*\\//.test(line)) {\n                    inComment = false;\n                }\n                lines[i] = repeatStr('\\t', lineIndent + inCommentDeltaIndent) + line;\n                continue;\n            }\n            if (/\\/\\*/.test(line)) {\n                inComment = true;\n                inCommentDeltaIndent = indent - lineIndent;\n                lines[i] = repeatStr('\\t', indent) + line;\n                continue;\n            }\n            const cnt = countParensCurly(line);\n            let shouldUnindentAfter = false;\n            let shouldUnindentBefore = false;\n            if (cnt < 0) {\n                if (/[({]/.test(line)) {\n                    shouldUnindentAfter = true;\n                }\n                else {\n                    shouldUnindentBefore = true;\n                }\n            }\n            else if (cnt === 0) {\n                shouldUnindentBefore = /^\\}/.test(line);\n            }\n            let shouldIndentAfter = false;\n            if (cnt > 0) {\n                shouldIndentAfter = true;\n            }\n            else if (cnt === 0) {\n                shouldIndentAfter = /{$/.test(line);\n            }\n            if (shouldUnindentBefore) {\n                indent--;\n            }\n            lines[i] = repeatStr('\\t', indent) + line;\n            if (shouldUnindentAfter) {\n                indent--;\n            }\n            if (shouldIndentAfter) {\n                indent++;\n            }\n        }\n        return lines.join(endl);\n    }\n    function getRuleProvider(options) {\n        // Share this between multiple formatters using the same options.\n        // This represents the bulk of the space the formatter uses.\n        return ts.formatting.getFormatContext(options);\n    }\n    function applyEdits(text, edits) {\n        // Apply edits in reverse on the existing text\n        let result = text;\n        for (let i = edits.length - 1; i >= 0; i--) {\n            const change = edits[i];\n            const head = result.slice(0, change.span.start);\n            const tail = result.slice(change.span.start + change.span.length);\n            result = head + change.newText + tail;\n        }\n        return result;\n    }\n}\nfunction createReplacerFromDirectives(directives) {\n    return (str) => {\n        for (let i = 0; i < directives.length; i++) {\n            str = str.replace(directives[i][0], directives[i][1]);\n        }\n        return str;\n    };\n}\nfunction createReplacer(data) {\n    data = data || '';\n    const rawDirectives = data.split(';');\n    const directives = [];\n    rawDirectives.forEach((rawDirective) => {\n        if (rawDirective.length === 0) {\n            return;\n        }\n        const pieces = rawDirective.split('=>');\n        let findStr = pieces[0];\n        const replaceStr = pieces[1];\n        findStr = findStr.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&');\n        findStr = '\\\\b' + findStr + '\\\\b';\n        directives.push([new RegExp(findStr, 'g'), replaceStr]);\n    });\n    return createReplacerFromDirectives(directives);\n}\nfunction generateDeclarationFile(ts, recipe, sourceFileGetter) {\n    const endl = /\\r\\n/.test(recipe) ? '\\r\\n' : '\\n';\n    const lines = recipe.split(endl);\n    const result = [];\n    let usageCounter = 0;\n    const usageImports = [];\n    const usage = [];\n    let failed = false;\n    usage.push(`var a: any;`);\n    usage.push(`var b: any;`);\n    const generateUsageImport = (moduleId) => {\n        const importName = 'm' + (++usageCounter);\n        usageImports.push(`import * as ${importName} from './${moduleId.replace(/\\.d\\.ts$/, '')}';`);\n        return importName;\n    };\n    const enums = [];\n    let version = null;\n    lines.forEach(line => {\n        if (failed) {\n            return;\n        }\n        const m0 = line.match(/^\\/\\/dtsv=(\\d+)$/);\n        if (m0) {\n            version = m0[1];\n        }\n        const m1 = line.match(/^\\s*#include\\(([^;)]*)(;[^)]*)?\\)\\:(.*)$/);\n        if (m1) {\n            const moduleId = m1[1];\n            const sourceFile = sourceFileGetter(moduleId);\n            if (!sourceFile) {\n                logErr(`While handling ${line}`);\n                logErr(`Cannot find ${moduleId}`);\n                failed = true;\n                return;\n            }\n            const importName = generateUsageImport(moduleId);\n            const replacer = createReplacer(m1[2]);\n            const typeNames = m1[3].split(/,/);\n            typeNames.forEach((typeName) => {\n                typeName = typeName.trim();\n                if (typeName.length === 0) {\n                    return;\n                }\n                const declaration = getTopLevelDeclaration(ts, sourceFile, typeName);\n                if (!declaration) {\n                    logErr(`While handling ${line}`);\n                    logErr(`Cannot find ${typeName}`);\n                    failed = true;\n                    return;\n                }\n                result.push(replacer(getMassagedTopLevelDeclarationText(ts, sourceFile, declaration, importName, usage, enums)));\n            });\n            return;\n        }\n        const m2 = line.match(/^\\s*#includeAll\\(([^;)]*)(;[^)]*)?\\)\\:(.*)$/);\n        if (m2) {\n            const moduleId = m2[1];\n            const sourceFile = sourceFileGetter(moduleId);\n            if (!sourceFile) {\n                logErr(`While handling ${line}`);\n                logErr(`Cannot find ${moduleId}`);\n                failed = true;\n                return;\n            }\n            const importName = generateUsageImport(moduleId);\n            const replacer = createReplacer(m2[2]);\n            const typeNames = m2[3].split(/,/);\n            const typesToExcludeMap = {};\n            const typesToExcludeArr = [];\n            typeNames.forEach((typeName) => {\n                typeName = typeName.trim();\n                if (typeName.length === 0) {\n                    return;\n                }\n                typesToExcludeMap[typeName] = true;\n                typesToExcludeArr.push(typeName);\n            });\n            getAllTopLevelDeclarations(ts, sourceFile).forEach((declaration) => {\n                if (isDeclaration(ts, declaration) && declaration.name) {\n                    if (typesToExcludeMap[declaration.name.text]) {\n                        return;\n                    }\n                }\n                else {\n                    // node is ts.VariableStatement\n                    const nodeText = getNodeText(sourceFile, declaration);\n                    for (let i = 0; i < typesToExcludeArr.length; i++) {\n                        if (nodeText.indexOf(typesToExcludeArr[i]) >= 0) {\n                            return;\n                        }\n                    }\n                }\n                result.push(replacer(getMassagedTopLevelDeclarationText(ts, sourceFile, declaration, importName, usage, enums)));\n            });\n            return;\n        }\n        result.push(line);\n    });\n    if (failed) {\n        return null;\n    }\n    if (version !== dtsv) {\n        if (!version) {\n            logErr(`gulp watch restart required. 'monaco.d.ts.recipe' is written before versioning was introduced.`);\n        }\n        else {\n            logErr(`gulp watch restart required. 'monaco.d.ts.recipe' v${version} does not match runtime v${dtsv}.`);\n        }\n        return null;\n    }\n    let resultTxt = result.join(endl);\n    resultTxt = resultTxt.replace(/\\bURI\\b/g, 'Uri');\n    resultTxt = resultTxt.replace(/\\bEvent</g, 'IEvent<');\n    resultTxt = resultTxt.split(/\\r\\n|\\n|\\r/).join(endl);\n    resultTxt = format(ts, resultTxt, endl);\n    resultTxt = resultTxt.split(/\\r\\n|\\n|\\r/).join(endl);\n    enums.sort((e1, e2) => {\n        if (e1.enumName < e2.enumName) {\n            return -1;\n        }\n        if (e1.enumName > e2.enumName) {\n            return 1;\n        }\n        return 0;\n    });\n    let resultEnums = [\n        '/*---------------------------------------------------------------------------------------------',\n        ' *  Copyright (c) Microsoft Corporation. All rights reserved.',\n        ' *  Licensed under the MIT License. See License.txt in the project root for license information.',\n        ' *--------------------------------------------------------------------------------------------*/',\n        '',\n        '// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.',\n        ''\n    ].concat(enums.map(e => e.text)).join(endl);\n    resultEnums = resultEnums.split(/\\r\\n|\\n|\\r/).join(endl);\n    resultEnums = format(ts, resultEnums, endl);\n    resultEnums = resultEnums.split(/\\r\\n|\\n|\\r/).join(endl);\n    return {\n        result: resultTxt,\n        usageContent: `${usageImports.join('\\n')}\\n\\n${usage.join('\\n')}`,\n        enums: resultEnums\n    };\n}\nfunction _run(ts, sourceFileGetter) {\n    const recipe = fs_1.default.readFileSync(exports.RECIPE_PATH).toString();\n    const t = generateDeclarationFile(ts, recipe, sourceFileGetter);\n    if (!t) {\n        return null;\n    }\n    const result = t.result;\n    const usageContent = t.usageContent;\n    const enums = t.enums;\n    const currentContent = fs_1.default.readFileSync(DECLARATION_PATH).toString();\n    const one = currentContent.replace(/\\r\\n/gm, '\\n');\n    const other = result.replace(/\\r\\n/gm, '\\n');\n    const isTheSame = (one === other);\n    return {\n        content: result,\n        usageContent: usageContent,\n        enums: enums,\n        filePath: DECLARATION_PATH,\n        isTheSame\n    };\n}\nclass FSProvider {\n    existsSync(filePath) {\n        return fs_1.default.existsSync(filePath);\n    }\n    statSync(filePath) {\n        return fs_1.default.statSync(filePath);\n    }\n    readFileSync(_moduleId, filePath) {\n        return fs_1.default.readFileSync(filePath);\n    }\n}\nexports.FSProvider = FSProvider;\nclass CacheEntry {\n    sourceFile;\n    mtime;\n    constructor(sourceFile, mtime) {\n        this.sourceFile = sourceFile;\n        this.mtime = mtime;\n    }\n}\nclass DeclarationResolver {\n    _fsProvider;\n    ts;\n    _sourceFileCache;\n    constructor(_fsProvider) {\n        this._fsProvider = _fsProvider;\n        this.ts = require('typescript');\n        this._sourceFileCache = Object.create(null);\n    }\n    invalidateCache(moduleId) {\n        this._sourceFileCache[moduleId] = null;\n    }\n    getDeclarationSourceFile(moduleId) {\n        if (this._sourceFileCache[moduleId]) {\n            // Since we cannot trust file watching to invalidate the cache, check also the mtime\n            const fileName = this._getFileName(moduleId);\n            const mtime = this._fsProvider.statSync(fileName).mtime.getTime();\n            if (this._sourceFileCache[moduleId].mtime !== mtime) {\n                this._sourceFileCache[moduleId] = null;\n            }\n        }\n        if (!this._sourceFileCache[moduleId]) {\n            this._sourceFileCache[moduleId] = this._getDeclarationSourceFile(moduleId);\n        }\n        return this._sourceFileCache[moduleId] ? this._sourceFileCache[moduleId].sourceFile : null;\n    }\n    _getFileName(moduleId) {\n        if (/\\.d\\.ts$/.test(moduleId)) {\n            return path_1.default.join(SRC, moduleId);\n        }\n        return path_1.default.join(SRC, `${moduleId}.ts`);\n    }\n    _getDeclarationSourceFile(moduleId) {\n        const fileName = this._getFileName(moduleId);\n        if (!this._fsProvider.existsSync(fileName)) {\n            return null;\n        }\n        const mtime = this._fsProvider.statSync(fileName).mtime.getTime();\n        if (/\\.d\\.ts$/.test(moduleId)) {\n            // const mtime = this._fsProvider.statFileSync()\n            const fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();\n            return new CacheEntry(this.ts.createSourceFile(fileName, fileContents, this.ts.ScriptTarget.ES5), mtime);\n        }\n        const fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();\n        const fileMap = {\n            'file.ts': fileContents\n        };\n        const service = this.ts.createLanguageService(new TypeScriptLanguageServiceHost(this.ts, {}, fileMap, {}));\n        const text = service.getEmitOutput('file.ts', true, true).outputFiles[0].text;\n        return new CacheEntry(this.ts.createSourceFile(fileName, text, this.ts.ScriptTarget.ES5), mtime);\n    }\n}\nexports.DeclarationResolver = DeclarationResolver;\nfunction run3(resolver) {\n    const sourceFileGetter = (moduleId) => resolver.getDeclarationSourceFile(moduleId);\n    return _run(resolver.ts, sourceFileGetter);\n}\nclass TypeScriptLanguageServiceHost {\n    _ts;\n    _libs;\n    _files;\n    _compilerOptions;\n    constructor(ts, libs, files, compilerOptions) {\n        this._ts = ts;\n        this._libs = libs;\n        this._files = files;\n        this._compilerOptions = compilerOptions;\n    }\n    // --- language service host ---------------\n    getCompilationSettings() {\n        return this._compilerOptions;\n    }\n    getScriptFileNames() {\n        return ([]\n            .concat(Object.keys(this._libs))\n            .concat(Object.keys(this._files)));\n    }\n    getScriptVersion(_fileName) {\n        return '1';\n    }\n    getProjectVersion() {\n        return '1';\n    }\n    getScriptSnapshot(fileName) {\n        if (this._files.hasOwnProperty(fileName)) {\n            return this._ts.ScriptSnapshot.fromString(this._files[fileName]);\n        }\n        else if (this._libs.hasOwnProperty(fileName)) {\n            return this._ts.ScriptSnapshot.fromString(this._libs[fileName]);\n        }\n        else {\n            return this._ts.ScriptSnapshot.fromString('');\n        }\n    }\n    getScriptKind(_fileName) {\n        return this._ts.ScriptKind.TS;\n    }\n    getCurrentDirectory() {\n        return '';\n    }\n    getDefaultLibFileName(_options) {\n        return 'defaultLib:es5';\n    }\n    isDefaultLibFileName(fileName) {\n        return fileName === this.getDefaultLibFileName(this._compilerOptions);\n    }\n    readFile(path, _encoding) {\n        return this._files[path] || this._libs[path];\n    }\n    fileExists(path) {\n        return path in this._files || path in this._libs;\n    }\n}\nfunction execute() {\n    const r = run3(new DeclarationResolver(new FSProvider()));\n    if (!r) {\n        throw new Error(`monaco.d.ts generation error - Cannot continue`);\n    }\n    return r;\n}\n//# sourceMappingURL=monaco-api.js.map"
  },
  {
    "path": "build/lib/monaco-api.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport type * as ts from 'typescript';\nimport path from 'path';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\n\nconst dtsv = '3';\n\nconst tsfmt = require('../../tsfmt.json');\n\nconst SRC = path.join(__dirname, '../../src');\nexport const RECIPE_PATH = path.join(__dirname, '../monaco/monaco.d.ts.recipe');\nconst DECLARATION_PATH = path.join(__dirname, '../../src/vs/monaco.d.ts');\n\nfunction logErr(message: any, ...rest: any[]): void {\n\tfancyLog(ansiColors.yellow(`[monaco.d.ts]`), message, ...rest);\n}\n\ntype SourceFileGetter = (moduleId: string) => ts.SourceFile | null;\n\ntype TSTopLevelDeclaration = ts.InterfaceDeclaration | ts.EnumDeclaration | ts.ClassDeclaration | ts.TypeAliasDeclaration | ts.FunctionDeclaration | ts.ModuleDeclaration;\ntype TSTopLevelDeclare = TSTopLevelDeclaration | ts.VariableStatement;\n\nfunction isDeclaration(ts: typeof import('typescript'), a: TSTopLevelDeclare): a is TSTopLevelDeclaration {\n\treturn (\n\t\ta.kind === ts.SyntaxKind.InterfaceDeclaration\n\t\t|| a.kind === ts.SyntaxKind.EnumDeclaration\n\t\t|| a.kind === ts.SyntaxKind.ClassDeclaration\n\t\t|| a.kind === ts.SyntaxKind.TypeAliasDeclaration\n\t\t|| a.kind === ts.SyntaxKind.FunctionDeclaration\n\t\t|| a.kind === ts.SyntaxKind.ModuleDeclaration\n\t);\n}\n\nfunction visitTopLevelDeclarations(ts: typeof import('typescript'), sourceFile: ts.SourceFile, visitor: (node: TSTopLevelDeclare) => boolean): void {\n\tlet stop = false;\n\n\tconst visit = (node: ts.Node): void => {\n\t\tif (stop) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (node.kind) {\n\t\t\tcase ts.SyntaxKind.InterfaceDeclaration:\n\t\t\tcase ts.SyntaxKind.EnumDeclaration:\n\t\t\tcase ts.SyntaxKind.ClassDeclaration:\n\t\t\tcase ts.SyntaxKind.VariableStatement:\n\t\t\tcase ts.SyntaxKind.TypeAliasDeclaration:\n\t\t\tcase ts.SyntaxKind.FunctionDeclaration:\n\t\t\tcase ts.SyntaxKind.ModuleDeclaration:\n\t\t\t\tstop = visitor(<TSTopLevelDeclare>node);\n\t\t}\n\n\t\tif (stop) {\n\t\t\treturn;\n\t\t}\n\t\tts.forEachChild(node, visit);\n\t};\n\n\tvisit(sourceFile);\n}\n\n\nfunction getAllTopLevelDeclarations(ts: typeof import('typescript'), sourceFile: ts.SourceFile): TSTopLevelDeclare[] {\n\tconst all: TSTopLevelDeclare[] = [];\n\tvisitTopLevelDeclarations(ts, sourceFile, (node) => {\n\t\tif (node.kind === ts.SyntaxKind.InterfaceDeclaration || node.kind === ts.SyntaxKind.ClassDeclaration || node.kind === ts.SyntaxKind.ModuleDeclaration) {\n\t\t\tconst interfaceDeclaration = <ts.InterfaceDeclaration>node;\n\t\t\tconst triviaStart = interfaceDeclaration.pos;\n\t\t\tconst triviaEnd = interfaceDeclaration.name.pos;\n\t\t\tconst triviaText = getNodeText(sourceFile, { pos: triviaStart, end: triviaEnd });\n\n\t\t\tif (triviaText.indexOf('@internal') === -1) {\n\t\t\t\tall.push(node);\n\t\t\t}\n\t\t} else {\n\t\t\tconst nodeText = getNodeText(sourceFile, node);\n\t\t\tif (nodeText.indexOf('@internal') === -1) {\n\t\t\t\tall.push(node);\n\t\t\t}\n\t\t}\n\t\treturn false /*continue*/;\n\t});\n\treturn all;\n}\n\n\nfunction getTopLevelDeclaration(ts: typeof import('typescript'), sourceFile: ts.SourceFile, typeName: string): TSTopLevelDeclare | null {\n\tlet result: TSTopLevelDeclare | null = null;\n\tvisitTopLevelDeclarations(ts, sourceFile, (node) => {\n\t\tif (isDeclaration(ts, node) && node.name) {\n\t\t\tif (node.name.text === typeName) {\n\t\t\t\tresult = node;\n\t\t\t\treturn true /*stop*/;\n\t\t\t}\n\t\t\treturn false /*continue*/;\n\t\t}\n\t\t// node is ts.VariableStatement\n\t\tif (getNodeText(sourceFile, node).indexOf(typeName) >= 0) {\n\t\t\tresult = node;\n\t\t\treturn true /*stop*/;\n\t\t}\n\t\treturn false /*continue*/;\n\t});\n\treturn result;\n}\n\n\nfunction getNodeText(sourceFile: ts.SourceFile, node: { pos: number; end: number }): string {\n\treturn sourceFile.getFullText().substring(node.pos, node.end);\n}\n\nfunction hasModifier(modifiers: readonly ts.ModifierLike[] | undefined, kind: ts.SyntaxKind): boolean {\n\tif (modifiers) {\n\t\tfor (let i = 0; i < modifiers.length; i++) {\n\t\t\tconst mod = modifiers[i];\n\t\t\tif (mod.kind === kind) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction isStatic(ts: typeof import('typescript'), member: ts.ClassElement | ts.TypeElement): boolean {\n\tif (ts.canHaveModifiers(member)) {\n\t\treturn hasModifier(ts.getModifiers(member), ts.SyntaxKind.StaticKeyword);\n\t}\n\treturn false;\n}\n\nfunction isDefaultExport(ts: typeof import('typescript'), declaration: ts.InterfaceDeclaration | ts.ClassDeclaration): boolean {\n\treturn (\n\t\thasModifier(declaration.modifiers, ts.SyntaxKind.DefaultKeyword)\n\t\t&& hasModifier(declaration.modifiers, ts.SyntaxKind.ExportKeyword)\n\t);\n}\n\nfunction getMassagedTopLevelDeclarationText(ts: typeof import('typescript'), sourceFile: ts.SourceFile, declaration: TSTopLevelDeclare, importName: string, usage: string[], enums: IEnumEntry[]): string {\n\tlet result = getNodeText(sourceFile, declaration);\n\tif (declaration.kind === ts.SyntaxKind.InterfaceDeclaration || declaration.kind === ts.SyntaxKind.ClassDeclaration) {\n\t\tconst interfaceDeclaration = <ts.InterfaceDeclaration | ts.ClassDeclaration>declaration;\n\n\t\tconst staticTypeName = (\n\t\t\tisDefaultExport(ts, interfaceDeclaration)\n\t\t\t\t? `${importName}.default`\n\t\t\t\t: `${importName}.${declaration.name!.text}`\n\t\t);\n\n\t\tlet instanceTypeName = staticTypeName;\n\t\tconst typeParametersCnt = (interfaceDeclaration.typeParameters ? interfaceDeclaration.typeParameters.length : 0);\n\t\tif (typeParametersCnt > 0) {\n\t\t\tconst arr: string[] = [];\n\t\t\tfor (let i = 0; i < typeParametersCnt; i++) {\n\t\t\t\tarr.push('any');\n\t\t\t}\n\t\t\tinstanceTypeName = `${instanceTypeName}<${arr.join(',')}>`;\n\t\t}\n\n\t\tconst members: ts.NodeArray<ts.ClassElement | ts.TypeElement> = interfaceDeclaration.members;\n\t\tmembers.forEach((member) => {\n\t\t\ttry {\n\t\t\t\tconst memberText = getNodeText(sourceFile, member);\n\t\t\t\tif (memberText.indexOf('@internal') >= 0 || memberText.indexOf('private') >= 0) {\n\t\t\t\t\tresult = result.replace(memberText, '');\n\t\t\t\t} else {\n\t\t\t\t\tconst memberName = (<ts.Identifier | ts.StringLiteral>member.name).text;\n\t\t\t\t\tconst memberAccess = (memberName.indexOf('.') >= 0 ? `['${memberName}']` : `.${memberName}`);\n\t\t\t\t\tif (isStatic(ts, member)) {\n\t\t\t\t\t\tusage.push(`a = ${staticTypeName}${memberAccess};`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tusage.push(`a = (<${instanceTypeName}>b)${memberAccess};`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// life..\n\t\t\t}\n\t\t});\n\t}\n\tresult = result.replace(/export default /g, 'export ');\n\tresult = result.replace(/export declare /g, 'export ');\n\tresult = result.replace(/declare /g, '');\n\tconst lines = result.split(/\\r\\n|\\r|\\n/);\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tif (/\\s*\\*/.test(lines[i])) {\n\t\t\t// very likely a comment\n\t\t\tcontinue;\n\t\t}\n\t\tlines[i] = lines[i].replace(/\"/g, '\\'');\n\t}\n\tresult = lines.join('\\n');\n\n\tif (declaration.kind === ts.SyntaxKind.EnumDeclaration) {\n\t\tresult = result.replace(/const enum/, 'enum');\n\t\tenums.push({\n\t\t\tenumName: declaration.name.getText(sourceFile),\n\t\t\ttext: result\n\t\t});\n\t}\n\n\treturn result;\n}\n\nfunction format(ts: typeof import('typescript'), text: string, endl: string): string {\n\tconst REALLY_FORMAT = false;\n\n\ttext = preformat(text, endl);\n\tif (!REALLY_FORMAT) {\n\t\treturn text;\n\t}\n\n\t// Parse the source text\n\tconst sourceFile = ts.createSourceFile('file.ts', text, ts.ScriptTarget.Latest, /*setParentPointers*/ true);\n\n\t// Get the formatting edits on the input sources\n\tconst edits = (<any>ts).formatting.formatDocument(sourceFile, getRuleProvider(tsfmt), tsfmt);\n\n\t// Apply the edits on the input code\n\treturn applyEdits(text, edits);\n\n\tfunction countParensCurly(text: string): number {\n\t\tlet cnt = 0;\n\t\tfor (let i = 0; i < text.length; i++) {\n\t\t\tif (text.charAt(i) === '(' || text.charAt(i) === '{') {\n\t\t\t\tcnt++;\n\t\t\t}\n\t\t\tif (text.charAt(i) === ')' || text.charAt(i) === '}') {\n\t\t\t\tcnt--;\n\t\t\t}\n\t\t}\n\t\treturn cnt;\n\t}\n\n\tfunction repeatStr(s: string, cnt: number): string {\n\t\tlet r = '';\n\t\tfor (let i = 0; i < cnt; i++) {\n\t\t\tr += s;\n\t\t}\n\t\treturn r;\n\t}\n\n\tfunction preformat(text: string, endl: string): string {\n\t\tconst lines = text.split(endl);\n\t\tlet inComment = false;\n\t\tlet inCommentDeltaIndent = 0;\n\t\tlet indent = 0;\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tlet line = lines[i].replace(/\\s$/, '');\n\t\t\tlet repeat = false;\n\t\t\tlet lineIndent = 0;\n\t\t\tdo {\n\t\t\t\trepeat = false;\n\t\t\t\tif (line.substring(0, 4) === '    ') {\n\t\t\t\t\tline = line.substring(4);\n\t\t\t\t\tlineIndent++;\n\t\t\t\t\trepeat = true;\n\t\t\t\t}\n\t\t\t\tif (line.charAt(0) === '\\t') {\n\t\t\t\t\tline = line.substring(1);\n\t\t\t\t\tlineIndent++;\n\t\t\t\t\trepeat = true;\n\t\t\t\t}\n\t\t\t} while (repeat);\n\n\t\t\tif (line.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (inComment) {\n\t\t\t\tif (/\\*\\//.test(line)) {\n\t\t\t\t\tinComment = false;\n\t\t\t\t}\n\t\t\t\tlines[i] = repeatStr('\\t', lineIndent + inCommentDeltaIndent) + line;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (/\\/\\*/.test(line)) {\n\t\t\t\tinComment = true;\n\t\t\t\tinCommentDeltaIndent = indent - lineIndent;\n\t\t\t\tlines[i] = repeatStr('\\t', indent) + line;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst cnt = countParensCurly(line);\n\t\t\tlet shouldUnindentAfter = false;\n\t\t\tlet shouldUnindentBefore = false;\n\t\t\tif (cnt < 0) {\n\t\t\t\tif (/[({]/.test(line)) {\n\t\t\t\t\tshouldUnindentAfter = true;\n\t\t\t\t} else {\n\t\t\t\t\tshouldUnindentBefore = true;\n\t\t\t\t}\n\t\t\t} else if (cnt === 0) {\n\t\t\t\tshouldUnindentBefore = /^\\}/.test(line);\n\t\t\t}\n\t\t\tlet shouldIndentAfter = false;\n\t\t\tif (cnt > 0) {\n\t\t\t\tshouldIndentAfter = true;\n\t\t\t} else if (cnt === 0) {\n\t\t\t\tshouldIndentAfter = /{$/.test(line);\n\t\t\t}\n\n\t\t\tif (shouldUnindentBefore) {\n\t\t\t\tindent--;\n\t\t\t}\n\n\t\t\tlines[i] = repeatStr('\\t', indent) + line;\n\n\t\t\tif (shouldUnindentAfter) {\n\t\t\t\tindent--;\n\t\t\t}\n\t\t\tif (shouldIndentAfter) {\n\t\t\t\tindent++;\n\t\t\t}\n\t\t}\n\t\treturn lines.join(endl);\n\t}\n\n\tfunction getRuleProvider(options: ts.FormatCodeSettings) {\n\t\t// Share this between multiple formatters using the same options.\n\t\t// This represents the bulk of the space the formatter uses.\n\t\treturn (ts as any).formatting.getFormatContext(options);\n\t}\n\n\tfunction applyEdits(text: string, edits: ts.TextChange[]): string {\n\t\t// Apply edits in reverse on the existing text\n\t\tlet result = text;\n\t\tfor (let i = edits.length - 1; i >= 0; i--) {\n\t\t\tconst change = edits[i];\n\t\t\tconst head = result.slice(0, change.span.start);\n\t\t\tconst tail = result.slice(change.span.start + change.span.length);\n\t\t\tresult = head + change.newText + tail;\n\t\t}\n\t\treturn result;\n\t}\n}\n\nfunction createReplacerFromDirectives(directives: [RegExp, string][]): (str: string) => string {\n\treturn (str: string) => {\n\t\tfor (let i = 0; i < directives.length; i++) {\n\t\t\tstr = str.replace(directives[i][0], directives[i][1]);\n\t\t}\n\t\treturn str;\n\t};\n}\n\nfunction createReplacer(data: string): (str: string) => string {\n\tdata = data || '';\n\tconst rawDirectives = data.split(';');\n\tconst directives: [RegExp, string][] = [];\n\trawDirectives.forEach((rawDirective) => {\n\t\tif (rawDirective.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst pieces = rawDirective.split('=>');\n\t\tlet findStr = pieces[0];\n\t\tconst replaceStr = pieces[1];\n\n\t\tfindStr = findStr.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&');\n\t\tfindStr = '\\\\b' + findStr + '\\\\b';\n\t\tdirectives.push([new RegExp(findStr, 'g'), replaceStr]);\n\t});\n\n\treturn createReplacerFromDirectives(directives);\n}\n\ninterface ITempResult {\n\tresult: string;\n\tusageContent: string;\n\tenums: string;\n}\n\ninterface IEnumEntry {\n\tenumName: string;\n\ttext: string;\n}\n\nfunction generateDeclarationFile(ts: typeof import('typescript'), recipe: string, sourceFileGetter: SourceFileGetter): ITempResult | null {\n\tconst endl = /\\r\\n/.test(recipe) ? '\\r\\n' : '\\n';\n\n\tconst lines = recipe.split(endl);\n\tconst result: string[] = [];\n\n\tlet usageCounter = 0;\n\tconst usageImports: string[] = [];\n\tconst usage: string[] = [];\n\n\tlet failed = false;\n\n\tusage.push(`var a: any;`);\n\tusage.push(`var b: any;`);\n\n\tconst generateUsageImport = (moduleId: string) => {\n\t\tconst importName = 'm' + (++usageCounter);\n\t\tusageImports.push(`import * as ${importName} from './${moduleId.replace(/\\.d\\.ts$/, '')}';`);\n\t\treturn importName;\n\t};\n\n\tconst enums: IEnumEntry[] = [];\n\tlet version: string | null = null;\n\n\tlines.forEach(line => {\n\n\t\tif (failed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst m0 = line.match(/^\\/\\/dtsv=(\\d+)$/);\n\t\tif (m0) {\n\t\t\tversion = m0[1];\n\t\t}\n\n\t\tconst m1 = line.match(/^\\s*#include\\(([^;)]*)(;[^)]*)?\\)\\:(.*)$/);\n\t\tif (m1) {\n\t\t\tconst moduleId = m1[1];\n\t\t\tconst sourceFile = sourceFileGetter(moduleId);\n\t\t\tif (!sourceFile) {\n\t\t\t\tlogErr(`While handling ${line}`);\n\t\t\t\tlogErr(`Cannot find ${moduleId}`);\n\t\t\t\tfailed = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst importName = generateUsageImport(moduleId);\n\n\t\t\tconst replacer = createReplacer(m1[2]);\n\n\t\t\tconst typeNames = m1[3].split(/,/);\n\t\t\ttypeNames.forEach((typeName) => {\n\t\t\t\ttypeName = typeName.trim();\n\t\t\t\tif (typeName.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst declaration = getTopLevelDeclaration(ts, sourceFile, typeName);\n\t\t\t\tif (!declaration) {\n\t\t\t\t\tlogErr(`While handling ${line}`);\n\t\t\t\t\tlogErr(`Cannot find ${typeName}`);\n\t\t\t\t\tfailed = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresult.push(replacer(getMassagedTopLevelDeclarationText(ts, sourceFile, declaration, importName, usage, enums)));\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst m2 = line.match(/^\\s*#includeAll\\(([^;)]*)(;[^)]*)?\\)\\:(.*)$/);\n\t\tif (m2) {\n\t\t\tconst moduleId = m2[1];\n\t\t\tconst sourceFile = sourceFileGetter(moduleId);\n\t\t\tif (!sourceFile) {\n\t\t\t\tlogErr(`While handling ${line}`);\n\t\t\t\tlogErr(`Cannot find ${moduleId}`);\n\t\t\t\tfailed = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst importName = generateUsageImport(moduleId);\n\n\t\t\tconst replacer = createReplacer(m2[2]);\n\n\t\t\tconst typeNames = m2[3].split(/,/);\n\t\t\tconst typesToExcludeMap: { [typeName: string]: boolean } = {};\n\t\t\tconst typesToExcludeArr: string[] = [];\n\t\t\ttypeNames.forEach((typeName) => {\n\t\t\t\ttypeName = typeName.trim();\n\t\t\t\tif (typeName.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttypesToExcludeMap[typeName] = true;\n\t\t\t\ttypesToExcludeArr.push(typeName);\n\t\t\t});\n\n\t\t\tgetAllTopLevelDeclarations(ts, sourceFile).forEach((declaration) => {\n\t\t\t\tif (isDeclaration(ts, declaration) && declaration.name) {\n\t\t\t\t\tif (typesToExcludeMap[declaration.name.text]) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// node is ts.VariableStatement\n\t\t\t\t\tconst nodeText = getNodeText(sourceFile, declaration);\n\t\t\t\t\tfor (let i = 0; i < typesToExcludeArr.length; i++) {\n\t\t\t\t\t\tif (nodeText.indexOf(typesToExcludeArr[i]) >= 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult.push(replacer(getMassagedTopLevelDeclarationText(ts, sourceFile, declaration, importName, usage, enums)));\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tresult.push(line);\n\t});\n\n\tif (failed) {\n\t\treturn null;\n\t}\n\n\tif (version !== dtsv) {\n\t\tif (!version) {\n\t\t\tlogErr(`gulp watch restart required. 'monaco.d.ts.recipe' is written before versioning was introduced.`);\n\t\t} else {\n\t\t\tlogErr(`gulp watch restart required. 'monaco.d.ts.recipe' v${version} does not match runtime v${dtsv}.`);\n\t\t}\n\t\treturn null;\n\t}\n\n\tlet resultTxt = result.join(endl);\n\tresultTxt = resultTxt.replace(/\\bURI\\b/g, 'Uri');\n\tresultTxt = resultTxt.replace(/\\bEvent</g, 'IEvent<');\n\tresultTxt = resultTxt.split(/\\r\\n|\\n|\\r/).join(endl);\n\tresultTxt = format(ts, resultTxt, endl);\n\tresultTxt = resultTxt.split(/\\r\\n|\\n|\\r/).join(endl);\n\n\tenums.sort((e1, e2) => {\n\t\tif (e1.enumName < e2.enumName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (e1.enumName > e2.enumName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n\n\tlet resultEnums = [\n\t\t'/*---------------------------------------------------------------------------------------------',\n\t\t' *  Copyright (c) Microsoft Corporation. All rights reserved.',\n\t\t' *  Licensed under the MIT License. See License.txt in the project root for license information.',\n\t\t' *--------------------------------------------------------------------------------------------*/',\n\t\t'',\n\t\t'// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.',\n\t\t''\n\t].concat(enums.map(e => e.text)).join(endl);\n\tresultEnums = resultEnums.split(/\\r\\n|\\n|\\r/).join(endl);\n\tresultEnums = format(ts, resultEnums, endl);\n\tresultEnums = resultEnums.split(/\\r\\n|\\n|\\r/).join(endl);\n\n\treturn {\n\t\tresult: resultTxt,\n\t\tusageContent: `${usageImports.join('\\n')}\\n\\n${usage.join('\\n')}`,\n\t\tenums: resultEnums\n\t};\n}\n\nexport interface IMonacoDeclarationResult {\n\tcontent: string;\n\tusageContent: string;\n\tenums: string;\n\tfilePath: string;\n\tisTheSame: boolean;\n}\n\nfunction _run(ts: typeof import('typescript'), sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult | null {\n\tconst recipe = fs.readFileSync(RECIPE_PATH).toString();\n\tconst t = generateDeclarationFile(ts, recipe, sourceFileGetter);\n\tif (!t) {\n\t\treturn null;\n\t}\n\n\tconst result = t.result;\n\tconst usageContent = t.usageContent;\n\tconst enums = t.enums;\n\n\tconst currentContent = fs.readFileSync(DECLARATION_PATH).toString();\n\tconst one = currentContent.replace(/\\r\\n/gm, '\\n');\n\tconst other = result.replace(/\\r\\n/gm, '\\n');\n\tconst isTheSame = (one === other);\n\n\treturn {\n\t\tcontent: result,\n\t\tusageContent: usageContent,\n\t\tenums: enums,\n\t\tfilePath: DECLARATION_PATH,\n\t\tisTheSame\n\t};\n}\n\nexport class FSProvider {\n\tpublic existsSync(filePath: string): boolean {\n\t\treturn fs.existsSync(filePath);\n\t}\n\tpublic statSync(filePath: string): fs.Stats {\n\t\treturn fs.statSync(filePath);\n\t}\n\tpublic readFileSync(_moduleId: string, filePath: string): Buffer {\n\t\treturn fs.readFileSync(filePath);\n\t}\n}\n\nclass CacheEntry {\n\tconstructor(\n\t\tpublic readonly sourceFile: ts.SourceFile,\n\t\tpublic readonly mtime: number\n\t) { }\n}\n\nexport class DeclarationResolver {\n\n\tpublic readonly ts: typeof import('typescript');\n\tprivate _sourceFileCache: { [moduleId: string]: CacheEntry | null };\n\n\tconstructor(private readonly _fsProvider: FSProvider) {\n\t\tthis.ts = require('typescript') as typeof import('typescript');\n\t\tthis._sourceFileCache = Object.create(null);\n\t}\n\n\tpublic invalidateCache(moduleId: string): void {\n\t\tthis._sourceFileCache[moduleId] = null;\n\t}\n\n\tpublic getDeclarationSourceFile(moduleId: string): ts.SourceFile | null {\n\t\tif (this._sourceFileCache[moduleId]) {\n\t\t\t// Since we cannot trust file watching to invalidate the cache, check also the mtime\n\t\t\tconst fileName = this._getFileName(moduleId);\n\t\t\tconst mtime = this._fsProvider.statSync(fileName).mtime.getTime();\n\t\t\tif (this._sourceFileCache[moduleId]!.mtime !== mtime) {\n\t\t\t\tthis._sourceFileCache[moduleId] = null;\n\t\t\t}\n\t\t}\n\t\tif (!this._sourceFileCache[moduleId]) {\n\t\t\tthis._sourceFileCache[moduleId] = this._getDeclarationSourceFile(moduleId);\n\t\t}\n\t\treturn this._sourceFileCache[moduleId] ? this._sourceFileCache[moduleId]!.sourceFile : null;\n\t}\n\n\tprivate _getFileName(moduleId: string): string {\n\t\tif (/\\.d\\.ts$/.test(moduleId)) {\n\t\t\treturn path.join(SRC, moduleId);\n\t\t}\n\t\treturn path.join(SRC, `${moduleId}.ts`);\n\t}\n\n\tprivate _getDeclarationSourceFile(moduleId: string): CacheEntry | null {\n\t\tconst fileName = this._getFileName(moduleId);\n\t\tif (!this._fsProvider.existsSync(fileName)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst mtime = this._fsProvider.statSync(fileName).mtime.getTime();\n\t\tif (/\\.d\\.ts$/.test(moduleId)) {\n\t\t\t// const mtime = this._fsProvider.statFileSync()\n\t\t\tconst fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();\n\t\t\treturn new CacheEntry(\n\t\t\t\tthis.ts.createSourceFile(fileName, fileContents, this.ts.ScriptTarget.ES5),\n\t\t\t\tmtime\n\t\t\t);\n\t\t}\n\t\tconst fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();\n\t\tconst fileMap: IFileMap = {\n\t\t\t'file.ts': fileContents\n\t\t};\n\t\tconst service = this.ts.createLanguageService(new TypeScriptLanguageServiceHost(this.ts, {}, fileMap, {}));\n\t\tconst text = service.getEmitOutput('file.ts', true, true).outputFiles[0].text;\n\t\treturn new CacheEntry(\n\t\t\tthis.ts.createSourceFile(fileName, text, this.ts.ScriptTarget.ES5),\n\t\t\tmtime\n\t\t);\n\t}\n}\n\nexport function run3(resolver: DeclarationResolver): IMonacoDeclarationResult | null {\n\tconst sourceFileGetter = (moduleId: string) => resolver.getDeclarationSourceFile(moduleId);\n\treturn _run(resolver.ts, sourceFileGetter);\n}\n\n\n\n\ninterface ILibMap { [libName: string]: string }\ninterface IFileMap { [fileName: string]: string }\n\nclass TypeScriptLanguageServiceHost implements ts.LanguageServiceHost {\n\n\tprivate readonly _ts: typeof import('typescript');\n\tprivate readonly _libs: ILibMap;\n\tprivate readonly _files: IFileMap;\n\tprivate readonly _compilerOptions: ts.CompilerOptions;\n\n\tconstructor(ts: typeof import('typescript'), libs: ILibMap, files: IFileMap, compilerOptions: ts.CompilerOptions) {\n\t\tthis._ts = ts;\n\t\tthis._libs = libs;\n\t\tthis._files = files;\n\t\tthis._compilerOptions = compilerOptions;\n\t}\n\n\t// --- language service host ---------------\n\n\tgetCompilationSettings(): ts.CompilerOptions {\n\t\treturn this._compilerOptions;\n\t}\n\tgetScriptFileNames(): string[] {\n\t\treturn (\n\t\t\t([] as string[])\n\t\t\t\t.concat(Object.keys(this._libs))\n\t\t\t\t.concat(Object.keys(this._files))\n\t\t);\n\t}\n\tgetScriptVersion(_fileName: string): string {\n\t\treturn '1';\n\t}\n\tgetProjectVersion(): string {\n\t\treturn '1';\n\t}\n\tgetScriptSnapshot(fileName: string): ts.IScriptSnapshot {\n\t\tif (this._files.hasOwnProperty(fileName)) {\n\t\t\treturn this._ts.ScriptSnapshot.fromString(this._files[fileName]);\n\t\t} else if (this._libs.hasOwnProperty(fileName)) {\n\t\t\treturn this._ts.ScriptSnapshot.fromString(this._libs[fileName]);\n\t\t} else {\n\t\t\treturn this._ts.ScriptSnapshot.fromString('');\n\t\t}\n\t}\n\tgetScriptKind(_fileName: string): ts.ScriptKind {\n\t\treturn this._ts.ScriptKind.TS;\n\t}\n\tgetCurrentDirectory(): string {\n\t\treturn '';\n\t}\n\tgetDefaultLibFileName(_options: ts.CompilerOptions): string {\n\t\treturn 'defaultLib:es5';\n\t}\n\tisDefaultLibFileName(fileName: string): boolean {\n\t\treturn fileName === this.getDefaultLibFileName(this._compilerOptions);\n\t}\n\treadFile(path: string, _encoding?: string): string | undefined {\n\t\treturn this._files[path] || this._libs[path];\n\t}\n\tfileExists(path: string): boolean {\n\t\treturn path in this._files || path in this._libs;\n\t}\n}\n\nexport function execute(): IMonacoDeclarationResult {\n\tconst r = run3(new DeclarationResolver(new FSProvider()));\n\tif (!r) {\n\t\tthrow new Error(`monaco.d.ts generation error - Cannot continue`);\n\t}\n\treturn r;\n}\n"
  },
  {
    "path": "build/lib/nls.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.nls = nls;\nconst lazy_js_1 = __importDefault(require(\"lazy.js\"));\nconst event_stream_1 = require(\"event-stream\");\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst source_map_1 = __importDefault(require(\"source-map\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst gulp_sort_1 = __importDefault(require(\"gulp-sort\"));\nvar CollectStepResult;\n(function (CollectStepResult) {\n    CollectStepResult[CollectStepResult[\"Yes\"] = 0] = \"Yes\";\n    CollectStepResult[CollectStepResult[\"YesAndRecurse\"] = 1] = \"YesAndRecurse\";\n    CollectStepResult[CollectStepResult[\"No\"] = 2] = \"No\";\n    CollectStepResult[CollectStepResult[\"NoAndRecurse\"] = 3] = \"NoAndRecurse\";\n})(CollectStepResult || (CollectStepResult = {}));\nfunction collect(ts, node, fn) {\n    const result = [];\n    function loop(node) {\n        const stepResult = fn(node);\n        if (stepResult === CollectStepResult.Yes || stepResult === CollectStepResult.YesAndRecurse) {\n            result.push(node);\n        }\n        if (stepResult === CollectStepResult.YesAndRecurse || stepResult === CollectStepResult.NoAndRecurse) {\n            ts.forEachChild(node, loop);\n        }\n    }\n    loop(node);\n    return result;\n}\nfunction clone(object) {\n    const result = {};\n    for (const id in object) {\n        result[id] = object[id];\n    }\n    return result;\n}\n/**\n * Returns a stream containing the patched JavaScript and source maps.\n */\nfunction nls(options) {\n    let base;\n    const input = (0, event_stream_1.through)();\n    const output = input\n        .pipe((0, gulp_sort_1.default)()) // IMPORTANT: to ensure stable NLS metadata generation, we must sort the files because NLS messages are globally extracted and indexed across all files\n        .pipe((0, event_stream_1.through)(function (f) {\n        if (!f.sourceMap) {\n            return this.emit('error', new Error(`File ${f.relative} does not have sourcemaps.`));\n        }\n        let source = f.sourceMap.sources[0];\n        if (!source) {\n            return this.emit('error', new Error(`File ${f.relative} does not have a source in the source map.`));\n        }\n        const root = f.sourceMap.sourceRoot;\n        if (root) {\n            source = path_1.default.join(root, source);\n        }\n        const typescript = f.sourceMap.sourcesContent[0];\n        if (!typescript) {\n            return this.emit('error', new Error(`File ${f.relative} does not have the original content in the source map.`));\n        }\n        base = f.base;\n        this.emit('data', _nls.patchFile(f, typescript, options));\n    }, function () {\n        for (const file of [\n            new vinyl_1.default({\n                contents: Buffer.from(JSON.stringify({\n                    keys: _nls.moduleToNLSKeys,\n                    messages: _nls.moduleToNLSMessages,\n                }, null, '\\t')),\n                base,\n                path: `${base}/nls.metadata.json`\n            }),\n            new vinyl_1.default({\n                contents: Buffer.from(JSON.stringify(_nls.allNLSMessages)),\n                base,\n                path: `${base}/nls.messages.json`\n            }),\n            new vinyl_1.default({\n                contents: Buffer.from(JSON.stringify(_nls.allNLSModulesAndKeys)),\n                base,\n                path: `${base}/nls.keys.json`\n            }),\n            new vinyl_1.default({\n                contents: Buffer.from(`/*---------------------------------------------------------\n * Copyright (C) Microsoft Corporation. All rights reserved.\n *--------------------------------------------------------*/\nglobalThis._VSCODE_NLS_MESSAGES=${JSON.stringify(_nls.allNLSMessages)};`),\n                base,\n                path: `${base}/nls.messages.js`\n            })\n        ]) {\n            this.emit('data', file);\n        }\n        this.emit('end');\n    }));\n    return (0, event_stream_1.duplex)(input, output);\n}\nfunction isImportNode(ts, node) {\n    return node.kind === ts.SyntaxKind.ImportDeclaration || node.kind === ts.SyntaxKind.ImportEqualsDeclaration;\n}\nvar _nls;\n(function (_nls) {\n    _nls.moduleToNLSKeys = {};\n    _nls.moduleToNLSMessages = {};\n    _nls.allNLSMessages = [];\n    _nls.allNLSModulesAndKeys = [];\n    let allNLSMessagesIndex = 0;\n    function fileFrom(file, contents, path = file.path) {\n        return new vinyl_1.default({\n            contents: Buffer.from(contents),\n            base: file.base,\n            cwd: file.cwd,\n            path: path\n        });\n    }\n    function mappedPositionFrom(source, lc) {\n        return { source, line: lc.line + 1, column: lc.character };\n    }\n    function lcFrom(position) {\n        return { line: position.line - 1, character: position.column };\n    }\n    class SingleFileServiceHost {\n        options;\n        filename;\n        file;\n        lib;\n        constructor(ts, options, filename, contents) {\n            this.options = options;\n            this.filename = filename;\n            this.file = ts.ScriptSnapshot.fromString(contents);\n            this.lib = ts.ScriptSnapshot.fromString('');\n        }\n        getCompilationSettings = () => this.options;\n        getScriptFileNames = () => [this.filename];\n        getScriptVersion = () => '1';\n        getScriptSnapshot = (name) => name === this.filename ? this.file : this.lib;\n        getCurrentDirectory = () => '';\n        getDefaultLibFileName = () => 'lib.d.ts';\n        readFile(path, _encoding) {\n            if (path === this.filename) {\n                return this.file.getText(0, this.file.getLength());\n            }\n            return undefined;\n        }\n        fileExists(path) {\n            return path === this.filename;\n        }\n    }\n    function isCallExpressionWithinTextSpanCollectStep(ts, textSpan, node) {\n        if (!ts.textSpanContainsTextSpan({ start: node.pos, length: node.end - node.pos }, textSpan)) {\n            return CollectStepResult.No;\n        }\n        return node.kind === ts.SyntaxKind.CallExpression ? CollectStepResult.YesAndRecurse : CollectStepResult.NoAndRecurse;\n    }\n    function analyze(ts, contents, functionName, options = {}) {\n        const filename = 'file.ts';\n        const serviceHost = new SingleFileServiceHost(ts, Object.assign(clone(options), { noResolve: true }), filename, contents);\n        const service = ts.createLanguageService(serviceHost);\n        const sourceFile = ts.createSourceFile(filename, contents, ts.ScriptTarget.ES5, true);\n        // all imports\n        const imports = (0, lazy_js_1.default)(collect(ts, sourceFile, n => isImportNode(ts, n) ? CollectStepResult.YesAndRecurse : CollectStepResult.NoAndRecurse));\n        // import nls = require('vs/nls');\n        const importEqualsDeclarations = imports\n            .filter(n => n.kind === ts.SyntaxKind.ImportEqualsDeclaration)\n            .map(n => n)\n            .filter(d => d.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference)\n            .filter(d => d.moduleReference.expression.getText().endsWith(`/nls.js'`));\n        // import ... from 'vs/nls';\n        const importDeclarations = imports\n            .filter(n => n.kind === ts.SyntaxKind.ImportDeclaration)\n            .map(n => n)\n            .filter(d => d.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral)\n            .filter(d => d.moduleSpecifier.getText().endsWith(`/nls.js'`))\n            .filter(d => !!d.importClause && !!d.importClause.namedBindings);\n        // `nls.localize(...)` calls\n        const nlsLocalizeCallExpressions = importDeclarations\n            .filter(d => !!(d.importClause && d.importClause.namedBindings && d.importClause.namedBindings.kind === ts.SyntaxKind.NamespaceImport))\n            .map(d => d.importClause.namedBindings.name)\n            .concat(importEqualsDeclarations.map(d => d.name))\n            // find read-only references to `nls`\n            .map(n => service.getReferencesAtPosition(filename, n.pos + 1))\n            .flatten()\n            .filter(r => !r.isWriteAccess)\n            // find the deepest call expressions AST nodes that contain those references\n            .map(r => collect(ts, sourceFile, n => isCallExpressionWithinTextSpanCollectStep(ts, r.textSpan, n)))\n            .map(a => (0, lazy_js_1.default)(a).last())\n            .filter(n => !!n)\n            .map(n => n)\n            // only `localize` calls\n            .filter(n => n.expression.kind === ts.SyntaxKind.PropertyAccessExpression && n.expression.name.getText() === functionName);\n        // `localize` named imports\n        const allLocalizeImportDeclarations = importDeclarations\n            .filter(d => !!(d.importClause && d.importClause.namedBindings && d.importClause.namedBindings.kind === ts.SyntaxKind.NamedImports))\n            .map(d => [].concat(d.importClause.namedBindings.elements))\n            .flatten();\n        // `localize` read-only references\n        const localizeReferences = allLocalizeImportDeclarations\n            .filter(d => d.name.getText() === functionName)\n            .map(n => service.getReferencesAtPosition(filename, n.pos + 1))\n            .flatten()\n            .filter(r => !r.isWriteAccess);\n        // custom named `localize` read-only references\n        const namedLocalizeReferences = allLocalizeImportDeclarations\n            .filter(d => d.propertyName && d.propertyName.getText() === functionName)\n            .map(n => service.getReferencesAtPosition(filename, n.name.pos + 1))\n            .flatten()\n            .filter(r => !r.isWriteAccess);\n        // find the deepest call expressions AST nodes that contain those references\n        const localizeCallExpressions = localizeReferences\n            .concat(namedLocalizeReferences)\n            .map(r => collect(ts, sourceFile, n => isCallExpressionWithinTextSpanCollectStep(ts, r.textSpan, n)))\n            .map(a => (0, lazy_js_1.default)(a).last())\n            .filter(n => !!n)\n            .map(n => n);\n        // collect everything\n        const localizeCalls = nlsLocalizeCallExpressions\n            .concat(localizeCallExpressions)\n            .map(e => e.arguments)\n            .filter(a => a.length > 1)\n            .sort((a, b) => a[0].getStart() - b[0].getStart())\n            .map(a => ({\n            keySpan: { start: ts.getLineAndCharacterOfPosition(sourceFile, a[0].getStart()), end: ts.getLineAndCharacterOfPosition(sourceFile, a[0].getEnd()) },\n            key: a[0].getText(),\n            valueSpan: { start: ts.getLineAndCharacterOfPosition(sourceFile, a[1].getStart()), end: ts.getLineAndCharacterOfPosition(sourceFile, a[1].getEnd()) },\n            value: a[1].getText()\n        }));\n        return {\n            localizeCalls: localizeCalls.toArray()\n        };\n    }\n    class TextModel {\n        lines;\n        lineEndings;\n        constructor(contents) {\n            const regex = /\\r\\n|\\r|\\n/g;\n            let index = 0;\n            let match;\n            this.lines = [];\n            this.lineEndings = [];\n            while (match = regex.exec(contents)) {\n                this.lines.push(contents.substring(index, match.index));\n                this.lineEndings.push(match[0]);\n                index = regex.lastIndex;\n            }\n            if (contents.length > 0) {\n                this.lines.push(contents.substring(index, contents.length));\n                this.lineEndings.push('');\n            }\n        }\n        get(index) {\n            return this.lines[index];\n        }\n        set(index, line) {\n            this.lines[index] = line;\n        }\n        get lineCount() {\n            return this.lines.length;\n        }\n        /**\n         * Applies patch(es) to the model.\n         * Multiple patches must be ordered.\n         * Does not support patches spanning multiple lines.\n         */\n        apply(patch) {\n            const startLineNumber = patch.span.start.line;\n            const endLineNumber = patch.span.end.line;\n            const startLine = this.lines[startLineNumber] || '';\n            const endLine = this.lines[endLineNumber] || '';\n            this.lines[startLineNumber] = [\n                startLine.substring(0, patch.span.start.character),\n                patch.content,\n                endLine.substring(patch.span.end.character)\n            ].join('');\n            for (let i = startLineNumber + 1; i <= endLineNumber; i++) {\n                this.lines[i] = '';\n            }\n        }\n        toString() {\n            return (0, lazy_js_1.default)(this.lines).zip(this.lineEndings)\n                .flatten().toArray().join('');\n        }\n    }\n    function patchJavascript(patches, contents) {\n        const model = new TextModel(contents);\n        // patch the localize calls\n        (0, lazy_js_1.default)(patches).reverse().each(p => model.apply(p));\n        return model.toString();\n    }\n    function patchSourcemap(patches, rsm, smc) {\n        const smg = new source_map_1.default.SourceMapGenerator({\n            file: rsm.file,\n            sourceRoot: rsm.sourceRoot\n        });\n        patches = patches.reverse();\n        let currentLine = -1;\n        let currentLineDiff = 0;\n        let source = null;\n        smc.eachMapping(m => {\n            const patch = patches[patches.length - 1];\n            const original = { line: m.originalLine, column: m.originalColumn };\n            const generated = { line: m.generatedLine, column: m.generatedColumn };\n            if (currentLine !== generated.line) {\n                currentLineDiff = 0;\n            }\n            currentLine = generated.line;\n            generated.column += currentLineDiff;\n            if (patch && m.generatedLine - 1 === patch.span.end.line && m.generatedColumn === patch.span.end.character) {\n                const originalLength = patch.span.end.character - patch.span.start.character;\n                const modifiedLength = patch.content.length;\n                const lengthDiff = modifiedLength - originalLength;\n                currentLineDiff += lengthDiff;\n                generated.column += lengthDiff;\n                patches.pop();\n            }\n            source = rsm.sourceRoot ? path_1.default.relative(rsm.sourceRoot, m.source) : m.source;\n            source = source.replace(/\\\\/g, '/');\n            smg.addMapping({ source, name: m.name, original, generated });\n        }, null, source_map_1.default.SourceMapConsumer.GENERATED_ORDER);\n        if (source) {\n            smg.setSourceContent(source, smc.sourceContentFor(source));\n        }\n        return JSON.parse(smg.toString());\n    }\n    function parseLocalizeKeyOrValue(sourceExpression) {\n        // sourceValue can be \"foo\", 'foo', `foo` or { .... }\n        // in its evalulated form\n        // we want to return either the string or the object\n        // eslint-disable-next-line no-eval\n        return eval(`(${sourceExpression})`);\n    }\n    function patch(ts, typescript, javascript, sourcemap, options) {\n        const { localizeCalls } = analyze(ts, typescript, 'localize');\n        const { localizeCalls: localize2Calls } = analyze(ts, typescript, 'localize2');\n        if (localizeCalls.length === 0 && localize2Calls.length === 0) {\n            return { javascript, sourcemap };\n        }\n        const nlsKeys = localizeCalls.map(lc => parseLocalizeKeyOrValue(lc.key)).concat(localize2Calls.map(lc => parseLocalizeKeyOrValue(lc.key)));\n        const nlsMessages = localizeCalls.map(lc => parseLocalizeKeyOrValue(lc.value)).concat(localize2Calls.map(lc => parseLocalizeKeyOrValue(lc.value)));\n        const smc = new source_map_1.default.SourceMapConsumer(sourcemap);\n        const positionFrom = mappedPositionFrom.bind(null, sourcemap.sources[0]);\n        // build patches\n        const toPatch = (c) => {\n            const start = lcFrom(smc.generatedPositionFor(positionFrom(c.range.start)));\n            const end = lcFrom(smc.generatedPositionFor(positionFrom(c.range.end)));\n            return { span: { start, end }, content: c.content };\n        };\n        const localizePatches = (0, lazy_js_1.default)(localizeCalls)\n            .map(lc => (options.preserveEnglish ? [\n            { range: lc.keySpan, content: `${allNLSMessagesIndex++}` } // localize('key', \"message\") => localize(<index>, \"message\")\n        ] : [\n            { range: lc.keySpan, content: `${allNLSMessagesIndex++}` }, // localize('key', \"message\") => localize(<index>, null)\n            { range: lc.valueSpan, content: 'null' }\n        ]))\n            .flatten()\n            .map(toPatch);\n        const localize2Patches = (0, lazy_js_1.default)(localize2Calls)\n            .map(lc => ({ range: lc.keySpan, content: `${allNLSMessagesIndex++}` } // localize2('key', \"message\") => localize(<index>, \"message\")\n        ))\n            .map(toPatch);\n        // Sort patches by their start position\n        const patches = localizePatches.concat(localize2Patches).toArray().sort((a, b) => {\n            if (a.span.start.line < b.span.start.line) {\n                return -1;\n            }\n            else if (a.span.start.line > b.span.start.line) {\n                return 1;\n            }\n            else if (a.span.start.character < b.span.start.character) {\n                return -1;\n            }\n            else if (a.span.start.character > b.span.start.character) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        });\n        javascript = patchJavascript(patches, javascript);\n        sourcemap = patchSourcemap(patches, sourcemap, smc);\n        return { javascript, sourcemap, nlsKeys, nlsMessages };\n    }\n    function patchFile(javascriptFile, typescript, options) {\n        const ts = require('typescript');\n        // hack?\n        const moduleId = javascriptFile.relative\n            .replace(/\\.js$/, '')\n            .replace(/\\\\/g, '/');\n        const { javascript, sourcemap, nlsKeys, nlsMessages } = patch(ts, typescript, javascriptFile.contents.toString(), javascriptFile.sourceMap, options);\n        const result = fileFrom(javascriptFile, javascript);\n        result.sourceMap = sourcemap;\n        if (nlsKeys) {\n            _nls.moduleToNLSKeys[moduleId] = nlsKeys;\n            _nls.allNLSModulesAndKeys.push([moduleId, nlsKeys.map(nlsKey => typeof nlsKey === 'string' ? nlsKey : nlsKey.key)]);\n        }\n        if (nlsMessages) {\n            _nls.moduleToNLSMessages[moduleId] = nlsMessages;\n            _nls.allNLSMessages.push(...nlsMessages);\n        }\n        return result;\n    }\n    _nls.patchFile = patchFile;\n})(_nls || (_nls = {}));\n//# sourceMappingURL=nls.js.map"
  },
  {
    "path": "build/lib/nls.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type * as ts from 'typescript';\nimport lazy from 'lazy.js';\nimport { duplex, through } from 'event-stream';\nimport File from 'vinyl';\nimport sm from 'source-map';\nimport path from 'path';\nimport sort from 'gulp-sort';\n\ndeclare class FileSourceMap extends File {\n\tpublic sourceMap: sm.RawSourceMap;\n}\n\nenum CollectStepResult {\n\tYes,\n\tYesAndRecurse,\n\tNo,\n\tNoAndRecurse\n}\n\nfunction collect(ts: typeof import('typescript'), node: ts.Node, fn: (node: ts.Node) => CollectStepResult): ts.Node[] {\n\tconst result: ts.Node[] = [];\n\n\tfunction loop(node: ts.Node) {\n\t\tconst stepResult = fn(node);\n\n\t\tif (stepResult === CollectStepResult.Yes || stepResult === CollectStepResult.YesAndRecurse) {\n\t\t\tresult.push(node);\n\t\t}\n\n\t\tif (stepResult === CollectStepResult.YesAndRecurse || stepResult === CollectStepResult.NoAndRecurse) {\n\t\t\tts.forEachChild(node, loop);\n\t\t}\n\t}\n\n\tloop(node);\n\treturn result;\n}\n\nfunction clone<T extends object>(object: T): T {\n\tconst result = {} as any as T;\n\tfor (const id in object) {\n\t\tresult[id] = object[id];\n\t}\n\treturn result;\n}\n\n/**\n * Returns a stream containing the patched JavaScript and source maps.\n */\nexport function nls(options: { preserveEnglish: boolean }): NodeJS.ReadWriteStream {\n\tlet base: string;\n\tconst input = through();\n\tconst output = input\n\t\t.pipe(sort()) // IMPORTANT: to ensure stable NLS metadata generation, we must sort the files because NLS messages are globally extracted and indexed across all files\n\t\t.pipe(through(function (f: FileSourceMap) {\n\t\t\tif (!f.sourceMap) {\n\t\t\t\treturn this.emit('error', new Error(`File ${f.relative} does not have sourcemaps.`));\n\t\t\t}\n\n\t\t\tlet source = f.sourceMap.sources[0];\n\t\t\tif (!source) {\n\t\t\t\treturn this.emit('error', new Error(`File ${f.relative} does not have a source in the source map.`));\n\t\t\t}\n\n\t\t\tconst root = f.sourceMap.sourceRoot;\n\t\t\tif (root) {\n\t\t\t\tsource = path.join(root, source);\n\t\t\t}\n\n\t\t\tconst typescript = f.sourceMap.sourcesContent![0];\n\t\t\tif (!typescript) {\n\t\t\t\treturn this.emit('error', new Error(`File ${f.relative} does not have the original content in the source map.`));\n\t\t\t}\n\n\t\t\tbase = f.base;\n\t\t\tthis.emit('data', _nls.patchFile(f, typescript, options));\n\t\t}, function () {\n\t\t\tfor (const file of [\n\t\t\t\tnew File({\n\t\t\t\t\tcontents: Buffer.from(JSON.stringify({\n\t\t\t\t\t\tkeys: _nls.moduleToNLSKeys,\n\t\t\t\t\t\tmessages: _nls.moduleToNLSMessages,\n\t\t\t\t\t}, null, '\\t')),\n\t\t\t\t\tbase,\n\t\t\t\t\tpath: `${base}/nls.metadata.json`\n\t\t\t\t}),\n\t\t\t\tnew File({\n\t\t\t\t\tcontents: Buffer.from(JSON.stringify(_nls.allNLSMessages)),\n\t\t\t\t\tbase,\n\t\t\t\t\tpath: `${base}/nls.messages.json`\n\t\t\t\t}),\n\t\t\t\tnew File({\n\t\t\t\t\tcontents: Buffer.from(JSON.stringify(_nls.allNLSModulesAndKeys)),\n\t\t\t\t\tbase,\n\t\t\t\t\tpath: `${base}/nls.keys.json`\n\t\t\t\t}),\n\t\t\t\tnew File({\n\t\t\t\t\tcontents: Buffer.from(`/*---------------------------------------------------------\n * Copyright (C) Microsoft Corporation. All rights reserved.\n *--------------------------------------------------------*/\nglobalThis._VSCODE_NLS_MESSAGES=${JSON.stringify(_nls.allNLSMessages)};`),\n\t\t\t\t\tbase,\n\t\t\t\t\tpath: `${base}/nls.messages.js`\n\t\t\t\t})\n\t\t\t]) {\n\t\t\t\tthis.emit('data', file);\n\t\t\t}\n\n\t\t\tthis.emit('end');\n\t\t}));\n\n\treturn duplex(input, output);\n}\n\nfunction isImportNode(ts: typeof import('typescript'), node: ts.Node): boolean {\n\treturn node.kind === ts.SyntaxKind.ImportDeclaration || node.kind === ts.SyntaxKind.ImportEqualsDeclaration;\n}\n\nmodule _nls {\n\n\texport const moduleToNLSKeys: { [name: string /* module ID */]: ILocalizeKey[] /* keys */ } = {};\n\texport const moduleToNLSMessages: { [name: string /* module ID */]: string[] /* messages */ } = {};\n\texport const allNLSMessages: string[] = [];\n\texport const allNLSModulesAndKeys: Array<[string /* module ID */, string[] /* keys */]> = [];\n\tlet allNLSMessagesIndex = 0;\n\n\ttype ILocalizeKey = string | { key: string }; // key might contain metadata for translators and then is not just a string\n\n\tinterface INlsPatchResult {\n\t\tjavascript: string;\n\t\tsourcemap: sm.RawSourceMap;\n\t\tnlsMessages?: string[];\n\t\tnlsKeys?: ILocalizeKey[];\n\t}\n\n\tinterface ISpan {\n\t\tstart: ts.LineAndCharacter;\n\t\tend: ts.LineAndCharacter;\n\t}\n\n\tinterface ILocalizeCall {\n\t\tkeySpan: ISpan;\n\t\tkey: string;\n\t\tvalueSpan: ISpan;\n\t\tvalue: string;\n\t}\n\n\tinterface ILocalizeAnalysisResult {\n\t\tlocalizeCalls: ILocalizeCall[];\n\t}\n\n\tinterface IPatch {\n\t\tspan: ISpan;\n\t\tcontent: string;\n\t}\n\n\tfunction fileFrom(file: File, contents: string, path: string = file.path) {\n\t\treturn new File({\n\t\t\tcontents: Buffer.from(contents),\n\t\t\tbase: file.base,\n\t\t\tcwd: file.cwd,\n\t\t\tpath: path\n\t\t});\n\t}\n\n\tfunction mappedPositionFrom(source: string, lc: ts.LineAndCharacter): sm.MappedPosition {\n\t\treturn { source, line: lc.line + 1, column: lc.character };\n\t}\n\n\tfunction lcFrom(position: sm.Position): ts.LineAndCharacter {\n\t\treturn { line: position.line - 1, character: position.column };\n\t}\n\n\tclass SingleFileServiceHost implements ts.LanguageServiceHost {\n\n\t\tprivate file: ts.IScriptSnapshot;\n\t\tprivate lib: ts.IScriptSnapshot;\n\n\t\tconstructor(ts: typeof import('typescript'), private options: ts.CompilerOptions, private filename: string, contents: string) {\n\t\t\tthis.file = ts.ScriptSnapshot.fromString(contents);\n\t\t\tthis.lib = ts.ScriptSnapshot.fromString('');\n\t\t}\n\n\t\tgetCompilationSettings = () => this.options;\n\t\tgetScriptFileNames = () => [this.filename];\n\t\tgetScriptVersion = () => '1';\n\t\tgetScriptSnapshot = (name: string) => name === this.filename ? this.file : this.lib;\n\t\tgetCurrentDirectory = () => '';\n\t\tgetDefaultLibFileName = () => 'lib.d.ts';\n\n\t\treadFile(path: string, _encoding?: string): string | undefined {\n\t\t\tif (path === this.filename) {\n\t\t\t\treturn this.file.getText(0, this.file.getLength());\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\tfileExists(path: string): boolean {\n\t\t\treturn path === this.filename;\n\t\t}\n\t}\n\n\tfunction isCallExpressionWithinTextSpanCollectStep(ts: typeof import('typescript'), textSpan: ts.TextSpan, node: ts.Node): CollectStepResult {\n\t\tif (!ts.textSpanContainsTextSpan({ start: node.pos, length: node.end - node.pos }, textSpan)) {\n\t\t\treturn CollectStepResult.No;\n\t\t}\n\n\t\treturn node.kind === ts.SyntaxKind.CallExpression ? CollectStepResult.YesAndRecurse : CollectStepResult.NoAndRecurse;\n\t}\n\n\tfunction analyze(\n\t\tts: typeof import('typescript'),\n\t\tcontents: string,\n\t\tfunctionName: 'localize' | 'localize2',\n\t\toptions: ts.CompilerOptions = {}\n\t): ILocalizeAnalysisResult {\n\t\tconst filename = 'file.ts';\n\t\tconst serviceHost = new SingleFileServiceHost(ts, Object.assign(clone(options), { noResolve: true }), filename, contents);\n\t\tconst service = ts.createLanguageService(serviceHost);\n\t\tconst sourceFile = ts.createSourceFile(filename, contents, ts.ScriptTarget.ES5, true);\n\n\t\t// all imports\n\t\tconst imports = lazy(collect(ts, sourceFile, n => isImportNode(ts, n) ? CollectStepResult.YesAndRecurse : CollectStepResult.NoAndRecurse));\n\n\t\t// import nls = require('vs/nls');\n\t\tconst importEqualsDeclarations = imports\n\t\t\t.filter(n => n.kind === ts.SyntaxKind.ImportEqualsDeclaration)\n\t\t\t.map(n => <ts.ImportEqualsDeclaration>n)\n\t\t\t.filter(d => d.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference)\n\t\t\t.filter(d => (<ts.ExternalModuleReference>d.moduleReference).expression.getText().endsWith(`/nls.js'`));\n\n\t\t// import ... from 'vs/nls';\n\t\tconst importDeclarations = imports\n\t\t\t.filter(n => n.kind === ts.SyntaxKind.ImportDeclaration)\n\t\t\t.map(n => <ts.ImportDeclaration>n)\n\t\t\t.filter(d => d.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral)\n\t\t\t.filter(d => d.moduleSpecifier.getText().endsWith(`/nls.js'`))\n\t\t\t.filter(d => !!d.importClause && !!d.importClause.namedBindings);\n\n\t\t// `nls.localize(...)` calls\n\t\tconst nlsLocalizeCallExpressions = importDeclarations\n\t\t\t.filter(d => !!(d.importClause && d.importClause.namedBindings && d.importClause.namedBindings.kind === ts.SyntaxKind.NamespaceImport))\n\t\t\t.map(d => (<ts.NamespaceImport>d.importClause!.namedBindings).name)\n\t\t\t.concat(importEqualsDeclarations.map(d => d.name))\n\n\t\t\t// find read-only references to `nls`\n\t\t\t.map(n => service.getReferencesAtPosition(filename, n.pos + 1))\n\t\t\t.flatten()\n\t\t\t.filter(r => !r.isWriteAccess)\n\n\t\t\t// find the deepest call expressions AST nodes that contain those references\n\t\t\t.map(r => collect(ts, sourceFile, n => isCallExpressionWithinTextSpanCollectStep(ts, r.textSpan, n)))\n\t\t\t.map(a => lazy(a).last())\n\t\t\t.filter(n => !!n)\n\t\t\t.map(n => <ts.CallExpression>n)\n\n\t\t\t// only `localize` calls\n\t\t\t.filter(n => n.expression.kind === ts.SyntaxKind.PropertyAccessExpression && (<ts.PropertyAccessExpression>n.expression).name.getText() === functionName);\n\n\t\t// `localize` named imports\n\t\tconst allLocalizeImportDeclarations = importDeclarations\n\t\t\t.filter(d => !!(d.importClause && d.importClause.namedBindings && d.importClause.namedBindings.kind === ts.SyntaxKind.NamedImports))\n\t\t\t.map(d => ([] as any[]).concat((<ts.NamedImports>d.importClause!.namedBindings!).elements))\n\t\t\t.flatten();\n\n\t\t// `localize` read-only references\n\t\tconst localizeReferences = allLocalizeImportDeclarations\n\t\t\t.filter(d => d.name.getText() === functionName)\n\t\t\t.map(n => service.getReferencesAtPosition(filename, n.pos + 1))\n\t\t\t.flatten()\n\t\t\t.filter(r => !r.isWriteAccess);\n\n\t\t// custom named `localize` read-only references\n\t\tconst namedLocalizeReferences = allLocalizeImportDeclarations\n\t\t\t.filter(d => d.propertyName && d.propertyName.getText() === functionName)\n\t\t\t.map(n => service.getReferencesAtPosition(filename, n.name.pos + 1))\n\t\t\t.flatten()\n\t\t\t.filter(r => !r.isWriteAccess);\n\n\t\t// find the deepest call expressions AST nodes that contain those references\n\t\tconst localizeCallExpressions = localizeReferences\n\t\t\t.concat(namedLocalizeReferences)\n\t\t\t.map(r => collect(ts, sourceFile, n => isCallExpressionWithinTextSpanCollectStep(ts, r.textSpan, n)))\n\t\t\t.map(a => lazy(a).last())\n\t\t\t.filter(n => !!n)\n\t\t\t.map(n => <ts.CallExpression>n);\n\n\t\t// collect everything\n\t\tconst localizeCalls = nlsLocalizeCallExpressions\n\t\t\t.concat(localizeCallExpressions)\n\t\t\t.map(e => e.arguments)\n\t\t\t.filter(a => a.length > 1)\n\t\t\t.sort((a, b) => a[0].getStart() - b[0].getStart())\n\t\t\t.map<ILocalizeCall>(a => ({\n\t\t\t\tkeySpan: { start: ts.getLineAndCharacterOfPosition(sourceFile, a[0].getStart()), end: ts.getLineAndCharacterOfPosition(sourceFile, a[0].getEnd()) },\n\t\t\t\tkey: a[0].getText(),\n\t\t\t\tvalueSpan: { start: ts.getLineAndCharacterOfPosition(sourceFile, a[1].getStart()), end: ts.getLineAndCharacterOfPosition(sourceFile, a[1].getEnd()) },\n\t\t\t\tvalue: a[1].getText()\n\t\t\t}));\n\n\t\treturn {\n\t\t\tlocalizeCalls: localizeCalls.toArray()\n\t\t};\n\t}\n\n\tclass TextModel {\n\n\t\tprivate lines: string[];\n\t\tprivate lineEndings: string[];\n\n\t\tconstructor(contents: string) {\n\t\t\tconst regex = /\\r\\n|\\r|\\n/g;\n\t\t\tlet index = 0;\n\t\t\tlet match: RegExpExecArray | null;\n\n\t\t\tthis.lines = [];\n\t\t\tthis.lineEndings = [];\n\n\t\t\twhile (match = regex.exec(contents)) {\n\t\t\t\tthis.lines.push(contents.substring(index, match.index));\n\t\t\t\tthis.lineEndings.push(match[0]);\n\t\t\t\tindex = regex.lastIndex;\n\t\t\t}\n\n\t\t\tif (contents.length > 0) {\n\t\t\t\tthis.lines.push(contents.substring(index, contents.length));\n\t\t\t\tthis.lineEndings.push('');\n\t\t\t}\n\t\t}\n\n\t\tpublic get(index: number): string {\n\t\t\treturn this.lines[index];\n\t\t}\n\n\t\tpublic set(index: number, line: string): void {\n\t\t\tthis.lines[index] = line;\n\t\t}\n\n\t\tpublic get lineCount(): number {\n\t\t\treturn this.lines.length;\n\t\t}\n\n\t\t/**\n\t\t * Applies patch(es) to the model.\n\t\t * Multiple patches must be ordered.\n\t\t * Does not support patches spanning multiple lines.\n\t\t */\n\t\tpublic apply(patch: IPatch): void {\n\t\t\tconst startLineNumber = patch.span.start.line;\n\t\t\tconst endLineNumber = patch.span.end.line;\n\n\t\t\tconst startLine = this.lines[startLineNumber] || '';\n\t\t\tconst endLine = this.lines[endLineNumber] || '';\n\n\t\t\tthis.lines[startLineNumber] = [\n\t\t\t\tstartLine.substring(0, patch.span.start.character),\n\t\t\t\tpatch.content,\n\t\t\t\tendLine.substring(patch.span.end.character)\n\t\t\t].join('');\n\n\t\t\tfor (let i = startLineNumber + 1; i <= endLineNumber; i++) {\n\t\t\t\tthis.lines[i] = '';\n\t\t\t}\n\t\t}\n\n\t\tpublic toString(): string {\n\t\t\treturn lazy(this.lines).zip(this.lineEndings)\n\t\t\t\t.flatten().toArray().join('');\n\t\t}\n\t}\n\n\tfunction patchJavascript(patches: IPatch[], contents: string): string {\n\t\tconst model = new TextModel(contents);\n\n\t\t// patch the localize calls\n\t\tlazy(patches).reverse().each(p => model.apply(p));\n\n\t\treturn model.toString();\n\t}\n\n\tfunction patchSourcemap(patches: IPatch[], rsm: sm.RawSourceMap, smc: sm.SourceMapConsumer): sm.RawSourceMap {\n\t\tconst smg = new sm.SourceMapGenerator({\n\t\t\tfile: rsm.file,\n\t\t\tsourceRoot: rsm.sourceRoot\n\t\t});\n\n\t\tpatches = patches.reverse();\n\t\tlet currentLine = -1;\n\t\tlet currentLineDiff = 0;\n\t\tlet source: string | null = null;\n\n\t\tsmc.eachMapping(m => {\n\t\t\tconst patch = patches[patches.length - 1];\n\t\t\tconst original = { line: m.originalLine, column: m.originalColumn };\n\t\t\tconst generated = { line: m.generatedLine, column: m.generatedColumn };\n\n\t\t\tif (currentLine !== generated.line) {\n\t\t\t\tcurrentLineDiff = 0;\n\t\t\t}\n\n\t\t\tcurrentLine = generated.line;\n\t\t\tgenerated.column += currentLineDiff;\n\n\t\t\tif (patch && m.generatedLine - 1 === patch.span.end.line && m.generatedColumn === patch.span.end.character) {\n\t\t\t\tconst originalLength = patch.span.end.character - patch.span.start.character;\n\t\t\t\tconst modifiedLength = patch.content.length;\n\t\t\t\tconst lengthDiff = modifiedLength - originalLength;\n\t\t\t\tcurrentLineDiff += lengthDiff;\n\t\t\t\tgenerated.column += lengthDiff;\n\n\t\t\t\tpatches.pop();\n\t\t\t}\n\n\t\t\tsource = rsm.sourceRoot ? path.relative(rsm.sourceRoot, m.source) : m.source;\n\t\t\tsource = source.replace(/\\\\/g, '/');\n\t\t\tsmg.addMapping({ source, name: m.name, original, generated });\n\t\t}, null, sm.SourceMapConsumer.GENERATED_ORDER);\n\n\t\tif (source) {\n\t\t\tsmg.setSourceContent(source, smc.sourceContentFor(source));\n\t\t}\n\n\t\treturn JSON.parse(smg.toString());\n\t}\n\n\tfunction parseLocalizeKeyOrValue(sourceExpression: string) {\n\t\t// sourceValue can be \"foo\", 'foo', `foo` or { .... }\n\t\t// in its evalulated form\n\t\t// we want to return either the string or the object\n\t\t// eslint-disable-next-line no-eval\n\t\treturn eval(`(${sourceExpression})`);\n\t}\n\n\tfunction patch(ts: typeof import('typescript'), typescript: string, javascript: string, sourcemap: sm.RawSourceMap, options: { preserveEnglish: boolean }): INlsPatchResult {\n\t\tconst { localizeCalls } = analyze(ts, typescript, 'localize');\n\t\tconst { localizeCalls: localize2Calls } = analyze(ts, typescript, 'localize2');\n\n\t\tif (localizeCalls.length === 0 && localize2Calls.length === 0) {\n\t\t\treturn { javascript, sourcemap };\n\t\t}\n\n\t\tconst nlsKeys = localizeCalls.map(lc => parseLocalizeKeyOrValue(lc.key)).concat(localize2Calls.map(lc => parseLocalizeKeyOrValue(lc.key)));\n\t\tconst nlsMessages = localizeCalls.map(lc => parseLocalizeKeyOrValue(lc.value)).concat(localize2Calls.map(lc => parseLocalizeKeyOrValue(lc.value)));\n\t\tconst smc = new sm.SourceMapConsumer(sourcemap);\n\t\tconst positionFrom = mappedPositionFrom.bind(null, sourcemap.sources[0]);\n\n\t\t// build patches\n\t\tconst toPatch = (c: { range: ISpan; content: string }): IPatch => {\n\t\t\tconst start = lcFrom(smc.generatedPositionFor(positionFrom(c.range.start)));\n\t\t\tconst end = lcFrom(smc.generatedPositionFor(positionFrom(c.range.end)));\n\t\t\treturn { span: { start, end }, content: c.content };\n\t\t};\n\n\t\tconst localizePatches = lazy(localizeCalls)\n\t\t\t.map(lc => (\n\t\t\t\toptions.preserveEnglish ? [\n\t\t\t\t\t{ range: lc.keySpan, content: `${allNLSMessagesIndex++}` } \t// localize('key', \"message\") => localize(<index>, \"message\")\n\t\t\t\t] : [\n\t\t\t\t\t{ range: lc.keySpan, content: `${allNLSMessagesIndex++}` }, // localize('key', \"message\") => localize(<index>, null)\n\t\t\t\t\t{ range: lc.valueSpan, content: 'null' }\n\t\t\t\t]))\n\t\t\t.flatten()\n\t\t\t.map(toPatch);\n\n\t\tconst localize2Patches = lazy(localize2Calls)\n\t\t\t.map(lc => (\n\t\t\t\t{ range: lc.keySpan, content: `${allNLSMessagesIndex++}` } // localize2('key', \"message\") => localize(<index>, \"message\")\n\t\t\t))\n\t\t\t.map(toPatch);\n\n\t\t// Sort patches by their start position\n\t\tconst patches = localizePatches.concat(localize2Patches).toArray().sort((a, b) => {\n\t\t\tif (a.span.start.line < b.span.start.line) {\n\t\t\t\treturn -1;\n\t\t\t} else if (a.span.start.line > b.span.start.line) {\n\t\t\t\treturn 1;\n\t\t\t} else if (a.span.start.character < b.span.start.character) {\n\t\t\t\treturn -1;\n\t\t\t} else if (a.span.start.character > b.span.start.character) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\n\t\tjavascript = patchJavascript(patches, javascript);\n\n\t\tsourcemap = patchSourcemap(patches, sourcemap, smc);\n\n\t\treturn { javascript, sourcemap, nlsKeys, nlsMessages };\n\t}\n\n\texport function patchFile(javascriptFile: File, typescript: string, options: { preserveEnglish: boolean }): File {\n\t\tconst ts = require('typescript') as typeof import('typescript');\n\t\t// hack?\n\t\tconst moduleId = javascriptFile.relative\n\t\t\t.replace(/\\.js$/, '')\n\t\t\t.replace(/\\\\/g, '/');\n\n\t\tconst { javascript, sourcemap, nlsKeys, nlsMessages } = patch(\n\t\t\tts,\n\t\t\ttypescript,\n\t\t\tjavascriptFile.contents.toString(),\n\t\t\t(<any>javascriptFile).sourceMap,\n\t\t\toptions\n\t\t);\n\n\t\tconst result = fileFrom(javascriptFile, javascript);\n\t\t(<any>result).sourceMap = sourcemap;\n\n\t\tif (nlsKeys) {\n\t\t\tmoduleToNLSKeys[moduleId] = nlsKeys;\n\t\t\tallNLSModulesAndKeys.push([moduleId, nlsKeys.map(nlsKey => typeof nlsKey === 'string' ? nlsKey : nlsKey.key)]);\n\t\t}\n\n\t\tif (nlsMessages) {\n\t\t\tmoduleToNLSMessages[moduleId] = nlsMessages;\n\t\t\tallNLSMessages.push(...nlsMessages);\n\t\t}\n\n\t\treturn result;\n\t}\n}\n"
  },
  {
    "path": "build/lib/node.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path_1 = __importDefault(require(\"path\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst npmrcPath = path_1.default.join(root, 'remote', '.npmrc');\nconst npmrc = fs_1.default.readFileSync(npmrcPath, 'utf8');\nconst version = /^target=\"(.*)\"$/m.exec(npmrc)[1];\nconst platform = process.platform;\nconst arch = process.arch;\nconst node = platform === 'win32' ? 'node.exe' : 'node';\nconst nodePath = path_1.default.join(root, '.build', 'node', `v${version}`, `${platform}-${arch}`, node);\nconsole.log(nodePath);\n//# sourceMappingURL=node.js.map"
  },
  {
    "path": "build/lib/node.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport path from 'path';\nimport fs from 'fs';\n\nconst root = path.dirname(path.dirname(__dirname));\nconst npmrcPath = path.join(root, 'remote', '.npmrc');\nconst npmrc = fs.readFileSync(npmrcPath, 'utf8');\nconst version = /^target=\"(.*)\"$/m.exec(npmrc)![1];\n\nconst platform = process.platform;\nconst arch = process.arch;\n\nconst node = platform === 'win32' ? 'node.exe' : 'node';\nconst nodePath = path.join(root, '.build', 'node', `v${version}`, `${platform}-${arch}`, node);\n\nconsole.log(nodePath);\n"
  },
  {
    "path": "build/lib/optimize.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bundleTask = bundleTask;\nexports.minifyTask = minifyTask;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst gulp_1 = __importDefault(require(\"gulp\"));\nconst gulp_filter_1 = __importDefault(require(\"gulp-filter\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst pump_1 = __importDefault(require(\"pump\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst bundle = __importStar(require(\"./bundle\"));\nconst postcss_1 = require(\"./postcss\");\nconst esbuild_1 = __importDefault(require(\"esbuild\"));\nconst gulp_sourcemaps_1 = __importDefault(require(\"gulp-sourcemaps\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst REPO_ROOT_PATH = path_1.default.join(__dirname, '../..');\nconst DEFAULT_FILE_HEADER = [\n    '/*!--------------------------------------------------------',\n    ' * Copyright (C) Microsoft Corporation. All rights reserved.',\n    ' *--------------------------------------------------------*/'\n].join('\\n');\nfunction bundleESMTask(opts) {\n    const resourcesStream = event_stream_1.default.through(); // this stream will contain the resources\n    const bundlesStream = event_stream_1.default.through(); // this stream will contain the bundled files\n    const entryPoints = opts.entryPoints.map(entryPoint => {\n        if (typeof entryPoint === 'string') {\n            return { name: path_1.default.parse(entryPoint).name };\n        }\n        return entryPoint;\n    });\n    const bundleAsync = async () => {\n        const files = [];\n        const tasks = [];\n        for (const entryPoint of entryPoints) {\n            (0, fancy_log_1.default)(`Bundled entry point: ${ansi_colors_1.default.yellow(entryPoint.name)}...`);\n            // support for 'dest' via esbuild#in/out\n            const dest = entryPoint.dest?.replace(/\\.[^/.]+$/, '') ?? entryPoint.name;\n            // banner contents\n            const banner = {\n                js: DEFAULT_FILE_HEADER,\n                css: DEFAULT_FILE_HEADER\n            };\n            // TS Boilerplate\n            if (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {\n                const tslibPath = path_1.default.join(require.resolve('tslib'), '../tslib.es6.js');\n                banner.js += await fs_1.default.promises.readFile(tslibPath, 'utf-8');\n            }\n            const contentsMapper = {\n                name: 'contents-mapper',\n                setup(build) {\n                    build.onLoad({ filter: /\\.js$/ }, async ({ path }) => {\n                        const contents = await fs_1.default.promises.readFile(path, 'utf-8');\n                        // TS Boilerplate\n                        let newContents;\n                        if (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {\n                            newContents = bundle.removeAllTSBoilerplate(contents);\n                        }\n                        else {\n                            newContents = contents;\n                        }\n                        // File Content Mapper\n                        const mapper = opts.fileContentMapper?.(path.replace(/\\\\/g, '/'));\n                        if (mapper) {\n                            newContents = await mapper(newContents);\n                        }\n                        return { contents: newContents };\n                    });\n                }\n            };\n            const externalOverride = {\n                name: 'external-override',\n                setup(build) {\n                    // We inline selected modules that are we depend on on startup without\n                    // a conditional `await import(...)` by hooking into the resolution.\n                    build.onResolve({ filter: /^minimist$/ }, () => {\n                        return { path: path_1.default.join(REPO_ROOT_PATH, 'node_modules', 'minimist', 'index.js'), external: false };\n                    });\n                },\n            };\n            const task = esbuild_1.default.build({\n                bundle: true,\n                packages: 'external', // \"external all the things\", see https://esbuild.github.io/api/#packages\n                platform: 'neutral', // makes esm\n                format: 'esm',\n                sourcemap: 'external',\n                plugins: [contentsMapper, externalOverride],\n                target: ['es2022'],\n                loader: {\n                    '.ttf': 'file',\n                    '.svg': 'file',\n                    '.png': 'file',\n                    '.sh': 'file',\n                },\n                assetNames: 'media/[name]', // moves media assets into a sub-folder \"media\"\n                banner: entryPoint.name === 'vs/workbench/workbench.web.main' ? undefined : banner, // TODO@esm remove line when we stop supporting web-amd-esm-bridge\n                entryPoints: [\n                    {\n                        in: path_1.default.join(REPO_ROOT_PATH, opts.src, `${entryPoint.name}.js`),\n                        out: dest,\n                    }\n                ],\n                outdir: path_1.default.join(REPO_ROOT_PATH, opts.src),\n                write: false, // enables res.outputFiles\n                metafile: true, // enables res.metafile\n                // minify: NOT enabled because we have a separate minify task that takes care of the TSLib banner as well\n            }).then(res => {\n                for (const file of res.outputFiles) {\n                    let sourceMapFile = undefined;\n                    if (file.path.endsWith('.js')) {\n                        sourceMapFile = res.outputFiles.find(f => f.path === `${file.path}.map`);\n                    }\n                    const fileProps = {\n                        contents: Buffer.from(file.contents),\n                        sourceMap: sourceMapFile ? JSON.parse(sourceMapFile.text) : undefined, // support gulp-sourcemaps\n                        path: file.path,\n                        base: path_1.default.join(REPO_ROOT_PATH, opts.src)\n                    };\n                    files.push(new vinyl_1.default(fileProps));\n                }\n            });\n            tasks.push(task);\n        }\n        await Promise.all(tasks);\n        return { files };\n    };\n    bundleAsync().then((output) => {\n        // bundle output (JS, CSS, SVG...)\n        event_stream_1.default.readArray(output.files).pipe(bundlesStream);\n        // forward all resources\n        gulp_1.default.src(opts.resources ?? [], { base: `${opts.src}`, allowEmpty: true }).pipe(resourcesStream);\n    });\n    const result = event_stream_1.default.merge(bundlesStream, resourcesStream);\n    return result\n        .pipe(gulp_sourcemaps_1.default.write('./', {\n        sourceRoot: undefined,\n        addComment: true,\n        includeContent: true\n    }));\n}\nfunction bundleTask(opts) {\n    return function () {\n        return bundleESMTask(opts.esm).pipe(gulp_1.default.dest(opts.out));\n    };\n}\nfunction minifyTask(src, sourceMapBaseUrl) {\n    const sourceMappingURL = sourceMapBaseUrl ? ((f) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined;\n    return cb => {\n        const cssnano = require('cssnano');\n        const svgmin = require('gulp-svgmin');\n        const jsFilter = (0, gulp_filter_1.default)('**/*.js', { restore: true });\n        const cssFilter = (0, gulp_filter_1.default)('**/*.css', { restore: true });\n        const svgFilter = (0, gulp_filter_1.default)('**/*.svg', { restore: true });\n        (0, pump_1.default)(gulp_1.default.src([src + '/**', '!' + src + '/**/*.map']), jsFilter, gulp_sourcemaps_1.default.init({ loadMaps: true }), event_stream_1.default.map((f, cb) => {\n            esbuild_1.default.build({\n                entryPoints: [f.path],\n                minify: true,\n                sourcemap: 'external',\n                outdir: '.',\n                packages: 'external', // \"external all the things\", see https://esbuild.github.io/api/#packages\n                platform: 'neutral', // makes esm\n                target: ['es2022'],\n                write: false\n            }).then(res => {\n                const jsFile = res.outputFiles.find(f => /\\.js$/.test(f.path));\n                const sourceMapFile = res.outputFiles.find(f => /\\.js\\.map$/.test(f.path));\n                const contents = Buffer.from(jsFile.contents);\n                const unicodeMatch = contents.toString().match(/[^\\x00-\\xFF]+/g);\n                if (unicodeMatch) {\n                    cb(new Error(`Found non-ascii character ${unicodeMatch[0]} in the minified output of ${f.path}. Non-ASCII characters in the output can cause performance problems when loading. Please review if you have introduced a regular expression that esbuild is not automatically converting and convert it to using unicode escape sequences.`));\n                }\n                else {\n                    f.contents = contents;\n                    f.sourceMap = JSON.parse(sourceMapFile.text);\n                    cb(undefined, f);\n                }\n            }, cb);\n        }), jsFilter.restore, cssFilter, (0, postcss_1.gulpPostcss)([cssnano({ preset: 'default' })]), cssFilter.restore, svgFilter, svgmin(), svgFilter.restore, gulp_sourcemaps_1.default.write('./', {\n            sourceMappingURL,\n            sourceRoot: undefined,\n            includeContent: true,\n            addComment: true\n        }), gulp_1.default.dest(src + '-min'), (err) => cb(err));\n    };\n}\n//# sourceMappingURL=optimize.js.map"
  },
  {
    "path": "build/lib/optimize.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport gulp from 'gulp';\nimport filter from 'gulp-filter';\nimport path from 'path';\nimport fs from 'fs';\nimport pump from 'pump';\nimport VinylFile from 'vinyl';\nimport * as bundle from './bundle';\nimport { gulpPostcss } from './postcss';\nimport esbuild from 'esbuild';\nimport sourcemaps from 'gulp-sourcemaps';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\n\nconst REPO_ROOT_PATH = path.join(__dirname, '../..');\n\nexport interface IBundleESMTaskOpts {\n\t/**\n\t * The folder to read files from.\n\t */\n\tsrc: string;\n\t/**\n\t * The entry points to bundle.\n\t */\n\tentryPoints: Array<bundle.IEntryPoint | string>;\n\t/**\n\t * Other resources to consider (svg, etc.)\n\t */\n\tresources?: string[];\n\t/**\n\t * File contents interceptor for a given path.\n\t */\n\tfileContentMapper?: (path: string) => ((contents: string) => Promise<string> | string) | undefined;\n\t/**\n\t * Allows to skip the removal of TS boilerplate. Use this when\n\t * the entry point is small and the overhead of removing the\n\t * boilerplate makes the file larger in the end.\n\t */\n\tskipTSBoilerplateRemoval?: (entryPointName: string) => boolean;\n}\n\nconst DEFAULT_FILE_HEADER = [\n\t'/*!--------------------------------------------------------',\n\t' * Copyright (C) Microsoft Corporation. All rights reserved.',\n\t' *--------------------------------------------------------*/'\n].join('\\n');\n\nfunction bundleESMTask(opts: IBundleESMTaskOpts): NodeJS.ReadWriteStream {\n\tconst resourcesStream = es.through(); // this stream will contain the resources\n\tconst bundlesStream = es.through(); // this stream will contain the bundled files\n\n\tconst entryPoints = opts.entryPoints.map(entryPoint => {\n\t\tif (typeof entryPoint === 'string') {\n\t\t\treturn { name: path.parse(entryPoint).name };\n\t\t}\n\n\t\treturn entryPoint;\n\t});\n\n\tconst bundleAsync = async () => {\n\t\tconst files: VinylFile[] = [];\n\t\tconst tasks: Promise<any>[] = [];\n\n\t\tfor (const entryPoint of entryPoints) {\n\t\t\tfancyLog(`Bundled entry point: ${ansiColors.yellow(entryPoint.name)}...`);\n\n\t\t\t// support for 'dest' via esbuild#in/out\n\t\t\tconst dest = entryPoint.dest?.replace(/\\.[^/.]+$/, '') ?? entryPoint.name;\n\n\t\t\t// banner contents\n\t\t\tconst banner = {\n\t\t\t\tjs: DEFAULT_FILE_HEADER,\n\t\t\t\tcss: DEFAULT_FILE_HEADER\n\t\t\t};\n\n\t\t\t// TS Boilerplate\n\t\t\tif (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {\n\t\t\t\tconst tslibPath = path.join(require.resolve('tslib'), '../tslib.es6.js');\n\t\t\t\tbanner.js += await fs.promises.readFile(tslibPath, 'utf-8');\n\t\t\t}\n\n\t\t\tconst contentsMapper: esbuild.Plugin = {\n\t\t\t\tname: 'contents-mapper',\n\t\t\t\tsetup(build) {\n\t\t\t\t\tbuild.onLoad({ filter: /\\.js$/ }, async ({ path }) => {\n\t\t\t\t\t\tconst contents = await fs.promises.readFile(path, 'utf-8');\n\n\t\t\t\t\t\t// TS Boilerplate\n\t\t\t\t\t\tlet newContents: string;\n\t\t\t\t\t\tif (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {\n\t\t\t\t\t\t\tnewContents = bundle.removeAllTSBoilerplate(contents);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewContents = contents;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// File Content Mapper\n\t\t\t\t\t\tconst mapper = opts.fileContentMapper?.(path.replace(/\\\\/g, '/'));\n\t\t\t\t\t\tif (mapper) {\n\t\t\t\t\t\t\tnewContents = await mapper(newContents);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { contents: newContents };\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst externalOverride: esbuild.Plugin = {\n\t\t\t\tname: 'external-override',\n\t\t\t\tsetup(build) {\n\t\t\t\t\t// We inline selected modules that are we depend on on startup without\n\t\t\t\t\t// a conditional `await import(...)` by hooking into the resolution.\n\t\t\t\t\tbuild.onResolve({ filter: /^minimist$/ }, () => {\n\t\t\t\t\t\treturn { path: path.join(REPO_ROOT_PATH, 'node_modules', 'minimist', 'index.js'), external: false };\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst task = esbuild.build({\n\t\t\t\tbundle: true,\n\t\t\t\tpackages: 'external', // \"external all the things\", see https://esbuild.github.io/api/#packages\n\t\t\t\tplatform: 'neutral', // makes esm\n\t\t\t\tformat: 'esm',\n\t\t\t\tsourcemap: 'external',\n\t\t\t\tplugins: [contentsMapper, externalOverride],\n\t\t\t\ttarget: ['es2022'],\n\t\t\t\tloader: {\n\t\t\t\t\t'.ttf': 'file',\n\t\t\t\t\t'.svg': 'file',\n\t\t\t\t\t'.png': 'file',\n\t\t\t\t\t'.sh': 'file',\n\t\t\t\t},\n\t\t\t\tassetNames: 'media/[name]', // moves media assets into a sub-folder \"media\"\n\t\t\t\tbanner: entryPoint.name === 'vs/workbench/workbench.web.main' ? undefined : banner, // TODO@esm remove line when we stop supporting web-amd-esm-bridge\n\t\t\t\tentryPoints: [\n\t\t\t\t\t{\n\t\t\t\t\t\tin: path.join(REPO_ROOT_PATH, opts.src, `${entryPoint.name}.js`),\n\t\t\t\t\t\tout: dest,\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\toutdir: path.join(REPO_ROOT_PATH, opts.src),\n\t\t\t\twrite: false, // enables res.outputFiles\n\t\t\t\tmetafile: true, // enables res.metafile\n\t\t\t\t// minify: NOT enabled because we have a separate minify task that takes care of the TSLib banner as well\n\t\t\t}).then(res => {\n\t\t\t\tfor (const file of res.outputFiles) {\n\t\t\t\t\tlet sourceMapFile: esbuild.OutputFile | undefined = undefined;\n\t\t\t\t\tif (file.path.endsWith('.js')) {\n\t\t\t\t\t\tsourceMapFile = res.outputFiles.find(f => f.path === `${file.path}.map`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fileProps = {\n\t\t\t\t\t\tcontents: Buffer.from(file.contents),\n\t\t\t\t\t\tsourceMap: sourceMapFile ? JSON.parse(sourceMapFile.text) : undefined, // support gulp-sourcemaps\n\t\t\t\t\t\tpath: file.path,\n\t\t\t\t\t\tbase: path.join(REPO_ROOT_PATH, opts.src)\n\t\t\t\t\t};\n\t\t\t\t\tfiles.push(new VinylFile(fileProps));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttasks.push(task);\n\t\t}\n\n\t\tawait Promise.all(tasks);\n\t\treturn { files };\n\t};\n\n\tbundleAsync().then((output) => {\n\n\t\t// bundle output (JS, CSS, SVG...)\n\t\tes.readArray(output.files).pipe(bundlesStream);\n\n\t\t// forward all resources\n\t\tgulp.src(opts.resources ?? [], { base: `${opts.src}`, allowEmpty: true }).pipe(resourcesStream);\n\t});\n\n\tconst result = es.merge(\n\t\tbundlesStream,\n\t\tresourcesStream\n\t);\n\n\treturn result\n\t\t.pipe(sourcemaps.write('./', {\n\t\t\tsourceRoot: undefined,\n\t\t\taddComment: true,\n\t\t\tincludeContent: true\n\t\t}));\n}\n\nexport interface IBundleESMTaskOpts {\n\t/**\n\t * Destination folder for the bundled files.\n\t */\n\tout: string;\n\t/**\n\t * Bundle ESM modules (using esbuild).\n\t*/\n\tesm: IBundleESMTaskOpts;\n}\n\nexport function bundleTask(opts: IBundleESMTaskOpts): () => NodeJS.ReadWriteStream {\n\treturn function () {\n\t\treturn bundleESMTask(opts.esm).pipe(gulp.dest(opts.out));\n\t};\n}\n\nexport function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) => void {\n\tconst sourceMappingURL = sourceMapBaseUrl ? ((f: any) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined;\n\n\treturn cb => {\n\t\tconst cssnano = require('cssnano') as typeof import('cssnano');\n\t\tconst svgmin = require('gulp-svgmin') as typeof import('gulp-svgmin');\n\n\t\tconst jsFilter = filter('**/*.js', { restore: true });\n\t\tconst cssFilter = filter('**/*.css', { restore: true });\n\t\tconst svgFilter = filter('**/*.svg', { restore: true });\n\n\t\tpump(\n\t\t\tgulp.src([src + '/**', '!' + src + '/**/*.map']),\n\t\t\tjsFilter,\n\t\t\tsourcemaps.init({ loadMaps: true }),\n\t\t\tes.map((f: any, cb) => {\n\t\t\t\tesbuild.build({\n\t\t\t\t\tentryPoints: [f.path],\n\t\t\t\t\tminify: true,\n\t\t\t\t\tsourcemap: 'external',\n\t\t\t\t\toutdir: '.',\n\t\t\t\t\tpackages: 'external', // \"external all the things\", see https://esbuild.github.io/api/#packages\n\t\t\t\t\tplatform: 'neutral', // makes esm\n\t\t\t\t\ttarget: ['es2022'],\n\t\t\t\t\twrite: false\n\t\t\t\t}).then(res => {\n\t\t\t\t\tconst jsFile = res.outputFiles.find(f => /\\.js$/.test(f.path))!;\n\t\t\t\t\tconst sourceMapFile = res.outputFiles.find(f => /\\.js\\.map$/.test(f.path))!;\n\n\t\t\t\t\tconst contents = Buffer.from(jsFile.contents);\n\t\t\t\t\tconst unicodeMatch = contents.toString().match(/[^\\x00-\\xFF]+/g);\n\t\t\t\t\tif (unicodeMatch) {\n\t\t\t\t\t\tcb(new Error(`Found non-ascii character ${unicodeMatch[0]} in the minified output of ${f.path}. Non-ASCII characters in the output can cause performance problems when loading. Please review if you have introduced a regular expression that esbuild is not automatically converting and convert it to using unicode escape sequences.`));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tf.contents = contents;\n\t\t\t\t\t\tf.sourceMap = JSON.parse(sourceMapFile.text);\n\n\t\t\t\t\t\tcb(undefined, f);\n\t\t\t\t\t}\n\t\t\t\t}, cb);\n\t\t\t}),\n\t\t\tjsFilter.restore,\n\t\t\tcssFilter,\n\t\t\tgulpPostcss([cssnano({ preset: 'default' })]),\n\t\t\tcssFilter.restore,\n\t\t\tsvgFilter,\n\t\t\tsvgmin(),\n\t\t\tsvgFilter.restore,\n\t\t\tsourcemaps.write('./', {\n\t\t\t\tsourceMappingURL,\n\t\t\t\tsourceRoot: undefined,\n\t\t\t\tincludeContent: true,\n\t\t\t\taddComment: true\n\t\t\t} as any),\n\t\t\tgulp.dest(src + '-min'),\n\t\t\t(err: any) => cb(err));\n\t};\n}\n"
  },
  {
    "path": "build/lib/policies.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst child_process_1 = require(\"child_process\");\nconst fs_1 = require(\"fs\");\nconst path_1 = __importDefault(require(\"path\"));\nconst byline_1 = __importDefault(require(\"byline\"));\nconst ripgrep_1 = require(\"@vscode/ripgrep\");\nconst tree_sitter_1 = __importDefault(require(\"tree-sitter\"));\nconst { typescript } = require('tree-sitter-typescript');\nconst product = require('../../product.json');\nconst packageJson = require('../../package.json');\nfunction isNlsString(value) {\n    return value ? typeof value !== 'string' : false;\n}\nfunction isStringArray(value) {\n    return !value.some(s => isNlsString(s));\n}\nfunction isNlsStringArray(value) {\n    return value.every(s => isNlsString(s));\n}\nvar PolicyType;\n(function (PolicyType) {\n    PolicyType[\"Boolean\"] = \"boolean\";\n    PolicyType[\"Number\"] = \"number\";\n    PolicyType[\"Object\"] = \"object\";\n    PolicyType[\"String\"] = \"string\";\n    PolicyType[\"StringEnum\"] = \"stringEnum\";\n})(PolicyType || (PolicyType = {}));\nfunction renderADMLString(prefix, moduleName, nlsString, translations) {\n    let value;\n    if (translations) {\n        const moduleTranslations = translations[moduleName];\n        if (moduleTranslations) {\n            value = moduleTranslations[nlsString.nlsKey];\n        }\n    }\n    if (!value) {\n        value = nlsString.value;\n    }\n    return `<string id=\"${prefix}_${nlsString.nlsKey.replace(/\\./g, '_')}\">${value}</string>`;\n}\nfunction renderProfileString(_prefix, moduleName, nlsString, translations) {\n    let value;\n    if (translations) {\n        const moduleTranslations = translations[moduleName];\n        if (moduleTranslations) {\n            value = moduleTranslations[nlsString.nlsKey];\n        }\n    }\n    if (!value) {\n        value = nlsString.value;\n    }\n    return value;\n}\nclass BasePolicy {\n    type;\n    name;\n    category;\n    minimumVersion;\n    description;\n    moduleName;\n    constructor(type, name, category, minimumVersion, description, moduleName) {\n        this.type = type;\n        this.name = name;\n        this.category = category;\n        this.minimumVersion = minimumVersion;\n        this.description = description;\n        this.moduleName = moduleName;\n    }\n    renderADMLString(nlsString, translations) {\n        return renderADMLString(this.name, this.moduleName, nlsString, translations);\n    }\n    renderADMX(regKey) {\n        return [\n            `<policy name=\"${this.name}\" class=\"Both\" displayName=\"$(string.${this.name})\" explainText=\"$(string.${this.name}_${this.description.nlsKey.replace(/\\./g, '_')})\" key=\"Software\\\\Policies\\\\Microsoft\\\\${regKey}\" presentation=\"$(presentation.${this.name})\">`,\n            `\t<parentCategory ref=\"${this.category.name.nlsKey}\" />`,\n            `\t<supportedOn ref=\"Supported_${this.minimumVersion.replace(/\\./g, '_')}\" />`,\n            `\t<elements>`,\n            ...this.renderADMXElements(),\n            `\t</elements>`,\n            `</policy>`\n        ];\n    }\n    renderADMLStrings(translations) {\n        return [\n            `<string id=\"${this.name}\">${this.name}</string>`,\n            this.renderADMLString(this.description, translations)\n        ];\n    }\n    renderADMLPresentation() {\n        return `<presentation id=\"${this.name}\">${this.renderADMLPresentationContents()}</presentation>`;\n    }\n    renderProfile() {\n        return [`<key>${this.name}</key>`, this.renderProfileValue()];\n    }\n    renderProfileManifest(translations) {\n        return `<dict>\n${this.renderProfileManifestValue(translations)}\n</dict>`;\n    }\n}\nclass BooleanPolicy extends BasePolicy {\n    static from(name, category, minimumVersion, description, moduleName, settingNode) {\n        const type = getStringProperty(moduleName, settingNode, 'type');\n        if (type !== 'boolean') {\n            return undefined;\n        }\n        return new BooleanPolicy(name, category, minimumVersion, description, moduleName);\n    }\n    constructor(name, category, minimumVersion, description, moduleName) {\n        super(PolicyType.Boolean, name, category, minimumVersion, description, moduleName);\n    }\n    renderADMXElements() {\n        return [\n            `<boolean id=\"${this.name}\" valueName=\"${this.name}\">`,\n            `\t<trueValue><decimal value=\"1\" /></trueValue><falseValue><decimal value=\"0\" /></falseValue>`,\n            `</boolean>`\n        ];\n    }\n    renderADMLPresentationContents() {\n        return `<checkBox refId=\"${this.name}\">${this.name}</checkBox>`;\n    }\n    renderProfileValue() {\n        return `<false/>`;\n    }\n    renderProfileManifestValue(translations) {\n        return `<key>pfm_default</key>\n<false/>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>boolean</string>`;\n    }\n}\nclass ParseError extends Error {\n    constructor(message, moduleName, node) {\n        super(`${message}. ${moduleName}.ts:${node.startPosition.row + 1}`);\n    }\n}\nclass NumberPolicy extends BasePolicy {\n    defaultValue;\n    static from(name, category, minimumVersion, description, moduleName, settingNode) {\n        const type = getStringProperty(moduleName, settingNode, 'type');\n        if (type !== 'number') {\n            return undefined;\n        }\n        const defaultValue = getNumberProperty(moduleName, settingNode, 'default');\n        if (typeof defaultValue === 'undefined') {\n            throw new ParseError(`Missing required 'default' property.`, moduleName, settingNode);\n        }\n        return new NumberPolicy(name, category, minimumVersion, description, moduleName, defaultValue);\n    }\n    constructor(name, category, minimumVersion, description, moduleName, defaultValue) {\n        super(PolicyType.StringEnum, name, category, minimumVersion, description, moduleName);\n        this.defaultValue = defaultValue;\n    }\n    renderADMXElements() {\n        return [\n            `<decimal id=\"${this.name}\" valueName=\"${this.name}\" />`\n            // `<decimal id=\"Quarantine_PurgeItemsAfterDelay\" valueName=\"PurgeItemsAfterDelay\" minValue=\"0\" maxValue=\"10000000\" />`\n        ];\n    }\n    renderADMLPresentationContents() {\n        return `<decimalTextBox refId=\"${this.name}\" defaultValue=\"${this.defaultValue}\">${this.name}</decimalTextBox>`;\n    }\n    renderProfileValue() {\n        return `<integer>${this.defaultValue}</integer>`;\n    }\n    renderProfileManifestValue(translations) {\n        return `<key>pfm_default</key>\n<integer>${this.defaultValue}</integer>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>integer</string>`;\n    }\n}\nclass StringPolicy extends BasePolicy {\n    static from(name, category, minimumVersion, description, moduleName, settingNode) {\n        const type = getStringProperty(moduleName, settingNode, 'type');\n        if (type !== 'string') {\n            return undefined;\n        }\n        return new StringPolicy(name, category, minimumVersion, description, moduleName);\n    }\n    constructor(name, category, minimumVersion, description, moduleName) {\n        super(PolicyType.String, name, category, minimumVersion, description, moduleName);\n    }\n    renderADMXElements() {\n        return [`<text id=\"${this.name}\" valueName=\"${this.name}\" required=\"true\" />`];\n    }\n    renderADMLPresentationContents() {\n        return `<textBox refId=\"${this.name}\"><label>${this.name}:</label></textBox>`;\n    }\n    renderProfileValue() {\n        return `<string></string>`;\n    }\n    renderProfileManifestValue(translations) {\n        return `<key>pfm_default</key>\n<string></string>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>string</string>`;\n    }\n}\nclass ObjectPolicy extends BasePolicy {\n    static from(name, category, minimumVersion, description, moduleName, settingNode) {\n        const type = getStringProperty(moduleName, settingNode, 'type');\n        if (type !== 'object' && type !== 'array') {\n            return undefined;\n        }\n        return new ObjectPolicy(name, category, minimumVersion, description, moduleName);\n    }\n    constructor(name, category, minimumVersion, description, moduleName) {\n        super(PolicyType.Object, name, category, minimumVersion, description, moduleName);\n    }\n    renderADMXElements() {\n        return [`<multiText id=\"${this.name}\" valueName=\"${this.name}\" required=\"true\" />`];\n    }\n    renderADMLPresentationContents() {\n        return `<multiTextBox refId=\"${this.name}\" />`;\n    }\n    renderProfileValue() {\n        return `<string></string>`;\n    }\n    renderProfileManifestValue(translations) {\n        return `<key>pfm_default</key>\n<string></string>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>string</string>\n`;\n    }\n}\nclass StringEnumPolicy extends BasePolicy {\n    enum_;\n    enumDescriptions;\n    static from(name, category, minimumVersion, description, moduleName, settingNode) {\n        const type = getStringProperty(moduleName, settingNode, 'type');\n        if (type !== 'string') {\n            return undefined;\n        }\n        const enum_ = getStringArrayProperty(moduleName, settingNode, 'enum');\n        if (!enum_) {\n            return undefined;\n        }\n        if (!isStringArray(enum_)) {\n            throw new ParseError(`Property 'enum' should not be localized.`, moduleName, settingNode);\n        }\n        const enumDescriptions = getStringArrayProperty(moduleName, settingNode, 'enumDescriptions');\n        if (!enumDescriptions) {\n            throw new ParseError(`Missing required 'enumDescriptions' property.`, moduleName, settingNode);\n        }\n        else if (!isNlsStringArray(enumDescriptions)) {\n            throw new ParseError(`Property 'enumDescriptions' should be localized.`, moduleName, settingNode);\n        }\n        return new StringEnumPolicy(name, category, minimumVersion, description, moduleName, enum_, enumDescriptions);\n    }\n    constructor(name, category, minimumVersion, description, moduleName, enum_, enumDescriptions) {\n        super(PolicyType.StringEnum, name, category, minimumVersion, description, moduleName);\n        this.enum_ = enum_;\n        this.enumDescriptions = enumDescriptions;\n    }\n    renderADMXElements() {\n        return [\n            `<enum id=\"${this.name}\" valueName=\"${this.name}\">`,\n            ...this.enum_.map((value, index) => `\t<item displayName=\"$(string.${this.name}_${this.enumDescriptions[index].nlsKey})\"><value><string>${value}</string></value></item>`),\n            `</enum>`\n        ];\n    }\n    renderADMLStrings(translations) {\n        return [\n            ...super.renderADMLStrings(translations),\n            ...this.enumDescriptions.map(e => this.renderADMLString(e, translations))\n        ];\n    }\n    renderADMLPresentationContents() {\n        return `<dropdownList refId=\"${this.name}\" />`;\n    }\n    renderProfileValue() {\n        return `<string>${this.enum_[0]}</string>`;\n    }\n    renderProfileManifestValue(translations) {\n        return `<key>pfm_default</key>\n<string>${this.enum_[0]}</string>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>string</string>\n<key>pfm_range_list</key>\n<array>\n\t${this.enum_.map(e => `<string>${e}</string>`).join('\\n\t')}\n</array>`;\n    }\n}\nconst NumberQ = {\n    Q: `(number) @value`,\n    value(matches) {\n        const match = matches[0];\n        if (!match) {\n            return undefined;\n        }\n        const value = match.captures.filter(c => c.name === 'value')[0]?.node.text;\n        if (!value) {\n            throw new Error(`Missing required 'value' property.`);\n        }\n        return parseInt(value);\n    }\n};\nconst StringQ = {\n    Q: `[\n\t\t(string (string_fragment) @value)\n\t\t(call_expression\n\t\t\tfunction: [\n\t\t\t\t(identifier) @localizeFn (#eq? @localizeFn localize)\n\t\t\t\t(member_expression\n\t\t\t\t\tobject: (identifier) @nlsObj (#eq? @nlsObj nls)\n\t\t\t\t\tproperty: (property_identifier) @localizeFn (#eq? @localizeFn localize)\n\t\t\t\t)\n\t\t\t]\n\t\t\targuments: (arguments (string (string_fragment) @nlsKey) (string (string_fragment) @value))\n\t\t)\n\t]`,\n    value(matches) {\n        const match = matches[0];\n        if (!match) {\n            return undefined;\n        }\n        const value = match.captures.filter(c => c.name === 'value')[0]?.node.text;\n        if (!value) {\n            throw new Error(`Missing required 'value' property.`);\n        }\n        const nlsKey = match.captures.filter(c => c.name === 'nlsKey')[0]?.node.text;\n        if (nlsKey) {\n            return { value, nlsKey };\n        }\n        else {\n            return value;\n        }\n    }\n};\nconst StringArrayQ = {\n    Q: `(array ${StringQ.Q})`,\n    value(matches) {\n        if (matches.length === 0) {\n            return undefined;\n        }\n        return matches.map(match => {\n            return StringQ.value([match]);\n        });\n    }\n};\nfunction getProperty(qtype, moduleName, node, key) {\n    const query = new tree_sitter_1.default.Query(typescript, `(\n\t\t\t(pair\n\t\t\t\tkey: [(property_identifier)(string)] @key\n\t\t\t\tvalue: ${qtype.Q}\n\t\t\t)\n\t\t\t(#any-of? @key \"${key}\" \"'${key}'\")\n\t\t)`);\n    try {\n        const matches = query.matches(node).filter(m => m.captures[0].node.parent?.parent === node);\n        return qtype.value(matches);\n    }\n    catch (e) {\n        throw new ParseError(e.message, moduleName, node);\n    }\n}\nfunction getNumberProperty(moduleName, node, key) {\n    return getProperty(NumberQ, moduleName, node, key);\n}\nfunction getStringProperty(moduleName, node, key) {\n    return getProperty(StringQ, moduleName, node, key);\n}\nfunction getStringArrayProperty(moduleName, node, key) {\n    return getProperty(StringArrayQ, moduleName, node, key);\n}\n// TODO: add more policy types\nconst PolicyTypes = [\n    BooleanPolicy,\n    NumberPolicy,\n    StringEnumPolicy,\n    StringPolicy,\n    ObjectPolicy\n];\nfunction getPolicy(moduleName, configurationNode, settingNode, policyNode, categories) {\n    const name = getStringProperty(moduleName, policyNode, 'name');\n    if (!name) {\n        throw new ParseError(`Missing required 'name' property`, moduleName, policyNode);\n    }\n    else if (isNlsString(name)) {\n        throw new ParseError(`Property 'name' should be a literal string`, moduleName, policyNode);\n    }\n    const categoryName = getStringProperty(moduleName, configurationNode, 'title');\n    if (!categoryName) {\n        throw new ParseError(`Missing required 'title' property`, moduleName, configurationNode);\n    }\n    else if (!isNlsString(categoryName)) {\n        throw new ParseError(`Property 'title' should be localized`, moduleName, configurationNode);\n    }\n    const categoryKey = `${categoryName.nlsKey}:${categoryName.value}`;\n    let category = categories.get(categoryKey);\n    if (!category) {\n        category = { moduleName, name: categoryName };\n        categories.set(categoryKey, category);\n    }\n    const minimumVersion = getStringProperty(moduleName, policyNode, 'minimumVersion');\n    if (!minimumVersion) {\n        throw new ParseError(`Missing required 'minimumVersion' property.`, moduleName, policyNode);\n    }\n    else if (isNlsString(minimumVersion)) {\n        throw new ParseError(`Property 'minimumVersion' should be a literal string.`, moduleName, policyNode);\n    }\n    const description = getStringProperty(moduleName, policyNode, 'description') ?? getStringProperty(moduleName, settingNode, 'description');\n    if (!description) {\n        throw new ParseError(`Missing required 'description' property.`, moduleName, settingNode);\n    }\n    if (!isNlsString(description)) {\n        throw new ParseError(`Property 'description' should be localized.`, moduleName, settingNode);\n    }\n    let result;\n    for (const policyType of PolicyTypes) {\n        if (result = policyType.from(name, category, minimumVersion, description, moduleName, settingNode)) {\n            break;\n        }\n    }\n    if (!result) {\n        throw new ParseError(`Failed to parse policy '${name}'.`, moduleName, settingNode);\n    }\n    return result;\n}\nfunction getPolicies(moduleName, node) {\n    const query = new tree_sitter_1.default.Query(typescript, `\n\t\t(\n\t\t\t(call_expression\n\t\t\t\tfunction: (member_expression property: (property_identifier) @registerConfigurationFn) (#eq? @registerConfigurationFn registerConfiguration)\n\t\t\t\targuments: (arguments\t(object\t(pair\n\t\t\t\t\tkey: [(property_identifier)(string)] @propertiesKey (#any-of? @propertiesKey \"properties\" \"'properties'\")\n\t\t\t\t\tvalue: (object (pair\n\t\t\t\t\t\tkey: [(property_identifier)(string)(computed_property_name)]\n\t\t\t\t\t\tvalue: (object (pair\n\t\t\t\t\t\t\tkey: [(property_identifier)(string)] @policyKey (#any-of? @policyKey \"policy\" \"'policy'\")\n\t\t\t\t\t\t\tvalue: (object) @policy\n\t\t\t\t\t\t)) @setting\n\t\t\t\t\t))\n\t\t\t\t)) @configuration)\n\t\t\t)\n\t\t)\n\t`);\n    const categories = new Map();\n    return query.matches(node).map(m => {\n        const configurationNode = m.captures.filter(c => c.name === 'configuration')[0].node;\n        const settingNode = m.captures.filter(c => c.name === 'setting')[0].node;\n        const policyNode = m.captures.filter(c => c.name === 'policy')[0].node;\n        return getPolicy(moduleName, configurationNode, settingNode, policyNode, categories);\n    });\n}\nasync function getFiles(root) {\n    return new Promise((c, e) => {\n        const result = [];\n        const rg = (0, child_process_1.spawn)(ripgrep_1.rgPath, ['-l', 'registerConfiguration\\\\(', '-g', 'src/**/*.ts', '-g', '!src/**/test/**', root]);\n        const stream = (0, byline_1.default)(rg.stdout.setEncoding('utf8'));\n        stream.on('data', path => result.push(path));\n        stream.on('error', err => e(err));\n        stream.on('end', () => c(result));\n    });\n}\nfunction renderADMX(regKey, versions, categories, policies) {\n    versions = versions.map(v => v.replace(/\\./g, '_'));\n    return `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<policyDefinitions revision=\"1.1\" schemaVersion=\"1.0\">\n\t<policyNamespaces>\n\t\t<target prefix=\"${regKey}\" namespace=\"Microsoft.Policies.${regKey}\" />\n\t</policyNamespaces>\n\t<resources minRequiredRevision=\"1.0\" />\n\t<supportedOn>\n\t\t<definitions>\n\t\t\t${versions.map(v => `<definition name=\"Supported_${v}\" displayName=\"$(string.Supported_${v})\" />`).join(`\\n\t\t\t`)}\n\t\t</definitions>\n\t</supportedOn>\n\t<categories>\n\t\t<category displayName=\"$(string.Application)\" name=\"Application\" />\n\t\t${categories.map(c => `<category displayName=\"$(string.Category_${c.name.nlsKey})\" name=\"${c.name.nlsKey}\"><parentCategory ref=\"Application\" /></category>`).join(`\\n\t\t`)}\n\t</categories>\n\t<policies>\n\t\t${policies.map(p => p.renderADMX(regKey)).flat().join(`\\n\t\t`)}\n\t</policies>\n</policyDefinitions>\n`;\n}\nfunction renderADML(appName, versions, categories, policies, translations) {\n    return `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<policyDefinitionResources revision=\"1.0\" schemaVersion=\"1.0\">\n\t<displayName />\n\t<description />\n\t<resources>\n\t\t<stringTable>\n\t\t\t<string id=\"Application\">${appName}</string>\n\t\t\t${versions.map(v => `<string id=\"Supported_${v.replace(/\\./g, '_')}\">${appName} &gt;= ${v}</string>`).join(`\\n\t\t\t`)}\n\t\t\t${categories.map(c => renderADMLString('Category', c.moduleName, c.name, translations)).join(`\\n\t\t\t`)}\n\t\t\t${policies.map(p => p.renderADMLStrings(translations)).flat().join(`\\n\t\t\t`)}\n\t\t</stringTable>\n\t\t<presentationTable>\n\t\t\t${policies.map(p => p.renderADMLPresentation()).join(`\\n\t\t\t`)}\n\t\t</presentationTable>\n\t</resources>\n</policyDefinitionResources>\n`;\n}\nfunction renderProfileManifest(appName, bundleIdentifier, _versions, _categories, policies, translations) {\n    const requiredPayloadFields = `\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>Configure ${appName}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadDescription</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Description</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>${appName}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadDisplayName</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Display Name</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>${bundleIdentifier}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadIdentifier</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Identifier</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>${bundleIdentifier}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadType</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Type</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string></string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadUUID</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload UUID</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<integer>1</integer>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadVersion</string>\n\t\t\t<key>pfm_range_list</key>\n\t\t\t<array>\n\t\t\t\t<integer>1</integer>\n\t\t\t</array>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Version</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>integer</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>Microsoft</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadOrganization</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Organization</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>`;\n    const profileManifestSubkeys = policies.map(policy => {\n        return policy.renderProfileManifest(translations);\n    }).join('');\n    return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>pfm_app_url</key>\n    <string>https://code.visualstudio.com/</string>\n    <key>pfm_description</key>\n    <string>${appName} Managed Settings</string>\n    <key>pfm_documentation_url</key>\n    <string>https://code.visualstudio.com/docs/setup/enterprise</string>\n    <key>pfm_domain</key>\n    <string>${bundleIdentifier}</string>\n    <key>pfm_format_version</key>\n    <integer>1</integer>\n    <key>pfm_interaction</key>\n    <string>combined</string>\n    <key>pfm_last_modified</key>\n    <date>${new Date().toISOString().replace(/\\.\\d+Z$/, 'Z')}</date>\n    <key>pfm_platforms</key>\n    <array>\n        <string>macOS</string>\n    </array>\n    <key>pfm_subkeys</key>\n    <array>\n\t${requiredPayloadFields}\n\t${profileManifestSubkeys}\n    </array>\n    <key>pfm_title</key>\n    <string>${appName}</string>\n    <key>pfm_unique</key>\n    <true/>\n    <key>pfm_version</key>\n    <integer>1</integer>\n</dict>\n</plist>`;\n}\nfunction renderMacOSPolicy(policies, translations) {\n    const appName = product.nameLong;\n    const bundleIdentifier = product.darwinBundleIdentifier;\n    const payloadUUID = product.darwinProfilePayloadUUID;\n    const UUID = product.darwinProfileUUID;\n    const versions = [...new Set(policies.map(p => p.minimumVersion)).values()].sort();\n    const categories = [...new Set(policies.map(p => p.category))];\n    const policyEntries = policies.map(policy => policy.renderProfile())\n        .flat()\n        .map(entry => `\\t\\t\\t\\t${entry}`)\n        .join('\\n');\n    return {\n        profile: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n\t<dict>\n\t\t<key>PayloadContent</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>PayloadDisplayName</key>\n\t\t\t\t<string>${appName}</string>\n\t\t\t\t<key>PayloadIdentifier</key>\n\t\t\t\t<string>${bundleIdentifier}.${UUID}</string>\n\t\t\t\t<key>PayloadType</key>\n\t\t\t\t<string>${bundleIdentifier}</string>\n\t\t\t\t<key>PayloadUUID</key>\n\t\t\t\t<string>${UUID}</string>\n\t\t\t\t<key>PayloadVersion</key>\n\t\t\t\t<integer>1</integer>\n${policyEntries}\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>PayloadDescription</key>\n\t\t<string>This profile manages ${appName}. For more information see https://code.visualstudio.com/docs/setup/enterprise</string>\n\t\t<key>PayloadDisplayName</key>\n\t\t<string>${appName}</string>\n\t\t<key>PayloadIdentifier</key>\n\t\t<string>${bundleIdentifier}</string>\n\t\t<key>PayloadOrganization</key>\n\t\t<string>Microsoft</string>\n\t\t<key>PayloadType</key>\n\t\t<string>Configuration</string>\n\t\t<key>PayloadUUID</key>\n\t\t<string>${payloadUUID}</string>\n\t\t<key>PayloadVersion</key>\n\t\t<integer>1</integer>\n\t\t<key>TargetDeviceType</key>\n\t\t<integer>5</integer>\n\t</dict>\n</plist>`,\n        manifests: [{ languageId: 'en-us', contents: renderProfileManifest(appName, bundleIdentifier, versions, categories, policies) },\n            ...translations.map(({ languageId, languageTranslations }) => ({ languageId, contents: renderProfileManifest(appName, bundleIdentifier, versions, categories, policies, languageTranslations) }))\n        ]\n    };\n}\nfunction renderGP(policies, translations) {\n    const appName = product.nameLong;\n    const regKey = product.win32RegValueName;\n    const versions = [...new Set(policies.map(p => p.minimumVersion)).values()].sort();\n    const categories = [...new Set(policies.map(p => p.category))];\n    return {\n        admx: renderADMX(regKey, versions, categories, policies),\n        adml: [\n            { languageId: 'en-us', contents: renderADML(appName, versions, categories, policies) },\n            ...translations.map(({ languageId, languageTranslations }) => ({ languageId, contents: renderADML(appName, versions, categories, policies, languageTranslations) }))\n        ]\n    };\n}\nconst Languages = {\n    'fr': 'fr-fr',\n    'it': 'it-it',\n    'de': 'de-de',\n    'es': 'es-es',\n    'ru': 'ru-ru',\n    'zh-hans': 'zh-cn',\n    'zh-hant': 'zh-tw',\n    'ja': 'ja-jp',\n    'ko': 'ko-kr',\n    'cs': 'cs-cz',\n    'pt-br': 'pt-br',\n    'tr': 'tr-tr',\n    'pl': 'pl-pl',\n};\nasync function getSpecificNLS(resourceUrlTemplate, languageId, version) {\n    const resource = {\n        publisher: 'ms-ceintl',\n        name: `vscode-language-pack-${languageId}`,\n        version: `${version[0]}.${version[1]}.${version[2]}`,\n        path: 'extension/translations/main.i18n.json'\n    };\n    const url = resourceUrlTemplate.replace(/\\{([^}]+)\\}/g, (_, key) => resource[key]);\n    const res = await fetch(url);\n    if (res.status !== 200) {\n        throw new Error(`[${res.status}] Error downloading language pack ${languageId}@${version}`);\n    }\n    const { contents: result } = await res.json();\n    return result;\n}\nfunction parseVersion(version) {\n    const [, major, minor, patch] = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version);\n    return [parseInt(major), parseInt(minor), parseInt(patch)];\n}\nfunction compareVersions(a, b) {\n    if (a[0] !== b[0]) {\n        return a[0] - b[0];\n    }\n    if (a[1] !== b[1]) {\n        return a[1] - b[1];\n    }\n    return a[2] - b[2];\n}\nasync function queryVersions(serviceUrl, languageId) {\n    const res = await fetch(`${serviceUrl}/extensionquery`, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json;api-version=3.0-preview.1',\n            'Content-Type': 'application/json',\n            'User-Agent': 'VS Code Build',\n        },\n        body: JSON.stringify({\n            filters: [{ criteria: [{ filterType: 7, value: `ms-ceintl.vscode-language-pack-${languageId}` }] }],\n            flags: 0x1\n        })\n    });\n    if (res.status !== 200) {\n        throw new Error(`[${res.status}] Error querying for extension: ${languageId}`);\n    }\n    const result = await res.json();\n    return result.results[0].extensions[0].versions.map(v => parseVersion(v.version)).sort(compareVersions);\n}\nasync function getNLS(extensionGalleryServiceUrl, resourceUrlTemplate, languageId, version) {\n    const versions = await queryVersions(extensionGalleryServiceUrl, languageId);\n    const nextMinor = [version[0], version[1] + 1, 0];\n    const compatibleVersions = versions.filter(v => compareVersions(v, nextMinor) < 0);\n    const latestCompatibleVersion = compatibleVersions.at(-1); // order is newest to oldest\n    if (!latestCompatibleVersion) {\n        throw new Error(`No compatible language pack found for ${languageId} for version ${version}`);\n    }\n    return await getSpecificNLS(resourceUrlTemplate, languageId, latestCompatibleVersion);\n}\nasync function parsePolicies() {\n    const parser = new tree_sitter_1.default();\n    parser.setLanguage(typescript);\n    const files = await getFiles(process.cwd());\n    const base = path_1.default.join(process.cwd(), 'src');\n    const policies = [];\n    for (const file of files) {\n        const moduleName = path_1.default.relative(base, file).replace(/\\.ts$/i, '').replace(/\\\\/g, '/');\n        const contents = await fs_1.promises.readFile(file, { encoding: 'utf8' });\n        const tree = parser.parse(contents);\n        policies.push(...getPolicies(moduleName, tree.rootNode));\n    }\n    return policies;\n}\nasync function getTranslations() {\n    const extensionGalleryServiceUrl = product.extensionsGallery?.serviceUrl;\n    if (!extensionGalleryServiceUrl) {\n        console.warn(`Skipping policy localization: No 'extensionGallery.serviceUrl' found in 'product.json'.`);\n        return [];\n    }\n    const resourceUrlTemplate = product.extensionsGallery?.resourceUrlTemplate;\n    if (!resourceUrlTemplate) {\n        console.warn(`Skipping policy localization: No 'resourceUrlTemplate' found in 'product.json'.`);\n        return [];\n    }\n    const version = parseVersion(packageJson.version);\n    const languageIds = Object.keys(Languages);\n    return await Promise.all(languageIds.map(languageId => getNLS(extensionGalleryServiceUrl, resourceUrlTemplate, languageId, version)\n        .then(languageTranslations => ({ languageId, languageTranslations }))));\n}\nasync function windowsMain(policies, translations) {\n    const root = '.build/policies/win32';\n    const { admx, adml } = await renderGP(policies, translations);\n    await fs_1.promises.rm(root, { recursive: true, force: true });\n    await fs_1.promises.mkdir(root, { recursive: true });\n    await fs_1.promises.writeFile(path_1.default.join(root, `${product.win32RegValueName}.admx`), admx.replace(/\\r?\\n/g, '\\n'));\n    for (const { languageId, contents } of adml) {\n        const languagePath = path_1.default.join(root, languageId === 'en-us' ? 'en-us' : Languages[languageId]);\n        await fs_1.promises.mkdir(languagePath, { recursive: true });\n        await fs_1.promises.writeFile(path_1.default.join(languagePath, `${product.win32RegValueName}.adml`), contents.replace(/\\r?\\n/g, '\\n'));\n    }\n}\nasync function darwinMain(policies, translations) {\n    const bundleIdentifier = product.darwinBundleIdentifier;\n    if (!bundleIdentifier || !product.darwinProfilePayloadUUID || !product.darwinProfileUUID) {\n        throw new Error(`Missing required product information.`);\n    }\n    const root = '.build/policies/darwin';\n    const { profile, manifests } = await renderMacOSPolicy(policies, translations);\n    await fs_1.promises.rm(root, { recursive: true, force: true });\n    await fs_1.promises.mkdir(root, { recursive: true });\n    await fs_1.promises.writeFile(path_1.default.join(root, `${bundleIdentifier}.mobileconfig`), profile.replace(/\\r?\\n/g, '\\n'));\n    for (const { languageId, contents } of manifests) {\n        const languagePath = path_1.default.join(root, languageId === 'en-us' ? 'en-us' : Languages[languageId]);\n        await fs_1.promises.mkdir(languagePath, { recursive: true });\n        await fs_1.promises.writeFile(path_1.default.join(languagePath, `${bundleIdentifier}.plist`), contents.replace(/\\r?\\n/g, '\\n'));\n    }\n}\nasync function main() {\n    const [policies, translations] = await Promise.all([parsePolicies(), getTranslations()]);\n    const platform = process.argv[2];\n    if (platform === 'darwin') {\n        await darwinMain(policies, translations);\n    }\n    else if (platform === 'win32') {\n        await windowsMain(policies, translations);\n    }\n    else {\n        console.error(`Usage: node build/lib/policies <darwin|win32>`);\n        process.exit(1);\n    }\n}\nif (require.main === module) {\n    main().catch(err => {\n        if (err instanceof ParseError) {\n            console.error(`Parse Error:`, err.message);\n        }\n        else {\n            console.error(err);\n        }\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=policies.js.map"
  },
  {
    "path": "build/lib/policies.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { spawn } from 'child_process';\nimport { promises as fs } from 'fs';\nimport path from 'path';\nimport byline from 'byline';\nimport { rgPath } from '@vscode/ripgrep';\nimport Parser from 'tree-sitter';\nconst { typescript } = require('tree-sitter-typescript');\nconst product = require('../../product.json');\nconst packageJson = require('../../package.json');\n\ntype NlsString = { value: string; nlsKey: string };\n\nfunction isNlsString(value: string | NlsString | undefined): value is NlsString {\n\treturn value ? typeof value !== 'string' : false;\n}\n\nfunction isStringArray(value: (string | NlsString)[]): value is string[] {\n\treturn !value.some(s => isNlsString(s));\n}\n\nfunction isNlsStringArray(value: (string | NlsString)[]): value is NlsString[] {\n\treturn value.every(s => isNlsString(s));\n}\n\ninterface Category {\n\treadonly moduleName: string;\n\treadonly name: NlsString;\n}\n\nenum PolicyType {\n\tBoolean = 'boolean',\n\tNumber = 'number',\n\tObject = 'object',\n\tString = 'string',\n\tStringEnum = 'stringEnum',\n}\n\ninterface Policy {\n\treadonly name: string;\n\treadonly type: PolicyType;\n\treadonly category: Category;\n\treadonly minimumVersion: string;\n\trenderADMX(regKey: string): string[];\n\trenderADMLStrings(translations?: LanguageTranslations): string[];\n\trenderADMLPresentation(): string;\n\trenderProfile(): string[];\n\t// https://github.com/ProfileManifests/ProfileManifests/wiki/Manifest-Format\n\trenderProfileManifest(translations?: LanguageTranslations): string;\n}\n\nfunction renderADMLString(prefix: string, moduleName: string, nlsString: NlsString, translations?: LanguageTranslations): string {\n\tlet value: string | undefined;\n\n\tif (translations) {\n\t\tconst moduleTranslations = translations[moduleName];\n\n\t\tif (moduleTranslations) {\n\t\t\tvalue = moduleTranslations[nlsString.nlsKey];\n\t\t}\n\t}\n\n\tif (!value) {\n\t\tvalue = nlsString.value;\n\t}\n\n\treturn `<string id=\"${prefix}_${nlsString.nlsKey.replace(/\\./g, '_')}\">${value}</string>`;\n}\n\nfunction renderProfileString(_prefix: string, moduleName: string, nlsString: NlsString, translations?: LanguageTranslations): string {\n\tlet value: string | undefined;\n\n\tif (translations) {\n\t\tconst moduleTranslations = translations[moduleName];\n\n\t\tif (moduleTranslations) {\n\t\t\tvalue = moduleTranslations[nlsString.nlsKey];\n\t\t}\n\t}\n\n\tif (!value) {\n\t\tvalue = nlsString.value;\n\t}\n\n\treturn value;\n}\n\nabstract class BasePolicy implements Policy {\n\tconstructor(\n\t\treadonly type: PolicyType,\n\t\treadonly name: string,\n\t\treadonly category: Category,\n\t\treadonly minimumVersion: string,\n\t\tprotected description: NlsString,\n\t\tprotected moduleName: string,\n\t) { }\n\n\tprotected renderADMLString(nlsString: NlsString, translations?: LanguageTranslations): string {\n\t\treturn renderADMLString(this.name, this.moduleName, nlsString, translations);\n\t}\n\n\trenderADMX(regKey: string) {\n\t\treturn [\n\t\t\t`<policy name=\"${this.name}\" class=\"Both\" displayName=\"$(string.${this.name})\" explainText=\"$(string.${this.name}_${this.description.nlsKey.replace(/\\./g, '_')})\" key=\"Software\\\\Policies\\\\Microsoft\\\\${regKey}\" presentation=\"$(presentation.${this.name})\">`,\n\t\t\t`\t<parentCategory ref=\"${this.category.name.nlsKey}\" />`,\n\t\t\t`\t<supportedOn ref=\"Supported_${this.minimumVersion.replace(/\\./g, '_')}\" />`,\n\t\t\t`\t<elements>`,\n\t\t\t...this.renderADMXElements(),\n\t\t\t`\t</elements>`,\n\t\t\t`</policy>`\n\t\t];\n\t}\n\n\tprotected abstract renderADMXElements(): string[];\n\n\trenderADMLStrings(translations?: LanguageTranslations) {\n\t\treturn [\n\t\t\t`<string id=\"${this.name}\">${this.name}</string>`,\n\t\t\tthis.renderADMLString(this.description, translations)\n\t\t];\n\t}\n\n\trenderADMLPresentation(): string {\n\t\treturn `<presentation id=\"${this.name}\">${this.renderADMLPresentationContents()}</presentation>`;\n\t}\n\n\tprotected abstract renderADMLPresentationContents(): string;\n\n\trenderProfile() {\n\t\treturn [`<key>${this.name}</key>`, this.renderProfileValue()];\n\t}\n\n\trenderProfileManifest(translations?: LanguageTranslations): string {\n\t\treturn `<dict>\n${this.renderProfileManifestValue(translations)}\n</dict>`;\n\t}\n\n\tabstract renderProfileValue(): string;\n\tabstract renderProfileManifestValue(translations?: LanguageTranslations): string;\n}\n\nclass BooleanPolicy extends BasePolicy {\n\n\tstatic from(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t\tsettingNode: Parser.SyntaxNode\n\t): BooleanPolicy | undefined {\n\t\tconst type = getStringProperty(moduleName, settingNode, 'type');\n\n\t\tif (type !== 'boolean') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn new BooleanPolicy(name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprivate constructor(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t) {\n\t\tsuper(PolicyType.Boolean, name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprotected renderADMXElements(): string[] {\n\t\treturn [\n\t\t\t`<boolean id=\"${this.name}\" valueName=\"${this.name}\">`,\n\t\t\t`\t<trueValue><decimal value=\"1\" /></trueValue><falseValue><decimal value=\"0\" /></falseValue>`,\n\t\t\t`</boolean>`\n\t\t];\n\t}\n\n\trenderADMLPresentationContents() {\n\t\treturn `<checkBox refId=\"${this.name}\">${this.name}</checkBox>`;\n\t}\n\n\trenderProfileValue(): string {\n\t\treturn `<false/>`;\n\t}\n\n\trenderProfileManifestValue(translations?: LanguageTranslations): string {\n\t\treturn `<key>pfm_default</key>\n<false/>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>boolean</string>`;\n\t}\n}\n\nclass ParseError extends Error {\n\tconstructor(message: string, moduleName: string, node: Parser.SyntaxNode) {\n\t\tsuper(`${message}. ${moduleName}.ts:${node.startPosition.row + 1}`);\n\t}\n}\n\nclass NumberPolicy extends BasePolicy {\n\n\tstatic from(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t\tsettingNode: Parser.SyntaxNode\n\t): NumberPolicy | undefined {\n\t\tconst type = getStringProperty(moduleName, settingNode, 'type');\n\n\t\tif (type !== 'number') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst defaultValue = getNumberProperty(moduleName, settingNode, 'default');\n\n\t\tif (typeof defaultValue === 'undefined') {\n\t\t\tthrow new ParseError(`Missing required 'default' property.`, moduleName, settingNode);\n\t\t}\n\n\t\treturn new NumberPolicy(name, category, minimumVersion, description, moduleName, defaultValue);\n\t}\n\n\tprivate constructor(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t\tprotected readonly defaultValue: number,\n\t) {\n\t\tsuper(PolicyType.StringEnum, name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprotected renderADMXElements(): string[] {\n\t\treturn [\n\t\t\t`<decimal id=\"${this.name}\" valueName=\"${this.name}\" />`\n\t\t\t// `<decimal id=\"Quarantine_PurgeItemsAfterDelay\" valueName=\"PurgeItemsAfterDelay\" minValue=\"0\" maxValue=\"10000000\" />`\n\t\t];\n\t}\n\n\trenderADMLPresentationContents() {\n\t\treturn `<decimalTextBox refId=\"${this.name}\" defaultValue=\"${this.defaultValue}\">${this.name}</decimalTextBox>`;\n\t}\n\n\trenderProfileValue() {\n\t\treturn `<integer>${this.defaultValue}</integer>`;\n\t}\n\n\trenderProfileManifestValue(translations?: LanguageTranslations) {\n\t\treturn `<key>pfm_default</key>\n<integer>${this.defaultValue}</integer>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>integer</string>`;\n\t}\n}\n\nclass StringPolicy extends BasePolicy {\n\n\tstatic from(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t\tsettingNode: Parser.SyntaxNode\n\t): StringPolicy | undefined {\n\t\tconst type = getStringProperty(moduleName, settingNode, 'type');\n\n\t\tif (type !== 'string') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn new StringPolicy(name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprivate constructor(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t) {\n\t\tsuper(PolicyType.String, name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprotected renderADMXElements(): string[] {\n\t\treturn [`<text id=\"${this.name}\" valueName=\"${this.name}\" required=\"true\" />`];\n\t}\n\n\trenderADMLPresentationContents() {\n\t\treturn `<textBox refId=\"${this.name}\"><label>${this.name}:</label></textBox>`;\n\t}\n\n\trenderProfileValue(): string {\n\t\treturn `<string></string>`;\n\t}\n\n\trenderProfileManifestValue(translations?: LanguageTranslations): string {\n\t\treturn `<key>pfm_default</key>\n<string></string>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>string</string>`;\n\t}\n}\n\nclass ObjectPolicy extends BasePolicy {\n\n\tstatic from(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t\tsettingNode: Parser.SyntaxNode\n\t): ObjectPolicy | undefined {\n\t\tconst type = getStringProperty(moduleName, settingNode, 'type');\n\n\t\tif (type !== 'object' && type !== 'array') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn new ObjectPolicy(name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprivate constructor(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t) {\n\t\tsuper(PolicyType.Object, name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprotected renderADMXElements(): string[] {\n\t\treturn [`<multiText id=\"${this.name}\" valueName=\"${this.name}\" required=\"true\" />`];\n\t}\n\n\trenderADMLPresentationContents() {\n\t\treturn `<multiTextBox refId=\"${this.name}\" />`;\n\t}\n\n\trenderProfileValue(): string {\n\t\treturn `<string></string>`;\n\t}\n\n\trenderProfileManifestValue(translations?: LanguageTranslations): string {\n\t\treturn `<key>pfm_default</key>\n<string></string>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>string</string>\n`;\n\t}\n}\n\nclass StringEnumPolicy extends BasePolicy {\n\n\tstatic from(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t\tsettingNode: Parser.SyntaxNode\n\t): StringEnumPolicy | undefined {\n\t\tconst type = getStringProperty(moduleName, settingNode, 'type');\n\n\t\tif (type !== 'string') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst enum_ = getStringArrayProperty(moduleName, settingNode, 'enum');\n\n\t\tif (!enum_) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isStringArray(enum_)) {\n\t\t\tthrow new ParseError(`Property 'enum' should not be localized.`, moduleName, settingNode);\n\t\t}\n\n\t\tconst enumDescriptions = getStringArrayProperty(moduleName, settingNode, 'enumDescriptions');\n\n\t\tif (!enumDescriptions) {\n\t\t\tthrow new ParseError(`Missing required 'enumDescriptions' property.`, moduleName, settingNode);\n\t\t} else if (!isNlsStringArray(enumDescriptions)) {\n\t\t\tthrow new ParseError(`Property 'enumDescriptions' should be localized.`, moduleName, settingNode);\n\t\t}\n\n\t\treturn new StringEnumPolicy(name, category, minimumVersion, description, moduleName, enum_, enumDescriptions);\n\t}\n\n\tprivate constructor(\n\t\tname: string,\n\t\tcategory: Category,\n\t\tminimumVersion: string,\n\t\tdescription: NlsString,\n\t\tmoduleName: string,\n\t\tprotected enum_: string[],\n\t\tprotected enumDescriptions: NlsString[],\n\t) {\n\t\tsuper(PolicyType.StringEnum, name, category, minimumVersion, description, moduleName);\n\t}\n\n\tprotected renderADMXElements(): string[] {\n\t\treturn [\n\t\t\t`<enum id=\"${this.name}\" valueName=\"${this.name}\">`,\n\t\t\t...this.enum_.map((value, index) => `\t<item displayName=\"$(string.${this.name}_${this.enumDescriptions[index].nlsKey})\"><value><string>${value}</string></value></item>`),\n\t\t\t`</enum>`\n\t\t];\n\t}\n\n\trenderADMLStrings(translations?: LanguageTranslations) {\n\t\treturn [\n\t\t\t...super.renderADMLStrings(translations),\n\t\t\t...this.enumDescriptions.map(e => this.renderADMLString(e, translations))\n\t\t];\n\t}\n\n\trenderADMLPresentationContents() {\n\t\treturn `<dropdownList refId=\"${this.name}\" />`;\n\t}\n\n\trenderProfileValue() {\n\t\treturn `<string>${this.enum_[0]}</string>`;\n\t}\n\n\trenderProfileManifestValue(translations?: LanguageTranslations): string {\n\t\treturn `<key>pfm_default</key>\n<string>${this.enum_[0]}</string>\n<key>pfm_description</key>\n<string>${renderProfileString(this.name, this.moduleName, this.description, translations)}</string>\n<key>pfm_name</key>\n<string>${this.name}</string>\n<key>pfm_title</key>\n<string>${this.name}</string>\n<key>pfm_type</key>\n<string>string</string>\n<key>pfm_range_list</key>\n<array>\n\t${this.enum_.map(e => `<string>${e}</string>`).join('\\n\t')}\n</array>`;\n\t}\n}\n\ninterface QType<T> {\n\tQ: string;\n\tvalue(matches: Parser.QueryMatch[]): T | undefined;\n}\n\nconst NumberQ: QType<number> = {\n\tQ: `(number) @value`,\n\n\tvalue(matches: Parser.QueryMatch[]): number | undefined {\n\t\tconst match = matches[0];\n\n\t\tif (!match) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst value = match.captures.filter(c => c.name === 'value')[0]?.node.text;\n\n\t\tif (!value) {\n\t\t\tthrow new Error(`Missing required 'value' property.`);\n\t\t}\n\n\t\treturn parseInt(value);\n\t}\n};\n\nconst StringQ: QType<string | NlsString> = {\n\tQ: `[\n\t\t(string (string_fragment) @value)\n\t\t(call_expression\n\t\t\tfunction: [\n\t\t\t\t(identifier) @localizeFn (#eq? @localizeFn localize)\n\t\t\t\t(member_expression\n\t\t\t\t\tobject: (identifier) @nlsObj (#eq? @nlsObj nls)\n\t\t\t\t\tproperty: (property_identifier) @localizeFn (#eq? @localizeFn localize)\n\t\t\t\t)\n\t\t\t]\n\t\t\targuments: (arguments (string (string_fragment) @nlsKey) (string (string_fragment) @value))\n\t\t)\n\t]`,\n\n\tvalue(matches: Parser.QueryMatch[]): string | NlsString | undefined {\n\t\tconst match = matches[0];\n\n\t\tif (!match) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst value = match.captures.filter(c => c.name === 'value')[0]?.node.text;\n\n\t\tif (!value) {\n\t\t\tthrow new Error(`Missing required 'value' property.`);\n\t\t}\n\n\t\tconst nlsKey = match.captures.filter(c => c.name === 'nlsKey')[0]?.node.text;\n\n\t\tif (nlsKey) {\n\t\t\treturn { value, nlsKey };\n\t\t} else {\n\t\t\treturn value;\n\t\t}\n\t}\n};\n\nconst StringArrayQ: QType<(string | NlsString)[]> = {\n\tQ: `(array ${StringQ.Q})`,\n\n\tvalue(matches: Parser.QueryMatch[]): (string | NlsString)[] | undefined {\n\t\tif (matches.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn matches.map(match => {\n\t\t\treturn StringQ.value([match]) as string | NlsString;\n\t\t});\n\t}\n};\n\nfunction getProperty<T>(qtype: QType<T>, moduleName: string, node: Parser.SyntaxNode, key: string): T | undefined {\n\tconst query = new Parser.Query(\n\t\ttypescript,\n\t\t`(\n\t\t\t(pair\n\t\t\t\tkey: [(property_identifier)(string)] @key\n\t\t\t\tvalue: ${qtype.Q}\n\t\t\t)\n\t\t\t(#any-of? @key \"${key}\" \"'${key}'\")\n\t\t)`\n\t);\n\n\ttry {\n\t\tconst matches = query.matches(node).filter(m => m.captures[0].node.parent?.parent === node);\n\t\treturn qtype.value(matches);\n\t} catch (e) {\n\t\tthrow new ParseError(e.message, moduleName, node);\n\t}\n}\n\nfunction getNumberProperty(moduleName: string, node: Parser.SyntaxNode, key: string): number | undefined {\n\treturn getProperty(NumberQ, moduleName, node, key);\n}\n\nfunction getStringProperty(moduleName: string, node: Parser.SyntaxNode, key: string): string | NlsString | undefined {\n\treturn getProperty(StringQ, moduleName, node, key);\n}\n\nfunction getStringArrayProperty(moduleName: string, node: Parser.SyntaxNode, key: string): (string | NlsString)[] | undefined {\n\treturn getProperty(StringArrayQ, moduleName, node, key);\n}\n\n// TODO: add more policy types\nconst PolicyTypes = [\n\tBooleanPolicy,\n\tNumberPolicy,\n\tStringEnumPolicy,\n\tStringPolicy,\n\tObjectPolicy\n];\n\nfunction getPolicy(\n\tmoduleName: string,\n\tconfigurationNode: Parser.SyntaxNode,\n\tsettingNode: Parser.SyntaxNode,\n\tpolicyNode: Parser.SyntaxNode,\n\tcategories: Map<string, Category>\n): Policy {\n\tconst name = getStringProperty(moduleName, policyNode, 'name');\n\n\tif (!name) {\n\t\tthrow new ParseError(`Missing required 'name' property`, moduleName, policyNode);\n\t} else if (isNlsString(name)) {\n\t\tthrow new ParseError(`Property 'name' should be a literal string`, moduleName, policyNode);\n\t}\n\n\tconst categoryName = getStringProperty(moduleName, configurationNode, 'title');\n\n\tif (!categoryName) {\n\t\tthrow new ParseError(`Missing required 'title' property`, moduleName, configurationNode);\n\t} else if (!isNlsString(categoryName)) {\n\t\tthrow new ParseError(`Property 'title' should be localized`, moduleName, configurationNode);\n\t}\n\n\tconst categoryKey = `${categoryName.nlsKey}:${categoryName.value}`;\n\tlet category = categories.get(categoryKey);\n\n\tif (!category) {\n\t\tcategory = { moduleName, name: categoryName };\n\t\tcategories.set(categoryKey, category);\n\t}\n\n\tconst minimumVersion = getStringProperty(moduleName, policyNode, 'minimumVersion');\n\n\tif (!minimumVersion) {\n\t\tthrow new ParseError(`Missing required 'minimumVersion' property.`, moduleName, policyNode);\n\t} else if (isNlsString(minimumVersion)) {\n\t\tthrow new ParseError(`Property 'minimumVersion' should be a literal string.`, moduleName, policyNode);\n\t}\n\n\tconst description = getStringProperty(moduleName, policyNode, 'description') ?? getStringProperty(moduleName, settingNode, 'description');\n\n\tif (!description) {\n\t\tthrow new ParseError(`Missing required 'description' property.`, moduleName, settingNode);\n\t} if (!isNlsString(description)) {\n\t\tthrow new ParseError(`Property 'description' should be localized.`, moduleName, settingNode);\n\t}\n\n\tlet result: Policy | undefined;\n\n\tfor (const policyType of PolicyTypes) {\n\t\tif (result = policyType.from(name, category, minimumVersion, description, moduleName, settingNode)) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!result) {\n\t\tthrow new ParseError(`Failed to parse policy '${name}'.`, moduleName, settingNode);\n\t}\n\n\treturn result;\n}\n\nfunction getPolicies(moduleName: string, node: Parser.SyntaxNode): Policy[] {\n\tconst query = new Parser.Query(typescript, `\n\t\t(\n\t\t\t(call_expression\n\t\t\t\tfunction: (member_expression property: (property_identifier) @registerConfigurationFn) (#eq? @registerConfigurationFn registerConfiguration)\n\t\t\t\targuments: (arguments\t(object\t(pair\n\t\t\t\t\tkey: [(property_identifier)(string)] @propertiesKey (#any-of? @propertiesKey \"properties\" \"'properties'\")\n\t\t\t\t\tvalue: (object (pair\n\t\t\t\t\t\tkey: [(property_identifier)(string)(computed_property_name)]\n\t\t\t\t\t\tvalue: (object (pair\n\t\t\t\t\t\t\tkey: [(property_identifier)(string)] @policyKey (#any-of? @policyKey \"policy\" \"'policy'\")\n\t\t\t\t\t\t\tvalue: (object) @policy\n\t\t\t\t\t\t)) @setting\n\t\t\t\t\t))\n\t\t\t\t)) @configuration)\n\t\t\t)\n\t\t)\n\t`);\n\n\tconst categories = new Map<string, Category>();\n\n\treturn query.matches(node).map(m => {\n\t\tconst configurationNode = m.captures.filter(c => c.name === 'configuration')[0].node;\n\t\tconst settingNode = m.captures.filter(c => c.name === 'setting')[0].node;\n\t\tconst policyNode = m.captures.filter(c => c.name === 'policy')[0].node;\n\t\treturn getPolicy(moduleName, configurationNode, settingNode, policyNode, categories);\n\t});\n}\n\nasync function getFiles(root: string): Promise<string[]> {\n\treturn new Promise((c, e) => {\n\t\tconst result: string[] = [];\n\t\tconst rg = spawn(rgPath, ['-l', 'registerConfiguration\\\\(', '-g', 'src/**/*.ts', '-g', '!src/**/test/**', root]);\n\t\tconst stream = byline(rg.stdout.setEncoding('utf8'));\n\t\tstream.on('data', path => result.push(path));\n\t\tstream.on('error', err => e(err));\n\t\tstream.on('end', () => c(result));\n\t});\n}\n\nfunction renderADMX(regKey: string, versions: string[], categories: Category[], policies: Policy[]) {\n\tversions = versions.map(v => v.replace(/\\./g, '_'));\n\n\treturn `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<policyDefinitions revision=\"1.1\" schemaVersion=\"1.0\">\n\t<policyNamespaces>\n\t\t<target prefix=\"${regKey}\" namespace=\"Microsoft.Policies.${regKey}\" />\n\t</policyNamespaces>\n\t<resources minRequiredRevision=\"1.0\" />\n\t<supportedOn>\n\t\t<definitions>\n\t\t\t${versions.map(v => `<definition name=\"Supported_${v}\" displayName=\"$(string.Supported_${v})\" />`).join(`\\n\t\t\t`)}\n\t\t</definitions>\n\t</supportedOn>\n\t<categories>\n\t\t<category displayName=\"$(string.Application)\" name=\"Application\" />\n\t\t${categories.map(c => `<category displayName=\"$(string.Category_${c.name.nlsKey})\" name=\"${c.name.nlsKey}\"><parentCategory ref=\"Application\" /></category>`).join(`\\n\t\t`)}\n\t</categories>\n\t<policies>\n\t\t${policies.map(p => p.renderADMX(regKey)).flat().join(`\\n\t\t`)}\n\t</policies>\n</policyDefinitions>\n`;\n}\n\nfunction renderADML(appName: string, versions: string[], categories: Category[], policies: Policy[], translations?: LanguageTranslations) {\n\treturn `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<policyDefinitionResources revision=\"1.0\" schemaVersion=\"1.0\">\n\t<displayName />\n\t<description />\n\t<resources>\n\t\t<stringTable>\n\t\t\t<string id=\"Application\">${appName}</string>\n\t\t\t${versions.map(v => `<string id=\"Supported_${v.replace(/\\./g, '_')}\">${appName} &gt;= ${v}</string>`).join(`\\n\t\t\t`)}\n\t\t\t${categories.map(c => renderADMLString('Category', c.moduleName, c.name, translations)).join(`\\n\t\t\t`)}\n\t\t\t${policies.map(p => p.renderADMLStrings(translations)).flat().join(`\\n\t\t\t`)}\n\t\t</stringTable>\n\t\t<presentationTable>\n\t\t\t${policies.map(p => p.renderADMLPresentation()).join(`\\n\t\t\t`)}\n\t\t</presentationTable>\n\t</resources>\n</policyDefinitionResources>\n`;\n}\n\nfunction renderProfileManifest(appName: string, bundleIdentifier: string, _versions: string[], _categories: Category[], policies: Policy[], translations?: LanguageTranslations) {\n\n\tconst requiredPayloadFields = `\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>Configure ${appName}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadDescription</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Description</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>${appName}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadDisplayName</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Display Name</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>${bundleIdentifier}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadIdentifier</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Identifier</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>${bundleIdentifier}</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadType</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Type</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string></string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadUUID</string>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload UUID</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<integer>1</integer>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadVersion</string>\n\t\t\t<key>pfm_range_list</key>\n\t\t\t<array>\n\t\t\t\t<integer>1</integer>\n\t\t\t</array>\n\t\t\t<key>pfm_require</key>\n\t\t\t<string>always</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Version</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>integer</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>pfm_default</key>\n\t\t\t<string>Microsoft</string>\n\t\t\t<key>pfm_name</key>\n\t\t\t<string>PayloadOrganization</string>\n\t\t\t<key>pfm_title</key>\n\t\t\t<string>Payload Organization</string>\n\t\t\t<key>pfm_type</key>\n\t\t\t<string>string</string>\n\t\t</dict>`;\n\n\tconst profileManifestSubkeys = policies.map(policy => {\n\t\treturn policy.renderProfileManifest(translations);\n\t}).join('');\n\n\treturn `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>pfm_app_url</key>\n    <string>https://code.visualstudio.com/</string>\n    <key>pfm_description</key>\n    <string>${appName} Managed Settings</string>\n    <key>pfm_documentation_url</key>\n    <string>https://code.visualstudio.com/docs/setup/enterprise</string>\n    <key>pfm_domain</key>\n    <string>${bundleIdentifier}</string>\n    <key>pfm_format_version</key>\n    <integer>1</integer>\n    <key>pfm_interaction</key>\n    <string>combined</string>\n    <key>pfm_last_modified</key>\n    <date>${new Date().toISOString().replace(/\\.\\d+Z$/, 'Z')}</date>\n    <key>pfm_platforms</key>\n    <array>\n        <string>macOS</string>\n    </array>\n    <key>pfm_subkeys</key>\n    <array>\n\t${requiredPayloadFields}\n\t${profileManifestSubkeys}\n    </array>\n    <key>pfm_title</key>\n    <string>${appName}</string>\n    <key>pfm_unique</key>\n    <true/>\n    <key>pfm_version</key>\n    <integer>1</integer>\n</dict>\n</plist>`;\n}\n\nfunction renderMacOSPolicy(policies: Policy[], translations: Translations) {\n\tconst appName = product.nameLong;\n\tconst bundleIdentifier = product.darwinBundleIdentifier;\n\tconst payloadUUID = product.darwinProfilePayloadUUID;\n\tconst UUID = product.darwinProfileUUID;\n\n\tconst versions = [...new Set(policies.map(p => p.minimumVersion)).values()].sort();\n\tconst categories = [...new Set(policies.map(p => p.category))];\n\n\tconst policyEntries =\n\t\tpolicies.map(policy => policy.renderProfile())\n\t\t\t.flat()\n\t\t\t.map(entry => `\\t\\t\\t\\t${entry}`)\n\t\t\t.join('\\n');\n\n\n\treturn {\n\t\tprofile: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n\t<dict>\n\t\t<key>PayloadContent</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>PayloadDisplayName</key>\n\t\t\t\t<string>${appName}</string>\n\t\t\t\t<key>PayloadIdentifier</key>\n\t\t\t\t<string>${bundleIdentifier}.${UUID}</string>\n\t\t\t\t<key>PayloadType</key>\n\t\t\t\t<string>${bundleIdentifier}</string>\n\t\t\t\t<key>PayloadUUID</key>\n\t\t\t\t<string>${UUID}</string>\n\t\t\t\t<key>PayloadVersion</key>\n\t\t\t\t<integer>1</integer>\n${policyEntries}\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>PayloadDescription</key>\n\t\t<string>This profile manages ${appName}. For more information see https://code.visualstudio.com/docs/setup/enterprise</string>\n\t\t<key>PayloadDisplayName</key>\n\t\t<string>${appName}</string>\n\t\t<key>PayloadIdentifier</key>\n\t\t<string>${bundleIdentifier}</string>\n\t\t<key>PayloadOrganization</key>\n\t\t<string>Microsoft</string>\n\t\t<key>PayloadType</key>\n\t\t<string>Configuration</string>\n\t\t<key>PayloadUUID</key>\n\t\t<string>${payloadUUID}</string>\n\t\t<key>PayloadVersion</key>\n\t\t<integer>1</integer>\n\t\t<key>TargetDeviceType</key>\n\t\t<integer>5</integer>\n\t</dict>\n</plist>`,\n\t\tmanifests: [{ languageId: 'en-us', contents: renderProfileManifest(appName, bundleIdentifier, versions, categories, policies) },\n\t\t...translations.map(({ languageId, languageTranslations }) =>\n\t\t\t({ languageId, contents: renderProfileManifest(appName, bundleIdentifier, versions, categories, policies, languageTranslations) }))\n\t\t]\n\t};\n}\n\nfunction renderGP(policies: Policy[], translations: Translations) {\n\tconst appName = product.nameLong;\n\tconst regKey = product.win32RegValueName;\n\n\tconst versions = [...new Set(policies.map(p => p.minimumVersion)).values()].sort();\n\tconst categories = [...new Set(policies.map(p => p.category))];\n\n\treturn {\n\t\tadmx: renderADMX(regKey, versions, categories, policies),\n\t\tadml: [\n\t\t\t{ languageId: 'en-us', contents: renderADML(appName, versions, categories, policies) },\n\t\t\t...translations.map(({ languageId, languageTranslations }) =>\n\t\t\t\t({ languageId, contents: renderADML(appName, versions, categories, policies, languageTranslations) }))\n\t\t]\n\t};\n}\n\nconst Languages = {\n\t'fr': 'fr-fr',\n\t'it': 'it-it',\n\t'de': 'de-de',\n\t'es': 'es-es',\n\t'ru': 'ru-ru',\n\t'zh-hans': 'zh-cn',\n\t'zh-hant': 'zh-tw',\n\t'ja': 'ja-jp',\n\t'ko': 'ko-kr',\n\t'cs': 'cs-cz',\n\t'pt-br': 'pt-br',\n\t'tr': 'tr-tr',\n\t'pl': 'pl-pl',\n};\n\ntype LanguageTranslations = { [moduleName: string]: { [nlsKey: string]: string } };\ntype Translations = { languageId: string; languageTranslations: LanguageTranslations }[];\n\ntype Version = [number, number, number];\n\nasync function getSpecificNLS(resourceUrlTemplate: string, languageId: string, version: Version) {\n\tconst resource = {\n\t\tpublisher: 'ms-ceintl',\n\t\tname: `vscode-language-pack-${languageId}`,\n\t\tversion: `${version[0]}.${version[1]}.${version[2]}`,\n\t\tpath: 'extension/translations/main.i18n.json'\n\t};\n\n\tconst url = resourceUrlTemplate.replace(/\\{([^}]+)\\}/g, (_, key) => resource[key as keyof typeof resource]);\n\tconst res = await fetch(url);\n\n\tif (res.status !== 200) {\n\t\tthrow new Error(`[${res.status}] Error downloading language pack ${languageId}@${version}`);\n\t}\n\n\tconst { contents: result } = await res.json() as { contents: LanguageTranslations };\n\treturn result;\n}\n\nfunction parseVersion(version: string): Version {\n\tconst [, major, minor, patch] = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version)!;\n\treturn [parseInt(major), parseInt(minor), parseInt(patch)];\n}\n\nfunction compareVersions(a: Version, b: Version): number {\n\tif (a[0] !== b[0]) { return a[0] - b[0]; }\n\tif (a[1] !== b[1]) { return a[1] - b[1]; }\n\treturn a[2] - b[2];\n}\n\nasync function queryVersions(serviceUrl: string, languageId: string): Promise<Version[]> {\n\tconst res = await fetch(`${serviceUrl}/extensionquery`, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\t'Accept': 'application/json;api-version=3.0-preview.1',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t'User-Agent': 'VS Code Build',\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tfilters: [{ criteria: [{ filterType: 7, value: `ms-ceintl.vscode-language-pack-${languageId}` }] }],\n\t\t\tflags: 0x1\n\t\t})\n\t});\n\n\tif (res.status !== 200) {\n\t\tthrow new Error(`[${res.status}] Error querying for extension: ${languageId}`);\n\t}\n\n\tconst result = await res.json() as { results: [{ extensions: { versions: { version: string }[] }[] }] };\n\treturn result.results[0].extensions[0].versions.map(v => parseVersion(v.version)).sort(compareVersions);\n}\n\nasync function getNLS(extensionGalleryServiceUrl: string, resourceUrlTemplate: string, languageId: string, version: Version) {\n\tconst versions = await queryVersions(extensionGalleryServiceUrl, languageId);\n\tconst nextMinor: Version = [version[0], version[1] + 1, 0];\n\tconst compatibleVersions = versions.filter(v => compareVersions(v, nextMinor) < 0);\n\tconst latestCompatibleVersion = compatibleVersions.at(-1)!; // order is newest to oldest\n\n\tif (!latestCompatibleVersion) {\n\t\tthrow new Error(`No compatible language pack found for ${languageId} for version ${version}`);\n\t}\n\n\treturn await getSpecificNLS(resourceUrlTemplate, languageId, latestCompatibleVersion);\n}\n\nasync function parsePolicies(): Promise<Policy[]> {\n\tconst parser = new Parser();\n\tparser.setLanguage(typescript);\n\n\tconst files = await getFiles(process.cwd());\n\tconst base = path.join(process.cwd(), 'src');\n\tconst policies = [];\n\n\tfor (const file of files) {\n\t\tconst moduleName = path.relative(base, file).replace(/\\.ts$/i, '').replace(/\\\\/g, '/');\n\t\tconst contents = await fs.readFile(file, { encoding: 'utf8' });\n\t\tconst tree = parser.parse(contents);\n\t\tpolicies.push(...getPolicies(moduleName, tree.rootNode));\n\t}\n\n\treturn policies;\n}\n\nasync function getTranslations(): Promise<Translations> {\n\tconst extensionGalleryServiceUrl = product.extensionsGallery?.serviceUrl;\n\n\tif (!extensionGalleryServiceUrl) {\n\t\tconsole.warn(`Skipping policy localization: No 'extensionGallery.serviceUrl' found in 'product.json'.`);\n\t\treturn [];\n\t}\n\n\tconst resourceUrlTemplate = product.extensionsGallery?.resourceUrlTemplate;\n\n\tif (!resourceUrlTemplate) {\n\t\tconsole.warn(`Skipping policy localization: No 'resourceUrlTemplate' found in 'product.json'.`);\n\t\treturn [];\n\t}\n\n\tconst version = parseVersion(packageJson.version);\n\tconst languageIds = Object.keys(Languages);\n\n\treturn await Promise.all(languageIds.map(\n\t\tlanguageId => getNLS(extensionGalleryServiceUrl, resourceUrlTemplate, languageId, version)\n\t\t\t.then(languageTranslations => ({ languageId, languageTranslations }))\n\t));\n}\n\nasync function windowsMain(policies: Policy[], translations: Translations) {\n\tconst root = '.build/policies/win32';\n\tconst { admx, adml } = await renderGP(policies, translations);\n\n\tawait fs.rm(root, { recursive: true, force: true });\n\tawait fs.mkdir(root, { recursive: true });\n\n\tawait fs.writeFile(path.join(root, `${product.win32RegValueName}.admx`), admx.replace(/\\r?\\n/g, '\\n'));\n\n\tfor (const { languageId, contents } of adml) {\n\t\tconst languagePath = path.join(root, languageId === 'en-us' ? 'en-us' : Languages[languageId as keyof typeof Languages]);\n\t\tawait fs.mkdir(languagePath, { recursive: true });\n\t\tawait fs.writeFile(path.join(languagePath, `${product.win32RegValueName}.adml`), contents.replace(/\\r?\\n/g, '\\n'));\n\t}\n}\n\nasync function darwinMain(policies: Policy[], translations: Translations) {\n\tconst bundleIdentifier = product.darwinBundleIdentifier;\n\tif (!bundleIdentifier || !product.darwinProfilePayloadUUID || !product.darwinProfileUUID) {\n\t\tthrow new Error(`Missing required product information.`);\n\t}\n\tconst root = '.build/policies/darwin';\n\tconst { profile, manifests } = await renderMacOSPolicy(policies, translations);\n\n\tawait fs.rm(root, { recursive: true, force: true });\n\tawait fs.mkdir(root, { recursive: true });\n\tawait fs.writeFile(path.join(root, `${bundleIdentifier}.mobileconfig`), profile.replace(/\\r?\\n/g, '\\n'));\n\n\tfor (const { languageId, contents } of manifests) {\n\t\tconst languagePath = path.join(root, languageId === 'en-us' ? 'en-us' : Languages[languageId as keyof typeof Languages]);\n\t\tawait fs.mkdir(languagePath, { recursive: true });\n\t\tawait fs.writeFile(path.join(languagePath, `${bundleIdentifier}.plist`), contents.replace(/\\r?\\n/g, '\\n'));\n\t}\n}\n\nasync function main() {\n\tconst [policies, translations] = await Promise.all([parsePolicies(), getTranslations()]);\n\tconst platform = process.argv[2];\n\n\tif (platform === 'darwin') {\n\t\tawait darwinMain(policies, translations);\n\t} else if (platform === 'win32') {\n\t\tawait windowsMain(policies, translations);\n\t} else {\n\t\tconsole.error(`Usage: node build/lib/policies <darwin|win32>`);\n\t\tprocess.exit(1);\n\t}\n}\n\nif (require.main === module) {\n\tmain().catch(err => {\n\t\tif (err instanceof ParseError) {\n\t\t\tconsole.error(`Parse Error:`, err.message);\n\t\t} else {\n\t\t\tconsole.error(err);\n\t\t}\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/lib/postcss.js",
    "content": "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gulpPostcss = gulpPostcss;\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst postcss_1 = __importDefault(require(\"postcss\"));\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nfunction gulpPostcss(plugins, handleError) {\n    const instance = (0, postcss_1.default)(plugins);\n    return event_stream_1.default.map((file, callback) => {\n        if (file.isNull()) {\n            return callback(null, file);\n        }\n        if (file.isStream()) {\n            return callback(new Error('Streaming not supported'));\n        }\n        instance\n            .process(file.contents.toString(), { from: file.path })\n            .then((result) => {\n            file.contents = Buffer.from(result.css);\n            callback(null, file);\n        })\n            .catch((error) => {\n            if (handleError) {\n                handleError(error);\n                callback();\n            }\n            else {\n                callback(error);\n            }\n        });\n    });\n}\n//# sourceMappingURL=postcss.js.map"
  },
  {
    "path": "build/lib/postcss.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport postcss from 'postcss';\nimport File from 'vinyl';\nimport es from 'event-stream';\n\nexport function gulpPostcss(plugins: postcss.AcceptedPlugin[], handleError?: (err: Error) => void) {\n\tconst instance = postcss(plugins);\n\n\treturn es.map((file: File, callback: (error?: any, file?: any) => void) => {\n\t\tif (file.isNull()) {\n\t\t\treturn callback(null, file);\n\t\t}\n\n\t\tif (file.isStream()) {\n\t\t\treturn callback(new Error('Streaming not supported'));\n\t\t}\n\n\t\tinstance\n\t\t\t.process(file.contents.toString(), { from: file.path })\n\t\t\t.then((result) => {\n\t\t\t\tfile.contents = Buffer.from(result.css);\n\t\t\t\tcallback(null, file);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (handleError) {\n\t\t\t\t\thandleError(error);\n\t\t\t\t\tcallback();\n\t\t\t\t} else {\n\t\t\t\t\tcallback(error);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n"
  },
  {
    "path": "build/lib/preLaunch.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// @ts-check\nconst path_1 = __importDefault(require(\"path\"));\nconst child_process_1 = require(\"child_process\");\nconst fs_1 = require(\"fs\");\nconst npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';\nconst rootDir = path_1.default.resolve(__dirname, '..', '..');\nfunction runProcess(command, args = []) {\n    return new Promise((resolve, reject) => {\n        const child = (0, child_process_1.spawn)(command, args, { cwd: rootDir, stdio: 'inherit', env: process.env, shell: process.platform === 'win32' });\n        child.on('exit', err => !err ? resolve() : process.exit(err ?? 1));\n        child.on('error', reject);\n    });\n}\nasync function exists(subdir) {\n    try {\n        await fs_1.promises.stat(path_1.default.join(rootDir, subdir));\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nasync function ensureNodeModules() {\n    if (!(await exists('node_modules'))) {\n        await runProcess(npm, ['ci']);\n    }\n}\nasync function getElectron() {\n    await runProcess(npm, ['run', 'electron']);\n}\nasync function ensureCompiled() {\n    if (!(await exists('out'))) {\n        await runProcess(npm, ['run', 'compile']);\n    }\n}\nasync function main() {\n    await ensureNodeModules();\n    await getElectron();\n    await ensureCompiled();\n    // Can't require this until after dependencies are installed\n    const { getBuiltInExtensions } = require('./builtInExtensions');\n    await getBuiltInExtensions();\n}\nif (require.main === module) {\n    main().catch(err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=preLaunch.js.map"
  },
  {
    "path": "build/lib/preLaunch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// @ts-check\n\nimport path from 'path';\nimport { spawn } from 'child_process';\nimport { promises as fs } from 'fs';\n\nconst npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';\nconst rootDir = path.resolve(__dirname, '..', '..');\n\nfunction runProcess(command: string, args: ReadonlyArray<string> = []) {\n\treturn new Promise<void>((resolve, reject) => {\n\t\tconst child = spawn(command, args, { cwd: rootDir, stdio: 'inherit', env: process.env, shell: process.platform === 'win32' });\n\t\tchild.on('exit', err => !err ? resolve() : process.exit(err ?? 1));\n\t\tchild.on('error', reject);\n\t});\n}\n\nasync function exists(subdir: string) {\n\ttry {\n\t\tawait fs.stat(path.join(rootDir, subdir));\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function ensureNodeModules() {\n\tif (!(await exists('node_modules'))) {\n\t\tawait runProcess(npm, ['ci']);\n\t}\n}\n\nasync function getElectron() {\n\tawait runProcess(npm, ['run', 'electron']);\n}\n\nasync function ensureCompiled() {\n\tif (!(await exists('out'))) {\n\t\tawait runProcess(npm, ['run', 'compile']);\n\t}\n}\n\nasync function main() {\n\tawait ensureNodeModules();\n\tawait getElectron();\n\tawait ensureCompiled();\n\n\t// Can't require this until after dependencies are installed\n\tconst { getBuiltInExtensions } = require('./builtInExtensions');\n\tawait getBuiltInExtensions();\n}\n\nif (require.main === module) {\n\tmain().catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/lib/propertyInitOrderChecker.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EntryKind = void 0;\nconst ts = __importStar(require(\"typescript\"));\nconst path = __importStar(require(\"path\"));\nconst fs = __importStar(require(\"fs\"));\nconst TS_CONFIG_PATH = path.join(__dirname, '../../', 'src', 'tsconfig.json');\n//\n// #############################################################################################\n//\n// A custom typescript checker that ensure constructor properties are NOT used to initialize\n// defined properties. This is needed for the times when `useDefineForClassFields` is gone.\n//\n// see https://github.com/microsoft/vscode/issues/243049, https://github.com/microsoft/vscode/issues/186726,\n// https://github.com/microsoft/vscode/pull/241544\n//\n// #############################################################################################\n//\nconst ignored = new Set([\n    'vs/base/common/arrays.ts',\n    'vs/platform/extensionManagement/common/extensionsScannerService.ts',\n    'vs/platform/configuration/common/configurations.ts',\n    'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.ts',\n    'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts',\n    'vs/editor/common/model/textModelTokens.ts',\n    'vs/editor/common/model/tokenizationTextModelPart.ts',\n    'vs/editor/common/core/textEdit.ts',\n    'vs/workbench/contrib/debug/common/debugStorage.ts',\n    'vs/workbench/contrib/debug/common/debugModel.ts',\n    'vs/workbench/api/common/extHostCommands.ts',\n    'vs/editor/browser/view/viewLayer.ts',\n    'vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.ts',\n    'vs/platform/accessibilitySignal/browser/accessibilitySignalService.ts',\n    'vs/editor/browser/widget/diffEditor/utils.ts',\n    'vs/editor/browser/observableCodeEditor.ts',\n    'vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.ts',\n    'vs/editor/browser/widget/diffEditor/diffEditorOptions.ts',\n    'vs/editor/browser/widget/diffEditor/components/diffEditorEditors.ts',\n    'vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.ts',\n    'vs/editor/browser/widget/diffEditor/components/diffEditorSash.ts',\n    'vs/editor/browser/widget/diffEditor/utils/editorGutter.ts',\n    'vs/editor/browser/widget/diffEditor/features/gutterFeature.ts',\n    'vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.ts',\n    'vs/editor/browser/widget/diffEditor/diffEditorWidget.ts',\n    'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.ts',\n    'vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.ts',\n    'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts',\n    'vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts',\n    'vs/editor/contrib/inlayHints/browser/inlayHintsController.ts',\n    'vs/editor/contrib/inlineCompletions/browser/model/changeRecorder.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.ts',\n    'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.ts',\n    'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsAccessibleView.ts',\n    'vs/editor/contrib/placeholderText/browser/placeholderTextContribution.ts',\n    'vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts',\n    'vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts',\n    'vs/workbench/contrib/files/browser/views/openEditorsView.ts',\n    'vs/workbench/contrib/chat/browser/chatContentParts/chatAttachmentsContentPart.ts',\n    'vs/workbench/contrib/chat/browser/contrib/chatImplicitContext.ts',\n    'vs/workbench/contrib/chat/browser/chatInputPart.ts',\n    'vs/workbench/contrib/mergeEditor/browser/model/modifiedBaseRange.ts',\n    'vs/workbench/contrib/mergeEditor/browser/model/diffComputer.ts',\n    'vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.ts',\n    'vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts',\n    'vs/workbench/contrib/mergeEditor/browser/view/editors/codeEditorView.ts',\n    'vs/workbench/contrib/mergeEditor/browser/view/editors/inputCodeEditorView.ts',\n    'vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts',\n    'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.ts',\n    'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts',\n    'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.ts',\n    'vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditorInput.ts',\n    'vs/platform/terminal/common/capabilities/commandDetectionCapability.ts',\n    'vs/workbench/contrib/testing/common/testExclusions.ts',\n    'vs/workbench/contrib/testing/common/testResultStorage.ts',\n    'vs/workbench/services/userDataProfile/browser/snippetsResource.ts',\n    'vs/platform/quickinput/browser/quickInputController.ts',\n    'vs/platform/userDataSync/common/abstractSynchronizer.ts',\n    'vs/workbench/services/authentication/browser/authenticationExtensionsService.ts',\n    'vs/workbench/services/textMate/browser/backgroundTokenization/textMateWorkerTokenizerController.ts',\n    'vs/workbench/services/textMate/browser/textMateTokenizationFeatureImpl.ts',\n    'vs/workbench/contrib/notebook/browser/services/notebookServiceImpl.ts',\n    'vs/workbench/contrib/notebook/browser/contrib/multicursor/notebookMulticursor.ts',\n    'vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.ts',\n    'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts',\n    'vs/workbench/contrib/notebook/browser/diff/notebookMultiDiffEditor.ts',\n    'vs/workbench/contrib/chat/common/promptSyntax/contentProviders/textModelContentsProvider.ts',\n    'vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.ts',\n    'vs/workbench/contrib/search/common/cacheState.ts',\n    'vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts',\n    'vs/workbench/contrib/search/browser/anythingQuickAccess.ts',\n    'vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts',\n    'vs/workbench/contrib/testing/browser/testResultsView/testResultsOutput.ts',\n    'vs/workbench/contrib/testing/common/testExplorerFilterState.ts',\n    'vs/workbench/contrib/testing/browser/testResultsView/testResultsTree.ts',\n    'vs/workbench/contrib/testing/browser/testingOutputPeek.ts',\n    'vs/workbench/contrib/testing/browser/explorerProjections/index.ts',\n    'vs/workbench/contrib/testing/browser/testingExplorerFilter.ts',\n    'vs/workbench/contrib/testing/browser/testingExplorerView.ts',\n    'vs/workbench/contrib/testing/common/testServiceImpl.ts',\n    'vs/platform/quickinput/browser/commandsQuickAccess.ts',\n    'vs/workbench/contrib/quickaccess/browser/commandsQuickAccess.ts',\n    'vs/workbench/contrib/multiDiffEditor/browser/scmMultiDiffSourceResolver.ts',\n    'vs/workbench/contrib/debug/browser/debugMemory.ts',\n    'vs/workbench/contrib/markers/browser/markersViewActions.ts',\n    'vs/workbench/contrib/mergeEditor/browser/view/viewZones.ts',\n    'vs/workbench/contrib/mergeEditor/browser/view/mergeEditor.ts',\n    'vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts',\n    'vs/workbench/contrib/output/browser/outputServices.ts',\n    'vs/workbench/contrib/terminalContrib/typeAhead/browser/terminalTypeAheadAddon.ts',\n    'vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts',\n    'vs/workbench/contrib/editSessions/browser/editSessionsStorageService.ts',\n    'vs/workbench/contrib/accessibilitySignals/browser/editorTextPropertySignalsContribution.ts',\n    'vs/workbench/contrib/inlineCompletions/browser/inlineCompletionLanguageStatusBarContribution.ts',\n    'vs/workbench/services/extensionManagement/common/webExtensionManagementService.ts',\n    'vs/workbench/contrib/welcomeDialog/browser/welcomeWidget.ts',\n    'vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts',\n    'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordInsertView.ts',\n    'vs/platform/terminal/node/ptyService.ts',\n    'vs/workbench/api/common/extHostLanguageFeatures.ts',\n    'vs/workbench/api/common/extHostSearch.ts',\n    'vs/workbench/contrib/testing/test/common/testStubs.ts'\n]);\nconst cancellationToken = {\n    isCancellationRequested: () => false,\n    throwIfCancellationRequested: () => { },\n};\nconst seenFiles = new Set();\nlet errorCount = 0;\nfunction createProgram(tsconfigPath) {\n    const tsConfig = ts.readConfigFile(tsconfigPath, ts.sys.readFile);\n    const configHostParser = { fileExists: fs.existsSync, readDirectory: ts.sys.readDirectory, readFile: file => fs.readFileSync(file, 'utf8'), useCaseSensitiveFileNames: process.platform === 'linux' };\n    const tsConfigParsed = ts.parseJsonConfigFileContent(tsConfig.config, configHostParser, path.resolve(path.dirname(tsconfigPath)), { noEmit: true });\n    const compilerHost = ts.createCompilerHost(tsConfigParsed.options, true);\n    return ts.createProgram(tsConfigParsed.fileNames, tsConfigParsed.options, compilerHost);\n}\nconst program = createProgram(TS_CONFIG_PATH);\nprogram.getTypeChecker();\nfor (const file of program.getSourceFiles()) {\n    if (!file || file.isDeclarationFile) {\n        continue;\n    }\n    const relativePath = path.relative(path.dirname(TS_CONFIG_PATH), file.fileName).replace(/\\\\/g, '/');\n    if (ignored.has(relativePath)) {\n        continue;\n    }\n    visit(file);\n}\nif (seenFiles.size) {\n    console.log();\n    console.log(`Found ${errorCount} error${errorCount === 1 ? '' : 's'} in ${seenFiles.size} file${seenFiles.size === 1 ? '' : 's'}.`);\n    process.exit(errorCount);\n}\nfunction visit(node) {\n    if (ts.isParameter(node) && ts.isParameterPropertyDeclaration(node, node.parent)) {\n        checkParameterPropertyDeclaration(node);\n    }\n    ts.forEachChild(node, visit);\n}\nfunction checkParameterPropertyDeclaration(param) {\n    const uses = [...collectReferences(param.name, [])];\n    if (!uses.length) {\n        return;\n    }\n    const sourceFile = param.getSourceFile();\n    if (!seenFiles.has(sourceFile)) {\n        if (seenFiles.size) {\n            console.log(``);\n        }\n        console.log(`${formatFileName(param)}:`);\n        seenFiles.add(sourceFile);\n    }\n    else {\n        console.log(``);\n    }\n    console.log(`  Parameter property '${param.name.getText()}' is used before its declaration.`);\n    for (const { stack, container } of uses) {\n        const use = stack[stack.length - 1];\n        console.log(`    at ${formatLocation(use)}: ${formatMember(container)} -> ${formatStack(stack)}`);\n        errorCount++;\n    }\n}\nfunction* collectReferences(node, stack, requiresInvocationDepth = 0, seen = new Set()) {\n    for (const use of findAllReferencesInClass(node)) {\n        const container = findContainer(use);\n        if (!container || seen.has(container) || ts.isConstructorDeclaration(container)) {\n            continue;\n        }\n        seen.add(container);\n        const nextStack = [...stack, use];\n        let nextRequiresInvocationDepth = requiresInvocationDepth;\n        if (isInvocation(use) && nextRequiresInvocationDepth > 0) {\n            nextRequiresInvocationDepth--;\n        }\n        if (ts.isPropertyDeclaration(container) && nextRequiresInvocationDepth === 0) {\n            yield { stack: nextStack, container };\n        }\n        else if (requiresInvocation(container)) {\n            nextRequiresInvocationDepth++;\n        }\n        yield* collectReferences(container.name ?? container, nextStack, nextRequiresInvocationDepth, seen);\n    }\n}\nfunction requiresInvocation(definition) {\n    return ts.isMethodDeclaration(definition) || ts.isFunctionDeclaration(definition) || ts.isFunctionExpression(definition) || ts.isArrowFunction(definition);\n}\nfunction isInvocation(use) {\n    let location = use;\n    if (ts.isPropertyAccessExpression(location.parent) && location.parent.name === location) {\n        location = location.parent;\n    }\n    else if (ts.isElementAccessExpression(location.parent) && location.parent.argumentExpression === location) {\n        location = location.parent;\n    }\n    return ts.isCallExpression(location.parent) && location.parent.expression === location\n        || ts.isTaggedTemplateExpression(location.parent) && location.parent.tag === location;\n}\nfunction formatFileName(node) {\n    const sourceFile = node.getSourceFile();\n    return path.resolve(sourceFile.fileName);\n}\nfunction formatLocation(node) {\n    const sourceFile = node.getSourceFile();\n    const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, node.pos);\n    return `${formatFileName(sourceFile)}(${line + 1},${character + 1})`;\n}\nfunction formatStack(stack) {\n    return stack.slice().reverse().map((use) => formatUse(use)).join(' -> ');\n}\nfunction formatMember(container) {\n    const name = container.name?.getText();\n    if (name) {\n        const className = findClass(container)?.name?.getText();\n        if (className) {\n            return `${className}.${name}`;\n        }\n        return name;\n    }\n    return '<unknown>';\n}\nfunction formatUse(use) {\n    let text = use.getText();\n    if (use.parent && ts.isPropertyAccessExpression(use.parent) && use.parent.name === use) {\n        if (use.parent.expression.kind === ts.SyntaxKind.ThisKeyword) {\n            text = `this.${text}`;\n        }\n        use = use.parent;\n    }\n    else if (use.parent && ts.isElementAccessExpression(use.parent) && use.parent.argumentExpression === use) {\n        if (use.parent.expression.kind === ts.SyntaxKind.ThisKeyword) {\n            text = `this['${text}']`;\n        }\n        use = use.parent;\n    }\n    if (ts.isCallExpression(use.parent)) {\n        text = `${text}(...)`;\n    }\n    return text;\n}\nfunction findContainer(node) {\n    return ts.findAncestor(node, ancestor => {\n        switch (ancestor.kind) {\n            case ts.SyntaxKind.PropertyDeclaration:\n            case ts.SyntaxKind.MethodDeclaration:\n            case ts.SyntaxKind.GetAccessor:\n            case ts.SyntaxKind.SetAccessor:\n            case ts.SyntaxKind.Constructor:\n            case ts.SyntaxKind.ClassStaticBlockDeclaration:\n            case ts.SyntaxKind.ArrowFunction:\n            case ts.SyntaxKind.FunctionExpression:\n            case ts.SyntaxKind.FunctionDeclaration:\n            case ts.SyntaxKind.Parameter:\n                return true;\n        }\n        return false;\n    });\n}\nfunction findClass(node) {\n    return ts.findAncestor(node, ts.isClassLike);\n}\nfunction* findAllReferencesInClass(node) {\n    const classDecl = findClass(node);\n    if (!classDecl) {\n        return [];\n    }\n    for (const ref of findAllReferences(node)) {\n        for (const entry of ref.references) {\n            if (entry.kind !== 1 /* EntryKind.Node */ || entry.node === node) {\n                continue;\n            }\n            if (findClass(entry.node) === classDecl) {\n                yield entry.node;\n            }\n        }\n    }\n}\n// NOTE: The following uses TypeScript internals and are subject to change from version to version.\nfunction findAllReferences(node) {\n    const sourceFile = node.getSourceFile();\n    const position = node.getStart();\n    const name = ts.getTouchingPropertyName(sourceFile, position);\n    const options = { use: ts.FindAllReferences.FindReferencesUse.References };\n    return ts.FindAllReferences.Core.getReferencedSymbolsForNode(position, name, program, [sourceFile], cancellationToken, options) ?? [];\n}\nvar DefinitionKind;\n(function (DefinitionKind) {\n    DefinitionKind[DefinitionKind[\"Symbol\"] = 0] = \"Symbol\";\n    DefinitionKind[DefinitionKind[\"Label\"] = 1] = \"Label\";\n    DefinitionKind[DefinitionKind[\"Keyword\"] = 2] = \"Keyword\";\n    DefinitionKind[DefinitionKind[\"This\"] = 3] = \"This\";\n    DefinitionKind[DefinitionKind[\"String\"] = 4] = \"String\";\n    DefinitionKind[DefinitionKind[\"TripleSlashReference\"] = 5] = \"TripleSlashReference\";\n})(DefinitionKind || (DefinitionKind = {}));\n/** @internal */\nvar EntryKind;\n(function (EntryKind) {\n    EntryKind[EntryKind[\"Span\"] = 0] = \"Span\";\n    EntryKind[EntryKind[\"Node\"] = 1] = \"Node\";\n    EntryKind[EntryKind[\"StringLiteral\"] = 2] = \"StringLiteral\";\n    EntryKind[EntryKind[\"SearchedLocalFoundProperty\"] = 3] = \"SearchedLocalFoundProperty\";\n    EntryKind[EntryKind[\"SearchedPropertyFoundLocal\"] = 4] = \"SearchedPropertyFoundLocal\";\n})(EntryKind || (exports.EntryKind = EntryKind = {}));\n//# sourceMappingURL=propertyInitOrderChecker.js.map"
  },
  {
    "path": "build/lib/propertyInitOrderChecker.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nimport * as ts from 'typescript';\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nconst TS_CONFIG_PATH = path.join(__dirname, '../../', 'src', 'tsconfig.json');\n\n//\n// #############################################################################################\n//\n// A custom typescript checker that ensure constructor properties are NOT used to initialize\n// defined properties. This is needed for the times when `useDefineForClassFields` is gone.\n//\n// see https://github.com/microsoft/vscode/issues/243049, https://github.com/microsoft/vscode/issues/186726,\n// https://github.com/microsoft/vscode/pull/241544\n//\n// #############################################################################################\n//\n\nconst ignored = new Set([\n\t'vs/base/common/arrays.ts',\n\t'vs/platform/extensionManagement/common/extensionsScannerService.ts',\n\t'vs/platform/configuration/common/configurations.ts',\n\t'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.ts',\n\t'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts',\n\t'vs/editor/common/model/textModelTokens.ts',\n\t'vs/editor/common/model/tokenizationTextModelPart.ts',\n\t'vs/editor/common/core/textEdit.ts',\n\t'vs/workbench/contrib/debug/common/debugStorage.ts',\n\t'vs/workbench/contrib/debug/common/debugModel.ts',\n\t'vs/workbench/api/common/extHostCommands.ts',\n\t'vs/editor/browser/view/viewLayer.ts',\n\t'vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.ts',\n\t'vs/platform/accessibilitySignal/browser/accessibilitySignalService.ts',\n\t'vs/editor/browser/widget/diffEditor/utils.ts',\n\t'vs/editor/browser/observableCodeEditor.ts',\n\t'vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.ts',\n\t'vs/editor/browser/widget/diffEditor/diffEditorOptions.ts',\n\t'vs/editor/browser/widget/diffEditor/components/diffEditorEditors.ts',\n\t'vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.ts',\n\t'vs/editor/browser/widget/diffEditor/components/diffEditorSash.ts',\n\t'vs/editor/browser/widget/diffEditor/utils/editorGutter.ts',\n\t'vs/editor/browser/widget/diffEditor/features/gutterFeature.ts',\n\t'vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.ts',\n\t'vs/editor/browser/widget/diffEditor/diffEditorWidget.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts',\n\t'vs/editor/contrib/inlayHints/browser/inlayHintsController.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/model/changeRecorder.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineCompletionsView.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsAccessibleView.ts',\n\t'vs/editor/contrib/placeholderText/browser/placeholderTextContribution.ts',\n\t'vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts',\n\t'vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts',\n\t'vs/workbench/contrib/files/browser/views/openEditorsView.ts',\n\t'vs/workbench/contrib/chat/browser/chatContentParts/chatAttachmentsContentPart.ts',\n\t'vs/workbench/contrib/chat/browser/contrib/chatImplicitContext.ts',\n\t'vs/workbench/contrib/chat/browser/chatInputPart.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/model/modifiedBaseRange.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/model/diffComputer.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/view/editors/codeEditorView.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/view/editors/inputCodeEditorView.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts',\n\t'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.ts',\n\t'vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditorInput.ts',\n\t'vs/platform/terminal/common/capabilities/commandDetectionCapability.ts',\n\t'vs/workbench/contrib/testing/common/testExclusions.ts',\n\t'vs/workbench/contrib/testing/common/testResultStorage.ts',\n\t'vs/workbench/services/userDataProfile/browser/snippetsResource.ts',\n\t'vs/platform/quickinput/browser/quickInputController.ts',\n\t'vs/platform/userDataSync/common/abstractSynchronizer.ts',\n\t'vs/workbench/services/authentication/browser/authenticationExtensionsService.ts',\n\t'vs/workbench/services/textMate/browser/backgroundTokenization/textMateWorkerTokenizerController.ts',\n\t'vs/workbench/services/textMate/browser/textMateTokenizationFeatureImpl.ts',\n\t'vs/workbench/contrib/notebook/browser/services/notebookServiceImpl.ts',\n\t'vs/workbench/contrib/notebook/browser/contrib/multicursor/notebookMulticursor.ts',\n\t'vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.ts',\n\t'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts',\n\t'vs/workbench/contrib/notebook/browser/diff/notebookMultiDiffEditor.ts',\n\t'vs/workbench/contrib/chat/common/promptSyntax/contentProviders/textModelContentsProvider.ts',\n\t'vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.ts',\n\t'vs/workbench/contrib/search/common/cacheState.ts',\n\t'vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts',\n\t'vs/workbench/contrib/search/browser/anythingQuickAccess.ts',\n\t'vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts',\n\t'vs/workbench/contrib/testing/browser/testResultsView/testResultsOutput.ts',\n\t'vs/workbench/contrib/testing/common/testExplorerFilterState.ts',\n\t'vs/workbench/contrib/testing/browser/testResultsView/testResultsTree.ts',\n\t'vs/workbench/contrib/testing/browser/testingOutputPeek.ts',\n\t'vs/workbench/contrib/testing/browser/explorerProjections/index.ts',\n\t'vs/workbench/contrib/testing/browser/testingExplorerFilter.ts',\n\t'vs/workbench/contrib/testing/browser/testingExplorerView.ts',\n\t'vs/workbench/contrib/testing/common/testServiceImpl.ts',\n\t'vs/platform/quickinput/browser/commandsQuickAccess.ts',\n\t'vs/workbench/contrib/quickaccess/browser/commandsQuickAccess.ts',\n\t'vs/workbench/contrib/multiDiffEditor/browser/scmMultiDiffSourceResolver.ts',\n\t'vs/workbench/contrib/debug/browser/debugMemory.ts',\n\t'vs/workbench/contrib/markers/browser/markersViewActions.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/view/viewZones.ts',\n\t'vs/workbench/contrib/mergeEditor/browser/view/mergeEditor.ts',\n\t'vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts',\n\t'vs/workbench/contrib/output/browser/outputServices.ts',\n\t'vs/workbench/contrib/terminalContrib/typeAhead/browser/terminalTypeAheadAddon.ts',\n\t'vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts',\n\t'vs/workbench/contrib/editSessions/browser/editSessionsStorageService.ts',\n\t'vs/workbench/contrib/accessibilitySignals/browser/editorTextPropertySignalsContribution.ts',\n\t'vs/workbench/contrib/inlineCompletions/browser/inlineCompletionLanguageStatusBarContribution.ts',\n\t'vs/workbench/services/extensionManagement/common/webExtensionManagementService.ts',\n\t'vs/workbench/contrib/welcomeDialog/browser/welcomeWidget.ts',\n\t'vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts',\n\t'vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordInsertView.ts',\n\t'vs/platform/terminal/node/ptyService.ts',\n\t'vs/workbench/api/common/extHostLanguageFeatures.ts',\n\t'vs/workbench/api/common/extHostSearch.ts',\n\t'vs/workbench/contrib/testing/test/common/testStubs.ts'\n]);\n\n\nconst cancellationToken: ts.CancellationToken = {\n\tisCancellationRequested: () => false,\n\tthrowIfCancellationRequested: () => { },\n};\n\nconst seenFiles = new Set<ts.SourceFile>();\nlet errorCount = 0;\n\n\n\nfunction createProgram(tsconfigPath: string): ts.Program {\n\tconst tsConfig = ts.readConfigFile(tsconfigPath, ts.sys.readFile);\n\n\tconst configHostParser: ts.ParseConfigHost = { fileExists: fs.existsSync, readDirectory: ts.sys.readDirectory, readFile: file => fs.readFileSync(file, 'utf8'), useCaseSensitiveFileNames: process.platform === 'linux' };\n\tconst tsConfigParsed = ts.parseJsonConfigFileContent(tsConfig.config, configHostParser, path.resolve(path.dirname(tsconfigPath)), { noEmit: true });\n\n\tconst compilerHost = ts.createCompilerHost(tsConfigParsed.options, true);\n\n\treturn ts.createProgram(tsConfigParsed.fileNames, tsConfigParsed.options, compilerHost);\n}\n\nconst program = createProgram(TS_CONFIG_PATH);\n\nprogram.getTypeChecker();\n\nfor (const file of program.getSourceFiles()) {\n\tif (!file || file.isDeclarationFile) {\n\t\tcontinue;\n\t}\n\n\tconst relativePath = path.relative(path.dirname(TS_CONFIG_PATH), file.fileName).replace(/\\\\/g, '/');\n\tif (ignored.has(relativePath)) {\n\t\tcontinue;\n\t}\n\n\tvisit(file);\n}\n\nif (seenFiles.size) {\n\tconsole.log();\n\tconsole.log(`Found ${errorCount} error${errorCount === 1 ? '' : 's'} in ${seenFiles.size} file${seenFiles.size === 1 ? '' : 's'}.`);\n\tprocess.exit(errorCount);\n}\n\nfunction visit(node: ts.Node) {\n\tif (ts.isParameter(node) && ts.isParameterPropertyDeclaration(node, node.parent)) {\n\t\tcheckParameterPropertyDeclaration(node);\n\t}\n\n\tts.forEachChild(node, visit);\n}\n\nfunction checkParameterPropertyDeclaration(param: ts.ParameterPropertyDeclaration) {\n\tconst uses = [...collectReferences(param.name, [])];\n\tif (!uses.length) {\n\t\treturn;\n\t}\n\n\tconst sourceFile = param.getSourceFile();\n\tif (!seenFiles.has(sourceFile)) {\n\t\tif (seenFiles.size) {\n\t\t\tconsole.log(``);\n\t\t}\n\t\tconsole.log(`${formatFileName(param)}:`);\n\t\tseenFiles.add(sourceFile);\n\t} else {\n\t\tconsole.log(``);\n\t}\n\tconsole.log(`  Parameter property '${param.name.getText()}' is used before its declaration.`);\n\tfor (const { stack, container } of uses) {\n\t\tconst use = stack[stack.length - 1];\n\t\tconsole.log(`    at ${formatLocation(use)}: ${formatMember(container)} -> ${formatStack(stack)}`);\n\t\terrorCount++;\n\t}\n}\n\ninterface InvalidUse {\n\tstack: ts.Node[];\n\tcontainer: ReferenceContainer;\n}\n\nfunction* collectReferences(node: ts.Node, stack: ts.Node[], requiresInvocationDepth: number = 0, seen = new Set<ReferenceContainer>()): Generator<InvalidUse> {\n\tfor (const use of findAllReferencesInClass(node)) {\n\t\tconst container = findContainer(use);\n\t\tif (!container || seen.has(container) || ts.isConstructorDeclaration(container)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(container);\n\n\t\tconst nextStack = [...stack, use];\n\n\t\tlet nextRequiresInvocationDepth = requiresInvocationDepth;\n\t\tif (isInvocation(use) && nextRequiresInvocationDepth > 0) {\n\t\t\tnextRequiresInvocationDepth--;\n\t\t}\n\n\t\tif (ts.isPropertyDeclaration(container) && nextRequiresInvocationDepth === 0) {\n\t\t\tyield { stack: nextStack, container };\n\t\t}\n\t\telse if (requiresInvocation(container)) {\n\t\t\tnextRequiresInvocationDepth++;\n\t\t}\n\n\t\tyield* collectReferences(container.name ?? container, nextStack, nextRequiresInvocationDepth, seen);\n\t}\n}\n\nfunction requiresInvocation(definition: ReferenceContainer): boolean {\n\treturn ts.isMethodDeclaration(definition) || ts.isFunctionDeclaration(definition) || ts.isFunctionExpression(definition) || ts.isArrowFunction(definition);\n}\n\nfunction isInvocation(use: ts.Node): boolean {\n\tlet location = use;\n\tif (ts.isPropertyAccessExpression(location.parent) && location.parent.name === location) {\n\t\tlocation = location.parent;\n\t}\n\telse if (ts.isElementAccessExpression(location.parent) && location.parent.argumentExpression === location) {\n\t\tlocation = location.parent;\n\t}\n\treturn ts.isCallExpression(location.parent) && location.parent.expression === location\n\t\t|| ts.isTaggedTemplateExpression(location.parent) && location.parent.tag === location;\n}\n\nfunction formatFileName(node: ts.Node): string {\n\tconst sourceFile = node.getSourceFile();\n\treturn path.resolve(sourceFile.fileName);\n}\n\nfunction formatLocation(node: ts.Node): string {\n\tconst sourceFile = node.getSourceFile();\n\tconst { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, node.pos);\n\treturn `${formatFileName(sourceFile)}(${line + 1},${character + 1})`;\n}\n\nfunction formatStack(stack: ts.Node[]): string {\n\treturn stack.slice().reverse().map((use) => formatUse(use)).join(' -> ');\n}\n\nfunction formatMember(container: ReferenceContainer): string {\n\tconst name = container.name?.getText();\n\tif (name) {\n\t\tconst className = findClass(container)?.name?.getText();\n\t\tif (className) {\n\t\t\treturn `${className}.${name}`;\n\t\t}\n\t\treturn name;\n\t}\n\treturn '<unknown>';\n}\n\nfunction formatUse(use: ts.Node): string {\n\tlet text = use.getText();\n\tif (use.parent && ts.isPropertyAccessExpression(use.parent) && use.parent.name === use) {\n\t\tif (use.parent.expression.kind === ts.SyntaxKind.ThisKeyword) {\n\t\t\ttext = `this.${text}`;\n\t\t}\n\t\tuse = use.parent;\n\t}\n\telse if (use.parent && ts.isElementAccessExpression(use.parent) && use.parent.argumentExpression === use) {\n\t\tif (use.parent.expression.kind === ts.SyntaxKind.ThisKeyword) {\n\t\t\ttext = `this['${text}']`;\n\t\t}\n\t\tuse = use.parent;\n\t}\n\tif (ts.isCallExpression(use.parent)) {\n\t\ttext = `${text}(...)`;\n\t}\n\treturn text;\n}\n\ntype ReferenceContainer =\n\t| ts.PropertyDeclaration\n\t| ts.MethodDeclaration\n\t| ts.GetAccessorDeclaration\n\t| ts.SetAccessorDeclaration\n\t| ts.ConstructorDeclaration\n\t| ts.ClassStaticBlockDeclaration\n\t| ts.ArrowFunction\n\t| ts.FunctionExpression\n\t| ts.FunctionDeclaration\n\t| ts.ParameterDeclaration;\n\nfunction findContainer(node: ts.Node): ReferenceContainer | undefined {\n\treturn ts.findAncestor(node, ancestor => {\n\t\tswitch (ancestor.kind) {\n\t\t\tcase ts.SyntaxKind.PropertyDeclaration:\n\t\t\tcase ts.SyntaxKind.MethodDeclaration:\n\t\t\tcase ts.SyntaxKind.GetAccessor:\n\t\t\tcase ts.SyntaxKind.SetAccessor:\n\t\t\tcase ts.SyntaxKind.Constructor:\n\t\t\tcase ts.SyntaxKind.ClassStaticBlockDeclaration:\n\t\t\tcase ts.SyntaxKind.ArrowFunction:\n\t\t\tcase ts.SyntaxKind.FunctionExpression:\n\t\t\tcase ts.SyntaxKind.FunctionDeclaration:\n\t\t\tcase ts.SyntaxKind.Parameter:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}) as ReferenceContainer | undefined;\n}\n\nfunction findClass(node: ts.Node): ts.ClassLikeDeclaration | undefined {\n\treturn ts.findAncestor(node, ts.isClassLike);\n}\n\nfunction* findAllReferencesInClass(node: ts.Node): Generator<ts.Node> {\n\tconst classDecl = findClass(node);\n\tif (!classDecl) {\n\t\treturn [];\n\t}\n\tfor (const ref of findAllReferences(node)) {\n\t\tfor (const entry of ref.references) {\n\t\t\tif (entry.kind !== EntryKind.Node || entry.node === node) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (findClass(entry.node) === classDecl) {\n\t\t\t\tyield entry.node;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// NOTE: The following uses TypeScript internals and are subject to change from version to version.\n\nfunction findAllReferences(node: ts.Node): readonly SymbolAndEntries[] {\n\tconst sourceFile = node.getSourceFile();\n\tconst position = node.getStart();\n\tconst name: ts.Node = (ts as any).getTouchingPropertyName(sourceFile, position);\n\tconst options = { use: (ts as any).FindAllReferences.FindReferencesUse.References };\n\treturn (ts as any).FindAllReferences.Core.getReferencedSymbolsForNode(position, name, program, [sourceFile], cancellationToken, options) ?? [];\n}\n\ninterface SymbolAndEntries {\n\treadonly definition: Definition | undefined;\n\treadonly references: readonly Entry[];\n}\n\nconst enum DefinitionKind {\n\tSymbol,\n\tLabel,\n\tKeyword,\n\tThis,\n\tString,\n\tTripleSlashReference,\n}\n\ntype Definition =\n\t| { readonly type: DefinitionKind.Symbol; readonly symbol: ts.Symbol }\n\t| { readonly type: DefinitionKind.Label; readonly node: ts.Identifier }\n\t| { readonly type: DefinitionKind.Keyword; readonly node: ts.Node }\n\t| { readonly type: DefinitionKind.This; readonly node: ts.Node }\n\t| { readonly type: DefinitionKind.String; readonly node: ts.StringLiteralLike }\n\t| { readonly type: DefinitionKind.TripleSlashReference; readonly reference: ts.FileReference; readonly file: ts.SourceFile };\n\n/** @internal */\nexport const enum EntryKind {\n\tSpan,\n\tNode,\n\tStringLiteral,\n\tSearchedLocalFoundProperty,\n\tSearchedPropertyFoundLocal,\n}\ntype NodeEntryKind = EntryKind.Node | EntryKind.StringLiteral | EntryKind.SearchedLocalFoundProperty | EntryKind.SearchedPropertyFoundLocal;\ntype Entry = NodeEntry | SpanEntry;\ninterface ContextWithStartAndEndNode {\n\tstart: ts.Node;\n\tend: ts.Node;\n}\ntype ContextNode = ts.Node | ContextWithStartAndEndNode;\ninterface NodeEntry {\n\treadonly kind: NodeEntryKind;\n\treadonly node: ts.Node;\n\treadonly context?: ContextNode;\n}\ninterface SpanEntry {\n\treadonly kind: EntryKind.Span;\n\treadonly fileName: string;\n\treadonly textSpan: ts.TextSpan;\n}\n"
  },
  {
    "path": "build/lib/reporter.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createReporter = createReporter;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nclass ErrorLog {\n    id;\n    constructor(id) {\n        this.id = id;\n    }\n    allErrors = [];\n    startTime = null;\n    count = 0;\n    onStart() {\n        if (this.count++ > 0) {\n            return;\n        }\n        this.startTime = new Date().getTime();\n        (0, fancy_log_1.default)(`Starting ${ansi_colors_1.default.green('compilation')}${this.id ? ansi_colors_1.default.blue(` ${this.id}`) : ''}...`);\n    }\n    onEnd() {\n        if (--this.count > 0) {\n            return;\n        }\n        this.log();\n    }\n    log() {\n        const errors = this.allErrors.flat();\n        const seen = new Set();\n        errors.map(err => {\n            if (!seen.has(err)) {\n                seen.add(err);\n                (0, fancy_log_1.default)(`${ansi_colors_1.default.red('Error')}: ${err}`);\n            }\n        });\n        (0, fancy_log_1.default)(`Finished ${ansi_colors_1.default.green('compilation')}${this.id ? ansi_colors_1.default.blue(` ${this.id}`) : ''} with ${errors.length} errors after ${ansi_colors_1.default.magenta((new Date().getTime() - this.startTime) + ' ms')}`);\n        const regex = /^([^(]+)\\((\\d+),(\\d+)\\): (.*)$/s;\n        const messages = errors\n            .map(err => regex.exec(err))\n            .filter(match => !!match)\n            .map(x => x)\n            .map(([, path, line, column, message]) => ({ path, line: parseInt(line), column: parseInt(column), message }));\n        try {\n            const logFileName = 'log' + (this.id ? `_${this.id}` : '');\n            fs_1.default.writeFileSync(path_1.default.join(buildLogFolder, logFileName), JSON.stringify(messages));\n        }\n        catch (err) {\n            //noop\n        }\n    }\n}\nconst errorLogsById = new Map();\nfunction getErrorLog(id = '') {\n    let errorLog = errorLogsById.get(id);\n    if (!errorLog) {\n        errorLog = new ErrorLog(id);\n        errorLogsById.set(id, errorLog);\n    }\n    return errorLog;\n}\nconst buildLogFolder = path_1.default.join(path_1.default.dirname(path_1.default.dirname(__dirname)), '.build');\ntry {\n    fs_1.default.mkdirSync(buildLogFolder);\n}\ncatch (err) {\n    // ignore\n}\nfunction createReporter(id) {\n    const errorLog = getErrorLog(id);\n    const errors = [];\n    errorLog.allErrors.push(errors);\n    const result = (err) => errors.push(err);\n    result.hasErrors = () => errors.length > 0;\n    result.end = (emitError) => {\n        errors.length = 0;\n        errorLog.onStart();\n        return event_stream_1.default.through(undefined, function () {\n            errorLog.onEnd();\n            if (emitError && errors.length > 0) {\n                if (!errors.__logged__) {\n                    errorLog.log();\n                }\n                errors.__logged__ = true;\n                const err = new Error(`Found ${errors.length} errors`);\n                err.__reporter__ = true;\n                this.emit('error', err);\n            }\n            else {\n                this.emit('end');\n            }\n        });\n    };\n    return result;\n}\n//# sourceMappingURL=reporter.js.map"
  },
  {
    "path": "build/lib/reporter.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\nimport fs from 'fs';\nimport path from 'path';\n\nclass ErrorLog {\n\tconstructor(public id: string) {\n\t}\n\tallErrors: string[][] = [];\n\tstartTime: number | null = null;\n\tcount = 0;\n\n\tonStart(): void {\n\t\tif (this.count++ > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.startTime = new Date().getTime();\n\t\tfancyLog(`Starting ${ansiColors.green('compilation')}${this.id ? ansiColors.blue(` ${this.id}`) : ''}...`);\n\t}\n\n\tonEnd(): void {\n\t\tif (--this.count > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.log();\n\t}\n\n\tlog(): void {\n\t\tconst errors = this.allErrors.flat();\n\t\tconst seen = new Set<string>();\n\n\t\terrors.map(err => {\n\t\t\tif (!seen.has(err)) {\n\t\t\t\tseen.add(err);\n\t\t\t\tfancyLog(`${ansiColors.red('Error')}: ${err}`);\n\t\t\t}\n\t\t});\n\n\t\tfancyLog(`Finished ${ansiColors.green('compilation')}${this.id ? ansiColors.blue(` ${this.id}`) : ''} with ${errors.length} errors after ${ansiColors.magenta((new Date().getTime() - this.startTime!) + ' ms')}`);\n\n\t\tconst regex = /^([^(]+)\\((\\d+),(\\d+)\\): (.*)$/s;\n\t\tconst messages = errors\n\t\t\t.map(err => regex.exec(err))\n\t\t\t.filter(match => !!match)\n\t\t\t.map(x => x as string[])\n\t\t\t.map(([, path, line, column, message]) => ({ path, line: parseInt(line), column: parseInt(column), message }));\n\n\t\ttry {\n\t\t\tconst logFileName = 'log' + (this.id ? `_${this.id}` : '');\n\t\t\tfs.writeFileSync(path.join(buildLogFolder, logFileName), JSON.stringify(messages));\n\t\t} catch (err) {\n\t\t\t//noop\n\t\t}\n\t}\n\n}\n\nconst errorLogsById = new Map<string, ErrorLog>();\nfunction getErrorLog(id: string = '') {\n\tlet errorLog = errorLogsById.get(id);\n\tif (!errorLog) {\n\t\terrorLog = new ErrorLog(id);\n\t\terrorLogsById.set(id, errorLog);\n\t}\n\treturn errorLog;\n}\n\nconst buildLogFolder = path.join(path.dirname(path.dirname(__dirname)), '.build');\n\ntry {\n\tfs.mkdirSync(buildLogFolder);\n} catch (err) {\n\t// ignore\n}\n\nexport interface IReporter {\n\t(err: string): void;\n\thasErrors(): boolean;\n\tend(emitError: boolean): NodeJS.ReadWriteStream;\n}\n\nexport function createReporter(id?: string): IReporter {\n\tconst errorLog = getErrorLog(id);\n\n\tconst errors: string[] = [];\n\terrorLog.allErrors.push(errors);\n\n\tconst result = (err: string) => errors.push(err);\n\n\tresult.hasErrors = () => errors.length > 0;\n\n\tresult.end = (emitError: boolean): NodeJS.ReadWriteStream => {\n\t\terrors.length = 0;\n\t\terrorLog.onStart();\n\n\t\treturn es.through(undefined, function () {\n\t\t\terrorLog.onEnd();\n\n\t\t\tif (emitError && errors.length > 0) {\n\t\t\t\tif (!(errors as any).__logged__) {\n\t\t\t\t\terrorLog.log();\n\t\t\t\t}\n\n\t\t\t\t(errors as any).__logged__ = true;\n\n\t\t\t\tconst err = new Error(`Found ${errors.length} errors`);\n\t\t\t\t(err as any).__reporter__ = true;\n\t\t\t\tthis.emit('error', err);\n\t\t\t} else {\n\t\t\t\tthis.emit('end');\n\t\t\t}\n\t\t});\n\t};\n\n\treturn result;\n}\n"
  },
  {
    "path": "build/lib/snapshotLoader.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.snaps = void 0;\nvar snaps;\n(function (snaps) {\n    const fs = require('fs');\n    const path = require('path');\n    const os = require('os');\n    const cp = require('child_process');\n    const mksnapshot = path.join(__dirname, `../../node_modules/.bin/${process.platform === 'win32' ? 'mksnapshot.cmd' : 'mksnapshot'}`);\n    const product = require('../../product.json');\n    const arch = (process.argv.join('').match(/--arch=(.*)/) || [])[1];\n    //\n    let loaderFilepath;\n    let startupBlobFilepath;\n    switch (process.platform) {\n        case 'darwin':\n            loaderFilepath = `VSCode-darwin/${product.nameLong}.app/Contents/Resources/app/out/vs/loader.js`;\n            startupBlobFilepath = `VSCode-darwin/${product.nameLong}.app/Contents/Frameworks/Electron Framework.framework/Resources/snapshot_blob.bin`;\n            break;\n        case 'win32':\n        case 'linux':\n            loaderFilepath = `VSCode-${process.platform}-${arch}/resources/app/out/vs/loader.js`;\n            startupBlobFilepath = `VSCode-${process.platform}-${arch}/snapshot_blob.bin`;\n            break;\n        default:\n            throw new Error('Unknown platform');\n    }\n    loaderFilepath = path.join(__dirname, '../../../', loaderFilepath);\n    startupBlobFilepath = path.join(__dirname, '../../../', startupBlobFilepath);\n    snapshotLoader(loaderFilepath, startupBlobFilepath);\n    function snapshotLoader(loaderFilepath, startupBlobFilepath) {\n        const inputFile = fs.readFileSync(loaderFilepath);\n        const wrappedInputFile = `\n\t\tvar Monaco_Loader_Init;\n\t\t(function() {\n\t\t\tvar doNotInitLoader = true;\n\t\t\t${inputFile.toString()};\n\t\t\tMonaco_Loader_Init = function() {\n\t\t\t\tAMDLoader.init();\n\t\t\t\tCSSLoaderPlugin.init();\n\t\t\t\tNLSLoaderPlugin.init();\n\n\t\t\t\treturn { define, require };\n\t\t\t}\n\t\t})();\n\t\t`;\n        const wrappedInputFilepath = path.join(os.tmpdir(), 'wrapped-loader.js');\n        console.log(wrappedInputFilepath);\n        fs.writeFileSync(wrappedInputFilepath, wrappedInputFile);\n        cp.execFileSync(mksnapshot, [wrappedInputFilepath, `--startup_blob`, startupBlobFilepath]);\n    }\n})(snaps || (exports.snaps = snaps = {}));\n//# sourceMappingURL=snapshotLoader.js.map"
  },
  {
    "path": "build/lib/snapshotLoader.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport namespace snaps {\n\n\tconst fs = require('fs');\n\tconst path = require('path');\n\tconst os = require('os');\n\tconst cp = require('child_process');\n\n\tconst mksnapshot = path.join(__dirname, `../../node_modules/.bin/${process.platform === 'win32' ? 'mksnapshot.cmd' : 'mksnapshot'}`);\n\tconst product = require('../../product.json');\n\tconst arch = (process.argv.join('').match(/--arch=(.*)/) || [])[1];\n\n\t//\n\tlet loaderFilepath: string;\n\tlet startupBlobFilepath: string;\n\n\tswitch (process.platform) {\n\t\tcase 'darwin':\n\t\t\tloaderFilepath = `VSCode-darwin/${product.nameLong}.app/Contents/Resources/app/out/vs/loader.js`;\n\t\t\tstartupBlobFilepath = `VSCode-darwin/${product.nameLong}.app/Contents/Frameworks/Electron Framework.framework/Resources/snapshot_blob.bin`;\n\t\t\tbreak;\n\n\t\tcase 'win32':\n\t\tcase 'linux':\n\t\t\tloaderFilepath = `VSCode-${process.platform}-${arch}/resources/app/out/vs/loader.js`;\n\t\t\tstartupBlobFilepath = `VSCode-${process.platform}-${arch}/snapshot_blob.bin`;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error('Unknown platform');\n\t}\n\n\tloaderFilepath = path.join(__dirname, '../../../', loaderFilepath);\n\tstartupBlobFilepath = path.join(__dirname, '../../../', startupBlobFilepath);\n\n\tsnapshotLoader(loaderFilepath, startupBlobFilepath);\n\n\tfunction snapshotLoader(loaderFilepath: string, startupBlobFilepath: string): void {\n\n\t\tconst inputFile = fs.readFileSync(loaderFilepath);\n\t\tconst wrappedInputFile = `\n\t\tvar Monaco_Loader_Init;\n\t\t(function() {\n\t\t\tvar doNotInitLoader = true;\n\t\t\t${inputFile.toString()};\n\t\t\tMonaco_Loader_Init = function() {\n\t\t\t\tAMDLoader.init();\n\t\t\t\tCSSLoaderPlugin.init();\n\t\t\t\tNLSLoaderPlugin.init();\n\n\t\t\t\treturn { define, require };\n\t\t\t}\n\t\t})();\n\t\t`;\n\t\tconst wrappedInputFilepath = path.join(os.tmpdir(), 'wrapped-loader.js');\n\t\tconsole.log(wrappedInputFilepath);\n\t\tfs.writeFileSync(wrappedInputFilepath, wrappedInputFile);\n\n\t\tcp.execFileSync(mksnapshot, [wrappedInputFilepath, `--startup_blob`, startupBlobFilepath]);\n\t}\n}\n"
  },
  {
    "path": "build/lib/standalone.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extractEditor = extractEditor;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst tss = __importStar(require(\"./treeshaking\"));\nconst REPO_ROOT = path_1.default.join(__dirname, '../../');\nconst SRC_DIR = path_1.default.join(REPO_ROOT, 'src');\nconst dirCache = {};\nfunction writeFile(filePath, contents) {\n    function ensureDirs(dirPath) {\n        if (dirCache[dirPath]) {\n            return;\n        }\n        dirCache[dirPath] = true;\n        ensureDirs(path_1.default.dirname(dirPath));\n        if (fs_1.default.existsSync(dirPath)) {\n            return;\n        }\n        fs_1.default.mkdirSync(dirPath);\n    }\n    ensureDirs(path_1.default.dirname(filePath));\n    fs_1.default.writeFileSync(filePath, contents);\n}\nfunction extractEditor(options) {\n    const ts = require('typescript');\n    const tsConfig = JSON.parse(fs_1.default.readFileSync(path_1.default.join(options.sourcesRoot, 'tsconfig.monaco.json')).toString());\n    let compilerOptions;\n    if (tsConfig.extends) {\n        compilerOptions = Object.assign({}, require(path_1.default.join(options.sourcesRoot, tsConfig.extends)).compilerOptions, tsConfig.compilerOptions);\n        delete tsConfig.extends;\n    }\n    else {\n        compilerOptions = tsConfig.compilerOptions;\n    }\n    tsConfig.compilerOptions = compilerOptions;\n    tsConfig.compilerOptions.sourceMap = true;\n    tsConfig.compilerOptions.module = 'es2022';\n    tsConfig.compilerOptions.outDir = options.tsOutDir;\n    compilerOptions.noEmit = false;\n    compilerOptions.noUnusedLocals = false;\n    compilerOptions.preserveConstEnums = false;\n    compilerOptions.declaration = false;\n    compilerOptions.moduleResolution = ts.ModuleResolutionKind.Classic;\n    options.compilerOptions = compilerOptions;\n    console.log(`Running tree shaker with shakeLevel ${tss.toStringShakeLevel(options.shakeLevel)}`);\n    // Take the extra included .d.ts files from `tsconfig.monaco.json`\n    options.typings = tsConfig.include.filter(includedFile => /\\.d\\.ts$/.test(includedFile));\n    // Add extra .d.ts files from `node_modules/@types/`\n    if (Array.isArray(options.compilerOptions?.types)) {\n        options.compilerOptions.types.forEach((type) => {\n            if (type === '@webgpu/types') {\n                options.typings.push(`../node_modules/${type}/dist/index.d.ts`);\n            }\n            else {\n                options.typings.push(`../node_modules/@types/${type}/index.d.ts`);\n            }\n        });\n    }\n    const result = tss.shake(options);\n    for (const fileName in result) {\n        if (result.hasOwnProperty(fileName)) {\n            writeFile(path_1.default.join(options.destRoot, fileName), result[fileName]);\n        }\n    }\n    const copied = {};\n    const copyFile = (fileName) => {\n        if (copied[fileName]) {\n            return;\n        }\n        copied[fileName] = true;\n        const srcPath = path_1.default.join(options.sourcesRoot, fileName);\n        const dstPath = path_1.default.join(options.destRoot, fileName);\n        writeFile(dstPath, fs_1.default.readFileSync(srcPath));\n    };\n    const writeOutputFile = (fileName, contents) => {\n        writeFile(path_1.default.join(options.destRoot, fileName), contents);\n    };\n    for (const fileName in result) {\n        if (result.hasOwnProperty(fileName)) {\n            const fileContents = result[fileName];\n            const info = ts.preProcessFile(fileContents);\n            for (let i = info.importedFiles.length - 1; i >= 0; i--) {\n                const importedFileName = info.importedFiles[i].fileName;\n                let importedFilePath = importedFileName;\n                if (/(^\\.\\/)|(^\\.\\.\\/)/.test(importedFilePath)) {\n                    importedFilePath = path_1.default.join(path_1.default.dirname(fileName), importedFilePath);\n                }\n                if (/\\.css$/.test(importedFilePath)) {\n                    transportCSS(importedFilePath, copyFile, writeOutputFile);\n                }\n                else {\n                    const pathToCopy = path_1.default.join(options.sourcesRoot, importedFilePath);\n                    if (fs_1.default.existsSync(pathToCopy) && !fs_1.default.statSync(pathToCopy).isDirectory()) {\n                        copyFile(importedFilePath);\n                    }\n                }\n            }\n        }\n    }\n    delete tsConfig.compilerOptions.moduleResolution;\n    writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\\t'));\n    [\n        'vs/loader.js'\n    ].forEach(copyFile);\n}\nfunction transportCSS(module, enqueue, write) {\n    if (!/\\.css/.test(module)) {\n        return false;\n    }\n    const filename = path_1.default.join(SRC_DIR, module);\n    const fileContents = fs_1.default.readFileSync(filename).toString();\n    const inlineResources = 'base64'; // see https://github.com/microsoft/monaco-editor/issues/148\n    const newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64');\n    write(module, newContents);\n    return true;\n    function _rewriteOrInlineUrls(contents, forceBase64) {\n        return _replaceURL(contents, (url) => {\n            const fontMatch = url.match(/^(.*).ttf\\?(.*)$/);\n            if (fontMatch) {\n                const relativeFontPath = `${fontMatch[1]}.ttf`; // trim the query parameter\n                const fontPath = path_1.default.join(path_1.default.dirname(module), relativeFontPath);\n                enqueue(fontPath);\n                return relativeFontPath;\n            }\n            const imagePath = path_1.default.join(path_1.default.dirname(module), url);\n            const fileContents = fs_1.default.readFileSync(path_1.default.join(SRC_DIR, imagePath));\n            const MIME = /\\.svg$/.test(url) ? 'image/svg+xml' : 'image/png';\n            let DATA = ';base64,' + fileContents.toString('base64');\n            if (!forceBase64 && /\\.svg$/.test(url)) {\n                // .svg => url encode as explained at https://codepen.io/tigt/post/optimizing-svgs-in-data-uris\n                const newText = fileContents.toString()\n                    .replace(/\"/g, '\\'')\n                    .replace(/</g, '%3C')\n                    .replace(/>/g, '%3E')\n                    .replace(/&/g, '%26')\n                    .replace(/#/g, '%23')\n                    .replace(/\\s+/g, ' ');\n                const encodedData = ',' + newText;\n                if (encodedData.length < DATA.length) {\n                    DATA = encodedData;\n                }\n            }\n            return '\"data:' + MIME + DATA + '\"';\n        });\n    }\n    function _replaceURL(contents, replacer) {\n        // Use \")\" as the terminator as quotes are oftentimes not used at all\n        return contents.replace(/url\\(\\s*([^\\)]+)\\s*\\)?/g, (_, ...matches) => {\n            let url = matches[0];\n            // Eliminate starting quotes (the initial whitespace is not captured)\n            if (url.charAt(0) === '\"' || url.charAt(0) === '\\'') {\n                url = url.substring(1);\n            }\n            // The ending whitespace is captured\n            while (url.length > 0 && (url.charAt(url.length - 1) === ' ' || url.charAt(url.length - 1) === '\\t')) {\n                url = url.substring(0, url.length - 1);\n            }\n            // Eliminate ending quotes\n            if (url.charAt(url.length - 1) === '\"' || url.charAt(url.length - 1) === '\\'') {\n                url = url.substring(0, url.length - 1);\n            }\n            if (!_startsWith(url, 'data:') && !_startsWith(url, 'http://') && !_startsWith(url, 'https://')) {\n                url = replacer(url);\n            }\n            return 'url(' + url + ')';\n        });\n    }\n    function _startsWith(haystack, needle) {\n        return haystack.length >= needle.length && haystack.substr(0, needle.length) === needle;\n    }\n}\n//# sourceMappingURL=standalone.js.map"
  },
  {
    "path": "build/lib/standalone.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport * as tss from './treeshaking';\n\nconst REPO_ROOT = path.join(__dirname, '../../');\nconst SRC_DIR = path.join(REPO_ROOT, 'src');\n\nconst dirCache: { [dir: string]: boolean } = {};\n\nfunction writeFile(filePath: string, contents: Buffer | string): void {\n\tfunction ensureDirs(dirPath: string): void {\n\t\tif (dirCache[dirPath]) {\n\t\t\treturn;\n\t\t}\n\t\tdirCache[dirPath] = true;\n\n\t\tensureDirs(path.dirname(dirPath));\n\t\tif (fs.existsSync(dirPath)) {\n\t\t\treturn;\n\t\t}\n\t\tfs.mkdirSync(dirPath);\n\t}\n\tensureDirs(path.dirname(filePath));\n\tfs.writeFileSync(filePath, contents);\n}\n\nexport function extractEditor(options: tss.ITreeShakingOptions & { destRoot: string; tsOutDir: string }): void {\n\tconst ts = require('typescript') as typeof import('typescript');\n\n\tconst tsConfig = JSON.parse(fs.readFileSync(path.join(options.sourcesRoot, 'tsconfig.monaco.json')).toString());\n\tlet compilerOptions: { [key: string]: any };\n\tif (tsConfig.extends) {\n\t\tcompilerOptions = Object.assign({}, require(path.join(options.sourcesRoot, tsConfig.extends)).compilerOptions, tsConfig.compilerOptions);\n\t\tdelete tsConfig.extends;\n\t} else {\n\t\tcompilerOptions = tsConfig.compilerOptions;\n\t}\n\ttsConfig.compilerOptions = compilerOptions;\n\ttsConfig.compilerOptions.sourceMap = true;\n\ttsConfig.compilerOptions.module = 'es2022';\n\ttsConfig.compilerOptions.outDir = options.tsOutDir;\n\n\tcompilerOptions.noEmit = false;\n\tcompilerOptions.noUnusedLocals = false;\n\tcompilerOptions.preserveConstEnums = false;\n\tcompilerOptions.declaration = false;\n\tcompilerOptions.moduleResolution = ts.ModuleResolutionKind.Classic;\n\n\n\toptions.compilerOptions = compilerOptions;\n\n\tconsole.log(`Running tree shaker with shakeLevel ${tss.toStringShakeLevel(options.shakeLevel)}`);\n\n\t// Take the extra included .d.ts files from `tsconfig.monaco.json`\n\toptions.typings = (<string[]>tsConfig.include).filter(includedFile => /\\.d\\.ts$/.test(includedFile));\n\n\t// Add extra .d.ts files from `node_modules/@types/`\n\tif (Array.isArray(options.compilerOptions?.types)) {\n\t\toptions.compilerOptions.types.forEach((type: string) => {\n\t\t\tif (type === '@webgpu/types') {\n\t\t\t\toptions.typings.push(`../node_modules/${type}/dist/index.d.ts`);\n\t\t\t} else {\n\t\t\t\toptions.typings.push(`../node_modules/@types/${type}/index.d.ts`);\n\t\t\t}\n\t\t});\n\t}\n\n\tconst result = tss.shake(options);\n\tfor (const fileName in result) {\n\t\tif (result.hasOwnProperty(fileName)) {\n\t\t\twriteFile(path.join(options.destRoot, fileName), result[fileName]);\n\t\t}\n\t}\n\tconst copied: { [fileName: string]: boolean } = {};\n\tconst copyFile = (fileName: string) => {\n\t\tif (copied[fileName]) {\n\t\t\treturn;\n\t\t}\n\t\tcopied[fileName] = true;\n\t\tconst srcPath = path.join(options.sourcesRoot, fileName);\n\t\tconst dstPath = path.join(options.destRoot, fileName);\n\t\twriteFile(dstPath, fs.readFileSync(srcPath));\n\t};\n\tconst writeOutputFile = (fileName: string, contents: string | Buffer) => {\n\t\twriteFile(path.join(options.destRoot, fileName), contents);\n\t};\n\tfor (const fileName in result) {\n\t\tif (result.hasOwnProperty(fileName)) {\n\t\t\tconst fileContents = result[fileName];\n\t\t\tconst info = ts.preProcessFile(fileContents);\n\n\t\t\tfor (let i = info.importedFiles.length - 1; i >= 0; i--) {\n\t\t\t\tconst importedFileName = info.importedFiles[i].fileName;\n\n\t\t\t\tlet importedFilePath = importedFileName;\n\t\t\t\tif (/(^\\.\\/)|(^\\.\\.\\/)/.test(importedFilePath)) {\n\t\t\t\t\timportedFilePath = path.join(path.dirname(fileName), importedFilePath);\n\t\t\t\t}\n\n\t\t\t\tif (/\\.css$/.test(importedFilePath)) {\n\t\t\t\t\ttransportCSS(importedFilePath, copyFile, writeOutputFile);\n\t\t\t\t} else {\n\t\t\t\t\tconst pathToCopy = path.join(options.sourcesRoot, importedFilePath);\n\t\t\t\t\tif (fs.existsSync(pathToCopy) && !fs.statSync(pathToCopy).isDirectory()) {\n\t\t\t\t\t\tcopyFile(importedFilePath);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdelete tsConfig.compilerOptions.moduleResolution;\n\twriteOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\\t'));\n\n\t[\n\t\t'vs/loader.js'\n\t].forEach(copyFile);\n}\n\nfunction transportCSS(module: string, enqueue: (module: string) => void, write: (path: string, contents: string | Buffer) => void): boolean {\n\n\tif (!/\\.css/.test(module)) {\n\t\treturn false;\n\t}\n\n\tconst filename = path.join(SRC_DIR, module);\n\tconst fileContents = fs.readFileSync(filename).toString();\n\tconst inlineResources = 'base64'; // see https://github.com/microsoft/monaco-editor/issues/148\n\n\tconst newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64');\n\twrite(module, newContents);\n\treturn true;\n\n\tfunction _rewriteOrInlineUrls(contents: string, forceBase64: boolean): string {\n\t\treturn _replaceURL(contents, (url) => {\n\t\t\tconst fontMatch = url.match(/^(.*).ttf\\?(.*)$/);\n\t\t\tif (fontMatch) {\n\t\t\t\tconst relativeFontPath = `${fontMatch[1]}.ttf`; // trim the query parameter\n\t\t\t\tconst fontPath = path.join(path.dirname(module), relativeFontPath);\n\t\t\t\tenqueue(fontPath);\n\t\t\t\treturn relativeFontPath;\n\t\t\t}\n\n\t\t\tconst imagePath = path.join(path.dirname(module), url);\n\t\t\tconst fileContents = fs.readFileSync(path.join(SRC_DIR, imagePath));\n\t\t\tconst MIME = /\\.svg$/.test(url) ? 'image/svg+xml' : 'image/png';\n\t\t\tlet DATA = ';base64,' + fileContents.toString('base64');\n\n\t\t\tif (!forceBase64 && /\\.svg$/.test(url)) {\n\t\t\t\t// .svg => url encode as explained at https://codepen.io/tigt/post/optimizing-svgs-in-data-uris\n\t\t\t\tconst newText = fileContents.toString()\n\t\t\t\t\t.replace(/\"/g, '\\'')\n\t\t\t\t\t.replace(/</g, '%3C')\n\t\t\t\t\t.replace(/>/g, '%3E')\n\t\t\t\t\t.replace(/&/g, '%26')\n\t\t\t\t\t.replace(/#/g, '%23')\n\t\t\t\t\t.replace(/\\s+/g, ' ');\n\t\t\t\tconst encodedData = ',' + newText;\n\t\t\t\tif (encodedData.length < DATA.length) {\n\t\t\t\t\tDATA = encodedData;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn '\"data:' + MIME + DATA + '\"';\n\t\t});\n\t}\n\n\tfunction _replaceURL(contents: string, replacer: (url: string) => string): string {\n\t\t// Use \")\" as the terminator as quotes are oftentimes not used at all\n\t\treturn contents.replace(/url\\(\\s*([^\\)]+)\\s*\\)?/g, (_: string, ...matches: string[]) => {\n\t\t\tlet url = matches[0];\n\t\t\t// Eliminate starting quotes (the initial whitespace is not captured)\n\t\t\tif (url.charAt(0) === '\"' || url.charAt(0) === '\\'') {\n\t\t\t\turl = url.substring(1);\n\t\t\t}\n\t\t\t// The ending whitespace is captured\n\t\t\twhile (url.length > 0 && (url.charAt(url.length - 1) === ' ' || url.charAt(url.length - 1) === '\\t')) {\n\t\t\t\turl = url.substring(0, url.length - 1);\n\t\t\t}\n\t\t\t// Eliminate ending quotes\n\t\t\tif (url.charAt(url.length - 1) === '\"' || url.charAt(url.length - 1) === '\\'') {\n\t\t\t\turl = url.substring(0, url.length - 1);\n\t\t\t}\n\n\t\t\tif (!_startsWith(url, 'data:') && !_startsWith(url, 'http://') && !_startsWith(url, 'https://')) {\n\t\t\t\turl = replacer(url);\n\t\t\t}\n\n\t\t\treturn 'url(' + url + ')';\n\t\t});\n\t}\n\n\tfunction _startsWith(haystack: string, needle: string): boolean {\n\t\treturn haystack.length >= needle.length && haystack.substr(0, needle.length) === needle;\n\t}\n}\n"
  },
  {
    "path": "build/lib/stats.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createStatsStream = createStatsStream;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nclass Entry {\n    name;\n    totalCount;\n    totalSize;\n    constructor(name, totalCount, totalSize) {\n        this.name = name;\n        this.totalCount = totalCount;\n        this.totalSize = totalSize;\n    }\n    toString(pretty) {\n        if (!pretty) {\n            if (this.totalCount === 1) {\n                return `${this.name}: ${this.totalSize} bytes`;\n            }\n            else {\n                return `${this.name}: ${this.totalCount} files with ${this.totalSize} bytes`;\n            }\n        }\n        else {\n            if (this.totalCount === 1) {\n                return `Stats for '${ansi_colors_1.default.grey(this.name)}': ${Math.round(this.totalSize / 1204)}KB`;\n            }\n            else {\n                const count = this.totalCount < 100\n                    ? ansi_colors_1.default.green(this.totalCount.toString())\n                    : ansi_colors_1.default.red(this.totalCount.toString());\n                return `Stats for '${ansi_colors_1.default.grey(this.name)}': ${count} files, ${Math.round(this.totalSize / 1204)}KB`;\n            }\n        }\n    }\n}\nconst _entries = new Map();\nfunction createStatsStream(group, log) {\n    const entry = new Entry(group, 0, 0);\n    _entries.set(entry.name, entry);\n    return event_stream_1.default.through(function (data) {\n        const file = data;\n        if (typeof file.path === 'string') {\n            entry.totalCount += 1;\n            if (Buffer.isBuffer(file.contents)) {\n                entry.totalSize += file.contents.length;\n            }\n            else if (file.stat && typeof file.stat.size === 'number') {\n                entry.totalSize += file.stat.size;\n            }\n            else {\n                // funky file...\n            }\n        }\n        this.emit('data', data);\n    }, function () {\n        if (log) {\n            if (entry.totalCount === 1) {\n                (0, fancy_log_1.default)(`Stats for '${ansi_colors_1.default.grey(entry.name)}': ${Math.round(entry.totalSize / 1204)}KB`);\n            }\n            else {\n                const count = entry.totalCount < 100\n                    ? ansi_colors_1.default.green(entry.totalCount.toString())\n                    : ansi_colors_1.default.red(entry.totalCount.toString());\n                (0, fancy_log_1.default)(`Stats for '${ansi_colors_1.default.grey(entry.name)}': ${count} files, ${Math.round(entry.totalSize / 1204)}KB`);\n            }\n        }\n        this.emit('end');\n    });\n}\n//# sourceMappingURL=stats.js.map"
  },
  {
    "path": "build/lib/stats.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\nimport File from 'vinyl';\n\nclass Entry {\n\tconstructor(readonly name: string, public totalCount: number, public totalSize: number) { }\n\n\ttoString(pretty?: boolean): string {\n\t\tif (!pretty) {\n\t\t\tif (this.totalCount === 1) {\n\t\t\t\treturn `${this.name}: ${this.totalSize} bytes`;\n\t\t\t} else {\n\t\t\t\treturn `${this.name}: ${this.totalCount} files with ${this.totalSize} bytes`;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.totalCount === 1) {\n\t\t\t\treturn `Stats for '${ansiColors.grey(this.name)}': ${Math.round(this.totalSize / 1204)}KB`;\n\n\t\t\t} else {\n\t\t\t\tconst count = this.totalCount < 100\n\t\t\t\t\t? ansiColors.green(this.totalCount.toString())\n\t\t\t\t\t: ansiColors.red(this.totalCount.toString());\n\n\t\t\t\treturn `Stats for '${ansiColors.grey(this.name)}': ${count} files, ${Math.round(this.totalSize / 1204)}KB`;\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst _entries = new Map<string, Entry>();\n\nexport function createStatsStream(group: string, log?: boolean): es.ThroughStream {\n\n\tconst entry = new Entry(group, 0, 0);\n\t_entries.set(entry.name, entry);\n\n\treturn es.through(function (data) {\n\t\tconst file = data as File;\n\t\tif (typeof file.path === 'string') {\n\t\t\tentry.totalCount += 1;\n\t\t\tif (Buffer.isBuffer(file.contents)) {\n\t\t\t\tentry.totalSize += file.contents.length;\n\t\t\t} else if (file.stat && typeof file.stat.size === 'number') {\n\t\t\t\tentry.totalSize += file.stat.size;\n\t\t\t} else {\n\t\t\t\t// funky file...\n\t\t\t}\n\t\t}\n\t\tthis.emit('data', data);\n\t}, function () {\n\t\tif (log) {\n\t\t\tif (entry.totalCount === 1) {\n\t\t\t\tfancyLog(`Stats for '${ansiColors.grey(entry.name)}': ${Math.round(entry.totalSize / 1204)}KB`);\n\n\t\t\t} else {\n\t\t\t\tconst count = entry.totalCount < 100\n\t\t\t\t\t? ansiColors.green(entry.totalCount.toString())\n\t\t\t\t\t: ansiColors.red(entry.totalCount.toString());\n\n\t\t\t\tfancyLog(`Stats for '${ansiColors.grey(entry.name)}': ${count} files, ${Math.round(entry.totalSize / 1204)}KB`);\n\t\t\t}\n\t\t}\n\n\t\tthis.emit('end');\n\t});\n}\n"
  },
  {
    "path": "build/lib/stylelint/validateVariableNames.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getVariableNameValidator = getVariableNameValidator;\nconst fs_1 = require(\"fs\");\nconst path_1 = __importDefault(require(\"path\"));\nconst RE_VAR_PROP = /var\\(\\s*(--([\\w\\-\\.]+))/g;\nlet knownVariables;\nfunction getKnownVariableNames() {\n    if (!knownVariables) {\n        const knownVariablesFileContent = (0, fs_1.readFileSync)(path_1.default.join(__dirname, './vscode-known-variables.json'), 'utf8').toString();\n        const knownVariablesInfo = JSON.parse(knownVariablesFileContent);\n        knownVariables = new Set([...knownVariablesInfo.colors, ...knownVariablesInfo.others]);\n    }\n    return knownVariables;\n}\nconst iconVariable = /^--vscode-icon-.+-(content|font-family)$/;\nfunction getVariableNameValidator() {\n    const allVariables = getKnownVariableNames();\n    return (value, report) => {\n        RE_VAR_PROP.lastIndex = 0; // reset lastIndex just to be sure\n        let match;\n        while (match = RE_VAR_PROP.exec(value)) {\n            const variableName = match[1];\n            if (variableName && !allVariables.has(variableName) && !iconVariable.test(variableName)) {\n                report(variableName);\n            }\n        }\n    };\n}\n//# sourceMappingURL=validateVariableNames.js.map"
  },
  {
    "path": "build/lib/stylelint/validateVariableNames.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { readFileSync } from 'fs';\nimport path from 'path';\n\nconst RE_VAR_PROP = /var\\(\\s*(--([\\w\\-\\.]+))/g;\n\nlet knownVariables: Set<string> | undefined;\nfunction getKnownVariableNames() {\n\tif (!knownVariables) {\n\t\tconst knownVariablesFileContent = readFileSync(path.join(__dirname, './vscode-known-variables.json'), 'utf8').toString();\n\t\tconst knownVariablesInfo = JSON.parse(knownVariablesFileContent);\n\t\tknownVariables = new Set([...knownVariablesInfo.colors, ...knownVariablesInfo.others] as string[]);\n\t}\n\treturn knownVariables;\n}\n\nconst iconVariable = /^--vscode-icon-.+-(content|font-family)$/;\n\nexport interface IValidator {\n\t(value: string, report: (message: string) => void): void;\n}\n\nexport function getVariableNameValidator(): IValidator {\n\tconst allVariables = getKnownVariableNames();\n\treturn (value: string, report: (unknwnVariable: string) => void) => {\n\t\tRE_VAR_PROP.lastIndex = 0; // reset lastIndex just to be sure\n\t\tlet match;\n\t\twhile (match = RE_VAR_PROP.exec(value)) {\n\t\t\tconst variableName = match[1];\n\t\t\tif (variableName && !allVariables.has(variableName) && !iconVariable.test(variableName)) {\n\t\t\t\treport(variableName);\n\t\t\t}\n\t\t}\n\t};\n}\n\n"
  },
  {
    "path": "build/lib/stylelint/vscode-known-variables.json",
    "content": "{\n\t\"colors\": [\n\t\t\"--vscode-actionBar-toggledBackground\",\n\t\t\"--vscode-activityBar-activeBackground\",\n\t\t\"--vscode-activityBar-activeBorder\",\n\t\t\"--vscode-activityBar-activeFocusBorder\",\n\t\t\"--vscode-activityBar-background\",\n\t\t\"--vscode-activityBar-border\",\n\t\t\"--vscode-activityBar-dropBorder\",\n\t\t\"--vscode-activityBar-foreground\",\n\t\t\"--vscode-activityBar-inactiveForeground\",\n\t\t\"--vscode-activityBarBadge-background\",\n\t\t\"--vscode-activityBarBadge-foreground\",\n\t\t\"--vscode-activityBarTop-activeBackground\",\n\t\t\"--vscode-activityBarTop-activeBorder\",\n\t\t\"--vscode-activityBarTop-background\",\n\t\t\"--vscode-activityBarTop-dropBorder\",\n\t\t\"--vscode-activityBarTop-foreground\",\n\t\t\"--vscode-activityBarTop-inactiveForeground\",\n\t\t\"--vscode-activityErrorBadge-background\",\n\t\t\"--vscode-activityErrorBadge-foreground\",\n\t\t\"--vscode-activityWarningBadge-background\",\n\t\t\"--vscode-activityWarningBadge-foreground\",\n\t\t\"--vscode-badge-background\",\n\t\t\"--vscode-badge-foreground\",\n\t\t\"--vscode-banner-background\",\n\t\t\"--vscode-banner-foreground\",\n\t\t\"--vscode-banner-iconForeground\",\n\t\t\"--vscode-breadcrumb-activeSelectionForeground\",\n\t\t\"--vscode-breadcrumb-background\",\n\t\t\"--vscode-breadcrumb-focusForeground\",\n\t\t\"--vscode-breadcrumb-foreground\",\n\t\t\"--vscode-breadcrumbPicker-background\",\n\t\t\"--vscode-button-background\",\n\t\t\"--vscode-button-border\",\n\t\t\"--vscode-button-foreground\",\n\t\t\"--vscode-button-hoverBackground\",\n\t\t\"--vscode-button-secondaryBackground\",\n\t\t\"--vscode-button-secondaryForeground\",\n\t\t\"--vscode-button-secondaryHoverBackground\",\n\t\t\"--vscode-button-separator\",\n\t\t\"--vscode-chart-axis\",\n\t\t\"--vscode-chart-guide\",\n\t\t\"--vscode-chart-line\",\n\t\t\"--vscode-charts-blue\",\n\t\t\"--vscode-charts-foreground\",\n\t\t\"--vscode-charts-green\",\n\t\t\"--vscode-charts-lines\",\n\t\t\"--vscode-charts-orange\",\n\t\t\"--vscode-charts-purple\",\n\t\t\"--vscode-charts-red\",\n\t\t\"--vscode-charts-yellow\",\n\t\t\"--vscode-chat-avatarBackground\",\n\t\t\"--vscode-chat-avatarForeground\",\n\t\t\"--vscode-chat-editedFileForeground\",\n\t\t\"--vscode-chat-requestBackground\",\n\t\t\"--vscode-chat-requestBorder\",\n\t\t\"--vscode-chat-slashCommandBackground\",\n\t\t\"--vscode-chat-slashCommandForeground\",\n\t\t\"--vscode-checkbox-background\",\n\t\t\"--vscode-checkbox-border\",\n\t\t\"--vscode-checkbox-foreground\",\n\t\t\"--vscode-checkbox-selectBackground\",\n\t\t\"--vscode-checkbox-selectBorder\",\n\t\t\"--vscode-commandCenter-activeBackground\",\n\t\t\"--vscode-commandCenter-activeBorder\",\n\t\t\"--vscode-commandCenter-activeForeground\",\n\t\t\"--vscode-commandCenter-background\",\n\t\t\"--vscode-commandCenter-border\",\n\t\t\"--vscode-commandCenter-debuggingBackground\",\n\t\t\"--vscode-commandCenter-foreground\",\n\t\t\"--vscode-commandCenter-inactiveBorder\",\n\t\t\"--vscode-commandCenter-inactiveForeground\",\n\t\t\"--vscode-commentsView-resolvedIcon\",\n\t\t\"--vscode-commentsView-unresolvedIcon\",\n\t\t\"--vscode-contrastActiveBorder\",\n\t\t\"--vscode-contrastBorder\",\n\t\t\"--vscode-debugConsole-errorForeground\",\n\t\t\"--vscode-debugConsole-infoForeground\",\n\t\t\"--vscode-debugConsole-sourceForeground\",\n\t\t\"--vscode-debugConsole-warningForeground\",\n\t\t\"--vscode-debugConsoleInputIcon-foreground\",\n\t\t\"--vscode-debugExceptionWidget-background\",\n\t\t\"--vscode-debugExceptionWidget-border\",\n\t\t\"--vscode-debugIcon-breakpointCurrentStackframeForeground\",\n\t\t\"--vscode-debugIcon-breakpointDisabledForeground\",\n\t\t\"--vscode-debugIcon-breakpointForeground\",\n\t\t\"--vscode-debugIcon-breakpointStackframeForeground\",\n\t\t\"--vscode-debugIcon-breakpointUnverifiedForeground\",\n\t\t\"--vscode-debugIcon-continueForeground\",\n\t\t\"--vscode-debugIcon-disconnectForeground\",\n\t\t\"--vscode-debugIcon-pauseForeground\",\n\t\t\"--vscode-debugIcon-restartForeground\",\n\t\t\"--vscode-debugIcon-startForeground\",\n\t\t\"--vscode-debugIcon-stepBackForeground\",\n\t\t\"--vscode-debugIcon-stepIntoForeground\",\n\t\t\"--vscode-debugIcon-stepOutForeground\",\n\t\t\"--vscode-debugIcon-stepOverForeground\",\n\t\t\"--vscode-debugIcon-stopForeground\",\n\t\t\"--vscode-debugTokenExpression-boolean\",\n\t\t\"--vscode-debugTokenExpression-error\",\n\t\t\"--vscode-debugTokenExpression-name\",\n\t\t\"--vscode-debugTokenExpression-number\",\n\t\t\"--vscode-debugTokenExpression-string\",\n\t\t\"--vscode-debugTokenExpression-type\",\n\t\t\"--vscode-debugTokenExpression-value\",\n\t\t\"--vscode-debugToolBar-background\",\n\t\t\"--vscode-debugToolBar-border\",\n\t\t\"--vscode-debugView-exceptionLabelBackground\",\n\t\t\"--vscode-debugView-exceptionLabelForeground\",\n\t\t\"--vscode-debugView-stateLabelBackground\",\n\t\t\"--vscode-debugView-stateLabelForeground\",\n\t\t\"--vscode-debugView-valueChangedHighlight\",\n\t\t\"--vscode-descriptionForeground\",\n\t\t\"--vscode-diffEditor-border\",\n\t\t\"--vscode-diffEditor-diagonalFill\",\n\t\t\"--vscode-diffEditor-insertedLineBackground\",\n\t\t\"--vscode-diffEditor-insertedTextBackground\",\n\t\t\"--vscode-diffEditor-insertedTextBorder\",\n\t\t\"--vscode-diffEditor-move-border\",\n\t\t\"--vscode-diffEditor-moveActive-border\",\n\t\t\"--vscode-diffEditor-removedLineBackground\",\n\t\t\"--vscode-diffEditor-removedTextBackground\",\n\t\t\"--vscode-diffEditor-removedTextBorder\",\n\t\t\"--vscode-diffEditor-unchangedCodeBackground\",\n\t\t\"--vscode-diffEditor-unchangedRegionBackground\",\n\t\t\"--vscode-diffEditor-unchangedRegionForeground\",\n\t\t\"--vscode-diffEditor-unchangedRegionShadow\",\n\t\t\"--vscode-diffEditorGutter-insertedLineBackground\",\n\t\t\"--vscode-diffEditorGutter-removedLineBackground\",\n\t\t\"--vscode-diffEditorOverview-insertedForeground\",\n\t\t\"--vscode-diffEditorOverview-removedForeground\",\n\t\t\"--vscode-disabledForeground\",\n\t\t\"--vscode-dropdown-background\",\n\t\t\"--vscode-dropdown-border\",\n\t\t\"--vscode-dropdown-foreground\",\n\t\t\"--vscode-dropdown-listBackground\",\n\t\t\"--vscode-editor-background\",\n\t\t\"--vscode-editor-compositionBorder\",\n\t\t\"--vscode-editor-findMatchBackground\",\n\t\t\"--vscode-editor-findMatchBorder\",\n\t\t\"--vscode-editor-findMatchForeground\",\n\t\t\"--vscode-editor-findMatchHighlightBackground\",\n\t\t\"--vscode-editor-findMatchHighlightBorder\",\n\t\t\"--vscode-editor-findMatchHighlightForeground\",\n\t\t\"--vscode-editor-findRangeHighlightBackground\",\n\t\t\"--vscode-editor-findRangeHighlightBorder\",\n\t\t\"--vscode-editor-focusedStackFrameHighlightBackground\",\n\t\t\"--vscode-editor-foldBackground\",\n\t\t\"--vscode-editor-foldPlaceholderForeground\",\n\t\t\"--vscode-editor-foreground\",\n\t\t\"--vscode-editor-hoverHighlightBackground\",\n\t\t\"--vscode-editor-inactiveSelectionBackground\",\n\t\t\"--vscode-editor-inlineValuesBackground\",\n\t\t\"--vscode-editor-inlineValuesForeground\",\n\t\t\"--vscode-editor-lineHighlightBackground\",\n\t\t\"--vscode-editor-lineHighlightBorder\",\n\t\t\"--vscode-editor-linkedEditingBackground\",\n\t\t\"--vscode-editor-placeholder-foreground\",\n\t\t\"--vscode-editor-rangeHighlightBackground\",\n\t\t\"--vscode-editor-rangeHighlightBorder\",\n\t\t\"--vscode-editor-selectionBackground\",\n\t\t\"--vscode-editor-selectionForeground\",\n\t\t\"--vscode-editor-selectionHighlightBackground\",\n\t\t\"--vscode-editor-selectionHighlightBorder\",\n\t\t\"--vscode-editor-snippetFinalTabstopHighlightBackground\",\n\t\t\"--vscode-editor-snippetFinalTabstopHighlightBorder\",\n\t\t\"--vscode-editor-snippetTabstopHighlightBackground\",\n\t\t\"--vscode-editor-snippetTabstopHighlightBorder\",\n\t\t\"--vscode-editor-stackFrameHighlightBackground\",\n\t\t\"--vscode-editor-symbolHighlightBackground\",\n\t\t\"--vscode-editor-symbolHighlightBorder\",\n\t\t\"--vscode-editor-wordHighlightBackground\",\n\t\t\"--vscode-editor-wordHighlightBorder\",\n\t\t\"--vscode-editor-wordHighlightStrongBackground\",\n\t\t\"--vscode-editor-wordHighlightStrongBorder\",\n\t\t\"--vscode-editor-wordHighlightTextBackground\",\n\t\t\"--vscode-editor-wordHighlightTextBorder\",\n\t\t\"--vscode-editorActionList-background\",\n\t\t\"--vscode-editorActionList-focusBackground\",\n\t\t\"--vscode-editorActionList-focusForeground\",\n\t\t\"--vscode-editorActionList-foreground\",\n\t\t\"--vscode-editorActiveLineNumber-foreground\",\n\t\t\"--vscode-editorBracketHighlight-foreground1\",\n\t\t\"--vscode-editorBracketHighlight-foreground2\",\n\t\t\"--vscode-editorBracketHighlight-foreground3\",\n\t\t\"--vscode-editorBracketHighlight-foreground4\",\n\t\t\"--vscode-editorBracketHighlight-foreground5\",\n\t\t\"--vscode-editorBracketHighlight-foreground6\",\n\t\t\"--vscode-editorBracketHighlight-unexpectedBracket-foreground\",\n\t\t\"--vscode-editorBracketMatch-background\",\n\t\t\"--vscode-editorBracketMatch-border\",\n\t\t\"--vscode-editorBracketPairGuide-activeBackground1\",\n\t\t\"--vscode-editorBracketPairGuide-activeBackground2\",\n\t\t\"--vscode-editorBracketPairGuide-activeBackground3\",\n\t\t\"--vscode-editorBracketPairGuide-activeBackground4\",\n\t\t\"--vscode-editorBracketPairGuide-activeBackground5\",\n\t\t\"--vscode-editorBracketPairGuide-activeBackground6\",\n\t\t\"--vscode-editorBracketPairGuide-background1\",\n\t\t\"--vscode-editorBracketPairGuide-background2\",\n\t\t\"--vscode-editorBracketPairGuide-background3\",\n\t\t\"--vscode-editorBracketPairGuide-background4\",\n\t\t\"--vscode-editorBracketPairGuide-background5\",\n\t\t\"--vscode-editorBracketPairGuide-background6\",\n\t\t\"--vscode-editorCodeLens-foreground\",\n\t\t\"--vscode-editorCommentsWidget-rangeActiveBackground\",\n\t\t\"--vscode-editorCommentsWidget-rangeBackground\",\n\t\t\"--vscode-editorCommentsWidget-replyInputBackground\",\n\t\t\"--vscode-editorCommentsWidget-resolvedBorder\",\n\t\t\"--vscode-editorCommentsWidget-unresolvedBorder\",\n\t\t\"--vscode-editorCursor-background\",\n\t\t\"--vscode-editorCursor-foreground\",\n\t\t\"--vscode-editorError-background\",\n\t\t\"--vscode-editorError-border\",\n\t\t\"--vscode-editorError-foreground\",\n\t\t\"--vscode-editorGhostText-background\",\n\t\t\"--vscode-editorGhostText-border\",\n\t\t\"--vscode-editorGhostText-foreground\",\n\t\t\"--vscode-editorGroup-border\",\n\t\t\"--vscode-editorGroup-dropBackground\",\n\t\t\"--vscode-editorGroup-dropIntoPromptBackground\",\n\t\t\"--vscode-editorGroup-dropIntoPromptBorder\",\n\t\t\"--vscode-editorGroup-dropIntoPromptForeground\",\n\t\t\"--vscode-editorGroup-emptyBackground\",\n\t\t\"--vscode-editorGroup-focusedEmptyBorder\",\n\t\t\"--vscode-editorGroupHeader-border\",\n\t\t\"--vscode-editorGroupHeader-noTabsBackground\",\n\t\t\"--vscode-editorGroupHeader-tabsBackground\",\n\t\t\"--vscode-editorGroupHeader-tabsBorder\",\n\t\t\"--vscode-editorGutter-addedBackground\",\n\t\t\"--vscode-editorGutter-background\",\n\t\t\"--vscode-editorGutter-commentGlyphForeground\",\n\t\t\"--vscode-editorGutter-commentRangeForeground\",\n\t\t\"--vscode-editorGutter-commentUnresolvedGlyphForeground\",\n\t\t\"--vscode-editorGutter-deletedBackground\",\n\t\t\"--vscode-editorGutter-foldingControlForeground\",\n\t\t\"--vscode-editorGutter-itemBackground\",\n\t\t\"--vscode-editorGutter-itemGlyphForeground\",\n\t\t\"--vscode-editorGutter-modifiedBackground\",\n\t\t\"--vscode-editorHint-border\",\n\t\t\"--vscode-editorHint-foreground\",\n\t\t\"--vscode-editorHoverWidget-background\",\n\t\t\"--vscode-editorHoverWidget-border\",\n\t\t\"--vscode-editorHoverWidget-foreground\",\n\t\t\"--vscode-editorHoverWidget-highlightForeground\",\n\t\t\"--vscode-editorHoverWidget-statusBarBackground\",\n\t\t\"--vscode-editorIndentGuide-activeBackground\",\n\t\t\"--vscode-editorIndentGuide-activeBackground1\",\n\t\t\"--vscode-editorIndentGuide-activeBackground2\",\n\t\t\"--vscode-editorIndentGuide-activeBackground3\",\n\t\t\"--vscode-editorIndentGuide-activeBackground4\",\n\t\t\"--vscode-editorIndentGuide-activeBackground5\",\n\t\t\"--vscode-editorIndentGuide-activeBackground6\",\n\t\t\"--vscode-editorIndentGuide-background\",\n\t\t\"--vscode-editorIndentGuide-background1\",\n\t\t\"--vscode-editorIndentGuide-background2\",\n\t\t\"--vscode-editorIndentGuide-background3\",\n\t\t\"--vscode-editorIndentGuide-background4\",\n\t\t\"--vscode-editorIndentGuide-background5\",\n\t\t\"--vscode-editorIndentGuide-background6\",\n\t\t\"--vscode-editorInfo-background\",\n\t\t\"--vscode-editorInfo-border\",\n\t\t\"--vscode-editorInfo-foreground\",\n\t\t\"--vscode-editorInlayHint-background\",\n\t\t\"--vscode-editorInlayHint-foreground\",\n\t\t\"--vscode-editorInlayHint-parameterBackground\",\n\t\t\"--vscode-editorInlayHint-parameterForeground\",\n\t\t\"--vscode-editorInlayHint-typeBackground\",\n\t\t\"--vscode-editorInlayHint-typeForeground\",\n\t\t\"--vscode-editorLightBulb-foreground\",\n\t\t\"--vscode-editorLightBulbAi-foreground\",\n\t\t\"--vscode-editorLightBulbAutoFix-foreground\",\n\t\t\"--vscode-editorLineNumber-activeForeground\",\n\t\t\"--vscode-editorLineNumber-dimmedForeground\",\n\t\t\"--vscode-editorLineNumber-foreground\",\n\t\t\"--vscode-editorLink-activeForeground\",\n\t\t\"--vscode-editorMarkerNavigation-background\",\n\t\t\"--vscode-editorMarkerNavigationError-background\",\n\t\t\"--vscode-editorMarkerNavigationError-headerBackground\",\n\t\t\"--vscode-editorMarkerNavigationInfo-background\",\n\t\t\"--vscode-editorMarkerNavigationInfo-headerBackground\",\n\t\t\"--vscode-editorMarkerNavigationWarning-background\",\n\t\t\"--vscode-editorMarkerNavigationWarning-headerBackground\",\n\t\t\"--vscode-editorMinimap-inlineChatInserted\",\n\t\t\"--vscode-editorMultiCursor-primary-background\",\n\t\t\"--vscode-editorMultiCursor-primary-foreground\",\n\t\t\"--vscode-editorMultiCursor-secondary-background\",\n\t\t\"--vscode-editorMultiCursor-secondary-foreground\",\n\t\t\"--vscode-editorOverviewRuler-addedForeground\",\n\t\t\"--vscode-editorOverviewRuler-background\",\n\t\t\"--vscode-editorOverviewRuler-border\",\n\t\t\"--vscode-editorOverviewRuler-bracketMatchForeground\",\n\t\t\"--vscode-editorOverviewRuler-commentForeground\",\n\t\t\"--vscode-editorOverviewRuler-commentUnresolvedForeground\",\n\t\t\"--vscode-editorOverviewRuler-commonContentForeground\",\n\t\t\"--vscode-editorOverviewRuler-currentContentForeground\",\n\t\t\"--vscode-editorOverviewRuler-deletedForeground\",\n\t\t\"--vscode-editorOverviewRuler-errorForeground\",\n\t\t\"--vscode-editorOverviewRuler-findMatchForeground\",\n\t\t\"--vscode-editorOverviewRuler-incomingContentForeground\",\n\t\t\"--vscode-editorOverviewRuler-infoForeground\",\n\t\t\"--vscode-editorOverviewRuler-inlineChatInserted\",\n\t\t\"--vscode-editorOverviewRuler-inlineChatRemoved\",\n\t\t\"--vscode-editorOverviewRuler-modifiedForeground\",\n\t\t\"--vscode-editorOverviewRuler-rangeHighlightForeground\",\n\t\t\"--vscode-editorOverviewRuler-selectionHighlightForeground\",\n\t\t\"--vscode-editorOverviewRuler-warningForeground\",\n\t\t\"--vscode-editorOverviewRuler-wordHighlightForeground\",\n\t\t\"--vscode-editorOverviewRuler-wordHighlightStrongForeground\",\n\t\t\"--vscode-editorOverviewRuler-wordHighlightTextForeground\",\n\t\t\"--vscode-editorPane-background\",\n\t\t\"--vscode-editorRuler-foreground\",\n\t\t\"--vscode-editorStickyScroll-background\",\n\t\t\"--vscode-editorStickyScroll-border\",\n\t\t\"--vscode-editorStickyScroll-shadow\",\n\t\t\"--vscode-editorStickyScrollHover-background\",\n\t\t\"--vscode-editorSuggestWidget-background\",\n\t\t\"--vscode-editorSuggestWidget-border\",\n\t\t\"--vscode-editorSuggestWidget-focusHighlightForeground\",\n\t\t\"--vscode-editorSuggestWidget-foreground\",\n\t\t\"--vscode-editorSuggestWidget-highlightForeground\",\n\t\t\"--vscode-editorSuggestWidget-selectedBackground\",\n\t\t\"--vscode-editorSuggestWidget-selectedForeground\",\n\t\t\"--vscode-editorSuggestWidget-selectedIconForeground\",\n\t\t\"--vscode-editorSuggestWidgetStatus-foreground\",\n\t\t\"--vscode-editorUnicodeHighlight-background\",\n\t\t\"--vscode-editorUnicodeHighlight-border\",\n\t\t\"--vscode-editorUnnecessaryCode-border\",\n\t\t\"--vscode-editorUnnecessaryCode-opacity\",\n\t\t\"--vscode-editorWarning-background\",\n\t\t\"--vscode-editorWarning-border\",\n\t\t\"--vscode-editorWarning-foreground\",\n\t\t\"--vscode-editorWatermark-foreground\",\n\t\t\"--vscode-editorWhitespace-foreground\",\n\t\t\"--vscode-editorWidget-background\",\n\t\t\"--vscode-editorWidget-border\",\n\t\t\"--vscode-editorWidget-foreground\",\n\t\t\"--vscode-editorWidget-resizeBorder\",\n\t\t\"--vscode-errorForeground\",\n\t\t\"--vscode-extensionBadge-remoteBackground\",\n\t\t\"--vscode-extensionBadge-remoteForeground\",\n\t\t\"--vscode-extensionButton-background\",\n\t\t\"--vscode-extensionButton-foreground\",\n\t\t\"--vscode-extensionButton-hoverBackground\",\n\t\t\"--vscode-extensionButton-prominentBackground\",\n\t\t\"--vscode-extensionButton-prominentForeground\",\n\t\t\"--vscode-extensionButton-prominentHoverBackground\",\n\t\t\"--vscode-extensionButton-separator\",\n\t\t\"--vscode-extensionIcon-preReleaseForeground\",\n\t\t\"--vscode-extensionIcon-privateForeground\",\n\t\t\"--vscode-extensionIcon-sponsorForeground\",\n\t\t\"--vscode-extensionIcon-starForeground\",\n\t\t\"--vscode-extensionIcon-verifiedForeground\",\n\t\t\"--vscode-focusBorder\",\n\t\t\"--vscode-foreground\",\n\t\t\"--vscode-gauge-background\",\n\t\t\"--vscode-gauge-border\",\n\t\t\"--vscode-gauge-errorBackground\",\n\t\t\"--vscode-gauge-errorForeground\",\n\t\t\"--vscode-gauge-foreground\",\n\t\t\"--vscode-gauge-warningBackground\",\n\t\t\"--vscode-gauge-warningForeground\",\n\t\t\"--vscode-icon-foreground\",\n\t\t\"--vscode-inlineChat-background\",\n\t\t\"--vscode-inlineChat-border\",\n\t\t\"--vscode-inlineChat-foreground\",\n\t\t\"--vscode-inlineChat-shadow\",\n\t\t\"--vscode-inlineChatDiff-inserted\",\n\t\t\"--vscode-inlineChatDiff-removed\",\n\t\t\"--vscode-inlineChatInput-background\",\n\t\t\"--vscode-inlineChatInput-border\",\n\t\t\"--vscode-inlineChatInput-focusBorder\",\n\t\t\"--vscode-inlineChatInput-placeholderForeground\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-background\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-primaryBackground\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-primaryBorder\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-primaryForeground\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-secondaryBackground\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-secondaryBorder\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-secondaryForeground\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-successfulBackground\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-successfulBorder\",\n\t\t\"--vscode-inlineEdit-gutterIndicator-successfulForeground\",\n\t\t\"--vscode-inlineEdit-modifiedBackground\",\n\t\t\"--vscode-inlineEdit-modifiedBorder\",\n\t\t\"--vscode-inlineEdit-modifiedChangedLineBackground\",\n\t\t\"--vscode-inlineEdit-modifiedChangedTextBackground\",\n\t\t\"--vscode-inlineEdit-originalBackground\",\n\t\t\"--vscode-inlineEdit-originalBorder\",\n\t\t\"--vscode-inlineEdit-originalChangedLineBackground\",\n\t\t\"--vscode-inlineEdit-originalChangedTextBackground\",\n\t\t\"--vscode-inlineEdit-tabWillAcceptModifiedBorder\",\n\t\t\"--vscode-inlineEdit-tabWillAcceptOriginalBorder\",\n\t\t\"--vscode-input-background\",\n\t\t\"--vscode-input-border\",\n\t\t\"--vscode-input-foreground\",\n\t\t\"--vscode-input-placeholderForeground\",\n\t\t\"--vscode-inputOption-activeBackground\",\n\t\t\"--vscode-inputOption-activeBorder\",\n\t\t\"--vscode-inputOption-activeForeground\",\n\t\t\"--vscode-inputOption-hoverBackground\",\n\t\t\"--vscode-inputValidation-errorBackground\",\n\t\t\"--vscode-inputValidation-errorBorder\",\n\t\t\"--vscode-inputValidation-errorForeground\",\n\t\t\"--vscode-inputValidation-infoBackground\",\n\t\t\"--vscode-inputValidation-infoBorder\",\n\t\t\"--vscode-inputValidation-infoForeground\",\n\t\t\"--vscode-inputValidation-warningBackground\",\n\t\t\"--vscode-inputValidation-warningBorder\",\n\t\t\"--vscode-inputValidation-warningForeground\",\n\t\t\"--vscode-interactive-activeCodeBorder\",\n\t\t\"--vscode-interactive-inactiveCodeBorder\",\n\t\t\"--vscode-keybindingLabel-background\",\n\t\t\"--vscode-keybindingLabel-border\",\n\t\t\"--vscode-keybindingLabel-bottomBorder\",\n\t\t\"--vscode-keybindingLabel-foreground\",\n\t\t\"--vscode-keybindingTable-headerBackground\",\n\t\t\"--vscode-keybindingTable-rowsBackground\",\n\t\t\"--vscode-list-activeSelectionBackground\",\n\t\t\"--vscode-list-activeSelectionForeground\",\n\t\t\"--vscode-list-activeSelectionIconForeground\",\n\t\t\"--vscode-list-deemphasizedForeground\",\n\t\t\"--vscode-list-dropBackground\",\n\t\t\"--vscode-list-dropBetweenBackground\",\n\t\t\"--vscode-list-errorForeground\",\n\t\t\"--vscode-list-filterMatchBackground\",\n\t\t\"--vscode-list-filterMatchBorder\",\n\t\t\"--vscode-list-focusAndSelectionOutline\",\n\t\t\"--vscode-list-focusBackground\",\n\t\t\"--vscode-list-focusForeground\",\n\t\t\"--vscode-list-focusHighlightForeground\",\n\t\t\"--vscode-list-focusOutline\",\n\t\t\"--vscode-list-highlightForeground\",\n\t\t\"--vscode-list-hoverBackground\",\n\t\t\"--vscode-list-hoverForeground\",\n\t\t\"--vscode-list-inactiveFocusBackground\",\n\t\t\"--vscode-list-inactiveFocusOutline\",\n\t\t\"--vscode-list-inactiveSelectionBackground\",\n\t\t\"--vscode-list-inactiveSelectionForeground\",\n\t\t\"--vscode-list-inactiveSelectionIconForeground\",\n\t\t\"--vscode-list-invalidItemForeground\",\n\t\t\"--vscode-list-warningForeground\",\n\t\t\"--vscode-listFilterWidget-background\",\n\t\t\"--vscode-listFilterWidget-noMatchesOutline\",\n\t\t\"--vscode-listFilterWidget-outline\",\n\t\t\"--vscode-listFilterWidget-shadow\",\n\t\t\"--vscode-menu-background\",\n\t\t\"--vscode-menu-border\",\n\t\t\"--vscode-menu-foreground\",\n\t\t\"--vscode-menu-selectionBackground\",\n\t\t\"--vscode-menu-selectionBorder\",\n\t\t\"--vscode-menu-selectionForeground\",\n\t\t\"--vscode-menu-separatorBackground\",\n\t\t\"--vscode-menubar-selectionBackground\",\n\t\t\"--vscode-menubar-selectionBorder\",\n\t\t\"--vscode-menubar-selectionForeground\",\n\t\t\"--vscode-merge-border\",\n\t\t\"--vscode-merge-commonContentBackground\",\n\t\t\"--vscode-merge-commonHeaderBackground\",\n\t\t\"--vscode-merge-currentContentBackground\",\n\t\t\"--vscode-merge-currentHeaderBackground\",\n\t\t\"--vscode-merge-incomingContentBackground\",\n\t\t\"--vscode-merge-incomingHeaderBackground\",\n\t\t\"--vscode-mergeEditor-change-background\",\n\t\t\"--vscode-mergeEditor-change-word-background\",\n\t\t\"--vscode-mergeEditor-changeBase-background\",\n\t\t\"--vscode-mergeEditor-changeBase-word-background\",\n\t\t\"--vscode-mergeEditor-conflict-handled-minimapOverViewRuler\",\n\t\t\"--vscode-mergeEditor-conflict-handledFocused-border\",\n\t\t\"--vscode-mergeEditor-conflict-handledUnfocused-border\",\n\t\t\"--vscode-mergeEditor-conflict-input1-background\",\n\t\t\"--vscode-mergeEditor-conflict-input2-background\",\n\t\t\"--vscode-mergeEditor-conflict-unhandled-minimapOverViewRuler\",\n\t\t\"--vscode-mergeEditor-conflict-unhandledFocused-border\",\n\t\t\"--vscode-mergeEditor-conflict-unhandledUnfocused-border\",\n\t\t\"--vscode-mergeEditor-conflictingLines-background\",\n\t\t\"--vscode-minimap-background\",\n\t\t\"--vscode-minimap-chatEditHighlight\",\n\t\t\"--vscode-minimap-errorHighlight\",\n\t\t\"--vscode-minimap-findMatchHighlight\",\n\t\t\"--vscode-minimap-foregroundOpacity\",\n\t\t\"--vscode-minimap-infoHighlight\",\n\t\t\"--vscode-minimap-selectionHighlight\",\n\t\t\"--vscode-minimap-selectionOccurrenceHighlight\",\n\t\t\"--vscode-minimap-warningHighlight\",\n\t\t\"--vscode-minimapGutter-addedBackground\",\n\t\t\"--vscode-minimapGutter-deletedBackground\",\n\t\t\"--vscode-minimapGutter-modifiedBackground\",\n\t\t\"--vscode-minimapSlider-activeBackground\",\n\t\t\"--vscode-minimapSlider-background\",\n\t\t\"--vscode-minimapSlider-hoverBackground\",\n\t\t\"--vscode-multiDiffEditor-background\",\n\t\t\"--vscode-multiDiffEditor-border\",\n\t\t\"--vscode-multiDiffEditor-headerBackground\",\n\t\t\"--vscode-notebook-cellBorderColor\",\n\t\t\"--vscode-notebook-cellEditorBackground\",\n\t\t\"--vscode-notebook-cellHoverBackground\",\n\t\t\"--vscode-notebook-cellInsertionIndicator\",\n\t\t\"--vscode-notebook-cellStatusBarItemHoverBackground\",\n\t\t\"--vscode-notebook-cellToolbarSeparator\",\n\t\t\"--vscode-notebook-editorBackground\",\n\t\t\"--vscode-notebook-focusedCellBackground\",\n\t\t\"--vscode-notebook-focusedCellBorder\",\n\t\t\"--vscode-notebook-focusedEditorBorder\",\n\t\t\"--vscode-notebook-inactiveFocusedCellBorder\",\n\t\t\"--vscode-notebook-inactiveSelectedCellBorder\",\n\t\t\"--vscode-notebook-outputContainerBackgroundColor\",\n\t\t\"--vscode-notebook-outputContainerBorderColor\",\n\t\t\"--vscode-notebook-selectedCellBackground\",\n\t\t\"--vscode-notebook-selectedCellBorder\",\n\t\t\"--vscode-notebook-symbolHighlightBackground\",\n\t\t\"--vscode-notebookEditorOverviewRuler-runningCellForeground\",\n\t\t\"--vscode-notebookScrollbarSlider-activeBackground\",\n\t\t\"--vscode-notebookScrollbarSlider-background\",\n\t\t\"--vscode-notebookScrollbarSlider-hoverBackground\",\n\t\t\"--vscode-notebookStatusErrorIcon-foreground\",\n\t\t\"--vscode-notebookStatusRunningIcon-foreground\",\n\t\t\"--vscode-notebookStatusSuccessIcon-foreground\",\n\t\t\"--vscode-notificationCenter-border\",\n\t\t\"--vscode-notificationCenterHeader-background\",\n\t\t\"--vscode-notificationCenterHeader-foreground\",\n\t\t\"--vscode-notificationLink-foreground\",\n\t\t\"--vscode-notificationToast-border\",\n\t\t\"--vscode-notifications-background\",\n\t\t\"--vscode-notifications-border\",\n\t\t\"--vscode-notifications-foreground\",\n\t\t\"--vscode-notificationsErrorIcon-foreground\",\n\t\t\"--vscode-notificationsInfoIcon-foreground\",\n\t\t\"--vscode-notificationsWarningIcon-foreground\",\n\t\t\"--vscode-outputView-background\",\n\t\t\"--vscode-outputViewStickyScroll-background\",\n\t\t\"--vscode-panel-background\",\n\t\t\"--vscode-panel-border\",\n\t\t\"--vscode-panel-dropBorder\",\n\t\t\"--vscode-panelInput-border\",\n\t\t\"--vscode-panelSection-border\",\n\t\t\"--vscode-panelSection-dropBackground\",\n\t\t\"--vscode-panelSectionHeader-background\",\n\t\t\"--vscode-panelSectionHeader-border\",\n\t\t\"--vscode-panelSectionHeader-foreground\",\n\t\t\"--vscode-panelStickyScroll-background\",\n\t\t\"--vscode-panelStickyScroll-border\",\n\t\t\"--vscode-panelStickyScroll-shadow\",\n\t\t\"--vscode-panelTitle-activeBorder\",\n\t\t\"--vscode-panelTitle-activeForeground\",\n\t\t\"--vscode-panelTitle-border\",\n\t\t\"--vscode-panelTitle-inactiveForeground\",\n\t\t\"--vscode-panelTitleBadge-background\",\n\t\t\"--vscode-panelTitleBadge-foreground\",\n\t\t\"--vscode-peekView-border\",\n\t\t\"--vscode-peekViewEditor-background\",\n\t\t\"--vscode-peekViewEditor-matchHighlightBackground\",\n\t\t\"--vscode-peekViewEditor-matchHighlightBorder\",\n\t\t\"--vscode-peekViewEditorGutter-background\",\n\t\t\"--vscode-peekViewEditorStickyScroll-background\",\n\t\t\"--vscode-peekViewResult-background\",\n\t\t\"--vscode-peekViewResult-fileForeground\",\n\t\t\"--vscode-peekViewResult-lineForeground\",\n\t\t\"--vscode-peekViewResult-matchHighlightBackground\",\n\t\t\"--vscode-peekViewResult-selectionBackground\",\n\t\t\"--vscode-peekViewResult-selectionForeground\",\n\t\t\"--vscode-peekViewTitle-background\",\n\t\t\"--vscode-peekViewTitleDescription-foreground\",\n\t\t\"--vscode-peekViewTitleLabel-foreground\",\n\t\t\"--vscode-pickerGroup-border\",\n\t\t\"--vscode-pickerGroup-foreground\",\n\t\t\"--vscode-ports-iconRunningProcessForeground\",\n\t\t\"--vscode-problemsErrorIcon-foreground\",\n\t\t\"--vscode-problemsInfoIcon-foreground\",\n\t\t\"--vscode-problemsWarningIcon-foreground\",\n\t\t\"--vscode-profileBadge-background\",\n\t\t\"--vscode-profileBadge-foreground\",\n\t\t\"--vscode-profiles-sashBorder\",\n\t\t\"--vscode-progressBar-background\",\n\t\t\"--vscode-quickInput-background\",\n\t\t\"--vscode-quickInput-foreground\",\n\t\t\"--vscode-quickInput-list-focusBackground\",\n\t\t\"--vscode-quickInputList-focusBackground\",\n\t\t\"--vscode-quickInputList-focusForeground\",\n\t\t\"--vscode-quickInputList-focusIconForeground\",\n\t\t\"--vscode-quickInputTitle-background\",\n\t\t\"--vscode-radio-activeBackground\",\n\t\t\"--vscode-radio-activeBorder\",\n\t\t\"--vscode-radio-activeForeground\",\n\t\t\"--vscode-radio-inactiveBackground\",\n\t\t\"--vscode-radio-inactiveBorder\",\n\t\t\"--vscode-radio-inactiveForeground\",\n\t\t\"--vscode-radio-inactiveHoverBackground\",\n\t\t\"--vscode-sash-hoverBorder\",\n\t\t\"--vscode-scmGraph-foreground1\",\n\t\t\"--vscode-scmGraph-foreground2\",\n\t\t\"--vscode-scmGraph-foreground3\",\n\t\t\"--vscode-scmGraph-foreground4\",\n\t\t\"--vscode-scmGraph-foreground5\",\n\t\t\"--vscode-scmGraph-historyItemBaseRefColor\",\n\t\t\"--vscode-scmGraph-historyItemHoverAdditionsForeground\",\n\t\t\"--vscode-scmGraph-historyItemHoverDefaultLabelBackground\",\n\t\t\"--vscode-scmGraph-historyItemHoverDefaultLabelForeground\",\n\t\t\"--vscode-scmGraph-historyItemHoverDeletionsForeground\",\n\t\t\"--vscode-scmGraph-historyItemHoverLabelForeground\",\n\t\t\"--vscode-scmGraph-historyItemRefColor\",\n\t\t\"--vscode-scmGraph-historyItemRemoteRefColor\",\n\t\t\"--vscode-scrollbar-shadow\",\n\t\t\"--vscode-scrollbarSlider-activeBackground\",\n\t\t\"--vscode-scrollbarSlider-background\",\n\t\t\"--vscode-scrollbarSlider-hoverBackground\",\n\t\t\"--vscode-search-resultsInfoForeground\",\n\t\t\"--vscode-searchEditor-findMatchBackground\",\n\t\t\"--vscode-searchEditor-findMatchBorder\",\n\t\t\"--vscode-searchEditor-textInputBorder\",\n\t\t\"--vscode-selection-background\",\n\t\t\"--vscode-settings-checkboxBackground\",\n\t\t\"--vscode-settings-checkboxBorder\",\n\t\t\"--vscode-settings-checkboxForeground\",\n\t\t\"--vscode-settings-dropdownBackground\",\n\t\t\"--vscode-settings-dropdownBorder\",\n\t\t\"--vscode-settings-dropdownForeground\",\n\t\t\"--vscode-settings-dropdownListBorder\",\n\t\t\"--vscode-settings-focusedRowBackground\",\n\t\t\"--vscode-settings-focusedRowBorder\",\n\t\t\"--vscode-settings-headerBorder\",\n\t\t\"--vscode-settings-headerForeground\",\n\t\t\"--vscode-settings-modifiedItemIndicator\",\n\t\t\"--vscode-settings-numberInputBackground\",\n\t\t\"--vscode-settings-numberInputBorder\",\n\t\t\"--vscode-settings-numberInputForeground\",\n\t\t\"--vscode-settings-rowHoverBackground\",\n\t\t\"--vscode-settings-sashBorder\",\n\t\t\"--vscode-settings-settingsHeaderHoverForeground\",\n\t\t\"--vscode-settings-textInputBackground\",\n\t\t\"--vscode-settings-textInputBorder\",\n\t\t\"--vscode-settings-textInputForeground\",\n\t\t\"--vscode-sideBar-background\",\n\t\t\"--vscode-sideBar-border\",\n\t\t\"--vscode-sideBar-dropBackground\",\n\t\t\"--vscode-sideBar-foreground\",\n\t\t\"--vscode-sideBarActivityBarTop-border\",\n\t\t\"--vscode-sideBarSectionHeader-background\",\n\t\t\"--vscode-sideBarSectionHeader-border\",\n\t\t\"--vscode-sideBarSectionHeader-foreground\",\n\t\t\"--vscode-sideBarStickyScroll-background\",\n\t\t\"--vscode-sideBarStickyScroll-border\",\n\t\t\"--vscode-sideBarStickyScroll-shadow\",\n\t\t\"--vscode-sideBarTitle-background\",\n\t\t\"--vscode-sideBarTitle-border\",\n\t\t\"--vscode-sideBarTitle-foreground\",\n\t\t\"--vscode-sideBySideEditor-horizontalBorder\",\n\t\t\"--vscode-sideBySideEditor-verticalBorder\",\n\t\t\"--vscode-simpleFindWidget-sashBorder\",\n\t\t\"--vscode-statusBar-background\",\n\t\t\"--vscode-statusBar-border\",\n\t\t\"--vscode-statusBar-debuggingBackground\",\n\t\t\"--vscode-statusBar-debuggingBorder\",\n\t\t\"--vscode-statusBar-debuggingForeground\",\n\t\t\"--vscode-statusBar-focusBorder\",\n\t\t\"--vscode-statusBar-foreground\",\n\t\t\"--vscode-statusBar-noFolderBackground\",\n\t\t\"--vscode-statusBar-noFolderBorder\",\n\t\t\"--vscode-statusBar-noFolderForeground\",\n\t\t\"--vscode-statusBarItem-activeBackground\",\n\t\t\"--vscode-statusBarItem-compactHoverBackground\",\n\t\t\"--vscode-statusBarItem-errorBackground\",\n\t\t\"--vscode-statusBarItem-errorForeground\",\n\t\t\"--vscode-statusBarItem-errorHoverBackground\",\n\t\t\"--vscode-statusBarItem-errorHoverForeground\",\n\t\t\"--vscode-statusBarItem-focusBorder\",\n\t\t\"--vscode-statusBarItem-hoverBackground\",\n\t\t\"--vscode-statusBarItem-hoverForeground\",\n\t\t\"--vscode-statusBarItem-offlineBackground\",\n\t\t\"--vscode-statusBarItem-offlineForeground\",\n\t\t\"--vscode-statusBarItem-offlineHoverBackground\",\n\t\t\"--vscode-statusBarItem-offlineHoverForeground\",\n\t\t\"--vscode-statusBarItem-prominentBackground\",\n\t\t\"--vscode-statusBarItem-prominentForeground\",\n\t\t\"--vscode-statusBarItem-prominentHoverBackground\",\n\t\t\"--vscode-statusBarItem-prominentHoverForeground\",\n\t\t\"--vscode-statusBarItem-remoteBackground\",\n\t\t\"--vscode-statusBarItem-remoteForeground\",\n\t\t\"--vscode-statusBarItem-remoteHoverBackground\",\n\t\t\"--vscode-statusBarItem-remoteHoverForeground\",\n\t\t\"--vscode-statusBarItem-warningBackground\",\n\t\t\"--vscode-statusBarItem-warningForeground\",\n\t\t\"--vscode-statusBarItem-warningHoverBackground\",\n\t\t\"--vscode-statusBarItem-warningHoverForeground\",\n\t\t\"--vscode-symbolIcon-arrayForeground\",\n\t\t\"--vscode-symbolIcon-booleanForeground\",\n\t\t\"--vscode-symbolIcon-classForeground\",\n\t\t\"--vscode-symbolIcon-colorForeground\",\n\t\t\"--vscode-symbolIcon-constantForeground\",\n\t\t\"--vscode-symbolIcon-constructorForeground\",\n\t\t\"--vscode-symbolIcon-enumeratorForeground\",\n\t\t\"--vscode-symbolIcon-enumeratorMemberForeground\",\n\t\t\"--vscode-symbolIcon-eventForeground\",\n\t\t\"--vscode-symbolIcon-fieldForeground\",\n\t\t\"--vscode-symbolIcon-fileForeground\",\n\t\t\"--vscode-symbolIcon-folderForeground\",\n\t\t\"--vscode-symbolIcon-functionForeground\",\n\t\t\"--vscode-symbolIcon-interfaceForeground\",\n\t\t\"--vscode-symbolIcon-keyForeground\",\n\t\t\"--vscode-symbolIcon-keywordForeground\",\n\t\t\"--vscode-symbolIcon-methodForeground\",\n\t\t\"--vscode-symbolIcon-moduleForeground\",\n\t\t\"--vscode-symbolIcon-namespaceForeground\",\n\t\t\"--vscode-symbolIcon-nullForeground\",\n\t\t\"--vscode-symbolIcon-numberForeground\",\n\t\t\"--vscode-symbolIcon-objectForeground\",\n\t\t\"--vscode-symbolIcon-operatorForeground\",\n\t\t\"--vscode-symbolIcon-packageForeground\",\n\t\t\"--vscode-symbolIcon-propertyForeground\",\n\t\t\"--vscode-symbolIcon-referenceForeground\",\n\t\t\"--vscode-symbolIcon-snippetForeground\",\n\t\t\"--vscode-symbolIcon-stringForeground\",\n\t\t\"--vscode-symbolIcon-structForeground\",\n\t\t\"--vscode-symbolIcon-textForeground\",\n\t\t\"--vscode-symbolIcon-typeParameterForeground\",\n\t\t\"--vscode-symbolIcon-unitForeground\",\n\t\t\"--vscode-symbolIcon-variableForeground\",\n\t\t\"--vscode-tab-activeBackground\",\n\t\t\"--vscode-tab-activeBorder\",\n\t\t\"--vscode-tab-activeBorderTop\",\n\t\t\"--vscode-tab-activeForeground\",\n\t\t\"--vscode-tab-activeModifiedBorder\",\n\t\t\"--vscode-tab-border\",\n\t\t\"--vscode-tab-dragAndDropBorder\",\n\t\t\"--vscode-tab-hoverBackground\",\n\t\t\"--vscode-tab-hoverBorder\",\n\t\t\"--vscode-tab-hoverForeground\",\n\t\t\"--vscode-tab-inactiveBackground\",\n\t\t\"--vscode-tab-inactiveForeground\",\n\t\t\"--vscode-tab-inactiveModifiedBorder\",\n\t\t\"--vscode-tab-lastPinnedBorder\",\n\t\t\"--vscode-tab-selectedBackground\",\n\t\t\"--vscode-tab-selectedBorderTop\",\n\t\t\"--vscode-tab-selectedForeground\",\n\t\t\"--vscode-tab-unfocusedActiveBackground\",\n\t\t\"--vscode-tab-unfocusedActiveBorder\",\n\t\t\"--vscode-tab-unfocusedActiveBorderTop\",\n\t\t\"--vscode-tab-unfocusedActiveForeground\",\n\t\t\"--vscode-tab-unfocusedActiveModifiedBorder\",\n\t\t\"--vscode-tab-unfocusedHoverBackground\",\n\t\t\"--vscode-tab-unfocusedHoverBorder\",\n\t\t\"--vscode-tab-unfocusedHoverForeground\",\n\t\t\"--vscode-tab-unfocusedInactiveBackground\",\n\t\t\"--vscode-tab-unfocusedInactiveForeground\",\n\t\t\"--vscode-tab-unfocusedInactiveModifiedBorder\",\n\t\t\"--vscode-terminal-ansiBlack\",\n\t\t\"--vscode-terminal-ansiBlue\",\n\t\t\"--vscode-terminal-ansiBrightBlack\",\n\t\t\"--vscode-terminal-ansiBrightBlue\",\n\t\t\"--vscode-terminal-ansiBrightCyan\",\n\t\t\"--vscode-terminal-ansiBrightGreen\",\n\t\t\"--vscode-terminal-ansiBrightMagenta\",\n\t\t\"--vscode-terminal-ansiBrightRed\",\n\t\t\"--vscode-terminal-ansiBrightWhite\",\n\t\t\"--vscode-terminal-ansiBrightYellow\",\n\t\t\"--vscode-terminal-ansiCyan\",\n\t\t\"--vscode-terminal-ansiGreen\",\n\t\t\"--vscode-terminal-ansiMagenta\",\n\t\t\"--vscode-terminal-ansiRed\",\n\t\t\"--vscode-terminal-ansiWhite\",\n\t\t\"--vscode-terminal-ansiYellow\",\n\t\t\"--vscode-terminal-background\",\n\t\t\"--vscode-terminal-border\",\n\t\t\"--vscode-terminal-dropBackground\",\n\t\t\"--vscode-terminal-findMatchBackground\",\n\t\t\"--vscode-terminal-findMatchBorder\",\n\t\t\"--vscode-terminal-findMatchHighlightBackground\",\n\t\t\"--vscode-terminal-findMatchHighlightBorder\",\n\t\t\"--vscode-terminal-foreground\",\n\t\t\"--vscode-terminal-hoverHighlightBackground\",\n\t\t\"--vscode-terminal-inactiveSelectionBackground\",\n\t\t\"--vscode-terminal-initialHintForeground\",\n\t\t\"--vscode-terminal-selectionBackground\",\n\t\t\"--vscode-terminal-selectionForeground\",\n\t\t\"--vscode-terminal-tab-activeBorder\",\n\t\t\"--vscode-terminalCommandDecoration-defaultBackground\",\n\t\t\"--vscode-terminalCommandDecoration-errorBackground\",\n\t\t\"--vscode-terminalCommandDecoration-successBackground\",\n\t\t\"--vscode-terminalCommandGuide-foreground\",\n\t\t\"--vscode-terminalCursor-background\",\n\t\t\"--vscode-terminalCursor-foreground\",\n\t\t\"--vscode-terminalOverviewRuler-border\",\n\t\t\"--vscode-terminalOverviewRuler-cursorForeground\",\n\t\t\"--vscode-terminalOverviewRuler-findMatchForeground\",\n\t\t\"--vscode-terminalStickyScroll-background\",\n\t\t\"--vscode-terminalStickyScroll-border\",\n\t\t\"--vscode-terminalStickyScrollHover-background\",\n\t\t\"--vscode-terminalSymbolIcon-aliasForeground\",\n\t\t\"--vscode-terminalSymbolIcon-argumentForeground\",\n\t\t\"--vscode-terminalSymbolIcon-fileForeground\",\n\t\t\"--vscode-terminalSymbolIcon-flagForeground\",\n\t\t\"--vscode-terminalSymbolIcon-folderForeground\",\n\t\t\"--vscode-terminalSymbolIcon-inlineSuggestionForeground\",\n\t\t\"--vscode-terminalSymbolIcon-methodForeground\",\n\t\t\"--vscode-terminalSymbolIcon-optionForeground\",\n\t\t\"--vscode-terminalSymbolIcon-optionValueForeground\",\n\t\t\"--vscode-testing-coverCountBadgeBackground\",\n\t\t\"--vscode-testing-coverCountBadgeForeground\",\n\t\t\"--vscode-testing-coveredBackground\",\n\t\t\"--vscode-testing-coveredBorder\",\n\t\t\"--vscode-testing-coveredGutterBackground\",\n\t\t\"--vscode-testing-iconErrored\",\n\t\t\"--vscode-testing-iconErrored-retired\",\n\t\t\"--vscode-testing-iconFailed\",\n\t\t\"--vscode-testing-iconFailed-retired\",\n\t\t\"--vscode-testing-iconPassed\",\n\t\t\"--vscode-testing-iconPassed-retired\",\n\t\t\"--vscode-testing-iconQueued\",\n\t\t\"--vscode-testing-iconQueued-retired\",\n\t\t\"--vscode-testing-iconSkipped\",\n\t\t\"--vscode-testing-iconSkipped-retired\",\n\t\t\"--vscode-testing-iconUnset\",\n\t\t\"--vscode-testing-iconUnset-retired\",\n\t\t\"--vscode-testing-message-error-badgeBackground\",\n\t\t\"--vscode-testing-message-error-badgeBorder\",\n\t\t\"--vscode-testing-message-error-badgeForeground\",\n\t\t\"--vscode-testing-message-error-lineBackground\",\n\t\t\"--vscode-testing-message-info-decorationForeground\",\n\t\t\"--vscode-testing-message-info-lineBackground\",\n\t\t\"--vscode-testing-messagePeekBorder\",\n\t\t\"--vscode-testing-messagePeekHeaderBackground\",\n\t\t\"--vscode-testing-peekBorder\",\n\t\t\"--vscode-testing-peekHeaderBackground\",\n\t\t\"--vscode-testing-runAction\",\n\t\t\"--vscode-testing-uncoveredBackground\",\n\t\t\"--vscode-testing-uncoveredBorder\",\n\t\t\"--vscode-testing-uncoveredBranchBackground\",\n\t\t\"--vscode-testing-uncoveredGutterBackground\",\n\t\t\"--vscode-textBlockQuote-background\",\n\t\t\"--vscode-textBlockQuote-border\",\n\t\t\"--vscode-textCodeBlock-background\",\n\t\t\"--vscode-textLink-activeForeground\",\n\t\t\"--vscode-textLink-foreground\",\n\t\t\"--vscode-textPreformat-background\",\n\t\t\"--vscode-textPreformat-foreground\",\n\t\t\"--vscode-textSeparator-foreground\",\n\t\t\"--vscode-titleBar-activeBackground\",\n\t\t\"--vscode-titleBar-activeForeground\",\n\t\t\"--vscode-titleBar-border\",\n\t\t\"--vscode-titleBar-inactiveBackground\",\n\t\t\"--vscode-titleBar-inactiveForeground\",\n\t\t\"--vscode-toolbar-activeBackground\",\n\t\t\"--vscode-toolbar-hoverBackground\",\n\t\t\"--vscode-toolbar-hoverOutline\",\n\t\t\"--vscode-tree-inactiveIndentGuidesStroke\",\n\t\t\"--vscode-tree-indentGuidesStroke\",\n\t\t\"--vscode-tree-tableColumnsBorder\",\n\t\t\"--vscode-tree-tableOddRowsBackground\",\n\t\t\"--vscode-walkThrough-embeddedEditorBackground\",\n\t\t\"--vscode-walkthrough-stepTitle-foreground\",\n\t\t\"--vscode-welcomePage-background\",\n\t\t\"--vscode-welcomePage-progress-background\",\n\t\t\"--vscode-welcomePage-progress-foreground\",\n\t\t\"--vscode-welcomePage-tileBackground\",\n\t\t\"--vscode-welcomePage-tileBorder\",\n\t\t\"--vscode-welcomePage-tileHoverBackground\",\n\t\t\"--vscode-widget-border\",\n\t\t\"--vscode-widget-shadow\",\n\t\t\"--vscode-window-activeBorder\",\n\t\t\"--vscode-window-inactiveBorder\"\n\t],\n\t\"others\": [\n\t\t\"--background-dark\",\n\t\t\"--background-light\",\n\t\t\"--chat-editing-last-edit-shift\",\n\t\t\"--chat-current-response-min-height\",\n\t\t\"--dropdown-padding-bottom\",\n\t\t\"--dropdown-padding-top\",\n\t\t\"--inline-chat-frame-progress\",\n\t\t\"--inline-chat-hint-progress\",\n\t\t\"--insert-border-color\",\n\t\t\"--last-tab-margin-right\",\n\t\t\"--monaco-monospace-font\",\n\t\t\"--monaco-monospace-font\",\n\t\t\"--notebook-cell-input-preview-font-family\",\n\t\t\"--notebook-cell-input-preview-font-size\",\n\t\t\"--notebook-cell-output-font-size\",\n\t\t\"--notebook-diff-view-viewport-slider\",\n\t\t\"--notebook-find-horizontal-padding\",\n\t\t\"--notebook-find-width\",\n\t\t\"--notebook-editor-font-family\",\n\t\t\"--notebook-editor-font-size\",\n\t\t\"--notebook-editor-font-weight\",\n\t\t\"--outline-element-color\",\n\t\t\"--separator-border\",\n\t\t\"--status-border-top-color\",\n\t\t\"--tab-border-bottom-color\",\n\t\t\"--tab-border-top-color\",\n\t\t\"--tab-dirty-border-top-color\",\n\t\t\"--tabs-border-bottom-color\",\n\t\t\"--tab-sizing-current-width\",\n\t\t\"--tab-sizing-fixed-min-width\",\n\t\t\"--tab-sizing-fixed-max-width\",\n\t\t\"--editor-group-tab-height\",\n\t\t\"--editor-group-tabs-height\",\n\t\t\"--testMessageDecorationFontFamily\",\n\t\t\"--testMessageDecorationFontSize\",\n\t\t\"--title-border-bottom-color\",\n\t\t\"--title-wco-width\",\n\t\t\"--vscode-chat-list-background\",\n\t\t\"--vscode-editorCodeLens-fontFamily\",\n\t\t\"--vscode-editorCodeLens-fontFamilyDefault\",\n\t\t\"--vscode-editorCodeLens-fontFeatureSettings\",\n\t\t\"--vscode-editorCodeLens-fontSize\",\n\t\t\"--vscode-editorCodeLens-lineHeight\",\n\t\t\"--vscode-explorer-align-offset-margin-left\",\n\t\t\"--vscode-hover-maxWidth\",\n\t\t\"--vscode-hover-sourceWhiteSpace\",\n\t\t\"--vscode-hover-whiteSpace\",\n\t\t\"--vscode-editor-dictation-widget-height\",\n\t\t\"--vscode-editor-dictation-widget-width\",\n\t\t\"--vscode-interactive-session-foreground\",\n\t\t\"--vscode-interactive-result-editor-background-color\",\n\t\t\"--vscode-repl-font-family\",\n\t\t\"--vscode-repl-font-size-for-twistie\",\n\t\t\"--vscode-repl-font-size\",\n\t\t\"--vscode-repl-line-height\",\n\t\t\"--vscode-sash-hover-size\",\n\t\t\"--vscode-sash-size\",\n\t\t\"--vscode-testing-coverage-lineHeight\",\n\t\t\"--vscode-editorStickyScroll-scrollableWidth\",\n\t\t\"--vscode-editorStickyScroll-foldingOpacityTransition\",\n\t\t\"--window-border-color\",\n\t\t\"--vscode-parameterHintsWidget-editorFontFamily\",\n\t\t\"--vscode-parameterHintsWidget-editorFontFamilyDefault\",\n\t\t\"--workspace-trust-check-color\",\n\t\t\"--workspace-trust-selected-color\",\n\t\t\"--workspace-trust-unselected-color\",\n\t\t\"--workspace-trust-x-color\",\n\t\t\"--z-index-notebook-cell-bottom-toolbar-container\",\n\t\t\"--z-index-notebook-cell-editor-outline\",\n\t\t\"--z-index-notebook-cell-expand-part-button\",\n\t\t\"--z-index-notebook-cell-output-toolbar\",\n\t\t\"--z-index-notebook-cell-status\",\n\t\t\"--z-index-notebook-cell-toolbar-dropdown-active\",\n\t\t\"--z-index-notebook-cell-toolbar\",\n\t\t\"--z-index-notebook-folding-indicator\",\n\t\t\"--z-index-notebook-input-collapse-condicon\",\n\t\t\"--z-index-notebook-list-insertion-indicator\",\n\t\t\"--z-index-notebook-output\",\n\t\t\"--z-index-notebook-progress-bar\",\n\t\t\"--z-index-notebook-scrollbar\",\n\t\t\"--z-index-run-button-container\",\n\t\t\"--zoom-factor\",\n\t\t\"--test-bar-width\",\n\t\t\"--widget-color\",\n\t\t\"--text-link-decoration\",\n\t\t\"--vscode-action-item-auto-timeout\",\n\t\t\"--monaco-editor-warning-decoration\",\n\t\t\"--animation-opacity\"\n\t]\n}"
  },
  {
    "path": "build/lib/task.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.series = series;\nexports.parallel = parallel;\nexports.define = define;\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nfunction _isPromise(p) {\n    if (typeof p.then === 'function') {\n        return true;\n    }\n    return false;\n}\nfunction _renderTime(time) {\n    return `${Math.round(time)} ms`;\n}\nasync function _execute(task) {\n    const name = task.taskName || task.displayName || `<anonymous>`;\n    if (!task._tasks) {\n        (0, fancy_log_1.default)('Starting', ansi_colors_1.default.cyan(name), '...');\n    }\n    const startTime = process.hrtime();\n    await _doExecute(task);\n    const elapsedArr = process.hrtime(startTime);\n    const elapsedNanoseconds = (elapsedArr[0] * 1e9 + elapsedArr[1]);\n    if (!task._tasks) {\n        (0, fancy_log_1.default)(`Finished`, ansi_colors_1.default.cyan(name), 'after', ansi_colors_1.default.magenta(_renderTime(elapsedNanoseconds / 1e6)));\n    }\n}\nasync function _doExecute(task) {\n    // Always invoke as if it were a callback task\n    return new Promise((resolve, reject) => {\n        if (task.length === 1) {\n            // this is a callback task\n            task((err) => {\n                if (err) {\n                    return reject(err);\n                }\n                resolve();\n            });\n            return;\n        }\n        const taskResult = task();\n        if (typeof taskResult === 'undefined') {\n            // this is a sync task\n            resolve();\n            return;\n        }\n        if (_isPromise(taskResult)) {\n            // this is a promise returning task\n            taskResult.then(resolve, reject);\n            return;\n        }\n        // this is a stream returning task\n        taskResult.on('end', _ => resolve());\n        taskResult.on('error', err => reject(err));\n    });\n}\nfunction series(...tasks) {\n    const result = async () => {\n        for (let i = 0; i < tasks.length; i++) {\n            await _execute(tasks[i]);\n        }\n    };\n    result._tasks = tasks;\n    return result;\n}\nfunction parallel(...tasks) {\n    const result = async () => {\n        await Promise.all(tasks.map(t => _execute(t)));\n    };\n    result._tasks = tasks;\n    return result;\n}\nfunction define(name, task) {\n    if (task._tasks) {\n        // This is a composite task\n        const lastTask = task._tasks[task._tasks.length - 1];\n        if (lastTask._tasks || lastTask.taskName) {\n            // This is a composite task without a real task function\n            // => generate a fake task function\n            return define(name, series(task, () => Promise.resolve()));\n        }\n        lastTask.taskName = name;\n        task.displayName = name;\n        return task;\n    }\n    // This is a simple task\n    task.taskName = name;\n    task.displayName = name;\n    return task;\n}\n//# sourceMappingURL=task.js.map"
  },
  {
    "path": "build/lib/task.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fancyLog from 'fancy-log';\nimport ansiColors from 'ansi-colors';\n\nexport interface BaseTask {\n\tdisplayName?: string;\n\ttaskName?: string;\n\t_tasks?: Task[];\n}\nexport interface PromiseTask extends BaseTask {\n\t(): Promise<void>;\n}\nexport interface StreamTask extends BaseTask {\n\t(): NodeJS.ReadWriteStream;\n}\nexport interface CallbackTask extends BaseTask {\n\t(cb?: (err?: any) => void): void;\n}\n\nexport type Task = PromiseTask | StreamTask | CallbackTask;\n\nfunction _isPromise(p: Promise<void> | NodeJS.ReadWriteStream): p is Promise<void> {\n\tif (typeof (<any>p).then === 'function') {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction _renderTime(time: number): string {\n\treturn `${Math.round(time)} ms`;\n}\n\nasync function _execute(task: Task): Promise<void> {\n\tconst name = task.taskName || task.displayName || `<anonymous>`;\n\tif (!task._tasks) {\n\t\tfancyLog('Starting', ansiColors.cyan(name), '...');\n\t}\n\tconst startTime = process.hrtime();\n\tawait _doExecute(task);\n\tconst elapsedArr = process.hrtime(startTime);\n\tconst elapsedNanoseconds = (elapsedArr[0] * 1e9 + elapsedArr[1]);\n\tif (!task._tasks) {\n\t\tfancyLog(`Finished`, ansiColors.cyan(name), 'after', ansiColors.magenta(_renderTime(elapsedNanoseconds / 1e6)));\n\t}\n}\n\nasync function _doExecute(task: Task): Promise<void> {\n\t// Always invoke as if it were a callback task\n\treturn new Promise((resolve, reject) => {\n\t\tif (task.length === 1) {\n\t\t\t// this is a callback task\n\t\t\ttask((err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn reject(err);\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst taskResult = task();\n\n\t\tif (typeof taskResult === 'undefined') {\n\t\t\t// this is a sync task\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\n\t\tif (_isPromise(taskResult)) {\n\t\t\t// this is a promise returning task\n\t\t\ttaskResult.then(resolve, reject);\n\t\t\treturn;\n\t\t}\n\n\t\t// this is a stream returning task\n\t\ttaskResult.on('end', _ => resolve());\n\t\ttaskResult.on('error', err => reject(err));\n\t});\n}\n\nexport function series(...tasks: Task[]): PromiseTask {\n\tconst result = async () => {\n\t\tfor (let i = 0; i < tasks.length; i++) {\n\t\t\tawait _execute(tasks[i]);\n\t\t}\n\t};\n\tresult._tasks = tasks;\n\treturn result;\n}\n\nexport function parallel(...tasks: Task[]): PromiseTask {\n\tconst result = async () => {\n\t\tawait Promise.all(tasks.map(t => _execute(t)));\n\t};\n\tresult._tasks = tasks;\n\treturn result;\n}\n\nexport function define(name: string, task: Task): Task {\n\tif (task._tasks) {\n\t\t// This is a composite task\n\t\tconst lastTask = task._tasks[task._tasks.length - 1];\n\n\t\tif (lastTask._tasks || lastTask.taskName) {\n\t\t\t// This is a composite task without a real task function\n\t\t\t// => generate a fake task function\n\t\t\treturn define(name, series(task, () => Promise.resolve()));\n\t\t}\n\n\t\tlastTask.taskName = name;\n\t\ttask.displayName = name;\n\t\treturn task;\n\t}\n\n\t// This is a simple task\n\ttask.taskName = name;\n\ttask.displayName = name;\n\treturn task;\n}\n"
  },
  {
    "path": "build/lib/test/i18n.test.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert_1 = __importDefault(require(\"assert\"));\nconst i18n = __importStar(require(\"../i18n\"));\nsuite('XLF Parser Tests', () => {\n    const sampleXlf = '<?xml version=\"1.0\" encoding=\"utf-8\"?><xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\"><file original=\"vs/base/common/keybinding\" source-language=\"en\" datatype=\"plaintext\"><body><trans-unit id=\"key1\"><source xml:lang=\"en\">Key #1</source></trans-unit><trans-unit id=\"key2\"><source xml:lang=\"en\">Key #2 &amp;</source></trans-unit></body></file></xliff>';\n    const sampleTranslatedXlf = '<?xml version=\"1.0\" encoding=\"utf-8\"?><xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\"><file original=\"vs/base/common/keybinding\" source-language=\"en\" target-language=\"ru\" datatype=\"plaintext\"><body><trans-unit id=\"key1\"><source xml:lang=\"en\">Key #1</source><target>Кнопка #1</target></trans-unit><trans-unit id=\"key2\"><source xml:lang=\"en\">Key #2 &amp;</source><target>Кнопка #2 &amp;</target></trans-unit></body></file></xliff>';\n    const name = 'vs/base/common/keybinding';\n    const keys = ['key1', 'key2'];\n    const messages = ['Key #1', 'Key #2 &'];\n    const translatedMessages = { key1: 'Кнопка #1', key2: 'Кнопка #2 &' };\n    test('Keys & messages to XLF conversion', () => {\n        const xlf = new i18n.XLF('vscode-workbench');\n        xlf.addFile(name, keys, messages);\n        const xlfString = xlf.toString();\n        assert_1.default.strictEqual(xlfString.replace(/\\s{2,}/g, ''), sampleXlf);\n    });\n    test('XLF to keys & messages conversion', () => {\n        i18n.XLF.parse(sampleTranslatedXlf).then(function (resolvedFiles) {\n            assert_1.default.deepStrictEqual(resolvedFiles[0].messages, translatedMessages);\n            assert_1.default.strictEqual(resolvedFiles[0].name, name);\n        });\n    });\n    test('JSON file source path to Transifex resource match', () => {\n        const editorProject = 'vscode-editor', workbenchProject = 'vscode-workbench';\n        const platform = { name: 'vs/platform', project: editorProject }, editorContrib = { name: 'vs/editor/contrib', project: editorProject }, editor = { name: 'vs/editor', project: editorProject }, base = { name: 'vs/base', project: editorProject }, code = { name: 'vs/code', project: workbenchProject }, workbenchParts = { name: 'vs/workbench/contrib/html', project: workbenchProject }, workbenchServices = { name: 'vs/workbench/services/textfile', project: workbenchProject }, workbench = { name: 'vs/workbench', project: workbenchProject };\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/platform/actions/browser/menusExtensionPoint'), platform);\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/editor/contrib/clipboard/browser/clipboard'), editorContrib);\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/editor/common/modes/modesRegistry'), editor);\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/base/common/errorMessage'), base);\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/code/electron-main/window'), code);\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/workbench/contrib/html/browser/webview'), workbenchParts);\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/workbench/services/textfile/node/testFileService'), workbenchServices);\n        assert_1.default.deepStrictEqual(i18n.getResource('vs/workbench/browser/parts/panel/panelActions'), workbench);\n    });\n});\n//# sourceMappingURL=i18n.test.js.map"
  },
  {
    "path": "build/lib/test/i18n.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport assert from 'assert';\nimport * as i18n from '../i18n';\n\nsuite('XLF Parser Tests', () => {\n\tconst sampleXlf = '<?xml version=\"1.0\" encoding=\"utf-8\"?><xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\"><file original=\"vs/base/common/keybinding\" source-language=\"en\" datatype=\"plaintext\"><body><trans-unit id=\"key1\"><source xml:lang=\"en\">Key #1</source></trans-unit><trans-unit id=\"key2\"><source xml:lang=\"en\">Key #2 &amp;</source></trans-unit></body></file></xliff>';\n\tconst sampleTranslatedXlf = '<?xml version=\"1.0\" encoding=\"utf-8\"?><xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\"><file original=\"vs/base/common/keybinding\" source-language=\"en\" target-language=\"ru\" datatype=\"plaintext\"><body><trans-unit id=\"key1\"><source xml:lang=\"en\">Key #1</source><target>Кнопка #1</target></trans-unit><trans-unit id=\"key2\"><source xml:lang=\"en\">Key #2 &amp;</source><target>Кнопка #2 &amp;</target></trans-unit></body></file></xliff>';\n\tconst name = 'vs/base/common/keybinding';\n\tconst keys = ['key1', 'key2'];\n\tconst messages = ['Key #1', 'Key #2 &'];\n\tconst translatedMessages = { key1: 'Кнопка #1', key2: 'Кнопка #2 &' };\n\n\ttest('Keys & messages to XLF conversion', () => {\n\t\tconst xlf = new i18n.XLF('vscode-workbench');\n\t\txlf.addFile(name, keys, messages);\n\t\tconst xlfString = xlf.toString();\n\n\t\tassert.strictEqual(xlfString.replace(/\\s{2,}/g, ''), sampleXlf);\n\t});\n\n\ttest('XLF to keys & messages conversion', () => {\n\t\ti18n.XLF.parse(sampleTranslatedXlf).then(function (resolvedFiles) {\n\t\t\tassert.deepStrictEqual(resolvedFiles[0].messages, translatedMessages);\n\t\t\tassert.strictEqual(resolvedFiles[0].name, name);\n\t\t});\n\t});\n\n\ttest('JSON file source path to Transifex resource match', () => {\n\t\tconst editorProject: string = 'vscode-editor',\n\t\t\tworkbenchProject: string = 'vscode-workbench';\n\n\t\tconst platform: i18n.Resource = { name: 'vs/platform', project: editorProject },\n\t\t\teditorContrib = { name: 'vs/editor/contrib', project: editorProject },\n\t\t\teditor = { name: 'vs/editor', project: editorProject },\n\t\t\tbase = { name: 'vs/base', project: editorProject },\n\t\t\tcode = { name: 'vs/code', project: workbenchProject },\n\t\t\tworkbenchParts = { name: 'vs/workbench/contrib/html', project: workbenchProject },\n\t\t\tworkbenchServices = { name: 'vs/workbench/services/textfile', project: workbenchProject },\n\t\t\tworkbench = { name: 'vs/workbench', project: workbenchProject };\n\n\t\tassert.deepStrictEqual(i18n.getResource('vs/platform/actions/browser/menusExtensionPoint'), platform);\n\t\tassert.deepStrictEqual(i18n.getResource('vs/editor/contrib/clipboard/browser/clipboard'), editorContrib);\n\t\tassert.deepStrictEqual(i18n.getResource('vs/editor/common/modes/modesRegistry'), editor);\n\t\tassert.deepStrictEqual(i18n.getResource('vs/base/common/errorMessage'), base);\n\t\tassert.deepStrictEqual(i18n.getResource('vs/code/electron-main/window'), code);\n\t\tassert.deepStrictEqual(i18n.getResource('vs/workbench/contrib/html/browser/webview'), workbenchParts);\n\t\tassert.deepStrictEqual(i18n.getResource('vs/workbench/services/textfile/node/testFileService'), workbenchServices);\n\t\tassert.deepStrictEqual(i18n.getResource('vs/workbench/browser/parts/panel/panelActions'), workbench);\n\t});\n});\n"
  },
  {
    "path": "build/lib/treeshaking.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShakeLevel = void 0;\nexports.toStringShakeLevel = toStringShakeLevel;\nexports.shake = shake;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst TYPESCRIPT_LIB_FOLDER = path_1.default.dirname(require.resolve('typescript/lib/lib.d.ts'));\nvar ShakeLevel;\n(function (ShakeLevel) {\n    ShakeLevel[ShakeLevel[\"Files\"] = 0] = \"Files\";\n    ShakeLevel[ShakeLevel[\"InnerFile\"] = 1] = \"InnerFile\";\n    ShakeLevel[ShakeLevel[\"ClassMembers\"] = 2] = \"ClassMembers\";\n})(ShakeLevel || (exports.ShakeLevel = ShakeLevel = {}));\nfunction toStringShakeLevel(shakeLevel) {\n    switch (shakeLevel) {\n        case 0 /* ShakeLevel.Files */:\n            return 'Files (0)';\n        case 1 /* ShakeLevel.InnerFile */:\n            return 'InnerFile (1)';\n        case 2 /* ShakeLevel.ClassMembers */:\n            return 'ClassMembers (2)';\n    }\n}\nfunction printDiagnostics(options, diagnostics) {\n    for (const diag of diagnostics) {\n        let result = '';\n        if (diag.file) {\n            result += `${path_1.default.join(options.sourcesRoot, diag.file.fileName)}`;\n        }\n        if (diag.file && diag.start) {\n            const location = diag.file.getLineAndCharacterOfPosition(diag.start);\n            result += `:${location.line + 1}:${location.character}`;\n        }\n        result += ` - ` + JSON.stringify(diag.messageText);\n        console.log(result);\n    }\n}\nfunction shake(options) {\n    const ts = require('typescript');\n    const languageService = createTypeScriptLanguageService(ts, options);\n    const program = languageService.getProgram();\n    const globalDiagnostics = program.getGlobalDiagnostics();\n    if (globalDiagnostics.length > 0) {\n        printDiagnostics(options, globalDiagnostics);\n        throw new Error(`Compilation Errors encountered.`);\n    }\n    const syntacticDiagnostics = program.getSyntacticDiagnostics();\n    if (syntacticDiagnostics.length > 0) {\n        printDiagnostics(options, syntacticDiagnostics);\n        throw new Error(`Compilation Errors encountered.`);\n    }\n    const semanticDiagnostics = program.getSemanticDiagnostics();\n    if (semanticDiagnostics.length > 0) {\n        printDiagnostics(options, semanticDiagnostics);\n        throw new Error(`Compilation Errors encountered.`);\n    }\n    markNodes(ts, languageService, options);\n    return generateResult(ts, languageService, options.shakeLevel);\n}\n//#region Discovery, LanguageService & Setup\nfunction createTypeScriptLanguageService(ts, options) {\n    // Discover referenced files\n    const FILES = discoverAndReadFiles(ts, options);\n    // Add fake usage files\n    options.inlineEntryPoints.forEach((inlineEntryPoint, index) => {\n        FILES[`inlineEntryPoint.${index}.ts`] = inlineEntryPoint;\n    });\n    // Add additional typings\n    options.typings.forEach((typing) => {\n        const filePath = path_1.default.join(options.sourcesRoot, typing);\n        FILES[typing] = fs_1.default.readFileSync(filePath).toString();\n    });\n    // Resolve libs\n    const RESOLVED_LIBS = processLibFiles(ts, options);\n    const compilerOptions = ts.convertCompilerOptionsFromJson(options.compilerOptions, options.sourcesRoot).options;\n    const host = new TypeScriptLanguageServiceHost(ts, RESOLVED_LIBS, FILES, compilerOptions);\n    return ts.createLanguageService(host);\n}\n/**\n * Read imports and follow them until all files have been handled\n */\nfunction discoverAndReadFiles(ts, options) {\n    const FILES = {};\n    const in_queue = Object.create(null);\n    const queue = [];\n    const enqueue = (moduleId) => {\n        // To make the treeshaker work on windows...\n        moduleId = moduleId.replace(/\\\\/g, '/');\n        if (in_queue[moduleId]) {\n            return;\n        }\n        in_queue[moduleId] = true;\n        queue.push(moduleId);\n    };\n    options.entryPoints.forEach((entryPoint) => enqueue(entryPoint));\n    while (queue.length > 0) {\n        const moduleId = queue.shift();\n        let redirectedModuleId = moduleId;\n        if (options.redirects[moduleId]) {\n            redirectedModuleId = options.redirects[moduleId];\n        }\n        const dts_filename = path_1.default.join(options.sourcesRoot, redirectedModuleId + '.d.ts');\n        if (fs_1.default.existsSync(dts_filename)) {\n            const dts_filecontents = fs_1.default.readFileSync(dts_filename).toString();\n            FILES[`${moduleId}.d.ts`] = dts_filecontents;\n            continue;\n        }\n        const js_filename = path_1.default.join(options.sourcesRoot, redirectedModuleId + '.js');\n        if (fs_1.default.existsSync(js_filename)) {\n            // This is an import for a .js file, so ignore it...\n            continue;\n        }\n        const ts_filename = path_1.default.join(options.sourcesRoot, redirectedModuleId + '.ts');\n        const ts_filecontents = fs_1.default.readFileSync(ts_filename).toString();\n        const info = ts.preProcessFile(ts_filecontents);\n        for (let i = info.importedFiles.length - 1; i >= 0; i--) {\n            const importedFileName = info.importedFiles[i].fileName;\n            if (options.importIgnorePattern.test(importedFileName)) {\n                // Ignore *.css imports\n                continue;\n            }\n            let importedModuleId = importedFileName;\n            if (/(^\\.\\/)|(^\\.\\.\\/)/.test(importedModuleId)) {\n                importedModuleId = path_1.default.join(path_1.default.dirname(moduleId), importedModuleId);\n                if (importedModuleId.endsWith('.js')) { // ESM: code imports require to be relative and have a '.js' file extension\n                    importedModuleId = importedModuleId.substr(0, importedModuleId.length - 3);\n                }\n            }\n            enqueue(importedModuleId);\n        }\n        FILES[`${moduleId}.ts`] = ts_filecontents;\n    }\n    return FILES;\n}\n/**\n * Read lib files and follow lib references\n */\nfunction processLibFiles(ts, options) {\n    const stack = [...options.compilerOptions.lib];\n    const result = {};\n    while (stack.length > 0) {\n        const filename = `lib.${stack.shift().toLowerCase()}.d.ts`;\n        const key = `defaultLib:${filename}`;\n        if (!result[key]) {\n            // add this file\n            const filepath = path_1.default.join(TYPESCRIPT_LIB_FOLDER, filename);\n            const sourceText = fs_1.default.readFileSync(filepath).toString();\n            result[key] = sourceText;\n            // precess dependencies and \"recurse\"\n            const info = ts.preProcessFile(sourceText);\n            for (const ref of info.libReferenceDirectives) {\n                stack.push(ref.fileName);\n            }\n        }\n    }\n    return result;\n}\n/**\n * A TypeScript language service host\n */\nclass TypeScriptLanguageServiceHost {\n    _ts;\n    _libs;\n    _files;\n    _compilerOptions;\n    constructor(ts, libs, files, compilerOptions) {\n        this._ts = ts;\n        this._libs = libs;\n        this._files = files;\n        this._compilerOptions = compilerOptions;\n    }\n    // --- language service host ---------------\n    getCompilationSettings() {\n        return this._compilerOptions;\n    }\n    getScriptFileNames() {\n        return ([]\n            .concat(Object.keys(this._libs))\n            .concat(Object.keys(this._files)));\n    }\n    getScriptVersion(_fileName) {\n        return '1';\n    }\n    getProjectVersion() {\n        return '1';\n    }\n    getScriptSnapshot(fileName) {\n        if (this._files.hasOwnProperty(fileName)) {\n            return this._ts.ScriptSnapshot.fromString(this._files[fileName]);\n        }\n        else if (this._libs.hasOwnProperty(fileName)) {\n            return this._ts.ScriptSnapshot.fromString(this._libs[fileName]);\n        }\n        else {\n            return this._ts.ScriptSnapshot.fromString('');\n        }\n    }\n    getScriptKind(_fileName) {\n        return this._ts.ScriptKind.TS;\n    }\n    getCurrentDirectory() {\n        return '';\n    }\n    getDefaultLibFileName(_options) {\n        return 'defaultLib:lib.d.ts';\n    }\n    isDefaultLibFileName(fileName) {\n        return fileName === this.getDefaultLibFileName(this._compilerOptions);\n    }\n    readFile(path, _encoding) {\n        return this._files[path] || this._libs[path];\n    }\n    fileExists(path) {\n        return path in this._files || path in this._libs;\n    }\n}\n//#endregion\n//#region Tree Shaking\nvar NodeColor;\n(function (NodeColor) {\n    NodeColor[NodeColor[\"White\"] = 0] = \"White\";\n    NodeColor[NodeColor[\"Gray\"] = 1] = \"Gray\";\n    NodeColor[NodeColor[\"Black\"] = 2] = \"Black\";\n})(NodeColor || (NodeColor = {}));\nfunction getColor(node) {\n    return node.$$$color || 0 /* NodeColor.White */;\n}\nfunction setColor(node, color) {\n    node.$$$color = color;\n}\nfunction markNeededSourceFile(node) {\n    node.$$$neededSourceFile = true;\n}\nfunction isNeededSourceFile(node) {\n    return Boolean(node.$$$neededSourceFile);\n}\nfunction nodeOrParentIsBlack(node) {\n    while (node) {\n        const color = getColor(node);\n        if (color === 2 /* NodeColor.Black */) {\n            return true;\n        }\n        node = node.parent;\n    }\n    return false;\n}\nfunction nodeOrChildIsBlack(node) {\n    if (getColor(node) === 2 /* NodeColor.Black */) {\n        return true;\n    }\n    for (const child of node.getChildren()) {\n        if (nodeOrChildIsBlack(child)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction isSymbolWithDeclarations(symbol) {\n    return !!(symbol && symbol.declarations);\n}\nfunction isVariableStatementWithSideEffects(ts, node) {\n    if (!ts.isVariableStatement(node)) {\n        return false;\n    }\n    let hasSideEffects = false;\n    const visitNode = (node) => {\n        if (hasSideEffects) {\n            // no need to go on\n            return;\n        }\n        if (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n            // TODO: assuming `createDecorator` and `refineServiceDecorator` calls are side-effect free\n            const isSideEffectFree = /(createDecorator|refineServiceDecorator)/.test(node.expression.getText());\n            if (!isSideEffectFree) {\n                hasSideEffects = true;\n            }\n        }\n        node.forEachChild(visitNode);\n    };\n    node.forEachChild(visitNode);\n    return hasSideEffects;\n}\nfunction isStaticMemberWithSideEffects(ts, node) {\n    if (!ts.isPropertyDeclaration(node)) {\n        return false;\n    }\n    if (!node.modifiers) {\n        return false;\n    }\n    if (!node.modifiers.some(mod => mod.kind === ts.SyntaxKind.StaticKeyword)) {\n        return false;\n    }\n    let hasSideEffects = false;\n    const visitNode = (node) => {\n        if (hasSideEffects) {\n            // no need to go on\n            return;\n        }\n        if (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n            hasSideEffects = true;\n        }\n        node.forEachChild(visitNode);\n    };\n    node.forEachChild(visitNode);\n    return hasSideEffects;\n}\nfunction markNodes(ts, languageService, options) {\n    const program = languageService.getProgram();\n    if (!program) {\n        throw new Error('Could not get program from language service');\n    }\n    if (options.shakeLevel === 0 /* ShakeLevel.Files */) {\n        // Mark all source files Black\n        program.getSourceFiles().forEach((sourceFile) => {\n            setColor(sourceFile, 2 /* NodeColor.Black */);\n        });\n        return;\n    }\n    const black_queue = [];\n    const gray_queue = [];\n    const export_import_queue = [];\n    const sourceFilesLoaded = {};\n    function enqueueTopLevelModuleStatements(sourceFile) {\n        sourceFile.forEachChild((node) => {\n            if (ts.isImportDeclaration(node)) {\n                if (!node.importClause && ts.isStringLiteral(node.moduleSpecifier)) {\n                    setColor(node, 2 /* NodeColor.Black */);\n                    enqueueImport(node, node.moduleSpecifier.text);\n                }\n                return;\n            }\n            if (ts.isExportDeclaration(node)) {\n                if (!node.exportClause && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) {\n                    // export * from \"foo\";\n                    setColor(node, 2 /* NodeColor.Black */);\n                    enqueueImport(node, node.moduleSpecifier.text);\n                }\n                if (node.exportClause && ts.isNamedExports(node.exportClause)) {\n                    for (const exportSpecifier of node.exportClause.elements) {\n                        export_import_queue.push(exportSpecifier);\n                    }\n                }\n                return;\n            }\n            if (isVariableStatementWithSideEffects(ts, node)) {\n                enqueue_black(node);\n            }\n            if (ts.isExpressionStatement(node)\n                || ts.isIfStatement(node)\n                || ts.isIterationStatement(node, true)\n                || ts.isExportAssignment(node)) {\n                enqueue_black(node);\n            }\n            if (ts.isImportEqualsDeclaration(node)) {\n                if (/export/.test(node.getFullText(sourceFile))) {\n                    // e.g. \"export import Severity = BaseSeverity;\"\n                    enqueue_black(node);\n                }\n            }\n        });\n    }\n    /**\n     * Return the parent of `node` which is an ImportDeclaration\n     */\n    function findParentImportDeclaration(node) {\n        let _node = node;\n        do {\n            if (ts.isImportDeclaration(_node)) {\n                return _node;\n            }\n            _node = _node.parent;\n        } while (_node);\n        return null;\n    }\n    function enqueue_gray(node) {\n        if (nodeOrParentIsBlack(node) || getColor(node) === 1 /* NodeColor.Gray */) {\n            return;\n        }\n        setColor(node, 1 /* NodeColor.Gray */);\n        gray_queue.push(node);\n    }\n    function enqueue_black(node) {\n        const previousColor = getColor(node);\n        if (previousColor === 2 /* NodeColor.Black */) {\n            return;\n        }\n        if (previousColor === 1 /* NodeColor.Gray */) {\n            // remove from gray queue\n            gray_queue.splice(gray_queue.indexOf(node), 1);\n            setColor(node, 0 /* NodeColor.White */);\n            // add to black queue\n            enqueue_black(node);\n            // move from one queue to the other\n            // black_queue.push(node);\n            // setColor(node, NodeColor.Black);\n            return;\n        }\n        if (nodeOrParentIsBlack(node)) {\n            return;\n        }\n        const fileName = node.getSourceFile().fileName;\n        if (/^defaultLib:/.test(fileName) || /\\.d\\.ts$/.test(fileName)) {\n            setColor(node, 2 /* NodeColor.Black */);\n            return;\n        }\n        const sourceFile = node.getSourceFile();\n        if (!sourceFilesLoaded[sourceFile.fileName]) {\n            sourceFilesLoaded[sourceFile.fileName] = true;\n            enqueueTopLevelModuleStatements(sourceFile);\n        }\n        if (ts.isSourceFile(node)) {\n            return;\n        }\n        setColor(node, 2 /* NodeColor.Black */);\n        black_queue.push(node);\n        if (options.shakeLevel === 2 /* ShakeLevel.ClassMembers */ && (ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isPropertySignature(node) || ts.isPropertyDeclaration(node) || ts.isGetAccessor(node) || ts.isSetAccessor(node))) {\n            const references = languageService.getReferencesAtPosition(node.getSourceFile().fileName, node.name.pos + node.name.getLeadingTriviaWidth());\n            if (references) {\n                for (let i = 0, len = references.length; i < len; i++) {\n                    const reference = references[i];\n                    const referenceSourceFile = program.getSourceFile(reference.fileName);\n                    if (!referenceSourceFile) {\n                        continue;\n                    }\n                    const referenceNode = getTokenAtPosition(ts, referenceSourceFile, reference.textSpan.start, false, false);\n                    if (ts.isMethodDeclaration(referenceNode.parent)\n                        || ts.isPropertyDeclaration(referenceNode.parent)\n                        || ts.isGetAccessor(referenceNode.parent)\n                        || ts.isSetAccessor(referenceNode.parent)) {\n                        enqueue_gray(referenceNode.parent);\n                    }\n                }\n            }\n        }\n    }\n    function enqueueFile(filename) {\n        const sourceFile = program.getSourceFile(filename);\n        if (!sourceFile) {\n            console.warn(`Cannot find source file ${filename}`);\n            return;\n        }\n        // This source file should survive even if it is empty\n        markNeededSourceFile(sourceFile);\n        enqueue_black(sourceFile);\n    }\n    function enqueueImport(node, importText) {\n        if (options.importIgnorePattern.test(importText)) {\n            // this import should be ignored\n            return;\n        }\n        const nodeSourceFile = node.getSourceFile();\n        let fullPath;\n        if (/(^\\.\\/)|(^\\.\\.\\/)/.test(importText)) {\n            if (importText.endsWith('.js')) { // ESM: code imports require to be relative and to have a '.js' file extension\n                importText = importText.substr(0, importText.length - 3);\n            }\n            fullPath = path_1.default.join(path_1.default.dirname(nodeSourceFile.fileName), importText) + '.ts';\n        }\n        else {\n            fullPath = importText + '.ts';\n        }\n        enqueueFile(fullPath);\n    }\n    options.entryPoints.forEach(moduleId => enqueueFile(moduleId + '.ts'));\n    // Add fake usage files\n    options.inlineEntryPoints.forEach((_, index) => enqueueFile(`inlineEntryPoint.${index}.ts`));\n    let step = 0;\n    const checker = program.getTypeChecker();\n    while (black_queue.length > 0 || gray_queue.length > 0) {\n        ++step;\n        let node;\n        if (step % 100 === 0) {\n            console.log(`Treeshaking - ${Math.floor(100 * step / (step + black_queue.length + gray_queue.length))}% - ${step}/${step + black_queue.length + gray_queue.length} (${black_queue.length}, ${gray_queue.length})`);\n        }\n        if (black_queue.length === 0) {\n            for (let i = 0; i < gray_queue.length; i++) {\n                const node = gray_queue[i];\n                const nodeParent = node.parent;\n                if ((ts.isClassDeclaration(nodeParent) || ts.isInterfaceDeclaration(nodeParent)) && nodeOrChildIsBlack(nodeParent)) {\n                    gray_queue.splice(i, 1);\n                    black_queue.push(node);\n                    setColor(node, 2 /* NodeColor.Black */);\n                    i--;\n                }\n            }\n        }\n        if (black_queue.length > 0) {\n            node = black_queue.shift();\n        }\n        else {\n            // only gray nodes remaining...\n            break;\n        }\n        const nodeSourceFile = node.getSourceFile();\n        const loop = (node) => {\n            const symbols = getRealNodeSymbol(ts, checker, node);\n            for (const { symbol, symbolImportNode } of symbols) {\n                if (symbolImportNode) {\n                    setColor(symbolImportNode, 2 /* NodeColor.Black */);\n                    const importDeclarationNode = findParentImportDeclaration(symbolImportNode);\n                    if (importDeclarationNode && ts.isStringLiteral(importDeclarationNode.moduleSpecifier)) {\n                        enqueueImport(importDeclarationNode, importDeclarationNode.moduleSpecifier.text);\n                    }\n                }\n                if (isSymbolWithDeclarations(symbol) && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) {\n                    for (let i = 0, len = symbol.declarations.length; i < len; i++) {\n                        const declaration = symbol.declarations[i];\n                        if (ts.isSourceFile(declaration)) {\n                            // Do not enqueue full source files\n                            // (they can be the declaration of a module import)\n                            continue;\n                        }\n                        if (options.shakeLevel === 2 /* ShakeLevel.ClassMembers */ && (ts.isClassDeclaration(declaration) || ts.isInterfaceDeclaration(declaration)) && !isLocalCodeExtendingOrInheritingFromDefaultLibSymbol(ts, program, checker, declaration)) {\n                            enqueue_black(declaration.name);\n                            for (let j = 0; j < declaration.members.length; j++) {\n                                const member = declaration.members[j];\n                                const memberName = member.name ? member.name.getText() : null;\n                                if (ts.isConstructorDeclaration(member)\n                                    || ts.isConstructSignatureDeclaration(member)\n                                    || ts.isIndexSignatureDeclaration(member)\n                                    || ts.isCallSignatureDeclaration(member)\n                                    || memberName === '[Symbol.iterator]'\n                                    || memberName === '[Symbol.toStringTag]'\n                                    || memberName === 'toJSON'\n                                    || memberName === 'toString'\n                                    || memberName === 'dispose' // TODO: keeping all `dispose` methods\n                                    || /^_(.*)Brand$/.test(memberName || '') // TODO: keeping all members ending with `Brand`...\n                                ) {\n                                    enqueue_black(member);\n                                }\n                                if (isStaticMemberWithSideEffects(ts, member)) {\n                                    enqueue_black(member);\n                                }\n                            }\n                            // queue the heritage clauses\n                            if (declaration.heritageClauses) {\n                                for (const heritageClause of declaration.heritageClauses) {\n                                    enqueue_black(heritageClause);\n                                }\n                            }\n                        }\n                        else {\n                            enqueue_black(declaration);\n                        }\n                    }\n                }\n            }\n            node.forEachChild(loop);\n        };\n        node.forEachChild(loop);\n    }\n    while (export_import_queue.length > 0) {\n        const node = export_import_queue.shift();\n        if (nodeOrParentIsBlack(node)) {\n            continue;\n        }\n        const symbol = node.symbol;\n        if (!symbol) {\n            continue;\n        }\n        const aliased = checker.getAliasedSymbol(symbol);\n        if (aliased.declarations && aliased.declarations.length > 0) {\n            if (nodeOrParentIsBlack(aliased.declarations[0]) || nodeOrChildIsBlack(aliased.declarations[0])) {\n                setColor(node, 2 /* NodeColor.Black */);\n            }\n        }\n    }\n}\nfunction nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol) {\n    for (let i = 0, len = symbol.declarations.length; i < len; i++) {\n        const declaration = symbol.declarations[i];\n        const declarationSourceFile = declaration.getSourceFile();\n        if (nodeSourceFile === declarationSourceFile) {\n            if (declaration.pos <= node.pos && node.end <= declaration.end) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nfunction generateResult(ts, languageService, shakeLevel) {\n    const program = languageService.getProgram();\n    if (!program) {\n        throw new Error('Could not get program from language service');\n    }\n    const result = {};\n    const writeFile = (filePath, contents) => {\n        result[filePath] = contents;\n    };\n    program.getSourceFiles().forEach((sourceFile) => {\n        const fileName = sourceFile.fileName;\n        if (/^defaultLib:/.test(fileName)) {\n            return;\n        }\n        const destination = fileName;\n        if (/\\.d\\.ts$/.test(fileName)) {\n            if (nodeOrChildIsBlack(sourceFile)) {\n                writeFile(destination, sourceFile.text);\n            }\n            return;\n        }\n        const text = sourceFile.text;\n        let result = '';\n        function keep(node) {\n            result += text.substring(node.pos, node.end);\n        }\n        function write(data) {\n            result += data;\n        }\n        function writeMarkedNodes(node) {\n            if (getColor(node) === 2 /* NodeColor.Black */) {\n                return keep(node);\n            }\n            // Always keep certain top-level statements\n            if (ts.isSourceFile(node.parent)) {\n                if (ts.isExpressionStatement(node) && ts.isStringLiteral(node.expression) && node.expression.text === 'use strict') {\n                    return keep(node);\n                }\n                if (ts.isVariableStatement(node) && nodeOrChildIsBlack(node)) {\n                    return keep(node);\n                }\n            }\n            // Keep the entire import in import * as X cases\n            if (ts.isImportDeclaration(node)) {\n                if (node.importClause && node.importClause.namedBindings) {\n                    if (ts.isNamespaceImport(node.importClause.namedBindings)) {\n                        if (getColor(node.importClause.namedBindings) === 2 /* NodeColor.Black */) {\n                            return keep(node);\n                        }\n                    }\n                    else {\n                        const survivingImports = [];\n                        for (const importNode of node.importClause.namedBindings.elements) {\n                            if (getColor(importNode) === 2 /* NodeColor.Black */) {\n                                survivingImports.push(importNode.getFullText(sourceFile));\n                            }\n                        }\n                        const leadingTriviaWidth = node.getLeadingTriviaWidth();\n                        const leadingTrivia = sourceFile.text.substr(node.pos, leadingTriviaWidth);\n                        if (survivingImports.length > 0) {\n                            if (node.importClause && node.importClause.name && getColor(node.importClause) === 2 /* NodeColor.Black */) {\n                                return write(`${leadingTrivia}import ${node.importClause.name.text}, {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);\n                            }\n                            return write(`${leadingTrivia}import {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);\n                        }\n                        else {\n                            if (node.importClause && node.importClause.name && getColor(node.importClause) === 2 /* NodeColor.Black */) {\n                                return write(`${leadingTrivia}import ${node.importClause.name.text} from${node.moduleSpecifier.getFullText(sourceFile)};`);\n                            }\n                        }\n                    }\n                }\n                else {\n                    if (node.importClause && getColor(node.importClause) === 2 /* NodeColor.Black */) {\n                        return keep(node);\n                    }\n                }\n            }\n            if (ts.isExportDeclaration(node)) {\n                if (node.exportClause && node.moduleSpecifier && ts.isNamedExports(node.exportClause)) {\n                    const survivingExports = [];\n                    for (const exportSpecifier of node.exportClause.elements) {\n                        if (getColor(exportSpecifier) === 2 /* NodeColor.Black */) {\n                            survivingExports.push(exportSpecifier.getFullText(sourceFile));\n                        }\n                    }\n                    const leadingTriviaWidth = node.getLeadingTriviaWidth();\n                    const leadingTrivia = sourceFile.text.substr(node.pos, leadingTriviaWidth);\n                    if (survivingExports.length > 0) {\n                        return write(`${leadingTrivia}export {${survivingExports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);\n                    }\n                }\n            }\n            if (shakeLevel === 2 /* ShakeLevel.ClassMembers */ && (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) && nodeOrChildIsBlack(node)) {\n                let toWrite = node.getFullText();\n                for (let i = node.members.length - 1; i >= 0; i--) {\n                    const member = node.members[i];\n                    if (getColor(member) === 2 /* NodeColor.Black */ || !member.name) {\n                        // keep method\n                        continue;\n                    }\n                    const pos = member.pos - node.pos;\n                    const end = member.end - node.pos;\n                    toWrite = toWrite.substring(0, pos) + toWrite.substring(end);\n                }\n                return write(toWrite);\n            }\n            if (ts.isFunctionDeclaration(node)) {\n                // Do not go inside functions if they haven't been marked\n                return;\n            }\n            node.forEachChild(writeMarkedNodes);\n        }\n        if (getColor(sourceFile) !== 2 /* NodeColor.Black */) {\n            if (!nodeOrChildIsBlack(sourceFile)) {\n                // none of the elements are reachable\n                if (isNeededSourceFile(sourceFile)) {\n                    // this source file must be written, even if nothing is used from it\n                    // because there is an import somewhere for it.\n                    // However, TS complains with empty files with the error \"x\" is not a module,\n                    // so we will export a dummy variable\n                    result = 'export const __dummy = 0;';\n                }\n                else {\n                    // don't write this file at all!\n                    return;\n                }\n            }\n            else {\n                sourceFile.forEachChild(writeMarkedNodes);\n                result += sourceFile.endOfFileToken.getFullText(sourceFile);\n            }\n        }\n        else {\n            result = text;\n        }\n        writeFile(destination, result);\n    });\n    return result;\n}\n//#endregion\n//#region Utils\nfunction isLocalCodeExtendingOrInheritingFromDefaultLibSymbol(ts, program, checker, declaration) {\n    if (!program.isSourceFileDefaultLibrary(declaration.getSourceFile()) && declaration.heritageClauses) {\n        for (const heritageClause of declaration.heritageClauses) {\n            for (const type of heritageClause.types) {\n                const symbol = findSymbolFromHeritageType(ts, checker, type);\n                if (symbol) {\n                    const decl = symbol.valueDeclaration || (symbol.declarations && symbol.declarations[0]);\n                    if (decl && program.isSourceFileDefaultLibrary(decl.getSourceFile())) {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    return false;\n}\nfunction findSymbolFromHeritageType(ts, checker, type) {\n    if (ts.isExpressionWithTypeArguments(type)) {\n        return findSymbolFromHeritageType(ts, checker, type.expression);\n    }\n    if (ts.isIdentifier(type)) {\n        const tmp = getRealNodeSymbol(ts, checker, type);\n        return (tmp.length > 0 ? tmp[0].symbol : null);\n    }\n    if (ts.isPropertyAccessExpression(type)) {\n        return findSymbolFromHeritageType(ts, checker, type.name);\n    }\n    return null;\n}\nclass SymbolImportTuple {\n    symbol;\n    symbolImportNode;\n    constructor(symbol, symbolImportNode) {\n        this.symbol = symbol;\n        this.symbolImportNode = symbolImportNode;\n    }\n}\n/**\n * Returns the node's symbol and the `import` node (if the symbol resolved from a different module)\n */\nfunction getRealNodeSymbol(ts, checker, node) {\n    const getPropertySymbolsFromContextualType = ts.getPropertySymbolsFromContextualType;\n    const getContainingObjectLiteralElement = ts.getContainingObjectLiteralElement;\n    const getNameFromPropertyName = ts.getNameFromPropertyName;\n    // Go to the original declaration for cases:\n    //\n    //   (1) when the aliased symbol was declared in the location(parent).\n    //   (2) when the aliased symbol is originating from an import.\n    //\n    function shouldSkipAlias(node, declaration) {\n        if (!ts.isShorthandPropertyAssignment(node) && node.kind !== ts.SyntaxKind.Identifier) {\n            return false;\n        }\n        if (node.parent === declaration) {\n            return true;\n        }\n        switch (declaration.kind) {\n            case ts.SyntaxKind.ImportClause:\n            case ts.SyntaxKind.ImportEqualsDeclaration:\n                return true;\n            case ts.SyntaxKind.ImportSpecifier:\n                return declaration.parent.kind === ts.SyntaxKind.NamedImports;\n            default:\n                return false;\n        }\n    }\n    if (!ts.isShorthandPropertyAssignment(node)) {\n        if (node.getChildCount() !== 0) {\n            return [];\n        }\n    }\n    const { parent } = node;\n    let symbol = (ts.isShorthandPropertyAssignment(node)\n        ? checker.getShorthandAssignmentValueSymbol(node)\n        : checker.getSymbolAtLocation(node));\n    let importNode = null;\n    // If this is an alias, and the request came at the declaration location\n    // get the aliased symbol instead. This allows for goto def on an import e.g.\n    //   import {A, B} from \"mod\";\n    // to jump to the implementation directly.\n    if (symbol && symbol.flags & ts.SymbolFlags.Alias && symbol.declarations && shouldSkipAlias(node, symbol.declarations[0])) {\n        const aliased = checker.getAliasedSymbol(symbol);\n        if (aliased.declarations) {\n            // We should mark the import as visited\n            importNode = symbol.declarations[0];\n            symbol = aliased;\n        }\n    }\n    if (symbol) {\n        // Because name in short-hand property assignment has two different meanings: property name and property value,\n        // using go-to-definition at such position should go to the variable declaration of the property value rather than\n        // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition\n        // is performed at the location of property access, we would like to go to definition of the property in the short-hand\n        // assignment. This case and others are handled by the following code.\n        if (node.parent.kind === ts.SyntaxKind.ShorthandPropertyAssignment) {\n            symbol = checker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);\n        }\n        // If the node is the name of a BindingElement within an ObjectBindingPattern instead of just returning the\n        // declaration the symbol (which is itself), we should try to get to the original type of the ObjectBindingPattern\n        // and return the property declaration for the referenced property.\n        // For example:\n        //      import('./foo').then(({ b/*goto*/ar }) => undefined); => should get use to the declaration in file \"./foo\"\n        //\n        //      function bar<T>(onfulfilled: (value: T) => void) { //....}\n        //      interface Test {\n        //          pr/*destination*/op1: number\n        //      }\n        //      bar<Test>(({pr/*goto*/op1})=>{});\n        if (ts.isPropertyName(node) && ts.isBindingElement(parent) && ts.isObjectBindingPattern(parent.parent) &&\n            (node === (parent.propertyName || parent.name))) {\n            const name = getNameFromPropertyName(node);\n            const type = checker.getTypeAtLocation(parent.parent);\n            if (name && type) {\n                if (type.isUnion()) {\n                    return generateMultipleSymbols(type, name, importNode);\n                }\n                else {\n                    const prop = type.getProperty(name);\n                    if (prop) {\n                        symbol = prop;\n                    }\n                }\n            }\n        }\n        // If the current location we want to find its definition is in an object literal, try to get the contextual type for the\n        // object literal, lookup the property symbol in the contextual type, and use this for goto-definition.\n        // For example\n        //      interface Props{\n        //          /*first*/prop1: number\n        //          prop2: boolean\n        //      }\n        //      function Foo(arg: Props) {}\n        //      Foo( { pr/*1*/op1: 10, prop2: false })\n        const element = getContainingObjectLiteralElement(node);\n        if (element) {\n            const contextualType = element && checker.getContextualType(element.parent);\n            if (contextualType) {\n                const propertySymbols = getPropertySymbolsFromContextualType(element, checker, contextualType, /*unionSymbolOk*/ false);\n                if (propertySymbols) {\n                    symbol = propertySymbols[0];\n                }\n            }\n        }\n    }\n    if (symbol && symbol.declarations) {\n        return [new SymbolImportTuple(symbol, importNode)];\n    }\n    return [];\n    function generateMultipleSymbols(type, name, importNode) {\n        const result = [];\n        for (const t of type.types) {\n            const prop = t.getProperty(name);\n            if (prop && prop.declarations) {\n                result.push(new SymbolImportTuple(prop, importNode));\n            }\n        }\n        return result;\n    }\n}\n/** Get the token whose text contains the position */\nfunction getTokenAtPosition(ts, sourceFile, position, allowPositionInLeadingTrivia, includeEndPosition) {\n    let current = sourceFile;\n    outer: while (true) {\n        // find the child that contains 'position'\n        for (const child of current.getChildren()) {\n            const start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile, /*includeJsDoc*/ true);\n            if (start > position) {\n                // If this child begins after position, then all subsequent children will as well.\n                break;\n            }\n            const end = child.getEnd();\n            if (position < end || (position === end && (child.kind === ts.SyntaxKind.EndOfFileToken || includeEndPosition))) {\n                current = child;\n                continue outer;\n            }\n        }\n        return current;\n    }\n}\n//#endregion\n//# sourceMappingURL=treeshaking.js.map"
  },
  {
    "path": "build/lib/treeshaking.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport type * as ts from 'typescript';\n\nconst TYPESCRIPT_LIB_FOLDER = path.dirname(require.resolve('typescript/lib/lib.d.ts'));\n\nexport const enum ShakeLevel {\n\tFiles = 0,\n\tInnerFile = 1,\n\tClassMembers = 2\n}\n\nexport function toStringShakeLevel(shakeLevel: ShakeLevel): string {\n\tswitch (shakeLevel) {\n\t\tcase ShakeLevel.Files:\n\t\t\treturn 'Files (0)';\n\t\tcase ShakeLevel.InnerFile:\n\t\t\treturn 'InnerFile (1)';\n\t\tcase ShakeLevel.ClassMembers:\n\t\t\treturn 'ClassMembers (2)';\n\t}\n}\n\nexport interface ITreeShakingOptions {\n\t/**\n\t * The full path to the root where sources are.\n\t */\n\tsourcesRoot: string;\n\t/**\n\t * Module ids.\n\t * e.g. `vs/editor/editor.main` or `index`\n\t */\n\tentryPoints: string[];\n\t/**\n\t * Inline usages.\n\t */\n\tinlineEntryPoints: string[];\n\t/**\n\t * Other .d.ts files\n\t */\n\ttypings: string[];\n\t/**\n\t * TypeScript compiler options.\n\t */\n\tcompilerOptions?: any;\n\t/**\n\t * The shake level to perform.\n\t */\n\tshakeLevel: ShakeLevel;\n\t/**\n\t * regex pattern to ignore certain imports e.g. `.css` imports\n\t */\n\timportIgnorePattern: RegExp;\n\n\tredirects: { [module: string]: string };\n}\n\nexport interface ITreeShakingResult {\n\t[file: string]: string;\n}\n\nfunction printDiagnostics(options: ITreeShakingOptions, diagnostics: ReadonlyArray<ts.Diagnostic>): void {\n\tfor (const diag of diagnostics) {\n\t\tlet result = '';\n\t\tif (diag.file) {\n\t\t\tresult += `${path.join(options.sourcesRoot, diag.file.fileName)}`;\n\t\t}\n\t\tif (diag.file && diag.start) {\n\t\t\tconst location = diag.file.getLineAndCharacterOfPosition(diag.start);\n\t\t\tresult += `:${location.line + 1}:${location.character}`;\n\t\t}\n\t\tresult += ` - ` + JSON.stringify(diag.messageText);\n\t\tconsole.log(result);\n\t}\n}\n\nexport function shake(options: ITreeShakingOptions): ITreeShakingResult {\n\tconst ts = require('typescript') as typeof import('typescript');\n\tconst languageService = createTypeScriptLanguageService(ts, options);\n\tconst program = languageService.getProgram()!;\n\n\tconst globalDiagnostics = program.getGlobalDiagnostics();\n\tif (globalDiagnostics.length > 0) {\n\t\tprintDiagnostics(options, globalDiagnostics);\n\t\tthrow new Error(`Compilation Errors encountered.`);\n\t}\n\n\tconst syntacticDiagnostics = program.getSyntacticDiagnostics();\n\tif (syntacticDiagnostics.length > 0) {\n\t\tprintDiagnostics(options, syntacticDiagnostics);\n\t\tthrow new Error(`Compilation Errors encountered.`);\n\t}\n\n\tconst semanticDiagnostics = program.getSemanticDiagnostics();\n\tif (semanticDiagnostics.length > 0) {\n\t\tprintDiagnostics(options, semanticDiagnostics);\n\t\tthrow new Error(`Compilation Errors encountered.`);\n\t}\n\n\tmarkNodes(ts, languageService, options);\n\n\treturn generateResult(ts, languageService, options.shakeLevel);\n}\n\n//#region Discovery, LanguageService & Setup\nfunction createTypeScriptLanguageService(ts: typeof import('typescript'), options: ITreeShakingOptions): ts.LanguageService {\n\t// Discover referenced files\n\tconst FILES = discoverAndReadFiles(ts, options);\n\n\t// Add fake usage files\n\toptions.inlineEntryPoints.forEach((inlineEntryPoint, index) => {\n\t\tFILES[`inlineEntryPoint.${index}.ts`] = inlineEntryPoint;\n\t});\n\n\t// Add additional typings\n\toptions.typings.forEach((typing) => {\n\t\tconst filePath = path.join(options.sourcesRoot, typing);\n\t\tFILES[typing] = fs.readFileSync(filePath).toString();\n\t});\n\n\t// Resolve libs\n\tconst RESOLVED_LIBS = processLibFiles(ts, options);\n\n\tconst compilerOptions = ts.convertCompilerOptionsFromJson(options.compilerOptions, options.sourcesRoot).options;\n\n\tconst host = new TypeScriptLanguageServiceHost(ts, RESOLVED_LIBS, FILES, compilerOptions);\n\treturn ts.createLanguageService(host);\n}\n\n/**\n * Read imports and follow them until all files have been handled\n */\nfunction discoverAndReadFiles(ts: typeof import('typescript'), options: ITreeShakingOptions): IFileMap {\n\tconst FILES: IFileMap = {};\n\n\tconst in_queue: { [module: string]: boolean } = Object.create(null);\n\tconst queue: string[] = [];\n\n\tconst enqueue = (moduleId: string) => {\n\t\t// To make the treeshaker work on windows...\n\t\tmoduleId = moduleId.replace(/\\\\/g, '/');\n\t\tif (in_queue[moduleId]) {\n\t\t\treturn;\n\t\t}\n\t\tin_queue[moduleId] = true;\n\t\tqueue.push(moduleId);\n\t};\n\n\toptions.entryPoints.forEach((entryPoint) => enqueue(entryPoint));\n\n\twhile (queue.length > 0) {\n\t\tconst moduleId = queue.shift()!;\n\t\tlet redirectedModuleId: string = moduleId;\n\t\tif (options.redirects[moduleId]) {\n\t\t\tredirectedModuleId = options.redirects[moduleId];\n\t\t}\n\n\t\tconst dts_filename = path.join(options.sourcesRoot, redirectedModuleId + '.d.ts');\n\t\tif (fs.existsSync(dts_filename)) {\n\t\t\tconst dts_filecontents = fs.readFileSync(dts_filename).toString();\n\t\t\tFILES[`${moduleId}.d.ts`] = dts_filecontents;\n\t\t\tcontinue;\n\t\t}\n\n\n\t\tconst js_filename = path.join(options.sourcesRoot, redirectedModuleId + '.js');\n\t\tif (fs.existsSync(js_filename)) {\n\t\t\t// This is an import for a .js file, so ignore it...\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst ts_filename = path.join(options.sourcesRoot, redirectedModuleId + '.ts');\n\n\t\tconst ts_filecontents = fs.readFileSync(ts_filename).toString();\n\t\tconst info = ts.preProcessFile(ts_filecontents);\n\t\tfor (let i = info.importedFiles.length - 1; i >= 0; i--) {\n\t\t\tconst importedFileName = info.importedFiles[i].fileName;\n\n\t\t\tif (options.importIgnorePattern.test(importedFileName)) {\n\t\t\t\t// Ignore *.css imports\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet importedModuleId = importedFileName;\n\t\t\tif (/(^\\.\\/)|(^\\.\\.\\/)/.test(importedModuleId)) {\n\t\t\t\timportedModuleId = path.join(path.dirname(moduleId), importedModuleId);\n\t\t\t\tif (importedModuleId.endsWith('.js')) { // ESM: code imports require to be relative and have a '.js' file extension\n\t\t\t\t\timportedModuleId = importedModuleId.substr(0, importedModuleId.length - 3);\n\t\t\t\t}\n\t\t\t}\n\t\t\tenqueue(importedModuleId);\n\t\t}\n\n\t\tFILES[`${moduleId}.ts`] = ts_filecontents;\n\t}\n\n\treturn FILES;\n}\n\n/**\n * Read lib files and follow lib references\n */\nfunction processLibFiles(ts: typeof import('typescript'), options: ITreeShakingOptions): ILibMap {\n\n\tconst stack: string[] = [...options.compilerOptions.lib];\n\tconst result: ILibMap = {};\n\n\twhile (stack.length > 0) {\n\t\tconst filename = `lib.${stack.shift()!.toLowerCase()}.d.ts`;\n\t\tconst key = `defaultLib:${filename}`;\n\t\tif (!result[key]) {\n\t\t\t// add this file\n\t\t\tconst filepath = path.join(TYPESCRIPT_LIB_FOLDER, filename);\n\t\t\tconst sourceText = fs.readFileSync(filepath).toString();\n\t\t\tresult[key] = sourceText;\n\n\t\t\t// precess dependencies and \"recurse\"\n\t\t\tconst info = ts.preProcessFile(sourceText);\n\t\t\tfor (const ref of info.libReferenceDirectives) {\n\t\t\t\tstack.push(ref.fileName);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\ninterface ILibMap { [libName: string]: string }\ninterface IFileMap { [fileName: string]: string }\n\n/**\n * A TypeScript language service host\n */\nclass TypeScriptLanguageServiceHost implements ts.LanguageServiceHost {\n\n\tprivate readonly _ts: typeof import('typescript');\n\tprivate readonly _libs: ILibMap;\n\tprivate readonly _files: IFileMap;\n\tprivate readonly _compilerOptions: ts.CompilerOptions;\n\n\tconstructor(ts: typeof import('typescript'), libs: ILibMap, files: IFileMap, compilerOptions: ts.CompilerOptions) {\n\t\tthis._ts = ts;\n\t\tthis._libs = libs;\n\t\tthis._files = files;\n\t\tthis._compilerOptions = compilerOptions;\n\t}\n\n\t// --- language service host ---------------\n\n\tgetCompilationSettings(): ts.CompilerOptions {\n\t\treturn this._compilerOptions;\n\t}\n\tgetScriptFileNames(): string[] {\n\t\treturn (\n\t\t\t([] as string[])\n\t\t\t\t.concat(Object.keys(this._libs))\n\t\t\t\t.concat(Object.keys(this._files))\n\t\t);\n\t}\n\tgetScriptVersion(_fileName: string): string {\n\t\treturn '1';\n\t}\n\tgetProjectVersion(): string {\n\t\treturn '1';\n\t}\n\tgetScriptSnapshot(fileName: string): ts.IScriptSnapshot {\n\t\tif (this._files.hasOwnProperty(fileName)) {\n\t\t\treturn this._ts.ScriptSnapshot.fromString(this._files[fileName]);\n\t\t} else if (this._libs.hasOwnProperty(fileName)) {\n\t\t\treturn this._ts.ScriptSnapshot.fromString(this._libs[fileName]);\n\t\t} else {\n\t\t\treturn this._ts.ScriptSnapshot.fromString('');\n\t\t}\n\t}\n\tgetScriptKind(_fileName: string): ts.ScriptKind {\n\t\treturn this._ts.ScriptKind.TS;\n\t}\n\tgetCurrentDirectory(): string {\n\t\treturn '';\n\t}\n\tgetDefaultLibFileName(_options: ts.CompilerOptions): string {\n\t\treturn 'defaultLib:lib.d.ts';\n\t}\n\tisDefaultLibFileName(fileName: string): boolean {\n\t\treturn fileName === this.getDefaultLibFileName(this._compilerOptions);\n\t}\n\treadFile(path: string, _encoding?: string): string | undefined {\n\t\treturn this._files[path] || this._libs[path];\n\t}\n\tfileExists(path: string): boolean {\n\t\treturn path in this._files || path in this._libs;\n\t}\n}\n//#endregion\n\n//#region Tree Shaking\n\nconst enum NodeColor {\n\tWhite = 0,\n\tGray = 1,\n\tBlack = 2\n}\n\nfunction getColor(node: ts.Node): NodeColor {\n\treturn (<any>node).$$$color || NodeColor.White;\n}\nfunction setColor(node: ts.Node, color: NodeColor): void {\n\t(<any>node).$$$color = color;\n}\nfunction markNeededSourceFile(node: ts.SourceFile): void {\n\t(<any>node).$$$neededSourceFile = true;\n}\nfunction isNeededSourceFile(node: ts.SourceFile): boolean {\n\treturn Boolean((<any>node).$$$neededSourceFile);\n}\nfunction nodeOrParentIsBlack(node: ts.Node): boolean {\n\twhile (node) {\n\t\tconst color = getColor(node);\n\t\tif (color === NodeColor.Black) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parent;\n\t}\n\treturn false;\n}\nfunction nodeOrChildIsBlack(node: ts.Node): boolean {\n\tif (getColor(node) === NodeColor.Black) {\n\t\treturn true;\n\t}\n\tfor (const child of node.getChildren()) {\n\t\tif (nodeOrChildIsBlack(child)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction isSymbolWithDeclarations(symbol: ts.Symbol | undefined | null): symbol is ts.Symbol & { declarations: ts.Declaration[] } {\n\treturn !!(symbol && symbol.declarations);\n}\n\nfunction isVariableStatementWithSideEffects(ts: typeof import('typescript'), node: ts.Node): boolean {\n\tif (!ts.isVariableStatement(node)) {\n\t\treturn false;\n\t}\n\tlet hasSideEffects = false;\n\tconst visitNode = (node: ts.Node) => {\n\t\tif (hasSideEffects) {\n\t\t\t// no need to go on\n\t\t\treturn;\n\t\t}\n\t\tif (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n\t\t\t// TODO: assuming `createDecorator` and `refineServiceDecorator` calls are side-effect free\n\t\t\tconst isSideEffectFree = /(createDecorator|refineServiceDecorator)/.test(node.expression.getText());\n\t\t\tif (!isSideEffectFree) {\n\t\t\t\thasSideEffects = true;\n\t\t\t}\n\t\t}\n\t\tnode.forEachChild(visitNode);\n\t};\n\tnode.forEachChild(visitNode);\n\treturn hasSideEffects;\n}\n\nfunction isStaticMemberWithSideEffects(ts: typeof import('typescript'), node: ts.ClassElement | ts.TypeElement): boolean {\n\tif (!ts.isPropertyDeclaration(node)) {\n\t\treturn false;\n\t}\n\tif (!node.modifiers) {\n\t\treturn false;\n\t}\n\tif (!node.modifiers.some(mod => mod.kind === ts.SyntaxKind.StaticKeyword)) {\n\t\treturn false;\n\t}\n\tlet hasSideEffects = false;\n\tconst visitNode = (node: ts.Node) => {\n\t\tif (hasSideEffects) {\n\t\t\t// no need to go on\n\t\t\treturn;\n\t\t}\n\t\tif (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n\t\t\thasSideEffects = true;\n\t\t}\n\t\tnode.forEachChild(visitNode);\n\t};\n\tnode.forEachChild(visitNode);\n\treturn hasSideEffects;\n}\n\nfunction markNodes(ts: typeof import('typescript'), languageService: ts.LanguageService, options: ITreeShakingOptions) {\n\tconst program = languageService.getProgram();\n\tif (!program) {\n\t\tthrow new Error('Could not get program from language service');\n\t}\n\n\tif (options.shakeLevel === ShakeLevel.Files) {\n\t\t// Mark all source files Black\n\t\tprogram.getSourceFiles().forEach((sourceFile) => {\n\t\t\tsetColor(sourceFile, NodeColor.Black);\n\t\t});\n\t\treturn;\n\t}\n\n\tconst black_queue: ts.Node[] = [];\n\tconst gray_queue: ts.Node[] = [];\n\tconst export_import_queue: ts.Node[] = [];\n\tconst sourceFilesLoaded: { [fileName: string]: boolean } = {};\n\n\tfunction enqueueTopLevelModuleStatements(sourceFile: ts.SourceFile): void {\n\n\t\tsourceFile.forEachChild((node: ts.Node) => {\n\n\t\t\tif (ts.isImportDeclaration(node)) {\n\t\t\t\tif (!node.importClause && ts.isStringLiteral(node.moduleSpecifier)) {\n\t\t\t\t\tsetColor(node, NodeColor.Black);\n\t\t\t\t\tenqueueImport(node, node.moduleSpecifier.text);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ts.isExportDeclaration(node)) {\n\t\t\t\tif (!node.exportClause && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) {\n\t\t\t\t\t// export * from \"foo\";\n\t\t\t\t\tsetColor(node, NodeColor.Black);\n\t\t\t\t\tenqueueImport(node, node.moduleSpecifier.text);\n\t\t\t\t}\n\t\t\t\tif (node.exportClause && ts.isNamedExports(node.exportClause)) {\n\t\t\t\t\tfor (const exportSpecifier of node.exportClause.elements) {\n\t\t\t\t\t\texport_import_queue.push(exportSpecifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isVariableStatementWithSideEffects(ts, node)) {\n\t\t\t\tenqueue_black(node);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tts.isExpressionStatement(node)\n\t\t\t\t|| ts.isIfStatement(node)\n\t\t\t\t|| ts.isIterationStatement(node, true)\n\t\t\t\t|| ts.isExportAssignment(node)\n\t\t\t) {\n\t\t\t\tenqueue_black(node);\n\t\t\t}\n\n\t\t\tif (ts.isImportEqualsDeclaration(node)) {\n\t\t\t\tif (/export/.test(node.getFullText(sourceFile))) {\n\t\t\t\t\t// e.g. \"export import Severity = BaseSeverity;\"\n\t\t\t\t\tenqueue_black(node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Return the parent of `node` which is an ImportDeclaration\n\t */\n\tfunction findParentImportDeclaration(node: ts.Declaration): ts.ImportDeclaration | null {\n\t\tlet _node: ts.Node = node;\n\t\tdo {\n\t\t\tif (ts.isImportDeclaration(_node)) {\n\t\t\t\treturn _node;\n\t\t\t}\n\t\t\t_node = _node.parent;\n\t\t} while (_node);\n\t\treturn null;\n\t}\n\n\tfunction enqueue_gray(node: ts.Node): void {\n\t\tif (nodeOrParentIsBlack(node) || getColor(node) === NodeColor.Gray) {\n\t\t\treturn;\n\t\t}\n\t\tsetColor(node, NodeColor.Gray);\n\t\tgray_queue.push(node);\n\t}\n\n\tfunction enqueue_black(node: ts.Node): void {\n\t\tconst previousColor = getColor(node);\n\n\t\tif (previousColor === NodeColor.Black) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (previousColor === NodeColor.Gray) {\n\t\t\t// remove from gray queue\n\t\t\tgray_queue.splice(gray_queue.indexOf(node), 1);\n\t\t\tsetColor(node, NodeColor.White);\n\n\t\t\t// add to black queue\n\t\t\tenqueue_black(node);\n\n\t\t\t// move from one queue to the other\n\t\t\t// black_queue.push(node);\n\t\t\t// setColor(node, NodeColor.Black);\n\t\t\treturn;\n\t\t}\n\n\t\tif (nodeOrParentIsBlack(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst fileName = node.getSourceFile().fileName;\n\t\tif (/^defaultLib:/.test(fileName) || /\\.d\\.ts$/.test(fileName)) {\n\t\t\tsetColor(node, NodeColor.Black);\n\t\t\treturn;\n\t\t}\n\n\t\tconst sourceFile = node.getSourceFile();\n\t\tif (!sourceFilesLoaded[sourceFile.fileName]) {\n\t\t\tsourceFilesLoaded[sourceFile.fileName] = true;\n\t\t\tenqueueTopLevelModuleStatements(sourceFile);\n\t\t}\n\n\t\tif (ts.isSourceFile(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetColor(node, NodeColor.Black);\n\t\tblack_queue.push(node);\n\n\t\tif (options.shakeLevel === ShakeLevel.ClassMembers && (ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isPropertySignature(node) || ts.isPropertyDeclaration(node) || ts.isGetAccessor(node) || ts.isSetAccessor(node))) {\n\t\t\tconst references = languageService.getReferencesAtPosition(node.getSourceFile().fileName, node.name.pos + node.name.getLeadingTriviaWidth());\n\t\t\tif (references) {\n\t\t\t\tfor (let i = 0, len = references.length; i < len; i++) {\n\t\t\t\t\tconst reference = references[i];\n\t\t\t\t\tconst referenceSourceFile = program!.getSourceFile(reference.fileName);\n\t\t\t\t\tif (!referenceSourceFile) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst referenceNode = getTokenAtPosition(ts, referenceSourceFile, reference.textSpan.start, false, false);\n\t\t\t\t\tif (\n\t\t\t\t\t\tts.isMethodDeclaration(referenceNode.parent)\n\t\t\t\t\t\t|| ts.isPropertyDeclaration(referenceNode.parent)\n\t\t\t\t\t\t|| ts.isGetAccessor(referenceNode.parent)\n\t\t\t\t\t\t|| ts.isSetAccessor(referenceNode.parent)\n\t\t\t\t\t) {\n\t\t\t\t\t\tenqueue_gray(referenceNode.parent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction enqueueFile(filename: string): void {\n\t\tconst sourceFile = program!.getSourceFile(filename);\n\t\tif (!sourceFile) {\n\t\t\tconsole.warn(`Cannot find source file ${filename}`);\n\t\t\treturn;\n\t\t}\n\t\t// This source file should survive even if it is empty\n\t\tmarkNeededSourceFile(sourceFile);\n\t\tenqueue_black(sourceFile);\n\t}\n\n\tfunction enqueueImport(node: ts.Node, importText: string): void {\n\t\tif (options.importIgnorePattern.test(importText)) {\n\t\t\t// this import should be ignored\n\t\t\treturn;\n\t\t}\n\n\t\tconst nodeSourceFile = node.getSourceFile();\n\t\tlet fullPath: string;\n\t\tif (/(^\\.\\/)|(^\\.\\.\\/)/.test(importText)) {\n\t\t\tif (importText.endsWith('.js')) { // ESM: code imports require to be relative and to have a '.js' file extension\n\t\t\t\timportText = importText.substr(0, importText.length - 3);\n\t\t\t}\n\t\t\tfullPath = path.join(path.dirname(nodeSourceFile.fileName), importText) + '.ts';\n\t\t} else {\n\t\t\tfullPath = importText + '.ts';\n\t\t}\n\t\tenqueueFile(fullPath);\n\t}\n\n\toptions.entryPoints.forEach(moduleId => enqueueFile(moduleId + '.ts'));\n\t// Add fake usage files\n\toptions.inlineEntryPoints.forEach((_, index) => enqueueFile(`inlineEntryPoint.${index}.ts`));\n\n\tlet step = 0;\n\n\tconst checker = program.getTypeChecker();\n\twhile (black_queue.length > 0 || gray_queue.length > 0) {\n\t\t++step;\n\t\tlet node: ts.Node;\n\n\t\tif (step % 100 === 0) {\n\t\t\tconsole.log(`Treeshaking - ${Math.floor(100 * step / (step + black_queue.length + gray_queue.length))}% - ${step}/${step + black_queue.length + gray_queue.length} (${black_queue.length}, ${gray_queue.length})`);\n\t\t}\n\n\t\tif (black_queue.length === 0) {\n\t\t\tfor (let i = 0; i < gray_queue.length; i++) {\n\t\t\t\tconst node = gray_queue[i];\n\t\t\t\tconst nodeParent = node.parent;\n\t\t\t\tif ((ts.isClassDeclaration(nodeParent) || ts.isInterfaceDeclaration(nodeParent)) && nodeOrChildIsBlack(nodeParent)) {\n\t\t\t\t\tgray_queue.splice(i, 1);\n\t\t\t\t\tblack_queue.push(node);\n\t\t\t\t\tsetColor(node, NodeColor.Black);\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (black_queue.length > 0) {\n\t\t\tnode = black_queue.shift()!;\n\t\t} else {\n\t\t\t// only gray nodes remaining...\n\t\t\tbreak;\n\t\t}\n\t\tconst nodeSourceFile = node.getSourceFile();\n\n\t\tconst loop = (node: ts.Node) => {\n\t\t\tconst symbols = getRealNodeSymbol(ts, checker, node);\n\t\t\tfor (const { symbol, symbolImportNode } of symbols) {\n\t\t\t\tif (symbolImportNode) {\n\t\t\t\t\tsetColor(symbolImportNode, NodeColor.Black);\n\t\t\t\t\tconst importDeclarationNode = findParentImportDeclaration(symbolImportNode);\n\t\t\t\t\tif (importDeclarationNode && ts.isStringLiteral(importDeclarationNode.moduleSpecifier)) {\n\t\t\t\t\t\tenqueueImport(importDeclarationNode, importDeclarationNode.moduleSpecifier.text);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isSymbolWithDeclarations(symbol) && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) {\n\t\t\t\t\tfor (let i = 0, len = symbol.declarations.length; i < len; i++) {\n\t\t\t\t\t\tconst declaration = symbol.declarations[i];\n\t\t\t\t\t\tif (ts.isSourceFile(declaration)) {\n\t\t\t\t\t\t\t// Do not enqueue full source files\n\t\t\t\t\t\t\t// (they can be the declaration of a module import)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.shakeLevel === ShakeLevel.ClassMembers && (ts.isClassDeclaration(declaration) || ts.isInterfaceDeclaration(declaration)) && !isLocalCodeExtendingOrInheritingFromDefaultLibSymbol(ts, program, checker, declaration)) {\n\t\t\t\t\t\t\tenqueue_black(declaration.name!);\n\n\t\t\t\t\t\t\tfor (let j = 0; j < declaration.members.length; j++) {\n\t\t\t\t\t\t\t\tconst member = declaration.members[j];\n\t\t\t\t\t\t\t\tconst memberName = member.name ? member.name.getText() : null;\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tts.isConstructorDeclaration(member)\n\t\t\t\t\t\t\t\t\t|| ts.isConstructSignatureDeclaration(member)\n\t\t\t\t\t\t\t\t\t|| ts.isIndexSignatureDeclaration(member)\n\t\t\t\t\t\t\t\t\t|| ts.isCallSignatureDeclaration(member)\n\t\t\t\t\t\t\t\t\t|| memberName === '[Symbol.iterator]'\n\t\t\t\t\t\t\t\t\t|| memberName === '[Symbol.toStringTag]'\n\t\t\t\t\t\t\t\t\t|| memberName === 'toJSON'\n\t\t\t\t\t\t\t\t\t|| memberName === 'toString'\n\t\t\t\t\t\t\t\t\t|| memberName === 'dispose'// TODO: keeping all `dispose` methods\n\t\t\t\t\t\t\t\t\t|| /^_(.*)Brand$/.test(memberName || '') // TODO: keeping all members ending with `Brand`...\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tenqueue_black(member);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isStaticMemberWithSideEffects(ts, member)) {\n\t\t\t\t\t\t\t\t\tenqueue_black(member);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// queue the heritage clauses\n\t\t\t\t\t\t\tif (declaration.heritageClauses) {\n\t\t\t\t\t\t\t\tfor (const heritageClause of declaration.heritageClauses) {\n\t\t\t\t\t\t\t\t\tenqueue_black(heritageClause);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tenqueue_black(declaration);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode.forEachChild(loop);\n\t\t};\n\t\tnode.forEachChild(loop);\n\t}\n\n\twhile (export_import_queue.length > 0) {\n\t\tconst node = export_import_queue.shift()!;\n\t\tif (nodeOrParentIsBlack(node)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst symbol: ts.Symbol | undefined = (<any>node).symbol;\n\t\tif (!symbol) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst aliased = checker.getAliasedSymbol(symbol);\n\t\tif (aliased.declarations && aliased.declarations.length > 0) {\n\t\t\tif (nodeOrParentIsBlack(aliased.declarations[0]) || nodeOrChildIsBlack(aliased.declarations[0])) {\n\t\t\t\tsetColor(node, NodeColor.Black);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction nodeIsInItsOwnDeclaration(nodeSourceFile: ts.SourceFile, node: ts.Node, symbol: ts.Symbol & { declarations: ts.Declaration[] }): boolean {\n\tfor (let i = 0, len = symbol.declarations.length; i < len; i++) {\n\t\tconst declaration = symbol.declarations[i];\n\t\tconst declarationSourceFile = declaration.getSourceFile();\n\n\t\tif (nodeSourceFile === declarationSourceFile) {\n\t\t\tif (declaration.pos <= node.pos && node.end <= declaration.end) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction generateResult(ts: typeof import('typescript'), languageService: ts.LanguageService, shakeLevel: ShakeLevel): ITreeShakingResult {\n\tconst program = languageService.getProgram();\n\tif (!program) {\n\t\tthrow new Error('Could not get program from language service');\n\t}\n\n\tconst result: ITreeShakingResult = {};\n\tconst writeFile = (filePath: string, contents: string): void => {\n\t\tresult[filePath] = contents;\n\t};\n\n\tprogram.getSourceFiles().forEach((sourceFile) => {\n\t\tconst fileName = sourceFile.fileName;\n\t\tif (/^defaultLib:/.test(fileName)) {\n\t\t\treturn;\n\t\t}\n\t\tconst destination = fileName;\n\t\tif (/\\.d\\.ts$/.test(fileName)) {\n\t\t\tif (nodeOrChildIsBlack(sourceFile)) {\n\t\t\t\twriteFile(destination, sourceFile.text);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst text = sourceFile.text;\n\t\tlet result = '';\n\n\t\tfunction keep(node: ts.Node): void {\n\t\t\tresult += text.substring(node.pos, node.end);\n\t\t}\n\t\tfunction write(data: string): void {\n\t\t\tresult += data;\n\t\t}\n\n\t\tfunction writeMarkedNodes(node: ts.Node): void {\n\t\t\tif (getColor(node) === NodeColor.Black) {\n\t\t\t\treturn keep(node);\n\t\t\t}\n\n\t\t\t// Always keep certain top-level statements\n\t\t\tif (ts.isSourceFile(node.parent)) {\n\t\t\t\tif (ts.isExpressionStatement(node) && ts.isStringLiteral(node.expression) && node.expression.text === 'use strict') {\n\t\t\t\t\treturn keep(node);\n\t\t\t\t}\n\n\t\t\t\tif (ts.isVariableStatement(node) && nodeOrChildIsBlack(node)) {\n\t\t\t\t\treturn keep(node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Keep the entire import in import * as X cases\n\t\t\tif (ts.isImportDeclaration(node)) {\n\t\t\t\tif (node.importClause && node.importClause.namedBindings) {\n\t\t\t\t\tif (ts.isNamespaceImport(node.importClause.namedBindings)) {\n\t\t\t\t\t\tif (getColor(node.importClause.namedBindings) === NodeColor.Black) {\n\t\t\t\t\t\t\treturn keep(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst survivingImports: string[] = [];\n\t\t\t\t\t\tfor (const importNode of node.importClause.namedBindings.elements) {\n\t\t\t\t\t\t\tif (getColor(importNode) === NodeColor.Black) {\n\t\t\t\t\t\t\t\tsurvivingImports.push(importNode.getFullText(sourceFile));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst leadingTriviaWidth = node.getLeadingTriviaWidth();\n\t\t\t\t\t\tconst leadingTrivia = sourceFile.text.substr(node.pos, leadingTriviaWidth);\n\t\t\t\t\t\tif (survivingImports.length > 0) {\n\t\t\t\t\t\t\tif (node.importClause && node.importClause.name && getColor(node.importClause) === NodeColor.Black) {\n\t\t\t\t\t\t\t\treturn write(`${leadingTrivia}import ${node.importClause.name.text}, {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn write(`${leadingTrivia}import {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (node.importClause && node.importClause.name && getColor(node.importClause) === NodeColor.Black) {\n\t\t\t\t\t\t\t\treturn write(`${leadingTrivia}import ${node.importClause.name.text} from${node.moduleSpecifier.getFullText(sourceFile)};`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (node.importClause && getColor(node.importClause) === NodeColor.Black) {\n\t\t\t\t\t\treturn keep(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ts.isExportDeclaration(node)) {\n\t\t\t\tif (node.exportClause && node.moduleSpecifier && ts.isNamedExports(node.exportClause)) {\n\t\t\t\t\tconst survivingExports: string[] = [];\n\t\t\t\t\tfor (const exportSpecifier of node.exportClause.elements) {\n\t\t\t\t\t\tif (getColor(exportSpecifier) === NodeColor.Black) {\n\t\t\t\t\t\t\tsurvivingExports.push(exportSpecifier.getFullText(sourceFile));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst leadingTriviaWidth = node.getLeadingTriviaWidth();\n\t\t\t\t\tconst leadingTrivia = sourceFile.text.substr(node.pos, leadingTriviaWidth);\n\t\t\t\t\tif (survivingExports.length > 0) {\n\t\t\t\t\t\treturn write(`${leadingTrivia}export {${survivingExports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shakeLevel === ShakeLevel.ClassMembers && (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) && nodeOrChildIsBlack(node)) {\n\t\t\t\tlet toWrite = node.getFullText();\n\t\t\t\tfor (let i = node.members.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst member = node.members[i];\n\t\t\t\t\tif (getColor(member) === NodeColor.Black || !member.name) {\n\t\t\t\t\t\t// keep method\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pos = member.pos - node.pos;\n\t\t\t\t\tconst end = member.end - node.pos;\n\t\t\t\t\ttoWrite = toWrite.substring(0, pos) + toWrite.substring(end);\n\t\t\t\t}\n\t\t\t\treturn write(toWrite);\n\t\t\t}\n\n\t\t\tif (ts.isFunctionDeclaration(node)) {\n\t\t\t\t// Do not go inside functions if they haven't been marked\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnode.forEachChild(writeMarkedNodes);\n\t\t}\n\n\t\tif (getColor(sourceFile) !== NodeColor.Black) {\n\t\t\tif (!nodeOrChildIsBlack(sourceFile)) {\n\t\t\t\t// none of the elements are reachable\n\t\t\t\tif (isNeededSourceFile(sourceFile)) {\n\t\t\t\t\t// this source file must be written, even if nothing is used from it\n\t\t\t\t\t// because there is an import somewhere for it.\n\t\t\t\t\t// However, TS complains with empty files with the error \"x\" is not a module,\n\t\t\t\t\t// so we will export a dummy variable\n\t\t\t\t\tresult = 'export const __dummy = 0;';\n\t\t\t\t} else {\n\t\t\t\t\t// don't write this file at all!\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsourceFile.forEachChild(writeMarkedNodes);\n\t\t\t\tresult += sourceFile.endOfFileToken.getFullText(sourceFile);\n\t\t\t}\n\t\t} else {\n\t\t\tresult = text;\n\t\t}\n\n\t\twriteFile(destination, result);\n\t});\n\n\treturn result;\n}\n\n//#endregion\n\n//#region Utils\n\nfunction isLocalCodeExtendingOrInheritingFromDefaultLibSymbol(ts: typeof import('typescript'), program: ts.Program, checker: ts.TypeChecker, declaration: ts.ClassDeclaration | ts.InterfaceDeclaration): boolean {\n\tif (!program.isSourceFileDefaultLibrary(declaration.getSourceFile()) && declaration.heritageClauses) {\n\t\tfor (const heritageClause of declaration.heritageClauses) {\n\t\t\tfor (const type of heritageClause.types) {\n\t\t\t\tconst symbol = findSymbolFromHeritageType(ts, checker, type);\n\t\t\t\tif (symbol) {\n\t\t\t\t\tconst decl = symbol.valueDeclaration || (symbol.declarations && symbol.declarations[0]);\n\t\t\t\t\tif (decl && program.isSourceFileDefaultLibrary(decl.getSourceFile())) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction findSymbolFromHeritageType(ts: typeof import('typescript'), checker: ts.TypeChecker, type: ts.ExpressionWithTypeArguments | ts.Expression | ts.PrivateIdentifier): ts.Symbol | null {\n\tif (ts.isExpressionWithTypeArguments(type)) {\n\t\treturn findSymbolFromHeritageType(ts, checker, type.expression);\n\t}\n\tif (ts.isIdentifier(type)) {\n\t\tconst tmp = getRealNodeSymbol(ts, checker, type);\n\t\treturn (tmp.length > 0 ? tmp[0].symbol : null);\n\t}\n\tif (ts.isPropertyAccessExpression(type)) {\n\t\treturn findSymbolFromHeritageType(ts, checker, type.name);\n\t}\n\treturn null;\n}\n\nclass SymbolImportTuple {\n\tconstructor(\n\t\tpublic readonly symbol: ts.Symbol | null,\n\t\tpublic readonly symbolImportNode: ts.Declaration | null\n\t) { }\n}\n\n/**\n * Returns the node's symbol and the `import` node (if the symbol resolved from a different module)\n */\nfunction getRealNodeSymbol(ts: typeof import('typescript'), checker: ts.TypeChecker, node: ts.Node): SymbolImportTuple[] {\n\n\t// Use some TypeScript internals to avoid code duplication\n\ttype ObjectLiteralElementWithName = ts.ObjectLiteralElement & { name: ts.PropertyName; parent: ts.ObjectLiteralExpression | ts.JsxAttributes };\n\tconst getPropertySymbolsFromContextualType: (node: ObjectLiteralElementWithName, checker: ts.TypeChecker, contextualType: ts.Type, unionSymbolOk: boolean) => ReadonlyArray<ts.Symbol> = (<any>ts).getPropertySymbolsFromContextualType;\n\tconst getContainingObjectLiteralElement: (node: ts.Node) => ObjectLiteralElementWithName | undefined = (<any>ts).getContainingObjectLiteralElement;\n\tconst getNameFromPropertyName: (name: ts.PropertyName) => string | undefined = (<any>ts).getNameFromPropertyName;\n\n\t// Go to the original declaration for cases:\n\t//\n\t//   (1) when the aliased symbol was declared in the location(parent).\n\t//   (2) when the aliased symbol is originating from an import.\n\t//\n\tfunction shouldSkipAlias(node: ts.Node, declaration: ts.Node): boolean {\n\t\tif (!ts.isShorthandPropertyAssignment(node) && node.kind !== ts.SyntaxKind.Identifier) {\n\t\t\treturn false;\n\t\t}\n\t\tif (node.parent === declaration) {\n\t\t\treturn true;\n\t\t}\n\t\tswitch (declaration.kind) {\n\t\t\tcase ts.SyntaxKind.ImportClause:\n\t\t\tcase ts.SyntaxKind.ImportEqualsDeclaration:\n\t\t\t\treturn true;\n\t\t\tcase ts.SyntaxKind.ImportSpecifier:\n\t\t\t\treturn declaration.parent.kind === ts.SyntaxKind.NamedImports;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (!ts.isShorthandPropertyAssignment(node)) {\n\t\tif (node.getChildCount() !== 0) {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tconst { parent } = node;\n\n\tlet symbol = (\n\t\tts.isShorthandPropertyAssignment(node)\n\t\t\t? checker.getShorthandAssignmentValueSymbol(node)\n\t\t\t: checker.getSymbolAtLocation(node)\n\t);\n\n\tlet importNode: ts.Declaration | null = null;\n\t// If this is an alias, and the request came at the declaration location\n\t// get the aliased symbol instead. This allows for goto def on an import e.g.\n\t//   import {A, B} from \"mod\";\n\t// to jump to the implementation directly.\n\tif (symbol && symbol.flags & ts.SymbolFlags.Alias && symbol.declarations && shouldSkipAlias(node, symbol.declarations[0])) {\n\t\tconst aliased = checker.getAliasedSymbol(symbol);\n\t\tif (aliased.declarations) {\n\t\t\t// We should mark the import as visited\n\t\t\timportNode = symbol.declarations[0];\n\t\t\tsymbol = aliased;\n\t\t}\n\t}\n\n\tif (symbol) {\n\t\t// Because name in short-hand property assignment has two different meanings: property name and property value,\n\t\t// using go-to-definition at such position should go to the variable declaration of the property value rather than\n\t\t// go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition\n\t\t// is performed at the location of property access, we would like to go to definition of the property in the short-hand\n\t\t// assignment. This case and others are handled by the following code.\n\t\tif (node.parent.kind === ts.SyntaxKind.ShorthandPropertyAssignment) {\n\t\t\tsymbol = checker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);\n\t\t}\n\n\t\t// If the node is the name of a BindingElement within an ObjectBindingPattern instead of just returning the\n\t\t// declaration the symbol (which is itself), we should try to get to the original type of the ObjectBindingPattern\n\t\t// and return the property declaration for the referenced property.\n\t\t// For example:\n\t\t//      import('./foo').then(({ b/*goto*/ar }) => undefined); => should get use to the declaration in file \"./foo\"\n\t\t//\n\t\t//      function bar<T>(onfulfilled: (value: T) => void) { //....}\n\t\t//      interface Test {\n\t\t//          pr/*destination*/op1: number\n\t\t//      }\n\t\t//      bar<Test>(({pr/*goto*/op1})=>{});\n\t\tif (ts.isPropertyName(node) && ts.isBindingElement(parent) && ts.isObjectBindingPattern(parent.parent) &&\n\t\t\t(node === (parent.propertyName || parent.name))) {\n\t\t\tconst name = getNameFromPropertyName(node);\n\t\t\tconst type = checker.getTypeAtLocation(parent.parent);\n\t\t\tif (name && type) {\n\t\t\t\tif (type.isUnion()) {\n\t\t\t\t\treturn generateMultipleSymbols(type, name, importNode);\n\t\t\t\t} else {\n\t\t\t\t\tconst prop = type.getProperty(name);\n\t\t\t\t\tif (prop) {\n\t\t\t\t\t\tsymbol = prop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If the current location we want to find its definition is in an object literal, try to get the contextual type for the\n\t\t// object literal, lookup the property symbol in the contextual type, and use this for goto-definition.\n\t\t// For example\n\t\t//      interface Props{\n\t\t//          /*first*/prop1: number\n\t\t//          prop2: boolean\n\t\t//      }\n\t\t//      function Foo(arg: Props) {}\n\t\t//      Foo( { pr/*1*/op1: 10, prop2: false })\n\t\tconst element = getContainingObjectLiteralElement(node);\n\t\tif (element) {\n\t\t\tconst contextualType = element && checker.getContextualType(element.parent);\n\t\t\tif (contextualType) {\n\t\t\t\tconst propertySymbols = getPropertySymbolsFromContextualType(element, checker, contextualType, /*unionSymbolOk*/ false);\n\t\t\t\tif (propertySymbols) {\n\t\t\t\t\tsymbol = propertySymbols[0];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (symbol && symbol.declarations) {\n\t\treturn [new SymbolImportTuple(symbol, importNode)];\n\t}\n\n\treturn [];\n\n\tfunction generateMultipleSymbols(type: ts.UnionType, name: string, importNode: ts.Declaration | null): SymbolImportTuple[] {\n\t\tconst result: SymbolImportTuple[] = [];\n\t\tfor (const t of type.types) {\n\t\t\tconst prop = t.getProperty(name);\n\t\t\tif (prop && prop.declarations) {\n\t\t\t\tresult.push(new SymbolImportTuple(prop, importNode));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\n/** Get the token whose text contains the position */\nfunction getTokenAtPosition(ts: typeof import('typescript'), sourceFile: ts.SourceFile, position: number, allowPositionInLeadingTrivia: boolean, includeEndPosition: boolean): ts.Node {\n\tlet current: ts.Node = sourceFile;\n\touter: while (true) {\n\t\t// find the child that contains 'position'\n\t\tfor (const child of current.getChildren()) {\n\t\t\tconst start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile, /*includeJsDoc*/ true);\n\t\t\tif (start > position) {\n\t\t\t\t// If this child begins after position, then all subsequent children will as well.\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst end = child.getEnd();\n\t\t\tif (position < end || (position === end && (child.kind === ts.SyntaxKind.EndOfFileToken || includeEndPosition))) {\n\t\t\t\tcurrent = child;\n\t\t\t\tcontinue outer;\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t}\n}\n\n//#endregion\n"
  },
  {
    "path": "build/lib/tsb/builder.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancellationToken = void 0;\nexports.createTypeScriptBuilder = createTypeScriptBuilder;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst utils = __importStar(require(\"./utils\"));\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\nconst typescript_1 = __importDefault(require(\"typescript\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst source_map_1 = require(\"source-map\");\nvar CancellationToken;\n(function (CancellationToken) {\n    CancellationToken.None = {\n        isCancellationRequested() { return false; }\n    };\n})(CancellationToken || (exports.CancellationToken = CancellationToken = {}));\nfunction normalize(path) {\n    return path.replace(/\\\\/g, '/');\n}\nfunction createTypeScriptBuilder(config, projectFile, cmd) {\n    const _log = config.logFn;\n    const host = new LanguageServiceHost(cmd, projectFile, _log);\n    const outHost = new LanguageServiceHost({ ...cmd, options: { ...cmd.options, sourceRoot: cmd.options.outDir } }, cmd.options.outDir ?? '', _log);\n    let lastCycleCheckVersion;\n    const service = typescript_1.default.createLanguageService(host, typescript_1.default.createDocumentRegistry());\n    const lastBuildVersion = Object.create(null);\n    const lastDtsHash = Object.create(null);\n    const userWantsDeclarations = cmd.options.declaration;\n    let oldErrors = Object.create(null);\n    let headUsed = process.memoryUsage().heapUsed;\n    let emitSourceMapsInStream = true;\n    // always emit declaraction files\n    host.getCompilationSettings().declaration = true;\n    function file(file) {\n        // support gulp-sourcemaps\n        if (file.sourceMap) {\n            emitSourceMapsInStream = false;\n        }\n        if (!file.contents) {\n            host.removeScriptSnapshot(file.path);\n            delete lastBuildVersion[normalize(file.path)];\n        }\n        else {\n            host.addScriptSnapshot(file.path, new VinylScriptSnapshot(file));\n        }\n    }\n    function baseFor(snapshot) {\n        if (snapshot instanceof VinylScriptSnapshot) {\n            return cmd.options.outDir || snapshot.getBase();\n        }\n        else {\n            return '';\n        }\n    }\n    function isExternalModule(sourceFile) {\n        return sourceFile.externalModuleIndicator\n            || /declare\\s+module\\s+('|\")(.+)\\1/.test(sourceFile.getText());\n    }\n    function build(out, onError, token = CancellationToken.None) {\n        function checkSyntaxSoon(fileName) {\n            return new Promise(resolve => {\n                process.nextTick(function () {\n                    if (!host.getScriptSnapshot(fileName, false)) {\n                        resolve([]); // no script, no problems\n                    }\n                    else {\n                        resolve(service.getSyntacticDiagnostics(fileName));\n                    }\n                });\n            });\n        }\n        function checkSemanticsSoon(fileName) {\n            return new Promise(resolve => {\n                process.nextTick(function () {\n                    if (!host.getScriptSnapshot(fileName, false)) {\n                        resolve([]); // no script, no problems\n                    }\n                    else {\n                        resolve(service.getSemanticDiagnostics(fileName));\n                    }\n                });\n            });\n        }\n        function emitSoon(fileName) {\n            return new Promise(resolve => {\n                process.nextTick(function () {\n                    if (/\\.d\\.ts$/.test(fileName)) {\n                        // if it's already a d.ts file just emit it signature\n                        const snapshot = host.getScriptSnapshot(fileName);\n                        const signature = crypto_1.default.createHash('sha256')\n                            .update(snapshot.getText(0, snapshot.getLength()))\n                            .digest('base64');\n                        return resolve({\n                            fileName,\n                            signature,\n                            files: []\n                        });\n                    }\n                    const output = service.getEmitOutput(fileName);\n                    const files = [];\n                    let signature;\n                    for (const file of output.outputFiles) {\n                        if (!emitSourceMapsInStream && /\\.js\\.map$/.test(file.name)) {\n                            continue;\n                        }\n                        if (/\\.d\\.ts$/.test(file.name)) {\n                            signature = crypto_1.default.createHash('sha256')\n                                .update(file.text)\n                                .digest('base64');\n                            if (!userWantsDeclarations) {\n                                // don't leak .d.ts files if users don't want them\n                                continue;\n                            }\n                        }\n                        const vinyl = new vinyl_1.default({\n                            path: file.name,\n                            contents: Buffer.from(file.text),\n                            base: !config._emitWithoutBasePath && baseFor(host.getScriptSnapshot(fileName)) || undefined\n                        });\n                        if (!emitSourceMapsInStream && /\\.js$/.test(file.name)) {\n                            const sourcemapFile = output.outputFiles.filter(f => /\\.js\\.map$/.test(f.name))[0];\n                            if (sourcemapFile) {\n                                const extname = path_1.default.extname(vinyl.relative);\n                                const basename = path_1.default.basename(vinyl.relative, extname);\n                                const dirname = path_1.default.dirname(vinyl.relative);\n                                const tsname = (dirname === '.' ? '' : dirname + '/') + basename + '.ts';\n                                let sourceMap = JSON.parse(sourcemapFile.text);\n                                sourceMap.sources[0] = tsname.replace(/\\\\/g, '/');\n                                // check for an \"input source\" map and combine them\n                                // in step 1 we extract all line edit from the input source map, and\n                                // in step 2 we apply the line edits to the typescript source map\n                                const snapshot = host.getScriptSnapshot(fileName);\n                                if (snapshot instanceof VinylScriptSnapshot && snapshot.sourceMap) {\n                                    const inputSMC = new source_map_1.SourceMapConsumer(snapshot.sourceMap);\n                                    const tsSMC = new source_map_1.SourceMapConsumer(sourceMap);\n                                    let didChange = false;\n                                    const smg = new source_map_1.SourceMapGenerator({\n                                        file: sourceMap.file,\n                                        sourceRoot: sourceMap.sourceRoot\n                                    });\n                                    // step 1\n                                    const lineEdits = new Map();\n                                    inputSMC.eachMapping(m => {\n                                        if (m.originalLine === m.generatedLine) {\n                                            // same line mapping\n                                            let array = lineEdits.get(m.originalLine);\n                                            if (!array) {\n                                                array = [];\n                                                lineEdits.set(m.originalLine, array);\n                                            }\n                                            array.push([m.originalColumn, m.generatedColumn]);\n                                        }\n                                        else {\n                                            // NOT SUPPORTED\n                                        }\n                                    });\n                                    // step 2\n                                    tsSMC.eachMapping(m => {\n                                        didChange = true;\n                                        const edits = lineEdits.get(m.originalLine);\n                                        let originalColumnDelta = 0;\n                                        if (edits) {\n                                            for (const [from, to] of edits) {\n                                                if (to >= m.originalColumn) {\n                                                    break;\n                                                }\n                                                originalColumnDelta = from - to;\n                                            }\n                                        }\n                                        smg.addMapping({\n                                            source: m.source,\n                                            name: m.name,\n                                            generated: { line: m.generatedLine, column: m.generatedColumn },\n                                            original: { line: m.originalLine, column: m.originalColumn + originalColumnDelta }\n                                        });\n                                    });\n                                    if (didChange) {\n                                        [tsSMC, inputSMC].forEach((consumer) => {\n                                            consumer.sources.forEach((sourceFile) => {\n                                                smg._sources.add(sourceFile);\n                                                const sourceContent = consumer.sourceContentFor(sourceFile);\n                                                if (sourceContent !== null) {\n                                                    smg.setSourceContent(sourceFile, sourceContent);\n                                                }\n                                            });\n                                        });\n                                        sourceMap = JSON.parse(smg.toString());\n                                        // const filename = '/Users/jrieken/Code/vscode/src2/' + vinyl.relative + '.map';\n                                        // fs.promises.mkdir(path.dirname(filename), { recursive: true }).then(async () => {\n                                        // \tawait fs.promises.writeFile(filename, smg.toString());\n                                        // \tawait fs.promises.writeFile('/Users/jrieken/Code/vscode/src2/' + vinyl.relative, vinyl.contents);\n                                        // });\n                                    }\n                                }\n                                vinyl.sourceMap = sourceMap;\n                            }\n                        }\n                        files.push(vinyl);\n                    }\n                    resolve({\n                        fileName,\n                        signature,\n                        files\n                    });\n                });\n            });\n        }\n        const newErrors = Object.create(null);\n        const t1 = Date.now();\n        const toBeEmitted = [];\n        const toBeCheckedSyntactically = [];\n        const toBeCheckedSemantically = [];\n        const filesWithChangedSignature = [];\n        const dependentFiles = [];\n        const newLastBuildVersion = new Map();\n        for (const fileName of host.getScriptFileNames()) {\n            if (lastBuildVersion[fileName] !== host.getScriptVersion(fileName)) {\n                toBeEmitted.push(fileName);\n                toBeCheckedSyntactically.push(fileName);\n                toBeCheckedSemantically.push(fileName);\n            }\n        }\n        return new Promise(resolve => {\n            const semanticCheckInfo = new Map();\n            const seenAsDependentFile = new Set();\n            function workOnNext() {\n                let promise;\n                // let fileName: string;\n                // someone told us to stop this\n                if (token.isCancellationRequested()) {\n                    _log('[CANCEL]', '>>This compile run was cancelled<<');\n                    newLastBuildVersion.clear();\n                    resolve();\n                    return;\n                }\n                // (1st) emit code\n                else if (toBeEmitted.length) {\n                    const fileName = toBeEmitted.pop();\n                    promise = emitSoon(fileName).then(value => {\n                        for (const file of value.files) {\n                            _log('[emit code]', file.path);\n                            out(file);\n                        }\n                        // remember when this was build\n                        newLastBuildVersion.set(fileName, host.getScriptVersion(fileName));\n                        // remeber the signature\n                        if (value.signature && lastDtsHash[fileName] !== value.signature) {\n                            lastDtsHash[fileName] = value.signature;\n                            filesWithChangedSignature.push(fileName);\n                        }\n                        // line up for cycle check\n                        const jsValue = value.files.find(candidate => candidate.basename.endsWith('.js'));\n                        if (jsValue) {\n                            outHost.addScriptSnapshot(jsValue.path, new ScriptSnapshot(String(jsValue.contents), new Date()));\n                        }\n                    }).catch(e => {\n                        // can't just skip this or make a result up..\n                        host.error(`ERROR emitting ${fileName}`);\n                        host.error(e);\n                    });\n                }\n                // (2nd) check syntax\n                else if (toBeCheckedSyntactically.length) {\n                    const fileName = toBeCheckedSyntactically.pop();\n                    _log('[check syntax]', fileName);\n                    promise = checkSyntaxSoon(fileName).then(diagnostics => {\n                        delete oldErrors[fileName];\n                        if (diagnostics.length > 0) {\n                            diagnostics.forEach(d => onError(d));\n                            newErrors[fileName] = diagnostics;\n                            // stop the world when there are syntax errors\n                            toBeCheckedSyntactically.length = 0;\n                            toBeCheckedSemantically.length = 0;\n                            filesWithChangedSignature.length = 0;\n                        }\n                    });\n                }\n                // (3rd) check semantics\n                else if (toBeCheckedSemantically.length) {\n                    let fileName = toBeCheckedSemantically.pop();\n                    while (fileName && semanticCheckInfo.has(fileName)) {\n                        fileName = toBeCheckedSemantically.pop();\n                    }\n                    if (fileName) {\n                        _log('[check semantics]', fileName);\n                        promise = checkSemanticsSoon(fileName).then(diagnostics => {\n                            delete oldErrors[fileName];\n                            semanticCheckInfo.set(fileName, diagnostics.length);\n                            if (diagnostics.length > 0) {\n                                diagnostics.forEach(d => onError(d));\n                                newErrors[fileName] = diagnostics;\n                            }\n                        });\n                    }\n                }\n                // (4th) check dependents\n                else if (filesWithChangedSignature.length) {\n                    while (filesWithChangedSignature.length) {\n                        const fileName = filesWithChangedSignature.pop();\n                        if (!isExternalModule(service.getProgram().getSourceFile(fileName))) {\n                            _log('[check semantics*]', fileName + ' is an internal module and it has changed shape -> check whatever hasn\\'t been checked yet');\n                            toBeCheckedSemantically.push(...host.getScriptFileNames());\n                            filesWithChangedSignature.length = 0;\n                            dependentFiles.length = 0;\n                            break;\n                        }\n                        host.collectDependents(fileName, dependentFiles);\n                    }\n                }\n                // (5th) dependents contd\n                else if (dependentFiles.length) {\n                    let fileName = dependentFiles.pop();\n                    while (fileName && seenAsDependentFile.has(fileName)) {\n                        fileName = dependentFiles.pop();\n                    }\n                    if (fileName) {\n                        seenAsDependentFile.add(fileName);\n                        const value = semanticCheckInfo.get(fileName);\n                        if (value === 0) {\n                            // already validated successfully -> look at dependents next\n                            host.collectDependents(fileName, dependentFiles);\n                        }\n                        else if (typeof value === 'undefined') {\n                            // first validate -> look at dependents next\n                            dependentFiles.push(fileName);\n                            toBeCheckedSemantically.push(fileName);\n                        }\n                    }\n                }\n                // (last) done\n                else {\n                    resolve();\n                    return;\n                }\n                if (!promise) {\n                    promise = Promise.resolve();\n                }\n                promise.then(function () {\n                    // change to change\n                    process.nextTick(workOnNext);\n                }).catch(err => {\n                    console.error(err);\n                });\n            }\n            workOnNext();\n        }).then(() => {\n            // check for cyclic dependencies\n            const thisCycleCheckVersion = outHost.getProjectVersion();\n            if (thisCycleCheckVersion === lastCycleCheckVersion) {\n                return;\n            }\n            const oneCycle = outHost.hasCyclicDependency();\n            lastCycleCheckVersion = thisCycleCheckVersion;\n            delete oldErrors[projectFile];\n            if (oneCycle) {\n                const cycleError = {\n                    category: typescript_1.default.DiagnosticCategory.Error,\n                    code: 1,\n                    file: undefined,\n                    start: undefined,\n                    length: undefined,\n                    messageText: `CYCLIC dependency between ${oneCycle}`\n                };\n                onError(cycleError);\n                newErrors[projectFile] = [cycleError];\n            }\n        }).then(() => {\n            // store the build versions to not rebuilt the next time\n            newLastBuildVersion.forEach((value, key) => {\n                lastBuildVersion[key] = value;\n            });\n            // print old errors and keep them\n            for (const [key, value] of Object.entries(oldErrors)) {\n                value.forEach(diag => onError(diag));\n                newErrors[key] = value;\n            }\n            oldErrors = newErrors;\n            // print stats\n            const headNow = process.memoryUsage().heapUsed;\n            const MB = 1024 * 1024;\n            _log('[tsb]', `time:  ${ansi_colors_1.default.yellow((Date.now() - t1) + 'ms')} + \\nmem:  ${ansi_colors_1.default.cyan(Math.ceil(headNow / MB) + 'MB')} ${ansi_colors_1.default.bgcyan('delta: ' + Math.ceil((headNow - headUsed) / MB))}`);\n            headUsed = headNow;\n        });\n    }\n    return {\n        file,\n        build,\n        languageService: service\n    };\n}\nclass ScriptSnapshot {\n    _text;\n    _mtime;\n    constructor(text, mtime) {\n        this._text = text;\n        this._mtime = mtime;\n    }\n    getVersion() {\n        return this._mtime.toUTCString();\n    }\n    getText(start, end) {\n        return this._text.substring(start, end);\n    }\n    getLength() {\n        return this._text.length;\n    }\n    getChangeRange(_oldSnapshot) {\n        return undefined;\n    }\n}\nclass VinylScriptSnapshot extends ScriptSnapshot {\n    _base;\n    sourceMap;\n    constructor(file) {\n        super(file.contents.toString(), file.stat.mtime);\n        this._base = file.base;\n        this.sourceMap = file.sourceMap;\n    }\n    getBase() {\n        return this._base;\n    }\n}\nclass LanguageServiceHost {\n    _cmdLine;\n    _projectPath;\n    _log;\n    _snapshots;\n    _filesInProject;\n    _filesAdded;\n    _dependencies;\n    _dependenciesRecomputeList;\n    _fileNameToDeclaredModule;\n    _projectVersion;\n    constructor(_cmdLine, _projectPath, _log) {\n        this._cmdLine = _cmdLine;\n        this._projectPath = _projectPath;\n        this._log = _log;\n        this._snapshots = Object.create(null);\n        this._filesInProject = new Set(_cmdLine.fileNames);\n        this._filesAdded = new Set();\n        this._dependencies = new utils.graph.Graph();\n        this._dependenciesRecomputeList = [];\n        this._fileNameToDeclaredModule = Object.create(null);\n        this._projectVersion = 1;\n    }\n    log(_s) {\n        // console.log(s);\n    }\n    trace(_s) {\n        // console.log(s);\n    }\n    error(s) {\n        console.error(s);\n    }\n    getCompilationSettings() {\n        return this._cmdLine.options;\n    }\n    getProjectVersion() {\n        return String(this._projectVersion);\n    }\n    getScriptFileNames() {\n        const res = Object.keys(this._snapshots).filter(path => this._filesInProject.has(path) || this._filesAdded.has(path));\n        return res;\n    }\n    getScriptVersion(filename) {\n        filename = normalize(filename);\n        const result = this._snapshots[filename];\n        if (result) {\n            return result.getVersion();\n        }\n        return 'UNKNWON_FILE_' + Math.random().toString(16).slice(2);\n    }\n    getScriptSnapshot(filename, resolve = true) {\n        filename = normalize(filename);\n        let result = this._snapshots[filename];\n        if (!result && resolve) {\n            try {\n                result = new VinylScriptSnapshot(new vinyl_1.default({\n                    path: filename,\n                    contents: fs_1.default.readFileSync(filename),\n                    base: this.getCompilationSettings().outDir,\n                    stat: fs_1.default.statSync(filename)\n                }));\n                this.addScriptSnapshot(filename, result);\n            }\n            catch (e) {\n                // ignore\n            }\n        }\n        return result;\n    }\n    static _declareModule = /declare\\s+module\\s+('|\")(.+)\\1/g;\n    addScriptSnapshot(filename, snapshot) {\n        this._projectVersion++;\n        filename = normalize(filename);\n        const old = this._snapshots[filename];\n        if (!old && !this._filesInProject.has(filename) && !filename.endsWith('.d.ts')) {\n            //                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^\n            //                                              not very proper!\n            this._filesAdded.add(filename);\n        }\n        if (!old || old.getVersion() !== snapshot.getVersion()) {\n            this._dependenciesRecomputeList.push(filename);\n            // (cheap) check for declare module\n            LanguageServiceHost._declareModule.lastIndex = 0;\n            let match;\n            while ((match = LanguageServiceHost._declareModule.exec(snapshot.getText(0, snapshot.getLength())))) {\n                let declaredModules = this._fileNameToDeclaredModule[filename];\n                if (!declaredModules) {\n                    this._fileNameToDeclaredModule[filename] = declaredModules = [];\n                }\n                declaredModules.push(match[2]);\n            }\n        }\n        this._snapshots[filename] = snapshot;\n        return old;\n    }\n    removeScriptSnapshot(filename) {\n        this._filesInProject.delete(filename);\n        this._filesAdded.delete(filename);\n        this._projectVersion++;\n        filename = normalize(filename);\n        delete this._fileNameToDeclaredModule[filename];\n        return delete this._snapshots[filename];\n    }\n    getCurrentDirectory() {\n        return path_1.default.dirname(this._projectPath);\n    }\n    getDefaultLibFileName(options) {\n        return typescript_1.default.getDefaultLibFilePath(options);\n    }\n    directoryExists = typescript_1.default.sys.directoryExists;\n    getDirectories = typescript_1.default.sys.getDirectories;\n    fileExists = typescript_1.default.sys.fileExists;\n    readFile = typescript_1.default.sys.readFile;\n    readDirectory = typescript_1.default.sys.readDirectory;\n    // ---- dependency management\n    collectDependents(filename, target) {\n        while (this._dependenciesRecomputeList.length) {\n            this._processFile(this._dependenciesRecomputeList.pop());\n        }\n        filename = normalize(filename);\n        const node = this._dependencies.lookup(filename);\n        if (node) {\n            node.incoming.forEach(entry => target.push(entry.data));\n        }\n    }\n    hasCyclicDependency() {\n        // Ensure dependencies are up to date\n        while (this._dependenciesRecomputeList.length) {\n            this._processFile(this._dependenciesRecomputeList.pop());\n        }\n        const cycle = this._dependencies.findCycle();\n        return cycle\n            ? cycle.join(' -> ')\n            : undefined;\n    }\n    _processFile(filename) {\n        if (filename.match(/.*\\.d\\.ts$/)) {\n            return;\n        }\n        filename = normalize(filename);\n        const snapshot = this.getScriptSnapshot(filename);\n        if (!snapshot) {\n            this._log('processFile', `Missing snapshot for: ${filename}`);\n            return;\n        }\n        const info = typescript_1.default.preProcessFile(snapshot.getText(0, snapshot.getLength()), true);\n        // (0) clear out old dependencies\n        this._dependencies.resetNode(filename);\n        // (1) ///-references\n        info.referencedFiles.forEach(ref => {\n            const resolvedPath = path_1.default.resolve(path_1.default.dirname(filename), ref.fileName);\n            const normalizedPath = normalize(resolvedPath);\n            this._dependencies.inertEdge(filename, normalizedPath);\n        });\n        // (2) import-require statements\n        info.importedFiles.forEach(ref => {\n            if (!ref.fileName.startsWith('.')) {\n                // node module?\n                return;\n            }\n            const stopDirname = normalize(this.getCurrentDirectory());\n            let dirname = filename;\n            let found = false;\n            while (!found && dirname.indexOf(stopDirname) === 0) {\n                dirname = path_1.default.dirname(dirname);\n                let resolvedPath = path_1.default.resolve(dirname, ref.fileName);\n                if (resolvedPath.endsWith('.js')) {\n                    resolvedPath = resolvedPath.slice(0, -3);\n                }\n                const normalizedPath = normalize(resolvedPath);\n                if (this.getScriptSnapshot(normalizedPath + '.ts')) {\n                    this._dependencies.inertEdge(filename, normalizedPath + '.ts');\n                    found = true;\n                }\n                else if (this.getScriptSnapshot(normalizedPath + '.d.ts')) {\n                    this._dependencies.inertEdge(filename, normalizedPath + '.d.ts');\n                    found = true;\n                }\n                else if (this.getScriptSnapshot(normalizedPath + '.js')) {\n                    this._dependencies.inertEdge(filename, normalizedPath + '.js');\n                    found = true;\n                }\n            }\n            if (!found) {\n                for (const key in this._fileNameToDeclaredModule) {\n                    if (this._fileNameToDeclaredModule[key] && ~this._fileNameToDeclaredModule[key].indexOf(ref.fileName)) {\n                        this._dependencies.inertEdge(filename, key);\n                    }\n                }\n            }\n        });\n    }\n}\n//# sourceMappingURL=builder.js.map"
  },
  {
    "path": "build/lib/tsb/builder.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'fs';\nimport path from 'path';\nimport crypto from 'crypto';\nimport * as utils from './utils';\nimport colors from 'ansi-colors';\nimport ts from 'typescript';\nimport Vinyl from 'vinyl';\nimport { RawSourceMap, SourceMapConsumer, SourceMapGenerator } from 'source-map';\n\nexport interface IConfiguration {\n\tlogFn: (topic: string, message: string) => void;\n\t_emitWithoutBasePath?: boolean;\n}\n\nexport interface CancellationToken {\n\tisCancellationRequested(): boolean;\n}\n\nexport namespace CancellationToken {\n\texport const None: CancellationToken = {\n\t\tisCancellationRequested() { return false; }\n\t};\n}\n\nexport interface ITypeScriptBuilder {\n\tbuild(out: (file: Vinyl) => void, onError: (err: ts.Diagnostic) => void, token?: CancellationToken): Promise<any>;\n\tfile(file: Vinyl): void;\n\tlanguageService: ts.LanguageService;\n}\n\nfunction normalize(path: string): string {\n\treturn path.replace(/\\\\/g, '/');\n}\n\nexport function createTypeScriptBuilder(config: IConfiguration, projectFile: string, cmd: ts.ParsedCommandLine): ITypeScriptBuilder {\n\n\tconst _log = config.logFn;\n\n\tconst host = new LanguageServiceHost(cmd, projectFile, _log);\n\n\tconst outHost = new LanguageServiceHost({ ...cmd, options: { ...cmd.options, sourceRoot: cmd.options.outDir } }, cmd.options.outDir ?? '', _log);\n\tlet lastCycleCheckVersion: string;\n\n\tconst service = ts.createLanguageService(host, ts.createDocumentRegistry());\n\tconst lastBuildVersion: { [path: string]: string } = Object.create(null);\n\tconst lastDtsHash: { [path: string]: string } = Object.create(null);\n\tconst userWantsDeclarations = cmd.options.declaration;\n\tlet oldErrors: { [path: string]: ts.Diagnostic[] } = Object.create(null);\n\tlet headUsed = process.memoryUsage().heapUsed;\n\tlet emitSourceMapsInStream = true;\n\n\t// always emit declaraction files\n\thost.getCompilationSettings().declaration = true;\n\n\tfunction file(file: Vinyl): void {\n\t\t// support gulp-sourcemaps\n\t\tif ((<any>file).sourceMap) {\n\t\t\temitSourceMapsInStream = false;\n\t\t}\n\n\t\tif (!file.contents) {\n\t\t\thost.removeScriptSnapshot(file.path);\n\t\t\tdelete lastBuildVersion[normalize(file.path)];\n\t\t} else {\n\t\t\thost.addScriptSnapshot(file.path, new VinylScriptSnapshot(file));\n\t\t}\n\t}\n\n\tfunction baseFor(snapshot: ScriptSnapshot): string {\n\t\tif (snapshot instanceof VinylScriptSnapshot) {\n\t\t\treturn cmd.options.outDir || snapshot.getBase();\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tfunction isExternalModule(sourceFile: ts.SourceFile): boolean {\n\t\treturn (<any>sourceFile).externalModuleIndicator\n\t\t\t|| /declare\\s+module\\s+('|\")(.+)\\1/.test(sourceFile.getText());\n\t}\n\n\tfunction build(out: (file: Vinyl) => void, onError: (err: any) => void, token = CancellationToken.None): Promise<any> {\n\n\t\tfunction checkSyntaxSoon(fileName: string): Promise<ts.Diagnostic[]> {\n\t\t\treturn new Promise<ts.Diagnostic[]>(resolve => {\n\t\t\t\tprocess.nextTick(function () {\n\t\t\t\t\tif (!host.getScriptSnapshot(fileName, false)) {\n\t\t\t\t\t\tresolve([]); // no script, no problems\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(service.getSyntacticDiagnostics(fileName));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tfunction checkSemanticsSoon(fileName: string): Promise<ts.Diagnostic[]> {\n\t\t\treturn new Promise<ts.Diagnostic[]>(resolve => {\n\t\t\t\tprocess.nextTick(function () {\n\t\t\t\t\tif (!host.getScriptSnapshot(fileName, false)) {\n\t\t\t\t\t\tresolve([]); // no script, no problems\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(service.getSemanticDiagnostics(fileName));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tfunction emitSoon(fileName: string): Promise<{ fileName: string; signature?: string; files: Vinyl[] }> {\n\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tprocess.nextTick(function () {\n\n\t\t\t\t\tif (/\\.d\\.ts$/.test(fileName)) {\n\t\t\t\t\t\t// if it's already a d.ts file just emit it signature\n\t\t\t\t\t\tconst snapshot = host.getScriptSnapshot(fileName);\n\t\t\t\t\t\tconst signature = crypto.createHash('sha256')\n\t\t\t\t\t\t\t.update(snapshot.getText(0, snapshot.getLength()))\n\t\t\t\t\t\t\t.digest('base64');\n\n\t\t\t\t\t\treturn resolve({\n\t\t\t\t\t\t\tfileName,\n\t\t\t\t\t\t\tsignature,\n\t\t\t\t\t\t\tfiles: []\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst output = service.getEmitOutput(fileName);\n\t\t\t\t\tconst files: Vinyl[] = [];\n\t\t\t\t\tlet signature: string | undefined;\n\n\t\t\t\t\tfor (const file of output.outputFiles) {\n\t\t\t\t\t\tif (!emitSourceMapsInStream && /\\.js\\.map$/.test(file.name)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (/\\.d\\.ts$/.test(file.name)) {\n\t\t\t\t\t\t\tsignature = crypto.createHash('sha256')\n\t\t\t\t\t\t\t\t.update(file.text)\n\t\t\t\t\t\t\t\t.digest('base64');\n\n\t\t\t\t\t\t\tif (!userWantsDeclarations) {\n\t\t\t\t\t\t\t\t// don't leak .d.ts files if users don't want them\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst vinyl = new Vinyl({\n\t\t\t\t\t\t\tpath: file.name,\n\t\t\t\t\t\t\tcontents: Buffer.from(file.text),\n\t\t\t\t\t\t\tbase: !config._emitWithoutBasePath && baseFor(host.getScriptSnapshot(fileName)) || undefined\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!emitSourceMapsInStream && /\\.js$/.test(file.name)) {\n\t\t\t\t\t\t\tconst sourcemapFile = output.outputFiles.filter(f => /\\.js\\.map$/.test(f.name))[0];\n\n\t\t\t\t\t\t\tif (sourcemapFile) {\n\t\t\t\t\t\t\t\tconst extname = path.extname(vinyl.relative);\n\t\t\t\t\t\t\t\tconst basename = path.basename(vinyl.relative, extname);\n\t\t\t\t\t\t\t\tconst dirname = path.dirname(vinyl.relative);\n\t\t\t\t\t\t\t\tconst tsname = (dirname === '.' ? '' : dirname + '/') + basename + '.ts';\n\n\t\t\t\t\t\t\t\tlet sourceMap = <RawSourceMap>JSON.parse(sourcemapFile.text);\n\t\t\t\t\t\t\t\tsourceMap.sources[0] = tsname.replace(/\\\\/g, '/');\n\n\t\t\t\t\t\t\t\t// check for an \"input source\" map and combine them\n\t\t\t\t\t\t\t\t// in step 1 we extract all line edit from the input source map, and\n\t\t\t\t\t\t\t\t// in step 2 we apply the line edits to the typescript source map\n\t\t\t\t\t\t\t\tconst snapshot = host.getScriptSnapshot(fileName);\n\t\t\t\t\t\t\t\tif (snapshot instanceof VinylScriptSnapshot && snapshot.sourceMap) {\n\t\t\t\t\t\t\t\t\tconst inputSMC = new SourceMapConsumer(snapshot.sourceMap);\n\t\t\t\t\t\t\t\t\tconst tsSMC = new SourceMapConsumer(sourceMap);\n\t\t\t\t\t\t\t\t\tlet didChange = false;\n\t\t\t\t\t\t\t\t\tconst smg = new SourceMapGenerator({\n\t\t\t\t\t\t\t\t\t\tfile: sourceMap.file,\n\t\t\t\t\t\t\t\t\t\tsourceRoot: sourceMap.sourceRoot\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// step 1\n\t\t\t\t\t\t\t\t\tconst lineEdits = new Map<number, [from: number, to: number][]>();\n\t\t\t\t\t\t\t\t\tinputSMC.eachMapping(m => {\n\t\t\t\t\t\t\t\t\t\tif (m.originalLine === m.generatedLine) {\n\t\t\t\t\t\t\t\t\t\t\t// same line mapping\n\t\t\t\t\t\t\t\t\t\t\tlet array = lineEdits.get(m.originalLine);\n\t\t\t\t\t\t\t\t\t\t\tif (!array) {\n\t\t\t\t\t\t\t\t\t\t\t\tarray = [];\n\t\t\t\t\t\t\t\t\t\t\t\tlineEdits.set(m.originalLine, array);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tarray.push([m.originalColumn, m.generatedColumn]);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// NOT SUPPORTED\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// step 2\n\t\t\t\t\t\t\t\t\ttsSMC.eachMapping(m => {\n\t\t\t\t\t\t\t\t\t\tdidChange = true;\n\t\t\t\t\t\t\t\t\t\tconst edits = lineEdits.get(m.originalLine);\n\t\t\t\t\t\t\t\t\t\tlet originalColumnDelta = 0;\n\t\t\t\t\t\t\t\t\t\tif (edits) {\n\t\t\t\t\t\t\t\t\t\t\tfor (const [from, to] of edits) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (to >= m.originalColumn) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\toriginalColumnDelta = from - to;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tsmg.addMapping({\n\t\t\t\t\t\t\t\t\t\t\tsource: m.source,\n\t\t\t\t\t\t\t\t\t\t\tname: m.name,\n\t\t\t\t\t\t\t\t\t\t\tgenerated: { line: m.generatedLine, column: m.generatedColumn },\n\t\t\t\t\t\t\t\t\t\t\toriginal: { line: m.originalLine, column: m.originalColumn + originalColumnDelta }\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (didChange) {\n\n\t\t\t\t\t\t\t\t\t\t[tsSMC, inputSMC].forEach((consumer) => {\n\t\t\t\t\t\t\t\t\t\t\t(<SourceMapConsumer & { sources: string[] }>consumer).sources.forEach((sourceFile: any) => {\n\t\t\t\t\t\t\t\t\t\t\t\t(<any>smg)._sources.add(sourceFile);\n\t\t\t\t\t\t\t\t\t\t\t\tconst sourceContent = consumer.sourceContentFor(sourceFile);\n\t\t\t\t\t\t\t\t\t\t\t\tif (sourceContent !== null) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsmg.setSourceContent(sourceFile, sourceContent);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tsourceMap = JSON.parse(smg.toString());\n\n\t\t\t\t\t\t\t\t\t\t// const filename = '/Users/jrieken/Code/vscode/src2/' + vinyl.relative + '.map';\n\t\t\t\t\t\t\t\t\t\t// fs.promises.mkdir(path.dirname(filename), { recursive: true }).then(async () => {\n\t\t\t\t\t\t\t\t\t\t// \tawait fs.promises.writeFile(filename, smg.toString());\n\t\t\t\t\t\t\t\t\t\t// \tawait fs.promises.writeFile('/Users/jrieken/Code/vscode/src2/' + vinyl.relative, vinyl.contents);\n\t\t\t\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t(<any>vinyl).sourceMap = sourceMap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfiles.push(vinyl);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tfileName,\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\tfiles\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tconst newErrors: { [path: string]: ts.Diagnostic[] } = Object.create(null);\n\t\tconst t1 = Date.now();\n\n\t\tconst toBeEmitted: string[] = [];\n\t\tconst toBeCheckedSyntactically: string[] = [];\n\t\tconst toBeCheckedSemantically: string[] = [];\n\t\tconst filesWithChangedSignature: string[] = [];\n\t\tconst dependentFiles: string[] = [];\n\t\tconst newLastBuildVersion = new Map<string, string>();\n\n\t\tfor (const fileName of host.getScriptFileNames()) {\n\t\t\tif (lastBuildVersion[fileName] !== host.getScriptVersion(fileName)) {\n\n\t\t\t\ttoBeEmitted.push(fileName);\n\t\t\t\ttoBeCheckedSyntactically.push(fileName);\n\t\t\t\ttoBeCheckedSemantically.push(fileName);\n\t\t\t}\n\t\t}\n\n\t\treturn new Promise<void>(resolve => {\n\n\t\t\tconst semanticCheckInfo = new Map<string, number>();\n\t\t\tconst seenAsDependentFile = new Set<string>();\n\n\t\t\tfunction workOnNext() {\n\n\t\t\t\tlet promise: Promise<any> | undefined;\n\t\t\t\t// let fileName: string;\n\n\t\t\t\t// someone told us to stop this\n\t\t\t\tif (token.isCancellationRequested()) {\n\t\t\t\t\t_log('[CANCEL]', '>>This compile run was cancelled<<');\n\t\t\t\t\tnewLastBuildVersion.clear();\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// (1st) emit code\n\t\t\t\telse if (toBeEmitted.length) {\n\t\t\t\t\tconst fileName = toBeEmitted.pop()!;\n\t\t\t\t\tpromise = emitSoon(fileName).then(value => {\n\n\t\t\t\t\t\tfor (const file of value.files) {\n\t\t\t\t\t\t\t_log('[emit code]', file.path);\n\t\t\t\t\t\t\tout(file);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// remember when this was build\n\t\t\t\t\t\tnewLastBuildVersion.set(fileName, host.getScriptVersion(fileName));\n\n\t\t\t\t\t\t// remeber the signature\n\t\t\t\t\t\tif (value.signature && lastDtsHash[fileName] !== value.signature) {\n\t\t\t\t\t\t\tlastDtsHash[fileName] = value.signature;\n\t\t\t\t\t\t\tfilesWithChangedSignature.push(fileName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// line up for cycle check\n\t\t\t\t\t\tconst jsValue = value.files.find(candidate => candidate.basename.endsWith('.js'));\n\t\t\t\t\t\tif (jsValue) {\n\t\t\t\t\t\t\toutHost.addScriptSnapshot(jsValue.path, new ScriptSnapshot(String(jsValue.contents), new Date()));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}).catch(e => {\n\t\t\t\t\t\t// can't just skip this or make a result up..\n\t\t\t\t\t\thost.error(`ERROR emitting ${fileName}`);\n\t\t\t\t\t\thost.error(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// (2nd) check syntax\n\t\t\t\telse if (toBeCheckedSyntactically.length) {\n\t\t\t\t\tconst fileName = toBeCheckedSyntactically.pop()!;\n\t\t\t\t\t_log('[check syntax]', fileName);\n\t\t\t\t\tpromise = checkSyntaxSoon(fileName).then(diagnostics => {\n\t\t\t\t\t\tdelete oldErrors[fileName];\n\t\t\t\t\t\tif (diagnostics.length > 0) {\n\t\t\t\t\t\t\tdiagnostics.forEach(d => onError(d));\n\t\t\t\t\t\t\tnewErrors[fileName] = diagnostics;\n\n\t\t\t\t\t\t\t// stop the world when there are syntax errors\n\t\t\t\t\t\t\ttoBeCheckedSyntactically.length = 0;\n\t\t\t\t\t\t\ttoBeCheckedSemantically.length = 0;\n\t\t\t\t\t\t\tfilesWithChangedSignature.length = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// (3rd) check semantics\n\t\t\t\telse if (toBeCheckedSemantically.length) {\n\n\t\t\t\t\tlet fileName = toBeCheckedSemantically.pop();\n\t\t\t\t\twhile (fileName && semanticCheckInfo.has(fileName)) {\n\t\t\t\t\t\tfileName = toBeCheckedSemantically.pop()!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fileName) {\n\t\t\t\t\t\t_log('[check semantics]', fileName);\n\t\t\t\t\t\tpromise = checkSemanticsSoon(fileName).then(diagnostics => {\n\t\t\t\t\t\t\tdelete oldErrors[fileName!];\n\t\t\t\t\t\t\tsemanticCheckInfo.set(fileName!, diagnostics.length);\n\t\t\t\t\t\t\tif (diagnostics.length > 0) {\n\t\t\t\t\t\t\t\tdiagnostics.forEach(d => onError(d));\n\t\t\t\t\t\t\t\tnewErrors[fileName!] = diagnostics;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// (4th) check dependents\n\t\t\t\telse if (filesWithChangedSignature.length) {\n\t\t\t\t\twhile (filesWithChangedSignature.length) {\n\t\t\t\t\t\tconst fileName = filesWithChangedSignature.pop()!;\n\n\t\t\t\t\t\tif (!isExternalModule(service.getProgram()!.getSourceFile(fileName)!)) {\n\t\t\t\t\t\t\t_log('[check semantics*]', fileName + ' is an internal module and it has changed shape -> check whatever hasn\\'t been checked yet');\n\t\t\t\t\t\t\ttoBeCheckedSemantically.push(...host.getScriptFileNames());\n\t\t\t\t\t\t\tfilesWithChangedSignature.length = 0;\n\t\t\t\t\t\t\tdependentFiles.length = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thost.collectDependents(fileName, dependentFiles);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// (5th) dependents contd\n\t\t\t\telse if (dependentFiles.length) {\n\t\t\t\t\tlet fileName = dependentFiles.pop();\n\t\t\t\t\twhile (fileName && seenAsDependentFile.has(fileName)) {\n\t\t\t\t\t\tfileName = dependentFiles.pop();\n\t\t\t\t\t}\n\t\t\t\t\tif (fileName) {\n\t\t\t\t\t\tseenAsDependentFile.add(fileName);\n\t\t\t\t\t\tconst value = semanticCheckInfo.get(fileName);\n\t\t\t\t\t\tif (value === 0) {\n\t\t\t\t\t\t\t// already validated successfully -> look at dependents next\n\t\t\t\t\t\t\thost.collectDependents(fileName, dependentFiles);\n\n\t\t\t\t\t\t} else if (typeof value === 'undefined') {\n\t\t\t\t\t\t\t// first validate -> look at dependents next\n\t\t\t\t\t\t\tdependentFiles.push(fileName);\n\t\t\t\t\t\t\ttoBeCheckedSemantically.push(fileName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\t// (last) done\n\t\t\t\telse {\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!promise) {\n\t\t\t\t\tpromise = Promise.resolve();\n\t\t\t\t}\n\n\t\t\t\tpromise.then(function () {\n\t\t\t\t\t// change to change\n\t\t\t\t\tprocess.nextTick(workOnNext);\n\t\t\t\t}).catch(err => {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tworkOnNext();\n\n\t\t}).then(() => {\n\t\t\t// check for cyclic dependencies\n\t\t\tconst thisCycleCheckVersion = outHost.getProjectVersion();\n\t\t\tif (thisCycleCheckVersion === lastCycleCheckVersion) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst oneCycle = outHost.hasCyclicDependency();\n\t\t\tlastCycleCheckVersion = thisCycleCheckVersion;\n\t\t\tdelete oldErrors[projectFile];\n\n\t\t\tif (oneCycle) {\n\t\t\t\tconst cycleError: ts.Diagnostic = {\n\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\tcode: 1,\n\t\t\t\t\tfile: undefined,\n\t\t\t\t\tstart: undefined,\n\t\t\t\t\tlength: undefined,\n\t\t\t\t\tmessageText: `CYCLIC dependency between ${oneCycle}`\n\t\t\t\t};\n\t\t\t\tonError(cycleError);\n\t\t\t\tnewErrors[projectFile] = [cycleError];\n\t\t\t}\n\n\t\t}).then(() => {\n\n\t\t\t// store the build versions to not rebuilt the next time\n\t\t\tnewLastBuildVersion.forEach((value, key) => {\n\t\t\t\tlastBuildVersion[key] = value;\n\t\t\t});\n\n\t\t\t// print old errors and keep them\n\t\t\tfor (const [key, value] of Object.entries(oldErrors)) {\n\t\t\t\tvalue.forEach(diag => onError(diag));\n\t\t\t\tnewErrors[key] = value;\n\t\t\t}\n\t\t\toldErrors = newErrors;\n\n\t\t\t// print stats\n\t\t\tconst headNow = process.memoryUsage().heapUsed;\n\t\t\tconst MB = 1024 * 1024;\n\t\t\t_log(\n\t\t\t\t'[tsb]',\n\t\t\t\t`time:  ${colors.yellow((Date.now() - t1) + 'ms')} + \\nmem:  ${colors.cyan(Math.ceil(headNow / MB) + 'MB')} ${colors.bgcyan('delta: ' + Math.ceil((headNow - headUsed) / MB))}`\n\t\t\t);\n\t\t\theadUsed = headNow;\n\t\t});\n\t}\n\n\treturn {\n\t\tfile,\n\t\tbuild,\n\t\tlanguageService: service\n\t};\n}\n\nclass ScriptSnapshot implements ts.IScriptSnapshot {\n\n\tprivate readonly _text: string;\n\tprivate readonly _mtime: Date;\n\n\tconstructor(text: string, mtime: Date) {\n\t\tthis._text = text;\n\t\tthis._mtime = mtime;\n\t}\n\n\tgetVersion(): string {\n\t\treturn this._mtime.toUTCString();\n\t}\n\n\tgetText(start: number, end: number): string {\n\t\treturn this._text.substring(start, end);\n\t}\n\n\tgetLength(): number {\n\t\treturn this._text.length;\n\t}\n\n\tgetChangeRange(_oldSnapshot: ts.IScriptSnapshot): ts.TextChangeRange | undefined {\n\t\treturn undefined;\n\t}\n}\n\nclass VinylScriptSnapshot extends ScriptSnapshot {\n\n\tprivate readonly _base: string;\n\n\treadonly sourceMap?: RawSourceMap;\n\n\tconstructor(file: Vinyl & { sourceMap?: RawSourceMap }) {\n\t\tsuper(file.contents!.toString(), file.stat!.mtime);\n\t\tthis._base = file.base;\n\t\tthis.sourceMap = file.sourceMap;\n\t}\n\n\tgetBase(): string {\n\t\treturn this._base;\n\t}\n}\n\nclass LanguageServiceHost implements ts.LanguageServiceHost {\n\n\tprivate readonly _snapshots: { [path: string]: ScriptSnapshot };\n\tprivate readonly _filesInProject: Set<string>;\n\tprivate readonly _filesAdded: Set<string>;\n\tprivate readonly _dependencies: utils.graph.Graph<string>;\n\tprivate readonly _dependenciesRecomputeList: string[];\n\tprivate readonly _fileNameToDeclaredModule: { [path: string]: string[] };\n\n\tprivate _projectVersion: number;\n\n\tconstructor(\n\t\tprivate readonly _cmdLine: ts.ParsedCommandLine,\n\t\tprivate readonly _projectPath: string,\n\t\tprivate readonly _log: (topic: string, message: string) => void\n\t) {\n\t\tthis._snapshots = Object.create(null);\n\t\tthis._filesInProject = new Set(_cmdLine.fileNames);\n\t\tthis._filesAdded = new Set();\n\t\tthis._dependencies = new utils.graph.Graph<string>();\n\t\tthis._dependenciesRecomputeList = [];\n\t\tthis._fileNameToDeclaredModule = Object.create(null);\n\n\t\tthis._projectVersion = 1;\n\t}\n\n\tlog(_s: string): void {\n\t\t// console.log(s);\n\t}\n\n\ttrace(_s: string): void {\n\t\t// console.log(s);\n\t}\n\n\terror(s: string): void {\n\t\tconsole.error(s);\n\t}\n\n\tgetCompilationSettings(): ts.CompilerOptions {\n\t\treturn this._cmdLine.options;\n\t}\n\n\tgetProjectVersion(): string {\n\t\treturn String(this._projectVersion);\n\t}\n\n\tgetScriptFileNames(): string[] {\n\t\tconst res = Object.keys(this._snapshots).filter(path => this._filesInProject.has(path) || this._filesAdded.has(path));\n\t\treturn res;\n\t}\n\n\tgetScriptVersion(filename: string): string {\n\t\tfilename = normalize(filename);\n\t\tconst result = this._snapshots[filename];\n\t\tif (result) {\n\t\t\treturn result.getVersion();\n\t\t}\n\t\treturn 'UNKNWON_FILE_' + Math.random().toString(16).slice(2);\n\t}\n\n\tgetScriptSnapshot(filename: string, resolve: boolean = true): ScriptSnapshot {\n\t\tfilename = normalize(filename);\n\t\tlet result = this._snapshots[filename];\n\t\tif (!result && resolve) {\n\t\t\ttry {\n\t\t\t\tresult = new VinylScriptSnapshot(new Vinyl(<any>{\n\t\t\t\t\tpath: filename,\n\t\t\t\t\tcontents: fs.readFileSync(filename),\n\t\t\t\t\tbase: this.getCompilationSettings().outDir,\n\t\t\t\t\tstat: fs.statSync(filename)\n\t\t\t\t}));\n\t\t\t\tthis.addScriptSnapshot(filename, result);\n\t\t\t} catch (e) {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _declareModule = /declare\\s+module\\s+('|\")(.+)\\1/g;\n\n\taddScriptSnapshot(filename: string, snapshot: ScriptSnapshot): ScriptSnapshot {\n\t\tthis._projectVersion++;\n\t\tfilename = normalize(filename);\n\t\tconst old = this._snapshots[filename];\n\t\tif (!old && !this._filesInProject.has(filename) && !filename.endsWith('.d.ts')) {\n\t\t\t//                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^\n\t\t\t//                                              not very proper!\n\t\t\tthis._filesAdded.add(filename);\n\t\t}\n\t\tif (!old || old.getVersion() !== snapshot.getVersion()) {\n\t\t\tthis._dependenciesRecomputeList.push(filename);\n\n\t\t\t// (cheap) check for declare module\n\t\t\tLanguageServiceHost._declareModule.lastIndex = 0;\n\t\t\tlet match: RegExpExecArray | null | undefined;\n\t\t\twhile ((match = LanguageServiceHost._declareModule.exec(snapshot.getText(0, snapshot.getLength())))) {\n\t\t\t\tlet declaredModules = this._fileNameToDeclaredModule[filename];\n\t\t\t\tif (!declaredModules) {\n\t\t\t\t\tthis._fileNameToDeclaredModule[filename] = declaredModules = [];\n\t\t\t\t}\n\t\t\t\tdeclaredModules.push(match[2]);\n\t\t\t}\n\t\t}\n\t\tthis._snapshots[filename] = snapshot;\n\t\treturn old;\n\t}\n\n\tremoveScriptSnapshot(filename: string): boolean {\n\t\tthis._filesInProject.delete(filename);\n\t\tthis._filesAdded.delete(filename);\n\t\tthis._projectVersion++;\n\t\tfilename = normalize(filename);\n\t\tdelete this._fileNameToDeclaredModule[filename];\n\t\treturn delete this._snapshots[filename];\n\t}\n\n\tgetCurrentDirectory(): string {\n\t\treturn path.dirname(this._projectPath);\n\t}\n\n\tgetDefaultLibFileName(options: ts.CompilerOptions): string {\n\t\treturn ts.getDefaultLibFilePath(options);\n\t}\n\n\treadonly directoryExists = ts.sys.directoryExists;\n\treadonly getDirectories = ts.sys.getDirectories;\n\treadonly fileExists = ts.sys.fileExists;\n\treadonly readFile = ts.sys.readFile;\n\treadonly readDirectory = ts.sys.readDirectory;\n\n\t// ---- dependency management\n\n\tcollectDependents(filename: string, target: string[]): void {\n\t\twhile (this._dependenciesRecomputeList.length) {\n\t\t\tthis._processFile(this._dependenciesRecomputeList.pop()!);\n\t\t}\n\t\tfilename = normalize(filename);\n\t\tconst node = this._dependencies.lookup(filename);\n\t\tif (node) {\n\t\t\tnode.incoming.forEach(entry => target.push(entry.data));\n\t\t}\n\t}\n\n\thasCyclicDependency(): string | undefined {\n\t\t// Ensure dependencies are up to date\n\t\twhile (this._dependenciesRecomputeList.length) {\n\t\t\tthis._processFile(this._dependenciesRecomputeList.pop()!);\n\t\t}\n\t\tconst cycle = this._dependencies.findCycle();\n\t\treturn cycle\n\t\t\t? cycle.join(' -> ')\n\t\t\t: undefined;\n\t}\n\n\t_processFile(filename: string): void {\n\t\tif (filename.match(/.*\\.d\\.ts$/)) {\n\t\t\treturn;\n\t\t}\n\t\tfilename = normalize(filename);\n\t\tconst snapshot = this.getScriptSnapshot(filename);\n\t\tif (!snapshot) {\n\t\t\tthis._log('processFile', `Missing snapshot for: ${filename}`);\n\t\t\treturn;\n\t\t}\n\t\tconst info = ts.preProcessFile(snapshot.getText(0, snapshot.getLength()), true);\n\n\t\t// (0) clear out old dependencies\n\t\tthis._dependencies.resetNode(filename);\n\n\t\t// (1) ///-references\n\t\tinfo.referencedFiles.forEach(ref => {\n\t\t\tconst resolvedPath = path.resolve(path.dirname(filename), ref.fileName);\n\t\t\tconst normalizedPath = normalize(resolvedPath);\n\n\t\t\tthis._dependencies.inertEdge(filename, normalizedPath);\n\t\t});\n\n\t\t// (2) import-require statements\n\t\tinfo.importedFiles.forEach(ref => {\n\n\t\t\tif (!ref.fileName.startsWith('.')) {\n\t\t\t\t// node module?\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tconst stopDirname = normalize(this.getCurrentDirectory());\n\t\t\tlet dirname = filename;\n\t\t\tlet found = false;\n\n\n\t\t\twhile (!found && dirname.indexOf(stopDirname) === 0) {\n\t\t\t\tdirname = path.dirname(dirname);\n\t\t\t\tlet resolvedPath = path.resolve(dirname, ref.fileName);\n\t\t\t\tif (resolvedPath.endsWith('.js')) {\n\t\t\t\t\tresolvedPath = resolvedPath.slice(0, -3);\n\t\t\t\t}\n\t\t\t\tconst normalizedPath = normalize(resolvedPath);\n\n\t\t\t\tif (this.getScriptSnapshot(normalizedPath + '.ts')) {\n\t\t\t\t\tthis._dependencies.inertEdge(filename, normalizedPath + '.ts');\n\t\t\t\t\tfound = true;\n\n\t\t\t\t} else if (this.getScriptSnapshot(normalizedPath + '.d.ts')) {\n\t\t\t\t\tthis._dependencies.inertEdge(filename, normalizedPath + '.d.ts');\n\t\t\t\t\tfound = true;\n\n\t\t\t\t} else if (this.getScriptSnapshot(normalizedPath + '.js')) {\n\t\t\t\t\tthis._dependencies.inertEdge(filename, normalizedPath + '.js');\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!found) {\n\t\t\t\tfor (const key in this._fileNameToDeclaredModule) {\n\t\t\t\t\tif (this._fileNameToDeclaredModule[key] && ~this._fileNameToDeclaredModule[key].indexOf(ref.fileName)) {\n\t\t\t\t\t\tthis._dependencies.inertEdge(filename, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "build/lib/tsb/index.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.create = create;\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst through_1 = __importDefault(require(\"through\"));\nconst builder = __importStar(require(\"./builder\"));\nconst typescript_1 = __importDefault(require(\"typescript\"));\nconst stream_1 = require(\"stream\");\nconst path_1 = require(\"path\");\nconst utils_1 = require(\"./utils\");\nconst fs_1 = require(\"fs\");\nconst fancy_log_1 = __importDefault(require(\"fancy-log\"));\nconst transpiler_1 = require(\"./transpiler\");\nconst colors = require(\"ansi-colors\");\nclass EmptyDuplex extends stream_1.Duplex {\n    _write(_chunk, _encoding, callback) { callback(); }\n    _read() { this.push(null); }\n}\nfunction createNullCompiler() {\n    const result = function () { return new EmptyDuplex(); };\n    result.src = () => new EmptyDuplex();\n    return result;\n}\nconst _defaultOnError = (err) => console.log(JSON.stringify(err, null, 4));\nfunction create(projectPath, existingOptions, config, onError = _defaultOnError) {\n    function printDiagnostic(diag) {\n        if (diag instanceof Error) {\n            onError(diag.message);\n        }\n        else if (!diag.file || !diag.start) {\n            onError(typescript_1.default.flattenDiagnosticMessageText(diag.messageText, '\\n'));\n        }\n        else {\n            const lineAndCh = diag.file.getLineAndCharacterOfPosition(diag.start);\n            onError(utils_1.strings.format('{0}({1},{2}): {3}', diag.file.fileName, lineAndCh.line + 1, lineAndCh.character + 1, typescript_1.default.flattenDiagnosticMessageText(diag.messageText, '\\n')));\n        }\n    }\n    const parsed = typescript_1.default.readConfigFile(projectPath, typescript_1.default.sys.readFile);\n    if (parsed.error) {\n        printDiagnostic(parsed.error);\n        return createNullCompiler();\n    }\n    const cmdLine = typescript_1.default.parseJsonConfigFileContent(parsed.config, typescript_1.default.sys, (0, path_1.dirname)(projectPath), existingOptions);\n    if (cmdLine.errors.length > 0) {\n        cmdLine.errors.forEach(printDiagnostic);\n        return createNullCompiler();\n    }\n    function logFn(topic, message) {\n        if (config.verbose) {\n            (0, fancy_log_1.default)(colors.cyan(topic), message);\n        }\n    }\n    // FULL COMPILE stream doing transpile, syntax and semantic diagnostics\n    function createCompileStream(builder, token) {\n        return (0, through_1.default)(function (file) {\n            // give the file to the compiler\n            if (file.isStream()) {\n                this.emit('error', 'no support for streams');\n                return;\n            }\n            builder.file(file);\n        }, function () {\n            // start the compilation process\n            builder.build(file => this.queue(file), printDiagnostic, token).catch(e => console.error(e)).then(() => this.queue(null));\n        });\n    }\n    // TRANSPILE ONLY stream doing just TS to JS conversion\n    function createTranspileStream(transpiler) {\n        return (0, through_1.default)(function (file) {\n            // give the file to the compiler\n            if (file.isStream()) {\n                this.emit('error', 'no support for streams');\n                return;\n            }\n            if (!file.contents) {\n                return;\n            }\n            if (!config.transpileOnlyIncludesDts && file.path.endsWith('.d.ts')) {\n                return;\n            }\n            if (!transpiler.onOutfile) {\n                transpiler.onOutfile = file => this.queue(file);\n            }\n            transpiler.transpile(file);\n        }, function () {\n            transpiler.join().then(() => {\n                this.queue(null);\n                transpiler.onOutfile = undefined;\n            });\n        });\n    }\n    let result;\n    if (config.transpileOnly) {\n        const transpiler = !config.transpileWithSwc\n            ? new transpiler_1.TscTranspiler(logFn, printDiagnostic, projectPath, cmdLine)\n            : new transpiler_1.ESBuildTranspiler(logFn, printDiagnostic, projectPath, cmdLine);\n        result = (() => createTranspileStream(transpiler));\n    }\n    else {\n        const _builder = builder.createTypeScriptBuilder({ logFn }, projectPath, cmdLine);\n        result = ((token) => createCompileStream(_builder, token));\n    }\n    result.src = (opts) => {\n        let _pos = 0;\n        const _fileNames = cmdLine.fileNames.slice(0);\n        return new class extends stream_1.Readable {\n            constructor() {\n                super({ objectMode: true });\n            }\n            _read() {\n                let more = true;\n                let path;\n                for (; more && _pos < _fileNames.length; _pos++) {\n                    path = _fileNames[_pos];\n                    more = this.push(new vinyl_1.default({\n                        path,\n                        contents: (0, fs_1.readFileSync)(path),\n                        stat: (0, fs_1.statSync)(path),\n                        cwd: opts && opts.cwd,\n                        base: opts && opts.base || (0, path_1.dirname)(projectPath)\n                    }));\n                }\n                if (_pos >= _fileNames.length) {\n                    this.push(null);\n                }\n            }\n        };\n    };\n    return result;\n}\n//# sourceMappingURL=index.js.map"
  },
  {
    "path": "build/lib/tsb/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport Vinyl from 'vinyl';\nimport through from 'through';\nimport * as builder from './builder';\nimport ts from 'typescript';\nimport { Readable, Writable, Duplex } from 'stream';\nimport { dirname } from 'path';\nimport { strings } from './utils';\nimport { readFileSync, statSync } from 'fs';\nimport log from 'fancy-log';\nimport { ESBuildTranspiler, ITranspiler, TscTranspiler } from './transpiler';\nimport colors = require('ansi-colors');\n\nexport interface IncrementalCompiler {\n\t(token?: any): Readable & Writable;\n\tsrc(opts?: { cwd?: string; base?: string }): Readable;\n}\n\nclass EmptyDuplex extends Duplex {\n\t_write(_chunk: any, _encoding: string, callback: (err?: Error) => void): void { callback(); }\n\t_read() { this.push(null); }\n}\n\nfunction createNullCompiler(): IncrementalCompiler {\n\tconst result: IncrementalCompiler = function () { return new EmptyDuplex(); };\n\tresult.src = () => new EmptyDuplex();\n\treturn result;\n}\n\nconst _defaultOnError = (err: string) => console.log(JSON.stringify(err, null, 4));\n\nexport function create(\n\tprojectPath: string,\n\texistingOptions: Partial<ts.CompilerOptions>,\n\tconfig: { verbose?: boolean; transpileOnly?: boolean; transpileOnlyIncludesDts?: boolean; transpileWithSwc?: boolean },\n\tonError: (message: string) => void = _defaultOnError\n): IncrementalCompiler {\n\n\tfunction printDiagnostic(diag: ts.Diagnostic | Error): void {\n\n\t\tif (diag instanceof Error) {\n\t\t\tonError(diag.message);\n\t\t} else if (!diag.file || !diag.start) {\n\t\t\tonError(ts.flattenDiagnosticMessageText(diag.messageText, '\\n'));\n\t\t} else {\n\t\t\tconst lineAndCh = diag.file.getLineAndCharacterOfPosition(diag.start);\n\t\t\tonError(strings.format('{0}({1},{2}): {3}',\n\t\t\t\tdiag.file.fileName,\n\t\t\t\tlineAndCh.line + 1,\n\t\t\t\tlineAndCh.character + 1,\n\t\t\t\tts.flattenDiagnosticMessageText(diag.messageText, '\\n'))\n\t\t\t);\n\t\t}\n\t}\n\n\tconst parsed = ts.readConfigFile(projectPath, ts.sys.readFile);\n\tif (parsed.error) {\n\t\tprintDiagnostic(parsed.error);\n\t\treturn createNullCompiler();\n\t}\n\n\tconst cmdLine = ts.parseJsonConfigFileContent(parsed.config, ts.sys, dirname(projectPath), existingOptions);\n\tif (cmdLine.errors.length > 0) {\n\t\tcmdLine.errors.forEach(printDiagnostic);\n\t\treturn createNullCompiler();\n\t}\n\n\tfunction logFn(topic: string, message: string): void {\n\t\tif (config.verbose) {\n\t\t\tlog(colors.cyan(topic), message);\n\t\t}\n\t}\n\n\t// FULL COMPILE stream doing transpile, syntax and semantic diagnostics\n\tfunction createCompileStream(builder: builder.ITypeScriptBuilder, token?: builder.CancellationToken): Readable & Writable {\n\n\t\treturn through(function (this: through.ThroughStream, file: Vinyl) {\n\t\t\t// give the file to the compiler\n\t\t\tif (file.isStream()) {\n\t\t\t\tthis.emit('error', 'no support for streams');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbuilder.file(file);\n\n\t\t}, function (this: { queue(a: any): void }) {\n\t\t\t// start the compilation process\n\t\t\tbuilder.build(\n\t\t\t\tfile => this.queue(file),\n\t\t\t\tprintDiagnostic,\n\t\t\t\ttoken\n\t\t\t).catch(e => console.error(e)).then(() => this.queue(null));\n\t\t});\n\t}\n\n\t// TRANSPILE ONLY stream doing just TS to JS conversion\n\tfunction createTranspileStream(transpiler: ITranspiler): Readable & Writable {\n\t\treturn through(function (this: through.ThroughStream & { queue(a: any): void }, file: Vinyl) {\n\t\t\t// give the file to the compiler\n\t\t\tif (file.isStream()) {\n\t\t\t\tthis.emit('error', 'no support for streams');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!file.contents) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!config.transpileOnlyIncludesDts && file.path.endsWith('.d.ts')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!transpiler.onOutfile) {\n\t\t\t\ttranspiler.onOutfile = file => this.queue(file);\n\t\t\t}\n\n\t\t\ttranspiler.transpile(file);\n\n\t\t}, function (this: { queue(a: any): void }) {\n\t\t\ttranspiler.join().then(() => {\n\t\t\t\tthis.queue(null);\n\t\t\t\ttranspiler.onOutfile = undefined;\n\t\t\t});\n\t\t});\n\t}\n\n\n\tlet result: IncrementalCompiler;\n\tif (config.transpileOnly) {\n\t\tconst transpiler = !config.transpileWithSwc\n\t\t\t? new TscTranspiler(logFn, printDiagnostic, projectPath, cmdLine)\n\t\t\t: new ESBuildTranspiler(logFn, printDiagnostic, projectPath, cmdLine);\n\t\tresult = <any>(() => createTranspileStream(transpiler));\n\t} else {\n\t\tconst _builder = builder.createTypeScriptBuilder({ logFn }, projectPath, cmdLine);\n\t\tresult = <any>((token: builder.CancellationToken) => createCompileStream(_builder, token));\n\t}\n\n\tresult.src = (opts?: { cwd?: string; base?: string }) => {\n\t\tlet _pos = 0;\n\t\tconst _fileNames = cmdLine.fileNames.slice(0);\n\t\treturn new class extends Readable {\n\t\t\tconstructor() {\n\t\t\t\tsuper({ objectMode: true });\n\t\t\t}\n\t\t\t_read() {\n\t\t\t\tlet more: boolean = true;\n\t\t\t\tlet path: string;\n\t\t\t\tfor (; more && _pos < _fileNames.length; _pos++) {\n\t\t\t\t\tpath = _fileNames[_pos];\n\t\t\t\t\tmore = this.push(new Vinyl({\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tcontents: readFileSync(path),\n\t\t\t\t\t\tstat: statSync(path),\n\t\t\t\t\t\tcwd: opts && opts.cwd,\n\t\t\t\t\t\tbase: opts && opts.base || dirname(projectPath)\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\tif (_pos >= _fileNames.length) {\n\t\t\t\t\tthis.push(null);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t};\n\n\treturn <IncrementalCompiler>result;\n}\n"
  },
  {
    "path": "build/lib/tsb/transpiler.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ESBuildTranspiler = exports.TscTranspiler = void 0;\nconst esbuild_1 = __importDefault(require(\"esbuild\"));\nconst typescript_1 = __importDefault(require(\"typescript\"));\nconst node_worker_threads_1 = __importDefault(require(\"node:worker_threads\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst node_os_1 = require(\"node:os\");\nfunction transpile(tsSrc, options) {\n    const isAmd = /\\n(import|export)/m.test(tsSrc);\n    if (!isAmd && options.compilerOptions?.module === typescript_1.default.ModuleKind.AMD) {\n        // enforce NONE module-system for not-amd cases\n        options = { ...options, ...{ compilerOptions: { ...options.compilerOptions, module: typescript_1.default.ModuleKind.None } } };\n    }\n    const out = typescript_1.default.transpileModule(tsSrc, options);\n    return {\n        jsSrc: out.outputText,\n        diag: out.diagnostics ?? []\n    };\n}\nif (!node_worker_threads_1.default.isMainThread) {\n    // WORKER\n    node_worker_threads_1.default.parentPort?.addListener('message', (req) => {\n        const res = {\n            jsSrcs: [],\n            diagnostics: []\n        };\n        for (const tsSrc of req.tsSrcs) {\n            const out = transpile(tsSrc, req.options);\n            res.jsSrcs.push(out.jsSrc);\n            res.diagnostics.push(out.diag);\n        }\n        node_worker_threads_1.default.parentPort.postMessage(res);\n    });\n}\nclass OutputFileNameOracle {\n    getOutputFileName;\n    constructor(cmdLine, configFilePath) {\n        this.getOutputFileName = (file) => {\n            try {\n                // windows: path-sep normalizing\n                file = typescript_1.default.normalizePath(file);\n                if (!cmdLine.options.configFilePath) {\n                    // this is needed for the INTERNAL getOutputFileNames-call below...\n                    cmdLine.options.configFilePath = configFilePath;\n                }\n                const isDts = file.endsWith('.d.ts');\n                if (isDts) {\n                    file = file.slice(0, -5) + '.ts';\n                    cmdLine.fileNames.push(file);\n                }\n                const outfile = typescript_1.default.getOutputFileNames(cmdLine, file, true)[0];\n                if (isDts) {\n                    cmdLine.fileNames.pop();\n                }\n                return outfile;\n            }\n            catch (err) {\n                console.error(file, cmdLine.fileNames);\n                console.error(err);\n                throw err;\n            }\n        };\n    }\n}\nclass TranspileWorker {\n    static pool = 1;\n    id = TranspileWorker.pool++;\n    _worker = new node_worker_threads_1.default.Worker(__filename);\n    _pending;\n    _durations = [];\n    constructor(outFileFn) {\n        this._worker.addListener('message', (res) => {\n            if (!this._pending) {\n                console.error('RECEIVING data WITHOUT request');\n                return;\n            }\n            const [resolve, reject, files, options, t1] = this._pending;\n            const outFiles = [];\n            const diag = [];\n            for (let i = 0; i < res.jsSrcs.length; i++) {\n                // inputs and outputs are aligned across the arrays\n                const file = files[i];\n                const jsSrc = res.jsSrcs[i];\n                const diag = res.diagnostics[i];\n                if (diag.length > 0) {\n                    diag.push(...diag);\n                    continue;\n                }\n                let SuffixTypes;\n                (function (SuffixTypes) {\n                    SuffixTypes[SuffixTypes[\"Dts\"] = 5] = \"Dts\";\n                    SuffixTypes[SuffixTypes[\"Ts\"] = 3] = \"Ts\";\n                    SuffixTypes[SuffixTypes[\"Unknown\"] = 0] = \"Unknown\";\n                })(SuffixTypes || (SuffixTypes = {}));\n                const suffixLen = file.path.endsWith('.d.ts') ? 5 /* SuffixTypes.Dts */\n                    : file.path.endsWith('.ts') ? 3 /* SuffixTypes.Ts */\n                        : 0 /* SuffixTypes.Unknown */;\n                // check if output of a DTS-files isn't just \"empty\" and iff so\n                // skip this file\n                if (suffixLen === 5 /* SuffixTypes.Dts */ && _isDefaultEmpty(jsSrc)) {\n                    continue;\n                }\n                const outBase = options.compilerOptions?.outDir ?? file.base;\n                const outPath = outFileFn(file.path);\n                outFiles.push(new vinyl_1.default({\n                    path: outPath,\n                    base: outBase,\n                    contents: Buffer.from(jsSrc),\n                }));\n            }\n            this._pending = undefined;\n            this._durations.push(Date.now() - t1);\n            if (diag.length > 0) {\n                reject(diag);\n            }\n            else {\n                resolve(outFiles);\n            }\n        });\n    }\n    terminate() {\n        // console.log(`Worker#${this.id} ENDS after ${this._durations.length} jobs (total: ${this._durations.reduce((p, c) => p + c, 0)}, avg: ${this._durations.reduce((p, c) => p + c, 0) / this._durations.length})`);\n        this._worker.terminate();\n    }\n    get isBusy() {\n        return this._pending !== undefined;\n    }\n    next(files, options) {\n        if (this._pending !== undefined) {\n            throw new Error('BUSY');\n        }\n        return new Promise((resolve, reject) => {\n            this._pending = [resolve, reject, files, options, Date.now()];\n            const req = {\n                options,\n                tsSrcs: files.map(file => String(file.contents))\n            };\n            this._worker.postMessage(req);\n        });\n    }\n}\nclass TscTranspiler {\n    _onError;\n    _cmdLine;\n    static P = Math.floor((0, node_os_1.cpus)().length * .5);\n    _outputFileNames;\n    onOutfile;\n    _workerPool = [];\n    _queue = [];\n    _allJobs = [];\n    constructor(logFn, _onError, configFilePath, _cmdLine) {\n        this._onError = _onError;\n        this._cmdLine = _cmdLine;\n        logFn('Transpile', `will use ${TscTranspiler.P} transpile worker`);\n        this._outputFileNames = new OutputFileNameOracle(_cmdLine, configFilePath);\n    }\n    async join() {\n        // wait for all penindg jobs\n        this._consumeQueue();\n        await Promise.allSettled(this._allJobs);\n        this._allJobs.length = 0;\n        // terminate all worker\n        this._workerPool.forEach(w => w.terminate());\n        this._workerPool.length = 0;\n    }\n    transpile(file) {\n        if (this._cmdLine.options.noEmit) {\n            // not doing ANYTHING here\n            return;\n        }\n        const newLen = this._queue.push(file);\n        if (newLen > TscTranspiler.P ** 2) {\n            this._consumeQueue();\n        }\n    }\n    _consumeQueue() {\n        if (this._queue.length === 0) {\n            // no work...\n            return;\n        }\n        // kinda LAZYily create workers\n        if (this._workerPool.length === 0) {\n            for (let i = 0; i < TscTranspiler.P; i++) {\n                this._workerPool.push(new TranspileWorker(file => this._outputFileNames.getOutputFileName(file)));\n            }\n        }\n        const freeWorker = this._workerPool.filter(w => !w.isBusy);\n        if (freeWorker.length === 0) {\n            // OK, they will pick up work themselves\n            return;\n        }\n        for (const worker of freeWorker) {\n            if (this._queue.length === 0) {\n                break;\n            }\n            const job = new Promise(resolve => {\n                const consume = () => {\n                    const files = this._queue.splice(0, TscTranspiler.P);\n                    if (files.length === 0) {\n                        // DONE\n                        resolve(undefined);\n                        return;\n                    }\n                    // work on the NEXT file\n                    // const [inFile, outFn] = req;\n                    worker.next(files, { compilerOptions: this._cmdLine.options }).then(outFiles => {\n                        if (this.onOutfile) {\n                            outFiles.map(this.onOutfile, this);\n                        }\n                        consume();\n                    }).catch(err => {\n                        this._onError(err);\n                    });\n                };\n                consume();\n            });\n            this._allJobs.push(job);\n        }\n    }\n}\nexports.TscTranspiler = TscTranspiler;\nclass ESBuildTranspiler {\n    _logFn;\n    _onError;\n    _cmdLine;\n    _outputFileNames;\n    _jobs = [];\n    onOutfile;\n    _transformOpts;\n    constructor(_logFn, _onError, configFilePath, _cmdLine) {\n        this._logFn = _logFn;\n        this._onError = _onError;\n        this._cmdLine = _cmdLine;\n        _logFn('Transpile', `will use ESBuild to transpile source files`);\n        this._outputFileNames = new OutputFileNameOracle(_cmdLine, configFilePath);\n        const isExtension = configFilePath.includes('extensions');\n        this._transformOpts = {\n            target: ['es2022'],\n            format: isExtension ? 'cjs' : 'esm',\n            platform: isExtension ? 'node' : undefined,\n            loader: 'ts',\n            sourcemap: 'inline',\n            tsconfigRaw: JSON.stringify({\n                compilerOptions: {\n                    ...this._cmdLine.options,\n                    ...{\n                        module: isExtension ? typescript_1.default.ModuleKind.CommonJS : undefined\n                    }\n                }\n            }),\n            supported: {\n                'class-static-blocks': false, // SEE https://github.com/evanw/esbuild/issues/3823,\n                'dynamic-import': !isExtension, // see https://github.com/evanw/esbuild/issues/1281\n                'class-field': !isExtension\n            }\n        };\n    }\n    async join() {\n        const jobs = this._jobs.slice();\n        this._jobs.length = 0;\n        await Promise.allSettled(jobs);\n    }\n    transpile(file) {\n        if (!(file.contents instanceof Buffer)) {\n            throw Error('file.contents must be a Buffer');\n        }\n        const t1 = Date.now();\n        this._jobs.push(esbuild_1.default.transform(file.contents, {\n            ...this._transformOpts,\n            sourcefile: file.path,\n        }).then(result => {\n            // check if output of a DTS-files isn't just \"empty\" and iff so\n            // skip this file\n            if (file.path.endsWith('.d.ts') && _isDefaultEmpty(result.code)) {\n                return;\n            }\n            const outBase = this._cmdLine.options.outDir ?? file.base;\n            const outPath = this._outputFileNames.getOutputFileName(file.path);\n            this.onOutfile(new vinyl_1.default({\n                path: outPath,\n                base: outBase,\n                contents: Buffer.from(result.code),\n            }));\n            this._logFn('Transpile', `esbuild took ${Date.now() - t1}ms for ${file.path}`);\n        }).catch(err => {\n            this._onError(err);\n        }));\n    }\n}\nexports.ESBuildTranspiler = ESBuildTranspiler;\nfunction _isDefaultEmpty(src) {\n    return src\n        .replace('\"use strict\";', '')\n        .replace(/\\/\\/# sourceMappingURL.*^/, '')\n        .replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, '$1')\n        .trim().length === 0;\n}\n//# sourceMappingURL=transpiler.js.map"
  },
  {
    "path": "build/lib/tsb/transpiler.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport esbuild from 'esbuild';\nimport ts from 'typescript';\nimport threads from 'node:worker_threads';\nimport Vinyl from 'vinyl';\nimport { cpus } from 'node:os';\n\ninterface TranspileReq {\n\treadonly tsSrcs: string[];\n\treadonly options: ts.TranspileOptions;\n}\n\ninterface TranspileRes {\n\treadonly jsSrcs: string[];\n\treadonly diagnostics: ts.Diagnostic[][];\n}\n\nfunction transpile(tsSrc: string, options: ts.TranspileOptions): { jsSrc: string; diag: ts.Diagnostic[] } {\n\n\tconst isAmd = /\\n(import|export)/m.test(tsSrc);\n\tif (!isAmd && options.compilerOptions?.module === ts.ModuleKind.AMD) {\n\t\t// enforce NONE module-system for not-amd cases\n\t\toptions = { ...options, ...{ compilerOptions: { ...options.compilerOptions, module: ts.ModuleKind.None } } };\n\t}\n\tconst out = ts.transpileModule(tsSrc, options);\n\treturn {\n\t\tjsSrc: out.outputText,\n\t\tdiag: out.diagnostics ?? []\n\t};\n}\n\nif (!threads.isMainThread) {\n\t// WORKER\n\tthreads.parentPort?.addListener('message', (req: TranspileReq) => {\n\t\tconst res: TranspileRes = {\n\t\t\tjsSrcs: [],\n\t\t\tdiagnostics: []\n\t\t};\n\t\tfor (const tsSrc of req.tsSrcs) {\n\t\t\tconst out = transpile(tsSrc, req.options);\n\t\t\tres.jsSrcs.push(out.jsSrc);\n\t\t\tres.diagnostics.push(out.diag);\n\t\t}\n\t\tthreads.parentPort!.postMessage(res);\n\t});\n}\n\nclass OutputFileNameOracle {\n\n\treadonly getOutputFileName: (name: string) => string;\n\n\tconstructor(cmdLine: ts.ParsedCommandLine, configFilePath: string) {\n\t\t// very complicated logic to re-use TS internal functions to know the output path\n\t\t// given a TS input path and its config\n\t\ttype InternalTsApi = typeof ts & {\n\t\t\tnormalizePath(path: string): string;\n\t\t\tgetOutputFileNames(commandLine: ts.ParsedCommandLine, inputFileName: string, ignoreCase: boolean): readonly string[];\n\t\t};\n\t\tthis.getOutputFileName = (file) => {\n\t\t\ttry {\n\n\t\t\t\t// windows: path-sep normalizing\n\t\t\t\tfile = (<InternalTsApi>ts).normalizePath(file);\n\n\t\t\t\tif (!cmdLine.options.configFilePath) {\n\t\t\t\t\t// this is needed for the INTERNAL getOutputFileNames-call below...\n\t\t\t\t\tcmdLine.options.configFilePath = configFilePath;\n\t\t\t\t}\n\t\t\t\tconst isDts = file.endsWith('.d.ts');\n\t\t\t\tif (isDts) {\n\t\t\t\t\tfile = file.slice(0, -5) + '.ts';\n\t\t\t\t\tcmdLine.fileNames.push(file);\n\t\t\t\t}\n\t\t\t\tconst outfile = (<InternalTsApi>ts).getOutputFileNames(cmdLine, file, true)[0];\n\t\t\t\tif (isDts) {\n\t\t\t\t\tcmdLine.fileNames.pop();\n\t\t\t\t}\n\t\t\t\treturn outfile;\n\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(file, cmdLine.fileNames);\n\t\t\t\tconsole.error(err);\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t};\n\t}\n}\n\nclass TranspileWorker {\n\n\tprivate static pool = 1;\n\n\treadonly id = TranspileWorker.pool++;\n\n\tprivate _worker = new threads.Worker(__filename);\n\tprivate _pending?: [resolve: Function, reject: Function, file: Vinyl[], options: ts.TranspileOptions, t1: number];\n\tprivate _durations: number[] = [];\n\n\tconstructor(outFileFn: (fileName: string) => string) {\n\n\t\tthis._worker.addListener('message', (res: TranspileRes) => {\n\t\t\tif (!this._pending) {\n\t\t\t\tconsole.error('RECEIVING data WITHOUT request');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [resolve, reject, files, options, t1] = this._pending;\n\n\t\t\tconst outFiles: Vinyl[] = [];\n\t\t\tconst diag: ts.Diagnostic[] = [];\n\n\t\t\tfor (let i = 0; i < res.jsSrcs.length; i++) {\n\t\t\t\t// inputs and outputs are aligned across the arrays\n\t\t\t\tconst file = files[i];\n\t\t\t\tconst jsSrc = res.jsSrcs[i];\n\t\t\t\tconst diag = res.diagnostics[i];\n\n\t\t\t\tif (diag.length > 0) {\n\t\t\t\t\tdiag.push(...diag);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst enum SuffixTypes {\n\t\t\t\t\tDts = 5,\n\t\t\t\t\tTs = 3,\n\t\t\t\t\tUnknown = 0\n\t\t\t\t}\n\t\t\t\tconst suffixLen = file.path.endsWith('.d.ts') ? SuffixTypes.Dts\n\t\t\t\t\t: file.path.endsWith('.ts') ? SuffixTypes.Ts\n\t\t\t\t\t\t: SuffixTypes.Unknown;\n\n\t\t\t\t// check if output of a DTS-files isn't just \"empty\" and iff so\n\t\t\t\t// skip this file\n\t\t\t\tif (suffixLen === SuffixTypes.Dts && _isDefaultEmpty(jsSrc)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst outBase = options.compilerOptions?.outDir ?? file.base;\n\t\t\t\tconst outPath = outFileFn(file.path);\n\n\t\t\t\toutFiles.push(new Vinyl({\n\t\t\t\t\tpath: outPath,\n\t\t\t\t\tbase: outBase,\n\t\t\t\t\tcontents: Buffer.from(jsSrc),\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tthis._pending = undefined;\n\t\t\tthis._durations.push(Date.now() - t1);\n\n\t\t\tif (diag.length > 0) {\n\t\t\t\treject(diag);\n\t\t\t} else {\n\t\t\t\tresolve(outFiles);\n\t\t\t}\n\t\t});\n\t}\n\n\tterminate() {\n\t\t// console.log(`Worker#${this.id} ENDS after ${this._durations.length} jobs (total: ${this._durations.reduce((p, c) => p + c, 0)}, avg: ${this._durations.reduce((p, c) => p + c, 0) / this._durations.length})`);\n\t\tthis._worker.terminate();\n\t}\n\n\tget isBusy() {\n\t\treturn this._pending !== undefined;\n\t}\n\n\tnext(files: Vinyl[], options: ts.TranspileOptions) {\n\t\tif (this._pending !== undefined) {\n\t\t\tthrow new Error('BUSY');\n\t\t}\n\t\treturn new Promise<Vinyl[]>((resolve, reject) => {\n\t\t\tthis._pending = [resolve, reject, files, options, Date.now()];\n\t\t\tconst req: TranspileReq = {\n\t\t\t\toptions,\n\t\t\t\ttsSrcs: files.map(file => String(file.contents))\n\t\t\t};\n\t\t\tthis._worker.postMessage(req);\n\t\t});\n\t}\n}\n\nexport interface ITranspiler {\n\tonOutfile?: (file: Vinyl) => void;\n\tjoin(): Promise<void>;\n\ttranspile(file: Vinyl): void;\n}\n\nexport class TscTranspiler implements ITranspiler {\n\n\tstatic P = Math.floor(cpus().length * .5);\n\n\tprivate readonly _outputFileNames: OutputFileNameOracle;\n\n\n\tpublic onOutfile?: (file: Vinyl) => void;\n\n\tprivate _workerPool: TranspileWorker[] = [];\n\tprivate _queue: Vinyl[] = [];\n\tprivate _allJobs: Promise<any>[] = [];\n\n\tconstructor(\n\t\tlogFn: (topic: string, message: string) => void,\n\t\tprivate readonly _onError: (err: any) => void,\n\t\tconfigFilePath: string,\n\t\tprivate readonly _cmdLine: ts.ParsedCommandLine\n\t) {\n\t\tlogFn('Transpile', `will use ${TscTranspiler.P} transpile worker`);\n\t\tthis._outputFileNames = new OutputFileNameOracle(_cmdLine, configFilePath);\n\t}\n\n\tasync join() {\n\t\t// wait for all penindg jobs\n\t\tthis._consumeQueue();\n\t\tawait Promise.allSettled(this._allJobs);\n\t\tthis._allJobs.length = 0;\n\n\t\t// terminate all worker\n\t\tthis._workerPool.forEach(w => w.terminate());\n\t\tthis._workerPool.length = 0;\n\t}\n\n\n\ttranspile(file: Vinyl) {\n\n\t\tif (this._cmdLine.options.noEmit) {\n\t\t\t// not doing ANYTHING here\n\t\t\treturn;\n\t\t}\n\n\t\tconst newLen = this._queue.push(file);\n\t\tif (newLen > TscTranspiler.P ** 2) {\n\t\t\tthis._consumeQueue();\n\t\t}\n\t}\n\n\tprivate _consumeQueue(): void {\n\n\t\tif (this._queue.length === 0) {\n\t\t\t// no work...\n\t\t\treturn;\n\t\t}\n\n\t\t// kinda LAZYily create workers\n\t\tif (this._workerPool.length === 0) {\n\t\t\tfor (let i = 0; i < TscTranspiler.P; i++) {\n\t\t\t\tthis._workerPool.push(new TranspileWorker(file => this._outputFileNames.getOutputFileName(file)));\n\t\t\t}\n\t\t}\n\n\t\tconst freeWorker = this._workerPool.filter(w => !w.isBusy);\n\t\tif (freeWorker.length === 0) {\n\t\t\t// OK, they will pick up work themselves\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const worker of freeWorker) {\n\t\t\tif (this._queue.length === 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst job = new Promise(resolve => {\n\n\t\t\t\tconst consume = () => {\n\t\t\t\t\tconst files = this._queue.splice(0, TscTranspiler.P);\n\t\t\t\t\tif (files.length === 0) {\n\t\t\t\t\t\t// DONE\n\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// work on the NEXT file\n\t\t\t\t\t// const [inFile, outFn] = req;\n\t\t\t\t\tworker.next(files, { compilerOptions: this._cmdLine.options }).then(outFiles => {\n\t\t\t\t\t\tif (this.onOutfile) {\n\t\t\t\t\t\t\toutFiles.map(this.onOutfile, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconsume();\n\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\tthis._onError(err);\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tconsume();\n\t\t\t});\n\n\t\t\tthis._allJobs.push(job);\n\t\t}\n\t}\n}\n\nexport class ESBuildTranspiler implements ITranspiler {\n\n\tprivate readonly _outputFileNames: OutputFileNameOracle;\n\tprivate _jobs: Promise<any>[] = [];\n\n\tonOutfile?: ((file: Vinyl) => void) | undefined;\n\n\tprivate readonly _transformOpts: esbuild.TransformOptions;\n\n\tconstructor(\n\t\tprivate readonly _logFn: (topic: string, message: string) => void,\n\t\tprivate readonly _onError: (err: any) => void,\n\t\tconfigFilePath: string,\n\t\tprivate readonly _cmdLine: ts.ParsedCommandLine\n\t) {\n\t\t_logFn('Transpile', `will use ESBuild to transpile source files`);\n\t\tthis._outputFileNames = new OutputFileNameOracle(_cmdLine, configFilePath);\n\n\t\tconst isExtension = configFilePath.includes('extensions');\n\n\t\tthis._transformOpts = {\n\t\t\ttarget: ['es2022'],\n\t\t\tformat: isExtension ? 'cjs' : 'esm',\n\t\t\tplatform: isExtension ? 'node' : undefined,\n\t\t\tloader: 'ts',\n\t\t\tsourcemap: 'inline',\n\t\t\ttsconfigRaw: JSON.stringify({\n\t\t\t\tcompilerOptions: {\n\t\t\t\t\t...this._cmdLine.options,\n\t\t\t\t\t...{\n\t\t\t\t\t\tmodule: isExtension ? ts.ModuleKind.CommonJS : undefined\n\t\t\t\t\t} satisfies ts.CompilerOptions\n\t\t\t\t}\n\t\t\t}),\n\t\t\tsupported: {\n\t\t\t\t'class-static-blocks': false, // SEE https://github.com/evanw/esbuild/issues/3823,\n\t\t\t\t'dynamic-import': !isExtension, // see https://github.com/evanw/esbuild/issues/1281\n\t\t\t\t'class-field': !isExtension\n\t\t\t}\n\t\t};\n\t}\n\n\tasync join(): Promise<void> {\n\t\tconst jobs = this._jobs.slice();\n\t\tthis._jobs.length = 0;\n\t\tawait Promise.allSettled(jobs);\n\t}\n\n\ttranspile(file: Vinyl): void {\n\t\tif (!(file.contents instanceof Buffer)) {\n\t\t\tthrow Error('file.contents must be a Buffer');\n\t\t}\n\t\tconst t1 = Date.now();\n\t\tthis._jobs.push(esbuild.transform(file.contents, {\n\t\t\t...this._transformOpts,\n\t\t\tsourcefile: file.path,\n\t\t}).then(result => {\n\n\t\t\t// check if output of a DTS-files isn't just \"empty\" and iff so\n\t\t\t// skip this file\n\t\t\tif (file.path.endsWith('.d.ts') && _isDefaultEmpty(result.code)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst outBase = this._cmdLine.options.outDir ?? file.base;\n\t\t\tconst outPath = this._outputFileNames.getOutputFileName(file.path);\n\n\t\t\tthis.onOutfile!(new Vinyl({\n\t\t\t\tpath: outPath,\n\t\t\t\tbase: outBase,\n\t\t\t\tcontents: Buffer.from(result.code),\n\t\t\t}));\n\n\t\t\tthis._logFn('Transpile', `esbuild took ${Date.now() - t1}ms for ${file.path}`);\n\n\t\t}).catch(err => {\n\t\t\tthis._onError(err);\n\t\t}));\n\t}\n}\n\nfunction _isDefaultEmpty(src: string): boolean {\n\treturn src\n\t\t.replace('\"use strict\";', '')\n\t\t.replace(/\\/\\/# sourceMappingURL.*^/, '')\n\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, '$1')\n\t\t.trim().length === 0;\n}\n"
  },
  {
    "path": "build/lib/tsb/utils.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.graph = exports.strings = void 0;\nvar strings;\n(function (strings) {\n    function format(value, ...rest) {\n        return value.replace(/({\\d+})/g, function (match) {\n            const index = Number(match.substring(1, match.length - 1));\n            return String(rest[index]) || match;\n        });\n    }\n    strings.format = format;\n})(strings || (exports.strings = strings = {}));\nvar graph;\n(function (graph) {\n    class Node {\n        data;\n        incoming = new Map();\n        outgoing = new Map();\n        constructor(data) {\n            this.data = data;\n        }\n    }\n    graph.Node = Node;\n    class Graph {\n        _nodes = new Map();\n        inertEdge(from, to) {\n            const fromNode = this.lookupOrInsertNode(from);\n            const toNode = this.lookupOrInsertNode(to);\n            fromNode.outgoing.set(toNode.data, toNode);\n            toNode.incoming.set(fromNode.data, fromNode);\n        }\n        resetNode(data) {\n            const node = this._nodes.get(data);\n            if (!node) {\n                return;\n            }\n            for (const outDep of node.outgoing.values()) {\n                outDep.incoming.delete(node.data);\n            }\n            node.outgoing.clear();\n        }\n        lookupOrInsertNode(data) {\n            let node = this._nodes.get(data);\n            if (!node) {\n                node = new Node(data);\n                this._nodes.set(data, node);\n            }\n            return node;\n        }\n        lookup(data) {\n            return this._nodes.get(data) ?? null;\n        }\n        findCycle() {\n            let result;\n            let foundStartNodes = false;\n            const checked = new Set();\n            for (const [_start, value] of this._nodes) {\n                if (Object.values(value.incoming).length > 0) {\n                    continue;\n                }\n                foundStartNodes = true;\n                const dfs = (node, visited) => {\n                    if (checked.has(node)) {\n                        return;\n                    }\n                    if (visited.has(node)) {\n                        result = [...visited, node].map(n => n.data);\n                        const idx = result.indexOf(node.data);\n                        result = result.slice(idx);\n                        return;\n                    }\n                    visited.add(node);\n                    for (const child of Object.values(node.outgoing)) {\n                        dfs(child, visited);\n                        if (result) {\n                            break;\n                        }\n                    }\n                    visited.delete(node);\n                    checked.add(node);\n                };\n                dfs(value, new Set());\n                if (result) {\n                    break;\n                }\n            }\n            if (!foundStartNodes) {\n                // everything is a cycle\n                return Array.from(this._nodes.keys());\n            }\n            return result;\n        }\n    }\n    graph.Graph = Graph;\n})(graph || (exports.graph = graph = {}));\n//# sourceMappingURL=utils.js.map"
  },
  {
    "path": "build/lib/tsb/utils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport namespace strings {\n\n    export function format(value: string, ...rest: any[]): string {\n        return value.replace(/({\\d+})/g, function (match) {\n            const index = Number(match.substring(1, match.length - 1));\n            return String(rest[index]) || match;\n        });\n    }\n}\n\nexport namespace graph {\n\n    export class Node<T> {\n\n        readonly incoming = new Map<T, Node<T>>();\n        readonly outgoing = new Map<T, Node<T>>();\n\n        constructor(readonly data: T) {\n\n        }\n    }\n\n    export class Graph<T> {\n\n        private _nodes = new Map<T, Node<T>>();\n\n        inertEdge(from: T, to: T): void {\n            const fromNode = this.lookupOrInsertNode(from);\n            const toNode = this.lookupOrInsertNode(to);\n\n            fromNode.outgoing.set(toNode.data, toNode);\n            toNode.incoming.set(fromNode.data, fromNode);\n        }\n\n        resetNode(data: T): void {\n            const node = this._nodes.get(data);\n            if (!node) {\n                return;\n            }\n            for (const outDep of node.outgoing.values()) {\n                outDep.incoming.delete(node.data);\n            }\n            node.outgoing.clear();\n        }\n\n        lookupOrInsertNode(data: T): Node<T> {\n            let node = this._nodes.get(data);\n\n            if (!node) {\n                node = new Node(data);\n                this._nodes.set(data, node);\n            }\n\n            return node;\n        }\n\n        lookup(data: T): Node<T> | null {\n            return this._nodes.get(data) ?? null;\n        }\n\n        findCycle(): T[] | undefined {\n\n            let result: T[] | undefined;\n            let foundStartNodes = false;\n            const checked = new Set<Node<T>>();\n\n            for (const [_start, value] of this._nodes) {\n\n                if (Object.values(value.incoming).length > 0) {\n                    continue;\n                }\n\n                foundStartNodes = true;\n\n                const dfs = (node: Node<T>, visited: Set<Node<T>>) => {\n\n                    if (checked.has(node)) {\n                        return;\n                    }\n\n                    if (visited.has(node)) {\n                        result = [...visited, node].map(n => n.data);\n                        const idx = result.indexOf(node.data);\n                        result = result.slice(idx);\n                        return;\n                    }\n                    visited.add(node);\n                    for (const child of Object.values(node.outgoing)) {\n                        dfs(child, visited);\n                        if (result) {\n                            break;\n                        }\n                    }\n                    visited.delete(node);\n                    checked.add(node);\n                };\n                dfs(value, new Set());\n                if (result) {\n                    break;\n                }\n            }\n\n            if (!foundStartNodes) {\n                // everything is a cycle\n                return Array.from(this._nodes.keys());\n            }\n\n            return result;\n        }\n    }\n\n}\n"
  },
  {
    "path": "build/lib/typings/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"definitelytyped\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/DefinitelyTyped/DefinitelyTyped\",\n\t\t\t\t\t\"commitHash\": \"69e3ac6bec3008271f76bbfa7cf69aa9198c4ff0\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "build/lib/typings/event-stream.d.ts",
    "content": "declare module \"event-stream\" {\n\timport { Stream } from 'stream';\n\timport { ThroughStream as _ThroughStream } from 'through';\n\timport File from 'vinyl';\n\n\texport interface ThroughStream extends _ThroughStream {\n\t\tqueue(data: File | null): any;\n\t\tpush(data: File | null): any;\n\t\tpaused: boolean;\n\t}\n\n\tfunction merge(streams: Stream[]): ThroughStream;\n\tfunction merge(...streams: Stream[]): ThroughStream;\n\tfunction concat(...stream: Stream[]): ThroughStream;\n\tfunction duplex(istream: Stream, ostream: Stream): ThroughStream;\n\n\tfunction through(write?: (this: ThroughStream, data: any) => void, end?: (this: ThroughStream) => void,\n\t\topts?: { autoDestroy: boolean; }): ThroughStream;\n\n\tfunction readArray<T>(array: T[]): ThroughStream;\n\tfunction writeArray<T>(cb: (err: Error, array: T[]) => void): ThroughStream;\n\n\tfunction mapSync<I, O>(cb: (data: I) => O): ThroughStream;\n\tfunction map<I, O>(cb: (data: I, cb: (err?: Error, data?: O) => void) => O): ThroughStream;\n\n\tfunction readable(asyncFunction: (this: ThroughStream, ...args: any[]) => any): any;\n}"
  },
  {
    "path": "build/lib/typings/github-releases.d.ts",
    "content": "declare module 'github-releases' {\n\n}"
  },
  {
    "path": "build/lib/typings/gulp-bom.d.ts",
    "content": "\ndeclare module \"gulp-bom\" {\n\tfunction f(): NodeJS.ReadWriteStream;\n\n\t/**\n\t * This is required as per:\n\t * https://github.com/microsoft/TypeScript/issues/5073\n\t */\n\tnamespace f {}\n\n\texport = f;\n}\n"
  },
  {
    "path": "build/lib/typings/gulp-buffer.d.ts",
    "content": "\ndeclare module \"gulp-buffer\" {\n\tfunction f(): NodeJS.ReadWriteStream;\n\n\t/**\n\t * This is required as per:\n\t * https://github.com/microsoft/TypeScript/issues/5073\n\t */\n\tnamespace f {}\n\n\texport = f;\n}\n"
  },
  {
    "path": "build/lib/typings/gulp-flatmap.d.ts",
    "content": "declare module 'gulp-flatmap' {\n\timport File = require('vinyl');\n\tfunction f(fn:(stream:NodeJS.ReadWriteStream, file:File)=>NodeJS.ReadWriteStream): NodeJS.ReadWriteStream;\n\n\t/**\n\t * This is required as per:\n\t * https://github.com/microsoft/TypeScript/issues/5073\n\t */\n\tnamespace f {}\n\n\texport = f;\n}\n"
  },
  {
    "path": "build/lib/typings/lazy.js.d.ts",
    "content": "// Type definitions for Lazy.js 0.3.2\n// Project: https://github.com/dtao/lazy.js/\n// Definitions by: Bart van der Schoor <https://github.com/Bartvds>\n// Definitions: https://github.com/borisyankov/DefinitelyTyped\n\ndeclare function Lazy(value: string): Lazy.StringLikeSequence;\ndeclare function Lazy<T>(value: T[]): Lazy.ArrayLikeSequence<T>;\ndeclare function Lazy(value: any[]): Lazy.ArrayLikeSequence<any>;\ndeclare function Lazy<T>(value: Object): Lazy.ObjectLikeSequence<T>;\ndeclare function Lazy(value: Object): Lazy.ObjectLikeSequence<any>;\n\ndeclare module Lazy {\n\tfunction strict(): StrictLazy;\n\tfunction generate<T>(generatorFn: GeneratorCallback<T>, length?: number): GeneratedSequence<T>;\n\tfunction range(to: number): GeneratedSequence<number>;\n\tfunction range(from: number, to: number, step?: number): GeneratedSequence<number>;\n\tfunction repeat<T>(value: T, count?: number): GeneratedSequence<T>;\n\tfunction on<T>(eventType: string): Sequence<T>;\n\tfunction readFile(path: string): StringLikeSequence;\n\tfunction makeHttpRequest(path: string): StringLikeSequence;\n\n\tinterface StrictLazy {\n\t\t(value: string): StringLikeSequence;\n\t\t<T>(value: T[]): ArrayLikeSequence<T>;\n\t\t(value: any[]): ArrayLikeSequence<any>;\n\t\t<T>(value: Object): ObjectLikeSequence<T>;\n\t\t(value: Object): ObjectLikeSequence<any>;\n\t\tstrict(): StrictLazy;\n\t\tgenerate<T>(generatorFn: GeneratorCallback<T>, length?: number): GeneratedSequence<T>;\n\t\trange(to: number): GeneratedSequence<number>;\n\t\trange(from: number, to: number, step?: number): GeneratedSequence<number>;\n\t\trepeat<T>(value: T, count?: number): GeneratedSequence<T>;\n\t\ton<T>(eventType: string): Sequence<T>;\n\t\treadFile(path: string): StringLikeSequence;\n\t\tmakeHttpRequest(path: string): StringLikeSequence;\n\t}\n\n\tinterface ArrayLike<T> {\n\t\tlength: number;\n\t\t[index: number]: T;\n\t}\n\n\tinterface Callback {\n\t\t(): void;\n\t}\n\n\tinterface ErrorCallback {\n\t\t(error: any): void;\n\t}\n\n\tinterface ValueCallback<T> {\n\t\t(value: T): void;\n\t}\n\n\tinterface GetKeyCallback<T> {\n\t\t(value: T): string;\n\t}\n\n\tinterface TestCallback<T> {\n\t\t(value: T): boolean;\n\t}\n\n\tinterface MapCallback<T, U> {\n\t\t(value: T): U;\n\t}\n\n\tinterface MapStringCallback {\n\t\t(value: string): string;\n\t}\n\n\tinterface NumberCallback<T> {\n\t\t(value: T): number;\n\t}\n\n\tinterface MemoCallback<T, U> {\n\t\t(memo: U, value: T): U;\n\t}\n\n\tinterface GeneratorCallback<T> {\n\t\t(index: number): T;\n\t}\n\n\tinterface CompareCallback {\n\t\t(x: any, y: any): number;\n\t}\n\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\tinterface Iterator<T> {\n\t\tnew(sequence: Sequence<T>): Iterator<T>;\n\t\tcurrent(): T;\n\t\tmoveNext(): boolean;\n\t}\n\n\tinterface GeneratedSequence<T> extends Sequence<T> {\n\t\tnew(generatorFn: GeneratorCallback<T>, length: number): GeneratedSequence<T>;\n\t\tlength(): number;\n\t}\n\n\tinterface AsyncSequence<T> extends SequenceBase<T> {\n\t\teach(callback: ValueCallback<T>): AsyncHandle<T>;\n\t}\n\n\tinterface AsyncHandle<T> {\n\t\tcancel(): void;\n\t\tonComplete(callback: Callback): void;\n\t\tonError(callback: ErrorCallback): void;\n\t}\n\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\tmodule Sequence {\n\t\tfunction define(methodName: string[], overrides: Object): Function;\n\t}\n\n\tinterface Sequence<T> extends SequenceBase<T> {\n\t\teach(eachFn: ValueCallback<T>): Sequence<T>;\n\t}\n\n\tinterface ArraySequence<T> extends SequenceBase<T[]> {\n\t\tflatten(): Sequence<T>;\n\t}\n\n\tinterface SequenceBase<T> extends SequenceBaser<T> {\n\t\tfirst(): any;\n\t\tfirst(count: number): Sequence<T>;\n\t\tindexOf(value: any, startIndex?: number): Sequence<T>;\n\n\t\tlast(): any;\n\t\tlast(count: number): Sequence<T>;\n\t\tlastIndexOf(value: any): Sequence<T>;\n\n\t\treverse(): Sequence<T>;\n\t}\n\n\tinterface SequenceBaser<T> {\n\t\t// TODO improve define() (needs ugly overload)\n\t\tasync(interval: number): AsyncSequence<T>;\n\t\tchunk(size: number): Sequence<T>;\n\t\tcompact(): Sequence<T>;\n\t\tconcat(var_args: T[]): Sequence<T>;\n\t\tconcat(sequence: Sequence<T>): Sequence<T>;\n\t\tconsecutive(length: number): Sequence<T>;\n\t\tcontains(value: T): boolean;\n\t\tcountBy(keyFn: GetKeyCallback<T>): ObjectLikeSequence<T>;\n\t\tcountBy(propertyName: string): ObjectLikeSequence<T>;\n\t\tdropWhile(predicateFn: TestCallback<T>): Sequence<T>;\n\t\tevery(predicateFn: TestCallback<T>): boolean;\n\t\tfilter(predicateFn: TestCallback<T>): Sequence<T>;\n\t\tfind(predicateFn: TestCallback<T>): Sequence<T>;\n\t\tfindWhere(properties: Object): Sequence<T>;\n\n\t\tgroupBy(keyFn: GetKeyCallback<T>): ObjectLikeSequence<T>;\n\t\tinitial(count?: number): Sequence<T>;\n\t\tintersection(var_args: T[]): Sequence<T>;\n\t\tinvoke(methodName: string): Sequence<T>;\n\t\tisEmpty(): boolean;\n\t\tjoin(delimiter?: string): string;\n\t\tmap<U>(mapFn: MapCallback<T, U[]>): ArraySequence<U>;\n\t\tmap<U>(mapFn: MapCallback<T, U>): Sequence<U>;\n\n\t\t// TODO: vscode addition to workaround strict null errors\n\t\tflatten(): Sequence<any>;\n\n\t\tmax(valueFn?: NumberCallback<T>): T;\n\t\tmin(valueFn?: NumberCallback<T>): T;\n\t\tnone(valueFn?: TestCallback<T>): boolean;\n\t\tpluck(propertyName: string): Sequence<T>;\n\t\treduce<U>(aggregatorFn: MemoCallback<T, U>, memo?: U): U;\n\t\treduceRight<U>(aggregatorFn: MemoCallback<T, U>, memo: U): U;\n\t\treject(predicateFn: TestCallback<T>): Sequence<T>;\n\t\trest(count?: number): Sequence<T>;\n\t\tshuffle(): Sequence<T>;\n\t\tsome(predicateFn?: TestCallback<T>): boolean;\n\t\tsort(sortFn?: CompareCallback, descending?: boolean): Sequence<T>;\n\t\tsortBy(sortFn: string, descending?: boolean): Sequence<T>;\n\t\tsortBy(sortFn: NumberCallback<T>, descending?: boolean): Sequence<T>;\n\t\tsortedIndex(value: T): Sequence<T>;\n\t\tsize(): number;\n\t\tsum(valueFn?: NumberCallback<T>): Sequence<T>;\n\t\ttakeWhile(predicateFn: TestCallback<T>): Sequence<T>;\n\t\tunion(var_args: T[]): Sequence<T>;\n\t\tuniq(): Sequence<T>;\n\t\twhere(properties: Object): Sequence<T>;\n\t\twithout(...var_args: T[]): Sequence<T>;\n\t\twithout(var_args: T[]): Sequence<T>;\n\t\tzip(var_args: T[]): ArraySequence<T>;\n\n\t\ttoArray(): T[];\n\t\ttoObject(): Object;\n\t}\n\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\tmodule ArrayLikeSequence {\n\t\tfunction define(methodName: string[], overrides: Object): Function;\n\t}\n\n\tinterface ArrayLikeSequence<T> extends Sequence<T> {\n\t\t// define()X;\n\t\tconcat(var_args: T[]): ArrayLikeSequence<T>;\n\t\tconcat(sequence: Sequence<T>): Sequence<T>;\n\t\tfirst(count?: number): ArrayLikeSequence<T>;\n\t\tget(index: number): T;\n\t\tlength(): number;\n\t\tmap<U>(mapFn: MapCallback<T, U[]>): ArraySequence<U>;\n\t\tmap<U>(mapFn: MapCallback<T, U>): ArrayLikeSequence<U>;\n\t\tpop(): ArrayLikeSequence<T>;\n\t\trest(count?: number): ArrayLikeSequence<T>;\n\t\treverse(): ArrayLikeSequence<T>;\n\t\tshift(): ArrayLikeSequence<T>;\n\t\tslice(begin: number, end?: number): ArrayLikeSequence<T>;\n\t}\n\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\tmodule ObjectLikeSequence {\n\t\tfunction define(methodName: string[], overrides: Object): Function;\n\t}\n\n\tinterface ObjectLikeSequence<T> extends Sequence<T> {\n\t\tassign(other: Object): ObjectLikeSequence<T>;\n\t\t// throws error\n\t\t//async(): X;\n\t\tdefaults(defaults: Object): ObjectLikeSequence<T>;\n\t\tfunctions(): Sequence<T>;\n\t\tget(property: string): ObjectLikeSequence<T>;\n\t\tinvert(): ObjectLikeSequence<T>;\n\t\tkeys(): Sequence<string>;\n\t\tomit(properties: string[]): ObjectLikeSequence<T>;\n\t\tpairs(): Sequence<T>;\n\t\tpick(properties: string[]): ObjectLikeSequence<T>;\n\t\ttoArray(): T[];\n\t\ttoObject(): Object;\n\t\tvalues(): Sequence<T>;\n\t}\n\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\tmodule StringLikeSequence {\n\t\tfunction define(methodName: string[], overrides: Object): Function;\n\t}\n\n\tinterface StringLikeSequence extends SequenceBaser<string> {\n\t\tcharAt(index: number): string;\n\t\tcharCodeAt(index: number): number;\n\t\tcontains(value: string): boolean;\n\t\tendsWith(suffix: string): boolean;\n\n\t\tfirst(): string;\n\t\tfirst(count: number): StringLikeSequence;\n\n\t\tindexOf(substring: string, startIndex?: number): number;\n\n\t\tlast(): string;\n\t\tlast(count: number): StringLikeSequence;\n\n\t\tlastIndexOf(substring: string, startIndex?: number): number;\n\t\tmapString(mapFn: MapStringCallback): StringLikeSequence;\n\t\tmatch(pattern: RegExp): StringLikeSequence;\n\t\treverse(): StringLikeSequence;\n\n\t\tsplit(delimiter: string): StringLikeSequence;\n\t\tsplit(delimiter: RegExp): StringLikeSequence;\n\n\t\tstartsWith(prefix: string): boolean;\n\t\tsubstring(start: number, stop?: number): StringLikeSequence;\n\t\ttoLowerCase(): StringLikeSequence;\n\t\ttoUpperCase(): StringLikeSequence;\n\t}\n}\n\ndeclare module 'lazy.js' {\n\texport = Lazy;\n}\n\n"
  },
  {
    "path": "build/lib/typings/stream.d.ts",
    "content": "declare namespace NodeJS {\n\ttype ComposeFnParam = (source: any) => void;\n\tinterface ReadWriteStream {\n\t\tcompose<T extends NodeJS.ReadableStream>(\n\t\t\tstream: T | ComposeFnParam | Iterable<T> | AsyncIterable<T>,\n\t\t\toptions?: { signal: AbortSignal },\n\t\t): T;\n\t}\n}\n"
  },
  {
    "path": "build/lib/typings/ternary-stream.d.ts",
    "content": "declare module 'ternary-stream' {\n\timport File = require('vinyl');\n\tfunction f(check: (f: File) => boolean, onTrue: NodeJS.ReadWriteStream, opnFalse?: NodeJS.ReadWriteStream): NodeJS.ReadWriteStream;\n\n\t/**\n\t * This is required as per:\n\t * https://github.com/microsoft/TypeScript/issues/5073\n\t */\n\tnamespace f {}\n\n\texport = f;\n}\n"
  },
  {
    "path": "build/lib/typings/vinyl.d.ts",
    "content": "// Type definitions for vinyl 0.4.3\n// Project: https://github.com/wearefractal/vinyl\n// Definitions by: vvakame <https://github.com/vvakame/>, jedmao <https://github.com/jedmao>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ndeclare module \"vinyl\" {\n\n\timport fs = require(\"fs\");\n\n\t/**\n\t * A virtual file format.\n\t */\n\tclass File {\n\t\tconstructor(options?: {\n\t\t\t/**\n\t\t\t* Default: process.cwd()\n\t\t\t*/\n\t\t\tcwd?: string;\n\t\t\t/**\n\t\t\t * Used for relative pathing. Typically where a glob starts.\n\t\t\t */\n\t\t\tbase?: string;\n\t\t\t/**\n\t\t\t * Full path to the file.\n\t\t\t */\n\t\t\tpath?: string;\n\t\t\t/**\n\t\t\t * Path history. Has no effect if options.path is passed.\n\t\t\t */\n\t\t\thistory?: string[];\n\t\t\t/**\n\t\t\t * The result of an fs.stat call. See fs.Stats for more information.\n\t\t\t */\n\t\t\tstat?: fs.Stats;\n\t\t\t/**\n\t\t\t * File contents.\n\t\t\t * Type: Buffer, Stream, or null\n\t\t\t */\n\t\t\tcontents?: Buffer | NodeJS.ReadWriteStream;\n\t\t});\n\n\t\t/**\n\t\t * Default: process.cwd()\n\t\t */\n\t\tpublic cwd: string;\n\t\t/**\n\t\t * Used for relative pathing. Typically where a glob starts.\n\t\t */\n\t\tpublic base: string;\n\t\t/**\n\t\t * Gets and sets the basename of `file.path`.\n\t\t *\n\t\t * Throws when `file.path` is not set.\n\t\t *\n\t\t * Example:\n\t\t *\n\t\t * ```js\n\t\t * var file = new File({\n\t\t *   cwd: '/',\n\t\t *   base: '/test/',\n\t\t *   path: '/test/file.js'\n\t\t * });\n\t\t *\n\t\t * console.log(file.basename); // file.js\n\t\t *\n\t\t * file.basename = 'file.txt';\n\t\t *\n\t\t * console.log(file.basename); // file.txt\n\t\t * console.log(file.path); // /test/file.txt\n\t\t * ```\n\t\t */\n\t\tbasename: string;\n\t\t/**\n\t\t * Full path to the file.\n\t\t */\n\t\tpublic path: string;\n\t\tpublic stat: fs.Stats;\n\t\t/**\n\t\t * Type: Buffer|Stream|null (Default: null)\n\t\t */\n\t\tpublic contents: Buffer | NodeJS.ReadableStream;\n\t\t/**\n\t\t * Returns path.relative for the file base and file path.\n\t\t * Example:\n\t\t *  var file = new File({\n\t\t *    cwd: \"/\",\n\t\t *    base: \"/test/\",\n\t\t *    path: \"/test/file.js\"\n\t\t *  });\n\t\t *  console.log(file.relative); // file.js\n\t\t */\n\t\tpublic relative: string;\n\n\t\tpublic isBuffer(): boolean;\n\n\t\tpublic isStream(): boolean;\n\n\t\tpublic isNull(): boolean;\n\n\t\tpublic isDirectory(): boolean;\n\n\t\t/**\n\t\t * Returns a new File object with all attributes cloned. Custom attributes are deep-cloned.\n\t\t */\n\t\tpublic clone(opts?: { contents?: boolean }): File;\n\n\t\t/**\n\t\t * If file.contents is a Buffer, it will write it to the stream.\n\t\t * If file.contents is a Stream, it will pipe it to the stream.\n\t\t * If file.contents is null, it will do nothing.\n\t\t */\n\t\tpublic pipe<T extends NodeJS.ReadWriteStream>(\n\t\t\tstream: T,\n\t\t\topts?: {\n\t\t\t\t/**\n\t\t\t\t * If false, the destination stream will not be ended (same as node core).\n\t\t\t\t */\n\t\t\t\tend?: boolean;\n\t\t\t}): T;\n\n\t\t/**\n\t\t * Returns a pretty String interpretation of the File. Useful for console.log.\n\t\t */\n\t\tpublic inspect(): string;\n\t}\n\n\t/**\n\t * This is required as per:\n\t * https://github.com/microsoft/TypeScript/issues/5073\n\t */\n\tnamespace File { }\n\n\texport = File;\n\n}\n"
  },
  {
    "path": "build/lib/util.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.incremental = incremental;\nexports.debounce = debounce;\nexports.fixWin32DirectoryPermissions = fixWin32DirectoryPermissions;\nexports.setExecutableBit = setExecutableBit;\nexports.toFileUri = toFileUri;\nexports.skipDirectories = skipDirectories;\nexports.cleanNodeModules = cleanNodeModules;\nexports.loadSourcemaps = loadSourcemaps;\nexports.stripSourceMappingURL = stripSourceMappingURL;\nexports.$if = $if;\nexports.appendOwnPathSourceURL = appendOwnPathSourceURL;\nexports.rewriteSourceMappingURL = rewriteSourceMappingURL;\nexports.rimraf = rimraf;\nexports.rreddir = rreddir;\nexports.ensureDir = ensureDir;\nexports.rebase = rebase;\nexports.filter = filter;\nexports.streamToPromise = streamToPromise;\nexports.getElectronVersion = getElectronVersion;\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst debounce_1 = __importDefault(require(\"debounce\"));\nconst gulp_filter_1 = __importDefault(require(\"gulp-filter\"));\nconst gulp_rename_1 = __importDefault(require(\"gulp-rename\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst rimraf_1 = __importDefault(require(\"rimraf\"));\nconst url_1 = require(\"url\");\nconst ternary_stream_1 = __importDefault(require(\"ternary-stream\"));\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst NoCancellationToken = { isCancellationRequested: () => false };\nfunction incremental(streamProvider, initial, supportsCancellation) {\n    const input = event_stream_1.default.through();\n    const output = event_stream_1.default.through();\n    let state = 'idle';\n    let buffer = Object.create(null);\n    const token = !supportsCancellation ? undefined : { isCancellationRequested: () => Object.keys(buffer).length > 0 };\n    const run = (input, isCancellable) => {\n        state = 'running';\n        const stream = !supportsCancellation ? streamProvider() : streamProvider(isCancellable ? token : NoCancellationToken);\n        input\n            .pipe(stream)\n            .pipe(event_stream_1.default.through(undefined, () => {\n            state = 'idle';\n            eventuallyRun();\n        }))\n            .pipe(output);\n    };\n    if (initial) {\n        run(initial, false);\n    }\n    const eventuallyRun = (0, debounce_1.default)(() => {\n        const paths = Object.keys(buffer);\n        if (paths.length === 0) {\n            return;\n        }\n        const data = paths.map(path => buffer[path]);\n        buffer = Object.create(null);\n        run(event_stream_1.default.readArray(data), true);\n    }, 500);\n    input.on('data', (f) => {\n        buffer[f.path] = f;\n        if (state === 'idle') {\n            eventuallyRun();\n        }\n    });\n    return event_stream_1.default.duplex(input, output);\n}\nfunction debounce(task, duration = 500) {\n    const input = event_stream_1.default.through();\n    const output = event_stream_1.default.through();\n    let state = 'idle';\n    const run = () => {\n        state = 'running';\n        task()\n            .pipe(event_stream_1.default.through(undefined, () => {\n            const shouldRunAgain = state === 'stale';\n            state = 'idle';\n            if (shouldRunAgain) {\n                eventuallyRun();\n            }\n        }))\n            .pipe(output);\n    };\n    run();\n    const eventuallyRun = (0, debounce_1.default)(() => run(), duration);\n    input.on('data', () => {\n        if (state === 'idle') {\n            eventuallyRun();\n        }\n        else {\n            state = 'stale';\n        }\n    });\n    return event_stream_1.default.duplex(input, output);\n}\nfunction fixWin32DirectoryPermissions() {\n    if (!/win32/.test(process.platform)) {\n        return event_stream_1.default.through();\n    }\n    return event_stream_1.default.mapSync(f => {\n        if (f.stat && f.stat.isDirectory && f.stat.isDirectory()) {\n            f.stat.mode = 16877;\n        }\n        return f;\n    });\n}\nfunction setExecutableBit(pattern) {\n    const setBit = event_stream_1.default.mapSync(f => {\n        if (!f.stat) {\n            f.stat = { isFile() { return true; } };\n        }\n        f.stat.mode = /* 100755 */ 33261;\n        return f;\n    });\n    if (!pattern) {\n        return setBit;\n    }\n    const input = event_stream_1.default.through();\n    const filter = (0, gulp_filter_1.default)(pattern, { restore: true });\n    const output = input\n        .pipe(filter)\n        .pipe(setBit)\n        .pipe(filter.restore);\n    return event_stream_1.default.duplex(input, output);\n}\nfunction toFileUri(filePath) {\n    const match = filePath.match(/^([a-z])\\:(.*)$/i);\n    if (match) {\n        filePath = '/' + match[1].toUpperCase() + ':' + match[2];\n    }\n    return 'file://' + filePath.replace(/\\\\/g, '/');\n}\nfunction skipDirectories() {\n    return event_stream_1.default.mapSync(f => {\n        if (!f.isDirectory()) {\n            return f;\n        }\n    });\n}\nfunction cleanNodeModules(rulePath) {\n    const rules = fs_1.default.readFileSync(rulePath, 'utf8')\n        .split(/\\r?\\n/g)\n        .map(line => line.trim())\n        .filter(line => line && !/^#/.test(line));\n    const excludes = rules.filter(line => !/^!/.test(line)).map(line => `!**/node_modules/${line}`);\n    const includes = rules.filter(line => /^!/.test(line)).map(line => `**/node_modules/${line.substr(1)}`);\n    const input = event_stream_1.default.through();\n    const output = event_stream_1.default.merge(input.pipe((0, gulp_filter_1.default)(['**', ...excludes])), input.pipe((0, gulp_filter_1.default)(includes)));\n    return event_stream_1.default.duplex(input, output);\n}\nfunction loadSourcemaps() {\n    const input = event_stream_1.default.through();\n    const output = input\n        .pipe(event_stream_1.default.map((f, cb) => {\n        if (f.sourceMap) {\n            cb(undefined, f);\n            return;\n        }\n        if (!f.contents) {\n            cb(undefined, f);\n            return;\n        }\n        const contents = f.contents.toString('utf8');\n        const reg = /\\/\\/# sourceMappingURL=(.*)$/g;\n        let lastMatch = null;\n        let match = null;\n        while (match = reg.exec(contents)) {\n            lastMatch = match;\n        }\n        if (!lastMatch) {\n            f.sourceMap = {\n                version: '3',\n                names: [],\n                mappings: '',\n                sources: [f.relative.replace(/\\\\/g, '/')],\n                sourcesContent: [contents]\n            };\n            cb(undefined, f);\n            return;\n        }\n        f.contents = Buffer.from(contents.replace(/\\/\\/# sourceMappingURL=(.*)$/g, ''), 'utf8');\n        fs_1.default.readFile(path_1.default.join(path_1.default.dirname(f.path), lastMatch[1]), 'utf8', (err, contents) => {\n            if (err) {\n                return cb(err);\n            }\n            f.sourceMap = JSON.parse(contents);\n            cb(undefined, f);\n        });\n    }));\n    return event_stream_1.default.duplex(input, output);\n}\nfunction stripSourceMappingURL() {\n    const input = event_stream_1.default.through();\n    const output = input\n        .pipe(event_stream_1.default.mapSync(f => {\n        const contents = f.contents.toString('utf8');\n        f.contents = Buffer.from(contents.replace(/\\n\\/\\/# sourceMappingURL=(.*)$/gm, ''), 'utf8');\n        return f;\n    }));\n    return event_stream_1.default.duplex(input, output);\n}\n/** Splits items in the stream based on the predicate, sending them to onTrue if true, or onFalse otherwise */\nfunction $if(test, onTrue, onFalse = event_stream_1.default.through()) {\n    if (typeof test === 'boolean') {\n        return test ? onTrue : onFalse;\n    }\n    return (0, ternary_stream_1.default)(test, onTrue, onFalse);\n}\n/** Operator that appends the js files' original path a sourceURL, so debug locations map */\nfunction appendOwnPathSourceURL() {\n    const input = event_stream_1.default.through();\n    const output = input\n        .pipe(event_stream_1.default.mapSync(f => {\n        if (!(f.contents instanceof Buffer)) {\n            throw new Error(`contents of ${f.path} are not a buffer`);\n        }\n        f.contents = Buffer.concat([f.contents, Buffer.from(`\\n//# sourceURL=${(0, url_1.pathToFileURL)(f.path)}`)]);\n        return f;\n    }));\n    return event_stream_1.default.duplex(input, output);\n}\nfunction rewriteSourceMappingURL(sourceMappingURLBase) {\n    const input = event_stream_1.default.through();\n    const output = input\n        .pipe(event_stream_1.default.mapSync(f => {\n        const contents = f.contents.toString('utf8');\n        const str = `//# sourceMappingURL=${sourceMappingURLBase}/${path_1.default.dirname(f.relative).replace(/\\\\/g, '/')}/$1`;\n        f.contents = Buffer.from(contents.replace(/\\n\\/\\/# sourceMappingURL=(.*)$/gm, str));\n        return f;\n    }));\n    return event_stream_1.default.duplex(input, output);\n}\nfunction rimraf(dir) {\n    const result = () => new Promise((c, e) => {\n        let retries = 0;\n        const retry = () => {\n            (0, rimraf_1.default)(dir, { maxBusyTries: 1 }, (err) => {\n                if (!err) {\n                    return c();\n                }\n                if (err.code === 'ENOTEMPTY' && ++retries < 5) {\n                    return setTimeout(() => retry(), 10);\n                }\n                return e(err);\n            });\n        };\n        retry();\n    });\n    result.taskName = `clean-${path_1.default.basename(dir).toLowerCase()}`;\n    return result;\n}\nfunction _rreaddir(dirPath, prepend, result) {\n    const entries = fs_1.default.readdirSync(dirPath, { withFileTypes: true });\n    for (const entry of entries) {\n        if (entry.isDirectory()) {\n            _rreaddir(path_1.default.join(dirPath, entry.name), `${prepend}/${entry.name}`, result);\n        }\n        else {\n            result.push(`${prepend}/${entry.name}`);\n        }\n    }\n}\nfunction rreddir(dirPath) {\n    const result = [];\n    _rreaddir(dirPath, '', result);\n    return result;\n}\nfunction ensureDir(dirPath) {\n    if (fs_1.default.existsSync(dirPath)) {\n        return;\n    }\n    ensureDir(path_1.default.dirname(dirPath));\n    fs_1.default.mkdirSync(dirPath);\n}\nfunction rebase(count) {\n    return (0, gulp_rename_1.default)(f => {\n        const parts = f.dirname ? f.dirname.split(/[\\/\\\\]/) : [];\n        f.dirname = parts.slice(count).join(path_1.default.sep);\n    });\n}\nfunction filter(fn) {\n    const result = event_stream_1.default.through(function (data) {\n        if (fn(data)) {\n            this.emit('data', data);\n        }\n        else {\n            result.restore.push(data);\n        }\n    });\n    result.restore = event_stream_1.default.through();\n    return result;\n}\nfunction streamToPromise(stream) {\n    return new Promise((c, e) => {\n        stream.on('error', err => e(err));\n        stream.on('end', () => c());\n    });\n}\nfunction getElectronVersion() {\n    const npmrc = fs_1.default.readFileSync(path_1.default.join(root, '.npmrc'), 'utf8');\n    const electronVersion = /^target=\"(.*)\"$/m.exec(npmrc)[1];\n    const msBuildId = /^ms_build_id=\"(.*)\"$/m.exec(npmrc)[1];\n    return { electronVersion, msBuildId };\n}\n//# sourceMappingURL=util.js.map"
  },
  {
    "path": "build/lib/util.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport es from 'event-stream';\nimport _debounce from 'debounce';\nimport _filter from 'gulp-filter';\nimport rename from 'gulp-rename';\nimport path from 'path';\nimport fs from 'fs';\nimport _rimraf from 'rimraf';\nimport VinylFile from 'vinyl';\nimport { ThroughStream } from 'through';\nimport sm from 'source-map';\nimport { pathToFileURL } from 'url';\nimport ternaryStream from 'ternary-stream';\n\nconst root = path.dirname(path.dirname(__dirname));\n\nexport interface ICancellationToken {\n\tisCancellationRequested(): boolean;\n}\n\nconst NoCancellationToken: ICancellationToken = { isCancellationRequested: () => false };\n\nexport interface IStreamProvider {\n\t(cancellationToken?: ICancellationToken): NodeJS.ReadWriteStream;\n}\n\nexport function incremental(streamProvider: IStreamProvider, initial: NodeJS.ReadWriteStream, supportsCancellation?: boolean): NodeJS.ReadWriteStream {\n\tconst input = es.through();\n\tconst output = es.through();\n\tlet state = 'idle';\n\tlet buffer = Object.create(null);\n\n\tconst token: ICancellationToken | undefined = !supportsCancellation ? undefined : { isCancellationRequested: () => Object.keys(buffer).length > 0 };\n\n\tconst run = (input: NodeJS.ReadWriteStream, isCancellable: boolean) => {\n\t\tstate = 'running';\n\n\t\tconst stream = !supportsCancellation ? streamProvider() : streamProvider(isCancellable ? token : NoCancellationToken);\n\n\t\tinput\n\t\t\t.pipe(stream)\n\t\t\t.pipe(es.through(undefined, () => {\n\t\t\t\tstate = 'idle';\n\t\t\t\teventuallyRun();\n\t\t\t}))\n\t\t\t.pipe(output);\n\t};\n\n\tif (initial) {\n\t\trun(initial, false);\n\t}\n\n\tconst eventuallyRun = _debounce(() => {\n\t\tconst paths = Object.keys(buffer);\n\n\t\tif (paths.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst data = paths.map(path => buffer[path]);\n\t\tbuffer = Object.create(null);\n\t\trun(es.readArray(data), true);\n\t}, 500);\n\n\tinput.on('data', (f: any) => {\n\t\tbuffer[f.path] = f;\n\n\t\tif (state === 'idle') {\n\t\t\teventuallyRun();\n\t\t}\n\t});\n\n\treturn es.duplex(input, output);\n}\n\nexport function debounce(task: () => NodeJS.ReadWriteStream, duration = 500): NodeJS.ReadWriteStream {\n\tconst input = es.through();\n\tconst output = es.through();\n\tlet state = 'idle';\n\n\tconst run = () => {\n\t\tstate = 'running';\n\n\t\ttask()\n\t\t\t.pipe(es.through(undefined, () => {\n\t\t\t\tconst shouldRunAgain = state === 'stale';\n\t\t\t\tstate = 'idle';\n\n\t\t\t\tif (shouldRunAgain) {\n\t\t\t\t\teventuallyRun();\n\t\t\t\t}\n\t\t\t}))\n\t\t\t.pipe(output);\n\t};\n\n\trun();\n\n\tconst eventuallyRun = _debounce(() => run(), duration);\n\n\tinput.on('data', () => {\n\t\tif (state === 'idle') {\n\t\t\teventuallyRun();\n\t\t} else {\n\t\t\tstate = 'stale';\n\t\t}\n\t});\n\n\treturn es.duplex(input, output);\n}\n\nexport function fixWin32DirectoryPermissions(): NodeJS.ReadWriteStream {\n\tif (!/win32/.test(process.platform)) {\n\t\treturn es.through();\n\t}\n\n\treturn es.mapSync<VinylFile, VinylFile>(f => {\n\t\tif (f.stat && f.stat.isDirectory && f.stat.isDirectory()) {\n\t\t\tf.stat.mode = 16877;\n\t\t}\n\n\t\treturn f;\n\t});\n}\n\nexport function setExecutableBit(pattern?: string | string[]): NodeJS.ReadWriteStream {\n\tconst setBit = es.mapSync<VinylFile, VinylFile>(f => {\n\t\tif (!f.stat) {\n\t\t\tf.stat = { isFile() { return true; } } as any;\n\t\t}\n\t\tf.stat.mode = /* 100755 */ 33261;\n\t\treturn f;\n\t});\n\n\tif (!pattern) {\n\t\treturn setBit;\n\t}\n\n\tconst input = es.through();\n\tconst filter = _filter(pattern, { restore: true });\n\tconst output = input\n\t\t.pipe(filter)\n\t\t.pipe(setBit)\n\t\t.pipe(filter.restore);\n\n\treturn es.duplex(input, output);\n}\n\nexport function toFileUri(filePath: string): string {\n\tconst match = filePath.match(/^([a-z])\\:(.*)$/i);\n\n\tif (match) {\n\t\tfilePath = '/' + match[1].toUpperCase() + ':' + match[2];\n\t}\n\n\treturn 'file://' + filePath.replace(/\\\\/g, '/');\n}\n\nexport function skipDirectories(): NodeJS.ReadWriteStream {\n\treturn es.mapSync<VinylFile, VinylFile | undefined>(f => {\n\t\tif (!f.isDirectory()) {\n\t\t\treturn f;\n\t\t}\n\t});\n}\n\nexport function cleanNodeModules(rulePath: string): NodeJS.ReadWriteStream {\n\tconst rules = fs.readFileSync(rulePath, 'utf8')\n\t\t.split(/\\r?\\n/g)\n\t\t.map(line => line.trim())\n\t\t.filter(line => line && !/^#/.test(line));\n\n\tconst excludes = rules.filter(line => !/^!/.test(line)).map(line => `!**/node_modules/${line}`);\n\tconst includes = rules.filter(line => /^!/.test(line)).map(line => `**/node_modules/${line.substr(1)}`);\n\n\tconst input = es.through();\n\tconst output = es.merge(\n\t\tinput.pipe(_filter(['**', ...excludes])),\n\t\tinput.pipe(_filter(includes))\n\t);\n\n\treturn es.duplex(input, output);\n}\n\ndeclare class FileSourceMap extends VinylFile {\n\tpublic sourceMap: sm.RawSourceMap;\n}\n\nexport function loadSourcemaps(): NodeJS.ReadWriteStream {\n\tconst input = es.through();\n\n\tconst output = input\n\t\t.pipe(es.map<FileSourceMap, FileSourceMap | undefined>((f, cb): FileSourceMap | undefined => {\n\t\t\tif (f.sourceMap) {\n\t\t\t\tcb(undefined, f);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!f.contents) {\n\t\t\t\tcb(undefined, f);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst contents = (<Buffer>f.contents).toString('utf8');\n\n\t\t\tconst reg = /\\/\\/# sourceMappingURL=(.*)$/g;\n\t\t\tlet lastMatch: RegExpExecArray | null = null;\n\t\t\tlet match: RegExpExecArray | null = null;\n\n\t\t\twhile (match = reg.exec(contents)) {\n\t\t\t\tlastMatch = match;\n\t\t\t}\n\n\t\t\tif (!lastMatch) {\n\t\t\t\tf.sourceMap = {\n\t\t\t\t\tversion: '3',\n\t\t\t\t\tnames: [],\n\t\t\t\t\tmappings: '',\n\t\t\t\t\tsources: [f.relative.replace(/\\\\/g, '/')],\n\t\t\t\t\tsourcesContent: [contents]\n\t\t\t\t};\n\n\t\t\t\tcb(undefined, f);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tf.contents = Buffer.from(contents.replace(/\\/\\/# sourceMappingURL=(.*)$/g, ''), 'utf8');\n\n\t\t\tfs.readFile(path.join(path.dirname(f.path), lastMatch[1]), 'utf8', (err, contents) => {\n\t\t\t\tif (err) { return cb(err); }\n\n\t\t\t\tf.sourceMap = JSON.parse(contents);\n\t\t\t\tcb(undefined, f);\n\t\t\t});\n\t\t}));\n\n\treturn es.duplex(input, output);\n}\n\nexport function stripSourceMappingURL(): NodeJS.ReadWriteStream {\n\tconst input = es.through();\n\n\tconst output = input\n\t\t.pipe(es.mapSync<VinylFile, VinylFile>(f => {\n\t\t\tconst contents = (<Buffer>f.contents).toString('utf8');\n\t\t\tf.contents = Buffer.from(contents.replace(/\\n\\/\\/# sourceMappingURL=(.*)$/gm, ''), 'utf8');\n\t\t\treturn f;\n\t\t}));\n\n\treturn es.duplex(input, output);\n}\n\n/** Splits items in the stream based on the predicate, sending them to onTrue if true, or onFalse otherwise */\nexport function $if(test: boolean | ((f: VinylFile) => boolean), onTrue: NodeJS.ReadWriteStream, onFalse: NodeJS.ReadWriteStream = es.through()) {\n\tif (typeof test === 'boolean') {\n\t\treturn test ? onTrue : onFalse;\n\t}\n\n\treturn ternaryStream(test, onTrue, onFalse);\n}\n\n/** Operator that appends the js files' original path a sourceURL, so debug locations map */\nexport function appendOwnPathSourceURL(): NodeJS.ReadWriteStream {\n\tconst input = es.through();\n\n\tconst output = input\n\t\t.pipe(es.mapSync<VinylFile, VinylFile>(f => {\n\t\t\tif (!(f.contents instanceof Buffer)) {\n\t\t\t\tthrow new Error(`contents of ${f.path} are not a buffer`);\n\t\t\t}\n\n\t\t\tf.contents = Buffer.concat([f.contents, Buffer.from(`\\n//# sourceURL=${pathToFileURL(f.path)}`)]);\n\t\t\treturn f;\n\t\t}));\n\n\treturn es.duplex(input, output);\n}\n\nexport function rewriteSourceMappingURL(sourceMappingURLBase: string): NodeJS.ReadWriteStream {\n\tconst input = es.through();\n\n\tconst output = input\n\t\t.pipe(es.mapSync<VinylFile, VinylFile>(f => {\n\t\t\tconst contents = (<Buffer>f.contents).toString('utf8');\n\t\t\tconst str = `//# sourceMappingURL=${sourceMappingURLBase}/${path.dirname(f.relative).replace(/\\\\/g, '/')}/$1`;\n\t\t\tf.contents = Buffer.from(contents.replace(/\\n\\/\\/# sourceMappingURL=(.*)$/gm, str));\n\t\t\treturn f;\n\t\t}));\n\n\treturn es.duplex(input, output);\n}\n\nexport function rimraf(dir: string): () => Promise<void> {\n\tconst result = () => new Promise<void>((c, e) => {\n\t\tlet retries = 0;\n\n\t\tconst retry = () => {\n\t\t\t_rimraf(dir, { maxBusyTries: 1 }, (err: any) => {\n\t\t\t\tif (!err) {\n\t\t\t\t\treturn c();\n\t\t\t\t}\n\n\t\t\t\tif (err.code === 'ENOTEMPTY' && ++retries < 5) {\n\t\t\t\t\treturn setTimeout(() => retry(), 10);\n\t\t\t\t}\n\n\t\t\t\treturn e(err);\n\t\t\t});\n\t\t};\n\n\t\tretry();\n\t});\n\n\tresult.taskName = `clean-${path.basename(dir).toLowerCase()}`;\n\treturn result;\n}\n\nfunction _rreaddir(dirPath: string, prepend: string, result: string[]): void {\n\tconst entries = fs.readdirSync(dirPath, { withFileTypes: true });\n\tfor (const entry of entries) {\n\t\tif (entry.isDirectory()) {\n\t\t\t_rreaddir(path.join(dirPath, entry.name), `${prepend}/${entry.name}`, result);\n\t\t} else {\n\t\t\tresult.push(`${prepend}/${entry.name}`);\n\t\t}\n\t}\n}\n\nexport function rreddir(dirPath: string): string[] {\n\tconst result: string[] = [];\n\t_rreaddir(dirPath, '', result);\n\treturn result;\n}\n\nexport function ensureDir(dirPath: string): void {\n\tif (fs.existsSync(dirPath)) {\n\t\treturn;\n\t}\n\tensureDir(path.dirname(dirPath));\n\tfs.mkdirSync(dirPath);\n}\n\nexport function rebase(count: number): NodeJS.ReadWriteStream {\n\treturn rename(f => {\n\t\tconst parts = f.dirname ? f.dirname.split(/[\\/\\\\]/) : [];\n\t\tf.dirname = parts.slice(count).join(path.sep);\n\t});\n}\n\nexport interface FilterStream extends NodeJS.ReadWriteStream {\n\trestore: ThroughStream;\n}\n\nexport function filter(fn: (data: any) => boolean): FilterStream {\n\tconst result = <FilterStream><any>es.through(function (data) {\n\t\tif (fn(data)) {\n\t\t\tthis.emit('data', data);\n\t\t} else {\n\t\t\tresult.restore.push(data);\n\t\t}\n\t});\n\n\tresult.restore = es.through();\n\treturn result;\n}\n\nexport function streamToPromise(stream: NodeJS.ReadWriteStream): Promise<void> {\n\treturn new Promise((c, e) => {\n\t\tstream.on('error', err => e(err));\n\t\tstream.on('end', () => c());\n\t});\n}\n\nexport function getElectronVersion(): Record<string, string> {\n\tconst npmrc = fs.readFileSync(path.join(root, '.npmrc'), 'utf8');\n\tconst electronVersion = /^target=\"(.*)\"$/m.exec(npmrc)![1];\n\tconst msBuildId = /^ms_build_id=\"(.*)\"$/m.exec(npmrc)![1];\n\treturn { electronVersion, msBuildId };\n}\n"
  },
  {
    "path": "build/lib/watch/index.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst watch = process.platform === 'win32' ? require('./watch-win32') : require('vscode-gulp-watch');\nmodule.exports = function () {\n    return watch.apply(null, arguments);\n};\n//# sourceMappingURL=index.js.map"
  },
  {
    "path": "build/lib/watch/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst watch = process.platform === 'win32' ? require('./watch-win32') : require('vscode-gulp-watch');\n\nmodule.exports = function () {\n\treturn watch.apply(null, arguments);\n};\n"
  },
  {
    "path": "build/lib/watch/watch-win32.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path_1 = __importDefault(require(\"path\"));\nconst child_process_1 = __importDefault(require(\"child_process\"));\nconst fs_1 = __importDefault(require(\"fs\"));\nconst vinyl_1 = __importDefault(require(\"vinyl\"));\nconst event_stream_1 = __importDefault(require(\"event-stream\"));\nconst gulp_filter_1 = __importDefault(require(\"gulp-filter\"));\nconst watcherPath = path_1.default.join(__dirname, 'watcher.exe');\nfunction toChangeType(type) {\n    switch (type) {\n        case '0': return 'change';\n        case '1': return 'add';\n        default: return 'unlink';\n    }\n}\nfunction watch(root) {\n    const result = event_stream_1.default.through();\n    let child = child_process_1.default.spawn(watcherPath, [root]);\n    child.stdout.on('data', function (data) {\n        const lines = data.toString('utf8').split('\\n');\n        for (let i = 0; i < lines.length; i++) {\n            const line = lines[i].trim();\n            if (line.length === 0) {\n                continue;\n            }\n            const changeType = line[0];\n            const changePath = line.substr(2);\n            // filter as early as possible\n            if (/^\\.git/.test(changePath) || /(^|\\\\)out($|\\\\)/.test(changePath)) {\n                continue;\n            }\n            const changePathFull = path_1.default.join(root, changePath);\n            const file = new vinyl_1.default({\n                path: changePathFull,\n                base: root\n            });\n            file.event = toChangeType(changeType);\n            result.emit('data', file);\n        }\n    });\n    child.stderr.on('data', function (data) {\n        result.emit('error', data);\n    });\n    child.on('exit', function (code) {\n        result.emit('error', 'Watcher died with code ' + code);\n        child = null;\n    });\n    process.once('SIGTERM', function () { process.exit(0); });\n    process.once('SIGTERM', function () { process.exit(0); });\n    process.once('exit', function () { if (child) {\n        child.kill();\n    } });\n    return result;\n}\nconst cache = Object.create(null);\nmodule.exports = function (pattern, options) {\n    options = options || {};\n    const cwd = path_1.default.normalize(options.cwd || process.cwd());\n    let watcher = cache[cwd];\n    if (!watcher) {\n        watcher = cache[cwd] = watch(cwd);\n    }\n    const rebase = !options.base ? event_stream_1.default.through() : event_stream_1.default.mapSync(function (f) {\n        f.base = options.base;\n        return f;\n    });\n    return watcher\n        .pipe((0, gulp_filter_1.default)(['**', '!.git{,/**}'], { dot: options.dot })) // ignore all things git\n        .pipe((0, gulp_filter_1.default)(pattern, { dot: options.dot }))\n        .pipe(event_stream_1.default.map(function (file, cb) {\n        fs_1.default.stat(file.path, function (err, stat) {\n            if (err && err.code === 'ENOENT') {\n                return cb(undefined, file);\n            }\n            if (err) {\n                return cb();\n            }\n            if (!stat.isFile()) {\n                return cb();\n            }\n            fs_1.default.readFile(file.path, function (err, contents) {\n                if (err && err.code === 'ENOENT') {\n                    return cb(undefined, file);\n                }\n                if (err) {\n                    return cb();\n                }\n                file.contents = contents;\n                file.stat = stat;\n                cb(undefined, file);\n            });\n        });\n    }))\n        .pipe(rebase);\n};\n//# sourceMappingURL=watch-win32.js.map"
  },
  {
    "path": "build/lib/watch/watch-win32.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport path from 'path';\nimport cp from 'child_process';\nimport fs from 'fs';\nimport File from 'vinyl';\nimport es from 'event-stream';\nimport filter from 'gulp-filter';\nimport { Stream } from 'stream';\n\nconst watcherPath = path.join(__dirname, 'watcher.exe');\n\nfunction toChangeType(type: '0' | '1' | '2'): 'change' | 'add' | 'unlink' {\n\tswitch (type) {\n\t\tcase '0': return 'change';\n\t\tcase '1': return 'add';\n\t\tdefault: return 'unlink';\n\t}\n}\n\nfunction watch(root: string): Stream {\n\tconst result = es.through();\n\tlet child: cp.ChildProcess | null = cp.spawn(watcherPath, [root]);\n\n\tchild.stdout!.on('data', function (data) {\n\t\tconst lines: string[] = data.toString('utf8').split('\\n');\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i].trim();\n\t\t\tif (line.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst changeType = <'0' | '1' | '2'>line[0];\n\t\t\tconst changePath = line.substr(2);\n\n\t\t\t// filter as early as possible\n\t\t\tif (/^\\.git/.test(changePath) || /(^|\\\\)out($|\\\\)/.test(changePath)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst changePathFull = path.join(root, changePath);\n\n\t\t\tconst file = new File({\n\t\t\t\tpath: changePathFull,\n\t\t\t\tbase: root\n\t\t\t});\n\t\t\t(<any>file).event = toChangeType(changeType);\n\t\t\tresult.emit('data', file);\n\t\t}\n\t});\n\n\tchild.stderr!.on('data', function (data) {\n\t\tresult.emit('error', data);\n\t});\n\n\tchild.on('exit', function (code) {\n\t\tresult.emit('error', 'Watcher died with code ' + code);\n\t\tchild = null;\n\t});\n\n\tprocess.once('SIGTERM', function () { process.exit(0); });\n\tprocess.once('SIGTERM', function () { process.exit(0); });\n\tprocess.once('exit', function () { if (child) { child.kill(); } });\n\n\treturn result;\n}\n\nconst cache: { [cwd: string]: Stream } = Object.create(null);\n\nmodule.exports = function (pattern: string | string[] | filter.FileFunction, options?: { cwd?: string; base?: string; dot?: boolean }) {\n\toptions = options || {};\n\n\tconst cwd = path.normalize(options.cwd || process.cwd());\n\tlet watcher = cache[cwd];\n\n\tif (!watcher) {\n\t\twatcher = cache[cwd] = watch(cwd);\n\t}\n\n\tconst rebase = !options.base ? es.through() : es.mapSync(function (f: File) {\n\t\tf.base = options!.base!;\n\t\treturn f;\n\t});\n\n\treturn watcher\n\t\t.pipe(filter(['**', '!.git{,/**}'], { dot: options.dot })) // ignore all things git\n\t\t.pipe(filter(pattern, { dot: options.dot }))\n\t\t.pipe(es.map(function (file: File, cb) {\n\t\t\tfs.stat(file.path, function (err, stat) {\n\t\t\t\tif (err && err.code === 'ENOENT') { return cb(undefined, file); }\n\t\t\t\tif (err) { return cb(); }\n\t\t\t\tif (!stat.isFile()) { return cb(); }\n\n\t\t\t\tfs.readFile(file.path, function (err, contents) {\n\t\t\t\t\tif (err && err.code === 'ENOENT') { return cb(undefined, file); }\n\t\t\t\t\tif (err) { return cb(); }\n\n\t\t\t\t\tfile.contents = contents;\n\t\t\t\t\tfile.stat = stat;\n\t\t\t\t\tcb(undefined, file);\n\t\t\t\t});\n\t\t\t});\n\t\t}))\n\t\t.pipe(rebase);\n};\n"
  },
  {
    "path": "build/linux/debian/calculate-deps.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generatePackageDeps = generatePackageDeps;\nconst child_process_1 = require(\"child_process\");\nconst fs_1 = require(\"fs\");\nconst os_1 = require(\"os\");\nconst path_1 = __importDefault(require(\"path\"));\nconst cgmanifest_json_1 = __importDefault(require(\"../../../cgmanifest.json\"));\nconst dep_lists_1 = require(\"./dep-lists\");\nfunction generatePackageDeps(files, arch, chromiumSysroot, vscodeSysroot) {\n    const dependencies = files.map(file => calculatePackageDeps(file, arch, chromiumSysroot, vscodeSysroot));\n    const additionalDepsSet = new Set(dep_lists_1.additionalDeps);\n    dependencies.push(additionalDepsSet);\n    return dependencies;\n}\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/calculate_package_deps.py.\nfunction calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot) {\n    try {\n        if (!((0, fs_1.statSync)(binaryPath).mode & fs_1.constants.S_IXUSR)) {\n            throw new Error(`Binary ${binaryPath} needs to have an executable bit set.`);\n        }\n    }\n    catch (e) {\n        // The package might not exist. Don't re-throw the error here.\n        console.error('Tried to stat ' + binaryPath + ' but failed.');\n    }\n    // Get the Chromium dpkg-shlibdeps file.\n    const chromiumManifest = cgmanifest_json_1.default.registrations.filter(registration => {\n        return registration.component.type === 'git' && registration.component.git.name === 'chromium';\n    });\n    const dpkgShlibdepsUrl = `https://raw.githubusercontent.com/chromium/chromium/${chromiumManifest[0].version}/third_party/dpkg-shlibdeps/dpkg-shlibdeps.pl`;\n    const dpkgShlibdepsScriptLocation = `${(0, os_1.tmpdir)()}/dpkg-shlibdeps.pl`;\n    const result = (0, child_process_1.spawnSync)('curl', [dpkgShlibdepsUrl, '-o', dpkgShlibdepsScriptLocation]);\n    if (result.status !== 0) {\n        throw new Error('Cannot retrieve dpkg-shlibdeps. Stderr:\\n' + result.stderr);\n    }\n    const cmd = [dpkgShlibdepsScriptLocation, '--ignore-weak-undefined'];\n    switch (arch) {\n        case 'amd64':\n            cmd.push(`-l${chromiumSysroot}/usr/lib/x86_64-linux-gnu`, `-l${chromiumSysroot}/lib/x86_64-linux-gnu`, `-l${vscodeSysroot}/usr/lib/x86_64-linux-gnu`, `-l${vscodeSysroot}/lib/x86_64-linux-gnu`);\n            break;\n        case 'armhf':\n            cmd.push(`-l${chromiumSysroot}/usr/lib/arm-linux-gnueabihf`, `-l${chromiumSysroot}/lib/arm-linux-gnueabihf`, `-l${vscodeSysroot}/usr/lib/arm-linux-gnueabihf`, `-l${vscodeSysroot}/lib/arm-linux-gnueabihf`);\n            break;\n        case 'arm64':\n            cmd.push(`-l${chromiumSysroot}/usr/lib/aarch64-linux-gnu`, `-l${chromiumSysroot}/lib/aarch64-linux-gnu`, `-l${vscodeSysroot}/usr/lib/aarch64-linux-gnu`, `-l${vscodeSysroot}/lib/aarch64-linux-gnu`);\n            break;\n    }\n    cmd.push(`-l${chromiumSysroot}/usr/lib`);\n    cmd.push(`-L${vscodeSysroot}/debian/libxkbfile1/DEBIAN/shlibs`);\n    cmd.push('-O', '-e', path_1.default.resolve(binaryPath));\n    const dpkgShlibdepsResult = (0, child_process_1.spawnSync)('perl', cmd, { cwd: chromiumSysroot });\n    if (dpkgShlibdepsResult.status !== 0) {\n        throw new Error(`dpkg-shlibdeps failed with exit code ${dpkgShlibdepsResult.status}. stderr:\\n${dpkgShlibdepsResult.stderr} `);\n    }\n    const shlibsDependsPrefix = 'shlibs:Depends=';\n    const requiresList = dpkgShlibdepsResult.stdout.toString('utf-8').trimEnd().split('\\n');\n    let depsStr = '';\n    for (const line of requiresList) {\n        if (line.startsWith(shlibsDependsPrefix)) {\n            depsStr = line.substring(shlibsDependsPrefix.length);\n        }\n    }\n    // Refs https://chromium-review.googlesource.com/c/chromium/src/+/3572926\n    // Chromium depends on libgcc_s, is from the package libgcc1.  However, in\n    // Bullseye, the package was renamed to libgcc-s1.  To avoid adding a dep\n    // on the newer package, this hack skips the dep.  This is safe because\n    // libgcc-s1 is a dependency of libc6.  This hack can be removed once\n    // support for Debian Buster and Ubuntu Bionic are dropped.\n    //\n    // Remove kerberos native module related dependencies as the versions\n    // computed from sysroot will not satisfy the minimum supported distros\n    // Refs https://github.com/microsoft/vscode/issues/188881.\n    // TODO(deepak1556): remove this workaround in favor of computing the\n    // versions from build container for native modules.\n    const filteredDeps = depsStr.split(', ').filter(dependency => {\n        return !dependency.startsWith('libgcc-s1');\n    }).sort();\n    const requires = new Set(filteredDeps);\n    return requires;\n}\n//# sourceMappingURL=calculate-deps.js.map"
  },
  {
    "path": "build/linux/debian/calculate-deps.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { spawnSync } from 'child_process';\nimport { constants, statSync } from 'fs';\nimport { tmpdir } from 'os';\nimport path from 'path';\nimport manifests from '../../../cgmanifest.json';\nimport { additionalDeps } from './dep-lists';\nimport { DebianArchString } from './types';\n\nexport function generatePackageDeps(files: string[], arch: DebianArchString, chromiumSysroot: string, vscodeSysroot: string): Set<string>[] {\n\tconst dependencies: Set<string>[] = files.map(file => calculatePackageDeps(file, arch, chromiumSysroot, vscodeSysroot));\n\tconst additionalDepsSet = new Set(additionalDeps);\n\tdependencies.push(additionalDepsSet);\n\treturn dependencies;\n}\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/calculate_package_deps.py.\nfunction calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromiumSysroot: string, vscodeSysroot: string): Set<string> {\n\ttry {\n\t\tif (!(statSync(binaryPath).mode & constants.S_IXUSR)) {\n\t\t\tthrow new Error(`Binary ${binaryPath} needs to have an executable bit set.`);\n\t\t}\n\t} catch (e) {\n\t\t// The package might not exist. Don't re-throw the error here.\n\t\tconsole.error('Tried to stat ' + binaryPath + ' but failed.');\n\t}\n\n\t// Get the Chromium dpkg-shlibdeps file.\n\tconst chromiumManifest = manifests.registrations.filter(registration => {\n\t\treturn registration.component.type === 'git' && registration.component.git!.name === 'chromium';\n\t});\n\tconst dpkgShlibdepsUrl = `https://raw.githubusercontent.com/chromium/chromium/${chromiumManifest[0].version}/third_party/dpkg-shlibdeps/dpkg-shlibdeps.pl`;\n\tconst dpkgShlibdepsScriptLocation = `${tmpdir()}/dpkg-shlibdeps.pl`;\n\tconst result = spawnSync('curl', [dpkgShlibdepsUrl, '-o', dpkgShlibdepsScriptLocation]);\n\tif (result.status !== 0) {\n\t\tthrow new Error('Cannot retrieve dpkg-shlibdeps. Stderr:\\n' + result.stderr);\n\t}\n\tconst cmd = [dpkgShlibdepsScriptLocation, '--ignore-weak-undefined'];\n\tswitch (arch) {\n\t\tcase 'amd64':\n\t\t\tcmd.push(`-l${chromiumSysroot}/usr/lib/x86_64-linux-gnu`,\n\t\t\t\t`-l${chromiumSysroot}/lib/x86_64-linux-gnu`,\n\t\t\t\t`-l${vscodeSysroot}/usr/lib/x86_64-linux-gnu`,\n\t\t\t\t`-l${vscodeSysroot}/lib/x86_64-linux-gnu`);\n\t\t\tbreak;\n\t\tcase 'armhf':\n\t\t\tcmd.push(`-l${chromiumSysroot}/usr/lib/arm-linux-gnueabihf`,\n\t\t\t\t`-l${chromiumSysroot}/lib/arm-linux-gnueabihf`,\n\t\t\t\t`-l${vscodeSysroot}/usr/lib/arm-linux-gnueabihf`,\n\t\t\t\t`-l${vscodeSysroot}/lib/arm-linux-gnueabihf`);\n\t\t\tbreak;\n\t\tcase 'arm64':\n\t\t\tcmd.push(`-l${chromiumSysroot}/usr/lib/aarch64-linux-gnu`,\n\t\t\t\t`-l${chromiumSysroot}/lib/aarch64-linux-gnu`,\n\t\t\t\t`-l${vscodeSysroot}/usr/lib/aarch64-linux-gnu`,\n\t\t\t\t`-l${vscodeSysroot}/lib/aarch64-linux-gnu`);\n\t\t\tbreak;\n\t}\n\tcmd.push(`-l${chromiumSysroot}/usr/lib`);\n\tcmd.push(`-L${vscodeSysroot}/debian/libxkbfile1/DEBIAN/shlibs`);\n\tcmd.push('-O', '-e', path.resolve(binaryPath));\n\n\tconst dpkgShlibdepsResult = spawnSync('perl', cmd, { cwd: chromiumSysroot });\n\tif (dpkgShlibdepsResult.status !== 0) {\n\t\tthrow new Error(`dpkg-shlibdeps failed with exit code ${dpkgShlibdepsResult.status}. stderr:\\n${dpkgShlibdepsResult.stderr} `);\n\t}\n\n\tconst shlibsDependsPrefix = 'shlibs:Depends=';\n\tconst requiresList = dpkgShlibdepsResult.stdout.toString('utf-8').trimEnd().split('\\n');\n\tlet depsStr = '';\n\tfor (const line of requiresList) {\n\t\tif (line.startsWith(shlibsDependsPrefix)) {\n\t\t\tdepsStr = line.substring(shlibsDependsPrefix.length);\n\t\t}\n\t}\n\t// Refs https://chromium-review.googlesource.com/c/chromium/src/+/3572926\n\t// Chromium depends on libgcc_s, is from the package libgcc1.  However, in\n\t// Bullseye, the package was renamed to libgcc-s1.  To avoid adding a dep\n\t// on the newer package, this hack skips the dep.  This is safe because\n\t// libgcc-s1 is a dependency of libc6.  This hack can be removed once\n\t// support for Debian Buster and Ubuntu Bionic are dropped.\n\t//\n\t// Remove kerberos native module related dependencies as the versions\n\t// computed from sysroot will not satisfy the minimum supported distros\n\t// Refs https://github.com/microsoft/vscode/issues/188881.\n\t// TODO(deepak1556): remove this workaround in favor of computing the\n\t// versions from build container for native modules.\n\tconst filteredDeps = depsStr.split(', ').filter(dependency => {\n\t\treturn !dependency.startsWith('libgcc-s1');\n\t}).sort();\n\tconst requires = new Set(filteredDeps);\n\treturn requires;\n}\n"
  },
  {
    "path": "build/linux/debian/dep-lists.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.referenceGeneratedDepsByArch = exports.recommendedDeps = exports.additionalDeps = void 0;\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/additional_deps\n// Additional dependencies not in the dpkg-shlibdeps output.\nexports.additionalDeps = [\n    'ca-certificates', // Make sure users have SSL certificates.\n    'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n    'libnss3 (>= 3.26)',\n    'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', // For Breakpad crash reports.\n    'xdg-utils (>= 1.0.2)', // OS integration\n];\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/manual_recommends\n// Dependencies that we can only recommend\n// for now since some of the older distros don't support them.\nexports.recommendedDeps = [\n    'libvulkan1' // Move to additionalDeps once support for Trusty and Jessie are dropped.\n];\nexports.referenceGeneratedDepsByArch = {\n    'amd64': [\n        'ca-certificates',\n        'libasound2 (>= 1.0.17)',\n        'libatk-bridge2.0-0 (>= 2.5.3)',\n        'libatk1.0-0 (>= 2.11.90)',\n        'libatspi2.0-0 (>= 2.9.90)',\n        'libc6 (>= 2.14)',\n        'libc6 (>= 2.16)',\n        'libc6 (>= 2.17)',\n        'libc6 (>= 2.2.5)',\n        'libc6 (>= 2.25)',\n        'libc6 (>= 2.28)',\n        'libcairo2 (>= 1.6.0)',\n        'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',\n        'libdbus-1-3 (>= 1.9.14)',\n        'libexpat1 (>= 2.1~beta3)',\n        'libgbm1 (>= 17.1.0~rc2)',\n        'libglib2.0-0 (>= 2.37.3)',\n        'libgtk-3-0 (>= 3.9.10)',\n        'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n        'libnspr4 (>= 2:4.9-2~)',\n        'libnss3 (>= 2:3.30)',\n        'libnss3 (>= 3.26)',\n        'libpango-1.0-0 (>= 1.14.0)',\n        'libudev1 (>= 183)',\n        'libx11-6',\n        'libx11-6 (>= 2:1.4.99.1)',\n        'libxcb1 (>= 1.9.2)',\n        'libxcomposite1 (>= 1:0.4.4-1)',\n        'libxdamage1 (>= 1:1.1)',\n        'libxext6',\n        'libxfixes3',\n        'libxkbcommon0 (>= 0.5.0)',\n        'libxkbfile1 (>= 1:1.1.0)',\n        'libxrandr2',\n        'xdg-utils (>= 1.0.2)'\n    ],\n    'armhf': [\n        'ca-certificates',\n        'libasound2 (>= 1.0.17)',\n        'libatk-bridge2.0-0 (>= 2.5.3)',\n        'libatk1.0-0 (>= 2.11.90)',\n        'libatspi2.0-0 (>= 2.9.90)',\n        'libc6 (>= 2.16)',\n        'libc6 (>= 2.17)',\n        'libc6 (>= 2.25)',\n        'libc6 (>= 2.28)',\n        'libc6 (>= 2.4)',\n        'libc6 (>= 2.9)',\n        'libcairo2 (>= 1.6.0)',\n        'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',\n        'libdbus-1-3 (>= 1.9.14)',\n        'libexpat1 (>= 2.1~beta3)',\n        'libgbm1 (>= 17.1.0~rc2)',\n        'libglib2.0-0 (>= 2.37.3)',\n        'libgtk-3-0 (>= 3.9.10)',\n        'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n        'libnspr4 (>= 2:4.9-2~)',\n        'libnss3 (>= 2:3.30)',\n        'libnss3 (>= 3.26)',\n        'libpango-1.0-0 (>= 1.14.0)',\n        'libstdc++6 (>= 4.1.1)',\n        'libstdc++6 (>= 5)',\n        'libstdc++6 (>= 5.2)',\n        'libstdc++6 (>= 6)',\n        'libudev1 (>= 183)',\n        'libx11-6',\n        'libx11-6 (>= 2:1.4.99.1)',\n        'libxcb1 (>= 1.9.2)',\n        'libxcomposite1 (>= 1:0.4.4-1)',\n        'libxdamage1 (>= 1:1.1)',\n        'libxext6',\n        'libxfixes3',\n        'libxkbcommon0 (>= 0.5.0)',\n        'libxkbfile1 (>= 1:1.1.0)',\n        'libxrandr2',\n        'xdg-utils (>= 1.0.2)'\n    ],\n    'arm64': [\n        'ca-certificates',\n        'libasound2 (>= 1.0.17)',\n        'libatk-bridge2.0-0 (>= 2.5.3)',\n        'libatk1.0-0 (>= 2.11.90)',\n        'libatspi2.0-0 (>= 2.9.90)',\n        'libc6 (>= 2.17)',\n        'libc6 (>= 2.25)',\n        'libc6 (>= 2.28)',\n        'libcairo2 (>= 1.6.0)',\n        'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',\n        'libdbus-1-3 (>= 1.9.14)',\n        'libexpat1 (>= 2.1~beta3)',\n        'libgbm1 (>= 17.1.0~rc2)',\n        'libglib2.0-0 (>= 2.37.3)',\n        'libgtk-3-0 (>= 3.9.10)',\n        'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n        'libnspr4 (>= 2:4.9-2~)',\n        'libnss3 (>= 2:3.30)',\n        'libnss3 (>= 3.26)',\n        'libpango-1.0-0 (>= 1.14.0)',\n        'libstdc++6 (>= 4.1.1)',\n        'libstdc++6 (>= 5)',\n        'libstdc++6 (>= 5.2)',\n        'libstdc++6 (>= 6)',\n        'libudev1 (>= 183)',\n        'libx11-6',\n        'libx11-6 (>= 2:1.4.99.1)',\n        'libxcb1 (>= 1.9.2)',\n        'libxcomposite1 (>= 1:0.4.4-1)',\n        'libxdamage1 (>= 1:1.1)',\n        'libxext6',\n        'libxfixes3',\n        'libxkbcommon0 (>= 0.5.0)',\n        'libxkbfile1 (>= 1:1.1.0)',\n        'libxrandr2',\n        'xdg-utils (>= 1.0.2)'\n    ]\n};\n//# sourceMappingURL=dep-lists.js.map"
  },
  {
    "path": "build/linux/debian/dep-lists.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/additional_deps\n// Additional dependencies not in the dpkg-shlibdeps output.\nexport const additionalDeps = [\n\t'ca-certificates', // Make sure users have SSL certificates.\n\t'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n\t'libnss3 (>= 3.26)',\n\t'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', // For Breakpad crash reports.\n\t'xdg-utils (>= 1.0.2)', // OS integration\n];\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/manual_recommends\n// Dependencies that we can only recommend\n// for now since some of the older distros don't support them.\nexport const recommendedDeps = [\n\t'libvulkan1' // Move to additionalDeps once support for Trusty and Jessie are dropped.\n];\n\nexport const referenceGeneratedDepsByArch = {\n\t'amd64': [\n\t\t'ca-certificates',\n\t\t'libasound2 (>= 1.0.17)',\n\t\t'libatk-bridge2.0-0 (>= 2.5.3)',\n\t\t'libatk1.0-0 (>= 2.11.90)',\n\t\t'libatspi2.0-0 (>= 2.9.90)',\n\t\t'libc6 (>= 2.14)',\n\t\t'libc6 (>= 2.16)',\n\t\t'libc6 (>= 2.17)',\n\t\t'libc6 (>= 2.2.5)',\n\t\t'libc6 (>= 2.25)',\n\t\t'libc6 (>= 2.28)',\n\t\t'libcairo2 (>= 1.6.0)',\n\t\t'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',\n\t\t'libdbus-1-3 (>= 1.9.14)',\n\t\t'libexpat1 (>= 2.1~beta3)',\n\t\t'libgbm1 (>= 17.1.0~rc2)',\n\t\t'libglib2.0-0 (>= 2.37.3)',\n\t\t'libgtk-3-0 (>= 3.9.10)',\n\t\t'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n\t\t'libnspr4 (>= 2:4.9-2~)',\n\t\t'libnss3 (>= 2:3.30)',\n\t\t'libnss3 (>= 3.26)',\n\t\t'libpango-1.0-0 (>= 1.14.0)',\n\t\t'libudev1 (>= 183)',\n\t\t'libx11-6',\n\t\t'libx11-6 (>= 2:1.4.99.1)',\n\t\t'libxcb1 (>= 1.9.2)',\n\t\t'libxcomposite1 (>= 1:0.4.4-1)',\n\t\t'libxdamage1 (>= 1:1.1)',\n\t\t'libxext6',\n\t\t'libxfixes3',\n\t\t'libxkbcommon0 (>= 0.5.0)',\n\t\t'libxkbfile1 (>= 1:1.1.0)',\n\t\t'libxrandr2',\n\t\t'xdg-utils (>= 1.0.2)'\n\t],\n\t'armhf': [\n\t\t'ca-certificates',\n\t\t'libasound2 (>= 1.0.17)',\n\t\t'libatk-bridge2.0-0 (>= 2.5.3)',\n\t\t'libatk1.0-0 (>= 2.11.90)',\n\t\t'libatspi2.0-0 (>= 2.9.90)',\n\t\t'libc6 (>= 2.16)',\n\t\t'libc6 (>= 2.17)',\n\t\t'libc6 (>= 2.25)',\n\t\t'libc6 (>= 2.28)',\n\t\t'libc6 (>= 2.4)',\n\t\t'libc6 (>= 2.9)',\n\t\t'libcairo2 (>= 1.6.0)',\n\t\t'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',\n\t\t'libdbus-1-3 (>= 1.9.14)',\n\t\t'libexpat1 (>= 2.1~beta3)',\n\t\t'libgbm1 (>= 17.1.0~rc2)',\n\t\t'libglib2.0-0 (>= 2.37.3)',\n\t\t'libgtk-3-0 (>= 3.9.10)',\n\t\t'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n\t\t'libnspr4 (>= 2:4.9-2~)',\n\t\t'libnss3 (>= 2:3.30)',\n\t\t'libnss3 (>= 3.26)',\n\t\t'libpango-1.0-0 (>= 1.14.0)',\n\t\t'libstdc++6 (>= 4.1.1)',\n\t\t'libstdc++6 (>= 5)',\n\t\t'libstdc++6 (>= 5.2)',\n\t\t'libstdc++6 (>= 6)',\n\t\t'libudev1 (>= 183)',\n\t\t'libx11-6',\n\t\t'libx11-6 (>= 2:1.4.99.1)',\n\t\t'libxcb1 (>= 1.9.2)',\n\t\t'libxcomposite1 (>= 1:0.4.4-1)',\n\t\t'libxdamage1 (>= 1:1.1)',\n\t\t'libxext6',\n\t\t'libxfixes3',\n\t\t'libxkbcommon0 (>= 0.5.0)',\n\t\t'libxkbfile1 (>= 1:1.1.0)',\n\t\t'libxrandr2',\n\t\t'xdg-utils (>= 1.0.2)'\n\t],\n\t'arm64': [\n\t\t'ca-certificates',\n\t\t'libasound2 (>= 1.0.17)',\n\t\t'libatk-bridge2.0-0 (>= 2.5.3)',\n\t\t'libatk1.0-0 (>= 2.11.90)',\n\t\t'libatspi2.0-0 (>= 2.9.90)',\n\t\t'libc6 (>= 2.17)',\n\t\t'libc6 (>= 2.25)',\n\t\t'libc6 (>= 2.28)',\n\t\t'libcairo2 (>= 1.6.0)',\n\t\t'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',\n\t\t'libdbus-1-3 (>= 1.9.14)',\n\t\t'libexpat1 (>= 2.1~beta3)',\n\t\t'libgbm1 (>= 17.1.0~rc2)',\n\t\t'libglib2.0-0 (>= 2.37.3)',\n\t\t'libgtk-3-0 (>= 3.9.10)',\n\t\t'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',\n\t\t'libnspr4 (>= 2:4.9-2~)',\n\t\t'libnss3 (>= 2:3.30)',\n\t\t'libnss3 (>= 3.26)',\n\t\t'libpango-1.0-0 (>= 1.14.0)',\n\t\t'libstdc++6 (>= 4.1.1)',\n\t\t'libstdc++6 (>= 5)',\n\t\t'libstdc++6 (>= 5.2)',\n\t\t'libstdc++6 (>= 6)',\n\t\t'libudev1 (>= 183)',\n\t\t'libx11-6',\n\t\t'libx11-6 (>= 2:1.4.99.1)',\n\t\t'libxcb1 (>= 1.9.2)',\n\t\t'libxcomposite1 (>= 1:0.4.4-1)',\n\t\t'libxdamage1 (>= 1:1.1)',\n\t\t'libxext6',\n\t\t'libxfixes3',\n\t\t'libxkbcommon0 (>= 0.5.0)',\n\t\t'libxkbfile1 (>= 1:1.1.0)',\n\t\t'libxrandr2',\n\t\t'xdg-utils (>= 1.0.2)'\n\t]\n};\n"
  },
  {
    "path": "build/linux/debian/install-sysroot.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getVSCodeSysroot = getVSCodeSysroot;\nexports.getChromiumSysroot = getChromiumSysroot;\nconst child_process_1 = require(\"child_process\");\nconst os_1 = require(\"os\");\nconst fs_1 = __importDefault(require(\"fs\"));\nconst https_1 = __importDefault(require(\"https\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst crypto_1 = require(\"crypto\");\nconst ansi_colors_1 = __importDefault(require(\"ansi-colors\"));\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:build/linux/sysroot_scripts/install-sysroot.py.\nconst URL_PREFIX = 'https://msftelectronbuild.z5.web.core.windows.net';\nconst URL_PATH = 'sysroots/toolchain';\nconst REPO_ROOT = path_1.default.dirname(path_1.default.dirname(path_1.default.dirname(__dirname)));\nconst ghApiHeaders = {\n    Accept: 'application/vnd.github.v3+json',\n    'User-Agent': 'VSCode Build',\n};\nif (process.env.GITHUB_TOKEN) {\n    ghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64');\n}\nconst ghDownloadHeaders = {\n    ...ghApiHeaders,\n    Accept: 'application/octet-stream',\n};\nfunction getElectronVersion() {\n    const npmrc = fs_1.default.readFileSync(path_1.default.join(REPO_ROOT, '.npmrc'), 'utf8');\n    const electronVersion = /^target=\"(.*)\"$/m.exec(npmrc)[1];\n    const msBuildId = /^ms_build_id=\"(.*)\"$/m.exec(npmrc)[1];\n    return { electronVersion, msBuildId };\n}\nfunction getSha(filename) {\n    const hash = (0, crypto_1.createHash)('sha256');\n    // Read file 1 MB at a time\n    const fd = fs_1.default.openSync(filename, 'r');\n    const buffer = Buffer.alloc(1024 * 1024);\n    let position = 0;\n    let bytesRead = 0;\n    while ((bytesRead = fs_1.default.readSync(fd, buffer, 0, buffer.length, position)) === buffer.length) {\n        hash.update(buffer);\n        position += bytesRead;\n    }\n    hash.update(buffer.slice(0, bytesRead));\n    return hash.digest('hex');\n}\nfunction getVSCodeSysrootChecksum(expectedName) {\n    const checksums = fs_1.default.readFileSync(path_1.default.join(REPO_ROOT, 'build', 'checksums', 'vscode-sysroot.txt'), 'utf8');\n    for (const line of checksums.split('\\n')) {\n        const [checksum, name] = line.split(/\\s+/);\n        if (name === expectedName) {\n            return checksum;\n        }\n    }\n    return undefined;\n}\n/*\n * Do not use the fetch implementation from build/lib/fetch as it relies on vinyl streams\n * and vinyl-fs breaks the symlinks in the compiler toolchain sysroot. We use the native\n * tar implementation for that reason.\n */\nasync function fetchUrl(options, retries = 10, retryDelay = 1000) {\n    try {\n        const controller = new AbortController();\n        const timeout = setTimeout(() => controller.abort(), 30 * 1000);\n        const version = '20240129-253798';\n        try {\n            const response = await fetch(`https://api.github.com/repos/Microsoft/vscode-linux-build-agent/releases/tags/v${version}`, {\n                headers: ghApiHeaders,\n                signal: controller.signal /* Typings issue with lib.dom.d.ts */\n            });\n            if (response.ok && (response.status >= 200 && response.status < 300)) {\n                console.log(`Fetch completed: Status ${response.status}.`);\n                const contents = Buffer.from(await response.arrayBuffer());\n                const asset = JSON.parse(contents.toString()).assets.find((a) => a.name === options.assetName);\n                if (!asset) {\n                    throw new Error(`Could not find asset in release of Microsoft/vscode-linux-build-agent @ ${version}`);\n                }\n                console.log(`Found asset ${options.assetName} @ ${asset.url}.`);\n                const assetResponse = await fetch(asset.url, {\n                    headers: ghDownloadHeaders\n                });\n                if (assetResponse.ok && (assetResponse.status >= 200 && assetResponse.status < 300)) {\n                    const assetContents = Buffer.from(await assetResponse.arrayBuffer());\n                    console.log(`Fetched response body buffer: ${ansi_colors_1.default.magenta(`${assetContents.byteLength} bytes`)}`);\n                    if (options.checksumSha256) {\n                        const actualSHA256Checksum = (0, crypto_1.createHash)('sha256').update(assetContents).digest('hex');\n                        if (actualSHA256Checksum !== options.checksumSha256) {\n                            throw new Error(`Checksum mismatch for ${ansi_colors_1.default.cyan(asset.url)} (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`);\n                        }\n                    }\n                    console.log(`Verified SHA256 checksums match for ${ansi_colors_1.default.cyan(asset.url)}`);\n                    const tarCommand = `tar -xz -C ${options.dest}`;\n                    (0, child_process_1.execSync)(tarCommand, { input: assetContents });\n                    console.log(`Fetch complete!`);\n                    return;\n                }\n                throw new Error(`Request ${ansi_colors_1.default.magenta(asset.url)} failed with status code: ${assetResponse.status}`);\n            }\n            throw new Error(`Request ${ansi_colors_1.default.magenta('https://api.github.com')} failed with status code: ${response.status}`);\n        }\n        finally {\n            clearTimeout(timeout);\n        }\n    }\n    catch (e) {\n        if (retries > 0) {\n            console.log(`Fetching failed: ${e}`);\n            await new Promise(resolve => setTimeout(resolve, retryDelay));\n            return fetchUrl(options, retries - 1, retryDelay);\n        }\n        throw e;\n    }\n}\nasync function getVSCodeSysroot(arch) {\n    let expectedName;\n    let triple;\n    const prefix = process.env['VSCODE_SYSROOT_PREFIX'] ?? '-glibc-2.28';\n    switch (arch) {\n        case 'amd64':\n            expectedName = `x86_64-linux-gnu${prefix}.tar.gz`;\n            triple = 'x86_64-linux-gnu';\n            break;\n        case 'arm64':\n            expectedName = `aarch64-linux-gnu${prefix}.tar.gz`;\n            triple = 'aarch64-linux-gnu';\n            break;\n        case 'armhf':\n            expectedName = `arm-rpi-linux-gnueabihf${prefix}.tar.gz`;\n            triple = 'arm-rpi-linux-gnueabihf';\n            break;\n    }\n    console.log(`Fetching ${expectedName} for ${triple}`);\n    const checksumSha256 = getVSCodeSysrootChecksum(expectedName);\n    if (!checksumSha256) {\n        throw new Error(`Could not find checksum for ${expectedName}`);\n    }\n    const sysroot = process.env['VSCODE_SYSROOT_DIR'] ?? path_1.default.join((0, os_1.tmpdir)(), `vscode-${arch}-sysroot`);\n    const stamp = path_1.default.join(sysroot, '.stamp');\n    const result = `${sysroot}/${triple}/${triple}/sysroot`;\n    if (fs_1.default.existsSync(stamp) && fs_1.default.readFileSync(stamp).toString() === expectedName) {\n        return result;\n    }\n    console.log(`Installing ${arch} root image: ${sysroot}`);\n    fs_1.default.rmSync(sysroot, { recursive: true, force: true });\n    fs_1.default.mkdirSync(sysroot);\n    await fetchUrl({\n        checksumSha256,\n        assetName: expectedName,\n        dest: sysroot\n    });\n    fs_1.default.writeFileSync(stamp, expectedName);\n    return result;\n}\nasync function getChromiumSysroot(arch) {\n    const sysrootJSONUrl = `https://raw.githubusercontent.com/electron/electron/v${getElectronVersion().electronVersion}/script/sysroots.json`;\n    const sysrootDictLocation = `${(0, os_1.tmpdir)()}/sysroots.json`;\n    const result = (0, child_process_1.spawnSync)('curl', [sysrootJSONUrl, '-o', sysrootDictLocation]);\n    if (result.status !== 0) {\n        throw new Error('Cannot retrieve sysroots.json. Stderr:\\n' + result.stderr);\n    }\n    const sysrootInfo = require(sysrootDictLocation);\n    const sysrootArch = `bullseye_${arch}`;\n    const sysrootDict = sysrootInfo[sysrootArch];\n    const tarballFilename = sysrootDict['Tarball'];\n    const tarballSha = sysrootDict['Sha256Sum'];\n    const sysroot = path_1.default.join((0, os_1.tmpdir)(), sysrootDict['SysrootDir']);\n    const url = [URL_PREFIX, URL_PATH, tarballSha].join('/');\n    const stamp = path_1.default.join(sysroot, '.stamp');\n    if (fs_1.default.existsSync(stamp) && fs_1.default.readFileSync(stamp).toString() === url) {\n        return sysroot;\n    }\n    console.log(`Installing Debian ${arch} root image: ${sysroot}`);\n    fs_1.default.rmSync(sysroot, { recursive: true, force: true });\n    fs_1.default.mkdirSync(sysroot);\n    const tarball = path_1.default.join(sysroot, tarballFilename);\n    console.log(`Downloading ${url}`);\n    let downloadSuccess = false;\n    for (let i = 0; i < 3 && !downloadSuccess; i++) {\n        fs_1.default.writeFileSync(tarball, '');\n        await new Promise((c) => {\n            https_1.default.get(url, (res) => {\n                res.on('data', (chunk) => {\n                    fs_1.default.appendFileSync(tarball, chunk);\n                });\n                res.on('end', () => {\n                    downloadSuccess = true;\n                    c();\n                });\n            }).on('error', (err) => {\n                console.error('Encountered an error during the download attempt: ' + err.message);\n                c();\n            });\n        });\n    }\n    if (!downloadSuccess) {\n        fs_1.default.rmSync(tarball);\n        throw new Error('Failed to download ' + url);\n    }\n    const sha = getSha(tarball);\n    if (sha !== tarballSha) {\n        throw new Error(`Tarball sha1sum is wrong. Expected ${tarballSha}, actual ${sha}`);\n    }\n    const proc = (0, child_process_1.spawnSync)('tar', ['xf', tarball, '-C', sysroot]);\n    if (proc.status) {\n        throw new Error('Tarball extraction failed with code ' + proc.status);\n    }\n    fs_1.default.rmSync(tarball);\n    fs_1.default.writeFileSync(stamp, url);\n    return sysroot;\n}\n//# sourceMappingURL=install-sysroot.js.map"
  },
  {
    "path": "build/linux/debian/install-sysroot.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { spawnSync, execSync } from 'child_process';\nimport { tmpdir } from 'os';\nimport fs from 'fs';\nimport https from 'https';\nimport path from 'path';\nimport { createHash } from 'crypto';\nimport { DebianArchString } from './types';\nimport ansiColors from 'ansi-colors';\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:build/linux/sysroot_scripts/install-sysroot.py.\nconst URL_PREFIX = 'https://msftelectronbuild.z5.web.core.windows.net';\nconst URL_PATH = 'sysroots/toolchain';\nconst REPO_ROOT = path.dirname(path.dirname(path.dirname(__dirname)));\n\nconst ghApiHeaders: Record<string, string> = {\n\tAccept: 'application/vnd.github.v3+json',\n\t'User-Agent': 'VSCode Build',\n};\n\nif (process.env.GITHUB_TOKEN) {\n\tghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64');\n}\n\nconst ghDownloadHeaders = {\n\t...ghApiHeaders,\n\tAccept: 'application/octet-stream',\n};\n\ninterface IFetchOptions {\n\tassetName: string;\n\tchecksumSha256?: string;\n\tdest: string;\n}\n\nfunction getElectronVersion(): Record<string, string> {\n\tconst npmrc = fs.readFileSync(path.join(REPO_ROOT, '.npmrc'), 'utf8');\n\tconst electronVersion = /^target=\"(.*)\"$/m.exec(npmrc)![1];\n\tconst msBuildId = /^ms_build_id=\"(.*)\"$/m.exec(npmrc)![1];\n\treturn { electronVersion, msBuildId };\n}\n\nfunction getSha(filename: fs.PathLike): string {\n\tconst hash = createHash('sha256');\n\t// Read file 1 MB at a time\n\tconst fd = fs.openSync(filename, 'r');\n\tconst buffer = Buffer.alloc(1024 * 1024);\n\tlet position = 0;\n\tlet bytesRead = 0;\n\twhile ((bytesRead = fs.readSync(fd, buffer, 0, buffer.length, position)) === buffer.length) {\n\t\thash.update(buffer);\n\t\tposition += bytesRead;\n\t}\n\thash.update(buffer.slice(0, bytesRead));\n\treturn hash.digest('hex');\n}\n\nfunction getVSCodeSysrootChecksum(expectedName: string) {\n\tconst checksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'vscode-sysroot.txt'), 'utf8');\n\tfor (const line of checksums.split('\\n')) {\n\t\tconst [checksum, name] = line.split(/\\s+/);\n\t\tif (name === expectedName) {\n\t\t\treturn checksum;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/*\n * Do not use the fetch implementation from build/lib/fetch as it relies on vinyl streams\n * and vinyl-fs breaks the symlinks in the compiler toolchain sysroot. We use the native\n * tar implementation for that reason.\n */\nasync function fetchUrl(options: IFetchOptions, retries = 10, retryDelay = 1000): Promise<undefined> {\n\ttry {\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => controller.abort(), 30 * 1000);\n\t\tconst version = '20240129-253798';\n\t\ttry {\n\t\t\tconst response = await fetch(`https://api.github.com/repos/Microsoft/vscode-linux-build-agent/releases/tags/v${version}`, {\n\t\t\t\theaders: ghApiHeaders,\n\t\t\t\tsignal: controller.signal as any /* Typings issue with lib.dom.d.ts */\n\t\t\t});\n\t\t\tif (response.ok && (response.status >= 200 && response.status < 300)) {\n\t\t\t\tconsole.log(`Fetch completed: Status ${response.status}.`);\n\t\t\t\tconst contents = Buffer.from(await response.arrayBuffer());\n\t\t\t\tconst asset = JSON.parse(contents.toString()).assets.find((a: { name: string }) => a.name === options.assetName);\n\t\t\t\tif (!asset) {\n\t\t\t\t\tthrow new Error(`Could not find asset in release of Microsoft/vscode-linux-build-agent @ ${version}`);\n\t\t\t\t}\n\t\t\t\tconsole.log(`Found asset ${options.assetName} @ ${asset.url}.`);\n\t\t\t\tconst assetResponse = await fetch(asset.url, {\n\t\t\t\t\theaders: ghDownloadHeaders\n\t\t\t\t});\n\t\t\t\tif (assetResponse.ok && (assetResponse.status >= 200 && assetResponse.status < 300)) {\n\t\t\t\t\tconst assetContents = Buffer.from(await assetResponse.arrayBuffer());\n\t\t\t\t\tconsole.log(`Fetched response body buffer: ${ansiColors.magenta(`${(assetContents as Buffer).byteLength} bytes`)}`);\n\t\t\t\t\tif (options.checksumSha256) {\n\t\t\t\t\t\tconst actualSHA256Checksum = createHash('sha256').update(assetContents).digest('hex');\n\t\t\t\t\t\tif (actualSHA256Checksum !== options.checksumSha256) {\n\t\t\t\t\t\t\tthrow new Error(`Checksum mismatch for ${ansiColors.cyan(asset.url)} (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(`Verified SHA256 checksums match for ${ansiColors.cyan(asset.url)}`);\n\t\t\t\t\tconst tarCommand = `tar -xz -C ${options.dest}`;\n\t\t\t\t\texecSync(tarCommand, { input: assetContents });\n\t\t\t\t\tconsole.log(`Fetch complete!`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Request ${ansiColors.magenta(asset.url)} failed with status code: ${assetResponse.status}`);\n\t\t\t}\n\t\t\tthrow new Error(`Request ${ansiColors.magenta('https://api.github.com')} failed with status code: ${response.status}`);\n\t\t} finally {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t} catch (e) {\n\t\tif (retries > 0) {\n\t\t\tconsole.log(`Fetching failed: ${e}`);\n\t\t\tawait new Promise(resolve => setTimeout(resolve, retryDelay));\n\t\t\treturn fetchUrl(options, retries - 1, retryDelay);\n\t\t}\n\t\tthrow e;\n\t}\n}\n\ntype SysrootDictEntry = {\n\tSha256Sum: string;\n\tSysrootDir: string;\n\tTarball: string;\n};\n\nexport async function getVSCodeSysroot(arch: DebianArchString): Promise<string> {\n\tlet expectedName: string;\n\tlet triple: string;\n\tconst prefix = process.env['VSCODE_SYSROOT_PREFIX'] ?? '-glibc-2.28';\n\tswitch (arch) {\n\t\tcase 'amd64':\n\t\t\texpectedName = `x86_64-linux-gnu${prefix}.tar.gz`;\n\t\t\ttriple = 'x86_64-linux-gnu';\n\t\t\tbreak;\n\t\tcase 'arm64':\n\t\t\texpectedName = `aarch64-linux-gnu${prefix}.tar.gz`;\n\t\t\ttriple = 'aarch64-linux-gnu';\n\t\t\tbreak;\n\t\tcase 'armhf':\n\t\t\texpectedName = `arm-rpi-linux-gnueabihf${prefix}.tar.gz`;\n\t\t\ttriple = 'arm-rpi-linux-gnueabihf';\n\t\t\tbreak;\n\t}\n\tconsole.log(`Fetching ${expectedName} for ${triple}`);\n\tconst checksumSha256 = getVSCodeSysrootChecksum(expectedName);\n\tif (!checksumSha256) {\n\t\tthrow new Error(`Could not find checksum for ${expectedName}`);\n\t}\n\tconst sysroot = process.env['VSCODE_SYSROOT_DIR'] ?? path.join(tmpdir(), `vscode-${arch}-sysroot`);\n\tconst stamp = path.join(sysroot, '.stamp');\n\tconst result = `${sysroot}/${triple}/${triple}/sysroot`;\n\tif (fs.existsSync(stamp) && fs.readFileSync(stamp).toString() === expectedName) {\n\t\treturn result;\n\t}\n\tconsole.log(`Installing ${arch} root image: ${sysroot}`);\n\tfs.rmSync(sysroot, { recursive: true, force: true });\n\tfs.mkdirSync(sysroot);\n\tawait fetchUrl({\n\t\tchecksumSha256,\n\t\tassetName: expectedName,\n\t\tdest: sysroot\n\t});\n\tfs.writeFileSync(stamp, expectedName);\n\treturn result;\n}\n\nexport async function getChromiumSysroot(arch: DebianArchString): Promise<string> {\n\tconst sysrootJSONUrl = `https://raw.githubusercontent.com/electron/electron/v${getElectronVersion().electronVersion}/script/sysroots.json`;\n\tconst sysrootDictLocation = `${tmpdir()}/sysroots.json`;\n\tconst result = spawnSync('curl', [sysrootJSONUrl, '-o', sysrootDictLocation]);\n\tif (result.status !== 0) {\n\t\tthrow new Error('Cannot retrieve sysroots.json. Stderr:\\n' + result.stderr);\n\t}\n\tconst sysrootInfo = require(sysrootDictLocation);\n\tconst sysrootArch = `bullseye_${arch}`;\n\tconst sysrootDict: SysrootDictEntry = sysrootInfo[sysrootArch];\n\tconst tarballFilename = sysrootDict['Tarball'];\n\tconst tarballSha = sysrootDict['Sha256Sum'];\n\tconst sysroot = path.join(tmpdir(), sysrootDict['SysrootDir']);\n\tconst url = [URL_PREFIX, URL_PATH, tarballSha].join('/');\n\tconst stamp = path.join(sysroot, '.stamp');\n\tif (fs.existsSync(stamp) && fs.readFileSync(stamp).toString() === url) {\n\t\treturn sysroot;\n\t}\n\n\tconsole.log(`Installing Debian ${arch} root image: ${sysroot}`);\n\tfs.rmSync(sysroot, { recursive: true, force: true });\n\tfs.mkdirSync(sysroot);\n\tconst tarball = path.join(sysroot, tarballFilename);\n\tconsole.log(`Downloading ${url}`);\n\tlet downloadSuccess = false;\n\tfor (let i = 0; i < 3 && !downloadSuccess; i++) {\n\t\tfs.writeFileSync(tarball, '');\n\t\tawait new Promise<void>((c) => {\n\t\t\thttps.get(url, (res) => {\n\t\t\t\tres.on('data', (chunk) => {\n\t\t\t\t\tfs.appendFileSync(tarball, chunk);\n\t\t\t\t});\n\t\t\t\tres.on('end', () => {\n\t\t\t\t\tdownloadSuccess = true;\n\t\t\t\t\tc();\n\t\t\t\t});\n\t\t\t}).on('error', (err) => {\n\t\t\t\tconsole.error('Encountered an error during the download attempt: ' + err.message);\n\t\t\t\tc();\n\t\t\t});\n\t\t});\n\t}\n\tif (!downloadSuccess) {\n\t\tfs.rmSync(tarball);\n\t\tthrow new Error('Failed to download ' + url);\n\t}\n\tconst sha = getSha(tarball);\n\tif (sha !== tarballSha) {\n\t\tthrow new Error(`Tarball sha1sum is wrong. Expected ${tarballSha}, actual ${sha}`);\n\t}\n\n\tconst proc = spawnSync('tar', ['xf', tarball, '-C', sysroot]);\n\tif (proc.status) {\n\t\tthrow new Error('Tarball extraction failed with code ' + proc.status);\n\t}\n\tfs.rmSync(tarball);\n\tfs.writeFileSync(stamp, url);\n\treturn sysroot;\n}\n"
  },
  {
    "path": "build/linux/debian/types.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isDebianArchString = isDebianArchString;\nfunction isDebianArchString(s) {\n    return ['amd64', 'armhf', 'arm64'].includes(s);\n}\n//# sourceMappingURL=types.js.map"
  },
  {
    "path": "build/linux/debian/types.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport type DebianArchString = 'amd64' | 'armhf' | 'arm64';\n\nexport function isDebianArchString(s: string): s is DebianArchString {\n\treturn ['amd64', 'armhf', 'arm64'].includes(s);\n}\n"
  },
  {
    "path": "build/linux/dependencies-generator.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDependencies = getDependencies;\nconst child_process_1 = require(\"child_process\");\nconst path_1 = __importDefault(require(\"path\"));\nconst install_sysroot_1 = require(\"./debian/install-sysroot\");\nconst calculate_deps_1 = require(\"./debian/calculate-deps\");\nconst calculate_deps_2 = require(\"./rpm/calculate-deps\");\nconst dep_lists_1 = require(\"./debian/dep-lists\");\nconst dep_lists_2 = require(\"./rpm/dep-lists\");\nconst types_1 = require(\"./debian/types\");\nconst types_2 = require(\"./rpm/types\");\nconst product = require(\"../../product.json\");\n// A flag that can easily be toggled.\n// Make sure to compile the build directory after toggling the value.\n// If false, we warn about new dependencies if they show up\n// while running the prepare package tasks for a release.\n// If true, we fail the build if there are new dependencies found during that task.\n// The reference dependencies, which one has to update when the new dependencies\n// are valid, are in dep-lists.ts\nconst FAIL_BUILD_FOR_NEW_DEPENDENCIES = true;\n// Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/132.0.6834.210:chrome/installer/linux/BUILD.gn;l=64-80\n// and the Linux Archive build\n// Shared library dependencies that we already bundle.\nconst bundledDeps = [\n    'libEGL.so',\n    'libGLESv2.so',\n    'libvulkan.so.1',\n    'libvk_swiftshader.so',\n    'libffmpeg.so'\n];\nasync function getDependencies(packageType, buildDir, applicationName, arch) {\n    if (packageType === 'deb') {\n        if (!(0, types_1.isDebianArchString)(arch)) {\n            throw new Error('Invalid Debian arch string ' + arch);\n        }\n    }\n    if (packageType === 'rpm' && !(0, types_2.isRpmArchString)(arch)) {\n        throw new Error('Invalid RPM arch string ' + arch);\n    }\n    // Get the files for which we want to find dependencies.\n    const canAsar = false; // TODO@esm ASAR disabled in ESM\n    const nativeModulesPath = path_1.default.join(buildDir, 'resources', 'app', canAsar ? 'node_modules.asar.unpacked' : 'node_modules');\n    const findResult = (0, child_process_1.spawnSync)('find', [nativeModulesPath, '-name', '*.node']);\n    if (findResult.status) {\n        console.error('Error finding files:');\n        console.error(findResult.stderr.toString());\n        return [];\n    }\n    const appPath = path_1.default.join(buildDir, applicationName);\n    // Add the native modules\n    const files = findResult.stdout.toString().trimEnd().split('\\n');\n    // Add the tunnel binary.\n    files.push(path_1.default.join(buildDir, 'bin', product.tunnelApplicationName));\n    // Add the main executable.\n    files.push(appPath);\n    // Add chrome sandbox and crashpad handler.\n    files.push(path_1.default.join(buildDir, 'chrome-sandbox'));\n    files.push(path_1.default.join(buildDir, 'chrome_crashpad_handler'));\n    // Generate the dependencies.\n    let dependencies;\n    if (packageType === 'deb') {\n        const chromiumSysroot = await (0, install_sysroot_1.getChromiumSysroot)(arch);\n        const vscodeSysroot = await (0, install_sysroot_1.getVSCodeSysroot)(arch);\n        dependencies = (0, calculate_deps_1.generatePackageDeps)(files, arch, chromiumSysroot, vscodeSysroot);\n    }\n    else {\n        dependencies = (0, calculate_deps_2.generatePackageDeps)(files);\n    }\n    // Merge all the dependencies.\n    const mergedDependencies = mergePackageDeps(dependencies);\n    // Exclude bundled dependencies and sort\n    const sortedDependencies = Array.from(mergedDependencies).filter(dependency => {\n        return !bundledDeps.some(bundledDep => dependency.startsWith(bundledDep));\n    }).sort();\n    const referenceGeneratedDeps = packageType === 'deb' ?\n        dep_lists_1.referenceGeneratedDepsByArch[arch] :\n        dep_lists_2.referenceGeneratedDepsByArch[arch];\n    if (JSON.stringify(sortedDependencies) !== JSON.stringify(referenceGeneratedDeps)) {\n        const failMessage = 'The dependencies list has changed.'\n            + '\\nOld:\\n' + referenceGeneratedDeps.join('\\n')\n            + '\\nNew:\\n' + sortedDependencies.join('\\n');\n        if (FAIL_BUILD_FOR_NEW_DEPENDENCIES) {\n            throw new Error(failMessage);\n        }\n        else {\n            console.warn(failMessage);\n        }\n    }\n    return sortedDependencies;\n}\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/merge_package_deps.py.\nfunction mergePackageDeps(inputDeps) {\n    const requires = new Set();\n    for (const depSet of inputDeps) {\n        for (const dep of depSet) {\n            const trimmedDependency = dep.trim();\n            if (trimmedDependency.length && !trimmedDependency.startsWith('#')) {\n                requires.add(trimmedDependency);\n            }\n        }\n    }\n    return requires;\n}\n//# sourceMappingURL=dependencies-generator.js.map"
  },
  {
    "path": "build/linux/dependencies-generator.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { spawnSync } from 'child_process';\nimport path from 'path';\nimport { getChromiumSysroot, getVSCodeSysroot } from './debian/install-sysroot';\nimport { generatePackageDeps as generatePackageDepsDebian } from './debian/calculate-deps';\nimport { generatePackageDeps as generatePackageDepsRpm } from './rpm/calculate-deps';\nimport { referenceGeneratedDepsByArch as debianGeneratedDeps } from './debian/dep-lists';\nimport { referenceGeneratedDepsByArch as rpmGeneratedDeps } from './rpm/dep-lists';\nimport { DebianArchString, isDebianArchString } from './debian/types';\nimport { isRpmArchString, RpmArchString } from './rpm/types';\nimport product = require('../../product.json');\n\n// A flag that can easily be toggled.\n// Make sure to compile the build directory after toggling the value.\n// If false, we warn about new dependencies if they show up\n// while running the prepare package tasks for a release.\n// If true, we fail the build if there are new dependencies found during that task.\n// The reference dependencies, which one has to update when the new dependencies\n// are valid, are in dep-lists.ts\nconst FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = true;\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/132.0.6834.210:chrome/installer/linux/BUILD.gn;l=64-80\n// and the Linux Archive build\n// Shared library dependencies that we already bundle.\nconst bundledDeps = [\n\t'libEGL.so',\n\t'libGLESv2.so',\n\t'libvulkan.so.1',\n\t'libvk_swiftshader.so',\n\t'libffmpeg.so'\n];\n\nexport async function getDependencies(packageType: 'deb' | 'rpm', buildDir: string, applicationName: string, arch: string): Promise<string[]> {\n\tif (packageType === 'deb') {\n\t\tif (!isDebianArchString(arch)) {\n\t\t\tthrow new Error('Invalid Debian arch string ' + arch);\n\t\t}\n\t}\n\tif (packageType === 'rpm' && !isRpmArchString(arch)) {\n\t\tthrow new Error('Invalid RPM arch string ' + arch);\n\t}\n\n\t// Get the files for which we want to find dependencies.\n\tconst canAsar = false; // TODO@esm ASAR disabled in ESM\n\tconst nativeModulesPath = path.join(buildDir, 'resources', 'app', canAsar ? 'node_modules.asar.unpacked' : 'node_modules');\n\tconst findResult = spawnSync('find', [nativeModulesPath, '-name', '*.node']);\n\tif (findResult.status) {\n\t\tconsole.error('Error finding files:');\n\t\tconsole.error(findResult.stderr.toString());\n\t\treturn [];\n\t}\n\n\tconst appPath = path.join(buildDir, applicationName);\n\t// Add the native modules\n\tconst files = findResult.stdout.toString().trimEnd().split('\\n');\n\t// Add the tunnel binary.\n\tfiles.push(path.join(buildDir, 'bin', product.tunnelApplicationName));\n\t// Add the main executable.\n\tfiles.push(appPath);\n\t// Add chrome sandbox and crashpad handler.\n\tfiles.push(path.join(buildDir, 'chrome-sandbox'));\n\tfiles.push(path.join(buildDir, 'chrome_crashpad_handler'));\n\n\t// Generate the dependencies.\n\tlet dependencies: Set<string>[];\n\tif (packageType === 'deb') {\n\t\tconst chromiumSysroot = await getChromiumSysroot(arch as DebianArchString);\n\t\tconst vscodeSysroot = await getVSCodeSysroot(arch as DebianArchString);\n\t\tdependencies = generatePackageDepsDebian(files, arch as DebianArchString, chromiumSysroot, vscodeSysroot);\n\t} else {\n\t\tdependencies = generatePackageDepsRpm(files);\n\t}\n\n\t// Merge all the dependencies.\n\tconst mergedDependencies = mergePackageDeps(dependencies);\n\n\t// Exclude bundled dependencies and sort\n\tconst sortedDependencies: string[] = Array.from(mergedDependencies).filter(dependency => {\n\t\treturn !bundledDeps.some(bundledDep => dependency.startsWith(bundledDep));\n\t}).sort();\n\n\tconst referenceGeneratedDeps = packageType === 'deb' ?\n\t\tdebianGeneratedDeps[arch as DebianArchString] :\n\t\trpmGeneratedDeps[arch as RpmArchString];\n\tif (JSON.stringify(sortedDependencies) !== JSON.stringify(referenceGeneratedDeps)) {\n\t\tconst failMessage = 'The dependencies list has changed.'\n\t\t\t+ '\\nOld:\\n' + referenceGeneratedDeps.join('\\n')\n\t\t\t+ '\\nNew:\\n' + sortedDependencies.join('\\n');\n\t\tif (FAIL_BUILD_FOR_NEW_DEPENDENCIES) {\n\t\t\tthrow new Error(failMessage);\n\t\t} else {\n\t\t\tconsole.warn(failMessage);\n\t\t}\n\t}\n\n\treturn sortedDependencies;\n}\n\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/merge_package_deps.py.\nfunction mergePackageDeps(inputDeps: Set<string>[]): Set<string> {\n\tconst requires = new Set<string>();\n\tfor (const depSet of inputDeps) {\n\t\tfor (const dep of depSet) {\n\t\t\tconst trimmedDependency = dep.trim();\n\t\t\tif (trimmedDependency.length && !trimmedDependency.startsWith('#')) {\n\t\t\t\trequires.add(trimmedDependency);\n\t\t\t}\n\t\t}\n\t}\n\treturn requires;\n}\n"
  },
  {
    "path": "build/linux/libcxx-fetcher.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.downloadLibcxxHeaders = downloadLibcxxHeaders;\nexports.downloadLibcxxObjects = downloadLibcxxObjects;\n// Can be removed once https://github.com/electron/electron-rebuild/pull/703 is available.\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst debug_1 = __importDefault(require(\"debug\"));\nconst extract_zip_1 = __importDefault(require(\"extract-zip\"));\nconst get_1 = require(\"@electron/get\");\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst d = (0, debug_1.default)('libcxx-fetcher');\nasync function downloadLibcxxHeaders(outDir, electronVersion, lib_name) {\n    if (await fs_1.default.existsSync(path_1.default.resolve(outDir, 'include'))) {\n        return;\n    }\n    if (!await fs_1.default.existsSync(outDir)) {\n        await fs_1.default.mkdirSync(outDir, { recursive: true });\n    }\n    d(`downloading ${lib_name}_headers`);\n    const headers = await (0, get_1.downloadArtifact)({\n        version: electronVersion,\n        isGeneric: true,\n        artifactName: `${lib_name}_headers.zip`,\n    });\n    d(`unpacking ${lib_name}_headers from ${headers}`);\n    await (0, extract_zip_1.default)(headers, { dir: outDir });\n}\nasync function downloadLibcxxObjects(outDir, electronVersion, targetArch = 'x64') {\n    if (await fs_1.default.existsSync(path_1.default.resolve(outDir, 'libc++.a'))) {\n        return;\n    }\n    if (!await fs_1.default.existsSync(outDir)) {\n        await fs_1.default.mkdirSync(outDir, { recursive: true });\n    }\n    d(`downloading libcxx-objects-linux-${targetArch}`);\n    const objects = await (0, get_1.downloadArtifact)({\n        version: electronVersion,\n        platform: 'linux',\n        artifactName: 'libcxx-objects',\n        arch: targetArch,\n    });\n    d(`unpacking libcxx-objects from ${objects}`);\n    await (0, extract_zip_1.default)(objects, { dir: outDir });\n}\nasync function main() {\n    const libcxxObjectsDirPath = process.env['VSCODE_LIBCXX_OBJECTS_DIR'];\n    const libcxxHeadersDownloadDir = process.env['VSCODE_LIBCXX_HEADERS_DIR'];\n    const libcxxabiHeadersDownloadDir = process.env['VSCODE_LIBCXXABI_HEADERS_DIR'];\n    const arch = process.env['VSCODE_ARCH'];\n    const packageJSON = JSON.parse(fs_1.default.readFileSync(path_1.default.join(root, 'package.json'), 'utf8'));\n    const electronVersion = packageJSON.devDependencies.electron;\n    if (!libcxxObjectsDirPath || !libcxxHeadersDownloadDir || !libcxxabiHeadersDownloadDir) {\n        throw new Error('Required build env not set');\n    }\n    await downloadLibcxxObjects(libcxxObjectsDirPath, electronVersion, arch);\n    await downloadLibcxxHeaders(libcxxHeadersDownloadDir, electronVersion, 'libcxx');\n    await downloadLibcxxHeaders(libcxxabiHeadersDownloadDir, electronVersion, 'libcxxabi');\n}\nif (require.main === module) {\n    main().catch(err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=libcxx-fetcher.js.map"
  },
  {
    "path": "build/linux/libcxx-fetcher.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Can be removed once https://github.com/electron/electron-rebuild/pull/703 is available.\n\nimport fs from 'fs';\nimport path from 'path';\nimport debug from 'debug';\nimport extract from 'extract-zip';\nimport { downloadArtifact } from '@electron/get';\n\nconst root = path.dirname(path.dirname(__dirname));\n\nconst d = debug('libcxx-fetcher');\n\nexport async function downloadLibcxxHeaders(outDir: string, electronVersion: string, lib_name: string): Promise<void> {\n\tif (await fs.existsSync(path.resolve(outDir, 'include'))) {\n\t\treturn;\n\t}\n\tif (!await fs.existsSync(outDir)) {\n\t\tawait fs.mkdirSync(outDir, { recursive: true });\n\t}\n\n\td(`downloading ${lib_name}_headers`);\n\tconst headers = await downloadArtifact({\n\t\tversion: electronVersion,\n\t\tisGeneric: true,\n\t\tartifactName: `${lib_name}_headers.zip`,\n\t});\n\n\td(`unpacking ${lib_name}_headers from ${headers}`);\n\tawait extract(headers, { dir: outDir });\n}\n\nexport async function downloadLibcxxObjects(outDir: string, electronVersion: string, targetArch: string = 'x64'): Promise<void> {\n\tif (await fs.existsSync(path.resolve(outDir, 'libc++.a'))) {\n\t\treturn;\n\t}\n\tif (!await fs.existsSync(outDir)) {\n\t\tawait fs.mkdirSync(outDir, { recursive: true });\n\t}\n\n\td(`downloading libcxx-objects-linux-${targetArch}`);\n\tconst objects = await downloadArtifact({\n\t\tversion: electronVersion,\n\t\tplatform: 'linux',\n\t\tartifactName: 'libcxx-objects',\n\t\tarch: targetArch,\n\t});\n\n\td(`unpacking libcxx-objects from ${objects}`);\n\tawait extract(objects, { dir: outDir });\n}\n\nasync function main(): Promise<void> {\n\tconst libcxxObjectsDirPath = process.env['VSCODE_LIBCXX_OBJECTS_DIR'];\n\tconst libcxxHeadersDownloadDir = process.env['VSCODE_LIBCXX_HEADERS_DIR'];\n\tconst libcxxabiHeadersDownloadDir = process.env['VSCODE_LIBCXXABI_HEADERS_DIR'];\n\tconst arch = process.env['VSCODE_ARCH'];\n\tconst packageJSON = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));\n\tconst electronVersion = packageJSON.devDependencies.electron;\n\n\tif (!libcxxObjectsDirPath || !libcxxHeadersDownloadDir || !libcxxabiHeadersDownloadDir) {\n\t\tthrow new Error('Required build env not set');\n\t}\n\n\tawait downloadLibcxxObjects(libcxxObjectsDirPath, electronVersion, arch);\n\tawait downloadLibcxxHeaders(libcxxHeadersDownloadDir, electronVersion, 'libcxx');\n\tawait downloadLibcxxHeaders(libcxxabiHeadersDownloadDir, electronVersion, 'libcxxabi');\n}\n\nif (require.main === module) {\n\tmain().catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/linux/rpm/calculate-deps.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generatePackageDeps = generatePackageDeps;\nconst child_process_1 = require(\"child_process\");\nconst fs_1 = require(\"fs\");\nconst dep_lists_1 = require(\"./dep-lists\");\nfunction generatePackageDeps(files) {\n    const dependencies = files.map(file => calculatePackageDeps(file));\n    const additionalDepsSet = new Set(dep_lists_1.additionalDeps);\n    dependencies.push(additionalDepsSet);\n    return dependencies;\n}\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/calculate_package_deps.py.\nfunction calculatePackageDeps(binaryPath) {\n    try {\n        if (!((0, fs_1.statSync)(binaryPath).mode & fs_1.constants.S_IXUSR)) {\n            throw new Error(`Binary ${binaryPath} needs to have an executable bit set.`);\n        }\n    }\n    catch (e) {\n        // The package might not exist. Don't re-throw the error here.\n        console.error('Tried to stat ' + binaryPath + ' but failed.');\n    }\n    const findRequiresResult = (0, child_process_1.spawnSync)('/usr/lib/rpm/find-requires', { input: binaryPath + '\\n' });\n    if (findRequiresResult.status !== 0) {\n        throw new Error(`find-requires failed with exit code ${findRequiresResult.status}.\\nstderr: ${findRequiresResult.stderr}`);\n    }\n    const requires = new Set(findRequiresResult.stdout.toString('utf-8').trimEnd().split('\\n'));\n    return requires;\n}\n//# sourceMappingURL=calculate-deps.js.map"
  },
  {
    "path": "build/linux/rpm/calculate-deps.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { spawnSync } from 'child_process';\nimport { constants, statSync } from 'fs';\nimport { additionalDeps } from './dep-lists';\n\nexport function generatePackageDeps(files: string[]): Set<string>[] {\n\tconst dependencies: Set<string>[] = files.map(file => calculatePackageDeps(file));\n\tconst additionalDepsSet = new Set(additionalDeps);\n\tdependencies.push(additionalDepsSet);\n\treturn dependencies;\n}\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/calculate_package_deps.py.\nfunction calculatePackageDeps(binaryPath: string): Set<string> {\n\ttry {\n\t\tif (!(statSync(binaryPath).mode & constants.S_IXUSR)) {\n\t\t\tthrow new Error(`Binary ${binaryPath} needs to have an executable bit set.`);\n\t\t}\n\t} catch (e) {\n\t\t// The package might not exist. Don't re-throw the error here.\n\t\tconsole.error('Tried to stat ' + binaryPath + ' but failed.');\n\t}\n\n\tconst findRequiresResult = spawnSync('/usr/lib/rpm/find-requires', { input: binaryPath + '\\n' });\n\tif (findRequiresResult.status !== 0) {\n\t\tthrow new Error(`find-requires failed with exit code ${findRequiresResult.status}.\\nstderr: ${findRequiresResult.stderr}`);\n\t}\n\n\tconst requires = new Set(findRequiresResult.stdout.toString('utf-8').trimEnd().split('\\n'));\n\treturn requires;\n}\n"
  },
  {
    "path": "build/linux/rpm/dep-lists.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.referenceGeneratedDepsByArch = exports.additionalDeps = void 0;\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/additional_deps\n// Additional dependencies not in the rpm find-requires output.\nexports.additionalDeps = [\n    'ca-certificates', // Make sure users have SSL certificates.\n    'libgtk-3.so.0()(64bit)',\n    'libnss3.so(NSS_3.22)(64bit)',\n    'libssl3.so(NSS_3.28)(64bit)',\n    'rpmlib(FileDigests) <= 4.6.0-1',\n    'libvulkan.so.1()(64bit)',\n    'libcurl.so.4()(64bit)',\n    'xdg-utils' // OS integration\n];\nexports.referenceGeneratedDepsByArch = {\n    'x86_64': [\n        'ca-certificates',\n        'ld-linux-x86-64.so.2()(64bit)',\n        'ld-linux-x86-64.so.2(GLIBC_2.2.5)(64bit)',\n        'ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)',\n        'libX11.so.6()(64bit)',\n        'libXcomposite.so.1()(64bit)',\n        'libXdamage.so.1()(64bit)',\n        'libXext.so.6()(64bit)',\n        'libXfixes.so.3()(64bit)',\n        'libXrandr.so.2()(64bit)',\n        'libasound.so.2()(64bit)',\n        'libasound.so.2(ALSA_0.9)(64bit)',\n        'libasound.so.2(ALSA_0.9.0rc4)(64bit)',\n        'libatk-1.0.so.0()(64bit)',\n        'libatk-bridge-2.0.so.0()(64bit)',\n        'libatspi.so.0()(64bit)',\n        'libc.so.6()(64bit)',\n        'libc.so.6(GLIBC_2.10)(64bit)',\n        'libc.so.6(GLIBC_2.11)(64bit)',\n        'libc.so.6(GLIBC_2.12)(64bit)',\n        'libc.so.6(GLIBC_2.14)(64bit)',\n        'libc.so.6(GLIBC_2.15)(64bit)',\n        'libc.so.6(GLIBC_2.16)(64bit)',\n        'libc.so.6(GLIBC_2.17)(64bit)',\n        'libc.so.6(GLIBC_2.18)(64bit)',\n        'libc.so.6(GLIBC_2.2.5)(64bit)',\n        'libc.so.6(GLIBC_2.25)(64bit)',\n        'libc.so.6(GLIBC_2.27)(64bit)',\n        'libc.so.6(GLIBC_2.28)(64bit)',\n        'libc.so.6(GLIBC_2.3)(64bit)',\n        'libc.so.6(GLIBC_2.3.2)(64bit)',\n        'libc.so.6(GLIBC_2.3.3)(64bit)',\n        'libc.so.6(GLIBC_2.3.4)(64bit)',\n        'libc.so.6(GLIBC_2.4)(64bit)',\n        'libc.so.6(GLIBC_2.6)(64bit)',\n        'libc.so.6(GLIBC_2.7)(64bit)',\n        'libc.so.6(GLIBC_2.8)(64bit)',\n        'libc.so.6(GLIBC_2.9)(64bit)',\n        'libcairo.so.2()(64bit)',\n        'libcurl.so.4()(64bit)',\n        'libdbus-1.so.3()(64bit)',\n        'libdbus-1.so.3(LIBDBUS_1_3)(64bit)',\n        'libdl.so.2()(64bit)',\n        'libdl.so.2(GLIBC_2.2.5)(64bit)',\n        'libexpat.so.1()(64bit)',\n        'libgbm.so.1()(64bit)',\n        'libgcc_s.so.1()(64bit)',\n        'libgcc_s.so.1(GCC_3.0)(64bit)',\n        'libgcc_s.so.1(GCC_3.3)(64bit)',\n        'libgcc_s.so.1(GCC_4.2.0)(64bit)',\n        'libgio-2.0.so.0()(64bit)',\n        'libglib-2.0.so.0()(64bit)',\n        'libgobject-2.0.so.0()(64bit)',\n        'libgtk-3.so.0()(64bit)',\n        'libm.so.6()(64bit)',\n        'libm.so.6(GLIBC_2.2.5)(64bit)',\n        'libnspr4.so()(64bit)',\n        'libnss3.so()(64bit)',\n        'libnss3.so(NSS_3.11)(64bit)',\n        'libnss3.so(NSS_3.12)(64bit)',\n        'libnss3.so(NSS_3.12.1)(64bit)',\n        'libnss3.so(NSS_3.2)(64bit)',\n        'libnss3.so(NSS_3.22)(64bit)',\n        'libnss3.so(NSS_3.3)(64bit)',\n        'libnss3.so(NSS_3.30)(64bit)',\n        'libnss3.so(NSS_3.4)(64bit)',\n        'libnss3.so(NSS_3.5)(64bit)',\n        'libnss3.so(NSS_3.6)(64bit)',\n        'libnss3.so(NSS_3.9.2)(64bit)',\n        'libnssutil3.so()(64bit)',\n        'libnssutil3.so(NSSUTIL_3.12.3)(64bit)',\n        'libpango-1.0.so.0()(64bit)',\n        'libpthread.so.0()(64bit)',\n        'libpthread.so.0(GLIBC_2.12)(64bit)',\n        'libpthread.so.0(GLIBC_2.2.5)(64bit)',\n        'libpthread.so.0(GLIBC_2.3.2)(64bit)',\n        'libpthread.so.0(GLIBC_2.3.3)(64bit)',\n        'libpthread.so.0(GLIBC_2.3.4)(64bit)',\n        'librt.so.1()(64bit)',\n        'librt.so.1(GLIBC_2.2.5)(64bit)',\n        'libsmime3.so()(64bit)',\n        'libsmime3.so(NSS_3.10)(64bit)',\n        'libsmime3.so(NSS_3.2)(64bit)',\n        'libssl3.so(NSS_3.28)(64bit)',\n        'libudev.so.1()(64bit)',\n        'libudev.so.1(LIBUDEV_183)(64bit)',\n        'libutil.so.1()(64bit)',\n        'libutil.so.1(GLIBC_2.2.5)(64bit)',\n        'libxcb.so.1()(64bit)',\n        'libxkbcommon.so.0()(64bit)',\n        'libxkbcommon.so.0(V_0.5.0)(64bit)',\n        'libxkbfile.so.1()(64bit)',\n        'rpmlib(FileDigests) <= 4.6.0-1',\n        'rtld(GNU_HASH)',\n        'xdg-utils'\n    ],\n    'armv7hl': [\n        'ca-certificates',\n        'ld-linux-armhf.so.3',\n        'ld-linux-armhf.so.3(GLIBC_2.4)',\n        'libX11.so.6',\n        'libXcomposite.so.1',\n        'libXdamage.so.1',\n        'libXext.so.6',\n        'libXfixes.so.3',\n        'libXrandr.so.2',\n        'libasound.so.2',\n        'libasound.so.2(ALSA_0.9)',\n        'libasound.so.2(ALSA_0.9.0rc4)',\n        'libatk-1.0.so.0',\n        'libatk-bridge-2.0.so.0',\n        'libatspi.so.0',\n        'libc.so.6',\n        'libc.so.6(GLIBC_2.10)',\n        'libc.so.6(GLIBC_2.11)',\n        'libc.so.6(GLIBC_2.12)',\n        'libc.so.6(GLIBC_2.14)',\n        'libc.so.6(GLIBC_2.15)',\n        'libc.so.6(GLIBC_2.16)',\n        'libc.so.6(GLIBC_2.17)',\n        'libc.so.6(GLIBC_2.18)',\n        'libc.so.6(GLIBC_2.25)',\n        'libc.so.6(GLIBC_2.27)',\n        'libc.so.6(GLIBC_2.28)',\n        'libc.so.6(GLIBC_2.4)',\n        'libc.so.6(GLIBC_2.6)',\n        'libc.so.6(GLIBC_2.7)',\n        'libc.so.6(GLIBC_2.8)',\n        'libc.so.6(GLIBC_2.9)',\n        'libcairo.so.2',\n        'libcurl.so.4()(64bit)',\n        'libdbus-1.so.3',\n        'libdbus-1.so.3(LIBDBUS_1_3)',\n        'libdl.so.2',\n        'libdl.so.2(GLIBC_2.4)',\n        'libexpat.so.1',\n        'libgbm.so.1',\n        'libgcc_s.so.1',\n        'libgcc_s.so.1(GCC_3.0)',\n        'libgcc_s.so.1(GCC_3.5)',\n        'libgcc_s.so.1(GCC_4.3.0)',\n        'libgio-2.0.so.0',\n        'libglib-2.0.so.0',\n        'libgobject-2.0.so.0',\n        'libgtk-3.so.0',\n        'libgtk-3.so.0()(64bit)',\n        'libm.so.6',\n        'libm.so.6(GLIBC_2.4)',\n        'libnspr4.so',\n        'libnss3.so',\n        'libnss3.so(NSS_3.11)',\n        'libnss3.so(NSS_3.12)',\n        'libnss3.so(NSS_3.12.1)',\n        'libnss3.so(NSS_3.2)',\n        'libnss3.so(NSS_3.22)',\n        'libnss3.so(NSS_3.22)(64bit)',\n        'libnss3.so(NSS_3.3)',\n        'libnss3.so(NSS_3.30)',\n        'libnss3.so(NSS_3.4)',\n        'libnss3.so(NSS_3.5)',\n        'libnss3.so(NSS_3.6)',\n        'libnss3.so(NSS_3.9.2)',\n        'libnssutil3.so',\n        'libnssutil3.so(NSSUTIL_3.12.3)',\n        'libpango-1.0.so.0',\n        'libpthread.so.0',\n        'libpthread.so.0(GLIBC_2.12)',\n        'libpthread.so.0(GLIBC_2.4)',\n        'librt.so.1',\n        'librt.so.1(GLIBC_2.4)',\n        'libsmime3.so',\n        'libsmime3.so(NSS_3.10)',\n        'libsmime3.so(NSS_3.2)',\n        'libssl3.so(NSS_3.28)(64bit)',\n        'libstdc++.so.6',\n        'libstdc++.so.6(CXXABI_1.3)',\n        'libstdc++.so.6(CXXABI_1.3.5)',\n        'libstdc++.so.6(CXXABI_1.3.8)',\n        'libstdc++.so.6(CXXABI_1.3.9)',\n        'libstdc++.so.6(CXXABI_ARM_1.3.3)',\n        'libstdc++.so.6(GLIBCXX_3.4)',\n        'libstdc++.so.6(GLIBCXX_3.4.11)',\n        'libstdc++.so.6(GLIBCXX_3.4.14)',\n        'libstdc++.so.6(GLIBCXX_3.4.15)',\n        'libstdc++.so.6(GLIBCXX_3.4.18)',\n        'libstdc++.so.6(GLIBCXX_3.4.19)',\n        'libstdc++.so.6(GLIBCXX_3.4.20)',\n        'libstdc++.so.6(GLIBCXX_3.4.21)',\n        'libstdc++.so.6(GLIBCXX_3.4.22)',\n        'libstdc++.so.6(GLIBCXX_3.4.5)',\n        'libstdc++.so.6(GLIBCXX_3.4.9)',\n        'libudev.so.1',\n        'libudev.so.1(LIBUDEV_183)',\n        'libutil.so.1',\n        'libutil.so.1(GLIBC_2.4)',\n        'libxcb.so.1',\n        'libxkbcommon.so.0',\n        'libxkbcommon.so.0(V_0.5.0)',\n        'libxkbfile.so.1',\n        'rpmlib(FileDigests) <= 4.6.0-1',\n        'rtld(GNU_HASH)',\n        'xdg-utils'\n    ],\n    'aarch64': [\n        'ca-certificates',\n        'ld-linux-aarch64.so.1()(64bit)',\n        'ld-linux-aarch64.so.1(GLIBC_2.17)(64bit)',\n        'libX11.so.6()(64bit)',\n        'libXcomposite.so.1()(64bit)',\n        'libXdamage.so.1()(64bit)',\n        'libXext.so.6()(64bit)',\n        'libXfixes.so.3()(64bit)',\n        'libXrandr.so.2()(64bit)',\n        'libasound.so.2()(64bit)',\n        'libasound.so.2(ALSA_0.9)(64bit)',\n        'libasound.so.2(ALSA_0.9.0rc4)(64bit)',\n        'libatk-1.0.so.0()(64bit)',\n        'libatk-bridge-2.0.so.0()(64bit)',\n        'libatspi.so.0()(64bit)',\n        'libc.so.6()(64bit)',\n        'libc.so.6(GLIBC_2.17)(64bit)',\n        'libc.so.6(GLIBC_2.18)(64bit)',\n        'libc.so.6(GLIBC_2.25)(64bit)',\n        'libc.so.6(GLIBC_2.27)(64bit)',\n        'libc.so.6(GLIBC_2.28)(64bit)',\n        'libcairo.so.2()(64bit)',\n        'libcurl.so.4()(64bit)',\n        'libdbus-1.so.3()(64bit)',\n        'libdbus-1.so.3(LIBDBUS_1_3)(64bit)',\n        'libdl.so.2()(64bit)',\n        'libdl.so.2(GLIBC_2.17)(64bit)',\n        'libexpat.so.1()(64bit)',\n        'libgbm.so.1()(64bit)',\n        'libgcc_s.so.1()(64bit)',\n        'libgcc_s.so.1(GCC_3.0)(64bit)',\n        'libgcc_s.so.1(GCC_3.3)(64bit)',\n        'libgcc_s.so.1(GCC_4.2.0)(64bit)',\n        'libgcc_s.so.1(GCC_4.5.0)(64bit)',\n        'libgio-2.0.so.0()(64bit)',\n        'libglib-2.0.so.0()(64bit)',\n        'libgobject-2.0.so.0()(64bit)',\n        'libgtk-3.so.0()(64bit)',\n        'libm.so.6()(64bit)',\n        'libm.so.6(GLIBC_2.17)(64bit)',\n        'libnspr4.so()(64bit)',\n        'libnss3.so()(64bit)',\n        'libnss3.so(NSS_3.11)(64bit)',\n        'libnss3.so(NSS_3.12)(64bit)',\n        'libnss3.so(NSS_3.12.1)(64bit)',\n        'libnss3.so(NSS_3.2)(64bit)',\n        'libnss3.so(NSS_3.22)(64bit)',\n        'libnss3.so(NSS_3.3)(64bit)',\n        'libnss3.so(NSS_3.30)(64bit)',\n        'libnss3.so(NSS_3.4)(64bit)',\n        'libnss3.so(NSS_3.5)(64bit)',\n        'libnss3.so(NSS_3.6)(64bit)',\n        'libnss3.so(NSS_3.9.2)(64bit)',\n        'libnssutil3.so()(64bit)',\n        'libnssutil3.so(NSSUTIL_3.12.3)(64bit)',\n        'libpango-1.0.so.0()(64bit)',\n        'libpthread.so.0()(64bit)',\n        'libpthread.so.0(GLIBC_2.17)(64bit)',\n        'libsmime3.so()(64bit)',\n        'libsmime3.so(NSS_3.10)(64bit)',\n        'libsmime3.so(NSS_3.2)(64bit)',\n        'libssl3.so(NSS_3.28)(64bit)',\n        'libstdc++.so.6()(64bit)',\n        'libstdc++.so.6(CXXABI_1.3)(64bit)',\n        'libstdc++.so.6(CXXABI_1.3.5)(64bit)',\n        'libstdc++.so.6(CXXABI_1.3.8)(64bit)',\n        'libstdc++.so.6(CXXABI_1.3.9)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.11)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.14)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.15)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.18)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.19)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.20)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.21)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.22)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.5)(64bit)',\n        'libstdc++.so.6(GLIBCXX_3.4.9)(64bit)',\n        'libudev.so.1()(64bit)',\n        'libudev.so.1(LIBUDEV_183)(64bit)',\n        'libutil.so.1()(64bit)',\n        'libutil.so.1(GLIBC_2.17)(64bit)',\n        'libxcb.so.1()(64bit)',\n        'libxkbcommon.so.0()(64bit)',\n        'libxkbcommon.so.0(V_0.5.0)(64bit)',\n        'libxkbfile.so.1()(64bit)',\n        'rpmlib(FileDigests) <= 4.6.0-1',\n        'rtld(GNU_HASH)',\n        'xdg-utils'\n    ]\n};\n//# sourceMappingURL=dep-lists.js.map"
  },
  {
    "path": "build/linux/rpm/dep-lists.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/additional_deps\n// Additional dependencies not in the rpm find-requires output.\nexport const additionalDeps = [\n\t'ca-certificates', // Make sure users have SSL certificates.\n\t'libgtk-3.so.0()(64bit)',\n\t'libnss3.so(NSS_3.22)(64bit)',\n\t'libssl3.so(NSS_3.28)(64bit)',\n\t'rpmlib(FileDigests) <= 4.6.0-1',\n\t'libvulkan.so.1()(64bit)',\n\t'libcurl.so.4()(64bit)',\n\t'xdg-utils' // OS integration\n];\n\nexport const referenceGeneratedDepsByArch = {\n\t'x86_64': [\n\t\t'ca-certificates',\n\t\t'ld-linux-x86-64.so.2()(64bit)',\n\t\t'ld-linux-x86-64.so.2(GLIBC_2.2.5)(64bit)',\n\t\t'ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)',\n\t\t'libX11.so.6()(64bit)',\n\t\t'libXcomposite.so.1()(64bit)',\n\t\t'libXdamage.so.1()(64bit)',\n\t\t'libXext.so.6()(64bit)',\n\t\t'libXfixes.so.3()(64bit)',\n\t\t'libXrandr.so.2()(64bit)',\n\t\t'libasound.so.2()(64bit)',\n\t\t'libasound.so.2(ALSA_0.9)(64bit)',\n\t\t'libasound.so.2(ALSA_0.9.0rc4)(64bit)',\n\t\t'libatk-1.0.so.0()(64bit)',\n\t\t'libatk-bridge-2.0.so.0()(64bit)',\n\t\t'libatspi.so.0()(64bit)',\n\t\t'libc.so.6()(64bit)',\n\t\t'libc.so.6(GLIBC_2.10)(64bit)',\n\t\t'libc.so.6(GLIBC_2.11)(64bit)',\n\t\t'libc.so.6(GLIBC_2.12)(64bit)',\n\t\t'libc.so.6(GLIBC_2.14)(64bit)',\n\t\t'libc.so.6(GLIBC_2.15)(64bit)',\n\t\t'libc.so.6(GLIBC_2.16)(64bit)',\n\t\t'libc.so.6(GLIBC_2.17)(64bit)',\n\t\t'libc.so.6(GLIBC_2.18)(64bit)',\n\t\t'libc.so.6(GLIBC_2.2.5)(64bit)',\n\t\t'libc.so.6(GLIBC_2.25)(64bit)',\n\t\t'libc.so.6(GLIBC_2.27)(64bit)',\n\t\t'libc.so.6(GLIBC_2.28)(64bit)',\n\t\t'libc.so.6(GLIBC_2.3)(64bit)',\n\t\t'libc.so.6(GLIBC_2.3.2)(64bit)',\n\t\t'libc.so.6(GLIBC_2.3.3)(64bit)',\n\t\t'libc.so.6(GLIBC_2.3.4)(64bit)',\n\t\t'libc.so.6(GLIBC_2.4)(64bit)',\n\t\t'libc.so.6(GLIBC_2.6)(64bit)',\n\t\t'libc.so.6(GLIBC_2.7)(64bit)',\n\t\t'libc.so.6(GLIBC_2.8)(64bit)',\n\t\t'libc.so.6(GLIBC_2.9)(64bit)',\n\t\t'libcairo.so.2()(64bit)',\n\t\t'libcurl.so.4()(64bit)',\n\t\t'libdbus-1.so.3()(64bit)',\n\t\t'libdbus-1.so.3(LIBDBUS_1_3)(64bit)',\n\t\t'libdl.so.2()(64bit)',\n\t\t'libdl.so.2(GLIBC_2.2.5)(64bit)',\n\t\t'libexpat.so.1()(64bit)',\n\t\t'libgbm.so.1()(64bit)',\n\t\t'libgcc_s.so.1()(64bit)',\n\t\t'libgcc_s.so.1(GCC_3.0)(64bit)',\n\t\t'libgcc_s.so.1(GCC_3.3)(64bit)',\n\t\t'libgcc_s.so.1(GCC_4.2.0)(64bit)',\n\t\t'libgio-2.0.so.0()(64bit)',\n\t\t'libglib-2.0.so.0()(64bit)',\n\t\t'libgobject-2.0.so.0()(64bit)',\n\t\t'libgtk-3.so.0()(64bit)',\n\t\t'libm.so.6()(64bit)',\n\t\t'libm.so.6(GLIBC_2.2.5)(64bit)',\n\t\t'libnspr4.so()(64bit)',\n\t\t'libnss3.so()(64bit)',\n\t\t'libnss3.so(NSS_3.11)(64bit)',\n\t\t'libnss3.so(NSS_3.12)(64bit)',\n\t\t'libnss3.so(NSS_3.12.1)(64bit)',\n\t\t'libnss3.so(NSS_3.2)(64bit)',\n\t\t'libnss3.so(NSS_3.22)(64bit)',\n\t\t'libnss3.so(NSS_3.3)(64bit)',\n\t\t'libnss3.so(NSS_3.30)(64bit)',\n\t\t'libnss3.so(NSS_3.4)(64bit)',\n\t\t'libnss3.so(NSS_3.5)(64bit)',\n\t\t'libnss3.so(NSS_3.6)(64bit)',\n\t\t'libnss3.so(NSS_3.9.2)(64bit)',\n\t\t'libnssutil3.so()(64bit)',\n\t\t'libnssutil3.so(NSSUTIL_3.12.3)(64bit)',\n\t\t'libpango-1.0.so.0()(64bit)',\n\t\t'libpthread.so.0()(64bit)',\n\t\t'libpthread.so.0(GLIBC_2.12)(64bit)',\n\t\t'libpthread.so.0(GLIBC_2.2.5)(64bit)',\n\t\t'libpthread.so.0(GLIBC_2.3.2)(64bit)',\n\t\t'libpthread.so.0(GLIBC_2.3.3)(64bit)',\n\t\t'libpthread.so.0(GLIBC_2.3.4)(64bit)',\n\t\t'librt.so.1()(64bit)',\n\t\t'librt.so.1(GLIBC_2.2.5)(64bit)',\n\t\t'libsmime3.so()(64bit)',\n\t\t'libsmime3.so(NSS_3.10)(64bit)',\n\t\t'libsmime3.so(NSS_3.2)(64bit)',\n\t\t'libssl3.so(NSS_3.28)(64bit)',\n\t\t'libudev.so.1()(64bit)',\n\t\t'libudev.so.1(LIBUDEV_183)(64bit)',\n\t\t'libutil.so.1()(64bit)',\n\t\t'libutil.so.1(GLIBC_2.2.5)(64bit)',\n\t\t'libxcb.so.1()(64bit)',\n\t\t'libxkbcommon.so.0()(64bit)',\n\t\t'libxkbcommon.so.0(V_0.5.0)(64bit)',\n\t\t'libxkbfile.so.1()(64bit)',\n\t\t'rpmlib(FileDigests) <= 4.6.0-1',\n\t\t'rtld(GNU_HASH)',\n\t\t'xdg-utils'\n\t],\n\t'armv7hl': [\n\t\t'ca-certificates',\n\t\t'ld-linux-armhf.so.3',\n\t\t'ld-linux-armhf.so.3(GLIBC_2.4)',\n\t\t'libX11.so.6',\n\t\t'libXcomposite.so.1',\n\t\t'libXdamage.so.1',\n\t\t'libXext.so.6',\n\t\t'libXfixes.so.3',\n\t\t'libXrandr.so.2',\n\t\t'libasound.so.2',\n\t\t'libasound.so.2(ALSA_0.9)',\n\t\t'libasound.so.2(ALSA_0.9.0rc4)',\n\t\t'libatk-1.0.so.0',\n\t\t'libatk-bridge-2.0.so.0',\n\t\t'libatspi.so.0',\n\t\t'libc.so.6',\n\t\t'libc.so.6(GLIBC_2.10)',\n\t\t'libc.so.6(GLIBC_2.11)',\n\t\t'libc.so.6(GLIBC_2.12)',\n\t\t'libc.so.6(GLIBC_2.14)',\n\t\t'libc.so.6(GLIBC_2.15)',\n\t\t'libc.so.6(GLIBC_2.16)',\n\t\t'libc.so.6(GLIBC_2.17)',\n\t\t'libc.so.6(GLIBC_2.18)',\n\t\t'libc.so.6(GLIBC_2.25)',\n\t\t'libc.so.6(GLIBC_2.27)',\n\t\t'libc.so.6(GLIBC_2.28)',\n\t\t'libc.so.6(GLIBC_2.4)',\n\t\t'libc.so.6(GLIBC_2.6)',\n\t\t'libc.so.6(GLIBC_2.7)',\n\t\t'libc.so.6(GLIBC_2.8)',\n\t\t'libc.so.6(GLIBC_2.9)',\n\t\t'libcairo.so.2',\n\t\t'libcurl.so.4()(64bit)',\n\t\t'libdbus-1.so.3',\n\t\t'libdbus-1.so.3(LIBDBUS_1_3)',\n\t\t'libdl.so.2',\n\t\t'libdl.so.2(GLIBC_2.4)',\n\t\t'libexpat.so.1',\n\t\t'libgbm.so.1',\n\t\t'libgcc_s.so.1',\n\t\t'libgcc_s.so.1(GCC_3.0)',\n\t\t'libgcc_s.so.1(GCC_3.5)',\n\t\t'libgcc_s.so.1(GCC_4.3.0)',\n\t\t'libgio-2.0.so.0',\n\t\t'libglib-2.0.so.0',\n\t\t'libgobject-2.0.so.0',\n\t\t'libgtk-3.so.0',\n\t\t'libgtk-3.so.0()(64bit)',\n\t\t'libm.so.6',\n\t\t'libm.so.6(GLIBC_2.4)',\n\t\t'libnspr4.so',\n\t\t'libnss3.so',\n\t\t'libnss3.so(NSS_3.11)',\n\t\t'libnss3.so(NSS_3.12)',\n\t\t'libnss3.so(NSS_3.12.1)',\n\t\t'libnss3.so(NSS_3.2)',\n\t\t'libnss3.so(NSS_3.22)',\n\t\t'libnss3.so(NSS_3.22)(64bit)',\n\t\t'libnss3.so(NSS_3.3)',\n\t\t'libnss3.so(NSS_3.30)',\n\t\t'libnss3.so(NSS_3.4)',\n\t\t'libnss3.so(NSS_3.5)',\n\t\t'libnss3.so(NSS_3.6)',\n\t\t'libnss3.so(NSS_3.9.2)',\n\t\t'libnssutil3.so',\n\t\t'libnssutil3.so(NSSUTIL_3.12.3)',\n\t\t'libpango-1.0.so.0',\n\t\t'libpthread.so.0',\n\t\t'libpthread.so.0(GLIBC_2.12)',\n\t\t'libpthread.so.0(GLIBC_2.4)',\n\t\t'librt.so.1',\n\t\t'librt.so.1(GLIBC_2.4)',\n\t\t'libsmime3.so',\n\t\t'libsmime3.so(NSS_3.10)',\n\t\t'libsmime3.so(NSS_3.2)',\n\t\t'libssl3.so(NSS_3.28)(64bit)',\n\t\t'libstdc++.so.6',\n\t\t'libstdc++.so.6(CXXABI_1.3)',\n\t\t'libstdc++.so.6(CXXABI_1.3.5)',\n\t\t'libstdc++.so.6(CXXABI_1.3.8)',\n\t\t'libstdc++.so.6(CXXABI_1.3.9)',\n\t\t'libstdc++.so.6(CXXABI_ARM_1.3.3)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.11)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.14)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.15)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.18)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.19)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.20)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.21)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.22)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.5)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.9)',\n\t\t'libudev.so.1',\n\t\t'libudev.so.1(LIBUDEV_183)',\n\t\t'libutil.so.1',\n\t\t'libutil.so.1(GLIBC_2.4)',\n\t\t'libxcb.so.1',\n\t\t'libxkbcommon.so.0',\n\t\t'libxkbcommon.so.0(V_0.5.0)',\n\t\t'libxkbfile.so.1',\n\t\t'rpmlib(FileDigests) <= 4.6.0-1',\n\t\t'rtld(GNU_HASH)',\n\t\t'xdg-utils'\n\t],\n\t'aarch64': [\n\t\t'ca-certificates',\n\t\t'ld-linux-aarch64.so.1()(64bit)',\n\t\t'ld-linux-aarch64.so.1(GLIBC_2.17)(64bit)',\n\t\t'libX11.so.6()(64bit)',\n\t\t'libXcomposite.so.1()(64bit)',\n\t\t'libXdamage.so.1()(64bit)',\n\t\t'libXext.so.6()(64bit)',\n\t\t'libXfixes.so.3()(64bit)',\n\t\t'libXrandr.so.2()(64bit)',\n\t\t'libasound.so.2()(64bit)',\n\t\t'libasound.so.2(ALSA_0.9)(64bit)',\n\t\t'libasound.so.2(ALSA_0.9.0rc4)(64bit)',\n\t\t'libatk-1.0.so.0()(64bit)',\n\t\t'libatk-bridge-2.0.so.0()(64bit)',\n\t\t'libatspi.so.0()(64bit)',\n\t\t'libc.so.6()(64bit)',\n\t\t'libc.so.6(GLIBC_2.17)(64bit)',\n\t\t'libc.so.6(GLIBC_2.18)(64bit)',\n\t\t'libc.so.6(GLIBC_2.25)(64bit)',\n\t\t'libc.so.6(GLIBC_2.27)(64bit)',\n\t\t'libc.so.6(GLIBC_2.28)(64bit)',\n\t\t'libcairo.so.2()(64bit)',\n\t\t'libcurl.so.4()(64bit)',\n\t\t'libdbus-1.so.3()(64bit)',\n\t\t'libdbus-1.so.3(LIBDBUS_1_3)(64bit)',\n\t\t'libdl.so.2()(64bit)',\n\t\t'libdl.so.2(GLIBC_2.17)(64bit)',\n\t\t'libexpat.so.1()(64bit)',\n\t\t'libgbm.so.1()(64bit)',\n\t\t'libgcc_s.so.1()(64bit)',\n\t\t'libgcc_s.so.1(GCC_3.0)(64bit)',\n\t\t'libgcc_s.so.1(GCC_3.3)(64bit)',\n\t\t'libgcc_s.so.1(GCC_4.2.0)(64bit)',\n\t\t'libgcc_s.so.1(GCC_4.5.0)(64bit)',\n\t\t'libgio-2.0.so.0()(64bit)',\n\t\t'libglib-2.0.so.0()(64bit)',\n\t\t'libgobject-2.0.so.0()(64bit)',\n\t\t'libgtk-3.so.0()(64bit)',\n\t\t'libm.so.6()(64bit)',\n\t\t'libm.so.6(GLIBC_2.17)(64bit)',\n\t\t'libnspr4.so()(64bit)',\n\t\t'libnss3.so()(64bit)',\n\t\t'libnss3.so(NSS_3.11)(64bit)',\n\t\t'libnss3.so(NSS_3.12)(64bit)',\n\t\t'libnss3.so(NSS_3.12.1)(64bit)',\n\t\t'libnss3.so(NSS_3.2)(64bit)',\n\t\t'libnss3.so(NSS_3.22)(64bit)',\n\t\t'libnss3.so(NSS_3.3)(64bit)',\n\t\t'libnss3.so(NSS_3.30)(64bit)',\n\t\t'libnss3.so(NSS_3.4)(64bit)',\n\t\t'libnss3.so(NSS_3.5)(64bit)',\n\t\t'libnss3.so(NSS_3.6)(64bit)',\n\t\t'libnss3.so(NSS_3.9.2)(64bit)',\n\t\t'libnssutil3.so()(64bit)',\n\t\t'libnssutil3.so(NSSUTIL_3.12.3)(64bit)',\n\t\t'libpango-1.0.so.0()(64bit)',\n\t\t'libpthread.so.0()(64bit)',\n\t\t'libpthread.so.0(GLIBC_2.17)(64bit)',\n\t\t'libsmime3.so()(64bit)',\n\t\t'libsmime3.so(NSS_3.10)(64bit)',\n\t\t'libsmime3.so(NSS_3.2)(64bit)',\n\t\t'libssl3.so(NSS_3.28)(64bit)',\n\t\t'libstdc++.so.6()(64bit)',\n\t\t'libstdc++.so.6(CXXABI_1.3)(64bit)',\n\t\t'libstdc++.so.6(CXXABI_1.3.5)(64bit)',\n\t\t'libstdc++.so.6(CXXABI_1.3.8)(64bit)',\n\t\t'libstdc++.so.6(CXXABI_1.3.9)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.11)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.14)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.15)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.18)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.19)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.20)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.21)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.22)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.5)(64bit)',\n\t\t'libstdc++.so.6(GLIBCXX_3.4.9)(64bit)',\n\t\t'libudev.so.1()(64bit)',\n\t\t'libudev.so.1(LIBUDEV_183)(64bit)',\n\t\t'libutil.so.1()(64bit)',\n\t\t'libutil.so.1(GLIBC_2.17)(64bit)',\n\t\t'libxcb.so.1()(64bit)',\n\t\t'libxkbcommon.so.0()(64bit)',\n\t\t'libxkbcommon.so.0(V_0.5.0)(64bit)',\n\t\t'libxkbfile.so.1()(64bit)',\n\t\t'rpmlib(FileDigests) <= 4.6.0-1',\n\t\t'rtld(GNU_HASH)',\n\t\t'xdg-utils'\n\t]\n};\n"
  },
  {
    "path": "build/linux/rpm/types.js",
    "content": "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isRpmArchString = isRpmArchString;\nfunction isRpmArchString(s) {\n    return ['x86_64', 'armv7hl', 'aarch64'].includes(s);\n}\n//# sourceMappingURL=types.js.map"
  },
  {
    "path": "build/linux/rpm/types.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport type RpmArchString = 'x86_64' | 'armv7hl' | 'aarch64';\n\nexport function isRpmArchString(s: string): s is RpmArchString {\n\treturn ['x86_64', 'armv7hl', 'aarch64'].includes(s);\n}\n"
  },
  {
    "path": "build/loader.min",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\"use strict\";const _amdLoaderGlobal=this,_commonjsGlobal=typeof global==\"object\"?global:{};var AMDLoader;(function(d){d.global=_amdLoaderGlobal;class _{get isWindows(){return this._detect(),this._isWindows}get isNode(){return this._detect(),this._isNode}get isElectronRenderer(){return this._detect(),this._isElectronRenderer}get isWebWorker(){return this._detect(),this._isWebWorker}get isElectronNodeIntegrationWebWorker(){return this._detect(),this._isElectronNodeIntegrationWebWorker}constructor(){this._detected=!1,this._isWindows=!1,this._isNode=!1,this._isElectronRenderer=!1,this._isWebWorker=!1,this._isElectronNodeIntegrationWebWorker=!1}_detect(){this._detected||(this._detected=!0,this._isWindows=_._isWindows(),this._isNode=typeof module<\"u\"&&!!module.exports,this._isElectronRenderer=typeof process<\"u\"&&typeof process.versions<\"u\"&&typeof process.versions.electron<\"u\"&&process.type===\"renderer\",this._isWebWorker=typeof d.global.importScripts==\"function\",this._isElectronNodeIntegrationWebWorker=this._isWebWorker&&typeof process<\"u\"&&typeof process.versions<\"u\"&&typeof process.versions.electron<\"u\"&&process.type===\"worker\")}static _isWindows(){return typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.indexOf(\"Windows\")>=0?!0:typeof process<\"u\"?process.platform===\"win32\":!1}}d.Environment=_})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{constructor(n,c,a){this.type=n,this.detail=c,this.timestamp=a}}d.LoaderEvent=_;class v{constructor(n){this._events=[new _(1,\"\",n)]}record(n,c){this._events.push(new _(n,c,d.Utilities.getHighPerformanceTimestamp()))}getEvents(){return this._events}}d.LoaderEventRecorder=v;class f{record(n,c){}getEvents(){return[]}}f.INSTANCE=new f,d.NullLoaderEventRecorder=f})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{static fileUriToFilePath(f,h){if(h=decodeURI(h).replace(/%23/g,\"#\"),f){if(/^file:\\/\\/\\//.test(h))return h.substr(8);if(/^file:\\/\\//.test(h))return h.substr(5)}else if(/^file:\\/\\//.test(h))return h.substr(7);return h}static startsWith(f,h){return f.length>=h.length&&f.substr(0,h.length)===h}static endsWith(f,h){return f.length>=h.length&&f.substr(f.length-h.length)===h}static containsQueryString(f){return/^[^\\#]*\\?/gi.test(f)}static isAbsolutePath(f){return/^((http:\\/\\/)|(https:\\/\\/)|(file:\\/\\/)|(\\/))/.test(f)}static forEachProperty(f,h){if(f){let n;for(n in f)f.hasOwnProperty(n)&&h(n,f[n])}}static isEmpty(f){let h=!0;return _.forEachProperty(f,()=>{h=!1}),h}static recursiveClone(f){if(!f||typeof f!=\"object\"||f instanceof RegExp||!Array.isArray(f)&&Object.getPrototypeOf(f)!==Object.prototype)return f;let h=Array.isArray(f)?[]:{};return _.forEachProperty(f,(n,c)=>{c&&typeof c==\"object\"?h[n]=_.recursiveClone(c):h[n]=c}),h}static generateAnonymousModule(){return\"===anonymous\"+_.NEXT_ANONYMOUS_ID+++\"===\"}static isAnonymousModule(f){return _.startsWith(f,\"===anonymous\")}static getHighPerformanceTimestamp(){return this.PERFORMANCE_NOW_PROBED||(this.PERFORMANCE_NOW_PROBED=!0,this.HAS_PERFORMANCE_NOW=d.global.performance&&typeof d.global.performance.now==\"function\"),this.HAS_PERFORMANCE_NOW?d.global.performance.now():Date.now()}}_.NEXT_ANONYMOUS_ID=1,_.PERFORMANCE_NOW_PROBED=!1,_.HAS_PERFORMANCE_NOW=!1,d.Utilities=_})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){function _(h){if(h instanceof Error)return h;const n=new Error(h.message||String(h)||\"Unknown Error\");return h.stack&&(n.stack=h.stack),n}d.ensureError=_;class v{static validateConfigurationOptions(n){function c(a){if(a.phase===\"loading\"){console.error('Loading \"'+a.moduleId+'\" failed'),console.error(a),console.error(\"Here are the modules that depend on it:\"),console.error(a.neededBy);return}if(a.phase===\"factory\"){console.error('The factory function of \"'+a.moduleId+'\" has thrown an exception'),console.error(a),console.error(\"Here are the modules that depend on it:\"),console.error(a.neededBy);return}}if(n=n||{},typeof n.baseUrl!=\"string\"&&(n.baseUrl=\"\"),typeof n.isBuild!=\"boolean\"&&(n.isBuild=!1),typeof n.paths!=\"object\"&&(n.paths={}),typeof n.config!=\"object\"&&(n.config={}),typeof n.catchError>\"u\"&&(n.catchError=!1),typeof n.recordStats>\"u\"&&(n.recordStats=!1),typeof n.urlArgs!=\"string\"&&(n.urlArgs=\"\"),typeof n.onError!=\"function\"&&(n.onError=c),Array.isArray(n.ignoreDuplicateModules)||(n.ignoreDuplicateModules=[]),n.baseUrl.length>0&&(d.Utilities.endsWith(n.baseUrl,\"/\")||(n.baseUrl+=\"/\")),typeof n.cspNonce!=\"string\"&&(n.cspNonce=\"\"),typeof n.preferScriptTags>\"u\"&&(n.preferScriptTags=!1),n.nodeCachedData&&typeof n.nodeCachedData==\"object\"&&(typeof n.nodeCachedData.seed!=\"string\"&&(n.nodeCachedData.seed=\"seed\"),(typeof n.nodeCachedData.writeDelay!=\"number\"||n.nodeCachedData.writeDelay<0)&&(n.nodeCachedData.writeDelay=1e3*7),!n.nodeCachedData.path||typeof n.nodeCachedData.path!=\"string\")){const a=_(new Error(\"INVALID cached data configuration, 'path' MUST be set\"));a.phase=\"configuration\",n.onError(a),n.nodeCachedData=void 0}return n}static mergeConfigurationOptions(n=null,c=null){let a=d.Utilities.recursiveClone(c||{});return d.Utilities.forEachProperty(n,(t,e)=>{t===\"ignoreDuplicateModules\"&&typeof a.ignoreDuplicateModules<\"u\"?a.ignoreDuplicateModules=a.ignoreDuplicateModules.concat(e):t===\"paths\"&&typeof a.paths<\"u\"?d.Utilities.forEachProperty(e,(i,s)=>a.paths[i]=s):t===\"config\"&&typeof a.config<\"u\"?d.Utilities.forEachProperty(e,(i,s)=>a.config[i]=s):a[t]=d.Utilities.recursiveClone(e)}),v.validateConfigurationOptions(a)}}d.ConfigurationOptionsUtil=v;class f{constructor(n,c){if(this._env=n,this.options=v.mergeConfigurationOptions(c),this._createIgnoreDuplicateModulesMap(),this._createSortedPathsRules(),this.options.baseUrl===\"\"&&this.options.nodeRequire&&this.options.nodeRequire.main&&this.options.nodeRequire.main.filename&&this._env.isNode){let a=this.options.nodeRequire.main.filename,t=Math.max(a.lastIndexOf(\"/\"),a.lastIndexOf(\"\\\\\"));this.options.baseUrl=a.substring(0,t+1)}}_createIgnoreDuplicateModulesMap(){this.ignoreDuplicateModulesMap={};for(let n=0;n<this.options.ignoreDuplicateModules.length;n++)this.ignoreDuplicateModulesMap[this.options.ignoreDuplicateModules[n]]=!0}_createSortedPathsRules(){this.sortedPathsRules=[],d.Utilities.forEachProperty(this.options.paths,(n,c)=>{Array.isArray(c)?this.sortedPathsRules.push({from:n,to:c}):this.sortedPathsRules.push({from:n,to:[c]})}),this.sortedPathsRules.sort((n,c)=>c.from.length-n.from.length)}cloneAndMerge(n){return new f(this._env,v.mergeConfigurationOptions(n,this.options))}getOptionsLiteral(){return this.options}_applyPaths(n){let c;for(let a=0,t=this.sortedPathsRules.length;a<t;a++)if(c=this.sortedPathsRules[a],d.Utilities.startsWith(n,c.from)){let e=[];for(let i=0,s=c.to.length;i<s;i++)e.push(c.to[i]+n.substr(c.from.length));return e}return[n]}_addUrlArgsToUrl(n){return d.Utilities.containsQueryString(n)?n+\"&\"+this.options.urlArgs:n+\"?\"+this.options.urlArgs}_addUrlArgsIfNecessaryToUrl(n){return this.options.urlArgs?this._addUrlArgsToUrl(n):n}_addUrlArgsIfNecessaryToUrls(n){if(this.options.urlArgs)for(let c=0,a=n.length;c<a;c++)n[c]=this._addUrlArgsToUrl(n[c]);return n}moduleIdToPaths(n){if(this._env.isNode&&this.options.amdModulesPattern instanceof RegExp&&!this.options.amdModulesPattern.test(n))return this.isBuild()?[\"empty:\"]:[\"node|\"+n];let c=n,a;if(!d.Utilities.endsWith(c,\".js\")&&!d.Utilities.isAbsolutePath(c)){a=this._applyPaths(c);for(let t=0,e=a.length;t<e;t++)this.isBuild()&&a[t]===\"empty:\"||(d.Utilities.isAbsolutePath(a[t])||(a[t]=this.options.baseUrl+a[t]),!d.Utilities.endsWith(a[t],\".js\")&&!d.Utilities.containsQueryString(a[t])&&(a[t]=a[t]+\".js\"))}else!d.Utilities.endsWith(c,\".js\")&&!d.Utilities.containsQueryString(c)&&(c=c+\".js\"),a=[c];return this._addUrlArgsIfNecessaryToUrls(a)}requireToUrl(n){let c=n;return d.Utilities.isAbsolutePath(c)||(c=this._applyPaths(c)[0],d.Utilities.isAbsolutePath(c)||(c=this.options.baseUrl+c)),this._addUrlArgsIfNecessaryToUrl(c)}isBuild(){return this.options.isBuild}shouldInvokeFactory(n){return!!(!this.options.isBuild||d.Utilities.isAnonymousModule(n)||this.options.buildForceInvokeFactory&&this.options.buildForceInvokeFactory[n])}isDuplicateMessageIgnoredFor(n){return this.ignoreDuplicateModulesMap.hasOwnProperty(n)}getConfigForModule(n){if(this.options.config)return this.options.config[n]}shouldCatchError(){return this.options.catchError}shouldRecordStats(){return this.options.recordStats}onError(n){this.options.onError(n)}}d.Configuration=f})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{constructor(e){this._env=e,this._scriptLoader=null,this._callbackMap={}}load(e,i,s,r){if(!this._scriptLoader)if(this._env.isWebWorker)this._scriptLoader=new h;else if(this._env.isElectronRenderer){const{preferScriptTags:u}=e.getConfig().getOptionsLiteral();u?this._scriptLoader=new v:this._scriptLoader=new n(this._env)}else this._env.isNode?this._scriptLoader=new n(this._env):this._scriptLoader=new v;let o={callback:s,errorback:r};if(this._callbackMap.hasOwnProperty(i)){this._callbackMap[i].push(o);return}this._callbackMap[i]=[o],this._scriptLoader.load(e,i,()=>this.triggerCallback(i),u=>this.triggerErrorback(i,u))}triggerCallback(e){let i=this._callbackMap[e];delete this._callbackMap[e];for(let s=0;s<i.length;s++)i[s].callback()}triggerErrorback(e,i){let s=this._callbackMap[e];delete this._callbackMap[e];for(let r=0;r<s.length;r++)s[r].errorback(i)}}class v{attachListeners(e,i,s){let r=()=>{e.removeEventListener(\"load\",o),e.removeEventListener(\"error\",u)},o=l=>{r(),i()},u=l=>{r(),s(l)};e.addEventListener(\"load\",o),e.addEventListener(\"error\",u)}load(e,i,s,r){if(/^node\\|/.test(i)){let o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=i.split(\"|\"),g=null;try{g=u(l[1])}catch(p){r(p);return}e.enqueueDefineAnonymousModule([],()=>g),s()}else{let o=document.createElement(\"script\");o.setAttribute(\"async\",\"async\"),o.setAttribute(\"type\",\"text/javascript\"),this.attachListeners(o,s,r);const{trustedTypesPolicy:u}=e.getConfig().getOptionsLiteral();u&&(i=u.createScriptURL(i)),o.setAttribute(\"src\",i);const{cspNonce:l}=e.getConfig().getOptionsLiteral();l&&o.setAttribute(\"nonce\",l),document.getElementsByTagName(\"head\")[0].appendChild(o)}}}function f(t){const{trustedTypesPolicy:e}=t.getConfig().getOptionsLiteral();try{return(e?self.eval(e.createScript(\"\",\"true\")):new Function(\"true\")).call(self),!0}catch{return!1}}class h{constructor(){this._cachedCanUseEval=null}_canUseEval(e){return this._cachedCanUseEval===null&&(this._cachedCanUseEval=f(e)),this._cachedCanUseEval}load(e,i,s,r){if(/^node\\|/.test(i)){const o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=i.split(\"|\");let g=null;try{g=u(l[1])}catch(p){r(p);return}e.enqueueDefineAnonymousModule([],function(){return g}),s()}else{const{trustedTypesPolicy:o}=e.getConfig().getOptionsLiteral();if(!(/^((http:)|(https:)|(file:))/.test(i)&&i.substring(0,self.origin.length)!==self.origin)&&this._canUseEval(e)){fetch(i).then(l=>{if(l.status!==200)throw new Error(l.statusText);return l.text()}).then(l=>{l=`${l}\n//# sourceURL=${i}`,(o?self.eval(o.createScript(\"\",l)):new Function(l)).call(self),s()}).then(void 0,r);return}try{o&&(i=o.createScriptURL(i)),importScripts(i),s()}catch(l){r(l)}}}}class n{constructor(e){this._env=e,this._didInitialize=!1,this._didPatchNodeRequire=!1}_init(e){this._didInitialize||(this._didInitialize=!0,this._fs=e(\"fs\"),this._vm=e(\"vm\"),this._path=e(\"path\"),this._crypto=e(\"crypto\"))}_initNodeRequire(e,i){const{nodeCachedData:s}=i.getConfig().getOptionsLiteral();if(!s||this._didPatchNodeRequire)return;this._didPatchNodeRequire=!0;const r=this,o=e(\"module\");function u(l){const g=l.constructor;let p=function(y){try{return l.require(y)}finally{}};return p.resolve=function(y,E){return g._resolveFilename(y,l,!1,E)},p.resolve.paths=function(y){return g._resolveLookupPaths(y,l)},p.main=process.mainModule,p.extensions=g._extensions,p.cache=g._cache,p}o.prototype._compile=function(l,g){const p=o.wrap(l.replace(/^#!.*/,\"\")),m=i.getRecorder(),y=r._getCachedDataPath(s,g),E={filename:g};let R;try{const x=r._fs.readFileSync(y);R=x.slice(0,16),E.cachedData=x.slice(16),m.record(60,y)}catch{m.record(61,y)}const C=new r._vm.Script(p,E),I=C.runInThisContext(E),w=r._path.dirname(g),b=u(this),U=[this.exports,b,this,g,w,process,_commonjsGlobal,Buffer],P=I.apply(this.exports,U);return r._handleCachedData(C,p,y,!E.cachedData,i),r._verifyCachedData(C,p,y,R,i),P}}load(e,i,s,r){const o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=o.nodeInstrumenter||function(p){return p};this._init(u),this._initNodeRequire(u,e);let g=e.getRecorder();if(/^node\\|/.test(i)){let p=i.split(\"|\"),m=null;try{m=u(p[1])}catch(y){r(y);return}e.enqueueDefineAnonymousModule([],()=>m),s()}else{i=d.Utilities.fileUriToFilePath(this._env.isWindows,i);const p=this._path.normalize(i),m=this._getElectronRendererScriptPathOrUri(p),y=!!o.nodeCachedData,E=y?this._getCachedDataPath(o.nodeCachedData,i):void 0;this._readSourceAndCachedData(p,E,g,(R,C,I,w)=>{if(R){r(R);return}let b;C.charCodeAt(0)===n._BOM?b=n._PREFIX+C.substring(1)+n._SUFFIX:b=n._PREFIX+C+n._SUFFIX,b=l(b,p);const U={filename:m,cachedData:I},P=this._createAndEvalScript(e,b,U,s,r);this._handleCachedData(P,b,E,y&&!I,e),this._verifyCachedData(P,b,E,w,e)})}}_createAndEvalScript(e,i,s,r,o){const u=e.getRecorder();u.record(31,s.filename);const l=new this._vm.Script(i,s),g=l.runInThisContext(s),p=e.getGlobalAMDDefineFunc();let m=!1;const y=function(){return m=!0,p.apply(null,arguments)};return y.amd=p.amd,g.call(d.global,e.getGlobalAMDRequireFunc(),y,s.filename,this._path.dirname(s.filename)),u.record(32,s.filename),m?r():o(new Error(`Didn't receive define call in ${s.filename}!`)),l}_getElectronRendererScriptPathOrUri(e){if(!this._env.isElectronRenderer)return e;let i=e.match(/^([a-z])\\:(.*)/i);return i?`file:///${(i[1].toUpperCase()+\":\"+i[2]).replace(/\\\\/g,\"/\")}`:`file://${e}`}_getCachedDataPath(e,i){const s=this._crypto.createHash(\"md5\").update(i,\"utf8\").update(e.seed,\"utf8\").update(process.arch,\"\").digest(\"hex\"),r=this._path.basename(i).replace(/\\.js$/,\"\");return this._path.join(e.path,`${r}-${s}.code`)}_handleCachedData(e,i,s,r,o){e.cachedDataRejected?this._fs.unlink(s,u=>{o.getRecorder().record(62,s),this._createAndWriteCachedData(e,i,s,o),u&&o.getConfig().onError(u)}):r&&this._createAndWriteCachedData(e,i,s,o)}_createAndWriteCachedData(e,i,s,r){let o=Math.ceil(r.getConfig().getOptionsLiteral().nodeCachedData.writeDelay*(1+Math.random())),u=-1,l=0,g;const p=()=>{setTimeout(()=>{g||(g=this._crypto.createHash(\"md5\").update(i,\"utf8\").digest());const m=e.createCachedData();if(!(m.length===0||m.length===u||l>=5)){if(m.length<u){p();return}u=m.length,this._fs.writeFile(s,Buffer.concat([g,m]),y=>{y&&r.getConfig().onError(y),r.getRecorder().record(63,s),p()})}},o*Math.pow(4,l++))};p()}_readSourceAndCachedData(e,i,s,r){if(!i)this._fs.readFile(e,{encoding:\"utf8\"},r);else{let o,u,l,g=2;const p=m=>{m?r(m):--g===0&&r(void 0,o,u,l)};this._fs.readFile(e,{encoding:\"utf8\"},(m,y)=>{o=y,p(m)}),this._fs.readFile(i,(m,y)=>{!m&&y&&y.length>0?(l=y.slice(0,16),u=y.slice(16),s.record(60,i)):s.record(61,i),p()})}}_verifyCachedData(e,i,s,r,o){r&&(e.cachedDataRejected||setTimeout(()=>{const u=this._crypto.createHash(\"md5\").update(i,\"utf8\").digest();r.equals(u)||(o.getConfig().onError(new Error(`FAILED TO VERIFY CACHED DATA, deleting stale '${s}' now, but a RESTART IS REQUIRED`)),this._fs.unlink(s,l=>{l&&o.getConfig().onError(l)}))},Math.ceil(5e3*(1+Math.random()))))}}n._BOM=65279,n._PREFIX=\"(function (require, define, __filename, __dirname) { \",n._SUFFIX=`\n});`;function c(t,e){if(e.__$__isRecorded)return e;const i=function(r){t.record(33,r);try{return e(r)}finally{t.record(34,r)}};return i.__$__isRecorded=!0,i}d.ensureRecordedNodeRequire=c;function a(t){return new _(t)}d.createScriptLoader=a})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{constructor(t){let e=t.lastIndexOf(\"/\");e!==-1?this.fromModulePath=t.substr(0,e+1):this.fromModulePath=\"\"}static _normalizeModuleId(t){let e=t,i;for(i=/\\/\\.\\//;i.test(e);)e=e.replace(i,\"/\");for(e=e.replace(/^\\.\\//g,\"\"),i=/\\/(([^\\/])|([^\\/][^\\/\\.])|([^\\/\\.][^\\/])|([^\\/][^\\/][^\\/]+))\\/\\.\\.\\//;i.test(e);)e=e.replace(i,\"/\");return e=e.replace(/^(([^\\/])|([^\\/][^\\/\\.])|([^\\/\\.][^\\/])|([^\\/][^\\/][^\\/]+))\\/\\.\\.\\//,\"\"),e}resolveModule(t){let e=t;return d.Utilities.isAbsolutePath(e)||(d.Utilities.startsWith(e,\"./\")||d.Utilities.startsWith(e,\"../\"))&&(e=_._normalizeModuleId(this.fromModulePath+e)),e}}_.ROOT=new _(\"\"),d.ModuleIdResolver=_;class v{constructor(t,e,i,s,r,o){this.id=t,this.strId=e,this.dependencies=i,this._callback=s,this._errorback=r,this.moduleIdResolver=o,this.exports={},this.error=null,this.exportsPassedIn=!1,this.unresolvedDependenciesCount=this.dependencies.length,this._isComplete=!1}static _safeInvokeFunction(t,e){try{return{returnedValue:t.apply(d.global,e),producedError:null}}catch(i){return{returnedValue:null,producedError:i}}}static _invokeFactory(t,e,i,s){return t.shouldInvokeFactory(e)?t.shouldCatchError()?this._safeInvokeFunction(i,s):{returnedValue:i.apply(d.global,s),producedError:null}:{returnedValue:null,producedError:null}}complete(t,e,i,s){this._isComplete=!0;let r=null;if(this._callback)if(typeof this._callback==\"function\"){t.record(21,this.strId);let o=v._invokeFactory(e,this.strId,this._callback,i);r=o.producedError,t.record(22,this.strId),!r&&typeof o.returnedValue<\"u\"&&(!this.exportsPassedIn||d.Utilities.isEmpty(this.exports))&&(this.exports=o.returnedValue)}else this.exports=this._callback;if(r){let o=d.ensureError(r);o.phase=\"factory\",o.moduleId=this.strId,o.neededBy=s(this.id),this.error=o,e.onError(o)}this.dependencies=null,this._callback=null,this._errorback=null,this.moduleIdResolver=null}onDependencyError(t){return this._isComplete=!0,this.error=t,this._errorback?(this._errorback(t),!0):!1}isComplete(){return this._isComplete}}d.Module=v;class f{constructor(){this._nextId=0,this._strModuleIdToIntModuleId=new Map,this._intModuleIdToStrModuleId=[],this.getModuleId(\"exports\"),this.getModuleId(\"module\"),this.getModuleId(\"require\")}getMaxModuleId(){return this._nextId}getModuleId(t){let e=this._strModuleIdToIntModuleId.get(t);return typeof e>\"u\"&&(e=this._nextId++,this._strModuleIdToIntModuleId.set(t,e),this._intModuleIdToStrModuleId[e]=t),e}getStrModuleId(t){return this._intModuleIdToStrModuleId[t]}}class h{constructor(t){this.id=t}}h.EXPORTS=new h(0),h.MODULE=new h(1),h.REQUIRE=new h(2),d.RegularDependency=h;class n{constructor(t,e,i){this.id=t,this.pluginId=e,this.pluginParam=i}}d.PluginDependency=n;class c{constructor(t,e,i,s,r=0){this._env=t,this._scriptLoader=e,this._loaderAvailableTimestamp=r,this._defineFunc=i,this._requireFunc=s,this._moduleIdProvider=new f,this._config=new d.Configuration(this._env),this._hasDependencyCycle=!1,this._modules2=[],this._knownModules2=[],this._inverseDependencies2=[],this._inversePluginDependencies2=new Map,this._currentAnonymousDefineCall=null,this._recorder=null,this._buildInfoPath=[],this._buildInfoDefineStack=[],this._buildInfoDependencies=[],this._requireFunc.moduleManager=this}reset(){return new c(this._env,this._scriptLoader,this._defineFunc,this._requireFunc,this._loaderAvailableTimestamp)}getGlobalAMDDefineFunc(){return this._defineFunc}getGlobalAMDRequireFunc(){return this._requireFunc}static _findRelevantLocationInStack(t,e){let i=o=>o.replace(/\\\\/g,\"/\"),s=i(t),r=e.split(/\\n/);for(let o=0;o<r.length;o++){let u=r[o].match(/(.*):(\\d+):(\\d+)\\)?$/);if(u){let l=u[1],g=u[2],p=u[3],m=Math.max(l.lastIndexOf(\" \")+1,l.lastIndexOf(\"(\")+1);if(l=l.substr(m),l=i(l),l===s){let y={line:parseInt(g,10),col:parseInt(p,10)};return y.line===1&&(y.col-=53),y}}}throw new Error(\"Could not correlate define call site for needle \"+t)}getBuildInfo(){if(!this._config.isBuild())return null;let t=[],e=0;for(let i=0,s=this._modules2.length;i<s;i++){let r=this._modules2[i];if(!r)continue;let o=this._buildInfoPath[r.id]||null,u=this._buildInfoDefineStack[r.id]||null,l=this._buildInfoDependencies[r.id];t[e++]={id:r.strId,path:o,defineLocation:o&&u?c._findRelevantLocationInStack(o,u):null,dependencies:l,shim:null,exports:r.exports}}return t}getRecorder(){return this._recorder||(this._config.shouldRecordStats()?this._recorder=new d.LoaderEventRecorder(this._loaderAvailableTimestamp):this._recorder=d.NullLoaderEventRecorder.INSTANCE),this._recorder}getLoaderEvents(){return this.getRecorder().getEvents()}enqueueDefineAnonymousModule(t,e){if(this._currentAnonymousDefineCall!==null)throw new Error(\"Can only have one anonymous define call per script file\");let i=null;this._config.isBuild()&&(i=new Error(\"StackLocation\").stack||null),this._currentAnonymousDefineCall={stack:i,dependencies:t,callback:e}}defineModule(t,e,i,s,r,o=new _(t)){let u=this._moduleIdProvider.getModuleId(t);if(this._modules2[u]){this._config.isDuplicateMessageIgnoredFor(t)||console.warn(\"Duplicate definition of module '\"+t+\"'\");return}let l=new v(u,t,this._normalizeDependencies(e,o),i,s,o);this._modules2[u]=l,this._config.isBuild()&&(this._buildInfoDefineStack[u]=r,this._buildInfoDependencies[u]=(l.dependencies||[]).map(g=>this._moduleIdProvider.getStrModuleId(g.id))),this._resolve(l)}_normalizeDependency(t,e){if(t===\"exports\")return h.EXPORTS;if(t===\"module\")return h.MODULE;if(t===\"require\")return h.REQUIRE;let i=t.indexOf(\"!\");if(i>=0){let s=e.resolveModule(t.substr(0,i)),r=e.resolveModule(t.substr(i+1)),o=this._moduleIdProvider.getModuleId(s+\"!\"+r),u=this._moduleIdProvider.getModuleId(s);return new n(o,u,r)}return new h(this._moduleIdProvider.getModuleId(e.resolveModule(t)))}_normalizeDependencies(t,e){let i=[],s=0;for(let r=0,o=t.length;r<o;r++)i[s++]=this._normalizeDependency(t[r],e);return i}_relativeRequire(t,e,i,s){if(typeof e==\"string\")return this.synchronousRequire(e,t);this.defineModule(d.Utilities.generateAnonymousModule(),e,i,s,null,t)}synchronousRequire(t,e=new _(t)){let i=this._normalizeDependency(t,e),s=this._modules2[i.id];if(!s)throw new Error(\"Check dependency list! Synchronous require cannot resolve module '\"+t+\"'. This is the first mention of this module!\");if(!s.isComplete())throw new Error(\"Check dependency list! Synchronous require cannot resolve module '\"+t+\"'. This module has not been resolved completely yet.\");if(s.error)throw s.error;return s.exports}configure(t,e){let i=this._config.shouldRecordStats();e?this._config=new d.Configuration(this._env,t):this._config=this._config.cloneAndMerge(t),this._config.shouldRecordStats()&&!i&&(this._recorder=null)}getConfig(){return this._config}_onLoad(t){if(this._currentAnonymousDefineCall!==null){let e=this._currentAnonymousDefineCall;this._currentAnonymousDefineCall=null,this.defineModule(this._moduleIdProvider.getStrModuleId(t),e.dependencies,e.callback,null,e.stack)}}_createLoadError(t,e){let i=this._moduleIdProvider.getStrModuleId(t),s=(this._inverseDependencies2[t]||[]).map(o=>this._moduleIdProvider.getStrModuleId(o));const r=d.ensureError(e);return r.phase=\"loading\",r.moduleId=i,r.neededBy=s,r}_onLoadError(t,e){const i=this._createLoadError(t,e);this._modules2[t]||(this._modules2[t]=new v(t,this._moduleIdProvider.getStrModuleId(t),[],()=>{},null,null));let s=[];for(let u=0,l=this._moduleIdProvider.getMaxModuleId();u<l;u++)s[u]=!1;let r=!1,o=[];for(o.push(t),s[t]=!0;o.length>0;){let u=o.shift(),l=this._modules2[u];l&&(r=l.onDependencyError(i)||r);let g=this._inverseDependencies2[u];if(g)for(let p=0,m=g.length;p<m;p++){let y=g[p];s[y]||(o.push(y),s[y]=!0)}}r||this._config.onError(i)}_hasDependencyPath(t,e){let i=this._modules2[t];if(!i)return!1;let s=[];for(let o=0,u=this._moduleIdProvider.getMaxModuleId();o<u;o++)s[o]=!1;let r=[];for(r.push(i),s[t]=!0;r.length>0;){let u=r.shift().dependencies;if(u)for(let l=0,g=u.length;l<g;l++){let p=u[l];if(p.id===e)return!0;let m=this._modules2[p.id];m&&!s[p.id]&&(s[p.id]=!0,r.push(m))}}return!1}_findCyclePath(t,e,i){if(t===e||i===50)return[t];let s=this._modules2[t];if(!s)return null;let r=s.dependencies;if(r)for(let o=0,u=r.length;o<u;o++){let l=this._findCyclePath(r[o].id,e,i+1);if(l!==null)return l.push(t),l}return null}_createRequire(t){let e=(i,s,r)=>this._relativeRequire(t,i,s,r);return e.toUrl=i=>this._config.requireToUrl(t.resolveModule(i)),e.getStats=()=>this.getLoaderEvents(),e.hasDependencyCycle=()=>this._hasDependencyCycle,e.config=(i,s=!1)=>{this.configure(i,s)},e.__$__nodeRequire=d.global.nodeRequire,e}_loadModule(t){if(this._modules2[t]||this._knownModules2[t])return;this._knownModules2[t]=!0;let e=this._moduleIdProvider.getStrModuleId(t),i=this._config.moduleIdToPaths(e),s=/^@[^\\/]+\\/[^\\/]+$/;this._env.isNode&&(e.indexOf(\"/\")===-1||s.test(e))&&i.push(\"node|\"+e);let r=-1,o=u=>{if(r++,r>=i.length)this._onLoadError(t,u);else{let l=i[r],g=this.getRecorder();if(this._config.isBuild()&&l===\"empty:\"){this._buildInfoPath[t]=l,this.defineModule(this._moduleIdProvider.getStrModuleId(t),[],null,null,null),this._onLoad(t);return}g.record(10,l),this._scriptLoader.load(this,l,()=>{this._config.isBuild()&&(this._buildInfoPath[t]=l),g.record(11,l),this._onLoad(t)},p=>{g.record(12,l),o(p)})}};o(null)}_loadPluginDependency(t,e){if(this._modules2[e.id]||this._knownModules2[e.id])return;this._knownModules2[e.id]=!0;let i=s=>{this.defineModule(this._moduleIdProvider.getStrModuleId(e.id),[],s,null,null)};i.error=s=>{this._config.onError(this._createLoadError(e.id,s))},t.load(e.pluginParam,this._createRequire(_.ROOT),i,this._config.getOptionsLiteral())}_resolve(t){let e=t.dependencies;if(e)for(let i=0,s=e.length;i<s;i++){let r=e[i];if(r===h.EXPORTS){t.exportsPassedIn=!0,t.unresolvedDependenciesCount--;continue}if(r===h.MODULE){t.unresolvedDependenciesCount--;continue}if(r===h.REQUIRE){t.unresolvedDependenciesCount--;continue}let o=this._modules2[r.id];if(o&&o.isComplete()){if(o.error){t.onDependencyError(o.error);return}t.unresolvedDependenciesCount--;continue}if(this._hasDependencyPath(r.id,t.id)){this._hasDependencyCycle=!0,console.warn(\"There is a dependency cycle between '\"+this._moduleIdProvider.getStrModuleId(r.id)+\"' and '\"+this._moduleIdProvider.getStrModuleId(t.id)+\"'. The cyclic path follows:\");let u=this._findCyclePath(r.id,t.id,0)||[];u.reverse(),u.push(r.id),console.warn(u.map(l=>this._moduleIdProvider.getStrModuleId(l)).join(` =>\n`)),t.unresolvedDependenciesCount--;continue}if(this._inverseDependencies2[r.id]=this._inverseDependencies2[r.id]||[],this._inverseDependencies2[r.id].push(t.id),r instanceof n){let u=this._modules2[r.pluginId];if(u&&u.isComplete()){this._loadPluginDependency(u.exports,r);continue}let l=this._inversePluginDependencies2.get(r.pluginId);l||(l=[],this._inversePluginDependencies2.set(r.pluginId,l)),l.push(r),this._loadModule(r.pluginId);continue}this._loadModule(r.id)}t.unresolvedDependenciesCount===0&&this._onModuleComplete(t)}_onModuleComplete(t){let e=this.getRecorder();if(t.isComplete())return;let i=t.dependencies,s=[];if(i)for(let l=0,g=i.length;l<g;l++){let p=i[l];if(p===h.EXPORTS){s[l]=t.exports;continue}if(p===h.MODULE){s[l]={id:t.strId,config:()=>this._config.getConfigForModule(t.strId)};continue}if(p===h.REQUIRE){s[l]=this._createRequire(t.moduleIdResolver);continue}let m=this._modules2[p.id];if(m){s[l]=m.exports;continue}s[l]=null}const r=l=>(this._inverseDependencies2[l]||[]).map(g=>this._moduleIdProvider.getStrModuleId(g));t.complete(e,this._config,s,r);let o=this._inverseDependencies2[t.id];if(this._inverseDependencies2[t.id]=null,o)for(let l=0,g=o.length;l<g;l++){let p=o[l],m=this._modules2[p];m.unresolvedDependenciesCount--,m.unresolvedDependenciesCount===0&&this._onModuleComplete(m)}let u=this._inversePluginDependencies2.get(t.id);if(u){this._inversePluginDependencies2.delete(t.id);for(let l=0,g=u.length;l<g;l++)this._loadPluginDependency(t.exports,u[l])}}}d.ModuleManager=c})(AMDLoader||(AMDLoader={}));var define,AMDLoader;(function(d){const _=new d.Environment;let v=null;const f=function(a,t,e){typeof a!=\"string\"&&(e=t,t=a,a=null),(typeof t!=\"object\"||!Array.isArray(t))&&(e=t,t=null),t||(t=[\"require\",\"exports\",\"module\"]),a?v.defineModule(a,t,e,null,null):v.enqueueDefineAnonymousModule(t,e)};f.amd={jQuery:!0};const h=function(a,t=!1){v.configure(a,t)},n=function(){if(arguments.length===1){if(arguments[0]instanceof Object&&!Array.isArray(arguments[0])){h(arguments[0]);return}if(typeof arguments[0]==\"string\")return v.synchronousRequire(arguments[0])}if((arguments.length===2||arguments.length===3)&&Array.isArray(arguments[0])){v.defineModule(d.Utilities.generateAnonymousModule(),arguments[0],arguments[1],arguments[2],null);return}throw new Error(\"Unrecognized require call\")};n.config=h,n.getConfig=function(){return v.getConfig().getOptionsLiteral()},n.reset=function(){v=v.reset()},n.getBuildInfo=function(){return v.getBuildInfo()},n.getStats=function(){return v.getLoaderEvents()},n.define=f;function c(){if(typeof d.global.require<\"u\"||typeof require<\"u\"){const a=d.global.require||require;if(typeof a==\"function\"&&typeof a.resolve==\"function\"){const t=d.ensureRecordedNodeRequire(v.getRecorder(),a);d.global.nodeRequire=t,n.nodeRequire=t,n.__$__nodeRequire=t}}_.isNode&&!_.isElectronRenderer&&!_.isElectronNodeIntegrationWebWorker?module.exports=n:(_.isElectronRenderer||(d.global.define=f),d.global.require=n)}d.init=c,(typeof d.global.define!=\"function\"||!d.global.define.amd)&&(v=new d.ModuleManager(_,d.createScriptLoader(_),f,n,d.Utilities.getHighPerformanceTimestamp()),typeof d.global.require<\"u\"&&typeof d.global.require!=\"function\"&&n.config(d.global.require),define=function(){return f.apply(null,arguments)},define.amd=f.amd,typeof doNotInitLoader>\"u\"&&c())})(AMDLoader||(AMDLoader={})),define(\"vs/css\",[\"require\",\"exports\"],function(d,_){\"use strict\";Object.defineProperty(_,\"__esModule\",{value:!0}),_.load=v;function v(a,t,e,i){if(i=i||{},(i[\"vs/css\"]||{}).disabled){e({});return}const r=t.toUrl(a+\".css\");f(a,r,()=>{e({})},o=>{typeof e.error==\"function\"&&e.error(\"Could not find \"+r+\".\")})}function f(a,t,e,i){if(h(a,t)){e();return}n(a,t,e,i)}function h(a,t){const e=window.document.getElementsByTagName(\"link\");for(let i=0,s=e.length;i<s;i++){const r=e[i].getAttribute(\"data-name\"),o=e[i].getAttribute(\"href\");if(r===a||o===t)return!0}return!1}function n(a,t,e,i){const s=document.createElement(\"link\");s.setAttribute(\"rel\",\"stylesheet\"),s.setAttribute(\"type\",\"text/css\"),s.setAttribute(\"data-name\",a),c(a,s,e,i),s.setAttribute(\"href\",t),(window.document.head||window.document.getElementsByTagName(\"head\")[0]).appendChild(s)}function c(a,t,e,i){const s=()=>{t.removeEventListener(\"load\",r),t.removeEventListener(\"error\",o)},r=u=>{s(),e()},o=u=>{s(),i(u)};t.addEventListener(\"load\",r),t.addEventListener(\"error\",o)}}),function(){const d=require.getConfig().baseUrl||\"https://main.vscode-cdn.net/insider/336db9ece67f682159078ea1b54212de7636d88a/out\";require.config({baseUrl:d,recordStats:!0,paths:{\"@microsoft/1ds-core-js\":\"../node_modules/@microsoft/1ds-core-js/dist/ms.core.min.js\",\"@microsoft/1ds-post-js\":\"../node_modules/@microsoft/1ds-post-js/dist/ms.post.min.js\",\"@vscode/iconv-lite-umd\":\"../node_modules/@vscode/iconv-lite-umd/lib/iconv-lite-umd.js\",\"@vscode/tree-sitter-wasm\":\"../node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter.js\",\"@vscode/vscode-languagedetection\":\"../node_modules/@vscode/vscode-languagedetection/dist/lib/index.js\",\"@xterm/addon-clipboard\":\"../node_modules/@xterm/addon-clipboard/lib/addon-clipboard.js\",\"@xterm/addon-image\":\"../node_modules/@xterm/addon-image/lib/addon-image.js\",\"@xterm/addon-search\":\"../node_modules/@xterm/addon-search/lib/addon-search.js\",\"@xterm/addon-serialize\":\"../node_modules/@xterm/addon-serialize/lib/addon-serialize.js\",\"@xterm/addon-unicode11\":\"../node_modules/@xterm/addon-unicode11/lib/addon-unicode11.js\",\"@xterm/addon-webgl\":\"../node_modules/@xterm/addon-webgl/lib/addon-webgl.js\",\"@xterm/xterm\":\"../node_modules/@xterm/xterm/lib/xterm.js\",jschardet:\"../node_modules/jschardet/dist/jschardet.min.js\",\"tas-client-umd\":\"../node_modules/tas-client-umd/lib/tas-client-umd.js\",\"vscode-oniguruma\":\"../node_modules/vscode-oniguruma/release/main.js\",\"vscode-textmate\":\"../node_modules/vscode-textmate/release/main.js\",\"vscode-regexp-languagedetection\":\"../node_modules/vscode-regexp-languagedetection/dist/index.js\",vsda:\"../node_modules/vsda/rust/web/vsda.js\",\"@microsoft/dynamicproto-js\":\"../node_modules/@microsoft/dynamicproto-js/lib/dist/umd/dynamicproto-js.min.js\",\"@microsoft/applicationinsights-shims\":\"../node_modules/@microsoft/applicationinsights-shims/dist/umd/applicationinsights-shims.min.js\",\"@microsoft/applicationinsights-core-js\":\"../node_modules/@microsoft/applicationinsights-core-js/browser/applicationinsights-core-js.min.js\"}})}();\n\n//# sourceMappingURL=https://main.vscode-cdn.net/sourcemaps/336db9ece67f682159078ea1b54212de7636d88a/core/vs/loader.js.map\n"
  },
  {
    "path": "build/monaco/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 - present Microsoft Corporation\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": "build/monaco/README-npm.md",
    "content": "# monaco-editor-core\n\n> This npm module is a building block for the [monaco-editor](https://www.npmjs.com/package/monaco-editor)\nnpm module and unless you are doing something special (e.g. authoring a monaco editor language that can be shipped\nand consumed independently), it is best to consume the [monaco-editor](https://www.npmjs.com/package/monaco-editor) module\nthat contains this module and adds languages supports.\n\nThe Monaco Editor is the code editor that powers [VS Code](https://github.com/microsoft/vscode). Here is a good page describing some [editor features](https://code.visualstudio.com/docs/editor/editingevolved).\n\nThis npm module contains the core editor functionality, as it comes from the [vscode repository](https://github.com/microsoft/vscode).\n\n## License\n\n[MIT](https://github.com/microsoft/vscode/blob/main/LICENSE.txt)\n"
  },
  {
    "path": "build/monaco/README.md",
    "content": "# Steps to publish a new version of monaco-editor-core\n\n## Generate monaco.d.ts\n\n* The `monaco.d.ts` is now automatically generated when running `gulp watch`\n\n## Bump version\n\n* increase version in `build/monaco/package.json`\n\n## Generate npm contents for monaco-editor-core\n\n* Be sure to have all changes committed **and pushed to the remote**\n* (the generated files contain the HEAD sha and that should be available on the remote)\n* run gulp editor-distro\n\n## Publish\n\n* `cd out-monaco-editor-core`\n* `npm publish`\n"
  },
  {
    "path": "build/monaco/ThirdPartyNotices.txt",
    "content": "THIRD-PARTY SOFTWARE NOTICES AND INFORMATION\nDo Not Translate or Localize\n\nThis project incorporates components from the projects listed below. The original copyright notices and the licenses\nunder which Microsoft received such components are set forth below. Microsoft reserves all rights not expressly granted\nherein, whether by implication, estoppel or otherwise.\n\n\n\n%% nodejs path library (https://github.com/nodejs/node/tree/43dd49c9782848c25e5b03448c8a0f923f13c158)\n=========================================\nCopyright Joyent, Inc. and other Node contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n=========================================\nEND OF nodejs path library NOTICES AND INFORMATION\n\n\n\n\n%% markedjs NOTICES AND INFORMATION BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) 2018+, MarkedJS (https://github.com/markedjs/)\nCopyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)\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\nall copies 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\nTHE SOFTWARE.\n=========================================\nEND OF markedjs NOTICES AND INFORMATION\n"
  },
  {
    "path": "build/monaco/monaco.d.ts.recipe",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ndeclare let MonacoEnvironment: monaco.Environment | undefined;\n\ninterface Window {\n\tMonacoEnvironment?: monaco.Environment | undefined;\n}\n\ndeclare namespace monaco {\n\n\texport type Thenable<T> = PromiseLike<T>;\n\n\texport interface Environment {\n\t\t/**\n\t\t * Define a global `monaco` symbol.\n\t\t * This is true by default in AMD and false by default in ESM.\n\t\t */\n\t\tglobalAPI?: boolean;\n\t\t/**\n\t\t * The base url where the editor sources are found (which contains the vs folder)\n\t\t */\n\t\tbaseUrl?: string;\n\t\t/**\n\t\t * A web worker factory.\n\t\t * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked.\n\t\t */\n\t\tgetWorker?(workerId: string, label: string): Promise<Worker> | Worker;\n\t\t/**\n\t\t * Return the location for web worker scripts.\n\t\t * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked.\n\t\t */\n\t\tgetWorkerUrl?(workerId: string, label: string): string;\n\t\t/**\n\t\t * Create a trusted types policy (same API as window.trustedTypes.createPolicy)\n\t\t */\n\t\tcreateTrustedTypesPolicy?(\n\t\t\tpolicyName: string,\n\t\t\tpolicyOptions?: ITrustedTypePolicyOptions,\n\t\t): undefined | ITrustedTypePolicy;\n\t}\n\n\texport interface ITrustedTypePolicyOptions {\n\t\tcreateHTML?: (input: string, ...arguments: any[]) => string;\n\t\tcreateScript?: (input: string, ...arguments: any[]) => string;\n\t\tcreateScriptURL?: (input: string, ...arguments: any[]) => string;\n\t}\n\n\texport interface ITrustedTypePolicy {\n\t\treadonly name: string;\n\t\tcreateHTML?(input: string): any;\n\t\tcreateScript?(input: string): any;\n\t\tcreateScriptURL?(input: string): any;\n\t}\n\n\texport interface IDisposable {\n\t\tdispose(): void;\n\t}\n\n\texport interface IEvent<T> {\n\t\t(listener: (e: T) => any, thisArg?: any): IDisposable;\n\t}\n\n\t/**\n\t * A helper that allows to emit and listen to typed events\n\t */\n\texport class Emitter<T> {\n\t\tconstructor();\n\t\treadonly event: Event<T>;\n\t\tfire(event: T): void;\n\t\tdispose(): void;\n\t}\n\n#include(vs/platform/markers/common/markers): MarkerTag, MarkerSeverity\n#include(vs/base/common/cancellation): CancellationTokenSource, CancellationToken\n#include(vs/base/common/uri): URI, UriComponents\n#include(vs/base/common/keyCodes): KeyCode\n#include(vs/editor/common/services/editorBaseApi): KeyMod\n#include(vs/base/common/htmlContent): IMarkdownString, MarkdownStringTrustedOptions\n#include(vs/base/browser/keyboardEvent): IKeyboardEvent\n#include(vs/base/browser/mouseEvent): IMouseEvent\n#include(vs/editor/common/editorCommon): IScrollEvent\n#include(vs/editor/common/core/position): IPosition, Position\n#include(vs/editor/common/core/range): IRange, Range\n#include(vs/editor/common/core/selection): ISelection, Selection, SelectionDirection\n#include(vs/editor/common/languages): Token\n}\n\ndeclare namespace monaco.editor {\n#includeAll(vs/editor/standalone/browser/standaloneEditor;languages.Token=>Token):\n#include(vs/editor/standalone/common/standaloneTheme): BuiltinTheme, IStandaloneThemeData, IColors\n#include(vs/editor/common/languages/supports/tokenization): ITokenThemeRule\n#include(vs/editor/standalone/browser/standaloneWebWorker): MonacoWebWorker, IInternalWebWorkerOptions\n#include(vs/editor/standalone/browser/standaloneCodeEditor): IActionDescriptor, IGlobalEditorOptions, IStandaloneEditorConstructionOptions, IStandaloneDiffEditorConstructionOptions, IStandaloneCodeEditor, IStandaloneDiffEditor\nexport interface ICommandHandler {\n\t(...args: any[]): void;\n}\nexport interface ILocalizedString {\n\toriginal: string;\n\tvalue: string;\n}\nexport interface ICommandMetadata {\n\treadonly description: ILocalizedString | string;\n}\n#include(vs/platform/contextkey/common/contextkey): IContextKey, ContextKeyValue\n#include(vs/editor/standalone/browser/standaloneServices): IEditorOverrideServices\n#include(vs/platform/markers/common/markers): IMarker, IMarkerData, IRelatedInformation\n#include(vs/editor/standalone/browser/colorizer): IColorizerOptions, IColorizerElementOptions\n#include(vs/base/common/scrollable): ScrollbarVisibility\n#include(vs/base/common/themables): ThemeColor, ThemeIcon\n#include(vs/editor/common/core/editOperation): ISingleEditOperation\n#include(vs/editor/common/core/wordHelper): IWordAtPosition\n#includeAll(vs/editor/common/model): IScrollEvent\n#include(vs/editor/common/diff/legacyLinesDiffComputer): IChange, ICharChange, ILineChange\n#include(vs/editor/common/core/dimension): IDimension\n#includeAll(vs/editor/common/editorCommon): IScrollEvent\n#includeAll(vs/editor/common/textModelEvents):\n#includeAll(vs/editor/common/cursorEvents):\n#include(vs/platform/accessibility/common/accessibility): AccessibilitySupport\n#includeAll(vs/editor/common/config/editorOptions):\n#include(vs/editor/browser/config/editorConfiguration): IEditorConstructionOptions\n#includeAll(vs/editor/browser/editorBrowser;editorCommon.=>):\n#include(vs/editor/common/config/fontInfo): FontInfo, BareFontInfo\n#include(vs/editor/common/config/editorZoom): EditorZoom, IEditorZoom\n\n//compatibility:\nexport type IReadOnlyModel = ITextModel;\nexport type IModel = ITextModel;\n}\n\ndeclare namespace monaco.languages {\n\n#include(vs/base/common/glob): IRelativePattern\n#include(vs/editor/common/languageSelector): LanguageSelector, LanguageFilter\n#includeAll(vs/editor/standalone/browser/standaloneLanguages;languages.=>;editorCommon.=>editor.;model.=>editor.;IMarkerData=>editor.IMarkerData):\n#includeAll(vs/editor/common/languages/languageConfiguration):\n#includeAll(vs/editor/common/languages;IMarkerData=>editor.IMarkerData;ISingleEditOperation=>editor.ISingleEditOperation;model.=>editor.;ThemeIcon=>editor.ThemeIcon): Token\n#include(vs/editor/common/languages/language): ILanguageExtensionPoint\n#includeAll(vs/editor/standalone/common/monarch/monarchTypes):\n\n}\n\ndeclare namespace monaco.worker {\n\n#include(vs/editor/common/model/mirrorTextModel): IMirrorTextModel\n#includeAll(vs/editor/common/services/editorWebWorker;):\n\n}\n\n//dtsv=3\n"
  },
  {
    "path": "build/monaco/monaco.usage.recipe",
    "content": "\n// This file is adding references to various symbols which should not be removed via tree shaking\n\nimport { IObservable } from './vs/base/common/observable';\n\nimport { ServiceIdentifier } from './vs/platform/instantiation/common/instantiation';\nimport { start } from './vs/editor/editor.worker.start';\nimport { SyncDescriptor0 } from './vs/platform/instantiation/common/descriptors';\nimport * as editorAPI from './vs/editor/editor.api';\n\n(function () {\n\tvar a: any;\n\tvar b: any;\n\ta = (<ServiceIdentifier<any>>b).type;\n\ta = start;\n\n\t// injection madness\n\ta = (<SyncDescriptor0<any>>b).ctor;\n\n\t// exported API\n\ta = editorAPI.CancellationTokenSource;\n\ta = editorAPI.Emitter;\n\ta = editorAPI.KeyCode;\n\ta = editorAPI.KeyMod;\n\ta = editorAPI.Position;\n\ta = editorAPI.Range;\n\ta = editorAPI.Selection;\n\ta = editorAPI.SelectionDirection;\n\ta = editorAPI.MarkerSeverity;\n\ta = editorAPI.MarkerTag;\n\ta = editorAPI.Uri;\n\ta = editorAPI.Token;\n\ta = editorAPI.editor;\n\ta = editorAPI.languages;\n\n\tconst o: IObservable<number> = null!;\n\to.TChange;\n})();\n"
  },
  {
    "path": "build/monaco/package.json",
    "content": "{\n  \"name\": \"monaco-editor-core\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"description\": \"A browser based code editor\",\n  \"author\": \"Microsoft Corporation\",\n  \"license\": \"MIT\",\n  \"typings\": \"./esm/vs/editor/editor.api.d.ts\",\n  \"module\": \"./esm/vs/editor/editor.main.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/microsoft/vscode/issues\"\n  }\n}\n"
  },
  {
    "path": "build/monaco/version.txt",
    "content": ""
  },
  {
    "path": "build/npm/dirs.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst fs = require('fs');\n\n// Complete list of directories where npm should be executed to install node modules\nconst dirs = [\n\t'',\n\t'build',\n\t'extensions',\n\t'extensions/configuration-editing',\n\t'extensions/css-language-features',\n\t'extensions/css-language-features/server',\n\t'extensions/debug-auto-launch',\n\t'extensions/debug-server-ready',\n\t'extensions/emmet',\n\t'extensions/extension-editing',\n\t'extensions/git',\n\t'extensions/git-base',\n\t'extensions/github',\n\t'extensions/github-authentication',\n\t'extensions/grunt',\n\t'extensions/gulp',\n\t'extensions/html-language-features',\n\t'extensions/html-language-features/server',\n\t'extensions/ipynb',\n\t'extensions/jake',\n\t'extensions/json-language-features',\n\t'extensions/json-language-features/server',\n\t'extensions/markdown-language-features',\n\t'extensions/markdown-math',\n\t'extensions/media-preview',\n\t'extensions/merge-conflict',\n\t'extensions/microsoft-authentication',\n\t'extensions/notebook-renderers',\n\t'extensions/npm',\n\t'extensions/php-language-features',\n\t'extensions/references-view',\n\t'extensions/search-result',\n\t'extensions/simple-browser',\n\t'extensions/tunnel-forwarding',\n\t'extensions/typescript-language-features',\n\t'extensions/vscode-api-tests',\n\t'extensions/vscode-colorize-tests',\n\t'extensions/vscode-colorize-perf-tests',\n\t'extensions/vscode-test-resolver',\n\t'remote',\n\t'remote/web',\n\t'test/automation',\n\t'test/integration/browser',\n\t'test/monaco',\n\t'test/smoke',\n\t'.vscode/extensions/vscode-selfhost-import-aid',\n\t'.vscode/extensions/vscode-selfhost-test-provider',\n\t'extensions/open-remote-ssh', // Void added this\n\t'extensions/open-remote-wsl', // Void added this\n\n];\n\nif (fs.existsSync(`${__dirname}/../../.build/distro/npm`)) {\n\tdirs.push('.build/distro/npm');\n\tdirs.push('.build/distro/npm/remote');\n\tdirs.push('.build/distro/npm/remote/web');\n}\n\nexports.dirs = dirs;\n"
  },
  {
    "path": "build/npm/gyp/package.json",
    "content": "{\n  \"name\": \"code-oss-dev-build\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"node-gyp\": \"^10.1.0\"\n  },\n  \"scripts\": {}\n}\n"
  },
  {
    "path": "build/npm/jsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"es2020\",\n\t\t\"lib\": [\n\t\t\t\"ES2020\"\n\t\t],\n\t\t\"module\": \"node16\",\n\t\t\"checkJs\": true,\n\t\t\"noEmit\": true\n\t}\n}\n"
  },
  {
    "path": "build/npm/postinstall.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst fs = require('fs');\nconst path = require('path');\nconst os = require('os');\nconst cp = require('child_process');\nconst { dirs } = require('./dirs');\nconst npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';\nconst root = path.dirname(path.dirname(__dirname));\n\nfunction log(dir, message) {\n\tif (process.stdout.isTTY) {\n\t\tconsole.log(`\\x1b[34m[${dir}]\\x1b[0m`, message);\n\t} else {\n\t\tconsole.log(`[${dir}]`, message);\n\t}\n}\n\nfunction run(command, args, opts) {\n\tlog(opts.cwd || '.', '$ ' + command + ' ' + args.join(' '));\n\n\tconst result = cp.spawnSync(command, args, opts);\n\n\tif (result.error) {\n\t\tconsole.error(`ERR Failed to spawn process: ${result.error}`);\n\t\tprocess.exit(1);\n\t} else if (result.status !== 0) {\n\t\tconsole.error(`ERR Process exited with code: ${result.status}`);\n\t\tprocess.exit(result.status);\n\t}\n}\n\n/**\n * @param {string} dir\n * @param {*} [opts]\n */\nfunction npmInstall(dir, opts) {\n\topts = {\n\t\tenv: { ...process.env },\n\t\t...(opts ?? {}),\n\t\tcwd: dir,\n\t\tstdio: 'inherit',\n\t\tshell: true\n\t};\n\n\tconst command = process.env['npm_command'] || 'install';\n\n\tif (process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'] && /^(.build\\/distro\\/npm\\/)?remote$/.test(dir)) {\n\t\tconst userinfo = os.userInfo();\n\t\tlog(dir, `Installing dependencies inside container ${process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME']}...`);\n\n\t\topts.cwd = root;\n\t\tif (process.env['npm_config_arch'] === 'arm64') {\n\t\t\trun('sudo', ['docker', 'run', '--rm', '--privileged', 'multiarch/qemu-user-static', '--reset', '-p', 'yes'], opts);\n\t\t}\n\t\trun('sudo', ['docker', 'run', '-e', 'GITHUB_TOKEN', '-v', `${process.env['VSCODE_HOST_MOUNT']}:/root/vscode`, '-v', `${process.env['VSCODE_HOST_MOUNT']}/.build/.netrc:/root/.netrc`, '-w', path.resolve('/root/vscode', dir), process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'], 'sh', '-c', `\\\"chown -R root:root ${path.resolve('/root/vscode', dir)} && npm i -g node-gyp-build && npm ci\\\"`], opts);\n\t\trun('sudo', ['chown', '-R', `${userinfo.uid}:${userinfo.gid}`, `${path.resolve(root, dir)}`], opts);\n\t} else {\n\t\tlog(dir, 'Installing dependencies...');\n\t\trun(npm, command.split(' '), opts);\n\t}\n\tremoveParcelWatcherPrebuild(dir);\n}\n\nfunction setNpmrcConfig(dir, env) {\n\tconst npmrcPath = path.join(root, dir, '.npmrc');\n\tconst lines = fs.readFileSync(npmrcPath, 'utf8').split('\\n');\n\n\tfor (const line of lines) {\n\t\tconst trimmedLine = line.trim();\n\t\tif (trimmedLine && !trimmedLine.startsWith('#')) {\n\t\t\tconst [key, value] = trimmedLine.split('=');\n\t\t\tenv[`npm_config_${key}`] = value.replace(/^\"(.*)\"$/, '$1');\n\t\t}\n\t}\n\n\t// Force node-gyp to use process.config on macOS\n\t// which defines clang variable as expected. Otherwise we\n\t// run into compilation errors due to incorrect compiler\n\t// configuration.\n\t// NOTE: This means the process.config should contain\n\t// the correct clang variable. So keep the version check\n\t// in preinstall sync with this logic.\n\t// Change was first introduced in https://github.com/nodejs/node/commit/6e0a2bb54c5bbeff0e9e33e1a0c683ed980a8a0f\n\tif ((dir === 'remote' || dir === 'build') && process.platform === 'darwin') {\n\t\tenv['npm_config_force_process_config'] = 'true';\n\t} else {\n\t\tdelete env['npm_config_force_process_config'];\n\t}\n\n\tif (dir === 'build') {\n\t\tenv['npm_config_target'] = process.versions.node;\n\t\tenv['npm_config_arch'] = process.arch;\n\t}\n}\n\nfunction removeParcelWatcherPrebuild(dir) {\n\tconst parcelModuleFolder = path.join(root, dir, 'node_modules', '@parcel');\n\tif (!fs.existsSync(parcelModuleFolder)) {\n\t\treturn;\n\t}\n\n\tconst parcelModules = fs.readdirSync(parcelModuleFolder);\n\tfor (const moduleName of parcelModules) {\n\t\tif (moduleName.startsWith('watcher-')) {\n\t\t\tconst modulePath = path.join(parcelModuleFolder, moduleName);\n\t\t\tfs.rmSync(modulePath, { recursive: true, force: true });\n\t\t\tlog(dir, `Removed @parcel/watcher prebuilt module ${modulePath}`);\n\t\t}\n\t}\n}\n\nfor (let dir of dirs) {\n\n\tif (dir === '') {\n\t\tremoveParcelWatcherPrebuild(dir);\n\t\tcontinue; // already executed in root\n\t}\n\n\tlet opts;\n\n\tif (dir === 'build') {\n\t\topts = {\n\t\t\tenv: {\n\t\t\t\t...process.env\n\t\t\t},\n\t\t}\n\t\tif (process.env['CC']) { opts.env['CC'] = 'gcc'; }\n\t\tif (process.env['CXX']) { opts.env['CXX'] = 'g++'; }\n\t\tif (process.env['CXXFLAGS']) { opts.env['CXXFLAGS'] = ''; }\n\t\tif (process.env['LDFLAGS']) { opts.env['LDFLAGS'] = ''; }\n\n\t\tsetNpmrcConfig('build', opts.env);\n\t\tnpmInstall('build', opts);\n\t\tcontinue;\n\t}\n\n\tif (/^(.build\\/distro\\/npm\\/)?remote$/.test(dir)) {\n\t\t// node modules used by vscode server\n\t\topts = {\n\t\t\tenv: {\n\t\t\t\t...process.env\n\t\t\t},\n\t\t}\n\t\tif (process.env['VSCODE_REMOTE_CC']) {\n\t\t\topts.env['CC'] = process.env['VSCODE_REMOTE_CC'];\n\t\t} else {\n\t\t\tdelete opts.env['CC'];\n\t\t}\n\t\tif (process.env['VSCODE_REMOTE_CXX']) {\n\t\t\topts.env['CXX'] = process.env['VSCODE_REMOTE_CXX'];\n\t\t} else {\n\t\t\tdelete opts.env['CXX'];\n\t\t}\n\t\tif (process.env['CXXFLAGS']) { delete opts.env['CXXFLAGS']; }\n\t\tif (process.env['CFLAGS']) { delete opts.env['CFLAGS']; }\n\t\tif (process.env['LDFLAGS']) { delete opts.env['LDFLAGS']; }\n\t\tif (process.env['VSCODE_REMOTE_CXXFLAGS']) { opts.env['CXXFLAGS'] = process.env['VSCODE_REMOTE_CXXFLAGS']; }\n\t\tif (process.env['VSCODE_REMOTE_LDFLAGS']) { opts.env['LDFLAGS'] = process.env['VSCODE_REMOTE_LDFLAGS']; }\n\t\tif (process.env['VSCODE_REMOTE_NODE_GYP']) { opts.env['npm_config_node_gyp'] = process.env['VSCODE_REMOTE_NODE_GYP']; }\n\n\t\tconst globalGypPath = path.join(os.homedir(), '.gyp');\n\t\tconst globalInclude = path.join(globalGypPath, 'include.gypi');\n\t\tconst tempGlobalInclude = path.join(globalGypPath, 'include.gypi.bak');\n\t\tif (process.platform === 'linux' &&\n\t\t\t(process.env['CI'] || process.env['BUILD_ARTIFACTSTAGINGDIRECTORY'])) {\n\t\t\t// Following include file rename should be removed\n\t\t\t// when `Override gnu target for arm64 and arm` step\n\t\t\t// is removed from the product build pipeline.\n\t\t\tif (fs.existsSync(globalInclude)) {\n\t\t\t\tfs.renameSync(globalInclude, tempGlobalInclude);\n\t\t\t}\n\t\t}\n\t\tsetNpmrcConfig('remote', opts.env);\n\t\tnpmInstall(dir, opts);\n\t\tif (process.platform === 'linux' &&\n\t\t\t(process.env['CI'] || process.env['BUILD_ARTIFACTSTAGINGDIRECTORY'])) {\n\t\t\tif (fs.existsSync(tempGlobalInclude)) {\n\t\t\t\tfs.renameSync(tempGlobalInclude, globalInclude);\n\t\t\t}\n\t\t}\n\t\tcontinue;\n\t}\n\n\tnpmInstall(dir, opts);\n}\n\ncp.execSync('git config pull.rebase merges');\ncp.execSync('git config blame.ignoreRevsFile .git-blame-ignore-revs');\n"
  },
  {
    "path": "build/npm/preinstall.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst nodeVersion = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(process.versions.node);\nconst majorNodeVersion = parseInt(nodeVersion[1]);\nconst minorNodeVersion = parseInt(nodeVersion[2]);\nconst patchNodeVersion = parseInt(nodeVersion[3]);\n\nif (!process.env['VSCODE_SKIP_NODE_VERSION_CHECK']) {\n\tif (majorNodeVersion < 20 || (majorNodeVersion === 20 && minorNodeVersion < 18) || (majorNodeVersion === 20 && minorNodeVersion === 18 && patchNodeVersion < 1)) {\n\t\tconsole.error('\\x1b[1;31m*** Please use Node.js v20.18.1 or later for development.\\x1b[0;0m');\n\t\tthrow new Error();\n\t}\n}\n\nif (process.env['npm_execpath'].includes('yarn')) {\n\tconsole.error('\\x1b[1;31m*** Seems like you are using `yarn` which is not supported in this repo any more, please use `npm i` instead. ***\\x1b[0;0m');\n\tthrow new Error();\n}\n\nconst path = require('path');\nconst fs = require('fs');\nconst cp = require('child_process');\nconst os = require('os');\n\nif (process.platform === 'win32') {\n\tif (!hasSupportedVisualStudioVersion()) {\n\t\tconsole.error('\\x1b[1;31m*** Invalid C/C++ Compiler Toolchain. Please check https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites.\\x1b[0;0m');\n\t\tthrow new Error();\n\t}\n\tinstallHeaders();\n}\n\nif (process.arch !== os.arch()) {\n\tconsole.error(`\\x1b[1;31m*** ARCHITECTURE MISMATCH: The node.js process is ${process.arch}, but your OS architecture is ${os.arch()}. ***\\x1b[0;0m`);\n\tconsole.error(`\\x1b[1;31m*** This can greatly increase the build time of vs code. ***\\x1b[0;0m`);\n}\n\nfunction hasSupportedVisualStudioVersion() {\n\tconst fs = require('fs');\n\tconst path = require('path');\n\t// Translated over from\n\t// https://source.chromium.org/chromium/chromium/src/+/master:build/vs_toolchain.py;l=140-175\n\tconst supportedVersions = ['2022', '2019', '2017'];\n\n\tconst availableVersions = [];\n\tfor (const version of supportedVersions) {\n\t\tlet vsPath = process.env[`vs${version}_install`];\n\t\tif (vsPath && fs.existsSync(vsPath)) {\n\t\t\tavailableVersions.push(version);\n\t\t\tbreak;\n\t\t}\n\t\tconst programFiles86Path = process.env['ProgramFiles(x86)'];\n\t\tconst programFiles64Path = process.env['ProgramFiles'];\n\n\t\tconst vsTypes = ['Enterprise', 'Professional', 'Community', 'Preview', 'BuildTools', 'IntPreview'];\n\t\tif (programFiles64Path) {\n\t\t\tvsPath = `${programFiles64Path}/Microsoft Visual Studio/${version}`;\n\t\t\tif (vsTypes.some(vsType => fs.existsSync(path.join(vsPath, vsType)))) {\n\t\t\t\tavailableVersions.push(version);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (programFiles86Path) {\n\t\t\tvsPath = `${programFiles86Path}/Microsoft Visual Studio/${version}`;\n\t\t\tif (vsTypes.some(vsType => fs.existsSync(path.join(vsPath, vsType)))) {\n\t\t\t\tavailableVersions.push(version);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn availableVersions.length;\n}\n\nfunction installHeaders() {\n\tcp.execSync(`npm.cmd ${process.env['npm_command'] || 'ci'}`, {\n\t\tenv: process.env,\n\t\tcwd: path.join(__dirname, 'gyp'),\n\t\tstdio: 'inherit'\n\t});\n\n\t// The node gyp package got installed using the above npm command using the gyp/package.json\n\t// file checked into our repository. So from that point it is save to construct the path\n\t// to that executable\n\tconst node_gyp = path.join(__dirname, 'gyp', 'node_modules', '.bin', 'node-gyp.cmd');\n\tconst result = cp.execFileSync(node_gyp, ['list'], { encoding: 'utf8', shell: true });\n\tconst versions = new Set(result.split(/\\n/g).filter(line => !line.startsWith('gyp info')).map(value => value));\n\n\tconst local = getHeaderInfo(path.join(__dirname, '..', '..', '.npmrc'));\n\tconst remote = getHeaderInfo(path.join(__dirname, '..', '..', 'remote', '.npmrc'));\n\n\tif (local !== undefined && !versions.has(local.target)) {\n\t\t// Both disturl and target come from a file checked into our repository\n\t\tcp.execFileSync(node_gyp, ['install', '--dist-url', local.disturl, local.target], { shell: true });\n\t}\n\n\tif (remote !== undefined && !versions.has(remote.target)) {\n\t\t// Both disturl and target come from a file checked into our repository\n\t\tcp.execFileSync(node_gyp, ['install', '--dist-url', remote.disturl, remote.target], { shell: true });\n\t}\n}\n\n/**\n * @param {string} rcFile\n * @returns {{ disturl: string; target: string } | undefined}\n */\nfunction getHeaderInfo(rcFile) {\n\tconst lines = fs.readFileSync(rcFile, 'utf8').split(/\\r\\n?/g);\n\tlet disturl, target;\n\tfor (const line of lines) {\n\t\tlet match = line.match(/\\s*disturl=*\\\"(.*)\\\"\\s*$/);\n\t\tif (match !== null && match.length >= 1) {\n\t\t\tdisturl = match[1];\n\t\t}\n\t\tmatch = line.match(/\\s*target=*\\\"(.*)\\\"\\s*$/);\n\t\tif (match !== null && match.length >= 1) {\n\t\t\ttarget = match[1];\n\t\t}\n\t}\n\treturn disturl !== undefined && target !== undefined\n\t\t? { disturl, target }\n\t\t: undefined;\n}\n"
  },
  {
    "path": "build/npm/update-all-grammars.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { spawn as _spawn } from 'child_process';\nimport { readdirSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport url from 'url';\n\nasync function spawn(cmd, args, opts) {\n\treturn new Promise((c, e) => {\n\t\tconst child = _spawn(cmd, args, { shell: true, stdio: 'inherit', env: process.env, ...opts });\n\t\tchild.on('close', code => code === 0 ? c() : e(`Returned ${code}`));\n\t});\n}\n\nasync function main() {\n\tawait spawn('npm', ['ci'], { cwd: 'extensions' });\n\n\tfor (const extension of readdirSync('extensions')) {\n\t\ttry {\n\t\t\tconst packageJSON = JSON.parse(readFileSync(join('extensions', extension, 'package.json')).toString());\n\t\t\tif (!(packageJSON && packageJSON.scripts && packageJSON.scripts['update-grammar'])) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tawait spawn(`npm`, ['run', 'update-grammar'], { cwd: `extensions/${extension}` });\n\t}\n\n\t// run integration tests\n\n\tif (process.platform === 'win32') {\n\t\t_spawn('.\\\\scripts\\\\test-integration.bat', [], { env: process.env, stdio: 'inherit' });\n\t} else {\n\t\t_spawn('/bin/bash', ['./scripts/test-integration.sh'], { env: process.env, stdio: 'inherit' });\n\t}\n}\n\nif (import.meta.url === url.pathToFileURL(process.argv[1]).href) {\n\tmain().catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/npm/update-distro.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { execSync } from 'child_process';\nimport { join, resolve } from 'path';\nimport { readFileSync, writeFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\n\nconst rootPath = resolve(fileURLToPath(import.meta.url), '..', '..', '..', '..');\nconst vscodePath = join(rootPath, 'vscode');\nconst distroPath = join(rootPath, 'vscode-distro');\nconst commit = execSync('git rev-parse HEAD', { cwd: distroPath, encoding: 'utf8' }).trim();\nconst packageJsonPath = join(vscodePath, 'package.json');\nconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));\n\npackageJson.distro = commit;\nwriteFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n"
  },
  {
    "path": "build/npm/update-localization-extension.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nlet i18n = require(\"../lib/i18n\");\n\nlet fs = require(\"fs\");\nlet path = require(\"path\");\n\nlet gulp = require('gulp');\nlet vfs = require(\"vinyl-fs\");\nlet rimraf = require('rimraf');\nlet minimist = require('minimist');\n\nfunction update(options) {\n\tlet idOrPath = options._;\n\tif (!idOrPath) {\n\t\tthrow new Error('Argument must be the location of the localization extension.');\n\t}\n\tlet location = options.location;\n\tif (location !== undefined && !fs.existsSync(location)) {\n\t\tthrow new Error(`${location} doesn't exist.`);\n\t}\n\tlet externalExtensionsLocation = options.externalExtensionsLocation;\n\tif (externalExtensionsLocation !== undefined && !fs.existsSync(externalExtensionsLocation)) {\n\t\tthrow new Error(`${externalExtensionsLocation} doesn't exist.`);\n\t}\n\tlet locExtFolder = idOrPath;\n\tif (/^\\w{2,3}(-\\w+)?$/.test(idOrPath)) {\n\t\tlocExtFolder = path.join('..', 'vscode-loc', 'i18n', `vscode-language-pack-${idOrPath}`);\n\t}\n\tlet locExtStat = fs.statSync(locExtFolder);\n\tif (!locExtStat || !locExtStat.isDirectory) {\n\t\tthrow new Error('No directory found at ' + idOrPath);\n\t}\n\tlet packageJSON = JSON.parse(fs.readFileSync(path.join(locExtFolder, 'package.json')).toString());\n\tlet contributes = packageJSON['contributes'];\n\tif (!contributes) {\n\t\tthrow new Error('The extension must define a \"localizations\" contribution in the \"package.json\"');\n\t}\n\tlet localizations = contributes['localizations'];\n\tif (!localizations) {\n\t\tthrow new Error('The extension must define a \"localizations\" contribution of type array in the \"package.json\"');\n\t}\n\n\tlocalizations.forEach(function (localization) {\n\t\tif (!localization.languageId || !localization.languageName || !localization.localizedLanguageName) {\n\t\t\tthrow new Error('Each localization contribution must define \"languageId\", \"languageName\" and \"localizedLanguageName\" properties.');\n\t\t}\n\t\tlet languageId = localization.languageId;\n\t\tlet translationDataFolder = path.join(locExtFolder, 'translations');\n\n\t\tswitch (languageId) {\n\t\t\tcase 'zh-cn':\n\t\t\t\tlanguageId = 'zh-Hans';\n\t\t\t\tbreak;\n\t\t\tcase 'zh-tw':\n\t\t\t\tlanguageId = 'zh-Hant';\n\t\t\t\tbreak;\n\t\t\tcase 'pt-br':\n\t\t\t\tlanguageId = 'pt-BR';\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (fs.existsSync(translationDataFolder) && fs.existsSync(path.join(translationDataFolder, 'main.i18n.json'))) {\n\t\t\tconsole.log('Clearing  \\'' + translationDataFolder + '\\'...');\n\t\t\trimraf.sync(translationDataFolder);\n\t\t}\n\n\t\tconsole.log(`Importing translations for ${languageId} form '${location}' to '${translationDataFolder}' ...`);\n\t\tlet translationPaths = [];\n\t\tgulp.src([\n\t\t\tpath.join(location, '**', languageId, '*.xlf'),\n\t\t\t...i18n.EXTERNAL_EXTENSIONS.map(extensionId => path.join(externalExtensionsLocation, extensionId, languageId, '*-new.xlf'))\n\t\t], { silent: false })\n\t\t\t.pipe(i18n.prepareI18nPackFiles(translationPaths))\n\t\t\t.on('error', (error) => {\n\t\t\t\tconsole.log(`Error occurred while importing translations:`);\n\t\t\t\ttranslationPaths = undefined;\n\t\t\t\tif (Array.isArray(error)) {\n\t\t\t\t\terror.forEach(console.log);\n\t\t\t\t} else if (error) {\n\t\t\t\t\tconsole.log(error);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('Unknown error');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.pipe(vfs.dest(translationDataFolder))\n\t\t\t.on('end', function () {\n\t\t\t\tif (translationPaths !== undefined) {\n\t\t\t\t\tlocalization.translations = [];\n\t\t\t\t\tfor (let tp of translationPaths) {\n\t\t\t\t\t\tlocalization.translations.push({ id: tp.id, path: `./translations/${tp.resourceName}` });\n\t\t\t\t\t}\n\t\t\t\t\tfs.writeFileSync(path.join(locExtFolder, 'package.json'), JSON.stringify(packageJSON, null, '\\t') + '\\n');\n\t\t\t\t}\n\t\t\t});\n\t});\n}\nif (path.basename(process.argv[1]) === 'update-localization-extension.js') {\n\tvar options = minimist(process.argv.slice(2), {\n\t\tstring: ['location', 'externalExtensionsLocation']\n\t});\n\tupdate(options);\n}\n"
  },
  {
    "path": "build/package.json",
    "content": "{\n  \"name\": \"code-oss-dev-build\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@azure/core-auth\": \"^1.9.0\",\n    \"@azure/cosmos\": \"^3\",\n    \"@azure/identity\": \"^4.2.1\",\n    \"@azure/msal-node\": \"^2.16.1\",\n    \"@azure/storage-blob\": \"^12.25.0\",\n    \"@electron/get\": \"^2.0.0\",\n    \"@types/ansi-colors\": \"^3.2.0\",\n    \"@types/byline\": \"^4.2.32\",\n    \"@types/debounce\": \"^1.0.0\",\n    \"@types/debug\": \"^4.1.5\",\n    \"@types/fancy-log\": \"^1.3.0\",\n    \"@types/fs-extra\": \"^9.0.12\",\n    \"@types/glob\": \"^7.1.1\",\n    \"@types/gulp\": \"^4.0.17\",\n    \"@types/gulp-filter\": \"^3.0.32\",\n    \"@types/gulp-gzip\": \"^0.0.31\",\n    \"@types/gulp-json-editor\": \"^2.2.31\",\n    \"@types/gulp-rename\": \"^0.0.33\",\n    \"@types/gulp-sort\": \"^2.0.4\",\n    \"@types/gulp-sourcemaps\": \"^0.0.32\",\n    \"@types/jws\": \"^3.2.10\",\n    \"@types/mime\": \"0.0.29\",\n    \"@types/minimatch\": \"^3.0.3\",\n    \"@types/minimist\": \"^1.2.1\",\n    \"@types/mocha\": \"^9.1.1\",\n    \"@types/node\": \"20.x\",\n    \"@types/pump\": \"^1.0.1\",\n    \"@types/rimraf\": \"^2.0.4\",\n    \"@types/through\": \"^0.0.29\",\n    \"@types/through2\": \"^2.0.36\",\n    \"@types/workerpool\": \"^6.4.0\",\n    \"@types/xml2js\": \"0.0.33\",\n    \"@vscode/iconv-lite-umd\": \"0.7.0\",\n    \"@vscode/ripgrep\": \"^1.15.10\",\n    \"@vscode/vsce\": \"2.20.1\",\n    \"byline\": \"^5.0.0\",\n    \"debug\": \"^4.3.2\",\n    \"electron-osx-sign\": \"^0.4.16\",\n    \"esbuild\": \"0.25.0\",\n    \"extract-zip\": \"^2.0.1\",\n    \"gulp-merge-json\": \"^2.1.1\",\n    \"gulp-sort\": \"^2.0.0\",\n    \"jsonc-parser\": \"^2.3.0\",\n    \"jws\": \"^4.0.0\",\n    \"mime\": \"^1.4.1\",\n    \"source-map\": \"0.6.1\",\n    \"ternary-stream\": \"^3.0.0\",\n    \"through2\": \"^4.0.2\",\n    \"tree-sitter\": \"^0.22.4\",\n    \"vscode-universal-bundler\": \"^0.1.3\",\n    \"workerpool\": \"^6.4.0\",\n    \"yauzl\": \"^2.10.0\"\n  },\n  \"type\": \"commonjs\",\n  \"scripts\": {\n    \"compile\": \"../node_modules/.bin/tsc -p tsconfig.build.json\",\n    \"watch\": \"../node_modules/.bin/tsc -p tsconfig.build.json --watch\",\n    \"npmCheckJs\": \"../node_modules/.bin/tsc --noEmit\"\n  },\n  \"optionalDependencies\": {\n    \"tree-sitter-typescript\": \"^0.23.2\",\n    \"vscode-gulp-watch\": \"^5.0.3\"\n  }\n}\n"
  },
  {
    "path": "build/setup-npm-registry.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst fs = require('fs').promises;\nconst path = require('path');\n\nasync function* getPackageLockFiles(dir) {\n\tconst files = await fs.readdir(dir);\n\n\tfor (const file of files) {\n\t\tconst fullPath = path.join(dir, file);\n\t\tconst stat = await fs.stat(fullPath);\n\n\t\tif (stat.isDirectory()) {\n\t\t\tyield* getPackageLockFiles(fullPath);\n\t\t} else if (file === 'package-lock.json') {\n\t\t\tyield fullPath;\n\t\t}\n\t}\n}\n\nasync function setup(url, file) {\n\tlet contents = await fs.readFile(file, 'utf8');\n\tcontents = contents.replace(/https:\\/\\/registry\\.[^.]+\\.com\\//g, url);\n\tawait fs.writeFile(file, contents);\n}\n\nasync function main(url, dir) {\n\tconst root = dir ?? process.cwd();\n\n\tfor await (const file of getPackageLockFiles(root)) {\n\t\tconsole.log(`Enabling custom NPM registry: ${path.relative(root, file)}`);\n\t\tawait setup(url, file);\n\t}\n}\n\nmain(process.argv[2], process.argv[3]);\n"
  },
  {
    "path": "build/stylelint.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst es = require('event-stream');\nconst vfs = require('vinyl-fs');\nconst { stylelintFilter } = require('./filters');\nconst { getVariableNameValidator } = require('./lib/stylelint/validateVariableNames');\n\nmodule.exports = gulpstylelint;\n\n/** use regex on lines */\nfunction gulpstylelint(reporter) {\n\tconst variableValidator = getVariableNameValidator();\n\tlet errorCount = 0;\n\treturn es.through(function (file) {\n\t\tconst lines = file.__lines || file.contents.toString('utf8').split(/\\r\\n|\\r|\\n/);\n\t\tfile.__lines = lines;\n\n\t\tlines.forEach((line, i) => {\n\t\t\tvariableValidator(line, unknownVariable => {\n\t\t\t\treporter(file.relative + '(' + (i + 1) + ',1): Unknown variable: ' + unknownVariable, true);\n\t\t\t\terrorCount++;\n\t\t\t});\n\t\t});\n\n\t\tthis.emit('data', file);\n\t}, function () {\n\t\tif (errorCount > 0) {\n\t\t\treporter('All valid variable names are in `build/lib/stylelint/vscode-known-variables.json`\\nTo update that file, run `./scripts/test-documentation.sh|bat.`', false);\n\t\t}\n\t\tthis.emit('end');\n\t}\n\t);\n}\n\nfunction stylelint() {\n\treturn vfs\n\t\t.src(stylelintFilter, { base: '.', follow: true, allowEmpty: true })\n\t\t.pipe(gulpstylelint((message, isError) => {\n\t\t\tif (isError) {\n\t\t\t\tconsole.error(message);\n\t\t\t} else {\n\t\t\t\tconsole.info(message);\n\t\t\t}\n\t\t}))\n\t\t.pipe(es.through(function () { /* noop, important for the stream to end */ }));\n}\n\nif (require.main === module) {\n\tstylelint().on('error', (err) => {\n\t\tconsole.error();\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/tsconfig.build.json",
    "content": "{\n\t\"extends\": \"./tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": false,\n\t\t\"checkJs\": false,\n\t\t\"noEmit\": false,\n\t\t\"skipLibCheck\": true\n\t},\n\t\"include\": [\n\t\t\"**/*.ts\"\n\t],\n\t\"exclude\": [\n\t\t\"lib/eslint-plugin-vscode/**/*\"\n\t]\n}\n"
  },
  {
    "path": "build/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"es2022\",\n\t\t\"lib\": [\n\t\t\t\"ES2020\"\n\t\t],\n\t\t\"module\": \"nodenext\",\n\t\t\"alwaysStrict\": true,\n\t\t\"removeComments\": false,\n\t\t\"preserveConstEnums\": true,\n\t\t\"sourceMap\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t// enable JavaScript type checking for the language service\n\t\t// use the tsconfig.build.json for compiling which disable JavaScript\n\t\t// type checking so that JavaScript file are not transpiled\n\t\t\"allowJs\": true,\n\t\t\"strict\": true,\n\t\t\"exactOptionalPropertyTypes\": false,\n\t\t\"useUnknownInCatchVariables\": false,\n\t\t\"noUnusedLocals\": true,\n\t\t\"noUnusedParameters\": true,\n\t\t\"newLine\": \"lf\",\n\t\t\"noEmit\": true\n\t},\n\t\"include\": [\n\t\t\"**/*.ts\",\n\t\t\"**/*.js\"\n\t],\n\t\"exclude\": [\n\t\t\"node_modules/**\"\n\t]\n}\n"
  },
  {
    "path": "build/win32/.gitignore",
    "content": "code-processed.iss"
  },
  {
    "path": "build/win32/Cargo.toml",
    "content": "[package]\nname = \"inno_updater\"\nversion = \"0.14.2\"\nauthors = [\"Microsoft <monacotools@microsoft.com>\"]\nbuild = \"build.rs\"\n\n[dependencies]\nbyteorder = \"1.4.3\"\ncrc = \"3.0.1\"\nslog = \"2.7.0\"\nslog-async = \"2.7.0\"\nslog-term = \"2.9.1\"\n\n[target.'cfg(windows)'.dependencies.windows-sys]\nversion = \"0.42\"\nfeatures = [\n    \"Win32_Foundation\",\n    \"Win32_System_Shutdown\",\n    \"Win32_UI_WindowsAndMessaging\",\n    \"Win32_System_Threading\",\n    \"Win32_System_LibraryLoader\",\n    \"Win32_System_Diagnostics_Debug\",\n    \"Win32_Storage_FileSystem\",\n    \"Win32_Security\",\n    \"Win32_System_ProcessStatus\",\n    \"Win32_System_Diagnostics_ToolHelp\"\n]\n\n[profile.release]\nlto = true\npanic = 'abort'\n"
  },
  {
    "path": "build/win32/code.iss",
    "content": "#define RootLicenseFileName FileExists(RepoDir + '\\LICENSE.rtf') ? 'LICENSE.rtf' : 'LICENSE.txt'\n#define LocalizedLanguageFile(Language = \"\") \\\n    DirExists(RepoDir + \"\\licenses\") && Language != \"\" \\\n      ? ('; LicenseFile: \"' + RepoDir + '\\licenses\\LICENSE-' + Language + '.rtf\"') \\\n      : '; LicenseFile: \"' + RepoDir + '\\' + RootLicenseFileName + '\"'\n\n[Setup]\nAppId={#AppId}\nAppName={#NameLong}\nAppVerName={#NameVersion}\nAppPublisher=Microsoft Corporation\nAppPublisherURL=https://code.visualstudio.com/\nAppSupportURL=https://code.visualstudio.com/\nAppUpdatesURL=https://code.visualstudio.com/\nDefaultGroupName={#NameLong}\nAllowNoIcons=yes\nOutputDir={#OutputDir}\nOutputBaseFilename=VSCodeSetup\nCompression=lzma\nSolidCompression=yes\nAppMutex={code:GetAppMutex}\nSetupMutex={#AppMutex}setup\n; this is a // Void icon comment. Old: WizardImageFile=\"{#RepoDir}\\resources\\win32\\inno-big-100.bmp,{#RepoDir}\\resources\\win32\\inno-big-125.bmp,{#RepoDir}\\resources\\win32\\inno-big-150.bmp,{#RepoDir}\\resources\\win32\\inno-big-175.bmp,{#RepoDir}\\resources\\win32\\inno-big-200.bmp,{#RepoDir}\\resources\\win32\\inno-big-225.bmp,{#RepoDir}\\resources\\win32\\inno-big-250.bmp\"\n; this is a // Void icon comment. Old: WizardSmallImageFile=\"{#RepoDir}\\resources\\win32\\inno-small-100.bmp,{#RepoDir}\\resources\\win32\\inno-small-125.bmp,{#RepoDir}\\resources\\win32\\inno-small-150.bmp,{#RepoDir}\\resources\\win32\\inno-small-175.bmp,{#RepoDir}\\resources\\win32\\inno-small-200.bmp,{#RepoDir}\\resources\\win32\\inno-small-225.bmp,{#RepoDir}\\resources\\win32\\inno-small-250.bmp\"\n; COMMENTED OUT WizardImageFile=\"\"\nWizardSmallImageFile=\"{#RepoDir}\\resources\\win32\\inno-void.bmp,{#RepoDir}\\resources\\win32\\inno-void.bmp,{#RepoDir}\\resources\\win32\\inno-void.bmp,{#RepoDir}\\resources\\win32\\inno-void.bmp,{#RepoDir}\\resources\\win32\\inno-void.bmp,{#RepoDir}\\resources\\win32\\inno-void.bmp,{#RepoDir}\\resources\\win32\\inno-void.bmp\"\nSetupIconFile={#RepoDir}\\resources\\win32\\code.ico\nUninstallDisplayIcon={app}\\{#ExeBasename}.exe\nChangesEnvironment=true\nChangesAssociations=true\nMinVersion=10.0\nSourceDir={#SourceDir}\nAppVersion={#Version}\nVersionInfoVersion={#RawVersion}\nShowLanguageDialog=auto\nArchitecturesAllowed={#ArchitecturesAllowed}\nArchitecturesInstallIn64BitMode={#ArchitecturesInstallIn64BitMode}\nWizardStyle=modern\n\n// We've seen an uptick on broken installations from updates which were unable\n// to shutdown VS Code. We rely on the fact that the update signals\n// that VS Code is ready to be shutdown, so we're good to use `force` here.\nCloseApplications=force\n\n#ifdef Sign\nSignTool=esrp\n#endif\n\n#if \"user\" == InstallTarget\nDefaultDirName={userpf}\\{#DirName}\nPrivilegesRequired=lowest\n#else\nDefaultDirName={pf}\\{#DirName}\n#endif\n\n[Languages]\nName: \"english\"; MessagesFile: \"compiler:Default.isl,{#RepoDir}\\build\\win32\\i18n\\messages.en.isl\" {#LocalizedLanguageFile}\nName: \"german\"; MessagesFile: \"compiler:Languages\\German.isl,{#RepoDir}\\build\\win32\\i18n\\messages.de.isl\" {#LocalizedLanguageFile(\"deu\")}\nName: \"spanish\"; MessagesFile: \"compiler:Languages\\Spanish.isl,{#RepoDir}\\build\\win32\\i18n\\messages.es.isl\" {#LocalizedLanguageFile(\"esp\")}\nName: \"french\"; MessagesFile: \"compiler:Languages\\French.isl,{#RepoDir}\\build\\win32\\i18n\\messages.fr.isl\" {#LocalizedLanguageFile(\"fra\")}\nName: \"italian\"; MessagesFile: \"compiler:Languages\\Italian.isl,{#RepoDir}\\build\\win32\\i18n\\messages.it.isl\" {#LocalizedLanguageFile(\"ita\")}\nName: \"japanese\"; MessagesFile: \"compiler:Languages\\Japanese.isl,{#RepoDir}\\build\\win32\\i18n\\messages.ja.isl\" {#LocalizedLanguageFile(\"jpn\")}\nName: \"russian\"; MessagesFile: \"compiler:Languages\\Russian.isl,{#RepoDir}\\build\\win32\\i18n\\messages.ru.isl\" {#LocalizedLanguageFile(\"rus\")}\nName: \"korean\"; MessagesFile: \"{#RepoDir}\\build\\win32\\i18n\\Default.ko.isl,{#RepoDir}\\build\\win32\\i18n\\messages.ko.isl\" {#LocalizedLanguageFile(\"kor\")}\nName: \"simplifiedChinese\"; MessagesFile: \"{#RepoDir}\\build\\win32\\i18n\\Default.zh-cn.isl,{#RepoDir}\\build\\win32\\i18n\\messages.zh-cn.isl\" {#LocalizedLanguageFile(\"chs\")}\nName: \"traditionalChinese\"; MessagesFile: \"{#RepoDir}\\build\\win32\\i18n\\Default.zh-tw.isl,{#RepoDir}\\build\\win32\\i18n\\messages.zh-tw.isl\" {#LocalizedLanguageFile(\"cht\")}\nName: \"brazilianPortuguese\"; MessagesFile: \"compiler:Languages\\BrazilianPortuguese.isl,{#RepoDir}\\build\\win32\\i18n\\messages.pt-br.isl\" {#LocalizedLanguageFile(\"ptb\")}\nName: \"hungarian\"; MessagesFile: \"{#RepoDir}\\build\\win32\\i18n\\Default.hu.isl,{#RepoDir}\\build\\win32\\i18n\\messages.hu.isl\" {#LocalizedLanguageFile(\"hun\")}\nName: \"turkish\"; MessagesFile: \"compiler:Languages\\Turkish.isl,{#RepoDir}\\build\\win32\\i18n\\messages.tr.isl\" {#LocalizedLanguageFile(\"trk\")}\n\n[InstallDelete]\nType: filesandordirs; Name: \"{app}\\resources\\app\\out\"; Check: IsNotBackgroundUpdate\nType: filesandordirs; Name: \"{app}\\resources\\app\\plugins\"; Check: IsNotBackgroundUpdate\nType: filesandordirs; Name: \"{app}\\resources\\app\\extensions\"; Check: IsNotBackgroundUpdate\nType: filesandordirs; Name: \"{app}\\resources\\app\\node_modules\"; Check: IsNotBackgroundUpdate\nType: filesandordirs; Name: \"{app}\\resources\\app\\node_modules.asar.unpacked\"; Check: IsNotBackgroundUpdate\nType: files; Name: \"{app}\\resources\\app\\node_modules.asar\"; Check: IsNotBackgroundUpdate\nType: files; Name: \"{app}\\resources\\app\\Credits_45.0.2454.85.html\"; Check: IsNotBackgroundUpdate\n\n[UninstallDelete]\nType: filesandordirs; Name: \"{app}\\_\"\n\n[Tasks]\nName: \"desktopicon\"; Description: \"{cm:CreateDesktopIcon}\"; GroupDescription: \"{cm:AdditionalIcons}\"; Flags: unchecked\nName: \"quicklaunchicon\"; Description: \"{cm:CreateQuickLaunchIcon}\"; GroupDescription: \"{cm:AdditionalIcons}\"; Flags: unchecked; OnlyBelowVersion: 0,6.1\nName: \"addcontextmenufiles\"; Description: \"{cm:AddContextMenuFiles,{#NameShort}}\"; GroupDescription: \"{cm:Other}\"; Flags: unchecked\nName: \"addcontextmenufolders\"; Description: \"{cm:AddContextMenuFolders,{#NameShort}}\"; GroupDescription: \"{cm:Other}\"; Flags: unchecked; Check: not (IsWindows11OrLater and QualityIsInsiders)\nName: \"associatewithfiles\"; Description: \"{cm:AssociateWithFiles,{#NameShort}}\"; GroupDescription: \"{cm:Other}\"\nName: \"addtopath\"; Description: \"{cm:AddToPath}\"; GroupDescription: \"{cm:Other}\"\nName: \"runcode\"; Description: \"{cm:RunAfter,{#NameShort}}\"; GroupDescription: \"{cm:Other}\"; Check: WizardSilent\n\n[Dirs]\nName: \"{app}\"; AfterInstall: DisableAppDirInheritance\n\n[Files]\nSource: \"*\"; Excludes: \"\\CodeSignSummary*.md,\\tools,\\tools\\*,\\appx,\\appx\\*,\\resources\\app\\product.json\"; DestDir: \"{code:GetDestDir}\"; Flags: ignoreversion recursesubdirs createallsubdirs\nSource: \"tools\\*\"; DestDir: \"{app}\\tools\"; Flags: ignoreversion\nSource: \"{#ProductJsonPath}\"; DestDir: \"{code:GetDestDir}\\resources\\app\"; Flags: ignoreversion\n#ifdef AppxPackageFullname\nSource: \"appx\\*\"; DestDir: \"{app}\\appx\"; BeforeInstall: RemoveAppxPackage; AfterInstall: AddAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater and QualityIsInsiders\n#endif\n\n[Icons]\nName: \"{group}\\{#NameLong}\"; Filename: \"{app}\\{#ExeBasename}.exe\"; AppUserModelID: \"{#AppUserId}\"\nName: \"{autodesktop}\\{#NameLong}\"; Filename: \"{app}\\{#ExeBasename}.exe\"; Tasks: desktopicon; AppUserModelID: \"{#AppUserId}\"\nName: \"{userappdata}\\Microsoft\\Internet Explorer\\Quick Launch\\{#NameLong}\"; Filename: \"{app}\\{#ExeBasename}.exe\"; Tasks: quicklaunchicon; AppUserModelID: \"{#AppUserId}\"\n\n[Run]\nFilename: \"{app}\\{#ExeBasename}.exe\"; Description: \"{cm:LaunchProgram,{#NameLong}}\"; Tasks: runcode; Flags: nowait postinstall; Check: ShouldRunAfterUpdate\nFilename: \"{app}\\{#ExeBasename}.exe\"; Description: \"{cm:LaunchProgram,{#NameLong}}\"; Flags: nowait postinstall; Check: WizardNotSilent\n\n#ifdef AppxPackageFullname\n[UninstallRun]\nFilename: \"powershell.exe\"; Parameters: \"Invoke-Command -ScriptBlock {{Remove-AppxPackage -Package \"\"{#AppxPackageFullname}\"\"}\"; Check: IsWindows11OrLater and QualityIsInsiders; Flags: shellexec waituntilterminated runhidden\n#endif\n\n[Registry]\n#if \"user\" == InstallTarget\n#define SoftwareClassesRootKey \"HKCU\"\n#else\n#define SoftwareClassesRootKey \"HKLM\"\n#endif\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ascx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ascx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.ascx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ascx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,ASCX}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ascx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ascx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\xml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ascx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ascx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.asp\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.asp\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.asp\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.asp\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,ASP}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.asp\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.asp\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.asp\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.asp\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.aspx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.aspx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.aspx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.aspx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,ASPX}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.aspx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.aspx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.aspx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.aspx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.bash\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Bash}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash_login\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash_login\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.bash_login\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_login\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Bash Login}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_login\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_login\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_login\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_login\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash_logout\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash_logout\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.bash_logout\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_logout\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Bash Logout}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_logout\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_logout\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_logout\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_logout\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash_profile\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bash_profile\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.bash_profile\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_profile\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Bash Profile}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_profile\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_profile\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_profile\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bash_profile\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bashrc\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bashrc\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.bashrc\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bashrc\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Bash RC}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bashrc\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bashrc\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bashrc\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bashrc\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bib\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bib\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.bib\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bib\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,BibTeX}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bib\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bib\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bib\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bib\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bowerrc\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.bowerrc\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.bowerrc\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bowerrc\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Bower RC}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bowerrc\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bowerrc\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\bower.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bowerrc\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.bowerrc\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.c++\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.c++\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.c++\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c++\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c++\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c++\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c++\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.c\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.c\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.c\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\c.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.c\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cc\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cc\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cc\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cc\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cc\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cc\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cc\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cc\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cfg\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cfg\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cfg\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cfg\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Configuration}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cfg\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cfg\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\config.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cfg\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cfg\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cjs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cjs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cjs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cjs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JavaScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cjs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cjs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\javascript.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cjs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cjs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.clj\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.clj\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.clj\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clj\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Clojure}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clj\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clj\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clj\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clj\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cljs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cljs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cljs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,ClojureScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cljx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cljx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cljx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,CLJX}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cljx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.clojure\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.clojure\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.clojure\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clojure\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Clojure}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clojure\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clojure\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clojure\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.clojure\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cls\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cls\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cls\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cls\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,LaTeX}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cls\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cls\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cls\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cls\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.code-workspace\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.code-workspace\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.code-workspace\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.code-workspace\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Code Workspace}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.code\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.code-workspace\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.code-workspace\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.code-workspace\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cmake\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cmake\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cmake\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cmake\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,CMake}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cmake\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cmake\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cmake\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cmake\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.coffee\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.coffee\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.coffee\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.coffee\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,CoffeeScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.coffee\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.coffee\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.coffee\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.coffee\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.config\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.config\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.config\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.config\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Configuration}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.config\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.config\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\config.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.config\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.config\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.containerfile\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.containerfile\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.containerfile\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.containerfile\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Containerfile}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.containerfile\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.containerfile\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.containerfile\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cpp\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cpp\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cpp\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cpp\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cpp\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cpp\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cpp\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cpp\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C#}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\csharp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cshtml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cshtml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cshtml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cshtml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,CSHTML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cshtml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cshtml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cshtml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cshtml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.csproj\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.csproj\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.csproj\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csproj\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C# Project}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csproj\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csproj\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\xml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csproj\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csproj\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.css\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.css\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.css\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.css\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,CSS}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.css\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.css\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\css.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.css\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.css\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.csv\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.csv\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.csv\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csv\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Comma Separated Values}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csv\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csv\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csv\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csv\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.csx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.csx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.csx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C# Script}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\csharp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.csx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ctp\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ctp\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.ctp\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ctp\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,CakePHP Template}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ctp\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ctp\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ctp\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ctp\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cxx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.cxx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.cxx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cxx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cxx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cxx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cxx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.cxx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dart\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dart\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.dart\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dart\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Dart}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dart\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dart\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dart\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dart\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.diff\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.diff\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.diff\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.diff\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Diff}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.diff\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.diff\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.diff\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.diff\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dockerfile\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dockerfile\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.dockerfile\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dockerfile\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Dockerfile}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dockerfile\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dockerfile\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dockerfile\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dockerfile\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dot\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dot\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.dot\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dot\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Dot}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dot\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dot\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dot\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dot\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dtd\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.dtd\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.dtd\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dtd\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Document Type Definition}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dtd\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dtd\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\xml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dtd\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.dtd\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.editorconfig\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.editorconfig\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.editorconfig\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.editorconfig\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Editor Config}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.editorconfig\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.editorconfig\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\config.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.editorconfig\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.editorconfig\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.edn\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.edn\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.edn\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.edn\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Extensible Data Notation}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.edn\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.edn\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.edn\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.edn\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.erb\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.erb\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.erb\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.erb\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Ruby}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.erb\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.erb\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\ruby.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.erb\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.erb\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.eyaml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.eyaml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.eyaml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyaml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Hiera Eyaml}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyaml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyaml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\yaml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyaml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyaml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.eyml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.eyml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.eyml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Hiera Eyaml}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\yaml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.eyml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.fs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,F#}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fsi\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fsi\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.fsi\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsi\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,F# Signature}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsi\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsi\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsi\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsi\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fsscript\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fsscript\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.fsscript\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsscript\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,F# Script}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsscript\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsscript\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsscript\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsscript\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fsx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.fsx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.fsx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,F# Script}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.fsx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gemspec\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gemspec\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.gemspec\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gemspec\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Gemspec}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gemspec\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gemspec\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\ruby.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gemspec\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gemspec\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gitattributes\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gitattributes\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.gitattributes\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitattributes\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Git Attributes}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitattributes\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitattributes\"; ValueType: string; ValueName: \"AlwaysShowExt\"; ValueData: \"\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitattributes\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\config.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitattributes\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitattributes\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gitconfig\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gitconfig\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.gitconfig\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitconfig\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Git Config}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitconfig\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitconfig\"; ValueType: string; ValueName: \"AlwaysShowExt\"; ValueData: \"\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitconfig\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\config.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitconfig\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitconfig\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gitignore\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gitignore\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.gitignore\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitignore\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Git Ignore}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitignore\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitignore\"; ValueType: string; ValueName: \"AlwaysShowExt\"; ValueData: \"\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitignore\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\config.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitignore\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gitignore\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.go\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.go\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.go\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.go\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Go}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.go\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.go\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\go.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.go\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.go\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gradle\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.gradle\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.gradle\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gradle\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Gradle}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gradle\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gradle\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gradle\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.gradle\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.groovy\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.groovy\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.groovy\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.groovy\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Groovy}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.groovy\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.groovy\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.groovy\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.groovy\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.h\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.h\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.h\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C Header}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\c.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.handlebars\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.handlebars\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.handlebars\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.handlebars\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Handlebars}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.handlebars\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.handlebars\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.handlebars\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.handlebars\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hbs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hbs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.hbs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hbs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Handlebars}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hbs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hbs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hbs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hbs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.h++\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.h++\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.h++\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h++\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++ Header}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h++\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h++\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.h++\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hh\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hh\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.hh\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hh\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++ Header}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hh\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hh\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hh\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hh\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hpp\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hpp\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.hpp\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hpp\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++ Header}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hpp\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hpp\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hpp\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hpp\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.htm\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.htm\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.htm\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.htm\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,HTML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.htm\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.htm\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.htm\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.htm\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.html\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.html\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.html\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.html\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,HTML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.html\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.html\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.html\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.html\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hxx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.hxx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.hxx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hxx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,C++ Header}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hxx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hxx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\cpp.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hxx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.hxx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ini\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ini\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.ini\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ini\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,INI}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ini\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ini\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\config.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ini\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ini\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ipynb\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ipynb\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.ipynb\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ipynb\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Jupyter}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ipynb\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ipynb\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ipynb\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ipynb\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jade\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jade\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.jade\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jade\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Jade}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jade\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jade\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\jade.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jade\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jade\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jav\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jav\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.jav\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jav\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Java}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jav\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jav\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\java.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jav\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jav\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.java\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.java\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.java\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.java\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Java}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.java\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.java\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\java.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.java\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.java\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.js\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.js\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.js\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.js\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JavaScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.js\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.js\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\javascript.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.js\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.js\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jsx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jsx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.jsx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JavaScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\react.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jscsrc\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jscsrc\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.jscsrc\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jscsrc\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JSCS RC}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jscsrc\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jscsrc\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\javascript.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jscsrc\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jscsrc\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jshintrc\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jshintrc\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.jshintrc\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshintrc\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JSHint RC}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshintrc\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshintrc\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\javascript.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshintrc\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshintrc\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jshtm\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jshtm\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.jshtm\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshtm\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JavaScript HTML Template}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshtm\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshtm\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshtm\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jshtm\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.json\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.json\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.json\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.json\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JSON}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.json\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.json\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\json.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.json\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.json\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jsp\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.jsp\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.jsp\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsp\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Java Server Pages}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsp\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsp\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsp\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.jsp\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.less\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.less\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.less\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.less\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,LESS}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.less\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.less\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\less.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.less\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.less\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.log\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.log\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.log\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.log\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Log file}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.log\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.log\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.log\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.log\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.lua\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.lua\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.lua\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.lua\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Lua}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.lua\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.lua\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.lua\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.lua\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.m\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.m\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.m\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.m\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Objective C}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.m\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.m\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.m\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.m\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.makefile\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.makefile\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.makefile\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.makefile\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Makefile}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.makefile\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.makefile\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.makefile\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.makefile\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.markdown\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.markdown\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.markdown\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.markdown\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.markdown\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.markdown\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.markdown\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.markdown\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.md\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.md\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.md\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.md\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.md\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.md\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.md\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.md\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdoc\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdoc\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mdoc\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdoc\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,MDoc}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdoc\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdoc\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdoc\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdoc\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdown\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdown\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mdown\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdown\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdown\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdown\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdown\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdown\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdtext\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdtext\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mdtext\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtext\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtext\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtext\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtext\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtext\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdtxt\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdtxt\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mdtxt\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtxt\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtxt\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtxt\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtxt\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdtxt\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdwn\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mdwn\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mdwn\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdwn\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdwn\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdwn\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdwn\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mdwn\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mk\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mk\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mk\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mk\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Makefile}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mk\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mk\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mk\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mk\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mkd\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mkd\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mkd\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkd\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkd\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkd\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkd\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkd\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mkdn\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mkdn\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mkdn\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkdn\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Markdown}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkdn\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkdn\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\markdown.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkdn\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mkdn\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.ml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,OCaml}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mli\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mli\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mli\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mli\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,OCaml}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mli\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mli\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mli\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mli\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mjs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.mjs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.mjs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mjs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,JavaScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mjs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mjs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\javascript.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mjs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.mjs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.npmignore\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.npmignore\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.npmignore\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.npmignore\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,NPM Ignore}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.npmignore\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.npmignore\"; ValueType: string; ValueName: \"AlwaysShowExt\"; ValueData: \"\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.npmignore\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.npmignore\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.npmignore\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.php\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.php\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.php\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.php\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,PHP}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.php\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.php\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\php.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.php\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.php\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.phtml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.phtml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.phtml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.phtml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,PHP HTML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.phtml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.phtml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.phtml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.phtml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pl\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pl\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.pl\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pl6\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pl6\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.pl6\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl6\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl 6}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl6\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl6\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl6\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pl6\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.plist\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.plist\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.plist\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.plist\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Properties file}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.plist\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.plist\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.plist\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.plist\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pm\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pm\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.pm\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl Module}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pm6\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pm6\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.pm6\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm6\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl 6 Module}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm6\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm6\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm6\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pm6\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pod\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pod\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.pod\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pod\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl POD}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pod\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pod\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pod\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pod\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pp\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pp\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.pp\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pp\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pp\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pp\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pp\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pp\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.profile\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.profile\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.profile\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.profile\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Profile}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.profile\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.profile\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.profile\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.profile\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.properties\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.properties\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.properties\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.properties\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Properties}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.properties\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.properties\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.properties\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.properties\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ps1\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ps1\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.ps1\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ps1\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,PowerShell}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ps1\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ps1\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\powershell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ps1\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ps1\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.psd1\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.psd1\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.psd1\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psd1\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,PowerShell Module Manifest}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psd1\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psd1\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\powershell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psd1\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psd1\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.psgi\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.psgi\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.psgi\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psgi\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl CGI}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psgi\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psgi\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psgi\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psgi\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.psm1\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.psm1\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.psm1\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psm1\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,PowerShell Module}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psm1\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psm1\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\powershell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psm1\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.psm1\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.py\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.py\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.py\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.py\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Python}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.py\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.py\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\python.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.py\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.py\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pyi\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.pyi\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.pyi\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pyi\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Python}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pyi\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pyi\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\python.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pyi\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.pyi\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.r\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.r\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.r\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.r\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,R}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.r\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.r\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.r\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.r\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rb\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rb\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.rb\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rb\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Ruby}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rb\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rb\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\ruby.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rb\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rb\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rhistory\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rhistory\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.rhistory\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rhistory\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,R History}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rhistory\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rhistory\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rhistory\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rhistory\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rprofile\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rprofile\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.rprofile\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rprofile\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,R Profile}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rprofile\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rprofile\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rprofile\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rprofile\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.rs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Rust}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rst\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rst\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.rst\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rst\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Restructured Text}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rst\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rst\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rst\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rst\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rt\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.rt\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.rt\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rt\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Rich Text}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rt\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rt\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rt\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.rt\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.sass\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.sass\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.sass\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sass\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Sass}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sass\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sass\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\sass.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sass\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sass\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.scss\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.scss\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.scss\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.scss\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Sass}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.scss\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.scss\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\sass.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.scss\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.scss\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.sh\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.sh\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.sh\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sh\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,SH}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sh\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sh\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sh\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sh\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.shtml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.shtml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.shtml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.shtml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,SHTML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.shtml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.shtml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.shtml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.shtml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.sql\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.sql\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.sql\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sql\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,SQL}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sql\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sql\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\sql.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sql\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.sql\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.svg\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.svg\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.svg\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.svg\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,SVG}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.svg\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.svg\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.svg\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.svg\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.t\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.t\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.t\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.t\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Perl}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.t\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.t\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.t\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.t\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.tex\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.tex\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.tex\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tex\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,LaTeX}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tex\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tex\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tex\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tex\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ts\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.ts\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.ts\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ts\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,TypeScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ts\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ts\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\typescript.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ts\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.ts\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.toml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.toml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.toml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.toml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Toml}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.toml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.toml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.toml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.toml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.tsx\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.tsx\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.tsx\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tsx\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,TypeScript}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tsx\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tsx\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\react.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tsx\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.tsx\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.txt\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.txt\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.txt\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.txt\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Text}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.txt\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.txt\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.txt\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.txt\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.vb\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.vb\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.vb\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vb\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Visual Basic}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vb\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vb\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vb\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vb\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.vue\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.vue\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.vue\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vue\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,VUE}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vue\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vue\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\vue.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vue\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.vue\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.wxi\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.wxi\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.wxi\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxi\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,WiX Include}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxi\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxi\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxi\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxi\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.wxl\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.wxl\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.wxl\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxl\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,WiX Localization}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxl\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxl\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxl\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxl\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.wxs\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.wxs\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.wxs\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxs\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,WiX}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxs\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxs\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxs\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.wxs\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.xaml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.xaml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.xaml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xaml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,XAML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xaml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xaml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\xml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xaml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xaml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.xhtml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.xhtml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.xhtml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xhtml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,HTML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xhtml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xhtml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\html.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xhtml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xhtml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.xml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.xml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.xml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,XML}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\xml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.xml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.yaml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.yaml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.yaml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yaml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Yaml}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yaml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yaml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\yaml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yaml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yaml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.yml\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.yml\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.yml\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yml\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,Yaml}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yml\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yml\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\yaml.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yml\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.yml\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.zsh\\OpenWithProgids\"; ValueType: none; ValueName: \"{#RegValueName}\"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\.zsh\\OpenWithProgids\"; ValueType: string; ValueName: \"{#RegValueName}.zsh\"; ValueData: \"\"; Flags: uninsdeletevalue; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.zsh\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,ZSH}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.zsh\"; ValueType: string; ValueName: \"AppUserModelID\"; ValueData: \"{#AppUserId}\"; Flags: uninsdeletekey; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.zsh\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\shell.ico\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.zsh\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"; Tasks: associatewithfiles\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}.zsh\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: associatewithfiles\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}SourceFile\"; ValueType: string; ValueName: \"\"; ValueData: \"{cm:SourceFile,{#NameLong}}\"; Flags: uninsdeletekey\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}SourceFile\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}SourceFile\\shell\\open\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}SourceFile\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\Applications\\{#ExeBasename}.exe\"; ValueType: none; ValueName: \"\"; Flags: uninsdeletekey\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\Applications\\{#ExeBasename}.exe\\DefaultIcon\"; ValueType: string; ValueName: \"\"; ValueData: \"{app}\\resources\\app\\resources\\win32\\default.ico\"\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\Applications\\{#ExeBasename}.exe\\shell\\open\"; ValueType: string; ValueName: \"Icon\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\"\"\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\Applications\\{#ExeBasename}.exe\\shell\\open\\command\"; ValueType: string; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"\n\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\{#RegValueName}ContextMenu\"; ValueType: expandsz; ValueName: \"Title\"; ValueData: \"{cm:OpenWithCodeContextMenu,{#ShellNameShort}}\"; Tasks: addcontextmenufiles; Flags: uninsdeletekey; Check: IsWindows11OrLater and QualityIsInsiders\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\*\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"{cm:OpenWithCodeContextMenu,{#ShellNameShort}}\"; Tasks: addcontextmenufiles; Flags: uninsdeletekey; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\*\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"Icon\"; ValueData: \"{app}\\{#ExeBasename}.exe\"; Tasks: addcontextmenufiles; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\*\\shell\\{#RegValueName}\\command\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%1\"\"\"; Tasks: addcontextmenufiles; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\directory\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"{cm:OpenWithCodeContextMenu,{#ShellNameShort}}\"; Tasks: addcontextmenufolders; Flags: uninsdeletekey; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\directory\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"Icon\"; ValueData: \"{app}\\{#ExeBasename}.exe\"; Tasks: addcontextmenufolders; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\directory\\shell\\{#RegValueName}\\command\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%V\"\"\"; Tasks: addcontextmenufolders; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\directory\\background\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"{cm:OpenWithCodeContextMenu,{#ShellNameShort}}\"; Tasks: addcontextmenufolders; Flags: uninsdeletekey; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\directory\\background\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"Icon\"; ValueData: \"{app}\\{#ExeBasename}.exe\"; Tasks: addcontextmenufolders; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\directory\\background\\shell\\{#RegValueName}\\command\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%V\"\"\"; Tasks: addcontextmenufolders; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\Drive\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"{cm:OpenWithCodeContextMenu,{#ShellNameShort}}\"; Tasks: addcontextmenufolders; Flags: uninsdeletekey; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\Drive\\shell\\{#RegValueName}\"; ValueType: expandsz; ValueName: \"Icon\"; ValueData: \"{app}\\{#ExeBasename}.exe\"; Tasks: addcontextmenufolders; Check: not (IsWindows11OrLater and QualityIsInsiders)\nRoot: {#SoftwareClassesRootKey}; Subkey: \"Software\\Classes\\Drive\\shell\\{#RegValueName}\\command\"; ValueType: expandsz; ValueName: \"\"; ValueData: \"\"\"{app}\\{#ExeBasename}.exe\"\" \"\"%V\"\"\"; Tasks: addcontextmenufolders; Check: not (IsWindows11OrLater and QualityIsInsiders)\n\n; Environment\n#if \"user\" == InstallTarget\n#define EnvironmentRootKey \"HKCU\"\n#define EnvironmentKey \"Environment\"\n#define Uninstall64RootKey \"HKCU64\"\n#define Uninstall32RootKey \"HKCU32\"\n#else\n#define EnvironmentRootKey \"HKLM\"\n#define EnvironmentKey \"System\\CurrentControlSet\\Control\\Session Manager\\Environment\"\n#define Uninstall64RootKey \"HKLM64\"\n#define Uninstall32RootKey \"HKLM32\"\n#endif\n\nRoot: {#EnvironmentRootKey}; Subkey: \"{#EnvironmentKey}\"; ValueType: expandsz; ValueName: \"Path\"; ValueData: \"{code:AddToPath|{app}\\bin}\"; Tasks: addtopath; Check: NeedsAddToPath(ExpandConstant('{app}\\bin'))\n\n[Code]\nfunction IsBackgroundUpdate(): Boolean;\nbegin\n  Result := ExpandConstant('{param:update|false}') <> 'false';\nend;\n\nfunction IsNotBackgroundUpdate(): Boolean;\nbegin\n  Result := not IsBackgroundUpdate();\nend;\n\n// Don't allow installing conflicting architectures\nfunction InitializeSetup(): Boolean;\nvar\n  RegKey: String;\n  ThisArch: String;\n  AltArch: String;\nbegin\n  Result := True;\n\n  #if \"user\" == InstallTarget\n    if not WizardSilent() and IsAdmin() then begin\n      if MsgBox('This User Installer is not meant to be run as an Administrator. If you would like to install VS Code for all users in this system, download the System Installer instead from https://code.visualstudio.com. Are you sure you want to continue?', mbError, MB_OKCANCEL) = IDCANCEL then begin\n        Result := False;\n      end;\n    end;\n  #endif\n\n  #if \"user\" == InstallTarget\n    #if \"arm64\" == Arch\n      #define IncompatibleArchRootKey \"HKLM32\"\n    #else\n      #define IncompatibleArchRootKey \"HKLM64\"\n    #endif\n\n    if Result and not WizardSilent() then begin\n      RegKey := 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + copy('{#IncompatibleTargetAppId}', 2, 38) + '_is1';\n\n      if RegKeyExists({#IncompatibleArchRootKey}, RegKey) then begin\n        if MsgBox('{#NameShort} is already installed on this system for all users. We recommend first uninstalling that version before installing this one. Are you sure you want to continue the installation?', mbConfirmation, MB_YESNO) = IDNO then begin\n          Result := False;\n        end;\n      end;\n    end;\n  #endif\n\nend;\n\nfunction WizardNotSilent(): Boolean;\nbegin\n  Result := not WizardSilent();\nend;\n\n// Updates\n\nvar\n\tShouldRestartTunnelService: Boolean;\n\nfunction StopTunnelOtherProcesses(): Boolean;\nvar\n\tWaitCounter: Integer;\n\tTaskKilled: Integer;\nbegin\n\tLog('Stopping all tunnel services (at ' + ExpandConstant('\"{app}\\bin\\{#TunnelApplicationName}.exe\"') + ')');\n\tShellExec('', 'powershell.exe', '-Command \"Get-WmiObject Win32_Process | Where-Object { $_.ExecutablePath -eq ' + ExpandConstant('''{app}\\bin\\{#TunnelApplicationName}.exe''') + ' } | Select @{Name=''Id''; Expression={$_.ProcessId}} | Stop-Process -Force\"', '', SW_HIDE, ewWaitUntilTerminated, TaskKilled)\n\n\tWaitCounter := 10;\n\twhile (WaitCounter > 0) and CheckForMutexes('{#TunnelMutex}') do\n\tbegin\n\t\tLog('Tunnel process is is still running, waiting');\n\t\tSleep(500);\n\t\tWaitCounter := WaitCounter - 1\n\tend;\n\n\tif CheckForMutexes('{#TunnelMutex}') then\n\t\tbegin\n\t\t\tLog('Unable to stop tunnel processes');\n\t\t\tResult := False;\n\t\tend\n\telse\n\t\tResult := True;\nend;\n\nprocedure StopTunnelServiceIfNeeded();\nvar\n\tStopServiceResultCode: Integer;\n\tWaitCounter: Integer;\nbegin\n  ShouldRestartTunnelService := False;\n \tif CheckForMutexes('{#TunnelServiceMutex}') then begin\n\t\t// stop the tunnel service\n\t\tLog('Stopping the tunnel service using ' + ExpandConstant('\"{app}\\bin\\{#ApplicationName}.cmd\"'));\n\t\tShellExec('', ExpandConstant('\"{app}\\bin\\{#ApplicationName}.cmd\"'), 'tunnel service uninstall', '', SW_HIDE, ewWaitUntilTerminated, StopServiceResultCode);\n\n\t\tLog('Stopping the tunnel service completed with result code ' + IntToStr(StopServiceResultCode));\n\n\t\tWaitCounter := 10;\n\t\twhile (WaitCounter > 0) and CheckForMutexes('{#TunnelServiceMutex}') do\n\t\tbegin\n\t\t\tLog('Tunnel service is still running, waiting');\n\t\t\tSleep(500);\n\t\t\tWaitCounter := WaitCounter - 1\n\t\tend;\n\t\tif CheckForMutexes('{#TunnelServiceMutex}') then\n\t\t\tLog('Unable to stop tunnel service')\n\t\telse\n\t\t\tShouldRestartTunnelService := True;\n\tend\nend;\n\n\n// called before the wizard checks for running application\nfunction PrepareToInstall(var NeedsRestart: Boolean): String;\nbegin\n  if IsNotBackgroundUpdate() then\n    StopTunnelServiceIfNeeded();\n\n  if IsNotBackgroundUpdate() and not StopTunnelOtherProcesses() then\n     Result := '{#NameShort} is still running a tunnel process. Please stop the tunnel before installing.'\n  else\n  \tResult := '';\nend;\n\n// VS Code will create a flag file before the update starts (/update=C:\\foo\\bar)\n// - if the file exists at this point, the user quit Code before the update finished, so don't start Code after update\n// - otherwise, the user has accepted to apply the update and Code should start\nfunction LockFileExists(): Boolean;\nbegin\n  Result := FileExists(ExpandConstant('{param:update}'))\nend;\n\nfunction ShouldRunAfterUpdate(): Boolean;\nbegin\n  if IsBackgroundUpdate() then\n    Result := not LockFileExists()\n  else\n    Result := True;\nend;\n\nfunction IsWindows11OrLater(): Boolean;\nbegin\n  Result := (GetWindowsVersion >= $0A0055F0);\nend;\n\nfunction GetAppMutex(Value: string): string;\nbegin\n  if IsBackgroundUpdate() then\n    Result := ''\n  else\n    Result := '{#AppMutex}';\nend;\n\nfunction GetDestDir(Value: string): string;\nbegin\n  if IsBackgroundUpdate() then\n    Result := ExpandConstant('{app}\\_')\n  else\n    Result := ExpandConstant('{app}');\nend;\n\nfunction BoolToStr(Value: Boolean): String;\nbegin\n  if Value then\n    Result := 'true'\n  else\n    Result := 'false';\nend;\n\nfunction QualityIsInsiders(): boolean;\nbegin\n  if '{#Quality}' = 'insider' then\n    Result := True\n  else\n    Result := False;\nend;\n\n#ifdef AppxPackageFullname\nprocedure AddAppxPackage();\nvar\n  AddAppxPackageResultCode: Integer;\nbegin\n  if WizardIsTaskSelected('addcontextmenufiles') then begin\n    ShellExec('', 'powershell.exe', '-Command ' + AddQuotes('Add-AppxPackage -Path ''' + ExpandConstant('{app}\\appx\\{#AppxPackage}') + ''' -ExternalLocation ''' + ExpandConstant('{app}\\appx') + ''''), '', SW_HIDE, ewWaitUntilTerminated, AddAppxPackageResultCode);\n    RegDeleteKeyIncludingSubkeys({#EnvironmentRootKey}, 'Software\\Classes\\*\\shell\\{#RegValueName}');\n    RegDeleteKeyIncludingSubkeys({#EnvironmentRootKey}, 'Software\\Classes\\directory\\shell\\{#RegValueName}');\n    RegDeleteKeyIncludingSubkeys({#EnvironmentRootKey}, 'Software\\Classes\\directory\\background\\shell\\{#RegValueName}');\n    RegDeleteKeyIncludingSubkeys({#EnvironmentRootKey}, 'Software\\Classes\\Drive\\shell\\{#RegValueName}');\n  end;\nend;\n\nprocedure RemoveAppxPackage();\nvar\n  RemoveAppxPackageResultCode: Integer;\nbegin\n  ShellExec('', 'powershell.exe', '-Command ' + AddQuotes('Remove-AppxPackage -Package ''{#AppxPackageFullname}'''), '', SW_HIDE, ewWaitUntilTerminated, RemoveAppxPackageResultCode);\n  if not WizardIsTaskSelected('addcontextmenufiles') then begin\n    RegDeleteKeyIncludingSubkeys({#EnvironmentRootKey}, 'Software\\Classes\\{#RegValueName}ContextMenu');\n  end;\nend;\n#endif\n\nprocedure CurStepChanged(CurStep: TSetupStep);\nvar\n  UpdateResultCode: Integer;\n\tStartServiceResultCode: Integer;\nbegin\n  if CurStep = ssPostInstall then\n  begin\n    if IsBackgroundUpdate() then\n    begin\n      CreateMutex('{#AppMutex}-ready');\n\n      Log('Checking whether application is still running...');\n      while (CheckForMutexes('{#AppMutex}')) do\n      begin\n        Sleep(1000)\n      end;\n      Log('Application appears not to be running.');\n\n      StopTunnelServiceIfNeeded();\n\n      Exec(ExpandConstant('{app}\\tools\\inno_updater.exe'), ExpandConstant('\"{app}\\{#ExeBasename}.exe\" ' + BoolToStr(LockFileExists()) + ' \"{cm:UpdatingVisualStudioCode}\"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode);\n    end;\n\n    if ShouldRestartTunnelService then\n    begin\n      // start the tunnel service\n      Log('Restarting the tunnel service...');\n      ShellExec('', ExpandConstant('\"{app}\\bin\\{#ApplicationName}.cmd\"'), 'tunnel service install', '', SW_HIDE, ewWaitUntilTerminated, StartServiceResultCode);\n      Log('Starting the tunnel service completed with result code ' + IntToStr(StartServiceResultCode));\n      ShouldRestartTunnelService := False\n    end;\n  end;\nend;\n\n// https://stackoverflow.com/a/23838239/261019\nprocedure Explode(var Dest: TArrayOfString; Text: String; Separator: String);\nvar\n  i, p: Integer;\nbegin\n  i := 0;\n  repeat\n    SetArrayLength(Dest, i+1);\n    p := Pos(Separator,Text);\n    if p > 0 then begin\n      Dest[i] := Copy(Text, 1, p-1);\n      Text := Copy(Text, p + Length(Separator), Length(Text));\n      i := i + 1;\n    end else begin\n      Dest[i] := Text;\n      Text := '';\n    end;\n  until Length(Text)=0;\nend;\n\nfunction NeedsAddToPath(VSCode: string): boolean;\nvar\n  OrigPath: string;\nbegin\n  if not RegQueryStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', OrigPath)\n  then begin\n    Result := True;\n    exit;\n  end;\n  Result := Pos(';' + VSCode + ';', ';' + OrigPath + ';') = 0;\nend;\n\nfunction AddToPath(VSCode: string): string;\nvar\n  OrigPath: string;\nbegin\n  RegQueryStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', OrigPath)\n\n  if (Length(OrigPath) > 0) and (OrigPath[Length(OrigPath)] = ';') then\n    Result := OrigPath + VSCode\n  else\n    Result := OrigPath + ';' + VSCode\nend;\n\nprocedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);\nvar\n  Path: string;\n  VSCodePath: string;\n  Parts: TArrayOfString;\n  NewPath: string;\n  i: Integer;\nbegin\n  if not CurUninstallStep = usUninstall then begin\n    exit;\n  end;\n  if not RegQueryStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', Path)\n  then begin\n    exit;\n  end;\n  NewPath := '';\n  VSCodePath := ExpandConstant('{app}\\bin')\n  Explode(Parts, Path, ';');\n  for i:=0 to GetArrayLength(Parts)-1 do begin\n    if CompareText(Parts[i], VSCodePath) <> 0 then begin\n      NewPath := NewPath + Parts[i];\n\n      if i < GetArrayLength(Parts) - 1 then begin\n        NewPath := NewPath + ';';\n      end;\n    end;\n  end;\n  RegWriteExpandStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', NewPath);\nend;\n\n#ifdef Debug\n  #expr SaveToFile(AddBackslash(SourcePath) + \"code-processed.iss\")\n#endif\n\n// https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/icacls\n// https://docs.microsoft.com/en-US/windows/security/identity-protection/access-control/security-identifiers\nprocedure DisableAppDirInheritance();\nvar\n  ResultCode: Integer;\n  Permissions: string;\nbegin\n  Permissions := '/grant:r \"*S-1-5-18:(OI)(CI)F\" /grant:r \"*S-1-5-32-544:(OI)(CI)F\" /grant:r \"*S-1-5-11:(OI)(CI)RX\" /grant:r \"*S-1-5-32-545:(OI)(CI)RX\"';\n\n  #if \"user\" == InstallTarget\n    Permissions := Permissions + Format(' /grant:r \"*S-1-3-0:(OI)(CI)F\" /grant:r \"%s:(OI)(CI)F\"', [GetUserNameString()]);\n  #endif\n\n  Exec(ExpandConstant('{sys}\\icacls.exe'), ExpandConstant('\"{app}\" /inheritancelevel:r ') + Permissions, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);\nend;\n"
  },
  {
    "path": "build/win32/explorer-appx-fetcher.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.downloadExplorerAppx = downloadExplorerAppx;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst debug_1 = __importDefault(require(\"debug\"));\nconst extract_zip_1 = __importDefault(require(\"extract-zip\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst get_1 = require(\"@electron/get\");\nconst root = path_1.default.dirname(path_1.default.dirname(__dirname));\nconst d = (0, debug_1.default)('explorer-appx-fetcher');\nasync function downloadExplorerAppx(outDir, quality = 'stable', targetArch = 'x64') {\n    const fileNamePrefix = quality === 'insider' ? 'code_insiders' : 'code';\n    const fileName = `${fileNamePrefix}_explorer_${targetArch}.zip`;\n    if (await fs_1.default.existsSync(path_1.default.resolve(outDir, 'resources.pri'))) {\n        return;\n    }\n    if (!await fs_1.default.existsSync(outDir)) {\n        await fs_1.default.mkdirSync(outDir, { recursive: true });\n    }\n    d(`downloading ${fileName}`);\n    const artifact = await (0, get_1.downloadArtifact)({\n        isGeneric: true,\n        version: '3.0.4',\n        artifactName: fileName,\n        unsafelyDisableChecksums: true,\n        mirrorOptions: {\n            mirror: 'https://github.com/microsoft/vscode-explorer-command/releases/download/',\n            customDir: '3.0.4',\n            customFilename: fileName\n        }\n    });\n    d(`unpacking from ${fileName}`);\n    await (0, extract_zip_1.default)(artifact, { dir: fs_1.default.realpathSync(outDir) });\n}\nasync function main(outputDir) {\n    const arch = process.env['VSCODE_ARCH'];\n    if (!outputDir) {\n        throw new Error('Required build env not set');\n    }\n    const product = JSON.parse(fs_1.default.readFileSync(path_1.default.join(root, 'product.json'), 'utf8'));\n    await downloadExplorerAppx(outputDir, product.quality, arch);\n}\nif (require.main === module) {\n    main(process.argv[2]).catch(err => {\n        console.error(err);\n        process.exit(1);\n    });\n}\n//# sourceMappingURL=explorer-appx-fetcher.js.map"
  },
  {
    "path": "build/win32/explorer-appx-fetcher.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport fs from 'fs';\nimport debug from 'debug';\nimport extract from 'extract-zip';\nimport path from 'path';\nimport { downloadArtifact } from '@electron/get';\n\nconst root = path.dirname(path.dirname(__dirname));\n\nconst d = debug('explorer-appx-fetcher');\n\nexport async function downloadExplorerAppx(outDir: string, quality: string = 'stable', targetArch: string = 'x64'): Promise<void> {\n\tconst fileNamePrefix = quality === 'insider' ? 'code_insiders' : 'code';\n\tconst fileName = `${fileNamePrefix}_explorer_${targetArch}.zip`;\n\n\tif (await fs.existsSync(path.resolve(outDir, 'resources.pri'))) {\n\t\treturn;\n\t}\n\n\tif (!await fs.existsSync(outDir)) {\n\t\tawait fs.mkdirSync(outDir, { recursive: true });\n\t}\n\n\td(`downloading ${fileName}`);\n\tconst artifact = await downloadArtifact({\n\t\tisGeneric: true,\n\t\tversion: '3.0.4',\n\t\tartifactName: fileName,\n\t\tunsafelyDisableChecksums: true,\n\t\tmirrorOptions: {\n\t\t\tmirror: 'https://github.com/microsoft/vscode-explorer-command/releases/download/',\n\t\t\tcustomDir: '3.0.4',\n\t\t\tcustomFilename: fileName\n\t\t}\n\t});\n\n\td(`unpacking from ${fileName}`);\n\tawait extract(artifact, { dir: fs.realpathSync(outDir) });\n}\n\nasync function main(outputDir?: string): Promise<void> {\n\tconst arch = process.env['VSCODE_ARCH'];\n\n\tif (!outputDir) {\n\t\tthrow new Error('Required build env not set');\n\t}\n\n\tconst product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));\n\tawait downloadExplorerAppx(outputDir, (product as any).quality, arch);\n}\n\nif (require.main === module) {\n\tmain(process.argv[2]).catch(err => {\n\t\tconsole.error(err);\n\t\tprocess.exit(1);\n\t});\n}\n"
  },
  {
    "path": "build/win32/i18n/Default.hu.isl",
    "content": ";Inno Setup version 6.0.3+ Hungarian messages\n;Based on the translation of Kornl Pl, kornelpal@gmail.com\n;Istvn Szab, E-mail: istvanszabo890629@gmail.com\n;\n; To download user-contributed translations of this file, go to:\n;   http://www.jrsoftware.org/files/istrans/\n;\n; Note: When translating this text, do not add periods (.) to the end of\n; messages that didn't have them already, because on those messages Inno\n; Setup adds the periods automatically (appending a period would result in\n; two periods being displayed).\n\n[LangOptions]\n; The following three entries are very important. Be sure to read and \n; understand the '[LangOptions] section' topic in the help file.\nLanguageName=Magyar\nLanguageID=$040E\nLanguageCodePage=1250\n; If the language you are translating to requires special font faces or\n; sizes, uncomment any of the following entries and change them accordingly.\n;DialogFontName=\n;DialogFontSize=8\n;WelcomeFontName=Verdana\n;WelcomeFontSize=12\n;TitleFontName=Arial CE\n;TitleFontSize=29\n;CopyrightFontName=Arial CE\n;CopyrightFontSize=8\n\n[Messages]\n\n; *** Application titles\nSetupAppTitle=Telept\nSetupWindowTitle=%1 - Telept\nUninstallAppTitle=Eltvolt\nUninstallAppFullTitle=%1 Eltvolt\n\n; *** Misc. common\nInformationTitle=Informcik\nConfirmTitle=Megerst\nErrorTitle=Hiba\n\n; *** SetupLdr messages\nSetupLdrStartupMessage=%1 teleptve lesz. Szeretn folytatni?\nLdrCannotCreateTemp=tmeneti fjl ltrehozsa nem lehetsges. A telepts megszaktva\nLdrCannotExecTemp=Fjl futtatsa nem lehetsges az tmeneti knyvtrban. A telepts megszaktva\nHelpTextNote=\n\n; *** Startup error messages\nLastErrorMessage=%1.%n%nHiba %2: %3\nSetupFileMissing=A(z) %1 fjl hinyzik a telept knyvtrbl. Krem hrtsa el a problmt, vagy szerezzen be egy msik pldnyt a programbl!\nSetupFileCorrupt=A teleptsi fjlok srltek. Krem, szerezzen be j msolatot a programbl!\nSetupFileCorruptOrWrongVer=A teleptsi fjlok srltek, vagy inkompatibilisek a telept ezen verzijval. Hrtsa el a problmt, vagy szerezzen be egy msik pldnyt a programbl!\nInvalidParameter=A parancssorba tadott paramter rvnytelen:%n%n%1\nSetupAlreadyRunning=A Telept mr fut.\nWindowsVersionNotSupported=A program nem tmogatja a Windows ezen verzijt.\nWindowsServicePackRequired=A program futtatshoz %1 Service Pack %2 vagy jabb szksges.\nNotOnThisPlatform=Ez a program nem futtathat %1 alatt.\nOnlyOnThisPlatform=Ezt a programot %1 alatt kell futtatni.\nOnlyOnTheseArchitectures=A program kizrlag a kvetkez processzor architektrkhoz tervezett Windows-on telepthet:%n%n%1\nWinVersionTooLowError=A program futtatshoz %1 %2 verzija vagy ksbbi szksges.\nWinVersionTooHighError=Ez a program nem telepthet %1 %2 vagy ksbbire.\nAdminPrivilegesRequired=Csak rendszergazdai mdban telepthet ez a program.\nPowerUserPrivilegesRequired=Csak rendszergazdaknt vagy kiemelt felhasznlknt telepthet ez a program.\nSetupAppRunningError=A telept gy szlelte %1 jelenleg fut.%n%nZrja be az sszes pldnyt, majd kattintson az 'OK'-ra a folytatshoz, vagy a 'Mgse'-re a kilpshez.\nUninstallAppRunningError=Az eltvolt gy szlelte %1 jelenleg fut.%n%nZrja be az sszes pldnyt, majd kattintson az 'OK'-ra a folytatshoz, vagy a 'Mgse'-re a kilpshez.\n\n; *** Startup questions\nPrivilegesRequiredOverrideTitle=Teleptsi md kivlasztsa\nPrivilegesRequiredOverrideInstruction=Vlasszon teleptsi mdot\nPrivilegesRequiredOverrideText1=%1 telepthet az sszes felhasznlnak (rendszergazdai jogok szksgesek), vagy csak magnak.\nPrivilegesRequiredOverrideText2=%1 csak magnak telepthet, vagy az sszes felhasznlnak (rendszergazdai jogok szksgesek).\nPrivilegesRequiredOverrideAllUsers=Telepts &mindenkinek\nPrivilegesRequiredOverrideAllUsersRecommended=Telepts &mindenkinek (ajnlott)\nPrivilegesRequiredOverrideCurrentUser=Telepts csak &nekem\nPrivilegesRequiredOverrideCurrentUserRecommended=Telepts csak &nekem (ajnlott)\n\n; *** Misc. errors\nErrorCreatingDir=A Telept nem tudta ltrehozni a(z) \"%1\" knyvtrat\nErrorTooManyFilesInDir=Nem hozhat ltre fjl a(z) \"%1\" knyvtrban, mert az mr tl sok fjlt tartalmaz\n\n; *** Setup common messages\nExitSetupTitle=Kilps a teleptbl\nExitSetupMessage=A telepts mg folyamatban van. Ha most kilp, a program nem kerl teleptsre.%n%nMsik alkalommal is futtathat a telepts befejezshez%n%nKilp a teleptbl?\nAboutSetupMenuItem=&Nvjegy...\nAboutSetupTitle=Telept nvjegye\nAboutSetupMessage=%1 %2 verzi%n%3%n%nAz %1 honlapja:%n%4\nAboutSetupNote=\nTranslatorNote=\n\n; *** Buttons\nButtonBack=< &Vissza\nButtonNext=&Tovbb >\nButtonInstall=&Telept\nButtonOK=OK\nButtonCancel=Mgse\nButtonYes=&Igen\nButtonYesToAll=&Mindet\nButtonNo=&Nem\nButtonNoToAll=&Egyiket se\nButtonFinish=&Befejezs\nButtonBrowse=&Tallzs...\nButtonWizardBrowse=T&allzs...\nButtonNewFolder=j &knyvtr\n\n; *** \"Select Language\" dialog messages\nSelectLanguageTitle=Telept nyelvi bellts\nSelectLanguageLabel=Vlassza ki a telepts alatt hasznlt nyelvet.\n\n; *** Common wizard text\nClickNext=A folytatshoz kattintson a 'Tovbb'-ra, a kilpshez a 'Mgse'-re.\nBeveledLabel=\nBrowseDialogTitle=Vlasszon knyvtrt \nBrowseDialogLabel=Vlasszon egy knyvtrat az albbi listbl, majd kattintson az 'OK'-ra.\nNewFolderName=j knyvtr\n\n; *** \"Welcome\" wizard page\nWelcomeLabel1=dvzli a(z) [name] Teleptvarzslja.\nWelcomeLabel2=A(z) [name/ver] teleptsre kerl a szmtgpn.%n%nAjnlott minden, egyb fut alkalmazs bezrsa a folytats eltt.\n\n; *** \"Password\" wizard page\nWizardPassword=Jelsz\nPasswordLabel1=Ez a telepts jelszval vdett.\nPasswordLabel3=Krem adja meg a jelszt, majd kattintson a 'Tovbb'-ra. A jelszavak kis- s nagy bet rzkenyek lehetnek.\nPasswordEditLabel=&Jelsz:\nIncorrectPassword=Az n ltal megadott jelsz helytelen. Prblja jra.\n\n; *** \"License Agreement\" wizard page\nWizardLicense=Licencszerzds\nLicenseLabel=Olvassa el figyelmesen az informcikat folytats eltt.\nLicenseLabel3=Krem, olvassa el az albbi licencszerzdst. A telepts folytatshoz, el kell fogadnia a szerzdst.\nLicenseAccepted=&Elfogadom a szerzdst\nLicenseNotAccepted=&Nem fogadom el a szerzdst\n\n; *** \"Information\" wizard pages\nWizardInfoBefore=Informcik\nInfoBeforeLabel=Olvassa el a kvetkez fontos informcikat a folytats eltt.\nInfoBeforeClickLabel=Ha kszen ll, kattintson a 'Tovbb'-ra.\nWizardInfoAfter=Informcik\nInfoAfterLabel=Olvassa el a kvetkez fontos informcikat a folytats eltt.\nInfoAfterClickLabel=Ha kszen ll, kattintson a 'Tovbb'-ra.\n\n; *** \"User Information\" wizard page\nWizardUserInfo=Felhasznl adatai\nUserInfoDesc=Krem, adja meg az adatait\nUserInfoName=&Felhasznlnv:\nUserInfoOrg=&Szervezet:\nUserInfoSerial=&Sorozatszm:\nUserInfoNameRequired=Meg kell adnia egy nevet.\n\n; *** \"Select Destination Location\" wizard page\nWizardSelectDir=Vlasszon clknyvtrat\nSelectDirDesc=Hova telepljn a(z) [name]?\nSelectDirLabel3=A(z) [name] az albbi knyvtrba lesz teleptve. \nSelectDirBrowseLabel=A folytatshoz, kattintson a 'Tovbb'-ra. Ha msik knyvtrat vlasztana, kattintson a 'Tallzs'-ra.\nDiskSpaceGBLabel=At least [gb] GB szabad terletre van szksg.\nDiskSpaceMBLabel=Legalbb [mb] MB szabad terletre van szksg.\nCannotInstallToNetworkDrive=A Telept nem tud hlzati meghajtra telepteni.\nCannotInstallToUNCPath=A Telept nem tud hlzati UNC elrsi tra telepteni.\nInvalidPath=Teljes tvonalat adjon meg, a meghajt betjelvel; pldul:%n%nC:\\Alkalmazs%n%nvagy egy hlzati tvonalat a kvetkez alakban:%n%n\\\\kiszolgl\\megoszts\nInvalidDrive=A kivlasztott meghajt vagy hlzati megoszts nem ltezik vagy nem elrhet. Vlasszon egy msikat.\nDiskSpaceWarningTitle=Nincs elg szabad terlet\nDiskSpaceWarning=A Teleptnek legalbb %1 KB szabad lemezterletre van szksge, viszont a kivlasztott meghajtn csupn %2 KB ll rendelkezsre.%n%nMindenkppen folytatja?\nDirNameTooLong=A knyvtr neve vagy az tvonal tl hossz.\nInvalidDirName=A knyvtr neve rvnytelen.\nBadDirName32=A knyvtrak nevei ezen karakterek egyikt sem tartalmazhatjk:%n%n%1\nDirExistsTitle=A knyvtr mr ltezik\nDirExists=A knyvtr:%n%n%1%n%nmr ltezik. Mindenkpp ide akar telepteni?\nDirDoesntExistTitle=A knyvtr nem ltezik\nDirDoesntExist=A knyvtr:%n%n%1%n%nnem ltezik. Szeretn ltrehozni?\n\n; *** \"Select Components\" wizard page\nWizardSelectComponents=sszetevk kivlasztsa\nSelectComponentsDesc=Mely sszetevk kerljenek teleptsre?\nSelectComponentsLabel2=Jellje ki a teleptend sszetevket; trlje a telepteni nem kvnt sszetevket. Kattintson a 'Tovbb'-ra, ha kszen ll a folytatsra.\nFullInstallation=Teljes telepts\n; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)\nCompactInstallation=Szoksos telepts\nCustomInstallation=Egyni telepts\nNoUninstallWarningTitle=Ltez sszetev\nNoUninstallWarning=A telept gy tallta, hogy a kvetkez sszetevk mr teleptve vannak a szmtgpre:%n%n%1%n%nEzen sszetevk kijellsnek trlse, nem tvoltja el azokat a szmtgprl.%n%nMindenkppen folytatja?\nComponentSize1=%1 KB\nComponentSize2=%1 MB\nComponentsDiskSpaceMBLabel=A jelenlegi kijells legalbb [gb] GB lemezterletet ignyel.\nComponentsDiskSpaceMBLabel=A jelenlegi kijells legalbb [mb] MB lemezterletet ignyel.\n\n; *** \"Select Additional Tasks\" wizard page\nWizardSelectTasks=Tovbbi feladatok\nSelectTasksDesc=Mely kiegszt feladatok kerljenek vgrehajtsra?\nSelectTasksLabel2=Jellje ki, mely kiegszt feladatokat hajtsa vgre a Telept a(z) [name] teleptse sorn, majd kattintson a 'Tovbb'-ra.\n\n; *** \"Select Start Menu Folder\" wizard page\nWizardSelectProgramGroup=Start Men knyvtra\nSelectStartMenuFolderDesc=Hova helyezze a Telept a program parancsikonjait?\nSelectStartMenuFolderLabel3=A Telept a program parancsikonjait a Start men kvetkez mappjban fogja ltrehozni.\nSelectStartMenuFolderBrowseLabel=A folytatshoz kattintson a 'Tovbb'-ra. Ha msik mappt vlasztana, kattintson a 'Tallzs'-ra.\nMustEnterGroupName=Meg kell adnia egy mappanevet.\nGroupNameTooLong=A knyvtr neve vagy az tvonal tl hossz.\nInvalidGroupName=A knyvtr neve rvnytelen.\nBadGroupName=A knyvtrak nevei ezen karakterek egyikt sem tartalmazhatjk:%n%n%1\nNoProgramGroupCheck2=&Ne hozzon ltre mappt a Start menben\n\n; *** \"Ready to Install\" wizard page\nWizardReady=Kszen llunk a teleptsre\nReadyLabel1=A Telept kszen ll, a(z) [name] szmtgpre teleptshez.\nReadyLabel2a=Kattintson a 'Telepts'-re a folytatshoz, vagy a \"Vissza\"-ra a belltsok ttekintshez vagy megvltoztatshoz.\nReadyLabel2b=Kattintson a 'Telepts'-re a folytatshoz.\nReadyMemoUserInfo=Felhasznl adatai:\nReadyMemoDir=Telepts clknyvtra:\nReadyMemoType=Telepts tpusa:\nReadyMemoComponents=Vlasztott sszetevk:\nReadyMemoGroup=Start men mappja:\nReadyMemoTasks=Kiegszt feladatok:\n\n; *** \"Preparing to Install\" wizard page\nWizardPreparing=Felkszls a teleptsre\nPreparingDesc=A Telept felkszl a(z) [name] szmtgpre trtn teleptshez.\nPreviousInstallNotCompleted=gy korbbi program teleptse/eltvoltsa nem fejezdtt be. jra kell indtania a szmtgpt a msik telepts befejezshez.%n%nA szmtgpe jraindtsa utn ismt futtassa a Teleptt a(z) [name] teleptsnek befejezshez.\nCannotContinue=A telepts nem folytathat. A kilpshez kattintson a 'Mgse'-re\nApplicationsFound=A kvetkez alkalmazsok olyan fjlokat hasznlnak, amelyeket a Teleptnek frissteni kell. Ajnlott, hogy engedlyezze a Teleptnek ezen alkalmazsok automatikus bezrst.\nApplicationsFound2=A kvetkez alkalmazsok olyan fjlokat hasznlnak, amelyeket a Teleptnek frissteni kell. Ajnlott, hogy engedlyezze a Teleptnek ezen alkalmazsok automatikus bezrst. A telepts befejezse utn a Telept megksrli az alkalmazsok jraindtst.\nCloseApplications=&Alkalmazsok automatikus bezrsa\nDontCloseApplications=&Ne zrja be az alkalmazsokat\nErrorCloseApplications=A Telept nem tudott minden alkalmazst automatikusan bezrni. A folytats eltt ajnlott minden, a Telept ltal frisstend fjlokat hasznl alkalmazst bezrni.\nPrepareToInstallNeedsRestart=A teleptnek jra kell indtania a szmtgpet. jraindtst kveten, futtassa jbl a teleptt, a [name] teleptsnek befejezshez .%n%njra szeretn indtani most a szmtgpet?\n\n; *** \"Installing\" wizard page\nWizardInstalling=Telepts\nInstallingLabel=Krem vrjon, amg a(z) [name] teleptse zajlik.\n\n; *** \"Setup Completed\" wizard page\nFinishedHeadingLabel=A(z) [name] teleptsnek befejezse\nFinishedLabelNoIcons=A Telept vgzett a(z) [name] teleptsvel.\nFinishedLabel=A Telept vgzett a(z) [name] teleptsvel. Az alkalmazst a ltrehozott ikonok kivlasztsval indthatja.\nClickFinish=Kattintson a 'Befejezs'-re a kilpshez.\nFinishedRestartLabel=A(z) [name] teleptsnek befejezshez jra kell indtani a szmtgpet. jraindtja most?\nFinishedRestartMessage=A(z) [name] teleptsnek befejezshez, a Teleptnek jra kell indtani a szmtgpet.%n%njraindtja most?\nShowReadmeCheck=Igen, szeretnm elolvasni a FONTOS fjlt\nYesRadio=&Igen, jraindts most\nNoRadio=&Nem, ksbb indtom jra\n; used for example as 'Run MyProg.exe'\nRunEntryExec=%1 futtatsa\n; used for example as 'View Readme.txt'\nRunEntryShellExec=%1 megtekintse\n\n; *** \"Setup Needs the Next Disk\" stuff\nChangeDiskTitle=A Teleptnek szksge van a kvetkez lemezre\nSelectDiskLabel2=Helyezze be a(z) %1. lemezt s kattintson az 'OK'-ra.%n%nHa a fjlok a lemez egy a megjelentettl klnbz mappjban tallhatk, rja be a helyes tvonalat vagy kattintson a 'Tallzs'-ra.\nPathLabel=&tvonal:\nFileNotInDir2=A(z) \"%1\" fjl nem tallhat a kvetkez helyen: \"%2\". Helyezze be a megfelel lemezt vagy vlasszon egy msik mappt.\nSelectDirectoryLabel=Adja meg a kvetkez lemez helyt.\n\n; *** Installation phase messages\nSetupAborted=A telepts nem fejezdtt be.%n%nHrtsa el a hibt s futtassa jbl a Teleptt.\nAbortRetryIgnoreSelectAction=Vlasszon mveletet\nAbortRetryIgnoreRetry=&jra\nAbortRetryIgnoreIgnore=&Hiba elvetse s folytats\nAbortRetryIgnoreCancel=Telepts megszaktsa\n\n; *** Installation status messages\nStatusClosingApplications=Alkalmazsok bezrsa...\nStatusCreateDirs=Knyvtrak ltrehozsa...\nStatusExtractFiles=Fjlok kibontsa...\nStatusCreateIcons=Parancsikonok ltrehozsa...\nStatusCreateIniEntries=INI bejegyzsek ltrehozsa...\nStatusCreateRegistryEntries=Rendszerler bejegyzsek ltrehozsa...\nStatusRegisterFiles=Fjlok regisztrlsa...\nStatusSavingUninstall=Eltvolt informcik mentse...\nStatusRunProgram=Telepts befejezse...\nStatusRestartingApplications=Alkalmazsok jraindtsa...\nStatusRollback=Vltoztatsok visszavonsa...\n\n; *** Misc. errors\nErrorInternal2=Bels hiba: %1\nErrorFunctionFailedNoCode=Sikertelen %1\nErrorFunctionFailed=Sikertelen %1; kd: %2\nErrorFunctionFailedWithMessage=Sikertelen %1; kd: %2.%n%3\nErrorExecutingProgram=Nem hajthat vgre a fjl:%n%1\n\n; *** Registry errors\nErrorRegOpenKey=Nem nyithat meg a rendszerler kulcs:%n%1\\%2\nErrorRegCreateKey=Nem hozhat ltre a rendszerler kulcs:%n%1\\%2\nErrorRegWriteKey=Nem mdosthat a rendszerler kulcs:%n%1\\%2\n\n; *** INI errors\nErrorIniEntry=Bejegyzs ltrehozsa sikertelen a kvetkez INI fjlban: \"%1\".\n\n; *** File copying errors\nFileAbortRetryIgnoreSkipNotRecommended=&Fjl kihagysa (nem ajnlott)\nFileAbortRetryIgnoreIgnoreNotRecommended=&Hiba elvetse s folytats (nem ajnlott)\nSourceIsCorrupted=A forrsfjl megsrlt\nSourceDoesntExist=A(z) \"%1\" forrsfjl nem ltezik\nExistingFileReadOnly2=A fjl csak olvashatknt van jellve.\nExistingFileReadOnlyRetry=Csak &olvashat tulajdonsg eltvoltsa s jra prblkozs \nExistingFileReadOnlyKeepExisting=&Ltez fjl megtartsa\nErrorReadingExistingDest=Hiba lpett fel a fjl olvassa kzben:\nFileExists=A fjl mr ltezik.%n%nFell kvnja rni?\nExistingFileNewer=A ltez fjl jabb a teleptsre kerlnl. Ajnlott a ltez fjl megtartsa.%n%nMeg kvnja tartani a ltez fjlt?\nErrorChangingAttr=Hiba lpett fel a fjl attribtumnak mdostsa kzben:\nErrorCreatingTemp=Hiba lpett fel a fjl teleptsi knyvtrban trtn ltrehozsa kzben:\nErrorReadingSource=Hiba lpett fel a forrsfjl olvassa kzben:\nErrorCopying=Hiba lpett fel a fjl msolsa kzben:\nErrorReplacingExistingFile=Hiba lpett fel a ltez fjl cserje kzben:\nErrorRestartReplace=A fjl cserje az jraindts utn sikertelen volt:\nErrorRenamingTemp=Hiba lpett fel fjl teleptsi knyvtrban trtn tnevezse kzben:\nErrorRegisterServer=Nem lehet regisztrlni a DLL-t/OCX-et: %1\nErrorRegSvr32Failed=Sikertelen RegSvr32. A visszaadott kd: %1\nErrorRegisterTypeLib=Nem lehet regisztrlni a tpustrat: %1\n\n; *** Uninstall display name markings\n; used for example as 'My Program (32-bit)'\nUninstallDisplayNameMark=%1 (%2)\n; used for example as 'My Program (32-bit, All users)'\nUninstallDisplayNameMarks=%1 (%2, %3)\nUninstallDisplayNameMark32Bit=32-bit\nUninstallDisplayNameMark64Bit=64-bit\nUninstallDisplayNameMarkAllUsers=Minden felhasznl\nUninstallDisplayNameMarkCurrentUser=Jelenlegi felhasznl\n\n; *** Post-installation errors\nErrorOpeningReadme=Hiba lpett fel a FONTOS fjl megnyitsa kzben.\nErrorRestartingComputer=A Telept nem tudta jraindtani a szmtgpet. Indtsa jra kzileg.\n\n; *** Uninstaller messages\nUninstallNotFound=A(z) \"%1\" fjl nem ltezik. Nem tvolthat el.\nUninstallOpenError=A(z) \"%1\" fjl nem nyithat meg. Nem tvolthat el.\nUninstallUnsupportedVer=A(z) \"%1\" eltvoltsi naplfjl formtumt nem tudja felismerni az eltvolt jelen verzija. Az eltvolts nem folytathat\nUninstallUnknownEntry=Egy ismeretlen bejegyzs (%1) tallhat az eltvoltsi naplfjlban\nConfirmUninstall=Biztosan el kvnja tvoltani a(z) %1 programot s minden sszetevjt?\nUninstallOnlyOnWin64=Ezt a teleptst csak 64-bites Windowson lehet eltvoltani.\nOnlyAdminCanUninstall=Ezt a teleptst csak adminisztrcis jogokkal rendelkez felhasznl tvolthatja el.\nUninstallStatusLabel=Legyen trelemmel, amg a(z) %1 szmtgprl trtn eltvoltsa befejezdik.\nUninstalledAll=A(z) %1 sikeresen el lett tvoltva a szmtgprl.\nUninstalledMost=A(z) %1 eltvoltsa befejezdtt.%n%nNhny elemet nem lehetett eltvoltani. Trlje kzileg.\nUninstalledAndNeedsRestart=A(z) %1 eltvoltsnak befejezshez jra kell indtania a szmtgpt.%n%njraindtja most?\nUninstallDataCorrupted=A(z) \"%1\" fjl srlt. Nem tvolthat el.\n\n; *** Uninstallation phase messages\nConfirmDeleteSharedFileTitle=Trli a megosztott fjlt?\nConfirmDeleteSharedFile2=A rendszer azt jelzi, hogy a kvetkez megosztott fjlra mr nincs szksge egyetlen programnak sem. Eltvoltja a megosztott fjlt?%n%nHa ms programok mg mindig hasznljk a megosztott fjlt, akkor az eltvoltsa utn lehet, hogy nem fognak megfelelen mkdni. Ha bizonytalan, vlassza a Nemet. A fjl megtartsa nem okoz problmt a rendszerben.\nSharedFileNameLabel=Fjlnv:\nSharedFileLocationLabel=Helye:\nWizardUninstalling=Eltvolts llapota\nStatusUninstalling=%1 eltvoltsa...\n\n; *** Shutdown block reasons\nShutdownBlockReasonInstallingApp=%1 teleptse.\nShutdownBlockReasonUninstallingApp=%1 eltvoltsa.\n\n; The custom messages below aren't used by Setup itself, but if you make\n; use of them in your scripts, you'll want to translate them.\n\n[CustomMessages]\n\nNameAndVersion=%1, verzi: %2\nAdditionalIcons=Tovbbi parancsikonok:\nCreateDesktopIcon=&Asztali ikon ltrehozsa\nCreateQuickLaunchIcon=&Gyorsindt parancsikon ltrehozsa\nProgramOnTheWeb=%1 az interneten\nUninstallProgram=Eltvolts - %1\nLaunchProgram=Indts %1\nAssocFileExtension=A(z) %1 &trstsa a(z) %2 fjlkiterjesztssel\nAssocingFileExtension=A(z) %1 trstsa a(z) %2 fjlkiterjesztssel...\nAutoStartProgramGroupDescription=Indtpult:\nAutoStartProgram=%1 automatikus indtsa\nAddonHostProgramNotFound=A(z) %1 nem tallhat a kivlasztott knyvtrban.%n%nMindenkppen folytatja?\n"
  },
  {
    "path": "build/win32/i18n/Default.ko.isl",
    "content": "; *** Inno Setup version 6.0.0+ Korean messages ***\n;\n;  6.0.3+ Translator: SungDong Kim (acroedit@gmail.com)\n;  5.5.3+ Translator: Domddol (domddol@gmail.com)\n;  Translation date: MAR 04, 2014\n;  Contributors: Hansoo KIM (iryna7@gmail.com), Woong-Jae An (a183393@hanmail.net)\n;  Storage: http://www.jrsoftware.org/files/istrans/\n;    ο ѱ  Ģ ؼմϴ.\n; Note: When translating this text, do not add periods (.) to the end of\n; messages that didn't have them already, because on those messages Inno\n; Setup adds the periods automatically (appending a period would result in\n; two periods being displayed).\n\n[LangOptions]\n; The following three entries are very important. Be sure to read and \n; understand the '[LangOptions] section' topic in the help file.\nLanguageName=Korean\nLanguageID=$0412\nLanguageCodePage=949\n; If the language you are translating to requires special font faces or\n; sizes, uncomment any of the following entries and change them accordingly.\n;DialogFontName=\n;DialogFontSize=8\n;WelcomeFontName=Verdana\n;WelcomeFontSize=12\n;TitleFontName=Arial\n;TitleFontSize=29\n;CopyrightFontName=Arial\n;CopyrightFontSize=8\n\n[Messages]\n\n; *** Application titles\nSetupAppTitle=ġ\nSetupWindowTitle=%1 ġ\nUninstallAppTitle=\nUninstallAppFullTitle=%1 \n\n; *** Misc. common\nInformationTitle=\nConfirmTitle=Ȯ\nErrorTitle=\n\n; *** SetupLdr messages\nSetupLdrStartupMessage=%1() ġմϴ, Ͻðڽϱ?\nLdrCannotCreateTemp=ӽ    ϴ, ġ ߴմϴ\nLdrCannotExecTemp=ӽ     ϴ, ġ ߴմϴ\nHelpTextNote=\n\n; *** Startup error messages\nLastErrorMessage=%1.%n%n %2: %3\nSetupFileMissing=%1   ʽϴ,  ذ ų ο ġ α׷ Ͻñ ٶϴ.\nSetupFileCorrupt=ġ  ջǾϴ, ο ġ α׷ Ͻñ ٶϴ.\nSetupFileCorruptOrWrongVer=ġ  ջ̰ų  ġ  ȣȯ ʽϴ,  ذ ų ο ġ α׷ Ͻñ ٶϴ.\nInvalidParameter=߸ Ű Դϴ:%n%n%1\nSetupAlreadyRunning=ġ ̹  Դϴ.\nWindowsVersionNotSupported= α׷  Windows   ʽϴ.\nWindowsServicePackRequired= α׷ Ϸ %1 sp%2 ̻̾ մϴ.\nNotOnThisPlatform= α׷ %1 ۵ ʽϴ.\nOnlyOnThisPlatform= α׷ %1 ؾ մϴ.\nOnlyOnTheseArchitectures= α׷ Ʒ ó  ȣȯǴ Windows  ġ  ֽϴ:%n%n%1\nWinVersionTooLowError= α׷ %1  %2 ̻ ʿմϴ.\nWinVersionTooHighError= α׷ %1  %2 ̻󿡼 ġ  ϴ.\nAdminPrivilegesRequired= α׷ ġϷ ڷ αؾ մϴ.\nPowerUserPrivilegesRequired= α׷ ġϷ  Ǵ  ڷ αؾ մϴ.\nSetupAppRunningError= %1()  Դϴ!%n%n װ  νϽ ݾ ֽʽÿ. ׷  Ϸ \"Ȯ\", Ϸ \"\" ŬϽʽÿ.\nUninstallAppRunningError= %1()  Դϴ!%n%n װ  νϽ ݾ ֽʽÿ. ׷  Ϸ \"Ȯ\", Ϸ \"\" ŬϽʽÿ.\n\n; *** Startup questions\nPrivilegesRequiredOverrideTitle=ġ  \nPrivilegesRequiredOverrideInstruction=ġ 带  ֽʽÿ\nPrivilegesRequiredOverrideText1=%1   (  ʿ) Ǵ  ڿ ġմϴ.\nPrivilegesRequiredOverrideText2=%1    Ǵ  (  ʿ)  ġմϴ.\nPrivilegesRequiredOverrideAllUsers= ڿ ġ(&A)\nPrivilegesRequiredOverrideAllUsersRecommended= ڿ ġ(&A) (õ)\nPrivilegesRequiredOverrideCurrentUser= ڿ ġ(&M)\nPrivilegesRequiredOverrideCurrentUserRecommended= ڿ ġ(&M) (õ)\n\n; *** Misc. errors\nErrorCreatingDir=\"%1\"    ϴ.\nErrorTooManyFilesInDir=\"%1\"   ʹ      ϴ.\n\n; *** Setup common messages\nExitSetupTitle=ġ Ϸ\nExitSetupMessage=ġ Ϸ ʾҽϴ, ⼭ ġ ϸ α׷ ġ ʽϴ.%n%nġ ϷϷ ߿ ٽ ġ α׷ ؾ մϴ.%n%n׷ ġ Ͻðڽϱ?\nAboutSetupMenuItem=ġ (&A)...\nAboutSetupTitle=ġ \nAboutSetupMessage=%1  %2%n%3%n%n%1 Ȩ :%n%4\nAboutSetupNote=\nTranslatorNote=\n\n; *** Buttons\nButtonBack=< ڷ(&B)\nButtonNext=(&N) >\nButtonInstall=ġ(&I)\nButtonOK=Ȯ\nButtonCancel=\nButtonYes=(&Y)\nButtonYesToAll= (&A)\nButtonNo=ƴϿ(&N)\nButtonNoToAll= ƴϿ(&O)\nButtonFinish=(&F)\nButtonBrowse=ãƺ(&B)...\nButtonWizardBrowse=ãƺ(&R)...\nButtonNewFolder=  (&M)\n\n; *** \"Select Language\" dialog messages\nSelectLanguageTitle=ġ  \nSelectLanguageLabel=ġ   Ͻʽÿ.\n\n; *** Common wizard text\nClickNext=Ϸ \"\" Ŭϰ ġ Ϸ \"\" Ŭմϴ.\nBeveledLabel=\nBrowseDialogTitle= ãƺ\nBrowseDialogLabel=Ʒ Ͽ    \"Ȯ\" Ŭմϴ.\nNewFolderName= \n\n; *** \"Welcome\" wizard page\nWelcomeLabel1=[name] ġ  \nWelcomeLabel2=   ǻͿ [name/ver]() ġ Դϴ.%n%nġϱ  ٸ α׷  ñ ٶϴ.\n\n; *** \"Password\" wizard page\nWizardPassword= ȣ\nPasswordLabel1= ġ   ȣ ȣǾ ֽϴ.\nPasswordLabel3= ȣ Էϰ \"\" ŬϽʽÿ.  ȣ ҹڸ ؾ մϴ.\nPasswordEditLabel= ȣ(&P):\nIncorrectPassword= ȣ Ȯ ʽϴ, ٽ ԷϽʽÿ.\n\n; *** \"License Agreement\" wizard page\nWizardLicense= \nLicenseLabel=ϱ   ߿  оʽÿ.\nLicenseLabel3=   оʽÿ, ġ Ϸ  ࿡ ؾ մϴ.\nLicenseAccepted=մϴ(&A)\nLicenseNotAccepted= ʽϴ(&D)\n\n; *** \"Information\" wizard pages\nWizardInfoBefore=\nInfoBeforeLabel=ϱ   ߿  оʽÿ.\nInfoBeforeClickLabel=ġ Ϸ \"\" ŬϽʽÿ.\nWizardInfoAfter=\nInfoAfterLabel=ϱ   ߿  оʽÿ.\nInfoAfterClickLabel=ġ Ϸ \"\" ŬϽʽÿ.\n\n; *** \"User Information\" wizard page\nWizardUserInfo= \nUserInfoDesc=  ԷϽʽÿ.\nUserInfoName= ̸(&U):\nUserInfoOrg=(&O):\nUserInfoSerial=ø ȣ(&S):\nUserInfoNameRequired= ̸ ԷϽʽÿ.\n\n; *** \"Select Destination Location\" wizard page\nWizardSelectDir=ġ ġ \nSelectDirDesc=[name] ġ ġ Ͻʽÿ.\nSelectDirLabel3=  [name]() ġմϴ.\nSelectDirBrowseLabel=Ϸ \"\", ٸ  Ϸ \"ãƺ\" ŬϽʽÿ.\nDiskSpaceGBLabel= α׷ ּ [gb] GB ũ   ʿմϴ.\nDiskSpaceMBLabel= α׷ ּ [mb] MB ũ   ʿմϴ.\nCannotInstallToNetworkDrive=Ʈũ ̺꿡 ġ  ϴ.\nCannotInstallToUNCPath=UNC ο ġ  ϴ.\nInvalidPath=̺ ڸ  ü θ ԷϽʽÿ.%n : C:\\APP %n%nǴ, UNC  θ ԷϽʽÿ.%n : \\\\server\\share\nInvalidDrive= ̺ Ǵ UNC   ʰų ׼  ϴ, ٸ θ Ͻʽÿ.\nDiskSpaceWarningTitle=ũ  մϴ\nDiskSpaceWarning=ġ  ּ %1 KB ũ  ʿ,  ̺   %2 KB ۿ ϴ.%n%n׷ Ͻðڽϱ?\nDirNameTooLong= ̸ Ǵ ΰ ʹ ϴ.\nInvalidDirName= ̸ ȿ ʽϴ.\nBadDirName32= ̸  ڸ   ϴ:%n%n%1\nDirExistsTitle= մϴ\nDirExists= %n%n%1%n%n() ̹ մϴ,   ġϽðڽϱ?\nDirDoesntExistTitle=  ʽϴ\nDirDoesntExist= %n%n%1%n%n()  ʽϴ,   ðڽϱ?\n\n; *** \"Select Components\" wizard page\nWizardSelectComponents=  \nSelectComponentsDesc=ġ  Ҹ Ͻʽÿ.\nSelectComponentsLabel2=ʿ  Ҵ üũϰ ʿ  Ҵ üũ մϴ, Ϸ \"\" ŬϽʽÿ.\nFullInstallation= ġ\n; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)\nCompactInstallation=ּ ġ\nCustomInstallation=  ġ\nNoUninstallWarningTitle= Ұ մϴ\nNoUninstallWarning=  Ұ ̹ ġǾ ֽϴ:%n%n%1%n%n    , α׷ Ž   ҵ ŵ  ̴ϴ.%n%n׷ Ͻðڽϱ?\nComponentSize1=%1 KB\nComponentSize2=%1 MB\nComponentsDiskSpaceGBLabel=  ּ [gb] GB ũ   ʿմϴ.\nComponentsDiskSpaceMBLabel=  ּ [mb] MB ũ   ʿմϴ.\n\n; *** \"Select Additional Tasks\" wizard page\nWizardSelectTasks=߰ ۾ \nSelectTasksDesc= ߰ ۾ Ͻʽÿ.\nSelectTasksLabel2=[name] ġ   ߰ ۾  , \"\" ŬϽʽÿ.\n\n; *** \"Select Start Menu Folder\" wizard page\nWizardSelectProgramGroup= ޴  \nSelectStartMenuFolderDesc= α׷ ٷΰ⸦ ġϰڽϱ?\nSelectStartMenuFolderLabel3=  ޴  α׷ ٷΰ⸦ ϴ.\nSelectStartMenuFolderBrowseLabel=Ϸ \"\" Ŭϰ, ٸ  Ϸ \"ãƺ\" ŬϽʽÿ.\nMustEnterGroupName= ̸ ԷϽʽÿ.\nGroupNameTooLong= ̸ Ǵ ΰ ʹ ϴ.\nInvalidGroupName= ̸ ȿ ʽϴ.\nBadGroupName= ̸  ڸ   ϴ:%n%n%1\nNoProgramGroupCheck2= ޴   (&D)\n\n; *** \"Ready to Install\" wizard page\nWizardReady=ġ غ Ϸ\nReadyLabel1= ǻͿ [name]() ġ غ Ǿϴ.\nReadyLabel2a=ġ Ϸ \"ġ\",  ϰų Ϸ \"ڷ\" ŬϽʽÿ.\nReadyLabel2b=ġ Ϸ \"ġ\" ŬϽʽÿ.\nReadyMemoUserInfo= :\nReadyMemoDir=ġ ġ:\nReadyMemoType=ġ :\nReadyMemoComponents=  :\nReadyMemoGroup= ޴ :\nReadyMemoTasks=߰ ۾:\n\n; *** \"Preparing to Install\" wizard page\nWizardPreparing=ġ غ \nPreparingDesc= ǻͿ [name] ġ غϴ Դϴ.\nPreviousInstallNotCompleted= α׷ ġ/ ۾ Ϸ ʾҽϴ, ϷϷ ǻ͸ ٽ ؾ մϴ.%n%nǻ͸ ٽ  , ġ 縦 ٽ Ͽ [name] ġ ϷϽñ ٶϴ.\nCannotContinue=ġ   ϴ, \"\" ŬϿ ġ Ͻʽÿ.\nApplicationsFound= α׷ ġ Ʈ ʿ  ϰ ֽϴ, ġ 簡 ̷ α׷ ڵ   ֵ Ͻñ ٶϴ.\nApplicationsFound2= α׷ ġ Ʈ ʿ  ϰ ֽϴ, ġ 簡 ̷ α׷ ڵ   ֵ Ͻñ ٶϴ. ġ ϷǸ, ġ   α׷ ٽ ۵ǵ õ ̴ϴ.\nCloseApplications=ڵ α׷ (&A)\nDontCloseApplications=α׷  (&D)\nErrorCloseApplications=ġ 簡 α׷ ڵ   ϴ, ϱ  ġ Ʈ ʿ  ϰ ִ α׷  Ͻñ ٶϴ.\nPrepareToInstallNeedsRestart=ġ   ǻ͸ ؾ մϴ. [name] ġ Ϸϱ  ǻ͸ ٽ  Ŀ ġ 縦 ٽ  ֽʽÿ.%n%n ٽ Ͻðڽϱ?\n\n; *** \"Installing\" wizard page\nWizardInstalling=ġ \nInstallingLabel= ǻͿ [name]() ġϴ ...  ٷ ֽʽÿ.\n\n; *** \"Setup Completed\" wizard page\nFinishedHeadingLabel=[name] ġ  Ϸ\nFinishedLabelNoIcons= ǻͿ [name]() ġǾϴ.\nFinishedLabel= ǻͿ [name]() ġǾϴ, α׷ ġ  Ͽ   ֽϴ.\nClickFinish=ġ  \"\" ŬϽʽÿ.\nFinishedRestartLabel=[name] ġ ϷϷ, ǻ͸ ٽ ؾ մϴ.  ٽ Ͻðڽϱ?\nFinishedRestartMessage=[name] ġ ϷϷ, ǻ͸ ٽ ؾ մϴ.%n%n ٽ Ͻðڽϱ?\nShowReadmeCheck=, README  ǥմϴ\nYesRadio=,  ٽ մϴ(&Y)\nNoRadio=ƴϿ, ߿ ٽ մϴ(&N)\n; used for example as 'Run MyProg.exe'\nRunEntryExec=%1 \n; used for example as 'View Readme.txt'\nRunEntryShellExec=%1 ǥ\n\n; *** \"Setup Needs the Next Disk\" stuff\nChangeDiskTitle=ũ ʿմϴ\nSelectDiskLabel2=ũ %1() ϰ \"Ȯ\" ŬϽʽÿ.%n%n ũ   Ʒ ΰ ƴ  ִ , ùٸ θ Էϰų \"ãƺ\" ŬϽñ ٶϴ.\nPathLabel=(&P):\nFileNotInDir2=%2  %1() ġ  ϴ, ùٸ ũ ϰų ٸ  Ͻʽÿ.\nSelectDirectoryLabel= ũ ġ Ͻʽÿ.\n\n; *** Installation phase messages\nSetupAborted=ġ Ϸ ʾҽϴ.%n%n ذ , ٽ ġ Ͻʽÿ.\nAbortRetryIgnoreSelectAction=׼  ֽʽÿ.\nAbortRetryIgnoreRetry=õ(&T)\nAbortRetryIgnoreIgnore= ϰ (&I)\nAbortRetryIgnoreCancel=ġ \n\n; *** Installation status messages\nStatusClosingApplications=α׷ ϴ ...\nStatusCreateDirs=  ...\nStatusExtractFiles= ϴ ...\nStatusCreateIcons=ٷΰ⸦ ϴ ...\nStatusCreateIniEntries=INI ׸  ...\nStatusCreateRegistryEntries=Ʈ ׸  ...\nStatusRegisterFiles= ϴ ...\nStatusSavingUninstall=  ϴ ...\nStatusRunProgram=ġ Ϸϴ ...\nStatusRestartingApplications=α׷ ٽ ϴ ...\nStatusRollback= ϴ ...\n\n; *** Misc. errors\nErrorInternal2= : %1\nErrorFunctionFailedNoCode=%1 \nErrorFunctionFailed=%1 ; ڵ %2\nErrorFunctionFailedWithMessage=%1 , ڵ: %2.%n%3\nErrorExecutingProgram=  :%n%1\n\n; *** Registry errors\nErrorRegOpenKey=Ʈ Ű  :%n%1\\%2\nErrorRegCreateKey=Ʈ Ű  :%n%1\\%2\nErrorRegWriteKey=Ʈ Ű  :%n%1\\%2\n\n; *** INI errors\nErrorIniEntry=%1 Ͽ INI ׸  Դϴ.\n\n; *** File copying errors\nFileAbortRetryIgnoreSkipNotRecommended=  ǳʶ(&S) ( ʽϴ)\nFileAbortRetryIgnoreIgnoreNotRecommended= ϰ (&I) ( ʽϴ)\nSourceIsCorrupted=  ջ\nSourceDoesntExist=  %1()  \nExistingFileReadOnly2=  б ̱⶧ ü  ϴ.\nExistingFileReadOnlyRetry=б  Ӽ ϰ ٽ õϷ(&R)\nExistingFileReadOnlyKeepExisting=  (&K)\nErrorReadingExistingDest=  д   ߻:\nFileExists= ̹ մϴ.%n%n ðڽϱ?\nExistingFileNewer=  ġϷ ϴ Ϻ  Դϴ,   Ͻñ ٶϴ.%n%n  Ͻðڽϱ?\nErrorChangingAttr=  Ӽ ϴ   ߻:\nErrorCreatingTemp=      ߻:\nErrorReadingSource=  д   ߻:\nErrorCopying= ϴ   ߻:\nErrorReplacingExistingFile=  üϴ   ߻:\nErrorRestartReplace=RestartReplace :\nErrorRenamingTemp=    ̸ ٲٴ   ߻:\nErrorRegisterServer=DLL/OCX  : %1\nErrorRegSvr32Failed=RegSvr32   ڵ : %1\nErrorRegisterTypeLib=  ̺귯 Ͽ : %1\n\n; *** Uninstall display name markings\n; used for example as 'My Program (32-bit)'\nUninstallDisplayNameMark=%1 (%2)\n; used for example as 'My Program (32-bit, All users)'\nUninstallDisplayNameMarks=%1 (%2, %3)\nUninstallDisplayNameMark32Bit=32Ʈ\nUninstallDisplayNameMark64Bit=64Ʈ\nUninstallDisplayNameMarkAllUsers= \nUninstallDisplayNameMarkCurrentUser= \n\n; *** Post-installation errors\nErrorOpeningReadme=README     ߻߽ϴ.\nErrorRestartingComputer=ǻ͸ ٽ   ϴ,  ٽ Ͻʽÿ.\n\n; *** Uninstaller messages\nUninstallNotFound= %1()  ʱ , Ÿ   ϴ.\nUninstallOpenError= %1()    , Ÿ   ϴ.\nUninstallUnsupportedVer= α  \"%1\"()    ν   ̱ , Ÿ   ϴ.\nUninstallUnknownEntry=   ׸ %1()  α׿ ԵǾ ֽϴ.\nConfirmUninstall= %1()   Ҹ  Ͻðڽϱ?\nUninstallOnlyOnWin64= α׷ 64Ʈ Windows   ֽϴ.\nOnlyAdminCanUninstall= α׷ Ϸ   ʿմϴ.\nUninstallStatusLabel= ǻͿ %1() ϴ ...  ٷ ֽʽÿ.\nUninstalledAll=%1()  ŵǾϴ!\nUninstalledMost=%1 Ű ϷǾϴ.%n%nϺ Ҵ   ,  Ͻñ ٶϴ.\nUninstalledAndNeedsRestart=%1 Ÿ ϷϷ, ǻ͸ ٽ ؾ մϴ.%n%n ٽ Ͻðڽϱ?\nUninstallDataCorrupted= \"%1\"() ջǾ , Ÿ   ϴ.\n\n; *** Uninstallation phase messages\nConfirmDeleteSharedFileTitle=  Ͻðڽϱ?\nConfirmDeleteSharedFile2=ý  α׷     ʽϴ,    Ͻðڽϱ?%n%n  ٸ α׷ ϰ ִ ¿    , ش α׷  ۵   , Ȯ  \"ƴϿ\" ϼŵ ˴ϴ. ýۿ   ־   ʽϴ.\nSharedFileNameLabel= ̸:\nSharedFileLocationLabel=ġ:\nWizardUninstalling= \nStatusUninstalling=%1() ϴ ...\n\n; *** Shutdown block reasons\nShutdownBlockReasonInstallingApp=%1() ġϴ Դϴ.\nShutdownBlockReasonUninstallingApp=%1() ϴ Դϴ.\n\n; The custom messages below aren't used by Setup itself, but if you make\n; use of them in your scripts, you'll want to translate them.\n\n[CustomMessages]\n\nNameAndVersion=%1  %2\nAdditionalIcons= ߰:\nCreateDesktopIcon= ȭ鿡 ٷΰ (&D)\nCreateQuickLaunchIcon=   (&Q)\nProgramOnTheWeb=%1 \nUninstallProgram=%1 \nLaunchProgram=%1 \nAssocFileExtension= Ȯ %2() %1 մϴ.\nAssocingFileExtension= Ȯ %2() %1 ϴ ...\nAutoStartProgramGroupDescription=:\nAutoStartProgram=%1() ڵ \nAddonHostProgramNotFound=%1()   ġ  ϴ.%n%n׷ Ͻðڽϱ?\n"
  },
  {
    "path": "build/win32/i18n/Default.zh-cn.isl",
    "content": "﻿; *** Inno Setup version 6.0.3+ Chinese Simplified messages ***\n;\n; Maintained by Zhenghan Yang\n; Email: 847320916@QQ.com\n; Translation based on network resource\n; The latest Translation is on https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation\n;\n\n[LangOptions]\n; The following three entries are very important. Be sure to read and \n; understand the '[LangOptions] section' topic in the help file.\nLanguageName=简体中文\n; If Language Name display incorrect, uncomment next line\n; LanguageName=<7B80><4F53><4E2D><6587>\nLanguageID=$0804\nLanguageCodePage=936\n; If the language you are translating to requires special font faces or\n; sizes, uncomment any of the following entries and change them accordingly.\n;DialogFontName=\n;DialogFontSize=8\n;WelcomeFontName=Verdana\n;WelcomeFontSize=12\n;TitleFontName=Arial\n;TitleFontSize=29\n;CopyrightFontName=Arial\n;CopyrightFontSize=8\n\n[Messages]\n\n; *** 应用程序标题\nSetupAppTitle=安装\nSetupWindowTitle=安装 - %1\nUninstallAppTitle=卸载\nUninstallAppFullTitle=%1 卸载\n\n; *** Misc. common\nInformationTitle=信息\nConfirmTitle=确认\nErrorTitle=错误\n\n; *** SetupLdr messages\nSetupLdrStartupMessage=现在将安装 %1。您想要继续吗？\nLdrCannotCreateTemp=不能创建临时文件。安装中断。\nLdrCannotExecTemp=不能执行临时目录中的文件。安装中断。\nHelpTextNote=\n\n; *** 启动错误消息\nLastErrorMessage=%1.%n%n错误 %2: %3\nSetupFileMissing=安装目录中的文件 %1 丢失。请修正这个问题或获取一个新的程序副本。\nSetupFileCorrupt=安装文件已损坏。请获取一个新的程序副本。\nSetupFileCorruptOrWrongVer=安装文件已损坏，或是与这个安装程序的版本不兼容。请修正这个问题或获取新的程序副本。\nInvalidParameter=无效的命令行参数: %n%n%1\nSetupAlreadyRunning=安装程序正在运行。\nWindowsVersionNotSupported=这个程序不支持该版本的计算机运行。\nWindowsServicePackRequired=这个程序要求%1服务包%1或更高。\nNotOnThisPlatform=这个程序将不能运行于 %1。\nOnlyOnThisPlatform=这个程序必须运行于 %1。\nOnlyOnTheseArchitectures=这个程序只能在为下列处理器结构设计的 Windows 版本中进行安装:%n%n%1\nWinVersionTooLowError=这个程序需要 %1 版本 %2 或更高。\nWinVersionTooHighError=这个程序不能安装于 %1 版本 %2 或更高。\nAdminPrivilegesRequired=在安装这个程序时您必须以管理员身份登录。\nPowerUserPrivilegesRequired=在安装这个程序时您必须以管理员身份或有权限的用户组身份登录。\nSetupAppRunningError=安装程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口，然后单击“确定”继续，或按“取消”退出。\nUninstallAppRunningError=卸载程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口，然后单击“确定”继续，或按“取消”退出。\n\n; *** 启动问题\nPrivilegesRequiredOverrideTitle=选择安装程序模式\nPrivilegesRequiredOverrideInstruction=选择安装模式\nPrivilegesRequiredOverrideText1=%1 可以为所有用户安装(需要管理员权限)，或仅为您安装。\nPrivilegesRequiredOverrideText2=%1 只能为您安装，或为所有用户安装(需要管理员权限)。\nPrivilegesRequiredOverrideAllUsers=为所有用户安装(&A)\nPrivilegesRequiredOverrideAllUsersRecommended=为所有用户安装(建议选项)(&A)\nPrivilegesRequiredOverrideCurrentUser=只为我安装(&M)\nPrivilegesRequiredOverrideCurrentUserRecommended=只为我安装(建议选项)(&M)\n\n; *** 其它错误\nErrorCreatingDir=安装程序不能创建目录“%1”。\nErrorTooManyFilesInDir=不能在目录“%1”中创建文件，因为里面的文件太多\n\n; *** 安装程序公共消息\nExitSetupTitle=退出安装程序\nExitSetupMessage=安装程序未完成安装。如果您现在退出，您的程序将不能安装。%n%n您可以以后再运行安装程序完成安装。%n%n退出安装程序吗？\nAboutSetupMenuItem=关于安装程序(&A)...\nAboutSetupTitle=关于安装程序\nAboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4\nAboutSetupNote=\nTranslatorNote=\n\n; *** 按钮\nButtonBack=< 上一步(&B)\nButtonNext=下一步(&N) >\nButtonInstall=安装(&I)\nButtonOK=确定\nButtonCancel=取消\nButtonYes=是(&Y)\nButtonYesToAll=全是(&A)\nButtonNo=否(&N)\nButtonNoToAll=全否(&O)\nButtonFinish=完成(&F)\nButtonBrowse=浏览(&B)...\nButtonWizardBrowse=浏览(&R)...\nButtonNewFolder=新建文件夹(&M)\n\n; *** “选择语言”对话框消息\nSelectLanguageTitle=选择安装语言\nSelectLanguageLabel=选择安装时要使用的语言。\n\n; *** 公共向导文字\nClickNext=单击“下一步”继续，或单击“取消”退出安装程序。\nBeveledLabel=\nBrowseDialogTitle=浏览文件夹\nBrowseDialogLabel=在下列列表中选择一个文件夹，然后单击“确定”。\nNewFolderName=新建文件夹\n\n; *** “欢迎”向导页\nWelcomeLabel1=欢迎使用 [name] 安装向导\nWelcomeLabel2=现在将安装 [name/ver] 到您的电脑中。%n%n推荐您在继续安装前关闭所有其它应用程序。\n\n; *** “密码”向导页\nWizardPassword=密码\nPasswordLabel1=这个安装程序有密码保护。\nPasswordLabel3=请输入密码，然后单击“下一步”继续。密码区分大小写。\nPasswordEditLabel=密码(&P):\nIncorrectPassword=您输入的密码不正确，请重试。\n\n; *** “许可协议”向导页\nWizardLicense=许可协议\nLicenseLabel=继续安装前请阅读下列重要信息。\nLicenseLabel3=请仔细阅读下列许可协议。您在继续安装前必须同意这些协议条款。\nLicenseAccepted=我同意此协议(&A)\nLicenseNotAccepted=我不同意此协议(&D)\n\n; *** “信息”向导页\nWizardInfoBefore=信息\nInfoBeforeLabel=请在继续安装前阅读下列重要信息。\nInfoBeforeClickLabel=如果您想继续安装，单击“下一步”。\nWizardInfoAfter=信息\nInfoAfterLabel=请在继续安装前阅读下列重要信息。\nInfoAfterClickLabel=如果您想继续安装，单击“下一步”。\n\n; *** “用户信息”向导页\nWizardUserInfo=用户信息\nUserInfoDesc=请输入您的信息。\nUserInfoName=用户名(&U):\nUserInfoOrg=组织(&O):\nUserInfoSerial=序列号(&S):\nUserInfoNameRequired=您必须输入名字。\n\n; *** “选择目标目录”向导面\nWizardSelectDir=选择目标位置\nSelectDirDesc=您想将 [name] 安装在什么地方？\nSelectDirLabel3=安装程序将安装 [name] 到下列文件夹中。\nSelectDirBrowseLabel=单击“下一步”继续。如果您想选择其它文件夹，单击“浏览”。\nDiskSpaceGBLabel=至少需要有 [gb] GB 的可用磁盘空间。\nDiskSpaceMBLabel=至少需要有 [mb] MB 的可用磁盘空间。\nCannotInstallToNetworkDrive=安装程序无法安装到一个网络驱动器。\nCannotInstallToUNCPath=安装程序无法安装到一个UNC路径。\nInvalidPath=您必须输入一个带驱动器卷标的完整路径，例如:%n%nC:\\APP%n%n或下列形式的 UNC 路径:%n%n\\\\server\\share\nInvalidDrive=您选定的驱动器或 UNC 共享不存在或不能访问。请选选择其它位置。\nDiskSpaceWarningTitle=没有足够的磁盘空间\nDiskSpaceWarning=安装程序至少需要 %1 KB 的可用空间才能安装，但选定驱动器只有 %2 KB 的可用空间。%n%n您一定要继续吗？\nDirNameTooLong=文件夹名或路径太长。\nInvalidDirName=文件夹名是无效的。\nBadDirName32=文件夹名不能包含下列任何字符:%n%n%1\nDirExistsTitle=文件夹存在\nDirExists=文件夹:%n%n%1%n%n已经存在。您一定要安装到这个文件夹中吗？\nDirDoesntExistTitle=文件夹不存在\nDirDoesntExist=文件夹:%n%n%1%n%n不存在。您想要创建此目录吗？\n\n; *** “选择组件”向导页\nWizardSelectComponents=选择组件\nSelectComponentsDesc=您想安装哪些程序的组件？\nSelectComponentsLabel2=选择您想要安装的组件；清除您不想安装的组件。然后单击“下一步”继续。\nFullInstallation=完全安装\n; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)\nCompactInstallation=简洁安装\nCustomInstallation=自定义安装\nNoUninstallWarningTitle=组件存在\nNoUninstallWarning=安装程序侦测到下列组件已在您的电脑中安装。:%n%n%1%n%n取消选定这些组件将不能卸载它们。%n%n您一定要继续吗？\nComponentSize1=%1 KB\nComponentSize2=%1 MB\nComponentsDiskSpaceGBLabel=当前选择的组件至少需要 [gb] GB 的磁盘空间。\nComponentsDiskSpaceMBLabel=当前选择的组件至少需要 [mb] MB 的磁盘空间。\n\n; *** “选择附加任务”向导页\nWizardSelectTasks=选择附加任务\nSelectTasksDesc=您想要安装程序执行哪些附加任务？\nSelectTasksLabel2=选择您想要安装程序在安装 [name] 时执行的附加任务，然后单击“下一步”。\n\n; *** “选择开始菜单文件夹”向导页\nWizardSelectProgramGroup=选择开始菜单文件夹\nSelectStartMenuFolderDesc=您想在哪里放置程序的快捷方式？\nSelectStartMenuFolderLabel3=安装程序现在将在下列开始菜单文件夹中创建程序的快捷方式。\nSelectStartMenuFolderBrowseLabel=单击“下一步”继续。如果您想选择其它文件夹，单击“浏览”。\nMustEnterGroupName=您必须输入一个文件夹名。\nGroupNameTooLong=文件夹名或路径太长。\nInvalidGroupName=文件夹名是无效的。\nBadGroupName=文件夹名不能包含下列任何字符:%n%n%1\nNoProgramGroupCheck2=不创建开始菜单文件夹(&D)\n\n; *** “准备安装”向导页\nWizardReady=准备安装\nReadyLabel1=安装程序现在准备开始安装 [name] 到您的电脑中。\nReadyLabel2a=单击“安装”继续此安装程序。如果您想要回顾或改变设置，请单击“上一步”。\nReadyLabel2b=单击“安装”继续此安装程序?\nReadyMemoUserInfo=用户信息:\nReadyMemoDir=目标位置:\nReadyMemoType=安装类型:\nReadyMemoComponents=选定组件:\nReadyMemoGroup=开始菜单文件夹:\nReadyMemoTasks=附加任务:\n\n; *** “正在准备安装”向导页\nWizardPreparing=正在准备安装\nPreparingDesc=安装程序正在准备安装 [name] 到您的电脑中。\nPreviousInstallNotCompleted=先前程序的安装/卸载未完成。您需要重新启动您的电脑才能完成安装。%n%n在重新启动电脑后，再运行安装完成 [name] 的安装。\nCannotContinue=安装程序不能继续。请单击“取消”退出。\nApplicationsFound=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。\nApplicationsFound2=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。安装完成后，安装程序将尝试重新启动应用程序。\nCloseApplications=自动关闭该应用程序(&A)\nDontCloseApplications=不要关闭该应用程序(D)\nErrorCloseApplications=安装程序无法自动关闭所有应用程序。在继续之前，我们建议您关闭所有使用需要更新的安装程序文件。\nPrepareToInstallNeedsRestart=安装程序必须重新启动计算机。重新启动计算机后，请再次运行安装程序以完成 [name] 的安装。%n%n是否立即重新启动？\n\n; *** “正在安装”向导页\nWizardInstalling=正在安装\nInstallingLabel=安装程序正在安装 [name] 到您的电脑中，请稍等。\n\n; *** “安装完成”向导页\nFinishedHeadingLabel=[name] 安装完成\nFinishedLabelNoIcons=安装程序已在您的电脑中安装了 [name]。\nFinishedLabel=安装程序已在您的电脑中安装了 [name]。此应用程序可以通过选择安装的快捷方式运行。\nClickFinish=单击“完成”退出安装程序。\nFinishedRestartLabel=要完成 [name] 的安装，安装程序必须重新启动您的电脑。您想现在重新启动吗？\nFinishedRestartMessage=要完成 [name] 的安装，安装程序必须重新启动您的电脑。%n%n您想现在重新启动吗？\nShowReadmeCheck=是，您想查阅自述文件\nYesRadio=是，立即重新启动电脑(&Y)\nNoRadio=否，稍后重新启动电脑(&N)\n; 用于象“运行 MyProg.exe”\nRunEntryExec=运行 %1\n; 用于象“查阅 Readme.txt”\nRunEntryShellExec=查阅 %1\n\n; *** “安装程序需要下一张磁盘”提示\nChangeDiskTitle=安装程序需要下一张磁盘\nSelectDiskLabel2=请插入磁盘 %1 并单击“确定”。%n%n如果这个磁盘中的文件不能在不同于下列显示的文件夹中找到，输入正确的路径或单击“浏览”。\nPathLabel=路径(&P):\nFileNotInDir2=文件“%1”不能在“%2”定位。请插入正确的磁盘或选择其它文件夹。\nSelectDirectoryLabel=请指定下一张磁盘的位置。\n\n; *** 安装状态消息\nSetupAborted=安装程序未完成安装。%n%n请修正这个问题并重新运行安装程序。\nAbortRetryIgnoreSelectAction=选项\nAbortRetryIgnoreRetry=重试(&T)\nAbortRetryIgnoreIgnore=忽略错误并继续(&I)\nAbortRetryIgnoreCancel=关闭安装程序\n\n; *** 安装状态消息\nStatusClosingApplications=正在关闭应用程序...\nStatusCreateDirs=正在创建目录...\nStatusExtractFiles=正在解压缩文件...\nStatusCreateIcons=正在创建快捷方式...\nStatusCreateIniEntries=正在创建 INI 条目...\nStatusCreateRegistryEntries=正在创建注册表条目...\nStatusRegisterFiles=正在注册文件...\nStatusSavingUninstall=正在保存卸载信息...\nStatusRunProgram=正在完成安装...\nStatusRestartingApplications=正在重启应用程序...\nStatusRollback=正在撤销更改...\n\n; *** 其它错误\nErrorInternal2=内部错误: %1\nErrorFunctionFailedNoCode=%1 失败\nErrorFunctionFailed=%1 失败；错误代码 %2\nErrorFunctionFailedWithMessage=%1 失败；错误代码 %2.%n%3\nErrorExecutingProgram=不能执行文件:%n%1\n\n; *** 注册表错误\nErrorRegOpenKey=打开注册表项时出错:%n%1\\%2\nErrorRegCreateKey=创建注册表项时出错:%n%1\\%2\nErrorRegWriteKey=写入注册表项时出错:%n%1\\%2\n\n; *** INI 错误\nErrorIniEntry=在文件“%1”创建 INI 项目错误。\n\n; *** 文件复制错误\nFileAbortRetryIgnoreSkipNotRecommended=跳过这个文件 (不推荐)(&S)\nFileAbortRetryIgnoreIgnoreNotRecommended=忽略错误并继续 (不推荐)(&I)\nSourceIsCorrupted=源文件已损坏\nSourceDoesntExist=源文件“%1”不存在\nExistingFileReadOnly2=无法替换现有文件，因为它是只读的。\nExistingFileReadOnlyRetry=移除只读属性并重试(&R)\nExistingFileReadOnlyKeepExisting=保留现有文件(&K)\nErrorReadingExistingDest=尝试读取现有文件时发生一个错误:\nFileExists=文件已经存在。%n%n您想要安装程序覆盖它吗？\nExistingFileNewer=现有的文件新与安装程序要安装的文件。推荐您保留现有文件。%n%n您想要保留现有的文件吗？\nErrorChangingAttr=尝试改变下列现有的文件的属性时发生一个错误:\nErrorCreatingTemp=尝试在目标目录创建文件时发生一个错误:\nErrorReadingSource=尝试读取下列源文件时发生一个错误:\nErrorCopying=尝试复制下列文件时发生一个错误:\nErrorReplacingExistingFile=尝试替换现有的文件时发生错误:\nErrorRestartReplace=重启电脑后替换文件失败:\nErrorRenamingTemp=尝试重新命名以下目标目录中的一个文件时发生错误:\nErrorRegisterServer=不能注册 DLL/OCX: %1\nErrorRegSvr32Failed=RegSvr32 失败；退出代码 %1\nErrorRegisterTypeLib=不能注册类型库: %1\n\n; *** 卸载显示名字标记\n; used for example as 'My Program (32-bit)'\nUninstallDisplayNameMark=%1 (%2)\n; used for example as 'My Program (32-bit, All users)'\nUninstallDisplayNameMarks=%1 (%2, %3)\nUninstallDisplayNameMark32Bit=32位\nUninstallDisplayNameMark64Bit=64位\nUninstallDisplayNameMarkAllUsers=所有用户\nUninstallDisplayNameMarkCurrentUser=当前用户\n\n; *** 安装后错误\nErrorOpeningReadme=当尝试打开自述文件时发生一个错误。\nErrorRestartingComputer=安装程序不能重新启动电脑，请手动重启。\n\n; *** 卸载消息\nUninstallNotFound=文件“%1”不存在。不能卸载。\nUninstallOpenError=文件“%1”不能打开。不能卸载。\nUninstallUnsupportedVer=卸载日志文件“%1”有未被这个版本的卸载器承认的格式。不能卸载\nUninstallUnknownEntry=在卸载日志中遇到一个未知的条目 (%1)\nConfirmUninstall=您确认想要完全删除 %1 及它的所有组件吗？\nUninstallOnlyOnWin64=这个安装程序只能在 64 位 Windows 中进行卸载。\nOnlyAdminCanUninstall=这个安装的程序只能是有管理员权限的用户才能卸载。\nUninstallStatusLabel=正在从您的电脑中删除 %1，请等待。\nUninstalledAll=%1 已顺利地从您的电脑中删除。\nUninstalledMost=%1 卸载完成。%n%n有一些内容不能被删除。您可以手工删除它们。\nUninstalledAndNeedsRestart=要完成 %1 的卸载，您的电脑必须重新启动。%n%n您现在想重新启动电脑吗？\nUninstallDataCorrupted=“%1”文件被破坏，不能卸载\n\n; *** 卸载状态消息\nConfirmDeleteSharedFileTitle=删除共享文件吗？\nConfirmDeleteSharedFile2=系统中包含的下列共享文件已经不被其它程序使用。您想要卸载程序删除这些共享文件吗？%n%n如果这些文件被删除，但还有程序正在使用这些文件，这些程序可能不能正确执行。如果您不能确定，选择“否”。把这些文件保留在系统中以免引起问题。\nSharedFileNameLabel=文件名:\nSharedFileLocationLabel=位置:\nWizardUninstalling=卸载状态\nStatusUninstalling=正在卸载 %1...\n\n; *** Shutdown block reasons\nShutdownBlockReasonInstallingApp=正在安装 %1.\nShutdownBlockReasonUninstallingApp=正在卸载 %1.\n\n; The custom messages below aren't used by Setup itself, but if you make\n; use of them in your scripts, you'll want to translate them.\n\n[CustomMessages]\n\nNameAndVersion=%1 版本 %2\nAdditionalIcons=附加快捷方式:\nCreateDesktopIcon=创建桌面快捷方式(&D)\nCreateQuickLaunchIcon=创建快速运行栏快捷方式(&Q)\nProgramOnTheWeb=%1 网站\nUninstallProgram=卸载 %1\nLaunchProgram=运行 %1\nAssocFileExtension=将 %2 文件扩展名与 %1 建立关联(&A)\nAssocingFileExtension=正在将 %2 文件扩展名与 %1 建立关联...\nAutoStartProgramGroupDescription=启动组:\nAutoStartProgram=自动启动 %1\nAddonHostProgramNotFound=%1无法找到您所选择的文件夹。%n%n您想要继续吗？\n\n"
  },
  {
    "path": "build/win32/i18n/Default.zh-tw.isl",
    "content": "﻿; *** Inno Setup version 6.0.0+ Chinese Traditional messages ***\n;\n; Name: John Wu, mr.johnwu@gmail.com\n; Base on 5.5.3+ translations by Samuel Lee, Email: 751555749@qq.com\n; Translation based on network resource\n;\n\n[LangOptions]\n; The following three entries are very important. Be sure to read and \n; understand the '[LangOptions] section' topic in the help file.\n; If Language Name display incorrect, uncomment next line\nLanguageName=<7e41><9ad4><4e2d><6587>\nLanguageID=$0404\nLanguageCodepage=950\n; If the language you are translating to requires special font faces or\n; sizes, uncomment any of the following entries and change them accordingly.\nDialogFontName=新細明體\nDialogFontSize=9\nTitleFontName=Arial\nTitleFontSize=28\nWelcomeFontName=新細明體\nWelcomeFontSize=12\nCopyrightFontName=新細明體\nCopyrightFontSize=9\n\n[Messages]\n\n; *** Application titles\nSetupAppTitle=安裝程式\nSetupWindowTitle=%1 安裝程式\nUninstallAppTitle=解除安裝\nUninstallAppFullTitle=解除安裝 %1\n\n; *** Misc. common\nInformationTitle=訊息\nConfirmTitle=確認\nErrorTitle=錯誤\n\n; *** SetupLdr messages\nSetupLdrStartupMessage=這將會安裝 %1。您想要繼續嗎?\nLdrCannotCreateTemp=無法建立暫存檔案。安裝程式將會結束。\nLdrCannotExecTemp=無法執行暫存檔案。安裝程式將會結束。\nHelpTextNote=\n\n; *** Startup error messages\nLastErrorMessage=%1%n%n錯誤 %2: %3\nSetupFileMissing=安裝資料夾中遺失檔案 %1。請修正此問題或重新取得此軟體。\nSetupFileCorrupt=安裝檔案已經損毀。請重新取得此軟體。\nSetupFileCorruptOrWrongVer=安裝檔案已經損毀，或與安裝程式的版本不符。請重新取得此軟體。\nInvalidParameter=某個無效的變量已被傳遞到了命令列:%n%n%1\nSetupAlreadyRunning=安裝程式已經在執行。\nWindowsVersionNotSupported=本安裝程式並不支援目前在電腦所運行的 Windows 版本。\nWindowsServicePackRequired=本安裝程式需要 %1 Service Pack %2 或更新。\nNotOnThisPlatform=這個程式無法在 %1 執行。\nOnlyOnThisPlatform=這個程式必須在 %1 執行。\nOnlyOnTheseArchitectures=這個程式只能在專門為以下處理器架構而設計的 Windows 上安裝:%n%n%1\nWinVersionTooLowError=這個程式必須在 %1 版本 %2 或以上的系統執行。\nWinVersionTooHighError=這個程式無法安裝在 %1 版本 %2 或以上的系統。\nAdminPrivilegesRequired=您必須登入成系統管理員以安裝這個程式。\nPowerUserPrivilegesRequired=您必須登入成具有系統管理員或 Power User 權限的使用者以安裝這個程式。\nSetupAppRunningError=安裝程式偵測到 %1 正在執行。%n%n請關閉該程式後按 [確定] 繼續，或按 [取消] 離開。\nUninstallAppRunningError=解除安裝程式偵測到 %1 正在執行。%n%n請關閉該程式後按 [確定] 繼續，或按 [取消] 離開。\n\n; *** Startup questions\nPrivilegesRequiredOverrideTitle=選擇安裝程式安裝模式\nPrivilegesRequiredOverrideInstruction=選擇安裝模式\nPrivilegesRequiredOverrideText1=可以為所有使用者安裝 %1 (需要系統管理權限)，或是僅為您安裝。\nPrivilegesRequiredOverrideText2=可以僅為您安裝 %1，或是為所有使用者安裝 (需要系統管理權限)。\nPrivilegesRequiredOverrideAllUsers=為所有使用者安裝 (&A)\nPrivilegesRequiredOverrideAllUsersRecommended=為所有使用者安裝 (建議選項) (&A)\nPrivilegesRequiredOverrideCurrentUser=僅為我安裝 (&M)\nPrivilegesRequiredOverrideCurrentUserRecommended=僅為我安裝 (建議選項) (&M)\n\n; *** Misc. errors\nErrorCreatingDir=安裝程式無法建立資料夾“%1”。\nErrorTooManyFilesInDir=無法在資料夾“%1”內建立檔案，因為資料夾內有太多的檔案。\n\n; *** Setup common messages\nExitSetupTitle=結束安裝程式\nExitSetupMessage=安裝尚未完成。如果您現在結束安裝程式，這個程式將不會被安裝。%n%n您可以稍後再執行安裝程式以完成安裝程序。您現在要結束安裝程式嗎?\nAboutSetupMenuItem=關於安裝程式(&A)...\nAboutSetupTitle=關於安裝程式\nAboutSetupMessage=%1 版本 %2%n%3%n%n%1 網址:%n%4\nAboutSetupNote=\nTranslatorNote=\n\n; *** Buttons\nButtonBack=< 上一步(&B)\nButtonInstall=安裝(&I)\nButtonNext=下一步(&N)  >\nButtonOK=確定\nButtonCancel=取消\nButtonYes=是(&Y)\nButtonYesToAll=全部皆是(&A)\nButtonNo=否(&N)\nButtonNoToAll=全部皆否(&O)\nButtonFinish=完成(&F)\nButtonBrowse=瀏覽(&B)...\nButtonWizardBrowse=瀏覽(&R)...\nButtonNewFolder=建立新資料夾(&M)\n\n; *** \"Select Language\" dialog messages\nSelectLanguageTitle=選擇安裝語言\nSelectLanguageLabel=選擇在安裝過程中使用的語言:\n\n; *** Common wizard text\nClickNext=按 [下一步] 繼續安裝，或按 [取消] 結束安裝程式。\nBeveledLabel=\nBrowseDialogTitle=瀏覽資料夾\nBrowseDialogLabel=在下面的資料夾列表中選擇一個資料夾，然後按 [確定]。\nNewFolderName=新資料夾\n\n; *** \"Welcome\" wizard page\nWelcomeLabel1=歡迎使用 [name] 安裝程式\nWelcomeLabel2=這個安裝程式將會安裝 [name/ver] 到您的電腦。%n%n我們強烈建議您在安裝過程中關閉其它的應用程式，以避免與安裝程式發生沖突。\n\n; *** \"Password\" wizard page\nWizardPassword=密碼\nPasswordLabel1=這個安裝程式具有密碼保護。\nPasswordLabel3=請輸入密碼，然後按 [下一步] 繼續。密碼是區分大小寫的。\nPasswordEditLabel=密碼(&P):\nIncorrectPassword=您輸入的密碼不正確，請重新輸入。\n\n; *** \"License Agreement\" wizard page\nWizardLicense=授權合約\nLicenseLabel=請閱讀以下授權合約。\nLicenseLabel3=請閱讀以下授權合約，您必須接受合約的各項條款才能繼續安裝。\nLicenseAccepted=我同意(&A)\nLicenseNotAccepted=我不同意(&D)\n\n; *** \"Information\" wizard pages\nWizardInfoBefore=訊息\nInfoBeforeLabel=在繼續安裝之前請閱讀以下重要資訊。\nInfoBeforeClickLabel=當您準備好繼續安裝，請按 [下一步]。\nWizardInfoAfter=訊息\nInfoAfterLabel=在繼續安裝之前請閱讀以下重要資訊。\nInfoAfterClickLabel=當您準備好繼續安裝，請按 [下一步]。\n\n; *** \"User Information\" wizard page\nWizardUserInfo=使用者資訊\nUserInfoDesc=請輸入您的資料。\nUserInfoName=使用者名稱(&U):\nUserInfoOrg=組織(&O):\nUserInfoSerial=序號(&S):\nUserInfoNameRequired=您必須輸入您的名稱。\n\n; *** \"Select Destination Location\" wizard page\nWizardSelectDir=選擇目的資料夾\nSelectDirDesc=選擇安裝程式安裝 [name] 的位置。\nSelectDirLabel3=安裝程式將會把 [name] 安裝到下面的資料夾。\nSelectDirBrowseLabel=按 [下一步] 繼續，如果您想選擇另一個資料夾，請按 [瀏覽]。\nDiskSpaceMBLabel=最少需要 [mb] MB 磁碟空間。\nCannotInstallToNetworkDrive=安裝程式無法安裝於網絡磁碟機。\nCannotInstallToUNCPath=安裝程式無法安裝於 UNC 路徑。\nInvalidPath=您必須輸入完整的路徑名稱及磁碟機代碼。%n%n例如 C:\\App 或 UNC 路徑格式 \\\\伺服器\\共用資料夾。\nInvalidDrive=您選取的磁碟機或 UNC 名稱不存在或無法存取，請選擇其他的目的地。\nDiskSpaceWarningTitle=磁碟空間不足\nDiskSpaceWarning=安裝程式需要至少 %1 KB 的磁碟空間，您所選取的磁碟只有 %2 KB 可用空間。%n%n您要繼續安裝嗎?\nDirNameTooLong=資料夾名稱或路徑太長。\nInvalidDirName=資料夾名稱不正確。\nBadDirName32=資料夾名稱不得包含以下特殊字元:%n%n%1\nDirExistsTitle=資料夾已經存在\nDirExists=資料夾：%n%n%1%n%n 已經存在。仍要安裝到該資料夾嗎？\nDirDoesntExistTitle=資料夾不存在\nDirDoesntExist=資料夾：%n%n%1%n%n 不存在。要建立該資料夾嗎？\n\n; *** \"Select Components\" wizard page\nWizardSelectComponents=選擇元件\nSelectComponentsDesc=選擇將會被安裝的元件。\nSelectComponentsLabel2=選擇您想要安裝的元件；清除您不想安裝的元件。然後按 [下一步] 繼續安裝。\nFullInstallation=完整安裝\n; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)\nCompactInstallation=最小安裝\nCustomInstallation=自訂安裝\nNoUninstallWarningTitle=元件已存在\nNoUninstallWarning=安裝程式偵測到以下元件已經安裝在您的電腦上:%n%n%1%n%n取消選擇這些元件將不會移除它們。%n%n您仍然要繼續嗎?\nComponentSize1=%1 KB\nComponentSize2=%1 MB\nComponentsDiskSpaceMBLabel=目前的選擇需要至少 [mb] MB 磁碟空間。\n\n; *** \"Select Additional Tasks\" wizard page\nWizardSelectTasks=選擇附加的工作\nSelectTasksDesc=選擇要執行的附加工作。\nSelectTasksLabel2=選擇安裝程式在安裝 [name] 時要執行的附加工作，然後按 [下一步]。\n\n; *** \"Select Start Menu Folder\" wizard page\nWizardSelectProgramGroup=選擇「開始」功能表的資料夾\nSelectStartMenuFolderDesc=選擇安裝程式建立程式的捷徑的位置。\nSelectStartMenuFolderLabel3=安裝程式將會把程式的捷徑建立在下面的「開始」功能表資料夾。\nSelectStartMenuFolderBrowseLabel=按 [下一步] 繼續，如果您想選擇另一個資料夾，請按 [瀏覽]。\nMustEnterGroupName=您必須輸入一個資料夾的名稱。\nGroupNameTooLong=資料夾名稱或路徑太長。\nInvalidGroupName=資料夾名稱不正確。\nBadGroupName=資料夾名稱不得包含下列字元:%n%n%1\nNoProgramGroupCheck2=不要在「開始」功能表中建立資料夾(&D)\n\n; *** \"Ready to Install\" wizard page\nWizardReady=準備安裝\nReadyLabel1=安裝程式將開始安裝 [name] 到您的電腦中。\nReadyLabel2a=按下 [安裝] 繼續安裝，或按 [上一步] 重新檢視或設定各選項的內容。\nReadyLabel2b=按下 [安裝] 繼續安裝。\nReadyMemoUserInfo=使用者資訊\nReadyMemoDir=目的資料夾:\nReadyMemoType=安裝型態:\nReadyMemoComponents=選擇的元件:\nReadyMemoGroup=「開始」功能表資料夾:\nReadyMemoTasks=附加工作:\n\n; *** \"Preparing to Install\" wizard page\nWizardPreparing=準備安裝程式\nPreparingDesc=安裝程式準備將 [name] 安裝到您的電腦上。\nPreviousInstallNotCompleted=先前的安裝/ 解除安裝尚未完成，您必須重新啟動電腦以完成該安裝。%n%n在重新啟動電腦之後，請再執行這個程式來安裝 [name]。\nCannotContinue=安裝程式無法繼續。請按 [取消] 離開。\nApplicationsFound=下面的應用程式正在使用安裝程式所需要更新的文檔。建議您允許安裝程式自動關閉這些應用程式。\nApplicationsFound2=下面的應用程式正在使用安裝程式所需要更新的文檔。建議您允許安裝程式自動關閉這些應用程式。當安裝過程結束後，本安裝程式將會嘗試重新開啟該應用程式。\nCloseApplications=關閉應用程式(&A)\nDontCloseApplications=不要關閉應用程式 (&D)\nErrorCloseApplications=安裝程式無法自動關閉所有應用程式。建議您在繼續前先關閉所有應用程式使用的檔案。\n\n; *** \"Installing\" wizard page\nWizardInstalling=正在安裝\nInstallingLabel=請稍候，安裝程式正在將 [name] 安裝到您的電腦上\n\n; *** \"Setup Completed\" wizard page\nFinishedHeadingLabel=安裝完成\nFinishedLabelNoIcons=安裝程式已經將 [name] 安裝在您的電腦上。\nFinishedLabel=安裝程式已經將 [name] 安裝在您的電腦中，您可以選擇程式的圖示來執行該應用程式。\nClickFinish=按 [完成] 以結束安裝程式。\nFinishedRestartLabel=要完成 [name] 的安裝，安裝程式必須重新啟動您的電腦。您想要現在重新啟動電腦嗎?\nFinishedRestartMessage=要完成 [name] 的安裝，安裝程式必須重新啟動您的電腦。%n%n您想要現在重新啟動電腦嗎?\nShowReadmeCheck=是，我要閱讀讀我檔案。\nYesRadio=是，立即重新啟動電腦(&Y)\nNoRadio=否，我稍後重新啟動電腦(&N)\n; used for example as 'Run MyProg.exe'\nRunEntryExec=執行 %1\n; used for example as 'View Readme.txt'\nRunEntryShellExec=檢視 %1\n\n; *** \"Setup Needs the Next Disk\" \nChangeDiskTitle=安裝程式需要下一張磁片\nSelectDiskLabel2=請插入磁片 %1，然後按 [確定]。%n%n如果檔案不在以下所顯示的資料夾之中，請輸入正確的資料夾名稱或按 [瀏覽] 選取。\nPathLabel=路徑(&P):\nFileNotInDir2=檔案“%1”無法在“%2”找到。請插入正確的磁片或選擇其它的資料夾。\nSelectDirectoryLabel=請指定下一張磁片的位置。\n\n; *** Installation phase messages\nSetupAborted=安裝沒有完成。%n%n請更正問題後重新安裝一次。\nAbortRetryIgnoreSelectAction=選取動作\nAbortRetryIgnoreRetry=請再試一次 (&T)\nAbortRetryIgnoreIgnore=略過錯誤並繼續 (&I)\nAbortRetryIgnoreCancel=取消安裝\n\n; *** Installation status messages\nStatusClosingApplications=正在關閉應用程式...\nStatusCreateDirs=正在建立資料夾...\nStatusExtractFiles=正在解壓縮檔案...\nStatusCreateIcons=正在建立程式集圖示...\nStatusCreateIniEntries=寫入 INI 檔案的項目...\nStatusCreateRegistryEntries=正在更新系統登錄...\nStatusRegisterFiles=正在登錄檔案...\nStatusSavingUninstall=儲存解除安裝資訊...\nStatusRunProgram=正在完成安裝...\nStatusRestartingApplications=正在重新開啟應用程式...\nStatusRollback=正在復原變更...\n\n; *** Misc. errors\nErrorInternal2=內部錯誤: %1\nErrorFunctionFailedNoCode=%1 失敗\nErrorFunctionFailed=%1 失敗；代碼 %2\nErrorFunctionFailedWithMessage=%1 失敗；代碼 %2.%n%3\nErrorExecutingProgram=無法執行檔案:%n%1\n\n; *** Registry errors\nErrorRegOpenKey=無法開啟登錄鍵:%n%1\\%2\nErrorRegCreateKey=無法建立登錄項目:%n%1\\%2\nErrorRegWriteKey=無法變更登錄項目:%n%1\\%2\n\n; *** INI errors\nErrorIniEntry=在檔案“%1”建立 INI 項目錯誤。\n\n; *** File copying errors\nFileAbortRetryIgnoreSkipNotRecommended=略過這個檔案 (不建議) (&S)\nFileAbortRetryIgnoreIgnoreNotRecommended=略過錯誤並繼續 (不建議) (&I)\nSourceDoesntExist=來源檔案“%1”不存在。\nSourceIsCorrupted=來源檔案已經損毀。\nExistingFileReadOnly2=無法取代現有檔案，因為檔案已標示為唯讀。\nExistingFileReadOnlyRetry=移除唯讀屬性並重試 (&R)\nExistingFileReadOnlyKeepExisting=保留現有檔案 (&K)\nErrorReadingExistingDest=讀取一個已存在的檔案時發生錯誤:\nFileExists=檔案已經存在。%n%n 要讓安裝程式加以覆寫嗎?\nExistingFileNewer=存在的檔案版本比較新，建議您保留目前已存在的檔案。%n%n您要保留目前已存在的檔案嗎?\nErrorChangingAttr=在變更檔案屬性時發生錯誤:\nErrorCreatingTemp=在目的資料夾中建立檔案時發生錯誤:\nErrorReadingSource=讀取原始檔案時發生錯誤:\nErrorCopying=復制檔案時發生錯誤:\nErrorReplacingExistingFile=取代檔案時發生錯誤:\nErrorRestartReplace=重新啟動電腦後取代檔案失敗:\nErrorRenamingTemp=在目的資料夾變更檔案名稱時發生錯誤:\nErrorRegisterServer=無法注冊 DLL/OCX 檔案: %1。\nErrorRegSvr32Failed=RegSvr32 失敗；退出代碼 %1\nErrorRegisterTypeLib=無法注冊類型庫: %1。\n\n; *** Uninstall display name markings\n; used for example as 'My Program (32-bit)'\nUninstallDisplayNameMark=%1 (%2)\n; used for example as 'My Program (32-bit, All users)'\nUninstallDisplayNameMarks=%1 (%2, %3)\nUninstallDisplayNameMark32Bit=32-bit\nUninstallDisplayNameMark64Bit=64-bit\nUninstallDisplayNameMarkAllUsers=所有使用者\nUninstallDisplayNameMarkCurrentUser=目前使用者\n\n; *** Post-installation errors\nErrorOpeningReadme=開啟讀我檔案時發生錯誤。\nErrorRestartingComputer=安裝程式無法重新啟動電腦，請以手動方式自行重新啟動電腦。\n\n; *** Uninstaller messages\nUninstallNotFound=檔案“%1”不存在，無法移除程式。\nUninstallOpenError=無法開啟檔案“%1”，無法移除程式。\nUninstallUnsupportedVer=這個版本的解除安裝程式無法辨識記錄檔 “%1” 之格式，無法解除安裝。\nUninstallUnknownEntry=解除安裝記錄檔中發現未知的記錄 (%1)。\nConfirmUninstall=您確定要完全移除 %1 及其相關的檔案嗎?\nUninstallOnlyOnWin64=這個程式只能在 64 位元的 Windows 上解除安裝。\nOnlyAdminCanUninstall=這個程式要具備系統管理員權限的使用者方可解除安裝。\nUninstallStatusLabel=正在從您的電腦移除 %1 中，請稍候...\nUninstalledAll=%1 已經成功從您的電腦中移除。\nUninstalledMost=%1 解除安裝完成。%n%n某些檔案及元件無法移除，您可以自行刪除這些檔案。\nUninstalledAndNeedsRestart=要完成 %1 的解除安裝程序，您必須重新啟動電腦。%n%n您想要現在重新啟動電腦嗎?\nUninstallDataCorrupted=檔案“%1”已經損毀，無法解除安裝。\n\n; *** Uninstallation phase messages\nConfirmDeleteSharedFileTitle=移除共用檔案\nConfirmDeleteSharedFile2=系統顯示下列共用檔案已不再被任何程式所使用，您要移除這些檔案嗎?%n%n%1%n%n倘若您移除了以上檔案但仍有程式需要使用它們，將造成這些程式無法正常執行，因此您若無法確定請選擇 [否]。保留這些檔案在您的系統中不會造成任何損害。\nSharedFileNameLabel=檔案名稱:\nSharedFileLocationLabel=位置:\nWizardUninstalling=解除安裝狀態\nStatusUninstalling=正在解除安裝 %1...\n\n; *** Shutdown block reasons\nShutdownBlockReasonInstallingApp=正在安裝 %1.\nShutdownBlockReasonUninstallingApp=正在解除安裝 %1.\n\n; The custom messages below aren't used by Setup itself, but if you make\n; use of them in your scripts, you'll want to translate them.\n\n[CustomMessages]\n\nNameAndVersion=%1 版本 %2\nAdditionalIcons=附加圖示:\nCreateDesktopIcon=建立桌面圖示(&D)\nCreateQuickLaunchIcon=建立快速啟動圖示(&Q)\nProgramOnTheWeb=%1 的網站\nUninstallProgram=解除安裝 %1\nLaunchProgram=啟動 %1\nAssocFileExtension=將 %1 與檔案副檔名 %2 產生關聯(&A)\nAssocingFileExtension=正在將 %1 與檔案副檔名 %2 產生關聯...\nAutoStartProgramGroupDescription=開啟:\nAutoStartProgram=自動開啟 %1\nAddonHostProgramNotFound=%1 無法在您所選的資料夾中找到。%n%n您是否還要繼續？\n"
  },
  {
    "path": "build/win32/i18n/messages.de.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=Aktion \"Mit %1 ffnen\" dem Dateikontextmen von Windows-Explorer hinzufgen\nAddContextMenuFolders=Aktion \"Mit %1 ffnen\" dem Verzeichniskontextmen von Windows-Explorer hinzufgen\nAssociateWithFiles=%1 als Editor fr untersttzte Dateitypen registrieren\nAddToPath=Zu PATH hinzufgen (nach dem Neustart verfgbar)\nRunAfter=%1 nach der Installation ausfhren\nOther=Andere:\nSourceFile=%1-Quelldatei\nOpenWithCodeContextMenu=Mit %1 ffnen\nUpdatingVisualStudioCode=Visual Studio Code wird aktualisiert..."
  },
  {
    "path": "build/win32/i18n/messages.en.isl",
    "content": "[Messages]\nFinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed shortcuts.\nConfirmUninstall=Are you sure you want to completely remove %1 and all of its components?\n\n[CustomMessages]\nAdditionalIcons=Additional icons:\nCreateDesktopIcon=Create a &desktop icon\nCreateQuickLaunchIcon=Create a &Quick Launch icon\nAddContextMenuFiles=Add \"Open with %1\" action to Windows Explorer file context menu\nAddContextMenuFolders=Add \"Open with %1\" action to Windows Explorer directory context menu\nAssociateWithFiles=Register %1 as an editor for supported file types\nAddToPath=Add to PATH (requires shell restart)\nRunAfter=Run %1 after installation\nOther=Other:\nSourceFile=%1 Source File\nOpenWithCodeContextMenu=Open w&ith %1\nUpdatingVisualStudioCode=Updating Visual Studio Code...\n"
  },
  {
    "path": "build/win32/i18n/messages.es.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=Agregar la accin \"Abrir con %1\" al men contextual de archivo del Explorador de Windows\nAddContextMenuFolders=Agregar la accin \"Abrir con %1\" al men contextual de directorio del Explorador de Windows\nAssociateWithFiles=Registrar %1 como editor para tipos de archivo admitidos\nAddToPath=Agregar a PATH (disponible despus de reiniciar)\nRunAfter=Ejecutar %1 despus de la instalacin\nOther=Otros:\nSourceFile=Archivo de origen %1\nOpenWithCodeContextMenu=Abrir &con %1\nUpdatingVisualStudioCode=Actualizando Visual Studio Code..."
  },
  {
    "path": "build/win32/i18n/messages.fr.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=Ajouter l'action \"Ouvrir avec %1\" au menu contextuel de fichier de l'Explorateur Windows\nAddContextMenuFolders=Ajouter l'action \"Ouvrir avec %1\" au menu contextuel de rpertoire de l'Explorateur Windows\nAssociateWithFiles=Inscrire %1 en tant qu'diteur pour les types de fichier pris en charge\nAddToPath=Ajouter  PATH (disponible aprs le redmarrage)\nRunAfter=Excuter %1 aprs l'installation\nOther=Autre:\nSourceFile=Fichier source %1\nOpenWithCodeContextMenu=Ouvrir avec %1\nUpdatingVisualStudioCode=Mise  jour de Visual Studio Code..."
  },
  {
    "path": "build/win32/i18n/messages.hu.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=\"Megnyits a kvetkezvel: %1\" parancs hozzadsa a fjlok helyi menjhez a Windows Intzben\nAddContextMenuFolders=\"Megnyits a kvetkezvel: %1\" parancs hozzadsa a mappk helyi menjhez a Windows Intzben\nAssociateWithFiles=%1 regisztrlsa szerkesztknt a tmogatott fjltpusokhoz\nAddToPath=Hozzads a PATH-hoz (jraindts utn lesz elrhet)\nRunAfter=%1 indtsa a telepts utn\nOther=Egyb:\nSourceFile=%1 forrsfjl\nOpenWithCodeContextMenu=Megnyits a kvetkezvel: %1\nUpdatingVisualStudioCode=A Visual Studio Code frisstse..."
  },
  {
    "path": "build/win32/i18n/messages.it.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=Aggiungi azione \"Apri con %1\" al menu di scelta rapida file di Esplora risorse\nAddContextMenuFolders=Aggiungi azione \"Apri con %1\" al menu di scelta rapida directory di Esplora risorse\nAssociateWithFiles=Registra %1 come editor per i tipi di file supportati\nAddToPath=Aggiungi a PATH (disponibile dopo il riavvio)\nRunAfter=Esegui %1 dopo l'installazione\nOther=Altro:\nSourceFile=File di origine %1\nOpenWithCodeContextMenu=Apri con %1\nUpdatingVisualStudioCode=Aggiornamento di Visual Studio Code..."
  },
  {
    "path": "build/win32/i18n/messages.ja.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=GNXv[[̃t@C ReLXg j[ [%1 ŊJ] ANVǉ\nAddContextMenuFolders=GNXv[[̃fBNg ReLXg j[ [%1 ŊJ] ANVǉ\nAssociateWithFiles=T|[gĂt@C̎ނ̃GfB^[ƂāA%1 o^\nAddToPath=PATH ւ̒ǉiċNɎgp\\j\nRunAfter=CXg[ %1 s\nOther=̑:\nSourceFile=%1 \\[X t@C\nOpenWithCodeContextMenu=%1 ŊJ\nUpdatingVisualStudioCode=Visual Studio Code XVĂ܂..."
  },
  {
    "path": "build/win32/i18n/messages.ko.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=\"%1() \" ۾ Windows Ž  Ȳ ´ ޴ ߰\nAddContextMenuFolders=\"%1() \" ۾ Windows Ž ͸ Ȳ ´ ޴ ߰\nAssociateWithFiles=%1() Ǵ  Ŀ   մϴ.\nAddToPath=PATH ߰(ٽ    )\nRunAfter=ġ  %1 \nOther=Ÿ:\nSourceFile=%1  \nOpenWithCodeContextMenu=%1() \nUpdatingVisualStudioCode=Visual Studio Code Ʈ ..."
  },
  {
    "path": "build/win32/i18n/messages.pt-br.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=Adicione a ao \"Abrir com %1\" ao menu de contexto de arquivo do Windows Explorer\nAddContextMenuFolders=Adicione a ao \"Abrir com %1\" ao menu de contexto de diretrio do Windows Explorer\nAssociateWithFiles=Registre %1 como um editor para tipos de arquivos suportados\nAddToPath=Adicione em PATH (disponvel aps reiniciar)\nRunAfter=Executar %1 aps a instalao\nOther=Outros:\nSourceFile=Arquivo Fonte %1\nOpenWithCodeContextMenu=Abrir com %1\nUpdatingVisualStudioCode=Atualizando o Visual Studio Code..."
  },
  {
    "path": "build/win32/i18n/messages.ru.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=  \"   %1\"      Windows\nAddContextMenuFolders=  \"   %1\"     \nAssociateWithFiles= %1       \nAddToPath=  PATH (  )\nRunAfter= %1  \nOther=:\nSourceFile=  %1\nOpenWithCodeContextMenu=   %1\nUpdatingVisualStudioCode= Visual Studio Code..."
  },
  {
    "path": "build/win32/i18n/messages.tr.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=Windows Gezgini balam mensne \"%1 le A\" eylemini ekle\nAddContextMenuFolders=Windows Gezgini dizin balam mensne \"%1 le A\" eylemini ekle\nAssociateWithFiles=%1 uygulamasn desteklenen dosya trleri iin bir dzenleyici olarak kayt et\nAddToPath=PATH'e ekle (yeniden balattktan sonra kullanlabilir)\nRunAfter=Kurulumdan sonra %1 uygulamasn altr.\nOther=Dier:\nSourceFile=%1 Kaynak Dosyas\nOpenWithCodeContextMenu=%1 le A\nUpdatingVisualStudioCode=Visual Studio Code gncelleniyor..."
  },
  {
    "path": "build/win32/i18n/messages.zh-cn.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=ͨ %1 򿪡ӵ Windows ԴļĲ˵\nAddContextMenuFolders=ͨ %1 򿪡ӵ Windows ԴĿ¼Ĳ˵\nAssociateWithFiles= %1 עΪֵ֧ļ͵ı༭\nAddToPath=ӵ PATH (Ч)\nRunAfter=װ %1\nOther=:\nSourceFile=%1 Դļ\nOpenWithCodeContextMenu=ͨ %1 \nUpdatingVisualStudioCode=ڸ Visual Studio Code..."
  },
  {
    "path": "build/win32/i18n/messages.zh-tw.isl",
    "content": "[CustomMessages]\nAddContextMenuFiles=N [H %1 }] ʧ@[J Windows ɮ`ɮתާ@\\\nAddContextMenuFolders=N [H %1 }] ʧ@[J Windows ɮ`ޥؿާ@\\\nAssociateWithFiles=w䴩ɮN %1 Us边\nAddToPath=[J PATH  (sҰʫͮ)\nRunAfter=w˫ %1\nOther=L:\nSourceFile=%1 ӷɮ\nOpenWithCodeContextMenu=H %1 }\nUpdatingVisualStudioCode=bs Visual Studio Code..."
  },
  {
    "path": "cglicenses.json",
    "content": "// -----------------------------------------------------------------------------------------\n// -----------------------------------------------------------------------------------------\n// This file overrides licenses only for OSS components which do not appear in `cgmanifest.json`.\n// i.e. for OSS components that are detected from `package-lock.json` or `Cargo.lock` files.\n//\n// DO NOT EDIT THIS FILE UNLESS THE OSS TOOL INDICATES THAT YOU SHOULD.\n//\n[\n\t{\n\t\t// Reason: The license at https://github.com/aadsm/jschardet/blob/master/LICENSE\n\t\t// does not include a clear Copyright statement and does not credit authors.\n\t\t\"name\": \"jschardet\",\n\t\t\"prependLicenseText\": [\n\t\t\t\"Chardet was originally ported from C++ by Mark Pilgrim. It is now maintained\",\n\t\t\t\" by Dan Blanchard and Ian Cordasco, and was formerly maintained by Erik Rose.\",\n\t\t\t\" JSChardet was ported from python to JavaScript by António Afonso \",\n\t\t\t\" (https://github.com/aadsm/jschardet) and transformed into an npm package by \",\n\t\t\t\"Markus Ast (https://github.com/brainafk)\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The license at https://github.com/microsoft/TypeScript/blob/master/LICENSE.txt\n\t\t// does not include a clear Copyright statement.\n\t\t\"name\": \"typescript\",\n\t\t\"prependLicenseText\": [\n\t\t\t\"Copyright (c) Microsoft Corporation. All rights reserved.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"tunnel-agent\",\n\t\t\"prependLicenseText\": [\n\t\t\t\"Copyright (c) tunnel-agent authors\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The license at https://github.com/rbuckton/reflect-metadata/blob/master/LICENSE\n\t\t// does not include a clear Copyright statement (it's in https://github.com/rbuckton/reflect-metadata/blob/master/CopyrightNotice.txt).\n\t\t\"name\": \"reflect-metadata\",\n\t\t\"prependLicenseText\": [\n\t\t\t\"Copyright (c) Microsoft Corporation. All rights reserved.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The license cannot be found by the tool due to access controls on the repository\n\t\t\"name\": \"vscode-tas-client\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"Copyright (c) 2020 - present Microsoft Corporation\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The license cannot be found by the tool due to access controls on the repository\n\t\t\"name\": \"tas-client\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"Copyright (c) 2020 - present Microsoft Corporation\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The license cannot be found by the tool due to access controls on the repository\n\t\t\"name\": \"tas-client-umd\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"Copyright (c) 2020 - present Microsoft Corporation\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: Repository lacks license text.\n\t\t// https://github.com/tjwebb/fnv-plus/blob/master/package.json declares MIT.\n\t\t// https://github.com/tjwebb/fnv-plus/issues/14\n\t\t\"name\": \"@enonic/fnv-plus\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"Copyright (c) 2014 - present, Travis Webb <me@traviswebb.com>\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"@vscode/win32-app-container-tokens\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"\",\n\t\t\t\"Copyright (c) Microsoft Corporation.\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\"SOFTWARE\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: NPM package does not include repository URL https://github.com/microsoft/vscode-deviceid/issues/12\n\t\t\"name\": \"@vscode/deviceid\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"Copyright (c) Microsoft Corporation.\",\n\t\t\t\"\",\n\t\t\t\"MIT License\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: Missing license file\n\t\t\"name\": \"@tokenizer/token\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"(The MIT License)\",\n\t\t\t\"\",\n\t\t\t\"Copyright (c) 2020 Borewit\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: Missing license file\n\t\t\"name\": \"readable-web-to-node-stream\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"(The MIT License)\",\n\t\t\t\"\",\n\t\t\t\"Copyright (c) 2019 Borewit\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The substack org has been deleted on GH\n\t\t\"name\": \"concat-map\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The substack org has been deleted on GH\n\t\t\"name\": \"github-from-package\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: The substack org has been deleted on GH\n\t\t\"name\": \"minimist\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: repo URI is wrong on crate, pending https://github.com/warp-tech/russh/pull/53\n\t\t\"name\": \"russh-cryptovec\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/warp-tech/russh/1da80d0d599b6ee2d257c544c0d6af4f649c9029/LICENSE-2.0.txt\"\n\t},\n\t{\n\t\t// Reason: repo URI is wrong on crate, pending https://github.com/warp-tech/russh/pull/53\n\t\t\"name\": \"russh-keys\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/warp-tech/russh/1da80d0d599b6ee2d257c544c0d6af4f649c9029/LICENSE-2.0.txt\"\n\t},\n\t{\n\t\t// Reason: license is in a subdirectory in repo\n\t\t\"name\": \"dirs-next\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/xdg-rs/dirs/af4aa39daba0ac68e222962a5aca17360158b7cc/dirs/LICENSE-MIT\"\n\t},\n\t{\n\t\t// Reason: license is in a subdirectory in repo\n\t\t\"name\": \"openssl\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/sfackler/rust-openssl/e43eb58540b27a17f8029c397e3edc12bbc9011f/openssl/LICENSE\"\n\t},\n\t{\n\t\t// Reason: license is in a subdirectory in repo\n\t\t\"name\": \"openssl-sys\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/sfackler/rust-openssl/e43eb58540b27a17f8029c397e3edc12bbc9011f/openssl-sys/LICENSE-MIT\"\n\t},\n\t{\n\t\t// Reason: Missing license file\n\t\t\"name\": \"openssl-macros\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{ // Reason: Missing license file\n\t\t\"name\": \"const_format_proc_macros\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/rodrimati1992/const_format_crates/b2207af46bfbd9f1a6bd12dbffd10feeea3d9fd7/LICENSE-ZLIB.md\"\n\t},\n\t{ // Reason: Missing license file\n\t\t\"name\": \"const_format\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/rodrimati1992/const_format_crates/b2207af46bfbd9f1a6bd12dbffd10feeea3d9fd7/LICENSE-ZLIB.md\"\n\t},\n\t{ // License is MIT/Apache and tool doesn't look in subfolders\n\t\t\"name\": \"toml_edit\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/toml-rs/toml/main/crates/toml_edit/LICENSE-MIT\"\n\t},\n\t{ // License is MIT/Apache and tool doesn't look in subfolders\n\t\t\"name\": \"toml_datetime\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/toml-rs/toml/main/crates/toml_datetime/LICENSE-MIT\"\n\t},\n\t{ // License is MIT/Apache and tool doesn't look in subfolders\n\t\t\"name\": \"dirs-sys-next\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/xdg-rs/dirs/master/dirs-sys/LICENSE-MIT\"\n\t},\n\t{ // License is MIT/Apache and gitlab API doesn't find the project\n\t\t\"name\": \"libredox\",\n\t\t\"fullLicenseTextUri\": \"https://gitlab.redox-os.org/redox-os/libredox/-/raw/master/LICENSE\"\n\t},\n\t{\n\t\t\"name\": \"https-proxy-agent\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"(The MIT License)\",\n\t\t\t\"Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"data-uri-to-buffer\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"(The MIT License)\",\n\t\t\t\"Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"socks-proxy-agent\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"(The MIT License)\",\n\t\t\t\"Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"http-proxy-agent\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"(The MIT License)\",\n\t\t\t\"Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"agent-base\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"(The MIT License)\",\n\t\t\t\"Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"anstyle\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"anstyle-query\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"anstyle-parse\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"anstyle-wincon\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"anstream\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"colorchoice\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"This software is released under the MIT license:\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of\",\n\t\t\t\"this software and associated documentation files (the \\\"Software\\\"), to deal in\",\n\t\t\t\"the Software without restriction, including without limitation the rights to\",\n\t\t\t\"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\",\n\t\t\t\"the Software, and to permit persons to whom the Software is furnished to do so,\",\n\t\t\t\"subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\",\n\t\t\t\"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\",\n\t\t\t\"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\",\n\t\t\t\"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\",\n\t\t\t\"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"cacheable-request\",\n\t\t\"prependLicenseText\": [\n\t\t\t\"Copyright (c) cacheable-request authors\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"@vscode/ts-package-manager\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"\",\n\t\t\t\"Copyright (c) Microsoft Corporation.\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\"SOFTWARE\"\n\t\t]\n\t},\n\t{\n\t\t\"name\":\"vscode-markdown-languageserver\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"\",\n\t\t\t\"Copyright (c) Microsoft Corporation.\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\"SOFTWARE\"\n\t\t]\n\t},\n\t{\n\t\t// Reason: mono-repo where the individual packages are also dual-licensed under MIT and Apache-2.0\n\t\t\"name\": \"system-configuration\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/mullvad/system-configuration-rs/v0.6.0/system-configuration/LICENSE-MIT\"\n\t},\n\t{\n\t\t// Reason: mono-repo where the individual packages are also dual-licensed under MIT and Apache-2.0\n\t\t\"name\": \"system-configuration-sys\",\n\t\t\"fullLicenseTextUri\": \"https://raw.githubusercontent.com/mullvad/system-configuration-rs/v0.6.0/system-configuration-sys/LICENSE-MIT\"\n\t},\n\t{\n\t\t// Reason: License missing from the repository https://github.com/isaacs/chownr/issues/35\n\t\t\"name\": \"chownr\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"The ISC License\",\n\t\t\t\"Copyright (c) Isaac Z. Schlueter and Contributors\",\n\t\t\t\"Permission to use, copy, modify, and/or distribute this software for any\",\n\t\t\t\"purpose with or without fee is hereby granted, provided that the above\",\n\t\t\t\"copyright notice and this permission notice appear in all copies.\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\",\n\t\t\t\"WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\",\n\t\t\t\"MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\",\n\t\t\t\"ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\",\n\t\t\t\"WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\",\n\t\t\t\"ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\",\n\t\t\t\"IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\"\n\t\t]\n\t},\n\t{\n\t\t\"name\": \"@azure/msal-node-runtime\",\n\t\t\"fullLicenseText\": [\n\t\t\t\"MIT License\",\n\t\t\t\"\",\n\t\t\t\"Copyright (c) Microsoft Corporation. All rights reserved.\",\n\t\t\t\"\",\n\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\"\",\n\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\"\",\n\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\"SOFTWARE\"\n\t\t]\n\t}\n]\n"
  },
  {
    "path": "cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"chromium\",\n\t\t\t\t\t\"repositoryUrl\": \"https://chromium.googlesource.com/chromium/src\",\n\t\t\t\t\t\"commitHash\": \"5c0cb964bca15fcf41718d54f4b8d70d6b9079de\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"BSD License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright 2015 The Chromium Authors. All rights reserved.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Redistribution and use in source and binary forms, with or without modification,\",\n\t\t\t\t\"are permitted provided that the following conditions are met:\",\n\t\t\t\t\"\",\n\t\t\t\t\" * Redistributions of source code must retain the above copyright notice, this\",\n\t\t\t\t\"   list of conditions and the following disclaimer.\",\n\t\t\t\t\"\",\n\t\t\t\t\" * Redistributions in binary form must reproduce the above copyright notice,\",\n\t\t\t\t\"   this list of conditions and the following disclaimer in the documentation\",\n\t\t\t\t\"   and/or other materials provided with the distribution.\",\n\t\t\t\t\"\",\n\t\t\t\t\" * Neither the name Google Inc. nor the names of its contributors may be used to\",\n\t\t\t\t\"   endorse or promote products derived from this software without specific\",\n\t\t\t\t\"   prior written permission.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND\",\n\t\t\t\t\"ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\",\n\t\t\t\t\"WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\",\n\t\t\t\t\"DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\",\n\t\t\t\t\"ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\",\n\t\t\t\t\"(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\",\n\t\t\t\t\"LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\",\n\t\t\t\t\"ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\",\n\t\t\t\t\"(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\",\n\t\t\t\t\"SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n\t\t\t],\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"version\": \"132.0.6834.210\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"ffmpeg\",\n\t\t\t\t\t\"repositoryUrl\": \"https://chromium.googlesource.com/chromium/third_party/ffmpeg\",\n\t\t\t\t\t\"commitHash\": \"092f84b6141055bfab609b6b2666b724eee2e130\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"license\": \"LGPL-2.1+\",\n\t\t\t\"version\": \"5.1.git\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"      GNU LESSER GENERAL PUBLIC LICENSE\",\n\t\t\t\t\"                       Version 2.1, February 1999\",\n\t\t\t\t\" Copyright (C) 1991, 1999 Free Software Foundation, Inc.\",\n\t\t\t\t\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\",\n\t\t\t\t\" Everyone is permitted to copy and distribute verbatim copies\",\n\t\t\t\t\" of this license document, but changing it is not allowed.\",\n\t\t\t\t\"[This is the first released version of the Lesser GPL.  It also counts\",\n\t\t\t\t\" as the successor of the GNU Library Public License, version 2, hence\",\n\t\t\t\t\" the version number 2.1.]\",\n\t\t\t\t\"                            Preamble\",\n\t\t\t\t\"  The licenses for most software are designed to take away your\",\n\t\t\t\t\"freedom to share and change it.  By contrast, the GNU General Public\",\n\t\t\t\t\"Licenses are intended to guarantee your freedom to share and change\",\n\t\t\t\t\"free software--to make sure the software is free for all its users.\",\n\t\t\t\t\"  This license, the Lesser General Public License, applies to some\",\n\t\t\t\t\"specially designated software packages--typically libraries--of the\",\n\t\t\t\t\"Free Software Foundation and other authors who decide to use it.  You\",\n\t\t\t\t\"can use it too, but we suggest you first think carefully about whether\",\n\t\t\t\t\"this license or the ordinary General Public License is the better\",\n\t\t\t\t\"strategy to use in any particular case, based on the explanations below.\",\n\t\t\t\t\"  When we speak of free software, we are referring to freedom of use,\",\n\t\t\t\t\"not price.  Our General Public Licenses are designed to make sure that\",\n\t\t\t\t\"you have the freedom to distribute copies of free software (and charge\",\n\t\t\t\t\"for this service if you wish); that you receive source code or can get\",\n\t\t\t\t\"it if you want it; that you can change the software and use pieces of\",\n\t\t\t\t\"it in new free programs; and that you are informed that you can do\",\n\t\t\t\t\"these things.\",\n\t\t\t\t\"  To protect your rights, we need to make restrictions that forbid\",\n\t\t\t\t\"distributors to deny you these rights or to ask you to surrender these\",\n\t\t\t\t\"rights.  These restrictions translate to certain responsibilities for\",\n\t\t\t\t\"you if you distribute copies of the library or if you modify it.\",\n\t\t\t\t\"  For example, if you distribute copies of the library, whether gratis\",\n\t\t\t\t\"or for a fee, you must give the recipients all the rights that we gave\",\n\t\t\t\t\"you.  You must make sure that they, too, receive or can get the source\",\n\t\t\t\t\"code.  If you link other code with the library, you must provide\",\n\t\t\t\t\"complete object files to the recipients, so that they can relink them\",\n\t\t\t\t\"with the library after making changes to the library and recompiling\",\n\t\t\t\t\"it.  And you must show them these terms so they know their rights.\",\n\t\t\t\t\"  We protect your rights with a two-step method: (1) we copyright the\",\n\t\t\t\t\"library, and (2) we offer you this license, which gives you legal\",\n\t\t\t\t\"permission to copy, distribute and/or modify the library.\",\n\t\t\t\t\"  To protect each distributor, we want to make it very clear that\",\n\t\t\t\t\"there is no warranty for the free library.  Also, if the library is\",\n\t\t\t\t\"modified by someone else and passed on, the recipients should know\",\n\t\t\t\t\"that what they have is not the original version, so that the original\",\n\t\t\t\t\"author's reputation will not be affected by problems that might be\",\n\t\t\t\t\"introduced by others.\",\n\t\t\t\t\"\",\n\t\t\t\t\"  Finally, software patents pose a constant threat to the existence of\",\n\t\t\t\t\"any free program.  We wish to make sure that a company cannot\",\n\t\t\t\t\"effectively restrict the users of a free program by obtaining a\",\n\t\t\t\t\"restrictive license from a patent holder.  Therefore, we insist that\",\n\t\t\t\t\"any patent license obtained for a version of the library must be\",\n\t\t\t\t\"consistent with the full freedom of use specified in this license.\",\n\t\t\t\t\"  Most GNU software, including some libraries, is covered by the\",\n\t\t\t\t\"ordinary GNU General Public License.  This license, the GNU Lesser\",\n\t\t\t\t\"General Public License, applies to certain designated libraries, and\",\n\t\t\t\t\"is quite different from the ordinary General Public License.  We use\",\n\t\t\t\t\"this license for certain libraries in order to permit linking those\",\n\t\t\t\t\"libraries into non-free programs.\",\n\t\t\t\t\"  When a program is linked with a library, whether statically or using\",\n\t\t\t\t\"a shared library, the combination of the two is legally speaking a\",\n\t\t\t\t\"combined work, a derivative of the original library.  The ordinary\",\n\t\t\t\t\"General Public License therefore permits such linking only if the\",\n\t\t\t\t\"entire combination fits its criteria of freedom.  The Lesser General\",\n\t\t\t\t\"Public License permits more lax criteria for linking other code with\",\n\t\t\t\t\"the library.\",\n\t\t\t\t\"  We call this license the \\\"Lesser\\\" General Public License because it\",\n\t\t\t\t\"does Less to protect the user's freedom than the ordinary General\",\n\t\t\t\t\"Public License.  It also provides other free software developers Less\",\n\t\t\t\t\"of an advantage over competing non-free programs.  These disadvantages\",\n\t\t\t\t\"are the reason we use the ordinary General Public License for many\",\n\t\t\t\t\"libraries.  However, the Lesser license provides advantages in certain\",\n\t\t\t\t\"special circumstances.\",\n\t\t\t\t\"  For example, on rare occasions, there may be a special need to\",\n\t\t\t\t\"encourage the widest possible use of a certain library, so that it becomes\",\n\t\t\t\t\"a de-facto standard.  To achieve this, non-free programs must be\",\n\t\t\t\t\"allowed to use the library.  A more frequent case is that a free\",\n\t\t\t\t\"library does the same job as widely used non-free libraries.  In this\",\n\t\t\t\t\"case, there is little to gain by limiting the free library to free\",\n\t\t\t\t\"software only, so we use the Lesser General Public License.\",\n\t\t\t\t\"  In other cases, permission to use a particular library in non-free\",\n\t\t\t\t\"programs enables a greater number of people to use a large body of\",\n\t\t\t\t\"free software.  For example, permission to use the GNU C Library in\",\n\t\t\t\t\"non-free programs enables many more people to use the whole GNU\",\n\t\t\t\t\"operating system, as well as its variant, the GNU/Linux operating\",\n\t\t\t\t\"system.\",\n\t\t\t\t\"  Although the Lesser General Public License is Less protective of the\",\n\t\t\t\t\"users' freedom, it does ensure that the user of a program that is\",\n\t\t\t\t\"linked with the Library has the freedom and the wherewithal to run\",\n\t\t\t\t\"that program using a modified version of the Library.\",\n\t\t\t\t\"  The precise terms and conditions for copying, distribution and\",\n\t\t\t\t\"modification follow.  Pay close attention to the difference between a\",\n\t\t\t\t\"\\\"work based on the library\\\" and a \\\"work that uses the library\\\".  The\",\n\t\t\t\t\"former contains code derived from the library, whereas the latter must\",\n\t\t\t\t\"be combined with the library in order to run.\",\n\t\t\t\t\"\",\n\t\t\t\t\"                  GNU LESSER GENERAL PUBLIC LICENSE\",\n\t\t\t\t\"   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\",\n\t\t\t\t\"  0. This License Agreement applies to any software library or other\",\n\t\t\t\t\"program which contains a notice placed by the copyright holder or\",\n\t\t\t\t\"other authorized party saying it may be distributed under the terms of\",\n\t\t\t\t\"this Lesser General Public License (also called \\\"this License\\\").\",\n\t\t\t\t\"Each licensee is addressed as \\\"you\\\".\",\n\t\t\t\t\"  A \\\"library\\\" means a collection of software functions and/or data\",\n\t\t\t\t\"prepared so as to be conveniently linked with application programs\",\n\t\t\t\t\"(which use some of those functions and data) to form executables.\",\n\t\t\t\t\"  The \\\"Library\\\", below, refers to any such software library or work\",\n\t\t\t\t\"which has been distributed under these terms.  A \\\"work based on the\",\n\t\t\t\t\"Library\\\" means either the Library or any derivative work under\",\n\t\t\t\t\"copyright law: that is to say, a work containing the Library or a\",\n\t\t\t\t\"portion of it, either verbatim or with modifications and/or translated\",\n\t\t\t\t\"straightforwardly into another language.  (Hereinafter, translation is\",\n\t\t\t\t\"included without limitation in the term \\\"modification\\\".)\",\n\t\t\t\t\"  \\\"Source code\\\" for a work means the preferred form of the work for\",\n\t\t\t\t\"making modifications to it.  For a library, complete source code means\",\n\t\t\t\t\"all the source code for all modules it contains, plus any associated\",\n\t\t\t\t\"interface definition files, plus the scripts used to control compilation\",\n\t\t\t\t\"and installation of the library.\",\n\t\t\t\t\"  Activities other than copying, distribution and modification are not\",\n\t\t\t\t\"covered by this License; they are outside its scope.  The act of\",\n\t\t\t\t\"running a program using the Library is not restricted, and output from\",\n\t\t\t\t\"such a program is covered only if its contents constitute a work based\",\n\t\t\t\t\"on the Library (independent of the use of the Library in a tool for\",\n\t\t\t\t\"writing it).  Whether that is true depends on what the Library does\",\n\t\t\t\t\"and what the program that uses the Library does.\",\n\t\t\t\t\"  1. You may copy and distribute verbatim copies of the Library's\",\n\t\t\t\t\"complete source code as you receive it, in any medium, provided that\",\n\t\t\t\t\"you conspicuously and appropriately publish on each copy an\",\n\t\t\t\t\"appropriate copyright notice and disclaimer of warranty; keep intact\",\n\t\t\t\t\"all the notices that refer to this License and to the absence of any\",\n\t\t\t\t\"warranty; and distribute a copy of this License along with the\",\n\t\t\t\t\"Library.\",\n\t\t\t\t\"  You may charge a fee for the physical act of transferring a copy,\",\n\t\t\t\t\"and you may at your option offer warranty protection in exchange for a\",\n\t\t\t\t\"fee.\",\n\t\t\t\t\"\",\n\t\t\t\t\"  2. You may modify your copy or copies of the Library or any portion\",\n\t\t\t\t\"of it, thus forming a work based on the Library, and copy and\",\n\t\t\t\t\"distribute such modifications or work under the terms of Section 1\",\n\t\t\t\t\"above, provided that you also meet all of these conditions:\",\n\t\t\t\t\"    a) The modified work must itself be a software library.\",\n\t\t\t\t\"    b) You must cause the files modified to carry prominent notices\",\n\t\t\t\t\"    stating that you changed the files and the date of any change.\",\n\t\t\t\t\"    c) You must cause the whole of the work to be licensed at no\",\n\t\t\t\t\"    charge to all third parties under the terms of this License.\",\n\t\t\t\t\"    d) If a facility in the modified Library refers to a function or a\",\n\t\t\t\t\"    table of data to be supplied by an application program that uses\",\n\t\t\t\t\"    the facility, other than as an argument passed when the facility\",\n\t\t\t\t\"    is invoked, then you must make a good faith effort to ensure that,\",\n\t\t\t\t\"    in the event an application does not supply such function or\",\n\t\t\t\t\"    table, the facility still operates, and performs whatever part of\",\n\t\t\t\t\"    its purpose remains meaningful.\",\n\t\t\t\t\"    (For example, a function in a library to compute square roots has\",\n\t\t\t\t\"    a purpose that is entirely well-defined independent of the\",\n\t\t\t\t\"    application.  Therefore, Subsection 2d requires that any\",\n\t\t\t\t\"    application-supplied function or table used by this function must\",\n\t\t\t\t\"    be optional: if the application does not supply it, the square\",\n\t\t\t\t\"    root function must still compute square roots.)\",\n\t\t\t\t\"These requirements apply to the modified work as a whole.  If\",\n\t\t\t\t\"identifiable sections of that work are not derived from the Library,\",\n\t\t\t\t\"and can be reasonably considered independent and separate works in\",\n\t\t\t\t\"themselves, then this License, and its terms, do not apply to those\",\n\t\t\t\t\"sections when you distribute them as separate works.  But when you\",\n\t\t\t\t\"distribute the same sections as part of a whole which is a work based\",\n\t\t\t\t\"on the Library, the distribution of the whole must be on the terms of\",\n\t\t\t\t\"this License, whose permissions for other licensees extend to the\",\n\t\t\t\t\"entire whole, and thus to each and every part regardless of who wrote\",\n\t\t\t\t\"it.\",\n\t\t\t\t\"Thus, it is not the intent of this section to claim rights or contest\",\n\t\t\t\t\"your rights to work written entirely by you; rather, the intent is to\",\n\t\t\t\t\"exercise the right to control the distribution of derivative or\",\n\t\t\t\t\"collective works based on the Library.\",\n\t\t\t\t\"In addition, mere aggregation of another work not based on the Library\",\n\t\t\t\t\"with the Library (or with a work based on the Library) on a volume of\",\n\t\t\t\t\"a storage or distribution medium does not bring the other work under\",\n\t\t\t\t\"the scope of this License.\",\n\t\t\t\t\"  3. You may opt to apply the terms of the ordinary GNU General Public\",\n\t\t\t\t\"License instead of this License to a given copy of the Library.  To do\",\n\t\t\t\t\"this, you must alter all the notices that refer to this License, so\",\n\t\t\t\t\"that they refer to the ordinary GNU General Public License, version 2,\",\n\t\t\t\t\"instead of to this License.  (If a newer version than version 2 of the\",\n\t\t\t\t\"ordinary GNU General Public License has appeared, then you can specify\",\n\t\t\t\t\"that version instead if you wish.)  Do not make any other change in\",\n\t\t\t\t\"these notices.\",\n\t\t\t\t\"\",\n\t\t\t\t\"  Once this change is made in a given copy, it is irreversible for\",\n\t\t\t\t\"that copy, so the ordinary GNU General Public License applies to all\",\n\t\t\t\t\"subsequent copies and derivative works made from that copy.\",\n\t\t\t\t\"  This option is useful when you wish to copy part of the code of\",\n\t\t\t\t\"the Library into a program that is not a library.\",\n\t\t\t\t\"  4. You may copy and distribute the Library (or a portion or\",\n\t\t\t\t\"derivative of it, under Section 2) in object code or executable form\",\n\t\t\t\t\"under the terms of Sections 1 and 2 above provided that you accompany\",\n\t\t\t\t\"it with the complete corresponding machine-readable source code, which\",\n\t\t\t\t\"must be distributed under the terms of Sections 1 and 2 above on a\",\n\t\t\t\t\"medium customarily used for software interchange.\",\n\t\t\t\t\"  If distribution of object code is made by offering access to copy\",\n\t\t\t\t\"from a designated place, then offering equivalent access to copy the\",\n\t\t\t\t\"source code from the same place satisfies the requirement to\",\n\t\t\t\t\"distribute the source code, even though third parties are not\",\n\t\t\t\t\"compelled to copy the source along with the object code.\",\n\t\t\t\t\"  5. A program that contains no derivative of any portion of the\",\n\t\t\t\t\"Library, but is designed to work with the Library by being compiled or\",\n\t\t\t\t\"linked with it, is called a \\\"work that uses the Library\\\".  Such a\",\n\t\t\t\t\"work, in isolation, is not a derivative work of the Library, and\",\n\t\t\t\t\"therefore falls outside the scope of this License.\",\n\t\t\t\t\"  However, linking a \\\"work that uses the Library\\\" with the Library\",\n\t\t\t\t\"creates an executable that is a derivative of the Library (because it\",\n\t\t\t\t\"contains portions of the Library), rather than a \\\"work that uses the\",\n\t\t\t\t\"library\\\".  The executable is therefore covered by this License.\",\n\t\t\t\t\"Section 6 states terms for distribution of such executables.\",\n\t\t\t\t\"  When a \\\"work that uses the Library\\\" uses material from a header file\",\n\t\t\t\t\"that is part of the Library, the object code for the work may be a\",\n\t\t\t\t\"derivative work of the Library even though the source code is not.\",\n\t\t\t\t\"Whether this is true is especially significant if the work can be\",\n\t\t\t\t\"linked without the Library, or if the work is itself a library.  The\",\n\t\t\t\t\"threshold for this to be true is not precisely defined by law.\",\n\t\t\t\t\"  If such an object file uses only numerical parameters, data\",\n\t\t\t\t\"structure layouts and accessors, and small macros and small inline\",\n\t\t\t\t\"functions (ten lines or less in length), then the use of the object\",\n\t\t\t\t\"file is unrestricted, regardless of whether it is legally a derivative\",\n\t\t\t\t\"work.  (Executables containing this object code plus portions of the\",\n\t\t\t\t\"Library will still fall under Section 6.)\",\n\t\t\t\t\"  Otherwise, if the work is a derivative of the Library, you may\",\n\t\t\t\t\"distribute the object code for the work under the terms of Section 6.\",\n\t\t\t\t\"Any executables containing that work also fall under Section 6,\",\n\t\t\t\t\"whether or not they are linked directly with the Library itself.\",\n\t\t\t\t\"\",\n\t\t\t\t\"  6. As an exception to the Sections above, you may also combine or\",\n\t\t\t\t\"link a \\\"work that uses the Library\\\" with the Library to produce a\",\n\t\t\t\t\"work containing portions of the Library, and distribute that work\",\n\t\t\t\t\"under terms of your choice, provided that the terms permit\",\n\t\t\t\t\"modification of the work for the customer's own use and reverse\",\n\t\t\t\t\"engineering for debugging such modifications.\",\n\t\t\t\t\"  You must give prominent notice with each copy of the work that the\",\n\t\t\t\t\"Library is used in it and that the Library and its use are covered by\",\n\t\t\t\t\"this License.  You must supply a copy of this License.  If the work\",\n\t\t\t\t\"during execution displays copyright notices, you must include the\",\n\t\t\t\t\"copyright notice for the Library among them, as well as a reference\",\n\t\t\t\t\"directing the user to the copy of this License.  Also, you must do one\",\n\t\t\t\t\"of these things:\",\n\t\t\t\t\"    a) Accompany the work with the complete corresponding\",\n\t\t\t\t\"    machine-readable source code for the Library including whatever\",\n\t\t\t\t\"    changes were used in the work (which must be distributed under\",\n\t\t\t\t\"    Sections 1 and 2 above); and, if the work is an executable linked\",\n\t\t\t\t\"    with the Library, with the complete machine-readable \\\"work that\",\n\t\t\t\t\"    uses the Library\\\", as object code and/or source code, so that the\",\n\t\t\t\t\"    user can modify the Library and then relink to produce a modified\",\n\t\t\t\t\"    executable containing the modified Library.  (It is understood\",\n\t\t\t\t\"    that the user who changes the contents of definitions files in the\",\n\t\t\t\t\"    Library will not necessarily be able to recompile the application\",\n\t\t\t\t\"    to use the modified definitions.)\",\n\t\t\t\t\"    b) Use a suitable shared library mechanism for linking with the\",\n\t\t\t\t\"    Library.  A suitable mechanism is one that (1) uses at run time a\",\n\t\t\t\t\"    copy of the library already present on the user's computer system,\",\n\t\t\t\t\"    rather than copying library functions into the executable, and (2)\",\n\t\t\t\t\"    will operate properly with a modified version of the library, if\",\n\t\t\t\t\"    the user installs one, as long as the modified version is\",\n\t\t\t\t\"    interface-compatible with the version that the work was made with.\",\n\t\t\t\t\"    c) Accompany the work with a written offer, valid for at\",\n\t\t\t\t\"    least three years, to give the same user the materials\",\n\t\t\t\t\"    specified in Subsection 6a, above, for a charge no more\",\n\t\t\t\t\"    than the cost of performing this distribution.\",\n\t\t\t\t\"    d) If distribution of the work is made by offering access to copy\",\n\t\t\t\t\"    from a designated place, offer equivalent access to copy the above\",\n\t\t\t\t\"    specified materials from the same place.\",\n\t\t\t\t\"    e) Verify that the user has already received a copy of these\",\n\t\t\t\t\"    materials or that you have already sent this user a copy.\",\n\t\t\t\t\"  For an executable, the required form of the \\\"work that uses the\",\n\t\t\t\t\"Library\\\" must include any data and utility programs needed for\",\n\t\t\t\t\"reproducing the executable from it.  However, as a special exception,\",\n\t\t\t\t\"the materials to be distributed need not include anything that is\",\n\t\t\t\t\"normally distributed (in either source or binary form) with the major\",\n\t\t\t\t\"components (compiler, kernel, and so on) of the operating system on\",\n\t\t\t\t\"which the executable runs, unless that component itself accompanies\",\n\t\t\t\t\"the executable.\",\n\t\t\t\t\"  It may happen that this requirement contradicts the license\",\n\t\t\t\t\"restrictions of other proprietary libraries that do not normally\",\n\t\t\t\t\"accompany the operating system.  Such a contradiction means you cannot\",\n\t\t\t\t\"use both them and the Library together in an executable that you\",\n\t\t\t\t\"distribute.\",\n\t\t\t\t\"\",\n\t\t\t\t\"  7. You may place library facilities that are a work based on the\",\n\t\t\t\t\"Library side-by-side in a single library together with other library\",\n\t\t\t\t\"facilities not covered by this License, and distribute such a combined\",\n\t\t\t\t\"library, provided that the separate distribution of the work based on\",\n\t\t\t\t\"the Library and of the other library facilities is otherwise\",\n\t\t\t\t\"permitted, and provided that you do these two things:\",\n\t\t\t\t\"    a) Accompany the combined library with a copy of the same work\",\n\t\t\t\t\"    based on the Library, uncombined with any other library\",\n\t\t\t\t\"    facilities.  This must be distributed under the terms of the\",\n\t\t\t\t\"    Sections above.\",\n\t\t\t\t\"    b) Give prominent notice with the combined library of the fact\",\n\t\t\t\t\"    that part of it is a work based on the Library, and explaining\",\n\t\t\t\t\"    where to find the accompanying uncombined form of the same work.\",\n\t\t\t\t\"  8. You may not copy, modify, sublicense, link with, or distribute\",\n\t\t\t\t\"the Library except as expressly provided under this License.  Any\",\n\t\t\t\t\"attempt otherwise to copy, modify, sublicense, link with, or\",\n\t\t\t\t\"distribute the Library is void, and will automatically terminate your\",\n\t\t\t\t\"rights under this License.  However, parties who have received copies,\",\n\t\t\t\t\"or rights, from you under this License will not have their licenses\",\n\t\t\t\t\"terminated so long as such parties remain in full compliance.\",\n\t\t\t\t\"  9. You are not required to accept this License, since you have not\",\n\t\t\t\t\"signed it.  However, nothing else grants you permission to modify or\",\n\t\t\t\t\"distribute the Library or its derivative works.  These actions are\",\n\t\t\t\t\"prohibited by law if you do not accept this License.  Therefore, by\",\n\t\t\t\t\"modifying or distributing the Library (or any work based on the\",\n\t\t\t\t\"Library), you indicate your acceptance of this License to do so, and\",\n\t\t\t\t\"all its terms and conditions for copying, distributing or modifying\",\n\t\t\t\t\"the Library or works based on it.\",\n\t\t\t\t\"  10. Each time you redistribute the Library (or any work based on the\",\n\t\t\t\t\"Library), the recipient automatically receives a license from the\",\n\t\t\t\t\"original licensor to copy, distribute, link with or modify the Library\",\n\t\t\t\t\"subject to these terms and conditions.  You may not impose any further\",\n\t\t\t\t\"restrictions on the recipients' exercise of the rights granted herein.\",\n\t\t\t\t\"You are not responsible for enforcing compliance by third parties with\",\n\t\t\t\t\"this License.\",\n\t\t\t\t\"\",\n\t\t\t\t\"  11. If, as a consequence of a court judgment or allegation of patent\",\n\t\t\t\t\"infringement or for any other reason (not limited to patent issues),\",\n\t\t\t\t\"conditions are imposed on you (whether by court order, agreement or\",\n\t\t\t\t\"otherwise) that contradict the conditions of this License, they do not\",\n\t\t\t\t\"excuse you from the conditions of this License.  If you cannot\",\n\t\t\t\t\"distribute so as to satisfy simultaneously your obligations under this\",\n\t\t\t\t\"License and any other pertinent obligations, then as a consequence you\",\n\t\t\t\t\"may not distribute the Library at all.  For example, if a patent\",\n\t\t\t\t\"license would not permit royalty-free redistribution of the Library by\",\n\t\t\t\t\"all those who receive copies directly or indirectly through you, then\",\n\t\t\t\t\"the only way you could satisfy both it and this License would be to\",\n\t\t\t\t\"refrain entirely from distribution of the Library.\",\n\t\t\t\t\"If any portion of this section is held invalid or unenforceable under any\",\n\t\t\t\t\"particular circumstance, the balance of the section is intended to apply,\",\n\t\t\t\t\"and the section as a whole is intended to apply in other circumstances.\",\n\t\t\t\t\"It is not the purpose of this section to induce you to infringe any\",\n\t\t\t\t\"patents or other property right claims or to contest validity of any\",\n\t\t\t\t\"such claims; this section has the sole purpose of protecting the\",\n\t\t\t\t\"integrity of the free software distribution system which is\",\n\t\t\t\t\"implemented by public license practices.  Many people have made\",\n\t\t\t\t\"generous contributions to the wide range of software distributed\",\n\t\t\t\t\"through that system in reliance on consistent application of that\",\n\t\t\t\t\"system; it is up to the author/donor to decide if he or she is willing\",\n\t\t\t\t\"to distribute software through any other system and a licensee cannot\",\n\t\t\t\t\"impose that choice.\",\n\t\t\t\t\"This section is intended to make thoroughly clear what is believed to\",\n\t\t\t\t\"be a consequence of the rest of this License.\",\n\t\t\t\t\"  12. If the distribution and/or use of the Library is restricted in\",\n\t\t\t\t\"certain countries either by patents or by copyrighted interfaces, the\",\n\t\t\t\t\"original copyright holder who places the Library under this License may add\",\n\t\t\t\t\"an explicit geographical distribution limitation excluding those countries,\",\n\t\t\t\t\"so that distribution is permitted only in or among countries not thus\",\n\t\t\t\t\"excluded.  In such case, this License incorporates the limitation as if\",\n\t\t\t\t\"written in the body of this License.\",\n\t\t\t\t\"  13. The Free Software Foundation may publish revised and/or new\",\n\t\t\t\t\"versions of the Lesser General Public License from time to time.\",\n\t\t\t\t\"Such new versions will be similar in spirit to the present version,\",\n\t\t\t\t\"but may differ in detail to address new problems or concerns.\",\n\t\t\t\t\"Each version is given a distinguishing version number.  If the Library\",\n\t\t\t\t\"specifies a version number of this License which applies to it and\",\n\t\t\t\t\"\\\"any later version\\\", you have the option of following the terms and\",\n\t\t\t\t\"conditions either of that version or of any later version published by\",\n\t\t\t\t\"the Free Software Foundation.  If the Library does not specify a\",\n\t\t\t\t\"license version number, you may choose any version ever published by\",\n\t\t\t\t\"the Free Software Foundation.\",\n\t\t\t\t\"\",\n\t\t\t\t\"  14. If you wish to incorporate parts of the Library into other free\",\n\t\t\t\t\"programs whose distribution conditions are incompatible with these,\",\n\t\t\t\t\"write to the author to ask for permission.  For software which is\",\n\t\t\t\t\"copyrighted by the Free Software Foundation, write to the Free\",\n\t\t\t\t\"Software Foundation; we sometimes make exceptions for this.  Our\",\n\t\t\t\t\"decision will be guided by the two goals of preserving the free status\",\n\t\t\t\t\"of all derivatives of our free software and of promoting the sharing\",\n\t\t\t\t\"and reuse of software generally.\",\n\t\t\t\t\"                            NO WARRANTY\",\n\t\t\t\t\"  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\",\n\t\t\t\t\"WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\",\n\t\t\t\t\"EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\",\n\t\t\t\t\"OTHER PARTIES PROVIDE THE LIBRARY \\\"AS IS\\\" WITHOUT WARRANTY OF ANY\",\n\t\t\t\t\"KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\",\n\t\t\t\t\"IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\",\n\t\t\t\t\"PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\",\n\t\t\t\t\"LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\",\n\t\t\t\t\"THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\",\n\t\t\t\t\"  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\",\n\t\t\t\t\"WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\",\n\t\t\t\t\"AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\",\n\t\t\t\t\"FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\",\n\t\t\t\t\"CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\",\n\t\t\t\t\"LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\",\n\t\t\t\t\"RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\",\n\t\t\t\t\"FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\",\n\t\t\t\t\"SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\",\n\t\t\t\t\"DAMAGES.\",\n\t\t\t\t\"                     END OF TERMS AND CONDITIONS\",\n\t\t\t\t\"\",\n\t\t\t\t\"           How to Apply These Terms to Your New Libraries\",\n\t\t\t\t\"  If you develop a new library, and you want it to be of the greatest\",\n\t\t\t\t\"possible use to the public, we recommend making it free software that\",\n\t\t\t\t\"everyone can redistribute and change.  You can do so by permitting\",\n\t\t\t\t\"redistribution under these terms (or, alternatively, under the terms of the\",\n\t\t\t\t\"ordinary General Public License).\",\n\t\t\t\t\"  To apply these terms, attach the following notices to the library.  It is\",\n\t\t\t\t\"safest to attach them to the start of each source file to most effectively\",\n\t\t\t\t\"convey the exclusion of warranty; and each file should have at least the\",\n\t\t\t\t\"\\\"copyright\\\" line and a pointer to where the full notice is found.\",\n\t\t\t\t\"    <one line to give the library's name and a brief idea of what it does.>\",\n\t\t\t\t\"    Copyright (C) <year>  <name of author>\",\n\t\t\t\t\"    This library is free software; you can redistribute it and/or\",\n\t\t\t\t\"    modify it under the terms of the GNU Lesser General Public\",\n\t\t\t\t\"    License as published by the Free Software Foundation; either\",\n\t\t\t\t\"    version 2.1 of the License, or (at your option) any later version.\",\n\t\t\t\t\"    This library is distributed in the hope that it will be useful,\",\n\t\t\t\t\"    but WITHOUT ANY WARRANTY; without even the implied warranty of\",\n\t\t\t\t\"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\",\n\t\t\t\t\"    Lesser General Public License for more details.\",\n\t\t\t\t\"    You should have received a copy of the GNU Lesser General Public\",\n\t\t\t\t\"    License along with this library; if not, write to the Free Software\",\n\t\t\t\t\"    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\",\n\t\t\t\t\"Also add information on how to contact you by electronic and paper mail.\",\n\t\t\t\t\"You should also get your employer (if you work as a programmer) or your\",\n\t\t\t\t\"school, if any, to sign a \\\"copyright disclaimer\\\" for the library, if\",\n\t\t\t\t\"necessary.  Here is a sample; alter the names:\",\n\t\t\t\t\"  Yoyodyne, Inc., hereby disclaims all copyright interest in the\",\n\t\t\t\t\"  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\",\n\t\t\t\t\"  <signature of Ty Coon>, 1 April 1990\",\n\t\t\t\t\"  Ty Coon, President of Vice\",\n\t\t\t\t\"That's all there is to it!\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"other\",\n\t\t\t\t\"other\": {\n\t\t\t\t\t\"name\": \"H.264/AVC Video Standard\",\n\t\t\t\t\t\"downloadUrl\": \"https://chromium.googlesource.com/chromium/third_party/ffmpeg\",\n\t\t\t\t\t\"version\": \"5.1.git\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"This product is licensed under the AVC patent portfolio license for the personal\",\n\t\t\t\t\"and non-commercial use of a consumer to (i) encode video in compliance with the AVC standard (\\\"AVC VIDEO\\\")\",\n\t\t\t\t\"and/or (ii) decode AVC video that was encoded by a consumer\",\n\t\t\t\t\"engaged in a personal and non-commercial activity and/or was obtained from a video provider\",\n\t\t\t\t\"licensed to provide AVC video. No license is granted or shall be implied for any other use.\",\n\t\t\t\t\"Additional information may be obtained from MPEG LA LLC. See http://www.MPEGLA.COM.\",\n\t\t\t\t\"\",\n\t\t\t\t\"For clarification purposes, this notice does not limit or inhibit the use of the product\",\n\t\t\t\t\"for normal business uses that are personal to that business which do not include\",\n\t\t\t\t\"(i) redistribution of the product to third parties, or\",\n\t\t\t\t\"(ii) creation of content with AVC Standard compliant technologies for distribution to third parties.\"\n\t\t\t],\n\t\t\t\"version\": \"H.264 (08/21)\",\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"license\": \"OTHER\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"nodejs\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/nodejs/node\",\n\t\t\t\t\t\"commitHash\": \"4819c99baa28bf2c1baf411ba100c467fec3d486\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"version\": \"20.18.3\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"electron\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/electron/electron\",\n\t\t\t\t\t\"commitHash\": \"f98501308a973e0aee2414315b426e5de2c03a60\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"34.3.2\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"inno setup\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jrsoftware/issrc\",\n\t\t\t\t\t\"commitHash\": \"03fe8f4edb3e96c7835c9483052625bbedb160f2\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Inno Setup License\",\n\t\t\t\t\"==================\",\n\t\t\t\t\"\",\n\t\t\t\t\"Except where otherwise noted, all of the documentation and software included in the Inno Setup\",\n\t\t\t\t\"package is copyrighted by Jordan Russell.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (C) 1997-2020 Jordan Russell. All rights reserved.\",\n\t\t\t\t\"Portions Copyright (C) 2000-2020 Martijn Laan. All rights reserved.\",\n\t\t\t\t\"\",\n\t\t\t\t\"This software is provided \\\"as-is,\\\" without any express or implied warranty. In no event shall the\",\n\t\t\t\t\"author be held liable for any damages arising from the use of this software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is granted to anyone to use this software for any purpose, including commercial\",\n\t\t\t\t\"applications, and to alter and redistribute it, provided that the following conditions are met:\",\n\t\t\t\t\"\",\n\t\t\t\t\"1. All redistributions of source code files must retain all copyright notices that are currently in\",\n\t\t\t\t\"   place, and this list of conditions without modification.\",\n\t\t\t\t\"\",\n\t\t\t\t\"2. All redistributions in binary form must retain all occurrences of the above copyright notice and\",\n\t\t\t\t\"   web site addresses that are currently in place (for example, in the About boxes).\",\n\t\t\t\t\"\",\n\t\t\t\t\"3. The origin of this software must not be misrepresented; you must not claim that you wrote the\",\n\t\t\t\t\"   original software. If you use this software to distribute a product, an acknowledgment in the\",\n\t\t\t\t\"   product documentation would be appreciated but is not required.\",\n\t\t\t\t\"\",\n\t\t\t\t\"4. Modified versions in source or binary form must be plainly marked as such, and must not be\",\n\t\t\t\t\"   misrepresented as being the original software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\",\n\t\t\t\t\"Jordan Russell\",\n\t\t\t\t\"jr-2010 AT jrsoftware.org\",\n\t\t\t\t\"https://jrsoftware.org/\"\n\t\t\t],\n\t\t\t\"version\": \"5.5.6\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"spdlog original\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/gabime/spdlog\",\n\t\t\t\t\t\"commitHash\": \"4fba14c79f356ae48d6141c561bf9fd7ba33fabd\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.14.0\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"vscode-codicons\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/vscode-codicons\",\n\t\t\t\t\t\"commitHash\": \"ccdcf91d57d3a5a1d6b620d95d518bab4d75984d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT and Creative Commons Attribution 4.0\",\n\t\t\t\"version\": \"0.0.14\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"npm\",\n\t\t\t\t\"npm\": {\n\t\t\t\t\t\"name\": \"mdn-data\",\n\t\t\t\t\t\"version\": \"2.0.31\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"repositoryUrl\": \"https://github.com/mdn/data\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"npm\",\n\t\t\t\t\"npm\": {\n\t\t\t\t\t\"name\": \"@mdn/browser-compat-data\",\n\t\t\t\t\t\"version\": \"5.2.45\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"repositoryUrl\": \"https://github.com/mdn/browser-compat-data\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"ripgrep\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/BurntSushi/ripgrep\",\n\t\t\t\t\t\"commitHash\": \"973de50c9ef451da2cfcdfa86f2b2711d8d6ff48\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.10.0\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"@vscode/win32-app-container-tokens\",\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"vscode-win32-app-container-tokens\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/vscode-win32-app-container-tokens\",\n\t\t\t\t\t\"commitHash\": \"5b871f95fd9cb8efa8ee9a80600510d5e5339137\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"MIT License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) Microsoft Corporation.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\t\"SOFTWARE\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"npm\",\n\t\t\t\t\"npm\": {\n\t\t\t\t\t\"name\": \"@iktakahiro/markdown-it-katex\",\n\t\t\t\t\t\"version\": \"4.0.2\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"repositoryUrl\": \"https://github.com/mjbvz/markdown-it-katex\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"The MIT License (MIT)\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2016 Waylon Flinn\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\t\"SOFTWARE.\",\n\t\t\t\t\"\",\n\t\t\t\t\"---\",\n\t\t\t\t\"\",\n\t\t\t\t\"The MIT License (MIT)\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2018 Takahiro Ethan Ikeuchi @iktakahiro\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\t\"SOFTWARE.\"\n\t\t\t],\n\t\t\t\"license\": \"MIT\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"npm\",\n\t\t\t\t\"npm\": {\n\t\t\t\t\t\"name\": \"cacheable-request\",\n\t\t\t\t\t\"version\": \"7.0.4\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) cacheable-request authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"MIT License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to\",\n\t\t\t\t\"deal in the Software without restriction, including without limitation the\",\n\t\t\t\t\"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\",\n\t\t\t\t\"sell copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in\",\n\t\t\t\t\"all copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\",\n\t\t\t\t\"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\",\n\t\t\t\t\"DEALINGS IN THE SOFTWARE.\"\n\t\t\t],\n\t\t\t\"license\": \"MIT\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "cli/.cargo/config.toml",
    "content": "[target.'cfg(all(target_os = \"windows\", any(target_arch = \"i686\", target_arch = \"x86_64\", target_arch = \"x86\")))']\nrustflags = [\"-Ctarget-feature=+crt-static\", \"-Clink-args=/guard:cf\", \"-Clink-args=/CETCOMPAT\"]\n\n# CETCOMPAT is not supported on ARM binaries\n[target.'cfg(all(target_os = \"windows\", not(any(target_arch = \"i686\", target_arch = \"x86_64\", target_arch = \"x86\"))))']\nrustflags = [\"-Ctarget-feature=+crt-static\", \"-Clink-args=/guard:cf\"]\n"
  },
  {
    "path": "cli/CONTRIBUTING.md",
    "content": "# Setup\n\n0. Clone, and then run `git submodule update --init --recursive`\n1. Get the extensions: [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) and [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)\n2. Ensure your workspace is set to the `launcher` folder being the root.\n\n## Building the CLI on Windows\n\nFor the moment, we require OpenSSL on Windows, where it is not usually installed by default. To install it:\n\n1. Follow steps 1 and 2 of [Set up vcpkg](https://learn.microsoft.com/en-us/vcpkg/get_started/get-started-msbuild?pivots=shell-powershell#1---set-up-vcpkg) to obtain the executable.\n1. Add the location of the `vcpkg` directory to your system or user PATH.\n1. Run`vcpkg install openssl:x64-windows-static-md` (after restarting your terminal for PATH changes to apply)\n1. You should be able to then `cargo build` successfully\n\nOpenSSL is needed for the key exchange we do when forwarding Basis tunnels. When all interested Basis clients support ED25519, we would be able to solely use libsodium. At the time of writing however, there is [no active development](https://chromestatus.com/feature/4913922408710144) on this in Chromium.\n\n# Debug\n\n1. You can use the Debug tasks already configured to run the launcher.\n"
  },
  {
    "path": "cli/Cargo.toml",
    "content": "[package]\nname = \"code-cli\"\nversion = \"0.1.0\"\nedition = \"2021\"\ndefault-run = \"code\"\n\n[lib]\nname = \"cli\"\npath = \"src/lib.rs\"\n\n[[bin]]\nname = \"code\"\n\n[dependencies]\nfutures = \"0.3.28\"\nclap = { version = \"4.3.0\", features = [\"derive\", \"env\"] }\nopen = \"4.1.0\"\nreqwest = { version = \"0.11.22\", default-features = false, features = [\"json\", \"stream\", \"native-tls\"] }\ntokio = { version = \"1.28.2\", features = [\"full\"] }\ntokio-util = { version = \"0.7.8\", features = [\"compat\", \"codec\"] }\nflate2 = { version = \"1.0.26\", default-features = false, features = [\"zlib\"] }\nzip = { version = \"0.6.6\", default-features = false, features = [\"time\", \"deflate-zlib\"] }\nregex = \"1.8.3\"\nlazy_static = \"1.4.0\"\nsysinfo = { version = \"0.29.0\", default-features = false }\nserde = { version = \"1.0.163\", features = [\"derive\"] }\nserde_json = \"1.0.96\"\nrmp-serde = \"1.1.1\"\nuuid = { version = \"1.4\", features = [\"serde\", \"v4\"] }\ndirs = \"5.0.1\"\nrand = \"0.8.5\"\nopentelemetry = { version = \"0.19.0\", features = [\"rt-tokio\"] }\nserde_bytes = \"0.11.9\"\nchrono = { version = \"0.4.26\", features = [\"serde\", \"std\", \"clock\"], default-features = false }\ngethostname = \"0.4.3\"\nlibc = \"0.2.144\"\ntunnels = { git = \"https://github.com/microsoft/dev-tunnels\", rev = \"8cae9b2a24c65c6c1958f5a0e77d72b23b5c6c30\", default-features = false, features = [\"connections\"] }\nkeyring = { version = \"2.0.3\", default-features = false, features = [\"linux-secret-service-rt-tokio-crypto-openssl\", \"platform-windows\", \"platform-macos\", \"linux-keyutils\"] }\ndialoguer = \"0.10.4\"\nhyper = { version = \"0.14.26\", features = [\"server\", \"http1\", \"runtime\"] }\nindicatif = \"0.17.4\"\ntempfile = \"3.5.0\"\nclap_lex = \"0.7.0\"\nurl = \"2.5.4\"\nasync-trait = \"0.1.68\"\nlog = \"0.4.18\"\nconst_format = \"0.2.31\"\nsha2 = \"0.10.6\"\nbase64 = \"0.21.2\"\nshell-escape = \"0.1.5\"\nthiserror = \"1.0.40\"\ncfg-if = \"1.0.0\"\npin-project = \"1.1.0\"\nconsole = \"0.15.7\"\nbytes = \"1.4.0\"\ntar = \"0.4.38\"\n\n[build-dependencies]\nserde = { version=\"1.0.163\", features = [\"derive\"] }\nserde_json = \"1.0.96\"\n\n[target.'cfg(windows)'.dependencies]\nwinreg = \"0.50.0\"\nwinapi = \"0.3.9\"\n\n[target.'cfg(target_os = \"macos\")'.dependencies]\ncore-foundation = \"0.9.3\"\n\n[target.'cfg(target_os = \"linux\")'.dependencies]\nzbus = { version = \"3.13.1\", default-features = false, features = [\"tokio\"] }\n\n[patch.crates-io]\nrussh = { git = \"https://github.com/microsoft/vscode-russh\", branch = \"main\" }\nrussh-cryptovec = { git = \"https://github.com/microsoft/vscode-russh\", branch = \"main\" }\nrussh-keys = { git = \"https://github.com/microsoft/vscode-russh\", branch = \"main\" }\n\n[profile.release]\nstrip = true\nlto = true\ncodegen-units = 1\n\n[features]\ndefault = []\nvsda = []\nvscode-encrypt = []\n"
  },
  {
    "path": "cli/ThirdPartyNotices.txt",
    "content": "NOTICES AND INFORMATION\r\nDo Not Translate or Localize\r\n\r\nThis software incorporates material from third parties.\r\nMicrosoft makes certain open source code available at https://3rdpartysource.microsoft.com,\r\nor you may send a check or money order for US $5.00, including the product name,\r\nthe open source component name, platform, and version number, to:\r\n\r\nSource Code Compliance Team\r\nMicrosoft Corporation\r\nOne Microsoft Way\r\nRedmond, WA 98052\r\nUSA\r\n\r\nNotwithstanding any other terms, you may reverse engineer this software to the extent\r\nrequired to debug changes to any libraries licensed under the GNU Lesser General Public License.\r\n\r\n\r\n\r\n---------------------------------------------------------\r\n\r\naddr2line 0.21.0 - Apache-2.0 OR MIT\r\nhttps://github.com/gimli-rs/addr2line\r\n\r\nLicensed under either of\r\n\r\n  * Apache License, Version 2.0 ([`LICENSE-APACHE`](./LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0)\r\n  * MIT license ([`LICENSE-MIT`](./LICENSE-MIT) or https://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\r\ndual licensed as above, without any additional terms or conditions.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nadler 1.0.2 - 0BSD OR MIT OR Apache-2.0\r\nhttps://github.com/jonas-schievink/adler\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\naho-corasick 1.1.3 - Unlicense OR MIT\r\nhttps://github.com/BurntSushi/aho-corasick\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Andrew Gallant\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nandroid-tzdata 0.1.1 - MIT OR Apache-2.0\r\nhttps://github.com/RumovZ/android-tzdata\r\n\r\nMIT License\r\n\r\nCopyright (c) [year] [fullname]\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nandroid_system_properties 0.1.5 - MIT/Apache-2.0\r\nhttps://github.com/nical/android_system_properties\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2013 Nicolas Silva\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nanstream 0.6.14 - MIT OR Apache-2.0\r\nhttps://github.com/rust-cli/anstyle\r\n\r\nThis software is released under the MIT license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nanstyle 1.0.7 - MIT OR Apache-2.0\r\nhttps://github.com/rust-cli/anstyle\r\n\r\nThis software is released under the MIT license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nanstyle-parse 0.2.4 - MIT OR Apache-2.0\r\nhttps://github.com/rust-cli/anstyle\r\n\r\nThis software is released under the MIT license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nanstyle-query 1.0.3 - MIT OR Apache-2.0\r\nhttps://github.com/rust-cli/anstyle\r\n\r\nThis software is released under the MIT license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nanstyle-wincon 3.0.3 - MIT OR Apache-2.0\r\nhttps://github.com/rust-cli/anstyle\r\n\r\nThis software is released under the MIT license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-broadcast 0.5.1 - MIT OR Apache-2.0\r\nhttps://github.com/smol-rs/async-broadcast\r\n\r\n<sup>\r\nLicensed under either of Apache License, Version\r\n2.0 (LICENSE-APACHE) or MIT license (LICENSE-MIT) at your option.\r\n</sup>\r\n\r\n<br/>\r\n\r\n<sub>\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in this crate by you, as defined in the Apache-2.0 license, shall\r\nbe dual licensed as above, without any additional terms or conditions.\r\n</sub>\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-channel 2.3.1 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/async-channel\r\n\r\nLicensed under either of\r\n\r\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\r\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n#### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\r\ndual licensed as above, without any additional terms or conditions.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-io 1.13.0 - Apache-2.0 OR MIT\r\nasync-io 2.3.2 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/async-io\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-lock 2.8.0 - Apache-2.0 OR MIT\r\nasync-lock 3.3.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/async-lock\r\n\r\nLicensed under either of\r\n\r\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\r\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n#### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\r\ndual licensed as above, without any additional terms or conditions.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-process 1.8.1 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/async-process\r\n\r\nLicensed under either of\r\n\r\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\r\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n#### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\r\ndual licensed as above, without any additional terms or conditions.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-recursion 1.1.1 - MIT OR Apache-2.0\r\nhttps://github.com/dcchut/async-recursion\r\n\r\nLicensed under either of\r\n * Apache License, Version 2.0\r\n   ([LICENSE-APACHE](LICENSE-APACHE) or <http://www.apache.org/licenses/LICENSE-2.0>)\r\n * MIT license\r\n   ([LICENSE-MIT](LICENSE-MIT) or <http://opensource.org/licenses/MIT>)\r\n\r\nat your option.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-signal 0.2.6 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/async-signal\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-task 4.7.1 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/async-task\r\n\r\nLicensed under either of\r\n\r\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\r\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n#### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\r\ndual licensed as above, without any additional terms or conditions.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nasync-trait 0.1.80 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/async-trait\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\natomic-waker 1.1.2 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/atomic-waker\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nautocfg 1.3.0 - Apache-2.0 OR MIT\r\nhttps://github.com/cuviper/autocfg\r\n\r\nCopyright (c) 2018 Josh Stone\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nbacktrace 0.3.71 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/backtrace-rs\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nbase64 0.21.7 - MIT OR Apache-2.0\r\nhttps://github.com/marshallpierce/rust-base64\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Alice Maz\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nbit-vec 0.6.3 - MIT/Apache-2.0\r\nhttps://github.com/contain-rs/bit-vec\r\n\r\nCopyright (c) 2023 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nbitflags 1.3.2 - MIT/Apache-2.0\r\nbitflags 2.5.0 - MIT OR Apache-2.0\r\nhttps://github.com/bitflags/bitflags\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nblock-buffer 0.10.4 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/utils\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260052-utils\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/utils/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/utils\r\n\r\n[//]: # (crates)\r\n\r\n[`blobby`]: ./blobby\r\n[`block-buffer`]: ./block-buffer\r\n[`block‑padding`]: ./block-padding\r\n[`cmov`]: ./cmov\r\n[`collectable`]: ./collectable\r\n[`cpufeatures`]: ./cpufeatures\r\n[`dbl`]: ./dbl\r\n[`hex-literal`]: ./hex-literal\r\n[`inout`]: ./inout\r\n[`opaque-debug`]: ./opaque-debug\r\n[`wycheproof2blb`]: ./wycheproof2blb\r\n[`zeroize`]: ./zeroize\r\n\r\n[//]: # (misc)\r\n\r\n[Wycheproof]: https://github.com/google/wycheproof\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nblock-padding 0.3.3 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/utils\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260052-utils\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/utils/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/utils\r\n\r\n[//]: # (crates)\r\n\r\n[`blobby`]: ./blobby\r\n[`block-buffer`]: ./block-buffer\r\n[`block‑padding`]: ./block-padding\r\n[`cmov`]: ./cmov\r\n[`collectable`]: ./collectable\r\n[`cpufeatures`]: ./cpufeatures\r\n[`dbl`]: ./dbl\r\n[`hex-literal`]: ./hex-literal\r\n[`inout`]: ./inout\r\n[`opaque-debug`]: ./opaque-debug\r\n[`wycheproof2blb`]: ./wycheproof2blb\r\n[`zeroize`]: ./zeroize\r\n\r\n[//]: # (misc)\r\n\r\n[Wycheproof]: https://github.com/google/wycheproof\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nblocking 1.6.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/blocking\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nbumpalo 3.16.0 - MIT OR Apache-2.0\r\nhttps://github.com/fitzgen/bumpalo\r\n\r\nCopyright (c) 2019 Nick Fitzgerald\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nbyteorder 1.5.0 - Unlicense OR MIT\r\nhttps://github.com/BurntSushi/byteorder\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Andrew Gallant\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nbytes 1.6.0 - MIT\r\nhttps://github.com/tokio-rs/bytes\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2018 Carl Lerche\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncc 1.0.98 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/cc-rs\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncfg-if 1.0.0 - MIT/Apache-2.0\r\nhttps://github.com/alexcrichton/cfg-if\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nchrono 0.4.38 - MIT OR Apache-2.0\r\nhttps://github.com/chronotope/chrono\r\n\r\nRust-chrono is dual-licensed under The MIT License [1] and\r\nApache 2.0 License [2]. Copyright (c) 2014--2025, Kang Seonghoon and\r\ncontributors.\r\n\r\nNota Bene: This is same as the Rust Project's own license.\r\n\r\n\r\n[1]: <http://opensource.org/licenses/MIT>, which is reproduced below:\r\n\r\n~~~~\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014, Kang Seonghoon.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n~~~~\r\n\r\n\r\n[2]: <http://www.apache.org/licenses/LICENSE-2.0>, which is reproduced below:\r\n\r\n~~~~\r\n                              Apache License\r\n                        Version 2.0, January 2004\r\n                     http://www.apache.org/licenses/\r\n\r\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n1. Definitions.\r\n\r\n   \"License\" shall mean the terms and conditions for use, reproduction,\r\n   and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n   \"Licensor\" shall mean the copyright owner or entity authorized by\r\n   the copyright owner that is granting the License.\r\n\r\n   \"Legal Entity\" shall mean the union of the acting entity and all\r\n   other entities that control, are controlled by, or are under common\r\n   control with that entity. For the purposes of this definition,\r\n   \"control\" means (i) the power, direct or indirect, to cause the\r\n   direction or management of such entity, whether by contract or\r\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n   outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n   exercising permissions granted by this License.\r\n\r\n   \"Source\" form shall mean the preferred form for making modifications,\r\n   including but not limited to software source code, documentation\r\n   source, and configuration files.\r\n\r\n   \"Object\" form shall mean any form resulting from mechanical\r\n   transformation or translation of a Source form, including but\r\n   not limited to compiled object code, generated documentation,\r\n   and conversions to other media types.\r\n\r\n   \"Work\" shall mean the work of authorship, whether in Source or\r\n   Object form, made available under the License, as indicated by a\r\n   copyright notice that is included in or attached to the work\r\n   (an example is provided in the Appendix below).\r\n\r\n   \"Derivative Works\" shall mean any work, whether in Source or Object\r\n   form, that is based on (or derived from) the Work and for which the\r\n   editorial revisions, annotations, elaborations, or other modifications\r\n   represent, as a whole, an original work of authorship. For the purposes\r\n   of this License, Derivative Works shall not include works that remain\r\n   separable from, or merely link (or bind by name) to the interfaces of,\r\n   the Work and Derivative Works thereof.\r\n\r\n   \"Contribution\" shall mean any work of authorship, including\r\n   the original version of the Work and any modifications or additions\r\n   to that Work or Derivative Works thereof, that is intentionally\r\n   submitted to Licensor for inclusion in the Work by the copyright owner\r\n   or by an individual or Legal Entity authorized to submit on behalf of\r\n   the copyright owner. For the purposes of this definition, \"submitted\"\r\n   means any form of electronic, verbal, or written communication sent\r\n   to the Licensor or its representatives, including but not limited to\r\n   communication on electronic mailing lists, source code control systems,\r\n   and issue tracking systems that are managed by, or on behalf of, the\r\n   Licensor for the purpose of discussing and improving the Work, but\r\n   excluding communication that is conspicuously marked or otherwise\r\n   designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n   on behalf of whom a Contribution has been received by Licensor and\r\n   subsequently incorporated within the Work.\r\n\r\n2. Grant of Copyright License. Subject to the terms and conditions of\r\n   this License, each Contributor hereby grants to You a perpetual,\r\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n   copyright license to reproduce, prepare Derivative Works of,\r\n   publicly display, publicly perform, sublicense, and distribute the\r\n   Work and such Derivative Works in Source or Object form.\r\n\r\n3. Grant of Patent License. Subject to the terms and conditions of\r\n   this License, each Contributor hereby grants to You a perpetual,\r\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n   (except as stated in this section) patent license to make, have made,\r\n   use, offer to sell, sell, import, and otherwise transfer the Work,\r\n   where such license applies only to those patent claims licensable\r\n   by such Contributor that are necessarily infringed by their\r\n   Contribution(s) alone or by combination of their Contribution(s)\r\n   with the Work to which such Contribution(s) was submitted. If You\r\n   institute patent litigation against any entity (including a\r\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n   or a Contribution incorporated within the Work constitutes direct\r\n   or contributory patent infringement, then any patent licenses\r\n   granted to You under this License for that Work shall terminate\r\n   as of the date such litigation is filed.\r\n\r\n4. Redistribution. You may reproduce and distribute copies of the\r\n   Work or Derivative Works thereof in any medium, with or without\r\n   modifications, and in Source or Object form, provided that You\r\n   meet the following conditions:\r\n\r\n   (a) You must give any other recipients of the Work or\r\n       Derivative Works a copy of this License; and\r\n\r\n   (b) You must cause any modified files to carry prominent notices\r\n       stating that You changed the files; and\r\n\r\n   (c) You must retain, in the Source form of any Derivative Works\r\n       that You distribute, all copyright, patent, trademark, and\r\n       attribution notices from the Source form of the Work,\r\n       excluding those notices that do not pertain to any part of\r\n       the Derivative Works; and\r\n\r\n   (d) If the Work includes a \"NOTICE\" text file as part of its\r\n       distribution, then any Derivative Works that You distribute must\r\n       include a readable copy of the attribution notices contained\r\n       within such NOTICE file, excluding those notices that do not\r\n       pertain to any part of the Derivative Works, in at least one\r\n       of the following places: within a NOTICE text file distributed\r\n       as part of the Derivative Works; within the Source form or\r\n       documentation, if provided along with the Derivative Works; or,\r\n       within a display generated by the Derivative Works, if and\r\n       wherever such third-party notices normally appear. The contents\r\n       of the NOTICE file are for informational purposes only and\r\n       do not modify the License. You may add Your own attribution\r\n       notices within Derivative Works that You distribute, alongside\r\n       or as an addendum to the NOTICE text from the Work, provided\r\n       that such additional attribution notices cannot be construed\r\n       as modifying the License.\r\n\r\n   You may add Your own copyright statement to Your modifications and\r\n   may provide additional or different license terms and conditions\r\n   for use, reproduction, or distribution of Your modifications, or\r\n   for any such Derivative Works as a whole, provided Your use,\r\n   reproduction, and distribution of the Work otherwise complies with\r\n   the conditions stated in this License.\r\n\r\n5. Submission of Contributions. Unless You explicitly state otherwise,\r\n   any Contribution intentionally submitted for inclusion in the Work\r\n   by You to the Licensor shall be under the terms and conditions of\r\n   this License, without any additional terms or conditions.\r\n   Notwithstanding the above, nothing herein shall supersede or modify\r\n   the terms of any separate license agreement you may have executed\r\n   with Licensor regarding such Contributions.\r\n\r\n6. Trademarks. This License does not grant permission to use the trade\r\n   names, trademarks, service marks, or product names of the Licensor,\r\n   except as required for reasonable and customary use in describing the\r\n   origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n7. Disclaimer of Warranty. Unless required by applicable law or\r\n   agreed to in writing, Licensor provides the Work (and each\r\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n   implied, including, without limitation, any warranties or conditions\r\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n   PARTICULAR PURPOSE. You are solely responsible for determining the\r\n   appropriateness of using or redistributing the Work and assume any\r\n   risks associated with Your exercise of permissions under this License.\r\n\r\n8. Limitation of Liability. In no event and under no legal theory,\r\n   whether in tort (including negligence), contract, or otherwise,\r\n   unless required by applicable law (such as deliberate and grossly\r\n   negligent acts) or agreed to in writing, shall any Contributor be\r\n   liable to You for damages, including any direct, indirect, special,\r\n   incidental, or consequential damages of any character arising as a\r\n   result of this License or out of the use or inability to use the\r\n   Work (including but not limited to damages for loss of goodwill,\r\n   work stoppage, computer failure or malfunction, or any and all\r\n   other commercial damages or losses), even if such Contributor\r\n   has been advised of the possibility of such damages.\r\n\r\n9. Accepting Warranty or Additional Liability. While redistributing\r\n   the Work or Derivative Works thereof, You may choose to offer,\r\n   and charge a fee for, acceptance of support, warranty, indemnity,\r\n   or other liability obligations and/or rights consistent with this\r\n   License. However, in accepting such obligations, You may act only\r\n   on Your own behalf and on Your sole responsibility, not on behalf\r\n   of any other Contributor, and only if You agree to indemnify,\r\n   defend, and hold each Contributor harmless for any liability\r\n   incurred by, or claims asserted against, such Contributor by reason\r\n   of your accepting any such warranty or additional liability.\r\n\r\nEND OF TERMS AND CONDITIONS\r\n\r\nAPPENDIX: How to apply the Apache License to your work.\r\n\r\n   To apply the Apache License to your work, attach the following\r\n   boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n   replaced with your own identifying information. (Don't include\r\n   the brackets!)  The text should be enclosed in the appropriate\r\n   comment syntax for the file format. We also recommend that a\r\n   file or class name and description of purpose be included on the\r\n   same \"printed page\" as the copyright notice for easier\r\n   identification within third-party archives.\r\n\r\nCopyright [yyyy] [name of copyright owner]\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n\thttp://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n~~~~\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nclap 4.5.4 - MIT OR Apache-2.0\r\nhttps://github.com/clap-rs/clap\r\n\r\nCopyright (c) Individual contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nclap_builder 4.5.2 - MIT OR Apache-2.0\r\nhttps://github.com/clap-rs/clap\r\n\r\nCopyright (c) Individual contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nclap_derive 4.5.4 - MIT OR Apache-2.0\r\nhttps://github.com/clap-rs/clap\r\n\r\nCopyright (c) Individual contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nclap_lex 0.7.0 - MIT OR Apache-2.0\r\nhttps://github.com/clap-rs/clap\r\n\r\nCopyright (c) Individual contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncolorchoice 1.0.1 - MIT OR Apache-2.0\r\nhttps://github.com/rust-cli/anstyle\r\n\r\nThis software is released under the MIT license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nconcurrent-queue 2.5.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/concurrent-queue\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nconsole 0.15.8 - MIT\r\nhttps://github.com/console-rs/console\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Armin Ronacher <armin.ronacher@active-4.com>\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nconst_format 0.2.32 - Zlib\r\nhttps://github.com/rodrimati1992/const_format_crates/\r\n\r\nCopyright (c) 2020 Matias Rodriguez.\r\n\r\nThis software is provided 'as-is', without any express or implied\r\nwarranty. In no event will the authors be held liable for any damages\r\narising from the use of this software.\r\n\r\nPermission is granted to anyone to use this software for any purpose,\r\nincluding commercial applications, and to alter it and redistribute it\r\nfreely, subject to the following restrictions:\r\n\r\n1. The origin of this software must not be misrepresented; you must not\r\n   claim that you wrote the original software. If you use this software\r\n   in a product, an acknowledgment in the product documentation would be\r\n   appreciated but is not required.\r\n2. Altered source versions must be plainly marked as such, and must not be\r\n   misrepresented as being the original software.\r\n3. This notice may not be removed or altered from any source distribution.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nconst_format_proc_macros 0.2.32 - Zlib\r\nhttps://github.com/rodrimati1992/const_format_crates/\r\n\r\nCopyright (c) 2020 Matias Rodriguez.\r\n\r\nThis software is provided 'as-is', without any express or implied\r\nwarranty. In no event will the authors be held liable for any damages\r\narising from the use of this software.\r\n\r\nPermission is granted to anyone to use this software for any purpose,\r\nincluding commercial applications, and to alter it and redistribute it\r\nfreely, subject to the following restrictions:\r\n\r\n1. The origin of this software must not be misrepresented; you must not\r\n   claim that you wrote the original software. If you use this software\r\n   in a product, an acknowledgment in the product documentation would be\r\n   appreciated but is not required.\r\n2. Altered source versions must be plainly marked as such, and must not be\r\n   misrepresented as being the original software.\r\n3. This notice may not be removed or altered from any source distribution.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncore-foundation 0.9.4 - MIT OR Apache-2.0\r\nhttps://github.com/servo/core-foundation-rs\r\n\r\nCopyright (c) 2012-2013 Mozilla Foundation\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncore-foundation-sys 0.8.6 - MIT OR Apache-2.0\r\nhttps://github.com/servo/core-foundation-rs\r\n\r\nCopyright (c) 2012-2013 Mozilla Foundation\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncpufeatures 0.2.12 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/utils\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260052-utils\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/utils/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/utils\r\n\r\n[//]: # (crates)\r\n\r\n[`blobby`]: ./blobby\r\n[`block-buffer`]: ./block-buffer\r\n[`block‑padding`]: ./block-padding\r\n[`cmov`]: ./cmov\r\n[`collectable`]: ./collectable\r\n[`cpufeatures`]: ./cpufeatures\r\n[`dbl`]: ./dbl\r\n[`hex-literal`]: ./hex-literal\r\n[`inout`]: ./inout\r\n[`opaque-debug`]: ./opaque-debug\r\n[`wycheproof2blb`]: ./wycheproof2blb\r\n[`zeroize`]: ./zeroize\r\n\r\n[//]: # (misc)\r\n\r\n[Wycheproof]: https://github.com/google/wycheproof\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncrc32fast 1.4.1 - MIT OR Apache-2.0\r\nhttps://github.com/srijs/rust-crc32fast\r\n\r\nMIT License\r\n\r\nCopyright (c) 2018 Sam Rijs, Alex Crichton and contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncrossbeam-channel 0.5.13 - MIT OR Apache-2.0\r\nhttps://github.com/crossbeam-rs/crossbeam\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 The Crossbeam Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncrossbeam-utils 0.8.20 - MIT OR Apache-2.0\r\nhttps://github.com/crossbeam-rs/crossbeam\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 The Crossbeam Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ncrypto-common 0.1.6 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/traits\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260050-traits\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/traits/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/traits\r\n[msrv-1.85]: https://img.shields.io/badge/rustc-1.85.0+-blue.svg\r\n\r\n[//]: # (crates)\r\n\r\n[`aead`]: ./aead\r\n[`async‑signature`]: ./signature/async\r\n[`cipher`]: ./cipher\r\n[`crypto‑common`]: ./crypto-common\r\n[`crypto`]: ./crypto\r\n[`digest`]: ./digest\r\n[`elliptic‑curve`]: ./elliptic-curve\r\n[`kem`]: ./kem\r\n[`password-hash`]: ./password-hash\r\n[`signature`]: ./signature\r\n[`universal‑hash`]: ./universal-hash\r\n\r\n[//]: # (algorithms)\r\n\r\n[Authenticated encryption]: https://en.wikipedia.org/wiki/Authenticated_encryption\r\n[Block]: https://en.wikipedia.org/wiki/Block_cipher\r\n[Message authentication code]: https://en.wikipedia.org/wiki/Message_authentication_code\r\n[Cryptographic hash function]: https://en.wikipedia.org/wiki/Cryptographic_hash_function\r\n[Digital signature]: https://en.wikipedia.org/wiki/Digital_signature\r\n[Elliptic curve cryptography]: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\r\n[Key encapsulation mechanism]: https://en.wikipedia.org/wiki/Key_encapsulation\r\n[Password hashing]: https://en.wikipedia.org/wiki/Cryptographic_hash_function#Password_verification\r\n[Stream cipher]: https://en.wikipedia.org/wiki/Stream_cipher\r\n[Universal hash function]: https://en.wikipedia.org/wiki/Universal_hashing\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndata-encoding 2.6.0 - MIT\r\nhttps://github.com/ia0/data-encoding\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015-2020 Julien Cretin\r\nCopyright (c) 2017-2020 Google Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nderanged 0.3.11 - MIT OR Apache-2.0\r\nhttps://github.com/jhpratt/deranged\r\n\r\nCopyright (c) 2024 Jacob Pratt et al.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nderivative 2.2.0 - MIT/Apache-2.0\r\nhttps://github.com/mcarton/rust-derivative\r\n\r\nCopyright (c) 2016 Martin Carton\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\r\nof the Software, and to permit persons to whom the Software is furnished to do\r\nso, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndialoguer 0.10.4 - MIT\r\nhttps://github.com/console-rs/dialoguer\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Armin Ronacher <armin.ronacher@active-4.com>\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndigest 0.10.7 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/traits\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260050-traits\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/traits/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/traits\r\n[msrv-1.85]: https://img.shields.io/badge/rustc-1.85.0+-blue.svg\r\n\r\n[//]: # (crates)\r\n\r\n[`aead`]: ./aead\r\n[`async‑signature`]: ./signature/async\r\n[`cipher`]: ./cipher\r\n[`crypto‑common`]: ./crypto-common\r\n[`crypto`]: ./crypto\r\n[`digest`]: ./digest\r\n[`elliptic‑curve`]: ./elliptic-curve\r\n[`kem`]: ./kem\r\n[`password-hash`]: ./password-hash\r\n[`signature`]: ./signature\r\n[`universal‑hash`]: ./universal-hash\r\n\r\n[//]: # (algorithms)\r\n\r\n[Authenticated encryption]: https://en.wikipedia.org/wiki/Authenticated_encryption\r\n[Block]: https://en.wikipedia.org/wiki/Block_cipher\r\n[Message authentication code]: https://en.wikipedia.org/wiki/Message_authentication_code\r\n[Cryptographic hash function]: https://en.wikipedia.org/wiki/Cryptographic_hash_function\r\n[Digital signature]: https://en.wikipedia.org/wiki/Digital_signature\r\n[Elliptic curve cryptography]: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\r\n[Key encapsulation mechanism]: https://en.wikipedia.org/wiki/Key_encapsulation\r\n[Password hashing]: https://en.wikipedia.org/wiki/Cryptographic_hash_function#Password_verification\r\n[Stream cipher]: https://en.wikipedia.org/wiki/Stream_cipher\r\n[Universal hash function]: https://en.wikipedia.org/wiki/Universal_hashing\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndirs 4.0.0 - MIT OR Apache-2.0\r\ndirs 5.0.1 - MIT OR Apache-2.0\r\nhttps://github.com/dirs-dev/dirs-rs\r\n\r\nCopyright (c) 2018-2019 dirs-rs contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndirs-sys 0.3.7 - MIT OR Apache-2.0\r\ndirs-sys 0.4.1 - MIT OR Apache-2.0\r\nhttps://github.com/dirs-dev/dirs-sys-rs\r\n\r\nCopyright (c) 2018-2019 dirs-rs contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ndisplaydoc 0.2.5 - MIT OR Apache-2.0\r\nhttps://github.com/yaahc/displaydoc\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nencode_unicode 0.3.6 - MIT/Apache-2.0\r\nhttps://github.com/tormol/encode_unicode\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nencoding_rs 0.8.34 - (Apache-2.0 OR MIT) AND BSD-3-Clause\r\nhttps://github.com/hsivonen/encoding_rs\r\n\r\nCopyright Mozilla Foundation\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nenumflags2 0.7.9 - MIT OR Apache-2.0\r\nhttps://github.com/meithecatte/enumflags2\r\n\r\nCopyright (c) 2017-2023 Maik Klein, Maja Kądziołka\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nenumflags2_derive 0.7.9 - MIT OR Apache-2.0\r\nhttps://github.com/meithecatte/enumflags2\r\n\r\nCopyright (c) 2017-2023 Maik Klein, Maja Kądziołka\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nequivalent 1.0.1 - Apache-2.0 OR MIT\r\nhttps://github.com/indexmap-rs/equivalent\r\n\r\nCopyright (c) 2016--2023\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nerrno 0.3.9 - MIT OR Apache-2.0\r\nhttps://github.com/lambda-fairy/rust-errno\r\n\r\nCopyright (c) 2014 Chris Wong\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nevent-listener 2.5.3 - Apache-2.0 OR MIT\r\nevent-listener 3.1.0 - Apache-2.0 OR MIT\r\nevent-listener 4.0.3 - Apache-2.0 OR MIT\r\nevent-listener 5.3.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/event-listener\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nevent-listener-strategy 0.4.0 - Apache-2.0 OR MIT\r\nevent-listener-strategy 0.5.2 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/event-listener-strategy\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfastrand 1.9.0 - Apache-2.0 OR MIT\r\nfastrand 2.1.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/fastrand\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfiletime 0.2.23 - MIT/Apache-2.0\r\nhttps://github.com/alexcrichton/filetime\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nflate2 1.0.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/flate2-rs\r\n\r\nCopyright (c) 2014-2025 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfnv 1.0.7 - Apache-2.0 / MIT\r\nhttps://github.com/servo/rust-fnv\r\n\r\nCopyright (c) 2017 Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nforeign-types 0.3.2 - MIT/Apache-2.0\r\nhttps://github.com/sfackler/foreign-types\r\n\r\nCopyright (c) 2017 The foreign-types Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nforeign-types-shared 0.1.1 - MIT/Apache-2.0\r\nhttps://github.com/sfackler/foreign-types\r\n\r\nCopyright (c) 2017 The foreign-types Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nform_urlencoded 1.2.1 - MIT OR Apache-2.0\r\nhttps://github.com/servo/rust-url\r\n\r\nCopyright (c) 2013-2025 The rust-url developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-channel 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-core 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-executor 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-io 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-lite 1.13.0 - Apache-2.0 OR MIT\r\nfutures-lite 2.3.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/futures-lite\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-macro 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-sink 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-task 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nfutures-util 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/futures-rs\r\n\r\nCopyright (c) 2016 Alex Crichton\r\nCopyright (c) 2017 The Tokio Authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ngeneric-array 0.14.7 - MIT\r\nhttps://github.com/fizyk20/generic-array\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Bartłomiej Kamiński\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ngethostname 0.4.3 - Apache-2.0\r\nhttps://github.com/swsnr/gethostname.rs\r\n\r\nApache License\r\n                        Version 2.0, January 2004\r\n                     http://www.apache.org/licenses/\r\n\r\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n1. Definitions.\r\n\r\n   \"License\" shall mean the terms and conditions for use, reproduction,\r\n   and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n   \"Licensor\" shall mean the copyright owner or entity authorized by\r\n   the copyright owner that is granting the License.\r\n\r\n   \"Legal Entity\" shall mean the union of the acting entity and all\r\n   other entities that control, are controlled by, or are under common\r\n   control with that entity. For the purposes of this definition,\r\n   \"control\" means (i) the power, direct or indirect, to cause the\r\n   direction or management of such entity, whether by contract or\r\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n   outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n   exercising permissions granted by this License.\r\n\r\n   \"Source\" form shall mean the preferred form for making modifications,\r\n   including but not limited to software source code, documentation\r\n   source, and configuration files.\r\n\r\n   \"Object\" form shall mean any form resulting from mechanical\r\n   transformation or translation of a Source form, including but\r\n   not limited to compiled object code, generated documentation,\r\n   and conversions to other media types.\r\n\r\n   \"Work\" shall mean the work of authorship, whether in Source or\r\n   Object form, made available under the License, as indicated by a\r\n   copyright notice that is included in or attached to the work\r\n   (an example is provided in the Appendix below).\r\n\r\n   \"Derivative Works\" shall mean any work, whether in Source or Object\r\n   form, that is based on (or derived from) the Work and for which the\r\n   editorial revisions, annotations, elaborations, or other modifications\r\n   represent, as a whole, an original work of authorship. For the purposes\r\n   of this License, Derivative Works shall not include works that remain\r\n   separable from, or merely link (or bind by name) to the interfaces of,\r\n   the Work and Derivative Works thereof.\r\n\r\n   \"Contribution\" shall mean any work of authorship, including\r\n   the original version of the Work and any modifications or additions\r\n   to that Work or Derivative Works thereof, that is intentionally\r\n   submitted to Licensor for inclusion in the Work by the copyright owner\r\n   or by an individual or Legal Entity authorized to submit on behalf of\r\n   the copyright owner. For the purposes of this definition, \"submitted\"\r\n   means any form of electronic, verbal, or written communication sent\r\n   to the Licensor or its representatives, including but not limited to\r\n   communication on electronic mailing lists, source code control systems,\r\n   and issue tracking systems that are managed by, or on behalf of, the\r\n   Licensor for the purpose of discussing and improving the Work, but\r\n   excluding communication that is conspicuously marked or otherwise\r\n   designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n   on behalf of whom a Contribution has been received by Licensor and\r\n   subsequently incorporated within the Work.\r\n\r\n2. Grant of Copyright License. Subject to the terms and conditions of\r\n   this License, each Contributor hereby grants to You a perpetual,\r\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n   copyright license to reproduce, prepare Derivative Works of,\r\n   publicly display, publicly perform, sublicense, and distribute the\r\n   Work and such Derivative Works in Source or Object form.\r\n\r\n3. Grant of Patent License. Subject to the terms and conditions of\r\n   this License, each Contributor hereby grants to You a perpetual,\r\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n   (except as stated in this section) patent license to make, have made,\r\n   use, offer to sell, sell, import, and otherwise transfer the Work,\r\n   where such license applies only to those patent claims licensable\r\n   by such Contributor that are necessarily infringed by their\r\n   Contribution(s) alone or by combination of their Contribution(s)\r\n   with the Work to which such Contribution(s) was submitted. If You\r\n   institute patent litigation against any entity (including a\r\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n   or a Contribution incorporated within the Work constitutes direct\r\n   or contributory patent infringement, then any patent licenses\r\n   granted to You under this License for that Work shall terminate\r\n   as of the date such litigation is filed.\r\n\r\n4. Redistribution. You may reproduce and distribute copies of the\r\n   Work or Derivative Works thereof in any medium, with or without\r\n   modifications, and in Source or Object form, provided that You\r\n   meet the following conditions:\r\n\r\n   (a) You must give any other recipients of the Work or\r\n       Derivative Works a copy of this License; and\r\n\r\n   (b) You must cause any modified files to carry prominent notices\r\n       stating that You changed the files; and\r\n\r\n   (c) You must retain, in the Source form of any Derivative Works\r\n       that You distribute, all copyright, patent, trademark, and\r\n       attribution notices from the Source form of the Work,\r\n       excluding those notices that do not pertain to any part of\r\n       the Derivative Works; and\r\n\r\n   (d) If the Work includes a \"NOTICE\" text file as part of its\r\n       distribution, then any Derivative Works that You distribute must\r\n       include a readable copy of the attribution notices contained\r\n       within such NOTICE file, excluding those notices that do not\r\n       pertain to any part of the Derivative Works, in at least one\r\n       of the following places: within a NOTICE text file distributed\r\n       as part of the Derivative Works; within the Source form or\r\n       documentation, if provided along with the Derivative Works; or,\r\n       within a display generated by the Derivative Works, if and\r\n       wherever such third-party notices normally appear. The contents\r\n       of the NOTICE file are for informational purposes only and\r\n       do not modify the License. You may add Your own attribution\r\n       notices within Derivative Works that You distribute, alongside\r\n       or as an addendum to the NOTICE text from the Work, provided\r\n       that such additional attribution notices cannot be construed\r\n       as modifying the License.\r\n\r\n   You may add Your own copyright statement to Your modifications and\r\n   may provide additional or different license terms and conditions\r\n   for use, reproduction, or distribution of Your modifications, or\r\n   for any such Derivative Works as a whole, provided Your use,\r\n   reproduction, and distribution of the Work otherwise complies with\r\n   the conditions stated in this License.\r\n\r\n5. Submission of Contributions. Unless You explicitly state otherwise,\r\n   any Contribution intentionally submitted for inclusion in the Work\r\n   by You to the Licensor shall be under the terms and conditions of\r\n   this License, without any additional terms or conditions.\r\n   Notwithstanding the above, nothing herein shall supersede or modify\r\n   the terms of any separate license agreement you may have executed\r\n   with Licensor regarding such Contributions.\r\n\r\n6. Trademarks. This License does not grant permission to use the trade\r\n   names, trademarks, service marks, or product names of the Licensor,\r\n   except as required for reasonable and customary use in describing the\r\n   origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n7. Disclaimer of Warranty. Unless required by applicable law or\r\n   agreed to in writing, Licensor provides the Work (and each\r\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n   implied, including, without limitation, any warranties or conditions\r\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n   PARTICULAR PURPOSE. You are solely responsible for determining the\r\n   appropriateness of using or redistributing the Work and assume any\r\n   risks associated with Your exercise of permissions under this License.\r\n\r\n8. Limitation of Liability. In no event and under no legal theory,\r\n   whether in tort (including negligence), contract, or otherwise,\r\n   unless required by applicable law (such as deliberate and grossly\r\n   negligent acts) or agreed to in writing, shall any Contributor be\r\n   liable to You for damages, including any direct, indirect, special,\r\n   incidental, or consequential damages of any character arising as a\r\n   result of this License or out of the use or inability to use the\r\n   Work (including but not limited to damages for loss of goodwill,\r\n   work stoppage, computer failure or malfunction, or any and all\r\n   other commercial damages or losses), even if such Contributor\r\n   has been advised of the possibility of such damages.\r\n\r\n9. Accepting Warranty or Additional Liability. While redistributing\r\n   the Work or Derivative Works thereof, You may choose to offer,\r\n   and charge a fee for, acceptance of support, warranty, indemnity,\r\n   or other liability obligations and/or rights consistent with this\r\n   License. However, in accepting such obligations, You may act only\r\n   on Your own behalf and on Your sole responsibility, not on behalf\r\n   of any other Contributor, and only if You agree to indemnify,\r\n   defend, and hold each Contributor harmless for any liability\r\n   incurred by, or claims asserted against, such Contributor by reason\r\n   of your accepting any such warranty or additional liability.\r\n\r\nEND OF TERMS AND CONDITIONS\r\n\r\nAPPENDIX: How to apply the Apache License to your work.\r\n\r\n   To apply the Apache License to your work, attach the following\r\n   boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n   replaced with your own identifying information. (Don't include\r\n   the brackets!)  The text should be enclosed in the appropriate\r\n   comment syntax for the file format. We also recommend that a\r\n   file or class name and description of purpose be included on the\r\n   same \"printed page\" as the copyright notice for easier\r\n   identification within third-party archives.\r\n\r\nCopyright [yyyy] [name of copyright owner]\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n\thttp://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ngetrandom 0.1.16 - MIT OR Apache-2.0\r\ngetrandom 0.2.15 - MIT OR Apache-2.0\r\nhttps://github.com/rust-random/getrandom\r\n\r\nCopyright (c) 2018-2025 The rust-random Project Developers\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ngimli 0.28.1 - MIT OR Apache-2.0\r\nhttps://github.com/gimli-rs/gimli\r\n\r\nCopyright (c) 2015 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nh2 0.3.26 - MIT\r\nhttps://github.com/hyperium/h2\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 h2 authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhashbrown 0.12.3 - MIT OR Apache-2.0\r\nhashbrown 0.14.5 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/hashbrown\r\n\r\nCopyright (c) 2016 Amanieu d'Antras\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nheck 0.5.0 - MIT OR Apache-2.0\r\nhttps://github.com/withoutboats/heck\r\n\r\nCopyright (c) 2015 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhermit-abi 0.3.9 - MIT OR Apache-2.0\r\nhttps://github.com/hermit-os/hermit-rs\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhex 0.4.3 - MIT OR Apache-2.0\r\nhttps://github.com/KokaKiwi/rust-hex\r\n\r\nCopyright (c) 2013-2014 The Rust Project Developers.\r\nCopyright (c) 2015-2020 The rust-hex Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhex-literal 0.3.4 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/utils\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260052-utils\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/utils/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/utils\r\n\r\n[//]: # (crates)\r\n\r\n[`blobby`]: ./blobby\r\n[`block-buffer`]: ./block-buffer\r\n[`block‑padding`]: ./block-padding\r\n[`cmov`]: ./cmov\r\n[`collectable`]: ./collectable\r\n[`cpufeatures`]: ./cpufeatures\r\n[`dbl`]: ./dbl\r\n[`hex-literal`]: ./hex-literal\r\n[`inout`]: ./inout\r\n[`opaque-debug`]: ./opaque-debug\r\n[`wycheproof2blb`]: ./wycheproof2blb\r\n[`zeroize`]: ./zeroize\r\n\r\n[//]: # (misc)\r\n\r\n[Wycheproof]: https://github.com/google/wycheproof\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhmac 0.12.1 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/MACs\r\n\r\nAll crates licensed under either of\r\n\r\n* [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n* [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260044-MACs\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/MACs/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/MACs\r\n[msrv-1.85]: https://img.shields.io/badge/rustc-1.85.0+-blue.svg\r\n\r\n[//]: # (crates)\r\n\r\n[`belt-mac`]: ./belt-mac\r\n[`cbc-mac`]: ./cbc-mac\r\n[`cmac`]: ./cmac\r\n[`hmac`]: ./hmac\r\n[`pmac`]: ./pmac\r\n[`retail-mac`]: ./retail-mac\r\n\r\n[//]: # (footnotes)\r\n\r\n[1]: https://en.wikipedia.org/wiki/Message_authentication_code\r\n\r\n[//]: # (algorithms)\r\n\r\n[BelT MAC]: https://apmi.bsu.by/assets/files/std/belt-spec371.pdf\r\n[CBC-MAC]: https://en.wikipedia.org/wiki/CBC-MAC\r\n[CMAC]: https://en.wikipedia.org/wiki/One-key_MAC\r\n[HMAC]: https://en.wikipedia.org/wiki/HMAC\r\n[PMAC]: https://en.wikipedia.org/wiki/PMAC_(cryptography)\r\n[Retail MAC]: https://en.wikipedia.org/wiki/ISO/IEC_9797-1#MAC_algorithm_3\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhttp 0.2.12 - MIT OR Apache-2.0\r\nhttps://github.com/hyperium/http\r\n\r\nCopyright (c) 2017 http-rs authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhttp-body 0.4.6 - MIT\r\nhttps://github.com/hyperium/http-body\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019-2025 Sean McArthur & Hyper Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhttparse 1.8.0 - MIT/Apache-2.0\r\nhttps://github.com/seanmonstar/httparse\r\n\r\nCopyright (c) 2015-2025 Sean McArthur\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhttpdate 1.0.3 - MIT OR Apache-2.0\r\nhttps://github.com/pyfisch/httpdate\r\n\r\nCopyright (c) 2016 Pyfisch\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhyper 0.14.28 - MIT\r\nhttps://github.com/hyperium/hyper\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014-2025 Sean McArthur\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nhyper-tls 0.5.0 - MIT/Apache-2.0\r\nhttps://github.com/hyperium/hyper-tls\r\n\r\nCopyright (c) 2017 Sean McArthur\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\niana-time-zone 0.1.60 - MIT OR Apache-2.0\r\nhttps://github.com/strawlab/iana-time-zone\r\n\r\nCopyright (c) 2020 Andrew D. Straw\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\niana-time-zone-haiku 0.1.2 - MIT OR Apache-2.0\r\nhttps://github.com/strawlab/iana-time-zone\r\n\r\nCopyright (c) 2020 Andrew D. Straw\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_collections 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_locid 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_locid_transform 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_locid_transform_data 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_normalizer 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_normalizer_data 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_properties 1.5.1 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_properties_data 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_provider 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nicu_provider_macros 1.5.0 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nidna 1.0.3 - MIT OR Apache-2.0\r\nhttps://github.com/servo/rust-url/\r\n\r\nCopyright (c) 2013-2025 The rust-url developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nidna_adapter 1.2.0 - Apache-2.0 OR MIT\r\nhttps://github.com/hsivonen/idna_adapter\r\n\r\nCopyright (c) The rust-url developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nindexmap 1.9.3 - Apache-2.0 OR MIT\r\nindexmap 2.2.6 - Apache-2.0 OR MIT\r\nhttps://github.com/indexmap-rs/indexmap\r\n\r\nCopyright (c) 2016--2017\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nindicatif 0.17.8 - MIT\r\nhttps://github.com/console-rs/indicatif\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Armin Ronacher <armin.ronacher@active-4.com>\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ninout 0.1.3 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/utils\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260052-utils\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/utils/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/utils\r\n\r\n[//]: # (crates)\r\n\r\n[`blobby`]: ./blobby\r\n[`block-buffer`]: ./block-buffer\r\n[`block‑padding`]: ./block-padding\r\n[`cmov`]: ./cmov\r\n[`collectable`]: ./collectable\r\n[`cpufeatures`]: ./cpufeatures\r\n[`dbl`]: ./dbl\r\n[`hex-literal`]: ./hex-literal\r\n[`inout`]: ./inout\r\n[`opaque-debug`]: ./opaque-debug\r\n[`wycheproof2blb`]: ./wycheproof2blb\r\n[`zeroize`]: ./zeroize\r\n\r\n[//]: # (misc)\r\n\r\n[Wycheproof]: https://github.com/google/wycheproof\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ninstant 0.1.13 - BSD-3-Clause\r\nhttps://github.com/sebcrozet/instant\r\n\r\nCopyright (c) 2019, Sébastien Crozet\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n1. Redistributions of source code must retain the above copyright notice, this\r\n   list of conditions and the following disclaimer.\r\n\r\n2. Redistributions in binary form must reproduce the above copyright notice,\r\n   this list of conditions and the following disclaimer in the documentation\r\n   and/or other materials provided with the distribution.\r\n\r\n3. Neither the name of the author nor the names of its contributors may be used\r\n   to endorse or promote products derived from this software without specific\r\n   prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nio-lifetimes 1.0.11 - Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT\r\nhttps://github.com/sunfishcode/io-lifetimes\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nipnet 2.9.0 - MIT OR Apache-2.0\r\nhttps://github.com/krisprice/ipnet\r\n\r\nCopyright 2017 Juniper Networks, Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nis-docker 0.2.0 - MIT\r\nhttps://github.com/TheLarkInn/is-docker\r\n\r\nMIT License\r\n\r\nCopyright (c) 2023 Sean Larkin\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nis-wsl 0.4.0 - MIT\r\nhttps://github.com/TheLarkInn/is-wsl\r\n\r\nMIT License\r\n\r\nCopyright (c) 2023 Sean Larkin\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nis_terminal_polyfill 1.70.0 - MIT OR Apache-2.0\r\nhttps://github.com/polyfill-rs/is_terminal_polyfill\r\n\r\nCopyright (c) Individual contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nitoa 1.0.11 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/itoa\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\njs-sys 0.3.69 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nkeyring 2.3.3 - MIT OR Apache-2.0\r\nhttps://github.com/hwchen/keyring-rs\r\n\r\nCopyright (c) 2016 keyring Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlazy_static 1.4.0 - MIT/Apache-2.0\r\nhttps://github.com/rust-lang-nursery/lazy-static.rs\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlibc 0.2.155 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/libc\r\n\r\nCopyright (c) 2014-2020 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlibredox 0.1.3 - MIT\r\nhttps://gitlab.redox-os.org/redox-os/libredox.git\r\n\r\nMIT License\r\n\r\nCopyright (c) 2023 4lDO2\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlibz-sys 1.1.16 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/libz-sys\r\n\r\nCopyright (c) 2014 Alex Crichton\r\nCopyright (c) 2020 Josh Triplett\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlinux-keyutils 0.2.4 - Apache-2.0 OR MIT\r\nhttps://github.com/landhb/linux-keyutils\r\n\r\nLicensed under either of the following at your discretion:\r\n\r\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\r\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in the work by you shall be dual licensed as above, without any\r\nadditional terms or conditions.\r\n\r\n[//]: # (badges)\r\n[license-badge]: https://img.shields.io/badge/license-MIT/Apache--2.0-lightgray.svg?style=flat-square\r\n[license]: #license\r\n[rust-version-badge]: https://img.shields.io/badge/rust-latest%20stable-blue.svg?style=flat-square\r\n[rust-version]: #rust-version-policy\r\n[cargo-badge-lib]: https://img.shields.io/crates/v/linux-keyutils.svg?style=flat-square&label=linux-keyutils\r\n[cargo-lib]: https://crates.io/crates/linux-keyutils\r\n[docs-badge-lib]: https://img.shields.io/docsrs/linux-keyutils/latest?style=flat-square\r\n[docs-lib]: https://docs.rs/linux-keyutils\r\n[codecov]: https://img.shields.io/codecov/c/github/landhb/linux-keyutils?style=flat-square\r\n[codecov-url]: https://codecov.io/gh/landhb/linux-keyutils\r\n[build]: https://img.shields.io/github/actions/workflow/status/landhb/linux-keyutils/checks.yml?branch=main&style=flat-square\r\n[build-url]: https://github.com/landhb/linux-keyutils/actions?query=workflow%3Achecks\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlinux-raw-sys 0.3.8 - Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT\r\nlinux-raw-sys 0.4.14 - Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT\r\nhttps://github.com/sunfishcode/linux-raw-sys\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlitemap 0.7.4 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlock_api 0.4.12 - MIT OR Apache-2.0\r\nhttps://github.com/Amanieu/parking_lot\r\n\r\nCopyright (c) 2016 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nlog 0.4.21 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/log\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmd5 0.7.0 - Apache-2.0/MIT\r\nhttps://github.com/stainless-steel/md5\r\n\r\nThe project is dual licensed under the terms of the Apache License, Version 2.0,\r\nand the MIT License. You may obtain copies of the two licenses at\r\n\r\n* https://www.apache.org/licenses/LICENSE-2.0 and\r\n* https://opensource.org/licenses/MIT, respectively.\r\n\r\nThe following two notices apply to every file of the project.\r\n\r\n## The Apache License\r\n\r\n```\r\nCopyright 2015–2024 The md5 Developers\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at\r\n\r\n    http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software distributed\r\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\r\nspecific language governing permissions and limitations under the License.\r\n```\r\n\r\n## The MIT License\r\n\r\n```\r\nCopyright 2015–2024 The md5 Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n```\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmemchr 2.7.2 - Unlicense OR MIT\r\nhttps://github.com/BurntSushi/memchr\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Andrew Gallant\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmemoffset 0.7.1 - MIT\r\nmemoffset 0.9.1 - MIT\r\nhttps://github.com/Gilnaa/memoffset\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Gilad Naaman\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmime 0.3.17 - MIT OR Apache-2.0\r\nhttps://github.com/hyperium/mime\r\n\r\nCopyright (c) 2014-2019 Sean McArthur\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nminiz_oxide 0.7.3 - MIT OR Zlib OR Apache-2.0\r\nhttps://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide\r\n\r\nThis library (excluding the miniz C code used for tests) is licensed under the MIT license. The library is based on the miniz C library, of which the parts used are dual-licensed under the [MIT license](https://github.com/Frommi/miniz_oxide/blob/master/miniz/miniz.c#L1) and also the [unlicense](https://github.com/Frommi/miniz_oxide/blob/master/miniz/miniz.c#L577).\r\nThe parts of miniz that are not covered by the unlicense is [some Zip64 code](https://github.com/richgel999/miniz/commit/224d207ce8fffb908e156d27478be3afb5d83e6a#diff-edc0e9ccfae3b5324b85b3ec0a53dc74) which is only MIT licensed. This and other Zip functionality in miniz is not part of the miniz_oxidde and miniz_oxide_c_api rust libraries.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nmio 0.8.11 - MIT\r\nhttps://github.com/tokio-rs/mio\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 Carl Lerche and other MIO contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnative-tls 0.2.11 - MIT/Apache-2.0\r\nhttps://github.com/sfackler/rust-native-tls\r\n\r\nCopyright (c) 2016 The rust-native-tls Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnix 0.26.4 - MIT\r\nhttps://github.com/nix-rust/nix\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Carl Lerche + nix-rust Authors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nntapi 0.4.1 - Apache-2.0 OR MIT\r\nhttps://github.com/MSxDOS/ntapi\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"),to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum 0.4.3 - MIT OR Apache-2.0\r\nhttps://github.com/rust-num/num\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum-bigint 0.4.5 - MIT OR Apache-2.0\r\nhttps://github.com/rust-num/num-bigint\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum-complex 0.4.6 - MIT OR Apache-2.0\r\nhttps://github.com/rust-num/num-complex\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum-conv 0.1.0 - MIT OR Apache-2.0\r\nhttps://github.com/jhpratt/num-conv\r\n\r\nCopyright (c) 2023 Jacob Pratt\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum-integer 0.1.46 - MIT OR Apache-2.0\r\nhttps://github.com/rust-num/num-integer\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum-iter 0.1.45 - MIT OR Apache-2.0\r\nhttps://github.com/rust-num/num-iter\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum-rational 0.4.2 - MIT OR Apache-2.0\r\nhttps://github.com/rust-num/num-rational\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum-traits 0.2.19 - MIT OR Apache-2.0\r\nhttps://github.com/rust-num/num-traits\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnum_cpus 1.16.0 - MIT OR Apache-2.0\r\nhttps://github.com/seanmonstar/num_cpus\r\n\r\nCopyright (c) 2015-2025 Sean McArthur\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nnumber_prefix 0.4.0 - MIT\r\nhttps://github.com/ogham/rust-number-prefix\r\n\r\nMIT License\r\n\r\nCopyright (c) 2018 Benjamin Sago\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nobject 0.32.2 - Apache-2.0 OR MIT\r\nhttps://github.com/gimli-rs/object\r\n\r\nCopyright (c) 2015 The Gimli Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nonce_cell 1.19.0 - MIT OR Apache-2.0\r\nhttps://github.com/matklad/once_cell\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopen 4.2.0 - MIT\r\nhttps://github.com/Byron/open-rs\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright © `2015` `Sebastian Thiel`\r\n\r\nPermission is hereby granted, free of charge, to any person\r\nobtaining a copy of this software and associated documentation\r\nfiles (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use,\r\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the\r\nSoftware is furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\nOTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopenssl 0.10.70 - Apache-2.0\r\nhttps://github.com/sfackler/rust-openssl\r\n\r\nCopyright 2011-2017 Google Inc.\r\n          2013 Jack Lloyd\r\n          2013-2014 Steven Fackler\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n    http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopenssl-macros 0.1.1 - MIT/Apache-2.0\r\n\r\n\r\nThis software is released under the MIT license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopenssl-probe 0.1.5 - MIT/Apache-2.0\r\nhttps://github.com/alexcrichton/openssl-probe\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopenssl-sys 0.9.105 - MIT\r\nhttps://github.com/sfackler/rust-openssl\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopentelemetry 0.19.0 - Apache-2.0\r\nhttps://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopentelemetry_api 0.19.0 - Apache-2.0\r\nhttps://github.com/open-telemetry/opentelemetry-rust\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nopentelemetry_sdk 0.19.0 - Apache-2.0\r\nhttps://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-sdk\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\noption-ext 0.2.0 - MPL-2.0\r\nhttps://github.com/soc/option-ext\r\n\r\nMozilla Public License Version 2.0\r\n==================================\r\n\r\n1. Definitions\r\n--------------\r\n\r\n1.1. \"Contributor\"\r\n    means each individual or legal entity that creates, contributes to\r\n    the creation of, or owns Covered Software.\r\n\r\n1.2. \"Contributor Version\"\r\n    means the combination of the Contributions of others (if any) used\r\n    by a Contributor and that particular Contributor's Contribution.\r\n\r\n1.3. \"Contribution\"\r\n    means Covered Software of a particular Contributor.\r\n\r\n1.4. \"Covered Software\"\r\n    means Source Code Form to which the initial Contributor has attached\r\n    the notice in Exhibit A, the Executable Form of such Source Code\r\n    Form, and Modifications of such Source Code Form, in each case\r\n    including portions thereof.\r\n\r\n1.5. \"Incompatible With Secondary Licenses\"\r\n    means\r\n\r\n    (a) that the initial Contributor has attached the notice described\r\n        in Exhibit B to the Covered Software; or\r\n\r\n    (b) that the Covered Software was made available under the terms of\r\n        version 1.1 or earlier of the License, but not also under the\r\n        terms of a Secondary License.\r\n\r\n1.6. \"Executable Form\"\r\n    means any form of the work other than Source Code Form.\r\n\r\n1.7. \"Larger Work\"\r\n    means a work that combines Covered Software with other material, in\r\n    a separate file or files, that is not Covered Software.\r\n\r\n1.8. \"License\"\r\n    means this document.\r\n\r\n1.9. \"Licensable\"\r\n    means having the right to grant, to the maximum extent possible,\r\n    whether at the time of the initial grant or subsequently, any and\r\n    all of the rights conveyed by this License.\r\n\r\n1.10. \"Modifications\"\r\n    means any of the following:\r\n\r\n    (a) any file in Source Code Form that results from an addition to,\r\n        deletion from, or modification of the contents of Covered\r\n        Software; or\r\n\r\n    (b) any new file in Source Code Form that contains any Covered\r\n        Software.\r\n\r\n1.11. \"Patent Claims\" of a Contributor\r\n    means any patent claim(s), including without limitation, method,\r\n    process, and apparatus claims, in any patent Licensable by such\r\n    Contributor that would be infringed, but for the grant of the\r\n    License, by the making, using, selling, offering for sale, having\r\n    made, import, or transfer of either its Contributions or its\r\n    Contributor Version.\r\n\r\n1.12. \"Secondary License\"\r\n    means either the GNU General Public License, Version 2.0, the GNU\r\n    Lesser General Public License, Version 2.1, the GNU Affero General\r\n    Public License, Version 3.0, or any later versions of those\r\n    licenses.\r\n\r\n1.13. \"Source Code Form\"\r\n    means the form of the work preferred for making modifications.\r\n\r\n1.14. \"You\" (or \"Your\")\r\n    means an individual or a legal entity exercising rights under this\r\n    License. For legal entities, \"You\" includes any entity that\r\n    controls, is controlled by, or is under common control with You. For\r\n    purposes of this definition, \"control\" means (a) the power, direct\r\n    or indirect, to cause the direction or management of such entity,\r\n    whether by contract or otherwise, or (b) ownership of more than\r\n    fifty percent (50%) of the outstanding shares or beneficial\r\n    ownership of such entity.\r\n\r\n2. License Grants and Conditions\r\n--------------------------------\r\n\r\n2.1. Grants\r\n\r\nEach Contributor hereby grants You a world-wide, royalty-free,\r\nnon-exclusive license:\r\n\r\n(a) under intellectual property rights (other than patent or trademark)\r\n    Licensable by such Contributor to use, reproduce, make available,\r\n    modify, display, perform, distribute, and otherwise exploit its\r\n    Contributions, either on an unmodified basis, with Modifications, or\r\n    as part of a Larger Work; and\r\n\r\n(b) under Patent Claims of such Contributor to make, use, sell, offer\r\n    for sale, have made, import, and otherwise transfer either its\r\n    Contributions or its Contributor Version.\r\n\r\n2.2. Effective Date\r\n\r\nThe licenses granted in Section 2.1 with respect to any Contribution\r\nbecome effective for each Contribution on the date the Contributor first\r\ndistributes such Contribution.\r\n\r\n2.3. Limitations on Grant Scope\r\n\r\nThe licenses granted in this Section 2 are the only rights granted under\r\nthis License. No additional rights or licenses will be implied from the\r\ndistribution or licensing of Covered Software under this License.\r\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\r\nContributor:\r\n\r\n(a) for any code that a Contributor has removed from Covered Software;\r\n    or\r\n\r\n(b) for infringements caused by: (i) Your and any other third party's\r\n    modifications of Covered Software, or (ii) the combination of its\r\n    Contributions with other software (except as part of its Contributor\r\n    Version); or\r\n\r\n(c) under Patent Claims infringed by Covered Software in the absence of\r\n    its Contributions.\r\n\r\nThis License does not grant any rights in the trademarks, service marks,\r\nor logos of any Contributor (except as may be necessary to comply with\r\nthe notice requirements in Section 3.4).\r\n\r\n2.4. Subsequent Licenses\r\n\r\nNo Contributor makes additional grants as a result of Your choice to\r\ndistribute the Covered Software under a subsequent version of this\r\nLicense (see Section 10.2) or under the terms of a Secondary License (if\r\npermitted under the terms of Section 3.3).\r\n\r\n2.5. Representation\r\n\r\nEach Contributor represents that the Contributor believes its\r\nContributions are its original creation(s) or it has sufficient rights\r\nto grant the rights to its Contributions conveyed by this License.\r\n\r\n2.6. Fair Use\r\n\r\nThis License is not intended to limit any rights You have under\r\napplicable copyright doctrines of fair use, fair dealing, or other\r\nequivalents.\r\n\r\n2.7. Conditions\r\n\r\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\r\nin Section 2.1.\r\n\r\n3. Responsibilities\r\n-------------------\r\n\r\n3.1. Distribution of Source Form\r\n\r\nAll distribution of Covered Software in Source Code Form, including any\r\nModifications that You create or to which You contribute, must be under\r\nthe terms of this License. You must inform recipients that the Source\r\nCode Form of the Covered Software is governed by the terms of this\r\nLicense, and how they can obtain a copy of this License. You may not\r\nattempt to alter or restrict the recipients' rights in the Source Code\r\nForm.\r\n\r\n3.2. Distribution of Executable Form\r\n\r\nIf You distribute Covered Software in Executable Form then:\r\n\r\n(a) such Covered Software must also be made available in Source Code\r\n    Form, as described in Section 3.1, and You must inform recipients of\r\n    the Executable Form how they can obtain a copy of such Source Code\r\n    Form by reasonable means in a timely manner, at a charge no more\r\n    than the cost of distribution to the recipient; and\r\n\r\n(b) You may distribute such Executable Form under the terms of this\r\n    License, or sublicense it under different terms, provided that the\r\n    license for the Executable Form does not attempt to limit or alter\r\n    the recipients' rights in the Source Code Form under this License.\r\n\r\n3.3. Distribution of a Larger Work\r\n\r\nYou may create and distribute a Larger Work under terms of Your choice,\r\nprovided that You also comply with the requirements of this License for\r\nthe Covered Software. If the Larger Work is a combination of Covered\r\nSoftware with a work governed by one or more Secondary Licenses, and the\r\nCovered Software is not Incompatible With Secondary Licenses, this\r\nLicense permits You to additionally distribute such Covered Software\r\nunder the terms of such Secondary License(s), so that the recipient of\r\nthe Larger Work may, at their option, further distribute the Covered\r\nSoftware under the terms of either this License or such Secondary\r\nLicense(s).\r\n\r\n3.4. Notices\r\n\r\nYou may not remove or alter the substance of any license notices\r\n(including copyright notices, patent notices, disclaimers of warranty,\r\nor limitations of liability) contained within the Source Code Form of\r\nthe Covered Software, except that You may alter any license notices to\r\nthe extent required to remedy known factual inaccuracies.\r\n\r\n3.5. Application of Additional Terms\r\n\r\nYou may choose to offer, and to charge a fee for, warranty, support,\r\nindemnity or liability obligations to one or more recipients of Covered\r\nSoftware. However, You may do so only on Your own behalf, and not on\r\nbehalf of any Contributor. You must make it absolutely clear that any\r\nsuch warranty, support, indemnity, or liability obligation is offered by\r\nYou alone, and You hereby agree to indemnify every Contributor for any\r\nliability incurred by such Contributor as a result of warranty, support,\r\nindemnity or liability terms You offer. You may include additional\r\ndisclaimers of warranty and limitations of liability specific to any\r\njurisdiction.\r\n\r\n4. Inability to Comply Due to Statute or Regulation\r\n---------------------------------------------------\r\n\r\nIf it is impossible for You to comply with any of the terms of this\r\nLicense with respect to some or all of the Covered Software due to\r\nstatute, judicial order, or regulation then You must: (a) comply with\r\nthe terms of this License to the maximum extent possible; and (b)\r\ndescribe the limitations and the code they affect. Such description must\r\nbe placed in a text file included with all distributions of the Covered\r\nSoftware under this License. Except to the extent prohibited by statute\r\nor regulation, such description must be sufficiently detailed for a\r\nrecipient of ordinary skill to be able to understand it.\r\n\r\n5. Termination\r\n--------------\r\n\r\n5.1. The rights granted under this License will terminate automatically\r\nif You fail to comply with any of its terms. However, if You become\r\ncompliant, then the rights granted under this License from a particular\r\nContributor are reinstated (a) provisionally, unless and until such\r\nContributor explicitly and finally terminates Your grants, and (b) on an\r\nongoing basis, if such Contributor fails to notify You of the\r\nnon-compliance by some reasonable means prior to 60 days after You have\r\ncome back into compliance. Moreover, Your grants from a particular\r\nContributor are reinstated on an ongoing basis if such Contributor\r\nnotifies You of the non-compliance by some reasonable means, this is the\r\nfirst time You have received notice of non-compliance with this License\r\nfrom such Contributor, and You become compliant prior to 30 days after\r\nYour receipt of the notice.\r\n\r\n5.2. If You initiate litigation against any entity by asserting a patent\r\ninfringement claim (excluding declaratory judgment actions,\r\ncounter-claims, and cross-claims) alleging that a Contributor Version\r\ndirectly or indirectly infringes any patent, then the rights granted to\r\nYou by any and all Contributors for the Covered Software under Section\r\n2.1 of this License shall terminate.\r\n\r\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\r\nend user license agreements (excluding distributors and resellers) which\r\nhave been validly granted by You or Your distributors under this License\r\nprior to termination shall survive termination.\r\n\r\n************************************************************************\r\n*                                                                      *\r\n*  6. Disclaimer of Warranty                                           *\r\n*  -------------------------                                           *\r\n*                                                                      *\r\n*  Covered Software is provided under this License on an \"as is\"       *\r\n*  basis, without warranty of any kind, either expressed, implied, or  *\r\n*  statutory, including, without limitation, warranties that the       *\r\n*  Covered Software is free of defects, merchantable, fit for a        *\r\n*  particular purpose or non-infringing. The entire risk as to the     *\r\n*  quality and performance of the Covered Software is with You.        *\r\n*  Should any Covered Software prove defective in any respect, You     *\r\n*  (not any Contributor) assume the cost of any necessary servicing,   *\r\n*  repair, or correction. This disclaimer of warranty constitutes an   *\r\n*  essential part of this License. No use of any Covered Software is   *\r\n*  authorized under this License except under this disclaimer.         *\r\n*                                                                      *\r\n************************************************************************\r\n\r\n************************************************************************\r\n*                                                                      *\r\n*  7. Limitation of Liability                                          *\r\n*  --------------------------                                          *\r\n*                                                                      *\r\n*  Under no circumstances and under no legal theory, whether tort      *\r\n*  (including negligence), contract, or otherwise, shall any           *\r\n*  Contributor, or anyone who distributes Covered Software as          *\r\n*  permitted above, be liable to You for any direct, indirect,         *\r\n*  special, incidental, or consequential damages of any character      *\r\n*  including, without limitation, damages for lost profits, loss of    *\r\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\r\n*  and all other commercial damages or losses, even if such party      *\r\n*  shall have been informed of the possibility of such damages. This   *\r\n*  limitation of liability shall not apply to liability for death or   *\r\n*  personal injury resulting from such party's negligence to the       *\r\n*  extent applicable law prohibits such limitation. Some               *\r\n*  jurisdictions do not allow the exclusion or limitation of           *\r\n*  incidental or consequential damages, so this exclusion and          *\r\n*  limitation may not apply to You.                                    *\r\n*                                                                      *\r\n************************************************************************\r\n\r\n8. Litigation\r\n-------------\r\n\r\nAny litigation relating to this License may be brought only in the\r\ncourts of a jurisdiction where the defendant maintains its principal\r\nplace of business and such litigation shall be governed by laws of that\r\njurisdiction, without reference to its conflict-of-law provisions.\r\nNothing in this Section shall prevent a party's ability to bring\r\ncross-claims or counter-claims.\r\n\r\n9. Miscellaneous\r\n----------------\r\n\r\nThis License represents the complete agreement concerning the subject\r\nmatter hereof. If any provision of this License is held to be\r\nunenforceable, such provision shall be reformed only to the extent\r\nnecessary to make it enforceable. Any law or regulation which provides\r\nthat the language of a contract shall be construed against the drafter\r\nshall not be used to construe this License against a Contributor.\r\n\r\n10. Versions of the License\r\n---------------------------\r\n\r\n10.1. New Versions\r\n\r\nMozilla Foundation is the license steward. Except as provided in Section\r\n10.3, no one other than the license steward has the right to modify or\r\npublish new versions of this License. Each version will be given a\r\ndistinguishing version number.\r\n\r\n10.2. Effect of New Versions\r\n\r\nYou may distribute the Covered Software under the terms of the version\r\nof the License under which You originally received the Covered Software,\r\nor under the terms of any subsequent version published by the license\r\nsteward.\r\n\r\n10.3. Modified Versions\r\n\r\nIf you create software not governed by this License, and you want to\r\ncreate a new license for such software, you may create and use a\r\nmodified version of this License if you rename the license and remove\r\nany references to the name of the license steward (except to note that\r\nsuch modified license differs from this License).\r\n\r\n10.4. Distributing Source Code Form that is Incompatible With Secondary\r\nLicenses\r\n\r\nIf You choose to distribute Source Code Form that is Incompatible With\r\nSecondary Licenses under the terms of this version of the License, the\r\nnotice described in Exhibit B of this License must be attached.\r\n\r\nExhibit A - Source Code Form License Notice\r\n-------------------------------------------\r\n\r\n  This Source Code Form is subject to the terms of the Mozilla Public\r\n  License, v. 2.0. If a copy of the MPL was not distributed with this\r\n  file, You can obtain one at https://mozilla.org/MPL/2.0/.\r\n\r\nIf it is not possible or desirable to put the notice in a particular\r\nfile, then You may include the notice in a location (such as a LICENSE\r\nfile in a relevant directory) where a recipient would be likely to look\r\nfor such a notice.\r\n\r\nYou may add additional accurate notices of copyright ownership.\r\n\r\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\r\n---------------------------------------------------------\r\n\r\n  This Source Code Form is \"Incompatible With Secondary Licenses\", as\r\n  defined by the Mozilla Public License, v. 2.0.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nordered-stream 0.2.0 - MIT OR Apache-2.0\r\nhttps://github.com/danieldg/ordered-stream\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nos_info 3.8.2 - MIT\r\nhttps://github.com/stanislav-tkach/os_info\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Stanislav Tkach\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nparking 2.2.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/parking\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nparking_lot 0.12.2 - MIT OR Apache-2.0\r\nhttps://github.com/Amanieu/parking_lot\r\n\r\nCopyright (c) 2016 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nparking_lot_core 0.9.10 - MIT OR Apache-2.0\r\nhttps://github.com/Amanieu/parking_lot\r\n\r\nCopyright (c) 2016 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npaste 1.0.15 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/paste\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npathdiff 0.2.1 - MIT/Apache-2.0\r\nhttps://github.com/Manishearth/pathdiff\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npercent-encoding 2.3.1 - MIT OR Apache-2.0\r\nhttps://github.com/servo/rust-url/\r\n\r\nCopyright (c) 2013-2025 The rust-url developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npin-project 1.1.5 - Apache-2.0 OR MIT\r\nhttps://github.com/taiki-e/pin-project\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npin-project-internal 1.1.5 - Apache-2.0 OR MIT\r\nhttps://github.com/taiki-e/pin-project\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npin-project-lite 0.2.14 - Apache-2.0 OR MIT\r\nhttps://github.com/taiki-e/pin-project-lite\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npin-utils 0.1.0 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/pin-utils\r\n\r\nCopyright (c) 2018 The pin-utils authors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npiper 0.2.2 - MIT OR Apache-2.0\r\nhttps://github.com/smol-rs/piper\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npkg-config 0.3.30 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/pkg-config-rs\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npolling 2.8.0 - Apache-2.0 OR MIT\r\npolling 3.7.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/polling\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nportable-atomic 1.6.0 - Apache-2.0 OR MIT\r\nhttps://github.com/taiki-e/portable-atomic\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\npowerfmt 0.2.0 - MIT OR Apache-2.0\r\nhttps://github.com/jhpratt/powerfmt\r\n\r\nCopyright (c) 2023 Jacob Pratt et al.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nppv-lite86 0.2.17 - MIT/Apache-2.0\r\nhttps://github.com/cryptocorrosion/cryptocorrosion\r\n\r\nCopyright (c) 2019 The CryptoCorrosion Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nproc-macro-crate 1.3.1 - MIT OR Apache-2.0\r\nhttps://github.com/bkchr/proc-macro-crate\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nproc-macro2 1.0.83 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/proc-macro2\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nquote 1.0.36 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/quote\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrand 0.7.3 - MIT OR Apache-2.0\r\nrand 0.8.5 - MIT OR Apache-2.0\r\nhttps://github.com/rust-random/rand\r\n\r\nCopyright 2018 Developers of the Rand project\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrand_chacha 0.2.2 - MIT OR Apache-2.0\r\nrand_chacha 0.3.1 - MIT OR Apache-2.0\r\nhttps://github.com/rust-random/rand\r\n\r\nCopyright 2018 Developers of the Rand project\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrand_core 0.5.1 - MIT OR Apache-2.0\r\nrand_core 0.6.4 - MIT OR Apache-2.0\r\nhttps://github.com/rust-random/rand\r\n\r\nCopyright 2018 Developers of the Rand project\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrand_hc 0.2.0 - MIT/Apache-2.0\r\nhttps://github.com/rust-random/rngs\r\n\r\nCopyright 2018 Developers of the Rand project\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nredox_syscall 0.4.1 - MIT\r\nredox_syscall 0.5.1 - MIT\r\nhttps://github.com/redox-os/syscall\r\n\r\nCopyright (c) 2017 Redox OS Developers\r\n\r\nMIT License\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nredox_users 0.4.5 - MIT\r\nhttps://gitlab.redox-os.org/redox-os/users\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Jose Narvaez\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nregex 1.10.4 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/regex\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nregex-automata 0.4.6 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/regex/tree/master/regex-automata\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nregex-syntax 0.8.3 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/regex/tree/master/regex-syntax\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nreqwest 0.11.27 - MIT OR Apache-2.0\r\nhttps://github.com/seanmonstar/reqwest\r\n\r\nCopyright (c) 2016-2025 Sean McArthur\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrmp 0.8.14 - MIT\r\nhttps://github.com/3Hren/msgpack-rust\r\n\r\nMIT License\r\n\r\nCopyright (c) 2017 Evgeny Safronov\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrmp-serde 1.3.0 - MIT\r\nhttps://github.com/3Hren/msgpack-rust\r\n\r\nMIT License\r\n\r\nCopyright (c) 2017 Evgeny Safronov\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrussh fd4f608a83753f9f3e137f95600faffede71cf65\r\nhttps://github.com/microsoft/vscode-russh\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrussh-cryptovec fd4f608a83753f9f3e137f95600faffede71cf65\r\nhttps://github.com/microsoft/vscode-russh\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrussh-keys fd4f608a83753f9f3e137f95600faffede71cf65\r\nhttps://github.com/microsoft/vscode-russh\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrustc-demangle 0.1.24 - MIT/Apache-2.0\r\nhttps://github.com/rust-lang/rustc-demangle\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrustix 0.37.27 - Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT\r\nrustix 0.38.34 - Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT\r\nhttps://github.com/bytecodealliance/rustix\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nrustls-pemfile 1.0.4 - Apache-2.0 OR ISC OR MIT\r\nhttps://github.com/rustls/pemfile\r\n\r\nrustls-pemfile is distributed under the following three licenses:\r\n\r\n- Apache License version 2.0.\r\n- MIT license.\r\n- ISC license.\r\n\r\nThese are included as LICENSE-APACHE, LICENSE-MIT and LICENSE-ISC\r\nrespectively.  You may use this software under the terms of any\r\nof these licenses, at your option.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nryu 1.0.18 - Apache-2.0 OR BSL-1.0\r\nhttps://github.com/dtolnay/ryu\r\n\r\n<sup>\r\nLicensed under either of Apache License, Version\r\n2.0 (LICENSE-APACHE) or Boost Software License 1.0 (LICENSE-BOOST) at your\r\noption.\r\n</sup>\r\n\r\n<br>\r\n\r\n<sub>\r\nUnless you explicitly state otherwise, any contribution intentionally submitted\r\nfor inclusion in this crate by you, as defined in the Apache-2.0 license, shall\r\nbe dual licensed as above, without any additional terms or conditions.\r\n</sub>\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nschannel 0.1.23 - MIT\r\nhttps://github.com/steffengy/schannel-rs\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 steffengy\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nscopeguard 1.2.0 - MIT OR Apache-2.0\r\nhttps://github.com/bluss/scopeguard\r\n\r\nCopyright (c) 2016-2019 Ulrik Sverdrup \"bluss\" and scopeguard developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsecret-service 3.0.1 - MIT OR Apache-2.0\r\nhttps://github.com/hwchen/secret-service-rs\r\n\r\nCopyright (c) 2025 secret-service Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsecurity-framework 2.11.0 - MIT OR Apache-2.0\r\nhttps://github.com/kornelski/rust-security-framework\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Steven Fackler\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsecurity-framework-sys 2.11.0 - MIT OR Apache-2.0\r\nhttps://github.com/kornelski/rust-security-framework\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Steven Fackler\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nserde 1.0.202 - MIT OR Apache-2.0\r\nhttps://github.com/serde-rs/serde\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nserde_bytes 0.11.14 - MIT OR Apache-2.0\r\nhttps://github.com/serde-rs/bytes\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nserde_derive 1.0.202 - MIT OR Apache-2.0\r\nhttps://github.com/serde-rs/serde\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nserde_json 1.0.117 - MIT OR Apache-2.0\r\nhttps://github.com/serde-rs/json\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nserde_repr 0.1.19 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/serde-repr\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nserde_urlencoded 0.7.1 - MIT/Apache-2.0\r\nhttps://github.com/nox/serde_urlencoded\r\n\r\nCopyright (c) 2016 Anthony Ramine\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsha1 0.10.6 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/hashes\r\n\r\nAll crates in this repository are licensed under either of\r\n\r\n* [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n* [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260041-hashes\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/hashes/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/hashes\r\n\r\n[//]: # (crates)\r\n\r\n[`ascon‑hash`]: ./ascon-hash\r\n[`belt‑hash`]: ./belt-hash\r\n[`blake2`]: ./blake2\r\n[`fsb`]: ./fsb\r\n[`gost94`]: ./gost94\r\n[`groestl`]: ./groestl\r\n[`jh`]: ./jh\r\n[`k12`]: ./k12\r\n[`kupyna`]: ./kupyna\r\n[`md2`]: ./md2\r\n[`md4`]: ./md4\r\n[`md5`]: ./md5\r\n[`ripemd`]: ./ripemd\r\n[`sha1`]: ./sha1\r\n[`sha1-checked`]: ./sha1-checked\r\n[`sha2`]: ./sha2\r\n[`sha3`]: ./sha3\r\n[`shabal`]: ./shabal\r\n[`skein`]: ./skein\r\n[`sm3`]: ./sm3\r\n[`streebog`]: ./streebog\r\n[`tiger`]: ./tiger\r\n[`whirlpool`]: ./whirlpool\r\n\r\n[//]: # (footnotes)\r\n\r\n[1]: https://en.wikipedia.org/wiki/Cryptographic_hash_function\r\n[`blake3`]: https://github.com/BLAKE3-team/BLAKE3\r\n[`base16ct`]: https://docs.rs/base16ct\r\n[`base64ct`]: https://docs.rs/base64ct\r\n[`digest`]: https://docs.rs/digest\r\n[`Digest`]: https://docs.rs/digest/0.10.0/digest/trait.Digest.html\r\n[`Digest::digest`]: https://docs.rs/digest/0.10.0/digest/trait.Digest.html#tymethod.digest\r\n[`DynDigest`]: https://docs.rs/digest/0.10.0/digest/trait.DynDigest.html\r\n[`generic-array`]: https://docs.rs/generic-array\r\n[HMAC]: https://en.wikipedia.org/wiki/Hash-based_message_authentication_code\r\n[`Read`]: https://doc.rust-lang.org/std/io/trait.Read.html\r\n[`Write`]: https://doc.rust-lang.org/std/io/trait.Write.html\r\n[`hmac`]: https://docs.rs/hmac\r\n[RustCrypto/MACs]: https://github.com/RustCrypto/MACs\r\n\r\n[//]: # (algorithms)\r\n\r\n[Ascon]: https://ascon.iaik.tugraz.at\r\n[BelT]: https://ru.wikipedia.org/wiki/BelT\r\n[BLAKE2]: https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2\r\n[FSB]: https://en.wikipedia.org/wiki/Fast_syndrome-based_hash\r\n[GOST94]: https://en.wikipedia.org/wiki/GOST_(hash_function)\r\n[Grøstl]: https://en.wikipedia.org/wiki/Grøstl\r\n[JH]: https://www3.ntu.edu.sg/home/wuhj/research/jh\r\n[KangarooTwelve]: https://keccak.team/kangarootwelve.html\r\n[Kupyna]: https://eprint.iacr.org/2015/885.pdf\r\n[MD2]: https://en.wikipedia.org/wiki/MD2_(cryptography)\r\n[MD4]: https://en.wikipedia.org/wiki/MD4\r\n[MD5]: https://en.wikipedia.org/wiki/MD5\r\n[RIPEMD]: https://en.wikipedia.org/wiki/RIPEMD\r\n[SHA-1]: https://en.wikipedia.org/wiki/SHA-1\r\n[SHA-1 Checked]: https://github.com/cr-marcstevens/sha1collisiondetection\r\n[SHA-2]: https://en.wikipedia.org/wiki/SHA-2\r\n[SHA-3]: https://en.wikipedia.org/wiki/SHA-3\r\n[SHABAL]: https://www.cs.rit.edu/~ark/20090927/Round2Candidates/Shabal.pdf\r\n[Skein]: https://schneier.com/academic/skein\r\n[SM3]: https://en.wikipedia.org/wiki/SM3_(hash_function)\r\n[Streebog]: https://en.wikipedia.org/wiki/Streebog\r\n[Whirlpool]: https://en.wikipedia.org/wiki/Whirlpool_(cryptography)\r\n[Tiger]: http://www.cs.technion.ac.il/~biham/Reports/Tiger/tiger/tiger.html\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsha2 0.10.8 - MIT OR Apache-2.0\r\nhttps://github.com/RustCrypto/hashes\r\n\r\nAll crates in this repository are licensed under either of\r\n\r\n* [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n* [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260041-hashes\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/hashes/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/hashes\r\n\r\n[//]: # (crates)\r\n\r\n[`ascon‑hash`]: ./ascon-hash\r\n[`belt‑hash`]: ./belt-hash\r\n[`blake2`]: ./blake2\r\n[`fsb`]: ./fsb\r\n[`gost94`]: ./gost94\r\n[`groestl`]: ./groestl\r\n[`jh`]: ./jh\r\n[`k12`]: ./k12\r\n[`kupyna`]: ./kupyna\r\n[`md2`]: ./md2\r\n[`md4`]: ./md4\r\n[`md5`]: ./md5\r\n[`ripemd`]: ./ripemd\r\n[`sha1`]: ./sha1\r\n[`sha1-checked`]: ./sha1-checked\r\n[`sha2`]: ./sha2\r\n[`sha3`]: ./sha3\r\n[`shabal`]: ./shabal\r\n[`skein`]: ./skein\r\n[`sm3`]: ./sm3\r\n[`streebog`]: ./streebog\r\n[`tiger`]: ./tiger\r\n[`whirlpool`]: ./whirlpool\r\n\r\n[//]: # (footnotes)\r\n\r\n[1]: https://en.wikipedia.org/wiki/Cryptographic_hash_function\r\n[`blake3`]: https://github.com/BLAKE3-team/BLAKE3\r\n[`base16ct`]: https://docs.rs/base16ct\r\n[`base64ct`]: https://docs.rs/base64ct\r\n[`digest`]: https://docs.rs/digest\r\n[`Digest`]: https://docs.rs/digest/0.10.0/digest/trait.Digest.html\r\n[`Digest::digest`]: https://docs.rs/digest/0.10.0/digest/trait.Digest.html#tymethod.digest\r\n[`DynDigest`]: https://docs.rs/digest/0.10.0/digest/trait.DynDigest.html\r\n[`generic-array`]: https://docs.rs/generic-array\r\n[HMAC]: https://en.wikipedia.org/wiki/Hash-based_message_authentication_code\r\n[`Read`]: https://doc.rust-lang.org/std/io/trait.Read.html\r\n[`Write`]: https://doc.rust-lang.org/std/io/trait.Write.html\r\n[`hmac`]: https://docs.rs/hmac\r\n[RustCrypto/MACs]: https://github.com/RustCrypto/MACs\r\n\r\n[//]: # (algorithms)\r\n\r\n[Ascon]: https://ascon.iaik.tugraz.at\r\n[BelT]: https://ru.wikipedia.org/wiki/BelT\r\n[BLAKE2]: https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2\r\n[FSB]: https://en.wikipedia.org/wiki/Fast_syndrome-based_hash\r\n[GOST94]: https://en.wikipedia.org/wiki/GOST_(hash_function)\r\n[Grøstl]: https://en.wikipedia.org/wiki/Grøstl\r\n[JH]: https://www3.ntu.edu.sg/home/wuhj/research/jh\r\n[KangarooTwelve]: https://keccak.team/kangarootwelve.html\r\n[Kupyna]: https://eprint.iacr.org/2015/885.pdf\r\n[MD2]: https://en.wikipedia.org/wiki/MD2_(cryptography)\r\n[MD4]: https://en.wikipedia.org/wiki/MD4\r\n[MD5]: https://en.wikipedia.org/wiki/MD5\r\n[RIPEMD]: https://en.wikipedia.org/wiki/RIPEMD\r\n[SHA-1]: https://en.wikipedia.org/wiki/SHA-1\r\n[SHA-1 Checked]: https://github.com/cr-marcstevens/sha1collisiondetection\r\n[SHA-2]: https://en.wikipedia.org/wiki/SHA-2\r\n[SHA-3]: https://en.wikipedia.org/wiki/SHA-3\r\n[SHABAL]: https://www.cs.rit.edu/~ark/20090927/Round2Candidates/Shabal.pdf\r\n[Skein]: https://schneier.com/academic/skein\r\n[SM3]: https://en.wikipedia.org/wiki/SM3_(hash_function)\r\n[Streebog]: https://en.wikipedia.org/wiki/Streebog\r\n[Whirlpool]: https://en.wikipedia.org/wiki/Whirlpool_(cryptography)\r\n[Tiger]: http://www.cs.technion.ac.il/~biham/Reports/Tiger/tiger/tiger.html\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nshell-escape 0.1.5 - MIT/Apache-2.0\r\nhttps://github.com/sfackler/shell-escape\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nshell-words 1.1.0 - MIT/Apache-2.0\r\nhttps://github.com/tmiasko/shell-words\r\n\r\nCopyright (c) 2016 Tomasz Miąsko\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsignal-hook-registry 1.4.2 - Apache-2.0/MIT\r\nhttps://github.com/vorner/signal-hook\r\n\r\nCopyright (c) 2017 tokio-jsonrpc developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nslab 0.4.9 - MIT\r\nhttps://github.com/tokio-rs/slab\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 Carl Lerche\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsmallvec 1.13.2 - MIT OR Apache-2.0\r\nhttps://github.com/servo/rust-smallvec\r\n\r\nCopyright (c) 2018 The Servo Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsocket2 0.4.10 - MIT OR Apache-2.0\r\nsocket2 0.5.7 - MIT OR Apache-2.0\r\nhttps://github.com/rust-lang/socket2\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nstable_deref_trait 1.2.0 - MIT/Apache-2.0\r\nhttps://github.com/storyyeller/stable_deref_trait\r\n\r\nCopyright (c) 2017 Robert Grosse\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nstatic_assertions 1.1.0 - MIT OR Apache-2.0\r\nhttps://github.com/nvzqz/static-assertions-rs\r\n\r\nMIT License\r\n\r\nCopyright (c) 2017 Nikolai Vazquez\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nstrsim 0.11.1 - MIT\r\nhttps://github.com/rapidfuzz/strsim-rs\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Danny Guo\r\nCopyright (c) 2016 Titus Wormer <tituswormer@gmail.com>\r\nCopyright (c) 2018 Akash Kurdekar\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsubtle 2.5.0 - BSD-3-Clause\r\nhttps://github.com/dalek-cryptography/subtle\r\n\r\nCopyright (c) 2016-2017 Isis Agora Lovecruft, Henry de Valence. All rights reserved.\r\nCopyright (c) 2016-2024 Isis Agora Lovecruft. All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n1. Redistributions of source code must retain the above copyright\r\nnotice, this list of conditions and the following disclaimer.\r\n\r\n2. Redistributions in binary form must reproduce the above copyright\r\nnotice, this list of conditions and the following disclaimer in the\r\ndocumentation and/or other materials provided with the distribution.\r\n\r\n3. Neither the name of the copyright holder nor the names of its\r\ncontributors may be used to endorse or promote products derived from\r\nthis software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\r\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\r\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\r\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\r\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsyn 1.0.109 - MIT OR Apache-2.0\r\nsyn 2.0.65 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/syn\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsync_wrapper 0.1.2 - Apache-2.0\r\nhttps://github.com/Actyx/sync_wrapper\r\n\r\nApache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsynstructure 0.13.1 - MIT\r\nhttps://github.com/mystor/synstructure\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright 2016 Nika Layzell\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsysinfo 0.29.11 - MIT\r\nhttps://github.com/GuillaumeGomez/sysinfo\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Guillaume Gomez\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsystem-configuration 0.5.1 - MIT OR Apache-2.0\r\nhttps://github.com/mullvad/system-configuration-rs\r\n\r\nCopyright (c) 2024 Mullvad VPN AB\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nsystem-configuration-sys 0.5.0 - MIT OR Apache-2.0\r\nhttps://github.com/mullvad/system-configuration-rs\r\n\r\nCopyright (c) 2024 Mullvad VPN AB\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntar 0.4.40 - MIT/Apache-2.0\r\nhttps://github.com/alexcrichton/tar-rs\r\n\r\nCopyright (c) The tar-rs Project Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntempfile 3.10.1 - MIT OR Apache-2.0\r\nhttps://github.com/Stebalien/tempfile\r\n\r\nCopyright (c) 2015 Steven Allen\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nthiserror 1.0.61 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/thiserror\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nthiserror-impl 1.0.61 - MIT OR Apache-2.0\r\nhttps://github.com/dtolnay/thiserror\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntime 0.3.36 - MIT OR Apache-2.0\r\nhttps://github.com/time-rs/time\r\n\r\nCopyright (c) Jacob Pratt et al.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntime-core 0.1.2 - MIT OR Apache-2.0\r\nhttps://github.com/time-rs/time\r\n\r\nCopyright (c) Jacob Pratt et al.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntinystr 0.7.6 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntokio 1.37.0 - MIT\r\nhttps://github.com/tokio-rs/tokio\r\n\r\nMIT License\r\n\r\nCopyright (c) Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntokio-macros 2.2.0 - MIT\r\nhttps://github.com/tokio-rs/tokio\r\n\r\nMIT License\r\n\r\nCopyright (c) Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntokio-native-tls 0.3.1 - MIT\r\nhttps://github.com/tokio-rs/tls\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntokio-stream 0.1.15 - MIT\r\nhttps://github.com/tokio-rs/tokio\r\n\r\nMIT License\r\n\r\nCopyright (c) Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntokio-tungstenite 0.20.1 - MIT\r\nhttps://github.com/snapview/tokio-tungstenite\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Daniel Abramov\r\nCopyright (c) 2017 Alexey Galakhov\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntokio-util 0.7.11 - MIT\r\nhttps://github.com/tokio-rs/tokio\r\n\r\nMIT License\r\n\r\nCopyright (c) Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntoml_datetime 0.6.6 - MIT OR Apache-2.0\r\nhttps://github.com/toml-rs/toml\r\n\r\nCopyright (c) Individual contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntoml_edit 0.19.15 - MIT OR Apache-2.0\r\nhttps://github.com/toml-rs/toml\r\n\r\nCopyright (c) Individual contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntower-service 0.3.2 - MIT\r\nhttps://github.com/tower-rs/tower\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 Tower Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntracing 0.1.40 - MIT\r\nhttps://github.com/tokio-rs/tracing\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntracing-attributes 0.1.27 - MIT\r\nhttps://github.com/tokio-rs/tracing\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntracing-core 0.1.32 - MIT\r\nhttps://github.com/tokio-rs/tracing\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2019 Tokio Contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntry-lock 0.2.5 - MIT\r\nhttps://github.com/seanmonstar/try-lock\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2018-2025 Sean McArthur\r\nCopyright (c) 2016 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntungstenite 0.20.1 - MIT OR Apache-2.0\r\nhttps://github.com/snapview/tungstenite-rs\r\n\r\nCopyright (c) 2017 Alexey Galakhov\r\nCopyright (c) 2016 Jason Housley\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntunnels 8cae9b2a24c65c6c1958f5a0e77d72b23b5c6c30\r\nhttps://github.com/microsoft/dev-tunnels\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\ntypenum 1.17.0 - MIT OR Apache-2.0\r\nhttps://github.com/paholg/typenum\r\n\r\nMIT OR Apache-2.0\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nuds_windows 1.1.0 - MIT\r\nhttps://github.com/haraldh/rust_uds_windows\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nunicode-ident 1.0.12 - (MIT OR Apache-2.0) AND Unicode-DFS-2016\r\nhttps://github.com/dtolnay/unicode-ident\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nunicode-width 0.1.12 - MIT OR Apache-2.0\r\nhttps://github.com/unicode-rs/unicode-width\r\n\r\nCopyright (c) 2015 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nunicode-xid 0.2.4 - MIT OR Apache-2.0\r\nhttps://github.com/unicode-rs/unicode-xid\r\n\r\nCopyright (c) 2015 The Rust Project Developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nurl 2.5.4 - MIT OR Apache-2.0\r\nhttps://github.com/servo/rust-url\r\n\r\nCopyright (c) 2013-2025 The rust-url developers\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nurlencoding 2.1.3 - MIT\r\nhttps://github.com/kornelski/rust_urlencoding\r\n\r\nThe MIT License (MIT)\r\n\r\n© 2016 Bertram Truong\r\n© 2021 Kornel Lesiński\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nutf-8 0.7.6 - MIT OR Apache-2.0\r\nhttps://github.com/SimonSapin/rust-utf8\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nutf16_iter 1.0.5 - Apache-2.0 OR MIT\r\nhttps://github.com/hsivonen/utf16_iter\r\n\r\nCopyright Mozilla Foundation\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nutf8_iter 1.0.4 - Apache-2.0 OR MIT\r\nhttps://github.com/hsivonen/utf8_iter\r\n\r\nCopyright Mozilla Foundation\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nutf8parse 0.2.1 - Apache-2.0 OR MIT\r\nhttps://github.com/alacritty/vte\r\n\r\nCopyright (c) 2016 Joe Wilm\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nuuid 1.8.0 - Apache-2.0 OR MIT\r\nhttps://github.com/uuid-rs/uuid\r\n\r\nCopyright (c) 2014 The Rust Project Developers\r\nCopyright (c) 2018 Ashley Mannix, Christopher Armstrong, Dylan DPC, Hunar Roop Kahlon\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nvcpkg 0.2.15 - MIT/Apache-2.0\r\nhttps://github.com/mcgoo/vcpkg-rs\r\n\r\nCopyright (c) 2017 Jim McGrath\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nversion_check 0.9.4 - MIT/Apache-2.0\r\nhttps://github.com/SergioBenitez/version_check\r\n\r\nThe MIT License (MIT)\r\nCopyright (c) 2017-2018 Sergio Benitez\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwaker-fn 1.2.0 - Apache-2.0 OR MIT\r\nhttps://github.com/smol-rs/waker-fn\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwant 0.3.1 - MIT\r\nhttps://github.com/seanmonstar/want\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2018-2019 Sean McArthur\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasi 0.11.0+wasi-snapshot-preview1 - Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT\r\nwasi 0.9.0+wasi-snapshot-preview1 - Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT\r\nhttps://github.com/bytecodealliance/wasi-rs\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasm-bindgen 0.2.92 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasm-bindgen-backend 0.2.92 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasm-bindgen-futures 0.4.42 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen/tree/master/crates/futures\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasm-bindgen-macro 0.2.92 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasm-bindgen-macro-support 0.2.92 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasm-bindgen-shared 0.2.92 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwasm-streams 0.4.0 - MIT OR Apache-2.0\r\nhttps://github.com/MattiasBuelens/wasm-streams/\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nweb-sys 0.3.69 - MIT OR Apache-2.0\r\nhttps://github.com/rustwasm/wasm-bindgen/tree/master/crates/web-sys\r\n\r\nCopyright (c) 2014 Alex Crichton\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwinapi 0.3.9 - MIT/Apache-2.0\r\nhttps://github.com/retep998/winapi-rs\r\n\r\nCopyright (c) 2015-2018 The winapi-rs Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwinapi-i686-pc-windows-gnu 0.4.0 - MIT/Apache-2.0\r\nhttps://github.com/retep998/winapi-rs\r\n\r\nCopyright (c) 2015-2018 The winapi-rs Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwinapi-x86_64-pc-windows-gnu 0.4.0 - MIT/Apache-2.0\r\nhttps://github.com/retep998/winapi-rs\r\n\r\nCopyright (c) 2015-2018 The winapi-rs Developers\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows-core 0.52.0 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows-sys 0.48.0 - MIT OR Apache-2.0\r\nwindows-sys 0.52.0 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows-targets 0.48.5 - MIT OR Apache-2.0\r\nwindows-targets 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_aarch64_gnullvm 0.48.5 - MIT OR Apache-2.0\r\nwindows_aarch64_gnullvm 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_aarch64_msvc 0.48.5 - MIT OR Apache-2.0\r\nwindows_aarch64_msvc 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_i686_gnu 0.48.5 - MIT OR Apache-2.0\r\nwindows_i686_gnu 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_i686_gnullvm 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_i686_msvc 0.48.5 - MIT OR Apache-2.0\r\nwindows_i686_msvc 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_x86_64_gnu 0.48.5 - MIT OR Apache-2.0\r\nwindows_x86_64_gnu 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_x86_64_gnullvm 0.48.5 - MIT OR Apache-2.0\r\nwindows_x86_64_gnullvm 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwindows_x86_64_msvc 0.48.5 - MIT OR Apache-2.0\r\nwindows_x86_64_msvc 0.52.5 - MIT OR Apache-2.0\r\nhttps://github.com/microsoft/windows-rs\r\n\r\nMIT License\r\n\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwinnow 0.5.40 - MIT\r\nhttps://github.com/winnow-rs/winnow\r\n\r\nThe MIT License (MIT)\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwinreg 0.50.0 - MIT\r\nwinreg 0.8.0 - MIT\r\nhttps://github.com/gentoo90/winreg-rs\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015 Igor Shaula\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwrite16 1.0.0 - Apache-2.0 OR MIT\r\nhttps://github.com/hsivonen/write16\r\n\r\nCopyright Mozilla Foundation\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nwriteable 0.5.5 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nxattr 1.3.1 - MIT/Apache-2.0\r\nhttps://github.com/Stebalien/xattr\r\n\r\nCopyright (c) 2015 Steven Allen\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nxdg-home 1.1.0 - MIT\r\nhttps://github.com/zeenix/xdg-home\r\n\r\nThe MIT License (MIT)\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nyasna 0.5.2 - MIT OR Apache-2.0\r\nhttps://github.com/qnighy/yasna.rs\r\n\r\nCopyright (c) 2016 Masaki Hara\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nyoke 0.7.5 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nyoke-derive 0.7.5 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzbus 3.15.2 - MIT\r\nhttps://github.com/dbus2/zbus/\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2024 Zeeshan Ali Khan & zbus contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzbus_macros 3.15.2 - MIT\r\nhttps://github.com/dbus2/zbus/\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2024 Zeeshan Ali Khan & zbus contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzbus_names 2.6.1 - MIT\r\nhttps://github.com/dbus2/zbus/\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2024 Zeeshan Ali Khan & zbus contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzerofrom 0.1.5 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzerofrom-derive 0.1.5 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzeroize 1.7.0 - Apache-2.0 OR MIT\r\nhttps://github.com/RustCrypto/utils/tree/master/zeroize\r\n\r\nAll crates licensed under either of\r\n\r\n * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r\n * [MIT license](http://opensource.org/licenses/MIT)\r\n\r\nat your option.\r\n\r\n### Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\r\n\r\n[//]: # (badges)\r\n\r\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg\r\n[chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/260052-utils\r\n[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg\r\n[deps-image]: https://deps.rs/repo/github/RustCrypto/utils/status.svg\r\n[deps-link]: https://deps.rs/repo/github/RustCrypto/utils\r\n\r\n[//]: # (crates)\r\n\r\n[`blobby`]: ./blobby\r\n[`block-buffer`]: ./block-buffer\r\n[`block‑padding`]: ./block-padding\r\n[`cmov`]: ./cmov\r\n[`collectable`]: ./collectable\r\n[`cpufeatures`]: ./cpufeatures\r\n[`dbl`]: ./dbl\r\n[`hex-literal`]: ./hex-literal\r\n[`inout`]: ./inout\r\n[`opaque-debug`]: ./opaque-debug\r\n[`wycheproof2blb`]: ./wycheproof2blb\r\n[`zeroize`]: ./zeroize\r\n\r\n[//]: # (misc)\r\n\r\n[Wycheproof]: https://github.com/google/wycheproof\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzerovec 0.10.4 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzerovec-derive 0.10.3 - Unicode-3.0\r\nhttps://github.com/unicode-org/icu4x\r\n\r\nUNICODE LICENSE V3\r\n\r\nCOPYRIGHT AND PERMISSION NOTICE\r\n\r\nCopyright © 2020-2024 Unicode, Inc.\r\n\r\nNOTICE TO USER: Carefully read the following legal agreement. BY\r\nDOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR\r\nSOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\nTERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT\r\nDOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of data files and any associated documentation (the \"Data Files\") or\r\nsoftware and any associated documentation (the \"Software\") to deal in the\r\nData Files or Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, and/or sell\r\ncopies of the Data Files or Software, and to permit persons to whom the\r\nData Files or Software are furnished to do so, provided that either (a)\r\nthis copyright and permission notice appear with all copies of the Data\r\nFiles or Software, or (b) this copyright and permission notice appear in\r\nassociated Documentation.\r\n\r\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\r\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\r\nTHIRD PARTY RIGHTS.\r\n\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE\r\nBE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,\r\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA\r\nFILES OR SOFTWARE.\r\n\r\nExcept as contained in this notice, the name of a copyright holder shall\r\nnot be used in advertising or otherwise to promote the sale, use or other\r\ndealings in these Data Files or Software without prior written\r\nauthorization of the copyright holder.\r\n\r\nSPDX-License-Identifier: Unicode-3.0\r\n\r\n—\r\n\r\nPortions of ICU4X may have been adapted from ICU4C and/or ICU4J.\r\nICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzip 0.6.6 - MIT\r\nhttps://github.com/zip-rs/zip2\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 Mathijs van de Nes\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n\r\nSome files in the \"tests/data\" subdirectory of this repository are under other\r\nlicences; see files named LICENSE.*.txt for details.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzvariant 3.15.2 - MIT\r\nhttps://github.com/dbus2/zbus/\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2024 Zeeshan Ali Khan & zbus contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzvariant_derive 3.15.2 - MIT\r\nhttps://github.com/dbus2/zbus/\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2024 Zeeshan Ali Khan & zbus contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------\r\n\r\n---------------------------------------------------------\r\n\r\nzvariant_utils 1.0.1 - MIT\r\nhttps://github.com/dbus2/zbus/\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2024 Zeeshan Ali Khan & zbus contributors\r\n\r\nPermission is hereby granted, free of charge, to any\r\nperson obtaining a copy of this software and associated\r\ndocumentation files (the \"Software\"), to deal in the\r\nSoftware without restriction, including without\r\nlimitation the rights to use, copy, modify, merge,\r\npublish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software\r\nis furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice\r\nshall be included in all copies or substantial portions\r\nof the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\r\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\r\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\nDEALINGS IN THE SOFTWARE.\r\n---------------------------------------------------------"
  },
  {
    "path": "cli/build.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst FILE_HEADER: &str = \"/*---------------------------------------------------------------------------------------------\\n *  Copyright (c) Microsoft Corporation. All rights reserved.\\n *  Licensed under the MIT License. See License.txt in the project root for license information.\\n *--------------------------------------------------------------------------------------------*/\";\n\nuse std::{\n\tcollections::HashMap,\n\tenv, fs, io,\n\tpath::{Path, PathBuf},\n\tprocess::{self},\n\tstr::FromStr,\n};\n\nuse serde::{de::DeserializeOwned, Deserialize};\nuse serde_json::Value;\n\nfn main() {\n\tlet files = enumerate_source_files().expect(\"expected to enumerate files\");\n\tensure_file_headers(&files).expect(\"expected to ensure file headers\");\n\tapply_build_environment_variables();\n}\n\nfn camel_case_to_constant_case(key: &str) -> String {\n\tlet mut output = String::new();\n\tlet mut prev_upper = false;\n\tfor c in key.chars() {\n\t\tif c.is_uppercase() {\n\t\t\tif prev_upper {\n\t\t\t\toutput.push(c.to_ascii_lowercase());\n\t\t\t} else {\n\t\t\t\toutput.push('_');\n\t\t\t\toutput.push(c.to_ascii_uppercase());\n\t\t\t}\n\t\t\tprev_upper = true;\n\t\t} else if c.is_lowercase() {\n\t\t\toutput.push(c.to_ascii_uppercase());\n\t\t\tprev_upper = false;\n\t\t} else {\n\t\t\toutput.push(c);\n\t\t\tprev_upper = false;\n\t\t}\n\t}\n\n\toutput\n}\n\nfn set_env_vars_from_map_keys(prefix: &str, map: impl IntoIterator<Item = (String, Value)>) {\n\tlet mut win32_app_ids = vec![];\n\n\tfor (key, value) in map {\n\t\t//#region special handling\n\t\tlet value = match key.as_str() {\n\t\t\t\"tunnelServerQualities\" | \"serverLicense\" => {\n\t\t\t\tValue::String(serde_json::to_string(&value).unwrap())\n\t\t\t}\n\t\t\t\"nameLong\" => {\n\t\t\t\tif let Value::String(s) = &value {\n\t\t\t\t\tlet idx = s.find(\" - \");\n\t\t\t\t\tprintln!(\n\t\t\t\t\t\t\"cargo:rustc-env=VSCODE_CLI_QUALITYLESS_PRODUCT_NAME={}\",\n\t\t\t\t\t\tidx.map(|i| &s[..i]).unwrap_or(s)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tvalue\n\t\t\t}\n\t\t\t\"tunnelApplicationConfig\" => {\n\t\t\t\tif let Value::Object(v) = value {\n\t\t\t\t\tset_env_vars_from_map_keys(&format!(\"{}_{}\", prefix, \"TUNNEL\"), v);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t_ => value,\n\t\t};\n\t\tif key.contains(\"win32\") && key.contains(\"AppId\") {\n\t\t\tif let Value::String(s) = value {\n\t\t\t\twin32_app_ids.push(s);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\t//#endregion\n\n\t\tif let Value::String(s) = value {\n\t\t\tprintln!(\n\t\t\t\t\"cargo:rustc-env={}_{}={}\",\n\t\t\t\tprefix,\n\t\t\t\tcamel_case_to_constant_case(&key),\n\t\t\t\ts\n\t\t\t);\n\t\t}\n\t}\n\n\tif !win32_app_ids.is_empty() {\n\t\tprintln!(\n\t\t\t\"cargo:rustc-env=VSCODE_CLI_WIN32_APP_IDS={}\",\n\t\t\twin32_app_ids.join(\",\")\n\t\t);\n\t}\n}\n\nfn read_json_from_path<T>(path: &Path) -> T\nwhere\n\tT: DeserializeOwned,\n{\n\tlet mut file = fs::File::open(path).expect(\"failed to open file\");\n\tserde_json::from_reader(&mut file).expect(\"failed to deserialize JSON\")\n}\n\nfn apply_build_from_product_json(path: &Path) {\n\tlet json: HashMap<String, Value> = read_json_from_path(path);\n\tset_env_vars_from_map_keys(\"VSCODE_CLI\", json);\n}\n\n#[derive(Deserialize)]\nstruct PackageJson {\n\tpub version: String,\n}\n\nfn apply_build_environment_variables() {\n\tlet repo_dir = env::current_dir().unwrap().join(\"..\");\n\tlet package_json = read_json_from_path::<PackageJson>(&repo_dir.join(\"package.json\"));\n\tprintln!(\n\t\t\"cargo:rustc-env=VSCODE_CLI_VERSION={}\",\n\t\tpackage_json.version\n\t);\n\n\tmatch env::var(\"VSCODE_CLI_PRODUCT_JSON\") {\n\t\tOk(v) => {\n\t\t\tlet path = if cfg!(windows) {\n\t\t\t\tPathBuf::from_str(&v.replace('/', \"\\\\\")).unwrap()\n\t\t\t} else {\n\t\t\t\tPathBuf::from_str(&v).unwrap()\n\t\t\t};\n\t\t\tprintln!(\"cargo:warning=loading product.json from <{path:?}>\");\n\t\t\tapply_build_from_product_json(&path);\n\t\t}\n\n\t\tErr(_) => {\n\t\t\tapply_build_from_product_json(&repo_dir.join(\"product.json\"));\n\n\t\t\tlet overrides = repo_dir.join(\"product.overrides.json\");\n\t\t\tif overrides.exists() {\n\t\t\t\tapply_build_from_product_json(&overrides);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfn ensure_file_headers(files: &[PathBuf]) -> Result<(), io::Error> {\n\tlet mut ok = true;\n\n\tlet crlf_header_str = str::replace(FILE_HEADER, \"\\n\", \"\\r\\n\");\n\tlet crlf_header = crlf_header_str.as_bytes();\n\tlet lf_header = FILE_HEADER.as_bytes();\n\tfor file in files {\n\t\tlet contents = fs::read(file)?;\n\n\t\tif !(contents.starts_with(lf_header) || contents.starts_with(crlf_header)) {\n\t\t\teprintln!(\"File missing copyright header: {}\", file.display());\n\t\t\tok = false;\n\t\t}\n\t}\n\n\tif !ok {\n\t\tprocess::exit(1);\n\t}\n\n\tOk(())\n}\n\n/// Gets all \"rs\" files in the source directory\nfn enumerate_source_files() -> Result<Vec<PathBuf>, io::Error> {\n\tlet mut files = vec![];\n\tlet mut queue = vec![];\n\n\tlet current_dir = env::current_dir()?.join(\"src\");\n\tqueue.push(current_dir);\n\n\twhile !queue.is_empty() {\n\t\tfor entry in fs::read_dir(queue.pop().unwrap())? {\n\t\t\tlet entry = entry?;\n\t\t\tlet ftype = entry.file_type()?;\n\t\t\tif ftype.is_dir() {\n\t\t\t\tqueue.push(entry.path());\n\t\t\t} else if ftype.is_file() && entry.file_name().to_string_lossy().ends_with(\".rs\") {\n\t\t\t\tfiles.push(entry.path());\n\t\t\t}\n\t\t}\n\t}\n\n\tOk(files)\n}\n"
  },
  {
    "path": "cli/rustfmt.toml",
    "content": "hard_tabs = true\n"
  },
  {
    "path": "cli/src/async_pipe.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse crate::{constants::APPLICATION_NAME, util::errors::CodeError};\nuse async_trait::async_trait;\nuse std::path::{Path, PathBuf};\nuse std::pin::Pin;\nuse std::task::{Context, Poll};\nuse tokio::io::{AsyncRead, AsyncWrite};\nuse tokio::net::TcpListener;\nuse uuid::Uuid;\n\n// todo: we could probably abstract this into some crate, if one doesn't already exist\n\ncfg_if::cfg_if! {\n\tif #[cfg(unix)] {\n\t\tpub type AsyncPipe = tokio::net::UnixStream;\n\t\tpub type AsyncPipeWriteHalf = tokio::net::unix::OwnedWriteHalf;\n\t\tpub type AsyncPipeReadHalf = tokio::net::unix::OwnedReadHalf;\n\n\t\tpub async fn get_socket_rw_stream(path: &Path) -> Result<AsyncPipe, CodeError> {\n\t\t\ttokio::net::UnixStream::connect(path)\n\t\t\t\t.await\n\t\t\t\t.map_err(CodeError::AsyncPipeFailed)\n\t\t}\n\n\t\tpub async fn listen_socket_rw_stream(path: &Path) -> Result<AsyncPipeListener, CodeError> {\n\t\t\ttokio::net::UnixListener::bind(path)\n\t\t\t\t.map(AsyncPipeListener)\n\t\t\t\t.map_err(CodeError::AsyncPipeListenerFailed)\n\t\t}\n\n\t\tpub struct AsyncPipeListener(tokio::net::UnixListener);\n\n\t\timpl AsyncPipeListener {\n\t\t\tpub async fn accept(&mut self) -> Result<AsyncPipe, CodeError> {\n\t\t\t\tself.0.accept().await.map_err(CodeError::AsyncPipeListenerFailed).map(|(s, _)| s)\n\t\t\t}\n\t\t}\n\n\t\tpub fn socket_stream_split(pipe: AsyncPipe) -> (AsyncPipeReadHalf, AsyncPipeWriteHalf) {\n\t\t\tpipe.into_split()\n\t\t}\n\t} else {\n\t\tuse tokio::{time::sleep, io::ReadBuf};\n\t\tuse tokio::net::windows::named_pipe::{ClientOptions, ServerOptions, NamedPipeClient, NamedPipeServer};\n\t\tuse std::{time::Duration, io};\n\t\tuse pin_project::pin_project;\n\n\t\t#[pin_project(project = AsyncPipeProj)]\n\t\tpub enum AsyncPipe {\n\t\t\tPipeClient(#[pin] NamedPipeClient),\n\t\t\tPipeServer(#[pin] NamedPipeServer),\n\t\t}\n\n\t\timpl AsyncRead for AsyncPipe {\n\t\t\tfn poll_read(\n\t\t\t\tself: Pin<&mut Self>,\n\t\t\t\tcx: &mut Context<'_>,\n\t\t\t\tbuf: &mut ReadBuf<'_>,\n\t\t\t) -> Poll<io::Result<()>> {\n\t\t\t\tmatch self.project() {\n\t\t\t\t\tAsyncPipeProj::PipeClient(c) => c.poll_read(cx, buf),\n\t\t\t\t\tAsyncPipeProj::PipeServer(c) => c.poll_read(cx, buf),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\timpl AsyncWrite for AsyncPipe {\n\t\t\tfn poll_write(\n\t\t\t\tself: Pin<&mut Self>,\n\t\t\t\tcx: &mut Context<'_>,\n\t\t\t\tbuf: &[u8],\n\t\t\t) -> Poll<io::Result<usize>> {\n\t\t\t\tmatch self.project() {\n\t\t\t\t\tAsyncPipeProj::PipeClient(c) => c.poll_write(cx, buf),\n\t\t\t\t\tAsyncPipeProj::PipeServer(c) => c.poll_write(cx, buf),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfn poll_write_vectored(\n\t\t\t\tself: Pin<&mut Self>,\n\t\t\t\tcx: &mut Context<'_>,\n\t\t\t\tbufs: &[io::IoSlice<'_>],\n\t\t\t) -> Poll<Result<usize, io::Error>> {\n\t\t\t\tmatch self.project() {\n\t\t\t\t\tAsyncPipeProj::PipeClient(c) => c.poll_write_vectored(cx, bufs),\n\t\t\t\t\tAsyncPipeProj::PipeServer(c) => c.poll_write_vectored(cx, bufs),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io::Result<()>> {\n\t\t\t\tmatch self.project() {\n\t\t\t\t\tAsyncPipeProj::PipeClient(c) => c.poll_flush(cx),\n\t\t\t\t\tAsyncPipeProj::PipeServer(c) => c.poll_flush(cx),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfn is_write_vectored(&self) -> bool {\n\t\t\t\tmatch self {\n\t\t\t\t\tAsyncPipe::PipeClient(c) => c.is_write_vectored(),\n\t\t\t\t\tAsyncPipe::PipeServer(c) => c.is_write_vectored(),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), io::Error>> {\n\t\t\t\tmatch self.project() {\n\t\t\t\t\tAsyncPipeProj::PipeClient(c) => c.poll_shutdown(cx),\n\t\t\t\t\tAsyncPipeProj::PipeServer(c) => c.poll_shutdown(cx),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpub type AsyncPipeWriteHalf = tokio::io::WriteHalf<AsyncPipe>;\n\t\tpub type AsyncPipeReadHalf = tokio::io::ReadHalf<AsyncPipe>;\n\n\t\tpub async fn get_socket_rw_stream(path: &Path) -> Result<AsyncPipe, CodeError> {\n\t\t\t// Tokio says we can need to try in a loop. Do so.\n\t\t\t// https://docs.rs/tokio/latest/tokio/net/windows/named_pipe/struct.NamedPipeClient.html\n\t\t\tlet client = loop {\n\t\t\t\tmatch ClientOptions::new().open(path) {\n\t\t\t\t\tOk(client) => break client,\n\t\t\t\t\t// ERROR_PIPE_BUSY https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-\n\t\t\t\t\tErr(e) if e.raw_os_error() == Some(231) => sleep(Duration::from_millis(100)).await,\n\t\t\t\t\tErr(e) => return Err(CodeError::AsyncPipeFailed(e)),\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tOk(AsyncPipe::PipeClient(client))\n\t\t}\n\n\t\tpub struct AsyncPipeListener {\n\t\t\tpath: PathBuf,\n\t\t\tserver: NamedPipeServer\n\t\t}\n\n\t\timpl AsyncPipeListener {\n\t\t\tpub async fn accept(&mut self) -> Result<AsyncPipe, CodeError> {\n\t\t\t\t// see https://docs.rs/tokio/latest/tokio/net/windows/named_pipe/struct.NamedPipeServer.html\n\t\t\t\t// this is a bit weird in that the server becomes the client once\n\t\t\t\t// they get a connection, and we create a new client.\n\n\t\t\t\tself.server\n\t\t\t\t\t.connect()\n\t\t\t\t\t.await\n\t\t\t\t\t.map_err(CodeError::AsyncPipeListenerFailed)?;\n\n\t\t\t\t// Construct the next server to be connected before sending the one\n\t\t\t\t// we already have of onto a task. This ensures that the server\n\t\t\t\t// isn't closed (after it's done in the task) before a new one is\n\t\t\t\t// available. Otherwise the client might error with\n\t\t\t\t// `io::ErrorKind::NotFound`.\n\t\t\t\tlet next_server = ServerOptions::new()\n\t\t\t\t\t.create(&self.path)\n\t\t\t\t\t.map_err(CodeError::AsyncPipeListenerFailed)?;\n\n\n\t\t\t\tOk(AsyncPipe::PipeServer(std::mem::replace(&mut self.server, next_server)))\n\t\t\t}\n\t\t}\n\n\t\tpub async fn listen_socket_rw_stream(path: &Path) -> Result<AsyncPipeListener, CodeError> {\n\t\t\tlet server = ServerOptions::new()\n\t\t\t\t\t.first_pipe_instance(true)\n\t\t\t\t\t.create(path)\n\t\t\t\t\t.map_err(CodeError::AsyncPipeListenerFailed)?;\n\n\t\t\tOk(AsyncPipeListener { path: path.to_owned(), server })\n\t\t}\n\n\t\tpub fn socket_stream_split(pipe: AsyncPipe) -> (AsyncPipeReadHalf, AsyncPipeWriteHalf) {\n\t\t\ttokio::io::split(pipe)\n\t\t}\n\t}\n}\n\nimpl AsyncPipeListener {\n\tpub fn into_pollable(self) -> PollableAsyncListener {\n\t\tPollableAsyncListener {\n\t\t\tlistener: Some(self),\n\t\t\twrite_fut: tokio_util::sync::ReusableBoxFuture::new(make_accept_fut(None)),\n\t\t}\n\t}\n}\n\npub struct PollableAsyncListener {\n\tlistener: Option<AsyncPipeListener>,\n\twrite_fut: tokio_util::sync::ReusableBoxFuture<\n\t\t'static,\n\t\t(AsyncPipeListener, Result<AsyncPipe, CodeError>),\n\t>,\n}\n\nasync fn make_accept_fut(\n\tdata: Option<AsyncPipeListener>,\n) -> (AsyncPipeListener, Result<AsyncPipe, CodeError>) {\n\tmatch data {\n\t\tSome(mut l) => {\n\t\t\tlet c = l.accept().await;\n\t\t\t(l, c)\n\t\t}\n\t\tNone => unreachable!(\"this future should not be pollable in this state\"),\n\t}\n}\n\nimpl hyper::server::accept::Accept for PollableAsyncListener {\n\ttype Conn = AsyncPipe;\n\ttype Error = CodeError;\n\n\tfn poll_accept(\n\t\tmut self: Pin<&mut Self>,\n\t\tcx: &mut Context<'_>,\n\t) -> Poll<Option<Result<Self::Conn, Self::Error>>> {\n\t\tif let Some(l) = self.listener.take() {\n\t\t\tself.write_fut.set(make_accept_fut(Some(l)))\n\t\t}\n\n\t\tmatch self.write_fut.poll(cx) {\n\t\t\tPoll::Ready((l, cnx)) => {\n\t\t\t\tself.listener = Some(l);\n\t\t\t\tPoll::Ready(Some(cnx))\n\t\t\t}\n\t\t\tPoll::Pending => Poll::Pending,\n\t\t}\n\t}\n}\n\n/// Gets a random name for a pipe/socket on the platform\npub fn get_socket_name() -> PathBuf {\n\tcfg_if::cfg_if! {\n\t\tif #[cfg(unix)] {\n\t\t\tstd::env::temp_dir().join(format!(\"{}-{}\", APPLICATION_NAME, Uuid::new_v4()))\n\t\t} else {\n\t\t\tPathBuf::from(format!(r\"\\\\.\\pipe\\{}-{}\", APPLICATION_NAME, Uuid::new_v4()))\n\t\t}\n\t}\n}\n\npub type AcceptedRW = (\n\tBox<dyn AsyncRead + Send + Unpin>,\n\tBox<dyn AsyncWrite + Send + Unpin>,\n);\n\n#[async_trait]\npub trait AsyncRWAccepter {\n\tasync fn accept_rw(&mut self) -> Result<AcceptedRW, CodeError>;\n}\n\n#[async_trait]\nimpl AsyncRWAccepter for AsyncPipeListener {\n\tasync fn accept_rw(&mut self) -> Result<AcceptedRW, CodeError> {\n\t\tlet pipe = self.accept().await?;\n\t\tlet (read, write) = socket_stream_split(pipe);\n\t\tOk((Box::new(read), Box::new(write)))\n\t}\n}\n\n#[async_trait]\nimpl AsyncRWAccepter for TcpListener {\n\tasync fn accept_rw(&mut self) -> Result<AcceptedRW, CodeError> {\n\t\tlet (stream, _) = self\n\t\t\t.accept()\n\t\t\t.await\n\t\t\t.map_err(CodeError::AsyncPipeListenerFailed)?;\n\t\tlet (read, write) = tokio::io::split(stream);\n\t\tOk((Box::new(read), Box::new(write)))\n\t}\n}\n"
  },
  {
    "path": "cli/src/auth.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse crate::{\n\tconstants::{get_default_user_agent, APPLICATION_NAME, IS_INTERACTIVE_CLI, PRODUCT_NAME_LONG},\n\tdebug, error, info, log,\n\tstate::{LauncherPaths, PersistedState},\n\ttrace,\n\tutil::{\n\t\terrors::{\n\t\t\twrap, AnyError, CodeError, OAuthError, RefreshTokenNotAvailableError, StatusError,\n\t\t\tWrappedError,\n\t\t},\n\t\tinput::prompt_options,\n\t},\n\twarning,\n};\nuse async_trait::async_trait;\nuse chrono::{DateTime, Utc};\nuse gethostname::gethostname;\nuse serde::{de::DeserializeOwned, Deserialize, Serialize};\nuse std::{cell::Cell, fmt::Display, path::PathBuf, sync::Arc, thread};\nuse tokio::time::sleep;\nuse tunnels::{\n\tcontracts::PROD_FIRST_PARTY_APP_ID,\n\tmanagement::{Authorization, AuthorizationProvider, HttpError},\n};\n\n#[derive(Deserialize)]\nstruct DeviceCodeResponse {\n\tdevice_code: String,\n\tuser_code: String,\n\tmessage: Option<String>,\n\tverification_uri: String,\n\texpires_in: i64,\n}\n\n#[derive(Deserialize, Debug)]\nstruct AuthenticationResponse {\n\taccess_token: String,\n\trefresh_token: Option<String>,\n\texpires_in: Option<i64>,\n}\n\n#[derive(Deserialize)]\nstruct AuthenticationError {\n\terror: String,\n\terror_description: Option<String>,\n}\n\n#[derive(clap::ValueEnum, Serialize, Deserialize, Debug, Clone, Copy)]\npub enum AuthProvider {\n\tMicrosoft,\n\tGithub,\n}\n\nimpl Display for AuthProvider {\n\tfn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n\t\tmatch self {\n\t\t\tAuthProvider::Microsoft => write!(f, \"Microsoft Account\"),\n\t\t\tAuthProvider::Github => write!(f, \"GitHub Account\"),\n\t\t}\n\t}\n}\n\nimpl AuthProvider {\n\tpub fn client_id(&self) -> &'static str {\n\t\tmatch self {\n\t\t\tAuthProvider::Microsoft => \"aebc6443-996d-45c2-90f0-388ff96faa56\",\n\t\t\tAuthProvider::Github => \"01ab8ac9400c4e429b23\",\n\t\t}\n\t}\n\n\tpub fn code_uri(&self) -> &'static str {\n\t\tmatch self {\n\t\t\tAuthProvider::Microsoft => {\n\t\t\t\t\"https://login.microsoftonline.com/organizations/oauth2/v2.0/devicecode\"\n\t\t\t}\n\t\t\tAuthProvider::Github => \"https://github.com/login/device/code\",\n\t\t}\n\t}\n\n\tpub fn grant_uri(&self) -> &'static str {\n\t\tmatch self {\n\t\t\tAuthProvider::Microsoft => {\n\t\t\t\t\"https://login.microsoftonline.com/organizations/oauth2/v2.0/token\"\n\t\t\t}\n\t\t\tAuthProvider::Github => \"https://github.com/login/oauth/access_token\",\n\t\t}\n\t}\n\n\tpub fn get_default_scopes(&self) -> String {\n\t\tmatch self {\n\t\t\tAuthProvider::Microsoft => {\n\t\t\t\tformat!(\"{PROD_FIRST_PARTY_APP_ID}/.default+offline_access+profile+openid\")\n\t\t\t}\n\t\t\tAuthProvider::Github => \"read:user+read:org\".to_string(),\n\t\t}\n\t}\n}\n\n#[derive(Serialize, Deserialize, Debug, Clone)]\npub struct StoredCredential {\n\t#[serde(rename = \"p\")]\n\tpub(crate) provider: AuthProvider,\n\t#[serde(rename = \"a\")]\n\taccess_token: String,\n\t#[serde(rename = \"r\")]\n\trefresh_token: Option<String>,\n\t#[serde(rename = \"e\")]\n\texpires_at: Option<DateTime<Utc>>,\n}\n\nconst GH_USER_ENDPOINT: &str = \"https://api.github.com/user\";\n\nasync fn get_github_user(\n\tclient: &reqwest::Client,\n\taccess_token: &str,\n) -> Result<reqwest::Response, reqwest::Error> {\n\tclient\n\t\t.get(GH_USER_ENDPOINT)\n\t\t.header(\"Authorization\", format!(\"token {access_token}\"))\n\t\t.header(\"User-Agent\", get_default_user_agent())\n\t\t.send()\n\t\t.await\n}\n\nimpl StoredCredential {\n\tpub async fn is_expired(&self, log: &log::Logger, client: &reqwest::Client) -> bool {\n\t\tmatch self.provider {\n\t\t\tAuthProvider::Microsoft => self\n\t\t\t\t.expires_at\n\t\t\t\t.map(|e| Utc::now() + chrono::Duration::minutes(5) > e)\n\t\t\t\t.unwrap_or(false),\n\n\t\t\t// Make an auth request to Github. Mark the credential as expired\n\t\t\t// only on a verifiable 4xx code. We don't error on any failed\n\t\t\t// request since then a drop in connection could \"require\" a refresh\n\t\t\tAuthProvider::Github => {\n\t\t\t\tlet res = get_github_user(client, &self.access_token).await;\n\t\t\t\tlet res = match res {\n\t\t\t\t\tOk(r) => r,\n\t\t\t\t\tErr(e) => {\n\t\t\t\t\t\twarning!(log, \"failed to check GitHub token: {}\", e);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif res.status().is_success() {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tlet err = StatusError::from_res(res).await;\n\t\t\t\tdebug!(log, \"GitHub token looks expired: {:?}\", err);\n\t\t\t\ttrue\n\t\t\t}\n\t\t}\n\t}\n\n\tfn from_response(auth: AuthenticationResponse, provider: AuthProvider) -> Self {\n\t\tStoredCredential {\n\t\t\tprovider,\n\t\t\taccess_token: auth.access_token,\n\t\t\trefresh_token: auth.refresh_token,\n\t\t\texpires_at: auth\n\t\t\t\t.expires_in\n\t\t\t\t.map(|e| Utc::now() + chrono::Duration::seconds(e)),\n\t\t}\n\t}\n}\n\nstruct StorageWithLastRead {\n\tstorage: Box<dyn StorageImplementation>,\n\tfallback_storage: Option<FileStorage>,\n\tlast_read: Cell<Result<Option<StoredCredential>, WrappedError>>,\n}\n\n#[derive(Clone)]\npub struct Auth {\n\tclient: reqwest::Client,\n\tlog: log::Logger,\n\tfile_storage_path: PathBuf,\n\tstorage: Arc<std::sync::Mutex<Option<StorageWithLastRead>>>,\n}\n\ntrait StorageImplementation: Send + Sync {\n\tfn read(&mut self) -> Result<Option<StoredCredential>, AnyError>;\n\tfn store(&mut self, value: StoredCredential) -> Result<(), AnyError>;\n\tfn clear(&mut self) -> Result<(), AnyError>;\n}\n\n// unseal decrypts and deserializes the value\nfn seal<T>(value: &T) -> String\nwhere\n\tT: Serialize + ?Sized,\n{\n\tlet dec = serde_json::to_string(value).expect(\"expected to serialize\");\n\tif std::env::var(\"VSCODE_CLI_DISABLE_KEYCHAIN_ENCRYPT\").is_ok() {\n\t\treturn dec;\n\t}\n\tencrypt(&dec)\n}\n\n// unseal decrypts and deserializes the value\nfn unseal<T>(value: &str) -> Option<T>\nwhere\n\tT: DeserializeOwned,\n{\n\t// small back-compat for old unencrypted values, or if VSCODE_CLI_DISABLE_KEYCHAIN_ENCRYPT set\n\tif let Ok(v) = serde_json::from_str::<T>(value) {\n\t\treturn Some(v);\n\t}\n\n\tlet dec = decrypt(value)?;\n\tserde_json::from_str::<T>(&dec).ok()\n}\n\n#[cfg(target_os = \"windows\")]\nconst KEYCHAIN_ENTRY_LIMIT: usize = 1024;\n#[cfg(not(target_os = \"windows\"))]\nconst KEYCHAIN_ENTRY_LIMIT: usize = 128 * 1024;\n\nconst CONTINUE_MARKER: &str = \"<MORE>\";\n\n/// Implementation that wraps the KeyringStorage on Linux to avoid\n/// https://github.com/hwchen/keyring-rs/issues/132\nstruct ThreadKeyringStorage {\n\ts: Option<KeyringStorage>,\n}\n\nimpl ThreadKeyringStorage {\n\tfn thread_op<R, Fn>(&mut self, f: Fn) -> Result<R, AnyError>\n\twhere\n\t\tFn: 'static + Send + FnOnce(&mut KeyringStorage) -> Result<R, AnyError>,\n\t\tR: 'static + Send,\n\t{\n\t\tlet mut s = match self.s.take() {\n\t\t\tSome(s) => s,\n\t\t\tNone => return Err(CodeError::KeyringTimeout.into()),\n\t\t};\n\n\t\t// It seems like on Linux communication to the keyring can block indefinitely.\n\t\t// Fall back after a 5 second timeout.\n\t\tlet (sender, receiver) = std::sync::mpsc::channel();\n\t\tlet tsender = sender.clone();\n\n\t\tthread::spawn(move || sender.send(Some((f(&mut s), s))));\n\t\tthread::spawn(move || {\n\t\t\tthread::sleep(std::time::Duration::from_secs(5));\n\t\t\tlet _ = tsender.send(None);\n\t\t});\n\n\t\tmatch receiver.recv().unwrap() {\n\t\t\tSome((r, s)) => {\n\t\t\t\tself.s = Some(s);\n\t\t\t\tr\n\t\t\t}\n\t\t\tNone => Err(CodeError::KeyringTimeout.into()),\n\t\t}\n\t}\n}\n\nimpl Default for ThreadKeyringStorage {\n\tfn default() -> Self {\n\t\tSelf {\n\t\t\ts: Some(KeyringStorage::default()),\n\t\t}\n\t}\n}\n\nimpl StorageImplementation for ThreadKeyringStorage {\n\tfn read(&mut self) -> Result<Option<StoredCredential>, AnyError> {\n\t\tself.thread_op(|s| s.read())\n\t}\n\n\tfn store(&mut self, value: StoredCredential) -> Result<(), AnyError> {\n\t\tself.thread_op(move |s| s.store(value))\n\t}\n\n\tfn clear(&mut self) -> Result<(), AnyError> {\n\t\tself.thread_op(|s| s.clear())\n\t}\n}\n\n#[derive(Default)]\nstruct KeyringStorage {\n\t// keyring storage can be split into multiple entries due to entry length limits\n\t// on Windows https://github.com/microsoft/vscode-cli/issues/358\n\tentries: Vec<keyring::Entry>,\n}\n\nmacro_rules! get_next_entry {\n\t($self: expr, $i: expr) => {\n\t\tmatch $self.entries.get($i) {\n\t\t\tSome(e) => e,\n\t\t\tNone => {\n\t\t\t\tlet e = keyring::Entry::new(\"vscode-cli\", &format!(\"vscode-cli-{}\", $i)).unwrap();\n\t\t\t\t$self.entries.push(e);\n\t\t\t\t$self.entries.last().unwrap()\n\t\t\t}\n\t\t}\n\t};\n}\n\nimpl StorageImplementation for KeyringStorage {\n\tfn read(&mut self) -> Result<Option<StoredCredential>, AnyError> {\n\t\tlet mut str = String::new();\n\n\t\tfor i in 0.. {\n\t\t\tlet entry = get_next_entry!(self, i);\n\t\t\tlet next_chunk = match entry.get_password() {\n\t\t\t\tOk(value) => value,\n\t\t\t\tErr(keyring::Error::NoEntry) => return Ok(None), // missing entries?\n\t\t\t\tErr(e) => return Err(wrap(e, \"error reading keyring\").into()),\n\t\t\t};\n\n\t\t\tif next_chunk.ends_with(CONTINUE_MARKER) {\n\t\t\t\tstr.push_str(&next_chunk[..next_chunk.len() - CONTINUE_MARKER.len()]);\n\t\t\t} else {\n\t\t\t\tstr.push_str(&next_chunk);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tOk(unseal(&str))\n\t}\n\n\tfn store(&mut self, value: StoredCredential) -> Result<(), AnyError> {\n\t\tlet sealed = seal(&value);\n\t\tlet step_size = KEYCHAIN_ENTRY_LIMIT - CONTINUE_MARKER.len();\n\n\t\tfor i in (0..sealed.len()).step_by(step_size) {\n\t\t\tlet entry = get_next_entry!(self, i / step_size);\n\n\t\t\tlet cutoff = i + step_size;\n\t\t\tlet stored = if cutoff <= sealed.len() {\n\t\t\t\tlet mut part = sealed[i..cutoff].to_string();\n\t\t\t\tpart.push_str(CONTINUE_MARKER);\n\t\t\t\tentry.set_password(&part)\n\t\t\t} else {\n\t\t\t\tentry.set_password(&sealed[i..])\n\t\t\t};\n\n\t\t\tif let Err(e) = stored {\n\t\t\t\treturn Err(wrap(e, \"error updating keyring\").into());\n\t\t\t}\n\t\t}\n\n\t\tOk(())\n\t}\n\n\tfn clear(&mut self) -> Result<(), AnyError> {\n\t\tself.read().ok(); // make sure component parts are available\n\t\tfor entry in self.entries.iter() {\n\t\t\tentry\n\t\t\t\t.delete_password()\n\t\t\t\t.map_err(|e| wrap(e, \"error updating keyring\"))?;\n\t\t}\n\t\tself.entries.clear();\n\n\t\tOk(())\n\t}\n}\n\nstruct FileStorage(PersistedState<Option<String>>);\n\nimpl StorageImplementation for FileStorage {\n\tfn read(&mut self) -> Result<Option<StoredCredential>, AnyError> {\n\t\tOk(self.0.load().and_then(|s| unseal(&s)))\n\t}\n\n\tfn store(&mut self, value: StoredCredential) -> Result<(), AnyError> {\n\t\tself.0.save(Some(seal(&value))).map_err(|e| e.into())\n\t}\n\n\tfn clear(&mut self) -> Result<(), AnyError> {\n\t\tself.0.save(None).map_err(|e| e.into())\n\t}\n}\n\nimpl Auth {\n\tpub fn new(paths: &LauncherPaths, log: log::Logger) -> Auth {\n\t\tAuth {\n\t\t\tlog,\n\t\t\tclient: reqwest::Client::new(),\n\t\t\tfile_storage_path: paths.root().join(\"token.json\"),\n\t\t\tstorage: Arc::new(std::sync::Mutex::new(None)),\n\t\t}\n\t}\n\n\tfn with_storage<T, F>(&self, op: F) -> T\n\twhere\n\t\tF: FnOnce(&mut StorageWithLastRead) -> T,\n\t{\n\t\tlet mut opt = self.storage.lock().unwrap();\n\t\tif let Some(s) = opt.as_mut() {\n\t\t\treturn op(s);\n\t\t}\n\n\t\t#[cfg(not(target_os = \"linux\"))]\n\t\tlet mut keyring_storage = KeyringStorage::default();\n\t\t#[cfg(target_os = \"linux\")]\n\t\tlet mut keyring_storage = ThreadKeyringStorage::default();\n\t\tlet mut file_storage = FileStorage(PersistedState::new_with_mode(\n\t\t\tself.file_storage_path.clone(),\n\t\t\t0o600,\n\t\t));\n\n\t\tlet native_storage_result = if std::env::var(\"VSCODE_CLI_USE_FILE_KEYCHAIN\").is_ok()\n\t\t\t|| self.file_storage_path.exists()\n\t\t{\n\t\t\tErr(wrap(\"\", \"user prefers file storage\").into())\n\t\t} else {\n\t\t\tkeyring_storage.read()\n\t\t};\n\n\t\tlet mut storage = match native_storage_result {\n\t\t\tOk(v) => StorageWithLastRead {\n\t\t\t\tlast_read: Cell::new(Ok(v)),\n\t\t\t\tfallback_storage: Some(file_storage),\n\t\t\t\tstorage: Box::new(keyring_storage),\n\t\t\t},\n\t\t\tErr(e) => {\n\t\t\t\tdebug!(self.log, \"Using file keychain storage due to: {}\", e);\n\t\t\t\tStorageWithLastRead {\n\t\t\t\t\tlast_read: Cell::new(\n\t\t\t\t\t\tfile_storage\n\t\t\t\t\t\t\t.read()\n\t\t\t\t\t\t\t.map_err(|e| wrap(e, \"could not read from file storage\")),\n\t\t\t\t\t),\n\t\t\t\t\tfallback_storage: None,\n\t\t\t\t\tstorage: Box::new(file_storage),\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet out = op(&mut storage);\n\t\t*opt = Some(storage);\n\t\tout\n\t}\n\n\t/// Gets a tunnel Authentication for use in the tunnel management API.\n\tpub async fn get_tunnel_authentication(&self) -> Result<Authorization, AnyError> {\n\t\tlet cred = self.get_credential().await?;\n\t\tlet auth = match cred.provider {\n\t\t\tAuthProvider::Microsoft => Authorization::Bearer(cred.access_token),\n\t\t\tAuthProvider::Github => Authorization::Github(format!(\n\t\t\t\t\"client_id={} {}\",\n\t\t\t\tcred.provider.client_id(),\n\t\t\t\tcred.access_token\n\t\t\t)),\n\t\t};\n\n\t\tOk(auth)\n\t}\n\n\t/// Reads the current details from the keyring.\n\tpub fn get_current_credential(&self) -> Result<Option<StoredCredential>, WrappedError> {\n\t\tself.with_storage(|storage| {\n\t\t\tlet value = storage.last_read.replace(Ok(None));\n\t\t\tstorage.last_read.set(value.clone());\n\t\t\tvalue\n\t\t})\n\t}\n\n\t/// Clears login info from the keyring.\n\tpub fn clear_credentials(&self) -> Result<(), AnyError> {\n\t\tself.with_storage(|storage| {\n\t\t\tstorage.storage.clear()?;\n\t\t\tstorage.last_read.set(Ok(None));\n\t\t\tOk(())\n\t\t})\n\t}\n\n\t/// Runs the login flow, optionally pre-filling a provider and/or access token.\n\tpub async fn login(\n\t\t&self,\n\t\tprovider: Option<AuthProvider>,\n\t\taccess_token: Option<String>,\n\t\trefresh_token: Option<String>,\n\t) -> Result<StoredCredential, AnyError> {\n\t\tlet provider = match provider {\n\t\t\tSome(p) => p,\n\t\t\tNone => self.prompt_for_provider().await?,\n\t\t};\n\n\t\tlet credentials = match access_token {\n\t\t\tSome(t) => StoredCredential {\n\t\t\t\tprovider,\n\t\t\t\taccess_token: t,\n\t\t\t\t// if a refresh token is given, assume it's valid now but refresh it\n\t\t\t\t// soon in order to get the real expiry time.\n\t\t\t\texpires_at: refresh_token\n\t\t\t\t\t.as_ref()\n\t\t\t\t\t.map(|_| Utc::now() + chrono::Duration::minutes(5)),\n\t\t\t\trefresh_token,\n\t\t\t},\n\t\t\tNone => self.do_device_code_flow_with_provider(provider).await?,\n\t\t};\n\n\t\tself.store_credentials(credentials.clone());\n\t\tOk(credentials)\n\t}\n\n\t/// Gets the currently stored credentials, or asks the user to log in.\n\tpub async fn get_credential(&self) -> Result<StoredCredential, AnyError> {\n\t\tlet entry = match self.get_current_credential() {\n\t\t\tOk(Some(old_creds)) => {\n\t\t\t\ttrace!(self.log, \"Found token in keyring\");\n\t\t\t\tmatch self.maybe_refresh_token(&old_creds).await {\n\t\t\t\t\tOk(Some(new_creds)) => {\n\t\t\t\t\t\tself.store_credentials(new_creds.clone());\n\t\t\t\t\t\tnew_creds\n\t\t\t\t\t}\n\t\t\t\t\tOk(None) => old_creds,\n\t\t\t\t\tErr(e) => {\n\t\t\t\t\t\tinfo!(self.log, \"error refreshing token: {}\", e);\n\t\t\t\t\t\tlet new_creds = self\n\t\t\t\t\t\t\t.do_device_code_flow_with_provider(old_creds.provider)\n\t\t\t\t\t\t\t.await?;\n\t\t\t\t\t\tself.store_credentials(new_creds.clone());\n\t\t\t\t\t\tnew_creds\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tOk(None) => {\n\t\t\t\ttrace!(self.log, \"No token in keyring, getting a new one\");\n\t\t\t\tlet creds = self.do_device_code_flow().await?;\n\t\t\t\tself.store_credentials(creds.clone());\n\t\t\t\tcreds\n\t\t\t}\n\n\t\t\tErr(e) => {\n\t\t\t\twarning!(\n\t\t\t\t\tself.log,\n\t\t\t\t\t\"Error reading token from keyring, getting a new one: {}\",\n\t\t\t\t\te\n\t\t\t\t);\n\t\t\t\tlet creds = self.do_device_code_flow().await?;\n\t\t\t\tself.store_credentials(creds.clone());\n\t\t\t\tcreds\n\t\t\t}\n\t\t};\n\n\t\tOk(entry)\n\t}\n\n\t/// Stores credentials, logging a warning if it fails.\n\tfn store_credentials(&self, creds: StoredCredential) {\n\t\tself.with_storage(|storage| {\n\t\t\tif let Err(e) = storage.storage.store(creds.clone()) {\n\t\t\t\twarning!(\n\t\t\t\t\tself.log,\n\t\t\t\t\t\"Failed to update keyring with new credentials: {}\",\n\t\t\t\t\te\n\t\t\t\t);\n\n\t\t\t\tif let Some(fb) = storage.fallback_storage.take() {\n\t\t\t\t\tstorage.storage = Box::new(fb);\n\t\t\t\t\tmatch storage.storage.store(creds.clone()) {\n\t\t\t\t\t\tErr(e) => {\n\t\t\t\t\t\t\twarning!(self.log, \"Also failed to update fallback storage: {}\", e)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tOk(_) => debug!(self.log, \"Updated fallback storage successfully\"),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstorage.last_read.set(Ok(Some(creds)));\n\t\t})\n\t}\n\n\t/// Refreshes the token in the credentials if necessary. Returns None if\n\t/// the token is up to date, or Some new token otherwise.\n\tasync fn maybe_refresh_token(\n\t\t&self,\n\t\tcreds: &StoredCredential,\n\t) -> Result<Option<StoredCredential>, AnyError> {\n\t\tif !creds.is_expired(&self.log, &self.client).await {\n\t\t\treturn Ok(None);\n\t\t}\n\n\t\tself.do_refresh_token(creds).await\n\t}\n\n\t/// Refreshes the token in the credentials. Returns an error if the process failed.\n\t/// Returns None if the token didn't change.\n\tasync fn do_refresh_token(\n\t\t&self,\n\t\tcreds: &StoredCredential,\n\t) -> Result<Option<StoredCredential>, AnyError> {\n\t\tmatch &creds.refresh_token {\n\t\t\tSome(t) => self\n\t\t\t\t.do_grant(\n\t\t\t\t\tcreds.provider,\n\t\t\t\t\tformat!(\n\t\t\t\t\t\t\"client_id={}&grant_type=refresh_token&refresh_token={}\",\n\t\t\t\t\t\tcreds.provider.client_id(),\n\t\t\t\t\t\tt\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.await\n\t\t\t\t.map(Some),\n\t\t\tNone => match creds.provider {\n\t\t\t\tAuthProvider::Github => self.touch_github_token(creds).await.map(|_| None),\n\t\t\t\t_ => Err(RefreshTokenNotAvailableError().into()),\n\t\t\t},\n\t\t}\n\t}\n\n\t/// Does a \"grant token\" request.\n\tasync fn do_grant(\n\t\t&self,\n\t\tprovider: AuthProvider,\n\t\tbody: String,\n\t) -> Result<StoredCredential, AnyError> {\n\t\tlet response = self\n\t\t\t.client\n\t\t\t.post(provider.grant_uri())\n\t\t\t.body(body)\n\t\t\t.header(\"Accept\", \"application/json\")\n\t\t\t.send()\n\t\t\t.await?;\n\n\t\tlet status_code = response.status().as_u16();\n\t\tlet body = response.bytes().await?;\n\t\tif let Ok(body) = serde_json::from_slice::<AuthenticationResponse>(&body) {\n\t\t\treturn Ok(StoredCredential::from_response(body, provider));\n\t\t}\n\n\t\tErr(Auth::handle_grant_error(\n\t\t\tprovider.grant_uri(),\n\t\t\tstatus_code,\n\t\t\tbody,\n\t\t))\n\t}\n\n\t/// GH doesn't have a refresh token, but does limit to the 10 most recently\n\t/// used tokens per user (#9052), so for the github \"refresh\" just request\n\t/// the current user.\n\tasync fn touch_github_token(&self, credential: &StoredCredential) -> Result<(), AnyError> {\n\t\tlet response = get_github_user(&self.client, &credential.access_token).await?;\n\t\tif response.status().is_success() {\n\t\t\treturn Ok(());\n\t\t}\n\n\t\tlet status_code = response.status().as_u16();\n\t\tlet body = response.bytes().await?;\n\t\tErr(Auth::handle_grant_error(\n\t\t\tGH_USER_ENDPOINT,\n\t\t\tstatus_code,\n\t\t\tbody,\n\t\t))\n\t}\n\n\tfn handle_grant_error(url: &str, status_code: u16, body: bytes::Bytes) -> AnyError {\n\t\tif let Ok(res) = serde_json::from_slice::<AuthenticationError>(&body) {\n\t\t\treturn OAuthError {\n\t\t\t\terror: res.error,\n\t\t\t\terror_description: res.error_description,\n\t\t\t}\n\t\t\t.into();\n\t\t}\n\n\t\tStatusError {\n\t\t\tbody: String::from_utf8_lossy(&body).to_string(),\n\t\t\tstatus_code,\n\t\t\turl: url.to_string(),\n\t\t}\n\t\t.into()\n\t}\n\t/// Implements the device code flow, returning the credentials upon success.\n\tasync fn do_device_code_flow(&self) -> Result<StoredCredential, AnyError> {\n\t\tlet provider = self.prompt_for_provider().await?;\n\t\tself.do_device_code_flow_with_provider(provider).await\n\t}\n\n\tasync fn prompt_for_provider(&self) -> Result<AuthProvider, AnyError> {\n\t\tif !*IS_INTERACTIVE_CLI {\n\t\t\tinfo!(\n\t\t\t\tself.log,\n\t\t\t\t\"Using GitHub for authentication, run `{} tunnel user login --provider <provider>` option to change this.\",\n\t\t\t\tAPPLICATION_NAME\n\t\t\t);\n\t\t\treturn Ok(AuthProvider::Github);\n\t\t}\n\n\t\tlet provider = prompt_options(\n\t\t\tformat!(\"How would you like to log in to {PRODUCT_NAME_LONG}?\"),\n\t\t\t&[AuthProvider::Microsoft, AuthProvider::Github],\n\t\t)?;\n\n\t\tOk(provider)\n\t}\n\n\tasync fn do_device_code_flow_with_provider(\n\t\t&self,\n\t\tprovider: AuthProvider,\n\t) -> Result<StoredCredential, AnyError> {\n\t\tloop {\n\t\t\tlet init_code = self\n\t\t\t\t.client\n\t\t\t\t.post(provider.code_uri())\n\t\t\t\t.header(\"Accept\", \"application/json\")\n\t\t\t\t.body(format!(\n\t\t\t\t\t\"client_id={}&scope={}\",\n\t\t\t\t\tprovider.client_id(),\n\t\t\t\t\tprovider.get_default_scopes(),\n\t\t\t\t))\n\t\t\t\t.send()\n\t\t\t\t.await?;\n\n\t\t\tif !init_code.status().is_success() {\n\t\t\t\treturn Err(StatusError::from_res(init_code).await?.into());\n\t\t\t}\n\n\t\t\tlet init_code_json = init_code.json::<DeviceCodeResponse>().await?;\n\t\t\tlet expires_at = Utc::now() + chrono::Duration::seconds(init_code_json.expires_in);\n\n\t\t\tmatch &init_code_json.message {\n\t\t\t\tSome(m) => self.log.result(m),\n\t\t\t\tNone => self.log.result(format!(\n\t\t\t\t\t\"To grant access to the server, please log into {} and use code {}\",\n\t\t\t\t\tinit_code_json.verification_uri, init_code_json.user_code\n\t\t\t\t)),\n\t\t\t};\n\n\t\t\tlet body = format!(\n\t\t\t\t\t\"client_id={}&grant_type=urn:ietf:params:oauth:grant-type:device_code&device_code={}\",\n\t\t\t\t\tprovider.client_id(),\n\t\t\t\t\tinit_code_json.device_code\n\t\t\t);\n\n\t\t\tlet mut interval_s = 5;\n\t\t\twhile Utc::now() < expires_at {\n\t\t\t\tsleep(std::time::Duration::from_secs(interval_s)).await;\n\n\t\t\t\tmatch self.do_grant(provider, body.clone()).await {\n\t\t\t\t\tOk(creds) => return Ok(creds),\n\t\t\t\t\tErr(AnyError::OAuthError(e)) if e.error == \"slow_down\" => {\n\t\t\t\t\t\tinterval_s += 5; // https://www.rfc-editor.org/rfc/rfc8628#section-3.5\n\t\t\t\t\t\ttrace!(self.log, \"refresh poll failed, slowing down\");\n\t\t\t\t\t}\n\t\t\t\t\t// Github returns a non-standard 429 to slow down\n\t\t\t\t\tErr(AnyError::StatusError(e)) if e.status_code == 429 => {\n\t\t\t\t\t\tinterval_s += 5; // https://www.rfc-editor.org/rfc/rfc8628#section-3.5\n\t\t\t\t\t\ttrace!(self.log, \"refresh poll failed, slowing down\");\n\t\t\t\t\t}\n\t\t\t\t\tErr(e) => {\n\t\t\t\t\t\ttrace!(self.log, \"refresh poll failed, retrying: {}\", e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Maintains the stored credential by refreshing it against the service\n\t/// to ensure its stays current. Returns a future that should be polled and\n\t/// only errors if a refresh fails in a consistent way.\n\tpub async fn keep_token_alive(self) -> Result<(), AnyError> {\n\t\tlet this = self.clone();\n\t\tlet default_refresh = std::time::Duration::from_secs(60 * 60);\n\t\tlet min_refresh = std::time::Duration::from_secs(10);\n\n\t\tlet mut credential = this.get_credential().await?;\n\t\tlet mut last_did_error = false;\n\t\tloop {\n\t\t\tlet sleep_time = if last_did_error {\n\t\t\t\tmin_refresh\n\t\t\t} else {\n\t\t\t\tmatch credential.expires_at {\n\t\t\t\t\tSome(d) => ((d - Utc::now()) * 2 / 3).to_std().unwrap_or(min_refresh),\n\t\t\t\t\tNone => default_refresh,\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// to_std errors on negative duration, fall back to a 60s refresh\n\t\t\ttokio::time::sleep(sleep_time.max(min_refresh)).await;\n\n\t\t\tmatch this.do_refresh_token(&credential).await {\n\t\t\t\t// 4xx error means this token is probably not good any mode\n\t\t\t\tErr(AnyError::StatusError(e)) if e.status_code >= 400 && e.status_code < 500 => {\n\t\t\t\t\terror!(this.log, \"failed to keep token alive: {:?}\", e);\n\t\t\t\t\treturn Err(e.into());\n\t\t\t\t}\n\t\t\t\tErr(AnyError::RefreshTokenNotAvailableError(_)) => {\n\t\t\t\t\treturn Ok(());\n\t\t\t\t}\n\t\t\t\tErr(e) => {\n\t\t\t\t\twarning!(this.log, \"error refreshing token: {:?}\", e);\n\t\t\t\t\tlast_did_error = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tOk(c) => {\n\t\t\t\t\ttrace!(this.log, \"token was successfully refreshed in keepalive\");\n\t\t\t\t\tlast_did_error = false;\n\t\t\t\t\tif let Some(c) = c {\n\t\t\t\t\t\tthis.store_credentials(c.clone());\n\t\t\t\t\t\tcredential = c;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[async_trait]\nimpl AuthorizationProvider for Auth {\n\tasync fn get_authorization(&self) -> Result<Authorization, HttpError> {\n\t\tself.get_tunnel_authentication()\n\t\t\t.await\n\t\t\t.map_err(|e| HttpError::AuthorizationError(e.to_string()))\n\t}\n}\n\nlazy_static::lazy_static! {\n\tstatic ref HOSTNAME: Vec<u8> = gethostname().to_string_lossy().bytes().collect();\n}\n\n#[cfg(feature = \"vscode-encrypt\")]\nfn encrypt(value: &str) -> String {\n\tvscode_encrypt::encrypt(&HOSTNAME, value.as_bytes()).expect(\"expected to encrypt\")\n}\n\n#[cfg(feature = \"vscode-encrypt\")]\nfn decrypt(value: &str) -> Option<String> {\n\tlet b = vscode_encrypt::decrypt(&HOSTNAME, value).ok()?;\n\tString::from_utf8(b).ok()\n}\n\n#[cfg(not(feature = \"vscode-encrypt\"))]\nfn encrypt(value: &str) -> String {\n\tvalue.to_owned()\n}\n\n#[cfg(not(feature = \"vscode-encrypt\"))]\nfn decrypt(value: &str) -> Option<String> {\n\tSome(value.to_owned())\n}\n"
  },
  {
    "path": "cli/src/bin/code/legacy_args.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::collections::HashMap;\n\nuse cli::commands::args::{\n\tCliCore, Commands, DesktopCodeOptions, ExtensionArgs, ExtensionSubcommand,\n\tInstallExtensionArgs, ListExtensionArgs, UninstallExtensionArgs,\n};\n\n/// Tries to parse the argv using the legacy CLI interface, looking for its\n/// flags and generating a CLI with subcommands if those don't exist.\npub fn try_parse_legacy(\n\titer: impl IntoIterator<Item = impl Into<std::ffi::OsString>>,\n) -> Option<CliCore> {\n\tlet raw = clap_lex::RawArgs::new(iter);\n\tlet mut cursor = raw.cursor();\n\traw.next(&mut cursor); // Skip the bin\n\n\t// First make a hashmap of all flags and capture positional arguments.\n\tlet mut args: HashMap<String, Vec<String>> = HashMap::new();\n\tlet mut last_arg = None;\n\twhile let Some(arg) = raw.next(&mut cursor) {\n\t\tif let Some((long, value)) = arg.to_long() {\n\t\t\tif let Ok(long) = long {\n\t\t\t\tlast_arg = Some(long.to_string());\n\t\t\t\tmatch args.get_mut(long) {\n\t\t\t\t\tSome(prev) => {\n\t\t\t\t\t\tif let Some(v) = value {\n\t\t\t\t\t\t\tprev.push(v.to_string_lossy().to_string());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tNone => {\n\t\t\t\t\t\tif let Some(v) = value {\n\t\t\t\t\t\t\targs.insert(long.to_string(), vec![v.to_string_lossy().to_string()]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.insert(long.to_string(), vec![]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if let Ok(value) = arg.to_value() {\n\t\t\tif value == \"tunnel\" {\n\t\t\t\treturn None;\n\t\t\t}\n\t\t\tif let Some(last_arg) = &last_arg {\n\t\t\t\targs.get_mut(last_arg)\n\t\t\t\t\t.expect(\"expected to have last arg\")\n\t\t\t\t\t.push(value.to_string());\n\t\t\t}\n\t\t}\n\t}\n\n\tlet get_first_arg_value =\n\t\t|key: &str| args.get(key).and_then(|v| v.first()).map(|s| s.to_string());\n\tlet desktop_code_options = DesktopCodeOptions {\n\t\textensions_dir: get_first_arg_value(\"extensions-dir\"),\n\t\tuser_data_dir: get_first_arg_value(\"user-data-dir\"),\n\t\tuse_version: None,\n\t};\n\n\t// Now translate them to subcommands.\n\t// --list-extensions        -> ext list\n\t// --update-extensions      -> update\n\t// --install-extension=id   -> ext install <id>\n\t// --uninstall-extension=id -> ext uninstall <id>\n\t// --status                 -> status\n\n\tif args.contains_key(\"list-extensions\") {\n\t\tSome(CliCore {\n\t\t\tsubcommand: Some(Commands::Extension(ExtensionArgs {\n\t\t\t\tsubcommand: ExtensionSubcommand::List(ListExtensionArgs {\n\t\t\t\t\tcategory: get_first_arg_value(\"category\"),\n\t\t\t\t\tshow_versions: args.contains_key(\"show-versions\"),\n\t\t\t\t}),\n\t\t\t\tdesktop_code_options,\n\t\t\t})),\n\t\t\t..Default::default()\n\t\t})\n\t} else if let Some(exts) = args.remove(\"install-extension\") {\n\t\tSome(CliCore {\n\t\t\tsubcommand: Some(Commands::Extension(ExtensionArgs {\n\t\t\t\tsubcommand: ExtensionSubcommand::Install(InstallExtensionArgs {\n\t\t\t\t\tid_or_path: exts,\n\t\t\t\t\tpre_release: args.contains_key(\"pre-release\"),\n\t\t\t\t\tdonot_include_pack_and_dependencies: args\n\t\t\t\t\t\t.contains_key(\"do-not-include-pack-dependencies\"),\n\t\t\t\t\tforce: args.contains_key(\"force\"),\n\t\t\t\t}),\n\t\t\t\tdesktop_code_options,\n\t\t\t})),\n\t\t\t..Default::default()\n\t\t})\n\t} else if let Some(_exts) = args.remove(\"update-extensions\") {\n\t\tSome(CliCore {\n\t\t\tsubcommand: Some(Commands::Extension(ExtensionArgs {\n\t\t\t\tsubcommand: ExtensionSubcommand::Update,\n\t\t\t\tdesktop_code_options,\n\t\t\t})),\n\t\t\t..Default::default()\n\t\t})\n\t} else if let Some(exts) = args.remove(\"uninstall-extension\") {\n\t\tSome(CliCore {\n\t\t\tsubcommand: Some(Commands::Extension(ExtensionArgs {\n\t\t\t\tsubcommand: ExtensionSubcommand::Uninstall(UninstallExtensionArgs { id: exts }),\n\t\t\t\tdesktop_code_options,\n\t\t\t})),\n\t\t\t..Default::default()\n\t\t})\n\t} else if args.contains_key(\"status\") {\n\t\tSome(CliCore {\n\t\t\tsubcommand: Some(Commands::Status),\n\t\t\t..Default::default()\n\t\t})\n\t} else {\n\t\tNone\n\t}\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\n\t#[test]\n\tfn test_parses_list_extensions() {\n\t\tlet args = vec![\n\t\t\t\"code\",\n\t\t\t\"--list-extensions\",\n\t\t\t\"--category\",\n\t\t\t\"themes\",\n\t\t\t\"--show-versions\",\n\t\t];\n\t\tlet cli = try_parse_legacy(args).unwrap();\n\n\t\tif let Some(Commands::Extension(extension_args)) = cli.subcommand {\n\t\t\tif let ExtensionSubcommand::List(list_args) = extension_args.subcommand {\n\t\t\t\tassert_eq!(list_args.category, Some(\"themes\".to_string()));\n\t\t\t\tassert!(list_args.show_versions);\n\t\t\t} else {\n\t\t\t\tpanic!(\n\t\t\t\t\t\"Expected list subcommand, got {:?}\",\n\t\t\t\t\textension_args.subcommand\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tpanic!(\"Expected extension subcommand, got {:?}\", cli.subcommand);\n\t\t}\n\t}\n\n\t#[test]\n\tfn test_parses_install_extension() {\n\t\tlet args = vec![\n\t\t\t\"code\",\n\t\t\t\"--install-extension\",\n\t\t\t\"connor4312.codesong\",\n\t\t\t\"connor4312.hello-world\",\n\t\t\t\"--pre-release\",\n\t\t\t\"--force\",\n\t\t];\n\t\tlet cli = try_parse_legacy(args).unwrap();\n\n\t\tif let Some(Commands::Extension(extension_args)) = cli.subcommand {\n\t\t\tif let ExtensionSubcommand::Install(install_args) = extension_args.subcommand {\n\t\t\t\tassert_eq!(\n\t\t\t\t\tinstall_args.id_or_path,\n\t\t\t\t\tvec![\"connor4312.codesong\", \"connor4312.hello-world\"]\n\t\t\t\t);\n\t\t\t\tassert!(install_args.pre_release);\n\t\t\t\tassert!(install_args.force);\n\t\t\t} else {\n\t\t\t\tpanic!(\n\t\t\t\t\t\"Expected install subcommand, got {:?}\",\n\t\t\t\t\textension_args.subcommand\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tpanic!(\"Expected extension subcommand, got {:?}\", cli.subcommand);\n\t\t}\n\t}\n\n\t#[test]\n\tfn test_parses_uninstall_extension() {\n\t\tlet args = vec![\"code\", \"--uninstall-extension\", \"connor4312.codesong\"];\n\t\tlet cli = try_parse_legacy(args).unwrap();\n\n\t\tif let Some(Commands::Extension(extension_args)) = cli.subcommand {\n\t\t\tif let ExtensionSubcommand::Uninstall(uninstall_args) = extension_args.subcommand {\n\t\t\t\tassert_eq!(uninstall_args.id, vec![\"connor4312.codesong\"]);\n\t\t\t} else {\n\t\t\t\tpanic!(\n\t\t\t\t\t\"Expected uninstall subcommand, got {:?}\",\n\t\t\t\t\textension_args.subcommand\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tpanic!(\"Expected extension subcommand, got {:?}\", cli.subcommand);\n\t\t}\n\t}\n\n\t#[test]\n\tfn test_parses_user_data_dir_and_extensions_dir() {\n\t\tlet args = vec![\n\t\t\t\"code\",\n\t\t\t\"--uninstall-extension\",\n\t\t\t\"connor4312.codesong\",\n\t\t\t\"--user-data-dir\",\n\t\t\t\"foo\",\n\t\t\t\"--extensions-dir\",\n\t\t\t\"bar\",\n\t\t];\n\t\tlet cli = try_parse_legacy(args).unwrap();\n\n\t\tif let Some(Commands::Extension(extension_args)) = cli.subcommand {\n\t\t\tassert_eq!(\n\t\t\t\textension_args.desktop_code_options.user_data_dir,\n\t\t\t\tSome(\"foo\".to_string())\n\t\t\t);\n\t\t\tassert_eq!(\n\t\t\t\textension_args.desktop_code_options.extensions_dir,\n\t\t\t\tSome(\"bar\".to_string())\n\t\t\t);\n\t\t\tif let ExtensionSubcommand::Uninstall(uninstall_args) = extension_args.subcommand {\n\t\t\t\tassert_eq!(uninstall_args.id, vec![\"connor4312.codesong\"]);\n\t\t\t} else {\n\t\t\t\tpanic!(\n\t\t\t\t\t\"Expected uninstall subcommand, got {:?}\",\n\t\t\t\t\textension_args.subcommand\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tpanic!(\"Expected extension subcommand, got {:?}\", cli.subcommand);\n\t\t}\n\t}\n\n\t#[test]\n\tfn test_status() {\n\t\tlet args = vec![\"code\", \"--status\"];\n\t\tlet cli = try_parse_legacy(args).unwrap();\n\n\t\tif let Some(Commands::Status) = cli.subcommand {\n\t\t\t// no-op\n\t\t} else {\n\t\t\tpanic!(\"Expected extension subcommand, got {:?}\", cli.subcommand);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/bin/code/main.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nmod legacy_args;\n\nuse std::process::Command;\n\nuse clap::Parser;\nuse cli::{\n\tcommands::{args, serve_web, tunnels, update, version, CommandContext},\n\tconstants::get_default_user_agent,\n\tdesktop, log,\n\tstate::LauncherPaths,\n\tutil::{\n\t\terrors::{wrap, AnyError},\n\t\tis_integrated_cli,\n\t\tprereqs::PreReqChecker,\n\t},\n};\nuse legacy_args::try_parse_legacy;\nuse opentelemetry::sdk::trace::TracerProvider as SdkTracerProvider;\nuse opentelemetry::trace::TracerProvider;\n\n#[tokio::main]\nasync fn main() -> Result<(), std::convert::Infallible> {\n\tlet raw_args = std::env::args_os().collect::<Vec<_>>();\n\tlet parsed = try_parse_legacy(&raw_args)\n\t\t.map(|core| args::AnyCli::Integrated(args::IntegratedCli { core }))\n\t\t.unwrap_or_else(|| {\n\t\t\tif let Ok(true) = is_integrated_cli() {\n\t\t\t\targs::AnyCli::Integrated(args::IntegratedCli::parse_from(&raw_args))\n\t\t\t} else {\n\t\t\t\targs::AnyCli::Standalone(args::StandaloneCli::parse_from(&raw_args))\n\t\t\t}\n\t\t});\n\n\tlet core = parsed.core();\n\tlet context_paths = LauncherPaths::migrate(core.global_options.cli_data_dir.clone()).unwrap();\n\tlet context_args = core.clone();\n\n\t// gets a command context without installing the global logger\n\tlet context_no_logger = || CommandContext {\n\t\thttp: reqwest::ClientBuilder::new()\n\t\t\t.user_agent(get_default_user_agent())\n\t\t\t.build()\n\t\t\t.unwrap(),\n\t\tpaths: context_paths,\n\t\tlog: make_logger(&context_args),\n\t\targs: context_args,\n\t};\n\n\t// gets a command context with the global logger installer. Usually what most commands want.\n\tmacro_rules! context {\n\t\t() => {{\n\t\t\tlet context = context_no_logger();\n\t\t\tlog::install_global_logger(context.log.clone());\n\t\t\tcontext\n\t\t}};\n\t}\n\n\tlet result = match parsed {\n\t\targs::AnyCli::Standalone(args::StandaloneCli {\n\t\t\tsubcommand: Some(cmd),\n\t\t\t..\n\t\t}) => match cmd {\n\t\t\targs::StandaloneCommands::Update(args) => update::update(context!(), args).await,\n\t\t},\n\t\targs::AnyCli::Standalone(args::StandaloneCli { core: c, .. })\n\t\t| args::AnyCli::Integrated(args::IntegratedCli { core: c, .. }) => match c.subcommand {\n\t\t\tNone => {\n\t\t\t\tlet context = context!();\n\t\t\t\tlet ca = context.args.get_base_code_args();\n\t\t\t\tstart_code(context, ca).await\n\t\t\t}\n\n\t\t\tSome(args::Commands::Extension(extension_args)) => {\n\t\t\t\tlet context = context!();\n\t\t\t\tlet mut ca = context.args.get_base_code_args();\n\t\t\t\textension_args.add_code_args(&mut ca);\n\t\t\t\tstart_code(context, ca).await\n\t\t\t}\n\n\t\t\tSome(args::Commands::Status) => {\n\t\t\t\tlet context = context!();\n\t\t\t\tlet mut ca = context.args.get_base_code_args();\n\t\t\t\tca.push(\"--status\".to_string());\n\t\t\t\tstart_code(context, ca).await\n\t\t\t}\n\n\t\t\tSome(args::Commands::Version(version_args)) => match version_args.subcommand {\n\t\t\t\targs::VersionSubcommand::Use(use_version_args) => {\n\t\t\t\t\tversion::switch_to(context!(), use_version_args).await\n\t\t\t\t}\n\t\t\t\targs::VersionSubcommand::Show => version::show(context!()).await,\n\t\t\t},\n\n\t\t\tSome(args::Commands::CommandShell(cs_args)) => {\n\t\t\t\ttunnels::command_shell(context!(), cs_args).await\n\t\t\t}\n\n\t\t\tSome(args::Commands::ServeWeb(sw_args)) => {\n\t\t\t\tserve_web::serve_web(context!(), sw_args).await\n\t\t\t}\n\n\t\t\tSome(args::Commands::Tunnel(mut tunnel_args)) => match tunnel_args.subcommand.take() {\n\t\t\t\tSome(args::TunnelSubcommand::Prune) => tunnels::prune(context!()).await,\n\t\t\t\tSome(args::TunnelSubcommand::Unregister) => tunnels::unregister(context!()).await,\n\t\t\t\tSome(args::TunnelSubcommand::Kill) => tunnels::kill(context!()).await,\n\t\t\t\tSome(args::TunnelSubcommand::Restart) => tunnels::restart(context!()).await,\n\t\t\t\tSome(args::TunnelSubcommand::Status) => tunnels::status(context!()).await,\n\t\t\t\tSome(args::TunnelSubcommand::Rename(rename_args)) => {\n\t\t\t\t\ttunnels::rename(context!(), rename_args).await\n\t\t\t\t}\n\t\t\t\tSome(args::TunnelSubcommand::User(user_command)) => {\n\t\t\t\t\ttunnels::user(context!(), user_command).await\n\t\t\t\t}\n\t\t\t\tSome(args::TunnelSubcommand::Service(service_args)) => {\n\t\t\t\t\ttunnels::service(context_no_logger(), tunnel_args, service_args).await\n\t\t\t\t}\n\t\t\t\tSome(args::TunnelSubcommand::ForwardInternal(forward_args)) => {\n\t\t\t\t\ttunnels::forward(context_no_logger(), forward_args).await\n\t\t\t\t}\n\t\t\t\tNone => tunnels::serve(context_no_logger(), tunnel_args.serve_args).await,\n\t\t\t},\n\t\t},\n\t};\n\n\tmatch result {\n\t\tErr(e) => print_and_exit(e),\n\t\tOk(code) => std::process::exit(code),\n\t}\n}\n\nfn make_logger(core: &args::CliCore) -> log::Logger {\n\tlet log_level = if core.global_options.verbose {\n\t\tlog::Level::Trace\n\t} else {\n\t\tcore.global_options.log.unwrap_or(log::Level::Info)\n\t};\n\n\tlet tracer = SdkTracerProvider::builder().build().tracer(\"codecli\");\n\tlet mut log = log::Logger::new(tracer, log_level);\n\tif let Some(f) = &core.global_options.log_to_file {\n\t\tlog = log\n\t\t\t.with_sink(log::FileLogSink::new(log_level, f).expect(\"expected to make file logger\"))\n\t}\n\n\tlog\n}\n\nfn print_and_exit<E>(err: E) -> !\nwhere\n\tE: std::fmt::Display,\n{\n\tlog::emit(log::Level::Error, \"\", &format!(\"{err}\"));\n\tstd::process::exit(1);\n}\n\nasync fn start_code(context: CommandContext, args: Vec<String>) -> Result<i32, AnyError> {\n\t// todo: once the integrated CLI takes the place of the Node.js CLI, this should\n\t// redirect to the current installation without using the CodeVersionManager.\n\n\tlet platform = PreReqChecker::new().verify().await?;\n\tlet version_manager =\n\t\tdesktop::CodeVersionManager::new(context.log.clone(), &context.paths, platform);\n\tlet version = match &context.args.editor_options.code_options.use_version {\n\t\tSome(v) => desktop::RequestedVersion::try_from(v.as_str())?,\n\t\tNone => version_manager.get_preferred_version(),\n\t};\n\n\tlet binary = match version_manager.try_get_entrypoint(&version).await {\n\t\tSome(ep) => ep,\n\t\tNone => {\n\t\t\tdesktop::prompt_to_install(&version);\n\t\t\treturn Ok(1);\n\t\t}\n\t};\n\n\tlet code = Command::new(&binary)\n\t\t.args(args)\n\t\t.status()\n\t\t.map(|s| s.code().unwrap_or(1))\n\t\t.map_err(|e| wrap(e, format!(\"error running editor from {}\", binary.display())))?;\n\n\tOk(code)\n}\n"
  },
  {
    "path": "cli/src/commands/args.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{fmt, path::PathBuf};\n\nuse crate::{constants, log, options, tunnels::code_server::CodeServerArgs};\nuse clap::{Args, Parser, Subcommand, ValueEnum};\nuse const_format::concatcp;\n\nconst CLI_NAME: &str = concatcp!(constants::PRODUCT_NAME_LONG, \" CLI\");\nconst HELP_COMMANDS: &str = concatcp!(\n\t\"Usage: \",\n\tconstants::APPLICATION_NAME,\n\t\" [options][paths...]\n\nTo read output from another program, append '-' (e.g. 'echo Hello World | {name} -')\"\n);\n\nconst STANDALONE_TEMPLATE: &str = concatcp!(\n\tCLI_NAME,\n\t\" Standalone - {version}\n\n\",\n\tHELP_COMMANDS,\n\t\"\nRunning editor commands requires installing \",\n\tconstants::QUALITYLESS_PRODUCT_NAME,\n\t\", and may differ slightly.\n\n{all-args}\"\n);\nconst INTEGRATED_TEMPLATE: &str = concatcp!(\n\tCLI_NAME,\n\t\" - {version}\n\n\",\n\tHELP_COMMANDS,\n\t\"\n\n{all-args}\"\n);\n\nconst COMMIT_IN_VERSION: &str = match constants::VSCODE_CLI_COMMIT {\n\tSome(c) => c,\n\tNone => \"unknown\",\n};\nconst NUMBER_IN_VERSION: &str = match constants::VSCODE_CLI_VERSION {\n\tSome(c) => c,\n\tNone => \"dev\",\n};\nconst VERSION: &str = concatcp!(NUMBER_IN_VERSION, \" (commit \", COMMIT_IN_VERSION, \")\");\n\n#[derive(Parser, Debug, Default)]\n#[clap(\n   help_template = INTEGRATED_TEMPLATE,\n   long_about = None,\n\t name = constants::APPLICATION_NAME,\n   version = VERSION,\n )]\npub struct IntegratedCli {\n\t#[clap(flatten)]\n\tpub core: CliCore,\n}\n\n/// Common CLI shared between integrated and standalone interfaces.\n#[derive(Args, Debug, Default, Clone)]\npub struct CliCore {\n\t/// One or more files, folders, or URIs to open.\n\t#[clap(name = \"paths\")]\n\tpub open_paths: Vec<String>,\n\n\t#[clap(flatten, next_help_heading = Some(\"EDITOR OPTIONS\"))]\n\tpub editor_options: EditorOptions,\n\n\t#[clap(flatten, next_help_heading = Some(\"EDITOR TROUBLESHOOTING\"))]\n\tpub troubleshooting: EditorTroubleshooting,\n\n\t#[clap(flatten, next_help_heading = Some(\"GLOBAL OPTIONS\"))]\n\tpub global_options: GlobalOptions,\n\n\t#[clap(subcommand)]\n\tpub subcommand: Option<Commands>,\n}\n\n#[derive(Parser, Debug, Default)]\n#[clap(\n   help_template = STANDALONE_TEMPLATE,\n   long_about = None,\n   version = VERSION,\n\t name = constants::APPLICATION_NAME,\n )]\npub struct StandaloneCli {\n\t#[clap(flatten)]\n\tpub core: CliCore,\n\n\t#[clap(subcommand)]\n\tpub subcommand: Option<StandaloneCommands>,\n}\n\npub enum AnyCli {\n\tIntegrated(IntegratedCli),\n\tStandalone(StandaloneCli),\n}\n\nimpl AnyCli {\n\tpub fn core(&self) -> &CliCore {\n\t\tmatch self {\n\t\t\tAnyCli::Integrated(cli) => &cli.core,\n\t\t\tAnyCli::Standalone(cli) => &cli.core,\n\t\t}\n\t}\n}\n\nimpl CliCore {\n\tpub fn get_base_code_args(&self) -> Vec<String> {\n\t\tlet mut args = self.open_paths.clone();\n\t\tself.editor_options.add_code_args(&mut args);\n\t\tself.troubleshooting.add_code_args(&mut args);\n\t\tself.global_options.add_code_args(&mut args);\n\t\targs\n\t}\n}\n\nimpl<'a> From<&'a CliCore> for CodeServerArgs {\n\tfn from(cli: &'a CliCore) -> Self {\n\t\tlet mut args = CodeServerArgs {\n\t\t\tlog: cli.global_options.log,\n\t\t\taccept_server_license_terms: true,\n\t\t\t..Default::default()\n\t\t};\n\n\t\targs.log = cli.global_options.log;\n\t\targs.accept_server_license_terms = true;\n\n\t\tif cli.global_options.verbose {\n\t\t\targs.verbose = true;\n\t\t}\n\n\t\tif cli.global_options.disable_telemetry {\n\t\t\targs.telemetry_level = Some(options::TelemetryLevel::Off);\n\t\t} else if cli.global_options.telemetry_level.is_some() {\n\t\t\targs.telemetry_level = cli.global_options.telemetry_level;\n\t\t}\n\n\t\targs\n\t}\n}\n\n#[derive(Subcommand, Debug, Clone)]\npub enum StandaloneCommands {\n\t/// Updates the CLI.\n\tUpdate(StandaloneUpdateArgs),\n}\n\n#[derive(Args, Debug, Clone)]\npub struct StandaloneUpdateArgs {\n\t/// Only check for updates, without actually updating the CLI.\n\t#[clap(long)]\n\tpub check: bool,\n}\n\n#[derive(Subcommand, Debug, Clone)]\n\npub enum Commands {\n\t/// Create a tunnel that's accessible on vscode.dev from anywhere.\n\t/// Run `code tunnel --help` for more usage info.\n\tTunnel(TunnelArgs),\n\n\t/// Manage editor extensions.\n\t#[clap(name = \"ext\")]\n\tExtension(ExtensionArgs),\n\n\t/// Print process usage and diagnostics information.\n\tStatus,\n\n\t/// Changes the version of the editor you're using.\n\tVersion(VersionArgs),\n\n\t/// Runs a local web version of VS Code.\n\t#[clap(about = concatcp!(\"Runs a local web version of \", constants::PRODUCT_NAME_LONG))]\n\tServeWeb(ServeWebArgs),\n\n\t/// Runs the control server on process stdin/stdout\n\t#[clap(hide = true)]\n\tCommandShell(CommandShellArgs),\n}\n\n#[derive(Args, Debug, Clone)]\npub struct ServeWebArgs {\n\t/// Host to listen on, defaults to 'localhost'\n\t#[clap(long)]\n\tpub host: Option<String>,\n\t// The path to a socket file for the server to listen to.\n\t#[clap(long)]\n\tpub socket_path: Option<String>,\n\t/// Port to listen on. If 0 is passed a random free port is picked.\n\t#[clap(long, default_value_t = 8000)]\n\tpub port: u16,\n\t/// A secret that must be included with all requests.\n\t#[clap(long)]\n\tpub connection_token: Option<String>,\n\t/// A file containing a secret that must be included with all requests.\n\t#[clap(long)]\n\tpub connection_token_file: Option<String>,\n\t/// Run without a connection token. Only use this if the connection is secured by other means.\n\t#[clap(long)]\n\tpub without_connection_token: bool,\n\t/// If set, the user accepts the server license terms and the server will be started without a user prompt.\n\t#[clap(long)]\n\tpub accept_server_license_terms: bool,\n\t/// Specifies the path under which the web UI and the code server is provided.\n\t#[clap(long)]\n\tpub server_base_path: Option<String>,\n\t/// Specifies the directory that server data is kept in.\n\t#[clap(long)]\n\tpub server_data_dir: Option<String>,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct CommandShellArgs {\n\t#[clap(flatten)]\n\tpub server_args: BaseServerArgs,\n\n\t/// Listen on a socket instead of stdin/stdout.\n\t#[clap(long)]\n\tpub on_socket: bool,\n\t/// Listen on a host/port instead of stdin/stdout.\n\t#[clap(long, num_args = 0..=2, default_missing_value = \"0\")]\n\tpub on_port: Vec<u16>,\n\t/// Listen on a host/port instead of stdin/stdout.\n\t#[clap[long]]\n\tpub on_host: Option<String>,\n\t/// Require the given token string to be given in the handshake.\n\t#[clap(long, env = \"VSCODE_CLI_REQUIRE_TOKEN\")]\n\tpub require_token: Option<String>,\n\t/// Optional parent process id. If provided, the server will be stopped when the process of the given pid no longer exists\n\t#[clap(long, hide = true)]\n\tpub parent_process_id: Option<String>,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct ExtensionArgs {\n\t#[clap(subcommand)]\n\tpub subcommand: ExtensionSubcommand,\n\n\t#[clap(flatten)]\n\tpub desktop_code_options: DesktopCodeOptions,\n}\n\nimpl ExtensionArgs {\n\tpub fn add_code_args(&self, target: &mut Vec<String>) {\n\t\tself.desktop_code_options.add_code_args(target);\n\t\tself.subcommand.add_code_args(target);\n\t}\n}\n\n#[derive(Subcommand, Debug, Clone)]\npub enum ExtensionSubcommand {\n\t/// List installed extensions.\n\tList(ListExtensionArgs),\n\t/// Install an extension.\n\tInstall(InstallExtensionArgs),\n\t/// Uninstall an extension.\n\tUninstall(UninstallExtensionArgs),\n\t/// Update the installed extensions.\n\tUpdate,\n}\n\nimpl ExtensionSubcommand {\n\tpub fn add_code_args(&self, target: &mut Vec<String>) {\n\t\tmatch self {\n\t\t\tExtensionSubcommand::List(args) => {\n\t\t\t\ttarget.push(\"--list-extensions\".to_string());\n\t\t\t\tif args.show_versions {\n\t\t\t\t\ttarget.push(\"--show-versions\".to_string());\n\t\t\t\t}\n\t\t\t\tif let Some(category) = &args.category {\n\t\t\t\t\ttarget.push(format!(\"--category={category}\"));\n\t\t\t\t}\n\t\t\t}\n\t\t\tExtensionSubcommand::Install(args) => {\n\t\t\t\tfor id in args.id_or_path.iter() {\n\t\t\t\t\ttarget.push(format!(\"--install-extension={id}\"));\n\t\t\t\t}\n\t\t\t\tif args.pre_release {\n\t\t\t\t\ttarget.push(\"--pre-release\".to_string());\n\t\t\t\t}\n\t\t\t\tif args.donot_include_pack_and_dependencies {\n\t\t\t\t\ttarget.push(\"do-not-include-pack-dependencies\".to_string());\n\t\t\t\t}\n\t\t\t\tif args.force {\n\t\t\t\t\ttarget.push(\"--force\".to_string());\n\t\t\t\t}\n\t\t\t}\n\t\t\tExtensionSubcommand::Uninstall(args) => {\n\t\t\t\tfor id in args.id.iter() {\n\t\t\t\t\ttarget.push(format!(\"--uninstall-extension={id}\"));\n\t\t\t\t}\n\t\t\t}\n\t\t\tExtensionSubcommand::Update => {\n\t\t\t\ttarget.push(\"--update-extensions\".to_string());\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[derive(Args, Debug, Clone)]\npub struct ListExtensionArgs {\n\t/// Filters installed extensions by provided category, when using --list-extensions.\n\t#[clap(long, value_name = \"category\")]\n\tpub category: Option<String>,\n\n\t/// Show versions of installed extensions, when using --list-extensions.\n\t#[clap(long)]\n\tpub show_versions: bool,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct InstallExtensionArgs {\n\t/// Either an extension id or a path to a VSIX. The identifier of an\n\t/// extension is '${publisher}.${name}'. Use '--force' argument to update\n\t/// to latest version. To install a specific version provide '@${version}'.\n\t/// For example: 'vscode.csharp@1.2.3'.\n\t#[clap(name = \"ext-id | id\")]\n\tpub id_or_path: Vec<String>,\n\n\t/// Installs the pre-release version of the extension\n\t#[clap(long)]\n\tpub pre_release: bool,\n\n\t/// Don't include installing pack and dependencies of the extension\n\t#[clap(long)]\n\tpub donot_include_pack_and_dependencies: bool,\n\n\t/// Update to the latest version of the extension if it's already installed.\n\t#[clap(long)]\n\tpub force: bool,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct UninstallExtensionArgs {\n\t/// One or more extension identifiers to uninstall. The identifier of an\n\t/// extension is '${publisher}.${name}'. Use '--force' argument to update\n\t/// to latest version.\n\t#[clap(name = \"ext-id\")]\n\tpub id: Vec<String>,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct VersionArgs {\n\t#[clap(subcommand)]\n\tpub subcommand: VersionSubcommand,\n}\n\n#[derive(Subcommand, Debug, Clone)]\npub enum VersionSubcommand {\n\t/// Switches the version of the editor in use.\n\tUse(UseVersionArgs),\n\n\t/// Shows the currently configured editor version.\n\tShow,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct UseVersionArgs {\n\t/// The version of the editor you want to use. Can be \"stable\", \"insiders\",\n\t/// or an absolute path to an existing install.\n\t#[clap(value_name = \"stable | insiders | x.y.z | path\")]\n\tpub name: String,\n\n\t/// The directory where the version can be found.\n\t#[clap(long, value_name = \"path\")]\n\tpub install_dir: Option<String>,\n}\n\n#[derive(Args, Debug, Default, Clone)]\npub struct EditorOptions {\n\t/// Compare two files with each other.\n\t#[clap(short, long, value_names = &[\"file\", \"file\"])]\n\tpub diff: Vec<String>,\n\n\t/// Add folder(s) to the last active window.\n\t#[clap(short, long, value_name = \"folder\")]\n\tpub add: Option<String>,\n\n\t/// Open a file at the path on the specified line and character position.\n\t#[clap(short, long, value_name = \"file:line[:character]\")]\n\tpub goto: Option<String>,\n\n\t/// Force to open a new window.\n\t#[clap(short, long)]\n\tpub new_window: bool,\n\n\t/// Force to open a file or folder in an\n\t#[clap(short, long)]\n\tpub reuse_window: bool,\n\n\t/// Wait for the files to be closed before returning.\n\t#[clap(short, long)]\n\tpub wait: bool,\n\n\t/// The locale to use (e.g. en-US or zh-TW).\n\t#[clap(long, value_name = \"locale\")]\n\tpub locale: Option<String>,\n\n\t/// Enables proposed API features for extensions. Can receive one or\n\t/// more extension IDs to enable individually.\n\t#[clap(long, value_name = \"ext-id\")]\n\tpub enable_proposed_api: Vec<String>,\n\n\t#[clap(flatten)]\n\tpub code_options: DesktopCodeOptions,\n}\n\nimpl EditorOptions {\n\tpub fn add_code_args(&self, target: &mut Vec<String>) {\n\t\tif !self.diff.is_empty() {\n\t\t\ttarget.push(\"--diff\".to_string());\n\t\t\tfor file in self.diff.iter() {\n\t\t\t\ttarget.push(file.clone());\n\t\t\t}\n\t\t}\n\t\tif let Some(add) = &self.add {\n\t\t\ttarget.push(\"--add\".to_string());\n\t\t\ttarget.push(add.clone());\n\t\t}\n\t\tif let Some(goto) = &self.goto {\n\t\t\ttarget.push(\"--goto\".to_string());\n\t\t\ttarget.push(goto.clone());\n\t\t}\n\t\tif self.new_window {\n\t\t\ttarget.push(\"--new-window\".to_string());\n\t\t}\n\t\tif self.reuse_window {\n\t\t\ttarget.push(\"--reuse-window\".to_string());\n\t\t}\n\t\tif self.wait {\n\t\t\ttarget.push(\"--wait\".to_string());\n\t\t}\n\t\tif let Some(locale) = &self.locale {\n\t\t\ttarget.push(format!(\"--locale={locale}\"));\n\t\t}\n\t\tif !self.enable_proposed_api.is_empty() {\n\t\t\tfor id in self.enable_proposed_api.iter() {\n\t\t\t\ttarget.push(format!(\"--enable-proposed-api={id}\"));\n\t\t\t}\n\t\t}\n\t\tself.code_options.add_code_args(target);\n\t}\n}\n\n/// Arguments applicable whenever the desktop editor is launched\n#[derive(Args, Debug, Default, Clone)]\npub struct DesktopCodeOptions {\n\t/// Set the root path for extensions.\n\t#[clap(long, value_name = \"dir\")]\n\tpub extensions_dir: Option<String>,\n\n\t/// Specifies the directory that user data is kept in. Can be used to\n\t/// open multiple distinct instances of the editor.\n\t#[clap(long, value_name = \"dir\")]\n\tpub user_data_dir: Option<String>,\n\n\t/// Sets the editor version to use for this command. The preferred version\n\t/// can be persisted with `code version use <version>`. Can be \"stable\",\n\t/// \"insiders\", a version number, or an absolute path to an existing install.\n\t#[clap(long, value_name = \"stable | insiders | x.y.z | path\")]\n\tpub use_version: Option<String>,\n}\n\n/// Argument specifying the output format.\n#[derive(Args, Debug, Clone)]\npub struct OutputFormatOptions {\n\t/// Set the data output formats.\n\t#[clap(value_enum, long, value_name = \"format\", default_value_t = OutputFormat::Text)]\n\tpub format: OutputFormat,\n}\n\nimpl DesktopCodeOptions {\n\tpub fn add_code_args(&self, target: &mut Vec<String>) {\n\t\tif let Some(extensions_dir) = &self.extensions_dir {\n\t\t\ttarget.push(format!(\"--extensions-dir={extensions_dir}\"));\n\t\t}\n\t\tif let Some(user_data_dir) = &self.user_data_dir {\n\t\t\ttarget.push(format!(\"--user-data-dir={user_data_dir}\"));\n\t\t}\n\t}\n}\n\n#[derive(Args, Debug, Default, Clone)]\npub struct GlobalOptions {\n\t/// Directory where CLI metadata should be stored.\n\t#[clap(long, env = \"VSCODE_CLI_DATA_DIR\", global = true)]\n\tpub cli_data_dir: Option<String>,\n\n\t/// Print verbose output (implies --wait).\n\t#[clap(long, global = true)]\n\tpub verbose: bool,\n\n\t/// Log to a file in addition to stdout. Used when running as a service.\n\t#[clap(long, global = true, hide = true)]\n\tpub log_to_file: Option<PathBuf>,\n\n\t/// Log level to use.\n\t#[clap(long, value_enum, value_name = \"level\", global = true)]\n\tpub log: Option<log::Level>,\n\n\t/// Disable telemetry for the current command, even if it was previously\n\t/// accepted as part of the license prompt or specified in '--telemetry-level'\n\t#[clap(long, global = true, hide = true)]\n\tpub disable_telemetry: bool,\n\n\t/// Sets the initial telemetry level\n\t#[clap(value_enum, long, global = true, hide = true)]\n\tpub telemetry_level: Option<options::TelemetryLevel>,\n}\n\nimpl GlobalOptions {\n\tpub fn add_code_args(&self, target: &mut Vec<String>) {\n\t\tif self.verbose {\n\t\t\ttarget.push(\"--verbose\".to_string());\n\t\t}\n\t\tif let Some(log) = self.log {\n\t\t\ttarget.push(format!(\"--log={log}\"));\n\t\t}\n\t\tif self.disable_telemetry {\n\t\t\ttarget.push(\"--disable-telemetry\".to_string());\n\t\t}\n\t\tif let Some(telemetry_level) = &self.telemetry_level {\n\t\t\ttarget.push(format!(\"--telemetry-level={telemetry_level}\"));\n\t\t}\n\t}\n}\n\n#[derive(Args, Debug, Default, Clone)]\npub struct EditorTroubleshooting {\n\t/// Run CPU profiler during startup.\n\t#[clap(long)]\n\tpub prof_startup: bool,\n\n\t/// Disable all installed extensions.\n\t#[clap(long)]\n\tpub disable_extensions: bool,\n\n\t/// Disable an extension.\n\t#[clap(long, value_name = \"ext-id\")]\n\tpub disable_extension: Vec<String>,\n\n\t/// Turn sync on or off.\n\t#[clap(value_enum, long, value_name = \"on | off\")]\n\tpub sync: Option<SyncState>,\n\n\t/// Allow debugging and profiling of extensions. Check the developer tools for the connection URI.\n\t#[clap(long, value_name = \"port\")]\n\tpub inspect_extensions: Option<u16>,\n\n\t/// Allow debugging and profiling of extensions with the extension host\n\t/// being paused after start. Check the developer tools for the connection URI.\n\t#[clap(long, value_name = \"port\")]\n\tpub inspect_brk_extensions: Option<u16>,\n\n\t/// Disable GPU hardware acceleration.\n\t#[clap(long)]\n\tpub disable_gpu: bool,\n\n\t/// Shows all telemetry events which the editor collects.\n\t#[clap(long)]\n\tpub telemetry: bool,\n}\n\nimpl EditorTroubleshooting {\n\tpub fn add_code_args(&self, target: &mut Vec<String>) {\n\t\tif self.prof_startup {\n\t\t\ttarget.push(\"--prof-startup\".to_string());\n\t\t}\n\t\tif self.disable_extensions {\n\t\t\ttarget.push(\"--disable-extensions\".to_string());\n\t\t}\n\t\tfor id in self.disable_extension.iter() {\n\t\t\ttarget.push(format!(\"--disable-extension={id}\"));\n\t\t}\n\t\tif let Some(sync) = &self.sync {\n\t\t\ttarget.push(format!(\"--sync={sync}\"));\n\t\t}\n\t\tif let Some(port) = &self.inspect_extensions {\n\t\t\ttarget.push(format!(\"--inspect-extensions={port}\"));\n\t\t}\n\t\tif let Some(port) = &self.inspect_brk_extensions {\n\t\t\ttarget.push(format!(\"--inspect-brk-extensions={port}\"));\n\t\t}\n\t\tif self.disable_gpu {\n\t\t\ttarget.push(\"--disable-gpu\".to_string());\n\t\t}\n\t\tif self.telemetry {\n\t\t\ttarget.push(\"--telemetry\".to_string());\n\t\t}\n\t}\n}\n\n#[derive(ValueEnum, Clone, Copy, Debug)]\npub enum SyncState {\n\tOn,\n\tOff,\n}\n\nimpl fmt::Display for SyncState {\n\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n\t\tmatch self {\n\t\t\tSyncState::Off => write!(f, \"off\"),\n\t\t\tSyncState::On => write!(f, \"on\"),\n\t\t}\n\t}\n}\n\n#[derive(ValueEnum, Clone, Copy, Debug)]\npub enum OutputFormat {\n\tJson,\n\tText,\n}\n\n#[derive(Args, Clone, Debug, Default)]\npub struct ExistingTunnelArgs {\n\t/// Name you'd like to assign preexisting tunnel to use to connect the tunnel\n\t/// Old option, new code should just use `--name`.\n\t#[clap(long, hide = true)]\n\tpub tunnel_name: Option<String>,\n\n\t/// Token to authenticate and use preexisting tunnel\n\t#[clap(long, hide = true)]\n\tpub host_token: Option<String>,\n\n\t/// ID of preexisting tunnel to use to connect the tunnel\n\t#[clap(long, hide = true)]\n\tpub tunnel_id: Option<String>,\n\n\t/// Cluster of preexisting tunnel to use to connect the tunnel\n\t#[clap(long, hide = true)]\n\tpub cluster: Option<String>,\n}\n\n#[derive(Args, Debug, Clone, Default)]\npub struct TunnelServeArgs {\n\t#[clap(flatten)]\n\tpub server_args: BaseServerArgs,\n\n\t/// Optional details to connect to an existing tunnel\n\t#[clap(flatten, next_help_heading = Some(\"ADVANCED OPTIONS\"))]\n\tpub tunnel: ExistingTunnelArgs,\n\n\t/// Randomly name machine for port forwarding service\n\t#[clap(long)]\n\tpub random_name: bool,\n\n\t/// Prevents the machine going to sleep while this command runs.\n\t#[clap(long)]\n\tpub no_sleep: bool,\n\n\t/// Sets the machine name for port forwarding service\n\t#[clap(long)]\n\tpub name: Option<String>,\n\n\t/// Optional parent process id. If provided, the server will be stopped when the process of the given pid no longer exists\n\t#[clap(long, hide = true)]\n\tpub parent_process_id: Option<String>,\n\n\t/// If set, the user accepts the server license terms and the server will be started without a user prompt.\n\t#[clap(long)]\n\tpub accept_server_license_terms: bool,\n}\n\n#[derive(Args, Debug, Clone, Default)]\npub struct BaseServerArgs {\n\t/// Requests that extensions be preloaded and installed on connecting servers.\n\t#[clap(long)]\n\tpub install_extension: Vec<String>,\n\n\t/// Specifies the directory that server data is kept in.\n\t#[clap(long)]\n\tpub server_data_dir: Option<String>,\n\n\t/// Set the root path for extensions.\n\t#[clap(long)]\n\tpub extensions_dir: Option<String>,\n}\n\nimpl BaseServerArgs {\n\tpub fn apply_to(&self, csa: &mut CodeServerArgs) {\n\t\tcsa.install_extensions\n\t\t\t.extend_from_slice(&self.install_extension);\n\n\t\tif let Some(d) = &self.server_data_dir {\n\t\t\tcsa.server_data_dir = Some(d.clone());\n\t\t}\n\n\t\tif let Some(d) = &self.extensions_dir {\n\t\t\tcsa.extensions_dir = Some(d.clone());\n\t\t}\n\t}\n}\n\n#[derive(Args, Debug, Clone)]\npub struct TunnelArgs {\n\t#[clap(subcommand)]\n\tpub subcommand: Option<TunnelSubcommand>,\n\n\t#[clap(flatten)]\n\tpub serve_args: TunnelServeArgs,\n}\n\n#[derive(Subcommand, Debug, Clone)]\npub enum TunnelSubcommand {\n\t/// Delete all servers which are currently not running.\n\tPrune,\n\n\t/// Stops any running tunnel on the system.\n\tKill,\n\n\t/// Restarts any running tunnel on the system.\n\tRestart,\n\n\t/// Gets whether there is a tunnel running on the current machine.\n\tStatus,\n\n\t/// Rename the name of this machine associated with port forwarding service.\n\tRename(TunnelRenameArgs),\n\n\t/// Remove this machine's association with the port forwarding service.\n\tUnregister,\n\n\t#[clap(subcommand)]\n\tUser(TunnelUserSubCommands),\n\n\t/// (Preview) Manages the tunnel when installed as a system service,\n\t#[clap(subcommand)]\n\tService(TunnelServiceSubCommands),\n\n\t/// (Preview) Forwards local port using the dev tunnel\n\t#[clap(hide = true)]\n\tForwardInternal(TunnelForwardArgs),\n}\n\n#[derive(Subcommand, Debug, Clone)]\npub enum TunnelServiceSubCommands {\n\t/// Installs or re-installs the tunnel service on the machine.\n\tInstall(TunnelServiceInstallArgs),\n\n\t/// Uninstalls and stops the tunnel service.\n\tUninstall,\n\n\t/// Shows logs for the running service.\n\tLog,\n\n\t/// Internal command for running the service\n\t#[clap(hide = true)]\n\tInternalRun,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct TunnelServiceInstallArgs {\n\t/// If set, the user accepts the server license terms and the server will be started without a user prompt.\n\t#[clap(long)]\n\tpub accept_server_license_terms: bool,\n\n\t/// Sets the machine name for port forwarding service\n\t#[clap(long)]\n\tpub name: Option<String>,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct TunnelRenameArgs {\n\t/// The name you'd like to rename your machine to.\n\tpub name: String,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct TunnelForwardArgs {\n\t/// One or more ports to forward.\n\tpub ports: Vec<u16>,\n\n\t/// Login args -- used for convenience so the forwarding call is a single action.\n\t#[clap(flatten)]\n\tpub login: LoginArgs,\n}\n\n#[derive(Subcommand, Debug, Clone)]\npub enum TunnelUserSubCommands {\n\t/// Log in to port forwarding service\n\tLogin(LoginArgs),\n\n\t/// Log out of port forwarding service\n\tLogout,\n\n\t/// Show the account that's logged into port forwarding service\n\tShow,\n}\n\n#[derive(Args, Debug, Clone)]\npub struct LoginArgs {\n\t/// An access token to store for authentication.\n\t#[clap(long, requires = \"provider\", env = \"VSCODE_CLI_ACCESS_TOKEN\")]\n\tpub access_token: Option<String>,\n\n\t/// An access token to store for authentication.\n\t#[clap(long, requires = \"access_token\", env = \"VSCODE_CLI_REFRESH_TOKEN\")]\n\tpub refresh_token: Option<String>,\n\n\t/// The auth provider to use. If not provided, a prompt will be shown.\n\t#[clap(value_enum, long)]\n\tpub provider: Option<AuthProvider>,\n}\n\n#[derive(clap::ValueEnum, Debug, Clone, Copy)]\npub enum AuthProvider {\n\tMicrosoft,\n\tGithub,\n}\n"
  },
  {
    "path": "cli/src/commands/context.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse crate::{log, state::LauncherPaths};\n\nuse super::args::CliCore;\n\npub struct CommandContext {\n\tpub log: log::Logger,\n\tpub paths: LauncherPaths,\n\tpub args: CliCore,\n\tpub http: reqwest::Client,\n}\n"
  },
  {
    "path": "cli/src/commands/output.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::fmt::Display;\n\nuse std::io::{BufWriter, Write};\n\nuse super::args::OutputFormat;\n\npub struct Column {\n\tmax_width: usize,\n\theading: &'static str,\n\tdata: Vec<String>,\n}\n\nimpl Column {\n\tpub fn new(heading: &'static str) -> Self {\n\t\tColumn {\n\t\t\tmax_width: heading.len(),\n\t\t\theading,\n\t\t\tdata: vec![],\n\t\t}\n\t}\n\n\tpub fn add_row(&mut self, row: String) {\n\t\tself.max_width = std::cmp::max(self.max_width, row.len());\n\t\tself.data.push(row);\n\t}\n}\n\nimpl OutputFormat {\n\tpub fn print_table(&self, table: OutputTable) -> Result<(), std::io::Error> {\n\t\tmatch *self {\n\t\t\tOutputFormat::Json => JsonTablePrinter().print(table, &mut std::io::stdout()),\n\t\t\tOutputFormat::Text => TextTablePrinter().print(table, &mut std::io::stdout()),\n\t\t}\n\t}\n}\n\npub struct OutputTable {\n\tcols: Vec<Column>,\n}\n\nimpl OutputTable {\n\tpub fn new(cols: Vec<Column>) -> Self {\n\t\tOutputTable { cols }\n\t}\n}\n\ntrait TablePrinter {\n\tfn print(&self, table: OutputTable, out: &mut dyn std::io::Write)\n\t\t-> Result<(), std::io::Error>;\n}\n\npub struct JsonTablePrinter();\n\nimpl TablePrinter for JsonTablePrinter {\n\tfn print(\n\t\t&self,\n\t\ttable: OutputTable,\n\t\tout: &mut dyn std::io::Write,\n\t) -> Result<(), std::io::Error> {\n\t\tlet mut bw = BufWriter::new(out);\n\t\tbw.write_all(b\"[\")?;\n\n\t\tif !table.cols.is_empty() {\n\t\t\tlet data_len = table.cols[0].data.len();\n\t\t\tfor i in 0..data_len {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tbw.write_all(b\",{\")?;\n\t\t\t\t} else {\n\t\t\t\t\tbw.write_all(b\"{\")?;\n\t\t\t\t}\n\t\t\t\tfor col in &table.cols {\n\t\t\t\t\tserde_json::to_writer(&mut bw, col.heading)?;\n\t\t\t\t\tbw.write_all(b\":\")?;\n\t\t\t\t\tserde_json::to_writer(&mut bw, &col.data[i])?;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbw.write_all(b\"]\")?;\n\t\tbw.flush()\n\t}\n}\n\n/// Type that prints the output as an ASCII, markdown-style table.\npub struct TextTablePrinter();\n\nimpl TablePrinter for TextTablePrinter {\n\tfn print(\n\t\t&self,\n\t\ttable: OutputTable,\n\t\tout: &mut dyn std::io::Write,\n\t) -> Result<(), std::io::Error> {\n\t\tlet mut bw = BufWriter::new(out);\n\n\t\tlet sizes = table.cols.iter().map(|c| c.max_width).collect::<Vec<_>>();\n\n\t\t// print headers\n\t\twrite_columns(&mut bw, table.cols.iter().map(|c| c.heading), &sizes)?;\n\t\t// print --- separators\n\t\twrite_columns(\n\t\t\t&mut bw,\n\t\t\ttable.cols.iter().map(|c| \"-\".repeat(c.max_width)),\n\t\t\t&sizes,\n\t\t)?;\n\t\t// print each column\n\t\tif !table.cols.is_empty() {\n\t\t\tlet data_len = table.cols[0].data.len();\n\t\t\tfor i in 0..data_len {\n\t\t\t\twrite_columns(&mut bw, table.cols.iter().map(|c| &c.data[i]), &sizes)?;\n\t\t\t}\n\t\t}\n\n\t\tbw.flush()\n\t}\n}\n\nfn write_columns<T>(\n\tmut w: impl Write,\n\tcols: impl Iterator<Item = T>,\n\tsizes: &[usize],\n) -> Result<(), std::io::Error>\nwhere\n\tT: Display,\n{\n\tw.write_all(b\"|\")?;\n\tfor (i, col) in cols.enumerate() {\n\t\twrite!(w, \" {:width$} |\", col, width = sizes[i])?;\n\t}\n\tw.write_all(b\"\\r\\n\")\n}\n"
  },
  {
    "path": "cli/src/commands/serve_web.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::collections::HashMap;\nuse std::convert::Infallible;\nuse std::fs;\nuse std::io::{Read, Write};\nuse std::net::{IpAddr, Ipv4Addr, SocketAddr};\nuse std::path::{Path, PathBuf};\nuse std::sync::{Arc, Mutex};\nuse std::time::{Duration, Instant};\n\nuse hyper::service::{make_service_fn, service_fn};\nuse hyper::{Body, Request, Response, Server};\nuse tokio::io::{AsyncBufReadExt, BufReader};\nuse tokio::{pin, time};\n\nuse crate::async_pipe::{\n\tget_socket_name, get_socket_rw_stream, listen_socket_rw_stream, AsyncPipe,\n};\nuse crate::constants::VSCODE_CLI_QUALITY;\nuse crate::download_cache::DownloadCache;\nuse crate::log;\nuse crate::options::Quality;\nuse crate::state::{LauncherPaths, PersistedState};\nuse crate::tunnels::shutdown_signal::ShutdownRequest;\nuse crate::update_service::{\n\tunzip_downloaded_release, Platform, Release, TargetKind, UpdateService,\n};\nuse crate::util::command::new_script_command;\nuse crate::util::errors::AnyError;\nuse crate::util::http::{self, ReqwestSimpleHttp};\nuse crate::util::io::SilentCopyProgress;\nuse crate::util::sync::{new_barrier, Barrier, BarrierOpener};\nuse crate::{\n\ttunnels::legal,\n\tutil::{errors::CodeError, prereqs::PreReqChecker},\n};\n\nuse super::{args::ServeWebArgs, CommandContext};\n\n/// Length of a commit hash, for validation\nconst COMMIT_HASH_LEN: usize = 40;\n/// Number of seconds where, if there's no connections to a VS Code server,\n/// the server is shut down.\nconst SERVER_IDLE_TIMEOUT_SECS: u64 = 60 * 60;\n/// Number of seconds in which the server times out when there is a connection\n/// (should be large enough to basically never happen)\nconst SERVER_ACTIVE_TIMEOUT_SECS: u64 = SERVER_IDLE_TIMEOUT_SECS * 24 * 30 * 12;\n/// How long to cache the \"latest\" version we get from the update service.\nconst RELEASE_CHECK_INTERVAL: u64 = 60 * 60;\n\n/// Number of bytes for the secret keys. See workbench.ts for their usage.\nconst SECRET_KEY_BYTES: usize = 32;\n/// Path to mint the key combining server and client parts.\nconst SECRET_KEY_MINT_PATH: &str = \"_vscode-cli/mint-key\";\n/// Cookie set to the `SECRET_KEY_MINT_PATH`\nconst PATH_COOKIE_NAME: &str = \"vscode-secret-key-path\";\n/// HTTP-only cookie where the client's secret half is stored.\nconst SECRET_KEY_COOKIE_NAME: &str = \"vscode-cli-secret-half\";\n\n/// Implements the vscode \"server of servers\". Clients who go to the URI get\n/// served the latest version of the VS Code server whenever they load the\n/// page. The VS Code server prefixes all assets and connections it loads with\n/// its version string, so existing clients can continue to get served even\n/// while new clients get new VS Code Server versions.\npub async fn serve_web(ctx: CommandContext, mut args: ServeWebArgs) -> Result<i32, AnyError> {\n\tlegal::require_consent(&ctx.paths, args.accept_server_license_terms)?;\n\n\tlet platform: crate::update_service::Platform = PreReqChecker::new().verify().await?;\n\tif !args.without_connection_token {\n\t\tif let Some(p) = args.connection_token_file.as_deref() {\n\t\t\tlet token = fs::read_to_string(PathBuf::from(p))\n\t\t\t\t.map_err(CodeError::CouldNotReadConnectionTokenFile)?;\n\t\t\targs.connection_token = Some(token.trim().to_string());\n\t\t} else {\n\t\t\t// Ensure there's a defined connection token, since if multiple server versions\n\t\t\t// are executed, they will need to have a single shared token.\n\t\t\tlet token_path = ctx.paths.root().join(\"serve-web-token\");\n\t\t\tlet token = mint_connection_token(&token_path, args.connection_token.clone())\n\t\t\t\t.map_err(CodeError::CouldNotCreateConnectionTokenFile)?;\n\t\t\targs.connection_token = Some(token);\n\t\t\targs.connection_token_file = Some(token_path.to_string_lossy().to_string());\n\t\t}\n\t}\n\n\tlet cm: Arc<ConnectionManager> = ConnectionManager::new(&ctx, platform, args.clone());\n\tlet update_check_interval = 3600;\n\tcm.clone()\n\t\t.start_update_checker(Duration::from_secs(update_check_interval));\n\n\tlet key = get_server_key_half(&ctx.paths);\n\tlet make_svc = move || {\n\t\tlet ctx = HandleContext {\n\t\t\tcm: cm.clone(),\n\t\t\tlog: cm.log.clone(),\n\t\t\tserver_secret_key: key.clone(),\n\t\t};\n\t\tlet service = service_fn(move |req| handle(ctx.clone(), req));\n\t\tasync move { Ok::<_, Infallible>(service) }\n\t};\n\n\tlet mut shutdown = ShutdownRequest::create_rx([ShutdownRequest::CtrlC]);\n\tlet r = if let Some(s) = args.socket_path {\n\t\tlet s = PathBuf::from(&s);\n\t\tlet socket = listen_socket_rw_stream(&s).await?;\n\t\tctx.log\n\t\t\t.result(format!(\"Web UI available on {}\", s.display()));\n\t\tlet r = Server::builder(socket.into_pollable())\n\t\t\t.serve(make_service_fn(|_| make_svc()))\n\t\t\t.with_graceful_shutdown(async {\n\t\t\t\tlet _ = shutdown.wait().await;\n\t\t\t})\n\t\t\t.await;\n\t\tlet _ = std::fs::remove_file(&s); // cleanup\n\t\tr\n\t} else {\n\t\tlet addr: SocketAddr = match &args.host {\n\t\t\tSome(h) => {\n\t\t\t\tSocketAddr::new(h.parse().map_err(CodeError::InvalidHostAddress)?, args.port)\n\t\t\t}\n\t\t\tNone => SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), args.port),\n\t\t};\n\t\tlet builder = Server::try_bind(&addr).map_err(CodeError::CouldNotListenOnInterface)?;\n\n\t\tlet mut listening = format!(\"Web UI available at http://{addr}\");\n\t\tif let Some(base) = args.server_base_path {\n\t\t\tif !base.starts_with('/') {\n\t\t\t\tlistening.push('/');\n\t\t\t}\n\t\t\tlistening.push_str(&base);\n\t\t}\n\t\tif let Some(ct) = args.connection_token {\n\t\t\tlistening.push_str(&format!(\"?tkn={ct}\"));\n\t\t}\n\t\tctx.log.result(listening);\n\n\t\tbuilder\n\t\t\t.serve(make_service_fn(|_| make_svc()))\n\t\t\t.with_graceful_shutdown(async {\n\t\t\t\tlet _ = shutdown.wait().await;\n\t\t\t})\n\t\t\t.await\n\t};\n\n\tr.map_err(CodeError::CouldNotListenOnInterface)?;\n\n\tOk(0)\n}\n\n#[derive(Clone)]\nstruct HandleContext {\n\tcm: Arc<ConnectionManager>,\n\tlog: log::Logger,\n\tserver_secret_key: SecretKeyPart,\n}\n\n/// Handler function for an inbound request\nasync fn handle(ctx: HandleContext, req: Request<Body>) -> Result<Response<Body>, Infallible> {\n\tlet client_key_half = get_client_key_half(&req);\n\tlet path = req.uri().path();\n\n\tlet mut res = if path.starts_with(&ctx.cm.base_path)\n\t\t&& path.get(ctx.cm.base_path.len()..).unwrap_or_default() == SECRET_KEY_MINT_PATH\n\t{\n\t\thandle_secret_mint(&ctx, req)\n\t} else {\n\t\thandle_proxied(&ctx, req).await\n\t};\n\n\tappend_secret_headers(&ctx.cm.base_path, &mut res, &client_key_half);\n\n\tOk(res)\n}\n\nasync fn handle_proxied(ctx: &HandleContext, req: Request<Body>) -> Response<Body> {\n\tlet release = if let Some((r, _)) = get_release_from_path(req.uri().path(), ctx.cm.platform) {\n\t\tr\n\t} else {\n\t\tmatch ctx.cm.get_release_from_cache().await {\n\t\t\tOk(r) => r,\n\t\t\tErr(e) => {\n\t\t\t\terror!(ctx.log, \"error getting latest version: {}\", e);\n\t\t\t\treturn response::code_err(e);\n\t\t\t}\n\t\t}\n\t};\n\n\tmatch ctx.cm.get_connection(release).await {\n\t\tOk(rw) => {\n\t\t\tif req.headers().contains_key(hyper::header::UPGRADE) {\n\t\t\t\tforward_ws_req_to_server(ctx.log.clone(), rw, req).await\n\t\t\t} else {\n\t\t\t\tforward_http_req_to_server(rw, req).await\n\t\t\t}\n\t\t}\n\t\tErr(CodeError::ServerNotYetDownloaded) => response::wait_for_download(),\n\t\tErr(e) => response::code_err(e),\n\t}\n}\n\nfn handle_secret_mint(ctx: &HandleContext, req: Request<Body>) -> Response<Body> {\n\tuse sha2::{Digest, Sha256};\n\n\tlet mut hasher = Sha256::new();\n\thasher.update(ctx.server_secret_key.0.as_ref());\n\thasher.update(get_client_key_half(&req).0.as_ref());\n\tlet hash = hasher.finalize();\n\tlet hash = hash[..SECRET_KEY_BYTES].to_vec();\n\tresponse::secret_key(hash)\n}\n\n/// Appends headers to response to maintain the secret storage of the workbench:\n/// sets the `PATH_COOKIE_VALUE` so workbench.ts knows about the 'mint' endpoint,\n/// and maintains the http-only cookie the client will use for cookies.\nfn append_secret_headers(\n\tbase_path: &str,\n\tres: &mut Response<Body>,\n\tclient_key_half: &SecretKeyPart,\n) {\n\tlet headers = res.headers_mut();\n\theaders.append(\n\t\thyper::header::SET_COOKIE,\n\t\tformat!(\"{PATH_COOKIE_NAME}={base_path}{SECRET_KEY_MINT_PATH}; SameSite=Strict; Path=/\",)\n\t\t\t.parse()\n\t\t\t.unwrap(),\n\t);\n\theaders.append(\n\t\thyper::header::SET_COOKIE,\n\t\tformat!(\n\t\t\t\"{}={}; SameSite=Strict; HttpOnly; Max-Age=2592000; Path=/\",\n\t\t\tSECRET_KEY_COOKIE_NAME,\n\t\t\tclient_key_half.encode()\n\t\t)\n\t\t.parse()\n\t\t.unwrap(),\n\t);\n}\n\n/// Gets the release info from the VS Code path prefix, which is in the\n/// format `/<quality>-<commit>/...`\nfn get_release_from_path(path: &str, platform: Platform) -> Option<(Release, String)> {\n\tif !path.starts_with('/') {\n\t\treturn None; // paths must start with '/'\n\t}\n\n\tlet path = &path[1..];\n\tlet i = path.find('/').unwrap_or(path.len());\n\tlet quality_commit_sep = path.get(..i).and_then(|p| p.find('-'))?;\n\n\tlet (quality_commit, remaining) = path.split_at(i);\n\tlet (quality, commit) = quality_commit.split_at(quality_commit_sep);\n\tlet commit = &commit[1..];\n\n\tif !is_commit_hash(commit) {\n\t\treturn None;\n\t}\n\n\tSome((\n\t\tRelease {\n\t\t\t// remember to trim off the leading '/' which is now part of th quality\n\t\t\tquality: Quality::try_from(quality).ok()?,\n\t\t\tcommit: commit.to_string(),\n\t\t\tplatform,\n\t\t\ttarget: TargetKind::Web,\n\t\t\tname: \"\".to_string(),\n\t\t},\n\t\tremaining.to_string(),\n\t))\n}\n\n/// Proxies the standard HTTP request to the async pipe, returning the piped response\nasync fn forward_http_req_to_server(\n\t(rw, handle): (AsyncPipe, ConnectionHandle),\n\treq: Request<Body>,\n) -> Response<Body> {\n\tlet (mut request_sender, connection) =\n\t\tmatch hyper::client::conn::Builder::new().handshake(rw).await {\n\t\t\tOk(r) => r,\n\t\t\tErr(e) => return response::connection_err(e),\n\t\t};\n\n\ttokio::spawn(connection);\n\n\tlet res = request_sender\n\t\t.send_request(req)\n\t\t.await\n\t\t.unwrap_or_else(response::connection_err);\n\n\t// technically, we should buffer the body into memory since it may not be\n\t// read at this point, but because the keepalive time is very large\n\t// there's not going to be responses that take hours to send and x\n\t// cause us to kill the server before the response is sent\n\tdrop(handle);\n\n\tres\n}\n\n/// Proxies the websocket request to the async pipe\nasync fn forward_ws_req_to_server(\n\tlog: log::Logger,\n\t(rw, handle): (AsyncPipe, ConnectionHandle),\n\tmut req: Request<Body>,\n) -> Response<Body> {\n\t// splicing of client and servers inspired by https://github.com/hyperium/hyper/blob/fece9f7f50431cf9533cfe7106b53a77b48db699/examples/upgrades.rs\n\tlet (mut request_sender, connection) =\n\t\tmatch hyper::client::conn::Builder::new().handshake(rw).await {\n\t\t\tOk(r) => r,\n\t\t\tErr(e) => return response::connection_err(e),\n\t\t};\n\n\ttokio::spawn(connection);\n\n\tlet mut proxied_req = Request::builder().uri(req.uri());\n\tfor (k, v) in req.headers() {\n\t\tproxied_req = proxied_req.header(k, v);\n\t}\n\n\tlet mut res = request_sender\n\t\t.send_request(proxied_req.body(Body::empty()).unwrap())\n\t\t.await\n\t\t.unwrap_or_else(response::connection_err);\n\n\tlet mut proxied_res = Response::new(Body::empty());\n\t*proxied_res.status_mut() = res.status();\n\tfor (k, v) in res.headers() {\n\t\tproxied_res.headers_mut().insert(k, v.clone());\n\t}\n\n\t// only start upgrade at this point in case the server decides to deny socket\n\tif res.status() == hyper::StatusCode::SWITCHING_PROTOCOLS {\n\t\ttokio::spawn(async move {\n\t\t\tlet (s_req, s_res) =\n\t\t\t\ttokio::join!(hyper::upgrade::on(&mut req), hyper::upgrade::on(&mut res));\n\n\t\t\tmatch (s_req, s_res) {\n\t\t\t\t(Err(e1), Err(e2)) => debug!(\n\t\t\t\t\tlog,\n\t\t\t\t\t\"client ({}) and server ({}) websocket upgrade failed\", e1, e2\n\t\t\t\t),\n\t\t\t\t(Err(e1), _) => debug!(log, \"client ({}) websocket upgrade failed\", e1),\n\t\t\t\t(_, Err(e2)) => debug!(log, \"server ({}) websocket upgrade failed\", e2),\n\t\t\t\t(Ok(mut s_req), Ok(mut s_res)) => {\n\t\t\t\t\ttrace!(log, \"websocket upgrade succeeded\");\n\t\t\t\t\tlet r = tokio::io::copy_bidirectional(&mut s_req, &mut s_res).await;\n\t\t\t\t\ttrace!(log, \"websocket closed (error: {:?})\", r.err());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdrop(handle);\n\t\t});\n\t}\n\n\tproxied_res\n}\n\n/// Returns whether the string looks like a commit hash.\nfn is_commit_hash(s: &str) -> bool {\n\ts.len() == COMMIT_HASH_LEN && s.chars().all(|c| c.is_ascii_hexdigit())\n}\n\n/// Gets a cookie from the request by name.\nfn extract_cookie(req: &Request<Body>, name: &str) -> Option<String> {\n\tfor h in req.headers().get_all(hyper::header::COOKIE) {\n\t\tif let Ok(str) = h.to_str() {\n\t\t\tfor pair in str.split(\"; \") {\n\t\t\t\tlet i = match pair.find('=') {\n\t\t\t\t\tSome(i) => i,\n\t\t\t\t\tNone => continue,\n\t\t\t\t};\n\n\t\t\t\tif &pair[..i] == name {\n\t\t\t\t\treturn Some(pair[i + 1..].to_string());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tNone\n}\n\n#[derive(Clone)]\nstruct SecretKeyPart(Box<[u8; SECRET_KEY_BYTES]>);\n\nimpl SecretKeyPart {\n\tpub fn new() -> Self {\n\t\tlet key: [u8; SECRET_KEY_BYTES] = rand::random();\n\t\tSelf(Box::new(key))\n\t}\n\n\tpub fn decode(s: &str) -> Result<Self, base64::DecodeSliceError> {\n\t\tuse base64::{engine::general_purpose, Engine as _};\n\t\tlet mut key: [u8; SECRET_KEY_BYTES] = [0; SECRET_KEY_BYTES];\n\t\tlet v = general_purpose::URL_SAFE.decode(s)?;\n\t\tif v.len() != SECRET_KEY_BYTES {\n\t\t\treturn Err(base64::DecodeSliceError::OutputSliceTooSmall);\n\t\t}\n\n\t\tkey.copy_from_slice(&v);\n\t\tOk(Self(Box::new(key)))\n\t}\n\n\tpub fn encode(&self) -> String {\n\t\tuse base64::{engine::general_purpose, Engine as _};\n\t\tgeneral_purpose::URL_SAFE.encode(self.0.as_ref())\n\t}\n}\n\n/// Gets the server's half of the secret key.\nfn get_server_key_half(paths: &LauncherPaths) -> SecretKeyPart {\n\tlet ps = PersistedState::new(paths.root().join(\"serve-web-key-half\"));\n\tlet value: String = ps.load();\n\tif let Ok(sk) = SecretKeyPart::decode(&value) {\n\t\treturn sk;\n\t}\n\n\tlet key = SecretKeyPart::new();\n\tlet _ = ps.save(key.encode());\n\tkey\n}\n\n/// Gets the client's half of the secret key.\nfn get_client_key_half(req: &Request<Body>) -> SecretKeyPart {\n\tif let Some(c) = extract_cookie(req, SECRET_KEY_COOKIE_NAME) {\n\t\tif let Ok(sk) = SecretKeyPart::decode(&c) {\n\t\t\treturn sk;\n\t\t}\n\t}\n\n\tSecretKeyPart::new()\n}\n\n/// Module holding original responses the CLI's server makes.\nmod response {\n\tuse const_format::concatcp;\n\n\tuse crate::constants::QUALITYLESS_SERVER_NAME;\n\n\tuse super::*;\n\n\tpub fn connection_err(err: hyper::Error) -> Response<Body> {\n\t\tResponse::builder()\n\t\t\t.status(503)\n\t\t\t.body(Body::from(format!(\"Error connecting to server: {err:?}\")))\n\t\t\t.unwrap()\n\t}\n\n\tpub fn code_err(err: CodeError) -> Response<Body> {\n\t\tResponse::builder()\n\t\t\t.status(500)\n\t\t\t.body(Body::from(format!(\"Error serving request: {err}\")))\n\t\t\t.unwrap()\n\t}\n\n\tpub fn wait_for_download() -> Response<Body> {\n\t\tResponse::builder()\n\t\t\t.status(202)\n\t\t\t.header(\"Content-Type\", \"text/html\") // todo: get latest\n\t\t\t.body(Body::from(concatcp!(\"The latest version of the \", QUALITYLESS_SERVER_NAME, \" is downloading, please wait a moment...<script>setTimeout(()=>location.reload(),1500)</script>\", )))\n\t\t\t.unwrap()\n\t}\n\n\tpub fn secret_key(hash: Vec<u8>) -> Response<Body> {\n\t\tResponse::builder()\n\t\t\t.status(200)\n\t\t\t.header(\"Content-Type\", \"application/octet-stream\") // todo: get latest\n\t\t\t.body(Body::from(hash))\n\t\t\t.unwrap()\n\t}\n}\n\n/// Handle returned when getting a stream to the server, used to refcount\n/// connections to a server so it can be disposed when there are no more clients.\nstruct ConnectionHandle {\n\tclient_counter: Arc<tokio::sync::watch::Sender<usize>>,\n}\n\nimpl ConnectionHandle {\n\tpub fn new(client_counter: Arc<tokio::sync::watch::Sender<usize>>) -> Self {\n\t\tclient_counter.send_modify(|v| {\n\t\t\t*v += 1;\n\t\t});\n\t\tSelf { client_counter }\n\t}\n}\n\nimpl Drop for ConnectionHandle {\n\tfn drop(&mut self) {\n\t\tself.client_counter.send_modify(|v| {\n\t\t\t*v -= 1;\n\t\t});\n\t}\n}\n\ntype StartData = (PathBuf, Arc<tokio::sync::watch::Sender<usize>>);\n\n/// State stored in the ConnectionManager for each server version.\nstruct VersionState {\n\tdownloaded: bool,\n\tsocket_path: Barrier<Result<StartData, String>>,\n}\n\ntype ConnectionStateMap = Arc<Mutex<HashMap<(Quality, String), VersionState>>>;\n\n/// Manages the connections to running web UI instances. Multiple web servers\n/// can run concurrently, with routing based on the URL path.\nstruct ConnectionManager {\n\tpub platform: Platform,\n\tpub log: log::Logger,\n\targs: ServeWebArgs,\n\t/// Server base path, ending in `/`\n\tbase_path: String,\n\t/// Cache where servers are stored\n\tcache: DownloadCache,\n\t/// Mapping of (Quality, Commit) to the state each server is in\n\tstate: ConnectionStateMap,\n\t/// Update service instance\n\tupdate_service: UpdateService,\n\t/// Cache of the latest released version, storing the time we checked as well\n\tlatest_version: tokio::sync::Mutex<Option<(Instant, Release)>>,\n}\n\nfn key_for_release(release: &Release) -> (Quality, String) {\n\t(release.quality, release.commit.clone())\n}\n\nfn normalize_base_path(p: &str) -> String {\n\tlet p = p.trim_matches('/');\n\n\tif p.is_empty() {\n\t\treturn \"/\".to_string();\n\t}\n\n\tformat!(\"/{}/\", p.trim_matches('/'))\n}\n\nimpl ConnectionManager {\n\tpub fn new(ctx: &CommandContext, platform: Platform, args: ServeWebArgs) -> Arc<Self> {\n\t\tlet base_path = normalize_base_path(args.server_base_path.as_deref().unwrap_or_default());\n\n\t\tlet cache = DownloadCache::new(ctx.paths.web_server_storage());\n\t\tlet target_kind = TargetKind::Web;\n\n\t\tlet quality = VSCODE_CLI_QUALITY.map_or(Quality::Stable, |q| match Quality::try_from(q) {\n\t\t\tOk(q) => q,\n\t\t\tErr(_) => Quality::Stable,\n\t\t});\n\n\t\tlet now = Instant::now();\n\t\tlet latest_version = tokio::sync::Mutex::new(cache.get().first().map(|latest_commit| {\n\t\t\t(\n\t\t\t\tnow.checked_sub(Duration::from_secs(RELEASE_CHECK_INTERVAL))\n\t\t\t\t\t.unwrap_or(now), // handle 0-ish instants, #233155\n\t\t\t\tRelease {\n\t\t\t\t\tname: String::from(\"0.0.0\"), // Version information not stored on cache\n\t\t\t\t\tcommit: latest_commit.clone(),\n\t\t\t\t\tplatform,\n\t\t\t\t\ttarget: target_kind,\n\t\t\t\t\tquality,\n\t\t\t\t},\n\t\t\t)\n\t\t}));\n\n\t\tArc::new(Self {\n\t\t\tplatform,\n\t\t\targs,\n\t\t\tbase_path,\n\t\t\tlog: ctx.log.clone(),\n\t\t\tcache,\n\t\t\tupdate_service: UpdateService::new(\n\t\t\t\tctx.log.clone(),\n\t\t\t\tArc::new(ReqwestSimpleHttp::with_client(ctx.http.clone())),\n\t\t\t),\n\t\t\tstate: ConnectionStateMap::default(),\n\t\t\tlatest_version,\n\t\t})\n\t}\n\n\t// spawns a task that checks for updates every n seconds duration\n\tpub fn start_update_checker(self: Arc<Self>, duration: Duration) {\n\t\ttokio::spawn(async move {\n\t\t\tlet mut interval = time::interval(duration);\n\t\t\tloop {\n\t\t\t\tinterval.tick().await;\n\n\t\t\t\tif let Err(e) = self.get_latest_release().await {\n\t\t\t\t\twarning!(self.log, \"error getting latest version: {}\", e);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// Returns the latest release from the cache, if one exists.\n\tpub async fn get_release_from_cache(&self) -> Result<Release, CodeError> {\n\t\tlet latest = self.latest_version.lock().await;\n\t\tif let Some((_, release)) = &*latest {\n\t\t\treturn Ok(release.clone());\n\t\t}\n\n\t\tdrop(latest);\n\t\tself.get_latest_release().await\n\t}\n\n\t/// Gets a connection to a server version\n\tpub async fn get_connection(\n\t\t&self,\n\t\trelease: Release,\n\t) -> Result<(AsyncPipe, ConnectionHandle), CodeError> {\n\t\t// todo@connor4312: there is likely some performance benefit to\n\t\t// implementing a 'keepalive' for these connections.\n\t\tlet (path, counter) = self.get_version_data(release).await?;\n\t\tlet handle = ConnectionHandle::new(counter);\n\t\tlet rw = get_socket_rw_stream(&path).await?;\n\t\tOk((rw, handle))\n\t}\n\n\t/// Gets the latest release for the CLI quality, caching its result for some\n\t/// time to allow for fast loads.\n\tpub async fn get_latest_release(&self) -> Result<Release, CodeError> {\n\t\tlet mut latest = self.latest_version.lock().await;\n\t\tlet now = Instant::now();\n\t\tlet target_kind = TargetKind::Web;\n\n\t\tlet quality = VSCODE_CLI_QUALITY\n\t\t\t.ok_or_else(|| CodeError::UpdatesNotConfigured(\"no configured quality\"))\n\t\t\t.and_then(|q| {\n\t\t\t\tQuality::try_from(q).map_err(|_| CodeError::UpdatesNotConfigured(\"unknown quality\"))\n\t\t\t})?;\n\n\t\tlet release = self\n\t\t\t.update_service\n\t\t\t.get_latest_commit(self.platform, target_kind, quality)\n\t\t\t.await\n\t\t\t.map_err(|e| CodeError::UpdateCheckFailed(e.to_string()));\n\n\t\t// If the update service is unavailable and we have stale data, use that\n\t\tif let (Err(e), Some((_, previous))) = (&release, latest.clone()) {\n\t\t\twarning!(self.log, \"error getting latest release, using stale: {}\", e);\n\t\t\t*latest = Some((now, previous.clone()));\n\t\t\treturn Ok(previous.clone());\n\t\t}\n\n\t\tlet release = release?;\n\t\tdebug!(self.log, \"refreshed latest release: {}\", release);\n\t\t*latest = Some((now, release.clone()));\n\n\t\tOk(release)\n\t}\n\n\t/// Gets the StartData for the a version of the VS Code server, triggering\n\t/// download/start if necessary. It returns `CodeError::ServerNotYetDownloaded`\n\t/// while the server is downloading, which is used to have a refresh loop on the page.\n\tasync fn get_version_data(&self, release: Release) -> Result<StartData, CodeError> {\n\t\tself.get_version_data_inner(release)?\n\t\t\t.wait()\n\t\t\t.await\n\t\t\t.unwrap()\n\t\t\t.map_err(CodeError::ServerDownloadError)\n\t}\n\n\tfn get_version_data_inner(\n\t\t&self,\n\t\trelease: Release,\n\t) -> Result<Barrier<Result<StartData, String>>, CodeError> {\n\t\tlet mut state = self.state.lock().unwrap();\n\t\tlet key = key_for_release(&release);\n\t\tif let Some(s) = state.get_mut(&key) {\n\t\t\tif !s.downloaded {\n\t\t\t\tif s.socket_path.is_open() {\n\t\t\t\t\ts.downloaded = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn Err(CodeError::ServerNotYetDownloaded);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Ok(s.socket_path.clone());\n\t\t}\n\n\t\tlet (socket_path, opener) = new_barrier();\n\t\tlet state_map_dup = self.state.clone();\n\t\tlet args = StartArgs {\n\t\t\targs: self.args.clone(),\n\t\t\tlog: self.log.clone(),\n\t\t\topener,\n\t\t\trelease,\n\t\t};\n\n\t\tif let Some(p) = self.cache.exists(&args.release.commit) {\n\t\t\tstate.insert(\n\t\t\t\tkey.clone(),\n\t\t\t\tVersionState {\n\t\t\t\t\tsocket_path: socket_path.clone(),\n\t\t\t\t\tdownloaded: true,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\ttokio::spawn(async move {\n\t\t\t\tSelf::start_version(args, p).await;\n\t\t\t\tstate_map_dup.lock().unwrap().remove(&key);\n\t\t\t});\n\t\t\tOk(socket_path)\n\t\t} else {\n\t\t\tstate.insert(\n\t\t\t\tkey.clone(),\n\t\t\t\tVersionState {\n\t\t\t\t\tsocket_path,\n\t\t\t\t\tdownloaded: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\tlet update_service = self.update_service.clone();\n\t\t\tlet cache = self.cache.clone();\n\t\t\ttokio::spawn(async move {\n\t\t\t\tSelf::download_version(args, update_service.clone(), cache.clone()).await;\n\t\t\t\tstate_map_dup.lock().unwrap().remove(&key);\n\t\t\t});\n\t\t\tErr(CodeError::ServerNotYetDownloaded)\n\t\t}\n\t}\n\n\t/// Downloads a server version into the cache and starts it.\n\tasync fn download_version(\n\t\targs: StartArgs,\n\t\tupdate_service: UpdateService,\n\t\tcache: DownloadCache,\n\t) {\n\t\tlet release_for_fut = args.release.clone();\n\t\tlet log_for_fut = args.log.clone();\n\t\tlet dir_fut = cache.create(&args.release.commit, |target_dir| async move {\n\t\t\tinfo!(log_for_fut, \"Downloading server {}\", release_for_fut.commit);\n\t\t\tlet tmpdir = tempfile::tempdir().unwrap();\n\t\t\tlet response = update_service.get_download_stream(&release_for_fut).await?;\n\n\t\t\tlet name = response.url_path_basename().unwrap();\n\t\t\tlet archive_path = tmpdir.path().join(name);\n\t\t\thttp::download_into_file(\n\t\t\t\t&archive_path,\n\t\t\t\tlog_for_fut.get_download_logger(\"Downloading server:\"),\n\t\t\t\tresponse,\n\t\t\t)\n\t\t\t.await?;\n\t\t\tunzip_downloaded_release(&archive_path, &target_dir, SilentCopyProgress())?;\n\t\t\tOk(())\n\t\t});\n\n\t\tmatch dir_fut.await {\n\t\t\tErr(e) => args.opener.open(Err(e.to_string())),\n\t\t\tOk(dir) => Self::start_version(args, dir).await,\n\t\t}\n\t}\n\n\t/// Starts a downloaded server that can be found in the given `path`.\n\tasync fn start_version(args: StartArgs, path: PathBuf) {\n\t\tinfo!(args.log, \"Starting server {}\", args.release.commit);\n\n\t\tlet executable = path\n\t\t\t.join(\"bin\")\n\t\t\t.join(args.release.quality.server_entrypoint());\n\n\t\tlet socket_path = get_socket_name();\n\n\t\tlet mut cmd = new_script_command(&executable);\n\t\tcmd.stdin(std::process::Stdio::null());\n\t\tcmd.stderr(std::process::Stdio::piped());\n\t\tcmd.stdout(std::process::Stdio::piped());\n\t\tcmd.arg(\"--socket-path\");\n\t\tcmd.arg(&socket_path);\n\n\t\t// License agreement already checked by the `server_web` function.\n\t\tcmd.args([\"--accept-server-license-terms\"]);\n\n\t\tif let Some(a) = &args.args.server_base_path {\n\t\t\tcmd.arg(\"--server-base-path\");\n\t\t\tcmd.arg(a);\n\t\t}\n\t\tif let Some(a) = &args.args.server_data_dir {\n\t\t\tcmd.arg(\"--server-data-dir\");\n\t\t\tcmd.arg(a);\n\t\t}\n\t\tif args.args.without_connection_token {\n\t\t\tcmd.arg(\"--without-connection-token\");\n\t\t}\n\t\t// Note: intentional that we don't pass --connection-token here, we always\n\t\t// convert it into the file variant.\n\t\tif let Some(ct) = &args.args.connection_token_file {\n\t\t\tcmd.arg(\"--connection-token-file\");\n\t\t\tcmd.arg(ct);\n\t\t}\n\n\t\t// removed, otherwise the workbench will not be usable when running the CLI from sources.\n\t\tcmd.env_remove(\"VSCODE_DEV\");\n\n\t\tlet mut child = match cmd.spawn() {\n\t\t\tOk(c) => c,\n\t\t\tErr(e) => {\n\t\t\t\targs.opener.open(Err(e.to_string()));\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\n\t\tlet (mut stdout, mut stderr) = (\n\t\t\tBufReader::new(child.stdout.take().unwrap()).lines(),\n\t\t\tBufReader::new(child.stderr.take().unwrap()).lines(),\n\t\t);\n\n\t\t// wrapped option to prove that we only use this once in the loop\n\t\tlet (counter_tx, mut counter_rx) = tokio::sync::watch::channel(0);\n\t\tlet mut opener = Some((args.opener, socket_path, Arc::new(counter_tx)));\n\t\tlet commit_prefix = &args.release.commit[..7];\n\t\tlet kill_timer = tokio::time::sleep(Duration::from_secs(SERVER_IDLE_TIMEOUT_SECS));\n\t\tpin!(kill_timer);\n\n\t\tloop {\n\t\t\ttokio::select! {\n\t\t\t\tOk(Some(l)) = stdout.next_line() => {\n\t\t\t\t\tinfo!(args.log, \"[{} stdout]: {}\", commit_prefix, l);\n\n\t\t\t\t\tif l.contains(\"Server bound to\") {\n\t\t\t\t\t\tif let Some((opener, path, counter_tx)) = opener.take() {\n\t\t\t\t\t\t\topener.open(Ok((path, counter_tx)));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tOk(Some(l)) = stderr.next_line() => {\n\t\t\t\t\tinfo!(args.log, \"[{} stderr]: {}\", commit_prefix, l);\n\t\t\t\t},\n\t\t\t\tn = counter_rx.changed() => {\n\t\t\t\t\tkill_timer.as_mut().reset(match n {\n\t\t\t\t\t\t// err means that the record was dropped\n\t\t\t\t\t\tErr(_) => tokio::time::Instant::now(),\n\t\t\t\t\t\tOk(_) => {\n\t\t\t\t\t\t\tif *counter_rx.borrow() == 0 {\n\t\t\t\t\t\t\t\ttokio::time::Instant::now() + Duration::from_secs(SERVER_IDLE_TIMEOUT_SECS)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttokio::time::Instant::now() + Duration::from_secs(SERVER_ACTIVE_TIMEOUT_SECS)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t_ = &mut kill_timer => {\n\t\t\t\t\tinfo!(args.log, \"[{} process]: idle timeout reached, ending\", commit_prefix);\n\t\t\t\t\tlet _ = child.kill().await;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\te = child.wait() => {\n\t\t\t\t\tinfo!(args.log, \"[{} process]: exited: {:?}\", commit_prefix, e);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nstruct StartArgs {\n\tlog: log::Logger,\n\targs: ServeWebArgs,\n\trelease: Release,\n\topener: BarrierOpener<Result<StartData, String>>,\n}\n\nfn mint_connection_token(path: &Path, prefer_token: Option<String>) -> std::io::Result<String> {\n\t#[cfg(not(windows))]\n\tuse std::os::unix::fs::OpenOptionsExt;\n\n\tlet mut f = fs::OpenOptions::new();\n\tf.create(true);\n\tf.write(true);\n\tf.read(true);\n\t#[cfg(not(windows))]\n\tf.mode(0o600);\n\tlet mut f = f.open(path)?;\n\n\tif prefer_token.is_none() {\n\t\tlet mut t = String::new();\n\t\tf.read_to_string(&mut t)?;\n\t\tlet t = t.trim();\n\t\tif !t.is_empty() {\n\t\t\treturn Ok(t.to_string());\n\t\t}\n\t}\n\n\tf.set_len(0)?;\n\tlet prefer_token = prefer_token.unwrap_or_else(|| uuid::Uuid::new_v4().to_string());\n\tf.write_all(prefer_token.as_bytes())?;\n\tOk(prefer_token)\n}\n"
  },
  {
    "path": "cli/src/commands/tunnels.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse async_trait::async_trait;\nuse base64::{engine::general_purpose as b64, Engine as _};\nuse futures::{stream::FuturesUnordered, StreamExt};\nuse serde::Serialize;\nuse sha2::{Digest, Sha256};\nuse std::{\n\tnet::{IpAddr, Ipv4Addr, SocketAddr},\n\tstr::FromStr,\n\ttime::Duration,\n};\nuse sysinfo::Pid;\nuse tokio::{\n\tio::{AsyncBufReadExt, BufReader},\n\tsync::watch,\n};\n\nuse super::{\n\targs::{\n\t\tAuthProvider, CliCore, CommandShellArgs, ExistingTunnelArgs, TunnelArgs, TunnelForwardArgs,\n\t\tTunnelRenameArgs, TunnelServeArgs, TunnelServiceSubCommands, TunnelUserSubCommands,\n\t},\n\tCommandContext,\n};\n\nuse crate::{\n\tasync_pipe::{get_socket_name, listen_socket_rw_stream, AsyncRWAccepter},\n\tauth::Auth,\n\tconstants::{\n\t\tAPPLICATION_NAME, CONTROL_PORT, IS_A_TTY, TUNNEL_CLI_LOCK_NAME, TUNNEL_SERVICE_LOCK_NAME,\n\t},\n\tlog,\n\tstate::LauncherPaths,\n\ttunnels::{\n\t\tcode_server::CodeServerArgs,\n\t\tcreate_service_manager,\n\t\tdev_tunnels::{self, DevTunnels},\n\t\tlegal, local_forwarding,\n\t\tpaths::get_all_servers,\n\t\tprotocol, serve_stream,\n\t\tshutdown_signal::ShutdownRequest,\n\t\tsingleton_client::do_single_rpc_call,\n\t\tsingleton_server::{\n\t\t\tmake_singleton_server, start_singleton_server, BroadcastLogSink, SingletonServerArgs,\n\t\t},\n\t\tAuthRequired, Next, ServeStreamParams, ServiceContainer, ServiceManager,\n\t},\n\tutil::{\n\t\tapp_lock::AppMutex,\n\t\tcommand::new_std_command,\n\t\terrors::{wrap, AnyError, CodeError},\n\t\tmachine::canonical_exe,\n\t\tprereqs::PreReqChecker,\n\t},\n};\nuse crate::{\n\tsingleton::{acquire_singleton, SingletonConnection},\n\ttunnels::{\n\t\tdev_tunnels::ActiveTunnel,\n\t\tsingleton_client::{start_singleton_client, SingletonClientArgs},\n\t\tSleepInhibitor,\n\t},\n};\n\nimpl From<AuthProvider> for crate::auth::AuthProvider {\n\tfn from(auth_provider: AuthProvider) -> Self {\n\t\tmatch auth_provider {\n\t\t\tAuthProvider::Github => crate::auth::AuthProvider::Github,\n\t\t\tAuthProvider::Microsoft => crate::auth::AuthProvider::Microsoft,\n\t\t}\n\t}\n}\n\nfn fulfill_existing_tunnel_args(\n\td: ExistingTunnelArgs,\n\tname_arg: &Option<String>,\n) -> Option<dev_tunnels::ExistingTunnel> {\n\tlet tunnel_name = d.tunnel_name.or_else(|| name_arg.clone());\n\n\tmatch (d.tunnel_id, d.cluster, d.host_token) {\n\t\t(Some(tunnel_id), None, Some(host_token)) => {\n\t\t\tlet i = tunnel_id.find('.')?;\n\t\t\tSome(dev_tunnels::ExistingTunnel {\n\t\t\t\ttunnel_id: tunnel_id[..i].to_string(),\n\t\t\t\tcluster: tunnel_id[i + 1..].to_string(),\n\t\t\t\ttunnel_name,\n\t\t\t\thost_token,\n\t\t\t})\n\t\t}\n\n\t\t(Some(tunnel_id), Some(cluster), Some(host_token)) => Some(dev_tunnels::ExistingTunnel {\n\t\t\ttunnel_id,\n\t\t\ttunnel_name,\n\t\t\thost_token,\n\t\t\tcluster,\n\t\t}),\n\n\t\t_ => None,\n\t}\n}\n\nstruct TunnelServiceContainer {\n\tcore_args: CliCore,\n\ttunnel_args: TunnelArgs,\n}\n\nimpl TunnelServiceContainer {\n\tfn new(core_args: CliCore, tunnel_args: TunnelArgs) -> Self {\n\t\tSelf {\n\t\t\tcore_args,\n\t\t\ttunnel_args,\n\t\t}\n\t}\n}\n\n#[async_trait]\nimpl ServiceContainer for TunnelServiceContainer {\n\tasync fn run_service(\n\t\t&mut self,\n\t\tlog: log::Logger,\n\t\tlauncher_paths: LauncherPaths,\n\t) -> Result<(), AnyError> {\n\t\tlet mut csa = (&self.core_args).into();\n\t\tself.tunnel_args.serve_args.server_args.apply_to(&mut csa);\n\t\tserve_with_csa(\n\t\t\tlauncher_paths,\n\t\t\tlog,\n\t\t\tTunnelServeArgs {\n\t\t\t\trandom_name: true, // avoid prompting\n\t\t\t\t..Default::default()\n\t\t\t},\n\t\t\tcsa,\n\t\t\tTUNNEL_SERVICE_LOCK_NAME,\n\t\t)\n\t\t.await?;\n\t\tOk(())\n\t}\n}\n\npub async fn command_shell(ctx: CommandContext, args: CommandShellArgs) -> Result<i32, AnyError> {\n\tlet platform = PreReqChecker::new().verify().await?;\n\tlet mut shutdown_reqs = vec![ShutdownRequest::CtrlC];\n\tif let Some(p) = args.parent_process_id.and_then(|p| Pid::from_str(&p).ok()) {\n\t\tshutdown_reqs.push(ShutdownRequest::ParentProcessKilled(p));\n\t}\n\n\tlet mut params = ServeStreamParams {\n\t\tlog: ctx.log,\n\t\tlauncher_paths: ctx.paths,\n\t\tplatform,\n\t\trequires_auth: args\n\t\t\t.require_token\n\t\t\t.map(AuthRequired::VSDAWithToken)\n\t\t\t.unwrap_or(AuthRequired::VSDA),\n\t\texit_barrier: ShutdownRequest::create_rx(shutdown_reqs),\n\t\tcode_server_args: (&ctx.args).into(),\n\t};\n\n\targs.server_args.apply_to(&mut params.code_server_args);\n\n\tlet mut listener: Box<dyn AsyncRWAccepter> =\n\t\tmatch (args.on_port.first(), &args.on_host, args.on_socket) {\n\t\t\t(_, _, true) => {\n\t\t\t\tlet socket = get_socket_name();\n\t\t\t\tlet listener = listen_socket_rw_stream(&socket)\n\t\t\t\t\t.await\n\t\t\t\t\t.map_err(|e| wrap(e, \"error listening on socket\"))?;\n\n\t\t\t\tparams\n\t\t\t\t\t.log\n\t\t\t\t\t.result(format!(\"Listening on {}\", socket.display()));\n\n\t\t\t\tBox::new(listener)\n\t\t\t}\n\t\t\t(Some(_), _, _) | (_, Some(_), _) => {\n\t\t\t\tlet host = args\n\t\t\t\t\t.on_host\n\t\t\t\t\t.as_ref()\n\t\t\t\t\t.map(|h| h.parse().map_err(CodeError::InvalidHostAddress))\n\t\t\t\t\t.unwrap_or(Ok(IpAddr::V4(Ipv4Addr::LOCALHOST)))?;\n\n\t\t\t\tlet lower_port = args.on_port.first().copied().unwrap_or_default();\n\t\t\t\tlet port_no = if let Some(upper) = args.on_port.get(1) {\n\t\t\t\t\tfind_unused_port(&host, lower_port, *upper)\n\t\t\t\t\t\t.await\n\t\t\t\t\t\t.unwrap_or_default()\n\t\t\t\t} else {\n\t\t\t\t\tlower_port\n\t\t\t\t};\n\n\t\t\t\tlet addr = SocketAddr::new(host, port_no);\n\t\t\t\tlet listener = tokio::net::TcpListener::bind(addr)\n\t\t\t\t\t.await\n\t\t\t\t\t.map_err(|e| wrap(e, \"error listening on port\"))?;\n\n\t\t\t\tparams\n\t\t\t\t\t.log\n\t\t\t\t\t.result(format!(\"Listening on {}\", listener.local_addr().unwrap()));\n\n\t\t\t\tBox::new(listener)\n\t\t\t}\n\t\t\t_ => {\n\t\t\t\tserve_stream(tokio::io::stdin(), tokio::io::stderr(), params).await;\n\t\t\t\treturn Ok(0);\n\t\t\t}\n\t\t};\n\n\tlet mut servers = FuturesUnordered::new();\n\n\tloop {\n\t\ttokio::select! {\n\t\t\tSome(_) = servers.next() => {},\n\t\t\tsocket = listener.accept_rw() => {\n\t\t\t\tmatch socket {\n\t\t\t\t\tOk((read, write)) => servers.push(serve_stream(read, write, params.clone())),\n\t\t\t\t\tErr(e) => {\n\t\t\t\t\t\terror!(params.log, &format!(\"Error accepting connection: {e}\"));\n\t\t\t\t\t\treturn Ok(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_ = params.exit_barrier.wait() => {\n\t\t\t\t// wait for all servers to finish up:\n\t\t\t\twhile (servers.next().await).is_some() { }\n\t\t\t\treturn Ok(0);\n\t\t\t}\n\t\t}\n\t}\n}\n\nasync fn find_unused_port(host: &IpAddr, start_port: u16, end_port: u16) -> Option<u16> {\n\tfor port in start_port..=end_port {\n\t\tif is_port_available(*host, port).await {\n\t\t\treturn Some(port);\n\t\t}\n\t}\n\tNone\n}\n\nasync fn is_port_available(host: IpAddr, port: u16) -> bool {\n\ttokio::net::TcpListener::bind(SocketAddr::new(host, port))\n\t\t.await\n\t\t.is_ok()\n}\n\nfn make_service_args<'a: 'c, 'b: 'c, 'c>(\n\troot_path: &'a str,\n\ttunnel_args: &'b TunnelArgs,\n) -> Vec<&'c str> {\n\tlet mut args = [\"--verbose\", \"--cli-data-dir\", root_path, \"tunnel\"].to_vec();\n\n\tif let Some(d) = tunnel_args.serve_args.server_args.extensions_dir.as_ref() {\n\t\targs.extend_from_slice(&[\"--extensions-dir\", d]);\n\t}\n\tif let Some(d) = tunnel_args.serve_args.server_args.server_data_dir.as_ref() {\n\t\targs.extend_from_slice(&[\"--server-data-dir\", d]);\n\t}\n\n\targs.extend_from_slice(&[\"service\", \"internal-run\"]);\n\n\targs\n}\n\npub async fn service(\n\tctx: CommandContext,\n\ttunnel_args: TunnelArgs,\n\tservice_args: TunnelServiceSubCommands,\n) -> Result<i32, AnyError> {\n\tlet manager = create_service_manager(ctx.log.clone(), &ctx.paths);\n\tmatch service_args {\n\t\tTunnelServiceSubCommands::Install(args) => {\n\t\t\tlet auth = Auth::new(&ctx.paths, ctx.log.clone());\n\n\t\t\tif let Some(name) = &args.name {\n\t\t\t\t// ensure the name matches, and tunnel exists\n\t\t\t\tdev_tunnels::DevTunnels::new_remote_tunnel(&ctx.log, auth, &ctx.paths)\n\t\t\t\t\t.rename_tunnel(name)\n\t\t\t\t\t.await?;\n\t\t\t} else {\n\t\t\t\t// still ensure they're logged in, otherwise subsequent serving will fail\n\t\t\t\tauth.get_credential().await?;\n\t\t\t}\n\n\t\t\t// likewise for license consent\n\t\t\tlegal::require_consent(&ctx.paths, args.accept_server_license_terms)?;\n\n\t\t\tlet current_exe = canonical_exe().map_err(|e| wrap(e, \"could not get current exe\"))?;\n\t\t\tlet root_path = ctx.paths.root().as_os_str().to_string_lossy();\n\t\t\tlet args = make_service_args(&root_path, &tunnel_args);\n\n\t\t\tmanager.register(current_exe, &args).await?;\n\t\t\tctx.log.result(format!(\"Service successfully installed! You can use `{APPLICATION_NAME} tunnel service log` to monitor it, and `{APPLICATION_NAME} tunnel service uninstall` to remove it.\"));\n\t\t}\n\t\tTunnelServiceSubCommands::Uninstall => {\n\t\t\tmanager.unregister().await?;\n\t\t}\n\t\tTunnelServiceSubCommands::Log => {\n\t\t\tmanager.show_logs().await?;\n\t\t}\n\t\tTunnelServiceSubCommands::InternalRun => {\n\t\t\tmanager\n\t\t\t\t.run(\n\t\t\t\t\tctx.paths.clone(),\n\t\t\t\t\tTunnelServiceContainer::new(ctx.args, tunnel_args),\n\t\t\t\t)\n\t\t\t\t.await?;\n\t\t}\n\t}\n\n\tOk(0)\n}\n\npub async fn user(ctx: CommandContext, user_args: TunnelUserSubCommands) -> Result<i32, AnyError> {\n\tlet auth = Auth::new(&ctx.paths, ctx.log.clone());\n\tmatch user_args {\n\t\tTunnelUserSubCommands::Login(mut login_args) => {\n\t\t\tauth.login(\n\t\t\t\tlogin_args.provider.map(|p| p.into()),\n\t\t\t\tlogin_args.access_token.take(),\n\t\t\t\tlogin_args.refresh_token.take(),\n\t\t\t)\n\t\t\t.await?;\n\t\t}\n\t\tTunnelUserSubCommands::Logout => {\n\t\t\tauth.clear_credentials()?;\n\t\t}\n\t\tTunnelUserSubCommands::Show => {\n\t\t\tif let Ok(Some(sc)) = auth.get_current_credential() {\n\t\t\t\tctx.log.result(format!(\"logged in with provider {}\", sc.provider));\n\t\t\t} else {\n\t\t\t\tctx.log.result(\"not logged in\");\n\t\t\t\treturn Ok(1);\n\t\t\t}\n\t\t}\n\t}\n\n\tOk(0)\n}\n\n/// Remove the tunnel used by this tunnel, if any.\npub async fn rename(ctx: CommandContext, rename_args: TunnelRenameArgs) -> Result<i32, AnyError> {\n\tlet auth = Auth::new(&ctx.paths, ctx.log.clone());\n\tlet mut dt = dev_tunnels::DevTunnels::new_remote_tunnel(&ctx.log, auth, &ctx.paths);\n\tdt.rename_tunnel(&rename_args.name).await?;\n\tctx.log.result(format!(\n\t\t\"Successfully renamed this tunnel to {}\",\n\t\t&rename_args.name\n\t));\n\n\tOk(0)\n}\n\n/// Remove the tunnel used by this tunnel, if any.\npub async fn unregister(ctx: CommandContext) -> Result<i32, AnyError> {\n\tlet auth = Auth::new(&ctx.paths, ctx.log.clone());\n\tlet mut dt = dev_tunnels::DevTunnels::new_remote_tunnel(&ctx.log, auth, &ctx.paths);\n\tdt.remove_tunnel().await?;\n\tOk(0)\n}\n\npub async fn restart(ctx: CommandContext) -> Result<i32, AnyError> {\n\tdo_single_rpc_call::<_, ()>(\n\t\t&ctx.paths.tunnel_lockfile(),\n\t\tctx.log,\n\t\tprotocol::singleton::METHOD_RESTART,\n\t\tprotocol::EmptyObject {},\n\t)\n\t.await\n\t.map(|_| 0)\n\t.map_err(|e| e.into())\n}\n\npub async fn kill(ctx: CommandContext) -> Result<i32, AnyError> {\n\tdo_single_rpc_call::<_, ()>(\n\t\t&ctx.paths.tunnel_lockfile(),\n\t\tctx.log,\n\t\tprotocol::singleton::METHOD_SHUTDOWN,\n\t\tprotocol::EmptyObject {},\n\t)\n\t.await\n\t.map(|_| 0)\n\t.map_err(|e| e.into())\n}\n\n#[derive(Serialize)]\npub struct StatusOutput {\n\tpub tunnel: Option<protocol::singleton::StatusWithTunnelName>,\n\tpub service_installed: bool,\n}\n\npub async fn status(ctx: CommandContext) -> Result<i32, AnyError> {\n\tlet tunnel = do_single_rpc_call::<_, protocol::singleton::StatusWithTunnelName>(\n\t\t&ctx.paths.tunnel_lockfile(),\n\t\tctx.log.clone(),\n\t\tprotocol::singleton::METHOD_STATUS,\n\t\tprotocol::EmptyObject {},\n\t)\n\t.await;\n\n\tlet service_installed = create_service_manager(ctx.log.clone(), &ctx.paths)\n\t\t.is_installed()\n\t\t.await\n\t\t.unwrap_or(false);\n\n\tctx.log.result(\n\t\tserde_json::to_string(&StatusOutput {\n\t\t\tservice_installed,\n\t\t\ttunnel: match tunnel {\n\t\t\t\tOk(s) => Some(s),\n\t\t\t\tErr(CodeError::NoRunningTunnel | CodeError::AsyncPipeFailed(_)) => None,\n\t\t\t\tErr(e) => return Err(e.into()),\n\t\t\t},\n\t\t})\n\t\t.unwrap(),\n\t);\n\n\tOk(0)\n}\n\n/// Removes unused servers.\npub async fn prune(ctx: CommandContext) -> Result<i32, AnyError> {\n\tget_all_servers(&ctx.paths)\n\t\t.into_iter()\n\t\t.map(|s| s.server_paths(&ctx.paths))\n\t\t.filter(|s| s.get_running_pid().is_none())\n\t\t.try_for_each(|s| {\n\t\t\tctx.log\n\t\t\t\t.result(format!(\"Deleted {}\", s.server_dir.display()));\n\t\t\ts.delete()\n\t\t})\n\t\t.map_err(AnyError::from)?;\n\n\tctx.log.result(\"Successfully removed all unused servers\");\n\n\tOk(0)\n}\n\n/// Starts the gateway server.\npub async fn serve(ctx: CommandContext, gateway_args: TunnelServeArgs) -> Result<i32, AnyError> {\n\tlet CommandContext {\n\t\tlog, paths, args, ..\n\t} = ctx;\n\n\tlet no_sleep = match gateway_args.no_sleep.then(SleepInhibitor::new) {\n\t\tSome(i) => match i.await {\n\t\t\tOk(i) => Some(i),\n\t\t\tErr(e) => {\n\t\t\t\twarning!(log, \"Could not inhibit sleep: {}\", e);\n\t\t\t\tNone\n\t\t\t}\n\t\t},\n\t\tNone => None,\n\t};\n\n\tlegal::require_consent(&paths, gateway_args.accept_server_license_terms)?;\n\n\tlet mut csa = (&args).into();\n\tgateway_args.server_args.apply_to(&mut csa);\n\tlet result = serve_with_csa(paths, log, gateway_args, csa, TUNNEL_CLI_LOCK_NAME).await;\n\tdrop(no_sleep);\n\n\tresult\n}\n\n/// Internal command used by port forwarding. It reads requests for forwarded ports\n/// on lines from stdin, as JSON. It uses singleton logic as well (though on\n/// a different tunnel than the main one used for the control server) so that\n/// all forward requests on a single machine go through a single hosted tunnel\n/// process. Without singleton logic, requests could get routed to processes\n/// that aren't forwarding a given port and then fail.\npub async fn forward(\n\tctx: CommandContext,\n\tmut forward_args: TunnelForwardArgs,\n) -> Result<i32, AnyError> {\n\t// Spooky: check IS_A_TTY before starting the stdin reader, since IS_A_TTY will\n\t// access stdin but a lock will later be held on stdin by the line-reader.\n\tif *IS_A_TTY {\n\t\ttrace!(ctx.log, \"port forwarding is an internal preview feature\");\n\t}\n\n\t// #region stdin reading logic:\n\tlet (own_ports_tx, own_ports_rx) = watch::channel(vec![]);\n\tlet ports_process_log = ctx.log.clone();\n\ttokio::spawn(async move {\n\t\tlet mut lines = BufReader::new(tokio::io::stdin()).lines();\n\t\twhile let Ok(Some(line)) = lines.next_line().await {\n\t\t\tmatch serde_json::from_str(&line) {\n\t\t\t\tOk(p) => {\n\t\t\t\t\tlet _ = own_ports_tx.send(p);\n\t\t\t\t}\n\t\t\t\tErr(e) => warning!(ports_process_log, \"error parsing ports: {}\", e),\n\t\t\t}\n\t\t}\n\t});\n\n\t// #region singleton acquisition\n\tlet shutdown = ShutdownRequest::create_rx([ShutdownRequest::CtrlC]);\n\tlet server = loop {\n\t\tif shutdown.is_open() {\n\t\t\treturn Ok(0);\n\t\t}\n\n\t\tmatch acquire_singleton(&ctx.paths.forwarding_lockfile()).await {\n\t\t\tOk(SingletonConnection::Client(stream)) => {\n\t\t\t\tdebug!(ctx.log, \"starting as client to singleton\");\n\t\t\t\tlet r = local_forwarding::client(local_forwarding::SingletonClientArgs {\n\t\t\t\t\tlog: ctx.log.clone(),\n\t\t\t\t\tshutdown: shutdown.clone(),\n\t\t\t\t\tstream,\n\t\t\t\t\tport_requests: own_ports_rx.clone(),\n\t\t\t\t})\n\t\t\t\t.await;\n\t\t\t\tif let Err(e) = r {\n\t\t\t\t\twarning!(ctx.log, \"error contacting forwarding singleton: {}\", e);\n\t\t\t\t}\n\t\t\t}\n\t\t\tOk(SingletonConnection::Singleton(server)) => break server,\n\t\t\tErr(e) => {\n\t\t\t\twarning!(ctx.log, \"error access singleton, retrying: {}\", e);\n\t\t\t\ttokio::time::sleep(Duration::from_secs(2)).await\n\t\t\t}\n\t\t}\n\t};\n\n\t// #region singleton handler\n\tlet auth = Auth::new(&ctx.paths, ctx.log.clone());\n\tif let (Some(p), Some(at)) = (\n\t\tforward_args.login.provider.take(),\n\t\tforward_args.login.access_token.take(),\n\t) {\n\t\tauth.login(\n\t\t\tSome(p.into()),\n\t\t\tSome(at),\n\t\t\tforward_args.login.refresh_token.take(),\n\t\t)\n\t\t.await?;\n\t}\n\n\tlet mut tunnels = DevTunnels::new_port_forwarding(&ctx.log, auth, &ctx.paths);\n\tlet tunnel = tunnels\n\t\t.start_new_launcher_tunnel(None, true, &forward_args.ports)\n\t\t.await?;\n\n\tlocal_forwarding::server(ctx.log, tunnel, server, own_ports_rx, shutdown).await?;\n\n\tOk(0)\n}\n\nfn get_connection_token(tunnel: &ActiveTunnel) -> String {\n\tlet mut hash = Sha256::new();\n\thash.update(tunnel.id.as_bytes());\n\tlet result = hash.finalize();\n\tlet mut result = b64::URL_SAFE_NO_PAD.encode(result);\n\tif result.starts_with('-') {\n\t\tresult.insert(0, 'a'); // avoid arg parsing issue\n\t}\n\n\tresult\n}\n\nasync fn serve_with_csa(\n\tpaths: LauncherPaths,\n\tmut log: log::Logger,\n\tgateway_args: TunnelServeArgs,\n\tmut csa: CodeServerArgs,\n\tapp_mutex_name: Option<&'static str>,\n) -> Result<i32, AnyError> {\n\tlet log_broadcast = BroadcastLogSink::new();\n\tlog = log.tee(log_broadcast.clone());\n\tlog::install_global_logger(log.clone()); // re-install so that library logs are captured\n\n\tdebug!(\n\t\tlog,\n\t\t\"Starting tunnel with `{} {}`\",\n\t\tAPPLICATION_NAME,\n\t\tstd::env::args().collect::<Vec<_>>().join(\" \")\n\t);\n\n\t// Intentionally read before starting the server. If the server updated and\n\t// respawn is requested, the old binary will get renamed, and then\n\t// current_exe will point to the wrong path.\n\tlet current_exe = std::env::current_exe().unwrap();\n\n\tlet mut vec = vec![\n\t\tShutdownRequest::CtrlC,\n\t\tShutdownRequest::ExeUninstalled(current_exe.to_owned()),\n\t];\n\tif let Some(p) = gateway_args\n\t\t.parent_process_id\n\t\t.and_then(|p| Pid::from_str(&p).ok())\n\t{\n\t\tvec.push(ShutdownRequest::ParentProcessKilled(p));\n\t}\n\tlet mut shutdown = ShutdownRequest::create_rx(vec);\n\n\tlet server = loop {\n\t\tif shutdown.is_open() {\n\t\t\treturn Ok(0);\n\t\t}\n\n\t\tmatch acquire_singleton(&paths.tunnel_lockfile()).await {\n\t\t\tOk(SingletonConnection::Client(stream)) => {\n\t\t\t\tdebug!(log, \"starting as client to singleton\");\n\t\t\t\tif gateway_args.name.is_some()\n\t\t\t\t\t|| !gateway_args.server_args.install_extension.is_empty()\n\t\t\t\t\t|| gateway_args.tunnel.tunnel_id.is_some()\n\t\t\t\t{\n\t\t\t\t\twarning!(\n\t\t\t\t\t\tlog,\n\t\t\t\t\t\t\"Command-line options will not be applied until the existing tunnel exits.\"\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet should_exit = start_singleton_client(SingletonClientArgs {\n\t\t\t\t\tlog: log.clone(),\n\t\t\t\t\tshutdown: shutdown.clone(),\n\t\t\t\t\tstream,\n\t\t\t\t})\n\t\t\t\t.await;\n\t\t\t\tif should_exit {\n\t\t\t\t\treturn Ok(0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tOk(SingletonConnection::Singleton(server)) => break server,\n\t\t\tErr(e) => {\n\t\t\t\twarning!(log, \"error access singleton, retrying: {}\", e);\n\t\t\t\ttokio::time::sleep(Duration::from_secs(2)).await\n\t\t\t}\n\t\t}\n\t};\n\n\tdebug!(log, \"starting as new singleton\");\n\n\tlet mut server =\n\t\tmake_singleton_server(log_broadcast.clone(), log.clone(), server, shutdown.clone());\n\tlet platform = spanf!(log, log.span(\"prereq\"), PreReqChecker::new().verify())?;\n\tlet _lock = app_mutex_name.map(AppMutex::new);\n\n\tlet auth = Auth::new(&paths, log.clone());\n\tlet mut dt = dev_tunnels::DevTunnels::new_remote_tunnel(&log, auth, &paths);\n\tloop {\n\t\tlet tunnel = if let Some(t) =\n\t\t\tfulfill_existing_tunnel_args(gateway_args.tunnel.clone(), &gateway_args.name)\n\t\t{\n\t\t\tdt.start_existing_tunnel(t).await\n\t\t} else {\n\t\t\ttokio::select! {\n\t\t\t\tt = dt.start_new_launcher_tunnel(gateway_args.name.as_deref(), gateway_args.random_name, &[CONTROL_PORT]) => t,\n\t\t\t\t_ = shutdown.wait() => return Ok(1),\n\t\t\t}\n\t\t}?;\n\n\t\tcsa.connection_token = Some(get_connection_token(&tunnel));\n\n\t\tlet mut r = start_singleton_server(SingletonServerArgs {\n\t\t\tlog: log.clone(),\n\t\t\ttunnel,\n\t\t\tpaths: &paths,\n\t\t\tcode_server_args: &csa,\n\t\t\tplatform,\n\t\t\tlog_broadcast: &log_broadcast,\n\t\t\tshutdown: shutdown.clone(),\n\t\t\tserver: &mut server,\n\t\t})\n\t\t.await?;\n\t\tr.tunnel.close().await.ok();\n\n\t\tmatch r.next {\n\t\t\tNext::Respawn => {\n\t\t\t\twarning!(log, \"respawn requested, starting new server\");\n\t\t\t\t// reuse current args, but specify no-forward since tunnels will\n\t\t\t\t// already be running in this process, and we cannot do a login\n\t\t\t\tlet args = std::env::args().skip(1).collect::<Vec<String>>();\n\t\t\t\tlet exit = new_std_command(current_exe)\n\t\t\t\t\t.args(args)\n\t\t\t\t\t.spawn()\n\t\t\t\t\t.map_err(|e| wrap(e, \"error respawning after update\"))?\n\t\t\t\t\t.wait()\n\t\t\t\t\t.map_err(|e| wrap(e, \"error waiting for child\"))?;\n\n\t\t\t\treturn Ok(exit.code().unwrap_or(1));\n\t\t\t}\n\t\t\tNext::Exit => {\n\t\t\t\tdebug!(log, \"Tunnel shut down\");\n\t\t\t\treturn Ok(0);\n\t\t\t}\n\t\t\tNext::Restart => continue,\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/commands/update.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::sync::Arc;\n\nuse indicatif::ProgressBar;\n\nuse crate::{\n\tconstants::PRODUCT_NAME_LONG,\n\tself_update::SelfUpdate,\n\tupdate_service::UpdateService,\n\tutil::{errors::AnyError, http::ReqwestSimpleHttp, input::ProgressBarReporter},\n};\n\nuse super::{args::StandaloneUpdateArgs, CommandContext};\n\npub async fn update(ctx: CommandContext, args: StandaloneUpdateArgs) -> Result<i32, AnyError> {\n\tlet update_service = UpdateService::new(\n\t\tctx.log.clone(),\n\t\tArc::new(ReqwestSimpleHttp::with_client(ctx.http.clone())),\n\t);\n\tlet update_service = SelfUpdate::new(&update_service)?;\n\n\tlet _ = update_service.cleanup_old_update();\n\n\tlet current_version = update_service.get_current_release().await?;\n\tif update_service.is_up_to_date_with(&current_version) {\n\t\tctx.log.result(format!(\n\t\t\t\"{} is already to to date ({})\",\n\t\t\tPRODUCT_NAME_LONG, current_version.commit\n\t\t));\n\t\treturn Ok(1);\n\t}\n\n\tif args.check {\n\t\tctx.log\n\t\t\t.result(format!(\"Update to {current_version} is available\"));\n\t\treturn Ok(0);\n\t}\n\n\tlet pb = ProgressBar::new(1);\n\tpb.set_message(\"Downloading...\");\n\tupdate_service\n\t\t.do_update(&current_version, ProgressBarReporter::from(pb))\n\t\t.await?;\n\tctx.log\n\t\t.result(format!(\"Successfully updated to {current_version}\"));\n\n\tOk(0)\n}\n"
  },
  {
    "path": "cli/src/commands/version.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::path::{Path, PathBuf};\n\nuse crate::{\n\tdesktop::{prompt_to_install, CodeVersionManager, RequestedVersion},\n\tlog,\n\tutil::{\n\t\terrors::{AnyError, NoInstallInUserProvidedPath},\n\t\tprereqs::PreReqChecker,\n\t},\n};\n\nuse super::{args::UseVersionArgs, CommandContext};\n\npub async fn switch_to(ctx: CommandContext, args: UseVersionArgs) -> Result<i32, AnyError> {\n\tlet platform = PreReqChecker::new().verify().await?;\n\tlet vm = CodeVersionManager::new(ctx.log.clone(), &ctx.paths, platform);\n\tlet version = RequestedVersion::try_from(args.name.as_str())?;\n\n\tlet maybe_path = match args.install_dir {\n\t\tSome(d) => Some(\n\t\t\tCodeVersionManager::get_entrypoint_for_install_dir(&PathBuf::from(&d))\n\t\t\t\t.await\n\t\t\t\t.ok_or(NoInstallInUserProvidedPath(d))?,\n\t\t),\n\t\tNone => vm.try_get_entrypoint(&version).await,\n\t};\n\n\tmatch maybe_path {\n\t\tSome(p) => {\n\t\t\tvm.set_preferred_version(version.clone(), p.clone()).await?;\n\t\t\tprint_now_using(&ctx.log, &version, &p);\n\t\t\tOk(0)\n\t\t}\n\t\tNone => {\n\t\t\tprompt_to_install(&version);\n\t\t\tOk(1)\n\t\t}\n\t}\n}\n\npub async fn show(ctx: CommandContext) -> Result<i32, AnyError> {\n\tlet platform = PreReqChecker::new().verify().await?;\n\tlet vm = CodeVersionManager::new(ctx.log.clone(), &ctx.paths, platform);\n\n\tlet version = vm.get_preferred_version();\n\tprintln!(\"Current quality: {version}\");\n\tmatch vm.try_get_entrypoint(&version).await {\n\t\tSome(p) => println!(\"Installation path: {}\", p.display()),\n\t\tNone => println!(\"No existing installation found\"),\n\t}\n\n\tOk(0)\n}\n\nfn print_now_using(log: &log::Logger, version: &RequestedVersion, path: &Path) {\n\tlog.result(format!(\"Now using {} from {}\", version, path.display()));\n}\n"
  },
  {
    "path": "cli/src/commands.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nmod context;\n\npub mod args;\npub mod serve_web;\npub mod tunnels;\npub mod update;\npub mod version;\npub use context::CommandContext;\n"
  },
  {
    "path": "cli/src/constants.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse serde::Deserialize;\nuse std::{collections::HashMap, io::IsTerminal};\n\nuse const_format::concatcp;\nuse lazy_static::lazy_static;\n\nuse crate::options::Quality;\n\npub const CONTROL_PORT: u16 = 31545;\n\n/// Protocol version sent to clients. This can be used to indicate new or\n/// changed capabilities that clients may wish to leverage.\n///  1 - Initial protocol version\n///  2 - Addition of `serve.compressed` property to control whether servermsg's\n///      are compressed bidirectionally.\n///  3 - The server's connection token is set to a SHA256 hash of the tunnel ID\n///  4 - The server's msgpack messages are no longer length-prefixed\npub const PROTOCOL_VERSION: u32 = 4;\n\n/// Prefix for the tunnel tag that includes the version.\npub const PROTOCOL_VERSION_TAG_PREFIX: &str = \"protocolv\";\n/// Tag for the current protocol version, which is included in dev tunnels.\npub const PROTOCOL_VERSION_TAG: &str = concatcp!(\"protocolv\", PROTOCOL_VERSION);\n\npub const VSCODE_CLI_VERSION: Option<&'static str> = option_env!(\"VSCODE_CLI_VERSION\");\npub const VSCODE_CLI_AI_KEY: Option<&'static str> = option_env!(\"VSCODE_CLI_AI_KEY\");\npub const VSCODE_CLI_AI_ENDPOINT: Option<&'static str> = option_env!(\"VSCODE_CLI_AI_ENDPOINT\");\npub const VSCODE_CLI_QUALITY: Option<&'static str> = option_env!(\"VSCODE_CLI_QUALITY\");\npub const DOCUMENTATION_URL: Option<&'static str> = option_env!(\"VSCODE_CLI_DOCUMENTATION_URL\");\npub const VSCODE_CLI_COMMIT: Option<&'static str> = option_env!(\"VSCODE_CLI_COMMIT\");\npub const VSCODE_CLI_UPDATE_ENDPOINT: Option<&'static str> = option_env!(\"VSCODE_CLI_UPDATE_URL\");\n\n/// Windows lock name for the running tunnel service. Used by the setup script\n/// to detect a tunnel process. See #179265.\npub const TUNNEL_SERVICE_LOCK_NAME: Option<&'static str> =\n\toption_env!(\"VSCODE_CLI_WIN32_TUNNEL_SERVICE_MUTEX\");\n\n/// Windows lock name for the running tunnel without a service. Used by the setup\n/// script to detect a tunnel process. See #179265.\npub const TUNNEL_CLI_LOCK_NAME: Option<&'static str> = option_env!(\"VSCODE_CLI_WIN32_TUNNEL_MUTEX\");\n\npub const TUNNEL_SERVICE_USER_AGENT_ENV_VAR: &str = \"TUNNEL_SERVICE_USER_AGENT\";\n\n/// Application name as it appears on the CLI.\npub const APPLICATION_NAME: &str = match option_env!(\"VSCODE_CLI_APPLICATION_NAME\") {\n\tSome(n) => n,\n\tNone => \"code\",\n};\n\n/// Full name of the product with its version.\npub const PRODUCT_NAME_LONG: &str = match option_env!(\"VSCODE_CLI_NAME_LONG\") {\n\tSome(n) => n,\n\tNone => \"Code - OSS\",\n};\n\n/// Name of the application without quality information.\npub const QUALITYLESS_PRODUCT_NAME: &str = match option_env!(\"VSCODE_CLI_QUALITYLESS_PRODUCT_NAME\")\n{\n\tSome(n) => n,\n\tNone => \"Code\",\n};\n\n/// Name of the application without quality information.\npub const QUALITYLESS_SERVER_NAME: &str = concatcp!(QUALITYLESS_PRODUCT_NAME, \" Server\");\n\npub const QUALITY: &str = match VSCODE_CLI_QUALITY {\n\tSome(q) => q,\n\t_ => \"oss\",\n};\n\n/// Web URL the editor is hosted at. For VS Code, this is vscode.dev.\npub const EDITOR_WEB_URL: Option<&'static str> = option_env!(\"VSCODE_CLI_TUNNEL_EDITOR_WEB_URL\");\n\n/// Name shown in places where we need to tell a user what a process is, e.g. in sleep inhibition.\npub const TUNNEL_ACTIVITY_NAME: &str = concatcp!(PRODUCT_NAME_LONG, \" Tunnel\");\n\n/// Download URL of the desktop product.\npub const PRODUCT_DOWNLOAD_URL: Option<&'static str> = option_env!(\"VSCODE_CLI_DOWNLOAD_URL\");\n\nconst NONINTERACTIVE_VAR: &str = \"VSCODE_CLI_NONINTERACTIVE\";\n\n/// Default data CLI data directory.\npub const DEFAULT_DATA_PARENT_DIR: &str = match option_env!(\"VSCODE_CLI_DATA_FOLDER_NAME\") {\n\tSome(n) => n,\n\tNone => \".vscode-oss\",\n};\n\npub fn get_default_user_agent() -> String {\n\tformat!(\n\t\t\"vscode-server-launcher/{}\",\n\t\tVSCODE_CLI_VERSION.unwrap_or(\"dev\")\n\t)\n}\n\nconst NO_COLOR_ENV: &str = \"NO_COLOR\";\n\n#[derive(Deserialize, Debug)]\n#[serde(rename_all = \"camelCase\")]\npub struct ServerQualityInfo {\n\tpub server_application_name: String,\n}\n\nlazy_static! {\n\tpub static ref TUNNEL_SERVICE_USER_AGENT: String =\n\t\tmatch std::env::var(TUNNEL_SERVICE_USER_AGENT_ENV_VAR) {\n\t\t\tOk(ua) if !ua.is_empty() => format!(\"{} {}\", ua, get_default_user_agent()),\n\t\t\t_ => get_default_user_agent(),\n\t\t};\n\n\t/// Map of qualities to the server name\n\tpub static ref SERVER_NAME_MAP: Option<HashMap<Quality, ServerQualityInfo>> =\n\t\toption_env!(\"VSCODE_CLI_TUNNEL_SERVER_QUALITIES\").and_then(|s| serde_json::from_str(s).unwrap());\n\n\t/// Whether i/o interactions are allowed in the current CLI.\n\tpub static ref IS_A_TTY: bool = std::io::stdin().is_terminal();\n\n\t/// Whether i/o interactions are allowed in the current CLI.\n\tpub static ref COLORS_ENABLED: bool = *IS_A_TTY && std::env::var(NO_COLOR_ENV).is_err();\n\n\t/// Whether i/o interactions are allowed in the current CLI.\n\tpub static ref IS_INTERACTIVE_CLI: bool = *IS_A_TTY && std::env::var(NONINTERACTIVE_VAR).is_err();\n\n\t/// Map of quality names to arrays of app IDs used for them, for example, `{\"stable\":[\"ABC123\"]}`\n\tpub static ref WIN32_APP_IDS: Option<Vec<String>> =\n\t\toption_env!(\"VSCODE_CLI_WIN32_APP_IDS\").map(|s| s.split(',').map(|s| s.to_string()).collect());\n}\n"
  },
  {
    "path": "cli/src/desktop/version_manager.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tffi::OsString,\n\tfmt, io,\n\tpath::{Path, PathBuf},\n};\n\nuse lazy_static::lazy_static;\nuse regex::Regex;\nuse serde::{Deserialize, Serialize};\n\nuse crate::{\n\tconstants::{PRODUCT_DOWNLOAD_URL, QUALITY, QUALITYLESS_PRODUCT_NAME},\n\tlog,\n\tstate::{LauncherPaths, PersistedState},\n\tupdate_service::Platform,\n\tutil::{\n\t\tcommand::new_std_command,\n\t\terrors::{AnyError, InvalidRequestedVersion},\n\t},\n};\n\n/// Parsed instance that a user can request.\n#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]\n#[serde(tag = \"t\", content = \"c\")]\npub enum RequestedVersion {\n\tDefault,\n\tCommit(String),\n\tPath(String),\n}\n\nlazy_static! {\n\tstatic ref COMMIT_RE: Regex = Regex::new(r\"^[a-e0-f]{40}$\").unwrap();\n}\n\nimpl RequestedVersion {\n\tpub fn get_command(&self) -> String {\n\t\tmatch self {\n\t\t\tRequestedVersion::Default => {\n\t\t\t\tformat!(\"code version use {QUALITY}\")\n\t\t\t}\n\t\t\tRequestedVersion::Commit(commit) => {\n\t\t\t\tformat!(\"code version use {QUALITY}/{commit}\")\n\t\t\t}\n\t\t\tRequestedVersion::Path(path) => {\n\t\t\t\tformat!(\"code version use {path}\")\n\t\t\t}\n\t\t}\n\t}\n}\n\nimpl std::fmt::Display for RequestedVersion {\n\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n\t\tmatch self {\n\t\t\tRequestedVersion::Default => {\n\t\t\t\twrite!(f, \"{QUALITY}\")\n\t\t\t}\n\t\t\tRequestedVersion::Commit(commit) => {\n\t\t\t\twrite!(f, \"{QUALITY}/{commit}\")\n\t\t\t}\n\t\t\tRequestedVersion::Path(path) => write!(f, \"{path}\"),\n\t\t}\n\t}\n}\n\nimpl TryFrom<&str> for RequestedVersion {\n\ttype Error = InvalidRequestedVersion;\n\n\tfn try_from(s: &str) -> Result<Self, Self::Error> {\n\t\tif s == QUALITY {\n\t\t\treturn Ok(RequestedVersion::Default);\n\t\t}\n\n\t\tif Path::is_absolute(&PathBuf::from(s)) {\n\t\t\treturn Ok(RequestedVersion::Path(s.to_string()));\n\t\t}\n\n\t\tif COMMIT_RE.is_match(s) {\n\t\t\treturn Ok(RequestedVersion::Commit(s.to_string()));\n\t\t}\n\n\t\tErr(InvalidRequestedVersion())\n\t}\n}\n\n#[derive(Serialize, Deserialize, Clone, Default)]\nstruct Stored {\n\t/// Map of requested versions to locations where those versions are installed.\n\tversions: Vec<(RequestedVersion, OsString)>,\n\tcurrent: usize,\n}\n\npub struct CodeVersionManager {\n\tstate: PersistedState<Stored>,\n\tlog: log::Logger,\n}\n\nimpl CodeVersionManager {\n\tpub fn new(log: log::Logger, lp: &LauncherPaths, _platform: Platform) -> Self {\n\t\tCodeVersionManager {\n\t\t\tlog,\n\t\t\tstate: PersistedState::new(lp.root().join(\"versions.json\")),\n\t\t}\n\t}\n\n\t/// Tries to find the binary entrypoint for VS Code installed in the path.\n\tpub async fn get_entrypoint_for_install_dir(path: &Path) -> Option<PathBuf> {\n\t\tuse tokio::sync::mpsc;\n\n\t\t// Check whether the user is supplying a path to the CLI directly (e.g. #164622)\n\t\tif let Ok(true) = path.metadata().map(|m| m.is_file()) {\n\t\t\tlet result = new_std_command(path)\n\t\t\t\t.args([\"--version\"])\n\t\t\t\t.output()\n\t\t\t\t.map(|o| o.status.success());\n\n\t\t\tif let Ok(true) = result {\n\t\t\t\treturn Some(path.to_owned());\n\t\t\t}\n\t\t}\n\n\t\tlet (tx, mut rx) = mpsc::channel(1);\n\n\t\t// Look for all the possible paths in parallel\n\t\tfor entry in DESKTOP_CLI_RELATIVE_PATH.split(',') {\n\t\t\tlet my_path = path.join(entry);\n\t\t\tlet my_tx = tx.clone();\n\t\t\ttokio::spawn(async move {\n\t\t\t\tif tokio::fs::metadata(&my_path).await.is_ok() {\n\t\t\t\t\tmy_tx.send(my_path).await.ok();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tdrop(tx); // drop so rx gets None if no sender emits\n\n\t\trx.recv().await\n\t}\n\n\t/// Sets the \"version\" as the persisted one for the user.\n\tpub async fn set_preferred_version(\n\t\t&self,\n\t\tversion: RequestedVersion,\n\t\tpath: PathBuf,\n\t) -> Result<(), AnyError> {\n\t\tlet mut stored = self.state.load();\n\t\tstored.current = self.store_version_path(&mut stored, version, path);\n\t\tself.state.save(stored)?;\n\t\tOk(())\n\t}\n\n\t/// Stores or updates the path used for the given version. Returns the index\n\t/// that the path exists at.\n\tfn store_version_path(\n\t\t&self,\n\t\tstate: &mut Stored,\n\t\tversion: RequestedVersion,\n\t\tpath: PathBuf,\n\t) -> usize {\n\t\tif let Some(i) = state.versions.iter().position(|(v, _)| v == &version) {\n\t\t\tstate.versions[i].1 = path.into_os_string();\n\t\t\ti\n\t\t} else {\n\t\t\tstate\n\t\t\t\t.versions\n\t\t\t\t.push((version.clone(), path.into_os_string()));\n\t\t\tstate.versions.len() - 1\n\t\t}\n\t}\n\n\t/// Gets the currently preferred version based on set_preferred_version.\n\tpub fn get_preferred_version(&self) -> RequestedVersion {\n\t\tlet stored = self.state.load();\n\t\tstored\n\t\t\t.versions\n\t\t\t.get(stored.current)\n\t\t\t.map(|(v, _)| v.clone())\n\t\t\t.unwrap_or(RequestedVersion::Default)\n\t}\n\n\t/// Tries to get the entrypoint for the version, if one can be found.\n\tpub async fn try_get_entrypoint(&self, version: &RequestedVersion) -> Option<PathBuf> {\n\t\tlet mut state = self.state.load();\n\t\tif let Some((_, install_path)) = state.versions.iter().find(|(v, _)| v == version) {\n\t\t\tlet p = PathBuf::from(install_path);\n\t\t\tif p.exists() {\n\t\t\t\treturn Some(p);\n\t\t\t}\n\t\t}\n\n\t\t// For simple quality requests, see if that's installed already on the system\n\t\tlet candidates = match &version {\n\t\t\tRequestedVersion::Default => match detect_installed_program(&self.log) {\n\t\t\t\tOk(p) => p,\n\t\t\t\tErr(e) => {\n\t\t\t\t\twarning!(self.log, \"error looking up installed applications: {}\", e);\n\t\t\t\t\treturn None;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_ => return None,\n\t\t};\n\n\t\tlet found = match candidates.into_iter().next() {\n\t\t\tSome(p) => p,\n\t\t\tNone => return None,\n\t\t};\n\n\t\t// stash the found path for faster lookup\n\t\tself.store_version_path(&mut state, version.clone(), found.clone());\n\t\tif let Err(e) = self.state.save(state) {\n\t\t\tdebug!(self.log, \"error caching version path: {}\", e);\n\t\t}\n\n\t\tSome(found)\n\t}\n}\n\n/// Shows a nice UI prompt to users asking them if they want to install the\n/// requested version.\npub fn prompt_to_install(version: &RequestedVersion) {\n\tprintln!(\"No installation of {QUALITYLESS_PRODUCT_NAME} {version} was found.\");\n\n\tif let RequestedVersion::Default = version {\n\t\tif let Some(uri) = PRODUCT_DOWNLOAD_URL {\n\t\t\t// todo: on some platforms, we may be able to help automate installation. For example,\n\t\t\t// we can unzip the app ourselves on macOS and on windows we can download and spawn the GUI installer\n\t\t\t#[cfg(target_os = \"linux\")]\n\t\t\tprintln!(\"Install it from your system's package manager or {uri}, restart your shell, and try again.\");\n\t\t\t#[cfg(target_os = \"macos\")]\n\t\t\tprintln!(\"Download and unzip it from {} and try again.\", uri);\n\t\t\t#[cfg(target_os = \"windows\")]\n\t\t\tprintln!(\"Install it from {} and try again.\", uri);\n\t\t}\n\t}\n\n\tprintln!();\n\tprintln!(\"If you already installed {} and we didn't detect it, run `{} --install-dir /path/to/installation`\", QUALITYLESS_PRODUCT_NAME, version.get_command());\n}\n\n#[cfg(target_os = \"macos\")]\nfn detect_installed_program(log: &log::Logger) -> io::Result<Vec<PathBuf>> {\n\tuse crate::constants::PRODUCT_NAME_LONG;\n\n\t// easy, fast detection for where apps are usually installed\n\tlet mut probable = PathBuf::from(\"/Applications\");\n\tprobable.push(format!(\"{}.app\", PRODUCT_NAME_LONG));\n\tif probable.exists() {\n\t\tprobable.extend([\"Contents/Resources\", \"app\", \"bin\", \"code\"]);\n\t\treturn Ok(vec![probable]);\n\t}\n\n\t// _Much_ slower detection using the system_profiler (~10s for me). While the\n\t// profiler can output nicely structure plist xml, pulling in an xml parser\n\t// just for this is overkill. The default output looks something like...\n\t//\n\t//     Visual Studio Code - Exploration 2:\n\t//\n\t//        Version: 1.73.0-exploration\n\t//        Obtained from: Identified Developer\n\t//        Last Modified: 9/23/22, 10:16 AM\n\t//        Kind: Intel\n\t//        Signed by: Developer ID Application: Microsoft Corporation (UBF8T346G9), Developer ID Certification Authority, Apple Root CA\n\t//        Location: /Users/connor/Downloads/Visual Studio Code - Exploration 2.app\n\t//\n\t// So, use a simple state machine that looks for the first line, and then for\n\t// the `Location:` line for the path.\n\tinfo!(log, \"Searching for installations on your machine, this is done once and will take about 10 seconds...\");\n\n\tlet stdout = new_std_command(\"system_profiler\")\n\t\t.args([\"SPApplicationsDataType\", \"-detailLevel\", \"mini\"])\n\t\t.output()?\n\t\t.stdout;\n\n\tenum State {\n\t\tLookingForName,\n\t\tLookingForLocation,\n\t}\n\n\tlet mut state = State::LookingForName;\n\tlet mut output: Vec<PathBuf> = vec![];\n\tconst LOCATION_PREFIX: &str = \"Location:\";\n\tfor mut line in String::from_utf8_lossy(&stdout).lines() {\n\t\tline = line.trim();\n\t\tmatch state {\n\t\t\tState::LookingForName => {\n\t\t\t\tif line.starts_with(PRODUCT_NAME_LONG) && line.ends_with(':') {\n\t\t\t\t\tstate = State::LookingForLocation;\n\t\t\t\t}\n\t\t\t}\n\t\t\tState::LookingForLocation => {\n\t\t\t\tif let Some(suffix) = line.strip_prefix(LOCATION_PREFIX) {\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\t[suffix.trim(), \"Contents/Resources\", \"app\", \"bin\", \"code\"]\n\t\t\t\t\t\t\t.iter()\n\t\t\t\t\t\t\t.collect(),\n\t\t\t\t\t);\n\t\t\t\t\tstate = State::LookingForName;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sort shorter paths to the front, preferring \"more global\" installs, and\n\t// incidentally preferring local installs over Parallels 'installs'.\n\toutput.sort_by_key(|a| a.as_os_str().len());\n\n\tOk(output)\n}\n\n#[cfg(windows)]\nfn detect_installed_program(_log: &log::Logger) -> io::Result<Vec<PathBuf>> {\n\tuse crate::constants::{APPLICATION_NAME, WIN32_APP_IDS};\n\tuse winreg::enums::{HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE};\n\tuse winreg::RegKey;\n\n\tlet mut output: Vec<PathBuf> = vec![];\n\tlet app_ids = match WIN32_APP_IDS.as_ref() {\n\t\tSome(ids) => ids,\n\t\tNone => return Ok(output),\n\t};\n\n\tlet scopes = [\n\t\t(\n\t\t\tHKEY_LOCAL_MACHINE,\n\t\t\t\"SOFTWARE\\\\Wow6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\",\n\t\t),\n\t\t(\n\t\t\tHKEY_LOCAL_MACHINE,\n\t\t\t\"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\",\n\t\t),\n\t\t(\n\t\t\tHKEY_CURRENT_USER,\n\t\t\t\"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\",\n\t\t),\n\t];\n\n\tfor (scope, key) in scopes {\n\t\tlet cur_ver = match RegKey::predef(scope).open_subkey(key) {\n\t\t\tOk(k) => k,\n\t\t\tErr(_) => continue,\n\t\t};\n\n\t\tfor key in cur_ver.enum_keys().flatten() {\n\t\t\tif app_ids.iter().any(|id| key.contains(id)) {\n\t\t\t\tlet sk = cur_ver.open_subkey(&key)?;\n\t\t\t\tif let Ok(location) = sk.get_value::<String, _>(\"InstallLocation\") {\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tlocation.as_str(),\n\t\t\t\t\t\t\t\"bin\",\n\t\t\t\t\t\t\t&format!(\"{}.cmd\", APPLICATION_NAME),\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.iter()\n\t\t\t\t\t\t.collect(),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tOk(output)\n}\n\n// Looks for the given binary name in the PATH, returning all candidate matches.\n// Based on https://github.dev/microsoft/vscode-js-debug/blob/7594d05518df6700df51771895fcad0ddc7f92f9/src/common/pathUtils.ts#L15\n#[cfg(target_os = \"linux\")]\nfn detect_installed_program(log: &log::Logger) -> io::Result<Vec<PathBuf>> {\n\tuse crate::constants::APPLICATION_NAME;\n\n\tlet path = match std::env::var(\"PATH\") {\n\t\tOk(p) => p,\n\t\tErr(e) => {\n\t\t\tinfo!(log, \"PATH is empty ({}), skipping detection\", e);\n\t\t\treturn Ok(vec![]);\n\t\t}\n\t};\n\n\tlet current_exe = std::env::current_exe().expect(\"expected to read current exe\");\n\tlet mut output = vec![];\n\tfor dir in path.split(':') {\n\t\tlet target: PathBuf = [dir, APPLICATION_NAME].iter().collect();\n\t\tmatch std::fs::canonicalize(&target) {\n\t\t\tOk(m) if m == current_exe => continue,\n\t\t\tOk(_) => {}\n\t\t\tErr(_) => continue,\n\t\t};\n\n\t\t// note: intentionally store the non-canonicalized version, since if it's a\n\t\t// symlink, (1) it's probably desired to use it and (2) resolving the link\n\t\t// breaks snap installations.\n\t\toutput.push(target);\n\t}\n\n\tOk(output)\n}\n\nconst DESKTOP_CLI_RELATIVE_PATH: &str = if cfg!(target_os = \"macos\") {\n\t\"Contents/Resources/app/bin/code\"\n} else if cfg!(target_os = \"windows\") {\n\t\"bin/code.cmd,bin/code-insiders.cmd,bin/code-exploration.cmd\"\n} else {\n\t\"bin/code,bin/code-insiders,bin/code-exploration\"\n};\n\n#[cfg(test)]\nmod tests {\n\tuse std::{\n\t\tfs::{create_dir_all, File},\n\t\tio::Write,\n\t};\n\n\tuse super::*;\n\n\tfn make_fake_vscode_install(path: &Path) {\n\t\tlet bin = DESKTOP_CLI_RELATIVE_PATH\n\t\t\t.split(',')\n\t\t\t.next()\n\t\t\t.expect(\"expected exe path\");\n\n\t\tlet binary_file_path = path.join(bin);\n\t\tlet parent_dir_path = binary_file_path.parent().expect(\"expected parent path\");\n\n\t\tcreate_dir_all(parent_dir_path).expect(\"expected to create parent dir\");\n\n\t\tlet mut binary_file = File::create(binary_file_path).expect(\"expected to make file\");\n\t\tbinary_file\n\t\t\t.write_all(b\"\")\n\t\t\t.expect(\"expected to write binary\");\n\t}\n\n\tfn make_multiple_vscode_install() -> tempfile::TempDir {\n\t\tlet dir = tempfile::tempdir().expect(\"expected to make temp dir\");\n\t\tmake_fake_vscode_install(&dir.path().join(\"desktop/stable\"));\n\t\tmake_fake_vscode_install(&dir.path().join(\"desktop/1.68.2\"));\n\t\tdir\n\t}\n\n\t#[test]\n\tfn test_detect_installed_program() {\n\t\t// developers can run this test and debug output manually; VS Code will not\n\t\t// be installed in CI, so the test only makes sure it doesn't error out\n\t\tlet result = detect_installed_program(&log::Logger::test());\n\t\tprintln!(\"result: {result:?}\");\n\t\tassert!(result.is_ok());\n\t}\n\n\t#[tokio::test]\n\tasync fn test_set_preferred_version() {\n\t\tlet dir = make_multiple_vscode_install();\n\t\tlet lp = LauncherPaths::new_without_replacements(dir.path().to_owned());\n\t\tlet vm1 = CodeVersionManager::new(log::Logger::test(), &lp, Platform::LinuxARM64);\n\n\t\tassert_eq!(vm1.get_preferred_version(), RequestedVersion::Default);\n\t\tvm1.set_preferred_version(\n\t\t\tRequestedVersion::Commit(\"foobar\".to_string()),\n\t\t\tdir.path().join(\"desktop/stable\"),\n\t\t)\n\t\t.await\n\t\t.expect(\"expected to store\");\n\t\tvm1.set_preferred_version(\n\t\t\tRequestedVersion::Commit(\"foobar2\".to_string()),\n\t\t\tdir.path().join(\"desktop/stable\"),\n\t\t)\n\t\t.await\n\t\t.expect(\"expected to store\");\n\n\t\tassert_eq!(\n\t\t\tvm1.get_preferred_version(),\n\t\t\tRequestedVersion::Commit(\"foobar2\".to_string()),\n\t\t);\n\n\t\tlet vm2 = CodeVersionManager::new(log::Logger::test(), &lp, Platform::LinuxARM64);\n\t\tassert_eq!(\n\t\t\tvm2.get_preferred_version(),\n\t\t\tRequestedVersion::Commit(\"foobar2\".to_string()),\n\t\t);\n\t}\n\n\t#[tokio::test]\n\tasync fn test_gets_entrypoint() {\n\t\tlet dir = make_multiple_vscode_install();\n\n\t\tassert!(CodeVersionManager::get_entrypoint_for_install_dir(\n\t\t\t&dir.path().join(\"desktop\").join(\"stable\")\n\t\t)\n\t\t.await\n\t\t.is_some());\n\n\t\tassert!(\n\t\t\tCodeVersionManager::get_entrypoint_for_install_dir(&dir.path().join(\"invalid\"))\n\t\t\t\t.await\n\t\t\t\t.is_none()\n\t\t);\n\t}\n\n\t#[tokio::test]\n\tasync fn test_gets_entrypoint_as_binary() {\n\t\tlet dir = tempfile::tempdir().expect(\"expected to make temp dir\");\n\n\t\t#[cfg(windows)]\n\t\tlet binary_file_path = {\n\t\t\tlet path = dir.path().join(\"code.cmd\");\n\t\t\tFile::create(&path).expect(\"expected to create file\");\n\t\t\tpath\n\t\t};\n\n\t\t#[cfg(unix)]\n\t\tlet binary_file_path = {\n\t\t\tuse std::fs;\n\t\t\tuse std::os::unix::fs::PermissionsExt;\n\n\t\t\tlet path = dir.path().join(\"code\");\n\t\t\t{\n\t\t\t\tlet mut f = File::create(&path).expect(\"expected to create file\");\n\t\t\t\tf.write_all(b\"#!/bin/sh\")\n\t\t\t\t\t.expect(\"expected to write to file\");\n\t\t\t}\n\t\t\tfs::set_permissions(&path, fs::Permissions::from_mode(0o777))\n\t\t\t\t.expect(\"expected to set permissions\");\n\t\t\tpath\n\t\t};\n\n\t\tassert_eq!(\n\t\t\tCodeVersionManager::get_entrypoint_for_install_dir(&binary_file_path).await,\n\t\t\tSome(binary_file_path)\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "cli/src/desktop.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nmod version_manager;\n\npub use version_manager::{prompt_to_install, CodeVersionManager, RequestedVersion};\n"
  },
  {
    "path": "cli/src/download_cache.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tfs::create_dir_all,\n\tpath::{Path, PathBuf},\n};\n\nuse futures::Future;\nuse tokio::fs::remove_dir_all;\n\nuse crate::{\n\tstate::PersistedState,\n\tutil::errors::{wrap, AnyError, WrappedError},\n};\n\nconst KEEP_LRU: usize = 5;\nconst STAGING_SUFFIX: &str = \".staging\";\nconst RENAME_ATTEMPTS: u32 = 20;\nconst RENAME_DELAY: std::time::Duration = std::time::Duration::from_millis(200);\nconst PERSISTED_STATE_FILE_NAME: &str = \"lru.json\";\n\n#[derive(Clone)]\npub struct DownloadCache {\n\tpath: PathBuf,\n\tstate: PersistedState<Vec<String>>,\n}\n\nimpl DownloadCache {\n\tpub fn new(path: PathBuf) -> DownloadCache {\n\t\tDownloadCache {\n\t\t\tstate: PersistedState::new(path.join(PERSISTED_STATE_FILE_NAME)),\n\t\t\tpath,\n\t\t}\n\t}\n\n\t/// Gets the value stored on the state\n\tpub fn get(&self) -> Vec<String> {\n\t\tself.state.load()\n\t}\n\n\t/// Gets the download cache path. Names of cache entries can be formed by\n\t/// joining them to the path.\n\tpub fn path(&self) -> &Path {\n\t\t&self.path\n\t}\n\n\t/// Gets whether a cache exists with the name already. Marks it as recently\n\t/// used if it does exist.\n\tpub fn exists(&self, name: &str) -> Option<PathBuf> {\n\t\tlet p = self.path.join(name);\n\t\tif !p.exists() {\n\t\t\treturn None;\n\t\t}\n\n\t\tlet _ = self.touch(name.to_string());\n\t\tSome(p)\n\t}\n\n\t/// Removes the item from the cache, if it exists\n\tpub fn delete(&self, name: &str) -> Result<(), WrappedError> {\n\t\tlet f = self.path.join(name);\n\t\tif f.exists() {\n\t\t\tstd::fs::remove_dir_all(f).map_err(|e| wrap(e, \"error removing cached folder\"))?;\n\t\t}\n\n\t\tself.state.update(|l| {\n\t\t\tl.retain(|n| n != name);\n\t\t})\n\t}\n\n\t/// Calls the function to create the cached folder if it doesn't exist,\n\t/// returning the path where the folder is. Note that the path passed to\n\t/// the `do_create` method is a staging path and will not be the same as the\n\t/// final returned path.\n\tpub async fn create<F, T>(\n\t\t&self,\n\t\tname: impl AsRef<str>,\n\t\tdo_create: F,\n\t) -> Result<PathBuf, AnyError>\n\twhere\n\t\tF: FnOnce(PathBuf) -> T,\n\t\tT: Future<Output = Result<(), AnyError>> + Send,\n\t{\n\t\tlet name = name.as_ref();\n\t\tlet target_dir = self.path.join(name);\n\t\tif target_dir.exists() {\n\t\t\treturn Ok(target_dir);\n\t\t}\n\n\t\tlet temp_dir = self.path.join(format!(\"{name}{STAGING_SUFFIX}\"));\n\t\tlet _ = remove_dir_all(&temp_dir).await; // cleanup any existing\n\n\t\tcreate_dir_all(&temp_dir).map_err(|e| wrap(e, \"error creating server directory\"))?;\n\t\tdo_create(temp_dir.clone()).await?;\n\n\t\tlet _ = self.touch(name.to_string());\n\t\t// retry the rename, it seems on WoA sometimes it takes a second for the\n\t\t// directory to be 'unlocked' after doing file/process operations in it.\n\t\tfor attempt_no in 0..=RENAME_ATTEMPTS {\n\t\t\tmatch std::fs::rename(&temp_dir, &target_dir) {\n\t\t\t\tOk(_) => {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tErr(e) if attempt_no == RENAME_ATTEMPTS => {\n\t\t\t\t\treturn Err(wrap(e, \"error renaming downloaded server\").into())\n\t\t\t\t}\n\t\t\t\tErr(_) => {\n\t\t\t\t\ttokio::time::sleep(RENAME_DELAY).await;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tOk(target_dir)\n\t}\n\n\tfn touch(&self, name: String) -> Result<(), AnyError> {\n\t\tself.state.update(|l| {\n\t\t\tif let Some(index) = l.iter().position(|s| s == &name) {\n\t\t\t\tl.remove(index);\n\t\t\t}\n\t\t\tl.insert(0, name);\n\n\t\t\tif l.len() <= KEEP_LRU {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif let Some(f) = l.last() {\n\t\t\t\tlet f = self.path.join(f);\n\t\t\t\tif !f.exists() || std::fs::remove_dir_all(f).is_ok() {\n\t\t\t\t\tl.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t})?;\n\n\t\tOk(())\n\t}\n}\n"
  },
  {
    "path": "cli/src/json_rpc.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse tokio::{\n\tio::{AsyncBufReadExt, AsyncRead, AsyncWrite, AsyncWriteExt, BufReader},\n\tpin,\n\tsync::mpsc,\n};\n\nuse crate::{\n\trpc::{self, MaybeSync, Serialization},\n\tutil::{\n\t\terrors::InvalidRpcDataError,\n\t\tsync::{Barrier, Receivable},\n\t},\n};\nuse std::io;\n\n#[derive(Clone)]\npub struct JsonRpcSerializer {}\n\nimpl Serialization for JsonRpcSerializer {\n\tfn serialize(&self, value: impl serde::Serialize) -> Vec<u8> {\n\t\tlet mut v = serde_json::to_vec(&value).unwrap();\n\t\tv.push(b'\\n');\n\t\tv\n\t}\n\n\tfn deserialize<P: serde::de::DeserializeOwned>(\n\t\t&self,\n\t\tb: &[u8],\n\t) -> Result<P, crate::util::errors::AnyError> {\n\t\tserde_json::from_slice(b).map_err(|e| InvalidRpcDataError(e.to_string()).into())\n\t}\n}\n\n/// Creates a new RPC Builder that serializes to JSON.\n#[allow(dead_code)]\npub fn new_json_rpc() -> rpc::RpcBuilder<JsonRpcSerializer> {\n\trpc::RpcBuilder::new(JsonRpcSerializer {})\n}\n\n#[allow(dead_code)]\npub async fn start_json_rpc<C: Send + Sync + 'static, S: Clone>(\n\tdispatcher: rpc::RpcDispatcher<JsonRpcSerializer, C>,\n\tread: impl AsyncRead + Unpin,\n\tmut write: impl AsyncWrite + Unpin,\n\tmut msg_rx: impl Receivable<Vec<u8>>,\n\tmut shutdown_rx: Barrier<S>,\n) -> io::Result<Option<S>> {\n\tlet (write_tx, mut write_rx) = mpsc::channel::<Vec<u8>>(8);\n\tlet mut read = BufReader::new(read);\n\n\tlet mut read_buf = String::new();\n\tlet shutdown_fut = shutdown_rx.wait();\n\tpin!(shutdown_fut);\n\n\tloop {\n\t\ttokio::select! {\n\t\t\tr = &mut shutdown_fut => return Ok(r.ok()),\n\t\t\tSome(w) = write_rx.recv() => {\n\t\t\t\twrite.write_all(&w).await?;\n\t\t\t},\n\t\t\tSome(w) = msg_rx.recv_msg() => {\n\t\t\t\twrite.write_all(&w).await?;\n\t\t\t},\n\t\t\tn = read.read_line(&mut read_buf) => {\n\t\t\t\tlet r = match n {\n\t\t\t\t\tOk(0) => return Ok(None),\n\t\t\t\t\tOk(n) => dispatcher.dispatch(read_buf[..n].as_bytes()),\n\t\t\t\t\tErr(e) => return Err(e)\n\t\t\t\t};\n\n\t\t\t\tread_buf.truncate(0);\n\n\t\t\t\tmatch r {\n\t\t\t\t\tMaybeSync::Sync(Some(v)) => {\n\t\t\t\t\t\twrite.write_all(&v).await?;\n\t\t\t\t\t},\n\t\t\t\t\tMaybeSync::Sync(None) => continue,\n\t\t\t\t\tMaybeSync::Future(fut) => {\n\t\t\t\t\t\tlet write_tx = write_tx.clone();\n\t\t\t\t\t\ttokio::spawn(async move {\n\t\t\t\t\t\t\tif let Some(v) = fut.await {\n\t\t\t\t\t\t\t\tlet _ = write_tx.send(v).await;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tMaybeSync::Stream((dto, fut)) => {\n\t\t\t\t\t\tif let Some(dto) = dto {\n\t\t\t\t\t\t\tdispatcher.register_stream(write_tx.clone(), dto).await;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet write_tx = write_tx.clone();\n\t\t\t\t\t\ttokio::spawn(async move {\n\t\t\t\t\t\t\tif let Some(v) = fut.await {\n\t\t\t\t\t\t\t\tlet _ = write_tx.send(v).await;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/lib.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// todo: we should reduce the exported surface area over time as things are\n// moved into a common CLI\npub mod auth;\npub mod constants;\n#[macro_use]\npub mod log;\npub mod commands;\npub mod desktop;\npub mod options;\npub mod self_update;\npub mod state;\npub mod tunnels;\npub mod update_service;\npub mod util;\n\nmod async_pipe;\nmod download_cache;\nmod json_rpc;\nmod msgpack_rpc;\nmod rpc;\nmod singleton;\n"
  },
  {
    "path": "cli/src/log.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse chrono::Local;\nuse opentelemetry::{\n\tsdk::trace::{Tracer, TracerProvider},\n\ttrace::{SpanBuilder, Tracer as TraitTracer, TracerProvider as TracerProviderTrait},\n};\nuse serde::{Deserialize, Serialize};\nuse std::fmt;\nuse std::{\n\tio::Write,\n\tsync::atomic::{AtomicU32, Ordering},\n};\nuse std::{path::Path, sync::Arc};\n\nuse crate::constants::COLORS_ENABLED;\n\nstatic INSTANCE_COUNTER: AtomicU32 = AtomicU32::new(0);\n\n// Gets a next incrementing number that can be used in logs\npub fn next_counter() -> u32 {\n\tINSTANCE_COUNTER.fetch_add(1, Ordering::SeqCst)\n}\n\n// Log level\n#[derive(\n\tclap::ValueEnum, PartialEq, Eq, PartialOrd, Clone, Copy, Debug, Serialize, Deserialize, Default,\n)]\npub enum Level {\n\tTrace = 0,\n\tDebug,\n\t#[default]\n\tInfo,\n\tWarn,\n\tError,\n\tCritical,\n\tOff,\n}\n\nimpl fmt::Display for Level {\n\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n\t\tmatch self {\n\t\t\tLevel::Critical => write!(f, \"critical\"),\n\t\t\tLevel::Debug => write!(f, \"debug\"),\n\t\t\tLevel::Error => write!(f, \"error\"),\n\t\t\tLevel::Info => write!(f, \"info\"),\n\t\t\tLevel::Off => write!(f, \"off\"),\n\t\t\tLevel::Trace => write!(f, \"trace\"),\n\t\t\tLevel::Warn => write!(f, \"warn\"),\n\t\t}\n\t}\n}\n\nimpl Level {\n\tpub fn name(&self) -> Option<&str> {\n\t\tmatch self {\n\t\t\tLevel::Trace => Some(\"trace\"),\n\t\t\tLevel::Debug => Some(\"debug\"),\n\t\t\tLevel::Info => Some(\"info\"),\n\t\t\tLevel::Warn => Some(\"warn\"),\n\t\t\tLevel::Error => Some(\"error\"),\n\t\t\tLevel::Critical => Some(\"critical\"),\n\t\t\tLevel::Off => None,\n\t\t}\n\t}\n\n\tpub fn color_code(&self) -> Option<&str> {\n\t\tif !*COLORS_ENABLED {\n\t\t\treturn None;\n\t\t}\n\n\t\tmatch self {\n\t\t\tLevel::Trace => None,\n\t\t\tLevel::Debug => Some(\"\\x1b[36m\"),\n\t\t\tLevel::Info => Some(\"\\x1b[35m\"),\n\t\t\tLevel::Warn => Some(\"\\x1b[33m\"),\n\t\t\tLevel::Error => Some(\"\\x1b[31m\"),\n\t\t\tLevel::Critical => Some(\"\\x1b[31m\"),\n\t\t\tLevel::Off => None,\n\t\t}\n\t}\n\n\tpub fn to_u8(self) -> u8 {\n\t\tself as u8\n\t}\n}\n\npub fn new_tunnel_prefix() -> String {\n\tformat!(\"[tunnel.{}]\", next_counter())\n}\n\npub fn new_code_server_prefix() -> String {\n\tformat!(\"[codeserver.{}]\", next_counter())\n}\n\npub fn new_rpc_prefix() -> String {\n\tformat!(\"[rpc.{}]\", next_counter())\n}\n\n// Base logger implementation\n#[derive(Clone)]\npub struct Logger {\n\ttracer: Arc<Tracer>,\n\tsink: Vec<Box<dyn LogSink>>,\n\tprefix: Option<String>,\n}\n\n// Copy trick from https://stackoverflow.com/a/30353928\npub trait LogSinkClone {\n\tfn clone_box(&self) -> Box<dyn LogSink>;\n}\n\nimpl<T> LogSinkClone for T\nwhere\n\tT: 'static + LogSink + Clone,\n{\n\tfn clone_box(&self) -> Box<dyn LogSink> {\n\t\tBox::new(self.clone())\n\t}\n}\n\npub trait LogSink: LogSinkClone + Sync + Send {\n\tfn write_log(&self, level: Level, prefix: &str, message: &str);\n\tfn write_result(&self, message: &str);\n}\n\nimpl Clone for Box<dyn LogSink> {\n\tfn clone(&self) -> Box<dyn LogSink> {\n\t\tself.clone_box()\n\t}\n}\n\n/// The basic log sink that writes output to stdout, with colors when relevant.\n#[derive(Clone)]\npub struct StdioLogSink {\n\tlevel: Level,\n}\n\nimpl LogSink for StdioLogSink {\n\tfn write_log(&self, level: Level, prefix: &str, message: &str) {\n\t\tif level < self.level {\n\t\t\treturn;\n\t\t}\n\n\t\temit(level, prefix, message);\n\t}\n\n\tfn write_result(&self, message: &str) {\n\t\tprintln!(\"{message}\");\n\t}\n}\n\n#[derive(Clone)]\npub struct FileLogSink {\n\tlevel: Level,\n\tfile: Arc<std::sync::Mutex<std::fs::File>>,\n}\n\nconst FILE_LOG_SIZE_LIMIT: u64 = 1024 * 1024 * 10; // 10MB\n\nimpl FileLogSink {\n\tpub fn new(level: Level, path: &Path) -> std::io::Result<Self> {\n\t\t// Truncate the service log occasionally to avoid growing infinitely\n\t\tif matches!(path.metadata(), Ok(m) if m.len() > FILE_LOG_SIZE_LIMIT) {\n\t\t\t// ignore errors, can happen if another process is writing right now\n\t\t\tlet _ = std::fs::remove_file(path);\n\t\t}\n\n\t\tlet file = std::fs::OpenOptions::new()\n\t\t\t.append(true)\n\t\t\t.create(true)\n\t\t\t.open(path)?;\n\n\t\tOk(Self {\n\t\t\tlevel,\n\t\t\tfile: Arc::new(std::sync::Mutex::new(file)),\n\t\t})\n\t}\n}\n\nimpl LogSink for FileLogSink {\n\tfn write_log(&self, level: Level, prefix: &str, message: &str) {\n\t\tif level < self.level {\n\t\t\treturn;\n\t\t}\n\n\t\tlet line = format(level, prefix, message, false);\n\n\t\t// ignore any errors, not much we can do if logging fails...\n\t\tself.file.lock().unwrap().write_all(line.as_bytes()).ok();\n\t}\n\n\tfn write_result(&self, _message: &str) {}\n}\n\nimpl Logger {\n\tpub fn test() -> Self {\n\t\tSelf {\n\t\t\ttracer: Arc::new(TracerProvider::builder().build().tracer(\"codeclitest\")),\n\t\t\tsink: vec![],\n\t\t\tprefix: None,\n\t\t}\n\t}\n\n\tpub fn new(tracer: Tracer, level: Level) -> Self {\n\t\tSelf {\n\t\t\ttracer: Arc::new(tracer),\n\t\t\tsink: vec![Box::new(StdioLogSink { level })],\n\t\t\tprefix: None,\n\t\t}\n\t}\n\n\tpub fn span(&self, name: &str) -> SpanBuilder {\n\t\tself.tracer.span_builder(format!(\"serverlauncher/{name}\"))\n\t}\n\n\tpub fn tracer(&self) -> &Tracer {\n\t\t&self.tracer\n\t}\n\n\tpub fn emit(&self, level: Level, message: &str) {\n\t\tlet prefix = self.prefix.as_deref().unwrap_or(\"\");\n\t\tfor sink in &self.sink {\n\t\t\tsink.write_log(level, prefix, message);\n\t\t}\n\t}\n\n\tpub fn result(&self, message: impl AsRef<str>) {\n\t\tfor sink in &self.sink {\n\t\t\tsink.write_result(message.as_ref());\n\t\t}\n\t}\n\n\tpub fn prefixed(&self, prefix: &str) -> Logger {\n\t\tLogger {\n\t\t\tprefix: Some(match &self.prefix {\n\t\t\t\tSome(p) => format!(\"{p}{prefix} \"),\n\t\t\t\tNone => format!(\"{prefix} \"),\n\t\t\t}),\n\t\t\t..self.clone()\n\t\t}\n\t}\n\n\t/// Creates a new logger with the additional log sink added.\n\tpub fn tee<T>(&self, sink: T) -> Logger\n\twhere\n\t\tT: LogSink + 'static,\n\t{\n\t\tlet mut new_sinks = self.sink.clone();\n\t\tnew_sinks.push(Box::new(sink));\n\n\t\tLogger {\n\t\t\tsink: new_sinks,\n\t\t\t..self.clone()\n\t\t}\n\t}\n\n\t/// Creates a new logger with the sink replace with the given sink.\n\tpub fn with_sink<T>(&self, sink: T) -> Logger\n\twhere\n\t\tT: LogSink + 'static,\n\t{\n\t\tLogger {\n\t\t\tsink: vec![Box::new(sink)],\n\t\t\t..self.clone()\n\t\t}\n\t}\n\n\tpub fn get_download_logger<'a>(&'a self, prefix: &'static str) -> DownloadLogger<'a> {\n\t\tDownloadLogger {\n\t\t\tprefix,\n\t\t\tlogger: self,\n\t\t}\n\t}\n}\n\npub struct DownloadLogger<'a> {\n\tprefix: &'static str,\n\tlogger: &'a Logger,\n}\n\nimpl crate::util::io::ReportCopyProgress for DownloadLogger<'_> {\n\tfn report_progress(&mut self, bytes_so_far: u64, total_bytes: u64) {\n\t\tif total_bytes > 0 {\n\t\t\tself.logger.emit(\n\t\t\t\tLevel::Trace,\n\t\t\t\t&format!(\n\t\t\t\t\t\"{} {}/{} ({:.0}%)\",\n\t\t\t\t\tself.prefix,\n\t\t\t\t\tbytes_so_far,\n\t\t\t\t\ttotal_bytes,\n\t\t\t\t\t(bytes_so_far as f64 / total_bytes as f64) * 100.0,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tself.logger.emit(\n\t\t\t\tLevel::Trace,\n\t\t\t\t&format!(\"{} {}/{}\", self.prefix, bytes_so_far, total_bytes,),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfn format(level: Level, prefix: &str, message: &str, use_colors: bool) -> String {\n\tlet current = Local::now();\n\tlet timestamp = current.format(\"%Y-%m-%d %H:%M:%S\").to_string();\n\n\tlet name = level.name().unwrap();\n\n\tif use_colors {\n\t\tif let Some(c) = level.color_code() {\n\t\t\treturn format!(\"\\x1b[2m[{timestamp}]\\x1b[0m {c}{name}\\x1b[0m {prefix}{message}\\n\");\n\t\t}\n\t}\n\n\tformat!(\"[{timestamp}] {name} {prefix}{message}\\n\")\n}\n\npub fn emit(level: Level, prefix: &str, message: &str) {\n\tlet line = format(level, prefix, message, *COLORS_ENABLED);\n\tif level == Level::Trace && *COLORS_ENABLED {\n\t\tprint!(\"\\x1b[2m{line}\\x1b[0m\");\n\t} else {\n\t\tprint!(\"{line}\");\n\t}\n}\n\n/// Installs the logger instance as the global logger for the 'log' service.\n/// Replaces any existing registered logger. Note that the logger will be leaked/\npub fn install_global_logger(log: Logger) {\n\tlog::set_logger(Box::leak(Box::new(RustyLogger(log))))\n\t\t.map(|()| log::set_max_level(log::LevelFilter::Debug))\n\t\t.expect(\"expected to make logger\");\n}\n\n/// Logger that uses the common rust \"log\" crate and directs back to one of\n/// our managed loggers.\nstruct RustyLogger(Logger);\n\nimpl log::Log for RustyLogger {\n\tfn enabled(&self, metadata: &log::Metadata) -> bool {\n\t\tmetadata.level() <= log::Level::Debug\n\t}\n\n\tfn log(&self, record: &log::Record) {\n\t\tif !self.enabled(record.metadata()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// exclude noisy log modules:\n\t\tlet src = match record.module_path() {\n\t\t\tSome(\"russh::cipher\" | \"russh::negotiation\" | \"russh::kex::dh\") => return,\n\t\t\tSome(s) => s,\n\t\t\tNone => \"<unknown>\",\n\t\t};\n\n\t\tself.0.emit(\n\t\t\tmatch record.level() {\n\t\t\t\tlog::Level::Debug => Level::Debug,\n\t\t\t\tlog::Level::Error => Level::Error,\n\t\t\t\tlog::Level::Info => Level::Info,\n\t\t\t\tlog::Level::Trace => Level::Trace,\n\t\t\t\tlog::Level::Warn => Level::Warn,\n\t\t\t},\n\t\t\t&format!(\"[{}] {}\", src, record.args()),\n\t\t);\n\t}\n\n\tfn flush(&self) {}\n}\n\n#[macro_export]\nmacro_rules! error {\n    ($logger:expr, $str:expr) => {\n        $logger.emit(log::Level::Error, $str)\n     };\n     ($logger:expr, $($fmt:expr),+) => {\n        $logger.emit(log::Level::Error, &format!($($fmt),+))\n     };\n }\n\n#[macro_export]\nmacro_rules! trace {\n     ($logger:expr, $str:expr) => {\n         $logger.emit(log::Level::Trace, $str)\n     };\n     ($logger:expr, $($fmt:expr),+) => {\n         $logger.emit(log::Level::Trace, &format!($($fmt),+))\n     };\n }\n\n#[macro_export]\nmacro_rules! debug {\n     ($logger:expr, $str:expr) => {\n         $logger.emit(log::Level::Debug, $str)\n     };\n     ($logger:expr, $($fmt:expr),+) => {\n         $logger.emit(log::Level::Debug, &format!($($fmt),+))\n     };\n }\n\n#[macro_export]\nmacro_rules! info {\n     ($logger:expr, $str:expr) => {\n         $logger.emit(log::Level::Info, $str)\n     };\n     ($logger:expr, $($fmt:expr),+) => {\n         $logger.emit(log::Level::Info, &format!($($fmt),+))\n     };\n }\n\n#[macro_export]\nmacro_rules! warning {\n     ($logger:expr, $str:expr) => {\n         $logger.emit(log::Level::Warn, $str)\n     };\n     ($logger:expr, $($fmt:expr),+) => {\n         $logger.emit(log::Level::Warn, &format!($($fmt),+))\n     };\n }\n\n#[macro_export]\nmacro_rules! span {\n\t($logger:expr, $span:expr, $func:expr) => {{\n\t\tuse opentelemetry::trace::TraceContextExt;\n\n\t\tlet span = $span.start($logger.tracer());\n\t\tlet cx = opentelemetry::Context::current_with_span(span);\n\t\tlet guard = cx.clone().attach();\n\t\tlet t = $func;\n\n\t\tif let Err(e) = &t {\n\t\t\tcx.span().record_error(e);\n\t\t}\n\n\t\tstd::mem::drop(guard);\n\n\t\tt\n\t}};\n}\n\n#[macro_export]\nmacro_rules! spanf {\n\t($logger:expr, $span:expr, $func:expr) => {{\n\t\tuse opentelemetry::trace::{FutureExt, TraceContextExt};\n\n\t\tlet span = $span.start($logger.tracer());\n\t\tlet cx = opentelemetry::Context::current_with_span(span);\n\t\tlet t = $func.with_context(cx.clone()).await;\n\n\t\tif let Err(e) = &t {\n\t\t\tcx.span().record_error(e);\n\t\t}\n\n\t\tcx.span().end();\n\n\t\tt\n\t}};\n}\n"
  },
  {
    "path": "cli/src/msgpack_rpc.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse bytes::Buf;\nuse serde::de::DeserializeOwned;\nuse tokio::{\n\tio::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt},\n\tpin,\n\tsync::mpsc,\n};\nuse tokio_util::codec::Decoder;\n\nuse crate::{\n\trpc::{self, MaybeSync, Serialization},\n\tutil::{\n\t\terrors::{AnyError, InvalidRpcDataError},\n\t\tsync::{Barrier, Receivable},\n\t},\n};\nuse std::io::{self, Cursor, ErrorKind};\n\n#[derive(Copy, Clone)]\npub struct MsgPackSerializer {}\n\nimpl Serialization for MsgPackSerializer {\n\tfn serialize(&self, value: impl serde::Serialize) -> Vec<u8> {\n\t\trmp_serde::to_vec_named(&value).expect(\"expected to serialize\")\n\t}\n\n\tfn deserialize<P: serde::de::DeserializeOwned>(&self, b: &[u8]) -> Result<P, AnyError> {\n\t\trmp_serde::from_slice(b).map_err(|e| InvalidRpcDataError(e.to_string()).into())\n\t}\n}\n\npub type MsgPackCaller = rpc::RpcCaller<MsgPackSerializer>;\n\n/// Creates a new RPC Builder that serializes to msgpack.\npub fn new_msgpack_rpc() -> rpc::RpcBuilder<MsgPackSerializer> {\n\trpc::RpcBuilder::new(MsgPackSerializer {})\n}\n\n/// Starting processing msgpack rpc over the given i/o. It's recommended that\n/// the reader be passed in as a BufReader for efficiency.\npub async fn start_msgpack_rpc<\n\tC: Send + Sync + 'static,\n\tX: Clone,\n\tS: Send + Sync + Serialization,\n\tRead: AsyncRead + Unpin,\n\tWrite: AsyncWrite + Unpin,\n>(\n\tdispatcher: rpc::RpcDispatcher<S, C>,\n\tmut read: Read,\n\tmut write: Write,\n\tmut msg_rx: impl Receivable<Vec<u8>>,\n\tmut shutdown_rx: Barrier<X>,\n) -> io::Result<(Option<X>, Read, Write)> {\n\tlet (write_tx, mut write_rx) = mpsc::channel::<Vec<u8>>(8);\n\tlet mut decoder = MsgPackCodec::new();\n\tlet mut decoder_buf = bytes::BytesMut::new();\n\n\tlet shutdown_fut = shutdown_rx.wait();\n\tpin!(shutdown_fut);\n\n\tloop {\n\t\ttokio::select! {\n\t\t\tr = read.read_buf(&mut decoder_buf) => {\n\t\t\t\tr?;\n\n\t\t\t\twhile let Some(frame) = decoder.decode(&mut decoder_buf)? {\n\t\t\t\t\tmatch dispatcher.dispatch_with_partial(&frame.vec, frame.obj) {\n\t\t\t\t\t\tMaybeSync::Sync(Some(v)) => {\n\t\t\t\t\t\t\tlet _ = write_tx.send(v).await;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMaybeSync::Sync(None) => continue,\n\t\t\t\t\t\tMaybeSync::Future(fut) => {\n\t\t\t\t\t\t\tlet write_tx = write_tx.clone();\n\t\t\t\t\t\t\ttokio::spawn(async move {\n\t\t\t\t\t\t\t\tif let Some(v) = fut.await {\n\t\t\t\t\t\t\t\t\tlet _ = write_tx.send(v).await;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tMaybeSync::Stream((stream, fut)) => {\n\t\t\t\t\t\t\tif let Some(stream) = stream {\n\t\t\t\t\t\t\t\tdispatcher.register_stream(write_tx.clone(), stream).await;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet write_tx = write_tx.clone();\n\t\t\t\t\t\t\ttokio::spawn(async move {\n\t\t\t\t\t\t\t\tif let Some(v) = fut.await {\n\t\t\t\t\t\t\t\t\tlet _ = write_tx.send(v).await;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\tSome(m) = write_rx.recv() => {\n\t\t\t\twrite.write_all(&m).await?;\n\t\t\t},\n\t\t\tSome(m) = msg_rx.recv_msg() => {\n\t\t\t\twrite.write_all(&m).await?;\n\t\t\t},\n\t\t\tr = &mut shutdown_fut => return Ok((r.ok(), read, write)),\n\t\t}\n\n\t\twrite.flush().await?;\n\t}\n}\n\n/// Reader that reads msgpack object messages in a cancellation-safe way using Tokio's codecs.\n///\n/// rmp_serde does not support async reads, and does not plan to. But we know every\n/// type in protocol is some kind of object, so by asking to deserialize the\n/// requested object from a reader (repeatedly, if incomplete) we can\n/// accomplish streaming.\npub struct MsgPackCodec<T> {\n\t_marker: std::marker::PhantomData<T>,\n}\n\nimpl<T> MsgPackCodec<T> {\n\tpub fn new() -> Self {\n\t\tSelf {\n\t\t\t_marker: std::marker::PhantomData,\n\t\t}\n\t}\n}\n\npub struct MsgPackDecoded<T> {\n\tpub obj: T,\n\tpub vec: Vec<u8>,\n}\n\nimpl<T: DeserializeOwned> tokio_util::codec::Decoder for MsgPackCodec<T> {\n\ttype Item = MsgPackDecoded<T>;\n\ttype Error = io::Error;\n\n\tfn decode(&mut self, src: &mut bytes::BytesMut) -> Result<Option<Self::Item>, Self::Error> {\n\t\tlet bytes_ref = src.as_ref();\n\t\tlet mut cursor = Cursor::new(bytes_ref);\n\n\t\tmatch rmp_serde::decode::from_read::<_, T>(&mut cursor) {\n\t\t\tErr(\n\t\t\t\trmp_serde::decode::Error::InvalidDataRead(e)\n\t\t\t\t| rmp_serde::decode::Error::InvalidMarkerRead(e),\n\t\t\t) if e.kind() == ErrorKind::UnexpectedEof => {\n\t\t\t\tsrc.reserve(1024);\n\t\t\t\tOk(None)\n\t\t\t}\n\t\t\tErr(e) => Err(std::io::Error::new(\n\t\t\t\tstd::io::ErrorKind::InvalidData,\n\t\t\t\te.to_string(),\n\t\t\t)),\n\t\t\tOk(obj) => {\n\t\t\t\tlet len = cursor.position() as usize;\n\t\t\t\tlet vec = src[..len].to_vec();\n\t\t\t\tsrc.advance(len);\n\t\t\t\tOk(Some(MsgPackDecoded { obj, vec }))\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[cfg(test)]\nmod tests {\n\tuse serde::{Deserialize, Serialize};\n\n\tuse super::*;\n\n\t#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]\n\tpub struct Msg {\n\t\tpub x: i32,\n\t}\n\n\t#[test]\n\tfn test_protocol() {\n\t\tlet mut c = MsgPackCodec::<Msg>::new();\n\t\tlet mut buf = bytes::BytesMut::new();\n\n\t\tassert!(c.decode(&mut buf).unwrap().is_none());\n\n\t\tbuf.extend_from_slice(rmp_serde::to_vec_named(&Msg { x: 1 }).unwrap().as_slice());\n\t\tbuf.extend_from_slice(rmp_serde::to_vec_named(&Msg { x: 2 }).unwrap().as_slice());\n\n\t\tassert_eq!(\n\t\t\tc.decode(&mut buf).unwrap().expect(\"expected msg1\").obj,\n\t\t\tMsg { x: 1 }\n\t\t);\n\t\tassert_eq!(\n\t\t\tc.decode(&mut buf).unwrap().expect(\"expected msg1\").obj,\n\t\t\tMsg { x: 2 }\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "cli/src/options.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::fmt;\n\nuse serde::{Deserialize, Serialize};\n\nuse crate::constants::SERVER_NAME_MAP;\n\n#[derive(clap::ValueEnum, Copy, Clone, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)]\npub enum Quality {\n\t#[serde(rename = \"stable\")]\n\tStable,\n\t#[serde(rename = \"exploration\")]\n\tExploration,\n\t#[serde(other)]\n\tInsiders,\n}\n\nimpl Quality {\n\t/// Lowercased quality name in paths and protocol\n\tpub fn get_machine_name(&self) -> &'static str {\n\t\tmatch self {\n\t\t\tQuality::Insiders => \"insiders\",\n\t\t\tQuality::Exploration => \"exploration\",\n\t\t\tQuality::Stable => \"stable\",\n\t\t}\n\t}\n\n\t/// Uppercased quality display name for humans\n\tpub fn get_capitalized_name(&self) -> &'static str {\n\t\tmatch self {\n\t\t\tQuality::Insiders => \"Insiders\",\n\t\t\tQuality::Exploration => \"Exploration\",\n\t\t\tQuality::Stable => \"Stable\",\n\t\t}\n\t}\n\n\t/// Server application name\n\tpub fn server_entrypoint(&self) -> String {\n\t\tlet mut server_name = SERVER_NAME_MAP\n\t\t\t.as_ref()\n\t\t\t.and_then(|m| m.get(self))\n\t\t\t.map(|s| s.server_application_name.as_str())\n\t\t\t.unwrap_or(\"code-server-oss\")\n\t\t\t.to_string();\n\n\t\tif cfg!(windows) {\n\t\t\tserver_name.push_str(\".cmd\");\n\t\t}\n\n\t\tserver_name\n\t}\n}\n\nimpl fmt::Display for Quality {\n\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n\t\twrite!(f, \"{}\", self.get_capitalized_name())\n\t}\n}\n\nimpl TryFrom<&str> for Quality {\n\ttype Error = String;\n\n\tfn try_from(s: &str) -> Result<Self, Self::Error> {\n\t\tmatch s {\n\t\t\t\"stable\" => Ok(Quality::Stable),\n\t\t\t\"insiders\" | \"insider\" => Ok(Quality::Insiders),\n\t\t\t\"exploration\" => Ok(Quality::Exploration),\n\t\t\t_ => Err(format!(\n\t\t\t\t\"Unknown quality: {s}. Must be one of stable, insiders, or exploration.\"\n\t\t\t)),\n\t\t}\n\t}\n}\n\n#[derive(clap::ValueEnum, Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]\npub enum TelemetryLevel {\n\tOff,\n\tCrash,\n\tError,\n\tAll,\n}\n\nimpl fmt::Display for TelemetryLevel {\n\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n\t\tmatch self {\n\t\t\tTelemetryLevel::Off => write!(f, \"off\"),\n\t\t\tTelemetryLevel::Crash => write!(f, \"crash\"),\n\t\t\tTelemetryLevel::Error => write!(f, \"error\"),\n\t\t\tTelemetryLevel::All => write!(f, \"all\"),\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/rpc.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tcollections::HashMap,\n\tfuture,\n\tsync::{\n\t\tatomic::{AtomicU32, Ordering},\n\t\tArc, Mutex,\n\t},\n};\n\nuse crate::log;\nuse futures::{future::BoxFuture, Future, FutureExt};\nuse serde::{de::DeserializeOwned, Deserialize, Serialize};\nuse tokio::{\n\tio::{AsyncReadExt, AsyncWriteExt, DuplexStream, WriteHalf},\n\tsync::{mpsc, oneshot},\n};\n\nuse crate::util::errors::AnyError;\n\npub type SyncMethod = Arc<dyn Send + Sync + Fn(Option<u32>, &[u8]) -> Option<Vec<u8>>>;\npub type AsyncMethod =\n\tArc<dyn Send + Sync + Fn(Option<u32>, &[u8]) -> BoxFuture<'static, Option<Vec<u8>>>>;\npub type Duplex = Arc<\n\tdyn Send\n\t\t+ Sync\n\t\t+ Fn(Option<u32>, &[u8]) -> (Option<StreamDto>, BoxFuture<'static, Option<Vec<u8>>>),\n>;\n\npub enum Method {\n\tSync(SyncMethod),\n\tAsync(AsyncMethod),\n\tDuplex(Duplex),\n}\n\n/// Serialization is given to the RpcBuilder and defines how data gets serialized\n/// when callinth methods.\npub trait Serialization: Send + Sync + 'static {\n\tfn serialize(&self, value: impl Serialize) -> Vec<u8>;\n\tfn deserialize<P: DeserializeOwned>(&self, b: &[u8]) -> Result<P, AnyError>;\n}\n\n/// RPC is a basic, transport-agnostic builder for RPC methods. You can\n/// register methods to it, then call `.build()` to get a \"dispatcher\" type.\npub struct RpcBuilder<S> {\n\tserializer: Arc<S>,\n\tmethods: HashMap<&'static str, Method>,\n\tcalls: Arc<Mutex<HashMap<u32, DispatchMethod>>>,\n}\n\nimpl<S: Serialization> RpcBuilder<S> {\n\t/// Creates a new empty RPC builder.\n\tpub fn new(serializer: S) -> Self {\n\t\tSelf {\n\t\t\tserializer: Arc::new(serializer),\n\t\t\tmethods: HashMap::new(),\n\t\t\tcalls: Arc::new(std::sync::Mutex::new(HashMap::new())),\n\t\t}\n\t}\n\n\t/// Creates a caller that will be connected to any eventual dispatchers,\n\t/// and that sends data to the \"tx\" channel.\n\tpub fn get_caller(&mut self, sender: mpsc::UnboundedSender<Vec<u8>>) -> RpcCaller<S> {\n\t\tRpcCaller {\n\t\t\tserializer: self.serializer.clone(),\n\t\t\tcalls: self.calls.clone(),\n\t\t\tsender,\n\t\t}\n\t}\n\n\t/// Gets a method builder.\n\tpub fn methods<C: Send + Sync + 'static>(self, context: C) -> RpcMethodBuilder<S, C> {\n\t\tRpcMethodBuilder {\n\t\t\tcontext: Arc::new(context),\n\t\t\tserializer: self.serializer,\n\t\t\tmethods: self.methods,\n\t\t\tcalls: self.calls,\n\t\t}\n\t}\n}\n\npub struct RpcMethodBuilder<S, C> {\n\tcontext: Arc<C>,\n\tserializer: Arc<S>,\n\tmethods: HashMap<&'static str, Method>,\n\tcalls: Arc<Mutex<HashMap<u32, DispatchMethod>>>,\n}\n\n#[derive(Serialize)]\nstruct DuplexStreamStarted {\n\tpub for_request_id: u32,\n\tpub stream_ids: Vec<u32>,\n}\n\nimpl<S: Serialization, C: Send + Sync + 'static> RpcMethodBuilder<S, C> {\n\t/// Registers a synchronous rpc call that returns its result directly.\n\tpub fn register_sync<P, R, F>(&mut self, method_name: &'static str, callback: F)\n\twhere\n\t\tP: DeserializeOwned,\n\t\tR: Serialize,\n\t\tF: Fn(P, &C) -> Result<R, AnyError> + Send + Sync + 'static,\n\t{\n\t\tif self.methods.contains_key(method_name) {\n\t\t\tpanic!(\"Method already registered: {method_name}\");\n\t\t}\n\n\t\tlet serial = self.serializer.clone();\n\t\tlet context = self.context.clone();\n\t\tself.methods.insert(\n\t\t\tmethod_name,\n\t\t\tMethod::Sync(Arc::new(move |id, body| {\n\t\t\t\tlet param = match serial.deserialize::<RequestParams<P>>(body) {\n\t\t\t\t\tOk(p) => p,\n\t\t\t\t\tErr(err) => {\n\t\t\t\t\t\treturn id.map(|id| {\n\t\t\t\t\t\t\tserial.serialize(ErrorResponse {\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\terror: ResponseError {\n\t\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\t\tmessage: format!(\"{err:?}\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tmatch callback(param.params, &context) {\n\t\t\t\t\tOk(result) => id.map(|id| serial.serialize(&SuccessResponse { id, result })),\n\t\t\t\t\tErr(err) => id.map(|id| {\n\t\t\t\t\t\tserial.serialize(ErrorResponse {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror: ResponseError {\n\t\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\t\tmessage: format!(\"{err:?}\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t})),\n\t\t);\n\t}\n\n\t/// Registers an async rpc call that returns a Future.\n\tpub fn register_async<P, R, Fut, F>(&mut self, method_name: &'static str, callback: F)\n\twhere\n\t\tP: DeserializeOwned + Send + 'static,\n\t\tR: Serialize + Send + Sync + 'static,\n\t\tFut: Future<Output = Result<R, AnyError>> + Send,\n\t\tF: (Fn(P, Arc<C>) -> Fut) + Clone + Send + Sync + 'static,\n\t{\n\t\tlet serial = self.serializer.clone();\n\t\tlet context = self.context.clone();\n\t\tself.methods.insert(\n\t\t\tmethod_name,\n\t\t\tMethod::Async(Arc::new(move |id, body| {\n\t\t\t\tlet param = match serial.deserialize::<RequestParams<P>>(body) {\n\t\t\t\t\tOk(p) => p,\n\t\t\t\t\tErr(err) => {\n\t\t\t\t\t\treturn future::ready(id.map(|id| {\n\t\t\t\t\t\t\tserial.serialize(ErrorResponse {\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\terror: ResponseError {\n\t\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\t\tmessage: format!(\"{err:?}\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.boxed();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet callback = callback.clone();\n\t\t\t\tlet serial = serial.clone();\n\t\t\t\tlet context = context.clone();\n\t\t\t\tlet fut = async move {\n\t\t\t\t\tmatch callback(param.params, context).await {\n\t\t\t\t\t\tOk(result) => {\n\t\t\t\t\t\t\tid.map(|id| serial.serialize(&SuccessResponse { id, result }))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tErr(err) => id.map(|id| {\n\t\t\t\t\t\t\tserial.serialize(ErrorResponse {\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\terror: ResponseError {\n\t\t\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\t\t\tmessage: format!(\"{err:?}\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tfut.boxed()\n\t\t\t})),\n\t\t);\n\t}\n\n\t/// Registers an async rpc call that returns a Future containing a duplex\n\t/// stream that should be handled by the client.\n\tpub fn register_duplex<P, R, Fut, F>(\n\t\t&mut self,\n\t\tmethod_name: &'static str,\n\t\tstreams: usize,\n\t\tcallback: F,\n\t) where\n\t\tP: DeserializeOwned + Send + 'static,\n\t\tR: Serialize + Send + Sync + 'static,\n\t\tFut: Future<Output = Result<R, AnyError>> + Send,\n\t\tF: (Fn(Vec<DuplexStream>, P, Arc<C>) -> Fut) + Clone + Send + Sync + 'static,\n\t{\n\t\tlet serial = self.serializer.clone();\n\t\tlet context = self.context.clone();\n\t\tself.methods.insert(\n\t\t\tmethod_name,\n\t\t\tMethod::Duplex(Arc::new(move |id, body| {\n\t\t\t\tlet param = match serial.deserialize::<RequestParams<P>>(body) {\n\t\t\t\t\tOk(p) => p,\n\t\t\t\t\tErr(err) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tNone,\n\t\t\t\t\t\t\tfuture::ready(id.map(|id| {\n\t\t\t\t\t\t\t\tserial.serialize(ErrorResponse {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\terror: ResponseError {\n\t\t\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\t\t\tmessage: format!(\"{err:?}\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t.boxed(),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet callback = callback.clone();\n\t\t\t\tlet serial = serial.clone();\n\t\t\t\tlet context = context.clone();\n\n\t\t\t\tlet mut dto = StreamDto {\n\t\t\t\t\treq_id: id.unwrap_or(0),\n\t\t\t\t\tstreams: Vec::with_capacity(streams),\n\t\t\t\t};\n\t\t\t\tlet mut servers = Vec::with_capacity(streams);\n\n\t\t\t\tfor _ in 0..streams {\n\t\t\t\t\tlet (client, server) = tokio::io::duplex(8192);\n\t\t\t\t\tservers.push(server);\n\t\t\t\t\tdto.streams.push((next_message_id(), client));\n\t\t\t\t}\n\n\t\t\t\tlet fut = async move {\n\t\t\t\t\tmatch callback(servers, param.params, context).await {\n\t\t\t\t\t\tOk(r) => id.map(|id| serial.serialize(&SuccessResponse { id, result: r })),\n\t\t\t\t\t\tErr(err) => id.map(|id| {\n\t\t\t\t\t\t\tserial.serialize(ErrorResponse {\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\terror: ResponseError {\n\t\t\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\t\t\tmessage: format!(\"{err:?}\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t(Some(dto), fut.boxed())\n\t\t\t})),\n\t\t);\n\t}\n\n\t/// Builds into a usable, sync rpc dispatcher.\n\tpub fn build(mut self, log: log::Logger) -> RpcDispatcher<S, C> {\n\t\tlet streams = Streams::default();\n\n\t\tlet s1 = streams.clone();\n\t\tself.register_async(METHOD_STREAM_ENDED, move |m: StreamEndedParams, _| {\n\t\t\tlet s1 = s1.clone();\n\t\t\tasync move {\n\t\t\t\ts1.remove(m.stream).await;\n\t\t\t\tOk(())\n\t\t\t}\n\t\t});\n\n\t\tlet s2 = streams.clone();\n\t\tself.register_sync(METHOD_STREAM_DATA, move |m: StreamDataIncomingParams, _| {\n\t\t\ts2.write(m.stream, m.segment);\n\t\t\tOk(())\n\t\t});\n\n\t\tRpcDispatcher {\n\t\t\tlog,\n\t\t\tcontext: self.context,\n\t\t\tcalls: self.calls,\n\t\t\tserializer: self.serializer,\n\t\t\tmethods: Arc::new(self.methods),\n\t\t\tstreams,\n\t\t}\n\t}\n}\n\ntype DispatchMethod = Box<dyn Send + Sync + FnOnce(Outcome)>;\n\n/// Dispatcher returned from a Builder that provides a transport-agnostic way to\n/// deserialize and dispatch RPC calls. This structure may get more advanced as\n/// time goes on...\n#[derive(Clone)]\npub struct RpcCaller<S: Serialization> {\n\tserializer: Arc<S>,\n\tcalls: Arc<Mutex<HashMap<u32, DispatchMethod>>>,\n\tsender: mpsc::UnboundedSender<Vec<u8>>,\n}\n\nimpl<S: Serialization> RpcCaller<S> {\n\tpub fn serialize_notify<M, A>(serializer: &S, method: M, params: A) -> Vec<u8>\n\twhere\n\t\tS: Serialization,\n\t\tM: AsRef<str> + serde::Serialize,\n\t\tA: Serialize,\n\t{\n\t\tserializer.serialize(&FullRequest {\n\t\t\tid: None,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t})\n\t}\n\n\t/// Enqueues an outbound call. Returns whether the message was enqueued.\n\tpub fn notify<M, A>(&self, method: M, params: A) -> bool\n\twhere\n\t\tM: AsRef<str> + serde::Serialize,\n\t\tA: Serialize,\n\t{\n\t\tself.sender\n\t\t\t.send(Self::serialize_notify(&self.serializer, method, params))\n\t\t\t.is_ok()\n\t}\n\n\t/// Enqueues an outbound call, returning its result.\n\tpub fn call<M, A, R>(&self, method: M, params: A) -> oneshot::Receiver<Result<R, ResponseError>>\n\twhere\n\t\tM: AsRef<str> + serde::Serialize,\n\t\tA: Serialize,\n\t\tR: DeserializeOwned + Send + 'static,\n\t{\n\t\tlet (tx, rx) = oneshot::channel();\n\t\tlet id = next_message_id();\n\t\tlet body = self.serializer.serialize(&FullRequest {\n\t\t\tid: Some(id),\n\t\t\tmethod,\n\t\t\tparams,\n\t\t});\n\n\t\tif self.sender.send(body).is_err() {\n\t\t\tdrop(tx);\n\t\t\treturn rx;\n\t\t}\n\n\t\tlet serializer = self.serializer.clone();\n\t\tself.calls.lock().unwrap().insert(\n\t\t\tid,\n\t\t\tBox::new(move |body| {\n\t\t\t\tmatch body {\n\t\t\t\t\tOutcome::Error(e) => tx.send(Err(e)).ok(),\n\t\t\t\t\tOutcome::Success(r) => match serializer.deserialize::<SuccessResponse<R>>(&r) {\n\t\t\t\t\t\tOk(r) => tx.send(Ok(r.result)).ok(),\n\t\t\t\t\t\tErr(err) => tx\n\t\t\t\t\t\t\t.send(Err(ResponseError {\n\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\tmessage: err.to_string(),\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t.ok(),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}),\n\t\t);\n\n\t\trx\n\t}\n}\n\n/// Dispatcher returned from a Builder that provides a transport-agnostic way to\n/// deserialize and handle RPC calls. This structure may get more advanced as\n/// time goes on...\n#[derive(Clone)]\npub struct RpcDispatcher<S, C> {\n\tlog: log::Logger,\n\tcontext: Arc<C>,\n\tserializer: Arc<S>,\n\tmethods: Arc<HashMap<&'static str, Method>>,\n\tcalls: Arc<Mutex<HashMap<u32, DispatchMethod>>>,\n\tstreams: Streams,\n}\n\nstatic MESSAGE_ID_COUNTER: AtomicU32 = AtomicU32::new(0);\nfn next_message_id() -> u32 {\n\tMESSAGE_ID_COUNTER.fetch_add(1, Ordering::SeqCst)\n}\n\nimpl<S: Serialization, C: Send + Sync> RpcDispatcher<S, C> {\n\t/// Runs the incoming request, returning the result of the call synchronously\n\t/// or in a future. (The caller can then decide whether to run the future\n\t/// sequentially in its receive loop, or not.)\n\t///\n\t/// The future or return result will be optional bytes that should be sent\n\t/// back to the socket.\n\tpub fn dispatch(&self, body: &[u8]) -> MaybeSync {\n\t\tmatch self.serializer.deserialize::<PartialIncoming>(body) {\n\t\t\tOk(partial) => self.dispatch_with_partial(body, partial),\n\t\t\tErr(_err) => {\n\t\t\t\twarning!(self.log, \"Failed to deserialize request, hex: {:X?}\", body);\n\t\t\t\tMaybeSync::Sync(None)\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Like dispatch, but allows passing an existing PartialIncoming.\n\tpub fn dispatch_with_partial(&self, body: &[u8], partial: PartialIncoming) -> MaybeSync {\n\t\tlet id = partial.id;\n\n\t\tif let Some(method_name) = partial.method {\n\t\t\tlet method = self.methods.get(method_name.as_str());\n\t\t\tmatch method {\n\t\t\t\tSome(Method::Sync(callback)) => MaybeSync::Sync(callback(id, body)),\n\t\t\t\tSome(Method::Async(callback)) => MaybeSync::Future(callback(id, body)),\n\t\t\t\tSome(Method::Duplex(callback)) => MaybeSync::Stream(callback(id, body)),\n\t\t\t\tNone => MaybeSync::Sync(id.map(|id| {\n\t\t\t\t\tself.serializer.serialize(ErrorResponse {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\terror: ResponseError {\n\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\tmessage: format!(\"Method not found: {method_name}\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t})),\n\t\t\t}\n\t\t} else if let Some(err) = partial.error {\n\t\t\tif let Some(cb) = self.calls.lock().unwrap().remove(&id.unwrap()) {\n\t\t\t\tcb(Outcome::Error(err));\n\t\t\t}\n\t\t\tMaybeSync::Sync(None)\n\t\t} else {\n\t\t\tif let Some(cb) = self.calls.lock().unwrap().remove(&id.unwrap()) {\n\t\t\t\tcb(Outcome::Success(body.to_vec()));\n\t\t\t}\n\t\t\tMaybeSync::Sync(None)\n\t\t}\n\t}\n\n\t/// Registers a stream call returned from dispatch().\n\tpub async fn register_stream(\n\t\t&self,\n\t\twrite_tx: mpsc::Sender<impl 'static + From<Vec<u8>> + Send>,\n\t\tdto: StreamDto,\n\t) {\n\t\tlet r = write_tx\n\t\t\t.send(\n\t\t\t\tself.serializer\n\t\t\t\t\t.serialize(&FullRequest {\n\t\t\t\t\t\tid: None,\n\t\t\t\t\t\tmethod: METHOD_STREAMS_STARTED,\n\t\t\t\t\t\tparams: DuplexStreamStarted {\n\t\t\t\t\t\t\tstream_ids: dto.streams.iter().map(|(id, _)| *id).collect(),\n\t\t\t\t\t\t\tfor_request_id: dto.req_id,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.into(),\n\t\t\t)\n\t\t\t.await;\n\n\t\tif r.is_err() {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (stream_id, duplex) in dto.streams {\n\t\t\tlet (mut read, write) = tokio::io::split(duplex);\n\t\t\tself.streams.insert(stream_id, write);\n\n\t\t\tlet write_tx = write_tx.clone();\n\t\t\tlet serial = self.serializer.clone();\n\t\t\ttokio::spawn(async move {\n\t\t\t\tlet mut buf = vec![0; 4096];\n\t\t\t\tloop {\n\t\t\t\t\tmatch read.read(&mut buf).await {\n\t\t\t\t\t\tOk(0) | Err(_) => break,\n\t\t\t\t\t\tOk(n) => {\n\t\t\t\t\t\t\tlet r = write_tx\n\t\t\t\t\t\t\t\t.send(\n\t\t\t\t\t\t\t\t\tserial\n\t\t\t\t\t\t\t\t\t\t.serialize(&FullRequest {\n\t\t\t\t\t\t\t\t\t\t\tid: None,\n\t\t\t\t\t\t\t\t\t\t\tmethod: METHOD_STREAM_DATA,\n\t\t\t\t\t\t\t\t\t\t\tparams: StreamDataParams {\n\t\t\t\t\t\t\t\t\t\t\t\tsegment: &buf[..n],\n\t\t\t\t\t\t\t\t\t\t\t\tstream: stream_id,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.into(),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.await;\n\n\t\t\t\t\t\t\tif r.is_err() {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet _ = write_tx\n\t\t\t\t\t.send(\n\t\t\t\t\t\tserial\n\t\t\t\t\t\t\t.serialize(&FullRequest {\n\t\t\t\t\t\t\t\tid: None,\n\t\t\t\t\t\t\t\tmethod: METHOD_STREAM_ENDED,\n\t\t\t\t\t\t\t\tparams: StreamEndedParams { stream: stream_id },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.into(),\n\t\t\t\t\t)\n\t\t\t\t\t.await;\n\t\t\t});\n\t\t}\n\t}\n\n\tpub fn context(&self) -> Arc<C> {\n\t\tself.context.clone()\n\t}\n}\n\nstruct StreamRec {\n\twrite: Option<WriteHalf<DuplexStream>>,\n\tq: Vec<Vec<u8>>,\n\tended: bool,\n}\n\n#[derive(Clone, Default)]\nstruct Streams {\n\tmap: Arc<std::sync::Mutex<HashMap<u32, StreamRec>>>,\n}\n\nimpl Streams {\n\tpub async fn remove(&self, id: u32) {\n\t\tlet mut remove = None;\n\n\t\t{\n\t\t\tlet mut map = self.map.lock().unwrap();\n\t\t\tif let Some(s) = map.get_mut(&id) {\n\t\t\t\tif let Some(w) = s.write.take() {\n\t\t\t\t\tmap.remove(&id);\n\t\t\t\t\tremove = Some(w);\n\t\t\t\t} else {\n\t\t\t\t\ts.ended = true; // will shut down in write loop\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// do this outside of the sync lock:\n\t\tif let Some(mut w) = remove {\n\t\t\tlet _ = w.shutdown().await;\n\t\t}\n\t}\n\n\tpub fn write(&self, id: u32, buf: Vec<u8>) {\n\t\tlet mut map = self.map.lock().unwrap();\n\t\tif let Some(s) = map.get_mut(&id) {\n\t\t\ts.q.push(buf);\n\n\t\t\tif let Some(w) = s.write.take() {\n\t\t\t\ttokio::spawn(write_loop(id, w, self.map.clone()));\n\t\t\t}\n\t\t}\n\t}\n\n\tpub fn insert(&self, id: u32, stream: WriteHalf<DuplexStream>) {\n\t\tself.map.lock().unwrap().insert(\n\t\t\tid,\n\t\t\tStreamRec {\n\t\t\t\twrite: Some(stream),\n\t\t\t\tq: Vec::new(),\n\t\t\t\tended: false,\n\t\t\t},\n\t\t);\n\t}\n}\n\n/// Write loop started by `Streams.write`. It takes the WriteHalf, and\n/// runs until there's no more items in the 'write queue'. At that point, if the\n/// record still exists in the `streams` (i.e. we haven't shut down), it'll\n/// return the WriteHalf so that the next `write` call starts\n/// the loop again. Otherwise, it'll shut down the WriteHalf.\n///\n/// This is the equivalent of the same write_loop in the server_multiplexer.\n/// I couldn't figure out a nice way to abstract it without introducing\n/// performance overhead...\nasync fn write_loop(\n\tid: u32,\n\tmut w: WriteHalf<DuplexStream>,\n\tstreams: Arc<std::sync::Mutex<HashMap<u32, StreamRec>>>,\n) {\n\tlet mut items_vec = vec![];\n\tloop {\n\t\t{\n\t\t\tlet mut lock = streams.lock().unwrap();\n\t\t\tlet stream_rec = match lock.get_mut(&id) {\n\t\t\t\tSome(b) => b,\n\t\t\t\tNone => break,\n\t\t\t};\n\n\t\t\tif stream_rec.q.is_empty() {\n\t\t\t\tif stream_rec.ended {\n\t\t\t\t\tlock.remove(&id);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tstream_rec.write = Some(w);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstd::mem::swap(&mut stream_rec.q, &mut items_vec);\n\t\t}\n\n\t\tfor item in items_vec.drain(..) {\n\t\t\tif w.write_all(&item).await.is_err() {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet _ = w.shutdown().await; // got here from `break` above, meaning our record got cleared. Close the bridge if so\n}\n\nconst METHOD_STREAMS_STARTED: &str = \"streams_started\";\nconst METHOD_STREAM_DATA: &str = \"stream_data\";\nconst METHOD_STREAM_ENDED: &str = \"stream_ended\";\n\n#[allow(dead_code)] // false positive\ntrait AssertIsSync: Sync {}\nimpl<S: Serialization, C: Send + Sync> AssertIsSync for RpcDispatcher<S, C> {}\n\n/// Approximate shape that is used to determine what kind of data is incoming.\n#[derive(Deserialize, Debug)]\npub struct PartialIncoming {\n\tpub id: Option<u32>,\n\tpub method: Option<String>,\n\tpub error: Option<ResponseError>,\n}\n\n#[derive(Deserialize)]\nstruct StreamDataIncomingParams {\n\t#[serde(with = \"serde_bytes\")]\n\tpub segment: Vec<u8>,\n\tpub stream: u32,\n}\n\n#[derive(Serialize, Deserialize)]\nstruct StreamDataParams<'a> {\n\t#[serde(with = \"serde_bytes\")]\n\tpub segment: &'a [u8],\n\tpub stream: u32,\n}\n\n#[derive(Serialize, Deserialize)]\nstruct StreamEndedParams {\n\tpub stream: u32,\n}\n\n#[derive(Serialize)]\npub struct FullRequest<M: AsRef<str>, P> {\n\tpub id: Option<u32>,\n\tpub method: M,\n\tpub params: P,\n}\n\n#[derive(Deserialize)]\nstruct RequestParams<P> {\n\tpub params: P,\n}\n\n#[derive(Serialize, Deserialize)]\nstruct SuccessResponse<T> {\n\tpub id: u32,\n\tpub result: T,\n}\n\n#[derive(Serialize, Deserialize)]\nstruct ErrorResponse {\n\tpub id: u32,\n\tpub error: ResponseError,\n}\n\n#[derive(Serialize, Deserialize, Debug)]\npub struct ResponseError {\n\tpub code: i32,\n\tpub message: String,\n}\n\nenum Outcome {\n\tSuccess(Vec<u8>),\n\tError(ResponseError),\n}\n\npub struct StreamDto {\n\treq_id: u32,\n\tstreams: Vec<(u32, DuplexStream)>,\n}\n\npub enum MaybeSync {\n\tStream((Option<StreamDto>, BoxFuture<'static, Option<Vec<u8>>>)),\n\tFuture(BoxFuture<'static, Option<Vec<u8>>>),\n\tSync(Option<Vec<u8>>),\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\n\t#[tokio::test]\n\tasync fn test_remove() {\n\t\tlet streams = Streams::default();\n\t\tlet (writer, mut reader) = tokio::io::duplex(1024);\n\t\tstreams.insert(1, tokio::io::split(writer).1);\n\t\tstreams.remove(1).await;\n\n\t\tassert!(streams.map.lock().unwrap().get(&1).is_none());\n\t\tlet mut buffer = Vec::new();\n\t\tassert_eq!(reader.read_to_end(&mut buffer).await.unwrap(), 0);\n\t}\n\n\t#[tokio::test]\n\tasync fn test_write() {\n\t\tlet streams = Streams::default();\n\t\tlet (writer, mut reader) = tokio::io::duplex(1024);\n\t\tstreams.insert(1, tokio::io::split(writer).1);\n\t\tstreams.write(1, vec![1, 2, 3]);\n\n\t\tlet mut buffer = [0; 3];\n\t\tassert_eq!(reader.read_exact(&mut buffer).await.unwrap(), 3);\n\t\tassert_eq!(buffer, [1, 2, 3]);\n\t}\n\n\t#[tokio::test]\n\tasync fn test_write_with_immediate_end() {\n\t\tlet streams = Streams::default();\n\t\tlet (writer, mut reader) = tokio::io::duplex(1);\n\t\tstreams.insert(1, tokio::io::split(writer).1);\n\t\tstreams.write(1, vec![1, 2, 3]); // spawn write loop\n\t\tstreams.write(1, vec![4, 5, 6]); // enqueued while writing\n\t\tstreams.remove(1).await; // end stream\n\n\t\tlet mut buffer = Vec::new();\n\t\tassert_eq!(reader.read_to_end(&mut buffer).await.unwrap(), 6);\n\t\tassert_eq!(buffer, vec![1, 2, 3, 4, 5, 6]);\n\t}\n}\n"
  },
  {
    "path": "cli/src/self_update.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{fs, path::Path};\nuse tempfile::tempdir;\n\nuse crate::{\n\tconstants::{VSCODE_CLI_COMMIT, VSCODE_CLI_QUALITY},\n\toptions::Quality,\n\tupdate_service::{unzip_downloaded_release, Platform, Release, TargetKind, UpdateService},\n\tutil::{\n\t\tcommand::new_std_command,\n\t\terrors::{wrap, AnyError, CodeError, CorruptDownload},\n\t\thttp,\n\t\tio::{ReportCopyProgress, SilentCopyProgress},\n\t},\n};\n\npub struct SelfUpdate<'a> {\n\tcommit: &'static str,\n\tquality: Quality,\n\tplatform: Platform,\n\tupdate_service: &'a UpdateService,\n}\n\nstatic OLD_UPDATE_EXTENSION: &str = \"Updating CLI\";\n\nimpl<'a> SelfUpdate<'a> {\n\tpub fn new(update_service: &'a UpdateService) -> Result<Self, AnyError> {\n\t\tlet commit = VSCODE_CLI_COMMIT\n\t\t\t.ok_or_else(|| CodeError::UpdatesNotConfigured(\"unknown build commit\"))?;\n\n\t\tlet quality = VSCODE_CLI_QUALITY\n\t\t\t.ok_or_else(|| CodeError::UpdatesNotConfigured(\"no configured quality\"))\n\t\t\t.and_then(|q| {\n\t\t\t\tQuality::try_from(q).map_err(|_| CodeError::UpdatesNotConfigured(\"unknown quality\"))\n\t\t\t})?;\n\n\t\tlet platform = Platform::env_default().ok_or_else(|| {\n\t\t\tCodeError::UpdatesNotConfigured(\"Unknown platform, please report this error\")\n\t\t})?;\n\n\t\tOk(Self {\n\t\t\tcommit,\n\t\t\tquality,\n\t\t\tplatform,\n\t\t\tupdate_service,\n\t\t})\n\t}\n\n\t/// Gets the current release\n\tpub async fn get_current_release(&self) -> Result<Release, AnyError> {\n\t\tself.update_service\n\t\t\t.get_latest_commit(self.platform, TargetKind::Cli, self.quality)\n\t\t\t.await\n\t}\n\n\t/// Gets whether the given release is what this CLI is built against\n\tpub fn is_up_to_date_with(&self, release: &Release) -> bool {\n\t\trelease.commit == self.commit\n\t}\n\n\t/// Cleans up old self-updated binaries. Should be called with regularity.\n\t/// May fail if old versions are still running.\n\tpub fn cleanup_old_update(&self) -> Result<(), std::io::Error> {\n\t\tlet current_path = std::env::current_exe()?;\n\t\tlet old_path = current_path.with_extension(OLD_UPDATE_EXTENSION);\n\t\tif old_path.exists() {\n\t\t\tfs::remove_file(old_path)?;\n\t\t}\n\n\t\tOk(())\n\t}\n\n\t/// Updates the CLI to the given release.\n\tpub async fn do_update(\n\t\t&self,\n\t\trelease: &Release,\n\t\tprogress: impl ReportCopyProgress,\n\t) -> Result<(), AnyError> {\n\t\t// 1. Download the archive into a temporary directory\n\t\tlet tempdir = tempdir().map_err(|e| wrap(e, \"Failed to create temp dir\"))?;\n\t\tlet stream = self.update_service.get_download_stream(release).await?;\n\t\tlet archive_path = tempdir.path().join(stream.url_path_basename().unwrap());\n\t\thttp::download_into_file(&archive_path, progress, stream).await?;\n\n\t\t// 2. Unzip the archive and get the binary\n\t\tlet target_path =\n\t\t\tstd::env::current_exe().map_err(|e| wrap(e, \"could not get current exe\"))?;\n\t\tlet staging_path = target_path.with_extension(\".update\");\n\t\tlet archive_contents_path = tempdir.path().join(\"content\");\n\t\t// unzipping the single binary is pretty small and fast--don't bother with passing progress\n\t\tunzip_downloaded_release(&archive_path, &archive_contents_path, SilentCopyProgress())?;\n\t\tcopy_updated_cli_to_path(&archive_contents_path, &staging_path)?;\n\n\t\t// 3. Copy file metadata, make sure the new binary is executable\\\n\t\tcopy_file_metadata(&target_path, &staging_path)\n\t\t\t.map_err(|e| wrap(e, \"failed to set file permissions\"))?;\n\t\tvalidate_cli_is_good(&staging_path)?;\n\n\t\t// Try to rename the old CLI to the tempdir, where it can get cleaned up by the\n\t\t// OS later. However, this can fail if the tempdir is on a different drive\n\t\t// than the installation dir. In this case just rename it to \".old\".\n\t\tif fs::rename(&target_path, tempdir.path().join(\"old-code-cli\")).is_err() {\n\t\t\tfs::rename(\n\t\t\t\t&target_path,\n\t\t\t\ttarget_path.with_extension(OLD_UPDATE_EXTENSION),\n\t\t\t)\n\t\t\t.map_err(|e| wrap(e, \"failed to rename old CLI\"))?;\n\t\t}\n\n\t\tfs::rename(&staging_path, &target_path)\n\t\t\t.map_err(|e| wrap(e, \"failed to rename newly installed CLI\"))?;\n\n\t\tOk(())\n\t}\n}\n\nfn validate_cli_is_good(exe_path: &Path) -> Result<(), AnyError> {\n\tlet o = new_std_command(exe_path)\n\t\t.args([\"--version\"])\n\t\t.output()\n\t\t.map_err(|e| CorruptDownload(format!(\"could not execute new binary, aborting: {e}\")))?;\n\n\tif !o.status.success() {\n\t\tlet msg = format!(\n\t\t\t\"could not execute new binary, aborting. Stdout:\\n\\n{}\\n\\nStderr:\\n\\n{}\",\n\t\t\tString::from_utf8_lossy(&o.stdout),\n\t\t\tString::from_utf8_lossy(&o.stderr),\n\t\t);\n\n\t\treturn Err(CorruptDownload(msg).into());\n\t}\n\n\tOk(())\n}\n\nfn copy_updated_cli_to_path(unzipped_content: &Path, staging_path: &Path) -> Result<(), AnyError> {\n\tlet unzipped_files = fs::read_dir(unzipped_content)\n\t\t.map_err(|e| wrap(e, \"could not read update contents\"))?\n\t\t.collect::<Vec<_>>();\n\tif unzipped_files.len() != 1 {\n\t\tlet msg = format!(\n\t\t\t\"expected exactly one file in update, got {}\",\n\t\t\tunzipped_files.len()\n\t\t);\n\t\treturn Err(CorruptDownload(msg).into());\n\t}\n\n\tlet archive_file = unzipped_files[0]\n\t\t.as_ref()\n\t\t.map_err(|e| wrap(e, \"error listing update files\"))?;\n\tfs::copy(archive_file.path(), staging_path)\n\t\t.map_err(|e| wrap(e, \"error copying to staging file\"))?;\n\tOk(())\n}\n\n#[cfg(target_os = \"windows\")]\nfn copy_file_metadata(from: &Path, to: &Path) -> Result<(), std::io::Error> {\n\tlet permissions = from.metadata()?.permissions();\n\tfs::set_permissions(to, permissions)?;\n\tOk(())\n}\n\n#[cfg(not(target_os = \"windows\"))]\nfn copy_file_metadata(from: &Path, to: &Path) -> Result<(), std::io::Error> {\n\tuse std::os::unix::ffi::OsStrExt;\n\tuse std::os::unix::fs::MetadataExt;\n\n\tlet metadata = from.metadata()?;\n\tfs::set_permissions(to, metadata.permissions())?;\n\n\t// based on coreutils' chown https://github.com/uutils/coreutils/blob/72b4629916abe0852ad27286f4e307fbca546b6e/src/chown/chown.rs#L266-L281\n\tlet s = std::ffi::CString::new(to.as_os_str().as_bytes()).unwrap();\n\tlet ret = unsafe { libc::chown(s.as_ptr(), metadata.uid(), metadata.gid()) };\n\tif ret != 0 {\n\t\treturn Err(std::io::Error::last_os_error());\n\t}\n\n\tOk(())\n}\n"
  },
  {
    "path": "cli/src/singleton.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse serde::{Deserialize, Serialize};\nuse std::{\n\tfs::{File, OpenOptions},\n\tio::{Seek, SeekFrom, Write},\n\tpath::{Path, PathBuf},\n\ttime::Duration,\n};\nuse sysinfo::{Pid, PidExt};\n\nuse crate::{\n\tasync_pipe::{\n\t\tget_socket_name, get_socket_rw_stream, listen_socket_rw_stream, AsyncPipe,\n\t\tAsyncPipeListener,\n\t},\n\tutil::{\n\t\terrors::CodeError,\n\t\tfile_lock::{FileLock, Lock, PREFIX_LOCKED_BYTES},\n\t\tmachine::wait_until_process_exits,\n\t},\n};\n\npub struct SingletonServer {\n\tserver: AsyncPipeListener,\n\t_lock: FileLock,\n}\n\nimpl SingletonServer {\n\tpub async fn accept(&mut self) -> Result<AsyncPipe, CodeError> {\n\t\tself.server.accept().await\n\t}\n}\n\npub enum SingletonConnection {\n\t/// This instance got the singleton lock. It started listening on a socket\n\t/// and has the read/write pair. If this gets dropped, the lock is released.\n\tSingleton(SingletonServer),\n\t/// Another instance is a singleton, and this client connected to it.\n\tClient(AsyncPipe),\n}\n\n/// Contents of the lock file; the listening socket ID and process ID\n/// doing the listening.\n#[derive(Deserialize, Serialize)]\nstruct LockFileMatter {\n\tsocket_path: String,\n\tpid: u32,\n}\n\n/// Tries to acquire the singleton homed at the given lock file, either starting\n/// a new singleton if it doesn't exist, or connecting otherwise.\npub async fn acquire_singleton(lock_file: &Path) -> Result<SingletonConnection, CodeError> {\n\tlet file = OpenOptions::new()\n\t\t.read(true)\n\t\t.write(true)\n\t\t.create(true)\n\t\t.truncate(false)\n\t\t.open(lock_file)\n\t\t.map_err(CodeError::SingletonLockfileOpenFailed)?;\n\n\tmatch FileLock::acquire(file) {\n\t\tOk(Lock::AlreadyLocked(mut file)) => connect_as_client_with_file(&mut file)\n\t\t\t.await\n\t\t\t.map(SingletonConnection::Client),\n\t\tOk(Lock::Acquired(lock)) => start_singleton_server(lock)\n\t\t\t.await\n\t\t\t.map(SingletonConnection::Singleton),\n\t\tErr(e) => Err(e),\n\t}\n}\n\n/// Tries to connect to the singleton homed at the given file as a client.\npub async fn connect_as_client(lock_file: &Path) -> Result<AsyncPipe, CodeError> {\n\tlet mut file = OpenOptions::new()\n\t\t.read(true)\n\t\t.open(lock_file)\n\t\t.map_err(CodeError::SingletonLockfileOpenFailed)?;\n\n\tconnect_as_client_with_file(&mut file).await\n}\n\nasync fn start_singleton_server(mut lock: FileLock) -> Result<SingletonServer, CodeError> {\n\tlet socket_path = get_socket_name();\n\n\tlet mut vec = Vec::with_capacity(128);\n\tlet _ = vec.write(&[0; PREFIX_LOCKED_BYTES]);\n\tlet _ = rmp_serde::encode::write(\n\t\t&mut vec,\n\t\t&LockFileMatter {\n\t\t\tsocket_path: socket_path.to_string_lossy().to_string(),\n\t\t\tpid: std::process::id(),\n\t\t},\n\t);\n\n\tlock.file_mut()\n\t\t.write_all(&vec)\n\t\t.map_err(CodeError::SingletonLockfileOpenFailed)?;\n\n\tlet server = listen_socket_rw_stream(&socket_path).await?;\n\tOk(SingletonServer {\n\t\tserver,\n\t\t_lock: lock,\n\t})\n}\n\nconst MAX_CLIENT_ATTEMPTS: i32 = 10;\n\nasync fn connect_as_client_with_file(mut file: &mut File) -> Result<AsyncPipe, CodeError> {\n\t// retry, since someone else could get a lock and we could read it before\n\t// the JSON info was finished writing out\n\tlet mut attempt = 0;\n\tloop {\n\t\tlet _ = file.seek(SeekFrom::Start(PREFIX_LOCKED_BYTES as u64));\n\t\tlet r = match rmp_serde::from_read::<_, LockFileMatter>(&mut file) {\n\t\t\tOk(prev) => {\n\t\t\t\tlet socket_path = PathBuf::from(prev.socket_path);\n\n\t\t\t\ttokio::select! {\n\t\t\t\t\tp = retry_get_socket_rw_stream(&socket_path, 5, Duration::from_millis(500)) => p,\n\t\t\t\t\t_ = wait_until_process_exits(Pid::from_u32(prev.pid), 500) => return Err(CodeError::SingletonLockedProcessExited(prev.pid)),\n\t\t\t\t}\n\t\t\t}\n\t\t\tErr(e) => Err(CodeError::SingletonLockfileReadFailed(e)),\n\t\t};\n\n\t\tif r.is_ok() || attempt == MAX_CLIENT_ATTEMPTS {\n\t\t\treturn r;\n\t\t}\n\n\t\tattempt += 1;\n\t\ttokio::time::sleep(Duration::from_millis(500)).await;\n\t}\n}\n\nasync fn retry_get_socket_rw_stream(\n\tpath: &Path,\n\tmax_tries: usize,\n\tinterval: Duration,\n) -> Result<AsyncPipe, CodeError> {\n\tfor i in 0.. {\n\t\tmatch get_socket_rw_stream(path).await {\n\t\t\tOk(s) => return Ok(s),\n\t\t\tErr(e) if i == max_tries => return Err(e),\n\t\t\tErr(_) => tokio::time::sleep(interval).await,\n\t\t}\n\t}\n\n\tunreachable!()\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\n\t#[tokio::test]\n\tasync fn test_acquires_singleton() {\n\t\tlet dir = tempfile::tempdir().expect(\"expected to make temp dir\");\n\t\tlet s = acquire_singleton(&dir.path().join(\"lock\"))\n\t\t\t.await\n\t\t\t.expect(\"expected to acquire\");\n\n\t\tmatch s {\n\t\t\tSingletonConnection::Singleton(_) => {}\n\t\t\t_ => panic!(\"expected to be singleton\"),\n\t\t}\n\t}\n\n\t#[tokio::test]\n\tasync fn test_acquires_client() {\n\t\tlet dir = tempfile::tempdir().expect(\"expected to make temp dir\");\n\t\tlet lockfile = dir.path().join(\"lock\");\n\t\tlet s1 = acquire_singleton(&lockfile)\n\t\t\t.await\n\t\t\t.expect(\"expected to acquire1\");\n\t\tmatch s1 {\n\t\t\tSingletonConnection::Singleton(mut l) => tokio::spawn(async move {\n\t\t\t\tl.accept().await.expect(\"expected to accept\");\n\t\t\t}),\n\t\t\t_ => panic!(\"expected to be singleton\"),\n\t\t};\n\n\t\tlet s2 = acquire_singleton(&lockfile)\n\t\t\t.await\n\t\t\t.expect(\"expected to acquire2\");\n\t\tmatch s2 {\n\t\t\tSingletonConnection::Client(_) => {}\n\t\t\t_ => panic!(\"expected to be client\"),\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/state.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nextern crate dirs;\n\nuse std::{\n\tfs::{self, create_dir_all, read_to_string, remove_dir_all},\n\tio::Write,\n\tpath::{Path, PathBuf},\n\tsync::{Arc, Mutex},\n};\n\nuse serde::{de::DeserializeOwned, Serialize};\n\nuse crate::{\n\tconstants::{DEFAULT_DATA_PARENT_DIR, VSCODE_CLI_QUALITY},\n\tdownload_cache::DownloadCache,\n\tutil::errors::{wrap, AnyError, NoHomeForLauncherError, WrappedError},\n};\n\nconst HOME_DIR_ALTS: [&str; 2] = [\"$HOME\", \"~\"];\n\n#[derive(Clone)]\npub struct LauncherPaths {\n\tpub server_cache: DownloadCache,\n\tpub cli_cache: DownloadCache,\n\troot: PathBuf,\n}\n\nstruct PersistedStateContainer<T>\nwhere\n\tT: Clone + Serialize + DeserializeOwned + Default,\n{\n\tpath: PathBuf,\n\tstate: Option<T>,\n\t#[allow(dead_code)]\n\tmode: u32,\n}\n\nimpl<T> PersistedStateContainer<T>\nwhere\n\tT: Clone + Serialize + DeserializeOwned + Default,\n{\n\tfn load_or_get(&mut self) -> T {\n\t\tif let Some(state) = &self.state {\n\t\t\treturn state.clone();\n\t\t}\n\n\t\tlet state = if let Ok(s) = read_to_string(&self.path) {\n\t\t\tserde_json::from_str::<T>(&s).unwrap_or_default()\n\t\t} else {\n\t\t\tT::default()\n\t\t};\n\n\t\tself.state = Some(state.clone());\n\t\tstate\n\t}\n\n\tfn save(&mut self, state: T) -> Result<(), WrappedError> {\n\t\tlet s = serde_json::to_string(&state).unwrap();\n\t\tself.state = Some(state);\n\t\tself.write_state(s).map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\"error saving launcher state into {}\", self.path.display()),\n\t\t\t)\n\t\t})\n\t}\n\n\tfn write_state(&mut self, s: String) -> std::io::Result<()> {\n\t\t#[cfg(not(windows))]\n\t\tuse std::os::unix::fs::OpenOptionsExt;\n\n\t\tlet mut f = fs::OpenOptions::new();\n\t\tf.create(true);\n\t\tf.write(true);\n\t\tf.truncate(true);\n\t\t#[cfg(not(windows))]\n\t\tf.mode(self.mode);\n\n\t\tlet mut f = f.open(&self.path)?;\n\t\tf.write_all(s.as_bytes())\n\t}\n}\n\n/// Container that holds some state value that is persisted to disk.\n#[derive(Clone)]\npub struct PersistedState<T>\nwhere\n\tT: Clone + Serialize + DeserializeOwned + Default,\n{\n\tcontainer: Arc<Mutex<PersistedStateContainer<T>>>,\n}\n\nimpl<T> PersistedState<T>\nwhere\n\tT: Clone + Serialize + DeserializeOwned + Default,\n{\n\t/// Creates a new state container that persists to the given path.\n\tpub fn new(path: PathBuf) -> PersistedState<T> {\n\t\tSelf::new_with_mode(path, 0o644)\n\t}\n\n\t/// Creates a new state container that persists to the given path.\n\tpub fn new_with_mode(path: PathBuf, mode: u32) -> PersistedState<T> {\n\t\tPersistedState {\n\t\t\tcontainer: Arc::new(Mutex::new(PersistedStateContainer {\n\t\t\t\tpath,\n\t\t\t\tstate: None,\n\t\t\t\tmode,\n\t\t\t})),\n\t\t}\n\t}\n\n\t/// Loads persisted state.\n\tpub fn load(&self) -> T {\n\t\tself.container.lock().unwrap().load_or_get()\n\t}\n\n\t/// Saves persisted state.\n\tpub fn save(&self, state: T) -> Result<(), WrappedError> {\n\t\tself.container.lock().unwrap().save(state)\n\t}\n\n\t/// Mutates persisted state.\n\tpub fn update<R>(&self, mutator: impl FnOnce(&mut T) -> R) -> Result<R, WrappedError> {\n\t\tlet mut container = self.container.lock().unwrap();\n\t\tlet mut state = container.load_or_get();\n\t\tlet r = mutator(&mut state);\n\t\tcontainer.save(state).map(|_| r)\n\t}\n}\n\nimpl LauncherPaths {\n\t/// todo@conno4312: temporary migration from the old CLI data directory\n\tpub fn migrate(root: Option<String>) -> Result<LauncherPaths, AnyError> {\n\t\tif root.is_some() {\n\t\t\treturn Self::new(root);\n\t\t}\n\n\t\tlet home_dir = match dirs::home_dir() {\n\t\t\tNone => return Self::new(root),\n\t\t\tSome(d) => d,\n\t\t};\n\n\t\tlet old_dir = home_dir.join(\".vscode-cli\");\n\t\tlet mut new_dir = home_dir;\n\t\tnew_dir.push(DEFAULT_DATA_PARENT_DIR);\n\t\tnew_dir.push(\"cli\");\n\t\tif !old_dir.exists() || new_dir.exists() {\n\t\t\treturn Self::new_for_path(new_dir);\n\t\t}\n\n\t\tif let Err(e) = std::fs::rename(&old_dir, &new_dir) {\n\t\t\t// no logger exists at this point in the lifecycle, so just log to stderr\n\t\t\teprintln!(\"Failed to migrate old CLI data directory, will create a new one ({e})\");\n\t\t}\n\n\t\tSelf::new_for_path(new_dir)\n\t}\n\n\tpub fn new(root: Option<String>) -> Result<LauncherPaths, AnyError> {\n\t\tlet root = root.unwrap_or_else(|| format!(\"~/{DEFAULT_DATA_PARENT_DIR}/cli\"));\n\t\tlet mut replaced = root.to_owned();\n\t\tfor token in HOME_DIR_ALTS {\n\t\t\tif root.contains(token) {\n\t\t\t\tif let Some(home) = dirs::home_dir() {\n\t\t\t\t\treplaced = root.replace(token, &home.to_string_lossy())\n\t\t\t\t} else {\n\t\t\t\t\treturn Err(AnyError::from(NoHomeForLauncherError()));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tSelf::new_for_path(PathBuf::from(replaced))\n\t}\n\n\tfn new_for_path(root: PathBuf) -> Result<LauncherPaths, AnyError> {\n\t\tif !root.exists() {\n\t\t\tcreate_dir_all(&root)\n\t\t\t\t.map_err(|e| wrap(e, format!(\"error creating directory {}\", root.display())))?;\n\t\t}\n\n\t\tOk(LauncherPaths::new_without_replacements(root))\n\t}\n\n\tpub fn new_without_replacements(root: PathBuf) -> LauncherPaths {\n\t\t// cleanup folders that existed before the new LRU strategy:\n\t\tlet _ = std::fs::remove_dir_all(root.join(\"server-insiders\"));\n\t\tlet _ = std::fs::remove_dir_all(root.join(\"server-stable\"));\n\n\t\tLauncherPaths {\n\t\t\tserver_cache: DownloadCache::new(root.join(\"servers\")),\n\t\t\tcli_cache: DownloadCache::new(root.join(\"cli\")),\n\t\t\troot,\n\t\t}\n\t}\n\n\t/// Root directory for the server launcher\n\tpub fn root(&self) -> &Path {\n\t\t&self.root\n\t}\n\n\t/// Lockfile for the running tunnel\n\tpub fn tunnel_lockfile(&self) -> PathBuf {\n\t\tself.root.join(format!(\n\t\t\t\"tunnel-{}.lock\",\n\t\t\tVSCODE_CLI_QUALITY.unwrap_or(\"oss\")\n\t\t))\n\t}\n\n\t/// Lockfile for port forwarding\n\tpub fn forwarding_lockfile(&self) -> PathBuf {\n\t\tself.root.join(format!(\n\t\t\t\"forwarding-{}.lock\",\n\t\t\tVSCODE_CLI_QUALITY.unwrap_or(\"oss\")\n\t\t))\n\t}\n\n\t/// Suggested path for tunnel service logs, when using file logs\n\tpub fn service_log_file(&self) -> PathBuf {\n\t\tself.root.join(\"tunnel-service.log\")\n\t}\n\n\t/// Removes the launcher data directory.\n\tpub fn remove(&self) -> Result<(), WrappedError> {\n\t\tremove_dir_all(&self.root).map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\n\t\t\t\t\t\"error removing launcher data directory {}\",\n\t\t\t\t\tself.root.display()\n\t\t\t\t),\n\t\t\t)\n\t\t})\n\t}\n\n\t/// Suggested path for web server storage\n\tpub fn web_server_storage(&self) -> PathBuf {\n\t\tself.root.join(\"serve-web\")\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/challenge.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n#[cfg(not(feature = \"vsda\"))]\npub fn create_challenge() -> String {\n\tuse rand::distributions::{Alphanumeric, DistString};\n\tAlphanumeric.sample_string(&mut rand::thread_rng(), 16)\n}\n\n#[cfg(not(feature = \"vsda\"))]\npub fn sign_challenge(challenge: &str) -> String {\n\tuse base64::{engine::general_purpose as b64, Engine as _};\n\tuse sha2::{Digest, Sha256};\n\tlet mut hash = Sha256::new();\n\thash.update(challenge.as_bytes());\n\tlet result = hash.finalize();\n\tb64::URL_SAFE_NO_PAD.encode(result)\n}\n\n#[cfg(not(feature = \"vsda\"))]\npub fn verify_challenge(challenge: &str, response: &str) -> bool {\n\tsign_challenge(challenge) == response\n}\n\n#[cfg(feature = \"vsda\")]\npub fn create_challenge() -> String {\n\tuse rand::distributions::{Alphanumeric, DistString};\n\tlet str = Alphanumeric.sample_string(&mut rand::thread_rng(), 16);\n\tvsda::create_new_message(&str)\n}\n\n#[cfg(feature = \"vsda\")]\npub fn sign_challenge(challenge: &str) -> String {\n\tvsda::sign(challenge)\n}\n\n#[cfg(feature = \"vsda\")]\npub fn verify_challenge(challenge: &str, response: &str) -> bool {\n\tvsda::validate(challenge, response)\n}\n"
  },
  {
    "path": "cli/src/tunnels/code_server.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse super::paths::{InstalledServer, ServerPaths};\nuse crate::async_pipe::get_socket_name;\nuse crate::constants::{\n\tAPPLICATION_NAME, EDITOR_WEB_URL, QUALITYLESS_PRODUCT_NAME, QUALITYLESS_SERVER_NAME,\n};\nuse crate::download_cache::DownloadCache;\nuse crate::options::{Quality, TelemetryLevel};\nuse crate::state::LauncherPaths;\nuse crate::tunnels::paths::{get_server_folder_name, SERVER_FOLDER_NAME};\nuse crate::update_service::{\n\tunzip_downloaded_release, Platform, Release, TargetKind, UpdateService,\n};\nuse crate::util::command::{\n\tcapture_command, capture_command_and_check_status, check_output_status, kill_tree,\n\tnew_script_command,\n};\nuse crate::util::errors::{wrap, AnyError, CodeError, ExtensionInstallFailed, WrappedError};\nuse crate::util::http::{self, BoxedHttp};\nuse crate::util::io::SilentCopyProgress;\nuse crate::util::machine::process_exists;\nuse crate::util::prereqs::skip_requirements_check;\nuse crate::{debug, info, log, spanf, trace, warning};\nuse lazy_static::lazy_static;\nuse opentelemetry::KeyValue;\nuse regex::Regex;\nuse serde::Deserialize;\nuse std::fs;\nuse std::fs::File;\nuse std::io::Write;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\nuse std::time::Duration;\nuse tokio::fs::remove_file;\nuse tokio::io::{AsyncBufReadExt, BufReader};\nuse tokio::process::{Child, Command};\nuse tokio::sync::oneshot::Receiver;\nuse tokio::time::{interval, timeout};\n\nlazy_static! {\n\tstatic ref LISTENING_PORT_RE: Regex =\n\t\tRegex::new(r\"Extension host agent listening on (.+)\").unwrap();\n\tstatic ref WEB_UI_RE: Regex = Regex::new(r\"Web UI available at (.+)\").unwrap();\n}\n\n#[derive(Clone, Debug, Default)]\npub struct CodeServerArgs {\n\tpub host: Option<String>,\n\tpub port: Option<u16>,\n\tpub socket_path: Option<String>,\n\n\t// common argument\n\tpub telemetry_level: Option<TelemetryLevel>,\n\tpub log: Option<log::Level>,\n\tpub accept_server_license_terms: bool,\n\tpub verbose: bool,\n\tpub server_data_dir: Option<String>,\n\tpub extensions_dir: Option<String>,\n\t// extension management\n\tpub install_extensions: Vec<String>,\n\tpub uninstall_extensions: Vec<String>,\n\tpub update_extensions: bool,\n\tpub list_extensions: bool,\n\tpub show_versions: bool,\n\tpub category: Option<String>,\n\tpub pre_release: bool,\n\tpub donot_include_pack_and_dependencies: bool,\n\tpub force: bool,\n\tpub start_server: bool,\n\t// connection tokens\n\tpub connection_token: Option<String>,\n\tpub connection_token_file: Option<String>,\n\tpub without_connection_token: bool,\n}\n\nimpl CodeServerArgs {\n\tpub fn log_level(&self) -> log::Level {\n\t\tif self.verbose {\n\t\t\tlog::Level::Trace\n\t\t} else {\n\t\t\tself.log.unwrap_or(log::Level::Info)\n\t\t}\n\t}\n\n\tpub fn telemetry_disabled(&self) -> bool {\n\t\tself.telemetry_level == Some(TelemetryLevel::Off)\n\t}\n\n\tpub fn command_arguments(&self) -> Vec<String> {\n\t\tlet mut args = Vec::new();\n\t\tif let Some(i) = &self.socket_path {\n\t\t\targs.push(format!(\"--socket-path={i}\"));\n\t\t} else {\n\t\t\tif let Some(i) = &self.host {\n\t\t\t\targs.push(format!(\"--host={i}\"));\n\t\t\t}\n\t\t\tif let Some(i) = &self.port {\n\t\t\t\targs.push(format!(\"--port={i}\"));\n\t\t\t}\n\t\t}\n\n\t\tif let Some(i) = &self.connection_token {\n\t\t\targs.push(format!(\"--connection-token={i}\"));\n\t\t}\n\t\tif let Some(i) = &self.connection_token_file {\n\t\t\targs.push(format!(\"--connection-token-file={i}\"));\n\t\t}\n\t\tif self.without_connection_token {\n\t\t\targs.push(String::from(\"--without-connection-token\"));\n\t\t}\n\t\tif self.accept_server_license_terms {\n\t\t\targs.push(String::from(\"--accept-server-license-terms\"));\n\t\t}\n\t\tif let Some(i) = self.telemetry_level {\n\t\t\targs.push(format!(\"--telemetry-level={i}\"));\n\t\t}\n\t\tif let Some(i) = self.log {\n\t\t\targs.push(format!(\"--log={i}\"));\n\t\t}\n\n\t\tfor extension in &self.install_extensions {\n\t\t\targs.push(format!(\"--install-extension={extension}\"));\n\t\t}\n\t\tif !&self.install_extensions.is_empty() {\n\t\t\tif self.pre_release {\n\t\t\t\targs.push(String::from(\"--pre-release\"));\n\t\t\t}\n\t\t\tif self.force {\n\t\t\t\targs.push(String::from(\"--force\"));\n\t\t\t}\n\t\t}\n\t\tfor extension in &self.uninstall_extensions {\n\t\t\targs.push(format!(\"--uninstall-extension={extension}\"));\n\t\t}\n\t\tif self.update_extensions {\n\t\t\targs.push(String::from(\"--update-extensions\"));\n\t\t}\n\t\tif self.list_extensions {\n\t\t\targs.push(String::from(\"--list-extensions\"));\n\t\t\tif self.show_versions {\n\t\t\t\targs.push(String::from(\"--show-versions\"));\n\t\t\t}\n\t\t\tif let Some(i) = &self.category {\n\t\t\t\targs.push(format!(\"--category={i}\"));\n\t\t\t}\n\t\t}\n\t\tif let Some(d) = &self.server_data_dir {\n\t\t\targs.push(format!(\"--server-data-dir={d}\"));\n\t\t}\n\t\tif let Some(d) = &self.extensions_dir {\n\t\t\targs.push(format!(\"--extensions-dir={d}\"));\n\t\t}\n\t\tif self.start_server {\n\t\t\targs.push(String::from(\"--start-server\"));\n\t\t}\n\t\targs\n\t}\n}\n\n/// Base server params that can be `resolve()`d to a `ResolvedServerParams`.\n/// Doing so fetches additional information like a commit ID if previously\n/// unspecified.\npub struct ServerParamsRaw {\n\tpub commit_id: Option<String>,\n\tpub quality: Quality,\n\tpub code_server_args: CodeServerArgs,\n\tpub headless: bool,\n\tpub platform: Platform,\n}\n\n/// Server params that can be used to start a VS Code server.\npub struct ResolvedServerParams {\n\tpub release: Release,\n\tpub code_server_args: CodeServerArgs,\n}\n\nimpl ResolvedServerParams {\n\tfn as_installed_server(&self) -> InstalledServer {\n\t\tInstalledServer {\n\t\t\tcommit: self.release.commit.clone(),\n\t\t\tquality: self.release.quality,\n\t\t\theadless: self.release.target == TargetKind::Server,\n\t\t}\n\t}\n}\n\nimpl ServerParamsRaw {\n\tpub async fn resolve(\n\t\tself,\n\t\tlog: &log::Logger,\n\t\thttp: BoxedHttp,\n\t) -> Result<ResolvedServerParams, AnyError> {\n\t\tOk(ResolvedServerParams {\n\t\t\trelease: self.get_or_fetch_commit_id(log, http).await?,\n\t\t\tcode_server_args: self.code_server_args,\n\t\t})\n\t}\n\n\tasync fn get_or_fetch_commit_id(\n\t\t&self,\n\t\tlog: &log::Logger,\n\t\thttp: BoxedHttp,\n\t) -> Result<Release, AnyError> {\n\t\tlet target = match self.headless {\n\t\t\ttrue => TargetKind::Server,\n\t\t\tfalse => TargetKind::Web,\n\t\t};\n\n\t\tif let Some(c) = &self.commit_id {\n\t\t\treturn Ok(Release {\n\t\t\t\tcommit: c.clone(),\n\t\t\t\tquality: self.quality,\n\t\t\t\ttarget,\n\t\t\t\tname: String::new(),\n\t\t\t\tplatform: self.platform,\n\t\t\t});\n\t\t}\n\n\t\tUpdateService::new(log.clone(), http)\n\t\t\t.get_latest_commit(self.platform, target, self.quality)\n\t\t\t.await\n\t}\n}\n\n#[derive(Deserialize)]\n#[serde(rename_all = \"camelCase\")]\n#[allow(dead_code)]\nstruct UpdateServerVersion {\n\tpub name: String,\n\tpub version: String,\n\tpub product_version: String,\n\tpub timestamp: i64,\n}\n\n/// Code server listening on a port address.\n#[derive(Clone)]\npub struct SocketCodeServer {\n\tpub commit_id: String,\n\tpub socket: PathBuf,\n\tpub origin: Arc<CodeServerOrigin>,\n}\n\n/// Code server listening on a socket address.\n#[derive(Clone)]\npub struct PortCodeServer {\n\tpub commit_id: String,\n\tpub port: u16,\n\tpub origin: Arc<CodeServerOrigin>,\n}\n\n/// A server listening on any address/location.\npub enum AnyCodeServer {\n\tSocket(SocketCodeServer),\n\tPort(PortCodeServer),\n}\n\npub enum CodeServerOrigin {\n\t/// A new code server, that opens the barrier when it exits.\n\tNew(Box<Child>),\n\t/// An existing code server with a PID.\n\tExisting(u32),\n}\n\nimpl CodeServerOrigin {\n\tpub async fn wait_for_exit(&mut self) {\n\t\tmatch self {\n\t\t\tCodeServerOrigin::New(child) => {\n\t\t\t\tchild.wait().await.ok();\n\t\t\t}\n\t\t\tCodeServerOrigin::Existing(pid) => {\n\t\t\t\tlet mut interval = interval(Duration::from_secs(30));\n\t\t\t\twhile process_exists(*pid) {\n\t\t\t\t\tinterval.tick().await;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpub async fn kill(&mut self) {\n\t\tmatch self {\n\t\t\tCodeServerOrigin::New(child) => {\n\t\t\t\tchild.kill().await.ok();\n\t\t\t}\n\t\t\tCodeServerOrigin::Existing(pid) => {\n\t\t\t\tkill_tree(*pid).await.ok();\n\t\t\t}\n\t\t}\n\t}\n}\n\n/// Ensures the given list of extensions are installed on the running server.\nasync fn do_extension_install_on_running_server(\n\tstart_script_path: &Path,\n\textensions: &[String],\n\tlog: &log::Logger,\n) -> Result<(), AnyError> {\n\tif extensions.is_empty() {\n\t\treturn Ok(());\n\t}\n\n\tdebug!(log, \"Installing extensions...\");\n\tlet command = format!(\n\t\t\"{} {}\",\n\t\tstart_script_path.display(),\n\t\textensions\n\t\t\t.iter()\n\t\t\t.map(|s| get_extensions_flag(s))\n\t\t\t.collect::<Vec<String>>()\n\t\t\t.join(\" \")\n\t);\n\n\tlet result = capture_command(\"bash\", &[\"-c\", &command]).await?;\n\tif !result.status.success() {\n\t\tErr(AnyError::from(ExtensionInstallFailed(\n\t\t\tString::from_utf8_lossy(&result.stderr).to_string(),\n\t\t)))\n\t} else {\n\t\tOk(())\n\t}\n}\n\npub struct ServerBuilder<'a> {\n\tlogger: &'a log::Logger,\n\tserver_params: &'a ResolvedServerParams,\n\tlauncher_paths: &'a LauncherPaths,\n\tserver_paths: ServerPaths,\n\thttp: BoxedHttp,\n}\n\nimpl<'a> ServerBuilder<'a> {\n\tpub fn new(\n\t\tlogger: &'a log::Logger,\n\t\tserver_params: &'a ResolvedServerParams,\n\t\tlauncher_paths: &'a LauncherPaths,\n\t\thttp: BoxedHttp,\n\t) -> Self {\n\t\tSelf {\n\t\t\tlogger,\n\t\t\tserver_params,\n\t\t\tlauncher_paths,\n\t\t\tserver_paths: server_params\n\t\t\t\t.as_installed_server()\n\t\t\t\t.server_paths(launcher_paths),\n\t\t\thttp,\n\t\t}\n\t}\n\n\t/// Gets any already-running server from this directory.\n\tpub async fn get_running(&self) -> Result<Option<AnyCodeServer>, AnyError> {\n\t\tinfo!(\n\t\t\tself.logger,\n\t\t\t\"Checking {} and {} for a running server...\",\n\t\t\tself.server_paths.logfile.display(),\n\t\t\tself.server_paths.pidfile.display()\n\t\t);\n\n\t\tlet pid = match self.server_paths.get_running_pid() {\n\t\t\tSome(pid) => pid,\n\t\t\tNone => return Ok(None),\n\t\t};\n\t\tinfo!(self.logger, \"Found running server (pid={})\", pid);\n\t\tif !Path::new(&self.server_paths.logfile).exists() {\n\t\t\twarning!(self.logger, \"{} Server is running but its logfile is missing. Don't delete the {} Server manually, run the command '{} prune'.\", QUALITYLESS_PRODUCT_NAME, QUALITYLESS_PRODUCT_NAME, APPLICATION_NAME);\n\t\t\treturn Ok(None);\n\t\t}\n\n\t\tdo_extension_install_on_running_server(\n\t\t\t&self.server_paths.executable,\n\t\t\t&self.server_params.code_server_args.install_extensions,\n\t\t\tself.logger,\n\t\t)\n\t\t.await?;\n\n\t\tlet origin = Arc::new(CodeServerOrigin::Existing(pid));\n\t\tlet contents = fs::read_to_string(&self.server_paths.logfile)\n\t\t\t.expect(\"Something went wrong reading log file\");\n\n\t\tif let Some(port) = parse_port_from(&contents) {\n\t\t\tOk(Some(AnyCodeServer::Port(PortCodeServer {\n\t\t\t\tcommit_id: self.server_params.release.commit.to_owned(),\n\t\t\t\tport,\n\t\t\t\torigin,\n\t\t\t})))\n\t\t} else if let Some(socket) = parse_socket_from(&contents) {\n\t\t\tOk(Some(AnyCodeServer::Socket(SocketCodeServer {\n\t\t\t\tcommit_id: self.server_params.release.commit.to_owned(),\n\t\t\t\tsocket,\n\t\t\t\torigin,\n\t\t\t})))\n\t\t} else {\n\t\t\tOk(None)\n\t\t}\n\t}\n\n\t/// Removes a cached server.\n\tpub async fn evict(&self) -> Result<(), WrappedError> {\n\t\tlet name = get_server_folder_name(\n\t\t\tself.server_params.release.quality,\n\t\t\t&self.server_params.release.commit,\n\t\t);\n\n\t\tself.launcher_paths.server_cache.delete(&name)\n\t}\n\n\t/// Ensures the server is set up in the configured directory.\n\tpub async fn setup(&self) -> Result<(), AnyError> {\n\t\tdebug!(\n\t\t\tself.logger,\n\t\t\t\"Installing and setting up {}...\", QUALITYLESS_SERVER_NAME\n\t\t);\n\n\t\tlet update_service = UpdateService::new(self.logger.clone(), self.http.clone());\n\t\tlet name = get_server_folder_name(\n\t\t\tself.server_params.release.quality,\n\t\t\t&self.server_params.release.commit,\n\t\t);\n\n\t\tlet result = self\n\t\t\t.launcher_paths\n\t\t\t.server_cache\n\t\t\t.create(name, |target_dir| async move {\n\t\t\t\tlet tmpdir =\n\t\t\t\t\ttempfile::tempdir().map_err(|e| wrap(e, \"error creating temp download dir\"))?;\n\n\t\t\t\tlet response = update_service\n\t\t\t\t\t.get_download_stream(&self.server_params.release)\n\t\t\t\t\t.await?;\n\t\t\t\tlet archive_path = tmpdir.path().join(response.url_path_basename().unwrap());\n\n\t\t\t\tinfo!(\n\t\t\t\t\tself.logger,\n\t\t\t\t\t\"Downloading {} server -> {}\",\n\t\t\t\t\tQUALITYLESS_PRODUCT_NAME,\n\t\t\t\t\tarchive_path.display()\n\t\t\t\t);\n\n\t\t\t\thttp::download_into_file(\n\t\t\t\t\t&archive_path,\n\t\t\t\t\tself.logger.get_download_logger(\"server download progress:\"),\n\t\t\t\t\tresponse,\n\t\t\t\t)\n\t\t\t\t.await?;\n\n\t\t\t\tlet server_dir = target_dir.join(SERVER_FOLDER_NAME);\n\t\t\t\tunzip_downloaded_release(\n\t\t\t\t\t&archive_path,\n\t\t\t\t\t&server_dir,\n\t\t\t\t\tself.logger.get_download_logger(\"server inflate progress:\"),\n\t\t\t\t)?;\n\n\t\t\t\tif !skip_requirements_check().await {\n\t\t\t\t\tlet output = capture_command_and_check_status(\n\t\t\t\t\t\tserver_dir\n\t\t\t\t\t\t\t.join(\"bin\")\n\t\t\t\t\t\t\t.join(self.server_params.release.quality.server_entrypoint()),\n\t\t\t\t\t\t&[\"--version\"],\n\t\t\t\t\t)\n\t\t\t\t\t.await\n\t\t\t\t\t.map_err(|e| wrap(e, \"error checking server integrity\"))?;\n\n\t\t\t\t\ttrace!(\n\t\t\t\t\t\tself.logger,\n\t\t\t\t\t\t\"Server integrity verified, version: {}\",\n\t\t\t\t\t\tString::from_utf8_lossy(&output.stdout).replace('\\n', \" / \")\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tinfo!(self.logger, \"Skipping server integrity check\");\n\t\t\t\t}\n\n\t\t\t\tOk(())\n\t\t\t})\n\t\t\t.await;\n\n\t\tif let Err(e) = result {\n\t\t\terror!(self.logger, \"Error installing server: {}\", e);\n\t\t\treturn Err(e);\n\t\t}\n\n\t\tdebug!(self.logger, \"Server setup complete\");\n\n\t\tOk(())\n\t}\n\n\tpub async fn listen_on_port(&self, port: u16) -> Result<PortCodeServer, AnyError> {\n\t\tlet mut cmd = self.get_base_command();\n\t\tcmd.arg(\"--start-server\")\n\t\t\t.arg(\"--enable-remote-auto-shutdown\")\n\t\t\t.arg(format!(\"--port={port}\"));\n\n\t\tlet child = self.spawn_server_process(cmd).await?;\n\t\tlet log_file = self.get_logfile()?;\n\t\tlet plog = self.logger.prefixed(&log::new_code_server_prefix());\n\n\t\tlet (mut origin, listen_rx) =\n\t\t\tmonitor_server::<PortMatcher, u16>(child, Some(log_file), plog, false);\n\n\t\tlet port = match timeout(Duration::from_secs(8), listen_rx).await {\n\t\t\tErr(_) => {\n\t\t\t\torigin.kill().await;\n\t\t\t\treturn Err(CodeError::ServerOriginTimeout.into());\n\t\t\t}\n\t\t\tOk(Err(s)) => {\n\t\t\t\torigin.kill().await;\n\t\t\t\treturn Err(CodeError::ServerUnexpectedExit(format!(\"{s}\")).into());\n\t\t\t}\n\t\t\tOk(Ok(p)) => p,\n\t\t};\n\n\t\tinfo!(self.logger, \"Server started\");\n\n\t\tOk(PortCodeServer {\n\t\t\tcommit_id: self.server_params.release.commit.to_owned(),\n\t\t\tport,\n\t\t\torigin: Arc::new(origin),\n\t\t})\n\t}\n\n\t/// Runs the command that just installs extensions and exits.\n\tpub async fn install_extensions(&self) -> Result<(), AnyError> {\n\t\t// cmd already has --install-extensions from base\n\t\tlet mut cmd = self.get_base_command();\n\t\tlet cmd_str = || {\n\t\t\tself.server_params\n\t\t\t\t.code_server_args\n\t\t\t\t.command_arguments()\n\t\t\t\t.join(\" \")\n\t\t};\n\n\t\tlet r = cmd.output().await.map_err(|e| CodeError::CommandFailed {\n\t\t\tcommand: cmd_str(),\n\t\t\tcode: -1,\n\t\t\toutput: e.to_string(),\n\t\t})?;\n\n\t\tcheck_output_status(r, cmd_str)?;\n\n\t\tOk(())\n\t}\n\n\tpub async fn listen_on_default_socket(&self) -> Result<SocketCodeServer, AnyError> {\n\t\tlet requested_file = get_socket_name();\n\t\tself.listen_on_socket(&requested_file).await\n\t}\n\n\tpub async fn listen_on_socket(&self, socket: &Path) -> Result<SocketCodeServer, AnyError> {\n\t\tOk(spanf!(\n\t\t\tself.logger,\n\t\t\tself.logger.span(\"server.start\").with_attributes(vec! {\n\t\t\t\tKeyValue::new(\"commit_id\", self.server_params.release.commit.to_string()),\n\t\t\t\tKeyValue::new(\"quality\", format!(\"{}\", self.server_params.release.quality)),\n\t\t\t}),\n\t\t\tself._listen_on_socket(socket)\n\t\t)?)\n\t}\n\n\tasync fn _listen_on_socket(&self, socket: &Path) -> Result<SocketCodeServer, AnyError> {\n\t\tremove_file(&socket).await.ok(); // ignore any error if it doesn't exist\n\n\t\tlet mut cmd = self.get_base_command();\n\t\tcmd.arg(\"--start-server\")\n\t\t\t.arg(\"--enable-remote-auto-shutdown\")\n\t\t\t.arg(format!(\"--socket-path={}\", socket.display()));\n\n\t\tlet child = self.spawn_server_process(cmd).await?;\n\t\tlet log_file = self.get_logfile()?;\n\t\tlet plog = self.logger.prefixed(&log::new_code_server_prefix());\n\n\t\tlet (mut origin, listen_rx) =\n\t\t\tmonitor_server::<SocketMatcher, PathBuf>(child, Some(log_file), plog, false);\n\n\t\tlet socket = match timeout(Duration::from_secs(30), listen_rx).await {\n\t\t\tErr(_) => {\n\t\t\t\torigin.kill().await;\n\t\t\t\treturn Err(CodeError::ServerOriginTimeout.into());\n\t\t\t}\n\t\t\tOk(Err(s)) => {\n\t\t\t\torigin.kill().await;\n\t\t\t\treturn Err(CodeError::ServerUnexpectedExit(format!(\"{s}\")).into());\n\t\t\t}\n\t\t\tOk(Ok(socket)) => socket,\n\t\t};\n\n\t\tinfo!(self.logger, \"Server started\");\n\n\t\tOk(SocketCodeServer {\n\t\t\tcommit_id: self.server_params.release.commit.to_owned(),\n\t\t\tsocket,\n\t\t\torigin: Arc::new(origin),\n\t\t})\n\t}\n\n\tasync fn spawn_server_process(&self, mut cmd: Command) -> Result<Child, AnyError> {\n\t\tinfo!(self.logger, \"Starting server...\");\n\n\t\tdebug!(self.logger, \"Starting server with command... {:?}\", cmd);\n\n\t\t// On Windows spawning a code-server binary will run cmd.exe /c C:\\path\\to\\code-server.cmd...\n\t\t// This spawns a cmd.exe window for the user, which if they close will kill the code-server process\n\t\t// and disconnect the tunnel. To prevent this, pass the CREATE_NO_WINDOW flag to the Command\n\t\t// only on Windows.\n\t\t// Original issue: https://github.com/microsoft/vscode/issues/184058\n\t\t// Partial fix: https://github.com/microsoft/vscode/pull/184621\n\t\t#[cfg(target_os = \"windows\")]\n\t\tlet cmd = cmd.creation_flags(\n\t\t\twinapi::um::winbase::CREATE_NO_WINDOW\n\t\t\t\t| winapi::um::winbase::CREATE_NEW_PROCESS_GROUP\n\t\t\t\t| get_should_use_breakaway_from_job()\n\t\t\t\t\t.await\n\t\t\t\t\t.then_some(winapi::um::winbase::CREATE_BREAKAWAY_FROM_JOB)\n\t\t\t\t\t.unwrap_or_default(),\n\t\t);\n\n\t\tlet child = cmd\n\t\t\t.stderr(std::process::Stdio::piped())\n\t\t\t.stdout(std::process::Stdio::piped())\n\t\t\t.spawn()\n\t\t\t.map_err(|e| CodeError::ServerUnexpectedExit(format!(\"{e}\")))?;\n\n\t\tself.server_paths\n\t\t\t.write_pid(child.id().expect(\"expected server to have pid\"))?;\n\n\t\tOk(child)\n\t}\n\n\tfn get_logfile(&self) -> Result<File, WrappedError> {\n\t\tFile::create(&self.server_paths.logfile).map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\n\t\t\t\t\t\"error creating log file {}\",\n\t\t\t\t\tself.server_paths.logfile.display()\n\t\t\t\t),\n\t\t\t)\n\t\t})\n\t}\n\n\tfn get_base_command(&self) -> Command {\n\t\tlet mut cmd = new_script_command(&self.server_paths.executable);\n\t\tcmd.stdin(std::process::Stdio::null())\n\t\t\t.args(self.server_params.code_server_args.command_arguments());\n\t\tcmd\n\t}\n}\n\nfn monitor_server<M, R>(\n\tmut child: Child,\n\tlog_file: Option<File>,\n\tplog: log::Logger,\n\twrite_directly: bool,\n) -> (CodeServerOrigin, Receiver<R>)\nwhere\n\tM: ServerOutputMatcher<R>,\n\tR: 'static + Send + std::fmt::Debug,\n{\n\tlet stdout = child\n\t\t.stdout\n\t\t.take()\n\t\t.expect(\"child did not have a handle to stdout\");\n\n\tlet stderr = child\n\t\t.stderr\n\t\t.take()\n\t\t.expect(\"child did not have a handle to stdout\");\n\n\tlet (listen_tx, listen_rx) = tokio::sync::oneshot::channel();\n\n\t// Handle stderr and stdout in a separate task. Initially scan lines looking\n\t// for the listening port. Afterwards, just scan and write out to the file.\n\ttokio::spawn(async move {\n\t\tlet mut stdout_reader = BufReader::new(stdout).lines();\n\t\tlet mut stderr_reader = BufReader::new(stderr).lines();\n\t\tlet write_line = |line: &str| -> std::io::Result<()> {\n\t\t\tif let Some(mut f) = log_file.as_ref() {\n\t\t\t\tf.write_all(line.as_bytes())?;\n\t\t\t\tf.write_all(b\"\\n\")?;\n\t\t\t}\n\t\t\tif write_directly {\n\t\t\t\tprintln!(\"{line}\");\n\t\t\t} else {\n\t\t\t\ttrace!(plog, line);\n\t\t\t}\n\t\t\tOk(())\n\t\t};\n\n\t\tloop {\n\t\t\tlet line = tokio::select! {\n\t\t\t\tl = stderr_reader.next_line() => l,\n\t\t\t\tl = stdout_reader.next_line() => l,\n\t\t\t};\n\n\t\t\tmatch line {\n\t\t\t\tErr(e) => {\n\t\t\t\t\ttrace!(plog, \"error reading from stdout/stderr: {}\", e);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tOk(None) => break,\n\t\t\t\tOk(Some(l)) => {\n\t\t\t\t\twrite_line(&l).ok();\n\n\t\t\t\t\tif let Some(listen_on) = M::match_line(&l) {\n\t\t\t\t\t\ttrace!(plog, \"parsed location: {:?}\", listen_on);\n\t\t\t\t\t\tlisten_tx.send(listen_on).ok();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tloop {\n\t\t\tlet line = tokio::select! {\n\t\t\t\tl = stderr_reader.next_line() => l,\n\t\t\t\tl = stdout_reader.next_line() => l,\n\t\t\t};\n\n\t\t\tmatch line {\n\t\t\t\tErr(e) => {\n\t\t\t\t\ttrace!(plog, \"error reading from stdout/stderr: {}\", e);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tOk(None) => break,\n\t\t\t\tOk(Some(l)) => {\n\t\t\t\t\twrite_line(&l).ok();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tlet origin = CodeServerOrigin::New(Box::new(child));\n\t(origin, listen_rx)\n}\n\nfn get_extensions_flag(extension_id: &str) -> String {\n\tformat!(\"--install-extension={extension_id}\")\n}\n\n/// A type that can be used to scan stdout from the VS Code server. Returns\n/// some other type that, in turn, is returned from starting the server.\npub trait ServerOutputMatcher<R>\nwhere\n\tR: Send,\n{\n\tfn match_line(line: &str) -> Option<R>;\n}\n\n/// Parses a line like \"Extension host agent listening on /tmp/foo.sock\"\nstruct SocketMatcher();\n\nimpl ServerOutputMatcher<PathBuf> for SocketMatcher {\n\tfn match_line(line: &str) -> Option<PathBuf> {\n\t\tparse_socket_from(line)\n\t}\n}\n\n/// Parses a line like \"Extension host agent listening on 9000\"\npub struct PortMatcher();\n\nimpl ServerOutputMatcher<u16> for PortMatcher {\n\tfn match_line(line: &str) -> Option<u16> {\n\t\tparse_port_from(line)\n\t}\n}\n\n/// Parses a line like \"Web UI available at http://localhost:9000/?tkn=...\"\npub struct WebUiMatcher();\n\nimpl ServerOutputMatcher<reqwest::Url> for WebUiMatcher {\n\tfn match_line(line: &str) -> Option<reqwest::Url> {\n\t\tWEB_UI_RE.captures(line).and_then(|cap| {\n\t\t\tcap.get(1)\n\t\t\t\t.and_then(|uri| reqwest::Url::parse(uri.as_str()).ok())\n\t\t})\n\t}\n}\n\n/// Does not do any parsing and just immediately returns an empty result.\npub struct NoOpMatcher();\n\nimpl ServerOutputMatcher<()> for NoOpMatcher {\n\tfn match_line(_: &str) -> Option<()> {\n\t\tSome(())\n\t}\n}\n\nfn parse_socket_from(text: &str) -> Option<PathBuf> {\n\tLISTENING_PORT_RE\n\t\t.captures(text)\n\t\t.and_then(|cap| cap.get(1).map(|path| PathBuf::from(path.as_str())))\n}\n\nfn parse_port_from(text: &str) -> Option<u16> {\n\tLISTENING_PORT_RE.captures(text).and_then(|cap| {\n\t\tcap.get(1)\n\t\t\t.and_then(|path| path.as_str().parse::<u16>().ok())\n\t})\n}\n\npub fn print_listening(log: &log::Logger, tunnel_name: &str) {\n\tdebug!(\n\t\tlog,\n\t\t\"{} is listening for incoming connections\", QUALITYLESS_SERVER_NAME\n\t);\n\n\tlet home_dir = dirs::home_dir().unwrap_or_else(|| PathBuf::from(\"\"));\n\tlet current_dir = std::env::current_dir().unwrap_or_else(|_| PathBuf::from(\"\"));\n\n\tlet dir = if home_dir == current_dir {\n\t\tPathBuf::from(\"\")\n\t} else {\n\t\tcurrent_dir\n\t};\n\n\tlet base_web_url = match EDITOR_WEB_URL {\n\t\tSome(u) => u,\n\t\tNone => return,\n\t};\n\n\tlet mut addr = url::Url::parse(base_web_url).unwrap();\n\t{\n\t\tlet mut ps = addr.path_segments_mut().unwrap();\n\t\tps.push(\"tunnel\");\n\t\tps.push(tunnel_name);\n\t\tfor segment in &dir {\n\t\t\tlet as_str = segment.to_string_lossy();\n\t\t\tif !(as_str.len() == 1 && as_str.starts_with(std::path::MAIN_SEPARATOR)) {\n\t\t\t\tps.push(as_str.as_ref());\n\t\t\t}\n\t\t}\n\t}\n\n\tlet message = &format!(\"\\nOpen this link in your browser {addr}\\n\");\n\tlog.result(message);\n}\n\npub async fn download_cli_into_cache(\n\tcache: &DownloadCache,\n\trelease: &Release,\n\tupdate_service: &UpdateService,\n) -> Result<PathBuf, AnyError> {\n\tlet cache_name = format!(\n\t\t\"{}-{}-{}\",\n\t\trelease.quality, release.commit, release.platform\n\t);\n\tlet cli_dir = cache\n\t\t.create(&cache_name, |target_dir| async move {\n\t\t\tlet tmpdir =\n\t\t\t\ttempfile::tempdir().map_err(|e| wrap(e, \"error creating temp download dir\"))?;\n\t\t\tlet response = update_service.get_download_stream(release).await?;\n\n\t\t\tlet name = response.url_path_basename().unwrap();\n\t\t\tlet archive_path = tmpdir.path().join(name);\n\t\t\thttp::download_into_file(&archive_path, SilentCopyProgress(), response).await?;\n\t\t\tunzip_downloaded_release(&archive_path, &target_dir, SilentCopyProgress())?;\n\t\t\tOk(())\n\t\t})\n\t\t.await?;\n\n\tlet cli = std::fs::read_dir(cli_dir)\n\t\t.map_err(|_| CodeError::CorruptDownload(\"could not read cli folder contents\"))?\n\t\t.next();\n\n\tmatch cli {\n\t\tSome(Ok(cli)) => Ok(cli.path()),\n\t\t_ => {\n\t\t\tlet _ = cache.delete(&cache_name);\n\t\t\tErr(CodeError::CorruptDownload(\"cli directory is empty\").into())\n\t\t}\n\t}\n}\n\n#[cfg(target_os = \"windows\")]\nasync fn get_should_use_breakaway_from_job() -> bool {\n\tlet mut cmd = Command::new(\"cmd\");\n\tcmd.creation_flags(\n\t\twinapi::um::winbase::CREATE_NO_WINDOW | winapi::um::winbase::CREATE_BREAKAWAY_FROM_JOB,\n\t);\n\n\tcmd.args([\"/C\", \"echo ok\"]).output().await.is_ok()\n}\n"
  },
  {
    "path": "cli/src/tunnels/control_server.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse crate::async_pipe::get_socket_rw_stream;\nuse crate::constants::{CONTROL_PORT, PRODUCT_NAME_LONG};\nuse crate::log;\nuse crate::msgpack_rpc::{new_msgpack_rpc, start_msgpack_rpc, MsgPackCodec, MsgPackSerializer};\nuse crate::options::Quality;\nuse crate::rpc::{MaybeSync, RpcBuilder, RpcCaller, RpcDispatcher};\nuse crate::self_update::SelfUpdate;\nuse crate::state::LauncherPaths;\nuse crate::tunnels::protocol::{HttpRequestParams, PortPrivacy, METHOD_CHALLENGE_ISSUE};\nuse crate::tunnels::socket_signal::CloseReason;\nuse crate::update_service::{Platform, Release, TargetKind, UpdateService};\nuse crate::util::command::new_tokio_command;\nuse crate::util::errors::{\n\twrap, AnyError, CodeError, MismatchedLaunchModeError, NoAttachedServerError,\n};\nuse crate::util::http::{\n\tDelegatedHttpRequest, DelegatedSimpleHttp, FallbackSimpleHttp, ReqwestSimpleHttp,\n};\nuse crate::util::io::SilentCopyProgress;\nuse crate::util::is_integrated_cli;\nuse crate::util::machine::kill_pid;\nuse crate::util::os::os_release;\nuse crate::util::sync::{new_barrier, Barrier, BarrierOpener};\n\nuse futures::stream::FuturesUnordered;\nuse futures::FutureExt;\nuse opentelemetry::trace::SpanKind;\nuse opentelemetry::KeyValue;\nuse std::collections::HashMap;\nuse std::path::PathBuf;\nuse std::process::Stdio;\nuse tokio::net::TcpStream;\nuse tokio::pin;\nuse tokio::process::{ChildStderr, ChildStdin};\nuse tokio_util::codec::Decoder;\n\nuse std::sync::atomic::{AtomicBool, AtomicU32, AtomicUsize, Ordering};\nuse std::sync::Arc;\nuse std::time::Instant;\nuse tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, BufReader, DuplexStream};\nuse tokio::sync::{mpsc, Mutex};\n\nuse super::challenge::{create_challenge, sign_challenge, verify_challenge};\nuse super::code_server::{\n\tdownload_cli_into_cache, AnyCodeServer, CodeServerArgs, ServerBuilder, ServerParamsRaw,\n\tSocketCodeServer,\n};\nuse super::dev_tunnels::ActiveTunnel;\nuse super::paths::prune_stopped_servers;\nuse super::port_forwarder::{PortForwarding, PortForwardingProcessor};\nuse super::protocol::{\n\tAcquireCliParams, CallServerHttpParams, CallServerHttpResult, ChallengeIssueParams,\n\tChallengeIssueResponse, ChallengeVerifyParams, ClientRequestMethod, EmptyObject, ForwardParams,\n\tForwardResult, FsReadDirEntry, FsReadDirResponse, FsRenameRequest, FsSinglePathRequest,\n\tFsStatResponse, GetEnvResponse, GetHostnameResponse, HttpBodyParams, HttpHeadersParams,\n\tNetConnectRequest, ServeParams, ServerLog, ServerMessageParams, SpawnParams, SpawnResult,\n\tSysKillRequest, SysKillResponse, ToClientRequest, UnforwardParams, UpdateParams, UpdateResult,\n\tVersionResponse, METHOD_CHALLENGE_VERIFY,\n};\nuse super::server_bridge::ServerBridge;\nuse super::server_multiplexer::ServerMultiplexer;\nuse super::shutdown_signal::ShutdownSignal;\nuse super::socket_signal::{\n\tClientMessageDecoder, ServerMessageDestination, ServerMessageSink, SocketSignal,\n};\n\ntype HttpRequestsMap = Arc<std::sync::Mutex<HashMap<u32, DelegatedHttpRequest>>>;\ntype CodeServerCell = Arc<Mutex<Option<SocketCodeServer>>>;\n\nstruct HandlerContext {\n\t/// Log handle for the server\n\tlog: log::Logger,\n\t/// Whether the server update during the handler session.\n\tdid_update: Arc<AtomicBool>,\n\t/// Whether authentication is still required on the socket.\n\tauth_state: Arc<std::sync::Mutex<AuthState>>,\n\t/// A loopback channel to talk to the socket server task.\n\tsocket_tx: mpsc::Sender<SocketSignal>,\n\t/// Configured launcher paths.\n\tlauncher_paths: LauncherPaths,\n\t/// Connected VS Code Server\n\tcode_server: CodeServerCell,\n\t/// Potentially many \"websocket\" connections to client\n\tserver_bridges: ServerMultiplexer,\n\t// the cli arguments used to start the code server\n\tcode_server_args: CodeServerArgs,\n\t/// port forwarding functionality\n\tport_forwarding: Option<PortForwarding>,\n\t/// install platform for the VS Code server\n\tplatform: Platform,\n\t/// http client to make download/update requests\n\thttp: Arc<FallbackSimpleHttp>,\n\t/// requests being served by the client\n\thttp_requests: HttpRequestsMap,\n}\n\n/// Handler auth state.\nenum AuthState {\n\t/// Auth is required, we're waiting for the client to send its challenge optionally bearing a token.\n\tWaitingForChallenge(Option<String>),\n\t/// A challenge has been issued. Waiting for a verification.\n\tChallengeIssued(String),\n\t/// Auth is no longer required.\n\tAuthenticated,\n}\n\nstatic MESSAGE_ID_COUNTER: AtomicU32 = AtomicU32::new(0);\n\n// Gets a next incrementing number that can be used in logs\npub fn next_message_id() -> u32 {\n\tMESSAGE_ID_COUNTER.fetch_add(1, Ordering::SeqCst)\n}\n\nimpl HandlerContext {\n\tasync fn dispose(&self) {\n\t\tself.server_bridges.dispose().await;\n\t\tinfo!(self.log, \"Disposed of connection to running server.\");\n\t}\n}\n\nenum ServerSignal {\n\t/// Signalled when the server has been updated and we want to respawn.\n\t/// We'd generally need to stop and then restart the launcher, but the\n\t/// program might be managed by a supervisor like systemd. Instead, we\n\t/// will stop the TCP listener and spawn the launcher again as a subprocess\n\t/// with the same arguments we used.\n\tRespawn,\n}\n\npub enum Next {\n\t/// Whether the server should be respawned in a new binary (see ServerSignal.Respawn).\n\tRespawn,\n\t/// Whether the tunnel should be restarted\n\tRestart,\n\t/// Whether the process should exit\n\tExit,\n}\n\npub struct ServerTermination {\n\tpub next: Next,\n\tpub tunnel: ActiveTunnel,\n}\n\nasync fn preload_extensions(\n\tlog: &log::Logger,\n\tplatform: Platform,\n\tmut args: CodeServerArgs,\n\tlauncher_paths: LauncherPaths,\n) -> Result<(), AnyError> {\n\targs.start_server = false;\n\n\tlet params_raw = ServerParamsRaw {\n\t\tcommit_id: None,\n\t\tquality: Quality::Stable,\n\t\tcode_server_args: args.clone(),\n\t\theadless: true,\n\t\tplatform,\n\t};\n\n\t// cannot use delegated HTTP here since there's no remote connection yet\n\tlet http = Arc::new(ReqwestSimpleHttp::new());\n\tlet resolved = params_raw.resolve(log, http.clone()).await?;\n\tlet sb = ServerBuilder::new(log, &resolved, &launcher_paths, http.clone());\n\n\tsb.setup().await?;\n\tsb.install_extensions().await\n}\n\n// Runs the launcher server. Exits on a ctrl+c or when requested by a user.\n// Note that client connections may not be closed when this returns; use\n// `close_all_clients()` on the ServerTermination to make this happen.\npub async fn serve(\n\tlog: &log::Logger,\n\tmut tunnel: ActiveTunnel,\n\tlauncher_paths: &LauncherPaths,\n\tcode_server_args: &CodeServerArgs,\n\tplatform: Platform,\n\tmut shutdown_rx: Barrier<ShutdownSignal>,\n) -> Result<ServerTermination, AnyError> {\n\tlet mut port = tunnel.add_port_direct(CONTROL_PORT).await?;\n\tlet mut forwarding = PortForwardingProcessor::new();\n\tlet (tx, mut rx) = mpsc::channel::<ServerSignal>(4);\n\tlet (exit_barrier, signal_exit) = new_barrier();\n\n\tif !code_server_args.install_extensions.is_empty() {\n\t\tinfo!(\n\t\t\tlog,\n\t\t\t\"Preloading extensions using stable server: {:?}\", code_server_args.install_extensions\n\t\t);\n\t\tlet log = log.clone();\n\t\tlet code_server_args = code_server_args.clone();\n\t\tlet launcher_paths = launcher_paths.clone();\n\t\t// This is run async to the primary tunnel setup to be speedy.\n\t\ttokio::spawn(async move {\n\t\t\tif let Err(e) =\n\t\t\t\tpreload_extensions(&log, platform, code_server_args, launcher_paths).await\n\t\t\t{\n\t\t\t\twarning!(log, \"Failed to preload extensions: {:?}\", e);\n\t\t\t} else {\n\t\t\t\tinfo!(log, \"Extension install complete\");\n\t\t\t}\n\t\t});\n\t}\n\n\tloop {\n\t\ttokio::select! {\n\t\t\tOk(reason) = shutdown_rx.wait() => {\n\t\t\t\tinfo!(log, \"Shutting down: {}\", reason);\n\t\t\t\tdrop(signal_exit);\n\t\t\t\treturn Ok(ServerTermination {\n\t\t\t\t\tnext: match reason {\n\t\t\t\t\t\tShutdownSignal::RpcRestartRequested => Next::Restart,\n\t\t\t\t\t\t_ => Next::Exit,\n\t\t\t\t\t},\n\t\t\t\t\ttunnel,\n\t\t\t\t});\n\t\t\t},\n\t\t\tc = rx.recv() => {\n\t\t\t\tif let Some(ServerSignal::Respawn) = c {\n\t\t\t\t\tdrop(signal_exit);\n\t\t\t\t\treturn Ok(ServerTermination {\n\t\t\t\t\t\tnext: Next::Respawn,\n\t\t\t\t\t\ttunnel,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tSome(w) = forwarding.recv() => {\n\t\t\t\tforwarding.process(w, &mut tunnel).await;\n\t\t\t},\n\t\t\tl = port.recv() => {\n\t\t\t\tlet socket = match l {\n\t\t\t\t\tSome(p) => p,\n\t\t\t\t\tNone => {\n\t\t\t\t\t\twarning!(log, \"ssh tunnel disposed, tearing down\");\n\t\t\t\t\t\treturn Ok(ServerTermination {\n\t\t\t\t\t\t\tnext: Next::Restart,\n\t\t\t\t\t\t\ttunnel,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet own_log = log.prefixed(&log::new_rpc_prefix());\n\t\t\t\tlet own_tx = tx.clone();\n\t\t\t\tlet own_paths = launcher_paths.clone();\n\t\t\t\tlet own_exit = exit_barrier.clone();\n\t\t\t\tlet own_code_server_args = code_server_args.clone();\n\t\t\t\tlet own_forwarding = forwarding.handle();\n\n\t\t\t\ttokio::spawn(async move {\n\t\t\t\t\tuse opentelemetry::trace::{FutureExt, TraceContextExt};\n\n\t\t\t\t\tlet span = own_log.span(\"server.socket\").with_kind(SpanKind::Consumer).start(own_log.tracer());\n\t\t\t\t\tlet cx = opentelemetry::Context::current_with_span(span);\n\t\t\t\t\tlet serve_at = Instant::now();\n\n\t\t\t\t\tdebug!(own_log, \"Serving new connection\");\n\n\t\t\t\t\tlet (writehalf, readhalf) = socket.into_split();\n\t\t\t\t\tlet stats = process_socket(readhalf, writehalf, own_tx, Some(own_forwarding), ServeStreamParams {\n\t\t\t\t\t\tlog: own_log,\n\t\t\t\t\t\tlauncher_paths: own_paths,\n\t\t\t\t\t\tcode_server_args: own_code_server_args,\n\t\t\t\t\t\tplatform,\n\t\t\t\t\t\texit_barrier: own_exit,\n\t\t\t\t\t\trequires_auth: AuthRequired::None,\n\t\t\t\t\t}).with_context(cx.clone()).await;\n\n\t\t\t\t\tcx.span().add_event(\n\t\t\t\t\t\t\"socket.bandwidth\",\n\t\t\t\t\t\tvec![\n\t\t\t\t\t\t\tKeyValue::new(\"tx\", stats.tx as f64),\n\t\t\t\t\t\t\tKeyValue::new(\"rx\", stats.rx as f64),\n\t\t\t\t\t\t\tKeyValue::new(\"duration_ms\", serve_at.elapsed().as_millis() as f64),\n\t\t\t\t\t\t],\n\t\t\t\t\t);\n\t\t\t\t\tcx.span().end();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[derive(Clone)]\npub enum AuthRequired {\n\tNone,\n\tVSDA,\n\tVSDAWithToken(String),\n}\n\n#[derive(Clone)]\npub struct ServeStreamParams {\n\tpub log: log::Logger,\n\tpub launcher_paths: LauncherPaths,\n\tpub code_server_args: CodeServerArgs,\n\tpub platform: Platform,\n\tpub requires_auth: AuthRequired,\n\tpub exit_barrier: Barrier<ShutdownSignal>,\n}\n\npub async fn serve_stream(\n\treadhalf: impl AsyncRead + Send + Unpin + 'static,\n\twritehalf: impl AsyncWrite + Unpin,\n\tparams: ServeStreamParams,\n) -> SocketStats {\n\t// Currently the only server signal is respawn, that doesn't have much meaning\n\t// when serving a stream, so make an ignored channel.\n\tlet (server_rx, server_tx) = mpsc::channel(1);\n\tdrop(server_tx);\n\n\tprocess_socket(readhalf, writehalf, server_rx, None, params).await\n}\n\npub struct SocketStats {\n\trx: usize,\n\ttx: usize,\n}\n\n#[allow(clippy::too_many_arguments)]\nfn make_socket_rpc(\n\tlog: log::Logger,\n\tsocket_tx: mpsc::Sender<SocketSignal>,\n\thttp_delegated: DelegatedSimpleHttp,\n\tlauncher_paths: LauncherPaths,\n\tcode_server_args: CodeServerArgs,\n\tport_forwarding: Option<PortForwarding>,\n\trequires_auth: AuthRequired,\n\tplatform: Platform,\n\thttp_requests: HttpRequestsMap,\n) -> RpcDispatcher<MsgPackSerializer, HandlerContext> {\n\tlet server_bridges = ServerMultiplexer::new();\n\tlet mut rpc = RpcBuilder::new(MsgPackSerializer {}).methods(HandlerContext {\n\t\tdid_update: Arc::new(AtomicBool::new(false)),\n\t\tauth_state: Arc::new(std::sync::Mutex::new(match requires_auth {\n\t\t\tAuthRequired::VSDAWithToken(t) => AuthState::WaitingForChallenge(Some(t)),\n\t\t\tAuthRequired::VSDA => AuthState::WaitingForChallenge(None),\n\t\t\tAuthRequired::None => AuthState::Authenticated,\n\t\t})),\n\t\tsocket_tx,\n\t\tlog: log.clone(),\n\t\tlauncher_paths,\n\t\tcode_server_args,\n\t\tcode_server: Arc::new(Mutex::new(None)),\n\t\tserver_bridges,\n\t\tport_forwarding,\n\t\tplatform,\n\t\thttp: Arc::new(FallbackSimpleHttp::new(\n\t\t\tReqwestSimpleHttp::new(),\n\t\t\thttp_delegated,\n\t\t)),\n\t\thttp_requests,\n\t});\n\n\trpc.register_sync(\"ping\", |_: EmptyObject, _| Ok(EmptyObject {}));\n\trpc.register_sync(\"gethostname\", |_: EmptyObject, _| handle_get_hostname());\n\trpc.register_sync(\"sys_kill\", |p: SysKillRequest, c| {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_sys_kill(p.pid)\n\t});\n\trpc.register_sync(\"fs_stat\", |p: FsSinglePathRequest, c| {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_stat(p.path)\n\t});\n\trpc.register_duplex(\n\t\t\"fs_read\",\n\t\t1,\n\t\tmove |mut streams, p: FsSinglePathRequest, c| async move {\n\t\t\tensure_auth(&c.auth_state)?;\n\t\t\thandle_fs_read(streams.remove(0), p.path).await\n\t\t},\n\t);\n\trpc.register_duplex(\n\t\t\"fs_write\",\n\t\t1,\n\t\tmove |mut streams, p: FsSinglePathRequest, c| async move {\n\t\t\tensure_auth(&c.auth_state)?;\n\t\t\thandle_fs_write(streams.remove(0), p.path).await\n\t\t},\n\t);\n\trpc.register_duplex(\n\t\t\"fs_connect\",\n\t\t1,\n\t\tmove |mut streams, p: FsSinglePathRequest, c| async move {\n\t\t\tensure_auth(&c.auth_state)?;\n\t\t\thandle_fs_connect(streams.remove(0), p.path).await\n\t\t},\n\t);\n\trpc.register_duplex(\n\t\t\"net_connect\",\n\t\t1,\n\t\tmove |mut streams, n: NetConnectRequest, c| async move {\n\t\t\tensure_auth(&c.auth_state)?;\n\t\t\thandle_net_connect(streams.remove(0), n).await\n\t\t},\n\t);\n\trpc.register_async(\"fs_rm\", move |p: FsSinglePathRequest, c| async move {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_fs_remove(p.path).await\n\t});\n\trpc.register_sync(\"fs_mkdirp\", |p: FsSinglePathRequest, c| {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_fs_mkdirp(p.path)\n\t});\n\trpc.register_sync(\"fs_rename\", |p: FsRenameRequest, c| {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_fs_rename(p.from_path, p.to_path)\n\t});\n\trpc.register_sync(\"fs_readdir\", |p: FsSinglePathRequest, c| {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_fs_readdir(p.path)\n\t});\n\trpc.register_sync(\"get_env\", |_: EmptyObject, c| {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_get_env()\n\t});\n\trpc.register_sync(METHOD_CHALLENGE_ISSUE, |p: ChallengeIssueParams, c| {\n\t\thandle_challenge_issue(p, &c.auth_state)\n\t});\n\trpc.register_sync(METHOD_CHALLENGE_VERIFY, |p: ChallengeVerifyParams, c| {\n\t\thandle_challenge_verify(p.response, &c.auth_state)\n\t});\n\trpc.register_async(\"serve\", move |params: ServeParams, c| async move {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_serve(c, params).await\n\t});\n\trpc.register_async(\"update\", |p: UpdateParams, c| async move {\n\t\thandle_update(&c.http, &c.log, &c.did_update, &p).await\n\t});\n\trpc.register_sync(\"servermsg\", |m: ServerMessageParams, c| {\n\t\tif let Err(e) = handle_server_message(&c.log, &c.server_bridges, m) {\n\t\t\twarning!(c.log, \"error handling call: {:?}\", e);\n\t\t}\n\t\tOk(EmptyObject {})\n\t});\n\trpc.register_sync(\"prune\", |_: EmptyObject, c| handle_prune(&c.launcher_paths));\n\trpc.register_async(\"callserverhttp\", |p: CallServerHttpParams, c| async move {\n\t\tlet code_server = c.code_server.lock().await.clone();\n\t\thandle_call_server_http(code_server, p).await\n\t});\n\trpc.register_async(\"forward\", |p: ForwardParams, c| async move {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_forward(&c.log, &c.port_forwarding, p).await\n\t});\n\trpc.register_async(\"unforward\", |p: UnforwardParams, c| async move {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_unforward(&c.log, &c.port_forwarding, p).await\n\t});\n\trpc.register_async(\"acquire_cli\", |p: AcquireCliParams, c| async move {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_acquire_cli(&c.launcher_paths, &c.http, &c.log, p).await\n\t});\n\trpc.register_duplex(\"spawn\", 3, |mut streams, p: SpawnParams, c| async move {\n\t\tensure_auth(&c.auth_state)?;\n\t\thandle_spawn(\n\t\t\t&c.log,\n\t\t\tp,\n\t\t\tSome(streams.remove(0)),\n\t\t\tSome(streams.remove(0)),\n\t\t\tSome(streams.remove(0)),\n\t\t)\n\t\t.await\n\t});\n\trpc.register_duplex(\n\t\t\"spawn_cli\",\n\t\t3,\n\t\t|mut streams, p: SpawnParams, c| async move {\n\t\t\tensure_auth(&c.auth_state)?;\n\t\t\thandle_spawn_cli(\n\t\t\t\t&c.log,\n\t\t\t\tp,\n\t\t\t\tstreams.remove(0),\n\t\t\t\tstreams.remove(0),\n\t\t\t\tstreams.remove(0),\n\t\t\t)\n\t\t\t.await\n\t\t},\n\t);\n\trpc.register_sync(\"httpheaders\", |p: HttpHeadersParams, c| {\n\t\tif let Some(req) = c.http_requests.lock().unwrap().get(&p.req_id) {\n\t\t\ttrace!(c.log, \"got {} response for req {}\", p.status_code, p.req_id);\n\t\t\treq.initial_response(p.status_code, p.headers);\n\t\t} else {\n\t\t\twarning!(c.log, \"got response for unknown req {}\", p.req_id);\n\t\t}\n\t\tOk(EmptyObject {})\n\t});\n\trpc.register_sync(\"httpbody\", move |p: HttpBodyParams, c| {\n\t\tlet mut reqs = c.http_requests.lock().unwrap();\n\t\tif let Some(req) = reqs.get(&p.req_id) {\n\t\t\tif !p.segment.is_empty() {\n\t\t\t\treq.body(p.segment);\n\t\t\t}\n\t\t\tif p.complete {\n\t\t\t\ttrace!(c.log, \"delegated request {} completed\", p.req_id);\n\t\t\t\treqs.remove(&p.req_id);\n\t\t\t}\n\t\t}\n\t\tOk(EmptyObject {})\n\t});\n\trpc.register_sync(\n\t\t\"version\",\n\t\t|_: EmptyObject, _| Ok(VersionResponse::default()),\n\t);\n\n\trpc.build(log)\n}\n\nfn ensure_auth(is_authed: &Arc<std::sync::Mutex<AuthState>>) -> Result<(), AnyError> {\n\tif let AuthState::Authenticated = &*is_authed.lock().unwrap() {\n\t\tOk(())\n\t} else {\n\t\tErr(CodeError::ServerAuthRequired.into())\n\t}\n}\n\n#[allow(clippy::too_many_arguments)] // necessary here\nasync fn process_socket(\n\treadhalf: impl AsyncRead + Send + Unpin + 'static,\n\tmut writehalf: impl AsyncWrite + Unpin,\n\tserver_tx: mpsc::Sender<ServerSignal>,\n\tport_forwarding: Option<PortForwarding>,\n\tparams: ServeStreamParams,\n) -> SocketStats {\n\tlet ServeStreamParams {\n\t\tmut exit_barrier,\n\t\tlog,\n\t\tlauncher_paths,\n\t\tcode_server_args,\n\t\tplatform,\n\t\trequires_auth,\n\t} = params;\n\n\tlet (http_delegated, mut http_rx) = DelegatedSimpleHttp::new(log.clone());\n\tlet (socket_tx, mut socket_rx) = mpsc::channel(4);\n\tlet rx_counter = Arc::new(AtomicUsize::new(0));\n\tlet http_requests = Arc::new(std::sync::Mutex::new(HashMap::new()));\n\n\tlet already_authed = matches!(requires_auth, AuthRequired::None);\n\tlet rpc = make_socket_rpc(\n\t\tlog.clone(),\n\t\tsocket_tx.clone(),\n\t\thttp_delegated,\n\t\tlauncher_paths,\n\t\tcode_server_args,\n\t\tport_forwarding,\n\t\trequires_auth,\n\t\tplatform,\n\t\thttp_requests.clone(),\n\t);\n\n\t{\n\t\tlet log = log.clone();\n\t\tlet rx_counter = rx_counter.clone();\n\t\tlet socket_tx = socket_tx.clone();\n\t\tlet exit_barrier = exit_barrier.clone();\n\t\ttokio::spawn(async move {\n\t\t\tif already_authed {\n\t\t\t\tsend_version(&socket_tx).await;\n\t\t\t}\n\n\t\t\tif let Err(e) =\n\t\t\t\thandle_socket_read(&log, readhalf, exit_barrier, &socket_tx, rx_counter, &rpc).await\n\t\t\t{\n\t\t\t\tdebug!(log, \"closing socket reader: {}\", e);\n\t\t\t\tsocket_tx\n\t\t\t\t\t.send(SocketSignal::CloseWith(CloseReason(format!(\"{e}\"))))\n\t\t\t\t\t.await\n\t\t\t\t\t.ok();\n\t\t\t}\n\n\t\t\tlet ctx = rpc.context();\n\n\t\t\t// The connection is now closed, asked to respawn if needed\n\t\t\tif ctx.did_update.load(Ordering::SeqCst) {\n\t\t\t\tserver_tx.send(ServerSignal::Respawn).await.ok();\n\t\t\t}\n\n\t\t\tctx.dispose().await;\n\n\t\t\tlet _ = socket_tx\n\t\t\t\t.send(SocketSignal::CloseWith(CloseReason(\"eof\".to_string())))\n\t\t\t\t.await;\n\t\t});\n\t}\n\n\tlet mut tx_counter = 0;\n\n\tloop {\n\t\ttokio::select! {\n\t\t\t_ = exit_barrier.wait() => {\n\t\t\t\twritehalf.shutdown().await.ok();\n\t\t\t\tbreak;\n\t\t\t},\n\t\t\tSome(r) = http_rx.recv() => {\n\t\t\t\tlet id = next_message_id();\n\t\t\t\tlet serialized = rmp_serde::to_vec_named(&ToClientRequest {\n\t\t\t\t\tid: None,\n\t\t\t\t\tparams: ClientRequestMethod::makehttpreq(HttpRequestParams {\n\t\t\t\t\t\turl: &r.url,\n\t\t\t\t\t\tmethod: r.method,\n\t\t\t\t\t\treq_id: id,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t\t.unwrap();\n\n\t\t\t\thttp_requests.lock().unwrap().insert(id, r);\n\n\t\t\t\ttx_counter += serialized.len();\n\t\t\t\tif let Err(e) = writehalf.write_all(&serialized).await {\n\t\t\t\t\tdebug!(log, \"Closing connection: {}\", e);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\trecv = socket_rx.recv() => match recv {\n\t\t\t\tNone => break,\n\t\t\t\tSome(message) => match message {\n\t\t\t\t\tSocketSignal::Send(bytes) => {\n\t\t\t\t\t\ttx_counter += bytes.len();\n\t\t\t\t\t\tif let Err(e) = writehalf.write_all(&bytes).await {\n\t\t\t\t\t\t\tdebug!(log, \"Closing connection: {}\", e);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tSocketSignal::CloseWith(reason) => {\n\t\t\t\t\t\tdebug!(log, \"Closing connection: {}\", reason.0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tSocketStats {\n\t\ttx: tx_counter,\n\t\trx: rx_counter.load(Ordering::Acquire),\n\t}\n}\n\nasync fn send_version(tx: &mpsc::Sender<SocketSignal>) {\n\ttx.send(SocketSignal::from_message(&ToClientRequest {\n\t\tid: None,\n\t\tparams: ClientRequestMethod::version(VersionResponse::default()),\n\t}))\n\t.await\n\t.ok();\n}\nasync fn handle_socket_read(\n\t_log: &log::Logger,\n\treadhalf: impl AsyncRead + Unpin,\n\tmut closer: Barrier<ShutdownSignal>,\n\tsocket_tx: &mpsc::Sender<SocketSignal>,\n\trx_counter: Arc<AtomicUsize>,\n\trpc: &RpcDispatcher<MsgPackSerializer, HandlerContext>,\n) -> Result<(), std::io::Error> {\n\tlet mut readhalf = BufReader::new(readhalf);\n\tlet mut decoder = MsgPackCodec::new();\n\tlet mut decoder_buf = bytes::BytesMut::new();\n\n\tloop {\n\t\tlet read_len = tokio::select! {\n\t\t\tr = readhalf.read_buf(&mut decoder_buf) => r,\n\t\t\t_ = closer.wait() => Err(std::io::Error::new(std::io::ErrorKind::UnexpectedEof, \"eof\")),\n\t\t}?;\n\n\t\tif read_len == 0 {\n\t\t\treturn Ok(());\n\t\t}\n\n\t\trx_counter.fetch_add(read_len, Ordering::Relaxed);\n\n\t\twhile let Some(frame) = decoder.decode(&mut decoder_buf)? {\n\t\t\tmatch rpc.dispatch_with_partial(&frame.vec, frame.obj) {\n\t\t\t\tMaybeSync::Sync(Some(v)) => {\n\t\t\t\t\tif socket_tx.send(SocketSignal::Send(v)).await.is_err() {\n\t\t\t\t\t\treturn Ok(());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tMaybeSync::Sync(None) => continue,\n\t\t\t\tMaybeSync::Future(fut) => {\n\t\t\t\t\tlet socket_tx = socket_tx.clone();\n\t\t\t\t\ttokio::spawn(async move {\n\t\t\t\t\t\tif let Some(v) = fut.await {\n\t\t\t\t\t\t\tsocket_tx.send(SocketSignal::Send(v)).await.ok();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tMaybeSync::Stream((stream, fut)) => {\n\t\t\t\t\tif let Some(stream) = stream {\n\t\t\t\t\t\trpc.register_stream(socket_tx.clone(), stream).await;\n\t\t\t\t\t}\n\t\t\t\t\tlet socket_tx = socket_tx.clone();\n\t\t\t\t\ttokio::spawn(async move {\n\t\t\t\t\t\tif let Some(v) = fut.await {\n\t\t\t\t\t\t\tsocket_tx.send(SocketSignal::Send(v)).await.ok();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[derive(Clone)]\nstruct ServerOutputSink {\n\ttx: mpsc::Sender<SocketSignal>,\n}\n\nimpl log::LogSink for ServerOutputSink {\n\tfn write_log(&self, level: log::Level, _prefix: &str, message: &str) {\n\t\tlet s = SocketSignal::from_message(&ToClientRequest {\n\t\t\tid: None,\n\t\t\tparams: ClientRequestMethod::serverlog(ServerLog {\n\t\t\t\tline: message,\n\t\t\t\tlevel: level.to_u8(),\n\t\t\t}),\n\t\t});\n\n\t\tself.tx.try_send(s).ok();\n\t}\n\n\tfn write_result(&self, _message: &str) {}\n}\n\nasync fn handle_serve(\n\tc: Arc<HandlerContext>,\n\tparams: ServeParams,\n) -> Result<EmptyObject, AnyError> {\n\t// fill params.extensions into code_server_args.install_extensions\n\tlet mut csa = c.code_server_args.clone();\n\tcsa.connection_token = params.connection_token.or(csa.connection_token);\n\tcsa.install_extensions.extend(params.extensions.into_iter());\n\n\tlet params_raw = ServerParamsRaw {\n\t\tcommit_id: params.commit_id,\n\t\tquality: params.quality,\n\t\tcode_server_args: csa,\n\t\theadless: true,\n\t\tplatform: c.platform,\n\t};\n\n\tlet resolved = if params.use_local_download {\n\t\tparams_raw\n\t\t\t.resolve(&c.log, Arc::new(c.http.delegated()))\n\t\t\t.await\n\t} else {\n\t\tparams_raw.resolve(&c.log, c.http.clone()).await\n\t}?;\n\n\tlet mut server_ref = c.code_server.lock().await;\n\tlet server = match &*server_ref {\n\t\tSome(o) => o.clone(),\n\t\tNone => {\n\t\t\tlet install_log = c.log.tee(ServerOutputSink {\n\t\t\t\ttx: c.socket_tx.clone(),\n\t\t\t});\n\n\t\t\tmacro_rules! do_setup {\n\t\t\t\t($sb:expr) => {\n\t\t\t\t\tmatch $sb.get_running().await? {\n\t\t\t\t\t\tSome(AnyCodeServer::Socket(s)) => ($sb, Ok(s)),\n\t\t\t\t\t\tSome(_) => return Err(AnyError::from(MismatchedLaunchModeError())),\n\t\t\t\t\t\tNone => {\n\t\t\t\t\t\t\t$sb.setup().await?;\n\t\t\t\t\t\t\tlet r = $sb.listen_on_default_socket().await;\n\t\t\t\t\t\t\t($sb, r)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet (sb, server) = if params.use_local_download {\n\t\t\t\tlet sb = ServerBuilder::new(\n\t\t\t\t\t&install_log,\n\t\t\t\t\t&resolved,\n\t\t\t\t\t&c.launcher_paths,\n\t\t\t\t\tArc::new(c.http.delegated()),\n\t\t\t\t);\n\t\t\t\tdo_setup!(sb)\n\t\t\t} else {\n\t\t\t\tlet sb =\n\t\t\t\t\tServerBuilder::new(&install_log, &resolved, &c.launcher_paths, c.http.clone());\n\t\t\t\tdo_setup!(sb)\n\t\t\t};\n\n\t\t\tlet server = match server {\n\t\t\t\tOk(s) => s,\n\t\t\t\tErr(e) => {\n\t\t\t\t\t// we don't loop to avoid doing so infinitely: allow the client to reconnect in this case.\n\t\t\t\t\tif let AnyError::CodeError(CodeError::ServerUnexpectedExit(ref e)) = e {\n\t\t\t\t\t\twarning!(\n\t\t\t\t\t\t\tc.log,\n\t\t\t\t\t\t\t\"({}), removing server due to possible corruptions\",\n\t\t\t\t\t\t\te\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif let Err(e) = sb.evict().await {\n\t\t\t\t\t\t\twarning!(c.log, \"Failed to evict server: {}\", e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn Err(e);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tserver_ref.replace(server.clone());\n\t\t\tserver\n\t\t}\n\t};\n\n\tattach_server_bridge(\n\t\t&c.log,\n\t\tserver,\n\t\tc.socket_tx.clone(),\n\t\tc.server_bridges.clone(),\n\t\tparams.socket_id,\n\t\tparams.compress,\n\t)\n\t.await?;\n\tOk(EmptyObject {})\n}\n\nasync fn attach_server_bridge(\n\tlog: &log::Logger,\n\tcode_server: SocketCodeServer,\n\tsocket_tx: mpsc::Sender<SocketSignal>,\n\tmultiplexer: ServerMultiplexer,\n\tsocket_id: u16,\n\tcompress: bool,\n) -> Result<u16, AnyError> {\n\tlet (server_messages, decoder) = if compress {\n\t\t(\n\t\t\tServerMessageSink::new_compressed(\n\t\t\t\tmultiplexer.clone(),\n\t\t\t\tsocket_id,\n\t\t\t\tServerMessageDestination::Channel(socket_tx),\n\t\t\t),\n\t\t\tClientMessageDecoder::new_compressed(),\n\t\t)\n\t} else {\n\t\t(\n\t\t\tServerMessageSink::new_plain(\n\t\t\t\tmultiplexer.clone(),\n\t\t\t\tsocket_id,\n\t\t\t\tServerMessageDestination::Channel(socket_tx),\n\t\t\t),\n\t\t\tClientMessageDecoder::new_plain(),\n\t\t)\n\t};\n\n\tlet attached_fut = ServerBridge::new(&code_server.socket, server_messages, decoder).await;\n\tmatch attached_fut {\n\t\tOk(a) => {\n\t\t\tmultiplexer.register(socket_id, a);\n\t\t\ttrace!(log, \"Attached to server\");\n\t\t\tOk(socket_id)\n\t\t}\n\t\tErr(e) => Err(e),\n\t}\n}\n\n/// Handle an incoming server message. This is synchronous and uses a 'write loop'\n/// to ensure message order is preserved exactly, which is necessary for compression.\nfn handle_server_message(\n\tlog: &log::Logger,\n\tmultiplexer: &ServerMultiplexer,\n\tparams: ServerMessageParams,\n) -> Result<EmptyObject, AnyError> {\n\tif multiplexer.write_message(log, params.i, params.body) {\n\t\tOk(EmptyObject {})\n\t} else {\n\t\tErr(AnyError::from(NoAttachedServerError()))\n\t}\n}\n\nfn handle_prune(paths: &LauncherPaths) -> Result<Vec<String>, AnyError> {\n\tprune_stopped_servers(paths).map(|v| {\n\t\tv.iter()\n\t\t\t.map(|p| p.server_dir.display().to_string())\n\t\t\t.collect()\n\t})\n}\n\nasync fn handle_update(\n\thttp: &Arc<FallbackSimpleHttp>,\n\tlog: &log::Logger,\n\tdid_update: &AtomicBool,\n\tparams: &UpdateParams,\n) -> Result<UpdateResult, AnyError> {\n\tif matches!(is_integrated_cli(), Ok(true)) || did_update.load(Ordering::SeqCst) {\n\t\treturn Ok(UpdateResult {\n\t\t\tup_to_date: true,\n\t\t\tdid_update: false,\n\t\t});\n\t}\n\n\tlet update_service = UpdateService::new(log.clone(), http.clone());\n\tlet updater = SelfUpdate::new(&update_service)?;\n\tlet latest_release = updater.get_current_release().await?;\n\tlet up_to_date = updater.is_up_to_date_with(&latest_release);\n\n\tlet _ = updater.cleanup_old_update();\n\n\tif !params.do_update || up_to_date {\n\t\treturn Ok(UpdateResult {\n\t\t\tup_to_date,\n\t\t\tdid_update: false,\n\t\t});\n\t}\n\n\tif did_update\n\t\t.compare_exchange(false, true, Ordering::SeqCst, Ordering::SeqCst)\n\t\t.is_err()\n\t{\n\t\treturn Ok(UpdateResult {\n\t\t\tup_to_date: true,\n\t\t\tdid_update: true, // well, another thread did, but same difference...\n\t\t});\n\t}\n\n\tinfo!(log, \"Updating CLI to {}\", latest_release);\n\n\tlet r = updater\n\t\t.do_update(&latest_release, SilentCopyProgress())\n\t\t.await;\n\n\tif let Err(e) = r {\n\t\tdid_update.store(false, Ordering::SeqCst);\n\t\treturn Err(e);\n\t}\n\n\tOk(UpdateResult {\n\t\tup_to_date: true,\n\t\tdid_update: true,\n\t})\n}\n\nfn handle_get_hostname() -> Result<GetHostnameResponse, AnyError> {\n\tOk(GetHostnameResponse {\n\t\tvalue: gethostname::gethostname().to_string_lossy().into_owned(),\n\t})\n}\n\nfn handle_stat(path: String) -> Result<FsStatResponse, AnyError> {\n\tOk(std::fs::metadata(path)\n\t\t.map(|m| FsStatResponse {\n\t\t\texists: true,\n\t\t\tsize: Some(m.len()),\n\t\t\tkind: Some(m.file_type().into()),\n\t\t})\n\t\t.unwrap_or_default())\n}\n\nasync fn handle_fs_read(mut out: DuplexStream, path: String) -> Result<EmptyObject, AnyError> {\n\tlet mut f = tokio::fs::File::open(path)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"file not found\"))?;\n\n\ttokio::io::copy(&mut f, &mut out)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error reading file\"))?;\n\n\tOk(EmptyObject {})\n}\n\nasync fn handle_fs_write(mut input: DuplexStream, path: String) -> Result<EmptyObject, AnyError> {\n\tlet mut f = tokio::fs::File::create(path)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"file not found\"))?;\n\n\ttokio::io::copy(&mut input, &mut f)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error writing file\"))?;\n\n\tOk(EmptyObject {})\n}\n\nasync fn handle_net_connect(\n\tmut stream: DuplexStream,\n\treq: NetConnectRequest,\n) -> Result<EmptyObject, AnyError> {\n\tlet mut s = TcpStream::connect((req.host, req.port))\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"could not connect to address\"))?;\n\n\ttokio::io::copy_bidirectional(&mut stream, &mut s)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error copying stream data\"))?;\n\n\tOk(EmptyObject {})\n}\nasync fn handle_fs_connect(\n\tmut stream: DuplexStream,\n\tpath: String,\n) -> Result<EmptyObject, AnyError> {\n\tlet mut s = get_socket_rw_stream(&PathBuf::from(path))\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"could not connect to socket\"))?;\n\n\ttokio::io::copy_bidirectional(&mut stream, &mut s)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error copying stream data\"))?;\n\n\tOk(EmptyObject {})\n}\n\nasync fn handle_fs_remove(path: String) -> Result<EmptyObject, AnyError> {\n\ttokio::fs::remove_dir_all(path)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error removing directory\"))?;\n\tOk(EmptyObject {})\n}\n\nfn handle_fs_rename(from_path: String, to_path: String) -> Result<EmptyObject, AnyError> {\n\tstd::fs::rename(from_path, to_path).map_err(|e| wrap(e, \"error renaming\"))?;\n\tOk(EmptyObject {})\n}\n\nfn handle_fs_mkdirp(path: String) -> Result<EmptyObject, AnyError> {\n\tstd::fs::create_dir_all(path).map_err(|e| wrap(e, \"error creating directory\"))?;\n\tOk(EmptyObject {})\n}\n\nfn handle_fs_readdir(path: String) -> Result<FsReadDirResponse, AnyError> {\n\tlet mut entries = std::fs::read_dir(path).map_err(|e| wrap(e, \"error listing directory\"))?;\n\n\tlet mut contents = Vec::new();\n\twhile let Some(Ok(child)) = entries.next() {\n\t\tcontents.push(FsReadDirEntry {\n\t\t\tname: child.file_name().to_string_lossy().into_owned(),\n\t\t\tkind: child.file_type().ok().map(|v| v.into()),\n\t\t});\n\t}\n\n\tOk(FsReadDirResponse { contents })\n}\n\nfn handle_sys_kill(pid: u32) -> Result<SysKillResponse, AnyError> {\n\tOk(SysKillResponse {\n\t\tsuccess: kill_pid(pid),\n\t})\n}\n\nfn handle_get_env() -> Result<GetEnvResponse, AnyError> {\n\tOk(GetEnvResponse {\n\t\tenv: std::env::vars().collect(),\n\t\tos_release: os_release().unwrap_or_else(|_| \"unknown\".to_string()),\n\t\t#[cfg(windows)]\n\t\tos_platform: \"win32\",\n\t\t#[cfg(target_os = \"linux\")]\n\t\tos_platform: \"linux\",\n\t\t#[cfg(target_os = \"macos\")]\n\t\tos_platform: \"darwin\",\n\t})\n}\n\nfn handle_challenge_issue(\n\tparams: ChallengeIssueParams,\n\tauth_state: &Arc<std::sync::Mutex<AuthState>>,\n) -> Result<ChallengeIssueResponse, AnyError> {\n\tlet challenge = create_challenge();\n\n\tlet mut auth_state = auth_state.lock().unwrap();\n\tif let AuthState::WaitingForChallenge(Some(s)) = &*auth_state {\n\t\tmatch &params.token {\n\t\t\tSome(t) if s != t => return Err(CodeError::AuthChallengeBadToken.into()),\n\t\t\tNone => return Err(CodeError::AuthChallengeBadToken.into()),\n\t\t\t_ => {}\n\t\t}\n\t}\n\n\t*auth_state = AuthState::ChallengeIssued(challenge.clone());\n\tOk(ChallengeIssueResponse { challenge })\n}\n\nfn handle_challenge_verify(\n\tresponse: String,\n\tauth_state: &Arc<std::sync::Mutex<AuthState>>,\n) -> Result<EmptyObject, AnyError> {\n\tlet mut auth_state = auth_state.lock().unwrap();\n\n\tmatch &*auth_state {\n\t\tAuthState::Authenticated => Ok(EmptyObject {}),\n\t\tAuthState::WaitingForChallenge(_) => Err(CodeError::AuthChallengeNotIssued.into()),\n\t\tAuthState::ChallengeIssued(c) => match verify_challenge(c, &response) {\n\t\t\tfalse => Err(CodeError::AuthChallengeNotIssued.into()),\n\t\t\ttrue => {\n\t\t\t\t*auth_state = AuthState::Authenticated;\n\t\t\t\tOk(EmptyObject {})\n\t\t\t}\n\t\t},\n\t}\n}\n\nasync fn handle_forward(\n\tlog: &log::Logger,\n\tport_forwarding: &Option<PortForwarding>,\n\tparams: ForwardParams,\n) -> Result<ForwardResult, AnyError> {\n\tlet port_forwarding = port_forwarding\n\t\t.as_ref()\n\t\t.ok_or(CodeError::PortForwardingNotAvailable)?;\n\tinfo!(\n\t\tlog,\n\t\t\"Forwarding port {} (public={})\", params.port, params.public\n\t);\n\tlet privacy = match params.public {\n\t\ttrue => PortPrivacy::Public,\n\t\tfalse => PortPrivacy::Private,\n\t};\n\n\tlet uri = port_forwarding.forward(params.port, privacy).await?;\n\tOk(ForwardResult { uri })\n}\n\nasync fn handle_unforward(\n\tlog: &log::Logger,\n\tport_forwarding: &Option<PortForwarding>,\n\tparams: UnforwardParams,\n) -> Result<EmptyObject, AnyError> {\n\tlet port_forwarding = port_forwarding\n\t\t.as_ref()\n\t\t.ok_or(CodeError::PortForwardingNotAvailable)?;\n\tinfo!(log, \"Unforwarding port {}\", params.port);\n\tport_forwarding.unforward(params.port).await?;\n\tOk(EmptyObject {})\n}\n\nasync fn handle_call_server_http(\n\tcode_server: Option<SocketCodeServer>,\n\tparams: CallServerHttpParams,\n) -> Result<CallServerHttpResult, AnyError> {\n\tuse hyper::{body, client::conn::Builder, Body, Request};\n\n\t// We use Hyper directly here since reqwest doesn't support sockets/pipes.\n\t// See https://github.com/seanmonstar/reqwest/issues/39\n\n\tlet socket = match &code_server {\n\t\tSome(cs) => &cs.socket,\n\t\tNone => return Err(AnyError::from(NoAttachedServerError())),\n\t};\n\n\tlet rw = get_socket_rw_stream(socket).await?;\n\n\tlet (mut request_sender, connection) = Builder::new()\n\t\t.handshake(rw)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error establishing connection\"))?;\n\n\t// start the connection processing; it's shut down when the sender is dropped\n\ttokio::spawn(connection);\n\n\tlet mut request_builder = Request::builder()\n\t\t.method::<&str>(params.method.as_ref())\n\t\t.uri(format!(\"http://127.0.0.1{}\", params.path))\n\t\t.header(\"Host\", \"127.0.0.1\");\n\n\tfor (k, v) in params.headers {\n\t\trequest_builder = request_builder.header(k, v);\n\t}\n\tlet request = request_builder\n\t\t.body(Body::from(params.body.unwrap_or_default()))\n\t\t.map_err(|e| wrap(e, \"invalid request\"))?;\n\n\tlet response = request_sender\n\t\t.send_request(request)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error sending request\"))?;\n\n\tOk(CallServerHttpResult {\n\t\tstatus: response.status().as_u16(),\n\t\theaders: response\n\t\t\t.headers()\n\t\t\t.into_iter()\n\t\t\t.map(|(k, v)| (k.to_string(), v.to_str().unwrap_or(\"\").to_string()))\n\t\t\t.collect(),\n\t\tbody: body::to_bytes(response)\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error reading response body\"))?\n\t\t\t.to_vec(),\n\t})\n}\n\nasync fn handle_acquire_cli(\n\tpaths: &LauncherPaths,\n\thttp: &Arc<FallbackSimpleHttp>,\n\tlog: &log::Logger,\n\tparams: AcquireCliParams,\n) -> Result<SpawnResult, AnyError> {\n\tlet update_service = UpdateService::new(log.clone(), http.clone());\n\n\tlet release = match params.commit_id {\n\t\tSome(commit) => Release {\n\t\t\tname: format!(\"{PRODUCT_NAME_LONG} CLI\"),\n\t\t\tcommit,\n\t\t\tplatform: params.platform,\n\t\t\tquality: params.quality,\n\t\t\ttarget: TargetKind::Cli,\n\t\t},\n\t\tNone => {\n\t\t\tupdate_service\n\t\t\t\t.get_latest_commit(params.platform, TargetKind::Cli, params.quality)\n\t\t\t\t.await?\n\t\t}\n\t};\n\n\tlet cli = download_cli_into_cache(&paths.cli_cache, &release, &update_service).await?;\n\tlet file = tokio::fs::File::open(cli)\n\t\t.await\n\t\t.map_err(|e| wrap(e, \"error opening cli file\"))?;\n\n\thandle_spawn::<_, DuplexStream>(log, params.spawn, Some(file), None, None).await\n}\n\nasync fn handle_spawn<Stdin, StdoutAndErr>(\n\tlog: &log::Logger,\n\tparams: SpawnParams,\n\tstdin: Option<Stdin>,\n\tstdout: Option<StdoutAndErr>,\n\tstderr: Option<StdoutAndErr>,\n) -> Result<SpawnResult, AnyError>\nwhere\n\tStdin: AsyncRead + Unpin + Send + 'static,\n\tStdoutAndErr: AsyncWrite + Unpin + Send + 'static,\n{\n\tdebug!(\n\t\tlog,\n\t\t\"requested to spawn {} with args {:?}\", params.command, params.args\n\t);\n\n\tmacro_rules! pipe_if {\n\t\t($e: expr) => {\n\t\t\tif $e {\n\t\t\t\tStdio::piped()\n\t\t\t} else {\n\t\t\t\tStdio::null()\n\t\t\t}\n\t\t};\n\t}\n\n\tlet mut p = new_tokio_command(&params.command);\n\tp.args(&params.args);\n\tp.envs(&params.env);\n\tp.stdin(pipe_if!(stdin.is_some()));\n\tp.stdout(pipe_if!(stdin.is_some()));\n\tp.stderr(pipe_if!(stderr.is_some()));\n\tif let Some(cwd) = &params.cwd {\n\t\tp.current_dir(cwd);\n\t}\n\n\t#[cfg(target_os = \"windows\")]\n\tp.creation_flags(winapi::um::winbase::CREATE_NO_WINDOW);\n\n\tlet mut p = p.spawn().map_err(CodeError::ProcessSpawnFailed)?;\n\n\tlet block_futs = FuturesUnordered::new();\n\tlet poll_futs = FuturesUnordered::new();\n\tif let (Some(mut a), Some(mut b)) = (p.stdout.take(), stdout) {\n\t\tblock_futs.push(async move { tokio::io::copy(&mut a, &mut b).await }.boxed());\n\t}\n\tif let (Some(mut a), Some(mut b)) = (p.stderr.take(), stderr) {\n\t\tblock_futs.push(async move { tokio::io::copy(&mut a, &mut b).await }.boxed());\n\t}\n\tif let (Some(mut b), Some(mut a)) = (p.stdin.take(), stdin) {\n\t\tpoll_futs.push(async move { tokio::io::copy(&mut a, &mut b).await }.boxed());\n\t}\n\n\twait_for_process_exit(log, &params.command, p, block_futs, poll_futs).await\n}\n\nasync fn handle_spawn_cli(\n\tlog: &log::Logger,\n\tparams: SpawnParams,\n\tmut protocol_in: DuplexStream,\n\tmut protocol_out: DuplexStream,\n\tmut log_out: DuplexStream,\n) -> Result<SpawnResult, AnyError> {\n\tdebug!(\n\t\tlog,\n\t\t\"requested to spawn cli {} with args {:?}\", params.command, params.args\n\t);\n\n\tlet mut p = new_tokio_command(&params.command);\n\tp.args(&params.args);\n\n\t// CLI args to spawn a server; contracted with clients that they should _not_ provide these.\n\tp.arg(\"--verbose\");\n\tp.arg(\"command-shell\");\n\n\tp.envs(&params.env);\n\tp.stdin(Stdio::piped());\n\tp.stdout(Stdio::piped());\n\tp.stderr(Stdio::piped());\n\tif let Some(cwd) = &params.cwd {\n\t\tp.current_dir(cwd);\n\t}\n\n\tlet mut p = p.spawn().map_err(CodeError::ProcessSpawnFailed)?;\n\n\tlet mut stdin = p.stdin.take().unwrap();\n\tlet mut stdout = p.stdout.take().unwrap();\n\tlet mut stderr = p.stderr.take().unwrap();\n\n\t// Start handling logs while doing the handshake in case there's some kind of error\n\tlet log_pump = tokio::spawn(async move { tokio::io::copy(&mut stdout, &mut log_out).await });\n\n\t// note: intentionally do not wrap stdin in a bufreader, since we don't\n\t// want to read anything other than our handshake messages.\n\tif let Err(e) = spawn_do_child_authentication(log, &mut stdin, &mut stderr).await {\n\t\twarning!(log, \"failed to authenticate with child process {}\", e);\n\t\tlet _ = p.kill().await;\n\t\treturn Err(e.into());\n\t}\n\n\tdebug!(log, \"cli authenticated, attaching stdio\");\n\tlet block_futs = FuturesUnordered::new();\n\tlet poll_futs = FuturesUnordered::new();\n\tpoll_futs.push(async move { tokio::io::copy(&mut protocol_in, &mut stdin).await }.boxed());\n\tblock_futs.push(async move { tokio::io::copy(&mut stderr, &mut protocol_out).await }.boxed());\n\tblock_futs.push(async move { log_pump.await.unwrap() }.boxed());\n\n\twait_for_process_exit(log, &params.command, p, block_futs, poll_futs).await\n}\n\ntype TokioCopyFuture = dyn futures::Future<Output = Result<u64, std::io::Error>> + Send;\n\nasync fn get_joined_result(\n\tmut process: tokio::process::Child,\n\tblock_futs: FuturesUnordered<std::pin::Pin<Box<TokioCopyFuture>>>,\n) -> Result<std::process::ExitStatus, std::io::Error> {\n\tlet (_, r) = tokio::join!(futures::future::join_all(block_futs), process.wait());\n\tr\n}\n\n/// Wait for the process to exit and sends the spawn result. Waits until the\n/// `block_futs` and the process have exited, and polls the `poll_futs` while\n/// doing so.\nasync fn wait_for_process_exit(\n\tlog: &log::Logger,\n\tcommand: &str,\n\tprocess: tokio::process::Child,\n\tblock_futs: FuturesUnordered<std::pin::Pin<Box<TokioCopyFuture>>>,\n\tpoll_futs: FuturesUnordered<std::pin::Pin<Box<TokioCopyFuture>>>,\n) -> Result<SpawnResult, AnyError> {\n\tlet joined = get_joined_result(process, block_futs);\n\tpin!(joined);\n\n\tlet r = tokio::select! {\n\t\t_ = futures::future::join_all(poll_futs) => joined.await,\n\t\tr = &mut joined => r,\n\t};\n\n\tlet r = match r {\n\t\tOk(e) => SpawnResult {\n\t\t\tmessage: e.to_string(),\n\t\t\texit_code: e.code().unwrap_or(-1),\n\t\t},\n\t\tErr(e) => SpawnResult {\n\t\t\tmessage: e.to_string(),\n\t\t\texit_code: -1,\n\t\t},\n\t};\n\n\tdebug!(\n\t\tlog,\n\t\t\"spawned cli {} exited with code {}\", command, r.exit_code\n\t);\n\n\tOk(r)\n}\n\nasync fn spawn_do_child_authentication(\n\tlog: &log::Logger,\n\tstdin: &mut ChildStdin,\n\tstdout: &mut ChildStderr,\n) -> Result<(), CodeError> {\n\tlet (msg_tx, msg_rx) = mpsc::unbounded_channel();\n\tlet (shutdown_rx, shutdown) = new_barrier();\n\tlet mut rpc = new_msgpack_rpc();\n\tlet caller = rpc.get_caller(msg_tx);\n\n\tlet challenge_response = do_challenge_response_flow(caller, shutdown);\n\tlet rpc = start_msgpack_rpc(\n\t\trpc.methods(()).build(log.prefixed(\"client-auth\")),\n\t\tstdout,\n\t\tstdin,\n\t\tmsg_rx,\n\t\tshutdown_rx,\n\t);\n\tpin!(rpc);\n\n\ttokio::select! {\n\t\tr = &mut rpc => {\n\t\t\tmatch r {\n\t\t\t\t// means shutdown happened cleanly already, we're good\n\t\t\t\tOk(_) => Ok(()),\n\t\t\t\tErr(e) => Err(CodeError::ProcessSpawnHandshakeFailed(e))\n\t\t\t}\n\t\t},\n\t\tr = challenge_response => {\n\t\t\tr?;\n\t\t\trpc.await.map(|_| ()).map_err(CodeError::ProcessSpawnFailed)\n\t\t}\n\t}\n}\n\nasync fn do_challenge_response_flow(\n\tcaller: RpcCaller<MsgPackSerializer>,\n\tshutdown: BarrierOpener<()>,\n) -> Result<(), CodeError> {\n\tlet challenge: ChallengeIssueResponse = caller\n\t\t.call(METHOD_CHALLENGE_ISSUE, EmptyObject {})\n\t\t.await\n\t\t.unwrap()\n\t\t.map_err(CodeError::TunnelRpcCallFailed)?;\n\n\tlet _: EmptyObject = caller\n\t\t.call(\n\t\t\tMETHOD_CHALLENGE_VERIFY,\n\t\t\tChallengeVerifyParams {\n\t\t\t\tresponse: sign_challenge(&challenge.challenge),\n\t\t\t},\n\t\t)\n\t\t.await\n\t\t.unwrap()\n\t\t.map_err(CodeError::TunnelRpcCallFailed)?;\n\n\tshutdown.open(());\n\n\tOk(())\n}\n"
  },
  {
    "path": "cli/src/tunnels/dev_tunnels.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse super::protocol::{self, PortPrivacy, PortProtocol};\nuse crate::auth;\nuse crate::constants::{IS_INTERACTIVE_CLI, PROTOCOL_VERSION_TAG, TUNNEL_SERVICE_USER_AGENT};\nuse crate::state::{LauncherPaths, PersistedState};\nuse crate::util::errors::{\n\twrap, AnyError, CodeError, DevTunnelError, InvalidTunnelName, TunnelCreationFailed,\n\tWrappedError,\n};\nuse crate::util::input::prompt_placeholder;\nuse crate::{debug, info, log, spanf, trace, warning};\nuse async_trait::async_trait;\nuse futures::future::BoxFuture;\nuse futures::{FutureExt, TryFutureExt};\nuse lazy_static::lazy_static;\nuse rand::prelude::IteratorRandom;\nuse regex::Regex;\nuse reqwest::StatusCode;\nuse serde::{Deserialize, Serialize};\nuse std::sync::{Arc, Mutex};\nuse std::time::Duration;\nuse tokio::sync::{mpsc, watch};\nuse tunnels::connections::{ForwardedPortConnection, RelayTunnelHost};\nuse tunnels::contracts::{\n\tTunnel, TunnelAccessControl, TunnelPort, TunnelRelayTunnelEndpoint, PORT_TOKEN,\n\tTUNNEL_ACCESS_SCOPES_CONNECT, TUNNEL_PROTOCOL_AUTO,\n};\nuse tunnels::management::{\n\tnew_tunnel_management, HttpError, TunnelLocator, TunnelManagementClient, TunnelRequestOptions,\n\tNO_REQUEST_OPTIONS,\n};\n\nstatic TUNNEL_COUNT_LIMIT_NAME: &str = \"TunnelsPerUserPerLocation\";\n\n#[allow(dead_code)]\nmod tunnel_flags {\n\tuse crate::{log, tunnels::wsl_detect::is_wsl_installed};\n\n\tpub const IS_WSL_INSTALLED: u32 = 1 << 0;\n\tpub const IS_WINDOWS: u32 = 1 << 1;\n\tpub const IS_LINUX: u32 = 1 << 2;\n\tpub const IS_MACOS: u32 = 1 << 3;\n\n\t/// Creates a flag string for the tunnel\n\tpub fn create(log: &log::Logger) -> String {\n\t\tlet mut flags = 0;\n\n\t\t#[cfg(windows)]\n\t\t{\n\t\t\tflags |= IS_WINDOWS;\n\t\t}\n\t\t#[cfg(target_os = \"linux\")]\n\t\t{\n\t\t\tflags |= IS_LINUX;\n\t\t}\n\t\t#[cfg(target_os = \"macos\")]\n\t\t{\n\t\t\tflags |= IS_MACOS;\n\t\t}\n\n\t\tif is_wsl_installed(log) {\n\t\t\tflags |= IS_WSL_INSTALLED;\n\t\t}\n\n\t\tformat!(\"_flag{flags}\")\n\t}\n}\n\n#[derive(Clone, Serialize, Deserialize)]\npub struct PersistedTunnel {\n\tpub name: String,\n\tpub id: String,\n\tpub cluster: String,\n}\n\nimpl PersistedTunnel {\n\tpub fn into_locator(self) -> TunnelLocator {\n\t\tTunnelLocator::ID {\n\t\t\tcluster: self.cluster,\n\t\t\tid: self.id,\n\t\t}\n\t}\n\tpub fn locator(&self) -> TunnelLocator {\n\t\tTunnelLocator::ID {\n\t\t\tcluster: self.cluster.clone(),\n\t\t\tid: self.id.clone(),\n\t\t}\n\t}\n}\n\n#[async_trait]\ntrait AccessTokenProvider: Send + Sync {\n\t/// Gets the current access token.\n\tasync fn refresh_token(&self) -> Result<String, WrappedError>;\n\n\t/// Maintains the stored credential by refreshing it against the service\n\t/// to ensure its stays current. Returns a future that should be polled and\n\t/// only completes if a refresh fails in a consistent way.\n\tfn keep_alive(&self) -> BoxFuture<'static, Result<(), AnyError>>;\n}\n\n/// Access token provider that provides a fixed token without refreshing.\nstruct StaticAccessTokenProvider(String);\n\nimpl StaticAccessTokenProvider {\n\tpub fn new(token: String) -> Self {\n\t\tSelf(token)\n\t}\n}\n\n#[async_trait]\nimpl AccessTokenProvider for StaticAccessTokenProvider {\n\tasync fn refresh_token(&self) -> Result<String, WrappedError> {\n\t\tOk(self.0.clone())\n\t}\n\n\tfn keep_alive(&self) -> BoxFuture<'static, Result<(), AnyError>> {\n\t\tfutures::future::pending().boxed()\n\t}\n}\n\n/// Access token provider that looks up the token from the tunnels API.\nstruct LookupAccessTokenProvider {\n\tauth: auth::Auth,\n\tclient: TunnelManagementClient,\n\tlocator: TunnelLocator,\n\tlog: log::Logger,\n\tinitial_token: Arc<Mutex<Option<String>>>,\n}\n\nimpl LookupAccessTokenProvider {\n\tpub fn new(\n\t\tauth: auth::Auth,\n\t\tclient: TunnelManagementClient,\n\t\tlocator: TunnelLocator,\n\t\tlog: log::Logger,\n\t\tinitial_token: Option<String>,\n\t) -> Self {\n\t\tSelf {\n\t\t\tauth,\n\t\t\tclient,\n\t\t\tlocator,\n\t\t\tlog,\n\t\t\tinitial_token: Arc::new(Mutex::new(initial_token)),\n\t\t}\n\t}\n}\n\n#[async_trait]\nimpl AccessTokenProvider for LookupAccessTokenProvider {\n\tasync fn refresh_token(&self) -> Result<String, WrappedError> {\n\t\tif let Some(token) = self.initial_token.lock().unwrap().take() {\n\t\t\treturn Ok(token);\n\t\t}\n\n\t\tlet tunnel_lookup = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.tag.get\"),\n\t\t\tself.client.get_tunnel(\n\t\t\t\t&self.locator,\n\t\t\t\t&TunnelRequestOptions {\n\t\t\t\t\ttoken_scopes: vec![\"host\".to_string()],\n\t\t\t\t\t..Default::default()\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\n\t\ttrace!(self.log, \"Successfully refreshed access token\");\n\n\t\tmatch tunnel_lookup {\n\t\t\tOk(tunnel) => Ok(get_host_token_from_tunnel(&tunnel)),\n\t\t\tErr(e) => Err(wrap(e, \"failed to lookup tunnel for host token\")),\n\t\t}\n\t}\n\n\tfn keep_alive(&self) -> BoxFuture<'static, Result<(), AnyError>> {\n\t\tlet auth = self.auth.clone();\n\t\tauth.keep_token_alive().boxed()\n\t}\n}\n\n#[derive(Clone)]\npub struct DevTunnels {\n\tauth: auth::Auth,\n\tlog: log::Logger,\n\tlauncher_tunnel: PersistedState<Option<PersistedTunnel>>,\n\tclient: TunnelManagementClient,\n\ttag: &'static str,\n}\n\n/// Representation of a tunnel returned from the `start` methods.\npub struct ActiveTunnel {\n\t/// Name of the tunnel\n\tpub name: String,\n\t/// Underlying dev tunnels ID\n\tpub id: String,\n\tmanager: ActiveTunnelManager,\n}\n\nimpl ActiveTunnel {\n\t/// Closes and unregisters the tunnel.\n\tpub async fn close(&mut self) -> Result<(), AnyError> {\n\t\tself.manager.kill().await?;\n\t\tOk(())\n\t}\n\n\t/// Forwards a port to local connections.\n\tpub async fn add_port_direct(\n\t\t&mut self,\n\t\tport_number: u16,\n\t) -> Result<mpsc::UnboundedReceiver<ForwardedPortConnection>, AnyError> {\n\t\tlet port = self.manager.add_port_direct(port_number).await?;\n\t\tOk(port)\n\t}\n\n\t/// Forwards a port over TCP.\n\tpub async fn add_port_tcp(\n\t\t&self,\n\t\tport_number: u16,\n\t\tprivacy: PortPrivacy,\n\t\tprotocol: PortProtocol,\n\t) -> Result<(), AnyError> {\n\t\tself.manager\n\t\t\t.add_port_tcp(port_number, privacy, protocol)\n\t\t\t.await?;\n\t\tOk(())\n\t}\n\n\t/// Removes a forwarded port TCP.\n\tpub async fn remove_port(&self, port_number: u16) -> Result<(), AnyError> {\n\t\tself.manager.remove_port(port_number).await?;\n\t\tOk(())\n\t}\n\n\t/// Gets the template string for forming forwarded port web URIs..\n\tpub fn get_port_format(&self) -> Result<String, AnyError> {\n\t\tif let Some(details) = &*self.manager.endpoint_rx.borrow() {\n\t\t\treturn details\n\t\t\t\t.as_ref()\n\t\t\t\t.map(|r| {\n\t\t\t\t\tr.base\n\t\t\t\t\t\t.port_uri_format\n\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t.expect(\"expected to have port format\")\n\t\t\t\t})\n\t\t\t\t.map_err(|e| e.clone().into());\n\t\t}\n\n\t\tErr(CodeError::NoTunnelEndpoint.into())\n\t}\n\n\t/// Gets the public URI on which a forwarded port can be access in browser.\n\tpub fn get_port_uri(&self, port: u16) -> Result<String, AnyError> {\n\t\tself.get_port_format()\n\t\t\t.map(|f| f.replace(PORT_TOKEN, &port.to_string()))\n\t}\n\n\t/// Gets an object to read the current tunnel status.\n\tpub fn status(&self) -> StatusLock {\n\t\tself.manager.get_status()\n\t}\n}\n\nconst VSCODE_CLI_TUNNEL_TAG: &str = \"vscode-server-launcher\";\nconst VSCODE_CLI_FORWARDING_TAG: &str = \"vscode-port-forward\";\nconst OWNED_TUNNEL_TAGS: &[&str] = &[VSCODE_CLI_TUNNEL_TAG, VSCODE_CLI_FORWARDING_TAG];\nconst MAX_TUNNEL_NAME_LENGTH: usize = 20;\n\nfn get_host_token_from_tunnel(tunnel: &Tunnel) -> String {\n\ttunnel\n\t\t.access_tokens\n\t\t.as_ref()\n\t\t.expect(\"expected to have access tokens\")\n\t\t.get(\"host\")\n\t\t.expect(\"expected to have host token\")\n\t\t.to_string()\n}\n\nfn is_valid_name(name: &str) -> Result<(), InvalidTunnelName> {\n\tif name.len() > MAX_TUNNEL_NAME_LENGTH {\n\t\treturn Err(InvalidTunnelName(format!(\n\t\t\t\"Names cannot be longer than {MAX_TUNNEL_NAME_LENGTH} characters. Please try a different name.\"\n\t\t)));\n\t}\n\n\tlet re = Regex::new(r\"^([\\w-]+)$\").unwrap();\n\n\tif !re.is_match(name) {\n\t\treturn Err(InvalidTunnelName(\n            \"Names can only contain letters, numbers, and '-'. Spaces, commas, and all other special characters are not allowed. Please try a different name.\".to_string()\n        ));\n\t}\n\n\tOk(())\n}\n\nlazy_static! {\n\tstatic ref HOST_TUNNEL_REQUEST_OPTIONS: TunnelRequestOptions = TunnelRequestOptions {\n\t\tinclude_ports: true,\n\t\ttoken_scopes: vec![\"host\".to_string()],\n\t\t..Default::default()\n\t};\n}\n\n/// Structure optionally passed into `start_existing_tunnel` to forward an existing tunnel.\n#[derive(Clone, Debug)]\npub struct ExistingTunnel {\n\t/// Name you'd like to assign preexisting tunnel to use to connect to the VS Code Server\n\tpub tunnel_name: Option<String>,\n\n\t/// Token to authenticate and use preexisting tunnel\n\tpub host_token: String,\n\n\t/// Id of preexisting tunnel to use to connect to the VS Code Server\n\tpub tunnel_id: String,\n\n\t/// Cluster of preexisting tunnel to use to connect to the VS Code Server\n\tpub cluster: String,\n}\n\nimpl DevTunnels {\n\t/// Creates a new DevTunnels client used for port forwarding.\n\tpub fn new_port_forwarding(\n\t\tlog: &log::Logger,\n\t\tauth: auth::Auth,\n\t\tpaths: &LauncherPaths,\n\t) -> DevTunnels {\n\t\tlet mut client = new_tunnel_management(&TUNNEL_SERVICE_USER_AGENT);\n\t\tclient.authorization_provider(auth.clone());\n\n\t\tDevTunnels {\n\t\t\tauth,\n\t\t\tlog: log.clone(),\n\t\t\tclient: client.into(),\n\t\t\tlauncher_tunnel: PersistedState::new(paths.root().join(\"port_forwarding_tunnel.json\")),\n\t\t\ttag: VSCODE_CLI_FORWARDING_TAG,\n\t\t}\n\t}\n\n\t/// Creates a new DevTunnels client used for the Remote Tunnels extension to access the VS Code Server.\n\tpub fn new_remote_tunnel(\n\t\tlog: &log::Logger,\n\t\tauth: auth::Auth,\n\t\tpaths: &LauncherPaths,\n\t) -> DevTunnels {\n\t\tlet mut client = new_tunnel_management(&TUNNEL_SERVICE_USER_AGENT);\n\t\tclient.authorization_provider(auth.clone());\n\n\t\tDevTunnels {\n\t\t\tauth,\n\t\t\tlog: log.clone(),\n\t\t\tclient: client.into(),\n\t\t\tlauncher_tunnel: PersistedState::new(paths.root().join(\"code_tunnel.json\")),\n\t\t\ttag: VSCODE_CLI_TUNNEL_TAG,\n\t\t}\n\t}\n\n\tpub async fn remove_tunnel(&mut self) -> Result<(), AnyError> {\n\t\tlet tunnel = match self.launcher_tunnel.load() {\n\t\t\tSome(t) => t,\n\t\t\tNone => {\n\t\t\t\treturn Ok(());\n\t\t\t}\n\t\t};\n\n\t\tspanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.delete\"),\n\t\t\tself.client\n\t\t\t\t.delete_tunnel(&tunnel.into_locator(), NO_REQUEST_OPTIONS)\n\t\t)\n\t\t.map_err(|e| wrap(e, \"failed to execute `tunnel delete`\"))?;\n\n\t\tself.launcher_tunnel.save(None)?;\n\t\tOk(())\n\t}\n\n\t/// Renames the current tunnel to the new name.\n\tpub async fn rename_tunnel(&mut self, name: &str) -> Result<(), AnyError> {\n\t\tself.update_tunnel_name(self.launcher_tunnel.load(), name)\n\t\t\t.await\n\t\t\t.map(|_| ())\n\t}\n\n\t/// Updates the name of the existing persisted tunnel to the new name.\n\t/// Gracefully creates a new tunnel if the previous one was deleted.\n\tasync fn update_tunnel_name(\n\t\t&mut self,\n\t\tpersisted: Option<PersistedTunnel>,\n\t\tname: &str,\n\t) -> Result<(Tunnel, PersistedTunnel), AnyError> {\n\t\tlet name = name.to_ascii_lowercase();\n\n\t\tlet (mut full_tunnel, mut persisted, is_new) = match persisted {\n\t\t\tSome(persisted) => {\n\t\t\t\tdebug!(\n\t\t\t\t\tself.log,\n\t\t\t\t\t\"Found a persisted tunnel, seeing if the name matches...\"\n\t\t\t\t);\n\t\t\t\tself.get_or_create_tunnel(persisted, Some(&name), NO_REQUEST_OPTIONS)\n\t\t\t\t\t.await\n\t\t\t}\n\t\t\tNone => {\n\t\t\t\tdebug!(self.log, \"Creating a new tunnel with the requested name\");\n\t\t\t\tself.create_tunnel(&name, NO_REQUEST_OPTIONS)\n\t\t\t\t\t.await\n\t\t\t\t\t.map(|(pt, t)| (t, pt, true))\n\t\t\t}\n\t\t}?;\n\n\t\tlet desired_tags = self.get_labels(&name);\n\t\tif is_new || vec_eq_as_set(&full_tunnel.labels, &desired_tags) {\n\t\t\treturn Ok((full_tunnel, persisted));\n\t\t}\n\n\t\tdebug!(self.log, \"Tunnel name changed, applying updates...\");\n\n\t\tfull_tunnel.labels = desired_tags;\n\n\t\tlet updated_tunnel = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.tag.update\"),\n\t\t\tself.client.update_tunnel(&full_tunnel, NO_REQUEST_OPTIONS)\n\t\t)\n\t\t.map_err(|e| wrap(e, \"failed to rename tunnel\"))?;\n\n\t\tpersisted.name = name;\n\t\tself.launcher_tunnel.save(Some(persisted.clone()))?;\n\n\t\tOk((updated_tunnel, persisted))\n\t}\n\n\t/// Gets the persisted tunnel from the service, or creates a new one.\n\t/// If `create_with_new_name` is given, the new tunnel has that name\n\t/// instead of the one previously persisted.\n\tasync fn get_or_create_tunnel(\n\t\t&mut self,\n\t\tpersisted: PersistedTunnel,\n\t\tcreate_with_new_name: Option<&str>,\n\t\toptions: &TunnelRequestOptions,\n\t) -> Result<(Tunnel, PersistedTunnel, /* is_new */ bool), AnyError> {\n\t\tlet tunnel_lookup = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.tag.get\"),\n\t\t\tself.client.get_tunnel(&persisted.locator(), options)\n\t\t);\n\n\t\tmatch tunnel_lookup {\n\t\t\tOk(ft) => Ok((ft, persisted, false)),\n\t\t\tErr(HttpError::ResponseError(e))\n\t\t\t\tif e.status_code == StatusCode::NOT_FOUND\n\t\t\t\t\t|| e.status_code == StatusCode::FORBIDDEN =>\n\t\t\t{\n\t\t\t\tlet (persisted, tunnel) = self\n\t\t\t\t\t.create_tunnel(create_with_new_name.unwrap_or(&persisted.name), options)\n\t\t\t\t\t.await?;\n\t\t\t\tOk((tunnel, persisted, true))\n\t\t\t}\n\t\t\tErr(e) => Err(wrap(e, \"failed to lookup tunnel\").into()),\n\t\t}\n\t}\n\n\t/// Starts a new tunnel for the code server on the port. Unlike `start_new_tunnel`,\n\t/// this attempts to reuse or create a tunnel of a preferred name or of a generated friendly tunnel name.\n\tpub async fn start_new_launcher_tunnel(\n\t\t&mut self,\n\t\tpreferred_name: Option<&str>,\n\t\tuse_random_name: bool,\n\t\tpreserve_ports: &[u16],\n\t) -> Result<ActiveTunnel, AnyError> {\n\t\tlet (mut tunnel, persisted) = match self.launcher_tunnel.load() {\n\t\t\tSome(mut persisted) => {\n\t\t\t\tif let Some(preferred_name) = preferred_name.map(|n| n.to_ascii_lowercase()) {\n\t\t\t\t\tif persisted.name.to_ascii_lowercase() != preferred_name {\n\t\t\t\t\t\t(_, persisted) = self\n\t\t\t\t\t\t\t.update_tunnel_name(Some(persisted), &preferred_name)\n\t\t\t\t\t\t\t.await?;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet (tunnel, persisted, _) = self\n\t\t\t\t\t.get_or_create_tunnel(persisted, None, &HOST_TUNNEL_REQUEST_OPTIONS)\n\t\t\t\t\t.await?;\n\t\t\t\t(tunnel, persisted)\n\t\t\t}\n\t\t\tNone => {\n\t\t\t\tdebug!(self.log, \"No code server tunnel found, creating new one\");\n\t\t\t\tlet name = self\n\t\t\t\t\t.get_name_for_tunnel(preferred_name, use_random_name)\n\t\t\t\t\t.await?;\n\t\t\t\tlet (persisted, full_tunnel) = self\n\t\t\t\t\t.create_tunnel(&name, &HOST_TUNNEL_REQUEST_OPTIONS)\n\t\t\t\t\t.await?;\n\t\t\t\t(full_tunnel, persisted)\n\t\t\t}\n\t\t};\n\n\t\ttunnel = self\n\t\t\t.sync_tunnel_tags(\n\t\t\t\t&self.client,\n\t\t\t\t&persisted.name,\n\t\t\t\ttunnel,\n\t\t\t\t&HOST_TUNNEL_REQUEST_OPTIONS,\n\t\t\t)\n\t\t\t.await?;\n\n\t\tlet locator = TunnelLocator::try_from(&tunnel).unwrap();\n\t\tlet host_token = get_host_token_from_tunnel(&tunnel);\n\n\t\tfor port_to_delete in tunnel\n\t\t\t.ports\n\t\t\t.iter()\n\t\t\t.filter(|p: &&TunnelPort| !preserve_ports.contains(&p.port_number))\n\t\t{\n\t\t\tlet output_fut = self.client.delete_tunnel_port(\n\t\t\t\t&locator,\n\t\t\t\tport_to_delete.port_number,\n\t\t\t\tNO_REQUEST_OPTIONS,\n\t\t\t);\n\t\t\tspanf!(\n\t\t\t\tself.log,\n\t\t\t\tself.log.span(\"dev-tunnel.port.delete\"),\n\t\t\t\toutput_fut\n\t\t\t)\n\t\t\t.map_err(|e| wrap(e, \"failed to delete port\"))?;\n\t\t}\n\n\t\t// cleanup any old trailing tunnel endpoints\n\t\tfor endpoint in tunnel.endpoints {\n\t\t\tlet fut = self.client.delete_tunnel_endpoints(\n\t\t\t\t&locator,\n\t\t\t\t&endpoint.host_id,\n\t\t\t\tNO_REQUEST_OPTIONS,\n\t\t\t);\n\n\t\t\tspanf!(self.log, self.log.span(\"dev-tunnel.endpoint.prune\"), fut)\n\t\t\t\t.map_err(|e| wrap(e, \"failed to prune tunnel endpoint\"))?;\n\t\t}\n\n\t\tself.start_tunnel(\n\t\t\tlocator.clone(),\n\t\t\t&persisted,\n\t\t\tself.client.clone(),\n\t\t\tLookupAccessTokenProvider::new(\n\t\t\t\tself.auth.clone(),\n\t\t\t\tself.client.clone(),\n\t\t\t\tlocator,\n\t\t\t\tself.log.clone(),\n\t\t\t\tSome(host_token),\n\t\t\t),\n\t\t)\n\t\t.await\n\t}\n\n\tasync fn create_tunnel(\n\t\t&mut self,\n\t\tname: &str,\n\t\toptions: &TunnelRequestOptions,\n\t) -> Result<(PersistedTunnel, Tunnel), AnyError> {\n\t\tinfo!(self.log, \"Creating tunnel with the name: {}\", name);\n\n\t\tlet tunnel = match self.get_existing_tunnel_with_name(name).await? {\n\t\t\tSome(e) => {\n\t\t\t\tif tunnel_has_host_connection(&e) {\n\t\t\t\t\treturn Err(CodeError::TunnelActiveAndInUse(name.to_string()).into());\n\t\t\t\t}\n\n\t\t\t\tlet loc = TunnelLocator::try_from(&e).unwrap();\n\t\t\t\tinfo!(self.log, \"Adopting existing tunnel (ID={:?})\", loc);\n\t\t\t\tspanf!(\n\t\t\t\t\tself.log,\n\t\t\t\t\tself.log.span(\"dev-tunnel.tag.get\"),\n\t\t\t\t\tself.client.get_tunnel(&loc, &HOST_TUNNEL_REQUEST_OPTIONS)\n\t\t\t\t)\n\t\t\t\t.map_err(|e| wrap(e, \"failed to lookup tunnel\"))?\n\t\t\t}\n\t\t\tNone => loop {\n\t\t\t\tlet result = spanf!(\n\t\t\t\t\tself.log,\n\t\t\t\t\tself.log.span(\"dev-tunnel.create\"),\n\t\t\t\t\tself.client.create_tunnel(\n\t\t\t\t\t\tTunnel {\n\t\t\t\t\t\t\tlabels: self.get_labels(name),\n\t\t\t\t\t\t\t..Default::default()\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tmatch result {\n\t\t\t\t\tErr(HttpError::ResponseError(e))\n\t\t\t\t\t\tif e.status_code == StatusCode::TOO_MANY_REQUESTS =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif let Some(d) = e.get_details() {\n\t\t\t\t\t\t\tlet detail = d.detail.unwrap_or_else(|| \"unknown\".to_string());\n\t\t\t\t\t\t\tif detail.contains(TUNNEL_COUNT_LIMIT_NAME)\n\t\t\t\t\t\t\t\t&& self.try_recycle_tunnel().await?\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn Err(AnyError::from(TunnelCreationFailed(\n\t\t\t\t\t\t\t\tname.to_string(),\n\t\t\t\t\t\t\t\tdetail,\n\t\t\t\t\t\t\t)));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Err(AnyError::from(TunnelCreationFailed(\n\t\t\t\t\t\t\t\tname.to_string(),\n\t\t\t\t\t\t\t\t\"You have exceeded a limit for the port fowarding service. Please remove other machines before trying to add this machine.\".to_string(),\n\t\t\t\t\t\t\t)));\n\t\t\t\t\t}\n\t\t\t\t\tErr(e) => {\n\t\t\t\t\t\treturn Err(AnyError::from(TunnelCreationFailed(\n\t\t\t\t\t\t\tname.to_string(),\n\t\t\t\t\t\t\tformat!(\"{e:?}\"),\n\t\t\t\t\t\t)))\n\t\t\t\t\t}\n\t\t\t\t\tOk(t) => break t,\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\n\t\tlet pt = PersistedTunnel {\n\t\t\tcluster: tunnel.cluster_id.clone().unwrap(),\n\t\t\tid: tunnel.tunnel_id.clone().unwrap(),\n\t\t\tname: name.to_string(),\n\t\t};\n\n\t\tself.launcher_tunnel.save(Some(pt.clone()))?;\n\t\tOk((pt, tunnel))\n\t}\n\n\t/// Gets the expected tunnel tags\n\tfn get_labels(&self, name: &str) -> Vec<String> {\n\t\tvec![\n\t\t\tname.to_string(),\n\t\t\tPROTOCOL_VERSION_TAG.to_string(),\n\t\t\tself.tag.to_string(),\n\t\t\ttunnel_flags::create(&self.log),\n\t\t]\n\t}\n\n\t/// Ensures the tunnel contains a tag for the current PROTCOL_VERSION, and no\n\t/// other version tags.\n\tasync fn sync_tunnel_tags(\n\t\t&self,\n\t\tclient: &TunnelManagementClient,\n\t\tname: &str,\n\t\ttunnel: Tunnel,\n\t\toptions: &TunnelRequestOptions,\n\t) -> Result<Tunnel, AnyError> {\n\t\tlet new_labels = self.get_labels(name);\n\t\tif vec_eq_as_set(&tunnel.labels, &new_labels) {\n\t\t\treturn Ok(tunnel);\n\t\t}\n\n\t\tdebug!(\n\t\t\tself.log,\n\t\t\t\"Updating tunnel tags {} -> {}\",\n\t\t\ttunnel.labels.join(\", \"),\n\t\t\tnew_labels.join(\", \")\n\t\t);\n\n\t\tlet tunnel_update = Tunnel {\n\t\t\tlabels: new_labels,\n\t\t\ttunnel_id: tunnel.tunnel_id.clone(),\n\t\t\tcluster_id: tunnel.cluster_id.clone(),\n\t\t\t..Default::default()\n\t\t};\n\n\t\tlet result = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.protocol-tag-update\"),\n\t\t\tclient.update_tunnel(&tunnel_update, options)\n\t\t);\n\n\t\tresult.map_err(|e| wrap(e, \"tunnel tag update failed\").into())\n\t}\n\n\t/// Tries to delete an unused tunnel, and then creates a tunnel with the\n\t/// given `new_name`.\n\tasync fn try_recycle_tunnel(&mut self) -> Result<bool, AnyError> {\n\t\ttrace!(\n\t\t\tself.log,\n\t\t\t\"Tunnel limit hit, trying to recycle an old tunnel\"\n\t\t);\n\n\t\tlet existing_tunnels = self.list_tunnels_with_tag(OWNED_TUNNEL_TAGS).await?;\n\n\t\tlet recyclable = existing_tunnels\n\t\t\t.iter()\n\t\t\t.filter(|t| !tunnel_has_host_connection(t))\n\t\t\t.choose(&mut rand::thread_rng());\n\n\t\tmatch recyclable {\n\t\t\tSome(tunnel) => {\n\t\t\t\ttrace!(self.log, \"Recycling tunnel ID {:?}\", tunnel.tunnel_id);\n\t\t\t\tspanf!(\n\t\t\t\t\tself.log,\n\t\t\t\t\tself.log.span(\"dev-tunnel.delete\"),\n\t\t\t\t\tself.client\n\t\t\t\t\t\t.delete_tunnel(&tunnel.try_into().unwrap(), NO_REQUEST_OPTIONS)\n\t\t\t\t)\n\t\t\t\t.map_err(|e| wrap(e, \"failed to execute `tunnel delete`\"))?;\n\t\t\t\tOk(true)\n\t\t\t}\n\t\t\tNone => {\n\t\t\t\ttrace!(self.log, \"No tunnels available to recycle\");\n\t\t\t\tOk(false)\n\t\t\t}\n\t\t}\n\t}\n\n\tasync fn list_tunnels_with_tag(\n\t\t&mut self,\n\t\ttags: &[&'static str],\n\t) -> Result<Vec<Tunnel>, AnyError> {\n\t\tlet tunnels = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.listall\"),\n\t\t\tself.client.list_all_tunnels(&TunnelRequestOptions {\n\t\t\t\tlabels: tags.iter().map(|t| t.to_string()).collect(),\n\t\t\t\t..Default::default()\n\t\t\t})\n\t\t)\n\t\t.map_err(|e| wrap(e, \"error listing current tunnels\"))?;\n\n\t\tOk(tunnels)\n\t}\n\n\tasync fn get_existing_tunnel_with_name(&self, name: &str) -> Result<Option<Tunnel>, AnyError> {\n\t\tlet existing: Vec<Tunnel> = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.rename.search\"),\n\t\t\tself.client.list_all_tunnels(&TunnelRequestOptions {\n\t\t\t\tlabels: vec![self.tag.to_string(), name.to_string()],\n\t\t\t\trequire_all_labels: true,\n\t\t\t\tlimit: 1,\n\t\t\t\tinclude_ports: true,\n\t\t\t\ttoken_scopes: vec![\"host\".to_string()],\n\t\t\t\t..Default::default()\n\t\t\t})\n\t\t)\n\t\t.map_err(|e| wrap(e, \"failed to list existing tunnels\"))?;\n\n\t\tOk(existing.into_iter().next())\n\t}\n\n\tfn get_placeholder_name() -> String {\n\t\tlet mut n = clean_hostname_for_tunnel(&gethostname::gethostname().to_string_lossy());\n\t\tn.make_ascii_lowercase();\n\t\tn.truncate(MAX_TUNNEL_NAME_LENGTH);\n\t\tn\n\t}\n\n\tasync fn get_name_for_tunnel(\n\t\t&mut self,\n\t\tpreferred_name: Option<&str>,\n\t\tmut use_random_name: bool,\n\t) -> Result<String, AnyError> {\n\t\tlet existing_tunnels = self.list_tunnels_with_tag(&[self.tag]).await?;\n\t\tlet is_name_free = |n: &str| {\n\t\t\t!existing_tunnels\n\t\t\t\t.iter()\n\t\t\t\t.any(|v| tunnel_has_host_connection(v) && v.labels.iter().any(|t| t == n))\n\t\t};\n\n\t\tif let Some(machine_name) = preferred_name {\n\t\t\tlet name = machine_name.to_ascii_lowercase();\n\t\t\tif let Err(e) = is_valid_name(&name) {\n\t\t\t\tinfo!(self.log, \"{} is an invalid name\", e);\n\t\t\t\treturn Err(AnyError::from(wrap(e, \"invalid name\")));\n\t\t\t}\n\t\t\tif is_name_free(&name) {\n\t\t\t\treturn Ok(name);\n\t\t\t}\n\t\t\tinfo!(\n\t\t\t\tself.log,\n\t\t\t\t\"{} is already taken, using a random name instead\", &name\n\t\t\t);\n\t\t\tuse_random_name = true;\n\t\t}\n\n\t\tlet mut placeholder_name = Self::get_placeholder_name();\n\t\tif !is_name_free(&placeholder_name) {\n\t\t\tfor i in 2.. {\n\t\t\t\tlet fixed_name = format!(\"{placeholder_name}{i}\");\n\t\t\t\tif is_name_free(&fixed_name) {\n\t\t\t\t\tplaceholder_name = fixed_name;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif use_random_name || !*IS_INTERACTIVE_CLI {\n\t\t\treturn Ok(placeholder_name);\n\t\t}\n\n\t\tloop {\n\t\t\tlet mut name = prompt_placeholder(\n\t\t\t\t\"What would you like to call this machine?\",\n\t\t\t\t&placeholder_name,\n\t\t\t)?;\n\n\t\t\tname.make_ascii_lowercase();\n\n\t\t\tif let Err(e) = is_valid_name(&name) {\n\t\t\t\tinfo!(self.log, \"{}\", e);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif is_name_free(&name) {\n\t\t\t\treturn Ok(name);\n\t\t\t}\n\n\t\t\tinfo!(self.log, \"The name {} is already in use\", name);\n\t\t}\n\t}\n\n\t/// Hosts an existing tunnel, where the tunnel ID and host token are given.\n\tpub async fn start_existing_tunnel(\n\t\t&mut self,\n\t\ttunnel: ExistingTunnel,\n\t) -> Result<ActiveTunnel, AnyError> {\n\t\tlet tunnel_details = PersistedTunnel {\n\t\t\tname: match tunnel.tunnel_name {\n\t\t\t\tSome(n) => n,\n\t\t\t\tNone => Self::get_placeholder_name(),\n\t\t\t},\n\t\t\tid: tunnel.tunnel_id,\n\t\t\tcluster: tunnel.cluster,\n\t\t};\n\n\t\tlet mut mgmt = self.client.build();\n\t\tmgmt.authorization(tunnels::management::Authorization::Tunnel(\n\t\t\ttunnel.host_token.clone(),\n\t\t));\n\n\t\tlet client = mgmt.into();\n\t\tself.sync_tunnel_tags(\n\t\t\t&client,\n\t\t\t&tunnel_details.name,\n\t\t\tTunnel {\n\t\t\t\tcluster_id: Some(tunnel_details.cluster.clone()),\n\t\t\t\ttunnel_id: Some(tunnel_details.id.clone()),\n\t\t\t\t..Default::default()\n\t\t\t},\n\t\t\t&HOST_TUNNEL_REQUEST_OPTIONS,\n\t\t)\n\t\t.await?;\n\n\t\tself.start_tunnel(\n\t\t\ttunnel_details.locator(),\n\t\t\t&tunnel_details,\n\t\t\tclient,\n\t\t\tStaticAccessTokenProvider::new(tunnel.host_token),\n\t\t)\n\t\t.await\n\t}\n\n\tasync fn start_tunnel(\n\t\t&mut self,\n\t\tlocator: TunnelLocator,\n\t\ttunnel_details: &PersistedTunnel,\n\t\tclient: TunnelManagementClient,\n\t\taccess_token: impl AccessTokenProvider + 'static,\n\t) -> Result<ActiveTunnel, AnyError> {\n\t\tlet mut manager = ActiveTunnelManager::new(self.log.clone(), client, locator, access_token);\n\n\t\tlet endpoint_result = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"dev-tunnel.serve.callback\"),\n\t\t\tmanager.get_endpoint()\n\t\t);\n\n\t\tlet endpoint = match endpoint_result {\n\t\t\tOk(endpoint) => endpoint,\n\t\t\tErr(e) => {\n\t\t\t\terror!(self.log, \"Error connecting to tunnel endpoint: {}\", e);\n\t\t\t\tmanager.kill().await.ok();\n\t\t\t\treturn Err(e);\n\t\t\t}\n\t\t};\n\n\t\tdebug!(self.log, \"Connected to tunnel endpoint: {:?}\", endpoint);\n\n\t\tOk(ActiveTunnel {\n\t\t\tname: tunnel_details.name.clone(),\n\t\t\tid: tunnel_details.id.clone(),\n\t\t\tmanager,\n\t\t})\n\t}\n}\n\n#[derive(Clone, Default)]\npub struct StatusLock(Arc<std::sync::Mutex<protocol::singleton::Status>>);\n\nimpl StatusLock {\n\tfn succeed(&self) {\n\t\tlet mut status = self.0.lock().unwrap();\n\t\tstatus.tunnel = protocol::singleton::TunnelState::Connected;\n\t\tstatus.last_connected_at = Some(chrono::Utc::now());\n\t}\n\n\tfn fail(&self, reason: String) {\n\t\tlet mut status = self.0.lock().unwrap();\n\t\tif let protocol::singleton::TunnelState::Connected = status.tunnel {\n\t\t\tstatus.last_disconnected_at = Some(chrono::Utc::now());\n\t\t\tstatus.tunnel = protocol::singleton::TunnelState::Disconnected;\n\t\t}\n\t\tstatus.last_fail_reason = Some(reason);\n\t}\n\n\tpub fn read(&self) -> protocol::singleton::Status {\n\t\tlet status = self.0.lock().unwrap();\n\t\tstatus.clone()\n\t}\n}\n\nstruct ActiveTunnelManager {\n\tclose_tx: Option<mpsc::Sender<()>>,\n\tendpoint_rx: watch::Receiver<Option<Result<TunnelRelayTunnelEndpoint, WrappedError>>>,\n\trelay: Arc<tokio::sync::Mutex<RelayTunnelHost>>,\n\tstatus: StatusLock,\n}\n\nimpl ActiveTunnelManager {\n\tpub fn new(\n\t\tlog: log::Logger,\n\t\tmgmt: TunnelManagementClient,\n\t\tlocator: TunnelLocator,\n\t\taccess_token: impl AccessTokenProvider + 'static,\n\t) -> ActiveTunnelManager {\n\t\tlet (endpoint_tx, endpoint_rx) = watch::channel(None);\n\t\tlet (close_tx, close_rx) = mpsc::channel(1);\n\n\t\tlet relay = Arc::new(tokio::sync::Mutex::new(RelayTunnelHost::new(locator, mgmt)));\n\t\tlet relay_spawned = relay.clone();\n\n\t\tlet status = StatusLock::default();\n\n\t\tlet status_spawned = status.clone();\n\t\ttokio::spawn(async move {\n\t\t\tActiveTunnelManager::spawn_tunnel(\n\t\t\t\tlog,\n\t\t\t\trelay_spawned,\n\t\t\t\tclose_rx,\n\t\t\t\tendpoint_tx,\n\t\t\t\taccess_token,\n\t\t\t\tstatus_spawned,\n\t\t\t)\n\t\t\t.await;\n\t\t});\n\n\t\tActiveTunnelManager {\n\t\t\tendpoint_rx,\n\t\t\trelay,\n\t\t\tclose_tx: Some(close_tx),\n\t\t\tstatus,\n\t\t}\n\t}\n\n\t/// Gets a copy of the current tunnel status information\n\tpub fn get_status(&self) -> StatusLock {\n\t\tself.status.clone()\n\t}\n\n\t/// Adds a port for TCP/IP forwarding.\n\tpub async fn add_port_tcp(\n\t\t&self,\n\t\tport_number: u16,\n\t\tprivacy: PortPrivacy,\n\t\tprotocol: PortProtocol,\n\t) -> Result<(), WrappedError> {\n\t\tself.relay\n\t\t\t.lock()\n\t\t\t.await\n\t\t\t.add_port(&TunnelPort {\n\t\t\t\tport_number,\n\t\t\t\tprotocol: Some(protocol.to_contract_str().to_string()),\n\t\t\t\taccess_control: Some(privacy_to_tunnel_acl(privacy)),\n\t\t\t\t..Default::default()\n\t\t\t})\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error adding port to relay\"))?;\n\t\tOk(())\n\t}\n\n\t/// Adds a port for TCP/IP forwarding.\n\tpub async fn add_port_direct(\n\t\t&self,\n\t\tport_number: u16,\n\t) -> Result<mpsc::UnboundedReceiver<ForwardedPortConnection>, WrappedError> {\n\t\tself.relay\n\t\t\t.lock()\n\t\t\t.await\n\t\t\t.add_port_raw(&TunnelPort {\n\t\t\t\tport_number,\n\t\t\t\tprotocol: Some(TUNNEL_PROTOCOL_AUTO.to_owned()),\n\t\t\t\taccess_control: Some(privacy_to_tunnel_acl(PortPrivacy::Private)),\n\t\t\t\t..Default::default()\n\t\t\t})\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error adding port to relay\"))\n\t}\n\n\t/// Removes a port from TCP/IP forwarding.\n\tpub async fn remove_port(&self, port_number: u16) -> Result<(), WrappedError> {\n\t\tself.relay\n\t\t\t.lock()\n\t\t\t.await\n\t\t\t.remove_port(port_number)\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error remove port from relay\"))\n\t}\n\n\t/// Gets the most recent details from the tunnel process. Returns None if\n\t/// the process exited before providing details.\n\tpub async fn get_endpoint(&mut self) -> Result<TunnelRelayTunnelEndpoint, AnyError> {\n\t\tloop {\n\t\t\tif let Some(details) = &*self.endpoint_rx.borrow() {\n\t\t\t\treturn details.clone().map_err(AnyError::from);\n\t\t\t}\n\n\t\t\tif self.endpoint_rx.changed().await.is_err() {\n\t\t\t\treturn Err(DevTunnelError(\"tunnel creation cancelled\".to_string()).into());\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Kills the process, and waits for it to exit.\n\t/// See https://tokio.rs/tokio/topics/shutdown#waiting-for-things-to-finish-shutting-down for how this works\n\tpub async fn kill(&mut self) -> Result<(), AnyError> {\n\t\tif let Some(tx) = self.close_tx.take() {\n\t\t\tdrop(tx);\n\t\t}\n\n\t\tself.relay\n\t\t\t.lock()\n\t\t\t.await\n\t\t\t.unregister()\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error unregistering relay\"))?;\n\n\t\twhile self.endpoint_rx.changed().await.is_ok() {}\n\n\t\tOk(())\n\t}\n\n\tasync fn spawn_tunnel(\n\t\tlog: log::Logger,\n\t\trelay: Arc<tokio::sync::Mutex<RelayTunnelHost>>,\n\t\tmut close_rx: mpsc::Receiver<()>,\n\t\tendpoint_tx: watch::Sender<Option<Result<TunnelRelayTunnelEndpoint, WrappedError>>>,\n\t\taccess_token_provider: impl AccessTokenProvider + 'static,\n\t\tstatus: StatusLock,\n\t) {\n\t\tlet mut token_ka = access_token_provider.keep_alive();\n\t\tlet mut backoff = Backoff::new(Duration::from_secs(5), Duration::from_secs(120));\n\n\t\tmacro_rules! fail {\n\t\t\t($e: expr, $msg: expr) => {\n\t\t\t\tlet fmt = format!(\"{}: {}\", $msg, $e);\n\t\t\t\twarning!(log, &fmt);\n\t\t\t\tstatus.fail(fmt);\n\t\t\t\tendpoint_tx.send(Some(Err($e))).ok();\n\t\t\t\tbackoff.delay().await;\n\t\t\t};\n\t\t}\n\n\t\tloop {\n\t\t\tdebug!(log, \"Starting tunnel to server...\");\n\n\t\t\tlet access_token = match access_token_provider.refresh_token().await {\n\t\t\t\tOk(t) => t,\n\t\t\t\tErr(e) => {\n\t\t\t\t\tfail!(e, \"Error refreshing access token, will retry\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// we don't bother making a client that can refresh the token, since\n\t\t\t// the tunnel won't be able to host as soon as the access token expires.\n\t\t\tlet handle_res = {\n\t\t\t\tlet mut relay = relay.lock().await;\n\t\t\t\trelay\n\t\t\t\t\t.connect(&access_token)\n\t\t\t\t\t.await\n\t\t\t\t\t.map_err(|e| wrap(e, \"error connecting to tunnel\"))\n\t\t\t};\n\n\t\t\tlet mut handle = match handle_res {\n\t\t\t\tOk(handle) => handle,\n\t\t\t\tErr(e) => {\n\t\t\t\t\tfail!(e, \"Error connecting to relay, will retry\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tbackoff.reset();\n\t\t\tstatus.succeed();\n\t\t\tendpoint_tx.send(Some(Ok(handle.endpoint().clone()))).ok();\n\n\t\t\ttokio::select! {\n\t\t\t\t// error is mapped like this prevent it being used across an await,\n\t\t\t\t// which Rust dislikes since there's a non-sendable dyn Error in there\n\t\t\t\tres = (&mut handle).map_err(|e| wrap(e, \"error from tunnel connection\")) => {\n\t\t\t\t\tif let Err(e) = res {\n\t\t\t\t\t\tfail!(e, \"Tunnel exited unexpectedly, reconnecting\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\twarning!(log, \"Tunnel exited unexpectedly but gracefully, reconnecting\");\n\t\t\t\t\t\tbackoff.delay().await;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tErr(e) = &mut token_ka => {\n\t\t\t\t\terror!(log, \"access token is no longer valid, exiting: {}\", e);\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t\t_ = close_rx.recv() => {\n\t\t\t\t\ttrace!(log, \"Tunnel closing gracefully\");\n\t\t\t\t\ttrace!(log, \"Tunnel closed with result: {:?}\", handle.close().await);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nstruct Backoff {\n\tfailures: u32,\n\tbase_duration: Duration,\n\tmax_duration: Duration,\n}\n\nimpl Backoff {\n\tpub fn new(base_duration: Duration, max_duration: Duration) -> Self {\n\t\tSelf {\n\t\t\tfailures: 0,\n\t\t\tbase_duration,\n\t\t\tmax_duration,\n\t\t}\n\t}\n\n\tpub async fn delay(&mut self) {\n\t\ttokio::time::sleep(self.next()).await\n\t}\n\n\tpub fn next(&mut self) -> Duration {\n\t\tself.failures += 1;\n\t\tlet duration = self\n\t\t\t.base_duration\n\t\t\t.checked_mul(self.failures)\n\t\t\t.unwrap_or(self.max_duration);\n\t\tstd::cmp::min(duration, self.max_duration)\n\t}\n\n\tpub fn reset(&mut self) {\n\t\tself.failures = 0;\n\t}\n}\n\n/// Cleans up the hostname so it can be used as a tunnel name.\n/// See TUNNEL_NAME_PATTERN in the tunnels SDK for the rules we try to use.\nfn clean_hostname_for_tunnel(hostname: &str) -> String {\n\tlet mut out = String::new();\n\tfor char in hostname.chars().take(60) {\n\t\tmatch char {\n\t\t\t'-' | '_' | ' ' => {\n\t\t\t\tout.push('-');\n\t\t\t}\n\t\t\t'0'..='9' | 'a'..='z' | 'A'..='Z' => {\n\t\t\t\tout.push(char);\n\t\t\t}\n\t\t\t_ => {}\n\t\t}\n\t}\n\n\tlet trimmed = out.trim_matches('-');\n\tif trimmed.len() < 2 {\n\t\t\"remote-machine\".to_string() // placeholder if the result was empty\n\t} else {\n\t\ttrimmed.to_owned()\n\t}\n}\n\nfn vec_eq_as_set(a: &[String], b: &[String]) -> bool {\n\tif a.len() != b.len() {\n\t\treturn false;\n\t}\n\n\tfor item in a {\n\t\tif !b.contains(item) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\ttrue\n}\n\nfn privacy_to_tunnel_acl(privacy: PortPrivacy) -> TunnelAccessControl {\n\tTunnelAccessControl {\n\t\tentries: vec![match privacy {\n\t\t\tPortPrivacy::Public => tunnels::contracts::TunnelAccessControlEntry {\n\t\t\t\tkind: tunnels::contracts::TunnelAccessControlEntryType::Anonymous,\n\t\t\t\tprovider: None,\n\t\t\t\tis_inherited: false,\n\t\t\t\tis_deny: false,\n\t\t\t\tis_inverse: false,\n\t\t\t\torganization: None,\n\t\t\t\texpiration: None,\n\t\t\t\tsubjects: vec![],\n\t\t\t\tscopes: vec![TUNNEL_ACCESS_SCOPES_CONNECT.to_string()],\n\t\t\t},\n\t\t\t// Ensure private ports are actually private and do not inherit any\n\t\t\t// default visibility that may be set on the tunnel:\n\t\t\tPortPrivacy::Private => tunnels::contracts::TunnelAccessControlEntry {\n\t\t\t\tkind: tunnels::contracts::TunnelAccessControlEntryType::Anonymous,\n\t\t\t\tprovider: None,\n\t\t\t\tis_inherited: false,\n\t\t\t\tis_deny: true,\n\t\t\t\tis_inverse: false,\n\t\t\t\torganization: None,\n\t\t\t\texpiration: None,\n\t\t\t\tsubjects: vec![],\n\t\t\t\tscopes: vec![TUNNEL_ACCESS_SCOPES_CONNECT.to_string()],\n\t\t\t},\n\t\t}],\n\t}\n}\n\nfn tunnel_has_host_connection(tunnel: &Tunnel) -> bool {\n\ttunnel\n\t\t.status\n\t\t.as_ref()\n\t\t.and_then(|s| s.host_connection_count.as_ref().map(|c| c.get_count() > 0))\n\t\t.unwrap_or_default()\n}\n\n#[cfg(test)]\nmod test {\n\tuse super::*;\n\n\t#[test]\n\tfn test_clean_hostname_for_tunnel() {\n\t\tassert_eq!(\n\t\t\tclean_hostname_for_tunnel(\"hello123\"),\n\t\t\t\"hello123\".to_string()\n\t\t);\n\t\tassert_eq!(\n\t\t\tclean_hostname_for_tunnel(\"-cool-name-\"),\n\t\t\t\"cool-name\".to_string()\n\t\t);\n\t\tassert_eq!(\n\t\t\tclean_hostname_for_tunnel(\"cool!name with_chars\"),\n\t\t\t\"coolname-with-chars\".to_string()\n\t\t);\n\t\tassert_eq!(clean_hostname_for_tunnel(\"z\"), \"remote-machine\".to_string());\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/legal.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse crate::constants::IS_INTERACTIVE_CLI;\nuse crate::state::{LauncherPaths, PersistedState};\nuse crate::util::errors::{AnyError, CodeError};\nuse crate::util::input::prompt_yn;\nuse lazy_static::lazy_static;\nuse serde::{Deserialize, Serialize};\n\nlazy_static! {\n\tstatic ref LICENSE_TEXT: Option<Vec<String>> =\n\t\toption_env!(\"VSCODE_CLI_SERVER_LICENSE\").and_then(|s| serde_json::from_str(s).unwrap());\n}\n\nconst LICENSE_PROMPT: Option<&'static str> = option_env!(\"VSCODE_CLI_REMOTE_LICENSE_PROMPT\");\n\n#[derive(Clone, Default, Serialize, Deserialize)]\nstruct PersistedConsent {\n\tpub consented: Option<bool>,\n}\n\npub fn require_consent(\n\tpaths: &LauncherPaths,\n\taccept_server_license_terms: bool,\n) -> Result<(), AnyError> {\n\tmatch &*LICENSE_TEXT {\n\t\tSome(t) => println!(\"{}\", t.join(\"\\r\\n\")),\n\t\tNone => return Ok(()),\n\t}\n\n\tlet prompt = match LICENSE_PROMPT {\n\t\tSome(p) => p,\n\t\tNone => return Ok(()),\n\t};\n\n\tlet license: PersistedState<PersistedConsent> =\n\t\tPersistedState::new(paths.root().join(\"license_consent.json\"));\n\n\tlet mut load = license.load();\n\tif let Some(true) = load.consented {\n\t\treturn Ok(());\n\t}\n\n\tif accept_server_license_terms {\n\t\tload.consented = Some(true);\n\t} else if !*IS_INTERACTIVE_CLI {\n\t\treturn Err(CodeError::NeedsInteractiveLegalConsent.into());\n\t} else {\n\t\tmatch prompt_yn(prompt) {\n\t\t\tOk(true) => {\n\t\t\t\tload.consented = Some(true);\n\t\t\t}\n\t\t\tOk(false) => return Err(CodeError::DeniedLegalConset.into()),\n\t\t\tErr(_) => return Err(CodeError::NeedsInteractiveLegalConsent.into()),\n\t\t}\n\t}\n\n\tlicense.save(load)?;\n\tOk(())\n}\n"
  },
  {
    "path": "cli/src/tunnels/local_forwarding.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tcollections::HashMap,\n\tops::{Index, IndexMut},\n\tsync::{Arc, Mutex},\n};\n\nuse tokio::{\n\tpin,\n\tsync::{mpsc, watch},\n};\n\nuse crate::{\n\tasync_pipe::{socket_stream_split, AsyncPipe},\n\tjson_rpc::{new_json_rpc, start_json_rpc},\n\tlog,\n\tsingleton::SingletonServer,\n\tutil::{errors::CodeError, sync::Barrier},\n};\n\nuse super::{\n\tdev_tunnels::ActiveTunnel,\n\tprotocol::{\n\t\tself,\n\t\tforward_singleton::{PortList, SetPortsResponse},\n\t\tPortPrivacy, PortProtocol,\n\t},\n\tshutdown_signal::ShutdownSignal,\n};\n\n#[derive(Default, Clone)]\nstruct PortCount {\n\tpublic: u32,\n\tprivate: u32,\n}\n\nimpl Index<PortPrivacy> for PortCount {\n\ttype Output = u32;\n\n\tfn index(&self, privacy: PortPrivacy) -> &Self::Output {\n\t\tmatch privacy {\n\t\t\tPortPrivacy::Public => &self.public,\n\t\t\tPortPrivacy::Private => &self.private,\n\t\t}\n\t}\n}\n\nimpl IndexMut<PortPrivacy> for PortCount {\n\tfn index_mut(&mut self, privacy: PortPrivacy) -> &mut Self::Output {\n\t\tmatch privacy {\n\t\t\tPortPrivacy::Public => &mut self.public,\n\t\t\tPortPrivacy::Private => &mut self.private,\n\t\t}\n\t}\n}\n\nimpl PortCount {\n\tfn is_empty(&self) -> bool {\n\t\tself.public == 0 && self.private == 0\n\t}\n\n\tfn primary_privacy(&self) -> PortPrivacy {\n\t\tif self.public > 0 {\n\t\t\tPortPrivacy::Public\n\t\t} else {\n\t\t\tPortPrivacy::Private\n\t\t}\n\t}\n}\n#[derive(Clone)]\nstruct PortMapRec {\n\tcount: PortCount,\n\tprotocol: PortProtocol,\n}\n\ntype PortMap = HashMap<u16, PortMapRec>;\n\n/// The PortForwardingHandle is given out to multiple consumers to allow\n/// them to set_ports that they want to be forwarded.\nstruct PortForwardingSender {\n\t/// Todo: when `SyncUnsafeCell` is no longer nightly, we can use it here with\n\t/// the following comment:\n\t///\n\t/// SyncUnsafeCell is used and safe here because PortForwardingSender is used\n\t/// exclusively in synchronous dispatch *and* we create a new sender in the\n\t/// context for each connection, in `serve_singleton_rpc`.\n\t///\n\t/// If PortForwardingSender is ever used in a different context, this should\n\t/// be refactored, e.g. to use locks or `&mut self` in set_ports`\n\t///\n\t/// see https://doc.rust-lang.org/stable/std/cell/struct.SyncUnsafeCell.html\n\tcurrent: Mutex<PortList>,\n\tsender: Arc<Mutex<watch::Sender<PortMap>>>,\n}\n\nimpl PortForwardingSender {\n\tpub fn set_ports(&self, ports: PortList) {\n\t\tlet mut current = self.current.lock().unwrap();\n\t\tself.sender.lock().unwrap().send_modify(|v| {\n\t\t\tfor p in current.iter() {\n\t\t\t\tif !ports.contains(p) {\n\t\t\t\t\tlet n = v.get_mut(&p.number).expect(\"expected port in map\");\n\t\t\t\t\tn.count[p.privacy] -= 1;\n\t\t\t\t\tif n.count.is_empty() {\n\t\t\t\t\t\tv.remove(&p.number);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor p in ports.iter() {\n\t\t\t\tif !current.contains(p) {\n\t\t\t\t\tmatch v.get_mut(&p.number) {\n\t\t\t\t\t\tSome(n) => {\n\t\t\t\t\t\t\tn.count[p.privacy] += 1;\n\t\t\t\t\t\t\tn.protocol = p.protocol;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tNone => {\n\t\t\t\t\t\t\tlet mut count = PortCount::default();\n\t\t\t\t\t\t\tcount[p.privacy] += 1;\n\t\t\t\t\t\t\tv.insert(\n\t\t\t\t\t\t\t\tp.number,\n\t\t\t\t\t\t\t\tPortMapRec {\n\t\t\t\t\t\t\t\t\tcount,\n\t\t\t\t\t\t\t\t\tprotocol: p.protocol,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent.splice(.., ports);\n\t\t});\n\t}\n}\n\nimpl Clone for PortForwardingSender {\n\tfn clone(&self) -> Self {\n\t\tSelf {\n\t\t\tcurrent: Mutex::new(vec![]),\n\t\t\tsender: self.sender.clone(),\n\t\t}\n\t}\n}\n\nimpl Drop for PortForwardingSender {\n\tfn drop(&mut self) {\n\t\tself.set_ports(vec![]);\n\t}\n}\n\nstruct PortForwardingReceiver {\n\treceiver: watch::Receiver<PortMap>,\n}\n\nimpl PortForwardingReceiver {\n\tpub fn new() -> (PortForwardingSender, Self) {\n\t\tlet (sender, receiver) = watch::channel(HashMap::new());\n\t\tlet handle = PortForwardingSender {\n\t\t\tcurrent: Mutex::new(vec![]),\n\t\t\tsender: Arc::new(Mutex::new(sender)),\n\t\t};\n\n\t\tlet tracker = Self { receiver };\n\n\t\t(handle, tracker)\n\t}\n\n\t/// Applies all changes from PortForwardingHandles to the tunnel.\n\tpub async fn apply_to(&mut self, log: log::Logger, tunnel: Arc<ActiveTunnel>) {\n\t\tlet mut current: PortMap = HashMap::new();\n\t\twhile self.receiver.changed().await.is_ok() {\n\t\t\tlet next = self.receiver.borrow().clone();\n\n\t\t\tfor (port, rec) in current.iter() {\n\t\t\t\tlet privacy = rec.count.primary_privacy();\n\t\t\t\tif !matches!(next.get(port), Some(n) if n.count.primary_privacy() == privacy) {\n\t\t\t\t\tmatch tunnel.remove_port(*port).await {\n\t\t\t\t\t\tOk(_) => info!(\n\t\t\t\t\t\t\tlog,\n\t\t\t\t\t\t\t\"stopped forwarding {} port {} at {:?}\", rec.protocol, *port, privacy\n\t\t\t\t\t\t),\n\t\t\t\t\t\tErr(e) => error!(\n\t\t\t\t\t\t\tlog,\n\t\t\t\t\t\t\t\"failed to stop forwarding {} port {}: {}\", rec.protocol, port, e\n\t\t\t\t\t\t),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (port, rec) in next.iter() {\n\t\t\t\tlet privacy = rec.count.primary_privacy();\n\t\t\t\tif !matches!(current.get(port), Some(n) if n.count.primary_privacy() == privacy) {\n\t\t\t\t\tmatch tunnel.add_port_tcp(*port, privacy, rec.protocol).await {\n\t\t\t\t\t\tOk(_) => info!(\n\t\t\t\t\t\t\tlog,\n\t\t\t\t\t\t\t\"forwarding {} port {} at {:?}\", rec.protocol, port, privacy\n\t\t\t\t\t\t),\n\t\t\t\t\t\tErr(e) => error!(\n\t\t\t\t\t\t\tlog,\n\t\t\t\t\t\t\t\"failed to forward {} port {}: {}\", rec.protocol, port, e\n\t\t\t\t\t\t),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent = next;\n\t\t}\n\t}\n}\n\npub struct SingletonClientArgs {\n\tpub log: log::Logger,\n\tpub stream: AsyncPipe,\n\tpub shutdown: Barrier<ShutdownSignal>,\n\tpub port_requests: watch::Receiver<PortList>,\n}\n\n#[derive(Clone)]\nstruct SingletonServerContext {\n\tlog: log::Logger,\n\thandle: PortForwardingSender,\n\ttunnel: Arc<ActiveTunnel>,\n}\n\n/// Serves a client singleton for port forwarding.\npub async fn client(args: SingletonClientArgs) -> Result<(), std::io::Error> {\n\tlet mut rpc = new_json_rpc();\n\tlet (msg_tx, msg_rx) = mpsc::unbounded_channel();\n\tlet SingletonClientArgs {\n\t\tlog,\n\t\tshutdown,\n\t\tstream,\n\t\tmut port_requests,\n\t} = args;\n\n\tdebug!(\n\t\tlog,\n\t\t\"An existing port forwarding process is running on this machine, connecting to it...\"\n\t);\n\n\tlet caller = rpc.get_caller(msg_tx);\n\tlet rpc = rpc.methods(()).build(log.clone());\n\tlet (read, write) = socket_stream_split(stream);\n\n\tlet serve = start_json_rpc(rpc, read, write, msg_rx, shutdown);\n\tlet forward = async move {\n\t\twhile port_requests.changed().await.is_ok() {\n\t\t\tlet ports = port_requests.borrow().clone();\n\t\t\tlet r = caller\n\t\t\t\t.call::<_, _, protocol::forward_singleton::SetPortsResponse>(\n\t\t\t\t\tprotocol::forward_singleton::METHOD_SET_PORTS,\n\t\t\t\t\tprotocol::forward_singleton::SetPortsParams { ports },\n\t\t\t\t)\n\t\t\t\t.await\n\t\t\t\t.unwrap();\n\n\t\t\tmatch r {\n\t\t\t\tErr(e) => error!(log, \"failed to set ports: {:?}\", e),\n\t\t\t\tOk(r) => print_forwarding_addr(&r),\n\t\t\t};\n\t\t}\n\t};\n\n\ttokio::select! {\n\t\tr = serve => r.map(|_| ()),\n\t\t_ = forward => Ok(()),\n\t}\n}\n\n/// Serves a port-forwarding singleton.\npub async fn server(\n\tlog: log::Logger,\n\ttunnel: ActiveTunnel,\n\tserver: SingletonServer,\n\tmut port_requests: watch::Receiver<PortList>,\n\tshutdown_rx: Barrier<ShutdownSignal>,\n) -> Result<(), CodeError> {\n\tlet tunnel = Arc::new(tunnel);\n\tlet (forward_tx, mut forward_rx) = PortForwardingReceiver::new();\n\n\tlet forward_own_tunnel = tunnel.clone();\n\tlet forward_own_tx = forward_tx.clone();\n\tlet forward_own = async move {\n\t\twhile port_requests.changed().await.is_ok() {\n\t\t\tforward_own_tx.set_ports(port_requests.borrow().clone());\n\t\t\tprint_forwarding_addr(&SetPortsResponse {\n\t\t\t\tport_format: forward_own_tunnel.get_port_format().ok(),\n\t\t\t});\n\t\t}\n\t};\n\n\ttokio::select! {\n\t\t_ = forward_own => Ok(()),\n\t\t_ = forward_rx.apply_to(log.clone(), tunnel.clone()) => Ok(()),\n\t\tr = serve_singleton_rpc(server, log, tunnel, forward_tx, shutdown_rx) => r,\n\t}\n}\n\nasync fn serve_singleton_rpc(\n\tmut server: SingletonServer,\n\tlog: log::Logger,\n\ttunnel: Arc<ActiveTunnel>,\n\tforward_tx: PortForwardingSender,\n\tshutdown_rx: Barrier<ShutdownSignal>,\n) -> Result<(), CodeError> {\n\tlet mut own_shutdown = shutdown_rx.clone();\n\tlet shutdown_fut = own_shutdown.wait();\n\tpin!(shutdown_fut);\n\n\tloop {\n\t\tlet cnx = tokio::select! {\n\t\t\tc = server.accept() => c?,\n\t\t\t_ = &mut shutdown_fut => return Ok(()),\n\t\t};\n\n\t\tlet (read, write) = socket_stream_split(cnx);\n\t\tlet shutdown_rx = shutdown_rx.clone();\n\n\t\tlet handle = forward_tx.clone();\n\t\tlet log = log.clone();\n\t\tlet tunnel = tunnel.clone();\n\t\ttokio::spawn(async move {\n\t\t\t// we make an rpc for the connection instead of re-using a dispatcher\n\t\t\t// so that we can have the \"handle\" drop when the connection drops.\n\t\t\tlet rpc = new_json_rpc();\n\t\t\tlet mut rpc = rpc.methods(SingletonServerContext {\n\t\t\t\tlog: log.clone(),\n\t\t\t\thandle,\n\t\t\t\ttunnel,\n\t\t\t});\n\n\t\t\trpc.register_sync(\n\t\t\t\tprotocol::forward_singleton::METHOD_SET_PORTS,\n\t\t\t\t|p: protocol::forward_singleton::SetPortsParams, ctx| {\n\t\t\t\t\tinfo!(ctx.log, \"client setting ports to {:?}\", p.ports);\n\t\t\t\t\tctx.handle.set_ports(p.ports);\n\t\t\t\t\tOk(SetPortsResponse {\n\t\t\t\t\t\tport_format: ctx.tunnel.get_port_format().ok(),\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tlet _ = start_json_rpc(rpc.build(log), read, write, (), shutdown_rx).await;\n\t\t});\n\t}\n}\n\nfn print_forwarding_addr(r: &SetPortsResponse) {\n\teprintln!(\"{}\\n\", serde_json::to_string(r).unwrap());\n}\n"
  },
  {
    "path": "cli/src/tunnels/nosleep.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n#[cfg(target_os = \"windows\")]\npub type SleepInhibitor = super::nosleep_windows::SleepInhibitor;\n\n#[cfg(target_os = \"linux\")]\npub type SleepInhibitor = super::nosleep_linux::SleepInhibitor;\n\n#[cfg(target_os = \"macos\")]\npub type SleepInhibitor = super::nosleep_macos::SleepInhibitor;\n"
  },
  {
    "path": "cli/src/tunnels/nosleep_linux.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse zbus::{dbus_proxy, Connection};\n\nuse crate::{\n\tconstants::APPLICATION_NAME,\n\tutil::errors::{wrap, AnyError},\n};\n\n/// An basically undocumented API, but seems widely implemented, and is what\n/// browsers use for sleep inhibition. The downside is that it also *may*\n/// disable the screensaver. A much better and more granular API is available\n/// on `org.freedesktop.login1.Manager`, but this requires administrative\n/// permission to request inhibition, which is not possible here.\n///\n/// See https://source.chromium.org/chromium/chromium/src/+/main:services/device/wake_lock/power_save_blocker/power_save_blocker_linux.cc;l=54;drc=2e85357a8b76996981cc6f783853a49df2cedc3a\n#[dbus_proxy(\n\tinterface = \"org.freedesktop.PowerManagement.Inhibit\",\n\tgen_blocking = false,\n\tdefault_service = \"org.freedesktop.PowerManagement.Inhibit\",\n\tdefault_path = \"/org/freedesktop/PowerManagement/Inhibit\"\n)]\ntrait PMInhibitor {\n\t#[dbus_proxy(name = \"Inhibit\")]\n\tfn inhibit(&self, what: &str, why: &str) -> zbus::Result<u32>;\n}\n\n/// A slightly better documented version which seems commonly used.\n#[dbus_proxy(\n\tinterface = \"org.freedesktop.ScreenSaver\",\n\tgen_blocking = false,\n\tdefault_service = \"org.freedesktop.ScreenSaver\",\n\tdefault_path = \"/org/freedesktop/ScreenSaver\"\n)]\ntrait ScreenSaver {\n\t#[dbus_proxy(name = \"Inhibit\")]\n\tfn inhibit(&self, what: &str, why: &str) -> zbus::Result<u32>;\n}\n\npub struct SleepInhibitor {\n\t_connection: Connection, // Inhibition is released when the connection is closed\n}\n\nimpl SleepInhibitor {\n\tpub async fn new() -> Result<Self, AnyError> {\n\t\tlet connection = Connection::session()\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error creating dbus session\"))?;\n\n\t\tmacro_rules! try_inhibit {\n\t\t\t($proxy:ident) => {\n\t\t\t\tmatch $proxy::new(&connection).await {\n\t\t\t\t\tOk(proxy) => proxy.inhibit(APPLICATION_NAME, \"running tunnel\").await,\n\t\t\t\t\tErr(e) => Err(e),\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif let Err(e1) = try_inhibit!(PMInhibitorProxy) {\n\t\t\tif let Err(e2) = try_inhibit!(ScreenSaverProxy) {\n\t\t\t\treturn Err(wrap(\n\t\t\t\t\te2,\n\t\t\t\t\tformat!(\n\t\t\t\t\t\t\"error requesting sleep inhibition, pminhibitor gave {e1}, screensaver gave\"\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.into());\n\t\t\t}\n\t\t}\n\n\t\tOk(SleepInhibitor {\n\t\t\t_connection: connection,\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/nosleep_macos.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::io;\n\nuse core_foundation::base::TCFType;\nuse core_foundation::string::{CFString, CFStringRef};\nuse libc::c_int;\n\nuse crate::constants::TUNNEL_ACTIVITY_NAME;\n\nextern \"C\" {\n\tpub fn IOPMAssertionCreateWithName(\n\t\tassertion_type: CFStringRef,\n\t\tassertion_level: u32,\n\t\tassertion_name: CFStringRef,\n\t\tassertion_id: &mut u32,\n\t) -> c_int;\n\n\tpub fn IOPMAssertionRelease(assertion_id: u32) -> c_int;\n}\n\nconst NUM_ASSERTIONS: usize = 2;\n\nconst ASSERTIONS: [&str; NUM_ASSERTIONS] = [\"PreventUserIdleSystemSleep\", \"PreventSystemSleep\"];\n\nstruct Assertion(u32);\n\nimpl Assertion {\n\tpub fn make(typ: &CFString, name: &CFString) -> io::Result<Self> {\n\t\tlet mut assertion_id = 0;\n\t\tlet result = unsafe {\n\t\t\tIOPMAssertionCreateWithName(\n\t\t\t\ttyp.as_concrete_TypeRef(),\n\t\t\t\t255,\n\t\t\t\tname.as_concrete_TypeRef(),\n\t\t\t\t&mut assertion_id,\n\t\t\t)\n\t\t};\n\n\t\tif result != 0 {\n\t\t\tErr(io::Error::last_os_error())\n\t\t} else {\n\t\t\tOk(Self(assertion_id))\n\t\t}\n\t}\n}\n\nimpl Drop for Assertion {\n\tfn drop(&mut self) {\n\t\tunsafe {\n\t\t\tIOPMAssertionRelease(self.0);\n\t\t}\n\t}\n}\n\npub struct SleepInhibitor {\n\t_assertions: Vec<Assertion>,\n}\n\nimpl SleepInhibitor {\n\tpub async fn new() -> io::Result<Self> {\n\t\tlet mut assertions = Vec::with_capacity(NUM_ASSERTIONS);\n\t\tlet assertion_name = CFString::from_static_string(TUNNEL_ACTIVITY_NAME);\n\t\tfor typ in ASSERTIONS {\n\t\t\tassertions.push(Assertion::make(\n\t\t\t\t&CFString::from_static_string(typ),\n\t\t\t\t&assertion_name,\n\t\t\t)?);\n\t\t}\n\n\t\tOk(Self {\n\t\t\t_assertions: assertions,\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/nosleep_windows.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::io;\n\nuse winapi::{\n\tctypes::c_void,\n\tum::{\n\t\thandleapi::CloseHandle,\n\t\tminwinbase::REASON_CONTEXT,\n\t\twinbase::{PowerClearRequest, PowerCreateRequest, PowerSetRequest},\n\t\twinnt::{\n\t\t\tPowerRequestSystemRequired, POWER_REQUEST_CONTEXT_SIMPLE_STRING,\n\t\t\tPOWER_REQUEST_CONTEXT_VERSION, POWER_REQUEST_TYPE,\n\t\t},\n\t},\n};\n\nuse crate::constants::TUNNEL_ACTIVITY_NAME;\n\nstruct Request(*mut c_void);\n\nimpl Request {\n\tpub fn new() -> io::Result<Self> {\n\t\tlet mut reason: Vec<u16> = TUNNEL_ACTIVITY_NAME.encode_utf16().chain([0u16]).collect();\n\t\tlet mut context = REASON_CONTEXT {\n\t\t\tVersion: POWER_REQUEST_CONTEXT_VERSION,\n\t\t\tFlags: POWER_REQUEST_CONTEXT_SIMPLE_STRING,\n\t\t\tReason: unsafe { std::mem::zeroed() },\n\t\t};\n\t\tunsafe { *context.Reason.SimpleReasonString_mut() = reason.as_mut_ptr() };\n\n\t\tlet request = unsafe { PowerCreateRequest(&mut context) };\n\t\tif request.is_null() {\n\t\t\treturn Err(io::Error::last_os_error());\n\t\t}\n\n\t\tOk(Self(request))\n\t}\n\n\tpub fn set(&self, request_type: POWER_REQUEST_TYPE) -> io::Result<()> {\n\t\tlet result = unsafe { PowerSetRequest(self.0, request_type) };\n\t\tif result == 0 {\n\t\t\treturn Err(io::Error::last_os_error());\n\t\t}\n\n\t\tOk(())\n\t}\n}\n\nimpl Drop for Request {\n\tfn drop(&mut self) {\n\t\tunsafe {\n\t\t\tCloseHandle(self.0);\n\t\t}\n\t}\n}\n\npub struct SleepInhibitor {\n\trequest: Request,\n}\n\nimpl SleepInhibitor {\n\tpub async fn new() -> io::Result<Self> {\n\t\tlet request = Request::new()?;\n\t\trequest.set(PowerRequestSystemRequired)?;\n\t\tOk(Self { request })\n\t}\n}\n\nimpl Drop for SleepInhibitor {\n\tfn drop(&mut self) {\n\t\tunsafe {\n\t\t\tPowerClearRequest(self.request.0, PowerRequestSystemRequired);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/paths.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tfs::{read_dir, read_to_string, remove_dir_all, write},\n\tpath::PathBuf,\n};\n\nuse serde::{Deserialize, Serialize};\n\nuse crate::{\n\toptions::{self, Quality},\n\tstate::LauncherPaths,\n\tutil::{\n\t\terrors::{wrap, AnyError, WrappedError},\n\t\tmachine,\n\t},\n};\n\npub const SERVER_FOLDER_NAME: &str = \"server\";\n\npub struct ServerPaths {\n\t// Directory into which the server is downloaded\n\tpub server_dir: PathBuf,\n\t// Executable path, within the server_id\n\tpub executable: PathBuf,\n\t// File where logs for the server should be written.\n\tpub logfile: PathBuf,\n\t// File where the process ID for the server should be written.\n\tpub pidfile: PathBuf,\n}\n\nimpl ServerPaths {\n\t// Queries the system to determine the process ID of the running server.\n\t// Returns the process ID, if the server is running.\n\tpub fn get_running_pid(&self) -> Option<u32> {\n\t\tif let Some(pid) = self.read_pid() {\n\t\t\treturn match machine::process_at_path_exists(pid, &self.executable) {\n\t\t\t\ttrue => Some(pid),\n\t\t\t\tfalse => None,\n\t\t\t};\n\t\t}\n\n\t\tif let Some(pid) = machine::find_running_process(&self.executable) {\n\t\t\t// attempt to backfill process ID:\n\t\t\tself.write_pid(pid).ok();\n\t\t\treturn Some(pid);\n\t\t}\n\n\t\tNone\n\t}\n\n\t/// Delete the server directory\n\tpub fn delete(&self) -> Result<(), WrappedError> {\n\t\tremove_dir_all(&self.server_dir).map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\"error deleting server dir {}\", self.server_dir.display()),\n\t\t\t)\n\t\t})\n\t}\n\n\t// VS Code Server pid\n\tpub fn write_pid(&self, pid: u32) -> Result<(), WrappedError> {\n\t\twrite(&self.pidfile, format!(\"{pid}\")).map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\"error writing process id into {}\", self.pidfile.display()),\n\t\t\t)\n\t\t})\n\t}\n\n\tfn read_pid(&self) -> Option<u32> {\n\t\tread_to_string(&self.pidfile)\n\t\t\t.ok()\n\t\t\t.and_then(|s| s.parse::<u32>().ok())\n\t}\n}\n\n#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)]\npub struct InstalledServer {\n\tpub quality: options::Quality,\n\tpub commit: String,\n\tpub headless: bool,\n}\n\nimpl InstalledServer {\n\t/// Gets path information about where a specific server should be stored.\n\tpub fn server_paths(&self, p: &LauncherPaths) -> ServerPaths {\n\t\tlet server_dir = self.get_install_folder(p);\n\t\tServerPaths {\n\t\t\t// allow using the OSS server in development via an override\n\t\t\texecutable: if let Some(p) = option_env!(\"VSCODE_CLI_OVERRIDE_SERVER_PATH\") {\n\t\t\t\tPathBuf::from(p)\n\t\t\t} else {\n\t\t\t\tserver_dir\n\t\t\t\t\t.join(SERVER_FOLDER_NAME)\n\t\t\t\t\t.join(\"bin\")\n\t\t\t\t\t.join(self.quality.server_entrypoint())\n\t\t\t},\n\t\t\tlogfile: server_dir.join(\"log.txt\"),\n\t\t\tpidfile: server_dir.join(\"pid.txt\"),\n\t\t\tserver_dir,\n\t\t}\n\t}\n\n\tfn get_install_folder(&self, p: &LauncherPaths) -> PathBuf {\n\t\tp.server_cache.path().join(if !self.headless {\n\t\t\tformat!(\"{}-web\", get_server_folder_name(self.quality, &self.commit))\n\t\t} else {\n\t\t\tget_server_folder_name(self.quality, &self.commit)\n\t\t})\n\t}\n}\n\n/// Prunes servers not currently running, and returns the deleted servers.\npub fn prune_stopped_servers(launcher_paths: &LauncherPaths) -> Result<Vec<ServerPaths>, AnyError> {\n\tget_all_servers(launcher_paths)\n\t\t.into_iter()\n\t\t.map(|s| s.server_paths(launcher_paths))\n\t\t.filter(|s| s.get_running_pid().is_none())\n\t\t.map(|s| s.delete().map(|_| s))\n\t\t.collect::<Result<_, _>>()\n\t\t.map_err(AnyError::from)\n}\n\n// Gets a list of all servers which look like they might be running.\npub fn get_all_servers(lp: &LauncherPaths) -> Vec<InstalledServer> {\n\tlet mut servers: Vec<InstalledServer> = vec![];\n\tif let Ok(children) = read_dir(lp.server_cache.path()) {\n\t\tfor child in children.flatten() {\n\t\t\tlet fname = child.file_name();\n\t\t\tlet fname = fname.to_string_lossy();\n\t\t\tlet (quality, commit) = match fname.split_once('-') {\n\t\t\t\tSome(r) => r,\n\t\t\t\tNone => continue,\n\t\t\t};\n\n\t\t\tlet quality = match options::Quality::try_from(quality) {\n\t\t\t\tOk(q) => q,\n\t\t\t\tErr(_) => continue,\n\t\t\t};\n\n\t\t\tservers.push(InstalledServer {\n\t\t\t\tquality,\n\t\t\t\tcommit: commit.to_string(),\n\t\t\t\theadless: true,\n\t\t\t});\n\t\t}\n\t}\n\n\tservers\n}\n\npub fn get_server_folder_name(quality: Quality, commit: &str) -> String {\n\tformat!(\"{quality}-{commit}\")\n}\n"
  },
  {
    "path": "cli/src/tunnels/port_forwarder.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::collections::HashSet;\n\nuse tokio::sync::{mpsc, oneshot};\n\nuse crate::{\n\tconstants::CONTROL_PORT,\n\tutil::errors::{AnyError, CannotForwardControlPort, ServerHasClosed},\n};\n\nuse super::{\n\tdev_tunnels::ActiveTunnel,\n\tprotocol::{PortPrivacy, PortProtocol},\n};\n\npub enum PortForwardingRec {\n\tForward(u16, PortPrivacy, oneshot::Sender<Result<String, AnyError>>),\n\tUnforward(u16, oneshot::Sender<Result<(), AnyError>>),\n}\n\n/// Provides a port forwarding service for connected clients. Clients can make\n/// requests on it, which are (and *must be*) processed by calling the `.process()`\n/// method on the forwarder.\npub struct PortForwardingProcessor {\n\ttx: mpsc::Sender<PortForwardingRec>,\n\trx: mpsc::Receiver<PortForwardingRec>,\n\tforwarded: HashSet<u16>,\n}\n\nimpl PortForwardingProcessor {\n\tpub fn new() -> Self {\n\t\tlet (tx, rx) = mpsc::channel(8);\n\t\tSelf {\n\t\t\ttx,\n\t\t\trx,\n\t\t\tforwarded: HashSet::new(),\n\t\t}\n\t}\n\n\t/// Gets a handle that can be passed off to consumers of port forwarding.\n\tpub fn handle(&self) -> PortForwarding {\n\t\tPortForwarding {\n\t\t\ttx: self.tx.clone(),\n\t\t}\n\t}\n\n\t/// Receives port forwarding requests. Consumers MUST call `process()`\n\t/// with the received requests.\n\tpub async fn recv(&mut self) -> Option<PortForwardingRec> {\n\t\tself.rx.recv().await\n\t}\n\n\t/// Processes the incoming forwarding request.\n\tpub async fn process(&mut self, req: PortForwardingRec, tunnel: &mut ActiveTunnel) {\n\t\tmatch req {\n\t\t\tPortForwardingRec::Forward(port, privacy, tx) => {\n\t\t\t\ttx.send(self.process_forward(port, privacy, tunnel).await)\n\t\t\t\t\t.ok();\n\t\t\t}\n\t\t\tPortForwardingRec::Unforward(port, tx) => {\n\t\t\t\ttx.send(self.process_unforward(port, tunnel).await).ok();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync fn process_unforward(\n\t\t&mut self,\n\t\tport: u16,\n\t\ttunnel: &mut ActiveTunnel,\n\t) -> Result<(), AnyError> {\n\t\tif port == CONTROL_PORT {\n\t\t\treturn Err(CannotForwardControlPort().into());\n\t\t}\n\n\t\ttunnel.remove_port(port).await?;\n\t\tself.forwarded.remove(&port);\n\t\tOk(())\n\t}\n\n\tasync fn process_forward(\n\t\t&mut self,\n\t\tport: u16,\n\t\tprivacy: PortPrivacy,\n\t\ttunnel: &mut ActiveTunnel,\n\t) -> Result<String, AnyError> {\n\t\tif port == CONTROL_PORT {\n\t\t\treturn Err(CannotForwardControlPort().into());\n\t\t}\n\n\t\tif !self.forwarded.contains(&port) {\n\t\t\ttunnel\n\t\t\t\t.add_port_tcp(port, privacy, PortProtocol::Auto)\n\t\t\t\t.await?;\n\t\t\tself.forwarded.insert(port);\n\t\t}\n\n\t\ttunnel.get_port_uri(port)\n\t}\n}\n\n#[derive(Clone)]\npub struct PortForwarding {\n\ttx: mpsc::Sender<PortForwardingRec>,\n}\n\nimpl PortForwarding {\n\tpub async fn forward(&self, port: u16, privacy: PortPrivacy) -> Result<String, AnyError> {\n\t\tlet (tx, rx) = oneshot::channel();\n\t\tlet req = PortForwardingRec::Forward(port, privacy, tx);\n\n\t\tif self.tx.send(req).await.is_err() {\n\t\t\treturn Err(ServerHasClosed().into());\n\t\t}\n\n\t\tmatch rx.await {\n\t\t\tOk(r) => r,\n\t\t\tErr(_) => Err(ServerHasClosed().into()),\n\t\t}\n\t}\n\n\tpub async fn unforward(&self, port: u16) -> Result<(), AnyError> {\n\t\tlet (tx, rx) = oneshot::channel();\n\t\tlet req = PortForwardingRec::Unforward(port, tx);\n\n\t\tif self.tx.send(req).await.is_err() {\n\t\t\treturn Err(ServerHasClosed().into());\n\t\t}\n\n\t\tmatch rx.await {\n\t\t\tOk(r) => r,\n\t\t\tErr(_) => Err(ServerHasClosed().into()),\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/protocol.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse std::collections::HashMap;\n\nuse crate::{\n\tconstants::{PROTOCOL_VERSION, VSCODE_CLI_VERSION},\n\toptions::Quality,\n\tupdate_service::Platform,\n};\nuse serde::{Deserialize, Serialize};\n\n#[derive(Serialize, Debug)]\n#[serde(tag = \"method\", content = \"params\", rename_all = \"camelCase\")]\n#[allow(non_camel_case_types)]\npub enum ClientRequestMethod<'a> {\n\tservermsg(RefServerMessageParams<'a>),\n\tserverclose(ServerClosedParams),\n\tserverlog(ServerLog<'a>),\n\tmakehttpreq(HttpRequestParams<'a>),\n\tversion(VersionResponse),\n}\n\n#[derive(Deserialize, Debug)]\npub struct HttpBodyParams {\n\t#[serde(with = \"serde_bytes\")]\n\tpub segment: Vec<u8>,\n\tpub complete: bool,\n\tpub req_id: u32,\n}\n\n#[derive(Serialize, Debug)]\npub struct HttpRequestParams<'a> {\n\tpub url: &'a str,\n\tpub method: &'static str,\n\tpub req_id: u32,\n}\n\n#[derive(Deserialize, Debug)]\npub struct HttpHeadersParams {\n\tpub status_code: u16,\n\tpub headers: Vec<(String, String)>,\n\tpub req_id: u32,\n}\n\n#[derive(Deserialize, Debug)]\npub struct ForwardParams {\n\tpub port: u16,\n\t#[serde(default)]\n\tpub public: bool,\n}\n\n#[derive(Deserialize, Debug)]\npub struct UnforwardParams {\n\tpub port: u16,\n}\n\n#[derive(Serialize)]\npub struct ForwardResult {\n\tpub uri: String,\n}\n\n#[derive(Deserialize, Debug)]\npub struct ServeParams {\n\tpub socket_id: u16,\n\tpub commit_id: Option<String>,\n\tpub quality: Quality,\n\tpub extensions: Vec<String>,\n\t/// Optional preferred connection token.\n\t#[serde(default)]\n\tpub connection_token: Option<String>,\n\t#[serde(default)]\n\tpub use_local_download: bool,\n\t/// If true, the client and server should gzip servermsg's sent in either direction.\n\t#[serde(default)]\n\tpub compress: bool,\n}\n\n#[derive(Deserialize, Serialize, Debug)]\npub struct EmptyObject {}\n\n#[derive(Serialize, Deserialize, Debug)]\npub struct UpdateParams {\n\tpub do_update: bool,\n}\n\n#[derive(Deserialize, Debug)]\npub struct ServerMessageParams {\n\tpub i: u16,\n\t#[serde(with = \"serde_bytes\")]\n\tpub body: Vec<u8>,\n}\n\n#[derive(Serialize, Debug)]\npub struct ServerClosedParams {\n\tpub i: u16,\n}\n\n#[derive(Serialize, Debug)]\npub struct RefServerMessageParams<'a> {\n\tpub i: u16,\n\t#[serde(with = \"serde_bytes\")]\n\tpub body: &'a [u8],\n}\n\n#[derive(Serialize)]\npub struct UpdateResult {\n\tpub up_to_date: bool,\n\tpub did_update: bool,\n}\n\n#[derive(Serialize, Debug)]\npub struct ToClientRequest<'a> {\n\tpub id: Option<u32>,\n\t#[serde(flatten)]\n\tpub params: ClientRequestMethod<'a>,\n}\n\n#[derive(Debug, Default, Serialize)]\npub struct ServerLog<'a> {\n\tpub line: &'a str,\n\tpub level: u8,\n}\n\n#[derive(Serialize)]\npub struct GetHostnameResponse {\n\tpub value: String,\n}\n\n#[derive(Serialize)]\npub struct GetEnvResponse {\n\tpub env: HashMap<String, String>,\n\tpub os_platform: &'static str,\n\tpub os_release: String,\n}\n\n/// Method: `kill`. Sends a generic, platform-specific kill command to the process.\n#[derive(Deserialize)]\npub struct SysKillRequest {\n\tpub pid: u32,\n}\n\n#[derive(Serialize)]\npub struct SysKillResponse {\n\tpub success: bool,\n}\n\n/// Methods: `fs_read`/`fs_write`/`fs_rm`/`fs_mkdirp`/`fs_stat`\n///  - fs_read: reads into a stream returned from the method,\n///  - fs_write: writes from a stream passed to the method.\n///  - fs_rm: recursively removes the file\n///  - fs_mkdirp: recursively creates the directory\n///  - fs_readdir: reads directory contents\n///  - fs_stat: stats the given path\n///  - fs_connect: connect to the given unix or named pipe socket, streaming\n///    data in and out from the method's stream.\n#[derive(Deserialize)]\npub struct FsSinglePathRequest {\n\tpub path: String,\n}\n\n#[derive(Serialize)]\npub enum FsFileKind {\n\t#[serde(rename = \"dir\")]\n\tDirectory,\n\t#[serde(rename = \"file\")]\n\tFile,\n\t#[serde(rename = \"link\")]\n\tLink,\n}\n\nimpl From<std::fs::FileType> for FsFileKind {\n\tfn from(kind: std::fs::FileType) -> Self {\n\t\tif kind.is_dir() {\n\t\t\tSelf::Directory\n\t\t} else if kind.is_file() {\n\t\t\tSelf::File\n\t\t} else if kind.is_symlink() {\n\t\t\tSelf::Link\n\t\t} else {\n\t\t\tunreachable!()\n\t\t}\n\t}\n}\n\n#[derive(Serialize, Default)]\npub struct FsStatResponse {\n\tpub exists: bool,\n\tpub size: Option<u64>,\n\t#[serde(rename = \"type\")]\n\tpub kind: Option<FsFileKind>,\n}\n\n#[derive(Serialize)]\npub struct FsReadDirResponse {\n\tpub contents: Vec<FsReadDirEntry>,\n}\n\n#[derive(Serialize)]\npub struct FsReadDirEntry {\n\tpub name: String,\n\t#[serde(rename = \"type\")]\n\tpub kind: Option<FsFileKind>,\n}\n\n/// Method: `fs_reaname`. Renames a file.\n#[derive(Deserialize)]\npub struct FsRenameRequest {\n\tpub from_path: String,\n\tpub to_path: String,\n}\n\n/// Method: `net_connect`. Connects to a port.\n#[derive(Deserialize)]\npub struct NetConnectRequest {\n\tpub port: u16,\n\tpub host: String,\n}\n\n#[derive(Deserialize, Debug)]\npub struct CallServerHttpParams {\n\tpub path: String,\n\tpub method: String,\n\tpub headers: HashMap<String, String>,\n\tpub body: Option<Vec<u8>>,\n}\n\n#[derive(Serialize)]\npub struct CallServerHttpResult {\n\tpub status: u16,\n\t#[serde(with = \"serde_bytes\")]\n\tpub body: Vec<u8>,\n\tpub headers: HashMap<String, String>,\n}\n\n#[derive(Serialize, Debug)]\npub struct VersionResponse {\n\tpub version: &'static str,\n\tpub protocol_version: u32,\n}\n\nimpl Default for VersionResponse {\n\tfn default() -> Self {\n\t\tSelf {\n\t\t\tversion: VSCODE_CLI_VERSION.unwrap_or(\"dev\"),\n\t\t\tprotocol_version: PROTOCOL_VERSION,\n\t\t}\n\t}\n}\n\n#[derive(Deserialize)]\npub struct SpawnParams {\n\tpub command: String,\n\tpub args: Vec<String>,\n\t#[serde(default)]\n\tpub cwd: Option<String>,\n\t#[serde(default)]\n\tpub env: HashMap<String, String>,\n}\n\n#[derive(Deserialize)]\npub struct AcquireCliParams {\n\tpub platform: Platform,\n\tpub quality: Quality,\n\tpub commit_id: Option<String>,\n\t#[serde(flatten)]\n\tpub spawn: SpawnParams,\n}\n\n#[derive(Serialize)]\npub struct SpawnResult {\n\tpub message: String,\n\tpub exit_code: i32,\n}\n\npub const METHOD_CHALLENGE_ISSUE: &str = \"challenge_issue\";\npub const METHOD_CHALLENGE_VERIFY: &str = \"challenge_verify\";\n\n#[derive(Serialize, Deserialize)]\npub struct ChallengeIssueParams {\n\tpub token: Option<String>,\n}\n\n#[derive(Serialize, Deserialize)]\npub struct ChallengeIssueResponse {\n\tpub challenge: String,\n}\n\n#[derive(Deserialize, Serialize)]\npub struct ChallengeVerifyParams {\n\tpub response: String,\n}\n\n#[derive(Serialize, Deserialize, PartialEq, Eq, Copy, Clone, Debug)]\n#[serde(rename_all = \"lowercase\")]\npub enum PortPrivacy {\n\tPublic,\n\tPrivate,\n}\n\n#[derive(Serialize, Deserialize, PartialEq, Copy, Eq, Clone, Debug)]\n#[serde(rename_all = \"lowercase\")]\npub enum PortProtocol {\n\tAuto,\n\tHttp,\n\tHttps,\n}\n\nimpl std::fmt::Display for PortProtocol {\n\tfn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n\t\twrite!(f, \"{}\", self.to_contract_str())\n\t}\n}\n\nimpl Default for PortProtocol {\n\tfn default() -> Self {\n\t\tSelf::Auto\n\t}\n}\n\nimpl PortProtocol {\n\tpub fn to_contract_str(&self) -> &'static str {\n\t\tmatch *self {\n\t\t\tSelf::Auto => tunnels::contracts::TUNNEL_PROTOCOL_AUTO,\n\t\t\tSelf::Http => tunnels::contracts::TUNNEL_PROTOCOL_HTTP,\n\t\t\tSelf::Https => tunnels::contracts::TUNNEL_PROTOCOL_HTTPS,\n\t\t}\n\t}\n}\n\npub mod forward_singleton {\n\tuse serde::{Deserialize, Serialize};\n\n\tuse super::{PortPrivacy, PortProtocol};\n\n\tpub const METHOD_SET_PORTS: &str = \"set_ports\";\n\n\t#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug)]\n\tpub struct PortRec {\n\t\tpub number: u16,\n\t\tpub privacy: PortPrivacy,\n\t\tpub protocol: PortProtocol,\n\t}\n\n\tpub type PortList = Vec<PortRec>;\n\n\t#[derive(Serialize, Deserialize)]\n\tpub struct SetPortsParams {\n\t\tpub ports: PortList,\n\t}\n\n\t#[derive(Serialize, Deserialize)]\n\tpub struct SetPortsResponse {\n\t\tpub port_format: Option<String>,\n\t}\n}\n\npub mod singleton {\n\tuse crate::log;\n\tuse chrono::{DateTime, Utc};\n\tuse serde::{Deserialize, Serialize};\n\n\tpub const METHOD_RESTART: &str = \"restart\";\n\tpub const METHOD_SHUTDOWN: &str = \"shutdown\";\n\tpub const METHOD_STATUS: &str = \"status\";\n\tpub const METHOD_LOG: &str = \"log\";\n\tpub const METHOD_LOG_REPLY_DONE: &str = \"log_done\";\n\n\t#[derive(Serialize)]\n\tpub struct LogMessage<'a> {\n\t\tpub level: Option<log::Level>,\n\t\tpub prefix: &'a str,\n\t\tpub message: &'a str,\n\t}\n\n\t#[derive(Deserialize)]\n\tpub struct LogMessageOwned {\n\t\tpub level: Option<log::Level>,\n\t\tpub prefix: String,\n\t\tpub message: String,\n\t}\n\n\t#[derive(Serialize, Deserialize, Clone, Default)]\n\tpub struct StatusWithTunnelName {\n\t\tpub name: Option<String>,\n\t\t#[serde(flatten)]\n\t\tpub status: Status,\n\t}\n\n\t#[derive(Serialize, Deserialize, Clone)]\n\tpub struct Status {\n\t\tpub started_at: DateTime<Utc>,\n\t\tpub tunnel: TunnelState,\n\t\tpub last_connected_at: Option<DateTime<Utc>>,\n\t\tpub last_disconnected_at: Option<DateTime<Utc>>,\n\t\tpub last_fail_reason: Option<String>,\n\t}\n\n\timpl Default for Status {\n\t\tfn default() -> Self {\n\t\t\tSelf {\n\t\t\t\tstarted_at: Utc::now(),\n\t\t\t\ttunnel: TunnelState::Disconnected,\n\t\t\t\tlast_connected_at: None,\n\t\t\t\tlast_disconnected_at: None,\n\t\t\t\tlast_fail_reason: None,\n\t\t\t}\n\t\t}\n\t}\n\n\t#[derive(Deserialize, Serialize, Debug)]\n\tpub struct LogReplayFinished {}\n\n\t#[derive(Deserialize, Serialize, Debug, Default, Clone)]\n\tpub enum TunnelState {\n\t\t#[default]\n\t\tDisconnected,\n\t\tConnected,\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/server_bridge.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse super::socket_signal::{ClientMessageDecoder, ServerMessageSink};\nuse crate::{\n\tasync_pipe::{get_socket_rw_stream, socket_stream_split, AsyncPipeWriteHalf},\n\tutil::errors::AnyError,\n};\nuse std::path::Path;\nuse tokio::io::{AsyncReadExt, AsyncWriteExt};\n\npub struct ServerBridge {\n\twrite: AsyncPipeWriteHalf,\n\tdecoder: ClientMessageDecoder,\n}\n\nconst BUFFER_SIZE: usize = 65536;\n\nimpl ServerBridge {\n\tpub async fn new(\n\t\tpath: &Path,\n\t\tmut target: ServerMessageSink,\n\t\tdecoder: ClientMessageDecoder,\n\t) -> Result<Self, AnyError> {\n\t\tlet stream = get_socket_rw_stream(path).await?;\n\t\tlet (mut read, write) = socket_stream_split(stream);\n\n\t\ttokio::spawn(async move {\n\t\t\tlet mut read_buf = vec![0; BUFFER_SIZE];\n\t\t\tloop {\n\t\t\t\tmatch read.read(&mut read_buf).await {\n\t\t\t\t\tErr(_) => return,\n\t\t\t\t\tOk(0) => {\n\t\t\t\t\t\tlet _ = target.server_closed().await;\n\t\t\t\t\t\treturn; // EOF\n\t\t\t\t\t}\n\t\t\t\t\tOk(s) => {\n\t\t\t\t\t\tlet send = target.server_message(&read_buf[..s]).await;\n\t\t\t\t\t\tif send.is_err() {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tOk(ServerBridge { write, decoder })\n\t}\n\n\tpub async fn write(&mut self, b: Vec<u8>) -> std::io::Result<()> {\n\t\tlet dec = self.decoder.decode(&b)?;\n\t\tif !dec.is_empty() {\n\t\t\tself.write.write_all(dec).await?;\n\t\t}\n\t\tOk(())\n\t}\n\n\tpub async fn close(mut self) -> std::io::Result<()> {\n\t\tself.write.shutdown().await?;\n\t\tOk(())\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/server_multiplexer.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::sync::Arc;\n\nuse futures::future::join_all;\n\nuse crate::log;\n\nuse super::server_bridge::ServerBridge;\n\ntype Inner = Arc<std::sync::Mutex<Option<Vec<ServerBridgeRec>>>>;\n\nstruct ServerBridgeRec {\n\tid: u16,\n\t// bridge is removed when there's a write loop currently active\n\tbridge: Option<ServerBridge>,\n\twrite_queue: Vec<Vec<u8>>,\n}\n\n/// The ServerMultiplexer manages multiple server bridges and allows writing\n/// to them in a thread-safe way. It is copy, sync, and clone.\n#[derive(Clone)]\npub struct ServerMultiplexer {\n\tinner: Inner,\n}\n\nimpl ServerMultiplexer {\n\tpub fn new() -> Self {\n\t\tSelf {\n\t\t\tinner: Arc::new(std::sync::Mutex::new(Some(Vec::new()))),\n\t\t}\n\t}\n\n\t/// Adds a new bridge to the multiplexer.\n\tpub fn register(&self, id: u16, bridge: ServerBridge) {\n\t\tlet bridge_rec = ServerBridgeRec {\n\t\t\tid,\n\t\t\tbridge: Some(bridge),\n\t\t\twrite_queue: vec![],\n\t\t};\n\n\t\tlet mut lock = self.inner.lock().unwrap();\n\t\tmatch &mut *lock {\n\t\t\tSome(server_bridges) => (*server_bridges).push(bridge_rec),\n\t\t\tNone => *lock = Some(vec![bridge_rec]),\n\t\t}\n\t}\n\n\t/// Removes a server bridge by ID.\n\tpub fn remove(&self, id: u16) {\n\t\tlet mut lock = self.inner.lock().unwrap();\n\t\tif let Some(bridges) = &mut *lock {\n\t\t\tbridges.retain(|sb| sb.id != id);\n\t\t}\n\t}\n\n\t/// Handle an incoming server message. This is synchronous and uses a 'write loop'\n\t/// to ensure message order is preserved exactly, which is necessary for compression.\n\t/// Returns false if there was no server with the given bridge_id.\n\tpub fn write_message(&self, log: &log::Logger, bridge_id: u16, message: Vec<u8>) -> bool {\n\t\tlet mut lock = self.inner.lock().unwrap();\n\n\t\tlet bridges = match &mut *lock {\n\t\t\tSome(sb) => sb,\n\t\t\tNone => return false,\n\t\t};\n\n\t\tlet record = match bridges.iter_mut().find(|b| b.id == bridge_id) {\n\t\t\tSome(sb) => sb,\n\t\t\tNone => return false,\n\t\t};\n\n\t\trecord.write_queue.push(message);\n\t\tif let Some(bridge) = record.bridge.take() {\n\t\t\tlet bridges_lock = self.inner.clone();\n\t\t\tlet log = log.clone();\n\t\t\ttokio::spawn(write_loop(log, record.id, bridge, bridges_lock));\n\t\t}\n\n\t\ttrue\n\t}\n\n\t/// Disposes all running server bridges.\n\tpub async fn dispose(&self) {\n\t\tlet bridges = {\n\t\t\tlet mut lock = self.inner.lock().unwrap();\n\t\t\tlock.take()\n\t\t};\n\n\t\tlet bridges = match bridges {\n\t\t\tSome(b) => b,\n\t\t\tNone => return,\n\t\t};\n\n\t\tjoin_all(\n\t\t\tbridges\n\t\t\t\t.into_iter()\n\t\t\t\t.filter_map(|b| b.bridge)\n\t\t\t\t.map(|b| b.close()),\n\t\t)\n\t\t.await;\n\t}\n}\n\n/// Write loop started by `handle_server_message`. It takes the ServerBridge, and\n/// runs until there's no more items in the 'write queue'. At that point, if the\n/// record still exists in the bridges_lock (i.e. we haven't shut down), it'll\n/// return the ServerBridge so that the next handle_server_message call starts\n/// the loop again. Otherwise, it'll close the bridge.\nasync fn write_loop(log: log::Logger, id: u16, mut bridge: ServerBridge, bridges_lock: Inner) {\n\tlet mut items_vec = vec![];\n\tloop {\n\t\t{\n\t\t\tlet mut lock = bridges_lock.lock().unwrap();\n\t\t\tlet server_bridges = match &mut *lock {\n\t\t\t\tSome(sb) => sb,\n\t\t\t\tNone => break,\n\t\t\t};\n\n\t\t\tlet bridge_rec = match server_bridges.iter_mut().find(|b| id == b.id) {\n\t\t\t\tSome(b) => b,\n\t\t\t\tNone => break,\n\t\t\t};\n\n\t\t\tif bridge_rec.write_queue.is_empty() {\n\t\t\t\tbridge_rec.bridge = Some(bridge);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstd::mem::swap(&mut bridge_rec.write_queue, &mut items_vec);\n\t\t}\n\n\t\tfor item in items_vec.drain(..) {\n\t\t\tif let Err(e) = bridge.write(item).await {\n\t\t\t\twarning!(log, \"Error writing to server: {:?}\", e);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tbridge.close().await.ok(); // got here from `break` above, meaning our record got cleared. Close the bridge if so\n}\n"
  },
  {
    "path": "cli/src/tunnels/service.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::path::{Path, PathBuf};\n\nuse async_trait::async_trait;\n\nuse crate::log;\nuse crate::state::LauncherPaths;\nuse crate::util::errors::{wrap, AnyError};\nuse crate::util::io::{tailf, TailEvent};\n\npub const SERVICE_LOG_FILE_NAME: &str = \"tunnel-service.log\";\n\n#[async_trait]\npub trait ServiceContainer: Send {\n\tasync fn run_service(\n\t\t&mut self,\n\t\tlog: log::Logger,\n\t\tlauncher_paths: LauncherPaths,\n\t) -> Result<(), AnyError>;\n}\n\n#[async_trait]\npub trait ServiceManager {\n\t/// Registers the current executable as a service to run with the given set\n\t/// of arguments.\n\tasync fn register(&self, exe: PathBuf, args: &[&str]) -> Result<(), AnyError>;\n\n\t/// Runs the service using the given handle. The executable *must not* take\n\t/// any action which may fail prior to calling this to ensure service\n\t/// states may update.\n\tasync fn run(\n\t\tself,\n\t\tlauncher_paths: LauncherPaths,\n\t\thandle: impl 'static + ServiceContainer,\n\t) -> Result<(), AnyError>;\n\n\t/// Show logs from the running service to standard out.\n\tasync fn show_logs(&self) -> Result<(), AnyError>;\n\n\t/// Gets whether the tunnel service is installed.\n\tasync fn is_installed(&self) -> Result<bool, AnyError>;\n\n\t/// Unregisters the current executable as a service.\n\tasync fn unregister(&self) -> Result<(), AnyError>;\n}\n\n#[cfg(target_os = \"windows\")]\npub type ServiceManagerImpl = super::service_windows::WindowsService;\n\n#[cfg(target_os = \"linux\")]\npub type ServiceManagerImpl = super::service_linux::SystemdService;\n\n#[cfg(target_os = \"macos\")]\npub type ServiceManagerImpl = super::service_macos::LaunchdService;\n\n#[allow(unreachable_code)]\n#[allow(unused_variables)]\npub fn create_service_manager(log: log::Logger, paths: &LauncherPaths) -> ServiceManagerImpl {\n\t#[cfg(target_os = \"macos\")]\n\t{\n\t\tsuper::service_macos::LaunchdService::new(log, paths)\n\t}\n\t#[cfg(target_os = \"windows\")]\n\t{\n\t\tsuper::service_windows::WindowsService::new(log, paths)\n\t}\n\t#[cfg(target_os = \"linux\")]\n\t{\n\t\tsuper::service_linux::SystemdService::new(log, paths.clone())\n\t}\n}\n\n#[allow(dead_code)] // unused on Linux\npub(crate) async fn tail_log_file(log_file: &Path) -> Result<(), AnyError> {\n\tif !log_file.exists() {\n\t\tprintln!(\"The tunnel service has not started yet.\");\n\t\treturn Ok(());\n\t}\n\n\tlet file = std::fs::File::open(log_file).map_err(|e| wrap(e, \"error opening log file\"))?;\n\tlet mut rx = tailf(file, 20);\n\twhile let Some(line) = rx.recv().await {\n\t\tmatch line {\n\t\t\tTailEvent::Line(l) => print!(\"{l}\"),\n\t\t\tTailEvent::Reset => println!(\"== Tunnel service restarted ==\"),\n\t\t\tTailEvent::Err(e) => return Err(wrap(e, \"error reading log file\").into()),\n\t\t}\n\t}\n\n\tOk(())\n}\n"
  },
  {
    "path": "cli/src/tunnels/service_linux.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tfs::File,\n\tio::{self, Write},\n\tpath::PathBuf,\n\tprocess::Command,\n};\n\nuse async_trait::async_trait;\nuse zbus::{dbus_proxy, zvariant, Connection};\n\nuse crate::{\n\tconstants::{APPLICATION_NAME, PRODUCT_NAME_LONG},\n\tlog,\n\tstate::LauncherPaths,\n\tutil::errors::{wrap, AnyError, DbusConnectFailedError},\n};\n\nuse super::ServiceManager;\n\npub struct SystemdService {\n\tlog: log::Logger,\n\tservice_file: PathBuf,\n}\n\nimpl SystemdService {\n\tpub fn new(log: log::Logger, paths: LauncherPaths) -> Self {\n\t\tSelf {\n\t\t\tlog,\n\t\t\tservice_file: paths.root().join(SystemdService::service_name_string()),\n\t\t}\n\t}\n}\n\nimpl SystemdService {\n\tasync fn connect() -> Result<Connection, AnyError> {\n\t\tlet connection = Connection::session()\n\t\t\t.await\n\t\t\t.map_err(|e| DbusConnectFailedError(e.to_string()))?;\n\t\tOk(connection)\n\t}\n\n\tasync fn proxy(connection: &Connection) -> Result<SystemdManagerDbusProxy<'_>, AnyError> {\n\t\tlet proxy = SystemdManagerDbusProxy::new(connection)\n\t\t\t.await\n\t\t\t.map_err(|e| {\n\t\t\t\twrap(\n\t\t\t\t\te,\n\t\t\t\t\t\"error connecting to systemd, you may need to re-run with sudo:\",\n\t\t\t\t)\n\t\t\t})?;\n\n\t\tOk(proxy)\n\t}\n\n\tfn service_path_string(&self) -> String {\n\t\tself.service_file.as_os_str().to_string_lossy().to_string()\n\t}\n\n\tfn service_name_string() -> String {\n\t\tformat!(\"{APPLICATION_NAME}-tunnel.service\")\n\t}\n}\n\n#[async_trait]\nimpl ServiceManager for SystemdService {\n\tasync fn register(\n\t\t&self,\n\t\texe: std::path::PathBuf,\n\t\targs: &[&str],\n\t) -> Result<(), crate::util::errors::AnyError> {\n\t\tlet connection = SystemdService::connect().await?;\n\t\tlet proxy = SystemdService::proxy(&connection).await?;\n\n\t\twrite_systemd_service_file(&self.service_file, exe, args)\n\t\t\t.map_err(|e| wrap(e, \"error creating service file\"))?;\n\n\t\tproxy\n\t\t\t.link_unit_files(\n\t\t\t\tvec![self.service_path_string()],\n\t\t\t\t/* 'runtime only'= */ false,\n\t\t\t\t/* replace existing = */ true,\n\t\t\t)\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error registering service\"))?;\n\n\t\tinfo!(self.log, \"Successfully registered service...\");\n\n\t\tif let Err(e) = proxy.reload().await {\n\t\t\twarning!(self.log, \"Error issuing reload(): {}\", e);\n\t\t}\n\n\t\t// note: enablement is implicit in recent systemd version, but required for older systems\n\t\t// https://github.com/microsoft/vscode/issues/167489#issuecomment-1331222826\n\t\tproxy\n\t\t\t.enable_unit_files(\n\t\t\t\tvec![SystemdService::service_name_string()],\n\t\t\t\t/* 'runtime only'= */ false,\n\t\t\t\t/* replace existing = */ true,\n\t\t\t)\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error enabling unit files for service\"))?;\n\n\t\tinfo!(self.log, \"Successfully enabled unit files...\");\n\n\t\tproxy\n\t\t\t.start_unit(SystemdService::service_name_string(), \"replace\".to_string())\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error starting service\"))?;\n\n\t\tinfo!(self.log, \"Tunnel service successfully started\");\n\n\t\tif std::env::var(\"SSH_CLIENT\").is_ok() || std::env::var(\"SSH_TTY\").is_ok() {\n\t\t\tinfo!(self.log, \"Tip: run `sudo loginctl enable-linger $USER` to ensure the service stays running after you disconnect.\");\n\t\t}\n\n\t\tOk(())\n\t}\n\n\tasync fn is_installed(&self) -> Result<bool, AnyError> {\n\t\tlet connection = SystemdService::connect().await?;\n\t\tlet proxy = SystemdService::proxy(&connection).await?;\n\t\tlet state = proxy\n\t\t\t.get_unit_file_state(SystemdService::service_name_string())\n\t\t\t.await;\n\n\t\tif let Ok(s) = state {\n\t\t\tOk(s == \"enabled\")\n\t\t} else {\n\t\t\tOk(false)\n\t\t}\n\t}\n\n\tasync fn run(\n\t\tself,\n\t\tlauncher_paths: crate::state::LauncherPaths,\n\t\tmut handle: impl 'static + super::ServiceContainer,\n\t) -> Result<(), crate::util::errors::AnyError> {\n\t\thandle.run_service(self.log, launcher_paths).await\n\t}\n\n\tasync fn show_logs(&self) -> Result<(), AnyError> {\n\t\t// show the systemctl status header...\n\t\tCommand::new(\"systemctl\")\n\t\t\t.args([\n\t\t\t\t\"--user\",\n\t\t\t\t\"status\",\n\t\t\t\t\"-n\",\n\t\t\t\t\"0\",\n\t\t\t\t&SystemdService::service_name_string(),\n\t\t\t])\n\t\t\t.status()\n\t\t\t.map(|s| s.code().unwrap_or(1))\n\t\t\t.map_err(|e| wrap(e, \"error running systemctl\"))?;\n\n\t\t// then follow log files\n\t\tCommand::new(\"journalctl\")\n\t\t\t.args([\"--user\", \"-f\", \"-u\", &SystemdService::service_name_string()])\n\t\t\t.status()\n\t\t\t.map(|s| s.code().unwrap_or(1))\n\t\t\t.map_err(|e| wrap(e, \"error running journalctl\"))?;\n\t\tOk(())\n\t}\n\n\tasync fn unregister(&self) -> Result<(), crate::util::errors::AnyError> {\n\t\tlet connection = SystemdService::connect().await?;\n\t\tlet proxy = SystemdService::proxy(&connection).await?;\n\n\t\tproxy\n\t\t\t.stop_unit(SystemdService::service_name_string(), \"replace\".to_string())\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error unregistering service\"))?;\n\n\t\tinfo!(self.log, \"Successfully stopped service...\");\n\n\t\tproxy\n\t\t\t.disable_unit_files(\n\t\t\t\tvec![SystemdService::service_name_string()],\n\t\t\t\t/* 'runtime only'= */ false,\n\t\t\t)\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error unregistering service\"))?;\n\n\t\tinfo!(self.log, \"Tunnel service uninstalled\");\n\n\t\tOk(())\n\t}\n}\n\nfn write_systemd_service_file(\n\tpath: &PathBuf,\n\texe: std::path::PathBuf,\n\targs: &[&str],\n) -> io::Result<()> {\n\tlet mut f = File::create(path)?;\n\twrite!(\n\t\t&mut f,\n\t\t\"[Unit]\\n\\\n      Description={} Tunnel\\n\\\n      After=network.target\\n\\\n      StartLimitIntervalSec=0\\n\\\n      \\n\\\n      [Service]\\n\\\n      Type=simple\\n\\\n      Restart=always\\n\\\n      RestartSec=10\\n\\\n      ExecStart={} \\\"{}\\\"\\n\\\n      \\n\\\n      [Install]\\n\\\n      WantedBy=default.target\\n\\\n    \",\n\t\tPRODUCT_NAME_LONG,\n\t\texe.into_os_string().to_string_lossy(),\n\t\targs.join(\"\\\" \\\"\")\n\t)?;\n\tOk(())\n}\n\n/// Minimal implementation of systemd types for the services we need. The full\n/// definition can be found on any systemd machine with the command:\n///\n/// gdbus introspect --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd1\n///\n/// See docs here: https://www.freedesktop.org/software/systemd/man/org.freedesktop.systemd1.html\n#[dbus_proxy(\n\tinterface = \"org.freedesktop.systemd1.Manager\",\n\tgen_blocking = false,\n\tdefault_service = \"org.freedesktop.systemd1\",\n\tdefault_path = \"/org/freedesktop/systemd1\"\n)]\ntrait SystemdManagerDbus {\n\t#[dbus_proxy(name = \"EnableUnitFiles\")]\n\tfn enable_unit_files(\n\t\t&self,\n\t\tfiles: Vec<String>,\n\t\truntime: bool,\n\t\tforce: bool,\n\t) -> zbus::Result<(bool, Vec<(String, String, String)>)>;\n\n\tfn get_unit_file_state(&self, file: String) -> zbus::Result<String>;\n\n\tfn link_unit_files(\n\t\t&self,\n\t\tfiles: Vec<String>,\n\t\truntime: bool,\n\t\tforce: bool,\n\t) -> zbus::Result<Vec<(String, String, String)>>;\n\n\tfn disable_unit_files(\n\t\t&self,\n\t\tfiles: Vec<String>,\n\t\truntime: bool,\n\t) -> zbus::Result<Vec<(String, String, String)>>;\n\n\t#[dbus_proxy(name = \"StartUnit\")]\n\tfn start_unit(&self, name: String, mode: String) -> zbus::Result<zvariant::OwnedObjectPath>;\n\n\t#[dbus_proxy(name = \"StopUnit\")]\n\tfn stop_unit(&self, name: String, mode: String) -> zbus::Result<zvariant::OwnedObjectPath>;\n\n\t#[dbus_proxy(name = \"Reload\")]\n\tfn reload(&self) -> zbus::Result<()>;\n}\n"
  },
  {
    "path": "cli/src/tunnels/service_macos.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tfs::{remove_file, File},\n\tio::{self, Write},\n\tpath::{Path, PathBuf},\n};\n\nuse async_trait::async_trait;\n\nuse crate::{\n\tconstants::APPLICATION_NAME,\n\tlog,\n\tstate::LauncherPaths,\n\tutil::{\n\t\tcommand::capture_command_and_check_status,\n\t\terrors::{wrap, AnyError, CodeError, MissingHomeDirectory},\n\t},\n};\n\nuse super::{service::tail_log_file, ServiceManager};\n\npub struct LaunchdService {\n\tlog: log::Logger,\n\tlog_file: PathBuf,\n}\n\nimpl LaunchdService {\n\tpub fn new(log: log::Logger, paths: &LauncherPaths) -> Self {\n\t\tSelf {\n\t\t\tlog,\n\t\t\tlog_file: paths.service_log_file(),\n\t\t}\n\t}\n}\n\n#[async_trait]\nimpl ServiceManager for LaunchdService {\n\tasync fn register(\n\t\t&self,\n\t\texe: std::path::PathBuf,\n\t\targs: &[&str],\n\t) -> Result<(), crate::util::errors::AnyError> {\n\t\tlet service_file = get_service_file_path()?;\n\t\twrite_service_file(&service_file, &self.log_file, exe, args)\n\t\t\t.map_err(|e| wrap(e, \"error creating service file\"))?;\n\n\t\tinfo!(self.log, \"Successfully registered service...\");\n\n\t\tcapture_command_and_check_status(\n\t\t\t\"launchctl\",\n\t\t\t&[\"load\", service_file.as_os_str().to_string_lossy().as_ref()],\n\t\t)\n\t\t.await?;\n\n\t\tcapture_command_and_check_status(\"launchctl\", &[\"start\", &get_service_label()]).await?;\n\n\t\tinfo!(self.log, \"Tunnel service successfully started\");\n\n\t\tOk(())\n\t}\n\n\tasync fn show_logs(&self) -> Result<(), AnyError> {\n\t\ttail_log_file(&self.log_file).await\n\t}\n\n\tasync fn run(\n\t\tself,\n\t\tlauncher_paths: crate::state::LauncherPaths,\n\t\tmut handle: impl 'static + super::ServiceContainer,\n\t) -> Result<(), crate::util::errors::AnyError> {\n\t\thandle.run_service(self.log, launcher_paths).await\n\t}\n\n\tasync fn is_installed(&self) -> Result<bool, AnyError> {\n\t\tlet cmd = capture_command_and_check_status(\"launchctl\", &[\"list\"]).await?;\n\t\tOk(String::from_utf8_lossy(&cmd.stdout).contains(&get_service_label()))\n\t}\n\n\tasync fn unregister(&self) -> Result<(), crate::util::errors::AnyError> {\n\t\tlet service_file = get_service_file_path()?;\n\n\t\tmatch capture_command_and_check_status(\"launchctl\", &[\"stop\", &get_service_label()]).await {\n\t\t\tOk(_) => {}\n\t\t\t// status 3 == \"no such process\"\n\t\t\tErr(CodeError::CommandFailed { code: 3, .. }) => {}\n\t\t\tErr(e) => return Err(wrap(e, \"error stopping service\").into()),\n\t\t};\n\n\t\tinfo!(self.log, \"Successfully stopped service...\");\n\n\t\tcapture_command_and_check_status(\n\t\t\t\"launchctl\",\n\t\t\t&[\n\t\t\t\t\"unload\",\n\t\t\t\tservice_file.as_os_str().to_string_lossy().as_ref(),\n\t\t\t],\n\t\t)\n\t\t.await?;\n\n\t\tinfo!(self.log, \"Tunnel service uninstalled\");\n\n\t\tif let Ok(f) = get_service_file_path() {\n\t\t\tremove_file(f).ok();\n\t\t}\n\n\t\tOk(())\n\t}\n}\n\nfn get_service_label() -> String {\n\tformat!(\"com.visualstudio.{}.tunnel\", APPLICATION_NAME)\n}\n\nfn get_service_file_path() -> Result<PathBuf, MissingHomeDirectory> {\n\tmatch dirs::home_dir() {\n\t\tSome(mut d) => {\n\t\t\td.push(format!(\"{}.plist\", get_service_label()));\n\t\t\tOk(d)\n\t\t}\n\t\tNone => Err(MissingHomeDirectory()),\n\t}\n}\n\nfn write_service_file(\n\tpath: &PathBuf,\n\tlog_file: &Path,\n\texe: std::path::PathBuf,\n\targs: &[&str],\n) -> io::Result<()> {\n\tlet mut f = File::create(path)?;\n\tlet log_file = log_file.as_os_str().to_string_lossy();\n\t// todo: we may be able to skip file logging and use the ASL instead\n\t// if/when we no longer need to support older macOS versions.\n\twrite!(\n\t\t&mut f,\n\t\t\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\\\n\t\t<!DOCTYPE plist PUBLIC \\\"-//Apple//DTD PLIST 1.0//EN\\\" \\\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\\\">\\n\\\n\t\t<plist version=\\\"1.0\\\">\\n\\\n\t\t<dict>\\n\\\n\t\t\t<key>Label</key>\\n\\\n\t\t\t<string>{}</string>\\n\\\n\t\t\t<key>LimitLoadToSessionType</key>\\n\\\n\t\t\t<string>Aqua</string>\\n\\\n\t\t\t<key>ProgramArguments</key>\\n\\\n\t\t\t<array>\\n\\\n\t\t\t\t<string>{}</string>\\n\\\n\t\t\t\t<string>{}</string>\\n\\\n\t\t\t</array>\\n\\\n\t\t\t<key>KeepAlive</key>\\n\\\n\t\t\t<true/>\\n\\\n\t\t\t<key>StandardErrorPath</key>\\n\\\n\t\t\t<string>{}</string>\\n\\\n\t\t\t<key>StandardOutPath</key>\\n\\\n\t\t\t<string>{}</string>\\n\\\n\t\t</dict>\\n\\\n\t\t</plist>\",\n\t\tget_service_label(),\n\t\texe.into_os_string().to_string_lossy(),\n\t\targs.join(\"</string><string>\"),\n\t\tlog_file,\n\t\tlog_file\n\t)?;\n\tOk(())\n}\n"
  },
  {
    "path": "cli/src/tunnels/service_windows.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse async_trait::async_trait;\nuse shell_escape::windows::escape as shell_escape;\nuse std::os::windows::process::CommandExt;\nuse std::{path::PathBuf, process::Stdio};\nuse winapi::um::winbase::{CREATE_NEW_PROCESS_GROUP, DETACHED_PROCESS};\nuse winreg::{enums::HKEY_CURRENT_USER, RegKey};\n\nuse crate::util::command::new_std_command;\nuse crate::{\n\tconstants::TUNNEL_ACTIVITY_NAME,\n\tlog,\n\tstate::LauncherPaths,\n\ttunnels::{protocol, singleton_client::do_single_rpc_call},\n\tutil::errors::{wrap, wrapdbg, AnyError},\n};\n\nuse super::service::{tail_log_file, ServiceContainer, ServiceManager as CliServiceManager};\n\nconst DID_LAUNCH_AS_HIDDEN_PROCESS: &str = \"VSCODE_CLI_DID_LAUNCH_AS_HIDDEN_PROCESS\";\n\npub struct WindowsService {\n\tlog: log::Logger,\n\ttunnel_lock: PathBuf,\n\tlog_file: PathBuf,\n}\n\nimpl WindowsService {\n\tpub fn new(log: log::Logger, paths: &LauncherPaths) -> Self {\n\t\tSelf {\n\t\t\tlog,\n\t\t\ttunnel_lock: paths.tunnel_lockfile(),\n\t\t\tlog_file: paths.service_log_file(),\n\t\t}\n\t}\n\n\tfn open_key() -> Result<RegKey, AnyError> {\n\t\tRegKey::predef(HKEY_CURRENT_USER)\n\t\t\t.create_subkey(r\"Software\\Microsoft\\Windows\\CurrentVersion\\Run\")\n\t\t\t.map_err(|e| wrap(e, \"error opening run registry key\").into())\n\t\t\t.map(|(key, _)| key)\n\t}\n}\n\n#[async_trait]\nimpl CliServiceManager for WindowsService {\n\tasync fn register(&self, exe: std::path::PathBuf, args: &[&str]) -> Result<(), AnyError> {\n\t\tlet key = WindowsService::open_key()?;\n\n\t\tlet mut reg_str = String::new();\n\t\tlet mut cmd = new_std_command(&exe);\n\t\treg_str.push_str(shell_escape(exe.to_string_lossy()).as_ref());\n\n\t\tlet mut add_arg = |arg: &str| {\n\t\t\treg_str.push(' ');\n\t\t\treg_str.push_str(shell_escape((*arg).into()).as_ref());\n\t\t\tcmd.arg(arg);\n\t\t};\n\n\t\tfor arg in args {\n\t\t\tadd_arg(arg);\n\t\t}\n\n\t\tadd_arg(\"--log-to-file\");\n\t\tadd_arg(self.log_file.to_string_lossy().as_ref());\n\n\t\tkey.set_value(TUNNEL_ACTIVITY_NAME, &reg_str)\n\t\t\t.map_err(|e| AnyError::from(wrapdbg(e, \"error setting registry key\")))?;\n\n\t\tinfo!(self.log, \"Successfully registered service...\");\n\n\t\tcmd.stderr(Stdio::null());\n\t\tcmd.stdout(Stdio::null());\n\t\tcmd.stdin(Stdio::null());\n\t\tcmd.creation_flags(CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS);\n\t\tcmd.spawn()\n\t\t\t.map_err(|e| wrapdbg(e, \"error starting service\"))?;\n\n\t\tinfo!(self.log, \"Tunnel service successfully started\");\n\t\tOk(())\n\t}\n\n\tasync fn show_logs(&self) -> Result<(), AnyError> {\n\t\ttail_log_file(&self.log_file).await\n\t}\n\n\tasync fn run(\n\t\tself,\n\t\tlauncher_paths: LauncherPaths,\n\t\tmut handle: impl 'static + ServiceContainer,\n\t) -> Result<(), AnyError> {\n\t\tif std::env::var(DID_LAUNCH_AS_HIDDEN_PROCESS).is_ok() {\n\t\t\treturn handle.run_service(self.log, launcher_paths).await;\n\t\t}\n\n\t\t// Start as a hidden subprocess to avoid showing cmd.exe on startup.\n\t\t// Fixes https://github.com/microsoft/vscode/issues/184058\n\t\t// I also tried the winapi ShowWindow, but that didn't yield fruit.\n\t\tnew_std_command(std::env::current_exe().unwrap())\n\t\t\t.args(std::env::args().skip(1))\n\t\t\t.env(DID_LAUNCH_AS_HIDDEN_PROCESS, \"1\")\n\t\t\t.stderr(Stdio::null())\n\t\t\t.stdout(Stdio::null())\n\t\t\t.stdin(Stdio::null())\n\t\t\t.creation_flags(CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS)\n\t\t\t.spawn()\n\t\t\t.map_err(|e| wrap(e, \"error starting nested process\"))?;\n\n\t\tOk(())\n\t}\n\n\tasync fn is_installed(&self) -> Result<bool, AnyError> {\n\t\tlet key = WindowsService::open_key()?;\n\t\tOk(key.get_raw_value(TUNNEL_ACTIVITY_NAME).is_ok())\n\t}\n\n\tasync fn unregister(&self) -> Result<(), AnyError> {\n\t\tlet key = WindowsService::open_key()?;\n\t\tmatch key.delete_value(TUNNEL_ACTIVITY_NAME) {\n\t\t\tOk(_) => {}\n\t\t\tErr(e) if e.kind() == std::io::ErrorKind::NotFound => {}\n\t\t\tErr(e) => return Err(wrap(e, \"error deleting registry key\").into()),\n\t\t}\n\n\t\tinfo!(self.log, \"Tunnel service uninstalled\");\n\n\t\tlet r = do_single_rpc_call::<_, ()>(\n\t\t\t&self.tunnel_lock,\n\t\t\tself.log.clone(),\n\t\t\tprotocol::singleton::METHOD_SHUTDOWN,\n\t\t\tprotocol::EmptyObject {},\n\t\t)\n\t\t.await;\n\n\t\tif r.is_err() {\n\t\t\twarning!(self.log, \"The tunnel service has been unregistered, but we couldn't find a running tunnel process. You may need to restart or log out and back in to fully stop the tunnel.\");\n\t\t} else {\n\t\t\tinfo!(self.log, \"Successfully shut down running tunnel.\");\n\t\t}\n\n\t\tOk(())\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/shutdown_signal.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse futures::{stream::FuturesUnordered, StreamExt};\nuse std::{fmt, path::PathBuf};\nuse sysinfo::Pid;\n\nuse crate::util::{\n\tmachine::{wait_until_exe_deleted, wait_until_process_exits},\n\tsync::{new_barrier, Barrier, Receivable},\n};\n\n/// Describes the signal to manully stop the server\n#[derive(Copy, Clone)]\npub enum ShutdownSignal {\n\tCtrlC,\n\tParentProcessKilled(Pid),\n\tExeUninstalled,\n\tServiceStopped,\n\tRpcShutdownRequested,\n\tRpcRestartRequested,\n}\n\nimpl fmt::Display for ShutdownSignal {\n\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n\t\tmatch self {\n\t\t\tShutdownSignal::CtrlC => write!(f, \"Ctrl-C received\"),\n\t\t\tShutdownSignal::ParentProcessKilled(p) => {\n\t\t\t\twrite!(f, \"Parent process {p} no longer exists\")\n\t\t\t}\n\t\t\tShutdownSignal::ExeUninstalled => {\n\t\t\t\twrite!(f, \"Executable no longer exists\")\n\t\t\t}\n\t\t\tShutdownSignal::ServiceStopped => write!(f, \"Service stopped\"),\n\t\t\tShutdownSignal::RpcShutdownRequested => write!(f, \"RPC client requested shutdown\"),\n\t\t\tShutdownSignal::RpcRestartRequested => {\n\t\t\t\twrite!(f, \"RPC client requested a tunnel restart\")\n\t\t\t}\n\t\t}\n\t}\n}\n\npub enum ShutdownRequest {\n\tCtrlC,\n\tParentProcessKilled(Pid),\n\tExeUninstalled(PathBuf),\n\tDerived(Box<dyn Receivable<ShutdownSignal> + Send>),\n}\n\nimpl ShutdownRequest {\n\tasync fn wait(self) -> Option<ShutdownSignal> {\n\t\tmatch self {\n\t\t\tShutdownRequest::CtrlC => {\n\t\t\t\tlet ctrl_c = tokio::signal::ctrl_c();\n\t\t\t\tctrl_c.await.ok();\n\t\t\t\tSome(ShutdownSignal::CtrlC)\n\t\t\t}\n\t\t\tShutdownRequest::ParentProcessKilled(pid) => {\n\t\t\t\twait_until_process_exits(pid, 2000).await;\n\t\t\t\tSome(ShutdownSignal::ParentProcessKilled(pid))\n\t\t\t}\n\t\t\tShutdownRequest::ExeUninstalled(exe_path) => {\n\t\t\t\twait_until_exe_deleted(&exe_path, 2000).await;\n\t\t\t\tSome(ShutdownSignal::ExeUninstalled)\n\t\t\t}\n\t\t\tShutdownRequest::Derived(mut rx) => rx.recv_msg().await,\n\t\t}\n\t}\n\t/// Creates a receiver channel sent to once any of the signals are received.\n\t/// Note: does not handle ServiceStopped\n\tpub fn create_rx(\n\t\tsignals: impl IntoIterator<Item = ShutdownRequest>,\n\t) -> Barrier<ShutdownSignal> {\n\t\tlet (barrier, opener) = new_barrier();\n\t\tlet futures = signals\n\t\t\t.into_iter()\n\t\t\t.map(|s| s.wait())\n\t\t\t.collect::<FuturesUnordered<_>>();\n\n\t\ttokio::spawn(async move {\n\t\t\tif let Some(s) = futures.filter_map(futures::future::ready).next().await {\n\t\t\t\topener.open(s);\n\t\t\t}\n\t\t});\n\n\t\tbarrier\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/singleton_client.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tpath::Path,\n\tsync::{\n\t\tatomic::{AtomicBool, Ordering},\n\t\tArc,\n\t},\n\tthread,\n};\n\nuse const_format::concatcp;\nuse tokio::sync::mpsc;\n\nuse crate::{\n\tasync_pipe::{socket_stream_split, AsyncPipe},\n\tconstants::IS_INTERACTIVE_CLI,\n\tjson_rpc::{new_json_rpc, start_json_rpc, JsonRpcSerializer},\n\tlog,\n\trpc::RpcCaller,\n\tsingleton::connect_as_client,\n\ttunnels::{code_server::print_listening, protocol::EmptyObject},\n\tutil::{errors::CodeError, sync::Barrier},\n};\n\nuse super::{\n\tprotocol,\n\tshutdown_signal::{ShutdownRequest, ShutdownSignal},\n};\n\npub struct SingletonClientArgs {\n\tpub log: log::Logger,\n\tpub stream: AsyncPipe,\n\tpub shutdown: Barrier<ShutdownSignal>,\n}\n\nstruct SingletonServerContext {\n\tlog: log::Logger,\n\texit_entirely: Arc<AtomicBool>,\n\tcaller: RpcCaller<JsonRpcSerializer>,\n}\n\nconst CONTROL_INSTRUCTIONS_COMMON: &str =\n\t\"Connected to an existing tunnel process running on this machine.\";\n\nconst CONTROL_INSTRUCTIONS_INTERACTIVE: &str = concatcp!(\n\tCONTROL_INSTRUCTIONS_COMMON,\n\t\" You can press:\n\n- \\\"x\\\" + Enter to stop the tunnel and exit\n- \\\"r\\\" + Enter to restart the tunnel\n- Ctrl+C to detach\n\"\n);\n\n/// Serves a client singleton. Returns true if the process should exit after\n/// this returns, instead of trying to start a tunnel.\npub async fn start_singleton_client(args: SingletonClientArgs) -> bool {\n\tlet mut rpc = new_json_rpc();\n\tlet (msg_tx, msg_rx) = mpsc::unbounded_channel();\n\tlet exit_entirely = Arc::new(AtomicBool::new(false));\n\n\tdebug!(\n\t\targs.log,\n\t\t\"An existing tunnel is running on this machine, connecting to it...\"\n\t);\n\n\tif *IS_INTERACTIVE_CLI {\n\t\tlet stdin_handle = rpc.get_caller(msg_tx.clone());\n\t\tthread::spawn(move || {\n\t\t\tlet mut input = String::new();\n\t\t\tloop {\n\t\t\t\tinput.truncate(0);\n\t\t\t\tmatch std::io::stdin().read_line(&mut input) {\n\t\t\t\t\tErr(_) | Ok(0) => return, // EOF or not a tty\n\t\t\t\t\t_ => {}\n\t\t\t\t};\n\n\t\t\t\tmatch input.chars().next().map(|c| c.to_ascii_lowercase()) {\n\t\t\t\t\tSome('x') => {\n\t\t\t\t\t\tstdin_handle.notify(protocol::singleton::METHOD_SHUTDOWN, EmptyObject {});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tSome('r') => {\n\t\t\t\t\t\tstdin_handle.notify(protocol::singleton::METHOD_RESTART, EmptyObject {});\n\t\t\t\t\t}\n\t\t\t\t\tSome(_) | None => {}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tlet caller = rpc.get_caller(msg_tx);\n\tlet mut rpc = rpc.methods(SingletonServerContext {\n\t\tlog: args.log.clone(),\n\t\texit_entirely: exit_entirely.clone(),\n\t\tcaller,\n\t});\n\n\trpc.register_sync(protocol::singleton::METHOD_SHUTDOWN, |_: EmptyObject, c| {\n\t\tc.exit_entirely.store(true, Ordering::SeqCst);\n\t\tOk(())\n\t});\n\n\trpc.register_async(\n\t\tprotocol::singleton::METHOD_LOG_REPLY_DONE,\n\t\t|_: EmptyObject, c| async move {\n\t\t\tc.log.result(if *IS_INTERACTIVE_CLI {\n\t\t\t\tCONTROL_INSTRUCTIONS_INTERACTIVE\n\t\t\t} else {\n\t\t\t\tCONTROL_INSTRUCTIONS_COMMON\n\t\t\t});\n\n\t\t\tlet res = c\n\t\t\t\t.caller\n\t\t\t\t.call::<_, _, protocol::singleton::StatusWithTunnelName>(\n\t\t\t\t\tprotocol::singleton::METHOD_STATUS,\n\t\t\t\t\tprotocol::EmptyObject {},\n\t\t\t\t);\n\n\t\t\t// we want to ensure the \"listening\" string always gets printed for\n\t\t\t// consumers (i.e. VS Code). Ask for it. If the tunnel is not currently\n\t\t\t// connected though, it will be soon, and that'll be in the log replays.\n\t\t\tif let Ok(Ok(s)) = res.await {\n\t\t\t\tif let Some(name) = s.name {\n\t\t\t\t\tprint_listening(&c.log, &name);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tOk(())\n\t\t},\n\t);\n\n\trpc.register_sync(\n\t\tprotocol::singleton::METHOD_LOG,\n\t\t|log: protocol::singleton::LogMessageOwned, c| {\n\t\t\tmatch log.level {\n\t\t\t\tSome(level) => c.log.emit(level, &format!(\"{}{}\", log.prefix, log.message)),\n\t\t\t\tNone => c.log.result(format!(\"{}{}\", log.prefix, log.message)),\n\t\t\t}\n\t\t\tOk(())\n\t\t},\n\t);\n\n\tlet (read, write) = socket_stream_split(args.stream);\n\tlet _ = start_json_rpc(rpc.build(args.log), read, write, msg_rx, args.shutdown).await;\n\n\texit_entirely.load(Ordering::SeqCst)\n}\n\npub async fn do_single_rpc_call<\n\tP: serde::Serialize + 'static,\n\tR: serde::de::DeserializeOwned + Send + 'static,\n>(\n\tlock_file: &Path,\n\tlog: log::Logger,\n\tmethod: &'static str,\n\tparams: P,\n) -> Result<R, CodeError> {\n\tlet client = match connect_as_client(lock_file).await {\n\t\tOk(p) => p,\n\t\tErr(CodeError::SingletonLockfileOpenFailed(_))\n\t\t| Err(CodeError::SingletonLockedProcessExited(_)) => {\n\t\t\treturn Err(CodeError::NoRunningTunnel);\n\t\t}\n\t\tErr(e) => return Err(e),\n\t};\n\n\tlet (msg_tx, msg_rx) = mpsc::unbounded_channel();\n\tlet mut rpc = new_json_rpc();\n\tlet caller = rpc.get_caller(msg_tx);\n\tlet (read, write) = socket_stream_split(client);\n\n\tlet rpc = tokio::spawn(async move {\n\t\tstart_json_rpc(\n\t\t\trpc.methods(()).build(log),\n\t\t\tread,\n\t\t\twrite,\n\t\t\tmsg_rx,\n\t\t\tShutdownRequest::create_rx([ShutdownRequest::CtrlC]),\n\t\t)\n\t\t.await\n\t\t.unwrap();\n\t});\n\n\tlet r = caller.call(method, params).await.unwrap();\n\trpc.abort();\n\tr.map_err(CodeError::TunnelRpcCallFailed)\n}\n"
  },
  {
    "path": "cli/src/tunnels/singleton_server.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tpin::Pin,\n\tsync::{Arc, Mutex},\n};\n\nuse super::{\n\tcode_server::CodeServerArgs,\n\tcontrol_server::ServerTermination,\n\tdev_tunnels::{ActiveTunnel, StatusLock},\n\tprotocol,\n\tshutdown_signal::{ShutdownRequest, ShutdownSignal},\n};\nuse crate::{\n\tasync_pipe::socket_stream_split,\n\tjson_rpc::{new_json_rpc, start_json_rpc, JsonRpcSerializer},\n\tlog,\n\trpc::{RpcCaller, RpcDispatcher},\n\tsingleton::SingletonServer,\n\tstate::LauncherPaths,\n\ttunnels::code_server::print_listening,\n\tupdate_service::Platform,\n\tutil::{\n\t\terrors::{AnyError, CodeError},\n\t\tring_buffer::RingBuffer,\n\t\tsync::{Barrier, ConcatReceivable},\n\t},\n};\nuse futures::future::Either;\nuse tokio::{\n\tpin,\n\tsync::{broadcast, mpsc},\n\ttask::JoinHandle,\n};\n\npub struct SingletonServerArgs<'a> {\n\tpub server: &'a mut RpcServer,\n\tpub log: log::Logger,\n\tpub tunnel: ActiveTunnel,\n\tpub paths: &'a LauncherPaths,\n\tpub code_server_args: &'a CodeServerArgs,\n\tpub platform: Platform,\n\tpub shutdown: Barrier<ShutdownSignal>,\n\tpub log_broadcast: &'a BroadcastLogSink,\n}\n\nstruct StatusInfo {\n\tname: String,\n\tlock: StatusLock,\n}\n\n#[derive(Clone)]\nstruct SingletonServerContext {\n\tlog: log::Logger,\n\tshutdown_tx: broadcast::Sender<ShutdownSignal>,\n\tbroadcast_tx: broadcast::Sender<Vec<u8>>,\n\t// ugly: a lock in a lock. current_status needs to be provided only\n\t// after we set up the tunnel, however the tunnel is created after the\n\t// singleton server starts to avoid a gap in singleton availability.\n\t// However, this should be safe, as the lock is only used for immediate\n\t// data reads (in the `status` method).\n\tcurrent_status: Arc<Mutex<Option<StatusInfo>>>,\n}\n\npub struct RpcServer {\n\tfut: JoinHandle<Result<(), CodeError>>,\n\tshutdown_broadcast: broadcast::Sender<ShutdownSignal>,\n\tcurrent_status: Arc<Mutex<Option<StatusInfo>>>,\n}\n\npub fn make_singleton_server(\n\tlog_broadcast: BroadcastLogSink,\n\tlog: log::Logger,\n\tserver: SingletonServer,\n\tshutdown_rx: Barrier<ShutdownSignal>,\n) -> RpcServer {\n\tlet (shutdown_broadcast, _) = broadcast::channel(4);\n\tlet rpc = new_json_rpc();\n\n\tlet current_status = Arc::new(Mutex::default());\n\tlet mut rpc = rpc.methods(SingletonServerContext {\n\t\tlog: log.clone(),\n\t\tshutdown_tx: shutdown_broadcast.clone(),\n\t\tbroadcast_tx: log_broadcast.get_brocaster(),\n\t\tcurrent_status: current_status.clone(),\n\t});\n\n\trpc.register_sync(\n\t\tprotocol::singleton::METHOD_RESTART,\n\t\t|_: protocol::EmptyObject, ctx| {\n\t\t\tinfo!(ctx.log, \"restarting tunnel after client request\");\n\t\t\tlet _ = ctx.shutdown_tx.send(ShutdownSignal::RpcRestartRequested);\n\t\t\tOk(())\n\t\t},\n\t);\n\n\trpc.register_sync(\n\t\tprotocol::singleton::METHOD_STATUS,\n\t\t|_: protocol::EmptyObject, c| {\n\t\t\tOk(c.current_status\n\t\t\t\t.lock()\n\t\t\t\t.unwrap()\n\t\t\t\t.as_ref()\n\t\t\t\t.map(|s| protocol::singleton::StatusWithTunnelName {\n\t\t\t\t\tname: Some(s.name.clone()),\n\t\t\t\t\tstatus: s.lock.read(),\n\t\t\t\t})\n\t\t\t\t.unwrap_or_default())\n\t\t},\n\t);\n\n\trpc.register_sync(\n\t\tprotocol::singleton::METHOD_SHUTDOWN,\n\t\t|_: protocol::EmptyObject, ctx| {\n\t\t\tinfo!(\n\t\t\t\tctx.log,\n\t\t\t\t\"closing tunnel and all clients after a shutdown request\"\n\t\t\t);\n\t\t\tlet _ = ctx.broadcast_tx.send(RpcCaller::serialize_notify(\n\t\t\t\t&JsonRpcSerializer {},\n\t\t\t\tprotocol::singleton::METHOD_SHUTDOWN,\n\t\t\t\tprotocol::EmptyObject {},\n\t\t\t));\n\t\t\tlet _ = ctx.shutdown_tx.send(ShutdownSignal::RpcShutdownRequested);\n\t\t\tOk(())\n\t\t},\n\t);\n\n\t// we tokio spawn instead of keeping a future, since we want it to progress\n\t// even outside of the start_singleton_server loop (i.e. while the tunnel restarts)\n\tlet fut = tokio::spawn(async move {\n\t\tserve_singleton_rpc(log_broadcast, server, rpc.build(log), shutdown_rx).await\n\t});\n\tRpcServer {\n\t\tshutdown_broadcast,\n\t\tcurrent_status,\n\t\tfut,\n\t}\n}\n\npub async fn start_singleton_server(\n\targs: SingletonServerArgs<'_>,\n) -> Result<ServerTermination, AnyError> {\n\tlet shutdown_rx = ShutdownRequest::create_rx([\n\t\tShutdownRequest::Derived(Box::new(args.server.shutdown_broadcast.subscribe())),\n\t\tShutdownRequest::Derived(Box::new(args.shutdown.clone())),\n\t]);\n\n\t{\n\t\tprint_listening(&args.log, &args.tunnel.name);\n\t\tlet mut status = args.server.current_status.lock().unwrap();\n\t\t*status = Some(StatusInfo {\n\t\t\tname: args.tunnel.name.clone(),\n\t\t\tlock: args.tunnel.status(),\n\t\t})\n\t}\n\n\tlet serve_fut = super::serve(\n\t\t&args.log,\n\t\targs.tunnel,\n\t\targs.paths,\n\t\targs.code_server_args,\n\t\targs.platform,\n\t\tshutdown_rx,\n\t);\n\n\tpin!(serve_fut);\n\n\tmatch futures::future::select(Pin::new(&mut args.server.fut), &mut serve_fut).await {\n\t\tEither::Left((rpc_result, fut)) => {\n\t\t\t// the rpc server will only end as a result of a graceful shutdown, or\n\t\t\t// with an error. Return the result of the eventual shutdown of the\n\t\t\t// control server.\n\t\t\trpc_result.unwrap()?;\n\t\t\tfut.await\n\t\t}\n\t\tEither::Right((ctrl_result, _)) => ctrl_result,\n\t}\n}\n\nasync fn serve_singleton_rpc<C: Clone + Send + Sync + 'static>(\n\tlog_broadcast: BroadcastLogSink,\n\tmut server: SingletonServer,\n\tdispatcher: RpcDispatcher<JsonRpcSerializer, C>,\n\tshutdown_rx: Barrier<ShutdownSignal>,\n) -> Result<(), CodeError> {\n\tlet mut own_shutdown = shutdown_rx.clone();\n\tlet shutdown_fut = own_shutdown.wait();\n\tpin!(shutdown_fut);\n\n\tloop {\n\t\tlet cnx = tokio::select! {\n\t\t\tc = server.accept() => c?,\n\t\t\t_ = &mut shutdown_fut => return Ok(()),\n\t\t};\n\n\t\tlet (read, write) = socket_stream_split(cnx);\n\t\tlet dispatcher = dispatcher.clone();\n\t\tlet msg_rx = log_broadcast.replay_and_subscribe();\n\t\tlet shutdown_rx = shutdown_rx.clone();\n\t\ttokio::spawn(async move {\n\t\t\tlet _ = start_json_rpc(dispatcher.clone(), read, write, msg_rx, shutdown_rx).await;\n\t\t});\n\t}\n}\n\n/// Log sink that can broadcast and replay log events. Used for transmitting\n/// logs from the singleton to all clients. This should be created and injected\n/// into other services, like the tunnel, before `start_singleton_server`\n/// is called.\n#[derive(Clone)]\npub struct BroadcastLogSink {\n\trecent: Arc<Mutex<RingBuffer<Vec<u8>>>>,\n\ttx: broadcast::Sender<Vec<u8>>,\n}\n\nimpl Default for BroadcastLogSink {\n\tfn default() -> Self {\n\t\tSelf::new()\n\t}\n}\n\nimpl BroadcastLogSink {\n\tpub fn new() -> Self {\n\t\tlet (tx, _) = broadcast::channel(64);\n\t\tSelf {\n\t\t\ttx,\n\t\t\trecent: Arc::new(Mutex::new(RingBuffer::new(50))),\n\t\t}\n\t}\n\n\tpub fn get_brocaster(&self) -> broadcast::Sender<Vec<u8>> {\n\t\tself.tx.clone()\n\t}\n\n\tfn replay_and_subscribe(\n\t\t&self,\n\t) -> ConcatReceivable<Vec<u8>, mpsc::UnboundedReceiver<Vec<u8>>, broadcast::Receiver<Vec<u8>>>\n\t{\n\t\tlet (log_replay_tx, log_replay_rx) = mpsc::unbounded_channel();\n\n\t\tfor log in self.recent.lock().unwrap().iter() {\n\t\t\tlet _ = log_replay_tx.send(log.clone());\n\t\t}\n\n\t\tlet _ = log_replay_tx.send(RpcCaller::serialize_notify(\n\t\t\t&JsonRpcSerializer {},\n\t\t\tprotocol::singleton::METHOD_LOG_REPLY_DONE,\n\t\t\tprotocol::EmptyObject {},\n\t\t));\n\n\t\tConcatReceivable::new(log_replay_rx, self.tx.subscribe())\n\t}\n}\n\nimpl log::LogSink for BroadcastLogSink {\n\tfn write_log(&self, level: log::Level, prefix: &str, message: &str) {\n\t\tlet s = JsonRpcSerializer {};\n\t\tlet serialized = RpcCaller::serialize_notify(\n\t\t\t&s,\n\t\t\tprotocol::singleton::METHOD_LOG,\n\t\t\tprotocol::singleton::LogMessage {\n\t\t\t\tlevel: Some(level),\n\t\t\t\tprefix,\n\t\t\t\tmessage,\n\t\t\t},\n\t\t);\n\n\t\tlet _ = self.tx.send(serialized.clone());\n\t\tself.recent.lock().unwrap().push(serialized);\n\t}\n\n\tfn write_result(&self, message: &str) {\n\t\tself.write_log(log::Level::Info, \"\", message);\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/socket_signal.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse serde::Serialize;\nuse tokio::sync::mpsc;\n\nuse crate::msgpack_rpc::MsgPackCaller;\n\nuse super::{\n\tprotocol::{ClientRequestMethod, RefServerMessageParams, ServerClosedParams, ToClientRequest},\n\tserver_multiplexer::ServerMultiplexer,\n};\n\npub struct CloseReason(pub String);\n\npub enum SocketSignal {\n\t/// Signals bytes to send to the socket.\n\tSend(Vec<u8>),\n\t/// Closes the socket (e.g. as a result of an error)\n\tCloseWith(CloseReason),\n}\n\nimpl From<Vec<u8>> for SocketSignal {\n\tfn from(v: Vec<u8>) -> Self {\n\t\tSocketSignal::Send(v)\n\t}\n}\n\nimpl SocketSignal {\n\tpub fn from_message<T>(msg: &T) -> Self\n\twhere\n\t\tT: Serialize + ?Sized,\n\t{\n\t\tSocketSignal::Send(rmp_serde::to_vec_named(msg).unwrap())\n\t}\n}\n\n/// todo@connor4312: cleanup once everything is moved to rpc standard interfaces\n#[allow(dead_code)]\npub enum ServerMessageDestination {\n\tChannel(mpsc::Sender<SocketSignal>),\n\tRpc(MsgPackCaller),\n}\n\n/// Struct that handling sending or closing a connected server socket.\npub struct ServerMessageSink {\n\tid: u16,\n\ttx: Option<ServerMessageDestination>,\n\tmultiplexer: ServerMultiplexer,\n\tflate: Option<FlateStream<CompressFlateAlgorithm>>,\n}\n\nimpl ServerMessageSink {\n\tpub fn new_plain(\n\t\tmultiplexer: ServerMultiplexer,\n\t\tid: u16,\n\t\ttx: ServerMessageDestination,\n\t) -> Self {\n\t\tSelf {\n\t\t\ttx: Some(tx),\n\t\t\tid,\n\t\t\tmultiplexer,\n\t\t\tflate: None,\n\t\t}\n\t}\n\n\tpub fn new_compressed(\n\t\tmultiplexer: ServerMultiplexer,\n\t\tid: u16,\n\t\ttx: ServerMessageDestination,\n\t) -> Self {\n\t\tSelf {\n\t\t\ttx: Some(tx),\n\t\t\tid,\n\t\t\tmultiplexer,\n\t\t\tflate: Some(FlateStream::new(CompressFlateAlgorithm(\n\t\t\t\tflate2::Compress::new(flate2::Compression::new(2), false),\n\t\t\t))),\n\t\t}\n\t}\n\n\tpub async fn server_closed(&mut self) -> Result<(), mpsc::error::SendError<SocketSignal>> {\n\t\tself.server_message_or_closed(None).await\n\t}\n\n\tpub async fn server_message(\n\t\t&mut self,\n\t\tbody: &[u8],\n\t) -> Result<(), mpsc::error::SendError<SocketSignal>> {\n\t\tself.server_message_or_closed(Some(body)).await\n\t}\n\n\tasync fn server_message_or_closed(\n\t\t&mut self,\n\t\tbody_or_end: Option<&[u8]>,\n\t) -> Result<(), mpsc::error::SendError<SocketSignal>> {\n\t\tlet i = self.id;\n\t\tlet mut tx = self.tx.take().unwrap();\n\n\t\tif let Some(b) = body_or_end {\n\t\t\tlet body = self.get_server_msg_content(b, false);\n\t\t\tlet r =\n\t\t\t\tsend_data_or_close_if_none(i, &mut tx, Some(RefServerMessageParams { i, body }))\n\t\t\t\t\t.await;\n\t\t\tself.tx = Some(tx);\n\t\t\treturn r;\n\t\t}\n\n\t\tlet tail = self.get_server_msg_content(&[], true);\n\t\tif !tail.is_empty() {\n\t\t\tlet _ = send_data_or_close_if_none(\n\t\t\t\ti,\n\t\t\t\t&mut tx,\n\t\t\t\tSome(RefServerMessageParams { i, body: tail }),\n\t\t\t)\n\t\t\t.await;\n\t\t}\n\n\t\tlet r = send_data_or_close_if_none(i, &mut tx, None).await;\n\t\tself.tx = Some(tx);\n\t\tr\n\t}\n\n\tpub(crate) fn get_server_msg_content<'a: 'b, 'b>(\n\t\t&'a mut self,\n\t\tbody: &'b [u8],\n\t\tfinish: bool,\n\t) -> &'b [u8] {\n\t\tif let Some(flate) = &mut self.flate {\n\t\t\tif let Ok(compressed) = flate.process(body, finish) {\n\t\t\t\treturn compressed;\n\t\t\t}\n\t\t}\n\n\t\tbody\n\t}\n}\n\nasync fn send_data_or_close_if_none(\n\ti: u16,\n\ttx: &mut ServerMessageDestination,\n\tmsg: Option<RefServerMessageParams<'_>>,\n) -> Result<(), mpsc::error::SendError<SocketSignal>> {\n\tmatch tx {\n\t\tServerMessageDestination::Channel(tx) => {\n\t\t\ttx.send(SocketSignal::from_message(&ToClientRequest {\n\t\t\t\tid: None,\n\t\t\t\tparams: match msg {\n\t\t\t\t\tSome(msg) => ClientRequestMethod::servermsg(msg),\n\t\t\t\t\tNone => ClientRequestMethod::serverclose(ServerClosedParams { i }),\n\t\t\t\t},\n\t\t\t}))\n\t\t\t.await\n\t\t}\n\t\tServerMessageDestination::Rpc(caller) => {\n\t\t\tmatch msg {\n\t\t\t\tSome(msg) => caller.notify(\"servermsg\", msg),\n\t\t\t\tNone => caller.notify(\"serverclose\", ServerClosedParams { i }),\n\t\t\t};\n\t\t\tOk(())\n\t\t}\n\t}\n}\n\nimpl Drop for ServerMessageSink {\n\tfn drop(&mut self) {\n\t\tself.multiplexer.remove(self.id);\n\t}\n}\n\npub struct ClientMessageDecoder {\n\tdec: Option<FlateStream<DecompressFlateAlgorithm>>,\n}\n\nimpl ClientMessageDecoder {\n\tpub fn new_plain() -> Self {\n\t\tClientMessageDecoder { dec: None }\n\t}\n\n\tpub fn new_compressed() -> Self {\n\t\tClientMessageDecoder {\n\t\t\tdec: Some(FlateStream::new(DecompressFlateAlgorithm(\n\t\t\t\tflate2::Decompress::new(false),\n\t\t\t))),\n\t\t}\n\t}\n\n\tpub fn decode<'a: 'b, 'b>(&'a mut self, message: &'b [u8]) -> std::io::Result<&'b [u8]> {\n\t\tmatch &mut self.dec {\n\t\t\t// todo@connor4312 do we ever need to actually 'finish' the client message stream?\n\t\t\tSome(d) => d.process(message, false),\n\t\t\tNone => Ok(message),\n\t\t}\n\t}\n}\n\ntrait FlateAlgorithm {\n\tfn total_in(&self) -> u64;\n\tfn total_out(&self) -> u64;\n\tfn process(\n\t\t&mut self,\n\t\tcontents: &[u8],\n\t\toutput: &mut [u8],\n\t\tfinish: bool,\n\t) -> Result<flate2::Status, std::io::Error>;\n}\n\nstruct DecompressFlateAlgorithm(flate2::Decompress);\n\nimpl FlateAlgorithm for DecompressFlateAlgorithm {\n\tfn total_in(&self) -> u64 {\n\t\tself.0.total_in()\n\t}\n\n\tfn total_out(&self) -> u64 {\n\t\tself.0.total_out()\n\t}\n\n\tfn process(\n\t\t&mut self,\n\t\tcontents: &[u8],\n\t\toutput: &mut [u8],\n\t\tfinish: bool,\n\t) -> Result<flate2::Status, std::io::Error> {\n\t\tlet mode = match finish {\n\t\t\ttrue => flate2::FlushDecompress::Finish,\n\t\t\tfalse => flate2::FlushDecompress::None,\n\t\t};\n\n\t\tself.0\n\t\t\t.decompress(contents, output, mode)\n\t\t\t.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))\n\t}\n}\n\nstruct CompressFlateAlgorithm(flate2::Compress);\n\nimpl FlateAlgorithm for CompressFlateAlgorithm {\n\tfn total_in(&self) -> u64 {\n\t\tself.0.total_in()\n\t}\n\n\tfn total_out(&self) -> u64 {\n\t\tself.0.total_out()\n\t}\n\n\tfn process(\n\t\t&mut self,\n\t\tcontents: &[u8],\n\t\toutput: &mut [u8],\n\t\tfinish: bool,\n\t) -> Result<flate2::Status, std::io::Error> {\n\t\tlet mode = match finish {\n\t\t\ttrue => flate2::FlushCompress::Finish,\n\t\t\tfalse => flate2::FlushCompress::Sync,\n\t\t};\n\n\t\tself.0\n\t\t\t.compress(contents, output, mode)\n\t\t\t.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))\n\t}\n}\n\nstruct FlateStream<A>\nwhere\n\tA: FlateAlgorithm,\n{\n\tflate: A,\n\toutput: Vec<u8>,\n}\n\nimpl<A> FlateStream<A>\nwhere\n\tA: FlateAlgorithm,\n{\n\tpub fn new(alg: A) -> Self {\n\t\tSelf {\n\t\t\tflate: alg,\n\t\t\toutput: vec![0; 4096],\n\t\t}\n\t}\n\n\tpub fn process(&mut self, contents: &[u8], finish: bool) -> std::io::Result<&[u8]> {\n\t\tlet mut out_offset = 0;\n\t\tlet mut in_offset = 0;\n\t\tloop {\n\t\t\tlet in_before = self.flate.total_in();\n\t\t\tlet out_before = self.flate.total_out();\n\n\t\t\tmatch self.flate.process(\n\t\t\t\t&contents[in_offset..],\n\t\t\t\t&mut self.output[out_offset..],\n\t\t\t\tfinish,\n\t\t\t) {\n\t\t\t\tOk(flate2::Status::Ok | flate2::Status::BufError) => {\n\t\t\t\t\tlet processed_len = in_offset + (self.flate.total_in() - in_before) as usize;\n\t\t\t\t\tlet output_len = out_offset + (self.flate.total_out() - out_before) as usize;\n\t\t\t\t\tif processed_len < contents.len() || output_len == self.output.len() {\n\t\t\t\t\t\t// If we filled the output buffer but there's more data to compress,\n\t\t\t\t\t\t// or the output got filled after processing all input, extend\n\t\t\t\t\t\t// the output buffer and keep compressing.\n\t\t\t\t\t\tout_offset = output_len;\n\t\t\t\t\t\tin_offset = processed_len;\n\t\t\t\t\t\tif output_len == self.output.len() {\n\t\t\t\t\t\t\tself.output.resize(self.output.len() * 2, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Ok(&self.output[..output_len]);\n\t\t\t\t}\n\t\t\t\tOk(flate2::Status::StreamEnd) => {\n\t\t\t\t\treturn Err(std::io::Error::new(\n\t\t\t\t\t\tstd::io::ErrorKind::UnexpectedEof,\n\t\t\t\t\t\t\"unexpected stream end\",\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t\tErr(e) => return Err(e),\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\tuse base64::{engine::general_purpose, Engine as _};\n\n\t#[test]\n\tfn test_round_trips_compression() {\n\t\tlet (tx, _) = mpsc::channel(1);\n\t\tlet mut sink = ServerMessageSink::new_compressed(\n\t\t\tServerMultiplexer::new(),\n\t\t\t0,\n\t\t\tServerMessageDestination::Channel(tx),\n\t\t);\n\t\tlet mut decompress = ClientMessageDecoder::new_compressed();\n\n\t\t// 3000 and 30000 test resizing the buffer\n\t\tfor msg_len in [3, 30, 300, 3000, 30000] {\n\t\t\tlet vals = (0..msg_len).map(|v| v as u8).collect::<Vec<u8>>();\n\t\t\tlet compressed = sink.get_server_msg_content(&vals, false);\n\t\t\tassert_ne!(compressed, vals);\n\t\t\tlet decompressed = decompress.decode(compressed).unwrap();\n\t\t\tassert_eq!(decompressed.len(), vals.len());\n\t\t\tassert_eq!(decompressed, vals);\n\t\t}\n\t}\n\n\tconst TEST_191501_BUFS: [&str; 3] = [\n\t\t\"TMzLSsQwFIDhfSDv0NXsYs2kubQQXIgX0IUwHVyfpCdjaSYZmkjRpxdEBnf/5vufHsZmK0PbxuwhfuRS2zmVecKVBd1rEYTUqL3gCoxBY7g2RoWOg+nE7Z4H1N3dij6nhL7OOY15wWTBeN87IVkACayTijMXcGJagevkxJ3i/e4/swFiwV1Z5ss7ukP2C9bHFc5YbF0/sXkex7eW33BK7q9maI6X0woTUvIXQ7OhK7+YkgN6dn2xF/wamhTgVM8xHl8Tr2kvvv2SymYtJZT8AAAA//8=\",\n\t\t\"YmJAgIhqpZLKglQlK6XE0pIMJR0IZaVUlJqbX5JaXAwSSkksSQQK+WUkung5BWam6TumVaWEFhQHJBuUGrg4WUY4eQV4GOTnhwVkWJiX5lRmOdoq1QIAAAD//w==\",\n\t\t\"jHdTdCZQk23UsW3btpOObeuLbdu2bdvs2E46tm17+p+71ty5b/ect13aVbte6n8XmfmfIv9rev8BaP8BNjYWzv8s/78S/ItxsjCzNTEW/T+s2DhZaNSE5Bi41B0kFBjZ2VjYtAzlzTWUHJWtJC2dPFUclDmZPW2EFQEAGkN3Rb7/tGPiZOFoYizy/1LhZvnXu6OZEzG3F/F/duNf6v/Zk39B9naO/yAuRi5GHx8FeWUVQob/JZTEPx9uQiZmDnrGf5/pv93+KeX0b7OEzExs/9kALo7WDBz0nEz0/wxCAICJ/T+QmoH6v0V2/udCJ2Nia+Zs/i8L47/3f+H/cOMmNLS3t7YAGP6HLIM7nZubG52pnaMN3b+kJrYAO2MT4//IGvKquY+4Oly7Z01ajWRItkE1jacYu9tcSU339/OnBkYgUbBD9rHonA9pvJV7heYuoFUpRcnKi8RwoJrSkW7ePD6N3ANHPr1UW7wPu5907dLnd4hlXwziROJkDgejfKv5ztZzPgXoUaEPEsM6y752iLyMJdkKwrSo+LAiaFp4HSRvSAnMT2Ck9JHIyQNuaFslDhaLQMIP+B7AGRyZFXeqpFF8HvfFVkQHqGejNjdizFvRHkndAl8AtfEqRHfxPFAit0twsNMyaONmusi/YHvmbQhpTRnyOV0gg+tXzisWmDsLBFAutCcGRHR0Cigere6p3A7NDGmBxHAZSmK/LGHKCeyUqN9fyBIUmyCtV99ptMaQWt4KAny5Fg+nTU1gBvBq4RvHlGCF9WL+2ZxKDfB2gr2GQaUY76Tv7x79VKbxwC5GITg2q02XPy6ZNFnLryVCGskiYPFPQLAsU+LrTvbyQTk7KNUFHwzBUTP1MiKg9LCdWAs8BZx3FHYaJyvIPw4nJpUAP3rP8GPdJeb3iIJ7i8xf15F71iT47rNv+qCXaQD9NBo8PcRVqnEy3vyrPG5SO8HwSDk9PhQJe2xo4Q52soIDB3v1jYYmR8ZkuoNq3Moy6BDjR1WBCTFJEHjdSSADxzRJ2hnozSOLmzTLuKgwWnFU1aGpQ5S8Ry7ME7gVb+CwnFvVtrpofL+DXvE3CY9Fhqe0y4Sq1yLyn/vcgA7ShFG+QnTB5zaKS3Ndj6LSCxwiNivY9R9TsAXobw4Exqog7xCAjYxNIbDuo/fC1QKpFUzvxw+7Rjc8J2lJg80YveK++I5fqJVAFu0Gb4SuJAd8ernBkpyy9lbou0enEfQMOjjucNiy+rgpU4pl+ERgt/Be+8G9l0RbeUwthLZp4ARnBHAB2mcB2o1cJIbhXnMiYStLmjwI+i+NOhBvRV8nmAVslkGdsEVU6Q3hYy/cT/QRTbEF0W58bkYPCyx93ESp7/sWkTG5i9GInCwW+zw1NIRfi2zkuz7KIzOlg33b5/R60L2tjlPtcLjZYL9qGWXwgPApKkndbDq0HhRCQYTyEZ1nC4MFi9NuasFm4t4UV4/W4L0A8YwsXH2m8Rh7hl1No5oIIlAGi5Er/amKw5mAA/Hvwbzfd4TGx66MHWA9t6NAA2WPx538griN7LCqE2315o09fNbOumI6fM1CN0AJT2FheQgaG4tdPFPn6uAeDXUDT8OkTdRFNi6Av4rwo6NnyfLnLYxBNdAhHs75bAedI5egbRrWLC48JT7aKsV+VsOmLsk0TGh6ISxI3WzskVbVFr6HGLy8jee1ZiMF0wzd/B4LvlyGIMa6HD+JBsGOH6vukgqV7ywTl6P+Wo8mTZHo12d7u09Z59eyXJcZKnqY4YzEzGUrlGzvO0Rgfgsse3RMPWJSpsETWqo5zMTtzYk9HANeoA5ubNoO/jjtLyModk/iH6XLiFD1591q+nXNb3Ve2v/aHlJQQYaytpOULvnsEYGIQH9+y3eK1Rgqgs7fxD3uzpv06A/afiToieIJpbjLhy3JZBEAmtN5UgJm6SuCbqgKJ+fDsuwMp/m0fCNVqrYORcBpKTvIWFzWF/leWJntKUis0dPrWy5x7Yu2GhqJh3GN2bT8w1uIh1haSlBmhMOzV3yNUmNcjqFV+GziNt6twoPDJ+4m7TE7hP2E9mEhiYihUDjT0X2Q4k0GIqdIl6fpoFPK0zdfRfbEkP2Ulr7fzfVqCYp9iuxtZFqBafBWLNHVjYtIn9/Z6Z3mP8DBfOYrXbMXldLjKW6rHr3w/LACe+LINkxcxQ9rxxBffepkhhj8NQ7vpyXpudfYmfPMsnai+b5VI5QMcyZly26kxMo6KGGilNYyX/hLaowV4GjIEY7kHRCNmJIBNevb1ag4w98wLWMtfyPMLn18o9cFKiJk2kjZmRBFh0S0Bd7AjxiNO8YdDQ83lBGS5JrxmLG+hW2oGYQllWS2UjK3+loONmC6NpPNgUiNhDQ05s24iRJZ/bzrgBskPLGukoMu8NK8CQNKZE8zzmsCrnkU53iPeZd/UT8ox6WMMZOtDv8YyQpTmhbzXCQW9ogbfgqH447dJFZuPkT4MGfKw+0c5L6aLWqAadBU9yLftFVsi8GZOSB9Ctv9/fJZ5SmlNgt25uGvspB9y1PQGEmLQyjFiGK7kveEw4Knn9lv/9GV2YlCdeRTAUyOS56k6G4ajfxNtMHPaDqIWTM1yBem3dShwkhD0nMXit14/wHRHosy59T+nkuvxG1MbTx8GJM45rvrOmUW0nwxNNdsdqFCNPWn+GcYzIdwCNFtHmdSKNOecfZZVJnKzuGbs41wRQIkv1E1p6ITiPxv+zKWflEU76wHOPrDx4rmyw3Z6MqaP316eOcW43JwBvp9hJuMUHr0TFkvjd5KzvmUSrZfYvpPZ2humVwOsjChiFzc7aoBMt8MdXyf2LIhuhBAg8Ue3wLqlg3cEYBS2z+uzrS5bJzmzH3NGmI+M/WbHOkbqcNtSoZjwp4NI5bSpCKWs7BqrK8sfsUC+UpA08Lfc4CpcBmsTyuHncO2gLc9jPMT+SBAgiZxTDncaiM+YG19ntqYSttys+jpASZDwEWjYRN8QURClAIs0G0KKoY0jjWcc0rypYXiCsHD9+kjtnYJHuzeZw2GQ5U5j7acLM8nyuy8bSJaKZXFq8TJkQ/p4lSkKHpVQPi+dWF4jYaQFEGiPAuiLOGzOE/f8B2rePs9zps7QivUyIiM8fsbPx5mwaC7FbjdihjbM198akLx99SpXAF4fh6d/xwLppw2kFrKa0UsTa/emTuV+6l2/8WmVWLd8JJAhcE+qbMrJBrohgGdDNZIRxJOrsFCzSmu2ykTCZnZlPITlbK/hUA/+DwdtJbmzKczEWAS9ENNbxHNSbn4Nqsz0yvhUE2a/FT6tvnBbXm/X2yLQQhxuVyNCsK2TeUNifqlsCEAJAALqqNI/NX+owJEAk+KehT/fpCsXGTsT3kFsUiPNWAkOEuHviK3Nzpu53edKRZgInWOWhGnd8aD6k7kio0tLT8i/PkxVrdZftlNrqPZfiEXkqX3hM526HzLGVzlr+CvTBKxsU8ROxHvBGWzJk4Tt0uDhZessy5BDFVx2xiYxMTXfQyv8NF0Op3CKCFvH1KbE2Z2TGCvpOEH7LKVK5TyTVSP+yah8TkpL1cHorIRxz2a5cMNMZGgdooqszII7PJuT3Ii0GpCCXe3v5mzysGhVKBulynWOeMrlJ4jKA4xzAXIg7ReLCGOntAOvU7qD+5UBufLWxx/3cqhuMcZDnR2dUjJuFG5LuFiwnvboFRMjVTvVJkcNdUc7b+0auIQWC1E3hTQx422OCMuGvayP3WMCGe8IClwSw4f1uA5LkoDYZbVQo1SUzETYNPQUK5BTJy7YRq4ln9vLvDHDImNd3TiWnsL7Zp9qWVSSTfSVSyZTT4fJqKIZ/Kcy7IkXFyv0Frw64R7y0vM+tAu+0kebn9y+DlN2xmi7nmf81iI1xffS5+ehMzQJTIa8SjVc8kCf14eOLiR7TgCnHcJieDFQI9r9K9co2G0hpitdihrbb56XvossnHl8Fu4JRLBPgKXsAQyX3v3BUHuw42rmeQXz74oZzmEIG13oteilg9HOUyoR5NHE94cYtIqP80qheAh9uQA9e3+TSmiLy6dsU625mYOYcPixVm9ZYuiOtLWQ3tT8j2T111qqjqNu6yUSxlIAh0+ANUEhEh9Uoj9v89/WqlGXNWPDmKfRtn+yFVoyggl8PjW0GB7qfreaEuoqouCGoV+lWma6sNZyKYQGIn51nzIyO1uUlRQZq5j8aTQgcXlNYi5rXALJ2Kj8nEbJT8OqXEt0fbWPKaLQZch23yR9RLyaXMpTIzzRBkoFY5g0MfTWFLbcMynydkZITcfLTSDeD/fxSqUzWmgjk9j1aQ07KUBInTRErSbfEhgCVikEENWXpOubo3XV4YBv9CJYSuXnSv0d3jLQdHefqwT7+Gyqy0ZJYicFYw3ma+acapIZw2r4qg4BNKbSbkMKOuWidsr1dxjS9bjSYoNH/VDBdbgXpXTpPJosDIjwMHsV48OfhwZjvnAC0r2yJ3+NPhBP4g/GU14mpdefzvR08OElSHLpZidGsL5GGtpzcohM5sQ48TMsOs6Cy3vvgKR1oanGjGa8dRN+UaaAWm1dieSOjvXzIIVPp3zoKEgVu9zlP2W5NtNSVDfceVy/cA2IFjOlKa5EiLEEA57fuxvGmOvxCB+ZROvg6KOi6EbxLMylQEbvzctlbmEJ0S32x1usYisIWFfCLX/SEETVFuAxZJej9AcvkolOkSLNlohZdKzOYeRMfQM/RMT4JwSfFqHgIq4XeYPtTzMO2ZkTdOjdrrWL0ZMFosuXiKD/9qKKbo1FjqjwiT5a4uIaPdU95J52kiPoS7adOxUFiypbB9SrLFTABESJrPr0qMSVCi9cMME+Vt2Qq9gYFIvXoDRAR0SP04c/2A1r/tvxBu6JRGDB9cwYWOE1g8W+W/vju6WwPvifEO4AQ+KD3bGEhffrUWM1SnsAZBbJOgep/M1iU/HX4uNGb6Dmz+0PQdJAo7TkA2D+Wigyb9CQUfK16vwLvIIvMnylTcOOIAUtbiy2/lcdbmnQcFMt7ZZLQxBemf8S5L8jkyl1WLZyVNGDm5qf/72TQLs6KK4ljCJqMt0F6p8tidu/52WK95lYzKiZy6nlOSKadsCEWX5+eMzpJu8ZjYF5Qf1K54q5wO/T4Y+QYoWlUlXB6MoL0adwXmSs5T7Mht+6k8BO7T5I+3iI54WdYwixTnvlI/TNQSjwGJdxqJOmInihyKgkCx1lUyn/fx6jKZ+1MHPZwvfOg5V9TuCf+aXvjVhcgJHJBilS8ytrZh8FQh23yNbEIMoE6lYyWuYdSKv6831VdffGAP6gvaD3d9aUBJRkHquA1iqVB/ZG+bcJLpeMFJagd95AvGXUIuYwFKFmBtlKkjOuiEbKNKxv+SJ/NQCIGRBxVkm6oqcabuFnskNEhB4FnYnplnCIUZEfsuLirqsm6sSQZ2ZITdUAkmQ308cj5051V8FwogjNmZJyYuNNsOxYzumG33B7Z5k6QHkr2HC4aky5ZHP2bW8quZNaSXEcL5YGfZeTPTOVCv3TA+e4NLZeVocXTUYNWe7pyYjaf6EUeHdXOAMpZk9084KP8PBCwnlNfiZG2fXD+36bvn8sOVcsLvwAT01LEmVgo2E0geZqDPd8OIHJxDVB7VXNeFYIKjKgOjT63Bq49GLdBmwOlTKDljg00eYqLTQO66FPzSTWMc2EMGCae7sVr/OluTg/T4NKFt39gySNurVvPtlXZfqCo3GfCiyTV6iZWeuVMh69PrrozqgCX0mHJ+OyzMtQrTbqUB4BvHZe9Bfo/uyBDmRDWV0vTCz1mz0t+DTOjRkjEiAOFOKSQ5w/L3RgIwmuEgW3kqaQqtwAFIfWb9PxNuLvTLGMttZ3yO5P3aYl9G6jCSrrcr+3m0ICKOTBu8lH/lonRkZOq/08lpP5VtCEak6I+aSIT9tP9LJIZACn/IUe7qE88kjETKmnZT6F1D/1p58pEA0NI4g5CtdHlSXmg0s+zhAKS7tYpvNx96EPw5cCc5+VneGb0RDNvLaa+cEF4M/JuU0PcA9u9gu+PC+byS52tGqNA8yuH7El6JwFI8dXUvX07iAkC2VOvtt4kg0aeiHDyPHJpvvN4TaAH9Bz+WT5FDWNTAz4LC79GO6pQb9j5iojBlt+UUHvr8nfZN6AKa57RMsFTt9m0t0eBVUqR5fgpE/k6+57U9FtAQPZ5ufj66n0Ys1Chyr93K5jhX3GM64JjdryhghfffO150Q+hYrX3a5/fo2ULWBM27UoViPGVCFtmd0Yw1V5F+l8j58Mck1yUYxpU6tg+o1tara6THtW91V2dqC0+ha42qUVZhScMys1ygeqrpwVTvfhsaVH3/e0xXB7cO4UYkBg1ivB9O+90jwFfg1noBWOg7JpyGvPzYuLPz1CzNtVCqtRpqhMbCu4e2xQ++w8gJGD87TjODSjvgsXoDOs/Fs2qzhSatxvKrnW6pmKqwo9j4B12XZ4Sc+4oE2DIquGY8iyYrp9oBkSCQ8kOIkYVD74yj5C+Y/+JkFNVPwwBvarswkuyZUp8gjHCBLFkf0l+yBDWvJ/jZBXyUFSCGDIrpl1USocwndJFH5zst9/ZyaiKGKEO2nEBAuOCo1XTAyPLIjonN2pH7c01ySgFXymnEV0K0UGq78eDfUtxpmcGLtK+75NVraVGD2wNVNrpWJl1al+s+CM4OvabLcM6VnweXcGciDFRmghhWVoE4EqnhFUuFxCB3umtoyn8lKuEy1fmrRsweDOMtUNd0qA6IctHwIM0AOX2Sx0KxqjEhpp+YkfStkyLrzC33yJbUqRbgkDGq1fKfJDAdenpfQOVj6VMCsB208bbzJUcGOWzZtvfnETOnRLxb4LddrcPuP91CawvOVuAphNrIEUsiRon1SrCuL8GVF75tbSHcskqjIVLfycIZlvVjlywu9gBptiORxw/e1CZ7bDeKlTTIK67KQqosSEs1fnc/X0aAxlkqaOEZQdefKhrABuZFa/KTPRhQsFSncg6wI+niscy0rjfkkvg5fe4c17WCpa0eXot7t+4ot9O5+v0H/buYYniE4MzfrsDnJhqu1tLt1z0dNQ60Qz/8RxR7461d9KxJaNTelFLXDQwDHcTCBSk+0BrJVKT9Ls0bHgxr0zDoaDnbnlXjuu9+I+TH6sZYee1kDBqfPV/RKaXBx6yCFxEBosyCqvwmiuHUzItjvCMSpgREhM861FtvcyaGbN1+nFgM0NlPJQdpqz7bpEJcVw8HFp0yAAT61uYy8m51btG5zFKE74t+qEpjkQPOxPzxh52MDHVgMT0vIQcdA2GGXmjLInOlKHy44blBXKhSsvnWk6goe3xaY/vatI9iOJP0zdmqYuV/Z82spbMuwMwDVEEqrn/KPXqWl0G9AIAPPSA/DO5U9NZAn8nW5CcnB359CkSxVmBXbPBph/GvVrjZEiohjaAfRzdYgSBArwPcIhmfsE3ankfWrXOiw0qJgH4UvOuQphVkNCTIDl405MQMo+6Usm6YMkKx93V+wFSt0l6zoNYeELrp5hNwWNc35EVD0YJegiTIgVDqJykV3YM5po2UCDF4a1Ijhgu+mWL/+B3K8OcvmsGG8X/tKBCNPK/0jJT6PKfks/NEJDkcRcfm1ZDp9AFzldq53UZoT4o4zhRSpLA+f6VTIJx4/t78vpyZKMEJmc8RbIp/swFrbSGInwW4NCrovIK+oS5Z3zXeNbGSpuf2oWYAtpQvttaM2LNl4svcEwxvYor7JMy46l1f2SB0Q0PXLIehirHvMLhbfdWLQw0QB7Gq2O0khxvT1LjZ+H+euX7uZmkY9IvXdW0pnDhaNmZKT6nKj9K1bcLT3520W7lrdOzlEMHxtoSMMd9u2LtEkdtO0KIyfVvkXReY+ilkTyBUmcRCEWl27pABXdcl9jZn6A/16Ze1Lv9SFRncN42vpbOS3xkIBPtFwaDftP6IZLtchcxmj3xkeJFH8fFKg5f06HvCjPbxR3US46FTJqo49yM0H1L8wOjSC8wYHb4Mo6Zhh4i48snY9IOVfrIGqFfTsTQ5kxIctBPqGnMO7dl+iu4TUqeHkDk2IkmZSNjB7hp0mmLHKcTAB49JQDsZdlPlcOeADP/r7q/I5vXE8ZHzXqFmxW9v90+JMckU0V0AIrcJK9IQWl4LQR+dRuKRxJwDpy4wa4ymhqnBdjDMqQ/cetUExuVkzntiCPyOz6dMpAx9ZeidxQ02hYjPVqgFg8sCl1lTHTulvk7Nj698usBJMG+IKJorZp7+a97Tr226dW1h++Ic3ERIIDuFrJVY0UvO/vrTZrxZbzT2Ki+UvjN5Ins+P6gU7XLKlAlh4h3u54VXMJO6MqqpSFKXQlRY2fOOn/m5YDfOCvjmhsmrp63Wz9s+kowNsciO+DZa5Mce5qH9/ysvEHv7Sgb3AIZ4+zl1R9px1bU2HI/tcieQUvHkNG0N43uBelEbsrZTfVDAsk7KashZp+QG9k91BWuxlN00Hmaqd3foNx2EwoBe14MbFyJKr0PLJvFrMBQamhlWX31hknK3y9m7F3cIopvO2kIngxuVgZ/c3XOMnJysZcmgeVvouinM2GCcJF5k54InnSO0JJ0g4taICxSdD1NbXw4aVfuPXY2loCOKwXAsHW+vRvIu5yBYsAXeOX1J7LwWwVHOTLjQDRyIwgAsot1J4dr3tRO1u3s72SospfgKrMJdMYtrSJ6zvRQTEDXZcyk3fqtElG55syIjePTyPVPDGCGHVvaqOCWvYDXnsFAy9L3gVg8HaLMerTRuSzj6HjRmyZNheBBZkDOTRmc6yaJVhK/+NCpXgPsW3xyAX6ZGQ44NOAyn9U49Jz5VIUpEfXTK/hDaJeMgl/HmLcfxbBara5U+J5xi9IvwTcMMzxxN/sm/BjLc+34gP33ChIncbfHleQbbQvS6JMkySTA2PCbI/vwYonIZnymVtA3c4fC5zso+ZgTyvnxZkeJdDRPjTUtP6DFIAxMbIotg2e93CXfUp4ciADmTWa4IbuP3n602bqsqzTldZAt7UzolvY0gnTcmZWJC8dCoZhebkdcf9hd+jW/HdVo/YM6s39d1Mqm7PnG2dsXFSCn+yg1redbnDTPpUVi1+T1xd6dGeM7GddroA/qyNLl9dvdvCUGQvRL7BIFQFUZYXRdx27OAStt+iqORvuibZWfLufrRJVM6AoyJNpRo4rALSdtAcfW8d4HJGPEaP1cxl6ErnQz+yDbv+zRMTFCJiuPTJRDXD+ir8hz+eChUN323YpgVJ0Qjl9oqEj9H3SKORfnFaq0337C3oyz0eQ5PedG/d78nJzRP+BfQIOFMDzPSJ40yg+MAgX0P6ZPOiBIW7c/i2j6TQhVyeEUzsjRMYMMiGQl/lgTz9D6Kc/WP4tzbzhRb0Icoy5+sZRiap1rQFjaOVzGUEOXgMoME9voaumyWcTskYTxGdil9CvKBKsHCFx8iZ63V1xcmT2JnOVuYEAqOwD6bSc6KhJznv+nSyG7HNY+ycCXP1NBoG5Z8QgXEcJxUMl0SDUaMAqM4K/NL+ZiQHDbDL38U9eBa9zYaG7xronBtZ7ieC2yMOcMfz4tSvATwPeH+qlTOJQjBtFEzHkFV84bUdVYLaMj8/oM+rVU/4hZCpXR42AXjhfEZBT2M4YZv9ciCjNAo63zbfTv2zt7A6ZYVUkRFW3mRQw0EP7bmK8w4BcVzhy2U0zaJqlBAbc1i/4A+0lmSnyKBISJRF4lrGz1dIsCpZ5AeuDopJNc59Rb7viBjmnA5rBqdrxPhNnReYbJd2k3g7YPAV21Hx4wf7oUsVn8Mu6dgmChDCc1IEc9jxSnHYCWqlCA7YBeUtXTXIJf2qe7knGliksYKnYfX9RnXdeDoIbmKWGsV2mnK+oJPzOlF46TC391bf9GBe8T2rvcXJINCfZBmS60iO+5Yo2NNJQi+Qc9SebaaygxTZOj6rIbNwzdhDEUYCG8zfS9KmEhZKfcz5+9oCIG6mM8oh7q79yxzDIzdpaotBKCgJ9M8jtC/Ee5ZI8adPdXMkB1EEzaGWZBuBvzecpPmTyhzpKBy8FB0kKhEOjY0/utP7JAJKpId0xWuDDsFlSsbCqPgb4wbUqID7Qxu6FUJ1QGCxGYA+u/NXFQesgGrYlWKdm0zY62gtlUv89zV1PwQwB4TNtP16MrfZAuYhqgR2xJ7ON7tWJ49lVyjB5NbzlCGelLKJIkoicwMz1CSQ8b9SO2qk+WMWUPnXqCsHBSU7ews5rZ8ccw539tfEBj9UNPUqW30tjb9BIc5q0ypPa15S8ucZOGEpSGyRLaf8SdSxw1JDsq0vYF04PoWvvYyAIAVNl6ACzWEnCPSzVAb2orLKO2McQpRAY4I762BRDhBt0R6a1Qm9Hx9g0gUfQE6iXBniPe81OUTKzGHNKxHzV2sP3HgVlBmB2M3N2tJTzb65XnRGKLGOgMe2/eVvLj54lK4MRe5vTJG1QvZUKbxnK0YdMNE/N/eTPwJ3tB7tMyVVVDEUQpzKNtWqrbKvtQcxG1Dy42DjnsCW+DNlXdgmIKcG8ZpJT9vTihoR2UAK1ZG1WPhVF2oNNvQGU3z3hIQ8VNmdu0EMJlEu6v4iTlLYi3E68RpLs8Eq1d6csi6nKrJRssSwsm8ApR/yO/p9c7dYj4EsfcwhxzsfgLdpu8SKZUUgHkSs+KWA2F3fHUawrHUZvl4xdkDqC/S4vi8CweW7ed/VvuriZXHgljCahrwhe2YRn0rZl3Kvsc3wz2L8XaRhusY1lT5Xy8rqsCiKFcuevI7DUCV2/c3uuhY08+5+qTihQwGlrJTQo8iTNr39o6lcoalqyKYeXWoQEKpUQP/SvTT5qhq+7NdJoB+q9JkU+q0aEQwqBOF+rdmRUeYEMWXmPiJ7NndcQGuAJg+M5pnbB25DUv2zP2Xqj/PjYypAJMMavI7YgoIlZ6VZ/L1yqU+PlABLp7+A93JgpG0hv221lEPIWY4+RNr3yyhPnCxtGA8obgUDu/6FIHqq+hxm+GfZx2DI2TQjgQs5yJiUyIVoXbmjjoBX0axEn1x3xsa7YlGVeFw1jeqFbgdIFN+KInG4kpJVd07c4BLJiITZFodHExoFD65tsX1SLXpZgdoljKwDo2DkacLCLiaV8PShqJEjo58uXdCu676mtSePbGyW0KZigAPGEpUEZ6zc1l9cZXjeDi2aLJpl6sphMR/B5aiIz6J7Afj3feUuq5qxxFHQC8jR1C1hPV7ZxF7Sub+U5iB+ynvUkt4iJd7kxJDARVbZPBbUSb9/ny0nBbzZmkRE6oi+0ocWxaH4ZnVrsL/NgnFPwKuG2IwbNCHls26kUeON7qS/+j0PLAXzBghwiRgBku1clT/tM30AS1mvJ6cKDjjLPMei7GwGHaJFfQqEjjikb7ktX5O1jVMlZTrNGliwOK1fTh3jE9b5K9AppT5IFuPxhbJ97+HMazBEPtMA9aZBIKXNFIvdPPCs0DHt05HzygjrejibsBA/SS2F+gSlANRlkrJinMIpt/gdlvUbjaxFrMupGmVCoMDfRDrxO053FTh8nto2pA2ActBghuqLM8p91U5FtVhXU+FI8whYX5WdWMmWc2E2wGzFz1aCKYJIC/qr4xzN305xQLxAVb2n0BQedGI+j38cc0ECk1NxJ2isVKvmhk5RyzSc6EPzB1884xko7roUM7NOu0FiPw+Zu4R8OGoHRYqsigkTRxlmL19aGEbBbdK9TmGBvwCd307SHj2GojSWN7DL9olp1+VMMYQ9UG8DTX47r23qkXZ4z3ctQl86rRjpzdj+70XvZb+h0FzgnyJmYSHxIIn2FWNYmvwPjyiBUgHYP5RoHhSJoeI6W+nkFnHijreTncsonIU5FKlqHQFGzzdc8s9U5sfrMFtR1SUYFYWj3C8KP0oQwiXZcn3AcqPkTqVU0o5kRZ2+QS+fJP1ozNeh6hKJSpUVSb2LZ9329cfBOPAJ7u8zYUqJZ8CIzIa26Qy5ADf5bco2Z18IcLHAulDYBXxaBCm2DXpryNEQMYWmMTHA0mVpIFVkmU5dfnNQykdZiAXU1l+Fw6kIjrMJ9AgF0xWiaZnOyTehWtuxU47hvUm8B2A9ociq2x5aFOxazc3YG5IB7IZmXercFhEWIMzMw63jvREmRjCT5ou+MIjmbi1na8d0SaLUudX5pUouPbc+4stjuNveU6cNACO0s+nbAlVyZyCeRMAPk5C+11kHcwSNd8IZugXSih5eJ4xPoIW0knz0365CjhNUfz9+31qYzK0lZNMUCuf2K0vrUBB/i3T3gdXMGSeldKp3Lx+tz/bpKXTHtUzzsvdS9Gs+uMIZ1XK6AxFyeCxOJ+cU9XN1fBnLPe2JYUlJUmCu4tiwsprlamaRzZQNWlUxombEZeKC7q3mwHcZM5wU0ICwEnLfTxW0VL9N10+batqOKxQnIspanPsw1ez2cuwr/hQSPXqoP2gIkFZnmAqUKUX8GZ5ib+C60pulz4Uxz/QvZW7V2SAAGcUwS30VsW6U2Ld2v5UbOfEQCxPdOHJZw75sKgEdyVdN1FDl4JC6s8IUclP+LD6R/CXIEDhbSWuXdTsAinSZLlMH1LzCXp6Cqvih/NReD6FJezE4Hi0sUGxti+4YngNBTWhUOblVY4+ioJs/kpVyXoAksKXh+Fe1j1PG2gbHkCQQWWCDqufQCEypj+dCoj37UreY26CogoUkVCnNUXQ5jZNFOPeXjh336gUEGzTt9qLgRwsxEJpQKH+aCWZALuJHtCVlK1WQMM6eM15EjMtRabejRb7eD3Us4WqESLYxpZ5KCobtmQDzV/4vOlvq0BSClPNORXWKygxQ2J9casayyd9DxvL77P41vt3k3fsT5PB1d6WR+6JZWwYJGZTdxyDyiFJDCKV9TuCeGkZQ26g1V0sV/H5a1xciwxOCNt7GgQOajs3aR4wpXxg4GbU0nOR0c9Ii/Sn27VMt4BqnAj5W4fx8q4ecJlPHlG3tSjqKSUsP0rlyg7JRFXcxCUGv7QMYc2K9WLvLEHbBOcM/ZD87o+UaQ3CvTwOkQTDq8hUeOBRxcerQV5Xi6Y+Hh6Vg4aeMpoGdUV7xXbw5oVh/mkSLP70aWsGQ3UbqZLFHrxQzLeDFkYJX6q069Lp/1X+lGTY+5ykXDRtK1n+GarP5tNWi4nd81eFXdracJWwcYk2GA6MbdjMnoaTrfSHXO3EXgrlq6ko5DABSrMg+9kF88aW5LAVOxGADYFS8bniGvdKVXnEhhQDJVCYKqqWKYGpAek5BGeVRWSbwLCKdQ5BcBnn+oEsmp46uK3k8KO72Pn+1hPMbgE6xWxVYPqAe7HVPPjNRiQS6cQGOxU1gdlAuEJ4V7ip4o+TgDM2/M4bthC6c4SBMQaMfRZfL5ko/uf3U2MXch54RJ2/LQRAy3AHiOI6enjY+L88VIvjU+hnmwro8yEflSD4tEMeFIkrxEW19Gycl1BDXpDVbs9nrU5MMIGx6QxCFw8FibHOtcRcI71o8s+OvDCQFsw7ZVMslGVDaprGZZmJ2j4uTgxrn15ihGv020yixBNktFCYgTyPlxA1f36ciarunxld8CPUVUPV/D/XFX5s/Neg2cdPqmSlO/fpnXxz4UJnIlB6hSl82wNGKJud1KoVyDHmmjI+EKBSUO7kNuvrQ/fY3duE75BX/HUAeUiLFKBZ1O2/mThw8t0Wq782ApG12/Jvza+94ENybWDDpLLmTddfEP7cYjFtZZONpGuxNkP8FAAD//w==\"\n\t];\n\n\t// Test that fixes #191501. Ensures compressed data can be streamed out correctly.\n\t#[test]\n\tfn test_flatestream_decodes_191501() {\n\t\tlet mut dec = ClientMessageDecoder::new_compressed();\n\t\tlet mut len = 0;\n\t\tfor b in TEST_191501_BUFS {\n\t\t\tlet b = general_purpose::STANDARD\n\t\t\t\t.decode(b)\n\t\t\t\t.expect(\"expected no decode error\");\n\t\t\tlet s = dec.decode(&b).expect(\"expected no decompress error\");\n\t\t\tlen += s.len();\n\t\t}\n\n\t\tassert_eq!(len, 265 + 101 + 10370);\n\t}\n}\n"
  },
  {
    "path": "cli/src/tunnels/wsl_detect.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse crate::log;\n\n#[cfg(not(windows))]\npub fn is_wsl_installed(_log: &log::Logger) -> bool {\n\tfalse\n}\n\n#[cfg(windows)]\npub fn is_wsl_installed(log: &log::Logger) -> bool {\n\tuse std::path::PathBuf;\n\n\tuse crate::util::command::new_std_command;\n\n\tlet system32 = {\n\t\tlet sys_root = match std::env::var(\"SystemRoot\") {\n\t\t\tOk(s) => s,\n\t\t\tErr(_) => return false,\n\t\t};\n\n\t\tlet is_32_on_64 = std::env::var(\"PROCESSOR_ARCHITEW6432\").is_ok();\n\t\tlet mut system32 = PathBuf::from(sys_root);\n\t\tsystem32.push(if is_32_on_64 { \"Sysnative\" } else { \"System32\" });\n\t\tsystem32\n\t};\n\n\t// Windows builds < 22000\n\tlet mut maybe_lxss = system32.join(\"lxss\");\n\tmaybe_lxss.push(\"LxssManager.dll\");\n\tif maybe_lxss.exists() {\n\t\ttrace!(log, \"wsl availability detected via lxss\");\n\t\treturn true;\n\t}\n\n\t// Windows builds >= 22000\n\tlet maybe_wsl = system32.join(\"wsl.exe\");\n\tif maybe_wsl.exists() {\n\t\tif let Ok(s) = new_std_command(maybe_wsl).arg(\"--status\").output() {\n\t\t\tif s.status.success() {\n\t\t\t\ttrace!(log, \"wsl availability detected via subprocess\");\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\ttrace!(log, \"wsl not detected\");\n\n\tfalse\n}\n"
  },
  {
    "path": "cli/src/tunnels.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\npub mod code_server;\npub mod dev_tunnels;\npub mod legal;\npub mod local_forwarding;\npub mod paths;\npub mod protocol;\npub mod shutdown_signal;\npub mod singleton_client;\npub mod singleton_server;\n\nmod challenge;\nmod control_server;\nmod nosleep;\n#[cfg(target_os = \"linux\")]\nmod nosleep_linux;\n#[cfg(target_os = \"macos\")]\nmod nosleep_macos;\n#[cfg(target_os = \"windows\")]\nmod nosleep_windows;\nmod port_forwarder;\nmod server_bridge;\nmod server_multiplexer;\nmod service;\n#[cfg(target_os = \"linux\")]\nmod service_linux;\n#[cfg(target_os = \"macos\")]\nmod service_macos;\n#[cfg(target_os = \"windows\")]\nmod service_windows;\nmod socket_signal;\nmod wsl_detect;\n\npub use control_server::{serve, serve_stream, AuthRequired, Next, ServeStreamParams};\npub use nosleep::SleepInhibitor;\npub use service::{\n\tcreate_service_manager, ServiceContainer, ServiceManager, SERVICE_LOG_FILE_NAME,\n};\n"
  },
  {
    "path": "cli/src/update_service.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{fmt, path::Path};\n\nuse serde::{Deserialize, Serialize};\n\nuse crate::{\n\tconstants::VSCODE_CLI_UPDATE_ENDPOINT,\n\tdebug, log, options, spanf,\n\tutil::{\n\t\terrors::{wrap, AnyError, CodeError, WrappedError},\n\t\thttp::{BoxedHttp, SimpleResponse},\n\t\tio::ReportCopyProgress,\n\t\ttar::{self, has_gzip_header},\n\t\tzipper,\n\t},\n};\n\n/// Implementation of the VS Code Update service for use in the CLI.\n#[derive(Clone)]\npub struct UpdateService {\n\tclient: BoxedHttp,\n\tlog: log::Logger,\n}\n\n/// Describes a specific release, can be created manually or returned from the update service.\n#[derive(Clone, Eq, PartialEq)]\npub struct Release {\n\tpub name: String,\n\tpub platform: Platform,\n\tpub target: TargetKind,\n\tpub quality: options::Quality,\n\tpub commit: String,\n}\n\nimpl std::fmt::Display for Release {\n\tfn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n\t\twrite!(f, \"{} (commit {})\", self.name, self.commit)\n\t}\n}\n\n#[derive(Deserialize)]\nstruct UpdateServerVersion {\n\tpub version: String,\n\tpub name: String,\n}\n\nfn quality_download_segment(quality: options::Quality) -> &'static str {\n\tmatch quality {\n\t\toptions::Quality::Stable => \"stable\",\n\t\toptions::Quality::Insiders => \"insider\",\n\t\toptions::Quality::Exploration => \"exploration\",\n\t}\n}\n\nfn get_update_endpoint() -> Result<&'static str, CodeError> {\n\tVSCODE_CLI_UPDATE_ENDPOINT.ok_or_else(|| CodeError::UpdatesNotConfigured(\"no service url\"))\n}\n\nimpl UpdateService {\n\tpub fn new(log: log::Logger, http: BoxedHttp) -> Self {\n\t\tUpdateService { client: http, log }\n\t}\n\n\tpub async fn get_release_by_semver_version(\n\t\t&self,\n\t\tplatform: Platform,\n\t\ttarget: TargetKind,\n\t\tquality: options::Quality,\n\t\tversion: &str,\n\t) -> Result<Release, AnyError> {\n\t\tlet update_endpoint = get_update_endpoint()?;\n\t\tlet download_segment = target\n\t\t\t.download_segment(platform)\n\t\t\t.ok_or_else(|| CodeError::UnsupportedPlatform(platform.to_string()))?;\n\t\tlet download_url = format!(\n\t\t\t\"{}/api/versions/{}/{}/{}\",\n\t\t\tupdate_endpoint,\n\t\t\tversion,\n\t\t\tdownload_segment,\n\t\t\tquality_download_segment(quality),\n\t\t);\n\n\t\tlet mut response = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"server.version.resolve\"),\n\t\t\tself.client.make_request(\"GET\", download_url)\n\t\t)?;\n\n\t\tif !response.status_code.is_success() {\n\t\t\treturn Err(response.into_err().await.into());\n\t\t}\n\n\t\tlet res = response.json::<UpdateServerVersion>().await?;\n\t\tdebug!(self.log, \"Resolved version {} to {}\", version, res.version);\n\n\t\tOk(Release {\n\t\t\ttarget,\n\t\t\tplatform,\n\t\t\tquality,\n\t\t\tname: res.name,\n\t\t\tcommit: res.version,\n\t\t})\n\t}\n\n\t/// Gets the latest commit for the target of the given quality.\n\tpub async fn get_latest_commit(\n\t\t&self,\n\t\tplatform: Platform,\n\t\ttarget: TargetKind,\n\t\tquality: options::Quality,\n\t) -> Result<Release, AnyError> {\n\t\tlet update_endpoint = get_update_endpoint()?;\n\t\tlet download_segment = target\n\t\t\t.download_segment(platform)\n\t\t\t.ok_or_else(|| CodeError::UnsupportedPlatform(platform.to_string()))?;\n\t\tlet download_url = format!(\n\t\t\t\"{}/api/latest/{}/{}\",\n\t\t\tupdate_endpoint,\n\t\t\tdownload_segment,\n\t\t\tquality_download_segment(quality),\n\t\t);\n\n\t\tlet mut response = spanf!(\n\t\t\tself.log,\n\t\t\tself.log.span(\"server.version.resolve\"),\n\t\t\tself.client.make_request(\"GET\", download_url)\n\t\t)?;\n\n\t\tif !response.status_code.is_success() {\n\t\t\treturn Err(response.into_err().await.into());\n\t\t}\n\n\t\tlet res = response.json::<UpdateServerVersion>().await?;\n\t\tdebug!(self.log, \"Resolved quality {} to {}\", quality, res.version);\n\n\t\tOk(Release {\n\t\t\ttarget,\n\t\t\tplatform,\n\t\t\tquality,\n\t\t\tname: res.name,\n\t\t\tcommit: res.version,\n\t\t})\n\t}\n\n\t/// Gets the download stream for the release.\n\tpub async fn get_download_stream(&self, release: &Release) -> Result<SimpleResponse, AnyError> {\n\t\tlet update_endpoint = get_update_endpoint()?;\n\t\tlet download_segment = release\n\t\t\t.target\n\t\t\t.download_segment(release.platform)\n\t\t\t.ok_or_else(|| CodeError::UnsupportedPlatform(release.platform.to_string()))?;\n\n\t\tlet download_url = format!(\n\t\t\t\"{}/commit:{}/{}/{}\",\n\t\t\tupdate_endpoint,\n\t\t\trelease.commit,\n\t\t\tdownload_segment,\n\t\t\tquality_download_segment(release.quality),\n\t\t);\n\n\t\tlet response = self.client.make_request(\"GET\", download_url).await?;\n\t\tif !response.status_code.is_success() {\n\t\t\treturn Err(response.into_err().await.into());\n\t\t}\n\n\t\tOk(response)\n\t}\n}\n\npub fn unzip_downloaded_release<T>(\n\tcompressed_file: &Path,\n\ttarget_dir: &Path,\n\treporter: T,\n) -> Result<(), WrappedError>\nwhere\n\tT: ReportCopyProgress,\n{\n\tmatch has_gzip_header(compressed_file) {\n\t\tOk((f, true)) => tar::decompress_tarball(f, target_dir, reporter),\n\t\tOk((f, false)) => zipper::unzip_file(f, target_dir, reporter),\n\t\tErr(e) => Err(wrap(e, \"error checking for gzip header\")),\n\t}\n}\n\n#[derive(Eq, PartialEq, Copy, Clone)]\npub enum TargetKind {\n\tServer,\n\tArchive,\n\tWeb,\n\tCli,\n}\n\nimpl TargetKind {\n\tfn download_segment(&self, platform: Platform) -> Option<String> {\n\t\tmatch *self {\n\t\t\tTargetKind::Server => Some(platform.headless()),\n\t\t\tTargetKind::Archive => platform.archive(),\n\t\t\tTargetKind::Web => Some(platform.web()),\n\t\t\tTargetKind::Cli => Some(platform.cli()),\n\t\t}\n\t}\n}\n\n#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)]\npub enum Platform {\n\tLinuxAlpineX64,\n\tLinuxAlpineARM64,\n\tLinuxX64,\n\tLinuxX64Legacy,\n\tLinuxARM64,\n\tLinuxARM64Legacy,\n\tLinuxARM32,\n\tLinuxARM32Legacy,\n\tDarwinX64,\n\tDarwinARM64,\n\tWindowsX64,\n\tWindowsX86,\n\tWindowsARM64,\n}\n\nimpl Platform {\n\tpub fn archive(&self) -> Option<String> {\n\t\tmatch self {\n\t\t\tPlatform::LinuxX64 => Some(\"linux-x64\".to_owned()),\n\t\t\tPlatform::LinuxARM64 => Some(\"linux-arm64\".to_owned()),\n\t\t\tPlatform::LinuxARM32 => Some(\"linux-armhf\".to_owned()),\n\t\t\tPlatform::DarwinX64 => Some(\"darwin\".to_owned()),\n\t\t\tPlatform::DarwinARM64 => Some(\"darwin-arm64\".to_owned()),\n\t\t\tPlatform::WindowsX64 => Some(\"win32-x64-archive\".to_owned()),\n\t\t\tPlatform::WindowsX86 => Some(\"win32-archive\".to_owned()),\n\t\t\tPlatform::WindowsARM64 => Some(\"win32-arm64-archive\".to_owned()),\n\t\t\t_ => None,\n\t\t}\n\t}\n\tpub fn headless(&self) -> String {\n\t\tmatch self {\n\t\t\tPlatform::LinuxAlpineARM64 => \"server-alpine-arm64\",\n\t\t\tPlatform::LinuxAlpineX64 => \"server-linux-alpine\",\n\t\t\tPlatform::LinuxX64 => \"server-linux-x64\",\n\t\t\tPlatform::LinuxX64Legacy => \"server-linux-legacy-x64\",\n\t\t\tPlatform::LinuxARM64 => \"server-linux-arm64\",\n\t\t\tPlatform::LinuxARM64Legacy => \"server-linux-legacy-arm64\",\n\t\t\tPlatform::LinuxARM32 => \"server-linux-armhf\",\n\t\t\tPlatform::LinuxARM32Legacy => \"server-linux-legacy-armhf\",\n\t\t\tPlatform::DarwinX64 => \"server-darwin\",\n\t\t\tPlatform::DarwinARM64 => \"server-darwin-arm64\",\n\t\t\tPlatform::WindowsX64 => \"server-win32-x64\",\n\t\t\tPlatform::WindowsX86 => \"server-win32\",\n\t\t\tPlatform::WindowsARM64 => \"server-win32-arm64\",\n\t\t}\n\t\t.to_owned()\n\t}\n\n\tpub fn cli(&self) -> String {\n\t\tmatch self {\n\t\t\tPlatform::LinuxAlpineARM64 => \"cli-alpine-arm64\",\n\t\t\tPlatform::LinuxAlpineX64 => \"cli-alpine-x64\",\n\t\t\tPlatform::LinuxX64 => \"cli-linux-x64\",\n\t\t\tPlatform::LinuxX64Legacy => \"cli-linux-x64\",\n\t\t\tPlatform::LinuxARM64 => \"cli-linux-arm64\",\n\t\t\tPlatform::LinuxARM64Legacy => \"cli-linux-arm64\",\n\t\t\tPlatform::LinuxARM32 => \"cli-linux-armhf\",\n\t\t\tPlatform::LinuxARM32Legacy => \"cli-linux-armhf\",\n\t\t\tPlatform::DarwinX64 => \"cli-darwin-x64\",\n\t\t\tPlatform::DarwinARM64 => \"cli-darwin-arm64\",\n\t\t\tPlatform::WindowsARM64 => \"cli-win32-arm64\",\n\t\t\tPlatform::WindowsX64 => \"cli-win32-x64\",\n\t\t\tPlatform::WindowsX86 => \"cli-win32\",\n\t\t}\n\t\t.to_owned()\n\t}\n\n\tpub fn web(&self) -> String {\n\t\tformat!(\"{}-web\", self.headless())\n\t}\n\n\tpub fn env_default() -> Option<Platform> {\n\t\tif cfg!(all(\n\t\t\ttarget_os = \"linux\",\n\t\t\ttarget_arch = \"x86_64\",\n\t\t\ttarget_env = \"musl\"\n\t\t)) {\n\t\t\tSome(Platform::LinuxAlpineX64)\n\t\t} else if cfg!(all(\n\t\t\ttarget_os = \"linux\",\n\t\t\ttarget_arch = \"aarch64\",\n\t\t\ttarget_env = \"musl\"\n\t\t)) {\n\t\t\tSome(Platform::LinuxAlpineARM64)\n\t\t} else if cfg!(all(target_os = \"linux\", target_arch = \"x86_64\")) {\n\t\t\tSome(Platform::LinuxX64)\n\t\t} else if cfg!(all(target_os = \"linux\", target_arch = \"arm\")) {\n\t\t\tSome(Platform::LinuxARM32)\n\t\t} else if cfg!(all(target_os = \"linux\", target_arch = \"aarch64\")) {\n\t\t\tSome(Platform::LinuxARM64)\n\t\t} else if cfg!(all(target_os = \"macos\", target_arch = \"x86_64\")) {\n\t\t\tSome(Platform::DarwinX64)\n\t\t} else if cfg!(all(target_os = \"macos\", target_arch = \"aarch64\")) {\n\t\t\tSome(Platform::DarwinARM64)\n\t\t} else if cfg!(all(target_os = \"windows\", target_arch = \"x86_64\")) {\n\t\t\tSome(Platform::WindowsX64)\n\t\t} else if cfg!(all(target_os = \"windows\", target_arch = \"x86\")) {\n\t\t\tSome(Platform::WindowsX86)\n\t\t} else if cfg!(all(target_os = \"windows\", target_arch = \"aarch64\")) {\n\t\t\tSome(Platform::WindowsARM64)\n\t\t} else {\n\t\t\tNone\n\t\t}\n\t}\n}\n\nimpl fmt::Display for Platform {\n\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n\t\tf.write_str(match self {\n\t\t\tPlatform::LinuxAlpineARM64 => \"LinuxAlpineARM64\",\n\t\t\tPlatform::LinuxAlpineX64 => \"LinuxAlpineX64\",\n\t\t\tPlatform::LinuxX64 => \"LinuxX64\",\n\t\t\tPlatform::LinuxX64Legacy => \"LinuxX64Legacy\",\n\t\t\tPlatform::LinuxARM64 => \"LinuxARM64\",\n\t\t\tPlatform::LinuxARM64Legacy => \"LinuxARM64Legacy\",\n\t\t\tPlatform::LinuxARM32 => \"LinuxARM32\",\n\t\t\tPlatform::LinuxARM32Legacy => \"LinuxARM32Legacy\",\n\t\t\tPlatform::DarwinX64 => \"DarwinX64\",\n\t\t\tPlatform::DarwinARM64 => \"DarwinARM64\",\n\t\t\tPlatform::WindowsX64 => \"WindowsX64\",\n\t\t\tPlatform::WindowsX86 => \"WindowsX86\",\n\t\t\tPlatform::WindowsARM64 => \"WindowsARM64\",\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/app_lock.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n#[cfg(windows)]\nuse std::{io, ptr};\n\n#[cfg(windows)]\nuse winapi::{\n\tshared::winerror::ERROR_ALREADY_EXISTS,\n\tum::{handleapi::CloseHandle, synchapi::CreateMutexA, winnt::HANDLE},\n};\n\nuse super::errors::CodeError;\n\npub struct AppMutex {\n\t#[cfg(windows)]\n\thandle: HANDLE,\n}\n\n#[cfg(windows)] // handle is thread-safe, mark it so with this\nunsafe impl Send for AppMutex {}\n\nimpl AppMutex {\n\t#[cfg(unix)]\n\tpub fn new(_name: &str) -> Result<Self, CodeError> {\n\t\tOk(Self {})\n\t}\n\n\t#[cfg(windows)]\n\tpub fn new(name: &str) -> Result<Self, CodeError> {\n\t\tuse std::ffi::CString;\n\n\t\tlet cname = CString::new(name).unwrap();\n\t\tlet handle = unsafe { CreateMutexA(ptr::null_mut(), 0, cname.as_ptr() as _) };\n\n\t\tif !handle.is_null() {\n\t\t\treturn Ok(Self { handle });\n\t\t}\n\n\t\tlet err = io::Error::last_os_error();\n\t\tlet raw = err.raw_os_error();\n\t\t// docs report it should return ERROR_IO_PENDING, but in my testing it actually\n\t\t// returns ERROR_LOCK_VIOLATION. Or maybe winapi is wrong?\n\t\tif raw == Some(ERROR_ALREADY_EXISTS as i32) {\n\t\t\treturn Err(CodeError::AppAlreadyLocked(name.to_string()));\n\t\t}\n\n\t\tErr(CodeError::AppLockFailed(err))\n\t}\n}\n\nimpl Drop for AppMutex {\n\tfn drop(&mut self) {\n\t\t#[cfg(windows)]\n\t\tunsafe {\n\t\t\tCloseHandle(self.handle)\n\t\t};\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/command.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse super::errors::CodeError;\nuse std::{\n\tborrow::Cow,\n\tffi::OsStr,\n\tprocess::{Output, Stdio},\n};\nuse tokio::process::Command;\n\npub async fn capture_command_and_check_status(\n\tcommand_str: impl AsRef<OsStr>,\n\targs: &[impl AsRef<OsStr>],\n) -> Result<std::process::Output, CodeError> {\n\tlet output = capture_command(&command_str, args).await?;\n\n\tcheck_output_status(output, || {\n\t\tformat!(\n\t\t\t\"{} {}\",\n\t\t\tcommand_str.as_ref().to_string_lossy(),\n\t\t\targs.iter()\n\t\t\t\t.map(|a| a.as_ref().to_string_lossy())\n\t\t\t\t.collect::<Vec<Cow<'_, str>>>()\n\t\t\t\t.join(\" \")\n\t\t)\n\t})\n}\n\npub fn check_output_status(\n\toutput: Output,\n\tcmd_str: impl FnOnce() -> String,\n) -> Result<std::process::Output, CodeError> {\n\tif !output.status.success() {\n\t\treturn Err(CodeError::CommandFailed {\n\t\t\tcommand: cmd_str(),\n\t\t\tcode: output.status.code().unwrap_or(-1),\n\t\t\toutput: String::from_utf8_lossy(if output.stderr.is_empty() {\n\t\t\t\t&output.stdout\n\t\t\t} else {\n\t\t\t\t&output.stderr\n\t\t\t})\n\t\t\t.into(),\n\t\t});\n\t}\n\n\tOk(output)\n}\n\npub async fn capture_command<A, I, S>(\n\tcommand_str: A,\n\targs: I,\n) -> Result<std::process::Output, CodeError>\nwhere\n\tA: AsRef<OsStr>,\n\tI: IntoIterator<Item = S>,\n\tS: AsRef<OsStr>,\n{\n\tnew_tokio_command(&command_str)\n\t\t.args(args)\n\t\t.stdin(Stdio::null())\n\t\t.stdout(Stdio::piped())\n\t\t.output()\n\t\t.await\n\t\t.map_err(|e| CodeError::CommandFailed {\n\t\t\tcommand: command_str.as_ref().to_string_lossy().to_string(),\n\t\t\tcode: -1,\n\t\t\toutput: e.to_string(),\n\t\t})\n}\n\n/// Makes a new Command, setting flags to avoid extra windows on win32\n#[cfg(windows)]\npub fn new_tokio_command(exe: impl AsRef<OsStr>) -> Command {\n\tlet mut p = tokio::process::Command::new(exe);\n\tp.creation_flags(winapi::um::winbase::CREATE_NO_WINDOW);\n\tp\n}\n\n/// Makes a new Command, setting flags to avoid extra windows on win32\n#[cfg(not(windows))]\npub fn new_tokio_command(exe: impl AsRef<OsStr>) -> Command {\n\ttokio::process::Command::new(exe)\n}\n\n/// Makes a new command to run the target script. For windows, ensures it's run\n/// in a cmd.exe context.\n#[cfg(windows)]\npub fn new_script_command(script: impl AsRef<OsStr>) -> Command {\n\tlet mut cmd = new_tokio_command(\"cmd\");\n\tcmd.arg(\"/Q\");\n\tcmd.arg(\"/C\");\n\tcmd.arg(script);\n\tcmd\n}\n\n/// Makes a new command to run the target script. For windows, ensures it's run\n/// in a cmd.exe context.\n#[cfg(not(windows))]\npub fn new_script_command(script: impl AsRef<OsStr>) -> Command {\n\tnew_tokio_command(script) // it's assumed scripts are already +x and don't need extra handling\n}\n\n/// Makes a new Command, setting flags to avoid extra windows on win32\n#[cfg(windows)]\npub fn new_std_command(exe: impl AsRef<OsStr>) -> std::process::Command {\n\tlet mut p = std::process::Command::new(exe);\n\tstd::os::windows::process::CommandExt::creation_flags(\n\t\t&mut p,\n\t\twinapi::um::winbase::CREATE_NO_WINDOW,\n\t);\n\tp\n}\n\n/// Makes a new Command, setting flags to avoid extra windows on win32\n#[cfg(not(windows))]\npub fn new_std_command(exe: impl AsRef<OsStr>) -> std::process::Command {\n\tstd::process::Command::new(exe)\n}\n\n/// Kills and processes and all of its children.\n#[cfg(windows)]\npub async fn kill_tree(process_id: u32) -> Result<(), CodeError> {\n\tcapture_command(\"taskkill\", &[\"/t\", \"/pid\", &process_id.to_string()]).await?;\n\tOk(())\n}\n\n/// Kills and processes and all of its children.\n#[cfg(not(windows))]\npub async fn kill_tree(process_id: u32) -> Result<(), CodeError> {\n\tuse futures::future::join_all;\n\tuse tokio::io::{AsyncBufReadExt, BufReader};\n\n\tasync fn kill_single_pid(process_id_str: String) {\n\t\tcapture_command(\"kill\", &[&process_id_str]).await.ok();\n\t}\n\n\t// Rusty version of https://github.com/microsoft/vscode-js-debug/blob/main/src/targets/node/terminateProcess.sh\n\n\tlet parent_id = process_id.to_string();\n\tlet mut prgrep_cmd = Command::new(\"pgrep\")\n\t\t.arg(\"-P\")\n\t\t.arg(&parent_id)\n\t\t.stdin(Stdio::null())\n\t\t.stdout(Stdio::piped())\n\t\t.spawn()\n\t\t.map_err(|e| CodeError::CommandFailed {\n\t\t\tcommand: format!(\"pgrep -P {parent_id}\"),\n\t\t\tcode: -1,\n\t\t\toutput: e.to_string(),\n\t\t})?;\n\n\tlet mut kill_futures = vec![tokio::spawn(\n\t\tasync move { kill_single_pid(parent_id).await },\n\t)];\n\n\tif let Some(stdout) = prgrep_cmd.stdout.take() {\n\t\tlet mut reader = BufReader::new(stdout).lines();\n\t\twhile let Some(line) = reader.next_line().await.unwrap_or(None) {\n\t\t\tkill_futures.push(tokio::spawn(async move { kill_single_pid(line).await }))\n\t\t}\n\t}\n\n\tjoin_all(kill_futures).await;\n\tprgrep_cmd.kill().await.ok();\n\tOk(())\n}\n"
  },
  {
    "path": "cli/src/util/errors.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse crate::{\n\tconstants::{APPLICATION_NAME, CONTROL_PORT, DOCUMENTATION_URL, QUALITYLESS_PRODUCT_NAME},\n\trpc::ResponseError,\n};\nuse std::fmt::Display;\nuse thiserror::Error;\n\n// Wraps another error with additional info.\n#[derive(Debug, Clone)]\npub struct WrappedError {\n\tmessage: String,\n\toriginal: String,\n}\n\nimpl std::fmt::Display for WrappedError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"{}: {}\", self.message, self.original)\n\t}\n}\n\nimpl std::error::Error for WrappedError {\n\tfn source(&self) -> Option<&(dyn std::error::Error + 'static)> {\n\t\tNone\n\t}\n}\n\nimpl WrappedError {\n\t// fn new(original: Box<dyn std::error::Error>, message: String) -> WrappedError {\n\t//     WrappedError { message, original }\n\t// }\n}\n\nimpl From<reqwest::Error> for WrappedError {\n\tfn from(e: reqwest::Error) -> WrappedError {\n\t\tWrappedError {\n\t\t\tmessage: format!(\n\t\t\t\t\"error requesting {}\",\n\t\t\t\te.url().map_or(\"<unknown>\", |u| u.as_str())\n\t\t\t),\n\t\t\toriginal: format!(\"{e}\"),\n\t\t}\n\t}\n}\n\npub fn wrapdbg<T, S>(original: T, message: S) -> WrappedError\nwhere\n\tT: std::fmt::Debug,\n\tS: Into<String>,\n{\n\tWrappedError {\n\t\tmessage: message.into(),\n\t\toriginal: format!(\"{original:?}\"),\n\t}\n}\n\npub fn wrap<T, S>(original: T, message: S) -> WrappedError\nwhere\n\tT: Display,\n\tS: Into<String>,\n{\n\tWrappedError {\n\t\tmessage: message.into(),\n\t\toriginal: format!(\"{original}\"),\n\t}\n}\n\n// Error generated by an unsuccessful HTTP response\n#[derive(Debug)]\npub struct StatusError {\n\tpub url: String,\n\tpub status_code: u16,\n\tpub body: String,\n}\n\nimpl std::fmt::Display for StatusError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n\t\t\tf,\n\t\t\t\"error requesting {}: {} {}\",\n\t\t\tself.url, self.status_code, self.body\n\t\t)\n\t}\n}\n\nimpl StatusError {\n\tpub async fn from_res(res: reqwest::Response) -> Result<StatusError, AnyError> {\n\t\tlet status_code = res.status().as_u16();\n\t\tlet url = res.url().to_string();\n\t\tlet body = res.text().await.map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\"failed to read response body on {status_code} code from {url}\"),\n\t\t\t)\n\t\t})?;\n\n\t\tOk(StatusError {\n\t\t\turl,\n\t\t\tstatus_code,\n\t\t\tbody,\n\t\t})\n\t}\n}\n\n// When the provided connection token doesn't match the one used to set up the original VS Code Server\n// This is most likely due to a new user joining.\n#[derive(Debug)]\npub struct MismatchConnectionToken(pub String);\n\nimpl std::fmt::Display for MismatchConnectionToken {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"{}\", self.0)\n\t}\n}\n\n// When the VS Code server has an unrecognized extension (rather than zip or gz)\n#[derive(Debug)]\npub struct InvalidServerExtensionError(pub String);\n\nimpl std::fmt::Display for InvalidServerExtensionError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"invalid server extension '{}'\", self.0)\n\t}\n}\n\n// When the tunnel fails to open\n#[derive(Debug, Clone)]\npub struct DevTunnelError(pub String);\n\nimpl std::fmt::Display for DevTunnelError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"could not open tunnel: {}\", self.0)\n\t}\n}\n\nimpl std::error::Error for DevTunnelError {\n\tfn source(&self) -> Option<&(dyn std::error::Error + 'static)> {\n\t\tNone\n\t}\n}\n\n// When the server was downloaded, but the entrypoint scripts don't exist.\n#[derive(Debug)]\npub struct MissingEntrypointError();\n\nimpl std::fmt::Display for MissingEntrypointError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Missing entrypoints in server download. Most likely this is a corrupted download. Please retry\")\n\t}\n}\n\n#[derive(Debug)]\npub struct SetupError(pub String);\n\nimpl std::fmt::Display for SetupError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n\t\t\tf,\n\t\t\t\"{}\\n\\nMore info at {}/remote/linux\",\n\t\t\tDOCUMENTATION_URL.unwrap_or(\"<docs>\"),\n\t\t\tself.0\n\t\t)\n\t}\n}\n\n#[derive(Debug)]\npub struct NoHomeForLauncherError();\n\nimpl std::fmt::Display for NoHomeForLauncherError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n            f,\n            \"No $HOME variable was found in your environment. Either set it, or specify a `--data-dir` manually when invoking the launcher.\",\n        )\n\t}\n}\n\n#[derive(Debug)]\npub struct InvalidTunnelName(pub String);\n\nimpl std::fmt::Display for InvalidTunnelName {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"{}\", &self.0)\n\t}\n}\n\n#[derive(Debug)]\npub struct TunnelCreationFailed(pub String, pub String);\n\nimpl std::fmt::Display for TunnelCreationFailed {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n\t\t\tf,\n\t\t\t\"Could not create tunnel with name: {}\\nReason: {}\",\n\t\t\t&self.0, &self.1\n\t\t)\n\t}\n}\n\n#[derive(Debug)]\npub struct TunnelHostFailed(pub String);\n\nimpl std::fmt::Display for TunnelHostFailed {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"{}\", &self.0)\n\t}\n}\n\n#[derive(Debug)]\npub struct ExtensionInstallFailed(pub String);\n\nimpl std::fmt::Display for ExtensionInstallFailed {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Extension install failed: {}\", &self.0)\n\t}\n}\n\n#[derive(Debug)]\npub struct MismatchedLaunchModeError();\n\nimpl std::fmt::Display for MismatchedLaunchModeError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"A server is already running, but it was not launched in the same listening mode (port vs. socket) as this request\")\n\t}\n}\n\n#[derive(Debug)]\npub struct NoAttachedServerError();\n\nimpl std::fmt::Display for NoAttachedServerError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"No server is running\")\n\t}\n}\n\n#[derive(Debug)]\npub struct RefreshTokenNotAvailableError();\n\nimpl std::fmt::Display for RefreshTokenNotAvailableError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Refresh token not available, authentication is required\")\n\t}\n}\n\n#[derive(Debug)]\npub struct NoInstallInUserProvidedPath(pub String);\n\nimpl std::fmt::Display for NoInstallInUserProvidedPath {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n            f,\n            \"No {} installation could be found in {}. You can run `{} --use-quality=stable` to switch to the latest stable version of {}.\",\n\t\t\t\t\t\tQUALITYLESS_PRODUCT_NAME,\n            self.0,\n\t\t\t\t\t\tAPPLICATION_NAME,\n\t\t\t\t\t\tQUALITYLESS_PRODUCT_NAME\n        )\n\t}\n}\n\n#[derive(Debug)]\npub struct InvalidRequestedVersion();\n\nimpl std::fmt::Display for InvalidRequestedVersion {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n            f,\n            \"The reqested version is invalid, expected one of 'stable', 'insiders', version number (x.y.z), or absolute path.\",\n        )\n\t}\n}\n\n#[derive(Debug)]\npub struct UserCancelledInstallation();\n\nimpl std::fmt::Display for UserCancelledInstallation {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Installation aborted.\")\n\t}\n}\n\n#[derive(Debug)]\npub struct CannotForwardControlPort();\n\nimpl std::fmt::Display for CannotForwardControlPort {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Cannot forward or unforward port {CONTROL_PORT}.\")\n\t}\n}\n\n#[derive(Debug)]\npub struct ServerHasClosed();\n\nimpl std::fmt::Display for ServerHasClosed {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Request cancelled because the server has closed\")\n\t}\n}\n\n#[derive(Debug)]\npub struct ServiceAlreadyRegistered();\n\nimpl std::fmt::Display for ServiceAlreadyRegistered {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Already registered the service. Run `{APPLICATION_NAME} tunnel service uninstall` to unregister it first\")\n\t}\n}\n\n#[derive(Debug)]\npub struct WindowsNeedsElevation(pub String);\n\nimpl std::fmt::Display for WindowsNeedsElevation {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twriteln!(f, \"{}\", self.0)?;\n\t\twriteln!(f)?;\n\t\twriteln!(f, \"You may need to run this command as an administrator:\")?;\n\t\twriteln!(f, \" 1. Open the start menu and search for Powershell\")?;\n\t\twriteln!(f, \" 2. Right click and 'Run as administrator'\")?;\n\t\tif let Ok(exe) = std::env::current_exe() {\n\t\t\twriteln!(\n\t\t\t\tf,\n\t\t\t\t\" 3. Run &'{}' '{}'\",\n\t\t\t\texe.display(),\n\t\t\t\tstd::env::args().skip(1).collect::<Vec<_>>().join(\"' '\")\n\t\t\t)\n\t\t} else {\n\t\t\twriteln!(f, \" 3. Run the same command again\",)\n\t\t}\n\t}\n}\n\n#[derive(Debug)]\npub struct InvalidRpcDataError(pub String);\n\nimpl std::fmt::Display for InvalidRpcDataError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"parse error: {}\", self.0)\n\t}\n}\n\n#[derive(Debug)]\npub struct CorruptDownload(pub String);\n\nimpl std::fmt::Display for CorruptDownload {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n\t\t\tf,\n\t\t\t\"Error updating the {} CLI: {}\",\n\t\t\tQUALITYLESS_PRODUCT_NAME, self.0\n\t\t)\n\t}\n}\n\n#[derive(Debug)]\npub struct MissingHomeDirectory();\n\nimpl std::fmt::Display for MissingHomeDirectory {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"Could not find your home directory. Please ensure this command is running in the context of an normal user.\")\n\t}\n}\n\n#[derive(Debug)]\npub struct OAuthError {\n\tpub error: String,\n\tpub error_description: Option<String>,\n}\n\nimpl std::fmt::Display for OAuthError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(\n\t\t\tf,\n\t\t\t\"Error getting authorization: {} {}\",\n\t\t\tself.error,\n\t\t\tself.error_description.as_deref().unwrap_or(\"\")\n\t\t)\n\t}\n}\n\n// Makes an \"AnyError\" enum that contains any of the given errors, in the form\n// `enum AnyError { FooError(FooError) }` (when given `makeAnyError!(FooError)`).\n// Useful to easily deal with application error types without making tons of \"From\"\n// clauses.\nmacro_rules! makeAnyError {\n    ($($e:ident),*) => {\n\n        #[derive(Debug)]\n        #[allow(clippy::enum_variant_names)]\n        pub enum AnyError {\n            $($e($e),)*\n        }\n\n        impl std::fmt::Display for AnyError {\n            fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n                match *self {\n                    $(AnyError::$e(ref e) => e.fmt(f),)*\n                }\n            }\n        }\n\n        impl std::error::Error for AnyError {\n            fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {\n                None\n            }\n        }\n\n        $(impl From<$e> for AnyError {\n            fn from(e: $e) -> AnyError {\n                AnyError::$e(e)\n            }\n        })*\n    };\n}\n\n#[derive(Debug)]\npub struct DbusConnectFailedError(pub String);\n\nimpl Display for DbusConnectFailedError {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\tlet mut str = String::new();\n\t\tstr.push_str(\"Error creating dbus session. This command uses systemd for managing services, you should check that systemd is installed and under your user.\");\n\n\t\tif std::env::var(\"WSL_DISTRO_NAME\").is_ok() {\n\t\t\tstr.push_str(\"\\n\\nTo enable systemd on WSL, check out: https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/.\\n\\n\");\n\t\t}\n\n\t\tstr.push_str(\"If running `systemctl status` works, systemd is ok, but your session dbus may not be. You might need to:\\n\\n- Install the `dbus-user-session` package, and reboot if it was not installed\\n- Start the user dbus session with `systemctl --user enable dbus --now`.\\n\\nThe error encountered was: \");\n\t\tstr.push_str(&self.0);\n\t\tstr.push('\\n');\n\n\t\twrite!(f, \"{str}\")\n\t}\n}\n\n/// Internal errors in the VS Code CLI.\n/// Note: other error should be migrated to this type gradually\n#[derive(Error, Debug)]\npub enum CodeError {\n\t#[error(\"could not connect to socket/pipe: {0:?}\")]\n\tAsyncPipeFailed(std::io::Error),\n\t#[error(\"could not listen on socket/pipe: {0:?}\")]\n\tAsyncPipeListenerFailed(std::io::Error),\n\t#[error(\"could not create singleton lock file: {0:?}\")]\n\tSingletonLockfileOpenFailed(std::io::Error),\n\t#[error(\"could not read singleton lock file: {0:?}\")]\n\tSingletonLockfileReadFailed(rmp_serde::decode::Error),\n\t#[error(\"the process holding the singleton lock file (pid={0}) exited\")]\n\tSingletonLockedProcessExited(u32),\n\t#[error(\"no tunnel process is currently running\")]\n\tNoRunningTunnel,\n\t#[error(\"rpc call failed: {0:?}\")]\n\tTunnelRpcCallFailed(ResponseError),\n\t#[cfg(windows)]\n\t#[error(\"the windows app lock {0} already exists\")]\n\tAppAlreadyLocked(String),\n\t#[cfg(windows)]\n\t#[error(\"could not get windows app lock: {0:?}\")]\n\tAppLockFailed(std::io::Error),\n\t#[error(\"failed to run command \\\"{command}\\\" (code {code}): {output}\")]\n\tCommandFailed {\n\t\tcommand: String,\n\t\tcode: i32,\n\t\toutput: String,\n\t},\n\n\t#[error(\"platform not currently supported: {0}\")]\n\tUnsupportedPlatform(String),\n\t#[error(\"This machine does not meet {name}'s prerequisites, expected either...\\n{bullets}\")]\n\tPrerequisitesFailed { name: &'static str, bullets: String },\n\t#[error(\"failed to spawn process: {0:?}\")]\n\tProcessSpawnFailed(std::io::Error),\n\t#[error(\"failed to handshake spawned process: {0:?}\")]\n\tProcessSpawnHandshakeFailed(std::io::Error),\n\t#[error(\"download appears corrupted, please retry ({0})\")]\n\tCorruptDownload(&'static str),\n\t#[error(\"port forwarding is not available in this context\")]\n\tPortForwardingNotAvailable,\n\t#[error(\"'auth' call required\")]\n\tServerAuthRequired,\n\t#[error(\"challenge not yet issued\")]\n\tAuthChallengeNotIssued,\n\t#[error(\"challenge token is invalid\")]\n\tAuthChallengeBadToken,\n\t#[error(\"unauthorized client refused\")]\n\tAuthMismatch,\n\t#[error(\"keyring communication timed out after 5s\")]\n\tKeyringTimeout,\n\t#[error(\"no host is connected to the tunnel relay\")]\n\tNoTunnelEndpoint,\n\t#[error(\"could not parse `host`: {0}\")]\n\tInvalidHostAddress(std::net::AddrParseError),\n\t#[error(\"could not start server on the given host/port: {0}\")]\n\tCouldNotListenOnInterface(hyper::Error),\n\t#[error(\n\t\t\"Run this command again with --accept-server-license-terms to indicate your agreement.\"\n\t)]\n\tNeedsInteractiveLegalConsent,\n\t#[error(\"Sorry, you cannot use this CLI without accepting the terms.\")]\n\tDeniedLegalConset,\n\t#[error(\"The server is not yet downloaded, try again shortly.\")]\n\tServerNotYetDownloaded,\n\t#[error(\"An error was encountered downloading the server, please retry: {0}\")]\n\tServerDownloadError(String),\n\t#[error(\"Updates are are not available: {0}\")]\n\tUpdatesNotConfigured(&'static str),\n\t// todo: can be specialized when update service is moved to CodeErrors\n\t#[error(\"Could not check for update: {0}\")]\n\tUpdateCheckFailed(String),\n\t#[error(\"Could not read connection token file: {0}\")]\n\tCouldNotReadConnectionTokenFile(std::io::Error),\n\t#[error(\"Could not write connection token file: {0}\")]\n\tCouldNotCreateConnectionTokenFile(std::io::Error),\n\t#[error(\"A tunnel with the name {0} exists and is in-use. Please pick a different name or stop the existing tunnel.\")]\n\tTunnelActiveAndInUse(String),\n\t#[error(\"Timed out looking for port/socket\")]\n\tServerOriginTimeout,\n\t#[error(\"Server exited without writing port/socket: {0}\")]\n\tServerUnexpectedExit(String),\n}\n\nmakeAnyError!(\n\tMismatchConnectionToken,\n\tDevTunnelError,\n\tStatusError,\n\tWrappedError,\n\tInvalidServerExtensionError,\n\tMissingEntrypointError,\n\tSetupError,\n\tNoHomeForLauncherError,\n\tTunnelCreationFailed,\n\tTunnelHostFailed,\n\tInvalidTunnelName,\n\tExtensionInstallFailed,\n\tMismatchedLaunchModeError,\n\tNoAttachedServerError,\n\tRefreshTokenNotAvailableError,\n\tNoInstallInUserProvidedPath,\n\tUserCancelledInstallation,\n\tInvalidRequestedVersion,\n\tCannotForwardControlPort,\n\tServerHasClosed,\n\tServiceAlreadyRegistered,\n\tWindowsNeedsElevation,\n\tCorruptDownload,\n\tMissingHomeDirectory,\n\tOAuthError,\n\tInvalidRpcDataError,\n\tCodeError,\n\tDbusConnectFailedError\n);\n\nimpl From<reqwest::Error> for AnyError {\n\tfn from(e: reqwest::Error) -> AnyError {\n\t\tAnyError::WrappedError(WrappedError::from(e))\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/file_lock.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse crate::util::errors::CodeError;\nuse std::{fs::File, io};\n\npub struct FileLock {\n\tfile: File,\n\t#[cfg(windows)]\n\toverlapped: winapi::um::minwinbase::OVERLAPPED,\n}\n\n#[cfg(windows)] // overlapped is thread-safe, mark it so with this\nunsafe impl Send for FileLock {}\n\npub enum Lock {\n\tAcquired(FileLock),\n\tAlreadyLocked(File),\n}\n\n/// Number of locked bytes in the file. On Windows, locking prevents reads,\n/// but consumers of the lock may still want to read what the locking file\n/// as written. Thus, only PREFIX_LOCKED_BYTES are locked, and any globally-\n/// readable content should be written after the prefix.\n#[cfg(windows)]\npub const PREFIX_LOCKED_BYTES: usize = 1;\n\n#[cfg(unix)]\npub const PREFIX_LOCKED_BYTES: usize = 0;\n\nimpl FileLock {\n\t#[cfg(windows)]\n\tpub fn acquire(file: File) -> Result<Lock, CodeError> {\n\t\tuse std::os::windows::prelude::AsRawHandle;\n\t\tuse winapi::{\n\t\t\tshared::winerror::{ERROR_IO_PENDING, ERROR_LOCK_VIOLATION},\n\t\t\tum::{\n\t\t\t\tfileapi::LockFileEx,\n\t\t\t\tminwinbase::{LOCKFILE_EXCLUSIVE_LOCK, LOCKFILE_FAIL_IMMEDIATELY},\n\t\t\t},\n\t\t};\n\n\t\tlet handle = file.as_raw_handle();\n\t\tlet (overlapped, ok) = unsafe {\n\t\t\tlet mut overlapped = std::mem::zeroed();\n\t\t\tlet ok = LockFileEx(\n\t\t\t\thandle,\n\t\t\t\tLOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY,\n\t\t\t\t0,\n\t\t\t\tPREFIX_LOCKED_BYTES as u32,\n\t\t\t\t0,\n\t\t\t\t&mut overlapped,\n\t\t\t);\n\n\t\t\t(overlapped, ok)\n\t\t};\n\n\t\tif ok != 0 {\n\t\t\treturn Ok(Lock::Acquired(Self { file, overlapped }));\n\t\t}\n\n\t\tlet err = io::Error::last_os_error();\n\t\tlet raw = err.raw_os_error();\n\t\t// docs report it should return ERROR_IO_PENDING, but in my testing it actually\n\t\t// returns ERROR_LOCK_VIOLATION. Or maybe winapi is wrong?\n\t\tif raw == Some(ERROR_IO_PENDING as i32) || raw == Some(ERROR_LOCK_VIOLATION as i32) {\n\t\t\treturn Ok(Lock::AlreadyLocked(file));\n\t\t}\n\n\t\tErr(CodeError::SingletonLockfileOpenFailed(err))\n\t}\n\n\t#[cfg(unix)]\n\tpub fn acquire(file: File) -> Result<Lock, CodeError> {\n\t\tuse std::os::unix::io::AsRawFd;\n\n\t\tlet fd = file.as_raw_fd();\n\t\tlet res = unsafe { libc::flock(fd, libc::LOCK_EX | libc::LOCK_NB) };\n\t\tif res == 0 {\n\t\t\treturn Ok(Lock::Acquired(Self { file }));\n\t\t}\n\n\t\tlet err = io::Error::last_os_error();\n\t\tif err.kind() == io::ErrorKind::WouldBlock {\n\t\t\treturn Ok(Lock::AlreadyLocked(file));\n\t\t}\n\n\t\tErr(CodeError::SingletonLockfileOpenFailed(err))\n\t}\n\n\tpub fn file(&self) -> &File {\n\t\t&self.file\n\t}\n\n\tpub fn file_mut(&mut self) -> &mut File {\n\t\t&mut self.file\n\t}\n}\n\nimpl Drop for FileLock {\n\t#[cfg(windows)]\n\tfn drop(&mut self) {\n\t\tuse std::os::windows::prelude::AsRawHandle;\n\t\tuse winapi::um::fileapi::UnlockFileEx;\n\n\t\tunsafe {\n\t\t\tUnlockFileEx(\n\t\t\t\tself.file.as_raw_handle(),\n\t\t\t\t0,\n\t\t\t\tu32::MAX,\n\t\t\t\tu32::MAX,\n\t\t\t\t&mut self.overlapped,\n\t\t\t)\n\t\t};\n\t}\n\n\t#[cfg(unix)]\n\tfn drop(&mut self) {\n\t\tuse std::os::unix::io::AsRawFd;\n\n\t\tunsafe { libc::flock(self.file.as_raw_fd(), libc::LOCK_UN) };\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/http.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse crate::{\n\tconstants::get_default_user_agent,\n\tlog,\n\tutil::errors::{self, WrappedError},\n};\nuse async_trait::async_trait;\nuse core::panic;\nuse futures::stream::TryStreamExt;\nuse hyper::{\n\theader::{HeaderName, CONTENT_LENGTH},\n\thttp::HeaderValue,\n\tHeaderMap, StatusCode,\n};\nuse serde::de::DeserializeOwned;\nuse std::{io, pin::Pin, str::FromStr, sync::Arc, task::Poll};\nuse tokio::{\n\tfs,\n\tio::{AsyncRead, AsyncReadExt},\n\tsync::mpsc,\n};\nuse tokio_util::compat::FuturesAsyncReadCompatExt;\n\nuse super::{\n\terrors::{wrap, AnyError, StatusError},\n\tio::{copy_async_progress, ReadBuffer, ReportCopyProgress},\n};\n\npub async fn download_into_file<T>(\n\tfilename: &std::path::Path,\n\tprogress: T,\n\tmut res: SimpleResponse,\n) -> Result<fs::File, WrappedError>\nwhere\n\tT: ReportCopyProgress,\n{\n\tlet mut file = fs::File::create(filename)\n\t\t.await\n\t\t.map_err(|e| errors::wrap(e, \"failed to create file\"))?;\n\n\tlet content_length = res\n\t\t.headers\n\t\t.get(CONTENT_LENGTH)\n\t\t.and_then(|h| h.to_str().ok())\n\t\t.and_then(|s| s.parse::<u64>().ok())\n\t\t.unwrap_or(0);\n\n\tcopy_async_progress(progress, &mut res.read, &mut file, content_length)\n\t\t.await\n\t\t.map_err(|e| errors::wrap(e, \"failed to download file\"))?;\n\n\tOk(file)\n}\n\npub struct SimpleResponse {\n\tpub status_code: StatusCode,\n\tpub headers: HeaderMap,\n\tpub read: Pin<Box<dyn Send + AsyncRead + 'static>>,\n\tpub url: Option<url::Url>,\n}\n\nimpl SimpleResponse {\n\tpub fn url_path_basename(&self) -> Option<String> {\n\t\tself.url.as_ref().and_then(|u| {\n\t\t\tu.path_segments()\n\t\t\t\t.and_then(|s| s.last().map(|s| s.to_owned()))\n\t\t})\n\t}\n}\n\nimpl SimpleResponse {\n\tpub fn generic_error(url: &str) -> Self {\n\t\tlet (_, rx) = mpsc::unbounded_channel();\n\t\tSimpleResponse {\n\t\t\turl: url::Url::parse(url).ok(),\n\t\t\tstatus_code: StatusCode::INTERNAL_SERVER_ERROR,\n\t\t\theaders: HeaderMap::new(),\n\t\t\tread: Box::pin(DelegatedReader::new(rx)),\n\t\t}\n\t}\n\n\t/// Converts the response into a StatusError\n\tpub async fn into_err(mut self) -> StatusError {\n\t\tlet mut body = String::new();\n\t\tself.read.read_to_string(&mut body).await.ok();\n\n\t\tStatusError {\n\t\t\turl: self\n\t\t\t\t.url\n\t\t\t\t.map(|u| u.to_string())\n\t\t\t\t.unwrap_or_else(|| \"<invalid url>\".to_owned()),\n\t\t\tstatus_code: self.status_code.as_u16(),\n\t\t\tbody,\n\t\t}\n\t}\n\n\t/// Deserializes the response body as JSON\n\tpub async fn json<T: DeserializeOwned>(&mut self) -> Result<T, AnyError> {\n\t\tlet mut buf = vec![];\n\n\t\t// ideally serde would deserialize a stream, but it does not appear that\n\t\t// is supported. reqwest itself reads and decodes separately like we do here:\n\t\tself.read\n\t\t\t.read_to_end(&mut buf)\n\t\t\t.await\n\t\t\t.map_err(|e| wrap(e, \"error reading response\"))?;\n\n\t\tlet t = serde_json::from_slice(&buf)\n\t\t\t.map_err(|e| wrap(e, format!(\"error decoding json from {:?}\", self.url)))?;\n\n\t\tOk(t)\n\t}\n}\n\n/// *Very* simple HTTP implementation. In most cases, this will just delegate to\n/// the request library on the server (i.e. `reqwest`) but it can also be used\n/// to make update/download requests on the client rather than the server,\n/// similar to SSH's `remote.SSH.localServerDownload` setting.\n#[async_trait]\npub trait SimpleHttp {\n\tasync fn make_request(\n\t\t&self,\n\t\tmethod: &'static str,\n\t\turl: String,\n\t) -> Result<SimpleResponse, AnyError>;\n}\n\npub type BoxedHttp = Arc<dyn SimpleHttp + Send + Sync + 'static>;\n\n// Implementation of SimpleHttp that uses a reqwest client.\n#[derive(Clone)]\npub struct ReqwestSimpleHttp {\n\tclient: reqwest::Client,\n}\n\nimpl ReqwestSimpleHttp {\n\tpub fn new() -> Self {\n\t\tSelf {\n\t\t\tclient: reqwest::ClientBuilder::new()\n\t\t\t\t.user_agent(get_default_user_agent())\n\t\t\t\t.build()\n\t\t\t\t.unwrap(),\n\t\t}\n\t}\n\n\tpub fn with_client(client: reqwest::Client) -> Self {\n\t\tSelf { client }\n\t}\n}\n\nimpl Default for ReqwestSimpleHttp {\n\tfn default() -> Self {\n\t\tSelf::new()\n\t}\n}\n\n#[async_trait]\nimpl SimpleHttp for ReqwestSimpleHttp {\n\tasync fn make_request(\n\t\t&self,\n\t\tmethod: &'static str,\n\t\turl: String,\n\t) -> Result<SimpleResponse, AnyError> {\n\t\tlet res = self\n\t\t\t.client\n\t\t\t.request(reqwest::Method::try_from(method).unwrap(), &url)\n\t\t\t.send()\n\t\t\t.await?;\n\n\t\tOk(SimpleResponse {\n\t\t\tstatus_code: res.status(),\n\t\t\theaders: res.headers().clone(),\n\t\t\turl: Some(res.url().clone()),\n\t\t\tread: Box::pin(\n\t\t\t\tres.bytes_stream()\n\t\t\t\t\t.map_err(|e| futures::io::Error::new(futures::io::ErrorKind::Other, e))\n\t\t\t\t\t.into_async_read()\n\t\t\t\t\t.compat(),\n\t\t\t),\n\t\t})\n\t}\n}\n\nenum DelegatedHttpEvent {\n\tInitResponse {\n\t\tstatus_code: u16,\n\t\theaders: Vec<(String, String)>,\n\t},\n\tBody(Vec<u8>),\n\tEnd,\n}\n\n// Handle for a delegated request that allows manually issuing and response.\npub struct DelegatedHttpRequest {\n\tpub method: &'static str,\n\tpub url: String,\n\tch: mpsc::UnboundedSender<DelegatedHttpEvent>,\n}\n\nimpl DelegatedHttpRequest {\n\tpub fn initial_response(&self, status_code: u16, headers: Vec<(String, String)>) {\n\t\tself.ch\n\t\t\t.send(DelegatedHttpEvent::InitResponse {\n\t\t\t\tstatus_code,\n\t\t\t\theaders,\n\t\t\t})\n\t\t\t.ok();\n\t}\n\n\tpub fn body(&self, chunk: Vec<u8>) {\n\t\tself.ch.send(DelegatedHttpEvent::Body(chunk)).ok();\n\t}\n\n\tpub fn end(self) {}\n}\n\nimpl Drop for DelegatedHttpRequest {\n\tfn drop(&mut self) {\n\t\tself.ch.send(DelegatedHttpEvent::End).ok();\n\t}\n}\n\n/// Implementation of SimpleHttp that allows manually controlling responses.\n#[derive(Clone)]\npub struct DelegatedSimpleHttp {\n\tstart_request: mpsc::Sender<DelegatedHttpRequest>,\n\tlog: log::Logger,\n}\n\nimpl DelegatedSimpleHttp {\n\tpub fn new(log: log::Logger) -> (Self, mpsc::Receiver<DelegatedHttpRequest>) {\n\t\tlet (tx, rx) = mpsc::channel(4);\n\t\t(\n\t\t\tDelegatedSimpleHttp {\n\t\t\t\tlog,\n\t\t\t\tstart_request: tx,\n\t\t\t},\n\t\t\trx,\n\t\t)\n\t}\n}\n\n#[async_trait]\nimpl SimpleHttp for DelegatedSimpleHttp {\n\tasync fn make_request(\n\t\t&self,\n\t\tmethod: &'static str,\n\t\turl: String,\n\t) -> Result<SimpleResponse, AnyError> {\n\t\ttrace!(self.log, \"making delegated request to {}\", url);\n\t\tlet (tx, mut rx) = mpsc::unbounded_channel();\n\t\tlet sent = self\n\t\t\t.start_request\n\t\t\t.send(DelegatedHttpRequest {\n\t\t\t\tmethod,\n\t\t\t\turl: url.clone(),\n\t\t\t\tch: tx,\n\t\t\t})\n\t\t\t.await;\n\n\t\tif sent.is_err() {\n\t\t\treturn Ok(SimpleResponse::generic_error(&url)); // sender shut down\n\t\t}\n\n\t\tmatch rx.recv().await {\n\t\t\tSome(DelegatedHttpEvent::InitResponse {\n\t\t\t\tstatus_code,\n\t\t\t\theaders,\n\t\t\t}) => {\n\t\t\t\ttrace!(\n\t\t\t\t\tself.log,\n\t\t\t\t\t\"delegated request to {} resulted in status = {}\",\n\t\t\t\t\turl,\n\t\t\t\t\tstatus_code\n\t\t\t\t);\n\t\t\t\tlet mut headers_map = HeaderMap::with_capacity(headers.len());\n\t\t\t\tfor (k, v) in &headers {\n\t\t\t\t\tif let (Ok(key), Ok(value)) = (\n\t\t\t\t\t\tHeaderName::from_str(&k.to_lowercase()),\n\t\t\t\t\t\tHeaderValue::from_str(v),\n\t\t\t\t\t) {\n\t\t\t\t\t\theaders_map.insert(key, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tOk(SimpleResponse {\n\t\t\t\t\turl: url::Url::parse(&url).ok(),\n\t\t\t\t\tstatus_code: StatusCode::from_u16(status_code)\n\t\t\t\t\t\t.unwrap_or(StatusCode::INTERNAL_SERVER_ERROR),\n\t\t\t\t\theaders: headers_map,\n\t\t\t\t\tread: Box::pin(DelegatedReader::new(rx)),\n\t\t\t\t})\n\t\t\t}\n\t\t\tSome(DelegatedHttpEvent::End) => Ok(SimpleResponse::generic_error(&url)),\n\t\t\tSome(_) => panic!(\"expected initresponse as first message from delegated http\"),\n\t\t\tNone => Ok(SimpleResponse::generic_error(&url)), // sender shut down\n\t\t}\n\t}\n}\n\nstruct DelegatedReader {\n\treceiver: mpsc::UnboundedReceiver<DelegatedHttpEvent>,\n\treadbuf: ReadBuffer,\n}\n\nimpl DelegatedReader {\n\tpub fn new(rx: mpsc::UnboundedReceiver<DelegatedHttpEvent>) -> Self {\n\t\tDelegatedReader {\n\t\t\treadbuf: ReadBuffer::default(),\n\t\t\treceiver: rx,\n\t\t}\n\t}\n}\n\nimpl AsyncRead for DelegatedReader {\n\tfn poll_read(\n\t\tmut self: Pin<&mut Self>,\n\t\tcx: &mut std::task::Context<'_>,\n\t\tbuf: &mut tokio::io::ReadBuf<'_>,\n\t) -> std::task::Poll<std::io::Result<()>> {\n\t\tif let Some((v, s)) = self.readbuf.take_data() {\n\t\t\treturn self.readbuf.put_data(buf, v, s);\n\t\t}\n\n\t\tmatch self.receiver.poll_recv(cx) {\n\t\t\tPoll::Ready(Some(DelegatedHttpEvent::Body(msg))) => self.readbuf.put_data(buf, msg, 0),\n\t\t\tPoll::Ready(Some(_)) => Poll::Ready(Ok(())), // EOF\n\t\t\tPoll::Ready(None) => {\n\t\t\t\tPoll::Ready(Err(io::Error::new(io::ErrorKind::UnexpectedEof, \"EOF\")))\n\t\t\t}\n\t\t\tPoll::Pending => Poll::Pending,\n\t\t}\n\t}\n}\n\n/// Simple http implementation that falls back to delegated http if\n/// making a direct reqwest fails.\npub struct FallbackSimpleHttp {\n\tnative: ReqwestSimpleHttp,\n\tdelegated: DelegatedSimpleHttp,\n}\n\nimpl FallbackSimpleHttp {\n\tpub fn new(native: ReqwestSimpleHttp, delegated: DelegatedSimpleHttp) -> Self {\n\t\tFallbackSimpleHttp { native, delegated }\n\t}\n\n\tpub fn native(&self) -> ReqwestSimpleHttp {\n\t\tself.native.clone()\n\t}\n\n\tpub fn delegated(&self) -> DelegatedSimpleHttp {\n\t\tself.delegated.clone()\n\t}\n}\n\n#[async_trait]\nimpl SimpleHttp for FallbackSimpleHttp {\n\tasync fn make_request(\n\t\t&self,\n\t\tmethod: &'static str,\n\t\turl: String,\n\t) -> Result<SimpleResponse, AnyError> {\n\t\tlet r1 = self.native.make_request(method, url.clone()).await;\n\t\tif let Ok(res) = r1 {\n\t\t\tif !res.status_code.is_server_error() {\n\t\t\t\treturn Ok(res);\n\t\t\t}\n\t\t}\n\n\t\tself.delegated.make_request(method, url).await\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/input.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse crate::util::errors::wrap;\nuse dialoguer::{theme::ColorfulTheme, Confirm, Input, Select};\nuse indicatif::ProgressBar;\nuse std::fmt::Display;\n\nuse super::{errors::WrappedError, io::ReportCopyProgress};\n\n/// Wrapper around indicatif::ProgressBar that implements ReportCopyProgress.\npub struct ProgressBarReporter {\n\tbar: ProgressBar,\n\thas_set_total: bool,\n}\n\nimpl From<ProgressBar> for ProgressBarReporter {\n\tfn from(bar: ProgressBar) -> Self {\n\t\tProgressBarReporter {\n\t\t\tbar,\n\t\t\thas_set_total: false,\n\t\t}\n\t}\n}\n\nimpl ReportCopyProgress for ProgressBarReporter {\n\tfn report_progress(&mut self, bytes_so_far: u64, total_bytes: u64) {\n\t\tif !self.has_set_total {\n\t\t\tself.bar.set_length(total_bytes);\n\t\t}\n\n\t\tif bytes_so_far == total_bytes {\n\t\t\tself.bar.finish_and_clear();\n\t\t} else {\n\t\t\tself.bar.set_position(bytes_so_far);\n\t\t}\n\t}\n}\n\npub fn prompt_yn(text: &str) -> Result<bool, WrappedError> {\n\tConfirm::with_theme(&ColorfulTheme::default())\n\t\t.with_prompt(text)\n\t\t.default(true)\n\t\t.interact()\n\t\t.map_err(|e| wrap(e, \"Failed to read confirm input\"))\n}\n\npub fn prompt_options<T>(text: impl Into<String>, options: &[T]) -> Result<T, WrappedError>\nwhere\n\tT: Display + Copy,\n{\n\tlet chosen = Select::with_theme(&ColorfulTheme::default())\n\t\t.with_prompt(text)\n\t\t.items(options)\n\t\t.default(0)\n\t\t.interact()\n\t\t.map_err(|e| wrap(e, \"Failed to read select input\"))?;\n\n\tOk(options[chosen])\n}\n\npub fn prompt_placeholder(question: &str, placeholder: &str) -> Result<String, WrappedError> {\n\tInput::with_theme(&ColorfulTheme::default())\n\t\t.with_prompt(question)\n\t\t.default(placeholder.to_string())\n\t\t.interact_text()\n\t\t.map_err(|e| wrap(e, \"Failed to read confirm input\"))\n}\n"
  },
  {
    "path": "cli/src/util/io.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse std::{\n\tfs::File,\n\tio::{self, BufRead, Seek},\n\ttask::Poll,\n\ttime::Duration,\n};\n\nuse tokio::{\n\tio::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt},\n\tsync::mpsc,\n\ttime::sleep,\n};\n\nuse super::ring_buffer::RingBuffer;\n\npub trait ReportCopyProgress {\n\tfn report_progress(&mut self, bytes_so_far: u64, total_bytes: u64);\n}\n\n/// Type that doesn't emit anything for download progress.\npub struct SilentCopyProgress();\n\nimpl ReportCopyProgress for SilentCopyProgress {\n\tfn report_progress(&mut self, _bytes_so_far: u64, _total_bytes: u64) {}\n}\n\n/// Copies from the reader to the writer, reporting progress to the provided\n/// reporter every so often.\npub async fn copy_async_progress<T, R, W>(\n\tmut reporter: T,\n\treader: &mut R,\n\twriter: &mut W,\n\ttotal_bytes: u64,\n) -> io::Result<u64>\nwhere\n\tR: AsyncRead + Unpin,\n\tW: AsyncWrite + Unpin,\n\tT: ReportCopyProgress,\n{\n\tlet mut buf = vec![0; 8 * 1024];\n\tlet mut bytes_so_far = 0;\n\tlet mut bytes_last_reported = 0;\n\tlet report_granularity = std::cmp::min(total_bytes / 10, 2 * 1024 * 1024);\n\n\treporter.report_progress(0, total_bytes);\n\n\tloop {\n\t\tlet read_buf = match reader.read(&mut buf).await {\n\t\t\tOk(0) => break,\n\t\t\tOk(n) => &buf[..n],\n\t\t\tErr(e) => return Err(e),\n\t\t};\n\n\t\twriter.write_all(read_buf).await?;\n\n\t\tbytes_so_far += read_buf.len() as u64;\n\t\tif bytes_so_far - bytes_last_reported > report_granularity {\n\t\t\tbytes_last_reported = bytes_so_far;\n\t\t\treporter.report_progress(bytes_so_far, total_bytes);\n\t\t}\n\t}\n\n\treporter.report_progress(bytes_so_far, total_bytes);\n\n\tOk(bytes_so_far)\n}\n\n/// Helper used when converting Future interfaces to poll-based interfaces.\n/// Stores excess data that can be reused on future polls.\n#[derive(Default)]\npub(crate) struct ReadBuffer(Option<(Vec<u8>, usize)>);\n\nimpl ReadBuffer {\n\t/// Removes any data stored in the read buffer\n\tpub fn take_data(&mut self) -> Option<(Vec<u8>, usize)> {\n\t\tself.0.take()\n\t}\n\n\t/// Writes as many bytes as possible to the readbuf, stashing any extra.\n\tpub fn put_data(\n\t\t&mut self,\n\t\ttarget: &mut tokio::io::ReadBuf<'_>,\n\t\tbytes: Vec<u8>,\n\t\tstart: usize,\n\t) -> Poll<std::io::Result<()>> {\n\t\tif bytes.is_empty() {\n\t\t\tself.0 = None;\n\t\t\t// should not return Ok(), since if nothing is written to the target\n\t\t\t// it signals EOF. Instead wait for more data from the source.\n\t\t\treturn Poll::Pending;\n\t\t}\n\n\t\tif target.remaining() >= bytes.len() - start {\n\t\t\ttarget.put_slice(&bytes[start..]);\n\t\t\tself.0 = None;\n\t\t} else {\n\t\t\tlet end = start + target.remaining();\n\t\t\ttarget.put_slice(&bytes[start..end]);\n\t\t\tself.0 = Some((bytes, end));\n\t\t}\n\n\t\tPoll::Ready(Ok(()))\n\t}\n}\n\n#[derive(Debug)]\npub enum TailEvent {\n\t/// A new line was read from the file. The line includes its trailing newline character.\n\tLine(String),\n\t/// The file appears to have been rewritten (size shrunk)\n\tReset,\n\t/// An error was encountered with the file.\n\tErr(io::Error),\n}\n\n/// Simple, naive implementation of `tail -f -n <n> <path>`. Uses polling, so\n/// it's not the fastest, but simple and working for easy cases.\npub fn tailf(file: File, n: usize) -> mpsc::UnboundedReceiver<TailEvent> {\n\tlet (tx, rx) = mpsc::unbounded_channel();\n\tlet mut last_len = match file.metadata() {\n\t\tOk(m) => m.len(),\n\t\tErr(e) => {\n\t\t\ttx.send(TailEvent::Err(e)).ok();\n\t\t\treturn rx;\n\t\t}\n\t};\n\n\tlet mut reader = io::BufReader::new(file);\n\tlet mut pos = 0;\n\n\t// Read the initial \"n\" lines back from the request. initial_lines\n\t// is a small ring buffer.\n\tlet mut initial_lines = RingBuffer::new(n);\n\tloop {\n\t\tlet mut line = String::new();\n\t\tlet bytes_read = match reader.read_line(&mut line) {\n\t\t\tOk(0) => break,\n\t\t\tOk(n) => n,\n\t\t\tErr(e) => {\n\t\t\t\ttx.send(TailEvent::Err(e)).ok();\n\t\t\t\treturn rx;\n\t\t\t}\n\t\t};\n\n\t\tif !line.ends_with('\\n') {\n\t\t\t// EOF\n\t\t\tbreak;\n\t\t}\n\n\t\tpos += bytes_read as u64;\n\t\tinitial_lines.push(line);\n\t}\n\n\tfor line in initial_lines.into_iter() {\n\t\ttx.send(TailEvent::Line(line)).ok();\n\t}\n\n\t// now spawn the poll process to keep reading new lines\n\ttokio::spawn(async move {\n\t\tlet poll_interval = Duration::from_millis(500);\n\n\t\tloop {\n\t\t\ttokio::select! {\n\t\t\t\t_ = sleep(poll_interval) => {},\n\t\t\t\t_ = tx.closed() => return\n\t\t\t}\n\n\t\t\tmatch reader.get_ref().metadata() {\n\t\t\t\tErr(e) => {\n\t\t\t\t\ttx.send(TailEvent::Err(e)).ok();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tOk(m) => {\n\t\t\t\t\tif m.len() == last_len {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif m.len() < last_len {\n\t\t\t\t\t\ttx.send(TailEvent::Reset).ok();\n\t\t\t\t\t\tpos = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tlast_len = m.len();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif let Err(e) = reader.seek(io::SeekFrom::Start(pos)) {\n\t\t\t\ttx.send(TailEvent::Err(e)).ok();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tloop {\n\t\t\t\tlet mut line = String::new();\n\t\t\t\tlet n = match reader.read_line(&mut line) {\n\t\t\t\t\tOk(0) => break,\n\t\t\t\t\tOk(n) => n,\n\t\t\t\t\tErr(e) => {\n\t\t\t\t\t\ttx.send(TailEvent::Err(e)).ok();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif n == 0 || !line.ends_with('\\n') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tpos += n as u64;\n\t\t\t\tif tx.send(TailEvent::Line(line)).is_err() {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\trx\n}\n\n#[cfg(test)]\nmod tests {\n\tuse rand::Rng;\n\tuse std::{fs::OpenOptions, io::Write};\n\n\tuse super::*;\n\n\t#[tokio::test]\n\tasync fn test_tailf_empty() {\n\t\tlet dir = tempfile::tempdir().unwrap();\n\t\tlet file_path = dir.path().join(\"tmp\");\n\n\t\tlet read_file = OpenOptions::new()\n\t\t\t.write(true)\n\t\t\t.read(true)\n\t\t\t.create(true)\n\t\t\t.truncate(true)\n\t\t\t.open(&file_path)\n\t\t\t.unwrap();\n\n\t\tlet mut rx = tailf(read_file, 32);\n\t\tassert!(rx.try_recv().is_err());\n\n\t\tlet mut append_file = OpenOptions::new().append(true).open(&file_path).unwrap();\n\t\twriteln!(&mut append_file, \"some line\").unwrap();\n\n\t\tlet recv = rx.recv().await;\n\t\tif let Some(TailEvent::Line(l)) = recv {\n\t\t\tassert_eq!(\"some line\\n\".to_string(), l);\n\t\t} else {\n\t\t\tunreachable!(\"expect a line event, got {:?}\", recv)\n\t\t}\n\n\t\twrite!(&mut append_file, \"partial \").unwrap();\n\t\twriteln!(&mut append_file, \"line\").unwrap();\n\n\t\tlet recv = rx.recv().await;\n\t\tif let Some(TailEvent::Line(l)) = recv {\n\t\t\tassert_eq!(\"partial line\\n\".to_string(), l);\n\t\t} else {\n\t\t\tunreachable!(\"expect a line event, got {:?}\", recv)\n\t\t}\n\t}\n\n\t#[tokio::test]\n\tasync fn test_tailf_resets() {\n\t\tlet dir = tempfile::tempdir().unwrap();\n\t\tlet file_path = dir.path().join(\"tmp\");\n\n\t\tlet mut read_file = OpenOptions::new()\n\t\t\t.write(true)\n\t\t\t.read(true)\n\t\t\t.create(true)\n\t\t\t.truncate(true)\n\t\t\t.open(&file_path)\n\t\t\t.unwrap();\n\n\t\twriteln!(&mut read_file, \"some existing content\").unwrap();\n\t\tlet mut rx = tailf(read_file, 0);\n\t\tassert!(rx.try_recv().is_err());\n\n\t\tlet mut append_file = File::create(&file_path).unwrap(); // truncates\n\t\twriteln!(&mut append_file, \"some line\").unwrap();\n\n\t\tlet recv = rx.recv().await;\n\t\tif let Some(TailEvent::Reset) = recv {\n\t\t\t// ok\n\t\t} else {\n\t\t\tunreachable!(\"expect a reset event, got {:?}\", recv)\n\t\t}\n\n\t\tlet recv = rx.recv().await;\n\t\tif let Some(TailEvent::Line(l)) = recv {\n\t\t\tassert_eq!(\"some line\\n\".to_string(), l);\n\t\t} else {\n\t\t\tunreachable!(\"expect a line event, got {:?}\", recv)\n\t\t}\n\t}\n\n\t#[tokio::test]\n\tasync fn test_tailf_with_data() {\n\t\tlet dir = tempfile::tempdir().unwrap();\n\t\tlet file_path = dir.path().join(\"tmp\");\n\n\t\tlet mut read_file = OpenOptions::new()\n\t\t\t.write(true)\n\t\t\t.read(true)\n\t\t\t.create(true)\n\t\t\t.truncate(true)\n\t\t\t.open(&file_path)\n\t\t\t.unwrap();\n\t\tlet mut rng = rand::thread_rng();\n\n\t\tlet mut written = vec![];\n\t\tlet base_line = \"Elit ipsum cillum ex cillum. Adipisicing consequat cupidatat do proident ut in sunt Lorem ipsum tempor. Eiusmod ipsum Lorem labore exercitation sunt pariatur excepteur fugiat cillum velit cillum enim. Nisi Lorem cupidatat ad enim velit officia eiusmod esse tempor aliquip. Deserunt pariatur tempor in duis culpa esse sit nulla irure ullamco ipsum voluptate non laboris. Occaecat officia nulla officia mollit do aliquip reprehenderit ad incididunt.\";\n\t\tfor i in 0..100 {\n\t\t\tlet line = format!(\"{}: {}\", i, &base_line[..rng.gen_range(0..base_line.len())]);\n\t\t\twriteln!(&mut read_file, \"{line}\").unwrap();\n\t\t\twritten.push(line);\n\t\t}\n\t\twrite!(&mut read_file, \"partial line\").unwrap();\n\t\tread_file.seek(io::SeekFrom::Start(0)).unwrap();\n\n\t\tlet last_n = 32;\n\t\tlet mut rx = tailf(read_file, last_n);\n\t\tfor i in 0..last_n {\n\t\t\tlet recv = rx.try_recv().unwrap();\n\t\t\tif let TailEvent::Line(l) = recv {\n\t\t\t\tlet mut expected = written[written.len() - last_n + i].to_string();\n\t\t\t\texpected.push('\\n');\n\t\t\t\tassert_eq!(expected, l);\n\t\t\t} else {\n\t\t\t\tunreachable!(\"expect a line event, got {:?}\", recv)\n\t\t\t}\n\t\t}\n\n\t\tassert!(rx.try_recv().is_err());\n\n\t\tlet mut append_file = OpenOptions::new().append(true).open(&file_path).unwrap();\n\t\twriteln!(append_file, \" is now complete\").unwrap();\n\n\t\tlet recv = rx.recv().await;\n\t\tif let Some(TailEvent::Line(l)) = recv {\n\t\t\tassert_eq!(\"partial line is now complete\\n\".to_string(), l);\n\t\t} else {\n\t\t\tunreachable!(\"expect a line event, got {:?}\", recv)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/is_integrated.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{env, io};\n\n/// Gets whether the current CLI seems like it's running in integrated mode,\n/// by looking at the location of the exe and known VS Code files.\npub fn is_integrated_cli() -> io::Result<bool> {\n\tlet exe = env::current_exe()?;\n\n\tlet parent = match exe.parent() {\n\t\tSome(parent) if parent.file_name().and_then(|n| n.to_str()) == Some(\"bin\") => parent,\n\t\t_ => return Ok(false),\n\t};\n\n\tlet parent = match parent.parent() {\n\t\tSome(p) => p,\n\t\tNone => return Ok(false),\n\t};\n\n\tlet expected_file = if cfg!(target_os = \"macos\") {\n\t\t\"node_modules.asar\"\n\t} else {\n\t\t\"resources.pak\"\n\t};\n\n\tOk(parent.join(expected_file).exists())\n}\n"
  },
  {
    "path": "cli/src/util/machine.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nuse std::{\n\tffi::OsString,\n\tpath::{Path, PathBuf},\n\ttime::Duration,\n};\nuse sysinfo::{Pid, PidExt, ProcessExt, System, SystemExt};\n\npub fn process_at_path_exists(pid: u32, name: &Path) -> bool {\n\tlet mut sys = System::new();\n\tlet pid = Pid::from_u32(pid);\n\tif !sys.refresh_process(pid) {\n\t\treturn false;\n\t}\n\n\tlet name_str = format!(\"{}\", name.display());\n\tif let Some(process) = sys.process(pid) {\n\t\tfor cmd in process.cmd() {\n\t\t\tif cmd.contains(&name_str) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tfalse\n}\npub fn process_exists(pid: u32) -> bool {\n\tlet mut sys = System::new();\n\tsys.refresh_process(Pid::from_u32(pid))\n}\n\npub fn kill_pid(pid: u32) -> bool {\n\tlet mut sys = System::new();\n\tlet pid = Pid::from_u32(pid);\n\tsys.refresh_process(pid);\n\n\tif let Some(p) = sys.process(pid) {\n\t\tp.kill()\n\t} else {\n\t\tfalse\n\t}\n}\n\npub async fn wait_until_process_exits(pid: Pid, poll_ms: u64) {\n\tlet mut s = System::new();\n\tlet duration = Duration::from_millis(poll_ms);\n\twhile s.refresh_process(pid) {\n\t\ttokio::time::sleep(duration).await;\n\t}\n}\n\npub fn find_running_process(name: &Path) -> Option<u32> {\n\tlet mut sys = System::new();\n\tsys.refresh_processes();\n\n\tlet name_str = format!(\"{}\", name.display());\n\n\tfor (pid, process) in sys.processes() {\n\t\tfor cmd in process.cmd() {\n\t\t\tif cmd.contains(&name_str) {\n\t\t\t\treturn Some(pid.as_u32());\n\t\t\t}\n\t\t}\n\t}\n\tNone\n}\n\npub async fn wait_until_exe_deleted(current_exe: &Path, poll_ms: u64) {\n\tlet duration = Duration::from_millis(poll_ms);\n\twhile current_exe.exists() {\n\t\ttokio::time::sleep(duration).await;\n\t}\n}\n\n/// Gets the canonical current exe location, referring to the \"current\" symlink\n/// if running inside snap.\npub fn canonical_exe() -> std::io::Result<PathBuf> {\n\tcanonical_exe_inner(\n\t\tstd::env::current_exe(),\n\t\tstd::env::var_os(\"SNAP\"),\n\t\tstd::env::var_os(\"SNAP_REVISION\"),\n\t)\n}\n\n#[inline(always)]\n#[allow(unused_variables)]\nfn canonical_exe_inner(\n\texe: std::io::Result<PathBuf>,\n\tsnap: Option<OsString>,\n\trev: Option<OsString>,\n) -> std::io::Result<PathBuf> {\n\tlet exe = exe?;\n\n\t#[cfg(target_os = \"linux\")]\n\tif let (Some(snap), Some(rev)) = (snap, rev) {\n\t\tif !exe.starts_with(snap) {\n\t\t\treturn Ok(exe);\n\t\t}\n\n\t\tlet mut out = PathBuf::new();\n\t\tfor part in exe.iter() {\n\t\t\tif part == rev {\n\t\t\t\tout.push(\"current\")\n\t\t\t} else {\n\t\t\t\tout.push(part)\n\t\t\t}\n\t\t}\n\n\t\treturn Ok(out);\n\t}\n\n\tOk(exe)\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\tuse std::path::PathBuf;\n\n\t#[test]\n\t#[cfg(target_os = \"linux\")]\n\tfn test_canonical_exe_in_snap() {\n\t\tlet exe = canonical_exe_inner(\n\t\t\tOk(PathBuf::from(\"/snap/my-snap/1234/some/exe\")),\n\t\t\tSome(\"/snap/my-snap/1234\".into()),\n\t\t\tSome(\"1234\".into()),\n\t\t)\n\t\t.unwrap();\n\t\tassert_eq!(exe, PathBuf::from(\"/snap/my-snap/current/some/exe\"));\n\t}\n\n\t#[test]\n\tfn test_canonical_exe_not_in_snap() {\n\t\tlet exe = canonical_exe_inner(\n\t\t\tOk(PathBuf::from(\"/not-in-snap\")),\n\t\t\tSome(\"/snap/my-snap/1234\".into()),\n\t\t\tSome(\"1234\".into()),\n\t\t)\n\t\t.unwrap();\n\t\tassert_eq!(exe, PathBuf::from(\"/not-in-snap\"));\n\t}\n\n\t#[test]\n\tfn test_canonical_exe_not_in_snap2() {\n\t\tlet exe = canonical_exe_inner(Ok(PathBuf::from(\"/not-in-snap\")), None, None).unwrap();\n\t\tassert_eq!(exe, PathBuf::from(\"/not-in-snap\"));\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/os.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n#[cfg(windows)]\npub fn os_release() -> Result<String, std::io::Error> {\n\t// The windows API *had* nice GetVersionEx/A APIs, but these were deprecated\n\t// in Winodws 8 and there's no newer win API to get version numbers. So\n\t// instead read the registry.\n\n\tuse winreg::{enums::HKEY_LOCAL_MACHINE, RegKey};\n\n\tlet key = RegKey::predef(HKEY_LOCAL_MACHINE)\n\t\t.open_subkey(r\"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\")?;\n\n\tlet major: u32 = key.get_value(\"CurrentMajorVersionNumber\")?;\n\tlet minor: u32 = key.get_value(\"CurrentMinorVersionNumber\")?;\n\tlet build: String = key.get_value(\"CurrentBuild\")?;\n\n\tOk(format!(\"{}.{}.{}\", major, minor, build))\n}\n\n#[cfg(unix)]\npub fn os_release() -> Result<String, std::io::Error> {\n\tuse std::{ffi::CStr, mem};\n\n\tunsafe {\n\t\tlet mut ret = mem::MaybeUninit::zeroed();\n\n\t\tif libc::uname(ret.as_mut_ptr()) != 0 {\n\t\t\treturn Err(std::io::Error::last_os_error());\n\t\t}\n\n\t\tlet ret = ret.assume_init();\n\t\tlet c_str: &CStr = CStr::from_ptr(ret.release.as_ptr());\n\t\tOk(c_str.to_string_lossy().into_owned())\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/prereqs.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse std::cmp::Ordering;\n\nuse crate::constants::QUALITYLESS_SERVER_NAME;\nuse crate::update_service::Platform;\nuse lazy_static::lazy_static;\nuse regex::bytes::Regex as BinRegex;\nuse regex::Regex;\nuse tokio::fs;\n\nuse super::errors::CodeError;\n\nlazy_static! {\n\tstatic ref LDCONFIG_STDC_RE: Regex = Regex::new(r\"libstdc\\+\\+.* => (.+)\").unwrap();\n\tstatic ref LDD_VERSION_RE: BinRegex = BinRegex::new(r\"^ldd.*\\s(\\d+)\\.(\\d+)(?:\\.(\\d+))?\\s\").unwrap();\n\tstatic ref GENERIC_VERSION_RE: Regex = Regex::new(r\"^([0-9]+)\\.([0-9]+)$\").unwrap();\n\tstatic ref LIBSTD_CXX_VERSION_RE: BinRegex =\n\t\tBinRegex::new(r\"GLIBCXX_([0-9]+)\\.([0-9]+)(?:\\.([0-9]+))?\").unwrap();\n\tstatic ref MIN_LDD_VERSION: SimpleSemver = SimpleSemver::new(2, 28, 0);\n}\n\n#[cfg(target_arch = \"arm\")]\nlazy_static! {\n\tstatic ref MIN_CXX_VERSION: SimpleSemver = SimpleSemver::new(3, 4, 26);\n}\n\n#[cfg(not(target_arch = \"arm\"))]\nlazy_static! {\n\tstatic ref MIN_CXX_VERSION: SimpleSemver = SimpleSemver::new(3, 4, 25);\n}\n\nconst NIXOS_TEST_PATH: &str = \"/etc/NIXOS\";\n\npub struct PreReqChecker {}\n\nimpl Default for PreReqChecker {\n\tfn default() -> Self {\n\t\tSelf::new()\n\t}\n}\n\nimpl PreReqChecker {\n\tpub fn new() -> PreReqChecker {\n\t\tPreReqChecker {}\n\t}\n\n\t#[cfg(not(target_os = \"linux\"))]\n\tpub async fn verify(&self) -> Result<Platform, CodeError> {\n\t\tPlatform::env_default().ok_or_else(|| {\n\t\t\tCodeError::UnsupportedPlatform(format!(\n\t\t\t\t\"{} {}\",\n\t\t\t\tstd::env::consts::OS,\n\t\t\t\tstd::env::consts::ARCH\n\t\t\t))\n\t\t})\n\t}\n\n\t#[cfg(target_os = \"linux\")]\n\tpub async fn verify(&self) -> Result<Platform, CodeError> {\n\t\tlet (is_nixos, skip_glibc_checks, or_musl) = tokio::join!(\n\t\t\tcheck_is_nixos(),\n\t\t\tskip_requirements_check(),\n\t\t\tcheck_musl_interpreter()\n\t\t);\n\n\t\tlet (gnu_a, gnu_b) = if !skip_glibc_checks {\n\t\t\ttokio::join!(check_glibc_version(), check_glibcxx_version())\n\t\t} else {\n\t\t\tprintln!(\"!!! WARNING: Skipping server pre-requisite check !!!\");\n\t\t\tprintln!(\"!!! Server stability is not guaranteed. Proceed at your own risk. !!!\");\n\t\t\t(Ok(true), Ok(true))\n\t\t};\n\n\t\tmatch (&gnu_a, &gnu_b, is_nixos) {\n\t\t\t(Ok(true), Ok(true), _) | (_, _, true) => {\n\t\t\t\treturn Ok(if cfg!(target_arch = \"x86_64\") {\n\t\t\t\t\tPlatform::LinuxX64\n\t\t\t\t} else if cfg!(target_arch = \"arm\") {\n\t\t\t\t\tPlatform::LinuxARM32\n\t\t\t\t} else {\n\t\t\t\t\tPlatform::LinuxARM64\n\t\t\t\t});\n\t\t\t}\n\t\t\t_ => {}\n\t\t};\n\n\t\tif or_musl.is_ok() {\n\t\t\treturn Ok(if cfg!(target_arch = \"x86_64\") {\n\t\t\t\tPlatform::LinuxAlpineX64\n\t\t\t} else {\n\t\t\t\tPlatform::LinuxAlpineARM64\n\t\t\t});\n\t\t}\n\n\t\tlet mut errors: Vec<String> = vec![];\n\t\tif let Err(e) = gnu_a {\n\t\t\terrors.push(e);\n\t\t} else if let Err(e) = gnu_b {\n\t\t\terrors.push(e);\n\t\t}\n\n\t\tif let Err(e) = or_musl {\n\t\t\terrors.push(e);\n\t\t}\n\n\t\tlet bullets = errors\n\t\t\t.iter()\n\t\t\t.map(|e| format!(\"  - {e}\"))\n\t\t\t.collect::<Vec<String>>()\n\t\t\t.join(\"\\n\");\n\n\t\tErr(CodeError::PrerequisitesFailed {\n\t\t\tbullets,\n\t\t\tname: QUALITYLESS_SERVER_NAME,\n\t\t})\n\t}\n}\n\n#[allow(dead_code)]\nasync fn check_musl_interpreter() -> Result<(), String> {\n\tconst MUSL_PATH: &str = if cfg!(target_arch = \"aarch64\") {\n\t\t\"/lib/ld-musl-aarch64.so.1\"\n\t} else {\n\t\t\"/lib/ld-musl-x86_64.so.1\"\n\t};\n\n\tif fs::metadata(MUSL_PATH).await.is_err() {\n\t\treturn Err(format!(\n\t\t\t\"find {MUSL_PATH}, which is required to run the {QUALITYLESS_SERVER_NAME} in musl environments\"\n\t\t));\n\t}\n\n\tOk(())\n}\n\n/// Checks the glibc version, returns \"true\" if the default server is required.\n#[cfg(target_os = \"linux\")]\nasync fn check_glibc_version() -> Result<bool, String> {\n\t#[cfg(target_env = \"gnu\")]\n\tlet version = {\n\t\tlet v = unsafe { libc::gnu_get_libc_version() };\n\t\tlet v = unsafe { std::ffi::CStr::from_ptr(v) };\n\t\tlet v = v.to_str().unwrap();\n\t\textract_generic_version(v)\n\t};\n\t#[cfg(not(target_env = \"gnu\"))]\n\tlet version = {\n\t\tsuper::command::capture_command(\"ldd\", [\"--version\"])\n\t\t\t.await\n\t\t\t.ok()\n\t\t\t.and_then(|o| extract_ldd_version(&o.stdout))\n\t};\n\n\tif let Some(v) = version {\n\t\treturn if v >= *MIN_LDD_VERSION {\n\t\t\tOk(true)\n\t\t} else {\n\t\t\tErr(format!(\n\t\t\t\t\"find GLIBC >= {} (but found {} instead) for GNU environments\",\n\t\t\t\t*MIN_LDD_VERSION, v\n\t\t\t))\n\t\t};\n\t}\n\n\tOk(false)\n}\n\n/// Check for nixos to avoid mandating glibc versions. See:\n/// https://github.com/microsoft/vscode-remote-release/issues/7129\n#[allow(dead_code)]\nasync fn check_is_nixos() -> bool {\n\tfs::metadata(NIXOS_TEST_PATH).await.is_ok()\n}\n\n/// Do not remove this check.\n/// Provides a way to skip the server glibc requirements check from\n/// outside the install flow.\n///\n/// 1) A system process can create this\n///    file before the server is downloaded and installed.\n///\n/// 2) An environment variable declared in host\n///    that contains path to a glibc sysroot satisfying the\n///    minimum requirements.\n#[cfg(not(windows))]\npub async fn skip_requirements_check() -> bool {\n\tstd::env::var(\"VSCODE_SERVER_CUSTOM_GLIBC_LINKER\").is_ok() ||\n\tfs::metadata(\"/tmp/vscode-skip-server-requirements-check\")\n\t\t.await\n\t\t.is_ok()\n}\n\n#[cfg(windows)]\npub async fn skip_requirements_check() -> bool {\n\tfalse\n}\n\n/// Checks the glibc++ version, returns \"true\" if the default server is required.\n#[cfg(target_os = \"linux\")]\nasync fn check_glibcxx_version() -> Result<bool, String> {\n\tlet mut libstdc_path: Option<String> = None;\n\n\t#[cfg(any(target_arch = \"x86_64\", target_arch = \"aarch64\"))]\n\tconst DEFAULT_LIB_PATH: &str = \"/usr/lib64/libstdc++.so.6\";\n\t#[cfg(any(target_arch = \"x86\", target_arch = \"arm\"))]\n\tconst DEFAULT_LIB_PATH: &str = \"/usr/lib/libstdc++.so.6\";\n\tconst LDCONFIG_PATH: &str = \"/sbin/ldconfig\";\n\n\tif fs::metadata(DEFAULT_LIB_PATH).await.is_ok() {\n\t\tlibstdc_path = Some(DEFAULT_LIB_PATH.to_owned());\n\t} else if fs::metadata(LDCONFIG_PATH).await.is_ok() {\n\t\tlibstdc_path = super::command::capture_command(LDCONFIG_PATH, [\"-p\"])\n\t\t\t.await\n\t\t\t.ok()\n\t\t\t.and_then(|o| extract_libstd_from_ldconfig(&o.stdout));\n\t}\n\n\tmatch libstdc_path {\n\t\tSome(path) => match fs::read(&path).await {\n\t\t\tOk(contents) => check_for_sufficient_glibcxx_versions(contents),\n\t\t\tErr(e) => Err(format!(\n\t\t\t\t\"validate GLIBCXX version for GNU environments, but could not: {e}\"\n\t\t\t)),\n\t\t},\n\t\tNone => Err(\"find libstdc++.so or ldconfig for GNU environments\".to_owned()),\n\t}\n}\n\n#[cfg(target_os = \"linux\")]\nfn check_for_sufficient_glibcxx_versions(contents: Vec<u8>) -> Result<bool, String> {\n\tlet max_version = LIBSTD_CXX_VERSION_RE\n\t\t.captures_iter(&contents)\n\t\t.map(|m| SimpleSemver {\n\t\t\tmajor: m.get(1).map_or(0, |s| u32_from_bytes(s.as_bytes())),\n\t\t\tminor: m.get(2).map_or(0, |s| u32_from_bytes(s.as_bytes())),\n\t\t\tpatch: m.get(3).map_or(0, |s| u32_from_bytes(s.as_bytes())),\n\t\t})\n\t\t.max();\n\n\tif let Some(max_version) = &max_version {\n\t\tif max_version >= &*MIN_CXX_VERSION {\n\t\t\treturn Ok(true);\n\t\t}\n\t}\n\n\tErr(format!(\n\t\t\"find GLIBCXX >= {} (but found {} instead) for GNU environments\",\n\t\t*MIN_CXX_VERSION,\n\t\tmax_version\n\t\t\t.as_ref()\n\t\t\t.map(String::from)\n\t\t\t.unwrap_or(\"none\".to_string())\n\t))\n}\n\n#[allow(dead_code)]\nfn extract_ldd_version(output: &[u8]) -> Option<SimpleSemver> {\n\tLDD_VERSION_RE.captures(output).map(|m| SimpleSemver {\n\t\tmajor: m.get(1).map_or(0, |s| u32_from_bytes(s.as_bytes())),\n\t\tminor: m.get(2).map_or(0, |s| u32_from_bytes(s.as_bytes())),\n\t\tpatch: 0,\n\t})\n}\n\n#[allow(dead_code)]\nfn extract_generic_version(output: &str) -> Option<SimpleSemver> {\n\tGENERIC_VERSION_RE.captures(output).map(|m| SimpleSemver {\n\t\tmajor: m.get(1).map_or(0, |s| s.as_str().parse().unwrap()),\n\t\tminor: m.get(2).map_or(0, |s| s.as_str().parse().unwrap()),\n\t\tpatch: 0,\n\t})\n}\n\n#[allow(dead_code)]\nfn extract_libstd_from_ldconfig(output: &[u8]) -> Option<String> {\n\tString::from_utf8_lossy(output)\n\t\t.lines()\n\t\t.find_map(|l| LDCONFIG_STDC_RE.captures(l))\n\t\t.and_then(|cap| cap.get(1))\n\t\t.map(|cap| cap.as_str().to_owned())\n}\n\nfn u32_from_bytes(b: &[u8]) -> u32 {\n\tString::from_utf8_lossy(b).parse::<u32>().unwrap_or(0)\n}\n\n#[derive(Debug, Default, PartialEq, Eq)]\nstruct SimpleSemver {\n\tmajor: u32,\n\tminor: u32,\n\tpatch: u32,\n}\n\nimpl PartialOrd for SimpleSemver {\n\tfn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n\t\tSome(self.cmp(other))\n\t}\n}\n\nimpl Ord for SimpleSemver {\n\tfn cmp(&self, other: &Self) -> Ordering {\n\t\tlet major = self.major.cmp(&other.major);\n\t\tif major != Ordering::Equal {\n\t\t\treturn major;\n\t\t}\n\n\t\tlet minor = self.minor.cmp(&other.minor);\n\t\tif minor != Ordering::Equal {\n\t\t\treturn minor;\n\t\t}\n\n\t\tself.patch.cmp(&other.patch)\n\t}\n}\n\nimpl From<&SimpleSemver> for String {\n\tfn from(s: &SimpleSemver) -> Self {\n\t\tformat!(\"v{}.{}.{}\", s.major, s.minor, s.patch)\n\t}\n}\n\nimpl std::fmt::Display for SimpleSemver {\n\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n\t\twrite!(f, \"{}\", String::from(self))\n\t}\n}\n\n#[allow(dead_code)]\nimpl SimpleSemver {\n\tfn new(major: u32, minor: u32, patch: u32) -> SimpleSemver {\n\t\tSimpleSemver {\n\t\t\tmajor,\n\t\t\tminor,\n\t\t\tpatch,\n\t\t}\n\t}\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\n\t#[test]\n\tfn test_extract_libstd_from_ldconfig() {\n\t\tlet actual = \"\n\t\t\t\t\t\t\tlibstoken.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libstoken.so.1\n\t\t\t\t\t\t\tlibstemmer.so.0d (libc6,x86-64) => /lib/x86_64-linux-gnu/libstemmer.so.0d\n\t\t\t\t\t\t\tlibstdc++.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libstdc++.so.6\n\t\t\t\t\t\t\tlibstartup-notification-1.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libstartup-notification-1.so.0\n\t\t\t\t\t\t\tlibssl3.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libssl3.so\n\t\t\t\t\t\".to_owned().into_bytes();\n\n\t\tassert_eq!(\n\t\t\textract_libstd_from_ldconfig(&actual),\n\t\t\tSome(\"/lib/x86_64-linux-gnu/libstdc++.so.6\".to_owned()),\n\t\t);\n\n\t\tassert_eq!(\n\t\t\textract_libstd_from_ldconfig(&\"nothing here!\".to_owned().into_bytes()),\n\t\t\tNone,\n\t\t);\n\t}\n\n\t#[test]\n\tfn test_gte() {\n\t\tassert!(SimpleSemver::new(1, 2, 3) >= SimpleSemver::new(1, 2, 3));\n\t\tassert!(SimpleSemver::new(1, 2, 3) >= SimpleSemver::new(0, 10, 10));\n\t\tassert!(SimpleSemver::new(1, 2, 3) >= SimpleSemver::new(1, 1, 10));\n\n\t\tassert!(SimpleSemver::new(1, 2, 3) < SimpleSemver::new(1, 2, 10));\n\t\tassert!(SimpleSemver::new(1, 2, 3) < SimpleSemver::new(1, 3, 1));\n\t\tassert!(SimpleSemver::new(1, 2, 3) < SimpleSemver::new(2, 2, 1));\n\t}\n\n\t#[test]\n\tfn check_for_sufficient_glibcxx_versions() {\n\t\tlet actual = \"ldd (Ubuntu GLIBC 2.31-0ubuntu9.7) 2.31\n\t\t\t\t\tCopyright (C) 2020 Free Software Foundation, Inc.\n\t\t\t\t\tThis is free software; see the source for copying conditions.  There is NO\n\t\t\t\t\twarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\t\t\t\t\tWritten by Roland McGrath and Ulrich Drepper.\"\n\t\t\t.to_owned()\n\t\t\t.into_bytes();\n\n\t\tassert_eq!(\n\t\t\textract_ldd_version(&actual),\n\t\t\tSome(SimpleSemver::new(2, 31, 0)),\n\t\t);\n\n\t\tlet actual2 = \"ldd (GNU libc) 2.40.9000\n\t\t\t\t\tCopyright (C) 2024 Free Software Foundation, Inc.\n\t\t\t\t\tThis is free software; see the source for copying conditions.  There is NO\n\t\t\t\t\twarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\t\t\t\t\tWritten by Roland McGrath and Ulrich Drepper.\"\n\t\t\t.to_owned()\n\t\t\t.into_bytes();\n\t\tassert_eq!(\n\t\t\textract_ldd_version(&actual2),\n\t\t\tSome(SimpleSemver::new(2, 40, 0)),\n\t\t);\n\t}\n\n}\n"
  },
  {
    "path": "cli/src/util/ring_buffer.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\npub struct RingBuffer<T> {\n\tdata: Vec<T>,\n\ti: usize,\n}\n\nimpl<T> RingBuffer<T> {\n\tpub fn new(capacity: usize) -> Self {\n\t\tSelf {\n\t\t\tdata: Vec::with_capacity(capacity),\n\t\t\ti: 0,\n\t\t}\n\t}\n\n\tpub fn capacity(&self) -> usize {\n\t\tself.data.capacity()\n\t}\n\n\tpub fn len(&self) -> usize {\n\t\tself.data.len()\n\t}\n\n\tpub fn is_full(&self) -> bool {\n\t\tself.data.len() == self.data.capacity()\n\t}\n\n\tpub fn is_empty(&self) -> bool {\n\t\tself.data.len() == 0\n\t}\n\n\tpub fn push(&mut self, value: T) {\n\t\tif self.data.len() == self.data.capacity() {\n\t\t\tself.data[self.i] = value;\n\t\t} else {\n\t\t\tself.data.push(value);\n\t\t}\n\n\t\tself.i = (self.i + 1) % self.data.capacity();\n\t}\n\n\tpub fn iter(&self) -> RingBufferIter<'_, T> {\n\t\tRingBufferIter {\n\t\t\tindex: 0,\n\t\t\tbuffer: self,\n\t\t}\n\t}\n}\n\nimpl<T: Default> IntoIterator for RingBuffer<T> {\n\ttype Item = T;\n\ttype IntoIter = OwnedRingBufferIter<T>;\n\n\tfn into_iter(self) -> OwnedRingBufferIter<T>\n\twhere\n\t\tT: Default,\n\t{\n\t\tOwnedRingBufferIter {\n\t\t\tindex: 0,\n\t\t\tbuffer: self,\n\t\t}\n\t}\n}\n\npub struct OwnedRingBufferIter<T: Default> {\n\tbuffer: RingBuffer<T>,\n\tindex: usize,\n}\n\nimpl<T: Default> Iterator for OwnedRingBufferIter<T> {\n\ttype Item = T;\n\n\tfn next(&mut self) -> Option<Self::Item> {\n\t\tif self.index == self.buffer.len() {\n\t\t\treturn None;\n\t\t}\n\n\t\tlet ii = (self.index + self.buffer.i) % self.buffer.len();\n\t\tlet item = std::mem::take(&mut self.buffer.data[ii]);\n\t\tself.index += 1;\n\t\tSome(item)\n\t}\n}\n\npub struct RingBufferIter<'a, T> {\n\tbuffer: &'a RingBuffer<T>,\n\tindex: usize,\n}\n\nimpl<'a, T> Iterator for RingBufferIter<'a, T> {\n\ttype Item = &'a T;\n\n\tfn next(&mut self) -> Option<Self::Item> {\n\t\tif self.index == self.buffer.len() {\n\t\t\treturn None;\n\t\t}\n\n\t\tlet ii = (self.index + self.buffer.i) % self.buffer.len();\n\t\tlet item = &self.buffer.data[ii];\n\t\tself.index += 1;\n\t\tSome(item)\n\t}\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\n\t#[test]\n\tfn test_inserts() {\n\t\tlet mut rb = RingBuffer::new(3);\n\t\tassert_eq!(rb.capacity(), 3);\n\t\tassert!(!rb.is_full());\n\t\tassert_eq!(rb.len(), 0);\n\t\tassert_eq!(rb.iter().copied().count(), 0);\n\n\t\trb.push(1);\n\t\tassert!(!rb.is_full());\n\t\tassert_eq!(rb.len(), 1);\n\t\tassert_eq!(rb.iter().copied().collect::<Vec<i32>>(), vec![1]);\n\n\t\trb.push(2);\n\t\tassert!(!rb.is_full());\n\t\tassert_eq!(rb.len(), 2);\n\t\tassert_eq!(rb.iter().copied().collect::<Vec<i32>>(), vec![1, 2]);\n\n\t\trb.push(3);\n\t\tassert!(rb.is_full());\n\t\tassert_eq!(rb.len(), 3);\n\t\tassert_eq!(rb.iter().copied().collect::<Vec<i32>>(), vec![1, 2, 3]);\n\n\t\trb.push(4);\n\t\tassert!(rb.is_full());\n\t\tassert_eq!(rb.len(), 3);\n\t\tassert_eq!(rb.iter().copied().collect::<Vec<i32>>(), vec![2, 3, 4]);\n\n\t\tassert_eq!(rb.into_iter().collect::<Vec<i32>>(), vec![2, 3, 4]);\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/sync.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse async_trait::async_trait;\nuse std::{marker::PhantomData, sync::Arc};\nuse tokio::sync::{\n\tbroadcast, mpsc,\n\twatch::{self, error::RecvError},\n};\n\n#[derive(Clone)]\npub struct Barrier<T>(watch::Receiver<Option<T>>)\nwhere\n\tT: Clone;\n\nimpl<T> Barrier<T>\nwhere\n\tT: Clone,\n{\n\t/// Waits for the barrier to be closed, returning a value if one was sent.\n\tpub async fn wait(&mut self) -> Result<T, RecvError> {\n\t\tloop {\n\t\t\tself.0.changed().await?;\n\n\t\t\tif let Some(v) = self.0.borrow().clone() {\n\t\t\t\treturn Ok(v);\n\t\t\t}\n\t\t}\n\t}\n\n\t/// Gets whether the barrier is currently open\n\tpub fn is_open(&self) -> bool {\n\t\tself.0.borrow().is_some()\n\t}\n}\n\n#[async_trait]\nimpl<T: Clone + Send + Sync> Receivable<T> for Barrier<T> {\n\tasync fn recv_msg(&mut self) -> Option<T> {\n\t\tself.wait().await.ok()\n\t}\n}\n\n#[derive(Clone)]\npub struct BarrierOpener<T: Clone>(Arc<watch::Sender<Option<T>>>);\n\nimpl<T: Clone> BarrierOpener<T> {\n\t/// Opens the barrier.\n\tpub fn open(&self, value: T) {\n\t\tself.0.send_if_modified(|v| {\n\t\t\tif v.is_none() {\n\t\t\t\t*v = Some(value);\n\t\t\t\ttrue\n\t\t\t} else {\n\t\t\t\tfalse\n\t\t\t}\n\t\t});\n\t}\n}\n\n/// The Barrier is something that can be opened once from one side,\n/// and is thereafter permanently closed. It can contain a value.\npub fn new_barrier<T>() -> (Barrier<T>, BarrierOpener<T>)\nwhere\n\tT: Clone,\n{\n\tlet (closed_tx, closed_rx) = watch::channel(None);\n\t(Barrier(closed_rx), BarrierOpener(Arc::new(closed_tx)))\n}\n\n/// Type that can receive messages in an async way.\n#[async_trait]\npub trait Receivable<T> {\n\tasync fn recv_msg(&mut self) -> Option<T>;\n}\n\n// todo: ideally we would use an Arc in the broadcast::Receiver to avoid having\n// to clone bytes everywhere, requires updating rpc consumers as well.\n#[async_trait]\nimpl<T: Clone + Send> Receivable<T> for broadcast::Receiver<T> {\n\tasync fn recv_msg(&mut self) -> Option<T> {\n\t\tloop {\n\t\t\tmatch self.recv().await {\n\t\t\t\tOk(v) => return Some(v),\n\t\t\t\tErr(broadcast::error::RecvError::Lagged(_)) => continue,\n\t\t\t\tErr(broadcast::error::RecvError::Closed) => return None,\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[async_trait]\nimpl<T: Send> Receivable<T> for mpsc::UnboundedReceiver<T> {\n\tasync fn recv_msg(&mut self) -> Option<T> {\n\t\tself.recv().await\n\t}\n}\n\n#[async_trait]\nimpl<T: Send> Receivable<T> for () {\n\tasync fn recv_msg(&mut self) -> Option<T> {\n\t\tfutures::future::pending().await\n\t}\n}\n\npub struct ConcatReceivable<T: Send, A: Receivable<T>, B: Receivable<T>> {\n\tleft: Option<A>,\n\tright: B,\n\t_marker: PhantomData<T>,\n}\n\nimpl<T: Send, A: Receivable<T>, B: Receivable<T>> ConcatReceivable<T, A, B> {\n\tpub fn new(left: A, right: B) -> Self {\n\t\tSelf {\n\t\t\tleft: Some(left),\n\t\t\tright,\n\t\t\t_marker: PhantomData,\n\t\t}\n\t}\n}\n\n#[async_trait]\nimpl<T: Send, A: Send + Receivable<T>, B: Send + Receivable<T>> Receivable<T>\n\tfor ConcatReceivable<T, A, B>\n{\n\tasync fn recv_msg(&mut self) -> Option<T> {\n\t\tif let Some(left) = &mut self.left {\n\t\t\tmatch left.recv_msg().await {\n\t\t\t\tSome(v) => return Some(v),\n\t\t\t\tNone => {\n\t\t\t\t\tself.left = None;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn self.right.recv_msg().await;\n\t}\n}\n\npub struct MergedReceivable<T: Send, A: Receivable<T>, B: Receivable<T>> {\n\tleft: Option<A>,\n\tright: Option<B>,\n\t_marker: PhantomData<T>,\n}\n\nimpl<T: Send, A: Receivable<T>, B: Receivable<T>> MergedReceivable<T, A, B> {\n\tpub fn new(left: A, right: B) -> Self {\n\t\tSelf {\n\t\t\tleft: Some(left),\n\t\t\tright: Some(right),\n\t\t\t_marker: PhantomData,\n\t\t}\n\t}\n}\n\n#[async_trait]\nimpl<T: Send, A: Send + Receivable<T>, B: Send + Receivable<T>> Receivable<T>\n\tfor MergedReceivable<T, A, B>\n{\n\tasync fn recv_msg(&mut self) -> Option<T> {\n\t\tloop {\n\t\t\tmatch (&mut self.left, &mut self.right) {\n\t\t\t\t(Some(left), Some(right)) => {\n\t\t\t\t\ttokio::select! {\n\t\t\t\t\t\tleft = left.recv_msg() => match left {\n\t\t\t\t\t\t\tSome(v) => return Some(v),\n\t\t\t\t\t\t\tNone => { self.left = None; continue; },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tright = right.recv_msg() => match right {\n\t\t\t\t\t\t\tSome(v) => return Some(v),\n\t\t\t\t\t\t\tNone => { self.right = None; continue; },\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t(Some(a), None) => break a.recv_msg().await,\n\t\t\t\t(None, Some(b)) => break b.recv_msg().await,\n\t\t\t\t(None, None) => break None,\n\t\t\t}\n\t\t}\n\t}\n}\n\n#[cfg(test)]\nmod tests {\n\tuse super::*;\n\n\t#[tokio::test]\n\tasync fn test_barrier_close_after_spawn() {\n\t\tlet (mut barrier, opener) = new_barrier::<u32>();\n\t\tlet (tx, rx) = tokio::sync::oneshot::channel::<u32>();\n\n\t\ttokio::spawn(async move {\n\t\t\ttx.send(barrier.wait().await.unwrap()).unwrap();\n\t\t});\n\n\t\topener.open(42);\n\n\t\tassert!(rx.await.unwrap() == 42);\n\t}\n\n\t#[tokio::test]\n\tasync fn test_barrier_close_before_spawn() {\n\t\tlet (barrier, opener) = new_barrier::<u32>();\n\t\tlet (tx1, rx1) = tokio::sync::oneshot::channel::<u32>();\n\t\tlet (tx2, rx2) = tokio::sync::oneshot::channel::<u32>();\n\n\t\topener.open(42);\n\t\tlet mut b1 = barrier.clone();\n\t\ttokio::spawn(async move {\n\t\t\ttx1.send(b1.wait().await.unwrap()).unwrap();\n\t\t});\n\t\tlet mut b2 = barrier.clone();\n\t\ttokio::spawn(async move {\n\t\t\ttx2.send(b2.wait().await.unwrap()).unwrap();\n\t\t});\n\n\t\tassert!(rx1.await.unwrap() == 42);\n\t\tassert!(rx2.await.unwrap() == 42);\n\t}\n}\n"
  },
  {
    "path": "cli/src/util/tar.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse crate::util::errors::{wrap, WrappedError};\n\nuse flate2::read::GzDecoder;\nuse std::fs::{self, File};\nuse std::io::{Read, Seek};\nuse std::path::{Path, PathBuf};\nuse tar::Archive;\n\nuse super::errors::wrapdbg;\nuse super::io::ReportCopyProgress;\n\nfn should_skip_first_segment(file: &fs::File) -> Result<(bool, u64), WrappedError> {\n\t// unfortunately, we need to re-read the archive here since you cannot reuse\n\t// `.entries()`. But this will generally only look at one or two files, so this\n\t// should be acceptably speedy... If not, we could hardcode behavior for\n\t// different types of archives.\n\n\tlet tar = GzDecoder::new(file);\n\tlet mut archive = Archive::new(tar);\n\tlet mut entries = archive\n\t\t.entries()\n\t\t.map_err(|e| wrap(e, \"error opening archive\"))?;\n\n\tlet first_name = {\n\t\tlet file = entries\n\t\t\t.next()\n\t\t\t.expect(\"expected not to have an empty archive\")\n\t\t\t.map_err(|e| wrap(e, \"error reading entry file\"))?;\n\n\t\tlet path = file.path().expect(\"expected to have path\");\n\n\t\tpath.iter()\n\t\t\t.next()\n\t\t\t.expect(\"expected to have non-empty name\")\n\t\t\t.to_owned()\n\t};\n\n\tlet mut num_entries = 1;\n\tlet mut had_different_prefixes = false;\n\tfor file in entries.flatten() {\n\t\tif !had_different_prefixes {\n\t\t\tif let Ok(name) = file.path() {\n\t\t\t\tif name.iter().next() != Some(&first_name) {\n\t\t\t\t\thad_different_prefixes = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tnum_entries += 1;\n\t}\n\n\tOk((!had_different_prefixes && num_entries > 1, num_entries)) // prefix removal is invalid if there's only a single file\n}\n\npub fn decompress_tarball<T>(\n\tmut tar_gz: File,\n\tparent_path: &Path,\n\tmut reporter: T,\n) -> Result<(), WrappedError>\nwhere\n\tT: ReportCopyProgress,\n{\n\tlet (skip_first, num_entries) = should_skip_first_segment(&tar_gz)?;\n\tlet report_progress_every = num_entries / 20;\n\tlet mut entries_so_far = 0;\n\tlet mut last_reported_at = 0;\n\n\t// reset since skip logic read the tar already:\n\ttar_gz\n\t\t.rewind()\n\t\t.map_err(|e| wrap(e, \"error resetting seek position\"))?;\n\n\tlet tar = GzDecoder::new(tar_gz);\n\tlet mut archive = Archive::new(tar);\n\tarchive\n\t\t.entries()\n\t\t.map_err(|e| wrap(e, \"error opening archive\"))?\n\t\t.filter_map(|e| e.ok())\n\t\t.try_for_each::<_, Result<_, WrappedError>>(|mut entry| {\n\t\t\t// approximate progress based on where we are in the archive:\n\t\t\tentries_so_far += 1;\n\t\t\tif entries_so_far - last_reported_at > report_progress_every {\n\t\t\t\treporter.report_progress(entries_so_far, num_entries);\n\t\t\t\tentries_so_far += 1;\n\t\t\t\tlast_reported_at = entries_so_far;\n\t\t\t}\n\n\t\t\tlet entry_path = entry\n\t\t\t\t.path()\n\t\t\t\t.map_err(|e| wrap(e, \"error reading entry path\"))?;\n\n\t\t\tlet path = parent_path.join(if skip_first {\n\t\t\t\tentry_path.iter().skip(1).collect::<PathBuf>()\n\t\t\t} else {\n\t\t\t\tentry_path.into_owned()\n\t\t\t});\n\n\t\t\tif let Some(p) = path.parent() {\n\t\t\t\tfs::create_dir_all(p)\n\t\t\t\t\t.map_err(|e| wrap(e, format!(\"could not create dir for {}\", p.display())))?;\n\t\t\t}\n\n\t\t\tentry\n\t\t\t\t.unpack(&path)\n\t\t\t\t.map_err(|e| wrapdbg(e, format!(\"error unpacking {}\", path.display())))?;\n\n\t\t\tOk(())\n\t\t})?;\n\n\treporter.report_progress(num_entries, num_entries);\n\n\tOk(())\n}\n\npub fn has_gzip_header(path: &Path) -> std::io::Result<(File, bool)> {\n\tlet mut file = fs::File::open(path)?;\n\tlet mut header = [0; 2];\n\tlet _ = file.read_exact(&mut header);\n\n\tfile.rewind()?;\n\n\tOk((file, header[0] == 0x1f && header[1] == 0x8b))\n}\n"
  },
  {
    "path": "cli/src/util/zipper.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nuse super::errors::{wrap, WrappedError};\nuse super::io::ReportCopyProgress;\nuse std::fs::{self, File};\nuse std::io;\nuse std::path::Path;\nuse std::path::PathBuf;\nuse zip::read::ZipFile;\nuse zip::{self, ZipArchive};\n\n// Borrowed and modified from https://github.com/zip-rs/zip/blob/master/examples/extract.rs\n\n/// Returns whether all files in the archive start with the same path segment.\n/// If so, it's an indication we should skip that segment when extracting.\nfn should_skip_first_segment(archive: &mut ZipArchive<File>) -> bool {\n\tlet first_name = {\n\t\tlet file = archive\n\t\t\t.by_index_raw(0)\n\t\t\t.expect(\"expected not to have an empty archive\");\n\n\t\tlet path = file\n\t\t\t.enclosed_name()\n\t\t\t.expect(\"expected to have path\")\n\t\t\t.iter()\n\t\t\t.next()\n\t\t\t.expect(\"expected to have non-empty name\");\n\n\t\tpath.to_owned()\n\t};\n\n\tfor i in 1..archive.len() {\n\t\tif let Ok(file) = archive.by_index_raw(i) {\n\t\t\tif let Some(name) = file.enclosed_name() {\n\t\t\t\tif name.iter().next() != Some(&first_name) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tarchive.len() > 1 // prefix removal is invalid if there's only a single file\n}\n\npub fn unzip_file<T>(file: File, parent_path: &Path, mut reporter: T) -> Result<(), WrappedError>\nwhere\n\tT: ReportCopyProgress,\n{\n\tlet mut archive =\n\t\tzip::ZipArchive::new(file).map_err(|e| wrap(e, \"failed to open zip archive\"))?;\n\n\tlet skip_segments_no = usize::from(should_skip_first_segment(&mut archive));\n\tlet report_progress_every = archive.len() / 20;\n\n\tfor i in 0..archive.len() {\n\t\tif i % report_progress_every == 0 {\n\t\t\treporter.report_progress(i as u64, archive.len() as u64);\n\t\t}\n\t\tlet mut file = archive\n\t\t\t.by_index(i)\n\t\t\t.map_err(|e| wrap(e, format!(\"could not open zip entry {i}\")))?;\n\n\t\tlet outpath: PathBuf = match file.enclosed_name() {\n\t\t\tSome(path) => {\n\t\t\t\tlet mut full_path = PathBuf::from(parent_path);\n\t\t\t\tfull_path.push(PathBuf::from_iter(path.iter().skip(skip_segments_no)));\n\t\t\t\tfull_path\n\t\t\t}\n\t\t\tNone => continue,\n\t\t};\n\n\t\tif file.is_dir() || file.name().ends_with('/') {\n\t\t\tfs::create_dir_all(&outpath)\n\t\t\t\t.map_err(|e| wrap(e, format!(\"could not create dir for {}\", outpath.display())))?;\n\t\t\tapply_permissions(&file, &outpath)?;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif let Some(p) = outpath.parent() {\n\t\t\tfs::create_dir_all(p)\n\t\t\t\t.map_err(|e| wrap(e, format!(\"could not create dir for {}\", outpath.display())))?;\n\t\t}\n\n\t\t#[cfg(unix)]\n\t\t{\n\t\t\tuse libc::S_IFLNK;\n\t\t\tuse std::io::Read;\n\t\t\tuse std::os::unix::ffi::OsStringExt;\n\n\t\t\t#[cfg(target_os = \"macos\")]\n\t\t\tconst S_IFLINK_32: u32 = S_IFLNK as u32;\n\n\t\t\t#[cfg(target_os = \"linux\")]\n\t\t\tconst S_IFLINK_32: u32 = S_IFLNK;\n\n\t\t\tif matches!(file.unix_mode(), Some(mode) if mode & S_IFLINK_32 == S_IFLINK_32) {\n\t\t\t\tlet mut link_to = Vec::new();\n\t\t\t\tfile.read_to_end(&mut link_to).map_err(|e| {\n\t\t\t\t\twrap(\n\t\t\t\t\t\te,\n\t\t\t\t\t\tformat!(\"could not read symlink linkpath {}\", outpath.display()),\n\t\t\t\t\t)\n\t\t\t\t})?;\n\n\t\t\t\tlet link_path = PathBuf::from(std::ffi::OsString::from_vec(link_to));\n\t\t\t\tstd::os::unix::fs::symlink(link_path, &outpath).map_err(|e| {\n\t\t\t\t\twrap(e, format!(\"could not create symlink {}\", outpath.display()))\n\t\t\t\t})?;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tlet mut outfile = fs::File::create(&outpath).map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\n\t\t\t\t\t\"unable to open file to write {} (from {:?})\",\n\t\t\t\t\toutpath.display(),\n\t\t\t\t\tfile.enclosed_name().map(|p| p.to_string_lossy()),\n\t\t\t\t),\n\t\t\t)\n\t\t})?;\n\n\t\tio::copy(&mut file, &mut outfile)\n\t\t\t.map_err(|e| wrap(e, format!(\"error copying file {}\", outpath.display())))?;\n\n\t\tapply_permissions(&file, &outpath)?;\n\t}\n\n\treporter.report_progress(archive.len() as u64, archive.len() as u64);\n\n\tOk(())\n}\n\n#[cfg(unix)]\nfn apply_permissions(file: &ZipFile, outpath: &Path) -> Result<(), WrappedError> {\n\tuse std::os::unix::fs::PermissionsExt;\n\n\tif let Some(mode) = file.unix_mode() {\n\t\tfs::set_permissions(outpath, fs::Permissions::from_mode(mode)).map_err(|e| {\n\t\t\twrap(\n\t\t\t\te,\n\t\t\t\tformat!(\"error setting permissions on {}\", outpath.display()),\n\t\t\t)\n\t\t})?;\n\t}\n\n\tOk(())\n}\n\n#[cfg(windows)]\nfn apply_permissions(_file: &ZipFile, _outpath: &Path) -> Result<(), WrappedError> {\n\tOk(())\n}\n"
  },
  {
    "path": "cli/src/util.rs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nmod is_integrated;\n\npub mod command;\npub mod errors;\npub mod http;\npub mod input;\npub mod io;\npub mod machine;\npub mod prereqs;\npub mod ring_buffer;\npub mod sync;\npub use is_integrated::*;\npub mod app_lock;\npub mod file_lock;\npub mod os;\npub mod tar;\npub mod zipper;\n"
  },
  {
    "path": "eslint.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\nimport fs from 'fs';\nimport path from 'path';\nimport tseslint from 'typescript-eslint';\nimport { fileURLToPath } from 'url';\n\nimport stylisticTs from '@stylistic/eslint-plugin-ts';\nimport pluginLocal from 'eslint-plugin-local';\nimport pluginJsdoc from 'eslint-plugin-jsdoc';\n\nimport pluginHeader from 'eslint-plugin-header';\npluginHeader.rules.header.meta.schema = false;\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst ignores = fs.readFileSync(path.join(__dirname, '.eslint-ignore'), 'utf8')\n\t.toString()\n\t.split(/\\r\\n|\\n/)\n\t.filter(line => line && !line.startsWith('#'));\n\nexport default tseslint.config(\n\t// Global ignores\n\t{\n\t\tignores: [\n\t\t\t...ignores,\n\t\t\t'!**/.eslint-plugin-local/**/*'\n\t\t],\n\t},\n\t// All files (JS and TS)\n\t{\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t\t'header': pluginHeader,\n\t\t},\n\t\trules: {\n\t\t\t'constructor-super': 'warn',\n\t\t\t'curly': 'off', // <-- Void\n\t\t\t'eqeqeq': 'warn',\n\t\t\t'prefer-const': [\n\t\t\t\t'off', // <-- Void\n\t\t\t\t{\n\t\t\t\t\t'destructuring': 'all'\n\t\t\t\t}\n\t\t\t],\n\t\t\t'no-buffer-constructor': 'warn',\n\t\t\t'no-caller': 'warn',\n\t\t\t'no-case-declarations': 'warn',\n\t\t\t'no-debugger': 'warn',\n\t\t\t'no-duplicate-case': 'warn',\n\t\t\t'no-duplicate-imports': 'warn',\n\t\t\t'no-eval': 'warn',\n\t\t\t'no-async-promise-executor': 'warn',\n\t\t\t'no-extra-semi': 'warn',\n\t\t\t'no-new-wrappers': 'warn',\n\t\t\t'no-redeclare': 'off',\n\t\t\t'no-sparse-arrays': 'warn',\n\t\t\t'no-throw-literal': 'warn',\n\t\t\t'no-unsafe-finally': 'warn',\n\t\t\t'no-unused-labels': 'warn',\n\t\t\t'no-misleading-character-class': 'warn',\n\t\t\t'no-restricted-globals': [\n\t\t\t\t'warn',\n\t\t\t\t'name',\n\t\t\t\t'length',\n\t\t\t\t'event',\n\t\t\t\t'closed',\n\t\t\t\t'external',\n\t\t\t\t'status',\n\t\t\t\t'origin',\n\t\t\t\t'orientation',\n\t\t\t\t'context'\n\t\t\t], // non-complete list of globals that are easy to access unintentionally\n\t\t\t'no-var': 'warn',\n\t\t\t'semi': 'off',\n\t\t\t'local/code-translation-remind': 'warn',\n\t\t\t'local/code-no-native-private': 'warn',\n\t\t\t'local/code-parameter-properties-must-have-explicit-accessibility': 'warn',\n\t\t\t'local/code-no-nls-in-standalone-editor': 'warn',\n\t\t\t'local/code-no-potentially-unsafe-disposables': 'warn',\n\t\t\t'local/code-no-dangerous-type-assertions': 'off', // Void warn -> off\n\t\t\t'local/code-no-standalone-editor': 'warn',\n\t\t\t'local/code-no-unexternalized-strings': 'warn',\n\t\t\t'local/code-must-use-super-dispose': 'warn',\n\t\t\t'local/code-declare-service-brand': 'warn',\n\t\t\t'local/code-layering': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'common': [],\n\t\t\t\t\t'node': [\n\t\t\t\t\t\t'common'\n\t\t\t\t\t],\n\t\t\t\t\t'browser': [\n\t\t\t\t\t\t'common'\n\t\t\t\t\t],\n\t\t\t\t\t'electron-sandbox': [\n\t\t\t\t\t\t'common',\n\t\t\t\t\t\t'browser'\n\t\t\t\t\t],\n\t\t\t\t\t'electron-utility': [\n\t\t\t\t\t\t'common',\n\t\t\t\t\t\t'node'\n\t\t\t\t\t],\n\t\t\t\t\t'electron-main': [\n\t\t\t\t\t\t'common',\n\t\t\t\t\t\t'node',\n\t\t\t\t\t\t'electron-utility'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t// Void - this should only apply to workbench/void/\n\t\t\t// 'header/header': [\n\t\t\t// \t2,\n\t\t\t// \t'block',\n\t\t\t// \t[\n\t\t\t// \t\t'/*--------------------------------------------------------------------------------------',\n\t\t\t// \t\t'*  Copyright 2025 Glass Devtools, Inc. All rights reserved.',\n\t\t\t// \t\t'*  Licensed under the Apache License, Version 2.0. See LICENSE.txt for more information.',\n\t\t\t// \t\t'*--------------------------------------------------------------------------------------*/',\n\t\t\t// \t]\n\t\t\t// ]\n\t\t},\n\t},\n\t// TS\n\t{\n\t\tfiles: [\n\t\t\t'**/*.ts',\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'@stylistic/ts': stylisticTs,\n\t\t\t'@typescript-eslint': tseslint.plugin,\n\t\t\t'local': pluginLocal,\n\t\t\t'jsdoc': pluginJsdoc,\n\t\t},\n\t\trules: {\n\t\t\t'@stylistic/ts/semi': 'off', // <-- Void\n\t\t\t'@stylistic/ts/member-delimiter-style': 'off', // <-- Void\n\t\t\t'local/code-no-unused-expressions': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'allowTernary': true\n\t\t\t\t}\n\t\t\t],\n\t\t\t'jsdoc/no-types': 'warn',\n\t\t\t'local/code-no-static-self-ref': 'off' // <-- Void\n\t\t}\n\t},\n\t// vscode TS\n\t{\n\t\tfiles: [\n\t\t\t'src/**/*.ts',\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'@typescript-eslint': tseslint.plugin,\n\t\t},\n\t\trules: {\n\t\t\t'@typescript-eslint/naming-convention': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'selector': 'class',\n\t\t\t\t\t'format': [\n\t\t\t\t\t\t'PascalCase'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t// Tests\n\t{\n\t\tfiles: [\n\t\t\t'**/*.test.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'local/code-must-use-super-dispose': 'off',\n\t\t\t'local/code-no-test-only': 'error',\n\t\t\t'local/code-no-test-async-suite': 'warn',\n\t\t\t'local/code-no-unexternalized-strings': 'off',\n\t\t\t'local/code-must-use-result': [\n\t\t\t\t'warn',\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\t'message': 'Expression must be awaited',\n\t\t\t\t\t\t'functions': [\n\t\t\t\t\t\t\t'assertSnapshot',\n\t\t\t\t\t\t\t'assertHeap'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t]\n\t\t}\n\t},\n\t// vscode tests specific rules\n\t{\n\t\tfiles: [\n\t\t\t'src/vs/**/*.test.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'local/code-ensure-no-disposables-leak-in-test': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t// Files should (only) be removed from the list they adopt the leak detector\n\t\t\t\t\t'exclude': [\n\t\t\t\t\t\t'src/vs/platform/configuration/test/common/configuration.test.ts',\n\t\t\t\t\t\t'src/vs/platform/opener/test/common/opener.test.ts',\n\t\t\t\t\t\t'src/vs/platform/registry/test/common/platform.test.ts',\n\t\t\t\t\t\t'src/vs/platform/workspace/test/common/workspace.test.ts',\n\t\t\t\t\t\t'src/vs/platform/workspaces/test/electron-main/workspaces.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/contrib/bulkEdit/test/browser/bulkCellEdits.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/contrib/chat/test/common/chatWordCounter.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/contrib/extensions/test/common/extensionQuery.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/contrib/notebook/test/browser/notebookExecutionService.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/contrib/notebook/test/browser/notebookExecutionStateService.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/contrib/tasks/test/common/problemMatcher.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/services/commands/test/common/commandService.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts',\n\t\t\t\t\t\t'src/vs/workbench/test/browser/quickAccess.test.ts'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t// vscode API\n\t{\n\t\tfiles: [\n\t\t\t'**/vscode.d.ts',\n\t\t\t'**/vscode.proposed.*.d.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'no-restricted-syntax': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'selector': `TSArrayType > TSUnionType`,\n\t\t\t\t\t'message': 'Use Array<...> for arrays of union types.'\n\t\t\t\t},\n\t\t\t],\n\t\t\t'local/vscode-dts-create-func': 'warn',\n\t\t\t'local/vscode-dts-literal-or-types': 'warn',\n\t\t\t'local/vscode-dts-string-type-literals': 'warn',\n\t\t\t'local/vscode-dts-interface-naming': 'warn',\n\t\t\t'local/vscode-dts-cancellation': 'warn',\n\t\t\t'local/vscode-dts-use-export': 'warn',\n\t\t\t'local/vscode-dts-use-thenable': 'warn',\n\t\t\t'local/vscode-dts-vscode-in-comments': 'warn',\n\t\t\t'local/vscode-dts-provider-naming': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'allowed': [\n\t\t\t\t\t\t'FileSystemProvider',\n\t\t\t\t\t\t'TreeDataProvider',\n\t\t\t\t\t\t'TestProvider',\n\t\t\t\t\t\t'CustomEditorProvider',\n\t\t\t\t\t\t'CustomReadonlyEditorProvider',\n\t\t\t\t\t\t'TerminalLinkProvider',\n\t\t\t\t\t\t'AuthenticationProvider',\n\t\t\t\t\t\t'NotebookContentProvider'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t'local/vscode-dts-event-naming': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'allowed': [\n\t\t\t\t\t\t'onCancellationRequested',\n\t\t\t\t\t\t'event'\n\t\t\t\t\t],\n\t\t\t\t\t'verbs': [\n\t\t\t\t\t\t'accept',\n\t\t\t\t\t\t'change',\n\t\t\t\t\t\t'close',\n\t\t\t\t\t\t'collapse',\n\t\t\t\t\t\t'create',\n\t\t\t\t\t\t'delete',\n\t\t\t\t\t\t'discover',\n\t\t\t\t\t\t'dispose',\n\t\t\t\t\t\t'drop',\n\t\t\t\t\t\t'edit',\n\t\t\t\t\t\t'end',\n\t\t\t\t\t\t'execute',\n\t\t\t\t\t\t'expand',\n\t\t\t\t\t\t'grant',\n\t\t\t\t\t\t'hide',\n\t\t\t\t\t\t'invalidate',\n\t\t\t\t\t\t'open',\n\t\t\t\t\t\t'override',\n\t\t\t\t\t\t'perform',\n\t\t\t\t\t\t'receive',\n\t\t\t\t\t\t'register',\n\t\t\t\t\t\t'remove',\n\t\t\t\t\t\t'rename',\n\t\t\t\t\t\t'save',\n\t\t\t\t\t\t'send',\n\t\t\t\t\t\t'start',\n\t\t\t\t\t\t'terminate',\n\t\t\t\t\t\t'trigger',\n\t\t\t\t\t\t'unregister',\n\t\t\t\t\t\t'write'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t// vscode.d.ts\n\t{\n\t\tfiles: [\n\t\t\t'**/vscode.d.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\trules: {\n\t\t\t'jsdoc/tag-lines': 'off',\n\t\t\t'jsdoc/valid-types': 'off',\n\t\t\t'jsdoc/no-multi-asterisks': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'allowWhitespace': true\n\t\t\t\t}\n\t\t\t],\n\t\t\t'jsdoc/require-jsdoc': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'enableFixer': false,\n\t\t\t\t\t'contexts': [\n\t\t\t\t\t\t'TSInterfaceDeclaration',\n\t\t\t\t\t\t'TSPropertySignature',\n\t\t\t\t\t\t'TSMethodSignature',\n\t\t\t\t\t\t'TSDeclareFunction',\n\t\t\t\t\t\t'ClassDeclaration',\n\t\t\t\t\t\t'MethodDefinition',\n\t\t\t\t\t\t'PropertyDeclaration',\n\t\t\t\t\t\t'TSEnumDeclaration',\n\t\t\t\t\t\t'TSEnumMember',\n\t\t\t\t\t\t'ExportNamedDeclaration'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t'jsdoc/check-param-names': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'enableFixer': false,\n\t\t\t\t\t'checkDestructured': false\n\t\t\t\t}\n\t\t\t],\n\t\t\t'jsdoc/require-returns': 'warn'\n\t\t}\n\t},\n\t// common/browser layer\n\t{\n\t\tfiles: [\n\t\t\t'src/**/{common,browser}/**/*.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'local/code-amd-node-module': 'warn'\n\t\t}\n\t},\n\t// node/electron layer\n\t{\n\t\tfiles: [\n\t\t\t'src/*.ts',\n\t\t\t'src/**/{node,electron-main,electron-utility}/**/*.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'no-restricted-globals': [\n\t\t\t\t'warn',\n\t\t\t\t'name',\n\t\t\t\t'length',\n\t\t\t\t'event',\n\t\t\t\t'closed',\n\t\t\t\t'external',\n\t\t\t\t'status',\n\t\t\t\t'origin',\n\t\t\t\t'orientation',\n\t\t\t\t'context',\n\t\t\t\t// Below are globals that are unsupported in ESM\n\t\t\t\t'__dirname',\n\t\t\t\t'__filename',\n\t\t\t\t'require'\n\t\t\t]\n\t\t}\n\t},\n\t// browser/electron-sandbox layer\n\t{\n\t\tfiles: [\n\t\t\t'src/**/{browser,electron-sandbox}/**/*.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'local/code-no-global-document-listener': 'warn',\n\t\t\t'no-restricted-syntax': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'selector': `BinaryExpression[operator='instanceof'][right.name='MouseEvent']`,\n\t\t\t\t\t'message': 'Use DOM.isMouseEvent() to support multi-window scenarios.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `BinaryExpression[operator='instanceof'][right.name=/^HTML\\\\w+/]`,\n\t\t\t\t\t'message': 'Use DOM.isHTMLElement() and related methods to support multi-window scenarios.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `BinaryExpression[operator='instanceof'][right.name=/^SVG\\\\w+/]`,\n\t\t\t\t\t'message': 'Use DOM.isSVGElement() and related methods to support multi-window scenarios.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `BinaryExpression[operator='instanceof'][right.name='KeyboardEvent']`,\n\t\t\t\t\t'message': 'Use DOM.isKeyboardEvent() to support multi-window scenarios.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `BinaryExpression[operator='instanceof'][right.name='PointerEvent']`,\n\t\t\t\t\t'message': 'Use DOM.isPointerEvent() to support multi-window scenarios.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `BinaryExpression[operator='instanceof'][right.name='DragEvent']`,\n\t\t\t\t\t'message': 'Use DOM.isDragEvent() to support multi-window scenarios.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='activeElement']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.activeElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='contains']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.contains to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='styleSheets']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.styleSheets to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='fullscreenElement']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.fullscreenElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='body']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.body to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='addEventListener']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='removeEventListener']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='hasFocus']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.hasFocus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='head']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.head to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='exitFullscreen']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.exitFullscreen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='getElementById']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.getElementById to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='getElementsByClassName']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.getElementsByClassName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='getElementsByName']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.getElementsByName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='getElementsByTagName']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.getElementsByTagName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='getElementsByTagNameNS']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.getElementsByTagNameNS to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='getSelection']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='open']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='close']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='documentElement']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.documentElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='visibilityState']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.visibilityState to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='querySelector']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.querySelector to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='querySelectorAll']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.querySelectorAll to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='elementFromPoint']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.elementFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='elementsFromPoint']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.elementsFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='onkeydown']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.onkeydown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='onkeyup']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.onkeyup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='onmousedown']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.onmousedown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='onmouseup']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.onmouseup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': `MemberExpression[object.name='document'][property.name='execCommand']`,\n\t\t\t\t\t'message': 'Use <targetWindow>.document.execCommand to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t}\n\t\t\t],\n\t\t\t'no-restricted-globals': [\n\t\t\t\t'warn',\n\t\t\t\t'name',\n\t\t\t\t'length',\n\t\t\t\t'event',\n\t\t\t\t'closed',\n\t\t\t\t'external',\n\t\t\t\t'status',\n\t\t\t\t'origin',\n\t\t\t\t'orientation',\n\t\t\t\t'context',\n\t\t\t\t{\n\t\t\t\t\t'name': 'setInterval',\n\t\t\t\t\t'message': 'Use <targetWindow>.setInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'clearInterval',\n\t\t\t\t\t'message': 'Use <targetWindow>.clearInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'requestAnimationFrame',\n\t\t\t\t\t'message': 'Use <targetWindow>.requestAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'cancelAnimationFrame',\n\t\t\t\t\t'message': 'Use <targetWindow>.cancelAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'requestIdleCallback',\n\t\t\t\t\t'message': 'Use <targetWindow>.requestIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'cancelIdleCallback',\n\t\t\t\t\t'message': 'Use <targetWindow>.cancelIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'window',\n\t\t\t\t\t'message': 'Use <targetWindow> to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'addEventListener',\n\t\t\t\t\t'message': 'Use <targetWindow>.addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'removeEventListener',\n\t\t\t\t\t'message': 'Use <targetWindow>.removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'getComputedStyle',\n\t\t\t\t\t'message': 'Use <targetWindow>.getComputedStyle to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'focus',\n\t\t\t\t\t'message': 'Use <targetWindow>.focus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'blur',\n\t\t\t\t\t'message': 'Use <targetWindow>.blur to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'close',\n\t\t\t\t\t'message': 'Use <targetWindow>.close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'dispatchEvent',\n\t\t\t\t\t'message': 'Use <targetWindow>.dispatchEvent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'getSelection',\n\t\t\t\t\t'message': 'Use <targetWindow>.getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'matchMedia',\n\t\t\t\t\t'message': 'Use <targetWindow>.matchMedia to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'open',\n\t\t\t\t\t'message': 'Use <targetWindow>.open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'parent',\n\t\t\t\t\t'message': 'Use <targetWindow>.parent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'postMessage',\n\t\t\t\t\t'message': 'Use <targetWindow>.postMessage to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'devicePixelRatio',\n\t\t\t\t\t'message': 'Use <targetWindow>.devicePixelRatio to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'frames',\n\t\t\t\t\t'message': 'Use <targetWindow>.frames to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'frameElement',\n\t\t\t\t\t'message': 'Use <targetWindow>.frameElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'innerHeight',\n\t\t\t\t\t'message': 'Use <targetWindow>.innerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'innerWidth',\n\t\t\t\t\t'message': 'Use <targetWindow>.innerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'outerHeight',\n\t\t\t\t\t'message': 'Use <targetWindow>.outerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'outerWidth',\n\t\t\t\t\t'message': 'Use <targetWindow>.outerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'opener',\n\t\t\t\t\t'message': 'Use <targetWindow>.opener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'origin',\n\t\t\t\t\t'message': 'Use <targetWindow>.origin to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'screen',\n\t\t\t\t\t'message': 'Use <targetWindow>.screen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'screenLeft',\n\t\t\t\t\t'message': 'Use <targetWindow>.screenLeft to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'screenTop',\n\t\t\t\t\t'message': 'Use <targetWindow>.screenTop to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'screenX',\n\t\t\t\t\t'message': 'Use <targetWindow>.screenX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'screenY',\n\t\t\t\t\t'message': 'Use <targetWindow>.screenY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'scrollX',\n\t\t\t\t\t'message': 'Use <targetWindow>.scrollX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'scrollY',\n\t\t\t\t\t'message': 'Use <targetWindow>.scrollY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'top',\n\t\t\t\t\t'message': 'Use <targetWindow>.top to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'name': 'visualViewport',\n\t\t\t\t\t'message': 'Use <targetWindow>.visualViewport to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t// electron-utility layer\n\t{\n\t\tfiles: [\n\t\t\t'src/**/electron-utility/**/*.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\trules: {\n\t\t\t'no-restricted-imports': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'paths': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'name': 'electron',\n\t\t\t\t\t\t\t'allowImportNames': [\n\t\t\t\t\t\t\t\t'net',\n\t\t\t\t\t\t\t\t'system-preferences',\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t'message': 'Only net and system-preferences are allowed to be imported from electron'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tfiles: [\n\t\t\t'src/**/*.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'local/code-import-patterns': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t// imports that are allowed in all files of layers:\n\t\t\t\t\t// - browser\n\t\t\t\t\t// - electron-sandbox\n\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t'allow': []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// imports that are allowed in all files of layers:\n\t\t\t\t\t// - node\n\t\t\t\t\t// - electron-utility\n\t\t\t\t\t// - electron-main\n\t\t\t\t\t'when': 'hasNode',\n\t\t\t\t\t'allow': [\n\t\t\t\t\t\t'@parcel/watcher',\n\t\t\t\t\t\t'@vscode/sqlite3',\n\t\t\t\t\t\t'@vscode/vscode-languagedetection',\n\t\t\t\t\t\t'@vscode/ripgrep',\n\t\t\t\t\t\t'@vscode/iconv-lite-umd',\n\t\t\t\t\t\t'@vscode/policy-watcher',\n\t\t\t\t\t\t'@vscode/proxy-agent',\n\t\t\t\t\t\t'@vscode/spdlog',\n\t\t\t\t\t\t'@vscode/windows-process-tree',\n\t\t\t\t\t\t'assert',\n\t\t\t\t\t\t'child_process',\n\t\t\t\t\t\t'console',\n\t\t\t\t\t\t'cookie',\n\t\t\t\t\t\t'crypto',\n\t\t\t\t\t\t'dns',\n\t\t\t\t\t\t'events',\n\t\t\t\t\t\t'fs',\n\t\t\t\t\t\t'fs/promises',\n\t\t\t\t\t\t'http',\n\t\t\t\t\t\t'https',\n\t\t\t\t\t\t'minimist',\n\t\t\t\t\t\t'node:module',\n\t\t\t\t\t\t'native-keymap',\n\t\t\t\t\t\t'native-watchdog',\n\t\t\t\t\t\t'net',\n\t\t\t\t\t\t'node-pty',\n\t\t\t\t\t\t'os',\n\t\t\t\t\t\t'path',\n\t\t\t\t\t\t'perf_hooks',\n\t\t\t\t\t\t'readline',\n\t\t\t\t\t\t'stream',\n\t\t\t\t\t\t'string_decoder',\n\t\t\t\t\t\t'tas-client-umd',\n\t\t\t\t\t\t'tls',\n\t\t\t\t\t\t'undici-types',\n\t\t\t\t\t\t'url',\n\t\t\t\t\t\t'util',\n\t\t\t\t\t\t'v8-inspect-profiler',\n\t\t\t\t\t\t'vscode-regexpp',\n\t\t\t\t\t\t'vscode-textmate',\n\t\t\t\t\t\t'worker_threads',\n\t\t\t\t\t\t'@xterm/addon-clipboard',\n\t\t\t\t\t\t'@xterm/addon-image',\n\t\t\t\t\t\t'@xterm/addon-ligatures',\n\t\t\t\t\t\t'@xterm/addon-search',\n\t\t\t\t\t\t'@xterm/addon-serialize',\n\t\t\t\t\t\t'@xterm/addon-unicode11',\n\t\t\t\t\t\t'@xterm/addon-webgl',\n\t\t\t\t\t\t'@xterm/headless',\n\t\t\t\t\t\t'@xterm/xterm',\n\t\t\t\t\t\t'yauzl',\n\t\t\t\t\t\t'yazl',\n\t\t\t\t\t\t'zlib',\n\t\t\t\t\t\t// Void added this\n\t\t\t\t\t\t'@modelcontextprotocol/sdk/**'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// imports that are allowed in all files of layers:\n\t\t\t\t\t// - electron-utility\n\t\t\t\t\t// - electron-main\n\t\t\t\t\t'when': 'hasElectron',\n\t\t\t\t\t'allow': [\n\t\t\t\t\t\t'electron'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// imports that are allowed in all /test/ files\n\t\t\t\t\t'when': 'test',\n\t\t\t\t\t'allow': [\n\t\t\t\t\t\t'assert',\n\t\t\t\t\t\t'sinon',\n\t\t\t\t\t\t'sinon-test'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\t\t\t\t// !!! Do not relax these rules !!!\n\t\t\t\t// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\t\t\t\t//\n\t\t\t\t// A path ending in /~ has a special meaning. It indicates a template position\n\t\t\t\t// which will be substituted with one or more layers.\n\t\t\t\t//\n\t\t\t\t// When /~ is used in the target, the rule will be expanded to 14 distinct rules.\n\t\t\t\t// e.g. 'src/vs/base/~' will be expanded to:\n\t\t\t\t//  - src/vs/base/common\n\t\t\t\t//  - src/vs/base/worker\n\t\t\t\t//  - src/vs/base/browser\n\t\t\t\t//  - src/vs/base/electron-sandbox\n\t\t\t\t//  - src/vs/base/node\n\t\t\t\t//  - src/vs/base/electron-main\n\t\t\t\t//  - src/vs/base/test/common\n\t\t\t\t//  - src/vs/base/test/worker\n\t\t\t\t//  - src/vs/base/test/browser\n\t\t\t\t//  - src/vs/base/test/electron-sandbox\n\t\t\t\t//  - src/vs/base/test/node\n\t\t\t\t//  - src/vs/base/test/electron-main\n\t\t\t\t//\n\t\t\t\t// When /~ is used in the restrictions, it will be replaced with the correct\n\t\t\t\t// layers that can be used e.g. 'src/vs/base/electron-sandbox' will be able\n\t\t\t\t// to import '{common,browser,electron-sanbox}', etc.\n\t\t\t\t//\n\t\t\t\t// It is possible to use /~ in the restrictions property even without using it in\n\t\t\t\t// the target property by adding a layer property.\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/base/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/base/parts/*/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/platform/*/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'tas-client-umd', // node module allowed even in /common/\n\t\t\t\t\t\t'@microsoft/1ds-core-js', // node module allowed even in /common/\n\t\t\t\t\t\t'@microsoft/1ds-post-js', // node module allowed even in /common/\n\t\t\t\t\t\t'@xterm/headless' // node module allowed even in /common/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/editor/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'@vscode/tree-sitter-wasm' // node module allowed even in /common/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/editor/contrib/*/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/editor/standalone/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/editor/standalone/~',\n\t\t\t\t\t\t'@vscode/tree-sitter-wasm' // type import\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/editor/editor.all.ts',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/editor/editor.worker.start.ts',\n\t\t\t\t\t'layer': 'worker',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/editor/{editor.api.ts,editor.main.ts}',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/editor/standalone/~',\n\t\t\t\t\t\t'vs/editor/*'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'assert',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'test',\n\t\t\t\t\t\t\t'pattern': 'vs/workbench/contrib/*/~'\n\t\t\t\t\t\t} // TODO@layers\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/api/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'@c4312/eventsource-umd',\n\t\t\t\t\t\t'vscode',\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/api/~',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/terminalContrib/*/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/services/*/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'test',\n\t\t\t\t\t\t\t'pattern': 'vs/workbench/contrib/*/~'\n\t\t\t\t\t\t}, // TODO@layers\n\t\t\t\t\t\t'tas-client-umd', // node module allowed even in /common/\n\t\t\t\t\t\t'vscode-textmate', // node module allowed even in /common/\n\t\t\t\t\t\t'@vscode/vscode-languagedetection', // node module allowed even in /common/\n\t\t\t\t\t\t'@vscode/tree-sitter-wasm', // type import\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': '@xterm/xterm'\n\t\t\t\t\t\t} // node module allowed even in /browser/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/contrib/*/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/terminal/terminalContribChatExports*',\n\t\t\t\t\t\t'vs/workbench/contrib/terminal/terminalContribExports*',\n\t\t\t\t\t\t'vscode-notebook-renderer', // Type only import\n\t\t\t\t\t\t'@vscode/tree-sitter-wasm', // type import\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': '@xterm/xterm'\n\t\t\t\t\t\t}, // node module allowed even in /browser/\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': '@xterm/addon-*'\n\t\t\t\t\t\t}, // node module allowed even in /browser/\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': 'vscode-textmate'\n\t\t\t\t\t\t} // node module allowed even in /browser/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/contrib/terminalContrib/*/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t// Only allow terminalContrib to import from itself, this works because\n\t\t\t\t\t\t// terminalContrib is one extra folder deep\n\t\t\t\t\t\t'vs/workbench/contrib/terminalContrib/*/~',\n\t\t\t\t\t\t'vscode-notebook-renderer', // Type only import\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': '@xterm/xterm'\n\t\t\t\t\t\t}, // node module allowed even in /browser/\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': '@xterm/addon-*'\n\t\t\t\t\t\t}, // node module allowed even in /browser/\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': 'vscode-textmate'\n\t\t\t\t\t\t}, // node module allowed even in /browser/\n\t\t\t\t\t\t'@xterm/headless' // node module allowed even in /common/ and /browser/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/code/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/code/~',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': 'vs/workbench/workbench.web.main.js'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': 'vs/workbench/workbench.web.main.internal.js'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': 'vs/workbench/~'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'when': 'hasBrowser',\n\t\t\t\t\t\t\t'pattern': 'vs/workbench/services/*/~'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/server/~',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/api/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t'vs/server/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/contrib/terminal/terminal.all.ts',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/workbench/contrib/**'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/contrib/terminal/terminalContribChatExports.ts',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/workbench/contrib/terminalContrib/*/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/contrib/terminal/terminalContribExports.ts',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/terminalContrib/*/~'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/workbench.common.main.ts',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/editor/editor.all.js',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/api/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/terminal/terminal.all.js'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/workbench.web.main.ts',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/editor/editor.all.js',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/api/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/workbench.common.main.js'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/workbench.web.main.internal.ts',\n\t\t\t\t\t'layer': 'browser',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/editor/editor.all.js',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/api/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/workbench.common.main.js'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/workbench/workbench.desktop.main.ts',\n\t\t\t\t\t'layer': 'electron-sandbox',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/*/~',\n\t\t\t\t\t\t'vs/base/parts/*/~',\n\t\t\t\t\t\t'vs/platform/*/~',\n\t\t\t\t\t\t'vs/editor/~',\n\t\t\t\t\t\t'vs/editor/contrib/*/~',\n\t\t\t\t\t\t'vs/editor/editor.all.js',\n\t\t\t\t\t\t'vs/workbench/~',\n\t\t\t\t\t\t'vs/workbench/api/~',\n\t\t\t\t\t\t'vs/workbench/services/*/~',\n\t\t\t\t\t\t'vs/workbench/contrib/*/~',\n\t\t\t\t\t\t'vs/workbench/workbench.common.main.js'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/amdX.ts',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/base/common/*'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/{loader.d.ts,monaco.d.ts,nls.ts,nls.messages.ts}',\n\t\t\t\t\t'restrictions': []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vscode-dts/**',\n\t\t\t\t\t'restrictions': []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/bootstrap-window.ts',\n\t\t\t\t\t'restrictions': []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/vs/nls.ts',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/*'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'src/{bootstrap-cli.ts,bootstrap-esm.ts,bootstrap-fork.ts,bootstrap-import.ts,bootstrap-meta.ts,bootstrap-node.ts,bootstrap-server.ts,cli.ts,main.ts,server-cli.ts,server-main.ts}',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'vs/**/common/*',\n\t\t\t\t\t\t'vs/**/node/*',\n\t\t\t\t\t\t'vs/nls.js',\n\t\t\t\t\t\t'src/*.js',\n\t\t\t\t\t\t'*' // node.js\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tfiles: [\n\t\t\t'test/**/*.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'local/code-import-patterns': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'target': 'test/smoke/**',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'test/automation',\n\t\t\t\t\t\t'test/smoke/**',\n\t\t\t\t\t\t'@vscode/*',\n\t\t\t\t\t\t'@parcel/*',\n\t\t\t\t\t\t'@playwright/*',\n\t\t\t\t\t\t'*' // node modules\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'test/automation/**',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'test/automation/**',\n\t\t\t\t\t\t'@vscode/*',\n\t\t\t\t\t\t'@parcel/*',\n\t\t\t\t\t\t'playwright-core/**',\n\t\t\t\t\t\t'@playwright/*',\n\t\t\t\t\t\t'*' // node modules\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'test/integration/**',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'test/integration/**',\n\t\t\t\t\t\t'@vscode/*',\n\t\t\t\t\t\t'@parcel/*',\n\t\t\t\t\t\t'@playwright/*',\n\t\t\t\t\t\t'*' // node modules\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'target': 'test/monaco/**',\n\t\t\t\t\t'restrictions': [\n\t\t\t\t\t\t'test/monaco/**',\n\t\t\t\t\t\t'@vscode/*',\n\t\t\t\t\t\t'@parcel/*',\n\t\t\t\t\t\t'@playwright/*',\n\t\t\t\t\t\t'*' // node modules\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tfiles: [\n\t\t\t'src/vs/workbench/contrib/notebook/browser/view/renderers/*.ts'\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'local': pluginLocal,\n\t\t},\n\t\trules: {\n\t\t\t'local/code-no-runtime-import': [\n\t\t\t\t'error',\n\t\t\t\t{\n\t\t\t\t\t'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts': [\n\t\t\t\t\t\t'**/*'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t'local/code-limited-top-functions': [\n\t\t\t\t'error',\n\t\t\t\t{\n\t\t\t\t\t'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts': [\n\t\t\t\t\t\t'webviewPreloads',\n\t\t\t\t\t\t'preloadsScriptStr'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t// Terminal\n\t{\n\t\tfiles: [\n\t\t\t'src/vs/workbench/contrib/terminal/**/*.ts',\n\t\t\t'src/vs/workbench/contrib/terminalContrib/**/*.ts',\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\trules: {\n\t\t\t'@typescript-eslint/naming-convention': [\n\t\t\t\t'warn',\n\t\t\t\t// variableLike\n\t\t\t\t{ 'selector': 'variable', 'format': ['camelCase', 'UPPER_CASE', 'PascalCase'] },\n\t\t\t\t{ 'selector': 'variable', 'filter': '^I.+Service$', 'format': ['PascalCase'], 'prefix': ['I'] },\n\t\t\t\t// memberLike\n\t\t\t\t{ 'selector': 'memberLike', 'modifiers': ['private'], 'format': ['camelCase'], 'leadingUnderscore': 'require' },\n\t\t\t\t{ 'selector': 'memberLike', 'modifiers': ['protected'], 'format': ['camelCase'], 'leadingUnderscore': 'require' },\n\t\t\t\t{ 'selector': 'enumMember', 'format': ['PascalCase'] },\n\t\t\t\t// memberLike - Allow enum-like objects to use UPPER_CASE\n\t\t\t\t{ 'selector': 'method', 'modifiers': ['public'], 'format': ['camelCase', 'UPPER_CASE'] },\n\t\t\t\t// typeLike\n\t\t\t\t{ 'selector': 'typeLike', 'format': ['PascalCase'] },\n\t\t\t\t{ 'selector': 'interface', 'format': ['PascalCase'] }\n\t\t\t],\n\t\t\t'comma-dangle': ['warn', 'only-multiline']\n\t\t}\n\t},\n\t// markdown-language-features\n\t{\n\t\tfiles: [\n\t\t\t'extensions/markdown-language-features/**/*.ts',\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t},\n\t\tplugins: {\n\t\t\t'@typescript-eslint': tseslint.plugin,\n\t\t},\n\t\trules: {\n\t\t\t'@typescript-eslint/naming-convention': [\n\t\t\t\t'warn',\n\t\t\t\t{\n\t\t\t\t\t'selector': 'default',\n\t\t\t\t\t'modifiers': ['private'],\n\t\t\t\t\t'format': null,\n\t\t\t\t\t'leadingUnderscore': 'require'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'selector': 'default',\n\t\t\t\t\t'modifiers': ['public'],\n\t\t\t\t\t'format': null,\n\t\t\t\t\t'leadingUnderscore': 'forbid'\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t// typescript-language-features\n\t{\n\t\tfiles: [\n\t\t\t'extensions/typescript-language-features/**/*.ts',\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tparser: tseslint.parser,\n\t\t\tparserOptions: {\n\t\t\t\tproject: [\n\t\t\t\t\t'extensions/typescript-language-features/tsconfig.json',\n\t\t\t\t\t'extensions/typescript-language-features/web/tsconfig.json'\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tplugins: {\n\t\t\t'@typescript-eslint': tseslint.plugin,\n\t\t},\n\t\trules: {\n\t\t\t'@typescript-eslint/prefer-optional-chain': 'warn',\n\t\t\t'@typescript-eslint/prefer-readonly': 'warn',\n\t\t}\n\t}\n);\n"
  },
  {
    "path": "extensions/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/bat/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/bat/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"mmims/language-batchfile\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/mmims/language-batchfile\",\n\t\t\t\t\t\"commitHash\": \"6154ae25a24e01ac9329e7bcf958e093cd8733a9\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.7.6\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/bat/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"@REM\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"%\", \"%\"],\n\t\t[\"\\\"\", \"\\\"\"]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*(::|REM|@REM)\\\\s*#region\",\n\t\t\t\"end\": \"^\\\\s*(::|REM|@REM)\\\\s*#endregion\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/bat/package.json",
    "content": "{\n  \"name\": \"bat\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.52.0\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin mmims/language-batchfile grammars/batchfile.cson ./syntaxes/batchfile.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"bat\",\n        \"extensions\": [\n          \".bat\",\n          \".cmd\"\n        ],\n        \"aliases\": [\n          \"Batch\",\n          \"bat\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"bat\",\n        \"scopeName\": \"source.batchfile\",\n        \"path\": \"./syntaxes/batchfile.tmLanguage.json\"\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"bat\",\n        \"path\": \"./snippets/batchfile.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/bat/package.nls.json",
    "content": "{\n\t\"displayName\": \"Windows Bat Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in Windows batch files.\"\n}\n"
  },
  {
    "path": "extensions/bat/snippets/batchfile.code-snippets",
    "content": "{\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"::#region\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"::#endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t}\n}\n"
  },
  {
    "path": "extensions/bat/syntaxes/batchfile.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/mmims/language-batchfile/blob/master/grammars/batchfile.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/mmims/language-batchfile/commit/6154ae25a24e01ac9329e7bcf958e093cd8733a9\",\n\t\"name\": \"Batch File\",\n\t\"scopeName\": \"source.batchfile\",\n\t\"injections\": {\n\t\t\"L:meta.block.repeat.batchfile\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#repeatParameter\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#commands\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constants\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#controls\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#escaped_characters\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#labels\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#numbers\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operators\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#parens\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#variables\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"commands\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|[\\\\s@])(?i:adprep|append|arp|assoc|at|atmadm|attrib|auditpol|autochk|autoconv|autofmt|bcdboot|bcdedit|bdehdcfg|bitsadmin|bootcfg|brea|cacls|cd|certreq|certutil|change|chcp|chdir|chglogon|chgport|chgusr|chkdsk|chkntfs|choice|cipher|clip|cls|clscluadmin|cluster|cmd|cmdkey|cmstp|color|comp|compact|convert|copy|cprofile|cscript|csvde|date|dcdiag|dcgpofix|dcpromo|defra|del|dfscmd|dfsdiag|dfsrmig|diantz|dir|dirquota|diskcomp|diskcopy|diskpart|diskperf|diskraid|diskshadow|dispdiag|doin|dnscmd|doskey|driverquery|dsacls|dsadd|dsamain|dsdbutil|dsget|dsmgmt|dsmod|dsmove|dsquery|dsrm|edit|endlocal|eraseesentutl|eventcreate|eventquery|eventtriggers|evntcmd|expand|extract|fc|filescrn|find|findstr|finger|flattemp|fonde|forfiles|format|freedisk|fsutil|ftp|ftype|fveupdate|getmac|gettype|gpfixup|gpresult|gpupdate|graftabl|hashgen|hep|helpctr|hostname|icacls|iisreset|inuse|ipconfig|ipxroute|irftp|ismserv|jetpack|klist|ksetup|ktmutil|ktpass|label|ldifd|ldp|lodctr|logman|logoff|lpq|lpr|macfile|makecab|manage-bde|mapadmin|md|mkdir|mklink|mmc|mode|more|mount|mountvol|move|mqbup|mqsvc|mqtgsvc|msdt|msg|msiexec|msinfo32|mstsc|nbtstat|net computer|net group|net localgroup|net print|net session|net share|net start|net stop|net use|net user|net view|net|netcfg|netdiag|netdom|netsh|netstat|nfsadmin|nfsshare|nfsstat|nlb|nlbmgr|nltest|nslookup|ntackup|ntcmdprompt|ntdsutil|ntfrsutl|openfiles|pagefileconfig|path|pathping|pause|pbadmin|pentnt|perfmon|ping|pnpunatten|pnputil|popd|powercfg|powershell|powershell_ise|print|prncnfg|prndrvr|prnjobs|prnmngr|prnport|prnqctl|prompt|pubprn|pushd|pushprinterconnections|pwlauncher|qappsrv|qprocess|query|quser|qwinsta|rasdial|rcp|rd|rdpsign|regentc|recover|redircmp|redirusr|reg|regini|regsvr32|relog|ren|rename|rendom|repadmin|repair-bde|replace|reset session|rxec|risetup|rmdir|robocopy|route|rpcinfo|rpcping|rsh|runas|rundll32|rwinsta|sc|schtasks|scp|scwcmd|secedit|serverceipoptin|servrmanagercmd|serverweroptin|setspn|setx|sfc|sftp|shadow|shift|showmount|shutdown|sort|ssh|ssh-add|ssh-agent|ssh-keygen|ssh-keyscan|start|storrept|subst|sxstrace|ysocmgr|systeminfo|takeown|tapicfg|taskkill|tasklist|tcmsetup|telnet|tftp|time|timeout|title|tlntadmn|tpmvscmgr|tpmvscmgr|tacerpt|tracert|tree|tscon|tsdiscon|tsecimp|tskill|tsprof|type|typeperf|tzutil|uddiconfig|umount|unlodctr|ver|verifier|verif|vol|vssadmin|w32tm|waitfor|wbadmin|wdsutil|wecutil|wevtutil|where|whoami|winnt|winnt32|winpop|winrm|winrs|winsat|wlbs|wmic|wscript|wsl|xcopy)(?=$|\\\\s)\",\n\t\t\t\t\t\"name\": \"keyword.command.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?<=^|[\\\\s@])(echo)(?:(?=$|\\\\.|:)|\\\\s+(?:(on|off)(?=\\\\s*$))?)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.command.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.special-method.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$\\\\n|[&|><)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_characters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?<=^|[\\\\s@])(setlocal)(?:\\\\s*$|\\\\s+(EnableExtensions|DisableExtensions|EnableDelayedExpansion|DisableDelayedExpansion)(?=\\\\s*$))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.command.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.special-method.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#command_set\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_set\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|[\\\\s@])(?i:SET)(?=$|\\\\s)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.command.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$\\\\n|[&|><)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#command_set_inside\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_set_inside\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_characters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#command_set_strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([^ ][^=]*)(=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$\\\\n|[&|><)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_characters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s+/[aA]\\\\s+\",\n\t\t\t\t\t\"end\": \"(?=$\\\\n|[&|><)])\",\n\t\t\t\t\t\"name\": \"meta.expression.set.batchfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.batchfile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#command_set_inside_arithmetic\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#command_set_group\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#command_set_inside_arithmetic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#command_set_group\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s+/[pP]\\\\s+\",\n\t\t\t\t\t\"end\": \"(?=$\\\\n|[&|><)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#command_set_strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"([^ ][^=]*)(=)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.batchfile\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=$\\\\n|[&|><)])\",\n\t\t\t\t\t\t\t\"name\": \"meta.prompt.set.batchfile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_set_group\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.group.begin.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.group.end.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#command_set_inside_arithmetic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_set_inside_arithmetic\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#command_set_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_set_operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([^ ]*)(\\\\+\\\\=|\\\\-\\\\=|\\\\*\\\\=|\\\\/\\\\=|%%\\\\=|&\\\\=|\\\\|\\\\=|\\\\^\\\\=|<<\\\\=|>>\\\\=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.augmented.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+|\\\\-|/|\\\\*|%%|\\\\||&|\\\\^|<<|>>|~\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([^ =]*)(=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_set_strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\")\\\\s*([^ ][^=]*)(=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.batchfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:^|(&))\\\\s*(?=((?::[+=,;: ])))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.conditional.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"((?::[+=,;: ]))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.colon.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|[\\\\s@])(?i)(REM)(\\\\.)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.command.rem.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$\\\\n|[&|><)])\",\n\t\t\t\t\t\"name\": \"comment.line.rem.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|[\\\\s@])(?i:rem)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.command.rem.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"name\": \"comment.line.rem.batchfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[><|]\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unexpected-character.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?i:NUL)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.batchfile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"controls\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?<=^|\\\\s)(?:call|exit(?=$|\\\\s)|goto(?=$|\\\\s|:))\",\n\t\t\t\t\t\"name\": \"keyword.control.statement.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|\\\\s)(?i)(if)\\\\s+(?:(not)\\\\s+)?(exist|defined|errorlevel|cmdextversion)(?=\\\\s)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.special-method.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|\\\\s)(?i)(?:if|else)(?=$|\\\\s)\",\n\t\t\t\t\t\"name\": \"keyword.control.conditional.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|[\\\\s(&^])(?i)for(?=\\\\s)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.repeat.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.repeat.batchfile\",\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=[\\\\s^])(?i)in(?=\\\\s)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.repeat.in.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=[\\\\s)^])(?i)do(?=\\\\s)|\\\\n\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.repeat.do.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"escaped_characters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%%|\\\\^\\\\^!|\\\\^(?=.)|\\\\^\\\\n\",\n\t\t\t\t\t\"name\": \"constant.character.escape.batchfile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"labels\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?:^\\\\s*|(?<=call|goto)\\\\s*)(:)([^+=,;:\\\\s]\\\\S*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.special-method.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numbers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|\\\\s|=)(0[xX][0-9A-Fa-f]*|[+-]?\\\\d+)(?=$|\\\\s|<|>)\",\n\t\t\t\t\t\"name\": \"constant.numeric.batchfile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"@(?=\\\\S)\",\n\t\t\t\t\t\"name\": \"keyword.operator.at.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\s)(?i:EQU|NEQ|LSS|LEQ|GTR|GEQ)(?=\\\\s)|==\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\s)(?i)(NOT)(?=\\\\s)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\^)&&?|\\\\|\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\^)\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.pipe.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<&?|>[&>]?\",\n\t\t\t\t\t\"name\": \"keyword.operator.redirection.batchfile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parens\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.group.begin.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.group.end.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.batchfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",|;\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"repeatParameter\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(%%)(?:(?i:~[fdpnxsatz]*(?:\\\\$PATH:)?)?[a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"variable.parameter.repeat.batchfile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\")|(\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.batchfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%%\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(%)(?:(?i:~[fdpnxsatz]*(?:\\\\$PATH:)?)?\\\\d|\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"variable.parameter.batchfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable_delayed_expansion\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"%(?=[^%]+%)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.begin.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(%)|\\\\n\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.end.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"variable.other.readwrite.batchfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":~\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=%|\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.variable.substring.batchfile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable_substring\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=%|\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.variable.substitution.batchfile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable_replace\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=%|\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#variable_delayed_expansion\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"[^%]+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.batchfile\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable_delayed_expansion\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"!(?=[^!]+!)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.begin.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(!)|\\\\n\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.end.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"variable.other.readwrite.batchfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":~\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=!|\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.variable.substring.batchfile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable_substring\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=!|\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.variable.substitution.batchfile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_characters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable_replace\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=!|\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"[^!]+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.batchfile\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable_replace\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^=%!\\\\n]+\",\n\t\t\t\t\t\"name\": \"string.unquoted.batchfile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable_substring\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([+-]?\\\\d+)(?:(,)([+-]?\\\\d+))?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.batchfile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"typescript\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/TypeScript\",\n\t\t\t\t\t\"commitHash\": \"54426a14f4c232da8e563d20ca8e71263e1c96b5\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"isOnlyProductionDependency\": true,\n\t\t\t\"license\": \"Apache-2.0\",\n\t\t\t\"version\": \"2.6.2\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/clojure/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/clojure/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"atom/language-clojure\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/atom/language-clojure\",\n\t\t\t\t\t\"commitHash\": \"45bdb881501d0b8f8b707ca1d3fcc8b4b99fca03\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.22.8\",\n\t\t\t\"description\": \"The file syntaxes/clojure.tmLanguage.json was derived from the Atom package https://github.com/atom/language-clojure which was originally converted from the TextMate bundle https://github.com/mmcgrana/textmate-clojure.\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/clojure/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \";;\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"]\n\t],\n\t\"folding\": {\n\t\t\"offSide\": true\n\t}\n}\n"
  },
  {
    "path": "extensions/clojure/package.json",
    "content": "{\n  \"name\": \"clojure\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin atom/language-clojure grammars/clojure.cson ./syntaxes/clojure.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"clojure\",\n        \"aliases\": [\n          \"Clojure\",\n          \"clojure\"\n        ],\n        \"extensions\": [\n          \".clj\",\n          \".cljs\",\n          \".cljc\",\n          \".cljx\",\n          \".clojure\",\n          \".edn\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"clojure\",\n        \"scopeName\": \"source.clojure\",\n        \"path\": \"./syntaxes/clojure.tmLanguage.json\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[clojure]\": {\n        \"diffEditor.ignoreTrimWhitespace\": false\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/clojure/package.nls.json",
    "content": "{\n\t\"displayName\": \"Clojure Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Clojure files.\"\n}\n"
  },
  {
    "path": "extensions/clojure/syntaxes/clojure.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/atom/language-clojure/blob/master/grammars/clojure.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/atom/language-clojure/commit/45bdb881501d0b8f8b707ca1d3fcc8b4b99fca03\",\n\t\"name\": \"Clojure\",\n\t\"scopeName\": \"source.clojure\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#comment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#shebang-comment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#quoted-sexp\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#sexp\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#keyfn\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#string\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#vector\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#set\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#map\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#regexp\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#var\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constants\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#dynamic-variables\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#metadata\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace-symbol\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#symbol\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"comment\": {\n\t\t\t\"begin\": \"(?<!\\\\\\\\);\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"comment.line.semicolon.clojure\"\n\t\t},\n\t\t\"constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(nil)(?=(\\\\s|\\\\)|\\\\]|\\\\}))\",\n\t\t\t\t\t\"name\": \"constant.language.nil.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(true|false)\",\n\t\t\t\t\t\"name\": \"constant.language.boolean.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(##(?:Inf|-Inf|NaN))\",\n\t\t\t\t\t\"name\": \"constant.numeric.symbol.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([-+]?\\\\d+/\\\\d+)\",\n\t\t\t\t\t\"name\": \"constant.numeric.ratio.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([-+]?(?:(?:3[0-6])|(?:[12]\\\\d)|[2-9])[rR][0-9A-Za-z]+N?)\",\n\t\t\t\t\t\"name\": \"constant.numeric.arbitrary-radix.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([-+]?0[xX][0-9a-fA-F]+N?)\",\n\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([-+]?0[0-7]+N?)\",\n\t\t\t\t\t\"name\": \"constant.numeric.octal.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([-+]?[0-9]+(?:(\\\\.|(?=[eEM]))[0-9]*([eE][-+]?[0-9]+)?)M?)\",\n\t\t\t\t\t\"name\": \"constant.numeric.double.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([-+]?\\\\d+N?)\",\n\t\t\t\t\t\"name\": \"constant.numeric.long.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keyword\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keyword\": {\n\t\t\t\"match\": \"(?<=(\\\\s|\\\\(|\\\\[|\\\\{)):[\\\\w\\\\#\\\\.\\\\-\\\\_\\\\:\\\\+\\\\=\\\\>\\\\<\\\\/\\\\!\\\\?\\\\*]+(?=(\\\\s|\\\\)|\\\\]|\\\\}|\\\\,))\",\n\t\t\t\"name\": \"constant.keyword.clojure\"\n\t\t},\n\t\t\"keyfn\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=(\\\\s|\\\\(|\\\\[|\\\\{))(if(-[-\\\\p{Ll}\\\\?]*)?|when(-[-\\\\p{Ll}]*)?|for(-[-\\\\p{Ll}]*)?|cond|do|let(-[-\\\\p{Ll}\\\\?]*)?|binding|loop|recur|fn|throw[\\\\p{Ll}\\\\-]*|try|catch|finally|([\\\\p{Ll}]*case))(?=(\\\\s|\\\\)|\\\\]|\\\\}))\",\n\t\t\t\t\t\"name\": \"storage.control.clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=(\\\\s|\\\\(|\\\\[|\\\\{))(declare-?|(in-)?ns|import|use|require|load|compile|(def[\\\\p{Ll}\\\\-]*))(?=(\\\\s|\\\\)|\\\\]|\\\\}))\",\n\t\t\t\t\t\"name\": \"keyword.control.clojure\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"dynamic-variables\": {\n\t\t\t\"match\": \"\\\\*[\\\\w\\\\.\\\\-\\\\_\\\\:\\\\+\\\\=\\\\>\\\\<\\\\!\\\\?\\\\d]+\\\\*\",\n\t\t\t\"name\": \"meta.symbol.dynamic.clojure\"\n\t\t},\n\t\t\"map\": {\n\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.map.begin.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\}(?=[\\\\}\\\\]\\\\)\\\\s]*(?:;|$)))|(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.map.end.trailing.clojure\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.map.end.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.map.clojure\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"metadata\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\^\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.metadata.map.begin.clojure\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\}(?=[\\\\}\\\\]\\\\)\\\\s]*(?:;|$)))|(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.metadata.map.end.trailing.clojure\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.metadata.map.end.clojure\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.metadata.map.clojure\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\^)\",\n\t\t\t\t\t\"end\": \"(\\\\s)\",\n\t\t\t\t\t\"name\": \"meta.metadata.simple.clojure\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keyword\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"quoted-sexp\": {\n\t\t\t\"begin\": \"(['``]\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.begin.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))$|(\\\\)(?=[\\\\}\\\\]\\\\)\\\\s]*(?:;|$)))|(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.end.trailing.clojure\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.end.trailing.clojure\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.end.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.quoted-expression.clojure\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp\": {\n\t\t\t\"begin\": \"#\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.regexp.begin.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.regexp.end.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.clojure\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp_escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp_escaped_char\": {\n\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\"name\": \"constant.character.escape.clojure\"\n\t\t},\n\t\t\"set\": {\n\t\t\t\"begin\": \"(\\\\#\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.set.begin.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\}(?=[\\\\}\\\\]\\\\)\\\\s]*(?:;|$)))|(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.set.end.trailing.clojure\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.set.end.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.set.clojure\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sexp\": {\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.begin.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))$|(\\\\)(?=[\\\\}\\\\]\\\\)\\\\s]*(?:;|$)))|(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.end.trailing.clojure\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.end.trailing.clojure\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.expression.end.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.expression.clojure\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\()(ns|declare|def[\\\\w\\\\d._:+=><!?*-]*|[\\\\w._:+=><!?*-][\\\\w\\\\d._:+=><!?*-]*/def[\\\\w\\\\d._:+=><!?*-]*)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.clojure\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"name\": \"meta.definition.global.clojure\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#metadata\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dynamic-variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([\\\\p{L}\\\\.\\\\-\\\\_\\\\+\\\\=\\\\>\\\\<\\\\!\\\\?\\\\*][\\\\w\\\\.\\\\-\\\\_\\\\:\\\\+\\\\=\\\\>\\\\<\\\\!\\\\?\\\\*\\\\d]*)\",\n\t\t\t\t\t\t\t\"name\": \"entity.global.clojure\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keyfn\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vector\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#map\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#set\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#sexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\()(.+?)(?=\\\\s|\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.clojure\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"shebang-comment\": {\n\t\t\t\"begin\": \"^(#!)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.shebang.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"comment.line.shebang.clojure\"\n\t\t},\n\t\t\"string\": {\n\t\t\t\"begin\": \"(?<!\\\\\\\\)(\\\")\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\")\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.clojure\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.clojure\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace-symbol\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([\\\\p{L}\\\\.\\\\-\\\\_\\\\+\\\\=\\\\>\\\\<\\\\!\\\\?\\\\*][\\\\w\\\\.\\\\-\\\\_\\\\:\\\\+\\\\=\\\\>\\\\<\\\\!\\\\?\\\\*\\\\d]*)/\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.symbol.namespace.clojure\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"symbol\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([\\\\p{L}\\\\.\\\\-\\\\_\\\\+\\\\=\\\\>\\\\<\\\\!\\\\?\\\\*][\\\\w\\\\.\\\\-\\\\_\\\\:\\\\+\\\\=\\\\>\\\\<\\\\!\\\\?\\\\*\\\\d]*)\",\n\t\t\t\t\t\"name\": \"meta.symbol.clojure\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var\": {\n\t\t\t\"match\": \"(?<=(\\\\s|\\\\(|\\\\[|\\\\{)\\\\#)'[\\\\w\\\\.\\\\-\\\\_\\\\:\\\\+\\\\=\\\\>\\\\<\\\\/\\\\!\\\\?\\\\*]+(?=(\\\\s|\\\\)|\\\\]|\\\\}))\",\n\t\t\t\"name\": \"meta.var.clojure\"\n\t\t},\n\t\t\"vector\": {\n\t\t\t\"begin\": \"(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.vector.begin.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\](?=[\\\\}\\\\]\\\\)\\\\s]*(?:;|$)))|(\\\\])\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.vector.end.trailing.clojure\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.vector.end.clojure\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.vector.clojure\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/coffeescript/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/coffeescript/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"atom/language-coffee-script\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/atom/language-coffee-script\",\n\t\t\t\t\t\"commitHash\": \"0f6db9143663e18b1ad00667820f46747dba495e\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"description\": \"The file syntaxes/coffeescript.tmLanguage.json was derived from the Atom package https://github.com/atom/language-coffee-script which was originally converted from the TextMate bundle https://github.com/jashkenas/coffee-script-tmbundle.\",\n\t\t\t\"version\": \"0.49.3\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/coffeescript/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"###\", \"###\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\" \", \" \"]\n\t],\n\t\"folding\": {\n\t\t\"offSide\": true,\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*#endregion\\\\b\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/coffeescript/package.json",
    "content": "{\n  \"name\": \"coffeescript\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin atom/language-coffee-script grammars/coffeescript.cson ./syntaxes/coffeescript.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"coffeescript\",\n        \"extensions\": [\n          \".coffee\",\n          \".cson\",\n          \".iced\"\n        ],\n        \"aliases\": [\n          \"CoffeeScript\",\n          \"coffeescript\",\n          \"coffee\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"coffeescript\",\n        \"scopeName\": \"source.coffee\",\n        \"path\": \"./syntaxes/coffeescript.tmLanguage.json\"\n      }\n    ],\n    \"breakpoints\": [\n      {\n        \"language\": \"coffeescript\"\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"coffeescript\",\n        \"path\": \"./snippets/coffeescript.code-snippets\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[coffeescript]\": {\n        \"diffEditor.ignoreTrimWhitespace\": false,\n        \"editor.defaultColorDecorators\": \"never\"\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/coffeescript/package.nls.json",
    "content": "{\n\t\"displayName\": \"CoffeeScript Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in CoffeeScript files.\"\n}\n"
  },
  {
    "path": "extensions/coffeescript/snippets/coffeescript.code-snippets",
    "content": "{\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"#region\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"#endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t}\n}\n"
  },
  {
    "path": "extensions/coffeescript/syntaxes/coffeescript.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/atom/language-coffee-script/blob/master/grammars/coffeescript.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/atom/language-coffee-script/commit/0f6db9143663e18b1ad00667820f46747dba495e\",\n\t\"name\": \"CoffeeScript\",\n\t\"scopeName\": \"source.coffee\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#jsx\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(new)\\\\s+(?:(?:(class)\\\\s+(\\\\w+(?:\\\\.\\\\w*)*)?)|(\\\\w+(?:\\\\.\\\\w*)*))\",\n\t\t\t\"name\": \"meta.class.instance.constructor.coffee\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.new.coffee\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.class.coffee\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.type.instance.coffee\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.instance.coffee\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"'''\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'''\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.heredoc.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.escape.backslash.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\).\",\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.heredoc.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.escape.backslash.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\).\",\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(`)(.*)(`)\",\n\t\t\t\"name\": \"string.quoted.script.coffee\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"source.js.embedded.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<!#)###(?!#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"###\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|\\\\s)@\\\\w*(?=\\\\s)\",\n\t\t\t\t\t\"name\": \"storage.type.annotation.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"#\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"comment.line.number-sign.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"///\",\n\t\t\t\"end\": \"(///)[gimuy]*\",\n\t\t\t\"name\": \"string.regexp.multiline.coffee\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heregexp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<![\\\\w$])(/)(?=(?![/*+?])(.+)(/)[gimuy]*(?!\\\\s*[\\\\w$/(]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(/)[gimuy]*(?!\\\\s*[\\\\w$/(])\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js.regexp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?<![\\\\.\\\\$])(break|by|catch|continue|else|finally|for|in|of|if|return|switch|then|throw|try|unless|when|while|until|loop|do|export|import|default|from|as|yield|async|await|(?<=for)\\\\s+own)(?!\\\\s*:)\\\\b\",\n\t\t\t\"name\": \"keyword.control.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?<![\\\\.\\\\$])(delete|instanceof|new|typeof)(?!\\\\s*:)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.$1.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?<![\\\\.\\\\$])(case|function|var|void|with|const|let|enum|native|__hasProp|__extends|__slice|__bind|__indexOf|implements|interface|package|private|protected|public|static)(?!\\\\s*:)\\\\b\",\n\t\t\t\"name\": \"keyword.reserved.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n(?<=\\\\s|^)((@)?[a-zA-Z_$][\\\\w$]*)\\n\\\\s*([:=])\\\\s*\\n(?=(\\\\([^\\\\(\\\\)]*\\\\)\\\\s*)?[=-]>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.coffee\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.other.readwrite.instance.coffee\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"[=-]>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"storage.type.function.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_params\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n(?<=\\\\s|^)(?:((')([^']*?)('))|((\\\")([^\\\"]*?)(\\\")))\\n\\\\s*([:=])\\\\s*\\n(?=(\\\\([^\\\\(\\\\)]*\\\\)\\\\s*)?[=-]>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.quoted.single.coffee\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.function.coffee\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.coffee\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.coffee\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"[=-]>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"storage.type.function.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_params\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(\\\\([^\\\\(\\\\)]*\\\\)\\\\s*)?[=-]>)\",\n\t\t\t\"end\": \"[=-]>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"storage.type.function.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.inline.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_params\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<=\\\\s|^)({)(?=[^'\\\"#]+?}[\\\\s\\\\]}]*=)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.destructuring.begin.bracket.curly.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.destructuring.end.bracket.curly.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.variable.assignment.destructured.object.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z$_]\\\\w*\",\n\t\t\t\t\t\"name\": \"variable.assignment.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<=\\\\s|^)(\\\\[)(?=[^'\\\"#]+?\\\\][\\\\s\\\\]}]*=)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.destructuring.begin.bracket.square.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.destructuring.end.bracket.square.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.variable.assignment.destructured.array.coffee\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z$_]\\\\w*\",\n\t\t\t\t\t\"name\": \"variable.assignment.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?<!\\\\.|::)(true|on|yes)(?!\\\\s*[:=][^=])\\\\b\",\n\t\t\t\"name\": \"constant.language.boolean.true.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?<!\\\\.|::)(false|off|no)(?!\\\\s*[:=][^=])\\\\b\",\n\t\t\t\"name\": \"constant.language.boolean.false.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?<!\\\\.|::)null(?!\\\\s*[:=][^=])\\\\b\",\n\t\t\t\"name\": \"constant.language.null.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?<!\\\\.|::)extends(?!\\\\s*[:=])\\\\b\",\n\t\t\t\"name\": \"variable.language.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?<!\\\\$)(super|this|arguments)(?!\\\\s*[:=][^=]|\\\\$)\\\\b\",\n\t\t\t\"name\": \"variable.language.$1.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.coffee\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.inheritance.coffee\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<=\\\\s|^|\\\\[|\\\\()(class)\\\\s+(extends)\\\\s+(@?[a-zA-Z\\\\$\\\\._][\\\\w\\\\.]*)\",\n\t\t\t\"name\": \"meta.class.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.coffee\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.coffee\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.inheritance.coffee\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<=\\\\s|^|\\\\[|\\\\()(class\\\\b)\\\\s+(@?[a-zA-Z\\\\$_][\\\\w\\\\.]*)?(?:\\\\s+(extends)\\\\s+(@?[a-zA-Z\\\\$\\\\._][\\\\w\\\\.]*))?\",\n\t\t\t\"name\": \"meta.class.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(debugger|\\\\\\\\)\\\\b\",\n\t\t\t\"name\": \"keyword.other.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(Array|ArrayBuffer|Blob|Boolean|Date|document|Function|Int(8|16|32|64)Array|Math|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap|window|Uint(8|16|32|64)Array|XMLHttpRequest)\\\\b\",\n\t\t\t\"name\": \"support.class.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(console)\\\\b\",\n\t\t\t\"name\": \"entity.name.type.object.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"((?<=console\\\\.)(debug|warn|info|log|error|time|timeEnd|assert))\\\\b\",\n\t\t\t\"name\": \"support.function.console.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"((?<=\\\\.)(apply|call|concat|every|filter|forEach|from|hasOwnProperty|indexOf|isPrototypeOf|join|lastIndexOf|map|of|pop|propertyIsEnumerable|push|reduce(Right)?|reverse|shift|slice|some|sort|splice|to(Locale)?String|unshift|valueOf))\\\\b\",\n\t\t\t\"name\": \"support.function.method.array.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"((?<=Array\\\\.)(isArray))\\\\b\",\n\t\t\t\"name\": \"support.function.static.array.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"((?<=Object\\\\.)(create|definePropert(ies|y)|freeze|getOwnProperty(Descriptors?|Names)|getProperty(Descriptor|Names)|getPrototypeOf|is(Extensible|Frozen|Sealed)?|isnt|keys|preventExtensions|seal))\\\\b\",\n\t\t\t\"name\": \"support.function.static.object.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"((?<=Math\\\\.)(abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|tan|tanh|trunc))\\\\b\",\n\t\t\t\"name\": \"support.function.static.math.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"((?<=Number\\\\.)(is(Finite|Integer|NaN)|toInteger))\\\\b\",\n\t\t\t\"name\": \"support.function.static.number.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(module|exports|__filename|__dirname|global|process)(?!\\\\s*:)\\\\b\",\n\t\t\t\"name\": \"support.variable.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(Infinity|NaN|undefined)\\\\b\",\n\t\t\t\"name\": \"constant.language.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operators\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#method_calls\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_calls\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#numbers\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#objects\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#properties\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"::\",\n\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\$)\\\\b[0-9]+[\\\\w$]*\",\n\t\t\t\"name\": \"invalid.illegal.identifier.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.statement.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.coffee\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.curly.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.curly.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.bracket.square.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.bracket.square.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\.{3}\",\n\t\t\t\t\t\"name\": \"keyword.operator.slice.exclusive.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\.{2}\",\n\t\t\t\t\t\"name\": \"keyword.operator.slice.inclusive.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#instance_variable\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#single_quoted_string\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#double_quoted_string\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"arguments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.bracket.round.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.bracket.round.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.arguments.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(@|@?[\\\\w$]+|[=-]>|\\\\-\\\\d|\\\\[|{|\\\"|'))\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*(?<![\\\\w$])(of|in|then|is|isnt|and|or|for|else|when|if|unless|by|instanceof)(?![\\\\w$]))|(?=\\\\s*(}|\\\\]|\\\\)|#|$))\",\n\t\t\t\t\t\"name\": \"meta.arguments.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double_quoted_string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.escape.backslash.coffee\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\)(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_calls\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(@)?([\\\\w$]+)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.instance.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_names\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"name\": \"meta.function-call.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(@)?([\\\\w$]+)\\n\\\\s*\\n(?=\\\\s+(?!(?<![\\\\w$])(of|in|then|is|isnt|and|or|for|else|when|if|unless|by|instanceof)(?![\\\\w$]))(?=(@?[\\\\w$]+|[=-]>|\\\\-\\\\d|\\\\[|{|\\\"|')))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.instance.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_names\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*(?<![\\\\w$])(of|in|then|is|isnt|and|or|for|else|when|if|unless|by|instanceof)(?![\\\\w$]))|(?=\\\\s*(}|\\\\]|\\\\)|#|$))\",\n\t\t\t\t\t\"name\": \"meta.function-call.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_names\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n\\\\b(isNaN|isFinite|eval|uneval|parseInt|parseFloat|decodeURI|\\ndecodeURIComponent|encodeURI|encodeURIComponent|escape|unescape|\\nrequire|set(Interval|Timeout)|clear(Interval|Timeout))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\"name\": \"entity.name.function.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\d[\\\\w$]*\",\n\t\t\t\t\t\"name\": \"invalid.illegal.identifier.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_params\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.parameters.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([a-zA-Z_$][\\\\w$]*)(\\\\.\\\\.\\\\.)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.coffee\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.splat.coffee\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(@(?:[a-zA-Z_$][\\\\w$]*)?)(\\\\.\\\\.\\\\.)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.readwrite.instance.coffee\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.splat.coffee\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"embedded_comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)(#).*$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"instance_variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@)([a-zA-Z_\\\\$]\\\\w*)?\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.instance.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolated_coffee\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\#\\\\{\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"source.coffee.embedded.source\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method_calls\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(\\\\.)|(::))\\\\s*([\\\\w$]+)\\\\s*(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.method.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#method_names\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"name\": \"meta.method-call.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(\\\\.)|(::))\\\\s*([\\\\w$]+)\\\\s*(?=\\\\s+(?!(?<![\\\\w$])(of|in|then|is|isnt|and|or|for|else|when|if|unless|by|instanceof)(?![\\\\w$]))(?=(@|@?[\\\\w$]+|[=-]>|\\\\-\\\\d|\\\\[|{|\\\"|')))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.method.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#method_names\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*(?<![\\\\w$])(of|in|then|is|isnt|and|or|for|else|when|if|unless|by|instanceof)(?![\\\\w$]))|(?=\\\\s*(}|\\\\]|\\\\)|#|$))\",\n\t\t\t\t\t\"name\": \"meta.method-call.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method_names\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n\\\\bon(Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|\\nReadystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|\\nBefore(cut|deactivate|unload|update|paste|print|editfocus|activate)|\\nBlur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|\\nChange|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|\\nDatasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|\\nDragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|\\nErrorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.event-handler.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n\\\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|\\nscrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|\\nsup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|\\nMonth|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|\\nTime|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|\\nsavePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|\\ncontextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|\\ncreateEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|\\ntest|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|\\nuntaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|\\nprint|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|\\nfileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|\\nforward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|\\nabort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|\\nreleaseCapture|releaseEvents|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|\\nTime|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|\\nAttention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|\\nmoveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n\\\\b(acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|\\nappendChild|appendData|before|blur|canPlayType|captureStream|\\ncaretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|\\ncloneContents|cloneNode|cloneRange|close|closest|collapse|\\ncompareBoundaryPoints|compareDocumentPosition|comparePoint|contains|\\nconvertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|\\ncreateAttributeNS|createCaption|createCDATASection|createComment|\\ncreateContextualFragment|createDocument|createDocumentFragment|\\ncreateDocumentType|createElement|createElementNS|createEntityReference|\\ncreateEvent|createExpression|createHTMLDocument|createNodeIterator|\\ncreateNSResolver|createProcessingInstruction|createRange|createShadowRoot|\\ncreateTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|\\ndeleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|\\ndeleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|\\nenableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|\\nexitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|\\ngetAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|\\ngetAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|\\ngetClientRects|getContext|getDestinationInsertionPoints|getElementById|\\ngetElementsByClassName|getElementsByName|getElementsByTagName|\\ngetElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|\\ngetVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|\\nhasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|\\ninsertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|\\ninsertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|\\nisPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|\\nlookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|\\nmoveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|\\nparentNode|pause|play|postMessage|prepend|preventDefault|previousNode|\\npreviousSibling|probablySupportsContext|queryCommandEnabled|\\nqueryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|\\nquerySelector|querySelectorAll|registerContentHandler|registerElement|\\nregisterProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|\\nremoveAttributeNode|removeAttributeNS|removeChild|removeEventListener|\\nremoveItem|replace|replaceChild|replaceData|replaceWith|reportValidity|\\nrequestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|\\nscrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|\\nsetAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|\\nsetCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|\\nsetRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|\\nslice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|\\nsubmit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|\\ntoDataURL|toggle|toString|values|write|writeln)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.dom.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\"name\": \"entity.name.function.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\d[\\\\w$]*\",\n\t\t\t\t\t\"name\": \"invalid.illegal.identifier.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numbers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(x|X)[0-9a-fA-F]+\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"constant.numeric.hex.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(b|B)[01]+\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"constant.numeric.binary.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(o|O)?[0-7]+\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"constant.numeric.octal.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?<!\\\\$)(?:\\n  (?:\\\\b[0-9]+(\\\\.)[0-9]+[eE][+-]?[0-9]+\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9]+(\\\\.)[eE][+-]?[0-9]+\\\\b)|       # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9]+[eE][+-]?[0-9]+\\\\b)|       # .1E+3\\n  (?:\\\\b[0-9]+[eE][+-]?[0-9]+\\\\b)|            # 1E+3\\n  (?:\\\\b[0-9]+(\\\\.)[0-9]+\\\\b)|                # 1.1\\n  (?:\\\\b[0-9]+(?=\\\\.{2,3}))|                  # 1 followed by a slice\\n  (?:\\\\b[0-9]+(\\\\.)\\\\B)|                      # 1.\\n  (?:\\\\B(\\\\.)[0-9]+\\\\b)|                      # .1\\n  (?:\\\\b[0-9]+\\\\b(?!\\\\.))                     # 1\\n)(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"objects\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[A-Z][A-Z0-9_$]*(?=\\\\s*\\\\??(\\\\.\\\\s*[a-zA-Z_$]\\\\w*|::))\",\n\t\t\t\t\t\"name\": \"constant.other.object.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*(?=\\\\s*\\\\??(\\\\.\\\\s*[a-zA-Z_$]\\\\w*|::))\",\n\t\t\t\t\t\"name\": \"variable.other.object.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:([a-zA-Z$_][\\\\w$]*)?\\\\s+|(?<![\\\\w$]))(and=|or=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.assignment.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([a-zA-Z$_][\\\\w$]*)?\\\\s*(%=|\\\\+=|-=|\\\\*=|&&=|\\\\|\\\\|=|\\\\?=|(?<!\\\\()/=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.assignment.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([a-zA-Z$_][\\\\w$]*)?\\\\s*(&=|\\\\^=|<<=|>>=|>>>=|\\\\|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.assignment.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<<|>>>|>>\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([a-zA-Z$_][\\\\w$]*)?\\\\s*(=|:(?!:))(?![>=])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.assignment.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"name\": \"keyword.operator.splat.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\?\",\n\t\t\t\t\t\"name\": \"keyword.operator.existential.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n\\\\b(?<![\\\\.\\\\$])\\n(?:\\n  (and|or|not) # logical\\n  |\\n  (is|isnt) # comparison\\n)\\n(?!\\\\s*:)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"properties\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(::))\\\\s*([A-Z][A-Z0-9_$]*\\\\b\\\\$*)(?=\\\\s*\\\\??(\\\\.\\\\s*[a-zA-Z_$]\\\\w*|::))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.property.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.object.property.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(::))\\\\s*(\\\\$*[a-zA-Z_$][\\\\w$]*)(?=\\\\s*\\\\??(\\\\.\\\\s*[a-zA-Z_$]\\\\w*|::))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.property.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(::))\\\\s*([A-Z][A-Z0-9_$]*\\\\b\\\\$*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.property.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.property.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(::))\\\\s*(\\\\$*[a-zA-Z_$][\\\\w$]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.property.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(::))\\\\s*([0-9][\\\\w$]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.property.period.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.prototype.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single_quoted_string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.escape.backslash.coffee\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\)(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regex-character-class\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[wWsSdD]|\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.character-class.regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})\",\n\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\c[A-Z]\",\n\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"heregexp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[bB]|\\\\^|\\\\$\",\n\t\t\t\t\t\"name\": \"keyword.control.anchor.regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[1-9]\\\\d*\",\n\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[?+*]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)\\\\}\\\\??\",\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.or.regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()((\\\\?=)|(\\\\?!))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.look-ahead.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.negative-look-ahead.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.assertion.regexp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heregexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\((\\\\?:)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.regexp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heregexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"constant.other.character-class.set.regexp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?:.|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\\\\-(?:[^\\\\]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.character-class.range.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#embedded_comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-end-tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-expression\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.curly.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.curly.coffee\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double_quoted_string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-attribute\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?:^|\\\\s+)([-\\\\w.]+)\\\\s*(=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double_quoted_string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single_quoted_string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)([-\\\\w\\\\.]+)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/?>)\",\n\t\t\t\t\t\"name\": \"meta.tag.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsx-attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-end-tag\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</)([-\\\\w\\\\.]+)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.coffee\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/?>)\",\n\t\t\t\t\t\"name\": \"meta.tag.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/configuration-editing/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/configuration-editing/.vscodeignore",
    "content": "test/**\nsrc/**\ntsconfig.json\nout/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\nbuild/**\nschemas/devContainer.codespaces.schema.json\nschemas/devContainer.vscode.schema.json\n"
  },
  {
    "path": "extensions/configuration-editing/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst path = require('path');\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/configurationEditingMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'configurationEditingMain.js'\n\t},\n\tresolve: {\n\t\talias: {\n\t\t\t'./node/net': path.resolve(__dirname, 'src', 'browser', 'net'),\n\t\t}\n\t}\n});\n\n"
  },
  {
    "path": "extensions/configuration-editing/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/configurationEditingMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'configurationEditingMain.js'\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t}\n});\n"
  },
  {
    "path": "extensions/configuration-editing/package.json",
    "content": "{\n  \"name\": \"configuration-editing\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.0.0\"\n  },\n  \"icon\": \"images/icon.png\",\n  \"activationEvents\": [\n    \"onProfile\",\n    \"onProfile:github\",\n    \"onLanguage:json\",\n    \"onLanguage:jsonc\"\n  ],\n  \"enabledApiProposals\": [\n    \"profileContentHandlers\"\n  ],\n  \"main\": \"./out/configurationEditingMain\",\n  \"browser\": \"./dist/browser/configurationEditingMain\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:configuration-editing\",\n    \"watch\": \"gulp watch-extension:configuration-editing\"\n  },\n  \"dependencies\": {\n    \"@octokit/rest\": \"^21.1.1\",\n    \"jsonc-parser\": \"^3.2.0\",\n    \"tunnel\": \"^0.0.6\"\n  },\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"jsonc\",\n        \"extensions\": [\n          \".code-workspace\",\n          \"language-configuration.json\",\n          \"icon-theme.json\",\n          \"color-theme.json\"\n        ],\n        \"filenames\": [\n          \"settings.json\",\n          \"launch.json\",\n          \"tasks.json\",\n          \"mcp.json\",\n          \"keybindings.json\",\n          \"extensions.json\",\n          \"argv.json\",\n          \"profiles.json\",\n          \"devcontainer.json\",\n          \".devcontainer.json\"\n        ]\n      },\n      {\n        \"id\": \"json\",\n        \"extensions\": [\n          \".code-profile\"\n        ]\n      }\n    ],\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"vscode://defaultsettings/keybindings.json\",\n        \"url\": \"vscode://schemas/keybindings\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/keybindings.json\",\n        \"url\": \"vscode://schemas/keybindings\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/profiles/*/keybindings.json\",\n        \"url\": \"vscode://schemas/keybindings\"\n      },\n      {\n        \"fileMatch\": \"vscode://defaultsettings/*.json\",\n        \"url\": \"vscode://schemas/settings/default\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/settings.json\",\n        \"url\": \"vscode://schemas/settings/user\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/profiles/*/settings.json\",\n        \"url\": \"vscode://schemas/settings/profile\"\n      },\n      {\n        \"fileMatch\": \"%MACHINE_SETTINGS_HOME%/settings.json\",\n        \"url\": \"vscode://schemas/settings/machine\"\n      },\n      {\n        \"fileMatch\": \"%APP_WORKSPACES_HOME%/*/workspace.json\",\n        \"url\": \"vscode://schemas/workspaceConfig\"\n      },\n      {\n        \"fileMatch\": \"**/*.code-workspace\",\n        \"url\": \"vscode://schemas/workspaceConfig\"\n      },\n      {\n        \"fileMatch\": \"**/argv.json\",\n        \"url\": \"vscode://schemas/argv\"\n      },\n      {\n        \"fileMatch\": \"/.vscode/settings.json\",\n        \"url\": \"vscode://schemas/settings/folder\"\n      },\n      {\n        \"fileMatch\": \"/.vscode/launch.json\",\n        \"url\": \"vscode://schemas/launch\"\n      },\n      {\n        \"fileMatch\": \"/.vscode/tasks.json\",\n        \"url\": \"vscode://schemas/tasks\"\n      },\n      {\n        \"fileMatch\": \"/.vscode/mcp.json\",\n        \"url\": \"vscode://schemas/mcp\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/tasks.json\",\n        \"url\": \"vscode://schemas/tasks\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/snippets/*.json\",\n        \"url\": \"vscode://schemas/snippets\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/profiles/*/snippets/.json\",\n        \"url\": \"vscode://schemas/snippets\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/sync/snippets/preview/*.json\",\n        \"url\": \"vscode://schemas/snippets\"\n      },\n      {\n        \"fileMatch\": \"**/*.code-snippets\",\n        \"url\": \"vscode://schemas/global-snippets\"\n      },\n      {\n        \"fileMatch\": \"/.vscode/extensions.json\",\n        \"url\": \"vscode://schemas/extensions\"\n      },\n      {\n        \"fileMatch\": \"devcontainer.json\",\n        \"url\": \"https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json\"\n      },\n      {\n        \"fileMatch\": \".devcontainer.json\",\n        \"url\": \"https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/globalStorage/ms-vscode-remote.remote-containers/nameConfigs/*.json\",\n        \"url\": \"./schemas/attachContainer.schema.json\"\n      },\n      {\n        \"fileMatch\": \"%APP_SETTINGS_HOME%/globalStorage/ms-vscode-remote.remote-containers/imageConfigs/*.json\",\n        \"url\": \"./schemas/attachContainer.schema.json\"\n      },\n      {\n        \"fileMatch\": \"**/quality/*/product.json\",\n        \"url\": \"vscode://schemas/vscode-product\"\n      }\n    ]\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/configuration-editing/package.nls.json",
    "content": "{\n\t\"displayName\": \"Configuration Editing\",\n\t\"description\": \"Provides capabilities (advanced IntelliSense, auto-fixing) in configuration files like settings, launch, and extension recommendation files.\"\n}\n"
  },
  {
    "path": "extensions/configuration-editing/schemas/attachContainer.schema.json",
    "content": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"description\": \"Configures an attached to container\",\n\t\"allowComments\": true,\n\t\"allowTrailingCommas\": true,\n\t\"type\": \"object\",\n\t\"definitions\": {\n\t\t\"attachContainer\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"workspaceFolder\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"The path of the workspace folder inside the container.\"\n\t\t\t\t},\n\t\t\t\t\"forwardPorts\": {\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"description\": \"Ports that are forwarded from the container to the local machine. Can be an integer port number, or a string of the format \\\"host:port_number\\\".\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"oneOf\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\t\t\t\"maximum\": 65535,\n\t\t\t\t\t\t\t\t\"minimum\": 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\"pattern\": \"^([a-z0-9_-]+):(\\\\d{1,5})$\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"portsAttributes\": {\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"patternProperties\": {\n\t\t\t\t\t\t\"(^\\\\d+(-\\\\d+)?$)|(.+)\": {\n\t\t\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\t\t\"description\": \"A port, range of ports (ex. \\\"40000-55000\\\"), or regular expression (ex. \\\".+\\\\\\\\/server.js\\\").  For a port number or range, the attributes will apply to that port number or range of port numbers. Attributes which use a regular expression will apply to ports whose associated process command line matches the expression.\",\n\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\"onAutoForward\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\"notify\",\n\t\t\t\t\t\t\t\t\t\t\"openBrowser\",\n\t\t\t\t\t\t\t\t\t\t\"openBrowserOnce\",\n\t\t\t\t\t\t\t\t\t\t\"openPreview\",\n\t\t\t\t\t\t\t\t\t\t\"silent\",\n\t\t\t\t\t\t\t\t\t\t\"ignore\"\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"enumDescriptions\": [\n\t\t\t\t\t\t\t\t\t\t\"Shows a notification when a port is automatically forwarded.\",\n\t\t\t\t\t\t\t\t\t\t\"Opens the browser when the port is automatically forwarded. Depending on your settings, this could open an embedded browser.\",\n\t\t\t\t\t\t\t\t\t\t\"Opens the browser when the port is automatically forwarded, but only the first time the port is forward during a session. Depending on your settings, this could open an embedded browser.\",\n\t\t\t\t\t\t\t\t\t\t\"Opens a preview in the same window when the port is automatically forwarded.\",\n\t\t\t\t\t\t\t\t\t\t\"Shows no notification and takes no action when this port is automatically forwarded.\",\n\t\t\t\t\t\t\t\t\t\t\"This port will not be automatically forwarded.\"\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"description\": \"Defines the action that occurs when the port is discovered for automatic forwarding\",\n\t\t\t\t\t\t\t\t\t\"default\": \"notify\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"elevateIfNeeded\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\t\t\t\t\"description\": \"Automatically prompt for elevation (if needed) when this port is forwarded. Elevate is required if the local port is a privileged port.\",\n\t\t\t\t\t\t\t\t\t\"default\": false\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"label\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\"description\": \"Label that will be shown in the UI for this port.\",\n\t\t\t\t\t\t\t\t\t\"default\": \"Application\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"requireLocalPort\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\t\t\t\t\"markdownDescription\": \"When true, a modal dialog will show if the chosen local port isn't used for forwarding.\",\n\t\t\t\t\t\t\t\t\t\"default\": false\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"protocol\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\"http\",\n\t\t\t\t\t\t\t\t\t\t\"https\"\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"description\": \"The protocol to use when forwarding this port.\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"default\": {\n\t\t\t\t\t\t\t\t\"label\": \"Application\",\n\t\t\t\t\t\t\t\t\"onAutoForward\": \"notify\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"markdownDescription\": \"Set default properties that are applied when a specific port number is forwarded. For example:\\n\\n```\\n\\\"3000\\\": {\\n  \\\"label\\\": \\\"Application\\\"\\n},\\n\\\"40000-55000\\\": {\\n  \\\"onAutoForward\\\": \\\"ignore\\\"\\n},\\n\\\".+\\\\\\\\/server.js\\\": {\\n \\\"onAutoForward\\\": \\\"openPreview\\\"\\n}\\n```\",\n\t\t\t\t\t\"defaultSnippets\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\"${1:3000}\": {\n\t\t\t\t\t\t\t\t\t\"label\": \"${2:Application}\",\n\t\t\t\t\t\t\t\t\t\"onAutoForward\": \"notify\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"additionalProperties\": false\n\t\t\t\t},\n\t\t\t\t\"otherPortsAttributes\": {\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\"onAutoForward\": {\n\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\"notify\",\n\t\t\t\t\t\t\t\t\"openBrowser\",\n\t\t\t\t\t\t\t\t\"openPreview\",\n\t\t\t\t\t\t\t\t\"silent\",\n\t\t\t\t\t\t\t\t\"ignore\"\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"enumDescriptions\": [\n\t\t\t\t\t\t\t\t\"Shows a notification when a port is automatically forwarded.\",\n\t\t\t\t\t\t\t\t\"Opens the browser when the port is automatically forwarded. Depending on your settings, this could open an embedded browser.\",\n\t\t\t\t\t\t\t\t\"Opens a preview in the same window when the port is automatically forwarded.\",\n\t\t\t\t\t\t\t\t\"Shows no notification and takes no action when this port is automatically forwarded.\",\n\t\t\t\t\t\t\t\t\"This port will not be automatically forwarded.\"\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"description\": \"Defines the action that occurs when the port is discovered for automatic forwarding\",\n\t\t\t\t\t\t\t\"default\": \"notify\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"elevateIfNeeded\": {\n\t\t\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\t\t\"description\": \"Automatically prompt for elevation (if needed) when this port is forwarded. Elevate is required if the local port is a privileged port.\",\n\t\t\t\t\t\t\t\"default\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"label\": {\n\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\"description\": \"Label that will be shown in the UI for this port.\",\n\t\t\t\t\t\t\t\"default\": \"Application\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"requireLocalPort\": {\n\t\t\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\t\t\"markdownDescription\": \"When true, a modal dialog will show if the chosen local port isn't used for forwarding.\",\n\t\t\t\t\t\t\t\"default\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"protocol\": {\n\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\"http\",\n\t\t\t\t\t\t\t\t\"https\"\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"description\": \"The protocol to use when forwarding this port.\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"defaultSnippets\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\"onAutoForward\": \"ignore\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"markdownDescription\": \"Set default properties that are applied to all ports that don't get properties from the setting `remote.portsAttributes`. For example:\\n\\n```\\n{\\n  \\\"onAutoForward\\\": \\\"ignore\\\"\\n}\\n```\",\n\t\t\t\t\t\"additionalProperties\": false\n\t\t\t\t},\n\t\t\t\t\"settings\": {\n\t\t\t\t\t\"$ref\": \"vscode://schemas/settings/machine\",\n\t\t\t\t\t\"description\": \"Machine specific settings that should be copied into the container. These are only copied when connecting to the container for the first time.\"\n\t\t\t\t},\n\t\t\t\t\"remoteEnv\": {\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"additionalProperties\": {\n\t\t\t\t\t\t\"type\": [\n\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\"null\"\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"description\": \"Remote environment variables. If these are used in the Integrated Terminal, make sure the 'Terminal > Integrated: Inherit Env' setting is enabled.\"\n\t\t\t\t},\n\t\t\t\t\"remoteUser\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"The user VS Code Server will be started with. The default is the same user as the container.\"\n\t\t\t\t},\n\t\t\t\t\"extensions\": {\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"description\": \"An array of extensions that should be installed into the container.\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"pattern\": \"^([a-z0-9A-Z][a-z0-9A-Z-]*)\\\\.([a-z0-9A-Z][a-z0-9A-Z-]*)(@(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?)?$\",\n\t\t\t\t\t\t\"errorMessage\": \"Expected format: '${publisher}.${name}' or '${publisher}.${name}@${version}'. Example: 'ms-dotnettools.csharp'.\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"userEnvProbe\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\"none\",\n\t\t\t\t\t\t\"loginShell\",\n\t\t\t\t\t\t\"loginInteractiveShell\",\n\t\t\t\t\t\t\"interactiveShell\"\n\t\t\t\t\t],\n\t\t\t\t\t\"description\": \"User environment probe to run. The default is none.\"\n\t\t\t\t},\n\t\t\t\t\"postAttachCommand\": {\n\t\t\t\t\t\"type\": [\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"array\"\n\t\t\t\t\t],\n\t\t\t\t\t\"description\": \"A command to run after attaching to the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"allOf\": [\n\t\t{\n\t\t\t\"$ref\": \"#/definitions/attachContainer\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/configuration-editing/schemas/devContainer.codespaces.schema.json",
    "content": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"customizations\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"codespaces\": {\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"description\": \"Customizations specific to GitHub Codespaces\",\n\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\"repositories\": {\n\t\t\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\t\t\"description\": \"Configuration relative to the given repositories, following the format 'owner/repo'.\\n  A wildcard (*) is permitted for the repo name (eg: 'microsoft/*')\",\n\t\t\t\t\t\t\t\"patternProperties\": {\n\t\t\t\t\t\t\t\t\"^[a-zA-Z0-9-_.]+[.]*\\/[a-zA-Z0-9-_*]+[.]*$\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\t\t\t\t\"additionalProperties\": true,\n\t\t\t\t\t\t\t\t\t\"oneOf\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"permissions\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"description\": \"Additional repository permissions.\\n See https://aka.ms/ghcs/multi-repo-auth for more info.\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"additionalProperties\": true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"anyOf\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"actions\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"checks\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"contents\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"deployments\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"discussions\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"issues\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"packages\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"pages\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"pull_requests\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"repository_projects\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"statuses\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"workflows\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"permissions\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"description\": \"Additional repository permissions.\\n See https://aka.ms/ghcs/multi-repo-auth for more info.\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"read-all\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"write-all\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"openFiles\": {\n\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\"description\": \"The paths to the files to open when the codespace is created. Paths are relative to the workspace.\",\n\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"disableAutomaticConfiguration\": {\n\t\t\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\t\t\"description\": \"Disables the setup that is automatically run in a codespace if no `postCreateCommand` is specified.\",\n\t\t\t\t\t\t\t\"default\": false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"codespaces\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"additionalProperties\": true,\n\t\t\t\"description\": \"Codespaces-specific configuration.\",\n\t\t\t\"deprecated\": true,\n\t\t\t\"deprecationMessage\": \"Use 'customizations/codespaces' instead\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/configuration-editing/schemas/devContainer.vscode.schema.json",
    "content": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"customizations\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"vscode\": {\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\"extensions\": {\n\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\"description\": \"An array of extensions that should be installed into the container. A minus '-' in front of the extension id removes it from the list of extensions to be installed.\",\n\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\"pattern\": \"^-?([a-z0-9A-Z][a-z0-9A-Z-]*)\\\\.([a-z0-9A-Z][a-z0-9A-Z-]*)((@(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?)|@prerelease)?$\",\n\t\t\t\t\t\t\t\t\"errorMessage\": \"Expected format: '${publisher}.${name}', '-${publisher}.${name}' or '${publisher}.${name}@${version}'. Example: 'ms-dotnettools.csharp'.\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"settings\": {\n\t\t\t\t\t\t\t\"$ref\": \"vscode://schemas/settings/machine\",\n\t\t\t\t\t\t\t\"description\": \"Machine specific settings that should be copied into the container. These are only copied when connecting to the container for the first time, rebuilding the container then triggers it again.\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"devPort\": {\n\t\t\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\t\t\"description\": \"The port VS Code can use to connect to its backend.\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"extensions\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"description\": \"An array of extensions that should be installed into the container. A minus '-' in front of the extension id removes it from the list of extensions to be installed.\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"pattern\": \"^-?([a-z0-9A-Z][a-z0-9A-Z-]*)\\\\.([a-z0-9A-Z][a-z0-9A-Z-]*)((@(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?)|@prerelease)?$\",\n\t\t\t\t\"errorMessage\": \"Expected format: '${publisher}.${name}', '-${publisher}.${name}' or '${publisher}.${name}@${version}'. Example: 'ms-dotnettools.csharp'.\"\n\t\t\t},\n\t\t\t\"deprecated\": true,\n\t\t\t\"deprecationMessage\": \"Use 'customizations/vscode/extensions' instead\"\n\t\t},\n\t\t\"settings\": {\n\t\t\t\"$ref\": \"vscode://schemas/settings/machine\",\n\t\t\t\"description\": \"Machine specific settings that should be copied into the container. These are only copied when connecting to the container for the first time, rebuilding the container then triggers it again.\",\n\t\t\t\"deprecated\": true,\n\t\t\t\"deprecationMessage\": \"Use 'customizations/vscode/settings' instead\"\n\t\t},\n\t\t\"devPort\": {\n\t\t\t\"type\": \"integer\",\n\t\t\t\"description\": \"The port VS Code can use to connect to its backend.\",\n\t\t\t\"deprecated\": true,\n\t\t\t\"deprecationMessage\": \"Use 'customizations/vscode/devPort' instead\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/configuration-editing/src/browser/net.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const agent = undefined;\n"
  },
  {
    "path": "extensions/configuration-editing/src/configurationEditingMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { getLocation, JSONPath, parse, visit, Location } from 'jsonc-parser';\nimport * as vscode from 'vscode';\nimport { SettingsDocument } from './settingsDocumentHelper';\nimport { provideInstalledExtensionProposals } from './extensionsProposals';\nimport './importExportProfiles';\n\nexport function activate(context: vscode.ExtensionContext): void {\n\t//settings.json suggestions\n\tcontext.subscriptions.push(registerSettingsCompletions());\n\n\t//extensions suggestions\n\tcontext.subscriptions.push(...registerExtensionsCompletions());\n\n\t// launch.json variable suggestions\n\tcontext.subscriptions.push(registerVariableCompletions('**/launch.json'));\n\n\t// task.json variable suggestions\n\tcontext.subscriptions.push(registerVariableCompletions('**/tasks.json'));\n\n\t// Workspace file launch/tasks variable completions\n\tcontext.subscriptions.push(registerVariableCompletions('**/*.code-workspace'));\n\n\t// keybindings.json/package.json context key suggestions\n\tcontext.subscriptions.push(registerContextKeyCompletions());\n}\n\nfunction registerSettingsCompletions(): vscode.Disposable {\n\treturn vscode.languages.registerCompletionItemProvider({ language: 'jsonc', pattern: '**/settings.json' }, {\n\t\tprovideCompletionItems(document, position, token) {\n\t\t\treturn new SettingsDocument(document).provideCompletionItems(position, token);\n\t\t}\n\t});\n}\n\nfunction registerVariableCompletions(pattern: string): vscode.Disposable {\n\treturn vscode.languages.registerCompletionItemProvider({ language: 'jsonc', pattern }, {\n\t\tprovideCompletionItems(document, position, _token) {\n\t\t\tconst location = getLocation(document.getText(), document.offsetAt(position));\n\t\t\tif (isCompletingInsidePropertyStringValue(document, location, position)) {\n\t\t\t\tif (document.fileName.endsWith('.code-workspace') && !isLocationInsideTopLevelProperty(location, ['launch', 'tasks'])) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tlet range = document.getWordRangeAtPosition(position, /\\$\\{[^\"\\}]*\\}?/);\n\t\t\t\tif (!range || range.start.isEqual(position) || range.end.isEqual(position) && document.getText(range).endsWith('}')) {\n\t\t\t\t\trange = new vscode.Range(position, position);\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t{ label: 'workspaceFolder', detail: vscode.l10n.t(\"The path of the folder opened in VS Code\") },\n\t\t\t\t\t{ label: 'workspaceFolderBasename', detail: vscode.l10n.t(\"The name of the folder opened in VS Code without any slashes (/)\") },\n\t\t\t\t\t{ label: 'fileWorkspaceFolderBasename', detail: vscode.l10n.t(\"The current opened file workspace folder name without any slashes (/)\") },\n\t\t\t\t\t{ label: 'relativeFile', detail: vscode.l10n.t(\"The current opened file relative to ${workspaceFolder}\") },\n\t\t\t\t\t{ label: 'relativeFileDirname', detail: vscode.l10n.t(\"The current opened file's dirname relative to ${workspaceFolder}\") },\n\t\t\t\t\t{ label: 'file', detail: vscode.l10n.t(\"The current opened file\") },\n\t\t\t\t\t{ label: 'cwd', detail: vscode.l10n.t(\"The task runner's current working directory on startup\") },\n\t\t\t\t\t{ label: 'lineNumber', detail: vscode.l10n.t(\"The current selected line number in the active file\") },\n\t\t\t\t\t{ label: 'selectedText', detail: vscode.l10n.t(\"The current selected text in the active file\") },\n\t\t\t\t\t{ label: 'fileDirname', detail: vscode.l10n.t(\"The current opened file's dirname\") },\n\t\t\t\t\t{ label: 'fileExtname', detail: vscode.l10n.t(\"The current opened file's extension\") },\n\t\t\t\t\t{ label: 'fileBasename', detail: vscode.l10n.t(\"The current opened file's basename\") },\n\t\t\t\t\t{ label: 'fileBasenameNoExtension', detail: vscode.l10n.t(\"The current opened file's basename with no file extension\") },\n\t\t\t\t\t{ label: 'defaultBuildTask', detail: vscode.l10n.t(\"The name of the default build task. If there is not a single default build task then a quick pick is shown to choose the build task.\") },\n\t\t\t\t\t{ label: 'pathSeparator', detail: vscode.l10n.t(\"The character used by the operating system to separate components in file paths. Is also aliased to '/'.\") },\n\t\t\t\t\t{ label: 'extensionInstallFolder', detail: vscode.l10n.t(\"The path where an extension is installed.\"), param: 'publisher.extension' },\n\t\t\t\t].map(variable => ({\n\t\t\t\t\tlabel: `\\${${variable.label}}`,\n\t\t\t\t\trange,\n\t\t\t\t\tinsertText: variable.param ? new vscode.SnippetString(`\\${${variable.label}:`).appendPlaceholder(variable.param).appendText('}') : (`\\${${variable.label}}`),\n\t\t\t\t\tdetail: variable.detail\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t});\n}\n\nfunction isCompletingInsidePropertyStringValue(document: vscode.TextDocument, location: Location, pos: vscode.Position) {\n\tif (location.isAtPropertyKey) {\n\t\treturn false;\n\t}\n\tconst previousNode = location.previousNode;\n\tif (previousNode && previousNode.type === 'string') {\n\t\tconst offset = document.offsetAt(pos);\n\t\treturn offset > previousNode.offset && offset < previousNode.offset + previousNode.length;\n\t}\n\treturn false;\n}\n\nfunction isLocationInsideTopLevelProperty(location: Location, values: string[]) {\n\treturn values.includes(location.path[0] as string);\n}\n\ninterface IExtensionsContent {\n\trecommendations: string[];\n}\n\nfunction registerExtensionsCompletions(): vscode.Disposable[] {\n\treturn [registerExtensionsCompletionsInExtensionsDocument(), registerExtensionsCompletionsInWorkspaceConfigurationDocument()];\n}\n\nfunction registerExtensionsCompletionsInExtensionsDocument(): vscode.Disposable {\n\treturn vscode.languages.registerCompletionItemProvider({ pattern: '**/extensions.json' }, {\n\t\tprovideCompletionItems(document, position, _token) {\n\t\t\tconst location = getLocation(document.getText(), document.offsetAt(position));\n\t\t\tif (location.path[0] === 'recommendations') {\n\t\t\t\tconst range = getReplaceRange(document, location, position);\n\t\t\t\tconst extensionsContent = <IExtensionsContent>parse(document.getText());\n\t\t\t\treturn provideInstalledExtensionProposals(extensionsContent && extensionsContent.recommendations || [], '', range, false);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t});\n}\n\nfunction registerExtensionsCompletionsInWorkspaceConfigurationDocument(): vscode.Disposable {\n\treturn vscode.languages.registerCompletionItemProvider({ pattern: '**/*.code-workspace' }, {\n\t\tprovideCompletionItems(document, position, _token) {\n\t\t\tconst location = getLocation(document.getText(), document.offsetAt(position));\n\t\t\tif (location.path[0] === 'extensions' && location.path[1] === 'recommendations') {\n\t\t\t\tconst range = getReplaceRange(document, location, position);\n\t\t\t\tconst extensionsContent = <IExtensionsContent>parse(document.getText())['extensions'];\n\t\t\t\treturn provideInstalledExtensionProposals(extensionsContent && extensionsContent.recommendations || [], '', range, false);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t});\n}\n\nfunction getReplaceRange(document: vscode.TextDocument, location: Location, position: vscode.Position) {\n\tconst node = location.previousNode;\n\tif (node) {\n\t\tconst nodeStart = document.positionAt(node.offset), nodeEnd = document.positionAt(node.offset + node.length);\n\t\tif (nodeStart.isBeforeOrEqual(position) && nodeEnd.isAfterOrEqual(position)) {\n\t\t\treturn new vscode.Range(nodeStart, nodeEnd);\n\t\t}\n\t}\n\treturn new vscode.Range(position, position);\n}\n\nvscode.languages.registerDocumentSymbolProvider({ pattern: '**/launch.json', language: 'jsonc' }, {\n\tprovideDocumentSymbols(document: vscode.TextDocument, _token: vscode.CancellationToken): vscode.ProviderResult<vscode.SymbolInformation[]> {\n\t\tconst result: vscode.SymbolInformation[] = [];\n\t\tlet name: string = '';\n\t\tlet lastProperty = '';\n\t\tlet startOffset = 0;\n\t\tlet depthInObjects = 0;\n\n\t\tvisit(document.getText(), {\n\t\t\tonObjectProperty: (property, _offset, _length) => {\n\t\t\t\tlastProperty = property;\n\t\t\t},\n\t\t\tonLiteralValue: (value: any, _offset: number, _length: number) => {\n\t\t\t\tif (lastProperty === 'name') {\n\t\t\t\t\tname = value;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonObjectBegin: (offset: number, _length: number) => {\n\t\t\t\tdepthInObjects++;\n\t\t\t\tif (depthInObjects === 2) {\n\t\t\t\t\tstartOffset = offset;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonObjectEnd: (offset: number, _length: number) => {\n\t\t\t\tif (name && depthInObjects === 2) {\n\t\t\t\t\tresult.push(new vscode.SymbolInformation(name, vscode.SymbolKind.Object, new vscode.Range(document.positionAt(startOffset), document.positionAt(offset))));\n\t\t\t\t}\n\t\t\t\tdepthInObjects--;\n\t\t\t},\n\t\t});\n\n\t\treturn result;\n\t}\n}, { label: 'Launch Targets' });\n\nfunction registerContextKeyCompletions(): vscode.Disposable {\n\ttype ContextKeyInfo = { key: string; type?: string; description?: string };\n\n\tconst paths = new Map<vscode.DocumentFilter, JSONPath[]>([\n\t\t[{ language: 'jsonc', pattern: '**/keybindings.json' }, [\n\t\t\t['*', 'when']\n\t\t]],\n\t\t[{ language: 'json', pattern: '**/package.json' }, [\n\t\t\t['contributes', 'menus', '*', '*', 'when'],\n\t\t\t['contributes', 'views', '*', '*', 'when'],\n\t\t\t['contributes', 'viewsWelcome', '*', 'when'],\n\t\t\t['contributes', 'keybindings', '*', 'when'],\n\t\t\t['contributes', 'keybindings', 'when'],\n\t\t]]\n\t]);\n\n\treturn vscode.languages.registerCompletionItemProvider(\n\t\t[...paths.keys()],\n\t\t{\n\t\t\tasync provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken) {\n\n\t\t\t\tconst location = getLocation(document.getText(), document.offsetAt(position));\n\n\t\t\t\tif (location.isAtPropertyKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet isValidLocation = false;\n\t\t\t\tfor (const [key, value] of paths) {\n\t\t\t\t\tif (vscode.languages.match(key, document)) {\n\t\t\t\t\t\tif (value.some(location.matches.bind(location))) {\n\t\t\t\t\t\t\tisValidLocation = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!isValidLocation || !isCompletingInsidePropertyStringValue(document, location, position)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst replacing = document.getWordRangeAtPosition(position, /[a-zA-Z.]+/) || new vscode.Range(position, position);\n\t\t\t\tconst inserting = replacing.with(undefined, position);\n\n\t\t\t\tconst data = await vscode.commands.executeCommand<ContextKeyInfo[]>('getContextKeyInfo');\n\t\t\t\tif (token.isCancellationRequested || !data) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst result = new vscode.CompletionList();\n\t\t\t\tfor (const item of data) {\n\t\t\t\t\tconst completion = new vscode.CompletionItem(item.key, vscode.CompletionItemKind.Constant);\n\t\t\t\t\tcompletion.detail = item.type;\n\t\t\t\t\tcompletion.range = { replacing, inserting };\n\t\t\t\t\tcompletion.documentation = item.description;\n\t\t\t\t\tresult.items.push(completion);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t);\n}\n"
  },
  {
    "path": "extensions/configuration-editing/src/extensionsProposals.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\n\nexport async function provideInstalledExtensionProposals(existing: string[], additionalText: string, range: vscode.Range, includeBuiltinExtensions: boolean): Promise<vscode.CompletionItem[] | vscode.CompletionList> {\n\tif (Array.isArray(existing)) {\n\t\tconst extensions = includeBuiltinExtensions ? vscode.extensions.all : vscode.extensions.all.filter(e => !(e.id.startsWith('vscode.') || e.id === 'Microsoft.vscode-markdown'));\n\t\tconst knownExtensionProposals = extensions.filter(e => existing.indexOf(e.id) === -1);\n\t\tif (knownExtensionProposals.length) {\n\t\t\treturn knownExtensionProposals.map(e => {\n\t\t\t\tconst item = new vscode.CompletionItem(e.id);\n\t\t\t\tconst insertText = `\"${e.id}\"${additionalText}`;\n\t\t\t\titem.kind = vscode.CompletionItemKind.Value;\n\t\t\t\titem.insertText = insertText;\n\t\t\t\titem.range = range;\n\t\t\t\titem.filterText = insertText;\n\t\t\t\treturn item;\n\t\t\t});\n\t\t} else {\n\t\t\tconst example = new vscode.CompletionItem(vscode.l10n.t(\"Example\"));\n\t\t\texample.insertText = '\"vscode.csharp\"';\n\t\t\texample.kind = vscode.CompletionItemKind.Value;\n\t\t\texample.range = range;\n\t\t\treturn [example];\n\t\t}\n\t}\n\treturn [];\n}\n"
  },
  {
    "path": "extensions/configuration-editing/src/importExportProfiles.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Octokit } from '@octokit/rest';\nimport * as vscode from 'vscode';\nimport { basename } from 'path';\nimport { agent } from './node/net';\n\nclass GitHubGistProfileContentHandler implements vscode.ProfileContentHandler {\n\n\treadonly name = vscode.l10n.t('GitHub');\n\treadonly description = vscode.l10n.t('gist');\n\n\tprivate _octokit: Promise<Octokit> | undefined;\n\tprivate getOctokit(): Promise<Octokit> {\n\t\tif (!this._octokit) {\n\t\t\tthis._octokit = (async () => {\n\t\t\t\tconst session = await vscode.authentication.getSession('github', ['gist', 'user:email'], { createIfNone: true });\n\t\t\t\tconst token = session.accessToken;\n\n\t\t\t\tconst { Octokit } = await import('@octokit/rest');\n\n\t\t\t\treturn new Octokit({\n\t\t\t\t\trequest: { agent },\n\t\t\t\t\tuserAgent: 'GitHub VSCode',\n\t\t\t\t\tauth: `token ${token}`\n\t\t\t\t});\n\t\t\t})();\n\t\t}\n\t\treturn this._octokit;\n\t}\n\n\tasync saveProfile(name: string, content: string): Promise<{ readonly id: string; readonly link: vscode.Uri } | null> {\n\t\tconst octokit = await this.getOctokit();\n\t\tconst result = await octokit.gists.create({\n\t\t\tpublic: false,\n\t\t\tfiles: {\n\t\t\t\t[name]: {\n\t\t\t\t\tcontent\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif (result.data.id && result.data.html_url) {\n\t\t\tconst link = vscode.Uri.parse(result.data.html_url);\n\t\t\treturn { id: result.data.id, link };\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate _public_octokit: Promise<Octokit> | undefined;\n\tprivate getPublicOctokit(): Promise<Octokit> {\n\t\tif (!this._public_octokit) {\n\t\t\tthis._public_octokit = (async () => {\n\t\t\t\tconst { Octokit } = await import('@octokit/rest');\n\t\t\t\treturn new Octokit({ request: { agent }, userAgent: 'GitHub VSCode' });\n\t\t\t})();\n\t\t}\n\t\treturn this._public_octokit;\n\t}\n\n\tasync readProfile(id: string): Promise<string | null>;\n\tasync readProfile(uri: vscode.Uri): Promise<string | null>;\n\tasync readProfile(arg: string | vscode.Uri): Promise<string | null> {\n\t\tconst gist_id = typeof arg === 'string' ? arg : basename(arg.path);\n\t\tconst octokit = await this.getPublicOctokit();\n\t\ttry {\n\t\t\tconst gist = await octokit.gists.get({ gist_id });\n\t\t\tif (gist.data.files) {\n\t\t\t\treturn gist.data.files[Object.keys(gist.data.files)[0]]?.content ?? null;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// ignore\n\t\t}\n\t\treturn null;\n\t}\n\n}\n\nvscode.window.registerProfileContentHandler('github', new GitHubGistProfileContentHandler());\n"
  },
  {
    "path": "extensions/configuration-editing/src/node/net.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Agent, globalAgent } from 'https';\nimport { URL } from 'url';\nimport { httpsOverHttp } from 'tunnel';\nimport { window } from 'vscode';\n\nexport const agent = getAgent();\n\n/**\n * Return an https agent for the given proxy URL, or return the\n * global https agent if the URL was empty or invalid.\n */\nfunction getAgent(url: string | undefined = process.env.HTTPS_PROXY): Agent {\n\tif (!url) {\n\t\treturn globalAgent;\n\t}\n\ttry {\n\t\tconst { hostname, port, username, password } = new URL(url);\n\t\tconst auth = username && password && `${username}:${password}`;\n\t\treturn httpsOverHttp({ proxy: { host: hostname, port, proxyAuth: auth } });\n\t} catch (e) {\n\t\twindow.showErrorMessage(`HTTPS_PROXY environment variable ignored: ${e.message}`);\n\t\treturn globalAgent;\n\t}\n}\n"
  },
  {
    "path": "extensions/configuration-editing/src/settingsDocumentHelper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getLocation, Location, parse } from 'jsonc-parser';\nimport { provideInstalledExtensionProposals } from './extensionsProposals';\n\nconst OVERRIDE_IDENTIFIER_REGEX = /\\[([^\\[\\]]*)\\]/g;\n\nexport class SettingsDocument {\n\n\tconstructor(private document: vscode.TextDocument) { }\n\n\tpublic async provideCompletionItems(position: vscode.Position, _token: vscode.CancellationToken): Promise<vscode.CompletionItem[] | vscode.CompletionList> {\n\t\tconst location = getLocation(this.document.getText(), this.document.offsetAt(position));\n\n\t\t// window.title\n\t\tif (location.path[0] === 'window.title') {\n\t\t\treturn this.provideWindowTitleCompletionItems(location, position);\n\t\t}\n\n\t\t// files.association\n\t\tif (location.path[0] === 'files.associations') {\n\t\t\treturn this.provideFilesAssociationsCompletionItems(location, position);\n\t\t}\n\n\t\t// files.exclude, search.exclude, explorer.autoRevealExclude\n\t\tif (location.path[0] === 'files.exclude' || location.path[0] === 'search.exclude' || location.path[0] === 'explorer.autoRevealExclude') {\n\t\t\treturn this.provideExcludeCompletionItems(location, position);\n\t\t}\n\n\t\t// files.defaultLanguage\n\t\tif (location.path[0] === 'files.defaultLanguage') {\n\t\t\treturn this.provideLanguageCompletionItems(location, position);\n\t\t}\n\n\t\t// workbench.editor.label\n\t\tif (location.path[0] === 'workbench.editor.label.patterns') {\n\t\t\treturn this.provideEditorLabelCompletionItems(location, position);\n\t\t}\n\n\t\t// settingsSync.ignoredExtensions\n\t\tif (location.path[0] === 'settingsSync.ignoredExtensions') {\n\t\t\tlet ignoredExtensions = [];\n\t\t\ttry {\n\t\t\t\tignoredExtensions = parse(this.document.getText())['settingsSync.ignoredExtensions'];\n\t\t\t} catch (e) {/* ignore error */ }\n\t\t\tconst range = this.getReplaceRange(location, position);\n\t\t\treturn provideInstalledExtensionProposals(ignoredExtensions, '', range, true);\n\t\t}\n\n\t\t// remote.extensionKind\n\t\tif (location.path[0] === 'remote.extensionKind' && location.path.length === 2 && location.isAtPropertyKey) {\n\t\t\tlet alreadyConfigured: string[] = [];\n\t\t\ttry {\n\t\t\t\talreadyConfigured = Object.keys(parse(this.document.getText())['remote.extensionKind']);\n\t\t\t} catch (e) {/* ignore error */ }\n\t\t\tconst range = this.getReplaceRange(location, position);\n\t\t\treturn provideInstalledExtensionProposals(alreadyConfigured, location.previousNode ? '' : `: [\\n\\t\"ui\"\\n]`, range, true);\n\t\t}\n\n\t\t// remote.portsAttributes\n\t\tif (location.path[0] === 'remote.portsAttributes' && location.path.length === 2 && location.isAtPropertyKey) {\n\t\t\treturn this.providePortsAttributesCompletionItem(this.getReplaceRange(location, position));\n\t\t}\n\n\t\treturn this.provideLanguageOverridesCompletionItems(location, position);\n\t}\n\n\tprivate getReplaceRange(location: Location, position: vscode.Position) {\n\t\tconst node = location.previousNode;\n\t\tif (node) {\n\t\t\tconst nodeStart = this.document.positionAt(node.offset), nodeEnd = this.document.positionAt(node.offset + node.length);\n\t\t\tif (nodeStart.isBeforeOrEqual(position) && nodeEnd.isAfterOrEqual(position)) {\n\t\t\t\treturn new vscode.Range(nodeStart, nodeEnd);\n\t\t\t}\n\t\t}\n\t\treturn new vscode.Range(position, position);\n\t}\n\n\tprivate isCompletingPropertyValue(location: Location, pos: vscode.Position) {\n\t\tif (location.isAtPropertyKey) {\n\t\t\treturn false;\n\t\t}\n\t\tconst previousNode = location.previousNode;\n\t\tif (previousNode) {\n\t\t\tconst offset = this.document.offsetAt(pos);\n\t\t\treturn offset >= previousNode.offset && offset <= previousNode.offset + previousNode.length;\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate async provideWindowTitleCompletionItems(location: Location, pos: vscode.Position): Promise<vscode.CompletionItem[]> {\n\t\tconst completions: vscode.CompletionItem[] = [];\n\n\t\tif (!this.isCompletingPropertyValue(location, pos)) {\n\t\t\treturn completions;\n\t\t}\n\n\t\tlet range = this.document.getWordRangeAtPosition(pos, /\\$\\{[^\"\\}]*\\}?/);\n\t\tif (!range || range.start.isEqual(pos) || range.end.isEqual(pos) && this.document.getText(range).endsWith('}')) {\n\t\t\trange = new vscode.Range(pos, pos);\n\t\t}\n\n\t\tconst getText = (variable: string) => {\n\t\t\tconst text = '${' + variable + '}';\n\t\t\treturn location.previousNode ? text : JSON.stringify(text);\n\t\t};\n\n\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeEditorShort'), range, vscode.l10n.t(\"the file name (e.g. myFile.txt)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeEditorMedium'), range, vscode.l10n.t(\"the path of the file relative to the workspace folder (e.g. myFolder/myFileFolder/myFile.txt)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeEditorLong'), range, vscode.l10n.t(\"the full path of the file (e.g. /Users/Development/myFolder/myFileFolder/myFile.txt)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeFolderShort'), range, vscode.l10n.t(\"the name of the folder the file is contained in (e.g. myFileFolder)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeFolderMedium'), range, vscode.l10n.t(\"the path of the folder the file is contained in, relative to the workspace folder (e.g. myFolder/myFileFolder)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeFolderLong'), range, vscode.l10n.t(\"the full path of the folder the file is contained in (e.g. /Users/Development/myFolder/myFileFolder)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('rootName'), range, vscode.l10n.t(\"name of the workspace with optional remote name and workspace indicator if applicable (e.g. myFolder, myRemoteFolder [SSH] or myWorkspace (Workspace))\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('rootNameShort'), range, vscode.l10n.t(\"shortened name of the workspace without suffixes (e.g. myFolder or myWorkspace)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('rootPath'), range, vscode.l10n.t(\"file path of the workspace (e.g. /Users/Development/myWorkspace)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('folderName'), range, vscode.l10n.t(\"name of the workspace folder the file is contained in (e.g. myFolder)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('folderPath'), range, vscode.l10n.t(\"file path of the workspace folder the file is contained in (e.g. /Users/Development/myFolder)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('appName'), range, vscode.l10n.t(\"e.g. VS Code\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('remoteName'), range, vscode.l10n.t(\"e.g. SSH\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('dirty'), range, vscode.l10n.t(\"an indicator for when the active editor has unsaved changes\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('separator'), range, vscode.l10n.t(\"a conditional separator (' - ') that only shows when surrounded by variables with values\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeRepositoryName'), range, vscode.l10n.t(\"the name of the active repository (e.g. vscode)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeRepositoryBranchName'), range, vscode.l10n.t(\"the name of the active branch in the active repository (e.g. main)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('activeEditorState'), range, vscode.l10n.t(\"the state of the active editor (e.g. modified).\")));\n\t\treturn completions;\n\t}\n\n\tprivate async provideEditorLabelCompletionItems(location: Location, pos: vscode.Position): Promise<vscode.CompletionItem[]> {\n\t\tconst completions: vscode.CompletionItem[] = [];\n\n\t\tif (!this.isCompletingPropertyValue(location, pos)) {\n\t\t\treturn completions;\n\t\t}\n\n\t\tlet range = this.document.getWordRangeAtPosition(pos, /\\$\\{[^\"\\}]*\\}?/);\n\t\tif (!range || range.start.isEqual(pos) || range.end.isEqual(pos) && this.document.getText(range).endsWith('}')) {\n\t\t\trange = new vscode.Range(pos, pos);\n\t\t}\n\n\t\tconst getText = (variable: string) => {\n\t\t\tconst text = '${' + variable + '}';\n\t\t\treturn location.previousNode ? text : JSON.stringify(text);\n\t\t};\n\n\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('dirname'), range, vscode.l10n.t(\"The parent folder name of the editor (e.g. myFileFolder)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('dirname(1)'), range, vscode.l10n.t(\"The nth parent folder name of the editor\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('filename'), range, vscode.l10n.t(\"The file name of the editor without its directory or extension (e.g. myFile)\")));\n\t\tcompletions.push(this.newSimpleCompletionItem(getText('extname'), range, vscode.l10n.t(\"The file extension of the editor (e.g. txt)\")));\n\t\treturn completions;\n\t}\n\n\tprivate async provideFilesAssociationsCompletionItems(location: Location, position: vscode.Position): Promise<vscode.CompletionItem[]> {\n\t\tconst completions: vscode.CompletionItem[] = [];\n\n\t\tif (location.path.length === 2) {\n\t\t\t// Key\n\t\t\tif (location.path[1] === '') {\n\t\t\t\tconst range = this.getReplaceRange(location, position);\n\n\t\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\t\tlabel: vscode.l10n.t(\"Files with Extension\"),\n\t\t\t\t\tdocumentation: vscode.l10n.t(\"Map all files matching the glob pattern in their filename to the language with the given identifier.\"),\n\t\t\t\t\tsnippet: location.isAtPropertyKey ? '\"*.${1:extension}\": \"${2:language}\"' : '{ \"*.${1:extension}\": \"${2:language}\" }',\n\t\t\t\t\trange\n\t\t\t\t}));\n\n\t\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\t\tlabel: vscode.l10n.t(\"Files with Path\"),\n\t\t\t\t\tdocumentation: vscode.l10n.t(\"Map all files matching the absolute path glob pattern in their path to the language with the given identifier.\"),\n\t\t\t\t\tsnippet: location.isAtPropertyKey ? '\"/${1:path to file}/*.${2:extension}\": \"${3:language}\"' : '{ \"/${1:path to file}/*.${2:extension}\": \"${3:language}\" }',\n\t\t\t\t\trange\n\t\t\t\t}));\n\t\t\t} else if (this.isCompletingPropertyValue(location, position)) {\n\t\t\t\t// Value\n\t\t\t\treturn this.provideLanguageCompletionItemsForLanguageOverrides(this.getReplaceRange(location, position));\n\t\t\t}\n\t\t}\n\n\t\treturn completions;\n\t}\n\n\tprivate async provideExcludeCompletionItems(location: Location, position: vscode.Position): Promise<vscode.CompletionItem[]> {\n\t\tconst completions: vscode.CompletionItem[] = [];\n\n\t\t// Key\n\t\tif (location.path.length === 1 || (location.path.length === 2 && location.path[1] === '')) {\n\t\t\tconst range = this.getReplaceRange(location, position);\n\n\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Files by Extension\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Match all files of a specific file extension.\"),\n\t\t\t\tsnippet: location.path.length === 2 ? '\"**/*.${1:extension}\": true' : '{ \"**/*.${1:extension}\": true }',\n\t\t\t\trange\n\t\t\t}));\n\n\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Files with Multiple Extensions\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Match all files with any of the file extensions.\"),\n\t\t\t\tsnippet: location.path.length === 2 ? '\"**/*.{ext1,ext2,ext3}\": true' : '{ \"**/*.{ext1,ext2,ext3}\": true }',\n\t\t\t\trange\n\t\t\t}));\n\n\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Files with Siblings by Name\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Match files that have siblings with the same name but a different extension.\"),\n\t\t\t\tsnippet: location.path.length === 2 ? '\"**/*.${1:source-extension}\": { \"when\": \"$(basename).${2:target-extension}\" }' : '{ \"**/*.${1:source-extension}\": { \"when\": \"$(basename).${2:target-extension}\" } }',\n\t\t\t\trange\n\t\t\t}));\n\n\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Folder by Name (Top Level)\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Match a top level folder with a specific name.\"),\n\t\t\t\tsnippet: location.path.length === 2 ? '\"${1:name}\": true' : '{ \"${1:name}\": true }',\n\t\t\t\trange\n\t\t\t}));\n\n\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Folders with Multiple Names (Top Level)\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Match multiple top level folders.\"),\n\t\t\t\tsnippet: location.path.length === 2 ? '\"{folder1,folder2,folder3}\": true' : '{ \"{folder1,folder2,folder3}\": true }',\n\t\t\t\trange\n\t\t\t}));\n\n\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Folder by Name (Any Location)\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Match a folder with a specific name in any location.\"),\n\t\t\t\tsnippet: location.path.length === 2 ? '\"**/${1:name}\": true' : '{ \"**/${1:name}\": true }',\n\t\t\t\trange\n\t\t\t}));\n\t\t}\n\n\t\t// Value\n\t\telse if (location.path.length === 2 && this.isCompletingPropertyValue(location, position)) {\n\t\t\tconst range = this.getReplaceRange(location, position);\n\t\t\tcompletions.push(this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Files with Siblings by Name\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Match files that have siblings with the same name but a different extension.\"),\n\t\t\t\tsnippet: '{ \"when\": \"$(basename).${1:extension}\" }',\n\t\t\t\trange\n\t\t\t}));\n\t\t}\n\n\t\treturn completions;\n\t}\n\n\tprivate async provideLanguageCompletionItems(location: Location, position: vscode.Position): Promise<vscode.CompletionItem[]> {\n\t\tif (location.path.length === 1 && this.isCompletingPropertyValue(location, position)) {\n\t\t\tconst range = this.getReplaceRange(location, position);\n\t\t\tconst languages = await vscode.languages.getLanguages();\n\t\t\treturn [\n\t\t\t\tthis.newSimpleCompletionItem(JSON.stringify('${activeEditorLanguage}'), range, vscode.l10n.t(\"Use the language of the currently active text editor if any\")),\n\t\t\t\t...languages.map(l => this.newSimpleCompletionItem(JSON.stringify(l), range))\n\t\t\t];\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate async provideLanguageCompletionItemsForLanguageOverrides(range: vscode.Range): Promise<vscode.CompletionItem[]> {\n\t\tconst languages = await vscode.languages.getLanguages();\n\t\tconst completionItems = [];\n\t\tfor (const language of languages) {\n\t\t\tconst item = new vscode.CompletionItem(JSON.stringify(language));\n\t\t\titem.kind = vscode.CompletionItemKind.Property;\n\t\t\titem.range = range;\n\t\t\tcompletionItems.push(item);\n\t\t}\n\t\treturn completionItems;\n\t}\n\n\tprivate async provideLanguageOverridesCompletionItems(location: Location, position: vscode.Position): Promise<vscode.CompletionItem[]> {\n\t\tif (location.path.length === 1 && location.isAtPropertyKey && location.previousNode && typeof location.previousNode.value === 'string' && location.previousNode.value.startsWith('[')) {\n\t\t\tconst startPosition = this.document.positionAt(location.previousNode.offset + 1);\n\t\t\tconst endPosition = startPosition.translate(undefined, location.previousNode.value.length);\n\t\t\tconst donotSuggestLanguages: string[] = [];\n\t\t\tconst languageOverridesRanges: vscode.Range[] = [];\n\t\t\tlet matches = OVERRIDE_IDENTIFIER_REGEX.exec(location.previousNode.value);\n\t\t\tlet lastLanguageOverrideRange: vscode.Range | undefined;\n\t\t\twhile (matches?.length) {\n\t\t\t\tlastLanguageOverrideRange = new vscode.Range(this.document.positionAt(location.previousNode.offset + 1 + matches.index), this.document.positionAt(location.previousNode.offset + 1 + matches.index + matches[0].length));\n\t\t\t\tlanguageOverridesRanges.push(lastLanguageOverrideRange);\n\t\t\t\t/* Suggest the configured language if the position is in the match range */\n\t\t\t\tif (!lastLanguageOverrideRange.contains(position)) {\n\t\t\t\t\tdonotSuggestLanguages.push(matches[1].trim());\n\t\t\t\t}\n\t\t\t\tmatches = OVERRIDE_IDENTIFIER_REGEX.exec(location.previousNode.value);\n\t\t\t}\n\t\t\tconst lastLanguageOverrideEndPosition = lastLanguageOverrideRange ? lastLanguageOverrideRange.end : startPosition;\n\t\t\tif (lastLanguageOverrideEndPosition.isBefore(endPosition)) {\n\t\t\t\tlanguageOverridesRanges.push(new vscode.Range(lastLanguageOverrideEndPosition, endPosition));\n\t\t\t}\n\t\t\tconst languageOverrideRange = languageOverridesRanges.find(range => range.contains(position));\n\n\t\t\t/**\n\t\t\t *  Skip if suggestions are for first language override range\n\t\t\t *  Since VSCode registers language overrides to the schema, JSON language server does suggestions for first language override.\n\t\t\t */\n\t\t\tif (languageOverrideRange && !languageOverrideRange.isEqual(languageOverridesRanges[0])) {\n\t\t\t\tconst languages = await vscode.languages.getLanguages();\n\t\t\t\tconst completionItems = [];\n\t\t\t\tfor (const language of languages) {\n\t\t\t\t\tif (!donotSuggestLanguages.includes(language)) {\n\t\t\t\t\t\tconst item = new vscode.CompletionItem(`[${language}]`);\n\t\t\t\t\t\titem.kind = vscode.CompletionItemKind.Property;\n\t\t\t\t\t\titem.range = languageOverrideRange;\n\t\t\t\t\t\tcompletionItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn completionItems;\n\t\t\t}\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate providePortsAttributesCompletionItem(range: vscode.Range): vscode.CompletionItem[] {\n\t\treturn [this.newSnippetCompletionItem(\n\t\t\t{\n\t\t\t\tlabel: '\\\"3000\\\"',\n\t\t\t\tdocumentation: 'Single Port Attribute',\n\t\t\t\trange,\n\t\t\t\tsnippet: '\\n  \\\"${1:3000}\\\": {\\n    \\\"label\\\": \\\"${2:Application}\\\",\\n    \\\"onAutoForward\\\": \\\"${3:openPreview}\\\"\\n  }\\n'\n\t\t\t}),\n\t\tthis.newSnippetCompletionItem(\n\t\t\t{\n\t\t\t\tlabel: '\\\"5000-6000\\\"',\n\t\t\t\tdocumentation: 'Ranged Port Attribute',\n\t\t\t\trange,\n\t\t\t\tsnippet: '\\n  \\\"${1:40000-55000}\\\": {\\n    \\\"onAutoForward\\\": \\\"${2:ignore}\\\"\\n  }\\n'\n\t\t\t}),\n\t\tthis.newSnippetCompletionItem(\n\t\t\t{\n\t\t\t\tlabel: '\\\".+\\\\\\\\/server.js\\\"',\n\t\t\t\tdocumentation: 'Command Match Port Attribute',\n\t\t\t\trange,\n\t\t\t\tsnippet: '\\n  \\\"${1:.+\\\\\\\\/server.js\\}\\\": {\\n    \\\"label\\\": \\\"${2:Application}\\\",\\n    \\\"onAutoForward\\\": \\\"${3:openPreview}\\\"\\n  }\\n'\n\t\t\t})\n\t\t];\n\t}\n\n\tprivate newSimpleCompletionItem(text: string, range: vscode.Range, description?: string, insertText?: string): vscode.CompletionItem {\n\t\tconst item = new vscode.CompletionItem(text);\n\t\titem.kind = vscode.CompletionItemKind.Value;\n\t\titem.detail = description;\n\t\titem.insertText = insertText ? insertText : text;\n\t\titem.range = range;\n\t\treturn item;\n\t}\n\n\tprivate newSnippetCompletionItem(o: { label: string; documentation?: string; snippet: string; range: vscode.Range }): vscode.CompletionItem {\n\t\tconst item = new vscode.CompletionItem(o.label);\n\t\titem.kind = vscode.CompletionItemKind.Value;\n\t\titem.documentation = o.documentation;\n\t\titem.insertText = new vscode.SnippetString(o.snippet);\n\t\titem.range = o.range;\n\t\treturn item;\n\t}\n}\n"
  },
  {
    "path": "extensions/configuration-editing/src/test/completion.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as assert from 'assert';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport 'mocha';\n\n\nconst testFolder = fs.mkdtemp(path.join(os.tmpdir(), 'conf-editing-'));\n\nsuite('Completions in settings.json', () => {\n\tconst testFile = 'settings.json';\n\n\ttest('window.title', async () => {\n\t\t{ // inserting after text\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"custom|\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"custom${activeEditorShort}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${activeEditorShort}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\t// inserting before a variable\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"|${activeEditorShort}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${folderPath}${activeEditorShort}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${folderPath}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\t// inserting after a variable\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${activeEditorShort}|\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${activeEditorShort}${folderPath}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${folderPath}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{ // replacing an variable\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${a|ctiveEditorShort}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${activeEditorMedium}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${activeEditorMedium}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{ // replacing a partial variable\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${a|\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${dirty}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${dirty}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{ // inserting a literal\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": |',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${activeEditorMedium}\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '\"${activeEditorMedium}\"', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{ // no proposals after literal\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"window.title\": \"${activeEditorShort}\"   |',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${activeEditorMedium}', notAvailable: true };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n\n\ttest('files.associations', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    |',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    \"*.${1:extension}\": \"${2:language}\"',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'Files with Extension', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    |',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    \"/${1:path to file}/*.${2:extension}\": \"${3:language}\"',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'Files with Path', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    \"*.extension\": \"|bat\"',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    \"*.extension\": \"json\"',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '\"json\"', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    \"*.extension\": \"bat\"|',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    \"*.extension\": \"json\"',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '\"json\"', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.associations\": {',\n\t\t\t\t'    \"*.extension\": \"bat\"  |',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '\"json\"', notAvailable: true };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n\ttest('files.exclude', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.exclude\": {',\n\t\t\t\t'    |',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.exclude\": {',\n\t\t\t\t'    \"**/*.${1:extension}\": true',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'Files by Extension', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.exclude\": {',\n\t\t\t\t'    \"**/*.extension\": |true',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.exclude\": {',\n\t\t\t\t'    \"**/*.extension\": { \"when\": \"$(basename).${1:extension}\" }',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'Files with Siblings by Name', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n\ttest('files.defaultLanguage', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.defaultLanguage\": \"json|\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.defaultLanguage\": \"jsonc\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '\"jsonc\"', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.defaultLanguage\": |',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"files.defaultLanguage\": \"jsonc\"',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '\"jsonc\"', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n\ttest('remote.extensionKind', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'\\t\"remote.extensionKind\": {',\n\t\t\t\t'\\t\\t|',\n\t\t\t\t'\\t}',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'vscode.npm' };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n\ttest('remote.portsAttributes', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"remote.portsAttributes\": {',\n\t\t\t\t'    |',\n\t\t\t\t'  }',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '\"3000\"' };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n});\n\nsuite('Completions in extensions.json', () => {\n\tconst testFile = 'extensions.json';\n\ttest('change recommendation', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"recommendations\": [',\n\t\t\t\t'    \"|a.b\"',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"recommendations\": [',\n\t\t\t\t'    \"ms-vscode.js-debug\"',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'ms-vscode.js-debug', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n\ttest('add recommendation', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"recommendations\": [',\n\t\t\t\t'    |',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"recommendations\": [',\n\t\t\t\t'    \"ms-vscode.js-debug\"',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'ms-vscode.js-debug', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n});\n\nsuite('Completions in launch.json', () => {\n\tconst testFile = 'launch.json';\n\ttest('variable completions', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"configurations\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"name\": \"Run Extension\",',\n\t\t\t\t'      \"type\": \"extensionHost\",',\n\t\t\t\t'      \"preLaunchTask\": \"${|defaultBuildTask}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"configurations\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"name\": \"Run Extension\",',\n\t\t\t\t'      \"type\": \"extensionHost\",',\n\t\t\t\t'      \"preLaunchTask\": \"${cwd}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${cwd}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"configurations\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"name\": \"Run Extension\",',\n\t\t\t\t'      \"type\": \"extensionHost\",',\n\t\t\t\t'      \"preLaunchTask\": \"|${defaultBuildTask}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"configurations\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"name\": \"Run Extension\",',\n\t\t\t\t'      \"type\": \"extensionHost\",',\n\t\t\t\t'      \"preLaunchTask\": \"${cwd}${defaultBuildTask}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${cwd}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"configurations\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"name\": \"Do It\",',\n\t\t\t\t'      \"program\": \"${workspace|\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"configurations\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"name\": \"Do It\",',\n\t\t\t\t'      \"program\": \"${cwd}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${cwd}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n});\n\nsuite('Completions in tasks.json', () => {\n\tconst testFile = 'tasks.json';\n\ttest('variable completions', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"tasks\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"type\": \"shell\",',\n\t\t\t\t'      \"command\": \"${|defaultBuildTask}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"tasks\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"type\": \"shell\",',\n\t\t\t\t'      \"command\": \"${cwd}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${cwd}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"tasks\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"type\": \"shell\",',\n\t\t\t\t'      \"command\": \"${defaultBuildTask}|\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'{',\n\t\t\t\t'  \"version\": \"0.2.0\",',\n\t\t\t\t'  \"tasks\": [',\n\t\t\t\t'    {',\n\t\t\t\t'      \"type\": \"shell\",',\n\t\t\t\t'      \"command\": \"${defaultBuildTask}${cwd}\"',\n\t\t\t\t'    }',\n\t\t\t\t'  ]',\n\t\t\t\t'}',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: '${cwd}', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n});\n\nsuite('Completions in keybindings.json', () => {\n\tconst testFile = 'keybindings.json';\n\ttest('context key insertion', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'[',\n\t\t\t\t'  {',\n\t\t\t\t'    \"key\": \"ctrl+k ctrl+,\",',\n\t\t\t\t'    \"command\": \"editor.jumpToNextFold\",',\n\t\t\t\t'    \"when\": \"|\"',\n\t\t\t\t'  }',\n\t\t\t\t']',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'[',\n\t\t\t\t'  {',\n\t\t\t\t'    \"key\": \"ctrl+k ctrl+,\",',\n\t\t\t\t'    \"command\": \"editor.jumpToNextFold\",',\n\t\t\t\t'    \"when\": \"resourcePath\"',\n\t\t\t\t'  }',\n\t\t\t\t']',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'resourcePath', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n\n\ttest('context key replace', async () => {\n\t\t{\n\t\t\tconst content = [\n\t\t\t\t'[',\n\t\t\t\t'  {',\n\t\t\t\t'    \"key\": \"ctrl+k ctrl+,\",',\n\t\t\t\t'    \"command\": \"editor.jumpToNextFold\",',\n\t\t\t\t'    \"when\": \"resou|rcePath\"',\n\t\t\t\t'  }',\n\t\t\t\t']',\n\t\t\t].join('\\n');\n\t\t\tconst resultText = [\n\t\t\t\t'[',\n\t\t\t\t'  {',\n\t\t\t\t'    \"key\": \"ctrl+k ctrl+,\",',\n\t\t\t\t'    \"command\": \"editor.jumpToNextFold\",',\n\t\t\t\t'    \"when\": \"resource\"',\n\t\t\t\t'  }',\n\t\t\t\t']',\n\t\t\t].join('\\n');\n\t\t\tconst expected = { label: 'resource', resultText };\n\t\t\tawait testCompletion(testFile, 'jsonc', content, expected);\n\t\t}\n\t});\n});\n\ninterface ItemDescription {\n\tlabel: string;\n\tresultText?: string;\n\tnotAvailable?: boolean;\n}\n\nasync function testCompletion(testFileName: string, languageId: string, content: string, expected: ItemDescription) {\n\n\tconst offset = content.indexOf('|');\n\tcontent = content.substring(0, offset) + content.substring(offset + 1);\n\n\tconst docUri = vscode.Uri.file(path.join(await testFolder, testFileName));\n\tawait fs.writeFile(docUri.fsPath, content);\n\n\tconst editor = await setTestContent(docUri, languageId, content);\n\tconst position = editor.document.positionAt(offset);\n\n\t// Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion\n\tconst actualCompletions = (await vscode.commands.executeCommand('vscode.executeCompletionItemProvider', docUri, position)) as vscode.CompletionList;\n\n\tconst matches = actualCompletions.items.filter(completion => {\n\t\treturn completion.label === expected.label;\n\t});\n\tif (expected.notAvailable) {\n\t\tassert.strictEqual(matches.length, 0, `${expected.label} should not existing is results`);\n\t} else {\n\t\tassert.strictEqual(matches.length, 1, `${expected.label} should only existing once: Actual: ${actualCompletions.items.map(c => c.label).join(', ')}`);\n\n\t\tif (expected.resultText) {\n\t\t\tconst match = matches[0];\n\t\t\tif (match.range && match.insertText) {\n\t\t\t\tconst range = match.range instanceof vscode.Range ? match.range : match.range.replacing;\n\t\t\t\tconst text = typeof match.insertText === 'string' ? match.insertText : match.insertText.value;\n\n\t\t\t\tawait editor.edit(eb => eb.replace(range, text));\n\t\t\t\tassert.strictEqual(editor.document.getText(), expected.resultText);\n\t\t\t} else {\n\t\t\t\tassert.fail(`Range or insertText missing`);\n\t\t\t}\n\t\t}\n\t}\n}\n\nasync function setTestContent(docUri: vscode.Uri, languageId: string, content: string): Promise<vscode.TextEditor> {\n\tconst ext = vscode.extensions.getExtension('vscode.configuration-editing')!;\n\tawait ext.activate();\n\n\tconst doc = await vscode.workspace.openTextDocument(docUri);\n\tawait vscode.languages.setTextDocumentLanguage(doc, languageId);\n\tconst editor = await vscode.window.showTextDocument(doc);\n\n\tconst fullRange = new vscode.Range(new vscode.Position(0, 0), doc.positionAt(doc.getText().length));\n\tawait editor.edit(eb => eb.replace(fullRange, content));\n\treturn editor;\n\n}\n"
  },
  {
    "path": "extensions/configuration-editing/src/test/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as testRunner from '../../../../test/integration/electron/testrunner';\n\nconst options: import('mocha').MochaOptions = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\n// These integration tests is being run in multiple environments (electron, web, remote)\n// so we need to set the suite name based on the environment as the suite name is used\n// for the test results file name\nlet suite = '';\nif (process.env.VSCODE_BROWSER) {\n\tsuite = `${process.env.VSCODE_BROWSER} Browser Integration Configuration-Editing Tests`;\n} else if (process.env.REMOTE_VSCODE) {\n\tsuite = 'Remote Integration Configuration-Editing Tests';\n} else {\n\tsuite = 'Integration Configuration-Editing Tests';\n}\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\ntestRunner.configure(options);\n\nexport = testRunner;\n"
  },
  {
    "path": "extensions/configuration-editing/src/typings/ref.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ndeclare module 'tunnel';\n"
  },
  {
    "path": "extensions/configuration-editing/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.profileContentHandlers.d.ts\",\n\t]\n}\n"
  },
  {
    "path": "extensions/cpp/.vscodeignore",
    "content": "build/**\ntest/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/cpp/build/update-grammars.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nvar updateGrammar = require('vscode-grammar-updater');\n\nasync function updateGrammars() {\n\tawait updateGrammar.update('jeff-hykin/better-c-syntax', 'autogenerated/c.tmLanguage.json', './syntaxes/c.tmLanguage.json', undefined, 'master');\n\t\n\t// The license has changed for these two grammar. We have to freeze them as the new license is not compatible with our license.\n\t// await updateGrammar.update('jeff-hykin/better-cpp-syntax', 'autogenerated/cpp.tmLanguage.json', './syntaxes/cpp.tmLanguage.json', undefined, 'master');\n\t// await updateGrammar.update('jeff-hykin/better-cpp-syntax', 'autogenerated/cpp.embedded.macro.tmLanguage.json', './syntaxes/cpp.embedded.macro.tmLanguage.json', undefined, 'master');\n\n\tawait updateGrammar.update('NVIDIA/cuda-cpp-grammar', 'syntaxes/cuda-cpp.tmLanguage.json', './syntaxes/cuda-cpp.tmLanguage.json', undefined, 'master');\n\n\t// `source.c.platform` which is still included by other grammars\n\tawait updateGrammar.update('textmate/c.tmbundle', 'Syntaxes/Platform.tmLanguage', './syntaxes/platform.tmLanguage.json');\n}\n\nupdateGrammars();\n\n"
  },
  {
    "path": "extensions/cpp/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jeff-hykin/better-cpp-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jeff-hykin/better-cpp-syntax\",\n\t\t\t\t\t\"commitHash\": \"f1d127a8af2b184db570345f0bb179503c47fdf6\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t[\n\t\t\t\t\t\"MIT License\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Copyright (c) 2019 Jeff Hykin\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\t\t\"SOFTWARE.\"\n\t\t\t\t]\n\t\t\t],\n\t\t\t\"version\": \"1.17.4\",\n\t\t\t\"description\": \"The original JSON grammars were derived from https://github.com/atom/language-c which was originally converted from the C TextMate bundle https://github.com/textmate/c.tmbundle.\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jeff-hykin/better-c-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jeff-hykin/better-c-syntax\",\n\t\t\t\t\t\"commitHash\": \"34712a6106a4ffb0a04d2fa836fd28ff6c5849a4\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.13.2\",\n\t\t\t\"description\": \"The original JSON grammars were derived from https://github.com/atom/language-c which was originally converted from the C TextMate bundle https://github.com/textmate/c.tmbundle.\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/c.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/c.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"60daf83b9d45329524f7847a75e9298b3aae5805\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-c.tmbundle authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"NVIDIA/cuda-cpp-grammar\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/NVIDIA/cuda-cpp-grammar\",\n\t\t\t\t\t\"commitHash\": \"81e88eaec5170aa8585736c63627c73e3589998c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.0.0\",\n\t\t\t\"description\": \"The file syntaxes/cuda-cpp.tmLanguage.json was derived from https://github.com/jeff-hykin/cpp-textmate-grammar, which was derived from https://github.com/atom/language-c, which was originally converted from the C TextMate bundle https://github.com/textmate/c.tmbundle.\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/cpp/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"/*\",\n\t\t\t\"close\": \"*/\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"/**\",\n\t\t\t\"close\": \" */\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t]\n\t],\n\t\"wordPattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\!\\\\@\\\\#\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>\\\\/\\\\?\\\\s]+)\",\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#pragma\\\\s+region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*#pragma\\\\s+endregion\\\\b\"\n\t\t}\n\t},\n\t\"indentationRules\": {\n\t\t\"decreaseIndentPattern\": {\n\t\t\t\"pattern\": \"^\\\\s*[\\\\}\\\\]\\\\)].*$\"\n\t\t},\n\t\t\"increaseIndentPattern\": {\n\t\t\t\"pattern\": \"^.*(\\\\{[^}]*|\\\\([^)]*|\\\\[[^\\\\]]*)$\"\n\t\t},\n\t},\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t// Decrease indentation after single line if/else if/else, for, or while\n\t\t\t\"previousLineText\": \"^\\\\s*(((else ?)?if|for|while)\\\\s*\\\\(.*\\\\)\\\\s*|else\\\\s*)$\",\n\t\t\t// But make sure line doesn't have braces or is not another if statement\n\t\t\t\"beforeText\": \"^\\\\s+([^{i\\\\s]|i(?!f\\\\b))\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"outdent\"\n\t\t\t}\n\t\t},\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/cpp/package.json",
    "content": "{\n  \"name\": \"cpp\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammars.js\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"c\",\n        \"extensions\": [\n          \".c\",\n          \".i\"\n        ],\n        \"aliases\": [\n          \"C\",\n          \"c\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      },\n      {\n        \"id\": \"cpp\",\n        \"extensions\": [\n          \".cpp\",\n          \".cppm\",\n          \".cc\",\n          \".ccm\",\n          \".cxx\",\n          \".cxxm\",\n          \".c++\",\n          \".c++m\",\n          \".hpp\",\n          \".hh\",\n          \".hxx\",\n          \".h++\",\n          \".h\",\n          \".ii\",\n          \".ino\",\n          \".inl\",\n          \".ipp\",\n          \".ixx\",\n          \".tpp\",\n          \".txx\",\n          \".hpp.in\",\n          \".h.in\"\n        ],\n        \"aliases\": [\n          \"C++\",\n          \"Cpp\",\n          \"cpp\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      },\n      {\n        \"id\": \"cuda-cpp\",\n        \"extensions\": [\n          \".cu\",\n          \".cuh\"\n        ],\n        \"aliases\": [\n          \"CUDA C++\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"c\",\n        \"scopeName\": \"source.c\",\n        \"path\": \"./syntaxes/c.tmLanguage.json\"\n      },\n      {\n        \"language\": \"cpp\",\n        \"scopeName\": \"source.cpp.embedded.macro\",\n        \"path\": \"./syntaxes/cpp.embedded.macro.tmLanguage.json\"\n      },\n      {\n        \"language\": \"cpp\",\n        \"scopeName\": \"source.cpp\",\n        \"path\": \"./syntaxes/cpp.tmLanguage.json\"\n      },\n      {\n        \"scopeName\": \"source.c.platform\",\n        \"path\": \"./syntaxes/platform.tmLanguage.json\"\n      },\n      {\n        \"language\": \"cuda-cpp\",\n        \"scopeName\": \"source.cuda-cpp\",\n        \"path\": \"./syntaxes/cuda-cpp.tmLanguage.json\"\n      }\n    ],\n    \"problemPatterns\": [\n      {\n        \"name\": \"nvcc-location\",\n        \"regexp\": \"^(.*)\\\\((\\\\d+)\\\\):\\\\s+(warning|error):\\\\s+(.*)\",\n        \"kind\": \"location\",\n        \"file\": 1,\n        \"location\": 2,\n        \"severity\": 3,\n        \"message\": 4\n      }\n    ],\n    \"problemMatchers\": [\n        {\n            \"name\": \"nvcc\",\n            \"owner\": \"cuda-cpp\",\n            \"fileLocation\": [\n                \"relative\",\n                \"${workspaceFolder}\"\n            ],\n            \"pattern\": \"$nvcc-location\"\n        }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"c\",\n        \"path\": \"./snippets/c.code-snippets\"\n      },\n      {\n        \"language\": \"cpp\",\n        \"path\": \"./snippets/cpp.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/cpp/package.nls.json",
    "content": "{\n\t\"displayName\": \"C/C++ Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in C/C++ files.\"\n}\n"
  },
  {
    "path": "extensions/cpp/snippets/c.code-snippets",
    "content": "{\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"#pragma region $0\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"#pragma endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t}\n}\n"
  },
  {
    "path": "extensions/cpp/snippets/cpp.code-snippets",
    "content": "{\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"#pragma region $0\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"#pragma endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t}\n}\n"
  },
  {
    "path": "extensions/cpp/syntaxes/c.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jeff-hykin/better-c-syntax/blob/master/autogenerated/c.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jeff-hykin/better-c-syntax/commit/34712a6106a4ffb0a04d2fa836fd28ff6c5849a4\",\n\t\"name\": \"C\",\n\t\"scopeName\": \"source.c\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#preprocessor-rule-enabled\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#preprocessor-rule-disabled\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#preprocessor-rule-conditional\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#predefined_macros\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#switch_statement\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_1\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#storage_types\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_2\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_3\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_4\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_5\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_6\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_7\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operators\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#numbers\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_1\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_2\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_3\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#pragma-mark\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_4\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_5\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_6\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_8\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_9\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_10\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_11\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_12\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_13\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#parens\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_7\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#line_continuation_character\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_8\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_range_9\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_14\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anon_pattern_15\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"access-method\": {\n\t\t\t\"name\": \"meta.function-call.member.c\",\n\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))\\\\s*(?:(\\\\.)|(->))((?:(?:[a-zA-Z_][a-zA-Z_0-9]*)\\\\s*(?:(?:\\\\.)|(?:->)))*)\\\\s*([a-zA-Z_][a-zA-Z_0-9]*)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.object.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"->\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_][a-zA-Z_0-9]*\",\n\t\t\t\t\t\t\t\"name\": \"variable.object.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"everything.else.c\",\n\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.member.c\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_1\": {\n\t\t\t\"match\": \"\\\\b(break|continue|do|else|for|goto|if|_Pragma|return|while)\\\\b\",\n\t\t\t\"name\": \"keyword.control.c\"\n\t\t},\n\t\t\"anon_pattern_10\": {\n\t\t\t\"match\": \"(?x) \\\\b\\n(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t\\n|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t\\n|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t\\n|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t\\n|uintmax_t|uintmax_t)\\n\\\\b\",\n\t\t\t\"name\": \"support.type.stdint.c\"\n\t\t},\n\t\t\"anon_pattern_11\": {\n\t\t\t\"match\": \"\\\\b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\\\\b\",\n\t\t\t\"name\": \"support.constant.mac-classic.c\"\n\t\t},\n\t\t\"anon_pattern_12\": {\n\t\t\t\"match\": \"(?x) \\\\b\\n(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam\\n|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr\\n|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber\\n|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64\\n|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32\\n|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr\\n|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\\n\\\\b\",\n\t\t\t\"name\": \"support.type.mac-classic.c\"\n\t\t},\n\t\t\"anon_pattern_13\": {\n\t\t\t\"match\": \"\\\\b([A-Za-z0-9_]+_t)\\\\b\",\n\t\t\t\"name\": \"support.type.posix-reserved.c\"\n\t\t},\n\t\t\"anon_pattern_14\": {\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.statement.c\"\n\t\t},\n\t\t\"anon_pattern_15\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.c\"\n\t\t},\n\t\t\"anon_pattern_2\": {\n\t\t\t\"match\": \"typedef\",\n\t\t\t\"name\": \"keyword.other.typedef.c\"\n\t\t},\n\t\t\"anon_pattern_3\": {\n\t\t\t\"match\": \"\\\\b(const|extern|register|restrict|static|volatile|inline)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.c\"\n\t\t},\n\t\t\"anon_pattern_4\": {\n\t\t\t\"match\": \"\\\\bk[A-Z]\\\\w*\\\\b\",\n\t\t\t\"name\": \"constant.other.variable.mac-classic.c\"\n\t\t},\n\t\t\"anon_pattern_5\": {\n\t\t\t\"match\": \"\\\\bg[A-Z]\\\\w*\\\\b\",\n\t\t\t\"name\": \"variable.other.readwrite.global.mac-classic.c\"\n\t\t},\n\t\t\"anon_pattern_6\": {\n\t\t\t\"match\": \"\\\\bs[A-Z]\\\\w*\\\\b\",\n\t\t\t\"name\": \"variable.other.readwrite.static.mac-classic.c\"\n\t\t},\n\t\t\"anon_pattern_7\": {\n\t\t\t\"match\": \"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b\",\n\t\t\t\"name\": \"constant.language.c\"\n\t\t},\n\t\t\"anon_pattern_8\": {\n\t\t\t\"match\": \"\\\\b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\\\\b\",\n\t\t\t\"name\": \"support.type.sys-types.c\"\n\t\t},\n\t\t\"anon_pattern_9\": {\n\t\t\t\"match\": \"\\\\b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\\\\b\",\n\t\t\t\"name\": \"support.type.pthread.c\"\n\t\t},\n\t\t\"anon_pattern_range_1\": {\n\t\t\t\"name\": \"meta.preprocessor.macro.c\",\n\t\t\t\"begin\": \"((?:(?:(?>\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((#)\\\\s*define\\\\b)\\\\s+((?<!\\\\w)[a-zA-Z_]\\\\w*(?!\\\\w))(?:(\\\\()([^()\\\\\\\\]+)(\\\\)))?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.define.c\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[(,])\\\\s*((?<!\\\\w)[a-zA-Z_]\\\\w*(?!\\\\w))\\\\s*\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"ellipses.c punctuation.vararg-ellipses.variable.parameter.preprocessor.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_2\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(error|warning))\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$3.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"name\": \"meta.preprocessor.diagnostic.c\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"name\": \"string.unquoted.single.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_3\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(include(?:_next)?|import))\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.$3.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"name\": \"meta.preprocessor.include.c\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.include.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.c\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_4\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*line)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.line.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_5\": {\n\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*undef))\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.undef.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_6\": {\n\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*pragma))\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"name\": \"meta.preprocessor.pragma.c\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_7\": {\n\t\t\t\"name\": \"meta.function.c\",\n\t\t\t\"begin\": \"(?<!\\\\w)(?!\\\\s*(?:atomic_uint_least64_t|atomic_uint_least16_t|atomic_uint_least32_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_fast64_t|atomic_uint_fast32_t|atomic_int_least64_t|atomic_int_least32_t|pthread_rwlockattr_t|atomic_uint_fast16_t|pthread_mutexattr_t|atomic_int_fast16_t|atomic_uint_fast8_t|atomic_int_fast64_t|atomic_int_least8_t|atomic_int_fast32_t|atomic_int_fast8_t|pthread_condattr_t|pthread_rwlock_t|atomic_uintptr_t|atomic_ptrdiff_t|atomic_uintmax_t|atomic_intmax_t|atomic_char32_t|atomic_intptr_t|atomic_char16_t|pthread_mutex_t|pthread_cond_t|atomic_wchar_t|uint_least64_t|uint_least32_t|uint_least16_t|pthread_once_t|pthread_attr_t|uint_least8_t|int_least32_t|int_least16_t|pthread_key_t|uint_fast32_t|uint_fast64_t|uint_fast16_t|atomic_size_t|atomic_ushort|atomic_ullong|int_least64_t|atomic_ulong|int_least8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|memory_order|atomic_schar|atomic_uchar|atomic_short|atomic_llong|thread_local|atomic_bool|atomic_uint|atomic_long|int_fast8_t|suseconds_t|atomic_char|atomic_int|useconds_t|_Imaginary|uintmax_t|uintmax_t|in_addr_t|in_port_t|_Noreturn|blksize_t|pthread_t|uintptr_t|volatile|u_quad_t|blkcnt_t|intmax_t|intptr_t|_Complex|uint16_t|uint32_t|uint64_t|_Alignof|_Alignas|continue|unsigned|restrict|intmax_t|register|int64_t|qaddr_t|segsz_t|_Atomic|alignas|default|caddr_t|nlink_t|typedef|u_short|fixpt_t|clock_t|swblk_t|ssize_t|alignof|daddr_t|int16_t|int32_t|uint8_t|struct|mode_t|size_t|time_t|ushort|u_long|u_char|int8_t|double|signed|static|extern|inline|return|switch|xor_eq|and_eq|bitand|not_eq|sizeof|quad_t|uid_t|bitor|union|off_t|key_t|ino_t|compl|u_int|short|const|false|while|float|pid_t|break|_Bool|or_eq|div_t|dev_t|gid_t|id_t|long|case|goto|else|bool|auto|id_t|enum|uint|true|NULL|void|char|for|not|int|and|xor|do|or|if)\\\\s*\\\\()(?=[a-zA-Z_]\\\\w*\\\\s*\\\\()\",\n\t\t\t\"end\": \"(?!\\\\G)(?<=\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_8\": {\n\t\t\t\"name\": \"meta.bracket.square.access.c\",\n\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.object.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anon_pattern_range_9\": {\n\t\t\t\"name\": \"storage.modifier.array.bracket.square.c\",\n\t\t\t\"match\": \"\\\\[\\\\s*\\\\]\"\n\t\t},\n\t\t\"backslash_escapes\": {\n\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\"name\": \"constant.character.escape.c\"\n\t\t},\n\t\t\"block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\*)\",\n\t\t\t\t\t\"end\": \"\\\\*\\\\/\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\*)\",\n\t\t\t\t\t\"end\": \"\\\\*\\\\/\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.initialization.c\",\n\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  (?:\\n\\t(?=\\\\s)(?<!else|new|return)\\n\\t(?<=\\\\w) \\\\s+(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)  # or word + space before name\\n  )\\n)\\n(\\n  (?:[A-Za-z_][A-Za-z0-9_]*+ | :: )++   # actual name\\n  |\\n  (?:(?<=operator) (?:[-*&<>=+!]+ | \\\\(\\\\) | \\\\[\\\\]))\\n)\\n\\\\s*(\\\\() # opening bracket\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.initialization.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.initialization.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"c_conditional_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"c_function_call\": {\n\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(?=\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*\\\\(  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)\",\n\t\t\t\"name\": \"meta.function-call.c\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_statement\": {\n\t\t\t\"name\": \"meta.conditional.case.c\",\n\t\t\t\"begin\": \"((?>(?:(?:(?>(?<!\\\\s)\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))))((?<!\\\\w)case(?!\\\\w))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.case.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.documentation.c\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?:^)(?>\\\\s*)(\\\\/\\\\/[!\\\\/]+)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.documentation.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)\\\\])?\\\\s+(\\\\b\\\\w+\\\\b)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*\\\\/)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)\\\\])?\\\\s+(\\\\b\\\\w+\\\\b)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.documentation.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.documentation.c\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?>\\\\s*)\\\\/\\\\*[!*]+(?:(?:\\\\n|$)|(?=\\\\s)))\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"([!*]*\\\\*\\\\/)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)\\\\])?\\\\s+(\\\\b\\\\w+\\\\b)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"^\\\\/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*\\\\/$\\\\n?\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.block.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.banner.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"(\\\\/\\\\*)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(\\\\*\\\\/)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"^\\\\/\\\\/ =(\\\\s*.*?)\\\\s*=$\\\\n?\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.line.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.banner.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?:^[ \\\\t]+)?)(?=\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"(\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"default_statement\": {\n\t\t\t\"name\": \"meta.conditional.case.c\",\n\t\t\t\"begin\": \"((?>(?:(?:(?>(?<!\\\\s)\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))))((?<!\\\\w)default(?!\\\\w))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.default.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.default.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"disabled\": {\n\t\t\t\"begin\": \"^\\\\s*#\\\\s*if(n?def)?\\\\b.*$\",\n\t\t\t\"end\": \"^\\\\s*#\\\\s*endif\\\\b\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"evaluation_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call-innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function.definition.parameters.c\",\n\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#probably_a_parameter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\/)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"comment.line.double-slash.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\/)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"comment.line.double-slash.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_continuation_character\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\\\\\)\\\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.line-continuation.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member_access\": {\n\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:(?:\\\\.\\\\*|\\\\.))|(?:(?:->\\\\*|->)))\\\\s*)*)\\\\s*(\\\\b(?!(?:atomic_uint_least64_t|atomic_uint_least16_t|atomic_uint_least32_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_fast64_t|atomic_uint_fast32_t|atomic_int_least64_t|atomic_int_least32_t|pthread_rwlockattr_t|atomic_uint_fast16_t|pthread_mutexattr_t|atomic_int_fast16_t|atomic_uint_fast8_t|atomic_int_fast64_t|atomic_int_least8_t|atomic_int_fast32_t|atomic_int_fast8_t|pthread_condattr_t|atomic_uintptr_t|atomic_ptrdiff_t|pthread_rwlock_t|atomic_uintmax_t|pthread_mutex_t|atomic_intmax_t|atomic_intptr_t|atomic_char32_t|atomic_char16_t|pthread_attr_t|atomic_wchar_t|uint_least64_t|uint_least32_t|uint_least16_t|pthread_cond_t|pthread_once_t|uint_fast64_t|uint_fast16_t|atomic_size_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|pthread_key_t|atomic_ullong|atomic_ushort|uint_fast32_t|atomic_schar|atomic_short|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast16_t|atomic_ulong|atomic_llong|int_least8_t|atomic_uchar|memory_order|suseconds_t|int_fast8_t|atomic_bool|atomic_char|atomic_uint|atomic_long|atomic_int|useconds_t|_Imaginary|blksize_t|pthread_t|in_addr_t|uintptr_t|in_port_t|uintmax_t|uintmax_t|blkcnt_t|uint16_t|unsigned|_Complex|uint32_t|intptr_t|intmax_t|intmax_t|uint64_t|u_quad_t|int64_t|int32_t|ssize_t|caddr_t|clock_t|uint8_t|u_short|swblk_t|segsz_t|int16_t|fixpt_t|daddr_t|nlink_t|qaddr_t|size_t|time_t|mode_t|signed|quad_t|ushort|u_long|u_char|double|int8_t|ino_t|uid_t|pid_t|_Bool|float|dev_t|div_t|short|gid_t|off_t|u_int|key_t|id_t|uint|long|void|char|bool|id_t|int)\\\\b)[a-zA-Z_]\\\\w*\\\\b(?!\\\\())\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.other.member.c\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"method_access\": {\n\t\t\t\"contentName\": \"meta.function-call.member.c\",\n\t\t\t\"begin\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:(?:\\\\.\\\\*|\\\\.))|(?:(?:->\\\\*|->)))\\\\s*)*)\\\\s*([a-zA-Z_]\\\\w*)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.member.c\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numbers\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?<!')([pP])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?<!')([eE])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?<!')([pP])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?<!')([eE])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.c\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![\\\\w$])(sizeof)(?![\\\\w$])\",\n\t\t\t\t\t\"name\": \"keyword.operator.sizeof.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%=|\\\\+=|-=|\\\\*=|(?<!\\\\()/=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&=|\\\\^=|<<=|>>=|\\\\|=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<<|>>\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\"name\": \"keyword.operator.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\?)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parens\": {\n\t\t\t\"name\": \"meta.parens.c\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parens-block\": {\n\t\t\t\"name\": \"meta.parens.block.c\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?-mix:(?<!:):(?!:))\",\n\t\t\t\t\t\"name\": \"punctuation.range-based.c\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma-mark\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.pragma.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.pragma-mark.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.pragma-mark.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(((#)\\\\s*pragma\\\\s+mark)\\\\s+(.*))\",\n\t\t\t\"name\": \"meta.section.c\"\n\t\t},\n\t\t\"predefined_macros\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(__cplusplus|__DATE__|__FILE__|__LINE__|__STDC__|__STDC_HOSTED__|__STDC_NO_COMPLEX__|__STDC_VERSION__|__STDCPP_THREADS__|__TIME__|NDEBUG|__OBJC__|__ASSEMBLER__|__ATOM__|__AVX__|__AVX2__|_CHAR_UNSIGNED|__CLR_VER|_CONTROL_FLOW_GUARD|__COUNTER__|__cplusplus_cli|__cplusplus_winrt|_CPPRTTI|_CPPUNWIND|_DEBUG|_DLL|__FUNCDNAME__|__FUNCSIG__|__FUNCTION__|_INTEGRAL_MAX_BITS|__INTELLISENSE__|_ISO_VOLATILE|_KERNEL_MODE|_M_AMD64|_M_ARM|_M_ARM_ARMV7VE|_M_ARM_FP|_M_ARM64|_M_CEE|_M_CEE_PURE|_M_CEE_SAFE|_M_FP_EXCEPT|_M_FP_FAST|_M_FP_PRECISE|_M_FP_STRICT|_M_IX86|_M_IX86_FP|_M_X64|_MANAGED|_MSC_BUILD|_MSC_EXTENSIONS|_MSC_FULL_VER|_MSC_VER|_MSVC_LANG|__MSVC_RUNTIME_CHECKS|_MT|_NATIVE_WCHAR_T_DEFINED|_OPENMP|_PREFAST|__TIMESTAMP__|_VC_NO_DEFAULTLIB|_WCHAR_T_DEFINED|_WIN32|_WIN64|_WINRT_DLL|_ATL_VER|_MFC_VER|__GFORTRAN__|__GNUC__|__GNUC_MINOR__|__GNUC_PATCHLEVEL__|__GNUG__|__STRICT_ANSI__|__BASE_FILE__|__INCLUDE_LEVEL__|__ELF__|__VERSION__|__OPTIMIZE__|__OPTIMIZE_SIZE__|__NO_INLINE__|__GNUC_STDC_INLINE__|__CHAR_UNSIGNED__|__WCHAR_UNSIGNED__|__REGISTER_PREFIX__|__REGISTER_PREFIX__|__SIZE_TYPE__|__PTRDIFF_TYPE__|__WCHAR_TYPE__|__WINT_TYPE__|__INTMAX_TYPE__|__UINTMAX_TYPE__|__SIG_ATOMIC_TYPE__|__INT8_TYPE__|__INT16_TYPE__|__INT32_TYPE__|__INT64_TYPE__|__UINT8_TYPE__|__UINT16_TYPE__|__UINT32_TYPE__|__UINT64_TYPE__|__INT_LEAST8_TYPE__|__INT_LEAST16_TYPE__|__INT_LEAST32_TYPE__|__INT_LEAST64_TYPE__|__UINT_LEAST8_TYPE__|__UINT_LEAST16_TYPE__|__UINT_LEAST32_TYPE__|__UINT_LEAST64_TYPE__|__INT_FAST8_TYPE__|__INT_FAST16_TYPE__|__INT_FAST32_TYPE__|__INT_FAST64_TYPE__|__UINT_FAST8_TYPE__|__UINT_FAST16_TYPE__|__UINT_FAST32_TYPE__|__UINT_FAST64_TYPE__|__INTPTR_TYPE__|__UINTPTR_TYPE__|__CHAR_BIT__|__SCHAR_MAX__|__WCHAR_MAX__|__SHRT_MAX__|__INT_MAX__|__LONG_MAX__|__LONG_LONG_MAX__|__WINT_MAX__|__SIZE_MAX__|__PTRDIFF_MAX__|__INTMAX_MAX__|__UINTMAX_MAX__|__SIG_ATOMIC_MAX__|__INT8_MAX__|__INT16_MAX__|__INT32_MAX__|__INT64_MAX__|__UINT8_MAX__|__UINT16_MAX__|__UINT32_MAX__|__UINT64_MAX__|__INT_LEAST8_MAX__|__INT_LEAST16_MAX__|__INT_LEAST32_MAX__|__INT_LEAST64_MAX__|__UINT_LEAST8_MAX__|__UINT_LEAST16_MAX__|__UINT_LEAST32_MAX__|__UINT_LEAST64_MAX__|__INT_FAST8_MAX__|__INT_FAST16_MAX__|__INT_FAST32_MAX__|__INT_FAST64_MAX__|__UINT_FAST8_MAX__|__UINT_FAST16_MAX__|__UINT_FAST32_MAX__|__UINT_FAST64_MAX__|__INTPTR_MAX__|__UINTPTR_MAX__|__WCHAR_MIN__|__WINT_MIN__|__SIG_ATOMIC_MIN__|__SCHAR_WIDTH__|__SHRT_WIDTH__|__INT_WIDTH__|__LONG_WIDTH__|__LONG_LONG_WIDTH__|__PTRDIFF_WIDTH__|__SIG_ATOMIC_WIDTH__|__SIZE_WIDTH__|__WCHAR_WIDTH__|__WINT_WIDTH__|__INT_LEAST8_WIDTH__|__INT_LEAST16_WIDTH__|__INT_LEAST32_WIDTH__|__INT_LEAST64_WIDTH__|__INT_FAST8_WIDTH__|__INT_FAST16_WIDTH__|__INT_FAST32_WIDTH__|__INT_FAST64_WIDTH__|__INTPTR_WIDTH__|__INTMAX_WIDTH__|__SIZEOF_INT__|__SIZEOF_LONG__|__SIZEOF_LONG_LONG__|__SIZEOF_SHORT__|__SIZEOF_POINTER__|__SIZEOF_FLOAT__|__SIZEOF_DOUBLE__|__SIZEOF_LONG_DOUBLE__|__SIZEOF_SIZE_T__|__SIZEOF_WCHAR_T__|__SIZEOF_WINT_T__|__SIZEOF_PTRDIFF_T__|__BYTE_ORDER__|__ORDER_LITTLE_ENDIAN__|__ORDER_BIG_ENDIAN__|__ORDER_PDP_ENDIAN__|__FLOAT_WORD_ORDER__|__DEPRECATED|__EXCEPTIONS|__GXX_RTTI|__USING_SJLJ_EXCEPTIONS__|__GXX_EXPERIMENTAL_CXX0X__|__GXX_WEAK__|__NEXT_RUNTIME__|__LP64__|_LP64|__SSP__|__SSP_ALL__|__SSP_STRONG__|__SSP_EXPLICIT__|__SANITIZE_ADDRESS__|__SANITIZE_THREAD__|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16|__HAVE_SPECULATION_SAFE_VALUE|__GCC_HAVE_DWARF2_CFI_ASM|__FP_FAST_FMA|__FP_FAST_FMAF|__FP_FAST_FMAL|__FP_FAST_FMAF16|__FP_FAST_FMAF32|__FP_FAST_FMAF64|__FP_FAST_FMAF128|__FP_FAST_FMAF32X|__FP_FAST_FMAF64X|__FP_FAST_FMAF128X|__GCC_IEC_559|__GCC_IEC_559_COMPLEX|__NO_MATH_ERRNO__|__has_builtin|__has_feature|__has_extension|__has_cpp_attribute|__has_c_attribute|__has_attribute|__has_declspec_attribute|__is_identifier|__has_include|__has_include_next|__has_warning|__BASE_FILE__|__FILE_NAME__|__clang__|__clang_major__|__clang_minor__|__clang_patchlevel__|__clang_version__|__fp16|_Float16)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.$1.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b__([A-Z_]+)__\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$1.c\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-conditional\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-conditional-block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-conditional-line\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\bdefined\\\\b\\\\s*$)|(?:\\\\bdefined\\\\b(?=\\\\s*\\\\(*\\\\s*(?:(?!defined\\\\b)[a-zA-Z_$][\\\\w$]*\\\\b)\\\\s*\\\\)*\\\\s*(?:\\\\n|//|/\\\\*|\\\\?|\\\\:|&&|\\\\|\\\\||\\\\\\\\\\\\s*\\\\n)))\",\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bdefined\\\\b\",\n\t\t\t\t\t\"name\": \"invalid.illegal.macro-name.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)|(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-define-line-blocks\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-define-line-contents\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\\\s*\\\\()\\n(?=\\n  (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*\\\\(  # actual name\\n  |\\n  (?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.function.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-define-line-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-disabled\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-disabled-block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-disabled-elif\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.in-block.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-elif\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-elif-block\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.in-block.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.c\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-else\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-else-block\": {\n\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.c\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"probably_a_parameter\": {\n\t\t\t\"match\": \"(?<=(?:[a-zA-Z_0-9] |[&*>\\\\]\\\\)]))\\\\s*([a-zA-Z_]\\\\w*)\\\\s*(?=(?:\\\\[\\\\]\\\\s*)?(?:,|\\\\)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.parameter.probably.c\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"static_assert\": {\n\t\t\t\"begin\": \"((?>(?:(?:(?>(?<!\\\\s)\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))))((?<!\\\\w)static_assert|_Static_assert(?!\\\\w))((?>(?:(?:(?>(?<!\\\\s)\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))))(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.other.static_assert.c\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.static_assert.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.static_assert.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.static_assert.message.c\",\n\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=(?:L|u8|u|U\\\\s*\\\\\\\")?)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"storage_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)(?:unsigned|signed|double|_Bool|short|float|long|void|char|bool|int)(?!\\\\w))\",\n\t\t\t\t\t\"name\": \"storage.type.built-in.primitive.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)(?:atomic_uint_least64_t|atomic_uint_least16_t|atomic_uint_least32_t|pthread_rwlockattr_t|atomic_uint_fast64_t|atomic_uint_fast32_t|atomic_uint_fast16_t|atomic_int_least64_t|atomic_int_least32_t|atomic_int_least16_t|atomic_uint_least8_t|atomic_uint_fast8_t|atomic_int_least8_t|atomic_int_fast16_t|pthread_mutexattr_t|atomic_int_fast32_t|atomic_int_fast64_t|atomic_int_fast8_t|pthread_condattr_t|atomic_ptrdiff_t|pthread_rwlock_t|atomic_uintptr_t|atomic_uintmax_t|atomic_intmax_t|atomic_intptr_t|atomic_char32_t|atomic_char16_t|pthread_mutex_t|pthread_cond_t|atomic_wchar_t|uint_least64_t|uint_least32_t|uint_least16_t|pthread_once_t|pthread_attr_t|int_least32_t|pthread_key_t|int_least16_t|int_least64_t|uint_least8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|atomic_ushort|atomic_ullong|atomic_size_t|int_fast16_t|int_fast64_t|uint_fast8_t|atomic_short|atomic_uchar|atomic_schar|int_least8_t|memory_order|atomic_llong|atomic_ulong|int_fast32_t|atomic_long|atomic_uint|atomic_char|int_fast8_t|suseconds_t|atomic_bool|atomic_int|_Imaginary|useconds_t|in_port_t|uintmax_t|uintmax_t|pthread_t|blksize_t|in_addr_t|uintptr_t|blkcnt_t|uint16_t|uint32_t|uint64_t|u_quad_t|_Complex|intptr_t|intmax_t|intmax_t|segsz_t|u_short|nlink_t|uint8_t|int64_t|int32_t|int16_t|fixpt_t|daddr_t|caddr_t|qaddr_t|ssize_t|clock_t|swblk_t|u_long|mode_t|int8_t|time_t|ushort|u_char|quad_t|size_t|pid_t|gid_t|uid_t|dev_t|div_t|off_t|u_int|key_t|ino_t|uint|id_t|id_t)(?!\\\\w))\",\n\t\t\t\t\t\"name\": \"storage.type.built-in.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?-mix:\\\\b(enum|struct|union)\\\\b)\",\n\t\t\t\t\t\"name\": \"storage.type.$1.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.asm.c\",\n\t\t\t\t\t\"begin\": \"(\\\\b(?:__asm__|asm)\\\\b)\\\\s*((?:volatile)?)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.asm.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:^)((?:(?:(?>\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))(?:\\\\n|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(((?:(?:(?>\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.c\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.embedded.assembly.c\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"(R?)(\\\")\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.assembly.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(\\\")\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.assembly.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.asm\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.x86\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.x86_64\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.arm\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#backslash_escapes\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.inner.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.inner.c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\[((?:(?:(?>\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))([a-zA-Z_]\\\\w*)((?:(?:(?>\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))\\\\]\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.asm.label.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.colon.assembly.c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escaped_char\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3]\\\\d{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\"name\": \"constant.character.escape.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.c\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_placeholder\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) %\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder.c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(%)(?!\\\"\\\\s*(PRI|SCN))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.placeholder.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_conditional_parentheses\": {\n\t\t\t\"name\": \"meta.conditional.switch.c\",\n\t\t\t\"begin\": \"((?>(?:(?:(?>(?<!\\\\s)\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))))(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.conditional.switch.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.conditional.switch.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_statement\": {\n\t\t\t\"name\": \"meta.block.switch.c\",\n\t\t\t\"begin\": \"(((?>(?:(?:(?>(?<!\\\\s)\\\\s+)|(\\\\/\\\\*)((?>(?:[^\\\\*]|(?>\\\\*+)[^\\\\/])*)((?>\\\\*+)\\\\/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))))((?<!\\\\w)switch(?!\\\\w)))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.head.switch.c\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.begin.c\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c punctuation.definition.comment.end.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.control.switch.c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.head.switch.c\",\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"((?:\\\\{|<%|\\\\?\\\\?<|(?=;)))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.switch.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch_conditional_parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.body.switch.c\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"(\\\\}|%>|\\\\?\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.switch.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#default_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.tail.switch.c\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s\\\\n]*\",\n\t\t\t\t\t\"end\": \"[\\\\s\\\\n]*(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"vararg_ellipses\": {\n\t\t\t\"match\": \"(?<!\\\\.)\\\\.\\\\.\\\\.(?!\\\\.)\",\n\t\t\t\"name\": \"punctuation.vararg-ellipses.c\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/cpp/syntaxes/cpp.embedded.macro.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jeff-hykin/better-cpp-syntax/blob/master/autogenerated/cpp.embedded.macro.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jeff-hykin/better-cpp-syntax/commit/f1d127a8af2b184db570345f0bb179503c47fdf6\",\n\t\"name\": \"C++\",\n\t\"scopeName\": \"source.cpp.embedded.macro\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#ever_present_context\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#destructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operator_overload\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#using_namespace\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#type_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#using_name\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#namespace_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#extern_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_class\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_struct\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_union\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#misc_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#standard_declares\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#class_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#struct_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#union_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#enum_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#template_isolated_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#template_explicit_instantiation\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"source.cpp#access_control_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#static_assert\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#assembly\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_pointer\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#evaluation_context\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"alignas_attribute\": {\n\t\t\t\"begin\": \"alignas\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignas_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignas.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignof.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assembly\": {\n\t\t\t\"begin\": \"(\\\\b(?:__asm__|asm)\\\\b)(?:\\\\s+)?((?:volatile)?)\",\n\t\t\t\"end\": \"(?!\\\\G)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.asm.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.asm.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\n|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(R?)(\\\")\",\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.assembly.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.assembly.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.embedded.assembly\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.asm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86_64\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.arm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#backslash_escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.inner.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.inner.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.asm.label.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.colon.assembly.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attributes_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cpp_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gcc_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ms_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#alignas_attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"end\": \"}|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\*)\",\n\t\t\t\"end\": \"\\\\*\\\\/|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.cpp\"\n\t\t},\n\t\t\"builtin_storage_type_initilizer\": {\n\t\t\t\"begin\": \"\\\\s*+(?<!\\\\w)(?:(?:(?:((?:(?:unsigned)|(?:wchar_t)|(?:double)|(?:signed)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:long)|(?:char)|(?:bool)|(?:int)))|((?:(?:uint_least32_t)|(?:uint_least64_t)|(?:uint_least16_t)|(?:uint_fast64_t)|(?:uint_least8_t)|(?:int_least64_t)|(?:int_least32_t)|(?:int_least16_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:int_fast8_t)|(?:suseconds_t)|(?:useconds_t)|(?:uintmax_t)|(?:uintmax_t)|(?:in_port_t)|(?:uintmax_t)|(?:in_addr_t)|(?:blksize_t)|(?:uintptr_t)|(?:intmax_t)|(?:intptr_t)|(?:blkcnt_t)|(?:intmax_t)|(?:u_quad_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:ssize_t)|(?:fixpt_t)|(?:qaddr_t)|(?:u_short)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:daddr_t)|(?:caddr_t)|(?:swblk_t)|(?:clock_t)|(?:segsz_t)|(?:nlink_t)|(?:time_t)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:u_char)|(?:int8_t)|(?:u_int)|(?:uid_t)|(?:off_t)|(?:pid_t)|(?:gid_t)|(?:dev_t)|(?:div_t)|(?:key_t)|(?:ino_t)|(?:id_t)|(?:id_t)|(?:uint))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_cond_t)|(?:pthread_attr_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)\\\\s*+(?<!\\\\w)(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)case(?!\\\\w))\",\n\t\t\t\"end\": \":|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.case.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.class.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.class.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?:\\\\s+)?+(\\\\/\\\\/[!\\\\/]+)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"comment.line.double-slash.documentation.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*\\\\/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\s+)?+\\\\/\\\\*[!*]+(?:(?:\\\\n|$)|(?=\\\\s))\",\n\t\t\t\t\t\"end\": \"[!*]*\\\\*\\\\/|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#emacs_file_banner\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#invalid_comment_end\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.function.constructor.cpp entity.name.function.definition.special.constructor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_root\": {\n\t\t\t\"begin\": \"\\\\s*+((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<8>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))::((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\10)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cpp_attributes\": {\n\t\t\t\"begin\": \"\\\\[\\\\[\",\n\t\t\t\"end\": \"\\\\]\\\\]|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"curly_initializer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\{)\",\n\t\t\t\"end\": \"\\\\}|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.curly.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.curly.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.initialization.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decltype\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.other.decltype.cpp storage.type.decltype.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decltype_specifier\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.other.decltype.cpp storage.type.decltype.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"default_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)default(?!\\\\w))\",\n\t\t\t\"end\": \":|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.default.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.default.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)(~(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.function.destructor.cpp entity.name.function.definition.special.member.destructor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_root\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))::((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))~(?:\\\\14)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)~(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"diagnostic\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?:error|warning)))\\\\b(?:\\\\s+)?\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$7.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.diagnostic.$reference(directive).cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"end\": \"(?:(\\\")|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"end\": \"(?:(')|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"string.unquoted.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"enum_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)enum(?!\\\\w))(?:\\\\s+(class|struct))?(?:(?:\\\\s+|((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\))))|(?={))(?:\\\\s+)?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)(?:(?:\\\\s+)?(:)(?:\\\\s+)?(?:((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::))?(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))?\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.enum-key.$2.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.type-specifier.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"storage.type.integral.$17.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.enum.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.enum.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.enum.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#enumerator_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"evaluation_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ever_present_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#single_line_macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#macro_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"extern_block\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(extern)(?=\\\\s*\\\\\\\")\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.extern.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.extern.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.extern.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.extern.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.extern.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_body_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using_namespace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#type_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#using_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#namespace_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_struct\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_union\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#misc_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#standard_declares\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#union_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#access_control_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assembly\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#goto_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#label\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_call\": {\n\t\t\t\"begin\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Wthread_local|^thread_local|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wsynchronized|^synchronized|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wconstinit|^constinit|\\\\Wco_return|^co_return|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\Wnamespace|^namespace|\\\\Wblksize_t|^blksize_t|\\\\Wco_return|^co_return|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wtemplate|^template|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Wswblk_t|^swblk_t|\\\\Wvirtual|^virtual|\\\\Wssize_t|^ssize_t|\\\\Wconcept|^concept|\\\\Wmutable|^mutable|\\\\Wfixpt_t|^fixpt_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wtypedef|^typedef|\\\\Wdaddr_t|^daddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wqaddr_t|^qaddr_t|\\\\Wdefault|^default|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wu_short|^u_short|\\\\Wwchar_t|^wchar_t|\\\\Wprivate|^private|\\\\W__asm__|^__asm__|\\\\Walignas|^alignas|\\\\Walignof|^alignof|\\\\Wmutable|^mutable|\\\\Wnullptr|^nullptr|\\\\Wclock_t|^clock_t|\\\\Wmode_t|^mode_t|\\\\Wpublic|^public|\\\\Wsize_t|^size_t|\\\\Wdouble|^double|\\\\Wquad_t|^quad_t|\\\\Wstatic|^static|\\\\Wtime_t|^time_t|\\\\Wmodule|^module|\\\\Wimport|^import|\\\\Wexport|^export|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wxor_eq|^xor_eq|\\\\Wand_eq|^and_eq|\\\\Wreturn|^return|\\\\Wfriend|^friend|\\\\Wnot_eq|^not_eq|\\\\Wsigned|^signed|\\\\Wstruct|^struct|\\\\Wint8_t|^int8_t|\\\\Wushort|^ushort|\\\\Wswitch|^switch|\\\\Wu_long|^u_long|\\\\Wtypeid|^typeid|\\\\Wu_char|^u_char|\\\\Wsizeof|^sizeof|\\\\Wbitand|^bitand|\\\\Wdelete|^delete|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wshort|^short|\\\\Wbreak|^break|\\\\Wcatch|^catch|\\\\Wcompl|^compl|\\\\Wwhile|^while|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wor_eq|^or_eq|\\\\Wconst|^const|\\\\Wthrow|^throw|\\\\Wbitor|^bitor|\\\\Wu_int|^u_int|\\\\Wusing|^using|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wfloat|^float|\\\\Wlong|^long|\\\\Wgoto|^goto|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wenum|^enum|\\\\Wtrue|^true|\\\\Wchar|^char|\\\\Wid_t|^id_t|\\\\WNULL|^NULL|\\\\Wthis|^this|\\\\Wbool|^bool|\\\\Welse|^else|\\\\Wfor|^for|\\\\Wnew|^new|\\\\Wnot|^not|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wasm|^asm|\\\\Wint|^int|\\\\Wtry|^try|\\\\Wdo|^do|\\\\Wif|^if|\\\\Wor|^or)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_definition\": {\n\t\t\t\"begin\": \"(?:(?:^|\\\\G|(?<=;|\\\\}))|(?<=>|\\\\*\\\\/))\\\\s*+(?:((?<!\\\\w)template(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?<!\\\\w)(?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))|(?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Wthread_local|^thread_local|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wsynchronized|^synchronized|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wconstinit|^constinit|\\\\Wco_return|^co_return|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\Wnamespace|^namespace|\\\\Wblksize_t|^blksize_t|\\\\Wco_return|^co_return|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wtemplate|^template|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Wswblk_t|^swblk_t|\\\\Wvirtual|^virtual|\\\\Wssize_t|^ssize_t|\\\\Wconcept|^concept|\\\\Wmutable|^mutable|\\\\Wfixpt_t|^fixpt_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wtypedef|^typedef|\\\\Wdaddr_t|^daddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wqaddr_t|^qaddr_t|\\\\Wdefault|^default|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wu_short|^u_short|\\\\Wwchar_t|^wchar_t|\\\\Wprivate|^private|\\\\W__asm__|^__asm__|\\\\Walignas|^alignas|\\\\Walignof|^alignof|\\\\Wmutable|^mutable|\\\\Wnullptr|^nullptr|\\\\Wclock_t|^clock_t|\\\\Wmode_t|^mode_t|\\\\Wpublic|^public|\\\\Wsize_t|^size_t|\\\\Wdouble|^double|\\\\Wquad_t|^quad_t|\\\\Wstatic|^static|\\\\Wtime_t|^time_t|\\\\Wmodule|^module|\\\\Wimport|^import|\\\\Wexport|^export|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wxor_eq|^xor_eq|\\\\Wand_eq|^and_eq|\\\\Wreturn|^return|\\\\Wfriend|^friend|\\\\Wnot_eq|^not_eq|\\\\Wsigned|^signed|\\\\Wstruct|^struct|\\\\Wint8_t|^int8_t|\\\\Wushort|^ushort|\\\\Wswitch|^switch|\\\\Wu_long|^u_long|\\\\Wtypeid|^typeid|\\\\Wu_char|^u_char|\\\\Wsizeof|^sizeof|\\\\Wbitand|^bitand|\\\\Wdelete|^delete|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wshort|^short|\\\\Wbreak|^break|\\\\Wcatch|^catch|\\\\Wcompl|^compl|\\\\Wwhile|^while|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wor_eq|^or_eq|\\\\Wconst|^const|\\\\Wthrow|^throw|\\\\Wbitor|^bitor|\\\\Wu_int|^u_int|\\\\Wusing|^using|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wfloat|^float|\\\\Wlong|^long|\\\\Wgoto|^goto|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wenum|^enum|\\\\Wtrue|^true|\\\\Wchar|^char|\\\\Wid_t|^id_t|\\\\WNULL|^NULL|\\\\Wthis|^this|\\\\Wbool|^bool|\\\\Welse|^else|\\\\Wfor|^for|\\\\Wnew|^new|\\\\Wnot|^not|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wasm|^asm|\\\\Wint|^int|\\\\Wtry|^try|\\\\Wdo|^do|\\\\Wif|^if|\\\\Wor|^or)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))|(?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.$1.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$8.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"52\": {},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"name\": \"entity.name.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter_or_maybe_value\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=^|\\\\))(?:\\\\s+)?(->)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<23>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<23>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.return-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_parameter_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=[{=,);>]|\\\\n)(?!\\\\()|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.other.definition.pointer.function.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer_parameter\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=[{=,);>]|\\\\n)(?!\\\\()|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.parameter.pointer.function.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"gcc_attributes\": {\n\t\t\t\"begin\": \"__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(\",\n\t\t\t\"end\": \"\\\\)\\\\s*\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inheritance_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.inheritance.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:protected)|(?:private)|(?:public))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)virtual(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.virtual.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=protected|virtual|private|public|,|:)(?:\\\\s+)?(?!(?:(?:(?:protected)|(?:private)|(?:public))|virtual))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"lambdas\": {\n\t\t\t\"begin\": \"(?:(?<=[^\\\\s]|^)(?<![\\\\w\\\\]\\\\)\\\\[\\\\*&\\\">])|(?<=\\\\Wreturn|^return))(?:\\\\s+)?(\\\\[(?!\\\\[| *+\\\"| *+\\\\d))((?:[^\\\\[\\\\]]|((?<!\\\\[)\\\\[(?!\\\\[)(?:[^\\\\[\\\\]]*+\\\\g<3>?)++\\\\]))*+)(\\\\](?!((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))[\\\\[\\\\];=]))\",\n\t\t\t\"end\": \"(?<=[;}])|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.begin.lambda.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.lambda.capture.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#the_this_keyword\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?=\\\\]|\\\\z|$)|(,))|(\\\\=))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.capture.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.end.lambda.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.parameters.lambda.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:constexpr)|(?:consteval)|(?:mutable))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.modifier.lambda.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"->\",\n\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.lambda.return-type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\S+\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.return-type.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.body.lambda.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?line\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.line.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.line.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\/)\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"comment.line.double-slash.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?define\\\\b)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.define.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.macro.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\G(?:\\\\s+)?(\\\\()([^\\\\(]*)(\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.preprocessor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.function.preprocessor.parameters.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[(,])(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.variable.parameter.preprocessor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.preprocessor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp.embedded.macro\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method_access\": {\n\t\t\t\"begin\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\s+)?(?:(?:\\\\.\\\\*|\\\\.)|(?:->\\\\*|->))(?:\\\\s+)?)*)(?:\\\\s+)?(~?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=(?:\\\\.\\\\*|\\\\.|->|->\\\\*))(?:\\\\s+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.function.member.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ms_attributes\": {\n\t\t\t\"begin\": \"__declspec\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)namespace(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.definition.cpp storage.type.namespace.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.namespace.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<4>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?(?:(::)(?:\\\\s+)?(inline))?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.inline.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"noexcept_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.noexcept.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operator_overload\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(operator)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(?:(?:((?:(?:delete\\\\[\\\\])|(?:delete)|(?:new\\\\[\\\\])|(?:<=>)|(?:<<=)|(?:new)|(?:>>=)|(?:\\\\->\\\\*)|(?:\\\\/=)|(?:%=)|(?:&=)|(?:>=)|(?:\\\\|=)|(?:\\\\+\\\\+)|(?:\\\\-\\\\-)|(?:\\\\(\\\\))|(?:\\\\[\\\\])|(?:\\\\->)|(?:\\\\+\\\\+)|(?:<<)|(?:>>)|(?:\\\\-\\\\-)|(?:<=)|(?:\\\\^=)|(?:==)|(?:!=)|(?:&&)|(?:\\\\|\\\\|)|(?:\\\\+=)|(?:\\\\-=)|(?:\\\\*=)|,|\\\\+|\\\\-|!|~|\\\\*|&|\\\\*|\\\\/|%|\\\\+|\\\\-|<|>|&|\\\\^|\\\\||=))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:\\\\[\\\\])?)))|(\\\"\\\")((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\<|\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.operator.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"47\": {},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"keyword.other.operator.overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.operator-overload.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator-overload.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.cpp\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.cpp\"\n\t\t\t\t},\n\t\t\t\t\"58\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"59\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"60\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"61\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"62\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"63\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"64\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"65\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"66\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"67\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"68\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"69\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"70\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"71\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.array.cpp\"\n\t\t\t\t},\n\t\t\t\t\"72\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cpp\"\n\t\t\t\t},\n\t\t\t\t\"73\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"74\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"75\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"76\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"77\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cpp\"\n\t\t\t\t},\n\t\t\t\t\"78\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"79\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"80\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"81\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.operator-overload.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.operator-overload.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.operator-overload.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.operator-overload.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.operator-overload\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.operator-overload.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignof.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignas.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.typeid.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.noexcept.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%=|\\\\+=|-=|\\\\*=|(?<!\\\\()\\\\/=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&=|\\\\^=|<<=|>>=|\\\\|=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<<|>>\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#assignment_operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%|\\\\*|\\\\/|-|\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ternary_operator\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\s*+(?<!\\\\w)(?:(?:(?:((?:(?:unsigned)|(?:wchar_t)|(?:double)|(?:signed)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:long)|(?:char)|(?:bool)|(?:int)))|((?:(?:uint_least32_t)|(?:uint_least64_t)|(?:uint_least16_t)|(?:uint_fast64_t)|(?:uint_least8_t)|(?:int_least64_t)|(?:int_least32_t)|(?:int_least16_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:int_fast8_t)|(?:suseconds_t)|(?:useconds_t)|(?:uintmax_t)|(?:uintmax_t)|(?:in_port_t)|(?:uintmax_t)|(?:in_addr_t)|(?:blksize_t)|(?:uintptr_t)|(?:intmax_t)|(?:intptr_t)|(?:blkcnt_t)|(?:intmax_t)|(?:u_quad_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:ssize_t)|(?:fixpt_t)|(?:qaddr_t)|(?:u_short)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:daddr_t)|(?:caddr_t)|(?:swblk_t)|(?:clock_t)|(?:segsz_t)|(?:nlink_t)|(?:time_t)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:u_char)|(?:int8_t)|(?:u_int)|(?:uid_t)|(?:off_t)|(?:pid_t)|(?:gid_t)|(?:dev_t)|(?:div_t)|(?:key_t)|(?:ino_t)|(?:id_t)|(?:id_t)|(?:uint))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_cond_t)|(?:pthread_attr_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\Wthread_local|^thread_local|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?:struct)|(?:class)|(?:union)|(?:enum))\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\)|,|\\\\[|=|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter_or_maybe_value\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#curly_initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\s*+(?<!\\\\w)(?:(?:(?:((?:(?:unsigned)|(?:wchar_t)|(?:double)|(?:signed)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:long)|(?:char)|(?:bool)|(?:int)))|((?:(?:uint_least32_t)|(?:uint_least64_t)|(?:uint_least16_t)|(?:uint_fast64_t)|(?:uint_least8_t)|(?:int_least64_t)|(?:int_least32_t)|(?:int_least16_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:int_fast8_t)|(?:suseconds_t)|(?:useconds_t)|(?:uintmax_t)|(?:uintmax_t)|(?:in_port_t)|(?:uintmax_t)|(?:in_addr_t)|(?:blksize_t)|(?:uintptr_t)|(?:intmax_t)|(?:intptr_t)|(?:blkcnt_t)|(?:intmax_t)|(?:u_quad_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:ssize_t)|(?:fixpt_t)|(?:qaddr_t)|(?:u_short)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:daddr_t)|(?:caddr_t)|(?:swblk_t)|(?:clock_t)|(?:segsz_t)|(?:nlink_t)|(?:time_t)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:u_char)|(?:int8_t)|(?:u_int)|(?:uid_t)|(?:off_t)|(?:pid_t)|(?:gid_t)|(?:dev_t)|(?:div_t)|(?:key_t)|(?:ino_t)|(?:id_t)|(?:id_t)|(?:uint))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_cond_t)|(?:pthread_attr_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\Wthread_local|^thread_local|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?:struct)|(?:class)|(?:union)|(?:enum))\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=(?:\\\\)|,|\\\\[|=|\\\\/\\\\/|(?:\\\\n|$)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#over_qualified_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!:):(?!:)\",\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.range-based.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?pragma\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.pragma.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_defined\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#d9bc4796b0b_preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#macro_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_defined\": {\n\t\t\t\"begin\": \"((?<!\\\\w)defined(?!\\\\w))(\\\\()\",\n\t\t\t\"end\": \"(?:\\\\)|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.defined.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#macro_name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.preprocessor.conditional.cpp\"\n\t\t},\n\t\t\"preprocessor_conditional_range\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?:(?:ifndef|ifdef)|if))\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.$6.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"contentName\": \"meta.preprocessor.conditional\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#single_line_macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sizeof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sizeof_variadic_operator\": {\n\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.variadic.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"square_brackets\": {\n\t\t\t\"name\": \"meta.bracket.square.access\",\n\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.object\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"static_assert\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)static_assert|_Static_assert(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.other.static_assert.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.static_assert.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.static_assert.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(,)(?:\\\\s+)?(?=(?:L|u8|u|U(?:\\\\s+)?\\\\\\\")?)\",\n\t\t\t\t\t\"end\": \"(?=\\\\))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.static_assert.message.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"storage_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#storage_specifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#inline_builtin_storage_type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#typename\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?)\\\"\",\n\t\t\t\t\t\"end\": \"(\\\")(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.string.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.string.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8})\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\"?\\\\\\\\abfnrtv]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[0-7]{1,3}\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#string_escapes_context_c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![0-9A-Fa-f])((?:u|u8|U|L)?)'\",\n\t\t\t\t\t\"end\": \"(')(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.character.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.character.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#string_escapes_context_c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:(?:_r|re)|regex)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:(?:_r|re)|regex)\\\\\\\"|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.regex.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.regexp.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:glsl|GLSL)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:glsl|GLSL)\\\\\\\"|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.string.quoted.double.raw.glsl.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.glsl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:[pP]?(?:sql|SQL)|d[dm]l)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:[pP]?(?:sql|SQL)|d[dm]l)\\\\\\\"|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.string.quoted.double.raw.sql.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?R)\\\"(?:([^ ()\\\\\\\\\\\\t]{0,16})|([^ ()\\\\\\\\\\\\t]*))\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\)\\\\2(\\\\3)\\\")(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.string.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.string.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.struct.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.struct.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_conditional_parentheses\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.conditional.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.conditional.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.switch.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)switch(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.switch.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.switch.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.switch.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch_conditional_parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.switch.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#default_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_call_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_template_call_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#comma_in_template_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#qualified_type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_call_range\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(template)(?:\\\\s+)?(<)\",\n\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.definition.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\w)(?:\\\\s+)?<\",\n\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#template_definition_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#template_argument_defaulted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#template_call_innards\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ternary_operator\": {\n\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\"end\": \":|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"applyEndPatternLast\": 1\n\t\t},\n\t\t\"typedef_class\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)class(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_function_pointer\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=.*\\\\(\\\\*\\\\s*(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\s*\\\\))\",\n\t\t\t\"end\": \"(?<=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=[{=,);>]|\\\\n)(?!\\\\()|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\"end\": \">|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp entity.name.type.pointer.function.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_struct\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)struct(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_union\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)union(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typeid_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.typeid.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"union_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.union.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.union.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"using_namespace\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(using)\\\\s+(namespace)\\\\s+((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<6>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?=;|\\\\n)\",\n\t\t\t\"end\": \";|(?=(?<!\\\\\\\\)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.directive.cpp storage.type.namespace.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.using-namespace.cpp\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/cpp/syntaxes/cpp.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jeff-hykin/better-cpp-syntax/blob/master/autogenerated/cpp.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jeff-hykin/better-cpp-syntax/commit/f1d127a8af2b184db570345f0bb179503c47fdf6\",\n\t\"name\": \"C++\",\n\t\"scopeName\": \"source.cpp\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#ever_present_context\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#destructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operator_overload\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#using_namespace\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#type_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#using_name\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#extern_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_class\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_struct\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_union\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#misc_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#standard_declares\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#class_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#struct_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#union_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#enum_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_isolated_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_explicit_instantiation\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#access_control_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#static_assert\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#assembly\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_pointer\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#evaluation_context\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"access_control_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(((?:(?:protected)|(?:private)|(?:public)))(?:\\\\s+)?(:))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.control.$4.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.access.control.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"alignas_attribute\": {\n\t\t\t\"begin\": \"alignas\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignas_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignas.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignof.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assembly\": {\n\t\t\t\"begin\": \"(\\\\b(?:__asm__|asm)\\\\b)(?:\\\\s+)?((?:volatile)?)\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.asm.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.asm.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\n|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(R?)(\\\")\",\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.assembly.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.assembly.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.embedded.assembly\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.asm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86_64\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.arm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#backslash_escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.inner.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.inner.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.asm.label.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.colon.assembly.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assignment_operator\": {\n\t\t\t\"match\": \"\\\\=\",\n\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t},\n\t\t\"attributes_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cpp_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gcc_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ms_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#alignas_attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"backslash_escapes\": {\n\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\"name\": \"constant.character.escape\"\n\t\t},\n\t\t\"block\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\*)\",\n\t\t\t\"end\": \"\\\\*\\\\/\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.cpp\"\n\t\t},\n\t\t\"builtin_storage_type_initilizer\": {\n\t\t\t\"begin\": \"\\\\s*+(?<!\\\\w)(?:(?:(?:((?:(?:unsigned)|(?:wchar_t)|(?:double)|(?:signed)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:long)|(?:char)|(?:bool)|(?:int)))|((?:(?:uint_least32_t)|(?:uint_least64_t)|(?:uint_least16_t)|(?:uint_fast64_t)|(?:uint_least8_t)|(?:int_least64_t)|(?:int_least32_t)|(?:int_least16_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:int_fast8_t)|(?:suseconds_t)|(?:useconds_t)|(?:uintmax_t)|(?:uintmax_t)|(?:in_port_t)|(?:uintmax_t)|(?:in_addr_t)|(?:blksize_t)|(?:uintptr_t)|(?:intmax_t)|(?:intptr_t)|(?:blkcnt_t)|(?:intmax_t)|(?:u_quad_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:ssize_t)|(?:fixpt_t)|(?:qaddr_t)|(?:u_short)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:daddr_t)|(?:caddr_t)|(?:swblk_t)|(?:clock_t)|(?:segsz_t)|(?:nlink_t)|(?:time_t)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:u_char)|(?:int8_t)|(?:u_int)|(?:uid_t)|(?:off_t)|(?:pid_t)|(?:gid_t)|(?:dev_t)|(?:div_t)|(?:key_t)|(?:ino_t)|(?:id_t)|(?:id_t)|(?:uint))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_cond_t)|(?:pthread_attr_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)\\\\s*+(?<!\\\\w)(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)case(?!\\\\w))\",\n\t\t\t\"end\": \":\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.case.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.class.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.class.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)class(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comma\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t},\n\t\t\"comma_in_template_argument\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.comma.template.argument.cpp\"\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?:\\\\s+)?+(\\\\/\\\\/[!\\\\/]+)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"comment.line.double-slash.documentation.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*\\\\/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\s+)?+\\\\/\\\\*[!*]+(?:(?:\\\\n|$)|(?=\\\\s))\",\n\t\t\t\t\t\"end\": \"[!*]*\\\\*\\\\/\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#emacs_file_banner\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#invalid_comment_end\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.function.constructor.cpp entity.name.function.definition.special.constructor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_root\": {\n\t\t\t\"begin\": \"\\\\s*+((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<8>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))::((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\10)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"control_flow_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:(?:co_return)|(?:co_yield)|(?:co_await)|(?:continue)|(?:default)|(?:switch)|(?:return)|(?:catch)|(?:while)|(?:throw)|(?:break)|(?:case)|(?:goto)|(?:else)|(?:for)|(?:try)|(?:if)|(?:do))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"cpp_attributes\": {\n\t\t\t\"begin\": \"\\\\[\\\\[\",\n\t\t\t\"end\": \"\\\\]\\\\]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"curly_initializer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\{)\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.curly.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.curly.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.initialization.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"d9bc4796b0b_module_import\": {\n\t\t\t\"match\": \"^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((import))(?:\\\\s+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/)))|((\\\\\\\")[^\\\\\\\"]*(\\\\\\\"?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/))))|(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\.(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;)))))|((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;))))(?:\\\\s+)?(;?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.import.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.import.cpp\"\n\t\t},\n\t\t\"d9bc4796b0b_preprocessor_number_literal\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"decltype\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.other.decltype.cpp storage.type.decltype.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decltype_specifier\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.other.decltype.cpp storage.type.decltype.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"default_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)default(?!\\\\w))\",\n\t\t\t\"end\": \":\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.default.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.default.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)(~(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.function.destructor.cpp entity.name.function.definition.special.member.destructor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_root\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))::((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))~(?:\\\\14)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)~(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"diagnostic\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?:error|warning)))\\\\b(?:\\\\s+)?\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$7.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.diagnostic.$reference(directive).cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"end\": \"(?:(\\\")|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"end\": \"(?:(')|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"string.unquoted.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"emacs_file_banner\": {\n\t\t\t\"match\": \"(?:(^(?:\\\\s+)?((\\\\/\\\\/)(?:\\\\s+)?((?:[#;\\\\/=*C~]+)++(?![#;\\\\/=*C~]))(?:\\\\s+)?.+(?:\\\\s+)?(?:\\\\4)(?:\\\\s+)?(?:\\\\n|$)))|(^(?:\\\\s+)?((\\\\/\\\\*)(?:\\\\s+)?((?:[#;\\\\/=*C~]+)++(?![#;\\\\/=*C~]))(?:\\\\s+)?.+(?:\\\\s+)?(?:\\\\8)(?:\\\\s+)?\\\\*\\\\/)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.banner.double-slash.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.line.double-slash.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.banner.character.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.banner.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.line.banner.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"meta.banner.character.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"empty_square_brackets\": {\n\t\t\t\"name\": \"storage.modifier.array.bracket.square\",\n\t\t\t\"match\": \"(?<!delete)\\\\[(?:\\\\s+)?\\\\]\"\n\t\t},\n\t\t\"enum_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)enum(?!\\\\w))(?:\\\\s+(class|struct))?(?:(?:\\\\s+|((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\))))|(?={))(?:\\\\s+)?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)(?:(?:\\\\s+)?(:)(?:\\\\s+)?(?:((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::))?(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))?\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.enum-key.$2.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.type-specifier.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"storage.type.integral.$17.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.enum.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.enum.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.enum.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#enumerator_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"enum_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)enum(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"enumerator_list\": {\n\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?(?:\\\\s+)?(?:(\\\\=)(?:\\\\s+)?(.+?)(?:\\\\s+)?)?(?:(?:((?:[,;](?!')|\\\\n))|(?=\\\\}[^']))|(?=(?:\\\\/\\\\/|\\\\/\\\\*)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.enummember.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.enum.definition.cpp\"\n\t\t},\n\t\t\"evaluation_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ever_present_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single_line_macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"exception_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:(?:throw)|(?:catch)|(?:try))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"extern_block\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(extern)(?=\\\\s*\\\\\\\")\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.extern.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.extern.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.extern.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.extern.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.extern.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_body_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using_namespace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_struct\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_union\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#misc_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#standard_declares\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#union_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#access_control_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assembly\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#goto_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#label\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_call\": {\n\t\t\t\"begin\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Wthread_local|^thread_local|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wsynchronized|^synchronized|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wconstinit|^constinit|\\\\Wco_return|^co_return|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\Wnamespace|^namespace|\\\\Wblksize_t|^blksize_t|\\\\Wco_return|^co_return|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wtemplate|^template|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Wswblk_t|^swblk_t|\\\\Wvirtual|^virtual|\\\\Wssize_t|^ssize_t|\\\\Wconcept|^concept|\\\\Wmutable|^mutable|\\\\Wfixpt_t|^fixpt_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wtypedef|^typedef|\\\\Wdaddr_t|^daddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wqaddr_t|^qaddr_t|\\\\Wdefault|^default|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wu_short|^u_short|\\\\Wwchar_t|^wchar_t|\\\\Wprivate|^private|\\\\W__asm__|^__asm__|\\\\Walignas|^alignas|\\\\Walignof|^alignof|\\\\Wmutable|^mutable|\\\\Wnullptr|^nullptr|\\\\Wclock_t|^clock_t|\\\\Wmode_t|^mode_t|\\\\Wpublic|^public|\\\\Wsize_t|^size_t|\\\\Wdouble|^double|\\\\Wquad_t|^quad_t|\\\\Wstatic|^static|\\\\Wtime_t|^time_t|\\\\Wmodule|^module|\\\\Wimport|^import|\\\\Wexport|^export|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wxor_eq|^xor_eq|\\\\Wand_eq|^and_eq|\\\\Wreturn|^return|\\\\Wfriend|^friend|\\\\Wnot_eq|^not_eq|\\\\Wsigned|^signed|\\\\Wstruct|^struct|\\\\Wint8_t|^int8_t|\\\\Wushort|^ushort|\\\\Wswitch|^switch|\\\\Wu_long|^u_long|\\\\Wtypeid|^typeid|\\\\Wu_char|^u_char|\\\\Wsizeof|^sizeof|\\\\Wbitand|^bitand|\\\\Wdelete|^delete|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wshort|^short|\\\\Wbreak|^break|\\\\Wcatch|^catch|\\\\Wcompl|^compl|\\\\Wwhile|^while|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wor_eq|^or_eq|\\\\Wconst|^const|\\\\Wthrow|^throw|\\\\Wbitor|^bitor|\\\\Wu_int|^u_int|\\\\Wusing|^using|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wfloat|^float|\\\\Wlong|^long|\\\\Wgoto|^goto|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wenum|^enum|\\\\Wtrue|^true|\\\\Wchar|^char|\\\\Wid_t|^id_t|\\\\WNULL|^NULL|\\\\Wthis|^this|\\\\Wbool|^bool|\\\\Welse|^else|\\\\Wfor|^for|\\\\Wnew|^new|\\\\Wnot|^not|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wasm|^asm|\\\\Wint|^int|\\\\Wtry|^try|\\\\Wdo|^do|\\\\Wif|^if|\\\\Wor|^or)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_definition\": {\n\t\t\t\"begin\": \"(?:(?:^|\\\\G|(?<=;|\\\\}))|(?<=>|\\\\*\\\\/))\\\\s*+(?:((?<!\\\\w)template(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?<!\\\\w)(?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))|(?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Wthread_local|^thread_local|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wsynchronized|^synchronized|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wconstinit|^constinit|\\\\Wco_return|^co_return|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\Wnamespace|^namespace|\\\\Wblksize_t|^blksize_t|\\\\Wco_return|^co_return|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wtemplate|^template|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Wswblk_t|^swblk_t|\\\\Wvirtual|^virtual|\\\\Wssize_t|^ssize_t|\\\\Wconcept|^concept|\\\\Wmutable|^mutable|\\\\Wfixpt_t|^fixpt_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wtypedef|^typedef|\\\\Wdaddr_t|^daddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wqaddr_t|^qaddr_t|\\\\Wdefault|^default|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wu_short|^u_short|\\\\Wwchar_t|^wchar_t|\\\\Wprivate|^private|\\\\W__asm__|^__asm__|\\\\Walignas|^alignas|\\\\Walignof|^alignof|\\\\Wmutable|^mutable|\\\\Wnullptr|^nullptr|\\\\Wclock_t|^clock_t|\\\\Wmode_t|^mode_t|\\\\Wpublic|^public|\\\\Wsize_t|^size_t|\\\\Wdouble|^double|\\\\Wquad_t|^quad_t|\\\\Wstatic|^static|\\\\Wtime_t|^time_t|\\\\Wmodule|^module|\\\\Wimport|^import|\\\\Wexport|^export|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wxor_eq|^xor_eq|\\\\Wand_eq|^and_eq|\\\\Wreturn|^return|\\\\Wfriend|^friend|\\\\Wnot_eq|^not_eq|\\\\Wsigned|^signed|\\\\Wstruct|^struct|\\\\Wint8_t|^int8_t|\\\\Wushort|^ushort|\\\\Wswitch|^switch|\\\\Wu_long|^u_long|\\\\Wtypeid|^typeid|\\\\Wu_char|^u_char|\\\\Wsizeof|^sizeof|\\\\Wbitand|^bitand|\\\\Wdelete|^delete|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wshort|^short|\\\\Wbreak|^break|\\\\Wcatch|^catch|\\\\Wcompl|^compl|\\\\Wwhile|^while|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wor_eq|^or_eq|\\\\Wconst|^const|\\\\Wthrow|^throw|\\\\Wbitor|^bitor|\\\\Wu_int|^u_int|\\\\Wusing|^using|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wfloat|^float|\\\\Wlong|^long|\\\\Wgoto|^goto|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wenum|^enum|\\\\Wtrue|^true|\\\\Wchar|^char|\\\\Wid_t|^id_t|\\\\WNULL|^NULL|\\\\Wthis|^this|\\\\Wbool|^bool|\\\\Welse|^else|\\\\Wfor|^for|\\\\Wnew|^new|\\\\Wnot|^not|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wasm|^asm|\\\\Wint|^int|\\\\Wtry|^try|\\\\Wdo|^do|\\\\Wif|^if|\\\\Wor|^or)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))|(?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.$1.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$8.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"52\": {},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"name\": \"entity.name.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter_or_maybe_value\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=^|\\\\))(?:\\\\s+)?(->)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<23>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<23>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.return-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_parameter_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=[{=,);>]|\\\\n)(?!\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.other.definition.pointer.function.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer_parameter\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=[{=,);>]|\\\\n)(?!\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.parameter.pointer.function.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functional_specifiers_pre_parameters\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:(?:constexpr)|(?:consteval)|(?:explicit)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))(?!\\\\w)\",\n\t\t\t\"name\": \"storage.modifier.specifier.functional.pre-parameters.$0.cpp\"\n\t\t},\n\t\t\"gcc_attributes\": {\n\t\t\t\"begin\": \"__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(\",\n\t\t\t\"end\": \"\\\\)\\\\s*\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"goto_statement\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)goto(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.goto.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"entity.name.label.call.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"identifier\": {\n\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\"\n\t\t},\n\t\t\"include\": {\n\t\t\t\"match\": \"^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((#)(?:\\\\s+)?((?:include|include_next))\\\\b)(?:\\\\s+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/)))|((\\\\\\\")[^\\\\\\\"]*(\\\\\\\"?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/))))|(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\.(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;)))))|((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.$5.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.include.cpp\"\n\t\t},\n\t\t\"inheritance_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.inheritance.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:protected)|(?:private)|(?:public))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)virtual(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.virtual.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=protected|virtual|private|public|,|:)(?:\\\\s+)?(?!(?:(?:(?:protected)|(?:private)|(?:public))|virtual))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_builtin_storage_type\": {\n\t\t\t\"match\": \"\\\\s*+(?<!\\\\w)(?:(?:(?:((?:(?:unsigned)|(?:wchar_t)|(?:double)|(?:signed)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:long)|(?:char)|(?:bool)|(?:int)))|((?:(?:uint_least32_t)|(?:uint_least64_t)|(?:uint_least16_t)|(?:uint_fast64_t)|(?:uint_least8_t)|(?:int_least64_t)|(?:int_least32_t)|(?:int_least16_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:int_fast8_t)|(?:suseconds_t)|(?:useconds_t)|(?:uintmax_t)|(?:uintmax_t)|(?:in_port_t)|(?:uintmax_t)|(?:in_addr_t)|(?:blksize_t)|(?:uintptr_t)|(?:intmax_t)|(?:intptr_t)|(?:blkcnt_t)|(?:intmax_t)|(?:u_quad_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:ssize_t)|(?:fixpt_t)|(?:qaddr_t)|(?:u_short)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:daddr_t)|(?:caddr_t)|(?:swblk_t)|(?:clock_t)|(?:segsz_t)|(?:nlink_t)|(?:time_t)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:u_char)|(?:int8_t)|(?:u_int)|(?:uid_t)|(?:off_t)|(?:pid_t)|(?:gid_t)|(?:dev_t)|(?:div_t)|(?:key_t)|(?:ino_t)|(?:id_t)|(?:id_t)|(?:uint))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_cond_t)|(?:pthread_attr_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"inline_comment\": {\n\t\t\t\"match\": \"(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"invalid_comment_end\": {\n\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\"name\": \"invalid.illegal.unexpected.punctuation.definition.comment.end.cpp\"\n\t\t},\n\t\t\"label\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\b(?<!case|default)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.label.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.label.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"lambdas\": {\n\t\t\t\"begin\": \"(?:(?<=[^\\\\s]|^)(?<![\\\\w\\\\]\\\\)\\\\[\\\\*&\\\">])|(?<=\\\\Wreturn|^return))(?:\\\\s+)?(\\\\[(?!\\\\[| *+\\\"| *+\\\\d))((?:[^\\\\[\\\\]]|((?<!\\\\[)\\\\[(?!\\\\[)(?:[^\\\\[\\\\]]*+\\\\g<3>?)++\\\\]))*+)(\\\\](?!((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))[\\\\[\\\\];=]))\",\n\t\t\t\"end\": \"(?<=[;}])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.begin.lambda.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.lambda.capture.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?=\\\\]|\\\\z|$)|(,))|(\\\\=))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.capture.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.end.lambda.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.parameters.lambda.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:constexpr)|(?:consteval)|(?:mutable))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.modifier.lambda.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"->\",\n\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.lambda.return-type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\S+\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.return-type.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.body.lambda.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"language_constants\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:(?:nullptr)|(?:false)|(?:NULL)|(?:true))(?!\\\\w)\",\n\t\t\t\"name\": \"constant.language.$0.cpp\"\n\t\t},\n\t\t\"line\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?line\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.line.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.line.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\/)\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"comment.line.double-slash.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_continuation_character\": {\n\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\"name\": \"constant.character.escape.line-continuation.cpp\"\n\t\t},\n\t\t\"macro\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?define\\\\b)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.define.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.macro.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\G(?:\\\\s+)?(\\\\()([^\\\\(]*)(\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.preprocessor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.function.preprocessor.parameters.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[(,])(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.variable.parameter.preprocessor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.preprocessor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro_argument\": {\n\t\t\t\"match\": \"##?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\"name\": \"variable.other.macro.argument.cpp\"\n\t\t},\n\t\t\"macro_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp.embedded.macro\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro_name\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\"name\": \"entity.name.function.preprocessor.cpp\"\n\t\t},\n\t\t\"member_access\": {\n\t\t\t\"match\": \"(?:((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\s+)?(?:(?:\\\\.\\\\*|\\\\.)|(?:->\\\\*|->))(?:\\\\s+)?)*)(?:\\\\s+)?(\\\\b(?!uint_least32_t[^\\\\w]|uint_least16_t[^\\\\w]|uint_least64_t[^\\\\w]|int_least32_t[^\\\\w]|int_least64_t[^\\\\w]|uint_fast32_t[^\\\\w]|uint_fast64_t[^\\\\w]|uint_least8_t[^\\\\w]|uint_fast16_t[^\\\\w]|int_least16_t[^\\\\w]|int_fast16_t[^\\\\w]|int_least8_t[^\\\\w]|uint_fast8_t[^\\\\w]|int_fast64_t[^\\\\w]|int_fast32_t[^\\\\w]|int_fast8_t[^\\\\w]|suseconds_t[^\\\\w]|useconds_t[^\\\\w]|in_addr_t[^\\\\w]|uintmax_t[^\\\\w]|uintmax_t[^\\\\w]|uintmax_t[^\\\\w]|in_port_t[^\\\\w]|uintptr_t[^\\\\w]|blksize_t[^\\\\w]|uint32_t[^\\\\w]|uint64_t[^\\\\w]|u_quad_t[^\\\\w]|intmax_t[^\\\\w]|intmax_t[^\\\\w]|unsigned[^\\\\w]|blkcnt_t[^\\\\w]|uint16_t[^\\\\w]|intptr_t[^\\\\w]|swblk_t[^\\\\w]|wchar_t[^\\\\w]|u_short[^\\\\w]|qaddr_t[^\\\\w]|caddr_t[^\\\\w]|daddr_t[^\\\\w]|fixpt_t[^\\\\w]|nlink_t[^\\\\w]|segsz_t[^\\\\w]|clock_t[^\\\\w]|ssize_t[^\\\\w]|int16_t[^\\\\w]|int32_t[^\\\\w]|int64_t[^\\\\w]|uint8_t[^\\\\w]|int8_t[^\\\\w]|mode_t[^\\\\w]|quad_t[^\\\\w]|ushort[^\\\\w]|u_long[^\\\\w]|u_char[^\\\\w]|double[^\\\\w]|signed[^\\\\w]|time_t[^\\\\w]|size_t[^\\\\w]|key_t[^\\\\w]|div_t[^\\\\w]|ino_t[^\\\\w]|uid_t[^\\\\w]|gid_t[^\\\\w]|off_t[^\\\\w]|pid_t[^\\\\w]|float[^\\\\w]|dev_t[^\\\\w]|u_int[^\\\\w]|short[^\\\\w]|bool[^\\\\w]|id_t[^\\\\w]|uint[^\\\\w]|long[^\\\\w]|char[^\\\\w]|void[^\\\\w]|auto[^\\\\w]|id_t[^\\\\w]|int[^\\\\w])(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?!\\\\())\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=(?:\\\\.\\\\*|\\\\.|->|->\\\\*))(?:\\\\s+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"variable.other.property.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"memory_operators\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(delete)(?:\\\\s+)?(\\\\[\\\\])|(delete))|(new))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.array.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.array.bracket.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"keyword.operator.new.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"method_access\": {\n\t\t\t\"begin\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\s+)?(?:(?:\\\\.\\\\*|\\\\.)|(?:->\\\\*|->))(?:\\\\s+)?)*)(?:\\\\s+)?(~?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=(?:\\\\.\\\\*|\\\\.|->|->\\\\*))(?:\\\\s+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:\\\\s+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.function.member.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"misc_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:(?:constinit)|(?:requires)|(?:typedef)|(?:concept)|(?:export)|(?:module))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.other.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"ms_attributes\": {\n\t\t\t\"begin\": \"__declspec\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace_alias\": {\n\t\t\t\"match\": \"(?<!\\\\w)(namespace)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?(\\\\=)(?:\\\\s+)?(((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<8>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?(?:(;)|\\\\n))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.alias.cpp storage.type.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.declaration.namespace.alias.value.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.declaration.namespace.alias.cpp\"\n\t\t},\n\t\t\"namespace_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)namespace(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.definition.cpp storage.type.namespace.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.namespace.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<4>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?(?:(::)(?:\\\\s+)?(inline))?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.inline.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"noexcept_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.noexcept.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"number_literal\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"operator_overload\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(operator)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<55>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(?:(?:((?:(?:delete\\\\[\\\\])|(?:delete)|(?:new\\\\[\\\\])|(?:<=>)|(?:<<=)|(?:new)|(?:>>=)|(?:\\\\->\\\\*)|(?:\\\\/=)|(?:%=)|(?:&=)|(?:>=)|(?:\\\\|=)|(?:\\\\+\\\\+)|(?:\\\\-\\\\-)|(?:\\\\(\\\\))|(?:\\\\[\\\\])|(?:\\\\->)|(?:\\\\+\\\\+)|(?:<<)|(?:>>)|(?:\\\\-\\\\-)|(?:<=)|(?:\\\\^=)|(?:==)|(?:!=)|(?:&&)|(?:\\\\|\\\\|)|(?:\\\\+=)|(?:\\\\-=)|(?:\\\\*=)|,|\\\\+|\\\\-|!|~|\\\\*|&|\\\\*|\\\\/|%|\\\\+|\\\\-|<|>|&|\\\\^|\\\\||=))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:\\\\[\\\\])?)))|(\\\"\\\")((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\<|\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.operator.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"47\": {},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"keyword.other.operator.overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.operator-overload.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator-overload.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.cpp\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.cpp\"\n\t\t\t\t},\n\t\t\t\t\"58\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"59\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"60\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"61\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"62\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"63\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"64\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"65\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"66\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"67\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"68\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"69\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"70\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"71\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.array.cpp\"\n\t\t\t\t},\n\t\t\t\t\"72\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cpp\"\n\t\t\t\t},\n\t\t\t\t\"73\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"74\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"75\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"76\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"77\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cpp\"\n\t\t\t\t},\n\t\t\t\t\"78\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"79\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"80\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"81\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.operator-overload.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.operator-overload.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.operator-overload.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.operator-overload.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.operator-overload\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.operator-overload.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignof.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignas.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.typeid.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.noexcept.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%=|\\\\+=|-=|\\\\*=|(?<!\\\\()\\\\/=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&=|\\\\^=|<<=|>>=|\\\\|=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<<|>>\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assignment_operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%|\\\\*|\\\\/|-|\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ternary_operator\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"over_qualified_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\bstruct)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.struct.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\benum)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.enum.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\bunion)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.union.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\bclass)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\s*+(?<!\\\\w)(?:(?:(?:((?:(?:unsigned)|(?:wchar_t)|(?:double)|(?:signed)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:long)|(?:char)|(?:bool)|(?:int)))|((?:(?:uint_least32_t)|(?:uint_least64_t)|(?:uint_least16_t)|(?:uint_fast64_t)|(?:uint_least8_t)|(?:int_least64_t)|(?:int_least32_t)|(?:int_least16_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:int_fast8_t)|(?:suseconds_t)|(?:useconds_t)|(?:uintmax_t)|(?:uintmax_t)|(?:in_port_t)|(?:uintmax_t)|(?:in_addr_t)|(?:blksize_t)|(?:uintptr_t)|(?:intmax_t)|(?:intptr_t)|(?:blkcnt_t)|(?:intmax_t)|(?:u_quad_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:ssize_t)|(?:fixpt_t)|(?:qaddr_t)|(?:u_short)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:daddr_t)|(?:caddr_t)|(?:swblk_t)|(?:clock_t)|(?:segsz_t)|(?:nlink_t)|(?:time_t)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:u_char)|(?:int8_t)|(?:u_int)|(?:uid_t)|(?:off_t)|(?:pid_t)|(?:gid_t)|(?:dev_t)|(?:div_t)|(?:key_t)|(?:ino_t)|(?:id_t)|(?:id_t)|(?:uint))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_cond_t)|(?:pthread_attr_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\Wthread_local|^thread_local|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?:struct)|(?:class)|(?:union)|(?:enum))\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\)|,|\\\\[|=|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter_class\": {\n\t\t\t\"match\": \"(\\\\bclass)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_enum\": {\n\t\t\t\"match\": \"(\\\\benum)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_or_maybe_value\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#curly_initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\s*+(?<!\\\\w)(?:(?:(?:((?:(?:unsigned)|(?:wchar_t)|(?:double)|(?:signed)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:long)|(?:char)|(?:bool)|(?:int)))|((?:(?:uint_least32_t)|(?:uint_least64_t)|(?:uint_least16_t)|(?:uint_fast64_t)|(?:uint_least8_t)|(?:int_least64_t)|(?:int_least32_t)|(?:int_least16_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:int_fast8_t)|(?:suseconds_t)|(?:useconds_t)|(?:uintmax_t)|(?:uintmax_t)|(?:in_port_t)|(?:uintmax_t)|(?:in_addr_t)|(?:blksize_t)|(?:uintptr_t)|(?:intmax_t)|(?:intptr_t)|(?:blkcnt_t)|(?:intmax_t)|(?:u_quad_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:ssize_t)|(?:fixpt_t)|(?:qaddr_t)|(?:u_short)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:daddr_t)|(?:caddr_t)|(?:swblk_t)|(?:clock_t)|(?:segsz_t)|(?:nlink_t)|(?:time_t)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:u_char)|(?:int8_t)|(?:u_int)|(?:uid_t)|(?:off_t)|(?:pid_t)|(?:gid_t)|(?:dev_t)|(?:div_t)|(?:key_t)|(?:ino_t)|(?:id_t)|(?:id_t)|(?:uint))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_cond_t)|(?:pthread_attr_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\Wthread_local|^thread_local|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?:struct)|(?:class)|(?:union)|(?:enum))\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=(?:\\\\)|,|\\\\[|=|\\\\/\\\\/|(?:\\\\n|$)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter_struct\": {\n\t\t\t\"match\": \"(\\\\bstruct)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.struct.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.struct.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_union\": {\n\t\t\t\"match\": \"(\\\\bunion)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.union.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.union.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#over_qualified_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!:):(?!:)\",\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.range-based.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?pragma\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.pragma.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma_mark\": {\n\t\t\t\"match\": \"(^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?pragma\\\\s+mark)\\\\s+(.*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.pragma-mark.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.pragma-mark.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.pragma.cpp\"\n\t\t},\n\t\t\"predefined_macros\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(__cplusplus|__DATE__|__FILE__|__LINE__|__STDC__|__STDC_HOSTED__|__STDC_NO_COMPLEX__|__STDC_VERSION__|__STDCPP_THREADS__|__TIME__|NDEBUG|__OBJC__|__ASSEMBLER__|__ATOM__|__AVX__|__AVX2__|_CHAR_UNSIGNED|__CLR_VER|_CONTROL_FLOW_GUARD|__COUNTER__|__cplusplus_cli|__cplusplus_winrt|_CPPRTTI|_CPPUNWIND|_DEBUG|_DLL|__FUNCDNAME__|__FUNCSIG__|__FUNCTION__|_INTEGRAL_MAX_BITS|__INTELLISENSE__|_ISO_VOLATILE|_KERNEL_MODE|_M_AMD64|_M_ARM|_M_ARM_ARMV7VE|_M_ARM_FP|_M_ARM64|_M_CEE|_M_CEE_PURE|_M_CEE_SAFE|_M_FP_EXCEPT|_M_FP_FAST|_M_FP_PRECISE|_M_FP_STRICT|_M_IX86|_M_IX86_FP|_M_X64|_MANAGED|_MSC_BUILD|_MSC_EXTENSIONS|_MSC_FULL_VER|_MSC_VER|_MSVC_LANG|__MSVC_RUNTIME_CHECKS|_MT|_NATIVE_WCHAR_T_DEFINED|_OPENMP|_PREFAST|__TIMESTAMP__|_VC_NO_DEFAULTLIB|_WCHAR_T_DEFINED|_WIN32|_WIN64|_WINRT_DLL|_ATL_VER|_MFC_VER|__GFORTRAN__|__GNUC__|__GNUC_MINOR__|__GNUC_PATCHLEVEL__|__GNUG__|__STRICT_ANSI__|__BASE_FILE__|__INCLUDE_LEVEL__|__ELF__|__VERSION__|__OPTIMIZE__|__OPTIMIZE_SIZE__|__NO_INLINE__|__GNUC_STDC_INLINE__|__CHAR_UNSIGNED__|__WCHAR_UNSIGNED__|__REGISTER_PREFIX__|__REGISTER_PREFIX__|__SIZE_TYPE__|__PTRDIFF_TYPE__|__WCHAR_TYPE__|__WINT_TYPE__|__INTMAX_TYPE__|__UINTMAX_TYPE__|__SIG_ATOMIC_TYPE__|__INT8_TYPE__|__INT16_TYPE__|__INT32_TYPE__|__INT64_TYPE__|__UINT8_TYPE__|__UINT16_TYPE__|__UINT32_TYPE__|__UINT64_TYPE__|__INT_LEAST8_TYPE__|__INT_LEAST16_TYPE__|__INT_LEAST32_TYPE__|__INT_LEAST64_TYPE__|__UINT_LEAST8_TYPE__|__UINT_LEAST16_TYPE__|__UINT_LEAST32_TYPE__|__UINT_LEAST64_TYPE__|__INT_FAST8_TYPE__|__INT_FAST16_TYPE__|__INT_FAST32_TYPE__|__INT_FAST64_TYPE__|__UINT_FAST8_TYPE__|__UINT_FAST16_TYPE__|__UINT_FAST32_TYPE__|__UINT_FAST64_TYPE__|__INTPTR_TYPE__|__UINTPTR_TYPE__|__CHAR_BIT__|__SCHAR_MAX__|__WCHAR_MAX__|__SHRT_MAX__|__INT_MAX__|__LONG_MAX__|__LONG_LONG_MAX__|__WINT_MAX__|__SIZE_MAX__|__PTRDIFF_MAX__|__INTMAX_MAX__|__UINTMAX_MAX__|__SIG_ATOMIC_MAX__|__INT8_MAX__|__INT16_MAX__|__INT32_MAX__|__INT64_MAX__|__UINT8_MAX__|__UINT16_MAX__|__UINT32_MAX__|__UINT64_MAX__|__INT_LEAST8_MAX__|__INT_LEAST16_MAX__|__INT_LEAST32_MAX__|__INT_LEAST64_MAX__|__UINT_LEAST8_MAX__|__UINT_LEAST16_MAX__|__UINT_LEAST32_MAX__|__UINT_LEAST64_MAX__|__INT_FAST8_MAX__|__INT_FAST16_MAX__|__INT_FAST32_MAX__|__INT_FAST64_MAX__|__UINT_FAST8_MAX__|__UINT_FAST16_MAX__|__UINT_FAST32_MAX__|__UINT_FAST64_MAX__|__INTPTR_MAX__|__UINTPTR_MAX__|__WCHAR_MIN__|__WINT_MIN__|__SIG_ATOMIC_MIN__|__SCHAR_WIDTH__|__SHRT_WIDTH__|__INT_WIDTH__|__LONG_WIDTH__|__LONG_LONG_WIDTH__|__PTRDIFF_WIDTH__|__SIG_ATOMIC_WIDTH__|__SIZE_WIDTH__|__WCHAR_WIDTH__|__WINT_WIDTH__|__INT_LEAST8_WIDTH__|__INT_LEAST16_WIDTH__|__INT_LEAST32_WIDTH__|__INT_LEAST64_WIDTH__|__INT_FAST8_WIDTH__|__INT_FAST16_WIDTH__|__INT_FAST32_WIDTH__|__INT_FAST64_WIDTH__|__INTPTR_WIDTH__|__INTMAX_WIDTH__|__SIZEOF_INT__|__SIZEOF_LONG__|__SIZEOF_LONG_LONG__|__SIZEOF_SHORT__|__SIZEOF_POINTER__|__SIZEOF_FLOAT__|__SIZEOF_DOUBLE__|__SIZEOF_LONG_DOUBLE__|__SIZEOF_SIZE_T__|__SIZEOF_WCHAR_T__|__SIZEOF_WINT_T__|__SIZEOF_PTRDIFF_T__|__BYTE_ORDER__|__ORDER_LITTLE_ENDIAN__|__ORDER_BIG_ENDIAN__|__ORDER_PDP_ENDIAN__|__FLOAT_WORD_ORDER__|__DEPRECATED|__EXCEPTIONS|__GXX_RTTI|__USING_SJLJ_EXCEPTIONS__|__GXX_EXPERIMENTAL_CXX0X__|__GXX_WEAK__|__NEXT_RUNTIME__|__LP64__|_LP64|__SSP__|__SSP_ALL__|__SSP_STRONG__|__SSP_EXPLICIT__|__SANITIZE_ADDRESS__|__SANITIZE_THREAD__|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16|__HAVE_SPECULATION_SAFE_VALUE|__GCC_HAVE_DWARF2_CFI_ASM|__FP_FAST_FMA|__FP_FAST_FMAF|__FP_FAST_FMAL|__FP_FAST_FMAF16|__FP_FAST_FMAF32|__FP_FAST_FMAF64|__FP_FAST_FMAF128|__FP_FAST_FMAF32X|__FP_FAST_FMAF64X|__FP_FAST_FMAF128X|__GCC_IEC_559|__GCC_IEC_559_COMPLEX|__NO_MATH_ERRNO__|__has_builtin|__has_feature|__has_extension|__has_cpp_attribute|__has_c_attribute|__has_attribute|__has_declspec_attribute|__is_identifier|__has_include|__has_include_next|__has_warning|__BASE_FILE__|__FILE_NAME__|__clang__|__clang_major__|__clang_minor__|__clang_patchlevel__|__clang_version__|__fp16|_Float16)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.$1.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b__([A-Z_]+)__\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$1.cpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_defined\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#d9bc4796b0b_preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_defined\": {\n\t\t\t\"begin\": \"((?<!\\\\w)defined(?!\\\\w))(\\\\()\",\n\t\t\t\"end\": \"(?:\\\\)|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.defined.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.preprocessor.conditional.cpp\"\n\t\t},\n\t\t\"preprocessor_conditional_range\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?:(?:ifndef|ifdef)|if))\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.$6.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"contentName\": \"meta.preprocessor.conditional\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_standalone\": {\n\t\t\t\"match\": \"^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?<!\\\\w)(?:endif|else|elif)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"keyword.control.directive.$4.cpp\"\n\t\t},\n\t\t\"preprocessor_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single_line_macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qualified_type\": {\n\t\t\t\"match\": \"\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.qualified_type.cpp\"\n\t\t},\n\t\t\"qualifiers_and_specifiers_post_parameters\": {\n\t\t\t\"match\": \"((?:(?:(?:(?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:(?:override)|(?:volatile)|(?:noexcept)|(?:final)|(?:const))(?!\\\\w))+)(?=\\\\s*(?:\\\\{|;|\\\\n|\\\\r|=))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:(?:override)|(?:volatile)|(?:noexcept)|(?:final)|(?:const))(?!\\\\w))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$5.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_call\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_call_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_operator_overload\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_operator_overload_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_operator_overload_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_operator_overload_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_alias\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_alias_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_block\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_block_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_using\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_using_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_parameter\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_parameter_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_call\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_call_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.template.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_definition\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_definition_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"semicolon\": {\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t},\n\t\t\"simple_type\": {\n\t\t\t\"match\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"single_line_macro\": {\n\t\t\t\"match\": \"^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))#define.*(?<![\\\\\\\\])(?:\\\\n|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"sizeof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sizeof_variadic_operator\": {\n\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.variadic.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"square_brackets\": {\n\t\t\t\"name\": \"meta.bracket.square.access\",\n\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.object\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"standard_declares\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)struct(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.struct.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)union(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.union.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)enum(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.enum.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)class(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"static_assert\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)static_assert|_Static_assert(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.other.static_assert.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.static_assert.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.static_assert.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(,)(?:\\\\s+)?(?=(?:L|u8|u|U(?:\\\\s+)?\\\\\\\")?)\",\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.static_assert.message.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"std_space\": {\n\t\t\t\"match\": \"(?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"storage_specifiers\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"storage_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_builtin_storage_type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typename\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?)\\\"\",\n\t\t\t\t\t\"end\": \"(\\\")(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.string.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.string.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8})\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\"?\\\\\\\\abfnrtv]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[0-7]{1,3}\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escapes_context_c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![0-9A-Fa-f])((?:u|u8|U|L)?)'\",\n\t\t\t\t\t\"end\": \"(')(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.character.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.character.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escapes_context_c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:(?:_r|re)|regex)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:(?:_r|re)|regex)\\\\\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.regex.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.regexp.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:glsl|GLSL)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:glsl|GLSL)\\\\\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.string.quoted.double.raw.glsl.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.glsl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:[pP]?(?:sql|SQL)|d[dm]l)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:[pP]?(?:sql|SQL)|d[dm]l)\\\\\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.string.quoted.double.raw.sql.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?R)\\\"(?:([^ ()\\\\\\\\\\\\t]{0,16})|([^ ()\\\\\\\\\\\\t]*))\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\)\\\\2(\\\\3)\\\")(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.string.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.string.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escapes_context_c\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\"name\": \"constant.character.escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?!%')(?!%\\\")%\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.struct.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.struct.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)struct(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.struct.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"switch_conditional_parentheses\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.conditional.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.conditional.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.switch.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)switch(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.switch.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.switch.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.switch.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch_conditional_parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.switch.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#default_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_argument_defaulted\": {\n\t\t\t\"match\": \"(?<=<|,)(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\s+((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(\\\\=)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"template_call_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma_in_template_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualified_type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_call_innards\": {\n\t\t\t\"match\": \"((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<1>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.call.cpp\"\n\t\t},\n\t\t\"template_call_range\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"end\": \">\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(template)(?:\\\\s+)?(<)\",\n\t\t\t\"end\": \">\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.definition.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\w)(?:\\\\s+)?<\",\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition_argument\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\s+)+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))|((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?(\\\\.\\\\.\\\\.)(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))|(?<!\\\\w)(template)(?:\\\\s+)?(<)(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(>)(?:\\\\s+)?(class|typename)(?:\\\\s+((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?)(?:\\\\s+)?(?:(\\\\=)(?:\\\\s+)?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?(?:(,)|(?=>|$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$3.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.argument.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$6.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$11.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$14.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.template.argument.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"template_definition_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_argument_defaulted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_innards\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_explicit_instantiation\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:(extern)\\\\s+)?(template)\\\\s+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.extern.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.explicit-instantiation.cpp\"\n\t\t},\n\t\t\"template_isolated_definition\": {\n\t\t\t\"match\": \"(?<!\\\\w)(template)(?:\\\\s+)?(<)(.*)(>)(?:\\\\s+)?$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.template.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_definition_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"ternary_operator\": {\n\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\"end\": \":\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"applyEndPatternLast\": 1\n\t\t},\n\t\t\"the_this_keyword\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"type_alias\": {\n\t\t\t\"match\": \"(using)\\\\s+(?!namespace)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?(?:\\\\s+)?(\\\\=)(?:\\\\s+)?((?:typename)?)(?:\\\\s+)?((?:(?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:(?:thread_local)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const))(?!\\\\w)\\\\s+)+)?(?:(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<19>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<19>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))|(.*(?<!;)))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)?(?:\\\\s+)?(?:(;)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.other.typename.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"meta.declaration.type.alias.value.unknown.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.declaration.type.alias.cpp\"\n\t\t},\n\t\t\"type_casting_operators\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:(?:reinterpret_cast)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cpp keyword.operator.cast.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"typedef_class\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)class(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_function_pointer\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=.*\\\\(\\\\*\\\\s*(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\s*\\\\))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=[{=,);>]|\\\\n)(?!\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp entity.name.type.pointer.function.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_struct\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)struct(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_union\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)union(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typeid_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.typeid.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typename\": {\n\t\t\t\"match\": \"(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?<!\\\\w)typename(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<17>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<17>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {}\n\t\t\t}\n\t\t},\n\t\t\"undef\": {\n\t\t\t\"match\": \"(^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?undef\\\\b)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.undef.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.undef.cpp\"\n\t\t},\n\t\t\"union_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.union.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.union.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"union_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)union(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.union.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using_name\": {\n\t\t\t\"match\": \"(using)\\\\s+(?!namespace\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using_namespace\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(using)\\\\s+(namespace)\\\\s+((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<6>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?=;|\\\\n)\",\n\t\t\t\"end\": \";\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.directive.cpp storage.type.namespace.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.using-namespace.cpp\"\n\t\t},\n\t\t\"vararg_ellipses\": {\n\t\t\t\"match\": \"(?<!\\\\.)\\\\.\\\\.\\\\.(?!\\\\.)\",\n\t\t\t\"name\": \"punctuation.vararg-ellipses.cpp\"\n\t\t},\n\t\t\"wordlike_operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:noexcept)|(?:xor_eq)|(?:and_eq)|(?:delete)|(?:not_eq)|(?:bitand)|(?:bitor)|(?:compl)|(?:or_eq)|(?:not)|(?:xor)|(?:new)|(?:and)|(?:or))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cpp keyword.operator.$0.cpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/cpp/syntaxes/cuda-cpp.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/NVIDIA/cuda-cpp-grammar/blob/master/syntaxes/cuda-cpp.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/NVIDIA/cuda-cpp-grammar/commit/81e88eaec5170aa8585736c63627c73e3589998c\",\n\t\"name\": \"CUDA C++\",\n\t\"scopeName\": \"source.cuda-cpp\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#ever_present_context\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#destructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operator_overload\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#using_namespace\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#type_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#using_name\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#extern_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_class\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_struct\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_union\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#misc_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#standard_declares\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#class_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#struct_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#union_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#enum_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_isolated_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#access_control_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#static_assert\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#assembly\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_pointer\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#evaluation_context\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"access_control_keywords\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(((?:(?:protected)|(?:private)|(?:public)))(?:(?:\\\\s)+)?(:))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.control.$4.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.access.control.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"alignas_attribute\": {\n\t\t\t\"begin\": \"alignas\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)(?:\\\\s)+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignas_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.alignas.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.alignof.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assembly\": {\n\t\t\t\"begin\": \"(\\\\b(?:__asm__|asm)\\\\b)(?:(?:\\\\s)+)?((?:volatile)?)\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.asm.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.asm.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:\\\\n)|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(R?)(\\\")\",\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.assembly.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.assembly.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.cuda-cpp\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.embedded.assembly\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.asm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86_64\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.arm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#backslash_escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.inner.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.inner.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.asm.label.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.colon.assembly.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assignment_operator\": {\n\t\t\t\"match\": \"\\\\=\",\n\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t},\n\t\t\"attributes_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cpp_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gcc_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ms_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#alignas_attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"backslash_escapes\": {\n\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\"name\": \"constant.character.escape\"\n\t\t},\n\t\t\"block\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\*)\",\n\t\t\t\"end\": \"\\\\*\\\\/\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t},\n\t\t\"builtin_storage_type_initilizer\": {\n\t\t\t\"begin\": \"(?:\\\\s)*+(?<!\\\\w)(?:(?:(?:((?:(?:threadIdx)|(?:unsigned)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:wchar_t)|(?:gridDim)|(?:signed)|(?:double)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:char)|(?:long)|(?:bool)|(?:int)))|((?:(?:uint_least16_t)|(?:uint_least32_t)|(?:uint_least64_t)|(?:int_least16_t)|(?:int_least32_t)|(?:int_least64_t)|(?:uint_least8_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:uint_fast64_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:suseconds_t)|(?:int_fast8_t)|(?:useconds_t)|(?:ulonglong1)|(?:ulonglong2)|(?:ulonglong3)|(?:ulonglong4)|(?:blksize_t)|(?:in_addr_t)|(?:in_port_t)|(?:uintptr_t)|(?:uintmax_t)|(?:uintmax_t)|(?:uintmax_t)|(?:longlong1)|(?:longlong2)|(?:longlong3)|(?:longlong4)|(?:u_quad_t)|(?:blkcnt_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:intptr_t)|(?:intmax_t)|(?:intmax_t)|(?:u_short)|(?:qaddr_t)|(?:caddr_t)|(?:daddr_t)|(?:fixpt_t)|(?:nlink_t)|(?:segsz_t)|(?:swblk_t)|(?:clock_t)|(?:ssize_t)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:ushort1)|(?:ushort2)|(?:ushort3)|(?:ushort4)|(?:double1)|(?:double2)|(?:double3)|(?:double4)|(?:u_char)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:time_t)|(?:int8_t)|(?:uchar1)|(?:uchar2)|(?:uchar3)|(?:uchar4)|(?:short1)|(?:short2)|(?:short3)|(?:short4)|(?:ulong4)|(?:ulong1)|(?:ulong2)|(?:ulong3)|(?:ulong4)|(?:float1)|(?:float2)|(?:float3)|(?:float4)|(?:u_int)|(?:div_t)|(?:dev_t)|(?:gid_t)|(?:ino_t)|(?:key_t)|(?:pid_t)|(?:off_t)|(?:uid_t)|(?:char1)|(?:char2)|(?:char3)|(?:char4)|(?:uint1)|(?:uint2)|(?:uint3)|(?:uint4)|(?:long1)|(?:long2)|(?:long3)|(?:uint)|(?:id_t)|(?:id_t)|(?:int1)|(?:int2)|(?:int3)|(?:int4)|(?:dim3))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_attr_t)|(?:pthread_cond_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_](?:\\\\w)*_t))(?!\\\\w)(?:\\\\s)*+(?<!\\\\w)(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.primitive.cuda-cpp storage.type.built-in.primitive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.cuda-cpp storage.type.built-in.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cuda-cpp support.type.built-in.posix-reserved.pthread.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.cuda-cpp support.type.built-in.posix-reserved.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.initializer.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.initializer.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)case(?!\\\\w))\",\n\t\t\t\"end\": \":\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.case.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.class.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.class.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.class.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.class.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.class.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)class(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comma\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t},\n\t\t\"comma_in_template_argument\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.comma.template.argument.cuda-cpp\"\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?:(?:\\\\s)+)?+(\\\\/\\\\/[!\\\\/]+)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.documentation.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"comment.line.double-slash.documentation.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:(?:\\\\s)+)?(?:in|out)(?:(?:\\\\s)+)?)+)\\\\])?(?:\\\\s)+(\\\\b\\\\w+\\\\b)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*\\\\/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:(?:\\\\s)+)?(?:in|out)(?:(?:\\\\s)+)?)+)\\\\])?(?:\\\\s)+(\\\\b\\\\w+\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(?:\\\\s)+)?+\\\\/\\\\*[!*]+(?:(?:(?:\\\\n)|$)|(?=\\\\s))\",\n\t\t\t\t\t\"end\": \"[!*]*\\\\*\\\\/\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))(?:\\\\s)+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:(?:\\\\s)+)?(?:in|out)(?:(?:\\\\s)+)?)+)\\\\])?(?:\\\\s)+(\\\\b\\\\w+\\\\b)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#emacs_file_banner\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#invalid_comment_end\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:(?:(?:__forceinline__)|(?:__noinline__)|(?:__global__)|(?:__device__)|(?:constexpr)|(?:explicit)|(?:__host__)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"entity.name.function.constructor.cuda-cpp entity.name.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:(?:final)|(?:override)))+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.$1.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_root\": {\n\t\t\t\"begin\": \"\\\\s*+((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)(?:\\\\s)*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))::((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\14((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.constructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.constructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.constructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.constructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:(?:final)|(?:override)))+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.$1.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"control_flow_keywords\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:(?:co_return)|(?:continue)|(?:co_await)|(?:co_yield)|(?:default)|(?:switch)|(?:return)|(?:throw)|(?:while)|(?:catch)|(?:break)|(?:else)|(?:goto)|(?:case)|(?:for)|(?:try)|(?:do)|(?:if))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.$3.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"cpp_attributes\": {\n\t\t\t\"begin\": \"\\\\[\\\\[\",\n\t\t\t\"end\": \"\\\\]\\\\]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)(?:\\\\s)+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"curly_initializer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)(?:\\\\s)*+)?::)*+)?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)?(?![\\\\w<:.]))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\{)\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.curly.initializer.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.curly.initializer.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.initialization.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"d9bc4796b0b_module_import\": {\n\t\t\t\"match\": \"^((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((import))(?:(?:\\\\s)+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=\\\\/\\\\/)))|((\\\\\\\")[^\\\\\\\"]*((?:\\\\\\\")?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=\\\\/\\\\/))))|(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\.(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)*((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=(?:\\\\/\\\\/|;)))))|((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=(?:\\\\/\\\\/|;))))(?:(?:\\\\s)+)?(;?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.import.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.include.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.include.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.import.cuda-cpp\"\n\t\t},\n\t\t\"d9bc4796b0b_preprocessor_number_literal\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"decltype\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.other.decltype.cuda-cpp storage.type.decltype.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decltype_specifier\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.other.decltype.cuda-cpp storage.type.decltype.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"default_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)default(?!\\\\w))\",\n\t\t\t\"end\": \":\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.default.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.default.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:(?:(?:__forceinline__)|(?:__noinline__)|(?:__global__)|(?:__device__)|(?:constexpr)|(?:explicit)|(?:__host__)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*)(~(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"entity.name.function.destructor.cuda-cpp entity.name.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:(?:final)|(?:override)))+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cuda-cpp keyword.operator.$1.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_root\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)(?:\\\\s)*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))::((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))~\\\\14((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.destructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.destructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.destructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)~(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.destructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.constructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:(?:final)|(?:override)))+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cuda-cpp keyword.operator.$1.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"diagnostic\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?((?:error|warning)))\\\\b(?:(?:\\\\s)+)?\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$7.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.diagnostic.$reference(directive).cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"end\": \"(?:(\\\")|(?<!\\\\\\\\)(?=\\\\n))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"end\": \"(?:(')|(?<!\\\\\\\\)(?=\\\\n))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"string.unquoted.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"emacs_file_banner\": {\n\t\t\t\"match\": \"(?:(^(?:(?:\\\\s)+)?((\\\\/\\\\/)(?:(?:\\\\s)+)?((?:[#;\\\\/=*C~]+)++(?![#;\\\\/=*C~]))(?:(?:\\\\s)+)?.+(?:(?:\\\\s)+)?\\\\4(?:(?:\\\\s)+)?(?:\\\\n|$)))|(^(?:(?:\\\\s)+)?((\\\\/\\\\*)(?:(?:\\\\s)+)?((?:[#;\\\\/=*C~]+)++(?![#;\\\\/=*C~]))(?:(?:\\\\s)+)?.+(?:(?:\\\\s)+)?\\\\8(?:(?:\\\\s)+)?\\\\*\\\\/)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.banner.double-slash.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.line.double-slash.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.banner.character.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.banner.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.line.banner.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"meta.banner.character.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"empty_square_brackets\": {\n\t\t\t\"name\": \"storage.modifier.array.bracket.square\",\n\t\t\t\"match\": \"(?<!delete)\\\\[(?:(?:\\\\s)+)?\\\\]\"\n\t\t},\n\t\t\"enum_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)enum(?!\\\\w))(?:(?:\\\\s)+(class|struct))?(?:(?:(?:\\\\s)+|((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\))))|(?={))(?:(?:\\\\s)+)?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)(?:(?:(?:\\\\s)+)?(:)(?:(?:\\\\s)+)?(?:((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)(?:\\\\s)*+)?(::))?(?:(?:\\\\s)+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))?\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.enum.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.enum-key.$2.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.type-specifier.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"storage.type.integral.$14.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.enum.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.enum.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.enum.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.enum.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.enum.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#enumerator_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.enum.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"enum_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)enum(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"enumerator_list\": {\n\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(?:\\\\s)+)?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?(?:(?:\\\\s)+)?(?:(\\\\=)(?:(?:\\\\s)+)?(.+?)(?:(?:\\\\s)+)?)?(?:(?:((?:[,;](?!')|\\\\n))|(?=\\\\}[^']))|(?=(?:\\\\/\\\\/|\\\\/\\\\*)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.enummember.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.enum.definition.cuda-cpp\"\n\t\t},\n\t\t\"evaluation_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ever_present_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single_line_macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"exception_keywords\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:(?:throw)|(?:catch)|(?:try))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.$3.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"extern_block\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(extern)(?=\\\\s*\\\\\\\")\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.extern.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.extern.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.extern.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.extern.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.extern.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.extern.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.extern.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.extern.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_body_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using_namespace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_struct\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_union\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#misc_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#standard_declares\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#union_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#access_control_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assembly\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#goto_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#label\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_call\": {\n\t\t\t\"begin\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<11>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\W__forceinline__|^__forceinline__|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\W__constant__|^__constant__|\\\\W__restrict__|^__restrict__|\\\\W__noinline__|^__noinline__|\\\\Wthread_local|^thread_local|\\\\Wsynchronized|^synchronized|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\W__managed__|^__managed__|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wulonglong1|^ulonglong1|\\\\Wulonglong2|^ulonglong2|\\\\Wulonglong3|^ulonglong3|\\\\Wulonglong4|^ulonglong4|\\\\W__shared__|^__shared__|\\\\W__global__|^__global__|\\\\W__device__|^__device__|\\\\Wco_return|^co_return|\\\\Wblksize_t|^blksize_t|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wlonglong1|^longlong1|\\\\Wlonglong2|^longlong2|\\\\Wlonglong3|^longlong3|\\\\Wlonglong4|^longlong4|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\WthreadIdx|^threadIdx|\\\\Wnamespace|^namespace|\\\\Wco_return|^co_return|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\W__host__|^__host__|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\WblockIdx|^blockIdx|\\\\WblockDim|^blockDim|\\\\WwarpSize|^warpSize|\\\\Wtemplate|^template|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Walignof|^alignof|\\\\Walignas|^alignas|\\\\Wdefault|^default|\\\\Wwchar_t|^wchar_t|\\\\Wu_short|^u_short|\\\\Wqaddr_t|^qaddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wdaddr_t|^daddr_t|\\\\Wfixpt_t|^fixpt_t|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wswblk_t|^swblk_t|\\\\Wclock_t|^clock_t|\\\\Wssize_t|^ssize_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wushort1|^ushort1|\\\\Wushort2|^ushort2|\\\\Wushort3|^ushort3|\\\\Wushort4|^ushort4|\\\\Wdouble1|^double1|\\\\Wdouble2|^double2|\\\\Wdouble3|^double3|\\\\Wdouble4|^double4|\\\\Wnullptr|^nullptr|\\\\Wmutable|^mutable|\\\\Wvirtual|^virtual|\\\\Wmutable|^mutable|\\\\Wprivate|^private|\\\\WgridDim|^gridDim|\\\\Wtypedef|^typedef|\\\\W__asm__|^__asm__|\\\\Wconcept|^concept|\\\\Wsizeof|^sizeof|\\\\Wdelete|^delete|\\\\Wnot_eq|^not_eq|\\\\Wbitand|^bitand|\\\\Wand_eq|^and_eq|\\\\Wxor_eq|^xor_eq|\\\\Wtypeid|^typeid|\\\\Wswitch|^switch|\\\\Wreturn|^return|\\\\Wsigned|^signed|\\\\Wdouble|^double|\\\\Wu_char|^u_char|\\\\Wu_long|^u_long|\\\\Wushort|^ushort|\\\\Wquad_t|^quad_t|\\\\Wmode_t|^mode_t|\\\\Wsize_t|^size_t|\\\\Wtime_t|^time_t|\\\\Wint8_t|^int8_t|\\\\Wuchar1|^uchar1|\\\\Wuchar2|^uchar2|\\\\Wuchar3|^uchar3|\\\\Wuchar4|^uchar4|\\\\Wshort1|^short1|\\\\Wshort2|^short2|\\\\Wshort3|^short3|\\\\Wshort4|^short4|\\\\Wulong4|^ulong4|\\\\Wulong1|^ulong1|\\\\Wulong2|^ulong2|\\\\Wulong3|^ulong3|\\\\Wulong4|^ulong4|\\\\Wfloat1|^float1|\\\\Wfloat2|^float2|\\\\Wfloat3|^float3|\\\\Wfloat4|^float4|\\\\Wstruct|^struct|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wfriend|^friend|\\\\Wpublic|^public|\\\\Wexport|^export|\\\\Wimport|^import|\\\\Wmodule|^module|\\\\Wcompl|^compl|\\\\Wbitor|^bitor|\\\\Wthrow|^throw|\\\\Wor_eq|^or_eq|\\\\Wwhile|^while|\\\\Wcatch|^catch|\\\\Wbreak|^break|\\\\Wshort|^short|\\\\Wfloat|^float|\\\\Wu_int|^u_int|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wchar1|^char1|\\\\Wchar2|^char2|\\\\Wchar3|^char3|\\\\Wchar4|^char4|\\\\Wuint1|^uint1|\\\\Wuint2|^uint2|\\\\Wuint3|^uint3|\\\\Wuint4|^uint4|\\\\Wlong1|^long1|\\\\Wlong2|^long2|\\\\Wlong3|^long3|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wconst|^const|\\\\Wusing|^using|\\\\Welse|^else|\\\\Wgoto|^goto|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wchar|^char|\\\\Wlong|^long|\\\\Wbool|^bool|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wid_t|^id_t|\\\\Wint1|^int1|\\\\Wint2|^int2|\\\\Wint3|^int3|\\\\Wint4|^int4|\\\\Wdim3|^dim3|\\\\WNULL|^NULL|\\\\Wtrue|^true|\\\\Wenum|^enum|\\\\Wthis|^this|\\\\Wnot|^not|\\\\Wnew|^new|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wfor|^for|\\\\Wtry|^try|\\\\Wint|^int|\\\\Wasm|^asm|\\\\Wor|^or|\\\\Wdo|^do|\\\\Wif|^if)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<11>?)+>)(?:\\\\s)*+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_definition\": {\n\t\t\t\"begin\": \"(?:(?:^|\\\\G|(?<=;|\\\\}))|(?<=>))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:((?<!\\\\w)template(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?<!\\\\w)(?:(?:(?:__forceinline__)|(?:__noinline__)|(?:__global__)|(?:__device__)|(?:constexpr)|(?:explicit)|(?:__host__)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))|(?:(?:__constant__)|(?:__restrict__)|(?:__managed__)|(?:__shared__)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<60>?)+>)(?:\\\\s)*+)?::)*+)?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<60>?)+>)?(?![\\\\w<:.]))(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<60>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\W__forceinline__|^__forceinline__|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\W__constant__|^__constant__|\\\\W__restrict__|^__restrict__|\\\\W__noinline__|^__noinline__|\\\\Wthread_local|^thread_local|\\\\Wsynchronized|^synchronized|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\W__managed__|^__managed__|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wulonglong1|^ulonglong1|\\\\Wulonglong2|^ulonglong2|\\\\Wulonglong3|^ulonglong3|\\\\Wulonglong4|^ulonglong4|\\\\W__shared__|^__shared__|\\\\W__global__|^__global__|\\\\W__device__|^__device__|\\\\Wco_return|^co_return|\\\\Wblksize_t|^blksize_t|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wlonglong1|^longlong1|\\\\Wlonglong2|^longlong2|\\\\Wlonglong3|^longlong3|\\\\Wlonglong4|^longlong4|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\WthreadIdx|^threadIdx|\\\\Wnamespace|^namespace|\\\\Wco_return|^co_return|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\W__host__|^__host__|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\WblockIdx|^blockIdx|\\\\WblockDim|^blockDim|\\\\WwarpSize|^warpSize|\\\\Wtemplate|^template|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Walignof|^alignof|\\\\Walignas|^alignas|\\\\Wdefault|^default|\\\\Wwchar_t|^wchar_t|\\\\Wu_short|^u_short|\\\\Wqaddr_t|^qaddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wdaddr_t|^daddr_t|\\\\Wfixpt_t|^fixpt_t|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wswblk_t|^swblk_t|\\\\Wclock_t|^clock_t|\\\\Wssize_t|^ssize_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wushort1|^ushort1|\\\\Wushort2|^ushort2|\\\\Wushort3|^ushort3|\\\\Wushort4|^ushort4|\\\\Wdouble1|^double1|\\\\Wdouble2|^double2|\\\\Wdouble3|^double3|\\\\Wdouble4|^double4|\\\\Wnullptr|^nullptr|\\\\Wmutable|^mutable|\\\\Wvirtual|^virtual|\\\\Wmutable|^mutable|\\\\Wprivate|^private|\\\\WgridDim|^gridDim|\\\\Wtypedef|^typedef|\\\\W__asm__|^__asm__|\\\\Wconcept|^concept|\\\\Wsizeof|^sizeof|\\\\Wdelete|^delete|\\\\Wnot_eq|^not_eq|\\\\Wbitand|^bitand|\\\\Wand_eq|^and_eq|\\\\Wxor_eq|^xor_eq|\\\\Wtypeid|^typeid|\\\\Wswitch|^switch|\\\\Wreturn|^return|\\\\Wsigned|^signed|\\\\Wdouble|^double|\\\\Wu_char|^u_char|\\\\Wu_long|^u_long|\\\\Wushort|^ushort|\\\\Wquad_t|^quad_t|\\\\Wmode_t|^mode_t|\\\\Wsize_t|^size_t|\\\\Wtime_t|^time_t|\\\\Wint8_t|^int8_t|\\\\Wuchar1|^uchar1|\\\\Wuchar2|^uchar2|\\\\Wuchar3|^uchar3|\\\\Wuchar4|^uchar4|\\\\Wshort1|^short1|\\\\Wshort2|^short2|\\\\Wshort3|^short3|\\\\Wshort4|^short4|\\\\Wulong4|^ulong4|\\\\Wulong1|^ulong1|\\\\Wulong2|^ulong2|\\\\Wulong3|^ulong3|\\\\Wulong4|^ulong4|\\\\Wfloat1|^float1|\\\\Wfloat2|^float2|\\\\Wfloat3|^float3|\\\\Wfloat4|^float4|\\\\Wstruct|^struct|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wfriend|^friend|\\\\Wpublic|^public|\\\\Wexport|^export|\\\\Wimport|^import|\\\\Wmodule|^module|\\\\Wcompl|^compl|\\\\Wbitor|^bitor|\\\\Wthrow|^throw|\\\\Wor_eq|^or_eq|\\\\Wwhile|^while|\\\\Wcatch|^catch|\\\\Wbreak|^break|\\\\Wshort|^short|\\\\Wfloat|^float|\\\\Wu_int|^u_int|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wchar1|^char1|\\\\Wchar2|^char2|\\\\Wchar3|^char3|\\\\Wchar4|^char4|\\\\Wuint1|^uint1|\\\\Wuint2|^uint2|\\\\Wuint3|^uint3|\\\\Wuint4|^uint4|\\\\Wlong1|^long1|\\\\Wlong2|^long2|\\\\Wlong3|^long3|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wconst|^const|\\\\Wusing|^using|\\\\Welse|^else|\\\\Wgoto|^goto|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wchar|^char|\\\\Wlong|^long|\\\\Wbool|^bool|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wid_t|^id_t|\\\\Wint1|^int1|\\\\Wint2|^int2|\\\\Wint3|^int3|\\\\Wint4|^int4|\\\\Wdim3|^dim3|\\\\WNULL|^NULL|\\\\Wtrue|^true|\\\\Wenum|^enum|\\\\Wthis|^this|\\\\Wnot|^not|\\\\Wnew|^new|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wfor|^for|\\\\Wtry|^try|\\\\Wint|^int|\\\\Wasm|^asm|\\\\Wor|^or|\\\\Wdo|^do|\\\\Wif|^if)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:(?:(?:__forceinline__)|(?:__noinline__)|(?:__global__)|(?:__device__)|(?:constexpr)|(?:explicit)|(?:__host__)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))|(?:(?:__constant__)|(?:__restrict__)|(?:__managed__)|(?:__shared__)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.$1.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$12.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"34\": {},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"58\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"59\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"60\": {},\n\t\t\t\t\"61\": {\n\t\t\t\t\t\"name\": \"entity.name.function.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"62\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"63\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"64\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"65\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter_or_maybe_value\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=^|\\\\))(?:(?:\\\\s)+)?(->)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<23>?)+>)(?:\\\\s)*+)?::)*+)?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<23>?)+>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.return-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_parameter_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)(?:\\\\s)*+)?::)*+)?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)?(?![\\\\w<:.]))(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()(\\\\*)(?:(?:\\\\s)+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:(?:\\\\s)+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:(?:\\\\s)+)?)*(\\\\))(?:(?:\\\\s)+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=[{=,);>]|\\\\n)(?!\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.other.definition.pointer.function.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer_parameter\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)(?:\\\\s)*+)?::)*+)?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)?(?![\\\\w<:.]))(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()(\\\\*)(?:(?:\\\\s)+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:(?:\\\\s)+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:(?:\\\\s)+)?)*(\\\\))(?:(?:\\\\s)+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=[{=,);>]|\\\\n)(?!\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.parameter.pointer.function.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functional_specifiers_pre_parameters\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:(?:__forceinline__)|(?:__noinline__)|(?:__global__)|(?:__device__)|(?:constexpr)|(?:explicit)|(?:__host__)|(?:mutable)|(?:virtual)|(?:inline)|(?:friend))(?!\\\\w)\",\n\t\t\t\"name\": \"storage.modifier.specifier.functional.pre-parameters.$0.cuda-cpp\"\n\t\t},\n\t\t\"gcc_attributes\": {\n\t\t\t\"begin\": \"__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(\",\n\t\t\t\"end\": \"\\\\)\\\\s*\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)(?:\\\\s)+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"goto_statement\": {\n\t\t\t\"match\": \"((?<!\\\\w)goto(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.goto.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.label.call.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"identifier\": {\n\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\"\n\t\t},\n\t\t\"include\": {\n\t\t\t\"match\": \"^((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((#)(?:(?:\\\\s)+)?((?:include|include_next))\\\\b)(?:(?:\\\\s)+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=\\\\/\\\\/)))|((\\\\\\\")[^\\\\\\\"]*((?:\\\\\\\")?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=\\\\/\\\\/))))|(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\.(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)*((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=(?:\\\\/\\\\/|;)))))|((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:\\\\n)|$)|(?=(?:\\\\/\\\\/|;))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.$5.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.include.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.include.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.include.cuda-cpp\"\n\t\t},\n\t\t\"inheritance_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.inheritance.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:protected)|(?:private)|(?:public))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)virtual(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.virtual.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=protected|virtual|private|public|,|:)(?:(?:\\\\s)+)?(?!(?:(?:(?:protected)|(?:private)|(?:public))|virtual))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)(?:\\\\s)*+)?::)*+)?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_builtin_storage_type\": {\n\t\t\t\"match\": \"(?:\\\\s)*+(?<!\\\\w)(?:(?:(?:((?:(?:threadIdx)|(?:unsigned)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:wchar_t)|(?:gridDim)|(?:signed)|(?:double)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:char)|(?:long)|(?:bool)|(?:int)))|((?:(?:uint_least16_t)|(?:uint_least32_t)|(?:uint_least64_t)|(?:int_least16_t)|(?:int_least32_t)|(?:int_least64_t)|(?:uint_least8_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:uint_fast64_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:suseconds_t)|(?:int_fast8_t)|(?:useconds_t)|(?:ulonglong1)|(?:ulonglong2)|(?:ulonglong3)|(?:ulonglong4)|(?:blksize_t)|(?:in_addr_t)|(?:in_port_t)|(?:uintptr_t)|(?:uintmax_t)|(?:uintmax_t)|(?:uintmax_t)|(?:longlong1)|(?:longlong2)|(?:longlong3)|(?:longlong4)|(?:u_quad_t)|(?:blkcnt_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:intptr_t)|(?:intmax_t)|(?:intmax_t)|(?:u_short)|(?:qaddr_t)|(?:caddr_t)|(?:daddr_t)|(?:fixpt_t)|(?:nlink_t)|(?:segsz_t)|(?:swblk_t)|(?:clock_t)|(?:ssize_t)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:ushort1)|(?:ushort2)|(?:ushort3)|(?:ushort4)|(?:double1)|(?:double2)|(?:double3)|(?:double4)|(?:u_char)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:time_t)|(?:int8_t)|(?:uchar1)|(?:uchar2)|(?:uchar3)|(?:uchar4)|(?:short1)|(?:short2)|(?:short3)|(?:short4)|(?:ulong4)|(?:ulong1)|(?:ulong2)|(?:ulong3)|(?:ulong4)|(?:float1)|(?:float2)|(?:float3)|(?:float4)|(?:u_int)|(?:div_t)|(?:dev_t)|(?:gid_t)|(?:ino_t)|(?:key_t)|(?:pid_t)|(?:off_t)|(?:uid_t)|(?:char1)|(?:char2)|(?:char3)|(?:char4)|(?:uint1)|(?:uint2)|(?:uint3)|(?:uint4)|(?:long1)|(?:long2)|(?:long3)|(?:uint)|(?:id_t)|(?:id_t)|(?:int1)|(?:int2)|(?:int3)|(?:int4)|(?:dim3))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_attr_t)|(?:pthread_cond_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_](?:\\\\w)*_t))(?!\\\\w)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.primitive.cuda-cpp storage.type.built-in.primitive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.cuda-cpp storage.type.built-in.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cuda-cpp support.type.built-in.posix-reserved.pthread.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.cuda-cpp support.type.built-in.posix-reserved.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"inline_comment\": {\n\t\t\t\"match\": \"(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"invalid_comment_end\": {\n\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\"name\": \"invalid.illegal.unexpected.punctuation.definition.comment.end.cuda-cpp\"\n\t\t},\n\t\t\"label\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\b(?<!case|default)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(:)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.label.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.label.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"lambdas\": {\n\t\t\t\"begin\": \"(?:(?<=[^\\\\s]|^)(?<![\\\\w\\\\]\\\\)\\\\[\\\\*&\\\">])|(?<=\\\\Wreturn|^return))(?:(?:\\\\s)+)?(\\\\[(?!\\\\[| *+\\\"| *+\\\\d))((?:[^\\\\[\\\\]]|((?<!\\\\[)\\\\[(?!\\\\[)(?:[^\\\\[\\\\]]*+\\\\g<3>?)++\\\\]))*+)(\\\\](?!((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))[\\\\[\\\\];]))\",\n\t\t\t\"end\": \"(?<=[;}])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.begin.lambda.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.lambda.capture.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?=\\\\]|\\\\z|$)|(,))|(\\\\=))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.capture.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.end.lambda.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.lambda.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.lambda.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.parameters.lambda.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:constexpr)|(?:consteval)|(?:mutable))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.modifier.lambda.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(->)((?:.+?(?=\\\\{|$))?)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.lambda.return-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.return-type.lambda.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.lambda.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.lambda.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.body.lambda.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"language_constants\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:(?:nullptr)|(?:false)|(?:NULL)|(?:true))(?!\\\\w)\",\n\t\t\t\"name\": \"constant.language.$0.cuda-cpp\"\n\t\t},\n\t\t\"line\": {\n\t\t\t\"begin\": \"^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?line\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.line.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.line.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\/)\",\n\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"comment.line.double-slash.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_continuation_character\": {\n\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\"name\": \"constant.character.escape.line-continuation.cuda-cpp\"\n\t\t},\n\t\t\"macro\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?define\\\\b)(?:(?:\\\\s)+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.define.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.macro.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\G(?:(?:\\\\s)+)?(\\\\()([^\\\\(]*)(\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.preprocessor.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[(,])(?:(?:\\\\s)+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:(?:\\\\s)+)?\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.variable.parameter.preprocessor.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.preprocessor.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro_argument\": {\n\t\t\t\"match\": \"##?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\"name\": \"variable.other.macro.argument.cuda-cpp\"\n\t\t},\n\t\t\"macro_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp.embedded.macro\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro_name\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\"name\": \"entity.name.function.preprocessor.cuda-cpp\"\n\t\t},\n\t\t\"member_access\": {\n\t\t\t\"match\": \"(?:((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:(?:\\\\s)+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:(?:\\\\s)+)?(?:(?:\\\\.\\\\*|\\\\.)|(?:->\\\\*|->))(?:(?:\\\\s)+)?)*)(?:(?:\\\\s)+)?(\\\\b(?!uint_least16_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint_least32_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint_least64_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_least16_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_least32_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_least64_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint_least8_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint_fast16_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint_fast32_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint_fast64_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_least8_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_fast16_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_fast32_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_fast64_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint_fast8_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|suseconds_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int_fast8_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|useconds_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulonglong1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulonglong2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulonglong3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulonglong4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|blksize_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|in_addr_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|in_port_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uintptr_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uintmax_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uintmax_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uintmax_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|longlong1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|longlong2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|longlong3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|longlong4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|unsigned[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|u_quad_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|blkcnt_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint16_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint32_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint64_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|intptr_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|intmax_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|intmax_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|wchar_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|u_short[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|qaddr_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|caddr_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|daddr_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|fixpt_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|nlink_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|segsz_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|swblk_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|clock_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ssize_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int16_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int32_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int64_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint8_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ushort1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ushort2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ushort3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ushort4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|double1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|double2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|double3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|double4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|signed[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|double[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|u_char[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|u_long[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ushort[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|quad_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|mode_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|size_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|time_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int8_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uchar1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uchar2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uchar3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uchar4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|short1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|short2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|short3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|short4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulong4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulong1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulong2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulong3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ulong4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|float1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|float2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|float3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|float4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|short[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|float[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|u_int[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|div_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|dev_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|gid_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|ino_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|key_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|pid_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|off_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uid_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|char1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|char2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|char3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|char4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|long1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|long2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|long3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|auto[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|void[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|char[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|long[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|bool[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|uint[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|id_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|id_t[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int1[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int2[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int4[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|dim3[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)]|int[^Pattern.new(\\n  match: \\\\/\\\\w\\\\/,\\n)])(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?!\\\\())\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=(?:\\\\.\\\\*|\\\\.|->|->\\\\*))(?:(?:\\\\s)+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:(?:\\\\s)+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:(?:\\\\s)+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"variable.other.property.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"memory_operators\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:(?:(delete)(?:(?:\\\\s)+)?(\\\\[\\\\])|(delete))|(new))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.array.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.array.bracket.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"keyword.operator.new.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"method_access\": {\n\t\t\t\"begin\": \"(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:(?:\\\\s)+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:(?:\\\\s)+)?(?:(?:\\\\.\\\\*|\\\\.)|(?:->\\\\*|->))(?:(?:\\\\s)+)?)*)(?:(?:\\\\s)+)?(~?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:(?:\\\\s)+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=(?:\\\\.\\\\*|\\\\.|->|->\\\\*))(?:(?:\\\\s)+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:(?:\\\\s)+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)this(?!\\\\w))|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*|(?<=\\\\]|\\\\)))(?:(?:\\\\s)+)?))(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.function.member.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"misc_keywords\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:(?:requires)|(?:typedef)|(?:concept)|(?:export)|(?:module))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.other.$3.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"ms_attributes\": {\n\t\t\t\"begin\": \"__declspec\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)(?:\\\\s)+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace_alias\": {\n\t\t\t\"match\": \"(?<!\\\\w)(namespace)(?:\\\\s)+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(?:\\\\s)+)?(\\\\=)(?:(?:\\\\s)+)?(((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<8>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)(?:(?:\\\\s)+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(?:\\\\s)+)?(?:(;)|\\\\n))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.alias.cuda-cpp storage.type.namespace.alias.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.alias.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.declaration.namespace.alias.value.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.alias.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.declaration.namespace.alias.cuda-cpp\"\n\t\t},\n\t\t\"namespace_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)namespace(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.namespace.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.definition.cuda-cpp storage.type.namespace.definition.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.namespace.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.namespace.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.namespace.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<4>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)(?:(?:\\\\s)+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(?:\\\\s)+)?(?:(::)(?:(?:\\\\s)+)?(inline))?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.scope-resolution.namespace.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.inline.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.namespace.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.namespace.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.namespace.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"noexcept_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.noexcept.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"number_literal\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.user-defined.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.user-defined.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.user-defined.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.user-defined.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.user-defined.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])((?:\\\\+)?)((?:\\\\-)?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.user-defined.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"operator_overload\": {\n\t\t\t\"begin\": \"(?:(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<55>?)+>)(?:\\\\s)*+)?::)*+)?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<55>?)+>)?(?![\\\\w<:.]))(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<55>?)+>)(?:\\\\s)*+)?::)*+)(operator)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<55>?)+>)(?:\\\\s)*+)?::)*+)(?:(?:((?:(?:delete\\\\[\\\\])|(?:delete)|(?:new\\\\[\\\\])|(?:new)|(?:\\\\->\\\\*)|(?:<<=)|(?:>>=)|(?:<=>)|(?:\\\\+\\\\+)|(?:\\\\-\\\\-)|(?:\\\\(\\\\))|(?:\\\\[\\\\])|(?:\\\\->)|(?:\\\\+\\\\+)|(?:\\\\-\\\\-)|(?:<<)|(?:>>)|(?:<=)|(?:>=)|(?:==)|(?:!=)|(?:&&)|(?:\\\\|\\\\|)|(?:\\\\+=)|(?:\\\\-=)|(?:\\\\*=)|(?:\\\\/=)|(?:%=)|(?:&=)|(?:\\\\^=)|(?:\\\\|=)|(?:\\\\+)|(?:\\\\-)|!|~|(?:\\\\*)|&|(?:\\\\*)|(?:\\\\/)|%|(?:\\\\+)|(?:\\\\-)|<|>|&|(?:\\\\^)|(?:\\\\|)|=|,))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:\\\\[\\\\])?)))|(\\\"\\\")((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\<|\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.operator.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"47\": {},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"keyword.other.operator.overload.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.operator-overload.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator-overload.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"58\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"59\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"60\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"61\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"62\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"63\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"64\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"65\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"66\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"67\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"68\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"69\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"70\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"71\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.array.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"72\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"73\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"74\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"75\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"76\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"77\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"78\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"79\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"80\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"81\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.operator-overload.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.operator-overload.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.operator-overload.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.operator-overload.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.operator-overload\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.operator-overload.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.operator-overload.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.operator-overload.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.sizeof.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.alignof.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.alignas.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.typeid.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.noexcept.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.sizeof.variadic.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%=|\\\\+=|-=|\\\\*=|(?<!\\\\()\\\\/=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&=|\\\\^=|<<=|>>=|\\\\|=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<<|>>\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\"name\": \"keyword.operator.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assignment_operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%|\\\\*|\\\\/|-|\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ternary_operator\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"over_qualified_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(struct)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.struct.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(enum)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.enum.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(union)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.union.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(class)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:__constant__)|(?:__restrict__)|(?:__managed__)|(?:__shared__)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))+)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:\\\\s)*+(?<!\\\\w)(?:(?:(?:((?:(?:threadIdx)|(?:unsigned)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:wchar_t)|(?:gridDim)|(?:signed)|(?:double)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:char)|(?:long)|(?:bool)|(?:int)))|((?:(?:uint_least16_t)|(?:uint_least32_t)|(?:uint_least64_t)|(?:int_least16_t)|(?:int_least32_t)|(?:int_least64_t)|(?:uint_least8_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:uint_fast64_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:suseconds_t)|(?:int_fast8_t)|(?:useconds_t)|(?:ulonglong1)|(?:ulonglong2)|(?:ulonglong3)|(?:ulonglong4)|(?:blksize_t)|(?:in_addr_t)|(?:in_port_t)|(?:uintptr_t)|(?:uintmax_t)|(?:uintmax_t)|(?:uintmax_t)|(?:longlong1)|(?:longlong2)|(?:longlong3)|(?:longlong4)|(?:u_quad_t)|(?:blkcnt_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:intptr_t)|(?:intmax_t)|(?:intmax_t)|(?:u_short)|(?:qaddr_t)|(?:caddr_t)|(?:daddr_t)|(?:fixpt_t)|(?:nlink_t)|(?:segsz_t)|(?:swblk_t)|(?:clock_t)|(?:ssize_t)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:ushort1)|(?:ushort2)|(?:ushort3)|(?:ushort4)|(?:double1)|(?:double2)|(?:double3)|(?:double4)|(?:u_char)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:time_t)|(?:int8_t)|(?:uchar1)|(?:uchar2)|(?:uchar3)|(?:uchar4)|(?:short1)|(?:short2)|(?:short3)|(?:short4)|(?:ulong4)|(?:ulong1)|(?:ulong2)|(?:ulong3)|(?:ulong4)|(?:float1)|(?:float2)|(?:float3)|(?:float4)|(?:u_int)|(?:div_t)|(?:dev_t)|(?:gid_t)|(?:ino_t)|(?:key_t)|(?:pid_t)|(?:off_t)|(?:uid_t)|(?:char1)|(?:char2)|(?:char3)|(?:char4)|(?:uint1)|(?:uint2)|(?:uint3)|(?:uint4)|(?:long1)|(?:long2)|(?:long3)|(?:uint)|(?:id_t)|(?:id_t)|(?:int1)|(?:int2)|(?:int3)|(?:int4)|(?:dim3))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_attr_t)|(?:pthread_cond_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_](?:\\\\w)*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\W__constant__|^__constant__|\\\\W__restrict__|^__restrict__|\\\\W__managed__|^__managed__|\\\\W__shared__|^__shared__|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cuda-cpp storage.type.built-in.primitive.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cuda-cpp storage.type.built-in.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cuda-cpp support.type.built-in.posix-reserved.pthread.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cuda-cpp support.type.built-in.posix-reserved.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?:struct)|(?:class)|(?:union)|(?:enum))\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\)|,|\\\\[|=|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter_class\": {\n\t\t\t\"match\": \"(class)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_enum\": {\n\t\t\t\"match\": \"(enum)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_or_maybe_value\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#curly_initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:__constant__)|(?:__restrict__)|(?:__managed__)|(?:__shared__)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))+)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:\\\\s)*+(?<!\\\\w)(?:(?:(?:((?:(?:threadIdx)|(?:unsigned)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:wchar_t)|(?:gridDim)|(?:signed)|(?:double)|(?:short)|(?:float)|(?:auto)|(?:void)|(?:char)|(?:long)|(?:bool)|(?:int)))|((?:(?:uint_least16_t)|(?:uint_least32_t)|(?:uint_least64_t)|(?:int_least16_t)|(?:int_least32_t)|(?:int_least64_t)|(?:uint_least8_t)|(?:uint_fast16_t)|(?:uint_fast32_t)|(?:uint_fast64_t)|(?:int_least8_t)|(?:int_fast16_t)|(?:int_fast32_t)|(?:int_fast64_t)|(?:uint_fast8_t)|(?:suseconds_t)|(?:int_fast8_t)|(?:useconds_t)|(?:ulonglong1)|(?:ulonglong2)|(?:ulonglong3)|(?:ulonglong4)|(?:blksize_t)|(?:in_addr_t)|(?:in_port_t)|(?:uintptr_t)|(?:uintmax_t)|(?:uintmax_t)|(?:uintmax_t)|(?:longlong1)|(?:longlong2)|(?:longlong3)|(?:longlong4)|(?:u_quad_t)|(?:blkcnt_t)|(?:uint16_t)|(?:uint32_t)|(?:uint64_t)|(?:intptr_t)|(?:intmax_t)|(?:intmax_t)|(?:u_short)|(?:qaddr_t)|(?:caddr_t)|(?:daddr_t)|(?:fixpt_t)|(?:nlink_t)|(?:segsz_t)|(?:swblk_t)|(?:clock_t)|(?:ssize_t)|(?:int16_t)|(?:int32_t)|(?:int64_t)|(?:uint8_t)|(?:ushort1)|(?:ushort2)|(?:ushort3)|(?:ushort4)|(?:double1)|(?:double2)|(?:double3)|(?:double4)|(?:u_char)|(?:u_long)|(?:ushort)|(?:quad_t)|(?:mode_t)|(?:size_t)|(?:time_t)|(?:int8_t)|(?:uchar1)|(?:uchar2)|(?:uchar3)|(?:uchar4)|(?:short1)|(?:short2)|(?:short3)|(?:short4)|(?:ulong4)|(?:ulong1)|(?:ulong2)|(?:ulong3)|(?:ulong4)|(?:float1)|(?:float2)|(?:float3)|(?:float4)|(?:u_int)|(?:div_t)|(?:dev_t)|(?:gid_t)|(?:ino_t)|(?:key_t)|(?:pid_t)|(?:off_t)|(?:uid_t)|(?:char1)|(?:char2)|(?:char3)|(?:char4)|(?:uint1)|(?:uint2)|(?:uint3)|(?:uint4)|(?:long1)|(?:long2)|(?:long3)|(?:uint)|(?:id_t)|(?:id_t)|(?:int1)|(?:int2)|(?:int3)|(?:int4)|(?:dim3))))|((?:(?:pthread_rwlockattr_t)|(?:pthread_mutexattr_t)|(?:pthread_condattr_t)|(?:pthread_rwlock_t)|(?:pthread_mutex_t)|(?:pthread_attr_t)|(?:pthread_cond_t)|(?:pthread_once_t)|(?:pthread_key_t)|(?:pthread_t))))|([a-zA-Z_](?:\\\\w)*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\W__constant__|^__constant__|\\\\W__restrict__|^__restrict__|\\\\W__managed__|^__managed__|\\\\W__shared__|^__shared__|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cuda-cpp storage.type.built-in.primitive.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cuda-cpp storage.type.built-in.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cuda-cpp support.type.built-in.posix-reserved.pthread.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cuda-cpp support.type.built-in.posix-reserved.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?:struct)|(?:class)|(?:union)|(?:enum))\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=(?:\\\\)|,|\\\\[|=|\\\\/\\\\/|(?:(?:\\\\n)|$)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter_struct\": {\n\t\t\t\"match\": \"(struct)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.struct.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.struct.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_union\": {\n\t\t\t\"match\": \"(union)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:\\\\[((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\]((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.union.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.union.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#over_qualified_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!:):(?!:)\",\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.range-based.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma\": {\n\t\t\t\"begin\": \"^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?pragma\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.pragma.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma_mark\": {\n\t\t\t\"match\": \"(^((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?pragma(?:\\\\s)+mark)(?:\\\\s)+(.*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.pragma-mark.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.pragma-mark.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.pragma.cuda-cpp\"\n\t\t},\n\t\t\"predefined_macros\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(__cplusplus|__DATE__|__FILE__|__LINE__|__STDC__|__STDC_HOSTED__|__STDC_NO_COMPLEX__|__STDC_VERSION__|__STDCPP_THREADS__|__TIME__|NDEBUG|__OBJC__|__ASSEMBLER__|__ATOM__|__AVX__|__AVX2__|_CHAR_UNSIGNED|__CLR_VER|_CONTROL_FLOW_GUARD|__COUNTER__|__cplusplus_cli|__cplusplus_winrt|_CPPRTTI|_CPPUNWIND|_DEBUG|_DLL|__FUNCDNAME__|__FUNCSIG__|__FUNCTION__|_INTEGRAL_MAX_BITS|__INTELLISENSE__|_ISO_VOLATILE|_KERNEL_MODE|_M_AMD64|_M_ARM|_M_ARM_ARMV7VE|_M_ARM_FP|_M_ARM64|_M_CEE|_M_CEE_PURE|_M_CEE_SAFE|_M_FP_EXCEPT|_M_FP_FAST|_M_FP_PRECISE|_M_FP_STRICT|_M_IX86|_M_IX86_FP|_M_X64|_MANAGED|_MSC_BUILD|_MSC_EXTENSIONS|_MSC_FULL_VER|_MSC_VER|_MSVC_LANG|__MSVC_RUNTIME_CHECKS|_MT|_NATIVE_WCHAR_T_DEFINED|_OPENMP|_PREFAST|__TIMESTAMP__|_VC_NO_DEFAULTLIB|_WCHAR_T_DEFINED|_WIN32|_WIN64|_WINRT_DLL|_ATL_VER|_MFC_VER|__GFORTRAN__|__GNUC__|__GNUC_MINOR__|__GNUC_PATCHLEVEL__|__GNUG__|__STRICT_ANSI__|__BASE_FILE__|__INCLUDE_LEVEL__|__ELF__|__VERSION__|__OPTIMIZE__|__OPTIMIZE_SIZE__|__NO_INLINE__|__GNUC_STDC_INLINE__|__CHAR_UNSIGNED__|__WCHAR_UNSIGNED__|__REGISTER_PREFIX__|__REGISTER_PREFIX__|__SIZE_TYPE__|__PTRDIFF_TYPE__|__WCHAR_TYPE__|__WINT_TYPE__|__INTMAX_TYPE__|__UINTMAX_TYPE__|__SIG_ATOMIC_TYPE__|__INT8_TYPE__|__INT16_TYPE__|__INT32_TYPE__|__INT64_TYPE__|__UINT8_TYPE__|__UINT16_TYPE__|__UINT32_TYPE__|__UINT64_TYPE__|__INT_LEAST8_TYPE__|__INT_LEAST16_TYPE__|__INT_LEAST32_TYPE__|__INT_LEAST64_TYPE__|__UINT_LEAST8_TYPE__|__UINT_LEAST16_TYPE__|__UINT_LEAST32_TYPE__|__UINT_LEAST64_TYPE__|__INT_FAST8_TYPE__|__INT_FAST16_TYPE__|__INT_FAST32_TYPE__|__INT_FAST64_TYPE__|__UINT_FAST8_TYPE__|__UINT_FAST16_TYPE__|__UINT_FAST32_TYPE__|__UINT_FAST64_TYPE__|__INTPTR_TYPE__|__UINTPTR_TYPE__|__CHAR_BIT__|__SCHAR_MAX__|__WCHAR_MAX__|__SHRT_MAX__|__INT_MAX__|__LONG_MAX__|__LONG_LONG_MAX__|__WINT_MAX__|__SIZE_MAX__|__PTRDIFF_MAX__|__INTMAX_MAX__|__UINTMAX_MAX__|__SIG_ATOMIC_MAX__|__INT8_MAX__|__INT16_MAX__|__INT32_MAX__|__INT64_MAX__|__UINT8_MAX__|__UINT16_MAX__|__UINT32_MAX__|__UINT64_MAX__|__INT_LEAST8_MAX__|__INT_LEAST16_MAX__|__INT_LEAST32_MAX__|__INT_LEAST64_MAX__|__UINT_LEAST8_MAX__|__UINT_LEAST16_MAX__|__UINT_LEAST32_MAX__|__UINT_LEAST64_MAX__|__INT_FAST8_MAX__|__INT_FAST16_MAX__|__INT_FAST32_MAX__|__INT_FAST64_MAX__|__UINT_FAST8_MAX__|__UINT_FAST16_MAX__|__UINT_FAST32_MAX__|__UINT_FAST64_MAX__|__INTPTR_MAX__|__UINTPTR_MAX__|__WCHAR_MIN__|__WINT_MIN__|__SIG_ATOMIC_MIN__|__SCHAR_WIDTH__|__SHRT_WIDTH__|__INT_WIDTH__|__LONG_WIDTH__|__LONG_LONG_WIDTH__|__PTRDIFF_WIDTH__|__SIG_ATOMIC_WIDTH__|__SIZE_WIDTH__|__WCHAR_WIDTH__|__WINT_WIDTH__|__INT_LEAST8_WIDTH__|__INT_LEAST16_WIDTH__|__INT_LEAST32_WIDTH__|__INT_LEAST64_WIDTH__|__INT_FAST8_WIDTH__|__INT_FAST16_WIDTH__|__INT_FAST32_WIDTH__|__INT_FAST64_WIDTH__|__INTPTR_WIDTH__|__INTMAX_WIDTH__|__SIZEOF_INT__|__SIZEOF_LONG__|__SIZEOF_LONG_LONG__|__SIZEOF_SHORT__|__SIZEOF_POINTER__|__SIZEOF_FLOAT__|__SIZEOF_DOUBLE__|__SIZEOF_LONG_DOUBLE__|__SIZEOF_SIZE_T__|__SIZEOF_WCHAR_T__|__SIZEOF_WINT_T__|__SIZEOF_PTRDIFF_T__|__BYTE_ORDER__|__ORDER_LITTLE_ENDIAN__|__ORDER_BIG_ENDIAN__|__ORDER_PDP_ENDIAN__|__FLOAT_WORD_ORDER__|__DEPRECATED|__EXCEPTIONS|__GXX_RTTI|__USING_SJLJ_EXCEPTIONS__|__GXX_EXPERIMENTAL_CXX0X__|__GXX_WEAK__|__NEXT_RUNTIME__|__LP64__|_LP64|__SSP__|__SSP_ALL__|__SSP_STRONG__|__SSP_EXPLICIT__|__SANITIZE_ADDRESS__|__SANITIZE_THREAD__|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16|__HAVE_SPECULATION_SAFE_VALUE|__GCC_HAVE_DWARF2_CFI_ASM|__FP_FAST_FMA|__FP_FAST_FMAF|__FP_FAST_FMAL|__FP_FAST_FMAF16|__FP_FAST_FMAF32|__FP_FAST_FMAF64|__FP_FAST_FMAF128|__FP_FAST_FMAF32X|__FP_FAST_FMAF64X|__FP_FAST_FMAF128X|__GCC_IEC_559|__GCC_IEC_559_COMPLEX|__NO_MATH_ERRNO__|__has_builtin|__has_feature|__has_extension|__has_cpp_attribute|__has_c_attribute|__has_attribute|__has_declspec_attribute|__is_identifier|__has_include|__has_include_next|__has_warning|__BASE_FILE__|__FILE_NAME__|__clang__|__clang_major__|__clang_minor__|__clang_patchlevel__|__clang_version__|__fp16|_Float16)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.$1.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b__([A-Z_]+)__\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$1.cuda-cpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_defined\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#d9bc4796b0b_preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_defined\": {\n\t\t\t\"begin\": \"((?<!\\\\w)defined(?!\\\\w))(\\\\()\",\n\t\t\t\"end\": \"(?:\\\\)|(?<!\\\\\\\\)(?=\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.defined.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.preprocessor.conditional.cuda-cpp\"\n\t\t},\n\t\t\"preprocessor_conditional_range\": {\n\t\t\t\"begin\": \"^((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?((?:(?:ifndef|ifdef)|if))\",\n\t\t\t\"end\": \"^(?!\\\\s*+#\\\\s*(?:else|endif))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.$6.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?<=ifndef|ifdef|if)\",\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.preprocessor.conditional.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor_conditional_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_standalone\": {\n\t\t\t\"match\": \"^((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?((?<!\\\\w)(?:endif|else|elif)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"keyword.control.directive.$4.cuda-cpp\"\n\t\t},\n\t\t\"preprocessor_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single_line_macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qualified_type\": {\n\t\t\t\"match\": \"\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<11>?)+>)(?:\\\\s)*+)?::)*+)?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<11>?)+>)?(?![\\\\w<:.])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\"\n\t\t},\n\t\t\"qualifiers_and_specifiers_post_parameters\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?:((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?<!\\\\w)(?:(?:override)|(?:volatile)|(?:noexcept)|(?:final)|(?:const))(?!\\\\w))+(?=\\\\s*(?:(?:\\\\{|;)|[\\\\n\\\\r])))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$3.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_call\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_call_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.call.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.definition.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_operator_overload\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_operator_overload_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_operator_overload_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_operator_overload_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.definition.operator-overload.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_alias\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.alias.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_alias_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.alias.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.alias.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.alias.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_block\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_block_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.block.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_using\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.using.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_using_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.using.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.using.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.using.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_parameter\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_parameter_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.parameter.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.parameter.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_call\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.template.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_call_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.template.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.template.call.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.template.call.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_definition\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<3>?)+>)(?:\\\\s)*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.template.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_definition_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<7>?)+>)(?:\\\\s)*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.template.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.template.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.template.definition.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"semicolon\": {\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t},\n\t\t\"simple_type\": {\n\t\t\t\"match\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)(?:\\\\s)*+)?::)*+)?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<12>?)+>)?(?![\\\\w<:.]))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"single_line_macro\": {\n\t\t\t\"match\": \"^((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))#define.*(?<![\\\\\\\\])(?:(?:\\\\n)|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"sizeof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.sizeof.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sizeof_variadic_operator\": {\n\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.sizeof.variadic.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"square_brackets\": {\n\t\t\t\"name\": \"meta.bracket.square.access\",\n\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.object\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"standard_declares\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)struct(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.struct.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)union(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.union.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)enum(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.enum.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)class(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"static_assert\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)static_assert|_Static_assert(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.other.static_assert.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.static_assert.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.static_assert.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(,)(?:(?:\\\\s)+)?(?=(?:L|u8|u|U(?:(?:\\\\s)+)?\\\\\\\")?)\",\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.static_assert.message.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"std_space\": {\n\t\t\t\"match\": \"(?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"storage_specifiers\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:(?:__constant__)|(?:__restrict__)|(?:__managed__)|(?:__shared__)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.$3.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"storage_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_builtin_storage_type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typename\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?)\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8})\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\"?\\\\\\\\abfnrtv]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[0-7]{1,3}\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escapes_context_c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![0-9A-Fa-f])((?:u|u8|U|L)?)'\",\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escapes_context_c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:(?:_r|re)|regex)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:(?:_r|re)|regex)\\\\\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.regex.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.regexp.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:glsl|GLSL)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:glsl|GLSL)\\\\\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.string.quoted.double.raw.glsl.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.glsl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:[pP]?(?:sql|SQL)|d[dm]l)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:[pP]?(?:sql|SQL)|d[dm]l)\\\\\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.string.quoted.double.raw.sql.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?R)\\\"(?:([^ ()\\\\\\\\\\\\t]{0,16})|([^ ()\\\\\\\\\\\\t]*))\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\\\\2(\\\\3)\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escapes_context_c\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\"name\": \"constant.character.escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?!%')(?!%\\\")%\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.struct.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.struct.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.struct.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.struct.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.struct.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)struct(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.struct.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.struct.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"switch_conditional_parentheses\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.conditional.switch.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.conditional.switch.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.switch.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)switch(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.switch.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.switch.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.switch.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.switch.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.switch.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch_conditional_parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.switch.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.switch.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#default_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.switch.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_argument_defaulted\": {\n\t\t\t\"match\": \"(?<=<|,)(?:(?:\\\\s)+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\s)+)*)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:(?:\\\\s)+)?([=])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"template_call_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma_in_template_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualified_type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_call_innards\": {\n\t\t\t\"match\": \"((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<1>?)+>)(?:\\\\s)*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.call.cuda-cpp\"\n\t\t},\n\t\t\"template_call_range\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"end\": \">\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(template)(?:(?:\\\\s)+)?(<)\",\n\t\t\t\"end\": \">\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.start.template.definition.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.definition.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\w)(?:(?:\\\\s)+)?<\",\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition_argument\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\s)+)+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))|((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:(?:\\\\s)+)?(\\\\.\\\\.\\\\.)(?:(?:\\\\s)+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))(?:(?:\\\\s)+)?(?:(,)|(?=>|$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$3.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.argument.$0.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.template.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.template.argument.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"template_definition_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_argument_defaulted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_innards\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_isolated_definition\": {\n\t\t\t\"match\": \"(?<!\\\\w)(template)(?:(?:\\\\s)+)?(<)(.*)(>(?:(?:\\\\s)+)?$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.start.template.definition.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.template.definition.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_definition_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"ternary_operator\": {\n\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\"end\": \":\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"applyEndPatternLast\": 1\n\t\t},\n\t\t\"the_this_keyword\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)this(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"type_alias\": {\n\t\t\t\"match\": \"(using)(?:(?:\\\\s)+)?(?!namespace)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<29>?)+>)(?:\\\\s)*+)?::)*+)?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<29>?)+>)?(?![\\\\w<:.]))(?:(?:\\\\s)+)?(\\\\=)(?:(?:\\\\s)+)?((?:typename)?)(?:(?:\\\\s)+)?((?:(?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))(?<!\\\\w)(?:(?:__constant__)|(?:__restrict__)|(?:__managed__)|(?:__shared__)|(?:volatile)|(?:register)|(?:restrict)|(?:static)|(?:extern)|(?:const))(?!\\\\w)(?:\\\\s)+)+)?(?:(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<29>?)+>)(?:\\\\s)*+)?::)*+)?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<29>?)+>)?(?![\\\\w<:.]))|(.*(?<!;)))(?:(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?:(\\\\[)(\\\\w*)(\\\\])(?:(?:\\\\s)+)?)?(?:(?:\\\\s)+)?(?:(;)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"keyword.other.typename.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"meta.declaration.type.alias.value.unknown.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.declaration.type.alias.cuda-cpp\"\n\t\t},\n\t\t\"type_casting_operators\": {\n\t\t\t\"match\": \"((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:(?:reinterpret_cast)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cuda-cpp keyword.operator.cast.$3.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"typedef_class\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:(?:\\\\s)+)?(?=(?<!\\\\w)class(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.class.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.class.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.class.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_function_pointer\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:(?:\\\\s)+)?(?=.*\\\\(\\\\*\\\\s*(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\s*\\\\))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)(?:\\\\s)*+)?::)*+)?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<18>?)+>)?(?![\\\\w<:.]))(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()(\\\\*)(?:(?:\\\\s)+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:(?:\\\\s)+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:(?:\\\\s)+)?)*(\\\\))(?:(?:\\\\s)+)?(\\\\()\",\n\t\t\t\t\t\"end\": \"(\\\\))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=[{=,);>]|\\\\n)(?!\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cuda-cpp entity.name.type.pointer.function.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_struct\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:(?:\\\\s)+)?(?=(?<!\\\\w)struct(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.struct.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.struct.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.struct.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_union\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:(?:\\\\s)+)?(?=(?<!\\\\w)union(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.union.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.union.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.union.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typeid_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cuda-cpp keyword.operator.typeid.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typename\": {\n\t\t\t\"match\": \"(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?<!\\\\w)typename(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<17>?)+>)(?:\\\\s)*+)?::)*+)?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:__forceinline__)|(?:atomic_noexcept)|(?:__has_include)|(?:atomic_cancel)|(?:atomic_commit)|(?:dynamic_cast)|(?:__constant__)|(?:__restrict__)|(?:__noinline__)|(?:thread_local)|(?:synchronized)|(?:static_cast)|(?:__managed__)|(?:const_cast)|(?:__shared__)|(?:__global__)|(?:__device__)|(?:co_return)|(?:constexpr)|(?:constexpr)|(?:constexpr)|(?:consteval)|(?:protected)|(?:threadIdx)|(?:namespace)|(?:co_return)|(?:noexcept)|(?:noexcept)|(?:continue)|(?:co_await)|(?:co_yield)|(?:volatile)|(?:register)|(?:restrict)|(?:explicit)|(?:__host__)|(?:override)|(?:volatile)|(?:noexcept)|(?:blockIdx)|(?:blockDim)|(?:warpSize)|(?:template)|(?:operator)|(?:decltype)|(?:typename)|(?:requires)|(?:co_await)|(?:co_yield)|(?:reflexpr)|(?:alignof)|(?:alignas)|(?:default)|(?:nullptr)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:gridDim)|(?:typedef)|(?:__asm__)|(?:concept)|(?:sizeof)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:typeid)|(?:switch)|(?:return)|(?:static)|(?:extern)|(?:inline)|(?:friend)|(?:public)|(?:ifndef)|(?:define)|(?:pragma)|(?:export)|(?:import)|(?:module)|(?:compl)|(?:bitor)|(?:throw)|(?:or_eq)|(?:while)|(?:catch)|(?:break)|(?:false)|(?:const)|(?:final)|(?:const)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:using)|(?:audit)|(?:axiom)|(?:else)|(?:goto)|(?:case)|(?:NULL)|(?:true)|(?:elif)|(?:else)|(?:line)|(?:this)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:for)|(?:try)|(?:asm)|(?:or)|(?:do)|(?:if)|(?:if))\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<17>?)+>)?(?![\\\\w<:.]))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.qualified_type.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:struct)|(?:class)|(?:union)|(?:enum))(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cuda-cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cuda-cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {}\n\t\t\t}\n\t\t},\n\t\t\"undef\": {\n\t\t\t\"match\": \"(^((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(#)(?:(?:\\\\s)+)?undef\\\\b)((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.undef.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.undef.cuda-cpp\"\n\t\t},\n\t\t\"union_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*+)?(?:((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:(?:\\\\s)+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.union.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.union.cuda-cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.union.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.union.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.union.cuda-cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"union_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)union(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))?(?:(?:&|(?:\\\\*))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z))))*(?:&|(?:\\\\*)))?((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:(?>(?:\\\\s)+)|\\\\/\\\\*(?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+(?:\\\\*)++\\\\/)+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.union.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.union.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))+)|(?:\\\\b)|(?=\\\\W)|(?<=\\\\W)|(?:\\\\A)|(?:\\\\Z)))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cuda-cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cuda-cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?>(?:\\\\s)+)|(\\\\/\\\\*)((?:[^\\\\*]|(?:\\\\*)++[^\\\\/])*+((?:\\\\*)++\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.begin.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp punctuation.definition.comment.end.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cuda-cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using_name\": {\n\t\t\t\"match\": \"(using)(?:\\\\s)+(?!namespace\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cuda-cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using_namespace\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(using)(?:\\\\s)+(namespace)(?:\\\\s)+((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|__forceinline__|atomic_noexcept|__has_include|atomic_cancel|atomic_commit|dynamic_cast|__constant__|__restrict__|__noinline__|thread_local|synchronized|static_cast|__managed__|const_cast|__shared__|__global__|__device__|co_return|constexpr|constexpr|constexpr|consteval|protected|namespace|co_return|noexcept|noexcept|continue|co_await|co_yield|volatile|register|restrict|explicit|__host__|volatile|noexcept|template|operator|decltype|typename|requires|co_await|co_yield|reflexpr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|public|ifndef|define|pragma|export|import|module|compl|bitor|throw|or_eq|while|catch|break|class|union|const|const|endif|ifdef|undef|error|using|else|goto|case|enum|elif|else|line|this|not|new|xor|and|for|try|asm|or|do|if|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:(?:[^'\\\"<>]*+|\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|'(?:[^']*|\\\\\\\\')')\\\\g<6>?)+>)(?:\\\\s)*+)?::)*\\\\s*+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?=;|\\\\n)\",\n\t\t\t\"end\": \";\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.directive.cuda-cpp storage.type.namespace.directive.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cuda-cpp punctuation.separator.scope-resolution.namespace.using.cuda-cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cuda-cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.using-namespace.cuda-cpp\"\n\t\t},\n\t\t\"vararg_ellipses\": {\n\t\t\t\"match\": \"(?<!\\\\.)\\\\.\\\\.\\\\.(?!\\\\.)\",\n\t\t\t\"name\": \"punctuation.vararg-ellipses.cuda-cpp\"\n\t\t},\n\t\t\"wordlike_operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:noexcept)|(?:delete)|(?:not_eq)|(?:bitand)|(?:and_eq)|(?:xor_eq)|(?:compl)|(?:bitor)|(?:or_eq)|(?:not)|(?:new)|(?:xor)|(?:and)|(?:or))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cuda-cpp keyword.operator.$0.cuda-cpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/cpp/syntaxes/platform.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/c.tmbundle/blob/master/Syntaxes/Platform.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/c.tmbundle/commit/60daf83b9d45329524f7847a75e9298b3aae5805\",\n\t\"name\": \"Platform\",\n\t\"scopeName\": \"source.c.platform\",\n\t\"comment\": \"This file was generated with clang-C using MacOSX10.15.sdk\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"match\": \"\\\\bkAudioUnitSubType_3DMixer\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.10.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCF(?:CalendarUnitWeek|Gregorian(?:AllUnits|Units(?:Days|Hours|M(?:inutes|onths)|Seconds|Years)))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.10.support.constant.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bLS(?:ApplicationParameters|LaunchFSRefSpec)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.10.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bCFGregorian(?:Date|Units)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.10.support.type.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkLSItem(?:ContentType|Display(?:Kind|Name)|Extension(?:IsHidden)?|File(?:Creator|Type)|IsInvisible|QuarantineProperties|RoleHandlerDisplayName)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.10.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:AudioUnitProperty_(?:3DMixer(?:AttenuationCurve|Distance(?:Atten|Params)|RenderingFlags)|D(?:istanceAttenuationData|opplerShift)|ReverbPreset)|CT(?:Adobe(?:CNS1CharacterCollection|GB1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|CenterTextAlignment|Font(?:A(?:lertHeaderFontType|pplicationFontType)|ControlContentFontType|DefaultOrientation|EmphasizedSystem(?:DetailFontType|FontType)|HorizontalOrientation|LabelFontType|M(?:e(?:nu(?:Item(?:CmdKeyFontType|FontType|MarkFontType)|TitleFontType)|ssageFontType)|ini(?:EmphasizedSystemFontType|SystemFontType))|NoFontType|P(?:aletteFontType|ushButtonFontType)|S(?:mall(?:EmphasizedSystemFontType|SystemFontType|ToolbarFontType)|ystem(?:DetailFontType|FontType))|Tool(?:TipFontType|barFontType)|U(?:serF(?:ixedPitchFontType|ontType)|tilityWindowTitleFontType)|V(?:erticalOrientation|iewsFontType)|WindowTitleFontType)|IdentityMappingCharacterCollection|JustifiedTextAlignment|LeftTextAlignment|NaturalTextAlignment|RightTextAlignment)|LS(?:HandlerOptions(?:Default|IgnoreCreator)|ItemInfo(?:App(?:IsScriptable|Prefers(?:Classic|Native))|ExtensionIsHidden|Is(?:A(?:liasFile|pplication)|C(?:lassicApp|ontainer)|Invisible|NativeApp|P(?:ackage|lainFile)|Symlink|Volume))|Launch(?:InClassic|StartClassic)|Request(?:A(?:ll(?:Flags|Info)|ppTypeFlags)|BasicFlagsOnly|Extension(?:FlagsOnly)?|IconAndKind|TypeCreator)))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.11.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:AUDistanceAttenuationData|LSItemInfoRecord)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.11.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:C(?:F(?:FTPResource(?:Group|Link|Mod(?:Date|e)|Name|Owner|Size|Type)|Stream(?:NetworkServiceTypeVoIP|Property(?:FTP(?:AttemptPersistentConnection|F(?:etchResourceInfo|ileTransferOffset)|P(?:assword|roxy(?:Host|P(?:assword|ort)|User)?)|ResourceSize|Use(?:PassiveMode|rName))|HTTP(?:AttemptPersistentConnection|Final(?:Request|URL)|Proxy(?:Host|Port)?|Re(?:questBytesWrittenCount|sponseHeader)|S(?:Proxy(?:Host|Port)|houldAutoredirect)))))|GImagePropertyExifSubsecTimeOrginal|TCharacterShapeAttributeName)|IOSurfaceIsGlobal|LSSharedFileList(?:Favorite(?:Items|Volumes)|Item(?:BeforeFirst|Hidden|Last)|LoginItemHidden|Recent(?:ApplicationItems|DocumentItems|ItemsMaxAmount|ServerItems)|SessionLoginItems|Volumes(?:ComputerVisible|NetworkVisible))|SecUseNoAuthenticationUI)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.11.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkLSLaunch(?:HasUntrustedContents|InhibitBGOnly|NoParams)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.12.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bOSSpinLock\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.12.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkSC(?:EntNetPPTP|NetworkInterfaceTypePPTP|ValNetInterfaceSubTypePPTP)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.12.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCF(?:StreamSocketSecurityLevelSSLv(?:2|3)|URL(?:CustomIconKey|EffectiveIconKey|LabelColorKey))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.12.support.variable.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:C(?:FNetDiagnostic(?:Connection(?:Down|Indeterminate|Up)|Err|NoErr)|TFontManagerAutoActivationPromptUser)|SecAccessControlTouchID(?:Any|CurrentSet))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.13.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bCFNetDiagnosticStatus\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.13.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkS(?:CPropNetInterfaceSupportsModemOnHold|SLSessionConfig_(?:3DES_fallback|RC4_fallback|TLSv1_(?:3DES_fallback|RC4_fallback)|default)|ecTrustCertificateTransparencyWhiteList)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.13.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:CVOpenGL(?:Buffer(?:Height|InternalFormat|MaximumMipmapLevel|PoolM(?:aximumBufferAgeKey|inimumBufferCountKey)|Target|Width)|TextureCacheChromaSamplingMode(?:Automatic|BestPerformance|HighestQuality|Key))|SecAttrAccessibleAlways(?:ThisDeviceOnly)?)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.14.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:DTLSProtocol1(?:2)?|S(?:SL(?:Aborted|C(?:l(?:ient(?:Cert(?:None|Re(?:jected|quested)|Sent)|Side)|osed)|onnected)|DatagramType|Handshake|Idle|Protocol(?:2|3(?:Only)?|All|Unknown)|S(?:e(?:rverSide|ssionOption(?:Allow(?:Renegotiation|ServerIdentityChange)|BreakOn(?:C(?:ertRequested|lient(?:Auth|Hello))|ServerAuth)|EnableSessionTickets|Fal(?:lback|seStart)|SendOneByteRecord))|treamType))|ecDataAccessEvent(?:Mask)?)|TLSProtocol(?:1(?:1|2|3|Only)?|MaxSupported))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.15.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:MIDIPropertyNameConfiguration|S(?:CPropNetPPP(?:AuthEAPPlugins|Plugins)|SLSessionConfig_(?:ATSv1(?:_noPFS)?|TLSv1_fallback|anonymous|legacy(?:_DHE)?|standard)))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.15.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGColorSpace(?:DisplayP3_PQ_EOTF|ITUR_2020_PQ_EOTF)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.16.support.variable.quartz.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkMIDIProperty(?:FactoryPatchNameFile|UserPatchNameFile)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.2.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFNetServiceFlagIsRegistrationDomain\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.4.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:MDItemFS(?:Exists|Is(?:Readable|Writeable))|S(?:CPropUsersConsoleUser(?:GID|Name|UID)|KLanguageTypes))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.4.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkMDItemSupportFileType\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.5.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CM(?:2(?:Header|ProfileHandle)|4Header|A(?:daptationMatrixType|ppleProfileHeader)|B(?:itmap(?:C(?:allBack(?:ProcPtr|UPP)|olorSpace))?|ufferLocation)|C(?:MY(?:Color|KColor)|hromaticAdaptation|o(?:lor|ncat(?:CallBack(?:ProcPtr|UPP)|ProfileSet))|urveType)|D(?:at(?:aType|eTime(?:Type)?)|evice(?:I(?:D|nfoPtr)|Profile(?:ArrayPtr|I(?:D|nfo)|Scope)|State)|isplayIDType)|F(?:ixedXY(?:Color|ZColor)|loatBitmap)|GrayColor|H(?:LSColor|SVColor|andleLocation)|I(?:ntentCRDVMSize|terateDevice(?:InfoProcPtr|ProfileProcPtr))|L(?:ab(?:Color|ToLabProcPtr)|u(?:t(?:16Type|8Type)|vColor))|M(?:I(?:nfo|terate(?:ProcPtr|UPP))|akeAndModel(?:Type)?|easurementType|ulti(?:Funct(?:CLUTType|LutB2AType)|LocalizedUniCode(?:EntryRec|Type)|channel(?:5Color|6Color|7Color|8Color)))|Na(?:medColor(?:2(?:EntryType|Type)|Type)?|tiveDisplayInfo(?:Type)?)|P(?:S2CRDVMSizeType|a(?:rametricCurveType|thLocation)|rof(?:Loc|ile(?:Iterate(?:Data|ProcPtr|UPP)|Location|MD5(?:Ptr)?|Ref|SequenceDescType)))|RGBColor|S(?:15Fixed16ArrayType|creening(?:ChannelRec|Type)|ignatureType)|T(?:ag(?:ElemTable|Record)|ext(?:DescriptionType|Type))|U(?:16Fixed16ArrayType|Int(?:16ArrayType|32ArrayType|64ArrayType|8ArrayType)|crBgType|nicodeTextType)|Vi(?:deoCardGamma(?:Formula|T(?:able|ype))?|ewingConditionsType)|WorldRef|XYZType|YxyColor)|NCM(?:ConcatProfileS(?:et|pec)|DeviceProfileInfo))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.6.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkC(?:FStream(?:PropertySSLPeerCertificates|SSLAllows(?:AnyRoot|Expired(?:Certificates|Roots)))|VImageBufferTransferFunction_(?:EBU_3213|SMPTE_C))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.6.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:AudioFileFDFTable(?:Extended)?|C(?:E_(?:A(?:ccessDescription|uthority(?:InfoAccess|KeyID))|BasicConstraints|C(?:RLDist(?:PointsSyntax|ributionPoint)|ertPolicies|rl(?:Dist(?:ReasonFlags|ributionPointNameType)|Reason))|D(?:ata(?:AndType)?|istributionPointName)|General(?:Name(?:s)?|Subtree(?:s)?)|I(?:nhibitAnyPolicy|ssuingDistributionPoint)|KeyUsage|N(?:ame(?:Constraints|RegistrationAuthorities)|etscapeCertType)|OtherName|Policy(?:Constraints|Information|Mapping(?:s)?|QualifierInfo)|QC_Statement(?:s)?|S(?:emanticsInformation|ubjectKeyID))|SSM_(?:A(?:C(?:CESS_CREDENTIALS(?:_PTR)?|L_(?:E(?:DIT(?:_PTR)?|NTRY_(?:IN(?:FO(?:_PTR)?|PUT(?:_PTR)?)|PROTOTYPE(?:_PTR)?))|OWNER_PROTOTYPE(?:_PTR)?|SUBJECT_CALLBACK|VALIDITY_PERIOD(?:_PTR)?))|PI_M(?:EMORY_FUNCS(?:_PTR)?|oduleEventHandler)|UTHORIZATIONGROUP(?:_PTR)?)|BASE_CERTS(?:_PTR)?|C(?:ALLBACK|ERT(?:GROUP(?:_PTR)?|_(?:BUNDLE(?:_(?:HEADER(?:_PTR)?|PTR))?|PAIR(?:_PTR)?))|HALLENGE_CALLBACK|ONTEXT(?:_(?:ATTRIBUTE(?:_PTR)?|PTR))?|R(?:L(?:GROUP(?:_PTR)?|_PAIR(?:_PTR)?)|YPTO_DATA(?:_PTR)?)|SP_OPERATIONAL_STATISTICS(?:_PTR)?)|D(?:AT(?:A_PTR|E(?:_PTR)?)|B(?:INFO(?:_PTR)?|_(?:ATTRIBUTE_(?:DATA(?:_PTR)?|INFO(?:_PTR)?)|INDEX_INFO(?:_PTR)?|PARSING_MODULE_INFO(?:_PTR)?|RECORD_(?:ATTRIBUTE_(?:DATA(?:_PTR)?|INFO(?:_PTR)?)|INDEX_INFO(?:_PTR)?)|SCHEMA_(?:ATTRIBUTE_INFO(?:_PTR)?|INDEX_INFO(?:_PTR)?)|UNIQUE_RECORD(?:_PTR)?))|L_DB_(?:HANDLE(?:_PTR)?|LIST(?:_PTR)?))|E(?:NCODED_C(?:ERT(?:_PTR)?|RL(?:_PTR)?)|VIDENCE(?:_PTR)?)|F(?:IELD(?:GROUP(?:_PTR)?|_PTR)?|UNC_NAME_ADDR(?:_PTR)?)|GUID(?:_PTR)?|K(?:E(?:A_DERIVE_PARAMS(?:_PTR)?|Y(?:HEADER(?:_PTR)?|_(?:PTR|SIZE(?:_PTR)?))?)|R(?:SUBSERVICE(?:_PTR)?|_(?:NAME|P(?:OLICY_(?:INFO(?:_PTR)?|LIST_ITEM(?:_PTR)?)|ROFILE(?:_PTR)?)|WRAPPEDPRODUCT_INFO(?:_PTR)?)))|LIST(?:_(?:ELEMENT|PTR))?|M(?:ANAGER_(?:EVENT_NOTIFICATION(?:_PTR)?|REGISTRATION_INFO(?:_PTR)?)|EMORY_FUNCS(?:_PTR)?|ODULE_FUNCS(?:_PTR)?)|N(?:AME_LIST(?:_PTR)?|ET_ADDRESS(?:_PTR)?)|OID_PTR|P(?:ARSED_C(?:ERT(?:_PTR)?|RL(?:_PTR)?)|KCS(?:1_OAEP_PARAMS(?:_PTR)?|5_PBKDF(?:1_PARAMS(?:_PTR)?|2_PARAMS(?:_PTR)?)))|QUERY(?:_(?:LIMITS(?:_PTR)?|PTR|SIZE_DATA(?:_PTR)?))?|R(?:ANGE(?:_PTR)?|ESOURCE_CONTROL_CONTEXT(?:_PTR)?)|S(?:AMPLE(?:GROUP(?:_PTR)?|_PTR)?|ELECTION_PREDICATE(?:_PTR)?|PI_(?:AC_FUNCS(?:_PTR)?|C(?:L_FUNCS(?:_PTR)?|SP_FUNCS(?:_PTR)?)|DL_FUNCS(?:_PTR)?|KR_FUNCS(?:_PTR)?|ModuleEventHandler|TP_FUNCS(?:_PTR)?)|TATE_FUNCS(?:_PTR)?|UBSERVICE_UID(?:_PTR)?)|T(?:P_(?:A(?:PPLE_EVIDENCE_INFO|UTHORITY_ID(?:_PTR)?)|C(?:ALLERAUTH_CONTEXT(?:_PTR)?|ERT(?:CHANGE_(?:INPUT(?:_PTR)?|OUTPUT(?:_PTR)?)|ISSUE_(?:INPUT(?:_PTR)?|OUTPUT(?:_PTR)?)|NOTARIZE_(?:INPUT(?:_PTR)?|OUTPUT(?:_PTR)?)|RECLAIM_(?:INPUT(?:_PTR)?|OUTPUT(?:_PTR)?)|VERIFY_(?:INPUT(?:_PTR)?|OUTPUT(?:_PTR)?))|ONFIRM_RESPONSE(?:_PTR)?|RLISSUE_(?:INPUT(?:_PTR)?|OUTPUT(?:_PTR)?))|POLICYINFO(?:_PTR)?|RE(?:QUEST_SET(?:_PTR)?|SULT_SET(?:_PTR)?)|VERIF(?:ICATION_RESULTS_CALLBACK|Y_CONTEXT(?:_(?:PTR|RESULT(?:_PTR)?))?))|UPLE(?:GROUP(?:_PTR)?|_PTR)?)|UPCALLS(?:_(?:CALLOC|FREE|MALLOC|PTR|REALLOC))?|VERSION(?:_PTR)?|WRAP_KEY(?:_PTR)?|X509(?:EXT_(?:BASICCONSTRAINTS(?:_PTR)?|P(?:AIR(?:_PTR)?|OLICY(?:INFO(?:_PTR)?|QUALIFIER(?:INFO(?:_PTR)?|S(?:_PTR)?)))|TAGandVALUE(?:_PTR)?)|_(?:ALGORITHM_IDENTIFIER_PTR|EXTENSION(?:S(?:_PTR)?|_PTR)?|NAME(?:_PTR)?|R(?:DN(?:_PTR)?|EVOKED_CERT_(?:ENTRY(?:_PTR)?|LIST(?:_PTR)?))|S(?:IGN(?:ATURE(?:_PTR)?|ED_C(?:ERTIFICATE(?:_PTR)?|RL(?:_PTR)?))|UBJECT_PUBLIC_KEY_INFO_PTR)|T(?:BS_CERT(?:IFICATE(?:_PTR)?|LIST(?:_PTR)?)|IME(?:_PTR)?|YPE_VALUE_PAIR(?:_PTR)?)|VALIDITY(?:_PTR)?))))|MDS_(?:DB_HANDLE|FUNCS(?:_PTR)?)|cssm_(?:ac(?:cess_credentials|l_(?:e(?:dit|ntry_(?:in(?:fo|put)|prototype))|owner_prototype|validity_period))|base_certs|c(?:ert(?:_(?:bundle(?:_header)?|pair)|group)|ontext(?:_attribute)?|r(?:l(?:_pair|group)|ypto_data))|d(?:b(?:_(?:attribute_(?:data|info)|index_info|parsing_module_info|record_(?:attribute_(?:data|info)|index_info)|schema_attribute_info|unique_record)|info)|l_db_list)|e(?:ncoded_c(?:ert|rl)|vidence)|field(?:group)?|k(?:e(?:a_derive_params|y(?:header)?)|r(?:_(?:p(?:olicy_(?:info|list_item)|rofile)|wrappedproductinfo)|subservice))|list_element|m(?:anager_(?:event_notification|registration_info)|odule_funcs)|net_address|pkcs(?:1_oaep_params|5_pbkdf(?:1_params|2_params))|query(?:_limits)?|resource_control_context|s(?:ample(?:group)?|election_predicate|pi_(?:ac_funcs|c(?:l_funcs|sp_funcs)|dl_funcs|kr_funcs|tp_funcs)|tate_funcs|ubservice_uid)|t(?:p_(?:authority_id|c(?:allerauth_context|ert(?:change_(?:input|output)|issue_(?:input|output)|notarize_(?:input|output)|reclaim_(?:input|output)|verify_(?:input|output))|onfirm_response|rlissue_(?:input|output))|policyinfo|request_set|verify_context(?:_result)?)|uplegroup)|upcalls|x509(?:_(?:extension(?:TagAndValue|s)?|name|r(?:dn|evoked_cert_(?:entry|list))|sign(?:ature|ed_c(?:ertificate|rl))|t(?:bs_cert(?:ificate|list)|ime|ype_value_pair))|ext_(?:basicConstraints|p(?:air|olicy(?:Info|Qualifier(?:Info|s))))))|mds_funcs|x509_validity)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.7.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CSSMOID_(?:A(?:D(?:C_CERT_POLICY|_(?:CA_(?:ISSUERS|REPOSITORY)|OCSP|TIME_STAMPING))|NSI_(?:DH_(?:EPHEM(?:_SHA1)?|HYBRID(?:1(?:_SHA1)?|2(?:_SHA1)?|_ONEFLOW)|ONE_FLOW(?:_SHA1)?|PUB_NUMBER|STATIC(?:_SHA1)?)|MQV(?:1(?:_SHA1)?|2(?:_SHA1)?))|PPLE(?:ID_(?:CERT_POLICY|SHARING_CERT_POLICY)|_(?:ASC|CERT_POLICY|E(?:CDSA|KU_(?:CODE_SIGNING(?:_DEV)?|ICHAT_(?:ENCRYPTION|SIGNING)|P(?:ASSBOOK_SIGNING|ROFILE_SIGNING)|QA_PROFILE_SIGNING|RESOURCE_SIGNING|SYSTEM_IDENTITY)|XTENSION(?:_(?:A(?:AI_INTERMEDIATE|DC_(?:APPLE_SIGNING|DEV_SIGNING)|PPLE(?:ID_(?:INTERMEDIATE|SHARING)|_SIGNING))|CODE_SIGNING|DEVELOPER_AUTHENTICATION|ESCROW_SERVICE|I(?:NTERMEDIATE_MARKER|TMS_INTERMEDIATE)|MACAPPSTORE_RECEIPT|P(?:ASSBOOK_SIGNING|ROVISIONING_PROFILE_SIGNING)|S(?:ERVER_AUTHENTICATION|YSINT2_INTERMEDIATE)|WWDR_INTERMEDIATE))?)|FEE(?:D(?:EXP)?|_(?:MD5|SHA1))?|ISIGN|TP_(?:APPLEID_SHARING|C(?:ODE_SIGN(?:ING)?|SR_GEN)|E(?:AP|SCROW_SERVICE)|I(?:CHAT|P_SEC)|LOCAL_CERT_GEN|M(?:ACAPPSTORE_RECEIPT|OBILE_STORE)|P(?:A(?:CKAGE_SIGNING|SSBOOK_SIGNING)|CS_ESCROW_SERVICE|KINIT_(?:CLIENT|SERVER)|RO(?:FILE_SIGNING|VISIONING_PROFILE_SIGNING))|QA_PROFILE_SIGNING|RE(?:SOURCE_SIGN|VOCATION(?:_(?:CRL|OCSP))?)|S(?:MIME|SL|W_UPDATE_SIGNING)|T(?:EST_MOBILE_STORE|IMESTAMPING))|X509_BASIC))|liasedEntryName|uthority(?:InfoAccess|KeyIdentifier|RevocationList))|B(?:asicConstraints|iometricInfo|usinessCategory)|C(?:ACertificate|SSMKeyStruct|ert(?:Issuer|i(?:com(?:EllCurve)?|ficate(?:Policies|RevocationList)))|hallengePassword|lientAuth|o(?:llective(?:FacsimileTelephoneNumber|InternationalISDNNumber|Organization(?:Name|alUnitName)|P(?:hysicalDeliveryOfficeName|ost(?:OfficeBox|al(?:Address|Code)))|St(?:ateProvinceName|reetAddress)|Tele(?:phoneNumber|x(?:Number|TerminalIdentifier)))|mmonName|ntentType|unt(?:erSignature|ryName))|r(?:l(?:DistributionPoints|Number|Reason)|ossCertificatePair))|D(?:ES_CBC|H|NQualifier|OTMAC_CERT(?:_(?:E(?:MAIL_(?:ENCRYPT|SIGN)|XTENSION)|IDENTITY|POLICY|REQ(?:_(?:ARCHIVE_(?:FETCH|LIST|REMOVE|STORE)|EMAIL_(?:ENCRYPT|SIGN)|IDENTITY|SHARED_SERVICES|VALUE_(?:ASYNC|HOSTNAME|IS_PENDING|PASSWORD|RENEW|USERNAME)))?))?|SA(?:_(?:CMS|JDK))?|e(?:ltaCrlIndicator|s(?:cription|tinationIndicator))|istinguishedName|omainComponent)|E(?:CDSA_WithS(?:HA(?:1|2(?:24|56)|384|512)|pecified)|KU_IPSec|TSI_QCS_QC_(?:COMPLIANCE|LIMIT_VALUE|RETENTION|SSCD)|mail(?:Address|Protection)|nhancedSearchGuide|xtended(?:CertificateAttributes|KeyUsage(?:Any)?|UseCodeSigning))|FacsimileTelephoneNumber|G(?:enerationQualifier|ivenName)|Ho(?:ldInstructionCode|useIdentifier)|I(?:n(?:hibitAnyPolicy|itials|ternationalISDNNumber|validityDate)|ssu(?:erAltName|ingDistributionPoint(?:s)?))|K(?:ERBv5_PKINIT_(?:AUTH_DATA|DH_KEY_DATA|KP_(?:CLIENT_AUTH|KDC)|RKEY_DATA)|eyUsage|nowledgeInformation)|LocalityName|M(?:ACAPPSTORE_(?:CERT_POLICY|RECEIPT_CERT_POLICY)|D(?:2(?:WithRSA)?|4(?:WithRSA)?|5(?:WithRSA)?)|OBILE_STORE_SIGNING_POLICY|e(?:mber|ssageDigest)|icrosoftSGC)|N(?:ame(?:Constraints)?|etscape(?:Cert(?:Sequence|Type)|SGC))|O(?:AEP_(?:ID_PSPECIFIED|MGF1)|CSPSigning|ID_QCS_SYNTAX_V(?:1|2)|bjectClass|rganization(?:Name|alUnitName)|wner)|P(?:DA_(?:COUNTRY_(?:CITIZEN|RESIDENCE)|DATE_OF_BIRTH|GENDER|PLACE_OF_BIRTH)|K(?:CS(?:12_(?:c(?:ertBag|rlBag)|keyBag|pbe(?:WithSHAAnd(?:128BitRC(?:2CBC|4)|2Key3DESCBC|3Key3DESCBC|40BitRC4)|withSHAAnd40BitRC2CBC)|s(?:afeContentsBag|ecretBag|hroudedKeyBag))|3|5_(?:D(?:ES_EDE3_CBC|IGEST_ALG)|ENCRYPT_ALG|HMAC_SHA1|PB(?:ES2|KDF2|MAC1)|RC(?:2_CBC|5_CBC)|pbeWith(?:MD(?:2And(?:DES|RC2)|5And(?:DES|RC2))|SHA1And(?:DES|RC2)))|7_(?:D(?:ata(?:WithAttributes)?|igestedData)|En(?:crypted(?:Data|PrivateKeyInfo)|velopedData)|Signed(?:AndEnvelopedData|Data))|9_(?:C(?:ertTypes|rlTypes)|FriendlyName|Id_Ct_TSTInfo|LocalKeyId|SdsiCertificate|TimeStampToken|X509C(?:ertificate|rl)))|IX_OCSP(?:_(?:ARCHIVE_CUTOFF|BASIC|CRL|NO(?:CHECK|NCE)|RESPONSE|SERVICE_LOCATOR))?)|hysicalDeliveryOfficeName|o(?:licy(?:Constraints|Mappings)|st(?:OfficeBox|al(?:Address|Code)))|r(?:e(?:ferredDeliveryMethod|sentationAddress)|ivateKeyUsagePeriod|otocolInformation))|Q(?:C_Statements|T_(?:CPS|UNOTICE))|R(?:SA(?:WithOAEP)?|egisteredAddress|oleOccupant)|S(?:HA(?:1(?:With(?:DSA(?:_(?:CMS|JDK))?|RSA(?:_OIW)?))?|2(?:24(?:WithRSA)?|56(?:WithRSA)?)|384(?:WithRSA)?|512(?:WithRSA)?)|e(?:archGuide|eAlso|r(?:ialNumber|verAuth))|igningTime|t(?:ateProvinceName|reetAddress)|u(?:bject(?:AltName|DirectoryAttributes|EmailAddress|InfoAccess|KeyIdentifier|Picture|SignatureBitmap)|pportedApplicationContext|rname))|T(?:EST_MOBILE_STORE_SIGNING_POLICY|ele(?:phoneNumber|x(?:Number|TerminalIdentifier))|i(?:meStamping|tle))|U(?:n(?:ique(?:Identifier|Member)|structured(?:Address|Name))|se(?:Exemptions|r(?:Certificate|ID|Password)))|X(?:509V(?:1(?:C(?:RL(?:Issuer(?:Name(?:CStruct|LDAP)|Struct)|N(?:extUpdate|umberOfRevokedCertEntries)|Revoked(?:Certificates(?:CStruct|Struct)|Entry(?:CStruct|RevocationDate|S(?:erialNumber|truct)))|ThisUpdate)|ertificate(?:IssuerUniqueId|SubjectUniqueId))|IssuerName(?:CStruct|LDAP|Std)?|S(?:erialNumber|ignature(?:Algorithm(?:Parameters|TBS)?|CStruct|Struct)?|ubject(?:Name(?:CStruct|LDAP|Std)?|PublicKey(?:Algorithm(?:Parameters)?|CStruct)?))|V(?:alidityNot(?:After|Before)|ersion))|2CRL(?:AllExtensions(?:CStruct|Struct)|Extension(?:Critical|Id|Type)|NumberOfExtensions|RevokedEntry(?:AllExtensions(?:CStruct|Struct)|Extension(?:Critical|Id|Type|Value)|NumberOfExtensions|SingleExtension(?:CStruct|Struct))|Si(?:gnedCrl(?:CStruct|Struct)|ngleExtension(?:CStruct|Struct))|TbsCertList(?:CStruct|Struct)|Version)|3(?:Certificate(?:CStruct|Extension(?:C(?:Struct|ritical)|Id|Struct|Type|Value|s(?:CStruct|Struct))|NumberOfExtensions)?|SignedCertificate(?:CStruct)?))|9_62(?:_(?:C_TwoCurve|EllCurve|FieldType|P(?:rimeCurve|ubKeyType)|SigType))?|_121Address)|ecPublicKey|sec(?:p(?:1(?:12r(?:1|2)|28r(?:1|2)|60(?:k1|r(?:1|2))|92(?:k1|r1))|2(?:24(?:k1|r1)|56(?:k1|r1))|384r1|521r1)|t(?:1(?:13r(?:1|2)|31r(?:1|2)|63(?:k1|r(?:1|2))|93r(?:1|2))|2(?:3(?:3(?:k1|r1)|9k1)|83(?:k1|r1))|409(?:k1|r1)|571(?:k1|r1))))|k(?:MDItemLabel(?:I(?:D|con)|Kind|UUID)|SCPropNetSMBNetBIOSScope))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.7.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:false32b|gestaltSystemVersion(?:BugFix|M(?:ajor|inor))?|kCT(?:FontTableOptionExcludeSynthetic|ParagraphStyleSpecifierLineSpacing)|true32b)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.8.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bWSMethodInvocation(?:CallBackProcPtr|DeserializationProcPtr|SerializationProcPtr)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.8.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:k(?:CTTypesetterOptionDisableBidiProcessing|FSOperation(?:Bytes(?:CompleteKey|RemainingKey)|Objects(?:CompleteKey|RemainingKey)|T(?:hroughputKey|otal(?:BytesKey|ObjectsKey|UserVisibleObjectsKey))|UserVisibleObjects(?:CompleteKey|RemainingKey))|LSSharedFileListVolumesIDiskVisible|WS(?:Debug(?:Incoming(?:Body|Headers)|Outgoing(?:Body|Headers))|Fault(?:Code|Extra|String)|HTTP(?:ExtraHeaders|FollowsRedirects|Message|Proxy|ResponseMessage|Version)|MethodInvocation(?:Result(?:ParameterName)?|TimeoutValue)|NetworkStreamFaultString|Record(?:NamespaceURI|ParameterOrder|Type)|S(?:OAP(?:1999Protocol|2001Protocol|BodyEncodingStyle|Me(?:ssageHeaders|thodNamespaceURI)|Style(?:Doc|RPC))|treamError(?:Domain|Error|Message))|XMLRPCProtocol))|pi)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.8.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURLUbiquitousItemPercent(?:DownloadedKey|UploadedKey)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.8.support.variable.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGWindowWorkspace\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.8.support.variable.quartz.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:AUVoiceIOProperty_VoiceProcessingQuality|Sec(?:AppleSharePasswordItemClass|TrustResultConfirm))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.9.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURL(?:BookmarkCreationPreferFileIDResolutionMask|HFSPathStyle|ImproperArgumentsError|PropertyKeyUnavailableError|Re(?:moteHostUnavailableError|source(?:AccessViolationError|NotFoundError))|TimeoutError|Unknown(?:Error|PropertyKeyError|SchemeError))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.9.support.constant.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGEncoding(?:FontSpecific|MacRoman)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.9.support.constant.quartz.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bSecTrustUserSetting\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.9.support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:XPC_ACTIVITY_REQUIRE_(?:BATTERY_LEVEL|HDD_SPINNING)|k(?:LSSharedFileListGlobalLoginItems|S(?:C(?:PropNetAirPort(?:A(?:llowNetCreation|uthPassword(?:Encryption)?)|JoinMode|P(?:owerEnabled|referredNetwork)|SavePasswords)|ValNetAirPort(?:AuthPasswordEncryptionKeychain|JoinMode(?:Automatic|Preferred|R(?:anked|ecent)|Strongest)))|ecPolicyAppleiChat)))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.9.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURL(?:File(?:DirectoryContents|Exists|L(?:astModificationTime|ength)|OwnerID|POSIXMode)|HTTPStatus(?:Code|Line)|UbiquitousItemIsDownloadedKey)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.10.9.support.variable.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk3DMixerParam_(?:GlobalReverbGain|M(?:axGain|inGain)|O(?:bstructionAttenuation|cclusionAttenuation)|ReverbBlend)\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.tba.support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkQL(?:Preview(?:ContentIDScheme|OptionCursorKey|Property(?:Attachment(?:DataKey|sKey)|BaseBundlePathKey|CursorKey|DisplayNameKey|HeightKey|MIMETypeKey|PDFStyleKey|StringEncodingKey|WidthKey))|ThumbnailProperty(?:Ba(?:dgeImageKey|seBundlePathKey)|ExtensionKey))\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.tba.support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:QOS_CLASS_(?:BACKGROUND|DEFAULT|U(?:NSPECIFIED|SER_IN(?:ITIATED|TERACTIVE)|TILITY))|k(?:C(?:GLCP(?:AbortOnGPURestartStatusBlacklisted|ContextPriorityRequest|GPURestartStatus|Support(?:GPURestart|SeparateAddressSpace))|TRuby(?:Alignment(?:Auto|Center|Distribute(?:Letter|Space)|End|Invalid|LineEdge|Start)|Overhang(?:Auto|End|Invalid|None|Start)|Position(?:After|Before|Count|In(?:line|terCharacter))))|FSEventStreamEventFlagItemIs(?:Hardlink|LastHardlink)|SecAccessControlUserPresence))\\\\b\",\n\t\t\t\"name\": \"support.constant.10.10.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:A(?:XValueType(?:AXError|C(?:FRange|G(?:Point|Rect|Size))|Illegal)|udioComponent(?:Flag_(?:CanLoadInProcess|IsV3AudioUnit|RequiresAsyncInstantiation)|Instantiation_Load(?:InProcess|OutOfProcess)))|SecAccessControlDevicePasscode)\\\\b\",\n\t\t\t\"name\": \"support.constant.10.11.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkSec(?:AccessControl(?:A(?:nd|pplicationPassword)|Or|PrivateKeyUsage)|KeyOperationType(?:Decrypt|Encrypt|KeyExchange|Sign|Verify))\\\\b\",\n\t\t\t\"name\": \"support.constant.10.12.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:CGLRPRe(?:gistryID(?:High|Low)|movable)|FSEventStream(?:CreateFlagUseExtendedData|EventFlagItemCloned)|SecAccessControlBiometry(?:Any|CurrentSet))\\\\b\",\n\t\t\t\"name\": \"support.constant.10.13.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:3DMixerParam_(?:BusEnable|DryWetReverbBlend|GlobalReverbGainInDecibels|M(?:axGainInDecibels|inGainInDecibels)|O(?:bstructionAttenuationInDecibels|cclusionAttenuationInDecibels))|AudioQueueProperty_ChannelAssignments|JSTypeSymbol|SecAccessControlWatch)\\\\b\",\n\t\t\t\"name\": \"support.constant.10.15.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:AudioComponentFlag_SandboxSafe|CGL(?:PFASupportsAutomaticGraphicsSwitching|Renderer(?:ATIRadeonX4000ID|IntelHD5000ID)))\\\\b\",\n\t\t\t\"name\": \"support.constant.10.8.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:AXPriority(?:High|Low|Medium)|CGL(?:OGLPVersion_GL4_Core|R(?:PMajorGLVersion|endererGeForceID))|FSEventStream(?:CreateFlagMarkSelf|EventFlagOwnEvent))\\\\b\",\n\t\t\t\"name\": \"support.constant.10.9.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:A(?:APNot(?:CreatedErr|FoundErr)|C(?:E(?:2Type|8Type)|L_(?:A(?:DD_(?:FILE|SUBDIRECTORY)|PPEND_DATA)|CHANGE_OWNER|DELETE(?:_CHILD)?|E(?:NTRY_(?:DIRECTORY_INHERIT|FILE_INHERIT|INHERITED|LIMIT_INHERIT|ONLY_INHERIT)|X(?:ECUTE|TENDED_(?:ALLOW|DENY)))|F(?:IRST_ENTRY|LAG_(?:DEFER_INHERIT|NO_INHERIT))|L(?:AST_ENTRY|IST_DIRECTORY)|NEXT_ENTRY|READ_(?:ATTRIBUTES|DATA|EXTATTRIBUTES|SECURITY)|S(?:EARCH|YNCHRONIZE)|TYPE_(?:A(?:CCESS|FS)|CODA|DEFAULT|EXTENDED|N(?:TFS|WFS))|UNDEFINED_TAG|WRITE_(?:ATTRIBUTES|DATA|EXTATTRIBUTES|SECURITY)))|IF(?:C(?:ID|Version1)|FID)|SD(?:Bad(?:ForkErr|HeaderErr)|EntryNotFoundErr)|VAudioSessionError(?:Code(?:BadParam|Cannot(?:InterruptOthers|Start(?:Playing|Recording))|ExpiredSession|I(?:n(?:compatibleCategory|sufficientPriority)|sBusy)|M(?:ediaServicesFailed|issingEntitlement)|None|ResourceNotAvailable|S(?:essionNotActive|iriIsRecording)|Unspecified)|InsufficientPriority)|nnotationID|ppl(?:eShareMediaType|icationSpecificID)|u(?:dioRecordingID|thorID))|C(?:DEFNFnd|E_CDNT_(?:FullName|NameRelativeToCrlIssuer)|S(?:SM(?:ERR_(?:A(?:C_(?:DEVICE_(?:FAILED|RESET)|FUNCTION_(?:FAILED|NOT_IMPLEMENTED)|IN(?:SUFFICIENT_CLIENT_IDENTIFICATION|TERNAL_ERROR|VALID_(?:BASE_ACLS|C(?:L_HANDLE|ONTEXT_HANDLE)|D(?:ATA|B_(?:HANDLE|LIST(?:_POINTER)?)|L_HANDLE)|ENCODING|INPUT_POINTER|OUTPUT_POINTER|P(?:ASSTHROUGH_ID|OINTER)|REQUEST(?:OR|_DESCRIPTOR)|T(?:P_HANDLE|UPLE_CREDENTIALS)|VALIDITY_PERIOD)|_DARK_WAKE)|M(?:DS_ERROR|EMORY_ERROR)|NO_USER_INTERACTION|OS_ACCESS_DENIED|SE(?:LF_CHECK_FAILED|RVICE_NOT_AVAILABLE)|USER_CANCELED)|PPLE(?:DL_(?:DISK_FULL|FILE_TOO_BIG|IN(?:COMPATIBLE_(?:DATABASE_BLOB|KEY_BLOB)|VALID_(?:DATABASE_BLOB|KEY_BLOB|OPEN_PARAMETERS))|QUOTA_EXCEEDED)|TP_(?:BAD_CERT_FROM_ISSUER|C(?:A_PIN_MISMATCH|ERT_NOT_FOUND_FROM_ISSUER|ODE_SIGN_DEVELOPMENT|RL_(?:BAD_URI|EXPIRED|INVALID_ANCHOR_CERT|NOT_(?:FOUND|TRUSTED|VALID_YET)|POLICY_FAIL|SERVER_DOWN)|S_(?:BAD_(?:CERT_CHAIN_LENGTH|PATH_LENGTH)|NO_(?:BASIC_CONSTRAINTS|EXTENDED_KEY_USAGE)))|EXT_KEYUSAGE_NOT_CRITICAL|HOSTNAME_MISMATCH|I(?:D(?:ENTIFIER_MISSING|P_FAIL)|N(?:COMPLETE_REVOCATION_CHECK|VALID_(?:AUTHORITY_ID|CA|E(?:MPTY_SUBJECT|XTENDED_KEY_USAGE)|ID_LINKAGE|KEY_USAGE|ROOT|SUBJECT_ID)))|MISSING_REQUIRED_EXTENSION|N(?:ETWORK_FAILURE|O_BASIC_CONSTRAINTS)|OCSP_(?:BAD_RE(?:QUEST|SPONSE)|INVALID_ANCHOR_CERT|NO(?:NCE_MISMATCH|T_TRUSTED|_SIGNER)|RESP_(?:INTERNAL_ERR|MALFORMED_REQ|SIG_REQUIRED|TRY_LATER|UNAUTHORIZED)|S(?:IG_ERROR|TATUS_UNRECOGNIZED)|UNAVAILABLE)|PATH_LEN_CONSTRAINT|RS_BAD_(?:CERT_CHAIN_LENGTH|EXTENDED_KEY_USAGE)|S(?:MIME_(?:BAD_(?:EXT_KEY_USE|KEY_USE)|EMAIL_ADDRS_NOT_FOUND|KEYUSAGE_NOT_CRITICAL|NO_EMAIL_ADDRS|SUBJ_ALT_NAME_NOT_CRIT)|SL_BAD_EXT_KEY_USE)|TRUST_SETTING_DENY|UNKNOWN_(?:C(?:ERT_EXTEN|R(?:ITICAL_EXTEN|L_EXTEN))|QUAL_CERT_STATEMENT))|_DOTMAC_(?:CSR_VERIFY_FAIL|FAILED_CONSISTENCY_CHECK|NO_REQ_PENDING|REQ_(?:IS_PENDING|QUEUED|REDIRECT|SERVER_(?:A(?:LREADY_EXIST|UTH)|ERR|NOT_AVAIL|PARAM|SERVICE_ERROR|UNIMPL)))))|C(?:L_(?:CRL_ALREADY_SIGNED|DEVICE_(?:FAILED|RESET)|FUNCTION_(?:FAILED|NOT_IMPLEMENTED)|IN(?:SUFFICIENT_CLIENT_IDENTIFICATION|TERNAL_ERROR|VALID_(?:BUNDLE_(?:INFO|POINTER)|C(?:ACHE_HANDLE|ERT(?:GROUP_POINTER|_POINTER)|ONTEXT_HANDLE|RL_(?:INDEX|POINTER))|DATA|FIELD_POINTER|INPUT_POINTER|NUMBER_OF_FIELDS|OUTPUT_POINTER|P(?:ASSTHROUGH_ID|OINTER)|RESULTS_HANDLE|SCOPE)|_DARK_WAKE)|M(?:DS_ERROR|EMORY_ERROR)|NO_(?:FIELD_VALUES|USER_INTERACTION)|OS_ACCESS_DENIED|S(?:COPE_NOT_SUPPORTED|E(?:LF_CHECK_FAILED|RVICE_NOT_AVAILABLE))|U(?:NKNOWN_(?:FORMAT|TAG)|SER_CANCELED)|VERIFICATION_FAILURE)|S(?:P(?:DL_APPLE_DL_CONVERSION_ERROR|_(?:A(?:CL_(?:ADD_FAILED|BASE_CERTS_NOT_SUPPORTED|CHA(?:LLENGE_CALLBACK_FAILED|NGE_FAILED)|DELETE_FAILED|ENTRY_TAG_NOT_FOUND|REPLACE_FAILED|SUBJECT_TYPE_NOT_SUPPORTED)|L(?:GID_MISMATCH|READY_LOGGED_IN)|PPLE_(?:ADD_APPLICATION_ACL_SUBJECT|INVALID_KEY_(?:END_DATE|START_DATE)|PUBLIC_KEY_INCOMPLETE|S(?:IGNATURE_MISMATCH|SLv2_ROLLBACK))|TTACH_HANDLE_BUSY)|BLOCK_SIZE_MISMATCH|CRYPTO_DATA_CALLBACK_FAILED|DEVICE_(?:ERROR|FAILED|MEMORY_ERROR|RESET|VERIFY_FAILED)|FUNCTION_(?:FAILED|NOT_IMPLEMENTED)|IN(?:PUT_LENGTH_ERROR|SUFFICIENT_CLIENT_IDENTIFICATION|TERNAL_ERROR|VALID_(?:A(?:C(?:CESS_CREDENTIALS|L_(?:BASE_CERTS|CHALLENGE_CALLBACK|E(?:DIT_MODE|NTRY_TAG)|SUBJECT_VALUE))|LGORITHM|TTR_(?:A(?:CCESS_CREDENTIALS|LG_PARAMS)|B(?:ASE|LOCK_SIZE)|DL_DB_HANDLE|E(?:FFECTIVE_BITS|ND_DATE)|I(?:NIT_VECTOR|TERATION_COUNT)|KEY(?:_(?:LENGTH|TYPE))?|LABEL|MODE|OUTPUT_SIZE|P(?:A(?:DDING|SSPHRASE)|RI(?:ME|VATE_KEY_FORMAT)|UBLIC_KEY_FORMAT)|R(?:ANDOM|OUNDS)|S(?:ALT|EED|TART_DATE|UBPRIME|YMMETRIC_KEY_FORMAT)|VERSION|WRAPPED_KEY_FORMAT))|C(?:ONTEXT(?:_HANDLE)?|RYPTO_DATA)|D(?:ATA(?:_COUNT)?|IGEST_ALGORITHM)|INPUT_(?:POINTER|VECTOR)|KEY(?:ATTR_MASK|USAGE_MASK|_(?:CLASS|FORMAT|LABEL|POINTER|REFERENCE))?|LOGIN_NAME|NEW_ACL_(?:ENTRY|OWNER)|OUTPUT_(?:POINTER|VECTOR)|P(?:ASSTHROUGH_ID|OINTER)|S(?:AMPLE_VALUE|IGNATURE))|_DARK_WAKE)|KEY_(?:BLOB_TYPE_INCORRECT|HEADER_INCONSISTENT|LABEL_ALREADY_EXISTS|USAGE_INCORRECT)|M(?:DS_ERROR|EMORY_ERROR|ISSING_ATTR_(?:A(?:CCESS_CREDENTIALS|LG_PARAMS)|B(?:ASE|LOCK_SIZE)|DL_DB_HANDLE|E(?:FFECTIVE_BITS|ND_DATE)|I(?:NIT_VECTOR|TERATION_COUNT)|KEY(?:_(?:LENGTH|TYPE))?|LABEL|MODE|OUTPUT_SIZE|P(?:A(?:DDING|SSPHRASE)|RI(?:ME|VATE_KEY_FORMAT)|UBLIC_KEY_FORMAT)|R(?:ANDOM|OUNDS)|S(?:ALT|EED|TART_DATE|UBPRIME|YMMETRIC_KEY_FORMAT)|VERSION|WRAPPED_KEY_FORMAT))|NO(?:T_LOGGED_IN|_USER_INTERACTION)|O(?:BJECT_(?:ACL_(?:NOT_SUPPORTED|REQUIRED)|MANIP_AUTH_DENIED|USE_AUTH_DENIED)|PERATION_AUTH_DENIED|S_ACCESS_DENIED|UTPUT_LENGTH_ERROR)|P(?:RIV(?:ATE_KEY_(?:ALREADY_EXISTS|NOT_FOUND)|ILEGE_NOT_(?:GRANTED|SUPPORTED))|UBLIC_KEY_INCONSISTENT)|QUERY_SIZE_UNKNOWN|S(?:AMPLE_VALUE_NOT_SUPPORTED|E(?:LF_CHECK_FAILED|RVICE_NOT_AVAILABLE)|TAGED_OPERATION_(?:IN_PROGRESS|NOT_STARTED))|U(?:NSUPPORTED_KEY(?:ATTR_MASK|USAGE_MASK|_(?:FORMAT|LABEL|SIZE))|SER_CANCELED)|VE(?:CTOR_OF_BUFS_UNSUPPORTED|RIFY_FAILED)))|SM_(?:A(?:DDIN_(?:AUTHENTICATE_FAILED|LOAD_FAILED|UNLOAD_FAILED)|TTRIBUTE_NOT_IN_CONTEXT)|BUFFER_TOO_SMALL|DEVICE_(?:FAILED|RESET)|E(?:MM_(?:AUTHENTICATE_FAILED|LOAD_FAILED|UNLOAD_FAILED)|VENT_NOTIFICATION_CALLBACK_NOT_FOUND)|FUNCTION_(?:FAILED|INTEGRITY_FAIL|NOT_IMPLEMENTED)|IN(?:COMPATIBLE_VERSION|SUFFICIENT_CLIENT_IDENTIFICATION|TERNAL_ERROR|VALID_(?:A(?:DDIN_(?:FUNCTION_TABLE|HANDLE)|TTRIBUTE)|CONTEXT_HANDLE|GUID|HANDLE_USAGE|INPUT_POINTER|KEY_HIERARCHY|OUTPUT_POINTER|P(?:OINTER|VC)|S(?:ERVICE_MASK|UBSERVICEID))|_DARK_WAKE)|LIB_REF_NOT_FOUND|M(?:DS_ERROR|EMORY_ERROR|ODULE_(?:MAN(?:AGER_(?:INITIALIZE_FAIL|NOT_FOUND)|IFEST_VERIFY_FAILED)|NOT_LOADED))|NO(?:T_INITIALIZED|_USER_INTERACTION)|OS_ACCESS_DENIED|P(?:RIVILEGE_NOT_GRANTED|VC_(?:ALREADY_CONFIGURED|REFERENT_NOT_FOUND))|S(?:COPE_NOT_SUPPORTED|E(?:LF_CHECK_FAILED|RVICE_NOT_AVAILABLE))|USER_CANCELED)))|DL_(?:ACL_(?:ADD_FAILED|BASE_CERTS_NOT_SUPPORTED|CHA(?:LLENGE_CALLBACK_FAILED|NGE_FAILED)|DELETE_FAILED|ENTRY_TAG_NOT_FOUND|REPLACE_FAILED|SUBJECT_TYPE_NOT_SUPPORTED)|D(?:ATA(?:BASE_CORRUPT|STORE_(?:ALREADY_EXISTS|DOESNOT_EXIST|IS_OPEN))|B_LOCKED|EVICE_(?:FAILED|RESET))|ENDOFDATA|F(?:IELD_SPECIFIED_MULTIPLE|UNCTION_(?:FAILED|NOT_IMPLEMENTED))|IN(?:COMPATIBLE_FIELD_FORMAT|SUFFICIENT_CLIENT_IDENTIFICATION|TERNAL_ERROR|VALID_(?:AC(?:CESS_(?:CREDENTIALS|REQUEST)|L_(?:BASE_CERTS|CHALLENGE_CALLBACK|E(?:DIT_MODE|NTRY_TAG)|SUBJECT_VALUE))|C(?:L_HANDLE|SP_HANDLE)|D(?:B_(?:HANDLE|L(?:IST_POINTER|OCATION)|NAME)|L_HANDLE)|FIELD_NAME|IN(?:DEX_INFO|PUT_POINTER)|MODIFY_MODE|NE(?:TWORK_ADDR|W_(?:ACL_(?:ENTRY|OWNER)|OWNER))|O(?:PEN_PARAMETERS|UTPUT_POINTER)|P(?:A(?:RSING_MODULE|SSTHROUGH_ID)|OINTER)|QUERY|RE(?:CORD(?:TYPE|_(?:INDEX|UID))|SULTS_HANDLE)|S(?:AMPLE_VALUE|ELECTION_TAG)|UNIQUE_INDEX_DATA|VALUE)|_DARK_WAKE)|M(?:DS_ERROR|EMORY_ERROR|ISSING_VALUE|ULTIPLE_VALUES_UNSUPPORTED)|NO_USER_INTERACTION|O(?:BJECT_(?:ACL_(?:NOT_SUPPORTED|REQUIRED)|MANIP_AUTH_DENIED|USE_AUTH_DENIED)|PERATION_AUTH_DENIED|S_ACCESS_DENIED)|RECORD_(?:MODIFIED|NOT_FOUND)|S(?:AMPLE_VALUE_NOT_SUPPORTED|E(?:LF_CHECK_FAILED|RVICE_NOT_AVAILABLE)|TALE_UNIQUE_RECORD)|U(?:NSUPPORTED_(?:FIELD_FORMAT|INDEX_INFO|LOCALITY|NUM_(?:ATTRIBUTES|INDEXES|RECORDTYPES|SELECTION_PREDS)|OPERATOR|QUERY(?:_LIMITS)?|RECORDTYPE)|SER_CANCELED))|TP_(?:AUTHENTICATION_FAILED|C(?:ERT(?:GROUP_INCOMPLETE|IFICATE_CANT_OPERATE|_(?:EXPIRED|NOT_VALID_YET|REVOKED|SUSPENDED))|RL_ALREADY_SIGNED)|DEVICE_(?:FAILED|RESET)|FUNCTION_(?:FAILED|NOT_IMPLEMENTED)|IN(?:SUFFICIENT_C(?:LIENT_IDENTIFICATION|REDENTIALS)|TERNAL_ERROR|VALID_(?:A(?:CTION(?:_DATA)?|NCHOR_CERT|UTHORITY)|C(?:ALL(?:BACK|ERAUTH_CONTEXT_POINTER)|ERT(?:GROUP(?:_POINTER)?|IFICATE|_(?:AUTHORITY|POINTER))|L_HANDLE|ONTEXT_HANDLE|RL(?:GROUP(?:_POINTER)?|_(?:AUTHORITY|ENCODING|POINTER|TYPE))?|SP_HANDLE)|D(?:ATA|B_(?:HANDLE|LIST(?:_POINTER)?)|L_HANDLE)|F(?:IELD_POINTER|ORM_TYPE)|I(?:D(?:ENTIFIER(?:_POINTER)?)?|N(?:DEX|PUT_POINTER))|KEYCACHE_HANDLE|N(?:AME|ETWORK_ADDR|UMBER_OF_FIELDS)|OUTPUT_POINTER|P(?:ASSTHROUGH_ID|O(?:INTER|LICY_IDENTIFIERS))|RE(?:ASON|QUEST_INPUTS|SPONSE_VECTOR)|S(?:IGNATURE|TOP_ON_POLICY)|T(?:IMESTRING|UPLE(?:GROUP(?:_POINTER)?)?))|_DARK_WAKE)|M(?:DS_ERROR|EMORY_ERROR)|NO(?:T_(?:SIGNER|TRUSTED)|_(?:DEFAULT_AUTHORITY|USER_INTERACTION))|OS_ACCESS_DENIED|RE(?:JECTED_FORM|QUEST_(?:LOST|REJECTED))|SE(?:LF_CHECK_FAILED|RVICE_NOT_AVAILABLE)|U(?:N(?:KNOWN_(?:FORMAT|TAG)|SUPPORTED_(?:ADDR_TYPE|SERVICE))|SER_CANCELED)|VERIF(?:ICATION_FAILURE|Y_ACTION_FAILED)))|_(?:A(?:C(?:L_(?:AUTHORIZATION_(?:ANY|CHANGE_(?:ACL|OWNER)|D(?:B(?:S_(?:CREATE|DELETE)|_(?:DELETE|INSERT|MODIFY|READ))|E(?:CRYPT|LETE|RIVE))|E(?:NCRYPT|XPORT_(?:CLEAR|WRAPPED))|GENKEY|I(?:MPORT_(?:CLEAR|WRAPPED)|NTEGRITY)|LOGIN|MAC|P(?:ARTITION_ID|REAUTH_(?:BASE|END))|SIGN|TAG_VENDOR_DEFINED_START)|CODE_SIGNATURE_(?:INVALID|OSX)|EDIT_MODE_(?:ADD|DELETE|REPLACE)|KEYCHAIN_PROMPT_(?:CURRENT_VERSION|INVALID(?:_ACT)?|REQUIRE_PASSPHRASE|UNSIGNED(?:_ACT)?)|MATCH_(?:BITS|GID|HONOR_ROOT|UID)|PR(?:EAUTH_TRACKING_(?:AUTHORIZED|BLOCKED|COUNT_MASK|UNKNOWN)|OCESS_SELECTOR_CURRENT_VERSION)|SUBJECT_TYPE_(?:A(?:NY|SYMMETRIC_KEY)|BIOMETRIC|CO(?:DE_SIGNATURE|MMENT)|EXT_PAM_NAME|HASHED_SUBJECT|KEYCHAIN_PROMPT|LOGIN_NAME|P(?:A(?:RTITION|SSWORD)|R(?:EAUTH(?:_SOURCE)?|O(?:CESS|MPTED_(?:BIOMETRIC|PASSWORD)|TECTED_(?:BIOMETRIC|PASSWORD)))|UBLIC_KEY)|SYMMETRIC_KEY|THRESHOLD))|_(?:BASE_(?:AC_ERROR|ERROR)|PRIVATE_ERROR))|DDR_(?:CUSTOM|N(?:AME|ONE)|SOCKADDR|URL)|LG(?:CLASS_(?:ASYMMETRIC|CUSTOM|D(?:ERIVEKEY|IGEST)|KEYGEN|MAC|NONE|RANDOMGEN|S(?:IGNATURE|YMMETRIC)|UNIQUEGEN)|ID_(?:3DES(?:_(?:1KEY(?:_EEE)?|2KEY(?:_E(?:DE|EE))?|3KEY(?:_E(?:DE|EE))?))?|A(?:ES|PPLE_YARROW|SC)|B(?:ATON|LOWFISH)|C(?:AST(?:3|5)?|DMF|RAB|USTOM|oncat(?:BaseAnd(?:Data|Key)|DataAndBase|KeyAndBase))|D(?:ES(?:Random|X)?|H|SA(?:_BSAFE)?)|E(?:C(?:AES|C|D(?:H(?:_X963_KDF)?|SA(?:_SPECIFIED)?)|ES|MQV|NRA)|NTROPY_DEFAULT|lGamal|xtractFromKey)|F(?:ASTHASH|E(?:AL|E(?:D(?:EXP)?|_(?:MD5|SHA1))?)|IPS186Random|ortezzaTimestamp)|G(?:OST|enericSecret)|HAVAL(?:3|4|5)?|I(?:BCHASH|DEA|ntelPlatformRandom)|JUNIPER|K(?:E(?:A|YCHAIN_KEY)|H(?:AFRE|UFU))|L(?:AST|OKI|UCIFER)|M(?:A(?:DRYGA|YFLY)|D(?:2(?:Random|WithRSA)?|4|5(?:HMAC|Random|WithRSA)?)|MB|QV)|N(?:HASH|ONE|RA)|OPENSSH1|P(?:BE_OPENSSL_MD5|H|KCS(?:12_(?:PBE_(?:ENCR|MAC)|SHA1_PBE)|5_PBKDF(?:1_(?:MD(?:2|5)|SHA1)|2)))|R(?:C(?:2|4|5)|DES|EDOC(?:3)?|IPEM(?:AC|D)|SA|UNNING_COUNTER)|S(?:AFER|E(?:AL|CURE_PASSPHRASE)|HA(?:1(?:HMAC(?:_LEGACY)?|With(?:DSA|EC(?:DSA|NRA)|RSA))?|2(?:24(?:With(?:ECDSA|RSA))?|56(?:With(?:ECDSA|RSA))?)|384(?:With(?:ECDSA|RSA))?|512(?:With(?:ECDSA|RSA))?|Random)|KIPJACK|SL3(?:KeyAndMacDerive|M(?:D5(?:_MAC)?|asterDerive)|PreMasterGen|SHA1(?:_MAC)?))|TIGER|UTC|VENDOR_DEFINED|Wrap(?:Lynks|SET_OAEP)|XORBaseAndData|_FIRST_UNUSED)|MODE_(?:BC|C(?:BC(?:128|64|C|P(?:D|adIV8)|_IV8)?|FB(?:16|32|8|PadIV8|_IV8)?|OUNTER|USTOM)|ECB(?:128|64|96|Pad)?|ISO_9796|LAST|NONE|O(?:AEP_HASH|FB(?:64|NLF|PadIV8|_IV8)?)|P(?:BC|CBC|FB|KCS1_EM(?:E_(?:OAEP|V15)|SA_V15)|RIVATE_(?:KEY|WRAP)|UBLIC_KEY)|RELAYX|SHUFFLE|VENDOR_DEFINED|WRAP|X9_31))|PPLE(?:CSP(?:DL_DB_(?:CHANGE_PASSWORD|GET_(?:HANDLE|SETTINGS)|IS_LOCKED|LOCK|SET_SETTINGS|UNLOCK)|_KEYDIGEST)|DL_OPEN_PARAMETERS_VERSION|FILEDL_(?:COMMIT|DELETE_FILE|MAKE_(?:BACKUP|COPY)|ROLLBACK|T(?:AKE_FILE_LOCK|OGGLE_AUTOCOMMIT))|SCPDL_CSP_GET_KEYHANDLE|X509CL_(?:OBTAIN_CSR|VERIFY_CSR)|_(?:PRIVATE_CSPDL_CODE_(?:1(?:0|1|2|3|4|5|6|7|8|9)|2(?:0|1|2|3|4|5|6|7)|8|9)|UNLOCK_TYPE_(?:KEY(?:BAG|_DIRECT)|WRAPPED_PRIVATE)))|SC_OPTIMIZE_(?:ASCII|DEFAULT|S(?:ECURITY|IZE)|TIME(?:_SIZE)?)|TT(?:ACH_READ_ONLY|RIBUTE_(?:A(?:CCESS_CREDENTIALS|L(?:ERT_TITLE|G_(?:ID|PARAMS))|SC_OPTIMIZATION)|B(?:ASE|LOCK_SIZE)|C(?:SP_HANDLE|USTOM)|D(?:ATA_(?:ACCESS_CREDENTIALS|C(?:RYPTO_DATA|SSM_DATA)|D(?:ATE|L_DB_HANDLE)|K(?:EY|R_PROFILE)|NONE|RANGE|STRING|UINT32|VERSION)|ESCRIPTION|L_DB_HANDLE)|E(?:FFECTIVE_BITS|ND_DATE)|FEE_(?:CURVE_TYPE|PRIME_TYPE)|I(?:NIT_VECTOR|TERATION_COUNT|V_SIZE)|K(?:EY(?:ATTR|USAGE|_(?:LENGTH(?:_RANGE)?|TYPE))?|RPROFILE_(?:LOCAL|REMOTE))|LABEL|MODE|NONE|OUTPUT_SIZE|P(?:A(?:DDING|RAM_KEY|SSPHRASE)|R(?:I(?:ME|VATE_KEY_FORMAT)|OMPT)|UBLIC_KEY(?:_FORMAT)?)|R(?:ANDOM|OUNDS(?:_RANGE)?|SA_BLINDING)|S(?:ALT|EED|TART_DATE|UBPRIME|YMMETRIC_KEY_FORMAT)|TYPE_MASK|VE(?:NDOR_DEFINED|R(?:IFY_PASSPHRASE|SION))|WRAPPED_KEY_FORMAT)))|BASE_ERROR|C(?:ERT(?:GROUP_(?:CERT_PAIR|DATA|ENCODED_CERT|PARSED_CERT)|_(?:ACL_ENTRY|BUNDLE_(?:CUSTOM|ENCODING_(?:BER|CUSTOM|DER|PGP|SEXPR|UNKNOWN)|LAST|P(?:FX|GP_KEYRING|KCS(?:12|7_SIGNED_(?:DATA|ENVELOPED_DATA)))|SPKI_SEQUENCE|UNKNOWN)|ENCODING_(?:BER|CUSTOM|DER|LAST|MULTIPLE|NDR|PGP|SEXPR|UNKNOWN)|Intel|LAST|MULTIPLE|P(?:ARSE_FORMAT_(?:C(?:OMPLEX|USTOM)|LAST|MULTIPLE|NONE|OID_NAMED|SEXPR|TUPLE)|GP)|S(?:DSIv1|PKI|TATUS_(?:EXPIRED|IS_(?:FROM_NET|IN_(?:ANCHORS|INPUT_CERTS)|ROOT)|NOT_VALID_YET|TRUST_SETTINGS_(?:DENY|FOUND_(?:ADMIN|SYSTEM|USER)|IGNORED_ERROR|TRUST)))|TUPLE|UNKNOWN|X(?:9_ATTRIBUTE|_509(?:_ATTRIBUTE|v(?:1|2|3)))))|L_(?:BASE_(?:CL_ERROR|ERROR)|CUSTOM_C(?:ERT_(?:BUNDLE_TYPE|ENCODING|PARSE_FORMAT|TYPE)|RL_PARSE_FORMAT)|PRIVATE_ERROR|TEMPLATE_(?:INTERMEDIATE_CERT|PKIX_CERTTEMPLATE))|ONTEXT_EVENT_(?:CREATE|DELETE|UPDATE)|RL(?:GROUP_(?:CRL_PAIR|DATA|ENCODED_CRL|PARSED_CRL)|_(?:ENCODING_(?:B(?:ER|LOOM)|CUSTOM|DER|MULTIPLE|SEXPR|UNKNOWN)|PARSE_FORMAT_(?:C(?:OMPLEX|USTOM)|LAST|MULTIPLE|NONE|OID_NAMED|SEXPR|TUPLE)|TYPE_(?:MULTIPLE|SPKI|UNKNOWN|X_509v(?:1|2))))|S(?:P_(?:BASE_(?:CSP_ERROR|ERROR)|H(?:ARDWARE|YBRID)|PRIVATE_ERROR|RDR_(?:EXISTS|HW|TOKENPRESENT)|S(?:OFTWARE|TORES_(?:CERTIFICATES|GENERIC|P(?:RIVATE_KEYS|UBLIC_KEYS)|SESSION_KEYS))|TOK_(?:CLOCK_EXISTS|LOGIN_REQUIRED|PR(?:IVATE_KEY_PASSWORD|OT_AUTHENTICATION)|RNG|SESSION_KEY_PASSWORD|USER_PIN_(?:EXPIRED|INITIALIZED)|WRITE_PROTECTED))|SM_(?:BASE_(?:CSSM_ERROR|ERROR)|PRIVATE_ERROR))|USTOM_COMMON_ERROR_EXTENT)|D(?:B_(?:A(?:CCESS_(?:PRIVILEGED|RE(?:AD|SET)|WRITE)|ND|TTRIBUTE_(?:FORMAT_(?:B(?:IG_NUM|LOB)|COMPLEX|MULTI_UINT32|REAL|S(?:INT32|TRING)|TIME_DATE|UINT32)|NAME_AS_(?:INTEGER|OID|STRING)))|C(?:ERT_USE_(?:OWNER|PRIVACY|REVOKED|S(?:IGNING|YSTEM)|TRUSTED)|ONTAINS(?:_(?:FINAL_SUBSTRING|INITIAL_SUBSTRING))?)|DATASTORES_UNKNOWN|EQUAL|FILESYSTEMSCAN_MODE|GREATER_THAN|INDEX_(?:NONUNIQUE|ON_(?:ATTRIBUTE|RECORD|UNKNOWN)|UNIQUE)|LESS_THAN|MODIFY_ATTRIBUTE_(?:ADD|DELETE|NONE|REPLACE)|NO(?:NE|T_EQUAL)|OR|RECORDTYPE_(?:APP_DEFINED_(?:END|START)|OPEN_GROUP_(?:END|START)|SCHEMA_(?:END|START))|TRANSACTIONAL_MODE)|L_(?:BASE_(?:DL_ERROR|ERROR)|CUSTOM|DB_(?:RECORD_(?:A(?:LL_KEYS|NY|PPLESHARE_PASSWORD)|C(?:ERT|RL)|EXTENDED_ATTRIBUTE|GENERIC(?:_PASSWORD)?|INTERNET_PASSWORD|METADATA|P(?:OLICY|RIVATE_KEY|UBLIC_KEY)|SYMMETRIC_KEY|U(?:NLOCK_REFERRAL|SER_TRUST)|X509_C(?:ERTIFICATE|RL))|SCHEMA_(?:ATTRIBUTES|IN(?:DEXES|FO)|PARSING_MODULE))|FFS|LDAP|MEMORY|ODBC|P(?:KCS11|RIVATE_ERROR)|REMOTEDIR|UNKNOWN))|E(?:LAPSED_TIME_(?:COMPLETE|UNKNOWN)|RR(?:CODE_(?:ACL_(?:ADD_FAILED|BASE_CERTS_NOT_SUPPORTED|CHA(?:LLENGE_CALLBACK_FAILED|NGE_FAILED)|DELETE_FAILED|ENTRY_TAG_NOT_FOUND|REPLACE_FAILED|SUBJECT_TYPE_NOT_SUPPORTED)|CRL_ALREADY_SIGNED|DEVICE_(?:FAILED|RESET)|FUNCTION_(?:FAILED|NOT_IMPLEMENTED)|IN(?:COMPATIBLE_VERSION|SUFFICIENT_CLIENT_IDENTIFICATION|TERNAL_ERROR|VALID_(?:AC(?:CESS_CREDENTIALS|L_(?:BASE_CERTS|CHALLENGE_CALLBACK|E(?:DIT_MODE|NTRY_TAG)|SUBJECT_VALUE)|_HANDLE)|C(?:ERT(?:GROUP_POINTER|_POINTER)|L_HANDLE|ONTEXT_HANDLE|R(?:L_POINTER|YPTO_DATA)|SP_HANDLE)|D(?:ATA|B_(?:HANDLE|LIST(?:_POINTER)?)|L_HANDLE)|FIELD_POINTER|GUID|INPUT_POINTER|KR_HANDLE|N(?:E(?:TWORK_ADDR|W_ACL_(?:ENTRY|OWNER))|UMBER_OF_FIELDS)|OUTPUT_POINTER|P(?:ASSTHROUGH_ID|OINTER)|SAMPLE_VALUE|TP_HANDLE)|_DARK_WAKE)|M(?:DS_ERROR|EMORY_ERROR|ODULE_MANIFEST_VERIFY_FAILED)|NO_USER_INTERACTION|O(?:BJECT_(?:ACL_(?:NOT_SUPPORTED|REQUIRED)|MANIP_AUTH_DENIED|USE_AUTH_DENIED)|PERATION_AUTH_DENIED|S_ACCESS_DENIED)|PRIVILEGE_NOT_GRANTED|S(?:AMPLE_VALUE_NOT_SUPPORTED|E(?:LF_CHECK_FAILED|RVICE_NOT_AVAILABLE))|U(?:NKNOWN_(?:FORMAT|TAG)|SER_CANCELED)|VERIFICATION_FAILURE)|ORCODE_(?:C(?:OMMON_EXTENT|USTOM_OFFSET)|MODULE_EXTENT))|STIMATED_TIME_UNKNOWN|VIDENCE_FORM_(?:APPLE_(?:CERT(?:GROUP|_INFO)|HEADER)|C(?:ERT(?:_ID)?|RL(?:_(?:ID|NEXTTIME|THISTIME))?)|POLICYINFO|TUPLEGROUP|UNSPECIFIC|VERIFIER_TIME))|F(?:ALSE|EE_(?:CURVE_TYPE_(?:ANSI_X9_62|DEFAULT|MONTGOMERY|WEIERSTRASS)|PRIME_TYPE_(?:DEFAULT|FEE|GENERAL|MERSENNE))|IELDVALUE_COMPLEX_DATA_TYPE)|HINT_(?:ADDRESS_(?:APP|SP)|NONE)|INVALID_HANDLE|K(?:EY(?:ATTR_(?:ALWAYS_SENSITIVE|EXTRACTABLE|MODIFIABLE|NEVER_EXTRACTABLE|P(?:ARTIAL|ERMANENT|RIVATE|UBLIC_KEY_ENCRYPT)|RETURN_(?:D(?:ATA|EFAULT)|NONE|REF)|SENSITIVE)|BLOB_(?:OTHER|R(?:AW(?:_FORMAT_(?:BSAFE|CCA|FIPS186|MSCAPI|NONE|O(?:CTET_STRING|PENSS(?:H(?:2)?|L)|THER)|P(?:GP|KCS(?:1|3|8))|SPKI|VENDOR_DEFINED|X509))?|EF(?:ERENCE|_FORMAT_(?:INTEGER|OTHER|S(?:PKI|TRING))))|WRAPPED(?:_FORMAT_(?:APPLE_CUSTOM|MSCAPI|NONE|O(?:PENSS(?:H1|L)|THER)|PKCS(?:7|8)))?)|CLASS_(?:OTHER|P(?:RIVATE_KEY|UBLIC_KEY)|SE(?:CRET_PART|SSION_KEY))|HEADER_VERSION|USE_(?:ANY|DE(?:CRYPT|RIVE)|ENCRYPT|SIGN(?:_RECOVER)?|UNWRAP|VERIFY(?:_RECOVER)?|WRAP)|_HIERARCHY_(?:EXPORT|INTEG|NONE))|R_(?:BASE_ERROR|PRIVATE_ERROR))|LIST_(?:ELEMENT_(?:DATUM|SUBLIST|WORDID)|TYPE_(?:CUSTOM|SEXPR|UNKNOWN))|M(?:DS_(?:BASE_ERROR|PRIVATE_ERROR)|ODULE_STRING_SIZE)|N(?:ET_PROTO_(?:C(?:MP(?:S)?|USTOM)|FTP(?:S)?|LDAP(?:NS|S)?|NONE|OCSP|UNSPECIFIED|X500DAP)|OTIFY_(?:FAULT|INSERT|REMOVE))|OK|P(?:ADDING_(?:A(?:LTERNATE|PPLE_SSLv2)|C(?:IPHERSTEALING|USTOM)|FF|NONE|ONE|PKCS(?:1|5|7)|RANDOM|SIGRAW|VENDOR_DEFINED|ZERO)|KCS(?:5_PBKDF2_PRF_HMAC_SHA1|_OAEP_(?:MGF(?:1_(?:MD5|SHA1)|_NONE)|PSOURCE_(?:NONE|Pspecified)))|RIVILEGE_SCOPE_(?:NONE|PROCESS|THREAD)|VC_(?:APP|NONE|SP))|QUERY_(?:RETURN_DATA|SIZELIMIT_NONE|TIMELIMIT_NONE)|S(?:AMPLE_TYPE_(?:ASYMMETRIC_KEY|BIOMETRIC|COMMENT|HASHED_PASSWORD|KEY(?:BAG_KEY|CHAIN_(?:CHANGE_LOCK|LOCK|PROMPT))|P(?:ASSWORD|R(?:EAUTH|O(?:CESS|MPTED_(?:BIOMETRIC|PASSWORD)|TECTED_(?:BIOMETRIC|PASSWORD))))|RETRY_ID|S(?:IGNED_(?:NONCE|SECRET)|YMMETRIC_KEY)|THRESHOLD)|ERVICE_(?:AC|C(?:L|S(?:P|SM))|DL|KR|TP))|T(?:P_(?:A(?:CTION_(?:ALLOW_EXPIRED(?:_ROOT)?|CRL_SUFFICIENT|DEFAULT|FETCH_C(?:ERT_FROM_NET|RL_FROM_NET)|IMPLICIT_ANCHORS|LEAF_IS_CA|REQUIRE_(?:CRL_(?:IF_PRESENT|PER_CERT)|REV_PER_CERT)|TRUST_SETTINGS)|UTHORITY_REQUEST_C(?:ERT(?:ISSUE|NOTARIZE|RE(?:SUME|VOKE)|SUSPEND|USERECOVER|VERIFY)|RLISSUE))|BASE_(?:ERROR|TP_ERROR)|C(?:ERT(?:CHANGE_(?:HOLD|NO(?:NE|T_AUTHORIZED)|OK(?:WITHNEWTIME)?|RE(?:ASON_(?:AFFILIATIONCHANGE|C(?:ACOMPROMISE|EASEOPERATION)|HOLDRELEASE|KEYCOMPROMISE|SU(?:PERCEDED|SPECTEDCOMPROMISE)|UNKNOWN)|JECTED|LEASE|VOKE)|STATUS_UNKNOWN|WRONGCA)|ISSUE_(?:NOT_AUTHORIZED|OK(?:WITH(?:CERTMODS|SERVICEMODS))?|REJECTED|STATUS_UNKNOWN|WILL_BE_REVOKED)|NOTARIZE_(?:NOT_AUTHORIZED|OK(?:WITH(?:OUTFIELDS|SERVICEMODS))?|REJECTED|STATUS_UNKNOWN)|RECLAIM_(?:NO(?:MATCH|T_AUTHORIZED)|OK|REJECTED|STATUS_UNKNOWN)|VERIFY_(?:EXPIRED|INVALID(?:_(?:AUTHORITY|BASIC_CONSTRAINTS|C(?:ERT(?:GROUP|_VALUE)|RL_DIST_PT)|NAME_TREE|POLICY(?:_IDS)?|SIGNATURE))?|NOT_VALID_YET|REVOKED|SUSPENDED|UNKNOWN(?:_CRITICAL_EXT)?|VALID)|_(?:DIR_UPDATE|NOTIFY_RENEW|PUBLISH))|ONFIRM_(?:ACCEPT|REJECT|STATUS_UNKNOWN)|RL(?:ISSUE_(?:INVALID_DOMAIN|NOT_(?:AUTHORIZED|CURRENT)|OK|REJECTED|STATUS_UNKNOWN|UNKNOWN_IDENTIFIER)|_DISTRIBUTE))|FORM_TYPE_(?:GENERIC|REGISTRATION)|KEY_ARCHIVE|PRIVATE_ERROR|STOP_ON_(?:FIRST_(?:FAIL|PASS)|NONE|POLICY))|RUE)|USEE_(?:AUTHENTICATION|DOMESTIC|FINANCIAL|INSURANCE|K(?:EYEXCH|R(?:ENT|LE))|LAST|MEDICAL|NONE|SSL|WEAK)|VALUE_NOT_AVAILABLE|WORDID_(?:A(?:CL|LPHA|SYMMETRIC_KEY)?|B(?:ER|I(?:NARY|OMETRIC))?|C(?:ANCELED|ERT|OMMENT|RL|USTOM)?|D(?:ATE|B(?:S_(?:CREATE|DELETE)|_(?:DELETE|EXEC_STORED_QUERY|INSERT|MODIFY|READ))|E(?:CRYPT|L(?:ETE|TA_CRL)|R(?:IVE)?)|ISPLAY|O|SA(?:_SHA1)?)?|E(?:LGAMAL|N(?:CRYPT|TRY)|XPORT_(?:CLEAR|WRAPPED))?|G(?:E(?:NKEY)?)?|HA(?:SH(?:ED_(?:PASSWORD|SUBJECT))?|VAL)|I(?:BCHASH|MPORT_(?:CLEAR|WRAPPED)|NTEL|SSUER(?:_INFO)?)|K(?:E(?:A|Y(?:BAG_KEY|CHAIN_(?:CHANGE_LOCK|LOCK|PROMPT)|HOLDER)?)|_OF_N)|L(?:E|OGIN(?:_NAME)?)?|M(?:AC|D(?:2(?:WITHRSA)?|4|5(?:WITHRSA)?))|N(?:AME|DR|HASH|OT_(?:AFTER|BEFORE)|U(?:LL|MERIC))?|O(?:BJECT_HASH|N(?:E_TIME|LINE)|WNER)|P(?:A(?:M_NAME|RTITION|SSWORD)|GP|IN|R(?:E(?:AUTH(?:_SOURCE)?|FIX)|IVATE_KEY|O(?:CESS|MPTED_(?:BIOMETRIC|PASSWORD)|PAGATE|TECTED_(?:BIOMETRIC|P(?:ASSWORD|IN))))|UBLIC_KEY(?:_FROM_CERT)?)?|Q|R(?:ANGE|EVAL|IPEM(?:AC|D(?:160)?)|SA(?:_(?:ISO9796|PKCS(?:1(?:_(?:MD5|S(?:HA1|IG)))?|_(?:MD5|SHA1))?|RAW))?)|S(?:DSIV1|E(?:QUENCE|T|XPR)|HA1(?:WITH(?:DSA|ECDSA|RSA))?|IGN(?:ATURE|ED_(?:NONCE|SECRET))?|PKI|UBJECT(?:_INFO)?|Y(?:MMETRIC_KEY|STEM))|T(?:AG|HRESHOLD|IME)|URI|VE(?:NDOR_(?:END|START)|RSION)|X(?:509(?:V(?:1|2|3)|_ATTRIBUTE)|9_ATTRIBUTE)|_(?:FIRST_UNUSED|NLU_|RESERVED_1|STAR_|UNK_))|X509_DATAFORMAT_(?:ENCODED|PA(?:IR|RSED))))|_MAX_PATH)|antDecompress|o(?:mm(?:entID|onID)|pyrightID))|D(?:RAWHook|T_(?:Authority(?:InfoAccess|KeyID)|BasicConstraints|C(?:ertPolicies|rl(?:DistributionPoints|Number|Reason))|DeltaCrl|ExtendedKeyUsage|I(?:nhibitAnyPolicy|ssu(?:erAltName|ingDistributionPoint))|KeyUsage|N(?:ameConstraints|etscapeCertType)|Other|Policy(?:Constraints|Mappings)|QC_Statements|Subject(?:AltName|KeyID)))|E(?:OLHook|QUALTO|V(?:HIDE|LEVEL|MOVE|NOP|SHOW))|F(?:ORMID|or(?:matVersionID|ward(?:BackwardLooping|Looping)))|G(?:NT_(?:D(?:NSName|irectoryName)|EdiPartyName|IPAddress|OtherName|R(?:FC822Name|egisteredID)|URI|X400Address)|REATERTHAN)|H(?:DActivity|ITTESTHook)|I(?:dleActivity|nstrumentID)|KAEISHandleCGI|L(?:A(?:TENCY_QOS_TIER_(?:0|1|2|3|4|5|UNSPECIFIED)|UNCH_DATA_(?:ARRAY|BOOL|DICTIONARY|ERRNO|FD|INTEGER|MACHPORT|OPAQUE|REAL|STRING))|ESSTHAN)|M(?:ACE(?:3Type|6Type)|IDIDataID|PLibrary_(?:DevelopmentRevision|M(?:ajorVersion|inorVersion)|Release)|arkerID)|N(?:X_(?:BigEndian|L(?:eftButton|ittleEndian)|OneButton|RightButton|UnknownByteOrder)|ameID|etActivity|o(?:Looping|neType))|O(?:S(?:A(?:ControlFlowError|Duplicate(?:Handler|P(?:arameter|roperty))|I(?:llegal(?:A(?:ccess|ssign)|Index|Range)|nconsistentDeclarations)|M(?:essageNotUnderstood|issingParameter)|ParameterMismatch|Syntax(?:Error|TypeError)|TokenTooLong|Undefined(?:Handler|Variable))|_LOG_TYPE_(?:DE(?:BUG|FAULT)|ERROR|FAULT|INFO))|verallAct)|S(?:SL_(?:DH(?:E_(?:DSS_(?:EXPORT_WITH_DES40_CBC_SHA|WITH_(?:3DES_EDE_CBC_SHA|DES_CBC_SHA))|RSA_(?:EXPORT_WITH_DES40_CBC_SHA|WITH_(?:3DES_EDE_CBC_SHA|DES_CBC_SHA)))|_(?:DSS_(?:EXPORT_WITH_DES40_CBC_SHA|WITH_(?:3DES_EDE_CBC_SHA|DES_CBC_SHA))|RSA_(?:EXPORT_WITH_DES40_CBC_SHA|WITH_(?:3DES_EDE_CBC_SHA|DES_CBC_SHA))|anon_(?:EXPORT_WITH_(?:DES40_CBC_SHA|RC4_40_MD5)|WITH_(?:3DES_EDE_CBC_SHA|DES_CBC_SHA|RC4_128_MD5))))|FORTEZZA_DMS_WITH_(?:FORTEZZA_CBC_SHA|NULL_SHA)|N(?:O_SUCH_CIPHERSUITE|ULL_WITH_NULL_NULL)|RSA_(?:EXPORT_WITH_(?:DES40_CBC_SHA|RC(?:2_CBC_40_MD5|4_40_MD5))|WITH_(?:3DES_EDE_CBC_(?:MD5|SHA)|DES_CBC_(?:MD5|SHA)|IDEA_CBC_(?:MD5|SHA)|NULL_(?:MD5|SHA)|RC(?:2_CBC_MD5|4_128_(?:MD5|SHA)))))|lpTypeErr|oundDataID)|T(?:ASK_(?:BACKGROUND_APPLICATION|CONTROL_APPLICATION|D(?:ARWINBG_APPLICATION|EFAULT_APPLICATION)|FOREGROUND_APPLICATION|GRAPHICS_SERVER|INSPECT_BASIC_COUNTS|NONUI_APPLICATION|RENICED|THROTTLE_APPLICATION|UNSPECIFIED)|HROUGHPUT_QOS_TIER_(?:0|1|2|3|4|5|UNSPECIFIED)|LS_(?:AES_(?:128_(?:CCM_(?:8_SHA256|SHA256)|GCM_SHA256)|256_GCM_SHA384)|CHACHA20_POLY1305_SHA256|DH(?:E_(?:DSS_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:256)?|GCM_SHA384)))|PSK_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|NULL_SHA(?:256|384)?|RC4_128_SHA)|RSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:256)?|GCM_SHA384))))|_(?:DSS_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:256)?|GCM_SHA384)))|RSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:256)?|GCM_SHA384)))|anon_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:256)?|GCM_SHA384))|RC4_128_MD5)))|E(?:CDH(?:E_(?:ECDSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|CHACHA20_POLY1305_SHA256|NULL_SHA|RC4_128_SHA)|PSK_WITH_AES_(?:128_CBC_SHA|256_CBC_SHA)|RSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|CHACHA20_POLY1305_SHA256|NULL_SHA|RC4_128_SHA))|_(?:ECDSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|NULL_SHA|RC4_128_SHA)|RSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|NULL_SHA|RC4_128_SHA)|anon_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_CBC_SHA|256_CBC_SHA)|NULL_SHA|RC4_128_SHA)))|MPTY_RENEGOTIATION_INFO_SCSV)|NULL_WITH_NULL_NULL|PSK_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|CHACHA20_POLY1305_SHA256|NULL_SHA(?:256|384)?|RC4_128_SHA)|RSA_(?:PSK_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|NULL_SHA(?:256|384)?|RC4_128_SHA)|WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:256)?|GCM_SHA384))|NULL_(?:MD5|SHA(?:256)?)|RC4_128_(?:MD5|SHA))))|extWidthHook)|U(?:NORDERED|srActivity)|W(?:DEFNFnd|IDTHHook)|XPC_ACTIVITY_STATE_(?:C(?:HECK_IN|ONTINUE)|D(?:EFER|ONE)|RUN|WAIT)|a(?:b(?:brevDate|ortErr)|c(?:tiv(?:Dev|Mask|ateEvt|eFlag(?:Bit)?)|uteUpr(?:A|I|O|U))|d(?:bAddrMask|d(?:Re(?:fFailed|sFailed)|Size(?:Bit)?))|eBuildSyntax(?:Bad(?:D(?:ata|esc)|EOF|Hex|Negative|Token)|CoercedList|MissingQuote|No(?:C(?:lose(?:Brac(?:e|ket)|Hex|Paren|String)|olon)|E(?:OF|rr)|Key)|OddHex|Uncoerced(?:DoubleAt|Hex))|fp(?:A(?:ccessDenied|lready(?:LoggedInErr|Mounted)|uthContinue)|B(?:ad(?:DirIDType|IDErr|UAM|VersNum)|itmapErr)|C(?:a(?:llNot(?:Allowed|Supported)|nt(?:Mo(?:untMoreSrvre|ve)|Rename)|talogChanged)|ontainsSharedErr)|D(?:enyConflict|i(?:ffVolErr|rNot(?:Empty|Found)|skFull))|EofError|F(?:ileBusy|latVol)|I(?:D(?:Exists|NotFound)|conTypeError|nside(?:SharedErr|TrashErr)|temNotFound)|LockErr|MiscErr|No(?:MoreLocks|Server)|Object(?:Exists|Locked|NotFound|TypeErr)|P(?:armErr|wd(?:ExpiredErr|NeedsChangeErr|PolicyErr|SameErr|TooShortErr))|Range(?:NotLocked|Overlap)|S(?:ame(?:NodeErr|ObjectErr)|e(?:rverGoingDown|ssClosed))|TooManyFilesOpen|UserNotAuth|VolLocked)|l(?:phaLock(?:Bit)?|tDBoxProc)|pp(?:1(?:Evt|Mask)|2(?:Evt|Mask)|3(?:Evt|Mask)|4(?:Evt|Mask)|IsDaemon|M(?:emFullErr|odeErr)|VersionTooOld|e(?:arance(?:Bad(?:BrushIndexErr|CursorIndexErr|TextColorIndexErr)|Process(?:NotRegisteredErr|RegisteredErr)|ThemeHasNoAccents)|ndDITL(?:Bottom|Right))|le(?:Logo|MenuFolderIconResource))|s(?:i(?:AliasName|ParentName|ServerName|VolumeName|ZoneName)|p(?:B(?:adVersNum|ufTooSmall)|No(?:Ack|MoreSess|Servers)|ParamErr|S(?:e(?:rverBusy|ssClosed)|izeErr)|TooMany))|t(?:AbsoluteCenter|Bottom(?:Left|Right)?|Center(?:Bottom|Left|Right|Top)|HorizontalCenter|Left|None|Right|Top(?:Left|Right)?|VerticalCenter|om(?:IndexInvalidErr|sNotOfSameTypeErr)|p(?:BadRsp|LenErr))|u(?:t(?:hFailErr|oKey(?:Mask)?)|xiliaryExportDataUnavailable))|b(?:A(?:ccessCntl|llowCDiDataHandler|ncestorModDateChanges)|DoNotDisplay|Ha(?:ndleAERecording|s(?:B(?:TreeMgr|lankAccessPrivileges)|C(?:atSearch|opyFile)|D(?:esktopMgr|irectIO)|ExtFSVol|F(?:ileIDs|olderLock)|MoveRename|OpenDeny|PersonalAccessPrivileges|ShortName|UserGroupList))|Is(?:AutoMounted|Case(?:Preserving|Sensitive)|Ejectable|On(?:ExternalBus|InternalBus)|Removable)|L(?:2PCanMapFileBlocks|anguageMask|imitFCBs|ocalWList)|No(?:BootBlks|DeskItems|LclSync|MiniFndr|RootTimes|S(?:witchTo|ysDir)|V(?:NEdit|olumeSizes))|ParentModDateChanges|S(?:cript(?:LanguageMask|Mask)|upports(?:2TBFiles|AsyncRequests|Ex(?:clusiveLocks|tendedFileSecurity)|FS(?:CatalogSearch|ExchangeObjects)|HFSPlusAPIs|Journaling|LongNames|MultiScriptNames|NamedForks|S(?:ubtreeIterators|ymbolicLinks)|TrashVolumeCache))|T(?:akeActiveEvent|rshOffLine)|a(?:d(?:ATPSkt|B(?:tSlpErr|uffNum)|C(?:allOrderErr|hannel|ksmErr|o(?:decCharacterizationErr|mponent(?:Instance|Selector|Type)|ntrollerHeight))|D(?:BtSlp|Cksum|ataRefIndex|e(?:lim|pthErr)|ictFormat|rag(?:FlavorErr|ItemErr|RefErr))|E(?:dit(?:Index|List|ionFileErr)|nding|xtResource)|F(?:CBErr|i(?:dErr|leFormat)|o(?:lderDescErr|rmat))|I(?:mage(?:Description|Err|RgnErr)|nputText)|LocNameErr|M(?:DBErr|ovErr)|P(?:asteboard(?:FlavorErr|I(?:ndexErr|temErr)|SyncErr)|ortNameErr|rofileError|ublicMovieAtom)|R(?:eqErr|outingSizeErr)|S(?:GChannel|crapRefErr|e(?:ctionErr|rviceMethodErr)|ubPartErr)|Tra(?:ckIndex|nslation(?:RefErr|SpecErr))|UnitErr)|se(?:DblQuote|SingQuote))|dNamErr|re(?:akRecd|veMark)|t(?:DupRecErr|Key(?:AttrErr|LenErr)|NoSpace|RecNotFnd|n(?:Ctrl|State(?:Bit)?))|uf(?:2SmallErr|TooSmall|fer(?:IsSmall|sTooSmall)))|c(?:A(?:DBAddress|EList|ccessory(?:Process|Suitcase)|ddress(?:Spec)?|lias(?:File|List|OrString)|p(?:pl(?:eTalkAddress|ication(?:File|Process)?)|ril)|rc|ugust)|B(?:o(?:dyColor|olean)|usAddress)|C(?:ell|har|l(?:assIdentifier|ipping(?:File|Window)|osure)|o(?:erc(?:e(?:KataHiragana|LowerCase|OneByteToTwoByte|Remove(?:Diacriticals|Hyphens|Punctuation|WhiteSpace)|SmallKana|UpperCase|Zenkakuhankaku)|ion)|l(?:orTable|umn)|n(?:stant|t(?:ainer(?:Window)?|entSpace|rolPanelFile))))|D(?:TPWindow|e(?:cember|pthErr|sk(?:AccessoryFile|top(?:Printer)?)|v(?:Err|Spec))|isk|ocument(?:File)?|rawingArea|ynamicLibrary)|E(?:n(?:tireContents|umeration)|thernetAddress|ventIdentifier)|F(?:TPItem|ebruary|i(?:le|reWireAddress|xed(?:Point|Rectangle)?)|o(?:lder|nt(?:File|Suitcase))|r(?:ame(?:Color|work)|iday))|Gr(?:aphic(?:Line|Object|Shape|Text)|oup(?:edGraphic)?)|H(?:TML|andle(?:Breakpoint|r))|I(?:PAddress|conFamily|n(?:foWindow|sertion(?:Loc|Point)|t(?:ern(?:alFinderObject|etAddress)|l(?:Text|WritingCode)))|tem)|J(?:anuary|u(?:ly|ne))|Key(?:Form|Identifier|stroke)|L(?:abel|i(?:n(?:e|kedList)|st(?:Element|Or(?:Record|String)|RecordOrString)?)|o(?:calTalkAddress|ng(?:DateTime|Fixed(?:Point|Rectangle)?|Integer|Point|Rectangle)))|M(?:a(?:chine(?:Loc)?|rch|tchErr|y)|enu(?:Item)?|issingValue|on(?:day|th))|N(?:o(?:MemErr|vember)|umber(?:DateTimeOrString|Or(?:DateTime|String))?)|O(?:bject(?:BeingExamined|Specifier)?|ctober|nline(?:Disk|LocalDisk|RemoteDisk)|penableObject|val)|P(?:ICT|a(?:ckage|ragraph)|ixel(?:Map)?|olygon|r(?:e(?:ferences(?:Window)?|position)|o(?:ce(?:dure|ss)|perty|tectErr)))|QD(?:Point|Rectangle)|R(?:GBColor|a(?:ngeErr|wData)|e(?:al|c(?:ord|tangle)|ference|sErr)|o(?:tation|undedRectangle|w)|unningAddress)|S(?:CSIAddress|aturday|cript(?:ingAddition)?|e(?:conds|lection|ptember)|h(?:ar(?:ableContainer|ing(?:Privileges|Window))|ortInteger)|mallReal|ound(?:File)?|pecialFolders|t(?:atusWindow|orage|ring(?:Class)?)|u(?:itcase|nday)|ymbol)|T(?:able|e(?:mpMemErr|xt(?:Color|Flow|Styles)?)|hu(?:mbColor|rsday)|okenRingAddress|rash|uesday|ype)|U(?:RL|SBAddress|ndefined|ser(?:Identifier)?)|Ve(?:ctor|rsion)|W(?:e(?:dnesday|ekday)|indow|ord|ritingCodeInfo)|Zone|a(?:l(?:Arabic(?:Civil|Lunar)|Coptic|Gregorian|J(?:apanese|ewish)|Persian|l(?:NotSupportedByNodeErr|erSecuritySession))|n(?:cel|not(?:BeLeafAtomErr|DeferErr|FindAtomErr|M(?:akeContiguousErr|oveAttachedController)|SetWidthOfAttachedController)|t(?:Create(?:PickerWindow|SingleForkFile)|DoThatInCurrentMode|EnableTrack|FindHandler|GetFlavorErr|LoadP(?:ackage|ick(?:MethodErr|er))|OpenHandler|PutPublicMovieAtom|Re(?:adUtilities|ceiveFromSynthesizerOSErr)|S(?:endToSynthesizerOSErr|tepErr)))|tChangedErr|utionIcon)|bNotFound|dev(?:GenErr|MemErr|ResErr|Unset)|e(?:dilla|nt(?:eredDot|ury))|frag(?:A(?:bortClosureErr|rchitectureErr)|C(?:F(?:M(?:InternalErr|StartupErr)|ragRsrcErr)|losureIDErr|on(?:nectionIDErr|t(?:ainerIDErr|extIDErr)))|DupRegistrationErr|ExecFileRefErr|F(?:i(?:leSizeErr|rst(?:ErrCode|ReservedCode))|ragment(?:CorruptErr|FormatErr|UsageErr))|I(?:mportToo(?:NewErr|OldErr)|nit(?:AtBootErr|FunctionErr|LoopErr|OrderErr))|L(?:astErrCode|ibConnErr)|MapFileErr|No(?:ApplicationErr|ClientMemErr|IDsErr|LibraryErr|P(?:ositionErr|rivateMemErr)|RegistrationErr|S(?:ectionErr|ymbolErr)|tClosureErr)|OutputLengthErr|R(?:eservedCode_(?:1|2|3)|srcForkErr)|StdFolderErr|UnresolvedErr)|h(?:a(?:nnel(?:Busy|NotBusy)|rCodeMask)|eckBoxProc|kCtrl)|ircumflex(?:Upr(?:A|E|I|O|U))?|kSumErr|l(?:earDev|k(?:RdErr|WrErr)|os(?:Err|eDev)|rBit)|m(?:1(?:0CLRData|1CLRData|2CLRData|3CLRData|4CLRData|5CLRData|6_8ColorPacking)|24_8ColorPacking|3(?:2_(?:16ColorPacking|32ColorPacking|8ColorPacking)|CLRData)|4(?:0_8ColorPacking|8_(?:16ColorPacking|8ColorPacking)|CLRData)|5(?:6_8ColorPacking|CLRData)|6(?:4_(?:16ColorPacking|8ColorPacking)|CLRData)|7CLRData|8(?:CLRData|_8ColorPacking)|9CLRData|A(?:RGB(?:32(?:PmulSpace|Space)|64(?:L(?:PmulSpace|Space)|PmulSpace|Space))|ToB(?:0Tag|1Tag|2Tag)|b(?:ortWriteAccess|s(?:oluteColorimetric|tractClass))|lpha(?:FirstPacking|LastPacking|PmulSpace|Space)|sciiData)|B(?:ToA(?:0Tag|1Tag|2Tag)|e(?:ginAccess|stMode)|inaryData|l(?:ackPointCompensation(?:Mask)?|ue(?:ColorantTag|TRCTag))|radfordChromaticAdaptation|ufferBasedProfile)|C(?:M(?:SReservedFlagsMask|Y(?:Data|K(?:32Space|64(?:LSpace|Space)|Data|Space)))|S(?:1(?:C(?:hromTag|ustTag)|NameTag|ProfileVersion|TRCTag)|2ProfileVersion)|a(?:librationDateTimeTag|meraDeviceClass|nt(?:Co(?:ncatenateError|pyModifiedV1Profile)|Delete(?:Element|Profile)|GamutCheckError|XYZ))|h(?:arTargetTag|romaticAdaptationTag)|lose(?:Access|Spool)|o(?:lorSpace(?:AlphaMask|Class|EncodingMask|P(?:ackingMask|remulAlphaMask)|ReservedMask|Space(?:AndAlphaMask|Mask))|pyrightTag)|reateNewAccess|urrent(?:DeviceInfoVersion|Profile(?:InfoVersion|LocationSize|MajorVersion)))|D(?:e(?:fault(?:DeviceID|ProfileID)|vice(?:AlreadyRegistered|DBNotFoundErr|InfoVersion1|M(?:fgDescTag|odelDescTag)|NotRegistered|Profile(?:InfoVersion(?:1|2)|sNotFound)|State(?:AppleRsvdBits|Busy|De(?:fault|viceRsvdBits)|ForceNotify|Offline)))|isplay(?:Class|DeviceClass|Use)|raftMode)|E(?:lementTagNotFound|mbedded(?:Mask|Profile|Use(?:Mask)?)|ndAccess|rrIncompatibleProfile)|F(?:atalProfileErr|lare(?:0|100))|G(?:amut(?:CheckingMask|Result(?:1Space|Space)|Tag)|eometry(?:0(?:45or450|dord0)|Unknown)|lossy(?:MatteMask)?|r(?:ay(?:16(?:LSpace|Space)|8Space|A(?:16(?:PmulSpace|Space)|32(?:L(?:PmulSpace|Space)|PmulSpace|Space)|PmulSpace|Space)|Data|Space|TRCTag)|een(?:ColorantTag|TRCTag)))|H(?:LS(?:32Space|Data|Space)|SV(?:32Space|Data|Space))|I(?:CC(?:ProfileVersion(?:2(?:1)?|4)|ReservedFlagsMask)|lluminant(?:A|D(?:5(?:0|5)|65|93)|EquiPower|F(?:2|8)|Unknown)|n(?:dexRangeErr|put(?:Class|Use)|ter(?:nalCFErr|polationMask)|valid(?:ColorSpace|DstMap|Profile(?:Comment|Location)?|S(?:earch|rcMap)))|terate(?:AllDeviceProfiles|Cu(?:rrentDeviceProfiles|stomDeviceProfiles)|DeviceProfilesMask|FactoryDeviceProfiles))|L(?:AB(?:24Space|32Space|48(?:LSpace|Space)|Space)|UV(?:32Space|Space)|abData|i(?:n(?:e(?:arChromaticAdaptation|sPer)|kClass)|ttleEndianPacking)|ong(?:10ColorPacking|8ColorPacking)|u(?:minanceTag|vData))|M(?:C(?:Eight(?:8Space|Space)|Five(?:8Space|Space)|H(?:5Data|6Data|7Data|8Data)|S(?:even(?:8Space|Space)|ix(?:8Space|Space)))|a(?:cintosh|gicNumber|keAndModelTag)|e(?:asurementTag|dia(?:BlackPointTag|WhitePointTag)|thod(?:Error|NotFound))|icrosoft)|N(?:a(?:med(?:Color(?:2Tag|Class|NotFound|Tag)|Data|Indexed(?:32(?:LSpace|Space)|Space))|tiveDisplayInfoTag)|o(?:C(?:olorPacking|urrentProfile)|GDevicesError|ProfileBase|Space|rmalMode)|umHeaderElements)|O(?:neBitDirectPacking|pen(?:Read(?:Access|Spool)|Write(?:Access|Spool))|riginalProfileLocationSize|utput(?:Class|Use))|P(?:S(?:2(?:C(?:RD(?:0Tag|1Tag|2Tag|3Tag|VMSizeTag)|SATag)|RenderingIntentTag)|7bit|8bit)|a(?:rametricType(?:0|1|2|3|4)|thBasedProfile)|erceptual|r(?:e(?:fsSynchError|view(?:0Tag|1Tag|2Tag))|interDeviceClass|o(?:file(?:Description(?:MLTag|Tag)|Error|IterateDataVersion(?:1|2|3|4)|MajorVersionMask|NotFound|SequenceDescTag|sIdentical)|of(?:DeviceClass|Use))|trDefaultScreens))|QualityMask|R(?:GB(?:16(?:LSpace|Space)|24Space|32Space|48(?:LSpace|Space)|565(?:LSpace|Space)|A(?:32(?:PmulSpace|Space)|64(?:L(?:PmulSpace|Space)|PmulSpace|Space)|PmulSpace|Space)|Data|Space)|angeOverFlow|e(?:ad(?:Access|Spool)|d(?:ColorantTag|TRCTag)|flective(?:TransparentMask)?|lativeColorimetric|servedSpace(?:1|2)|verseChannelPacking))|S(?:RGB(?:16ChannelEncoding|Data)|aturation|c(?:annerDeviceClass|reening(?:DescTag|Tag))|earchError|i(?:g(?:C(?:rdInfoType|urveType)|Dat(?:aType|eTimeType)|Lut(?:16Type|8Type)|M(?:akeAndModelType|easurementType|ulti(?:Funct(?:A2BType|B2AType)|LocalizedUniCodeType))|Na(?:medColor(?:2Type|Type)|tiveDisplayInfoType)|P(?:S2CRDVMSizeType|arametricCurveType|rofile(?:DescriptionType|SequenceDescType))|S(?:15Fixed16Type|creeningType|ignatureType)|TextType|U(?:1(?:6Fixed16Type|Fixed15Type)|Int(?:16Type|32Type|64Type|8Type)|crBgType|nicodeTextType)|Vi(?:deoCardGammaType|ewingConditionsType)|XYZType)|liconGraphics)|olaris|potFunction(?:Cross|D(?:efault|iamond)|Ellipse|Line|Round|Square|Unknown)|tdobs(?:19(?:31TwoDegrees|64TenDegrees)|Unknown))|T(?:aligent|echnology(?:AMDisplay|CRTDisplay|D(?:igitalCamera|yeSublimationPrinter)|Electro(?:photographicPrinter|staticPrinter)|F(?:ilm(?:Scanner|Writer)|lexography)|Gravure|InkJetPrinter|OffsetLithography|P(?:MDisplay|hoto(?:CD|ImageSetter|graphicPaperPrinter)|rojectionTelevision)|ReflectiveScanner|Silkscreen|T(?:ag|hermalWaxPrinter)|Video(?:Camera|Monitor)))|U(?:crBgTag|nsupportedDataType|seDefaultChromaticAdaptation)|V(?:i(?:deoCardGamma(?:FormulaType|Ta(?:bleType|g))|ewingConditions(?:DescTag|Tag))|onKriesChromaticAdaptation)|W(?:ord5(?:65ColorPacking|ColorPacking)|rite(?:Access|Spool))|XYZ(?:24Space|32Space|48(?:LSpace|Space)|Data|Space)|Y(?:CbCrData|XY(?:32Space|Space)|xyData)|apFontTableTag|dKey(?:Bit)?|p(?:Alias(?:NoFlags|OnlyThisFile)|IsMissing|ThreadSafe|WantsRegisterMessage))|o(?:dec(?:AbortErr|BadDataErr|C(?:ant(?:QueueErr|WhenErr)|onditionErr)|D(?:ataVersErr|isabledErr|roppedFrameErr)|E(?:rr|xtensionNotFoundErr)|ImageBufErr|N(?:eed(?:AccessKeyErr|ToFlushChainErr)|o(?:MemoryPleaseWaitErr|thingToBlitErr))|O(?:ffscreenFailed(?:Err|PleaseRetryErr)|penErr)|ParameterDialogConfirm|S(?:creenBufErr|izeErr|poolErr)|UnimpErr|WouldOffscreenErr)|l(?:lection(?:I(?:ndexRangeErr|tem(?:LockedErr|NotFoundErr))|VersionErr)|or(?:SyncNotInstalled|sRequestedErr))|mponent(?:AutoVersionIncludeFlags|D(?:ll(?:EntryNotFoundErr|LoadErr)|o(?:AutoVersion|ntRegister))|HasMultiplePlatforms|LoadResident|Not(?:Captured|ThreadSafeErr)|WantsUnregister)|n(?:nectionInvalid|straintReachedErr|t(?:ainer(?:AlreadyOpenWrn|NotFoundWrn)|rol(?:Err|HandleInvalidErr|InvalidDataVersionErr|Key(?:Bit)?|P(?:anelFolderIconResource|roperty(?:Invalid|NotFoundErr))|ler(?:BoundsNotExact|HasFixedHeight))))|pyDev|r(?:Err|eFoundationUnknownErr)|uld(?:Not(?:ParseSourceFileErr|ResolveDataRef|UseAnExistingSample)|ntGetRequiredComponent))|rash|trlItem|u(?:r(?:NumberPartsVersion|r(?:LeadingZ|NegSym|SymLead|TrailingZ|ent(?:CurLang|DefLang))|sorDev)|tDev))|d(?:BoxProc|InstErr|RemovErr|a(?:t(?:a(?:Already(?:Closed|OpenForWrite)|No(?:DataRef|tOpenFor(?:Read|Write))|VerErr)|e(?:StdMask|Time(?:Invalid|NotFound)))|y(?:Field|LdingZ|Mask|Of(?:Week(?:Field|Mask)|Year(?:Field|Mask))))|blDagger|c(?:eExtErr|m(?:B(?:ad(?:D(?:ataSizeErr|ictionaryErr)|F(?:eatureErr|i(?:eld(?:InfoErr|TypeErr)|ndMethodErr))|KeyErr|PropertyErr)|lockFullErr|ufferOverflowErr)|D(?:ictionary(?:BusyErr|NotOpenErr)|upRecordErr)|IterationCompleteErr|N(?:ecessaryFieldErr|o(?:AccessMethodErr|FieldErr|RecordErr|tDictionaryErr))|P(?:aramErr|ermissionErr|rotectedErr)|TooManyKeyErr))|dp(?:LenErr|SktErr)|e(?:activDev|bugging(?:Duplicate(?:OptionErr|SignatureErr)|ExecutionContextErr|Invalid(?:NameErr|OptionErr|SignatureErr)|No(?:CallbackErr|MatchErr))|fault(?:Component(?:Any(?:Flags(?:AnyManufacturer(?:AnySubType)?)?|Manufacturer|SubType)|Identical)|PhysicalEntryCount)|limPad|s(?:criptorFontTableTag|k(?:PatID|top(?:DamagedErr|IconResource))|tPortErr)|viceCantMeetRequest)|i(?:a(?:eresisUpr(?:E|I|Y)|log(?:Kind|NoTimeoutErr))|ffVolErr|giUnimpErr|r(?:FulErr|NFErr|ectXObjectAlreadyExists)|sk(?:Evt|Mask))|my|o(?:All|Color|F(?:ace|ont)|Size|Toggle|cumentProc|m(?:Cannot|Native|TranslateFirst|Wildcard)|tlessLwrI|ubleAcute)|r(?:agNotAcceptedErr|iver(?:Evt|HardwareGoneErr|Mask)|opFolderIconResource|vQType)|s(?:32BitMode|AddressErr|B(?:ad(?:L(?:aunch|ibrary)|Patch(?:Header)?|S(?:ANEOpcode|lotInt|tartupDisk))|u(?:fPtrTooLow|sError))|C(?:DEFNotFound|antHoldSystemHeap|hkErr|oreErr)|Di(?:rtyDisk|sassemblerInstalled)|ExtensionsDisabled|F(?:PErr|SErr|inderErr|orcedQuit)|G(?:ibblyMovedToDisabledFolder|reeting)|H(?:D20Installed|MenuFindErr)|I(?:OCoreErr|llInstErr|rqErr)|L(?:ine(?:AErr|FErr)|o(?:adErr|stConnectionToNetworkDisk))|M(?:B(?:ATA(?:PISysError|SysError)|ExternFlpySysError|FlpySysError|SysError|arNFnd)|DEFNotFound|ac(?:OSROMVersionTooOld|sBugInstalled)|emFullErr|i(?:scErr|xedModeFailure)|ustUseFCBAccessors)|N(?:eedToWriteBootBlocks|o(?:Exts(?:Disassembler|MacsBug)|FPU|P(?:a(?:ckErr|tch)|k(?:1|2|3|4|5|6|7))|t(?:EnoughRAMToBoot|The1)))|O(?:ldSystem|vflowErr)|P(?:CCardATASysError|arityErr|rivErr)|R(?:AMDiskTooBig|e(?:insert|moveDisk))|S(?:CSIWarn|hutDownOrRes(?:tart|ume)|tknHeap|witchOffOrRestart|ys(?:Err|tem(?:FileErr|RequiresPowerPC)))|TraceErr|UnBootableSystem|VM(?:BadBackingStore|DeferredFuncTableFull)|W(?:DEFNotFound|riteToSupervisorStackGuardPage)|ZeroDivErr|kFulErr)|tQType|u(?:mmyType|p(?:FNErr|licate(?:AtomTypeAndIDErr|F(?:lavorErr|olderDescErr)|HandlerErr|PasteboardFlavorErr|RoutingErr|ScrapFlavorErr))|ration(?:Day|Forever|Hour|Mi(?:crosecond|llisecond|nute)|NoWait|Second))|ym)|e(?:A(?:DB|ddressSpec|nalogAudio|ppleTalk|udio(?:Line(?:In|Out)|Out))|Bus|C(?:DROM|apsLockDown|learKey|o(?:mm(?:Slot|andDown)|n(?:duit|trolDown)))|D(?:VD|e(?:leteKey|viceType)|i(?:gitalAudio|splay)|ownArrowKey)|E(?:n(?:dKey|terKey)|scapeKey|thernet)|F(?:1(?:0Key|1Key|2Key|3Key|4Key|5Key|Key)|2Key|3Key|4Key|5Key|6Key|7Key|8Key|9Key|ireWire|loppy|orwardDelKey)|H(?:D|elpKey|omeKey)|I(?:P|RTalk|nfrared|rDA)|Key(?:Kind|board)|L(?:CD|e(?:ftArrowKey|nErr)|ocalTalk)|M(?:ac(?:IP|Video)|icrophone|o(?:d(?:em(?:P(?:ort|rinterPort))?|ifiers)|nitorOut|use)|ultiErr)|NuBus(?:Card)?|OptionDown|P(?:C(?:I(?:bus|card)|card)|DS(?:card|slot)|PP|age(?:DownKey|UpKey)|o(?:intingDevice|stScript)|r(?:inter(?:Port)?|otocol))|R(?:eturnKey|ightArrowKey)|S(?:CSI|VGA|cheme|erial|hiftDown|peakers|torageDevice|video)|T(?:abKey|okenRing|rack(?:ball|pad))|U(?:SB|pArrowKey)|Video(?:In|Monitor|Out)|WS(?:ArrayType|BooleanType|D(?:at(?:aType|eType)|ictionaryType|oubleType)|IntegerType|NullType|StringType|UnknownType)|dit(?:Text|i(?:ngNotAllowed|onMgrInitErr))|mptyPathErr|n(?:dOfDataReached|um(?:A(?:fterDate|l(?:iases|l(?:D(?:isks|ocuments)|LocalDisks|OpenFolders|RemoteDisks))|nyDate|rr(?:angement|ows))|B(?:e(?:foreDate|tweenDate)|ooleanValues)|Con(?:flicts|sid(?:erations|sAndIgnores))|Date|ExistingItems|Fo(?:lders|ntsPanel)|Ge(?:neralPanel|stalt)|I(?:conSize|nfoWindowPanel)|Justification|KeyForm|La(?:rgeIconSize|st(?:Month|Week|Year))|M(?:emoryPanel|i(?:niIconSize|scValues))|O(?:lderItems|nDate)|P(?:osition|r(?:efs(?:ButtonViewPanel|GeneralPanel|IconViewPanel|L(?:abelPanel|istViewPanel)|WindowPanel)|otection))|Quality|S(?:aveOptions|haringPanel|mallIconSize|ortDirection(?:Normal|Reverse)?|t(?:at(?:ionery|usNConfigPanel)|yle))|T(?:his(?:Month|Week|Year)|oday|ransferMode)|ViewBy|Where|Yesterday)|v(?:BadVers|NotPresent|VersTooBig))|ofErr|r(?:a(?:Field|Mask)|r(?:A(?:E(?:AccessorNotFound|B(?:ad(?:KeyForm|ListItem|TestKey)|u(?:fferTooSmall|ildSyntaxError))|C(?:ant(?:HandleClass|PutThatThere|SupplyType|Undo)|o(?:ercionFail|rruptData))|D(?:esc(?:IsNull|NotFound)|uplicateHandler)|E(?:mptyListContainer|vent(?:F(?:ailed|iltered)|Not(?:Handled|Permitted)|WouldRequireUserConsent))|HandlerNotFound|I(?:llegalIndex|mpossibleRange|n(?:Transaction|dexTooLarge))|LocalOnly|N(?:e(?:gativeCount|werVersion)|o(?:Such(?:Logical|Object|Transaction)|User(?:Interaction|Selection)|t(?:A(?:EDesc|S(?:ingleObject|pecialFunction)|n(?:E(?:lement|numMember)|ObjSpec)|ppleEvent)|Modifiable)))|P(?:aramMissed|r(?:ivilegeError|opertiesClash))|Re(?:adDenied|c(?:eive(?:EscapeCurrent|Terminate)|ordingIsAlreadyOn)|plyNot(?:Arrived|Valid))|Stream(?:AlreadyConverted|BadNesting)|T(?:argetAddressNotPermitted|imeout|ypeError)|Unknown(?:AddressType|ObjectType|SendMode)|ValueOutOfRange|W(?:aitCanceled|r(?:iteDenied|ong(?:DataType|NumberArgs))))|S(?:CantCo(?:mpareMoreThan32k|nsiderAndIgnore)|I(?:llegalFormalParameter|nconsistentNames)|NoResultReturned|ParameterNotForEvent|TerminologyNestingTooDeep)|borted|lreadyInImagingMode|ttention|uthorization(?:BadAddress|Canceled|Denied|ExternalizeNotAllowed|In(?:ter(?:actionNotAllowed|nal(?:izeNotAllowed)?)|valid(?:Flags|Pointer|Ref|Set|Tag))|Success|ToolE(?:nvironmentError|xecuteFailure)))|C(?:an(?:NotInsertWhileWalkProcInProgress|notUndo|tEmbed(?:IntoSelf|Root))|o(?:ntrol(?:DoesntSupportFocus|HiddenOrDisabled|IsNotEmbedder|sAlreadyExist)|r(?:eEndianData(?:DoesNotMatchFormat|Too(?:LongForFormat|ShortForFormat))|ruptWindowDescription)|uldntSetFocus)|pp(?:General|Last(?:SystemDefinedError|UserDefinedError)|bad_(?:alloc|cast|exception|typeid)|domain_error|i(?:nvalid_argument|os_base_failure)|l(?:ength_error|ogic_error)|o(?:ut_of_range|verflow_error)|r(?:ange_error|untime_error)|underflow_error))|D(?:SPQueueSize|ata(?:Browser(?:I(?:nvalidProperty(?:Data|Part)|temNot(?:Added|Found))|NotConfigured|PropertyNot(?:Found|Supported))|NotSupported|SizeMismatch))|E(?:mptyScrap|n(?:dOf(?:Body|Document)|gineNotFound))|F(?:S(?:AttributeNotFound|Bad(?:AllocFlags|Buffer|F(?:SRef|ork(?:Name|Ref))|I(?:nfoBitmap|te(?:mCount|ratorFlags))|PosMode|SearchParams)|Fork(?:Exists|NotFound)|IteratorNot(?:Found|Supported)|Missing(?:CatInfo|Name)|N(?:ameTooLong|o(?:MoreItems|t(?:AFolder|EnoughSpaceForOperation)))|OperationNotSupported|PropertyNotValid|QuotaExceeded|RefsDifferent|UnknownCall)|inder(?:AppFolderProtected|B(?:adPackageContents|oundsWrong)|C(?:an(?:notPutAway|t(?:DeleteImmediately|Move(?:Source|To(?:Ancestor|Destination))|Overwrite|UseTrashedItems))|orruptOpenFolderList)|FileSharingMustBeOn|I(?:ncestuousMove|sBusy|temAlreadyInDest)|L(?:astReserved|ockedItemsInTrash)|MustBeActive|NoInvisibleFiles|OnlyLockedItemsInTrash|Pro(?:gramLinkingMustBeOn|perty(?:DoesNotApply|NowWindowBased))|S(?:harePointsCantInherit|ysFolderProtected)|Un(?:knownUser|supportedInsidePackages)|VolumeNotFound|Window(?:MustBe(?:ButtonView|IconView|ListView)|NotOpen|WrongType))|loatingWindowsNotInitialized|wdReset)|HMIllegalContentForM(?:aximumState|inimumState)|I(?:A(?:AllocationErr|BufferTooSmall|Canceled|EndOfTextRun|InvalidDocument|No(?:Err|MoreItems)|ParamErr|TextExtractionErr|UnknownErr)|nvalid(?:PartCode|Range|Window(?:P(?:roperty|tr)|Ref))|te(?:m(?:AlreadyInTree|Not(?:Control|FoundInTree))|ratorReachedEnd))|K(?:B(?:Fail(?:Setting(?:ID|TranslationTable)|WritePreference)|IlligalParameters|PS2KeyboardNotAvailable)|C(?:AuthFailed|BufferTooSmall|CreateChainFailed|D(?:ata(?:Not(?:Available|Modifiable)|TooLarge)|uplicate(?:Callback|Item|Keychain))|I(?:n(?:teraction(?:NotAllowed|Required)|valid(?:Callback|ItemRef|Keychain|SearchRef))|temNotFound)|KeySizeNotAllowed|No(?:CertificateModule|DefaultKeychain|PolicyModule|S(?:torageModule|uch(?:Attr|Class|Keychain))|tAvailable)|ReadOnly(?:Attr)?|WrongKCVersion))|M(?:arginWilllNotFit|essageNotSupported)|N(?:eedsCompositedWindow|o(?:HiliteText|RootControl|nContiuousAttribute|t(?:InImagingMode|ValidTree)))|O(?:SA(?:AppNotHighLevelEventAware|BadS(?:elector|torageType)|C(?:ant(?:A(?:ccess|ssign)|C(?:oerce|reate)|GetTerminology|Launch|OpenComponent|StorePointers)|o(?:mponentMismatch|rrupt(?:Data|Terminology)))|D(?:ata(?:BlockTooLarge|Format(?:Obsolete|TooNew))|ivideByZero)|GeneralError|In(?:ternalTableOverflow|validID)|N(?:oSuchDialect|umericOverflow)|RecordingIsAlreadyOn|S(?:criptError|ourceNotAvailable|tackOverflow|ystemError)|TypeError)|ffset(?:I(?:nvalid|sOutsideOfView)|NotOnElementBounday)|pen(?:Denied|ing))|R(?:e(?:adOnlyText|fNum)|ootAlreadyExists)|S(?:SL(?:ATS(?:C(?:ertificate(?:HashAlgorithmViolation|TrustViolation)|iphersuiteViolation)|LeafCertificateHashAlgorithmViolation|Minimum(?:KeySizeViolation|VersionViolation)|Violation)|B(?:ad(?:C(?:ert(?:ificateStatusResponse)?|ipherSuite|onfiguration)|RecordMac)|ufferOverflow)|C(?:ert(?:Expired|NotYetValid|ificateRequired)|l(?:ient(?:CertRequested|HelloReceived)|osed(?:Abort|Graceful|NoNotify))|on(?:figurationFailed|nectionRefused)|rypto)|Dec(?:o(?:deError|mpressFail)|ryptionFail)|FatalAlert|H(?:andshakeFail|ostNameMismatch)|I(?:llegalParam|n(?:appropriateFallback|ternal))|M(?:issingExtension|oduleAttach)|N(?:e(?:gotiation|tworkTimeout)|oRootCert)|P(?:eer(?:A(?:ccessDenied|uthCompleted)|Bad(?:Cert|RecordMac)|Cert(?:Expired|Revoked|Unknown)|Dec(?:o(?:deError|mpressFail)|rypt(?:Error|ionFail))|ExportRestriction|HandshakeFail|In(?:sufficientSecurity|ternalError)|NoRenegotiation|ProtocolVersion|RecordOverflow|U(?:n(?:expectedMsg|knownCA|supportedCert)|serCancelled))|rotocol)|RecordOverflow|SessionNotFound|TransportReset|Un(?:expected(?:Message|Record)|known(?:PSKIdentity|RootCert)|recognizedName|supportedExtension)|W(?:eakPeerEphemeralDHKey|ouldBlock)|XCertChainInvalid)|e(?:c(?:A(?:CL(?:AddFailed|ChangeFailed|DeleteFailed|NotSimple|ReplaceFailed)|ddin(?:LoadFailed|UnloadFailed)|l(?:gorithmMismatch|locate|readyLoggedIn)|pple(?:AddAppACLSubject|InvalidKey(?:EndDate|StartDate)|PublicKeyIncomplete|S(?:SLv2Rollback|ignatureMismatch))|tt(?:achHandleBusy|ributeNotInContext)|uthFailed)|B(?:adReq|lockSizeMismatch|ufferTooSmall)|C(?:RL(?:AlreadySigned|BadURI|Expired|Not(?:Found|Trusted|ValidYet)|PolicyFailed|ServerDown)|S(?:AmbiguousBundleFormat|Bad(?:BundleFormat|CallbackValue|Di(?:ctionaryFormat|skImageFormat)|FrameworkVersion|LVArch|MainExecutable|NestedCode|ObjectFormat|Resource|TeamIdentifier)|C(?:MSTooLarge|ancelled)|D(?:B(?:Access|Denied)|SStoreSymlink|bCorrupt)|FileHardQuarantined|GuestInvalid|H(?:elperFailed|ost(?:Protocol(?:Contradiction|DedicationError|Invalid(?:Attribute|Hash)|NotProxy|RelativePath|StateError|Unrelated)|Reject))|In(?:foPlistFailed|ternalError|valid(?:A(?:ssociatedFileData|ttributeValues)|Entitlements|Flags|ObjectRef|Platform|RuntimeVersion|Symlink|TeamIdentifier))|MultipleGuests|No(?:Ma(?:inExecutable|tches)|SuchCode|t(?:A(?:Host|ppLike)|Supported))|O(?:bjectRequired|utdated)|Re(?:gularFile|q(?:Failed|Invalid|Unsupported)|source(?:DirectoryFailed|NotSupported|RulesInvalid|s(?:Invalid|Not(?:Found|Sealed)))|vokedNotarization)|S(?:ig(?:DB(?:Access|Denied)|nature(?:Failed|Invalid|NotVerifiable|Un(?:supported|trusted)))|taticCode(?:Changed|NotFound))|TooBig|Un(?:implemented|s(?:ealed(?:AppRoot|FrameworkRoot)|igned(?:NestedCode)?|upported(?:DigestAlgorithm|GuestAttributes)))|Vetoed|WeakResource(?:Envelope|Rules))|allbackFailed|ertificate(?:CannotOperate|Expired|N(?:ameNotAllowed|otValidYet)|PolicyNotAllowed|Revoked|Suspended|ValidityPeriodTooLong)|o(?:deSigning(?:Bad(?:CertChainLength|PathLengthConstraint)|Development|No(?:BasicConstraints|ExtendedKeyUsage))|nversionError|reFoundationUnknown)|reateChainFailed)|D(?:ata(?:Not(?:Available|Modifiable)|TooLarge|baseLocked|storeIsOpen)|e(?:code|vice(?:Error|Failed|Reset|VerifyFailed))|iskFull|skFull|uplicate(?:Callback|Item|Keychain))|E(?:MM(?:LoadFailed|UnloadFailed)|ndOfData|ventNotificationCallbackNotFound|xtendedKeyUsageNotCritical)|F(?:i(?:eldSpecifiedMultiple|leTooBig)|unction(?:Failed|IntegrityFail))|HostNameMismatch|I(?:DPFailure|O|n(?:DarkWake|comp(?:atible(?:DatabaseBlob|FieldFormat|KeyBlob|Version)|leteCertRevocationCheck)|putLengthError|sufficientC(?:lientID|redentials)|ter(?:action(?:NotAllowed|Required)|nal(?:Component|Error))|val(?:dCRLAuthority|id(?:A(?:CL|c(?:cess(?:Credentials|Request)|tion)|ddinFunctionTable|lgorithm(?:Parms)?|ttribute(?:AccessCredentials|B(?:ase|lockSize)|DLDBHandle|E(?:ffectiveBits|ndDate)|I(?:nitVector|terationCount)|Key(?:Length|Type)?|Label|Mode|OutputSize|P(?:a(?:dding|ssphrase)|ri(?:me|vateKeyFormat)|ublicKeyFormat)|R(?:andom|ounds)|S(?:alt|eed|tartDate|ubprime|ymmetricKeyFormat)|Version|WrappedKeyFormat)|uthority(?:KeyID)?)|B(?:aseACLs|undleInfo)|C(?:RL(?:Encoding|Group|Index|Type)?|allback|ert(?:Authority|ificate(?:Group|Ref))|ontext)|D(?:BL(?:ist|ocation)|ata(?:baseBlob)?|igestAlgorithm)|E(?:ncoding|xtendedKeyUsage)|FormType|GUID|Handle(?:Usage)?|I(?:D(?:Linkage)?|dentifier|n(?:dex(?:Info)?|putVector)|temRef)|Key(?:AttributeMask|Blob|Format|Hierarchy|Label|Ref|Usage(?:ForPolicy|Mask)|chain)|LoginName|ModifyMode|N(?:ame|e(?:tworkAddress|wOwner)|umberOfFields)|O(?:utputVector|wnerEdit)|P(?:VC|a(?:rsingModule|ss(?:throughID|wordRef))|o(?:inter|licyIdentifiers)|refsDomain)|Query|R(?:e(?:ason|cord|quest(?:Inputs|or)|sponseVector)|oot)|S(?:ampleValue|cope|e(?:archRef|rviceMask)|ignature|topOnPolicy|ub(?:ServiceID|ject(?:KeyID|Name)))|T(?:imeString|rustSetting(?:s)?|uple(?:Credendtials|Group)?)|Val(?:idityPeriod|ue))))|temNotFound)|Key(?:BlobTypeIncorrect|HeaderInconsistent|IsSensitive|SizeNotAllowed|UsageIncorrect)|LibraryReferenceNotFound|M(?:DSError|emoryError|issing(?:A(?:lgorithmParms|ttribute(?:AccessCredentials|B(?:ase|lockSize)|DLDBHandle|E(?:ffectiveBits|ndDate)|I(?:nitVector|terationCount)|Key(?:Length|Type)?|Label|Mode|OutputSize|P(?:a(?:dding|ssphrase)|ri(?:me|vateKeyFormat)|ublicKeyFormat)|R(?:andom|ounds)|S(?:alt|eed|tartDate|ubprime|ymmetricKeyFormat)|Version|WrappedKeyFormat))|Entitlement|RequiredExtension|Value)|o(?:bileMe(?:CSRVerifyFailure|FailedConsistencyCheck|NoRequestPending|Request(?:AlreadyPending|Queued|Redirected)|Server(?:AlreadyExists|Error|NotAvailable|ServiceErr))|dule(?:Man(?:ager(?:InitializeFailed|NotFound)|ifestVerifyFailed)|NotLoaded))|ultiple(?:ExecSegments|PrivKeys|ValuesUnsupported))|N(?:etworkFailure|o(?:AccessForItem|BasicConstraints(?:CA)?|CertificateModule|Default(?:Authority|Keychain)|FieldValues|PolicyModule|S(?:torageModule|uch(?:Attr|Class|Keychain))|TrustSettings|t(?:Available|Initialized|LoggedIn|Signer|Trusted)))|O(?:CSP(?:BadRe(?:quest|sponse)|No(?:Signer|tTrustedToAnchor)|Respon(?:der(?:InternalError|MalformedReq|SignatureRequired|TryLater|Unauthorized)|seNonceMismatch)|S(?:ignatureError|tatusUnrecognized)|Unavailable)|pWr|utputLengthError)|P(?:VC(?:AlreadyConfigured|ReferentNotFound)|a(?:ram|ssphraseRequired|thLengthConstraintExceeded)|kcs12VerifyFailure|olicyNotFound|rivilegeNot(?:Granted|Supported)|ublicKeyInconsistent)|Qu(?:erySizeUnknown|otaExceeded)|Re(?:adOnly(?:Attr)?|cordModified|jectedForm|quest(?:Descriptor|Lost|Rejected)|sourceSignBad(?:CertChainLength|ExtKeyUsage))|S(?:MIME(?:Bad(?:ExtendedKeyUsage|KeyUsage)|EmailAddressesNotFound|KeyUsageNotCritical|NoEmailAddress|SubjAltNameNotCritical)|SLBadExtendedKeyUsage|e(?:lfCheckFailed|rviceNotAvailable)|igningTimeMissing|tagedOperation(?:InProgress|NotStarted)|uccess)|T(?:agNotFound|imestamp(?:AddInfoNotAvailable|Bad(?:Alg|DataFormat|Request)|Invalid|Missing|NotTrusted|Re(?:jection|vocation(?:Notification|Warning))|S(?:erviceNotAvailable|ystemFailure)|TimeNotAvailable|Unaccepted(?:Extension|Policy)|Waiting)|rust(?:NotAvailable|SettingDeny))|U(?:n(?:implemented|known(?:C(?:RLExtension|ertExtension|riticalExtensionFlag)|Format|QualifiedCertStatement|Tag)|supported(?:AddressType|F(?:ieldFormat|ormat)|IndexInfo|Key(?:AttributeMask|Format|Label|Size|UsageMask)|Locality|Num(?:Attributes|Indexes|RecordTypes|SelectionPreds)|Operator|QueryLimits|Service|VectorOfBuffers))|serCanceled)|Verif(?:icationFailure|y(?:ActionFailed|Failed))|Wr(?:Perm|ongSecVersion))|ssion(?:AuthorizationDenied|In(?:ternal|valid(?:Attributes|Flags|Id))|Success|ValueNotSet))|tate)|T(?:askNotFound|opOf(?:Body|Document)|reeIsLocked)|U(?:n(?:known(?:AttributeTag|Control|Element)|recognizedWindowClass|supportedWindowAttributesForClass)|serWantsToDragWindow)|W(?:S(?:InternalError|ParseError|T(?:imeoutError|ransportError))|indow(?:Does(?:Not(?:FitOnscreen|HaveProxy)|ntSupportFocus)|NotFound|PropertyNotFound|RegionCodeInvalid|sAlreadyInitialized))))|url(?:A(?:FP|T)|EPPC|F(?:TP|ile)|Gopher|HTTP(?:S)?|IMAP|L(?:DAP|aunch)|M(?:ail(?:box)?|essage|ulti)|N(?:FS|NTP|ews)|POP|RTSP|SNews|Telnet|Unknown)|v(?:Type|e(?:nt(?:AlreadyPostedErr|ClassIn(?:correctErr|validErr)|DeferAccessibilityEventErr|H(?:andlerAlreadyInstalledErr|otKey(?:ExistsErr|InvalidErr))|InternalErr|KindIncorrectErr|Loop(?:QuitErr|TimedOutErr)|Not(?:HandledErr|InQueueErr)|Pa(?:rameterNotFoundErr|ssToNextTargetErr)|TargetBusyErr)|ryEvent)|tNotEnb)|x(?:UserBreak|cessCollsns|t(?:FSErr|en(?:dedBlock(?:Len)?|sionsFolderIconResource)|ra(?:ctErr|neousStrings))))|f(?:B(?:adPartsTable|estGuess|syErr)|D(?:esktop|isk)|E(?:mptyFormatString|xtra(?:Decimal|Exp|Percent|Separator))|Form(?:StrIsNAN|atO(?:K|verflow))|HasBundle|Invisible|LckdErr|Missing(?:Delimiter|Literal)|Negative|O(?:nDesk|utOfSynch)|Positive|SpuriousChars|Trash|VNumber|Zero|a(?:ceBit|talDateTime)|e(?:ature(?:FontTableTag|Unsupported)|tchReference)|i(?:Ligature|d(?:Exists|NotFound)|eldOrderNotIntl|le(?:BoundsErr|OffsetTooBigErr)|rst(?:DskErr|PickerError))|l(?:Ligature|avor(?:DataPromised|NotSaved|S(?:ender(?:Only|Translated)|ystemTranslated)|Type(?:HFS|PromiseHFS))|o(?:at(?:GrowProc|Proc|Side(?:GrowProc|Proc|Zoom(?:GrowProc|Proc))|Zoom(?:GrowProc|Proc))|ppyIconResource))|mt(?:1Err|2Err)|n(?:OpnErr|fErr)|o(?:nt(?:Bit|DecError|Not(?:Declared|OutlineErr)|Panel(?:FontSelectionQDStyleVersionErr|S(?:electionStyleErr|howErr))|SubErr|sFolderIconResource)|r(?:ceRead(?:Bit|Mask)|m(?:A(?:bsolutePosition|lias)|Creator|Name|PropertyID|R(?:ange|elativePosition)|Test|U(?:niqueID|serPropertyID)|Whose)))|raction|s(?:AtMark|CurPerm|D(?:SIntErr|ataTooBigErr)|From(?:LEOF|Mark|Start)|QType|R(?:d(?:AccessPerm|DenyPerm|Perm|Wr(?:Perm|ShPerm))|nErr|t(?:DirID|ParID))|SB(?:A(?:ccessDate(?:Bit)?|ttributeModDate(?:Bit)?)|Dr(?:BkDat(?:Bit)?|CrDat(?:Bit)?|FndrInfo(?:Bit)?|MdDat(?:Bit)?|NmFls(?:Bit)?|ParID(?:Bit)?|UsrWds(?:Bit)?)|F(?:l(?:Attrib(?:Bit)?|BkDat(?:Bit)?|CrDat(?:Bit)?|FndrInfo(?:Bit)?|LgLen(?:Bit)?|MdDat(?:Bit)?|P(?:arID(?:Bit)?|yLen(?:Bit)?)|R(?:LgLen(?:Bit)?|PyLen(?:Bit)?)|XFndrInfo(?:Bit)?)|ullName(?:Bit)?)|GroupID(?:Bit)?|N(?:egate(?:Bit)?|odeID(?:Bit)?)|P(?:artialName(?:Bit)?|ermissions(?:Bit)?)|Skip(?:HiddenItems(?:Bit)?|PackageContents(?:Bit)?)|UserID(?:Bit)?)|UnixPriv|Wr(?:AccessPerm|DenyPerm|Perm)|m(?:B(?:adF(?:FSNameErr|SD(?:LenErr|VersionErr))|usyFFSErr)|DuplicateFSIDErr|FFSNotFoundErr|NoAlternateStackErr|UnknownFSMMessageErr))|ullTrashIconResource)|g(?:WorldsNotSameDepthAndSizeErr|crOnMFMErr|e(?:n(?:CdevRangeBit|eric(?:ApplicationIconResource|CDROMIconResource|D(?:eskAccessoryIconResource|ocumentIconResource)|E(?:ditionFileIconResource|xtensionIconResource)|F(?:ileServerIconResource|olderIconResource)|HardDiskIconResource|MoverObjectIconResource|PreferencesIconResource|QueryDocumentIconResource|RAMDiskIconResource|S(?:tationeryIconResource|uitcaseIconResource)))|stalt(?:16Bit(?:AudioSupport|SoundIO)|20thAnniversary|32Bit(?:Addressing|Capable|QD(?:1(?:1|2|3))?|SysZone)|68(?:0(?:00|10|20|30(?:MMU)?|40(?:FPU|MMU)?)|8(?:51|8(?:1|2))|k)|8BitQD|A(?:DB(?:ISOKbdII|KbdII)|FPClient(?:3_(?:5|6(?:_(?:1|2|3))?|7(?:_2)?|8(?:_(?:1|3|4))?)|AttributeMask|CfgRsrc|MultiReq|SupportsIP|V(?:MUI|ersionMask))?|LM(?:Attr|Has(?:CFMSupport|RescanNotifiers|SF(?:Group|Location))|Present|Vers)|MU|T(?:A(?:Attr|Present)|SU(?:AscentDescentControlsFeature|B(?:atchBreakLinesFeature|iDiCursorPositionFeature|yCharacterClusterFeature)|D(?:ecimalTabFeature|irectAccess|ropShadowStyleFeature)|F(?:allbacks(?:Feature|ObjFeatures)|eatures)|GlyphBoundsFeature|Highlight(?:ColorControlFeature|InactiveTextFeature)|IgnoreLeadingFeature|L(?:ayoutC(?:acheClearFeature|reateAndCopyFeature)|ineControlFeature|owLevelOrigFeatures)|MemoryFeature|NearestCharLineBreakFeature|PositionToCursorFeature|StrikeThroughStyleFeature|T(?:abSupportFeature|extLocatorUsageFeature|rackingFeature)|U(?:nderlineOptionsStyleFeature|pdate(?:1|2|3|4|5|6|7))|Version)|alkVersion)|UXVersion|VLTree(?:Attr|PresentBit|Supports(?:HandleBasedTreeBit|TreeLockingBit))|WS(?:6150_6(?:0|6)|8(?:150_(?:110|80)|550)|9150_(?:120|80))|d(?:dressingModeAttr|minFeaturesFlagsAttr)|l(?:iasMgr(?:Attr|FollowsAliasesWhenResolving|Pre(?:fersPath|sent)|Re(?:quiresAccessors|solveAliasFileWithMountOptions)|Supports(?:AOCEKeychain|ExtendedCalls|FSCalls|RemoteAppletalk))|legroQD(?:Text)?|tivecRegistersSwappedCorrectlyBit)|ntiAliasedTextAvailable|pp(?:earance(?:Attr|CompatMode|Exists|Version)|le(?:Adjust(?:ADBKbd|ISOKbd|Keypad)|Events(?:Attr|Present)|Guide(?:IsDebug|Present)|Script(?:Attr|P(?:owerPCSupport|resent)|Version)|TalkVersion))|rbitorAttr|syncSCSI(?:INROM)?)|Bu(?:iltInSoundInput|sClkSpeed(?:MHz)?)|C(?:FM(?:99Present(?:Mask)?|Attr|Present(?:Mask)?)|PU(?:486|6(?:0(?:1|3(?:e(?:v)?)?|4(?:e(?:v)?)?)|80(?:00|10|20|30|40))|750(?:FX)?|970(?:FX|MP)?|Apollo|G4(?:74(?:47|50))?|Pentium(?:4|II|Pro)?|X86)|RM(?:Attr|P(?:ersistentFix|resent)|ToolRsrcCalls)|TBVersion|a(?:n(?:StartDragInFloatWindow|UseCGTextRendering)|r(?:bonVersion|dServicesPresent))|l(?:assic(?:II)?|oseView(?:Attr|DisplayMgrFriendly|Enabled))|o(?:l(?:lectionMgrVersion|or(?:Matching(?:Attr|LibLoaded|Version)|Picker(?:Version)?|Sync(?:1(?:0(?:4|5)?|1)|2(?:0|1(?:1|2|3)?|5|6(?:1)?)|30)))|mp(?:onent(?:Mgr|Platform)|ressionMgr)|n(?:nMgr(?:Attr|CMSearchFix|ErrorString|MultiAsyncIO|Present)|t(?:extualMenu(?:Attr|Has(?:AttributeAndModifierKeys|UnicodeSupport)|TrapAvailable|UnusedBit)|rol(?:M(?:gr(?:Attr|Present(?:Bit)?|Version)|sgPresentMask)|Strip(?:Attr|Exists|User(?:Font|HotKey)|Version(?:Fixed)?))))|untOfCPUs)|reatesAliasFontRsrc|urrentGraphicsVersion)|D(?:BAccessMgr(?:Attr|Present)|ITLExt(?:Attr|Present|SupportsIctb)|T(?:MgrSupportsFSM|P(?:Features|Info))|esktop(?:Pictures(?:Attr|Displayed|Installed)|SpeechRecognition)|i(?:alogM(?:gr(?:Attr|HasAquaAlert(?:Bit|Mask)|Present(?:Bit|Mask)?)|sgPresentMask)|ctionaryMgr(?:Attr|Present)|gitalSignatureVersion|s(?:kCacheSize|playMgr(?:Attr|C(?:an(?:Confirm|SwitchMirrored)|olorSyncAware)|GeneratesProfiles|Present|S(?:etDepthNotifies|leepNotifies)|Vers)))|ra(?:gMgr(?:Attr|FloatingWind|HasImageSupport|Present)|wSprocketVersion)|upSelectorErr)|E(?:MMU1|asyAccess(?:Attr|Locked|O(?:ff|n)|Sticky)|ditionMgr(?:Attr|Present|TranslationAware)|xt(?:ADBKbd|ISOADBKbd|ToolboxTable|en(?:ded(?:TimeMgr|WindowAttributes(?:Bit|Mask)?)|sionTableVersion)))|F(?:BC(?:CurrentVersion|IndexingState|Version|indexing(?:Critical|Safe))|PUType|S(?:A(?:llowsConcurrentAsyncIO|ttr)|IncompatibleDFA82|M(?:DoesDynamicLoad|Version)|NoMFSVols|Supports(?:2TBVols|4GBVols|DirectIO|ExclusiveLocks|H(?:FSPlusVols|ardLinkDetection))|UsesPOSIXPathsForConversion)|XfrMgr(?:A(?:sync|ttr)|ErrorString|MultiFile|Present)|i(?:le(?:AllocationZeroedBlocksBit|Mapping(?:Attr|MultipleFilesFix|Present))|nd(?:Folder(?:Attr|Present|RedirectionAttr)|er(?:Attr|CallsAEProcess|DropEvent|F(?:loppyRootComments|ullDragManagerSupport)|HasClippings|LargeAndNotSavedFlavorsOK|MagicPlacement|Supports4GBVolumes|U(?:nderstandsRedirectedDesktopFolder|ses(?:ExtensibleFolderManager|SpecialOpenFoldersFile))))|rstSlotNumber)|loppy(?:Attr|IsM(?:FMOnly|anualEject)|UsesDiskInPlace)|o(?:lder(?:DescSupport|Mgr(?:FollowsAliasesWhenResolving|Supports(?:Domains|ExtendedCalls|FSCalls)))|ntMgrAttr)|rontWindowMayBeHidden(?:Bit|Mask)|ullExtFSDispatching)|G(?:X(?:PrintingMgrVersion|Version)|raphics(?:Attr|Is(?:Debugging|Loaded|PowerPC)|Version))|H(?:a(?:rdware(?:Attr|Vendor(?:Apple|Code))|s(?:ASC|Color|D(?:eepGWorlds|irectPixMaps)|E(?:nhancedLtalk|xtendedDiskInit)|F(?:MTuner|SSpecCalls|ileSystemManager|loatingWindows(?:Bit|Mask)?)|G(?:PI(?:aTo(?:DCDa|RTxCa)|bToDCDb)|rayishTextOr)|H(?:FSPlusAPIs|WClosedCaptioning)|IRRemote|ParityCapability|ResourceOverrides|S(?:C(?:C|SI(?:96(?:1|2))?)|erialFader|ingleWindowMode(?:Bit|Mask)|o(?:ftPowerOff|und(?:Fader|InputDevice))|tereoDecoder|ystemIRFunction)|TVTuner|UniversalROM|V(?:IA(?:1|2)|idDecoderScaler)|Window(?:Buffering(?:Bit|Mask)?|Shadows(?:Bit|Mask))|ZoomedVideo))|elpMgr(?:Attr|Extensions|Present)|i(?:dePort(?:A|B)|ghLevelMatching))|I(?:NeedIRPowerOffConfirm|PCSupport|RDisabled|conUtilities(?:Attr|Has(?:32BitIcons|48PixelIcons|8BitDeepMasks|IconServices)|Present)|n(?:itHeapZerosOutHeapsBit|te(?:l|rnalDisplay)))|JapanAdjustADBKbd|K(?:BPS2(?:Keyboards|Set(?:IDToAny|TranslationTable))|eyboard(?:Type|sAttr))|L(?:aunch(?:C(?:anReturn|ontrol)|FullFileSpec)|ineLevelInput|o(?:cationErr|gical(?:PageSize|RAMSize)|wMemorySize))|M(?:B(?:Legacy|MultipleBays|SingleBay)|MUType|P(?:CallableAPIsAttr|DeviceManager|FileManager|TrapCalls)|ac(?:512KE|AndPad|C(?:entris6(?:10|50|60AV)|lassic|olorClassic)|II(?:c(?:i|x)|fx|si|v(?:i|m|x)|x)?|Kbd|LC(?:475|5(?:20|75|80)|II(?:I)?)?|OS(?:Compatibility(?:Box(?:Attr|HasSerial|Present|less))?|XQD(?:Text)?)|Plus(?:Kbd)?|Quadra(?:6(?:05|10|30|50|60AV)|700|8(?:00|40AV)|9(?:00|50))|SE(?:030)?|TV|XL|hine(?:Icon|Type))|e(?:diaBay|moryMap(?:Attr|Sparse)|nuMgr(?:A(?:quaLayout(?:Bit|Mask)|ttr)|CGImageMenuTitle(?:Bit|Mask)|M(?:oreThanFiveMenusDeep(?:Bit|Mask)|ultipleItemsWithCommandID(?:Bit|Mask))|Present(?:Bit|Mask)?|RetainsIconRef(?:Bit|Mask)|SendsMenuBoundsToDefProc(?:Bit|Mask))|ssageMgrVersion)|i(?:scAttr|xedMode(?:Attr|CFM68K(?:Has(?:State|Trap))?|PowerPC|Version))|u(?:lti(?:Channels|pleUsersState)|stUseFCBAccessors))|N(?:a(?:meRegistryVersion|tive(?:CPU(?:family|type)|ProcessMgrBit|T(?:imeMgr|ype1FontSupport)))|ew(?:HandleReturnsZeroedMemoryBit|PtrReturnsZeroedMemoryBit)|o(?:FPU|MMU|tification(?:MgrAttr|Present))|uBus(?:Connectors|Present|SlotCount))|O(?:CE(?:SFServerAvailable|T(?:B(?:Available|NativeGlueAvailable|Present)?|oolbox(?:Attr|Version)))|FA2available|S(?:Attr|L(?:CompliantFinder|InSystem)|Table|XFBCCurrentVersion)|pen(?:FirmwareInfo|Tpt(?:A(?:RAPPresent|ppleTalk(?:Loaded(?:Bit|Mask)|Present(?:Bit|Mask)))|IPXSPX(?:Loaded(?:Bit|Mask)|Present(?:Bit|Mask))|Loaded(?:Bit|Mask)|NetworkSetup(?:Legacy(?:Export|Import)|SupportsMultihoming|Version)?|P(?:PPPresent|resent(?:Bit|Mask))|RemoteAccess(?:ClientOnly|Loaded|MPServer|P(?:Server|resent)|Version)?|TCP(?:Loaded(?:Bit|Mask)|Present(?:Bit|Mask))|Versions)?)|riginal(?:ATSUVersion|QD(?:Text)?)|utlineFonts)|P(?:C(?:Card(?:FamilyPresent|HasPowerControl|SupportsCardBus)?|X(?:Attr|Has(?:8and16BitFAT|ProDOS)|NewUI|UseICMapping))|Mgr(?:CPUIdle|DispatchExists|Exists|S(?:CC|ound|upportsAVPowerStateAtSleepWake))|PC(?:DragLibPresent|QuickTimeLibPresent|Supports(?:Incoming(?:AppleTalk|TCP_IP)?|Out(?:Going|going(?:AppleTalk|TCP_IP))|RealTime|TCP_IP)|Toolbox(?:Attr|Present))|S2Keyboard|ar(?:ity(?:Attr|Enabled)|tialRsrcs)|erforma(?:250|4(?:50|6x|7x)|5(?:300|50|80)|6(?:00|3(?:00|60)|400))|hysicalRAMSize(?:InMegabytes)?|layAndRecord|o(?:pup(?:Attr|Present)|rt(?:ADisabled|BDisabled|able(?:2001(?:ANSIKbd|ISOKbd|JISKbd)|SlotPresent|USB(?:ANSIKbd|ISOKbd|JISKbd))?)|wer(?:Book(?:1(?:00|4(?:0(?:0)?|5)|50|6(?:0|5(?:c)?)|70|80(?:c)?|90)|2400|3400|5(?:00PPCUpgrade|20(?:c)?|300|40(?:c)?)|Duo2(?:10|30(?:0)?|50|70c|80(?:c)?)|G3(?:Series(?:2)?)?)|M(?:ac(?:4400(?:_160)?|5(?:2(?:00|60)|400|500)|6(?:100_6(?:0|6)|200|400|500)|7(?:100_(?:66|80)|200|300|500|600)|8(?:100_(?:1(?:00|10|20)|80)|500|600)|9(?:500|600)|Centris6(?:10|50)|G3|LC(?:475|575|630)|NewWorld|Performa(?:47x|57x|63x)|Quadra(?:6(?:10|30|50)|700|800|9(?:00|50)))|gr(?:Attr|Vers))|PC(?:A(?:SArchitecture|ware)|Has(?:64BitSupport|D(?:CB(?:AInstruction|TStreams)|ataStreams)|GraphicsInstructions|S(?:TFIWXInstruction|quareRootInstructions)|VectorInstructions)|IgnoresDCBST|ProcessorFeatures)?))|r(?:o(?:F16(?:ANSIKbd|ISOKbd|JISKbd)|c(?:ClkSpeed(?:MHz)?|essor(?:CacheLineSize|Type)))|tbl(?:ADBKbd|ISOKbd))|wrB(?:k(?:99JISKbd|E(?:K(?:DomKbd|ISOKbd|JISKbd)|xt(?:ADBKbd|ISOKbd|JISKbd))|Sub(?:DomKbd|ISOKbd|JISKbd))|ook(?:ADBKbd|ISOADBKbd)))|Q(?:D(?:3D(?:Present|V(?:ersion|iewer(?:Present)?))?|HasLongRowBytes|Text(?:Features|Version))|TVR(?:C(?:ubicPanosPresent|ylinderPanosPresent)|Mgr(?:Attr|Present|Vers)|ObjMoviesPresent)|u(?:adra(?:6(?:05|10|30|50|60AV)|700|8(?:00|40AV)|9(?:00|50))|ick(?:Time(?:Conferencing(?:Info)?|Features|Streaming(?:Features|Version)|ThreadSafe(?:FeaturesAttr|Graphics(?:Export|Import)|ICM|Movie(?:Export|Import|Playback|Toolbox))|Version)?|draw(?:Features|Version))))|R(?:BVAddr|M(?:F(?:akeAppleMenuItemsRolledIn|orceSysHeapRolledIn)|SupportsFSCalls|TypeIndexOrderingReverse)|OM(?:Size|Version)|e(?:al(?:TempMemory|timeMgr(?:Attr|Present))|sourceMgr(?:Attr|BugFixesAttrs)|visedTimeMgr))|S(?:C(?:C(?:ReadAddr|WriteAddr)|SI(?:PollSIH|SlotBoot)?)|DP(?:FindVersion|PromptVersion|StandardDirectoryVersion)|E(?:30SlotPresent|SlotPresent)|FServer|MP(?:MailerVersion|SPSendLetterVersion)|a(?:feOFAttr|nityCheckResourceFiles)|bitFontSupport|cr(?:apMgr(?:Attr|TranslationAware)|eenCapture(?:Dir|Main)|ipt(?:Count|MgrVersion|ingSupport)|ollingThrottle)|e(?:rialA(?:rbitrationExists|ttr)|tDragImageUpdates)|h(?:eetsAreWindowModal(?:Bit|Mask)|utdown(?:Attributes|HassdOnBootVolUnmount))|lot(?:Attr|MgrExists)|ndPlayDoubleBuffer|o(?:ftwareVendor(?:Apple|Code|Licensee)|und(?:Attr|IOMgrPresent))|p(?:e(?:cificMatchSupport|ech(?:Attr|HasPPCGlue|MgrPresent|Recognition(?:Attr|Version)))|litOS(?:A(?:ttr|ware)|BootDriveIsNetworkVolume|EnablerVolumeIsDifferentFromBootVolume|MachineNameS(?:etToNetworkNameTemp|tartupDiskIsNonPersistent)))|quareMenuBar|t(?:andard(?:File(?:58|Attr|Has(?:ColorIcons|DynamicVolumeAllocation)|TranslationAware|UseGenericIcons)|TimeMgr)|d(?:ADBKbd|ISOADBKbd|NBP(?:Attr|Present|SupportsAutoPosition))|ereo(?:Capability|Input|Mixing))|upports(?:ApplicationURL|FSpResourceFileAlreadyOpenBit|Mirroring)|ys(?:Architecture|DebuggerSupport|ZoneGrowable|temUpdateVersion))|T(?:E(?:1|2|3|4|5|6|Attr|Has(?:GetHiliteRgn|WhiteBackground)|Supports(?:InlineInput|TextObjects))|SM(?:DisplayMgrAwareBit|TE(?:1(?:5(?:2)?)?|Attr|Present|Version)?|doesTSMTEBit|gr(?:15|2(?:0|2|3)|Attr|Version))|VAttr|e(?:le(?:Mgr(?:A(?:ttr|utoAnswer)|IndHandset|NewTELNewSupport|P(?:owerPCSupport|resent)|S(?:ilenceDetect|oundStreams))|phoneSpeechRecognition)|mpMem(?:Support|Tracked)|rmMgr(?:Attr|ErrorString|Present)|xtEditVersion)|h(?:irdParty(?:ANSIKbd|ISOKbd|JISKbd)|read(?:Mgr(?:Attr|Present)|sLibraryPresent))|imeMgrVersion|oolboxTable|ranslation(?:Attr|GetPathAPIAvail|Mgr(?:Exists|HintOrder)|PPCAvail))|U(?:DFSupport|SB(?:A(?:ndy(?:ANSIKbd|ISOKbd|JISKbd)|ttr)|Cosmo(?:ANSIKbd|ISOKbd|JISKbd)|HasIsoch|Pr(?:esent|interSharing(?:Attr(?:Booted|Mask|Running)?|Version(?:Mask)?)|oF16(?:ANSIKbd|ISOKbd|JISKbd))|Version)|n(?:defSelectorErr|known(?:Err|ThirdPartyKbd))|serVisibleMachineName)|V(?:IA(?:1Addr|2Addr)|M(?:Attr|BackingStoreFileRefNum|FilemappingOn|Has(?:LockMemoryForOutput|PagingControl)|Info(?:NoneType|Si(?:mpleType|ze(?:StorageType|Type))|Type)|Present|ZerosPagesBit)|alueImplementedVers|ersion)|W(?:SII(?:CanPrintWithoutPrGeneralBit|Support)|indow(?:LiveResize(?:Bit|Mask)|M(?:gr(?:Attr|Present(?:Bit|Mask)?)|inimizeToDock(?:Bit|Mask)))|orldScriptII(?:Attr|Version))|X86(?:AdditionalFeatures|Features|Has(?:APIC|C(?:ID|LFSH|MOV|X(?:16|8))|D(?:E|S(?:CPL)?)|EST|F(?:PU|XSR)|HTT|M(?:C(?:A|E)|MX|ONITOR|SR|TRR)|P(?:A(?:E|T)|GE|S(?:E(?:36)?|N))|S(?:EP|MX|S(?:E(?:2|3)?)?|upplementalSSE3)|T(?:M(?:2)?|SC)|VM(?:E|X)|xTPR)|ResACPI|Serviced20)))|fpErr|ra(?:bTimeComplete|veUpr(?:E|I|O|U))|uestNotAllowedErr)|h(?:AxisOnly|Menu(?:Cmd|FindErr)|a(?:chek|ndlerNotFoundErr|rdwareConfigErr)|i(?:Archive(?:EncodingCompleteErr|HIObjectIgnoresArchivingErr|KeyNotAvailableErr|TypeMismatchErr)|Object(?:C(?:annotSubclassSingletonErr|lass(?:ExistsErr|Has(?:InstancesErr|SubclassesErr)|IsAbstractErr))|Delegate(?:AlreadyExistsErr|NotFoundErr))|erMenu|ghLevelEventMask|tDev)|m(?:BalloonAborted|CloseViewActive|Help(?:Disabled|ManagerNotInited)|NoBalloonUp|OperationUnsupported|S(?:ameAsLastBalloon|kippedBalloon)|UnknownHelpType|WrongVersion)|our(?:Field|Mask)|r(?:HTMLRenderingLibNotInstalledErr|LeadingZ|MiscellaneousExceptionErr|U(?:RLNotHandledErr|nableToResizeHandleErr))|wParamErr)|i(?:IOAbort(?:Err)?|MemFullErr|c(?:Config(?:InappropriateErr|NotFoundErr)|InternalErr|No(?:MoreWritersErr|Perm|URLErr|thingToOverrideErr)|P(?:ermErr|r(?:ef(?:DataErr|NotFoundErr)|ofileNotFoundErr))|Read(?:OnlyPerm|WritePerm)|T(?:ooManyProfilesErr|runcatedErr)|onItem)|llegal(?:C(?:hannelOSErr|ontrollerOSErr)|InstrumentOSErr|Knob(?:OSErr|ValueOSErr)|NoteChannelOSErr|PartOSErr|ScrapFlavor(?:FlagsErr|SizeErr|TypeErr)|VoiceAllocationOSErr)|n(?:Co(?:llapseBox|ntent)|D(?:esk|rag)|G(?:oAway|row)|MenuBar|NoWindow|ProxyIcon|S(?:tructure|ysWindow)|ToolbarButton|Zoom(?:In|Out)|compatibleVoice|it(?:Dev|IWMErr)|putOutOfBounds|sufficientStackErr|t(?:Arabic|DrawHook|E(?:OLHook|uropean)|HitTestHook|InlineInputTSMTEP(?:ostUpdateHook|reUpdateHook)|Japanese|NWidthHook|OutputMask|Roman|TextWidthHook|W(?:estern|idthHook)|er(?:nal(?:ComponentErr|QuickTimeError|ScrapErr)|ruptsMaskedErr)|lCurrency)|valid(?:Atom(?:ContainerErr|Err|TypeErr)|C(?:hunk(?:Cache|Num)|omponentID)|D(?:ataRef(?:Container)?|uration)|EditState|FolderTypeErr|H(?:andler|otSpotIDErr)|I(?:conRefErr|mageIndexErr|ndexErr)|M(?:edia|ovie)|Node(?:FormatErr|IDErr)|PickerType|Rect|S(?:ample(?:Desc(?:Index|ription)|Num|Table)|prite(?:I(?:DErr|ndexErr)|PropertyErr|WorldPropertyErr))|T(?:ime|ra(?:ck|nslationPathErr))|ViewStateErr))|o(?:Dir(?:Flg|Mask)|Err|QType)|t(?:emDisable|lc(?:D(?:isableKeyScriptSync(?:Mask)?|ualCaret)|S(?:howIcon|ysDirection)))|u(?:Current(?:CurLang|DefLang|Script)|NumberPartsTable|S(?:cript(?:CurLang|DefLang)|ystem(?:CurLang|DefLang|Script))|UnTokenTable|W(?:hiteSpaceList|ord(?:SelectTable|WrapTable))))|k(?:1(?:6(?:B(?:E5(?:55PixelFormat|65PixelFormat)|itCardErr)|LE5(?:55(?:1PixelFormat|PixelFormat)|65PixelFormat))|IndexedGrayPixelFormat|MonochromePixelFormat)|2(?:4(?:BGRPixelFormat|RGBPixelFormat)|Indexed(?:GrayPixelFormat|PixelFormat)|vuyPixelFormat)|3(?:2(?:A(?:BGRPixelFormat|RGBPixelFormat)|B(?:GRAPixelFormat|itHeap)|RGBAPixelFormat)|DMixer(?:AttenuationCurve_(?:Exponential|Inverse|Linear|Power)|Param_(?:Azimuth|Distance|Elevation|Gain|P(?:laybackRate|ost(?:AveragePower|PeakHoldLevel)|re(?:AveragePower|PeakHoldLevel)))|RenderingFlags_(?:ConstantReverbBlend|D(?:istance(?:Attenuation|Diffusion|Filter)|opplerShift)|InterAuralDelay|LinearDistanceAttenuation)))|4Indexed(?:GrayPixelFormat|PixelFormat)|68kInterruptLevelMask|8Indexed(?:GrayPixelFormat|PixelFormat)|A(?:E(?:A(?:ND|bout|ctivate|fter|l(?:iasSelection|l(?:Caps)?|waysInteract)|n(?:swer|y)|pp(?:earanceChanged|lication(?:Class|Died))|rrow(?:At(?:End|Start)|BothEnds)|sk|utoDown)|B(?:e(?:fore|gin(?:Transaction|ning|sWith))|old)|C(?:a(?:n(?:Interact|SwitchLayer)|se(?:ConsiderMask|IgnoreMask|SensEquals)?)|entered|hangeView|l(?:eanUp|o(?:ne|se))|o(?:mmandClass|n(?:densed|tains)|py|reSuite|untElements)|reate(?:Element|Publisher)|ut)|D(?:ata(?:Array|baseSuite)|e(?:activate|bug(?:POSTHeader|ReplyHeader|XML(?:DebugAll|Re(?:quest|sponse)))|faultTimeout|lete|sc(?:Array|ListFactor(?:None|Type(?:AndSize)?)))|i(?:acritic(?:ConsiderMask|IgnoreMask)?|rectCall|skEvent)|o(?:Not(?:AutomaticallyAddAnnotationsToEvent|IgnoreHandler|PromptForUserConsent)|ObjectsExist|Script|nt(?:DisposeOnResume|Execute|Reco(?:nnect|rd))|wn)|rag|uplicateSelection)|E(?:ditGraphic|ject|mpty(?:Trash)?|nd(?:Transaction|sWith)?|quals|rase|xpan(?:ded|sion(?:ConsiderMask|IgnoreMask)?))|F(?:a(?:lse|st)|etchURL|i(?:nder(?:Events|Suite)|rst)|ormulaProtect|ullyJustified)|G(?:e(?:stalt|t(?:ClassInfo|Data(?:Size)?|EventInfo|InfoSelection|PrivilegeSelection|SuiteInfo|URL))|r(?:eaterThan(?:Equals)?|ow))|H(?:TTPProxy(?:HostAttr|PortAttr)|andle(?:Array|SimpleRanges)|i(?:Quality|dden|gh(?:Level|Priority))|yphens(?:ConsiderMask|IgnoreMask)?)|I(?:Do(?:M(?:arking|inimum)|Whose)|S(?:Action(?:Path)?|C(?:lient(?:Address|IP)|ontentType)|F(?:romUser|ullRequest)|GetURL|HTTPSearchArgs|Method|P(?:assword|ostArgs)|Referrer|S(?:criptName|erver(?:Name|Port))|User(?:Agent|Name)|WebStarSuite)|gnore(?:App(?:EventHandler|PhacHandler)|Sys(?:EventHandler|PhacHandler))|mageGraphic|n(?:fo|goreBuiltInEventHandler|ter(?:actWith(?:All|Local|Self)|ceptOpen|netSuite))|sUniform|talic)|K(?:ataHiragana|ey(?:Class|D(?:escArray|own)))|L(?:ast|e(?:ftJustified|ssThan(?:Equals)?)|o(?:calProcess|gOut|wercase))|M(?:a(?:in|keObjectsVisible)|enu(?:Class|Select)|i(?:ddle|scStandards)|o(?:difiable|use(?:Class|Down(?:InBack)?)|ve(?:d)?))|N(?:OT|avigationKey|e(?:verInteract|xt)|o(?:Arrow|Dispatch|Reply|nmodifiable|rmalPriority|tify(?:Recording|St(?:artRecording|opRecording)))?|ullEvent)|O(?:R|SAXSizeResource|pen(?:Application|Contents|Documents|Selection)?|utline)|P(?:a(?:ckedArray|geSetup|s(?:sSubDescs|te))|lain|r(?:evious|int(?:Documents|Selection|Window)?|o(?:cessNonReplyEvents|mise))|u(?:nctuation(?:ConsiderMask|IgnoreMask)?|tAway(?:Selection)?))|Q(?:D(?:Ad(?:M(?:ax|in)|d(?:Over|Pin))|B(?:ic|lend)|Copy|Not(?:Bic|Copy|Or|Xor)|Or|Su(?:b(?:Over|Pin)|pplementalSuite)|Xor)|u(?:eueReply|i(?:ckdrawSuite|t(?:A(?:ll|pplication)|PreserveState|Reason))))|R(?:PCClass|awKey|e(?:allyLogOut|buildDesktopDB|do|gular|moteProcess|openApplication|place|quiredSuite|s(?:ized|olveNestedLists|tart|ume)|ve(?:alSelection|rt))|ightJustified)|S(?:OAPScheme|a(?:meProcess|ve)|cr(?:apEvent|iptingSizeResource)|e(?:lect|t(?:Data|Position))|h(?:a(?:dow|r(?:edScriptHandler|ing))|ow(?:Clipboard|Preferences|RestartDialog|ShutdownDialog)|utDown)|leep|mall(?:Caps|Kana|SystemFontChanged)|o(?:cks(?:4Protocol|5Protocol|HostAttr|P(?:asswordAttr|ortAttr|roxyAttr)|UserAttr)|rt)|pe(?:cialClassProperties|ech(?:D(?:etected|one)|Suite))|t(?:artRecording|op(?:Recording|pedMoving)|rikethrough)|u(?:bscript|perscript|spend)|y(?:nc|stemFontChanged))|T(?:ableSuite|e(?:rminologyExtension|xtSuite)|hemeSwitch|r(?:ansactionTerminated|ue))|U(?:T(?:Apostrophe|ChangesState|DirectParamIsReference|Enum(?:ListIsExclusive|erated|sAreTypes)|Feminine|HasReturningParam|Masculine|NotDirectParamIsTarget|Optional|P(?:aramIs(?:Reference|Target)|lural|ropertyIsReference)|Re(?:adWrite|plyIsReference)|TightBindingFunction|listOfItems)|n(?:d(?:erline|o)|knownSource)|p(?:date)?|se(?:HTTPProxyAttr|RelativeIterators|S(?:ocksAttr|tandardDispatch)|rTerminology))|Vi(?:ewsFontChanged|rtualKey)|W(?:a(?:itReply|keUpEvent|ntReceipt)|h(?:iteSpace(?:ConsiderMask|IgnoreMask)?|oleWordEquals)|indowClass)|XMLRPCScheme|Yes|Z(?:enkakuHankaku|oom(?:In|Out)?))|FP(?:ExtendedFlagsAlternateAddressMask|ServerIcon|Tag(?:Length(?:DDP|IP(?:Port)?)|Type(?:D(?:DP|NS)|IP(?:Port)?)))|H(?:Intern(?:alErr|etConfigPrefErr)|TOCType(?:Developer|User))|LM(?:D(?:eferSwitchErr|uplicateModuleErr)|GroupNotFoundErr|In(?:stallationErr|ternalErr)|Location(?:NotFoundErr|sFolderType)|Module(?:CommunicationErr|sFolderType)|NoSuchModuleErr|PreferencesFolderType|RebootFlagsLevelErr)|NKRCurrentVersion|RM(?:M(?:ountVol|ultVols)|NoUI|Search(?:More|RelFirst)?|TryFileIDFirst)|S(?:A(?:dd|nd|ppleScriptSuite)|C(?:o(?:m(?:es(?:After|Before)|ment(?:Event)?)|n(?:catenate|siderReplies(?:ConsiderMask|IgnoreMask)?|tains))|urrentApplication)|D(?:efault(?:M(?:ax(?:HeapSize|StackSize)|in(?:HeapSize|StackSize))|Preferred(?:HeapSize|StackSize))|ivide)|E(?:ndsWith|qual|rrorEventCode|xcluding)|GreaterThan(?:OrEqual)?|HasOpenHandler|I(?:mporting|nitializeEventCode)|L(?:aunchEvent|essThan(?:OrEqual)?)|M(?:agic(?:EndTellEvent|TellEvent)|inimumVersion|ultiply)|N(?:egate|ot(?:Equal)?|um(?:berOfSourceStyles|ericStrings(?:ConsiderMask|IgnoreMask)?))|Or|P(?:ower|repositionalSubroutine)|Quotient|Remainder|S(?:criptEditorSuite|elect(?:CopySourceAttributes|Get(?:AppTerminology(?:Obsolete)?|Handler(?:Names|Obsolete)?|Property(?:Names|Obsolete)?|S(?:ourceStyle(?:Names|s)|ysTerminology))|Init|Set(?:Handler(?:Obsolete)?|Property(?:Obsolete)?|Source(?:Attributes|Styles)))|ourceStyle(?:ApplicationKeyword|C(?:lass|omment)|Dynamic(?:Class|E(?:numValue|ventName)|P(?:arameterName|roperty))|E(?:numValue|ventName)|L(?:anguageKeyword|iteral)|NormalText|ObjectSpecifier|P(?:arameterName|roperty)|String|U(?:ncompiledText|serSymbol))|t(?:art(?:LogEvent|sWith)|opLogEvent)|ub(?:routineEvent|tract))|TypeNamesSuite|UseEventCode)|TS(?:BoldQDStretch|CubicCurveType|DeletedGlyphcode|F(?:ileReferenceFilterSelector|lat(?:DataUstl(?:CurrentVersion|Version(?:0|1|2))|tenedFontSpecifierRawNameData)|ont(?:AutoActivation(?:Ask|D(?:efault|isabled)|Enabled)|Cont(?:ainerRefUnspecified|ext(?:Global|Local|Unspecified))|F(?:amilyRefUnspecified|ilter(?:CurrentVersion|Selector(?:Font(?:ApplierFunction|Family(?:ApplierFunction)?)|Generation|Unspecified))|ormatUnspecified)|Notify(?:Action(?:DirectoriesChanged|FontsChanged)|Option(?:Default|ReceiveWhileSuspended))|RefUnspecified))|G(?:enerationUnspecified|lyphInfo(?:AppleReserved|ByteSizeMask|HasImposedWidth|Is(?:Attachment|LTHanger|RBHanger|WhiteSpace)|TerminatorGlyph))|I(?:nvalid(?:Font(?:Access|ContainerAccess|FamilyAccess|TableAccess)|GlyphAccess)|t(?:alicQDSkew|eration(?:Completed|ScopeModified)))|Line(?:Appl(?:eReserved|yAntiAliasing)|BreakToNearestCharacter|Disable(?:A(?:ll(?:BaselineAdjustments|GlyphMorphing|Justification|KerningAdjustments|LayoutOperations|TrackingAdjustments)|utoAdjustDisplayPos)|NegativeJustification)|F(?:illOutToWidth|ractDisable)|HasNo(?:Hangers|OpticalAlignment)|I(?:gnoreFontLeading|mposeNoAngleForEnds|sDisplayOnly)|KeepSpacesOutOfMargin|LastNoJustification|No(?:AntiAliasing|LayoutOptions|SpecialJustification)|TabAdjustEnabled|Use(?:DeviceMetrics|QDRendering))|NoTracking|O(?:ptionFlags(?:ActivateDisabled|ComposeFontPostScriptName|D(?:efault(?:Scope)?|oNotNotify)|I(?:ncludeDisabledMask|terat(?:eByPrecedenceMask|ionScopeMask))|ProcessSubdirectories|Re(?:cordPersistently|strictedScope)|U(?:nRestrictedScope|se(?:DataFork(?:AsResourceFork)?|ResourceFork)))|therCurveType)|Qu(?:adCurveType|eryActivateFontMessage)|RadiansFactor|Style(?:Appl(?:eReserved|y(?:AntiAliasing|Hints))|No(?:AntiAliasing|Hinting|Options))|U(?:A(?:fterWithStreamShiftTag|scentTag)|B(?:a(?:ckgroundC(?:allback|olor)|dStreamErr|selineClassTag)|eforeWithStreamShiftTag|usyObjectErr|y(?:C(?:haracter(?:Cluster)?|luster)|TypographicCluster|Word))|C(?:GContextTag|enterTab|learAll|o(?:lorTag|ordinateOverflowErr)|rossStreamShiftTag)|D(?:ataStreamUnicodeStyledText|e(?:c(?:imalTab|ompositionFactorTag)|faultFontFallbacks|scentTag)|irectData(?:AdvanceDeltaFixedArray|BaselineDeltaFixedArray|DeviceDeltaSInt16Array|LayoutRecordATSLayoutRecord(?:Current|Version1)|Style(?:IndexUInt16Array|SettingATSUStyleSettingRefArray)))|F(?:lattenOptionNoOptionsMask|o(?:nt(?:MatrixTag|Tag|s(?:Matched|NotMatched))|rceHangingTag)|rom(?:FollowingLayout|PreviousLayout|TextBeginning))|GlyphSelectorTag|HangingInhibitFactorTag|I(?:mposeWidthTag|nvalid(?:Attribute(?:SizeErr|TagErr|ValueErr)|Ca(?:cheErr|llInsideCallbackErr)|Font(?:Err|FallbacksErr|ID)|StyleErr|Text(?:LayoutErr|RangeErr)))|KerningInhibitFactorTag|L(?:a(?:ng(?:RegionTag|uageTag)|st(?:Err|ResortOnlyFallback)|youtOperation(?:AppleReserved|BaselineAdjustment|CallbackStatus(?:Continue|Handled)|Justification|KerningAdjustment|Morph|None|OverrideTag|PostLayoutAdjustment|TrackingAdjustment))|e(?:adingTag|ftT(?:ab|oRightBaseDirection))|ine(?:AscentTag|B(?:aselineValuesTag|reakInWord)|D(?:e(?:cimalTabCharacterTag|scentTag)|irectionTag)|F(?:lushFactorTag|ontFallbacksTag)|HighlightCGColorTag|JustificationFactorTag|La(?:ng(?:RegionTag|uageTag)|youtOptionsTag)|RotationTag|T(?:extLocatorTag|runcationTag)|WidthTag)|owLevelErr)|Max(?:ATSUITagValue|LineTag|StyleTag)|N(?:o(?:C(?:aretAngleTag|orrespondingFontErr)|Font(?:CmapAvailableErr|NameErr|ScalerAvailableErr)|LigatureSplitTag|OpticalAlignmentTag|S(?:elector|pecialJustificationTag|tyleRunsAssignedErr)|tSetErr)|umberTabTypes)|OutputBufferTooSmallErr|PriorityJustOverrideTag|Q(?:D(?:BoldfaceTag|CondensedTag|ExtendedTag|ItalicTag|UnderlineTag)|uickDrawTextErr)|R(?:GBAlphaColorTag|ightT(?:ab|oLeftBaseDirection))|S(?:equentialFallbacks(?:Exclusive|Preferred)|izeTag|t(?:rongly(?:Horizontal|Vertical)|yle(?:Contain(?:edBy|s)|D(?:oubleLineCount|ropShadow(?:BlurOptionTag|ColorOptionTag|OffsetOptionTag|Tag))|Equals|RenderingOptionsTag|S(?:ingleLineCount|trikeThrough(?:Co(?:lorOptionTag|untOptionTag)|Tag))|TextLocatorTag|Un(?:derlineCo(?:lorOptionTag|untOptionTag)|equal)))|uppressCrossKerningTag)|T(?:oTextEnd|r(?:ackingTag|unc(?:FeatNoSquishing|ate(?:End|Middle|None|S(?:pecificationMask|tart)))))|U(?:n(?:FlattenOptionNoOptionsMask|supportedStreamFormatErr)|se(?:GrafPortPenLoc|LineControlWidth))|VerticalCharacterTag|se(?:CaretOrigins|DeviceOrigins|FractionalOrigins|GlyphAdvance|LineHeight|OriginFlags)))|U(?:Gr(?:aphErr_(?:CannotDoInCurrentContext|Invalid(?:AudioUnit|Connection)|NodeNotFound|OutputNodeErr)|oupParameterID_(?:All(?:NotesOff|SoundOff)|ChannelPressure|DataEntry(?:_LSB)?|Expression(?:_LSB)?|Foot(?:_LSB)?|KeyPressure(?:_(?:FirstKey|LastKey))?|ModWheel(?:_LSB)?|P(?:an(?:_LSB)?|itchBend)|ResetAllControllers|S(?:ostenuto|ustain)|Volume(?:_LSB)?))|LowShelfParam_(?:CutoffFrequency|Gain)|MIDISynthProperty_EnablePreload|N(?:BandEQ(?:FilterType_(?:2ndOrderButterworth(?:HighPass|LowPass)|Band(?:Pass|Stop)|HighShelf|LowShelf|Parametric|Resonant(?:High(?:Pass|Shelf)|Low(?:Pass|Shelf)))|P(?:aram_(?:B(?:andwidth|ypassBand)|F(?:ilterType|requency)|G(?:ain|lobalGain))|roperty_(?:BiquadCoefficients|MaxNumberOfBands|NumberOfBands)))|et(?:ReceiveP(?:aram_(?:NumParameters|Status)|roperty_(?:Hostname|Password))|S(?:end(?:NumPresetFormats|P(?:aram_(?:NumParameters|Status)|r(?:esetFormat_(?:AAC_(?:128kbpspc|32kbpspc|4(?:0kbpspc|8kbpspc)|64kbpspc|80kbpspc|96kbpspc|LD_(?:32kbpspc|4(?:0kbpspc|8kbpspc)|64kbpspc))|IMA4|Lossless(?:16|24)|PCM(?:Float32|Int(?:16|24))|ULaw)|operty_(?:Disconnect|P(?:assword|ortNum)|ServiceName|TransmissionFormat(?:Index)?))))|tatus_(?:Connect(?:ed|ing)|Listening|NotConnected|Overflow|Underflow)))|odeInteraction_(?:Connection|InputCallback))|Parameter(?:Listener_AnyParameter|MIDIMapping_(?:Any(?:ChannelFlag|NoteFlag)|Bipolar(?:_On)?|SubRange|Toggle))|Sampler(?:P(?:aram_(?:CoarseTuning|FineTuning|Gain|Pan)|roperty_(?:BankAndPreset|Load(?:AudioFiles|Instrument|PresetFromBank)))|_Default(?:BankLSB|MelodicBankMSB|PercussionBankMSB))|VoiceIO(?:Err_UnexpectedNumberOfInputChannels|Property_(?:BypassVoiceProcessing|MuteOutput|VoiceProcessingEnableAGC)))|VL(?:I(?:nOrder|s(?:Le(?:af|ftBranch)|RightBranch|Tree))|NullNode|P(?:ostOrder|reOrder))|X(?:CopyMultipleAttributeOptionStopOnError|Error(?:A(?:PIDisabled|ctionUnsupported|ttributeUnsupported)|CannotComplete|Failure|I(?:llegalArgument|nvalidUIElement(?:Observer)?)|No(?:Value|t(?:EnoughPrecision|Implemented|ification(?:AlreadyRegistered|NotRegistered|Unsupported)))|ParameterizedAttributeUnsupported|Success)|MenuItemModifier(?:Control|No(?:Command|ne)|Option|Shift)|UnderlineStyle(?:Double|None|Single|Thick))|bbrevSquaredLigaturesO(?:ffSelector|nSelector)|c(?:c(?:essException|ountKCItemAttr)|tivateAnd(?:HandleClick|IgnoreClick))|dd(?:KCEvent(?:Mask)?|ressKCItemAttr)|l(?:ert(?:Caution(?:Alert|BadgeIcon|Icon)|Default(?:CancelText|O(?:KText|therText))|Flags(?:AlertIsMovable|Use(?:Co(?:mpositing|ntrolHierarchy)|Theme(?:Background|Controls)))|Note(?:Alert|Icon)|PlainAlert|St(?:dAlert(?:CancelButton|HelpButton|O(?:KButton|therButton))|op(?:Alert|Icon))|VariantCode|WindowClass)|i(?:asBadgeIcon|gn(?:AbsoluteCenter|Bottom(?:Left|Right)?|Center(?:Bottom|Left|Right|Top)|HorizontalCenter|Left|None|Right|Top(?:Left|Right)?|VerticalCenter))|l(?:CapsSelector|LowerCaseSelector|PPDDomains|Typ(?:eFeaturesO(?:ffSelector|nSelector)|ographicFeaturesType)|WindowClasses)|readySavedStateErr|t(?:HalfWidthTextSelector|P(?:lainWindowClass|roportionalTextSelector)|ernate(?:HorizKanaO(?:ffSelector|nSelector)|KanaType|VertKanaO(?:ffSelector|nSelector)))|ways(?:Authenticate|SendSubject))|n(?:dConnections|notationType|y(?:AuthType|Component(?:FlagsMask|Manufacturer|SubType|Type)|P(?:ort|rotocol)|TransactionID))|pp(?:PackageAliasType|earance(?:EventClass|Folder(?:Icon|Type)|Part(?:DownButton|Indicator|LeftButton|Meta(?:Disabled|Inactive|None)|Page(?:DownArea|LeftArea|RightArea|UpArea)|RightButton|UpButton)|Region(?:C(?:loseBox|o(?:llapseBox|ntent))|Drag|Grow|Structure|T(?:itle(?:Bar|ProxyIcon|Text)|oolbarButton)|ZoomBox))|l(?:e(?:ExtrasFolder(?:Icon|Type)|JapaneseDictionarySignature|Lo(?:go(?:CharCode|Icon|Unicode)|sslessFormatFlag_(?:16BitSourceData|2(?:0BitSourceData|4BitSourceData)|32BitSourceData))|M(?:anufacturer|enu(?:Folder(?:AliasType|Icon(?:Resource)?|Type)|Icon))|S(?:cript(?:BadgeIcon|Subtype)|hare(?:AuthenticationFolderType|PasswordKCItemClass|SupportFolderType))|Talk(?:Icon|ZoneIcon)|shareAutomountServerAliasesFolderType)|ication(?:AliasType|CPAliasType|DAAliasType|SupportFolder(?:Icon|Type)|ThreadID|WindowKind|sFolder(?:Icon|Type))))|s(?:sistantsFolder(?:Icon|Type)|teriskToMultiplyO(?:ffSelector|nSelector)|ync(?:Eject(?:Complete|InProgress)|Mount(?:Complete|InProgress)|Unmount(?:Complete|InProgress)))|t(?:SpecifiedOrigin|temptDupCardEntryErr)|u(?:dio(?:A(?:ggregateDevice(?:ClassID|Property(?:ActiveSubDeviceList|C(?:lockDevice|omposition)|FullSubDeviceList|MasterSubDevice))|lertSoundsFolderType)|B(?:alanceFadeType_(?:EqualPower|MaxUnityGain)|o(?:o(?:leanControl(?:ClassID|PropertyValue)|tChimeVolumeControlClassID)|x(?:ClassID|Property(?:Acqui(?:red|sitionFailed)|BoxUID|ClockDeviceList|DeviceList|Has(?:Audio|MIDI|Video)|IsProtected|TransportType))))|C(?:hannel(?:Bit_(?:Center(?:Surround|Top(?:Front|Middle|Rear))?|L(?:FEScreen|eft(?:Center|Surround(?:Direct)?|Top(?:Front|Middle|Rear))?)|Right(?:Center|Surround(?:Direct)?|Top(?:Front|Middle|Rear))?|Top(?:Back(?:Center|Left|Right)|CenterSurround)|VerticalHeight(?:Center|Left|Right))|Coordinates_(?:Azimuth|BackFront|D(?:istance|ownUp)|Elevation|LeftRight)|Flags_(?:AllOff|Meters|RectangularCoordinates|SphericalCoordinates)|La(?:bel_(?:Ambisonic_(?:W|X|Y|Z)|B(?:eginReserved|inaural(?:Left|Right))|C(?:enter(?:Surround(?:Direct)?|Top(?:Front|Middle|Rear))?|lickTrack)|Di(?:alogCentricMix|screte(?:_(?:0|1(?:0|1|2|3|4|5)?|2|3|4|5|6(?:5535)?|7|8|9))?)|EndReserved|ForeignLanguage|H(?:OA_ACN(?:_(?:0|1(?:0|1|2|3|4|5)?|2|3|4|5|6(?:5024)?|7|8|9))?|aptic|ea(?:dphones(?:Left|Right)|ringImpaired))|L(?:FE(?:2|Screen)|eft(?:Center|Surround(?:Direct)?|To(?:p(?:Front|Middle|Rear)|tal)|Wide)?)|M(?:S_(?:Mid|Side)|ono)|Narration|R(?:earSurround(?:Left|Right)|ight(?:Center|Surround(?:Direct)?|To(?:p(?:Front|Middle|Rear)|tal)|Wide)?)|Top(?:Back(?:Center|Left|Right)|CenterSurround)|U(?:n(?:known|used)|seCoordinates)|VerticalHeight(?:Center|Left|Right)|XY_(?:X|Y))|youtTag_(?:A(?:AC_(?:3_0|4_0|5_(?:0|1)|6_(?:0|1)|7_(?:0|1(?:_(?:B|C))?)|Octagonal|Quadraphonic)|C3_(?:1_0_1|2_1_1|3_(?:0(?:_1)?|1(?:_1)?))|mbisonic_B_Format|tmos_(?:5_1_2|7_1_4|9_1_6)|udioUnit_(?:4|5(?:_(?:0|1))?|6(?:_(?:0|1))?|7_(?:0(?:_Front)?|1(?:_Front)?)|8))|B(?:eginReserved|inaural)|Cube|D(?:TS_(?:3_1|4_1|6_(?:0_(?:A|B|C)|1_(?:A|B|C|D))|7_(?:0|1)|8_(?:0_(?:A|B)|1_(?:A|B)))|VD_(?:0|1(?:0|1|2|3|4|5|6|7|8|9)?|2(?:0)?|3|4|5|6|7|8|9)|iscreteInOrder)|E(?:AC(?:3_(?:6_1_(?:A|B|C)|7_1_(?:A|B|C|D|E|F|G|H))|_(?:6_0_A|7_0_A))|magic_Default_7_1|ndReserved)|H(?:OA_ACN_(?:N3D|SN3D)|exagonal)|ITU_(?:1_0|2_(?:0|1|2)|3_(?:0|1|2(?:_1)?|4_1))|M(?:PEG_(?:1_0|2_0|3_0_(?:A|B)|4_0_(?:A|B)|5_(?:0_(?:A|B|C|D)|1_(?:A|B|C|D))|6_1_A|7_1_(?:A|B|C))|atrixStereo|idSide|ono)|Octagonal|Pentagonal|Quadraphonic|S(?:MPTE_DTV|tereo(?:Headphones)?)|TMH_10_2_(?:full|std)|U(?:nknown|seChannel(?:Bitmap|Descriptions))|WAVE_(?:2_1|3_0|4_0_(?:A|B)|5_(?:0_(?:A|B)|1_(?:A|B))|6_1|7_1)|XY)))|l(?:ipLightControlClassID|ock(?:Device(?:ClassID|Property(?:AvailableNominalSampleRates|C(?:lockDomain|ontrolList)|Device(?:Is(?:Alive|Running)|UID)|Latency|NominalSampleRate|TransportType))|Source(?:Control(?:ClassID|PropertyItemKind)|ItemKindInternal)))|o(?:dec(?:AppendInput(?:BufferListSelect|DataSelect)|B(?:ad(?:DataError|PropertySizeError)|itRate(?:ControlMode_(?:Constant|LongTermAverage|Variable(?:Constrained)?)|Format(?:_(?:ABR|CBR|VBR))?))|D(?:elayMode_(?:Compatibility|Minimum|Optimal)|oesSampleRateConversion)|ExtendFrequencies|GetProperty(?:InfoSelect|Select)|I(?:llegalOperationError|n(?:itializeSelect|putFormatsForOutputFormat))|No(?:Error|tEnoughBufferSpaceError)|Output(?:FormatsForInputFormat|Precedence(?:BitRate|None|SampleRate)?)|Pr(?:imeMethod_(?:No(?:ne|rmal)|Pre)|o(?:duceOutput(?:BufferListSelect|DataSelect|Packet(?:AtEOF|Failure|NeedsMoreInputData|Success(?:HasMore)?))|perty(?:A(?:djustLocalQuality|pplicable(?:BitRateRange|InputSampleRates|OutputSampleRates)|vailable(?:BitRate(?:Range|s)|Input(?:ChannelLayout(?:Tags|s)|SampleRates)|NumberChannels|Output(?:ChannelLayout(?:Tags|s)|SampleRates)))|BitRate(?:ControlMode|ForVBR)|Current(?:Input(?:ChannelLayout|Format|SampleRate)|Output(?:ChannelLayout|Format|SampleRate)|TargetBitRate)|D(?:elayMode|oesSampleRateConversion|ynamicRangeControlMode)|EmploysDependentPackets|Format(?:CFString|Info|List)|HasVariablePacketByteSizes|I(?:nput(?:BufferSize|ChannelLayout|FormatsForOutputFormat)|sInitialized)|M(?:a(?:gicCookie|nufacturerCFString|ximumPacketByteSize)|inimum(?:DelayMode|Number(?:InputPackets|OutputPackets)))|NameCFString|Output(?:ChannelLayout|FormatsForInputFormat)|P(?:a(?:cket(?:FrameSize|SizeLimitForVBR)|ddedZeros)|r(?:ime(?:Info|Method)|ogramTargetLevel(?:Constant)?))|QualitySetting|Re(?:commendedBitRateRange|quiresPacketDescription)|S(?:ettings|oundQualityForVBR|upported(?:InputFormats|OutputFormats))|UsedInputBufferSize|ZeroFramesPadded)))|Quality_(?:High|Low|M(?:ax|edium|in))|ResetSelect|S(?:etPropertySelect|tateError)|U(?:n(?:initializeSelect|knownPropertyError|s(?:pecifiedError|upportedFormatError))|seRecommendedSampleRate))|mponent(?:Err_Instance(?:Invalidated|TimedOut)|Flag_Unsearchable|ValidationResult_(?:Failed|Passed|TimedOut|Un(?:authorizedError_(?:Init|Open)|known))|sFolderType)|n(?:trol(?:ClassID|Property(?:Element|Scope|Variant))|verter(?:A(?:pplicableEncode(?:BitRates|SampleRates)|vailableEncode(?:BitRates|ChannelLayoutTags|SampleRates))|C(?:hannelMap|o(?:decQuality|mpressionMagicCookie)|urrent(?:InputStreamDescription|OutputStreamDescription))|DecompressionMagicCookie|E(?:ncode(?:AdjustableSampleRate|BitRate)|rr_(?:BadPropertySizeError|FormatNotSupported|In(?:putSampleRateOutOfRange|valid(?:InputSize|OutputSize))|O(?:perationNotSupported|utputSampleRateOutOfRange)|PropertyNotSupported|RequiresPacketDescriptionsError|UnspecifiedError))|InputChannelLayout|OutputChannelLayout|Pr(?:ime(?:Info|Method)|operty(?:BitDepthHint|Calculate(?:InputBufferSize|OutputBufferSize)|Dither(?:BitDepth|ing)|FormatList|InputCodecParameters|M(?:aximum(?:Input(?:BufferSize|PacketSize)|OutputPacketSize)|inimum(?:InputBufferSize|OutputBufferSize))|OutputCodecParameters|Settings))|Quality_(?:High|Low|M(?:ax|edium|in))|SampleRateConverter(?:Algorithm|Complexity(?:_(?:Linear|M(?:astering|inimumPhase)|Normal))?|InitialPhase|Quality)))))|D(?:ata(?:DestinationControlClassID|SourceControlClassID)|e(?:coderComponentType|vice(?:ClassID|P(?:ermissionsError|ro(?:cessorOverload|perty(?:A(?:ctualSampleRate|vailableNominalSampleRates)|Buffer(?:FrameSize(?:Range)?|Size(?:Range)?)|C(?:hannel(?:CategoryName(?:CFString)?|N(?:ame(?:CFString)?|ominalLineLevel(?:NameForID(?:CFString)?|s)?|umberName(?:CFString)?))|l(?:ipLight|ock(?:D(?:evice|omain)|Source(?:KindForID|NameForID(?:CFString)?|s)?))|onfigurationApplication)|D(?:ataSource(?:KindForID|NameForID(?:CFString)?|s)?|evice(?:CanBeDefault(?:Device|SystemDevice)|HasChanged|Is(?:Alive|Running(?:Somewhere)?)|Manufacturer(?:CFString)?|Name(?:CFString)?|UID)|riverShouldOwniSub)|H(?:ighPassFilterSetting(?:NameForID(?:CFString)?|s)?|ogMode)|I(?:O(?:CycleUsage|ProcStreamUsage|StoppedAbnormally)|con|sHidden)|JackIsConnected|L(?:atency|istenback)|M(?:odelUID|ute)|NominalSampleRate|P(?:ha(?:ntomPower|seInvert)|l(?:ayThru(?:Destination(?:NameForID(?:CFString)?|s)?|S(?:olo|tereoPan(?:Channels)?)|Volume(?:Decibels(?:ToScalar(?:TransferFunction)?)?|RangeDecibels|Scalar(?:ToDecibels)?))?|ugIn)|referredChannel(?:Layout|sForStereo))|Re(?:gisterBufferList|latedDevices)|S(?:afetyOffset|cope(?:Input|Output|PlayThrough)|olo|t(?:ereoPan(?:Channels)?|ream(?:Configuration|Format(?:Match|Supported|s)?|s))|u(?:b(?:Mute|Volume(?:Decibels(?:ToScalar(?:TransferFunction)?)?|RangeDecibels|Scalar(?:ToDecibels)?))|pportsMixing))|T(?:alkback|ransportType)|UsesVariableBufferFrameSizes|Volume(?:Decibels(?:ToScalar(?:TransferFunction)?)?|RangeDecibels|Scalar(?:ToDecibels)?))))|StartTime(?:DontConsult(?:DeviceFlag|HALFlag)|IsInputFlag)|TransportType(?:A(?:VB|ggregate|irPlay|utoAggregate)|B(?:luetooth(?:LE)?|uiltIn)|DisplayPort|FireWire|HDMI|PCI|Thunderbolt|U(?:SB|nknown)|Virtual)|Un(?:known|supportedFormatError)))|igidesignFolderType)|En(?:coderComponentType|dPoint(?:ClassID|Device(?:ClassID|Property(?:Composition|EndPointList|IsPrivate))))|F(?:ile(?:3GP(?:2Type|Type)|A(?:AC_ADTSType|C3Type|IF(?:CType|FType)|MRType)|BadPropertySizeError|C(?:AFType|loseSelect|o(?:mponent_(?:Available(?:FormatIDs|StreamDescriptionsForFormat)|Can(?:Read|Write)|ExtensionsForType|F(?:astDispatchTable|ileTypeName)|HFSTypeCodesForType|MIMETypesForType|UTIsForType)|untUserDataSelect)|reate(?:Select|URLSelect))|D(?:ataIsThisFormatSelect|oesNotAllow64BitDataSizeError)|E(?:ndOfFileError|xtensionIsThisFormatSelect)|F(?:LACType|ile(?:DataIsThisFormatSelect|IsThisFormatSelect|NotFoundError)|lags_(?:DontPageAlignAudioData|EraseFile))|G(?:et(?:GlobalInfoS(?:elect|izeSelect)|Property(?:InfoSelect|Select)|UserDataS(?:elect|izeSelect))|lobalInfo_(?:A(?:ll(?:Extensions|HFSTypeCodes|MIMETypes|UTIs)|vailable(?:FormatIDs|StreamDescriptionsForFormat))|ExtensionsForType|FileTypeName|HFSTypeCodesForType|MIMETypesForType|ReadableTypes|TypesFor(?:Extension|HFSTypeCode|MIMEType|UTI)|UTIsForType|WritableTypes))|In(?:itialize(?:Select|WithCallbacksSelect)|valid(?:ChunkError|FileError|Packet(?:DependencyError|OffsetError)))|L(?:ATMInLOASType|oopDirection_(?:Backward|Forward(?:AndBackward)?|NoLooping))|M(?:4(?:AType|BType)|P(?:1Type|2Type|3Type|EG4Type)|arkerType_Generic)|N(?:extType|otOp(?:enError|timizedError))|Op(?:e(?:n(?:Select|URLSelect|WithCallbacksSelect)|rationNotSupportedError)|timizeSelect)|P(?:ermissionsError|ositionError|roperty(?:A(?:lbumArtwork|udio(?:Data(?:ByteCount|PacketCount)|TrackCount))|B(?:itRate|yteToPacket)|Ch(?:annelLayout|unkIDs)|D(?:ata(?:Format(?:Name)?|Offset)|eferSizeUpdates)|EstimatedDuration|F(?:ileFormat|ormatList|rameToPacket)|I(?:D3Tag|nfoDictionary|sOptimized)|Ma(?:gicCookieData|rkerList|ximumPacketSize)|NextIndependentPacket|P(?:acket(?:RangeByteCountUpperBound|SizeUpperBound|T(?:ableInfo|o(?:Byte|DependencyInfo|Frame|RollDistance)))|reviousIndependentPacket)|Re(?:gionList|s(?:erveDuration|trictsRandomAccess))|SourceBitDepth|UseAudioTrack))|R(?:F64Type|e(?:ad(?:BytesSelect|P(?:acket(?:DataSelect|sSelect)|ermission)|WritePermission)|gionFlag_(?:LoopEnable|Play(?:Backward|Forward))|moveUserDataSelect))|S(?:et(?:PropertySelect|UserDataSelect)|oundDesigner2Type|tream(?:Error_(?:BadPropertySize|D(?:ataUnavailable|iscontinuityCantRecover)|I(?:llegalOperation|nvalid(?:File|PacketOffset))|NotOptimized|Uns(?:pecifiedError|upported(?:DataFormat|FileType|Property))|ValueUnknown)|P(?:arseFlag_Discontinuity|roperty(?:Flag_(?:CacheProperty|PropertyIsCached)|_(?:A(?:udioData(?:ByteCount|PacketCount)|verageBytesPerPacket)|B(?:itRate|yteToPacket)|ChannelLayout|Data(?:Format|Offset)|F(?:ileFormat|ormatList|rameToPacket)|InfoDictionary|Ma(?:gicCookieData|ximumPacketSize)|NextIndependentPacket|P(?:acket(?:SizeUpperBound|T(?:ableInfo|o(?:Byte|DependencyInfo|Frame|RollDistance)))|reviousIndependentPacket)|Re(?:adyToProducePackets|strictsRandomAccess))))|SeekFlag_OffsetIsEstimated))|Uns(?:pecifiedError|upported(?:DataFormatError|FileTypeError|PropertyError))|W(?:AVEType|rite(?:BytesSelect|P(?:acketsSelect|ermission))))|ormat(?:60958AC3|A(?:C3|ES3|Law|MR(?:_WB)?|pple(?:IMA4|Lossless)|udible)|Bad(?:PropertySizeError|SpecifierSizeError)|DVIIntelIMA|EnhancedAC3|F(?:LAC|lag(?:Is(?:AlignedHigh|BigEndian|Float|Non(?:Interleaved|Mixable)|Packed|SignedInteger)|s(?:A(?:reAllClear|udioUnitCanonical)|Canonical|Native(?:Endian|FloatPacked))))|LinearPCM|M(?:ACE(?:3|6)|IDIStream|PEG(?:4(?:AAC(?:_(?:ELD(?:_(?:SBR|V2))?|HE(?:_V2)?|LD|Spatial))?|CELP|HVXC|TwinVQ)|D_USAC|Layer(?:1|2|3))|icrosoftGSM)|Opus|P(?:arameterValueStream|roperty_(?:A(?:SBDFrom(?:ESDS|MPEGPacket)|reChannelLayoutsEquivalent|vailableEncode(?:BitRates|ChannelLayoutTags|NumberChannels|SampleRates))|B(?:alanceFade|itmapForLayoutTag)|Channel(?:Layout(?:F(?:or(?:Bitmap|Tag)|romESDS)|Hash|Name|SimpleName)|Map|Name|ShortName)|Decode(?:FormatIDs|rs)|Encode(?:FormatIDs|rs)|F(?:irstPlayableFormatFromList|ormat(?:EmploysDependentPackets|I(?:nfo|s(?:E(?:ncrypted|xternallyFramed)|VBR))|List|Name))|ID3Tag(?:Size|ToDictionary)|MatrixMixMap|NumberOfChannelsForLayout|OutputFormatList|PanningMatrix|Tag(?:ForChannelLayout|sForNumberOfChannels)|ValidateChannelLayout))|Q(?:Design(?:2)?|UALCOMM)|TimeCode|U(?:Law|n(?:knownFormatError|s(?:pecifiedError|upported(?:DataFormatError|PropertyError))))|iLBC))|H(?:ardware(?:Bad(?:DeviceError|ObjectError|PropertySizeError|StreamError)|IllegalOperationError|No(?:Error|tRunningError)|P(?:owerHint(?:FavorSavingPower|None)|roperty(?:Bo(?:otChimeVolume(?:Decibels(?:ToScalar(?:TransferFunction)?)?|RangeDecibels|Scalar(?:ToDecibels)?)|xList)|ClockDeviceList|De(?:fault(?:InputDevice|OutputDevice|SystemOutputDevice)|vice(?:ForUID|s))|HogModeIsAllowed|IsInitingOrExiting|MixStereoToMono|P(?:lugIn(?:ForBundleID|List)|owerHint|rocessIs(?:Audible|Master))|RunLoop|S(?:erviceRestarted|leepingIsAllowed)|Trans(?:late(?:BundleIDTo(?:PlugIn|TransportManager)|UIDTo(?:Box|ClockDevice|Device))|portManagerList)|U(?:nloadingIsAllowed|ser(?:IDChanged|SessionIsActiveOrHeadless))))|Service(?:DeviceProperty_VirtualMaster(?:Balance|Volume)|Property_ServiceRestarted)|Un(?:knownPropertyError|s(?:pecifiedError|upportedOperationError)))|ighPassFilterControlClassID)|ISubOwnerControlClassID|JackControlClassID|L(?:FE(?:MuteControlClassID|VolumeControlClassID)|evelControl(?:ClassID|Property(?:Convert(?:DecibelsToScalar|ScalarToDecibels)|Decibel(?:Range|Value|sToScalarTransferFunction)|ScalarValue)|TranferFunction(?:1(?:0Over1|1Over1|2Over1|Over(?:2|3))|2Over1|3Over(?:1|2|4)|4Over1|5Over1|6Over1|7Over1|8Over1|9Over1|Linear))|i(?:neLevelControlClassID|stenbackControlClassID))|MuteControlClassID|O(?:bject(?:ClassID(?:Wildcard)?|Property(?:BaseClass|C(?:lass|ontrolList|reator)|Element(?:CategoryName|Master|N(?:ame|umberName)|Wildcard)|FirmwareVersion|Identify|Listener(?:Added|Removed)|M(?:anufacturer|odelName)|Name|Owne(?:dObjects|r)|S(?:cope(?:Global|Input|Output|PlayThrough|Wildcard)|e(?:lectorWildcard|rialNumber)))|SystemObject|Unknown)|fflineUnit(?:Property_(?:InputSize|OutputSize)|RenderAction_(?:Complete|Preflight|Render))|utputUnit(?:Property_(?:C(?:hannelMap|urrentDevice)|EnableIO|HasIO|IsRunning|S(?:etInputCallback|tartTime(?:stampsAtZero)?))|Range|St(?:artSelect|opSelect)))|P(?:ha(?:ntomPowerControlClassID|seInvertControlClassID)|lugIn(?:C(?:lassID|reateAggregateDevice)|DestroyAggregateDevice|Property(?:B(?:oxList|undleID)|ClockDeviceList|DeviceList|TranslateUIDTo(?:Box|ClockDevice|Device))|sFolderType)|r(?:esetsFolderType|opertyWildcard(?:Channel|PropertyID|Section)))|Queue(?:DeviceProperty_(?:NumberChannels|SampleRate)|Err_(?:Buffer(?:E(?:mpty|nqueuedTwice)|InQueue)|C(?:annotStart(?:Yet)?|odecNotFound)|DisposalPending|EnqueueDuringReset|Invalid(?:Buffer|CodecAccess|Device|OfflineMode|P(?:arameter|roperty(?:Size|Value)?)|QueueType|RunState|Tap(?:Context|Type))|P(?:ermissions|rimeTimedOut)|QueueInvalidated|RecordUnderrun|TooManyTaps)|P(?:aram_(?:P(?:an|itch|layRate)|Volume(?:RampTime)?)|ro(?:cessingTap_(?:EndOfStream|P(?:ostEffects|reEffects)|S(?:iphon|tartOfStream))|perty_(?:C(?:hannelLayout|onverterError|urrent(?:Device|LevelMeter(?:DB)?))|DecodeBufferSizeFrames|Enable(?:LevelMetering|TimePitch)|IsRunning|Ma(?:gicCookie|ximumOutputPacketSize)|StreamDescription|TimePitch(?:Algorithm|Bypass))))|TimePitchAlgorithm_(?:Spectral|TimeDomain|Varispeed))|S(?:e(?:lectorControl(?:ClassID|ItemKindSpacer|Property(?:AvailableItems|CurrentItem|Item(?:Kind|Name)))|rvices(?:Bad(?:PropertySizeError|SpecifierSizeError)|NoError|Property(?:CompletePlaybackIfAppDies|IsUISound)|SystemSound(?:ClientTimedOutError|ExceededMaximumDurationError|UnspecifiedError)|UnsupportedPropertyError)|ttingsFlags_(?:ExpertParameter|InvisibleParameter|MetaParameter|UserInterfaceParameter))|liderControl(?:ClassID|Property(?:Range|Value))|o(?:loControlClassID|und(?:BanksFolderType|sFolderType))|t(?:ereoPanControl(?:ClassID|Property(?:PanningChannels|Value))|ream(?:ClassID|Property(?:Available(?:PhysicalFormats|VirtualFormats)|Direction|IsActive|Latency|OwningDevice|PhysicalFormat(?:Match|Supported|s)?|StartingChannel|TerminalType|VirtualFormat)|TerminalType(?:Di(?:gitalAudioInterface|splayPort)|H(?:DMI|ead(?:phones|setMicrophone))|L(?:FESpeaker|ine)|Microphone|Receiver(?:Microphone|Speaker)|Speaker|TTY|Unknown)|Unknown))|u(?:bDevice(?:ClassID|DriftCompensation(?:HighQuality|LowQuality|M(?:axQuality|ediumQuality|inQuality))|Property(?:DriftCompensation(?:Quality)?|ExtraLatency))|pportFolderType)|ystemObjectClassID)|T(?:alkbackControlClassID|imeStamp(?:HostTimeValid|NothingValid|RateScalarValid|S(?:MPTETimeValid|ample(?:HostTimeValid|TimeValid))|WordClockTimeValid)|oolboxErr(?:_(?:CannotDoInCurrentContext|EndOfTrack|I(?:llegalTrackDestination|nvalid(?:EventType|PlayerState|SequenceType))|NoSequence|StartOfTrack|Track(?:IndexError|NotFound))|or_NoTrackDestination)|ransportManager(?:C(?:lassID|reateEndPointDevice)|DestroyEndPointDevice|Property(?:EndPointList|Trans(?:lateUIDToEndPoint|portType))))|Unit(?:Add(?:PropertyListenerSelect|RenderNotifySelect)|C(?:lumpID_System|omplexRenderSelect)|E(?:rr_(?:CannotDoInCurrentContext|ExtensionNotFound|F(?:ailedInitialization|ileNotSpecified|ormatNotSupported)|I(?:llegalInstrument|n(?:itialized|strumentTypeNotFound|valid(?:Element|File(?:Path)?|OfflineRender|P(?:arameter(?:Value)?|roperty(?:Value)?)|Scope)))|M(?:IDIOutputBufferFull|issingKey)|NoConnection|PropertyNot(?:InUse|Writable)|RenderTimeout|TooManyFramesToProcess|Un(?:authorized|initialized|knownFileType))|vent_(?:BeginParameterChangeGesture|EndParameterChangeGesture|P(?:arameterValueChange|ropertyChange)))|GetP(?:arameterSelect|roperty(?:InfoSelect|Select))|InitializeSelect|M(?:anufacturer_Apple|igrateProperty_(?:FromPlugin|OldAutomation))|OfflineProperty_(?:InputSize|OutputSize|Preflight(?:Name|Requirements)|StartOffset)|P(?:arameter(?:Flag_(?:C(?:FNameRelease|anRamp)|Display(?:Cube(?:Root|d)|Exponential|Logarithmic|Mask|Square(?:Root|d))|ExpertMode|G(?:lobal|roup)|Has(?:C(?:FNameString|lump)|Name)|I(?:nput|s(?:ElementMeta|GlobalMeta|HighResolution|Readable|Writable))|MeterReadOnly|NonRealTime|O(?:mitFromPresets|utput)|PlotHistory|ValuesHaveStrings)|Name_Full|Unit_(?:AbsoluteCents|B(?:PM|eats|oolean)|C(?:ents|ustomUnit)|De(?:cibels|grees)|EqualPowerCrossfade|Generic|Hertz|Indexed|LinearGain|M(?:IDI(?:Controller|NoteNumber)|eters|i(?:lliseconds|xerFaderCurve1))|Octaves|P(?:an|ercent|hase)|R(?:at(?:e|io)|elativeSemiTones)|S(?:ampleFrames|econds)))|ro(?:cess(?:MultipleSelect|Select)|perty_(?:A(?:UHostIdentifier|ddParameterMIDIMapping|llParameterMIDIMappings|udioChannelLayout)|B(?:usCount|ypassEffect)|C(?:PULoad|lassInfo(?:FromDocument)?|o(?:coaUI|ntextName)|urrentP(?:layTime|reset))|De(?:ferredRenderer(?:ExtraLatency|PullSize|WaitFrames)|pendentParameters)|Element(?:Count|Name)|F(?:a(?:ctoryPresets|stDispatch)|requencyResponse)|GetUIComponentList|Ho(?:stCallbacks|tMapParameterMIDIMapping)|I(?:conLocation|n(?:PlaceProcessing|put(?:AnchorTimeStamp|SamplesInOutput)))|La(?:stRenderError|tency)|M(?:IDI(?:ControlMapping|OutputCallback(?:Info)?)|a(?:keConnection|trix(?:Dimensions|Levels)|ximumFramesPerSlice)|eter(?:Clipping|ingMode))|NickName|OfflineRender|P(?:a(?:nnerMode|rameter(?:ClumpName|HistoryInfo|I(?:DName|nfo)|List|StringFromValue|Value(?:FromString|Name|Strings)|sForOverview))|resent(?:Preset|ationLatency))|Re(?:moveParameterMIDIMapping|nderQuality|questViewController|verbRoomType)|S(?:RCAlgorithm|ampleRate(?:ConverterComplexity)?|chedule(?:AudioSlice|StartTimeStamp|dFile(?:BufferSizeFrames|IDs|NumberBuffers|Prime|Region))|et(?:ExternalBuffer|RenderCallback)|houldAllocateBuffer|p(?:atial(?:Mixer(?:AttenuationCurve|DistanceParams|RenderingFlags)|izationAlgorithm)|e(?:akerConfiguration|echChannel))|treamFormat|upport(?:ed(?:ChannelLayoutTags|NumChannels)|sMPE))|TailTime|UsesInternalReverb|Voice)))|R(?:ange|e(?:move(?:PropertyListener(?:Select|WithUserDataSelect)|RenderNotifySelect)|nder(?:Action_(?:DoNotCheckRenderArgs|OutputIsSilence|P(?:ostRender(?:Error)?|reRender))|Select)|setSelect))|S(?:RCAlgorithm_(?:MediumQuality|Polyphase)|ampleRateConverterComplexity_(?:Linear|Mastering|Normal)|c(?:heduleParametersSelect|ope_(?:G(?:lobal|roup)|Input|Layer(?:Item)?|Note|Output|Part))|etP(?:arameterSelect|ropertySelect)|ubType_(?:A(?:U(?:Converter|Filter|iPodTimeOther)|udioFilePlayer)|BandPassFilter|D(?:LSSynth|e(?:f(?:aultOutput|erredRenderer)|lay)|istortion|ynamicsProcessor)|G(?:enericOutput|raphicEQ)|H(?:ALOutput|RTFPanner|igh(?:PassFilter|ShelfFilter))|Low(?:PassFilter|ShelfFilter)|M(?:IDISynth|atrix(?:Mixer|Reverb)|erger|ulti(?:BandCompressor|ChannelMixer|Splitter))|N(?:BandEQ|e(?:t(?:Receive|Send)|wTimePitch))|P(?:arametricEQ|eakLimiter|itch)|R(?:everb2|o(?:gerBeep|undTripAAC))|S(?:ample(?:Delay|r)|cheduledSoundPlayer|oundFieldPanner|p(?:atialMixer|eechSynthesis|hericalHeadPanner|litter)|tereoMixer|ystemOutput)|TimePitch|V(?:arispeed|ectorPanner|oiceProcessingIO)))|Type_(?:Effect|FormatConverter|Generator|M(?:IDIProcessor|ixer|usic(?:Device|Effect))|O(?:fflineEffect|utput)|Panner)|UninitializeSelect|yCodecComponentType)|V(?:STFolderType|olumeControlClassID)|_(?:BadFilePathError|File(?:NotFoundError|PermissionError)|MemFullError|ParamError|TooManyFilesOpenError|UnimplementedError))|t(?:h(?:TypeKCItemAttr|orizationFlag(?:CanNotPreAuthorize|De(?:faults|stroyRights)|ExtendRights|InteractionAllowed|NoData|P(?:artialRights|reAuthorize)))|o(?:GenerateReturnID|matorWorkflowsFolderType|saveInformationFolderType)))|vailBoundsChangedFor(?:D(?:isplay|ock)|MenuBar))|B(?:LibTag2|SLN(?:C(?:ontrolPointFormat(?:NoMap|WithMap)|urrentVersion)|DistanceFormat(?:NoMap|WithMap)|HangingBaseline|Ideographic(?:CenterBaseline|HighBaseline|LowBaseline)|LastBaseline|MathBaseline|N(?:oBaseline(?:Override)?|umBaselineClasses)|RomanBaseline|Tag)|T(?:B(?:adCloseMask|igKeysMask)|HeaderNode|IndexNode|LeafNode|MapNode|VariableIndexKeysMask)|a(?:ck(?:spaceCharCode|wardArrowIcon)|d(?:A(?:dapterErr|rg(?:LengthErr|sErr)|ttributeErr)|BaseErr|C(?:ISErr|ustomIFIDErr)|DeviceErr|EDCErr|HandleErr|IRQErr|LinkErr|OffsetErr|PageErr|S(?:izeErr|ocketErr|peedErr)|T(?:upleDataErr|ypeErr)|V(?:ccErr|ppErr)|WindowErr)|ndpassParam_(?:Bandwidth|CenterFrequency))|ellCharCode|ig5_(?:BasicVariant|DOSVariant|ETenVariant|StandardVariant)|lessed(?:BusErrorBait|Folder)|o(?:otTimeStartupItemsFolderType|xAnnotationSelector)|ridgeSoftwareRunningCantSleep|u(?:llet(?:CharCode|Unicode)|rningIcon|syErr|ttonDialogItem)|y(?:CommentView|DateView|IconView|KindView|LabelView|NameView|S(?:izeView|mallIcon)|VersionView|tePacketTranslationFlag_IsEstimate))|C(?:A(?:Clock(?:Message_(?:Armed|Disarmed|PropertyChanged|St(?:art(?:TimeSet|ed)|opped)|WrongSMPTEFormat)|Property_(?:InternalTimebase|M(?:IDIClockDestinations|TC(?:Destinations|FreewheelTime)|eterTrack)|Name|S(?:MPTE(?:Format|Offset)|endMIDISPP|ync(?:Mode|Source))|T(?:empoMap|imebaseSource))|SyncMode_(?:Internal|M(?:IDIClockTransport|TCTransport))|Time(?:Format_(?:AbsoluteSeconds|Beats|HostTime|S(?:MPTE(?:Seconds|Time)|amples|econds))|base_(?:Audio(?:Device|OutputUnit)|HostTime))|_(?:CannotSetTimeError|Invalid(?:P(?:layRateError|ropertySizeError)|S(?:MPTE(?:FormatError|OffsetError)|ync(?:ModeError|SourceError))|Time(?:FormatError|base(?:Error|SourceError))|UnitError)|UnknownPropertyError))|F(?:LinearPCMFormatFlagIs(?:Float|LittleEndian)|MarkerType_(?:Edit(?:Destination(?:Begin|End)|Source(?:Begin|End))|Generic|Index|KeySignature|Program(?:End|Start)|Re(?:gion(?:End|S(?:tart|yncPoint))|leaseLoop(?:End|Start))|S(?:avedPlayPosition|election(?:End|Start)|ustainLoop(?:End|Start))|T(?:empo|imeSignature|rack(?:End|Start)))|RegionFlag_(?:LoopEnable|Play(?:Backward|Forward))|_(?:AudioDataChunkID|ChannelLayoutChunkID|EditCommentsChunkID|F(?:il(?:e(?:Type|Version_Initial)|lerChunkID)|ormatListID)|In(?:foStringsChunkID|strumentChunkID)|M(?:IDIChunkID|a(?:gicCookieID|rkerChunkID))|OverviewChunkID|P(?:acketTableChunkID|eakChunkID)|RegionChunkID|S(?:MPTE_TimeType(?:2(?:398|4|5|997(?:Drop)?)|30(?:Drop)?|5(?:0|994(?:Drop)?)|60(?:Drop)?|None)|tr(?:eamDescriptionChunkID|ingsChunkID))|U(?:MIDChunkID|UIDChunkID)|iXMLChunkID)))|CRegister(?:CBit|NBit|VBit|XBit|ZBit)|F(?:Error(?:HTTP(?:AuthenticationTypeUnsupported|Bad(?:Credentials|ProxyCredentials|URL)|ConnectionLost|P(?:arseFailure|roxyConnectionFailure)|RedirectionLoopDetected|SProxyConnectionFailure)|PACFile(?:Auth|Error))|FTPErrorUnexpectedStatusCode|H(?:TTPCookieCannotParseCookieFile|ost(?:Addresses|Error(?:HostNotFound|Unknown)|Names|Reachability))|M68kRTA|NetService(?:Error(?:BadArgument|C(?:ancel|ollision)|DNSServiceFailure|In(?:Progress|valid)|NotFound|Timeout|Unknown)|Flag(?:IsD(?:efault|omain)|MoreComing|NoAutoRename|Remove)|MonitorTXT|sError(?:BadArgument|C(?:ancel|ollision)|In(?:Progress|valid)|NotFound|Timeout|Unknown))|S(?:OCKS(?:4Error(?:Id(?:Conflict|entdFailed)|RequestFailed|UnknownStatusCode)|5Error(?:Bad(?:Credentials|ResponseAddr|State)|NoAcceptableMethod|UnsupportedNegotiationMethod)|ErrorUn(?:knownClientVersion|supportedServerVersion))|treamError(?:HTTP(?:Authentication(?:Bad(?:Password|UserName)|TypeUnsupported)|BadURL|ParseFailure|RedirectionLoop|SProxyFailureUnexpectedResponseToCONNECTMethod)|SOCKS(?:4(?:Id(?:Conflict|entdFailed)|RequestFailed|SubDomainResponse)|5(?:Bad(?:ResponseAddr|State)|SubDomain(?:Method|Response|UserPass))|SubDomain(?:None|VersionCode)|UnknownClientVersion)))|URLError(?:AppTransportSecurityRequiresSecureConnection|Ba(?:ckgroundSession(?:InUseByAnotherProcess|WasDisconnected)|d(?:ServerResponse|URL))|C(?:a(?:llIsActive|n(?:celled|not(?:C(?:loseFile|onnectToHost|reateFile)|Decode(?:ContentData|RawData)|FindHost|LoadFromNetwork|MoveFile|OpenFile|ParseResponse|RemoveFile|WriteToFile)))|lientCertificateRe(?:jected|quired))|D(?:NSLookupFailed|ata(?:LengthExceedsMaximum|NotAllowed)|ownloadDecodingFailed(?:MidStream|ToComplete))|File(?:DoesNotExist|IsDirectory|OutsideSafeArea)|HTTPTooManyRedirects|InternationalRoamingOff|N(?:etworkConnectionLost|o(?:PermissionsToReadFile|tConnectedToInternet))|Re(?:directToNonExistentLocation|questBodyStreamExhausted|sourceUnavailable)|Se(?:cureConnectionFailed|rverCertificate(?:Has(?:BadDate|UnknownRoot)|NotYetValid|Untrusted))|TimedOut|U(?:n(?:known|supportedURL)|ser(?:AuthenticationRequired|CancelledAuthentication))|ZeroByteResource))|G(?:Image(?:AnimationStatus_(?:AllocationFailure|CorruptInputImage|IncompleteInputImage|ParameterError|UnsupportedFormat)|Metadata(?:Error(?:BadArgument|ConflictingArguments|PrefixConflict|Un(?:known|supportedFormat))|Type(?:A(?:lternate(?:Array|Text)|rray(?:Ordered|Unordered))|Default|Invalid|Str(?:ing|ucture)))|PropertyOrientation(?:Down(?:Mirrored)?|Left(?:Mirrored)?|Right(?:Mirrored)?|Up(?:Mirrored)?)|Status(?:Complete|In(?:complete|validData)|ReadingHeader|Un(?:expectedEOF|knownType)))|L(?:Bad(?:A(?:ddress|lloc|ttribute)|Co(?:deModule|n(?:nection|text))|D(?:isplay|rawable)|Enumeration|FullScreen|Match|OffScreen|P(?:ixelFormat|roperty)|RendererInfo|State|Value|Window)|C(?:E(?:CrashOnRemovedFunctions|DisplayListOptimization|MPEngine|Rasterization|S(?:tateValidation|urfaceBackingSize|wap(?:Limit|Rectangle)))|P(?:C(?:lientStorage|ontextPriorityRequest(?:High|Low|Normal)|urrentRendererID)|DispatchTableSize|GPU(?:FragmentProcessing|RestartStatus(?:Blacklisted|Caused|None)|VertexProcessing)|HasDrawable|MPSwapsInFlight|ReclaimResources|S(?:urface(?:BackingSize|O(?:pacity|rder)|SurfaceVolatile|Texture)|wap(?:Interval|Rectangle))))|GO(?:ClearFormatCache|FormatCacheSize|Re(?:setLibrary|tainRenderers)|Use(?:BuildCache|ErrorHandler))|NoError|OGLPVersion_(?:3_2_Core|GL3_Core|Legacy)|PFA(?:A(?:cc(?:elerated(?:Compute)?|umSize)|l(?:l(?:Renderers|owOfflineRenderers)|phaSize)|ux(?:Buffers|DepthStencil))|Backing(?:Store|Volatile)|C(?:losestPolicy|o(?:lor(?:Float|Size)|mpliant))|D(?:epthSize|isplayMask|oubleBuffer)|FullScreen|M(?:PSafe|aximumPolicy|inimumPolicy|ulti(?:Screen|sample))|NoRecovery|O(?:ffScreen|penGLProfile)|PBuffer|R(?:e(?:motePBuffer|ndererID)|obust)|S(?:ample(?:Alpha|Buffers|s)|ingleRenderer|te(?:ncilSize|reo)|upersample)|TripleBuffer|VirtualScreenCount|Window)|R(?:P(?:Acc(?:elerated(?:Compute)?|umModes)|B(?:ackingStore|ufferModes)|Co(?:lorModes|mpliant)|D(?:epthModes|isplayMask)|FullScreen|GPU(?:FragProcCapable|VertProcCapable)|M(?:PSafe|ax(?:AuxBuffers|Sample(?:Buffers|s))|ultiScreen)|O(?:ffScreen|nline)|R(?:enderer(?:Count|ID)|obust)|S(?:ample(?:Alpha|Modes)|tencilModes)|TextureMemory(?:Megabytes)?|VideoMemory(?:Megabytes)?|Window)|enderer(?:A(?:TIRa(?:deon(?:8500ID|9700ID|ID|X(?:1000ID|2000ID|3000ID))|ge(?:128ID|ProID))|ppleSWID)|Ge(?:Force(?:2MXID|3ID|8xxxID|FXID)|neric(?:FloatID|ID))|Intel(?:900ID|HD(?:4000ID|ID)|X3100ID)|Mesa3DFXID|VTBladeXP2ID))))|JK(?:ItalicRoman(?:O(?:ffSelector|nSelector)|Selector)|RomanSpacingType|SymbolAlt(?:F(?:iveSelector|ourSelector)|OneSelector|T(?:hreeSelector|woSelector)|ernativesType)|VerticalRoman(?:CenteredSelector|HBaselineSelector|PlacementType))|M(?:ActivateTextService|CopyTextServiceInputModeList|DeactivateTextService|F(?:ixTextService|loatBitmapFlags(?:Alpha(?:Premul)?|None|RangeClipped))|Get(?:InputModePaletteMenu|ScriptLangSupport|TextService(?:Menu|Property))|H(?:elpItem(?:AppleGuide|NoHelp|OtherHelp|RemoveHelp)|idePaletteWindows)|In(?:itiateTextService|putModePaletteItemHit)|MenuItemSelected|NothingSelected|S(?:Attr(?:Apple(?:CodesigningHashAgility(?:V2)?|ExpirationTime)|None|S(?:igningTime|mime(?:Capabilities|EncryptionKeyPrefs|MSEncryptionKeyPrefs)))|Certificate(?:Chain(?:WithRoot(?:OrFail)?)?|None|SignerOnly)|Signer(?:Invalid(?:Cert|Index|Signature)|NeedsDetachedContent|Unsigned|Valid)|etTextService(?:Cursor|Property)|howHelpSelected)|Te(?:rminateTextService|xtService(?:Event(?:Ref)?|MenuSelect))|UCTextServiceEvent)|S(?:Accept(?:AllComponentsMode|ThreadSafeComponentsOnlyMode)|DiskSpaceRecoveryOptionNoUI|Identity(?:AuthorityNotAccessibleErr|C(?:lass(?:Group|User)|ommitCompleted)|D(?:eletedErr|uplicate(?:FullNameErr|PosixNameErr))|Flag(?:Hidden|None)|Invalid(?:FullNameErr|PosixNameErr)|PermissionErr|Query(?:Event(?:ErrorOccurred|Results(?:Added|Changed|Removed)|SearchPhaseFinished)|GenerateUpdateEvents|IncludeHiddenIdentities|String(?:BeginsWith|Equals))|UnknownAuthorityErr)|SM_APPLEDL_MASK_MODE|tackBased)|T(?:CharacterCollection(?:Adobe(?:CNS1|GB1|Japan(?:1|2)|Korea1)|IdentityMapping)|F(?:ont(?:BoldTrait|C(?:la(?:rendonSerifsClass|ss(?:ClarendonSerifs|FreeformSerifs|M(?:ask(?:Shift|Trait)|odernSerifs)|O(?:ldStyleSerifs|rnamentals)|S(?:ansSerif|cripts|labSerifs|ymbolic)|TransitionalSerifs|Unknown))|o(?:l(?:lectionCopy(?:DefaultOptions|StandardSort|Unique)|orGlyphsTrait)|mpositeTrait|ndensedTrait))|DescriptorMatching(?:D(?:id(?:Begin|F(?:ailWithError|inish(?:Downloading)?)|Match)|ownloading)|Stalled|WillBegin(?:Downloading|Querying))|ExpandedTrait|F(?:ormat(?:Bitmap|OpenType(?:PostScript|TrueType)|PostScript|TrueType|Unrecognized)|reeformSerifsClass)|ItalicTrait|M(?:anager(?:AutoActivation(?:D(?:efault|isabled)|Enabled)|Error(?:A(?:lreadyRegistered|ssetNotFound)|CancelledByUser|DuplicatedName|ExceededResourceLimit|FileNotFound|In(?:Use|sufficient(?:Info|Permissions)|validF(?:ilePath|ontData))|MissingEntitlement|NotRegistered|RegistrationFailed|SystemRequired|UnrecognizedFormat)|Scope(?:None|P(?:ersistent|rocess)|Session|User))|o(?:dernSerifsClass|noSpaceTrait))|O(?:ldStyleSerifsClass|ptions(?:Default|Pre(?:ferSystemFont|ventAutoActivation))|r(?:ientation(?:Default|Horizontal|Vertical)|namentalsClass))|Priority(?:Computer|Dynamic|Network|Process|System|User)|S(?:ansSerifClass|criptsClass|labSerifsClass|ymbolicClass)|T(?:able(?:A(?:cnt|nkr|var)|B(?:ASE|dat|hed|loc|sln)|C(?:B(?:DT|LC)|FF(?:2)?|OLR|PAL|idg|map|v(?:ar|t))|DSIG|EB(?:DT|LC|SC)|F(?:dsc|eat|mtx|ond|pgm|var)|G(?:DEF|POS|SUB|asp|lyf|var)|H(?:VAR|dmx|ead|hea|mtx|sty)|J(?:STF|ust)|Ker(?:n|x)|L(?:TSH|car|oca|tag)|M(?:ATH|ERG|VAR|axp|eta|or(?:t|x))|Name|O(?:S2|p(?:bd|tionNoOptions))|P(?:CLT|ost|r(?:ep|op))|S(?:TAT|VG|bi(?:t|x))|Trak|V(?:DMX|ORG|VAR|hea|mtx)|Xref|Zapf)|ra(?:it(?:Bold|C(?:lassMask|o(?:lorGlyphs|mposite|ndensed))|Expanded|Italic|MonoSpace|UIOptimized|Vertical)|nsitionalSerifsClass))|U(?:I(?:Font(?:A(?:lertHeader|pplication)|ControlContent|EmphasizedSystem(?:Detail)?|Label|M(?:e(?:nu(?:Item(?:CmdKey|Mark)?|Title)|ssage)|ini(?:EmphasizedSystem|System))|None|P(?:alette|ushButton)|S(?:mall(?:EmphasizedSystem|System|Toolbar)|ystem(?:Detail)?)|Tool(?:Tip|bar)|U(?:ser(?:FixedPitch)?|tilityWindowTitle)|Views|WindowTitle)|OptimizedTrait)|nknownClass)|VerticalTrait)|rameP(?:athFill(?:EvenOdd|WindingNumber)|rogression(?:LeftToRight|RightToLeft|TopToBottom)))|Line(?:B(?:ounds(?:ExcludeTypographic(?:Leading|Shifts)|IncludeLanguageExtents|Use(?:GlyphPathBounds|HangingPunctuation|OpticalBounds))|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Head|Middle|Tail)|WordWrapping))|Truncation(?:End|Middle|Start))|ParagraphStyleSpecifier(?:Alignment|BaseWritingDirection|Count|DefaultTabInterval|FirstLineHeadIndent|HeadIndent|Line(?:B(?:oundsOptions|reakMode)|HeightMultiple|SpacingAdjustment)|M(?:aximumLine(?:Height|Spacing)|inimumLine(?:Height|Spacing))|ParagraphSpacing(?:Before)?|Ta(?:bStops|ilIndent))|Run(?:Delegate(?:CurrentVersion|Version1)|Status(?:HasNonIdentityMatrix|No(?:Status|nMonotonic)|RightToLeft))|TextAlignment(?:Center|Justified|Left|Natural|Right)|Underline(?:Pattern(?:D(?:ash(?:Dot(?:Dot)?)?|ot)|Solid)|Style(?:Double|None|Single|Thick))|WritingDirection(?:Embedding|LeftToRight|Natural|Override|RightToLeft))|UPSPPDDomain|V(?:AttachmentMode_Should(?:NotPropagate|Propagate)|Pixel(?:Buffer(?:Lock_ReadOnly|PoolFlushExcessBuffers)|FormatType_(?:1(?:28RGBAFloat|4Bayer_(?:BGGR|G(?:BRG|RBG)|RGGB)|6(?:BE5(?:55|65)|Gray|LE5(?:55(?:1)?|65))|IndexedGray_WhiteIsZero|Monochrome)|2(?:4(?:BGR|RGB)|Indexed(?:Gray_WhiteIsZero)?)|3(?:0RGB(?:LEPackedWideGamut)?|2(?:A(?:BGR|RGB|lphaGray)|BGRA|RGBA))|4(?:2(?:0YpCbCr(?:10BiPlanar(?:FullRange|VideoRange)|8(?:BiPlanar(?:FullRange|VideoRange)|Planar(?:FullRange)?|VideoRange_8A_TriPlanar))|2YpCbCr(?:1(?:0(?:BiPlanar(?:FullRange|VideoRange))?|6)|8(?:FullRange|_yuvs)?|_4A_8BiPlanar))|44(?:4(?:AYpCbCr(?:16|8)|YpCbCrA8(?:R)?)|YpCbCr(?:10(?:BiPlanar(?:FullRange|VideoRange))?|8))|8RGB|Indexed(?:Gray_WhiteIsZero)?)|64(?:ARGB|RGBAHalf)|8Indexed(?:Gray_WhiteIsZero)?|ARGB2101010LEPacked|D(?:epthFloat(?:16|32)|isparityFloat(?:16|32))|OneComponent(?:16Half|32Float|8)|TwoComponent(?:16Half|32Float|8)))|Return(?:AllocationFailed|DisplayLink(?:AlreadyRunning|CallbacksNotSet|NotRunning)|Error|First|Invalid(?:Argument|Display|P(?:ixel(?:BufferAttributes|Format)|oolAttributes)|Size)|Last|P(?:ixelBufferNot(?:MetalCompatible|OpenGLCompatible)|oolAllocationFailed)|Retry|Success|Unsupported|WouldExceedAllocationThreshold)|SMPTETime(?:Running|Type(?:2(?:4|5|997(?:Drop)?)|30(?:Drop)?|5994|60)|Valid)|Time(?:IsIndefinite|Stamp(?:BottomField|HostTimeValid|IsInterlaced|RateScalarValid|SMPTETimeValid|TopField|Video(?:HostTimeValid|RefreshPeriodValid|TimeValid))))|a(?:chedDataFolderType|l(?:ibratorNamePrefix|lingConvention(?:Mask|Phase|Width))|n(?:onicalCompositionO(?:ffSelector|nSelector)|t(?:ConfigureCardErr|ReportProcessorTemperatureErr))|r(?:bonLibraryFolderType|d(?:BusCardErr|PowerOffErr))|seSensitive(?:Layout(?:O(?:ffSelector|nSelector)|Type)|SpacingO(?:ffSelector|nSelector))|utionIcon)|e(?:nterOn(?:MainScreen|Screen)|rt(?:Search(?:Any|Decrypt(?:Allowed|Disallowed|Ignored|Mask)|Encrypt(?:Allowed|Disallowed|Ignored|Mask)|PrivKeyRequired|S(?:hift|igning(?:Allowed|Disallowed|Ignored|Mask))|Unwrap(?:Allowed|Disallowed|Ignored|Mask)|Verify(?:Allowed|Disallowed|Ignored|Mask)|Wrap(?:Allowed|Disallowed|Ignored|Mask))|Usage(?:AllAdd|DecryptA(?:dd|skAndAdd)|EncryptA(?:dd|skAndAdd)|KeyExchA(?:dd|skAndAdd)|RootA(?:dd|skAndAdd)|S(?:SLA(?:dd|skAndAdd)|hift|igningA(?:dd|skAndAdd))|VerifyA(?:dd|skAndAdd))|ificateKCItemClass))|h(?:aracter(?:AlternativesType|PaletteInputMethodClass|ShapeType)|e(?:ck(?:BoxDialogItem|CharCode|Unicode)|wableItemsFolderType))|ircleAnnotationSelector|l(?:ass(?:KCItemAttr|ic(?:D(?:esktopFolderType|omain)|PreferencesFolderType))|ea(?:nUpAEUT|rCharCode)|i(?:entRequestDenied|p(?:boardIcon|ping(?:Creator|PictureType(?:Icon)?|SoundType(?:Icon)?|TextType(?:Icon)?|UnknownType(?:Icon)?))))|o(?:l(?:l(?:ate(?:AttributesNotFoundErr|BufferTooSmall|Invalid(?:C(?:har|ollationRef)|Options)|MissingUnicodeTableErr|PatternNotFoundErr|UnicodeConvertFailedErr)|ection(?:AllAttributes|D(?:efaultAttributes|ontWant(?:Attributes|Data|I(?:d|ndex)|Size|Tag))|Lock(?:Bit|Mask)|NoAttributes|Persistence(?:Bit|Mask)|Reserved(?:0(?:Bit|Mask)|1(?:0(?:Bit|Mask)|1(?:Bit|Mask)|2(?:Bit|Mask)|3(?:Bit|Mask)|Bit|Mask)|2(?:Bit|Mask)|3(?:Bit|Mask)|4(?:Bit|Mask)|5(?:Bit|Mask)|6(?:Bit|Mask)|7(?:Bit|Mask)|8(?:Bit|Mask)|9(?:Bit|Mask))|User(?:0(?:Bit|Mask)|1(?:0(?:Bit|Mask)|1(?:Bit|Mask)|2(?:Bit|Mask)|3(?:Bit|Mask)|4(?:Bit|Mask)|5(?:Bit|Mask)|Bit|Mask)|2(?:Bit|Mask)|3(?:Bit|Mask)|4(?:Bit|Mask)|5(?:Bit|Mask)|6(?:Bit|Mask)|7(?:Bit|Mask)|8(?:Bit|Mask)|9(?:Bit|Mask)|Attributes)))|or(?:Picker(?:AppIsColorSyncAware|Ca(?:llColorProcLive|n(?:AnimatePalette|ModifyPalette))|D(?:etachedFromChoices|ialogIsMo(?:dal|veable))|In(?:ApplicationDialog|PickerDialog|SystemDialog)|sFolderType)|Sync(?:1(?:0BitInteger|6Bit(?:Float|Integer)|BitGamut)|32Bit(?:Float|Integer|NamedColorIndex)|8BitInteger|Alpha(?:First|InfoMask|Last|None(?:Skip(?:First|Last))?|Premultiplied(?:First|Last))|ByteOrder(?:16(?:Big|Little)|32(?:Big|Little)|Default|Mask)|CMMFolderType|Folder(?:Icon|Type)|ProfilesFolderType|ScriptingFolderType))?)|m(?:m(?:and(?:CharCode|Unicode)|entKCItemAttr|on(?:LigaturesO(?:ffSelector|nSelector)|NameKCItemAttr))|p(?:atibilityCompositionO(?:ffSelector|nSelector)|o(?:nent(?:AliasResourceType|C(?:anDoSelect|loseSelect)|DebugOption|ExecuteWiredActionSelect|Get(?:MPWorkFunctionSelect|PublicResourceSelect)|OpenSelect|Re(?:gisterSelect|sourceType)|TargetSelect|UnregisterSelect|VersionSelect|sFolderType)|sitionsFolderType)|uterIcon))|n(?:figurationLockedErr|n(?:Suite|ect(?:ToIcon|ion(?:AudioStreaming|BlueGammaScale|C(?:h(?:anged|eckEnable)|o(?:lor(?:DepthsSupported|Mode(?:sSupported)?)|ntroller(?:ColorDepth|D(?:epthsSupported|itherControl))))|Display(?:Flags|Parameter(?:Count|s))|Enable(?:Audio)?|Fl(?:ags|ushParameters)|G(?:ammaScale|reenGammaScale)|HandleDisplayPortEvent|Ignore|Overscan|P(?:anelTimingDisable|o(?:stWake|wer)|robe)|RedGammaScale|S(?:tartOfFrameTime|upports(?:AppleSense|HLDDCSense|LLDDCSense)|ync(?:Enable|Flags))|V(?:BLMultiplier|ideoBest))))|t(?:ainer(?:AliasType|CDROMAliasType|F(?:loppyAliasType|olderAliasType)|HardDiskAliasType|ServerAliasType|TrashAliasType)|extual(?:Alternates(?:O(?:ffSelector|nSelector)|Type)|LigaturesO(?:ffSelector|nSelector)|MenuItemsFolder(?:Icon|Type)|SwashAlternatesO(?:ffSelector|nSelector))|rol(?:A(?:dd(?:FontSizeMask|ToMetaFontMask)|utoToggles)|B(?:e(?:havior(?:CommandMenu|MultiValueMenu|OffsetContents|Pushbutton|S(?:ingleValueMenu|ticky)|Toggles)|velButton(?:Align(?:Bottom(?:Left|Right)?|Center|Left|Right|SysDirection|T(?:ext(?:Center|Flush(?:Left|Right)|SysDirection)|op(?:Left|Right)?))|C(?:enterPopupGlyphTag|ontentTag)|Graphic(?:AlignTag|OffsetTag)|IsMultiValueMenuTag|KindTag|La(?:rgeBevel(?:Proc|Variant)?|stMenuTag)|Menu(?:DelayTag|HandleTag|On(?:Bottom|Right(?:Variant)?)|RefTag|ValueTag)|NormalBevel(?:Proc|Variant)?|OwnedMenuRefTag|Place(?:AboveGraphic|BelowGraphic|Normally|SysDirection|To(?:LeftOfGraphic|RightOfGraphic))|S(?:caleIconTag|mallBevel(?:Proc|Variant)?)|T(?:ext(?:AlignTag|OffsetTag|PlaceTag)|ransformTag)))|oundsChange(?:PositionChanged|SizeChanged)|uttonPart)|C(?:h(?:asingArrows(?:AnimatingTag|Proc)|eckBox(?:AutoToggleProc|CheckedValue|MixedValue|P(?:art|roc)|UncheckedValue))|l(?:ickableMetaPart|ock(?:A(?:MPMPart|bsoluteTimeTag|nimatingTag)|DateProc|F(?:lag(?:DisplayOnly|Live|Standard)|ontStyleTag)|HourDayPart|Is(?:DisplayOnly|Live)|LongDateTag|M(?:inuteMonthPart|onthYearProc)|NoFlags|Part|SecondYearPart|T(?:ime(?:Proc|SecondsProc)|ype(?:HourMinute(?:Second)?|Month(?:DayYear|Year)))))|o(?:l(?:lectionTag(?:Bounds|Command|ID(?:ID|Signature)|M(?:aximum|inimum)|RefCon|Title|UnicodeTitle|V(?:a(?:lue|rCode)|i(?:ewSize|sibility)))|orTableResourceType)|ntent(?:AlertIconRes|C(?:GImageRef|Icon(?:Handle|Res))|I(?:CON(?:Res)?|con(?:Ref|Suite(?:Handle|Res)))|MetaPart|Pict(?:Handle|Res)|T(?:ag|extOnly))))|D(?:ataBrowser(?:DraggedPart|EditText(?:KeyFilterTag|ValidationProcTag)|IncludesFrameAndFocusTag|KeyFilterTag|Part)|efProc(?:ResourceType|Type)|i(?:alogItem|s(?:abledPart|closure(?:Button(?:Closed|Disclosed)|TrianglePoint(?:Default|Left|Right))))|ownButtonPart)|E(?:dit(?:Text(?:C(?:FStringTag|harCount)|FixedTextTag|In(?:line(?:InputProc|P(?:ostUpdateProcTag|reUpdateProcTag))|sert(?:CFStringRefTag|TextBufferTag))|Key(?:FilterTag|ScriptBehaviorTag)|LockedTag|P(?:a(?:rt|ssword(?:CFStringTag|Proc|Tag))|roc)|S(?:electionTag|ingleLineTag|pellCheck(?:AsYouTypeTag|ingTag)|tyleTag)|T(?:EHandleTag|extTag)|ValidationProcTag)|UnicodeTextP(?:asswordProc|ostUpdateProcTag|roc))|ntireControl)|Fo(?:cus(?:N(?:extPart|oPart)|PrevPart)|nt(?:BigSystemFont|MiniSystemFont|S(?:mall(?:BoldSystemFont|SystemFont)|tyleTag)|ViewSystemFont))|G(?:etsFocusOnClick|roupBox(?:CheckBoxProc|F(?:ontStyleTag|rameRectTag)|Menu(?:HandleTag|RefTag)|PopupButtonProc|Secondary(?:CheckBoxProc|PopupButtonProc|TextTitleProc)|T(?:extTitleProc|itleRectTag)))|Ha(?:ndlesTracking|s(?:RadioBehavior|SpecialBackground))|I(?:con(?:AlignmentTag|ContentTag|NoTrackProc|P(?:art|roc)|Re(?:f(?:NoTrackProc|Proc)|sourceIDTag)|Suite(?:NoTrackProc|Proc)|TransformTag)|dlesWithTimer|mageWell(?:ContentTag|IsDragDestinationTag|P(?:art|roc)|TransformTag)|n(?:activePart|dicatorPart|vertsUpDownValueMeaning))|K(?:ey(?:Filter(?:BlockKey|PassKey|Tag)|ScriptBehavior(?:AllowAnyScript|PrefersRoman|RequiresRoman))|ind(?:BevelButton|C(?:h(?:asingArrows|eck(?:Box|GroupBox))|lock)|D(?:ataBrowser|isclosure(?:Button|Triangle))|Edit(?:Text|UnicodeText)|GroupBox|HI(?:ComboBox|GrowBoxView|ImageView|MenuView|S(?:crollView|earchField|tandardMenuView)|TextView)|I(?:con|mageWell)|Li(?:stBox|ttleArrows)|P(?:icture|lacard|opup(?:Arrow|Button|GroupBox)|rogressBar|ush(?:Button|IconButton))|R(?:adio(?:Button|Group)|elevanceBar|oundButton)|S(?:croll(?:Bar|ingTextBox)|eparator|ignatureApple|lider|taticText)|Ta(?:bs|g)|UserPane|WindowHeader))|L(?:abelPart|i(?:st(?:Box(?:AutoSizeProc|DoubleClick(?:Part|Tag)|FontStyleTag|KeyFilterTag|L(?:DEFTag|istHandleTag)|P(?:art|roc))|DescResType)|ttleArrows(?:IncrementValueTag|Proc)))|MenuPart|No(?:Content|Part|Variant)|OpaqueMetaPart|P(?:a(?:ge(?:DownPart|UpPart)|nel(?:DisabledFolder(?:Icon|Type)|Folder(?:AliasType|Icon(?:Resource)?|Type)))|icture(?:HandleTag|NoTrackProc|P(?:art|roc))|lacardProc|opup(?:Arrow(?:EastProc|NorthProc|Orientation(?:East|North|South|West)|S(?:ize(?:Normal|Small)|mall(?:EastProc|NorthProc|SouthProc|WestProc)|outhProc)|WestProc)|Button(?:CheckCurrentTag|ExtraHeightTag|Menu(?:HandleTag|IDTag|RefTag)|OwnedMenuRefTag|Proc)|FixedWidthVariant|Use(?:AddResMenuVariant|WFontVariant)|VariableWidthVariant)|ro(?:gressBar(?:AnimatingTag|IndeterminateTag|Proc)|pertyPersistent)|ushBut(?:LeftIconProc|RightIconProc|ton(?:AnimatingTag|C(?:ancelTag|ontentTag)|DefaultTag|I(?:con(?:AlignmentTag|On(?:Left|Right))|sTexturedTag)|Proc)))|R(?:adio(?:Button(?:AutoToggleProc|CheckedValue|MixedValue|P(?:art|roc)|UncheckedValue)|GroupP(?:art|roc))|elevanceBarProc|oundButton(?:ContentTag|LargeSize|NormalSize|SizeTag))|S(?:croll(?:Bar(?:LiveProc|Proc|ShowsArrowsTag)|TextBox(?:A(?:nimatingTag|utoScroll(?:AmountTag|Proc))|ContentsTag|DelayBe(?:foreAutoScrollTag|tweenAutoScrollTag)|Proc))|e(?:archField(?:CancelPart|MenuPart)|paratorLineProc)|ize(?:Auto|Large|Mini|Normal|Small|Tag)|lider(?:DoesNotPoint|HasTickMarks|LiveFeedback|NonDirectional|P(?:oints(?:DownOrRight|UpOrLeft)|roc)|ReverseDirection)|t(?:aticText(?:CFStringTag|IsMultilineTag|Proc|StyleTag|T(?:ext(?:HeightTag|Tag)|runcTag))|r(?:ipModulesFolder(?:Icon|Type)|uctureMetaPart))|upports(?:C(?:alcBestRect|lickActivation|ontextualMenus)|D(?:ataAccess|ragAndDrop)|Embedding|F(?:lattening|ocus)|G(?:etRegion|hosting)|LiveFeedback|SetCursor))|T(?:ab(?:ContentRectTag|Direction(?:East|North|South|West)|EnabledFlagTag|FontStyleTag|I(?:mageContentTag|nfo(?:Tag|Version(?:One|Zero)))|L(?:arge(?:EastProc|NorthProc|Proc|SouthProc|WestProc)|istResType)|S(?:ize(?:Large|Mini|Small)|mall(?:EastProc|NorthProc|Proc|SouthProc|WestProc)))|emplateResourceType|hemeText(?:FontTag|HorizontalFlushTag|InfoTag|TruncationTag|VerticalFlushTag)|riangle(?:AutoToggleProc|L(?:astValueTag|eftFacing(?:AutoToggleProc|Proc))|P(?:art|roc)))|U(?:nicode|pButtonPart|se(?:AllMask|BackColorMask|F(?:aceMask|o(?:ntMask|reColorMask))|JustMask|ModeMask|SizeMask|ThemeFontIDMask|r(?:ItemDrawProcTag|Pane(?:ActivateProcTag|BackgroundProcTag|DrawProcTag|FocusProcTag|HitTestProcTag|IdleProcTag|KeyDownProcTag|Proc|TrackingProcTag))|sOwningWindowsFontVariant))|W(?:ants(?:Activate|Idle)|indow(?:Header(?:IsListHeaderTag|Proc)|ListViewHeaderProc))))|verterPrimeMethod_(?:No(?:ne|rmal)|Pre))|operativeThread|re(?:E(?:ndian(?:AppleEventManagerDomain|ResourceManagerDomain)|ventClass)|ServicesFolderType))|reat(?:e(?:Folder(?:AtBoot(?:Bit)?)?|IfNeeded)|ionDateKCItemAttr|orKCItemAttr)|u(?:r(?:rent(?:MixedModeStateRecord|Process|ThreadID|User(?:Folder(?:Location|Type)|RemoteFolder(?:Location|Type)))|sive(?:ConnectionType|Selector))|stom(?:BadgeResource(?:ID|Type|Version)|Icon(?:KCItemAttr|Resource))))|D(?:0Dispatched(?:CStackBased|PascalStackBased)|1DispatchedPascalStackBased|CM(?:A(?:llowListing|nyFieldT(?:ag|ype))|BasicDictionaryClass|Can(?:AddDictionaryFieldMask|CreateDictionaryMask|HaveMultipleIndexMask|ModifyDictionaryMask|StreamDictionaryMask|Use(?:FileDictionaryMask|MemoryDictionaryMask|TransactionMask))|DictionaryHeader(?:Signature|Version)|Fi(?:ndMethod(?:B(?:ackwardTrie|eginningMatch)|ContainsMatch|E(?:ndingMatch|xactMatch)|ForwardTrie)|xedSizeFieldMask)|HiddenFieldMask|I(?:dentifyFieldMask|ndexedFieldMask)|Japanese(?:AccentT(?:ag|ype)|FukugouInfoT(?:ag|ype)|H(?:inshiT(?:ag|ype)|yokiT(?:ag|ype))|OnKunReadingT(?:ag|ype)|PhoneticT(?:ag|ype)|WeightT(?:ag|ype)|YomiT(?:ag|ype))|ProhibitListing|Re(?:ad(?:OnlyDictionary|WriteDictionary)|quiredFieldMask)|SpecificDictionaryClass|UserDictionaryClass)|M(?:CantBlock|D(?:isplay(?:AlreadyInstalledErr|NotFoundErr)|riverNotDisplayMgrAwareErr)|FoundErr|GenErr|M(?:ainDisplayCannotMoveErr|irroring(?:Blocked|NotOn|OnAlready))|No(?:DeviceTableclothErr|tFoundErr)|SWNotInitializedErr|WrongNumberOfDisplays)|OSJapanese(?:PalmVariant|StandardVariant)|R(?:AudioFileNotSupportedErr|B(?:adLayoutErr|lock(?:Size(?:Audio|DVDData|Mode(?:1Data|2(?:Data|Form(?:1Data|2Data))))|Type(?:Audio|DVDData|Mode(?:1Data|2(?:Data|Form(?:1Data|2Data)))))|urn(?:MediaWriteFailureErr|NotAllowedErr|PowerCalibrationErr|UnderrunErr))|CDText(?:Encoding(?:ASCII|ISOLatin1Modified)|GenreCode(?:A(?:dultContemporary|lternativeRock)|C(?:hildrens|lassical|o(?:ntemporaryChristian|untry))|Dance|E(?:asyListening|rotic)|Folk|Gospel|HipHop|Jazz|Latin|Musical|NewAge|Oper(?:a|etta)|Pop|R(?:ap|eggae|hythmAndBlues|ock)|S(?:ound(?:Effects|track)|pokenWord)|Unknown|WorldMusic))|D(?:ata(?:Form(?:Audio|DVDData|Mode(?:1Data|2(?:Data|Form(?:1Data|2Data))))|ProductionErr)|evice(?:AccessErr|Bu(?:rnStrategyNotAvailableErr|syErr)|C(?:antWrite(?:CDTextErr|I(?:SRCErr|ndexPointsErr)|SCMSErr)|ommunicationErr)|InvalidErr|Not(?:ReadyErr|SupportedErr)|PreGapLengthNotValidErr)|oubleLayerL0(?:AlreadySpecifiedErr|DataZoneBlocksParamErr))|F(?:i(?:le(?:Fork(?:Data|Resource|Size(?:Actual|Estimate))|LocationConflictErr|M(?:essage(?:ForkSize|P(?:ostBurn|r(?:eBurn|oduceData))|Release|VerificationStarting)|odifiedDuringBurnErr)|system(?:Mask(?:Default|HFSPlus|ISO9660|Joliet|UDF)|sNotSupportedErr))|rstErr)|lag(?:NoMoreData|SubchannelDataRequested)|unctionNotSupportedErr)|In(?:ternalErr|validIndexPointsErr)|LinkType(?:FinderAlias|HardLink|SymbolicLink)|Media(?:BusyErr|InvalidErr|Not(?:BlankErr|ErasableErr|PresentErr|SupportedErr|WritableErr))|S(?:essionFormat(?:Audio|CD(?:I|XA)|DVDData|Mode1Data)|peedTestAlreadyRunningErr)|T(?:ooMany(?:NameConflictsErr|TracksForDVDErr)|rack(?:M(?:essage(?:EstimateLength|P(?:ostBurn|r(?:eBurn|oduce(?:Data|PreGap)))|Verif(?:ication(?:Done|Starting)|y(?:Data|PreGap)))|ode(?:1Data|2(?:Data|Form(?:1Data|2Data))|Audio|DVDData))|ReusedErr))|UserCanceledErr|VerificationFailedErr)|Sp(?:Con(?:firmSwitchWarning|text(?:AlreadyReservedErr|Not(?:FoundErr|ReservedErr)))|FrameRateNotReadyErr|In(?:ternalErr|valid(?:AttributesErr|ContextErr))|NotInitializedErr|S(?:tereoContextErr|ystemSWTooOldErr))|TP(?:AbortJobErr|HoldJobErr|StopQueueErr|T(?:hirdPartySupported|ryAgainErr))|ata(?:A(?:ccessKCEvent(?:Mask)?|lignmentException)|Br(?:eakpointException|owser(?:A(?:lwaysExtendSelection|ttribute(?:AutoHideScrollBars|ColumnViewResizeWindow|ListView(?:AlternatingRowColors|DrawColumnDividers)|None|ReserveGrowBoxSpace))|C(?:heckboxT(?:riState|ype)|lientPropertyFlags(?:Mask|Offset)|mdTogglesSelection|o(?:lumnView(?:PreviewProperty)?|nt(?:ainer(?:AliasIDProperty|Clos(?:ed|ing)|Is(?:ClosableProperty|Open(?:ableProperty)?|SortableProperty)|Opened|Sort(?:ed|ing))|entHit))|ustomType)|D(?:ateTime(?:DateOnly|Relative|SecondsToo|T(?:imeOnly|ype))|efaultPropertyFlags|oNotTruncateText|ragSelect)|Edit(?:Msg(?:C(?:lear|opy|ut)|Paste|Redo|SelectAll|Undo)|St(?:arted|opped))|I(?:con(?:AndTextType|Type)|tem(?:A(?:dded|nyState)|D(?:eselected|oubleClicked)|Is(?:ActiveProperty|ContainerProperty|DragTarget|EditableProperty|Select(?:ableProperty|ed))|No(?:Property|State)|ParentContainerProperty|Removed|Sel(?:ected|fIdentityProperty)|s(?:A(?:dd|ssign)|Remove|Toggle)))|L(?:atestC(?:allbacks|ustomCallbacks)|istView(?:AppendColumn|DefaultColumnFlags|LatestHeaderDesc|MovableColumn|NoGapForIconInHeaderButton|S(?:electionColumn|ortableColumn)|TypeSelectColumn)?)|Metric(?:CellContentInset|Disclosure(?:Column(?:EdgeInset|PerDepthGap)|TriangleAndContentGap)|IconAndTextGap|Last)|N(?:everEmptySelectionSet|o(?:DisjointSelection|Item|View|thingHit))|Order(?:Decreasing|Increasing|Undefined)|P(?:opupMenu(?:Buttonless|Type)|ro(?:gressBarType|perty(?:C(?:heckboxPart|ontentPart)|DisclosurePart|EnclosingPart|Flags(?:Mask|Offset)|I(?:conPart|s(?:Editable|Mutable))|ModificationFlags|ProgressBarPart|RelevanceRankPart|SliderPart|TextPart)))|Re(?:l(?:ativeDateTime|evanceRankType)|setSelection|veal(?:AndCenterInView|Only|WithoutSelecting))|S(?:elect(?:OnlyOne|ion(?:Anchor(?:Down|Left|Right|Up)|SetChanged))|lider(?:DownwardThumb|PlainThumb|Type|UpwardThumb)|topTracking)|T(?:a(?:bleView(?:FillHilite|LastColumn|MinimalHilite|SelectionColumn)|rgetChanged)|extType|runcateText(?:At(?:End|Start)|Middle))|U(?:niversalPropertyFlags(?:Mask)?|ser(?:StateChanged|ToggledContainer))|ViewSpecific(?:Flags(?:Mask|Offset)|PropertyFlags))))|e(?:c(?:o(?:mposeDiacriticsSelector|rativeBordersSelector)|ryptKCItemAttr)|epestColorScreen|fault(?:C(?:JKRomanSelector|MMSignature|hangedKCEvent(?:Mask)?|olorPicker(?:Height|Width))|LowerCaseSelector|UpperCaseSelector)|l(?:ayParam_(?:DelayTime|Feedback|LopassCutoff|WetDryMix)|ete(?:AliasIcon|CharCode|KCEvent(?:Mask)?))|s(?:criptionKCItemAttr|ign(?:ComplexityType|Level(?:1Selector|2Selector|3Selector|4Selector|5Selector))|ktop(?:FolderType|Icon(?:Resource)?|P(?:icturesFolderType|rinterAliasType)))|v(?:eloper(?:ApplicationsFolderType|DocsFolderType|FolderType|HelpFolderType)|ice(?:InitiatedWake|ToPCS)))|i(?:a(?:criticsType|gonalFractionsSelector|l(?:ectBundleResType|og(?:F(?:lags(?:HandleMovableModal|Use(?:Co(?:mpositing|ntrolHierarchy)|Theme(?:Background|Controls)))|ont(?:Add(?:FontSizeMask|ToMetaFontMask)|NoFontStyle|Use(?:AllMask|BackColorMask|F(?:aceMask|o(?:nt(?:Mask|NameMask)|reColorMask))|JustMask|ModeMask|SizeMask|ThemeFontIDMask)))|WindowKind))|mond(?:AnnotationSelector|CharCode|Unicode))|ctionar(?:iesFolderType|yFileType)|giHub(?:Blank(?:CD|DVD)|EventClass|MusicCD|PictureCD|VideoDVD)|ngbatsSelector|phthongLigaturesO(?:ffSelector|nSelector)|rectoryServices(?:FolderType|PlugInsFolderType)|s(?:p(?:atched(?:ParameterPhase|SelectorSize(?:Phase|Width))|lay(?:ExtensionsFolderType|Mode(?:A(?:cceleratorBackedFlag|lwaysShowFlag)|BuiltInFlag|DefaultFlag|InterlacedFlag|N(?:ativeFlag|everShowFlag|ot(?:GraphicsQualityFlag|PresetFlag|ResizeFlag))|RequiresPanFlag|S(?:afe(?:Flag|tyFlags)|imulscanFlag|tretchedFlag)|TelevisionFlag|Valid(?:F(?:lag|or(?:AirPlayFlag|HiResFlag|MirroringFlag))|ateAgainstDisplay))|ProductIDGeneric|SubPixel(?:Configuration(?:Delta|Quad|Stripe(?:Offset)?|Undefined)|Layout(?:BGR|QuadGB(?:L|R)|RGB|Undefined)|Shape(?:Elliptical|Oval|R(?:ectangular|ound)|Square|Undefined))|TextSelector|VendorIDUnknown))|tortionParam_(?:CubicTerm|De(?:c(?:ay|imation(?:Mix)?)|lay(?:Mix)?)|FinalMix|LinearTerm|PolynomialMix|R(?:ingMod(?:Balance|Freq(?:1|2)|Mix)|ounding)|S(?:oftClipGain|quaredTerm)))|therAlgorithm_(?:NoiseShaping|TPDF))|o(?:FolderActionEvent|NotActivateAnd(?:HandleClick|IgnoreClick)|cument(?:Window(?:Class|VariantCode)|ationFolderType|sFolder(?:Icon|Type))|main(?:LibraryFolderType|TopLevelFolderType)|nt(?:CreateFolder|FindAppBySignature|PassSelector)|wn(?:ArrowCharCode|loadsFolderType)|ze(?:Demand|Request|ToFullWakeUp|WakeUp))|r(?:a(?:g(?:Action(?:Al(?:ias|l)|Copy|Delete|Generic|Move|Nothing|Private)|Behavior(?:None|ZoomBackAnimation)|D(?:ark(?:Translucency|erTranslucency)|oNotScaleImage)|FlavorType(?:HFS|PromiseHFS)|HasLeftSenderWindow|InsideSender(?:Application|Window)|OpaqueTranslucency|P(?:romisedFlavor(?:FindFile)?|seudo(?:CreatorVolumeOrDirectory|FileType(?:Directory|Volume)))|Region(?:AndImage|Begin|Draw|End|Hide|Idle)|Standard(?:DropLocation(?:Trash|Unknown)|Translucency)|Tracking(?:Enter(?:Control|Handler|Window)|In(?:Control|Window)|Leave(?:Control|Handler|Window)))|w(?:Control(?:EntireControl|IndicatorOnly)|erWindowClass))|op(?:BoxFolderType|Folder(?:AliasType|Icon(?:Resource)?)|IconVariant))|uration(?:Forever|Immediate|Mi(?:crosecond|llisecond))|ynamic(?:RangeControlMode_(?:Heavy|Light|None)|sProcessorParam_(?:AttackTime|CompressionAmount|Expansion(?:Ratio|Threshold)|HeadRoom|InputAmplitude|MasterGain|OutputAmplitude|ReleaseTime|Threshold)))|E(?:A(?:CCESErr|DDR(?:INUSEErr|NOTAVAILErr)|GAINErr|LREADYErr)|B(?:AD(?:FErr|MSGErr)|USYErr)|C(?:ANCELErr|ONN(?:ABORTEDErr|RE(?:FUSEDErr|SETErr)))|DE(?:ADLKErr|STADDRREQErr)|EXISTErr|FAULTErr|HOST(?:DOWNErr|UNREACHErr)|I(?:N(?:PROGRESSErr|TRErr|VALErr)|OErr|SCONNErr)|M(?:SGSIZEErr|ailKCItemAttr)|N(?:ET(?:DOWNErr|RESETErr|UNREACHErr)|O(?:BUFSErr|D(?:ATAErr|EVErr)|ENTErr|M(?:EMErr|SGErr)|PROTOOPTErr|RSRCErr|S(?:RErr|TRErr)|T(?:CONNErr|SOCKErr|TYErr))|XIOErr)|OPNOTSUPPErr|P(?:ERMErr|IPEErr|ROTO(?:Err|NOSUPPORTErr|TYPEErr))|RANGEErr|S(?:HUTDOWNErr|OCKTNOSUPPORTErr|RCHErr)|T(?:IME(?:DOUTErr|Err)|OOMANYREFSErr)|UC_(?:CN_(?:BasicVariant|DOSVariant)|KR_(?:BasicVariant|DOSVariant))|WOULDBLOCKErr|dit(?:TextDialogItem|orsFolderType)|jectMediaIcon|n(?:crypt(?:KCItemAttr|Password)|d(?:CharCode|DateKCItemAttr|Of(?:Sentence|Word))|gravedTextSelector|ter(?:CharCode|Idle|Run|Standby))|scapeCharCode|ve(?:nt(?:A(?:ccessible(?:Get(?:All(?:A(?:ctionNames|ttributeNames)|ParameterizedAttributeNames)|ChildAtPoint|FocusedChild|NamedA(?:ctionDescription|ttribute))|IsNamedAttributeSettable|PerformNamedAction|SetNamedAttribute)|pp(?:A(?:ctiv(?:ated|eWindowChanged)|vailableWindowBoundsChanged)|Deactivated|F(?:ocus(?:Drawer|MenuBar|Next(?:DocumentWindow|FloatingWindow)|Toolbar)|rontSwitched)|GetDockTileMenu|Hidden|IsEventInInstantMouser|Launch(?:Notification|ed)|Quit|S(?:hown|ystemUIModeChanged)|Terminated|UpdateDockTile|earanceScrollBarVariantChanged|leEvent)|ttribute(?:Monitored|None|UserEvent))|C(?:l(?:ass(?:A(?:ccessibility|pp(?:earance|l(?:eEvent|ication)))|C(?:lockView|o(?:mmand|ntrol))|D(?:ataBrowser|elegate)|EPPC|Font|Gesture|HI(?:ComboBox|Object)|Ink|Keyboard|M(?:enu|ouse)|S(?:crollable|e(?:archField|rvice)|ystem)|T(?:SMDocumentAccess|ablet|ext(?:Field|Input)|oolbar(?:Item(?:View)?)?)|Volume|Window)|ockDateOrTimeChanged)|o(?:m(?:boBoxListItemSelected|mand(?:Process|UpdateStatus))|ntrol(?:A(?:ctivate|ddedSubControl|pplyTextColor)|BoundsChanged|C(?:lick|ontextualMenuClick)|D(?:eactivate|ispose|ra(?:g(?:Enter|Leave|Receive|Within)|w))|EnabledStateChanged|FocusPartChanged|G(?:et(?:A(?:ctionProcPart|utoToggleValue)|ClickActivation|Data|F(?:ocusPart|rameMetrics)|IndicatorDragConstraint|NextFocusCandidate|OptimalBounds|Part(?:Bounds|Region)|S(?:crollToHereStartPoint|izeConstraints|ubviewForMouseEvent))|hostingFinished)|Hi(?:liteChanged|t(?:Test)?)|In(?:dicatorMoved|itialize|terceptSubviewClick|validateForSizeChange)|LayoutInfoChanged|O(?:ptimalBoundsChanged|wningWindowChanged)|RemovingSubControl|S(?:et(?:Cursor|Data|FocusPart)|imulateHit)|T(?:itleChanged|rack(?:ingAreaE(?:ntered|xited))?)|V(?:alueFieldChanged|isibilityChanged))))|D(?:ataBrowserDrawCustomItem|elegate(?:Get(?:GroupClasses|TargetClasses)|I(?:nstalled|sGroup)|Removed))|Font(?:PanelClosed|Selection)|Ge(?:sture(?:Ended|Magnify|Rotate|S(?:tarted|wipe))|tSelectedText)|H(?:IObject(?:C(?:onstruct|reatedFromArchive)|Destruct|Encode|GetInitParameters|I(?:nitialize|sEqual)|PrintDebugInfo)|ighLevelEvent|otKey(?:Exclusive|NoOptions|Pressed|Released))|Ink(?:Gesture|Point|Text)|KeyModifier(?:Fn(?:Bit|Mask)|NumLock(?:Bit|Mask))|L(?:eaveInQueue|oopIdleTimer(?:Idling|St(?:arted|opped)))|M(?:enu(?:B(?:ar(?:Hidden|Shown)|e(?:comeScrollable|ginTracking))|C(?:alculateSize|easeToBeScrollable|hangeTrackingMode|losed|reateFrameView)|D(?:ispose|rawItem(?:Content)?)|En(?:ableItems|dTracking)|GetFrameBounds|M(?:atchKey|easureItem(?:Height|Width))|Opening|Populate|TargetItem)|ouse(?:Button(?:Primary|Secondary|Tertiary)|D(?:own|ragged)|E(?:ntered|xited)|Moved|Scroll|Up|Wheel(?:Axis(?:X|Y)|Moved)))|OffsetToPos|P(?:aram(?:A(?:EEvent(?:Class|ID)|TSUFont(?:ID|Size)|ccessib(?:ilityEventQueued|le(?:A(?:ction(?:Description|Name(?:s)?)|ttribute(?:Name(?:s)?|Parameter|Settable|Value))|Child|Object))|fterDelegates|ppleEvent(?:Reply)?|ttributes|vailableBounds)|B(?:eforeDelegates|ounds)|C(?:G(?:ContextRef|ImageRef)|TFontDescriptor|andidateText|lick(?:Activation|Count)|o(?:mboBoxListSelectedItemIndex|ntrol(?:Action|C(?:lickActivationResult|urrent(?:OwningWindow|Part))|D(?:ata(?:Buffer(?:Size)?|Tag)|raw(?:Depth|Engraved|InColor))|F(?:eatures|ocusEverything|rameMetrics)|Hit|I(?:n(?:dicator(?:DragConstraint|Offset|Region)|valRgn)|sGhosting)|Message|O(?:ptimalB(?:aselineOffset|ounds)|riginalOwningWindow)|P(?:ar(?:am|t(?:AutoRepeats|Bounds)?)|re(?:fersShape|viousPart))|Re(?:f|gion|sult)|Sub(?:Control|view)|Value|WouldAcceptDrop))|urrent(?:Bounds|Dock(?:Device|Rect)|MenuTrackingMode|Window))|D(?:ataBrowser(?:Item(?:ID|State)|PropertyID)|e(?:codingForEditor|legate(?:Group(?:Classes|Parameters)|Target(?:Classes)?)|vice(?:Color|Depth))|i(?:ctionary|mensions|rect(?:Object|ionInverted)|splay(?:ChangeFlags|Device))|ragRef)|E(?:nable(?:MenuForKeyEvent|d)|ventRef)|F(?:MFont(?:Family|S(?:ize|tyle))|ontColor)|G(?:Device|rafPort)|HI(?:Archive|Command|ObjectInstance|ViewTrackingArea)|I(?:mageSize|n(?:dex|it(?:Collection|Parameters)|k(?:Gesture(?:Bounds|Hotspot|Kind)|KeyboardShortcut|TextRef))|sInInstantMouser)|Key(?:Code|M(?:acCharCodes|odifiers)|Unicodes|boardType)|L(?:aunch(?:Err|RefCon)|ineSize)|M(?:a(?:gnificationAmount|ximumSize)|enu(?:Co(?:mmand(?:KeyBounds)?|ntext(?:Height)?)|D(?:i(?:rection|smissed)|rawState)|EventOptions|F(?:irstOpen|rameView)|I(?:conBounds|sPopup|tem(?:Bounds|Height|Index|Type|Width))|MarkBounds|PopupItem|Ref|T(?:extB(?:aseline|ounds)|ype)|Virtual(?:Bottom|Top))|inimumSize|o(?:dal(?:ClickResult|Window)|use(?:Button|Chord|Delta|Location|TrackingRef|Wheel(?:Axis|Delta|Smooth(?:HorizontalDelta|VerticalDelta))))|utableArray)|Ne(?:w(?:MenuTrackingMode|ScrollBarVariant)|xtControl)|Origin(?:alBounds)?|P(?:a(?:rentMenu(?:Item)?|steboardRef)|ost(?:Options|Target)|r(?:evious(?:Bounds|Dock(?:Device|Rect)|Window)|ocessID))|R(?:e(?:ason|placementText|sult)|gnHandle|otationAmount)|S(?:crapRef|ervice(?:CopyTypes|MessageName|PasteTypes|UserData)|hape|tartControl|wipeDirection|ystemUI(?:Mode|Options))|T(?:SM(?:DocAccess(?:BaselineDelta|CharacterCount|EffectiveRange|L(?:ineBounds|ockCount)|Re(?:ply(?:ATS(?:Font|UGlyphSelector)|C(?:T(?:FontRef|GlyphInfoRef)|haracter(?:Range|sPtr))|FontSize)|questedCharacterAttributes)|Send(?:C(?:haracter(?:Index|Range|sPtr)|omponentInstance)|RefCon))|Send(?:ComponentInstance|RefCon))|ablet(?:EventType|P(?:oint(?:Rec|erRec)|roximityRec))|ext(?:Input(?:GlyphInfoArray|Reply(?:A(?:TSFont|ttributedString)|CTFontRef|F(?:MFont|ont)|GlyphInfoArray|L(?:eadingEdge|ine(?:Ascent|Height))|MacEncoding|Point(?:Size)?|RegionClass|S(?:LRec|howHide)|Text(?:Angle|Offset)?)|Send(?:AttributedString|C(?:lauseRng|omponentInstance|urrentPoint)|DraggingMode|FixLen|GlyphInfoArray|HiliteRng|KeyboardEvent|LeadingEdge|MouseEvent|PinRng|Re(?:fCon|placeRange)|S(?:LRec|howHide)|Text(?:Offset|Service(?:Encoding|MacEncoding))?|UpdateRng))|Length|Selection)|oolbar(?:Display(?:Mode|Size)|Item(?:ConfigData|Identifier)?)?|ransactionID)|U(?:nconfirmed(?:Range|Text)|serData)|View(?:AttributesDictionary|Size)|Window(?:ContentBounds|D(?:efPart|ragHiliteFlag)|Features|GrowRect|Mo(?:d(?:ality|ifiedFlag)|useLocation)|P(?:artCode|roxy(?:GWorldPtr|ImageRgn|OutlineRgn))|Re(?:f|gionCode)|StateChangedFlags|T(?:itle(?:FullWidth|TextWidth)|ransition(?:Action|Effect))))|osToOffset|r(?:iority(?:High|Low|Standard)|ocessCommand))|QueueOptionsNone|R(?:awKey(?:Down|ModifiersChanged|Repeat|Up)|emoveFromQueue)|S(?:crollable(?:GetInfo|InfoChanged|ScrollTo)|e(?:archField(?:CancelClicked|SearchClicked)|rvice(?:Copy|GetTypes|P(?:aste|erform)))|howHideBottomWindow|ystem(?:Display(?:Reconfigured|sA(?:sleep|wake))|TimeDateChanged|UserSession(?:Activated|Deactivated)))|T(?:SMDocumentAccess(?:Get(?:Characters(?:Ptr(?:ForLargestBuffer)?)?|F(?:irstRectForRange|ont)|GlyphInfo|Length|SelectedRange)|LockDocument|UnlockDocument)|a(?:bletP(?:oint(?:er)?|roximity)|rget(?:DontPropagate|SendToAllHandlers))|ext(?:Accepted|DidChange|Input(?:FilterText|GetSelectedText|IsMouseEventInInlineInputArea|OffsetToPos|PosToOffset|ShowHideBottomWindow|U(?:nicode(?:ForKeyEvent|Text)|pdateActiveInputArea))|ShouldChangeInRange)|oolbar(?:BeginMultiChange|CreateItem(?:FromDrag|WithIdentifier)|Display(?:ModeChanged|SizeChanged)|EndMultiChange|Get(?:AllowedIdentifiers|DefaultIdentifiers|SelectableIdentifiers)|Item(?:A(?:cceptDrop|dded)|C(?:ommandIDChanged|reateCustomView)|EnabledStateChanged|GetPersistentData|HelpTextChanged|ImageChanged|LabelChanged|PerformAction|Removed|SelectedStateChanged|View(?:ConfigFor(?:Mode|Size)|E(?:nterConfigMode|xitConfigMode))|WouldAcceptDrop)|LayoutChanged))|U(?:nicodeForKeyEvent|pdateActiveInputArea)|Volume(?:Mounted|Unmounted)|Window(?:A(?:ctivated|ttributesChanged)|BoundsChang(?:ed|ing)|C(?:lose(?:All|d)?|o(?:l(?:laps(?:e(?:All|d)?|ing)|orSpaceChanged)|n(?:strain|textualMenuSelect))|ursorChange)|D(?:e(?:activated|f(?:D(?:ispose|ra(?:gHilite|w(?:Frame|GrowBox|Part)))|Get(?:GrowImageRegion|Region)|HitTest|Init|M(?:easureTitle|odified)|S(?:etupProxyDragImage|tateChanged)))|ispose|ra(?:g(?:Completed|Hilite|Started)|w(?:Frame|GrowBox|Part|er(?:Clos(?:ed|ing)|Open(?:ed|ing)))))|Expand(?:All|ed|ing)?|F(?:ocus(?:Acquired|Content|Drawer|Lost|Re(?:linquish|stored)|Toolbar)|ullScreenE(?:nter(?:Completed|Started)|xit(?:Completed|Started)))|Get(?:Click(?:Activation|Modality)|DockTileMenu|FullScreenContentSize|GrowImageRegion|IdealS(?:ize|tandardState)|M(?:aximumSize|inimumSize)|Region)|H(?:andle(?:Activate|Deactivate)|i(?:d(?:den|ing)|tTest))|Init|M(?:easureTitle|odified)|P(?:a(?:int|thSelect)|roxy(?:BeginDrag|EndDrag))|Res(?:ize(?:Completed|Started)|tore(?:FromDock|dAfterRelaunch))|S(?:etupProxyDragImage|h(?:eet(?:Clos(?:ed|ing)|Open(?:ed|ing))|ow(?:ing|n))|tateChanged)|T(?:itleChanged|oolbarSwitchMode|ransition(?:Completed|Started))|UpdateDockTile|Zoom(?:All|ed)?))|ryKCEventMask)|x(?:actMatchThread|cludedMemoryException|itIdle|p(?:ertCharactersSelector|o(?:nentsO(?:ffSelector|nSelector)|rtedFolderAliasType))|t(?:AudioFile(?:Error_(?:AsyncWrite(?:BufferOverflow|TooLarge)|Invalid(?:ChannelMap|DataFormat|OperationOrder|Property(?:Size)?|Seek)|MaxPacketSizeUnknown|NonPCMClientFormat)|Property_(?:Audio(?:Converter|File)|C(?:lient(?:ChannelLayout|DataFormat|MaxPacketSize)|o(?:decManufacturer|nverterConfig))|File(?:ChannelLayout|DataFormat|LengthFrames|MaxPacketSize)|IOBuffer(?:SizeBytes)?|PacketTable))|en(?:dedFlag(?:Has(?:CustomBadge|RoutingInfo)|ObjectIsBusy|sAreInvalid)|sion(?:DisabledFolderType|Folder(?:AliasType|Type)|s(?:DisabledFolderIcon|FolderIcon(?:Resource)?))))))|F(?:A(?:AttachCommand|EditCommand|FileParam|IndexParam|RemoveCommand|S(?:erverApp|uiteCode))|BC(?:a(?:ccess(?:Canceled|orStoreFailed)|ddDocFailed|llocFailed|nalysisNotAvailable)|bad(?:IndexFile(?:Version)?|Param|SearchSession)|com(?:mitFailed|pactionFailed)|deletionFailed|f(?:ileNotIndexed|lushFailed)|i(?:llegalSessionChange|ndex(?:CreationFailed|DiskIOFailed|FileDestroyed|Not(?:Available|Found)|ing(?:Canceled|Failed)))|m(?:ergingFailed|oveFailed)|no(?:IndexesFound|S(?:earchSession|uchHit))|s(?:earchFailed|omeFilesNotIndexed|ummarizationCanceled)|tokenizationFailed|v(?:TwinExceptionErr|alidationFailed))|M(?:CurrentFilterFormat|Font(?:C(?:allbackFilterSelector|ontainer(?:AccessErr|FilterSelector))|DirectoryFilterSelector|F(?:amilyCallbackFilterSelector|ileRefFilterSelector)|T(?:ableAccessErr|echnologyFilterSelector))|GenerationFilterSelector|I(?:nvalidFont(?:Err|FamilyErr)|teration(?:Completed|ScopeModifiedErr))|PostScriptFontTechnology|TrueTypeFontTechnology)|N(?:DirectoryModifiedMessage|No(?:ImplicitAllSubscription|tifyInBackground)|S(?:Bad(?:FlattenedSizeErr|ProfileVersionErr|ReferenceVersionErr)|DuplicateReferenceErr|In(?:sufficientDataErr|valid(?:ProfileErr|ReferenceErr))|MismatchErr|NameNotFoundErr))|PUNotNeeded|S(?:Al(?:iasInfo(?:F(?:SInfo|inderInfo)|I(?:Ds|sDirectory)|None|TargetCreateDate|Volume(?:CreateDate|Flags))|lo(?:c(?:AllOrNothingMask|ContiguousMask|DefaultFlags|NoRoundUpMask|ReservedMask)|wConcurrentAsyncIO(?:Bit|Mask)))|CatInfo(?:A(?:ccessDate|llDates|ttrMod)|BackupDate|C(?:ontentMod|reateDate)|DataSizes|F(?:SFileSecurityRef|inder(?:Info|XInfo))|GettableInfo|No(?:de(?:Flags|ID)|ne)|P(?:arentDirID|ermissions)|R(?:eserved|srcSizes)|S(?:et(?:Ownership|tableInfo)|haringFlags)|TextEncoding|User(?:Access|Privs)|V(?:alence|olume))|E(?:jectVolumeForceEject|ventStream(?:CreateFlag(?:FileEvents|IgnoreSelf|No(?:Defer|ne)|UseCFTypes|WatchRoot)|Event(?:Flag(?:EventIdsWrapped|HistoryDone|Item(?:C(?:hangeOwner|reated)|FinderInfoMod|I(?:nodeMetaMod|s(?:Dir|File|Symlink))|Modified|Re(?:moved|named)|XattrMod)|KernelDropped|M(?:ount|ustScanSubDirs)|None|RootChanged|U(?:nmount|serDropped))|IdSinceNow)))|F(?:ileOperation(?:D(?:efaultOptions|oNotMoveAcrossVolumes)|Overwrite|Skip(?:Preflight|SourcePermissionErrors))|orceRead(?:Bit|Mask))|I(?:nvalidVolumeRefNum|terate(?:Delete|Flat|Reserved|Subtree))|KMountVersion|MountServer(?:M(?:arkDoNotDisplay|ount(?:OnMountDir|WithoutNotification))|SuppressConnectionUI)|N(?:ewLine(?:Bit|CharMask|Mask)|o(?:Cache(?:Bit|Mask)|de(?:CopyProtect(?:Bit|Mask)|DataOpen(?:Bit|Mask)|ForkOpen(?:Bit|Mask)|HardLink(?:Bit|Mask)|I(?:nShared(?:Bit|Mask)|s(?:Directory(?:Bit|Mask)|Mounted(?:Bit|Mask)|SharePoint(?:Bit|Mask)))|Locked(?:Bit|Mask)|ResOpen(?:Bit|Mask))))|OperationStage(?:Complete|Preflighting|Running|Undefined)|P(?:athMakeRefD(?:efaultOptions|oNotFollowLeafSymlink)|leaseCache(?:Bit|Mask))|R(?:dVerify(?:Bit|Mask)|eplaceObject(?:D(?:efaultOptions|oNotCheckObjectWriteAccess)|PreservePermissionInfo|Replace(?:Metadata|PermissionInfo)|SaveOriginalAsABackup))|UnmountVolumeForceUnmount|Vol(?:Flag(?:DefaultVolume(?:Bit|Mask)|FilesOpen(?:Bit|Mask)|HardwareLocked(?:Bit|Mask)|JournalingActive(?:Bit|Mask)|SoftwareLocked(?:Bit|Mask))|Info(?:B(?:ackupDate|locks)|C(?:heckedDate|reateDate)|D(?:ataClump|irCount|riveInfo)|F(?:SInfo|i(?:leCount|nderInfo)|lags)|GettableInfo|ModDate|N(?:ext(?:Alloc|ID)|one)|RsrcClump|S(?:ettableInfo|izes))))|TPServerIcon|avorite(?:ItemsIcon|sFolder(?:Icon|Type))|e(?:male|tchReference)|i(?:l(?:eSystemSupportFolderType|lScreen)|nd(?:ByContent(?:FolderType|IndexesFolderType|PluginsFolderType)|SupportFolderType|erIcon)|rst(?:FailKCStopOn|IOKitNotificationType|MagicBusyFiletype|PassKCStopOn)|tToScreen)|l(?:avorType(?:Clipping(?:Filename|Name)|DragToTrashOnly|FinderNoTrackingBehavior|UnicodeClipping(?:Filename|Name))|euronsSelector|o(?:ating(?:PointException|Window(?:Class|Definition))|ppyIconResource))|o(?:lder(?:Action(?:Code|sFolderType)|C(?:losedEvent|reated(?:AdminPrivs(?:Bit)?|Invisible(?:Bit)?|NameLocked(?:Bit)?))|I(?:n(?:LocalOrRemoteUserFolder|RemoteUserFolderIfAvailable(?:Bit)?|UserFolder(?:Bit)?)|tems(?:AddedEvent|RemovedEvent))|M(?:anager(?:FolderInMacOS9FolderIfMacOSXIsInstalled(?:Bit|Mask)|LastDomain|N(?:ewlyCreatedFolder(?:IsLocalizedBit|ShouldHaveDotLocalizedCreatedWithinMask)|otCreatedOnRemoteVolumes(?:Bit|Mask)))|ustStayOnSameVolume(?:Bit)?)|NeverMatchedInIdentifyFolder(?:Bit)?|OpenedEvent|TrackedByAlias(?:Bit)?|WindowMovedEvent)|nt(?:A(?:lbanianLanguage|mharic(?:Language|Script)|r(?:abic(?:Language|Script)|menian(?:Language|Script))|ssameseLanguage|ymaraLanguage|zerbaijan(?:ArLanguage|iLanguage))|B(?:asqueLanguage|engali(?:Language|Script)|u(?:lgarianLanguage|rmese(?:Language|Script))|yelorussianLanguage)|C(?:atalanLanguage|h(?:ewaLanguage|ineseScript)|o(?:llectionsFolderType|pyrightName)|roatianLanguage|ustom(?:16BitScript|8(?:16BitScript|BitScript)|Platform)|yrillicScript|zechLanguage)|D(?:anishLanguage|e(?:s(?:criptionName|igner(?:Name|URLName))|vanagariScript)|utchLanguage|zongkhaLanguage)|E(?:astEuropeanRomanScript|nglishLanguage|s(?:perantoLanguage|tonianLanguage)|thiopicScript|xtendedArabicScript)|F(?:a(?:eroeseLanguage|milyName|rsiLanguage)|innishLanguage|lemishLanguage|renchLanguage|ullName)|G(?:allaLanguage|e(?:ezScript|orgian(?:Language|Script)|rmanLanguage)|reek(?:Language|Script)|u(?:araniLanguage|jarati(?:Language|Script)|rmukhiScript))|H(?:ebrew(?:Language|Script)|indiLanguage|ungarianLanguage)|I(?:SO10646_1993Semantics|celandicLanguage|ndonesianLanguage|rishLanguage|talianLanguage)|Ja(?:panese(?:Language|Script)|vaneseRomLanguage)|K(?:a(?:nnada(?:Language|Script)|shmiriLanguage|zakhLanguage)|hmer(?:Language|Script)|irghizLanguage|orean(?:Language|Script)|urdishLanguage)|L(?:a(?:o(?:Language|tianScript)|ppishLanguage|stReservedName|t(?:inLanguage|vianLanguage))|ettishLanguage|i(?:cense(?:DescriptionName|InfoURLName)|thuanianLanguage))|M(?:a(?:c(?:CompatibleFullName|edonianLanguage|intoshPlatform)|l(?:a(?:gasyLanguage|y(?:ArabicLanguage|RomanLanguage|alam(?:Language|Script)))|teseLanguage)|nufacturerName|rathiLanguage)|icrosoft(?:Platform|S(?:tandardScript|ymbolScript)|UCS4Script)|o(?:ldavianLanguage|ngolian(?:CyrLanguage|Language|Script)))|N(?:epaliLanguage|o(?:Language(?:Code)?|Name(?:Code)?|Platform(?:Code)?|Script(?:Code)?|rwegianLanguage))|Or(?:iya(?:Language|Script)|omoLanguage)|P(?:ashtoLanguage|ersianLanguage|o(?:lishLanguage|rtugueseLanguage|st(?:ScriptCIDName|scriptName))|referred(?:FamilyName|SubfamilyName)|unjabiLanguage)|QuechuaLanguage|R(?:SymbolScript|eservedPlatform|oman(?:Script|ianLanguage)|u(?:andaLanguage|ndiLanguage|ssian(?:Language)?))|S(?:a(?:amiskLanguage|mpleTextName|nskritLanguage)|e(?:lection(?:ATSUIType|CoreTextType|QD(?:StyleVersionZero|Type))|rbianLanguage)|i(?:mp(?:ChineseLanguage|leChineseScript)|n(?:dhi(?:Language|Script)|halese(?:Language|Script)))|l(?:avicScript|ov(?:akLanguage|enianLanguage))|omaliLanguage|panishLanguage|tyleName|u(?:itcaseIcon|ndaneseRomLanguage)|w(?:ahiliLanguage|edishLanguage))|T(?:a(?:galogLanguage|jikiLanguage|mil(?:Language|Script)|tarLanguage)|elugu(?:Language|Script)|hai(?:Language|Script)|i(?:betan(?:Language|Script)|grinyaLanguage)|rad(?:ChineseLanguage|emarkName|itionalChineseScript)|urk(?:ishLanguage|menLanguage))|U(?:ighurLanguage|krainianLanguage|ni(?:code(?:DefaultSemantics|Platform|V(?:1_1Semantics|2_0(?:BMPOnlySemantics|FullCoverageSemantics)|4_0VariationSequenceSemantics)|_FullRepertoire)|nterpretedScript|queName)|rduLanguage|zbekLanguage)|V(?:e(?:ndorURLName|rsionName)|ietnamese(?:Language|Script))|WelshLanguage|YiddishLanguage|sFolder(?:Icon(?:Resource)?|Type))|r(?:kInfoFlags(?:FileLocked(?:Bit|Mask)|LargeFile(?:Bit|Mask)|Modified(?:Bit|Mask)|OwnClump(?:Bit|Mask)|Resource(?:Bit|Mask)|SharedWrite(?:Bit|Mask)|Write(?:Bit|Locked(?:Bit|Mask)|Mask))|m(?:FeedCharCode|InterrobangO(?:ffSelector|nSelector))|wardArrowIcon)|urByteCode)|ra(?:ctionsType|gment(?:IsPrepared|NeedsPreparing)|me(?:buffer(?:DisableAltivecAccess|Supports(?:CopybackCache|GammaCorrection|WritethruCache))|worksFolderType))|u(?:ll(?:TrashIcon(?:Resource)?|Width(?:CJKRomanSelector|IdeographsSelector|KanaSelector))|nctionKeyCharCode))|G(?:SSSelect(?:Ge(?:nericToRealID|t(?:DefaultScriptingComponent|ScriptingComponent(?:FromStored)?))|OutOfRange|RealToGenericID|SetDefaultScriptingComponent)|UARD_EXC_(?:DE(?:ALLOC_GAP|STROY)|I(?:MMOVABLE|N(?:CORRECT_GUARD|VALID_(?:ARGUMENT|NAME|RIGHT|VALUE)))|KERN_(?:FAILURE|NO_SPACE|RESOURCE)|MOD_REFS|R(?:CV_(?:GUARDED_DESC|INVALID_NAME)|IGHT_EXISTS)|S(?:E(?:ND_INVALID_(?:R(?:EPLY|IGHT)|VOUCHER)|T_CONTEXT)|TRICT_REPLY)|UNGUARDED)|e(?:n(?:EditorsFolderType|er(?:alFailureErr|ic(?:ApplicationIcon(?:Resource)?|C(?:DROMIcon(?:Resource)?|o(?:mponent(?:Icon|Version)|ntrol(?:PanelIcon|StripModuleIcon)))|D(?:eskAccessoryIcon(?:Resource)?|ocumentIcon(?:Resource)?)|E(?:ditionFileIcon(?:Resource)?|xtensionIcon(?:Resource)?)|F(?:ileServerIcon(?:Resource)?|loppyIcon|o(?:lderIcon(?:Resource)?|nt(?:Icon|ScalerIcon)))|HardDiskIcon(?:Resource)?|IDiskIcon|KCItemAttr|MoverObjectIcon(?:Resource)?|NetworkIcon|P(?:CCardIcon|asswordKCItemClass|referencesIcon(?:Resource)?)|QueryDocumentIcon(?:Resource)?|R(?:AMDiskIcon(?:Resource)?|emovableMediaIcon)|S(?:haredLibaryIcon|tationeryIcon(?:Resource)?|uitcaseIcon(?:Resource)?)|URLIcon|W(?:ORMIcon|indowIcon))))|t(?:AE(?:TE|UT)|DebugOption|Power(?:Info|Level)|SelectedText|WakeOnNetInfo))|lyphCollection(?:Adobe(?:CNS1|GB1|Japan(?:1|2)|Korea1)|GID|Unspecified)|r(?:aphicEQParam_NumberOfBands|idIcon|oup(?:I(?:D2Name|con)|Name2ID))|uestUserIcon)|H(?:ALOutputParam_Volume|FS(?:A(?:llocationFileID|ttribute(?:DataFileID|sFileID)|utoCandidate(?:Bit|Mask))|B(?:adBlockFileID|inaryCompare|o(?:gusExtentFileID|otVolumeInconsistent(?:Bit|Mask)))|C(?:a(?:seFolding|talog(?:FileID|KeyM(?:aximumLength|inimumLength)|NodeIDsReused(?:Bit|Mask)))|ontentProtection(?:Bit|Mask))|DoNotFastDevPin(?:Bit|Mask)|Extent(?:Density|KeyMaximumLength|sFileID)|F(?:astDev(?:Candidate(?:Bit|Mask)|Pinned(?:Bit|Mask))|i(?:le(?:Locked(?:Bit|Mask)|Record|ThreadRecord)|rstUserCatalogNodeID)|older(?:Record|ThreadRecord))|Has(?:Attributes(?:Bit|Mask)|ChildLink(?:Bit|Mask)|DateAdded(?:Bit|Mask)|FolderCount(?:Bit|Mask)|LinkChain(?:Bit|Mask)|Security(?:Bit|Mask))|JMountVersion|M(?:DBAttributesMask|ax(?:AttrNameLen|FileNameChars|VolumeNameChars))|Plus(?:Attr(?:Extents|ForkData|InlineData|MinNodeSize)|C(?:atalog(?:KeyM(?:aximumLength|inimumLength)|MinNodeSize)|reator)|Extent(?:Density|KeyMaximumLength|MinNodeSize)|F(?:ile(?:Record|ThreadRecord)|older(?:Record|ThreadRecord))|M(?:axFileNameChars|ountVersion)|SigWord|Version)|R(?:epairCatalogFileID|oot(?:FolderID|ParentID))|S(?:igWord|tartupFileID)|ThreadExists(?:Bit|Mask)|UnusedNode(?:Fix(?:Bit|Mask)|sFixDate)|Volume(?:HardwareLock(?:Bit|Mask)|Inconsistent(?:Bit|Mask)|Journaled(?:Bit|Mask)|NoCacheRequired(?:Bit|Mask)|S(?:oftwareLock(?:Bit|Mask)|paredBlocks(?:Bit|Mask))|Unmounted(?:Bit|Mask))|X(?:SigWord|Version))|I(?:ArchiveDecod(?:eSuperclassForUnregisteredObjects|ingForEditor)|C(?:lassOptionSingleton|o(?:m(?:boBox(?:Auto(?:CompletionAttribute|DisclosureAttribute|S(?:izeListAttribute|ortAttribute))|DisclosurePart|EditTextPart|List(?:Pixel(?:HeightTag|WidthTag)|Tag)|N(?:oAttributes|umVisibleItemsTag)|StandardAttributes)|mand(?:A(?:bout|ppHelp|rrangeInFront)|BringAllToFront|C(?:ancel|h(?:angeSpelling|eckSpelling(?:AsYouType)?)|l(?:ear|ose(?:All|File)?)|opy|u(?:stomizeToolbar|t)|ycleToolbarMode(?:Larger|Smaller))|From(?:Control|Menu|Window)|Hide(?:Others|Toolbar)?|IgnoreSpelling|LearnWord|M(?:aximize(?:All|Window)|inimize(?:All|Window))|New|O(?:K|pen|ther)|P(?:a(?:geSetup|ste)|r(?:eferences|int))|Quit(?:And(?:DiscardWindows|KeepWindows))?|R(?:e(?:do|vert)|otate(?:FloatingWindows(?:Backward|Forward)|Windows(?:Backward|Forward)))|S(?:ave(?:As)?|elect(?:All|Window)|how(?:All|CharacterPalette|HideFontPanel|SpellingPanel|Toolbar)|tartDictation)|Toggle(?:AllToolbars|FullScreen|Toolbar)|Undo|WindowList(?:Separator|Terminator)|ZoomWindow))|ordSpace(?:72DPIGlobal|ScreenPixel|View|Window)))|D(?:B(?:a(?:d(?:Log(?:PhysValuesErr|icalM(?:aximumErr|inimumErr))|ParameterErr)|seError)|ufferTooSmallErr)|DeviceNotReady|EndOfDescriptorErr|In(?:compatibleReportErr|v(?:alid(?:PreparsedDataErr|R(?:angePageErr|eport(?:LengthErr|TypeErr)))|erted(?:LogicalRangeErr|PhysicalRangeErr|UsageRangeErr)))|N(?:ot(?:EnoughMemoryErr|ValueArrayErr)|ull(?:PointerErr|StateErr))|Report(?:CountZeroErr|IDZeroErr|SizeZeroErr)|Success|U(?:nmatched(?:DesignatorRangeErr|StringRangeErr|UsageRangeErr)|sage(?:NotFoundErr|PageZeroErr))|V(?:alueOutOfRangeErr|ersionIncompatibleErr)|elegate(?:A(?:fter|ll)|Before))|HotKeyModeAll(?:Disabled(?:ExceptUniversalAccess)?|Enabled)|ImageView(?:AutoTransform(?:None|OnD(?:eactivate|isable))|ImageTag)|Layout(?:Bind(?:Bottom|Left|M(?:ax|in)|None|Right|Top)|InfoVersionZero|Position(?:Bottom|Center|Left|M(?:ax|in)|None|Right|Top)|ScaleAbsolute)|M(?:enu(?:AppendItem|CenterDirection|DismissedBy(?:A(?:ctivationChange|ppSwitch)|CancelMenuTracking|FocusChange|KeyEvent|Mouse(?:Down|Up)|Selection|Timeout|UserCancel)|LeftDirection|RightDirection)|odalClick(?:A(?:llowEvent|nnounce)|IsModal|RaiseWindow))|S(?:crollView(?:Options(?:AllowGrow|DisableSmoothScrolling|FillGrowArea|HorizScroll|VertScroll)|Page(?:Down|Left|Right|Up)|ScrollTo(?:Bottom|Left|Right|Top)|ValidOptions)|e(?:archField(?:Attributes(?:Cancel|SearchIcon)|NoAttributes)|gment(?:Behavior(?:Momentary|Radio|Sticky|Toggles)|NoAttributes|SendCmdToUserFocus|edViewKind))|hape(?:Enumerate(?:Init|Rect|Terminate)|ParseFrom(?:Bottom(?:Right)?|Left|Right|Top(?:Left)?)))|T(?:heme(?:F(?:ocusRing(?:Above|Below|Only)|rame(?:ListBox|TextField(?:Round(?:Mini|Small)?|Square)))|Gro(?:upBoxKind(?:Primary(?:Opaque)?|Secondary(?:Opaque)?)|wBox(?:KindNo(?:ne|rmal)|Size(?:Normal|Small)))|HeaderKind(?:List|Window)|Menu(?:DrawInfoVersion(?:One|Zero)|TitleDrawCondensed)|Orientation(?:Inverted|Normal)|S(?:egment(?:Adornment(?:Focus|LeadingSeparator|None|TrailingSeparator)|Kind(?:Inset|Normal|Textured)|Position(?:First|Last|Middle|Only)|Size(?:Mini|Normal|Small))|plitterAdornment(?:Metal|None))|T(?:ab(?:Adornment(?:Focus|LeadingSeparator|None|TrailingSeparator)|KindNormal|P(?:aneAdornmentNormal|osition(?:First|Last|Middle|Only))|Size(?:Mini|Normal|Small))|ext(?:BoxOption(?:DontClip|Engraved|None|StronglyVertical)|HorizontalFlush(?:Center|Default|Left|Right)|InfoVersion(?:One|Zero)|Truncation(?:Default|End|Middle|None)|VerticalFlush(?:Bottom|Center|Default|Top))))|oolbar(?:AutoSavesConfig|CommandPressAction|Display(?:Mode(?:Default|Icon(?:AndLabel|Only)|LabelOnly)|Size(?:Default|Normal|Small))|I(?:sConfigurable|tem(?:A(?:llowDuplicates|nchoredLeft)|CantBeRemoved|Disabled|IsSeparator|LabelDisabled|MutableAttrs|NoAttributes|Se(?:lected|ndCmdToUserFocus)|ValidAttrs))|NoAttributes|V(?:alidAttrs|iewDrawBackgroundTag))|ransform(?:Disabled|None|Selected))|View(?:A(?:llowsSubviews|ttribute(?:IsFieldEditor|SendCommandToUserFocus)|utoToggles)|C(?:lickableMetaPart|ontent(?:AlertIconType|CGImageRef|I(?:con(?:Ref|SuiteRef|TypeAndCreator)|mage(?:File|Resource))|MetaPart|N(?:SImage|one)|TextOnly))|D(?:isabledPart|oesNot(?:Draw|UseSpecialParts))|EntireView|F(?:eature(?:A(?:llowsSubviews|utoToggles)|DoesNot(?:Draw|UseSpecialParts)|GetsFocusOnClick|I(?:dlesWithTimer|gnoresClicks|nvertsUpDownValueMeaning|sOpaque)|Supports(?:Ghosting|LiveFeedback|RadioBehavior))|ocus(?:N(?:extPart|oPart)|OnAnyControl|PrevPart|Traditionally|WithoutWrapping))|GetsFocusOnClick|I(?:dlesWithTimer|gnoresClicks|n(?:activePart|dicatorPart|vertsUpDownValueMeaning)|sOpaque)|KindSignatureApple|NoPart|O(?:ffscreenImageUseWindowBackingResolution|paqueMetaPart)|S(?:endCommandToUserFocus|tructureMetaPart|upports(?:Ghosting|LiveFeedback|RadioBehavior))|ValidFeaturesForPanther|ZOrder(?:Above|Below))|Window(?:B(?:ackingLocation(?:Default|MainMemory|VideoMemory)|ehavior(?:Stationary|Transient)|it(?:A(?:syncDrag|uto(?:Calibration|ViewDragTracking))|C(?:anBeVisibleWithoutLogin|loseBox|o(?:llapseBox|mpositing))|DoesNot(?:Cycle|Hide)|F(?:rameworkScaled|ullScreen(?:Auxiliary|Primary))|Hi(?:deOn(?:FullScreen|Suspend)|ghResolutionCapable)|I(?:gnoreClicks|nWindowMenu)|LiveResize|No(?:Activates|Constrain|Shadow|T(?:exturedContentSeparator|itleBar)|Updates)|OpaqueForEvents|R(?:esizable|oundBottomBarCorners)|S(?:ideTitlebar|tandardHandler)|T(?:extured(?:SquareCorners)?|oolbarButton)|UnifiedTitleAndToolbar|ZoomBox))|CanJoinAllSpaces|D(?:epth(?:32Bit|64Bit|Float|Invalid)|ragPart)|ExposeHidden|IgnoreObscuringWindows|M(?:enu(?:Creator|WindowTag)|oveToActiveSpace)|S(?:caleMode(?:FrameworkScaled|Magnified|Unscaled)|haring(?:None|Read(?:Only|Write)))|Title(?:BarPart|ProxyIconPart)|VisibleInAllSpaces))|M(?:AbsoluteCenterAligned|Bottom(?:LeftCorner|RightCorner|Side)|C(?:FString(?:Content|LocalizedContent)|ontent(?:NotProvided(?:DontPropagate)?|Provided))|D(?:efaultSide|isposeContent)|H(?:elpMenuID|ideTag(?:Fade|Immediately))|I(?:llegalContentForMinimumState|nside(?:Bottom(?:CenterAligned|LeftCorner|RightCorner)|LeftCenterAligned|RightCenterAligned|Top(?:CenterAligned|LeftCorner|RightCorner)))|Left(?:BottomCorner|Side|TopCorner)|M(?:aximumContentIndex|inimumContentIndex)|NoContent|Outside(?:Bottom(?:CenterAligned|LeftAligned|RightAligned|ScriptAligned)|Left(?:BottomAligned|CenterAligned|TopAligned)|Right(?:BottomAligned|CenterAligned|TopAligned)|Top(?:CenterAligned|LeftAligned|RightAligned|ScriptAligned))|PascalStrContent|Right(?:BottomCorner|Side|TopCorner)|S(?:tr(?:ResContent|ingResContent)|upplyContent)|T(?:EHandleContent|extResContent|op(?:LeftCorner|RightCorner|Side)))|TTPServerIcon|a(?:lfWidth(?:CJKRomanSelector|IdeographsSelector|TextSelector)|n(?:dle(?:IsResource(?:Bit|Mask)|Locked(?:Bit|Mask)|Purgeable(?:Bit|Mask))|jaToHangul(?:Alt(?:OneSelector|T(?:hreeSelector|woSelector))|Selector))|rd(?:LinkFileType|wareCursor(?:DescriptorM(?:ajorVersion|inorVersion)|InfoM(?:ajorVersion|inorVersion)))|s(?:B(?:eenInited|undle)|CustomIcon|NoINITs))|e(?:brew(?:FigureSpaceVariant|StandardVariant)|lp(?:CharCode|DialogItem|Folder(?:Icon|Type)|Icon(?:Resource)?|TagEventHandlerTag|WindowClass))|i(?:deDiacriticsSelector|erarchicalFontMenuOption|gh(?:LevelEvent|ShelfParam_(?:CutOffFrequency|Gain))|nt(?:Advanced|Basic|Hidden)|passParam_(?:CutoffFrequency|Resonance)|raganaToKatakanaSelector|storicalLigaturesO(?:ffSelector|nSelector))|o(?:joCharactersSelector|meCharCode|rizontalConstraint)|uge(?:1BitMask|32BitData|4BitData|8Bit(?:Data|Mask))|yphen(?:To(?:EnDashO(?:ffSelector|nSelector)|MinusO(?:ffSelector|nSelector))|sToEmDashO(?:ffSelector|nSelector)))|I(?:BCarbonRuntime(?:CantFind(?:NibFile|Object)|ObjectNotOfRequestedType)|C(?:Attr(?:Locked(?:Bit|Mask)|NoChange|Volatile(?:Bit|Mask))|C(?:omponent(?:InterfaceVersion(?:0|1|2|3|4)?|Version)|reator)|EditPreferenceEvent(?:Class)?|File(?:SpecHeaderSize|Type)|Map(?:Binary(?:Bit|Mask)|DataFork(?:Bit|Mask)|FixedLength|Not(?:Incoming(?:Bit|Mask)|Outgoing(?:Bit|Mask))|Post(?:Bit|Mask)|ResourceFork(?:Bit|Mask))|N(?:ilProfileID|oUserInteraction(?:Bit|Mask)|umVersion)|Services(?:TCP(?:Bit|Mask)|UDP(?:Bit|Mask)))|MJaTypingMethod(?:Kana|Property|Roman)|O(?:A(?:nalogS(?:etupExpected|ignalLevel_(?:07(?:00_0(?:000|300)|14_0286)|1000_0400))|sync(?:C(?:allout(?:Count|FuncIndex|RefconIndex)|ompletionNotificationType)|Reserved(?:Count|Index)))|B(?:itsPerColorComponent(?:1(?:0|2|6)|6|8|NotSupported)|uiltinPanelPowerAttribute)|C(?:LUTPixels|SyncDisable|apturedAttribute|lamshellStateAttribute|o(?:lorimetry(?:AdobeRGB|BT(?:2(?:020|100)|601|709)|DCIP3|N(?:ativeRGB|otSupported)|WGRGB|sRGB|xvYCC)|nnect(?:MethodVarOutputSize|ion(?:BuiltIn|StereoSync))|pyback(?:Cache|InnerCache))|ursorControlAttribute)|D(?:PEvent(?:AutomatedTestRequest|ContentProtection|ForceRetrain|Idle|MCCS|RemoteControlCommandPending|S(?:inkSpecific|tart))|SCBlockPredEnable|e(?:f(?:ault(?:Cache|MemoryType)|erCLUTSetAttribute)|tailedTimingValid)|i(?:gitalSignal|splay(?:ColorMode|Dither(?:All|D(?:efault|isable)|FrameRateControl|RGBShift|Spatial|Temporal|YCbCr4(?:22Shift|44Shift))|ModeID(?:BootProgrammable|ReservedBase)|NeedsCEAUnderscan|PowerState(?:MinUsable|O(?:ff|n))|RGBColorComponentBits(?:1(?:0|2|4|6)|6|8|Unknown)|YCbCr4(?:22ColorComponentBits(?:1(?:0|2|4|6)|6|8|Unknown)|44ColorComponentBits(?:1(?:0|2|4|6)|6|8|Unknown))))|riverPowerAttribute|ynamicRange(?:Dolby(?:NormalMode|TunnelMode)|HDR10|NotSupported|SDR|TraditionalGammaHDR))|F(?:B(?:AVSignalType(?:D(?:P|VI)|HDMI|Unknown|VGA)|B(?:itRate(?:HBR(?:2)?|RBR)|lueGammaScaleAttribute)|C(?:hangedInterruptType|onnectInterruptType)|Display(?:Port(?:InterruptType|LinkChangeInterruptType|TrainingAttribute)|State(?:_(?:AlreadyActive|Mask|PipelineBlack|RestoredProfile))?)|FrameInterruptType|GreenGammaScaleAttribute|H(?:BLInterruptType|D(?:CPLimit_(?:AllowAll|NoHDCP(?:1x|20Type(?:0|1)))|RMetaDataAttribute))|Li(?:mitHDCP(?:Attribute|StateAttribute)|nk(?:Downspread(?:Max|None)|PreEmphasisLevel(?:0|1|2|3)|Scrambler(?:Alternate|Normal)|VoltageLevel(?:0|1|2|3)))|MCCSInterruptType|NS_(?:D(?:i(?:m|splayState(?:Mask|Shift))|oze)|Generation(?:Mask|Shift)|MessageMask|Rendezvous|Sleep|UnDim|Wake)|O(?:fflineInterruptType|nlineInterruptType)|RedGammaScaleAttribute|S(?:erverConnectType|haredConnectType|top|ystemAperture)|UserRequestProbe|V(?:BLInterruptType|ariableRefreshRate)|WakeInterruptType)|ixedCLUTPixels)|GDiagnose(?:ConnectType|GTraceType)|H(?:SyncDisable|ardwareCursorAttribute|ibernatePreview(?:Active|Updates))|In(?:hibitCache|ter(?:estCallout(?:Count|FuncIndex|RefconIndex|ServiceIndex)|lacedCEATiming))|KitNotication(?:MsgSizeMask|Type(?:Mask|SizeAdjShift))|M(?:a(?:p(?:Anywhere|C(?:ache(?:Mask|Shift)|opyback(?:Cache|InnerCache))|DefaultCache|InhibitCache|Overwrite|P(?:osted(?:CombinedReordered|Reordered|Write)|refault)|Re(?:a(?:dOnly|lTimeCache)|ference)|Static|U(?:nique|serOptionsMask)|Write(?:CombineCache|ThruCache))|tchingCallout(?:Count|FuncIndex|RefconIndex)|xPixelBits)|irror(?:Attribute|Default(?:Attribute)?|Forced|HWClipped|Is(?:Mirrored|Primary))|ono(?:DirectPixels|InverseDirectPixels))|N(?:TSCTiming|oSeparateSyncControl)|P(?:ALTiming|ixelEncoding(?:NotSupported|RGB444|YCbCr4(?:2(?:0|2)|44))|o(?:sted(?:CombinedReordered|Reordered|Write)|wer(?:Attribute|StateAttribute)))|R(?:GB(?:DirectPixels|Signed(?:DirectPixels|FloatingPointPixels))|ange(?:BitsPerColorComponent(?:1(?:0|2|6)|6|8|NotSupported)|Colorimetry(?:AdobeRGB|BT(?:2(?:020|100)|601|709)|DCIP3|N(?:ativeRGB|otSupported)|WGRGB|sRGB|xvYCC)|DynamicRange(?:Dolby(?:NormalMode|TunnelMode)|HDR10|NotSupported|SDR|TraditionalGammaHDR)|PixelEncoding(?:NotSupported|RGB444|YCbCr4(?:2(?:0|2)|44))|Supports(?:CompositeSync|InterlacedCEATiming(?:WithConfirm)?|S(?:eparateSyncs|ignal_(?:07(?:00_0(?:000|300)|14_0286)|1000_0400)|yncOnGreen)|VSyncSerration))|e(?:alTimeCache|gistryIterate(?:Parents|Recursively)))|S(?:cal(?:e(?:Can(?:BorderInsetOnly|DownSamplePixels|Rotate|S(?:caleInterlaced|upportInset)|UpSamplePixels)|Invert(?:X|Y)|Rotate(?:0|180|270|90|Flags)|S(?:tretch(?:Only|ToFit)|wapAxes))|ingInfoValid)|ervice(?:InteractionAllowed|M(?:atchedNotificationType|essageNotificationType)|PublishNotificationType|TerminatedNotificationType)|urface(?:Co(?:mponent(?:Name(?:Alpha|Blue|Chroma(?:Blue|Red)|Green|Luma|Red|Unknown)|Range(?:FullRange|Unknown|VideoRange|WideRange)|Type(?:Float|SignedInteger|Un(?:known|signedInteger)))|pyback(?:Cache|InnerCache))|DefaultCache|InhibitCache|Lock(?:AvoidSync|ReadOnly)|Map(?:C(?:acheShift|opyback(?:Cache|InnerCache))|DefaultCache|InhibitCache|Write(?:CombineCache|ThruCache))|Purgeable(?:Empty|KeepCurrent|NonVolatile|Volatile)|Subsampling(?:4(?:11|2(?:0|2))|None|Unknown)|Write(?:CombineCache|ThruCache))|y(?:nc(?:On(?:Blue|Green|Red)|PositivePolarity)|stemPowerAttribute))|T(?:iming(?:ID(?:Apple(?:NTSC_(?:FF(?:conv)?|ST(?:conv)?)|PAL_(?:FF(?:conv)?|ST(?:conv)?)|_(?:0x0_0hz_Offline|1(?:024x768_75hz|152x870_75hz)|5(?:12x384_60hz|60x384_60hz)|640x(?:4(?:00_67hz|80_67hz)|8(?:18_75hz|70_75hz))|832x624_75hz|FixedRateLCD))|FilmRate_48hz|GTF_640x480_120hz|Invalid|S(?:MPTE240M_60hz|ony_1(?:600x1024_76hz|920x1(?:080_(?:60hz|72hz)|200_76hz)))|VESA_(?:1(?:024x768_(?:60hz|7(?:0hz|5hz)|85hz)|152x864_75hz|280x(?:1024_(?:60hz|75hz|85hz)|960_(?:60hz|75hz|85hz))|360x768_60hz|600x1200_(?:6(?:0hz|5hz)|7(?:0hz|5hz)|8(?:0hz|5hz))|792x1344_(?:60hz|75hz)|856x1392_(?:60hz|75hz)|920x1440_(?:60hz|75hz))|640x480_(?:60hz|7(?:2hz|5hz)|85hz)|8(?:00x600_(?:56hz|60hz|7(?:2hz|5hz)|85hz)|48x480_60hz)))|RangeV(?:1|2))|riStateSyncs)|V(?:RAMSaveAttribute|SyncDisable)|W(?:SAA_(?:Accelerated|D(?:efer(?:End|Start)|riverOpen)|From_Accelerated|Hibernate|NonConsoleDevice|Reserved|S(?:leep|tateMask)|T(?:o_Accelerated|ransactional)|Unaccelerated)|indowServerActiveAttribute|rite(?:CombineCache|ThruCache)))|PFileServerIcon|S(?:OLatin(?:1(?:MusicCDVariant|StandardVariant)|Arabic(?:ExplicitOrderVariant|ImplicitOrderVariant|VisualOrderVariant)|Hebrew(?:ExplicitOrderVariant|ImplicitOrderVariant|VisualOrderVariant))|SDownloadsFolderType|p(?:BufferToSmallErr|Device(?:ActiveErr|InactiveErr)|Element(?:InListErr|NotInListErr)|InternalErr|ListBusyErr|System(?:ActiveErr|InactiveErr|ListErr)))|con(?:DialogItem|FamilyType|Services(?:1(?:024PixelDataARGB|28PixelDataARGB|6PixelDataARGB)|256PixelDataARGB|32PixelDataARGB|48PixelDataARGB|512PixelDataARGB|CatalogInfoMask|No(?:BadgeFlag|rmalUsageFlag)|UpdateIfNeededFlag))|d(?:eographic(?:Alt(?:F(?:iveSelector|ourSelector)|OneSelector|T(?:hreeSelector|woSelector)|ernativesType)|SpacingType)|leKCEvent(?:Mask)?)|ll(?:egal(?:ClockValueErr|InstructionException)|uminatedCapsSelector)|mmediate|n(?:DeferredTaskMask|NestedInterruptMask|SecondaryIntHandlerMask|UseErr|VBLTaskMask|dexFilesFolderType|equalityLigaturesO(?:ffSelector|nSelector)|feriorsSelector|itialCaps(?:AndSmallCapsSelector|Selector)|kInputMethodClass|putM(?:anagersFolderType|ethodsFolderType)|s(?:ertHierarchicalMenu|t(?:aller(?:LogsFolderType|ReceiptsFolderType)|ru(?:ctionBreakpointException|mentType_(?:A(?:UPreset|udiofile)|DLSPreset|EXS24|SF2Preset))))|te(?:gerException|rn(?:ation(?:ResourcesIcon|al(?:ResourcesIcon|SymbolsSelector))|et(?:EventClass|Folder(?:Icon|Type)|Location(?:A(?:FP|pple(?:ShareIcon|Talk(?:ZoneIcon)?))|Creator|F(?:TP(?:Icon)?|ile(?:Icon)?)|Generic(?:Icon)?|HTTP(?:Icon)?|Mail(?:Icon)?|N(?:NTP|SL(?:NeighborhoodIcon)?|ewsIcon))|P(?:asswordKCItemClass|lugInFolder(?:Icon|Type))|S(?:earchSitesFolder(?:Icon|Type)|itesFolderType))))|v(?:alid(?:CSClientErr|DeviceNumber|Font(?:Family)?|Generation|RegEntryErr)|ert(?:Highlighting|ed(?:BoxAnnotationSelector|CircleAnnotationSelector|RoundedBoxAnnotationSelector)|ingEncod(?:edPixel|ing(?:Shift)?))|isibleKCItemAttr))|s(?:Alias|Invisible|OnDesk|S(?:hared|tationery)|suer(?:KCItemAttr|URLKCItemAttr))|t(?:alicCJKRomanType|em(?:DisableBit|List)))|J(?:I(?:Journal(?:InFSMask|NeedInitMask|OnOtherDeviceMask)|S(?:19(?:78CharactersSelector|83CharactersSelector|90CharactersSelector)|2004CharactersSelector))|S(?:ClassAttributeNo(?:AutomaticPrototype|ne)|PropertyAttribute(?:Dont(?:Delete|Enum)|None|ReadOnly)|Type(?:Boolean|Nu(?:ll|mber)|Object|String|Undefined|dArrayType(?:ArrayBuffer|Float(?:32Array|64Array)|Int(?:16Array|32Array|8Array)|None|Uint(?:16Array|32Array|8(?:Array|ClampedArray)))))|UST(?:CurrentVersion|KashidaPriority|LetterPriority|NullPriority|Override(?:Limits|Priority|Unlimited)|Priority(?:Count|Mask)|S(?:pacePriority|tandardFormat)|Tag|Unlimited|noGlyphcode|pc(?:ConditionalAddAction|D(?:ecompositionAction|uctilityAction)|Glyph(?:RepeatAddAction|StretchAction)|UnconditionalAddAction))|apanese(?:BasicVariant|PostScript(?:PrintVariant|ScrnVariant)|St(?:andardVariant|dNoVerticalsVariant)|VertAtKuPlusTenVariant))|K(?:C(?:AuthType(?:D(?:PA|efault)|HTTPDigest|MSN|NTLM|RPA)|ProtocolType(?:A(?:FP|ppleTalk)|FTP(?:Account)?|HTTP|I(?:MAP|RC)|LDAP|NNTP|POP3|S(?:MTP|OCKS)|Telnet))|ER(?:N(?:C(?:rossStream(?:ResetNote)?|urrentVersion)|FormatMask|IndexArray|Line(?:EndKerning|Start)|No(?:CrossKerning|StakeNote|t(?:Applied|esRequested))|OrderedList|ResetCrossStream|S(?:impleArray|tateTable)|Tag|UnusedBits|V(?:ariation|ertical))|X(?:Action(?:OffsetMask|Type(?:AnchorPoints|Co(?:ntrolPoints|ordinates)|Mask))|C(?:ontrolPoint|rossStream(?:ResetNote)?|urrentVersion)|Descending|FormatMask|IndexArray|Line(?:EndKerning|Start)|No(?:CrossKerning|StakeNote|t(?:Applied|esRequested))|OrderedList|ResetCrossStream|S(?:impleArray|tateTable)|Tag|Unused(?:Bits|Flags)|V(?:a(?:luesAreLong|riation)|ertical)))|L(?:GroupIdentifier|I(?:con|dentifier)|K(?:CHR(?:Data|Kind|uchrKind)|ind)|L(?:anguageCode|ocalizedName)|Name|USKeyboard|uchr(?:Data|Kind))|a(?:na(?:SpacingType|ToRomanizationSelector)|takanaToHiraganaSelector)|e(?:epArrangedIcon|rnelExtensionsFolderType|y(?:board(?:ANSI|I(?:SO|nputMethodClass)|JIS|Layout(?:Icon|sFolderType)|Unknown)|chain(?:FolderType|ListChangedKCEvent))))|L(?:A(?:AllMorphemes|DefaultEdge|EndOfSourceTextMask|FreeEdge|IncompleteEdge|MorphemesArrayVersion|Speech(?:BagyouGodan|Chimei(?:Setsubigo)?|Do(?:kuritsugo|ushi)|Fu(?:kushi|tsuuMeishi)|G(?:agyouGodan|odanDoushi)|IchidanDoushi|J(?:inmei(?:Mei|Se(?:i|tsubigo))?|o(?:doushi|shi))|K(?:a(?:gyouGodan|henDoushi|ndoushi|tsuyou(?:Gokan|Katei|M(?:ask|eirei|izen)|Ren(?:tai|you)|Syuushi))|ei(?:douMeishi|you(?:doushi|shi))|igou|oyuuMeishi|uten)|M(?:agyouGodan|e(?:diumClassMask|ishi)|uhinshi)|NagyouGodan|R(?:agyouGodan|entaishi|oughClassMask)|S(?:a(?:gyouGodan|hen(?:Doushi|Meishi))|e(?:iku|t(?:su(?:bi(?:Chimei|go)|zokushi)|tougo))|oshikimei(?:Setsubigo)?|trictClassMask|uu(?:jiSet(?:subigo|tougo)|shi))|T(?:a(?:gyouGodan|nkanji)|outen)|WagyouGodan|ZahenDoushi))|CAR(?:C(?:tlPointFormat|urrentVersion)|LinearFormat|Tag)|S(?:A(?:ccept(?:AllowLoginUI|Default)|pp(?:DoesNot(?:ClaimTypeErr|SupportSchemeWarning)|InTrashErr|licationNotFoundErr)|ttributeNot(?:FoundErr|SettableErr))|CannotSetInfoErr|Data(?:Err|TooOldErr|UnavailableErr)|ExecutableIncorrectFormat|GarbageCollectionUnsupportedErr|Incompatible(?:ApplicationVersionErr|SystemVersionErr)|Launch(?:A(?:nd(?:DisplayErrors|Hide(?:Others)?|Print)|sync)|D(?:efaults|ont(?:AddToRecents|Switch))|InProgressErr|NewInstance)|MultipleSessionsNotSupportedErr|No(?:32BitEnvironmentErr|ClassicEnvironmentErr|ExecutableErr|LaunchPermissionErr|R(?:egistrationInfoErr|osettaEnvironmentErr)|t(?:AnApplicationErr|InitializedErr|RegisteredErr))|Roles(?:All|Editor|None|Shell|Viewer)|S(?:erverCommunicationErr|haredFileList(?:DoNotMountVolumes|NoUserInteraction))|Unknown(?:Creator|Err|Type(?:Err)?))|TAGCurrentVersion|a(?:belKCItemAttr|nguageTagType|rge(?:1BitMask|32BitData|4Bit(?:Data|IconSize)|8Bit(?:Data|IconSize|Mask)|IconSize)|st(?:DomainConstant|FeatureType|IOKitNotificationType|MagicBusyFiletype)|unch(?:ToGetTerminology|erItemsFolderType))|e(?:ft(?:ArrowCharCode|ToRight)|tterCaseType)|i(?:braryAssistantsFolderType|gaturesType|miterParam_(?:AttackTime|DecayTime|PreGain)|n(?:e(?:F(?:eedCharCode|inalSwashesO(?:ffSelector|nSelector))|InitialSwashesO(?:ffSelector|nSelector)|arPCMFormatFlag(?:Is(?:AlignedHigh|BigEndian|Float|Non(?:Interleaved|Mixable)|Packed|SignedInteger)|s(?:AreAllClear|SampleFraction(?:Mask|Shift))))|guisticRearrangement(?:O(?:ffSelector|nSelector)|Type))|stDef(?:ProcPtr|Standard(?:IconType|TextType)|UserProcType))|o(?:c(?:al(?:Domain|PPDDomain|e(?:A(?:llPartsMask|ndVariantNameMask)|Language(?:Mask|VariantMask)|NameMask|OperationVariantNameMask|Region(?:Mask|VariantMask)|Script(?:Mask|VariantMask)|s(?:BufferTooSmallErr|DefaultDisplayStatus|Folder(?:Icon|Type)|TableFormatErr)))|k(?:KCEvent(?:Mask)?|ed(?:BadgeIcon|Icon)))|g(?:osO(?:ffSelector|nSelector)|sFolderType)|w(?:PassParam_(?:CutoffFrequency|Resonance)|erCase(?:NumbersSelector|PetiteCapsSelector|SmallCapsSelector|Type))))|M(?:68kISA|D(?:Label(?:LocalDomain|UserDomain)|Query(?:AllowFSTranslation|ReverseSortOrderFlag|Synchronous|WantsUpdates))|IDI(?:DriversFolderType|I(?:DNotUnique|nvalid(?:Client|Port|UniqueID))|M(?:essageSendErr|sg(?:IOError|Object(?:Added|Removed)|PropertyChanged|Se(?:rialPortOwnerChanged|tupChanged)|ThruConnectionsChanged))|No(?:C(?:onnection|urrentSetup)|tPermitted)|Object(?:NotFound|Type_(?:De(?:stination|vice)|E(?:ntity|xternal(?:De(?:stination|vice)|Entity|Source))|Other|Source))|Se(?:rverStartErr|tupFormatErr)|Unknown(?:E(?:ndpoint|rror)|Property)|Wrong(?:EndpointType|PropertyType|Thread))|OR(?:T(?:C(?:o(?:ntextualType|ver(?:Descending|IgnoreVertical|TypeMask|Vertical))|urr(?:Insert(?:Before|Count(?:Mask|Shift)|KashidaLike)|JustTableCount(?:Mask|Shift)|entVersion))|DoInsertionsBefore|I(?:nsertion(?:Type|sCountMask)|sSplitVowelPiece)|Lig(?:FormOffset(?:Mask|Shift)|LastAction|StoreLigature|atureType)|Mark(?:Insert(?:Before|Count(?:Mask|Shift)|KashidaLike)|JustTableCount(?:Mask|Shift))|RearrangementType|SwashType|Tag|ra(?:CDx(?:A(?:B)?|BA)?|D(?:Cx(?:A(?:B)?|BA)?|x(?:A(?:B)?|BA)?)|NoAction|x(?:A(?:B)?|BA)))|X(?:C(?:over(?:Descending|IgnoreVertical|LogicalOrder|TypeMask|Vertical)|urrentVersion)|Tag))|P(?:A(?:ddressSpaceInfoVersion|llocate(?:1(?:024ByteAligned|6ByteAligned)|32ByteAligned|4096ByteAligned|8ByteAligned|AltiVecAligned|ClearMask|DefaultAligned|GloballyMask|InterlockAligned|MaxAlignment|No(?:CreateMask|GrowthMask)|ResidentMask|VM(?:PageAligned|XAligned))|nyRemoteContext|syncInterruptRemoteContext)|BlueBlockingErr|Cr(?:eateTask(?:NotDebuggableMask|SuspendedMask|TakesAllExceptionsMask|ValidOptionsMask)|iticalRegionInfoVersion)|DeletedErr|E(?:G4Object_(?:AAC_(?:L(?:C|TP)|Main|S(?:BR|SR|calable))|CELP|HVXC|TwinVQ)|ventInfoVersion)|HighLevelDebugger|I(?:n(?:sufficientResourcesErr|terruptRemoteContext|validIDErr)|terationEndErr)|LowLevelDebugger|M(?:axAllocSize|idLevelDebugger)|N(?:anokernelNeedsMemoryErr|o(?:ID|tificationInfoVersion))|OwningProcessRemoteContext|Pr(?:eserveTimerIDMask|ivilegedErr|ocess(?:CreatedErr|TerminatedErr))|QueueInfoVersion|SemaphoreInfoVersion|T(?:ask(?:AbortedErr|Blocked(?:Err)?|CreatedErr|InfoVersion|Propagate(?:Mask)?|R(?:e(?:ady|sume(?:Branch(?:Mask)?|Mask|Step(?:Mask)?))|unning)|St(?:ate(?:32BitMemoryException|FPU|Machine|Registers|TaskInfo|Vectors)|oppedErr))|ime(?:IsD(?:eltaMask|urationMask)|outErr)))|a(?:c(?:Arabic(?:AlBayanVariant|StandardVariant|T(?:huluthVariant|rueTypeVariant))|C(?:roatian(?:CurrencySignVariant|DefaultVariant|EuroSignVariant)|yrillic(?:CurrSign(?:StdVariant|UkrVariant)|DefaultVariant|EuroSignVariant))|Farsi(?:StandardVariant|TrueTypeVariant)|Greek(?:DefaultVariant|EuroSignVariant|NoEuroSignVariant)|He(?:brew(?:FigureSpaceVariant|StandardVariant)|lpVersion)|Icelandic(?:St(?:andardVariant|d(?:CurrSignVariant|DefaultVariant|EuroSignVariant))|T(?:T(?:CurrSignVariant|DefaultVariant|EuroSignVariant)|rueTypeVariant))|Japanese(?:BasicVariant|PostScript(?:PrintVariant|ScrnVariant)|St(?:andardVariant|dNoVerticalsVariant)|VertAtKuPlusTenVariant)|MemoryMaximumMemoryManagerBlockSize|OSReadMe(?:FolderIcon|sFolderType)|Roman(?:CurrencySignVariant|DefaultVariant|EuroSignVariant|Latin1(?:CroatianVariant|DefaultVariant|IcelandicVariant|RomanianVariant|StandardVariant|TurkishVariant)|StandardVariant|ian(?:CurrencySignVariant|DefaultVariant|EuroSignVariant))|VT100(?:CurrencySignVariant|DefaultVariant|EuroSignVariant)|hineNameStrID)|gic(?:BusyCreationDate|TemporaryItemsFolderType)|le|nagedItemsFolderType|t(?:h(?:SymbolsSelector|ematical(?:ExtrasType|GreekO(?:ffSelector|nSelector)))|rixMixerParam_(?:Enable|P(?:ost(?:AveragePower(?:Linear)?|PeakHoldLevel(?:Linear)?)|re(?:AveragePower(?:Linear)?|PeakHoldLevel(?:Linear)?))|Volume))|x(?:AsyncArgs|InputLengthOfAppleJapaneseEngine|K(?:anjiLengthInAppleJapaneseDictionary|eyLength)|YomiLengthInAppleJapaneseDictionary|imumBlocksIn4GB))|enu(?:A(?:ppleLogo(?:FilledGlyph|OutlineGlyph)|ttr(?:AutoDisable|CondenseSeparators|DoNot(?:CacheImage|UseUserCommandKeys)|ExcludesMarkColumn|Hidden|UsePencilGlyph))|BlankGlyph|C(?:GImageRefType|a(?:lcItemMsg|psLockGlyph)|heckmarkGlyph|learGlyph|o(?:lorIconType|mmandGlyph|nt(?:ext(?:Co(?:mmandIDSearch|ntextualMenu)|DontUpdate(?:Enabled|Icon|Key|Text)|Inspection|KeyMatching|Menu(?:Bar(?:Tracking)?|Enabling)|P(?:opUp(?:Tracking)?|ullDown)|Submenu|ualMenuGlyph)|rol(?:Glyph|ISOGlyph|Modifier))))|D(?:e(?:f(?:ClassID|ProcPtr)|lete(?:LeftGlyph|RightGlyph))|i(?:amondGlyph|sposeMsg)|own(?:ArrowGlyph|wardArrowDashedGlyph)|raw(?:ItemsMsg|Msg))|E(?:isuGlyph|jectGlyph|nterGlyph|scapeGlyph|vent(?:DontCheckSubmenus|IncludeDisabledItems|QueryOnly))|F(?:1(?:0Glyph|1Glyph|2Glyph|3Glyph|4Glyph|5Glyph|6Glyph|7Glyph|8Glyph|9Glyph|Glyph)|2Glyph|3Glyph|4Glyph|5Glyph|6Glyph|7Glyph|8Glyph|9Glyph|indItemMsg)|H(?:elpGlyph|iliteItemMsg)|I(?:con(?:Re(?:fType|sourceType)|SuiteType|Type)|nitMsg|tem(?:Attr(?:Auto(?:Disable|Repeat)|CustomDraw|D(?:isabled|ynamic)|Hidden|I(?:conDisabled|gnoreMeta|ncludeInCmdKeyMatching)|NotPreviousAlternate|S(?:e(?:ctionHeader|parator)|ubmenuParentChoosable)|U(?:pdateSingleItem|seVirtualKey))|Data(?:A(?:llDataVersion(?:One|T(?:hree|wo))|ttribute(?:dText|s))|C(?:FString|md(?:Key(?:Glyph|Modifiers)?|VirtualKey)|ommandID)|Enabled|Font(?:ID)?|I(?:con(?:Enabled|Handle|ID)|ndent)|Mark|Properties|Refcon|S(?:tyle|ubmenu(?:Handle|ID))|Text(?:Encoding)?)))|KanaGlyph|Left(?:Arrow(?:DashedGlyph|Glyph)|DoubleQuotesJapaneseGlyph)|N(?:o(?:CommandModifier|Icon|Modifiers|nmarkingReturnGlyph|rthwestArrowGlyph)|ullGlyph)|Option(?:Glyph|Modifier)|P(?:a(?:ge(?:DownGlyph|UpGlyph)|ragraphKoreanGlyph)|encilGlyph|o(?:pUpMsg|werGlyph)|ropertyPersistent)|R(?:eturn(?:Glyph|R2LGlyph)|ight(?:Arrow(?:DashedGlyph|Glyph)|DoubleQuotesJapaneseGlyph))|S(?:h(?:ift(?:Glyph|Modifier)|rinkIconType)|izeMsg|mallIconType|outheastArrowGlyph|paceGlyph|tdMenu(?:BarProc|Proc)|ystemIconSelectorType)|T(?:ab(?:LeftGlyph|RightGlyph)|hemeSavvyMsg|ra(?:ckingMode(?:Keyboard|Mouse)|demarkJapaneseGlyph))|UpArrow(?:DashedGlyph|Glyph))|i(?:crosecondScale|llisecondScale|ni(?:1BitMask|4BitData|8BitData))|o(?:d(?:DateKCItemAttr|al(?:DialogVariantCode|WindowClass)|em(?:OutOfMemory|PreferencesMissing|Script(?:Missing|sFolderType)))|nospaced(?:NumbersSelector|TextSelector)|u(?:nted(?:BadgeIcon|Folder(?:AliasType|Icon(?:Resource)?))|se(?:Params(?:ClickAndHold|DragInitiation|ProxyIcon|Sticky)|Tracking(?:ClientEvent|KeyModifiersChanged|Mouse(?:D(?:own|ragged)|E(?:ntered|xited)|Moved|Pressed|Released|Up)|ScrollWheel|TimedOut|UserCancelled)|UpOutOfSlop))|v(?:able(?:Alert(?:VariantCode|WindowClass)|Modal(?:DialogVariantCode|WindowClass))|ieDocumentsFolderType))|u(?:lti(?:ChannelMixerParam_(?:Enable|P(?:an|ost(?:AveragePower|PeakHoldLevel)|re(?:AveragePower|PeakHoldLevel))|Volume)|band(?:CompressorParam_(?:AttackTime|C(?:ompressionAmount(?:1|2|3|4)|rossover(?:1|2|3))|EQ(?:1|2|3|4)|Headroom(?:1|2|3|4)|InputAmplitude(?:1|2|3|4)|OutputAmplitude(?:1|2|3|4)|P(?:ostgain|regain)|ReleaseTime|Threshold(?:1|2|3|4))|Filter_(?:Bandwidth(?:1|2|3)|Center(?:Freq(?:1|2|3)|Gain(?:1|2|3))|High(?:F(?:ilterType|requency)|Gain)|Low(?:F(?:ilterType|requency)|Gain)))|processingFolderType)|sic(?:D(?:evice(?:MIDIEventSelect|P(?:aram_(?:ReverbVolume|Tuning|Volume)|r(?:epareInstrumentSelect|operty_(?:BankName|DualSchedulingMode|GroupOutputBus|Instrument(?:Count|N(?:ame|umber))|MIDIXMLNames|PartGroup|S(?:oundBank(?:Data|FS(?:Ref|Spec)|URL)|treamFromDisk|upportsStartStopNote)|UsesInternalReverb)))|R(?:ange|eleaseInstrumentSelect)|S(?:ampleFrameMask_(?:IsScheduled|SampleOffset)|t(?:artNoteSelect|opNoteSelect)|ysExSelect))|ocumentsFolderType)|EventType_(?:AUPreset|Extended(?:Control|Note|Tempo)|M(?:IDI(?:ChannelMessage|NoteMessage|RawData)|eta)|NULL|Parameter|User)|NoteEvent_U(?:nused|seGroupInstrument)|Sequence(?:File(?:Flags_(?:Default|EraseFile)|_(?:AnyType|MIDIType|iMelodyType))|LoadSMF_(?:ChannelsToTracks|PreserveTracks)|Type_(?:Beats|S(?:amples|econds))))))|N(?:LCCharactersSelector|S(?:L(?:68kContextNotSupported|B(?:ad(?:ClientInfoPtr|DataTypeErr|NetConnection|ProtocolTypeErr|ReferenceErr|ServiceTypeErr|URLSyntax)|ufferTooSmallForData)|CannotContinueLookup|ErrNullPtrError|In(?:itializationFailed|sufficient(?:OTVer|SysVer)|validPluginSpec)|N(?:o(?:C(?:arbonLib|ontextAvailable)|ElementsInList|PluginsFo(?:rSearch|und)|SupportForService|tI(?:mplementedYet|nitialized))|ull(?:ListPtr|NeighborhoodPtr))|PluginLoadFailed|RequestBufferAlreadyInList|S(?:chedulerError|earchAlreadyInProgress|omePluginsFailedToLoad)|UILibraryNotAvailable)|p(?:A(?:dd(?:PlayerFailedErr|ressInUseErr)|lready(?:AdvertisingErr|InitializedErr))|C(?:antBlockErr|onnectFailedErr|reateGroupFailedErr)|F(?:eatureNotImplementedErr|reeQExhaustedErr)|GameTerminatedErr|HostFailedErr|In(?:itializationFailedErr|valid(?:AddressErr|DefinitionErr|G(?:ameRefErr|roupIDErr)|P(?:arameterErr|layerIDErr|rotocol(?:ListErr|RefErr))))|JoinFailedErr|Me(?:mAllocationErr|ssageTooBigErr)|N(?:ameRequiredErr|o(?:GroupsErr|HostVolunteersErr|PlayersErr|tAdvertisingErr))|OT(?:NotPresentErr|VersionTooOldErr)|P(?:ipeFullErr|rotocolNotAvailableErr)|RemovePlayerFailedErr|SendFailedErr|T(?:imeoutErr|opologyNotSupportedErr)))|a(?:meLocked|nosecondScale|v(?:CustomControlMessageFailedErr|Invalid(?:CustomControlMessageErr|SystemConfigErr)|MissingKindStringErr|WrongDialog(?:ClassErr|StateErr)))|e(?:gativeKCItemAttr|twork(?:Domain|PPDDomain)|ut(?:er|ralScript)|verAuthenticate|w(?:DebugHeap|S(?:izeParameter|tyleHeap|uspend)|TimePitchParam_(?:EnablePeakLocking|Overlap|Pitch|Rate))|xt(?:Body|WindowGroup))|o(?:A(?:lternatesSelector|nnotationSelector)|ByteCode|C(?:JK(?:ItalicRomanSelector|SymbolAlternativesSelector)|ard(?:BusCISErr|E(?:nablersFoundErr|rr)|SevicesSocketsErr)|lientTableErr|o(?:mpatibleNameErr|nstraint))|En(?:ablerForCardErr|dingProsody)|F(?:ilesIcon|olderIcon|ractionsSelector)|I(?:OWindowRequestedErr|deographicAlternativesSelector)|More(?:I(?:nterruptSlotsErr|temsErr)|TimerClientsErr)|OrnamentsSelector|Process|RubyKanaSelector|S(?:peechInterrupt|tyl(?:eOptionsSelector|isticAlternatesSelector)|uchPowerSource)|T(?:hreadID|imeOut|rans(?:form|literationSelector))|UserAuthentication|WriteIcon|n(?:BreakingSpaceCharCode|FinalSwashesO(?:ffSelector|nSelector)|eKCStopOn)|rmalPositionSelector|t(?:Paged|ReadyErr|ZVCapableErr|eIcon))|u(?:llCharCode|m(?:AUNBandEQFilterTypes|ber(?:C(?:aseType|tlCTabEntries)|OfResponseFrequencies|SpacingType))))|O(?:CRInputMethodClass|PBD(?:C(?:ontrolPointFormat|urrentVersion)|DistanceFormat|Tag)|S(?:A(?:C(?:anGetSource|omponentType)|DontUsePhac|Error(?:A(?:pp|rgs)|BriefMessage|ExpectedType|Message|Number|OffendingObject|PartialResult|Range)|FileType|GenericScriptingComponentSubtype|Mode(?:A(?:lwaysInteract|ugmentContext)|C(?:an(?:Interact|tSwitchLayer)|ompileIntoContext)|D(?:isp(?:atchToDirectObject|layForHumans)|o(?:Record|nt(?:Define|GetDataForArguments|Reconnect|StoreParent)))|FullyQualifyDescriptors|N(?:everInteract|ull)|PreventGetSource)|N(?:oDispatch|ull(?:Mode|Script))|RecordedText|S(?:cript(?:BestType|Is(?:Modified|Type(?:CompiledScript|Script(?:Context|Value)))|ResourceType)|elect(?:AvailableDialect(?:CodeList|s)|Co(?:erce(?:FromDesc|ToDesc)|mp(?:ile(?:Execute)?|onentSpecificStart)|py(?:DisplayString|ID|S(?:cript|ourceString)))|D(?:isp(?:lay|ose)|o(?:Event|Script))|Execute(?:Event)?|Get(?:ActiveProc|C(?:reateProc|urrentDialect)|DialectInfo|ResumeDispatchProc|S(?:criptInfo|endProc|ource))|Load(?:Execute)?|MakeContext|S(?:cript(?:Error|ingComponentName)|et(?:ActiveProc|C(?:reateProc|urrentDialect)|DefaultTarget|ResumeDispatchProc|S(?:criptInfo|endProc))|t(?:artRecording|o(?:pRecording|re))))|u(?:ite|pports(?:AE(?:Coercion|Sending)|Co(?:mpiling|nvenience)|Dialects|EventHandling|GetSource|Recording)))|UseStandardDispatch|sync(?:CompleteMessageID|Ref(?:64(?:Count|Size)|Count|Size)))|IZ(?:CodeInSharedLibraries|DontOpenResourceFile|OpenWithReadPermission|dontAcceptRemoteEvents)|NotificationMessageID)|T(?:A(?:ccessErr|ddressBusyErr)|B(?:ad(?:AddressErr|ConfigurationErr|DataErr|FlagErr|NameErr|OptionErr|QLenErr|ReferenceErr|S(?:equenceErr|yncErr))|ufferOverflowErr)|C(?:anceledErr|lientNotInittedErr|onfigurationChangedErr)|DuplicateFoundErr|FlowErr|IndOutErr|LookErr|No(?:AddressErr|D(?:ataErr|isconnectErr)|Error|ReleaseErr|StructureTypeErr|UDErrErr|t(?:FoundErr|SupportedErr))|Out(?:OfMemoryErr|StateErr)|P(?:ort(?:HasDiedErr|LostConnection|WasEjectedErr)|ro(?:tocolErr|viderMismatchErr))|QFullErr|Res(?:AddressErr|QLenErr)|S(?:tateChangeErr|ysErrorErr)|UserRequestedErr)|ff(?:linePreflight_(?:NotRequired|Optional|Required)|set2Pos)|ld68kRTA|n(?:AppropriateDisk|SystemDisk|eByteCode)|p(?:aque(?:A(?:ddressSpaceID|nyID|reaID)|C(?:o(?:herenceID|nsoleID)|puID|riticalRegionID)|EventID|NotificationID|ProcessID|QueueID|SemaphoreID|T(?:askID|imerID))|en(?:D(?:oc(?:EditorsFolderType|FolderType|LibrariesFolderType|ShellPlugInsFolderType)|ropIconVariant)|FolderIcon(?:Resource)?|IconVariant)|tionUnicode)|r(?:Connections|dinalsSelector|namentSetsType)|therPluginFormat_(?:AU|Undefined|k(?:MAS|VST))|ut(?:OfResourceErr|putTextInUnicodeEncoding(?:Bit|Mask))|verla(?:ppingCharactersType|yWindowClass)|wne(?:dFolderIcon(?:Resource)?|r(?:I(?:D2Name|con)|Name2ID)))|P(?:CSTo(?:Device|PCS)|EF(?:AbsoluteExport|Co(?:deS(?:ection|ymbol)|nstantSection)|D(?:ataSymbol|ebugSection)|Ex(?:ceptionSection|ecDataSection|pSym(?:ClassShift|MaxNameOffset|NameOffsetMask))|FirstSectionHeaderOffset|Gl(?:obalShare|ueSymbol)|Hash(?:LengthShift|MaxLength|Slot(?:FirstKeyMask|Max(?:KeyIndex|SymbolCount)|SymCountShift)|ValueMask)|I(?:mpSym(?:ClassShift|MaxNameOffset|NameOffsetMask)|nitLibBeforeMask)|LoaderSection|P(?:ackedDataSection|kData(?:Block|Count5Mask|MaxCount5|OpcodeShift|Repeat(?:Block|Zero)?|VCount(?:EndMask|Mask|Shift)|Zero)|ro(?:cessShare|tectedShare))|Re(?:exportedImport|loc(?:B(?:asicOpcodeRange|ySect(?:C|D(?:WithSkip)?))|I(?:mportRun|ncrPosition(?:MaxOffset)?)|Lg(?:By(?:Import(?:MaxIndex)?|SectionSubopcode)|Repeat(?:Max(?:ChunkCount|RepeatCount))?|Set(?:OrBySection(?:MaxIndex)?|Sect(?:CSubopcode|DSubopcode)))|RunMaxRunLength|S(?:etPos(?:MaxOffset|ition)|m(?:By(?:Import|Section)|IndexMaxIndex|Repeat(?:Max(?:ChunkCount|RepeatCount))?|SetSect(?:C|D)))|TVector(?:12|8)|UndefinedOpcode|VTable8|WithSkipMax(?:RelocCount|SkipCount)))|T(?:OCSymbol|VectorSymbol|ag(?:1|2)|racebackSection)|Un(?:definedSymbol|packedDataSection)|Version|WeakImport(?:LibMask|SymMask))|M(?:AllocationFailure|Border(?:Double(?:Hairline|Thickline)|Single(?:Hairline|Thickline))|C(?:MYKColorSpaceModel|VMSymbolNotFound|ancel|loseFailed|overPage(?:After|Before|None)|reateMessageFailed)|D(?:ataFormatXML(?:Compressed|Default|Minimal)|e(?:leteSubTicketFailed|stination(?:F(?:ax|ile)|Invalid|Pr(?:eview|inter|ocessPDF))|vNColorSpaceModel)|o(?:cumentNotFound|ntSwitchPDEError)|uplex(?:No(?:Tumble|ne)|Tumble))|EditRequestFailed|F(?:eatureNotInstalled|ileOrDirOperationFailed|ontN(?:ameTooLong|otFound))|G(?:eneral(?:CGError|Error)|rayColorSpaceModel)|HideInlineItems|I(?:O(?:AttrNotAvailable|MSymbolNotFound)|n(?:ternalError|valid(?:Allocator|C(?:VMContext|alibrationTarget|onnection)|FileType|I(?:OMContext|ndex|tem)|Job(?:ID|Template)|Key|LookupSpec|Object|P(?:BMRef|DEContext|MContext|a(?:geFormat|per|rameter)|r(?:eset|int(?:Se(?:ssion|ttings)|er(?:Address|Info)?)))|Reply|S(?:tate|ubTicket)|T(?:icket|ype)|Value))|temIsLocked)|Job(?:Busy|Canceled|GetTicket(?:BadFormatError|ReadError)|ManagerAborted|NotFound|Stream(?:EndError|OpenFailed|ReadFailed))|Key(?:Not(?:Found|Unique)|OrValueNotFound)|La(?:ndscape|stErrorCodeToMakeMaintenanceOfThisListEasier|yout(?:BottomTop(?:LeftRight|RightLeft)|LeftRight(?:BottomTop|TopBottom)|RightLeft(?:BottomTop|TopBottom)|TopBottom(?:LeftRight|RightLeft)))|MessagingError|No(?:Default(?:Item|Printer|Settings)|Error|PrinterJobID|S(?:electedPrinters|uchEntry)|tImplemented)|O(?:bjectInUse|penFailed|utOfScope)|P(?:MSymbolNotFound|a(?:geToPaperMapping(?:None|ScaleToFit)|perType(?:Coated|Glossy|P(?:lain|remium)|T(?:Shirt|ransparency)|Unknown))|ermissionError|lugin(?:NotFound|RegisterationFailed)|ortrait|r(?:BrowserNoUI|int(?:AllPages|er(?:Idle|Processing|Stopped))))|Qu(?:ality(?:Best|Draft|Highest|InkSaver|Lowest|Normal|Photo)|eue(?:AlreadyExists|JobFailed|NotFound))|R(?:GBColorSpaceModel|e(?:ad(?:Failed|GotZeroData)|verse(?:Landscape|Portrait)))|S(?:caling(?:CenterOn(?:ImgArea|Paper)|Pin(?:Bottom(?:Left|Right)|Top(?:Left|Right)))|erver(?:A(?:lreadyRunning|ttributeRestricted)|CommunicationFailed|NotFound|Suspended)|how(?:DefaultInlineItems|Inline(?:Copies|Orientation|Pa(?:geRange(?:WithSelection)?|perSize)|Scale)|PageAttributesPDE)|implexTumble|t(?:atusFailed|ringConversionFailure)|ubTicketNotFound|yncRequestFailed)|T(?:emplateIsLocked|icket(?:IsLocked|TypeNotFound))|U(?:n(?:ableToFindProcess|expectedImagingError|known(?:ColorSpaceModel|DataType|Message)|locked|supportedConnection)|pdateTicketFailed|serOrGroupNotFound)|Val(?:idateTicketFailed|ueOutOfRange)|WriteFailed|XMLParseError)|OSIXError(?:Base|E(?:2BIG|A(?:CCES|DDR(?:INUSE|NOTAVAIL)|FNOSUPPORT|GAIN|LREADY|UTH)|B(?:AD(?:ARCH|EXEC|F|M(?:ACHO|SG)|RPC)|USY)|C(?:ANCELED|HILD|ONN(?:ABORTED|RE(?:FUSED|SET)))|D(?:E(?:ADLK|STADDRREQ|VERR)|OM|QUOT)|EXIST|F(?:AULT|BIG|TYPE)|HOST(?:DOWN|UNREACH)|I(?:DRM|LSEQ|N(?:PROGRESS|TR|VAL)|O|S(?:CONN|DIR))|LOOP|M(?:FILE|LINK|SGSIZE|ULTIHOP)|N(?:AMETOOLONG|E(?:EDAUTH|T(?:DOWN|RESET|UNREACH))|FILE|O(?:ATTR|BUFS|D(?:ATA|EV)|E(?:NT|XEC)|L(?:CK|INK)|M(?:EM|SG)|PROTOOPT|S(?:PC|R|TR|YS)|T(?:BLK|CONN|DIR|EMPTY|S(?:OCK|UP)|TY))|XIO)|O(?:PNOTSUPP|VERFLOW)|P(?:ERM|FNOSUPPORT|IPE|RO(?:C(?:LIM|UNAVAIL)|G(?:MISMATCH|UNAVAIL)|TO(?:NOSUPPORT|TYPE)?)|WROFF)|R(?:ANGE|EMOTE|OFS|PCMISMATCH)|S(?:H(?:LIBVERS|UTDOWN)|OCKTNOSUPPORT|PIPE|RCH|TALE)|T(?:IME(?:DOUT)?|OOMANYREFS|XTBSY)|USERS|XDEV))|ROP(?:A(?:LDirectionClass|NDirectionClass)|BNDirectionClass|C(?:SDirectionClass|anHang(?:LTMask|RBMask)|urrentVersion)|DirectionMask|E(?:NDirectionClass|SDirectionClass|TDirectionClass)|IsFloaterMask|L(?:DirectionClass|R(?:EDirectionClass|ODirectionClass))|N(?:SMDirectionClass|umDirectionClasses)|ONDirectionClass|P(?:DFDirectionClass|SDirectionClass|airOffset(?:Mask|S(?:hift|ign)))|R(?:DirectionClass|L(?:EDirectionClass|ODirectionClass)|ightConnectMask)|S(?:DirectionClass|ENDirectionClass)|Tag|UseRLPairMask|WSDirectionClass|ZeroReserved)|a(?:ckageAliasType|ge(?:DownCharCode|InMemory|OnDisk|UpCharCode)|nn(?:erParam_(?:Azimuth|CoordScale|Distance|Elevation|Gain|RefDistance)|ingMode_(?:SoundField|VectorBasedPanning))|r(?:amet(?:erEvent_(?:Immediate|Ramped)|ricEQParam_(?:CenterFreq|Gain|Q))|enthesisAnnotationSelector|tiallyConnectedSelector)|s(?:calStackBased|s(?:CallToChainErr|Selector|word(?:ChangedKCEvent(?:Mask)?)?)|teboard(?:ClientIsOwner|Flavor(?:No(?:Flags|tSaved)|Promised|RequestOnly|S(?:ender(?:Only|Translated)|ystemTranslated))|Modified|StandardLocation(?:Trash|Unknown)))|thKCItemAttr)|e(?:ncil(?:LeftUnicode|Unicode)|riod(?:AnnotationSelector|sToEllipsisO(?:ffSelector|nSelector)))|i(?:CharactersSelector|ctureD(?:ialogItem|ocumentsFolderType))|l(?:ain(?:DialogVariantCode|WindowClass)|otIconRefNo(?:Image|Mask|rmalFlags))|o(?:licyKCStopOn|rtKCItemAttr|s(?:2Offset|tCardEventErr)|wer(?:Handler(?:ExistsForDeviceErr|NotFoundFor(?:DeviceErr|ProcErr))|Mgt(?:MessageNotHandled|RequestDenied)|PC(?:ISA|RTA)))|r(?:e(?:MacOS91(?:A(?:ppl(?:eExtrasFolderType|icationsFolderType)|ssistantsFolderType|utomountedServersFolderType)|In(?:stallerLogsFolderType|ternetFolderType)|MacOSReadMesFolderType|StationeryFolderType|UtilitiesFolderType)|emptiveThread|f(?:erence(?:PanesFolderType|sFolder(?:AliasType|Icon(?:Resource)?|Type))|lightThenPause)|v(?:entOverlapO(?:ffSelector|nSelector)|ious(?:Body|WindowGroup)))|i(?:nt(?:Monitor(?:DocsFolder(?:AliasType|Type)|FolderIcon(?:Resource)?)|er(?:D(?:escriptionFolder(?:Icon|Type)|riverFolder(?:Icon|Type))|sFolderType)|ingPlugInsFolderType)|v(?:ateF(?:olderIcon(?:Resource)?|rameworksFolderType)|ilegeViolationException))|o(?:c(?:DescriptorIs(?:Absolute|Index|ProcPtr|Relative)|ess(?:DictionaryIncludeAllInformationMask|TransformTo(?:BackgroundApplication|ForegroundApplication|UIElementApplication)|orTempRoutineRequiresMPLib2))|gramTargetLevel_(?:Minus(?:2(?:0dB|3dB)|31dB)|None)|portional(?:CJKRomanSelector|IdeographsSelector|KanaSelector|NumbersSelector|TextSelector)|t(?:ected(?:ApplicationFolderIcon|SystemFolderIcon)|ocolKCItemAttr)))|ublic(?:Folder(?:Icon|Type)|KeyHashKCItemAttr|ThemeFontCount))|Q(?:D(?:C(?:orruptPICTDataErr|ursor(?:AlreadyRegistered|NotRegistered))|No(?:ColorHWCursorSupport|Palette))|LPreviewPDF(?:PagesWithThumbnailsOn(?:LeftStyle|RightStyle)|StandardStyle)|TSSUnknownErr|u(?:arterWidth(?:NumbersSelector|TextSelector)|estionMarkIcon|i(?:ck(?:LookFolderType|Time(?:ComponentsFolderType|ExtensionsFolderType))|t(?:AtNormalTimeMask|Before(?:FBAsQuitMask|NormalTimeMask|ShellQuitsMask|TerminatorAppQuitsMask)|N(?:everMask|otQuitDuring(?:InstallMask|LogoutMask))|OptionsMask))))|R(?:A(?:ATalkInactive|C(?:allBackFailed|on(?:figurationDBInitErr|nectionCanceled))|DuplicateIPAddr|ExtAuthenticationFailed|In(?:compatiblePrefs|itOpenTransportFailed|stallationDamaged|ternalError|valid(?:P(?:a(?:rameter|ssword)|ort(?:State)?)|SerialProtocol))|MissingResources|N(?:CPRejectedbyPeer|ot(?:Connected|Enabled|PrimaryInterface|Supported))|OutOfMemory|P(?:PP(?:AuthenticationFailed|NegotiationFailed|P(?:eerDisconnected|rotocolRejected)|UserDisconnected)|eerNotResponding|ort(?:Busy|SetupFailed))|RemoteAccessNotReady|StartupFailed|TCPIP(?:Inactive|NotConfigured)|U(?:nknown(?:PortState|User)|ser(?:InteractionRequired|LoginDisabled|Pwd(?:ChangeRequired|EntryRequired))))|a(?:dioButtonDialogItem|ndomParam_(?:Bound(?:A|B)|Curve)|reLigaturesO(?:ffSelector|nSelector))|dPermKCStatus|e(?:ad(?:ExtensionTermsMask|FailureErr|OnlyMemoryException|Reference|yThreadState)|busPicturesO(?:ffSelector|nSelector)|cent(?:ApplicationsFolder(?:Icon|Type)|DocumentsFolder(?:Icon|Type)|ItemsIcon|ServersFolder(?:Icon|Type))|d(?:irectedRelativeFolder|rawHighlighting)|gister(?:A(?:0|1|2|3|4|5|6)|Based|D(?:0|1|2|3|4|5|6|7)|Parameter(?:Mask|Phase|Size(?:Phase|Width)|W(?:hich(?:Phase|Width)|idth))|ResultLocation(?:Phase|Width))|lativeFolder|nderQuality_(?:High|Low|M(?:ax|edium|in))|quiredLigaturesO(?:ffSelector|nSelector)|s(?:FileNotOpened|o(?:lveAlias(?:FileNoUI|TryFileIDFirst)|urceControlDialogItem)|ultSize(?:Mask|Phase|Width))|turn(?:CharCode|Next(?:Group|U(?:G|ser)))|verb(?:2Param_(?:D(?:ecayTimeAt(?:0Hz|Nyquist)|ryWetMix)|Gain|M(?:axDelayTime|inDelayTime)|RandomizeReflections)|Param_(?:DryWetMix|Filter(?:Bandwidth|Enable|Frequency|Gain|Type)|Large(?:Brightness|De(?:lay(?:Range)?|nsity)|Size)|Modulation(?:Depth|Rate)|PreDelay|Small(?:Brightness|De(?:layRange|nsity)|LargeMix|Size))|RoomType_(?:Cathedral|Large(?:Chamber|Hall(?:2)?|Room(?:2)?)|Medium(?:Chamber|Hall(?:2|3)?|Room)|Plate|SmallRoom)))|ight(?:ArrowCharCode|ContainerArrowIcon|ToLeft)|o(?:gerBeepParam_(?:InGateThreshold(?:Time)?|OutGateThreshold(?:Time)?|Roger(?:Gain|Type)|Sensitivity)|lloverIconVariant|man(?:NumeralAnnotationSelector|izationTo(?:HiraganaSelector|KatakanaSelector))|otFolder|u(?:nd(?:TripAACParam_(?:BitRate|CompressedFormatSampleRate|EncodingStrategy|Format|Quality|RateOrQuality)|WindowDefinition|edBoxAnnotationSelector)|tin(?:e(?:DescriptorVersion|Is(?:DispatchedDefaultRoutine|NotDispatchedDefaultRoutine))|gResource(?:ID|Type))))|srcChain(?:AboveA(?:llMaps|pplicationMap)|Below(?:ApplicationMap|SystemMap))|u(?:byKana(?:O(?:ffSelector|nSelector)|Selector|Type)|nningThreadState))|S(?:C(?:BondStatus(?:LinkInvalid|No(?:Partner|tInActiveGroup)|OK|Unknown)|Network(?:Connection(?:Connect(?:ed|ing)|Disconnect(?:ed|ing)|Invalid|PPP(?:Authenticating|Connect(?:ed|ingLink)|Di(?:alOnTraffic|sconnect(?:ed|ingLink))|HoldingLinkOff|Initializing|Negotiating(?:Link|Network)|Suspended|Terminating|WaitingFor(?:CallBack|Redial)))|Flags(?:Connection(?:Automatic|Required)|I(?:nterventionRequired|s(?:Direct|LocalAddress))|Reachable|TransientConnection)|ReachabilityFlags(?:Connection(?:Automatic|On(?:Demand|Traffic)|Required)|I(?:nterventionRequired|s(?:Direct|LocalAddress|WWAN))|Reachable|TransientConnection))|PreferencesNotification(?:Apply|Commit)|Status(?:AccessError|Connection(?:Ignore|NoService)|Failed|InvalidArgument|KeyExists|Locked|MaxLink|N(?:eedLock|o(?:ConfigFile|Key|Link|PrefsSession|StoreSe(?:rver|ssion)|tifierActive))|OK|PrefsBusy|ReachabilityUnknown|Stale))|FNTLookup(?:S(?:egment(?:Array|Single)|i(?:mpleArray|ngleTable))|TrimmedArray|Vector)|K(?:DocumentState(?:AddPending|DeletePending|Indexed|NotIndexed)|Index(?:Inverted(?:Vector)?|Unknown|Vector)|Search(?:BooleanRanked|Option(?:Default|FindSimilar|NoRelevanceScores|SpaceMeansOR)|PrefixRanked|R(?:anked|equiredRanked)))|MPTETime(?:Running|Type(?:2(?:398|4|5|997(?:Drop)?)|30(?:Drop)?|5(?:0|994(?:Drop)?)|60(?:Drop)?)|Unknown|Valid)|O(?:AP(?:1999Schema|2001Schema)|CKS5NoAcceptableMethod)|R(?:A(?:lready(?:Finished|Listening|Released)|utoFinishingParam)|B(?:ad(?:Parameter|Selector)|lock(?:Background|Modally)|ufferTooSmall)|C(?:a(?:llBackParam|n(?:celOnSoundOut|ned22kHzSpeechSource|t(?:Add|GetProperty|ReadLanguageObject|Set(?:DuringRecognition|Property))))|leanupOnClientExit|omponentNotFound)|Default(?:Re(?:cognitionSystemID|jectionLevel)|SpeechSource)|E(?:nabled|xpansionTooDeep)|F(?:eedback(?:AndListeningModes|NotAvail)|oregroundOnly)|Has(?:FeedbackHasListenModes|NoSubItems)|I(?:dleRecognizer|nternalError)|Key(?:Expected|Word)|L(?:MObjType|anguageModel(?:Format|T(?:ooBig|ype))|i(?:stenKey(?:Combo|Mode|Name)|veDesktopSpeechSource))|M(?:odelMismatch|ustCancelSearch)|No(?:ClientLanguageModel|Feedback(?:HasListenModes|NoListenModes)|PendingUtterances|t(?:A(?:RecSystem|SpeechObject|vailable)|FinishedWithRejection|ImplementedYet|ListeningState|if(?:icationParam|yRecognition(?:Beginning|Done))))|O(?:ptional|therRecAlreadyModal|utOfMemory)|P(?:a(?:ramOutOfRange|th(?:Format|Type))|endingSearch|hrase(?:Format|Type))|Re(?:adAudio(?:FSSpec|URL)|cognition(?:Canceled|Done)|fCon|ject(?:able|edWord|ionLevel)|peatable)|S(?:earch(?:InProgress|StatusParam|WaitForAllClients)|ndInSourceDisconnected|oundInVolume|pe(?:edVsAccuracyParam|lling)|ubItemNotFound)|T(?:EXTFormat|ooManyElements)|Use(?:PushToTalk|ToggleListen)|W(?:ants(?:AutoFBGestures|ResultTextDrawn)|ord(?:NotFound|Type)))|S(?:LCiphersuiteGroup(?:ATS(?:Compatibility)?|Compatibility|Default|Legacy)|p(?:CantInstallErr|InternalErr|ParallelUpVectorErr|ScaleToZeroErr|VersionErr))|T(?:Class(?:DeletedGlyph|EndOf(?:Line|Text)|OutOfBounds)|KCrossStreamReset|LigActionMask|MarkEnd|NoAdvance|RearrVerbMask|SetMark|XHasLigAction)|c(?:heduledAudioSliceFlag_(?:BeganToRender(?:Late)?|Complete|Interrupt(?:AtLoop)?|Loop)|ientificInferiorsSelector|r(?:ap(?:ClearNamedScrap|Flavor(?:Mask(?:None|SenderOnly|Translated)|SizeUnknown|Type(?:Movie|Picture|Sound|Text(?:Style)?|U(?:TF16External|nicode(?:Style)?)))|GetNamedScrap|ReservedFlavorType)|eenSaversFolderType|ipt(?:CodeKCItemAttr|ingAdditionsFolder(?:Icon|Type)|sFolder(?:Icon|Type))|oll(?:Bars(?:AlwaysActive|SyncWithFocus)|Window(?:EraseToPortBackground|Invalidate|NoOptions))))|e(?:c(?:3DES192|A(?:ES(?:1(?:28|92)|256)|ccountItemAttr|dd(?:Event(?:Mask)?|ressItemAttr)|lias|uthenticationType(?:Any|D(?:PA|efault)|HT(?:MLForm|TP(?:Basic|Digest))|ItemAttr|MSN|NTLM|RPA))|C(?:S(?:BasicValidateOnly|C(?:alculateCMSDigest|heck(?:AllArchitectures|GatekeeperArchitectures|NestedCode|TrustedAnchors)|on(?:siderExpiration|tentInformation))|D(?:e(?:dicatedHost|faultFlags)|oNotValidate(?:Executable|Resources)|ynamicInformation)|EnforceRevocationChecks|FullReport|GenerateGuestHash|InternalInformation|NoNetworkAccess|QuickCheck|Re(?:portProgress|quirementInformation|strict(?:S(?:idebandData|ymlinks)|ToAppLike))|S(?:i(?:gningInformation|ngleThreaded)|kipResourceDirectory|trictValidate)|Use(?:AllArchitectures|SoftwareSigningCert)|ValidatePEH)|ert(?:EncodingItemAttr|TypeItemAttr|ificate(?:Encoding|ItemClass|Type))|o(?:deS(?:ignature(?:Adhoc|Enforcement|Force(?:Expiration|Hard|Kill)|H(?:ashSHA(?:1|256(?:Truncated)?|384|512)|ost)|LibraryValidation|NoHash|R(?:estrict|untime))|tatus(?:Debugged|Hard|Kill|Platform|Valid))|mmentItemAttr)|r(?:e(?:at(?:ionDateItemAttr|orItemAttr)|dentialType(?:Default|NoUI|WithUI))|l(?:Encoding|Type))|ustomIconItemAttr)|De(?:fault(?:ChangedEvent(?:Mask)?|KeySize)|leteEvent(?:Mask)?|s(?:criptionItemAttr|ignatedRequirementType))|EveryEventMask|Format(?:BSAFE|NetscapeCertSequence|OpenSSL|P(?:EMSequence|KCS(?:12|7))|RawKey|SSH(?:v2)?|Unknown|Wrapped(?:LSH|OpenSSL|PKCS8|SSH)|X509Cert)|G(?:eneric(?:ItemAttr|PasswordItemClass)|uestRequirementType)|Ho(?:norRoot|stRequirementType)|I(?:n(?:ternetPasswordItemClass|v(?:alidRequirementType|isibleItemAttr))|ssuerItemAttr|tem(?:PemArmour|Type(?:Aggregate|Certificate|P(?:rivateKey|ublicKey)|SessionKey|Unknown)))|Key(?:A(?:l(?:ias|waysSensitive)|pplicationTag)|De(?:crypt|rive)|E(?:ffectiveKeySize|n(?:crypt|dDate)|xtractable)|ImportOnlyOne|Key(?:C(?:lass|reator)|SizeInBits|Type)|Label|Modifiable|N(?:everExtractable|oAccessControl)|P(?:ermanent|ri(?:ntName|vate))|S(?:e(?:curePassphrase|nsitive)|ign(?:Recover)?|tartDate)|U(?:nwrap|sage(?:All|C(?:RLSign|ontentCommitment|ritical)|D(?:ataEncipherment|ecipherOnly|igitalSignature)|EncipherOnly|Key(?:Agreement|CertSign|Encipherment)|NonRepudiation|Unspecified))|Verify(?:Recover)?|Wrap|chain(?:ListChanged(?:Event|Mask)|Prompt(?:Invalid(?:Act)?|RequirePassphase|Unsigned(?:Act)?)))|L(?:abelItemAttr|ibraryRequirementType|ockEvent(?:Mask)?)|M(?:atchBits|odDateItemAttr)|N(?:egativeItemAttr|oGuest)|OptionReserved|P(?:a(?:dding(?:None|OAEP|PKCS1(?:MD(?:2|5)|SHA(?:1|2(?:24|56)|384|512))?|SigRaw)|sswordChangedEvent(?:Mask)?|thItemAttr)|luginRequirementType|ortItemAttr|r(?:eferencesDomain(?:Common|Dynamic|System|User)|ivateKeyItemClass|otocol(?:ItemAttr|Type(?:A(?:FP|ny|ppleTalk)|C(?:IFS|VSpserver)|DAAP|EPPC|FTP(?:Account|Proxy|S)?|HTTP(?:Proxy|S(?:Proxy)?)?|I(?:MAP(?:S)?|PP|RC(?:S)?)|LDAP(?:S)?|NNTP(?:S)?|POP3(?:S)?|RTSP(?:Proxy)?|S(?:M(?:B|TP)|OCKS|SH|VN)|Telnet(?:S)?)))|ublicKey(?:HashItemAttr|ItemClass))|R(?:SAM(?:ax|in)|e(?:adPermStatus|quirementTypeCount|vocation(?:CRLMethod|NetworkAccessDisabled|OCSPMethod|PreferCRL|RequirePositiveResponse|UseAnyAvailableMethod)))|S(?:criptCodeItemAttr|e(?:curityDomainItemAttr|r(?:ialNumberItemAttr|v(?:erItemAttr|iceItemAttr)))|ignatureItemAttr|ubject(?:ItemAttr|KeyIdentifierItemAttr)|ymmetricKeyItemClass)|T(?:r(?:ansform(?:Error(?:A(?:bort(?:InProgress|ed)|ttributeNotFound)|Invalid(?:Algorithm|Connection|Input(?:Dictionary)?|Length|Operation|Type)|M(?:issingParameter|oreThanOneOutput)|N(?:ameAlreadyRegistered|otInitializedCorrectly)|UnsupportedAttribute)|Invalid(?:Argument|Override)|MetaAttribute(?:CanCycle|Deferred|Externalize|Has(?:InboundConnection|OutboundConnections)|Name|Re(?:f|quire(?:d|sOutboundConnection))|Stream|Value)|OperationNotSupportedOnGroup|TransformIs(?:Executing|NotRegistered))|ust(?:Option(?:AllowExpired(?:Root)?|FetchIssuerFromNet|ImplicitAnchors|LeafIsCA|RequireRevPerCert|UseTrustSettings)|Result(?:Deny|FatalTrustFailure|Invalid|OtherError|Proceed|RecoverableTrustFailure|Unspecified)|Settings(?:ChangedEvent(?:Mask)?|Domain(?:Admin|System|User)|KeyUse(?:Any|EnDecrypt(?:Data|Key)|KeyExchange|Sign(?:Cert|Revocation|ature))|Result(?:Deny|Invalid|Trust(?:AsRoot|Root)|Unspecified))))|ypeItemAttr)|U(?:nlock(?:Event(?:Mask)?|StateStatus)|pdateEvent(?:Mask)?|seOnly(?:GID|UID))|VolumeItemAttr|WritePermStatus|ondScale|p(?:192r1|256r1|384r1|521r1)|urityDomainKCItemAttr)|lector(?:All(?:1BitData|32BitData|4BitData|8BitData|AvailableData|HugeData|LargeData|MiniData|SmallData)|Huge(?:1Bit|32Bit|4Bit|8Bit(?:Mask)?)|Large(?:1Bit|32Bit|4Bit|8Bit(?:Mask)?)|Mini(?:1Bit|4Bit|8Bit)|Small(?:1Bit|32Bit|4Bit|8Bit(?:Mask)?)|sAre(?:Indexable|NotIndexable))|quenceTrackProperty_(?:AutomatedParameters|LoopInfo|MuteStatus|OffsetTime|SoloStatus|T(?:imeResolution|rackLength))|r(?:ialNumberKCItemAttr|v(?:erKCItemAttr|ice(?:KCItemAttr|sFolderType)))|t(?:CLUT(?:ByValue|Immediately|WithLuminance)|DebugOption|FrontProcess(?:CausedByUser|FrontWindowOnly)|PowerLevel))|h(?:a(?:dowDialogVariantCode|r(?:ed(?:BadgeIcon|Folder(?:AliasType|Icon(?:Resource)?)|LibrariesFolder(?:Icon|Type)|UserDataFolderType)|ingPrivs(?:NotApplicableIcon|Read(?:OnlyIcon|WriteIcon)|UnknownIcon|WritableIcon)))|eet(?:AlertWindowClass|WindowClass)|ift(?:JIS_(?:BasicVariant|DOSVariant|MusicCDVariant)|Unicode)|o(?:rtcutIcon|w(?:DiacriticsSelector|HideInputWindow))|utdown(?:FolderType|Items(?:DisabledFolder(?:Icon|Type)|FolderIcon)))|i(?:deFloaterVariantCode|gn(?:KCItemAttr|atureKCItemAttr)|mpl(?:eWindowClass|ifiedCharactersSelector))|l(?:ash(?:ToDivideO(?:ffSelector|nSelector)|edZeroO(?:ffSelector|nSelector))|eep(?:De(?:mand|ny)|Now|Re(?:quest|voke)|Unlock|WakeUp))|ma(?:ll(?:1BitMask|32BitData|4Bit(?:Data|IconSize)|8Bit(?:Data|IconSize|Mask)|CapsSelector|IconSize)|rt(?:QuotesO(?:ffSelector|nSelector)|SwashType))|o(?:rt(?:AscendingIcon|DescendingIcon)|und(?:FileIcon|SetsFolderType))|p(?:a(?:ceCharCode|tial(?:Mixer(?:AttenuationCurve_(?:Exponential|Inverse|Linear|Power)|Param_(?:Azimuth|Distance|E(?:levation|nable)|G(?:ain|lobalReverbGain)|M(?:axGain|inGain)|O(?:bstructionAttenuation|cclusionAttenuation)|PlaybackRate|ReverbBlend)|RenderingFlags_(?:DistanceAttenuation|InterAuralDelay))|izationAlgorithm_(?:EqualPowerPanning|HRTF(?:HQ)?|S(?:oundField|phericalHead|tereoPassThrough)|VectorBasedPanning)))|e(?:ak(?:ableItemsFolder(?:Type)?|erConfiguration_(?:5_(?:0|1)|HeadPhones|Quad|Stereo))|cial(?:Case(?:CaretHook|DrawHook|EOLHook|GNEFilterProc|Hi(?:ghHook|tTestHook)|MBarHook|NWidthHook|ProtocolHandler|S(?:elector(?:Mask|Phase|Width)|ocketListener)|T(?:E(?:DoText|FindWord|Recalc)|extWidthHook)|WidthHook)?|Folder)|ech(?:FolderType|GenerateTune|InputMethodClass|Relative(?:Duration|Pitch)|ShowSyllables))|otlight(?:ImportersFolderType|MetadataCacheFolderType|SavedSearchesFolderType))|quaredLigaturesO(?:ffSelector|nSelector)|t(?:a(?:ck(?:DispatchedPascalStackBased|OverflowException|Parameter(?:Mask|Phase|Width))|ndardWindowDefinition|rt(?:DateKCItemAttr|up(?:Folder(?:AliasType|IconResource|Type)|Items(?:DisabledFolder(?:Icon|Type)|FolderIcon)))|ti(?:cTextDialogItem|oneryFolderType))|d(?:AlertDoNot(?:AnimateOn(?:Cancel|Default|Other)|CloseOnHelp|DisposeSheet)|C(?:FStringAlertVersion(?:One|Two)|ancelItemIndex)|OkItemIndex)|ereoMixerParam_(?:P(?:an|ost(?:AveragePower|PeakHoldLevel)|re(?:AveragePower|PeakHoldLevel))|Volume)|illIdle|o(?:p(?:Icon|pedThreadState)|red(?:BasicWindowDescriptionID|Window(?:PascalTitleID|SystemTag|TitleCFStringID)))|yl(?:eOptionsType|isticAlt(?:E(?:ight(?:O(?:ffSelector|nSelector)|eenO(?:ffSelector|nSelector))|levenO(?:ffSelector|nSelector))|F(?:i(?:fteenO(?:ffSelector|nSelector)|veO(?:ffSelector|nSelector))|our(?:O(?:ffSelector|nSelector)|teenO(?:ffSelector|nSelector)))|Nine(?:O(?:ffSelector|nSelector)|teenO(?:ffSelector|nSelector))|OneO(?:ffSelector|nSelector)|S(?:even(?:O(?:ffSelector|nSelector)|teenO(?:ffSelector|nSelector))|ix(?:O(?:ffSelector|nSelector)|teenO(?:ffSelector|nSelector)))|T(?:enO(?:ffSelector|nSelector)|h(?:irteenO(?:ffSelector|nSelector)|reeO(?:ffSelector|nSelector))|w(?:e(?:lveO(?:ffSelector|nSelector)|ntyO(?:ffSelector|nSelector))|oO(?:ffSelector|nSelector)))|ernativesType)))|u(?:b(?:jectKCItemAttr|stituteVerticalFormsO(?:ffSelector|nSelector))|p(?:eriorsSelector|ports(?:FileTranslation|ScrapTranslation))|spend(?:Demand|Re(?:quest|voke)|Wake(?:ToDoze|Up)))|washAlternatesO(?:ffSelector|nSelector)|y(?:m(?:Link(?:Creator|FileType)|bolLigaturesO(?:ffSelector|nSelector))|s(?:SWTooOld|tem(?:ControlPanelFolderType|D(?:esktopFolderType|omain)|E(?:ventKCEventMask|xtensionDisabledFolder(?:Icon|Type))|Folder(?:AliasType|Icon(?:Resource)?|Type)|IconsCreator|KCEvent|P(?:PDDomain|r(?:eferencesFolderType|ocess))|ResFile|S(?:ound(?:ID_(?:FlashScreen|UserPreferredAlert|Vibrate)|sFolderType)|uitcaseIcon)|TrashFolderType))))|T(?:EC(?:A(?:dd(?:F(?:allbackInterrupt(?:Bit|Mask)|orceASCIIChanges(?:Bit|Mask))|TextRunHeuristics(?:Bit|Mask))|rrayFullErr|vailable(?:EncodingsResType|SniffersResType))|B(?:adTextRunErr|ufferBelowMinimumSizeErr)|C(?:hinesePluginSignature|o(?:nversionInfoResType|rruptConverterErr))|Di(?:rectionErr|sable(?:Fallbacks(?:Bit|Mask)|LooseMappings(?:Bit|Mask)))|FallbackTextLengthFix(?:Bit|Mask)|GlobalsUnavailableErr|I(?:n(?:completeElementErr|foCurrentFormat|ternetName(?:DefaultUsageMask|StrictUsageMask|TolerantUsageMask|sResType))|temUnavailableErr)|JapanesePluginSignature|K(?:eepInfoFix(?:Bit|Mask)|oreanPluginSignature)|M(?:ailEncodingsResType|issingTableErr)|N(?:eedFlushStatus|oConversionPathErr)|OutputBufferFullStatus|P(?:artialCharErr|lugin(?:Creator|DispatchTable(?:CurrentVersion|Version1(?:_(?:1|2))?)|ManyToOne|OneTo(?:Many|One)|SniffObj|Type)|referredEncodingFix(?:Bit|Mask))|ResourceID|S(?:ignature|ubTextEncodingsResType)|T(?:able(?:ChecksumErr|FormatErr)|ext(?:RunBitClearFix(?:Bit|Mask)|ToUnicodeScanFix(?:Bit|Mask)))|U(?:n(?:icodePluginSignature|mappableElementErr)|sedFallbacksStatus)|WebEncodingsResType|_MIBEnumDontCare)|MTaskActive|RAK(?:CurrentVersion|Tag|UniformFormat)|SM(?:15Version|2(?:0Version|2Version|3Version|4Version)|Doc(?:Access(?:EffectiveRangeAttribute(?:Bit)?|FontSizeAttribute(?:Bit)?)|ument(?:EnabledInputSourcesPropertyTag|Input(?:ModePropertyTag|SourceOverridePropertyTag)|Property(?:SupportGlyphInfo|UnicodeInputWindow)|RefconPropertyTag|Support(?:DocumentAccessPropertyTag|GlyphInfoPropertyTag)|T(?:SMTEPropertyTag|extServicePropertyTag)|U(?:nicode(?:InputWindowPropertyTag|PropertyTag)|seFloatingWindowPropertyTag)|WindowLevelPropertyTag))|Hilite(?:BlockFillText|C(?:aretPosition|onvertedText)|NoHilite|OutlineText|RawText|Selected(?:ConvertedText|RawText|Text))|InsideOf(?:ActiveInputArea|Body)|OutsideOfBody|TEDocumentInterfaceType|Version)|XN(?:A(?:IFFFile|TSUI(?:Font(?:FeaturesAttribute|VariationsAttribute)|IsNotInstalledErr|Style(?:Continuous(?:Bit|Mask)|Size)?)|l(?:ign(?:CenterAction|LeftAction|RightAction)|lCountMask|readyInitializedErr|waysWrapAtViewEdge(?:Bit|Mask))|ttributeTagInvalidForRunErr|uto(?:Indent(?:O(?:ff|n)|StateTag)|Scroll(?:BehaviorTag|InsertionIntoView|Never|WhenInsertionVisible)|Wrap))|Ba(?:ckgroundTypeRGB|dDefaultFileTypeWarning)|C(?:annot(?:AddFrameErr|SetAutoIndentErr|TurnTSMOffWhenUsingUnicodeErr)|enter(?:Tab)?|hange(?:Font(?:Action|ColorAction|SizeAction)|StyleAction)|lear(?:Action|Th(?:eseFontFeatures|isControl))|o(?:lorContinuous(?:Bit|Mask)|pyNotAllowedInEchoModeErr)|utAction)|D(?:ataTypeNotAllowedErr|e(?:crementTypeSize|stinationRectKey)|isable(?:DragAndDrop(?:Bit|Mask|Tag)?|LayoutAndDraw(?:Tag)?|dFunctionalityErr)|o(?:FontSubstitution(?:Bit|Mask)?|NotInstallDragProcs(?:Bit|Mask)|nt(?:CareTypeS(?:ize|tyle)|Draw(?:CaretWhenInactive(?:Bit|Mask)?|SelectionWhenInactive(?:Bit|Mask)?)))|r(?:aw(?:CaretWhenInactive(?:Tag)?|GrowIcon(?:Bit|Mask)|Item(?:AllMask|Scrollbars(?:Bit|Mask)|Text(?:AndSelection(?:Bit|Mask)|Bit|Mask))|SelectionWhenInactive(?:Tag)?)|opAction))|En(?:able(?:DragAndDrop|LayoutAndDraw)|d(?:IterationErr|Offset)|tireWord(?:Bit|Mask))|F(?:l(?:attenMoviesTag|ush(?:Default|Left|Right))|o(?:nt(?:Continuous(?:Bit|Mask)|FeatureAction|SizeAttributeSize|VariationAction)|rceFullJust)|ullJust)|Horizontal(?:ScrollBarRectKey)?|I(?:OPrivilegesTag|gnoreCase(?:Bit|Mask)|llegalToCrossDataBoundariesErr|mageWithQD(?:Bit|Mask)|n(?:crementTypeSize|lineStateTag|valid(?:FrameIDErr|RunIndex)))|JustificationTag|L(?:eftT(?:ab|oRight)|in(?:eDirectionTag|k(?:NotPressed|Tracking|WasPressed)))|M(?:a(?:cOSEncoding|rginsTag)|o(?:nostyledText(?:Bit|Mask)|veAction)|ultiple(?:FrameType|StylesPerTextDocumentResType))|No(?:A(?:ppleEventHandlers(?:Bit|Mask)|utoWrap)|FontVariations|MatchErr|Selection(?:Bit|Mask)|TSMEver(?:Bit|Mask)|UserIOTag)|O(?:perationNotAllowedErr|utsideOf(?:FrameErr|LineErr))|Pa(?:geFrameType|steAction)|QDFont(?:ColorAttribute(?:Size)?|FamilyIDAttribute(?:Size)?|NameAttribute(?:Size)?|S(?:izeAttribute(?:Size)?|tyleAttribute(?:Size)?))|R(?:e(?:ad(?:Only(?:Bit|Mask)?|Write)|fConTag|startAppleEventHandlers(?:Bit|Mask))|i(?:chTextFormatData|ghtT(?:ab|oLeft))|un(?:Count(?:Bit|Mask)|IndexOutofBoundsErr))|S(?:aveStylesAsSTYLResource(?:Bit|Mask)|crollUnitsIn(?:Lines|Pixels|ViewRects)|election(?:O(?:ff|n)|StateTag)|how(?:End|Start|Window(?:Bit|Mask))|i(?:ngle(?:L(?:evelUndoTag|ineOnly(?:Bit|Mask))|StylePerTextDocumentResType)|zeContinuous(?:Bit|Mask))|omeOrAllTagsInvalidForRunErr|t(?:artOffset|yleContinuous(?:Bit|Mask))|upport(?:EditCommand(?:Processing|Updating)|FontCommand(?:Processing|Updating)|SpellCheckCommand(?:Processing|Updating))|ystemDefaultEncoding)|T(?:abSettingsTag|ext(?:Data|E(?:ditStyleFrameType|ncodingAttribute(?:Size)?)|File|InputCount(?:Bit|Mask)|RectKey|ensionFile)|ypingAction)|U(?:RLAttribute|n(?:doLastAction|icode(?:Encoding|Text(?:Data|File)))|se(?:Bottomline|C(?:arbonEvents|urrentSelection)|EncodingWordRules(?:Bit|Mask)|Inline|QDforImaging(?:Bit|Mask)|ScriptDefaultValue|rCanceledOperationErr))|V(?:ertical(?:ScrollBarRectKey)?|i(?:ewRectKey|sibilityTag))|W(?:ant(?:HScrollBar(?:Bit|Mask)|VScrollBar(?:Bit|Mask))|illDefaultTo(?:ATSUI(?:Bit|Mask)|CarbonEvent(?:Bit|Mask))|ordWrapStateTag))|a(?:bCharCode|llCapsSelector|sk(?:CreationException|TerminationException))|e(?:mporary(?:FolderType|ItemsIn(?:CacheDataFolderType|UserDomainFolderType))|xt(?:Center|Encoding(?:ANSEL|B(?:aseName|ig5(?:_(?:E|HKSCS_1999))?)|CNS_11643_92_P(?:1|2|3)|D(?:OS(?:Arabic|BalticRim|C(?:anadianFrench|hinese(?:Simplif|Trad)|yrillic)|Greek(?:1|2)?|Hebrew|Icelandic|Japanese|Korean|Latin(?:1|2|US)|Nordic|Portuguese|Russian|T(?:hai|urkish))|efault(?:Format|Variant))|E(?:BCDIC_(?:CP037|LatinCore|US)|UC_(?:CN|JP|KR|TW))|F(?:ormatName|ullName)|GB(?:K_95|_(?:18030_200(?:0|5)|2312_80))|HZ_GB_2312|ISO(?:10646_1993|Latin(?:1(?:0)?|2|3|4|5|6|7|8|9|Arabic|Cyrillic|Greek|Hebrew)|_2022_(?:CN(?:_EXT)?|JP(?:_(?:1|2|3))?|KR))|JIS_(?:C6226_78|X02(?:0(?:1_76|8_(?:83|90))|1(?:2_90|3_MenKuTen)))|K(?:OI8_(?:R|U)|SC_5601_(?:87|92_Johab))|M(?:ac(?:Ar(?:abic|menian)|B(?:engali|urmese)|C(?:e(?:ltic|ntralEurRoman)|hinese(?:Simp|Trad)|roatian|yrillic)|D(?:evanagari|ingbats)|E(?:astEurRoman|thiopic|xtArabic)|Farsi|G(?:aelic|e(?:ez|orgian)|reek|u(?:jarati|rmukhi))|H(?:FS|ebrew)|I(?:celandic|nuit)|Japanese|K(?:annada|eyboardGlyphs|hmer|orean)|Laotian|M(?:alayalam|ongolian)|Oriya|R(?:Symbol|oman(?:Latin1|ian)?)|S(?:i(?:mpChinese|nhalese)|ymbol)|T(?:amil|elugu|hai|ibetan|radChinese|urkish)|U(?:krainian|ni(?:code|nterp))|V(?:T100|ietnamese))|ultiRun)|NextStep(?:Japanese|Latin)|ShiftJIS(?:_X0213(?:_00)?)?|U(?:S_ASCII|n(?:icode(?:Default|V(?:1(?:0_0|1_0|2_1|_1)|2_(?:0|1)|3_(?:0|1|2)|4_0|5_(?:0|1)|6_(?:0|1|3)|7_0|8_0|9_0))|known))|V(?:ISCII|ariantName)|Windows(?:A(?:NSI|rabic)|BalticRim|Cyrillic|Greek|Hebrew|KoreanJohab|Latin(?:1|2|5)|Vietnamese)|sFolder(?:Icon|Type))|Flush(?:Default|Left|Right)|LanguageDontCare|MalformedInputErr|RegionDontCare|S(?:criptDontCare|ervice(?:Class|DocumentInterfaceType|InputModePropertyTag|JaTypingMethodPropertyTag)?|pacingType)|ToSpeech(?:SynthType|Voice(?:BundleType|FileType|Type))|Un(?:definedElementErr|supportedEncodingErr)))|h(?:eme(?:A(?:ctive(?:Alert(?:BackgroundBrush|TextColor)|BevelButtonTextColor|D(?:ialog(?:BackgroundBrush|TextColor)|ocumentWindowTitleTextColor)|M(?:enuItemTextColor|o(?:delessDialog(?:BackgroundBrush|TextColor)|vableModalWindowTitleTextColor))|P(?:lacardTextColor|opup(?:ArrowBrush|ButtonTextColor|LabelTextColor|WindowTitleColor)|ushButtonTextColor)|RootMenuTextColor|ScrollBarDelimiterBrush|UtilityWindow(?:BackgroundBrush|TitleTextColor)|WindowHeaderTextColor)|dornment(?:Arrow(?:Do(?:ubleArrow|wnArrow)|LeftArrow|RightArrow|UpArrow)|D(?:efault|rawIndicatorOnly)|Focus|Header(?:Button(?:LeftNeighborSelected|NoS(?:hadow|ortArrow)|RightNeighborSelected|S(?:hadowOnly|ortUp))|MenuButton)|No(?:Shadow|ne)|RightToLeft|ShadowOnly)|l(?:ert(?:HeaderFont|Window)|iasArrowCursor)|pp(?:earanceFileNameTag|l(?:eGuideCoachmarkBrush|icationFont))|rrow(?:3pt|5pt|7pt|9pt|Button(?:Mini|Small)?|Cursor|Down|Left|Right|Up))|B(?:ackground(?:ListViewWindowHeader|Metal|Placard|SecondaryGroupBox|TabPane|WindowHeader)|evelButton(?:Inset|Large|Medium|Small)?|ottom(?:InsideArrowPressed|OutsideArrowPressed|TrackPressed)|rush(?:A(?:ctiveAreaFill|l(?:ertBackground(?:Active|Inactive)|ternatePrimaryHighlightColor)|ppleGuideCoachmark)|B(?:evel(?:Active(?:Dark|Light)|Inactive(?:Dark|Light))|lack|utton(?:Active(?:Dark(?:Highlight|Shadow)|Light(?:Highlight|Shadow))|F(?:ace(?:Active|Inactive|Pressed)|rame(?:Active|Inactive))|Inactive(?:Dark(?:Highlight|Shadow)|Light(?:Highlight|Shadow))|Pressed(?:Dark(?:Highlight|Shadow)|Light(?:Highlight|Shadow))))|ChasingArrows|D(?:ialogBackground(?:Active|Inactive)|ocumentWindowBackground|ra(?:gHilite|werBackground))|F(?:inderWindowBackground|ocusHighlight)|IconLabelBackground(?:Selected)?|ListView(?:Background|ColumnDivider|EvenRowBackground|OddRowBackground|S(?:eparator|ortColumnBackground))|M(?:enuBackground(?:Selected)?|o(?:delessDialogBackground(?:Active|Inactive)|vableModalBackground))|NotificationWindowBackground|P(?:assiveAreaFill|opupArrow(?:Active|Inactive|Pressed)|rimaryHighlightColor)|S(?:crollBarDelimiter(?:Active|Inactive)|econdaryHighlightColor|heetBackground(?:Opaque|Transparent)?|taticAreaFill)|ToolbarBackground|UtilityWindowBackground(?:Active|Inactive)|White)|utton(?:Mixed|O(?:ff|n)))|C(?:h(?:asingArrowsBrush|eckBox(?:C(?:heckMark|lassicX)|Mini|Small)?)|losedHandCursor|o(?:mboBox(?:Mini|Small)?|nt(?:extualMenuArrowCursor|rolSoundsMask)|pyArrowCursor|unting(?:DownHandCursor|Up(?:AndDownHandCursor|HandCursor)))|rossCursor|u(?:rrentPortFont|stomThemesFileType))|D(?:ataFileType|blClickCollapseTag|e(?:faultAdornment|sktopP(?:attern(?:NameTag|Tag)|icture(?:Ali(?:asTag|gnmentTag)|NameTag)))|i(?:alogWindow|s(?:abled(?:MenuItemTextColor|RootMenuTextColor)|closure(?:Button|Down|Left|Right|Triangle)))|ocumentWindow(?:BackgroundBrush)?|ra(?:g(?:HiliteBrush|Sound(?:Dragging|Grow(?:UtilWindow|Window)|Move(?:Alert|Dialog|Icon|UtilWindow|Window)|None|S(?:crollBar(?:Arrow(?:Decreasing|Increasing)|Ghost|Thumb)|lider(?:Ghost|Thumb))))|w(?:IndicatorOnly|erWindow)))|E(?:mphasizedSystemFont|xamplePictureIDTag)|F(?:inder(?:SoundsMask|WindowBackgroundBrush)|ocus(?:Adornment|HighlightBrush))|Grow(?:Down|Left|Right|Up)|HighlightColor(?:NameTag|Tag)|I(?:BeamCursor|conLabel(?:BackgroundBrush|TextColor)|n(?:active(?:Alert(?:BackgroundBrush|TextColor)|BevelButtonTextColor|D(?:ialog(?:BackgroundBrush|TextColor)|ocumentWindowTitleTextColor)|Mo(?:delessDialog(?:BackgroundBrush|TextColor)|vableModalWindowTitleTextColor)|P(?:lacardTextColor|opup(?:ArrowBrush|ButtonTextColor|LabelTextColor|WindowTitleColor)|ushButtonTextColor)|ScrollBarDelimiterBrush|UtilityWindow(?:BackgroundBrush|TitleTextColor)|WindowHeaderTextColor)|cDecButton(?:Mini|Small)?|determinateBar(?:Large|M(?:edium|ini))?))|L(?:a(?:belFont|rge(?:BevelButton|IndeterminateBar|ProgressBar|RoundButton|TabHeight(?:Max)?))|eft(?:InsideArrowPressed|OutsideArrowPressed|TrackPressed)|ist(?:HeaderButton|View(?:BackgroundBrush|S(?:eparatorBrush|ortColumnBackgroundBrush)|TextColor)))|M(?:e(?:dium(?:BevelButton|IndeterminateBar|ProgressBar|S(?:crollBar|lider))|nu(?:Active|Bar(?:Inactive|Normal|Selected)|Disabled|Item(?:A(?:lignRight|t(?:Bottom|Top))|CmdKeyFont|Font|H(?:asIcon|ier(?:Background|archical))|MarkFont|NoBackground|P(?:lain|opUpBackground)|Scroll(?:DownArrow|UpArrow))|S(?:elected|oundsMask|quareMenuBar)|T(?:itleFont|ype(?:Hierarchical|Inactive|P(?:opUp|ullDown))))|tric(?:B(?:estListHeaderHeight|uttonRounded(?:Height|RecessedHeight))|C(?:heckBox(?:GlyphHeight|Height|Width)|omboBox(?:Large(?:BottomShadowOffset|DisclosureWidth|RightShadowOffset)|Mini(?:BottomShadowOffset|DisclosureWidth|RightShadowOffset)|Small(?:BottomShadowOffset|DisclosureWidth|RightShadowOffset)))|Disclosure(?:Button(?:Height|Size|Width)|Triangle(?:Height|Width))|EditText(?:FrameOutset|Whitespace)|FocusRectOutset|HSlider(?:Height|Tick(?:Height|Offset))|ImageWellThickness|L(?:arge(?:ProgressBarThickness|RoundButtonSize|Tab(?:CapsWidth|Height))|i(?:st(?:BoxFrameOutset|HeaderHeight)|ttleArrows(?:Height|Mini(?:Height|Width)|Small(?:Height|Width)|Width)))|M(?:enu(?:ExcludedMarkColumnWidth|I(?:conTrailingEdgeMargin|ndentWidth)|Mark(?:ColumnWidth|Indent)|Text(?:LeadingEdgeMargin|TrailingEdgeMargin))|ini(?:CheckBox(?:Height|Width)|DisclosureButton(?:Height|Width)|HSlider(?:Height|MinThumbWidth|Tick(?:Height|Offset))|P(?:opupButtonHeight|u(?:llDownHeight|shButtonHeight))|RadioButton(?:Height|Width)|Tab(?:CapsWidth|FrameOverlap|Height|Overlap)|VSlider(?:MinThumbHeight|Tick(?:Offset|Width)|Width)))|NormalProgressBarThickness|P(?:aneSplitterHeight|opupButtonHeight|r(?:imaryGroupBoxContentInset|ogressBar(?:ShadowOutset|Thickness))|u(?:llDownHeight|shButtonHeight))|R(?:adioButton(?:GlyphHeight|Height|Width)|e(?:levanceIndicatorHeight|sizeControlHeight)|ound(?:ButtonSize|TextField(?:Content(?:Height|Inset(?:Bottom|Left|Right|Top|WithIcon(?:Left|Right)))|MiniContent(?:Height|Inset(?:Bottom|Left|Right|Top|WithIcon(?:Left|Right)))|SmallContent(?:Height|Inset(?:Bottom|Left|Right|Top|WithIcon(?:Left|Right))))))|S(?:crollBar(?:MinThumb(?:Height|Width)|Overlap|Width)|e(?:condaryGroupBoxContentInset|paratorSize)|liderMinThumb(?:Height|Width)|mall(?:CheckBox(?:Height|Width)|DisclosureButton(?:Height|Width)|HSlider(?:Height|MinThumbWidth|Tick(?:Height|Offset))|P(?:aneSplitterHeight|opupButtonHeight|rogressBar(?:ShadowOutset|Thickness)|u(?:llDownHeight|shButtonHeight))|R(?:adioButton(?:Height|Width)|esizeControlHeight)|ScrollBar(?:MinThumb(?:Height|Width)|Width)|Tab(?:CapsWidth|FrameOverlap|Height|Overlap)|VSlider(?:MinThumbHeight|Tick(?:Offset|Width)|Width)))|T(?:ab(?:FrameOverlap|IndentOrStyle|Overlap)|extured(?:PushButtonHeight|SmallPushButtonHeight)|itleBarControlsHeight)|VSlider(?:Tick(?:Offset|Width)|Width)))|ini(?:CheckBox|IndeterminateBar|ProgressBar|RadioButton|S(?:crollBar|lider|ystemFont))|ovable(?:AlertWindow|DialogWindow))|N(?:ameTag|o(?:Adornment|Sounds|rmal(?:CheckBox|RadioButton)|tAllowedCursor))|OpenHandCursor|P(?:l(?:a(?:inDialogWindow|tinumFileType)|usCursor)|o(?:intingHandCursor|ofCursor|pup(?:Button(?:Mini|Normal|Small)?|Tab(?:CenterOn(?:Offset|Window)|NormalPosition)|Window))|r(?:essed(?:BevelButtonTextColor|P(?:lacardTextColor|opup(?:ArrowBrush|ButtonTextColor)|ushButtonTextColor))|ogressBar(?:Large|M(?:edium|ini))?)|ushButton(?:Font|Inset(?:Small)?|Mini|Normal|Small|Textured(?:Small)?)?)|R(?:adioButton(?:Mini|Small)?|e(?:levanceBar|size(?:DownCursor|Left(?:Cursor|RightCursor)|RightCursor|Up(?:Cursor|DownCursor)))|ight(?:InsideArrowPressed|OutsideArrowPressed|T(?:oLeftAdornment|rackPressed))|ound(?:Button(?:Help|Large)?|edBevelButton))|S(?:avvyMenuResponse|crollBar(?:Arrow(?:StyleTag|s(?:LowerRight|Single))|M(?:edium|ini)|Small|Thumb(?:Normal|Proportional|StyleTag))?|elected(?:MenuItemTextColor|RootMenuTextColor)|h(?:adowDialogWindow|eetWindow)|lider(?:M(?:edium|ini)|Small)?|m(?:all(?:BevelButton|CheckBox|EmphasizedSystemFont|RadioButton|S(?:crollBar|lider|ystemFont(?:Tag)?)|TabHeight(?:Max)?)|oothFont(?:EnabledTag|MinSizeTag))|ound(?:Alert(?:Close|Open)|B(?:alloon(?:Close|Open)|evel(?:E(?:nter|xit)|Press|Release)|utton(?:E(?:nter|xit)|Press|Release))|C(?:ancelButton(?:E(?:nter|xit)|Press|Release)|heckbox(?:E(?:nter|xit)|Press|Release)|opyDone)|D(?:efaultButton(?:E(?:nter|xit)|Press|Release)|i(?:alog(?:Close|Open)|s(?:closure(?:E(?:nter|xit)|Press|Release)|k(?:Eject|Insert)))|ragTarget(?:Drop|Hilite|Unhilite))|EmptyTrash|FinderDragO(?:ffIcon|nIcon)|L(?:aunchApp|ittleArrow(?:Dn(?:Press|Release)|E(?:nter|xit)|Up(?:Press|Release)))|M(?:askTag|enu(?:Close|Item(?:Hilite|Release)|Open))|N(?:ewItem|one)|Popup(?:E(?:nter|xit)|Press|Release|Window(?:Close|Open))|R(?:adio(?:E(?:nter|xit)|Press|Release)|e(?:ceiveDrop|solveAlias))|S(?:croll(?:Arrow(?:E(?:nter|xit)|Press|Release)|EndOfTrack|TrackPress)|electItem|lider(?:EndOfTrack|TrackPress))|T(?:ab(?:E(?:nter|xit)|Pressed|Release)|rack(?:FileType|NameTag))|UtilWin(?:C(?:lose(?:E(?:nter|xit)|Press|Release)|ollapse(?:E(?:nter|xit)|Press|Release))|DragBoundary|Zoom(?:E(?:nter|xit)|Press|Release)|dow(?:Activate|C(?:lose|ollapse(?:Down|Up))|Open|Zoom(?:In|Out)))|Window(?:Activate|C(?:lose(?:E(?:nter|xit)|Press|Release)?|ollapse(?:Down|E(?:nter|xit)|Press|Release|Up))|DragBoundary|Open|Zoom(?:E(?:nter|xit)|In|Out|Press|Release))|sEnabledTag)|p(?:ecifiedFont|inningCursor)|tate(?:Active|Disabled|Inactive|Pressed(?:Down|Up)?|Rollover|Unavailable(?:Inactive)?)|ystemFont(?:Detail(?:Emphasized)?|Tag)?)|T(?:ab(?:East|Front(?:Inactive|Unavailable)?|No(?:nFront(?:Inactive|Pressed|Unavailable)?|rth)|PaneOverlap|South|West)|extColor(?:Alert(?:Active|Inactive)|B(?:evelButton(?:Active|Inactive|Pressed|Sticky(?:Active|Inactive))|lack)|D(?:ialog(?:Active|Inactive)|ocumentWindowTitle(?:Active|Inactive))|IconLabel(?:Selected)?|ListView|M(?:enuItem(?:Active|Disabled|Selected)|o(?:delessDialog(?:Active|Inactive)|vableModalWindowTitle(?:Active|Inactive)))|Notification|P(?:lacard(?:Active|Inactive|Pressed)|opup(?:Button(?:Active|Inactive|Pressed)|Label(?:Active|Inactive)|WindowTitle(?:Active|Inactive))|ushButton(?:Active|Inactive|Pressed))|RootMenu(?:Active|Disabled|Selected)|SystemDetail|Tab(?:Front(?:Active|Inactive)|NonFront(?:Active|Inactive|Pressed))|UtilityWindowTitle(?:Active|Inactive)|W(?:hite|indowHeader(?:Active|Inactive)))|humb(?:Downward|P(?:lain|ressed)|Upward)|o(?:olbarFont|p(?:InsideArrowPressed|OutsideArrowPressed|TrackPressed))|rack(?:Active|Disabled|H(?:asFocus|ideTrack|orizontal)|Inactive|No(?:ScrollBarArrows|thingToScroll)|RightToLeft|ShowThumb|ThumbRgnIsNotGhost))|U(?:serDefinedTag|tility(?:SideWindow|Window(?:TitleFont)?))|V(?:ariant(?:BaseTintTag|NameTag)|iewsFont(?:SizeTag|Tag)?)|W(?:atchCursor|i(?:dget(?:C(?:loseBox|ollapseBox)|DirtyCloseBox|ToolbarButton|ZoomBox)|ndow(?:Has(?:C(?:loseBox|ollapseBox)|Dirty|FullZoom|Grow|HorizontalZoom|T(?:itleText|oolbarButton)|VerticalZoom)|IsCollapsed|SoundsMask|TitleFont)))|sFolderType)|i(?:nkCStackBased|rdWidth(?:NumbersSelector|TextSelector))|umbnail(?:32BitData|8BitMask))|i(?:ckScale|le(?:IconVariant|dOnScreen)|mePitchParam_(?:EffectBlend|Pitch|Rate)|tlingCapsSelector)|oo(?:ManyIOWindowsErr|lbar(?:A(?:dvancedIcon|pplicationsFolderIcon)|CustomizeIcon|D(?:e(?:leteIcon|sktopFolderIcon)|o(?:cumentsFolderIcon|wnloadsFolderIcon))|FavoritesIcon|HomeIcon|InfoIcon|L(?:abelsIcon|ibraryFolderIcon)|M(?:ovieFolderIcon|usicFolderIcon)|P(?:icturesFolderIcon|ublicFolderIcon)|SitesFolderIcon|UtilitiesFolderIcon|WindowClass))|r(?:a(?:c(?:eException|kMouseLocationOption(?:DontConsumeMouseUp|IncludeScrollWheel))|ditional(?:Alt(?:F(?:iveSelector|ourSelector)|OneSelector|T(?:hreeSelector|woSelector))|CharactersSelector|NamesCharactersSelector)|ns(?:codingCompositionO(?:ffSelector|nSelector)|form(?:Disabled|Label(?:1|2|3|4|5|6|7)|None|O(?:ffline|pen)|Selected(?:Disabled|O(?:ffline|pen))?)|l(?:at(?:e(?:Get(?:FileTranslationList|ScrapTranslationList(?:ConsideringData)?|TranslatedFilename)|Identify(?:File|Scrap)|Translate(?:File|Scrap))|ion(?:DataTranslation|FileTranslation|ScrapProgressDialogID)|orCanGenerateFilename)|iterationType)|parentEncod(?:edPixel|ing(?:Shift)?))|pException|sh(?:FolderType|Icon(?:Resource)?))|ueType(?:F(?:latFontIcon|ontIcon)|MultiFlatFontIcon)|yAuthenticate)|wo(?:ByteCode|WayEncryptPassword)|yp(?:eKCItemAttr|ographicExtrasType))|U(?:AZoomFocusType(?:InsertionPoint|Other)|C(?:BidiCat(?:ArabicNumber|B(?:lockSeparator|oundaryNeutral)|CommonNumberSeparator|EuroNumber(?:Separator|Terminator)?|FirstStrongIsolate|LeftRight(?:Embedding|Isolate|Override)?|No(?:nSpacingMark|tApplicable)|OtherNeutral|PopDirectional(?:Format|Isolate)|RightLeft(?:Arabic|Embedding|Isolate|Override)?|SegmentSeparator|Whitespace)|C(?:harPropType(?:BidiCategory|CombiningClass|DecimalDigitValue|GenlCategory)|ollate(?:C(?:aseInsensitiveMask|omposeInsensitiveMask)|Di(?:acritInsensitiveMask|gits(?:AsNumberMask|OverrideMask))|PunctuationSignificantMask|StandardOptions|Type(?:HFSExtended|Mask|S(?:hiftBits|ourceMask))|WidthInsensitiveMask))|GenlCat(?:Letter(?:Lowercase|Modifier|Other|Titlecase|Uppercase)|Mark(?:Enclosing|NonSpacing|SpacingCombining)|Number(?:DecimalDigit|Letter|Other)|Other(?:Control|Format|NotAssigned|PrivateUse|Surrogate)|Punct(?:C(?:lose|onnector)|Dash|FinalQuote|InitialQuote|O(?:pen|ther))|S(?:eparator(?:Line|Paragraph|Space)|ymbol(?:Currency|M(?:ath|odifier)|Other)))|HighSurrogateRange(?:End|Start)|Key(?:Action(?:AutoKey|D(?:isplay|own)|Up)|Layout(?:FeatureInfoFormat|HeaderFormat)|ModifiersToTableNumFormat|Output(?:GetIndexMask|S(?:equenceIndexMask|tateIndexMask)|TestForIndexMask)|S(?:equenceDataIndexFormat|tate(?:Entry(?:RangeFormat|TerminalFormat)|RecordsIndexFormat|TerminatorsFormat))|T(?:oCharTableIndexFormat|ranslateNoDeadKeys(?:Bit|Mask)))|LowSurrogateRange(?:End|Start)|OutputBufferTooSmall|T(?:S(?:Direction(?:Next|Previous)|NoKeysAddedToObjectErr|Options(?:DataIsOrderedMask|NoneMask|ReleaseStringMask)|SearchListErr)|extBreak(?:C(?:harMask|lusterMask)|GoBackwardsMask|IterateMask|L(?:eadingEdgeMask|ineMask|ocatorMissingType)|ParagraphMask|WordMask)|oken(?:NotFound|izer(?:IterationFinished|UnknownLang))|ypeSelectMaxListSize))|I(?:Mode(?:All(?:Hidden|Suppressed)|Content(?:Hidden|Suppressed)|Normal)|Option(?:A(?:nimateMenuBar|utoShowMenuBar)|Disable(?:AppleMenu|ForceQuit|Hide|MenuBarTransparency|ProcessSwitch|SessionTerminate)))|RL(?:68kNotSupportedError|A(?:bort(?:Initiated(?:Event|Mask)|ingState)|ccessNotAvailableError|ll(?:BufferEventsMask|EventsMask|NonBufferEventsMask)|uthenticationError)|BinHexFileFlag|Co(?:mpleted(?:Event(?:Mask)?|State)|nnectingState)|D(?:ataAvailable(?:Event(?:Mask)?|State)|e(?:binhexOnlyFlag|stinationExistsError)|i(?:rectoryListingFlag|splay(?:AuthFlag|ProgressFlag))|o(?:Not(?:DeleteOnErrorFlag|TryAnonymousFlag)|wnloading(?:Event|Mask|State)))|E(?:rrorOccurred(?:Event(?:Mask)?|State)|x(?:pand(?:AndVerifyFlag|FileFlag)|tensionFailureError))|FileEmptyError|I(?:n(?:itiat(?:edEvent(?:Mask)?|ingState)|valid(?:C(?:allError|onfigurationError)|URL(?:Error|ReferenceError)))|sDirectoryHintFlag)|LookingUpHostState|N(?:oAutoRedirectFlag|ullState)|P(?:er(?:centEvent(?:Mask)?|iodicEvent(?:Mask)?)|ro(?:gressAlreadyDisplayedError|perty(?:BufferTooSmallError|ChangedEvent(?:Mask)?|NotYetKnownError)))|Re(?:placeExistingFlag|s(?:ervedFlag|ourceFound(?:Event(?:Mask)?|State)|umeDownloadFlag))|S(?:erverBusyError|ystemEvent(?:Mask)?)|TransactionComplete(?:Event(?:Mask)?|State)|U(?:n(?:knownPropertyError|s(?:ettablePropertyError|upportedSchemeError))|pload(?:Flag|ing(?:Event|Mask|State))))|SB(?:A(?:bortedError|lreadyOpenErr)|B(?:adDispatchTable|itstufErr|uf(?:OvrRunErr|UnderRunErr))|C(?:RCErr|ompletionError)|D(?:ataToggleErr|evice(?:Busy|Disconnected|Err|NotSuspended|PowerProblem|Suspended))|EndpointStallErr|FlagsError|In(?:correctTypeErr|ternal(?:Err|Reserved(?:1(?:0)?|2|3|4|5|6|7|8|9))|validBuffer)|LinkErr|No(?:BandwidthError|De(?:lay|viceErr)|Err|Tran|t(?:Found|Handled|RespondingErr|Sent(?:1Err|2Err)))|O(?:utOfMemoryErr|verRunErr)|P(?:B(?:LengthError|VersionError)|IDCheckErr|ending|ipe(?:IdleError|StalledError)|ortDisabled)|Queue(?:Aborted|Full)|R(?:es(?:1Err|2Err)|qErr)|T(?:imedOut|ooMany(?:PipesErr|TransactionsErr))|Un(?:derRunErr|known(?:DeviceErr|InterfaceErr|Notification|PipeErr|RequestErr))|WrongPIDErr)|TC(?:DefaultOptions|OverflowErr|UnderflowErr)|YVY422PixelFormat|n(?:connectedSelector|icode(?:16BitFormat|32BitFormat|ByteOrderMark|C(?:anonical(?:CompVariant|DecompVariant)|ollationClass)|D(?:e(?:compositionType|faultDirection(?:Mask)?)|irectionality(?:Bits|Mask)|ocument(?:InterfaceType)?)|F(?:allback(?:Custom(?:First|Only)|Default(?:First|Only)|InterruptSafeMask|Sequencing(?:Bits|Mask))|orceASCIIRange(?:Bit|Mask))|HFSPlus(?:CompVariant|DecompVariant)|Keep(?:Info(?:Bit|Mask)|SameEncoding(?:Bit|Mask))|L(?:eftToRight(?:Mask)?|ooseMappings(?:Bit|Mask))|Ma(?:pLineFeedToReturn(?:Bit|Mask)|tch(?:Other(?:Base(?:Bit|Mask)|Format(?:Bit|Mask)|Variant(?:Bit|Mask))|Unicode(?:Base(?:Bit|Mask)|Format(?:Bit|Mask)|Variant(?:Bit|Mask)))|xDecomposedVariant)|No(?:Co(?:mp(?:atibilityVariant|osedVariant)|rporateVariant)|HalfwidthChars(?:Bit|Mask)|Subset|rmalizationForm(?:C|D)|t(?:AChar|FromInputMethod))|ObjectReplacement|R(?:eplacementChar|ightToLeft(?:Mask)?)|S(?:CSUFormat|tringUnterminated(?:Bit|Mask)|wappedByteOrderMark)|Text(?:BreakClass|Run(?:Bit|Heuristics(?:Bit|Mask)|Mask))|U(?:TF(?:16(?:BEFormat|Format|LEFormat)|32(?:BEFormat|Format|LEFormat)|7Format|8Format)|se(?:ExternalEncodingForm(?:Bit|Mask)|Fallbacks(?:Bit|Mask)|HFSPlusMapping|LatestMapping))|VerticalForm(?:Bit|Mask))|known(?:Exception|FSObjectIcon|Language|Script)|lock(?:KCEvent(?:Mask)?|StateKCStatus|edIcon)|mappedMemoryException|resolvablePageFaultException|supported(?:CardErr|FunctionErr|ModeErr|VsErr)|wrapKCItemAttr)|p(?:ArrowCharCode|date(?:A(?:E(?:TE|UT)|ctiveInputArea)|KCEvent(?:Mask)?)|per(?:AndLowerCaseSelector|Case(?:NumbersSelector|PetiteCapsSelector|SmallCapsSelector|Type)))|se(?:AtoB|B(?:estGuess|to(?:A|B))|CurrentISA|NativeISA|Pr(?:emadeThread|ofileIntent)|WidePositioning|r(?:D(?:ialogItem|omain)|FolderIcon|I(?:DiskIcon|con)|NameAndPasswordFlag|P(?:PDDomain|referredAlert)|SpecificTmpFolderType|sFolder(?:Icon|Type)))|tilit(?:iesFolder(?:Icon|Type)|yWindowClass))|V(?:CBFlags(?:H(?:FSPlusAPIs(?:Bit|Mask)|ardwareGone(?:Bit|Mask))|IdleFlush(?:Bit|Mask)|VolumeDirty(?:Bit|Mask))|K_(?:ANSI_(?:0|1|2|3|4|5|6|7|8|9|A|B(?:ackslash)?|C(?:omma)?|D|E(?:qual)?|F|G(?:rave)?|H|I|J|K(?:eypad(?:0|1|2|3|4|5|6|7|8|9|Clear|D(?:ecimal|ivide)|E(?:nter|quals)|M(?:inus|ultiply)|Plus))?|L(?:eftBracket)?|M(?:inus)?|N|O|P(?:eriod)?|Q(?:uote)?|R(?:ightBracket)?|S(?:emicolon|lash)?|T|U|V|W|X|Y|Z)|C(?:apsLock|o(?:mmand|ntrol))|D(?:elete|ownArrow)|E(?:nd|scape)|F(?:1(?:0|1|2|3|4|5|6|7|8|9)?|2(?:0)?|3|4|5|6|7|8|9|orwardDelete|unction)|H(?:elp|ome)|ISO_Section|JIS_(?:Eisu|K(?:ana|eypadComma)|Underscore|Yen)|LeftArrow|Mute|Option|Page(?:Down|Up)|R(?:eturn|ight(?:Arrow|Co(?:mmand|ntrol)|Option|Shift))|S(?:hift|pace)|Tab|UpArrow|Volume(?:Down|Up))|LibTag2|arispeedParam_Playback(?:Cents|Rate)|er(?:ifyKCItemAttr|tical(?:Constraint|FractionsSelector|PositionType|SubstitutionType|TabCharCode))|o(?:icesFolder(?:Icon|Type)|lume(?:KCItemAttr|RootFolderType|SettingsFolderType)))|W(?:akeToDoze|hereToEmptyTrashFolderType|i(?:d(?:ePosOffsetBit|getsFolderType)|ndow(?:A(?:ctivationScope(?:All|Independent|None)|lertP(?:osition(?:MainScreen|On(?:MainScreen|ParentWindow(?:Screen)?)|ParentWindow(?:Screen)?)|roc)|syncDragAttribute)|BoundsChange(?:OriginChanged|SizeChanged|User(?:Drag|Resize)|Zoom)|C(?:a(?:n(?:BeVisibleWithoutLoginAttribute|Collapse|DrawInCurrentPort|G(?:etWindowRegion|row)|MeasureTitle|SetupProxyDragImage|Zoom)|scade(?:On(?:MainScreen|ParentWindow(?:Screen)?)|StartAtParentWindowScreen))|enter(?:MainScreen|On(?:MainScreen|ParentWindow(?:Screen)?)|ParentWindow(?:Screen)?)|loseBox(?:Attribute|Rgn)|o(?:llapseBox(?:Attribute|Rgn)|mpositingAttribute|n(?:strain(?:AllowPartial|CalcOnly|M(?:ayResize|ove(?:Minimum|RegardlessOfFit))|StandardOptions|Use(?:SpecifiedBounds|TransitionWindow))|tentRgn)))|D(?:ef(?:HIView|ObjectClass|Proc(?:ID|Ptr|Type)|SupportsColorGrafPort|aultPosition|initionVersion(?:One|Two))|ialogDefProcResID|o(?:cument(?:DefProcResID|Proc)|esNotCycleAttribute)|ra(?:gRgn|wer(?:Clos(?:ed|ing)|Open(?:ing)?)))|Edge(?:Bottom|Default|Left|Right|Top)|F(?:adeTransitionEffect|loat(?:FullZoom(?:GrowProc|Proc)|GrowProc|HorizZoom(?:GrowProc|Proc)|Proc|Side(?:FullZoom(?:GrowProc|Proc)|GrowProc|HorizZoom(?:GrowProc|Proc)|Proc|VertZoom(?:GrowProc|Proc))|VertZoom(?:GrowProc|Proc))|rameworkScaledAttribute|ullZoom(?:Attribute|DocumentProc|GrowDocumentProc))|G(?:enieTransitionEffect|lobalPortRgn|ro(?:up(?:Attr(?:FixedLevel|HideOnCollapse|LayerTogether|MoveTogether|PositionFixed|S(?:elect(?:AsLayer|able)|haredActivation)|ZOrderFixed)|Contents(?:Re(?:curse|turnWindows)|Visible)|Level(?:Active|Inactive|Promoted))|w(?:DocumentProc|Rgn)))|H(?:as(?:RoundBottomBarCornersAttribute|TitleBar)|i(?:de(?:On(?:FullScreenAttribute|SuspendAttribute)|TransitionAction)|ghResolutionCapableAttribute)|oriz(?:Zoom(?:DocumentProc|GrowDocumentProc)|ontalZoomAttribute))|I(?:gnoreClicksAttribute|nWindowMenuAttribute|s(?:Alert|CollapsedState|Modal|Opaque))|L(?:atentVisible(?:AppHidden|Collapsed(?:Group|Owner)|F(?:loater|ullScreen)|Suspend)|iveResizeAttribute)|M(?:e(?:nuIncludeRotate|tal(?:Attribute|NoContentSeparatorAttribute))|o(?:dal(?:DialogProc|ity(?:AppModal|None|SystemModal|WindowModal))|v(?:able(?:AlertProc|Modal(?:DialogProc|GrowProc))|eTransitionAction))|sg(?:C(?:alculateShape|leanUp)|Dra(?:gHilite|w(?:Grow(?:Box|Outline)|InCurrentPort)?)|Get(?:Features|GrowImageRegion|Region)|HitTest|Initialize|M(?:easureTitle|odified)|S(?:etupProxyDragImage|tateChanged)))|No(?:A(?:ctivatesAttribute|ttributes)|ConstrainAttribute|Position|ShadowAttribute|TitleBarAttribute|UpdatesAttribute)|O(?:paque(?:ForEventsAttribute|Rgn)|verlayProc)|P(?:aintProcOptionsNone|lainDialogProc|ropertyPersistent)|Resiz(?:ableAttribute|eTransitionAction)|S(?:h(?:adowDialogProc|eet(?:Alert(?:DefProcResID|Proc)|DefProcResID|Proc|TransitionEffect)|owTransitionAction)|i(?:deTitlebarAttribute|mple(?:DefProcResID|FrameProc|Proc))|lideTransitionEffect|t(?:a(?:gger(?:MainScreen|ParentWindow(?:Screen)?)|ndard(?:DocumentAttributes|FloatingAttributes|HandlerAttribute)|teTitleChanged)|ructureRgn)|upports(?:DragHilite|GetGrowImageRegion|ModifiedBit))|T(?:exturedSquareCornersAttribute|itle(?:BarRgn|ProxyIconRgn|TextRgn)|oolbarButton(?:Attribute|Rgn))|U(?:nifiedTitleAndToolbarAttribute|pdateRgn|tility(?:DefProcResID|SideTitleDefProcResID))|Vert(?:Zoom(?:DocumentProc|GrowDocumentProc)|icalZoomAttribute)|WantsDisposeAtProcessDeath|Zoom(?:BoxRgn|TransitionEffect)|sLatin1(?:PalmVariant|StandardVariant)))|or(?:d(?:FinalSwashesO(?:ffSelector|nSelector)|InitialSwashesO(?:ffSelector|nSelector))|kgroupFolderIcon)|r(?:PermKCStatus|apKCItemAttr|ite(?:FailureErr|ProtectedErr|Reference)))|X(?:86(?:ISA|RTA)|Lib(?:Tag1|Version))|Y(?:UV(?:211PixelFormat|411PixelFormat|SPixelFormat|UPixelFormat)|V(?:U9PixelFormat|YU422PixelFormat))|Zoom(?:Accelerate|Decelerate|NoAcceleration)|administratorUser|e(?:rnel(?:A(?:lreadyFreeErr|sync(?:ReceiveLimitErr|SendLimitErr)|ttributeErr)|CanceledErr|DeletePermissionErr|Ex(?:ceptionErr|ecut(?:ePermissionErr|ionLevelErr))|I(?:DErr|n(?:UseErr|completeErr))|O(?:bjectExistsErr|ptionsErr)|PrivilegeErr|Re(?:adPermissionErr|turnValueErr)|T(?:erminatedErr|imeoutErr)|Un(?:recoverableErr|supportedErr)|WritePermissionErr)|y(?:32BitIcon|4BitIcon|8Bit(?:Icon|Mask)|A(?:E(?:A(?:djustMarksProc|ngle|rcAngle|ttaching)|B(?:aseAddr|estType|gnd(?:Color|Pattern)|ounds|ufferSize)|C(?:ellList|la(?:ssID|useOffsets)|o(?:lor(?:Table)?|mp(?:Operator|areProc)|ntainer|untProc)|ur(?:rentPoint|ve(?:Height|Width)))|D(?:a(?:shStyle|ta)|e(?:f(?:aultType|initionRect)|s(?:cType|iredClass|tination))|o(?:AntiAlias|Dithered|Rotate|Scale|Translate)|ragging)|E(?:ditionFileLoc|lements|ndPoint|rrorObject|vent(?:Class|ID))|F(?:i(?:l(?:e(?:Type)?|l(?:Color|Pattern))|xLength)|lip(?:Horizontal|Vertical)|o(?:nt|rmula))|G(?:etErrDescProc|raphicObjects)|H(?:iliteRange|omograph(?:Accent|DicInfo|Weight))|I(?:D|mageQuality|n(?:dex|sertHere))|Key(?:Data|Form(?:s)?|word)|L(?:A(?:Homograph|Morpheme(?:Bundle|Path)?)|aunchedAs(?:LogInItem|ServiceItem)|e(?:ftSide|vel)|ineArrow|ogical(?:Operator|Terms))|M(?:ark(?:Proc|TokenProc)|o(?:rpheme(?:PartOfSpeechCode|TextRange)|veView))|N(?:ame|e(?:wElementLoc|xtBody)|oAutoRouting)|O(?:bject(?:1|2|Class)?|ff(?:Styles|set)|nStyles)|P(?:MTable|OSTHeaderData|aram(?:Flags|eters)|en(?:Color|Pattern|Width)|i(?:nRange|x(?:MapMinus|elDepth))|o(?:int(?:List|Size)?|sition)|ro(?:p(?:Data|Flags|ID|ert(?:ies|y))|tection))|R(?:angeSt(?:art|op)|e(?:corderCount|gionClass|nderAs|pl(?:acing|yHeaderData)|questedType|sult(?:Info)?)|o(?:t(?:Point|ation)|wList))|S(?:aveOptions|c(?:ale|riptTag)|e(?:archText|rverInstance)|howWhere|t(?:art(?:Angle|Point)|yles)|uiteID)|T(?:SM(?:DocumentRefcon|EventRe(?:cord|f)|GlyphInfoArray|ScriptTag|Text(?:F(?:MFont|ont)|PointSize))|arget|e(?:st|xt(?:Color|Font|Line(?:Ascent|Height)|PointSize|S(?:ervice(?:Encoding|MacEncoding)|tyles))?)|he(?:Data|Text)|r(?:ans(?:ferMode|lation)|yAsStructGraf))|U(?:niformStyles|pdate(?:On|Range)|s(?:erTerm|ing))|Version|W(?:hoseRangeSt(?:art|op)|indow|ritingCode)|XMLRe(?:plyData|questData))|S(?:Arg|P(?:ositionalArgs|reposition(?:A(?:bo(?:ut|ve)|gainst|partFrom|round|sideFrom|t)|B(?:e(?:low|neath|side|tween)|y)|F(?:or|rom)|Given|Has|In(?:steadOf|to)?|O(?:n(?:to)?|utOf|ver)|Since|T(?:hr(?:ough|u)|o)|Un(?:der|til)|With(?:out)?))|Returning|SubroutineName|UserRecordFields)|c(?:ceptTimeoutAttr|tualSenderAuditToken)|dd(?:itionalHTTPHeaders|ressAttr)|ll|pp(?:HandledCoercion|leEventAttributesAttr))|C(?:loseAllWindows|o(?:deMask|ntextualMenu(?:Attributes|CommandID|Modifiers|Name|Submenu)))|D(?:CM(?:Field(?:Attributes|DefaultData|FindMethods|Name|T(?:ag|ype))|MaxRecordSize)|i(?:rectObject|s(?:ableAuthenticationAttr|poseTokenProc))|own(?:Mask)?|riveNumber)|E(?:rror(?:Code|Number|String)|v(?:ent(?:ClassAttr|IDAttr|SourceAttr)|tDev))|GlobalPositionList|HighLevel(?:Class|ID)|I(?:CEditPreferenceDestination|conAndMask|nteractLevelAttr)|Key(?:Code|board)?|Local(?:PositionList|Where)|M(?:enuI(?:D|tem)|i(?:ni(?:1BitMask|4BitIcon|8BitIcon)|s(?:cellaneous|sedKeywordAttr))|odifiers)|NewBounds|O(?:SA(?:Dialect(?:Code|LangCode|Name|ScriptCode)|Source(?:End|Start))|ldFinderItems|ptionalKeywordAttr|riginal(?:AddressAttr|Bounds))|Pr(?:eDispatch|ocessSerialNumber)|R(?:PCMethod(?:Name|Param(?:Order)?)|e(?:directedDocumentList|ply(?:PortAttr|RequestedAttr)|turnIDAttr))|S(?:OAP(?:Action|MethodNameSpace(?:URI)?|S(?:MD(?:Namespace(?:URI)?|Type)|chemaVersion|tructureMetaData))|R(?:Recognizer|Speech(?:Result|Status))|cszResource|e(?:lect(?:Proc|ion)|nder(?:A(?:ppl(?:escriptEntitlementsAttr|ication(?:IdentifierEntitlementAttr|Sandboxed))|uditTokenAttr)|E(?:GIDAttr|UIDAttr)|GIDAttr|PIDAttr|UIDAttr))|mall(?:32BitIcon|4BitIcon|8Bit(?:Icon|Mask)|IconAndMask)|ubjectAttr)|T(?:imeoutAttr|ransactionIDAttr)|U(?:p(?:Mask)?|ser(?:NameAttr|PasswordAttr))|W(?:he(?:n|re)|indow)|XMLDebuggingAttr))|fullPrivileges|i(?:Movie(?:FolderType|PlugInsFolderType|SoundEffectsFolderType)|o(?:AC(?:Access(?:BlankAccess(?:Bit|Mask)|Everyone(?:Read(?:Bit|Mask)|Search(?:Bit|Mask)|Write(?:Bit|Mask))|Group(?:Read(?:Bit|Mask)|Search(?:Bit|Mask)|Write(?:Bit|Mask))|Owner(?:Bit|Mask|Read(?:Bit|Mask)|Search(?:Bit|Mask)|Write(?:Bit|Mask))|User(?:Read(?:Bit|Mask)|Search(?:Bit|Mask)|Write(?:Bit|Mask)))|UserNo(?:MakeChanges(?:Bit|Mask)|SeeF(?:iles(?:Bit|Mask)|older(?:Bit|Mask))|tOwner(?:Bit|Mask)))|F(?:CB(?:FileLocked(?:Bit|Mask)|LargeFile(?:Bit|Mask)|Modified(?:Bit|Mask)|OwnClump(?:Bit|Mask)|Resource(?:Bit|Mask)|SharedWrite(?:Bit|Mask)|Write(?:Bit|Locked(?:Bit|Mask)|Mask))|lAttrib(?:CopyProt(?:Bit|Mask)|D(?:ataOpen(?:Bit|Mask)|ir(?:Bit|Mask))|FileOpen(?:Bit|Mask)|InShared(?:Bit|Mask)|Locked(?:Bit|Mask)|Mounted(?:Bit|Mask)|ResOpen(?:Bit|Mask)|SharePoint(?:Bit|Mask)))|VAtrb(?:DefaultVolume(?:Bit|Mask)|FilesOpen(?:Bit|Mask)|HardwareLocked(?:Bit|Mask)|SoftwareLocked(?:Bit|Mask))))|no(?:Group|User)|ownerPrivileges)|l(?:CloseMsg|D(?:o(?:HAutoscroll(?:Bit)?|VAutoscroll(?:Bit)?)|raw(?:Msg|ingModeOff(?:Bit)?))|ExtendDrag(?:Bit)?|HiliteMsg|InitMsg|No(?:Disjoint(?:Bit)?|Extend(?:Bit)?|NilHilite(?:Bit)?|Rect(?:Bit)?)|OnlyOne(?:Bit)?|UseSense(?:Bit)?|a(?:Dictionary(?:NotOpenedErr|TooManyErr|UnknownErr)|En(?:gineNotFoundErr|vironment(?:BusyErr|ExistErr|NotFoundErr))|FailAnalysisErr|InvalidPathErr|NoMoreMorphemeErr|Property(?:Err|IsReadOnlyErr|NotFoundErr|UnknownErr|ValueErr)|T(?:extOverFlowErr|ooSmallBufferErr)|ng(?:A(?:fri(?:caans|kaans)|lbanian|mharic|r(?:abic|menian)|ssamese|ymara|zerbaijan(?:Ar|Roman|i))|B(?:asque|e(?:lorussian|ngali)|reton|u(?:lgarian|rmese)|yelorussian)|C(?:atalan|h(?:ewa|inese)|roatian|zech)|D(?:anish|utch|zongkha)|E(?:nglish|s(?:peranto|tonian))|F(?:a(?:eroese|r(?:oese|si))|innish|lemish|rench)|G(?:al(?:ician|la)|e(?:orgian|rman)|ree(?:k(?:Ancient|Poly)?|nlandic)|u(?:arani|jarati))|H(?:ebrew|indi|ungarian)|I(?:celandic|n(?:donesian|uktitut)|rish(?:Gaelic(?:Script)?)?|talian)|Ja(?:panese|vaneseRom)|K(?:a(?:nnada|shmiri|zakh)|hmer|i(?:nyarwanda|rghiz)|orean|urdish)|L(?:a(?:o|pp(?:ish|onian)|t(?:in|vian))|ettish|ithuanian)|M(?:a(?:cedonian|l(?:a(?:gasy|y(?:Arabic|Roman|alam))|t(?:a|ese))|nxGaelic|rathi)|o(?:ldavian|ngolian(?:Cyr)?))|N(?:epali|orwegian|y(?:anja|norsk))|Or(?:iya|omo)|P(?:ashto|ersian|o(?:lish|rtug(?:ese|uese))|unjabi)|Quechua|R(?:omanian|u(?:anda|ndi|ssian))|S(?:a(?:amisk|mi|nskrit)|cottishGaelic|erbian|i(?:mpChinese|n(?:dhi|halese))|lov(?:ak|enian)|omali|panish|undaneseRom|w(?:ahili|edish))|T(?:a(?:galog|jiki|mil|tar)|elugu|hai|i(?:betan|grinya)|ongan|radChinese|urk(?:ish|men))|U(?:ighur|krainian|nspecified|rdu|zbek)|Vietnamese|Welsh|Y(?:iddish|ugoslavian))|pProtErr|rge(?:1BitMask|4BitData|8BitData)|stDskErr|unch(?:Allow24Bit|Continue|DontSwitch|InhibitDaemon|NoFileFlags|UseMinimum))|eft(?:OverChars|SingGuillemet)|imitReachedErr|o(?:c(?:alOnlyErr|kPortBits(?:Bad(?:PortErr|SurfaceErr)|SurfaceLostErr|W(?:indow(?:ClippedErr|MovedErr|ResizedErr)|rongGDeviceErr)))|ng(?:Da(?:te(?:Found)?|y)|Month|Week|Year)))|m(?:BarNFnd|CalcItemMsg|D(?:ownMask|rawMsg)|FulErr|PopUpMsg|SizeMsg|UpMask|a(?:c(?:Dev|ron)|p(?:C(?:hanged(?:Bit)?|ompact(?:Bit)?)|Read(?:Err|Only(?:Bit)?))|trixErr|x(?:Country|DateField|SizeToGrowTooSmall))|ct(?:AllItems|LastIDIndic)|dy|e(?:diaTypesDontMatch|m(?:A(?:ZErr|drErr)|BCErr|F(?:ragErr|ullErr)|LockedErr|P(?:CErr|urErr)|ROZ(?:Err(?:or)?|Warn)|SCErr|WZErr)|nu(?:I(?:nvalidErr|temNotFoundErr)|NotFoundErr|Pr(?:gErr|operty(?:Invalid(?:Err)?|NotFoundErr))|UsesSystemDefErr))|i(?:di(?:DupIDErr|InvalidCmdErr|ManagerAbsentOSErr|N(?:ameLenErr|o(?:C(?:lientErr|onErr)|PortErr))|TooMany(?:ConsErr|PortsErr)|VConnect(?:Err|Made|Rmvd)|WriteErr)|n(?:Country|LeadingZ|i(?:1BitMask|4BitData|8BitData)|ute(?:Field|Mask))|ssingRequiredParameterErr)|mInternalError|ntLdingZ|o(?:de(?:32BitCompatible|C(?:anBackground|ontrolPanel)|D(?:eskAccessory|isplayManagerAware|oesActivateOnFGSwitch)|Get(?:AppDiedMsg|FrontClicks)|HighLevelEventAware|L(?:aunchDontSwitch|iteral|ocalAndRemoteHLEvents)|MultiLaunch|N(?:eedSuspendResume|ormal)|OnlyBackground|Phonemes|Reserved|StationeryAware|T(?:ext|une)|UseTextEditServices)|nth(?:Field|Mask)|u(?:ntedFolderIconResource|se(?:Down|MovedMessage|Up))|v(?:ableDBoxProc|ieT(?:extNotFoundErr|oolboxUninitialized)))|pWorkFlag(?:CopyWorkBlock|Do(?:Completion|Work|ntBlock)|Get(?:IsRunning|ProcessorCount))|ultiplePublisherWrn|yd)|n(?:WIDTHHook|ame(?:FontTableTag|TypeErr)|bp(?:BuffOvr|ConfDiff|Duplicate|N(?:ISErr|o(?:Confirm|tFound)))|e(?:edClearScrapErr|gZcbFreeErr|twork(?:E(?:rr|vt)|Mask)|wLine(?:Bit|CharMask|Mask))|il(?:HandleErr|ScrapFlavorDataErr)|mTyp(?:Err|e)|o(?:AdrMkErr|BridgeErr|C(?:a(?:che(?:Bit|Mask)|lls)|o(?:decErr|nstraint))|D(?:MAErr|ata(?:Area|Handler)|e(?:fault(?:DataRef|UserErr)|viceForChannel)|riveErr|taMkErr)|ExportProcAvailableErr|G(?:lobalsErr|rowDocProc)|H(?:ardware(?:Err)?|elpForItem)|I(?:conDataAvailableErr|nformErr)|M(?:MUErr|PPErr|a(?:c(?:DskErr|hineNameErr)|rk|skFoundErr)|e(?:diaHandler|m(?:ForPictPlaybackErr|oryNodeFailedInitialize))|o(?:re(?:FolderDescErr|KeyColorsErr|RealTime)|vieFound))|NybErr|OutstandingHLE|P(?:a(?:steboardPromiseKeeperErr|thMappingErr)|ortErr|refAppErr)|Re(?:cordOfApp|lErr|quest|sponseErr)|S(?:crap(?:Err|PromiseKeeperErr)|e(?:curitySession|ndResp|ssionErr)|ou(?:ndTrackInMovieErr|rceTreeFoundErr)|u(?:chIconErr|itableDisplaysErr)|ynthFound)|T(?:humbnailFoundErr|oolboxNameErr|ranslationPathErr|ypeErr)|User(?:InteractionAllowed|NameErr|Re(?:cErr|fErr))|VideoTrackInMovieErr|n(?:DragOriginatorErr|GlyphID|MatchingEditState)|t(?:A(?:FileErr|QTVRMovieErr|RemountErr|llowedToSaveMovieErr|ppropriateForClassic)|BTree|E(?:nough(?:BufferSpace|D(?:ataErr|iskSpaceToGrab)|Hardware(?:Err)?|Memory(?:Err|ToGrab))|xact(?:MatrixErr|SizeErr))|HeldErr|I(?:mplementedMusicOSErr|nitErr)|L(?:eafAtomErr|o(?:ckedErr|ggedInErr))|OpenErr|PasteboardOwnerErr|RegisteredSectionErr|ThePublisherWrn|e(?:ChannelNotAllocatedOSErr|Icon)))|r(?:CallNotSupported|DataTruncatedErr|ExitedIteratorScope|I(?:nvalid(?:EntryIterationOp|NodeErr)|terationDone)|LockedErr|N(?:ameErr|ot(?:CreatedErr|EnoughMemoryErr|FoundErr|ModifiedErr|SlotDeviceErr))|OverrunErr|P(?:ath(?:BufferTooSmall|NotFound)|ower(?:Err|SwitchAbortErr)|ropertyAlreadyExists)|ResultCodeBase|T(?:ransactionAborted|ypeMismatchErr))|s(?:DrvErr|StackErr|vErr)|u(?:l(?:Dev|lEvent)|mberFor(?:matting(?:Bad(?:CurrencyPositionErr|FormatErr|NumberFormattingObjectErr|OptionsErr|TokenErr)|DelimiterMissingErr|EmptyFormatErr|LiteralMissingErr|NotA(?:DigitErr|NumberErr)|OverflowInDestinationErr|SpuriousCharErr|UnOrd(?:eredCurrencyRangeErr|redCurrencyRangeErr))|tmattingNotADigitErr)))|o(?:ffLinErr|gonek|k|p(?:WrErr|en(?:Err|FolderIconResource)|tionKey(?:Bit)?)|s(?:2FontTableTag|Evt(?:MessageMask)?|Mask)|ver(?:Dot|layDITL)|wnedFolderIconResource)|p(?:A(?:RADialIn|S(?:Da(?:teString|y(?:s)?)|Hours|It|M(?:e|inutes|onth)|P(?:arent|i|rint(?:Depth|Length))|Quote|Re(?:quiredImportItems|sult|turn)|S(?:econds|pace)|T(?:ab|ime(?:String)?|opLevelScript)|Week(?:day|s)|Year)|T(?:Machine|Type|Zone)|boutMacintosh|pp(?:Partition|l(?:eMenuItemsFolder|icationFile))|r(?:cAngle|ePrivilegesInherited))|B(?:ackground(?:Color|Pattern)|estType|ounds|uttonViewArrangement|y(?:CreationDateArrangement|KindArrangement|LabelArrangement|ModificationDateArrangement|NameArrangement|SizeArrangement))|C(?:a(?:llBackNumber|n(?:C(?:hangePassword|onnect)|DoProgramLinking)|pacity)|l(?:ass|ipboard)|o(?:lor(?:Table)?|m(?:ment|pletelyExpanded)|n(?:duit|t(?:ainer(?:Window)?|ent(?:Space|s)|rolPanelsFolder))|rnerCurve(?:Height|Width))|reationDate(?:Old)?)|D(?:CM(?:AccessMethod|C(?:lass|opyright)|L(?:isting|ocale)|Maintenance|Permission)|NS(?:Form)?|ashStyle|e(?:f(?:ault(?:ButtonViewIconSize|IconViewIconSize|ListViewIconSize|Type)|initionRect)|layBeforeSpringing|s(?:cription|k(?:AccessoryFile|top))|vice(?:Address|Type))|isk|ottedDecimal)|E(?:jectable|n(?:abled|dPoint|tireContents)|x(?:p(?:and(?:able|ed)|orted)|tensionsFolder))|F(?:TPKind|i(?:l(?:e(?:Creator|Share(?:On|StartingUp)|Type(?:Old)?)?|l(?:Color|Pattern))|nderPreferences)|o(?:lder(?:Old)?|nt(?:sFolder(?:PreAllegro)?)?|rmula)|reeSpace)|G(?:r(?:aphicObjects|id(?:Icons)?|oup(?:Privileges)?)|uestPrivileges)|H(?:as(?:CloseBox|ScriptingTerminology|TitleBar)|ost)|I(?:D|con(?:Bitmap|Size|ViewArrangement)|n(?:dex|fo(?:Panel|Window)|herits|sertionLoc|ternetLocation)|s(?:Collapsed|F(?:loating|rontProcess)|Locked(?:Old)?|Mod(?:al|ified)|Owner|P(?:opup|ulledOpen)|Resizable|S(?:criptable|elected|ta(?:rtup|tioneryPad))|Zoom(?:able|ed(?:Full)?))|temNumber)|Justification|K(?:e(?:epArranged(?:By)?|y(?:Kind|strokeKey))|ind)|L(?:a(?:bel(?:1|2|3|4|5|6|7|Index)|ngCode|rge(?:Button|stFreeBlock))|ength|i(?:neArrow|stViewIconSize)|ocal(?:AndRemoteEvents)?)|M(?:akeChanges|enuID|inAppPartition|o(?:difi(?:cationDate(?:Old)?|ers)|unted))|N(?:ame|e(?:twork|wElementLoc)|o(?:Arrangement|de))|O(?:bject|riginalItem|wner(?:Privileges)?)|P(?:a(?:rtitionSpaceUsed|th)|en(?:Color|Pattern|Width)|hysicalSize|ixelDepth|o(?:int(?:List|Size)|rt|sition)|r(?:e(?:ferences(?:Folder|Window)|viousView)|o(?:ductVersion|gramLinkingOn|perties|t(?:ection|ocol))))|R(?:e(?:st|verse)|otation)|S(?:CSI(?:Bus|LUN)|c(?:ale|heme|ript(?:Code|Tag)?)|e(?:eF(?:iles|olders)|lect(?:ed|ion))|h(?:ar(?:ableContainer|ing(?:Protection|Window)?)|o(?:rtCuts|uldCallBack|w(?:C(?:omment|reationDate)|D(?:ate|iskInfo)|FolderSize|Kind|Label|ModificationDate|Size|Version))|utdownFolder)|ize|mall(?:Button|Icon)|napToGridArrangement|o(?:cket|rtDirection|und)|pringOpenFolders|ta(?:ggerIcons|rt(?:Angle|Point|ingUp|up(?:Disk|ItemsFolder)))|uggestedAppPartition|ystemFolder)|T(?:e(?:mporaryFolder|xt(?:Color|Encoding|Font|ItemDelimiters|PointSize|Styles))|ra(?:ns(?:ferMode|lation)|sh))|U(?:RL|niformStyles|pdateOn|se(?:RelativeDate|ShortMenus|WideGrid|r(?:Name|Password|Selection)))|V(?:ersion|i(?:ew(?:Font(?:Size)?|Preferences)?|sible))|W(?:arnOnEmpty|indow)|a(?:ramErr|steDev|th(?:NotVerifiedErr|TooLongErr))|er(?:Thousand|mErr)|i(?:c(?:Item|ker(?:CantLive|ResourceError)|t(?:Info(?:IDErr|Ver(?:bErr|sionErr))|ureDataErr))|xMapTooDeepErr)|l(?:a(?:inDBox|tform(?:68k|AIXppc|I(?:A32NativeEntryPoint|RIXmips|nterpreted)|Linux(?:intel|ppc)|MacOSx86|NeXT(?:68k|Intel|ppc|sparc)|PowerPC(?:64NativeEntryPoint|NativeEntryPoint)?|SunOS(?:intel|sparc)|Win32|X86_64NativeEntryPoint))|easeCache(?:Bit|Mask))|m(?:BusyErr|Field|Mask|Re(?:cv(?:EndErr|StartErr)|plyTOErr)|Send(?:EndErr|StartErr))|o(?:pup(?:FixedWidth|MenuProc|Title(?:Bold|C(?:enterJust|ondense)|Extend|Italic|LeftJust|NoStyle|Outline|RightJust|Shadow|Underline)|Use(?:AddResMenu|WFont)|VariableWidth)|rt(?:ClosedErr|InUse|N(?:ameExistsErr|ot(?:Cf|Pwr)))|sErr)|r(?:InitErr|WrErr|eferencesFolderIconResource|i(?:nt(?:MonitorFolderIconResource|erStatusOpCodeNotSupportedErr)|vateFolderIconResource)|o(?:c(?:NotFound|essStateIncorrectErr)|gressProcAborted|pertyNotSupportedByNodeErr|tocolErr))|ushButProc)|q(?:Err|fcbNot(?:CreatedErr|FoundErr)|t(?:ActionNotHandledErr|NetworkAlreadyAllocatedErr|ParamErr|XML(?:ApplicationErr|ParseErr)|ml(?:Dll(?:EntryNotFoundErr|LoadErr)|Uninitialized)|s(?:AddressBusyErr|Bad(?:DataErr|S(?:electorErr|tateErr))|ConnectionFailedErr|T(?:imeoutErr|ooMuchDataErr)|Un(?:knownValueErr|supported(?:DataTypeErr|FeatureErr|RateErr)))|vr(?:LibraryLoadErr|Uninitialized))|ueueFull)|r(?:AliasType|ad(?:Ctrl|ioButProc)|c(?:DB(?:AsyncNotSupp|B(?:ad(?:AsyncPB|DDEV|Sess(?:ID|Num)|Type)|reak)|E(?:rror|xec)|N(?:oHandler|ull)|PackNotInited|Value|WrongVersion)|vrErr)|dVerify(?:Bit|Mask)?|e(?:ad(?:Err|QErr|Reference)|c(?:NotFnd|ordDataTooBigErr)|gisterComponent(?:A(?:fterExisting|liasesOnly)|Global|NoDuplicates)|q(?:Aborted|Failed|uiredFlagsDontMatch)|s(?:1Field|2Field|3Field|AttrErr|C(?:hanged(?:Bit)?|trl)|FNotFound|Locked(?:Bit)?|NotFound|P(?:r(?:eload(?:Bit)?|o(?:blem|tected(?:Bit)?))|urgeable(?:Bit)?)|Sys(?:Heap(?:Bit)?|RefBit)|ourceInMemory|umeFlag)|tryComponentRegistrationErr)|fNumErr|gn(?:OverflowErr|TooBigErr(?:or)?)|i(?:ght(?:ControlKey(?:Bit)?|OptionKey(?:Bit)?|S(?:hiftKey(?:Bit)?|ingGuillemet))|ngMark)|mvRe(?:fFailed|sFailed)|o(?:man(?:AppFond|Flags|SysFond)|utingNotFoundErr))|s(?:IQType|am(?:eFileErr|plesAlreadyInMediaErr)|c(?:TypeNotFoundErr|r(?:ap(?:Flavor(?:FlagsMismatchErr|NotFoundErr|SizeMismatchErr)|PromiseNotKeptErr)|ipt(?:CurLang|DefLang)|ollBarProc))|dm(?:InitErr|JTInitErr|P(?:RAMInitErr|riInitErr)|SRTInitErr)|e(?:NoDB|c(?:LeadingZ|ond(?:Field|Mask)|tNFErr)|ekErr|lectorNotSupportedByNodeErr|pNot(?:Consistent|IntlSep)|qGrabInfoNotAvailable|ss(?:ClosedErr|TableErr|ion(?:Has(?:GraphicAccess|TTY)|IsR(?:emote|oot)|KeepCurrentBootstrap))|ttingNotSupportedByNodeErr)|h(?:aredFolderIconResource|iftKey(?:Bit)?|ortDate|utDownAlert)|i(?:Bad(?:DeviceName|RefNum|SoundInDevice)|DeviceBusyErr|HardDriveTooSlow|In(?:it(?:S(?:DTblErr|PTblErr)|VBLQsErr)|putDeviceErr|valid(?:Compression|Sample(?:Rate|Size)))|No(?:BufferSpecified|SoundInHardware)|Unknown(?:InfoType|Quality)|VBRCompressionNotSupported|ze(?:Bit|of_sfnt(?:CMap(?:E(?:ncoding|xtendedSubHeader)|Header|SubHeader)|D(?:escriptorHeader|irectory)|Instance|Name(?:Header|Record)|Variation(?:Axis|Header))))|ktClosedErr|l(?:eepQType|otNumErr|pQType)|m(?:A(?:llScripts|mharic|r(?:abic|menian))|B(?:LFieldBad|ad(?:BoardId|RefId|Script|Verb|s(?:List|PtrErr))|engali|lkMoveErr|u(?:rmese|sErrTO)|yteLanesErr)|C(?:PUErr|RCFail|entralEuroRoman|h(?:ar(?:1byte|2byte|Ascii|B(?:idirect|opomofo)|ContextualLR|E(?:uro|xtAscii)|FIS(?:G(?:ana|reek)|Ideo|Kana|Russian)|GanaKana|H(?:angul|iragana|orizontal)|Ideographic|Jamo|Katakana|L(?:eft|ower)|NonContextualLR|Punct|Right|TwoByte(?:Greek|Russian)|Upper|Vertical)|inese)|kStatusErr|odeRevErr|urrentScript|yrillic)|D(?:evanagari|is(?:DrvrNamErr|abledSlot|posePErr))|E(?:astEurRoman|mptySlot|thiopic|xtArabic)|F(?:HBl(?:kDispErr|ockRdErr)|ISClass(?:Lvl(?:1|2)|User)|irstByte|o(?:nd(?:End|Start)|rmatErr))|G(?:e(?:ez|orgian|t(?:DrvrNamErr|PRErr))|reek|u(?:jarati|rmukhi))|Hebrew|I(?:deographic(?:Level(?:1|2)|User)|nit(?:StatVErr|TblVErr))|Ja(?:mo(?:Bog(?:Jaeum|Moeum)|Jaeum|Moeum)|panese)|K(?:CHRCache|an(?:a(?:HardOK|S(?:mall|oftOK))|nada)|ey(?:DisableKybd(?:Switch|s)|EnableKybds|ForceKeyScript(?:Bit|Mask)|Next(?:InputMethod|Kybd|Script)|Roman|S(?:cript|etDir(?:LeftRight|RightLeft)|wap(?:InputMethod|Kybd|Script)|ysScript)|Toggle(?:Direction|Inline))|hmer|lingon|orean)|La(?:o(?:tian)?|stByte)|M(?:a(?:layalam|sk(?:A(?:ll|scii(?:1|2)?)|Bopomofo2|Gana2|Hangul2|Jamo2|Kana(?:1|2)|Native))|iddleByte|ongolian)|N(?:ewPErr|ilsBlockErr|o(?:Board(?:Id|SRsrc)|Dir|GoodOpens|JmpTbl|MoresRsrcs|sInfoArray|tInstalled)|umberPartsTable)|O(?:ffsetErr|riya)|P(?:RAMInitErr|riInitErr|unct(?:Blank|Graphic|N(?:ormal|umber)|Repeat|Symbol))|R(?:Symbol|e(?:cNotFnd|gionCode|s(?:erved(?:Err|Slot)|rvErr)|visionErr)|oman|ussian)|S(?:DMInitErr|RT(?:InitErr|OvrFlErr)|elOOBErr|i(?:mpChinese|n(?:dhi|gleByte|halese))|l(?:avic|otOOBErr)|ys(?:Script|temScript))|T(?:amil|elugu|hai|ibetan|ra(?:dChinese|ns(?:Ascii(?:1|2)?|Bopomofo2|Case|Gana2|Hangul(?:2|Format)|Jamo2|Kana(?:1|2)|Lower|Native|Pre(?:DoubleByting|LowerCasing)|RuleBaseFormat|System|Upper)))|U(?:n(?:ExBusErr|TokenTable|i(?:codeScript|nterp))|prHalfCharSet)|Vietnamese|W(?:hiteSpaceList|ord(?:SelectTable|WrapTable))|all(?:1BitMask|4BitData|8BitData|DateBit)|c(?:ClassMask|DoubleMask|OrientationMask|R(?:eserved|ightMask)|TypeMask|UpperMask)|f(?:D(?:isableKeyScriptSync(?:Mask)?|ualCaret)|NameTagEnab|ShowIcon|UseAssocFontInfo)|s(?:GetDrvrErr|PointerNil|f(?:AutoInit|B0Digits|Context|Forms|IntellCP|Ligatures|N(?:atCase|oForceFont)|Reverse|S(?:ingByte|ynchUnstyledTE)|UnivExt)))|o(?:C(?:haracterMode|ommandDelimiter|urrent(?:A5|Voice))|Error(?:CallBack|s)|InputMode|NumberMode|OutputTo(?:AudioDevice|ExtAudioFile|FileWithCFURL)|P(?:honeme(?:CallBack|Options|Symbols)|itch(?:Base|Mod))|R(?:ate|e(?:centSync|fCon|set))|S(?:oundOutput|peechDoneCallBack|tatus|yn(?:cCallBack|th(?:Extension|Type)))|TextDoneCallBack|Vo(?:ice(?:Description|File)|lume)|WordCallBack|rts(?:After|Before|Equal)|u(?:ndSupportNotAvailableErr|rceNotFoundErr))|pdAdjErr|rcCopy|t(?:a(?:leEditState|rtupFolderIconResource|t(?:Text|usErr))|opIcon|r(?:UserBreak|eamingNodeNotReadyErr|ingOverflow))|u(?:p(?:Day|Month|Week|Year)|spendResumeMessage)|v(?:All(?:1BitData|4BitData|8BitData|AvailableData|LargeData|MiniData|SmallData)|Disabled|Large(?:1Bit|4Bit|8Bit)|Mini(?:1Bit|4Bit|8Bit)|Small(?:1Bit|4Bit|8Bit)|TempDisable)|y(?:nth(?:NotReady|OpenFailed|esizer(?:NotRespondingOSErr|OSErr))|stem(?:CurLang|DefLang|FolderIconResource)))|t(?:aDst(?:DocNeedsResourceFork|IsAppTranslation)|e(?:Bit(?:Clear|Set|Test)|C(?:aret|enter)|Draw|F(?:AutoScroll|I(?:dleWithEventLoopTimer|nlineInput(?:AutoScroll)?)|OutlineHilite|TextBuffering|Use(?:InlineInput|TextServices|WhiteBackground)|ind|lush(?:Default|Left|Right)|orceLeft|rom(?:Find|Recal))|Highlight|Just(?:Center|Left|Right)|ScrapSizeErr|Word(?:Drag|Select)|l(?:A(?:PattNotSupp|lreadyOpen|utoAnsNotOn)|Bad(?:APattErr|BearerType|C(?:AErr|odeResource)|D(?:N(?:DType|Err|Type)|isplayMode)|F(?:eatureID|unction|wdType)|H(?:TypeErr|andErr)|In(?:dex|t(?:Ext|ercomID))|LevelErr|P(?:a(?:geID|rkID)|ickupGroupID|roc(?:Err|ID))|Rate|S(?:WErr|ampleRate|elect|tateErr)|TermErr|VTypeErr)|C(?:A(?:Not(?:Acceptable|Deflectable|Rejectable)|Unavail)|BErr|onf(?:Err|LimitE(?:rr|xceeded)|NoLimit|Rej))|D(?:N(?:DTypeNotSupp|TypeNotSupp)|e(?:tAlreadyOn|viceNotFound)|isplayModeNotSupp)|F(?:eat(?:Active|Not(?:Avail|Su(?:b|pp)))|wdTypeNotSupp)|GenericError|HTypeNotSupp|In(?:dexNotSupp|itFailed|tExtNotSupp)|No(?:C(?:allbackRef|ommFolder)|Err|MemErr|OpenErr|SuchTool|Tools|tEnoughdspBW)|PBErr|St(?:ateNotSupp|illNeeded)|T(?:ermNotOpen|ransfer(?:Err|Rej))|UnknownErr|V(?:TypeNotSupp|alidateFailed))|xt(?:MenuProc|Parser(?:Bad(?:Par(?:amErr|serObjectErr)|T(?:ext(?:EncodingErr|LanguageErr)|okenValueErr))|No(?:MoreT(?:extErr|okensErr)|SuchTokenFoundErr)|ObjectNotFoundErr|ParamErr)))|h(?:eme(?:Bad(?:CursorIndexErr|TextColorErr)|HasNoAccentsErr|InvalidBrushErr|MonitorDepthNotSupportedErr|NoAppropriateBrushErr|Process(?:NotRegisteredErr|RegisteredErr)|ScriptFontNotFoundErr)|read(?:BadAppContextErr|NotFoundErr|ProtocolErr|TooManyReqsErr))|i(?:lde|me(?:Cycle(?:12|24|Zero)|NotIn(?:Media|Track|ViewErr)))|k0BadErr|ls_(?:ciphersuite_(?:AES_(?:128_GCM_SHA256|256_GCM_SHA384)|CHACHA20_POLY1305_SHA256|ECDHE_(?:ECDSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|CHACHA20_POLY1305_SHA256)|RSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:384)?|GCM_SHA384))|CHACHA20_POLY1305_SHA256))|RSA_WITH_(?:3DES_EDE_CBC_SHA|AES_(?:128_(?:CBC_SHA(?:256)?|GCM_SHA256)|256_(?:CBC_SHA(?:256)?|GCM_SHA384)))|group_(?:ats(?:_compatibility)?|compatibility|default|legacy))|protocol_version_(?:DTLSv1(?:0|2)|TLSv1(?:0|1|2|3)))|m(?:foErr|wdoErr)|o(?:g(?:Char(?:12HourBit|ZCycleBit)|Delta12HourBit|gle(?:B(?:ad(?:Char|Delta|Field|Num)|it)|Err(?:3|4|5)|O(?:K|utOfRange)|Un(?:defined|known)))|k(?:DecPoint|E(?:Minus|Plus|scape)|Le(?:ad(?:Placer|er)|ftQuote)|M(?:axSymbols|inusSign)|NonLeader|P(?:ercent|lusSign)|R(?:eserved|ightQuote)|Separator|Thousands|ZeroLead|en(?:1Quote|2(?:Equal|Quote)|A(?:l(?:pha|t(?:Num|Real))|mpersand|sterisk|tSign)|Ba(?:ckSlash|r)|C(?:a(?:pPi|r(?:at|et))|enterDot|o(?:lon(?:Equal)?|mma))|D(?:ivide|ollar)|E(?:llipsis|mpty|qual|rr|scape|xclam(?:Equal)?)|Fraction|Great(?:Equal(?:1|2))?|Hash|In(?:finity|t(?:egral|l(?:Currency)?))|L(?:e(?:ft(?:1Quote|2Quote|Bracket|C(?:omment|urly)|Enclose|Lit|Paren|SingGuillemet)|ss(?:Equal(?:1|2)|Great)?)|iteral)|Mi(?:cro|nus)|N(?:ewLine|il|o(?:BreakSpace|tEqual)|umeric)|O(?:K|verflow)|P(?:er(?:Thousand|cent|iod)|i|lus(?:Minus)?)|Question|R(?:e(?:alNum|serve(?:1|2))|ight(?:1Quote|2Quote|Bracket|C(?:omment|urly)|Enclose|Lit|Paren|SingGuillemet)|oot)|S(?:emicolon|igma|lash)|Tild(?:a|e)|Un(?:derline|known)|White))|oMany(?:Reqs|S(?:eps|kts)))|ra(?:ck(?:IDNotFound|NotInMovie)|shIconResource)|s(?:N(?:extSelectMode|ormalSelectMode)|PreviousSelectMode|m(?:AlreadyRegisteredErr|C(?:ant(?:ChangeForcedClassStateErr|OpenComponentErr)|omponent(?:AlreadyOpenErr|NoErr|Property(?:NotFoundErr|UnsupportedErr)))|D(?:efaultIsNotInputMethodErr|oc(?:NotActiveErr|Property(?:BufferTooSmallErr|NotFoundErr)|umentOpenErr))|In(?:putM(?:ethod(?:IsOldErr|NotFoundErr)|odeChangeFailedErr)|valid(?:Context|DocIDErr))|N(?:everRegisteredErr|o(?:Handler|MoreTokens|OpenTSErr|Stem|tAnAppErr))|ScriptHasNoIMErr|T(?:S(?:HasNoMenuErr|MDocBusyErr|NotOpenErr)|extServiceNotFoundErr)|U(?:n(?:knownErr|sup(?:ScriptLanguageErr|portedTypeErr))|seInputWindowErr)))|t(?:Disabled|Label(?:1|2|3|4|5|6|7)|None|O(?:ffline|pen)|Selected(?:Disabled|O(?:ffline|pen))?)|uneP(?:arseOSErr|layerFullOSErr)|woSideErr|ype(?:128BitFloatingPoint|32BitIcon|4BitIcon|8Bit(?:Icon|Mask)|A(?:E(?:Homograph(?:Accent|DicInfo|Weight)|List|Morpheme(?:PartOfSpeechCode|TextRange)|Record|T(?:E|ext)|UT)|SStorage|TS(?:FontRef|U(?:FontID|Size))|bsoluteOrdinal|lias|pp(?:Parameters|l(?:Signature|e(?:Event|Script)|ication(?:BundleID|URL)))|rc|uditToken)|B(?:est|oo(?:kmarkData|lean)|yte(?:Count|Offset))|C(?:F(?:A(?:bsoluteTime|rrayRef|ttributedStringRef)|BooleanRef|DictionaryRef|Index|Mutable(?:A(?:rrayRef|ttributedStringRef)|DictionaryRef|StringRef)|NumberRef|Range|StringRef|TypeRef)|G(?:ContextRef|Display(?:ChangeFlags|ID)|Float(?:72DPIGlobal|ScreenPixel)?|ImageRef)|String|T(?:Font(?:DescriptorRef|Ref)|GlyphInfoRef)|e(?:ll|ntimeters)|har|l(?:assInfo|ickActivationResult)|o(?:l(?:lection|orTable|umn)|mp(?:Descriptor|onentInstance)|n(?:ceptualTime|trol(?:ActionUPP|FrameMetrics|PartCode|Ref)))|u(?:bic(?:Centimeter|Feet|Inches|Meters|Yards)|rrentContainer))|D(?:CMFi(?:eldAttributes|ndMethod)|a(?:shStyle|ta)|e(?:cimalStruct|grees(?:C|F|K))|ra(?:gRef|wingArea))|E(?:PS|lemInfo|n(?:codedString|umerat(?:ed|ion))|vent(?:HotKeyID|Info|Re(?:cord|f)|Target(?:Options|Ref)))|F(?:MFont(?:Family|S(?:ize|tyle))|S(?:Ref|VolumeRefNum)|alse|eet|i(?:leURL|nderWindow|xed(?:Point|Rectangle)?)|ontColor)|G(?:DHandle|IF|WorldPtr|allons|lyph(?:InfoArray|Selector)|r(?:a(?:fPtr|ms|phic(?:Line|Text))|oupedGraphic))|HI(?:Command|Menu|ObjectRef|Point(?:72DPIGlobal|ScreenPixel)?|Rect(?:72DPIGlobal|ScreenPixel)?|S(?:hapeRef|ize(?:72DPIGlobal|ScreenPixel)?)|Toolbar(?:Display(?:Mode|Size)|ItemRef|Ref)|ViewTrackingAreaRef|Window)|I(?:EEE(?:32BitFloatingPoint|64BitFloatingPoint)|SO8601DateTime|con(?:AndMask|Family)|n(?:ches|d(?:exDescriptor|icatorDragConstraint)|sertionLoc|tl(?:Text|WritingCode)))|JPEG|K(?:e(?:rnelProcessID|yword)|ilo(?:grams|meters))|L(?:A(?:Homograph|Morpheme(?:Bundle|Path)?)|iters|o(?:gicalDescriptor|ng(?:DateTime|Fixed(?:Point|Rectangle)?|Point|Rectangle)|wLevelEventRecord))|M(?:ach(?:Port|ineLoc)|e(?:nu(?:Command|Direction|EventOptions|ItemIndex|Ref|TrackingMode)|ters)|iles|o(?:dalClickResult|use(?:Button|TrackingRef|WheelAxis)))|Null|O(?:S(?:A(?:DialectInfo|ErrorRange|GenericStorage)|LTokenList|Status)|bject(?:BeingExamined|Specifier)|ffsetArray|unces|val)|P(?:String|a(?:ramInfo|steboardRef)|i(?:ct|x(?:MapMinus|elMap))|o(?:lygon|unds)|ro(?:cessSerialNumber|p(?:Info|erty))|tr)|Q(?:D(?:Point|R(?:e(?:ctangle|gion)|gnHandle))|uarts)|R(?:GB(?:16|96|Color)|angeDescriptor|e(?:ctangle|fCon|lative(?:Descriptor|Time)|plyPortAttr)|o(?:tation|undedRectangle|w))|S(?:Int(?:16|32|64)|R(?:Recognizer|SpeechResult)|c(?:r(?:ap(?:Ref|Styles)|ipt)|szResource)|ec(?:IdentityRef|tionH)|ignedByte(?:Count|Offset)|mall(?:32BitIcon|4BitIcon|8Bit(?:Icon|Mask)|IconAndMask)|ound|quare(?:Feet|Kilometers|M(?:eters|iles)|Yards)|tyled(?:Text|UnicodeText)|uiteInfo)|T(?:IFF|able(?:tP(?:oint(?:Rec|erRec)|roximityRec))?|ext(?:Range(?:Array)?|Styles)?|hemeMenu(?:ItemType|State|Type)|oken|rue|ype)|U(?:Int(?:16|32|64)|TF(?:16ExternalRepresentation|8Text)|nicodeText|serRecordFields)|V(?:ersion|oidPtr)|W(?:hose(?:Descriptor|Range)|i(?:ldCard|ndow(?:DefPartCode|Modality|PartCode|Re(?:f|gionCode)|Transition(?:Action|Effect))))|Yards))|u(?:n(?:doDev|i(?:code(?:BufErr|C(?:h(?:arErr|ecksumErr)|ontextualErr)|DirectionErr|ElementErr|FallbacksErr|No(?:TableErr|tFoundErr)|PartConvertErr|T(?:ableFormatErr|extEncodingDataErr)|VariantErr)|mpErr|t(?:EmptyErr|TblFullErr))|known(?:FormatErr|InsertModeErr)|resolvedComponentDLLErr|supported(?:AuxiliaryImportData|ForPlatformErr|OSErr|ProcessorErr))|p(?:d(?:PixMemErr|ate(?:Dev|Evt|Mask))|p(?:C(?:allComponent(?:C(?:anDoProcInfo|loseProcInfo)|Get(?:MPWorkFunctionProcInfo|PublicResourceProcInfo)|OpenProcInfo|RegisterProcInfo|TargetProcInfo|UnregisterProcInfo|VersionProcInfo)|omponent(?:FunctionImplementedProcInfo|SetTargetProcInfo))|GetComponentVersionProcInfo))|rlDataH(?:FTP(?:Bad(?:NameListErr|PasswordErr|UserErr)|DataConnectionErr|FilenameErr|N(?:eedPasswordErr|o(?:DirectoryErr|NetDriverErr|PasswordErr))|P(?:ermissionsErr|rotocolErr)|QuotaErr|S(?:erver(?:DisconnectedErr|Err)|hutdownErr)|URLErr)|HTTP(?:NoNetDriverErr|ProtocolErr|RedirectErr|URLErr))|se(?:A(?:Talk|sync)|ExtClk|Free|MIDI|r(?:Break|CanceledErr|DataItemNotFound|Item|Kind|RejectErr)))|v(?:AxisOnly|LckdErr|Typ(?:Err|e)|a(?:lid(?:DateFields|InstancesExist)|riationFontTableTag)|er(?:A(?:frikaans|lternateGr|r(?:abi(?:a|c)|menia(?:n)?)|ustr(?:alia|ia(?:German)?))|B(?:e(?:l(?:arus|giumLux(?:Point)?)|ngali)|hutan|r(?:azil|eton|it(?:ain|tany))|ulgaria|yeloRussian)|C(?:a(?:nada(?:Comma|Point)|talonia)|hina|roatia|yprus|zech)|Denmark|E(?:astAsiaGeneric|ngCanada|rr|s(?:peranto|tonia))|F(?:a(?:eroeIsl|r(?:EastGeneric|oeIsl))|inland|lemish(?:Point)?|r(?:Belgium(?:Lux)?|Canada|Swiss|ance|enchUniversal))|G(?:e(?:nericFE|orgia(?:n)?|rman(?:Reformed|y))|r(?:Swiss|ee(?:ce(?:Alt|Poly)?|kAncient|nland))|ujarati)|Hungary|I(?:celand|n(?:dia(?:Hindi|Urdu)?|ternational)|r(?:an|eland(?:English)?|ishGaelicScript)|srael|tal(?:ianSwiss|y))|Japan|Korea|L(?:a(?:pland|tvia)|ithuania)|M(?:a(?:cedonia(?:n)?|gyar|lta|nxGaelic|rathi)|ultilingual)|N(?:e(?:pal|therlands(?:Comma)?)|orway|unavut|ynorsk)|P(?:akistan(?:Urdu)?|o(?:land|rtugal)|unjabi)|R(?:omania|u(?:mania|ssia))|S(?:ami|c(?:ottishGaelic|riptGeneric)|erbia(?:n)?|ingapore|lov(?:ak|enia(?:n)?)|p(?:LatinAmerica|ain)|weden)|T(?:aiwan|hailand|ibet(?:an)?|onga|urk(?:ey|ishModified))|U(?:S|kra(?:ine|nia)|nspecified|zbek)|Vietnam|W(?:ales|elsh)|Yugo(?:Croatian|slavia)|variant(?:Denmark|Norway|Portugal))|ideoOutputInUseErr|m(?:AddressNotInFileViewErr|B(?:adDriver|usyBackingFileErr)|FileViewAccessErr|Invalid(?:BackingFileIDErr|FileViewIDErr|OwningProcessErr)|KernelMMUInitErr|M(?:appingPrivilegesErr|emLckdErr|orePhysicalThanVirtualErr)|No(?:More(?:BackingFilesErr|FileViewsErr)|VectorErr)|OffErr)|o(?:iceNotFound|l(?:GoneErr|Mount(?:Changed(?:Bit|Mask)|ExtendedFlags(?:Bit|Mask)|FSReservedMask|Interact(?:Bit|Mask)|NoLoginMsgFlag(?:Bit|Mask)|SysReservedMask)|O(?:ffLinErr|nLinErr)|VMBusyErr)))|w(?:C(?:alcRgns|ontentColor)|D(?:ispose|raw(?:GIcon)?)|FrameColor|Grow|Hi(?:liteColor|t)|In(?:Co(?:llapseBox|ntent)|Drag|G(?:oAway|row)|ProxyIcon|Structure|ToolbarButton|Zoom(?:In|Out))|N(?:ew|oHit)|PrErr|T(?:extColor|itleBarColor)|ack(?:Bad(?:FileErr|MetaDataErr)|ForkNotFoundErr)|eekOfYear(?:Field|Mask)|fFileNotFound|indow(?:A(?:ppModalStateAlreadyExistsErr|ttribute(?:ImmutableErr|sConflictErr))|GroupInvalidErr|ManagerInternalErr|NoAppModalStateErr|WrongStateErr)|r(?:PermErr|Underrun|gVolTypErr|it(?:Err|eReference|ingPastEnd)|ongApplicationPlatform))|y(?:dm|ear(?:Field|Mask)|md)|z(?:eroCycle|oom(?:DocProc|NoGrow)))\\\\b\",\n\t\t\t\"name\": \"support.constant.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFNumberFormatter(?:Currency(?:AccountingStyle|ISOCodeStyle|PluralStyle)|OrdinalStyle)\\\\b\",\n\t\t\t\"name\": \"support.constant.cf.10.11.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFISO8601DateFormatWith(?:ColonSeparatorInTime(?:Zone)?|Da(?:shSeparatorInDate|y)|Full(?:Date|Time)|InternetDateTime|Month|SpaceBetweenDateAndTime|Time(?:Zone)?|WeekOfYear|Year)\\\\b\",\n\t\t\t\"name\": \"support.constant.cf.10.12.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFISO8601DateFormatWithFractionalSeconds\\\\b\",\n\t\t\t\"name\": \"support.constant.cf.10.13.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURLEnumeratorGenerateRelativePathURLs\\\\b\",\n\t\t\t\"name\": \"support.constant.cf.10.15.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFFileSecurityClear(?:AccessControlList|Group(?:UUID)?|Mode|Owner(?:UUID)?)\\\\b\",\n\t\t\t\"name\": \"support.constant.cf.10.8.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CF(?:ByteOrder(?:BigEndian|LittleEndian|Unknown)|NotificationSuspensionBehavior(?:Coalesce|D(?:eliverImmediately|rop)|Hold))|kCF(?:B(?:ookmarkResolutionWithout(?:MountingMask|UIMask)|undleExecutableArchitecture(?:I386|PPC(?:64)?|X86_64))|C(?:alendar(?:ComponentsWrap|Unit(?:Day|Era|Hour|M(?:inute|onth)|Quarter|Second|Week(?:Of(?:Month|Year)|day(?:Ordinal)?)|Year(?:ForWeekOfYear)?))|haracterSet(?:AlphaNumeric|C(?:apitalizedLetter|ontrol)|Dec(?:imalDigit|omposable)|Illegal|L(?:etter|owercaseLetter)|N(?:ewline|onBase)|Punctuation|Symbol|UppercaseLetter|Whitespace(?:AndNewline)?)|ompare(?:Anchored|Backwards|CaseInsensitive|DiacriticInsensitive|EqualTo|ForcedOrdering|GreaterThan|L(?:essThan|ocalized)|N(?:onliteral|umerically)|WidthInsensitive))|Dat(?:aSearch(?:Anchored|Backwards)|eFormatter(?:FullStyle|LongStyle|MediumStyle|NoStyle|ShortStyle))|FileDescriptor(?:ReadCallBack|WriteCallBack)|LocaleLanguageDirection(?:BottomToTop|LeftToRight|RightToLeft|TopToBottom|Unknown)|MessagePort(?:BecameInvalidError|IsInvalid|ReceiveTimeout|S(?:endTimeout|uccess)|TransportError)|N(?:otification(?:DeliverImmediately|PostToAllSessions)|umber(?:C(?:FIndexType|GFloatType|harType)|DoubleType|F(?:loat(?:32Type|64Type|Type)|ormatter(?:CurrencyStyle|DecimalStyle|NoStyle|P(?:a(?:d(?:After(?:Prefix|Suffix)|Before(?:Prefix|Suffix))|rseIntegersOnly)|ercentStyle)|Round(?:Ceiling|Down|Floor|Half(?:Down|Even|Up)|Up)|S(?:cientificStyle|pellOutStyle)))|IntType|Long(?:LongType|Type)|MaxType|NSIntegerType|S(?:Int(?:16Type|32Type|64Type|8Type)|hortType)))|PropertyList(?:BinaryFormat_v1_0|Immutable|MutableContainers(?:AndLeaves)?|OpenStepFormat|Read(?:CorruptError|StreamError|UnknownVersionError)|WriteStreamError|XMLFormat_v1_0)|RunLoop(?:A(?:fterWaiting|llActivities)|Before(?:Sources|Timers|Waiting)|E(?:ntry|xit)|Run(?:Finished|HandledSource|Stopped|TimedOut))|S(?:ocket(?:A(?:cceptCallBack|utomaticallyReenable(?:AcceptCallBack|DataCallBack|ReadCallBack|WriteCallBack))|C(?:loseOnInvalidate|onnectCallBack)|DataCallBack|Error|LeaveErrors|NoCallBack|ReadCallBack|Success|Timeout|WriteCallBack)|tr(?:eam(?:E(?:rrorDomain(?:Custom|MacOSStatus|POSIX)|vent(?:CanAcceptBytes|E(?:ndEncountered|rrorOccurred)|HasBytesAvailable|None|OpenCompleted))|Status(?:AtEnd|Closed|Error|NotOpen|Open(?:ing)?|Reading|Writing))|ing(?:Encoding(?:A(?:NSEL|SCII)|Big5(?:_(?:E|HKSCS_1999))?|CNS_11643_92_P(?:1|2|3)|DOS(?:Arabic|BalticRim|C(?:anadianFrench|hinese(?:Simplif|Trad)|yrillic)|Greek(?:1|2)?|Hebrew|Icelandic|Japanese|Korean|Latin(?:1|2|US)|Nordic|Portuguese|Russian|T(?:hai|urkish))|E(?:BCDIC_(?:CP037|US)|UC_(?:CN|JP|KR|TW))|GB(?:K_95|_(?:18030_2000|2312_80))|HZ_GB_2312|ISO(?:Latin(?:1(?:0)?|2|3|4|5|6|7|8|9|Arabic|Cyrillic|Greek|Hebrew|Thai)|_2022_(?:CN(?:_EXT)?|JP(?:_(?:1|2|3))?|KR))|JIS_(?:C6226_78|X02(?:0(?:1_76|8_(?:83|90))|12_90))|K(?:OI8_(?:R|U)|SC_5601_(?:87|92_Johab))|Mac(?:Ar(?:abic|menian)|B(?:engali|urmese)|C(?:e(?:ltic|ntralEurRoman)|hinese(?:Simp|Trad)|roatian|yrillic)|D(?:evanagari|ingbats)|E(?:thiopic|xtArabic)|Farsi|G(?:aelic|eorgian|reek|u(?:jarati|rmukhi))|H(?:FS|ebrew)|I(?:celandic|nuit)|Japanese|K(?:annada|hmer|orean)|Laotian|M(?:alayalam|ongolian)|Oriya|Roman(?:Latin1|ian)?|S(?:inhalese|ymbol)|T(?:amil|elugu|hai|ibetan|urkish)|Ukrainian|V(?:T100|ietnamese))|N(?:extStep(?:Japanese|Latin)|onLossyASCII)|ShiftJIS(?:_X0213(?:_(?:00|MenKuTen))?)?|U(?:TF(?:16(?:BE|LE)?|32(?:BE|LE)?|7(?:_IMAP)?|8)|nicode)|VISCII|Windows(?:Arabic|BalticRim|Cyrillic|Greek|Hebrew|KoreanJohab|Latin(?:1|2|5)|Vietnamese))|NormalizationForm(?:C|D|K(?:C|D))|Tokenizer(?:AttributeLa(?:nguage|tinTranscription)|Token(?:Has(?:DerivedSubTokensMask|HasNumbersMask|NonLettersMask|SubTokensMask)|IsCJWordMask|No(?:ne|rmal))|Unit(?:LineBreak|Paragraph|Sentence|Word(?:Boundary)?)))))|TimeZoneNameStyle(?:DaylightSaving|Generic|S(?:hort(?:DaylightSaving|Generic|Standard)|tandard))|U(?:RL(?:Bookmark(?:Creation(?:MinimalBookmarkMask|S(?:ecurityScopeAllowOnlyReadAccess|uitableForBookmarkFile)|WithSecurityScope)|ResolutionWith(?:SecurityScope|out(?:MountingMask|UIMask)))|Component(?:Fragment|Host|NetLocation|P(?:a(?:rameterString|ssword|th)|ort)|Query|ResourceSpecifier|Scheme|User(?:Info)?)|Enumerator(?:D(?:e(?:faultBehavior|scendRecursively)|irectoryPostOrderSuccess)|E(?:nd|rror)|GenerateFileReferenceURLs|IncludeDirectoriesP(?:ostOrder|reOrder)|S(?:kip(?:Invisibles|PackageContents)|uccess))|POSIXPathStyle|WindowsPathStyle)|serNotification(?:AlternateResponse|Ca(?:ncelResponse|utionAlertLevel)|DefaultResponse|No(?:DefaultButtonFlag|teAlertLevel)|OtherResponse|PlainAlertLevel|StopAlertLevel|UseRadioButtonsFlag))|XML(?:E(?:ntityType(?:Character|Par(?:ameter|sed(?:External|Internal))|Unparsed)|rror(?:E(?:lementlessDocument|ncodingConversionFailure)|Malformed(?:C(?:DSect|haracterReference|loseTag|omment)|D(?:TD|ocument)|Name|P(?:arsedCharacterData|rocessingInstruction)|StartTag)|NoData|Un(?:expectedEOF|knownEncoding)))|Node(?:CurrentVersion|Type(?:Attribute(?:ListDeclaration)?|C(?:DATASection|omment)|Document(?:Fragment|Type)?|E(?:lement(?:TypeDeclaration)?|ntity(?:Reference)?)|Notation|ProcessingInstruction|Text|Whitespace))|Parser(?:A(?:ddImpliedAttributes|llOptions)|NoOptions|Re(?:placePhysicalEntities|solveExternalEntities)|Skip(?:MetaData|Whitespace)|ValidateDocument)|StatusParse(?:InProgress|NotBegun|Successful))))\\\\b\",\n\t\t\t\"name\": \"support.constant.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bDISPATCH_WALLTIME_NOW\\\\b\",\n\t\t\t\"name\": \"support.constant.clib.10.14.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:FILESEC_(?:ACL(?:_(?:ALLOCSIZE|RAW))?|GR(?:OUP|PUUID)|MODE|OWNER|UUID)|P_(?:ALL|P(?:GID|ID)))\\\\b\",\n\t\t\t\"name\": \"support.constant.clib.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bDISPATCH_BLOCK_(?:ASSIGN_CURRENT|BARRIER|DETACHED|ENFORCE_QOS_CLASS|INHERIT_QOS_CLASS|NO_QOS_CLASS)\\\\b\",\n\t\t\t\"name\": \"support.constant.dispatch.10.10.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bDISPATCH_AUTORELEASE_FREQUENCY_(?:INHERIT|NEVER|WORK_ITEM)\\\\b\",\n\t\t\t\"name\": \"support.constant.dispatch.10.12.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:alphaStage|b(?:etaStage|old)|condense|developStage|extend|finalStage|italic|k(?:NilOptions|UnknownType|VariableLengthArray)|no(?:Err|rmal)|outline|shadow|underline)\\\\b\",\n\t\t\t\"name\": \"support.constant.mac-classic.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bOS(?:BigEndian|LittleEndian|UnknownByteOrder)\\\\b\",\n\t\t\t\"name\": \"support.constant.os.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGImagePixelFormat(?:Mask|Packed|RGB(?:101010|5(?:55|65)|CIF10))\\\\b\",\n\t\t\t\"name\": \"support.constant.quartz.10.14.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bCGPDFTagType(?:A(?:nnotation|rt)|B(?:ibliography|lockQuote)|C(?:aption|ode)|D(?:iv|ocument)|F(?:igure|orm(?:ula)?)|Header(?:1|2|3|4|5|6)?|Index|L(?:abel|i(?:nk|st(?:Body|Item)?))|No(?:nStructure|te)|P(?:ar(?:agraph|t)|rivate)|Quote|R(?:eference|uby(?:AnnotationText|BaseText|Punctuation)?)|S(?:ection|pan)|T(?:OC(?:I)?|able(?:Body|DataCell|Footer|Header(?:Cell)?|Row)?)|Warichu(?:Punctiation|Text)?)\\\\b\",\n\t\t\t\"name\": \"support.constant.quartz.10.15.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CG(?:GlyphM(?:ax|in)|PDFDataFormat(?:JPEG(?:2000|Encoded)|Raw)|RectM(?:ax(?:XEdge|YEdge)|in(?:XEdge|YEdge)))|kCG(?:A(?:nnotatedSessionEventTap|ssistiveTechHighWindowLevelKey)|B(?:a(?:ck(?:ingStore(?:Buffered|Nonretained|Retained)|stopMenuLevelKey)|seWindowLevelKey)|itmap(?:AlphaInfoMask|ByteOrder(?:16(?:Big|Little)|32(?:Big|Little)|Default|Mask)|Float(?:Components|InfoMask))|lendMode(?:C(?:lear|o(?:lor(?:Burn|Dodge)?|py))|D(?:arken|estination(?:Atop|In|O(?:ut|ver))|ifference)|Exclusion|H(?:ardLight|ue)|L(?:ighten|uminosity)|Multiply|Normal|Overlay|Plus(?:Darker|Lighter)|S(?:aturation|creen|o(?:ftLight|urce(?:Atop|In|Out)))|XOR))|C(?:aptureNo(?:Fill|Options)|o(?:lor(?:ConversionTransform(?:ApplySpace|FromSpace|ToSpace)|SpaceModel(?:CMYK|DeviceN|Indexed|Lab|Monochrome|Pattern|RGB|Unknown|XYZ))|nfigure(?:For(?:AppOnly|Session)|Permanently))|ursorWindowLevelKey)|D(?:esktop(?:IconWindowLevelKey|WindowLevelKey)|isplay(?:AddFlag|BeginConfigurationFlag|D(?:esktopShapeChangedFlag|isabledFlag)|EnabledFlag|M(?:irrorFlag|ovedFlag)|RemoveFlag|S(?:etM(?:ainFlag|odeFlag)|tream(?:FrameStatus(?:Frame(?:Blank|Complete|Idle)|Stopped)|Update(?:DirtyRects|MovedRects|Re(?:ducedDirtyRects|freshedRects))))|UnMirrorFlag)|ockWindowLevelKey|raggingWindowLevelKey)|E(?:rror(?:CannotComplete|Failure|I(?:llegalArgument|nvalid(?:Con(?:nection|text)|Operation))|No(?:neAvailable|tImplemented)|RangeCheck|Success|TypeCheck)|vent(?:F(?:ilterMaskPermit(?:Local(?:KeyboardEvents|MouseEvents)|SystemDefinedEvents)|lag(?:Mask(?:Al(?:phaShift|ternate)|Co(?:mmand|ntrol)|Help|N(?:onCoalesced|umericPad)|S(?:econdaryFn|hift))|sChanged))|Key(?:Down|Up)|LeftMouse(?:D(?:own|ragged)|Up)|Mouse(?:Moved|Subtype(?:Default|TabletP(?:oint|roximity)))|Null|OtherMouse(?:D(?:own|ragged)|Up)|RightMouse(?:D(?:own|ragged)|Up)|S(?:crollWheel|ource(?:GroupID|State(?:CombinedSessionState|HIDSystemState|ID|Private)|U(?:nixProcessID|ser(?:Data|ID)))|uppressionState(?:RemoteMouseDrag|SuppressionInterval))|Ta(?:bletP(?:ointer|roximity)|p(?:DisabledBy(?:Timeout|UserInput)|Option(?:Default|ListenOnly))|rget(?:ProcessSerialNumber|UnixProcessID))|UnacceleratedPointerMovement(?:X|Y)))|F(?:loatingWindowLevelKey|ontPostScriptFormatType(?:1|3|42))|G(?:esturePhase(?:Began|C(?:ancelled|hanged)|Ended|MayBegin|None)|radientDraws(?:AfterEndLocation|BeforeStartLocation))|H(?:IDEventTap|e(?:adInsertEventTap|lpWindowLevelKey))|I(?:mage(?:Alpha(?:First|Last|None(?:Skip(?:First|Last))?|Only|Premultiplied(?:First|Last))|ByteOrder(?:16(?:Big|Little)|32(?:Big|Little)|Default|Mask))|nterpolation(?:Default|High|Low|Medium|None))|KeyboardEvent(?:Autorepeat|Key(?:boardType|code))|Line(?:Cap(?:Butt|Round|Square)|Join(?:Bevel|Miter|Round))|M(?:a(?:inMenuWindowLevelKey|ximumWindowLevelKey)|inimumWindowLevelKey|o(?:dalPanelWindowLevelKey|mentumScrollPhase(?:Begin|Continue|End|None)|use(?:Button(?:Center|Left|Right)|Event(?:ButtonNumber|ClickState|Delta(?:X|Y)|InstantMouser|Number|Pressure|Subtype|WindowUnderMousePointer(?:ThatCanHandleThisEvent)?))))|N(?:ormalWindowLevelKey|umberOf(?:EventSuppressionStates|WindowLevelKeys))|OverlayWindowLevelKey|P(?:DF(?:A(?:llows(?:Co(?:mmenting|ntent(?:Accessibility|Copying))|Document(?:Assembly|Changes)|FormFieldEntry|HighQualityPrinting|LowQualityPrinting)|rtBox)|BleedBox|CropBox|MediaBox|ObjectType(?:Array|Boolean|Dictionary|Integer|N(?:ame|ull)|Real|Str(?:eam|ing))|TrimBox)|at(?:h(?:E(?:OFill(?:Stroke)?|lement(?:Add(?:CurveToPoint|LineToPoint|QuadCurveToPoint)|CloseSubpath|MoveToPoint))|Fill(?:Stroke)?|Stroke)|ternTiling(?:ConstantSpacing(?:MinimalDistortion)?|NoDistortion))|opUpMenuWindowLevelKey)|RenderingIntent(?:AbsoluteColorimetric|Default|Perceptual|RelativeColorimetric|Saturation)|S(?:cr(?:een(?:SaverWindowLevelKey|UpdateOperation(?:Move|Re(?:ducedDirtyRectangleCount|fresh)))|oll(?:EventUnit(?:Line|Pixel)|Phase(?:Began|C(?:ancelled|hanged)|Ended|MayBegin)|WheelEvent(?:DeltaAxis(?:1|2|3)|FixedPtDeltaAxis(?:1|2|3)|I(?:nstantMouser|sContinuous)|MomentumPhase|PointDeltaAxis(?:1|2|3)|Scroll(?:Count|Phase))))|essionEventTap|tatusWindowLevelKey)|T(?:a(?:blet(?:Event(?:DeviceID|Point(?:Buttons|Pressure|X|Y|Z)|Rotation|T(?:angentialPressure|ilt(?:X|Y))|Vendor(?:1|2|3))|ProximityEvent(?:CapabilityMask|DeviceID|EnterProximity|Pointer(?:ID|Type)|SystemTabletID|TabletID|Vendor(?:ID|Pointer(?:SerialNumber|Type)|UniqueID)))|ilAppendEventTap)|ext(?:Clip|Fill(?:Clip|Stroke(?:Clip)?)?|Invisible|Stroke(?:Clip)?)|ornOffMenuWindowLevelKey)|UtilityWindowLevelKey|Window(?:Image(?:B(?:estResolution|oundsIgnoreFraming)|Default|NominalResolution|OnlyShadows|ShouldBeOpaque)|List(?:ExcludeDesktopElements|Option(?:All|IncludingWindow|OnScreen(?:AboveWindow|BelowWindow|Only)))|Sharing(?:None|Read(?:Only|Write)))))\\\\b\",\n\t\t\t\"name\": \"support.constant.quartz.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bcl_device_id\\\\b\",\n\t\t\t\"name\": \"support.type.10.10.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:JSTypedArrayType|SecKey(?:Algorithm|KeyExchangeParameter)|os_unfair_lock(?:_t)?)\\\\b\",\n\t\t\t\"name\": \"support.type.10.12.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:A(?:E(?:A(?:ddressDesc|rray(?:Data(?:Pointer)?|Type))|BuildError(?:Code)?|Coerc(?:e(?:Desc(?:ProcPtr|UPP)|Ptr(?:ProcPtr|UPP))|ionHandlerUPP)|D(?:ataStorage(?:Type)?|esc(?:List|Ptr)?|isposeExternal(?:ProcPtr|UPP))|Event(?:Class|Handler(?:ProcPtr|UPP)|ID|Source)|Filter(?:ProcPtr|UPP)|I(?:dle(?:ProcPtr|UPP)|nteractAllowed)|Key(?:Desc|word)|Re(?:cord|moteProcessResolver(?:C(?:allback|ontext)|Ref)?|turnID)|S(?:end(?:Mode|Priority)|treamRef)|TransactionID)|FP(?:AlternateAddress|ServerSignature|TagData|VolMountInfo(?:Ptr)?|XVolMountInfo(?:Ptr)?)|HTOCType|IFFLoop|LMX(?:GlyphEntry|Header)|TS(?:Cu(?:bic(?:C(?:losePath(?:ProcPtr|UPP)|urveTo(?:ProcPtr|UPP))|LineTo(?:ProcPtr|UPP)|MoveTo(?:ProcPtr|UPP))|rveType)|F(?:SSpec|latData(?:Font(?:NameDataHeader|Spec(?:RawNameData(?:Header)?|iferType))|L(?:ayoutControlsDataHeader|ineInfo(?:Data|Header))|MainHeaderBlock|Style(?:List(?:FeatureData|Header|StyleDataHeader|VariationData)|RunDataHeader)|TextLayout(?:DataHeader|Header))|ont(?:A(?:pplierFunction|utoActivationSetting)|Cont(?:ainerRef|ext)|F(?:amily(?:ApplierFunction|Iterator(?:_)?|Ref)|ilter(?:Selector)?|ormat)|Iterator(?:_)?|Metrics|Notif(?:ication(?:InfoRef(?:_)?|Ref(?:_)?)|y(?:Action|Option))|Query(?:Callback|MessageID|SourceContext)|Ref|Size))|G(?:eneration|lyph(?:I(?:dealMetrics|nfoFlags)|Ref|ScreenMetrics|Vector))|Just(?:PriorityWidthDeltaOverrides|WidthDeltaEntryOverride)|L(?:ayoutRecord|ineLayoutOptions)|NotificationCallback|OptionFlags|Point|Quadratic(?:C(?:losePath(?:ProcPtr|UPP)|urve(?:ProcPtr|UPP))|Line(?:ProcPtr|UPP)|NewPath(?:ProcPtr|UPP))|StyleRenderingOptions|Trapezoid|U(?:Attribute(?:Info|Tag|ValuePtr)|Background(?:Color|Data(?:Type)?)|C(?:aret|ur(?:sorMovementType|vePath(?:s)?))|Direct(?:DataSelector|LayoutOperationOverride(?:ProcPtr|UPP))|F(?:latten(?:StyleRunOptions|edDataStreamFormat)|ont(?:F(?:allback(?:Method|s)|eature(?:Selector|Type))|ID|Variation(?:Axis|Value)))|Glyph(?:Info(?:Array)?|Selector)|HighlightMethod|L(?:ayoutOperation(?:CallbackStatus|OverrideSpecifier|Selector)|ine(?:Ref|Truncation))|RGBAlphaColor|Style(?:Comparison|LineCountType|RunInfo|SettingRef)?|T(?:ab(?:Type)?|ext(?:Layout|Measurement))|Un(?:FlattenStyleRunOptions|highlightData)|VerticalCharacterType))|U(?:3DMixer(?:AttenuationCurve|RenderingFlags)|ChannelInfo|D(?:ependentParameter|istanceAttenuationData)|EventListener(?:Block|Proc|Ref)|Graph|Host(?:Identifier|VersionIdentifier)|InputSamplesInOutputCallback(?:Struct)?|ListenerBase|MIDIOutputCallback(?:Struct)?|N(?:ode(?:Connection|Interaction|RenderCallback)?|umVersion)|P(?:arameter(?:EventType|Listener(?:Block|Proc|Ref)|MIDIMapping(?:Flags)?)|reset(?:Event)?)|Re(?:nderCallback(?:Struct)?|verbRoomType)|S(?:ampler(?:BankPresetData|InstrumentData)|cheduledAudioSliceFlags|patial(?:Mixer(?:AttenuationCurve|RenderingFlags)|izationAlgorithm)))|V(?:Audio(?:Integer|SessionErrorCode|UInteger)|L(?:CompareItems(?:ProcPtr|UPP)|DisposeItem(?:ProcPtr|UPP)|ItemSize(?:ProcPtr|UPP)|NodeType|Order|Tree(?:Ptr|Struct)|VisitStage|Walk(?:ProcPtr|UPP)))|X(?:CopyMultipleAttributeOptions|Error|MenuItemModifiers|Observer(?:Callback(?:WithInfo)?|Ref)|Priority|U(?:IElementRef|nderlineStyle)|Value(?:Ref|Type))|l(?:ert(?:Std(?:AlertParam(?:Ptr|Rec)|CFStringAlertParam(?:Ptr|Rec))|T(?:Hndl|Ptr|emplate|ype))|ias(?:Handle|InfoType|Ptr|Record))|n(?:chorPoint(?:Table)?|krTable)|pp(?:Parameters(?:Ptr)?|earance(?:PartCode|RegionCode)|l(?:eEvent(?:Ptr)?|icationSpecificChunk(?:Ptr)?))|reaID|sscEntry|u(?:dio(?:B(?:alanceFade(?:Type)?|uffer(?:List)?|ytePacketTranslation(?:Flags)?)|C(?:hannel(?:Bitmap|CoordinateIndex|Description|Flags|La(?:bel|yout(?:Tag)?))|lass(?:Description|ID)|o(?:dec(?:AppendInput(?:BufferListProc|DataProc)|GetProperty(?:InfoProc|Proc)|InitializeProc|MagicCookieInfo|Pr(?:imeInfo|o(?:duceOutput(?:BufferListProc|PacketsProc)|pertyID))|ResetProc|SetPropertyProc|UninitializeProc)?|mponent(?:Description|F(?:actoryFunction|lags)|Instan(?:ce|tiationOptions)|Method|PlugInInterface|ValidationResult)?|nverter(?:ComplexInputDataProc|InputDataProc|Pr(?:imeInfo|opertyID)|Ref)))|Device(?:I(?:D|O(?:Block|Proc(?:ID)?))|Property(?:ID|ListenerProc))|F(?:ile(?:Component(?:C(?:loseProc|ountUserDataProc|reateURLProc)|ExtensionIsThisFormatProc|FileDataIsThisFormatProc|Get(?:GlobalInfo(?:Proc|SizeProc)|Property(?:InfoProc|Proc)|UserData(?:Proc|SizeProc))|InitializeWithCallbacksProc|Op(?:en(?:URLProc|WithCallbacksProc)|timizeProc)|PropertyID|Re(?:ad(?:BytesProc|Packet(?:DataProc|sProc))|moveUserDataProc)|Set(?:PropertyProc|UserDataProc)|Write(?:BytesProc|PacketsProc))?|F(?:DFTable(?:Extended)?|lags)|ID|Marker(?:List)?|P(?:acketTableInfo|ermissions|ropertyID)|Region(?:Flags|List)?|Stream(?:ID|P(?:arseFlags|roperty(?:Flags|ID))|SeekFlags|_P(?:acketsProc|ropertyListenerProc))|Type(?:AndFormatID|ID)|_(?:GetSizeProc|ReadProc|S(?:MPTE_Time|etSizeProc)|WriteProc))|ormat(?:Flags|I(?:D|nfo)|ListItem|PropertyID)|ramePacketTranslation)|Hardware(?:IOProcStreamUsage|P(?:owerHint|roperty(?:ID|ListenerProc)))|IndependentPacketTranslation|LevelControlTransferFunction|O(?:bject(?:ID|Property(?:Address|Element|Listener(?:Block|Proc)|S(?:cope|elector)))|utputUnitSt(?:art(?:AtTimeParams|Proc)|opProc))|Pa(?:cket(?:DependencyInfoTranslation|R(?:angeByteCountTranslation|ollDistanceTranslation))|nning(?:Info|Mode))|Queue(?:Buffer(?:Ref)?|ChannelAssignment|InputCallback(?:Block)?|LevelMeterState|OutputCallback(?:Block)?|P(?:arameter(?:Event|ID|Value)|ro(?:cessingTap(?:Callback|Flags|Ref)|perty(?:ID|ListenerProc)))|Ref|TimelineRef)|RecordingChunk(?:Ptr)?|S(?:ampleType|e(?:rvices(?:PropertyID|SystemSoundCompletionProc)|ttingsFlags)|tream(?:BasicDescription|ID|P(?:acketDescription|ropertyListenerProc)|RangedDescription))|TimeStamp(?:Flags)?|Unit(?:Add(?:PropertyListenerProc|RenderNotifyProc)|Co(?:coaViewInfo|mplexRenderProc|nnection)|E(?:lement|vent(?:Type)?|xternalBuffer)|FrequencyResponseBin|GetP(?:arameterProc|roperty(?:InfoProc|Proc))|InitializeProc|M(?:IDIControlMapping|eterClipping)|NodeConnection|OtherPluginDesc|P(?:arameter(?:Event|HistoryInfo|I(?:D(?:Name)?|nfo)|NameInfo|Options|StringFromValue|Unit|Value(?:FromString|Name|Translation)?)?|r(?:esetMAS_Setting(?:Data|s)|o(?:cess(?:MultipleProc|Proc)|perty(?:ID|ListenerProc)?)))|Re(?:move(?:PropertyListener(?:Proc|WithUserDataProc)|RenderNotifyProc)|nder(?:ActionFlags|Proc)|setProc)|S(?:ampleType|c(?:heduleParametersProc|ope)|etP(?:arameterProc|ropertyProc))|UninitializeProc)?|Value(?:Range|Translation))|thorization(?:AsyncCallback|E(?:nvironment|xternalForm)|Flags|Item(?:Set)?|OpaqueRef|R(?:ef|ights)|String)))|B(?:T(?:HeaderRec|NodeDescriptor|reeKey(?:Limits)?)|asicWindowDescription|i(?:gEndian(?:Fixed|Long|OSType|Short|U(?:Int32|nsigned(?:Fixed|Long|Short)))|tMap(?:Handle|Ptr)?)|sln(?:Baseline(?:Class|Record)|Format(?:0Part|1Part|2Part|3Part|Union)|Table(?:Format|Ptr)?))|C(?:A(?:BarBeatTime|Clock(?:Beats|ListenerProc|Message|PropertyID|Ref|S(?:MPTEFormat|amples|econds|yncMode)|T(?:empo|ime(?:Format|base)?))|F(?:Audio(?:Description|FormatListItem)|ChunkHeader|DataChunk|F(?:ileHeader|ormatFlags)|In(?:foStrings|strumentChunk)|Marker(?:Chunk)?|Overview(?:Chunk|Sample)|P(?:acketTableHeader|eakChunk|ositionPeak)|Region(?:Chunk|Flags)?|String(?:ID|s)|UMIDChunk|_(?:SMPTE_Time|UUID_ChunkHeader))|MeterTrackEntry|T(?:empoMapEntry|ransform3D))|C(?:Tab(?:Handle|Ptr)|_(?:LONG(?:64)?|MD(?:2(?:_CTX|state_st)|4(?:_CTX|state_st)|5(?:_CTX|state_st))|SHA(?:1(?:_CTX|state_st)|256(?:_CTX|state_st)|512(?:_CTX|state_st))))|E_(?:CrlNumber|D(?:ataType|eltaCrl)|ExtendedKeyUsage|GeneralNameType)|F(?:H(?:TTP(?:AuthenticationRef|MessageRef)|ost(?:ClientC(?:allBack|ontext)|InfoType|Ref))|Net(?:Diagnostic(?:Ref|StatusValues)|Service(?:Browser(?:ClientCallBack|Flags|Ref)|ClientC(?:allBack|ontext)|Monitor(?:ClientCallBack|Ref|Type)|Re(?:f|gisterFlags)|sError)|workErrors)|ProxyAutoConfigurationResultCallback|StreamErrorHTTP(?:Authentication)?)|G(?:Image(?:AnimationStatus|Destination(?:Ref)?|Metadata(?:Errors|Ref|T(?:ag(?:Ref)?|ype))?|PropertyOrientation|Source(?:AnimationBlock|Ref|Status)?)|L(?:C(?:PContextPriorityRequest|ontext(?:Enable|Obj|Parameter))|Error|G(?:PURestartStatus|lobalOption)|OpenGLProfile|P(?:BufferObj|ixelFormat(?:Attribute|Obj))|Renderer(?:InfoObj|Property)|ShareGroup(?:Obj|Rec))|MutableImageMetadataRef|rafP(?:ort|tr))|M(?:2(?:Header|Profile(?:Ptr)?)|4Header|AdaptationMatrixType|B(?:itmap|ufferLocation)|C(?:MY(?:Color|KColor)|oncatProfileSet|urveType)|D(?:at(?:aType|eTime(?:Type)?)|evice(?:Class|Info|Profile(?:Array|Info)|Scope))|F(?:ixedXY(?:Color|ZColor)|l(?:atten(?:ProcPtr|UPP)|oatBitmap(?:Flags)?))|GrayColor|H(?:LSColor|SVColor|andleLocation)|IntentCRDVMSize|L(?:abColor|u(?:t(?:16Type|8Type)|vColor))|M(?:CreateTransformPropertyProc|Info|akeAndModel(?:Type)?|easurementType|ulti(?:Funct(?:CLUTType|Lut(?:A2BType|Type))|LocalizedUniCode(?:EntryRec|Type)|channel(?:5Color|6Color|7Color|8Color)))|Na(?:medColor(?:2(?:EntryType|Type)|Type)?|tiveDisplayInfo(?:Type)?)|P(?:S2CRDVMSizeType|a(?:rametricCurveType|thLocation)|rofile(?:IterateData|Location|SequenceDescType))|RGBColor|S(?:15Fixed16ArrayType|CertificateChainMode|DecoderRef|EncoderRef|Signe(?:dAttributes|rStatus)|creening(?:ChannelRec|Type)|ignatureType)|T(?:ag(?:ElemTable|Record)|ext(?:DescriptionType|Type))|U(?:16Fixed16ArrayType|Int(?:16ArrayType|32ArrayType|64ArrayType|8ArrayType)|crBgType|nicodeTextType)|Vi(?:deoCardGamma(?:Formula|T(?:able|ype))?|ewingConditionsType)|XYZ(?:Co(?:lor|mponent)|Type)|YxyColor)|QDProcs(?:Ptr)?|S(?:ComponentsThreadMode|DiskSpaceRecovery(?:Callback|Options)|Identity(?:AuthorityRef|Cl(?:ass|ientContext)|Flags|Query(?:ClientContext|Event|Flags|Re(?:ceiveEventCallback|f)|StringComparisonMethod)|Ref|StatusUpdatedCallback)|SM_(?:A(?:C(?:L_(?:AUTHORIZATION_TAG|EDIT_MODE|HANDLE|KEYCHAIN_PROMPT_SELECTOR|PR(?:EAUTH_TRACKING_STATE|OCESS_SUBJECT_SELECTOR)|SUBJECT_TYPE)|_HANDLE)|LGORITHMS|PPLE(?:CSPDL_DB_(?:CHANGE_PASSWORD_PARAMETERS(?:_PTR)?|IS_LOCKED_PARAMETERS(?:_PTR)?|SETTINGS_PARAMETERS(?:_PTR)?)|DL_OPEN_PARAMETERS(?:_PTR)?|_(?:CL_CSR_REQUEST|TP_(?:ACTION_(?:DATA|FLAGS)|C(?:ERT_REQUEST|RL_OPT(?:IONS|_FLAGS))|NAME_OID|S(?:MIME_OPTIONS|SL_OPTIONS))))|TT(?:ACH_FLAGS|RIBUTE_TYPE))|B(?:ER_TAG|ITMASK|OOL)|C(?:ALLOC|C_HANDLE|ERT(?:GROUP_TYPE(?:_PTR)?|_(?:BUNDLE_(?:ENCODING|TYPE)|ENCODING(?:_PTR)?|PARSE_FORMAT(?:_PTR)?|TYPE(?:_PTR)?))|L_(?:HANDLE|TEMPLATE_TYPE)|ONTEXT_(?:EVENT|TYPE)|RL(?:GROUP_TYPE(?:_PTR)?|_(?:ENCODING(?:_PTR)?|PARSE_FORMAT(?:_PTR)?|TYPE(?:_PTR)?))|SP(?:TYPE|_(?:FLAGS|HANDLE|READER_FLAGS)))|D(?:B_(?:A(?:CCESS_TYPE(?:_PTR)?|TTRIBUTE_(?:FORMAT(?:_PTR)?|NAME_FORMAT(?:_PTR)?))|CONJUNCTIVE(?:_PTR)?|HANDLE|INDEX(?:ED_DATA_LOCATION|_TYPE)|MODIFY_MODE|OPERATOR(?:_PTR)?|RE(?:CORDTYPE|TRIEVAL_MODES))|L(?:TYPE(?:_PTR)?|_(?:CUSTOM_ATTRIBUTES|FFS_ATTRIBUTES|HANDLE|LDAP_ATTRIBUTES|ODBC_ATTRIBUTES|PKCS11_ATTRIBUTE(?:_PTR)?)))|E(?:NCRYPT_MODE|VIDENCE_FORM)|FREE|H(?:ANDLE(?:_PTR)?|EADERVERSION)|INTPTR|K(?:EY(?:ATTR_FLAGS|BLOB_(?:FORMAT|TYPE)|CLASS|USE|_(?:HIERARCHY|TYPE))|R(?:SP_HANDLE|_POLICY_(?:FLAGS|TYPE)))|L(?:IST_(?:ELEMENT_(?:PTR|TYPE(?:_PTR)?)|TYPE(?:_PTR)?)|ONG_HANDLE(?:_PTR)?)|M(?:A(?:LLOC|NAGER_EVENT_TYPES)|ODULE_(?:EVENT(?:_PTR)?|HANDLE(?:_PTR)?))|NET_(?:ADDRESS_TYPE|PROTOCOL)|P(?:ADDING|KCS(?:5_PBKDF2_PRF|_OAEP_(?:MGF|PSOURCE))|R(?:IVILEGE(?:_SCOPE)?|OC_ADDR(?:_PTR)?)|VC_MODE)|QUERY_FLAGS|RE(?:ALLOC|TURN)|S(?:AMPLE_TYPE|C_FLAGS|ERVICE_(?:MASK|TYPE)|IZE|TRING)|T(?:IMESTRING|P_(?:A(?:CTION|PPLE_(?:CERT_STATUS|EVIDENCE_HEADER)|UTHORITY_REQUEST_TYPE(?:_PTR)?)|C(?:ERT(?:CHANGE_(?:ACTION|REASON|STATUS)|ISSUE_STATUS|NOTARIZE_STATUS|RECLAIM_STATUS|VERIFY_STATUS)|ONFIRM_STATUS(?:_PTR)?|RLISSUE_STATUS)|FORM_TYPE|HANDLE|S(?:ERVICES|TOP_ON)))|USEE_TAG|WORDID_TYPE|X509(?:EXT_DATA_FORMAT|_OPTION))|pecArray)|T(?:CharacterCollection|F(?:ont(?:Collection(?:CopyOptions|Ref|SortDescriptorsCallback)|Descriptor(?:MatchingState|Ref)|Format|Manager(?:AutoActivationSetting|Error|Scope)|O(?:ptions|rientation)|Priority|Ref|S(?:tylisticClass|ymbolicTraits)|Table(?:Options|Tag)|UIFontType)|rame(?:P(?:athFillRule|rogression)|Ref|setterRef))|GlyphInfoRef|Line(?:B(?:oundsOptions|reakMode)|Ref|TruncationType)|MutableFontCollectionRef|ParagraphStyle(?:Ref|S(?:etting|pecifier))|Ru(?:by(?:A(?:lignment|nnotationRef)|Overhang|Position)|n(?:Delegate(?:Callbacks|DeallocateCallback|Get(?:AscentCallback|DescentCallback|WidthCallback)|Ref)|Ref|Status))|T(?:ext(?:Alignment|TabRef)|ypesetterRef)|UnderlineStyle(?:Modifiers)?|WritingDirection|ab(?:Handle|Ptr))|V(?:AttachmentMode|BufferRef|DisplayLink(?:Output(?:Callback|Handler)|Ref)|FillExtendedPixelsCallBack(?:Data)?|ImageBufferRef|Op(?:enGL(?:Buffer(?:PoolRef|Ref)|Texture(?:CacheRef|Ref))|tionFlags)|P(?:ixelBuffer(?:LockFlags|Pool(?:FlushFlags|Ref)|Re(?:f|lease(?:BytesCallback|PlanarBytesCallback)))|lanar(?:ComponentInfo|PixelBufferInfo(?:_YCbCr(?:BiPlanar|Planar))?))|Return|SMPTETime(?:Flags|Type)?|Time(?:Flags|Stamp(?:Flags)?)?)|a(?:l(?:ibrat(?:e(?:Event(?:ProcPtr|UPP)|ProcPtr|UPP)|orInfo)|lingConventionType)|nCalibrate(?:ProcPtr|UPP)|retHook(?:ProcPtr|UPP)|tPositionRec)|ell|h(?:ar(?:ByteTable|s(?:Handle|Ptr)?)|unkHeader)|lickActivationResult|o(?:l(?:l(?:atorRef|ection(?:Exception(?:ProcPtr|UPP)|Flatten(?:ProcPtr|UPP)|Tag)?)|or(?:C(?:hangedUPP|omplement(?:ProcPtr|UPP))|S(?:earch(?:ProcPtr|UPP)|pec(?:Ptr)?|ync(?:AlphaInfo|CMM(?:Ref)?|Data(?:Depth|Layout)|M(?:D5|utableProfileRef)|Profile(?:Ref)?|Transform(?:Ref)?))|Table))|m(?:m(?:ent(?:Type|sChunk(?:Ptr)?)?|onChunk(?:Ptr)?)|ponent(?:AliasResource|Description|FunctionUPP|Instance(?:Record)?|MPWorkFunction(?:HeaderRecord(?:Ptr)?|ProcPtr|UPP)|P(?:arameters|latformInfo(?:Array)?)|R(?:e(?:cord|s(?:ource(?:Extension|Handle|Ptr)?|ult))|outine(?:ProcPtr|UPP)))?)|n(?:st(?:ATSUAttributeValuePtr|FS(?:EventStreamRef|SpecPtr)|HFSUniStr255Param|ScriptCodeRunPtr|Text(?:EncodingRunPtr|Ptr|ToUnicodeInfo)|Uni(?:CharArrayPtr|code(?:MappingPtr|ToTextInfo)))|t(?:ainerChunk|extualMenuInterfaceStruct|rol(?:Action(?:ProcPtr|UPP)|B(?:evel(?:Button(?:Behavior|Menu(?:Behavior|Placement))|Thickness)|utton(?:ContentInfo(?:Ptr)?|GraphicAlignment|Text(?:Alignment|Placement)))|C(?:lock(?:Flags|Type)|ontentType)|DisclosureTriangleOrientation|EditText(?:Selection(?:Ptr|Rec)|Validation(?:ProcPtr|UPP))|Fo(?:cusPart|ntStyle(?:Ptr|Rec))|Handle|I(?:D|mageContentInfo(?:Ptr)?)|K(?:ey(?:Filter(?:ProcPtr|Result|UPP)|ScriptBehavior)|ind)|P(?:artCode|opupArrow(?:Orientation|Size)|ushButtonIconAlignment)|R(?:ef|oundButtonSize)|S(?:ize|liderOrientation)|T(?:ab(?:Direction|Entry|InfoRec(?:V1)?|Size)|emplate(?:Handle|Ptr)?)|UserPane(?:Activate(?:ProcPtr|UPP)|Draw(?:ProcPtr|UPP)|Focus(?:ProcPtr|UPP)|HitTest(?:ProcPtr|UPP)|Idle(?:ProcPtr|UPP)|KeyDown(?:ProcPtr|UPP)|Tracking(?:ProcPtr|UPP))|Variant)))|reEndianFlipProc|untUserDataFDF)|tlCTab|ustomBadgeResource(?:Handle|Ptr)?)|D(?:A(?:ApprovalSessionRef|DiskRef|SessionRef)|C(?:M(?:AccessMethod(?:Feature|I(?:D|terator))|Dictionary(?:Header|I(?:D|terator)|Ref|StreamRef)|F(?:i(?:eld(?:Attributes|T(?:ag|ype))|ndMethod)|oundRecordIterator)|Object(?:I(?:D|terator)|Ref)|ProgressFilter(?:ProcPtr|UPP)|UniqueID)|SDictionaryRef)|ER(?:Byte|Item|Size)|I(?:TLMethod|nfo)|R(?:AudioTrackRef|BurnRef|CDTextBlockRef|DeviceRef|EraseRef|F(?:SObjectRef|ile(?:Fork(?:Index|Size(?:Info|Query))|Message|Pro(?:c|ductionInfo)|Ref|system(?:Mask|TrackRef))|olderRef)|LinkType|NotificationC(?:allback|enterRef)|RefCon(?:Callbacks|Re(?:leaseCallback|tainCallback))|T(?:rack(?:CallbackProc|Message|ProductionInfo|Ref)|ypeRef))|XInfo|at(?:a(?:Array|Browser(?:A(?:cce(?:ptDrag(?:ProcPtr|UPP)|ssibilityItemInfo(?:V(?:0|1))?)|ddDragItem(?:ProcPtr|UPP))|C(?:allbacks|ustomCallbacks)|Dra(?:gFlags|wItem(?:ProcPtr|UPP))|Edit(?:Command|Item(?:ProcPtr|UPP))|GetContextualMenu(?:ProcPtr|UPP)|HitTest(?:ProcPtr|UPP)|Item(?:AcceptDrag(?:ProcPtr|UPP)|Compare(?:ProcPtr|UPP)|D(?:ata(?:ProcPtr|Ref|UPP)|ragRgn(?:ProcPtr|UPP))|HelpContent(?:ProcPtr|UPP)|ID|Notification(?:ProcPtr|UPP|WithItem(?:ProcPtr|UPP))?|ProcPtr|ReceiveDrag(?:ProcPtr|UPP)|State|UPP)|ListView(?:ColumnDesc|HeaderDesc|PropertyFlags)|Metric|P(?:ostProcessDrag(?:ProcPtr|UPP)|roperty(?:Desc|Flags|ID|Part|Type))|Re(?:ceiveDrag(?:ProcPtr|UPP)|vealOptions)|S(?:e(?:lect(?:ContextualMenu(?:ProcPtr|UPP)|ion(?:AnchorDirection|Flags))|tOption)|ortOrder)|T(?:ableView(?:Column(?:Desc|I(?:D|ndex))|HiliteStyle|PropertyFlags|RowIndex)|racking(?:ProcPtr|Result|UPP))|ViewStyle)|Handle|Ptr)|e(?:Cache(?:Ptr|Record)|Delta|Form|Orders|TimeRec))|e(?:bug(?:AssertOutputHandler(?:ProcPtr|UPP)|ComponentCallback(?:ProcPtr|UPP)|ger(?:DisposeThread(?:ProcPtr|TPP|UPP)|NewThread(?:ProcPtr|TPP|UPP)|ThreadScheduler(?:ProcPtr|TPP|UPP)))|ferredTask(?:P(?:rocPtr|tr)|UPP)?|lim(?:Type|iterInfo)|s(?:cType|kHook(?:ProcPtr|UPP)))|ialog(?:Item(?:Index(?:ZeroBased)?|Type)|P(?:lacementSpec|tr)|Ref|T(?:Hndl|Ptr|emplate))|o(?:Get(?:FileTranslationListProcPtr|ScrapTranslationListProcPtr|TranslatedFilenameProcPtr)|Identify(?:FileProcPtr|ScrapProcPtr)|Translate(?:FileProcPtr|ScrapProcPtr)|cOpenMethod)|ra(?:g(?:A(?:ctions|ttributes)|Behaviors|Constraint|Drawing(?:ProcPtr|UPP)|GrayRgn(?:ProcPtr|UPP)|I(?:mageFlags|nput(?:ProcPtr|UPP)|temRef)|Re(?:ceiveHandler(?:ProcPtr|UPP)|f(?:erence)?|gionMessage)|SendData(?:ProcPtr|UPP)|Tracking(?:Handler(?:ProcPtr|UPP)|Message))|wHook(?:ProcPtr|UPP)))|E(?:OLHook(?:ProcPtr|UPP)|ditUnicodePostUpdate(?:ProcPtr|UPP)|v(?:Cmd|QEl(?:Ptr)?|ent(?:Attributes|C(?:lass(?:ID)?|omparator(?:ProcPtr|UPP))|H(?:andler(?:CallRef|ProcPtr|Ref|UPP)|otKey(?:ID|Ref))|Kind|Loop(?:IdleTimer(?:Message|ProcPtr|UPP)|Ref|Timer(?:ProcPtr|Ref|UPP))|M(?:ask|o(?:difiers|use(?:Button|WheelAxis)))|P(?:aram(?:Name|Type)|riority)|QueueRef|Re(?:cord|f)|T(?:argetRef|ime(?:out|rInterval)?|ype(?:Spec)?)))|x(?:ception(?:Handler(?:ProcPtr|TPP|UPP)?|Info(?:rmation(?:PowerPC)?)?|Kind)|t(?:AudioFile(?:PropertyID|Ref)|Com(?:monChunk(?:Ptr)?|ponentResource(?:Handle|Ptr)?)|ended(?:AudioFormatInfo|ControlEvent|F(?:ileInfo|olderInfo)|NoteOnEvent|TempoEvent))))|F(?:CFontDescriptorRef|I(?:LE|nfo)|KEY(?:ProcPtr|UPP)|M(?:F(?:ilter(?:Selector)?|ont(?:CallbackFilter(?:ProcPtr|UPP)|DirectoryFilter|Family(?:CallbackFilter(?:ProcPtr|UPP)|I(?:nstance(?:Iterator)?|terator))?|Iterator|S(?:ize|tyle))?)|Generation|Input)|N(?:Message|Subscription(?:ProcPtr|Ref|UPP))|P(?:RegIntel|UInformation(?:Intel64|PowerPC)?)|S(?:Al(?:ias(?:FilterProcPtr|Info(?:Bitmap|Ptr)?)|locationFlags)|Catalog(?:BulkParam(?:Ptr)?|Info(?:Bitmap|Ptr)?)|E(?:jectStatus|ventStream(?:C(?:allback|ontext|reateFlags)|Event(?:Flags|Id)|Ref))|F(?:ile(?:Operation(?:ClientContext|Ref|Sta(?:ge|tusProcPtr))|SecurityRef)|ork(?:CBInfoParam(?:Ptr)?|I(?:OParam(?:Ptr)?|nfo(?:Flags|Ptr)?)))|I(?:ORefNum|terator(?:Flags)?)|MountStatus|P(?:athFileOperationStatusProcPtr|ermissionInfo)|R(?:angeLockParam(?:Ptr)?|ef(?:ForkIOParam(?:Ptr)?|P(?:aram(?:Ptr)?|tr))?)|S(?:earchParams(?:Ptr)?|pec(?:ArrayPtr|Handle|Ptr)?)|UnmountStatus|Volume(?:Eject(?:ProcPtr|UPP)|Info(?:Bitmap|P(?:aram(?:Ptr)?|tr))?|Mount(?:ProcPtr|UPP)|Operation|RefNum|Unmount(?:ProcPtr|UPP)))|Vector|XInfo|amRec|ile(?:Info|T(?:ranslation(?:List(?:Handle|Ptr)?|Spec(?:Array(?:Handle|Ptr))?)|ype(?:Spec)?))|lavor(?:Flags|Type)|ndr(?:DirInfo|Extended(?:DirInfo|FileInfo)|FileInfo|OpaqueInfo)|o(?:lder(?:Class|Desc(?:Flags|Ptr)?|Info|Location|ManagerNotification(?:ProcPtr|UPP)|Routing(?:Ptr)?|Type)|nt(?:Assoc|Info|LanguageCode|NameCode|PlatformCode|Rec(?:Hdl|Ptr)?|S(?:criptCode|electionQDStyle(?:Ptr)?)|Variation)|rmat(?:Class|ResultType|Status|VersionChunk(?:Ptr)?)))|G(?:D(?:Handle|Ptr|evice)|L(?:b(?:itfield|oolean|yte)|c(?:har(?:ARB)?|lamp(?:d|f))|double|enum|f(?:ixed|loat)|ha(?:lf(?:ARB)?|ndleARB)|int(?:64(?:EXT)?|ptr(?:ARB)?)?|s(?:hort|izei(?:ptr(?:ARB)?)?|ync)|u(?:byte|int(?:64(?:EXT)?)?|short)|void)|NEFilterUPP|World(?:Flags|Ptr)|e(?:nericID|t(?:GrowImageRegionRec|MissingComponentResource(?:ProcPtr|UPP)|NextEventFilter(?:ProcPtr|UPP)|Property(?:FDF|InfoFDF)|ScrapData(?:ProcPtr|UPP)?|UserData(?:FDF|SizeFDF)|VolParmsInfoBuffer|WindowRegion(?:Ptr|Rec(?:Ptr)?)))|lyph(?:Collection|ID)|raf(?:P(?:ort|tr)|Verb))|H(?:FS(?:Catalog(?:F(?:ile|older)|Key|NodeID|Thread)|Extent(?:Descriptor|Key|Record)|Flavor|MasterDirectoryBlock|Plus(?:Attr(?:Data|Extents|ForkData|InlineData|Key|Record)|BSDInfo|Catalog(?:F(?:ile|older)|Key|Thread)|Extent(?:Descriptor|Key|Record)|ForkData|VolumeHeader)|UniStr255)|I(?:A(?:rchiveRef|xis(?:Position|Scale))|Binding(?:Kind)?|Co(?:mmand(?:Extended)?|ntentBorderMetrics|ordinateSpace)|DelegatePosition|ImageViewAutoTransformOptions|LayoutInfo|M(?:odalClickResult|utableShapeRef)|Object(?:ClassRef|Ref)|Po(?:int|sition(?:Kind|ing))|Rect|S(?:c(?:al(?:eKind|ing)|roll(?:BarTrackInfo|ViewAction))|egmentBehavior|hape(?:EnumerateProcPtr|Ref)|i(?:deBinding|ze))|T(?:heme(?:Animation(?:FrameInfo|TimeInfo)|B(?:ackgroundDrawInfo(?:Ptr)?|uttonDrawInfo(?:Ptr)?)|ChasingArrowsDrawInfo(?:Ptr)?|F(?:ocusRing|rame(?:DrawInfo(?:Ptr)?|Kind))|Gr(?:abberDrawInfo(?:Ptr)?|o(?:upBox(?:DrawInfo(?:Ptr)?|Kind)|wBox(?:DrawInfo(?:Ptr)?|Kind|Size)))|Header(?:DrawInfo(?:Ptr)?|Kind)|Menu(?:BarDrawInfo(?:Ptr)?|DrawInfo(?:Ptr|VersionZero(?:Ptr)?)?|ItemDrawInfo(?:Ptr)?|TitleDrawInfo(?:Ptr)?)|Orientation|P(?:lacardDrawInfo(?:Ptr)?|opupArrowDrawInfo(?:Ptr)?)|S(?:crollBarDelimitersDrawInfo(?:Ptr)?|e(?:gment(?:Adornment|DrawInfo(?:Ptr)?|Kind|Position|Size)|paratorDrawInfo(?:Ptr)?)|plitter(?:Adornment|DrawInfo(?:Ptr)?))|T(?:ab(?:Adornment|DrawInfo(?:VersionZero)?|Kind|P(?:ane(?:Adornment|DrawInfo(?:VersionZero)?)|osition)|Size)|ext(?:BoxOptions|HorizontalFlush|Info|Truncation|VerticalFlush)|ickMarkDrawInfo(?:Ptr)?|rackDrawInfo)|Window(?:DrawInfo(?:Ptr)?|WidgetDrawInfo(?:Ptr)?))|oolbar(?:Display(?:Mode|Size)|ItemRef|Ref)|ypeAndCreator)|View(?:Content(?:Info(?:Ptr)?|Type)|F(?:eatures|rameMetrics)|I(?:D|mageContent(?:Info|Type))|Kind|PartCode|Ref|TrackingArea(?:ID|Ref)|ZOrderOp)|Window(?:Availability|BackingLocation|Depth|Ref|S(?:caleMode|haringType)))|M(?:Cont(?:ent(?:ProvidedType|Request|Type)|rolContent(?:ProcPtr|UPP))|HelpContent(?:Ptr|Rec)?|Menu(?:ItemContent(?:ProcPtr|UPP)|TitleContent(?:ProcPtr|UPP))|StringResType|TagDisplaySide|WindowContent(?:ProcPtr|UPP)|enuBar(?:Header|Menu))|i(?:ghHook(?:ProcPtr|UPP)|liteMenuItemData(?:Ptr)?|tTestHook(?:ProcPtr|UPP))|o(?:mograph(?:Accent|DicInfoRec|Weight)|stCallback(?:Info|_Get(?:BeatAndTempo|MusicalTimeLocation|TransportState(?:2)?))))|I(?:BNibRef|C(?:A(?:ppSpec(?:Handle|List(?:Handle|Ptr)?|Ptr)?|ttr)|CharTable(?:Handle|Ptr)?|F(?:i(?:leSpec(?:Handle|Ptr)?|xedLength)|ontRecord(?:Handle|Ptr)?)|Instance|MapEntry(?:Flags|Handle|Ptr)?|P(?:erm|rofileID(?:Ptr)?)|Service(?:Entry(?:Flags|Handle|Ptr)?|s(?:Handle|Ptr)?))|O(?:A(?:ddressRange|lignment|ppleTimingID|syncC(?:allback(?:0|1|2)?|ompletionContent))|ByteCount(?:32|64)?|C(?:acheMode|o(?:lor(?:Component|Entry)|mpletion(?:ProcPtr|UPP)))|D(?:e(?:tailedTimingInformation(?:V(?:1|2))?|viceNumber)|isplay(?:ModeI(?:D|nformation)|ProductID|ScalerInformation|TimingRange(?:V(?:1|2))?|VendorID))|F(?:B(?:D(?:PLinkConfig|isplayModeDescription)|HDRMetaData(?:V1)?)|ixed(?:1616|Point32)?|ramebufferInformation)|G(?:Bounds|Point|Size)|HardwareCursor(?:Descriptor|Info)|I(?:ndex|temCount)|LogicalAddress|N(?:amedValue|otificationPort(?:Ref)?)|OptionBits|P(?:hysical(?:Address(?:32|64)?|Length(?:32|64)?|Range)|ixel(?:Aperture|Encoding|Information))|Return|S(?:e(?:lect|rvice(?:InterestC(?:allback|ontent(?:64)?)|MatchingCallback))|urface(?:Component(?:Name|Range|Type)|ID|LockOptions|PurgeabilityState|Ref|Subsampling))|TimingInformation|V(?:ersion|irtual(?:Address|Range)))|SAType|con(?:A(?:ction(?:ProcPtr|UPP)|lignmentType)|Family(?:Element|Handle|Ptr|Resource)|Getter(?:ProcPtr|UPP)|Ref|Se(?:lectorValue|rvicesUsageFlags)|TransformType)|n(?:d(?:exToUCString(?:ProcPtr|UPP)|icatorDragConstraint(?:Ptr)?)|strumentChunk(?:Ptr)?|t(?:erfaceTypeList|l(?:0(?:Hndl|Ptr|Rec)|1(?:Hndl|Ptr|Rec)|Text)))|t(?:emReference|l(?:1ExtRec|4(?:Handle|Ptr|Rec)|5Record|b(?:ExtRecord|Record)|cRecord)))|J(?:S(?:C(?:har|lass(?:Attributes|Definition|Ref)|ontext(?:GroupRef|Ref))|GlobalContextRef|Object(?:C(?:allAs(?:ConstructorCallback|FunctionCallback)|onvertToTypeCallback)|FinalizeCallback|GetProperty(?:Callback|NamesCallback)|InitializeCallback|Ref)|Property(?:Attributes|NameA(?:ccumulatorRef|rrayRef))|St(?:atic(?:Function|Value)|ringRef)|Type(?:dArrayBytesDeallocator)?|ValueRef)|apanesePartOfSpeech|ournalInfoBlock|ust(?:DirectionTable|P(?:C(?:Action(?:Subrecord|Type)?|ConditionalAddAction|D(?:ecompositionAction|uctilityAction)|GlyphRepeatAddAction|UnconditionalAddAction)|ostcompTable)|Table|WidthDelta(?:Entry|Group)|ificationFlags))|K(?:C(?:A(?:ttr(?:Type|ibute(?:List)?)|uthType)|C(?:allback(?:Info|ProcPtr|UPP)|ert(?:AddOptions|SearchOptions))|Event(?:Mask)?|Item(?:Attr|Class|Ref)|P(?:rotocolType|ublicKeyHash)|Ref|S(?:earchRef|tatus)|VerifyStopOn)|e(?:r(?:n(?:ArrayOffset|Entry|FormatSpecificHeader|IndexArrayHeader|Kerning(?:Pair|Value)|O(?:ffsetTable(?:Ptr)?|rderedList(?:Entry(?:Ptr)?|Header))|Pair|S(?:impleArrayHeader|tate(?:Entry|Header)|ubtable(?:Header(?:Ptr)?|Info))|Table(?:Format|Header(?:Handle|Ptr)?)?|Version0(?:Header|SubtableHeader))|x(?:A(?:nchorPointAction|rrayOffset)|Co(?:ntrolPoint(?:Action|Entry|Header)|ordinateAction)|FormatSpecificHeader|IndexArrayHeader|KerningPair|OrderedList(?:Entry(?:Ptr)?|Header)|S(?:impleArrayHeader|tate(?:Entry|Header)|ubtable(?:Coverage|Header(?:Ptr)?))|TableHeader(?:Handle|Ptr)?))|y(?:Map(?:ByteArray)?|boardLayout(?:Identifier|Kind|PropertyTag|Ref))))|L(?:A(?:ContextRef|EnvironmentRef|Homograph|Morpheme(?:Bundle|Path|Rec|sArray(?:Ptr)?)?|Property(?:Key|Type))|H(?:Element|Handle|Ptr|Table)|LCStyleInfo|S(?:A(?:cceptanceFlags|pplicationParameters)|HandlerOptions|ItemInfo(?:Flags|Record)|Launch(?:F(?:SRefSpec|lags)|URLSpec)|R(?:equestedInfo|olesMask)|SharedFileList(?:ChangedProcPtr|ItemRef|Re(?:f|solutionFlags)))|aunch(?:Flags|P(?:BPtr|aramBlockRec))|carCaret(?:ClassEntry|Table(?:Ptr)?)|ist(?:Bounds|ClickLoop(?:ProcPtr|UPP)|Def(?:ProcPtr|Spec(?:Ptr)?|Type|UPP)|Handle|Ptr|Re(?:c|f)|Search(?:ProcPtr|UPP))|o(?:cal(?:DateTime(?:Handle|Ptr)?|e(?:AndVariant|NameMask|Operation(?:Class|Variant)|PartMask|Ref))|ngDate(?:Cvt|Field|Rec|Time))|tag(?:StringRange|Table))|M(?:BarHook(?:ProcPtr|UPP)|C(?:Entry(?:Ptr)?|Table(?:Handle|Ptr)?)|D(?:EF(?:Draw(?:Data(?:Ptr)?|ItemsData(?:Ptr)?)|FindItemData(?:Ptr)?|HiliteItemData(?:Ptr)?)|ItemRef|Label(?:Domain|Ref)|Query(?:BatchingParams|Create(?:ResultFunction|ValueFunction)|OptionFlags|Ref|Sort(?:ComparatorFunction|OptionFlags))|S_HANDLE)|IDI(?:C(?:hannelMessage|lientRef|ompletionProc)|D(?:ataChunk(?:Ptr)?|eviceRef)|En(?:dpointRef|tityRef)|IOErrorNotification|MetaEvent|Not(?:eMessage|if(?:ication(?:MessageID)?|y(?:Block|Proc)))|Object(?:AddRemoveNotification|PropertyChangeNotification|Ref|Type)|P(?:acket(?:List)?|ortRef)|R(?:awData|ead(?:Block|Proc))|SysexSendRequest|TimeStamp|UniqueID)|P(?:A(?:ddressSpaceI(?:D|nfo)|reaID)|C(?:o(?:herenceID|nsoleID)|puID|riticalRegionI(?:D|nfo))|DebuggerLevel|E(?:G4ObjectID|vent(?:Flags|I(?:D|nfo))|xceptionKind)|IsFullyInitializedProc|NotificationI(?:D|nfo)|OpaqueID(?:Class)?|P(?:ageSizeClass|rocessID)|QueueI(?:D|nfo)|Remote(?:Context|Procedure)|Semaphore(?:Count|I(?:D|nfo))|T(?:ask(?:I(?:D|nfo(?:Version2)?)|Options|StateKind|Weight)|imerID))|a(?:c(?:Polygon|hine(?:Information(?:Intel64|PowerPC)?|Location))|gicCookieInfo|rker(?:Chunk(?:Ptr)?|IdType)?)|e(?:asureWindowTitleRec(?:Ptr)?|mory(?:ExceptionInformation|ReferenceKind)|nu(?:Attributes|Bar(?:Def(?:ProcPtr|UPP)|H(?:andle|eader)|Menu)|C(?:Rsrc(?:Handle|Ptr)?|ommand)|Def(?:Spec(?:Ptr)?|Type|UPP)|EventOptions|H(?:andle|ook(?:ProcPtr|UPP))|I(?:D|tem(?:Attributes|D(?:ata(?:Flags|Ptr|Rec)|rawing(?:ProcPtr|UPP))|I(?:D|ndex)))|Ref|T(?:itleDrawing(?:ProcPtr|UPP)|racking(?:Data(?:Ptr)?|Mode))))|ixe(?:dModeStateRecord|rDistanceParams)|o(?:dalFilter(?:ProcPtr|UPP|YD(?:ProcPtr|UPP))|r(?:pheme(?:PartOfSpeech|TextRange)|t(?:C(?:hain|ontextualSubtable)|FeatureEntry|InsertionSubtable|Ligature(?:ActionEntry|Subtable)|RearrangementSubtable|S(?:pecificSubtable|ubtable(?:MaskFlags)?|washSubtable)|Table)|x(?:C(?:hain|ontextualSubtable)|InsertionSubtable|LigatureSubtable|RearrangementSubtable|S(?:pecificSubtable|ubtable)|Table))|useTrackingResult)|usic(?:Device(?:Component|GroupID|InstrumentID|MIDIEventProc|NoteParams|S(?:t(?:artNoteProc|dNoteParams|opNoteProc)|ysExProc))|Event(?:Iterator|Type|UserData)|Player|Sequence(?:File(?:Flags|TypeID)|LoadFlags|Type|UserCallback)?|T(?:imeStamp|rack(?:LoopInfo)?)))|N(?:C(?:M(?:ConcatProfileS(?:et|pec)|DeviceProfileInfo)|olor(?:Changed(?:ProcPtr|UPP)|PickerInfo))|DR_record_t|Itl4(?:Handle|Ptr|Rec)|M(?:ProcPtr|Rec(?:Ptr)?|UPP)|PMColor(?:Ptr)?|WidthHook(?:ProcPtr|UPP)|X(?:ByteOrder|Coord|Event(?:Data|Ext(?:ension)?|Ptr|System(?:Device(?:List)?|Info(?:Data|Type)))?|KeyMapping|Mouse(?:Button|Scaling)|Point|S(?:ize|wapped(?:Double|Float))|TabletP(?:ointData(?:Ptr)?|roximityData(?:Ptr)?))|a(?:meTable|noseconds)|ote(?:InstanceID|ParamsControlValue)|u(?:llSt(?:Handle|Ptr|Rec)|m(?:FormatString(?:Rec)?|berParts(?:Ptr)?)))|O(?:S(?:A(?:Active(?:ProcPtr|UPP)|CreateAppleEvent(?:ProcPtr|UPP)|Error|ID|Send(?:ProcPtr|UPP)|syncReference(?:64)?|tomic_int64_aligned64_t)|FifoQueueHead|L(?:A(?:ccessor(?:ProcPtr|UPP)|djustMarks(?:ProcPtr|UPP))|Co(?:mpare(?:ProcPtr|UPP)|unt(?:ProcPtr|UPP))|DisposeToken(?:ProcPtr|UPP)|Get(?:ErrDesc(?:ProcPtr|UPP)|MarkToken(?:ProcPtr|UPP))|Mark(?:ProcPtr|UPP))|NotificationHeader(?:64)?|QueueHead)|ff(?:Pair|set(?:Array(?:Handle|Ptr)?|Table))|p(?:aque(?:A(?:E(?:DataStorageType|StreamRef)|TSU(?:FontFallbacks|Style|TextLayout)|UGraph|reaID|udio(?:Co(?:mponent|nverter)|FileStreamID|Queue(?:ProcessingTap|Timeline)?))|C(?:AClock|M(?:ProfileRef|WorldRef)|o(?:ll(?:atorRef|ection)|ntrolRef))|D(?:CM(?:FoundRecordIterator|Object(?:I(?:D|terator)|Ref))|ialogPtr|ragRef)|E(?:vent(?:H(?:andler(?:CallRef|Ref)|otKeyRef)|LoopRef|QueueRef|Ref|TargetRef)|xtAudioFile)|F(?:CFontDescriptorRef|NSubscriptionRef|S(?:Iterator|VolumeOperation))|GrafPtr|HI(?:ArchiveRef|Object(?:ClassRef|Ref)|ViewTrackingAreaRef)|I(?:BNibRef|CInstance|conRef)|JS(?:C(?:lass|ontext(?:Group)?)|PropertyNameA(?:ccumulator|rray)|String|Value)|KeyboardLayoutRef|L(?:A(?:ContextRef|EnvironmentRef)|SSharedFileList(?:ItemRef|Ref)|ocaleRef)|M(?:P(?:A(?:ddressSpaceID|reaID)|C(?:o(?:herenceID|nsoleID)|puID|riticalRegionID)|EventID|NotificationID|OpaqueID|ProcessID|QueueID|SemaphoreID|T(?:askID|imerID))|enuRef|usic(?:EventIterator|Player|Sequence|Track))|P(?:M(?:P(?:a(?:geFormat|per)|r(?:eset|int(?:Se(?:ssion|ttings)|er)))|Server)|asteboardRef|icker|olicySearchRef)|RgnHandle|S(?:RSpeechObject|crapRef|ec(?:AccessRef|CertificateRef|Identity(?:Ref|SearchRef)|KeyRef|TransformImplementation))|T(?:EC(?:ObjectRef|SnifferObjectRef)|SMDocumentID|XNObject|ext(?:BreakLocatorRef|ToUnicodeInfo)|hemeDrawingState|oolboxObjectClassRef|ranslationRef)|U(?:CTypeSelectRef|RLReference|nicodeToText(?:Info|RunInfo))|W(?:S(?:MethodInvocationRef|ProtocolHandlerRef)|indow(?:GroupRef|Ptr)))|bd(?:SideValues|Table(?:Format)?)|enCPicParams))|P(?:EF(?:ContainerHeader|ExportedSymbol(?:HashSlot|Key)?|Imported(?:Library|Symbol)|Loader(?:InfoHeader|RelocationHeader)|RelocChunk|S(?:ectionHeader|plitHashWord))|M(?:BorderType|ColorSpaceModel|D(?:ataFormat|estinationType|uplexMode)|La(?:nguageInfo|youtDirection)|O(?:bject|rientation)|P(?:PDDomain|a(?:ge(?:Format|ToPaperMappingType)|per(?:Margins|Type)?)|r(?:eset|int(?:DialogOptionFlags|Se(?:ssion|ttings)|er(?:State)?)))|QualityMode|Re(?:ct|solution)|S(?:calingAlignment|erver))|a(?:r(?:am(?:BlockRec|eterEvent)|mBlkPtr)|steboard(?:FlavorFlags|ItemID|PromiseKeeperProcPtr|Ref|S(?:tandardLocation|yncFlags))|t(?:Handle|Ptr|tern))|h(?:oneme(?:Descriptor|Info)|ysicalKeyboardLayoutType)|i(?:c(?:Handle|Ptr|ker(?:MenuItemInfo)?|ture)|x(?:Map(?:Handle|Ptr)?|Pat(?:Handle|Ptr)?))|lotIconRefFlags|oly(?:Handle|Ptr|gon)|r(?:interStatusOpcode|o(?:c(?:InfoType|ess(?:ApplicationTransformState|Info(?:ExtendedRec(?:Ptr)?|Rec(?:Ptr)?)))|gressTrackInfo|miseHFSFlavor|p(?:CharProperties|LookupS(?:egment|ingle)|Table|erty(?:Creator|Tag)))))|Q(?:D(?:Arc(?:ProcPtr|UPP)|Bits(?:ProcPtr|UPP)|Comment(?:ProcPtr|UPP)|Err|GetPic(?:ProcPtr|UPP)|JShieldCursor(?:ProcPtr|UPP)|Line(?:ProcPtr|UPP)|O(?:pcode(?:ProcPtr|UPP)|val(?:ProcPtr|UPP))|P(?:oly(?:ProcPtr|UPP)|rinterStatus(?:ProcPtr|UPP)|utPic(?:ProcPtr|UPP))|R(?:Rect(?:ProcPtr|UPP)|e(?:ct(?:ProcPtr|UPP)|gionParseDirection)|gn(?:ProcPtr|UPP))|StdGlyphs(?:ProcPtr|UPP)|T(?:ext(?:ProcPtr|UPP)|xMeas(?:ProcPtr|UPP)))|Elem(?:Ptr)?|Hdr(?:Ptr)?|L(?:Preview(?:PDFStyle|RequestRef)|ThumbnailRe(?:f|questRef))|Types)|R(?:DFlagsType|GBColor|OTA(?:GlyphEntry|Header)|TAType|e(?:ad(?:BytesFDF|Packet(?:DataFDF|sFDF))|drawBackground(?:ProcPtr|UPP)|gi(?:onToRects(?:ProcPtr|UPP)|ster(?:Information(?:Intel64|PowerPC)?|edComponent(?:InstanceRecord(?:Ptr)?|Record(?:Ptr)?)))|s(?:Attributes|Err(?:ProcPtr|UPP)|File(?:Attributes|RefNum)|ID|ource(?:Count|EndianFilterPtr|Index|Spec)))|gnHandle|outin(?:e(?:Descriptor(?:Handle|Ptr)?|FlagsType|Record(?:Handle|Ptr)?)|g(?:Flags|Resource(?:Entry|Handle|Ptr)))|srcChainLocation|uleBasedTrslRecord)|S(?:C(?:Bond(?:InterfaceRef|StatusRef)|DynamicStore(?:C(?:allBack|ontext)|Ref)|Network(?:Connection(?:C(?:allBack|ontext)|Flags|PPPStatus|Ref|Status)|InterfaceRef|ProtocolRef|Reachability(?:C(?:allBack|ontext)|Flags|Ref)|Se(?:rviceRef|tRef))|Preferences(?:C(?:allBack|ontext)|Notification|Ref)|VLANInterfaceRef)|FNTLookup(?:ArrayHeader|BinarySearchHeader|FormatSpecificHeader|Kind|Offset|S(?:egment(?:Header)?|ingle(?:Header)?)|T(?:able(?:Format|Handle|Ptr)?|rimmedArrayHeader)|V(?:alue|ectorHeader))|Int|K(?:Document(?:I(?:D|ndexState)|Ref)|Index(?:DocumentIteratorRef|Ref|Type)|S(?:earch(?:GroupRef|Options|Re(?:f|sults(?:FilterCallBack|Ref))|Type)|ummaryRef))|MPTETime(?:Flags|Type)?|R(?:CallBack(?:P(?:aram|rocPtr)|Struct|UPP)|Language(?:Model|Object)|P(?:ath|hrase)|Re(?:cogni(?:tion(?:Result|System)|zer)|jectionLevel)|Spee(?:ch(?:Object|Source)|dSetting)|Word)|SL(?:Authenticate|C(?:ipher(?:Suite|suiteGroup)|lientCertificateState|on(?:nection(?:Ref|Type)|text(?:Ref)?))|Protocol(?:Side)?|ReadFunc|Session(?:Option|State)|WriteFunc)|T(?:Class(?:Table)?|E(?:lement|ntry(?:Index|One|Two|Zero))|H(?:andle|eader)|Ptr|X(?:Class(?:Table)?|Entry(?:Index|One|Two|Zero)|Header|StateIndex))|c(?:hedule(?:dAudio(?:FileRegion(?:CompletionProc)?|Slice(?:CompletionProc)?)|rInfoRec(?:Ptr)?)|r(?:ap(?:Flavor(?:Flags|Info|Type)|PromiseKeeper(?:ProcPtr|UPP)|Ref|T(?:ranslationList(?:Handle|Ptr)?|ype(?:Spec)?))|ipt(?:CodeRun(?:Ptr)?|Language(?:Record|Support(?:Handle|Ptr)?)|TokenType|ingComponentSelector)|oll(?:BarTrackInfo|WindowOptions)|pST(?:Element|Table)))|e(?:c(?:A(?:CLRef|FPServerSignature|ccess(?:Control(?:CreateFlags|Ref)|OwnerType|Ref)|sn1(?:AlgId|Item|Oid|PubKeyInfo|Template(?:Chooser(?:Ptr)?|_struct)?)|uthenticationType)|C(?:S(?:DigestAlgorithm|Flags)|ertificateRef|ode(?:Ref|S(?:ignatureFlags|tatus))|redentialType)|External(?:Format|ItemType)|G(?:roupTransformRef|uestRef)|I(?:dentity(?:Ref|SearchRef)|tem(?:Attr|Class|ImportExport(?:Flags|KeyParameters)))|Key(?:GeneratePairBlock|ImportExport(?:Flags|Parameters)|OperationType|Ref|Sizes|Usage|chain(?:Attr(?:Type|ibute(?:Info|List|Ptr)?)|Callback(?:Info)?|Event(?:Mask)?|ItemRef|PromptSelector|Ref|S(?:e(?:archRef|ttings)|tatus)))|MessageBlock|P(?:a(?:dding|sswordRef)|olicy(?:Ref|SearchRef)|r(?:eferencesDomain|otocolType)|ublicKeyHash)|R(?:andomRef|equirement(?:Ref|Type))|StaticCodeRef|T(?:askRef|r(?:ansform(?:A(?:ctionBlock|ttribute(?:ActionBlock|Ref))|CreateFP|DataBlock|I(?:mplementationRef|nstanceBlock)|MetaAttributeType|Ref|StringOrAttributeRef)|ust(?:Callback|OptionFlags|Re(?:f|sultType)|Settings(?:Domain|KeyUsage|Result)|WithErrorCallback|edApplicationRef)))|uritySessionId)|lectorFunction(?:ProcPtr|UPP)|ssion(?:AttributeBits|CreationFlags)|t(?:PropertyFDF|UserDataFDF|upWindowProxyDragImageRec))|izeResourceRec(?:Handle|Ptr)?|l(?:eepQ(?:ProcPtr|Rec(?:Ptr)?|UPP)|iderTrackInfo)|ound(?:DataChunk(?:Ptr)?|ProcPtr|UPP)|peech(?:Channel(?:Record)?|Done(?:ProcPtr|UPP)|Error(?:CFProcPtr|Info|ProcPtr|UPP)|Phoneme(?:ProcPtr|UPP)|S(?:tatusInfo|ync(?:ProcPtr|UPP))|TextDone(?:ProcPtr|UPP)|VersionInfo|Word(?:CFProcPtr|ProcPtr|UPP)|XtndData)|t(?:Scrp(?:Handle|Ptr|Rec)|a(?:geList|ndard(?:DropLocation|IconListCellData(?:Ptr|Rec)))|ring(?:2DateStatus|ToDateStatus)|yle(?:Run|Table))|ys(?:PPtr|tem(?:SoundID|UI(?:Mode|Options))))|T(?:E(?:C(?:BufferContextRec|Conver(?:sionInfo|terContextRec)|Encoding(?:Pair(?:Rec|s(?:Handle|Ptr|Rec)?)|sList(?:Handle|Ptr|Rec))|In(?:fo(?:Handle|Ptr)?|ternetName(?:Rec|UsageMask|s(?:Handle|Ptr|Rec)))|Locale(?:ListToEncodingList(?:Ptr|Rec)|ToEncodingsList(?:Handle|Ptr|Rec))|ObjectRef|Plugin(?:C(?:lear(?:ContextInfoPtr|SnifferContextInfoPtr)|onvertTextEncodingPtr)|Disp(?:atchTable|oseEncoding(?:ConverterPtr|SnifferPtr))|FlushConversionPtr|Get(?:Count(?:Available(?:SniffersPtr|TextEncoding(?:PairsPtr|sPtr))|DestinationTextEncodingsPtr|MailEncodingsPtr|SubTextEncodingsPtr|WebEncodingsPtr)|PluginDispatchTablePtr|TextEncoding(?:FromInternetNamePtr|InternetNamePtr))|NewEncoding(?:ConverterPtr|SnifferPtr)|S(?:ig(?:nature)?|niffTextEncodingPtr|tateRec)|Version)|S(?:niffer(?:ContextRec|ObjectRef)|ubTextEncoding(?:Rec|s(?:Handle|Ptr|Rec)))|lickLoop(?:ProcPtr|UPP))|DoText(?:ProcPtr|UPP)|FindWord(?:ProcPtr|UPP)|Handle|IntHook|Ptr|Rec(?:alc(?:ProcPtr|UPP))?|Style(?:Handle|Ptr|Rec|Table))|ISInputSourceRef|MTask(?:Ptr)?|S(?:Code|M(?:Doc(?:AccessAttributes|ument(?:I(?:D|nterfaceType)|PropertyTag))|GlyphInfo(?:Array)?)|criptingSizeResource)|X(?:N(?:A(?:TSUI(?:Features|Variations)|ction(?:Key(?:Mapper(?:ProcPtr|UPP))?|NameMapper(?:ProcPtr|UPP))|ttributeData|utoScrollBehavior)|Background(?:Data|Type)?|C(?:arbonEventInfo|o(?:mmandEventSupportOptions|nt(?:extualMenuSetup(?:ProcPtr|UPP)|inuousFlags|rol(?:Data|Tag))|untOptions))|D(?:ataType|rawItems)|Errors|F(?:eatureBits|i(?:leType|nd(?:ProcPtr|UPP))|rame(?:ID|Options|Type))|HyperLinkState|LongRect|Ma(?:rgins|tch(?:Options|TextRecord))|O(?:bject(?:Refcon)?|ffset)|PermanentTextEncodingType|RectKey|Scroll(?:Bar(?:Orientation|State)|Info(?:ProcPtr|UPP)|Unit)|T(?:ab(?:Type)?|ype(?:Attributes|RunAttribute(?:Sizes|s)))|VersionValue)|TNTag)|a(?:ble(?:DirectoryRecord|tP(?:oint(?:Rec|erRec)|roximityRec))|sk(?:Proc|Storage(?:Index|Value)))|ext(?:BreakLocatorRef|Chunk(?:Ptr)?|Encoding(?:Base|Format|NameSelector|R(?:ec|un(?:Ptr)?)|Variant)?|Ptr|Range(?:Array(?:Handle|Ptr)?|Handle|Ptr)?|S(?:ervice(?:Class|Info(?:Ptr)?|List(?:Handle|Ptr)?|Property(?:Tag|Value))|tyle(?:Handle|Ptr)?)|ToUnicodeInfo|WidthHook(?:ProcPtr|UPP))|h(?:eme(?:ArrowOrientation|B(?:ackgroundKind|rush|utton(?:Adornment|Draw(?:Info(?:Ptr)?|ProcPtr|UPP)|Kind|Value))|C(?:heckBoxStyle|ursor)|Dra(?:gSoundKind|w(?:State|ingState))|Erase(?:ProcPtr|UPP)|FontID|GrowDirection|Iterator(?:ProcPtr|UPP)|Me(?:nu(?:BarState|ItemType|State|Type)|tric)|PopupArrowSize|S(?:crollBar(?:ArrowStyle|ThumbStyle)|oundKind)|T(?:ab(?:Direction|Style|TitleDraw(?:ProcPtr|UPP))|extColor|humbDirection|itleBarWidget|rack(?:Attributes|DrawInfo|EnableState|Kind|PressState))|Window(?:Attributes|Metrics(?:Ptr)?|Type))|read(?:Entry(?:ProcPtr|TPP|UPP)|ID|Options|S(?:cheduler(?:ProcPtr|TPP|UPP)|t(?:ate|yle)|witch(?:ProcPtr|TPP|UPP))|T(?:askRef|ermination(?:ProcPtr|TPP|UPP))))|imer(?:ProcPtr|UPP)|o(?:ggle(?:PB|Results)|ken(?:Block(?:Ptr)?|Re(?:c(?:Ptr)?|sults))|olboxObjectClassRef)|r(?:a(?:k(?:Table(?:Data|Entry)?|Value)|ns(?:itionWindowOptions|lation(?:Attributes|Flags|Ref(?:Num)?)))|ipleInt|uncCode)|ype(?:SelectRecord|sBlock(?:Ptr)?))|U(?:AZoomChangeFocusType|C(?:C(?:harProperty(?:Type|Value)|ollat(?:eOptions|ionValue))|Key(?:CharSeq|LayoutFeatureInfo|ModifiersToTableNum|Output|S(?:equenceDataIndex|tate(?:Entry(?:Range|Terminal)|Record(?:sIndex)?|Terminators))|ToCharTableIndex|board(?:Layout|TypeHeader))|T(?:SWalkDirection|extBreak(?:Options|Type)|ypeSelect(?:CompareResult|Options|Ref)))|Int|NDServerRef|RL(?:CallbackInfo|Event(?:Mask)?|Notify(?:ProcPtr|UPP)|OpenFlags|Reference|S(?:tate|ystemEvent(?:ProcPtr|UPP)))|TCDateTime(?:Handle|Ptr)?|n(?:i(?:CharArray(?:Handle|Offset|Ptr)|code(?:Map(?:Version|ping(?:Ptr)?)|ToText(?:Fallback(?:ProcPtr|UPP)|Info|RunInfo)))|tokenTable(?:Handle|Ptr)?)|ser(?:EventUPP|Item(?:ProcPtr|UPP)))|V(?:DGam(?:RecPtr|maRecord)|ector(?:128(?:Intel)?|Information(?:Intel64|PowerPC)?)|o(?:ice(?:Description|FileInfo|Spec(?:Ptr)?)|l(?:MountInfo(?:Header|Ptr)|ume(?:MountInfoHeader(?:Ptr)?|Type))))|W(?:CTab(?:Handle|Ptr)|S(?:ClientContext(?:CopyDescriptionCallBackProcPtr|Re(?:leaseCallBackProcPtr|tainCallBackProcPtr))?|MethodInvocationRef|ProtocolHandler(?:DeserializationProcPtr|Ref|SerializationProcPtr)|TypeID|tateData(?:Handle|Ptr)?)|i(?:d(?:eChar(?:Arr)?|thHook(?:ProcPtr|UPP))|n(?:CTab|dow(?:A(?:ctivationScope|ttributes)|C(?:lass|onstrainOptions)|D(?:ef(?:PartCode|Spec(?:Ptr)?|Type|UPP)|rawerState)|Group(?:Attributes|ContentOptions|Ref)|LatentVisibility|Modality|P(?:a(?:int(?:Proc(?:Options|Ptr)|UPP)|rtCode)|ositionMethod|tr)|Re(?:f|gionCode)|T(?:itleDrawing(?:ProcPtr|UPP)|ransition(?:Action|Effect)))))|ordBreak(?:ProcPtr|UPP)|rit(?:e(?:BytesFDF|PacketsFDF)|ingCode))|XLib(?:ContainerHeader|ExportedSymbol(?:HashSlot|Key)?)|ZoomAcceleration|a(?:cl_(?:entry_(?:id_t|t)|flag(?:_t|set_t)|perm(?:_t|set_(?:mask_t|t))|t(?:ag_t|ype_t)?)|ddr64_t|larm_(?:port_t|t(?:ype_t)?)|rcade_register_t|u(?:_(?:as(?:flgs_t|id_t)|c(?:lass_t|tlmode_t)|e(?:mod_t|v(?:class_map(?:_t)?|ent_t)|xpire_after(?:_t)?)|fstat_t|id_t|mask(?:_t)?|qctrl(?:_t)?|s(?:ession(?:_t)?|tat_t)|t(?:id(?:_(?:addr(?:_t)?|t))?|oken))|dit(?:_(?:fstat|stat|token_t)|info(?:_(?:addr(?:_t)?|t))?|pinfo(?:_(?:addr(?:_t)?|t))?)))|b(?:oo(?:lean_t|tstrap_t)|uild_(?:tool_version|version_command))|c(?:cntTokenRec(?:Handle|Ptr|ord)|lock_(?:attr_t|ctrl_(?:port_t|t)|flavor_t|id_t|re(?:ply_t|s_t)|serv_(?:port_t|t))|msghdr|oalition_t|pu_(?:subtype_t|t(?:hreadtype_t|ype_t))|ssm_(?:a(?:cl_(?:keychain_prompt_selector|process_subject_selector)|pple(?:cspdl_db_(?:change_password_parameters|is_locked_parameters|settings_parameters)|dl_open_parameters(?:_mask)?)|uthorizationgroup)|csp_operational_statistics|d(?:at(?:a|e)|b_schema_index_info|l_(?:db_handle|pkcs11_attributes))|func_name_addr|guid|k(?:ey_size|r_name)|list(?:_element)?|memory_funcs|name_list|parsed_c(?:ert|rl)|query_size_data|range|tp_result_set|version))|d(?:ata_in_code_entry|ec(?:form|imal)|y(?:l(?:d_(?:info_command|kernel_(?:image_info(?:_(?:array_t|t))?|process_info(?:_t)?))|i(?:b(?:_(?:command|module(?:_64)?|reference|table_of_contents))?|nker_command))|symtab_command))|e(?:mulation_vector_t|n(?:cryption_info_command(?:_64)?|try_point_command)|vsio(?:Keymapping|MouseScaling)|x(?:ception_(?:behavior_(?:array_t|t)|data_t(?:ype_t)?|flavor_array_t|handler_(?:array_t|t)|mask_(?:array_t|t)|port_(?:arra(?:ry_t|y_t)|t)|type_t)|tension_data_format))|f(?:e(?:nv_t|xcept_t)|pos_t|vm(?:file_command|lib(?:_command)?))|gpu_energy_data(?:_t)?|h(?:ash_info_bucket(?:_(?:array_t|t))?|ost_(?:basic_info(?:_(?:data_t|t))?|c(?:an_has_debugger_info(?:_(?:data_t|t))?|pu_load_info(?:_(?:data_t|t))?)|flavor_t|info(?:64_t|_(?:data_t|t))|load_info(?:_(?:data_t|t))?|name_(?:port_t|t)|p(?:r(?:eferred_user_arch(?:_(?:data_t|t))?|i(?:ority_info(?:_(?:data_t|t))?|v_t))|urgable_info_(?:data_t|t))|s(?:ched_info(?:_(?:data_t|t))?|ecurity_t)|t))|i(?:386_(?:exception_state_t|float_state_t|thread_state_t)|dent_command|maxdiv_t|nteger_t|o_(?:async_ref(?:64_t|_t)|buf_ptr_t|connect_t|enumerator_t|iterator_t|master_t|name_t|object_t|registry_entry_t|s(?:calar_inband(?:64_t|_t)|ervice_t|t(?:at_(?:entry|info(?:_t)?)|r(?:ing_(?:inband_t|t)|uct_inband_t)))|user_(?:reference_t|scalar_t))|pc_(?:info_(?:name(?:_(?:array_t|t))?|space(?:_(?:basic(?:_t)?|t))?|tree_name(?:_(?:array_t|t))?)|space_(?:inspect_t|port_t|t)|voucher_(?:attr_(?:control_t|manager_t)|t)))|k(?:auth_(?:ac(?:e(?:_(?:rights_t|t))?|l(?:_t)?)|cache_sizes|filesec(?:_t)?|identity_extlookup)|ern(?:_return_t|el_(?:boot_info_t|resource_sizes(?:_(?:data_t|t))?|version_t))|mod_(?:args_t|control_flavor_t|info(?:_(?:32_v1(?:_t)?|64_v1(?:_t)?|array_t|t))?|reference(?:_t)?|st(?:art_func_t|op_func_t)|t)|object_description_t)|l(?:a(?:belstr_t|unch_data_(?:dict_iterator_t|t(?:ype_t)?))|edger_(?:a(?:mount_t|rray_t)|item_t|port_(?:array_t|t)|t)|in(?:ger|ke(?:dit_data_command|r_option_command))|o(?:ad_command|ck(?:_set_(?:port_t|t)|group_info(?:_(?:array_t|t))?)))|m(?:a(?:ch_(?:core_(?:details|fileheader)|dead_name_notification_t|e(?:rror_(?:fn_t|t)|xception_(?:code_t|data_t(?:ype_t)?|subcode_t))|header(?:_64)?|m(?:emory_info(?:_(?:array_t|t))?|sg_(?:audit_trailer_t|b(?:ase_t|its_t|ody_t)|co(?:ntext_trailer_t|py_options_t)|descriptor_t(?:ype_t)?|empty_(?:rcv_t|send_t|t)|format_0_trailer_t|guard(?:_flags_t|ed_port_descriptor(?:32_t|64_t|_t))|header_t|id_t|ma(?:c_trailer_t|x_trailer_t)|o(?:ol_(?:descriptor(?:32_t|64_t|_t)|ports_descriptor(?:32_t|64_t|_t))|ption(?:_t|s_t))|p(?:ort_descriptor_t|riority_t)|return_t|s(?:e(?:curity_trailer_t|qno_trailer_t)|ize_t)|t(?:imeout_t|railer_(?:info_t|size_t|t(?:ype_t)?)|ype_(?:descriptor_t|n(?:ame_t|umber_t)|size_t))))|no_senders_notification_t|port_(?:array_t|context_t|de(?:l(?:eted_notification_t|ta_t)|stroyed_notification_t)|flavor_t|guard_exception_codes|info_(?:ext(?:_t)?|t)|limits(?:_t)?|ms(?:count_t|gcount_t)|name_(?:array_t|t)|options(?:_(?:ptr_t|t))?|qos(?:_t)?|right(?:_t|s_t)|s(?:eqno_t|rights_t|tatus(?:_t)?)|type_(?:array_t|t)|urefs_t)|send_(?:once_notification_t|possible_notification_t)|t(?:ask_basic_info(?:_(?:data_t|t))?|imespec(?:_t)?)|v(?:m_(?:address_t|info_region(?:_t)?|offset_t|read_entry(?:_t)?|size_t)|oucher_(?:attr_(?:co(?:mmand_t|nt(?:ent_(?:size_t|t)|rol_(?:flags_t|t)))|importance_refs|key_(?:array_t|t)|manager_t|r(?:aw_recipe_(?:array_(?:size_t|t)|size_t|t)|ecipe_(?:command_(?:array_t|t)|data(?:_t)?|size_t|t))|value_(?:flags_t|handle_(?:array_(?:size_t|t)|t)|reference_t))|name_(?:array_t|t)|selector_t|t))|zone_(?:info_(?:array_t|data|t)|name(?:_(?:array_t|t))?))|trix_(?:double(?:2x(?:2|3|4)|3x(?:2|3|4)|4x(?:2|3|4))|float(?:2x(?:2|3|4)|3x(?:2|3|4)|4x(?:2|3|4))))|context_t|em(?:_entry_name_port_t|ory_object_(?:a(?:rray_t|ttr_info(?:_(?:data_t|t))?)|behave_info(?:_(?:data_t|t))?|c(?:luster_size_t|o(?:ntrol_t|py_strategy_t))|default_t|f(?:ault_info_t|lavor_t)|info_(?:data_t|t)|name_t|offset_t|perf_info(?:_(?:data_t|t))?|return_t|size_t|t))|ig_(?:impl_routine_t|r(?:eply_error_t|outine_(?:arg_descriptor_t|descriptor(?:_t)?|t))|s(?:erver_routine_t|tub_routine_t|ubsystem(?:_t)?|ymtab(?:_t)?))|sg(?:_labels_t|hdr))|n(?:atural_t|ot(?:e_command|ify_port_t)|space_path_t|tsid_t)|os_(?:block_t|function_t|log_(?:s|t(?:ype_t)?)|trace_payload_(?:object_t|t)|unfair_lock_s)|p(?:a(?:cked_(?:char(?:16|2|32|4|64|8)|double(?:2|4|8)|float(?:16|2|4|8)|int(?:16|2|4|8)|long(?:2|4|8)|short(?:16|2|32|4|8)|u(?:char(?:16|2|32|4|64|8)|int(?:16|2|4|8)|long(?:2|4|8)|short(?:16|2|32|4|8)))|ge_address_array_t)|icker|o(?:inter_t|licy_(?:base(?:_(?:data_t|t)|s)|fifo_(?:base(?:_(?:data_t|t))?|info(?:_(?:data_t|t))?|limit(?:_(?:data_t|t))?)|info(?:_(?:data_t|t)|s)|limit(?:_(?:data_t|t)|s)|rr_(?:base(?:_(?:data_t|t))?|info(?:_(?:data_t|t))?|limit(?:_(?:data_t|t))?)|t(?:imeshare_(?:base(?:_(?:data_t|t))?|info(?:_(?:data_t|t))?|limit(?:_(?:data_t|t))?))?))|pnum_t|r(?:eb(?:ind_cksum_command|ound_dylib_command)|ocessor_(?:array_t|basic_info(?:_(?:data_t|t))?|cpu_load_info(?:_(?:data_t|t))?|flavor_t|info_(?:array_t|data_t|t)|port_(?:array_t|t)|set_(?:array_t|basic_info(?:_(?:data_t|t))?|control_(?:port_t|t)|flavor_t|info_(?:data_t|t)|load_info(?:_(?:data_t|t))?|name_(?:array_t|port_(?:array_t|t)|t)|port_t|t)|t)))|qos_class_t|r(?:e(?:g(?:64_t|isterSelectorType)|lop)|outine(?:_(?:arg_(?:descriptor(?:_t)?|offset|size|type)|descriptor(?:_t)?)|s_command(?:_64)?)|p(?:ath_command|c_(?:routine_(?:arg_descriptor(?:_t)?|descriptor(?:_t)?)|s(?:ignature|ubsystem(?:_t)?))))|s(?:a(?:_endpoints(?:_t)?|e_(?:associd_t|connid_t))|e(?:c(?:_(?:certificate(?:_t)?|identity(?:_t)?|object(?:_t)?|protocol_(?:challenge_(?:complete_t|t)|key_update_(?:complete_t|t)|metadata(?:_t)?|options(?:_t)?|pre_shared_key_selection_(?:complete_t|t)|verify_(?:complete_t|t))|trust(?:_t)?)|tion(?:_64)?|urity_token_t)|gment_command(?:_64)?|maphore_(?:port_t|t))|f(?:_hdtr|nt(?:CMap(?:E(?:ncoding|xtendedSubHeader)|Header|SubHeader)|D(?:escriptorHeader|irectory(?:Entry)?)|F(?:eature(?:Header|Name)|ont(?:Descriptor|FeatureSetting|RunFeature))|Instance|Name(?:Header|Record)|Variation(?:Axis|Header)))|i(?:md_(?:bool|char(?:1(?:6)?|2|3(?:2)?|4|64|8)|double(?:1|2|3|4|8)|float(?:1(?:6)?|2|3|4|8)|int(?:1(?:6)?|2|3|4|8)|long(?:1|2|3|4|8)|packed_(?:char(?:16|2|32|4|64|8)|double(?:2|4|8)|float(?:16|2|4|8)|int(?:16|2|4|8)|long(?:2|4|8)|short(?:16|2|32|4|8)|u(?:char(?:16|2|32|4|64|8)|int(?:16|2|4|8)|long(?:2|4|8)|short(?:16|2|32|4|8)))|short(?:1(?:6)?|2|3(?:2)?|4|8)|u(?:char(?:1(?:6)?|2|3(?:2)?|4|64|8)|int(?:1(?:6)?|2|3|4|8)|long(?:1|2|3|4|8)|short(?:1(?:6)?|2|3(?:2)?|4|8)))|nt(?:16|32|64|8))|leep_type_t|o(?:_np_extensions|ck(?:addr(?:_storage)?|proto)|urce_version_command)|u(?:b_(?:client_command|framework_command|library_command|umbrella_command)|id_cred_(?:path_t|t|uid_t))|y(?:m(?:seg_command|tab_(?:command|name_t))|nc_policy_t))|t(?:ask_(?:a(?:bsolutetime_info(?:_(?:data_t|t))?|ffinity_tag_info(?:_(?:data_t|t))?|rray_t)|basic_info(?:_(?:32(?:_(?:data_t|t))?|64(?:_(?:data_t|t))?|data_t|t))?|category_policy(?:_(?:data_t|t))?|dyld_info(?:_(?:data_t|t))?|e(?:vents_info(?:_(?:data_t|t))?|x(?:c_guard_behavior_t|tmod_info(?:_(?:data_t|t))?))|fla(?:gs_info(?:_(?:data_t|t))?|vor_t)|in(?:fo_(?:data_t|t)|spect_(?:basic_counts(?:_(?:data_t|t))?|flavor(?:_t)?|info_t|t))|kernelmemory_info(?:_(?:data_t|t))?|latency_qos(?:_t)?|name_t|p(?:o(?:licy_(?:flavor_t|t)|rt_(?:array_t|t)|wer_info(?:_(?:data_t|t|v2(?:_(?:data_t|t))?))?)|urgable_info_t)|qos_policy(?:_t)?|role(?:_t)?|s(?:pecial_port_t|uspension_token_t)|t(?:hr(?:ead_times_info(?:_(?:data_t|t))?|oughput_qos(?:_t)?)|race_memory_info(?:_(?:data_t|t))?)?|vm_info(?:_(?:data_t|t))?|wait_state_info(?:_(?:data_t|t))?|zone_info_(?:array_t|data|t))|hread_(?:a(?:ct_(?:array_t|port_(?:array_t|t)|t)|ffinity_policy(?:_(?:data_t|t))?|rray_t)|ba(?:ckground_policy(?:_(?:data_t|t))?|sic_info(?:_(?:data_t|t))?)|command|extended_(?:info(?:_(?:data_t|t))?|policy(?:_(?:data_t|t))?)|flavor_t|i(?:dentifier_info(?:_(?:data_t|t))?|n(?:fo_(?:data_t|t)|spect_t))|latency_qos_(?:policy(?:_(?:data_t|t))?|t)|p(?:o(?:licy_(?:flavor_t|t)|rt_(?:array_t|t))|recedence_policy(?:_(?:data_t|t))?)|sta(?:ndard_policy(?:_(?:data_t|t))?|te_(?:data_t|flavor_(?:array_t|t)|t))|t(?:hroughput_qos_(?:policy(?:_(?:data_t|t))?|t)|ime_constraint_policy(?:_(?:data_t|t))?)?)|ime_value(?:_t)?|l(?:s_(?:ciphersuite_(?:group_t|t)|protocol_version_t)|v_descriptor)|oken_t|wolevel_hint(?:s_command)?)|u(?:ext_object_t|int(?:16|32|64|8)|pl_t|ser_subsystem_t|uid_(?:command|string_t))|v(?:e(?:ctor_(?:char(?:16|2|3(?:2)?|4|8)|double(?:2|3|4|8)|float(?:16|2|3|4|8)|int(?:16|2|3|4|8)|long(?:1|2|3|4|8)|short(?:16|2|3(?:2)?|4|8)|u(?:char(?:16|2|3(?:2)?|4|8)|int(?:16|2|3|4|8)|long(?:1|2|3|4|8)|short(?:16|2|3(?:2)?|4|8)))|rsion_min_command)|fs_path_t|irtual_memory_guard_exception_codes|m(?:32_object_id_t|_(?:address_t|behavior_t|extmod_statistics(?:_(?:data_t|t))?|in(?:fo_(?:object(?:_(?:array_t|t))?|region(?:_(?:64(?:_t)?|t))?)|herit_t)|ma(?:chine_attribute_(?:t|val_t)|p_(?:address_t|offset_t|size_t|t))|named_entry_t|o(?:bject_(?:id_t|offset_t|size_t)|ffset_t)|p(?:age_info_(?:basic(?:_(?:data_t|t))?|data_t|flavor_t|t)|rot_t|urg(?:able_t|eable_(?:info(?:_t)?|stat(?:_t)?)))|re(?:ad_entry(?:_t)?|gion_(?:basic_info(?:_(?:64(?:_t)?|data_(?:64_t|t)|t))?|extended_info(?:_(?:data_t|t))?|flavor_t|info_(?:64_t|data_t|t)|recurse_info_(?:64_t|t)|submap_(?:info(?:_(?:64(?:_t)?|data_(?:64_t|t)|t))?|short_info_(?:64(?:_t)?|data_64_t))|top_info(?:_(?:data_t|t))?))|s(?:ize_t|tatistics(?:64(?:_(?:data_t|t))?|_(?:data_t|t))?|ync_t)|task_entry_t))|o(?:idPtr|ucher_mach_msg_state_(?:s|t)))|x(?:86_(?:avx(?:512_state(?:32_t|64_t|_t)?|_state(?:32_t|64_t|_t)?)|debug_state(?:32_t|64_t|_t)?|exception_state(?:32_t|64_t|_t)?|float_state(?:32_t|64_t|_t)?|pagein_state_t|state_hdr(?:_t)?|thread_(?:full_state64_t|state(?:32_t|64_t|_t)?))|pc_(?:activity_(?:handler_t|state_t|t)|connection_(?:handler_t|t)|endpoint_t|finalizer_t|handler_t|object_t|type_t))|zone_(?:btrecord(?:_(?:array_t|t))?|info(?:_(?:array_t|t))?|name(?:_(?:array_t|t))?))\\\\b\",\n\t\t\t\"name\": \"support.type.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CF(?:A(?:bsoluteTime|llocator(?:AllocateCallBack|Co(?:ntext|pyDescriptionCallBack)|DeallocateCallBack|PreferredSizeCallBack|Re(?:allocateCallBack|f|leaseCallBack|tainCallBack))|rray(?:ApplierFunction|C(?:allBacks|opyDescriptionCallBack)|EqualCallBack|Re(?:f|leaseCallBack|tainCallBack))|ttributedStringRef)|B(?:ag(?:ApplierFunction|C(?:allBacks|opyDescriptionCallBack)|EqualCallBack|HashCallBack|Re(?:f|leaseCallBack|tainCallBack))|i(?:naryHeap(?:ApplierFunction|C(?:allBacks|ompareContext)|Ref)|t(?:VectorRef)?)|ooleanRef|undleRef(?:Num)?|yteOrder)|C(?:alendar(?:Identifier|Ref|Unit)|haracterSet(?:PredefinedSet|Ref)|ompar(?:atorFunction|isonResult))|D(?:at(?:a(?:Ref|SearchFlags)|e(?:Formatter(?:Key|Ref|Style)|Ref))|ictionary(?:ApplierFunction|CopyDescriptionCallBack|EqualCallBack|HashCallBack|KeyCallBacks|Re(?:f|leaseCallBack|tainCallBack)|ValueCallBacks))|Error(?:Domain|Ref)|File(?:Descriptor(?:C(?:allBack|ontext)|NativeDescriptor|Ref)|Security(?:ClearOptions|Ref))|GregorianUnitFlags|HashCode|I(?:SO8601DateFormatOptions|ndex)|Locale(?:Identifier|Key|LanguageDirection|Ref)|M(?:achPort(?:C(?:allBack|ontext)|InvalidationCallBack|Ref)|essagePort(?:C(?:allBack|ontext)|InvalidationCallBack|Ref)|utable(?:A(?:rrayRef|ttributedStringRef)|B(?:agRef|itVectorRef)|CharacterSetRef|D(?:ataRef|ictionaryRef)|S(?:etRef|tringRef)))|N(?:otification(?:C(?:allback|enterRef)|Name|SuspensionBehavior)|u(?:llRef|mber(?:Formatter(?:Key|OptionFlags|PadPosition|R(?:ef|oundingMode)|Style)|Ref|Type)))|OptionFlags|P(?:lugIn(?:DynamicRegisterFunction|FactoryFunction|Instance(?:DeallocateInstanceDataFunction|GetInterfaceFunction|Ref)|Ref|UnloadFunction)|ropertyList(?:Format|MutabilityOptions|Ref))|R(?:ange|eadStream(?:ClientCallBack|Ref)|unLoop(?:Activity|Mode|Observer(?:C(?:allBack|ontext)|Ref)|R(?:ef|unResult)|Source(?:Context(?:1)?|Ref)|Timer(?:C(?:allBack|ontext)|Ref)))|S(?:et(?:ApplierFunction|C(?:allBacks|opyDescriptionCallBack)|EqualCallBack|HashCallBack|Re(?:f|leaseCallBack|tainCallBack))|ocket(?:C(?:allBack(?:Type)?|ontext)|Error|NativeHandle|Ref|Signature)|tr(?:eam(?:ClientContext|E(?:rror(?:Domain)?|ventType)|PropertyKey|Status)|ing(?:BuiltInEncodings|CompareFlags|Encoding(?:s)?|InlineBuffer|NormalizationForm|Ref|Tokenizer(?:Ref|TokenType)))|wappedFloat(?:32|64))|T(?:ime(?:Interval|Zone(?:NameStyle|Ref))|ree(?:ApplierFunction|Co(?:ntext|pyDescriptionCallBack)|Re(?:f|leaseCallBack|tainCallBack))|ype(?:ID|Ref))|U(?:RL(?:Bookmark(?:CreationOptions|FileCreationOptions|ResolutionOptions)|ComponentType|E(?:numerator(?:Options|Re(?:f|sult))|rror)|PathStyle|Ref)|UID(?:Bytes|Ref)|serNotification(?:CallBack|Ref))|WriteStream(?:ClientCallBack|Ref)|XML(?:Attribute(?:DeclarationInfo|ListDeclarationInfo)|Document(?:Info|TypeInfo)|E(?:lement(?:Info|TypeDeclarationInfo)|ntity(?:Info|ReferenceInfo|TypeCode)|xternalID)|No(?:de(?:Ref|TypeCode)|tationInfo)|P(?:arser(?:AddChildCallBack|C(?:allBacks|o(?:ntext|pyDescriptionCallBack)|reateXMLStructureCallBack)|EndXMLStructureCallBack|HandleErrorCallBack|Options|Re(?:f|leaseCallBack|solveExternalEntityCallBack|tainCallBack)|StatusCode)|rocessingInstructionInfo)|TreeRef))|FSRef)\\\\b\",\n\t\t\t\"name\": \"support.type.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:accessx_descriptor|blk(?:cnt_t|size_t)|c(?:addr_t|lock(?:_t|i(?:d_t|nfo))|t_rune_t)|d(?:addr_t|ev_t|i(?:spatch_time_t|v_t)|ouble_t)|e(?:rrno_t|xception)|f(?:bootstraptransfer(?:_t)?|c(?:hecklv(?:_t)?|odeblobs(?:_t)?)|d_(?:mask|set)|i(?:lesec_(?:property_t|t)|xpt_t)|lo(?:at_t|ck(?:timeout)?)|punchhole(?:_t)?|s(?:blkcnt_t|filcnt_t|i(?:d(?:_t)?|gnatures(?:_t)?)|obj_id(?:_t)?|pecread(?:_t)?|searchblock|tore(?:_t)?)|trimactivefile(?:_t)?)|g(?:id_t|uid_t)|i(?:d(?:_t|type_t)|n(?:_(?:addr_t|port_t)|o(?:64_t|_t)|t(?:16_t|32_t|64_t|8_t|_(?:fast(?:16_t|32_t|64_t|8_t)|least(?:16_t|32_t|64_t|8_t))|max_t|ptr_t))|ovec|timerval)|jmp_buf|key_t|l(?:conv|div_t|ldiv_t|og2phys)|m(?:a(?:ch_port_t|x_align_t)|ode_t)|nlink_t|off_t|p(?:id_t|roc_rlimit_control_wakeupmon|trdiff_t)|q(?:addr_t|uad_t)|r(?:advisory|egister_t|lim(?:_t|it)|size_t|u(?:ne_t|sage(?:_info_(?:current|t|v(?:0|1|2|3|4)))?))|s(?:a_family_t|e(?:archstate|gsz_t)|i(?:g(?:_(?:atomic_t|t)|action|event|info_t|jmp_buf|s(?:et_t|tack)|vec)|md_(?:double(?:2x(?:2|3|4)|3x(?:2|3|4)|4x(?:2|3|4))|float(?:2x(?:2|3|4)|3x(?:2|3|4)|4x(?:2|3|4))|quat(?:d|f))|ze_t)|ocklen_t|size_t|tack_t|useconds_t|wblk_t|yscall_arg_t)|t(?:ime(?:_t|spec|val(?:64)?|zone)|m)|u(?:_(?:char|int(?:16_t|32_t|64_t|8_t)?|long|quad_t|short)|context_t|i(?:d_t|nt(?:16_t|32_t|64_t|8_t|_(?:fast(?:16_t|32_t|64_t|8_t)|least(?:16_t|32_t|64_t|8_t))|max_t|ptr_t)?)|s(?:e(?:conds_t|r_(?:addr_t|long_t|off_t|s(?:ize_t|size_t)|time_t|ulong_t))|hort)|uid_t)|va_list|w(?:char_t|int_t))\\\\b\",\n\t\t\t\"name\": \"support.type.clib.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bdispatch_(?:autorelease_frequency_t|block_(?:flags_t|t)|channel_s|data_(?:s|t)|f(?:d_t|unction_t)|group_(?:s|t)|io_(?:close_flags_t|handler_t|interval_flags_t|s|t(?:ype_t)?)|mach_(?:msg_s|s)|o(?:bject_(?:s|t)|nce_t)|q(?:os_class_t|ueue_(?:attr_(?:s|t)|concurrent_t|global_t|main_t|priority_t|s(?:erial_t)?|t))|s(?:emaphore_(?:s|t)|ource_(?:m(?:ach_(?:recv_flags_t|send_flags_t)|emorypressure_flags_t)|proc_flags_t|s|t(?:imer_flags_t|ype_(?:s|t))?|vnode_flags_t))|workloop_t)\\\\b\",\n\t\t\t\"name\": \"support.type.dispatch.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:AbsoluteTime|B(?:oolean|yte(?:Count|Offset|Ptr)?)|C(?:harParameter|o(?:mpTimeValue|nst(?:LogicalAddress|Str(?:15Param|2(?:55Param|7Param)|3(?:1Param|2Param)|63Param|FileNameParam|ingPtr))))|Duration|F(?:ixed(?:P(?:oint|tr)|Rect)?|loat(?:32(?:Point)?|64|80|96)|ourCharCode|ract(?:Ptr)?)|Handle|ItemCount|L(?:angCode|ogicalAddress)|NumVersion(?:Variant(?:Handle|Ptr)?)?|O(?:S(?:Err|Status|Type(?:Ptr)?)|ptionBits)|P(?:BVersion|RefCon|hysicalAddress|oint(?:Ptr)?|roc(?:Handle|Ptr|essSerialNumber(?:Ptr)?)|tr)|Re(?:ct(?:Ptr)?|gi(?:onCode|ster68kProcPtr)|sType(?:Ptr)?)|S(?:Int(?:16|32|64|8)|RefCon|criptCode|hortFixed(?:Ptr)?|i(?:gnedByte|ze)|t(?:r(?:15|2(?:55|7)|3(?:1|2(?:Field)?)|63|FileName|ing(?:Handle|Ptr))|yle(?:Field|Parameter)?))|Time(?:Base(?:Record)?|Record|Scale|Value(?:64)?)|U(?:Int(?:16|32|64|8)|RefCon|TF(?:16Char|32Char|8Char)|n(?:i(?:Char(?:Count(?:Ptr)?|Ptr)?|codeScalarValue|versalProc(?:Handle|Ptr))|signed(?:Fixed(?:Ptr)?|Wide(?:Ptr)?)))|V(?:HSelect|ersRec(?:Hndl|Ptr)?)|WidePtr|extended(?:80|96)|wide)\\\\b\",\n\t\t\t\"name\": \"support.type.mac-classic.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bpthread_(?:attr_t|cond(?:_t|attr_t)|key_t|mutex(?:_t|attr_t)|once_t|rwlock(?:_t|attr_t)|t)\\\\b\",\n\t\t\t\"name\": \"support.type.pthread.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CG(?:AffineTransform|B(?:itmap(?:ContextReleaseDataCallback|Info)|lendMode|uttonCount)|C(?:aptureOptions|harCode|o(?:lor(?:ConversionInfo(?:Ref|TransformType)?|Re(?:f|nderingIntent)|Space(?:Model|Ref)?)?|n(?:figureOption|text(?:Ref)?)))|D(?:ata(?:Consumer(?:Callbacks|PutBytesCallback|Re(?:f|leaseInfoCallback))?|Provider(?:DirectCallbacks|GetByte(?:PointerCallback|s(?:AtPositionCallback|Callback))|Re(?:f|lease(?:BytePointerCallback|DataCallback|InfoCallback)|windCallback)|S(?:equentialCallbacks|kipForwardCallback))?)|eviceColor|i(?:rectDisplayID|splay(?:BlendFraction|C(?:hangeSummaryFlags|o(?:nfigRef|unt))|Err|Fade(?:Interval|ReservationToken)|Mode(?:Ref)?|Re(?:configurationCallBack|servationInterval)|Stream(?:Frame(?:AvailableHandler|Status)|Ref|Update(?:Re(?:ctType|f))?)?)))|E(?:rror|vent(?:Err|F(?:i(?:eld|lterMask)|lags)|M(?:ask|ouseSubtype)|Ref|S(?:ource(?:KeyboardType|Ref|StateID)|uppressionState)|T(?:ap(?:CallBack|Information|Location|Options|P(?:lacement|roxy))|imestamp|ype)))|F(?:loat|ont(?:Index|PostScriptFormat|Ref)?|unction(?:Callbacks|EvaluateCallback|Re(?:f|leaseInfoCallback))?)|G(?:ammaValue|esturePhase|lyph(?:DeprecatedEnum)?|radient(?:DrawingOptions|Ref)?)|I(?:mage(?:AlphaInfo|ByteOrderInfo|PixelFormatInfo|Ref)?|nterpolationQuality)|KeyCode|L(?:ayer(?:Ref)?|ine(?:Cap|Join))|M(?:o(?:mentumScrollPhase|useButton)|utablePathRef)|OpenGLDisplayMask|P(?:DF(?:A(?:ccessPermissions|rray(?:Ref)?)|Bo(?:olean|x)|ContentStream(?:Ref)?|D(?:ataFormat|ictionary(?:ApplierFunction|Ref)?|ocument(?:Ref)?)|Integer|O(?:bject(?:Ref|Type)?|perator(?:Callback|Table(?:Ref)?))|Page(?:Ref)?|Real|S(?:canner(?:Ref)?|tr(?:eam(?:Ref)?|ing(?:Ref)?))|Tag(?:Property|Type))|SConverter(?:Begin(?:DocumentCallback|PageCallback)|Callbacks|End(?:DocumentCallback|PageCallback)|MessageCallback|ProgressCallback|Re(?:f|leaseInfoCallback))?|at(?:h(?:Appl(?:ierFunction|yBlock)|DrawingMode|Element(?:Type)?|Ref)?|tern(?:Callbacks|DrawPatternCallback|Re(?:f|leaseInfoCallback)|Tiling)?)|oint)|Re(?:ct(?:Count|Edge)?|freshRate)|S(?:cr(?:een(?:RefreshCallback|Update(?:Move(?:Callback|Delta)|Operation))|oll(?:EventUnit|Phase))|hading(?:Ref)?|ize)|Text(?:DrawingMode|Encoding)|Vector|W(?:heelCount|indow(?:BackingType|I(?:D|mageOption)|L(?:evel(?:Key)?|istOption)|SharingType)))|IOSurfaceRef)\\\\b\",\n\t\t\t\"name\": \"support.type.quartz.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:k(?:C(?:FHTTPVersion2_0|GImage(?:Destination(?:EmbedThumbnail|ImageMaxPixelSize)|MetadataShouldExcludeGPS|Property(?:8BIMVersion|APNG(?:DelayTime|LoopCount|UnclampedDelayTime)|GPSHPositioningError|MakerAppleDictionary))|T(?:FontOpenTypeFeature(?:Tag|Value)|RubyAnnotationAttributeName)|V(?:ImageBufferAlphaChannelIsOpaque|PixelFormatCo(?:mponentRange(?:_(?:FullRange|VideoRange|WideRange))?|ntains(?:RGB|YCbCr))))|Sec(?:AttrAccess(?:Control|ibleWhenPasscodeSetThisDeviceOnly)|UseOperationPrompt)|UTType(?:3DContent|A(?:VIMovie|pple(?:ProtectedMPEG4Video|Script)|ssemblyLanguageSource|udioInterchangeFileFormat)|B(?:inaryPropertyList|ookmark|zip2Archive)|C(?:alendarEvent|ommaSeparatedText)|DelimitedText|E(?:lectronicPublication|mailMessage)|Font|GNUZipArchive|InternetLocation|J(?:SON|ava(?:Archive|Class|Script))|Log|M(?:3UPlaylist|IDIAudio|PEG2(?:TransportStream|Video))|OSAScript(?:Bundle)?|P(?:HPScript|KCS12|erlScript|l(?:aylist|uginBundle)|r(?:esentation|opertyList)|ythonScript)|QuickLookGenerator|R(?:awImage|ubyScript)|S(?:c(?:alableVectorGraphics|ript)|hellScript|p(?:otlightImporter|readsheet)|ystemPreferencesPane)|T(?:abSeparatedText|oDoItem)|U(?:RLBookmarkData|TF8TabSeparatedText|nixExecutable)|W(?:aveformAudio|indowsExecutable)|X(?:509Certificate|MLPropertyList|PCService)|ZipArchive))|matrix_identity_(?:double(?:2x2|3x3|4x4)|float(?:2x2|3x3|4x4)))\\\\b\",\n\t\t\t\"name\": \"support.variable.10.10.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:A(?:XListItem(?:IndexTextAttribute|LevelTextAttribute|PrefixTextAttribute)|udioComponent(?:InstanceInvalidationNotification|RegistrationsChangedNotification))|C(?:FStreamPropertySocketExtendedBackgroundIdleMode|GImage(?:Property(?:ExifSubsecTimeOriginal|PNGCompressionFilter|TIFFTile(?:Length|Width))|SourceSubsampleFactor)|V(?:ImageBuffer(?:ColorPrimaries_(?:DCI_P3|ITU_R_2020|P3_D65)|TransferFunction_ITU_R_2020|YCbCrMatrix_(?:DCI_P3|ITU_R_2020|P3_D65))|MetalTextureCacheMaximumTextureAgeKey|PixelBuffer(?:MetalCompatibilityKey|OpenGLTextureCacheCompatibilityKey)))|MDItemHTMLContent|Sec(?:A(?:CLAuthorization(?:Integrity|PartitionID)|ttrSyncViewHint)|PolicyApplePayIssuerEncryption|TrustCertificateTransparency|UseAuthentication(?:Context|UI(?:Allow|Fail|Skip)?))|UTTypeSwiftSource)\\\\b\",\n\t\t\t\"name\": \"support.variable.10.11.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:C(?:FStreamNetworkServiceTypeCallSignaling|GImage(?:DestinationOptimizeColorForSharing|PropertyDNG(?:AsShot(?:Neutral|WhiteXY)|B(?:aseline(?:Exposure|Noise|Sharpness)|lackLevel)|C(?:a(?:librationIlluminant(?:1|2)|meraCalibration(?:1|2|Signature))|olorMatrix(?:1|2))|FixVignetteRadial|NoiseProfile|Pr(?:ivateData|ofileCalibrationSignature)|W(?:arp(?:Fisheye|Rectilinear)|hiteLevel)))|T(?:BackgroundColorAttributeName|FontDownloadedAttribute|HorizontalInVerticalFormsAttributeName|RubyAnnotationS(?:caleToFitAttributeName|izeFactorAttributeName)|TrackingAttributeName)|VImageBufferTransferFunction_SMPTE_ST_428_1)|IOSurfacePixelSizeCastingAllowed|Sec(?:Attr(?:AccessGroupToken|KeyTypeECSECPrimeRandom|TokenID(?:SecureEnclave)?)|Key(?:Algorithm(?:EC(?:D(?:HKeyExchange(?:Cofactor(?:X963SHA(?:1|2(?:24|56)|384|512))?|Standard(?:X963SHA(?:1|2(?:24|56)|384|512))?)|SASignature(?:DigestX962(?:SHA(?:1|2(?:24|56)|384|512))?|MessageX962SHA(?:1|2(?:24|56)|384|512)|RFC4754))|IESEncryption(?:CofactorX963SHA(?:1AESGCM|2(?:24AESGCM|56AESGCM)|384AESGCM|512AESGCM)|StandardX963SHA(?:1AESGCM|2(?:24AESGCM|56AESGCM)|384AESGCM|512AESGCM)))|RSA(?:Encryption(?:OAEPSHA(?:1(?:AESGCM)?|2(?:24(?:AESGCM)?|56(?:AESGCM)?)|384(?:AESGCM)?|512(?:AESGCM)?)|PKCS1|Raw)|Signature(?:DigestPKCS1v15(?:Raw|SHA(?:1|2(?:24|56)|384|512))|MessagePKCS1v15SHA(?:1|2(?:24|56)|384|512)|Raw)))|KeyExchangeParameter(?:RequestedSize|SharedInfo)))|UTTypeLivePhoto)\\\\b\",\n\t\t\t\"name\": \"support.variable.10.12.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:C(?:GImage(?:AuxiliaryData(?:Info(?:Data(?:Description)?|Metadata)|TypeD(?:epth|isparity))|Metadata(?:NamespaceIPTCExtension|PrefixIPTCExtension)|Property(?:AuxiliaryData(?:Type)?|BytesPerRow|FileContentsDictionary|Height|I(?:PTCExt(?:A(?:boutCvTerm(?:CvId|Id|Name|RefinedAbout)?|ddlModelInfo|rtwork(?:C(?:ircaDateCreated|o(?:nt(?:entDescription|ributionDescription)|pyright(?:Notice|Owner(?:ID|Name)))|reator(?:ID)?)|DateCreated|Licensor(?:ID|Name)|OrObject|PhysicalDescription|S(?:ource(?:Inv(?:URL|entoryNo))?|tylePeriod)|Title)|udio(?:Bitrate(?:Mode)?|ChannelCount))|C(?:ircaDateCreated|o(?:nt(?:ainerFormat(?:Identifier|Name)?|r(?:ibutor(?:Identifier|Name|Role)?|olledVocabularyTerm))|pyrightYear)|reator(?:Identifier|Name|Role)?)|D(?:ataOnScreen(?:Region(?:D|H|Text|Unit|W|X|Y)?)?|igital(?:ImageGUID|Source(?:FileType|Type))|opesheet(?:Link(?:Link(?:Qualifier)?)?)?)|E(?:mb(?:dEncRightsExpr|eddedEncodedRightsExpr(?:LangID|Type)?)|pisode(?:Identifier|N(?:ame|umber))?|vent|xternalMetadataLink)|FeedIdentifier|Genre(?:Cv(?:Id|Term(?:Id|Name|RefinedAbout)))?|Headline|IPTCLastEdited|L(?:inkedEnc(?:RightsExpr|odedRightsExpr(?:LangID|Type)?)|ocation(?:C(?:ity|ountry(?:Code|Name)|reated)|GPS(?:Altitude|L(?:atitude|ongitude))|Identifier|Location(?:Id|Name)|ProvinceState|S(?:hown|ublocation)|WorldRegion))|M(?:axAvail(?:Height|Width)|odelAge)|OrganisationInImage(?:Code|Name)|P(?:erson(?:Heard(?:Identifier|Name)?|InImage(?:C(?:haracteristic|vTerm(?:CvId|Id|Name|RefinedAbout))|Description|Id|Name|WDetails)?)|roductInImage(?:Description|GTIN|Name)?|ublicationEvent(?:Date|Identifier|Name)?)|R(?:ating(?:R(?:atingRegion|egion(?:C(?:ity|ountry(?:Code|Name))|GPS(?:Altitude|L(?:atitude|ongitude))|Identifier|Location(?:Id|Name)|ProvinceState|Sublocation|WorldRegion))|S(?:caleM(?:axValue|inValue)|ourceLink)|Value(?:LogoLink)?)?|e(?:gistry(?:EntryRole|I(?:D|temID)|OrganisationID)|leaseReady))|S(?:e(?:ason(?:Identifier|N(?:ame|umber))?|ries(?:Identifier|Name)?)|hownEvent(?:Identifier|Name)?|t(?:orylineIdentifier|reamReady|ylePeriod)|upplyChainSource(?:Identifier|Name)?)|T(?:emporalCoverage(?:From|To)?|ranscript(?:Link(?:Link(?:Qualifier)?)?)?)|Vi(?:deo(?:Bitrate(?:Mode)?|DisplayAspectRatio|EncodingProfile|S(?:hotType(?:Identifier|Name)?|treamsCount))|sualColor)|WorkflowTag(?:Cv(?:Id|Term(?:Id|Name|RefinedAbout)))?)|mage(?:Count|s))|NamedColorSpace|P(?:ixelFormat|rimaryImage)|ThumbnailImages|Width))|T(?:BaselineOffsetAttributeName|FontVariationAxisHiddenKey)|V(?:ImageBuffer(?:ContentLightLevelInfoKey|MasteringDisplayColorVolumeKey|TransferFunction_(?:ITU_R_2100_HLG|SMPTE_ST_2084_PQ|sRGB))|MetalTextureUsage))|IOSurface(?:Plane(?:BitsPerElement|Component(?:Bit(?:Depths|Offsets)|Names|Ranges|Types))|Subsampling)|Sec(?:A(?:CLAuthorizationChange(?:ACL|Owner)|ttrPersist(?:antReference|entReference))|KeyAlgorithm(?:ECIESEncryption(?:CofactorVariableIVX963SHA(?:2(?:24AESGCM|56AESGCM)|384AESGCM|512AESGCM)|StandardVariableIVX963SHA(?:2(?:24AESGCM|56AESGCM)|384AESGCM|512AESGCM))|RSASignature(?:DigestPSSSHA(?:1|2(?:24|56)|384|512)|MessagePSSSHA(?:1|2(?:24|56)|384|512)))))\\\\b\",\n\t\t\t\"name\": \"support.variable.10.13.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkC(?:GImage(?:AuxiliaryDataTypePortraitEffectsMatte|Property(?:DNG(?:A(?:ctiveArea|n(?:alogBalance|tiAliasStrength)|sShot(?:ICCProfile|Pr(?:eProfileMatrix|ofileName)))|B(?:a(?:selineExposureOffset|yerGreenSplit)|estQualityScale|lackLevel(?:Delta(?:H|V)|RepeatDim))|C(?:FA(?:Layout|PlaneColor)|hromaBlurRadius|olorimetricReference|urrent(?:ICCProfile|PreProfileMatrix))|Default(?:BlackRender|Crop(?:Origin|Size)|Scale|UserCrop)|ExtraCameraProfiles|ForwardMatrix(?:1|2)|Linear(?:ResponseLimit|izationTable)|Ma(?:kerNoteSafety|skedAreas)|N(?:ewRawImageDigest|oiseReductionApplied)|O(?:pcodeList(?:1|2|3)|riginal(?:BestQualityFinalSize|Default(?:CropSize|FinalSize)|RawFile(?:D(?:ata|igest)|Name)))|Pr(?:eview(?:Application(?:Name|Version)|ColorSpace|DateTime|Settings(?:Digest|Name))|ofile(?:Copyright|EmbedPolicy|HueSatMap(?:D(?:ata(?:1|2)|ims)|Encoding)|LookTable(?:D(?:ata|ims)|Encoding)|Name|ToneCurve))|R(?:aw(?:DataUniqueID|ImageDigest|ToPreviewGain)|eductionMatrix(?:1|2)|owInterleaveFactor)|S(?:hadowScale|ubTileBlockSize))|PNG(?:Comment|Disclaimer|Source|Warning)))|TTypesetterOptionAllowUnboundedLayout|V(?:ImageBufferTransferFunction_Linear|PixelFormatContainsGrayscale))\\\\b\",\n\t\t\t\"name\": \"support.variable.10.14.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:C(?:FStreamProperty(?:Allow(?:ConstrainedNetworkAccess|ExpensiveNetworkAccess)|ConnectionIsExpensive)|GImage(?:A(?:nimation(?:DelayTime|LoopCount|StartIndex)|uxiliaryDataTypeSemanticSegmentation(?:HairMatte|SkinMatte|TeethMatte))|Property(?:APNG(?:CanvasPixel(?:Height|Width)|FrameInfoArray)|Exif(?:CompositeImage|OffsetTime(?:Digitized|Original)?|Source(?:ExposureTimesOfCompositeImage|ImageNumberOfCompositeImage))|GIF(?:CanvasPixel(?:Height|Width)|FrameInfoArray)|HEICS(?:CanvasPixel(?:Height|Width)|D(?:elayTime|ictionary)|FrameInfoArray|LoopCount|UnclampedDelayTime)))|TFontFeature(?:SampleTextKey|TooltipTextKey)|V(?:ImageBufferAlphaChannelMode(?:Key|_(?:PremultipliedAlpha|StraightAlpha))|MetalTextureStorageMode))|MIDIPropertyNameConfigurationDictionary|Sec(?:PropertyType(?:Array|Number)|UseDataProtectionKeychain))\\\\b\",\n\t\t\t\"name\": \"support.variable.10.15.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkColorSyncExtendedRange\\\\b\",\n\t\t\t\"name\": \"support.variable.10.16.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bk(?:C(?:FStream(?:NetworkServiceType(?:AVStreaming|Responsive(?:AV|Data))|Property(?:ConnectionIsCellular|NoCellular))|GImage(?:Destination(?:DateTime|Me(?:rgeMetadata|tadata)|Orientation)|Metadata(?:EnumerateRecursively|Namespace(?:DublinCore|Exif(?:Aux)?|IPTCCore|Photoshop|TIFF|XMP(?:Basic|Rights))|Prefix(?:DublinCore|Exif(?:Aux)?|IPTCCore|Photoshop|TIFF|XMP(?:Basic|Rights))|ShouldExcludeXMP))|T(?:Baseline(?:Class(?:AttributeName|Hanging|Ideographic(?:Centered|High|Low)|Math|Roman)|InfoAttributeName|OriginalFont|Reference(?:Font|InfoAttributeName))|FontD(?:escriptorMatching(?:CurrentAssetSize|Descriptors|Error|Percentage|Result|SourceDescriptor|Total(?:AssetSize|DownloadedSize))|ownloadableAttribute)|WritingDirectionAttributeName)|VImageBufferColorPrimaries_P22)|Sec(?:O(?:AEP(?:EncodingParametersAttributeName|M(?:GF1DigestAlgorithmAttributeName|essageLengthAttributeName))|IDSRVName)|P(?:addingOAEPKey|olicyAppleTimeStamping|rivateKeyAttrs|ublicKeyAttrs)))\\\\b\",\n\t\t\t\"name\": \"support.variable.10.8.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:XPC_ACTIVITY_(?:ALLOW_BATTERY|CHECK_IN|DELAY|GRACE_PERIOD|INTERVAL(?:_(?:1(?:5_MIN|_(?:DAY|HOUR|MIN))|30_MIN|4_HOURS|5_MIN|7_DAYS|8_HOURS))?|PRIORITY(?:_(?:MAINTENANCE|UTILITY))?|RE(?:PEATING|QUIRE_SCREEN_SLEEP))|k(?:AX(?:MarkedMisspelledTextAttribute|TrustedCheckOptionPrompt)|C(?:FStreamPropertySSLContext|GImage(?:Metadata(?:NamespaceExifEX|PrefixExifEX)|Property(?:Exif(?:ISOSpeed(?:Latitude(?:yyy|zzz))?|RecommendedExposureIndex|S(?:ensitivityType|tandardOutputSensitivity))|OpenEXR(?:AspectRatio|Dictionary))|SourceShouldCacheImmediately)|TLanguageAttributeName)|S(?:ec(?:Attr(?:Access(?:Group|ible(?:AfterFirstUnlock(?:ThisDeviceOnly)?|WhenUnlocked(?:ThisDeviceOnly)?)?)|KeyTypeEC|Synchronizable(?:Any)?)|Policy(?:Apple(?:PassbookSigning|Revocation)|RevocationFlags|TeamIdentifier)|Trust(?:E(?:valuationDate|xtendedValidation)|OrganizationName|Re(?:sultValue|vocation(?:Checked|ValidUntilDate))))|peech(?:AudioOutputFormatProperty|Output(?:ChannelMapProperty|ToFileDescriptorProperty)|SynthExtensionProperty)))|vm_kernel_page_(?:mask|s(?:hift|ize)))\\\\b\",\n\t\t\t\"name\": \"support.variable.10.9.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CATransform3DIdentity|KERNEL_(?:AUDIT_TOKEN|SECURITY_TOKEN)|NDR_record|UUID_NULL|bootstrap_port|gGuid(?:Apple(?:CSP(?:DL)?|DotMac(?:DL|TP)|FileDL|LDAPDL|SdCSPDL|X509(?:CL|TP))|Cssm)|k(?:A(?:ERemoteProcess(?:NameKey|ProcessIDKey|U(?:RLKey|serIDKey))|X(?:A(?:ttachmentTextAttribute|utocorrectedTextAttribute)|BackgroundColorTextAttribute|Fo(?:nt(?:FamilyKey|NameKey|SizeKey|TextAttribute)|reg(?:oundColorTextAttribute|roundColorTextAttribute))|LinkTextAttribute|MisspelledTextAttribute|NaturalLanguageTextAttribute|ReplacementStringTextAttribute|S(?:hadowTextAttribute|trikethrough(?:ColorTextAttribute|TextAttribute)|uperscriptTextAttribute)|Underline(?:ColorTextAttribute|TextAttribute)|V(?:alue(?:AXErrorType|C(?:FRangeType|G(?:PointType|RectType|SizeType))|IllegalType)|isibleNameKey))|u(?:dioStreamAnyRate|thorizationExternalFormLength))|C(?:F(?:DNSServiceFailureKey|ErrorDomain(?:C(?:FNetwork|GImageMetadata)|SystemConfiguration|WinSock)|FTPStatusCodeKey|GetAddrInfoFailureKey|HTTP(?:Authentication(?:AccountDomain|Password|Scheme(?:Basic|Digest|Kerberos|N(?:TLM|egotiate(?:2)?)|XMobileMeAuthToken)|Username)|Version1_(?:0|1))|NetworkProxies(?:Exc(?:eptionsList|ludeSimpleHostnames)|FTP(?:Enable|P(?:assive|ort|roxy))|Gopher(?:Enable|P(?:ort|roxy))|HTTP(?:Enable|P(?:ort|roxy)|S(?:Enable|P(?:ort|roxy)))|ProxyAuto(?:Config(?:Enable|JavaScript|URLString)|DiscoveryEnable)|RTSP(?:Enable|P(?:ort|roxy))|SOCKS(?:Enable|P(?:ort|roxy)))|Proxy(?:AutoConfiguration(?:HTTPResponseKey|JavaScriptKey|URLKey)|HostNameKey|P(?:asswordKey|ortNumberKey)|Type(?:AutoConfiguration(?:JavaScript|URL)|FTP|HTTP(?:S)?|Key|None|SOCKS)|UsernameKey)|S(?:OCKS(?:NegotiationMethodKey|StatusCodeKey|VersionKey)|tream(?:ErrorDomain(?:FTP|HTTP|Mach|Net(?:DB|Services)|SystemConfiguration|WinSock)|NetworkServiceType(?:Background|V(?:ideo|oice))?|Property(?:ProxyLocalBypass|S(?:SL(?:PeerTrust|Settings)|ocketRemote(?:Host|NetService)))|SSL(?:Certificates|IsServer|Level|PeerName|ValidatesCertificateChain)))|URLErrorFailingURL(?:ErrorKey|StringErrorKey))|GImage(?:Destination(?:BackgroundColor|LossyCompressionQuality)|Property(?:8BIM(?:Dictionary|LayerNames)|C(?:IFF(?:C(?:ameraSerialNumber|ontinuousDrive)|D(?:escription|ictionary)|F(?:irmware|lashExposureComp|ocusMode)|Image(?:FileName|Name|SerialNumber)|LensM(?:axMM|inMM|odel)|Me(?:asuredEV|teringMode)|OwnerName|Re(?:cordID|lease(?:Method|Timing))|S(?:elfTimingTime|hootingMode)|WhiteBalanceIndex)|olorModel(?:CMYK|Gray|Lab|RGB)?)|D(?:NG(?:BackwardVersion|CameraSerialNumber|Dictionary|L(?:ensInfo|ocalizedCameraModel)|UniqueCameraModel|Version)|PI(?:Height|Width)|epth)|Exif(?:A(?:pertureValue|ux(?:Dictionary|F(?:irmware|lashCompensation)|ImageNumber|Lens(?:I(?:D|nfo)|Model|SerialNumber)|OwnerName|SerialNumber))|B(?:odySerialNumber|rightnessValue)|C(?:FAPattern|ameraOwnerName|o(?:lorSpace|mp(?:onentsConfiguration|ressedBitsPerPixel)|ntrast)|ustomRendered)|D(?:ateTime(?:Digitized|Original)|eviceSettingDescription|i(?:ctionary|gitalZoomRatio))|Exposure(?:BiasValue|Index|Mode|Program|Time)|F(?:Number|ileSource|lash(?:Energy|PixVersion)?|ocal(?:Len(?:In35mmFilm|gth)|Plane(?:ResolutionUnit|XResolution|YResolution)))|Ga(?:inControl|mma)|I(?:SOSpeedRatings|mageUniqueID)|L(?:ens(?:M(?:ake|odel)|S(?:erialNumber|pecification))|ightSource)|M(?:a(?:kerNote|xApertureValue)|eteringMode)|OECF|Pixel(?:XDimension|YDimension)|RelatedSoundFile|S(?:aturation|cene(?:CaptureType|Type)|ensingMethod|h(?:arpness|utterSpeedValue)|p(?:atialFrequencyResponse|ectralSensitivity)|ub(?:ject(?:Area|Dist(?:Range|ance)|Location)|secTime(?:Digitized)?))|UserComment|Version|WhiteBalance)|FileSize|G(?:IF(?:D(?:elayTime|ictionary)|HasGlobalColorMap|ImageColorMap|LoopCount|UnclampedDelayTime)|PS(?:A(?:ltitude(?:Ref)?|reaInformation)|D(?:OP|ateStamp|est(?:Bearing(?:Ref)?|Distance(?:Ref)?|L(?:atitude(?:Ref)?|ongitude(?:Ref)?))|i(?:ctionary|fferental))|ImgDirection(?:Ref)?|L(?:atitude(?:Ref)?|ongitude(?:Ref)?)|M(?:apDatum|easureMode)|ProcessingMethod|S(?:atellites|peed(?:Ref)?|tatus)|T(?:imeStamp|rack(?:Ref)?)|Version))|HasAlpha|I(?:PTC(?:ActionAdvised|Byline(?:Title)?|C(?:a(?:ptionAbstract|tegory)|ity|o(?:nt(?:act(?:Info(?:Address|C(?:ity|ountry)|Emails|P(?:hones|ostalCode)|StateProvince|WebURLs))?|entLocation(?:Code|Name))|pyrightNotice|untryPrimaryLocation(?:Code|Name))|re(?:atorContactInfo|dit))|D(?:ateCreated|i(?:ctionary|gitalCreation(?:Date|Time)))|E(?:dit(?:Status|orialUpdate)|xpiration(?:Date|Time))|FixtureIdentifier|Headline|Image(?:Orientation|Type)|Keywords|LanguageIdentifier|O(?:bject(?:AttributeReference|Cycle|Name|TypeReference)|rigina(?:lTransmissionReference|tingProgram))|Pro(?:gramVersion|vinceState)|R(?:e(?:ference(?:Date|Number|Service)|lease(?:Date|Time))|ightsUsageTerms)|S(?:cene|ource|pecialInstructions|tarRating|u(?:b(?:Location|jectReference)|pplementalCategory))|TimeCreated|Urgency|WriterEditor)|s(?:Float|Indexed))|JFIF(?:D(?:ensityUnit|ictionary)|IsProgressive|Version|XDensity|YDensity)|Maker(?:Canon(?:AspectRatioInfo|C(?:ameraSerialNumber|ontinuousDrive)|Dictionary|F(?:irmware|lashExposureComp)|ImageSerialNumber|LensModel|OwnerName)|FujiDictionary|MinoltaDictionary|Nikon(?:C(?:ameraSerialNumber|olorMode)|Di(?:ctionary|gitalZoom)|F(?:lash(?:ExposureComp|Setting)|ocus(?:Distance|Mode))|I(?:SOSe(?:lection|tting)|mageAdjustment)|Lens(?:Adapter|Info|Type)|Quality|Sh(?:arpenMode|ootingMode|utterCount)|WhiteBalanceMode)|OlympusDictionary|PentaxDictionary)|Orientation|P(?:NG(?:Author|C(?:hromaticities|opyright|reationTime)|D(?:escription|ictionary)|Gamma|InterlaceType|ModificationTime|Software|Title|XPixelsPerMeter|YPixelsPerMeter|sRGBIntent)|ixel(?:Height|Width)|rofileName)|RawDictionary|TIFF(?:Artist|Co(?:mpression|pyright)|D(?:ateTime|ictionary|ocumentName)|HostComputer|ImageDescription|M(?:ake|odel)|Orientation|P(?:hotometricInterpretation|rimaryChromaticities)|ResolutionUnit|Software|TransferFunction|WhitePoint|XResolution|YResolution))|Source(?:CreateThumbnail(?:FromImage(?:Always|IfAbsent)|WithTransform)|Should(?:AllowFloat|Cache)|T(?:humbnailMaxPixelSize|ypeIdentifierHint)))|M(?:M(?:ApplyTransformProcName|CreateTransformPropertyProcName|Initialize(?:LinkProfileProcName|TransformProcName))|SEncoderDigestAlgorithmSHA(?:1|256))|SIdentity(?:ErrorDomain|GeneratePosixName)|T(?:F(?:o(?:nt(?:AttributeName|BaselineAdjustAttribute|C(?:ascadeListAttribute|haracterSetAttribute|o(?:llection(?:DisallowAutoActivationOption|IncludeDisabledFontsOption|RemoveDuplicatesOption)|pyrightNameKey))|D(?:es(?:criptionNameKey|igner(?:NameKey|URLNameKey))|isplayNameAttribute)|EnabledAttribute|F(?:amilyName(?:Attribute|Key)|eature(?:Se(?:lector(?:DefaultKey|IdentifierKey|NameKey|SettingKey)|ttingsAttribute)|Type(?:ExclusiveKey|IdentifierKey|NameKey|SelectorsKey)|sAttribute)|ixedAdvanceAttribute|ormatAttribute|ullNameKey)|L(?:anguagesAttribute|icense(?:NameKey|URLNameKey))|Ma(?:cintoshEncodingsAttribute|n(?:ager(?:BundleIdentifier|Error(?:Domain|Font(?:AssetNameKey|DescriptorsKey|URLsKey))|RegisteredFontsChangedNotification)|ufacturerNameKey)|trixAttribute)|NameAttribute|OrientationAttribute|P(?:ostScript(?:CIDNameKey|NameKey)|riorityAttribute)|Registration(?:ScopeAttribute|UserInfoAttribute)|S(?:ampleTextNameKey|izeAttribute|lantTrait|tyleName(?:Attribute|Key)|ubFamilyNameKey|ymbolicTrait)|Tra(?:demarkNameKey|itsAttribute)|U(?:RLAttribute|niqueNameKey)|V(?:ariationA(?:ttribute|xis(?:DefaultValueKey|IdentifierKey|M(?:aximumValueKey|inimumValueKey)|NameKey))|e(?:ndorURLNameKey|rsionNameKey))|W(?:eightTrait|idthTrait))|regroundColor(?:AttributeName|FromContextAttributeName))|rame(?:ClippingPathsAttributeName|P(?:ath(?:ClippingPathAttributeName|FillRuleAttributeName|WidthAttributeName)|rogressionAttributeName)))|GlyphInfoAttributeName|KernAttributeName|LigatureAttributeName|ParagraphStyleAttributeName|RunDelegateAttributeName|S(?:troke(?:ColorAttributeName|WidthAttributeName)|uperscriptAttributeName)|T(?:abColumnTerminatorsAttributeName|ypesetterOptionForcedEmbeddingLevel)|Underline(?:ColorAttributeName|StyleAttributeName)|VerticalFormsAttributeName)|V(?:Buffer(?:MovieTimeKey|NonPropagatedAttachmentsKey|PropagatedAttachmentsKey|Time(?:ScaleKey|ValueKey))|I(?:mageBuffer(?:C(?:GColorSpaceKey|hroma(?:Location(?:BottomFieldKey|TopFieldKey|_(?:Bottom(?:Left)?|Center|DV420|Left|Top(?:Left)?))|Subsampling(?:Key|_4(?:11|2(?:0|2))))|leanAperture(?:H(?:eightKey|orizontalOffsetKey)|Key|VerticalOffsetKey|WidthKey)|olorPrimaries(?:Key|_(?:EBU_3213|ITU_R_709_2|SMPTE_C)))|Display(?:DimensionsKey|HeightKey|WidthKey)|Field(?:CountKey|Detail(?:Key|SpatialFirstLine(?:Early|Late)|Temporal(?:BottomFirst|TopFirst)))|GammaLevelKey|ICCProfileKey|P(?:ixelAspectRatio(?:HorizontalSpacingKey|Key|VerticalSpacingKey)|referredCleanApertureKey)|TransferFunction(?:Key|_(?:ITU_R_709_2|SMPTE_240M_1995|UseGamma))|YCbCrMatrix(?:Key|_(?:ITU_R_(?:601_4|709_2)|SMPTE_240M_1995)))|ndefiniteTime)|Pixel(?:Buffer(?:BytesPerRowAlignmentKey|CG(?:BitmapContextCompatibilityKey|ImageCompatibilityKey)|ExtendedPixels(?:BottomKey|LeftKey|RightKey|TopKey)|HeightKey|IOSurface(?:CoreAnimationCompatibilityKey|OpenGL(?:ES(?:FBOCompatibilityKey|TextureCompatibilityKey)|FBOCompatibilityKey|TextureCompatibilityKey)|PropertiesKey)|MemoryAllocatorKey|OpenGL(?:CompatibilityKey|ES(?:CompatibilityKey|TextureCacheCompatibilityKey))|P(?:ixelFormatTypeKey|laneAlignmentKey|ool(?:AllocationThresholdKey|FreeBufferNotification|M(?:aximumBufferAgeKey|inimumBufferCountKey)))|WidthKey)|Format(?:B(?:itsPerBlock|l(?:ackBlock|ock(?:H(?:eight|orizontalAlignment)|VerticalAlignment|Width)))|C(?:G(?:Bitmap(?:ContextCompatibility|Info)|ImageCompatibility)|o(?:decType|n(?:stant|tainsAlpha)))|F(?:illExtendedPixelsCallback|ourCC)|HorizontalSubsampling|Name|OpenGL(?:Compatibility|ESCompatibility|Format|InternalFormat|Type)|Planes|QDCompatibility|VerticalSubsampling))|ZeroTime)|olorSync(?:A(?:CESCGLinearProfile|dobeRGB1998Profile)|B(?:estQuality|lackPointCompensation)|C(?:ameraDeviceClass|onver(?:sion(?:1DLut|3DLut|BPC|ChannelID|GridPoints|InpChan|Matrix|NDLut|OutChan|ParamCurve(?:0|1|2|3|4))|tQuality)|ustomProfiles)|D(?:CIP3Profile|evice(?:Class|De(?:faultProfileID|scription(?:s)?)|HostScope|ID|ModeDescription(?:s)?|Profile(?:I(?:D|s(?:Current|Default|Factory))|URL|sNotification)|RegisteredNotification|U(?:nregisteredNotification|serScope))|isplay(?:Device(?:Class|ProfilesNotification)|P3Profile)|raftQuality)|F(?:actoryProfiles|ixedPointRange)|Generic(?:CMYKProfile|Gray(?:Gamma22Profile|Profile)|LabProfile|RGBProfile|XYZProfile)|ITUR(?:2020Profile|709Profile)|NormalQuality|Pr(?:eferredCMM|interDeviceClass|ofile(?:C(?:lass|o(?:lorSpace|mputerDomain))|Description|H(?:eader|ostScope)|MD5Digest|PCS|RepositoryChangeNotification|U(?:RL|ser(?:Domain|Scope)))?)|R(?:OMMRGBProfile|e(?:gistrationUpdateWindowServer|nderingIntent(?:Absolute|Perceptual|Relative|Saturation|UseProfileHeader)?))|S(?:RGBProfile|cannerDeviceClass|ig(?:A(?:ToB(?:0Tag|1Tag|2Tag)|bstractClass)|B(?:ToA(?:0Tag|1Tag|2Tag)|lue(?:ColorantTag|TRCTag))|C(?:mykData|o(?:lorSpaceClass|pyrightTag))|D(?:eviceM(?:fgDescTag|odelDescTag)|isplayClass)|G(?:amutTag|r(?:ay(?:Data|TRCTag)|een(?:ColorantTag|TRCTag)))|InputClass|L(?:abData|inkClass)|Media(?:BlackPointTag|WhitePointTag)|NamedColor(?:2Tag|Class)|OutputClass|Pr(?:eview(?:0Tag|1Tag|2Tag)|ofile(?:DescriptionTag|SequenceDescTag))|R(?:ed(?:ColorantTag|TRCTag)|gbData)|TechnologyTag|ViewingCond(?:DescTag|itionsTag)|XYZData))|Transform(?:C(?:odeFragment(?:MD5|Type)|reator)|D(?:eviceTo(?:Device|PCS)|stSpace)|FullConversionData|GamutCheck|Info|P(?:CSTo(?:Device|PCS)|arametricConversionData)|S(?:implifiedConversionData|rcSpace)|Tag)))|D(?:ADiskDescription(?:Bus(?:NameKey|PathKey)|Device(?:GUIDKey|InternalKey|ModelKey|P(?:athKey|rotocolKey)|RevisionKey|TDMLockedKey|UnitKey|VendorKey)|Media(?:B(?:SD(?:M(?:ajorKey|inorKey)|NameKey|UnitKey)|lockSizeKey)|ContentKey|E(?:jectableKey|ncrypt(?:edKey|ionDetailKey))|IconKey|KindKey|LeafKey|NameKey|PathKey|RemovableKey|SizeKey|TypeKey|UUIDKey|W(?:holeKey|ritableKey))|Volume(?:KindKey|MountableKey|N(?:ameKey|etworkKey)|PathKey|TypeKey|UUIDKey))|R(?:A(?:bstractFile|ccessDate|llFilesystems|pplicationIdentifier|ttributeModificationDate|udio(?:FourChannelKey|PreEmphasisKey))|B(?:ackupDate|ibliographicFile|lock(?:Size(?:Key)?|TypeKey)|u(?:fferZone1DataKey|rn(?:AppendableKey|CompletionAction(?:Eject|Key|Mount)|DoubleLayerL0DataZoneBlocksKey|FailureAction(?:Eject|Key|None)|Key|OverwriteDiscKey|RequestedSpeedKey|St(?:atusChangedNotification|rategy(?:BDDAO|CD(?:SAO|TAO)|DVDDAO|IsRequiredKey|Key))|TestingKey|UnderrunProtectionKey|VerifyDiscKey)))|C(?:DText(?:ArrangerKey|C(?:FStringEncodingKey|haracterCodeKey|losedKey|o(?:mposerKey|pyrightAssertedFor(?:NamesKey|SpecialMessagesKey|TitlesKey)))|DiscIdentKey|Genre(?:CodeKey|Key)|Key|LanguageKey|MCNISRCKey|PerformerKey|S(?:izeKey|ongwriterKey|pecialMessageKey)|T(?:OC(?:2Key|Key)|itleKey))|o(?:ntentModificationDate|pyrightFile)|reationDate)|D(?:VD(?:CopyrightInfoKey|TimestampKey)|ata(?:FormKey|Preparer)|e(?:faultDate|vice(?:AppearedNotification|BurnSpeed(?:BD1x|CD1x|DVD1x|HDDVD1x|Max|sKey)|C(?:an(?:TestWrite(?:CDKey|DVDKey)|UnderrunProtect(?:CDKey|DVDKey)|Write(?:BD(?:Key|R(?:EKey|Key))|CD(?:Key|R(?:Key|WKey|awKey)|SAOKey|T(?:AOKey|extKey))|DVD(?:DAOKey|Key|PlusR(?:DoubleLayerKey|Key|W(?:DoubleLayerKey|Key))|R(?:AMKey|DualLayerKey|Key|W(?:DualLayerKey|Key)))|HDDVD(?:Key|R(?:AMKey|DualLayerKey|Key|W(?:DualLayerKey|Key)))|I(?:SRCKey|ndexPointsKey)|Key))|urrentWriteSpeedKey)|DisappearedNotification|FirmwareRevisionKey|I(?:ORegistryEntryPathKey|s(?:BusyKey|TrayOpenKey))|LoadingMechanismCan(?:EjectKey|InjectKey|OpenKey)|M(?:aximumWriteSpeedKey|edia(?:B(?:SDNameKey|locks(?:FreeKey|OverwritableKey|UsedKey))|Class(?:BD|CD|DVD|HDDVD|Key|Unknown)|DoubleLayerL0DataZoneBlocksKey|I(?:nfoKey|s(?:AppendableKey|BlankKey|ErasableKey|OverwritableKey|ReservedKey))|S(?:essionCountKey|tate(?:InTransition|Key|MediaPresent|None))|T(?:rackCountKey|ype(?:BDR(?:E|OM)?|CDR(?:OM|W)?|DVD(?:PlusR(?:DoubleLayer|W(?:DoubleLayer)?)?|R(?:AM|DualLayer|OM|W(?:DualLayer)?)?)|HDDVDR(?:AM|DualLayer|OM|W(?:DualLayer)?)?|Key|Unknown))))|P(?:hysicalInterconnect(?:ATAPI|Fi(?:breChannel|reWire)|Key|Location(?:External|Internal|Key|Unknown)|SCSI|USB)|roductNameKey)|S(?:tatusChangedNotification|upportLevel(?:AppleS(?:hipping|upported)|Key|None|Unsupported|VendorSupported))|Track(?:InfoKey|RefsKey)|VendorNameKey|Write(?:BufferSizeKey|CapabilitiesKey))))|E(?:ffectiveDate|r(?:ase(?:StatusChangedNotification|Type(?:Complete|Key|Quick))|rorStatus(?:AdditionalSenseStringKey|Error(?:InfoStringKey|Key|StringKey)|Key|Sense(?:CodeStringKey|Key)))|xpirationDate)|FreeBlocksKey|HFSPlus(?:CatalogNodeID|TextEncodingHint)?|I(?:SO(?:9660(?:Level(?:One|Two)|VersionNumber)?|Level|MacExtensions|RockRidgeExtensions)|n(?:dexPointsKey|visible))|Joliet|M(?:a(?:c(?:ExtendedFinderFlags|Fi(?:le(?:Creator|Type)|nder(?:Flags|HideExtension))|IconLocation|ScrollPosition|Window(?:Bounds|View))|xBurnSpeedKey)|ediaCatalogNumberKey)|NextWritableAddressKey|P(?:osix(?:FileMode|GID|UID)|reGap(?:IsRequiredKey|LengthKey)|ublisher)|Re(?:cordingDate|fConCFTypeCallbacks)|S(?:CMSCopyright(?:Free|Protected(?:Copy|Original))|e(?:rialCopyManagementStateKey|ssion(?:FormatKey|NumberKey))|tatus(?:Current(?:S(?:essionKey|peedKey)|TrackKey)|EraseTypeKey|P(?:ercentCompleteKey|rogress(?:Current(?:KPS|XFactor)|InfoKey))|State(?:Done|Erasing|F(?:ailed|inishing)|Key|None|Preparing|Session(?:Close|Open)|Track(?:Close|Open|Write)|Verifying)|Total(?:SessionsKey|TracksKey))|u(?:bchannelDataForm(?:Key|None|Pack|Raw)|ppressMacSpecificFiles)|y(?:nchronousBehaviorKey|stemIdentifier))|Track(?:I(?:SRCKey|sEmptyKey)|LengthKey|ModeKey|NumberKey|Packet(?:SizeKey|Type(?:Fixed|Key|Variable))|StartAddressKey|Type(?:Closed|In(?:complete|visible)|Key|Reserved))|UDF(?:ApplicationIdentifierSuffix|ExtendedFilePermissions|InterchangeLevel|Max(?:InterchangeLevel|VolumeSequenceNumber)|PrimaryVolumeDescriptorNumber|RealTimeFile|V(?:ersion1(?:02|50)|olumeSe(?:quenceNumber|t(?:I(?:dentifier|mplementationUse)|Timestamp)))|WriteVersion)?|V(?:erificationType(?:Checksum|Key|None|ProduceAgain|ReceiveData)|olume(?:C(?:heckedDate|reationDate)|E(?:ffectiveDate|xpirationDate)|ModificationDate|Set))))|F(?:CFont(?:CGColorAttribute|Fa(?:ceAttribute|milyAttribute)|NameAttribute|SizeAttribute|VisibleNameAttribute)|ontPanel(?:A(?:TSUFontIDKey|ttribute(?:SizesKey|TagsKey|ValuesKey|sKey))|BackgroundColorAttributeName|Feature(?:SelectorsKey|TypesKey)|MouseTrackingState|Variation(?:AxesKey|ValuesKey)))|HI(?:Delegate(?:AfterKey|BeforeKey)|Object(?:CustomData(?:C(?:DEFProcIDKey|lassIDKey)|DelegateGroupParametersKey|Parameter(?:NamesKey|TypesKey|ValuesKey)|SuperClassIDKey)|InitParam(?:Description|Event(?:Name|Type)|UserName))|T(?:extViewClassID|oolboxVersionNumber)|View(?:MenuContentID|Window(?:C(?:loseBoxID|o(?:llapseBoxID|ntentID))|GrowBoxID|T(?:itleID|oolbar(?:ButtonID|ID))|ZoomBoxID)))|IO(?:MasterPortDefault|Surface(?:AllocSize|BytesPer(?:Element|Row)|CacheMode|Element(?:Height|Width)|Height|Offset|P(?:ixelFormat|lane(?:B(?:ase|ytesPer(?:Element|Row))|Element(?:Height|Width)|Height|Info|Offset|Size|Width))|Width))|JSClassDefinitionEmpty|LSQuarantine(?:Agent(?:BundleIdentifierKey|NameKey)|DataURLKey|OriginURLKey|T(?:imeStampKey|ype(?:CalendarEventAttachment|EmailAttachment|InstantMessageAttachment|Key|Other(?:Attachment|Download)|WebDownload)))|M(?:D(?:Attribute(?:AllValues|DisplayValues|MultiValued|Name|ReadOnlyValues|Type)|ExporterAvaliable|Item(?:A(?:cquisitionM(?:ake|odel)|l(?:bum|titude)|p(?:erture|pl(?:eLoop(?:Descriptors|s(?:KeyFilterType|LoopMode|RootKey))|icationCategories))|ttributeChangeDate|u(?:di(?:ences|o(?:BitRate|ChannelCount|EncodingApplication|SampleRate|TrackNumber))|thor(?:Addresses|EmailAddresses|s)))|BitsPerSample|C(?:FBundleIdentifier|ameraOwner|ity|o(?:decs|lorSpace|m(?:ment|poser)|nt(?:actKeywords|ent(?:CreationDate|ModificationDate|Type(?:Tree)?)|ributors)|pyright|untry|verage)|reator)|D(?:ateAdded|e(?:liveryType|scription)|i(?:rector|splayName)|ownloadedDate|u(?:eDate|rationSeconds))|E(?:XIF(?:GPSVersion|Version)|ditors|mailAddresses|ncodingApplications|x(?:ecutable(?:Architectures|Platform)|posure(?:Mode|Program|TimeS(?:econds|tring))))|F(?:Number|S(?:C(?:ontentChangeDate|reationDate)|HasCustomIcon|I(?:nvisible|s(?:ExtensionHidden|Stationery))|Label|N(?:ame|odeCount)|Owner(?:GroupID|UserID)|Size)|inderComment|lashOnOff|o(?:calLength(?:35mm)?|nts))|G(?:PS(?:AreaInformation|D(?:OP|ateStamp|est(?:Bearing|Distance|L(?:atitude|ongitude))|ifferental)|M(?:apDatum|easureMode)|ProcessingMethod|Status|Track)|enre)|H(?:asAlphaChannel|eadline)|I(?:SOSpeed|dentifier|mageDirection|n(?:formation|st(?:antMessageAddresses|ructions))|s(?:ApplicationManaged|GeneralMIDISequence|LikelyJunk))|K(?:ey(?:Signature|words)|ind)|L(?:a(?:nguages|stUsedDate|titude|yerNames)|ensModel|ongitude|yricist)|M(?:axAperture|e(?:diaTypes|teringMode)|usical(?:Genre|Instrument(?:Category|Name)))|N(?:amedLocation|umberOfPages)|Or(?:ganizations|i(?:entation|ginal(?:Format|Source)))|P(?:a(?:ge(?:Height|Width)|rticipants|th)|erformers|honeNumbers|ixel(?:Count|Height|Width)|ro(?:ducer|fileName|jects)|ublishers)|R(?:e(?:c(?:ipient(?:Addresses|EmailAddresses|s)|ording(?:Date|Year))|dEyeOnOff|solution(?:HeightDPI|WidthDPI))|ights)|S(?:ecurityMethod|peed|t(?:a(?:rRating|teOrProvince)|reamable)|ubject)|T(?:e(?:mpo|xtContent)|heme|i(?:me(?:Signature|stamp)|tle)|otalBitRate)|URL|V(?:ersion|ideoBitRate)|Wh(?:ereFroms|iteBalance))|Label(?:AddedNotification|BundleURL|C(?:hangedNotification|ontentChangeDate)|DisplayName|I(?:con(?:Data|UUID)|sMutuallyExclusiveSetMember)|Kind(?:IsMutuallyExclusiveSetKey|VisibilityKey)?|RemovedNotification|SetsFinderColor|UUID|Visibility)|P(?:rivateVisibility|ublicVisibility)|Query(?:Did(?:FinishNotification|UpdateNotification)|ProgressNotification|ResultContentRelevance|Scope(?:AllIndexed|Computer(?:Indexed)?|Home|Network(?:Indexed)?)|Update(?:AddedItems|ChangedItems|RemovedItems)))|IDI(?:ObjectType_ExternalMask|Property(?:AdvanceScheduleTimeMuSec|C(?:anRoute|onnectionUniqueID)|D(?:eviceID|isplayName|river(?:DeviceEditorApp|Owner|Version))|I(?:mage|s(?:Broadcast|DrumMachine|E(?:ffectUnit|mbeddedEntity)|Mixer|Sampler))|M(?:a(?:nufacturer|x(?:ReceiveChannels|SysExSpeed|TransmitChannels))|odel)|Name|Offline|P(?:anDisruptsStereo|rivate)|Receive(?:Channels|s(?:BankSelect(?:LSB|MSB)|Clock|MTC|Notes|ProgramChanges))|S(?:ingleRealtimeEntity|upports(?:GeneralMIDI|MMC|ShowControl))|Transmit(?:Channels|s(?:BankSelect(?:LSB|MSB)|Clock|MTC|Notes|ProgramChanges))|UniqueID)))|QL(?:PreviewPropertyTextEncodingNameKey|ThumbnailOption(?:IconModeKey|ScaleFactorKey))|S(?:C(?:BondStatusDevice(?:AggregationStatus|Collecting|Distributing)|Comp(?:AnyRegex|Global|HostNames|Interface|Network|S(?:ervice|ystem)|Users)|DynamicStore(?:Domain(?:File|P(?:lugin|refs)|S(?:etup|tate))|Prop(?:Net(?:Interfaces|Primary(?:Interface|Service)|ServiceIDs)|Setup(?:CurrentSet|LastUpdated))|UseSessionKeys)|Ent(?:Net(?:6to4|AirPort|D(?:HCP|NS)|Ethernet|FireWire|I(?:P(?:Sec|v(?:4|6))|nterface)|L(?:2TP|ink)|Modem|P(?:PP(?:Serial|oE)?|roxies)|SMB)|UsersConsoleUser)|Network(?:Interface(?:IPv4|Type(?:6to4|B(?:luetooth|ond)|Ethernet|FireWire|I(?:EEE80211|P(?:Sec|v4)|rDA)|L2TP|Modem|PPP|Serial|VLAN|WWAN))|ProtocolType(?:DNS|IPv(?:4|6)|Proxies|SMB))|Pr(?:ef(?:CurrentSet|NetworkServices|S(?:ets|ystem))|op(?:InterfaceName|MACAddress|Net(?:6to4Relay|DNS(?:DomainName|Options|S(?:e(?:arch(?:Domains|Order)|rver(?:Addresses|Port|Timeout))|ortList|upplementalMatch(?:Domains|Orders)))|EthernetM(?:TU|edia(?:Options|SubType))|I(?:P(?:Sec(?:AuthenticationMethod|ConnectTime|Local(?:Certificate|Identifier(?:Type)?)|RemoteAddress|S(?:haredSecret(?:Encryption)?|tatus)|XAuth(?:Enabled|Name|Password(?:Encryption)?))|v(?:4(?:Addresses|BroadcastAddresses|ConfigMethod|D(?:HCPClientID|estAddresses)|Router|SubnetMasks)|6(?:Addresses|ConfigMethod|DestAddresses|Flags|PrefixLength|Router)))|nterface(?:DeviceName|Hardware|SubType|Type|s))|L(?:2TP(?:IPSecSharedSecret(?:Encryption)?|Transport)|ink(?:Active|Detaching)|ocalHostName)|Modem(?:AccessPointName|Connect(?:Speed|ion(?:Personality|Script))|D(?:ataCompression|evice(?:ContextID|Model|Vendor)|ialMode)|ErrorCorrection|Hold(?:CallWaitingAudibleAlert|DisconnectOnAnswer|Enabled|Reminder(?:Time)?)|Note|PulseDial|Spe(?:aker|ed))|OverridePrimary|P(?:PP(?:A(?:CSPEnabled|uth(?:Name|P(?:assword(?:Encryption)?|ro(?:mpt|tocol))))|C(?:CP(?:Enabled|MPPE(?:128Enabled|40Enabled))|o(?:mm(?:AlternateRemoteAddress|ConnectDelay|DisplayTerminalWindow|Re(?:dial(?:Count|Enabled|Interval)|moteAddress)|TerminalScript|UseTerminalScript)|nnectTime))|D(?:eviceLastCause|i(?:alOnDemand|sconnect(?:On(?:FastUserSwitch|Idle(?:Timer)?|Logout|Sleep)|Time)))|I(?:PCP(?:CompressionVJ|UsePeerDNS)|dleReminder(?:Timer)?)|L(?:CP(?:Compression(?:ACField|PField)|Echo(?:Enabled|Failure|Interval)|M(?:RU|TU)|ReceiveACCM|TransmitACCM)|astCause|ogfile)|OverridePrimary|RetryConnectTime|S(?:essionTimer|tatus)|UseSessionTimer|VerboseLogging)|roxies(?:Exc(?:eptionsList|ludeSimpleHostnames)|FTP(?:Enable|P(?:assive|ort|roxy))|Gopher(?:Enable|P(?:ort|roxy))|HTTP(?:Enable|P(?:ort|roxy)|S(?:Enable|P(?:ort|roxy)))|ProxyAuto(?:Config(?:Enable|JavaScript|URLString)|DiscoveryEnable)|RTSP(?:Enable|P(?:ort|roxy))|SOCKS(?:Enable|P(?:ort|roxy))))|S(?:MB(?:NetBIOSN(?:ame|odeType)|W(?:INSAddresses|orkgroup))|erviceOrder))|SystemComputerName(?:Encoding)?|UserDefinedName|Version))|Resv(?:Inactive|Link)|ValNet(?:I(?:P(?:Sec(?:AuthenticationMethod(?:Certificate|Hybrid|SharedSecret)|LocalIdentifierTypeKeyID|SharedSecretEncryptionKeychain|XAuthPasswordEncryption(?:Keychain|Prompt))|v(?:4ConfigMethod(?:Automatic|BOOTP|DHCP|INFORM|LinkLocal|Manual|PPP)|6ConfigMethod(?:6to4|Automatic|LinkLocal|Manual|RouterAdvertisement)))|nterface(?:SubType(?:L2TP|PPP(?:Serial|oE))|Type(?:6to4|Ethernet|FireWire|IPSec|PPP)))|L2TP(?:IPSecSharedSecretEncryptionKeychain|TransportIP(?:Sec)?)|ModemDialMode(?:IgnoreDialTone|Manual|WaitForDialTone)|PPPAuthP(?:asswordEncryption(?:Keychain|Token)|ro(?:mpt(?:After|Before)|tocol(?:CHAP|EAP|MSCHAP(?:1|2)|PAP)))|SMBNetBIOSNodeType(?:Broadcast|Hybrid|Mixed|Peer)))|K(?:EndTermChars|M(?:aximumTerms|inTermLength)|ProximityIndexing|S(?:t(?:artTermChars|opWords)|ubstitutions)|TermChars)|ec(?:A(?:CLAuthorization(?:Any|De(?:crypt|lete|rive)|E(?:ncrypt|xport(?:Clear|Wrapped))|GenKey|Import(?:Clear|Wrapped)|Keychain(?:Create|Delete|Item(?:Delete|Insert|Modify|Read))|Login|MAC|Sign)|ttr(?:A(?:cc(?:ess|ount)|pplication(?:Label|Tag)|uthenticationType(?:D(?:PA|efault)|HT(?:MLForm|TP(?:Basic|Digest))|MSN|NTLM|RPA)?)|C(?:an(?:De(?:crypt|rive)|Encrypt|Sign|Unwrap|Verify|Wrap)|ertificate(?:Encoding|Type)|omment|reat(?:ionDate|or))|Description|EffectiveKeySize|Generic|Is(?:Extractable|Invisible|Negative|Permanent|Sensitive|suer)|Key(?:Class(?:P(?:rivate|ublic)|Symmetric)?|SizeInBits|Type(?:3DES|AES|CAST|D(?:ES|SA)|ECDSA|R(?:C(?:2|4)|SA))?)|Label|ModificationDate|P(?:RF(?:HmacAlgSHA(?:1|2(?:24|56)|384|512))?|ath|ort|rotocol(?:A(?:FP|ppleTalk)|DAAP|EPPC|FTP(?:Account|Proxy|S)?|HTTP(?:Proxy|S(?:Proxy)?)?|I(?:MAP(?:S)?|PP|RC(?:S)?)|LDAP(?:S)?|NNTP(?:S)?|POP3(?:S)?|RTSP(?:Proxy)?|S(?:M(?:B|TP)|OCKS|SH)|Telnet(?:S)?)?|ublicKeyHash)|Rounds|S(?:alt|e(?:curityDomain|r(?:ialNumber|v(?:er|ice)))|ubject(?:KeyID)?)|Type))|Base(?:32Encoding|64Encoding)|C(?:FError(?:Architecture|GuestAttributes|InfoPlist|Pat(?:h|tern)|Re(?:quirementSyntax|source(?:A(?:dded|ltered)|Missing|S(?:eal|ideband))))|lass(?:Certificate|GenericPassword|I(?:dentity|nternetPassword)|Key)?|o(?:de(?:Attribute(?:Architecture|BundleVersion|Subarchitecture|UniversalFileOffset)|Info(?:C(?:MS|dHashes|ertificates|hangedFiles)|D(?:esignatedRequirement|igestAlgorithm(?:s)?)|Entitlements(?:Dict)?|F(?:lags|ormat)|I(?:dentifier|mplicitDesignatedRequirement)|MainExecutable|P(?:List|latformIdentifier)|R(?:equirement(?:Data|s)|untimeVersion)|S(?:ource|tatus)|T(?:eamIdentifier|ime(?:stamp)?|rust)|Unique))|mpressionRatio))|D(?:ecodeTypeAttribute|igest(?:HMAC(?:KeyAttribute|MD5|SHA(?:1|2))|LengthAttribute|MD(?:2|4|5)|SHA(?:1|2)|TypeAttribute))|Enc(?:ode(?:LineLengthAttribute|TypeAttribute)|rypt(?:Key|ionMode))|GuestAttribute(?:A(?:rchitecture|udit)|Canonical|DynamicCode(?:InfoPlist)?|Hash|MachPort|Pid|Subarchitecture)|I(?:VKey|dentityDomain(?:Default|KerberosKDC)|mport(?:Export(?:Access|Keychain|Passphrase)|Item(?:CertChain|Identity|KeyID|Label|Trust))|nputIs(?:AttributeName|Digest|PlainText|Raw))|KeyAttributeName|LineLength(?:64|76)|M(?:atch(?:CaseInsensitive|DiacriticInsensitive|EmailAddressIfPresent|I(?:ssuers|temList)|Limit(?:All|One)?|Policy|S(?:earchList|ubject(?:Contains|EndsWith|StartsWith|WholeString))|TrustedOnly|ValidOnDate|WidthInsensitive)|ode(?:C(?:BCKey|FBKey)|ECBKey|NoneKey|OFBKey))|OID(?:A(?:DC_CERT_POLICY|PPLE_(?:CERT_POLICY|E(?:KU_(?:CODE_SIGNING(?:_DEV)?|ICHAT_(?:ENCRYPTION|SIGNING)|RESOURCE_SIGNING|SYSTEM_IDENTITY)|XTENSION(?:_(?:A(?:AI_INTERMEDIATE|DC_(?:APPLE_SIGNING|DEV_SIGNING)|PPLE(?:ID_INTERMEDIATE|_SIGNING))|CODE_SIGNING|I(?:NTERMEDIATE_MARKER|TMS_INTERMEDIATE)|WWDR_INTERMEDIATE))?))|uthority(?:InfoAccess|KeyIdentifier))|B(?:asicConstraints|iometricInfo)|C(?:SSMKeyStruct|ert(?:Issuer|ificatePolicies)|lientAuth|o(?:llectiveSt(?:ateProvinceName|reetAddress)|mmonName|untryName)|rl(?:DistributionPoints|Number|Reason))|D(?:OTMAC_CERT_(?:E(?:MAIL_(?:ENCRYPT|SIGN)|XTENSION)|IDENTITY|POLICY)|e(?:ltaCrlIndicator|scription))|E(?:KU_IPSec|mail(?:Address|Protection)|xtended(?:KeyUsage(?:Any)?|UseCodeSigning))|GivenName|HoldInstructionCode|I(?:nvalidityDate|ssu(?:erAltName|ingDistributionPoint(?:s)?))|K(?:ERBv5_PKINIT_KP_(?:CLIENT_AUTH|KDC)|eyUsage)|LocalityName|M(?:S_NTPrincipalName|icrosoftSGC)|N(?:ameConstraints|etscape(?:Cert(?:Sequence|Type)|SGC))|O(?:CSPSigning|rganization(?:Name|alUnitName))|P(?:olicy(?:Constraints|Mappings)|rivateKeyUsagePeriod)|QC_Statements|S(?:er(?:ialNumber|verAuth)|t(?:ateProvinceName|reetAddress)|u(?:bject(?:AltName|DirectoryAttributes|EmailAddress|InfoAccess|KeyIdentifier|Picture|SignatureBitmap)|rname))|Ti(?:meStamping|tle)|UseExemptions|X509V(?:1(?:Certificate(?:IssuerUniqueId|SubjectUniqueId)|IssuerName(?:CStruct|LDAP|Std)?|S(?:erialNumber|ignature(?:Algorithm(?:Parameters|TBS)?|CStruct|Struct)?|ubject(?:Name(?:CStruct|LDAP|Std)?|PublicKey(?:Algorithm(?:Parameters)?|CStruct)?))|V(?:alidityNot(?:After|Before)|ersion))|3(?:Certificate(?:CStruct|Extension(?:C(?:Struct|ritical)|Id|Struct|Type|Value|s(?:CStruct|Struct))|NumberOfExtensions)?|SignedCertificate(?:CStruct)?)))|P(?:adding(?:Key|NoneKey|PKCS(?:1Key|5Key|7Key))|olicy(?:Apple(?:CodeSigning|EAP|I(?:DValidation|Psec)|PKINIT(?:Client|Server)|S(?:MIME|SL)|X509Basic)|Client|KU_(?:CRLSign|D(?:ataEncipherment|ecipherOnly|igitalSignature)|EncipherOnly|Key(?:Agreement|CertSign|Encipherment)|NonRepudiation)|MacAppStoreReceipt|Name|Oid)|roperty(?:Key(?:L(?:abel|ocalizedLabel)|Type|Value)|Type(?:Dat(?:a|e)|Error|S(?:ection|tring|uccess)|Title|URL|Warning)))|R(?:andomDefault|eturn(?:Attributes|Data|PersistentRef|Ref))|S(?:haredPassword|ignatureAttributeName)|Transform(?:A(?:bort(?:AttributeName|OriginatorKey)|ction(?:Attribute(?:Notification|Validation)|CanExecute|ExternalizeExtraData|Finalize|InternalizeExtraData|ProcessData|StartingExecution))|DebugAttributeName|ErrorDomain|InputAttributeName|OutputAttributeName|PreviousErrorKey|TransformName)|Use(?:ItemList|Keychain)|Value(?:Data|PersistentRef|Ref)|ZLibEncoding)|peech(?:Audio(?:GraphProperty|UnitProperty)|C(?:haracterModeProperty|ommand(?:DelimiterProperty|Prefix|Suffix)|urrentVoiceProperty)|Dictionary(?:Abbreviations|Entry(?:Phonemes|Spelling)|LocaleIdentifier|ModificationDate|Pronunciations)|Error(?:C(?:FCallBack|allback(?:CharacterOffset|SpokenString)|ount)|Newest(?:CharacterOffset)?|Oldest(?:CharacterOffset)?|sProperty)|InputModeProperty|Mode(?:Literal|Normal|Phoneme|T(?:ext|une))|N(?:o(?:EndingProsody|SpeechInterrupt)|umberModeProperty)|OutputTo(?:AudioDeviceProperty|ExtAudioFileProperty|FileURLProperty)|P(?:honeme(?:CallBack|Info(?:Example|Hilite(?:End|Start)|Opcode|Symbol)|OptionsProperty|SymbolsProperty)|itch(?:BaseProperty|ModProperty)|reflightThenPause)|R(?:ateProperty|e(?:centSyncProperty|fConProperty|setProperty))|S(?:peechDoneCallBack|tatus(?:NumberOfCharactersLeft|Output(?:Busy|Paused)|P(?:honemeCode|roperty))|yn(?:cCallBack|thesizerInfo(?:Identifier|Manufacturer|Property|Version)))|TextDoneCallBack|Vo(?:ice(?:Creator|ID)|lumeProperty)|WordCFCallBack))|T(?:IS(?:Category(?:InkInputSource|KeyboardInputSource|PaletteInputSource)|Notify(?:EnabledKeyboardInputSourcesChanged|SelectedKeyboardInputSourceChanged)|Property(?:BundleID|I(?:con(?:ImageURL|Ref)|nput(?:ModeID|Source(?:Category|I(?:D|s(?:ASCIICapable|Enable(?:Capable|d)|Select(?:Capable|ed)))|Languages|Type)))|LocalizedName|UnicodeKeyLayoutData)|Type(?:CharacterPalette|Ink|Keyboard(?:InputM(?:ethod(?:ModeEnabled|WithoutModes)|ode)|Layout|Viewer)))|XN(?:Action(?:Align(?:Center|Left|Right)|C(?:hange(?:Color|Font(?:Feature|Variation)?|GlyphVariation|S(?:ize|tyle)|TextPosition)|lear|ountOf(?:AllChanges|StyleChanges|TextChanges)|ut)|Drop|Move|Paste|Typing|UndoLast)|D(?:ataOption(?:CharacterEncodingKey|DocumentTypeKey)|ocumentAttribute(?:AuthorKey|C(?:o(?:m(?:mentKey|panyNameKey)|pyrightKey)|reationTimeKey)|EditorKey|KeywordsKey|ModificationTimeKey|SubjectKey|TitleKey))|MLTEDocumentType|PlainTextDocumentType|QuickTimeDocumentType|RTFDocumentType))|UT(?:ExportedTypeDeclarationsKey|ImportedTypeDeclarationsKey|T(?:agClass(?:FilenameExtension|MIMEType|NSPboardType|OSType)|ype(?:A(?:lias(?:File|Record)|ppl(?:e(?:ICNS|ProtectedMPEG4Audio)|ication(?:Bundle|File)?)|rchive|udio(?:visualContent)?)|B(?:MP|undle)|C(?:Header|PlusPlus(?:Header|Source)|Source|o(?:mpositeContent|n(?:formsToKey|t(?:act|ent))))|D(?:ata(?:base)?|escriptionKey|i(?:rectory|skImage))|Executable|F(?:ileURL|latRTFD|older|ramework)|GIF|HTML|I(?:CO|conFileKey|dentifierKey|mage|nkText|tem)|J(?:PEG(?:2000)?|avaSource)|M(?:P(?:3|EG(?:4(?:Audio)?)?)|essage|o(?:untPoint|vie))|ObjectiveC(?:PlusPlusSource|Source)|P(?:DF|ICT|NG|ackage|lainText)|QuickTime(?:Image|Movie)|R(?:TF(?:D)?|e(?:ferenceURLKey|solvable))|S(?:ourceCode|ymLink)|T(?:IFF|XNTextAndMultimediaData|agSpecificationKey|ext)|U(?:RL|TF(?:16(?:ExternalPlainText|PlainText)|8PlainText))|V(?:Card|ersionKey|ideo|olume)|WebArchive|XML))))|mach_task_self_|oid(?:A(?:d(?:CAIssuer|OCSP)|n(?:sip(?:384r1|521r1)|y(?:ExtendedKeyUsage|Policy))|uthority(?:InfoAccess|KeyIdentifier))|BasicConstraints|C(?:ertificatePolicies|o(?:mmonName|untryName)|rlDistributionPoints)|Description|E(?:cP(?:rime(?:192v1|256v1)|ubKey)|mailAddress|ntrustVersInfo|xtendedKeyUsage(?:C(?:lientAuth|odeSigning)|EmailProtection|IPSec|MicrosoftSGC|NetscapeSGC|OCSPSigning|ServerAuth|TimeStamping)?)|F(?:ee|riendlyName)|Google(?:EmbeddedSignedCertificateTimestamp|OCSPSignedCertificateTimestamp)|I(?:nhibitAnyPolicy|ssuerAltName)|KeyUsage|Local(?:KeyId|ityName)|M(?:SNTPrincipalName|d(?:2(?:Rsa)?|4(?:Rsa)?|5(?:Fee|Rsa)?))|N(?:ameConstraints|etscapeCertType)|Organization(?:Name|alUnitName)|P(?:olicy(?:Constraints|Mappings)|rivateKeyUsagePeriod)|Qt(?:Cps|UNotice)|Rsa|S(?:ha(?:1(?:Dsa(?:CommonOIW|OIW)?|Ecdsa|Fee|Rsa(?:OIW)?)?|2(?:24(?:Ecdsa|Rsa)?|56(?:Ecdsa|Rsa)?)|384(?:Ecdsa|Rsa)?|512(?:Ecdsa|Rsa)?)|tateOrProvinceName|ubject(?:AltName|InfoAccess|KeyIdentifier)))|v(?:m_page_(?:mask|s(?:hift|ize))|printf_stderr_func))\\\\b\",\n\t\t\t\"name\": \"support.variable.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCF(?:Islamic(?:TabularCalendar|UmmAlQuraCalendar)|URL(?:AddedToDirectoryDateKey|DocumentIdentifierKey|GenerationIdentifierKey|QuarantinePropertiesKey))\\\\b\",\n\t\t\t\"name\": \"support.variable.cf.10.10.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURL(?:ApplicationIsScriptableKey|IsApplicationKey)\\\\b\",\n\t\t\t\"name\": \"support.variable.cf.10.11.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURL(?:CanonicalPathKey|Volume(?:Is(?:EncryptedKey|RootFileSystemKey)|Supports(?:CompressionKey|ExclusiveRenamingKey|FileCloningKey|SwapRenamingKey)))\\\\b\",\n\t\t\t\"name\": \"support.variable.cf.10.12.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCF(?:ErrorLocalizedFailureKey|URLVolume(?:AvailableCapacityFor(?:ImportantUsageKey|OpportunisticUsageKey)|Supports(?:AccessPermissionsKey|ImmutableFilesKey)))\\\\b\",\n\t\t\t\"name\": \"support.variable.cf.10.13.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURL(?:IsExcludedFromBackupKey|PathKey)\\\\b\",\n\t\t\t\"name\": \"support.variable.cf.10.8.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCFURL(?:TagNamesKey|UbiquitousItem(?:Downloading(?:ErrorKey|Status(?:Current|Downloaded|Key|NotDownloaded))|UploadingErrorKey))\\\\b\",\n\t\t\t\"name\": \"support.variable.cf.10.9.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCF(?:A(?:bsoluteTimeIntervalSince19(?:04|70)|llocator(?:Default|Malloc(?:Zone)?|Null|SystemDefault|UseContext))|B(?:oolean(?:False|True)|u(?:ddhistCalendar|ndle(?:DevelopmentRegionKey|ExecutableKey|I(?:dentifierKey|nfoDictionaryVersionKey)|LocalizationsKey|NameKey|VersionKey)))|C(?:hineseCalendar|o(?:pyString(?:BagCallBacks|DictionaryKeyCallBacks|SetCallBacks)|reFoundationVersionNumber))|DateFormatter(?:AMSymbol|Calendar(?:Name)?|D(?:efault(?:Date|Format)|oesRelativeDateFormattingKey)|EraSymbols|GregorianStartDate|IsLenient|LongEraSymbols|MonthSymbols|PMSymbol|QuarterSymbols|S(?:hort(?:MonthSymbols|QuarterSymbols|Standalone(?:MonthSymbols|QuarterSymbols|WeekdaySymbols)|WeekdaySymbols)|tandalone(?:MonthSymbols|QuarterSymbols|WeekdaySymbols))|T(?:imeZone|woDigitStartDate)|VeryShort(?:MonthSymbols|Standalone(?:MonthSymbols|WeekdaySymbols)|WeekdaySymbols)|WeekdaySymbols)|Error(?:D(?:escriptionKey|omain(?:Cocoa|Mach|OSStatus|POSIX))|FilePathKey|Localized(?:DescriptionKey|FailureReasonKey|RecoverySuggestionKey)|U(?:RLKey|nderlyingErrorKey))|GregorianCalendar|HebrewCalendar|I(?:SO8601Calendar|ndianCalendar|slamicC(?:alendar|ivilCalendar))|JapaneseCalendar|Locale(?:AlternateQuotation(?:BeginDelimiterKey|EndDelimiterKey)|C(?:alendar(?:Identifier)?|o(?:llat(?:ionIdentifier|orIdentifier)|untryCode)|urren(?:cy(?:Code|Symbol)|tLocaleDidChangeNotification))|DecimalSeparator|ExemplarCharacterSet|GroupingSeparator|Identifier|LanguageCode|MeasurementSystem|Quotation(?:BeginDelimiterKey|EndDelimiterKey)|ScriptCode|UsesMetricSystem|VariantCode)|N(?:otFound|u(?:ll|mber(?:Formatter(?:AlwaysShowDecimalSeparator|Currency(?:Code|DecimalSeparator|GroupingSeparator|Symbol)|De(?:cimalSeparator|faultFormat)|ExponentSymbol|FormatWidth|GroupingS(?:eparator|ize)|I(?:n(?:finitySymbol|ternationalCurrencySymbol)|sLenient)|M(?:ax(?:FractionDigits|IntegerDigits|SignificantDigits)|in(?:FractionDigits|IntegerDigits|SignificantDigits|usSign)|ultiplier)|N(?:aNSymbol|egative(?:Prefix|Suffix))|P(?:adding(?:Character|Position)|er(?:MillSymbol|centSymbol)|lusSign|ositive(?:Prefix|Suffix))|Rounding(?:Increment|Mode)|SecondaryGroupingSize|Use(?:GroupingSeparator|SignificantDigits)|ZeroSymbol)|N(?:aN|egativeInfinity)|PositiveInfinity)))|P(?:ersianCalendar|lugIn(?:DynamicRegist(?:erFunctionKey|rationKey)|FactoriesKey|TypesKey|UnloadFunctionKey)|references(?:Any(?:Application|Host|User)|Current(?:Application|Host|User)))|R(?:epublicOfChinaCalendar|unLoop(?:CommonModes|DefaultMode))|S(?:ocket(?:CommandKey|ErrorKey|NameKey|Re(?:gisterCommand|sultKey|trieveCommand)|ValueKey)|tr(?:eam(?:ErrorDomainS(?:OCKS|SL)|Property(?:AppendToFile|DataWritten|FileCurrentOffset|S(?:OCKS(?:P(?:assword|roxy(?:Host|Port)?)|User|Version)|houldCloseNativeSocket|ocket(?:NativeHandle|Remote(?:HostName|PortNumber)|SecurityLevel)))|SocketS(?:OCKSVersion(?:4|5)|ecurityLevel(?:N(?:egotiatedSSL|one)|TLSv1)))|ing(?:BinaryHeapCallBacks|Transform(?:FullwidthHalfwidth|HiraganaKatakana|Latin(?:Arabic|Cyrillic|Greek|H(?:angul|ebrew|iragana)|Katakana|Thai)|MandarinLatin|Strip(?:CombiningMarks|Diacritics)|To(?:Latin|UnicodeName|XMLHex)))))|T(?:imeZoneSystemTimeZoneDidChangeNotification|ype(?:ArrayCallBacks|BagCallBacks|Dictionary(?:KeyCallBacks|ValueCallBacks)|SetCallBacks))|U(?:RL(?:AttributeModificationDateKey|C(?:ontent(?:AccessDateKey|ModificationDateKey)|reationDateKey)|File(?:AllocatedSizeKey|Protection(?:Complete(?:Un(?:lessOpen|tilFirstUserAuthentication))?|Key|None)|Resource(?:IdentifierKey|Type(?:BlockSpecial|CharacterSpecial|Directory|Key|NamedPipe|Regular|S(?:ocket|ymbolicLink)|Unknown))|S(?:ecurityKey|izeKey))|HasHiddenExtensionKey|Is(?:AliasFileKey|DirectoryKey|ExecutableKey|HiddenKey|MountTriggerKey|PackageKey|Re(?:adableKey|gularFileKey)|Sy(?:mbolicLinkKey|stemImmutableKey)|U(?:biquitousItemKey|serImmutableKey)|VolumeKey|WritableKey)|KeysOfUnsetValuesKey|L(?:abelNumberKey|inkCountKey|ocalized(?:LabelKey|NameKey|TypeDescriptionKey))|NameKey|P(?:arentDirectoryURLKey|referredIOBlockSizeKey)|T(?:otalFile(?:AllocatedSizeKey|SizeKey)|ypeIdentifierKey)|UbiquitousItem(?:HasUnresolvedConflictsKey|Is(?:DownloadingKey|Upload(?:edKey|ingKey)))|Volume(?:AvailableCapacityKey|CreationDateKey|I(?:dentifierKey|s(?:AutomountedKey|BrowsableKey|EjectableKey|InternalKey|JournalingKey|LocalKey|Re(?:adOnlyKey|movableKey)))|Localized(?:FormatDescriptionKey|NameKey)|MaximumFileSizeKey|NameKey|ResourceCountKey|Supports(?:AdvisoryFileLockingKey|Case(?:PreservedNamesKey|SensitiveNamesKey)|ExtendedSecurityKey|HardLinksKey|JournalingKey|PersistentIDsKey|R(?:enamingKey|ootDirectoryDatesKey)|S(?:parseFilesKey|ymbolicLinksKey)|VolumeSizesKey|ZeroRunsKey)|TotalCapacityKey|U(?:RL(?:ForRemountingKey|Key)|UIDStringKey)))|serNotification(?:Al(?:ert(?:HeaderKey|MessageKey|TopMostKey)|ternateButtonTitleKey)|CheckBoxTitlesKey|DefaultButtonTitleKey|IconURLKey|KeyboardTypesKey|LocalizationURLKey|OtherButtonTitleKey|P(?:opUp(?:SelectionKey|TitlesKey)|rogressIndicatorValueKey)|SoundURLKey|TextField(?:TitlesKey|ValuesKey)))|XMLTreeError(?:Description|L(?:ineNumber|ocation)|StatusCode))\\\\b\",\n\t\t\t\"name\": \"support.variable.cf.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:daylight|getdate_err|opt(?:arg|err|ind|opt|reset)|s(?:igngam|uboptarg|ys_(?:errlist|nerr|sig(?:list|name)))|t(?:imezone|zname))\\\\b\",\n\t\t\t\"name\": \"support.variable.clib.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGColorSpace(?:ACESCGLinear|D(?:CIP3|isplayP3)|GenericXYZ|ITUR_(?:2020|709)|ROMMRGB)\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.10.11.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGColor(?:ConversionBlackPointCompensation|Space(?:Extended(?:Gray|Linear(?:Gray|SRGB)|SRGB)|Linear(?:Gray|SRGB)))\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.10.12.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCG(?:Color(?:ConversionTRCSize|SpaceGenericLab)|PDF(?:ContextAccessPermissions|Outline(?:Children|Destination(?:Rect)?|Title)))\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.10.13.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGColorSpace(?:DisplayP3_HLG|ExtendedLinear(?:DisplayP3|ITUR_2020)|ITUR_2020_HLG)\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.10.14.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGPDFTagProperty(?:A(?:ctualText|lternativeText)|LanguageText|TitleText)\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.10.15.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGColorSpace(?:DisplayP3_PQ|ITUR_2020_PQ)\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.10.16.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bkCGDisplayS(?:howDuplicateLowResolutionModes|tream(?:ColorSpace|DestinationRect|MinimumFrameTime|PreserveAspectRatio|QueueDepth|S(?:howCursor|ourceRect)|YCbCrMatrix(?:_(?:ITU_R_(?:601_4|709_2)|SMPTE_240M_1995))?))\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.10.8.c\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?:CG(?:AffineTransformIdentity|PointZero|Rect(?:Infinite|Null|Zero)|SizeZero)|kCG(?:Color(?:Black|Clear|Space(?:AdobeRGB1998|Generic(?:CMYK|Gray(?:Gamma2_2)?|RGB(?:Linear)?)|SRGB)|White)|Font(?:Index(?:Invalid|Max)|VariationAxis(?:DefaultValue|M(?:axValue|inValue)|Name))|GlyphMax|PDF(?:Context(?:A(?:llows(?:Copying|Printing)|rtBox|uthor)|BleedBox|Cr(?:eator|opBox)|EncryptionKeyLength|Keywords|MediaBox|O(?:utputIntent(?:s)?|wnerPassword)|Subject|T(?:itle|rimBox)|UserPassword)|X(?:DestinationOutputProfile|Info|Output(?:Condition(?:Identifier)?|IntentSubtype)|RegistryName))|Window(?:Alpha|B(?:ackingLocationVideoMemory|ounds)|IsOnscreen|Layer|MemoryUsage|N(?:ame|umber)|Owner(?:Name|PID)|S(?:haringState|toreType))))\\\\b\",\n\t\t\t\"name\": \"support.variable.quartz.c\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.10.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AudioFileReadPackets|LS(?:C(?:anRefAcceptItem|opy(?:ApplicationForMIMEType|DisplayNameForRef|Item(?:Attribute(?:s)?|InfoForRef)|KindStringFor(?:MIMEType|Ref|TypeInfo)))|FindApplicationForInfo|GetApplicationFor(?:I(?:nfo|tem)|URL)|Open(?:Application|F(?:SRef|romRefSpec)|ItemsWithRole|URLsWithRole)|RegisterFSRef|S(?:et(?:ExtensionHiddenForRef|ItemAttribute)|haredFileListI(?:nsertItemFSRef|temResolve)))|launch_(?:data_(?:a(?:lloc|rray_(?:get_(?:count|index)|set_index))|copy|dict_(?:get_count|i(?:nsert|terate)|lookup|remove)|free|get_(?:bool|errno|fd|integer|machport|opaque(?:_size)?|real|string|type)|new_(?:bool|fd|integer|machport|opaque|real|string)|set_(?:bool|fd|integer|machport|opaque|real|string))|get_fd|msg))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.10.support.function.cf.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCF(?:AbsoluteTime(?:AddGregorianUnits|Get(?:D(?:ayOf(?:Week|Year)|ifferenceAsGregorianUnits)|GregorianDate|WeekOfYear))|GregorianDate(?:GetAbsoluteTime|IsValid)|PropertyList(?:Create(?:From(?:Stream|XMLData)|XMLData)|WriteToStream))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.11.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AudioHardwareService(?:AddPropertyListener|GetPropertyData(?:Size)?|HasProperty|IsPropertySettable|RemovePropertyListener|SetPropertyData)|CF(?:FTPCreateParsedResourceListing|ReadStreamCreate(?:For(?:HTTPRequest|StreamedHTTPRequest)|WithFTPURL)|WriteStreamCreateWithFTPURL)|LS(?:Copy(?:DisplayNameForURL|ItemInfoForURL|KindStringForURL)|Get(?:ExtensionInfo|HandlerOptionsForContentType)|S(?:et(?:ExtensionHiddenForURL|HandlerOptionsForContentType)|haredFileList(?:AddObserver|C(?:opy(?:Property|Snapshot)|reate)|Get(?:SeedValue|TypeID)|I(?:nsertItemURL|tem(?:Copy(?:DisplayName|IconRef|Property|ResolvedURL)|Get(?:ID|TypeID)|Move|Remove|SetProperty))|Remove(?:AllItems|Observer)|Set(?:Authorization|Property))))|SSLSetEncryptionCertificate)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.11.support.function.cf.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCFURLCreateStringBy(?:AddingPercentEscapes|ReplacingPercentEscapesUsingEncoding)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.11.support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCGDisplayModeCopyPixelEncoding\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.12.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:OS(?:Atomic(?:A(?:dd(?:32(?:Barrier)?|64(?:Barrier)?)|nd32(?:Barrier|Orig(?:Barrier)?)?)|CompareAndSwap(?:32(?:Barrier)?|64(?:Barrier)?|Int(?:Barrier)?|Long(?:Barrier)?|Ptr(?:Barrier)?)|Decrement(?:32(?:Barrier)?|64(?:Barrier)?)|Increment(?:32(?:Barrier)?|64(?:Barrier)?)|Or32(?:Barrier|Orig(?:Barrier)?)?|TestAnd(?:Clear(?:Barrier)?|Set(?:Barrier)?)|Xor32(?:Barrier|Orig(?:Barrier)?)?)|MemoryBarrier|SpinLock(?:Lock|Try|Unlock))|SecCertificateCopyNormalized(?:IssuerContent|SubjectContent)|os_log_is_(?:debug_enabled|enabled))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.12.support.function.clib.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:arc4random_addrandom|syscall)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.13.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:C(?:FNetDiagnostic(?:C(?:opyNetworkStatusPassively|reateWith(?:Streams|URL))|DiagnoseProblemInteractively|SetName)|MSDecoderSetSearchKeychain)|DisposeSRCallBackUPP|GetIconRefFromFileInfo|InvokeSRCallBackUPP|NewSRCallBackUPP|Re(?:adIconFromFSRef|gisterIconRefFromFSRef)|S(?:R(?:Add(?:LanguageObject|Text)|C(?:ancelRecognition|hangeLanguageObject|loseRecognitionSystem|o(?:ntinueRecognition|untItems))|Draw(?:RecognizedText|Text)|EmptyLanguageObject|Get(?:IndexedItem|LanguageModel|Property|Reference)|Idle|New(?:Language(?:Model|ObjectFrom(?:DataFile|Handle))|P(?:ath|hrase)|Recognizer|Word)|OpenRecognitionSystem|P(?:rocess(?:Begin|End)|utLanguageObjectInto(?:DataFile|Handle))|Re(?:leaseObject|move(?:IndexedItem|LanguageObject))|S(?:et(?:IndexedItem|LanguageModel|Property)|pe(?:ak(?:AndDrawText|Text)|echBusy)|t(?:artListening|op(?:Listening|Speech))))|ec(?:CertificateCopySerialNumber|Keychain(?:CopyAccess|SetAccess)|TrustSetKeychains))|UnregisterIconRef|os_trace_(?:debug_enabled|info_enabled|type_enabled))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.13.support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCGColorSpaceC(?:opyICCProfile|reateWithICCProfile)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.14.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:CVOpenGL(?:Buffer(?:Attach|Create|Get(?:Attributes|TypeID)|Pool(?:Create(?:OpenGLBuffer)?|Get(?:Attributes|OpenGLBufferAttributes|TypeID)|Re(?:lease|tain))|Re(?:lease|tain))|Texture(?:Cache(?:Create(?:TextureFromImage)?|Flush|GetTypeID|Re(?:lease|tain))|Get(?:CleanTexCoords|Name|T(?:arget|ypeID))|IsFlipped|Re(?:lease|tain)))|DR(?:AudioTrackCreate|F(?:SObjectGetRealFSRef|ileCreateReal|olderCreateReal))|SecCertificateCopyPublicKey)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.15.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AcquireIconRef|C(?:C_MD(?:2(?:_(?:Final|Init|Update))?|4(?:_(?:Final|Init|Update))?|5(?:_(?:Final|Init|Update))?)|TFont(?:CreateWithQuickdrawInstance|Manager(?:RegisterFontsForURLs|UnregisterFontsForURLs))|ompositeIconRef)|Get(?:CustomIconsEnabled|IconRef(?:From(?:Component|Folder|IconFamilyPtr|TypeInfo)|Owners)?)|Is(?:DataAvailableInIconRef|IconRefComposite|ValidIconRef)|LSCopy(?:AllHandlersForURLScheme|DefaultHandlerForURLScheme)|OverrideIconRef|Re(?:gisterIconRefFromIconFamily|leaseIconRef|moveIconRefOverride)|S(?:SL(?:AddDistinguishedName|C(?:lose|o(?:ntextGetTypeID|py(?:ALPNProtocols|CertificateAuthorities|DistinguishedNames|PeerTrust|RequestedPeerName(?:Length)?))|reateContext)|Get(?:BufferedReadSize|C(?:lientCertificateState|onnection)|D(?:atagramWriteSize|iffieHellmanParams)|EnabledCiphers|MaxDatagramRecordSize|N(?:egotiated(?:Cipher|ProtocolVersion)|umber(?:EnabledCiphers|SupportedCiphers))|P(?:eer(?:DomainName(?:Length)?|ID)|rotocolVersionM(?:ax|in))|S(?:ession(?:Option|State)|upportedCiphers))|Handshake|Re(?:Handshake|ad)|Set(?:ALPNProtocols|C(?:ertificate(?:Authorities)?|lientSideAuthenticate|onnection)|D(?:atagramHelloCookie|iffieHellmanParams)|E(?:nabledCiphers|rror)|IOFuncs|MaxDatagramRecordSize|OCSPResponse|P(?:eer(?:DomainName|ID)|rotocolVersionM(?:ax|in))|Session(?:Config|Option|TicketsEnabled))|Write)|e(?:cTrust(?:Evaluate(?:Async)?|edApplication(?:C(?:opyData|reateFromPath)|SetData))|tCustomIconsEnabled))|UpdateIconRef|sec_protocol_(?:metadata_get_negotiated_(?:ciphersuite|protocol_version)|options_(?:add_tls_ciphersuite(?:_group)?|set_tls_(?:diffie_hellman_parameters|m(?:ax_version|in_version)))))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.15.support.function.cf.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCF(?:Bundle(?:CloseBundleResourceMap|OpenBundleResource(?:Files|Map))|URLCopyParameterString)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.15.support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCGColorSpaceIsHDR\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.3.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:DisposeGetScrapDataUPP|InvokeGetScrapDataUPP|NewGetScrapDataUPP|ReleaseFolder)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.4.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AH(?:GotoMainTOC|RegisterHelpBook)|CFNetServiceRe(?:gister|solve)|Dispose(?:CaretHookUPP|DrawHookUPP|EOLHookUPP|Hi(?:ghHookUPP|tTestHookUPP)|NWidthHookUPP|T(?:E(?:ClickLoopUPP|DoTextUPP|FindWordUPP|RecalcUPP)|XNActionKeyMapperUPP|extWidthHookUPP)|URL(?:NotifyUPP|SystemEventUPP)|WidthHookUPP)|In(?:s(?:Time|XTime|tall(?:TimeTask|XTimeTask))|voke(?:CaretHookUPP|DrawHookUPP|EOLHookUPP|Hi(?:ghHookUPP|tTestHookUPP)|NWidthHookUPP|T(?:E(?:ClickLoopUPP|DoTextUPP|FindWordUPP|RecalcUPP)|XNActionKeyMapperUPP|extWidthHookUPP)|URL(?:NotifyUPP|SystemEventUPP)|WidthHookUPP))|LM(?:Get(?:ApFontID|SysFontSize)|Set(?:ApFontID|SysFontFam))|New(?:CaretHookUPP|DrawHookUPP|EOLHookUPP|Hi(?:ghHookUPP|tTestHookUPP)|NWidthHookUPP|T(?:E(?:ClickLoopUPP|DoTextUPP|FindWordUPP|RecalcUPP)|XNActionKeyMapperUPP|extWidthHookUPP)|URL(?:NotifyUPP|SystemEventUPP)|WidthHookUPP)|P(?:L(?:pos|str(?:c(?:at|hr|mp|py)|len|nc(?:at|mp|py)|pbrk|rchr|s(?:pn|tr)))|rimeTime(?:Task)?)|R(?:emoveTimeTask|mvTime)|SKSearch(?:Group(?:C(?:opyIndexes|reate)|GetTypeID)|Results(?:C(?:opyMatchingTerms|reateWith(?:Documents|Query))|Get(?:Count|InfoInRange|TypeID))))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.5.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:A(?:S(?:GetSourceStyles|SetSourceStyles)|UGraph(?:CountNodeConnections|Get(?:ConnectionInfo|N(?:ode(?:Connections|Info)|umberOfConnections))|NewNode)|udio(?:ConverterFillBuffer|Device(?:AddIOProc|Re(?:ad|moveIOProc))|FileComponent(?:DataIsThisFormat|FileIsThisFormat)))|Dispose(?:AVL(?:CompareItemsUPP|DisposeItemUPP|ItemSizeUPP|WalkUPP)|Drag(?:DrawingUPP|ReceiveHandlerUPP|SendDataUPP|TrackingHandlerUPP)|List(?:ClickLoopUPP|DefUPP|SearchUPP)|Menu(?:ItemDrawingUPP|TitleDrawingUPP)|S(?:crapPromiseKeeperUPP|leepQUPP)|Theme(?:ButtonDrawUPP|EraseUPP|IteratorUPP|TabTitleDrawUPP)|Window(?:PaintUPP|TitleDrawingUPP))|Get(?:NameFromSoundBank|ScriptManagerVariable)|Invoke(?:AVL(?:CompareItemsUPP|DisposeItemUPP|ItemSizeUPP|WalkUPP)|Drag(?:DrawingUPP|ReceiveHandlerUPP|SendDataUPP|TrackingHandlerUPP)|List(?:ClickLoopUPP|DefUPP|SearchUPP)|Menu(?:ItemDrawingUPP|TitleDrawingUPP)|S(?:crapPromiseKeeperUPP|leepQUPP)|Theme(?:ButtonDrawUPP|EraseUPP|IteratorUPP|TabTitleDrawUPP)|Window(?:PaintUPP|TitleDrawingUPP))|Music(?:Device(?:PrepareInstrument|ReleaseInstrument)|Sequence(?:LoadSMF(?:DataWithFlags|WithFlags)|Save(?:MIDIFile|SMFData)))|New(?:AVL(?:CompareItemsUPP|DisposeItemUPP|ItemSizeUPP|WalkUPP)|Drag(?:DrawingUPP|ReceiveHandlerUPP|SendDataUPP|TrackingHandlerUPP)|List(?:ClickLoopUPP|DefUPP|SearchUPP)|Menu(?:ItemDrawingUPP|TitleDrawingUPP)|S(?:crapPromiseKeeperUPP|leepQUPP)|Theme(?:ButtonDrawUPP|EraseUPP|IteratorUPP|TabTitleDrawUPP)|Window(?:PaintUPP|TitleDrawingUPP))|S(?:CNetworkInterfaceRefreshConfiguration|etScriptManagerVariable))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.5.support.function.clib.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bdaemon\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.5.support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:ContextDrawPDFDocument|PDFDocumentGet(?:ArtBox|BleedBox|CropBox|MediaBox|RotationAngle|TrimBox))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.6.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:Audio(?:Device(?:AddPropertyListener|GetProperty(?:Info)?|RemovePropertyListener|SetProperty)|File(?:C(?:omponent(?:Create|Initialize|OpenFile)|reate)|Initialize|Open)|Hardware(?:AddPropertyListener|GetProperty(?:Info)?|RemovePropertyListener|SetProperty)|Stream(?:AddPropertyListener|GetProperty(?:Info)?|RemovePropertyListener|SetProperty))|Button|DisposeKCCallbackUPP|ExtAudioFile(?:CreateNew|Open)|FlushEvents|I(?:nvokeKCCallbackUPP|sCmdChar)|KC(?:Add(?:AppleSharePassword|Callback|GenericPassword|I(?:nternetPassword(?:WithPath)?|tem))|C(?:hangeSettings|o(?:pyItem|untKeychains)|reateKeychain)|DeleteItem|Find(?:AppleSharePassword|FirstItem|GenericPassword|InternetPassword(?:WithPath)?|NextItem)|Get(?:Attribute|D(?:ata|efaultKeychain)|IndKeychain|Keychain(?:ManagerVersion|Name)?|Status)|IsInteractionAllowed|Lock|Make(?:AliasFromKCRef|KCRefFrom(?:Alias|FSRef))|NewItem|Re(?:lease(?:Item|Keychain|Search)|moveCallback)|Set(?:Attribute|D(?:ata|efaultKeychain)|InteractionAllowed)|U(?:nlock|pdateItem))|Munger|New(?:KCCallbackUPP|MusicTrackFrom)|S(?:CNetworkCheckReachabilityBy(?:Address|Name)|ecHost(?:CreateGuest|RemoveGuest|Se(?:lect(?:Guest|edGuest)|t(?:GuestStatus|HostingPort))))|UC(?:CreateTextBreakLocator|DisposeTextBreakLocator|FindTextBreak)|kc(?:add(?:applesharepassword|genericpassword|internetpassword(?:withpath)?)|createkeychain|find(?:applesharepassword|genericpassword|internetpassword(?:withpath)?)|getkeychainname|unlock))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.6.support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:ConfigureDisplayMode|Display(?:AvailableModes|BestModeForParameters(?:AndRefreshRate)?|CurrentMode|SwitchToMode)|EnableEventStateCombining|FontCreateWithPlatformFont|InhibitLocalEvents|Post(?:KeyboardEvent|MouseEvent|ScrollWheelEvent)|SetLocalEvents(?:FilterDuringSuppressionState|SuppressionInterval))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.7.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:Au(?:dioHardware(?:AddRunLoopSource|RemoveRunLoopSource)|thorization(?:CopyPrivilegedReference|ExecuteWithPrivileges))|C(?:MSEncode(?:rSetEncapsulatedContentType)?|SSM_(?:AC_(?:AuthCompute|PassThrough)|C(?:L_(?:C(?:ert(?:Abort(?:Cache|Query)|C(?:ache|reateTemplate)|DescribeFormat|G(?:et(?:All(?:Fields|TemplateFields)|First(?:CachedFieldValue|FieldValue)|KeyInfo|Next(?:CachedFieldValue|FieldValue))|roup(?:FromVerifiedBundle|ToSignedBundle))|Sign|Verify(?:WithKey)?)|rl(?:A(?:bort(?:Cache|Query)|ddCert)|C(?:ache|reateTemplate)|DescribeFormat|Get(?:All(?:CachedRecordFields|Fields)|First(?:CachedFieldValue|FieldValue)|Next(?:CachedFieldValue|FieldValue))|RemoveCert|S(?:etFields|ign)|Verify(?:WithKey)?))|FreeField(?:Value|s)|IsCertInC(?:achedCrl|rl)|PassThrough)|SP_(?:C(?:hangeLogin(?:Acl|Owner)|reate(?:AsymmetricContext|D(?:eriveKeyContext|igestContext)|KeyGenContext|MacContext|PassThroughContext|RandomGenContext|S(?:ignatureContext|ymmetricContext)))|Get(?:Login(?:Acl|Owner)|OperationalStatistics)|Log(?:in|out)|ObtainPrivateKeyFromPublicKey|PassThrough)|hangeKey(?:Acl|Owner))|D(?:L_(?:Authenticate|C(?:hangeDb(?:Acl|Owner)|reateRelation)|D(?:ata(?:AbortQuery|Delete|Get(?:F(?:irst|romUniqueRecordId)|Next)|Insert|Modify)|b(?:C(?:lose|reate)|Delete|Open)|estroyRelation)|Free(?:NameList|UniqueRecord)|GetDb(?:Acl|Name(?:FromHandle|s)|Owner)|PassThrough)|e(?:cryptData(?:Final|Init(?:P)?|P|Update)?|leteContext(?:Attributes)?|riveKey)|igestData(?:Clone|Final|Init|Update)?)|EncryptData(?:Final|Init(?:P)?|P|Update)?|Free(?:Context|Key)|Ge(?:nerate(?:AlgorithmParams|Key(?:P(?:air(?:P)?)?)?|Mac(?:Final|Init|Update)?|Random)|t(?:APIMemoryFunctions|Context(?:Attribute)?|Key(?:Acl|Owner)|ModuleGUIDFromHandle|Privilege|SubserviceUIDFromHandle|TimeValue))|In(?:it|troduce)|ListAttachedModuleManagers|Module(?:Attach|Detach|Load|Unload)|Query(?:KeySizeInBits|Size)|Retrieve(?:Counter|UniqueId)|S(?:et(?:Context|Privilege)|ignData(?:Final|Init|Update)?)|T(?:P_(?:ApplyCrlToDb|C(?:ert(?:CreateTemplate|G(?:etAllTemplateFields|roup(?:Construct|Prune|ToTupleGroup|Verify))|Re(?:claim(?:Abort|Key)|moveFromCrlTemplate|voke)|Sign)|onfirmCredResult|rl(?:CreateTemplate|Sign|Verify))|Form(?:Request|Submit)|PassThrough|Re(?:ceiveConfirmation|trieveCredResult)|SubmitCredRequest|TupleGroupToCertGroup)|erminate)|U(?:n(?:introduce|wrapKey(?:P)?)|pdateContextAttributes)|Verify(?:D(?:ata(?:Final|Init|Update)?|evice)|Mac(?:Final|Init|Update)?)|WrapKey(?:P)?)|reateThreadPool)|Dispose(?:Debugger(?:DisposeThreadUPP|NewThreadUPP|ThreadSchedulerUPP)|Thread(?:EntryUPP|S(?:chedulerUPP|witchUPP)|TerminationUPP)?)|Get(?:CurrentThread|DefaultThreadStackSize|Thread(?:CurrentTaskRef|State(?:GivenTaskRef)?))|I(?:C(?:Add(?:MapEntry|Profile)|Begin|C(?:ount(?:MapEntries|Pr(?:ef|ofiles))|reateGURLEvent)|Delete(?:MapEntry|Pr(?:ef|ofile))|E(?:ditPreferences|nd)|FindPrefHandle|Get(?:C(?:onfigName|urrentProfile)|DefaultPref|Ind(?:MapEntry|Pr(?:ef|ofile))|MapEntry|P(?:erm|r(?:ef(?:Handle)?|ofileName))|Seed|Version)|LaunchURL|Map(?:Entries(?:Filename|TypeCreator)|Filename|TypeCreator)|ParseURL|S(?:e(?:ndGURLEvent|t(?:CurrentProfile|MapEntry|Pr(?:ef(?:Handle)?|ofileName)))|t(?:art|op)))|nvoke(?:Debugger(?:DisposeThreadUPP|NewThreadUPP|ThreadSchedulerUPP)|Thread(?:EntryUPP|S(?:chedulerUPP|witchUPP)|TerminationUPP))|sMetric)|M(?:DS_(?:In(?:itialize|stall)|Terminate|Uninstall)|P(?:A(?:llocate(?:Aligned|TaskStorageIndex)?|rmTimer)|BlockC(?:lear|opy)|C(?:a(?:ncelTimer|useNotification)|reate(?:CriticalRegion|Event|Notification|Queue|Semaphore|T(?:ask|imer))|urrentTaskID)|D(?:e(?:allocateTaskStorageIndex|l(?:ayUntil|ete(?:CriticalRegion|Event|Notification|Queue|Semaphore|Timer)))|isposeTaskException)|E(?:nterCriticalRegion|x(?:it(?:CriticalRegion)?|tractTaskState))|Free|Get(?:AllocatedBlockSize|Next(?:CpuID|TaskID)|TaskStorageValue)|ModifyNotification(?:Parameters)?|NotifyQueue|Processors(?:Scheduled)?|Re(?:gisterDebugger|moteCall(?:CFM)?)|S(?:et(?:E(?:vent|xceptionHandler)|QueueReserve|T(?:ask(?:St(?:ate|orageValue)|Weight)|imerNotify))|ignalSemaphore)|T(?:askIsPreemptive|erminateTask|hrowException)|UnregisterDebugger|Wait(?:ForEvent|On(?:Queue|Semaphore))|Yield)|usicTrackNewExtendedControlEvent)|New(?:Debugger(?:DisposeThreadUPP|NewThreadUPP|ThreadSchedulerUPP)|Thread(?:EntryUPP|S(?:chedulerUPP|witchUPP)|TerminationUPP)?)|Se(?:c(?:A(?:CL(?:C(?:opySimpleContents|reateFromSimpleContents)|GetAuthorizations|Set(?:Authorizations|SimpleContents))|ccess(?:C(?:opySelectedACLList|reateFromOwnerAndACL)|GetOwnerAndACL))|Certificate(?:C(?:opyPreference|reateFromData)|Get(?:AlgorithmID|CLHandle|Data|Issuer|Subject|Type)|SetPreference)|Identity(?:CopyPreference|Se(?:arch(?:C(?:opyNext|reate)|GetTypeID)|tPreference))|Key(?:CreatePair|Ge(?:nerate|tC(?:S(?:PHandle|SMKey)|redentials))|chain(?:Get(?:CSPHandle|DLDBHandle)|Item(?:Export|Get(?:DLDBHandle|UniqueRecordID)|Import)|Search(?:C(?:opyNext|reateFromAttributes)|GetTypeID)))|Policy(?:Get(?:OID|TPHandle|Value)|Se(?:arch(?:C(?:opyNext|reate)|GetTypeID)|tValue))|Trust(?:Get(?:CssmResult(?:Code)?|Result|TPHandle)|SetParameters))|t(?:DebuggerNotificationProcs|Thread(?:ReadyGivenTaskRef|S(?:cheduler|tate(?:EndCritical)?|witcher)|Terminator)))|Thread(?:BeginCritical|CurrentStackSpace|EndCritical)|YieldTo(?:AnyThread|Thread))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.7.support.function.cf.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCFURLEnumeratorGetSourceDidChange\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.8.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:A(?:TS(?:CreateFontQueryRunLoopSource|Font(?:A(?:ctivateFrom(?:FileReference|Memory)|pplyFunction)|Deactivate|F(?:amily(?:ApplyFunction|FindFrom(?:Name|QuickDrawName)|Get(?:Encoding|Generation|Name|QuickDrawName)|Iterator(?:Create|Next|Re(?:lease|set)))|indFrom(?:Container|Name|PostScriptName))|Get(?:AutoActivationSettingForApplication|Container(?:FromFileReference)?|F(?:ileReference|ontFamilyResource)|G(?:eneration|lobalAutoActivationSetting)|HorizontalMetrics|Name|PostScriptName|Table(?:Directory)?|VerticalMetrics)|I(?:sEnabled|terator(?:Create|Next|Re(?:lease|set)))|Notif(?:ication(?:Subscribe|Unsubscribe)|y)|Set(?:AutoActivationSettingForApplication|Enabled|GlobalAutoActivationSetting))|GetGeneration)|bsolute(?:DeltaTo(?:Duration|Nanoseconds)|To(?:Duration|Nanoseconds))|dd(?:A(?:bsoluteToAbsolute|tomic(?:16|8)?)|CollectionItem(?:Hdl)?|DurationToAbsolute|FolderDescriptor|NanosecondsToAbsolute|Resource))|B(?:atteryCount|it(?:And(?:Atomic(?:16|8)?)?|Clr|Not|Or(?:Atomic(?:16|8)?)?|S(?:et|hift)|Tst|Xor(?:Atomic(?:16|8)?)?))|C(?:S(?:Copy(?:MachineName|UserName)|GetComponentsThreadMode|SetComponentsThreadMode)|a(?:llComponent(?:C(?:anDo|lose)|Dispatch|Function(?:WithStorage(?:ProcInfo)?)?|Get(?:MPWorkFunction|PublicResource)|Open|Register|Target|Unregister|Version)|ptureComponent)|hangedResource|lo(?:neCollection|se(?:Component(?:ResFile)?|ResFile))|o(?:llectionTagExists|mpareAndSwap|pyCollection|reEndian(?:FlipData|GetFlipper|InstallFlipper)|unt(?:1(?:Resources|Types)|Co(?:llection(?:Items|Owners|Tags)|mponent(?:Instances|s))|Resources|T(?:aggedCollectionItems|ypes)))|ur(?:ResFile|rentProcessorSpeed))|D(?:e(?:bugAssert|crementAtomic(?:16|8)?|l(?:ay|e(?:gateComponentCall|teGestaltValue))|queue|t(?:achResource(?:File)?|ermineIfPathIsEnclosedByFolder))|ispose(?:Co(?:llection(?:ExceptionUPP|FlattenUPP)?|mponent(?:FunctionUPP|MPWorkFunctionUPP|RoutineUPP))|De(?:bug(?:AssertOutputHandlerUPP|Component(?:CallbackUPP)?)|ferredTaskUPP)|ExceptionHandlerUPP|F(?:NSubscriptionUPP|SVolume(?:EjectUPP|MountUPP|UnmountUPP)|olderManagerNotificationUPP)|GetMissingComponentResourceUPP|Handle|IOCompletionUPP|Ptr|ResErrUPP|S(?:electorFunctionUPP|peech(?:DoneUPP|ErrorUPP|PhonemeUPP|SyncUPP|TextDoneUPP|WordUPP))|TimerUPP)|urationTo(?:Absolute|Nanoseconds))|E(?:mpty(?:Collection|Handle)|nqueue)|F(?:N(?:GetDirectoryForSubscription|Notify(?:All|ByPath)?|Subscribe(?:ByPath)?|Unsubscribe)|S(?:AllocateFork|C(?:a(?:ncelVolumeOperation|talogSearch)|lose(?:Fork|Iterator)|o(?:mpareFSRefs|py(?:AliasInfo|D(?:ADiskForVolume|iskIDForVolume)|Object(?:Async|Sync)|URLForVolume))|reate(?:DirectoryUnicode|F(?:ile(?:AndOpenForkUnicode|Unicode)|ork)|Res(?:File|ourceF(?:ile|ork))|StringFromHFSUniStr|VolumeOperation))|D(?:e(?:lete(?:Fork|Object)|termineIfRefIsEnclosedByFolder)|isposeVolumeOperation)|E(?:jectVolume(?:Async|Sync)|xchangeObjects)|F(?:i(?:le(?:Operation(?:C(?:ancel|opyStatus|reate)|GetTypeID|ScheduleWithRunLoop|UnscheduleFromRunLoop)|Security(?:C(?:opyAccessControlList|reate(?:WithFSPermissionInfo)?)|Get(?:Group(?:UUID)?|Mode|Owner(?:UUID)?|TypeID)|RefCreateCopy|Set(?:AccessControlList|Group(?:UUID)?|Mode|Owner(?:UUID)?)))|ndFolder)|lush(?:Fork|Volume)|ollowFinderAlias)|Get(?:Async(?:EjectStatus|MountStatus|UnmountStatus)|CatalogInfo(?:Bulk)?|DataForkName|Fork(?:CBInfo|Position|Size)|HFSUniStrFromString|ResourceForkName|TemporaryDirectoryForReplaceObject|Volume(?:ForD(?:ADisk|iskID)|Info|MountInfo(?:Size)?|Parms))|I(?:s(?:AliasFile|FSRefValid)|terateForks)|LockRange|M(?:a(?:keFSRefUnicode|tchAliasBulk)|o(?:unt(?:LocalVolume(?:Async|Sync)|ServerVolume(?:Async|Sync))|veObject(?:Async|Sync|ToTrash(?:Async|Sync))?))|NewAlias(?:FromPath|Minimal(?:Unicode)?|Unicode)?|Open(?:Fork|Iterator|OrphanResFile|Res(?:File|ourceFile))|Path(?:CopyObject(?:Async|Sync)|FileOperationCopyStatus|GetTemporaryDirectoryForReplaceObject|M(?:akeRef(?:WithOptions)?|oveObject(?:Async|Sync|ToTrash(?:Async|Sync)))|ReplaceObject)|Re(?:adFork|fMakePath|nameUnicode|placeObject|so(?:lve(?:Alias(?:File(?:WithMountFlags)?|WithMountFlags)?|NodeID)|urceFileAlreadyOpen))|Set(?:CatalogInfo|Fork(?:Position|Size)|VolumeInfo)|U(?:n(?:l(?:inkObject|ockRange)|mountVolume(?:Async|Sync))|pdateAlias)|VolumeMount|WriteFork)|i(?:nd(?:Folder|NextComponent)|x(?:2(?:Frac|Long|X)|ATan2|Div|Mul|R(?:atio|ound)))|latten(?:Collection(?:ToHdl)?|PartialCollection)|rac(?:2(?:Fix|X)|Cos|Div|Mul|S(?:in|qrt)))|Ge(?:stalt|t(?:1(?:Ind(?:Resource|Type)|NamedResource|Resource)|Alias(?:Size(?:FromPtr)?|UserType(?:FromPtr)?)|C(?:PUSpeed|o(?:llection(?:DefaultAttributes|ExceptionProc|Item(?:Hdl|Info)?|RetainCount)|mponent(?:In(?:dString|fo|stance(?:Error|Storage))|ListModSeed|Public(?:IndString|Resource(?:List)?)|Re(?:fcon|source)|TypeModSeed)))|Debug(?:ComponentInfo|OptionInfo)|Folder(?:NameUnicode|Types)|HandleSize|Ind(?:Resource|Type|exedCollection(?:Item(?:Hdl|Info)?|Tag))|Ma(?:cOSStatus(?:CommentString|ErrorString)|xResourceSize)|N(?:amedResource|e(?:wCollection|xt(?:FOND|ResourceFile)))|PtrSize|Res(?:Attrs|FileAttrs|Info|ource(?:SizeOnDisk)?)|SpeechInfo|T(?:aggedCollectionItem(?:Info)?|opResourceFile)))|H(?:ClrRBit|GetState|Lock(?:Hi)?|Set(?:RBit|State)|Unlock|and(?:AndHand|ToHand)|omeResFile)|I(?:dentifyFolder|n(?:crementAtomic(?:16|8)?|s(?:ertResourceFile|tall(?:DebugAssertOutputHandler|ExceptionHandler))|v(?:alidateFolderDescriptorCache|oke(?:Co(?:llection(?:ExceptionUPP|FlattenUPP)|mponent(?:MPWorkFunctionUPP|RoutineUPP))|De(?:bug(?:AssertOutputHandlerUPP|ComponentCallbackUPP)|ferredTaskUPP)|ExceptionHandlerUPP|F(?:NSubscriptionUPP|SVolume(?:EjectUPP|MountUPP|UnmountUPP)|olderManagerNotificationUPP)|GetMissingComponentResourceUPP|IOCompletionUPP|ResErrUPP|S(?:electorFunctionUPP|peech(?:DoneUPP|ErrorUPP|PhonemeUPP|SyncUPP|TextDoneUPP|WordUPP))|TimerUPP)))|s(?:H(?:andleValid|eapValid)|PointerValid))|L(?:M(?:Get(?:BootDrive|IntlSpec|MemErr|Res(?:Err|Load)|SysMap|TmpResLoad)|Set(?:BootDrive|IntlSpec|MemErr|Res(?:Err|Load)|Sys(?:FontSize|Map)|TmpResLoad))|o(?:adResource|cale(?:CountNames|Get(?:IndName|Name)|Operation(?:CountLocales|GetLocales))|ng2Fix))|M(?:PSetTaskType|aximumProcessorSpeed|emError|i(?:croseconds|nimumProcessorSpeed))|N(?:anosecondsTo(?:Absolute|Duration)|ew(?:Co(?:llection(?:ExceptionUPP|FlattenUPP)?|mponent(?:FunctionUPP|MPWorkFunctionUPP|RoutineUPP))|De(?:bug(?:AssertOutputHandlerUPP|Component(?:CallbackUPP)?|Option)|ferredTaskUPP)|E(?:mptyHandle|xceptionHandlerUPP)|F(?:NSubscriptionUPP|SVolume(?:EjectUPP|MountUPP|UnmountUPP)|olderManagerNotificationUPP)|Ge(?:staltValue|tMissingComponentResourceUPP)|Handle(?:Clear)?|IOCompletionUPP|Ptr(?:Clear)?|ResErrUPP|S(?:electorFunctionUPP|peech(?:DoneUPP|ErrorUPP|PhonemeUPP|SyncUPP|TextDoneUPP|WordUPP))|TimerUPP))|Open(?:A(?:Component(?:ResFile)?|DefaultComponent)|Component(?:ResFile)?|DefaultComponent)|P(?:B(?:AllocateFork(?:Async|Sync)|C(?:atalogSearch(?:Async|Sync)|lose(?:Fork(?:Async|Sync)|Iterator(?:Async|Sync))|ompareFSRefs(?:Async|Sync)|reate(?:DirectoryUnicode(?:Async|Sync)|F(?:ile(?:AndOpenForkUnicode(?:Async|Sync)|Unicode(?:Async|Sync))|ork(?:Async|Sync))))|Delete(?:Fork(?:Async|Sync)|Object(?:Async|Sync))|ExchangeObjects(?:Async|Sync)|F(?:S(?:CopyFile(?:Async|Sync)|ResolveNodeID(?:Async|Sync))|lush(?:Fork(?:Async|Sync)|Volume(?:Async|Sync)))|Get(?:CatalogInfo(?:Async|Bulk(?:Async|Sync)|Sync)|Fork(?:CBInfo(?:Async|Sync)|Position(?:Async|Sync)|Size(?:Async|Sync))|VolumeInfo(?:Async|Sync))|IterateForks(?:Async|Sync)|M(?:akeFSRefUnicode(?:Async|Sync)|oveObject(?:Async|Sync))|Open(?:Fork(?:Async|Sync)|Iterator(?:Async|Sync))|Re(?:adFork(?:Async|Sync)|nameUnicode(?:Async|Sync))|Set(?:CatalogInfo(?:Async|Sync)|Fork(?:Position(?:Async|Sync)|Size(?:Async|Sync))|VolumeInfo(?:Async|Sync))|UnlinkObject(?:Async|Sync)|WriteFork(?:Async|Sync)|X(?:LockRange(?:Async|Sync)|UnlockRange(?:Async|Sync)))|tr(?:AndHand|To(?:Hand|XHand))|urgeCollection(?:Tag)?)|Re(?:a(?:d(?:Location|PartialResource)|llocateHandle)|coverHandle|gisterComponent(?:FileRef(?:Entries)?|Resource(?:File)?)?|lease(?:Collection|Resource)|move(?:CollectionItem|FolderDescriptor|IndexedCollectionItem|Resource)|place(?:GestaltValue|IndexedCollectionItem(?:Hdl)?)|s(?:Error|olveComponentAlias)|tainCollection)|S(?:64Compare|SL(?:GetProtocolVersion|SetProtocolVersion)|e(?:cTranformCustomGetAttribute|t(?:AliasUserType(?:WithPtr)?|Co(?:llection(?:DefaultAttributes|ExceptionProc|ItemInfo)|mponent(?:Instance(?:Error|Storage)|Refcon))|De(?:bugOptionValue|faultComponent)|GestaltValue|HandleSize|IndexedCollectionItemInfo|PtrSize|Res(?:Attrs|FileAttrs|Info|Load|Purge|ourceSize)|SpeechInfo))|leepQ(?:Install|Remove)|peak(?:Buffer|String|Text)|ub(?:AbsoluteFromAbsolute|DurationFromAbsolute|NanosecondsFromAbsolute)|ysError)|T(?:askLevel|e(?:mpNewHandle|stAnd(?:Clear|Set)|xtToPhonemes)|ickCount)|U(?:64Compare|n(?:captureComponent|flattenCollection(?:FromHdl)?|ique(?:1ID|ID)|registerComponent|signedFixedMulDiv)|p(?:Time|date(?:ResFile|SystemActivity))|se(?:Dictionary|ResFile))|W(?:S(?:Get(?:CFTypeIDFromWSTypeID|WSTypeIDFromCFType)|Method(?:Invocation(?:Add(?:DeserializationOverride|SerializationOverride)|C(?:opy(?:P(?:arameters|roperty)|Serialization)|reate(?:FromSerialization)?)|GetTypeID|Invoke|S(?:cheduleWithRunLoop|et(?:CallBack|P(?:arameters|roperty)))|UnscheduleFromRunLoop)|ResultIsFault)|ProtocolHandler(?:C(?:opy(?:FaultDocument|Property|Re(?:plyD(?:ictionary|ocument)|questD(?:ictionary|ocument)))|reate)|GetTypeID|Set(?:DeserializationOverride|Property|SerializationOverride)))|ide(?:Add|BitShift|Compare|Divide|Multiply|Negate|S(?:hift|quareRoot|ubtract)|WideDivide)|rite(?:PartialResource|Resource))|X2F(?:ix|rac)|annuity|compound|d(?:ec2(?:f|l|num|s(?:tr)?)|tox80)|getaudit|num(?:2dec|tostring)|r(?:andomx|elation)|s(?:etaudit|tr2dec)|x80tod)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.8.support.function.cf.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCFXML(?:Node(?:Create(?:Copy)?|Get(?:InfoPtr|String|Type(?:Code|ID)|Version))|Parser(?:Abort|C(?:opyErrorDescription|reate(?:WithDataFromURL)?)|Get(?:C(?:allBacks|ontext)|Document|L(?:ineNumber|ocation)|S(?:ourceURL|tatusCode)|TypeID)|Parse)|Tree(?:Create(?:FromData(?:WithError)?|With(?:DataFromURL|Node)|XMLData)|GetNode))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.8.support.function.mac-classic.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:Debug(?:Str|ger)|SysBreak(?:Func|Str)?)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.8.support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:Re(?:gisterScreenRefreshCallback|leaseScreenRefreshRects)|Screen(?:RegisterMoveCallback|UnregisterMoveCallback)|UnregisterScreenRefreshCallback|W(?:aitForScreen(?:RefreshRects|UpdateRects)|indowServerCFMachPort))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.9.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AX(?:APIEnabled|MakeProcessTrusted|UIElementPostKeyboardEvent)|CopyProcessName|ExitToShell|Get(?:CurrentProcess|FrontProcess|NextProcess|Process(?:BundleLocation|ForPID|Information|PID))|IsProcessVisible|KillProcess|LaunchApplication|ProcessInformationCopyDictionary|S(?:SL(?:Copy(?:PeerCertificates|TrustedRoots)|DisposeContext|Get(?:Allows(?:AnyRoot|Expired(?:Certs|Roots))|EnableCertVerify|ProtocolVersionEnabled|RsaBlinding)|NewContext|Set(?:Allows(?:AnyRoot|Expired(?:Certs|Roots))|EnableCertVerify|ProtocolVersionEnabled|RsaBlinding|TrustedRoots))|ameProcess|e(?:c(?:ChooseIdentity(?:AsSheet)?|DisplayCertificate(?:Group)?|EditTrust(?:AsSheet)?|Policy(?:CreateWithOID|SetProperties))|tFrontProcess(?:WithOptions)?)|howHideProcess)|WakeUpProcess)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.9.support.function.cf.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCF(?:PreferencesCopyApplicationList|URL(?:Create(?:DataAndPropertiesFromResource|FromFSRef|PropertyFromResource)|DestroyResource|GetFSRef|WriteDataAndPropertiesToResource))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.9.support.function.clib.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:drem|finite|gamma|r(?:inttol|oundtol)|significand)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.9.support.function.dispatch.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bdispatch_(?:debug(?:v)?|get_current_queue)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.10.9.support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:C(?:ontextS(?:electFont|how(?:Glyphs(?:AtPoint|WithAdvances)?|Text(?:AtPoint)?))|ursorIs(?:DrawnInFramebuffer|Visible))|Display(?:FadeOperationInProgress|I(?:OServicePort|sCaptured)))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.tba.support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AUGraph(?:Add(?:Node|RenderNotify)|C(?:l(?:earConnections|ose)|o(?:nnectNodeInput|untNodeInteractions))|DisconnectNodeInput|Get(?:CPULoad|In(?:dNode|teractionInfo)|MaxCPULoad|N(?:ode(?:Count|In(?:foSubGraph|teractions))|umberOfInteractions))|I(?:nitialize|s(?:Initialized|NodeSubGraph|Open|Running))|N(?:ewNodeSubGraph|odeInfo)|Open|Remove(?:Node|RenderNotify)|S(?:etNodeInputCallback|t(?:art|op))|U(?:ninitialize|pdate))|DisposeAUGraph|NewAUGraph|QL(?:PreviewRequest(?:C(?:opy(?:ContentUTI|Options|URL)|reate(?:Context|PDFContext))|FlushContext|Get(?:DocumentObject|GeneratorBundle|TypeID)|IsCancelled|Set(?:D(?:ataRepresentation|ocumentObject)|URLRepresentation))|Thumbnail(?:C(?:ancel|opy(?:DocumentURL|Image|Options)|reate)|DispatchAsync|Get(?:ContentRect|MaximumSize|TypeID)|IsCancelled|Request(?:C(?:opy(?:ContentUTI|Options|URL)|reateContext)|FlushContext|Get(?:DocumentObject|GeneratorBundle|MaximumSize|TypeID)|IsCancelled|Set(?:DocumentObject|Image(?:AtURL|WithData)?|ThumbnailWith(?:DataRepresentation|URLRepresentation))))))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.10.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:C(?:GLGetDeviceFromGLRenderer|MS(?:DecoderCopySignerTimestampWithPolicy|EncoderCopySignerTimestampWithPolicy)|TRubyAnnotation(?:Create(?:Copy)?|Get(?:Alignment|Overhang|SizeFactor|T(?:extForPosition|ypeID))))|JSGlobalContext(?:CopyName|SetName)|LSCopy(?:ApplicationURLsForBundleIdentifier|DefaultApplicationURLFor(?:ContentType|URL))|SecAccessControl(?:CreateWithFlags|GetTypeID)|UTType(?:CopyAllTagsWithClass|IsD(?:eclared|ynamic))|launch_activate_socket|os_re(?:lease|tain)|qos_class_(?:main|self)|simd_inverse)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.11.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:Audio(?:ComponentInstantiate|ServicesPlay(?:AlertSoundWithCompletion|SystemSoundWithCompletion))|C(?:MSEncoderSetSignerAlgorithm|T(?:LineEnumerateCaretOffsets|RunGetBaseAdvancesAndOrigins))|IORegistryEntryCopy(?:FromPath|Path)|JSValueIs(?:Array|Date)|MIDI(?:ClientCreateWithBlock|DestinationCreateWithBlock|InputPortCreateWithBlock)|connectx|disconnectx|xpc_(?:array_get_(?:array|dictionary)|dictionary_get_(?:array|dictionary)))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.12.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:CTRubyAnnotationCreateWithAttributes|IOSurface(?:AllowsPixelSizeCasting|SetPurgeable)|JS(?:Object(?:Get(?:ArrayBufferByte(?:Length|sPtr)|TypedArray(?:B(?:uffer|yte(?:Length|Offset|sPtr))|Length))|Make(?:ArrayBufferWithBytesNoCopy|TypedArray(?:With(?:ArrayBuffer(?:AndOffset)?|BytesNoCopy))?))|ValueGetTypedArrayType)|MDItemsCopyAttributes|Sec(?:CertificateCopyNormalized(?:IssuerSequence|SubjectSequence)|Key(?:C(?:opy(?:Attributes|ExternalRepresentation|KeyExchangeResult|PublicKey)|reate(?:DecryptedData|EncryptedData|RandomKey|Signature|WithData))|IsAlgorithmSupported|VerifySignature))|os_(?:log_(?:create|type_enabled)|unfair_lock_(?:assert_(?:not_owner|owner)|lock|trylock|unlock))|xpc_connection_activate)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.13.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AudioUnitExtension(?:CopyComponentList|SetComponentList)|C(?:GImage(?:DestinationAddAuxiliaryDataInfo|SourceCopyAuxiliaryDataInfoAtIndex)|TFontManagerCreateFontDescriptorsFromData|V(?:ColorPrimariesGet(?:IntegerCodePointForString|StringForIntegerCodePoint)|TransferFunctionGet(?:IntegerCodePointForString|StringForIntegerCodePoint)|YCbCrMatrixGet(?:IntegerCodePointForString|StringForIntegerCodePoint)))|IOSurfaceGet(?:Bit(?:DepthOfComponentOfPlane|OffsetOfComponentOfPlane)|N(?:ameOfComponentOfPlane|umberOfComponentsOfPlane)|RangeOfComponentOfPlane|Subsampling|TypeOfComponentOfPlane)|SecCertificateCopySerialNumberData)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.14.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:AEDeterminePermissionToAutomateTarget|C(?:GImageSourceGetPrimaryImageIndex|TFramesetterCreateWithTypesetter)|Sec(?:CertificateCopyKey|Trust(?:EvaluateWithError|SetSignedCertificateTimestamps))|sec_(?:certificate_c(?:opy_ref|reate)|identity_c(?:opy_(?:certificates_ref|ref)|reate(?:_with_certificates)?)|protocol_(?:metadata_(?:access_(?:distinguished_names|ocsp_response|peer_certificate_chain|supported_signature_algorithms)|c(?:hallenge_parameters_are_equal|opy_peer_public_key|reate_secret(?:_with_context)?)|get_(?:early_data_accepted|negotiated_(?:protocol|tls_ciphersuite)|server_name)|peers_are_equal)|options_(?:add_(?:pre_shared_key|tls_application_protocol)|set_(?:challenge_block|key_update_block|local_identity|peer_authentication_required|tls_(?:false_start_enabled|is_fallback_attempt|ocsp_enabled|re(?:negotiation_enabled|sumption_enabled)|s(?:ct_enabled|erver_name)|tickets_enabled)|verify_block)))|trust_c(?:opy_ref|reate)))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.15.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:C(?:GAnimateImage(?:AtURLWithBlock|DataWithBlock)|T(?:FontManager(?:RegisterFont(?:Descriptors|URLs)|UnregisterFont(?:Descriptors|URLs))|GlyphInfoGetGlyph))|JS(?:Object(?:DeletePropertyForKey|GetPropertyForKey|HasPropertyForKey|MakeDeferredPromise|SetPropertyForKey)|Value(?:IsSymbol|MakeSymbol))|SecTrustEvaluateAsyncWithError|aligned_alloc|sec_(?:identity_access_certificates|protocol_(?:metadata_(?:access_pre_shared_keys|get_negotiated_tls_protocol_version)|options_(?:a(?:ppend_tls_ciphersuite(?:_group)?|re_equal)|get_default_m(?:ax_(?:dtls_protocol_version|tls_protocol_version)|in_(?:dtls_protocol_version|tls_protocol_version))|set_(?:m(?:ax_tls_protocol_version|in_tls_protocol_version)|pre_shared_key_selection_block|tls_pre_shared_key_identity_hint))))|xpc_type_get_name)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.8.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:A(?:ECompareDesc|udioQueueProcessingTapGetQueueTime)|C(?:GImage(?:Destination(?:AddImageAndMetadata|CopyImageSource)|Metadata(?:C(?:opy(?:StringValueWithPath|Tag(?:MatchingImageProperty|WithPath|s))|reate(?:FromXMPData|Mutable(?:Copy)?|XMPData))|EnumerateTagsUsingBlock|Re(?:gisterNamespaceForPrefix|moveTagWithPath)|Set(?:TagWithPath|Value(?:MatchingImageProperty|WithPath))|Tag(?:C(?:opy(?:Name(?:space)?|Prefix|Qualifiers|Value)|reate)|GetType(?:ID)?))|SourceCopyMetadataAtIndex)|MS(?:DecoderCopySigner(?:SigningTime|Timestamp(?:Certificates)?)|EncoderCopySignerTimestamp)|T(?:Font(?:CopyDefaultCascadeListForLanguages|GetOpticalBoundsForGlyphs|Manager(?:RegisterGraphicsFont|UnregisterGraphicsFont))|LineGetBoundsWithOptions)|VImageBufferCreateColorSpaceFromAttachments|opyInstrumentInfoFromSoundBank))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.10.9.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:A(?:XIsProcessTrustedWithOptions|udioHardware(?:CreateAggregateDevice|DestroyAggregateDevice))|C(?:GImageSourceRemoveCacheAtIndex|TFont(?:CreateForStringWithLanguage|Descriptor(?:CreateCopyWith(?:Family|SymbolicTraits)|MatchFontDescriptorsWithProgressHandler)))|FSEventStreamSetExclusionPaths|Sec(?:PolicyCreate(?:Revocation|WithProperties)|Trust(?:Copy(?:Exceptions|Result)|GetNetworkFetchAllowed|Set(?:Exceptions|NetworkFetchAllowed|OCSPResponse)))|xpc_activity_(?:copy_criteria|get_state|register|s(?:et_(?:criteria|state)|hould_defer)|unregister))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:A(?:E(?:Build(?:AppleEvent|Desc|Parameters)|C(?:allObjectAccessor|heckIsRecord|o(?:erce(?:Desc|Ptr)|untItems)|reate(?:AppleEvent|Desc(?:FromExternalPtr)?|List|RemoteProcessResolver))|D(?:e(?:codeMessage|lete(?:Item|Param))|ispose(?:Desc|RemoteProcessResolver|Token)|uplicateDesc)|FlattenDesc|Get(?:A(?:rray|ttribute(?:Desc|Ptr))|CoercionHandler|DescData(?:Range|Size)?|EventHandler|InteractionAllowed|Nth(?:Desc|Ptr)|ObjectAccessor|Param(?:Desc|Ptr)|RegisteredMachPort|SpecialHandler|TheCurrentEvent)|In(?:itializeDesc|stall(?:CoercionHandler|EventHandler|ObjectAccessor|SpecialHandler)|teractWithUser)|ManagerInfo|ObjectInit|P(?:r(?:intDescToHandle|ocess(?:AppleEvent|Event|Message))|ut(?:A(?:rray|ttribute(?:Desc|Ptr))|Desc|P(?:aram(?:Desc|Ptr)|tr)))|Re(?:mo(?:teProcessResolver(?:GetProcesses|ScheduleWithRunLoop)|ve(?:CoercionHandler|EventHandler|ObjectAccessor|SpecialHandler))|placeDescData|s(?:etTimer|olve|umeTheCurrentEvent))|S(?:e(?:nd(?:Message)?|t(?:InteractionAllowed|ObjectCallbacks|TheCurrentEvent))|izeOf(?:Attribute|FlattenedDesc|NthItem|Param)|tream(?:C(?:lose(?:Desc|List|Record)?|reateEvent)|Op(?:en(?:Desc|Event|KeyDesc|List|Record)?|tionalParam)|SetRecordType|Write(?:AEDesc|D(?:ata|esc)|Key(?:Desc)?))|uspendTheCurrentEvent)|UnflattenDesc)|H(?:GotoPage|LookupAnchor|RegisterHelpBookWithURL|Search)|S(?:CopySourceAttributes|GetSourceStyleNames|Init|SetSourceAttributes)|U(?:EventListener(?:AddEventType|Create(?:WithDispatchQueue)?|Notify|RemoveEventType)|Listener(?:AddParameter|Create(?:WithDispatchQueue)?|Dispose|RemoveParameter)|Parameter(?:FormatValue|ListenerNotify|Set|Value(?:FromLinear|ToLinear)))|X(?:IsProcessTrusted|Observer(?:AddNotification|Create(?:WithInfoCallback)?|Get(?:RunLoopSource|TypeID)|RemoveNotification)|UIElement(?:C(?:opy(?:A(?:ction(?:Description|Names)|ttribute(?:Names|Value(?:s)?))|ElementAtPosition|MultipleAttributeValues|ParameterizedAttribute(?:Names|Value))|reate(?:Application|SystemWide))|Get(?:AttributeValueCount|Pid|TypeID)|IsAttributeSettable|PerformAction|Set(?:AttributeValue|MessagingTimeout))|Value(?:Create|Get(?:Type(?:ID)?|Value)))|cquireFirstMatchingEventInQueue|ddEventTypesToHandler|u(?:dio(?:C(?:hannelLayoutTag_GetNumberOfChannels|o(?:dec(?:AppendInput(?:BufferList|Data)|GetProperty(?:Info)?|Initialize|ProduceOutput(?:BufferList|Packets)|Reset|SetProperty|Uninitialize)|mponent(?:Co(?:py(?:ConfigurationInfo|Name)|unt)|FindNext|Get(?:Description|Version)|Instance(?:CanDo|Dispose|GetComponent|New)|Register|Validate)|nverter(?:Convert(?:Buffer|ComplexBuffer)|Dispose|FillComplexBuffer|GetProperty(?:Info)?|New(?:Specific)?|Reset|SetProperty)))|Device(?:CreateIOProcID(?:WithBlock)?|DestroyIOProcID|Get(?:CurrentTime|NearestStartTime)|St(?:art(?:AtTime)?|op)|TranslateTime)|F(?:ile(?:C(?:lose|o(?:mponent(?:C(?:loseFile|ountUserData|reateURL)|ExtensionIsThisFormat|FileDataIsThisFormat|Get(?:GlobalInfo(?:Size)?|Property(?:Info)?|UserData(?:Size)?)|InitializeWithCallbacks|Op(?:en(?:URL|WithCallbacks)|timize)|Re(?:ad(?:Bytes|Packet(?:Data|s))|moveUserData)|Set(?:Property|UserData)|Write(?:Bytes|Packets))|untUserData)|reateWithURL)|Get(?:GlobalInfo(?:Size)?|Property(?:Info)?|UserData(?:Size)?)|InitializeWithCallbacks|Op(?:en(?:URL|WithCallbacks)|timize)|Re(?:ad(?:Bytes|PacketData)|moveUserData)|S(?:et(?:Property|UserData)|tream(?:Close|GetProperty(?:Info)?|Open|ParseBytes|Se(?:ek|tProperty)))|Write(?:Bytes|Packets))|ormatGetProperty(?:Info)?)|HardwareUnload|O(?:bject(?:AddPropertyListener(?:Block)?|GetPropertyData(?:Size)?|HasProperty|IsPropertySettable|RemovePropertyListener(?:Block)?|S(?:etPropertyData|how))|utputUnitSt(?:art|op))|Queue(?:A(?:ddPropertyListener|llocateBuffer(?:WithPacketDescriptions)?)|CreateTimeline|D(?:evice(?:Get(?:CurrentTime|NearestStartTime)|TranslateTime)|ispose(?:Timeline)?)|EnqueueBuffer(?:WithParameters)?|F(?:lush|reeBuffer)|Get(?:CurrentTime|P(?:arameter|roperty(?:Size)?))|New(?:Input(?:WithDispatchQueue)?|Output(?:WithDispatchQueue)?)|OfflineRender|P(?:ause|r(?:ime|ocessingTap(?:Dispose|GetSourceAudio|New)))|Re(?:movePropertyListener|set)|S(?:et(?:OfflineRenderFormat|P(?:arameter|roperty))|t(?:art|op)))|Services(?:AddSystemSoundCompletion|CreateSystemSoundID|DisposeSystemSoundID|GetProperty(?:Info)?|Play(?:AlertSound|SystemSound)|RemoveSystemSoundCompletion|SetProperty)|Unit(?:Add(?:PropertyListener|RenderNotify)|GetP(?:arameter|roperty(?:Info)?)|Initialize|Process(?:Multiple)?|Re(?:move(?:PropertyListenerWithUserData|RenderNotify)|nder|set)|S(?:cheduleParameters|etP(?:arameter|roperty))|Uninitialize))|thorization(?:C(?:opy(?:Info|Rights(?:Async)?)|reate(?:FromExternalForm)?)|Free(?:ItemSet)?|MakeExternalForm|Right(?:Get|Remove|Set))))|C(?:A(?:C(?:lock(?:A(?:ddListener|rm)|B(?:arBeatTimeToBeats|eatsToBarBeatTime)|Dis(?:arm|pose)|Get(?:CurrentT(?:empo|ime)|P(?:layRate|roperty(?:Info)?)|StartTime)|New|ParseMIDI|RemoveListener|S(?:MPTETimeToSeconds|e(?:condsToSMPTETime|t(?:CurrentT(?:empo|ime)|P(?:layRate|roperty)))|t(?:art|op))|TranslateTime)|urrentMediaTime)|Show(?:File)?|Transform3D(?:Concat|EqualToTransform|GetAffineTransform|I(?:nvert|s(?:Affine|Identity))|Make(?:AffineTransform|Rotation|Scale|Translation)|Rotate|Scale|Translate))|C_SHA(?:1(?:_(?:Final|Init|Update))?|2(?:24(?:_(?:Final|Init|Update))?|56(?:_(?:Final|Init|Update))?)|384(?:_(?:Final|Init|Update))?|512(?:_(?:Final|Init|Update))?)|F(?:H(?:TTP(?:Authentication(?:AppliesToRequest|C(?:opy(?:Domains|Method|Realm)|reateFromResponse)|GetTypeID|IsValid|Requires(?:AccountDomain|OrderedRequests|UserNameAndPassword))|Message(?:A(?:ddAuthentication|pp(?:endBytes|lyCredential(?:Dictionary|s)))|C(?:opy(?:AllHeaderFields|Body|HeaderFieldValue|Re(?:quest(?:Method|URL)|sponseStatusLine)|SerializedMessage|Version)|reate(?:Copy|Empty|Re(?:quest|sponse)))|Get(?:ResponseStatusCode|TypeID)|Is(?:HeaderComplete|Request)|Set(?:Body|HeaderFieldValue)))|ost(?:C(?:ancelInfoResolution|reate(?:Copy|With(?:Address|Name)))|Get(?:Addressing|Names|Reachability|TypeID)|S(?:cheduleWithRunLoop|etClient|tartInfoResolution)|UnscheduleFromRunLoop))|Net(?:Service(?:Browser(?:Create|GetTypeID|Invalidate|S(?:cheduleWithRunLoop|earchFor(?:Domains|Services)|topSearch)|UnscheduleFromRunLoop)|C(?:ancel|reate(?:Copy|DictionaryWithTXTData|TXTDataWithDictionary)?)|Get(?:Addressing|Domain|Name|PortNumber|T(?:XTData|argetHost|ype(?:ID)?))|Monitor(?:Create|GetTypeID|Invalidate|S(?:cheduleWithRunLoop|t(?:art|op))|UnscheduleFromRunLoop)|Re(?:gisterWithOptions|solveWithTimeout)|S(?:cheduleWithRunLoop|et(?:Client|TXTData))|UnscheduleFromRunLoop)|work(?:Copy(?:ProxiesFor(?:AutoConfigurationScript|URL)|SystemProxySettings)|ExecuteProxyAutoConfiguration(?:Script|URL)))|S(?:ocketStreamSOCKSGetError(?:Subdomain)?|treamCreatePairWithSocketTo(?:CFHost|NetService)))|G(?:Display(?:CreateUUIDFromDisplayID|GetDisplayIDFromUUID)|Image(?:Destination(?:AddImage(?:FromSource)?|C(?:opyTypeIdentifiers|reateWith(?:Data(?:Consumer)?|URL))|Finalize|GetTypeID|SetProperties)|MetadataGetTypeID|Source(?:C(?:opy(?:Properties(?:AtIndex)?|TypeIdentifiers)|reate(?:I(?:mageAtIndex|ncremental)|ThumbnailAtIndex|With(?:Data(?:Provider)?|URL)))|Get(?:Count|Status(?:AtIndex)?|Type(?:ID)?)|UpdateData(?:Provider)?))|L(?:C(?:hoosePixelFormat|learDrawable|opyContext|reate(?:Context|PBuffer))|D(?:es(?:cribe(?:P(?:Buffer|ixelFormat)|Renderer)|troy(?:Context|P(?:Buffer|ixelFormat)|RendererInfo))|isable)|E(?:nable|rrorString)|FlushDrawable|Get(?:C(?:ontextRetainCount|urrentContext)|GlobalOption|O(?:ffScreen|ption)|P(?:Buffer(?:RetainCount)?|arameter|ixelFormat(?:RetainCount)?)|ShareGroup|V(?:ersion|irtualScreen))|IsEnabled|LockContext|QueryRendererInfo|Re(?:lease(?:Context|P(?:Buffer|ixelFormat))|tain(?:Context|P(?:Buffer|ixelFormat)))|Set(?:CurrentContext|FullScreen(?:OnDisplay)?|GlobalOption|O(?:ffScreen|ption)|P(?:Buffer|arameter)|VirtualScreen)|TexImage(?:IOSurface2D|PBuffer)|U(?:nlockContext|pdateContext)))|M(?:CalibrateDisplay|Plugin(?:ExamineContext|HandleSelection|PostMenuCleanup)|S(?:Decoder(?:C(?:opy(?:AllCerts|Content|DetachedContent|EncapsulatedContentType|Signer(?:Cert|EmailAddress|Status))|reate)|FinalizeMessage|Get(?:NumSigners|TypeID)|IsContentEncrypted|SetDetachedContent|UpdateMessage)|Encode(?:Content|r(?:Add(?:Recipients|S(?:igne(?:dAttributes|rs)|upportingCerts))|C(?:opy(?:Enc(?:apsulatedContentType|odedContent)|Recipients|S(?:igners|upportingCerts))|reate)|Get(?:CertificateChainMode|HasDetachedContent|TypeID)|Set(?:CertificateChainMode|EncapsulatedContentTypeOID|HasDetachedContent)|UpdateContent))))|S(?:Backup(?:IsItemExcluded|SetItemExcluded)|DiskSpace(?:CancelRecovery|GetRecoveryEstimate|StartRecovery)|Get(?:DefaultIdentityAuthority|LocalIdentityAuthority|ManagedIdentityAuthority)|Identity(?:A(?:dd(?:Alias|Member)|uth(?:enticateUsingPassword|ority(?:CopyLocalizedName|GetTypeID)))|C(?:ommit(?:Asynchronously)?|reate(?:Copy|GroupMembershipQuery|PersistentReference)?)|Delete|Get(?:A(?:liases|uthority)|C(?:ertificate|lass)|EmailAddress|FullName|Image(?:Data(?:Type)?|URL)|Posix(?:ID|Name)|TypeID|UUID)|Is(?:Committing|Enabled|Hidden|MemberOfGroup)|Query(?:C(?:opyResults|reate(?:For(?:CurrentUser|Name|P(?:ersistentReference|osixID)|UUID))?)|Execute(?:Asynchronously)?|GetTypeID|Stop)|Remove(?:Alias|Client|Member)|Set(?:Certificate|EmailAddress|FullName|I(?:mage(?:Data|URL)|sEnabled)|Password)))|T(?:F(?:ont(?:C(?:o(?:llection(?:C(?:opy(?:ExclusionDescriptors|FontAttribute(?:s)?|QueryDescriptors)|reate(?:CopyWithFontDescriptors|FromAvailableFonts|M(?:atchingFontDescriptors(?:ForFamily|SortedWithCallback|WithOptions)?|utableCopy)|WithFontDescriptors))|GetTypeID|Set(?:ExclusionDescriptors|QueryDescriptors))|py(?:A(?:ttribute|vailableTables)|CharacterSet|DisplayName|F(?:amilyName|eature(?:Settings|s)|ontDescriptor|ullName)|GraphicsFont|LocalizedName|Name|PostScriptName|SupportedLanguages|T(?:able|raits)|Variation(?:Axes)?))|reate(?:CopyWith(?:Attributes|Family|SymbolicTraits)|ForString|PathForGlyph|UIFontForLanguage|With(?:FontDescriptor(?:AndOptions)?|GraphicsFont|Name(?:AndOptions)?|PlatformFont)))|D(?:escriptor(?:C(?:opy(?:Attribute(?:s)?|LocalizedAttribute)|reate(?:CopyWith(?:Attributes|Feature|Variation)|MatchingFontDescriptor(?:s)?|With(?:Attributes|NameAndSize)))|GetTypeID)|rawGlyphs)|Get(?:A(?:dvancesForGlyphs|scent)|Bounding(?:Box|RectsForGlyphs)|CapHeight|Descent|Glyph(?:Count|WithName|sForCharacters)|L(?:eading|igatureCaretPositions)|Matrix|PlatformFont|S(?:ize|lantAngle|tringEncoding|ymbolicTraits)|TypeID|Un(?:derline(?:Position|Thickness)|itsPerEm)|VerticalTranslationsForGlyphs|XHeight)|Manager(?:C(?:o(?:mpareFontFamilyNames|py(?:Available(?:Font(?:FamilyNames|URLs)|PostScriptNames)|RegisteredFontDescriptors))|reateFont(?:Descriptor(?:FromData|sFromURL)|RequestRunLoopSource))|EnableFontDescriptors|Get(?:AutoActivationSetting|ScopeForURL)|IsSupportedFont|Re(?:gisterFonts(?:ForURL|WithAssetNames)|questFonts)|SetAutoActivationSetting|UnregisterFontsForURL))|rame(?:Draw|Get(?:FrameAttributes|Line(?:Origins|s)|Path|StringRange|TypeID|VisibleStringRange)|setter(?:Create(?:Frame|WithAttributedString)|GetType(?:ID|setter)|SuggestFrameSizeWithConstraints)))|G(?:etCoreTextVersion|lyphInfo(?:CreateWith(?:CharacterIdentifier|Glyph(?:Name)?)|Get(?:Character(?:Collection|Identifier)|GlyphName|TypeID)))|Line(?:Create(?:JustifiedLine|TruncatedLine|WithAttributedString)|Draw|Get(?:Glyph(?:Count|Runs)|ImageBounds|OffsetForStringIndex|PenOffsetForFlush|String(?:IndexForPosition|Range)|T(?:railingWhitespaceWidth|yp(?:eID|ographicBounds))))|ParagraphStyle(?:Create(?:Copy)?|Get(?:TypeID|ValueForSpecifier))|Run(?:D(?:elegate(?:Create|Get(?:RefCon|TypeID))|raw)|Get(?:A(?:dvances(?:Ptr)?|ttributes)|Glyph(?:Count|s(?:Ptr)?)|ImageBounds|Positions(?:Ptr)?|St(?:atus|ring(?:Indices(?:Ptr)?|Range))|T(?:extMatrix|yp(?:eID|ographicBounds))))|T(?:extTab(?:Create|Get(?:Alignment|Location|Options|TypeID))|ypesetter(?:Create(?:Line(?:WithOffset)?|WithAttributedString(?:AndOptions)?)|GetTypeID|Suggest(?:ClusterBreak(?:WithOffset)?|LineBreak(?:WithOffset)?))))|V(?:Buffer(?:GetAttachment(?:s)?|PropagateAttachments|Re(?:lease|moveA(?:llAttachments|ttachment)|tain)|SetAttachment(?:s)?)|DisplayLink(?:CreateWith(?:ActiveCGDisplays|CGDisplay(?:s)?|OpenGLDisplayMask)|Get(?:ActualOutputVideoRefreshPeriod|Current(?:CGDisplay|Time)|NominalOutputVideoRefreshPeriod|OutputVideoLatency|TypeID)|IsRunning|Re(?:lease|tain)|S(?:et(?:CurrentCGDisplay(?:FromOpenGLContext)?|Output(?:Callback|Handler))|t(?:art|op))|TranslateTime)|Get(?:CurrentHostTime|HostClock(?:Frequency|MinimumTimeDelta))|ImageBuffer(?:Get(?:C(?:leanRect|olorSpace)|DisplaySize|EncodedSize)|IsFlipped)|Pixel(?:Buffer(?:Create(?:ResolvedAttributesDictionary|With(?:Bytes|IOSurface|PlanarBytes))?|FillExtendedPixels|Get(?:B(?:aseAddress(?:OfPlane)?|ytesPerRow(?:OfPlane)?)|DataSize|ExtendedPixels|Height(?:OfPlane)?|IOSurface|P(?:ixelFormatType|laneCount)|TypeID|Width(?:OfPlane)?)|IsPlanar|LockBaseAddress|Pool(?:Create(?:PixelBuffer(?:WithAuxAttributes)?)?|Flush|Get(?:Attributes|PixelBufferAttributes|TypeID)|Re(?:lease|tain))|Re(?:lease|tain)|UnlockBaseAddress)|FormatDescription(?:ArrayCreateWithAllPixelFormatTypes|CreateWithPixelFormatType|RegisterDescriptionWithPixelFormatType)))|allNextEventHandler|h(?:ange(?:TextToUnicodeInfo|UnicodeToTextInfo)|eckEventQueueForUserCancel)|o(?:lorSync(?:C(?:MM(?:C(?:opy(?:CMMIdentifier|LocalizedName)|reate)|Get(?:Bundle|TypeID))|reateCodeFragment)|Device(?:CopyDeviceInfo|SetCustomProfiles)|Iterate(?:DeviceProfiles|Installed(?:CMMs|Profiles))|Profile(?:C(?:o(?:ntainsTag|py(?:D(?:ata|escriptionString)|Header|Tag(?:Signatures)?))|reate(?:D(?:eviceProfile|isplayTransferTablesFromVCGT)|Link|Mutable(?:Copy)?|With(?:DisplayID|Name|URL))?)|EstimateGamma(?:WithDisplayID)?|Get(?:DisplayTransferFormulaFromVCGT|MD5|TypeID|URL)|Install|RemoveTag|Set(?:Header|Tag)|Uninstall|Verify)|RegisterDevice|Transform(?:C(?:o(?:nvert|pyProperty)|reate)|GetTypeID|SetProperty)|UnregisterDevice)|n(?:tinueSpeech|vertFrom(?:PStringToUnicode|TextToUnicode|UnicodeTo(?:PString|ScriptCodeRun|Text(?:Run)?)))|py(?:Event(?:As|CGEvent)?|NameFromSoundBank|PhonemesFromText|S(?:peechProperty|ymbolicHotKeys)|ThemeIdentifier)|unt(?:UnicodeMappings|Voices))|reate(?:CompDescriptor|Event(?:WithCGEvent)?|LogicalDescriptor|O(?:bjSpecifier|ffsetDescriptor)|RangeDescriptor|Text(?:Encoding|ToUnicodeInfo(?:ByEncoding)?)|UnicodeToText(?:Info(?:ByEncoding)?|RunInfo(?:By(?:Encoding|ScriptCode))?)))|D(?:A(?:A(?:ddCallbackToSession|pprovalSession(?:Create|GetTypeID|ScheduleWithRunLoop|UnscheduleFromRunLoop))|CallbackCreate|Disk(?:C(?:opy(?:Description|IOMedia|WholeDisk)|reateFrom(?:BSDName|IOMedia|VolumePath))|Get(?:BSDName|TypeID))|GetCallbackFromSession|RemoveCallbackFromSession(?:WithKey)?|Session(?:Create|GetTypeID|S(?:cheduleWithRunLoop|etDispatchQueue)|UnscheduleFromRunLoop))|CS(?:CopyTextDefinition|GetTermRangeInString)|R(?:AudioTrackCreateWithURL|Burn(?:Abort|C(?:opyStatus|reate)|Get(?:Device|Properties|TypeID)|SetProperties|WriteLayout)|C(?:DTextBlock(?:Create(?:ArrayFromPackList)?|Flatten|Get(?:Properties|T(?:rackDictionaries|ypeID)|Value)|Set(?:Properties|TrackDictionaries|Value))|opy(?:DeviceArray|LocalizedStringFor(?:AdditionalSense|DiscRecordingError|SenseCode|Value)))|Device(?:Acquire(?:ExclusiveAccess|MediaReservation)|C(?:loseTray|opy(?:DeviceFor(?:BSDName|IORegistryEntryPath)|Info|Status))|EjectMedia|GetTypeID|IsValid|KPSForXFactor|OpenTray|Release(?:ExclusiveAccess|MediaReservation)|XFactorForKPS)|Erase(?:C(?:opyStatus|reate)|Get(?:Device|Properties|TypeID)|S(?:etProperties|tart))|F(?:SObject(?:Copy(?:BaseName|FilesystemPropert(?:ies|y)|MangledName(?:s)?|RealURL|SpecificName(?:s)?)|Get(?:FilesystemMask|Parent)|IsVirtual|Set(?:BaseName|Filesystem(?:Mask|Propert(?:ies|y))|SpecificName(?:s)?))|ile(?:Create(?:RealWithURL|Virtual(?:Link|With(?:Callback|Data)))|GetTypeID|systemTrack(?:Create|EstimateOverhead))|older(?:AddChild|C(?:o(?:nvertRealToVirtual|pyChildren|untChildren)|reate(?:RealWithURL|Virtual))|GetTypeID|RemoveChild))|Get(?:RefCon|Version)|NotificationCenter(?:AddObserver|Create(?:RunLoopSource)?|GetTypeID|RemoveObserver)|SetRefCon|Track(?:Create|EstimateLength|Get(?:Properties|TypeID)|S(?:etProperties|peedTest)))|ebugPrint(?:Event|MainEventQueue)|is(?:ableSecureEventInput|pose(?:AE(?:Coerce(?:DescUPP|PtrUPP)|DisposeExternalUPP|EventHandlerUPP|FilterUPP|IdleUPP)|C(?:a(?:librate(?:EventUPP|UPP)|nCalibrateUPP)|ontrol(?:ActionUPP|EditTextValidationUPP|KeyFilterUPP|UserPane(?:ActivateUPP|DrawUPP|FocusUPP|HitTestUPP|IdleUPP|KeyDownUPP|TrackingUPP)))|D(?:ataBrowser(?:A(?:cceptDragUPP|ddDragItemUPP)|DrawItemUPP|EditItemUPP|GetContextualMenuUPP|HitTestUPP|Item(?:AcceptDragUPP|CompareUPP|D(?:ataUPP|ragRgnUPP)|HelpContentUPP|Notification(?:UPP|WithItemUPP)|ReceiveDragUPP|UPP)|PostProcessDragUPP|ReceiveDragUPP|SelectContextualMenuUPP|TrackingUPP)|ragInputUPP)|E(?:ditUnicodePostUpdateUPP|vent(?:ComparatorUPP|HandlerUPP|Loop(?:IdleTimerUPP|TimerUPP)))|HM(?:ControlContentUPP|Menu(?:ItemContentUPP|TitleContentUPP)|WindowContentUPP)|I(?:con(?:ActionUPP|GetterUPP)|ndexToUCStringUPP)|M(?:odalFilter(?:UPP|YDUPP)|usic(?:EventIterator|Player|Sequence))|N(?:ColorChangedUPP|MUPP)|OS(?:A(?:ActiveUPP|CreateAppleEventUPP|SendUPP)|L(?:A(?:ccessorUPP|djustMarksUPP)|Co(?:mpareUPP|untUPP)|DisposeTokenUPP|Get(?:ErrDescUPP|MarkTokenUPP)|MarkUPP))|SpeechChannel|T(?:XN(?:ActionNameMapperUPP|ContextualMenuSetupUPP|FindUPP|ScrollInfoUPP)|extToUnicodeInfo)|U(?:nicodeToText(?:FallbackUPP|Info|RunInfo)|serItemUPP))))|E(?:nableSecureEventInput|xtAudioFile(?:CreateWithURL|Dispose|GetProperty(?:Info)?|OpenURL|Read|Se(?:ek|tProperty)|Tell|Wr(?:apAudioFileID|ite(?:Async)?)))|F(?:C(?:Add(?:Collection|FontDescriptorToCollection)|Copy(?:CollectionNames|FontDescriptorsInCollection)|FontDescriptorCreateWith(?:FontAttributes|Name)|Remove(?:Collection|FontDescriptorFromCollection))|P(?:IsFontPanelVisible|ShowHideFontPanel)|SEvent(?:Stream(?:C(?:opy(?:Description|PathsBeingWatched)|reate(?:RelativeToDevice)?)|Flush(?:Async|Sync)|Get(?:DeviceBeingWatched|LatestEventId)|Invalidate|Re(?:lease|tain)|S(?:cheduleWithRunLoop|etDispatchQueue|how|t(?:art|op))|UnscheduleFromRunLoop)|s(?:CopyUUIDForDevice|Get(?:CurrentEventId|LastEventIdForDeviceBeforeTime)|PurgeEventsForDeviceUpToEventId))|indSpecificEventInQueue|lush(?:Event(?:Queue|sMatchingListFromQueue)|SpecificEventsFromQueue))|Get(?:A(?:pplication(?:EventTarget|TextEncoding)|udioUnitParameterDisplayType)|C(?:FRunLoopFromEventLoop|olor|urrent(?:ButtonState|Event(?:ButtonState|KeyModifiers|Loop|Queue|Time)?|KeyModifiers))|Event(?:Class|DispatcherTarget|Kind|MonitorTarget|Parameter|RetainCount|Time)|I(?:con(?:FamilyData|RefVariant)|ndVoice)|Keys|M(?:ainEvent(?:Loop|Queue)|enuTrackingData)|NumEventsInQueue|S(?:criptInfoFromTextEncoding|peech(?:Pitch|Rate)|y(?:mbolicHotKeyMode|stemUIMode))|T(?:extEncoding(?:Base|F(?:ormat|romScriptInfo)|Name|Variant)|hemeMe(?:nu(?:ItemExtra|SeparatorHeight|TitleExtra)|tric))|Voice(?:Description|Info))|HI(?:DictionaryWindowShow|GetMousePosition|MouseTrackingGetParameters|Object(?:AddDelegate|C(?:opy(?:ClassID|Delegates)|reate(?:FromBundle)?)|DynamicCast|FromEventTarget|GetEvent(?:HandlerObject|Target)|Is(?:ArchivingIgnored|OfClass)|PrintDebugInfo|Re(?:gisterSubclass|moveDelegate)|UnregisterClass)|PointConvert|RectConvert|S(?:earchWindowShow|hape(?:C(?:ontainsPoint|reate(?:Copy|Difference|Empty|Intersection|Mutable(?:Copy|WithRect)?|Union|With(?:QDRgn|Rect)|Xor))|Difference|Enumerate|Get(?:AsQDRgn|Bounds|TypeID)|I(?:n(?:set|tersect(?:sRect)?)|s(?:Empty|Rectangular))|Offset|ReplacePathInCGContext|Set(?:Empty|WithShape)|Union(?:WithRect)?|Xor)|izeConvert)|Theme(?:ApplyBackground|B(?:eginFocus|rushCreateCGColor)|Draw(?:B(?:ackground|utton)|ChasingArrows|F(?:ocusRect|rame)|G(?:enericWell|r(?:abber|o(?:upBox|wBox)))|Header|Menu(?:Ba(?:ckground|rBackground)|Item|Separator|Title)|P(?:aneSplitter|lacard|opupArrow)|S(?:crollBarDelimiters|e(?:gment|parator))|T(?:ab(?:Pane)?|extBox|i(?:ckMark|tleBarWidget)|rack(?:TickMarks)?)|WindowFrame)|EndFocus|Get(?:Button(?:BackgroundBounds|ContentBounds|Shape)|GrowBoxBounds|MenuBackgroundShape|ScrollBarTrackRect|T(?:ab(?:DrawShape|Pane(?:ContentShape|DrawShape)|Shape)|ext(?:ColorForThemeBrush|Dimensions)|rack(?:Bounds|DragRect|LiveValue|Part(?:Bounds|s)|Thumb(?:PositionFrom(?:Bounds|Offset)|Shape)))|UIFontType|Window(?:RegionHit|Shape))|HitTest(?:ScrollBarArrows|Track)|Set(?:Fill|Stroke|TextFill)))|I(?:O(?:BSDNameMatching|C(?:atalogue(?:GetData|ModuleLoaded|Reset|SendData|Terminate)|onnect(?:Add(?:Client|Ref)|Call(?:Async(?:Method|S(?:calarMethod|tructMethod))|Method|S(?:calarMethod|tructMethod))|GetService|MapMemory(?:64)?|Release|Set(?:CFPropert(?:ies|y)|NotificationPort)|Trap(?:0|1|2|3|4|5|6)|UnmapMemory(?:64)?)|reateReceivePort)|DispatchCalloutFromMessage|Iterator(?:IsValid|Next|Reset)|Kit(?:GetBusyState|WaitQuiet)|MasterPort|NotificationPort(?:Create|Destroy|Get(?:MachPort|RunLoopSource)|Set(?:DispatchQueue|ImportanceReceiver))|O(?:bject(?:Co(?:nformsTo|py(?:BundleIdentifierForClass|Class|SuperclassForClass))|Get(?:Class|KernelRetainCount|RetainCount|UserRetainCount)|IsEqualTo|Re(?:lease|tain))|penFirmwarePathMatching)|Registry(?:CreateIterator|Entry(?:Create(?:CFPropert(?:ies|y)|Iterator)|FromPath|Get(?:Child(?:Entry|Iterator)|LocationInPlane|Name(?:InPlane)?|P(?:a(?:rent(?:Entry|Iterator)|th)|roperty)|RegistryEntryID)|I(?:DMatching|nPlane)|Se(?:archCFProperty|tCFPropert(?:ies|y)))|GetRootEntry|IteratorE(?:nterEntry|xitEntry))|S(?:ervice(?:A(?:dd(?:InterestNotification|MatchingNotification|Notification)|uthorize)|Close|Get(?:BusyState|MatchingService(?:s)?)|Match(?:PropertyTable|ing)|NameMatching|O(?:FPathToBSDName|pen(?:AsFileDescriptor)?)|RequestProbe|WaitQuiet)|urface(?:AlignProperty|C(?:opy(?:AllValues|Value)|reate(?:MachPort|XPCObject)?)|DecrementUseCount|Get(?:AllocSize|B(?:aseAddress(?:OfPlane)?|ytesPer(?:Element(?:OfPlane)?|Row(?:OfPlane)?))|Element(?:Height(?:OfPlane)?|Width(?:OfPlane)?)|Height(?:OfPlane)?|ID|P(?:ixelFormat|laneCount|roperty(?:Alignment|Maximum))|Seed|TypeID|UseCount|Width(?:OfPlane)?)|I(?:ncrementUseCount|sInUse)|Lo(?:ck|okup(?:From(?:MachPort|XPCObject))?)|Remove(?:AllValues|Value)|SetValue(?:s)?|Unlock)))|conRef(?:ContainsCGPoint|IntersectsCGRect|To(?:HIShape|IconFamily))|n(?:stallEvent(?:Handler|LoopTimer)|voke(?:AE(?:Coerce(?:DescUPP|PtrUPP)|DisposeExternalUPP|EventHandlerUPP|FilterUPP|IdleUPP)|C(?:a(?:librate(?:EventUPP|UPP)|nCalibrateUPP)|ontrol(?:ActionUPP|EditTextValidationUPP|KeyFilterUPP|UserPane(?:ActivateUPP|DrawUPP|FocusUPP|HitTestUPP|IdleUPP|KeyDownUPP|TrackingUPP)))|D(?:ataBrowser(?:A(?:cceptDragUPP|ddDragItemUPP)|DrawItemUPP|EditItemUPP|GetContextualMenuUPP|HitTestUPP|Item(?:AcceptDragUPP|CompareUPP|D(?:ataUPP|ragRgnUPP)|HelpContentUPP|Notification(?:UPP|WithItemUPP)|ReceiveDragUPP|UPP)|PostProcessDragUPP|ReceiveDragUPP|SelectContextualMenuUPP|TrackingUPP)|ragInputUPP)|E(?:ditUnicodePostUpdateUPP|vent(?:ComparatorUPP|HandlerUPP|Loop(?:IdleTimerUPP|TimerUPP)))|HM(?:ControlContentUPP|Menu(?:ItemContentUPP|TitleContentUPP)|WindowContentUPP)|I(?:con(?:ActionUPP|GetterUPP)|ndexToUCStringUPP)|ModalFilter(?:UPP|YDUPP)|N(?:ColorChangedUPP|MUPP)|OS(?:A(?:ActiveUPP|CreateAppleEventUPP|SendUPP)|L(?:A(?:ccessorUPP|djustMarksUPP)|Co(?:mpareUPP|untUPP)|DisposeTokenUPP|Get(?:ErrDescUPP|MarkTokenUPP)|MarkUPP))|TXN(?:ActionNameMapperUPP|ContextualMenuSetupUPP|FindUPP|ScrollInfoUPP)|U(?:nicodeToTextFallbackUPP|serItemUPP)))|s(?:EventInQueue|IconRefMaskEmpty|SecureEventInputEnabled|UserCancelEventRef))|JS(?:C(?:heckScriptSyntax|lass(?:Create|Re(?:lease|tain))|ontextG(?:etG(?:lobal(?:Context|Object)|roup)|roup(?:Create|Re(?:lease|tain))))|EvaluateScript|G(?:arbageCollect|lobalContext(?:Create(?:InGroup)?|Re(?:lease|tain)))|Object(?:C(?:allAs(?:Constructor|Function)|opyPropertyNames)|DeleteProperty|GetPr(?:ivate|o(?:perty(?:AtIndex)?|totype))|HasProperty|Is(?:Constructor|Function)|Make(?:Array|Constructor|Date|Error|Function(?:WithCallback)?|RegExp)?|SetPr(?:ivate|o(?:perty(?:AtIndex)?|totype)))|PropertyNameA(?:ccumulatorAddName|rray(?:Get(?:Count|NameAtIndex)|Re(?:lease|tain)))|String(?:C(?:opyCFString|reateWith(?:C(?:FString|haracters)|UTF8CString))|Get(?:CharactersPtr|Length|MaximumUTF8CStringSize|UTF8CString)|IsEqual(?:ToUTF8CString)?|Re(?:lease|tain))|Value(?:CreateJSONString|GetType|Is(?:Boolean|Equal|InstanceOfConstructor|Nu(?:ll|mber)|Object(?:OfClass)?|Stri(?:ctEqual|ng)|Undefined)|Make(?:Boolean|FromJSONString|Nu(?:ll|mber)|String|Undefined)|Protect|To(?:Boolean|Number|Object|StringCopy)|Unprotect))|KBGetLayoutType|L(?:MGetK(?:bd(?:Last|Type)|ey(?:RepThresh|Thresh))|S(?:C(?:anURLAcceptURL|opy(?:A(?:llRoleHandlersForContentType|pplicationURLsForURL)|DefaultRoleHandlerForContentType))|Open(?:CFURLRef|FromURLSpec)|RegisterURL|SetDefault(?:HandlerForURLScheme|RoleHandlerForContentType))|o(?:cale(?:Operation(?:CountNames|Get(?:IndName|Name))|Ref(?:FromL(?:angOrRegionCode|ocaleString)|GetPartString)|StringToLangAndRegionCodes)|ngDoubleTo(?:SInt64|UInt64)))|M(?:D(?:CopyLabel(?:Kinds|WithUUID|s(?:MatchingExpression|WithKind))|Item(?:C(?:opy(?:Attribute(?:List|Names|s)?|Labels)|reate(?:WithURL)?)|GetTypeID|RemoveLabel|SetLabel|sCreateWithURLs)|Label(?:C(?:opyAttribute(?:Name)?|reate)|Delete|GetTypeID|SetAttributes)|Query(?:C(?:opy(?:QueryString|SortingAttributes|Value(?:ListAttributes|sOfAttribute))|reate(?:ForItems|Subset)?)|DisableUpdates|E(?:nableUpdates|xecute)|Get(?:AttributeValueOfResultAtIndex|BatchingParameters|CountOfResultsWithAttributeValue|IndexOfResult|Result(?:AtIndex|Count)|SortOptionFlagsForAttribute|TypeID)|IsGatheringComplete|S(?:et(?:BatchingParameters|Create(?:ResultFunction|ValueFunction)|DispatchQueue|MaxCount|S(?:earchScope|ort(?:Comparator(?:Block)?|O(?:ptionFlagsForAttribute|rder))))|top))|SchemaCopy(?:A(?:llAttributes|ttributesForContentType)|Display(?:DescriptionForAttribute|NameForAttribute)|MetaAttributesForAttribute))|IDI(?:Client(?:Create|Dispose)|De(?:stinationCreate|viceGet(?:Entity|NumberOfEntities))|En(?:dpoint(?:Dispose|GetEntity)|tityGet(?:De(?:stination|vice)|NumberOf(?:Destinations|Sources)|Source))|FlushOutput|Get(?:De(?:stination|vice)|ExternalDevice|NumberOf(?:De(?:stinations|vices)|ExternalDevices|Sources)|Source)|InputPortCreate|O(?:bject(?:FindByUniqueID|Get(?:D(?:ataProperty|ictionaryProperty)|IntegerProperty|Properties|StringProperty)|RemoveProperty|Set(?:D(?:ataProperty|ictionaryProperty)|IntegerProperty|StringProperty))|utputPortCreate)|P(?:acket(?:List(?:Add|Init)|Next)|ort(?:ConnectSource|Dis(?:connectSource|pose)))|Re(?:ceived|start)|S(?:end(?:Sysex)?|ourceCreate))|akeVoiceSpec|usic(?:Device(?:MIDIEvent|S(?:t(?:artNote|opNote)|ysEx))|EventIterator(?:DeleteEvent|GetEventInfo|Has(?:CurrentEvent|NextEvent|PreviousEvent)|NextEvent|PreviousEvent|Se(?:ek|tEvent(?:Info|Time)))|Player(?:Get(?:BeatsForHostTime|HostTimeForBeats|PlayRateScalar|Sequence|Time)|IsPlaying|Preroll|S(?:et(?:PlayRateScalar|Sequence|Time)|t(?:art|op)))|Sequence(?:B(?:arBeatTimeToBeats|eatsToBarBeatTime)|DisposeTrack|File(?:Create(?:Data)?|Load(?:Data)?)|Get(?:AUGraph|BeatsForSeconds|In(?:dTrack|foDictionary)|S(?:MPTEResolution|e(?:condsForBeats|quenceType))|T(?:empoTrack|rack(?:Count|Index)))|NewTrack|Reverse|Set(?:AUGraph|MIDIEndpoint|S(?:MPTEResolution|equenceType)|UserCallback))|Track(?:C(?:lear|opyInsert|ut)|Get(?:Dest(?:MIDIEndpoint|Node)|Property|Sequence)|M(?:erge|oveEvents)|New(?:AUPresetEvent|Extended(?:NoteEvent|TempoEvent)|M(?:IDI(?:ChannelEvent|NoteEvent|RawDataEvent)|etaEvent)|ParameterEvent|UserEvent)|Set(?:Dest(?:MIDIEndpoint|Node)|Property))))|N(?:PickColor|X(?:Convert(?:Host(?:DoubleToSwapped|FloatToSwapped)|Swapped(?:DoubleToHost|FloatToHost))|HostByteOrder|Swap(?:Big(?:DoubleToHost|FloatToHost|IntToHost|Long(?:LongToHost|ToHost)|ShortToHost)|Double|Float|Host(?:DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|IntTo(?:Big|Little)|Long(?:LongTo(?:Big|Little)|To(?:Big|Little))|ShortTo(?:Big|Little))|Int|L(?:ittle(?:DoubleToHost|FloatToHost|IntToHost|Long(?:LongToHost|ToHost)|ShortToHost)|ong(?:Long)?)|Short))|e(?:arestMacTextEncodings|w(?:AE(?:Coerce(?:DescUPP|PtrUPP)|DisposeExternalUPP|EventHandlerUPP|FilterUPP|IdleUPP)|C(?:a(?:librate(?:EventUPP|UPP)|nCalibrateUPP)|ontrol(?:ActionUPP|EditTextValidationUPP|KeyFilterUPP|UserPane(?:ActivateUPP|DrawUPP|FocusUPP|HitTestUPP|IdleUPP|KeyDownUPP|TrackingUPP)))|D(?:ataBrowser(?:A(?:cceptDragUPP|ddDragItemUPP)|DrawItemUPP|EditItemUPP|GetContextualMenuUPP|HitTestUPP|Item(?:AcceptDragUPP|CompareUPP|D(?:ataUPP|ragRgnUPP)|HelpContentUPP|Notification(?:UPP|WithItemUPP)|ReceiveDragUPP|UPP)|PostProcessDragUPP|ReceiveDragUPP|SelectContextualMenuUPP|TrackingUPP)|ragInputUPP)|E(?:ditUnicodePostUpdateUPP|vent(?:ComparatorUPP|HandlerUPP|Loop(?:IdleTimerUPP|TimerUPP)))|HM(?:ControlContentUPP|Menu(?:ItemContentUPP|TitleContentUPP)|WindowContentUPP)|I(?:con(?:ActionUPP|GetterUPP)|ndexToUCStringUPP)|M(?:odalFilter(?:UPP|YDUPP)|usic(?:EventIterator|Player|Sequence))|N(?:ColorChangedUPP|MUPP)|OS(?:A(?:ActiveUPP|CreateAppleEventUPP|SendUPP)|L(?:A(?:ccessorUPP|djustMarksUPP)|Co(?:mpareUPP|untUPP)|DisposeTokenUPP|Get(?:ErrDescUPP|MarkTokenUPP)|MarkUPP))|SpeechChannel|TXN(?:ActionNameMapperUPP|ContextualMenuSetupUPP|FindUPP|ScrollInfoUPP)|U(?:nicodeToTextFallbackUPP|serItemUPP))|xtAudioFileRegion)|um(?:AudioFileMarkersToNumBytes|BytesToNumAudioFileMarkers))|OS(?:A(?:A(?:ddStorageType|vailableDialect(?:CodeList|s))|Co(?:erce(?:FromDesc|ToDesc)|mpile(?:Execute)?|py(?:DisplayString|ID|S(?:cript(?:ingDefinition(?:FromURL)?)?|ourceString)))|D(?:isp(?:lay|ose)|o(?:Event|Script(?:File)?))|Execute(?:Event)?|Ge(?:nericToRealID|t(?:ActiveProc|C(?:reateProc|urrentDialect)|D(?:efaultScriptingComponent|ialectInfo)|Handler(?:Names)?|Property(?:Names)?|ResumeDispatchProc|S(?:cript(?:DataFromURL|Info|ingComponent(?:FromStored)?)|endProc|ource|torageType|ysTerminology)))|Load(?:Execute(?:File)?|File|ScriptData)?|MakeContext|Re(?:alToGenericID|moveStorageType)|S(?:cript(?:Error|ingComponentName)|et(?:ActiveProc|C(?:reateProc|urrentDialect)|Default(?:ScriptingComponent|Target)|Handler|Property|ResumeDispatchProc|S(?:criptInfo|endProc))|t(?:artRecording|o(?:pRecording|re(?:File)?)))|tomic(?:Dequeue|Enqueue|Fifo(?:Dequeue|Enqueue)))|GetNotificationFromMessage)|P(?:M(?:C(?:GImageCreateWithEPSDataProvider|opy(?:AvailablePPDs|LocalizedPPD|P(?:PDData|ageFormat|rintSettings))|reate(?:GenericPrinter|P(?:ageFormat(?:WithPMPaper)?|rintSettings)|Session))|Get(?:AdjustedPa(?:geRect|perRect)|Co(?:llate|pies)|Duplex|FirstPage|LastPage|Orientation|Page(?:Format(?:ExtendedData|Paper)|Range)|Scale|UnadjustedPa(?:geRect|perRect))|P(?:a(?:geFormat(?:Create(?:DataRepresentation|WithDataRepresentation)|GetPrinterID)|per(?:Create(?:Custom|LocalizedName)|Get(?:Height|ID|Margins|P(?:PDPaperName|rinterID)|Width)|IsCustom))|r(?:eset(?:C(?:opyName|reatePrintSettings)|GetAttributes)|int(?:Settings(?:C(?:opy(?:AsDictionary|Keys)|reate(?:DataRepresentation|WithDataRepresentation))|Get(?:JobName|Value)|Set(?:JobName|Value)|ToOptions(?:WithPrinterAndPageFormat)?)|er(?:C(?:opy(?:De(?:scriptionURL|viceURI)|HostName|Presets|State)|reateFromPrinterID)|Get(?:CommInfo|Driver(?:Creator|ReleaseInfo)|I(?:D|ndexedPrinterResolution)|L(?:anguageInfo|ocation)|M(?:akeAndModelName|imeTypes)|Name|OutputResolution|P(?:aperList|rinterResolutionCount)|State)|Is(?:Default|Favorite|PostScript(?:Capable|Printer)|Remote)|PrintWith(?:File|Provider)|Se(?:ndCommand|t(?:Default|OutputResolution))|WritePostScriptToURL))))|Re(?:lease|tain)|Se(?:rver(?:CreatePrinterList|LaunchPrinterBrowser)|ssion(?:Begin(?:CGDocumentNoDialog|PageNoDialog)|C(?:opy(?:Destination(?:Format|Location)|OutputFormatList)|reateP(?:ageFormatList|rinterList))|DefaultP(?:ageFormat|rintSettings)|E(?:nd(?:DocumentNoDialog|PageNoDialog)|rror)|Get(?:C(?:GGraphicsContext|urrentPrinter)|D(?:ataFromSession|estinationType))|Set(?:CurrentPMPrinter|D(?:ataInSession|estination)|Error)|ValidateP(?:ageFormat|rintSettings))|t(?:Co(?:llate|pies)|Duplex|FirstPage|LastPage|Orientation|Page(?:FormatExtendedData|Range)|Scale))|Workflow(?:CopyItems|SubmitPDFWith(?:Options|Settings)))|a(?:steboard(?:C(?:lear|opy(?:ItemFlavor(?:Data|s)|Name|PasteLocation)|reate)|Get(?:Item(?:Count|FlavorFlags|Identifier)|TypeID)|PutItemFlavor|ResolvePromises|S(?:etP(?:asteLocation|romiseKeeper)|ynchronize))|useSpeechAt)|lotIconRefInContext|o(?:pSymbolicHotKeyMode|stEventToQueue)|rocessHICommand|ushSymbolicHotKeyMode)|Q(?:LThumbnailImageCreate|u(?:eryUnicodeMappings|itEventLoop))|R(?:e(?:ceiveNextEvent|gisterEventHotKey|leaseEvent|moveEvent(?:FromQueue|Handler|LoopTimer|Parameter|TypesFromHandler)|s(?:et(?:TextToUnicodeInfo|UnicodeToText(?:Info|RunInfo))|olveDefaultTextEncoding)|tainEvent|vertTextEncodingToScriptInfo)|unCurrentEventLoop)|S(?:32Set|64(?:A(?:dd|nd)|Bitwise(?:And|Eor|Not|Or)|Div(?:ide)?|Eor|M(?:ax|in|od|ultiply)|N(?:egate|ot)|Or|S(?:et(?:U)?|hift(?:Left|Right)|ubtract))|C(?:Bond(?:Interface(?:C(?:opy(?:A(?:ll|vailableMemberInterfaces)|Status)|reate)|Get(?:MemberInterfaces|Options)|Remove|Set(?:LocalizedDisplayName|MemberInterfaces|Options))|StatusGet(?:InterfaceStatus|MemberInterfaces|TypeID))|CopyLastError|DynamicStore(?:Add(?:TemporaryValue|Value)|C(?:opy(?:Co(?:mputerName|nsoleUser)|KeyList|Loca(?:lHostName|tion)|Multiple|NotifiedKeys|Proxies|Value)|reate(?:RunLoopSource|WithOptions)?)|GetTypeID|KeyCreate(?:Co(?:mputerName|nsoleUser)|HostNames|Location|Network(?:GlobalEntity|Interface(?:Entity)?|ServiceEntity)|Proxies)?|NotifyValue|RemoveValue|Set(?:DispatchQueue|Multiple|NotificationKeys|Value))|Error(?:String)?|Network(?:Connection(?:C(?:opy(?:ExtendedStatus|S(?:erviceID|tatistics)|User(?:Options|Preferences))|reateWithServiceID)|Get(?:Status|TypeID)|S(?:cheduleWithRunLoop|etDispatchQueue|t(?:art|op))|UnscheduleFromRunLoop)|Interface(?:C(?:opy(?:All|M(?:TU|edia(?:Options|SubType(?:Options|s))))|reateWithInterface)|ForceConfigurationRefresh|Get(?:BSDName|Configuration|ExtendedConfiguration|HardwareAddressString|Interface(?:Type)?|LocalizedDisplayName|Supported(?:InterfaceTypes|ProtocolTypes)|TypeID)|Set(?:Configuration|ExtendedConfiguration|M(?:TU|ediaOptions)))|Protocol(?:Get(?:Configuration|Enabled|ProtocolType|TypeID)|Set(?:Configuration|Enabled))|Reachability(?:CreateWith(?:Address(?:Pair)?|Name)|Get(?:Flags|TypeID)|S(?:cheduleWithRunLoop|et(?:Callback|DispatchQueue))|UnscheduleFromRunLoop)|Se(?:rvice(?:AddProtocolType|C(?:opy(?:All|Protocol(?:s)?)?|reate)|EstablishDefaultConfiguration|Get(?:Enabled|Interface|Name|ServiceID|TypeID)|Remove(?:ProtocolType)?|Set(?:Enabled|Name))|t(?:AddService|C(?:o(?:ntainsInterface|py(?:All|Current|Services)?)|reate)|Get(?:Name|Se(?:rviceOrder|tID)|TypeID)|Remove(?:Service)?|Set(?:Current|Name|ServiceOrder))))|Preferences(?:A(?:ddValue|pplyChanges)|C(?:o(?:mmitChanges|pyKeyList)|reate(?:WithAuthorization)?)|Get(?:Signature|TypeID|Value)|Lock|Path(?:CreateUniqueChild|Get(?:Link|Value)|RemoveValue|Set(?:Link|Value))|RemoveValue|S(?:cheduleWithRunLoop|et(?:C(?:allback|omputerName)|DispatchQueue|LocalHostName|Value)|ynchronize)|Un(?:lock|scheduleFromRunLoop))|VLANInterface(?:C(?:opyA(?:ll|vailablePhysicalInterfaces)|reate)|Get(?:Options|PhysicalInterface|Tag)|Remove|Set(?:LocalizedDisplayName|Options|PhysicalInterfaceAndTag)))|Int64To(?:LongDouble|UInt64|Wide)|K(?:Document(?:C(?:opyURL|reate(?:WithURL)?)|Get(?:Name|Parent|SchemeName|TypeID))|Index(?:AddDocument(?:WithText)?|C(?:lose|o(?:mpact|py(?:Document(?:ForDocumentID|IDArrayForTermID|Properties|RefsForDocumentIDs|URLsForDocumentIDs)|InfoForDocumentIDs|Term(?:IDArrayForDocumentID|StringForTermID)))|reateWith(?:MutableData|URL))|DocumentIterator(?:C(?:opyNext|reate)|GetTypeID)|Flush|Get(?:AnalysisProperties|Document(?:Count|ID|State|Term(?:Count|Frequency))|IndexType|Maximum(?:BytesBeforeFlush|DocumentID|TermID)|T(?:erm(?:DocumentCount|IDForTermString)|ypeID))|MoveDocument|OpenWith(?:Data|MutableData|URL)|Re(?:moveDocument|nameDocument)|Set(?:DocumentProperties|MaximumBytesBeforeFlush))|LoadDefaultExtractorPlugIns|S(?:earch(?:C(?:ancel|reate)|FindMatches|GetTypeID)|ummary(?:C(?:opy(?:Paragraph(?:AtIndex|SummaryString)|Sentence(?:AtIndex|SummaryString))|reateWithString)|Get(?:Paragraph(?:Count|SummaryInfo)|Sentence(?:Count|SummaryInfo)|TypeID))))|e(?:c(?:A(?:CL(?:C(?:opy(?:Authorizations|Contents)|reateWithSimpleContents)|GetTypeID|Remove|SetContents|UpdateAuthorizations)|ccess(?:C(?:opy(?:ACLList|MatchingACLList|OwnerAndACL)|reate(?:WithOwnerAndACL)?)|GetTypeID)|ddSharedWebCredential)|C(?:ertificate(?:AddToKeychain|C(?:opy(?:CommonName|Data|EmailAddresses|LongDescription|Preferred|S(?:hortDescription|ubjectSummary)|Values)|reateWithData)|GetTypeID|SetPreferred)|o(?:de(?:C(?:heckValidity(?:WithErrors)?|opy(?:DesignatedRequirement|GuestWithAttributes|Host|Path|S(?:elf|igningInformation|taticCode)))|GetTypeID|MapMemory)|pyErrorMessageString)|reateSharedWebCredentialPassword)|D(?:ec(?:odeTransformCreate|ryptTransform(?:Create|GetTypeID))|igestTransform(?:Create|GetTypeID))|Enc(?:odeTransformCreate|ryptTransform(?:Create|GetTypeID))|GroupTransformGetTypeID|I(?:dentity(?:C(?:opy(?:Certificate|Pr(?:eferred|ivateKey)|SystemIdentity)|reateWithCertificate)|GetTypeID|Set(?:Preferred|SystemIdentity))|tem(?:Add|CopyMatching|Delete|Export|Import|Update))|Key(?:CreateFromData|DeriveFromPassword|Ge(?:nerate(?:Pair(?:Async)?|Symmetric)|t(?:BlockSize|TypeID))|UnwrapSymmetric|WrapSymmetric|chain(?:A(?:dd(?:Callback|GenericPassword|InternetPassword)|ttributeInfoForItemID)|C(?:opy(?:D(?:efault|omain(?:Default|SearchList))|Se(?:archList|ttings))|reate)|Delete|F(?:ind(?:GenericPassword|InternetPassword)|reeAttributeInfo)|Get(?:P(?:ath|referenceDomain)|Status|TypeID|UserInteractionAllowed|Version)|Item(?:C(?:opy(?:A(?:ccess|ttributesAndData)|Content|FromPersistentReference|Keychain)|reate(?:Copy|FromContent|PersistentReference))|Delete|Free(?:AttributesAndData|Content)|GetTypeID|Modify(?:AttributesAndData|Content)|SetAccess)|Lock(?:All)?|Open|RemoveCallback|Set(?:D(?:efault|omain(?:Default|SearchList))|PreferenceDomain|Se(?:archList|ttings)|UserInteractionAllowed)|Unlock))|P(?:KCS12Import|olicy(?:C(?:opyProperties|reate(?:BasicX509|SSL))|GetTypeID))|R(?:andomCopyBytes|equ(?:estSharedWebCredential|irement(?:C(?:opy(?:Data|String)|reateWith(?:Data|String(?:AndErrors)?))|GetTypeID)))|S(?:ignTransformCreate|taticCode(?:C(?:heckValidity(?:WithErrors)?|reateWithPath(?:AndAttributes)?)|GetTypeID))|T(?:ask(?:C(?:opy(?:SigningIdentifier|Value(?:ForEntitlement|sForEntitlements))|reate(?:FromSelf|WithAuditToken))|Get(?:CodeSignStatus|TypeID))|r(?:ansform(?:C(?:o(?:nnectTransforms|pyExternalRepresentation)|reate(?:FromExternalRepresentation|GroupTransform|ReadTransformWithReadStream)?|ustom(?:GetAttribute|SetAttribute))|Execute(?:Async)?|FindByName|Get(?:Attribute|TypeID)|NoData|PushbackAttribute|Register|Set(?:Attribute(?:Action)?|DataAction|TransformAction))|ust(?:C(?:opy(?:AnchorCertificates|CustomAnchorCertificates|P(?:olicies|roperties|ublicKey))|reateWithCertificates)|Get(?:Certificate(?:AtIndex|Count)|T(?:rustResult|ypeID)|VerifyTime)|Set(?:AnchorCertificates(?:Only)?|Options|Policies|VerifyDate|tings(?:C(?:opy(?:Certificates|ModificationDate|TrustSettings)|reateExternalRepresentation)|ImportExternalRepresentation|RemoveTrustSettings|SetTrustSettings))|edApplicationGetTypeID)))|VerifyTransformCreate)|ndEventToEventTarget(?:WithOptions)?|ssion(?:Create|GetInfo)|t(?:AudioUnitParameterDisplayType|Event(?:LoopTimerNextFireTime|Parameter|Time)|F(?:allbackUnicodeToText(?:Run)?|ontInfoForSelection)|IconFamilyData|S(?:peech(?:P(?:itch|roperty)|Rate)|ystemUIMode)))|pe(?:akCFString|ech(?:Busy(?:SystemWide)?|ManagerVersion|Synthesis(?:RegisterModuleURL|UnregisterModuleURL)))|topSpeech(?:At)?)|T(?:EC(?:C(?:lear(?:ConverterContextInfo|SnifferContextInfo)|o(?:nvertText(?:ToMultipleEncodings)?|pyTextEncodingInternetNameAndMIB|unt(?:Available(?:Sniffers|TextEncodings)|D(?:estinationTextEncodings|irectTextEncodingConversions)|MailTextEncodings|SubTextEncodings|WebTextEncodings))|reate(?:Converter(?:FromPath)?|OneToManyConverter|Sniffer))|Dispose(?:Converter|Sniffer)|Flush(?:MultipleEncodings|Text)|Get(?:Available(?:Sniffers|TextEncodings)|D(?:estinationTextEncodings|irectTextEncodingConversions)|EncodingList|Info|MailTextEncodings|SubTextEncodings|TextEncoding(?:FromInternetName(?:OrMIB)?|InternetName)|WebTextEncodings)|S(?:etBasicOptions|niffTextEncoding))|IS(?:C(?:opy(?:Current(?:ASCIICapableKeyboard(?:InputSource|LayoutInputSource)|Keyboard(?:InputSource|LayoutInputSource))|Input(?:MethodKeyboardLayoutOverride|SourceForLanguage))|reate(?:ASCIICapableInputSourceList|InputSourceList))|D(?:eselectInputSource|isableInputSource)|EnableInputSource|GetInputSourceProperty|InputSourceGetTypeID|RegisterInputSource|Se(?:lectInputSource|tInputMethodKeyboardLayoutOverride))|SM(?:Get(?:ActiveDocument|DocumentProperty)|RemoveDocumentProperty|SetDocumentProperty)|r(?:ans(?:formProcessType|lation(?:C(?:opy(?:DestinationType|SourceType)|reate(?:WithSourceArray)?)|GetT(?:ranslationFlags|ypeID)|PerformFor(?:Data|File|URL)))|uncateFor(?:TextToUnicode|UnicodeToText)))|U(?:32SetU|64(?:A(?:dd|nd)|Bitwise(?:And|Eor|Not|Or)|Div(?:ide)?|Eor|M(?:ax|od|ultiply)|Not|Or|S(?:et(?:U)?|hift(?:Left|Right)|ubtract))|AZoom(?:ChangeFocus|Enabled)|C(?:C(?:o(?:mpare(?:CollationKeys|Text(?:Default|NoLocale)?)|nvert(?:CFAbsoluteTimeTo(?:LongDateTime|Seconds|UTCDateTime)|LongDateTimeToCFAbsoluteTime|SecondsToCFAbsoluteTime|UTCDateTimeToCFAbsoluteTime))|reateCollator)|DisposeCollator|Get(?:C(?:harProperty|ollationKey)|UnicodeScalarValueForSurrogatePair)|IsSurrogate(?:HighCharacter|LowCharacter)|KeyTranslate|TypeSelect(?:AddKeyToSelector|C(?:ompare|reateSelector)|F(?:indItem|lushSelectorData)|ReleaseSelector|W(?:alkList|ouldResetBuffer)))|Int64To(?:LongDouble|SInt64|UnsignedWide)|T(?:CreateStringForOSType|GetOSTypeFromString|Type(?:C(?:o(?:nformsTo|py(?:De(?:clar(?:ation|ingBundleURL)|scription)|PreferredTagWithClass))|reate(?:AllIdentifiersForTag|PreferredIdentifierForTag))|Equal))|n(?:registerEventHotKey|signedWideToUInt64)|pgradeScriptInfoToTextEncoding|seSpeechDictionary)|WideToSInt64|a(?:c(?:cept|l_(?:add_(?:flag_np|perm)|c(?:alc_mask|lear_(?:flags_np|perms)|opy_(?:e(?:ntry|xt(?:_native)?)|int(?:_native)?)|reate_entry(?:_np)?)|d(?:elete_(?:def_file|entry|flag_np|perm)|up)|fr(?:ee|om_text)|get_(?:entry|f(?:d(?:_np)?|ile|lag(?:_np|set_np))|link_np|perm(?:_np|set(?:_mask_np)?)|qualifier|tag_type)|init|maximal_permset_mask_np|s(?:et_(?:f(?:d(?:_np)?|ile|lagset_np)|link_np|permset(?:_mask_np)?|qualifier|tag_type)|ize)|to_text|valid(?:_(?:f(?:d_np|ile_np)|link_np))?)|t_(?:get_state|set_state))|udit(?:_session_(?:join|port|self)|ctl|on)?)|bind|c(?:a(?:bs(?:f|l)?|cos(?:f|h(?:f|l)?|l)?|lloc|rg(?:f|l)?|sin(?:f|h(?:f|l)?|l)?|tan(?:f|h(?:f|l)?|l)?)|cos(?:f|h(?:f|l)?|l)?|exp(?:f|l)?|imag(?:f|l)?|lo(?:ck_(?:get_res|s(?:et_(?:attributes|res|time)|leep(?:_trap)?))|g(?:f|l)?)|on(?:j(?:f|l)?|nect)|p(?:ow(?:f|l)?|roj(?:f|l)?)|real(?:f|l)?|s(?:in(?:f|h(?:f|l)?|l)?|qrt(?:f|l)?|sm(?:AlgToOid|OidToAlg|Perror))|t(?:an(?:f|h(?:f|l)?|l)?|ermid))|d(?:e(?:bug_control_port_for_pid|c2numl)|igittoint)|etap_trace_thread|f(?:e(?:clearexcept|get(?:e(?:nv|xceptflag)|round)|holdexcept|raiseexcept|set(?:e(?:nv|xceptflag)|round)|testexcept|updateenv)|ree)|g(?:et(?:au(?:dit_addr|id)|peername|sock(?:name|opt))|l(?:A(?:c(?:cum|tive(?:StencilFaceEXT|Texture(?:ARB)?))|lphaFunc|r(?:eTexturesResident|rayElement)|ttach(?:ObjectARB|Shader))|B(?:egin(?:ConditionalRenderNV|Query(?:ARB)?|TransformFeedbackEXT)?|i(?:nd(?:AttribLocation(?:ARB)?|Buffer(?:ARB|BaseEXT|OffsetEXT|RangeEXT)?|Fra(?:gDataLocationEXT|mebuffer(?:EXT)?)|ProgramARB|Renderbuffer(?:EXT)?|Texture|VertexArrayAPPLE)|tmap)|l(?:end(?:Color(?:EXT)?|Equation(?:EXT|Separate(?:ATI|EXT)?)?|Func(?:Separate(?:EXT)?)?)|itFramebuffer(?:EXT)?)|uffer(?:Data(?:ARB)?|ParameteriAPPLE|SubData(?:ARB)?))|C(?:allList(?:s)?|heckFramebufferStatus(?:EXT)?|l(?:ampColorARB|ear(?:Accum|Color(?:I(?:iEXT|uiEXT))?|Depth|Index|Stencil)?|i(?:ent(?:ActiveTexture(?:ARB)?|WaitSync)|pPlane))|o(?:lor(?:3(?:b(?:v)?|d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?|u(?:b(?:v)?|i(?:v)?|s(?:v)?))|4(?:b(?:v)?|d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?|u(?:b(?:v)?|i(?:v)?|s(?:v)?))|Ma(?:sk(?:IndexedEXT)?|terial)|Pointer|SubTable|Table(?:Parameter(?:fv|iv))?)|mp(?:ileShader(?:ARB)?|ressedTex(?:Image(?:1D(?:ARB)?|2D(?:ARB)?|3D(?:ARB)?)|SubImage(?:1D(?:ARB)?|2D(?:ARB)?|3D(?:ARB)?)))|nvolution(?:Filter(?:1D|2D)|Parameter(?:f(?:v)?|i(?:v)?))|py(?:Co(?:lor(?:SubTable|Table)|nvolutionFilter(?:1D|2D))|Pixels|Tex(?:Image(?:1D|2D)|SubImage(?:1D|2D|3D))))|reate(?:Program(?:ObjectARB)?|Shader(?:ObjectARB)?)|ullFace)|D(?:e(?:lete(?:Buffers(?:ARB)?|F(?:encesAPPLE|ramebuffers(?:EXT)?)|Lists|ObjectARB|Program(?:sARB)?|Queries(?:ARB)?|Renderbuffers(?:EXT)?|S(?:hader|ync)|Textures|VertexArraysAPPLE)|pth(?:BoundsEXT|Func|Mask|Range)|tach(?:ObjectARB|Shader))|isable(?:ClientState|IndexedEXT|VertexAttribA(?:PPLE|rray(?:ARB)?))?|raw(?:Arrays(?:InstancedARB)?|Buffer(?:s(?:ARB)?)?|Element(?:ArrayAPPLE|s(?:BaseVertex|Instanced(?:ARB|BaseVertex))?)|Pixels|RangeElement(?:ArrayAPPLE|s(?:BaseVertex|EXT)?)))|E(?:dgeFlag(?:Pointer|v)?|lementPointerAPPLE|n(?:able(?:ClientState|IndexedEXT|VertexAttribA(?:PPLE|rray(?:ARB)?))?|d(?:ConditionalRenderNV|List|Query(?:ARB)?|TransformFeedbackEXT)?)|val(?:Coord(?:1(?:d(?:v)?|f(?:v)?)|2(?:d(?:v)?|f(?:v)?))|Mesh(?:1|2)|Point(?:1|2)))|F(?:e(?:edbackBuffer|nceSync)|inish(?:FenceAPPLE|ObjectAPPLE|RenderAPPLE)?|lush(?:MappedBufferRangeAPPLE|RenderAPPLE|VertexArrayRangeAPPLE)?|og(?:Coord(?:Pointer(?:EXT)?|d(?:EXT|v(?:EXT)?)?|f(?:EXT|v(?:EXT)?)?)|f(?:v)?|i(?:v)?)|r(?:amebuffer(?:Renderbuffer(?:EXT)?|Texture(?:1D(?:EXT)?|2D(?:EXT)?|3D(?:EXT)?|EXT|FaceEXT|Layer(?:EXT)?))|ontFace|ustum))|Ge(?:n(?:Buffers(?:ARB)?|F(?:encesAPPLE|ramebuffers(?:EXT)?)|Lists|ProgramsARB|Queries(?:ARB)?|Renderbuffers(?:EXT)?|Textures|VertexArraysAPPLE|erateMipmap(?:EXT)?)|t(?:A(?:ctive(?:Attrib(?:ARB)?|Uniform(?:ARB)?)|tt(?:ached(?:ObjectsARB|Shaders)|ribLocation(?:ARB)?))|B(?:oolean(?:IndexedvEXT|v)|uffer(?:P(?:arameteriv(?:ARB)?|ointerv(?:ARB)?)|SubData(?:ARB)?))|C(?:lipPlane|o(?:lorTable(?:Parameter(?:fv|iv))?|mpressedTexImage(?:ARB)?|nvolution(?:Filter|Parameter(?:fv|iv))))|Doublev|Error|F(?:loatv|ra(?:gDataLocationEXT|mebufferAttachmentParameteriv(?:EXT)?))|H(?:andleARB|istogram(?:Parameter(?:fv|iv))?)|In(?:foLogARB|teger(?:64v|IndexedvEXT|v))|Light(?:fv|iv)|M(?:a(?:p(?:dv|fv|iv)|terial(?:fv|iv))|inmax(?:Parameter(?:fv|iv))?)|Object(?:LabelEXT|Parameter(?:fvARB|ivA(?:PPLE|RB)))|P(?:ixelMap(?:fv|u(?:iv|sv))|o(?:interv|lygonStipple)|rogram(?:EnvParameter(?:dvARB|fvARB)|InfoLog|LocalParameter(?:dvARB|fvARB)|StringARB|iv(?:ARB)?))|Query(?:Object(?:i(?:64vEXT|v(?:ARB)?)|ui(?:64vEXT|v(?:ARB)?))|iv(?:ARB)?)|RenderbufferParameteriv(?:EXT)?|S(?:eparableFilter|hader(?:InfoLog|Source(?:ARB)?|iv)|tring|ynciv)|T(?:ex(?:Env(?:fv|iv)|Gen(?:dv|fv|iv)|Image|LevelParameter(?:fv|iv)|Parameter(?:I(?:ivEXT|uivEXT)|PointervAPPLE|fv|iv))|ransformFeedbackVaryingEXT)|Uniform(?:BufferSizeEXT|Location(?:ARB)?|OffsetEXT|fv(?:ARB)?|iv(?:ARB)?|uivEXT)|VertexAttrib(?:I(?:ivEXT|uivEXT)|Pointerv(?:ARB)?|dv(?:ARB)?|fv(?:ARB)?|iv(?:ARB)?)))|Hi(?:nt|stogram)|I(?:n(?:dex(?:Mask|Pointer|d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?|ub(?:v)?)|itNames|sertEventMarkerEXT|terleavedArrays)|s(?:Buffer(?:ARB)?|Enabled(?:IndexedEXT)?|F(?:enceAPPLE|ramebuffer(?:EXT)?)|List|Program(?:ARB)?|Query(?:ARB)?|Renderbuffer(?:EXT)?|S(?:hader|ync)|Texture|VertexA(?:rrayAPPLE|ttribEnabledAPPLE)))|L(?:abelObjectEXT|i(?:ght(?:Model(?:f(?:v)?|i(?:v)?)|f(?:v)?|i(?:v)?)|n(?:e(?:Stipple|Width)|kProgram(?:ARB)?)|stBase)|o(?:ad(?:Identity|Matrix(?:d|f)|Name|TransposeMatrix(?:d(?:ARB)?|f(?:ARB)?))|gicOp))|M(?:a(?:p(?:1(?:d|f)|2(?:d|f)|Buffer(?:ARB)?|Grid(?:1(?:d|f)|2(?:d|f))|VertexAttrib(?:1(?:dAPPLE|fAPPLE)|2(?:dAPPLE|fAPPLE)))|t(?:erial(?:f(?:v)?|i(?:v)?)|rixMode))|inmax|ult(?:Matrix(?:d|f)|TransposeMatrix(?:d(?:ARB)?|f(?:ARB)?)|i(?:Draw(?:Arrays(?:EXT)?|Element(?:ArrayAPPLE|s(?:BaseVertex|EXT)?)|RangeElementArrayAPPLE)|TexCoord(?:1(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)|2(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)|3(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)|4(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)))))|N(?:ewList|ormal(?:3(?:b(?:v)?|d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|Pointer))|O(?:bject(?:PurgeableAPPLE|UnpurgeableAPPLE)|rtho)|P(?:assThrough|ixel(?:Map(?:fv|u(?:iv|sv))|Store(?:f|i)|Transfer(?:f|i)|Zoom)|o(?:int(?:Parameter(?:f(?:ARB|v(?:ARB)?)?|i(?:NV|v(?:NV)?)?)|Size(?:PointerAPPLE)?)|lygon(?:Mode|Offset|Stipple)|p(?:Attrib|ClientAttrib|GroupMarkerEXT|Matrix|Name))|r(?:ioritizeTextures|o(?:gram(?:EnvParameter(?:4(?:d(?:ARB|vARB)|f(?:ARB|vARB))|s4fvEXT)|LocalParameter(?:4(?:d(?:ARB|vARB)|f(?:ARB|vARB))|s4fvEXT)|ParameteriEXT|StringARB)|vokingVertex(?:EXT)?))|ush(?:Attrib|ClientAttrib|GroupMarkerEXT|Matrix|Name))|R(?:asterPos(?:2(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|3(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|4(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?))|e(?:ad(?:Buffer|Pixels)|ct(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|nder(?:Mode|bufferStorage(?:EXT|Multisample(?:EXT)?)?)|set(?:Histogram|Minmax))|otate(?:d|f))|S(?:ampleCoverage(?:ARB)?|c(?:ale(?:d|f)|issor)|e(?:condaryColor(?:3(?:b(?:EXT|v(?:EXT)?)?|d(?:EXT|v(?:EXT)?)?|f(?:EXT|v(?:EXT)?)?|i(?:EXT|v(?:EXT)?)?|s(?:EXT|v(?:EXT)?)?|u(?:b(?:EXT|v(?:EXT)?)?|i(?:EXT|v(?:EXT)?)?|s(?:EXT|v(?:EXT)?)?))|Pointer(?:EXT)?)|lectBuffer|parableFilter2D|tFenceAPPLE)|hade(?:Model|rSource(?:ARB)?)|tencil(?:Func(?:Separate(?:ATI)?)?|Mask(?:Separate)?|Op(?:Separate(?:ATI)?)?)|wapAPPLE)|T(?:e(?:st(?:FenceAPPLE|ObjectAPPLE)|x(?:Coord(?:1(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|2(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|3(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|4(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|Pointer)|Env(?:f(?:v)?|i(?:v)?)|Gen(?:d(?:v)?|f(?:v)?|i(?:v)?)|Image(?:1D|2D|3D)|Parameter(?:I(?:ivEXT|uivEXT)|f(?:v)?|i(?:v)?)|SubImage(?:1D|2D|3D)|ture(?:BarrierNV|RangeAPPLE)))|rans(?:formFeedbackVaryingsEXT|late(?:d|f)))|U(?:n(?:iform(?:1(?:f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|ui(?:EXT|vEXT))|2(?:f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|ui(?:EXT|vEXT))|3(?:f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|ui(?:EXT|vEXT))|4(?:f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|ui(?:EXT|vEXT))|BufferEXT|Matrix(?:2(?:fv(?:ARB)?|x(?:3fv|4fv))|3(?:fv(?:ARB)?|x(?:2fv|4fv))|4(?:fv(?:ARB)?|x(?:2fv|3fv))))|mapBuffer(?:ARB)?)|seProgram(?:ObjectARB)?)|V(?:alidateProgram(?:ARB)?|ertex(?:2(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|3(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|4(?:d(?:v)?|f(?:v)?|i(?:v)?|s(?:v)?)|A(?:rray(?:ParameteriAPPLE|RangeAPPLE)|ttrib(?:1(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)|2(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)|3(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)|4(?:N(?:bv(?:ARB)?|iv(?:ARB)?|sv(?:ARB)?|u(?:b(?:ARB|v(?:ARB)?)?|iv(?:ARB)?|sv(?:ARB)?))|bv(?:ARB)?|d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|iv(?:ARB)?|s(?:ARB|v(?:ARB)?)?|u(?:bv(?:ARB)?|iv(?:ARB)?|sv(?:ARB)?))|DivisorARB|I(?:1(?:i(?:EXT|vEXT)|ui(?:EXT|vEXT))|2(?:i(?:EXT|vEXT)|ui(?:EXT|vEXT))|3(?:i(?:EXT|vEXT)|ui(?:EXT|vEXT))|4(?:bvEXT|i(?:EXT|vEXT)|svEXT|u(?:bvEXT|i(?:EXT|vEXT)|svEXT))|PointerEXT)|Pointer(?:ARB)?))|BlendARB|Point(?:SizefAPPLE|er))|iewport)|W(?:aitSync|eight(?:PointerARB|bvARB|dvARB|fvARB|ivARB|svARB|u(?:bvARB|ivARB|svARB))|indowPos(?:2(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)|3(?:d(?:ARB|v(?:ARB)?)?|f(?:ARB|v(?:ARB)?)?|i(?:ARB|v(?:ARB)?)?|s(?:ARB|v(?:ARB)?)?)))))|host_(?:c(?:heck_multiuser_mode|reate_mach_voucher(?:_trap)?)|default_memory_manager|get_(?:UNDServer|atm_diagnostic_flag|boot_info|clock_(?:control|service)|exception_ports|io_master|multiuser_config_flags|special_port)|info|kernel_version|lockgroup_info|p(?:age_size|r(?:iv_statistics|ocessor(?:_(?:info|set(?:_priv|s))|s)))|re(?:boot|gister_(?:mach_voucher_attr_manager|well_known_mach_voucher_attr_manager)|quest_notification)|s(?:e(?:curity_(?:create_task_token|set_task_token)|t_(?:UNDServer|atm_diagnostic_flag|exception_ports|multiuser_config_flags|special_port))|tatistics(?:64)?|wap_exception_ports)|virtual_physical_table_info)|i(?:max(?:abs|div)|s(?:a(?:l(?:num|pha)|scii)|blank|cntrl|digit|graph|hexnumber|ideogram|lower|number|p(?:honogram|rint|unct)|rune|sp(?:ace|ecial)|upper|xdigit))|k(?:ext_request|mod_(?:c(?:ontrol|reate)|destroy|get_info))|l(?:dtox80|isten|ock_(?:acquire|handoff(?:_accept)?|make_stable|release|set_(?:create|destroy)|try))|m(?:a(?:c(?:h_(?:error(?:_(?:string|type))?|generate_activity_id|host_self|m(?:ake_memory_entry(?:_64)?|emory_(?:info|object_memory_entry(?:_64)?)|sg(?:_(?:destroy|overwrite|receive|se(?:nd|rver(?:_(?:importance|once))?)))?)|port(?:_(?:allocate(?:_(?:full|name|qos))?|construct|d(?:e(?:allocate|str(?:oy|uct))|nrequest_info)|extract_(?:member|right)|g(?:et_(?:attributes|context|refs|s(?:et_status|rights))|uard(?:_with_flags)?)|insert_(?:member|right)|k(?:ernel_object|object(?:_description)?)|mo(?:d_refs|ve_member)|names|peek|re(?:name|quest_notification)|s(?:et_(?:attributes|context|mscount|seqno)|pace_(?:basic_info|info)|wap_guard)|type|unguard)|s_(?:lookup|register))|thread_self|v(?:m_(?:region_info(?:_64)?|wire)|oucher_(?:deallocate|extract_attr_recipe_trap))|zone_info(?:_for_zone)?)|x_(?:backing_store_(?:recovery|suspend)|swapo(?:ff|n)|triggers))|dvise|lloc|trix_(?:multiply|scale))|i(?:g_(?:allocate|dealloc(?:_reply_port|ate)|get_reply_port|put_reply_port|reply_setup|strncpy(?:_zerofill)?)|n(?:core|herit))|lock(?:all)?|map|protect|sync|un(?:lock(?:all)?|map))|num2decl|p(?:anic(?:_init)?|fctlinput|id_for_task|osix_m(?:advise|emalign)|rocessor_(?:assign|control|exit|get_assignment|info|s(?:et_(?:create|de(?:fault|stroy)|info|max_priority|policy_(?:control|disable|enable)|sta(?:ck_usage|tistics)|t(?:asks|hreads))|tart)))|re(?:alloc|cv(?:from|msg)?|lationl)|s(?:afe_gets|e(?:c_re(?:lease|tain)|maphore_(?:create|destroy|signal(?:_(?:all|thread))?|timedwait(?:_signal)?|wait(?:_signal)?)|nd(?:file|msg|to)?|t(?:au(?:dit_addr|id)|sockopt))|h(?:m_(?:open|unlink)|utdown)|imd_(?:a(?:bs|ct|dd|l(?:l|most_equal_elements(?:_relative)?)|n(?:gle|y)|xis)|b(?:ezier|itselect)|c(?:har(?:_sat)?|lamp|onjugate|ross)|d(?:eterminant|i(?:agonal_matrix|stance(?:_squared)?)|o(?:t|uble))|equal|f(?:ast_(?:distance|length|normalize|project|r(?:ecip|sqrt))|loat|ract)|i(?:mag|n(?:circle|sphere|t(?:_sat)?|verse))|l(?:ength(?:_squared)?|inear_combination|ong(?:_sat)?)|m(?:a(?:ke_(?:char(?:16(?:_undef)?|2(?:_undef)?|3(?:2(?:_undef)?|_undef)?|4(?:_undef)?|64(?:_undef)?|8(?:_undef)?)|double(?:2(?:_undef)?|3(?:_undef)?|4(?:_undef)?|8(?:_undef)?)|float(?:16(?:_undef)?|2(?:_undef)?|3(?:_undef)?|4(?:_undef)?|8(?:_undef)?)|int(?:16(?:_undef)?|2(?:_undef)?|3(?:_undef)?|4(?:_undef)?|8(?:_undef)?)|long(?:2(?:_undef)?|3(?:_undef)?|4(?:_undef)?|8(?:_undef)?)|short(?:16(?:_undef)?|2(?:_undef)?|3(?:2(?:_undef)?|_undef)?|4(?:_undef)?|8(?:_undef)?)|u(?:char(?:16(?:_undef)?|2(?:_undef)?|3(?:2(?:_undef)?|_undef)?|4(?:_undef)?|64(?:_undef)?|8(?:_undef)?)|int(?:16(?:_undef)?|2(?:_undef)?|3(?:_undef)?|4(?:_undef)?|8(?:_undef)?)|long(?:2(?:_undef)?|3(?:_undef)?|4(?:_undef)?|8(?:_undef)?)|short(?:16(?:_undef)?|2(?:_undef)?|3(?:2(?:_undef)?|_undef)?|4(?:_undef)?|8(?:_undef)?)))|trix(?:3x3|4x4|_from_rows)?|x)|i(?:n|x)|ul)|n(?:egate|orm(?:_(?:inf|one)|alize))|orient|pr(?:ecise_(?:distance|length|normalize|project|r(?:ecip|sqrt))|oject)|quaternion|r(?:e(?:al|cip|duce_(?:add|m(?:ax|in))|f(?:lect|ract))|sqrt)|s(?:elect|hort(?:_sat)?|ign|lerp(?:_longest)?|moothstep|pline|tep|ub)|transpose|u(?:char(?:_sat)?|int(?:_sat)?|long(?:_sat)?|short(?:_sat)?))|lot_name|ock(?:atmark|et(?:pair)?)|trto(?:imax|umax)|wtch(?:_pri)?)|t(?:ask_(?:assign(?:_default)?|create(?:_suid_cred)?|for_pid|ge(?:nerate_corpse|t_(?:assignment|dyld_image_infos|e(?:mulation_vector|xc(?:_guard_behavior|eption_ports))|mach_voucher|s(?:pecial_port|tate)))|in(?:fo|spect)|map_corpse_info(?:_64)?|name_for_pid|p(?:olicy(?:_(?:get|set))?|urgable_info)|re(?:gister_dyld_(?:get_process_state|image_infos|s(?:et_dyld_state|hared_cache_image_info))|sume(?:2)?)|s(?:ample|e(?:lf_trap|t_(?:e(?:mulation(?:_vector)?|xc(?:_guard_behavior|eption_ports))|info|mach_voucher|p(?:hys_footprint_limit|o(?:licy|rt_space))|ras_pc|s(?:pecial_port|tate)))|uspend(?:2)?|wap_(?:exception_ports|mach_voucher))|t(?:erminate|hreads)|unregister_dyld_image_infos|wire|zone_info)|hread_(?:a(?:bort(?:_safely)?|ssign(?:_default)?)|create(?:_running)?|depress_abort|get_(?:assignment|exception_ports|mach_voucher|s(?:pecial_port|tate))|info|policy(?:_(?:get|set))?|resume|s(?:ample|et_(?:exception_ports|mach_voucher|policy|s(?:pecial_port|tate))|uspend|w(?:ap_(?:exception_ports|mach_voucher)|itch))|terminate|wire)|o(?:ascii|lower|upper))|uuid_(?:c(?:lear|o(?:mpare|py))|generate(?:_(?:early_random|random|time))?|is_null|parse|unparse(?:_(?:lower|upper))?)|v(?:AEBuild(?:AppleEvent|Desc|Parameters)|alloc|ector(?:16|2|3(?:2)?|4|8)|m_(?:allocate(?:_cpm)?|behavior_set|copy|deallocate|inherit|m(?:a(?:chine_attribute|p(?:_(?:64|exec_lockdown|page_query)|ped_pages_info)?)|sync)|p(?:rotect|urgable_control)|re(?:ad(?:_(?:list|overwrite))?|gion(?:_(?:64|recurse(?:_64)?))?|map)|w(?:ire|rite))|oucher_mach_msg_(?:adopt|clear|revert|set))|wcsto(?:imax|umax)|x(?:80told|pc_(?:array_(?:app(?:end_value|ly)|create(?:_connection)?|dup_fd|get_(?:bool|count|d(?:at(?:a|e)|ouble)|int64|string|u(?:int64|uid)|value)|set_(?:bool|connection|d(?:at(?:a|e)|ouble)|fd|int64|string|u(?:int64|uid)|value))|bool_(?:create|get_value)|co(?:nnection_(?:c(?:ancel|reate(?:_(?:from_endpoint|mach_service))?)|get_(?:asid|context|e(?:gid|uid)|name|pid)|resume|s(?:e(?:nd_(?:barrier|message(?:_with_reply(?:_sync)?)?)|t_(?:context|event_handler|finalizer_f|target_queue))|uspend))|py(?:_description)?)|d(?:at(?:a_(?:create(?:_with_dispatch_data)?|get_(?:bytes(?:_ptr)?|length))|e_(?:create(?:_from_current)?|get_value))|ebugger_api_misuse_info|ictionary_(?:apply|create(?:_(?:connection|reply))?|dup_fd|get_(?:bool|count|d(?:at(?:a|e)|ouble)|int64|remote_connection|string|u(?:int64|uid)|value)|set_(?:bool|connection|d(?:at(?:a|e)|ouble)|fd|int64|string|u(?:int64|uid)|value))|ouble_(?:create|get_value))|e(?:ndpoint_create|qual)|fd_(?:create|dup)|get_type|hash|int64_(?:create|get_value)|main|null_create|re(?:lease|tain)|s(?:et_event_stream_handler|hmem_(?:create|map)|tring_(?:create(?:_with_format(?:_and_arguments)?)?|get_(?:length|string_ptr)))|transaction_(?:begin|end)|u(?:int64_(?:create|get_value)|uid_(?:create|get_bytes)))))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.cf.10.12.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCFDateFormatterCreateISO8601Formatter\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.cf.10.8.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCFFileSecurityClearProperties\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.cf.10.9.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCF(?:Autorelease|R(?:eadStream(?:CopyDispatchQueue|SetDispatchQueue)|unLoopTimer(?:GetTolerance|SetTolerance))|URLIsFileReferenceURL|WriteStream(?:CopyDispatchQueue|SetDispatchQueue))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.cf.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCF(?:A(?:bsoluteTimeGetCurrent|llocator(?:Allocate|Create|Deallocate|Get(?:Context|Default|PreferredSizeForSize|TypeID)|Reallocate|SetDefault)|rray(?:App(?:end(?:Array|Value)|lyFunction)|BSearchValues|C(?:ontainsValue|reate(?:Copy|Mutable(?:Copy)?)?)|ExchangeValuesAtIndices|Get(?:Count(?:OfValue)?|FirstIndexOfValue|LastIndexOfValue|TypeID|Value(?:AtIndex|s))|InsertValueAtIndex|Re(?:move(?:AllValues|ValueAtIndex)|placeValues)|S(?:etValueAtIndex|ortValues))|ttributedString(?:BeginEditing|Create(?:Copy|Mutable(?:Copy)?|WithSubstring)?|EndEditing|Get(?:Attribute(?:AndLongestEffectiveRange|s(?:AndLongestEffectiveRange)?)?|Length|MutableString|String|TypeID)|Re(?:moveAttribute|place(?:AttributedString|String))|SetAttribute(?:s)?))|B(?:ag(?:A(?:ddValue|pplyFunction)|C(?:ontainsValue|reate(?:Copy|Mutable(?:Copy)?)?)|Get(?:Count(?:OfValue)?|TypeID|Value(?:IfPresent|s)?)|Re(?:move(?:AllValues|Value)|placeValue)|SetValue)|i(?:naryHeap(?:A(?:ddValue|pplyFunction)|C(?:ontainsValue|reate(?:Copy)?)|Get(?:Count(?:OfValue)?|Minimum(?:IfPresent)?|TypeID|Values)|Remove(?:AllValues|MinimumValue))|tVector(?:C(?:ontainsBit|reate(?:Copy|Mutable(?:Copy)?)?)|FlipBit(?:AtIndex|s)|Get(?:Bit(?:AtIndex|s)|Count(?:OfBit)?|FirstIndexOfBit|LastIndexOfBit|TypeID)|Set(?:AllBits|Bit(?:AtIndex|s)|Count)))|ooleanGet(?:TypeID|Value)|undle(?:C(?:opy(?:AuxiliaryExecutableURL|Bu(?:iltInPlugInsURL|ndle(?:Localizations|URL))|Executable(?:Architectures(?:ForURL)?|URL)|InfoDictionary(?:ForURL|InDirectory)|Localiz(?:ationsFor(?:Preferences|URL)|edString)|Pr(?:eferredLocalizationsFromArray|ivateFrameworksURL)|Resource(?:URL(?:ForLocalization|InDirectory|sOfType(?:ForLocalization|InDirectory)?)?|sDirectoryURL)|S(?:hared(?:FrameworksURL|SupportURL)|upportFilesDirectoryURL))|reate(?:BundlesFromDirectory)?)|Get(?:AllBundles|BundleWithIdentifier|D(?:ataPointer(?:ForName|sForNames)|evelopmentRegion)|FunctionPointer(?:ForName|sForNames)|I(?:dentifier|nfoDictionary)|LocalInfoDictionary|MainBundle|P(?:ackageInfo(?:InDirectory)?|lugIn)|TypeID|V(?:alueForInfoDictionaryKey|ersionNumber))|IsExecutableLoaded|LoadExecutable(?:AndReturnError)?|PreflightExecutable|UnloadExecutable)|yteOrderGetCurrent)|C(?:alendar(?:AddComponents|C(?:o(?:mposeAbsoluteTime|py(?:Current|Locale|TimeZone))|reateWithIdentifier)|DecomposeAbsoluteTime|Get(?:ComponentDifference|FirstWeekday|Identifier|M(?:aximumRangeOfUnit|inimum(?:DaysInFirstWeek|RangeOfUnit))|OrdinalityOfUnit|RangeOfUnit|T(?:imeRangeOfUnit|ypeID))|Set(?:FirstWeekday|Locale|MinimumDaysInFirstWeek|TimeZone))|haracterSet(?:AddCharactersIn(?:Range|String)|Create(?:BitmapRepresentation|Copy|InvertedSet|Mutable(?:Copy)?|With(?:BitmapRepresentation|CharactersIn(?:Range|String)))|Get(?:Predefined|TypeID)|HasMemberInPlane|I(?:n(?:tersect|vert)|s(?:CharacterMember|LongCharacterMember|SupersetOfSet))|RemoveCharactersIn(?:Range|String)|Union)|o(?:nvert(?:Double(?:HostToSwapped|SwappedToHost)|Float(?:32(?:HostToSwapped|SwappedToHost)|64(?:HostToSwapped|SwappedToHost)|HostToSwapped|SwappedToHost))|py(?:Description|HomeDirectoryURL|TypeIDDescription)))|D(?:at(?:a(?:AppendBytes|Create(?:Copy|Mutable(?:Copy)?|WithBytesNoCopy)?|DeleteBytes|Find|Get(?:Byte(?:Ptr|s)|Length|MutableBytePtr|TypeID)|IncreaseLength|ReplaceBytes|SetLength)|e(?:C(?:ompare|reate)|Formatter(?:C(?:opyProperty|reate(?:DateF(?:ormatFromTemplate|romString)|StringWith(?:AbsoluteTime|Date))?)|Get(?:AbsoluteTimeFromString|DateStyle|Format|Locale|T(?:imeStyle|ypeID))|Set(?:Format|Property))|Get(?:AbsoluteTime|T(?:imeIntervalSinceDate|ypeID))))|ictionary(?:A(?:ddValue|pplyFunction)|C(?:ontains(?:Key|Value)|reate(?:Copy|Mutable(?:Copy)?)?)|Get(?:Count(?:Of(?:Key|Value))?|KeysAndValues|TypeID|Value(?:IfPresent)?)|Re(?:move(?:AllValues|Value)|placeValue)|SetValue))|E(?:qual|rror(?:C(?:opy(?:Description|FailureReason|RecoverySuggestion|UserInfo)|reate(?:WithUserInfoKeysAndValues)?)|Get(?:Code|Domain|TypeID)))|File(?:Descriptor(?:Create(?:RunLoopSource)?|DisableCallBacks|EnableCallBacks|Get(?:Context|NativeDescriptor|TypeID)|I(?:nvalidate|sValid))|Security(?:C(?:opy(?:AccessControlList|GroupUUID|OwnerUUID)|reate(?:Copy)?)|Get(?:Group|Mode|Owner|TypeID)|Set(?:AccessControlList|Group(?:UUID)?|Mode|Owner(?:UUID)?)))|Get(?:Allocator|RetainCount|TypeID)|Hash|Locale(?:C(?:opy(?:AvailableLocaleIdentifiers|C(?:ommonISOCurrencyCodes|urrent)|DisplayNameForPropertyValue|ISO(?:C(?:ountryCodes|urrencyCodes)|LanguageCodes)|PreferredLanguages)|reate(?:C(?:anonicalL(?:anguageIdentifierFromString|ocaleIdentifierFromS(?:criptManagerCodes|tring))|o(?:mponentsFromLocaleIdentifier|py))|LocaleIdentifierFrom(?:Components|WindowsLocaleCode))?)|Get(?:Identifier|Language(?:CharacterDirection|LineDirection)|System|TypeID|Value|WindowsLocaleCodeFromLocaleIdentifier))|M(?:a(?:chPort(?:Create(?:RunLoopSource|WithPort)?|Get(?:Context|InvalidationCallBack|Port|TypeID)|I(?:nvalidate|sValid)|SetInvalidationCallBack)|keCollectable)|essagePort(?:Create(?:Local|R(?:emote|unLoopSource))|Get(?:Context|InvalidationCallBack|Name|TypeID)|I(?:nvalidate|s(?:Remote|Valid))|Se(?:ndRequest|t(?:DispatchQueue|InvalidationCallBack|Name))))|N(?:otificationCenter(?:AddObserver|Get(?:D(?:arwinNotifyCenter|istributedCenter)|LocalCenter|TypeID)|PostNotification(?:WithOptions)?|Remove(?:EveryObserver|Observer))|u(?:llGetTypeID|mber(?:C(?:ompare|reate)|Formatter(?:C(?:opyProperty|reate(?:NumberFromString|StringWith(?:Number|Value))?)|Get(?:DecimalInfoForCurrencyCode|Format|Locale|Style|TypeID|ValueFromString)|Set(?:Format|Property))|Get(?:ByteSize|Type(?:ID)?|Value)|IsFloatType)))|P(?:lugIn(?:AddInstanceForFactory|Create|FindFactoriesForPlugInType(?:InPlugIn)?|Get(?:Bundle|TypeID)|I(?:nstance(?:Create(?:WithInstanceDataSize)?|Get(?:FactoryName|In(?:stanceData|terfaceFunctionTable)|TypeID))|sLoadOnDemand)|Re(?:gister(?:FactoryFunction(?:ByName)?|PlugInType)|moveInstanceForFactory)|SetLoadOnDemand|Unregister(?:Factory|PlugInType))|r(?:eferences(?:A(?:ddSuitePreferencesToApp|pp(?:Synchronize|ValueIsForced))|Copy(?:AppValue|KeyList|Multiple|Value)|GetApp(?:BooleanValue|IntegerValue)|RemoveSuitePreferencesFromApp|S(?:et(?:AppValue|Multiple|Value)|ynchronize))|opertyList(?:Create(?:D(?:ata|eepCopy)|With(?:Data|Stream))|IsValid|Write)))|R(?:angeMake|e(?:adStream(?:C(?:lose|opy(?:Error|Property)|reateWith(?:BytesNoCopy|File))|Get(?:Buffer|Error|Status|TypeID)|HasBytesAvailable|Open|Read|S(?:cheduleWithRunLoop|et(?:Client|Property))|UnscheduleFromRunLoop)|lease|tain)|unLoop(?:Add(?:CommonMode|Observer|Source|Timer)|Co(?:ntains(?:Observer|Source|Timer)|py(?:AllModes|CurrentMode))|Get(?:Current|Main|NextTimerFireDate|TypeID)|IsWaiting|Observer(?:Create(?:WithHandler)?|DoesRepeat|Get(?:Activities|Context|Order|TypeID)|I(?:nvalidate|sValid))|PerformBlock|R(?:emove(?:Observer|Source|Timer)|un(?:InMode)?)|S(?:ource(?:Create|Get(?:Context|Order|TypeID)|I(?:nvalidate|sValid)|Signal)|top)|Timer(?:Create(?:WithHandler)?|DoesRepeat|Get(?:Context|Interval|NextFireDate|Order|TypeID)|I(?:nvalidate|sValid)|SetNextFireDate)|WakeUp))|S(?:et(?:A(?:ddValue|pplyFunction)|C(?:ontainsValue|reate(?:Copy|Mutable(?:Copy)?)?)|Get(?:Count(?:OfValue)?|TypeID|Value(?:IfPresent|s)?)|Re(?:move(?:AllValues|Value)|placeValue)|SetValue)|how(?:Str)?|ocket(?:C(?:o(?:nnectToAddress|py(?:Address|PeerAddress|Registered(?:SocketSignature|Value)))|reate(?:ConnectedToSocketSignature|RunLoopSource|With(?:Native|SocketSignature))?)|DisableCallBacks|EnableCallBacks|Get(?:Context|DefaultNameRegistryPortNumber|Native|SocketFlags|TypeID)|I(?:nvalidate|sValid)|Register(?:SocketSignature|Value)|Se(?:ndData|t(?:Address|DefaultNameRegistryPortNumber|SocketFlags))|Unregister)|tr(?:eamCreate(?:BoundPair|PairWith(?:PeerSocketSignature|Socket(?:ToHost)?))|ing(?:Append(?:C(?:String|haracters)|Format(?:AndArguments)?|PascalString)?|C(?:apitalize|o(?:mpare(?:WithOptions(?:AndLocale)?)?|nvert(?:EncodingTo(?:IANACharSetName|NSStringEncoding|WindowsCodepage)|IANACharSetNameToEncoding|NSStringEncodingToEncoding|WindowsCodepageToEncoding))|reate(?:Array(?:BySeparatingStrings|WithFindResults)|ByCombiningStrings|Copy|ExternalRepresentation|FromExternalRepresentation|Mutable(?:Copy|WithExternalCharactersNoCopy)?|With(?:Bytes(?:NoCopy)?|C(?:String(?:NoCopy)?|haracters(?:NoCopy)?)|F(?:ileSystemRepresentation|ormat(?:AndArguments)?)|PascalString(?:NoCopy)?|Substring)))|Delete|F(?:ind(?:AndReplace|CharacterFromSet|WithOptions(?:AndLocale)?)?|old)|Get(?:Bytes|C(?:String(?:Ptr)?|haracter(?:AtIndex|FromInlineBuffer|s(?:Ptr)?))|DoubleValue|F(?:astestEncoding|ileSystemRepresentation)|HyphenationLocationBeforeIndex|IntValue|L(?:ength|i(?:neBounds|stOfAvailableEncodings)|ongCharacterForSurrogatePair)|M(?:aximumSize(?:ForEncoding|OfFileSystemRepresentation)|ostCompatibleMacStringEncoding)|NameOfEncoding|Pa(?:ragraphBounds|scalString(?:Ptr)?)|RangeOfComposedCharactersAtIndex|S(?:mallestEncoding|urrogatePairForLongCharacter|ystemEncoding)|TypeID)|Has(?:Prefix|Suffix)|I(?:n(?:itInlineBuffer|sert)|s(?:EncodingAvailable|HyphenationAvailableForLocale|Surrogate(?:HighCharacter|LowCharacter)))|Lowercase|Normalize|Pad|Replace(?:All)?|SetExternalCharactersNoCopy|T(?:okenizer(?:AdvanceToNextToken|C(?:opy(?:BestStringLanguage|CurrentTokenAttribute)|reate)|G(?:et(?:Current(?:SubTokens|TokenRange)|TypeID)|oToTokenAtIndex)|SetString)|r(?:ansform|im(?:Whitespace)?))|Uppercase))|wapInt(?:16(?:BigToHost|HostTo(?:Big|Little)|LittleToHost)?|32(?:BigToHost|HostTo(?:Big|Little)|LittleToHost)?|64(?:BigToHost|HostTo(?:Big|Little)|LittleToHost)?))|T(?:imeZone(?:C(?:opy(?:Abbreviation(?:Dictionary)?|Default|KnownNames|LocalizedName|System)|reate(?:With(?:Name|TimeIntervalFromGMT))?)|Get(?:Da(?:ta|ylightSavingTimeOffset)|N(?:ame|extDaylightSavingTimeTransition)|SecondsFromGMT|TypeID)|IsDaylightSavingTime|ResetSystem|Set(?:AbbreviationDictionary|Default))|ree(?:App(?:endChild|lyFunctionToChildren)|Create|FindRoot|Get(?:C(?:hild(?:AtIndex|Count|ren)|ontext)|FirstChild|NextSibling|Parent|TypeID)|InsertSibling|PrependChild|Remove(?:AllChildren)?|S(?:etContext|ortChildren)))|U(?:RL(?:C(?:anBeDecomposed|learResourcePropertyCache(?:ForKey)?|opy(?:AbsoluteURL|F(?:ileSystemPath|ragment)|HostName|LastPathComponent|NetLocation|Pa(?:ssword|th(?:Extension)?)|QueryString|Resource(?:Propert(?:iesForKeys|yForKey)|Specifier)|S(?:cheme|trictPath)|UserName)|reate(?:AbsoluteURLWithBytes|B(?:ookmarkData(?:From(?:AliasRecord|File))?|yResolvingBookmarkData)|Copy(?:AppendingPath(?:Component|Extension)|Deleting(?:LastPathComponent|PathExtension))|Data|F(?:ile(?:PathURL|ReferenceURL)|romFileSystemRepresentation(?:RelativeToBase)?)|ResourcePropert(?:iesForKeysFromBookmarkData|yForKeyFromBookmarkData)|StringByReplacingPercentEscapes|With(?:Bytes|FileSystemPath(?:RelativeToBase)?|String)))|Enumerator(?:CreateFor(?:DirectoryURL|MountedVolumes)|Get(?:DescendentLevel|NextURL|TypeID)|SkipDescendents)|Get(?:B(?:aseURL|yte(?:RangeForComponent|s))|FileSystemRepresentation|PortNumber|String|TypeID)|HasDirectoryPath|ResourceIsReachable|S(?:et(?:ResourcePropert(?:iesForKeys|yForKey)|TemporaryResourcePropertyForKey)|t(?:artAccessingSecurityScopedResource|opAccessingSecurityScopedResource))|WriteBookmarkDataToFile)|UID(?:Create(?:From(?:String|UUIDBytes)|String|WithBytes)?|Get(?:ConstantUUIDWithBytes|TypeID|UUIDBytes))|serNotification(?:C(?:ancel|heckBoxChecked|reate(?:RunLoopSource)?)|Display(?:Alert|Notice)|Get(?:Response(?:Dictionary|Value)|TypeID)|PopUpSelection|ReceiveResponse|SecureTextField|Update))|WriteStream(?:C(?:anAcceptBytes|lose|opy(?:Error|Property)|reateWith(?:AllocatedBuffers|Buffer|File))|Get(?:Error|Status|TypeID)|Open|S(?:cheduleWithRunLoop|et(?:Client|Property))|UnscheduleFromRunLoop|Write)|XMLCreateStringBy(?:EscapingEntities|UnescapingEntities))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.clib.10.10.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:f(?:accessat|chownat)|getattrlist(?:at|bulk)|linkat|openat|re(?:adlinkat|nameat)|symlinkat|unlinkat)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.clib.10.12.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:clock_(?:get(?:res|time(?:_nsec_np)?)|settime)|mk(?:ostemp(?:s)?|pathat_np)|rename(?:atx_np|x_np)|timingsafe_bcmp)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.clib.10.13.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:fmemopen|mk(?:dtempat_np|ostempsat_np|stempsat_np)|open_memstream|ptsname_r|setattrlistat)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.clib.10.15.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:rpmatch|timespec_get)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.clib.10.8.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:fsync_volume_np|mkpath_np|sync_volume_np)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.clib.10.9.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:f(?:fsll|lsll)|memset_s)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.clib.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:a(?:64l|b(?:ort|s)|c(?:c(?:ess(?:x_np)?|t)|os(?:f|h(?:f|l)?|l)?)|d(?:d_profil|jtime)|l(?:arm|loca)|rc4random(?:_(?:buf|stir|uniform))?|s(?:ctime(?:_r)?|in(?:f|h(?:f|l)?|l)?|printf)|t(?:an(?:2(?:f|l)?|f|h(?:f|l)?|l)?|exit(?:_b)?|o(?:f|i|l(?:l)?)))|b(?:c(?:mp|opy)|rk|s(?:d_signal|earch(?:_b)?)|zero)|c(?:brt(?:f|l)?|eil(?:f|l)?|get(?:c(?:ap|lose)|ent|first|match|n(?:ext|um)|s(?:et|tr)|ustr)|h(?:dir|own|root)|l(?:earerr|o(?:ck|se))|o(?:nfstr|pysign(?:f|l)?|s(?:f|h(?:f|l)?|l)?)|r(?:eat|ypt)|t(?:ermid_r|ime(?:_r)?))|d(?:evname(?:_r)?|i(?:fftime|spatch_(?:time|walltime)|v)|printf|rand48|up(?:2)?)|e(?:cvt|n(?:crypt|dusershell)|r(?:and48|f(?:c(?:f|l)?|f|l)?)|x(?:changedata|ec(?:l(?:e|p)?|v(?:P|e|p)?)|it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|f(?:abs(?:f|l)?|c(?:h(?:dir|own)|lose|ntl|vt)|d(?:im(?:f|l)?|open)|e(?:of|rror)|f(?:l(?:agstostr|ush)|s(?:ctl|l)?)|get(?:attrlist|c|ln|pos|s)|ile(?:no|sec_(?:dup|free|get_property|init|query_property|set_property|unset_property))|l(?:o(?:ck(?:file)?|or(?:f|l)?)|s(?:l)?)|m(?:a(?:f|l|x(?:f|l)?)?|in(?:f|l)?|od(?:f|l)?|tcheck)|o(?:pen|rk)|p(?:athconf|rintf|u(?:rge|t(?:c|s)))|re(?:ad|open|xp(?:f|l)?)|s(?:c(?:anf|tl)|e(?:ek(?:o)?|t(?:attrlist|pos))|ync)|t(?:ell(?:o)?|r(?:uncate|ylockfile))|u(?:n(?:lockfile|open)|times)|write)|g(?:cvt|et(?:attrlist|bsize|c(?:_unlocked|har(?:_unlocked)?|wd)?|d(?:ate|elim|irentriesattr|omainname|tablesize)|e(?:gid|nv|uid)|g(?:id|roup(?:list|s))|host(?:id|name)|i(?:opolicy_np|timer)|l(?:ine|o(?:adavg|gin(?:_r)?))|mode|opt|p(?:a(?:gesize|ss)|eereid|g(?:id|rp)|id|pid|r(?:iority|ogname))|r(?:limit|usage)|s(?:groups_np|id|ubopt)?|timeofday|u(?:id|sershell)|w(?:d|groups_np)?)|mtime(?:_r)?|rantpt)|h(?:eapsort(?:_b)?|ypot(?:f|l)?)|i(?:logb(?:f|l)?|n(?:dex|it(?:groups|state))|ruserok(?:_sa)?|s(?:atty|setugid))|j(?:0|1|n|rand48)|kill(?:pg)?|l(?:64a|abs|c(?:hown|ong48)|d(?:exp(?:f|l)?|iv)|gamma(?:f|l)?|ink|l(?:abs|div|r(?:int(?:f|l)?|ound(?:f|l)?))|o(?:c(?:al(?:econv|time(?:_r)?)|kf)|g(?:1(?:0(?:f|l)?|p(?:f|l)?)|2(?:f|l)?|b(?:f|l)?|f|l)?|ngjmp(?:error)?)|r(?:and48|int(?:f|l)?|ound(?:f|l)?)|seek|utimes)|m(?:b(?:len|stowcs|towc)|e(?:m(?:c(?:cpy|hr|mp|py)|m(?:em|ove)|set(?:_pattern(?:16|4|8))?)|rgesort(?:_b)?)|k(?:dtemp|nod|stemp(?:_dprotected_np|s)?|t(?:emp|ime))|odf(?:f|l)?|rand48)|n(?:an(?:f|l|osleep)?|e(?:arbyint(?:f|l)?|xt(?:after(?:f|l)?|toward(?:f|l)?))|fssvc|ice|rand48)|open(?:_dprotected_np|x_np)?|p(?:a(?:thconf|use)|close|error|ipe|o(?:pen|six(?:2time|_openpt)|w(?:f|l)?)|r(?:ead|intf|ofil)|s(?:elect|ignal|ort(?:_(?:b|r))?)|t(?:hread_(?:getugid_np|kill|s(?:etugid_np|igmask))|sname)|ut(?:c(?:_unlocked|har(?:_unlocked)?)?|env|s|w)|write)|qsort(?:_(?:b|r))?|r(?:a(?:dixsort|ise|nd(?:_r|om)?)|cmd(?:_af)?|e(?:a(?:d(?:link)?|l(?:locf|path))|boot|m(?:ainder(?:f|l)?|ove|quo(?:f|l)?)|name|voke|wind)|in(?:dex|t(?:f|l)?)|mdir|ound(?:f|l)?|resvport(?:_af)?|userok)|s(?:brk|ca(?:lb(?:ln(?:f|l)?|n(?:f|l)?)?|nf)|e(?:archfs|ed48|lect|t(?:attrlist|buf(?:fer)?|domainname|e(?:gid|nv|uid)|g(?:id|roups)|host(?:id|name)|i(?:opolicy_np|timer)|jmp|key|l(?:inebuf|o(?:cale|gin))|mode|p(?:g(?:id|rp)|r(?:iority|ogname))|r(?:e(?:gid|uid)|gid|limit|uid)|s(?:groups_np|id|tate)|timeofday|u(?:id|sershell)|vbuf|wgroups_np))|i(?:g(?:a(?:ction|ddset|ltstack)|block|delset|emptyset|fillset|hold|i(?:gnore|nterrupt|smember)|longjmp|nal|p(?:ause|ending|rocmask)|relse|s(?:et(?:jmp|mask)?|uspend)|vec|wait)|md_muladd|n(?:f|h(?:f|l)?|l)?)|leep|nprintf|printf|qrt(?:f|l)?|ra(?:dixsort|nd(?:48|dev|om(?:dev)?)?)|scanf|t(?:p(?:cpy|ncpy)|r(?:c(?:a(?:se(?:cmp|str)|t)|hr|mp|oll|py|spn)|dup|error(?:_r)?|ftime|l(?:c(?:at|py)|en)|mode|n(?:c(?:a(?:secmp|t)|mp|py)|dup|len|str)|p(?:brk|time)|rchr|s(?:ep|ignal|pn|tr)|to(?:d|f(?:flags)?|k(?:_r)?|l(?:d|l)?|q|u(?:l(?:l)?|q))|xfrm))|wa(?:b|pon)|y(?:mlink|nc|s(?:conf|tem)))|t(?:an(?:f|h(?:f|l)?|l)?|c(?:getpgrp|setpgrp)|empnam|gamma(?:f|l)?|ime(?:2posix|gm|local)?|mp(?:file|nam)|runc(?:ate|f|l)?|ty(?:name(?:_r)?|slot)|zset(?:wall)?)|u(?:alarm|n(?:delete|getc|l(?:ink|ockpt)|setenv|whiteout)|sleep|times)|v(?:a(?:lloc|sprintf)|dprintf|f(?:ork|printf|scanf)|printf|s(?:canf|nprintf|printf|scanf))|w(?:ait(?:3|4|id|pid)?|c(?:stombs|tomb)|rite)|y(?:0|1|n)|zopen)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.dispatch.10.10.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bdispatch_(?:block_(?:c(?:ancel|reate(?:_with_qos_class)?)|notify|perform|testcancel|wait)|queue_(?:attr_make_with_qos_class|get_qos_class))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.dispatch.10.12.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bdispatch_(?:a(?:ctivate|ssert_queue(?:_(?:barrier|not))?)|queue_(?:attr_make_(?:initially_inactive|with_autorelease_frequency)|create_with_target))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.dispatch.10.14.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bdispatch_(?:async_and_wait(?:_f)?|barrier_async_and_wait(?:_f)?|set_qos_class_floor|workloop_(?:create(?:_inactive)?|set_autorelease_frequency))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.dispatch.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bdispatch_(?:a(?:fter(?:_f)?|pply(?:_f)?|sync(?:_f)?)|barrier_(?:async(?:_f)?|sync(?:_f)?)|cancel|data_(?:apply|c(?:opy_region|reate(?:_(?:concat|map|subrange))?)|get_size)|g(?:et_(?:context|global_queue|main_queue|specific)|roup_(?:async(?:_f)?|create|enter|leave|notify(?:_f)?|wait))|io_(?:barrier|c(?:lose|reate(?:_with_(?:io|path))?)|get_descriptor|read|set_(?:high_water|interval|low_water)|write)|main|notify|once(?:_f)?|queue_(?:create|get_(?:label|specific)|set_specific)|re(?:ad|lease|sume|tain)|s(?:e(?:maphore_(?:create|signal|wait)|t_(?:context|finalizer_f|target_queue))|ource_(?:c(?:ancel|reate)|get_(?:data|handle|mask)|merge_data|set_(?:cancel_handler(?:_f)?|event_handler(?:_f)?|registration_handler(?:_f)?|timer)|testcancel)|uspend|ync(?:_f)?)|testcancel|w(?:ait|rite))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.os.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\b(?:OS(?:HostByteOrder|ReadSwapInt(?:16|32|64)|WriteSwapInt(?:16|32|64))|gethostuuid)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.10.11.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:ColorCreateCopyByMatchingToColorSpace|Event(?:PostToPid|TapCreateForPid)|ImageGetUTType)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.10.12.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCGColor(?:ConversionInfoCreate(?:FromList)?|Space(?:C(?:opy(?:ICCData|PropertyList)|reateWith(?:ICCData|PropertyList))|IsWideGamutRGB|SupportsOutput))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.10.13.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:Color(?:ConversionInfoCreateFromListWithArguments|SpaceGetName)|DataProviderGetInfo|EventCreateScrollWheelEvent2|P(?:DF(?:ContextSetOutline|DocumentGet(?:AccessPermissions|Outline))|athApplyWithBlock))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.10.14.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:ColorConversionInfoCreateWithOptions|ImageGet(?:ByteOrderInfo|PixelFormatInfo)|PDF(?:ArrayApplyBlock|DictionaryApplyBlock))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.10.15.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:ColorCreate(?:GenericGrayGamma2_2|SRGB)|PDF(?:Context(?:BeginTag|EndTag)|TagTypeGetName))\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.10.8.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:Display(?:ModeGetPixel(?:Height|Width)|Stream(?:Create(?:WithDispatchQueue)?|Get(?:RunLoopSource|TypeID)|St(?:art|op)|Update(?:CreateMergedUpdate|Get(?:DropCount|MovedRectsDelta|Rects|TypeID))))|WindowServerCreateServerPort)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.10.9.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCGPath(?:AddRoundedRect|CreateWithRoundedRect)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.quartz.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)(\\\\bCG(?:A(?:cquireDisplayFadeReservation|ffineTransform(?:Concat|EqualToTransform|I(?:nvert|sIdentity)|Make(?:Rotation|Scale|Translation)?|Rotate|Scale|Translate)|ssociateMouseAndMouseCursorPosition)|B(?:eginDisplayConfiguration|itmapContext(?:Create(?:Image|WithData)?|Get(?:AlphaInfo|B(?:it(?:mapInfo|sPer(?:Component|Pixel))|ytesPerRow)|ColorSpace|Data|Height|Width)))|C(?:a(?:ncelDisplayConfiguration|ptureAllDisplays(?:WithOptions)?)|o(?:lor(?:C(?:onversionInfoGetTypeID|reate(?:Copy(?:WithAlpha)?|Generic(?:CMYK|Gray|RGB)|WithPattern)?)|EqualToColor|Get(?:Alpha|Co(?:lorSpace|mponents|nstantColor)|NumberOfComponents|Pattern|TypeID)|Re(?:lease|tain)|Space(?:C(?:opyName|reate(?:Calibrated(?:Gray|RGB)|Device(?:CMYK|Gray|RGB)|I(?:CCBased|ndexed)|Lab|Pattern|With(?:Name|PlatformColorSpace)))|Get(?:BaseColorSpace|ColorTable(?:Count)?|Model|NumberOfComponents|TypeID)|Re(?:lease|tain)))|mpleteDisplayConfiguration|n(?:figureDisplay(?:FadeEffect|MirrorOfDisplay|Origin|StereoOperation|WithDisplayMode)|text(?:Add(?:Arc(?:ToPoint)?|CurveToPoint|EllipseInRect|Line(?:ToPoint|s)|Path|QuadCurveToPoint|Rect(?:s)?)|Begin(?:Pa(?:ge|th)|TransparencyLayer(?:WithRect)?)|C(?:l(?:earRect|ip(?:To(?:Mask|Rect(?:s)?))?|osePath)|o(?:n(?:catCTM|vert(?:PointTo(?:DeviceSpace|UserSpace)|RectTo(?:DeviceSpace|UserSpace)|SizeTo(?:DeviceSpace|UserSpace)))|pyPath))|Draw(?:Image|L(?:ayer(?:AtPoint|InRect)|inearGradient)|P(?:DFPage|ath)|RadialGradient|Shading|TiledImage)|E(?:O(?:Clip|FillPath)|nd(?:Page|TransparencyLayer))|F(?:ill(?:EllipseInRect|Path|Rect(?:s)?)|lush)|Get(?:C(?:TM|lipBoundingBox)|InterpolationQuality|Path(?:BoundingBox|CurrentPoint)|T(?:ext(?:Matrix|Position)|ypeID)|UserSpaceToDeviceSpaceTransform)|IsPathEmpty|MoveToPoint|PathContainsPoint|R(?:e(?:lease|placePathWithStrokedPath|s(?:etClip|toreGState)|tain)|otateCTM)|S(?:aveGState|caleCTM|et(?:Al(?:lows(?:Antialiasing|FontS(?:moothing|ubpixel(?:Positioning|Quantization)))|pha)|BlendMode|C(?:MYK(?:FillColor|StrokeColor)|haracterSpacing)|F(?:ill(?:Color(?:Space|WithColor)?|Pattern)|latness|ont(?:Size)?)|Gray(?:FillColor|StrokeColor)|InterpolationQuality|Line(?:Cap|Dash|Join|Width)|MiterLimit|PatternPhase|R(?:GB(?:FillColor|StrokeColor)|enderingIntent)|S(?:h(?:adow(?:WithColor)?|ould(?:Antialias|S(?:moothFonts|ubpixel(?:PositionFonts|QuantizeFonts))))|troke(?:Color(?:Space|WithColor)?|Pattern))|Text(?:DrawingMode|Matrix|Position))|howGlyphsAtPositions|troke(?:EllipseInRect|LineSegments|Path|Rect(?:WithWidth)?)|ynchronize)|TranslateCTM))))|D(?:ata(?:Consumer(?:Create(?:With(?:CFData|URL))?|GetTypeID|Re(?:lease|tain))|Provider(?:C(?:opyData|reate(?:Direct|Sequential|With(?:CFData|Data|Filename|URL)))|GetTypeID|Re(?:lease|tain)))|isplay(?:Bounds|C(?:apture(?:WithOptions)?|opy(?:AllDisplayModes|ColorSpace|DisplayMode)|reateImage(?:ForRect)?)|Fade|G(?:ammaTableCapacity|etDrawingContext)|HideCursor|I(?:DToOpenGLDisplayMask|s(?:A(?:ctive|lwaysInMirrorSet|sleep)|Builtin|In(?:HWMirrorSet|MirrorSet)|Main|Online|Stereo))|M(?:irrorsDisplay|o(?:de(?:Get(?:Height|IO(?:DisplayModeID|Flags)|RefreshRate|TypeID|Width)|IsUsableForDesktopGUI|Re(?:lease|tain)|lNumber)|veCursorToPoint))|P(?:ixels(?:High|Wide)|rimaryDisplay)|R(?:e(?:gisterReconfigurationCallback|lease|moveReconfigurationCallback|storeColorSyncSettings)|otation)|S(?:creenSize|e(?:rialNumber|t(?:DisplayMode|StereoOperation))|howCursor)|U(?:nitNumber|sesOpenGLAcceleration)|VendorNumber))|Event(?:Create(?:Copy|Data|FromData|KeyboardEvent|MouseEvent|S(?:crollWheelEvent|ourceFromEvent))?|Get(?:DoubleValueField|Flags|IntegerValueField|Location|T(?:imestamp|ype(?:ID)?)|UnflippedLocation)|Keyboard(?:GetUnicodeString|SetUnicodeString)|Post(?:ToPSN)?|S(?:et(?:DoubleValueField|Flags|IntegerValueField|Location|Source|T(?:imestamp|ype))|ource(?:ButtonState|C(?:ounterForEventType|reate)|FlagsState|Get(?:KeyboardType|LocalEvents(?:FilterDuringSuppressionState|SuppressionInterval)|PixelsPerLine|SourceStateID|TypeID|UserData)|KeyState|Se(?:condsSinceLastEventType|t(?:KeyboardType|LocalEvents(?:FilterDuringSuppressionState|SuppressionInterval)|PixelsPerLine|UserData))))|Tap(?:Create(?:ForPSN)?|Enable|IsEnabled|PostEvent))|F(?:ont(?:C(?:anCreatePostScriptSubset|opy(?:FullName|GlyphNameForGlyph|PostScriptName|Table(?:ForTag|Tags)|Variation(?:Axes|s))|reate(?:CopyWithVariations|PostScript(?:Encoding|Subset)|With(?:DataProvider|FontName)))|Get(?:Ascent|CapHeight|Descent|FontBBox|Glyph(?:Advances|BBoxes|WithGlyphName)|ItalicAngle|Leading|NumberOfGlyphs|StemV|TypeID|UnitsPerEm|XHeight)|Re(?:lease|tain))|unction(?:Create|GetTypeID|Re(?:lease|tain)))|G(?:et(?:ActiveDisplayList|Display(?:TransferBy(?:Formula|Table)|sWith(?:OpenGLDisplayMask|Point|Rect))|EventTapList|LastMouseDelta|OnlineDisplayList)|radient(?:CreateWithColor(?:Components|s)|GetTypeID|Re(?:lease|tain)))|Image(?:Create(?:Copy(?:WithColorSpace)?|With(?:ImageInRect|JPEGDataProvider|Mask(?:ingColors)?|PNGDataProvider))?|Get(?:AlphaInfo|B(?:it(?:mapInfo|sPer(?:Component|Pixel))|ytesPerRow)|ColorSpace|D(?:ataProvider|ecode)|Height|RenderingIntent|ShouldInterpolate|TypeID|Width)|IsMask|MaskCreate|Re(?:lease|tain))|Layer(?:CreateWithContext|Get(?:Context|Size|TypeID)|Re(?:lease|tain))|MainDisplayID|OpenGLDisplayMaskToDisplayID|P(?:DF(?:ArrayGet(?:Array|Boolean|Count|Dictionary|Integer|N(?:ame|u(?:ll|mber))|Object|Str(?:eam|ing))|Conte(?:ntStream(?:CreateWith(?:Page|Stream)|Get(?:Resource|Streams)|Re(?:lease|tain))|xt(?:AddD(?:estinationAtPoint|ocumentMetadata)|BeginPage|C(?:lose|reate(?:WithURL)?)|EndPage|Set(?:DestinationForRect|URLForRect)))|D(?:ictionary(?:ApplyFunction|Get(?:Array|Boolean|Count|Dictionary|Integer|N(?:ame|umber)|Object|Str(?:eam|ing)))|ocument(?:Allows(?:Copying|Printing)|CreateWith(?:Provider|URL)|Get(?:Catalog|I(?:D|nfo)|NumberOfPages|Page|TypeID|Version)|Is(?:Encrypted|Unlocked)|Re(?:lease|tain)|UnlockWithPassword))|O(?:bjectGet(?:Type|Value)|peratorTable(?:Create|Re(?:lease|tain)|SetCallback))|Page(?:Get(?:BoxRect|D(?:ictionary|ocument|rawingTransform)|PageNumber|RotationAngle|TypeID)|Re(?:lease|tain))|S(?:canner(?:Create|GetContentStream|Pop(?:Array|Boolean|Dictionary|Integer|N(?:ame|umber)|Object|Str(?:eam|ing))|Re(?:lease|tain)|Scan)|tr(?:eam(?:CopyData|GetDictionary)|ing(?:Copy(?:Date|TextString)|Get(?:BytePtr|Length)))))|SConverter(?:Abort|C(?:onvert|reate)|GetTypeID|IsConverting)|at(?:h(?:A(?:dd(?:Arc(?:ToPoint)?|CurveToPoint|EllipseInRect|Line(?:ToPoint|s)|Path|QuadCurveToPoint|Re(?:ct(?:s)?|lativeArc))|pply)|C(?:loseSubpath|ontainsPoint|reate(?:Copy(?:By(?:DashingPath|StrokingPath|TransformingPath))?|Mutable(?:Copy(?:ByTransformingPath)?)?|With(?:EllipseInRect|Rect)))|EqualToPath|Get(?:BoundingBox|CurrentPoint|PathBoundingBox|TypeID)|Is(?:Empty|Rect)|MoveToPoint|Re(?:lease|tain))|tern(?:Create|GetTypeID|Re(?:lease|tain)))|oint(?:ApplyAffineTransform|CreateDictionaryRepresentation|EqualToPoint|Make(?:WithDictionaryRepresentation)?))|Re(?:ct(?:ApplyAffineTransform|C(?:ontains(?:Point|Rect)|reateDictionaryRepresentation)|Divide|EqualToRect|Get(?:Height|M(?:ax(?:X|Y)|i(?:d(?:X|Y)|n(?:X|Y)))|Width)|I(?:n(?:set|te(?:gral|rsect(?:ion|sRect)))|s(?:Empty|Infinite|Null))|Make(?:WithDictionaryRepresentation)?|Offset|Standardize|Union)|lease(?:AllDisplays|DisplayFadeReservation)|storePermanentDisplayConfiguration)|S(?:e(?:ssionCopyCurrentDictionary|tDisplayTransferBy(?:ByteTable|Formula|Table))|h(?:ading(?:Create(?:Axial|Radial)|GetTypeID|Re(?:lease|tain))|ieldingWindow(?:ID|Level))|ize(?:ApplyAffineTransform|CreateDictionaryRepresentation|EqualToSize|Make(?:WithDictionaryRepresentation)?))|VectorMake|W(?:arpMouseCursorPosition|indowL(?:evelForKey|istC(?:opyWindowInfo|reate(?:DescriptionFromArray|Image(?:FromArray)?)?))))\\\\b)\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/csharp/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/csharp/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"dotnet/csharp-tmLanguage\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/dotnet/csharp-tmLanguage\",\n\t\t\t\t\t\"commitHash\": \"1381bedfb087c18aca67af8278050d11bc9d9349\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"description\": \"The file syntaxes/csharp.tmLanguage.json was derived from https://github.com/dotnet/csharp-tmLanguage\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/csharp/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*#endregion\\\\b\"\n\t\t}\n\t},\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t// We do not want to match /// (a documentation comment)\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"[^\\/]\\/\\/[^\\/].*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t\t// Add /// when pressing enter from anywhere inside a documentation comment.\n\t\t// Documentation comments are not valid after non-whitespace.\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*\\/\\/\\/\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"/// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/csharp/package.json",
    "content": "{\n  \"name\": \"csharp\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin dotnet/csharp-tmLanguage grammars/csharp.tmLanguage ./syntaxes/csharp.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n\t\"configurationDefaults\": {\n\t\t\"[csharp]\": {\n\t\t\t\"editor.maxTokenizationLineLength\": 2500\n\t\t}\n\t},\n    \"languages\": [\n      {\n        \"id\": \"csharp\",\n        \"extensions\": [\n          \".cs\",\n          \".csx\",\n          \".cake\"\n        ],\n        \"aliases\": [\n          \"C#\",\n          \"csharp\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"csharp\",\n        \"scopeName\": \"source.cs\",\n        \"path\": \"./syntaxes/csharp.tmLanguage.json\",\n        \"tokenTypes\": {\n          \"meta.interpolation\": \"other\"\n        }\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"csharp\",\n        \"path\": \"./snippets/csharp.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/csharp/package.nls.json",
    "content": "{\n\t\"displayName\": \"C# Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in C# files.\"\n}\n"
  },
  {
    "path": "extensions/csharp/snippets/csharp.code-snippets",
    "content": "{\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"#region $0\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"#endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t}\n}\n"
  },
  {
    "path": "extensions/csharp/syntaxes/csharp.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/dotnet/csharp-tmLanguage/blob/master/grammars/csharp.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/dotnet/csharp-tmLanguage/commit/1381bedfb087c18aca67af8278050d11bc9d9349\",\n\t\"name\": \"C#\",\n\t\"scopeName\": \"source.cs\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#preprocessor\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#directives\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#declarations\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#script-top-level\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"directives\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#extern-alias-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"script-top-level\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-declarations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#delegate-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#record-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-or-struct-members\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#event-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constructor-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructor-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operator-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conversion-operator-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface-members\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#event-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operator-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#while-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#do-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#foreach-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#if-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#else-part\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#goto-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#return-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#break-or-continue-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#throw-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yield-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#await-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#try-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operator-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#context-control-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#context-control-paren-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#labeled-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-creation-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-creation-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous-object-creation-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#local-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operator-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-operator-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#default-literal-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#throw-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolated-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#verbatim-interpolated-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-builtin\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language-variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-statement-or-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#with-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conditional-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assignment-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#await-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#as-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#is-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous-method-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-creation-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-creation-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous-object-creation-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#invocation-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-access-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#element-access-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cast-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tuple-deconstruction-assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#initializer-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#identifier\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"extern-alias-directive\": {\n\t\t\t\"begin\": \"\\\\b(extern)\\\\s+(alias)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.directive.extern.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.directive.alias.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\"name\": \"variable.other.alias.cs\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"using-directive\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(?:(global)\\\\s+)?(using)\\\\s+(static)\\\\b\\\\s*(?:(unsafe)\\\\b\\\\s*)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.directive.global.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.directive.using.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.directive.static.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.unsafe.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(?:(global)\\\\s+)?(using)\\\\b\\\\s*(?:(unsafe)\\\\b\\\\s*)?(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.directive.global.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.directive.using.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.unsafe.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(?:(global)\\\\s+)?(using)\\\\b\\\\s*+(?!\\\\(|var\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.directive.global.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.directive.using.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.namespace.cs\",\n\t\t\t\t\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operator-assignment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attribute-section\": {\n\t\t\t\"begin\": \"(\\\\[)(assembly|module|field|event|method|param|property|return|type)?(\\\\:)?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.open.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.attribute-specifier.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attribute\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-arguments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attribute-arguments\": {\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-named-argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attribute-named-argument\": {\n\t\t\t\"begin\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(?==)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.property.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=(,|\\\\)))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operator-assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace-declaration\": {\n\t\t\t\"begin\": \"\\\\b(namespace)\\\\s+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.namespace.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.namespace.cs\",\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#using-directive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"storage-modifier\": {\n\t\t\t\"name\": \"storage.modifier.$1.cs\",\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe|ref|required|file)\\\\b\"\n\t\t},\n\t\t\"class-declaration\": {\n\t\t\t\"begin\": \"(?=(\\\\brecord\\\\b\\\\s+)?\\\\bclass\\\\b)\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(\\\\b(record)\\\\b\\\\s+)?\\n\\\\b(class)\\\\b\\\\s+\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.record.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameter-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#base-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-or-struct-members\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"delegate-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?:\\\\b(delegate)\\\\b)\\\\s+\\n(?<type_name>\\n  (?:\\n    (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref return\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\s*\\n(<([^<>]+)>)?\\\\s*\\n(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.delegate.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.type.delegate.cs\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameter-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"enum-declaration\": {\n\t\t\t\"begin\": \"(?=\\\\benum\\\\b)\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=enum)\",\n\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(enum)\\\\s+(@?[_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.enum.cs\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.variable.enum-member.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=(,|\\\\}))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface-declaration\": {\n\t\t\t\"begin\": \"(?=\\\\binterface\\\\b)\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(interface)\\\\b\\\\s+\\n(@?[_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.interface.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.interface.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameter-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#base-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface-members\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"record-declaration\": {\n\t\t\t\"begin\": \"(?=\\\\brecord\\\\b)\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(record)\\\\b\\\\s+\\n(@?[_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.record.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameter-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#base-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-or-struct-members\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct-declaration\": {\n\t\t\t\"begin\": \"(?=(\\\\brecord\\\\b\\\\s+)?\\\\bstruct\\\\b)\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(\\\\b(record)\\\\b\\\\s+)?\\n(struct)\\\\b\\\\s+\\n(@?[_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.record.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.struct.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameter-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#base-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-or-struct-members\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-parameter-list\": {\n\t\t\t\"begin\": \"\\\\<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(in|out)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.$1.cs\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.type.type-parameter.cs\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"base-types\": {\n\t\t\t\"begin\": \":\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\{|where|;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"generic-constraints\": {\n\t\t\t\"begin\": \"(where)\\\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.where.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.type-parameter.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\{|where|;|=>)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.class.cs\",\n\t\t\t\t\t\"match\": \"\\\\bclass\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.struct.cs\",\n\t\t\t\t\t\"match\": \"\\\\bstruct\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.constraint.default.cs\",\n\t\t\t\t\t\"match\": \"\\\\bdefault\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.constraint.notnull.cs\",\n\t\t\t\t\t\"match\": \"\\\\bnotnull\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.constraint.unmanaged.cs\",\n\t\t\t\t\t\"match\": \"\\\\bunmanaged\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(new)\\\\s*(\\\\()\\\\s*(\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.new.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"field-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\s* # first field name\\n(?!=>|==)(?=,|;|=|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.field.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.variable.field.cs\",\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-struct-members\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n\\n# The negative lookahead below ensures that we don't match nested types\\n# or other declarations as properties.\\n(?![[:word:][:space:]]*\\\\b(?:class|interface|struct|enum|event)\\\\b)\\n\\n(?<return_type>\\n  (?<type_name>\\n    (?:\\n      (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref return\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n      (?:\\\\s* # array suffix?\\n        \\\\[\\n          (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n        \\\\]\\n        \\\\s*\\n        (?:\\\\?)? # arrays can be nullable reference types\\n        \\\\s*\\n      )*\\n    )\\n  )\\\\s+\\n)\\n(?<interface_name>\\\\g<type_name>\\\\s*\\\\.\\\\s*)?\\n(?<property_name>\\\\g<identifier>)\\\\s*\\n(?=\\\\{|=>|//|/\\\\*|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.property.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-accessors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#accessor-getter-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-struct-members\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"indexer-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?<return_type>\\n  (?<type_name>\\n    (?:\\n      (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref return\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n      (?:\\\\s* # array suffix?\\n        \\\\[\\n          (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n        \\\\]\\n        \\\\s*\\n        (?:\\\\?)? # arrays can be nullable reference types\\n        \\\\s*\\n      )*\\n    )\\n  )\\\\s+\\n)\\n(?<interface_name>\\\\g<type_name>\\\\s*\\\\.\\\\s*)?\\n(?<indexer_name>this)\\\\s*\\n(?=\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracketed-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-accessors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#accessor-getter-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"event-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b(event)\\\\b\\\\s*\\n(?<return_type>\\n  (?<type_name>\\n    (?:\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n      (?:\\\\s* # array suffix?\\n        \\\\[\\n          (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n        \\\\]\\n        \\\\s*\\n        (?:\\\\?)? # arrays can be nullable reference types\\n        \\\\s*\\n      )*\\n    )\\n  )\\\\s+\\n)\\n(?<interface_name>\\\\g<type_name>\\\\s*\\\\.\\\\s*)?\\n(\\\\g<identifier>)\\\\s* # first event name\\n(?=\\\\{|;|,|=|//|/\\\\*|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.event.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.event.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#event-accessors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.variable.event.cs\",\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=,)|(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-accessors\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.$1.cs\",\n\t\t\t\t\t\"match\": \"\\\\b(private|protected|internal)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(get)\\\\b\\\\s*(?=\\\\{|;|=>|//|/\\\\*|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.accessor.$1.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\}|;)|(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#accessor-getter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(set|init)\\\\b\\\\s*(?=\\\\{|;|=>|//|/\\\\*|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.accessor.$1.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\}|;)|(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#accessor-setter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"event-accessors\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(add|remove)\\\\b\\\\s*(?=\\\\{|;|=>|//|/\\\\*|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.accessor.$1.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\}|;)|(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#accessor-setter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"accessor-getter\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.accessor.getter.cs\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#accessor-getter-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"accessor-getter-expression\": {\n\t\t\t\"begin\": \"=>\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.arrow.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\})\",\n\t\t\t\"contentName\": \"meta.accessor.getter.cs\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ref-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"accessor-setter\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.accessor.setter.cs\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arrow.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;|\\\\})\",\n\t\t\t\t\t\"contentName\": \"meta.accessor.setter.cs\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ref-modifier\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?<return_type>\\n  (?<type_name>\\n    (?:\\n      (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref return\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n      (?:\\\\s* # array suffix?\\n        \\\\[\\n          (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n        \\\\]\\n        \\\\s*\\n        (?:\\\\?)? # arrays can be nullable reference types\\n        \\\\s*\\n      )*\\n    )\\n  )\\\\s+\\n)\\n(?<interface_name>\\\\g<type_name>\\\\s*\\\\.\\\\s*)?\\n(\\\\g<identifier>)\\\\s*\\n(<([^<>]+)>)?\\\\s*\\n(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameter-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor-declaration\": {\n\t\t\t\"begin\": \"(?=@?[_[:alpha:]][_[:alnum:]]*\\\\s*\\\\()\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\{|=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor-initializer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor-initializer\": {\n\t\t\t\"begin\": \"\\\\b(base|this)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.language.$1.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor-declaration\": {\n\t\t\t\"begin\": \"(~)(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.tilde.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operator-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?<type_name>\\n  (?:\\n    (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref return\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s*\\n\\\\b(?<operator_keyword>operator)\\\\b\\\\s*\\n(?<operator>[+\\\\-*/%&|\\\\^!=~<>]+|true|false)\\\\s*\\n(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"storage.type.operator.cs\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"conversion-operator-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?<explicit_or_implicit_keyword>(?:\\\\b(?:explicit|implicit)))\\\\s*\\n(?<operator_keyword>(?:\\\\b(?:operator)))\\\\s*\\n(?<type_name>\\n  (?:\\n    (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref return\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s*\\n(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(explicit)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.explicit.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(implicit)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.implicit.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.operator.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable-initializer\": {\n\t\t\t\"begin\": \"(?<!=|!)(=)(?!=|>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[,\\\\)\\\\];}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ref-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-body\": {\n\t\t\t\"begin\": \"=>\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.arrow.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[,\\\\);}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ref-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"goto-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(goto)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.goto.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[;}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(case)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.case.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[;}])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(default)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.default.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.label.cs\",\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(return)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.return.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[;}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ref-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"break-or-continue-statement\": {\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(break|continue)\\\\b\",\n\t\t\t\"name\": \"keyword.control.flow.$1.cs\"\n\t\t},\n\t\t\"throw-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(throw)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.throw.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[;}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yield-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yield-return-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yield-break-statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yield-return-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(yield)\\\\b\\\\s*\\\\b(return)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.yield.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.return.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[;}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yield-break-statement\": {\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(yield)\\\\b\\\\s*\\\\b(break)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.yield.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.break.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"await-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.\\\\s*)\\\\b(await)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.await.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})|(?=;|})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#foreach-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"if-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(if)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.if.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"else-part\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(else)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.else.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch-statement-or-expression\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(switch)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.switch.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})|(?=})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\()\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})|(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch-statement\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})|(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch-label\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch-label\": {\n\t\t\t\"begin\": \"\\\\b(case|default)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.$1.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(:)|(?=})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(when)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.when.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=:|})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case-guard\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?!\\\\s)\",\n\t\t\t\t\t\"end\": \"(?=\\\\bwhen\\\\b|:|})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch-expression\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arrow.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(when)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.when.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?==>|,|})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case-guard\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?!\\\\s)\",\n\t\t\t\t\t\"end\": \"(?=\\\\bwhen\\\\b|=>|,|})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case-guard\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"is-expression\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(is)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.pattern.is.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pattern\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pattern\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#combinator-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#discard-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#relational-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#positional-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#list-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#slice-pattern\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"combinator-pattern\": {\n\t\t\t\"match\": \"\\\\b(and|or|not)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.expression.pattern.combinator.$1.cs\"\n\t\t},\n\t\t\"discard-pattern\": {\n\t\t\t\"match\": \"_(?![_[:alnum:]])\",\n\t\t\t\"name\": \"variable.language.discard.cs\"\n\t\t},\n\t\t\"constant-pattern\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#boolean-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#null-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#char-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-string-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#verbatim-string-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-operator-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operator-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#casted-constant-pattern\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"casted-constant-pattern\": {\n\t\t\t\"begin\": \"(?x)\\n(\\\\()\\n  ([\\\\s.:@_[:alnum:]]+)\\n(\\\\))\\n(?=[\\\\s+\\\\-!~]*@?[_[:alnum:]('\\\"]+)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-builtin\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#casted-constant-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constant-pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(\\\\:\\\\:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.coloncolon.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(\\\\.)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\"name\": \"variable.other.constant.cs\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"relational-pattern\": {\n\t\t\t\"begin\": \"<=?|>=?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.relational.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-pattern\": {\n\t\t\t\"begin\": \"\\\\b(var)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.var.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#designation-pattern\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"designation-pattern\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#designation-pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple-designation-pattern\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"simple-designation-pattern\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#discard-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-pattern\": {\n\t\t\t\"begin\": \"(?=@?[_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\"end\": \"(?!\\\\G[@_[:alpha:]])(?=[\\\\({@_[:alpha:])}\\\\],;:=&|^]|(?:\\\\s|^)\\\\?|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-subpattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[\\\\({@_[:alpha:]])\",\n\t\t\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#positional-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple-designation-pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-subpattern\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-builtin\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(::)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.coloncolon.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=[_[:alnum:]])|(?=[.<\\\\[\\\\({)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\"name\": \"entity.name.type.cs\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\.\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=[_[:alnum:]])|(?=[<\\\\[\\\\({)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-array-suffix\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s)\\\\?\",\n\t\t\t\t\t\"name\": \"punctuation.separator.question-mark.cs\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"positional-pattern\": {\n\t\t\t\"begin\": \"(?=\\\\()\",\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#subpattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\",\n\t\t\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple-designation-pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-pattern\": {\n\t\t\t\"begin\": \"(?={)\",\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#subpattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\})\",\n\t\t\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple-designation-pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"subpattern\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*(?:\\\\s*\\\\.\\\\s*@?[_[:alpha:]][_[:alnum:]]*)*)\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.cs\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pattern\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"list-pattern\": {\n\t\t\t\"begin\": \"(?=\\\\[)\",\n\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.squarebracket.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.squarebracket.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\])\",\n\t\t\t\t\t\"end\": \"(?=[)}\\\\],;:?=&|^]|!=|\\\\b(and|or|when)\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple-designation-pattern\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"slice-pattern\": {\n\t\t\t\"match\": \"\\\\.\\\\.\",\n\t\t\t\"name\": \"keyword.operator.range.cs\"\n\t\t},\n\t\t\"do-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(do)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.do.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"while-statement\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(while)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.while.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"for-statement\": {\n\t\t\t\"begin\": \"\\\\b(for)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.for.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=;|})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=[^;\\\\)])\",\n\t\t\t\t\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#local-variable-declaration\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=;)\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"foreach-statement\": {\n\t\t\t\"begin\": \"\\\\b(foreach)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.foreach.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=;|})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?:\\n  (?:(\\\\bref)\\\\s+)?(\\\\bvar\\\\b)| # ref local\\n  (?<type_name>\\n    (?:\\n      (?:ref\\\\s+)?   # ref local\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n      (?:\\\\s* # array suffix?\\n        \\\\[\\n          (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n        \\\\]\\n        \\\\s*\\n        (?:\\\\?)? # arrays can be nullable reference types\\n        \\\\s*\\n      )*\\n    )\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\s+\\n\\\\b(in)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.ref.cs\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.var.cs\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.in.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x) # match foreach (var (x, y) in ...)\\n(?:\\\\b(var)\\\\b\\\\s*)?\\n(?<tuple>\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\\\s+\\n\\\\b(in)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.var.cs\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#tuple-declaration-deconstruction-element-list\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.in.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"try-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#try-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#catch-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#finally-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"try-block\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(try)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.try.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"finally-clause\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(finally)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.finally.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"catch-clause\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(catch)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.catch.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s*\\n(?:(\\\\g<identifier>)\\\\b)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#when-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"when-clause\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(when)\\\\b\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.when.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"context-control-statement\": {\n\t\t\t\"match\": \"\\\\b(checked|unchecked|unsafe)\\\\b(?!\\\\s*[@_[:alpha:](])\",\n\t\t\t\"name\": \"keyword.control.context.$1.cs\"\n\t\t},\n\t\t\"context-control-paren-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fixed-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lock-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using-statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fixed-statement\": {\n\t\t\t\"begin\": \"\\\\b(fixed)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.context.fixed.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=;|})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#local-variable-declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"lock-statement\": {\n\t\t\t\"begin\": \"\\\\b(lock)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.context.lock.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=;|})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"using-statement\": {\n\t\t\t\"begin\": \"\\\\b(using)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.context.using.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=;|})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#await-expression\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#local-variable-declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#local-variable-declaration\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"labeled-statement\": {\n\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(:)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.label.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"local-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#local-constant-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#local-variable-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#local-function-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#local-tuple-var-deconstruction\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"local-variable-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?:\\n  (?:(\\\\bref)\\\\s+(?:(\\\\breadonly)\\\\s+)?)?(\\\\bvar\\\\b)| # ref local\\n  (?<type_name>\\n    (?:\\n      (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref local\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*[?*]\\\\s*)? # nullable or pointer suffix?\\n      (?:\\\\s* # array suffix?\\n        \\\\[\\n          (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n        \\\\]\\n        \\\\s*\\n        (?:\\\\?)? # arrays can be nullable reference types\\n        \\\\s*\\n      )*\\n    )\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\s*\\n(?!=>)\\n(?=,|;|=|\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.ref.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.readonly.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.var.cs\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[;)}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\",\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"local-constant-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n(?<const_keyword>\\\\b(?:const)\\\\b)\\\\s*\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\s*\\n(?=,|;|=)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.const.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\",\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"local-function-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b((?:(?:async|unsafe|static|extern)\\\\s+)*)\\n(?<type_name>\\n  (?:ref\\\\s+(?:readonly\\\\s+)?)?   # ref return\\n  (?:\\n    (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n    (?<name_and_type_args> # identifier + type arguments (if any)\\n      \\\\g<identifier>\\\\s*\\n      (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n    )\\n    (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n    (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n  )\\n  (?:\\\\s*\\\\?)? # nullable suffix?\\n  (?:\\\\s* # array suffix?\\n    \\\\[\\n      \\\\s*(?:,\\\\s*)* # commata for multi-dimensional arrays\\n    \\\\]\\n    (?:\\\\s*\\\\?)? # arrays can be nullable reference types\\n  )*\\n)\\\\s+\\n(\\\\g<identifier>)\\\\s*\\n(<[^<>]+>)?\\\\s*\\n(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage-modifier\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameter-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthesized-parameter-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generic-constraints\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"local-tuple-var-deconstruction\": {\n\t\t\t\"begin\": \"(?x) # e.g. var (x, y) = GetPoint();\\n(?:\\\\b(var)\\\\b\\\\s*)\\n(?<tuple>\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\\\s*\\n(?=;|=|\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.var.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple-declaration-deconstruction-element-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tuple-deconstruction-assignment\": {\n\t\t\t\"match\": \"(?x)\\n(?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\\\s*\\n(?!=>|==)(?==)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple-deconstruction-element-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"tuple-declaration-deconstruction-element-list\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tuple-declaration-deconstruction-element-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declaration-expression-tuple\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) # e.g. x\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*\\n(?=[,)])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.variable.tuple-element.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tuple-deconstruction-element-list\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tuple-deconstruction-element-list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declaration-expression-tuple\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) # e.g. x\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*\\n(?=[,)])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declaration-expression-local\": {\n\t\t\t\"match\": \"(?x) # e.g. int x OR var x\\n(?:\\n  \\\\b(var)\\\\b|\\n  (?<type_name>\\n    (?:\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n      (?:\\\\s* # array suffix?\\n        \\\\[\\n          (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n        \\\\]\\n        \\\\s*\\n        (?:\\\\?)? # arrays can be nullable reference types\\n        \\\\s*\\n      )*\\n    )\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\b\\\\s*\\n(?=[,)\\\\]])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.var.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"declaration-expression-tuple\": {\n\t\t\t\"match\": \"(?x) # e.g. int x OR var x\\n(?:\\n  \\\\b(var)\\\\b|\\n  (?<type_name>\\n    (?:\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name_and_type_args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n                (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n    )\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\b\\\\s*\\n(?=[,)])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.var.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.tuple-element.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"expression-operator-expression\": {\n\t\t\t\"begin\": \"\\\\b(checked|unchecked|nameof)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.$1.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-operator-expression\": {\n\t\t\t\"begin\": \"\\\\b(default|sizeof|typeof)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.$1.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"default-literal-expression\": {\n\t\t\t\"match\": \"\\\\b(default)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.default.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"throw-expression\": {\n\t\t\t\"match\": \"\\\\b(throw)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.throw.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"interpolated-string\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\\$\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\")|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"verbatim-interpolated-string\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"(?:\\\\$@|@\\\\$)\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"(?=[^\\\"])\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#verbatim-string-character-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolation\": {\n\t\t\t\"name\": \"meta.interpolation.cs\",\n\t\t\t\"begin\": \"(?<=[^\\\\{]|^)((?:\\\\{\\\\{)*)(\\\\{)(?=[^\\\\{])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw-interpolated-string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolated-string-five-or-more-quote-one-or-more-interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolated-string-three-or-more-quote-three-or-more-interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolated-string-quadruple-quote-double-interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolated-string-quadruple-quote-single-interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolated-string-triple-quote-double-interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolated-string-triple-quote-single-interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw-interpolated-string-triple-quote-single-interpolation\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\\$\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw-interpolated-string-triple-quote-double-interpolation\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\\$\\\\$\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-raw-interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw-interpolated-string-quadruple-quote-single-interpolation\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\\$\\\"\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw-interpolated-string-quadruple-quote-double-interpolation\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\\$\\\\$\\\"\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-raw-interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw-interpolated-string-three-or-more-quote-three-or-more-interpolation\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\\$\\\\$\\\\$+\\\"\\\"\\\"+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"+\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"raw-interpolated-string-five-or-more-quote-one-or-more-interpolation\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\\$+\\\"\\\"\\\"\\\"\\\"+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\\\"\\\"+\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"raw-interpolation\": {\n\t\t\t\"name\": \"meta.interpolation.cs\",\n\t\t\t\"begin\": \"(?<=[^\\\\{]|^)((?:\\\\{)*)(\\\\{)(?=[^\\\\{])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-raw-interpolation\": {\n\t\t\t\"name\": \"meta.interpolation.cs\",\n\t\t\t\"begin\": \"(?<=[^\\\\{][^\\\\{]|^)((?:\\\\{)*)(\\\\{\\\\{)(?=[^\\\\{])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#boolean-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#null-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#char-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-string-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#verbatim-string-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tuple-literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"boolean-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.true.cs\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\btrue\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.false.cs\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\bfalse\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"null-literal\": {\n\t\t\t\"name\": \"constant.language.null.cs\",\n\t\t\t\"match\": \"(?<!\\\\.)\\\\bnull\\\\b\"\n\t\t},\n\t\t\"numeric-literal\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_]|_)|(?<=[eE])[+-]|\\\\.\\\\d)*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?<!_)([eE])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?([fFdDmM](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cs\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.decimals.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cs\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.exponent.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cs\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.suffix.cs\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01_](?:[01_]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.preffix.binary.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cs\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.suffix.cs\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.preffix.hex.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hex.cs\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.suffix.cs\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?<!_)([eE])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cs\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.exponent.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cs\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cs\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.separator.thousands.cs\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.suffix.cs\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_]|_)|(?<=[eE])[+-]|\\\\.\\\\d)+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"char-literal\": {\n\t\t\t\"name\": \"string.quoted.single.cs\",\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.char.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\')|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.char.end.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#char-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"char-character-escape\": {\n\t\t\t\"name\": \"constant.character.escape.cs\",\n\t\t\t\"match\": \"\\\\\\\\(x[0-9a-fA-F]{1,4}|u[0-9a-fA-F]{4}|.)\"\n\t\t},\n\t\t\"string-literal\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"(?<!@)\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\")|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-character-escape\": {\n\t\t\t\"name\": \"constant.character.escape.cs\",\n\t\t\t\"match\": \"\\\\\\\\(x[0-9a-fA-F]{1,4}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|.)\"\n\t\t},\n\t\t\"verbatim-string-literal\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"@\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"(?=[^\\\"])\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#verbatim-string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"verbatim-string-character-escape\": {\n\t\t\t\"name\": \"constant.character.escape.cs\",\n\t\t\t\"match\": \"\\\"\\\"\"\n\t\t},\n\t\t\"raw-string-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-string-literal-more\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-string-literal-quadruple\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-string-literal-triple\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw-string-literal-triple\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"raw-string-literal-quadruple\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\"\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"raw-string-literal-more\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"begin\": \"\\\"\\\"\\\"\\\"\\\"+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\\\"\\\"+\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"tuple-literal\": {\n\t\t\t\"begin\": \"(\\\\()(?=.*[:,])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tuple-literal-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tuple-literal-element\": {\n\t\t\t\"begin\": \"(?x)\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\n(?=:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.tuple-element.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"assignment-expression\": {\n\t\t\t\"begin\": \"(?:\\\\*|/|%|\\\\+|-|\\\\?\\\\?|\\\\&|\\\\^|<<|>>>?|\\\\|)?=(?!=|>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#assignment-operators\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[,\\\\)\\\\];}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ref-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assignment-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cs\",\n\t\t\t\t\t\"match\": \"\\\\*=|/=|%=|\\\\+=|-=|\\\\?\\\\?=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cs\",\n\t\t\t\t\t\"match\": \"\\\\&=|\\\\^=|<<=|>>>?=|\\\\|=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cs\",\n\t\t\t\t\t\"match\": \"\\\\=\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.cs\",\n\t\t\t\t\t\"match\": \"<<|>>>?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.cs\",\n\t\t\t\t\t\"match\": \"==|!=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.relational.cs\",\n\t\t\t\t\t\"match\": \"<=|>=|<|>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.logical.cs\",\n\t\t\t\t\t\"match\": \"\\\\!|&&|\\\\|\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.cs\",\n\t\t\t\t\t\"match\": \"\\\\&|~|\\\\^|\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.cs\",\n\t\t\t\t\t\"match\": \"--\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.increment.cs\",\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cs\",\n\t\t\t\t\t\"match\": \"\\\\+|-(?!>)|\\\\*|/|%\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.null-coalescing.cs\",\n\t\t\t\t\t\"match\": \"\\\\?\\\\?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.range.cs\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"with-expression\": {\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(with)\\\\b\\\\s*(?=\\\\{|//|/\\\\*|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.with.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#initializer-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"conditional-operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.question-mark.cs\",\n\t\t\t\t\t\"match\": \"\\\\?(?!\\\\?|\\\\s*[.\\\\[])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.colon.cs\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"await-expression\": {\n\t\t\t\"name\": \"keyword.operator.expression.await.cs\",\n\t\t\t\"match\": \"(?<!\\\\.\\\\s*)\\\\b(await)\\\\b\"\n\t\t},\n\t\t\"parenthesized-expression\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"initializer-expression\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"identifier\": {\n\t\t\t\"name\": \"variable.other.readwrite.cs\",\n\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t},\n\t\t\"cast-expression\": {\n\t\t\t\"match\": \"(?x)\\n(\\\\()\\\\s*\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s*\\n(\\\\))(?=\\\\s*-*!*@?[_[:alnum:]\\\\(])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"as-expression\": {\n\t\t\t\"match\": \"(?x)\\n(?<!\\\\.)\\\\b(as)\\\\b\\\\s*\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?(?!\\\\?))? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        \\\\s*(?:,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      (?:\\\\s*\\\\?(?!\\\\?))? # arrays can be nullable reference types\\n    )*\\n  )\\n)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.as.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"language-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.language.$1.cs\",\n\t\t\t\t\t\"match\": \"\\\\b(base|this)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.$1.cs\",\n\t\t\t\t\t\"match\": \"\\\\b(value)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"invocation-expression\": {\n\t\t\t\"begin\": \"(?x)\\n(?:\\n  (?:(\\\\?)\\\\s*)?                                    # preceding null-conditional operator?\\n  (\\\\.)\\\\s*|                                        # preceding dot?\\n  (->)\\\\s*                                         # preceding pointer arrow?\\n)?\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*                  # method name\\n(\\n  <\\n  (?<type_args>\\n    [^<>()]|\\n    \\\\((?:[^<>()]|<[^<>()]*>|\\\\([^<>()]*\\\\))*\\\\)|\\n    <\\\\g<type_args>*>\\n  )*\\n  >\\\\s*\\n)?                                                # type arguments\\n(?=\\\\()                                            # open paren of argument list\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.null-conditional.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.pointer.cs\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"element-access-expression\": {\n\t\t\t\"begin\": \"(?x)\\n(?:\\n  (?:(\\\\?)\\\\s*)?  # preceding null-conditional operator?\\n  (\\\\.)\\\\s*|      # preceding dot?\\n  (->)\\\\s*       # preceding pointer arrow?\\n)?\\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*)? # property name\\n(?:(\\\\?)\\\\s*)?                        # null-conditional operator?\\n(?=\\\\[)                              # open bracket of argument list\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.null-conditional.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.pointer.cs\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.other.object.property.cs\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.null-conditional.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\])(?!\\\\s*\\\\[)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracketed-argument-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member-access-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?:\\n  (?:(\\\\?)\\\\s*)?                    # preceding null-conditional operator?\\n  (\\\\.)\\\\s*|                        # preceding dot?\\n  (->)\\\\s*                         # preceding pointer arrow?\\n)\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*  # property name\\n(?![_[:alnum:]]|\\\\(|(\\\\?)?\\\\[|<)     # next character is not alpha-numeric, nor a (, [, or <. Also, test for ?[\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.null-conditional.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.pointer.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\.)?\\\\s*\\n(@?[_[:alpha:]][_[:alnum:]]*)\\n(?<type_params>\\\\s*<([^<>]|\\\\g<type_params>)+>\\\\s*)\\n(?=\\n  (\\\\s*\\\\?)?\\n  \\\\s*\\\\.\\\\s*@?[_[:alpha:]][_[:alnum:]]*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(@?[_[:alpha:]][_[:alnum:]]*)\\n(?=\\n  \\\\s*(?:(?:\\\\?\\\\s*)?\\\\.|->)\\n  \\\\s*@?[_[:alpha:]][_[:alnum:]]*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-creation-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-creation-expression-with-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-creation-expression-with-no-parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-creation-expression-with-parameters\": {\n\t\t\t\"begin\": \"(?x)\\n(new)(?:\\\\s+\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n))?\\\\s*\\n(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.new.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-creation-expression-with-no-parameters\": {\n\t\t\t\"match\": \"(?x)\\n(new)\\\\s+\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s*\\n(?=\\\\{|//|/\\\\*|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.new.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"array-creation-expression\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b(new|stackalloc)\\\\b\\\\s*\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)?\\\\s*\\n(?=\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.$1.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracketed-argument-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous-object-creation-expression\": {\n\t\t\t\"begin\": \"\\\\b(new)\\\\b\\\\s*(?=\\\\{|//|/\\\\*|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.new.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#initializer-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracketed-parameter-list\": {\n\t\t\t\"begin\": \"(?=(\\\\[))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=(\\\\]))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=\\\\])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parenthesized-parameter-list\": {\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-section\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter\": {\n\t\t\t\"match\": \"(?x)\\n(?:(?:\\\\b(ref|params|out|in|this)\\\\b)\\\\s+)?\\n(?<type_name>\\n  (?:\\n    (?:ref\\\\s+)?   # ref return\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^()]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$1.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.parameter.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"argument-list\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#named-argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracketed-argument-list\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#named-argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"named-argument\": {\n\t\t\t\"begin\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.parameter.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=(,|\\\\)|\\\\]))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"argument\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.$1.cs\",\n\t\t\t\t\t\"match\": \"\\\\b(ref|in)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(out)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.out.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|\\\\)|\\\\])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declaration-expression-local\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"query-expression\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b(from)\\\\b\\\\s*\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)?\\n\\\\s+(\\\\g<identifier>)\\\\b\\\\s*\\n\\\\b(in)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.from.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.range-variable.cs\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.in.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"query-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#let-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#join-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#orderby-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#select-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#group-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"let-clause\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b(let)\\\\b\\\\s*\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*\\n(=)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.let.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.range-variable.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"where-clause\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b(where)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.where.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"join-clause\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b(join)\\\\b\\\\s*\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)?\\n\\\\s+(\\\\g<identifier>)\\\\b\\\\s*\\n\\\\b(in)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.join.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.range-variable.cs\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.in.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#join-on\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#join-equals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#join-into\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"join-on\": {\n\t\t\t\"match\": \"\\\\b(on)\\\\b\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.on.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"join-equals\": {\n\t\t\t\"match\": \"\\\\b(equals)\\\\b\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.equals.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"join-into\": {\n\t\t\t\"match\": \"(?x)\\n\\\\b(into)\\\\b\\\\s*\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.into.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.range-variable.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"orderby-clause\": {\n\t\t\t\"begin\": \"\\\\b(orderby)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.orderby.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ordering-direction\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ordering-direction\": {\n\t\t\t\"match\": \"\\\\b(ascending|descending)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.$1.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"select-clause\": {\n\t\t\t\"begin\": \"\\\\b(select)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.select.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"group-clause\": {\n\t\t\t\"begin\": \"\\\\b(group)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.group.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#group-by\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#group-into\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#query-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"group-by\": {\n\t\t\t\"match\": \"\\\\b(by)\\\\b\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.by.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"group-into\": {\n\t\t\t\"match\": \"(?x)\\n\\\\b(into)\\\\b\\\\s*\\n(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.query.into.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.range-variable.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"anonymous-method-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n((?:\\\\b(?:async|static)\\\\b\\\\s*)*)\\n(?:\\n  (@?[_[:alpha:]][_[:alnum:]]*)\\\\b|\\n  (\\\\()\\n    (?<tuple>(?:[^()]|\\\\(\\\\g<tuple>\\\\))*)\\n  (\\\\))\\n)\\\\s*\\n(=>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"async|static\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.$0.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.variable.parameter.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#explicit-anonymous-function-parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#implicit-anonymous-function-parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#default-argument\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arrow.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,;)}])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?={)\",\n\t\t\t\t\t\t\t\"end\": \"(?=[,;)}])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(ref)\\\\b|(?=\\\\S)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.ref.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=[,;)}])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n((?:\\\\b(?:async|static)\\\\b\\\\s*)*)\\n\\\\b(delegate)\\\\b\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"async|static\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.$0.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.delegate.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=})|(?=[,;)}])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#explicit-anonymous-function-parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"explicit-anonymous-function-parameter\": {\n\t\t\t\"match\": \"(?x)\\n(?:\\\\b(ref|params|out|in)\\\\b\\\\s*)?\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args><(?:[^<>]|\\\\g<type_args>)*>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^()]|\\\\g<tuple>)*\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\\\s*\\n\\\\b(\\\\g<identifier>)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$1.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.parameter.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"implicit-anonymous-function-parameter\": {\n\t\t\t\"match\": \"\\\\@?[_[:alpha:]][_[:alnum:]]*\\\\b\",\n\t\t\t\"name\": \"entity.name.variable.parameter.cs\"\n\t\t},\n\t\t\"default-argument\": {\n\t\t\t\"begin\": \"=\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=,|\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ref-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#readonly-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tuple-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-builtin\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-array-suffix\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-nullable-suffix\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-pointer-suffix\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ref-modifier\": {\n\t\t\t\"name\": \"storage.modifier.ref.cs\",\n\t\t\t\"match\": \"\\\\bref\\\\b\"\n\t\t},\n\t\t\"readonly-modifier\": {\n\t\t\t\"name\": \"storage.modifier.readonly.cs\",\n\t\t\t\"match\": \"\\\\breadonly\\\\b\"\n\t\t},\n\t\t\"tuple-type\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tuple-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tuple-element\": {\n\t\t\t\"match\": \"(?x)\\n(?<type_name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name_and_type_args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type_args>\\\\s*<(?:[^<>]|\\\\g<type_args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name_and_type_args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s* # array suffix?\\n      \\\\[\\n        (?:\\\\s*,\\\\s*)* # commata for multi-dimensional arrays\\n      \\\\]\\n      \\\\s*\\n      (?:\\\\?)? # arrays can be nullable reference types\\n      \\\\s*\\n    )*\\n  )\\n)\\n(?:(?<tuple_name>\\\\g<identifier>)\\\\b)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.tuple-element.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"type-builtin\": {\n\t\t\t\"match\": \"\\\\b(bool|s?byte|u?short|n?u?int|u?long|float|double|decimal|char|string|object|void|dynamic)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.type.$1.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"type-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(\\\\:\\\\:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.coloncolon.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(\\\\.)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\.)\\\\s*(@?[_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.cs\",\n\t\t\t\t\t\"match\": \"@?[_[:alpha:]][_[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-arguments\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-array-suffix\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#intrusive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-nullable-suffix\": {\n\t\t\t\"match\": \"\\\\?\",\n\t\t\t\"name\": \"punctuation.separator.question-mark.cs\"\n\t\t},\n\t\t\"type-pointer-suffix\": {\n\t\t\t\"match\": \"\\\\*\",\n\t\t\t\"name\": \"punctuation.separator.asterisk.cs\"\n\t\t},\n\t\t\"operator-assignment\": {\n\t\t\t\"name\": \"keyword.operator.assignment.cs\",\n\t\t\t\"match\": \"(?<!=|!)(=)(?!=)\"\n\t\t},\n\t\t\"punctuation-comma\": {\n\t\t\t\"name\": \"punctuation.separator.comma.cs\",\n\t\t\t\"match\": \",\"\n\t\t},\n\t\t\"punctuation-semicolon\": {\n\t\t\t\"name\": \"punctuation.terminator.statement.cs\",\n\t\t\t\"match\": \";\"\n\t\t},\n\t\t\"punctuation-accessor\": {\n\t\t\t\"name\": \"punctuation.accessor.cs\",\n\t\t\t\"match\": \"\\\\.\"\n\t\t},\n\t\t\"intrusive\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor\": {\n\t\t\t\"name\": \"meta.preprocessor.cs\",\n\t\t\t\"begin\": \"^\\\\s*(\\\\#)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.hash.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-define-or-undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-if-or-elif\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-else-or-endif\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-warning-or-error\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-region\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-endregion\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-load\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-pragma-warning\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-pragma-checksum\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-define-or-undef\": {\n\t\t\t\"match\": \"\\\\b(?:(define)|(undef))\\\\b\\\\s*\\\\b([_[:alpha:]][_[:alnum:]]*)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.define.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.undef.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.preprocessor.symbol.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preprocessor-if-or-elif\": {\n\t\t\t\"begin\": \"\\\\b(?:(if)|(elif))\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.if.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.elif.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-else-or-endif\": {\n\t\t\t\"match\": \"\\\\b(?:(else)|(endif))\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.else.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.endif.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preprocessor-warning-or-error\": {\n\t\t\t\"match\": \"\\\\b(?:(warning)|(error))\\\\b\\\\s*(.*)(?=$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.warning.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.error.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"string.unquoted.preprocessor.message.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preprocessor-load\": {\n\t\t\t\"begin\": \"\\\\b(load)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.load.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\"[^\\\"]*\\\\\\\"\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-r\": {\n\t\t\t\"begin\": \"\\\\b(r)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.r.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\"[^\\\"]*\\\\\\\"\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-region\": {\n\t\t\t\"match\": \"\\\\b(region)\\\\b\\\\s*(.*)(?=$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.region.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.unquoted.preprocessor.message.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preprocessor-endregion\": {\n\t\t\t\"match\": \"\\\\b(endregion)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.endregion.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preprocessor-line\": {\n\t\t\t\"begin\": \"\\\\b(line)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.line.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:(default|hidden))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.preprocessor.default.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.preprocessor.hidden.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[0-9]+\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\"[^\\\"]*\\\\\\\"\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-pragma-warning\": {\n\t\t\t\"match\": \"\\\\b(pragma)\\\\b\\\\s*\\\\b(warning)\\\\b\\\\s*\\\\b(?:(disable)|(restore))\\\\b(\\\\s*[0-9]+(?:\\\\s*,\\\\s*[0-9]+)?)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.pragma.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.warning.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.disable.cs\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.restore.cs\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[0-9]+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preprocessor-pragma-checksum\": {\n\t\t\t\"match\": \"\\\\b(pragma)\\\\b\\\\s*\\\\b(checksum)\\\\b\\\\s*(\\\\\\\"[^\\\"]*\\\\\\\")\\\\s*(\\\\\\\"[^\\\"]*\\\\\\\")\\\\s*(\\\\\\\"[^\\\"]*\\\\\\\")\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.pragma.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.preprocessor.checksum.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preprocessor-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:(true)|(false)|([_[:alpha:]][_[:alnum:]]*))\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.boolean.true.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.boolean.false.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.variable.preprocessor.symbol.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(==|!=)|(\\\\!|&&|\\\\|\\\\|)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.cs\",\n\t\t\t\t\t\"begin\": \"(^\\\\s+)?(///)(?!/)\",\n\t\t\t\t\t\"while\": \"^(\\\\s*)(///)(?!/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#xml-doc-comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.cs\",\n\t\t\t\t\t\"begin\": \"(^\\\\s+)?(/\\\\*\\\\*)(?!/)\",\n\t\t\t\t\t\"end\": \"(^\\\\s+)?(\\\\*/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=(?~\\\\*/)$)\",\n\t\t\t\t\t\t\t\"while\": \"^(\\\\s*+)(\\\\*(?!/))?(?=(?~\\\\*/)$)\",\n\t\t\t\t\t\t\t\"whileCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.cs\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.cs\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#xml-doc-comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#xml-doc-comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.double-slash.cs\",\n\t\t\t\t\t\"begin\": \"(^\\\\s+)?(//).*$\",\n\t\t\t\t\t\"while\": \"^(\\\\s*)(//).*$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.cs\",\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"xml-doc-comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#xml-comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#xml-character-entity\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#xml-cdata\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#xml-tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"xml-tag\": {\n\t\t\t\"name\": \"meta.tag.cs\",\n\t\t\t\"begin\": \"(?x)\\n(</?)\\n(\\n  (?:\\n    ([-_[:alnum:]]+)\\n    (:)\\n  )?\\n  ([-_[:alnum:]]+)\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.cs\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.localname.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(/?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#xml-attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"xml-attribute\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?:^|\\\\s+)\\n(\\n  (?:\\n    ([-_[:alnum:]]+)\\n    (:)\\n  )?\\n  ([-_[:alnum:]]+)\\n)\\n(=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.namespace.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.localname.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.equals.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#xml-string\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"xml-cdata\": {\n\t\t\t\"name\": \"string.unquoted.cdata.cs\",\n\t\t\t\"begin\": \"<!\\\\[CDATA\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\\\\]>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"xml-string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.single.cs\",\n\t\t\t\t\t\"begin\": \"\\\\'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#xml-character-entity\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\t\t\"begin\": \"\\\\\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#xml-character-entity\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"xml-character-entity\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.entity.cs\",\n\t\t\t\t\t\"match\": \"(?x)\\n(&)\\n(\\n  (?:[[:alpha:]:_][[:alnum:]:_.-]*)|\\n  (?:\\\\#[[:digit:]]+)|\\n  (?:\\\\#x[[:xdigit:]]+)\\n)\\n(;)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.bad-ampersand.cs\",\n\t\t\t\t\t\"match\": \"&\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"xml-comment\": {\n\t\t\t\"name\": \"comment.block.cs\",\n\t\t\t\"begin\": \"<!--\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"-->\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/css/.vscode/launch.json",
    "content": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Launch Grammar\",\n      \"type\": \"extensionHost\",\n      \"request\": \"launch\",\n      \"runtimeExecutable\": \"${execPath}\",\n      \"args\": [\n        \"--extensionDevelopmentPath=${workspaceRoot}\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "extensions/css/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n.vscode"
  },
  {
    "path": "extensions/css/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"microsoft/vscode-css\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/vscode-css\",\n\t\t\t\t\t\"commitHash\": \"a927fe2f73927bf5c25d0b0c4dd0e63d69fd8887\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"MIT License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) Microsoft Corporation.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining\",\n\t\t\t\t\"a copy of this software and associated documentation files (the\",\n\t\t\t\t\"\\\"Software\\\"), to deal in the Software without restriction, including\",\n\t\t\t\t\"without limitation the rights to use, copy, modify, merge, publish,\",\n\t\t\t\t\"distribute, sublicense, and/or sell copies of the Software, and to\",\n\t\t\t\t\"permit persons to whom the Software is furnished to do so, subject to\",\n\t\t\t\t\"the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be\",\n\t\t\t\t\"included in all copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\",\n\t\t\t\t\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\",\n\t\t\t\t\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\",\n\t\t\t\t\"NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\",\n\t\t\t\t\"LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\",\n\t\t\t\t\"OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\",\n\t\t\t\t\"WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\",\n\t\t\t\t\"\",\n\t\t\t\t\"--------------------------------------------------------------------\",\n\t\t\t\t\"\",\n\t\t\t\t\"This package was derived from a TextMate bundle located at\",\n\t\t\t\t\"https://github.com/textmate/css.tmbundle and distributed under the following\",\n\t\t\t\t\"license, located in `README.mdown`:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\"\n\t\t\t],\n\t\t\t\"license\": \"MIT License\",\n\t\t\t\"description\": \"The file syntaxes/css.tmLanguage.json was derived from https://github.com/atom/language-css which was originally converted from the TextMate bundle https://github.com/textmate/css.tmbundle.\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/css/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [\"/*\", \"*/\"]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"[\", \"close\": \"]\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"(\", \"close\": \")\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*\\\\/\\\\*\\\\s*#region\\\\b\\\\s*(.*?)\\\\s*\\\\*\\\\/\",\n\t\t\t\"end\": \"^\\\\s*\\\\/\\\\*\\\\s*#endregion\\\\b.*\\\\*\\\\/\"\n\t\t}\n\t},\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"(^.*\\\\{[^}]*$)\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*\\\\}\"\n\t},\n\t\"wordPattern\": \"(#?-?\\\\d*\\\\.\\\\d\\\\w*%?)|(::?[\\\\w-]*(?=[^,{;]*[,{]))|(([@#.!])?[\\\\w-?]+%?|[@#!.])\"\n}\n"
  },
  {
    "path": "extensions/css/package.json",
    "content": "{\n  \"name\": \"css\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin microsoft/vscode-css grammars/css.cson ./syntaxes/css.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"css\",\n        \"aliases\": [\n          \"CSS\",\n          \"css\"\n        ],\n        \"extensions\": [\n          \".css\"\n        ],\n        \"mimetypes\": [\n          \"text/css\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"css\",\n        \"scopeName\": \"source.css\",\n        \"path\": \"./syntaxes/css.tmLanguage.json\",\n        \"tokenTypes\": {\n          \"meta.function.url string.quoted\": \"other\"\n        }\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/css/package.nls.json",
    "content": "{\n\t\"displayName\": \"CSS Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching for CSS, LESS and SCSS files.\"\n}\n"
  },
  {
    "path": "extensions/css/syntaxes/css.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/vscode-css/blob/master/grammars/css.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/vscode-css/commit/a927fe2f73927bf5c25d0b0c4dd0e63d69fd8887\",\n\t\"name\": \"CSS\",\n\t\"scopeName\": \"source.css\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#comment-block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#escapes\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#combinators\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#selector\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at-rules\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#rule-list\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"at-rules\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\A(?:\\\\xEF\\\\xBB\\\\xBF)?(?i:(?=\\\\s*@charset\\\\b))\",\n\t\t\t\t\t\"end\": \";|(?=$)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.charset.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.not-lowercase.charset.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.leading-whitespace.charset.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.no-whitespace.charset.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.whitespace.charset.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.not-double-quoted.charset.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unclosed-string.charset.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unexpected-characters.charset.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?x)        # Possible errors:\\n\\\\G\\n((?!@charset)@\\\\w+)   # Not lowercase (@charset is case-sensitive)\\n|\\n\\\\G(\\\\s+)             # Preceding whitespace\\n|\\n(@charset\\\\S[^;]*)    # No whitespace after @charset\\n|\\n(?<=@charset)         # Before quoted charset name\\n(\\\\x20{2,}|\\\\t+)      # More than one space used, or a tab\\n|\\n(?<=@charset\\\\x20)    # Beginning of charset name\\n([^\\\";]+)              # Not double-quoted\\n|\\n(\\\"[^\\\"]+$)             # Unclosed quote\\n|\\n(?<=\\\")                # After charset name\\n([^;]+)               # Unexpected junk instead of semicolon\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.charset.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"((@)charset)(?=\\\\s)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"|$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?:\\\\G|^)(?=(?:[^\\\"])+$)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unclosed.string.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((@)import)(?:\\\\s+|$|(?=['\\\"]|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.import.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \";\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.import.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\\\\s*(?=/\\\\*)\",\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\*/)\\\\s*\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#url\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#media-query-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((@)font-face)(?=\\\\s*|{|/\\\\*|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.font-face.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.font-face.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(@)page(?=[\\\\s:{]|/\\\\*|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.page.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*($|[:{;]))\",\n\t\t\t\t\t\"name\": \"meta.at-rule.page.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=@media(\\\\s|\\\\(|/\\\\*|$))\",\n\t\t\t\t\t\"end\": \"(?<=})(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)\\\\G(@)media\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.media.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*[{;])\",\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.media.header.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#media-query-list\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.media.begin.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.media.end.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.media.body.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=@counter-style([\\\\s'\\\"{;]|/\\\\*|$))\",\n\t\t\t\t\t\"end\": \"(?<=})(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)\\\\G(@)counter-style\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.counter-style.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*{)\",\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.counter-style.header.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?:[-a-zA-Z_]    | [^\\\\x00-\\\\x7F])     # First letter\\n(?:[-a-zA-Z0-9_] | [^\\\\x00-\\\\x7F]      # Remainder of identifier\\n  |\\\\\\\\(?:[0-9a-fA-F]{1,6}|.)\\n)*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.style-name.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.property-list.begin.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.property-list.end.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.counter-style.body.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#rule-list-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=@document([\\\\s'\\\"{;]|/\\\\*|$))\",\n\t\t\t\t\t\"end\": \"(?<=})(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)\\\\G(@)document\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.document.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*[{;])\",\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.document.header.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(url-prefix|domain|regexp)(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.function.document-rule.css\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.function.document-rule.css\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"[^'\\\")\\\\s]+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.document-rule.css\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#url\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#commas\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.document.begin.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.document.end.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.document.body.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=@(?:-(?:webkit|moz|o|ms)-)?keyframes([\\\\s'\\\"{;]|/\\\\*|$))\",\n\t\t\t\t\t\"end\": \"(?<=})(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)\\\\G(@)(?:-(?:webkit|moz|o|ms)-)?keyframes\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.keyframes.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*{)\",\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.keyframes.header.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?:[-a-zA-Z_]    | [^\\\\x00-\\\\x7F])     # First letter\\n(?:[-a-zA-Z0-9_] | [^\\\\x00-\\\\x7F]      # Remainder of identifier\\n  |\\\\\\\\(?:[0-9a-fA-F]{1,6}|.)\\n)*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.keyframe-list.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.keyframes.begin.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.keyframes.end.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.keyframes.body.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.keyframe-offset.css\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.keyframe-offset.percentage.css\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(?xi)\\n(?<![\\\\w-]) (from|to) (?![\\\\w-])         # Keywords for 0% | 100%\\n|\\n([-+]?(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)%)     # Percentile value\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#rule-list\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=@supports(\\\\s|\\\\(|/\\\\*|$))\",\n\t\t\t\t\t\"end\": \"(?<=})(?!\\\\G)|(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)\\\\G(@)supports\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.supports.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*[{;])\",\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.supports.header.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#feature-query-operators\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#feature-query\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.supports.begin.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.supports.end.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.supports.body.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((@)(-(ms|o)-)?viewport)(?=[\\\\s'\\\"{;]|/\\\\*|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.viewport.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*[@{;])\",\n\t\t\t\t\t\"name\": \"meta.at-rule.viewport.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((@)font-feature-values)(?=[\\\\s'\\\"{;]|/\\\\*|$)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.font-feature-values.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.font-name.css\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*[@{;])\",\n\t\t\t\t\t\"name\": \"meta.at-rule.font-features.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#font-features\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((@)namespace)(?=[\\\\s'\\\";]|/\\\\*|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.namespace.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \";|(?=[@{])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.namespace.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#url\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.namespace-prefix.css\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?xi)\\n(?:\\\\G|^|(?<=\\\\s))\\n(?=\\n  (?<=\\\\s|^)                             # Starts with whitespace\\n  (?:[-a-zA-Z_]|[^\\\\x00-\\\\x7F])          # Then a valid identifier character\\n  |\\n  \\\\s*                                   # Possible adjoining whitespace\\n  /\\\\*(?:[^*]|\\\\*[^/])*\\\\*/              # Injected comment\\n)\\n(.*?)                                    # Grouped to embed #comment-block\\n(\\n  (?:[-a-zA-Z_]    | [^\\\\x00-\\\\x7F])     # First letter\\n  (?:[-a-zA-Z0-9_] | [^\\\\x00-\\\\x7F]      # Remainder of identifier\\n    |\\\\\\\\(?:[0-9a-fA-F]{1,6}|.)\\n  )*\\n)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=@[\\\\w-]+[^;]+;s*$)\",\n\t\t\t\t\t\"end\": \"(?<=;)(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)\\\\G(@)[\\\\w-]+\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \";\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.header.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=@[\\\\w-]+(\\\\s|\\\\(|{|/\\\\*|$))\",\n\t\t\t\t\t\"end\": \"(?<=})(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)\\\\G(@)[\\\\w-]+\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*[{;])\",\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.header.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.begin.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.end.bracket.curly.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.body.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"color-keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?<![\\\\w-])(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"support.constant.color.w3c-standard-color-name.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi) (?<![\\\\w-])\\n(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood\\n|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan\\n|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange\\n|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise\\n|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen\\n|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki\\n|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow\\n|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray\\n|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue\\n|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise\\n|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered\\n|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum\\n|powderblue|rebeccapurple|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell\\n|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato\\n|transparent|turquoise|violet|wheat|whitesmoke|yellowgreen)\\n(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"support.constant.color.w3c-extended-color-name.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?<![\\\\w-])currentColor(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"support.constant.color.current.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi) (?<![\\\\w-])\\n(ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow\\n|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption\\n|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow\\n|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText)\\n(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"invalid.deprecated.color.system.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"combinators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"/deep/|>>>\",\n\t\t\t\t\t\"name\": \"invalid.deprecated.combinator.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \">>|>|\\\\+|~\",\n\t\t\t\t\t\"name\": \"keyword.operator.combinator.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"commas\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.list.comma.css\"\n\t\t},\n\t\t\"comment-block\": {\n\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.css\"\n\t\t},\n\t\t\"escapes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[0-9a-fA-F]{1,6}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.codepoint.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\\\\\$\\\\s*\",\n\t\t\t\t\t\"end\": \"^(?<!\\\\G)\",\n\t\t\t\t\t\"name\": \"constant.character.escape.newline.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"feature-query\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.condition.begin.bracket.round.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.condition.end.bracket.round.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.feature-query.css\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#feature-query-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#feature-query\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"feature-query-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?<=[\\\\s()]|^|\\\\*/)(and|not|or)(?=[\\\\s()]|/\\\\*|$)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.feature.$1.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rule-list-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"font-features\": {\n\t\t\t\"begin\": \"(?xi)\\n((@)(annotation|character-variant|ornaments|styleset|stylistic|swash))\\n(?=[\\\\s@'\\\"{;]|/\\\\*|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.${3:/downcase}.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})\",\n\t\t\t\"name\": \"meta.at-rule.${3:/downcase}.css\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.property-list.begin.bracket.curly.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.property-list.end.bracket.curly.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.property-list.font-feature.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?: [-a-zA-Z_]    | [^\\\\x00-\\\\x7F] )   # First letter\\n(?: [-a-zA-Z0-9_] | [^\\\\x00-\\\\x7F]     # Remainder of identifier\\n  | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)\\n)*\",\n\t\t\t\t\t\t\t\"name\": \"variable.font-feature.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(calc)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.calc.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.calc.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[*/]|(?<=\\\\s|^)[-+](?=\\\\s|$)\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(rgba?|rgb|hsla?|hsl|hwb|lab|oklab|lch|oklch|color)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.misc.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.color.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?xi) (?<![\\\\w-])\\n(\\n  (?:-webkit-|-moz-|-o-)?    # Accept prefixed/historical variants\\n  (?:repeating-)?            # \\\"Repeating\\\"-type gradient\\n  (?:linear|radial|conic)    # Shape\\n  -gradient\\n)\\n(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.gradient.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.gradient.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)(?<![\\\\w-])(from|to|at|in|hue)(?![\\\\w-])\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.gradient.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(-webkit-gradient)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.gradient.function.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.gradient.invalid.deprecated.gradient.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(from|to|color-stop)(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.function.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?xi) (?<![\\\\w-])\\n(annotation|attr|blur|brightness|character-variant|clamp|contrast|counters?\\n|cross-fade|drop-shadow|element|fit-content|format|grayscale|hue-rotate|color-mix\\n|image-set|invert|local|max|min|minmax|opacity|ornaments|repeat|saturate|sepia\\n|styleset|stylistic|swash|symbols\\n|cos|sin|tan|acos|asin|atan|atan2|hypot|sqrt|pow|log|exp|abs|sign)\\n(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.misc.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.misc.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)(?<=[,\\\\s\\\"]|\\\\*/|^)\\\\d+x(?=[\\\\s,\\\"')]|/\\\\*|$)\",\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.other.density.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^'\\\"),\\\\s]+\",\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.misc.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(circle|ellipse|inset|polygon|rect)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.shape.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.shape.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)(?<=\\\\s|^|\\\\*/)(at|round)(?=\\\\s|/\\\\*|$)\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.shape.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(cubic-bezier|steps)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.timing-function.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.timing-function.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)(?<![\\\\w-])(start|end)(?=\\\\s*\\\\)|$)\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.step-direction.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?xi) (?<![\\\\w-])\\n( (?:translate|scale|rotate)(?:[XYZ]|3D)?\\n| matrix(?:3D)?\\n| skew[XY]?\\n| perspective\\n)\\n(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#url\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?<![\\\\w-])(var)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.misc.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.variable.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.argument.css\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n--\\n(?:[-a-zA-Z_]    | [^\\\\x00-\\\\x7F])     # First letter\\n(?:[-a-zA-Z0-9_] | [^\\\\x00-\\\\x7F]      # Remainder of identifier\\n  |\\\\\\\\(?:[0-9a-fA-F]{1,6}|.)\\n)*\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functional-pseudo-classes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((:)dir)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)(?<![\\\\w-])(ltr|rtl)(?![\\\\w-])\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.text-direction.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((:)lang)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[(,\\\\s])[a-zA-Z]+(-[a-zA-Z0-9]*|\\\\\\\\(?:[0-9a-fA-F]{1,6}|.))*(?=[),\\\\s])\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.language-range.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\"\\\\s])[a-zA-Z*]+(-[a-zA-Z0-9*]*)*(?=[\\\"\\\\s])\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.language-range.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=['\\\\s])[a-zA-Z*]+(-[a-zA-Z0-9*]*)*(?=['\\\\s])\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.language-range.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#commas\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((:)(?:not|has|matches|where|is))(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#selector-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)((:)nth-(?:last-)?(?:child|of-type))(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)[+-]?(\\\\d+n?|n)(\\\\s*[+-]\\\\s*\\\\d+)?\",\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)even|odd\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.parity.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"media-features\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.type.property-name.media.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.type.property-name.media.css\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.vendored.property-name.media.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?xi)\\n(?<=^|\\\\s|\\\\(|\\\\*/)           # Preceded by whitespace, bracket or comment\\n(?:\\n  # Standardised features\\n  (\\n    (?:min-|max-)?            # Range features\\n    (?: height\\n      | width\\n      | aspect-ratio\\n      | color\\n      | color-index\\n      | monochrome\\n      | resolution\\n    )\\n    | grid                    # Discrete features\\n    | scan\\n    | orientation\\n    | display-mode\\n    | hover\\n  )\\n  |\\n  # Deprecated features\\n  (\\n    (?:min-|max-)?            # Deprecated in Media Queries 4\\n    device-\\n    (?: height\\n      | width\\n      | aspect-ratio\\n    )\\n  )\\n  |\\n  # Vendor extensions\\n  (\\n    (?:\\n      # Spec-compliant syntax\\n      [-_]\\n      (?: webkit              # Webkit/Blink\\n        | apple|khtml         # Webkit aliases\\n        | epub                # ePub3\\n        | moz                 # Gecko\\n        | ms                  # Microsoft\\n        | o                   # Presto (pre-Opera 15)\\n        | xv|ah|rim|atsc|     # Less common vendors\\n          hp|tc|wap|ro\\n      )\\n      |\\n      # Non-standard prefixes\\n      (?: mso                 # Microsoft Office\\n        | prince              # YesLogic\\n      )\\n    )\\n    -\\n    [\\\\w-]+                   # Feature name\\n    (?=                       # Terminates correctly\\n      \\\\s*                    # Possible whitespace\\n      (?:                     # Possible injected comment\\n        /\\\\*\\n        (?:[^*]|\\\\*[^/])*\\n        \\\\*/\\n      )?\\n      \\\\s*\\n      [:)]                    # Ends with a colon or closed bracket\\n    )\\n  )\\n)\\n(?=\\\\s|$|[><:=]|\\\\)|/\\\\*)     # Terminates cleanly\"\n\t\t},\n\t\t\"media-feature-keywords\": {\n\t\t\t\"match\": \"(?xi)\\n(?<=^|\\\\s|:|\\\\*/)\\n(?: portrait                  # Orientation\\n  | landscape\\n  | progressive               # Scan types\\n  | interlace\\n  | fullscreen                # Display modes\\n  | standalone\\n  | minimal-ui\\n  | browser\\n  | hover\\n)\\n(?=\\\\s|\\\\)|$)\",\n\t\t\t\"name\": \"support.constant.property-value.css\"\n\t\t},\n\t\t\"media-query\": {\n\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\"end\": \"(?=\\\\s*[{;])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#media-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?<=\\\\s|^|,|\\\\*/)(only|not)(?=\\\\s|{|/\\\\*|$)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.$1.media.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(?<=\\\\s|^|\\\\*/|\\\\))and(?=\\\\s|/\\\\*|$)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.and.media.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",(?:(?:\\\\s*,)+|(?=\\\\s*[;){]))\",\n\t\t\t\t\t\"name\": \"invalid.illegal.comma.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#commas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#media-features\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#media-feature-keywords\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \">=|<=|=|<|>\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(\\\\d+)\\\\s*(/)\\\\s*(\\\\d+)\",\n\t\t\t\t\t\t\t\"name\": \"meta.ratio.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"media-query-list\": {\n\t\t\t\"begin\": \"(?=\\\\s*[^{;])\",\n\t\t\t\"end\": \"(?=\\\\s*[{;])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#media-query\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"media-types\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.media.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.deprecated.constant.media.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?xi)\\n(?<=^|\\\\s|,|\\\\*/)\\n(?:\\n  # Valid media types\\n  (all|print|screen|speech)\\n  |\\n  # Deprecated in Media Queries 4: http://dev.w3.org/csswg/mediaqueries/#media-types\\n  (aural|braille|embossed|handheld|projection|tty|tv)\\n)\\n(?=$|[{,\\\\s;]|/\\\\*)\"\n\t\t},\n\t\t\"numeric-values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(#)(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})\\\\b\",\n\t\t\t\t\t\"name\": \"constant.other.color.rgb-value.hex.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.percentage.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.${2:/downcase}.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?xi) (?<![\\\\w-])\\n[-+]?                               # Sign indicator\\n\\n(?:                                 # Numerals\\n    [0-9]+ (?:\\\\.[0-9]+)?           # Integer/float with leading digits\\n  | \\\\.[0-9]+                       # Float without leading digits\\n)\\n\\n(?:                                 # Scientific notation\\n  (?<=[0-9])                        # Exponent must follow a digit\\n  E                                 # Exponent indicator\\n  [-+]?                             # Possible sign indicator\\n  [0-9]+                            # Exponent value\\n)?\\n\\n(?:                                 # Possible unit for data-type:\\n  (%)                               # - Percentage\\n  | ( deg|grad|rad|turn             # - Angle\\n    | Hz|kHz                        # - Frequency\\n    | ch|cm|em|ex|fr|in|mm|mozmm|   # - Length\\n      pc|pt|px|q|rem|rch|rex|rlh|\\n      ic|ric|rcap|vh|vw|vb|vi|svh|\\n      svw|svb|svi|dvh|dvw|dvb|dvi|\\n      lvh|lvw|lvb|lvi|vmax|vmin|\\n      cqw|cqi|cqh|cqb|cqmin|cqmax\\n    | dpi|dpcm|dppx                 # - Resolution\\n    | s|ms                          # - Time\\n    )\\n  \\\\b                               # Boundary checking intentionally lax to\\n)?                                  # facilitate embedding in CSS-like grammars\",\n\t\t\t\t\t\"name\": \"constant.numeric.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi) (?<![\\\\w-])\\n(above|absolute|active|add|additive|after-edge|alias|all|all-petite-caps|all-scroll|all-small-caps|alpha|alphabetic|alternate|alternate-reverse\\n|always|antialiased|auto|auto-fill|auto-fit|auto-pos|available|avoid|avoid-column|avoid-page|avoid-region|backwards|balance|baseline|before-edge|below|bevel\\n|bidi-override|blink|block|block-axis|block-start|block-end|bold|bolder|border|border-box|both|bottom|bottom-outside|break-all|break-word|bullets\\n|butt|capitalize|caption|cell|center|central|char|circle|clip|clone|close-quote|closest-corner|closest-side|col-resize|collapse|color|color-burn\\n|color-dodge|column|column-reverse|common-ligatures|compact|condensed|contain|content|content-box|contents|context-menu|contextual|copy|cover\\n|crisp-edges|crispEdges|crosshair|cyclic|dark|darken|dashed|decimal|default|dense|diagonal-fractions|difference|digits|disabled|disc|discretionary-ligatures\\n|distribute|distribute-all-lines|distribute-letter|distribute-space|dot|dotted|double|double-circle|downleft|downright|e-resize|each-line|ease|ease-in\\n|ease-in-out|ease-out|economy|ellipse|ellipsis|embed|end|evenodd|ew-resize|exact|exclude|exclusion|expanded|extends|extra-condensed|extra-expanded\\n|fallback|farthest-corner|farthest-side|fill|fill-available|fill-box|filled|fit-content|fixed|flat|flex|flex-end|flex-start|flip|flow-root|forwards|freeze\\n|from-image|full-width|geometricPrecision|georgian|grab|grabbing|grayscale|grid|groove|hand|hanging|hard-light|help|hidden|hide\\n|historical-forms|historical-ligatures|horizontal|horizontal-tb|hue|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space\\n|ideographic|inactive|infinite|inherit|initial|inline|inline-axis|inline-block|inline-end|inline-flex|inline-grid|inline-list-item|inline-start\\n|inline-table|inset|inside|inter-character|inter-ideograph|inter-word|intersect|invert|isolate|isolate-override|italic|jis04|jis78|jis83\\n|jis90|justify|justify-all|kannada|keep-all|landscape|large|larger|left|light|lighten|lighter|line|line-edge|line-through|linear|linearRGB\\n|lining-nums|list-item|local|loose|lowercase|lr|lr-tb|ltr|luminance|luminosity|main-size|mandatory|manipulation|manual|margin-box|match-parent\\n|match-source|mathematical|max-content|medium|menu|message-box|middle|min-content|miter|mixed|move|multiply|n-resize|narrower|ne-resize\\n|nearest-neighbor|nesw-resize|newspaper|no-change|no-clip|no-close-quote|no-common-ligatures|no-contextual|no-discretionary-ligatures\\n|no-drop|no-historical-ligatures|no-open-quote|no-repeat|none|nonzero|normal|not-allowed|nowrap|ns-resize|numbers|numeric|nw-resize|nwse-resize\\n|oblique|oldstyle-nums|open|open-quote|optimizeLegibility|optimizeQuality|optimizeSpeed|optional|ordinal|outset|outside|over|overlay|overline|padding\\n|padding-box|page|painted|pan-down|pan-left|pan-right|pan-up|pan-x|pan-y|paused|petite-caps|pixelated|plaintext|pointer|portrait|pre|pre-line\\n|pre-wrap|preserve-3d|progress|progressive|proportional-nums|proportional-width|proximity|radial|recto|region|relative|remove|repeat|repeat-[xy]\\n|reset-size|reverse|revert|ridge|right|rl|rl-tb|round|row|row-resize|row-reverse|row-severse|rtl|ruby|ruby-base|ruby-base-container|ruby-text\\n|ruby-text-container|run-in|running|s-resize|saturation|scale-down|screen|scroll|scroll-position|se-resize|semi-condensed|semi-expanded|separate\\n|sesame|show|sideways|sideways-left|sideways-lr|sideways-right|sideways-rl|simplified|slashed-zero|slice|small|small-caps|small-caption|smaller\\n|smooth|soft-light|solid|space|space-around|space-between|space-evenly|spell-out|square|sRGB|stacked-fractions|start|static|status-bar|swap\\n|step-end|step-start|sticky|stretch|strict|stroke|stroke-box|style|sub|subgrid|subpixel-antialiased|subtract|super|sw-resize|symbolic|table\\n|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row|table-row-group|tabular-nums|tb|tb-rl\\n|text|text-after-edge|text-before-edge|text-bottom|text-top|thick|thin|titling-caps|top|top-outside|touch|traditional|transparent|triangle\\n|ultra-condensed|ultra-expanded|under|underline|unicase|unset|upleft|uppercase|upright|use-glyph-orientation|use-script|verso|vertical\\n|vertical-ideographic|vertical-lr|vertical-rl|vertical-text|view-box|visible|visibleFill|visiblePainted|visibleStroke|w-resize|wait|wavy\\n|weight|whitespace|wider|words|wrap|wrap-reverse|x|x-large|x-small|xx-large|xx-small|y|zero|zoom-in|zoom-out)\\n(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi) (?<![\\\\w-])\\n(arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|cjk-ideographic\\n|decimal|decimal-leading-zero|devanagari|disc|disclosure-closed|disclosure-open|ethiopic-halehame-am\\n|ethiopic-halehame-ti-e[rt]|ethiopic-numeric|georgian|gujarati|gurmukhi|hangul|hangul-consonant|hebrew\\n|hiragana|hiragana-iroha|japanese-formal|japanese-informal|kannada|katakana|katakana-iroha|khmer\\n|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek\\n|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal\\n|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian\\n|upper-latin|upper-roman|urdu)\\n(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.list-style-type.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![\\\\w-])(?i:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[a-zA-Z-]+\",\n\t\t\t\t\t\"name\": \"support.constant.vendored.property-value.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![\\\\w-])(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system-ui|system|tahoma|times|trebuchet|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|utopia|verdana|webdings|sans-serif|serif|monospace)(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"support.constant.font-name.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-names\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi) (?<![\\\\w-])\\n(?:\\n  # Standard CSS\\n  accent-color|additive-symbols|align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration\\n  | animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|aspect-ratio|backdrop-filter\\n  | backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image\\n  | background-origin|background-position|background-position-[xy]|background-repeat|background-size|bleed|block-size|border\\n  | border-block-end|border-block-end-color|border-block-end-style|border-block-end-width|border-block-start|border-block-start-color\\n  | border-block-start-style|border-block-start-width|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius\\n  | border-bottom-style|border-bottom-width|border-collapse|border-color|border-end-end-radius|border-end-start-radius|border-image\\n  | border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-inline-end\\n  | border-inline-end-color|border-inline-end-style|border-inline-end-width|border-inline-start|border-inline-start-color\\n  | border-inline-start-style|border-inline-start-width|border-left|border-left-color|border-left-style|border-left-width\\n  | border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-start-end-radius\\n  | border-start-start-radius|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style\\n  | border-top-width|border-width|bottom|box-decoration-break|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side\\n  | caret-color|clear|clip|clip-path|clip-rule|color|color-adjust|color-interpolation-filters|color-scheme|column-count|column-fill|column-gap\\n  | column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|contain|container|container-name|container-type|content|counter-increment\\n  | counter-reset|cursor|direction|display|empty-cells|enable-background|fallback|fill|fill-opacity|fill-rule|filter|flex|flex-basis\\n  | flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|flood-color|flood-opacity|font|font-display|font-family\\n  | font-feature-settings|font-kerning|font-language-override|font-optical-sizing|font-size|font-size-adjust|font-stretch\\n  | font-style|font-synthesis|font-variant|font-variant-alternates|font-variant-caps|font-variant-east-asian|font-variant-ligatures\\n  | font-variant-numeric|font-variant-position|font-variation-settings|font-weight|gap|glyph-orientation-horizontal|glyph-orientation-vertical\\n  | grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-gap|grid-column-start\\n  | grid-gap|grid-row|grid-row-end|grid-row-gap|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows\\n  | hanging-punctuation|height|hyphens|image-orientation|image-rendering|image-resolution|ime-mode|initial-letter|initial-letter-align\\n  | inline-size|inset|inset-block|inset-block-end|inset-block-start|inset-inline|inset-inline-end|inset-inline-start|isolation\\n  | justify-content|justify-items|justify-self|kerning|left|letter-spacing|lighting-color|line-break|line-clamp|line-height|list-style\\n  | list-style-image|list-style-position|list-style-type|margin|margin-block|margin-block-end|margin-block-start|margin-bottom|margin-inline|margin-inline-end|margin-inline-start\\n  | margin-left|margin-right|margin-top|marker-end|marker-mid|marker-start|marks|mask|mask-border|mask-border-mode|mask-border-outset\\n  | mask-border-repeat|mask-border-slice|mask-border-source|mask-border-width|mask-clip|mask-composite|mask-image|mask-mode\\n  | mask-origin|mask-position|mask-repeat|mask-size|mask-type|max-block-size|max-height|max-inline-size|max-lines|max-width\\n  | max-zoom|min-block-size|min-height|min-inline-size|min-width|min-zoom|mix-blend-mode|negative|object-fit|object-position\\n  | offset|offset-anchor|offset-distance|offset-path|offset-position|offset-rotation|opacity|order|orientation|orphans\\n  | outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-anchor|overflow-block|overflow-inline\\n  | overflow-wrap|overflow-[xy]|overscroll-behavior|overscroll-behavior-block|overscroll-behavior-inline|overscroll-behavior-[xy]\\n  | pad|padding|padding-block|padding-block-end|padding-block-start|padding-bottom|padding-inline|padding-inline-end|padding-inline-start|padding-left\\n  | padding-right|padding-top|page-break-after|page-break-before|page-break-inside|paint-order|perspective|perspective-origin\\n  | place-content|place-items|place-self|pointer-events|position|prefix|quotes|range|resize|right|rotate|row-gap|ruby-align\\n  | ruby-merge|ruby-position|scale|scroll-behavior|scroll-margin|scroll-margin-block|scroll-margin-block-end|scroll-margin-block-start\\n  | scroll-margin-bottom|scroll-margin-inline|scroll-margin-inline-end|scroll-margin-inline-start|scroll-margin-left|scroll-margin-right\\n  | scroll-margin-top|scroll-padding|scroll-padding-block|scroll-padding-block-end|scroll-padding-block-start|scroll-padding-bottom\\n  | scroll-padding-inline|scroll-padding-inline-end|scroll-padding-inline-start|scroll-padding-left|scroll-padding-right\\n  | scroll-padding-top|scroll-snap-align|scroll-snap-coordinate|scroll-snap-destination|scroll-snap-stop|scroll-snap-type\\n  | scrollbar-color|scrollbar-gutter|scrollbar-width|shape-image-threshold|shape-margin|shape-outside|shape-rendering|size\\n  | speak-as|src|stop-color|stop-opacity|stroke|stroke-dasharray|stroke-dashoffset|stroke-linecap|stroke-linejoin|stroke-miterlimit\\n  | stroke-opacity|stroke-width|suffix|symbols|system|tab-size|table-layout|text-align|text-align-last|text-anchor|text-combine-upright\\n  | text-decoration|text-decoration-color|text-decoration-line|text-decoration-skip|text-decoration-skip-ink|text-decoration-style|text-decoration-thickness\\n  | text-emphasis|text-emphasis-color|text-emphasis-position|text-emphasis-style|text-indent|text-justify|text-orientation\\n  | text-overflow|text-rendering|text-shadow|text-size-adjust|text-transform|text-underline-offset|text-underline-position|top|touch-action|transform\\n  | transform-box|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function\\n  | translate|unicode-bidi|unicode-range|user-select|user-zoom|vertical-align|visibility|white-space|widows|width|will-change\\n  | word-break|word-spacing|word-wrap|writing-mode|z-index|zoom\\n\\n  # SVG attributes\\n  | alignment-baseline|baseline-shift|clip-rule|color-interpolation|color-interpolation-filters|color-profile\\n  | color-rendering|cx|cy|dominant-baseline|enable-background|fill|fill-opacity|fill-rule|flood-color|flood-opacity\\n  | glyph-orientation-horizontal|glyph-orientation-vertical|height|kerning|lighting-color|marker-end|marker-mid\\n  | marker-start|r|rx|ry|shape-rendering|stop-color|stop-opacity|stroke|stroke-dasharray|stroke-dashoffset|stroke-linecap\\n  | stroke-linejoin|stroke-miterlimit|stroke-opacity|stroke-width|text-anchor|width|x|y\\n\\n  # Not listed on MDN; presumably deprecated\\n  | adjust|after|align|align-last|alignment|alignment-adjust|appearance|attachment|azimuth|background-break\\n  | balance|baseline|before|bidi|binding|bookmark|bookmark-label|bookmark-level|bookmark-target|border-length\\n  | bottom-color|bottom-left-radius|bottom-right-radius|bottom-style|bottom-width|box|box-align|box-direction\\n  | box-flex|box-flex-group|box-lines|box-ordinal-group|box-orient|box-pack|break|character|collapse|column\\n  | column-break-after|column-break-before|count|counter|crop|cue|cue-after|cue-before|decoration|decoration-break\\n  | delay|display-model|display-role|down|drop|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust\\n  | drop-initial-before-align|drop-initial-size|drop-initial-value|duration|elevation|emphasis|family|fit|fit-position\\n  | flex-group|float-offset|gap|grid-columns|grid-rows|hanging-punctuation|header|hyphenate|hyphenate-after|hyphenate-before\\n  | hyphenate-character|hyphenate-lines|hyphenate-resource|icon|image|increment|indent|index|initial-after-adjust\\n  | initial-after-align|initial-before-adjust|initial-before-align|initial-size|initial-value|inline-box-align|iteration-count\\n  | justify|label|left-color|left-style|left-width|length|level|line|line-stacking|line-stacking-ruby|line-stacking-shift\\n  | line-stacking-strategy|lines|list|mark|mark-after|mark-before|marks|marquee|marquee-direction|marquee-play-count|marquee-speed\\n  | marquee-style|max|min|model|move-to|name|nav|nav-down|nav-index|nav-left|nav-right|nav-up|new|numeral|offset|ordinal-group\\n  | orient|origin|overflow-style|overhang|pack|page|page-policy|pause|pause-after|pause-before|phonemes|pitch|pitch-range\\n  | play-count|play-during|play-state|point|presentation|presentation-level|profile|property|punctuation|punctuation-trim\\n  | radius|rate|rendering-intent|repeat|replace|reset|resolution|resource|respond-to|rest|rest-after|rest-before|richness\\n  | right-color|right-style|right-width|role|rotation|rotation-point|rows|ruby|ruby-overhang|ruby-span|rule|rule-color\\n  | rule-style|rule-width|shadow|size|size-adjust|sizing|space|space-collapse|spacing|span|speak|speak-header|speak-numeral\\n  | speak-punctuation|speech|speech-rate|speed|stacking|stacking-ruby|stacking-shift|stacking-strategy|stress|stretch\\n  | string-set|style|style-image|style-position|style-type|target|target-name|target-new|target-position|text|text-height\\n  | text-justify|text-outline|text-replace|text-wrap|timing-function|top-color|top-left-radius|top-right-radius|top-style\\n  | top-width|trim|unicode|up|user-select|variant|voice|voice-balance|voice-duration|voice-family|voice-pitch|voice-pitch-range\\n  | voice-rate|voice-stress|voice-volume|volume|weight|white|white-space-collapse|word|wrap\\n)\\n(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"support.type.property-name.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![\\\\w-])(?i:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[a-zA-Z-]+\",\n\t\t\t\t\t\"name\": \"support.type.vendored.property-name.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#commas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unicode-range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#color-keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!\\\\s*important(?![\\\\w-])\",\n\t\t\t\t\t\"name\": \"keyword.other.important.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pseudo-classes\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.colon.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?xi)\\n(:)(:*)\\n(?: active|any-link|checked|default|disabled|empty|enabled|first\\n  | (?:first|last|only)-(?:child|of-type)|focus|focus-visible|focus-within|fullscreen|host|hover\\n  | in-range|indeterminate|invalid|left|link|optional|out-of-range\\n  | read-only|read-write|required|right|root|scope|target|unresolved\\n  | valid|visited\\n)(?![\\\\w-]|\\\\s*[;}])\",\n\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.css\"\n\t\t},\n\t\t\"pseudo-elements\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?xi)\\n(?:\\n  (::?)                       # Elements using both : and :: notation\\n  (?: after\\n    | before\\n    | first-letter\\n    | first-line\\n    | (?:-(?:ah|apple|atsc|epub|hp|khtml|moz\\n            |ms|o|rim|ro|tc|wap|webkit|xv)\\n        | (?:mso|prince))\\n      -[a-z-]+\\n  )\\n  |\\n  (::)                        # Double-colon only\\n  (?: backdrop\\n    | content\\n    | grammar-error\\n    | marker\\n    | placeholder\\n    | selection\\n    | shadow\\n    | spelling-error\\n  )\\n)\\n(?![\\\\w-]|\\\\s*[;}])\",\n\t\t\t\"name\": \"entity.other.attribute-name.pseudo-element.css\"\n\t\t},\n\t\t\"rule-list\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.property-list.begin.bracket.curly.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.property-list.end.bracket.curly.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.property-list.css\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rule-list-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"rule-list-innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#font-features\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?<![\\\\w-])\\n--\\n(?:[-a-zA-Z_]    | [^\\\\x00-\\\\x7F])     # First letter\\n(?:[-a-zA-Z0-9_] | [^\\\\x00-\\\\x7F]      # Remainder of identifier\\n  |\\\\\\\\(?:[0-9a-fA-F]{1,6}|.)\\n)*\",\n\t\t\t\t\t\"name\": \"variable.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![-a-zA-Z])(?=[-a-zA-Z])\",\n\t\t\t\t\t\"end\": \"$|(?![-a-zA-Z])\",\n\t\t\t\t\t\"name\": \"meta.property-name.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-names\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(;)|\\\\s*(?=}|\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.property-value.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\"name\": \"punctuation.terminator.rule.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"selector\": {\n\t\t\t\"begin\": \"(?x)\\n(?=\\n  (?:\\\\|)?                    # Possible anonymous namespace prefix\\n  (?:\\n    [-\\\\[:.*\\\\#a-zA-Z_]       # Valid selector character\\n    |\\n    [^\\\\x00-\\\\x7F]            # Which can include non-ASCII symbols\\n    |\\n    \\\\\\\\                      # Or an escape sequence\\n    (?:[0-9a-fA-F]{1,6}|.)\\n  )\\n)\",\n\t\t\t\"end\": \"(?=\\\\s*[/@{)])\",\n\t\t\t\"name\": \"meta.selector.css\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selector-innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"selector-innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#commas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#combinators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.namespace-prefix.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?x)\\n(?:^|(?<=[\\\\s,(};]))         # Follows whitespace, comma, semicolon, or bracket\\n(?!\\n  [-\\\\w*]+\\n  \\\\|\\n  (?!\\n      [-\\\\[:.*\\\\#a-zA-Z_]    # Make sure there's a selector to match\\n    | [^\\\\x00-\\\\x7F]\\n  )\\n)\\n(\\n  (?: [-a-zA-Z_]    | [^\\\\x00-\\\\x7F] )   # First letter\\n  (?: [-a-zA-Z0-9_] | [^\\\\x00-\\\\x7F]     # Remainder of identifier\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)\\n  )*\\n  |\\n  \\\\*     # Universal namespace\\n)?\\n(\\\\|)     # Namespace separator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\"name\": \"entity.name.tag.wildcard.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?x) (?<![@\\\\w-])\\n([.\\\\#])\\n# Invalid identifier\\n(\\n  (?:\\n    # Starts with ASCII digits, with possible hyphen preceding it\\n    -?[0-9]\\n    |\\n    # Consists of a hyphen only\\n    -                                      # Terminated by either:\\n    (?= $                                  # - End-of-line\\n      | [\\\\s,.\\\\#)\\\\[:{>+~|]               # - Followed by another selector\\n      | /\\\\*                               # - Followed by a block comment\\n    )\\n    |\\n    # Name contains unescaped ASCII symbol\\n    (?:                                    # Check for acceptable preceding characters\\n        [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]       # - Valid selector character\\n      | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)         # - Escape sequence\\n    )*\\n    (?:                                    # Invalid punctuation\\n      [!\\\"'%&(*;<?@^`|\\\\]}]                 # - NOTE: We exempt `)` from the list of checked\\n      |                                    #   symbols to avoid matching `:not(.invalid)`\\n      / (?!\\\\*)                            # - Avoid invalidating the start of a comment\\n    )+\\n  )\\n  # Mark remainder of selector invalid\\n  (?: [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]         # - Otherwise valid identifier characters\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)           # - Escape sequence\\n  )*\\n)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.bad-identifier.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\.)                                  # Valid class-name\\n(\\n  (?: [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]     # Valid identifier characters\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)       # Escape sequence\\n  )+\\n)                                      # Followed by either:\\n(?= $                                  # - End of the line\\n  | [\\\\s,.\\\\#)\\\\[:{>+~|]               # - Another selector\\n  | /\\\\*                               # - A block comment\\n)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.class.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\#)\\n(\\n  -?\\n  (?![0-9])\\n  (?:[-a-zA-Z0-9_]|[^\\\\x00-\\\\x7F]|\\\\\\\\(?:[0-9a-fA-F]{1,6}|.))+\\n)\\n(?=$|[\\\\s,.\\\\#)\\\\[:{>+~|]|/\\\\*)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.id.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.begin.bracket.square.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.end.bracket.square.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.attribute-selector.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.ignore-case.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\"'\\\\s]|^|\\\\*/)\\\\s*([iI])\\\\s*(?=[\\\\s\\\\]]|/\\\\*|$)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.attribute-value.css\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?x)(?<==)\\\\s*((?!/\\\\*)(?:[^\\\\\\\\\\\"'\\\\s\\\\]]|\\\\\\\\.)+)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[~|^$*]?=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.pattern.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\|\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.namespace-prefix.css\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n# Qualified namespace prefix\\n( -?(?!\\\\d)(?:[\\\\w-]|[^\\\\x00-\\\\x7F]|\\\\\\\\(?:[0-9a-fA-F]{1,6}|.))+\\n| \\\\*\\n)\\n# Lookahead to ensure there's a valid identifier ahead\\n(?=\\n  \\\\| (?!\\\\s|=|$|\\\\])\\n  (?: -?(?!\\\\d)\\n   |   [\\\\\\\\\\\\w-]\\n   |   [^\\\\x00-\\\\x7F]\\n   )\\n)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.css\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(-?(?!\\\\d)(?>[\\\\w-]|[^\\\\x00-\\\\x7F]|\\\\\\\\(?:[0-9a-fA-F]{1,6}|.))+)\\n\\\\s*\\n(?=[~|^\\\\]$*=]|/\\\\*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pseudo-classes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pseudo-elements\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functional-pseudo-classes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?<![@\\\\w-])\\n(?=            # Custom element names must:\\n  [a-z]        # - start with a lowercase ASCII letter,\\n  \\\\w* -       # - contain at least one dash\\n)\\n(?:\\n  (?![A-Z])    # No uppercase ASCII letters are allowed\\n  [\\\\w-]       # Allow any other word character or dash\\n)+\\n(?![(\\\\w-])\",\n\t\t\t\t\t\"name\": \"entity.name.tag.custom.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=$|\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?:\\\\G|^)(?=(?:[^\\\\\\\\\\\"]|\\\\\\\\.)+$)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unclosed.string.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=$|\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?:\\\\G|^)(?=(?:[^\\\\\\\\']|\\\\\\\\.)+$)\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unclosed.string.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag-names\": {\n\t\t\t\"match\": \"(?xi) (?<![\\\\w:-])\\n(?:\\n    # HTML\\n    a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdi|bdo|bgsound\\n  | big|blink|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command\\n  | content|data|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|element|em|embed|fieldset\\n  | figcaption|figure|font|footer|form|frame|frameset|h[1-6]|head|header|hgroup|hr|html|i\\n  | iframe|image|img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|main|map|mark\\n  | marquee|math|menu|menuitem|meta|meter|multicol|nav|nextid|nobr|noembed|noframes|noscript\\n  | object|ol|optgroup|option|output|p|param|picture|plaintext|pre|progress|q|rb|rp|rt|rtc\\n  | ruby|s|samp|script|section|select|shadow|slot|small|source|spacer|span|strike|strong\\n  | style|sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr\\n  | track|tt|u|ul|var|video|wbr|xmp\\n\\n  # SVG\\n  | altGlyph|altGlyphDef|altGlyphItem|animate|animateColor|animateMotion|animateTransform\\n  | circle|clipPath|color-profile|cursor|defs|desc|discard|ellipse|feBlend|feColorMatrix\\n  | feComponentTransfer|feComposite|feConvolveMatrix|feDiffuseLighting|feDisplacementMap\\n  | feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur\\n  | feImage|feMerge|feMergeNode|feMorphology|feOffset|fePointLight|feSpecularLighting\\n  | feSpotLight|feTile|feTurbulence|filter|font-face|font-face-format|font-face-name\\n  | font-face-src|font-face-uri|foreignObject|g|glyph|glyphRef|hatch|hatchpath|hkern\\n  | line|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|metadata\\n  | missing-glyph|mpath|path|pattern|polygon|polyline|radialGradient|rect|set|solidcolor\\n  | stop|svg|switch|symbol|text|textPath|tref|tspan|use|view|vkern\\n\\n  # MathML\\n  | annotation|annotation-xml|maction|maligngroup|malignmark|math|menclose|merror|mfenced\\n  | mfrac|mglyph|mi|mlabeledtr|mlongdiv|mmultiscripts|mn|mo|mover|mpadded|mphantom|mroot\\n  | mrow|ms|mscarries|mscarry|msgroup|msline|mspace|msqrt|msrow|mstack|mstyle|msub|msubsup\\n  | msup|mtable|mtd|mtext|mtr|munder|munderover|semantics\\n)\\n(?=[+~>\\\\s,.\\\\#|){:\\\\[]|/\\\\*|$)\",\n\t\t\t\"name\": \"entity.name.tag.css\"\n\t\t},\n\t\t\"unicode-range\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"constant.other.unicode-range.css\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dash.unicode-range.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<![\\\\w-])[Uu]\\\\+[0-9A-Fa-f?]{1,6}(?:(-)[0-9A-Fa-f]{1,6})?(?![\\\\w-])\"\n\t\t},\n\t\t\"url\": {\n\t\t\t\"begin\": \"(?i)(?<![\\\\w@-])(url)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.url.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.begin.bracket.round.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.end.bracket.round.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.url.css\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^'\\\")\\\\s]+\",\n\t\t\t\t\t\"name\": \"variable.parameter.url.css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/css-language-features/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/css-language-features/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/client/out/**/*.js\"\n\t\t\t],\n\t\t\t\"smartStep\": true\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Launch Tests\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/client/out/test\"\n\t\t\t],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/client/out/test/**/*.js\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Server Unit Tests\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"program\": \"${workspaceRoot}/node_modules/mocha/bin/_mocha\",\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"args\": [\n\t\t\t\t\"--timeout\",\n\t\t\t\t\"999999\",\n\t\t\t\t\"--colors\"\n\t\t\t],\n\t\t\t\"cwd\": \"${workspaceRoot}\",\n\t\t\t\"runtimeExecutable\": null,\n\t\t\t\"runtimeArgs\": [],\n\t\t\t\"env\": {},\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceRoot}/server/out/**\"\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/css-language-features/.vscode/settings.json",
    "content": "{\n  \"prettier.semi\": true,\n  \"prettier.singleQuote\": true,\n  \"prettier.printWidth\": 120,\n}"
  },
  {
    "path": "extensions/css-language-features/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"compile\",\n\t\t\t\"problemMatcher\": \"$tsc-watch\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\"\n\t\t\t},\n\t\t\t\"group\": {\n\t\t\t\t\"kind\": \"build\",\n\t\t\t\t\"isDefault\": true\n\t\t\t}\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/css-language-features/.vscodeignore",
    "content": "test/**\n.vscode/**\nserver/.vscode/**\nserver/node_modules/**\nclient/src/**\nserver/src/**\nclient/out/**\nserver/out/**\nclient/tsconfig.json\nserver/tsconfig.json\nserver/test/**\nserver/bin/**\nserver/build/**\nserver/package-lock.json\nserver/.npmignore\npackage-lock.json\nserver/extension.webpack.config.js\nextension.webpack.config.js\nserver/extension-browser.webpack.config.js\nextension-browser.webpack.config.js\nCONTRIBUTING.md\n"
  },
  {
    "path": "extensions/css-language-features/CONTRIBUTING.md",
    "content": "\n## Setup\n\n- Clone [microsoft/vscode](https://github.com/microsoft/vscode)\n- Run `npm i` at `/`, this will install\n\t- Dependencies for `/extension/css-language-features/`\n\t- Dependencies for `/extension/css-language-features/server/`\n\t- devDependencies such as `gulp`\n\n- Open `/extensions/css-language-features/` as the workspace in VS Code\n- In `/extensions/css-language-features/` run `npm run compile`(or `npm run watch`) to build the client and server\n- Run the [`Launch Extension`](https://github.com/microsoft/vscode/blob/master/extensions/css-language-features/.vscode/launch.json) debug target in the Debug View. This will:\n\t- Launch a new VS Code instance with the `css-language-features` extension loaded\n- Open a `.css` file to activate the extension. The extension will start the CSS language server process.\n- Add `\"css.trace.server\": \"verbose\"` to the settings to observe the communication between client and server in the `CSS Language Server` output.\n- Debug the extension and the language server client by setting breakpoints in`css-language-features/client/`\n- Debug the language server process by using `Attach to Node Process` command in the  VS Code window opened on `css-language-features`.\n  - Pick the process that contains `cssServerMain` in the command line. Hover over `code-insiders` resp `code` processes to see the full process command line.\n  - Set breakpoints in `css-language-features/server/`\n- Run `Reload Window` command in the launched instance to reload the extension\n\n## Contribute to vscode-css-languageservice\n\n[microsoft/vscode-css-languageservice](https://github.com/microsoft/vscode-css-languageservice) contains the language smarts for CSS/SCSS/Less.\nThis extension wraps the css language service into a Language Server for VS Code.\nIf you want to fix CSS/SCSS/Less issues or make improvements, you should make changes at [microsoft/vscode-css-languageservice](https://github.com/microsoft/vscode-css-languageservice).\n\nHowever, within this extension, you can run a development version of `vscode-css-languageservice` to debug code or test language features interactively:\n\n#### Linking `vscode-css-languageservice` in `css-language-features/server/`\n\n- Clone [microsoft/vscode-css-languageservice](https://github.com/microsoft/vscode-css-languageservice)\n- Run `npm i` in `vscode-css-languageservice`\n- Run `npm link` in `vscode-css-languageservice`. This will compile and link `vscode-css-languageservice`\n- In `css-language-features/server/`, run `npm link vscode-css-languageservice`\n\n#### Testing the development version of `vscode-css-languageservice`\n\n- Open both `vscode-css-languageservice` and this extension in a single workspace with [multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) feature\n- Run `npm run watch` in `vscode-css-languageservice` to recompile the extension whenever it changes\n- Run `npm run watch` at `css-language-features/server/` to recompile this extension with the linked version of `vscode-css-languageservice`\n- Make some changes in `vscode-css-languageservice`\n- Now when you run `Launch Extension` debug target, the launched instance will use your development version of `vscode-css-languageservice`. You can interactively test the language features.\n"
  },
  {
    "path": "extensions/css-language-features/README.md",
    "content": "# Language Features for CSS, SCSS, and LESS files\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [CSS, SCSS and Less in VS Code](https://code.visualstudio.com/docs/languages/css) to learn about the features of this extension.\n\nPlease read the [CONTRIBUTING.md](https://github.com/microsoft/vscode/blob/master/extensions/css-language-features/CONTRIBUTING.md) file to learn how to contribute to this extension.\n"
  },
  {
    "path": "extensions/css-language-features/client/src/browser/cssClientMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ExtensionContext, Uri, l10n } from 'vscode';\nimport { BaseLanguageClient, LanguageClientOptions } from 'vscode-languageclient';\nimport { startClient, LanguageClientConstructor } from '../cssClient';\nimport { LanguageClient } from 'vscode-languageclient/browser';\nimport { registerDropOrPasteResourceSupport } from '../dropOrPaste/dropOrPasteResource';\n\nlet client: BaseLanguageClient | undefined;\n\n// this method is called when vs code is activated\nexport async function activate(context: ExtensionContext) {\n\tconst serverMain = Uri.joinPath(context.extensionUri, 'server/dist/browser/cssServerMain.js');\n\ttry {\n\t\tconst worker = new Worker(serverMain.toString());\n\t\tworker.postMessage({ i10lLocation: l10n.uri?.toString(false) ?? '' });\n\n\t\tconst newLanguageClient: LanguageClientConstructor = (id: string, name: string, clientOptions: LanguageClientOptions) => {\n\t\t\treturn new LanguageClient(id, name, worker, clientOptions);\n\t\t};\n\n\t\tclient = await startClient(context, newLanguageClient, { TextDecoder });\n\n\t\tcontext.subscriptions.push(registerDropOrPasteResourceSupport({ language: 'css', scheme: '*' }));\n\t} catch (e) {\n\t\tconsole.log(e);\n\t}\n}\n\nexport async function deactivate(): Promise<void> {\n\tif (client) {\n\t\tawait client.stop();\n\t\tclient = undefined;\n\t}\n}\n\n"
  },
  {
    "path": "extensions/css-language-features/client/src/cssClient.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { commands, CompletionItem, CompletionItemKind, ExtensionContext, languages, Position, Range, SnippetString, TextEdit, window, TextDocument, CompletionContext, CancellationToken, ProviderResult, CompletionList, FormattingOptions, workspace, l10n } from 'vscode';\nimport { Disposable, LanguageClientOptions, ProvideCompletionItemsSignature, NotificationType, BaseLanguageClient, DocumentRangeFormattingParams, DocumentRangeFormattingRequest } from 'vscode-languageclient';\nimport { getCustomDataSource } from './customData';\nimport { RequestService, serveFileSystemRequests } from './requests';\n\nnamespace CustomDataChangedNotification {\n\texport const type: NotificationType<string[]> = new NotificationType('css/customDataChanged');\n}\n\nexport type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => BaseLanguageClient;\n\nexport interface Runtime {\n\tTextDecoder: { new(encoding?: string): { decode(buffer: ArrayBuffer): string } };\n\tfs?: RequestService;\n}\n\ninterface FormatterRegistration {\n\treadonly languageId: string;\n\treadonly settingId: string;\n\tprovider: Disposable | undefined;\n}\n\ninterface CSSFormatSettings {\n\tnewlineBetweenSelectors?: boolean;\n\tnewlineBetweenRules?: boolean;\n\tspaceAroundSelectorSeparator?: boolean;\n\tbraceStyle?: 'collapse' | 'expand';\n\tpreserveNewLines?: boolean;\n\tmaxPreserveNewLines?: number | null;\n}\n\nconst cssFormatSettingKeys: (keyof CSSFormatSettings)[] = ['newlineBetweenSelectors', 'newlineBetweenRules', 'spaceAroundSelectorSeparator', 'braceStyle', 'preserveNewLines', 'maxPreserveNewLines'];\n\nexport async function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime): Promise<BaseLanguageClient> {\n\n\tconst customDataSource = getCustomDataSource(context.subscriptions);\n\n\tconst documentSelector = ['css', 'scss', 'less'];\n\n\tconst formatterRegistrations: FormatterRegistration[] = documentSelector.map(languageId => ({\n\t\tlanguageId, settingId: `${languageId}.format.enable`, provider: undefined\n\t}));\n\n\t// Options to control the language client\n\tconst clientOptions: LanguageClientOptions = {\n\t\tdocumentSelector,\n\t\tsynchronize: {\n\t\t\tconfigurationSection: ['css', 'scss', 'less']\n\t\t},\n\t\tinitializationOptions: {\n\t\t\thandledSchemas: ['file'],\n\t\t\tprovideFormatter: false, // tell the server to not provide formatting capability\n\t\t\tcustomCapabilities: { rangeFormatting: { editLimit: 10000 } }\n\t\t},\n\t\tmiddleware: {\n\t\t\tprovideCompletionItem(document: TextDocument, position: Position, context: CompletionContext, token: CancellationToken, next: ProvideCompletionItemsSignature): ProviderResult<CompletionItem[] | CompletionList> {\n\t\t\t\t// testing the replace / insert mode\n\t\t\t\tfunction updateRanges(item: CompletionItem) {\n\t\t\t\t\tconst range = item.range;\n\t\t\t\t\tif (range instanceof Range && range.end.isAfter(position) && range.start.isBeforeOrEqual(position)) {\n\t\t\t\t\t\titem.range = { inserting: new Range(range.start, position), replacing: range };\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfunction updateLabel(item: CompletionItem) {\n\t\t\t\t\tif (item.kind === CompletionItemKind.Color) {\n\t\t\t\t\t\titem.label = {\n\t\t\t\t\t\t\tlabel: item.label as string,\n\t\t\t\t\t\t\tdescription: (item.documentation as string)\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// testing the new completion\n\t\t\t\tfunction updateProposals(r: CompletionItem[] | CompletionList | null | undefined): CompletionItem[] | CompletionList | null | undefined {\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\t(Array.isArray(r) ? r : r.items).forEach(updateRanges);\n\t\t\t\t\t\t(Array.isArray(r) ? r : r.items).forEach(updateLabel);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\tconst isThenable = <T>(obj: ProviderResult<T>): obj is Thenable<T> => obj && (<any>obj)['then'];\n\n\t\t\t\tconst r = next(document, position, context, token);\n\t\t\t\tif (isThenable<CompletionItem[] | CompletionList | null | undefined>(r)) {\n\t\t\t\t\treturn r.then(updateProposals);\n\t\t\t\t}\n\t\t\t\treturn updateProposals(r);\n\t\t\t}\n\t\t}\n\t};\n\n\t// Create the language client and start the client.\n\tconst client = newLanguageClient('css', l10n.t('CSS Language Server'), clientOptions);\n\tclient.registerProposedFeatures();\n\n\tawait client.start();\n\n\tclient.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);\n\tcustomDataSource.onDidChange(() => {\n\t\tclient.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);\n\t});\n\n\t// manually register / deregister format provider based on the `css/less/scss.format.enable` setting avoiding issues with late registration. See #71652.\n\tfor (const registration of formatterRegistrations) {\n\t\tupdateFormatterRegistration(registration);\n\t\tcontext.subscriptions.push({ dispose: () => registration.provider?.dispose() });\n\t\tcontext.subscriptions.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration(registration.settingId) && updateFormatterRegistration(registration)));\n\t}\n\n\tserveFileSystemRequests(client, runtime);\n\n\n\tcontext.subscriptions.push(initCompletionProvider());\n\n\tfunction initCompletionProvider(): Disposable {\n\t\tconst regionCompletionRegExpr = /^(\\s*)(\\/(\\*\\s*(#\\w*)?)?)?$/;\n\n\t\treturn languages.registerCompletionItemProvider(documentSelector, {\n\t\t\tprovideCompletionItems(doc: TextDocument, pos: Position) {\n\t\t\t\tconst lineUntilPos = doc.getText(new Range(new Position(pos.line, 0), pos));\n\t\t\t\tconst match = lineUntilPos.match(regionCompletionRegExpr);\n\t\t\t\tif (match) {\n\t\t\t\t\tconst range = new Range(new Position(pos.line, match[1].length), pos);\n\t\t\t\t\tconst beginProposal = new CompletionItem('#region', CompletionItemKind.Snippet);\n\t\t\t\t\tbeginProposal.range = range; TextEdit.replace(range, '/* #region */');\n\t\t\t\t\tbeginProposal.insertText = new SnippetString('/* #region $1*/');\n\t\t\t\t\tbeginProposal.documentation = l10n.t('Folding Region Start');\n\t\t\t\t\tbeginProposal.filterText = match[2];\n\t\t\t\t\tbeginProposal.sortText = 'za';\n\t\t\t\t\tconst endProposal = new CompletionItem('#endregion', CompletionItemKind.Snippet);\n\t\t\t\t\tendProposal.range = range;\n\t\t\t\t\tendProposal.insertText = '/* #endregion */';\n\t\t\t\t\tendProposal.documentation = l10n.t('Folding Region End');\n\t\t\t\t\tendProposal.sortText = 'zb';\n\t\t\t\t\tendProposal.filterText = match[2];\n\t\t\t\t\treturn [beginProposal, endProposal];\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t}\n\n\tcommands.registerCommand('_css.applyCodeAction', applyCodeAction);\n\n\tfunction applyCodeAction(uri: string, documentVersion: number, edits: TextEdit[]) {\n\t\tconst textEditor = window.activeTextEditor;\n\t\tif (textEditor && textEditor.document.uri.toString() === uri) {\n\t\t\tif (textEditor.document.version !== documentVersion) {\n\t\t\t\twindow.showInformationMessage(l10n.t('CSS fix is outdated and can\\'t be applied to the document.'));\n\t\t\t}\n\t\t\ttextEditor.edit(mutator => {\n\t\t\t\tfor (const edit of edits) {\n\t\t\t\t\tmutator.replace(client.protocol2CodeConverter.asRange(edit.range), edit.newText);\n\t\t\t\t}\n\t\t\t}).then(success => {\n\t\t\t\tif (!success) {\n\t\t\t\t\twindow.showErrorMessage(l10n.t('Failed to apply CSS fix to the document. Please consider opening an issue with steps to reproduce.'));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction updateFormatterRegistration(registration: FormatterRegistration) {\n\t\tconst formatEnabled = workspace.getConfiguration().get(registration.settingId);\n\t\tif (!formatEnabled && registration.provider) {\n\t\t\tregistration.provider.dispose();\n\t\t\tregistration.provider = undefined;\n\t\t} else if (formatEnabled && !registration.provider) {\n\t\t\tregistration.provider = languages.registerDocumentRangeFormattingEditProvider(registration.languageId, {\n\t\t\t\tprovideDocumentRangeFormattingEdits(document: TextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]> {\n\t\t\t\t\tconst filesConfig = workspace.getConfiguration('files', document);\n\n\t\t\t\t\tconst fileFormattingOptions = {\n\t\t\t\t\t\ttrimTrailingWhitespace: filesConfig.get<boolean>('trimTrailingWhitespace'),\n\t\t\t\t\t\ttrimFinalNewlines: filesConfig.get<boolean>('trimFinalNewlines'),\n\t\t\t\t\t\tinsertFinalNewline: filesConfig.get<boolean>('insertFinalNewline'),\n\t\t\t\t\t};\n\t\t\t\t\tconst params: DocumentRangeFormattingParams = {\n\t\t\t\t\t\ttextDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n\t\t\t\t\t\trange: client.code2ProtocolConverter.asRange(range),\n\t\t\t\t\t\toptions: client.code2ProtocolConverter.asFormattingOptions(options, fileFormattingOptions)\n\t\t\t\t\t};\n\t\t\t\t\t// add the css formatter options from the settings\n\t\t\t\t\tconst formatterSettings = workspace.getConfiguration(registration.languageId, document).get<CSSFormatSettings>('format');\n\t\t\t\t\tif (formatterSettings) {\n\t\t\t\t\t\tfor (const key of cssFormatSettingKeys) {\n\t\t\t\t\t\t\tconst val = formatterSettings[key];\n\t\t\t\t\t\t\tif (val !== undefined && val !== null) {\n\t\t\t\t\t\t\t\tparams.options[key] = val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn client.sendRequest(DocumentRangeFormattingRequest.type, params, token).then(\n\t\t\t\t\t\tclient.protocol2CodeConverter.asTextEdits,\n\t\t\t\t\t\t(error) => {\n\t\t\t\t\t\t\tclient.handleFailedRequest(DocumentRangeFormattingRequest.type, undefined, error, []);\n\t\t\t\t\t\t\treturn Promise.resolve([]);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\treturn client;\n}\n"
  },
  {
    "path": "extensions/css-language-features/client/src/customData.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { workspace, extensions, Uri, EventEmitter, Disposable } from 'vscode';\nimport { Utils } from 'vscode-uri';\n\nexport function getCustomDataSource(toDispose: Disposable[]) {\n\tlet pathsInWorkspace = getCustomDataPathsInAllWorkspaces();\n\tlet pathsInExtensions = getCustomDataPathsFromAllExtensions();\n\n\tconst onChange = new EventEmitter<void>();\n\n\ttoDispose.push(extensions.onDidChange(_ => {\n\t\tconst newPathsInExtensions = getCustomDataPathsFromAllExtensions();\n\t\tif (newPathsInExtensions.length !== pathsInExtensions.length || !newPathsInExtensions.every((val, idx) => val === pathsInExtensions[idx])) {\n\t\t\tpathsInExtensions = newPathsInExtensions;\n\t\t\tonChange.fire();\n\t\t}\n\t}));\n\ttoDispose.push(workspace.onDidChangeConfiguration(e => {\n\t\tif (e.affectsConfiguration('css.customData')) {\n\t\t\tpathsInWorkspace = getCustomDataPathsInAllWorkspaces();\n\t\t\tonChange.fire();\n\t\t}\n\t}));\n\n\treturn {\n\t\tget uris() {\n\t\t\treturn pathsInWorkspace.concat(pathsInExtensions);\n\t\t},\n\t\tget onDidChange() {\n\t\t\treturn onChange.event;\n\t\t}\n\t};\n}\n\n\nfunction getCustomDataPathsInAllWorkspaces(): string[] {\n\tconst workspaceFolders = workspace.workspaceFolders;\n\n\tconst dataPaths: string[] = [];\n\n\tif (!workspaceFolders) {\n\t\treturn dataPaths;\n\t}\n\n\tconst collect = (paths: string[] | undefined, rootFolder: Uri) => {\n\t\tif (Array.isArray(paths)) {\n\t\t\tfor (const path of paths) {\n\t\t\t\tif (typeof path === 'string') {\n\t\t\t\t\tdataPaths.push(Utils.resolvePath(rootFolder, path).toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfor (let i = 0; i < workspaceFolders.length; i++) {\n\t\tconst folderUri = workspaceFolders[i].uri;\n\t\tconst allCssConfig = workspace.getConfiguration('css', folderUri);\n\t\tconst customDataInspect = allCssConfig.inspect<string[]>('customData');\n\t\tif (customDataInspect) {\n\t\t\tcollect(customDataInspect.workspaceFolderValue, folderUri);\n\t\t\tif (i === 0) {\n\t\t\t\tif (workspace.workspaceFile) {\n\t\t\t\t\tcollect(customDataInspect.workspaceValue, workspace.workspaceFile);\n\t\t\t\t}\n\t\t\t\tcollect(customDataInspect.globalValue, folderUri);\n\t\t\t}\n\t\t}\n\n\t}\n\treturn dataPaths;\n}\n\nfunction getCustomDataPathsFromAllExtensions(): string[] {\n\tconst dataPaths: string[] = [];\n\tfor (const extension of extensions.all) {\n\t\tconst customData = extension.packageJSON?.contributes?.css?.customData;\n\t\tif (Array.isArray(customData)) {\n\t\t\tfor (const rp of customData) {\n\t\t\t\tdataPaths.push(Utils.joinPath(extension.extensionUri, rp).toString());\n\t\t\t}\n\t\t}\n\t}\n\treturn dataPaths;\n}\n"
  },
  {
    "path": "extensions/css-language-features/client/src/dropOrPaste/dropOrPasteResource.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport { getDocumentDir, Mimes, Schemes } from './shared';\nimport { UriList } from './uriList';\n\nclass DropOrPasteResourceProvider implements vscode.DocumentDropEditProvider, vscode.DocumentPasteEditProvider {\n\n\treadonly kind = vscode.DocumentDropOrPasteEditKind.Empty.append('css', 'link', 'url');\n\n\tasync provideDocumentDropEdits(\n\t\tdocument: vscode.TextDocument,\n\t\tposition: vscode.Position,\n\t\tdataTransfer: vscode.DataTransfer,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<vscode.DocumentDropEdit | undefined> {\n\t\tconst uriList = await this.getUriList(dataTransfer);\n\t\tif (!uriList.entries.length || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snippet = await this.createUriListSnippet(document.uri, uriList);\n\t\tif (!snippet || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn {\n\t\t\tkind: this.kind,\n\t\t\ttitle: snippet.label,\n\t\t\tinsertText: snippet.snippet.value,\n\t\t\tyieldTo: this.pasteAsCssUrlByDefault(document, position) ? [] : [vscode.DocumentDropOrPasteEditKind.Empty.append('uri')]\n\t\t};\n\t}\n\n\tasync provideDocumentPasteEdits(\n\t\tdocument: vscode.TextDocument,\n\t\tranges: readonly vscode.Range[],\n\t\tdataTransfer: vscode.DataTransfer,\n\t\t_context: vscode.DocumentPasteEditContext,\n\t\ttoken: vscode.CancellationToken\n\t): Promise<vscode.DocumentPasteEdit[] | undefined> {\n\t\tconst uriList = await this.getUriList(dataTransfer);\n\t\tif (!uriList.entries.length || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snippet = await this.createUriListSnippet(document.uri, uriList);\n\t\tif (!snippet || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn [{\n\t\t\tkind: this.kind,\n\t\t\ttitle: snippet.label,\n\t\t\tinsertText: snippet.snippet.value,\n\t\t\tyieldTo: this.pasteAsCssUrlByDefault(document, ranges[0].start) ? [] : [vscode.DocumentDropOrPasteEditKind.Empty.append('uri')]\n\t\t}];\n\t}\n\n\tprivate async getUriList(dataTransfer: vscode.DataTransfer): Promise<UriList> {\n\t\tconst urlList = await dataTransfer.get(Mimes.uriList)?.asString();\n\t\tif (urlList) {\n\t\t\treturn UriList.from(urlList);\n\t\t}\n\n\t\t// Find file entries\n\t\tconst uris: vscode.Uri[] = [];\n\t\tfor (const [_, entry] of dataTransfer) {\n\t\t\tconst file = entry.asFile();\n\t\t\tif (file?.uri) {\n\t\t\t\turis.push(file.uri);\n\t\t\t}\n\t\t}\n\n\t\treturn new UriList(uris.map(uri => ({ uri, str: uri.toString(true) })));\n\t}\n\n\tprivate async createUriListSnippet(docUri: vscode.Uri, uriList: UriList): Promise<{ readonly snippet: vscode.SnippetString; readonly label: string } | undefined> {\n\t\tif (!uriList.entries.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snippet = new vscode.SnippetString();\n\t\tfor (let i = 0; i < uriList.entries.length; i++) {\n\t\t\tconst uri = uriList.entries[i];\n\t\t\tconst relativePath = getRelativePath(getDocumentDir(docUri), uri.uri);\n\t\t\tconst urlText = relativePath ?? uri.str;\n\n\t\t\tsnippet.appendText(`url(${urlText})`);\n\t\t\tif (i !== uriList.entries.length - 1) {\n\t\t\t\tsnippet.appendText(' ');\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsnippet,\n\t\t\tlabel: uriList.entries.length > 1\n\t\t\t\t? vscode.l10n.t('Insert url() Functions')\n\t\t\t\t: vscode.l10n.t('Insert url() Function')\n\t\t};\n\t}\n\n\tprivate pasteAsCssUrlByDefault(document: vscode.TextDocument, position: vscode.Position): boolean {\n\t\tconst regex = /url\\(.+?\\)/gi;\n\t\tfor (const match of Array.from(document.lineAt(position.line).text.matchAll(regex))) {\n\t\t\tif (position.character > match.index && position.character < match.index + match[0].length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\nfunction getRelativePath(fromFile: vscode.Uri | undefined, toFile: vscode.Uri): string | undefined {\n\tif (fromFile && fromFile.scheme === toFile.scheme && fromFile.authority === toFile.authority) {\n\t\tif (toFile.scheme === Schemes.file) {\n\t\t\t// On windows, we must use the native `path.relative` to generate the relative path\n\t\t\t// so that drive-letters are resolved cast insensitively. However we then want to\n\t\t\t// convert back to a posix path to insert in to the document\n\t\t\tconst relativePath = path.relative(fromFile.fsPath, toFile.fsPath);\n\t\t\treturn path.posix.normalize(relativePath.split(path.sep).join(path.posix.sep));\n\t\t}\n\n\t\treturn path.posix.relative(fromFile.path, toFile.path);\n\t}\n\n\treturn undefined;\n}\n\nexport function registerDropOrPasteResourceSupport(selector: vscode.DocumentSelector): vscode.Disposable {\n\tconst provider = new DropOrPasteResourceProvider();\n\n\treturn vscode.Disposable.from(\n\t\tvscode.languages.registerDocumentDropEditProvider(selector, provider, {\n\t\t\tprovidedDropEditKinds: [provider.kind],\n\t\t\tdropMimeTypes: [\n\t\t\t\tMimes.uriList,\n\t\t\t\t'files'\n\t\t\t]\n\t\t}),\n\t\tvscode.languages.registerDocumentPasteEditProvider(selector, provider, {\n\t\t\tprovidedPasteEditKinds: [provider.kind],\n\t\t\tpasteMimeTypes: [\n\t\t\t\tMimes.uriList,\n\t\t\t\t'files'\n\t\t\t]\n\t\t})\n\t);\n}\n"
  },
  {
    "path": "extensions/css-language-features/client/src/dropOrPaste/shared.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Utils } from 'vscode-uri';\n\nexport const Schemes = Object.freeze({\n\tfile: 'file',\n\tnotebookCell: 'vscode-notebook-cell',\n\tuntitled: 'untitled',\n});\n\nexport const Mimes = Object.freeze({\n\tplain: 'text/plain',\n\turiList: 'text/uri-list',\n});\n\n\nexport function getDocumentDir(uri: vscode.Uri): vscode.Uri | undefined {\n\tconst docUri = getParentDocumentUri(uri);\n\tif (docUri.scheme === Schemes.untitled) {\n\t\treturn vscode.workspace.workspaceFolders?.[0]?.uri;\n\t}\n\treturn Utils.dirname(docUri);\n}\n\nfunction getParentDocumentUri(uri: vscode.Uri): vscode.Uri {\n\tif (uri.scheme === Schemes.notebookCell) {\n\t\t// is notebook documents necessary?\n\t\tfor (const notebook of vscode.workspace.notebookDocuments) {\n\t\t\tfor (const cell of notebook.getCells()) {\n\t\t\t\tif (cell.document.uri.toString() === uri.toString()) {\n\t\t\t\t\treturn notebook.uri;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn uri;\n}\n"
  },
  {
    "path": "extensions/css-language-features/client/src/dropOrPaste/uriList.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nfunction splitUriList(str: string): string[] {\n\treturn str.split('\\r\\n');\n}\n\nfunction parseUriList(str: string): string[] {\n\treturn splitUriList(str)\n\t\t.filter(value => !value.startsWith('#')) // Remove comments\n\t\t.map(value => value.trim());\n}\n\nexport class UriList {\n\n\tstatic from(str: string): UriList {\n\t\treturn new UriList(coalesce(parseUriList(str).map(line => {\n\t\t\ttry {\n\t\t\t\treturn { uri: vscode.Uri.parse(line), str: line };\n\t\t\t} catch {\n\t\t\t\t// Uri parse failure\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})));\n\t}\n\n\tconstructor(\n\t\tpublic readonly entries: ReadonlyArray<{ readonly uri: vscode.Uri; readonly str: string }>\n\t) { }\n}\n\nfunction coalesce<T>(array: ReadonlyArray<T | undefined | null>): T[] {\n\treturn <T[]>array.filter(e => !!e);\n}\n"
  },
  {
    "path": "extensions/css-language-features/client/src/node/cssClientMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDecoder } from 'util';\nimport { ExtensionContext, extensions, l10n } from 'vscode';\nimport { BaseLanguageClient, LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient/node';\nimport { LanguageClientConstructor, startClient } from '../cssClient';\nimport { getNodeFSRequestService } from './nodeFs';\nimport { registerDropOrPasteResourceSupport } from '../dropOrPaste/dropOrPasteResource';\n\nlet client: BaseLanguageClient | undefined;\n\n// this method is called when vs code is activated\nexport async function activate(context: ExtensionContext) {\n\tconst clientMain = extensions.getExtension('vscode.css-language-features')?.packageJSON?.main || '';\n\n\tconst serverMain = `./server/${clientMain.indexOf('/dist/') !== -1 ? 'dist' : 'out'}/node/cssServerMain`;\n\tconst serverModule = context.asAbsolutePath(serverMain);\n\n\t// The debug options for the server\n\tconst debugOptions = { execArgv: ['--nolazy', '--inspect=' + (7000 + Math.round(Math.random() * 999))] };\n\n\t// If the extension is launch in debug mode the debug server options are use\n\t// Otherwise the run options are used\n\tconst serverOptions: ServerOptions = {\n\t\trun: { module: serverModule, transport: TransportKind.ipc },\n\t\tdebug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions }\n\t};\n\n\tconst newLanguageClient: LanguageClientConstructor = (id: string, name: string, clientOptions: LanguageClientOptions) => {\n\t\treturn new LanguageClient(id, name, serverOptions, clientOptions);\n\t};\n\n\t// pass the location of the localization bundle to the server\n\tprocess.env['VSCODE_L10N_BUNDLE_LOCATION'] = l10n.uri?.toString() ?? '';\n\n\tclient = await startClient(context, newLanguageClient, { fs: getNodeFSRequestService(), TextDecoder });\n\n\tcontext.subscriptions.push(registerDropOrPasteResourceSupport({ language: 'css', scheme: '*' }));\n}\n\nexport async function deactivate(): Promise<void> {\n\tif (client) {\n\t\tawait client.stop();\n\t\tclient = undefined;\n\t}\n}\n\n"
  },
  {
    "path": "extensions/css-language-features/client/src/node/nodeFs.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs';\nimport { Uri } from 'vscode';\nimport { RequestService, FileType } from '../requests';\n\nexport function getNodeFSRequestService(): RequestService {\n\tfunction ensureFileUri(location: string) {\n\t\tif (!location.startsWith('file://')) {\n\t\t\tthrow new Error('fileRequestService can only handle file URLs');\n\t\t}\n\t}\n\treturn {\n\t\tgetContent(location: string, encoding?: BufferEncoding) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst uri = Uri.parse(location);\n\t\t\t\tfs.readFile(uri.fsPath, encoding, (err, buf) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t}\n\t\t\t\t\tc(buf.toString());\n\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tstat(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst uri = Uri.parse(location);\n\t\t\t\tfs.stat(uri.fsPath, (err, stats) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\t\t\t\treturn c({ type: FileType.Unknown, ctime: -1, mtime: -1, size: -1 });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet type = FileType.Unknown;\n\t\t\t\t\tif (stats.isFile()) {\n\t\t\t\t\t\ttype = FileType.File;\n\t\t\t\t\t} else if (stats.isDirectory()) {\n\t\t\t\t\t\ttype = FileType.Directory;\n\t\t\t\t\t} else if (stats.isSymbolicLink()) {\n\t\t\t\t\t\ttype = FileType.SymbolicLink;\n\t\t\t\t\t}\n\n\t\t\t\t\tc({\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tctime: stats.ctime.getTime(),\n\t\t\t\t\t\tmtime: stats.mtime.getTime(),\n\t\t\t\t\t\tsize: stats.size\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\treadDirectory(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst path = Uri.parse(location).fsPath;\n\n\t\t\t\tfs.readdir(path, { withFileTypes: true }, (err, children) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t}\n\t\t\t\t\tc(children.map(stat => {\n\t\t\t\t\t\tif (stat.isSymbolicLink()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.SymbolicLink];\n\t\t\t\t\t\t} else if (stat.isDirectory()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Directory];\n\t\t\t\t\t\t} else if (stat.isFile()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.File];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Unknown];\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/css-language-features/client/src/requests.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Uri, workspace } from 'vscode';\nimport { RequestType, BaseLanguageClient } from 'vscode-languageclient';\nimport { Runtime } from './cssClient';\n\nexport namespace FsContentRequest {\n\texport const type: RequestType<{ uri: string; encoding?: string }, string, any> = new RequestType('fs/content');\n}\nexport namespace FsStatRequest {\n\texport const type: RequestType<string, FileStat, any> = new RequestType('fs/stat');\n}\n\nexport namespace FsReadDirRequest {\n\texport const type: RequestType<string, [string, FileType][], any> = new RequestType('fs/readDir');\n}\n\nexport function serveFileSystemRequests(client: BaseLanguageClient, runtime: Runtime) {\n\tclient.onRequest(FsContentRequest.type, (param: { uri: string; encoding?: string }) => {\n\t\tconst uri = Uri.parse(param.uri);\n\t\tif (uri.scheme === 'file' && runtime.fs) {\n\t\t\treturn runtime.fs.getContent(param.uri);\n\t\t}\n\t\treturn workspace.fs.readFile(uri).then(buffer => {\n\t\t\treturn new runtime.TextDecoder(param.encoding).decode(buffer);\n\t\t});\n\t});\n\tclient.onRequest(FsReadDirRequest.type, (uriString: string) => {\n\t\tconst uri = Uri.parse(uriString);\n\t\tif (uri.scheme === 'file' && runtime.fs) {\n\t\t\treturn runtime.fs.readDirectory(uriString);\n\t\t}\n\t\treturn workspace.fs.readDirectory(uri);\n\t});\n\tclient.onRequest(FsStatRequest.type, (uriString: string) => {\n\t\tconst uri = Uri.parse(uriString);\n\t\tif (uri.scheme === 'file' && runtime.fs) {\n\t\t\treturn runtime.fs.stat(uriString);\n\t\t}\n\t\treturn workspace.fs.stat(uri);\n\t});\n}\n\nexport enum FileType {\n\t/**\n\t * The file type is unknown.\n\t */\n\tUnknown = 0,\n\t/**\n\t * A regular file.\n\t */\n\tFile = 1,\n\t/**\n\t * A directory.\n\t */\n\tDirectory = 2,\n\t/**\n\t * A symbolic link to a file.\n\t */\n\tSymbolicLink = 64\n}\nexport interface FileStat {\n\t/**\n\t * The type of the file, e.g. is a regular file, a directory, or symbolic link\n\t * to a file.\n\t */\n\ttype: FileType;\n\t/**\n\t * The creation timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tctime: number;\n\t/**\n\t * The modification timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tmtime: number;\n\t/**\n\t * The size in bytes.\n\t */\n\tsize: number;\n}\n\nexport interface RequestService {\n\tgetContent(uri: string, encoding?: string): Promise<string>;\n\n\tstat(uri: string): Promise<FileStat>;\n\treadDirectory(uri: string): Promise<[string, FileType][]>;\n}\n"
  },
  {
    "path": "extensions/css-language-features/client/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"lib\": [\n\t\t\t\"webworker\"\n\t\t],\n\t\t\"module\": \"Node16\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/css-language-features/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\nconst path = require('path');\n\nmodule.exports = withBrowserDefaults({\n\tcontext: path.join(__dirname, 'client'),\n\tentry: {\n\t\textension: './src/browser/cssClientMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'cssClientMain.js',\n\t\tpath: path.join(__dirname, 'client', 'dist', 'browser')\n\t}\n});\n"
  },
  {
    "path": "extensions/css-language-features/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\nconst path = require('path');\n\nmodule.exports = withDefaults({\n\tcontext: path.join(__dirname, 'client'),\n\tentry: {\n\t\textension: './src/node/cssClientMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'cssClientMain.js',\n\t\tpath: path.join(__dirname, 'client', 'dist', 'node')\n\t}\n});\n"
  },
  {
    "path": "extensions/css-language-features/package.json",
    "content": "{\n  \"name\": \"css-language-features\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.77.0\"\n  },\n  \"icon\": \"icons/css.png\",\n  \"activationEvents\": [\n    \"onLanguage:css\",\n    \"onLanguage:less\",\n    \"onLanguage:scss\",\n    \"onCommand:_css.applyCodeAction\"\n  ],\n  \"main\": \"./client/out/node/cssClientMain\",\n  \"browser\": \"./client/dist/browser/cssClientMain\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:css-language-features-client compile-extension:css-language-features-server\",\n    \"watch\": \"npx gulp watch-extension:css-language-features-client watch-extension:css-language-features-server\",\n    \"test\": \"node ../../node_modules/mocha/bin/mocha\",\n    \"install-client-next\": \"npm install vscode-languageclient@next\"\n  },\n  \"categories\": [\n    \"Programming Languages\"\n  ],\n  \"contributes\": {\n    \"configuration\": [\n      {\n        \"order\": 22,\n        \"id\": \"css\",\n        \"title\": \"%css.title%\",\n        \"properties\": {\n          \"css.customData\": {\n            \"type\": \"array\",\n            \"markdownDescription\": \"%css.customData.desc%\",\n            \"default\": [],\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"scope\": \"resource\"\n          },\n          \"css.completion.triggerPropertyValueCompletion\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%css.completion.triggerPropertyValueCompletion.desc%\"\n          },\n          \"css.completion.completePropertyWithSemicolon\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%css.completion.completePropertyWithSemicolon.desc%\"\n          },\n          \"css.validate\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%css.validate.desc%\"\n          },\n          \"css.hover.documentation\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%css.hover.documentation%\"\n          },\n          \"css.hover.references\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%css.hover.references%\"\n          },\n          \"css.lint.compatibleVendorPrefixes\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%css.lint.compatibleVendorPrefixes.desc%\"\n          },\n          \"css.lint.vendorPrefix\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%css.lint.vendorPrefix.desc%\"\n          },\n          \"css.lint.duplicateProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%css.lint.duplicateProperties.desc%\"\n          },\n          \"css.lint.emptyRules\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%css.lint.emptyRules.desc%\"\n          },\n          \"css.lint.importStatement\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%css.lint.importStatement.desc%\"\n          },\n          \"css.lint.boxModel\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%css.lint.boxModel.desc%\"\n          },\n          \"css.lint.universalSelector\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%css.lint.universalSelector.desc%\"\n          },\n          \"css.lint.zeroUnits\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%css.lint.zeroUnits.desc%\"\n          },\n          \"css.lint.fontFaceProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"markdownDescription\": \"%css.lint.fontFaceProperties.desc%\"\n          },\n          \"css.lint.hexColorLength\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"error\",\n            \"description\": \"%css.lint.hexColorLength.desc%\"\n          },\n          \"css.lint.argumentsInColorFunction\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"error\",\n            \"description\": \"%css.lint.argumentsInColorFunction.desc%\"\n          },\n          \"css.lint.unknownProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%css.lint.unknownProperties.desc%\"\n          },\n          \"css.lint.validProperties\": {\n            \"type\": \"array\",\n            \"uniqueItems\": true,\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"scope\": \"resource\",\n            \"default\": [],\n            \"description\": \"%css.lint.validProperties.desc%\"\n          },\n          \"css.lint.ieHack\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%css.lint.ieHack.desc%\"\n          },\n          \"css.lint.unknownVendorSpecificProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%css.lint.unknownVendorSpecificProperties.desc%\"\n          },\n          \"css.lint.propertyIgnoredDueToDisplay\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"markdownDescription\": \"%css.lint.propertyIgnoredDueToDisplay.desc%\"\n          },\n          \"css.lint.important\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%css.lint.important.desc%\"\n          },\n          \"css.lint.float\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%css.lint.float.desc%\"\n          },\n          \"css.lint.idSelector\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%css.lint.idSelector.desc%\"\n          },\n          \"css.lint.unknownAtRules\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%css.lint.unknownAtRules.desc%\"\n          },\n          \"css.trace.server\": {\n            \"type\": \"string\",\n            \"scope\": \"window\",\n            \"enum\": [\n              \"off\",\n              \"messages\",\n              \"verbose\"\n            ],\n            \"default\": \"off\",\n            \"description\": \"%css.trace.server.desc%\"\n          },\n          \"css.format.enable\": {\n            \"type\": \"boolean\",\n            \"scope\": \"window\",\n            \"default\": true,\n            \"description\": \"%css.format.enable.desc%\"\n          },\n          \"css.format.newlineBetweenSelectors\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%css.format.newlineBetweenSelectors.desc%\"\n          },\n          \"css.format.newlineBetweenRules\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%css.format.newlineBetweenRules.desc%\"\n          },\n          \"css.format.spaceAroundSelectorSeparator\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": false,\n            \"markdownDescription\": \"%css.format.spaceAroundSelectorSeparator.desc%\"\n          },\n          \"css.format.braceStyle\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"default\": \"collapse\",\n            \"enum\": [\n              \"collapse\",\n              \"expand\"\n            ],\n            \"markdownDescription\": \"%css.format.braceStyle.desc%\"\n          },\n          \"css.format.preserveNewLines\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%css.format.preserveNewLines.desc%\"\n          },\n          \"css.format.maxPreserveNewLines\": {\n            \"type\": [\n              \"number\",\n              \"null\"\n            ],\n            \"scope\": \"resource\",\n            \"default\": null,\n            \"markdownDescription\": \"%css.format.maxPreserveNewLines.desc%\"\n          }\n        }\n      },\n      {\n        \"id\": \"scss\",\n        \"order\": 24,\n        \"title\": \"%scss.title%\",\n        \"properties\": {\n          \"scss.completion.triggerPropertyValueCompletion\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%scss.completion.triggerPropertyValueCompletion.desc%\"\n          },\n          \"scss.completion.completePropertyWithSemicolon\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%scss.completion.completePropertyWithSemicolon.desc%\"\n          },\n          \"scss.validate\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%scss.validate.desc%\"\n          },\n          \"scss.hover.documentation\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%scss.hover.documentation%\"\n          },\n          \"scss.hover.references\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%scss.hover.references%\"\n          },\n          \"scss.lint.compatibleVendorPrefixes\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%scss.lint.compatibleVendorPrefixes.desc%\"\n          },\n          \"scss.lint.vendorPrefix\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%scss.lint.vendorPrefix.desc%\"\n          },\n          \"scss.lint.duplicateProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%scss.lint.duplicateProperties.desc%\"\n          },\n          \"scss.lint.emptyRules\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%scss.lint.emptyRules.desc%\"\n          },\n          \"scss.lint.importStatement\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%scss.lint.importStatement.desc%\"\n          },\n          \"scss.lint.boxModel\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%scss.lint.boxModel.desc%\"\n          },\n          \"scss.lint.universalSelector\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%scss.lint.universalSelector.desc%\"\n          },\n          \"scss.lint.zeroUnits\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%scss.lint.zeroUnits.desc%\"\n          },\n          \"scss.lint.fontFaceProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"markdownDescription\": \"%scss.lint.fontFaceProperties.desc%\"\n          },\n          \"scss.lint.hexColorLength\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"error\",\n            \"description\": \"%scss.lint.hexColorLength.desc%\"\n          },\n          \"scss.lint.argumentsInColorFunction\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"error\",\n            \"description\": \"%scss.lint.argumentsInColorFunction.desc%\"\n          },\n          \"scss.lint.unknownProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%scss.lint.unknownProperties.desc%\"\n          },\n          \"scss.lint.validProperties\": {\n            \"type\": \"array\",\n            \"uniqueItems\": true,\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"scope\": \"resource\",\n            \"default\": [],\n            \"description\": \"%scss.lint.validProperties.desc%\"\n          },\n          \"scss.lint.ieHack\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%scss.lint.ieHack.desc%\"\n          },\n          \"scss.lint.unknownVendorSpecificProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%scss.lint.unknownVendorSpecificProperties.desc%\"\n          },\n          \"scss.lint.propertyIgnoredDueToDisplay\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"markdownDescription\": \"%scss.lint.propertyIgnoredDueToDisplay.desc%\"\n          },\n          \"scss.lint.important\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%scss.lint.important.desc%\"\n          },\n          \"scss.lint.float\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%scss.lint.float.desc%\"\n          },\n          \"scss.lint.idSelector\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%scss.lint.idSelector.desc%\"\n          },\n          \"scss.lint.unknownAtRules\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%scss.lint.unknownAtRules.desc%\"\n          },\n          \"scss.format.enable\": {\n            \"type\": \"boolean\",\n            \"scope\": \"window\",\n            \"default\": true,\n            \"description\": \"%scss.format.enable.desc%\"\n          },\n          \"scss.format.newlineBetweenSelectors\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%scss.format.newlineBetweenSelectors.desc%\"\n          },\n          \"scss.format.newlineBetweenRules\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%scss.format.newlineBetweenRules.desc%\"\n          },\n          \"scss.format.spaceAroundSelectorSeparator\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": false,\n            \"markdownDescription\": \"%scss.format.spaceAroundSelectorSeparator.desc%\"\n          },\n          \"scss.format.braceStyle\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"default\": \"collapse\",\n            \"enum\": [\n              \"collapse\",\n              \"expand\"\n            ],\n            \"markdownDescription\": \"%scss.format.braceStyle.desc%\"\n          },\n          \"scss.format.preserveNewLines\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%scss.format.preserveNewLines.desc%\"\n          },\n          \"scss.format.maxPreserveNewLines\": {\n            \"type\": [\n              \"number\",\n              \"null\"\n            ],\n            \"scope\": \"resource\",\n            \"default\": null,\n            \"markdownDescription\": \"%scss.format.maxPreserveNewLines.desc%\"\n          }\n        }\n      },\n      {\n        \"id\": \"less\",\n        \"order\": 23,\n        \"type\": \"object\",\n        \"title\": \"%less.title%\",\n        \"properties\": {\n          \"less.completion.triggerPropertyValueCompletion\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%less.completion.triggerPropertyValueCompletion.desc%\"\n          },\n          \"less.completion.completePropertyWithSemicolon\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%less.completion.completePropertyWithSemicolon.desc%\"\n          },\n          \"less.validate\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%less.validate.desc%\"\n          },\n          \"less.hover.documentation\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%less.hover.documentation%\"\n          },\n          \"less.hover.references\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%less.hover.references%\"\n          },\n          \"less.lint.compatibleVendorPrefixes\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%less.lint.compatibleVendorPrefixes.desc%\"\n          },\n          \"less.lint.vendorPrefix\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%less.lint.vendorPrefix.desc%\"\n          },\n          \"less.lint.duplicateProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%less.lint.duplicateProperties.desc%\"\n          },\n          \"less.lint.emptyRules\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%less.lint.emptyRules.desc%\"\n          },\n          \"less.lint.importStatement\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%less.lint.importStatement.desc%\"\n          },\n          \"less.lint.boxModel\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%less.lint.boxModel.desc%\"\n          },\n          \"less.lint.universalSelector\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%less.lint.universalSelector.desc%\"\n          },\n          \"less.lint.zeroUnits\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%less.lint.zeroUnits.desc%\"\n          },\n          \"less.lint.fontFaceProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"markdownDescription\": \"%less.lint.fontFaceProperties.desc%\"\n          },\n          \"less.lint.hexColorLength\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"error\",\n            \"description\": \"%less.lint.hexColorLength.desc%\"\n          },\n          \"less.lint.argumentsInColorFunction\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"error\",\n            \"description\": \"%less.lint.argumentsInColorFunction.desc%\"\n          },\n          \"less.lint.unknownProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%less.lint.unknownProperties.desc%\"\n          },\n          \"less.lint.validProperties\": {\n            \"type\": \"array\",\n            \"uniqueItems\": true,\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"scope\": \"resource\",\n            \"default\": [],\n            \"description\": \"%less.lint.validProperties.desc%\"\n          },\n          \"less.lint.ieHack\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%less.lint.ieHack.desc%\"\n          },\n          \"less.lint.unknownVendorSpecificProperties\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%less.lint.unknownVendorSpecificProperties.desc%\"\n          },\n          \"less.lint.propertyIgnoredDueToDisplay\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"markdownDescription\": \"%less.lint.propertyIgnoredDueToDisplay.desc%\"\n          },\n          \"less.lint.important\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%less.lint.important.desc%\"\n          },\n          \"less.lint.float\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"markdownDescription\": \"%less.lint.float.desc%\"\n          },\n          \"less.lint.idSelector\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"ignore\",\n            \"description\": \"%less.lint.idSelector.desc%\"\n          },\n          \"less.lint.unknownAtRules\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"enum\": [\n              \"ignore\",\n              \"warning\",\n              \"error\"\n            ],\n            \"default\": \"warning\",\n            \"description\": \"%less.lint.unknownAtRules.desc%\"\n          },\n          \"less.format.enable\": {\n            \"type\": \"boolean\",\n            \"scope\": \"window\",\n            \"default\": true,\n            \"description\": \"%less.format.enable.desc%\"\n          },\n          \"less.format.newlineBetweenSelectors\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%less.format.newlineBetweenSelectors.desc%\"\n          },\n          \"less.format.newlineBetweenRules\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%less.format.newlineBetweenRules.desc%\"\n          },\n          \"less.format.spaceAroundSelectorSeparator\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": false,\n            \"markdownDescription\": \"%less.format.spaceAroundSelectorSeparator.desc%\"\n          },\n          \"less.format.braceStyle\": {\n            \"type\": \"string\",\n            \"scope\": \"resource\",\n            \"default\": \"collapse\",\n            \"enum\": [\n              \"collapse\",\n              \"expand\"\n            ],\n            \"markdownDescription\": \"%less.format.braceStyle.desc%\"\n          },\n          \"less.format.preserveNewLines\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"markdownDescription\": \"%less.format.preserveNewLines.desc%\"\n          },\n          \"less.format.maxPreserveNewLines\": {\n            \"type\": [\n              \"number\",\n              \"null\"\n            ],\n            \"scope\": \"resource\",\n            \"default\": null,\n            \"markdownDescription\": \"%less.format.maxPreserveNewLines.desc%\"\n          }\n        }\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[css]\": {\n        \"editor.suggest.insertMode\": \"replace\"\n      },\n      \"[scss]\": {\n        \"editor.suggest.insertMode\": \"replace\"\n      },\n      \"[less]\": {\n        \"editor.suggest.insertMode\": \"replace\"\n      }\n    },\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"*.css-data.json\",\n        \"url\": \"https://raw.githubusercontent.com/microsoft/vscode-css-languageservice/master/docs/customData.schema.json\"\n      },\n      {\n        \"fileMatch\": \"package.json\",\n        \"url\": \"./schemas/package.schema.json\"\n      }\n    ]\n  },\n  \"dependencies\": {\n    \"vscode-languageclient\": \"^10.0.0-next.14\",\n    \"vscode-uri\": \"^3.0.8\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/css-language-features/package.nls.json",
    "content": "{\n\t\"displayName\": \"CSS Language Features\",\n\t\"description\": \"Provides rich language support for CSS, LESS and SCSS files.\",\n\t\"css.title\": \"CSS\",\n\t\"css.customData.desc\": \"A list of relative file paths pointing to JSON files following the [custom data format](https://github.com/microsoft/vscode-css-languageservice/blob/master/docs/customData.md).\\n\\nVS Code loads custom data on startup to enhance its CSS support for CSS custom properties (variables), at-rules, pseudo-classes, and pseudo-elements you specify in the JSON files.\\n\\nThe file paths are relative to workspace and only workspace folder settings are considered.\",\n\t\"css.completion.triggerPropertyValueCompletion.desc\": \"By default, VS Code triggers property value completion after selecting a CSS property. Use this setting to disable this behavior.\",\n\t\"css.completion.completePropertyWithSemicolon.desc\": \"Insert semicolon at end of line when completing CSS properties.\",\n\t\"css.lint.argumentsInColorFunction.desc\": \"Invalid number of parameters.\",\n\t\"css.lint.boxModel.desc\": \"Do not use `width` or `height` when using `padding` or `border`.\",\n\t\"css.lint.compatibleVendorPrefixes.desc\": \"When using a vendor-specific prefix make sure to also include all other vendor-specific properties.\",\n\t\"css.lint.duplicateProperties.desc\": \"Do not use duplicate style definitions.\",\n\t\"css.lint.emptyRules.desc\": \"Do not use empty rulesets.\",\n\t\"css.lint.float.desc\": \"Avoid using `float`. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.\",\n\t\"css.lint.fontFaceProperties.desc\": \"`@font-face` rule must define `src` and `font-family` properties.\",\n\t\"css.lint.hexColorLength.desc\": \"Hex colors must consist of 3, 4, 6 or 8 hex numbers.\",\n\t\"css.lint.idSelector.desc\": \"Selectors should not contain IDs because these rules are too tightly coupled with the HTML.\",\n\t\"css.lint.ieHack.desc\": \"IE hacks are only necessary when supporting IE7 and older.\",\n\t\"css.lint.important.desc\": \"Avoid using `!important`. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.\",\n\t\"css.lint.importStatement.desc\": \"Import statements do not load in parallel.\",\n\t\"css.lint.propertyIgnoredDueToDisplay.desc\": \"Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.\",\n\t\"css.lint.universalSelector.desc\": \"The universal selector (`*`) is known to be slow.\",\n\t\"css.lint.unknownAtRules.desc\": \"Unknown at-rule.\",\n\t\"css.lint.unknownProperties.desc\": \"Unknown property.\",\n\t\"css.lint.validProperties.desc\": \"A list of properties that are not validated against the `unknownProperties` rule.\",\n\t\"css.lint.unknownVendorSpecificProperties.desc\": \"Unknown vendor specific property.\",\n\t\"css.lint.vendorPrefix.desc\": \"When using a vendor-specific prefix, also include the standard property.\",\n\t\"css.lint.zeroUnits.desc\": \"No unit for zero needed.\",\n\t\"css.trace.server.desc\": \"Traces the communication between VS Code and the CSS language server.\",\n\t\"css.validate.title\": \"Controls CSS validation and problem severities.\",\n\t\"css.validate.desc\": \"Enables or disables all validations.\",\n\t\"css.hover.documentation\": \"Show property and value documentation in CSS hovers.\",\n\t\"css.hover.references\": \"Show references to MDN in CSS hovers.\",\n\t\"css.format.enable.desc\": \"Enable/disable default CSS formatter.\",\n\t\"css.format.newlineBetweenSelectors.desc\": \"Separate selectors with a new line.\",\n\t\"css.format.newlineBetweenRules.desc\": \"Separate rulesets by a blank line.\",\n\t\"css.format.spaceAroundSelectorSeparator.desc\": \"Ensure a space character around selector separators '>', '+', '~' (e.g. `a > b`).\",\n\t\"css.format.braceStyle.desc\": \"Put braces on the same line as rules (`collapse`) or put braces on own line (`expand`).\",\n\t\"css.format.preserveNewLines.desc\": \"Whether existing line breaks before rules and declarations should be preserved.\",\n\t\"css.format.maxPreserveNewLines.desc\": \"Maximum number of line breaks to be preserved in one chunk, when `#css.format.preserveNewLines#` is enabled.\",\n\t\"less.title\": \"LESS\",\n\t\"less.completion.triggerPropertyValueCompletion.desc\": \"By default, VS Code triggers property value completion after selecting a CSS property. Use this setting to disable this behavior.\",\n\t\"less.completion.completePropertyWithSemicolon.desc\": \"Insert semicolon at end of line when completing CSS properties.\",\n\t\"less.lint.argumentsInColorFunction.desc\": \"Invalid number of parameters.\",\n\t\"less.lint.boxModel.desc\": \"Do not use `width` or `height` when using `padding` or `border`.\",\n\t\"less.lint.compatibleVendorPrefixes.desc\": \"When using a vendor-specific prefix make sure to also include all other vendor-specific properties.\",\n\t\"less.lint.duplicateProperties.desc\": \"Do not use duplicate style definitions.\",\n\t\"less.lint.emptyRules.desc\": \"Do not use empty rulesets.\",\n\t\"less.lint.float.desc\": \"Avoid using `float`. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.\",\n\t\"less.lint.fontFaceProperties.desc\": \"`@font-face` rule must define `src` and `font-family` properties.\",\n\t\"less.lint.hexColorLength.desc\": \"Hex colors must consist of 3, 4, 6 or 8 hex numbers.\",\n\t\"less.lint.idSelector.desc\": \"Selectors should not contain IDs because these rules are too tightly coupled with the HTML.\",\n\t\"less.lint.ieHack.desc\": \"IE hacks are only necessary when supporting IE7 and older.\",\n\t\"less.lint.important.desc\": \"Avoid using `!important`. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.\",\n\t\"less.lint.importStatement.desc\": \"Import statements do not load in parallel.\",\n\t\"less.lint.propertyIgnoredDueToDisplay.desc\": \"Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.\",\n\t\"less.lint.universalSelector.desc\": \"The universal selector (`*`) is known to be slow.\",\n\t\"less.lint.unknownAtRules.desc\": \"Unknown at-rule.\",\n\t\"less.lint.unknownProperties.desc\": \"Unknown property.\",\n\t\"less.lint.validProperties.desc\": \"A list of properties that are not validated against the `unknownProperties` rule.\",\n\t\"less.lint.unknownVendorSpecificProperties.desc\": \"Unknown vendor specific property.\",\n\t\"less.lint.vendorPrefix.desc\": \"When using a vendor-specific prefix, also include the standard property.\",\n\t\"less.lint.zeroUnits.desc\": \"No unit for zero needed.\",\n\t\"less.validate.title\": \"Controls LESS validation and problem severities.\",\n\t\"less.validate.desc\": \"Enables or disables all validations.\",\n\t\"less.hover.documentation\": \"Show property and value documentation in LESS hovers.\",\n\t\"less.hover.references\": \"Show references to MDN in LESS hovers.\",\n\t\"less.format.enable.desc\": \"Enable/disable default LESS formatter.\",\n\t\"less.format.newlineBetweenSelectors.desc\": \"Separate selectors with a new line.\",\n\t\"less.format.newlineBetweenRules.desc\": \"Separate rulesets by a blank line.\",\n\t\"less.format.spaceAroundSelectorSeparator.desc\": \"Ensure a space character around selector separators '>', '+', '~' (e.g. `a > b`).\",\n\t\"less.format.braceStyle.desc\": \"Put braces on the same line as rules (`collapse`) or put braces on own line (`expand`).\",\n\t\"less.format.preserveNewLines.desc\": \"Whether existing line breaks before rules and declarations should be preserved.\",\n\t\"less.format.maxPreserveNewLines.desc\": \"Maximum number of line breaks to be preserved in one chunk, when `#less.format.preserveNewLines#` is enabled.\",\n\t\"scss.title\": \"SCSS (Sass)\",\n\t\"scss.completion.triggerPropertyValueCompletion.desc\": \"By default, VS Code triggers property value completion after selecting a CSS property. Use this setting to disable this behavior.\",\n\t\"scss.completion.completePropertyWithSemicolon.desc\": \"Insert semicolon at end of line when completing CSS properties.\",\n\t\"scss.lint.argumentsInColorFunction.desc\": \"Invalid number of parameters.\",\n\t\"scss.lint.boxModel.desc\": \"Do not use `width` or `height` when using `padding` or `border`.\",\n\t\"scss.lint.compatibleVendorPrefixes.desc\": \"When using a vendor-specific prefix make sure to also include all other vendor-specific properties.\",\n\t\"scss.lint.duplicateProperties.desc\": \"Do not use duplicate style definitions.\",\n\t\"scss.lint.emptyRules.desc\": \"Do not use empty rulesets.\",\n\t\"scss.lint.float.desc\": \"Avoid using `float`. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.\",\n\t\"scss.lint.fontFaceProperties.desc\": \"`@font-face` rule must define `src` and `font-family` properties.\",\n\t\"scss.lint.hexColorLength.desc\": \"Hex colors must consist of 3, 4, 6 or 8 hex numbers.\",\n\t\"scss.lint.idSelector.desc\": \"Selectors should not contain IDs because these rules are too tightly coupled with the HTML.\",\n\t\"scss.lint.ieHack.desc\": \"IE hacks are only necessary when supporting IE7 and older.\",\n\t\"scss.lint.important.desc\": \"Avoid using `!important`. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.\",\n\t\"scss.lint.importStatement.desc\": \"Import statements do not load in parallel.\",\n\t\"scss.lint.propertyIgnoredDueToDisplay.desc\": \"Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.\",\n\t\"scss.lint.universalSelector.desc\": \"The universal selector (`*`) is known to be slow.\",\n\t\"scss.lint.unknownAtRules.desc\": \"Unknown at-rule.\",\n\t\"scss.lint.unknownProperties.desc\": \"Unknown property.\",\n\t\"scss.lint.validProperties.desc\": \"A list of properties that are not validated against the `unknownProperties` rule.\",\n\t\"scss.lint.unknownVendorSpecificProperties.desc\": \"Unknown vendor specific property.\",\n\t\"scss.lint.vendorPrefix.desc\": \"When using a vendor-specific prefix, also include the standard property.\",\n\t\"scss.lint.zeroUnits.desc\": \"No unit for zero needed.\",\n\t\"scss.validate.title\": \"Controls SCSS validation and problem severities.\",\n\t\"scss.validate.desc\": \"Enables or disables all validations.\",\n\t\"scss.hover.documentation\": \"Show property and value documentation in SCSS hovers.\",\n\t\"scss.hover.references\": \"Show references to MDN in SCSS hovers.\",\n\t\"scss.format.enable.desc\": \"Enable/disable default SCSS formatter.\",\n\t\"scss.format.newlineBetweenSelectors.desc\": \"Separate selectors with a new line.\",\n\t\"scss.format.newlineBetweenRules.desc\": \"Separate rulesets by a blank line.\",\n\t\"scss.format.spaceAroundSelectorSeparator.desc\": \"Ensure a space character around selector separators '>', '+', '~' (e.g. `a > b`).\",\n\t\"scss.format.braceStyle.desc\": \"Put braces on the same line as rules (`collapse`) or put braces on own line (`expand`).\",\n\t\"scss.format.preserveNewLines.desc\": \"Whether existing line breaks before rules and declarations should be preserved.\",\n\t\"scss.format.maxPreserveNewLines.desc\": \"Maximum number of line breaks to be preserved in one chunk, when `#scss.format.preserveNewLines#` is enabled.\",\n\t\"css.colorDecorators.enable.deprecationMessage\": \"The setting `css.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.\",\n\t\"scss.colorDecorators.enable.deprecationMessage\": \"The setting `scss.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.\",\n\t\"less.colorDecorators.enable.deprecationMessage\": \"The setting `less.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.\"\n}\n"
  },
  {
    "path": "extensions/css-language-features/schemas/package.schema.json",
    "content": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"contributes\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"css.customData\": {\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"markdownDescription\": \"A list of relative file paths pointing to JSON files following the [custom data format](https://github.com/microsoft/vscode-css-languageservice/blob/master/docs/customData.md).\\n\\nVS Code loads custom data on startup to enhance its CSS support for the custom CSS properties, at directives, pseudo classes and pseudo elements you specify in the JSON files.\\n\\nThe file paths are relative to workspace and only workspace folder settings are considered.\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Relative path to a CSS custom data file\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/css-language-features/server/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.1.0\",\n\t// List of configurations. Add new configurations or edit existing ones.\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Attach\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"port\": 6044,\n\t\t\t\"protocol\": \"inspector\",\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*.js\"]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Unit Tests\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"program\": \"${workspaceFolder}/../../../node_modules/mocha/bin/_mocha\",\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"args\": [\n\t\t\t\t\"--timeout\",\n\t\t\t\t\"999999\",\n\t\t\t\t\"--colors\"\n\t\t\t],\n\t\t\t\"cwd\": \"${workspaceFolder}\",\n\t\t\t\"runtimeExecutable\": null,\n\t\t\t\"runtimeArgs\": [],\n\t\t\t\"env\": {},\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*.js\"]\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/css-language-features/server/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"0.1.0\",\n\t\"command\": \"npm\",\n\t\"isShellCommand\": true,\n\t\"showOutput\": \"silent\",\n\t\"args\": [\"run\", \"watch\"],\n\t\"isWatching\": true,\n\t\"problemMatcher\": \"$tsc-watch\"\n}"
  },
  {
    "path": "extensions/css-language-features/server/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../../shared.webpack.config').browser;\nconst path = require('path');\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/browser/cssServerWorkerMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'cssServerMain.js',\n\t\tpath: path.join(__dirname, 'dist', 'browser'),\n\t\tlibraryTarget: 'var',\n\t\tlibrary: 'serverExportVar'\n\t}\n});\n"
  },
  {
    "path": "extensions/css-language-features/server/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../../shared.webpack.config');\nconst path = require('path');\n\nmodule.exports = withDefaults({\n\tcontext: path.join(__dirname),\n\tentry: {\n\t\textension: './src/node/cssServerNodeMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'cssServerMain.js',\n\t\tpath: path.join(__dirname, 'dist', 'node'),\n\t}\n});\n"
  },
  {
    "path": "extensions/css-language-features/server/package.json",
    "content": "{\n  \"name\": \"vscode-css-languageserver\",\n  \"description\": \"CSS/LESS/SCSS language server\",\n  \"version\": \"1.0.0\",\n  \"author\": \"Microsoft Corporation\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \"*\"\n  },\n  \"main\": \"./out/node/cssServerMain\",\n  \"browser\": \"./dist/browser/cssServerMain\",\n  \"dependencies\": {\n    \"@vscode/l10n\": \"^0.0.18\",\n    \"vscode-css-languageservice\": \"^6.3.3\",\n    \"vscode-languageserver\": \"^10.0.0-next.11\",\n    \"vscode-uri\": \"^3.0.8\"\n  },\n  \"devDependencies\": {\n    \"@types/mocha\": \"^9.1.1\",\n    \"@types/node\": \"20.x\"\n  },\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:css-language-features-server\",\n    \"watch\": \"gulp watch-extension:css-language-features-server\",\n    \"install-service-next\": \"npm install vscode-css-languageservice\",\n    \"install-service-local\": \"npm link vscode-css-languageservice\",\n    \"install-server-next\": \"npm install vscode-languageserver@next\",\n    \"install-server-local\": \"npm install vscode-languageserver\",\n    \"test\": \"node ./test/index.js\"\n  }\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/src/browser/cssServerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createConnection, BrowserMessageReader, BrowserMessageWriter, Disposable } from 'vscode-languageserver/browser';\nimport { RuntimeEnvironment, startServer } from '../cssServer';\n\nconst messageReader = new BrowserMessageReader(self);\nconst messageWriter = new BrowserMessageWriter(self);\n\nconst connection = createConnection(messageReader, messageWriter);\n\nconsole.log = connection.console.log.bind(connection.console);\nconsole.error = connection.console.error.bind(connection.console);\n\nconst runtime: RuntimeEnvironment = {\n\ttimer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, 0, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t},\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t}\n};\n\nstartServer(connection, runtime);\n"
  },
  {
    "path": "extensions/css-language-features/server/src/browser/cssServerWorkerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as l10n from '@vscode/l10n';\n\nlet initialized = false;\nconst pendingMessages: any[] = [];\nconst messageHandler = async (e: any) => {\n\tif (!initialized) {\n\t\tconst l10nLog: string[] = [];\n\t\tinitialized = true;\n\t\tconst i10lLocation = e.data.i10lLocation;\n\t\tif (i10lLocation) {\n\t\t\ttry {\n\t\t\t\tawait l10n.config({ uri: i10lLocation });\n\t\t\t\tl10nLog.push(`l10n: Configured to ${i10lLocation.toString()}.`);\n\t\t\t} catch (e) {\n\t\t\t\tl10nLog.push(`l10n: Problems loading ${i10lLocation.toString()} : ${e}.`);\n\t\t\t}\n\t\t} else {\n\t\t\tl10nLog.push(`l10n: No bundle configured.`);\n\t\t}\n\t\tawait import('./cssServerMain.js');\n\t\tif (self.onmessage !== messageHandler) {\n\t\t\tpendingMessages.forEach(msg => self.onmessage?.(msg));\n\t\t\tpendingMessages.length = 0;\n\t\t}\n\t\tl10nLog.forEach(console.log);\n\t} else {\n\t\tpendingMessages.push(e);\n\t}\n};\nself.onmessage = messageHandler;\n"
  },
  {
    "path": "extensions/css-language-features/server/src/cssServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n\tConnection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder, TextDocumentSyncKind, NotificationType, Disposable, TextDocumentIdentifier, Range, FormattingOptions, TextEdit, Diagnostic\n} from 'vscode-languageserver';\nimport { URI } from 'vscode-uri';\nimport { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet, TextDocument, Position } from 'vscode-css-languageservice';\nimport { getLanguageModelCache } from './languageModelCache';\nimport { runSafeAsync } from './utils/runner';\nimport { DiagnosticsSupport, registerDiagnosticsPullSupport, registerDiagnosticsPushSupport } from './utils/validation';\nimport { getDocumentContext } from './utils/documentContext';\nimport { fetchDataProviders } from './customData';\nimport { RequestService, getRequestService } from './requests';\n\nnamespace CustomDataChangedNotification {\n\texport const type: NotificationType<string[]> = new NotificationType('css/customDataChanged');\n}\n\nexport interface Settings {\n\tcss: LanguageSettings;\n\tless: LanguageSettings;\n\tscss: LanguageSettings;\n}\n\nexport interface RuntimeEnvironment {\n\treadonly file?: RequestService;\n\treadonly http?: RequestService;\n\treadonly timer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable;\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable;\n\t};\n}\n\nexport function startServer(connection: Connection, runtime: RuntimeEnvironment) {\n\n\t// Create a text document manager.\n\tconst documents = new TextDocuments(TextDocument);\n\t// Make the text document manager listen on the connection\n\t// for open, change and close text document events\n\tdocuments.listen(connection);\n\n\tconst stylesheets = getLanguageModelCache<Stylesheet>(10, 60, document => getLanguageService(document).parseStylesheet(document));\n\tdocuments.onDidClose(e => {\n\t\tstylesheets.onDocumentRemoved(e.document);\n\t});\n\tconnection.onShutdown(() => {\n\t\tstylesheets.dispose();\n\t});\n\n\tlet scopedSettingsSupport = false;\n\tlet foldingRangeLimit = Number.MAX_VALUE;\n\tlet workspaceFolders: WorkspaceFolder[];\n\tlet formatterMaxNumberOfEdits = Number.MAX_VALUE;\n\n\tlet dataProvidersReady: Promise<any> = Promise.resolve();\n\n\tlet diagnosticsSupport: DiagnosticsSupport | undefined;\n\n\tconst languageServices: { [id: string]: LanguageService } = {};\n\n\tconst notReady = () => Promise.reject('Not Ready');\n\tlet requestService: RequestService = { getContent: notReady, stat: notReady, readDirectory: notReady };\n\n\t// After the server has started the client sends an initialize request. The server receives\n\t// in the passed params the rootPath of the workspace plus the client capabilities.\n\tconnection.onInitialize((params: InitializeParams): InitializeResult => {\n\n\t\tconst initializationOptions = params.initializationOptions as any || {};\n\n\t\tworkspaceFolders = (<any>params).workspaceFolders;\n\t\tif (!Array.isArray(workspaceFolders)) {\n\t\t\tworkspaceFolders = [];\n\t\t\tif (params.rootPath) {\n\t\t\t\tworkspaceFolders.push({ name: '', uri: URI.file(params.rootPath).toString(true) });\n\t\t\t}\n\t\t}\n\n\t\trequestService = getRequestService(initializationOptions?.handledSchemas || ['file'], connection, runtime);\n\n\t\tfunction getClientCapability<T>(name: string, def: T) {\n\t\t\tconst keys = name.split('.');\n\t\t\tlet c: any = params.capabilities;\n\t\t\tfor (let i = 0; c && i < keys.length; i++) {\n\t\t\t\tif (!c.hasOwnProperty(keys[i])) {\n\t\t\t\t\treturn def;\n\t\t\t\t}\n\t\t\t\tc = c[keys[i]];\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\t\tconst snippetSupport = !!getClientCapability('textDocument.completion.completionItem.snippetSupport', false);\n\t\tscopedSettingsSupport = !!getClientCapability('workspace.configuration', false);\n\t\tfoldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);\n\n\t\tformatterMaxNumberOfEdits = initializationOptions?.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;\n\n\t\tlanguageServices.css = getCSSLanguageService({ fileSystemProvider: requestService, clientCapabilities: params.capabilities });\n\t\tlanguageServices.scss = getSCSSLanguageService({ fileSystemProvider: requestService, clientCapabilities: params.capabilities });\n\t\tlanguageServices.less = getLESSLanguageService({ fileSystemProvider: requestService, clientCapabilities: params.capabilities });\n\n\t\tconst supportsDiagnosticPull = getClientCapability('textDocument.diagnostic', undefined);\n\t\tif (supportsDiagnosticPull === undefined) {\n\t\t\tdiagnosticsSupport = registerDiagnosticsPushSupport(documents, connection, runtime, validateTextDocument);\n\t\t} else {\n\t\t\tdiagnosticsSupport = registerDiagnosticsPullSupport(documents, connection, runtime, validateTextDocument);\n\t\t}\n\n\t\tconst capabilities: ServerCapabilities = {\n\t\t\ttextDocumentSync: TextDocumentSyncKind.Incremental,\n\t\t\tcompletionProvider: snippetSupport ? { resolveProvider: false, triggerCharacters: ['/', '-', ':'] } : undefined,\n\t\t\thoverProvider: true,\n\t\t\tdocumentSymbolProvider: true,\n\t\t\treferencesProvider: true,\n\t\t\tdefinitionProvider: true,\n\t\t\tdocumentHighlightProvider: true,\n\t\t\tdocumentLinkProvider: {\n\t\t\t\tresolveProvider: false\n\t\t\t},\n\t\t\tcodeActionProvider: true,\n\t\t\trenameProvider: true,\n\t\t\tcolorProvider: {},\n\t\t\tfoldingRangeProvider: true,\n\t\t\tselectionRangeProvider: true,\n\t\t\tdiagnosticProvider: {\n\t\t\t\tdocumentSelector: null,\n\t\t\t\tinterFileDependencies: false,\n\t\t\t\tworkspaceDiagnostics: false\n\t\t\t},\n\t\t\tdocumentRangeFormattingProvider: initializationOptions?.provideFormatter === true,\n\t\t\tdocumentFormattingProvider: initializationOptions?.provideFormatter === true,\n\t\t};\n\t\treturn { capabilities };\n\t});\n\n\tfunction getLanguageService(document: TextDocument) {\n\t\tlet service = languageServices[document.languageId];\n\t\tif (!service) {\n\t\t\tconnection.console.log('Document type is ' + document.languageId + ', using css instead.');\n\t\t\tservice = languageServices['css'];\n\t\t}\n\t\treturn service;\n\t}\n\n\tlet documentSettings: { [key: string]: Thenable<LanguageSettings | undefined> } = {};\n\t// remove document settings on close\n\tdocuments.onDidClose(e => {\n\t\tdelete documentSettings[e.document.uri];\n\t});\n\tfunction getDocumentSettings(textDocument: TextDocument): Thenable<LanguageSettings | undefined> {\n\t\tif (scopedSettingsSupport) {\n\t\t\tlet promise = documentSettings[textDocument.uri];\n\t\t\tif (!promise) {\n\t\t\t\tconst configRequestParam = { items: [{ scopeUri: textDocument.uri, section: textDocument.languageId }] };\n\t\t\t\tpromise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => s[0] as LanguageSettings | undefined);\n\t\t\t\tdocumentSettings[textDocument.uri] = promise;\n\t\t\t}\n\t\t\treturn promise;\n\t\t}\n\t\treturn Promise.resolve(undefined);\n\t}\n\n\t// The settings have changed. Is send on server activation as well.\n\tconnection.onDidChangeConfiguration(change => {\n\t\tupdateConfiguration(change.settings as any);\n\t});\n\n\tfunction updateConfiguration(settings: any) {\n\t\tfor (const languageId in languageServices) {\n\t\t\tlanguageServices[languageId].configure(settings[languageId]);\n\t\t}\n\t\t// reset all document settings\n\t\tdocumentSettings = {};\n\t\tdiagnosticsSupport?.requestRefresh();\n\t}\n\n\tasync function validateTextDocument(textDocument: TextDocument): Promise<Diagnostic[]> {\n\t\tconst settingsPromise = getDocumentSettings(textDocument);\n\t\tconst [settings] = await Promise.all([settingsPromise, dataProvidersReady]);\n\n\t\tconst stylesheet = stylesheets.get(textDocument);\n\t\treturn getLanguageService(textDocument).doValidation(textDocument, stylesheet, settings);\n\t}\n\n\tfunction updateDataProviders(dataPaths: string[]) {\n\t\tdataProvidersReady = fetchDataProviders(dataPaths, requestService).then(customDataProviders => {\n\t\t\tfor (const lang in languageServices) {\n\t\t\t\tlanguageServices[lang].setDataProviders(true, customDataProviders);\n\t\t\t}\n\t\t});\n\t}\n\n\tconnection.onCompletion((textDocumentPosition, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(textDocumentPosition.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst [settings,] = await Promise.all([getDocumentSettings(document), dataProvidersReady]);\n\t\t\t\tconst styleSheet = stylesheets.get(document);\n\t\t\t\tconst documentContext = getDocumentContext(document.uri, workspaceFolders);\n\t\t\t\treturn getLanguageService(document).doComplete2(document, textDocumentPosition.position, styleSheet, documentContext, settings?.completion);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`, token);\n\t});\n\n\tconnection.onHover((textDocumentPosition, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(textDocumentPosition.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst [settings,] = await Promise.all([getDocumentSettings(document), dataProvidersReady]);\n\t\t\t\tconst styleSheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).doHover(document, textDocumentPosition.position, styleSheet, settings?.hover);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing hover for ${textDocumentPosition.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentSymbol((documentSymbolParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(documentSymbolParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).findDocumentSymbols2(document, stylesheet);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing document symbols for ${documentSymbolParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDefinition((documentDefinitionParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(documentDefinitionParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).findDefinition(document, documentDefinitionParams.position, stylesheet);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing definitions for ${documentDefinitionParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentHighlight((documentHighlightParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(documentHighlightParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).findDocumentHighlights(document, documentHighlightParams.position, stylesheet);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing document highlights for ${documentHighlightParams.textDocument.uri}`, token);\n\t});\n\n\n\tconnection.onDocumentLinks(async (documentLinkParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(documentLinkParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst documentContext = getDocumentContext(document.uri, workspaceFolders);\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).findDocumentLinks2(document, stylesheet, documentContext);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing document links for ${documentLinkParams.textDocument.uri}`, token);\n\t});\n\n\n\tconnection.onReferences((referenceParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(referenceParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).findReferences(document, referenceParams.position, stylesheet);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing references for ${referenceParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onCodeAction((codeActionParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(codeActionParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).doCodeActions(document, codeActionParams.range, codeActionParams.context, stylesheet);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing code actions for ${codeActionParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentColor((params, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).findDocumentColors(document, stylesheet);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing document colors for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onColorPresentation((params, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).getColorPresentations(document, stylesheet, params.color, params.range);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing color presentations for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onRenameRequest((renameParameters, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(renameParameters.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).doRename(document, renameParameters.position, renameParameters.newName, stylesheet);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing renames for ${renameParameters.textDocument.uri}`, token);\n\t});\n\n\tconnection.onFoldingRanges((params, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\treturn getLanguageService(document).getFoldingRanges(document, { rangeLimit: foldingRangeLimit });\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing folding ranges for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onSelectionRanges((params, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tconst positions: Position[] = params.positions;\n\n\t\t\tif (document) {\n\t\t\t\tawait dataProvidersReady;\n\t\t\t\tconst stylesheet = stylesheets.get(document);\n\t\t\t\treturn getLanguageService(document).getSelectionRanges(document, positions, stylesheet);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing selection ranges for ${params.textDocument.uri}`, token);\n\t});\n\n\tasync function onFormat(textDocument: TextDocumentIdentifier, range: Range | undefined, options: FormattingOptions): Promise<TextEdit[]> {\n\t\tconst document = documents.get(textDocument.uri);\n\t\tif (document) {\n\t\t\tconst edits = getLanguageService(document).format(document, range ?? getFullRange(document), options);\n\t\t\tif (edits.length > formatterMaxNumberOfEdits) {\n\t\t\t\tconst newText = TextDocument.applyEdits(document, edits);\n\t\t\t\treturn [TextEdit.replace(getFullRange(document), newText)];\n\t\t\t}\n\t\t\treturn edits;\n\t\t}\n\t\treturn [];\n\t}\n\n\tconnection.onDocumentRangeFormatting((formatParams, token) => {\n\t\treturn runSafeAsync(runtime, () => onFormat(formatParams.textDocument, formatParams.range, formatParams.options), [], `Error while formatting range for ${formatParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentFormatting((formatParams, token) => {\n\t\treturn runSafeAsync(runtime, () => onFormat(formatParams.textDocument, undefined, formatParams.options), [], `Error while formatting ${formatParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onNotification(CustomDataChangedNotification.type, updateDataProviders);\n\n\t// Listen on the connection\n\tconnection.listen();\n\n}\n\nfunction getFullRange(document: TextDocument): Range {\n\treturn Range.create(Position.create(0, 0), document.positionAt(document.getText().length));\n}\n\n\n\n"
  },
  {
    "path": "extensions/css-language-features/server/src/customData.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICSSDataProvider, newCSSDataProvider } from 'vscode-css-languageservice';\nimport { RequestService } from './requests';\n\nexport function fetchDataProviders(dataPaths: string[], requestService: RequestService): Promise<ICSSDataProvider[]> {\n\tconst providers = dataPaths.map(async p => {\n\t\ttry {\n\t\t\tconst content = await requestService.getContent(p);\n\t\t\treturn parseCSSData(content);\n\t\t} catch (e) {\n\t\t\treturn newCSSDataProvider({ version: 1 });\n\t\t}\n\t});\n\n\treturn Promise.all(providers);\n}\n\nfunction parseCSSData(source: string): ICSSDataProvider {\n\tlet rawData: any;\n\n\ttry {\n\t\trawData = JSON.parse(source);\n\t} catch (err) {\n\t\treturn newCSSDataProvider({ version: 1 });\n\t}\n\n\treturn newCSSDataProvider({\n\t\tversion: rawData.version || 1,\n\t\tproperties: rawData.properties || [],\n\t\tatDirectives: rawData.atDirectives || [],\n\t\tpseudoClasses: rawData.pseudoClasses || [],\n\t\tpseudoElements: rawData.pseudoElements || []\n\t});\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/src/languageModelCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument } from 'vscode-css-languageservice';\n\nexport interface LanguageModelCache<T> {\n\tget(document: TextDocument): T;\n\tonDocumentRemoved(document: TextDocument): void;\n\tdispose(): void;\n}\n\nexport function getLanguageModelCache<T>(maxEntries: number, cleanupIntervalTimeInSec: number, parse: (document: TextDocument) => T): LanguageModelCache<T> {\n\tlet languageModels: { [uri: string]: { version: number; languageId: string; cTime: number; languageModel: T } } = {};\n\tlet nModels = 0;\n\n\tlet cleanupInterval: NodeJS.Timeout | undefined = undefined;\n\tif (cleanupIntervalTimeInSec > 0) {\n\t\tcleanupInterval = setInterval(() => {\n\t\t\tconst cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;\n\t\t\tconst uris = Object.keys(languageModels);\n\t\t\tfor (const uri of uris) {\n\t\t\t\tconst languageModelInfo = languageModels[uri];\n\t\t\t\tif (languageModelInfo.cTime < cutoffTime) {\n\t\t\t\t\tdelete languageModels[uri];\n\t\t\t\t\tnModels--;\n\t\t\t\t}\n\t\t\t}\n\t\t}, cleanupIntervalTimeInSec * 1000);\n\t}\n\n\treturn {\n\t\tget(document: TextDocument): T {\n\t\t\tconst version = document.version;\n\t\t\tconst languageId = document.languageId;\n\t\t\tconst languageModelInfo = languageModels[document.uri];\n\t\t\tif (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {\n\t\t\t\tlanguageModelInfo.cTime = Date.now();\n\t\t\t\treturn languageModelInfo.languageModel;\n\t\t\t}\n\t\t\tconst languageModel = parse(document);\n\t\t\tlanguageModels[document.uri] = { languageModel, version, languageId, cTime: Date.now() };\n\t\t\tif (!languageModelInfo) {\n\t\t\t\tnModels++;\n\t\t\t}\n\n\t\t\tif (nModels === maxEntries) {\n\t\t\t\tlet oldestTime = Number.MAX_VALUE;\n\t\t\t\tlet oldestUri = null;\n\t\t\t\tfor (const uri in languageModels) {\n\t\t\t\t\tconst languageModelInfo = languageModels[uri];\n\t\t\t\t\tif (languageModelInfo.cTime < oldestTime) {\n\t\t\t\t\t\toldestUri = uri;\n\t\t\t\t\t\toldestTime = languageModelInfo.cTime;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (oldestUri) {\n\t\t\t\t\tdelete languageModels[oldestUri];\n\t\t\t\t\tnModels--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn languageModel;\n\n\t\t},\n\t\tonDocumentRemoved(document: TextDocument) {\n\t\t\tconst uri = document.uri;\n\t\t\tif (languageModels[uri]) {\n\t\t\t\tdelete languageModels[uri];\n\t\t\t\tnModels--;\n\t\t\t}\n\t\t},\n\t\tdispose() {\n\t\t\tif (typeof cleanupInterval !== 'undefined') {\n\t\t\t\tclearInterval(cleanupInterval);\n\t\t\t\tcleanupInterval = undefined;\n\t\t\t\tlanguageModels = {};\n\t\t\t\tnModels = 0;\n\t\t\t}\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/src/node/cssServerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createConnection, Connection, Disposable } from 'vscode-languageserver/node';\nimport { formatError } from '../utils/runner';\nimport { RuntimeEnvironment, startServer } from '../cssServer';\nimport { getNodeFSRequestService } from './nodeFs';\n\n// Create a connection for the server.\nconst connection: Connection = createConnection();\n\nconsole.log = connection.console.log.bind(connection.console);\nconsole.error = connection.console.error.bind(connection.console);\n\nprocess.on('unhandledRejection', (e: any) => {\n\tconnection.console.error(formatError(`Unhandled exception`, e));\n});\n\nconst runtime: RuntimeEnvironment = {\n\ttimer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable {\n\t\t\tconst handle = setImmediate(callback, ...args);\n\t\t\treturn { dispose: () => clearImmediate(handle) };\n\t\t},\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t},\n\tfile: getNodeFSRequestService()\n};\n\nstartServer(connection, runtime);\n"
  },
  {
    "path": "extensions/css-language-features/server/src/node/cssServerNodeMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as l10n from '@vscode/l10n';\nasync function setupMain() {\n\tconst l10nLog: string[] = [];\n\n\tconst i10lLocation = process.env['VSCODE_L10N_BUNDLE_LOCATION'];\n\tif (i10lLocation) {\n\t\ttry {\n\t\t\tawait l10n.config({ uri: i10lLocation });\n\t\t\tl10nLog.push(`l10n: Configured to ${i10lLocation.toString()}`);\n\t\t} catch (e) {\n\t\t\tl10nLog.push(`l10n: Problems loading ${i10lLocation.toString()} : ${e}`);\n\t\t}\n\t}\n\tawait import('./cssServerMain.js');\n\tl10nLog.forEach(console.log);\n}\nsetupMain();\n"
  },
  {
    "path": "extensions/css-language-features/server/src/node/nodeFs.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { RequestService } from '../requests';\nimport { URI as Uri } from 'vscode-uri';\n\nimport * as fs from 'fs';\nimport { FileType } from 'vscode-css-languageservice';\n\nexport function getNodeFSRequestService(): RequestService {\n\tfunction ensureFileUri(location: string) {\n\t\tif (!location.startsWith('file://')) {\n\t\t\tthrow new Error('fileRequestService can only handle file URLs');\n\t\t}\n\t}\n\treturn {\n\t\tgetContent(location: string, encoding?: BufferEncoding) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst uri = Uri.parse(location);\n\t\t\t\tfs.readFile(uri.fsPath, encoding, (err, buf) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t}\n\t\t\t\t\tc(buf.toString());\n\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tstat(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst uri = Uri.parse(location);\n\t\t\t\tfs.stat(uri.fsPath, (err, stats) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\t\t\t\treturn c({ type: FileType.Unknown, ctime: -1, mtime: -1, size: -1 });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet type = FileType.Unknown;\n\t\t\t\t\tif (stats.isFile()) {\n\t\t\t\t\t\ttype = FileType.File;\n\t\t\t\t\t} else if (stats.isDirectory()) {\n\t\t\t\t\t\ttype = FileType.Directory;\n\t\t\t\t\t} else if (stats.isSymbolicLink()) {\n\t\t\t\t\t\ttype = FileType.SymbolicLink;\n\t\t\t\t\t}\n\n\t\t\t\t\tc({\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tctime: stats.ctime.getTime(),\n\t\t\t\t\t\tmtime: stats.mtime.getTime(),\n\t\t\t\t\t\tsize: stats.size\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\treadDirectory(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst path = Uri.parse(location).fsPath;\n\n\t\t\t\tfs.readdir(path, { withFileTypes: true }, (err, children) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t}\n\t\t\t\t\tc(children.map(stat => {\n\t\t\t\t\t\tif (stat.isSymbolicLink()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.SymbolicLink];\n\t\t\t\t\t\t} else if (stat.isDirectory()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Directory];\n\t\t\t\t\t\t} else if (stat.isFile()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.File];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Unknown];\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/src/requests.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { RequestType, Connection } from 'vscode-languageserver';\nimport { RuntimeEnvironment } from './cssServer';\n\nexport namespace FsContentRequest {\n\texport const type: RequestType<{ uri: string; encoding?: string }, string, any> = new RequestType('fs/content');\n}\nexport namespace FsStatRequest {\n\texport const type: RequestType<string, FileStat, any> = new RequestType('fs/stat');\n}\n\nexport namespace FsReadDirRequest {\n\texport const type: RequestType<string, [string, FileType][], any> = new RequestType('fs/readDir');\n}\n\nexport enum FileType {\n\t/**\n\t * The file type is unknown.\n\t */\n\tUnknown = 0,\n\t/**\n\t * A regular file.\n\t */\n\tFile = 1,\n\t/**\n\t * A directory.\n\t */\n\tDirectory = 2,\n\t/**\n\t * A symbolic link to a file.\n\t */\n\tSymbolicLink = 64\n}\nexport interface FileStat {\n\t/**\n\t * The type of the file, e.g. is a regular file, a directory, or symbolic link\n\t * to a file.\n\t */\n\ttype: FileType;\n\t/**\n\t * The creation timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tctime: number;\n\t/**\n\t * The modification timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tmtime: number;\n\t/**\n\t * The size in bytes.\n\t */\n\tsize: number;\n}\n\nexport interface RequestService {\n\tgetContent(uri: string, encoding?: string): Promise<string>;\n\n\tstat(uri: string): Promise<FileStat>;\n\treadDirectory(uri: string): Promise<[string, FileType][]>;\n}\n\n\nexport function getRequestService(handledSchemas: string[], connection: Connection, runtime: RuntimeEnvironment): RequestService {\n\tconst builtInHandlers: { [protocol: string]: RequestService | undefined } = {};\n\tfor (const protocol of handledSchemas) {\n\t\tif (protocol === 'file') {\n\t\t\tbuiltInHandlers[protocol] = runtime.file;\n\t\t} else if (protocol === 'http' || protocol === 'https') {\n\t\t\tbuiltInHandlers[protocol] = runtime.http;\n\t\t}\n\t}\n\treturn {\n\t\tasync stat(uri: string): Promise<FileStat> {\n\t\t\tconst handler = builtInHandlers[getScheme(uri)];\n\t\t\tif (handler) {\n\t\t\t\treturn handler.stat(uri);\n\t\t\t}\n\t\t\tconst res = await connection.sendRequest(FsStatRequest.type, uri.toString());\n\t\t\treturn res;\n\t\t},\n\t\treadDirectory(uri: string): Promise<[string, FileType][]> {\n\t\t\tconst handler = builtInHandlers[getScheme(uri)];\n\t\t\tif (handler) {\n\t\t\t\treturn handler.readDirectory(uri);\n\t\t\t}\n\t\t\treturn connection.sendRequest(FsReadDirRequest.type, uri.toString());\n\t\t},\n\t\tgetContent(uri: string, encoding?: string): Promise<string> {\n\t\t\tconst handler = builtInHandlers[getScheme(uri)];\n\t\t\tif (handler) {\n\t\t\t\treturn handler.getContent(uri, encoding);\n\t\t\t}\n\t\t\treturn connection.sendRequest(FsContentRequest.type, { uri: uri.toString(), encoding });\n\t\t}\n\t};\n}\n\nfunction getScheme(uri: string) {\n\treturn uri.substr(0, uri.indexOf(':'));\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/src/test/completion.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport 'mocha';\nimport * as assert from 'assert';\nimport * as path from 'path';\nimport { URI } from 'vscode-uri';\nimport { TextDocument, CompletionList, TextEdit } from 'vscode-languageserver-types';\nimport { WorkspaceFolder } from 'vscode-languageserver-protocol';\nimport { getCSSLanguageService, LanguageServiceOptions, getSCSSLanguageService } from 'vscode-css-languageservice';\nimport { getNodeFSRequestService } from '../node/nodeFs';\nimport { getDocumentContext } from '../utils/documentContext';\n\nexport interface ItemDescription {\n\tlabel: string;\n\tresultText?: string;\n}\n\nsuite('Completions', () => {\n\n\tconst assertCompletion = function (completions: CompletionList, expected: ItemDescription, document: TextDocument, _offset: number) {\n\t\tconst matches = completions.items.filter(completion => {\n\t\t\treturn completion.label === expected.label;\n\t\t});\n\n\t\tassert.strictEqual(matches.length, 1, `${expected.label} should only existing once: Actual: ${completions.items.map(c => c.label).join(', ')}`);\n\t\tconst match = matches[0];\n\t\tif (expected.resultText && TextEdit.is(match.textEdit)) {\n\t\t\tassert.strictEqual(TextDocument.applyEdits(document, [match.textEdit]), expected.resultText);\n\t\t}\n\t};\n\n\tasync function assertCompletions(value: string, expected: { count?: number; items?: ItemDescription[] }, testUri: string, workspaceFolders?: WorkspaceFolder[], lang: string = 'css'): Promise<any> {\n\t\tconst offset = value.indexOf('|');\n\t\tvalue = value.substr(0, offset) + value.substr(offset + 1);\n\n\t\tconst document = TextDocument.create(testUri, lang, 0, value);\n\t\tconst position = document.positionAt(offset);\n\n\t\tif (!workspaceFolders) {\n\t\t\tworkspaceFolders = [{ name: 'x', uri: testUri.substr(0, testUri.lastIndexOf('/')) }];\n\t\t}\n\n\t\tconst lsOptions: LanguageServiceOptions = { fileSystemProvider: getNodeFSRequestService() };\n\t\tconst cssLanguageService = lang === 'scss' ? getSCSSLanguageService(lsOptions) : getCSSLanguageService(lsOptions);\n\n\t\tconst context = getDocumentContext(testUri, workspaceFolders);\n\t\tconst stylesheet = cssLanguageService.parseStylesheet(document);\n\t\tconst list = await cssLanguageService.doComplete2(document, position, stylesheet, context);\n\n\t\tif (expected.count) {\n\t\t\tassert.strictEqual(list.items.length, expected.count);\n\t\t}\n\t\tif (expected.items) {\n\t\t\tfor (const item of expected.items) {\n\t\t\t\tassertCompletion(list, item, document, offset);\n\t\t\t}\n\t\t}\n\t}\n\n\ttest('CSS url() Path completion', async function () {\n\t\tconst testUri = URI.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString(true);\n\t\tconst folders = [{ name: 'x', uri: URI.file(path.resolve(__dirname, '../../test')).toString(true) }];\n\n\t\tawait assertCompletions('html { background-image: url(\"./|\")', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.html', resultText: 'html { background-image: url(\"./about.html\")' }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`html { background-image: url('../|')`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: `html { background-image: url('../about/')` },\n\t\t\t\t{ label: 'index.html', resultText: `html { background-image: url('../index.html')` },\n\t\t\t\t{ label: 'src/', resultText: `html { background-image: url('../src/')` }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`html { background-image: url('../src/a|')`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: `html { background-image: url('../src/feature.js')` },\n\t\t\t\t{ label: 'data/', resultText: `html { background-image: url('../src/data/')` },\n\t\t\t\t{ label: 'test.js', resultText: `html { background-image: url('../src/test.js')` }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`html { background-image: url('../src/data/f|.asar')`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'foo.asar', resultText: `html { background-image: url('../src/data/foo.asar')` }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`html { background-image: url('|')`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.html', resultText: `html { background-image: url('about.html')` },\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`html { background-image: url('/|')`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'pathCompletionFixtures/', resultText: `html { background-image: url('/pathCompletionFixtures/')` }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`html { background-image: url('/pathCompletionFixtures/|')`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: `html { background-image: url('/pathCompletionFixtures/about/')` },\n\t\t\t\t{ label: 'index.html', resultText: `html { background-image: url('/pathCompletionFixtures/index.html')` },\n\t\t\t\t{ label: 'src/', resultText: `html { background-image: url('/pathCompletionFixtures/src/')` }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`html { background-image: url(\"/|\")`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'pathCompletionFixtures/', resultText: `html { background-image: url(\"/pathCompletionFixtures/\")` }\n\t\t\t]\n\t\t}, testUri, folders);\n\t});\n\n\ttest('CSS url() Path Completion - Unquoted url', async function () {\n\t\tconst testUri = URI.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString(true);\n\t\tconst folders = [{ name: 'x', uri: URI.file(path.resolve(__dirname, '../../test')).toString(true) }];\n\n\t\tawait assertCompletions('html { background-image: url(./|)', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.html', resultText: 'html { background-image: url(./about.html)' }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions('html { background-image: url(./a|)', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.html', resultText: 'html { background-image: url(./about.html)' }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions('html { background-image: url(../|src/)', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: 'html { background-image: url(../about/)' }\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions('html { background-image: url(../s|rc/)', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: 'html { background-image: url(../about/)' }\n\t\t\t]\n\t\t}, testUri, folders);\n\t});\n\n\ttest('CSS @import Path completion', async function () {\n\t\tconst testUri = URI.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString(true);\n\t\tconst folders = [{ name: 'x', uri: URI.file(path.resolve(__dirname, '../../test')).toString(true) }];\n\n\t\tawait assertCompletions(`@import './|'`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.html', resultText: `@import './about.html'` },\n\t\t\t]\n\t\t}, testUri, folders);\n\n\t\tawait assertCompletions(`@import '../|'`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: `@import '../about/'` },\n\t\t\t\t{ label: 'scss/', resultText: `@import '../scss/'` },\n\t\t\t\t{ label: 'index.html', resultText: `@import '../index.html'` },\n\t\t\t\t{ label: 'src/', resultText: `@import '../src/'` }\n\t\t\t]\n\t\t}, testUri, folders);\n\t});\n\n\t/**\n\t * For SCSS, `@import 'foo';` can be used for importing partial file `_foo.scss`\n\t */\n\ttest('SCSS @import Path completion', async function () {\n\t\tconst testCSSUri = URI.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString(true);\n\t\tconst folders = [{ name: 'x', uri: URI.file(path.resolve(__dirname, '../../test')).toString(true) }];\n\n\t\t/**\n\t\t * We are in a CSS file, so no special treatment for SCSS partial files\n\t\t*/\n\t\tawait assertCompletions(`@import '../scss/|'`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'main.scss', resultText: `@import '../scss/main.scss'` },\n\t\t\t\t{ label: '_foo.scss', resultText: `@import '../scss/_foo.scss'` }\n\t\t\t]\n\t\t}, testCSSUri, folders);\n\n\t\tconst testSCSSUri = URI.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/scss/main.scss')).toString(true);\n\t\tawait assertCompletions(`@import './|'`, {\n\t\t\titems: [\n\t\t\t\t{ label: '_foo.scss', resultText: `@import './foo'` }\n\t\t\t]\n\t\t}, testSCSSUri, folders, 'scss');\n\t});\n\n\ttest('Completion should ignore files/folders starting with dot', async function () {\n\t\tconst testUri = URI.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString(true);\n\t\tconst folders = [{ name: 'x', uri: URI.file(path.resolve(__dirname, '../../test')).toString(true) }];\n\n\t\tawait assertCompletions('html { background-image: url(\"../|\")', {\n\t\t\tcount: 4\n\t\t}, testUri, folders);\n\n\t});\n});\n"
  },
  {
    "path": "extensions/css-language-features/server/src/test/links.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport 'mocha';\nimport * as assert from 'assert';\nimport { URI } from 'vscode-uri';\nimport { resolve } from 'path';\nimport { TextDocument, DocumentLink } from 'vscode-languageserver-types';\nimport { WorkspaceFolder } from 'vscode-languageserver-protocol';\nimport { getCSSLanguageService } from 'vscode-css-languageservice';\nimport { getDocumentContext } from '../utils/documentContext';\nimport { getNodeFSRequestService } from '../node/nodeFs';\n\nexport interface ItemDescription {\n\toffset: number;\n\tvalue: string;\n\ttarget: string;\n}\n\nsuite('Links', () => {\n\tconst cssLanguageService = getCSSLanguageService({ fileSystemProvider: getNodeFSRequestService() });\n\n\tconst assertLink = function (links: DocumentLink[], expected: ItemDescription, document: TextDocument) {\n\t\tconst matches = links.filter(link => {\n\t\t\treturn document.offsetAt(link.range.start) === expected.offset;\n\t\t});\n\n\t\tassert.strictEqual(matches.length, 1, `${expected.offset} should only existing once: Actual: ${links.map(l => document.offsetAt(l.range.start)).join(', ')}`);\n\t\tconst match = matches[0];\n\t\tassert.strictEqual(document.getText(match.range), expected.value);\n\t\tassert.strictEqual(match.target, expected.target);\n\t};\n\n\tasync function assertLinks(value: string, expected: ItemDescription[], testUri: string, workspaceFolders?: WorkspaceFolder[], lang: string = 'css'): Promise<void> {\n\t\tconst offset = value.indexOf('|');\n\t\tvalue = value.substr(0, offset) + value.substr(offset + 1);\n\n\t\tconst document = TextDocument.create(testUri, lang, 0, value);\n\n\t\tif (!workspaceFolders) {\n\t\t\tworkspaceFolders = [{ name: 'x', uri: testUri.substr(0, testUri.lastIndexOf('/')) }];\n\t\t}\n\n\t\tconst context = getDocumentContext(testUri, workspaceFolders);\n\n\t\tconst stylesheet = cssLanguageService.parseStylesheet(document);\n\t\tconst links = await cssLanguageService.findDocumentLinks2(document, stylesheet, context)!;\n\n\t\tassert.strictEqual(links.length, expected.length);\n\n\t\tfor (const item of expected) {\n\t\t\tassertLink(links, item, document);\n\t\t}\n\t}\n\n\tfunction getTestResource(path: string) {\n\t\treturn URI.file(resolve(__dirname, '../../test/linksTestFixtures', path)).toString(true);\n\t}\n\n\ttest('url links', async function () {\n\n\t\tconst testUri = getTestResource('about.css');\n\t\tconst folders = [{ name: 'x', uri: getTestResource('') }];\n\n\t\tawait assertLinks('html { background-image: url(\"hello.html|\")',\n\t\t\t[{ offset: 29, value: '\"hello.html\"', target: getTestResource('hello.html') }], testUri, folders\n\t\t);\n\t});\n\n\ttest('url links - untitled', async function () {\n\n\t\tconst testUri = 'untitled:untitled-1';\n\t\tconst folders = [{ name: 'x', uri: getTestResource('') }];\n\n\t\tawait assertLinks('@import url(\"base.css|\");\")',\n\t\t\t[{ offset: 12, value: '\"base.css\"', target: 'untitled:base.css' }], testUri, folders\n\t\t);\n\t});\n\n\ttest('node module resolving', async function () {\n\n\t\tconst testUri = getTestResource('about.css');\n\t\tconst folders = [{ name: 'x', uri: getTestResource('') }];\n\n\t\tawait assertLinks('html { background-image: url(\"~foo/hello.html|\")',\n\t\t\t[{ offset: 29, value: '\"~foo/hello.html\"', target: getTestResource('node_modules/foo/hello.html') }], testUri, folders\n\t\t);\n\t});\n\n\ttest('node module subfolder resolving', async function () {\n\n\t\tconst testUri = getTestResource('subdir/about.css');\n\t\tconst folders = [{ name: 'x', uri: getTestResource('') }];\n\n\t\tawait assertLinks('html { background-image: url(\"~foo/hello.html|\")',\n\t\t\t[{ offset: 29, value: '\"~foo/hello.html\"', target: getTestResource('node_modules/foo/hello.html') }], testUri, folders\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "extensions/css-language-features/server/src/utils/documentContext.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { DocumentContext } from 'vscode-css-languageservice';\nimport { endsWith, startsWith } from '../utils/strings';\nimport { WorkspaceFolder } from 'vscode-languageserver';\nimport { Utils, URI } from 'vscode-uri';\n\nexport function getDocumentContext(documentUri: string, workspaceFolders: WorkspaceFolder[]): DocumentContext {\n\tfunction getRootFolder(): string | undefined {\n\t\tfor (const folder of workspaceFolders) {\n\t\t\tlet folderURI = folder.uri;\n\t\t\tif (!endsWith(folderURI, '/')) {\n\t\t\t\tfolderURI = folderURI + '/';\n\t\t\t}\n\t\t\tif (startsWith(documentUri, folderURI)) {\n\t\t\t\treturn folderURI;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tresolveReference: (ref: string, base = documentUri) => {\n\t\t\tif (ref[0] === '/') { // resolve absolute path against the current workspace folder\n\t\t\t\tconst folderUri = getRootFolder();\n\t\t\t\tif (folderUri) {\n\t\t\t\t\treturn folderUri + ref.substring(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst baseUri = URI.parse(base);\n\t\t\tconst baseUriDir = baseUri.path.endsWith('/') ? baseUri : Utils.dirname(baseUri);\n\t\t\treturn Utils.resolvePath(baseUriDir, ref).toString(true);\n\t\t},\n\t};\n}\n\n"
  },
  {
    "path": "extensions/css-language-features/server/src/utils/runner.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ResponseError, CancellationToken, LSPErrorCodes } from 'vscode-languageserver';\nimport { RuntimeEnvironment } from '../cssServer';\n\nexport function formatError(message: string, err: any): string {\n\tif (err instanceof Error) {\n\t\tconst error = <Error>err;\n\t\treturn `${message}: ${error.message}\\n${error.stack}`;\n\t} else if (typeof err === 'string') {\n\t\treturn `${message}: ${err}`;\n\t} else if (err) {\n\t\treturn `${message}: ${err.toString()}`;\n\t}\n\treturn message;\n}\n\nexport function runSafeAsync<T>(runtime: RuntimeEnvironment, func: () => Thenable<T>, errorVal: T, errorMessage: string, token: CancellationToken): Thenable<T | ResponseError<any>> {\n\treturn new Promise<T | ResponseError<any>>((resolve) => {\n\t\truntime.timer.setImmediate(() => {\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\tresolve(cancelValue());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn func().then(result => {\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\tresolve(cancelValue());\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t}, e => {\n\t\t\t\tconsole.error(formatError(errorMessage, e));\n\t\t\t\tresolve(errorVal);\n\t\t\t});\n\t\t});\n\t});\n}\n\nfunction cancelValue<E>() {\n\treturn new ResponseError<E>(LSPErrorCodes.RequestCancelled, 'Request cancelled');\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/src/utils/strings.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function startsWith(haystack: string, needle: string): boolean {\n\tif (haystack.length < needle.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < needle.length; i++) {\n\t\tif (haystack[i] !== needle[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Determines if haystack ends with needle.\n */\nexport function endsWith(haystack: string, needle: string): boolean {\n\tconst diff = haystack.length - needle.length;\n\tif (diff > 0) {\n\t\treturn haystack.lastIndexOf(needle) === diff;\n\t} else if (diff === 0) {\n\t\treturn haystack === needle;\n\t} else {\n\t\treturn false;\n\t}\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/src/utils/validation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationToken, Connection, Diagnostic, Disposable, DocumentDiagnosticParams, DocumentDiagnosticReport, DocumentDiagnosticReportKind, TextDocuments } from 'vscode-languageserver';\nimport { TextDocument } from 'vscode-css-languageservice';\nimport { formatError, runSafeAsync } from './runner';\nimport { RuntimeEnvironment } from '../cssServer';\n\nexport type Validator = (textDocument: TextDocument) => Promise<Diagnostic[]>;\nexport type DiagnosticsSupport = {\n\tdispose(): void;\n\trequestRefresh(): void;\n};\n\nexport function registerDiagnosticsPushSupport(documents: TextDocuments<TextDocument>, connection: Connection, runtime: RuntimeEnvironment, validate: Validator): DiagnosticsSupport {\n\n\tconst pendingValidationRequests: { [uri: string]: Disposable } = {};\n\tconst validationDelayMs = 500;\n\n\tconst disposables: Disposable[] = [];\n\n\t// The content of a text document has changed. This event is emitted\n\t// when the text document first opened or when its content has changed.\n\tdocuments.onDidChangeContent(change => {\n\t\ttriggerValidation(change.document);\n\t}, undefined, disposables);\n\n\t// a document has closed: clear all diagnostics\n\tdocuments.onDidClose(event => {\n\t\tcleanPendingValidation(event.document);\n\t\tconnection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });\n\t}, undefined, disposables);\n\n\tfunction cleanPendingValidation(textDocument: TextDocument): void {\n\t\tconst request = pendingValidationRequests[textDocument.uri];\n\t\tif (request) {\n\t\t\trequest.dispose();\n\t\t\tdelete pendingValidationRequests[textDocument.uri];\n\t\t}\n\t}\n\n\tfunction triggerValidation(textDocument: TextDocument): void {\n\t\tcleanPendingValidation(textDocument);\n\t\tconst request = pendingValidationRequests[textDocument.uri] = runtime.timer.setTimeout(async () => {\n\t\t\tif (request === pendingValidationRequests[textDocument.uri]) {\n\t\t\t\ttry {\n\t\t\t\t\tconst diagnostics = await validate(textDocument);\n\t\t\t\t\tif (request === pendingValidationRequests[textDocument.uri]) {\n\t\t\t\t\t\tconnection.sendDiagnostics({ uri: textDocument.uri, diagnostics });\n\t\t\t\t\t}\n\t\t\t\t\tdelete pendingValidationRequests[textDocument.uri];\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconnection.console.error(formatError(`Error while validating ${textDocument.uri}`, e));\n\t\t\t\t}\n\t\t\t}\n\t\t}, validationDelayMs);\n\t}\n\n\treturn {\n\t\trequestRefresh: () => {\n\t\t\tdocuments.all().forEach(triggerValidation);\n\t\t},\n\t\tdispose: () => {\n\t\t\tdisposables.forEach(d => d.dispose());\n\t\t\tdisposables.length = 0;\n\t\t\tconst keys = Object.keys(pendingValidationRequests);\n\t\t\tfor (const key of keys) {\n\t\t\t\tpendingValidationRequests[key].dispose();\n\t\t\t\tdelete pendingValidationRequests[key];\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport function registerDiagnosticsPullSupport(documents: TextDocuments<TextDocument>, connection: Connection, runtime: RuntimeEnvironment, validate: Validator): DiagnosticsSupport {\n\n\tfunction newDocumentDiagnosticReport(diagnostics: Diagnostic[]): DocumentDiagnosticReport {\n\t\treturn {\n\t\t\tkind: DocumentDiagnosticReportKind.Full,\n\t\t\titems: diagnostics\n\t\t};\n\t}\n\n\tconst registration = connection.languages.diagnostics.on(async (params: DocumentDiagnosticParams, token: CancellationToken) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\treturn newDocumentDiagnosticReport(await validate(document));\n\t\t\t}\n\t\t\treturn newDocumentDiagnosticReport([]);\n\n\t\t}, newDocumentDiagnosticReport([]), `Error while computing diagnostics for ${params.textDocument.uri}`, token);\n\t});\n\n\tfunction requestRefresh(): void {\n\t\tconnection.languages.diagnostics.refresh();\n\t}\n\n\treturn {\n\t\trequestRefresh,\n\t\tdispose: () => {\n\t\t\tregistration.dispose();\n\t\t}\n\t};\n\n}\n"
  },
  {
    "path": "extensions/css-language-features/server/test/index.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst path = require('path');\nconst Mocha = require('mocha');\nconst glob = require('glob');\n\nconst suite = 'Integration CSS Extension Tests';\n\nconst options = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\nconst mocha = new Mocha(options);\n\nglob.sync(__dirname + '/../out/test/**/*.test.js')\n\t.forEach(file => mocha.addFile(file));\n\nmocha.run(failures => process.exit(failures ? -1 : 0));\n"
  },
  {
    "path": "extensions/css-language-features/server/test/linksTestFixtures/.gitignore",
    "content": "!/node_modules"
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/.foo.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/about/about.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/about/about.html",
    "content": ""
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/index.html",
    "content": ""
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/scss/_foo.scss",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/scss/main.scss",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/src/data/foo.asar",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/src/feature.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/css-language-features/server/test/pathCompletionFixtures/src/test.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/css-language-features/server/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"lib\": [\n\t\t\t\"ES2020\",\n\t\t\t\"WebWorker\"\n\t\t],\n\t\t\"module\": \"Node16\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\"\n\t]\n}\n"
  },
  {
    "path": "extensions/css-language-features/test/mocha.opts",
    "content": "--ui tdd\n--useColors true\nserver/out/test/**.test.js"
  },
  {
    "path": "extensions/dart/.vscodeignore",
    "content": "build/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/dart/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"dart-lang/dart-syntax-highlight\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/dart-lang/dart-syntax-highlight\",\n\t\t\t\t\t\"commitHash\": \"e1ac5c446c2531343393adbe8fff9d45d8a7c412\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright 2020, the Dart project authors.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Redistribution and use in source and binary forms, with or without\",\n\t\t\t\t\"modification, are permitted provided that the following conditions are\",\n\t\t\t\t\"met:\",\n\t\t\t\t\"\",\n\t\t\t\t\"    * Redistributions of source code must retain the above copyright\",\n\t\t\t\t\"    notice, this list of conditions and the following disclaimer.\",\n\t\t\t\t\"    * Redistributions in binary form must reproduce the above\",\n\t\t\t\t\"    copyright notice, this list of conditions and the following\",\n\t\t\t\t\"    disclaimer in the documentation and/or other materials provided\",\n\t\t\t\t\"    with the distribution.\",\n\t\t\t\t\"    * Neither the name of Google LLC nor the names of its\",\n\t\t\t\t\"    contributors may be used to endorse or promote products derived\",\n\t\t\t\t\"    from this software without specific prior written permission.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\",\n\t\t\t\t\"\\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\",\n\t\t\t\t\"LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\",\n\t\t\t\t\"A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\",\n\t\t\t\t\"OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\",\n\t\t\t\t\"SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\",\n\t\t\t\t\"LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\",\n\t\t\t\t\"DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\",\n\t\t\t\t\"THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\",\n\t\t\t\t\"(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\",\n\t\t\t\t\"OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n\t\t\t],\n\t\t\t\"license\": \"BSD\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/dart/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [ \"/*\", \"*/\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\" },\n\t\t{ \"open\": \"[\", \"close\": \"]\" },\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"/**\", \"close\": \" */\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"<\", \">\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"`\", \"`\"]\n\t]\n}\n"
  },
  {
    "path": "extensions/dart/package.json",
    "content": "{\n\t\"name\": \"dart\",\n\t\"displayName\": \"%displayName%\",\n\t\"description\": \"%description%\",\n\t\"version\": \"1.0.0\",\n\t\"publisher\": \"vscode\",\n\t\"license\": \"MIT\",\n\t\"engines\": {\n\t\t\"vscode\": \"0.10.x\"\n\t},\n\t\"scripts\": {\n\t\t\"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin dart-lang/dart-syntax-highlight grammars/dart.json ./syntaxes/dart.tmLanguage.json\"\n\t},\n\t\"categories\": [\n\t\t\"Programming Languages\"\n\t],\n\t\"contributes\": {\n\t\t\"languages\": [\n\t\t\t{\n\t\t\t\t\"id\": \"dart\",\n\t\t\t\t\"extensions\": [\n\t\t\t\t\t\".dart\"\n\t\t\t\t],\n\t\t\t\t\"aliases\": [\n\t\t\t\t\t\"Dart\"\n\t\t\t\t],\n\t\t\t\t\"configuration\": \"./language-configuration.json\"\n\t\t\t}\n\t\t],\n\t\t\"grammars\": [\n\t\t\t{\n\t\t\t\t\"language\": \"dart\",\n\t\t\t\t\"scopeName\": \"source.dart\",\n\t\t\t\t\"path\": \"./syntaxes/dart.tmLanguage.json\"\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "extensions/dart/package.nls.json",
    "content": "{\n\t\"displayName\": \"Dart Language Basics\",\n\t\"description\": \"Provides syntax highlighting & bracket matching in Dart files.\"\n}\n"
  },
  {
    "path": "extensions/dart/syntaxes/dart.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/dart-lang/dart-syntax-highlight/blob/master/grammars/dart.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/dart-lang/dart-syntax-highlight/commit/e1ac5c446c2531343393adbe8fff9d45d8a7c412\",\n\t\"name\": \"Dart\",\n\t\"scopeName\": \"source.dart\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"name\": \"meta.preprocessor.script.dart\",\n\t\t\t\"match\": \"^(#!.*)$\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.declaration.dart\",\n\t\t\t\"begin\": \"^\\\\w*\\\\b(augment\\\\s+library|library|import\\\\s+augment|import|part\\\\s+of|part|export)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.dart\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \";\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.dart\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.import.dart\",\n\t\t\t\t\t\"match\": \"\\\\b(as|show|hide)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.dart\",\n\t\t\t\t\t\"match\": \"\\\\b(if)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#punctuation\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#annotations\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constants-and-special-vars\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operators\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"dartdoc-codeblock-triple\": {\n\t\t\t\"begin\": \"^\\\\s*///\\\\s*(?!\\\\s*```)\",\n\t\t\t\"end\": \"\\n\",\n\t\t\t\"contentName\": \"variable.other.source.dart\"\n\t\t},\n\t\t\"dartdoc-codeblock-block\": {\n\t\t\t\"begin\": \"^\\\\s*\\\\*\\\\s*(?!(\\\\s*```|/))\",\n\t\t\t\"end\": \"\\n\",\n\t\t\t\"contentName\": \"variable.other.source.dart\"\n\t\t},\n\t\t\"dartdoc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\[.*?\\\\])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.name.source.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*///\\\\s*(```)\",\n\t\t\t\t\t\"end\": \"^\\\\s*///\\\\s*(```)|^(?!\\\\s*///)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dartdoc-codeblock-triple\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*\\\\*\\\\s*(```)\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\*\\\\s*(```)|^(?=\\\\s*\\\\*/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dartdoc-codeblock-block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"`[^`\\n]+`\",\n\t\t\t\t\t\"name\": \"variable.other.source.dart\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\*|\\\\/\\\\/)\\\\s{4,}(.*?)(?=($|\\\\*\\\\/))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.source.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.empty.dart\",\n\t\t\t\t\t\"match\": \"/\\\\*\\\\*/\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-doc-oldschool\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-doc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-inline\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-doc-oldschool\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.dart\",\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-doc-oldschool\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dartdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-doc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.dart\",\n\t\t\t\t\t\"begin\": \"///\",\n\t\t\t\t\t\"end\": \"^(?!\\\\s*///)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dartdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-inline\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((//).*)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.dart\",\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"annotations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.annotation.dart\",\n\t\t\t\t\t\"match\": \"@[a-zA-Z]+\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants-and-special-vars\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(true|false|null)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.language.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(this|super|augmented)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b((0(x|X)[0-9a-fA-F][0-9a-fA-F_]*)|(([0-9][0-9_]*\\\\.?[0-9_]*)|(\\\\.[0-9][0-9_]*))((e|E)(\\\\+|-)?[0-9][0-9_]*)?)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-identifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-identifier\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-identifier\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(bool|num|int|double|dynamic)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"support.class.dart\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\bvoid\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"storage.type.primitive.dart\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![a-zA-Z0-9_$])([_$]*[A-Z][a-zA-Z0-9_$]*)\\\\b\",\n\t\t\t\t\t\"end\": \"(?!<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.class.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-args\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-identifier\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$]*[a-z][a-zA-Z0-9_$]*)(<(?:[a-zA-Z0-9_$<>?]|,\\\\s*|\\\\s+extends\\\\s+)+>)?[!?]?\\\\(\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.dart\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-args\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-args\": {\n\t\t\t\"begin\": \"(<)\",\n\t\t\t\"end\": \"(>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"other.source.dart\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"other.source.dart\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-identifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.declaration.dart\",\n\t\t\t\t\t\"match\": \"extends\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.cast.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\bas\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.catch-exception.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(try|on|catch|finally|throw|rethrow)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(break|case|continue|default|do|else|for|if|in|switch|while|when)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(sync(\\\\*)?|async(\\\\*)?|await|yield(\\\\*)?)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\bassert\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.new.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(new)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.return.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(return)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.declaration.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(abstract|sealed|base|interface|class|enum|extends|extension\\\\s+type|extension|external|factory|implements|get(?![(<])|mixin|native|operator|set(?![(<])|typedef|with|covariant)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(macro|augment|static|final|const|required|late)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.primitive.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(?:void|var)\\\\b(?!\\\\$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.dart\",\n\t\t\t\t\t\"match\": \"(?<!\\\\$)\\\\b(is\\\\!?)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.dart\",\n\t\t\t\t\t\"match\": \"\\\\?|:\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.dart\",\n\t\t\t\t\t\"match\": \"(<<|>>>?|~|\\\\^|\\\\||&)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.bitwise.dart\",\n\t\t\t\t\t\"match\": \"((&|\\\\^|\\\\||<<|>>>?)=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.closure.dart\",\n\t\t\t\t\t\"match\": \"(=>)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.dart\",\n\t\t\t\t\t\"match\": \"(==|!=|<=?|>=?)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.arithmetic.dart\",\n\t\t\t\t\t\"match\": \"(([+*/%-]|\\\\~)=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.dart\",\n\t\t\t\t\t\"match\": \"(=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.increment-decrement.dart\",\n\t\t\t\t\t\"match\": \"(\\\\-\\\\-|\\\\+\\\\+)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.dart\",\n\t\t\t\t\t\"match\": \"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.logical.dart\",\n\t\t\t\t\t\"match\": \"(!|&&|\\\\|\\\\|)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants-and-special-vars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.parameter.dart\",\n\t\t\t\t\t\"match\": \"[a-zA-Z0-9_]+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-interp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.embedded.expression.dart\",\n\t\t\t\t\t\"match\": \"\\\\$([a-zA-Z0-9_]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.embedded.expression.dart\",\n\t\t\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.dart\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.interpolated.triple.double.dart\",\n\t\t\t\t\t\"begin\": \"(?<!r)\\\"\\\"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"(?!\\\")\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-interp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.interpolated.triple.single.dart\",\n\t\t\t\t\t\"begin\": \"(?<!r)'''\",\n\t\t\t\t\t\"end\": \"'''(?!')\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-interp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.triple.double.dart\",\n\t\t\t\t\t\"begin\": \"r\\\"\\\"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"(?!\\\")\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.triple.single.dart\",\n\t\t\t\t\t\"begin\": \"r'''\",\n\t\t\t\t\t\"end\": \"'''(?!')\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.interpolated.double.dart\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\|r)\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.string.newline\",\n\t\t\t\t\t\t\t\"match\": \"\\\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-interp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.double.dart\",\n\t\t\t\t\t\"begin\": \"r\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.string.newline\",\n\t\t\t\t\t\t\t\"match\": \"\\\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.interpolated.single.dart\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\|r)'\",\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.string.newline\",\n\t\t\t\t\t\t\t\"match\": \"\\\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-interp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.single.dart\",\n\t\t\t\t\t\"begin\": \"r'\",\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.string.newline\",\n\t\t\t\t\t\t\t\"match\": \"\\\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"punctuation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.comma.dart\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.terminator.dart\",\n\t\t\t\t\t\"match\": \";\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.dot.dart\",\n\t\t\t\t\t\"match\": \"\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/debug-auto-launch/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/debug-auto-launch/.vscode/launch.json",
    "content": "{\n  // Use IntelliSense to learn about possible attributes.\n  // Hover to view descriptions of existing attributes.\n  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Extension\",\n      \"type\": \"extensionHost\",\n      \"request\": \"launch\",\n      \"skipFiles\": [\"<node_internals>/**\"],\n      \"args\": [\n        \"--extensionDevelopmentPath=${workspaceFolder}\",\n      ],\n      \"outFiles\": [\n        \"${workspaceFolder}/out/**/*.js\",\n      ],\n    }\n  ]\n}\n"
  },
  {
    "path": "extensions/debug-auto-launch/.vscodeignore",
    "content": "src/**\ntsconfig.json\nout/**\nextension.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/debug-auto-launch/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t}\n});\n"
  },
  {
    "path": "extensions/debug-auto-launch/package.json",
    "content": "{\n  \"name\": \"debug-auto-launch\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.5.0\"\n  },\n  \"icon\": \"media/icon.png\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"activationEvents\": [\n    \"onStartupFinished\"\n  ],\n  \"main\": \"./out/extension\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:debug-auto-launch\",\n    \"watch\": \"gulp watch-extension:debug-auto-launch\"\n  },\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"command\": \"extension.node-debug.toggleAutoAttach\",\n        \"title\": \"%toggle.auto.attach%\",\n        \"category\": \"Debug\"\n      }\n    ]\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"prettier\": {\n    \"printWidth\": 100,\n    \"trailingComma\": \"all\",\n    \"singleQuote\": true,\n    \"arrowParens\": \"avoid\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/debug-auto-launch/package.nls.json",
    "content": "{\n\t\"displayName\": \"Node Debug Auto-attach\",\n\t\"description\": \"Helper for auto-attach feature when node-debug extensions are not active.\",\n\t\"toggle.auto.attach\": \"Toggle Auto Attach\"\n}\n"
  },
  {
    "path": "extensions/debug-auto-launch/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { promises as fs } from 'fs';\nimport { createServer, Server } from 'net';\nimport { dirname } from 'path';\nimport * as vscode from 'vscode';\n\nconst enum State {\n\tDisabled = 'disabled',\n\tOnlyWithFlag = 'onlyWithFlag',\n\tSmart = 'smart',\n\tAlways = 'always',\n}\nconst TEXT_STATUSBAR_LABEL = {\n\t[State.Disabled]: vscode.l10n.t('Auto Attach: Disabled'),\n\t[State.Always]: vscode.l10n.t('Auto Attach: Always'),\n\t[State.Smart]: vscode.l10n.t('Auto Attach: Smart'),\n\t[State.OnlyWithFlag]: vscode.l10n.t('Auto Attach: With Flag'),\n};\n\nconst TEXT_STATE_LABEL = {\n\t[State.Disabled]: vscode.l10n.t('Disabled'),\n\t[State.Always]: vscode.l10n.t('Always'),\n\t[State.Smart]: vscode.l10n.t('Smart'),\n\t[State.OnlyWithFlag]: vscode.l10n.t('Only With Flag'),\n};\nconst TEXT_STATE_DESCRIPTION = {\n\t[State.Disabled]: vscode.l10n.t('Auto attach is disabled and not shown in status bar'),\n\t[State.Always]: vscode.l10n.t('Auto attach to every Node.js process launched in the terminal'),\n\t[State.Smart]: vscode.l10n.t(\"Auto attach when running scripts that aren't in a node_modules folder\"),\n\t[State.OnlyWithFlag]: vscode.l10n.t('Only auto attach when the `--inspect` flag is given')\n};\nconst TEXT_TOGGLE_WORKSPACE = vscode.l10n.t('Toggle auto attach in this workspace');\nconst TEXT_TOGGLE_GLOBAL = vscode.l10n.t('Toggle auto attach on this machine');\nconst TEXT_TEMP_DISABLE = vscode.l10n.t('Temporarily disable auto attach in this session');\nconst TEXT_TEMP_ENABLE = vscode.l10n.t('Re-enable auto attach');\nconst TEXT_TEMP_DISABLE_LABEL = vscode.l10n.t('Auto Attach: Disabled');\n\nconst TOGGLE_COMMAND = 'extension.node-debug.toggleAutoAttach';\nconst STORAGE_IPC = 'jsDebugIpcState';\n\nconst SETTING_SECTION = 'debug.javascript';\nconst SETTING_STATE = 'autoAttachFilter';\n\n/**\n * settings that, when changed, should cause us to refresh the state vars\n */\nconst SETTINGS_CAUSE_REFRESH = new Set(\n\t['autoAttachSmartPattern', SETTING_STATE].map(s => `${SETTING_SECTION}.${s}`),\n);\n\n\nlet currentState: Promise<{ context: vscode.ExtensionContext; state: State | null }>;\nlet statusItem: vscode.StatusBarItem | undefined; // and there is no status bar item\nlet server: Promise<Server | undefined> | undefined; // auto attach server\nlet isTemporarilyDisabled = false; // whether the auto attach server is disabled temporarily, reset whenever the state changes\n\nexport function activate(context: vscode.ExtensionContext): void {\n\tcurrentState = Promise.resolve({ context, state: null });\n\n\tcontext.subscriptions.push(\n\t\tvscode.commands.registerCommand(TOGGLE_COMMAND, toggleAutoAttachSetting.bind(null, context)),\n\t);\n\n\tcontext.subscriptions.push(\n\t\tvscode.workspace.onDidChangeConfiguration(e => {\n\t\t\t// Whenever a setting is changed, disable auto attach, and re-enable\n\t\t\t// it (if necessary) to refresh variables.\n\t\t\tif (\n\t\t\t\te.affectsConfiguration(`${SETTING_SECTION}.${SETTING_STATE}`) ||\n\t\t\t\t[...SETTINGS_CAUSE_REFRESH].some(setting => e.affectsConfiguration(setting))\n\t\t\t) {\n\t\t\t\trefreshAutoAttachVars();\n\t\t\t}\n\t\t}),\n\t);\n\n\tupdateAutoAttach(readCurrentState());\n}\n\nexport async function deactivate(): Promise<void> {\n\tawait destroyAttachServer();\n}\n\nfunction refreshAutoAttachVars() {\n\tupdateAutoAttach(State.Disabled);\n\tupdateAutoAttach(readCurrentState());\n}\n\nfunction getDefaultScope(info: ReturnType<vscode.WorkspaceConfiguration['inspect']>) {\n\tif (!info) {\n\t\treturn vscode.ConfigurationTarget.Global;\n\t} else if (info.workspaceFolderValue) {\n\t\treturn vscode.ConfigurationTarget.WorkspaceFolder;\n\t} else if (info.workspaceValue) {\n\t\treturn vscode.ConfigurationTarget.Workspace;\n\t} else if (info.globalValue) {\n\t\treturn vscode.ConfigurationTarget.Global;\n\t}\n\n\treturn vscode.ConfigurationTarget.Global;\n}\n\ntype PickResult = { state: State } | { setTempDisabled: boolean } | { scope: vscode.ConfigurationTarget } | undefined;\ntype PickItem = vscode.QuickPickItem & ({ state: State } | { setTempDisabled: boolean });\n\nasync function toggleAutoAttachSetting(context: vscode.ExtensionContext, scope?: vscode.ConfigurationTarget): Promise<void> {\n\tconst section = vscode.workspace.getConfiguration(SETTING_SECTION);\n\tscope = scope || getDefaultScope(section.inspect(SETTING_STATE));\n\n\tconst isGlobalScope = scope === vscode.ConfigurationTarget.Global;\n\tconst quickPick = vscode.window.createQuickPick<PickItem>();\n\tconst current = readCurrentState();\n\n\tconst items: PickItem[] = [State.Always, State.Smart, State.OnlyWithFlag, State.Disabled].map(state => ({\n\t\tstate,\n\t\tlabel: TEXT_STATE_LABEL[state],\n\t\tdescription: TEXT_STATE_DESCRIPTION[state],\n\t\talwaysShow: true,\n\t}));\n\n\tif (current !== State.Disabled) {\n\t\titems.unshift({\n\t\t\tsetTempDisabled: !isTemporarilyDisabled,\n\t\t\tlabel: isTemporarilyDisabled ? TEXT_TEMP_ENABLE : TEXT_TEMP_DISABLE,\n\t\t\talwaysShow: true,\n\t\t});\n\t}\n\n\tquickPick.items = items;\n\tquickPick.activeItems = isTemporarilyDisabled\n\t\t? [items[0]]\n\t\t: quickPick.items.filter(i => 'state' in i && i.state === current);\n\tquickPick.title = isGlobalScope ? TEXT_TOGGLE_GLOBAL : TEXT_TOGGLE_WORKSPACE;\n\tquickPick.buttons = [\n\t\t{\n\t\t\ticonPath: new vscode.ThemeIcon(isGlobalScope ? 'folder' : 'globe'),\n\t\t\ttooltip: isGlobalScope ? TEXT_TOGGLE_WORKSPACE : TEXT_TOGGLE_GLOBAL,\n\t\t},\n\t];\n\n\tquickPick.show();\n\n\tlet result = await new Promise<PickResult>(resolve => {\n\t\tquickPick.onDidAccept(() => resolve(quickPick.selectedItems[0]));\n\t\tquickPick.onDidHide(() => resolve(undefined));\n\t\tquickPick.onDidTriggerButton(() => {\n\t\t\tresolve({\n\t\t\t\tscope: isGlobalScope\n\t\t\t\t\t? vscode.ConfigurationTarget.Workspace\n\t\t\t\t\t: vscode.ConfigurationTarget.Global,\n\t\t\t});\n\t\t});\n\t});\n\n\tquickPick.dispose();\n\n\tif (!result) {\n\t\treturn;\n\t}\n\n\tif ('scope' in result) {\n\t\treturn await toggleAutoAttachSetting(context, result.scope);\n\t}\n\n\tif ('state' in result) {\n\t\tif (result.state !== current) {\n\t\t\tsection.update(SETTING_STATE, result.state, scope);\n\t\t} else if (isTemporarilyDisabled) {\n\t\t\tresult = { setTempDisabled: false };\n\t\t}\n\t}\n\n\tif ('setTempDisabled' in result) {\n\t\tupdateStatusBar(context, current, true);\n\t\tisTemporarilyDisabled = result.setTempDisabled;\n\t\tif (result.setTempDisabled) {\n\t\t\tawait destroyAttachServer();\n\t\t} else {\n\t\t\tawait createAttachServer(context); // unsets temp disabled var internally\n\t\t}\n\t\tupdateStatusBar(context, current, false);\n\t}\n}\n\nfunction readCurrentState(): State {\n\tconst section = vscode.workspace.getConfiguration(SETTING_SECTION);\n\treturn section.get<State>(SETTING_STATE) ?? State.Disabled;\n}\n\nasync function clearJsDebugAttachState(context: vscode.ExtensionContext) {\n\tif (server || await context.workspaceState.get(STORAGE_IPC)) {\n\t\tawait context.workspaceState.update(STORAGE_IPC, undefined);\n\t\tawait vscode.commands.executeCommand('extension.js-debug.clearAutoAttachVariables');\n\t\tawait destroyAttachServer();\n\t}\n}\n\n/**\n * Turns auto attach on, and returns the server auto attach is listening on\n * if it's successful.\n */\nasync function createAttachServer(context: vscode.ExtensionContext) {\n\tconst ipcAddress = await getIpcAddress(context);\n\tif (!ipcAddress) {\n\t\treturn undefined;\n\t}\n\n\tserver = createServerInner(ipcAddress).catch(async err => {\n\t\tconsole.error('[debug-auto-launch] Error creating auto attach server: ', err);\n\n\t\tif (process.platform !== 'win32') {\n\t\t\t// On macOS, and perhaps some Linux distros, the temporary directory can\n\t\t\t// sometimes change. If it looks like that's the cause of a listener\n\t\t\t// error, automatically refresh the auto attach vars.\n\t\t\ttry {\n\t\t\t\tawait fs.access(dirname(ipcAddress));\n\t\t\t} catch {\n\t\t\t\tconsole.error('[debug-auto-launch] Refreshing variables from error');\n\t\t\t\trefreshAutoAttachVars();\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t});\n\n\treturn await server;\n}\n\nconst createServerInner = async (ipcAddress: string) => {\n\ttry {\n\t\treturn await createServerInstance(ipcAddress);\n\t} catch (e) {\n\t\t// On unix/linux, the file can 'leak' if the process exits unexpectedly.\n\t\t// If we see this, try to delete the file and then listen again.\n\t\tawait fs.unlink(ipcAddress).catch(() => undefined);\n\t\treturn await createServerInstance(ipcAddress);\n\t}\n};\n\nconst createServerInstance = (ipcAddress: string) =>\n\tnew Promise<Server>((resolve, reject) => {\n\t\tconst s = createServer(socket => {\n\t\t\tconst data: Buffer[] = [];\n\t\t\tsocket.on('data', async chunk => {\n\t\t\t\tif (chunk[chunk.length - 1] !== 0) {\n\t\t\t\t\t// terminated with NUL byte\n\t\t\t\t\tdata.push(chunk);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdata.push(chunk.slice(0, -1));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait vscode.commands.executeCommand(\n\t\t\t\t\t\t'extension.js-debug.autoAttachToProcess',\n\t\t\t\t\t\tJSON.parse(Buffer.concat(data).toString()),\n\t\t\t\t\t);\n\t\t\t\t\tsocket.write(Buffer.from([0]));\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsocket.write(Buffer.from([1]));\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t}\n\t\t\t});\n\t\t})\n\t\t\t.on('error', reject)\n\t\t\t.listen(ipcAddress, () => resolve(s));\n\t});\n\n/**\n * Destroys the auto-attach server, if it's running.\n */\nasync function destroyAttachServer() {\n\tconst instance = await server;\n\tif (instance) {\n\t\tawait new Promise(r => instance.close(r));\n\t}\n}\n\ninterface CachedIpcState {\n\tipcAddress: string;\n\tjsDebugPath: string | undefined;\n\tsettingsValue: string;\n}\n\n/**\n * Map of logic that happens when auto attach states are entered and exited.\n * All state transitions are queued and run in order; promises are awaited.\n */\nconst transitions: { [S in State]: (context: vscode.ExtensionContext) => Promise<void> } = {\n\tasync [State.Disabled](context) {\n\t\tawait clearJsDebugAttachState(context);\n\t},\n\n\tasync [State.OnlyWithFlag](context) {\n\t\tawait createAttachServer(context);\n\t},\n\n\tasync [State.Smart](context) {\n\t\tawait createAttachServer(context);\n\t},\n\n\tasync [State.Always](context) {\n\t\tawait createAttachServer(context);\n\t},\n};\n\n/**\n * Ensures the status bar text reflects the current state.\n */\nfunction updateStatusBar(context: vscode.ExtensionContext, state: State, busy = false) {\n\tif (state === State.Disabled && !busy) {\n\t\tstatusItem?.hide();\n\t\treturn;\n\t}\n\n\tif (!statusItem) {\n\t\tstatusItem = vscode.window.createStatusBarItem('status.debug.autoAttach', vscode.StatusBarAlignment.Left);\n\t\tstatusItem.name = vscode.l10n.t(\"Debug Auto Attach\");\n\t\tstatusItem.command = TOGGLE_COMMAND;\n\t\tstatusItem.tooltip = vscode.l10n.t(\"Automatically attach to node.js processes in debug mode\");\n\t\tcontext.subscriptions.push(statusItem);\n\t}\n\n\tlet text = busy ? '$(loading) ' : '';\n\ttext += isTemporarilyDisabled ? TEXT_TEMP_DISABLE_LABEL : TEXT_STATUSBAR_LABEL[state];\n\tstatusItem.text = text;\n\tstatusItem.show();\n}\n\n/**\n * Updates the auto attach feature based on the user or workspace setting\n */\nfunction updateAutoAttach(newState: State) {\n\tcurrentState = currentState.then(async ({ context, state: oldState }) => {\n\t\tif (newState === oldState) {\n\t\t\treturn { context, state: oldState };\n\t\t}\n\n\t\tif (oldState !== null) {\n\t\t\tupdateStatusBar(context, oldState, true);\n\t\t}\n\n\t\tawait transitions[newState](context);\n\t\tisTemporarilyDisabled = false;\n\t\tupdateStatusBar(context, newState, false);\n\t\treturn { context, state: newState };\n\t});\n}\n\n/**\n * Gets the IPC address for the server to listen on for js-debug sessions. This\n * is cached such that we can reuse the address of previous activations.\n */\nasync function getIpcAddress(context: vscode.ExtensionContext) {\n\t// Iff the `cachedData` is present, the js-debug registered environment\n\t// variables for this workspace--cachedData is set after successfully\n\t// invoking the attachment command.\n\tconst cachedIpc = context.workspaceState.get<CachedIpcState>(STORAGE_IPC);\n\n\t// We invalidate the IPC data if the js-debug path changes, since that\n\t// indicates the extension was updated or reinstalled and the\n\t// environment variables will have been lost.\n\t// todo: make a way in the API to read environment data directly without activating js-debug?\n\tconst jsDebugPath =\n\t\tvscode.extensions.getExtension('ms-vscode.js-debug-nightly')?.extensionPath ||\n\t\tvscode.extensions.getExtension('ms-vscode.js-debug')?.extensionPath;\n\n\tconst settingsValue = getJsDebugSettingKey();\n\tif (cachedIpc?.jsDebugPath === jsDebugPath && cachedIpc?.settingsValue === settingsValue) {\n\t\treturn cachedIpc.ipcAddress;\n\t}\n\n\tconst result = await vscode.commands.executeCommand<{ ipcAddress: string }>(\n\t\t'extension.js-debug.setAutoAttachVariables',\n\t\tcachedIpc?.ipcAddress,\n\t);\n\tif (!result) {\n\t\treturn;\n\t}\n\n\tconst ipcAddress = result.ipcAddress;\n\tawait context.workspaceState.update(STORAGE_IPC, {\n\t\tipcAddress,\n\t\tjsDebugPath,\n\t\tsettingsValue,\n\t} satisfies CachedIpcState);\n\n\treturn ipcAddress;\n}\n\nfunction getJsDebugSettingKey() {\n\tconst o: { [key: string]: unknown } = {};\n\tconst config = vscode.workspace.getConfiguration(SETTING_SECTION);\n\tfor (const setting of SETTINGS_CAUSE_REFRESH) {\n\t\to[setting] = config.get(setting);\n\t}\n\n\treturn JSON.stringify(o);\n}\n"
  },
  {
    "path": "extensions/debug-auto-launch/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"downlevelIteration\": true,\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/debug-server-ready/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/debug-server-ready/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Run Server Ready Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t]\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/debug-server-ready/.vscodeignore",
    "content": "src/**\ntsconfig.json\nout/**\nextension.webpack.config.js\npackage-lock.json\n.vscode\n"
  },
  {
    "path": "extensions/debug-server-ready/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t}\n});\n"
  },
  {
    "path": "extensions/debug-server-ready/package.json",
    "content": "{\n  \"name\": \"debug-server-ready\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.32.0\"\n  },\n  \"icon\": \"media/icon.png\",\n  \"activationEvents\": [\n    \"onDebugResolve\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"enabledApiProposals\": [\n    \"terminalDataWriteEvent\"\n  ],\n  \"main\": \"./out/extension\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:debug-server-ready\",\n    \"watch\": \"gulp watch-extension:debug-server-ready\"\n  },\n  \"contributes\": {\n    \"debuggers\": [\n      {\n        \"type\": \"*\",\n        \"configurationAttributes\": {\n          \"launch\": {\n            \"properties\": {\n              \"serverReadyAction\": {\n                \"oneOf\": [\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"markdownDescription\": \"%debug.server.ready.serverReadyAction.description%\",\n                    \"default\": {\n                      \"action\": \"openExternally\",\n                      \"killOnServerStop\": false\n                    },\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"openExternally\"\n                        ],\n                        \"enumDescriptions\": [\n                          \"%debug.server.ready.action.openExternally.description%\"\n                        ],\n                        \"markdownDescription\": \"%debug.server.ready.action.description%\",\n                        \"default\": \"openExternally\"\n                      },\n                      \"pattern\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.pattern.description%\",\n                        \"default\": \"listening on port ([0-9]+)\"\n                      },\n                      \"uriFormat\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.uriFormat.description%\",\n                        \"default\": \"http://localhost:%s\"\n                      },\n                      \"killOnServerStop\": {\n                        \"type\": \"boolean\",\n                        \"markdownDescription\": \"%debug.server.ready.killOnServerStop.description%\",\n                        \"default\": false\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"markdownDescription\": \"%debug.server.ready.serverReadyAction.description%\",\n                    \"default\": {\n                      \"action\": \"debugWithEdge\",\n                      \"pattern\": \"listening on port ([0-9]+)\",\n                      \"uriFormat\": \"http://localhost:%s\",\n                      \"webRoot\": \"${workspaceFolder}\",\n                      \"killOnServerStop\": false\n                    },\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"debugWithChrome\",\n                          \"debugWithEdge\"\n                        ],\n                        \"enumDescriptions\": [\n                          \"%debug.server.ready.action.debugWithChrome.description%\"\n                        ],\n                        \"markdownDescription\": \"%debug.server.ready.action.description%\",\n                        \"default\": \"debugWithEdge\"\n                      },\n                      \"pattern\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.pattern.description%\",\n                        \"default\": \"listening on port ([0-9]+)\"\n                      },\n                      \"uriFormat\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.uriFormat.description%\",\n                        \"default\": \"http://localhost:%s\"\n                      },\n                      \"webRoot\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.webRoot.description%\",\n                        \"default\": \"${workspaceFolder}\"\n                      },\n                      \"killOnServerStop\": {\n                        \"type\": \"boolean\",\n                        \"markdownDescription\": \"%debug.server.ready.killOnServerStop.description%\",\n                        \"default\": false\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"markdownDescription\": \"%debug.server.ready.serverReadyAction.description%\",\n                    \"default\": {\n                      \"action\": \"startDebugging\",\n                      \"name\": \"<launch browser config name>\",\n                      \"killOnServerStop\": false\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"startDebugging\"\n                        ],\n                        \"enumDescriptions\": [\n                          \"%debug.server.ready.action.startDebugging.description%\"\n                        ],\n                        \"markdownDescription\": \"%debug.server.ready.action.description%\",\n                        \"default\": \"startDebugging\"\n                      },\n                      \"pattern\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.pattern.description%\",\n                        \"default\": \"listening on port ([0-9]+)\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.debugConfigName.description%\",\n                        \"default\": \"Launch Browser\"\n                      },\n                      \"killOnServerStop\": {\n                        \"type\": \"boolean\",\n                        \"markdownDescription\": \"%debug.server.ready.killOnServerStop.description%\",\n                        \"default\": false\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"markdownDescription\": \"%debug.server.ready.serverReadyAction.description%\",\n                    \"default\": {\n                      \"action\": \"startDebugging\",\n                      \"config\": {\n                        \"type\": \"node\",\n                        \"request\": \"launch\"\n                      },\n                      \"killOnServerStop\": false\n                    },\n                    \"required\": [\n                      \"config\"\n                    ],\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"startDebugging\"\n                        ],\n                        \"enumDescriptions\": [\n                          \"%debug.server.ready.action.startDebugging.description%\"\n                        ],\n                        \"markdownDescription\": \"%debug.server.ready.action.description%\",\n                        \"default\": \"startDebugging\"\n                      },\n                      \"pattern\": {\n                        \"type\": \"string\",\n                        \"markdownDescription\": \"%debug.server.ready.pattern.description%\",\n                        \"default\": \"listening on port ([0-9]+)\"\n                      },\n                      \"config\": {\n                        \"type\": \"object\",\n                        \"markdownDescription\": \"%debug.server.ready.debugConfig.description%\",\n                        \"default\": {}\n                      },\n                      \"killOnServerStop\": {\n                        \"type\": \"boolean\",\n                        \"markdownDescription\": \"%debug.server.ready.killOnServerStop.description%\",\n                        \"default\": false\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          }\n        }\n      }\n    ]\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/debug-server-ready/package.nls.json",
    "content": "{\n\t\"displayName\": \"Server Ready Action\",\n\t\"description\": \"Open URI in browser if server under debugging is ready.\",\n\n\t\"debug.server.ready.serverReadyAction.description\": \"Act upon a URI when a server program under debugging is ready (indicated by sending output of the form 'listening on port 3000' or 'Now listening on: https://localhost:5001' to the debug console.)\",\n\t\"debug.server.ready.action.description\": \"What to do with the URI when the server is ready.\",\n\t\"debug.server.ready.action.openExternally.description\": \"Open URI externally with the default application.\",\n\t\"debug.server.ready.action.debugWithChrome.description\": \"Start debugging with the 'Debugger for Chrome'.\",\n\t\"debug.server.ready.action.startDebugging.description\": \"Run another launch configuration.\",\n\t\"debug.server.ready.pattern.description\": \"Server is ready if this pattern appears on the debug console. The first capture group must include a URI or a port number.\",\n\t\"debug.server.ready.debugConfig.description\": \"The debug configuration to run.\",\n\t\"debug.server.ready.uriFormat.description\": \"A format string used when constructing the URI from a port number. The first '%s' is substituted with the port number.\",\n\t\"debug.server.ready.webRoot.description\": \"Value passed to the debug configuration for the 'Debugger for Chrome'.\",\n\t\"debug.server.ready.killOnServerStop.description\": \"Stop the child session when the parent session stopped.\",\n\t\"debug.server.ready.debugConfigName.description\": \"Name of the launch configuration to run.\"\n}\n"
  },
  {
    "path": "extensions/debug-server-ready/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as util from 'util';\nimport { randomUUID } from 'crypto';\n\nconst PATTERN = 'listening on.* (https?://\\\\S+|[0-9]+)'; // matches \"listening on port 3000\" or \"Now listening on: https://localhost:5001\"\nconst URI_PORT_FORMAT = 'http://localhost:%s';\nconst URI_FORMAT = '%s';\nconst WEB_ROOT = '${workspaceFolder}';\n\ninterface ServerReadyAction {\n\tpattern: string;\n\taction?: 'openExternally' | 'debugWithChrome' | 'debugWithEdge' | 'startDebugging';\n\turiFormat?: string;\n\twebRoot?: string;\n\tname?: string;\n\tconfig?: vscode.DebugConfiguration;\n\tkillOnServerStop?: boolean;\n}\n\n// From src/vs/base/common/strings.ts\nconst CSI_SEQUENCE = /(?:\\x1b\\[|\\x9b)[=?>!]?[\\d;:]*[\"$#'* ]?[a-zA-Z@^`{}|~]/;\nconst OSC_SEQUENCE = /(?:\\x1b\\]|\\x9d).*?(?:\\x1b\\\\|\\x07|\\x9c)/;\nconst ESC_SEQUENCE = /\\x1b(?:[ #%\\(\\)\\*\\+\\-\\.\\/]?[a-zA-Z0-9\\|}~@])/;\nconst CONTROL_SEQUENCES = new RegExp('(?:' + [\n\tCSI_SEQUENCE.source,\n\tOSC_SEQUENCE.source,\n\tESC_SEQUENCE.source,\n].join('|') + ')', 'g');\n\n/**\n * Froms vs/base/common/strings.ts in core\n * @see https://github.com/microsoft/vscode/blob/22a2a0e833175c32a2005b977d7fbd355582e416/src/vs/base/common/strings.ts#L736\n */\nfunction removeAnsiEscapeCodes(str: string): string {\n\tif (str) {\n\t\tstr = str.replace(CONTROL_SEQUENCES, '');\n\t}\n\n\treturn str;\n}\n\nclass Trigger {\n\tprivate _fired = false;\n\n\tpublic get hasFired() {\n\t\treturn this._fired;\n\t}\n\n\tpublic fire() {\n\t\tthis._fired = true;\n\t}\n}\n\nclass ServerReadyDetector extends vscode.Disposable {\n\n\tprivate static detectors = new Map<vscode.DebugSession, ServerReadyDetector>();\n\tprivate static terminalDataListener: vscode.Disposable | undefined;\n\n\tprivate readonly stoppedEmitter = new vscode.EventEmitter<void>();\n\tprivate readonly onDidSessionStop = this.stoppedEmitter.event;\n\tprivate readonly disposables = new Set<vscode.Disposable>([]);\n\tprivate trigger: Trigger;\n\tprivate shellPid?: number;\n\tprivate regexp: RegExp;\n\n\tstatic start(session: vscode.DebugSession): ServerReadyDetector | undefined {\n\t\tif (session.configuration.serverReadyAction) {\n\t\t\tlet detector = ServerReadyDetector.detectors.get(session);\n\t\t\tif (!detector) {\n\t\t\t\tdetector = new ServerReadyDetector(session);\n\t\t\t\tServerReadyDetector.detectors.set(session, detector);\n\t\t\t}\n\t\t\treturn detector;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tstatic stop(session: vscode.DebugSession): void {\n\t\tconst detector = ServerReadyDetector.detectors.get(session);\n\t\tif (detector) {\n\t\t\tServerReadyDetector.detectors.delete(session);\n\t\t\tdetector.sessionStopped();\n\t\t\tdetector.dispose();\n\t\t}\n\t}\n\n\tstatic rememberShellPid(session: vscode.DebugSession, pid: number) {\n\t\tconst detector = ServerReadyDetector.detectors.get(session);\n\t\tif (detector) {\n\t\t\tdetector.shellPid = pid;\n\t\t}\n\t}\n\n\tstatic async startListeningTerminalData() {\n\t\tif (!this.terminalDataListener) {\n\t\t\tthis.terminalDataListener = vscode.window.onDidWriteTerminalData(async e => {\n\n\t\t\t\t// first find the detector with a matching pid\n\t\t\t\tconst pid = await e.terminal.processId;\n\t\t\t\tconst str = removeAnsiEscapeCodes(e.data);\n\t\t\t\tfor (const [, detector] of this.detectors) {\n\t\t\t\t\tif (detector.shellPid === pid) {\n\t\t\t\t\t\tdetector.detectPattern(str);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if none found, try all detectors until one matches\n\t\t\t\tfor (const [, detector] of this.detectors) {\n\t\t\t\t\tif (detector.detectPattern(str)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate constructor(private session: vscode.DebugSession) {\n\t\tsuper(() => this.internalDispose());\n\n\t\t// Re-used the triggered of the parent session, if one exists\n\t\tif (session.parentSession) {\n\t\t\tthis.trigger = ServerReadyDetector.start(session.parentSession)?.trigger ?? new Trigger();\n\t\t} else {\n\t\t\tthis.trigger = new Trigger();\n\t\t}\n\n\t\tthis.regexp = new RegExp(session.configuration.serverReadyAction.pattern || PATTERN, 'i');\n\t}\n\n\tprivate internalDispose() {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t\tthis.disposables.clear();\n\t}\n\n\tpublic sessionStopped() {\n\t\tthis.stoppedEmitter.fire();\n\t}\n\n\tdetectPattern(s: string): boolean {\n\t\tif (!this.trigger.hasFired) {\n\t\t\tconst matches = this.regexp.exec(s);\n\t\t\tif (matches && matches.length >= 1) {\n\t\t\t\tthis.openExternalWithString(this.session, matches.length > 1 ? matches[1] : '');\n\t\t\t\tthis.trigger.fire();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate openExternalWithString(session: vscode.DebugSession, captureString: string) {\n\t\tconst args: ServerReadyAction = session.configuration.serverReadyAction;\n\n\t\tlet uri;\n\t\tif (captureString === '') {\n\t\t\t// nothing captured by reg exp -> use the uriFormat as the target uri without substitution\n\t\t\t// verify that format does not contain '%s'\n\t\t\tconst format = args.uriFormat || '';\n\t\t\tif (format.indexOf('%s') >= 0) {\n\t\t\t\tconst errMsg = vscode.l10n.t(\"Format uri ('{0}') uses a substitution placeholder but pattern did not capture anything.\", format);\n\t\t\t\tvscode.window.showErrorMessage(errMsg, { modal: true }).then(_ => undefined);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\turi = format;\n\t\t} else {\n\t\t\t// if no uriFormat is specified guess the appropriate format based on the captureString\n\t\t\tconst format = args.uriFormat || (/^[0-9]+$/.test(captureString) ? URI_PORT_FORMAT : URI_FORMAT);\n\t\t\t// verify that format only contains a single '%s'\n\t\t\tconst s = format.split('%s');\n\t\t\tif (s.length !== 2) {\n\t\t\t\tconst errMsg = vscode.l10n.t(\"Format uri ('{0}') must contain exactly one substitution placeholder.\", format);\n\t\t\t\tvscode.window.showErrorMessage(errMsg, { modal: true }).then(_ => undefined);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\turi = util.format(format, captureString);\n\t\t}\n\n\t\tthis.openExternalWithUri(session, uri);\n\t}\n\n\tprivate async openExternalWithUri(session: vscode.DebugSession, uri: string) {\n\n\t\tconst args: ServerReadyAction = session.configuration.serverReadyAction;\n\t\tswitch (args.action || 'openExternally') {\n\n\t\t\tcase 'openExternally':\n\t\t\t\tawait vscode.env.openExternal(vscode.Uri.parse(uri));\n\t\t\t\tbreak;\n\n\t\t\tcase 'debugWithChrome':\n\t\t\t\tawait this.debugWithBrowser('pwa-chrome', session, uri);\n\t\t\t\tbreak;\n\n\t\t\tcase 'debugWithEdge':\n\t\t\t\tawait this.debugWithBrowser('pwa-msedge', session, uri);\n\t\t\t\tbreak;\n\n\t\t\tcase 'startDebugging':\n\t\t\t\tif (args.config) {\n\t\t\t\t\tawait this.startDebugSession(session, args.config.name, args.config);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.startDebugSession(session, args.name || 'unspecified');\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// not supported\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate async debugWithBrowser(type: string, session: vscode.DebugSession, uri: string) {\n\t\tconst args = session.configuration.serverReadyAction as ServerReadyAction;\n\t\tif (!args.killOnServerStop) {\n\t\t\tawait this.startBrowserDebugSession(type, session, uri);\n\t\t\treturn;\n\t\t}\n\n\t\tconst trackerId = randomUUID();\n\t\tconst cts = new vscode.CancellationTokenSource();\n\t\tconst newSessionPromise = this.catchStartedDebugSession(session => session.configuration._debugServerReadySessionId === trackerId, cts.token);\n\n\t\tif (!await this.startBrowserDebugSession(type, session, uri, trackerId)) {\n\t\t\tcts.cancel();\n\t\t\tcts.dispose();\n\t\t\treturn;\n\t\t}\n\n\t\tconst createdSession = await newSessionPromise;\n\t\tcts.dispose();\n\n\t\tif (!createdSession) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stopListener = this.onDidSessionStop(async () => {\n\t\t\tstopListener.dispose();\n\t\t\tthis.disposables.delete(stopListener);\n\t\t\tawait vscode.debug.stopDebugging(createdSession);\n\t\t});\n\t\tthis.disposables.add(stopListener);\n\t}\n\n\tprivate startBrowserDebugSession(type: string, session: vscode.DebugSession, uri: string, trackerId?: string) {\n\t\treturn vscode.debug.startDebugging(session.workspaceFolder, {\n\t\t\ttype,\n\t\t\tname: 'Browser Debug',\n\t\t\trequest: 'launch',\n\t\t\turl: uri,\n\t\t\twebRoot: session.configuration.serverReadyAction.webRoot || WEB_ROOT,\n\t\t\t_debugServerReadySessionId: trackerId,\n\t\t});\n\t}\n\n\t/**\n\t * Starts a debug session given a debug configuration name (saved in launch.json) or a debug configuration object.\n\t *\n\t * @param session The parent debugSession\n\t * @param name The name of the configuration to launch. If config it set, it assumes it is the same as config.name.\n\t * @param config [Optional] Instead of starting a debug session by debug configuration name, use a debug configuration object instead.\n\t */\n\tprivate async startDebugSession(session: vscode.DebugSession, name: string, config?: vscode.DebugConfiguration) {\n\t\tconst args = session.configuration.serverReadyAction as ServerReadyAction;\n\t\tif (!args.killOnServerStop) {\n\t\t\tawait vscode.debug.startDebugging(session.workspaceFolder, config ?? name);\n\t\t\treturn;\n\t\t}\n\n\t\tconst cts = new vscode.CancellationTokenSource();\n\t\tconst newSessionPromise = this.catchStartedDebugSession(x => x.name === name, cts.token);\n\n\t\tif (!await vscode.debug.startDebugging(session.workspaceFolder, config ?? name)) {\n\t\t\tcts.cancel();\n\t\t\tcts.dispose();\n\t\t\treturn;\n\t\t}\n\n\t\tconst createdSession = await newSessionPromise;\n\t\tcts.dispose();\n\n\t\tif (!createdSession) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stopListener = this.onDidSessionStop(async () => {\n\t\t\tstopListener.dispose();\n\t\t\tthis.disposables.delete(stopListener);\n\t\t\tawait vscode.debug.stopDebugging(createdSession);\n\t\t});\n\t\tthis.disposables.add(stopListener);\n\t}\n\n\tprivate catchStartedDebugSession(predicate: (session: vscode.DebugSession) => boolean, cancellationToken: vscode.CancellationToken): Promise<vscode.DebugSession | undefined> {\n\t\treturn new Promise<vscode.DebugSession | undefined>(_resolve => {\n\t\t\tconst done = (value?: vscode.DebugSession) => {\n\t\t\t\tlistener.dispose();\n\t\t\t\tcancellationListener.dispose();\n\t\t\t\tthis.disposables.delete(listener);\n\t\t\t\tthis.disposables.delete(cancellationListener);\n\t\t\t\t_resolve(value);\n\t\t\t};\n\n\t\t\tconst cancellationListener = cancellationToken.onCancellationRequested(done);\n\t\t\tconst listener = vscode.debug.onDidStartDebugSession(session => {\n\t\t\t\tif (predicate(session)) {\n\t\t\t\t\tdone(session);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// In case the debug session of interest was never caught anyhow.\n\t\t\tthis.disposables.add(listener);\n\t\t\tthis.disposables.add(cancellationListener);\n\t\t});\n\t}\n}\n\nexport function activate(context: vscode.ExtensionContext) {\n\n\tcontext.subscriptions.push(vscode.debug.onDidStartDebugSession(session => {\n\t\tif (session.configuration.serverReadyAction) {\n\t\t\tconst detector = ServerReadyDetector.start(session);\n\t\t\tif (detector) {\n\t\t\t\tServerReadyDetector.startListeningTerminalData();\n\t\t\t}\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.debug.onDidTerminateDebugSession(session => {\n\t\tServerReadyDetector.stop(session);\n\t}));\n\n\tconst trackers = new Set<string>();\n\n\tcontext.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('*', {\n\t\tresolveDebugConfigurationWithSubstitutedVariables(_folder: vscode.WorkspaceFolder | undefined, debugConfiguration: vscode.DebugConfiguration) {\n\t\t\tif (debugConfiguration.type && debugConfiguration.serverReadyAction) {\n\t\t\t\tif (!trackers.has(debugConfiguration.type)) {\n\t\t\t\t\ttrackers.add(debugConfiguration.type);\n\t\t\t\t\tstartTrackerForType(context, debugConfiguration.type);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn debugConfiguration;\n\t\t}\n\t}));\n}\n\nfunction startTrackerForType(context: vscode.ExtensionContext, type: string) {\n\n\t// scan debug console output for a PORT message\n\tcontext.subscriptions.push(vscode.debug.registerDebugAdapterTrackerFactory(type, {\n\t\tcreateDebugAdapterTracker(session: vscode.DebugSession) {\n\t\t\tconst detector = ServerReadyDetector.start(session);\n\t\t\tif (detector) {\n\t\t\t\tlet runInTerminalRequestSeq: number | undefined;\n\t\t\t\treturn {\n\t\t\t\t\tonDidSendMessage: m => {\n\t\t\t\t\t\tif (m.type === 'event' && m.event === 'output' && m.body) {\n\t\t\t\t\t\t\tswitch (m.body.category) {\n\t\t\t\t\t\t\t\tcase 'console':\n\t\t\t\t\t\t\t\tcase 'stderr':\n\t\t\t\t\t\t\t\tcase 'stdout':\n\t\t\t\t\t\t\t\t\tif (m.body.output) {\n\t\t\t\t\t\t\t\t\t\tdetector.detectPattern(m.body.output);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.type === 'request' && m.command === 'runInTerminal' && m.arguments) {\n\t\t\t\t\t\t\tif (m.arguments.kind === 'integrated') {\n\t\t\t\t\t\t\t\trunInTerminalRequestSeq = m.seq; // remember this to find matching response\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonWillReceiveMessage: m => {\n\t\t\t\t\t\tif (runInTerminalRequestSeq && m.type === 'response' && m.command === 'runInTerminal' && m.body && runInTerminalRequestSeq === m.request_seq) {\n\t\t\t\t\t\t\trunInTerminalRequestSeq = undefined;\n\t\t\t\t\t\t\tServerReadyDetector.rememberShellPid(session, m.body.shellProcessId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t}));\n}\n"
  },
  {
    "path": "extensions/debug-server-ready/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"downlevelIteration\": true,\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.terminalDataWriteEvent.d.ts\",\n\t]\n}\n"
  },
  {
    "path": "extensions/diff/.vscodeignore",
    "content": "build/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/diff/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/diff.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/diff.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"0593bb775eab1824af97ef2172fd38822abd97d7\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-diff.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/diff/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"#\", \" \" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t]\n}\n"
  },
  {
    "path": "extensions/diff/package.json",
    "content": "{\n  \"name\": \"diff\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin textmate/diff.tmbundle Syntaxes/Diff.plist ./syntaxes/diff.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"diff\",\n        \"aliases\": [\n          \"Diff\",\n          \"diff\"\n        ],\n        \"extensions\": [\n          \".diff\",\n          \".patch\",\n          \".rej\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"diff\",\n        \"scopeName\": \"source.diff\",\n        \"path\": \"./syntaxes/diff.tmLanguage.json\"\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "extensions/diff/package.nls.json",
    "content": "{\n\t\"displayName\": \"Diff Language Basics\",\n\t\"description\": \"Provides syntax highlighting & bracket matching in Diff files.\"\n}\n"
  },
  {
    "path": "extensions/diff/syntaxes/diff.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/diff.tmbundle/blob/master/Syntaxes/Diff.plist\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/diff.tmbundle/commit/0593bb775eab1824af97ef2172fd38822abd97d7\",\n\t\"name\": \"Diff\",\n\t\"scopeName\": \"source.diff\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.separator.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^((\\\\*{15})|(={67})|(-{3}))$\\\\n?\",\n\t\t\t\"name\": \"meta.separator.diff\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"^\\\\d+(,\\\\d+)*(a|d|c)\\\\d+(,\\\\d+)*$\\\\n?\",\n\t\t\t\"name\": \"meta.diff.range.normal\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.range.diff\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.line-number.diff\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.range.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^(@@)\\\\s*(.+?)\\\\s*(@@)($\\\\n?)?\",\n\t\t\t\"name\": \"meta.diff.range.unified\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.range.diff\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.range.diff\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.range.diff\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.range.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^(((\\\\-{3}) .+ (\\\\-{4}))|((\\\\*{3}) .+ (\\\\*{4})))$\\\\n?\",\n\t\t\t\"name\": \"meta.diff.range.context\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"^diff --git a/.*$\\\\n?\",\n\t\t\t\"name\": \"meta.diff.header.git\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"^diff (-|\\\\S+\\\\s+\\\\S+).*$\\\\n?\",\n\t\t\t\"name\": \"meta.diff.header.command\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.from-file.diff\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.from-file.diff\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.from-file.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(^(((-{3}) .+)|((\\\\*{3}) .+))$\\\\n?|^(={4}) .+(?= - ))\",\n\t\t\t\"name\": \"meta.diff.header.from-file\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.to-file.diff\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.to-file.diff\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.to-file.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(^(\\\\+{3}) .+$\\\\n?| (-) .* (={4})$\\\\n?)\",\n\t\t\t\"name\": \"meta.diff.header.to-file\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.inserted.diff\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.inserted.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^(((>)( .*)?)|((\\\\+).*))$\\\\n?\",\n\t\t\t\"name\": \"markup.inserted.diff\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.changed.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^(!).*$\\\\n?\",\n\t\t\t\"name\": \"markup.changed.diff\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.deleted.diff\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.deleted.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^(((<)( .*)?)|((-).*))$\\\\n?\",\n\t\t\t\"name\": \"markup.deleted.diff\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(#)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"Git produces unified diffs with embedded comments\\\"\",\n\t\t\t\"end\": \"\\\\n\",\n\t\t\t\"name\": \"comment.line.number-sign.diff\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"^index [0-9a-f]{7,40}\\\\.\\\\.[0-9a-f]{7,40}.*$\\\\n?\",\n\t\t\t\"name\": \"meta.diff.index.git\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.diff\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.file-name.diff\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^Index(:) (.+)$\\\\n?\",\n\t\t\t\"name\": \"meta.diff.index\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"^Only in .*: .*$\\\\n?\",\n\t\t\t\"name\": \"meta.diff.only-in\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/docker/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/docker/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"language-docker\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/moby/moby\",\n\t\t\t\t\t\"commitHash\": \"c2029cb2574647e4bc28ed58486b8e85883eedb9\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"Apache-2.0\",\n\t\t\t\"description\": \"The file syntaxes/docker.tmLanguage was included from https://github.com/moby/moby/blob/master/contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage.\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/docker/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"^\\\\s*.*(:|-) ?(&amp;\\\\w+)?(\\\\{[^}\\\"']*|\\\\([^)\\\"']*)?$\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s+\\\\}$\"\n\t}\n}\n"
  },
  {
    "path": "extensions/docker/package.json",
    "content": "{\n  \"name\": \"docker\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin moby/moby contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage ./syntaxes/docker.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"dockerfile\",\n        \"extensions\": [\n          \".dockerfile\",\n          \".containerfile\"\n        ],\n        \"filenames\": [\n          \"Dockerfile\",\n          \"Containerfile\"\n        ],\n        \"filenamePatterns\": [\n          \"Dockerfile.*\",\n          \"Containerfile.*\"\n        ],\n        \"aliases\": [\n          \"Docker\",\n          \"Dockerfile\",\n          \"Containerfile\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"dockerfile\",\n        \"scopeName\": \"source.dockerfile\",\n        \"path\": \"./syntaxes/docker.tmLanguage.json\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[dockerfile]\": {\n        \"editor.quickSuggestions\": {\n          \"strings\": true\n        }\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/docker/package.nls.json",
    "content": "{\n\t\"displayName\": \"Docker Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Docker files.\"\n}\n"
  },
  {
    "path": "extensions/docker/syntaxes/docker.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/moby/moby/blob/master/contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/moby/moby/commit/c2029cb2574647e4bc28ed58486b8e85883eedb9\",\n\t\"name\": \"Dockerfile\",\n\t\"scopeName\": \"source.dockerfile\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.special-method.dockerfile\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.special-method.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*\\\\b(?i:(FROM))\\\\b.*?\\\\b(?i:(AS))\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.dockerfile\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.special-method.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(?i:(ONBUILD)\\\\s+)?(?i:(ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR))\\\\s\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.dockerfile\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.special-method.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(?i:(ONBUILD)\\\\s+)?(?i:(CMD|ENTRYPOINT))\\\\s\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#string-character-escape\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.dockerfile\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.dockerfile\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.dockerfile\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.line.number-sign.dockerfile\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.dockerfile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"comment.line\",\n\t\t\t\"match\": \"^(\\\\s*)((#).*$\\\\n?)\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"string-character-escape\": {\n\t\t\t\"name\": \"constant.character.escaped.dockerfile\",\n\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/emmet/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/emmet/.vscode/launch.json",
    "content": "{\n\t// Use IntelliSense to learn about possible Node.js debug attributes.\n\t// Hover to view descriptions of existing attributes.\n\t// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\"--extensionDevelopmentPath=${workspaceFolder}\"],\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*.js\"]\n\t\t},\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Launch Tests\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/out/test\",\n\t\t\t\t\"--disable-extensions\"\n\t\t\t],\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*.js\"]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/emmet/.vscode/settings.json",
    "content": "{\n    \"emmet.excludeLanguages\": []\n}"
  },
  {
    "path": "extensions/emmet/.vscodeignore",
    "content": "test/**\ntest-workspace/**\nsrc/**\nout/**\ntsconfig.json\nextension.webpack.config.js\nextension-browser.webpack.config.js\nCONTRIBUTING.md\ncgmanifest.json\npackage-lock.json\n.vscode\n"
  },
  {
    "path": "extensions/emmet/CONTRIBUTING.md",
    "content": "## How to build and run from source?\n\nRead the basics about extension authoring from [Extending Visual Studio Code](https://code.visualstudio.com/docs/extensions/overview)\n\n- Read [Build and Run VS Code from Source](https://github.com/microsoft/vscode/wiki/How-to-Contribute#build-and-run-from-source) to get a local dev set up running for VS Code\n- Open the `extensions/emmet` folder in the vscode repo in VS Code\n- Press F5 to start debugging\n\n## Running tests\n\nTests for Emmet extension are run as integration tests as part of VS Code.\n\n- Read [Build and Run VS Code from Source](https://github.com/microsoft/vscode/wiki/How-to-Contribute#build-and-run-from-source) to get a local dev set up running for VS Code\n- Run `./scripts/test-integration.sh` to run all the integrations tests that include the Emmet tests.\n"
  },
  {
    "path": "extensions/emmet/README.md",
    "content": "# Emmet integration in Visual Studio Code\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [Emmet in Visual Studio Code](https://code.visualstudio.com/docs/editor/emmet) to learn about the features of this extension.\n\nPlease read the [CONTRIBUTING.md](https://github.com/microsoft/vscode/blob/master/extensions/emmet/CONTRIBUTING.md) file to learn how to contribute to this extension.\n"
  },
  {
    "path": "extensions/emmet/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"expand-abbreviation\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/emmetio/expand-abbreviation\",\n\t\t\t\t\t\"commitHash\": \"ef943f2056572fe43ce9eebf72929d3c825f3995\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.5.8\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/emmet/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults\n\t\t= require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/browser/emmetBrowserMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'emmetBrowserMain.js'\n\t}\n});\n\n"
  },
  {
    "path": "extensions/emmet/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst path = require('path');\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/node/emmetNodeMain.ts',\n\t},\n\toutput: {\n\t\tpath: path.join(__dirname, 'dist', 'node'),\n\t\tfilename: 'emmetNodeMain.js'\n\t}\n});\n"
  },
  {
    "path": "extensions/emmet/package.json",
    "content": "{\n  \"name\": \"emmet\",\n  \"displayName\": \"Emmet\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.13.0\"\n  },\n  \"icon\": \"images/icon.png\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  },\n  \"activationEvents\": [\n    \"onCommand:emmet.expandAbbreviation\",\n    \"onLanguage\"\n  ],\n  \"main\": \"./out/node/emmetNodeMain\",\n  \"browser\": \"./dist/browser/emmetBrowserMain\",\n  \"contributes\": {\n    \"configuration\": {\n      \"type\": \"object\",\n      \"title\": \"Emmet\",\n      \"properties\": {\n        \"emmet.showExpandedAbbreviation\": {\n          \"type\": [\n            \"string\"\n          ],\n          \"enum\": [\n            \"never\",\n            \"always\",\n            \"inMarkupAndStylesheetFilesOnly\"\n          ],\n          \"default\": \"always\",\n          \"markdownDescription\": \"%emmetShowExpandedAbbreviation%\"\n        },\n        \"emmet.showAbbreviationSuggestions\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"scope\": \"language-overridable\",\n          \"markdownDescription\": \"%emmetShowAbbreviationSuggestions%\"\n        },\n        \"emmet.includeLanguages\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"default\": {},\n          \"markdownDescription\": \"%emmetIncludeLanguages%\"\n        },\n        \"emmet.variables\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"lang\": {\n              \"type\": \"string\",\n              \"default\": \"en\"\n            },\n            \"charset\": {\n              \"type\": \"string\",\n              \"default\": \"UTF-8\"\n            }\n          },\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"default\": {},\n          \"markdownDescription\": \"%emmetVariables%\"\n        },\n        \"emmet.syntaxProfiles\": {\n          \"type\": \"object\",\n          \"default\": {},\n          \"markdownDescription\": \"%emmetSyntaxProfiles%\"\n        },\n        \"emmet.excludeLanguages\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"default\": [\n            \"markdown\"\n          ],\n          \"markdownDescription\": \"%emmetExclude%\"\n        },\n        \"emmet.extensionsPath\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"markdownDescription\": \"%emmetExtensionsPathItem%\"\n          },\n          \"default\": [],\n          \"scope\": \"machine-overridable\",\n          \"markdownDescription\": \"%emmetExtensionsPath%\"\n        },\n        \"emmet.triggerExpansionOnTab\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"scope\": \"language-overridable\",\n          \"markdownDescription\": \"%emmetTriggerExpansionOnTab%\"\n        },\n        \"emmet.useInlineCompletions\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%emmetUseInlineCompletions%\"\n        },\n        \"emmet.preferences\": {\n          \"type\": \"object\",\n          \"default\": {},\n          \"markdownDescription\": \"%emmetPreferences%\",\n          \"properties\": {\n            \"css.intUnit\": {\n              \"type\": \"string\",\n              \"default\": \"px\",\n              \"markdownDescription\": \"%emmetPreferencesIntUnit%\"\n            },\n            \"css.floatUnit\": {\n              \"type\": \"string\",\n              \"default\": \"em\",\n              \"markdownDescription\": \"%emmetPreferencesFloatUnit%\"\n            },\n            \"css.propertyEnd\": {\n              \"type\": \"string\",\n              \"default\": \";\",\n              \"markdownDescription\": \"%emmetPreferencesCssAfter%\"\n            },\n            \"sass.propertyEnd\": {\n              \"type\": \"string\",\n              \"default\": \"\",\n              \"markdownDescription\": \"%emmetPreferencesSassAfter%\"\n            },\n            \"stylus.propertyEnd\": {\n              \"type\": \"string\",\n              \"default\": \"\",\n              \"markdownDescription\": \"%emmetPreferencesStylusAfter%\"\n            },\n            \"css.valueSeparator\": {\n              \"type\": \"string\",\n              \"default\": \": \",\n              \"markdownDescription\": \"%emmetPreferencesCssBetween%\"\n            },\n            \"sass.valueSeparator\": {\n              \"type\": \"string\",\n              \"default\": \": \",\n              \"markdownDescription\": \"%emmetPreferencesSassBetween%\"\n            },\n            \"stylus.valueSeparator\": {\n              \"type\": \"string\",\n              \"default\": \" \",\n              \"markdownDescription\": \"%emmetPreferencesStylusBetween%\"\n            },\n            \"bem.elementSeparator\": {\n              \"type\": \"string\",\n              \"default\": \"__\",\n              \"markdownDescription\": \"%emmetPreferencesBemElementSeparator%\"\n            },\n            \"bem.modifierSeparator\": {\n              \"type\": \"string\",\n              \"default\": \"_\",\n              \"markdownDescription\": \"%emmetPreferencesBemModifierSeparator%\"\n            },\n            \"filter.commentBefore\": {\n              \"type\": \"string\",\n              \"default\": \"\",\n              \"markdownDescription\": \"%emmetPreferencesFilterCommentBefore%\"\n            },\n            \"filter.commentAfter\": {\n              \"type\": \"string\",\n              \"default\": \"\\n<!-- /[#ID][.CLASS] -->\",\n              \"markdownDescription\": \"%emmetPreferencesFilterCommentAfter%\"\n            },\n            \"filter.commentTrigger\": {\n              \"type\": \"array\",\n              \"default\": [\n                \"id\",\n                \"class\"\n              ],\n              \"markdownDescription\": \"%emmetPreferencesFilterCommentTrigger%\"\n            },\n            \"format.noIndentTags\": {\n              \"type\": \"array\",\n              \"default\": [\n                \"html\"\n              ],\n              \"markdownDescription\": \"%emmetPreferencesFormatNoIndentTags%\"\n            },\n            \"format.forceIndentationForTags\": {\n              \"type\": \"array\",\n              \"default\": [\n                \"body\"\n              ],\n              \"markdownDescription\": \"%emmetPreferencesFormatForceIndentTags%\"\n            },\n            \"profile.allowCompactBoolean\": {\n              \"type\": \"boolean\",\n              \"default\": false,\n              \"markdownDescription\": \"%emmetPreferencesAllowCompactBoolean%\"\n            },\n            \"css.webkitProperties\": {\n              \"type\": \"string\",\n              \"default\": null,\n              \"markdownDescription\": \"%emmetPreferencesCssWebkitProperties%\"\n            },\n            \"css.mozProperties\": {\n              \"type\": \"string\",\n              \"default\": null,\n              \"markdownDescription\": \"%emmetPreferencesCssMozProperties%\"\n            },\n            \"css.oProperties\": {\n              \"type\": \"string\",\n              \"default\": null,\n              \"markdownDescription\": \"%emmetPreferencesCssOProperties%\"\n            },\n            \"css.msProperties\": {\n              \"type\": \"string\",\n              \"default\": null,\n              \"markdownDescription\": \"%emmetPreferencesCssMsProperties%\"\n            },\n            \"css.fuzzySearchMinScore\": {\n              \"type\": \"number\",\n              \"default\": 0.3,\n              \"markdownDescription\": \"%emmetPreferencesCssFuzzySearchMinScore%\"\n            },\n            \"output.inlineBreak\": {\n              \"type\": \"number\",\n              \"default\": 0,\n              \"markdownDescription\": \"%emmetPreferencesOutputInlineBreak%\"\n            },\n            \"output.reverseAttributes\": {\n              \"type\": \"boolean\",\n              \"default\": false,\n              \"markdownDescription\": \"%emmetPreferencesOutputReverseAttributes%\"\n            },\n            \"output.selfClosingStyle\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"html\",\n                \"xhtml\",\n                \"xml\"\n              ],\n              \"default\": \"html\",\n              \"markdownDescription\": \"%emmetPreferencesOutputSelfClosingStyle%\"\n            },\n            \"css.color.short\": {\n              \"type\": \"boolean\",\n              \"default\": true,\n              \"markdownDescription\": \"%emmetPreferencesCssColorShort%\"\n            }\n          }\n        },\n        \"emmet.showSuggestionsAsSnippets\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%emmetShowSuggestionsAsSnippets%\"\n        },\n        \"emmet.optimizeStylesheetParsing\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"markdownDescription\": \"%emmetOptimizeStylesheetParsing%\"\n        }\n      }\n    },\n    \"commands\": [\n      {\n        \"command\": \"editor.emmet.action.wrapWithAbbreviation\",\n        \"title\": \"%command.wrapWithAbbreviation%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.removeTag\",\n        \"title\": \"%command.removeTag%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.updateTag\",\n        \"title\": \"%command.updateTag%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.matchTag\",\n        \"title\": \"%command.matchTag%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.balanceIn\",\n        \"title\": \"%command.balanceIn%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.balanceOut\",\n        \"title\": \"%command.balanceOut%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.prevEditPoint\",\n        \"title\": \"%command.prevEditPoint%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.nextEditPoint\",\n        \"title\": \"%command.nextEditPoint%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.mergeLines\",\n        \"title\": \"%command.mergeLines%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.selectPrevItem\",\n        \"title\": \"%command.selectPrevItem%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.selectNextItem\",\n        \"title\": \"%command.selectNextItem%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.splitJoinTag\",\n        \"title\": \"%command.splitJoinTag%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.toggleComment\",\n        \"title\": \"%command.toggleComment%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.evaluateMathExpression\",\n        \"title\": \"%command.evaluateMathExpression%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.updateImageSize\",\n        \"title\": \"%command.updateImageSize%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.incrementNumberByOneTenth\",\n        \"title\": \"%command.incrementNumberByOneTenth%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.incrementNumberByOne\",\n        \"title\": \"%command.incrementNumberByOne%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.incrementNumberByTen\",\n        \"title\": \"%command.incrementNumberByTen%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.decrementNumberByOneTenth\",\n        \"title\": \"%command.decrementNumberByOneTenth%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.decrementNumberByOne\",\n        \"title\": \"%command.decrementNumberByOne%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.decrementNumberByTen\",\n        \"title\": \"%command.decrementNumberByTen%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"editor.emmet.action.reflectCSSValue\",\n        \"title\": \"%command.reflectCSSValue%\",\n        \"category\": \"Emmet\"\n      },\n      {\n        \"command\": \"workbench.action.showEmmetCommands\",\n        \"title\": \"%command.showEmmetCommands%\",\n        \"category\": \"\"\n      }\n    ],\n    \"menus\": {\n      \"commandPalette\": [\n        {\n          \"command\": \"editor.emmet.action.wrapWithAbbreviation\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.removeTag\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.updateTag\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.matchTag\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.balanceIn\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.balanceOut\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.prevEditPoint\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.nextEditPoint\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.mergeLines\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.selectPrevItem\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.selectNextItem\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.splitJoinTag\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.toggleComment\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.evaluateMathExpression\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.updateImageSize\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.incrementNumberByOneTenth\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.incrementNumberByOne\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.incrementNumberByTen\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.decrementNumberByOneTenth\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.decrementNumberByOne\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.decrementNumberByTen\",\n          \"when\": \"!activeEditorIsReadonly\"\n        },\n        {\n          \"command\": \"editor.emmet.action.reflectCSSValue\",\n          \"when\": \"!activeEditorIsReadonly\"\n        }\n      ]\n    }\n  },\n  \"scripts\": {\n    \"watch\": \"gulp watch-extension:emmet\",\n    \"compile\": \"gulp compile-extension:emmet\",\n    \"deps\": \"npm install @vscode/emmet-helper\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"dependencies\": {\n    \"@emmetio/css-parser\": \"ramya-rao-a/css-parser#vscode\",\n    \"@emmetio/html-matcher\": \"^0.3.3\",\n    \"@emmetio/math-expression\": \"^1.0.5\",\n    \"@vscode/emmet-helper\": \"^2.8.8\",\n    \"image-size\": \"~1.0.0\",\n    \"vscode-languageserver-textdocument\": \"^1.0.1\"\n  },\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  }\n}\n"
  },
  {
    "path": "extensions/emmet/package.nls.json",
    "content": "{\n\t\"description\": \"Emmet support for VS Code\",\n\t\"command.wrapWithAbbreviation\": \"Wrap with Abbreviation\",\n\t\"command.removeTag\": \"Remove Tag\",\n\t\"command.updateTag\": \"Update Tag\",\n\t\"command.matchTag\": \"Go to Matching Pair\",\n\t\"command.balanceIn\": \"Balance (inward)\",\n\t\"command.balanceOut\": \"Balance (outward)\",\n\t\"command.prevEditPoint\": \"Go to Previous Edit Point\",\n\t\"command.nextEditPoint\": \"Go to Next Edit Point\",\n\t\"command.mergeLines\": \"Merge Lines\",\n\t\"command.selectPrevItem\": \"Select Previous Item\",\n\t\"command.selectNextItem\": \"Select Next Item\",\n\t\"command.splitJoinTag\": \"Split/Join Tag\",\n\t\"command.toggleComment\": \"Toggle Comment\",\n\t\"command.evaluateMathExpression\": \"Evaluate Math Expression\",\n\t\"command.updateImageSize\": \"Update Image Size\",\n\t\"command.reflectCSSValue\": \"Reflect CSS Value\",\n\t\"command.incrementNumberByOne\": \"Increment by 1\",\n\t\"command.decrementNumberByOne\": \"Decrement by 1\",\n\t\"command.incrementNumberByOneTenth\": \"Increment by 0.1\",\n\t\"command.decrementNumberByOneTenth\": \"Decrement by 0.1\",\n\t\"command.incrementNumberByTen\": \"Increment by 10\",\n\t\"command.decrementNumberByTen\": \"Decrement by 10\",\n\t\"command.showEmmetCommands\": \"Show Emmet Commands\",\n\t\"emmetSyntaxProfiles\": \"Define profile for specified syntax or use your own profile with specific rules.\",\n\t\"emmetExclude\": \"An array of languages where Emmet abbreviations should not be expanded.\",\n\t\"emmetExtensionsPath\": \"An array of paths, where each path can contain Emmet syntaxProfiles and/or snippet files.\\nIn case of conflicts, the profiles/snippets of later paths will override those of earlier paths.\\nSee https://code.visualstudio.com/docs/editor/emmet for more information and an example snippet file.\",\n\t\"emmetExtensionsPathItem\": \"A path containing Emmet syntaxProfiles and/or snippets.\",\n\t\"emmetShowExpandedAbbreviation\": \"Shows expanded Emmet abbreviations as suggestions.\\nThe option `\\\"inMarkupAndStylesheetFilesOnly\\\"` applies to html, haml, jade, slim, xml, xsl, css, scss, sass, less and stylus.\\nThe option `\\\"always\\\"` applies to all parts of the file regardless of markup/css.\",\n\t\"emmetShowAbbreviationSuggestions\": \"Shows possible Emmet abbreviations as suggestions. Not applicable in stylesheets or when emmet.showExpandedAbbreviation is set to `\\\"never\\\"`.\",\n\t\"emmetIncludeLanguages\": \"Enable Emmet abbreviations in languages that are not supported by default. Add a mapping here between the language and Emmet supported language.\\n For example: `{\\\"vue-html\\\": \\\"html\\\", \\\"javascript\\\": \\\"javascriptreact\\\"}`\",\n\t\"emmetVariables\": \"Variables to be used in Emmet snippets.\",\n\t\"emmetTriggerExpansionOnTab\": \"When enabled, Emmet abbreviations are expanded when pressing TAB, even when completions do not show up. When disabled, completions that show up can still be accepted by pressing TAB.\",\n\t\"emmetPreferences\": \"Preferences used to modify behavior of some actions and resolvers of Emmet.\",\n\t\"emmetPreferencesIntUnit\": \"Default unit for integer values.\",\n\t\"emmetPreferencesFloatUnit\": \"Default unit for float values.\",\n\t\"emmetPreferencesCssAfter\": \"Symbol to be placed at the end of CSS property when expanding CSS abbreviations.\",\n\t\"emmetPreferencesSassAfter\": \"Symbol to be placed at the end of CSS property when expanding CSS abbreviations in Sass files.\",\n\t\"emmetPreferencesStylusAfter\": \"Symbol to be placed at the end of CSS property when expanding CSS abbreviations in Stylus files.\",\n\t\"emmetPreferencesCssBetween\": \"Symbol to be placed at the between CSS property and value when expanding CSS abbreviations.\",\n\t\"emmetPreferencesSassBetween\": \"Symbol to be placed at the between CSS property and value when expanding CSS abbreviations in Sass files.\",\n\t\"emmetPreferencesStylusBetween\": \"Symbol to be placed at the between CSS property and value when expanding CSS abbreviations in Stylus files.\",\n\t\"emmetShowSuggestionsAsSnippets\": \"If `true`, then Emmet suggestions will show up as snippets allowing you to order them as per `#editor.snippetSuggestions#` setting.\",\n\t\"emmetPreferencesBemElementSeparator\": \"Element separator used for classes when using the BEM filter.\",\n\t\"emmetPreferencesBemModifierSeparator\": \"Modifier separator used for classes when using the BEM filter.\",\n\t\"emmetPreferencesFilterCommentBefore\": \"A definition of comment that should be placed before matched element when comment filter is applied.\",\n\t\"emmetPreferencesFilterCommentAfter\": \"A definition of comment that should be placed after matched element when comment filter is applied.\",\n\t\"emmetPreferencesFilterCommentTrigger\": \"A comma-separated list of attribute names that should exist in the abbreviation for the comment filter to be applied.\",\n\t\"emmetPreferencesFormatNoIndentTags\": \"An array of tag names that should never get inner indentation.\",\n\t\"emmetPreferencesFormatForceIndentTags\": \"An array of tag names that should always get inner indentation.\",\n\t\"emmetPreferencesAllowCompactBoolean\": \"If `true`, compact notation of boolean attributes are produced.\",\n\t\"emmetPreferencesCssWebkitProperties\": \"Comma separated CSS properties that get the 'webkit' vendor prefix when used in Emmet abbreviation that starts with `-`. Set to empty string to always avoid the 'webkit' prefix.\",\n\t\"emmetPreferencesCssMozProperties\": \"Comma separated CSS properties that get the 'moz' vendor prefix when used in Emmet abbreviation that starts with `-`. Set to empty string to always avoid the 'moz' prefix.\",\n\t\"emmetPreferencesCssOProperties\": \"Comma separated CSS properties that get the 'o' vendor prefix when used in Emmet abbreviation that starts with `-`. Set to empty string to always avoid the 'o' prefix.\",\n\t\"emmetPreferencesCssMsProperties\": \"Comma separated CSS properties that get the 'ms' vendor prefix when used in Emmet abbreviation that starts with `-`. Set to empty string to always avoid the 'ms' prefix.\",\n\t\"emmetPreferencesCssFuzzySearchMinScore\": \"The minimum score (from 0 to 1) that fuzzy-matched abbreviation should achieve. Lower values may produce many false-positive matches, higher values may reduce possible matches.\",\n\t\"emmetOptimizeStylesheetParsing\": \"When set to `false`, the whole file is parsed to determine if current position is valid for expanding Emmet abbreviations. When set to `true`, only the content around the current position in CSS/SCSS/Less files is parsed.\",\n\t\"emmetPreferencesOutputInlineBreak\": \"The number of sibling inline elements needed for line breaks to be placed between those elements. If `0`, inline elements are always expanded onto a single line.\",\n\t\"emmetPreferencesOutputReverseAttributes\": \"If `true`, reverses attribute merging directions when resolving snippets.\",\n\t\"emmetPreferencesOutputSelfClosingStyle\": \"Style of self-closing tags: html (`<br>`), xml (`<br/>`) or xhtml (`<br />`).\",\n\t\"emmetPreferencesCssColorShort\": \"If `true`, color values like `#f` will be expanded to `#fff` instead of `#ffffff`.\",\n\t\"emmetUseInlineCompletions\": \"If `true`, Emmet will use inline completions to suggest expansions. To prevent the non-inline completion item provider from showing up as often while this setting is `true`, turn `#editor.quickSuggestions#` to `inline` or `off` for the `other` item.\"\n}\n"
  },
  {
    "path": "extensions/emmet/src/abbreviationActions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node, HtmlNode, Rule, Property, Stylesheet } from 'EmmetFlatNode';\nimport { getEmmetHelper, getFlatNode, getHtmlFlatNode, getMappingForIncludedLanguages, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode, parsePartialStylesheet, isStyleAttribute, getEmbeddedCssNodeIfAny, allowedMimeTypesInScriptTag, toLSTextDocument, isOffsetInsideOpenOrCloseTag } from './util';\nimport { getRootNode as parseDocument } from './parseDocument';\n\nconst trimRegex = /[\\u00a0]*[\\d#\\-\\*\\u2022]+\\.?/;\nconst hexColorRegex = /^#[\\da-fA-F]{0,6}$/;\n\ninterface ExpandAbbreviationInput {\n\tsyntax: string;\n\tabbreviation: string;\n\trangeToReplace: vscode.Range;\n\ttextToWrap?: string[];\n\tfilter?: string;\n\tindent?: string;\n\tbaseIndent?: string;\n}\n\ninterface PreviewRangesWithContent {\n\tpreviewRange: vscode.Range;\n\toriginalRange: vscode.Range;\n\toriginalContent: string;\n\ttextToWrapInPreview: string[];\n\tbaseIndent: string;\n}\n\nexport async function wrapWithAbbreviation(args: any): Promise<boolean> {\n\tif (!validate(false)) {\n\t\treturn false;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor!;\n\tconst document = editor.document;\n\n\targs = args || {};\n\tif (!args['language']) {\n\t\targs['language'] = document.languageId;\n\t}\n\t// we know it's not stylesheet due to the validate(false) call above\n\tconst syntax = getSyntaxFromArgs(args) || 'html';\n\tconst rootNode = parseDocument(document, true);\n\n\tconst helper = getEmmetHelper();\n\n\tconst operationRanges = Array.from(editor.selections).sort((a, b) => a.start.compareTo(b.start)).map(selection => {\n\t\tlet rangeToReplace: vscode.Range = selection;\n\t\t// wrap around the node if the selection falls inside its open or close tag\n\t\t{\n\t\t\tlet { start, end } = rangeToReplace;\n\n\t\t\tconst startOffset = document.offsetAt(start);\n\t\t\tconst documentText = document.getText();\n\t\t\tconst startNode = getHtmlFlatNode(documentText, rootNode, startOffset, true);\n\t\t\tif (startNode && isOffsetInsideOpenOrCloseTag(startNode, startOffset)) {\n\t\t\t\tstart = document.positionAt(startNode.start);\n\t\t\t\tconst nodeEndPosition = document.positionAt(startNode.end);\n\t\t\t\tend = nodeEndPosition.isAfter(end) ? nodeEndPosition : end;\n\t\t\t}\n\n\t\t\tconst endOffset = document.offsetAt(end);\n\t\t\tconst endNode = getHtmlFlatNode(documentText, rootNode, endOffset, true);\n\t\t\tif (endNode && isOffsetInsideOpenOrCloseTag(endNode, endOffset)) {\n\t\t\t\tconst nodeStartPosition = document.positionAt(endNode.start);\n\t\t\t\tstart = nodeStartPosition.isBefore(start) ? nodeStartPosition : start;\n\t\t\t\tconst nodeEndPosition = document.positionAt(endNode.end);\n\t\t\t\tend = nodeEndPosition.isAfter(end) ? nodeEndPosition : end;\n\t\t\t}\n\n\t\t\trangeToReplace = new vscode.Range(start, end);\n\t\t}\n\t\t// in case of multi-line, exclude last empty line from rangeToReplace\n\t\tif (!rangeToReplace.isSingleLine && rangeToReplace.end.character === 0) {\n\t\t\tconst previousLine = rangeToReplace.end.line - 1;\n\t\t\trangeToReplace = new vscode.Range(rangeToReplace.start, document.lineAt(previousLine).range.end);\n\t\t}\n\t\t// wrap line the cursor is on\n\t\tif (rangeToReplace.isEmpty) {\n\t\t\trangeToReplace = document.lineAt(rangeToReplace.start).range;\n\t\t}\n\n\t\t// ignore whitespace on the first line\n\t\tconst firstLineOfRange = document.lineAt(rangeToReplace.start);\n\t\tif (!firstLineOfRange.isEmptyOrWhitespace && firstLineOfRange.firstNonWhitespaceCharacterIndex > rangeToReplace.start.character) {\n\t\t\trangeToReplace = rangeToReplace.with(new vscode.Position(rangeToReplace.start.line, firstLineOfRange.firstNonWhitespaceCharacterIndex));\n\t\t}\n\n\t\treturn rangeToReplace;\n\t}).reduce((mergedRanges, range) => {\n\t\t// Merge overlapping ranges\n\t\tif (mergedRanges.length > 0 && range.intersection(mergedRanges[mergedRanges.length - 1])) {\n\t\t\tmergedRanges.push(range.union(mergedRanges.pop()!));\n\t\t} else {\n\t\t\tmergedRanges.push(range);\n\t\t}\n\t\treturn mergedRanges;\n\t}, [] as vscode.Range[]);\n\n\t// Backup orginal selections and update selections\n\t// Also helps with https://github.com/microsoft/vscode/issues/113930 by avoiding `editor.linkedEditing`\n\t// execution if selection is inside an open or close tag\n\tconst oldSelections = editor.selections;\n\teditor.selections = operationRanges.map(range => new vscode.Selection(range.start, range.end));\n\n\t// Fetch general information for the succesive expansions. i.e. the ranges to replace and its contents\n\tconst rangesToReplace: PreviewRangesWithContent[] = operationRanges.map(rangeToReplace => {\n\t\tlet textToWrapInPreview: string[];\n\t\tconst textToReplace = document.getText(rangeToReplace);\n\n\t\t// the following assumes all the lines are indented the same way as the first\n\t\t// this assumption helps with applyPreview later\n\t\tconst wholeFirstLine = document.lineAt(rangeToReplace.start).text;\n\t\tconst otherMatches = wholeFirstLine.match(/^(\\s*)/);\n\t\tconst baseIndent = otherMatches ? otherMatches[1] : '';\n\t\ttextToWrapInPreview = rangeToReplace.isSingleLine ?\n\t\t\t[textToReplace] :\n\t\t\ttextToReplace.split('\\n' + baseIndent).map(x => x.trimEnd());\n\n\t\t// escape $ characters, fixes #52640\n\t\ttextToWrapInPreview = textToWrapInPreview.map(e => e.replace(/(\\$\\d)/g, '\\\\$1'));\n\n\t\treturn {\n\t\t\tpreviewRange: rangeToReplace,\n\t\t\toriginalRange: rangeToReplace,\n\t\t\toriginalContent: textToReplace,\n\t\t\ttextToWrapInPreview,\n\t\t\tbaseIndent\n\t\t};\n\t});\n\n\tconst { tabSize, insertSpaces } = editor.options;\n\tconst indent = insertSpaces ? ' '.repeat(tabSize as number) : '\\t';\n\n\tfunction revertPreview(): Thenable<boolean> {\n\t\treturn editor.edit(builder => {\n\t\t\tfor (const rangeToReplace of rangesToReplace) {\n\t\t\t\tbuilder.replace(rangeToReplace.previewRange, rangeToReplace.originalContent);\n\t\t\t\trangeToReplace.previewRange = rangeToReplace.originalRange;\n\t\t\t}\n\t\t}, { undoStopBefore: false, undoStopAfter: false });\n\t}\n\n\tfunction applyPreview(expandAbbrList: ExpandAbbreviationInput[]): Thenable<boolean> {\n\t\tlet lastOldPreviewRange = new vscode.Range(0, 0, 0, 0);\n\t\tlet lastNewPreviewRange = new vscode.Range(0, 0, 0, 0);\n\t\tlet totalNewLinesInserted = 0;\n\n\t\treturn editor.edit(builder => {\n\t\t\t// the edits are applied in order top-down\n\t\t\tfor (let i = 0; i < rangesToReplace.length; i++) {\n\t\t\t\tconst expandedText = expandAbbr(expandAbbrList[i]) || '';\n\t\t\t\tif (!expandedText) {\n\t\t\t\t\t// Failed to expand text. We already showed an error inside expandAbbr.\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// get the current preview range, format the new wrapped text, and then replace\n\t\t\t\t// the text in the preview range with that new text\n\t\t\t\tconst oldPreviewRange = rangesToReplace[i].previewRange;\n\t\t\t\tconst newText = expandedText\n\t\t\t\t\t.replace(/\\$\\{[\\d]*\\}/g, '|') // Removing Tabstops\n\t\t\t\t\t.replace(/\\$\\{[\\d]*:([^}]*)\\}/g, (_, placeholder) => placeholder) // Replacing Placeholders\n\t\t\t\t\t.replace(/\\\\\\$/g, '$'); // Remove backslashes before $\n\t\t\t\tbuilder.replace(oldPreviewRange, newText);\n\n\t\t\t\t// calculate the new preview range to use for future previews\n\t\t\t\t// we also have to take into account that the previous expansions could:\n\t\t\t\t// - cause new lines to appear\n\t\t\t\t// - be on the same line as other expansions\n\t\t\t\tconst expandedTextLines = newText.split('\\n');\n\t\t\t\tconst oldPreviewLines = oldPreviewRange.end.line - oldPreviewRange.start.line + 1;\n\t\t\t\tconst newLinesInserted = expandedTextLines.length - oldPreviewLines;\n\n\t\t\t\tconst newPreviewLineStart = oldPreviewRange.start.line + totalNewLinesInserted;\n\t\t\t\tlet newPreviewStart = oldPreviewRange.start.character;\n\t\t\t\tconst newPreviewLineEnd = oldPreviewRange.end.line + totalNewLinesInserted + newLinesInserted;\n\t\t\t\tlet newPreviewEnd = expandedTextLines[expandedTextLines.length - 1].length;\n\t\t\t\tif (i > 0 && newPreviewLineEnd === lastNewPreviewRange.end.line) {\n\t\t\t\t\t// If newPreviewLineEnd is equal to the previous expandedText lineEnd,\n\t\t\t\t\t// set newPreviewStart to the length of the previous expandedText in that line\n\t\t\t\t\t// plus the number of characters between both selections.\n\t\t\t\t\tnewPreviewStart = lastNewPreviewRange.end.character + (oldPreviewRange.start.character - lastOldPreviewRange.end.character);\n\t\t\t\t\tnewPreviewEnd += newPreviewStart;\n\t\t\t\t} else if (i > 0 && newPreviewLineStart === lastNewPreviewRange.end.line) {\n\t\t\t\t\t// Same as above but expandedTextLines.length > 1 so newPreviewEnd keeps its value.\n\t\t\t\t\tnewPreviewStart = lastNewPreviewRange.end.character + (oldPreviewRange.start.character - lastOldPreviewRange.end.character);\n\t\t\t\t} else if (expandedTextLines.length === 1) {\n\t\t\t\t\t// If the expandedText is single line, add the length of preceeding text as it will not be included in line length.\n\t\t\t\t\tnewPreviewEnd += oldPreviewRange.start.character;\n\t\t\t\t}\n\n\t\t\t\tlastOldPreviewRange = rangesToReplace[i].previewRange;\n\t\t\t\tlastNewPreviewRange = new vscode.Range(newPreviewLineStart, newPreviewStart, newPreviewLineEnd, newPreviewEnd);\n\t\t\t\trangesToReplace[i].previewRange = lastNewPreviewRange;\n\t\t\t\ttotalNewLinesInserted += newLinesInserted;\n\t\t\t}\n\t\t}, { undoStopBefore: false, undoStopAfter: false });\n\t}\n\n\tlet inPreviewMode = false;\n\tasync function makeChanges(inputAbbreviation: string | undefined, previewChanges: boolean): Promise<boolean> {\n\t\tconst isAbbreviationValid = !!inputAbbreviation && !!inputAbbreviation.trim() && helper.isAbbreviationValid(syntax, inputAbbreviation);\n\t\tconst extractedResults = isAbbreviationValid ? helper.extractAbbreviationFromText(inputAbbreviation!, syntax) : undefined;\n\t\tif (!extractedResults) {\n\t\t\tif (inPreviewMode) {\n\t\t\t\tinPreviewMode = false;\n\t\t\t\tawait revertPreview();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { abbreviation, filter } = extractedResults;\n\t\tif (abbreviation !== inputAbbreviation) {\n\t\t\t// Not clear what should we do in this case. Warn the user? How?\n\t\t}\n\n\t\tif (previewChanges) {\n\t\t\tconst expandAbbrList: ExpandAbbreviationInput[] = rangesToReplace.map(rangesAndContent =>\n\t\t\t\t({ syntax, abbreviation, rangeToReplace: rangesAndContent.originalRange, textToWrap: rangesAndContent.textToWrapInPreview, filter, indent, baseIndent: rangesAndContent.baseIndent })\n\t\t\t);\n\n\t\t\tinPreviewMode = true;\n\t\t\treturn applyPreview(expandAbbrList);\n\t\t}\n\n\t\tconst expandAbbrList: ExpandAbbreviationInput[] = rangesToReplace.map(rangesAndContent =>\n\t\t\t({ syntax, abbreviation, rangeToReplace: rangesAndContent.originalRange, textToWrap: rangesAndContent.textToWrapInPreview, filter, indent })\n\t\t);\n\n\t\tif (inPreviewMode) {\n\t\t\tinPreviewMode = false;\n\t\t\tawait revertPreview();\n\t\t}\n\n\t\treturn expandAbbreviationInRange(editor, expandAbbrList, false);\n\t}\n\n\tlet currentValue = '';\n\tasync function inputChanged(value: string): Promise<string> {\n\t\tif (value !== currentValue) {\n\t\t\tcurrentValue = value;\n\t\t\tawait makeChanges(value, true);\n\t\t}\n\t\treturn '';\n\t}\n\n\tconst prompt = vscode.l10n.t(\"Enter Abbreviation\");\n\tconst inputAbbreviation = (args && args['abbreviation'])\n\t\t? (args['abbreviation'] as string)\n\t\t: await vscode.window.showInputBox({ prompt, validateInput: inputChanged });\n\n\tconst changesWereMade = await makeChanges(inputAbbreviation, false);\n\tif (!changesWereMade) {\n\t\teditor.selections = oldSelections;\n\t}\n\n\treturn changesWereMade;\n}\n\nexport function expandEmmetAbbreviation(args: any): Thenable<boolean | undefined> {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn fallbackTab();\n\t}\n\n\t/**\n\t * Short circuit the parsing. If previous character is space, do not expand.\n\t */\n\tif (vscode.window.activeTextEditor.selections.length === 1 &&\n\t\tvscode.window.activeTextEditor.selection.isEmpty\n\t) {\n\t\tconst anchor = vscode.window.activeTextEditor.selection.anchor;\n\t\tif (anchor.character === 0) {\n\t\t\treturn fallbackTab();\n\t\t}\n\n\t\tconst prevPositionAnchor = anchor.translate(0, -1);\n\t\tconst prevText = vscode.window.activeTextEditor.document.getText(new vscode.Range(prevPositionAnchor, anchor));\n\t\tif (prevText === ' ' || prevText === '\\t') {\n\t\t\treturn fallbackTab();\n\t\t}\n\t}\n\n\targs = args || {};\n\tif (!args['language']) {\n\t\targs['language'] = vscode.window.activeTextEditor.document.languageId;\n\t} else {\n\t\tconst excludedLanguages = vscode.workspace.getConfiguration('emmet')['excludeLanguages'] ? vscode.workspace.getConfiguration('emmet')['excludeLanguages'] : [];\n\t\tif (excludedLanguages.includes(vscode.window.activeTextEditor.document.languageId)) {\n\t\t\treturn fallbackTab();\n\t\t}\n\t}\n\tconst syntax = getSyntaxFromArgs(args);\n\tif (!syntax) {\n\t\treturn fallbackTab();\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\n\t// When tabbed on a non empty selection, do not treat it as an emmet abbreviation, and fallback to tab instead\n\tif (vscode.workspace.getConfiguration('emmet')['triggerExpansionOnTab'] === true && editor.selections.find(x => !x.isEmpty)) {\n\t\treturn fallbackTab();\n\t}\n\n\tconst abbreviationList: ExpandAbbreviationInput[] = [];\n\tlet firstAbbreviation: string;\n\tlet allAbbreviationsSame: boolean = true;\n\tconst helper = getEmmetHelper();\n\n\tconst getAbbreviation = (document: vscode.TextDocument, selection: vscode.Selection, position: vscode.Position, syntax: string): [vscode.Range | null, string, string | undefined] => {\n\t\tposition = document.validatePosition(position);\n\t\tlet rangeToReplace: vscode.Range = selection;\n\t\tlet abbr = document.getText(rangeToReplace);\n\t\tif (!rangeToReplace.isEmpty) {\n\t\t\tconst extractedResults = helper.extractAbbreviationFromText(abbr, syntax);\n\t\t\tif (extractedResults) {\n\t\t\t\treturn [rangeToReplace, extractedResults.abbreviation, extractedResults.filter];\n\t\t\t}\n\t\t\treturn [null, '', ''];\n\t\t}\n\n\t\tconst currentLine = editor.document.lineAt(position.line).text;\n\t\tconst textTillPosition = currentLine.substr(0, position.character);\n\n\t\t// Expand cases like <div to <div></div> explicitly\n\t\t// else we will end up with <<div></div>\n\t\tif (syntax === 'html') {\n\t\t\tconst matches = textTillPosition.match(/<(\\w+)$/);\n\t\t\tif (matches) {\n\t\t\t\tabbr = matches[1];\n\t\t\t\trangeToReplace = new vscode.Range(position.translate(0, -(abbr.length + 1)), position);\n\t\t\t\treturn [rangeToReplace, abbr, ''];\n\t\t\t}\n\t\t}\n\t\tconst extractedResults = helper.extractAbbreviation(toLSTextDocument(editor.document), position, { lookAhead: false });\n\t\tif (!extractedResults) {\n\t\t\treturn [null, '', ''];\n\t\t}\n\n\t\tconst { abbreviationRange, abbreviation, filter } = extractedResults;\n\t\treturn [new vscode.Range(abbreviationRange.start.line, abbreviationRange.start.character, abbreviationRange.end.line, abbreviationRange.end.character), abbreviation, filter];\n\t};\n\n\tconst selectionsInReverseOrder = editor.selections.slice(0);\n\tselectionsInReverseOrder.sort((a, b) => {\n\t\tconst posA = a.isReversed ? a.anchor : a.active;\n\t\tconst posB = b.isReversed ? b.anchor : b.active;\n\t\treturn posA.compareTo(posB) * -1;\n\t});\n\n\tlet rootNode: Node | undefined;\n\tfunction getRootNode() {\n\t\tif (rootNode) {\n\t\t\treturn rootNode;\n\t\t}\n\n\t\tconst usePartialParsing = vscode.workspace.getConfiguration('emmet')['optimizeStylesheetParsing'] === true;\n\t\tif (editor.selections.length === 1 && isStyleSheet(editor.document.languageId) && usePartialParsing && editor.document.lineCount > 1000) {\n\t\t\trootNode = parsePartialStylesheet(editor.document, editor.selection.isReversed ? editor.selection.anchor : editor.selection.active);\n\t\t} else {\n\t\t\trootNode = parseDocument(editor.document, true);\n\t\t}\n\n\t\treturn rootNode;\n\t}\n\n\tselectionsInReverseOrder.forEach(selection => {\n\t\tconst position = selection.isReversed ? selection.anchor : selection.active;\n\t\tconst [rangeToReplace, abbreviation, filter] = getAbbreviation(editor.document, selection, position, syntax);\n\t\tif (!rangeToReplace) {\n\t\t\treturn;\n\t\t}\n\t\tif (!helper.isAbbreviationValid(syntax, abbreviation)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isStyleSheet(syntax) && abbreviation.endsWith(':')) {\n\t\t\t// Fix for https://github.com/Microsoft/vscode/issues/1623\n\t\t\treturn;\n\t\t}\n\n\t\tconst offset = editor.document.offsetAt(position);\n\t\tlet currentNode = getFlatNode(getRootNode(), offset, true);\n\t\tlet validateLocation = true;\n\t\tlet syntaxToUse = syntax;\n\n\t\tif (editor.document.languageId === 'html') {\n\t\t\tif (isStyleAttribute(currentNode, offset)) {\n\t\t\t\tsyntaxToUse = 'css';\n\t\t\t\tvalidateLocation = false;\n\t\t\t} else {\n\t\t\t\tconst embeddedCssNode = getEmbeddedCssNodeIfAny(editor.document, currentNode, position);\n\t\t\t\tif (embeddedCssNode) {\n\t\t\t\t\tcurrentNode = getFlatNode(embeddedCssNode, offset, true);\n\t\t\t\t\tsyntaxToUse = 'css';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (validateLocation && !isValidLocationForEmmetAbbreviation(editor.document, getRootNode(), currentNode, syntaxToUse, offset, rangeToReplace)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!firstAbbreviation) {\n\t\t\tfirstAbbreviation = abbreviation;\n\t\t} else if (allAbbreviationsSame && firstAbbreviation !== abbreviation) {\n\t\t\tallAbbreviationsSame = false;\n\t\t}\n\n\t\tabbreviationList.push({ syntax: syntaxToUse, abbreviation, rangeToReplace, filter });\n\t});\n\n\treturn expandAbbreviationInRange(editor, abbreviationList, allAbbreviationsSame).then(success => {\n\t\treturn success ? Promise.resolve(undefined) : fallbackTab();\n\t});\n}\n\nfunction fallbackTab(): Thenable<boolean | undefined> {\n\tif (vscode.workspace.getConfiguration('emmet')['triggerExpansionOnTab'] === true) {\n\t\treturn vscode.commands.executeCommand('tab');\n\t}\n\treturn Promise.resolve(true);\n}\n/**\n * Checks if given position is a valid location to expand emmet abbreviation.\n * Works only on html and css/less/scss syntax\n * @param document current Text Document\n * @param rootNode parsed document\n * @param currentNode current node in the parsed document\n * @param syntax syntax of the abbreviation\n * @param position position to validate\n * @param abbreviationRange The range of the abbreviation for which given position is being validated\n */\nexport function isValidLocationForEmmetAbbreviation(document: vscode.TextDocument, rootNode: Node | undefined, currentNode: Node | undefined, syntax: string, offset: number, abbreviationRange: vscode.Range): boolean {\n\tif (isStyleSheet(syntax)) {\n\t\tconst stylesheet = <Stylesheet>rootNode;\n\t\tif (stylesheet && (stylesheet.comments || []).some(x => offset >= x.start && offset <= x.end)) {\n\t\t\treturn false;\n\t\t}\n\t\t// Continue validation only if the file was parse-able and the currentNode has been found\n\t\tif (!currentNode) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Get the abbreviation right now\n\t\t// Fixes https://github.com/microsoft/vscode/issues/74505\n\t\t// Stylesheet abbreviations starting with @ should bring up suggestions\n\t\t// even at outer-most level\n\t\tconst abbreviation = document.getText(new vscode.Range(abbreviationRange.start.line, abbreviationRange.start.character, abbreviationRange.end.line, abbreviationRange.end.character));\n\t\tif (abbreviation.startsWith('@')) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/34162\n\t\t// Other than sass, stylus, we can make use of the terminator tokens to validate position\n\t\tif (syntax !== 'sass' && syntax !== 'stylus' && currentNode.type === 'property') {\n\t\t\t// Fix for upstream issue https://github.com/emmetio/css-parser/issues/3\n\t\t\tif (currentNode.parent\n\t\t\t\t&& currentNode.parent.type !== 'rule'\n\t\t\t\t&& currentNode.parent.type !== 'at-rule') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst propertyNode = <Property>currentNode;\n\t\t\tif (propertyNode.terminatorToken\n\t\t\t\t&& propertyNode.separator\n\t\t\t\t&& offset >= propertyNode.separatorToken.end\n\t\t\t\t&& offset <= propertyNode.terminatorToken.start\n\t\t\t\t&& !abbreviation.includes(':')) {\n\t\t\t\treturn hexColorRegex.test(abbreviation) || abbreviation === '!';\n\t\t\t}\n\t\t\tif (!propertyNode.terminatorToken\n\t\t\t\t&& propertyNode.separator\n\t\t\t\t&& offset >= propertyNode.separatorToken.end\n\t\t\t\t&& !abbreviation.includes(':')) {\n\t\t\t\treturn hexColorRegex.test(abbreviation) || abbreviation === '!';\n\t\t\t}\n\t\t\tif (hexColorRegex.test(abbreviation) || abbreviation === '!') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// If current node is a rule or at-rule, then perform additional checks to ensure\n\t\t// emmet suggestions are not provided in the rule selector\n\t\tif (currentNode.type !== 'rule' && currentNode.type !== 'at-rule') {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst currentCssNode = <Rule>currentNode;\n\n\t\t// Position is valid if it occurs after the `{` that marks beginning of rule contents\n\t\tif (offset > currentCssNode.contentStartToken.end) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Workaround for https://github.com/microsoft/vscode/30188\n\t\t// The line above the rule selector is considered as part of the selector by the css-parser\n\t\t// But we should assume it is a valid location for css properties under the parent rule\n\t\tif (currentCssNode.parent\n\t\t\t&& (currentCssNode.parent.type === 'rule' || currentCssNode.parent.type === 'at-rule')\n\t\t\t&& currentCssNode.selectorToken) {\n\t\t\tconst position = document.positionAt(offset);\n\t\t\tconst tokenStartPos = document.positionAt(currentCssNode.selectorToken.start);\n\t\t\tconst tokenEndPos = document.positionAt(currentCssNode.selectorToken.end);\n\t\t\tif (position.line !== tokenEndPos.line\n\t\t\t\t&& tokenStartPos.character === abbreviationRange.start.character\n\t\t\t\t&& tokenStartPos.line === abbreviationRange.start.line\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tconst startAngle = '<';\n\tconst endAngle = '>';\n\tconst escape = '\\\\';\n\tconst question = '?';\n\tconst currentHtmlNode = <HtmlNode>currentNode;\n\tlet start = 0;\n\n\tif (currentHtmlNode) {\n\t\tif (currentHtmlNode.name === 'script') {\n\t\t\tconst typeAttribute = (currentHtmlNode.attributes || []).filter(x => x.name.toString() === 'type')[0];\n\t\t\tconst typeValue = typeAttribute ? typeAttribute.value.toString() : '';\n\n\t\t\tif (allowedMimeTypesInScriptTag.includes(typeValue)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst isScriptJavascriptType = !typeValue || typeValue === 'application/javascript' || typeValue === 'text/javascript';\n\t\t\tif (isScriptJavascriptType) {\n\t\t\t\treturn !!getSyntaxFromArgs({ language: 'javascript' });\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/28829\n\t\tif (!currentHtmlNode.open || !currentHtmlNode.close ||\n\t\t\t!(currentHtmlNode.open.end <= offset && offset <= currentHtmlNode.close.start)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/35128\n\t\t// Find the position up till where we will backtrack looking for unescaped < or >\n\t\t// to decide if current position is valid for emmet expansion\n\t\tstart = currentHtmlNode.open.end;\n\t\tlet lastChildBeforePosition = currentHtmlNode.firstChild;\n\t\twhile (lastChildBeforePosition) {\n\t\t\tif (lastChildBeforePosition.end > offset) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstart = lastChildBeforePosition.end;\n\t\t\tlastChildBeforePosition = lastChildBeforePosition.nextSibling;\n\t\t}\n\t}\n\tconst startPos = document.positionAt(start);\n\tlet textToBackTrack = document.getText(new vscode.Range(startPos.line, startPos.character, abbreviationRange.start.line, abbreviationRange.start.character));\n\n\t// Worse case scenario is when cursor is inside a big chunk of text which needs to backtracked\n\t// Backtrack only 500 offsets to ensure we dont waste time doing this\n\tif (textToBackTrack.length > 500) {\n\t\ttextToBackTrack = textToBackTrack.substr(textToBackTrack.length - 500);\n\t}\n\n\tif (!textToBackTrack.trim()) {\n\t\treturn true;\n\t}\n\n\tlet valid = true;\n\tlet foundSpace = false; // If < is found before finding whitespace, then its valid abbreviation. E.g.: <div|\n\tlet i = textToBackTrack.length - 1;\n\tif (textToBackTrack[i] === startAngle) {\n\t\treturn false;\n\t}\n\n\twhile (i >= 0) {\n\t\tconst char = textToBackTrack[i];\n\t\ti--;\n\t\tif (!foundSpace && /\\s/.test(char)) {\n\t\t\tfoundSpace = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === question && textToBackTrack[i] === startAngle) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\t// Fix for https://github.com/microsoft/vscode/issues/55411\n\t\t// A space is not a valid character right after < in a tag name.\n\t\tif (/\\s/.test(char) && textToBackTrack[i] === startAngle) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char !== startAngle && char !== endAngle) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (i >= 0 && textToBackTrack[i] === escape) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === endAngle) {\n\t\t\tif (i >= 0 && textToBackTrack[i] === '=') {\n\t\t\t\tcontinue; // False alarm of cases like =>\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (char === startAngle) {\n\t\t\tvalid = !foundSpace;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn valid;\n}\n\n/**\n * Expands abbreviations as detailed in expandAbbrList in the editor\n *\n * @returns false if no snippet can be inserted.\n */\nasync function expandAbbreviationInRange(editor: vscode.TextEditor, expandAbbrList: ExpandAbbreviationInput[], insertSameSnippet: boolean): Promise<boolean> {\n\tif (!expandAbbrList || expandAbbrList.length === 0) {\n\t\treturn false;\n\t}\n\n\t// Snippet to replace at multiple cursors are not the same\n\t// `editor.insertSnippet` will have to be called for each instance separately\n\t// We will not be able to maintain multiple cursors after snippet insertion\n\tlet insertedSnippetsCount = 0;\n\tif (!insertSameSnippet) {\n\t\texpandAbbrList.sort((a: ExpandAbbreviationInput, b: ExpandAbbreviationInput) => { return b.rangeToReplace.start.compareTo(a.rangeToReplace.start); });\n\t\tfor (const expandAbbrInput of expandAbbrList) {\n\t\t\tconst expandedText = expandAbbr(expandAbbrInput);\n\t\t\tif (expandedText) {\n\t\t\t\tawait editor.insertSnippet(new vscode.SnippetString(expandedText), expandAbbrInput.rangeToReplace, { undoStopBefore: false, undoStopAfter: false });\n\t\t\t\tinsertedSnippetsCount++;\n\t\t\t}\n\t\t}\n\t\treturn insertedSnippetsCount > 0;\n\t}\n\n\t// Snippet to replace at all cursors are the same\n\t// We can pass all ranges to `editor.insertSnippet` in a single call so that\n\t// all cursors are maintained after snippet insertion\n\tconst anyExpandAbbrInput = expandAbbrList[0];\n\tconst expandedText = expandAbbr(anyExpandAbbrInput);\n\tconst allRanges = expandAbbrList.map(value => value.rangeToReplace);\n\tif (expandedText) {\n\t\treturn editor.insertSnippet(new vscode.SnippetString(expandedText), allRanges);\n\t}\n\treturn false;\n}\n\n/**\n * Expands abbreviation as detailed in given input.\n */\nfunction expandAbbr(input: ExpandAbbreviationInput): string | undefined {\n\tconst helper = getEmmetHelper();\n\tconst expandOptions = helper.getExpandOptions(input.syntax, getEmmetConfiguration(input.syntax), input.filter);\n\n\tif (input.textToWrap) {\n\t\t// escape ${ sections, fixes #122231\n\t\tinput.textToWrap = input.textToWrap.map(e => e.replace(/\\$\\{/g, '\\\\\\$\\{'));\n\t\tif (input.filter && input.filter.includes('t')) {\n\t\t\tinput.textToWrap = input.textToWrap.map(line => {\n\t\t\t\treturn line.replace(trimRegex, '').trim();\n\t\t\t});\n\t\t}\n\t\texpandOptions['text'] = input.textToWrap;\n\n\t\tif (expandOptions.options) {\n\t\t\t// Below fixes https://github.com/microsoft/vscode/issues/29898\n\t\t\t// With this, Emmet formats inline elements as block elements\n\t\t\t// ensuring the wrapped multi line text does not get merged to a single line\n\t\t\tif (!input.rangeToReplace.isSingleLine) {\n\t\t\t\texpandOptions.options['output.inlineBreak'] = 1;\n\t\t\t}\n\n\t\t\tif (input.indent) {\n\t\t\t\texpandOptions.options['output.indent'] = input.indent;\n\t\t\t}\n\t\t\tif (input.baseIndent) {\n\t\t\t\texpandOptions.options['output.baseIndent'] = input.baseIndent;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet expandedText: string | undefined;\n\ttry {\n\t\texpandedText = helper.expandAbbreviation(input.abbreviation, expandOptions);\n\t} catch (e) {\n\t\tvoid vscode.window.showErrorMessage('Failed to expand abbreviation');\n\t}\n\n\treturn expandedText;\n}\n\nexport function getSyntaxFromArgs(args: { [x: string]: string }): string | undefined {\n\tconst mappedModes = getMappingForIncludedLanguages();\n\tconst language: string = args['language'];\n\tconst parentMode: string = args['parentMode'];\n\tconst excludedLanguages = vscode.workspace.getConfiguration('emmet')['excludeLanguages'] ? vscode.workspace.getConfiguration('emmet')['excludeLanguages'] : [];\n\tif (excludedLanguages.includes(language)) {\n\t\treturn;\n\t}\n\n\tlet syntax = getEmmetMode(mappedModes[language] ?? language, mappedModes, excludedLanguages);\n\tif (!syntax) {\n\t\tsyntax = getEmmetMode(mappedModes[parentMode] ?? parentMode, mappedModes, excludedLanguages);\n\t}\n\n\treturn syntax;\n}\n"
  },
  {
    "path": "extensions/emmet/src/balance.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getHtmlFlatNode, offsetRangeToSelection, validate } from './util';\nimport { getRootNode } from './parseDocument';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nlet balanceOutStack: Array<readonly vscode.Selection[]> = [];\nlet lastBalancedSelections: readonly vscode.Selection[] = [];\n\nexport function balanceOut() {\n\tbalance(true);\n}\n\nexport function balanceIn() {\n\tbalance(false);\n}\n\nfunction balance(out: boolean) {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst rangeFn = out ? getRangeToBalanceOut : getRangeToBalanceIn;\n\tlet newSelections: readonly vscode.Selection[] = editor.selections.map(selection => {\n\t\treturn rangeFn(document, rootNode, selection);\n\t});\n\n\t// check whether we are starting a balance elsewhere\n\tif (areSameSelections(lastBalancedSelections, editor.selections)) {\n\t\t// we are not starting elsewhere, so use the stack as-is\n\t\tif (out) {\n\t\t\t// make sure we are able to expand outwards\n\t\t\tif (!areSameSelections(editor.selections, newSelections)) {\n\t\t\t\tbalanceOutStack.push(editor.selections);\n\t\t\t}\n\t\t} else if (balanceOutStack.length) {\n\t\t\tnewSelections = balanceOutStack.pop()!;\n\t\t}\n\t} else {\n\t\t// we are starting elsewhere, so reset the stack\n\t\tbalanceOutStack = out ? [editor.selections] : [];\n\t}\n\n\teditor.selections = newSelections;\n\tlastBalancedSelections = editor.selections;\n}\n\nfunction getRangeToBalanceOut(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Selection {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToBalance = getHtmlFlatNode(document.getText(), rootNode, offset, false);\n\tif (!nodeToBalance) {\n\t\treturn selection;\n\t}\n\tif (!nodeToBalance.open || !nodeToBalance.close) {\n\t\treturn offsetRangeToSelection(document, nodeToBalance.start, nodeToBalance.end);\n\t}\n\n\t// Set reverse direction if we were in the end tag\n\tlet innerSelection: vscode.Selection;\n\tlet outerSelection: vscode.Selection;\n\tif (nodeToBalance.close.start <= offset && nodeToBalance.close.end > offset) {\n\t\tinnerSelection = offsetRangeToSelection(document, nodeToBalance.close.start, nodeToBalance.open.end);\n\t\touterSelection = offsetRangeToSelection(document, nodeToBalance.close.end, nodeToBalance.open.start);\n\t}\n\telse {\n\t\tinnerSelection = offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);\n\t\touterSelection = offsetRangeToSelection(document, nodeToBalance.open.start, nodeToBalance.close.end);\n\t}\n\n\tif (innerSelection.contains(selection) && !innerSelection.isEqual(selection)) {\n\t\treturn innerSelection;\n\t}\n\tif (outerSelection.contains(selection) && !outerSelection.isEqual(selection)) {\n\t\treturn outerSelection;\n\t}\n\treturn selection;\n}\n\nfunction getRangeToBalanceIn(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Selection {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToBalance = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!nodeToBalance) {\n\t\treturn selection;\n\t}\n\n\tconst selectionStart = document.offsetAt(selection.start);\n\tconst selectionEnd = document.offsetAt(selection.end);\n\tif (nodeToBalance.open && nodeToBalance.close) {\n\t\tconst entireNodeSelected = selectionStart === nodeToBalance.start && selectionEnd === nodeToBalance.end;\n\t\tconst startInOpenTag = selectionStart > nodeToBalance.open.start && selectionStart < nodeToBalance.open.end;\n\t\tconst startInCloseTag = selectionStart > nodeToBalance.close.start && selectionStart < nodeToBalance.close.end;\n\n\t\tif (entireNodeSelected || startInOpenTag || startInCloseTag) {\n\t\t\treturn offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);\n\t\t}\n\t}\n\n\tif (!nodeToBalance.firstChild) {\n\t\treturn selection;\n\t}\n\n\tconst firstChild = nodeToBalance.firstChild;\n\tif (selectionStart === firstChild.start\n\t\t&& selectionEnd === firstChild.end\n\t\t&& firstChild.open\n\t\t&& firstChild.close) {\n\t\treturn offsetRangeToSelection(document, firstChild.open.end, firstChild.close.start);\n\t}\n\n\treturn offsetRangeToSelection(document, firstChild.start, firstChild.end);\n}\n\nfunction areSameSelections(a: readonly vscode.Selection[], b: readonly vscode.Selection[]): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (!a[i].isEqual(b[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n"
  },
  {
    "path": "extensions/emmet/src/browser/emmetBrowserMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { activateEmmetExtension } from '../emmetCommon';\n\nexport function activate(context: vscode.ExtensionContext) {\n\tactivateEmmetExtension(context);\n}\n"
  },
  {
    "path": "extensions/emmet/src/bufferStream.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport { TextDocument } from 'vscode';\n\n/**\n * A stream reader for VSCode's `TextDocument`\n * Based on @emmetio/stream-reader and @emmetio/atom-plugin\n */\nexport class DocumentStreamReader {\n\tprivate document: TextDocument;\n\tprivate start: number;\n\tprivate _eof: number;\n\tprivate _sof: number;\n\tpublic pos: number;\n\n\tconstructor(document: TextDocument, pos?: number, limit?: [number, number]) {\n\t\tthis.document = document;\n\t\tthis.start = this.pos = pos ? pos : 0;\n\t\tthis._sof = limit ? limit[0] : 0;\n\t\tthis._eof = limit ? limit[1] : document.getText().length;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the start of the file.\n\t */\n\tsof(): boolean {\n\t\treturn this.pos <= this._sof;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the end of the file.\n\t */\n\teof(): boolean {\n\t\treturn this.pos >= this._eof;\n\t}\n\n\t/**\n\t * Creates a new stream instance which is limited to given range for given document\n\t */\n\tlimit(start: number, end: number): DocumentStreamReader {\n\t\treturn new DocumentStreamReader(this.document, start, [start, end]);\n\t}\n\n\t/**\n\t * Returns the next character code in the stream without advancing it.\n\t * Will return NaN at the end of the file.\n\t */\n\tpeek(): number {\n\t\tif (this.eof()) {\n\t\t\treturn NaN;\n\t\t}\n\t\treturn this.document.getText().charCodeAt(this.pos);\n\t}\n\n\t/**\n\t * Returns the next character in the stream and advances it.\n\t * Also returns NaN when no more characters are available.\n\t */\n\tnext(): number {\n\t\tif (this.eof()) {\n\t\t\treturn NaN;\n\t\t}\n\n\t\tconst code = this.document.getText().charCodeAt(this.pos);\n\t\tthis.pos++;\n\n\t\tif (this.eof()) {\n\t\t\t// restrict pos to eof, if in case it got moved beyond eof\n\t\t\tthis.pos = this._eof;\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * Backs up the stream n characters. Backing it up further than the\n\t * start of the current token will cause things to break, so be careful.\n\t */\n\tbackUp(n: number): number {\n\t\tthis.pos -= n;\n\t\tif (this.pos < 0) {\n\t\t\tthis.pos = 0;\n\t\t}\n\t\treturn this.peek();\n\t}\n\n\t/**\n\t * Get the string between the start of the current token and the\n\t * current stream position.\n\t */\n\tcurrent(): string {\n\t\treturn this.substring(this.start, this.pos);\n\t}\n\n\t/**\n\t * Returns contents for given range\n\t */\n\tsubstring(from: number, to: number): string {\n\t\treturn this.document.getText().substring(from, to);\n\t}\n\n\t/**\n\t * Creates error object with current stream state\n\t */\n\terror(message: string): Error {\n\t\tconst err = new Error(`${message} at offset ${this.pos}`);\n\t\treturn err;\n\t}\n\n\t/**\n\t * `match` can be a character code or a function that takes a character code\n\t * and returns a boolean. If the next character in the stream 'matches'\n\t * the given argument, it is consumed and returned.\n\t * Otherwise, `false` is returned.\n\t */\n\teat(match: number | Function): boolean {\n\t\tconst ch = this.peek();\n\t\tconst ok = typeof match === 'function' ? match(ch) : ch === match;\n\n\t\tif (ok) {\n\t\t\tthis.next();\n\t\t}\n\n\t\treturn ok;\n\t}\n\n\t/**\n\t * Repeatedly calls <code>eat</code> with the given argument, until it\n\t * fails. Returns <code>true</code> if any characters were eaten.\n\t */\n\teatWhile(match: number | Function): boolean {\n\t\tconst start = this.pos;\n\t\twhile (!this.eof() && this.eat(match)) { }\n\t\treturn this.pos !== start;\n\t}\n}\n"
  },
  {
    "path": "extensions/emmet/src/defaultCompletionProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node, Stylesheet } from 'EmmetFlatNode';\nimport { isValidLocationForEmmetAbbreviation, getSyntaxFromArgs } from './abbreviationActions';\nimport { getEmmetHelper, getMappingForIncludedLanguages, parsePartialStylesheet, getEmmetConfiguration, getEmmetMode, isStyleSheet, getFlatNode, allowedMimeTypesInScriptTag, toLSTextDocument, getHtmlFlatNode, getEmbeddedCssNodeIfAny } from './util';\nimport { Range as LSRange } from 'vscode-languageserver-textdocument';\nimport { getRootNode } from './parseDocument';\n\nexport class DefaultCompletionItemProvider implements vscode.CompletionItemProvider {\n\n\tprivate lastCompletionType: string | undefined;\n\n\tpublic provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.CancellationToken, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {\n\t\tconst completionResult = this.provideCompletionItemsInternal(document, position, context);\n\t\tif (!completionResult) {\n\t\t\tthis.lastCompletionType = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\treturn completionResult.then(completionList => {\n\t\t\tif (!completionList || !completionList.items.length) {\n\t\t\t\tthis.lastCompletionType = undefined;\n\t\t\t\treturn completionList;\n\t\t\t}\n\t\t\tconst item = completionList.items[0];\n\t\t\tconst expandedText = item.documentation ? item.documentation.toString() : '';\n\n\t\t\tif (expandedText.startsWith('<')) {\n\t\t\t\tthis.lastCompletionType = 'html';\n\t\t\t} else if (expandedText.indexOf(':') > 0 && expandedText.endsWith(';')) {\n\t\t\t\tthis.lastCompletionType = 'css';\n\t\t\t} else {\n\t\t\t\tthis.lastCompletionType = undefined;\n\t\t\t}\n\t\t\treturn completionList;\n\t\t});\n\t}\n\n\tprivate provideCompletionItemsInternal(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {\n\t\tconst emmetConfig = vscode.workspace.getConfiguration('emmet');\n\t\tconst excludedLanguages = emmetConfig['excludeLanguages'] ? emmetConfig['excludeLanguages'] : [];\n\t\tif (excludedLanguages.includes(document.languageId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mappedLanguages = getMappingForIncludedLanguages();\n\t\tconst isSyntaxMapped = mappedLanguages[document.languageId] ? true : false;\n\t\tconst emmetMode = getEmmetMode((isSyntaxMapped ? mappedLanguages[document.languageId] : document.languageId), mappedLanguages, excludedLanguages);\n\n\t\tif (!emmetMode\n\t\t\t|| emmetConfig['showExpandedAbbreviation'] === 'never'\n\t\t\t|| ((isSyntaxMapped || emmetMode === 'jsx') && emmetConfig['showExpandedAbbreviation'] !== 'always')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet syntax = emmetMode;\n\n\t\tlet validateLocation = syntax === 'html' || syntax === 'jsx' || syntax === 'xml';\n\t\tlet rootNode: Node | undefined;\n\t\tlet currentNode: Node | undefined;\n\n\t\tconst lsDoc = toLSTextDocument(document);\n\t\tposition = document.validatePosition(position);\n\n\t\t// Don't show completions if there's a comment at the beginning of the line\n\t\tconst lineRange = new vscode.Range(position.line, 0, position.line, position.character);\n\t\tif (document.getText(lineRange).trimStart().startsWith('//')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst helper = getEmmetHelper();\n\t\tif (syntax === 'html') {\n\t\t\tif (context.triggerKind === vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\t\tswitch (this.lastCompletionType) {\n\t\t\t\t\tcase 'html':\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'css':\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (validateLocation) {\n\t\t\t\tconst positionOffset = document.offsetAt(position);\n\t\t\t\tconst emmetRootNode = getRootNode(document, true);\n\t\t\t\tconst foundNode = getHtmlFlatNode(document.getText(), emmetRootNode, positionOffset, false);\n\t\t\t\tif (foundNode) {\n\t\t\t\t\tif (foundNode.name === 'script') {\n\t\t\t\t\t\tconst typeNode = foundNode.attributes.find(attr => attr.name.toString() === 'type');\n\t\t\t\t\t\tif (typeNode) {\n\t\t\t\t\t\t\tconst typeAttrValue = typeNode.value.toString();\n\t\t\t\t\t\t\tif (typeAttrValue === 'application/javascript' || typeAttrValue === 'text/javascript') {\n\t\t\t\t\t\t\t\tif (!getSyntaxFromArgs({ language: 'javascript' })) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (allowedMimeTypesInScriptTag.includes(typeAttrValue)) {\n\t\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (foundNode.name === 'style') {\n\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst styleNode = foundNode.attributes.find(attr => attr.name.toString() === 'style');\n\t\t\t\t\t\tif (styleNode && styleNode.value.start <= positionOffset && positionOffset <= styleNode.value.end) {\n\t\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst expandOptions = isStyleSheet(syntax) ?\n\t\t\t{ lookAhead: false, syntax: 'stylesheet' } :\n\t\t\t{ lookAhead: true, syntax: 'markup' };\n\t\tconst extractAbbreviationResults = helper.extractAbbreviation(lsDoc, position, expandOptions);\n\t\tif (!extractAbbreviationResults || !helper.isAbbreviationValid(syntax, extractAbbreviationResults.abbreviation)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst offset = document.offsetAt(position);\n\t\tif (isStyleSheet(document.languageId) && context.triggerKind !== vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\tvalidateLocation = true;\n\t\t\tconst usePartialParsing = vscode.workspace.getConfiguration('emmet')['optimizeStylesheetParsing'] === true;\n\t\t\trootNode = usePartialParsing && document.lineCount > 1000 ? parsePartialStylesheet(document, position) : <Stylesheet>getRootNode(document, true);\n\t\t\tif (!rootNode) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurrentNode = getFlatNode(rootNode, offset, true);\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/107578\n\t\t// Validate location if syntax is of styleSheet type to ensure that location is valid for emmet abbreviation.\n\t\t// For an html document containing a <style> node, compute the embeddedCssNode and fetch the flattened node as currentNode.\n\t\tif (!isStyleSheet(document.languageId) && isStyleSheet(syntax) && context.triggerKind !== vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\tvalidateLocation = true;\n\t\t\trootNode = getRootNode(document, true);\n\t\t\tif (!rootNode) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst flatNode = getFlatNode(rootNode, offset, true);\n\t\t\tconst embeddedCssNode = getEmbeddedCssNodeIfAny(document, flatNode, position);\n\t\t\tcurrentNode = getFlatNode(embeddedCssNode, offset, true);\n\t\t}\n\n\t\tif (validateLocation && !isValidLocationForEmmetAbbreviation(document, rootNode, currentNode, syntax, offset, toRange(extractAbbreviationResults.abbreviationRange))) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet isNoisePromise: Thenable<boolean> = Promise.resolve(false);\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/32647\n\t\t// Check for document symbols in js/ts/jsx/tsx and avoid triggering emmet for abbreviations of the form symbolName.sometext\n\t\t// Presence of > or * or + in the abbreviation denotes valid abbreviation that should trigger emmet\n\t\tif (!isStyleSheet(syntax) && (document.languageId === 'javascript' || document.languageId === 'javascriptreact' || document.languageId === 'typescript' || document.languageId === 'typescriptreact')) {\n\t\t\tconst abbreviation: string = extractAbbreviationResults.abbreviation;\n\t\t\t// For the second condition, we don't want abbreviations that have [] characters but not ='s in them to expand\n\t\t\t// In turn, users must explicitly expand abbreviations of the form Component[attr1 attr2], but it means we don't try to expand a[i].\n\t\t\tif (abbreviation.startsWith('this.') || /\\[[^\\]=]*\\]/.test(abbreviation)) {\n\t\t\t\tisNoisePromise = Promise.resolve(true);\n\t\t\t} else {\n\t\t\t\tisNoisePromise = vscode.commands.executeCommand<vscode.SymbolInformation[] | undefined>('vscode.executeDocumentSymbolProvider', document.uri).then(symbols => {\n\t\t\t\t\treturn !!symbols && symbols.some(x => abbreviation === x.name || (abbreviation.startsWith(x.name + '.') && !/>|\\*|\\+/.test(abbreviation)));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn isNoisePromise.then((isNoise): vscode.CompletionList | undefined => {\n\t\t\tif (isNoise) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst config = getEmmetConfiguration(syntax!);\n\t\t\tconst result = helper.doComplete(toLSTextDocument(document), position, syntax, config);\n\n\t\t\tconst newItems: vscode.CompletionItem[] = [];\n\t\t\tif (result && result.items) {\n\t\t\t\tresult.items.forEach((item: any) => {\n\t\t\t\t\tconst newItem = new vscode.CompletionItem(item.label);\n\t\t\t\t\tnewItem.documentation = item.documentation;\n\t\t\t\t\tnewItem.detail = item.detail;\n\t\t\t\t\tnewItem.insertText = new vscode.SnippetString(item.textEdit.newText);\n\t\t\t\t\tconst oldrange = item.textEdit.range;\n\t\t\t\t\tnewItem.range = new vscode.Range(oldrange.start.line, oldrange.start.character, oldrange.end.line, oldrange.end.character);\n\n\t\t\t\t\tnewItem.filterText = item.filterText;\n\t\t\t\t\tnewItem.sortText = item.sortText;\n\n\t\t\t\t\tif (emmetConfig['showSuggestionsAsSnippets'] === true) {\n\t\t\t\t\t\tnewItem.kind = vscode.CompletionItemKind.Snippet;\n\t\t\t\t\t}\n\t\t\t\t\tnewItems.push(newItem);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn new vscode.CompletionList(newItems, true);\n\t\t});\n\t}\n}\n\nfunction toRange(lsRange: LSRange) {\n\treturn new vscode.Range(lsRange.start.line, lsRange.start.character, lsRange.end.line, lsRange.end.character);\n}\n"
  },
  {
    "path": "extensions/emmet/src/editPoint.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate } from './util';\n\nexport function fetchEditPoint(direction: string): void {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\n\tconst newSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst updatedSelection = direction === 'next' ? nextEditPoint(selection, editor) : prevEditPoint(selection, editor);\n\t\tnewSelections.push(updatedSelection);\n\t});\n\teditor.selections = newSelections;\n\teditor.revealRange(editor.selections[editor.selections.length - 1]);\n}\n\nfunction nextEditPoint(selection: vscode.Selection, editor: vscode.TextEditor): vscode.Selection {\n\tfor (let lineNum = selection.anchor.line; lineNum < editor.document.lineCount; lineNum++) {\n\t\tconst updatedSelection = findEditPoint(lineNum, editor, selection.anchor, 'next');\n\t\tif (updatedSelection) {\n\t\t\treturn updatedSelection;\n\t\t}\n\t}\n\treturn selection;\n}\n\nfunction prevEditPoint(selection: vscode.Selection, editor: vscode.TextEditor): vscode.Selection {\n\tfor (let lineNum = selection.anchor.line; lineNum >= 0; lineNum--) {\n\t\tconst updatedSelection = findEditPoint(lineNum, editor, selection.anchor, 'prev');\n\t\tif (updatedSelection) {\n\t\t\treturn updatedSelection;\n\t\t}\n\t}\n\treturn selection;\n}\n\n\nfunction findEditPoint(lineNum: number, editor: vscode.TextEditor, position: vscode.Position, direction: string): vscode.Selection | undefined {\n\tconst line = editor.document.lineAt(lineNum);\n\tlet lineContent = line.text;\n\n\tif (lineNum !== position.line && line.isEmptyOrWhitespace && lineContent.length) {\n\t\treturn new vscode.Selection(lineNum, lineContent.length, lineNum, lineContent.length);\n\t}\n\n\tif (lineNum === position.line && direction === 'prev') {\n\t\tlineContent = lineContent.substr(0, position.character);\n\t}\n\tconst emptyAttrIndex = direction === 'next' ? lineContent.indexOf('\"\"', lineNum === position.line ? position.character : 0) : lineContent.lastIndexOf('\"\"');\n\tconst emptyTagIndex = direction === 'next' ? lineContent.indexOf('><', lineNum === position.line ? position.character : 0) : lineContent.lastIndexOf('><');\n\n\tlet winner = -1;\n\n\tif (emptyAttrIndex > -1 && emptyTagIndex > -1) {\n\t\twinner = direction === 'next' ? Math.min(emptyAttrIndex, emptyTagIndex) : Math.max(emptyAttrIndex, emptyTagIndex);\n\t} else if (emptyAttrIndex > -1) {\n\t\twinner = emptyAttrIndex;\n\t} else {\n\t\twinner = emptyTagIndex;\n\t}\n\n\tif (winner > -1) {\n\t\treturn new vscode.Selection(lineNum, winner + 1, lineNum, winner + 1);\n\t}\n\treturn;\n}\n"
  },
  {
    "path": "extensions/emmet/src/emmetCommon.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { DefaultCompletionItemProvider } from './defaultCompletionProvider';\nimport { expandEmmetAbbreviation, wrapWithAbbreviation } from './abbreviationActions';\nimport { removeTag } from './removeTag';\nimport { updateTag } from './updateTag';\nimport { matchTag } from './matchTag';\nimport { balanceOut, balanceIn } from './balance';\nimport { splitJoinTag } from './splitJoinTag';\nimport { mergeLines } from './mergeLines';\nimport { toggleComment } from './toggleComment';\nimport { fetchEditPoint } from './editPoint';\nimport { fetchSelectItem } from './selectItem';\nimport { evaluateMathExpression } from './evaluateMathExpression';\nimport { incrementDecrement } from './incrementDecrement';\nimport { LANGUAGE_MODES, getMappingForIncludedLanguages, updateEmmetExtensionsPath, migrateEmmetExtensionsPath, getPathBaseName, getSyntaxes, getEmmetMode } from './util';\nimport { reflectCssValue } from './reflectCssValue';\nimport { addFileToParseCache, clearParseCache, removeFileFromParseCache } from './parseDocument';\n\nexport function activateEmmetExtension(context: vscode.ExtensionContext) {\n\tmigrateEmmetExtensionsPath();\n\trefreshCompletionProviders(context);\n\tupdateEmmetExtensionsPath();\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.wrapWithAbbreviation', (args) => {\n\t\twrapWithAbbreviation(args);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('emmet.expandAbbreviation', (args) => {\n\t\texpandEmmetAbbreviation(args);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.removeTag', () => {\n\t\treturn removeTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.updateTag', (inputTag) => {\n\t\tif (inputTag && typeof inputTag === 'string') {\n\t\t\treturn updateTag(inputTag);\n\t\t}\n\t\treturn updateTag(undefined);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.matchTag', () => {\n\t\tmatchTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.balanceOut', () => {\n\t\tbalanceOut();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.balanceIn', () => {\n\t\tbalanceIn();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.splitJoinTag', () => {\n\t\treturn splitJoinTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.mergeLines', () => {\n\t\tmergeLines();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.toggleComment', () => {\n\t\ttoggleComment();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.nextEditPoint', () => {\n\t\tfetchEditPoint('next');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.prevEditPoint', () => {\n\t\tfetchEditPoint('prev');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.selectNextItem', () => {\n\t\tfetchSelectItem('next');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.selectPrevItem', () => {\n\t\tfetchSelectItem('prev');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.evaluateMathExpression', () => {\n\t\tevaluateMathExpression();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByOneTenth', () => {\n\t\treturn incrementDecrement(0.1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByOne', () => {\n\t\treturn incrementDecrement(1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByTen', () => {\n\t\treturn incrementDecrement(10);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByOneTenth', () => {\n\t\treturn incrementDecrement(-0.1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByOne', () => {\n\t\treturn incrementDecrement(-1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByTen', () => {\n\t\treturn incrementDecrement(-10);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.reflectCSSValue', () => {\n\t\treturn reflectCssValue();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('workbench.action.showEmmetCommands', () => {\n\t\tvscode.commands.executeCommand('workbench.action.quickOpen', '>Emmet: ');\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => {\n\t\tif (e.affectsConfiguration('emmet.includeLanguages') || e.affectsConfiguration('emmet.useInlineCompletions')) {\n\t\t\trefreshCompletionProviders(context);\n\t\t}\n\t\tif (e.affectsConfiguration('emmet.extensionsPath')) {\n\t\t\tupdateEmmetExtensionsPath();\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidSaveTextDocument((e) => {\n\t\tconst basefileName: string = getPathBaseName(e.fileName);\n\t\tif (basefileName.startsWith('snippets') && basefileName.endsWith('.json')) {\n\t\t\tupdateEmmetExtensionsPath(true);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidOpenTextDocument((e) => {\n\t\tconst emmetMode = getEmmetMode(e.languageId, {}, []) ?? '';\n\t\tconst syntaxes = getSyntaxes();\n\t\tif (syntaxes.markup.includes(emmetMode) || syntaxes.stylesheet.includes(emmetMode)) {\n\t\t\taddFileToParseCache(e);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidCloseTextDocument((e) => {\n\t\tconst emmetMode = getEmmetMode(e.languageId, {}, []) ?? '';\n\t\tconst syntaxes = getSyntaxes();\n\t\tif (syntaxes.markup.includes(emmetMode) || syntaxes.stylesheet.includes(emmetMode)) {\n\t\t\tremoveFileFromParseCache(e);\n\t\t}\n\t}));\n}\n\n/**\n * Holds any registered completion providers by their language strings\n */\nconst languageMappingForCompletionProviders: Map<string, string> = new Map<string, string>();\nconst completionProviderDisposables: vscode.Disposable[] = [];\n\nfunction refreshCompletionProviders(_: vscode.ExtensionContext) {\n\tclearCompletionProviderInfo();\n\n\tconst completionProvider = new DefaultCompletionItemProvider();\n\tconst inlineCompletionProvider: vscode.InlineCompletionItemProvider = {\n\t\tasync provideInlineCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.InlineCompletionContext, token: vscode.CancellationToken) {\n\t\t\tconst items = await completionProvider.provideCompletionItems(document, position, token, { triggerCharacter: undefined, triggerKind: vscode.CompletionTriggerKind.Invoke });\n\t\t\tif (!items) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst item = items.items[0];\n\t\t\tif (!item) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst range = item.range as vscode.Range;\n\n\t\t\tif (document.getText(range) !== item.label) {\n\t\t\t\t// We only want to show an inline completion if we are really sure the user meant emmet.\n\t\t\t\t// If the user types `d`, we don't want to suggest `<div></div>`.\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tinsertText: item.insertText as any,\n\t\t\t\t\tfilterText: item.label as any,\n\t\t\t\t\trange\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t};\n\n\tconst useInlineCompletionProvider = vscode.workspace.getConfiguration('emmet').get<boolean>('useInlineCompletions');\n\tconst includedLanguages = getMappingForIncludedLanguages();\n\tObject.keys(includedLanguages).forEach(language => {\n\t\tif (languageMappingForCompletionProviders.has(language) && languageMappingForCompletionProviders.get(language) === includedLanguages[language]) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (useInlineCompletionProvider) {\n\t\t\tconst inlineCompletionsProvider = vscode.languages.registerInlineCompletionItemProvider({ language, scheme: '*' }, inlineCompletionProvider);\n\t\t\tcompletionProviderDisposables.push(inlineCompletionsProvider);\n\t\t}\n\n\t\tconst explicitProvider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]);\n\t\tcompletionProviderDisposables.push(explicitProvider);\n\n\t\tlanguageMappingForCompletionProviders.set(language, includedLanguages[language]);\n\t});\n\n\tObject.keys(LANGUAGE_MODES).forEach(language => {\n\t\tif (!languageMappingForCompletionProviders.has(language)) {\n\t\t\tif (useInlineCompletionProvider) {\n\t\t\t\tconst inlineCompletionsProvider = vscode.languages.registerInlineCompletionItemProvider({ language, scheme: '*' }, inlineCompletionProvider);\n\t\t\t\tcompletionProviderDisposables.push(inlineCompletionsProvider);\n\t\t\t}\n\n\t\t\tconst explicitProvider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[language]);\n\t\t\tcompletionProviderDisposables.push(explicitProvider);\n\n\t\t\tlanguageMappingForCompletionProviders.set(language, language);\n\t\t}\n\t});\n}\n\nfunction clearCompletionProviderInfo() {\n\tlanguageMappingForCompletionProviders.clear();\n\tlet disposable: vscode.Disposable | undefined;\n\twhile (disposable = completionProviderDisposables.pop()) {\n\t\tdisposable.dispose();\n\t}\n}\n\nexport function deactivate() {\n\tclearCompletionProviderInfo();\n\tclearParseCache();\n}\n"
  },
  {
    "path": "extensions/emmet/src/evaluateMathExpression.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport * as vscode from 'vscode';\nimport evaluate, { extract } from '@emmetio/math-expression';\n\nexport function evaluateMathExpression(): Thenable<boolean> {\n\tif (!vscode.window.activeTextEditor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn Promise.resolve(false);\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\treturn editor.edit(editBuilder => {\n\t\teditor.selections.forEach(selection => {\n\t\t\t// startpos always comes before endpos\n\t\t\tconst startpos = selection.isReversed ? selection.active : selection.anchor;\n\t\t\tconst endpos = selection.isReversed ? selection.anchor : selection.active;\n\t\t\tconst selectionText = editor.document.getText(new vscode.Range(startpos, endpos));\n\n\t\t\ttry {\n\t\t\t\tif (selectionText) {\n\t\t\t\t\t// respect selections\n\t\t\t\t\tconst result = String(evaluate(selectionText));\n\t\t\t\t\teditBuilder.replace(new vscode.Range(startpos, endpos), result);\n\t\t\t\t} else {\n\t\t\t\t\t// no selection made, extract expression from line\n\t\t\t\t\tconst lineToSelectionEnd = editor.document.getText(new vscode.Range(new vscode.Position(selection.end.line, 0), endpos));\n\t\t\t\t\tconst extractedIndices = extract(lineToSelectionEnd);\n\t\t\t\t\tif (!extractedIndices) {\n\t\t\t\t\t\tthrow new Error('Invalid extracted indices');\n\t\t\t\t\t}\n\t\t\t\t\tconst result = String(evaluate(lineToSelectionEnd.substr(extractedIndices[0], extractedIndices[1])));\n\t\t\t\t\tconst rangeToReplace = new vscode.Range(\n\t\t\t\t\t\tnew vscode.Position(selection.end.line, extractedIndices[0]),\n\t\t\t\t\t\tnew vscode.Position(selection.end.line, extractedIndices[1])\n\t\t\t\t\t);\n\t\t\t\t\teditBuilder.replace(rangeToReplace, result);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tvscode.window.showErrorMessage('Could not evaluate expression');\n\t\t\t\t// Ignore error since most likely it's because of non-math expression\n\t\t\t\tconsole.warn('Math evaluation error', err);\n\t\t\t}\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "extensions/emmet/src/imageSizeHelper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Based on @sergeche's work on the emmet plugin for atom\n\nimport * as path from 'path';\nimport * as http from 'http';\nimport * as https from 'https';\nimport { URL } from 'url';\nimport { imageSize } from 'image-size';\nimport { ISizeCalculationResult } from 'image-size/dist/types/interface';\n\nconst reUrl = /^https?:/;\nexport type ImageInfoWithScale = {\n\trealWidth: number;\n\trealHeight: number;\n\twidth: number;\n\theight: number;\n};\n\n/**\n * Get size of given image file. Supports files from local filesystem,\n * as well as URLs\n */\nexport function getImageSize(file: string): Promise<ImageInfoWithScale | undefined> {\n\tfile = file.replace(/^file:\\/\\//, '');\n\treturn reUrl.test(file) ? getImageSizeFromURL(file) : getImageSizeFromFile(file);\n}\n\n/**\n * Get image size from file on local file system\n */\nfunction getImageSizeFromFile(file: string): Promise<ImageInfoWithScale | undefined> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst isDataUrl = file.match(/^data:.+?;base64,/);\n\n\t\tif (isDataUrl) {\n\t\t\t// NB should use sync version of `sizeOf()` for buffers\n\t\t\ttry {\n\t\t\t\tconst data = Buffer.from(file.slice(isDataUrl[0].length), 'base64');\n\t\t\t\treturn resolve(sizeForFileName('', imageSize(data)));\n\t\t\t} catch (err) {\n\t\t\t\treturn reject(err);\n\t\t\t}\n\t\t}\n\n\t\timageSize(file, (err: Error | null, size?: ISizeCalculationResult) => {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tresolve(sizeForFileName(path.basename(file), size));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Get image size from given remove URL\n */\nfunction getImageSizeFromURL(urlStr: string): Promise<ImageInfoWithScale | undefined> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst url = new URL(urlStr);\n\t\tconst getTransport = url.protocol === 'https:' ? https.get : http.get;\n\n\t\tif (!url.pathname) {\n\t\t\treturn reject('Given url doesnt have pathname property');\n\t\t}\n\t\tconst urlPath: string = url.pathname;\n\n\t\tgetTransport(url, resp => {\n\t\t\tconst chunks: Buffer[] = [];\n\t\t\tlet bufSize = 0;\n\n\t\t\tconst trySize = (chunks: Buffer[]) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst size: ISizeCalculationResult = imageSize(Buffer.concat(chunks, bufSize));\n\t\t\t\t\tresp.removeListener('data', onData);\n\t\t\t\t\tresp.destroy(); // no need to read further\n\t\t\t\t\tresolve(sizeForFileName(path.basename(urlPath), size));\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// might not have enough data, skip error\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onData = (chunk: Buffer) => {\n\t\t\t\tbufSize += chunk.length;\n\t\t\t\tchunks.push(chunk);\n\t\t\t\ttrySize(chunks);\n\t\t\t};\n\n\t\t\tresp\n\t\t\t\t.on('data', onData)\n\t\t\t\t.on('end', () => trySize(chunks))\n\t\t\t\t.once('error', err => {\n\t\t\t\t\tresp.removeListener('data', onData);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t}).once('error', reject);\n\t});\n}\n\n/**\n * Returns size object for given file name. If file name contains `@Nx` token,\n * the final dimentions will be downscaled by N\n */\nfunction sizeForFileName(fileName: string, size?: ISizeCalculationResult): ImageInfoWithScale | undefined {\n\tconst m = fileName.match(/@(\\d+)x\\./);\n\tconst scale = m ? +m[1] : 1;\n\n\tif (!size || !size.width || !size.height) {\n\t\treturn;\n\t}\n\n\treturn {\n\t\trealWidth: size.width,\n\t\trealHeight: size.height,\n\t\twidth: Math.floor(size.width / scale),\n\t\theight: Math.floor(size.height / scale)\n\t};\n}\n"
  },
  {
    "path": "extensions/emmet/src/incrementDecrement.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport * as vscode from 'vscode';\n\nconst reNumber = /[0-9]/;\n\n/**\n * Incerement number under caret of given editor\n */\nexport function incrementDecrement(delta: number): Thenable<boolean> | undefined {\n\tif (!vscode.window.activeTextEditor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\n\treturn editor.edit(editBuilder => {\n\t\teditor.selections.forEach(selection => {\n\t\t\tconst rangeToReplace = locate(editor.document, selection.isReversed ? selection.anchor : selection.active);\n\t\t\tif (!rangeToReplace) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst text = editor.document.getText(rangeToReplace);\n\t\t\tif (isValidNumber(text)) {\n\t\t\t\teditBuilder.replace(rangeToReplace, update(text, delta));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Updates given number with `delta` and returns string formatted according\n * to original string format\n */\nexport function update(numString: string, delta: number): string {\n\tlet m: RegExpMatchArray | null;\n\tconst decimals = (m = numString.match(/\\.(\\d+)$/)) ? m[1].length : 1;\n\tlet output = String((parseFloat(numString) + delta).toFixed(decimals)).replace(/\\.0+$/, '');\n\n\tif (m = numString.match(/^\\-?(0\\d+)/)) {\n\t\t// padded number: preserve padding\n\t\toutput = output.replace(/^(\\-?)(\\d+)/, (_, minus, prefix) =>\n\t\t\tminus + '0'.repeat(Math.max(0, (m ? m[1].length : 0) - prefix.length)) + prefix);\n\t}\n\n\tif (/^\\-?\\./.test(numString)) {\n\t\t// omit integer part\n\t\toutput = output.replace(/^(\\-?)0+/, '$1');\n\t}\n\n\treturn output;\n}\n\n/**\n * Locates number from given position in the document\n *\n * @return Range of number or `undefined` if not found\n */\nexport function locate(document: vscode.TextDocument, pos: vscode.Position): vscode.Range | undefined {\n\n\tconst line = document.lineAt(pos.line).text;\n\tlet start = pos.character;\n\tlet end = pos.character;\n\tlet hadDot = false, hadMinus = false;\n\tlet ch;\n\n\twhile (start > 0) {\n\t\tch = line[--start];\n\t\tif (ch === '-') {\n\t\t\thadMinus = true;\n\t\t\tbreak;\n\t\t} else if (ch === '.' && !hadDot) {\n\t\t\thadDot = true;\n\t\t} else if (!reNumber.test(ch)) {\n\t\t\tstart++;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (line[end] === '-' && !hadMinus) {\n\t\tend++;\n\t}\n\n\twhile (end < line.length) {\n\t\tch = line[end++];\n\t\tif (ch === '.' && !hadDot && reNumber.test(line[end])) {\n\t\t\t// A dot must be followed by a number. Otherwise stop parsing\n\t\t\thadDot = true;\n\t\t} else if (!reNumber.test(ch)) {\n\t\t\tend--;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// ensure that found range contains valid number\n\tif (start !== end && isValidNumber(line.slice(start, end))) {\n\t\treturn new vscode.Range(pos.line, start, pos.line, end);\n\t}\n\n\treturn;\n}\n\n/**\n * Check if given string contains valid number\n */\nfunction isValidNumber(str: string): boolean {\n\treturn str ? !isNaN(parseFloat(str)) : false;\n}\n"
  },
  {
    "path": "extensions/emmet/src/locateFile.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Based on @sergeche's work on the emmet plugin for atom\n// TODO: Move to https://github.com/emmetio/file-utils\n\n\n\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nconst reAbsolutePosix = /^\\/+/;\nconst reAbsoluteWin32 = /^\\\\+/;\nconst reAbsolute = path.sep === '/' ? reAbsolutePosix : reAbsoluteWin32;\n\n/**\n * Locates given `filePath` on user's file system and returns absolute path to it.\n * This method expects either URL, or relative/absolute path to resource\n * @param basePath Base path to use if filePath is not absoulte\n * @param filePath File to locate.\n */\nexport function locateFile(base: string, filePath: string): Promise<string> {\n\tif (/^\\w+:/.test(filePath)) {\n\t\t// path with protocol, already absolute\n\t\treturn Promise.resolve(filePath);\n\t}\n\n\tfilePath = path.normalize(filePath);\n\n\treturn reAbsolute.test(filePath)\n\t\t? resolveAbsolute(base, filePath)\n\t\t: resolveRelative(base, filePath);\n}\n\n/**\n * Resolves relative file path\n */\nfunction resolveRelative(basePath: string, filePath: string): Promise<string> {\n\treturn tryFile(path.resolve(basePath, filePath));\n}\n\n/**\n * Resolves absolute file path agaist given editor: tries to find file in every\n * parent of editor's file\n */\nfunction resolveAbsolute(basePath: string, filePath: string): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tfilePath = filePath.replace(reAbsolute, '');\n\n\t\tconst next = (ctx: string) => {\n\t\t\ttryFile(path.resolve(ctx, filePath))\n\t\t\t\t.then(resolve, () => {\n\t\t\t\t\tconst dir = path.dirname(ctx);\n\t\t\t\t\tif (!dir || dir === ctx) {\n\t\t\t\t\t\treturn reject(`Unable to locate absolute file ${filePath}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tnext(dir);\n\t\t\t\t});\n\t\t};\n\n\t\tnext(basePath);\n\t});\n}\n\n/**\n * Check if given file exists and it's a file, not directory\n */\nfunction tryFile(file: string): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tfs.stat(file, (err, stat) => {\n\t\t\tif (err) {\n\t\t\t\treturn reject(err);\n\t\t\t}\n\n\t\t\tif (!stat.isFile()) {\n\t\t\t\treturn reject(new Error(`${file} is not a file`));\n\t\t\t}\n\n\t\t\tresolve(file);\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "extensions/emmet/src/matchTag.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, getHtmlFlatNode, offsetRangeToSelection } from './util';\nimport { getRootNode } from './parseDocument';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nexport function matchTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst updatedSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst updatedSelection = getUpdatedSelections(document, rootNode, selection.start);\n\t\tif (updatedSelection) {\n\t\t\tupdatedSelections.push(updatedSelection);\n\t\t}\n\t});\n\tif (updatedSelections.length) {\n\t\teditor.selections = updatedSelections;\n\t\teditor.revealRange(editor.selections[updatedSelections.length - 1]);\n\t}\n}\n\nfunction getUpdatedSelections(document: vscode.TextDocument, rootNode: HtmlFlatNode, position: vscode.Position): vscode.Selection | undefined {\n\tconst offset = document.offsetAt(position);\n\tconst currentNode = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\t// If no opening/closing tag or cursor is between open and close tag, then no-op\n\tif (!currentNode.open\n\t\t|| !currentNode.close\n\t\t|| (offset > currentNode.open.end && offset < currentNode.close.start)) {\n\t\treturn;\n\t}\n\n\t// Place cursor inside the close tag if cursor is inside the open tag, else place it inside the open tag\n\tconst finalOffset = (offset <= currentNode.open.end) ? currentNode.close.start + 2 : currentNode.start + 1;\n\treturn offsetRangeToSelection(document, finalOffset, finalOffset);\n}\n"
  },
  {
    "path": "extensions/emmet/src/mergeLines.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node } from 'EmmetFlatNode';\nimport { getFlatNode, offsetRangeToVsRange, validate } from './util';\nimport { getRootNode } from './parseDocument';\n\nexport function mergeLines() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\n\tconst rootNode = getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst textEdit = getRangesToReplace(editor.document, selection, rootNode);\n\t\t\tif (textEdit) {\n\t\t\t\teditBuilder.replace(textEdit.range, textEdit.newText);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction getRangesToReplace(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): vscode.TextEdit | undefined {\n\tlet startNodeToUpdate: Node | undefined;\n\tlet endNodeToUpdate: Node | undefined;\n\n\tconst selectionStart = document.offsetAt(selection.start);\n\tconst selectionEnd = document.offsetAt(selection.end);\n\tif (selection.isEmpty) {\n\t\tstartNodeToUpdate = endNodeToUpdate = getFlatNode(rootNode, selectionStart, true);\n\t} else {\n\t\tstartNodeToUpdate = getFlatNode(rootNode, selectionStart, true);\n\t\tendNodeToUpdate = getFlatNode(rootNode, selectionEnd, true);\n\t}\n\n\tif (!startNodeToUpdate || !endNodeToUpdate) {\n\t\treturn;\n\t}\n\n\tconst startPos = document.positionAt(startNodeToUpdate.start);\n\tconst startLine = startPos.line;\n\tconst startChar = startPos.character;\n\tconst endPos = document.positionAt(endNodeToUpdate.end);\n\tconst endLine = endPos.line;\n\tif (startLine === endLine) {\n\t\treturn;\n\t}\n\n\tconst rangeToReplace = offsetRangeToVsRange(document, startNodeToUpdate.start, endNodeToUpdate.end);\n\tlet textToReplaceWith = document.lineAt(startLine).text.substr(startChar);\n\tfor (let i = startLine + 1; i <= endLine; i++) {\n\t\ttextToReplaceWith += document.lineAt(i).text.trim();\n\t}\n\n\treturn new vscode.TextEdit(rangeToReplace, textToReplaceWith);\n}\n"
  },
  {
    "path": "extensions/emmet/src/node/emmetNodeMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { homedir } from 'os';\n\nimport { activateEmmetExtension } from '../emmetCommon';\nimport { setHomeDir } from '../util';\n\nexport function activate(context: vscode.ExtensionContext) {\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.updateImageSize', () => {\n\t\treturn import('../updateImageSize').then(uis => uis.updateImageSize());\n\t}));\n\n\tsetHomeDir(vscode.Uri.file(homedir()));\n\tactivateEmmetExtension(context);\n}\n"
  },
  {
    "path": "extensions/emmet/src/parseDocument.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument } from 'vscode';\nimport { Node as FlatNode } from 'EmmetFlatNode';\nimport parse from '@emmetio/html-matcher';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { isStyleSheet } from './util';\n\ntype Pair<K, V> = {\n\tkey: K;\n\tvalue: V;\n};\n\n// Map(filename, Pair(fileVersion, rootNodeOfParsedContent))\nconst _parseCache = new Map<string, Pair<number, FlatNode> | undefined>();\n\nexport function getRootNode(document: TextDocument, useCache: boolean): FlatNode {\n\tconst key = document.uri.toString();\n\tconst result = _parseCache.get(key);\n\tconst documentVersion = document.version;\n\tif (useCache && result) {\n\t\tif (documentVersion === result.key) {\n\t\t\treturn result.value;\n\t\t}\n\t}\n\n\tconst parseContent = isStyleSheet(document.languageId) ? parseStylesheet : parse;\n\tconst rootNode = parseContent(document.getText());\n\tif (useCache) {\n\t\t_parseCache.set(key, { key: documentVersion, value: rootNode });\n\t}\n\treturn rootNode;\n}\n\nexport function addFileToParseCache(document: TextDocument) {\n\tconst filename = document.uri.toString();\n\t_parseCache.set(filename, undefined);\n}\n\nexport function removeFileFromParseCache(document: TextDocument) {\n\tconst filename = document.uri.toString();\n\t_parseCache.delete(filename);\n}\n\nexport function clearParseCache() {\n\t_parseCache.clear();\n}\n"
  },
  {
    "path": "extensions/emmet/src/reflectCssValue.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { window, TextEditor } from 'vscode';\nimport { getCssPropertyFromRule, getCssPropertyFromDocument, offsetRangeToVsRange } from './util';\nimport { Property, Rule } from 'EmmetFlatNode';\n\nconst vendorPrefixes = ['-webkit-', '-moz-', '-ms-', '-o-', ''];\n\nexport function reflectCssValue(): Thenable<boolean> | undefined {\n\tconst editor = window.activeTextEditor;\n\tif (!editor) {\n\t\twindow.showInformationMessage('No editor is active.');\n\t\treturn;\n\t}\n\n\tconst node = getCssPropertyFromDocument(editor, editor.selection.active);\n\tif (!node) {\n\t\treturn;\n\t}\n\n\treturn updateCSSNode(editor, node);\n}\n\nfunction updateCSSNode(editor: TextEditor, property: Property): Thenable<boolean> {\n\tconst rule: Rule = property.parent;\n\tlet currentPrefix = '';\n\n\t// Find vendor prefix of given property node\n\tfor (const prefix of vendorPrefixes) {\n\t\tif (property.name.startsWith(prefix)) {\n\t\t\tcurrentPrefix = prefix;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst propertyName = property.name.substr(currentPrefix.length);\n\tconst propertyValue = property.value;\n\n\treturn editor.edit(builder => {\n\t\t// Find properties with vendor prefixes, update each\n\t\tvendorPrefixes.forEach(prefix => {\n\t\t\tif (prefix === currentPrefix) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst vendorProperty = getCssPropertyFromRule(rule, prefix + propertyName);\n\t\t\tif (vendorProperty) {\n\t\t\t\tconst rangeToReplace = offsetRangeToVsRange(editor.document, vendorProperty.valueToken.start, vendorProperty.valueToken.end);\n\t\t\t\tbuilder.replace(rangeToReplace, propertyValue);\n\t\t\t}\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "extensions/emmet/src/removeTag.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getRootNode } from './parseDocument';\nimport { validate, getHtmlFlatNode, offsetRangeToVsRange } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nexport function removeTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst finalRangesToRemove = Array.from(editor.selections).reverse()\n\t\t.reduce<vscode.Range[]>((prev, selection) =>\n\t\t\tprev.concat(getRangesToRemove(editor.document, rootNode, selection)), []);\n\n\treturn editor.edit(editBuilder => {\n\t\tfinalRangesToRemove.forEach(range => {\n\t\t\teditBuilder.delete(range);\n\t\t});\n\t});\n}\n\n/**\n * Calculates the ranges to remove, along with what to replace those ranges with.\n * It finds the node to remove based on the selection's start position\n * and then removes that node, reindenting the content in between.\n */\nfunction getRangesToRemove(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Range[] {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToUpdate = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!nodeToUpdate) {\n\t\treturn [];\n\t}\n\n\tlet openTagRange: vscode.Range | undefined;\n\tif (nodeToUpdate.open) {\n\t\topenTagRange = offsetRangeToVsRange(document, nodeToUpdate.open.start, nodeToUpdate.open.end);\n\t}\n\tlet closeTagRange: vscode.Range | undefined;\n\tif (nodeToUpdate.close) {\n\t\tcloseTagRange = offsetRangeToVsRange(document, nodeToUpdate.close.start, nodeToUpdate.close.end);\n\t}\n\n\tif (openTagRange && closeTagRange) {\n\t\tconst innerCombinedRange = new vscode.Range(\n\t\t\topenTagRange.end.line,\n\t\t\topenTagRange.end.character,\n\t\t\tcloseTagRange.start.line,\n\t\t\tcloseTagRange.start.character);\n\t\tconst outerCombinedRange = new vscode.Range(\n\t\t\topenTagRange.start.line,\n\t\t\topenTagRange.start.character,\n\t\t\tcloseTagRange.end.line,\n\t\t\tcloseTagRange.end.character);\n\t\t// Special case: there is only whitespace in between.\n\t\tif (document.getText(innerCombinedRange).trim() === '' && nodeToUpdate.name !== 'pre') {\n\t\t\treturn [outerCombinedRange];\n\t\t}\n\t}\n\n\tconst rangesToRemove = [];\n\tif (openTagRange) {\n\t\trangesToRemove.push(openTagRange);\n\t\tif (closeTagRange) {\n\t\t\tconst indentAmountToRemove = calculateIndentAmountToRemove(document, openTagRange, closeTagRange);\n\t\t\tlet firstInnerNonEmptyLine: number | undefined;\n\t\t\tlet lastInnerNonEmptyLine: number | undefined;\n\t\t\tfor (let i = openTagRange.start.line + 1; i < closeTagRange.start.line; i++) {\n\t\t\t\tif (!document.lineAt(i).isEmptyOrWhitespace) {\n\t\t\t\t\trangesToRemove.push(new vscode.Range(i, 0, i, indentAmountToRemove));\n\t\t\t\t\tif (firstInnerNonEmptyLine === undefined) {\n\t\t\t\t\t\t// We found the first non-empty inner line.\n\t\t\t\t\t\tfirstInnerNonEmptyLine = i;\n\t\t\t\t\t}\n\t\t\t\t\tlastInnerNonEmptyLine = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the entire last line + empty lines preceding it\n\t\t\t// if it is just the tag, otherwise remove just the tag.\n\t\t\tif (entireLineIsTag(document, closeTagRange) && lastInnerNonEmptyLine) {\n\t\t\t\trangesToRemove.push(new vscode.Range(\n\t\t\t\t\tlastInnerNonEmptyLine,\n\t\t\t\t\tdocument.lineAt(lastInnerNonEmptyLine).range.end.character,\n\t\t\t\t\tcloseTagRange.end.line,\n\t\t\t\t\tcloseTagRange.end.character));\n\t\t\t} else {\n\t\t\t\trangesToRemove.push(closeTagRange);\n\t\t\t}\n\n\t\t\t// Remove the entire first line + empty lines proceding it\n\t\t\t// if it is just the tag, otherwise keep on removing just the tag.\n\t\t\tif (entireLineIsTag(document, openTagRange) && firstInnerNonEmptyLine) {\n\t\t\t\trangesToRemove[1] = new vscode.Range(\n\t\t\t\t\topenTagRange.start.line,\n\t\t\t\t\topenTagRange.start.character,\n\t\t\t\t\tfirstInnerNonEmptyLine,\n\t\t\t\t\tdocument.lineAt(firstInnerNonEmptyLine).firstNonWhitespaceCharacterIndex);\n\t\t\t\trangesToRemove.shift();\n\t\t\t}\n\t\t}\n\t}\n\treturn rangesToRemove;\n}\n\nfunction entireLineIsTag(document: vscode.TextDocument, range: vscode.Range): boolean {\n\tif (range.start.line === range.end.line) {\n\t\tconst lineText = document.lineAt(range.start).text;\n\t\tconst tagText = document.getText(range);\n\t\tif (lineText.trim() === tagText) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Calculates the amount of indent to remove for getRangesToRemove.\n */\nfunction calculateIndentAmountToRemove(document: vscode.TextDocument, openRange: vscode.Range, closeRange: vscode.Range): number {\n\tconst startLine = openRange.start.line;\n\tconst endLine = closeRange.start.line;\n\n\tconst startLineIndent = document.lineAt(startLine).firstNonWhitespaceCharacterIndex;\n\tconst endLineIndent = document.lineAt(endLine).firstNonWhitespaceCharacterIndex;\n\n\tlet contentIndent: number | undefined;\n\tfor (let i = startLine + 1; i < endLine; i++) {\n\t\tconst line = document.lineAt(i);\n\t\tif (!line.isEmptyOrWhitespace) {\n\t\t\tconst lineIndent = line.firstNonWhitespaceCharacterIndex;\n\t\t\tcontentIndent = !contentIndent ? lineIndent : Math.min(contentIndent, lineIndent);\n\t\t}\n\t}\n\n\tlet indentAmount = 0;\n\tif (contentIndent) {\n\t\tif (contentIndent < startLineIndent || contentIndent < endLineIndent) {\n\t\t\tindentAmount = 0;\n\t\t}\n\t\telse {\n\t\t\tindentAmount = Math.min(contentIndent - startLineIndent, contentIndent - endLineIndent);\n\t\t}\n\t}\n\treturn indentAmount;\n}\n"
  },
  {
    "path": "extensions/emmet/src/selectItem.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, isStyleSheet } from './util';\nimport { nextItemHTML, prevItemHTML } from './selectItemHTML';\nimport { nextItemStylesheet, prevItemStylesheet } from './selectItemStylesheet';\nimport { HtmlNode, CssNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\nexport function fetchSelectItem(direction: string): void {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst newSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\t\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\n\t\tlet updatedSelection;\n\t\tif (isStyleSheet(editor.document.languageId)) {\n\t\t\tupdatedSelection = direction === 'next' ?\n\t\t\t\tnextItemStylesheet(document, selectionStart, selectionEnd, <CssNode>rootNode) :\n\t\t\t\tprevItemStylesheet(document, selectionStart, selectionEnd, <CssNode>rootNode);\n\t\t} else {\n\t\t\tupdatedSelection = direction === 'next' ?\n\t\t\t\tnextItemHTML(document, selectionStart, selectionEnd, <HtmlNode>rootNode) :\n\t\t\t\tprevItemHTML(document, selectionStart, selectionEnd, <HtmlNode>rootNode);\n\t\t}\n\t\tnewSelections.push(updatedSelection ? updatedSelection : selection);\n\t});\n\teditor.selections = newSelections;\n\teditor.revealRange(editor.selections[editor.selections.length - 1]);\n}\n"
  },
  {
    "path": "extensions/emmet/src/selectItemHTML.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getDeepestFlatNode, findNextWord, findPrevWord, getHtmlFlatNode, offsetRangeToSelection } from './util';\nimport { HtmlNode } from 'EmmetFlatNode';\n\nexport function nextItemHTML(document: vscode.TextDocument, selectionStart: vscode.Position, selectionEnd: vscode.Position, rootNode: HtmlNode): vscode.Selection | undefined {\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tlet currentNode = getHtmlFlatNode(document.getText(), rootNode, selectionEndOffset, false);\n\tlet nextNode: HtmlNode | undefined = undefined;\n\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\tif (currentNode.type !== 'comment') {\n\t\t// If cursor is in the tag name, select tag\n\t\tif (currentNode.open &&\n\t\t\tselectionEndOffset <= currentNode.open.start + currentNode.name.length) {\n\t\t\treturn getSelectionFromNode(document, currentNode);\n\t\t}\n\n\t\t// If cursor is in the open tag, look for attributes\n\t\tif (currentNode.open &&\n\t\t\tselectionEndOffset < currentNode.open.end) {\n\t\t\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\t\t\tconst attrSelection = getNextAttribute(document, selectionStartOffset, selectionEndOffset, currentNode);\n\t\t\tif (attrSelection) {\n\t\t\t\treturn attrSelection;\n\t\t\t}\n\t\t}\n\n\t\t// Get the first child of current node which is right after the cursor and is not a comment\n\t\tnextNode = currentNode.firstChild;\n\t\twhile (nextNode && (selectionEndOffset >= nextNode.end || nextNode.type === 'comment')) {\n\t\t\tnextNode = nextNode.nextSibling;\n\t\t}\n\t}\n\n\t// Get next sibling of current node which is not a comment. If none is found try the same on the parent\n\twhile (!nextNode && currentNode) {\n\t\tif (currentNode.nextSibling) {\n\t\t\tif (currentNode.nextSibling.type !== 'comment') {\n\t\t\t\tnextNode = currentNode.nextSibling;\n\t\t\t} else {\n\t\t\t\tcurrentNode = currentNode.nextSibling;\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentNode = currentNode.parent;\n\t\t}\n\t}\n\n\treturn nextNode && getSelectionFromNode(document, nextNode);\n}\n\nexport function prevItemHTML(document: vscode.TextDocument, selectionStart: vscode.Position, selectionEnd: vscode.Position, rootNode: HtmlNode): vscode.Selection | undefined {\n\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\tlet currentNode = getHtmlFlatNode(document.getText(), rootNode, selectionStartOffset, false);\n\tlet prevNode: HtmlNode | undefined = undefined;\n\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tif (currentNode.open &&\n\t\tcurrentNode.type !== 'comment' &&\n\t\tselectionStartOffset - 1 > currentNode.open.start) {\n\t\tif (selectionStartOffset < currentNode.open.end || !currentNode.firstChild || selectionEndOffset <= currentNode.firstChild.start) {\n\t\t\tprevNode = currentNode;\n\t\t} else {\n\t\t\t// Select the child that appears just before the cursor and is not a comment\n\t\t\tprevNode = currentNode.firstChild;\n\t\t\tlet oldOption: HtmlNode | undefined = undefined;\n\t\t\twhile (prevNode.nextSibling && selectionStartOffset >= prevNode.nextSibling.end) {\n\t\t\t\tif (prevNode && prevNode.type !== 'comment') {\n\t\t\t\t\toldOption = prevNode;\n\t\t\t\t}\n\t\t\t\tprevNode = prevNode.nextSibling;\n\t\t\t}\n\n\t\t\tprevNode = <HtmlNode>getDeepestFlatNode((prevNode && prevNode.type !== 'comment') ? prevNode : oldOption);\n\t\t}\n\t}\n\n\t// Select previous sibling which is not a comment. If none found, then select parent\n\twhile (!prevNode && currentNode) {\n\t\tif (currentNode.previousSibling) {\n\t\t\tif (currentNode.previousSibling.type !== 'comment') {\n\t\t\t\tprevNode = <HtmlNode>getDeepestFlatNode(currentNode.previousSibling);\n\t\t\t} else {\n\t\t\t\tcurrentNode = currentNode.previousSibling;\n\t\t\t}\n\t\t} else {\n\t\t\tprevNode = currentNode.parent;\n\t\t}\n\n\t}\n\n\tif (!prevNode) {\n\t\treturn undefined;\n\t}\n\n\tconst attrSelection = getPrevAttribute(document, selectionStartOffset, selectionEndOffset, prevNode);\n\treturn attrSelection ? attrSelection : getSelectionFromNode(document, prevNode);\n}\n\nfunction getSelectionFromNode(document: vscode.TextDocument, node: HtmlNode): vscode.Selection | undefined {\n\tif (node && node.open) {\n\t\tconst selectionStart = node.open.start + 1;\n\t\tconst selectionEnd = selectionStart + node.name.length;\n\t\treturn offsetRangeToSelection(document, selectionStart, selectionEnd);\n\t}\n\treturn undefined;\n}\n\nfunction getNextAttribute(document: vscode.TextDocument, selectionStart: number, selectionEnd: number, node: HtmlNode): vscode.Selection | undefined {\n\tif (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {\n\t\treturn;\n\t}\n\n\tfor (const attr of node.attributes) {\n\t\tif (selectionEnd < attr.start) {\n\t\t\t// select full attr\n\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t}\n\n\t\tif (!attr.value || attr.value.start === attr.value.end) {\n\t\t\t// No attr value to select\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ((selectionStart === attr.start && selectionEnd === attr.end) ||\n\t\t\tselectionEnd < attr.value.start) {\n\t\t\t// cursor is in attr name,  so select full attr value\n\t\t\treturn offsetRangeToSelection(document, attr.value.start, attr.value.end);\n\t\t}\n\n\t\t// Fetch the next word in the attr value\n\t\tif (!attr.value.toString().includes(' ')) {\n\t\t\t// attr value does not have space, so no next word to find\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet pos: number | undefined = undefined;\n\t\tif (selectionStart === attr.value.start && selectionEnd === attr.value.end) {\n\t\t\tpos = -1;\n\t\t}\n\t\tif (pos === undefined && selectionEnd < attr.end) {\n\t\t\tconst selectionEndCharacter = document.positionAt(selectionEnd).character;\n\t\t\tconst attrValueStartCharacter = document.positionAt(attr.value.start).character;\n\t\t\tpos = selectionEndCharacter - attrValueStartCharacter - 1;\n\t\t}\n\n\t\tif (pos !== undefined) {\n\t\t\tconst [newSelectionStartOffset, newSelectionEndOffset] = findNextWord(attr.value.toString(), pos);\n\t\t\tif (newSelectionStartOffset === undefined || newSelectionEndOffset === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {\n\t\t\t\tconst newSelectionStart = attr.value.start + newSelectionStartOffset;\n\t\t\t\tconst newSelectionEnd = attr.value.start + newSelectionEndOffset;\n\t\t\t\treturn offsetRangeToSelection(document, newSelectionStart, newSelectionEnd);\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn;\n}\n\nfunction getPrevAttribute(document: vscode.TextDocument, selectionStart: number, selectionEnd: number, node: HtmlNode): vscode.Selection | undefined {\n\tif (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {\n\t\treturn;\n\t}\n\n\tfor (let i = node.attributes.length - 1; i >= 0; i--) {\n\t\tconst attr = node.attributes[i];\n\t\tif (selectionStart <= attr.start) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!attr.value || attr.value.start === attr.value.end || selectionStart < attr.value.start) {\n\t\t\t// select full attr\n\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t}\n\n\t\tif (selectionStart === attr.value.start) {\n\t\t\tif (selectionEnd >= attr.value.end) {\n\t\t\t\t// select full attr\n\t\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t\t}\n\t\t\t// select attr value\n\t\t\treturn offsetRangeToSelection(document, attr.value.start, attr.value.end);\n\t\t}\n\n\t\t// Fetch the prev word in the attr value\n\t\tconst selectionStartCharacter = document.positionAt(selectionStart).character;\n\t\tconst attrValueStartCharacter = document.positionAt(attr.value.start).character;\n\t\tconst pos = selectionStart > attr.value.end ? attr.value.toString().length :\n\t\t\tselectionStartCharacter - attrValueStartCharacter;\n\t\tconst [newSelectionStartOffset, newSelectionEndOffset] = findPrevWord(attr.value.toString(), pos);\n\t\tif (newSelectionStartOffset === undefined || newSelectionEndOffset === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tif (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {\n\t\t\tconst newSelectionStart = attr.value.start + newSelectionStartOffset;\n\t\t\tconst newSelectionEnd = attr.value.start + newSelectionEndOffset;\n\t\t\treturn offsetRangeToSelection(document, newSelectionStart, newSelectionEnd);\n\t\t}\n\t}\n\n\treturn;\n}\n"
  },
  {
    "path": "extensions/emmet/src/selectItemStylesheet.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getDeepestFlatNode, findNextWord, findPrevWord, getFlatNode, offsetRangeToSelection } from './util';\nimport { Node, CssNode, Rule, Property } from 'EmmetFlatNode';\n\nexport function nextItemStylesheet(document: vscode.TextDocument, startPosition: vscode.Position, endPosition: vscode.Position, rootNode: Node): vscode.Selection | undefined {\n\tconst startOffset = document.offsetAt(startPosition);\n\tconst endOffset = document.offsetAt(endPosition);\n\tlet currentNode: CssNode | undefined = <CssNode>getFlatNode(rootNode, endOffset, true);\n\tif (!currentNode) {\n\t\tcurrentNode = <CssNode>rootNode;\n\t}\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\t// Full property is selected, so select full property value next\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset === currentNode.start &&\n\t\tendOffset === currentNode.end) {\n\t\treturn getSelectionFromProperty(document, currentNode, startOffset, endOffset, true, 'next');\n\t}\n\n\t// Part or whole of propertyValue is selected, so select the next word in the propertyValue\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset >= (<Property>currentNode).valueToken.start &&\n\t\tendOffset <= (<Property>currentNode).valueToken.end) {\n\t\tconst singlePropertyValue = getSelectionFromProperty(document, currentNode, startOffset, endOffset, false, 'next');\n\t\tif (singlePropertyValue) {\n\t\t\treturn singlePropertyValue;\n\t\t}\n\t}\n\n\t// Cursor is in the selector or in a property\n\tif ((currentNode.type === 'rule' && endOffset < (<Rule>currentNode).selectorToken.end)\n\t\t|| (currentNode.type === 'property' && endOffset < (<Property>currentNode).valueToken.end)) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Get the first child of current node which is right after the cursor\n\tlet nextNode = currentNode.firstChild;\n\twhile (nextNode && endOffset >= nextNode.end) {\n\t\tnextNode = nextNode.nextSibling;\n\t}\n\n\t// Get next sibling of current node or the parent\n\twhile (!nextNode && currentNode) {\n\t\tnextNode = currentNode.nextSibling;\n\t\tcurrentNode = currentNode.parent;\n\t}\n\n\treturn nextNode ? getSelectionFromNode(document, nextNode) : undefined;\n}\n\nexport function prevItemStylesheet(document: vscode.TextDocument, startPosition: vscode.Position, endPosition: vscode.Position, rootNode: CssNode): vscode.Selection | undefined {\n\tconst startOffset = document.offsetAt(startPosition);\n\tconst endOffset = document.offsetAt(endPosition);\n\tlet currentNode = <CssNode>getFlatNode(rootNode, startOffset, false);\n\tif (!currentNode) {\n\t\tcurrentNode = rootNode;\n\t}\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\t// Full property value is selected, so select the whole property next\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset === (<Property>currentNode).valueToken.start &&\n\t\tendOffset === (<Property>currentNode).valueToken.end) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Part of propertyValue is selected, so select the prev word in the propertyValue\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset >= (<Property>currentNode).valueToken.start &&\n\t\tendOffset <= (<Property>currentNode).valueToken.end) {\n\t\tconst singlePropertyValue = getSelectionFromProperty(document, currentNode, startOffset, endOffset, false, 'prev');\n\t\tif (singlePropertyValue) {\n\t\t\treturn singlePropertyValue;\n\t\t}\n\t}\n\n\tif (currentNode.type === 'property' || !currentNode.firstChild ||\n\t\t(currentNode.type === 'rule' && startOffset <= currentNode.firstChild.start)) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Select the child that appears just before the cursor\n\tlet prevNode: CssNode | undefined = currentNode.firstChild;\n\twhile (prevNode.nextSibling && startOffset >= prevNode.nextSibling.end) {\n\t\tprevNode = prevNode.nextSibling;\n\t}\n\tprevNode = <CssNode | undefined>getDeepestFlatNode(prevNode);\n\n\treturn getSelectionFromProperty(document, prevNode, startOffset, endOffset, false, 'prev');\n}\n\n\nfunction getSelectionFromNode(document: vscode.TextDocument, node: Node | undefined): vscode.Selection | undefined {\n\tif (!node) {\n\t\treturn;\n\t}\n\n\tconst nodeToSelect = node.type === 'rule' ? (<Rule>node).selectorToken : node;\n\treturn offsetRangeToSelection(document, nodeToSelect.start, nodeToSelect.end);\n}\n\n\nfunction getSelectionFromProperty(document: vscode.TextDocument, node: Node | undefined, selectionStart: number, selectionEnd: number, selectFullValue: boolean, direction: string): vscode.Selection | undefined {\n\tif (!node || node.type !== 'property') {\n\t\treturn;\n\t}\n\tconst propertyNode = <Property>node;\n\n\tconst propertyValue = propertyNode.valueToken.stream.substring(propertyNode.valueToken.start, propertyNode.valueToken.end);\n\tselectFullValue = selectFullValue ||\n\t\t(direction === 'prev' && selectionStart === propertyNode.valueToken.start && selectionEnd < propertyNode.valueToken.end);\n\n\tif (selectFullValue) {\n\t\treturn offsetRangeToSelection(document, propertyNode.valueToken.start, propertyNode.valueToken.end);\n\t}\n\n\tlet pos: number = -1;\n\tif (direction === 'prev') {\n\t\tif (selectionStart === propertyNode.valueToken.start) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionStartChar = document.positionAt(selectionStart).character;\n\t\tconst tokenStartChar = document.positionAt(propertyNode.valueToken.start).character;\n\t\tpos = selectionStart > propertyNode.valueToken.end ? propertyValue.length :\n\t\t\tselectionStartChar - tokenStartChar;\n\t} else if (direction === 'next') {\n\t\tif (selectionEnd === propertyNode.valueToken.end &&\n\t\t\t(selectionStart > propertyNode.valueToken.start || !propertyValue.includes(' '))) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionEndChar = document.positionAt(selectionEnd).character;\n\t\tconst tokenStartChar = document.positionAt(propertyNode.valueToken.start).character;\n\t\tpos = selectionEnd === propertyNode.valueToken.end ? -1 :\n\t\t\tselectionEndChar - tokenStartChar - 1;\n\t}\n\n\n\tconst [newSelectionStartOffset, newSelectionEndOffset] = direction === 'prev' ? findPrevWord(propertyValue, pos) : findNextWord(propertyValue, pos);\n\tif (!newSelectionStartOffset && !newSelectionEndOffset) {\n\t\treturn;\n\t}\n\n\tconst tokenStart = document.positionAt(propertyNode.valueToken.start);\n\tconst newSelectionStart = tokenStart.translate(0, newSelectionStartOffset);\n\tconst newSelectionEnd = tokenStart.translate(0, newSelectionEndOffset);\n\n\treturn new vscode.Selection(newSelectionStart, newSelectionEnd);\n}\n\n\n\n"
  },
  {
    "path": "extensions/emmet/src/splitJoinTag.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, getEmmetMode, getEmmetConfiguration, getHtmlFlatNode, offsetRangeToVsRange } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\nexport function splitJoinTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst documentText = document.getText();\n\t\t\tconst offset = document.offsetAt(selection.start);\n\t\t\tconst nodeToUpdate = getHtmlFlatNode(documentText, rootNode, offset, true);\n\t\t\tif (nodeToUpdate) {\n\t\t\t\tconst textEdit = getRangesToReplace(document, nodeToUpdate);\n\t\t\t\teditBuilder.replace(textEdit.range, textEdit.newText);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction getRangesToReplace(document: vscode.TextDocument, nodeToUpdate: HtmlFlatNode): vscode.TextEdit {\n\tlet rangeToReplace: vscode.Range;\n\tlet textToReplaceWith: string;\n\n\tif (!nodeToUpdate.open || !nodeToUpdate.close) {\n\t\t// Split Tag\n\t\tconst nodeText = document.getText().substring(nodeToUpdate.start, nodeToUpdate.end);\n\t\tconst m = nodeText.match(/(\\s*\\/)?>$/);\n\t\tconst end = nodeToUpdate.end;\n\t\tconst start = m ? end - m[0].length : end;\n\n\t\trangeToReplace = offsetRangeToVsRange(document, start, end);\n\t\ttextToReplaceWith = `></${nodeToUpdate.name}>`;\n\t} else {\n\t\t// Join Tag\n\t\tconst start = nodeToUpdate.open.end - 1;\n\t\tconst end = nodeToUpdate.end;\n\t\trangeToReplace = offsetRangeToVsRange(document, start, end);\n\t\ttextToReplaceWith = '/>';\n\n\t\tconst emmetMode = getEmmetMode(document.languageId, {}, []) ?? '';\n\t\tconst emmetConfig = getEmmetConfiguration(emmetMode);\n\t\tif (emmetMode && emmetConfig.syntaxProfiles[emmetMode] &&\n\t\t\t(emmetConfig.syntaxProfiles[emmetMode]['selfClosingStyle'] === 'xhtml' || emmetConfig.syntaxProfiles[emmetMode]['self_closing_tag'] === 'xhtml')) {\n\t\t\ttextToReplaceWith = ' ' + textToReplaceWith;\n\t\t}\n\t}\n\n\treturn new vscode.TextEdit(rangeToReplace, textToReplaceWith);\n}\n"
  },
  {
    "path": "extensions/emmet/src/test/abbreviationAction.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection, workspace, CancellationTokenSource, CompletionTriggerKind, ConfigurationTarget, CompletionContext } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { expandEmmetAbbreviation } from '../abbreviationActions';\nimport { DefaultCompletionItemProvider } from '../defaultCompletionProvider';\n\nconst completionProvider = new DefaultCompletionItemProvider();\n\nconst htmlContents = `\n<body class=\"header\">\n\t<ul class=\"nav main\">\n\t\t<li class=\"item1\">img</li>\n\t\t<li class=\"item2\">hithere</li>\n\t\tul>li\n\t\tul>li*2\n\t\tul>li.item$*2\n\t\tul>li.item$@44*2\n\t\t<div i\n\t</ul>\n\t<style>\n\t\t.boo {\n\t\t\tdisplay: dn; m10\n\t\t}\n\t</style>\n\t<span></span>\n\t(ul>li.item$)*2\n\t(ul>li.item$)*2+span\n\t(div>dl>(dt+dd)*2)\n\t<script type=\"text/html\">\n\t\tspan.hello\n\t</script>\n\t<script type=\"text/javascript\">\n\t\tspan.bye\n\t</script>\n</body>\n`;\n\nconst invokeCompletionContext: CompletionContext = {\n\ttriggerKind: CompletionTriggerKind.Invoke,\n\ttriggerCharacter: undefined,\n};\n\nsuite('Tests for Expand Abbreviations (HTML)', () => {\n\tteardown(closeAllEditors);\n\n\ttest('Expand snippets (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(3, 23, 3, 23), 'img', '<img src=\\\"\\\" alt=\\\"\\\">');\n\t});\n\n\ttest('Expand snippets in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(3, 23, 3, 23), 'img', '<img src=\\\"\\\" alt=\\\"\\\">');\n\t});\n\n\ttest('Expand snippets when no parent node (HTML)', () => {\n\t\treturn withRandomFileEditor('img', 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 3, 0, 3);\n\t\t\tawait expandEmmetAbbreviation(null);\n\t\t\tassert.strictEqual(editor.document.getText(), '<img src=\\\"\\\" alt=\\\"\\\">');\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand snippets when no parent node in completion list (HTML)', () => {\n\t\treturn withRandomFileEditor('img', 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 3, 0, 3);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tif (!completionPromise) {\n\t\t\t\tassert.strictEqual(!completionPromise, false, `Got unexpected undefined instead of a completion promise`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tconst completionList = await completionPromise;\n\t\t\tassert.strictEqual(completionList && completionList.items && completionList.items.length > 0, true);\n\t\t\tif (completionList) {\n\t\t\t\tassert.strictEqual(completionList.items[0].label, 'img');\n\t\t\t\tassert.strictEqual(((<string>completionList.items[0].documentation) || '').replace(/\\|/g, ''), '<img src=\\\"\\\" alt=\\\"\\\">');\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand abbreviation (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(5, 25, 5, 25), 'ul>li', '<ul>\\n\\t\\t\\t<li></li>\\n\\t\\t</ul>');\n\t});\n\n\ttest('Expand abbreviation in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(5, 25, 5, 25), 'ul>li', '<ul>\\n\\t<li></li>\\n</ul>');\n\t});\n\n\ttest('Expand text that is neither an abbreviation nor a snippet to tags (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(4, 20, 4, 27), 'hithere', '<hithere></hithere>');\n\t});\n\n\ttest('Do not Expand text that is neither an abbreviation nor a snippet to tags in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(4, 20, 4, 27), 'hithere', '<hithere></hithere>', true);\n\t});\n\n\ttest('Expand abbreviation with repeaters (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(6, 27, 6, 27), 'ul>li*2', '<ul>\\n\\t\\t\\t<li></li>\\n\\t\\t\\t<li></li>\\n\\t\\t</ul>');\n\t});\n\n\ttest('Expand abbreviation with repeaters in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(6, 27, 6, 27), 'ul>li*2', '<ul>\\n\\t<li></li>\\n\\t<li></li>\\n</ul>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(7, 33, 7, 33), 'ul>li.item$*2', '<ul>\\n\\t\\t\\t<li class=\"item1\"></li>\\n\\t\\t\\t<li class=\"item2\"></li>\\n\\t\\t</ul>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(7, 33, 7, 33), 'ul>li.item$*2', '<ul>\\n\\t<li class=\"item1\"></li>\\n\\t<li class=\"item2\"></li>\\n</ul>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters with offset (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(8, 36, 8, 36), 'ul>li.item$@44*2', '<ul>\\n\\t\\t\\t<li class=\"item44\"></li>\\n\\t\\t\\t<li class=\"item45\"></li>\\n\\t\\t</ul>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters with offset in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(8, 36, 8, 36), 'ul>li.item$@44*2', '<ul>\\n\\t<li class=\"item44\"></li>\\n\\t<li class=\"item45\"></li>\\n</ul>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters in groups (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(17, 16, 17, 16), '(ul>li.item$)*2', '<ul>\\n\\t\\t<li class=\"item1\"></li>\\n\\t</ul>\\n\\t<ul>\\n\\t\\t<li class=\"item2\"></li>\\n\\t</ul>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters in groups in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(17, 16, 17, 16), '(ul>li.item$)*2', '<ul>\\n\\t<li class=\"item1\"></li>\\n</ul>\\n<ul>\\n\\t<li class=\"item2\"></li>\\n</ul>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters in groups with sibling in the end (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(18, 21, 18, 21), '(ul>li.item$)*2+span', '<ul>\\n\\t\\t<li class=\"item1\"></li>\\n\\t</ul>\\n\\t<ul>\\n\\t\\t<li class=\"item2\"></li>\\n\\t</ul>\\n\\t<span></span>');\n\t});\n\n\ttest('Expand abbreviation with numbered repeaters in groups with sibling in the end in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(18, 21, 18, 21), '(ul>li.item$)*2+span', '<ul>\\n\\t<li class=\"item1\"></li>\\n</ul>\\n<ul>\\n\\t<li class=\"item2\"></li>\\n</ul>\\n<span></span>');\n\t});\n\n\ttest('Expand abbreviation with nested groups (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(19, 19, 19, 19), '(div>dl>(dt+dd)*2)', '<div>\\n\\t\\t<dl>\\n\\t\\t\\t<dt></dt>\\n\\t\\t\\t<dd></dd>\\n\\t\\t\\t<dt></dt>\\n\\t\\t\\t<dd></dd>\\n\\t\\t</dl>\\n\\t</div>');\n\t});\n\n\ttest('Expand abbreviation with nested groups in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(19, 19, 19, 19), '(div>dl>(dt+dd)*2)', '<div>\\n\\t<dl>\\n\\t\\t<dt></dt>\\n\\t\\t<dd></dd>\\n\\t\\t<dt></dt>\\n\\t\\t<dd></dd>\\n\\t</dl>\\n</div>');\n\t});\n\n\ttest('Expand tag that is opened, but not closed (HTML)', () => {\n\t\treturn testExpandAbbreviation('html', new Selection(9, 6, 9, 6), '<div', '<div></div>');\n\t});\n\n\ttest('Do not Expand tag that is opened, but not closed in completion list (HTML)', () => {\n\t\treturn testHtmlCompletionProvider(new Selection(9, 6, 9, 6), '<div', '<div></div>', true);\n\t});\n\n\ttest('No expanding text inside open tag (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(2, 4, 2, 4);\n\t\t\tawait expandEmmetAbbreviation(null);\n\t\t\tassert.strictEqual(editor.document.getText(), htmlContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text inside open tag in completion list (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', (editor, _doc) => {\n\t\t\teditor.selection = new Selection(2, 4, 2, 4);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tassert.strictEqual(!completionPromise, true, `Got unexpected comapletion promise instead of undefined`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text inside open tag when there is no closing tag (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(9, 8, 9, 8);\n\t\t\tawait expandEmmetAbbreviation(null);\n\t\t\tassert.strictEqual(editor.document.getText(), htmlContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text inside open tag when there is no closing tag in completion list (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', (editor, _doc) => {\n\t\t\teditor.selection = new Selection(9, 8, 9, 8);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tassert.strictEqual(!completionPromise, true, `Got unexpected comapletion promise instead of undefined`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text inside open tag when there is no closing tag when there is no parent node (HTML)', () => {\n\t\tconst fileContents = '<img s';\n\t\treturn withRandomFileEditor(fileContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 6, 0, 6);\n\t\t\tawait expandEmmetAbbreviation(null);\n\t\t\tassert.strictEqual(editor.document.getText(), fileContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text in completion list inside open tag when there is no closing tag when there is no parent node (HTML)', () => {\n\t\tconst fileContents = '<img s';\n\t\treturn withRandomFileEditor(fileContents, 'html', (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 6, 0, 6);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tassert.strictEqual(!completionPromise, true, `Got unexpected comapletion promise instead of undefined`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand css when inside style tag (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(13, 16, 13, 19);\n\t\t\tconst expandPromise = expandEmmetAbbreviation({ language: 'css' });\n\t\t\tif (!expandPromise) {\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tawait expandPromise;\n\t\t\tassert.strictEqual(editor.document.getText(), htmlContents.replace('m10', 'margin: 10px;'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand css when inside style tag in completion list (HTML)', () => {\n\t\tconst abbreviation = 'm10';\n\t\tconst expandedText = 'margin: 10px;';\n\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(13, 16, 13, 19);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tif (!completionPromise) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding m10`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst completionList = await completionPromise;\n\t\t\tif (!completionList || !completionList.items || !completionList.items.length) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding m10`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\tassert.strictEqual(emmetCompletionItem.label, expandedText, `Label of completion item doesnt match.`);\n\t\t\tassert.strictEqual(((<string>emmetCompletionItem.documentation) || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\tassert.strictEqual(emmetCompletionItem.filterText, abbreviation, `FilterText of completion item doesnt match.`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text inside style tag if position is not for property name (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(13, 14, 13, 14);\n\t\t\tawait expandEmmetAbbreviation(null);\n\t\t\tassert.strictEqual(editor.document.getText(), htmlContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand css when inside style attribute (HTML)', () => {\n\t\tconst styleAttributeContent = '<div style=\"m10\" class=\"hello\"></div>';\n\t\treturn withRandomFileEditor(styleAttributeContent, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 15, 0, 15);\n\t\t\tconst expandPromise = expandEmmetAbbreviation(null);\n\t\t\tif (!expandPromise) {\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tawait expandPromise;\n\t\t\tassert.strictEqual(editor.document.getText(), styleAttributeContent.replace('m10', 'margin: 10px;'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand css when inside style attribute in completion list (HTML)', () => {\n\t\tconst abbreviation = 'm10';\n\t\tconst expandedText = 'margin: 10px;';\n\n\t\treturn withRandomFileEditor('<div style=\"m10\" class=\"hello\"></div>', 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 15, 0, 15);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tif (!completionPromise) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding m10`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst completionList = await completionPromise;\n\t\t\tif (!completionList || !completionList.items || !completionList.items.length) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding m10`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\tassert.strictEqual(emmetCompletionItem.label, expandedText, `Label of completion item doesnt match.`);\n\t\t\tassert.strictEqual(((<string>emmetCompletionItem.documentation) || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\tassert.strictEqual(emmetCompletionItem.filterText, abbreviation, `FilterText of completion item doesnt match.`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand html when inside script tag with html type (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(21, 12, 21, 12);\n\t\t\tconst expandPromise = expandEmmetAbbreviation(null);\n\t\t\tif (!expandPromise) {\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tawait expandPromise;\n\t\t\tassert.strictEqual(editor.document.getText(), htmlContents.replace('span.hello', '<span class=\"hello\"></span>'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand html in completion list when inside script tag with html type (HTML)', () => {\n\t\tconst abbreviation = 'span.hello';\n\t\tconst expandedText = '<span class=\"hello\"></span>';\n\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(21, 12, 21, 12);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tif (!completionPromise) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding span.hello`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst completionList = await completionPromise;\n\t\t\tif (!completionList || !completionList.items || !completionList.items.length) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding span.hello`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\tassert.strictEqual(emmetCompletionItem.label, abbreviation, `Label of completion item doesnt match.`);\n\t\t\tassert.strictEqual(((<string>emmetCompletionItem.documentation) || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text inside script tag with javascript type (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(24, 12, 24, 12);\n\t\t\tawait expandEmmetAbbreviation(null);\n\t\t\tassert.strictEqual(editor.document.getText(), htmlContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text in completion list inside script tag with javascript type (HTML)', () => {\n\t\treturn withRandomFileEditor(htmlContents, 'html', (editor, _doc) => {\n\t\t\teditor.selection = new Selection(24, 12, 24, 12);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tassert.strictEqual(!completionPromise, true, `Got unexpected comapletion promise instead of undefined`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand html when inside script tag with javascript type if js is mapped to html (HTML)', async () => {\n\t\tconst oldConfig = workspace.getConfiguration('emmet').inspect('includeLanguages')?.globalValue;\n\t\tawait workspace.getConfiguration('emmet').update('includeLanguages', { 'javascript': 'html' }, ConfigurationTarget.Global);\n\t\tawait withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(24, 10, 24, 10);\n\t\t\tconst expandPromise = expandEmmetAbbreviation(null);\n\t\t\tif (!expandPromise) {\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tawait expandPromise;\n\t\t\tassert.strictEqual(editor.document.getText(), htmlContents.replace('span.bye', '<span class=\"bye\"></span>'));\n\t\t});\n\t\tawait workspace.getConfiguration('emmet').update('includeLanguages', oldConfig, ConfigurationTarget.Global);\n\t});\n\n\ttest('Expand html in completion list when inside script tag with javascript type if js is mapped to html (HTML)', async () => {\n\t\tconst abbreviation = 'span.bye';\n\t\tconst expandedText = '<span class=\"bye\"></span>';\n\t\tconst oldConfig = workspace.getConfiguration('emmet').inspect('includeLanguages')?.globalValue;\n\t\tawait workspace.getConfiguration('emmet').update('includeLanguages', { 'javascript': 'html' }, ConfigurationTarget.Global);\n\t\tawait withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(24, 10, 24, 10);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tif (!completionPromise) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding span.bye`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tconst completionList = await completionPromise;\n\t\t\tif (!completionList || !completionList.items || !completionList.items.length) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding span.bye`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\tassert.strictEqual(emmetCompletionItem.label, abbreviation, `Label of completion item (${emmetCompletionItem.label}) doesnt match.`);\n\t\t\tassert.strictEqual(((<string>emmetCompletionItem.documentation) || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t\tawait workspace.getConfiguration('emmet').update('includeLanguages', oldConfig, ConfigurationTarget.Global);\n\t});\n\n\t// test('No expanding when html is excluded in the settings', () => {\n\t// \treturn workspace.getConfiguration('emmet').update('excludeLanguages', ['html'], ConfigurationTarget.Global).then(() => {\n\t// \t\treturn testExpandAbbreviation('html', new Selection(9, 6, 9, 6), '', '', true).then(() => {\n\t// \t\t\treturn workspace.getConfiguration('emmet').update('excludeLanguages', oldValueForExcludeLanguages ? oldValueForExcludeLanguages.globalValue : undefined, ConfigurationTarget.Global);\n\t// \t\t});\n\t// \t});\n\t// });\n\n\ttest('No expanding when html is excluded in the settings in completion list', async () => {\n\t\tconst oldConfig = workspace.getConfiguration('emmet').inspect('excludeLanguages')?.globalValue;\n\t\tawait workspace.getConfiguration('emmet').update('excludeLanguages', ['html'], ConfigurationTarget.Global);\n\t\tawait testHtmlCompletionProvider(new Selection(9, 6, 9, 6), '', '', true);\n\t\tawait workspace.getConfiguration('emmet').update('excludeLanguages', oldConfig, ConfigurationTarget.Global);\n\t});\n\n\t// test('No expanding when php (mapped syntax) is excluded in the settings', () => {\n\t// \treturn workspace.getConfiguration('emmet').update('excludeLanguages', ['php'], ConfigurationTarget.Global).then(() => {\n\t// \t\treturn testExpandAbbreviation('php', new Selection(9, 6, 9, 6), '', '', true).then(() => {\n\t// \t\t\treturn workspace.getConfiguration('emmet').update('excludeLanguages', oldValueForExcludeLanguages ? oldValueForExcludeLanguages.globalValue : undefined, ConfigurationTarget.Global);\n\t// \t\t});\n\t// \t});\n\t// });\n\n\n});\n\nsuite('Tests for jsx, xml and xsl', () => {\n\tconst oldValueForSyntaxProfiles = workspace.getConfiguration('emmet').inspect('syntaxProfiles');\n\tteardown(closeAllEditors);\n\n\ttest('Expand abbreviation with className instead of class in jsx', () => {\n\t\treturn withRandomFileEditor('ul.nav', 'javascriptreact', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 6, 0, 6);\n\t\t\tawait expandEmmetAbbreviation({ language: 'javascriptreact' });\n\t\t\tassert.strictEqual(editor.document.getText(), '<ul className=\"nav\"></ul>');\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand abbreviation with self closing tags for jsx', () => {\n\t\treturn withRandomFileEditor('img', 'javascriptreact', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 6, 0, 6);\n\t\t\tawait expandEmmetAbbreviation({ language: 'javascriptreact' });\n\t\t\tassert.strictEqual(editor.document.getText(), '<img src=\"\" alt=\"\" />');\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand abbreviation with single quotes for jsx', async () => {\n\t\tawait workspace.getConfiguration('emmet').update('syntaxProfiles', { jsx: { 'attr_quotes': 'single' } }, ConfigurationTarget.Global);\n\t\treturn withRandomFileEditor('img', 'javascriptreact', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 6, 0, 6);\n\t\t\tawait expandEmmetAbbreviation({ language: 'javascriptreact' });\n\t\t\tassert.strictEqual(editor.document.getText(), '<img src=\\'\\' alt=\\'\\' />');\n\t\t\treturn workspace.getConfiguration('emmet').update('syntaxProfiles', oldValueForSyntaxProfiles ? oldValueForSyntaxProfiles.globalValue : undefined, ConfigurationTarget.Global);\n\t\t});\n\t});\n\n\ttest('Expand abbreviation with self closing tags for xml', () => {\n\t\treturn withRandomFileEditor('img', 'xml', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 6, 0, 6);\n\t\t\tawait expandEmmetAbbreviation({ language: 'xml' });\n\t\t\tassert.strictEqual(editor.document.getText(), '<img src=\"\" alt=\"\"/>');\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand abbreviation with no self closing tags for html', () => {\n\t\treturn withRandomFileEditor('img', 'html', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 6, 0, 6);\n\t\t\tawait expandEmmetAbbreviation({ language: 'html' });\n\t\t\tassert.strictEqual(editor.document.getText(), '<img src=\"\" alt=\"\">');\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Expand abbreviation with condition containing less than sign for jsx', () => {\n\t\treturn withRandomFileEditor('if (foo < 10) { span.bar', 'javascriptreact', async (editor, _doc) => {\n\t\t\teditor.selection = new Selection(0, 27, 0, 27);\n\t\t\tawait expandEmmetAbbreviation({ language: 'javascriptreact' });\n\t\t\tassert.strictEqual(editor.document.getText(), 'if (foo < 10) { <span className=\"bar\"></span>');\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('No expanding text inside open tag in completion list (jsx)', () => {\n\t\treturn testNoCompletion('jsx', htmlContents, new Selection(2, 4, 2, 4));\n\t});\n\n\ttest('No expanding tag that is opened, but not closed in completion list (jsx)', () => {\n\t\treturn testNoCompletion('jsx', htmlContents, new Selection(9, 6, 9, 6));\n\t});\n\n\ttest('No expanding text inside open tag when there is no closing tag in completion list (jsx)', () => {\n\t\treturn testNoCompletion('jsx', htmlContents, new Selection(9, 8, 9, 8));\n\t});\n\n\ttest('No expanding text in completion list inside open tag when there is no closing tag when there is no parent node (jsx)', () => {\n\t\treturn testNoCompletion('jsx', '<img s', new Selection(0, 6, 0, 6));\n\t});\n\n});\n\nfunction testExpandAbbreviation(syntax: string, selection: Selection, abbreviation: string, expandedText: string, shouldFail?: boolean): Thenable<any> {\n\treturn withRandomFileEditor(htmlContents, syntax, async (editor, _doc) => {\n\t\teditor.selection = selection;\n\t\tconst expandPromise = expandEmmetAbbreviation(null);\n\t\tif (!expandPromise) {\n\t\t\tif (!shouldFail) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding ${abbreviation} to ${expandedText}`);\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tawait expandPromise;\n\t\tassert.strictEqual(editor.document.getText(), htmlContents.replace(abbreviation, expandedText));\n\t\treturn Promise.resolve();\n\t});\n}\n\nfunction testHtmlCompletionProvider(selection: Selection, abbreviation: string, expandedText: string, shouldFail?: boolean): Thenable<any> {\n\treturn withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => {\n\t\teditor.selection = selection;\n\t\tconst cancelSrc = new CancellationTokenSource();\n\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\tif (!completionPromise) {\n\t\t\tif (!shouldFail) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding ${abbreviation} to ${expandedText}`);\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst completionList = await completionPromise;\n\t\tif (!completionList || !completionList.items || !completionList.items.length) {\n\t\t\tif (!shouldFail) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding ${abbreviation} to ${expandedText}`);\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tconst emmetCompletionItem = completionList.items[0];\n\t\tassert.strictEqual(emmetCompletionItem.label, abbreviation, `Label of completion item doesnt match.`);\n\t\tassert.strictEqual(((<string>emmetCompletionItem.documentation) || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\treturn Promise.resolve();\n\t});\n}\n\nfunction testNoCompletion(syntax: string, fileContents: string, selection: Selection): Thenable<any> {\n\treturn withRandomFileEditor(fileContents, syntax, (editor, _doc) => {\n\t\teditor.selection = selection;\n\t\tconst cancelSrc = new CancellationTokenSource();\n\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\tassert.strictEqual(!completionPromise, true, `Got unexpected comapletion promise instead of undefined`);\n\t\treturn Promise.resolve();\n\t});\n}\n"
  },
  {
    "path": "extensions/emmet/src/test/completion.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport 'mocha';\nimport { CancellationTokenSource, CompletionTriggerKind, Selection } from 'vscode';\nimport { DefaultCompletionItemProvider } from '../defaultCompletionProvider';\nimport { closeAllEditors, withRandomFileEditor } from './testUtils';\n\nconst completionProvider = new DefaultCompletionItemProvider();\n\nsuite('Tests for completion in CSS embedded in HTML', () => {\n\tteardown(closeAllEditors);\n\n\ttest('style attribute & attribute value in html', async () => {\n\t\tawait testCompletionProvider('html', '<div style=\"|\"', [{ label: 'padding: ;' }]);\n\t\tawait testCompletionProvider('html', `<div style='|'`, [{ label: 'padding: ;' }]);\n\t\tawait testCompletionProvider('html', `<div style='p|'`, [{ label: 'padding: ;' }]);\n\t\tawait testCompletionProvider('html', `<div style='color: #0|'`, [{ label: '#000000' }]);\n\t});\n\n\t// https://github.com/microsoft/vscode/issues/79766\n\ttest('microsoft/vscode#79766, correct region determination', async () => {\n\t\tawait testCompletionProvider('html', `<div style=\"color: #000\">di|</div>`, [\n\t\t\t{ label: 'div', documentation: `<div>|</div>` }\n\t\t]);\n\t});\n\n\t// https://github.com/microsoft/vscode/issues/86941\n\ttest('microsoft/vscode#86941, widows should be completed after width', async () => {\n\t\tawait testCompletionProvider('css', `.foo { wi| }`, [\n\t\t\t{ label: 'width: ;', documentation: `width: |;` }\n\t\t]);\n\t\tawait testCompletionProvider('css', `.foo { wid| }`, [\n\t\t\t{ label: 'width: ;', documentation: `width: |;` }\n\t\t]);\n\t\ttry {\n\t\t\tawait testCompletionProvider('css', `.foo { wi| }`, [\n\t\t\t\t{ label: 'widows: ;', documentation: `widows: |;` }\n\t\t\t]);\n\t\t} catch (e) {\n\t\t\tassert.strictEqual(e.message, \"Didn't find completion item with label widows: ;\");\n\t\t}\n\t\ttry {\n\t\t\tawait testCompletionProvider('css', `.foo { wid| }`, [\n\t\t\t\t{ label: 'widows: ;', documentation: `widows: |;` }\n\t\t\t]);\n\t\t} catch (e) {\n\t\t\tassert.strictEqual(e.message, \"Didn't find completion item with label widows: ;\");\n\t\t}\n\t\tawait testCompletionProvider('css', `.foo { wido| }`, [\n\t\t\t{ label: 'widows: ;', documentation: `widows: |;` }\n\t\t]);\n\t});\n\n\t// https://github.com/microsoft/vscode/issues/117020\n\ttest('microsoft/vscode#117020, ! at end of abbreviation should have completion', async () => {\n\t\tawait testCompletionProvider('css', `.foo { bdbn!| }`, [\n\t\t\t{ label: 'border-bottom: none !important;', documentation: `border-bottom: none !important;` }\n\t\t]);\n\t});\n\n\t// https://github.com/microsoft/vscode/issues/138461\n\ttest('microsoft/vscode#138461, JSX array noise', async () => {\n\t\tawait testCompletionProvider('jsx', 'a[i]', undefined);\n\t\tawait testCompletionProvider('jsx', 'Component[a b]', undefined);\n\t\tawait testCompletionProvider('jsx', '[a, b]', undefined);\n\t\tawait testCompletionProvider('jsx', '[a=b]', [\n\t\t\t{ label: '<div a=\"b\"></div>', documentation: '<div a=\"b\">|</div>' }\n\t\t]);\n\t});\n\n\t// https://github.com/microsoft/vscode-emmet-helper/pull/90\n\ttest('microsoft/vscode-emmet-helper#90', async () => {\n\t\tawait testCompletionProvider('html', 'dialog', [\n\t\t\t{ label: '<dialog></dialog>', documentation: '<dialog>|</dialog>' }\n\t\t]);\n\t});\n});\n\ninterface TestCompletionItem {\n\tlabel: string;\n\n\tdocumentation?: string;\n}\n\nfunction testCompletionProvider(fileExtension: string, contents: string, expectedItems: TestCompletionItem[] | undefined): Thenable<boolean> {\n\tconst cursorPos = contents.indexOf('|');\n\tconst slicedContents = contents.slice(0, cursorPos) + contents.slice(cursorPos + 1);\n\n\treturn withRandomFileEditor(slicedContents, fileExtension, async (editor, _doc) => {\n\t\tconst selection = new Selection(editor.document.positionAt(cursorPos), editor.document.positionAt(cursorPos));\n\t\teditor.selection = selection;\n\t\tconst cancelSrc = new CancellationTokenSource();\n\t\tconst completionPromise = completionProvider.provideCompletionItems(\n\t\t\teditor.document,\n\t\t\teditor.selection.active,\n\t\t\tcancelSrc.token,\n\t\t\t{ triggerKind: CompletionTriggerKind.Invoke, triggerCharacter: undefined }\n\t\t);\n\t\tif (!completionPromise) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst completionList = await completionPromise;\n\t\tif (!completionList || !completionList.items || !completionList.items.length) {\n\t\t\tif (completionList === undefined) {\n\t\t\t\tassert.strictEqual(expectedItems, completionList);\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tassert.strictEqual(expectedItems === undefined, false);\n\t\texpectedItems!.forEach(eItem => {\n\t\t\tconst matches = completionList.items.filter(i => i.label === eItem.label);\n\t\t\tconst match = matches && matches.length > 0 ? matches[0] : undefined;\n\t\t\tassert.ok(match, `Didn't find completion item with label ${eItem.label}`);\n\n\t\t\tif (match) {\n\t\t\t\tassert.strictEqual(match.detail, 'Emmet Abbreviation', `Match needs to come from Emmet`);\n\n\t\t\t\tif (eItem.documentation) {\n\t\t\t\t\tassert.strictEqual(match.documentation, eItem.documentation, `Emmet completion Documentation doesn't match`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn Promise.resolve();\n\t});\n}\n"
  },
  {
    "path": "extensions/emmet/src/test/cssAbbreviationAction.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection, CompletionList, CancellationTokenSource, Position, CompletionTriggerKind, CompletionContext } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { expandEmmetAbbreviation } from '../abbreviationActions';\nimport { DefaultCompletionItemProvider } from '../defaultCompletionProvider';\n\nconst completionProvider = new DefaultCompletionItemProvider();\nconst cssContents = `\n.boo {\n\tmargin: 20px 10px;\n\tpos:f\n\tbackground-image: url('tryme.png');\n\tpos:f\n}\n\n.boo .hoo {\n\tmargin: 10px;\n\tind\n}\n`;\n\nconst scssContents = `\n.boo {\n\tmargin: 10px;\n\tp10\n\t.hoo {\n\t\tp20\n\t}\n}\n@include b(alert) {\n\n\tmargin: 10px;\n\tp30\n\n\t@include b(alert) {\n\t\tp40\n\t}\n}\n.foo {\n\tmargin: 10px;\n\tmargin: a\n\t.hoo {\n\t\tcolor: #000;\n\t}\n}\n`;\n\nconst invokeCompletionContext: CompletionContext = {\n\ttriggerKind: CompletionTriggerKind.Invoke,\n\ttriggerCharacter: undefined,\n};\n\nsuite('Tests for Expand Abbreviations (CSS)', () => {\n\tteardown(closeAllEditors);\n\n\ttest('Expand abbreviation (CSS)', () => {\n\t\treturn withRandomFileEditor(cssContents, 'css', (editor, _) => {\n\t\t\teditor.selections = [new Selection(3, 1, 3, 6), new Selection(5, 1, 5, 6)];\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), cssContents.replace(/pos:f/g, 'position: fixed;'));\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('No emmet when cursor inside comment (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\t/*margin: 10px;\n\tm10\n\tpadding: 10px;*/\n\tdisplay: auto;\n}\n`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(3, 4, 3, 4);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), testContent);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(2, 10), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion at property value`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('No emmet when cursor in selector of a rule (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\tmargin: 10px;\n}\n\nnav#\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(5, 4, 5, 4);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), testContent);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(2, 10), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion at property value`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Skip when typing property values when there is a property in the next line (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\tmargin: a\n\tmargin: 10px;\n}\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(2, 10, 2, 10);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), testContent);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(2, 10), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion at property value`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Skip when typing the last property value in single line rules (CSS)', () => {\n\t\tconst testContent = `.foo {padding: 10px; margin: a}`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(0, 30, 0, 30);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), testContent);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(0, 30), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion at property value`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Allow hex color or !important when typing property values when there is a property in the next line (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\tmargin: #12 !\n\tmargin: 10px;\n}\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise1 = completionProvider.provideCompletionItems(editor.document, new Position(2, 12), cancelSrc.token, invokeCompletionContext);\n\t\t\tconst completionPromise2 = completionProvider.provideCompletionItems(editor.document, new Position(2, 14), cancelSrc.token, invokeCompletionContext);\n\n\t\t\tif (!completionPromise1 || !completionPromise2) {\n\t\t\t\tassert.strictEqual(1, 2, `Completion promise wasnt returned`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst callBack = (completionList: CompletionList, expandedText: string) => {\n\t\t\t\tif (!completionList.items || !completionList.items.length) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Empty Completions`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\t\tassert.strictEqual(emmetCompletionItem.label, expandedText, `Label of completion item doesnt match.`);\n\t\t\t\tassert.strictEqual((<string>emmetCompletionItem.documentation || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\t};\n\n\t\t\treturn Promise.all([completionPromise1, completionPromise2]).then(([result1, result2]) => {\n\t\t\t\tassert.ok(result1);\n\t\t\t\tassert.ok(result2);\n\t\t\t\tcallBack(result1, '#121212');\n\t\t\t\tcallBack(result2, '!important');\n\t\t\t\teditor.selections = [new Selection(2, 12, 2, 12), new Selection(2, 14, 2, 14)];\n\t\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\t\tassert.strictEqual(editor.document.getText(), testContent.replace('#12', '#121212').replace('!', '!important'));\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Skip when typing property values when there is a property in the previous line (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\tmargin: 10px;\n\tmargin: a\n}\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(3, 10, 3, 10);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), testContent);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(3, 10), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion at property value`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Allow hex color or !important when typing property values when there is a property in the previous line (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\tmargin: 10px;\n\tmargin: #12 !\n}\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise1 = completionProvider.provideCompletionItems(editor.document, new Position(3, 12), cancelSrc.token, invokeCompletionContext);\n\t\t\tconst completionPromise2 = completionProvider.provideCompletionItems(editor.document, new Position(3, 14), cancelSrc.token, invokeCompletionContext);\n\n\t\t\tif (!completionPromise1 || !completionPromise2) {\n\t\t\t\tassert.strictEqual(1, 2, `Completion promise wasnt returned`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst callBack = (completionList: CompletionList, expandedText: string) => {\n\t\t\t\tif (!completionList.items || !completionList.items.length) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Empty Completions`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\t\tassert.strictEqual(emmetCompletionItem.label, expandedText, `Label of completion item doesnt match.`);\n\t\t\t\tassert.strictEqual((<string>emmetCompletionItem.documentation || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\t};\n\n\t\t\treturn Promise.all([completionPromise1, completionPromise2]).then(([result1, result2]) => {\n\t\t\t\tassert.ok(result1);\n\t\t\t\tassert.ok(result2);\n\t\t\t\tcallBack(result1, '#121212');\n\t\t\t\tcallBack(result2, '!important');\n\t\t\t\teditor.selections = [new Selection(3, 12, 3, 12), new Selection(3, 14, 3, 14)];\n\t\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\t\tassert.strictEqual(editor.document.getText(), testContent.replace('#12', '#121212').replace('!', '!important'));\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Skip when typing property values when it is the only property in the rule (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\tmargin: a\n}\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(2, 10, 2, 10);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), testContent);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(2, 10), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion at property value`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Allow hex colors or !important when typing property values when it is the only property in the rule (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\tmargin: #12 !\n}\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise1 = completionProvider.provideCompletionItems(editor.document, new Position(2, 12), cancelSrc.token, invokeCompletionContext);\n\t\t\tconst completionPromise2 = completionProvider.provideCompletionItems(editor.document, new Position(2, 14), cancelSrc.token, invokeCompletionContext);\n\n\t\t\tif (!completionPromise1 || !completionPromise2) {\n\t\t\t\tassert.strictEqual(1, 2, `Completion promise wasnt returned`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst callBack = (completionList: CompletionList, expandedText: string) => {\n\t\t\t\tif (!completionList.items || !completionList.items.length) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Empty Completions`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\t\tassert.strictEqual(emmetCompletionItem.label, expandedText, `Label of completion item doesnt match.`);\n\t\t\t\tassert.strictEqual((<string>emmetCompletionItem.documentation || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\t};\n\n\t\t\treturn Promise.all([completionPromise1, completionPromise2]).then(([result1, result2]) => {\n\t\t\t\tassert.ok(result1);\n\t\t\t\tassert.ok(result2);\n\t\t\t\tcallBack(result1, '#121212');\n\t\t\t\tcallBack(result2, '!important');\n\t\t\t\teditor.selections = [new Selection(2, 12, 2, 12), new Selection(2, 14, 2, 14)];\n\t\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\t\tassert.strictEqual(editor.document.getText(), testContent.replace('#12', '#121212').replace('!', '!important'));\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('# shouldnt expand to hex color when in selector (CSS)', () => {\n\t\tconst testContent = `\n.foo {\n\t#\n}\n\t\t`;\n\n\t\treturn withRandomFileEditor(testContent, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(2, 2, 2, 2);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), testContent);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(2, 2), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion of hex color at property name`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\n\ttest('Expand abbreviation in completion list (CSS)', () => {\n\t\tconst abbreviation = 'pos:f';\n\t\tconst expandedText = 'position: fixed;';\n\n\t\treturn withRandomFileEditor(cssContents, 'css', (editor, _) => {\n\t\t\teditor.selection = new Selection(3, 1, 3, 6);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise1 = completionProvider.provideCompletionItems(editor.document, new Position(3, 6), cancelSrc.token, invokeCompletionContext);\n\t\t\tconst completionPromise2 = completionProvider.provideCompletionItems(editor.document, new Position(5, 6), cancelSrc.token, invokeCompletionContext);\n\t\t\tif (!completionPromise1 || !completionPromise2) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding pos:f`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst callBack = (completionList: CompletionList) => {\n\t\t\t\tif (!completionList.items || !completionList.items.length) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding pos:f`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\t\tassert.strictEqual(emmetCompletionItem.label, expandedText, `Label of completion item doesnt match.`);\n\t\t\t\tassert.strictEqual((<string>emmetCompletionItem.documentation || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\t\tassert.strictEqual(emmetCompletionItem.filterText, abbreviation, `FilterText of completion item doesnt match.`);\n\t\t\t};\n\n\t\t\treturn Promise.all([completionPromise1, completionPromise2]).then(([result1, result2]) => {\n\t\t\t\tassert.ok(result1);\n\t\t\t\tassert.ok(result2);\n\t\t\t\tcallBack(result1);\n\t\t\t\tcallBack(result2);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Expand abbreviation (SCSS)', () => {\n\t\treturn withRandomFileEditor(scssContents, 'scss', (editor, _) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 4, 3, 4),\n\t\t\t\tnew Selection(5, 5, 5, 5),\n\t\t\t\tnew Selection(11, 4, 11, 4),\n\t\t\t\tnew Selection(14, 5, 14, 5)\n\t\t\t];\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), scssContents.replace(/p(\\d\\d)/g, 'padding: $1px;'));\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Expand abbreviation in completion list (SCSS)', () => {\n\n\t\treturn withRandomFileEditor(scssContents, 'scss', (editor, _) => {\n\t\t\teditor.selection = new Selection(3, 4, 3, 4);\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tconst completionPromise1 = completionProvider.provideCompletionItems(editor.document, new Position(3, 4), cancelSrc.token, invokeCompletionContext);\n\t\t\tconst completionPromise2 = completionProvider.provideCompletionItems(editor.document, new Position(5, 5), cancelSrc.token, invokeCompletionContext);\n\t\t\tconst completionPromise3 = completionProvider.provideCompletionItems(editor.document, new Position(11, 4), cancelSrc.token, invokeCompletionContext);\n\t\t\tconst completionPromise4 = completionProvider.provideCompletionItems(editor.document, new Position(14, 5), cancelSrc.token, invokeCompletionContext);\n\t\t\tif (!completionPromise1) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding padding abbreviations at line 3 col 4`);\n\t\t\t}\n\t\t\tif (!completionPromise2) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding padding abbreviations at line 5 col 5`);\n\t\t\t}\n\t\t\tif (!completionPromise3) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding padding abbreviations at line 11 col 4`);\n\t\t\t}\n\t\t\tif (!completionPromise4) {\n\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding padding abbreviations at line 14 col 5`);\n\t\t\t}\n\n\t\t\tif (!completionPromise1 || !completionPromise2 || !completionPromise3 || !completionPromise4) {\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst callBack = (completionList: CompletionList, abbreviation: string, expandedText: string) => {\n\t\t\t\tif (!completionList.items || !completionList.items.length) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Problem with expanding m10`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst emmetCompletionItem = completionList.items[0];\n\t\t\t\tassert.strictEqual(emmetCompletionItem.label, expandedText, `Label of completion item doesnt match.`);\n\t\t\t\tassert.strictEqual((<string>emmetCompletionItem.documentation || '').replace(/\\|/g, ''), expandedText, `Docs of completion item doesnt match.`);\n\t\t\t\tassert.strictEqual(emmetCompletionItem.filterText, abbreviation, `FilterText of completion item doesnt match.`);\n\t\t\t};\n\n\t\t\treturn Promise.all([completionPromise1, completionPromise2, completionPromise3, completionPromise4]).then(([result1, result2, result3, result4]) => {\n\t\t\t\tassert.ok(result1);\n\t\t\t\tassert.ok(result2);\n\t\t\t\tassert.ok(result3);\n\t\t\t\tassert.ok(result4);\n\t\t\t\tcallBack(result1, 'p10', 'padding: 10px;');\n\t\t\t\tcallBack(result2, 'p20', 'padding: 20px;');\n\t\t\t\tcallBack(result3, 'p30', 'padding: 30px;');\n\t\t\t\tcallBack(result4, 'p40', 'padding: 40px;');\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\n\ttest('Invalid locations for abbreviations in scss', () => {\n\t\tconst scssContentsNoExpand = `\nm10\n\t\t.boo {\n\t\t\tmargin: 10px;\n\t\t\t.hoo {\n\t\t\t\tbackground:\n\t\t\t}\n\t\t}\n\t\t`;\n\n\t\treturn withRandomFileEditor(scssContentsNoExpand, 'scss', (editor, _) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(1, 3, 1, 3), // outside rule\n\t\t\t\tnew Selection(5, 15, 5, 15) // in the value part of property value\n\t\t\t];\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), scssContentsNoExpand);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Invalid locations for abbreviations in scss in completion list', () => {\n\t\tconst scssContentsNoExpand = `\nm10\n\t\t.boo {\n\t\t\tmargin: 10px;\n\t\t\t.hoo {\n\t\t\t\tbackground:\n\t\t\t}\n\t\t}\n\t\t`;\n\n\t\treturn withRandomFileEditor(scssContentsNoExpand, 'scss', (editor, _) => {\n\t\t\teditor.selection = new Selection(1, 3, 1, 3); // outside rule\n\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\tlet completionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tif (completionPromise) {\n\t\t\t\tassert.strictEqual(1, 2, `m10 gets expanded in invalid location (outside rule)`);\n\t\t\t}\n\n\t\t\teditor.selection = new Selection(5, 15, 5, 15); // in the value part of property value\n\t\t\tcompletionPromise = completionProvider.provideCompletionItems(editor.document, editor.selection.active, cancelSrc.token, invokeCompletionContext);\n\t\t\tif (completionPromise) {\n\t\t\t\treturn completionPromise.then((completionList: CompletionList | undefined) => {\n\t\t\t\t\tif (completionList && completionList.items && completionList.items.length > 0) {\n\t\t\t\t\t\tassert.strictEqual(1, 2, `m10 gets expanded in invalid location (n the value part of property value)`);\n\t\t\t\t\t}\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Skip when typing property values when there is a nested rule in the next line (SCSS)', () => {\n\t\treturn withRandomFileEditor(scssContents, 'scss', (editor, _) => {\n\t\t\teditor.selection = new Selection(19, 10, 19, 10);\n\t\t\treturn expandEmmetAbbreviation(null).then(() => {\n\t\t\t\tassert.strictEqual(editor.document.getText(), scssContents);\n\t\t\t\tconst cancelSrc = new CancellationTokenSource();\n\t\t\t\tconst completionPromise = completionProvider.provideCompletionItems(editor.document, new Position(19, 10), cancelSrc.token, invokeCompletionContext);\n\t\t\t\tif (completionPromise) {\n\t\t\t\t\tassert.strictEqual(1, 2, `Invalid completion at property value`);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n});\n\n"
  },
  {
    "path": "extensions/emmet/src/test/editPointSelectItemBalance.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { fetchEditPoint } from '../editPoint';\nimport { fetchSelectItem } from '../selectItem';\nimport { balanceOut, balanceIn } from '../balance';\n\nsuite('Tests for Next/Previous Select/Edit point and Balance actions', () => {\n\tteardown(closeAllEditors);\n\n\tconst cssContents = `\n.boo {\n\tmargin: 20px 10px;\n\tbackground-image: url('tryme.png');\n}\n\n.boo .hoo {\n\tmargin: 10px;\n}\n`;\n\n\tconst scssContents = `\n.boo {\n\tmargin: 20px 10px;\n\tbackground-image: url('tryme.png');\n\n\t.boo .hoo {\n\t\tmargin: 10px;\n\t}\n}\n`;\n\n\tconst htmlContents = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\t<title></title>\n</head>\n<body>\n\t<div>\n\\t\\t\n\t</div>\n\t<div class=\"header\">\n\t\t<ul class=\"nav main\">\n\t\t\t<li class=\"item1\">Item 1</li>\n\t\t\t<li class=\"item2\">Item 2</li>\n\t\t</ul>\n\t</div>\n</body>\n</html>\n`;\n\n\ttest('Emmet Next/Prev Edit point in html file', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, '.html', (editor, _) => {\n\t\t\teditor.selections = [new Selection(1, 5, 1, 5)];\n\n\t\t\tconst expectedNextEditPoints: [number, number][] = [[4, 16], [6, 8], [10, 2], [10, 2]];\n\t\t\texpectedNextEditPoints.forEach(([line, col]) => {\n\t\t\t\tfetchEditPoint('next');\n\t\t\t\ttestSelection(editor.selection, col, line);\n\t\t\t});\n\n\t\t\tconst expectedPrevEditPoints = [[6, 8], [4, 16], [4, 16]];\n\t\t\texpectedPrevEditPoints.forEach(([line, col]) => {\n\t\t\t\tfetchEditPoint('prev');\n\t\t\t\ttestSelection(editor.selection, col, line);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Select Next/Prev Item in html file', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, '.html', (editor, _) => {\n\t\t\teditor.selections = [new Selection(2, 2, 2, 2)];\n\n\t\t\tconst expectedNextItemPoints: [number, number, number][] = [\n\t\t\t\t[2, 1, 5],   // html\n\t\t\t\t[2, 6, 15],  // lang=\"en\"\n\t\t\t\t[2, 12, 14], // en\n\t\t\t\t[3, 1, 5],   // head\n\t\t\t\t[4, 2, 6],   // meta\n\t\t\t\t[4, 7, 17], // charset=\"\"\n\t\t\t\t[5, 2, 6],   // meta\n\t\t\t\t[5, 7, 22], // name=\"viewport\"\n\t\t\t\t[5, 13, 21], // viewport\n\t\t\t\t[5, 23, 70], // content=\"width=device-width, initial-scale=1.0\"\n\t\t\t\t[5, 32, 69], // width=device-width, initial-scale=1.0\n\t\t\t\t[5, 32, 51], // width=device-width,\n\t\t\t\t[5, 52, 69], // initial-scale=1.0\n\t\t\t\t[6, 2, 7]   // title\n\t\t\t];\n\t\t\texpectedNextItemPoints.forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('next');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\teditor.selections = [new Selection(6, 15, 6, 15)];\n\t\t\texpectedNextItemPoints.reverse().forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('prev');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Select Next/Prev item at boundary', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, '.html', (editor, _) => {\n\t\t\teditor.selections = [new Selection(4, 1, 4, 1)];\n\n\t\t\tfetchSelectItem('next');\n\t\t\ttestSelection(editor.selection, 2, 4, 6);\n\n\t\t\teditor.selections = [new Selection(4, 1, 4, 1)];\n\n\t\t\tfetchSelectItem('prev');\n\t\t\ttestSelection(editor.selection, 1, 3, 5);\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Next/Prev Item in html template', function (): any {\n\t\tconst templateContents = `\n<script type=\"text/template\">\n\t<div class=\"header\">\n\t\t<ul class=\"nav main\">\n\t\t</ul>\n\t</div>\n</script>\n`;\n\t\treturn withRandomFileEditor(templateContents, '.html', (editor, _) => {\n\t\t\teditor.selections = [new Selection(2, 2, 2, 2)];\n\n\t\t\tconst expectedNextItemPoints: [number, number, number][] = [\n\t\t\t\t[2, 2, 5],  // div\n\t\t\t\t[2, 6, 20], // class=\"header\"\n\t\t\t\t[2, 13, 19], // header\n\t\t\t\t[3, 3, 5],   // ul\n\t\t\t\t[3, 6, 22],   // class=\"nav main\"\n\t\t\t\t[3, 13, 21], // nav main\n\t\t\t\t[3, 13, 16],   // nav\n\t\t\t\t[3, 17, 21], // main\n\t\t\t];\n\t\t\texpectedNextItemPoints.forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('next');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\teditor.selections = [new Selection(4, 1, 4, 1)];\n\t\t\texpectedNextItemPoints.reverse().forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('prev');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Select Next/Prev Item in css file', function (): any {\n\t\treturn withRandomFileEditor(cssContents, '.css', (editor, _) => {\n\t\t\teditor.selections = [new Selection(0, 0, 0, 0)];\n\n\t\t\tconst expectedNextItemPoints: [number, number, number][] = [\n\t\t\t\t[1, 0, 4],   // .boo\n\t\t\t\t[2, 1, 19],  // margin: 20px 10px;\n\t\t\t\t[2, 9, 18],   // 20px 10px\n\t\t\t\t[2, 9, 13],   // 20px\n\t\t\t\t[2, 14, 18], // 10px\n\t\t\t\t[3, 1, 36],   // background-image: url('tryme.png');\n\t\t\t\t[3, 19, 35], // url('tryme.png')\n\t\t\t\t[6, 0, 9], // .boo .hoo\n\t\t\t\t[7, 1, 14], // margin: 10px;\n\t\t\t\t[7, 9, 13], // 10px\n\t\t\t];\n\t\t\texpectedNextItemPoints.forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('next');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\teditor.selections = [new Selection(9, 0, 9, 0)];\n\t\t\texpectedNextItemPoints.reverse().forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('prev');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Select Next/Prev Item in scss file with nested rules', function (): any {\n\t\treturn withRandomFileEditor(scssContents, '.scss', (editor, _) => {\n\t\t\teditor.selections = [new Selection(0, 0, 0, 0)];\n\n\t\t\tconst expectedNextItemPoints: [number, number, number][] = [\n\t\t\t\t[1, 0, 4],   // .boo\n\t\t\t\t[2, 1, 19],  // margin: 20px 10px;\n\t\t\t\t[2, 9, 18],   // 20px 10px\n\t\t\t\t[2, 9, 13],   // 20px\n\t\t\t\t[2, 14, 18], // 10px\n\t\t\t\t[3, 1, 36],   // background-image: url('tryme.png');\n\t\t\t\t[3, 19, 35], // url('tryme.png')\n\t\t\t\t[5, 1, 10], // .boo .hoo\n\t\t\t\t[6, 2, 15], // margin: 10px;\n\t\t\t\t[6, 10, 14], // 10px\n\t\t\t];\n\t\t\texpectedNextItemPoints.forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('next');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\teditor.selections = [new Selection(8, 0, 8, 0)];\n\t\t\texpectedNextItemPoints.reverse().forEach(([line, colstart, colend]) => {\n\t\t\t\tfetchSelectItem('prev');\n\t\t\t\ttestSelection(editor.selection, colstart, line, colend);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Balance Out in html file', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, 'html', (editor, _) => {\n\n\t\t\teditor.selections = [new Selection(14, 6, 14, 10)];\n\t\t\tconst expectedBalanceOutRanges: [number, number, number, number][] = [\n\t\t\t\t[14, 3, 14, 32],   // <li class=\"item1\">Item 1</li>\n\t\t\t\t[13, 23, 16, 2],  // inner contents of <ul class=\"nav main\">\n\t\t\t\t[13, 2, 16, 7],\t\t// outer contents of <ul class=\"nav main\">\n\t\t\t\t[12, 21, 17, 1], // inner contents of <div class=\"header\">\n\t\t\t\t[12, 1, 17, 7], // outer contents of <div class=\"header\">\n\t\t\t\t[8, 6, 18, 0],\t// inner contents of <body>\n\t\t\t\t[8, 0, 18, 7], // outer contents of <body>\n\t\t\t\t[2, 16, 19, 0],   // inner contents of <html>\n\t\t\t\t[2, 0, 19, 7],   // outer contents of <html>\n\t\t\t];\n\t\t\texpectedBalanceOutRanges.forEach(([linestart, colstart, lineend, colend]) => {\n\t\t\t\tbalanceOut();\n\t\t\t\ttestSelection(editor.selection, colstart, linestart, colend, lineend);\n\t\t\t});\n\n\t\t\teditor.selections = [new Selection(12, 7, 12, 7)];\n\t\t\tconst expectedBalanceInRanges: [number, number, number, number][] = [\n\t\t\t\t[12, 21, 17, 1],   // inner contents of <div class=\"header\">\n\t\t\t\t[13, 2, 16, 7],\t\t// outer contents of <ul class=\"nav main\">\n\t\t\t\t[13, 23, 16, 2],  // inner contents of <ul class=\"nav main\">\n\t\t\t\t[14, 3, 14, 32],   // <li class=\"item1\">Item 1</li>\n\t\t\t\t[14, 21, 14, 27]   // Item 1\n\t\t\t];\n\t\t\texpectedBalanceInRanges.forEach(([linestart, colstart, lineend, colend]) => {\n\t\t\t\tbalanceIn();\n\t\t\t\ttestSelection(editor.selection, colstart, linestart, colend, lineend);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Balance In using the same stack as Balance out in html file', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, 'html', (editor, _) => {\n\n\t\t\teditor.selections = [new Selection(15, 6, 15, 10)];\n\t\t\tconst expectedBalanceOutRanges: [number, number, number, number][] = [\n\t\t\t\t[15, 3, 15, 32],   // <li class=\"item1\">Item 2</li>\n\t\t\t\t[13, 23, 16, 2],  // inner contents of <ul class=\"nav main\">\n\t\t\t\t[13, 2, 16, 7],\t\t// outer contents of <ul class=\"nav main\">\n\t\t\t\t[12, 21, 17, 1], // inner contents of <div class=\"header\">\n\t\t\t\t[12, 1, 17, 7], // outer contents of <div class=\"header\">\n\t\t\t\t[8, 6, 18, 0],\t// inner contents of <body>\n\t\t\t\t[8, 0, 18, 7], // outer contents of <body>\n\t\t\t\t[2, 16, 19, 0],   // inner contents of <html>\n\t\t\t\t[2, 0, 19, 7],   // outer contents of <html>\n\t\t\t];\n\t\t\texpectedBalanceOutRanges.forEach(([linestart, colstart, lineend, colend]) => {\n\t\t\t\tbalanceOut();\n\t\t\t\ttestSelection(editor.selection, colstart, linestart, colend, lineend);\n\t\t\t});\n\n\t\t\texpectedBalanceOutRanges.reverse().forEach(([linestart, colstart, lineend, colend]) => {\n\t\t\t\ttestSelection(editor.selection, colstart, linestart, colend, lineend);\n\t\t\t\tbalanceIn();\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Balance In when selection doesnt span entire node or its inner contents', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, 'html', (editor, _) => {\n\n\t\t\teditor.selection = new Selection(13, 7, 13, 10); // Inside the open tag of <ul class=\"nav main\">\n\t\t\tbalanceIn();\n\t\t\ttestSelection(editor.selection, 23, 13, 2, 16); // inner contents of <ul class=\"nav main\">\n\n\t\t\teditor.selection = new Selection(16, 4, 16, 5); // Inside the open close of <ul class=\"nav main\">\n\t\t\tbalanceIn();\n\t\t\ttestSelection(editor.selection, 23, 13, 2, 16); // inner contents of <ul class=\"nav main\">\n\n\t\t\teditor.selection = new Selection(13, 7, 14, 2); // Inside the open tag of <ul class=\"nav main\"> and the next line\n\t\t\tbalanceIn();\n\t\t\ttestSelection(editor.selection, 23, 13, 2, 16); // inner contents of <ul class=\"nav main\">\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Emmet Balance In/Out in html template', function (): any {\n\t\tconst htmlTemplate = `\n<script type=\"text/html\">\n<div class=\"header\">\n\t<ul class=\"nav main\">\n\t\t<li class=\"item1\">Item 1</li>\n\t\t<li class=\"item2\">Item 2</li>\n\t</ul>\n</div>\n</script>`;\n\n\t\treturn withRandomFileEditor(htmlTemplate, 'html', (editor, _) => {\n\n\t\t\teditor.selections = [new Selection(5, 24, 5, 24)];\n\t\t\tconst expectedBalanceOutRanges: [number, number, number, number][] = [\n\t\t\t\t[5, 20, 5, 26],\t// <li class=\"item1\">``Item 2''</li>\n\t\t\t\t[5, 2, 5, 31],\t// ``<li class=\"item1\">Item 2</li>''\n\t\t\t\t[3, 22, 6, 1],\t// inner contents of ul\n\t\t\t\t[3, 1, 6, 6],\t// outer contents of ul\n\t\t\t\t[2, 20, 7, 0],\t// inner contents of div\n\t\t\t\t[2, 0, 7, 6],\t// outer contents of div\n\t\t\t];\n\t\t\texpectedBalanceOutRanges.forEach(([linestart, colstart, lineend, colend]) => {\n\t\t\t\tbalanceOut();\n\t\t\t\ttestSelection(editor.selection, colstart, linestart, colend, lineend);\n\t\t\t});\n\n\t\t\texpectedBalanceOutRanges.pop();\n\t\t\texpectedBalanceOutRanges.reverse().forEach(([linestart, colstart, lineend, colend]) => {\n\t\t\t\tbalanceIn();\n\t\t\t\ttestSelection(editor.selection, colstart, linestart, colend, lineend);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n});\n\nfunction testSelection(selection: Selection, startChar: number, startline: number, endChar?: number, endLine?: number) {\n\tassert.strictEqual(selection.anchor.line, startline);\n\tassert.strictEqual(selection.anchor.character, startChar);\n\tif (!endLine && endLine !== 0) {\n\t\tassert.strictEqual(selection.isSingleLine, true);\n\t} else {\n\t\tassert.strictEqual(selection.active.line, endLine);\n\t}\n\tif (!endChar && endChar !== 0) {\n\t\tassert.strictEqual(selection.isEmpty, true);\n\t} else {\n\t\tassert.strictEqual(selection.active.character, endChar);\n\t}\n}\n"
  },
  {
    "path": "extensions/emmet/src/test/evaluateMathExpression.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Position, Selection } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { evaluateMathExpression } from '../evaluateMathExpression';\n\nsuite('Tests for Evaluate Math Expression', () => {\n\tteardown(closeAllEditors);\n\n\tfunction testEvaluateMathExpression(fileContents: string, selection: [number, number] | number, expectedFileContents: string): Thenable<boolean> {\n\t\treturn withRandomFileEditor(fileContents, 'html', async (editor, _doc) => {\n\t\t\tconst selectionToUse = typeof selection === 'number' ?\n\t\t\t\tnew Selection(new Position(0, selection), new Position(0, selection)) :\n\t\t\t\tnew Selection(new Position(0, selection[0]), new Position(0, selection[1]));\n\t\t\teditor.selection = selectionToUse;\n\n\t\t\tawait evaluateMathExpression();\n\n\t\t\tassert.strictEqual(editor.document.getText(), expectedFileContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t}\n\n\ttest('Selected sanity check', () => {\n\t\treturn testEvaluateMathExpression('1 + 2', [0, 5], '3');\n\t});\n\n\ttest('Selected with surrounding text', () => {\n\t\treturn testEvaluateMathExpression('test1 + 2test', [4, 9], 'test3test');\n\t});\n\n\ttest('Selected with number not part of selection', () => {\n\t\treturn testEvaluateMathExpression('test3 1+2', [6, 9], 'test3 3');\n\t});\n\n\ttest('Non-selected sanity check', () => {\n\t\treturn testEvaluateMathExpression('1 + 2', 5, '3');\n\t});\n\n\ttest('Non-selected midway', () => {\n\t\treturn testEvaluateMathExpression('1 + 2', 1, '1 + 2');\n\t});\n\n\ttest('Non-selected with surrounding text', () => {\n\t\treturn testEvaluateMathExpression('test1 + 3test', 9, 'test4test');\n\t});\n});\n"
  },
  {
    "path": "extensions/emmet/src/test/incrementDecrement.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { incrementDecrement as incrementDecrementImpl } from '../incrementDecrement';\n\nfunction incrementDecrement(delta: number): Thenable<boolean> {\n\tconst result = incrementDecrementImpl(delta);\n\tassert.ok(result);\n\treturn result!;\n}\n\nsuite('Tests for Increment/Decrement Emmet Commands', () => {\n\tteardown(closeAllEditors);\n\n\tconst contents = `\n\thello 123.43 there\n\thello 999.9 there\n\thello 100 there\n\t`;\n\n\ttest('incrementNumberByOne', function (): any {\n\t\treturn withRandomFileEditor(contents, 'txt', async (editor, doc) => {\n\t\t\teditor.selections = [new Selection(1, 7, 1, 10), new Selection(2, 7, 2, 10)];\n\t\t\tawait incrementDecrement(1);\n\t\t\tassert.strictEqual(doc.getText(), contents.replace('123', '124').replace('999', '1000'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('incrementNumberByTen', function (): any {\n\t\treturn withRandomFileEditor(contents, 'txt', async (editor, doc) => {\n\t\t\teditor.selections = [new Selection(1, 7, 1, 10), new Selection(2, 7, 2, 10)];\n\t\t\tawait incrementDecrement(10);\n\t\t\tassert.strictEqual(doc.getText(), contents.replace('123', '133').replace('999', '1009'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('incrementNumberByOneTenth', function (): any {\n\t\treturn withRandomFileEditor(contents, 'txt', async (editor, doc) => {\n\t\t\teditor.selections = [new Selection(1, 7, 1, 13), new Selection(2, 7, 2, 12)];\n\t\t\tawait incrementDecrement(0.1);\n\t\t\tassert.strictEqual(doc.getText(), contents.replace('123.43', '123.53').replace('999.9', '1000'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('decrementNumberByOne', function (): any {\n\t\treturn withRandomFileEditor(contents, 'txt', async (editor, doc) => {\n\t\t\teditor.selections = [new Selection(1, 7, 1, 10), new Selection(3, 7, 3, 10)];\n\t\t\tawait incrementDecrement(-1);\n\t\t\tassert.strictEqual(doc.getText(), contents.replace('123', '122').replace('100', '99'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('decrementNumberByTen', function (): any {\n\t\treturn withRandomFileEditor(contents, 'txt', async (editor, doc) => {\n\t\t\teditor.selections = [new Selection(1, 7, 1, 10), new Selection(3, 7, 3, 10)];\n\t\t\tawait incrementDecrement(-10);\n\t\t\tassert.strictEqual(doc.getText(), contents.replace('123', '113').replace('100', '90'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('decrementNumberByOneTenth', function (): any {\n\t\treturn withRandomFileEditor(contents, 'txt', async (editor, doc) => {\n\t\t\teditor.selections = [new Selection(1, 7, 1, 13), new Selection(3, 7, 3, 10)];\n\t\t\tawait incrementDecrement(-0.1);\n\t\t\tassert.strictEqual(doc.getText(), contents.replace('123.43', '123.33').replace('100', '99.9'));\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/emmet/src/test/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as testRunner from '../../../../test/integration/electron/testrunner';\n\nconst options: import('mocha').MochaOptions = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\n// These integration tests is being run in multiple environments (electron, web, remote)\n// so we need to set the suite name based on the environment as the suite name is used\n// for the test results file name\nlet suite = '';\nif (process.env.VSCODE_BROWSER) {\n\tsuite = `${process.env.VSCODE_BROWSER} Browser Integration Emmet Tests`;\n} else if (process.env.REMOTE_VSCODE) {\n\tsuite = 'Remote Integration Emmet Tests';\n} else {\n\tsuite = 'Integration Emmet Tests';\n}\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\ntestRunner.configure(options);\n\nexport = testRunner;\n"
  },
  {
    "path": "extensions/emmet/src/test/partialParsingStylesheet.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { closeAllEditors, withRandomFileEditor } from './testUtils';\nimport * as vscode from 'vscode';\nimport { parsePartialStylesheet, getFlatNode } from '../util';\nimport { isValidLocationForEmmetAbbreviation } from '../abbreviationActions';\n\nsuite('Tests for partial parse of Stylesheets', () => {\n\tteardown(closeAllEditors);\n\n\tfunction isValid(doc: vscode.TextDocument, range: vscode.Range, syntax: string): boolean {\n\t\tconst rootNode = parsePartialStylesheet(doc, range.end);\n\t\tconst endOffset = doc.offsetAt(range.end);\n\t\tconst currentNode = getFlatNode(rootNode, endOffset, true);\n\t\treturn isValidLocationForEmmetAbbreviation(doc, rootNode, currentNode, syntax, endOffset, range);\n\t}\n\n\ttest('Ignore block comment inside rule', function (): any {\n\t\tconst cssContents = `\np {\n\tmargin: p ;\n\t/*dn: none; p */ p\n\tp\n\tp.\n} p\n`;\n\t\treturn withRandomFileEditor(cssContents, '.css', (_, doc) => {\n\t\t\tconst rangesForEmmet = [\n\t\t\t\tnew vscode.Range(3, 18, 3, 19),\t\t// Same line after block comment\n\t\t\t\tnew vscode.Range(4, 1, 4, 2),\t\t// p after block comment\n\t\t\t\tnew vscode.Range(5, 1, 5, 3)\t\t// p. after block comment\n\t\t\t];\n\t\t\tconst rangesNotEmmet = [\n\t\t\t\tnew vscode.Range(1, 0, 1, 1),\t\t// Selector\n\t\t\t\tnew vscode.Range(2, 9, 2, 10),\t\t// Property value\n\t\t\t\tnew vscode.Range(3, 3, 3, 5),\t\t// dn inside block comment\n\t\t\t\tnew vscode.Range(3, 13, 3, 14),\t\t// p just before ending of block comment\n\t\t\t\tnew vscode.Range(6, 2, 6, 3)\t\t// p after ending of block\n\n\t\t\t];\n\t\t\trangesForEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'css'), true);\n\t\t\t});\n\t\t\trangesNotEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'css'), false);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Ignore commented braces', function (): any {\n\t\tconst sassContents = `\n.foo\n// .foo { brs\n/* .foo { op.3\ndn\t{\n*/\n\tbgc\n} bg\n`;\n\t\treturn withRandomFileEditor(sassContents, '.scss', (_, doc) => {\n\t\t\tconst rangesNotEmmet = [\n\t\t\t\tnew vscode.Range(1, 0, 1, 4),\t\t// Selector\n\t\t\t\tnew vscode.Range(2, 3, 2, 7),\t\t// Line commented selector\n\t\t\t\tnew vscode.Range(3, 3, 3, 7),\t\t// Block commented selector\n\t\t\t\tnew vscode.Range(4, 0, 4, 2),\t\t// dn inside block comment\n\t\t\t\tnew vscode.Range(6, 1, 6, 2),\t\t// bgc inside a rule whose opening brace is commented\n\t\t\t\tnew vscode.Range(7, 2, 7, 4)\t\t// bg after ending of badly constructed block\n\t\t\t];\n\t\t\trangesNotEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), false);\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Block comment between selector and open brace', function (): any {\n\t\tconst cssContents = `\np\n/* First line\nof a multiline\ncomment */\n{\n\tmargin: p ;\n\t/*dn: none; p */ p\n\tp\n\tp.\n} p\n`;\n\t\treturn withRandomFileEditor(cssContents, '.css', (_, doc) => {\n\t\t\tconst rangesForEmmet = [\n\t\t\t\tnew vscode.Range(7, 18, 7, 19),\t\t// Same line after block comment\n\t\t\t\tnew vscode.Range(8, 1, 8, 2),\t\t// p after block comment\n\t\t\t\tnew vscode.Range(9, 1, 9, 3)\t\t// p. after block comment\n\t\t\t];\n\t\t\tconst rangesNotEmmet = [\n\t\t\t\tnew vscode.Range(1, 2, 1, 3),\t\t// Selector\n\t\t\t\tnew vscode.Range(3, 3, 3, 4),\t\t// Inside multiline comment\n\t\t\t\tnew vscode.Range(5, 0, 5, 1),\t\t// Opening Brace\n\t\t\t\tnew vscode.Range(6, 9, 6, 10),\t\t// Property value\n\t\t\t\tnew vscode.Range(7, 3, 7, 5),\t\t// dn inside block comment\n\t\t\t\tnew vscode.Range(7, 13, 7, 14),\t\t// p just before ending of block comment\n\t\t\t\tnew vscode.Range(10, 2, 10, 3)\t\t// p after ending of block\n\t\t\t];\n\t\t\trangesForEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'css'), true);\n\t\t\t});\n\t\t\trangesNotEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'css'), false);\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Nested and consecutive rulesets with errors', function (): any {\n\t\tconst sassContents = `\n.foo{\n\ta\n\ta\n}}{ p\n}\n.bar{\n\t@\n\t.rudi {\n\t\t@\n\t}\n}}}\n`;\n\t\treturn withRandomFileEditor(sassContents, '.scss', (_, doc) => {\n\t\t\tconst rangesForEmmet = [\n\t\t\t\tnew vscode.Range(2, 1, 2, 2),\t\t// Inside a ruleset before errors\n\t\t\t\tnew vscode.Range(3, 1, 3, 2),\t\t// Inside a ruleset after no serious error\n\t\t\t\tnew vscode.Range(7, 1, 7, 2),\t\t// @ inside a so far well structured ruleset\n\t\t\t\tnew vscode.Range(9, 2, 9, 3),\t\t// @ inside a so far well structured nested ruleset\n\t\t\t];\n\t\t\tconst rangesNotEmmet = [\n\t\t\t\tnew vscode.Range(4, 4, 4, 5),\t\t// p inside ruleset without proper selector\n\t\t\t\tnew vscode.Range(6, 3, 6, 4)\t\t// In selector\n\t\t\t];\n\t\t\trangesForEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), true);\n\t\t\t});\n\t\t\trangesNotEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), false);\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('One liner sass', function (): any {\n\t\tconst sassContents = `\n.foo{dn}.bar{.boo{dn}dn}.comd{/*{dn*/p{div{dn}} }.foo{.other{dn}} dn\n`;\n\t\treturn withRandomFileEditor(sassContents, '.scss', (_, doc) => {\n\t\t\tconst rangesForEmmet = [\n\t\t\t\tnew vscode.Range(1, 5, 1, 7),\t\t// Inside a ruleset\n\t\t\t\tnew vscode.Range(1, 18, 1, 20),\t\t// Inside a nested ruleset\n\t\t\t\tnew vscode.Range(1, 21, 1, 23),\t\t// Inside ruleset after nested one.\n\t\t\t\tnew vscode.Range(1, 43, 1, 45),\t\t// Inside nested ruleset after comment\n\t\t\t\tnew vscode.Range(1, 61, 1, 63)\t\t// Inside nested ruleset\n\t\t\t];\n\t\t\tconst rangesNotEmmet = [\n\t\t\t\tnew vscode.Range(1, 3, 1, 4),\t\t// In foo selector\n\t\t\t\tnew vscode.Range(1, 10, 1, 11),\t\t// In bar selector\n\t\t\t\tnew vscode.Range(1, 15, 1, 16),\t\t// In boo selector\n\t\t\t\tnew vscode.Range(1, 28, 1, 29),\t\t// In comd selector\n\t\t\t\tnew vscode.Range(1, 33, 1, 34),\t\t// In commented dn\n\t\t\t\tnew vscode.Range(1, 37, 1, 38),\t\t// In p selector\n\t\t\t\tnew vscode.Range(1, 39, 1, 42),\t\t// In div selector\n\t\t\t\tnew vscode.Range(1, 66, 1, 68)\t\t// Outside any ruleset\n\t\t\t];\n\t\t\trangesForEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), true);\n\t\t\t});\n\t\t\trangesNotEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), false);\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Variables and interpolation', function (): any {\n\t\tconst sassContents = `\np.#{dn} {\n\tp.3\n\t#{$attr}-color: blue;\n\tdn\n} op\n.foo{nes{ted}} {\n\tdn\n}\n`;\n\t\treturn withRandomFileEditor(sassContents, '.scss', (_, doc) => {\n\t\t\tconst rangesForEmmet = [\n\t\t\t\tnew vscode.Range(2, 1, 2, 4),\t\t// p.3 inside a ruleset whose selector uses interpolation\n\t\t\t\tnew vscode.Range(4, 1, 4, 3)\t\t// dn inside ruleset after property with variable\n\t\t\t];\n\t\t\tconst rangesNotEmmet = [\n\t\t\t\tnew vscode.Range(1, 0, 1, 1),\t\t// In p in selector\n\t\t\t\tnew vscode.Range(1, 2, 1, 3),\t\t// In # in selector\n\t\t\t\tnew vscode.Range(1, 4, 1, 6),\t\t// In dn inside variable in selector\n\t\t\t\tnew vscode.Range(3, 7, 3, 8),\t\t// r of attr inside variable\n\t\t\t\tnew vscode.Range(5, 2, 5, 4),\t\t// op after ruleset\n\t\t\t\tnew vscode.Range(7, 1, 7, 3),\t\t// dn inside ruleset whose selector uses nested interpolation\n\t\t\t\tnew vscode.Range(3, 1, 3, 2),\t\t// # inside ruleset\n\t\t\t];\n\t\t\trangesForEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), true);\n\t\t\t});\n\t\t\trangesNotEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), false);\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('Comments in sass', function (): any {\n\t\tconst sassContents = `\n.foo{\n\t/* p // p */ brs6-2p\n\tdn\n}\np\n/* c\nom\nment */{\n\tm10\n}\n.boo{\n\top.3\n}\n`;\n\t\treturn withRandomFileEditor(sassContents, '.scss', (_, doc) => {\n\t\t\tconst rangesForEmmet = [\n\t\t\t\tnew vscode.Range(2, 14, 2, 21),\t\t// brs6-2p with a block commented line comment ('/* */' overrides '//')\n\t\t\t\tnew vscode.Range(3, 1, 3, 3),\t\t// dn after a line with combined comments inside a ruleset\n\t\t\t\tnew vscode.Range(9, 1, 9, 4),\t\t// m10 inside ruleset whose selector is before a comment\n\t\t\t\tnew vscode.Range(12, 1, 12, 5)\t\t// op3 inside a ruleset with commented extra braces\n\t\t\t];\n\t\t\tconst rangesNotEmmet = [\n\t\t\t\tnew vscode.Range(2, 4, 2, 5),\t\t// In p inside block comment\n\t\t\t\tnew vscode.Range(2, 9, 2, 10),\t\t// In p inside block comment and after line comment\n\t\t\t\tnew vscode.Range(6, 3, 6, 4)\t\t// In c inside block comment\n\t\t\t];\n\t\t\trangesForEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), true);\n\t\t\t});\n\t\t\trangesNotEmmet.forEach(range => {\n\t\t\t\tassert.strictEqual(isValid(doc, range, 'scss'), false);\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\n});\n"
  },
  {
    "path": "extensions/emmet/src/test/reflectCssValue.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { reflectCssValue as reflectCssValueImpl } from '../reflectCssValue';\n\nfunction reflectCssValue(): Thenable<boolean> {\n\tconst result = reflectCssValueImpl();\n\tassert.ok(result);\n\treturn result!;\n}\n\nsuite('Tests for Emmet: Reflect CSS Value command', () => {\n\tteardown(closeAllEditors);\n\n\tconst cssContents = `\n\t.header {\n\t\tmargin: 10px;\n\t\tpadding: 10px;\n\t\ttransform: rotate(50deg);\n\t\t-moz-transform: rotate(20deg);\n\t\t-o-transform: rotate(50deg);\n\t\t-webkit-transform: rotate(50deg);\n\t\t-ms-transform: rotate(50deg);\n\t}\n\t`;\n\n\tconst htmlContents = `\n\t<html>\n\t\t<style>\n\t\t\t.header {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 10px;\n\t\t\t\ttransform: rotate(50deg);\n\t\t\t\t-moz-transform: rotate(20deg);\n\t\t\t\t-o-transform: rotate(50deg);\n\t\t\t\t-webkit-transform: rotate(50deg);\n\t\t\t\t-ms-transform: rotate(50deg);\n\t\t\t}\n\t\t</style>\n\t</html>\n\t`;\n\n\ttest('Reflect Css Value in css file', function (): any {\n\t\treturn withRandomFileEditor(cssContents, '.css', (editor, doc) => {\n\t\t\teditor.selections = [new Selection(5, 10, 5, 10)];\n\t\t\treturn reflectCssValue().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), cssContents.replace(/\\(50deg\\)/g, '(20deg)'));\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Reflect Css Value in css file, selecting entire property', function (): any {\n\t\treturn withRandomFileEditor(cssContents, '.css', (editor, doc) => {\n\t\t\teditor.selections = [new Selection(5, 2, 5, 32)];\n\t\t\treturn reflectCssValue().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), cssContents.replace(/\\(50deg\\)/g, '(20deg)'));\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Reflect Css Value in html file', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, '.html', (editor, doc) => {\n\t\t\teditor.selections = [new Selection(7, 20, 7, 20)];\n\t\t\treturn reflectCssValue().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), htmlContents.replace(/\\(50deg\\)/g, '(20deg)'));\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Reflect Css Value in html file, selecting entire property', function (): any {\n\t\treturn withRandomFileEditor(htmlContents, '.html', (editor, doc) => {\n\t\t\teditor.selections = [new Selection(7, 4, 7, 34)];\n\t\t\treturn reflectCssValue().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), htmlContents.replace(/\\(50deg\\)/g, '(20deg)'));\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n});\n"
  },
  {
    "path": "extensions/emmet/src/test/tagActions.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection, workspace, ConfigurationTarget } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { removeTag } from '../removeTag';\nimport { updateTag } from '../updateTag';\nimport { matchTag } from '../matchTag';\nimport { splitJoinTag } from '../splitJoinTag';\nimport { mergeLines } from '../mergeLines';\n\nsuite('Tests for Emmet actions on html tags', () => {\n\tteardown(closeAllEditors);\n\n\tconst contents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><span>Hello</span></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<span/>\n\t</div>\n\t`;\n\n\tconst spacedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\n\t\t\t<li><span>Hello</span></li>\n\n\t\t\t<li><span>There</span></li>\n\n\t\t\t<div><li><span>Bye</span></li></div>\n\n\n\t\t</ul>\n\t\t<span/>\n\t</div>\n\t`;\n\n\tconst contentsWithTemplate = `\n\t<script type=\"text/template\">\n\t\t<ul>\n\t\t\t<li><span>Hello</span></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<span/>\n\t</script>\n\t`;\n\n\ttest('update tag with multiple cursors', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><section>Hello</section></li>\n\t\t\t<section><span>There</span></section>\n\t\t\t<section><li><span>Bye</span></li></section>\n\t\t</ul>\n\t\t<span/>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 17, 3, 17), // cursor inside tags\n\t\t\t\tnew Selection(4, 5, 4, 5), // cursor inside opening tag\n\t\t\t\tnew Selection(5, 35, 5, 35), // cursor inside closing tag\n\t\t\t];\n\n\t\t\treturn updateTag('section')!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\t// #region update tag\n\ttest('update tag with entire node selected', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><section>Hello</section></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<section><li><span>Bye</span></li></section>\n\t\t</ul>\n\t\t<span/>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 7, 3, 25),\n\t\t\t\tnew Selection(5, 3, 5, 39),\n\t\t\t];\n\n\t\t\treturn updateTag('section')!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('update tag with template', () => {\n\t\tconst expectedContents = `\n\t<script type=\"text/template\">\n\t\t<section>\n\t\t\t<li><span>Hello</span></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</section>\n\t\t<span/>\n\t</script>\n\t`;\n\n\t\treturn withRandomFileEditor(contentsWithTemplate, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 4, 2, 4), // cursor inside ul tag\n\t\t\t];\n\n\t\t\treturn updateTag('section')!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\t// #endregion\n\n\t// #region remove tag\n\ttest('remove tag with multiple cursors', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li>Hello</li>\n\t\t\t<span>There</span>\n\t\t\t<li><span>Bye</span></li>\n\t\t</ul>\n\t\t<span/>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 17, 3, 17), // cursor inside tags\n\t\t\t\tnew Selection(4, 5, 4, 5), // cursor inside opening tag\n\t\t\t\tnew Selection(5, 35, 5, 35), // cursor inside closing tag\n\t\t\t];\n\n\t\t\treturn removeTag()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('remove tag with boundary conditions', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li>Hello</li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<li><span>Bye</span></li>\n\t\t</ul>\n\t\t<span/>\n\t</div>\n\t`;\n\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 7, 3, 25),\n\t\t\t\tnew Selection(5, 3, 5, 39),\n\t\t\t];\n\n\t\t\treturn removeTag()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\n\ttest('remove tag with template', () => {\n\t\tconst expectedContents = `\n\t<script type=\"text/template\">\n\t\t<li><span>Hello</span></li>\n\t\t<li><span>There</span></li>\n\t\t<div><li><span>Bye</span></li></div>\n\t\t<span/>\n\t</script>\n\t`;\n\t\treturn withRandomFileEditor(contentsWithTemplate, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 4, 2, 4), // cursor inside ul tag\n\t\t\t];\n\n\t\t\treturn removeTag()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('remove tag with extra trim', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<li><span>Hello</span></li>\n\n\t\t<li><span>There</span></li>\n\n\t\t<div><li><span>Bye</span></li></div>\n\t\t<span/>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(spacedContents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 4, 2, 4), // cursor inside ul tag\n\t\t\t];\n\n\t\t\treturn removeTag()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\t// #endregion\n\n\t// #region split/join tag\n\ttest('split/join tag with multiple cursors', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><span/></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<span></span>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 17, 3, 17), // join tag\n\t\t\t\tnew Selection(7, 5, 7, 5), // split tag\n\t\t\t];\n\n\t\t\treturn splitJoinTag()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('split/join tag with boundary selection', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><span/></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<span></span>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 7, 3, 25), // join tag\n\t\t\t\tnew Selection(7, 2, 7, 9), // split tag\n\t\t\t];\n\n\t\t\treturn splitJoinTag()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('split/join tag with templates', () => {\n\t\tconst expectedContents = `\n\t<script type=\"text/template\">\n\t\t<ul>\n\t\t\t<li><span/></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<span></span>\n\t</script>\n\t`;\n\t\treturn withRandomFileEditor(contentsWithTemplate, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 17, 3, 17), // join tag\n\t\t\t\tnew Selection(7, 5, 7, 5), // split tag\n\t\t\t];\n\n\t\t\treturn splitJoinTag()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('split/join tag in jsx with xhtml self closing tag', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><span /></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<span></span>\n\t</div>\n\t`;\n\t\tconst oldValueForSyntaxProfiles = workspace.getConfiguration('emmet').inspect('syntaxProfiles');\n\t\treturn workspace.getConfiguration('emmet').update('syntaxProfiles', { jsx: { selfClosingStyle: 'xhtml' } }, ConfigurationTarget.Global).then(() => {\n\t\t\treturn withRandomFileEditor(contents, 'jsx', (editor, doc) => {\n\t\t\t\teditor.selections = [\n\t\t\t\t\tnew Selection(3, 17, 3, 17), // join tag\n\t\t\t\t\tnew Selection(7, 5, 7, 5), // split tag\n\t\t\t\t];\n\n\t\t\t\treturn splitJoinTag()!.then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\t\treturn workspace.getConfiguration('emmet').update('syntaxProfiles', oldValueForSyntaxProfiles ? oldValueForSyntaxProfiles.globalValue : undefined, ConfigurationTarget.Global);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\t// #endregion\n\n\t// #region match tag\n\ttest('match tag with multiple cursors', () => {\n\t\treturn withRandomFileEditor(contents, 'html', (editor, _) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(1, 0, 1, 0), // just before tag starts, i.e before <\n\t\t\t\tnew Selection(1, 1, 1, 1), // just before tag name starts\n\t\t\t\tnew Selection(1, 2, 1, 2), // inside tag name\n\t\t\t\tnew Selection(1, 6, 1, 6), // after tag name but before opening tag ends\n\t\t\t\tnew Selection(1, 18, 1, 18), // just before opening tag ends\n\t\t\t\tnew Selection(1, 19, 1, 19), // just after opening tag ends\n\t\t\t];\n\n\t\t\tmatchTag();\n\n\t\t\teditor.selections.forEach(selection => {\n\t\t\t\tassert.strictEqual(selection.active.line, 8);\n\t\t\t\tassert.strictEqual(selection.active.character, 3);\n\t\t\t\tassert.strictEqual(selection.anchor.line, 8);\n\t\t\t\tassert.strictEqual(selection.anchor.character, 3);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\ttest('match tag with template scripts', () => {\n\t\tconst templateScript = `\n\t<script type=\"text/template\">\n\t\t<div>\n\t\t\tHello\n\t\t</div>\n\t</script>`;\n\n\t\treturn withRandomFileEditor(templateScript, 'html', (editor, _) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 2, 2, 2), // just before div tag starts, i.e before <\n\t\t\t];\n\n\t\t\tmatchTag();\n\n\t\t\teditor.selections.forEach(selection => {\n\t\t\t\tassert.strictEqual(selection.active.line, 4);\n\t\t\t\tassert.strictEqual(selection.active.character, 4);\n\t\t\t\tassert.strictEqual(selection.anchor.line, 4);\n\t\t\t\tassert.strictEqual(selection.anchor.character, 4);\n\t\t\t});\n\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n\n\t// #endregion\n\n\t// #region merge lines\n\ttest('merge lines of tag with children when empty selection', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul><li><span>Hello</span></li><li><span>There</span></li><div><li><span>Bye</span></li></div></ul>\n\t\t<span/>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 3, 2, 3)\n\t\t\t];\n\n\t\t\treturn mergeLines()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('merge lines of tag with children when full node selection', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul><li><span>Hello</span></li><li><span>There</span></li><div><li><span>Bye</span></li></div></ul>\n\t\t<span/>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 3, 6, 7)\n\t\t\t];\n\n\t\t\treturn mergeLines()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('merge lines is no-op when start and end nodes are on the same line', () => {\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 9, 3, 9), // cursor is inside the <span> in <li><span>Hello</span></li>\n\t\t\t\tnew Selection(4, 5, 4, 5), // cursor is inside the <li> in <li><span>Hello</span></li>\n\t\t\t\tnew Selection(5, 5, 5, 20) // selection spans multiple nodes in the same line\n\t\t\t];\n\n\t\t\treturn mergeLines()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\t// #endregion\n});\n\n"
  },
  {
    "path": "extensions/emmet/src/test/testUtils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport { join } from 'path';\n\nexport function rndName() {\n\tlet name = '';\n\tconst possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tfor (let i = 0; i < 10; i++) {\n\t\tname += possible.charAt(Math.floor(Math.random() * possible.length));\n\t}\n\treturn name;\n}\n\nexport function createRandomFile(contents = '', fileExtension = 'txt'): Thenable<vscode.Uri> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst tmpFile = join(os.tmpdir(), rndName() + '.' + fileExtension);\n\t\tfs.writeFile(tmpFile, contents, (error) => {\n\t\t\tif (error) {\n\t\t\t\treturn reject(error);\n\t\t\t}\n\n\t\t\tresolve(vscode.Uri.file(tmpFile));\n\t\t});\n\t});\n}\n\nexport function pathEquals(path1: string, path2: string): boolean {\n\tif (process.platform !== 'linux') {\n\t\tpath1 = path1.toLowerCase();\n\t\tpath2 = path2.toLowerCase();\n\t}\n\n\treturn path1 === path2;\n}\n\nexport function deleteFile(file: vscode.Uri): Thenable<boolean> {\n\treturn new Promise((resolve, reject) => {\n\t\tfs.unlink(file.fsPath, (err) => {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tresolve(true);\n\t\t\t}\n\t\t});\n\t});\n}\n\nexport function closeAllEditors(): Thenable<any> {\n\treturn vscode.commands.executeCommand('workbench.action.closeAllEditors');\n}\n\nexport function withRandomFileEditor(initialContents: string, fileExtension: string = 'txt', run: (editor: vscode.TextEditor, doc: vscode.TextDocument) => Thenable<void>): Thenable<boolean> {\n\treturn createRandomFile(initialContents, fileExtension).then(file => {\n\t\treturn vscode.workspace.openTextDocument(file).then(doc => {\n\t\t\treturn vscode.window.showTextDocument(doc).then((editor) => {\n\t\t\t\treturn run(editor, doc).then(_ => {\n\t\t\t\t\tif (doc.isDirty) {\n\t\t\t\t\t\treturn doc.save().then(() => {\n\t\t\t\t\t\t\treturn deleteFile(file);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn deleteFile(file);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "extensions/emmet/src/test/toggleComment.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { toggleComment as toggleCommentImpl } from '../toggleComment';\n\nfunction toggleComment(): Thenable<boolean> {\n\tconst result = toggleCommentImpl();\n\tassert.ok(result);\n\treturn result!;\n}\n\nsuite('Tests for Toggle Comment action from Emmet (HTML)', () => {\n\tteardown(closeAllEditors);\n\n\tconst contents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><span>Hello</span></li>\n\t\t\t<li><span>There</span></li>\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<ul>\n\t\t\t<!-- <li>Previously Commented Node</li> -->\n\t\t\t<li>Another Node</li>\n\t\t</ul>\n\t\t<span/>\n\t\t<style>\n\t\t\t.boo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t\t.hoo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t</style>\n\t</div>\n\t`;\n\n\ttest('toggle comment with multiple cursors, but no selection (HTML)', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><!-- <span>Hello</span> --></li>\n\t\t\t<!-- <li><span>There</span></li> -->\n\t\t\t<!-- <div><li><span>Bye</span></li></div> -->\n\t\t</ul>\n\t\t<!-- <ul>\n\t\t\t<li>Previously Commented Node</li>\n\t\t\t<li>Another Node</li>\n\t\t</ul> -->\n\t\t<span/>\n\t\t<style>\n\t\t\t.boo {\n\t\t\t\t/* margin: 10px; */\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t\t/* .hoo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t} */\n\t\t</style>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 17, 3, 17), // cursor inside the inner span element\n\t\t\t\tnew Selection(4, 5, 4, 5), // cursor inside opening tag\n\t\t\t\tnew Selection(5, 35, 5, 35), // cursor inside closing tag\n\t\t\t\tnew Selection(7, 3, 7, 3), // cursor inside open tag of <ul> one of whose children is already commented\n\t\t\t\tnew Selection(14, 8, 14, 8), // cursor inside the css property inside the style tag\n\t\t\t\tnew Selection(18, 3, 18, 3) // cursor inside the css rule inside the style tag\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment with multiple cursors and whole node selected (HTML)', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><!-- <span>Hello</span> --></li>\n\t\t\t<!-- <li><span>There</span></li> -->\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<!-- <ul>\n\t\t\t<li>Previously Commented Node</li>\n\t\t\t<li>Another Node</li>\n\t\t</ul> -->\n\t\t<span/>\n\t\t<style>\n\t\t\t.boo {\n\t\t\t\t/* margin: 10px; */\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t\t/* .hoo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t} */\n\t\t</style>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 7, 3, 25), // <span>Hello</span><\n\t\t\t\tnew Selection(4, 3, 4, 30), // <li><span>There</span></li>\n\t\t\t\tnew Selection(7, 2, 10, 7), // The <ul> one of whose children is already commented\n\t\t\t\tnew Selection(14, 4, 14, 17), // css property inside the style tag\n\t\t\t\tnew Selection(17, 3, 20, 4) // the css rule inside the style tag\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when multiple nodes are completely under single selection (HTML)', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<!-- <li><span>Hello</span></li>\n\t\t\t<li><span>There</span></li> -->\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<ul>\n\t\t\t<!-- <li>Previously Commented Node</li> -->\n\t\t\t<li>Another Node</li>\n\t\t</ul>\n\t\t<span/>\n\t\t<style>\n\t\t\t.boo {\n\t\t\t\t/* margin: 10px;\n\t\t\t\tpadding: 20px; */\n\t\t\t}\n\t\t\t.hoo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t</style>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 4, 4, 30),\n\t\t\t\tnew Selection(14, 4, 15, 18) // 2 css properties inside the style tag\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when multiple nodes are partially under single selection (HTML)', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<!-- <li><span>Hello</span></li>\n\t\t\t<li><span>There</span></li> -->\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<!-- <ul>\n\t\t\t<li>Previously Commented Node</li>\n\t\t\t<li>Another Node</li>\n\t\t</ul> -->\n\t\t<span/>\n\t\t<style>\n\t\t\t.boo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t\t.hoo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t</style>\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 24, 4, 20),\n\t\t\t\tnew Selection(7, 2, 9, 10) // The <ul> one of whose children is already commented\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment with multiple cursors selecting parent and child nodes', () => {\n\t\tconst expectedContents = `\n\t<div class=\"hello\">\n\t\t<ul>\n\t\t\t<li><!-- <span>Hello</span> --></li>\n\t\t\t<!-- <li><span>There</span></li> -->\n\t\t\t<div><li><span>Bye</span></li></div>\n\t\t</ul>\n\t\t<!-- <ul>\n\t\t\t<li>Previously Commented Node</li>\n\t\t\t<li>Another Node</li>\n\t\t</ul> -->\n\t\t<span/>\n\t\t<!-- <style>\n\t\t\t.boo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t\t.hoo {\n\t\t\t\tmargin: 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\t\t</style> -->\n\t</div>\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 17, 3, 17), // cursor inside the inner span element\n\t\t\t\tnew Selection(4, 5, 4, 5), // two cursors: one inside opening tag\n\t\t\t\tnew Selection(4, 17, 4, 17), // \t\tand the second inside the inner span element\n\t\t\t\tnew Selection(7, 3, 7, 3), // two cursors: one inside open tag of <ul> one of whose children is already commented\n\t\t\t\tnew Selection(9, 10, 9, 10), // \tand the second inside inner li element, whose parent is selected\n\t\t\t\tnew Selection(12, 3, 12, 3), // four nested cursors: one inside the style open tag\n\t\t\t\tnew Selection(14, 8, 14, 8), // \tthe second inside the css property inside the style tag\n\t\t\t\tnew Selection(18, 3, 18, 3), // \tthe third inside the css rule inside the style tag\n\t\t\t\tnew Selection(19, 8, 19, 8) // \t\tand the fourth inside the css property inside the style tag\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment within script template', () => {\n\t\tconst templateContents = `\n\t<script type=\"text/template\">\n\t\t<li><span>Hello</span></li>\n\t\t<li><!-- <span>There</span> --></li>\n\t\t<div><li><span>Bye</span></li></div>\n\t\t<span/>\n\t</script>\n\t`;\n\t\tconst expectedContents = `\n\t<script type=\"text/template\">\n\t\t<!-- <li><span>Hello</span></li> -->\n\t\t<li><span>There</span></li>\n\t\t<div><li><!-- <span>Bye</span> --></li></div>\n\t\t<span/>\n\t</script>\n\t`;\n\t\treturn withRandomFileEditor(templateContents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 2, 2, 28), // select entire li element\n\t\t\t\tnew Selection(3, 17, 3, 17), // cursor inside the commented span\n\t\t\t\tnew Selection(4, 18, 4, 18), // cursor inside the noncommented span\n\t\t\t];\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n});\n\nsuite('Tests for Toggle Comment action from Emmet (CSS)', () => {\n\tteardown(closeAllEditors);\n\n\tconst contents = `\n\t.one {\n\t\tmargin: 10px;\n\t\tpadding: 10px;\n\t}\n\t.two {\n\t\theight: 42px;\n\t\tdisplay: none;\n\t}\n\t.three {\n\t\twidth: 42px;\n\t}`;\n\n\ttest('toggle comment with multiple cursors, but no selection (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* margin: 10px; */\n\t\tpadding: 10px;\n\t}\n\t/* .two {\n\t\theight: 42px;\n\t\tdisplay: none;\n\t} */\n\t.three {\n\t\twidth: 42px;\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 5, 2, 5), // cursor inside a property\n\t\t\t\tnew Selection(5, 4, 5, 4), // cursor inside selector\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment with multiple cursors and whole node selected (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* margin: 10px; */\n\t\t/* padding: 10px; */\n\t}\n\t/* .two {\n\t\theight: 42px;\n\t\tdisplay: none;\n\t} */\n\t.three {\n\t\twidth: 42px;\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 2, 2, 15), // A property completely selected\n\t\t\t\tnew Selection(3, 0, 3, 16), // A property completely selected along with whitespace\n\t\t\t\tnew Selection(5, 1, 8, 2), // A rule completely selected\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\t//return toggleComment().then(() => {\n\t\t\t\t//assert.strictEqual(doc.getText(), contents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t\t//});\n\t\t\t});\n\t\t});\n\t});\n\n\n\n\ttest('toggle comment when multiple nodes of same parent are completely under single selection (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n/* \t\tmargin: 10px;\n\t\tpadding: 10px; */\n\t}\n\t/* .two {\n\t\theight: 42px;\n\t\tdisplay: none;\n\t}\n\t.three {\n\t\twidth: 42px;\n\t} */`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 0, 3, 16), // 2 properties completely under a single selection along with whitespace\n\t\t\t\tnew Selection(5, 1, 11, 2), // 2 rules completely under a single selection\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when start and end of selection is inside properties of separate rules (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\tmargin: 10px;\n\t\t/* padding: 10px;\n\t}\n\t.two {\n\t\theight: 42px; */\n\t\tdisplay: none;\n\t}\n\t.three {\n\t\twidth: 42px;\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 7, 6, 6)\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when selection spans properties of separate rules, with start in whitespace and end inside the property (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\tmargin: 10px;\n\t\t/* padding: 10px;\n\t}\n\t.two {\n\t\theight: 42px; */\n\t\tdisplay: none;\n\t}\n\t.three {\n\t\twidth: 42px;\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 0, 6, 6)\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when selection spans properties of separate rules, with end in whitespace and start inside the property (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\tmargin: 10px;\n\t\t/* padding: 10px;\n\t}\n\t.two {\n\t\theight: 42px; */\n\t\tdisplay: none;\n\t}\n\t.three {\n\t\twidth: 42px;\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 7, 7, 0)\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when selection spans properties of separate rules, with both start and end in whitespace (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\tmargin: 10px;\n\t\t/* padding: 10px;\n\t}\n\t.two {\n\t\theight: 42px; */\n\t\tdisplay: none;\n\t}\n\t.three {\n\t\twidth: 42px;\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(3, 0, 7, 0)\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when multiple nodes of same parent are partially under single selection (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* margin: 10px;\n\t\tpadding: 10px; */\n\t}\n\t/* .two {\n\t\theight: 42px;\n\t\tdisplay: none;\n\t}\n\t.three {\n\t\twidth: 42px;\n */\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 7, 3, 10), // 2 properties partially under a single selection\n\t\t\t\tnew Selection(5, 2, 11, 0), // 2 rules partially under a single selection\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\n});\n\n\nsuite('Tests for Toggle Comment action from Emmet in nested css (SCSS)', () => {\n\tteardown(closeAllEditors);\n\n\tconst contents = `\n\t.one {\n\t\theight: 42px;\n\n\t\t.two {\n\t\t\twidth: 42px;\n\t\t}\n\n\t\t.three {\n\t\t\tpadding: 10px;\n\t\t}\n\t}`;\n\n\ttest('toggle comment with multiple cursors selecting nested nodes (SCSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* height: 42px; */\n\n\t\t/* .two {\n\t\t\twidth: 42px;\n\t\t} */\n\n\t\t.three {\n\t\t\t/* padding: 10px; */\n\t\t}\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 5, 2, 5), // cursor inside a property\n\t\t\t\tnew Selection(4, 4, 4, 4), // two cursors: one inside a nested rule\n\t\t\t\tnew Selection(5, 5, 5, 5), // \t\tand the second one inside a nested property\n\t\t\t\tnew Selection(9, 5, 9, 5) // cursor inside a property inside a nested rule\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\ttest('toggle comment with multiple cursors selecting several nested nodes (SCSS)', () => {\n\t\tconst expectedContents = `\n\t/* .one {\n\t\theight: 42px;\n\n\t\t.two {\n\t\t\twidth: 42px;\n\t\t}\n\n\t\t.three {\n\t\t\tpadding: 10px;\n\t\t}\n\t} */`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(1, 3, 1, 3), // cursor in the outside rule. And several cursors inside:\n\t\t\t\tnew Selection(2, 5, 2, 5), // cursor inside a property\n\t\t\t\tnew Selection(4, 4, 4, 4), // two cursors: one inside a nested rule\n\t\t\t\tnew Selection(5, 5, 5, 5), // \t\tand the second one inside a nested property\n\t\t\t\tnew Selection(9, 5, 9, 5) // cursor inside a property inside a nested rule\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment with multiple cursors, but no selection (SCSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* height: 42px; */\n\n\t\t/* .two {\n\t\t\twidth: 42px;\n\t\t} */\n\n\t\t.three {\n\t\t\t/* padding: 10px; */\n\t\t}\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 5, 2, 5), // cursor inside a property\n\t\t\t\tnew Selection(4, 4, 4, 4), // cursor inside a nested rule\n\t\t\t\tnew Selection(9, 5, 9, 5) // cursor inside a property inside a nested rule\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\t//return toggleComment().then(() => {\n\t\t\t\t//\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t\t//});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment with multiple cursors and whole node selected (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* height: 42px; */\n\n\t\t/* .two {\n\t\t\twidth: 42px;\n\t\t} */\n\n\t\t.three {\n\t\t\t/* padding: 10px; */\n\t\t}\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 2, 2, 15), // A property completely selected\n\t\t\t\tnew Selection(4, 2, 6, 3), // A rule completely selected\n\t\t\t\tnew Selection(9, 3, 9, 17) // A property inside a nested rule completely selected\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\n\n\ttest('toggle comment when multiple nodes are completely under single selection (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* height: 42px;\n\n\t\t.two {\n\t\t\twidth: 42px;\n\t\t} */\n\n\t\t.three {\n\t\t\tpadding: 10px;\n\t\t}\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 2, 6, 3), // A properties and a nested rule completely under a single selection\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment when multiple nodes are partially under single selection (CSS)', () => {\n\t\tconst expectedContents = `\n\t.one {\n\t\t/* height: 42px;\n\n\t\t.two {\n\t\t\twidth: 42px;\n\t */\t}\n\n\t\t.three {\n\t\t\tpadding: 10px;\n\t\t}\n\t}`;\n\t\treturn withRandomFileEditor(contents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 6, 6, 1), // A properties and a nested rule partially under a single selection\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('toggle comment doesn\\'t fail when start and end nodes differ HTML', () => {\n\t\tconst contents = `\n\t<div>\n\t\t<p>Hello</p>\n\t</div>\n\t`;\n\t\tconst expectedContents = `\n\t<!-- <div>\n\t\t<p>Hello</p>\n\t</div> -->\n\t`;\n\t\treturn withRandomFileEditor(contents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(1, 2, 2, 9), // <div> to <p> inclusive\n\t\t\t];\n\n\t\t\treturn toggleComment().then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn toggleComment().then(() => {\n\t\t\t\t\tassert.strictEqual(doc.getText(), contents);\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/emmet/src/test/updateImageSize.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { updateImageSize } from '../updateImageSize';\n\nsuite('Tests for Emmet actions on html tags', () => {\n\tteardown(closeAllEditors);\n\n\tconst imageUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAHYcAAB2HAY/l8WUAAAATSURBVBhXY/jPwADGDP////8PAB/uBfuDMzhuAAAAAElFTkSuQmCC';\n\tconst imageWidth = 2;\n\tconst imageHeight = 2;\n\n\ttest('update image css with multiple cursors in css file', () => {\n\t\tconst cssContents = `\n\t\t.one {\n\t\t\tmargin: 10px;\n\t\t\tpadding: 10px;\n\t\t\tbackground-image: url('${imageUrl}');\n\t\t}\n\t\t.two {\n\t\t\tbackground-image: url('${imageUrl}');\n\t\t\theight: 42px;\n\t\t}\n\t\t.three {\n\t\t\tbackground-image: url('${imageUrl}');\n\t\t\twidth: 42px;\n\t\t}\n\t`;\n\t\tconst expectedContents = `\n\t\t.one {\n\t\t\tmargin: 10px;\n\t\t\tpadding: 10px;\n\t\t\tbackground-image: url('${imageUrl}');\n\t\t\twidth: ${imageWidth}px;\n\t\t\theight: ${imageHeight}px;\n\t\t}\n\t\t.two {\n\t\t\tbackground-image: url('${imageUrl}');\n\t\t\twidth: ${imageWidth}px;\n\t\t\theight: ${imageHeight}px;\n\t\t}\n\t\t.three {\n\t\t\tbackground-image: url('${imageUrl}');\n\t\t\theight: ${imageHeight}px;\n\t\t\twidth: ${imageWidth}px;\n\t\t}\n\t`;\n\t\treturn withRandomFileEditor(cssContents, 'css', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(4, 50, 4, 50),\n\t\t\t\tnew Selection(7, 50, 7, 50),\n\t\t\t\tnew Selection(11, 50, 11, 50)\n\t\t\t];\n\n\t\t\treturn updateImageSize()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('update image size in css in html file with multiple cursors', () => {\n\t\tconst htmlWithCssContents = `\n\t\t<html>\n\t\t\t<style>\n\t\t\t\t.one {\n\t\t\t\t\tmargin: 10px;\n\t\t\t\t\tpadding: 10px;\n\t\t\t\t\tbackground-image: url('${imageUrl}');\n\t\t\t\t}\n\t\t\t\t.two {\n\t\t\t\t\tbackground-image: url('${imageUrl}');\n\t\t\t\t\theight: 42px;\n\t\t\t\t}\n\t\t\t\t.three {\n\t\t\t\t\tbackground-image: url('${imageUrl}');\n\t\t\t\t\twidth: 42px;\n\t\t\t\t}\n\t\t\t</style>\n\t\t</html>\n\t`;\n\t\tconst expectedContents = `\n\t\t<html>\n\t\t\t<style>\n\t\t\t\t.one {\n\t\t\t\t\tmargin: 10px;\n\t\t\t\t\tpadding: 10px;\n\t\t\t\t\tbackground-image: url('${imageUrl}');\n\t\t\t\t\twidth: ${imageWidth}px;\n\t\t\t\t\theight: ${imageHeight}px;\n\t\t\t\t}\n\t\t\t\t.two {\n\t\t\t\t\tbackground-image: url('${imageUrl}');\n\t\t\t\t\twidth: ${imageWidth}px;\n\t\t\t\t\theight: ${imageHeight}px;\n\t\t\t\t}\n\t\t\t\t.three {\n\t\t\t\t\tbackground-image: url('${imageUrl}');\n\t\t\t\t\theight: ${imageHeight}px;\n\t\t\t\t\twidth: ${imageWidth}px;\n\t\t\t\t}\n\t\t\t</style>\n\t\t</html>\n\t`;\n\t\treturn withRandomFileEditor(htmlWithCssContents, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(6, 50, 6, 50),\n\t\t\t\tnew Selection(9, 50, 9, 50),\n\t\t\t\tnew Selection(13, 50, 13, 50)\n\t\t\t];\n\n\t\t\treturn updateImageSize()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('update image size in img tag in html file with multiple cursors', () => {\n\t\tconst htmlwithimgtag = `\n\t\t<html>\n\t\t\t<img id=\"one\" src=\"${imageUrl}\" />\n\t\t\t<img id=\"two\" src=\"${imageUrl}\" width=\"56\" />\n\t\t\t<img id=\"three\" src=\"${imageUrl}\" height=\"56\" />\n\t\t</html>\n\t`;\n\t\tconst expectedContents = `\n\t\t<html>\n\t\t\t<img id=\"one\" src=\"${imageUrl}\" width=\"${imageWidth}\" height=\"${imageHeight}\" />\n\t\t\t<img id=\"two\" src=\"${imageUrl}\" width=\"${imageWidth}\" height=\"${imageHeight}\" />\n\t\t\t<img id=\"three\" src=\"${imageUrl}\" height=\"${imageHeight}\" width=\"${imageWidth}\" />\n\t\t</html>\n\t`;\n\t\treturn withRandomFileEditor(htmlwithimgtag, 'html', (editor, doc) => {\n\t\t\teditor.selections = [\n\t\t\t\tnew Selection(2, 50, 2, 50),\n\t\t\t\tnew Selection(3, 50, 3, 50),\n\t\t\t\tnew Selection(4, 50, 4, 50)\n\t\t\t];\n\n\t\t\treturn updateImageSize()!.then(() => {\n\t\t\t\tassert.strictEqual(doc.getText(), expectedContents);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/emmet/src/test/wrapWithAbbreviation.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { Selection, workspace, ConfigurationTarget } from 'vscode';\nimport { withRandomFileEditor, closeAllEditors } from './testUtils';\nimport { wrapWithAbbreviation } from '../abbreviationActions';\n\nconst htmlContentsForBlockWrapTests = `\n\t<ul class=\"nav main\">\n\t\t<li class=\"item1\">img</li>\n\t\t<li class=\"item2\">$hithere</li>\n\t\t<li class=\"item3\">\\${hithere}</li>\n\t</ul>\n`;\n\nconst htmlContentsForInlineWrapTests = `\n\t<ul class=\"nav main\">\n\t\t<em class=\"item1\">img</em>\n\t\t<em class=\"item2\">$hithere</em>\n\t\t<em class=\"item3\">\\${hithere}</em>\n\t</ul>\n`;\n\nconst wrapBlockElementExpected = `\n\t<ul class=\"nav main\">\n\t\t<div>\n\t\t\t<li class=\"item1\">img</li>\n\t\t</div>\n\t\t<div>\n\t\t\t<li class=\"item2\">$hithere</li>\n\t\t</div>\n\t\t<div>\n\t\t\t<li class=\"item3\">\\${hithere}</li>\n\t\t</div>\n\t</ul>\n`;\n\nconst wrapInlineElementExpected = `\n\t<ul class=\"nav main\">\n\t\t<span><em class=\"item1\">img</em></span>\n\t\t<span><em class=\"item2\">$hithere</em></span>\n\t\t<span><em class=\"item3\">\\${hithere}</em></span>\n\t</ul>\n`;\n\nconst wrapSnippetExpected = `\n\t<ul class=\"nav main\">\n\t\t<a href=\"\">\n\t\t\t<li class=\"item1\">img</li>\n\t\t</a>\n\t\t<a href=\"\">\n\t\t\t<li class=\"item2\">$hithere</li>\n\t\t</a>\n\t\t<a href=\"\">\n\t\t\t<li class=\"item3\">\\${hithere}</li>\n\t\t</a>\n\t</ul>\n`;\n\nconst wrapMultiLineAbbrExpected = `\n\t<ul class=\"nav main\">\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\t<li class=\"item1\">img</li>\n\t\t\t</li>\n\t\t</ul>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\t<li class=\"item2\">$hithere</li>\n\t\t\t</li>\n\t\t</ul>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\t<li class=\"item3\">\\${hithere}</li>\n\t\t\t</li>\n\t\t</ul>\n\t</ul>\n`;\n\n// technically a bug, but also a feature (requested behaviour)\n// https://github.com/microsoft/vscode/issues/78015\nconst wrapInlineElementExpectedFormatFalse = `\n\t<ul class=\"nav main\">\n\t\t<h1>\n\t\t\t<li class=\"item1\">img</li>\n\t\t</h1>\n\t\t<h1>\n\t\t\t<li class=\"item2\">$hithere</li>\n\t\t</h1>\n\t\t<h1>\n\t\t\t<li class=\"item3\">\\${hithere}</li>\n\t\t</h1>\n\t</ul>\n`;\n\nsuite('Tests for Wrap with Abbreviations', () => {\n\tteardown(closeAllEditors);\n\n\tconst multiCursors = [new Selection(2, 6, 2, 6), new Selection(3, 6, 3, 6), new Selection(4, 6, 4, 6)];\n\tconst multiCursorsWithSelection = [new Selection(2, 2, 2, 28), new Selection(3, 2, 3, 33), new Selection(4, 6, 4, 36)];\n\tconst multiCursorsWithFullLineSelection = [new Selection(2, 0, 2, 28), new Selection(3, 0, 3, 33), new Selection(4, 0, 4, 36)];\n\n\tconst oldValueForSyntaxProfiles = workspace.getConfiguration('emmet').inspect('syntaxProfiles');\n\n\ttest('Wrap with block element using multi cursor', () => {\n\t\treturn testWrapWithAbbreviation(multiCursors, 'div', wrapBlockElementExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with inline element using multi cursor', () => {\n\t\treturn testWrapWithAbbreviation(multiCursors, 'span', wrapInlineElementExpected, htmlContentsForInlineWrapTests);\n\t});\n\n\ttest('Wrap with snippet using multi cursor', () => {\n\t\treturn testWrapWithAbbreviation(multiCursors, 'a', wrapSnippetExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with multi line abbreviation using multi cursor', () => {\n\t\treturn testWrapWithAbbreviation(multiCursors, 'ul>li', wrapMultiLineAbbrExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with block element using multi cursor selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithSelection, 'div', wrapBlockElementExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with inline element using multi cursor selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithSelection, 'span', wrapInlineElementExpected, htmlContentsForInlineWrapTests);\n\t});\n\n\ttest('Wrap with snippet using multi cursor selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithSelection, 'a', wrapSnippetExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with multi line abbreviation using multi cursor selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithSelection, 'ul>li', wrapMultiLineAbbrExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with block element using multi cursor full line selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'div', wrapBlockElementExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with inline element using multi cursor full line selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'span', wrapInlineElementExpected, htmlContentsForInlineWrapTests);\n\t});\n\n\ttest('Wrap with snippet using multi cursor full line selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'a', wrapSnippetExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with multi line abbreviation using multi cursor full line selection', () => {\n\t\treturn testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'ul>li', wrapMultiLineAbbrExpected, htmlContentsForBlockWrapTests);\n\t});\n\n\ttest('Wrap with abbreviation and comment filter', () => {\n\t\tconst contents = `\n\t<ul class=\"nav main\">\n\t\tline\n\t</ul>\n\t`;\n\t\tconst expectedContents = `\n\t<ul class=\"nav main\">\n\t\t<li class=\"hello\">line</li>\n\t\t<!-- /.hello -->\n\t</ul>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(2, 0, 2, 0)], 'li.hello|c', expectedContents, contents);\n\t});\n\n\ttest('Wrap with abbreviation link', () => {\n\t\tconst contents = `\n\t<ul class=\"nav main\">\n\t\tline\n\t</ul>\n\t`;\n\t\tconst expectedContents = `\n\t<a href=\"https://example.com\">\n\t\t<div>\n\t\t\t<ul class=\"nav main\">\n\t\t\t\tline\n\t\t\t</ul>\n\t\t</div>\n\t</a>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(1, 2, 1, 2)], 'a[href=\"https://example.com\"]>div', expectedContents, contents);\n\t});\n\n\ttest('Wrap with abbreviation entire node when cursor is on opening tag', () => {\n\t\tconst contents = `\n\t<div class=\"nav main\">\n\t\thello\n\t</div>\n\t`;\n\t\tconst expectedContents = `\n\t<div>\n\t\t<div class=\"nav main\">\n\t\t\thello\n\t\t</div>\n\t</div>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(1, 2, 1, 2)], 'div', expectedContents, contents);\n\t});\n\n\ttest('Wrap with abbreviation entire node when cursor is on closing tag', () => {\n\t\tconst contents = `\n\t<div class=\"nav main\">\n\t\thello\n\t</div>\n\t`;\n\t\tconst expectedContents = `\n\t<div>\n\t\t<div class=\"nav main\">\n\t\t\thello\n\t\t</div>\n\t</div>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(3, 2, 3, 2)], 'div', expectedContents, contents);\n\t});\n\n\ttest('Wrap with abbreviation inner node in cdata', () => {\n\t\tconst contents = `\n\t<div class=\"nav main\">\n\t\t<![CDATA[\n\t\t\t<div>\n\t\t\t\t<p>Test 1</p>\n\t\t\t</div>\n\t\t\t<p>Test 2</p>\n\t\t]]>\n\t\thello\n\t</div>\n\t`;\n\t\tconst expectedContents = `\n\t<div class=\"nav main\">\n\t\t<![CDATA[\n\t\t\t<div>\n\t\t\t\t<p>Test 1</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<p>Test 2</p>\n\t\t\t</div>\n\t\t]]>\n\t\thello\n\t</div>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(6, 5, 6, 5)], 'div', expectedContents, contents);\n\t});\n\n\ttest('Wrap with abbreviation inner node in script in cdata', () => {\n\t\tconst contents = `\n\t<div class=\"nav main\">\n\t\t<![CDATA[\n\t\t\t<script type=\"text/plain\">\n\t\t\t\t<p>Test 1</p>\n\t\t\t</script>\n\t\t\t<p>Test 2</p>\n\t\t]]>\n\t\thello\n\t</div>\n\t`;\n\t\tconst expectedContents = `\n\t<div class=\"nav main\">\n\t\t<![CDATA[\n\t\t\t<script type=\"text/plain\">\n\t\t\t\t<div>\n\t\t\t\t\t<p>Test 1</p>\n\t\t\t\t</div>\n\t\t\t</script>\n\t\t\t<p>Test 2</p>\n\t\t]]>\n\t\thello\n\t</div>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(4, 10, 4, 10)], 'div', expectedContents, contents);\n\t});\n\n\ttest('Wrap with abbreviation inner node in cdata one-liner', () => {\n\t\tconst contents = `\n\t<div class=\"nav main\">\n\t\t<![CDATA[<p>Test here</p>]]>\n\t\thello\n\t</div>\n\t`;\n\t\t// this result occurs because no selection on the open/close p tag was given\n\t\tconst expectedContents = `\n\t<div class=\"nav main\">\n\t\t<div><![CDATA[<p>Test here</p>]]></div>\n\t\thello\n\t</div>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(2, 15, 2, 15)], 'div', expectedContents, contents);\n\t});\n\n\ttest('Wrap with multiline abbreviation doesnt add extra spaces', () => {\n\t\t// Issue #29898\n\t\tconst contents = `\n\thello\n\t`;\n\t\tconst expectedContents = `\n\t<ul>\n\t\t<li><a href=\"\">hello</a></li>\n\t</ul>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(1, 2, 1, 2)], 'ul>li>a', expectedContents, contents);\n\t});\n\n\ttest('Wrap individual lines with abbreviation', () => {\n\t\tconst contents = `\n\t<ul class=\"nav main\">\n\t\t<li class=\"item1\">This $10 is not a tabstop</li>\n\t\t<li class=\"item2\">hi.there</li>\n\t</ul>\n`;\n\t\tconst wrapIndividualLinesExpected = `\n\t<ul class=\"nav main\">\n\t\t<ul>\n\t\t\t<li class=\"hello1\">\n\t\t\t\t<li class=\"item1\">This $10 is not a tabstop</li>\n\t\t\t</li>\n\t\t\t<li class=\"hello2\">\n\t\t\t\t<li class=\"item2\">hi.there</li>\n\t\t\t</li>\n\t\t</ul>\n\t</ul>\n`;\n\t\treturn testWrapIndividualLinesWithAbbreviation([new Selection(2, 2, 3, 33)], 'ul>li.hello$*', wrapIndividualLinesExpected, contents);\n\t});\n\n\ttest('Wrap individual lines with abbreviation with extra space selected', () => {\n\t\tconst contents = `\n\t<ul class=\"nav main\">\n\t\t<li class=\"item1\">img</li>\n\t\t<li class=\"item2\">hi.there</li>\n\t</ul>\n`;\n\t\tconst wrapIndividualLinesExpected = `\n\t<ul class=\"nav main\">\n\t\t<ul>\n\t\t\t<li class=\"hello1\">\n\t\t\t\t<li class=\"item1\">img</li>\n\t\t\t</li>\n\t\t\t<li class=\"hello2\">\n\t\t\t\t<li class=\"item2\">hi.there</li>\n\t\t\t</li>\n\t\t</ul>\n\t</ul>\n`;\n\t\treturn testWrapIndividualLinesWithAbbreviation([new Selection(2, 1, 4, 0)], 'ul>li.hello$*', wrapIndividualLinesExpected, contents);\n\t});\n\n\ttest('Wrap individual lines with abbreviation with comment filter', () => {\n\t\tconst contents = `\n\t<ul class=\"nav main\">\n\t\t<li class=\"item1\">img</li>\n\t\t<li class=\"item2\">hi.there</li>\n\t</ul>\n`;\n\t\tconst wrapIndividualLinesExpected = `\n\t<ul class=\"nav main\">\n\t\t<ul>\n\t\t\t<li class=\"hello\">\n\t\t\t\t<li class=\"item1\">img</li>\n\t\t\t</li>\n\t\t\t<!-- /.hello -->\n\t\t\t<li class=\"hello\">\n\t\t\t\t<li class=\"item2\">hi.there</li>\n\t\t\t</li>\n\t\t\t<!-- /.hello -->\n\t\t</ul>\n\t</ul>\n`;\n\t\treturn testWrapIndividualLinesWithAbbreviation([new Selection(2, 2, 3, 33)], 'ul>li.hello*|c', wrapIndividualLinesExpected, contents);\n\t});\n\n\ttest('Wrap individual lines with abbreviation and trim', () => {\n\t\tconst contents = `\n\t\t<ul class=\"nav main\">\n\t\t\t• lorem ipsum\n\t\t\t• lorem ipsum\n\t\t</ul>\n\t`;\n\t\tconst wrapIndividualLinesExpected = `\n\t\t<ul class=\"nav main\">\n\t\t\t<ul>\n\t\t\t\t<li class=\"hello1\">lorem ipsum</li>\n\t\t\t\t<li class=\"hello2\">lorem ipsum</li>\n\t\t\t</ul>\n\t\t</ul>\n\t`;\n\t\treturn testWrapIndividualLinesWithAbbreviation([new Selection(2, 3, 3, 16)], 'ul>li.hello$*|t', wrapIndividualLinesExpected, contents);\n\t});\n\n\ttest('Wrap with abbreviation and format set to false', () => {\n\t\treturn workspace.getConfiguration('emmet').update('syntaxProfiles', { 'html': { 'format': false } }, ConfigurationTarget.Global).then(() => {\n\t\t\treturn testWrapWithAbbreviation(multiCursors, 'h1', wrapInlineElementExpectedFormatFalse, htmlContentsForBlockWrapTests).then(() => {\n\t\t\t\treturn workspace.getConfiguration('emmet').update('syntaxProfiles', oldValueForSyntaxProfiles ? oldValueForSyntaxProfiles.globalValue : undefined, ConfigurationTarget.Global);\n\t\t\t});\n\t\t});\n\t});\n\n\ttest('Wrap multi line selections with abbreviation', () => {\n\t\tconst htmlContentsForWrapMultiLineTests = `\n\t\t\t<ul class=\"nav main\">\n\t\t\t\tline1\n\t\t\t\tline2\n\n\t\t\t\tline3\n\t\t\t\tline4\n\t\t\t</ul>\n\t\t`;\n\n\t\tconst wrapMultiLineExpected = `\n\t\t\t<ul class=\"nav main\">\n\t\t\t\t<div>\n\t\t\t\t\tline1\n\t\t\t\t\tline2\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\tline3\n\t\t\t\t\tline4\n\t\t\t\t</div>\n\t\t\t</ul>\n\t\t`;\n\n\t\treturn testWrapWithAbbreviation([new Selection(2, 4, 3, 9), new Selection(5, 4, 6, 9)], 'div', wrapMultiLineExpected, htmlContentsForWrapMultiLineTests);\n\t});\n\n\ttest('Wrap multiline with abbreviation uses className for jsx files', () => {\n\t\tconst wrapMultiLineJsxExpected = `\n\t<ul class=\"nav main\">\n\t\t<div className=\"hello\">\n\t\t\t<li class=\"item1\">img</li>\n\t\t\t<li class=\"item2\">$hithere</li>\n\t\t\t<li class=\"item3\">\\${hithere}</li>\n\t\t</div>\n\t</ul>\n`;\n\n\t\treturn testWrapWithAbbreviation([new Selection(2, 2, 4, 36)], '.hello', wrapMultiLineJsxExpected, htmlContentsForBlockWrapTests, 'jsx');\n\t});\n\n\ttest('Wrap individual line with abbreviation uses className for jsx files', () => {\n\t\tconst wrapIndividualLinesJsxExpected = `\n\t<ul class=\"nav main\">\n\t\t<div className=\"hello1\">\n\t\t\t<li class=\"item1\">img</li>\n\t\t</div>\n\t\t<div className=\"hello2\">\n\t\t\t<li class=\"item2\">$hithere</li>\n\t\t</div>\n\t\t<div className=\"hello3\">\n\t\t\t<li class=\"item3\">\\${hithere}</li>\n\t\t</div>\n\t</ul>\n`;\n\n\t\treturn testWrapIndividualLinesWithAbbreviation([new Selection(2, 2, 4, 36)], '.hello$*', wrapIndividualLinesJsxExpected, htmlContentsForBlockWrapTests, 'jsx');\n\t});\n\n\ttest('Wrap with abbreviation merge overlapping computed ranges', () => {\n\t\tconst contents = `\n\t<div class=\"nav main\">\n\t\thello\n\t</div>\n\t`;\n\t\tconst expectedContents = `\n\t<div>\n\t\t<div class=\"nav main\">\n\t\t\thello\n\t\t</div>\n\t</div>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(1, 2, 1, 2), new Selection(1, 10, 1, 10)], 'div', expectedContents, contents);\n\t});\n\n\ttest('Wrap with abbreviation ignore invalid abbreviation', () => {\n\t\tconst contents = `\n\t<div class=\"nav main\">\n\t\thello\n\t</div>\n\t`;\n\t\treturn testWrapWithAbbreviation([new Selection(1, 2, 1, 2)], 'div]', contents, contents);\n\t});\n\n});\n\n\nfunction testWrapWithAbbreviation(selections: Selection[], abbreviation: string, expectedContents: string, input: string, fileExtension: string = 'html'): Thenable<any> {\n\treturn withRandomFileEditor(input, fileExtension, (editor, _) => {\n\t\teditor.selections = selections;\n\t\tconst promise = wrapWithAbbreviation({ abbreviation });\n\t\tif (!promise) {\n\t\t\tassert.strictEqual(1, 2, 'Wrap with Abbreviation returned undefined.');\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\treturn promise.then(() => {\n\t\t\tassert.strictEqual(editor.document.getText(), expectedContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n}\n\nfunction testWrapIndividualLinesWithAbbreviation(selections: Selection[], abbreviation: string, expectedContents: string, input: string, fileExtension: string = 'html'): Thenable<any> {\n\treturn withRandomFileEditor(input, fileExtension, (editor, _) => {\n\t\teditor.selections = selections;\n\t\tconst promise = wrapWithAbbreviation({ abbreviation });\n\t\tif (!promise) {\n\t\t\tassert.strictEqual(1, 2, 'Wrap individual lines with Abbreviation returned undefined.');\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\treturn promise.then(() => {\n\t\t\tassert.strictEqual(editor.document.getText(), expectedContents);\n\t\t\treturn Promise.resolve();\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "extensions/emmet/src/toggleComment.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getNodesInBetween, getFlatNode, getHtmlFlatNode, sameNodes, isStyleSheet, validate, offsetRangeToVsRange, offsetRangeToSelection } from './util';\nimport { Node, Stylesheet, Rule } from 'EmmetFlatNode';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { getRootNode } from './parseDocument';\n\nlet startCommentStylesheet: string;\nlet endCommentStylesheet: string;\nlet startCommentHTML: string;\nlet endCommentHTML: string;\n\nexport function toggleComment(): Thenable<boolean> | undefined {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tsetupCommentSpacing();\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst rootNode = getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tconst allEdits: vscode.TextEdit[][] = [];\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst edits = isStyleSheet(editor.document.languageId) ? toggleCommentStylesheet(editor.document, selection, <Stylesheet>rootNode) : toggleCommentHTML(editor.document, selection, rootNode!);\n\t\t\tif (edits.length > 0) {\n\t\t\t\tallEdits.push(edits);\n\t\t\t}\n\t\t});\n\n\t\t// Apply edits in order so we can skip nested ones.\n\t\tallEdits.sort((arr1, arr2) => {\n\t\t\tconst result = arr1[0].range.start.line - arr2[0].range.start.line;\n\t\t\treturn result === 0 ? arr1[0].range.start.character - arr2[0].range.start.character : result;\n\t\t});\n\t\tlet lastEditPosition = new vscode.Position(0, 0);\n\t\tfor (const edits of allEdits) {\n\t\t\tif (edits[0].range.end.isAfterOrEqual(lastEditPosition)) {\n\t\t\t\tedits.forEach(x => {\n\t\t\t\t\teditBuilder.replace(x.range, x.newText);\n\t\t\t\t\tlastEditPosition = x.range.end;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction toggleCommentHTML(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): vscode.TextEdit[] {\n\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tconst documentText = document.getText();\n\n\tconst startNode = getHtmlFlatNode(documentText, rootNode, selectionStartOffset, true);\n\tconst endNode = getHtmlFlatNode(documentText, rootNode, selectionEndOffset, true);\n\n\tif (!startNode || !endNode) {\n\t\treturn [];\n\t}\n\n\tif (sameNodes(startNode, endNode) && startNode.name === 'style'\n\t\t&& startNode.open && startNode.close\n\t\t&& startNode.open.end < selectionStartOffset\n\t\t&& startNode.close.start > selectionEndOffset) {\n\t\tconst buffer = ' '.repeat(startNode.open.end) +\n\t\t\tdocumentText.substring(startNode.open.end, startNode.close.start);\n\t\tconst cssRootNode = parseStylesheet(buffer);\n\t\treturn toggleCommentStylesheet(document, selection, cssRootNode);\n\t}\n\n\tconst allNodes: Node[] = getNodesInBetween(startNode, endNode);\n\tlet edits: vscode.TextEdit[] = [];\n\n\tallNodes.forEach(node => {\n\t\tedits = edits.concat(getRangesToUnCommentHTML(node, document));\n\t});\n\n\tif (startNode.type === 'comment') {\n\t\treturn edits;\n\t}\n\n\n\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, allNodes[0].start, allNodes[0].start), startCommentHTML));\n\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, allNodes[allNodes.length - 1].end, allNodes[allNodes.length - 1].end), endCommentHTML));\n\n\treturn edits;\n}\n\nfunction getRangesToUnCommentHTML(node: Node, document: vscode.TextDocument): vscode.TextEdit[] {\n\tlet unCommentTextEdits: vscode.TextEdit[] = [];\n\n\t// If current node is commented, then uncomment and return\n\tif (node.type === 'comment') {\n\t\tunCommentTextEdits.push(new vscode.TextEdit(offsetRangeToVsRange(document, node.start, node.start + startCommentHTML.length), ''));\n\t\tunCommentTextEdits.push(new vscode.TextEdit(offsetRangeToVsRange(document, node.end - endCommentHTML.length, node.end), ''));\n\t\treturn unCommentTextEdits;\n\t}\n\n\t// All children of current node should be uncommented\n\tnode.children.forEach(childNode => {\n\t\tunCommentTextEdits = unCommentTextEdits.concat(getRangesToUnCommentHTML(childNode, document));\n\t});\n\n\treturn unCommentTextEdits;\n}\n\nfunction toggleCommentStylesheet(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Stylesheet): vscode.TextEdit[] {\n\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\tlet selectionStartOffset = document.offsetAt(selectionStart);\n\tlet selectionEndOffset = document.offsetAt(selectionEnd);\n\n\tconst startNode = getFlatNode(rootNode, selectionStartOffset, true);\n\tconst endNode = getFlatNode(rootNode, selectionEndOffset, true);\n\n\tif (!selection.isEmpty) {\n\t\tselectionStartOffset = adjustStartNodeCss(startNode, selectionStartOffset, rootNode);\n\t\tselectionEndOffset = adjustEndNodeCss(endNode, selectionEndOffset, rootNode);\n\t\tselection = offsetRangeToSelection(document, selectionStartOffset, selectionEndOffset);\n\t} else if (startNode) {\n\t\tselectionStartOffset = startNode.start;\n\t\tselectionEndOffset = startNode.end;\n\t\tselection = offsetRangeToSelection(document, selectionStartOffset, selectionEndOffset);\n\t}\n\n\t// Uncomment the comments that intersect with the selection.\n\tconst rangesToUnComment: vscode.Range[] = [];\n\tconst edits: vscode.TextEdit[] = [];\n\trootNode.comments.forEach(comment => {\n\t\tconst commentRange = offsetRangeToVsRange(document, comment.start, comment.end);\n\t\tif (selection.intersection(commentRange)) {\n\t\t\trangesToUnComment.push(commentRange);\n\t\t\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, comment.start, comment.start + startCommentStylesheet.length), ''));\n\t\t\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, comment.end - endCommentStylesheet.length, comment.end), ''));\n\t\t}\n\t});\n\n\tif (edits.length > 0) {\n\t\treturn edits;\n\t}\n\n\treturn [\n\t\tnew vscode.TextEdit(new vscode.Range(selection.start, selection.start), startCommentStylesheet),\n\t\tnew vscode.TextEdit(new vscode.Range(selection.end, selection.end), endCommentStylesheet)\n\t];\n}\n\nfunction setupCommentSpacing() {\n\tconst config: boolean | undefined = vscode.workspace.getConfiguration('editor.comments').get('insertSpace');\n\tif (config) {\n\t\tstartCommentStylesheet = '/* ';\n\t\tendCommentStylesheet = ' */';\n\t\tstartCommentHTML = '<!-- ';\n\t\tendCommentHTML = ' -->';\n\t} else {\n\t\tstartCommentStylesheet = '/*';\n\t\tendCommentStylesheet = '*/';\n\t\tstartCommentHTML = '<!--';\n\t\tendCommentHTML = '-->';\n\t}\n}\n\nfunction adjustStartNodeCss(node: Node | undefined, offset: number, rootNode: Stylesheet): number {\n\tfor (const comment of rootNode.comments) {\n\t\tif (comment.start <= offset && offset <= comment.end) {\n\t\t\treturn offset;\n\t\t}\n\t}\n\n\tif (!node) {\n\t\treturn offset;\n\t}\n\n\tif (node.type === 'property') {\n\t\treturn node.start;\n\t}\n\n\tconst rule = <Rule>node;\n\tif (offset < rule.contentStartToken.end || !rule.firstChild) {\n\t\treturn rule.start;\n\t}\n\n\tif (offset < rule.firstChild.start) {\n\t\treturn offset;\n\t}\n\n\tlet newStartNode = rule.firstChild;\n\twhile (newStartNode.nextSibling && offset > newStartNode.end) {\n\t\tnewStartNode = newStartNode.nextSibling;\n\t}\n\n\treturn newStartNode.start;\n}\n\nfunction adjustEndNodeCss(node: Node | undefined, offset: number, rootNode: Stylesheet): number {\n\tfor (const comment of rootNode.comments) {\n\t\tif (comment.start <= offset && offset <= comment.end) {\n\t\t\treturn offset;\n\t\t}\n\t}\n\n\tif (!node) {\n\t\treturn offset;\n\t}\n\n\tif (node.type === 'property') {\n\t\treturn node.end;\n\t}\n\n\tconst rule = <Rule>node;\n\tif (offset === rule.contentEndToken.end || !rule.firstChild) {\n\t\treturn rule.end;\n\t}\n\n\tif (offset > rule.children[rule.children.length - 1].end) {\n\t\treturn offset;\n\t}\n\n\tlet newEndNode = rule.children[rule.children.length - 1];\n\twhile (newEndNode.previousSibling && offset < newEndNode.start) {\n\t\tnewEndNode = newEndNode.previousSibling;\n\t}\n\n\treturn newEndNode.end;\n}\n\n\n"
  },
  {
    "path": "extensions/emmet/src/typings/EmmetFlatNode.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microsoft Corporation. All rights reserved.\n*  Licensed under the MIT License. See License.txt in the project root for license information.\n*--------------------------------------------------------------------------------------------*/\n\ndeclare module 'EmmetFlatNode' {\n    export interface Node {\n        start: number\n        end: number\n        type: string\n        parent: Node | undefined\n        firstChild: Node | undefined\n        nextSibling: Node | undefined\n        previousSibling: Node | undefined\n        children: Node[]\n    }\n\n    export interface Token {\n        start: number\n        end: number\n        stream: BufferStream\n        toString(): string\n    }\n\n    export interface CssToken extends Token {\n        size: number\n        item(number: number): any\n        type: string\n    }\n\n    export interface HtmlToken extends Token {\n        value: string\n    }\n\n    export interface Attribute extends Token {\n        name: Token\n        value: Token\n    }\n\n    export interface HtmlNode extends Node {\n        name: string\n        open: Token | undefined\n        close: Token | undefined\n        parent: HtmlNode | undefined\n        firstChild: HtmlNode | undefined\n        nextSibling: HtmlNode | undefined\n        previousSibling: HtmlNode | undefined\n        children: HtmlNode[]\n        attributes: Attribute[]\n    }\n\n    export interface CssNode extends Node {\n        name: string\n        parent: CssNode | undefined\n        firstChild: CssNode | undefined\n        nextSibling: CssNode | undefined\n        previousSibling: CssNode | undefined\n        children: CssNode[]\n    }\n\n    export interface Rule extends CssNode {\n        selectorToken: Token\n        contentStartToken: Token\n        contentEndToken: Token\n    }\n\n    export interface Property extends CssNode {\n        valueToken: Token\n        separator: string\n        parent: Rule\n        terminatorToken: Token\n        separatorToken: Token\n        value: string\n    }\n\n    export interface Stylesheet extends Node {\n        comments: Token[]\n    }\n\n    export interface BufferStream {\n        peek(): number\n        next(): number\n        backUp(n: number): number\n        current(): string\n        substring(from: number, to: number): string\n        eat(match: any): boolean\n        eatWhile(match: any): boolean\n    }\n}\n"
  },
  {
    "path": "extensions/emmet/src/typings/EmmetNode.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microsoft Corporation. All rights reserved.\n*  Licensed under the MIT License. See License.txt in the project root for license information.\n*--------------------------------------------------------------------------------------------*/\n\ndeclare module 'EmmetNode' {\n    import { Position } from 'vscode';\n\n    export interface Node {\n        start: Position\n        end: Position\n        type: string\n        parent: Node\n        firstChild: Node\n        nextSibling: Node\n        previousSibling: Node\n        children: Node[]\n    }\n\n    export interface Token {\n        start: Position\n        end: Position\n        stream: BufferStream\n        toString(): string\n    }\n\n    export interface CssToken extends Token {\n        size: number\n        item(number: number): any\n        type: string\n    }\n\n    export interface HtmlToken extends Token {\n        value: string\n    }\n\n    export interface Attribute extends Token {\n        name: Token\n        value: Token\n    }\n\n    export interface HtmlNode extends Node {\n        name: string\n        open: Token\n        close: Token\n        parent: HtmlNode\n        firstChild: HtmlNode\n        nextSibling: HtmlNode\n        previousSibling: HtmlNode\n        children: HtmlNode[]\n        attributes: Attribute[]\n    }\n\n    export interface CssNode extends Node {\n        name: string\n        parent: CssNode\n        firstChild: CssNode\n        nextSibling: CssNode\n        previousSibling: CssNode\n        children: CssNode[]\n    }\n\n    export interface Rule extends CssNode {\n        selectorToken: Token\n        contentStartToken: Token\n        contentEndToken: Token\n    }\n\n    export interface Property extends CssNode {\n        valueToken: Token\n        separator: string\n        parent: Rule\n        terminatorToken: Token\n        separatorToken: Token\n        value: string\n    }\n\n    export interface Stylesheet extends Node {\n        comments: Token[]\n    }\n\n    export interface BufferStream {\n        peek(): number\n        next(): number\n        backUp(n: number): number\n        current(): string\n        substring(from: Position, to: Position): string\n        eat(match: any): boolean\n        eatWhile(match: any): boolean\n    }\n}\n\n\n\n\n"
  },
  {
    "path": "extensions/emmet/src/typings/emmetio__css-parser.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microsoft Corporation. All rights reserved.\n*  Licensed under the MIT License. See License.txt in the project root for license information.\n*--------------------------------------------------------------------------------------------*/\n\ndeclare module '@emmetio/css-parser' {\n\timport { BufferStream, Stylesheet } from 'EmmetNode';\n\timport { Stylesheet as FlatStylesheet } from 'EmmetFlatNode';\n\n\tfunction parseStylesheet(stream: BufferStream): Stylesheet;\n\tfunction parseStylesheet(stream: string): FlatStylesheet;\n\n\texport default parseStylesheet;\n}\n\n"
  },
  {
    "path": "extensions/emmet/src/typings/emmetio__html-matcher.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microsoft Corporation. All rights reserved.\n*  Licensed under the MIT License. See License.txt in the project root for license information.\n*--------------------------------------------------------------------------------------------*/\n\ndeclare module '@emmetio/html-matcher' {\n\timport { BufferStream, HtmlNode } from 'EmmetNode';\n\timport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\n\tfunction parse(stream: BufferStream): HtmlNode;\n\tfunction parse(stream: string): HtmlFlatNode;\n\n\texport default parse;\n}\n\n"
  },
  {
    "path": "extensions/emmet/src/typings/refs.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/// <reference types='@types/node'/>\n"
  },
  {
    "path": "extensions/emmet/src/updateImageSize.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Based on @sergeche's work on the emmet plugin for atom\n\nimport { TextEditor, Position, window, TextEdit } from 'vscode';\nimport * as path from 'path';\nimport { getImageSize, ImageInfoWithScale } from './imageSizeHelper';\nimport { getFlatNode, iterateCSSToken, getCssPropertyFromRule, isStyleSheet, validate, offsetRangeToVsRange } from './util';\nimport { HtmlNode, CssToken, HtmlToken, Attribute, Property } from 'EmmetFlatNode';\nimport { locateFile } from './locateFile';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { getRootNode } from './parseDocument';\n\n/**\n * Updates size of context image in given editor\n */\nexport function updateImageSize(): Promise<boolean> | undefined {\n\tif (!validate() || !window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = window.activeTextEditor;\n\n\tconst allUpdatesPromise = Array.from(editor.selections).reverse().map(selection => {\n\t\tconst position = selection.isReversed ? selection.active : selection.anchor;\n\t\tif (!isStyleSheet(editor.document.languageId)) {\n\t\t\treturn updateImageSizeHTML(editor, position);\n\t\t} else {\n\t\t\treturn updateImageSizeCSSFile(editor, position);\n\t\t}\n\t});\n\n\treturn Promise.all(allUpdatesPromise).then((updates) => {\n\t\treturn editor.edit(builder => {\n\t\t\tupdates.forEach(update => {\n\t\t\t\tupdate.forEach((textEdit: TextEdit) => {\n\t\t\t\t\tbuilder.replace(textEdit.range, textEdit.newText);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n}\n\n/**\n * Updates image size of context tag of HTML model\n */\nfunction updateImageSizeHTML(editor: TextEditor, position: Position): Promise<TextEdit[]> {\n\tconst imageNode = getImageHTMLNode(editor, position);\n\n\tconst src = imageNode && getImageSrcHTML(imageNode);\n\n\tif (!src) {\n\t\treturn updateImageSizeStyleTag(editor, position);\n\t}\n\n\treturn locateFile(path.dirname(editor.document.fileName), src)\n\t\t.then(getImageSize)\n\t\t.then((size: any) => {\n\t\t\t// since this action is asynchronous, we have to ensure that editor wasn't\n\t\t\t// changed and user didn't moved caret outside <img> node\n\t\t\tconst img = getImageHTMLNode(editor, position);\n\t\t\tif (img && getImageSrcHTML(img) === src) {\n\t\t\t\treturn updateHTMLTag(editor, img, size.width, size.height);\n\t\t\t}\n\t\t\treturn [];\n\t\t})\n\t\t.catch(err => { console.warn('Error while updating image size:', err); return []; });\n}\n\nfunction updateImageSizeStyleTag(editor: TextEditor, position: Position): Promise<TextEdit[]> {\n\tconst getPropertyInsiderStyleTag = (editor: TextEditor): Property | null => {\n\t\tconst document = editor.document;\n\t\tconst rootNode = getRootNode(document, true);\n\t\tconst offset = document.offsetAt(position);\n\t\tconst currentNode = <HtmlNode>getFlatNode(rootNode, offset, true);\n\t\tif (currentNode && currentNode.name === 'style'\n\t\t\t&& currentNode.open && currentNode.close\n\t\t\t&& currentNode.open.end < offset\n\t\t\t&& currentNode.close.start > offset) {\n\t\t\tconst buffer = ' '.repeat(currentNode.open.end) +\n\t\t\t\tdocument.getText().substring(currentNode.open.end, currentNode.close.start);\n\t\t\tconst innerRootNode = parseStylesheet(buffer);\n\t\t\tconst innerNode = getFlatNode(innerRootNode, offset, true);\n\t\t\treturn (innerNode && innerNode.type === 'property') ? <Property>innerNode : null;\n\t\t}\n\t\treturn null;\n\t};\n\n\treturn updateImageSizeCSS(editor, position, getPropertyInsiderStyleTag);\n}\n\nfunction updateImageSizeCSSFile(editor: TextEditor, position: Position): Promise<TextEdit[]> {\n\treturn updateImageSizeCSS(editor, position, getImageCSSNode);\n}\n\n/**\n * Updates image size of context rule of stylesheet model\n */\nfunction updateImageSizeCSS(editor: TextEditor, position: Position, fetchNode: (editor: TextEditor, position: Position) => Property | null): Promise<TextEdit[]> {\n\tconst node = fetchNode(editor, position);\n\tconst src = node && getImageSrcCSS(editor, node, position);\n\n\tif (!src) {\n\t\treturn Promise.reject(new Error('No valid image source'));\n\t}\n\n\treturn locateFile(path.dirname(editor.document.fileName), src)\n\t\t.then(getImageSize)\n\t\t.then((size: ImageInfoWithScale | undefined): TextEdit[] => {\n\t\t\t// since this action is asynchronous, we have to ensure that editor wasn't\n\t\t\t// changed and user didn't moved caret outside <img> node\n\t\t\tconst prop = fetchNode(editor, position);\n\t\t\tif (size && prop && getImageSrcCSS(editor, prop, position) === src) {\n\t\t\t\treturn updateCSSNode(editor, prop, size.width, size.height);\n\t\t\t}\n\t\t\treturn [];\n\t\t})\n\t\t.catch(err => { console.warn('Error while updating image size:', err); return []; });\n}\n\n/**\n * Returns <img> node under caret in given editor or `null` if such node cannot\n * be found\n */\nfunction getImageHTMLNode(editor: TextEditor, position: Position): HtmlNode | null {\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tconst offset = document.offsetAt(position);\n\tconst node = <HtmlNode>getFlatNode(rootNode, offset, true);\n\n\treturn node && node.name.toLowerCase() === 'img' ? node : null;\n}\n\n/**\n * Returns css property under caret in given editor or `null` if such node cannot\n * be found\n */\nfunction getImageCSSNode(editor: TextEditor, position: Position): Property | null {\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tconst offset = document.offsetAt(position);\n\tconst node = getFlatNode(rootNode, offset, true);\n\treturn node && node.type === 'property' ? <Property>node : null;\n}\n\n/**\n * Returns image source from given <img> node\n */\nfunction getImageSrcHTML(node: HtmlNode): string | undefined {\n\tconst srcAttr = getAttribute(node, 'src');\n\tif (!srcAttr) {\n\t\treturn;\n\t}\n\n\treturn (<HtmlToken>srcAttr.value).value;\n}\n\n/**\n * Returns image source from given `url()` token\n */\nfunction getImageSrcCSS(editor: TextEditor, node: Property | undefined, position: Position): string | undefined {\n\tif (!node) {\n\t\treturn;\n\t}\n\tconst urlToken = findUrlToken(editor, node, position);\n\tif (!urlToken) {\n\t\treturn;\n\t}\n\n\t// A stylesheet token may contain either quoted ('string') or unquoted URL\n\tlet urlValue = urlToken.item(0);\n\tif (urlValue && urlValue.type === 'string') {\n\t\turlValue = urlValue.item(0);\n\t}\n\n\treturn urlValue && urlValue.valueOf();\n}\n\n/**\n * Updates size of given HTML node\n */\nfunction updateHTMLTag(editor: TextEditor, node: HtmlNode, width: number, height: number): TextEdit[] {\n\tconst document = editor.document;\n\tconst srcAttr = getAttribute(node, 'src');\n\tif (!srcAttr) {\n\t\treturn [];\n\t}\n\n\tconst widthAttr = getAttribute(node, 'width');\n\tconst heightAttr = getAttribute(node, 'height');\n\tconst quote = getAttributeQuote(editor, srcAttr);\n\tconst endOfAttributes = node.attributes[node.attributes.length - 1].end;\n\n\tconst edits: TextEdit[] = [];\n\tlet textToAdd = '';\n\n\tif (!widthAttr) {\n\t\ttextToAdd += ` width=${quote}${width}${quote}`;\n\t} else {\n\t\tedits.push(new TextEdit(offsetRangeToVsRange(document, widthAttr.value.start, widthAttr.value.end), String(width)));\n\t}\n\tif (!heightAttr) {\n\t\ttextToAdd += ` height=${quote}${height}${quote}`;\n\t} else {\n\t\tedits.push(new TextEdit(offsetRangeToVsRange(document, heightAttr.value.start, heightAttr.value.end), String(height)));\n\t}\n\tif (textToAdd) {\n\t\tedits.push(new TextEdit(offsetRangeToVsRange(document, endOfAttributes, endOfAttributes), textToAdd));\n\t}\n\n\treturn edits;\n}\n\n/**\n * Updates size of given CSS rule\n */\nfunction updateCSSNode(editor: TextEditor, srcProp: Property, width: number, height: number): TextEdit[] {\n\tconst document = editor.document;\n\tconst rule = srcProp.parent;\n\tconst widthProp = getCssPropertyFromRule(rule, 'width');\n\tconst heightProp = getCssPropertyFromRule(rule, 'height');\n\n\t// Detect formatting\n\tconst separator = srcProp.separator || ': ';\n\tconst before = getPropertyDelimitor(editor, srcProp);\n\n\tconst edits: TextEdit[] = [];\n\tif (!srcProp.terminatorToken) {\n\t\tedits.push(new TextEdit(offsetRangeToVsRange(document, srcProp.end, srcProp.end), ';'));\n\t}\n\n\tlet textToAdd = '';\n\tif (!widthProp) {\n\t\ttextToAdd += `${before}width${separator}${width}px;`;\n\t} else {\n\t\tedits.push(new TextEdit(offsetRangeToVsRange(document, widthProp.valueToken.start, widthProp.valueToken.end), `${width}px`));\n\t}\n\tif (!heightProp) {\n\t\ttextToAdd += `${before}height${separator}${height}px;`;\n\t} else {\n\t\tedits.push(new TextEdit(offsetRangeToVsRange(document, heightProp.valueToken.start, heightProp.valueToken.end), `${height}px`));\n\t}\n\tif (textToAdd) {\n\t\tedits.push(new TextEdit(offsetRangeToVsRange(document, srcProp.end, srcProp.end), textToAdd));\n\t}\n\n\treturn edits;\n}\n\n/**\n * Returns attribute object with `attrName` name from given HTML node\n */\nfunction getAttribute(node: HtmlNode, attrName: string): Attribute | undefined {\n\tattrName = attrName.toLowerCase();\n\treturn node && node.attributes.find(attr => attr.name.toString().toLowerCase() === attrName);\n}\n\n/**\n * Returns quote character, used for value of given attribute. May return empty\n * string if attribute wasn't quoted\n\n */\nfunction getAttributeQuote(editor: TextEditor, attr: Attribute): string {\n\tconst begin = attr.value ? attr.value.end : attr.end;\n\tconst end = attr.end;\n\treturn begin === end ? '' : editor.document.getText().substring(begin, end);\n}\n\n/**\n * Finds 'url' token for given `pos` point in given CSS property `node`\n */\nfunction findUrlToken(editor: TextEditor, node: Property, pos: Position): CssToken | undefined {\n\tconst offset = editor.document.offsetAt(pos);\n\tfor (let i = 0, il = (node as any).parsedValue.length, url; i < il; i++) {\n\t\titerateCSSToken((node as any).parsedValue[i], (token: CssToken) => {\n\t\t\tif (token.type === 'url' && token.start <= offset && token.end >= offset) {\n\t\t\t\turl = token;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tif (url) {\n\t\t\treturn url;\n\t\t}\n\t}\n\treturn;\n}\n\n/**\n * Returns a string that is used to delimit properties in current node's rule\n */\nfunction getPropertyDelimitor(editor: TextEditor, node: Property): string {\n\tlet anchor;\n\tif (anchor = (node.previousSibling || node.parent.contentStartToken)) {\n\t\treturn editor.document.getText().substring(anchor.end, node.start);\n\t} else if (anchor = (node.nextSibling || node.parent.contentEndToken)) {\n\t\treturn editor.document.getText().substring(node.end, anchor.start);\n\t}\n\n\treturn '';\n}\n\n"
  },
  {
    "path": "extensions/emmet/src/updateTag.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getHtmlFlatNode, validate } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\ninterface TagRange {\n\tname: string;\n\trange: vscode.Range;\n}\n\nexport async function updateTag(tagName: string | undefined): Promise<boolean | undefined> {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst rangesToUpdate = editor.selections\n\t\t.reduceRight<TagRange[]>((prev, selection) =>\n\t\t\tprev.concat(getRangesToUpdate(document, selection, rootNode)), []);\n\tif (!rangesToUpdate.length) {\n\t\treturn;\n\t}\n\tconst firstTagName = rangesToUpdate[0].name;\n\tconst tagNamesAreEqual = rangesToUpdate.every(range => range.name === firstTagName);\n\n\tif (tagName === undefined) {\n\t\ttagName = await vscode.window.showInputBox({\n\t\t\tprompt: 'Enter Tag',\n\t\t\tvalue: tagNamesAreEqual ? firstTagName : undefined\n\t\t});\n\n\t\t// TODO: Accept fragments for JSX and TSX\n\t\tif (!tagName) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\trangesToUpdate.forEach(tagRange => {\n\t\t\teditBuilder.replace(tagRange.range, tagName!);\n\t\t});\n\t});\n}\n\nfunction getRangesFromNode(node: HtmlFlatNode, document: vscode.TextDocument): TagRange[] {\n\tconst ranges: TagRange[] = [];\n\tif (node.open) {\n\t\tconst start = document.positionAt(node.open.start);\n\t\tranges.push({\n\t\t\tname: node.name,\n\t\t\trange: new vscode.Range(start.translate(0, 1), start.translate(0, 1).translate(0, node.name.length))\n\t\t});\n\t}\n\tif (node.close) {\n\t\tconst endTagStart = document.positionAt(node.close.start);\n\t\tconst end = document.positionAt(node.close.end);\n\t\tranges.push({\n\t\t\tname: node.name,\n\t\t\trange: new vscode.Range(endTagStart.translate(0, 2), end.translate(0, -1))\n\t\t});\n\t}\n\treturn ranges;\n}\n\nfunction getRangesToUpdate(document: vscode.TextDocument, selection: vscode.Selection, rootNode: HtmlFlatNode): TagRange[] {\n\tconst documentText = document.getText();\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToUpdate = getHtmlFlatNode(documentText, rootNode, offset, true);\n\tif (!nodeToUpdate) {\n\t\treturn [];\n\t}\n\treturn getRangesFromNode(nodeToUpdate, document);\n}\n"
  },
  {
    "path": "extensions/emmet/src/util.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport parse from '@emmetio/html-matcher';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { Node as FlatNode, HtmlNode as HtmlFlatNode, Property as FlatProperty, Rule as FlatRule, CssToken as FlatCssToken, Stylesheet as FlatStylesheet } from 'EmmetFlatNode';\nimport { DocumentStreamReader } from './bufferStream';\nimport * as EmmetHelper from '@vscode/emmet-helper';\nimport { TextDocument as LSTextDocument } from 'vscode-languageserver-textdocument';\nimport { getRootNode } from './parseDocument';\n\nlet _emmetHelper: typeof EmmetHelper;\nlet _currentExtensionsPath: string[] | undefined;\n\nlet _homeDir: vscode.Uri | undefined;\n\n\nexport function setHomeDir(homeDir: vscode.Uri) {\n\t_homeDir = homeDir;\n}\n\nexport function getEmmetHelper() {\n\t// Lazy load vscode-emmet-helper instead of importing it\n\t// directly to reduce the start-up time of the extension\n\tif (!_emmetHelper) {\n\t\t_emmetHelper = require('@vscode/emmet-helper');\n\t}\n\treturn _emmetHelper;\n}\n\n/**\n * Update Emmet Helper to use user snippets from the extensionsPath setting\n */\nexport function updateEmmetExtensionsPath(forceRefresh: boolean = false) {\n\tconst helper = getEmmetHelper();\n\tlet extensionsPath = vscode.workspace.getConfiguration('emmet').get<string[]>('extensionsPath');\n\tif (!extensionsPath) {\n\t\textensionsPath = [];\n\t}\n\tif (forceRefresh || _currentExtensionsPath !== extensionsPath) {\n\t\t_currentExtensionsPath = extensionsPath;\n\t\tconst rootPaths = vscode.workspace.workspaceFolders?.length ? vscode.workspace.workspaceFolders.map(f => f.uri) : undefined;\n\t\tconst fileSystem = vscode.workspace.fs;\n\t\thelper.updateExtensionsPath(extensionsPath, fileSystem, rootPaths, _homeDir).catch(err => {\n\t\t\tif (Array.isArray(extensionsPath) && extensionsPath.length) {\n\t\t\t\tvscode.window.showErrorMessage(err.message);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Migrate old configuration(string) for extensionsPath to new type(string[])\n * https://github.com/microsoft/vscode/issues/117517\n */\nexport function migrateEmmetExtensionsPath() {\n\t// Get the detail info of emmet.extensionsPath setting\n\tconst config = vscode.workspace.getConfiguration().inspect('emmet.extensionsPath');\n\n\t// Update Global setting if the value type is string or the value is null\n\tif (typeof config?.globalValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.globalValue], true);\n\t} else if (config?.globalValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [], true);\n\t}\n\t// Update Workspace setting if the value type is string or the value is null\n\tif (typeof config?.workspaceValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceValue], false);\n\t} else if (config?.workspaceValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [], false);\n\t}\n\t// Update WorkspaceFolder setting if the value type is string or the value is null\n\tif (typeof config?.workspaceFolderValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceFolderValue]);\n\t} else if (config?.workspaceFolderValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', []);\n\t}\n}\n\n/**\n * Mapping between languages that support Emmet and completion trigger characters\n */\nexport const LANGUAGE_MODES: { [id: string]: string[] } = {\n\t'html': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'jade': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'slim': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'haml': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'xml': ['.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'xsl': ['!', '.', '}', '*', '$', '/', ']', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'css': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'scss': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'sass': [':', '!', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'less': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'stylus': [':', '!', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'javascriptreact': ['!', '.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'typescriptreact': ['!', '.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n};\n\nexport function isStyleSheet(syntax: string): boolean {\n\tconst stylesheetSyntaxes = ['css', 'scss', 'sass', 'less', 'stylus'];\n\treturn stylesheetSyntaxes.includes(syntax);\n}\n\nexport function validate(allowStylesheet: boolean = true): boolean {\n\tconst editor = vscode.window.activeTextEditor;\n\tif (!editor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn false;\n\t}\n\tif (!allowStylesheet && isStyleSheet(editor.document.languageId)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function getMappingForIncludedLanguages(): Record<string, string> {\n\t// Explicitly map languages that have built-in grammar in VS Code to their parent language\n\t// to get emmet completion support\n\t// For other languages, users will have to use `emmet.includeLanguages` or\n\t// language specific extensions can provide emmet completion support\n\tconst MAPPED_MODES: Record<string, string> = {\n\t\t'handlebars': 'html',\n\t\t'php': 'html'\n\t};\n\n\tconst finalMappedModes: Record<string, string> = {};\n\tconst includeLanguagesConfig = vscode.workspace.getConfiguration('emmet').get<Record<string, string>>('includeLanguages');\n\tconst includeLanguages = Object.assign({}, MAPPED_MODES, includeLanguagesConfig ?? {});\n\tObject.keys(includeLanguages).forEach(syntax => {\n\t\tif (typeof includeLanguages[syntax] === 'string' && LANGUAGE_MODES[includeLanguages[syntax]]) {\n\t\t\tfinalMappedModes[syntax] = includeLanguages[syntax];\n\t\t}\n\t});\n\treturn finalMappedModes;\n}\n\n/**\n* Get the corresponding emmet mode for given vscode language mode\n* E.g.: jsx for typescriptreact/javascriptreact or pug for jade\n* If the language is not supported by emmet or has been excluded via `excludeLanguages` setting,\n* then nothing is returned\n*\n* @param excludedLanguages Array of language ids that user has chosen to exclude for emmet\n*/\nexport function getEmmetMode(language: string, mappedModes: Record<string, string>, excludedLanguages: string[]): string | undefined {\n\tif (!language || excludedLanguages.includes(language)) {\n\t\treturn;\n\t}\n\n\tif (language === 'jsx-tags') {\n\t\tlanguage = 'javascriptreact';\n\t}\n\n\tif (mappedModes[language]) {\n\t\tlanguage = mappedModes[language];\n\t}\n\n\tif (/\\b(typescriptreact|javascriptreact|jsx-tags)\\b/.test(language)) { // treat tsx like jsx\n\t\tlanguage = 'jsx';\n\t}\n\telse if (language === 'sass-indented') { // map sass-indented to sass\n\t\tlanguage = 'sass';\n\t}\n\telse if (language === 'jade' || language === 'pug') {\n\t\tlanguage = 'pug';\n\t}\n\n\tconst syntaxes = getSyntaxes();\n\tif (syntaxes.markup.includes(language) || syntaxes.stylesheet.includes(language)) {\n\t\treturn language;\n\t}\n\treturn;\n}\n\nconst closeBrace = 125;\nconst openBrace = 123;\nconst slash = 47;\nconst star = 42;\n\n/**\n * Traverse the given document backward & forward from given position\n * to find a complete ruleset, then parse just that to return a Stylesheet\n * @param document vscode.TextDocument\n * @param position vscode.Position\n */\nexport function parsePartialStylesheet(document: vscode.TextDocument, position: vscode.Position): FlatStylesheet | undefined {\n\tconst isCSS = document.languageId === 'css';\n\tconst positionOffset = document.offsetAt(position);\n\tlet startOffset = 0;\n\tlet endOffset = document.getText().length;\n\tconst limitCharacter = positionOffset - 5000;\n\tconst limitOffset = limitCharacter > 0 ? limitCharacter : startOffset;\n\tconst stream = new DocumentStreamReader(document, positionOffset);\n\n\tfunction findOpeningCommentBeforePosition(pos: number): number | undefined {\n\t\tconst text = document.getText().substring(0, pos);\n\t\tconst offset = text.lastIndexOf('/*');\n\t\tif (offset === -1) {\n\t\t\treturn;\n\t\t}\n\t\treturn offset;\n\t}\n\n\tfunction findClosingCommentAfterPosition(pos: number): number | undefined {\n\t\tconst text = document.getText().substring(pos);\n\t\tlet offset = text.indexOf('*/');\n\t\tif (offset === -1) {\n\t\t\treturn;\n\t\t}\n\t\toffset += 2 + pos;\n\t\treturn offset;\n\t}\n\n\tfunction consumeLineCommentBackwards() {\n\t\tconst posLineNumber = document.positionAt(stream.pos).line;\n\t\tif (!isCSS && currentLine !== posLineNumber) {\n\t\t\tcurrentLine = posLineNumber;\n\t\t\tconst startLineComment = document.lineAt(currentLine).text.indexOf('//');\n\t\t\tif (startLineComment > -1) {\n\t\t\t\tstream.pos = document.offsetAt(new vscode.Position(currentLine, startLineComment));\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction consumeBlockCommentBackwards() {\n\t\tif (!stream.sof() && stream.peek() === slash) {\n\t\t\tif (stream.backUp(1) === star) {\n\t\t\t\tstream.pos = findOpeningCommentBeforePosition(stream.pos) ?? startOffset;\n\t\t\t} else {\n\t\t\t\tstream.next();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction consumeCommentForwards() {\n\t\tif (stream.eat(slash)) {\n\t\t\tif (stream.eat(slash) && !isCSS) {\n\t\t\t\tconst posLineNumber = document.positionAt(stream.pos).line;\n\t\t\t\tstream.pos = document.offsetAt(new vscode.Position(posLineNumber + 1, 0));\n\t\t\t} else if (stream.eat(star)) {\n\t\t\t\tstream.pos = findClosingCommentAfterPosition(stream.pos) ?? endOffset;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Go forward until we find a closing brace.\n\twhile (!stream.eof() && !stream.eat(closeBrace)) {\n\t\tif (stream.peek() === slash) {\n\t\t\tconsumeCommentForwards();\n\t\t} else {\n\t\t\tstream.next();\n\t\t}\n\t}\n\n\tif (!stream.eof()) {\n\t\tendOffset = stream.pos;\n\t}\n\n\tstream.pos = positionOffset;\n\tlet openBracesToFind = 1;\n\tlet currentLine = position.line;\n\tlet exit = false;\n\n\t// Go back until we found an opening brace. If we find a closing one, consume its pair and continue.\n\twhile (!exit && openBracesToFind > 0 && !stream.sof()) {\n\t\tconsumeLineCommentBackwards();\n\n\t\tswitch (stream.backUp(1)) {\n\t\t\tcase openBrace:\n\t\t\t\topenBracesToFind--;\n\t\t\t\tbreak;\n\t\t\tcase closeBrace:\n\t\t\t\tif (isCSS) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\tstartOffset = stream.pos;\n\t\t\t\t\texit = true;\n\t\t\t\t} else {\n\t\t\t\t\topenBracesToFind++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase slash:\n\t\t\t\tconsumeBlockCommentBackwards();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (position.line - document.positionAt(stream.pos).line > 100\n\t\t\t|| stream.pos <= limitOffset) {\n\t\t\texit = true;\n\t\t}\n\t}\n\n\t// We are at an opening brace. We need to include its selector.\n\tcurrentLine = document.positionAt(stream.pos).line;\n\topenBracesToFind = 0;\n\tlet foundSelector = false;\n\twhile (!exit && !stream.sof() && !foundSelector && openBracesToFind >= 0) {\n\t\tconsumeLineCommentBackwards();\n\n\t\tconst ch = stream.backUp(1);\n\t\tif (/\\s/.test(String.fromCharCode(ch))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tswitch (ch) {\n\t\t\tcase slash:\n\t\t\t\tconsumeBlockCommentBackwards();\n\t\t\t\tbreak;\n\t\t\tcase closeBrace:\n\t\t\t\topenBracesToFind++;\n\t\t\t\tbreak;\n\t\t\tcase openBrace:\n\t\t\t\topenBracesToFind--;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (!openBracesToFind) {\n\t\t\t\t\tfoundSelector = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!stream.sof() && foundSelector) {\n\t\t\tstartOffset = stream.pos;\n\t\t}\n\t}\n\n\ttry {\n\t\tconst buffer = ' '.repeat(startOffset) + document.getText().substring(startOffset, endOffset);\n\t\treturn parseStylesheet(buffer);\n\t} catch (e) {\n\t\treturn;\n\t}\n}\n\n/**\n * Returns node corresponding to given position in the given root node\n */\nexport function getFlatNode(root: FlatNode | undefined, offset: number, includeNodeBoundary: boolean): FlatNode | undefined {\n\tif (!root) {\n\t\treturn;\n\t}\n\n\tfunction getFlatNodeChild(child: FlatNode | undefined): FlatNode | undefined {\n\t\tif (!child) {\n\t\t\treturn;\n\t\t}\n\t\tconst nodeStart = child.start;\n\t\tconst nodeEnd = child.end;\n\t\tif ((nodeStart < offset && nodeEnd > offset)\n\t\t\t|| (includeNodeBoundary && nodeStart <= offset && nodeEnd >= offset)) {\n\t\t\treturn getFlatNodeChildren(child.children) ?? child;\n\t\t}\n\t\telse if ('close' in <any>child) {\n\t\t\t// We have an HTML node in this case.\n\t\t\t// In case this node is an invalid unpaired HTML node,\n\t\t\t// we still want to search its children\n\t\t\tconst htmlChild = <HtmlFlatNode>child;\n\t\t\tif (htmlChild.open && !htmlChild.close) {\n\t\t\t\treturn getFlatNodeChildren(htmlChild.children);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tfunction getFlatNodeChildren(children: FlatNode[]): FlatNode | undefined {\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst foundChild = getFlatNodeChild(children[i]);\n\t\t\tif (foundChild) {\n\t\t\t\treturn foundChild;\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\treturn getFlatNodeChildren(root.children);\n}\n\nexport const allowedMimeTypesInScriptTag = ['text/html', 'text/plain', 'text/x-template', 'text/template', 'text/ng-template'];\n\n/**\n * Finds the HTML node within an HTML document at a given position\n * If position is inside a script tag of type template, then it will be parsed to find the inner HTML node as well\n */\nexport function getHtmlFlatNode(documentText: string, root: FlatNode | undefined, offset: number, includeNodeBoundary: boolean): HtmlFlatNode | undefined {\n\tlet currentNode: HtmlFlatNode | undefined = <HtmlFlatNode | undefined>getFlatNode(root, offset, includeNodeBoundary);\n\tif (!currentNode) { return; }\n\n\t// If the currentNode is a script one, first set up its subtree and then find HTML node.\n\tif (currentNode.name === 'script' && currentNode.children.length === 0) {\n\t\tconst scriptNodeBody = setupScriptNodeSubtree(documentText, currentNode);\n\t\tif (scriptNodeBody) {\n\t\t\tcurrentNode = getHtmlFlatNode(scriptNodeBody, currentNode, offset, includeNodeBoundary) ?? currentNode;\n\t\t}\n\t}\n\telse if (currentNode.type === 'cdata') {\n\t\tconst cdataBody = setupCdataNodeSubtree(documentText, currentNode);\n\t\tcurrentNode = getHtmlFlatNode(cdataBody, currentNode, offset, includeNodeBoundary) ?? currentNode;\n\t}\n\treturn currentNode;\n}\n\nexport function setupScriptNodeSubtree(documentText: string, scriptNode: HtmlFlatNode): string {\n\tconst isTemplateScript = scriptNode.name === 'script' &&\n\t\t(scriptNode.attributes &&\n\t\t\tscriptNode.attributes.some(x => x.name.toString() === 'type'\n\t\t\t\t&& allowedMimeTypesInScriptTag.includes(x.value.toString())));\n\tif (isTemplateScript\n\t\t&& scriptNode.open) {\n\t\t// blank out the rest of the document and generate the subtree.\n\t\tconst beforePadding = ' '.repeat(scriptNode.open.end);\n\t\tconst endToUse = scriptNode.close ? scriptNode.close.start : scriptNode.end;\n\t\tconst scriptBodyText = beforePadding + documentText.substring(scriptNode.open.end, endToUse);\n\t\tconst innerRoot: HtmlFlatNode = parse(scriptBodyText);\n\t\tinnerRoot.children.forEach(child => {\n\t\t\tscriptNode.children.push(child);\n\t\t\tchild.parent = scriptNode;\n\t\t});\n\t\treturn scriptBodyText;\n\t}\n\treturn '';\n}\n\nexport function setupCdataNodeSubtree(documentText: string, cdataNode: HtmlFlatNode): string {\n\t// blank out the rest of the document and generate the subtree.\n\tconst cdataStart = '<![CDATA[';\n\tconst cdataEnd = ']]>';\n\tconst startToUse = cdataNode.start + cdataStart.length;\n\tconst endToUse = cdataNode.end - cdataEnd.length;\n\tconst beforePadding = ' '.repeat(startToUse);\n\tconst cdataBody = beforePadding + documentText.substring(startToUse, endToUse);\n\tconst innerRoot: HtmlFlatNode = parse(cdataBody);\n\tinnerRoot.children.forEach(child => {\n\t\tcdataNode.children.push(child);\n\t\tchild.parent = cdataNode;\n\t});\n\treturn cdataBody;\n}\n\nexport function isOffsetInsideOpenOrCloseTag(node: FlatNode, offset: number): boolean {\n\tconst htmlNode = node as HtmlFlatNode;\n\tif ((htmlNode.open && offset > htmlNode.open.start && offset < htmlNode.open.end)\n\t\t|| (htmlNode.close && offset > htmlNode.close.start && offset < htmlNode.close.end)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function offsetRangeToSelection(document: vscode.TextDocument, start: number, end: number): vscode.Selection {\n\tconst startPos = document.positionAt(start);\n\tconst endPos = document.positionAt(end);\n\treturn new vscode.Selection(startPos, endPos);\n}\n\nexport function offsetRangeToVsRange(document: vscode.TextDocument, start: number, end: number): vscode.Range {\n\tconst startPos = document.positionAt(start);\n\tconst endPos = document.positionAt(end);\n\treturn new vscode.Range(startPos, endPos);\n}\n\n/**\n * Returns the deepest non comment node under given node\n */\nexport function getDeepestFlatNode(node: FlatNode | undefined): FlatNode | undefined {\n\tif (!node || !node.children || node.children.length === 0 || !node.children.find(x => x.type !== 'comment')) {\n\t\treturn node;\n\t}\n\tfor (let i = node.children.length - 1; i >= 0; i--) {\n\t\tif (node.children[i].type !== 'comment') {\n\t\t\treturn getDeepestFlatNode(node.children[i]);\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function findNextWord(propertyValue: string, pos: number): [number | undefined, number | undefined] {\n\n\tlet foundSpace = pos === -1;\n\tlet foundStart = false;\n\tlet foundEnd = false;\n\n\tlet newSelectionStart;\n\tlet newSelectionEnd;\n\twhile (pos < propertyValue.length - 1) {\n\t\tpos++;\n\t\tif (!foundSpace) {\n\t\t\tif (propertyValue[pos] === ' ') {\n\t\t\t\tfoundSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (foundSpace && !foundStart && propertyValue[pos] === ' ') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foundStart) {\n\t\t\tnewSelectionStart = pos;\n\t\t\tfoundStart = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (propertyValue[pos] === ' ') {\n\t\t\tnewSelectionEnd = pos;\n\t\t\tfoundEnd = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (foundStart && !foundEnd) {\n\t\tnewSelectionEnd = propertyValue.length;\n\t}\n\n\treturn [newSelectionStart, newSelectionEnd];\n}\n\nexport function findPrevWord(propertyValue: string, pos: number): [number | undefined, number | undefined] {\n\n\tlet foundSpace = pos === propertyValue.length;\n\tlet foundStart = false;\n\tlet foundEnd = false;\n\n\tlet newSelectionStart;\n\tlet newSelectionEnd;\n\twhile (pos > -1) {\n\t\tpos--;\n\t\tif (!foundSpace) {\n\t\t\tif (propertyValue[pos] === ' ') {\n\t\t\t\tfoundSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (foundSpace && !foundEnd && propertyValue[pos] === ' ') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foundEnd) {\n\t\t\tnewSelectionEnd = pos + 1;\n\t\t\tfoundEnd = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (propertyValue[pos] === ' ') {\n\t\t\tnewSelectionStart = pos + 1;\n\t\t\tfoundStart = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (foundEnd && !foundStart) {\n\t\tnewSelectionStart = 0;\n\t}\n\n\treturn [newSelectionStart, newSelectionEnd];\n}\n\nexport function getNodesInBetween(node1: FlatNode, node2: FlatNode): FlatNode[] {\n\t// Same node\n\tif (sameNodes(node1, node2)) {\n\t\treturn [node1];\n\t}\n\n\t// Not siblings\n\tif (!sameNodes(node1.parent, node2.parent)) {\n\t\t// node2 is ancestor of node1\n\t\tif (node2.start < node1.start) {\n\t\t\treturn [node2];\n\t\t}\n\n\t\t// node1 is ancestor of node2\n\t\tif (node2.start < node1.end) {\n\t\t\treturn [node1];\n\t\t}\n\n\t\t// Get the highest ancestor of node1 that should be commented\n\t\twhile (node1.parent && node1.parent.end < node2.start) {\n\t\t\tnode1 = node1.parent;\n\t\t}\n\n\t\t// Get the highest ancestor of node2 that should be commented\n\t\twhile (node2.parent && node2.parent.start > node1.start) {\n\t\t\tnode2 = node2.parent;\n\t\t}\n\t}\n\n\tconst siblings: FlatNode[] = [];\n\tlet currentNode: FlatNode | undefined = node1;\n\tconst position = node2.end;\n\twhile (currentNode && position > currentNode.start) {\n\t\tsiblings.push(currentNode);\n\t\tcurrentNode = currentNode.nextSibling;\n\t}\n\treturn siblings;\n}\n\nexport function sameNodes(node1: FlatNode | undefined, node2: FlatNode | undefined): boolean {\n\t// return true if they're both undefined\n\tif (!node1 && !node2) {\n\t\treturn true;\n\t}\n\t// return false if only one of them is undefined\n\tif (!node1 || !node2) {\n\t\treturn false;\n\t}\n\treturn node1.start === node2.start && node1.end === node2.end;\n}\n\nexport function getEmmetConfiguration(syntax: string) {\n\tconst emmetConfig = vscode.workspace.getConfiguration('emmet');\n\tconst syntaxProfiles = Object.assign({}, emmetConfig['syntaxProfiles'] || {});\n\tconst preferences = Object.assign({}, emmetConfig['preferences'] || {});\n\t// jsx, xml and xsl syntaxes need to have self closing tags unless otherwise configured by user\n\tif (syntax === 'jsx' || syntax === 'xml' || syntax === 'xsl') {\n\t\tsyntaxProfiles[syntax] = syntaxProfiles[syntax] || {};\n\t\tif (typeof syntaxProfiles[syntax] === 'object'\n\t\t\t&& !syntaxProfiles[syntax].hasOwnProperty('self_closing_tag') // Old Emmet format\n\t\t\t&& !syntaxProfiles[syntax].hasOwnProperty('selfClosingStyle') // Emmet 2.0 format\n\t\t) {\n\t\t\tsyntaxProfiles[syntax] = {\n\t\t\t\t...syntaxProfiles[syntax],\n\t\t\t\tselfClosingStyle: syntax === 'jsx' ? 'xhtml' : 'xml'\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tpreferences,\n\t\tshowExpandedAbbreviation: emmetConfig['showExpandedAbbreviation'],\n\t\tshowAbbreviationSuggestions: emmetConfig['showAbbreviationSuggestions'],\n\t\tsyntaxProfiles,\n\t\tvariables: emmetConfig['variables'],\n\t\texcludeLanguages: emmetConfig['excludeLanguages'],\n\t\tshowSuggestionsAsSnippets: emmetConfig['showSuggestionsAsSnippets']\n\t};\n}\n\n/**\n * Itereates by each child, as well as nested child's children, in their order\n * and invokes `fn` for each. If `fn` function returns `false`, iteration stops\n */\nexport function iterateCSSToken(token: FlatCssToken, fn: (x: any) => any): boolean {\n\tfor (let i = 0, il = token.size; i < il; i++) {\n\t\tif (fn(token.item(i)) === false || iterateCSSToken(token.item(i), fn) === false) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Returns `name` CSS property from given `rule`\n */\nexport function getCssPropertyFromRule(rule: FlatRule, name: string): FlatProperty | undefined {\n\treturn rule.children.find(node => node.type === 'property' && node.name === name) as FlatProperty;\n}\n\n/**\n * Returns css property under caret in given editor or `null` if such node cannot\n * be found\n */\nexport function getCssPropertyFromDocument(editor: vscode.TextEditor, position: vscode.Position): FlatProperty | null {\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tconst offset = document.offsetAt(position);\n\tconst node = getFlatNode(rootNode, offset, true);\n\n\tif (isStyleSheet(editor.document.languageId)) {\n\t\treturn node && node.type === 'property' ? <FlatProperty>node : null;\n\t}\n\n\tconst htmlNode = <HtmlFlatNode>node;\n\tif (htmlNode\n\t\t&& htmlNode.name === 'style'\n\t\t&& htmlNode.open && htmlNode.close\n\t\t&& htmlNode.open.end < offset\n\t\t&& htmlNode.close.start > offset) {\n\t\tconst buffer = ' '.repeat(htmlNode.start) +\n\t\t\tdocument.getText().substring(htmlNode.start, htmlNode.end);\n\t\tconst innerRootNode = parseStylesheet(buffer);\n\t\tconst innerNode = getFlatNode(innerRootNode, offset, true);\n\t\treturn (innerNode && innerNode.type === 'property') ? <FlatProperty>innerNode : null;\n\t}\n\n\treturn null;\n}\n\n\nexport function getEmbeddedCssNodeIfAny(document: vscode.TextDocument, currentNode: FlatNode | undefined, position: vscode.Position): FlatNode | undefined {\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\tconst currentHtmlNode = <HtmlFlatNode>currentNode;\n\tif (currentHtmlNode && currentHtmlNode.open && currentHtmlNode.close) {\n\t\tconst offset = document.offsetAt(position);\n\t\tif (currentHtmlNode.open.end < offset && offset <= currentHtmlNode.close.start) {\n\t\t\tif (currentHtmlNode.name === 'style') {\n\t\t\t\tconst buffer = ' '.repeat(currentHtmlNode.open.end) + document.getText().substring(currentHtmlNode.open.end, currentHtmlNode.close.start);\n\t\t\t\treturn parseStylesheet(buffer);\n\t\t\t}\n\t\t}\n\t}\n\treturn;\n}\n\nexport function isStyleAttribute(currentNode: FlatNode | undefined, offset: number): boolean {\n\tif (!currentNode) {\n\t\treturn false;\n\t}\n\tconst currentHtmlNode = <HtmlFlatNode>currentNode;\n\tconst index = (currentHtmlNode.attributes || []).findIndex(x => x.name.toString() === 'style');\n\tif (index === -1) {\n\t\treturn false;\n\t}\n\tconst styleAttribute = currentHtmlNode.attributes[index];\n\treturn offset >= styleAttribute.value.start && offset <= styleAttribute.value.end;\n}\n\nexport function isNumber(obj: any): obj is number {\n\treturn typeof obj === 'number';\n}\n\nexport function toLSTextDocument(doc: vscode.TextDocument): LSTextDocument {\n\treturn LSTextDocument.create(doc.uri.toString(), doc.languageId, doc.version, doc.getText());\n}\n\nexport function getPathBaseName(path: string): string {\n\tconst pathAfterSlashSplit = path.split('/').pop();\n\tconst pathAfterBackslashSplit = pathAfterSlashSplit ? pathAfterSlashSplit.split('\\\\').pop() : '';\n\treturn pathAfterBackslashSplit ?? '';\n}\n\nexport function getSyntaxes() {\n\t/**\n\t * List of all known syntaxes, from emmetio/emmet\n\t */\n\treturn {\n\t\tmarkup: ['html', 'xml', 'xsl', 'jsx', 'js', 'pug', 'slim', 'haml'],\n\t\tstylesheet: ['css', 'sass', 'scss', 'less', 'sss', 'stylus']\n\t};\n}\n"
  },
  {
    "path": "extensions/emmet/test-workspace/.vscode/settings.json",
    "content": "{\n\t\"editor.minimap.enabled\": false, // see https://github.com/microsoft/vscode/issues/115747\n\t\"workbench.editor.languageDetection\": false,\n\t\"typescript.disableAutomaticTypeAcquisition\": true,\n\t\"json.schemaDownload.enable\": false,\n\t\"npm.fetchOnlinePackageInfo\": false,\n\t\"npm.autoDetect\": \"off\",\n\t\"workbench.localHistory.enabled\": false\n}\n"
  },
  {
    "path": "extensions/emmet/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\"\n\t},\n\t\"exclude\": [\n\t\t\"node_modules\",\n\t\t\".vscode-test\"\n\t],\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/esbuild-webview-common.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\n/**\n * @fileoverview Common build script for extension scripts used in in webviews.\n */\n\nconst path = require('path');\nconst esbuild = require('esbuild');\n\n/**\n * @typedef {Partial<import('esbuild').BuildOptions> & {\n * \tentryPoints: string[] | Record<string, string> | { in: string, out: string }[];\n * \toutdir: string;\n * }} BuildOptions\n */\n\n/**\n * Build the source code once using esbuild.\n *\n * @param {BuildOptions} options\n * @param {(outDir: string) => unknown} [didBuild]\n */\nasync function build(options, didBuild) {\n\tawait esbuild.build({\n\t\tbundle: true,\n\t\tminify: true,\n\t\tsourcemap: false,\n\t\tformat: 'esm',\n\t\tplatform: 'browser',\n\t\ttarget: ['es2020'],\n\t\t...options,\n\t});\n\n\tawait didBuild?.(options.outdir);\n}\n\n/**\n * Build the source code once using esbuild, logging errors instead of throwing.\n *\n * @param {BuildOptions} options\n * @param {(outDir: string) => unknown} [didBuild]\n */\nasync function tryBuild(options, didBuild) {\n\ttry {\n\t\tawait build(options, didBuild);\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n}\n\n/**\n * @param {{\n * \tsrcDir: string;\n *  outdir: string;\n *  entryPoints: string[] | Record<string, string> | { in: string, out: string }[];\n * \tadditionalOptions?: Partial<import('esbuild').BuildOptions>\n * }} config\n * @param {string[]} args\n * @param {(outDir: string) => unknown} [didBuild]\n */\nmodule.exports.run = async function (config, args, didBuild) {\n\tlet outdir = config.outdir;\n\tconst outputRootIndex = args.indexOf('--outputRoot');\n\tif (outputRootIndex >= 0) {\n\t\tconst outputRoot = args[outputRootIndex + 1];\n\t\tconst outputDirName = path.basename(outdir);\n\t\toutdir = path.join(outputRoot, outputDirName);\n\t}\n\n\t/** @type {BuildOptions} */\n\tconst resolvedOptions = {\n\t\tentryPoints: config.entryPoints,\n\t\toutdir,\n\t\t...(config.additionalOptions || {}),\n\t};\n\n\tconst isWatch = args.indexOf('--watch') >= 0;\n\tif (isWatch) {\n\t\tawait tryBuild(resolvedOptions, didBuild);\n\n\t\tconst watcher = require('@parcel/watcher');\n\t\twatcher.subscribe(config.srcDir, () => tryBuild(resolvedOptions, didBuild));\n\t} else {\n\t\treturn build(resolvedOptions, didBuild).catch(() => process.exit(1));\n\t}\n};\n"
  },
  {
    "path": "extensions/extension-editing/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/extension-editing/.vscodeignore",
    "content": "test/**\nsrc/**\ntsconfig.json\nout/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/extension-editing/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extensionEditingBrowserMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'extensionEditingBrowserMain.js'\n\t}\n});\n\n"
  },
  {
    "path": "extensions/extension-editing/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extensionEditingMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'extensionEditingMain.js'\n\t},\n\texternals: {\n\t\t'../../../product.json': 'commonjs ../../../product.json',\n\t}\n});\n"
  },
  {
    "path": "extensions/extension-editing/package.json",
    "content": "{\n  \"name\": \"extension-editing\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.4.0\"\n  },\n  \"icon\": \"images/icon.png\",\n  \"activationEvents\": [\n    \"onLanguage:json\",\n    \"onLanguage:markdown\"\n  ],\n  \"main\": \"./out/extensionEditingMain\",\n  \"browser\": \"./dist/browser/extensionEditingBrowserMain\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:extension-editing\",\n    \"watch\": \"gulp watch-extension:extension-editing\"\n  },\n  \"dependencies\": {\n    \"jsonc-parser\": \"^3.2.0\",\n    \"markdown-it\": \"^12.3.2\",\n    \"parse5\": \"^3.0.2\"\n  },\n  \"contributes\": {\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"package.json\",\n        \"url\": \"vscode://schemas/vscode-extensions\"\n      },\n      {\n        \"fileMatch\": \"*language-configuration.json\",\n        \"url\": \"vscode://schemas/language-configuration\"\n      },\n      {\n        \"fileMatch\": [\n          \"*icon-theme.json\",\n          \"!*product-icon-theme.json\"\n        ],\n        \"url\": \"vscode://schemas/icon-theme\"\n      },\n      {\n        \"fileMatch\": \"*product-icon-theme.json\",\n        \"url\": \"vscode://schemas/product-icon-theme\"\n      },\n      {\n        \"fileMatch\": \"*color-theme.json\",\n        \"url\": \"vscode://schemas/color-theme\"\n      }\n    ],\n    \"languages\": [\n      {\n        \"id\": \"ignore\",\n        \"filenames\": [\n          \".vscodeignore\"\n        ]\n      }\n    ]\n  },\n  \"devDependencies\": {\n    \"@types/markdown-it\": \"0.0.2\",\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/extension-editing/package.nls.json",
    "content": "{\n\t\"displayName\": \"Extension Authoring\",\n\t\"description\": \"Provides linting capabilities for authoring extensions.\"\n}\n"
  },
  {
    "path": "extensions/extension-editing/src/constants.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { l10n } from 'vscode';\n\nexport const implicitActivationEvent = l10n.t(\"This activation event cannot be explicitly listed by your extension.\");\nexport const redundantImplicitActivationEvent = l10n.t(\"This activation event can be removed as VS Code generates these automatically from your package.json contribution declarations.\");\n"
  },
  {
    "path": "extensions/extension-editing/src/extensionEditingBrowserMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { PackageDocument } from './packageDocumentHelper';\n\nexport function activate(context: vscode.ExtensionContext) {\n\t//package.json suggestions\n\tcontext.subscriptions.push(registerPackageDocumentCompletions());\n\n}\n\nfunction registerPackageDocumentCompletions(): vscode.Disposable {\n\treturn vscode.languages.registerCompletionItemProvider({ language: 'json', pattern: '**/package.json' }, {\n\t\tprovideCompletionItems(document, position, token) {\n\t\t\treturn new PackageDocument(document).provideCompletionItems(position, token);\n\t\t}\n\t});\n\n}\n"
  },
  {
    "path": "extensions/extension-editing/src/extensionEditingMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { PackageDocument } from './packageDocumentHelper';\nimport { ExtensionLinter } from './extensionLinter';\n\nexport function activate(context: vscode.ExtensionContext) {\n\n\t//package.json suggestions\n\tcontext.subscriptions.push(registerPackageDocumentCompletions());\n\n\t//package.json code actions for lint warnings\n\tcontext.subscriptions.push(registerCodeActionsProvider());\n\n\tcontext.subscriptions.push(new ExtensionLinter());\n}\n\nfunction registerPackageDocumentCompletions(): vscode.Disposable {\n\treturn vscode.languages.registerCompletionItemProvider({ language: 'json', pattern: '**/package.json' }, {\n\t\tprovideCompletionItems(document, position, token) {\n\t\t\treturn new PackageDocument(document).provideCompletionItems(position, token);\n\t\t}\n\t});\n}\n\nfunction registerCodeActionsProvider(): vscode.Disposable {\n\treturn vscode.languages.registerCodeActionsProvider({ language: 'json', pattern: '**/package.json' }, {\n\t\tprovideCodeActions(document, range, context, token) {\n\t\t\treturn new PackageDocument(document).provideCodeActions(range, context, token);\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "extensions/extension-editing/src/extensionEngineValidation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// https://github.com/microsoft/vscode/blob/6cb34eb22385bc93ab25aa2e5113f59c7a2299ac/src/vs/platform/extensions/common/extensionValidator.ts\n\nexport interface IParsedVersion {\n\thasCaret: boolean;\n\thasGreaterEquals: boolean;\n\tmajorBase: number;\n\tmajorMustEqual: boolean;\n\tminorBase: number;\n\tminorMustEqual: boolean;\n\tpatchBase: number;\n\tpatchMustEqual: boolean;\n\tpreRelease: string | null;\n}\n\nexport interface INormalizedVersion {\n\tmajorBase: number;\n\tmajorMustEqual: boolean;\n\tminorBase: number;\n\tminorMustEqual: boolean;\n\tpatchBase: number;\n\tpatchMustEqual: boolean;\n\tnotBefore: number; /* milliseconds timestamp, or 0 */\n\tisMinimum: boolean;\n}\n\nconst VERSION_REGEXP = /^(\\^|>=)?((\\d+)|x)\\.((\\d+)|x)\\.((\\d+)|x)(\\-.*)?$/;\nconst NOT_BEFORE_REGEXP = /^-(\\d{4})(\\d{2})(\\d{2})$/;\n\nexport function isValidVersionStr(version: string): boolean {\n\tversion = version.trim();\n\treturn (version === '*' || VERSION_REGEXP.test(version));\n}\n\nexport function parseVersion(version: string): IParsedVersion | null {\n\tif (!isValidVersionStr(version)) {\n\t\treturn null;\n\t}\n\n\tversion = version.trim();\n\n\tif (version === '*') {\n\t\treturn {\n\t\t\thasCaret: false,\n\t\t\thasGreaterEquals: false,\n\t\t\tmajorBase: 0,\n\t\t\tmajorMustEqual: false,\n\t\t\tminorBase: 0,\n\t\t\tminorMustEqual: false,\n\t\t\tpatchBase: 0,\n\t\t\tpatchMustEqual: false,\n\t\t\tpreRelease: null\n\t\t};\n\t}\n\n\tconst m = version.match(VERSION_REGEXP);\n\tif (!m) {\n\t\treturn null;\n\t}\n\treturn {\n\t\thasCaret: m[1] === '^',\n\t\thasGreaterEquals: m[1] === '>=',\n\t\tmajorBase: m[2] === 'x' ? 0 : parseInt(m[2], 10),\n\t\tmajorMustEqual: (m[2] === 'x' ? false : true),\n\t\tminorBase: m[4] === 'x' ? 0 : parseInt(m[4], 10),\n\t\tminorMustEqual: (m[4] === 'x' ? false : true),\n\t\tpatchBase: m[6] === 'x' ? 0 : parseInt(m[6], 10),\n\t\tpatchMustEqual: (m[6] === 'x' ? false : true),\n\t\tpreRelease: m[8] || null\n\t};\n}\n\nexport function normalizeVersion(version: IParsedVersion | null): INormalizedVersion | null {\n\tif (!version) {\n\t\treturn null;\n\t}\n\n\tconst majorBase = version.majorBase;\n\tconst majorMustEqual = version.majorMustEqual;\n\tconst minorBase = version.minorBase;\n\tlet minorMustEqual = version.minorMustEqual;\n\tconst patchBase = version.patchBase;\n\tlet patchMustEqual = version.patchMustEqual;\n\n\tif (version.hasCaret) {\n\t\tif (majorBase === 0) {\n\t\t\tpatchMustEqual = false;\n\t\t} else {\n\t\t\tminorMustEqual = false;\n\t\t\tpatchMustEqual = false;\n\t\t}\n\t}\n\n\tlet notBefore = 0;\n\tif (version.preRelease) {\n\t\tconst match = NOT_BEFORE_REGEXP.exec(version.preRelease);\n\t\tif (match) {\n\t\t\tconst [, year, month, day] = match;\n\t\t\tnotBefore = Date.UTC(Number(year), Number(month) - 1, Number(day));\n\t\t}\n\t}\n\n\treturn {\n\t\tmajorBase: majorBase,\n\t\tmajorMustEqual: majorMustEqual,\n\t\tminorBase: minorBase,\n\t\tminorMustEqual: minorMustEqual,\n\t\tpatchBase: patchBase,\n\t\tpatchMustEqual: patchMustEqual,\n\t\tisMinimum: version.hasGreaterEquals,\n\t\tnotBefore,\n\t};\n}\n"
  },
  {
    "path": "extensions/extension-editing/src/extensionLinter.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { URL } from 'url';\n\nimport { parseTree, findNodeAtLocation, Node as JsonNode, getNodeValue } from 'jsonc-parser';\nimport * as MarkdownItType from 'markdown-it';\n\nimport { commands, languages, workspace, Disposable, TextDocument, Uri, Diagnostic, Range, DiagnosticSeverity, Position, env, l10n } from 'vscode';\nimport { INormalizedVersion, normalizeVersion, parseVersion } from './extensionEngineValidation';\nimport { JsonStringScanner } from './jsonReconstruct';\nimport { implicitActivationEvent, redundantImplicitActivationEvent } from './constants';\n\nconst product = JSON.parse(fs.readFileSync(path.join(env.appRoot, 'product.json'), { encoding: 'utf-8' }));\nconst allowedBadgeProviders: string[] = (product.extensionAllowedBadgeProviders || []).map((s: string) => s.toLowerCase());\nconst allowedBadgeProvidersRegex: RegExp[] = (product.extensionAllowedBadgeProvidersRegex || []).map((r: string) => new RegExp(r));\nconst extensionEnabledApiProposals: Record<string, string[]> = product.extensionEnabledApiProposals ?? {};\nconst reservedImplicitActivationEventPrefixes = ['onNotebookSerializer:'];\nconst redundantImplicitActivationEventPrefixes = ['onLanguage:', 'onView:', 'onAuthenticationRequest:', 'onCommand:', 'onCustomEditor:', 'onTerminalProfile:', 'onRenderer:', 'onTerminalQuickFixRequest:', 'onWalkthrough:'];\n\nfunction isTrustedSVGSource(uri: Uri): boolean {\n\treturn allowedBadgeProviders.includes(uri.authority.toLowerCase()) || allowedBadgeProvidersRegex.some(r => r.test(uri.toString()));\n}\n\nconst httpsRequired = l10n.t(\"Images must use the HTTPS protocol.\");\nconst svgsNotValid = l10n.t(\"SVGs are not a valid image source.\");\nconst embeddedSvgsNotValid = l10n.t(\"Embedded SVGs are not a valid image source.\");\nconst dataUrlsNotValid = l10n.t(\"Data URLs are not a valid image source.\");\nconst relativeUrlRequiresHttpsRepository = l10n.t(\"Relative image URLs require a repository with HTTPS protocol to be specified in the package.json.\");\nconst relativeBadgeUrlRequiresHttpsRepository = l10n.t(\"Relative badge URLs require a repository with HTTPS protocol to be specified in this package.json.\");\nconst apiProposalNotListed = l10n.t(\"This proposal cannot be used because for this extension the product defines a fixed set of API proposals. You can test your extension but before publishing you MUST reach out to the VS Code team.\");\nconst bumpEngineForImplicitActivationEvents = l10n.t(\"This activation event can be removed for extensions targeting engine version ^1.75 as VS Code will generate these automatically from your package.json contribution declarations.\");\nconst starActivation = l10n.t(\"Using '*' activation is usually a bad idea as it impacts performance.\");\nconst parsingErrorHeader = l10n.t(\"Error parsing the when-clause:\");\n\nenum Context {\n\tICON,\n\tBADGE,\n\tMARKDOWN\n}\n\ninterface TokenAndPosition {\n\ttoken: MarkdownItType.Token;\n\tbegin: number;\n\tend: number;\n}\n\ninterface PackageJsonInfo {\n\tisExtension: boolean;\n\thasHttpsRepository: boolean;\n\trepository: Uri;\n\timplicitActivationEvents: Set<string> | undefined;\n\tengineVersion: INormalizedVersion | null;\n}\n\nexport class ExtensionLinter {\n\n\tprivate diagnosticsCollection = languages.createDiagnosticCollection('extension-editing');\n\tprivate fileWatcher = workspace.createFileSystemWatcher('**/package.json');\n\tprivate disposables: Disposable[] = [this.diagnosticsCollection, this.fileWatcher];\n\n\tprivate folderToPackageJsonInfo: Record<string, PackageJsonInfo> = {};\n\tprivate packageJsonQ = new Set<TextDocument>();\n\tprivate readmeQ = new Set<TextDocument>();\n\tprivate timer: NodeJS.Timeout | undefined;\n\tprivate markdownIt: MarkdownItType.MarkdownIt | undefined;\n\tprivate parse5: typeof import('parse5') | undefined;\n\n\tconstructor() {\n\t\tthis.disposables.push(\n\t\t\tworkspace.onDidOpenTextDocument(document => this.queue(document)),\n\t\t\tworkspace.onDidChangeTextDocument(event => this.queue(event.document)),\n\t\t\tworkspace.onDidCloseTextDocument(document => this.clear(document)),\n\t\t\tthis.fileWatcher.onDidChange(uri => this.packageJsonChanged(this.getUriFolder(uri))),\n\t\t\tthis.fileWatcher.onDidCreate(uri => this.packageJsonChanged(this.getUriFolder(uri))),\n\t\t\tthis.fileWatcher.onDidDelete(uri => this.packageJsonChanged(this.getUriFolder(uri))),\n\t\t);\n\t\tworkspace.textDocuments.forEach(document => this.queue(document));\n\t}\n\n\tprivate queue(document: TextDocument) {\n\t\tconst p = document.uri.path;\n\t\tif (document.languageId === 'json' && p.endsWith('/package.json')) {\n\t\t\tthis.packageJsonQ.add(document);\n\t\t\tthis.startTimer();\n\t\t}\n\t\tthis.queueReadme(document);\n\t}\n\n\tprivate queueReadme(document: TextDocument) {\n\t\tconst p = document.uri.path;\n\t\tif (document.languageId === 'markdown' && (p.toLowerCase().endsWith('/readme.md') || p.toLowerCase().endsWith('/changelog.md'))) {\n\t\t\tthis.readmeQ.add(document);\n\t\t\tthis.startTimer();\n\t\t}\n\t}\n\n\tprivate startTimer() {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t}\n\t\tthis.timer = setTimeout(() => {\n\t\t\tthis.lint()\n\t\t\t\t.catch(console.error);\n\t\t}, 300);\n\t}\n\n\tprivate async lint() {\n\t\tawait Promise.all([\n\t\t\tthis.lintPackageJson(),\n\t\t\tthis.lintReadme()\n\t\t]);\n\t}\n\n\tprivate async lintPackageJson() {\n\t\tfor (const document of Array.from(this.packageJsonQ)) {\n\t\t\tthis.packageJsonQ.delete(document);\n\t\t\tif (document.isClosed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst diagnostics: Diagnostic[] = [];\n\n\t\t\tconst tree = parseTree(document.getText());\n\t\t\tconst info = this.readPackageJsonInfo(this.getUriFolder(document.uri), tree);\n\t\t\tif (tree && info.isExtension) {\n\n\t\t\t\tconst icon = findNodeAtLocation(tree, ['icon']);\n\t\t\t\tif (icon && icon.type === 'string') {\n\t\t\t\t\tthis.addDiagnostics(diagnostics, document, icon.offset + 1, icon.offset + icon.length - 1, icon.value, Context.ICON, info);\n\t\t\t\t}\n\n\t\t\t\tconst badges = findNodeAtLocation(tree, ['badges']);\n\t\t\t\tif (badges && badges.type === 'array' && badges.children) {\n\t\t\t\t\tbadges.children.map(child => findNodeAtLocation(child, ['url']))\n\t\t\t\t\t\t.filter(url => url && url.type === 'string')\n\t\t\t\t\t\t.map(url => this.addDiagnostics(diagnostics, document, url!.offset + 1, url!.offset + url!.length - 1, url!.value, Context.BADGE, info));\n\t\t\t\t}\n\n\t\t\t\tconst publisher = findNodeAtLocation(tree, ['publisher']);\n\t\t\t\tconst name = findNodeAtLocation(tree, ['name']);\n\t\t\t\tconst enabledApiProposals = findNodeAtLocation(tree, ['enabledApiProposals']);\n\t\t\t\tif (publisher?.type === 'string' && name?.type === 'string' && enabledApiProposals?.type === 'array') {\n\t\t\t\t\tconst extensionId = `${getNodeValue(publisher)}.${getNodeValue(name)}`;\n\t\t\t\t\tconst effectiveProposalNames = extensionEnabledApiProposals[extensionId];\n\t\t\t\t\tif (Array.isArray(effectiveProposalNames) && enabledApiProposals.children) {\n\t\t\t\t\t\tfor (const child of enabledApiProposals.children) {\n\t\t\t\t\t\t\tconst proposalName = child.type === 'string' ? getNodeValue(child) : undefined;\n\t\t\t\t\t\t\tif (typeof proposalName === 'string' && !effectiveProposalNames.includes(proposalName.split('@')[0])) {\n\t\t\t\t\t\t\t\tconst start = document.positionAt(child.offset);\n\t\t\t\t\t\t\t\tconst end = document.positionAt(child.offset + child.length);\n\t\t\t\t\t\t\t\tdiagnostics.push(new Diagnostic(new Range(start, end), apiProposalNotListed, DiagnosticSeverity.Error));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst activationEventsNode = findNodeAtLocation(tree, ['activationEvents']);\n\t\t\t\tif (activationEventsNode?.type === 'array' && activationEventsNode.children) {\n\t\t\t\t\tfor (const activationEventNode of activationEventsNode.children) {\n\t\t\t\t\t\tconst activationEvent = getNodeValue(activationEventNode);\n\t\t\t\t\t\tconst isImplicitActivationSupported = info.engineVersion && info.engineVersion?.majorBase >= 1 && info.engineVersion?.minorBase >= 75;\n\t\t\t\t\t\t// Redundant Implicit Activation\n\t\t\t\t\t\tif (info.implicitActivationEvents?.has(activationEvent) && redundantImplicitActivationEventPrefixes.some((prefix) => activationEvent.startsWith(prefix))) {\n\t\t\t\t\t\t\tconst start = document.positionAt(activationEventNode.offset);\n\t\t\t\t\t\t\tconst end = document.positionAt(activationEventNode.offset + activationEventNode.length);\n\t\t\t\t\t\t\tconst message = isImplicitActivationSupported ? redundantImplicitActivationEvent : bumpEngineForImplicitActivationEvents;\n\t\t\t\t\t\t\tdiagnostics.push(new Diagnostic(new Range(start, end), message, isImplicitActivationSupported ? DiagnosticSeverity.Warning : DiagnosticSeverity.Information));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Reserved Implicit Activation\n\t\t\t\t\t\tfor (const implicitActivationEventPrefix of reservedImplicitActivationEventPrefixes) {\n\t\t\t\t\t\t\tif (isImplicitActivationSupported && activationEvent.startsWith(implicitActivationEventPrefix)) {\n\t\t\t\t\t\t\t\tconst start = document.positionAt(activationEventNode.offset);\n\t\t\t\t\t\t\t\tconst end = document.positionAt(activationEventNode.offset + activationEventNode.length);\n\t\t\t\t\t\t\t\tdiagnostics.push(new Diagnostic(new Range(start, end), implicitActivationEvent, DiagnosticSeverity.Error));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Star activation\n\t\t\t\t\t\tif (activationEvent === '*') {\n\t\t\t\t\t\t\tconst start = document.positionAt(activationEventNode.offset);\n\t\t\t\t\t\t\tconst end = document.positionAt(activationEventNode.offset + activationEventNode.length);\n\t\t\t\t\t\t\tconst diagnostic = new Diagnostic(new Range(start, end), starActivation, DiagnosticSeverity.Information);\n\t\t\t\t\t\t\tdiagnostic.code = {\n\t\t\t\t\t\t\t\tvalue: 'star-activation',\n\t\t\t\t\t\t\t\ttarget: Uri.parse('https://code.visualstudio.com/api/references/activation-events#Start-up'),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdiagnostics.push(diagnostic);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst whenClauseLinting = await this.lintWhenClauses(findNodeAtLocation(tree, ['contributes']), document);\n\t\t\t\tdiagnostics.push(...whenClauseLinting);\n\t\t\t}\n\t\t\tthis.diagnosticsCollection.set(document.uri, diagnostics);\n\t\t}\n\t}\n\n\t/** lints `when` and `enablement` clauses */\n\tprivate async lintWhenClauses(contributesNode: JsonNode | undefined, document: TextDocument): Promise<Diagnostic[]> {\n\t\tif (!contributesNode) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst whenClauses: JsonNode[] = [];\n\n\t\tfunction findWhens(node: JsonNode | undefined, clauseName: string) {\n\t\t\tif (node) {\n\t\t\t\tswitch (node.type) {\n\t\t\t\t\tcase 'property':\n\t\t\t\t\t\tif (node.children && node.children.length === 2) {\n\t\t\t\t\t\t\tconst key = node.children[0];\n\t\t\t\t\t\t\tconst value = node.children[1];\n\t\t\t\t\t\t\tswitch (value.type) {\n\t\t\t\t\t\t\t\tcase 'string':\n\t\t\t\t\t\t\t\t\tif (key.value === clauseName && typeof value.value === 'string' /* careful: `.value` MUST be a string 1) because a when/enablement clause is string; so also, type cast to string below is safe */) {\n\t\t\t\t\t\t\t\t\t\twhenClauses.push(value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase 'object':\n\t\t\t\t\t\t\t\tcase 'array':\n\t\t\t\t\t\t\t\t\tfindWhens(value, clauseName);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'object':\n\t\t\t\t\tcase 'array':\n\t\t\t\t\t\tif (node.children) {\n\t\t\t\t\t\t\tnode.children.forEach(n => findWhens(n, clauseName));\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[\n\t\t\tfindNodeAtLocation(contributesNode, ['menus']),\n\t\t\tfindNodeAtLocation(contributesNode, ['views']),\n\t\t\tfindNodeAtLocation(contributesNode, ['viewsWelcome']),\n\t\t\tfindNodeAtLocation(contributesNode, ['keybindings']),\n\t\t].forEach(n => findWhens(n, 'when'));\n\n\t\tfindWhens(findNodeAtLocation(contributesNode, ['commands']), 'enablement');\n\n\t\tconst parseResults = await commands.executeCommand<{ errorMessage: string; offset: number; length: number }[][]>('_validateWhenClauses', whenClauses.map(w => w.value as string /* we make sure to capture only if `w.value` is string above */));\n\n\t\tconst diagnostics: Diagnostic[] = [];\n\t\tfor (let i = 0; i < parseResults.length; ++i) {\n\t\t\tconst whenClauseJSONNode = whenClauses[i];\n\n\t\t\tconst jsonStringScanner = new JsonStringScanner(document.getText(), whenClauseJSONNode.offset + 1);\n\n\t\t\tfor (const error of parseResults[i]) {\n\t\t\t\tconst realOffset = jsonStringScanner.getOffsetInEncoded(error.offset);\n\t\t\t\tconst realOffsetEnd = jsonStringScanner.getOffsetInEncoded(error.offset + error.length);\n\t\t\t\tconst start = document.positionAt(realOffset /* +1 to account for the quote (I think) */);\n\t\t\t\tconst end = document.positionAt(realOffsetEnd);\n\t\t\t\tconst errMsg = `${parsingErrorHeader}\\n\\n${error.errorMessage}`;\n\t\t\t\tconst diagnostic = new Diagnostic(new Range(start, end), errMsg, DiagnosticSeverity.Error);\n\t\t\t\tdiagnostic.code = {\n\t\t\t\t\tvalue: 'See docs',\n\t\t\t\t\ttarget: Uri.parse('https://code.visualstudio.com/api/references/when-clause-contexts'),\n\t\t\t\t};\n\t\t\t\tdiagnostics.push(diagnostic);\n\t\t\t}\n\t\t}\n\t\treturn diagnostics;\n\t}\n\n\tprivate async lintReadme() {\n\t\tfor (const document of this.readmeQ) {\n\t\t\tthis.readmeQ.delete(document);\n\t\t\tif (document.isClosed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst folder = this.getUriFolder(document.uri);\n\t\t\tlet info = this.folderToPackageJsonInfo[folder.toString()];\n\t\t\tif (!info) {\n\t\t\t\tconst tree = await this.loadPackageJson(folder);\n\t\t\t\tinfo = this.readPackageJsonInfo(folder, tree);\n\t\t\t}\n\t\t\tif (!info.isExtension) {\n\t\t\t\tthis.diagnosticsCollection.set(document.uri, []);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst text = document.getText();\n\t\t\tif (!this.markdownIt) {\n\t\t\t\tthis.markdownIt = new ((await import('markdown-it')).default);\n\t\t\t}\n\t\t\tconst tokens = this.markdownIt.parse(text, {});\n\t\t\tconst tokensAndPositions: TokenAndPosition[] = (function toTokensAndPositions(this: ExtensionLinter, tokens: MarkdownItType.Token[], begin = 0, end = text.length): TokenAndPosition[] {\n\t\t\t\tconst tokensAndPositions = tokens.map<TokenAndPosition>(token => {\n\t\t\t\t\tif (token.map) {\n\t\t\t\t\t\tconst tokenBegin = document.offsetAt(new Position(token.map[0], 0));\n\t\t\t\t\t\tconst tokenEnd = begin = document.offsetAt(new Position(token.map[1], 0));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t\tbegin: tokenBegin,\n\t\t\t\t\t\t\tend: tokenEnd\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst image = token.type === 'image' && this.locateToken(text, begin, end, token, token.attrGet('src'));\n\t\t\t\t\tconst other = image || this.locateToken(text, begin, end, token, token.content);\n\t\t\t\t\treturn other || {\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\tbegin,\n\t\t\t\t\t\tend: begin\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn tokensAndPositions.concat(\n\t\t\t\t\t...tokensAndPositions.filter(tnp => tnp.token.children && tnp.token.children.length)\n\t\t\t\t\t\t.map(tnp => toTokensAndPositions.call(this, tnp.token.children, tnp.begin, tnp.end))\n\t\t\t\t);\n\t\t\t}).call(this, tokens);\n\n\t\t\tconst diagnostics: Diagnostic[] = [];\n\n\t\t\ttokensAndPositions.filter(tnp => tnp.token.type === 'image' && tnp.token.attrGet('src'))\n\t\t\t\t.map(inp => {\n\t\t\t\t\tconst src = inp.token.attrGet('src')!;\n\t\t\t\t\tconst begin = text.indexOf(src, inp.begin);\n\t\t\t\t\tif (begin !== -1 && begin < inp.end) {\n\t\t\t\t\t\tthis.addDiagnostics(diagnostics, document, begin, begin + src.length, src, Context.MARKDOWN, info);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst content = inp.token.content;\n\t\t\t\t\t\tconst begin = text.indexOf(content, inp.begin);\n\t\t\t\t\t\tif (begin !== -1 && begin < inp.end) {\n\t\t\t\t\t\t\tthis.addDiagnostics(diagnostics, document, begin, begin + content.length, src, Context.MARKDOWN, info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tlet svgStart: Diagnostic;\n\t\t\tfor (const tnp of tokensAndPositions) {\n\t\t\t\tif (tnp.token.type === 'text' && tnp.token.content) {\n\t\t\t\t\tif (!this.parse5) {\n\t\t\t\t\t\tthis.parse5 = await import('parse5');\n\t\t\t\t\t}\n\t\t\t\t\tconst parser = new this.parse5.SAXParser({ locationInfo: true });\n\t\t\t\t\tparser.on('startTag', (name, attrs, _selfClosing, location) => {\n\t\t\t\t\t\tif (name === 'img') {\n\t\t\t\t\t\t\tconst src = attrs.find(a => a.name === 'src');\n\t\t\t\t\t\t\tif (src && src.value && location) {\n\t\t\t\t\t\t\t\tconst begin = text.indexOf(src.value, tnp.begin + location.startOffset);\n\t\t\t\t\t\t\t\tif (begin !== -1 && begin < tnp.end) {\n\t\t\t\t\t\t\t\t\tthis.addDiagnostics(diagnostics, document, begin, begin + src.value.length, src.value, Context.MARKDOWN, info);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (name === 'svg' && location) {\n\t\t\t\t\t\t\tconst begin = tnp.begin + location.startOffset;\n\t\t\t\t\t\t\tconst end = tnp.begin + location.endOffset;\n\t\t\t\t\t\t\tconst range = new Range(document.positionAt(begin), document.positionAt(end));\n\t\t\t\t\t\t\tsvgStart = new Diagnostic(range, embeddedSvgsNotValid, DiagnosticSeverity.Warning);\n\t\t\t\t\t\t\tdiagnostics.push(svgStart);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tparser.on('endTag', (name, location) => {\n\t\t\t\t\t\tif (name === 'svg' && svgStart && location) {\n\t\t\t\t\t\t\tconst end = tnp.begin + location.endOffset;\n\t\t\t\t\t\t\tsvgStart.range = new Range(svgStart.range.start, document.positionAt(end));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tparser.write(tnp.token.content);\n\t\t\t\t\tparser.end();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.diagnosticsCollection.set(document.uri, diagnostics);\n\t\t}\n\t}\n\n\tprivate locateToken(text: string, begin: number, end: number, token: MarkdownItType.Token, content: string | null) {\n\t\tif (content) {\n\t\t\tconst tokenBegin = text.indexOf(content, begin);\n\t\t\tif (tokenBegin !== -1) {\n\t\t\t\tconst tokenEnd = tokenBegin + content.length;\n\t\t\t\tif (tokenEnd <= end) {\n\t\t\t\t\tbegin = tokenEnd;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\tbegin: tokenBegin,\n\t\t\t\t\t\tend: tokenEnd\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readPackageJsonInfo(folder: Uri, tree: JsonNode | undefined) {\n\t\tconst engine = tree && findNodeAtLocation(tree, ['engines', 'vscode']);\n\t\tconst parsedEngineVersion = engine?.type === 'string' ? normalizeVersion(parseVersion(engine.value)) : null;\n\t\tconst repo = tree && findNodeAtLocation(tree, ['repository', 'url']);\n\t\tconst uri = repo && parseUri(repo.value);\n\t\tconst activationEvents = tree && parseImplicitActivationEvents(tree);\n\n\t\tconst info: PackageJsonInfo = {\n\t\t\tisExtension: !!(engine && engine.type === 'string'),\n\t\t\thasHttpsRepository: !!(repo && repo.type === 'string' && repo.value && uri && uri.scheme.toLowerCase() === 'https'),\n\t\t\trepository: uri!,\n\t\t\timplicitActivationEvents: activationEvents,\n\t\t\tengineVersion: parsedEngineVersion\n\t\t};\n\t\tconst str = folder.toString();\n\t\tconst oldInfo = this.folderToPackageJsonInfo[str];\n\t\tif (oldInfo && (oldInfo.isExtension !== info.isExtension || oldInfo.hasHttpsRepository !== info.hasHttpsRepository)) {\n\t\t\tthis.packageJsonChanged(folder); // clears this.folderToPackageJsonInfo[str]\n\t\t}\n\t\tthis.folderToPackageJsonInfo[str] = info;\n\t\treturn info;\n\t}\n\n\tprivate async loadPackageJson(folder: Uri) {\n\t\tif (folder.scheme === 'git') { // #36236\n\t\t\treturn undefined;\n\t\t}\n\t\tconst file = folder.with({ path: path.posix.join(folder.path, 'package.json') });\n\t\ttry {\n\t\t\tconst fileContents = await workspace.fs.readFile(file); // #174888\n\t\t\treturn parseTree(Buffer.from(fileContents).toString('utf-8'));\n\t\t} catch (err) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate packageJsonChanged(folder: Uri) {\n\t\tdelete this.folderToPackageJsonInfo[folder.toString()];\n\t\tconst str = folder.toString().toLowerCase();\n\t\tworkspace.textDocuments.filter(document => this.getUriFolder(document.uri).toString().toLowerCase() === str)\n\t\t\t.forEach(document => this.queueReadme(document));\n\t}\n\n\tprivate getUriFolder(uri: Uri) {\n\t\treturn uri.with({ path: path.posix.dirname(uri.path) });\n\t}\n\n\tprivate addDiagnostics(diagnostics: Diagnostic[], document: TextDocument, begin: number, end: number, src: string, context: Context, info: PackageJsonInfo) {\n\t\tconst hasScheme = /^\\w[\\w\\d+.-]*:/.test(src);\n\t\tconst uri = parseUri(src, info.repository ? info.repository.toString() : document.uri.toString());\n\t\tif (!uri) {\n\t\t\treturn;\n\t\t}\n\t\tconst scheme = uri.scheme.toLowerCase();\n\n\t\tif (hasScheme && scheme !== 'https' && scheme !== 'data') {\n\t\t\tconst range = new Range(document.positionAt(begin), document.positionAt(end));\n\t\t\tdiagnostics.push(new Diagnostic(range, httpsRequired, DiagnosticSeverity.Warning));\n\t\t}\n\n\t\tif (hasScheme && scheme === 'data') {\n\t\t\tconst range = new Range(document.positionAt(begin), document.positionAt(end));\n\t\t\tdiagnostics.push(new Diagnostic(range, dataUrlsNotValid, DiagnosticSeverity.Warning));\n\t\t}\n\n\t\tif (!hasScheme && !info.hasHttpsRepository && context !== Context.ICON) {\n\t\t\tconst range = new Range(document.positionAt(begin), document.positionAt(end));\n\t\t\tconst message = (() => {\n\t\t\t\tswitch (context) {\n\t\t\t\t\tcase Context.BADGE: return relativeBadgeUrlRequiresHttpsRepository;\n\t\t\t\t\tdefault: return relativeUrlRequiresHttpsRepository;\n\t\t\t\t}\n\t\t\t})();\n\t\t\tdiagnostics.push(new Diagnostic(range, message, DiagnosticSeverity.Warning));\n\t\t}\n\n\t\tif (uri.path.toLowerCase().endsWith('.svg') && !isTrustedSVGSource(uri)) {\n\t\t\tconst range = new Range(document.positionAt(begin), document.positionAt(end));\n\t\t\tdiagnostics.push(new Diagnostic(range, svgsNotValid, DiagnosticSeverity.Warning));\n\t\t}\n\t}\n\n\tprivate clear(document: TextDocument) {\n\t\tthis.diagnosticsCollection.delete(document.uri);\n\t\tthis.packageJsonQ.delete(document);\n\t}\n\n\tpublic dispose() {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t\tthis.disposables = [];\n\t}\n}\n\nfunction parseUri(src: string, base?: string, retry: boolean = true): Uri | null {\n\ttry {\n\t\tconst url = new URL(src, base);\n\t\treturn Uri.parse(url.toString());\n\t} catch (err) {\n\t\tif (retry) {\n\t\t\treturn parseUri(encodeURI(src), base, false);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\nfunction parseImplicitActivationEvents(tree: JsonNode): Set<string> {\n\tconst activationEvents = new Set<string>();\n\n\t// commands\n\tconst commands = findNodeAtLocation(tree, ['contributes', 'commands']);\n\tcommands?.children?.forEach(child => {\n\t\tconst command = findNodeAtLocation(child, ['command']);\n\t\tif (command && command.type === 'string') {\n\t\t\tactivationEvents.add(`onCommand:${command.value}`);\n\t\t}\n\t});\n\n\t// authenticationProviders\n\tconst authenticationProviders = findNodeAtLocation(tree, ['contributes', 'authentication']);\n\tauthenticationProviders?.children?.forEach(child => {\n\t\tconst id = findNodeAtLocation(child, ['id']);\n\t\tif (id && id.type === 'string') {\n\t\t\tactivationEvents.add(`onAuthenticationRequest:${id.value}`);\n\t\t}\n\t});\n\n\t// languages\n\tconst languageContributions = findNodeAtLocation(tree, ['contributes', 'languages']);\n\tlanguageContributions?.children?.forEach(child => {\n\t\tconst id = findNodeAtLocation(child, ['id']);\n\t\tconst configuration = findNodeAtLocation(child, ['configuration']);\n\t\tif (id && id.type === 'string' && configuration && configuration.type === 'string') {\n\t\t\tactivationEvents.add(`onLanguage:${id.value}`);\n\t\t}\n\t});\n\n\t// customEditors\n\tconst customEditors = findNodeAtLocation(tree, ['contributes', 'customEditors']);\n\tcustomEditors?.children?.forEach(child => {\n\t\tconst viewType = findNodeAtLocation(child, ['viewType']);\n\t\tif (viewType && viewType.type === 'string') {\n\t\t\tactivationEvents.add(`onCustomEditor:${viewType.value}`);\n\t\t}\n\t});\n\n\t// views\n\tconst viewContributions = findNodeAtLocation(tree, ['contributes', 'views']);\n\tviewContributions?.children?.forEach(viewContribution => {\n\t\tconst views = viewContribution.children?.find((node) => node.type === 'array');\n\t\tviews?.children?.forEach(view => {\n\t\t\tconst id = findNodeAtLocation(view, ['id']);\n\t\t\tif (id && id.type === 'string') {\n\t\t\t\tactivationEvents.add(`onView:${id.value}`);\n\t\t\t}\n\t\t});\n\t});\n\n\t// walkthroughs\n\tconst walkthroughs = findNodeAtLocation(tree, ['contributes', 'walkthroughs']);\n\twalkthroughs?.children?.forEach(child => {\n\t\tconst id = findNodeAtLocation(child, ['id']);\n\t\tif (id && id.type === 'string') {\n\t\t\tactivationEvents.add(`onWalkthrough:${id.value}`);\n\t\t}\n\t});\n\n\t// notebookRenderers\n\tconst notebookRenderers = findNodeAtLocation(tree, ['contributes', 'notebookRenderer']);\n\tnotebookRenderers?.children?.forEach(child => {\n\t\tconst id = findNodeAtLocation(child, ['id']);\n\t\tif (id && id.type === 'string') {\n\t\t\tactivationEvents.add(`onRenderer:${id.value}`);\n\t\t}\n\t});\n\n\t// terminalProfiles\n\tconst terminalProfiles = findNodeAtLocation(tree, ['contributes', 'terminal', 'profiles']);\n\tterminalProfiles?.children?.forEach(child => {\n\t\tconst id = findNodeAtLocation(child, ['id']);\n\t\tif (id && id.type === 'string') {\n\t\t\tactivationEvents.add(`onTerminalProfile:${id.value}`);\n\t\t}\n\t});\n\n\t// terminalQuickFixes\n\tconst terminalQuickFixes = findNodeAtLocation(tree, ['contributes', 'terminal', 'quickFixes']);\n\tterminalQuickFixes?.children?.forEach(child => {\n\t\tconst id = findNodeAtLocation(child, ['id']);\n\t\tif (id && id.type === 'string') {\n\t\t\tactivationEvents.add(`onTerminalQuickFixRequest:${id.value}`);\n\t\t}\n\t});\n\n\t// tasks\n\tconst tasks = findNodeAtLocation(tree, ['contributes', 'taskDefinitions']);\n\ttasks?.children?.forEach(child => {\n\t\tconst id = findNodeAtLocation(child, ['type']);\n\t\tif (id && id.type === 'string') {\n\t\t\tactivationEvents.add(`onTaskType:${id.value}`);\n\t\t}\n\t});\n\n\treturn activationEvents;\n}\n"
  },
  {
    "path": "extensions/extension-editing/src/jsonReconstruct.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * This class has a very specific purpose:\n *\n *\tIt can return convert offset within a decoded JSON string to offset within the encoded JSON string.\n */\nexport class JsonStringScanner {\n\tprivate resultChars = 0;\n\tprivate pos = 0;\n\n\t/**\n\t *\n\t * @param text the encoded JSON string\n\t * @param pos must not include \", ie must be `stringJSONNode.offset + 1`\n\t */\n\tconstructor(private readonly text: string, initialPos: number /* offset within `text` */) {\n\t\tthis.pos = initialPos;\n\t}\n\n\t// note that we don't do bound checks here, because we know that the offset is within the string\n\tgetOffsetInEncoded(offsetDecoded: number) {\n\n\t\tlet start = this.pos;\n\n\t\twhile (true) {\n\t\t\tif (this.resultChars > offsetDecoded) {\n\t\t\t\treturn start;\n\t\t\t}\n\n\t\t\tconst ch = this.text.charCodeAt(this.pos);\n\n\t\t\tif (ch === CharacterCodes.backslash) {\n\t\t\t\tstart = this.pos;\n\t\t\t\tthis.pos++;\n\n\t\t\t\tconst ch2 = this.text.charCodeAt(this.pos++);\n\t\t\t\tswitch (ch2) {\n\t\t\t\t\tcase CharacterCodes.doubleQuote:\n\t\t\t\t\tcase CharacterCodes.backslash:\n\t\t\t\t\tcase CharacterCodes.slash:\n\t\t\t\t\tcase CharacterCodes.b:\n\t\t\t\t\tcase CharacterCodes.f:\n\t\t\t\t\tcase CharacterCodes.n:\n\t\t\t\t\tcase CharacterCodes.r:\n\t\t\t\t\tcase CharacterCodes.t:\n\t\t\t\t\t\tthis.resultChars += 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.u: {\n\t\t\t\t\t\tconst ch3 = this.scanHexDigits(4, true);\n\t\t\t\t\t\tif (ch3 >= 0) {\n\t\t\t\t\t\t\tthis.resultChars += String.fromCharCode(ch3).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstart = this.pos;\n\t\t\tthis.pos++;\n\t\t\tthis.resultChars++;\n\t\t}\n\t}\n\n\tscanHexDigits(count: number, exact?: boolean): number {\n\t\tlet digits = 0;\n\t\tlet value = 0;\n\t\twhile (digits < count || !exact) {\n\t\t\tconst ch = this.text.charCodeAt(this.pos);\n\t\t\tif (ch >= CharacterCodes._0 && ch <= CharacterCodes._9) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes._0;\n\t\t\t}\n\t\t\telse if (ch >= CharacterCodes.A && ch <= CharacterCodes.F) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes.A + 10;\n\t\t\t}\n\t\t\telse if (ch >= CharacterCodes.a && ch <= CharacterCodes.f) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes.a + 10;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.pos++;\n\t\t\tdigits++;\n\t\t}\n\t\tif (digits < count) {\n\t\t\tvalue = -1;\n\t\t}\n\t\treturn value;\n\t}\n}\n\n\nconst enum CharacterCodes {\n\tlineFeed = 0x0A,              // \\n\n\tcarriageReturn = 0x0D,        // \\r\n\n\tspace = 0x0020,   // \" \"\n\n\t_0 = 0x30,\n\t_1 = 0x31,\n\t_2 = 0x32,\n\t_3 = 0x33,\n\t_4 = 0x34,\n\t_5 = 0x35,\n\t_6 = 0x36,\n\t_7 = 0x37,\n\t_8 = 0x38,\n\t_9 = 0x39,\n\n\ta = 0x61,\n\tb = 0x62,\n\tc = 0x63,\n\td = 0x64,\n\te = 0x65,\n\tf = 0x66,\n\tg = 0x67,\n\th = 0x68,\n\ti = 0x69,\n\tj = 0x6A,\n\tk = 0x6B,\n\tl = 0x6C,\n\tm = 0x6D,\n\tn = 0x6E,\n\to = 0x6F,\n\tp = 0x70,\n\tq = 0x71,\n\tr = 0x72,\n\ts = 0x73,\n\tt = 0x74,\n\tu = 0x75,\n\tv = 0x76,\n\tw = 0x77,\n\tx = 0x78,\n\ty = 0x79,\n\tz = 0x7A,\n\n\tA = 0x41,\n\tB = 0x42,\n\tC = 0x43,\n\tD = 0x44,\n\tE = 0x45,\n\tF = 0x46,\n\tG = 0x47,\n\tH = 0x48,\n\tI = 0x49,\n\tJ = 0x4A,\n\tK = 0x4B,\n\tL = 0x4C,\n\tM = 0x4D,\n\tN = 0x4E,\n\tO = 0x4F,\n\tP = 0x50,\n\tQ = 0x51,\n\tR = 0x52,\n\tS = 0x53,\n\tT = 0x54,\n\tU = 0x55,\n\tV = 0x56,\n\tW = 0x57,\n\tX = 0x58,\n\tY = 0x59,\n\tZ = 0x5a,\n\n\tasterisk = 0x2A,              // *\n\tbackslash = 0x5C,             // \\\n\tcloseBrace = 0x7D,            // }\n\tcloseBracket = 0x5D,          // ]\n\tcolon = 0x3A,                 // :\n\tcomma = 0x2C,                 // ,\n\tdot = 0x2E,                   // .\n\tdoubleQuote = 0x22,           // \"\n\tminus = 0x2D,                 // -\n\topenBrace = 0x7B,             // {\n\topenBracket = 0x5B,           // [\n\tplus = 0x2B,                  // +\n\tslash = 0x2F,                 // /\n\n\tformFeed = 0x0C,              // \\f\n\ttab = 0x09,                   // \\t\n}\n"
  },
  {
    "path": "extensions/extension-editing/src/packageDocumentHelper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getLocation, Location } from 'jsonc-parser';\nimport { implicitActivationEvent, redundantImplicitActivationEvent } from './constants';\n\n\nexport class PackageDocument {\n\n\tconstructor(private document: vscode.TextDocument) { }\n\n\tpublic provideCompletionItems(position: vscode.Position, _token: vscode.CancellationToken): vscode.ProviderResult<vscode.CompletionItem[]> {\n\t\tconst location = getLocation(this.document.getText(), this.document.offsetAt(position));\n\n\t\tif (location.path.length >= 2 && location.path[1] === 'configurationDefaults') {\n\t\t\treturn this.provideLanguageOverridesCompletionItems(location, position);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tpublic provideCodeActions(_range: vscode.Range, context: vscode.CodeActionContext, _token: vscode.CancellationToken): vscode.ProviderResult<vscode.CodeAction[]> {\n\t\tconst codeActions: vscode.CodeAction[] = [];\n\t\tfor (const diagnostic of context.diagnostics) {\n\t\t\tif (diagnostic.message === implicitActivationEvent || diagnostic.message === redundantImplicitActivationEvent) {\n\t\t\t\tconst codeAction = new vscode.CodeAction(vscode.l10n.t(\"Remove activation event\"), vscode.CodeActionKind.QuickFix);\n\t\t\t\tcodeAction.edit = new vscode.WorkspaceEdit();\n\t\t\t\tconst rangeForCharAfter = diagnostic.range.with(diagnostic.range.end, diagnostic.range.end.translate(0, 1));\n\t\t\t\tif (this.document.getText(rangeForCharAfter) === ',') {\n\t\t\t\t\tcodeAction.edit.delete(this.document.uri, diagnostic.range.with(undefined, diagnostic.range.end.translate(0, 1)));\n\t\t\t\t} else {\n\t\t\t\t\tcodeAction.edit.delete(this.document.uri, diagnostic.range);\n\t\t\t\t}\n\t\t\t\tcodeActions.push(codeAction);\n\t\t\t}\n\t\t}\n\t\treturn codeActions;\n\t}\n\n\tprivate provideLanguageOverridesCompletionItems(location: Location, position: vscode.Position): vscode.ProviderResult<vscode.CompletionItem[]> {\n\t\tlet range = this.getReplaceRange(location, position);\n\t\tconst text = this.document.getText(range);\n\n\t\tif (location.path.length === 2) {\n\n\t\t\tlet snippet = '\"[${1:language}]\": {\\n\\t\"$0\"\\n}';\n\n\t\t\t// Suggestion model word matching includes quotes,\n\t\t\t// hence exclude the starting quote from the snippet and the range\n\t\t\t// ending quote gets replaced\n\t\t\tif (text && text.startsWith('\"')) {\n\t\t\t\trange = new vscode.Range(new vscode.Position(range.start.line, range.start.character + 1), range.end);\n\t\t\t\tsnippet = snippet.substring(1);\n\t\t\t}\n\n\t\t\treturn Promise.resolve([this.newSnippetCompletionItem({\n\t\t\t\tlabel: vscode.l10n.t(\"Language specific editor settings\"),\n\t\t\t\tdocumentation: vscode.l10n.t(\"Override editor settings for language\"),\n\t\t\t\tsnippet,\n\t\t\t\trange\n\t\t\t})]);\n\t\t}\n\n\t\tif (location.path.length === 3 && location.previousNode && typeof location.previousNode.value === 'string' && location.previousNode.value.startsWith('[')) {\n\n\t\t\t// Suggestion model word matching includes starting quote and open sqaure bracket\n\t\t\t// Hence exclude them from the proposal range\n\t\t\trange = new vscode.Range(new vscode.Position(range.start.line, range.start.character + 2), range.end);\n\n\t\t\treturn vscode.languages.getLanguages().then(languages => {\n\t\t\t\treturn languages.map(l => {\n\n\t\t\t\t\t// Suggestion model word matching includes closed sqaure bracket and ending quote\n\t\t\t\t\t// Hence include them in the proposal to replace\n\t\t\t\t\treturn this.newSimpleCompletionItem(l, range, '', l + ']\"');\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve([]);\n\t}\n\n\tprivate getReplaceRange(location: Location, position: vscode.Position) {\n\t\tconst node = location.previousNode;\n\t\tif (node) {\n\t\t\tconst nodeStart = this.document.positionAt(node.offset), nodeEnd = this.document.positionAt(node.offset + node.length);\n\t\t\tif (nodeStart.isBeforeOrEqual(position) && nodeEnd.isAfterOrEqual(position)) {\n\t\t\t\treturn new vscode.Range(nodeStart, nodeEnd);\n\t\t\t}\n\t\t}\n\t\treturn new vscode.Range(position, position);\n\t}\n\n\tprivate newSimpleCompletionItem(text: string, range: vscode.Range, description?: string, insertText?: string): vscode.CompletionItem {\n\t\tconst item = new vscode.CompletionItem(text);\n\t\titem.kind = vscode.CompletionItemKind.Value;\n\t\titem.detail = description;\n\t\titem.insertText = insertText ? insertText : text;\n\t\titem.range = range;\n\t\treturn item;\n\t}\n\n\tprivate newSnippetCompletionItem(o: { label: string; documentation?: string; snippet: string; range: vscode.Range }): vscode.CompletionItem {\n\t\tconst item = new vscode.CompletionItem(o.label);\n\t\titem.kind = vscode.CompletionItemKind.Value;\n\t\titem.documentation = o.documentation;\n\t\titem.insertText = new vscode.SnippetString(o.snippet);\n\t\titem.range = o.range;\n\t\treturn item;\n\t}\n}\n"
  },
  {
    "path": "extensions/extension-editing/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"typeRoots\": [\n\t\t\t\"node_modules/@types\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/fsharp/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/fsharp/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"ionide/ionide-fsgrammar\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/ionide/ionide-fsgrammar\",\n\t\t\t\t\t\"commitHash\": \"c62c78404d0b2c14816aae61ac0688663a5990a3\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"description\": \"The file syntaxes/fsharp.json was included from https://github.com/ionide/ionide-fsgrammar/blob/master/grammar/fsharp.json.\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/fsharp/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [ \"(*\", \"*)\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\" },\n\t\t{ \"open\": \"[\", \"close\": \"]\" },\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t],\n\t\"folding\": {\n\t\t\"offSide\": true,\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*//\\\\s*#region\\\\b|^\\\\s*\\\\(\\\\*\\\\s*#region(.*)\\\\*\\\\)\",\n\t\t\t\"end\": \"^\\\\s*//\\\\s*#endregion\\\\b|^\\\\s*\\\\(\\\\*\\\\s*#endregion\\\\s*\\\\*\\\\)\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/fsharp/package.json",
    "content": "{\n  \"name\": \"fsharp\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin ionide/ionide-fsgrammar grammars/fsharp.json ./syntaxes/fsharp.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"fsharp\",\n        \"extensions\": [\n          \".fs\",\n          \".fsi\",\n          \".fsx\",\n          \".fsscript\"\n        ],\n        \"aliases\": [\n          \"F#\",\n          \"FSharp\",\n          \"fsharp\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"fsharp\",\n        \"scopeName\": \"source.fsharp\",\n        \"path\": \"./syntaxes/fsharp.tmLanguage.json\"\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"fsharp\",\n        \"path\": \"./snippets/fsharp.code-snippets\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[fsharp]\": {\n        \"diffEditor.ignoreTrimWhitespace\": false\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/fsharp/package.nls.json",
    "content": "{\n\t\"displayName\": \"F# Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in F# files.\"\n}\n"
  },
  {
    "path": "extensions/fsharp/snippets/fsharp.code-snippets",
    "content": "{\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"//#region $0\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"//#endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t}\n}\n"
  },
  {
    "path": "extensions/fsharp/syntaxes/fsharp.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/ionide/ionide-fsgrammar/blob/master/grammars/fsharp.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/ionide/ionide-fsgrammar/commit/c62c78404d0b2c14816aae61ac0688663a5990a3\",\n\t\"name\": \"fsharp\",\n\t\"scopeName\": \"source.fsharp\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#compiler_directives\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constants\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#chars\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#double_tick\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#abstract_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#attributes\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#modules\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_functions\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#du_declaration\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#record_declaration\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#records\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strp_inlined\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#cexprs\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#text\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"strp_inlined_body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous_functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\^[[:alpha:]0-9'._]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(and|when|or)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strp_inlined_body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(static member|member)\\\\s*([[:alpha:]0-9'`<>^._]+|``[[:alpha:]0-9' <>^._]+``)\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#compiler_directives\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#chars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double_tick\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#text\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#definition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cexprs\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#text\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strp_inlined\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strp_inlined_body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"generic_declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comments\": \"SRTP syntax support\",\n\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\()\\\\s*(static member|member)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_declaration\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(('|\\\\^)[[:alpha:]0-9'._]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(private|to|public|internal|function|yield!|yield|class|exception|match|delegate|of|new|in|as|if|then|else|elif|for|begin|end|inherit|do|let\\\\!|return\\\\!|return|interface|with|abstract|enum|member|try|finally|and|when|or|use|use\\\\!|struct|while|mutable|assert|base|done|downcast|downto|extern|fixed|global|lazy|upcast|not)(?!')\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(('|\\\\^)[[:alpha:]0-9'._]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)\",\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(('|\\\\^)[[:alpha:]0-9'._]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple_signature\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(([?[:alpha:]0-9'`^._ ]+))+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple_signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?!when|and|or\\\\b)\\\\b([\\\\w0-9'`^._]+)\",\n\t\t\t\t\t\"comments\": \"Here we need the \\\\w modifier in order to check that the words are allowed\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\|)\",\n\t\t\t\t\t\"comments\": \"Prevent captures of `|>` as a keyword when defining custom operator like `<|>`\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_record_declaration\": {\n\t\t\t\"begin\": \"(\\\\{\\\\|)\",\n\t\t\t\"end\": \"(\\\\|\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[[:alpha:]0-9'`^_ ]+(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([[:alpha:]0-9'`^_ ]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous_record_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"record_signature\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[[:alpha:]0-9'`^_ ]+(=)([[:alpha:]0-9'`^_ ]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"({)\",\n\t\t\t\t\t\"end\": \"(})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[[:alpha:]0-9'`^_ ]+(=)([[:alpha:]0-9'`^_ ]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#record_signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tuple_signature\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(([?[:alpha:]0-9'`^._ ]+))+\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(([?[:alpha:]0-9'`^._ ]+))+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple_signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"function.anonymous\",\n\t\t\t\t\t\"begin\": \"\\\\b(fun)\\\\b\",\n\t\t\t\t\t\"end\": \"(->)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.arrow.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(?=(->))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.arrow.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_declaration\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attributes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.function.attribute.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\[\\\\<\",\n\t\t\t\t\t\"end\": \"\\\\>\\\\]|\\\\]\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.literate.command.fsharp\",\n\t\t\t\t\t\"match\": \"(\\\\(\\\\*{3}.*\\\\*{3}\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.markdown.fsharp\",\n\t\t\t\t\t\"begin\": \"^\\\\s*(\\\\(\\\\*\\\\*(?!\\\\)))((?!\\\\*\\\\)).)*$\",\n\t\t\t\t\t\"while\": \"^(?!\\\\s*(\\\\*)+\\\\)\\\\s*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.fsharp\",\n\t\t\t\t\t\"begin\": \"(\\\\(\\\\*(?!\\\\)))\",\n\t\t\t\t\t\"end\": \"(\\\\*+\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comments\": \"Capture // when inside of (* *) like that the rule which capture comments starting by // is not trigger. See https://github.com/ionide/ionide-fsgrammar/issues/155\",\n\t\t\t\t\t\t\t\"name\": \"fast-capture.comment.line.double-slash.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"//\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comments\": \"Capture (*) when inside of (* *) so that it doesn't prematurely end the comment block.\",\n\t\t\t\t\t\t\t\"name\": \"fast-capture.comment.line.mul-operator.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"\\\\(\\\\*\\\\)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.markdown.fsharp.end\",\n\t\t\t\t\t\"match\": \"((?<!\\\\()(\\\\*)+\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.markdown.fsharp\",\n\t\t\t\t\t\"begin\": \"(?<![!%&+-.<=>?@^|/])///(?!/)\",\n\t\t\t\t\t\"while\": \"(?<![!%&+-.<=>?@^|/])///(?!/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.double-slash.fsharp\",\n\t\t\t\t\t\"match\": \"(?<![!%&+-.<=>?@^|/])//(.*$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\(\\\\)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.float.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b-?[0-9][0-9_]*((\\\\.(?!\\\\.)([0-9][0-9_]*([eE][+-]??[0-9][0-9_]*)?)?)|([eE][+-]??[0-9][0-9_]*))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.integer.nativeint.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(-?((0(x|X)[0-9a-fA-F][0-9a-fA-F_]*)|(0(o|O)[0-7][0-7_]*)|(0(b|B)[01][01_]*)|([0-9][0-9_]*)))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(true|false)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(null|void)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"abstract_definition\": {\n\t\t\t\"name\": \"abstract.definition.fsharp\",\n\t\t\t\"begin\": \"\\\\b(static\\\\s+)?(abstract)\\\\s+(member)?(\\\\s+\\\\[\\\\<.*\\\\>\\\\])?\\\\s*([_[:alpha:]0-9,\\\\._`\\\\s]+)(<)?\",\n\t\t\t\"end\": \"\\\\s*(with)\\\\b|=|$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.function.attribute.fsharp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#common_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\?{0,1})([[:alpha:]0-9'`^._ ]+)\\\\s*(:)((?!with\\\\b)\\\\b([\\\\w0-9'`^._ ]+)){0,1}\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?!with|get|set\\\\b)\\\\s*([\\\\w0-9'`^._]+)\",\n\t\t\t\t\t\"comments\": \"Here we need the \\\\w modifier in order to check that the words isn't blacklisted\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"common_binding_definition\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comments\": \"SRTP syntax support\",\n\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\()\\\\s*(static member|member)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\\\\s*((?=,)|(?=\\\\=))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\^[[:alpha:]0-9'._]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\)\\\\s*(([?[:alpha:]0-9'`^._ ]*)))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple_signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\^[[:alpha:]0-9'._]+)\\\\s*(when)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=:)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"\\\\b(and|when|or)\\\\b\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Because we first capture the keywords, we can capture what looks like a word and assume it's an entity definition\",\n\t\t\t\t\t\t\t\"match\": \"([[:alpha:]0-9'^._]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"(\\\\(|\\\\))\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(:)\\\\s*([?[:alpha:]0-9'`^._ ]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(->)\\\\s*(\\\\()?\\\\s*([?[:alpha:]0-9'`^._ ]+)*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.arrow.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\*)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\)\\\\s*(([?[:alpha:]0-9'`^._ ]+))*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple_signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\*)(\\\\s*([?[:alpha:]0-9'`^._ ]+))*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?==)|(?=\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tuple_signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<+(?![[:space:]]*\\\\)))\",\n\t\t\t\t\t\"beginComment\": \"The group (?![[:space:]]*\\\\) is for protection against overload operator. static member (<)\",\n\t\t\t\t\t\"end\": \"((?<!:)>|\\\\))\",\n\t\t\t\t\t\"endComment\": \"The group (?<!:) prevent us from stopping on :> when using SRTP synthax\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous_record_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"({)\",\n\t\t\t\t\t\"end\": \"(})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#record_signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#definition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"definition\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"binding.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(let mutable|static let mutable|static let|let inline|let|and|member val|member inline|static member inline|static member val|static member|default|member|override|let!)(\\\\s+rec|mutable)?(\\\\s+\\\\[\\\\<.*\\\\>\\\\])?\\\\s*(private|internal|public)?\\\\s+(\\\\[[^-=]*\\\\]|[_[:alpha:]]([_[:alpha:]0-9\\\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\\\._`\\\\s]+|(?<=,)\\\\s)*)?\",\n\t\t\t\t\t\"end\": \"\\\\s*((with\\\\b)|(=|\\\\n+=|(?<=\\\\=)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.attribute.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#common_binding_definition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"binding.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(use|use!|and|and!)\\\\s+(\\\\[[^-=]*\\\\]|[_[:alpha:]]([_[:alpha:]0-9\\\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\\\._`\\\\s]+|(?<=,)\\\\s)*)?\",\n\t\t\t\t\t\"end\": \"\\\\s*(=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#common_binding_definition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"binding.fsharp\",\n\t\t\t\t\t\"begin\": \"(?<=with|and)\\\\s*\\\\b((get|set)\\\\s*(?=\\\\())(\\\\[[^-=]*\\\\]|[_[:alpha:]]([_[:alpha:]0-9\\\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\\\._`\\\\s]+|(?<=,)\\\\s)*)?\",\n\t\t\t\t\t\"end\": \"\\\\s*(=|\\\\n+=|(?<=\\\\=))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#common_binding_definition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"binding.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(static val mutable|val mutable|val inline|val)(\\\\s+rec|mutable)?(\\\\s+\\\\[\\\\<.*\\\\>\\\\])?\\\\s*(private|internal|public)?\\\\s+(\\\\[[^-=]*\\\\]|[_[:alpha:]]([_[:alpha:]0-9,\\\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9,\\\\._`\\\\s]+|(?<=,)\\\\s)*)?\",\n\t\t\t\t\t\"end\": \"\\\\n$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.attribute.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#common_binding_definition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"binding.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(new)\\\\b\\\\s+(\\\\()\",\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#common_binding_definition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"du_declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"du_declaration.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(of)\\\\b\",\n\t\t\t\t\t\"end\": \"$|(\\\\|)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([[:alpha:]0-9'`<>^._]+|``[[:alpha:]0-9' <>^._]+``)\\\\s*(:)\\\\s*([[:alpha:]0-9'`<>^._]+|``[[:alpha:]0-9' <>^._]+``)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(``([[:alpha:]0-9'^._ ]+)``|[[:alpha:]0-9'`^._]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#anonymous_record_declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier\",\n\t\t\t\t\t\"match\": \"\\\\b(private|public|internal)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(private|to|public|internal|function|class|exception|delegate|of|new|as|begin|end|inherit|let!|interface|abstract|enum|member|and|when|or|use|use\\\\!|struct|mutable|assert|base|done|downcast|downto|extern|fixed|global|lazy|upcast|not)(?!')\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control\",\n\t\t\t\t\t\"match\": \"\\\\b(match|yield|yield!|with|if|then|else|elif|for|in|return!|return|try|finally|while|do)(?!')\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.symbol.arrow.fsharp\",\n\t\t\t\t\t\"match\": \"(\\\\->|\\\\<\\\\-)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\",\n\t\t\t\t\t\"match\": \"[.?]*(&&&|\\\\|\\\\|\\\\||\\\\^\\\\^\\\\^|~~~|~\\\\+|~\\\\-|<<<|>>>|\\\\|>|:>|:\\\\?>|:|\\\\[|\\\\]|\\\\;|<>|=|@|\\\\|\\\\||&&|&|%|{|}|\\\\||_|\\\\.\\\\.|\\\\,|\\\\+|\\\\-|\\\\*|\\\\/|\\\\^|\\\\!|\\\\>|\\\\>\\\\=|\\\\>\\\\>|\\\\<|\\\\<\\\\=|\\\\(|\\\\)|\\\\<\\\\<)[.?]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"modules\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.section.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(namespace global)|\\\\b(namespace|module)\\\\s*(public|internal|private|rec)?\\\\s+([[:alpha:]|``][[:alpha:]0-9'_. ]*)\",\n\t\t\t\t\t\"end\": \"(\\\\s?=|\\\\s|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"(\\\\.)([A-Z][[:alpha:]0-9'_]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace-reference.fsharp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"namespace.open.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(open type|open)\\\\s+([[:alpha:]|``][[:alpha:]0-9'_]*)(?=(\\\\.[A-Z][[:alpha:]0-9_]*)*)\",\n\t\t\t\t\t\"end\": \"(\\\\s|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"(\\\\.)([[:alpha:]][[:alpha:]0-9'_]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace-reference.fsharp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"namespace.alias.fsharp\",\n\t\t\t\t\t\"begin\": \"^\\\\s*(module)\\\\s+([A-Z][[:alpha:]0-9'_]*)\\\\s*(=)\\\\s*([A-Z][[:alpha:]0-9'_]*)\",\n\t\t\t\t\t\"end\": \"(\\\\s|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.namespace.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"(\\\\.)([A-Z][[:alpha:]0-9'_]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace-reference.fsharp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.literal.fsharp\",\n\t\t\t\t\t\"begin\": \"(?=[^\\\\\\\\])(@\\\")\",\n\t\t\t\t\t\"end\": \"(\\\")(?!\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.string.escape.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"\\\"(\\\")\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.triple.fsharp\",\n\t\t\t\t\t\"begin\": \"(?=[^\\\\\\\\])(\\\"\\\"\\\")\",\n\t\t\t\t\t\"end\": \"(\\\"\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_formatter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.double.fsharp\",\n\t\t\t\t\t\"begin\": \"(?=[^\\\\\\\\])(\\\")\",\n\t\t\t\t\t\"end\": \"(\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.string.ignore-eol.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\$[ \\\\t]*\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.string.escape.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\(['\\\"\\\\\\\\abfnrtv]|([01][0-9][0-9]|2[0-4][0-9]|25[0-5])|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U00(0[0-9a-fA-F]|10)[0-9a-fA-F]{4}))\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character.string.fsharp\",\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\(([0-9]{1,3})|(x[^\\\\s]{0,2})|(u[^\\\\s]{0,4})|(U[^\\\\s]{0,8})|[^\\\\s])\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_formatter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_formatter\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.format.specifier.fsharp\",\n\t\t\t\t\t\"match\": \"(%0?-?(\\\\d+)?((a|t)|(\\\\.\\\\d+)?(f|F|e|E|g|G|M)|(b|c|s|d|i|x|X|o|u)|(s|b|O)|(\\\\+?A)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.format.specifier.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\(\\\\)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\?{0,1})(``[[:alpha:]0-9'`^:,._ ]+``|(?!private|struct\\\\b)\\\\b[\\\\w[:alpha:]0-9'`<>^._ ]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"common_declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(->)\\\\s*([[:alpha:]0-9'`^._ ]+)(<)\",\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.arrow.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([[:alpha:]0-9'`^._ ]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s*(->)\\\\s*(?!with|get|set\\\\b)\\\\b([\\\\w0-9'`^._]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.arrow.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous_record_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\?{0,1})([[:alpha:]0-9'`^._ ]+)\\\\s*(:)(\\\\s*([?[:alpha:]0-9'`^._ ]+)(<))\",\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([[:alpha:]0-9'`^._ ]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member_declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#common_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comments\": \"SRTP syntax support\",\n\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\()\\\\s*(static member|member)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\\\\s*((?=,)|(?=\\\\=))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_declaration\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\^[[:alpha:]0-9'._]+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\^[[:alpha:]0-9'._]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(and|when|or)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\",\n\t\t\t\t\t\"match\": \"(\\\\(|\\\\))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\?{0,1})([[:alpha:]0-9'`^._]+|``[[:alpha:]0-9'`^:,._ ]+``)\\\\s*(:{0,1})(\\\\s*([?[:alpha:]0-9'`<>._ ]+)){0,1}\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double_tick\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.binding.fsharp\",\n\t\t\t\t\t\"match\": \"(``)([^`]*)(``)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.binding.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"records\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"record.fsharp\",\n\t\t\t\t\t\"begin\": \"\\\\b(type)[\\\\s]+(private|internal|public)?\\\\s*\",\n\t\t\t\t\t\"end\": \"\\\\s*((with)|((as)\\\\s+([[:alpha:]0-9']+))|(=)|[\\\\n=]|(\\\\(\\\\)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([[:alpha:]0-9'^._]+|``[[:alpha:]0-9'`^:,._ ]+``)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(<)\",\n\t\t\t\t\t\t\t\"end\": \"((?<!:)>)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(('|\\\\^)``[[:alpha:]0-9`^:,._ ]+``|('|\\\\^)[[:alpha:]0-9`^:._]+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(interface|with|abstract|and|when|or|not|struct|equality|comparison|unmanaged|delegate|enum)\\\\b\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(static member|member|new)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#common_binding_definition\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"([\\\\w0-9'`^._]+)\",\n\t\t\t\t\t\t\t\t\t\"comments\": \"Here we need the \\\\w modifier in order to check that the words isn't blacklisted\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*(private|internal|public)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(?=(=)|[\\\\n=]|(\\\\(\\\\))|(as))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_declaration\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"record_declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(((mutable)\\\\s[[:alpha:]]+)|[[:alpha:]0-9'`<>^._]*)\\\\s*((?<!:):(?!:))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"$|(;|\\\\})\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.symbol.fsharp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"([[:alpha:]0-9'`^_ ]+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.fsharp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#compiler_directives\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#chars\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#double_tick\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#definition\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#anonymous_functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#cexprs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cexprs\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"cexpr.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\b(async|seq|promise|task|maybe|asyncMaybe|controller|scope|application|pipeline)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"chars\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"char.fsharp\",\n\t\t\t\t\t\"match\": \"('\\\\\\\\?.')\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"text\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"text.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"compiler_directives\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.directive.fsharp\",\n\t\t\t\t\t\"match\": \"\\\\s?(#if|#elif|#elseif|#else|#endif|#light|#nowarn)\",\n\t\t\t\t\t\"captures\": {}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/git/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/git/.vscodeignore",
    "content": "src/**\ntest/**\nout/**\ntsconfig.json\nbuild/**\nextension.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/git/README.md",
    "content": "# Git integration for Visual Studio Code\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [Git support in VS Code](https://code.visualstudio.com/docs/editor/versioncontrol#_git-support) to learn about the features of this extension.\n\n## API\n\nThe Git extension exposes an API, reachable by any other extension.\n\n1. Copy `src/api/git.d.ts` to your extension's sources;\n2. Include `git.d.ts` in your extension's compilation.\n3. Get a hold of the API with the following snippet:\n\n\t```ts\n\tconst gitExtension = vscode.extensions.getExtension<GitExtension>('vscode.git').exports;\n\tconst git = gitExtension.getAPI(1);\n\t```\n\t**Note:** To ensure that the `vscode.git` extension is activated before your extension, add `extensionDependencies` ([docs](https://code.visualstudio.com/api/references/extension-manifest)) into the `package.json` of your extension:\n\t```json\n\t\"extensionDependencies\": [\n\t\t\"vscode.git\"\n\t]\n\t```\n"
  },
  {
    "path": "extensions/git/build/update-emoji.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* eslint-disable @typescript-eslint/no-var-requires */\nconst fs = require('fs');\nconst https = require('https');\nconst path = require('path');\n\nasync function generate() {\n\t/**\n\t * @type {Map<string, string>}\n\t */\n\tconst shortcodeMap = new Map();\n\n\t// Get emoji data from https://github.com/milesj/emojibase\n\t// https://github.com/milesj/emojibase/\n\n\tconst files = ['github.raw.json'] //, 'emojibase.raw.json']; //, 'iamcal.raw.json', 'joypixels.raw.json'];\n\n\tfor (const file of files) {\n\t\tawait download(\n\t\t\t`https://raw.githubusercontent.com/milesj/emojibase/master/packages/data/en/shortcodes/${file}`,\n\t\t\tfile,\n\t\t);\n\n\t\t/**\n\t\t * @type {Record<string, string | string[]>}}\n\t\t */\n\t\t// eslint-disable-next-line import/no-dynamic-require\n\t\tconst data = require(path.join(process.cwd(), file));\n\t\tfor (const [emojis, codes] of Object.entries(data)) {\n\t\t\tconst emoji = emojis\n\t\t\t\t.split('-')\n\t\t\t\t.map(c => String.fromCodePoint(parseInt(c, 16)))\n\t\t\t\t.join('');\n\t\t\tfor (const code of Array.isArray(codes) ? codes : [codes]) {\n\t\t\t\tif (shortcodeMap.has(code)) {\n\t\t\t\t\t// console.warn(`${file}: ${code}`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tshortcodeMap.set(code, emoji);\n\t\t\t}\n\t\t}\n\n\t\tfs.unlink(file, () => { });\n\t}\n\n\t// Get gitmoji data from https://github.com/carloscuesta/gitmoji\n\t// https://github.com/carloscuesta/gitmoji/blob/master/src/data/gitmojis.json\n\tawait download(\n\t\t'https://raw.githubusercontent.com/carloscuesta/gitmoji/master/src/data/gitmojis.json',\n\t\t'gitmojis.json',\n\t);\n\n\t/**\n\t * @type {({ code: string; emoji: string })[]}\n\t */\n\t// eslint-disable-next-line import/no-dynamic-require\n\tconst gitmojis = require(path.join(process.cwd(), 'gitmojis.json')).gitmojis;\n\tfor (const emoji of gitmojis) {\n\t\tif (emoji.code.startsWith(':') && emoji.code.endsWith(':')) {\n\t\t\temoji.code = emoji.code.substring(1, emoji.code.length - 2);\n\t\t}\n\n\t\tif (shortcodeMap.has(emoji.code)) {\n\t\t\t// console.warn(`GitHub: ${emoji.code}`);\n\t\t\tcontinue;\n\t\t}\n\t\tshortcodeMap.set(emoji.code, emoji.emoji);\n\t}\n\n\tfs.unlink('gitmojis.json', () => { });\n\n\t// Sort the emojis for easier diff checking\n\tconst list = [...shortcodeMap.entries()];\n\tlist.sort();\n\n\tconst map = list.reduce((m, [key, value]) => {\n\t\tm[key] = value;\n\t\treturn m;\n\t}, Object.create(null));\n\n\tfs.writeFileSync(path.join(process.cwd(), 'resources/emojis.json'), JSON.stringify(map), 'utf8');\n}\n\nfunction download(url, destination) {\n\treturn new Promise(resolve => {\n\t\tconst stream = fs.createWriteStream(destination);\n\t\thttps.get(url, rsp => {\n\t\t\trsp.pipe(stream);\n\t\t\tstream.on('finish', () => {\n\t\t\t\tstream.close();\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t});\n}\n\nvoid generate();\n"
  },
  {
    "path": "extensions/git/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\tmain: './src/main.ts',\n\t\t['askpass-main']: './src/askpass-main.ts',\n\t\t['git-editor-main']: './src/git-editor-main.ts'\n\t}\n});\n"
  },
  {
    "path": "extensions/git/package.json",
    "content": "{\n  \"name\": \"git\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"version\": \"1.0.0\",\n  \"engines\": {\n    \"vscode\": \"^1.5.0\"\n  },\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"enabledApiProposals\": [\n    \"canonicalUriProvider\",\n    \"contribEditSessions\",\n    \"contribEditorContentMenu\",\n    \"contribMergeEditorMenus\",\n    \"contribMultiDiffEditorMenus\",\n    \"contribDiffEditorGutterToolBarMenus\",\n    \"contribSourceControlHistoryItemMenu\",\n    \"contribSourceControlHistoryTitleMenu\",\n    \"contribSourceControlInputBoxMenu\",\n    \"contribSourceControlTitleMenu\",\n    \"contribViewsWelcome\",\n    \"editSessionIdentityProvider\",\n    \"quickDiffProvider\",\n    \"quickInputButtonLocation\",\n    \"quickPickSortByLabel\",\n    \"scmActionButton\",\n    \"scmHistoryProvider\",\n    \"scmMultiDiffEditor\",\n    \"scmSelectedProvider\",\n    \"scmTextDocument\",\n    \"scmValidation\",\n    \"statusBarItemTooltip\",\n    \"tabInputMultiDiff\",\n    \"tabInputTextMerge\",\n    \"textDocumentEncoding\",\n    \"textEditorDiffInformation\",\n    \"timeline\"\n  ],\n  \"categories\": [\n    \"Other\"\n  ],\n  \"activationEvents\": [\n    \"*\",\n    \"onEditSession:file\",\n    \"onFileSystem:git\",\n    \"onFileSystem:git-show\"\n  ],\n  \"extensionDependencies\": [\n    \"vscode.git-base\"\n  ],\n  \"main\": \"./out/main\",\n  \"icon\": \"resources/icons/git.png\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:git\",\n    \"watch\": \"gulp watch-extension:git\",\n    \"update-emoji\": \"node ./build/update-emoji.js\",\n    \"test\": \"node ../../node_modules/mocha/bin/mocha\"\n  },\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": false\n    }\n  },\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"command\": \"git.continueInLocalClone\",\n        \"title\": \"%command.continueInLocalClone%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(repo-clone)\",\n        \"enablement\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && remoteName\"\n      },\n      {\n        \"command\": \"git.clone\",\n        \"title\": \"%command.clone%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.cloneRecursive\",\n        \"title\": \"%command.cloneRecursive%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.init\",\n        \"title\": \"%command.init%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.openRepository\",\n        \"title\": \"%command.openRepository%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.reopenClosedRepositories\",\n        \"title\": \"%command.reopenClosedRepositories%\",\n        \"icon\": \"$(repo)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress && git.closedRepositoryCount != 0\"\n      },\n      {\n        \"command\": \"git.close\",\n        \"title\": \"%command.close%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.closeOtherRepositories\",\n        \"title\": \"%command.closeOtherRepositories%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.refresh\",\n        \"title\": \"%command.refresh%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(refresh)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.openChange\",\n        \"title\": \"%command.openChange%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(compare-changes)\"\n      },\n      {\n        \"command\": \"git.openAllChanges\",\n        \"title\": \"%command.openAllChanges%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.openFile\",\n        \"title\": \"%command.openFile%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(go-to-file)\"\n      },\n      {\n        \"command\": \"git.openFile2\",\n        \"title\": \"%command.openFile%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(go-to-file)\"\n      },\n      {\n        \"command\": \"git.openHEADFile\",\n        \"title\": \"%command.openHEADFile%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.stage\",\n        \"title\": \"%command.stage%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stageAll\",\n        \"title\": \"%command.stageAll%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stageAllTracked\",\n        \"title\": \"%command.stageAllTracked%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stageAllUntracked\",\n        \"title\": \"%command.stageAllUntracked%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stageAllMerge\",\n        \"title\": \"%command.stageAllMerge%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stageSelectedRanges\",\n        \"title\": \"%command.stageSelectedRanges%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.diff.stageHunk\",\n        \"title\": \"%command.stageBlock%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(plus)\"\n      },\n      {\n        \"command\": \"git.diff.stageSelection\",\n        \"title\": \"%command.stageSelection%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(plus)\"\n      },\n      {\n        \"command\": \"git.revertSelectedRanges\",\n        \"title\": \"%command.revertSelectedRanges%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stageChange\",\n        \"title\": \"%command.stageChange%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stageFile\",\n        \"title\": \"%command.stage%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(add)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.revertChange\",\n        \"title\": \"%command.revertChange%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(discard)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.unstage\",\n        \"title\": \"%command.unstage%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(remove)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.unstageAll\",\n        \"title\": \"%command.unstageAll%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(remove)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.unstageSelectedRanges\",\n        \"title\": \"%command.unstageSelectedRanges%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.unstageFile\",\n        \"title\": \"%command.unstage%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(remove)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.clean\",\n        \"title\": \"%command.clean%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(discard)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.cleanAll\",\n        \"title\": \"%command.cleanAll%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(discard)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.cleanAllTracked\",\n        \"title\": \"%command.cleanAllTracked%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(discard)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.cleanAllUntracked\",\n        \"title\": \"%command.cleanAllUntracked%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(discard)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.rename\",\n        \"title\": \"%command.rename%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(discard)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commit\",\n        \"title\": \"%command.commit%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(check)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAmend\",\n        \"title\": \"%command.commitAmend%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(check)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitSigned\",\n        \"title\": \"%command.commitSigned%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(check)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitStaged\",\n        \"title\": \"%command.commitStaged%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitEmpty\",\n        \"title\": \"%command.commitEmpty%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitStagedSigned\",\n        \"title\": \"%command.commitStagedSigned%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitStagedAmend\",\n        \"title\": \"%command.commitStagedAmend%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAll\",\n        \"title\": \"%command.commitAll%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAllSigned\",\n        \"title\": \"%command.commitAllSigned%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAllAmend\",\n        \"title\": \"%command.commitAllAmend%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitNoVerify\",\n        \"title\": \"%command.commitNoVerify%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(check)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitStagedNoVerify\",\n        \"title\": \"%command.commitStagedNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitEmptyNoVerify\",\n        \"title\": \"%command.commitEmptyNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitStagedSignedNoVerify\",\n        \"title\": \"%command.commitStagedSignedNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAmendNoVerify\",\n        \"title\": \"%command.commitAmendNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitSignedNoVerify\",\n        \"title\": \"%command.commitSignedNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitStagedAmendNoVerify\",\n        \"title\": \"%command.commitStagedAmendNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAllNoVerify\",\n        \"title\": \"%command.commitAllNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAllSignedNoVerify\",\n        \"title\": \"%command.commitAllSignedNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitAllAmendNoVerify\",\n        \"title\": \"%command.commitAllAmendNoVerify%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.commitMessageAccept\",\n        \"title\": \"%command.commitMessageAccept%\",\n        \"icon\": \"$(check)\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.commitMessageDiscard\",\n        \"title\": \"%command.commitMessageDiscard%\",\n        \"icon\": \"$(discard)\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.restoreCommitTemplate\",\n        \"title\": \"%command.restoreCommitTemplate%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.undoCommit\",\n        \"title\": \"%command.undoCommit%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.checkout\",\n        \"title\": \"%command.checkout%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.graph.checkout\",\n        \"title\": \"%command.graphCheckout%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.checkoutDetached\",\n        \"title\": \"%command.checkoutDetached%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.graph.checkoutDetached\",\n        \"title\": \"%command.graphCheckoutDetached%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.branch\",\n        \"title\": \"%command.branch%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.branchFrom\",\n        \"title\": \"%command.branchFrom%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.deleteBranch\",\n        \"title\": \"%command.deleteBranch%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.graph.deleteBranch\",\n        \"title\": \"%command.graphDeleteBranch%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.deleteRemoteBranch\",\n        \"title\": \"%command.deleteRemoteBranch%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.renameBranch\",\n        \"title\": \"%command.renameBranch%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.merge\",\n        \"title\": \"%command.merge%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.mergeAbort\",\n        \"title\": \"%command.mergeAbort%\",\n        \"category\": \"Git\",\n        \"enablement\": \"gitMergeInProgress\"\n      },\n      {\n        \"command\": \"git.rebase\",\n        \"title\": \"%command.rebase%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.createTag\",\n        \"title\": \"%command.createTag%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.deleteTag\",\n        \"title\": \"%command.deleteTag%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.graph.deleteTag\",\n        \"title\": \"%command.graphDeleteTag%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.deleteRemoteTag\",\n        \"title\": \"%command.deleteRemoteTag%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.fetch\",\n        \"title\": \"%command.fetch%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.fetchPrune\",\n        \"title\": \"%command.fetchPrune%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.fetchAll\",\n        \"title\": \"%command.fetchAll%\",\n        \"icon\": \"$(git-fetch)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.fetchRef\",\n        \"title\": \"%command.fetch%\",\n        \"icon\": \"$(git-fetch)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pull\",\n        \"title\": \"%command.pull%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pullRebase\",\n        \"title\": \"%command.pullRebase%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pullFrom\",\n        \"title\": \"%command.pullFrom%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pullRef\",\n        \"title\": \"%command.pull%\",\n        \"icon\": \"$(repo-pull)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress && scmCurrentHistoryItemRefInFilter && scmCurrentHistoryItemRefHasRemote\"\n      },\n      {\n        \"command\": \"git.push\",\n        \"title\": \"%command.push%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pushForce\",\n        \"title\": \"%command.pushForce%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pushTo\",\n        \"title\": \"%command.pushTo%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pushToForce\",\n        \"title\": \"%command.pushToForce%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pushTags\",\n        \"title\": \"%command.pushTags%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pushWithTags\",\n        \"title\": \"%command.pushFollowTags%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pushWithTagsForce\",\n        \"title\": \"%command.pushFollowTagsForce%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.pushRef\",\n        \"title\": \"%command.push%\",\n        \"icon\": \"$(repo-push)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress && scmCurrentHistoryItemRefInFilter && scmCurrentHistoryItemRefHasRemote\"\n      },\n      {\n        \"command\": \"git.cherryPick\",\n        \"title\": \"%command.cherryPick%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.graph.cherryPick\",\n        \"title\": \"%command.graphCherryPick%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.cherryPickAbort\",\n        \"title\": \"%command.cherryPickAbort%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.addRemote\",\n        \"title\": \"%command.addRemote%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.removeRemote\",\n        \"title\": \"%command.removeRemote%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.sync\",\n        \"title\": \"%command.sync%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.syncRebase\",\n        \"title\": \"%command.syncRebase%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.publish\",\n        \"title\": \"%command.publish%\",\n        \"category\": \"Git\",\n        \"icon\": \"$(cloud-upload)\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.showOutput\",\n        \"title\": \"%command.showOutput%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.ignore\",\n        \"title\": \"%command.ignore%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.revealInExplorer\",\n        \"title\": \"%command.revealInExplorer%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.revealFileInOS.linux\",\n        \"title\": \"%command.revealFileInOS.linux%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.revealFileInOS.mac\",\n        \"title\": \"%command.revealFileInOS.mac%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.revealFileInOS.windows\",\n        \"title\": \"%command.revealFileInOS.windows%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.stashIncludeUntracked\",\n        \"title\": \"%command.stashIncludeUntracked%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stash\",\n        \"title\": \"%command.stash%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashStaged\",\n        \"title\": \"%command.stashStaged%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress && gitVersion2.35\"\n      },\n      {\n        \"command\": \"git.stashPop\",\n        \"title\": \"%command.stashPop%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashPopLatest\",\n        \"title\": \"%command.stashPopLatest%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashPopEditor\",\n        \"title\": \"%command.stashPopEditor%\",\n        \"icon\": \"$(git-stash-pop)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashApply\",\n        \"title\": \"%command.stashApply%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashApplyLatest\",\n        \"title\": \"%command.stashApplyLatest%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashApplyEditor\",\n        \"title\": \"%command.stashApplyEditor%\",\n        \"icon\": \"$(git-stash-apply)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashDrop\",\n        \"title\": \"%command.stashDrop%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashDropAll\",\n        \"title\": \"%command.stashDropAll%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashDropEditor\",\n        \"title\": \"%command.stashDropEditor%\",\n        \"icon\": \"$(trash)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.stashView\",\n        \"title\": \"%command.stashView%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.timeline.openDiff\",\n        \"title\": \"%command.timelineOpenDiff%\",\n        \"icon\": \"$(compare-changes)\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.timeline.copyCommitId\",\n        \"title\": \"%command.timelineCopyCommitId%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.timeline.copyCommitMessage\",\n        \"title\": \"%command.timelineCopyCommitMessage%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.timeline.selectForCompare\",\n        \"title\": \"%command.timelineSelectForCompare%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.timeline.compareWithSelected\",\n        \"title\": \"%command.timelineCompareWithSelected%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.timeline.viewCommit\",\n        \"title\": \"%command.viewCommit%\",\n        \"icon\": \"$(diff-multiple)\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.rebaseAbort\",\n        \"title\": \"%command.rebaseAbort%\",\n        \"category\": \"Git\",\n        \"enablement\": \"gitRebaseInProgress\"\n      },\n      {\n        \"command\": \"git.closeAllDiffEditors\",\n        \"title\": \"%command.closeAllDiffEditors%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.closeAllUnmodifiedEditors\",\n        \"title\": \"%command.closeAllUnmodifiedEditors%\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.api.getRepositories\",\n        \"title\": \"%command.api.getRepositories%\",\n        \"category\": \"Git API\"\n      },\n      {\n        \"command\": \"git.api.getRepositoryState\",\n        \"title\": \"%command.api.getRepositoryState%\",\n        \"category\": \"Git API\"\n      },\n      {\n        \"command\": \"git.api.getRemoteSources\",\n        \"title\": \"%command.api.getRemoteSources%\",\n        \"category\": \"Git API\"\n      },\n      {\n        \"command\": \"git.acceptMerge\",\n        \"title\": \"%command.git.acceptMerge%\",\n        \"category\": \"Git\",\n        \"enablement\": \"isMergeEditor && mergeEditorResultUri in git.mergeChanges\"\n      },\n      {\n        \"command\": \"git.openMergeEditor\",\n        \"title\": \"%command.git.openMergeEditor%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.runGitMerge\",\n        \"title\": \"%command.git.runGitMerge%\",\n        \"category\": \"Git\",\n        \"enablement\": \"isMergeEditor\"\n      },\n      {\n        \"command\": \"git.runGitMergeDiff3\",\n        \"title\": \"%command.git.runGitMergeDiff3%\",\n        \"category\": \"Git\",\n        \"enablement\": \"isMergeEditor\"\n      },\n      {\n        \"command\": \"git.manageUnsafeRepositories\",\n        \"title\": \"%command.manageUnsafeRepositories%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.openRepositoriesInParentFolders\",\n        \"title\": \"%command.openRepositoriesInParentFolders%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.viewChanges\",\n        \"title\": \"%command.viewChanges%\",\n        \"icon\": \"$(diff-multiple)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.viewStagedChanges\",\n        \"title\": \"%command.viewStagedChanges%\",\n        \"icon\": \"$(diff-multiple)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.viewUntrackedChanges\",\n        \"title\": \"%command.viewUntrackedChanges%\",\n        \"icon\": \"$(diff-multiple)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.viewCommit\",\n        \"title\": \"%command.viewCommit%\",\n        \"icon\": \"$(diff-multiple)\",\n        \"category\": \"Git\",\n        \"enablement\": \"!operationInProgress\"\n      },\n      {\n        \"command\": \"git.copyCommitId\",\n        \"title\": \"%command.timelineCopyCommitId%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.copyCommitMessage\",\n        \"title\": \"%command.timelineCopyCommitMessage%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.blame.toggleEditorDecoration\",\n        \"title\": \"%command.blameToggleEditorDecoration%\",\n        \"category\": \"Git\"\n      },\n      {\n        \"command\": \"git.blame.toggleStatusBarItem\",\n        \"title\": \"%command.blameToggleStatusBarItem%\",\n        \"category\": \"Git\"\n      }\n    ],\n    \"continueEditSession\": [\n      {\n        \"command\": \"git.continueInLocalClone\",\n        \"qualifiedName\": \"%command.continueInLocalClone.qualifiedName%\",\n        \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && remoteName\",\n        \"remoteGroup\": \"remote_42_git_0_local@0\"\n      }\n    ],\n    \"keybindings\": [\n      {\n        \"command\": \"git.stageSelectedRanges\",\n        \"key\": \"ctrl+k ctrl+alt+s\",\n        \"mac\": \"cmd+k cmd+alt+s\",\n        \"when\": \"editorTextFocus && resourceScheme == file\"\n      },\n      {\n        \"command\": \"git.unstageSelectedRanges\",\n        \"key\": \"ctrl+k ctrl+n\",\n        \"mac\": \"cmd+k cmd+n\",\n        \"when\": \"editorTextFocus && isInDiffEditor && isInDiffRightEditor && resourceScheme == git\"\n      },\n      {\n        \"command\": \"git.revertSelectedRanges\",\n        \"key\": \"ctrl+k ctrl+r\",\n        \"mac\": \"cmd+k cmd+r\",\n        \"when\": \"editorTextFocus && resourceScheme == file\"\n      }\n    ],\n    \"menus\": {\n      \"commandPalette\": [\n        {\n          \"command\": \"git.continueInLocalClone\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.clone\",\n          \"when\": \"config.git.enabled && !git.missing\"\n        },\n        {\n          \"command\": \"git.cloneRecursive\",\n          \"when\": \"config.git.enabled && !git.missing\"\n        },\n        {\n          \"command\": \"git.init\",\n          \"when\": \"config.git.enabled && !git.missing && remoteName != 'codespaces'\"\n        },\n        {\n          \"command\": \"git.openRepository\",\n          \"when\": \"config.git.enabled && !git.missing\"\n        },\n        {\n          \"command\": \"git.close\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.closeOtherRepositories\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount > 1\"\n        },\n        {\n          \"command\": \"git.refresh\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.openFile\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file && scmActiveResourceHasChanges\"\n        },\n        {\n          \"command\": \"git.openHEADFile\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file && scmActiveResourceHasChanges\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stageAll\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stageAllTracked\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stageAllUntracked\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stageAllMerge\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stageSelectedRanges\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file\"\n        },\n        {\n          \"command\": \"git.stageChange\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.revertSelectedRanges\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file\"\n        },\n        {\n          \"command\": \"git.revertChange\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.openFile2\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.unstage\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.unstageAll\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.unstageSelectedRanges\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == git\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.cleanAll\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.cleanAllTracked\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.cleanAllUntracked\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.rename\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file && scmActiveResourceRepository\"\n        },\n        {\n          \"command\": \"git.commit\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAmend\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitSigned\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitStaged\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitEmpty\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitStagedSigned\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitStagedAmend\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAll\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAllSigned\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAllAmend\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.rebaseAbort\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && gitRebaseInProgress\"\n        },\n        {\n          \"command\": \"git.commitNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitStagedNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitEmptyNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitStagedSignedNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAmendNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitSignedNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitStagedAmendNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAllNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAllSignedNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.commitAllAmendNoVerify\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowNoVerifyCommit && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.restoreCommitTemplate\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.commitMessageAccept\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.commitMessageDiscard\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.revealInExplorer\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.linux\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.mac\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.windows\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.undoCommit\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.checkout\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.branch\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.branchFrom\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.deleteBranch\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.deleteRemoteBranch\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.renameBranch\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.cherryPick\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.cherryPickAbort\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && gitCherryPickInProgress\"\n        },\n        {\n          \"command\": \"git.pull\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pullFrom\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pullRebase\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.merge\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.mergeAbort\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && gitMergeInProgress\"\n        },\n        {\n          \"command\": \"git.rebase\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.createTag\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.deleteTag\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.deleteRemoteTag\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.fetch\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.fetchPrune\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.fetchAll\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.push\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pushForce\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowForcePush && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pushTo\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pushToForce\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowForcePush && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pushWithTags\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pushWithTagsForce\",\n          \"when\": \"config.git.enabled && !git.missing && config.git.allowForcePush && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.pushTags\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.addRemote\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.removeRemote\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.sync\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.syncRebase\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.publish\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.showOutput\",\n          \"when\": \"config.git.enabled\"\n        },\n        {\n          \"command\": \"git.ignore\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file && scmActiveResourceRepository\"\n        },\n        {\n          \"command\": \"git.stashIncludeUntracked\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stash\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashStaged\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && gitVersion2.35\"\n        },\n        {\n          \"command\": \"git.stashPop\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashPopLatest\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashPopEditor\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.stashApply\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashApplyLatest\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashApplyEditor\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.stashDrop\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashDropAll\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashDropEditor\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.timeline.openDiff\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.timeline.copyCommitId\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.timeline.copyCommitMessage\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.timeline.selectForCompare\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.timeline.compareWithSelected\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.timeline.viewCommit\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.closeAllDiffEditors\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.api.getRepositories\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.api.getRepositoryState\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.api.getRemoteSources\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.openMergeEditor\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.manageUnsafeRepositories\",\n          \"when\": \"config.git.enabled && !git.missing && git.unsafeRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.openRepositoriesInParentFolders\",\n          \"when\": \"config.git.enabled && !git.missing && git.parentRepositoryCount != 0\"\n        },\n        {\n          \"command\": \"git.stashView\",\n          \"when\": \"config.git.enabled && !git.missing && config.multiDiffEditor.experimental.enabled\"\n        },\n        {\n          \"command\": \"git.viewChanges\",\n          \"when\": \"config.git.enabled && !git.missing && config.multiDiffEditor.experimental.enabled\"\n        },\n        {\n          \"command\": \"git.viewStagedChanges\",\n          \"when\": \"config.git.enabled && !git.missing && config.multiDiffEditor.experimental.enabled\"\n        },\n        {\n          \"command\": \"git.viewUntrackedChanges\",\n          \"when\": \"config.git.enabled && !git.missing && config.multiDiffEditor.experimental.enabled && config.git.untrackedChanges == separate\"\n        },\n        {\n          \"command\": \"git.viewCommit\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.stageFile\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.unstageFile\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.fetchRef\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.pullRef\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.pushRef\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.copyCommitId\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.copyCommitMessage\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.graph.checkout\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.graph.checkoutDetached\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.graph.deleteBranch\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.graph.deleteTag\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.graph.cherryPick\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"git.diff.stageHunk\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && diffEditorOriginalUri =~ /^git\\\\:.*%22ref%22%3A%22~%22%7D$/\"\n        },\n        {\n          \"command\": \"git.diff.stageSelection\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && diffEditorOriginalUri =~ /^git\\\\:.*%22ref%22%3A%22~%22%7D$/\"\n        }\n      ],\n      \"scm/title\": [\n        {\n          \"command\": \"git.commit\",\n          \"group\": \"navigation\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.refresh\",\n          \"group\": \"navigation\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.pull\",\n          \"group\": \"1_header@1\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.push\",\n          \"group\": \"1_header@2\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.clone\",\n          \"group\": \"1_header@3\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.checkout\",\n          \"group\": \"1_header@4\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.fetch\",\n          \"group\": \"1_header@5\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"submenu\": \"git.commit\",\n          \"group\": \"2_main@1\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"submenu\": \"git.changes\",\n          \"group\": \"2_main@2\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"submenu\": \"git.pullpush\",\n          \"group\": \"2_main@3\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"submenu\": \"git.branch\",\n          \"group\": \"2_main@4\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"submenu\": \"git.remotes\",\n          \"group\": \"2_main@5\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"submenu\": \"git.stash\",\n          \"group\": \"2_main@6\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"submenu\": \"git.tags\",\n          \"group\": \"2_main@7\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.showOutput\",\n          \"group\": \"3_footer\",\n          \"when\": \"scmProvider == git\"\n        }\n      ],\n      \"scm/sourceControl/title\": [\n        {\n          \"command\": \"git.reopenClosedRepositories\",\n          \"group\": \"navigation@1\",\n          \"when\": \"git.closedRepositoryCount > 0\"\n        }\n      ],\n      \"scm/sourceControl\": [\n        {\n          \"command\": \"git.close\",\n          \"group\": \"navigation@1\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.closeOtherRepositories\",\n          \"group\": \"navigation@2\",\n          \"when\": \"scmProvider == git && gitOpenRepositoryCount > 1\"\n        }\n      ],\n      \"scm/resourceGroup/context\": [\n        {\n          \"command\": \"git.stageAllMerge\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.stageAllMerge\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.unstageAll\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.unstageAll\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.viewStagedChanges\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index && config.multiDiffEditor.experimental.enabled\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.viewChanges\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.multiDiffEditor.experimental.enabled\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.cleanAll\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges == mixed\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.stageAll\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges == mixed\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.cleanAll\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges == mixed\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.stageAll\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges == mixed\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.cleanAllTracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges != mixed\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.stageAllTracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges != mixed\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.cleanAllTracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges != mixed\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.stageAllTracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges != mixed\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.cleanAllUntracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.stageAllUntracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.viewUntrackedChanges\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked && config.multiDiffEditor.experimental.enabled\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.cleanAllUntracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.stageAllUntracked\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"inline@2\"\n        }\n      ],\n      \"scm/resourceFolder/context\": [\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.unstage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.unstage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.ignore\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"1_modification@3\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.ignore\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"1_modification@3\"\n        }\n      ],\n      \"scm/resourceState/context\": [\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.openFile\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.linux\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge && remoteName == '' && isLinux\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.mac\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge && remoteName == '' && isMac\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.windows\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge && remoteName == '' && isWindows\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealInExplorer\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"2_view@2\"\n        },\n        {\n          \"command\": \"git.openFile2\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge && config.git.showInlineOpenFileAction && config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge && config.git.showInlineOpenFileAction && !config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.openFile\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.openHEADFile\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.unstage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.unstage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.linux\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index && remoteName == '' && isLinux\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.mac\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index && remoteName == '' && isMac\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.windows\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index && remoteName == '' && isWindows\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealInExplorer\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\",\n          \"group\": \"2_view@2\"\n        },\n        {\n          \"command\": \"git.openFile2\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index && config.git.showInlineOpenFileAction && config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index && config.git.showInlineOpenFileAction && !config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.openHEADFile\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.openFile\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.openFile2\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.showInlineOpenFileAction && config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && config.git.showInlineOpenFileAction && !config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.ignore\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"1_modification@3\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.linux\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && remoteName == '' && isLinux\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.mac\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && remoteName == '' && isMac\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealFileInOS.windows\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree && remoteName == '' && isWindows\",\n          \"group\": \"2_view@1\"\n        },\n        {\n          \"command\": \"git.revealInExplorer\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\",\n          \"group\": \"2_view@2\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.openHEADFile\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.openFile\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked && !gitFreshRepository\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"git.clean\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked && !gitFreshRepository\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"inline@2\"\n        },\n        {\n          \"command\": \"git.openFile2\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked && config.git.showInlineOpenFileAction && config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked && config.git.showInlineOpenFileAction && !config.git.openDiffOnClick\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"git.ignore\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\",\n          \"group\": \"1_modification@3\"\n        }\n      ],\n      \"scm/history/title\": [\n        {\n          \"command\": \"git.fetchAll\",\n          \"group\": \"navigation@900\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.pullRef\",\n          \"group\": \"navigation@901\",\n          \"when\": \"scmProvider == git\"\n        },\n        {\n          \"command\": \"git.pushRef\",\n          \"when\": \"scmProvider == git && scmCurrentHistoryItemRefHasRemote\",\n          \"group\": \"navigation@902\"\n        },\n        {\n          \"command\": \"git.publish\",\n          \"when\": \"scmProvider == git && !scmCurrentHistoryItemRefHasRemote\",\n          \"group\": \"navigation@903\"\n        }\n      ],\n      \"scm/historyItem/context\": [\n        {\n          \"command\": \"git.graph.checkoutDetached\",\n          \"when\": \"scmProvider == git\",\n          \"group\": \"1_checkout@2\"\n        },\n        {\n          \"command\": \"git.branch\",\n          \"when\": \"scmProvider == git\",\n          \"group\": \"2_branch@2\"\n        },\n        {\n          \"command\": \"git.createTag\",\n          \"when\": \"scmProvider == git\",\n          \"group\": \"3_tag@1\"\n        },\n        {\n          \"command\": \"git.graph.cherryPick\",\n          \"when\": \"scmProvider == git\",\n          \"group\": \"4_modify@1\"\n        },\n        {\n          \"command\": \"git.copyCommitId\",\n          \"when\": \"scmProvider == git && !listMultiSelection\",\n          \"group\": \"9_copy@1\"\n        },\n        {\n          \"command\": \"git.copyCommitMessage\",\n          \"when\": \"scmProvider == git && !listMultiSelection\",\n          \"group\": \"9_copy@2\"\n        }\n      ],\n      \"scm/historyItemRef/context\": [\n        {\n          \"command\": \"git.graph.checkout\",\n          \"when\": \"scmProvider == git\",\n          \"group\": \"1_checkout@1\"\n        },\n        {\n          \"command\": \"git.graph.deleteBranch\",\n          \"when\": \"scmProvider == git && scmHistoryItemRef =~ /^refs\\\\/heads\\\\/|^refs\\\\/remotes\\\\//\",\n          \"group\": \"2_branch@2\"\n        },\n        {\n          \"command\": \"git.graph.deleteTag\",\n          \"when\": \"scmProvider == git && scmHistoryItemRef =~ /^refs\\\\/tags\\\\//\",\n          \"group\": \"3_tag@2\"\n        }\n      ],\n      \"editor/title\": [\n        {\n          \"command\": \"git.openFile\",\n          \"group\": \"navigation\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme =~ /^git$|^file$/\"\n        },\n        {\n          \"command\": \"git.openFile\",\n          \"group\": \"navigation\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInNotebookTextDiffEditor && resourceScheme =~ /^git$|^file$/\"\n        },\n        {\n          \"command\": \"git.openChange\",\n          \"group\": \"navigation@2\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && !isInDiffEditor && !isMergeEditor && resourceScheme == file && scmActiveResourceHasChanges\"\n        },\n        {\n          \"command\": \"git.commitMessageAccept\",\n          \"group\": \"navigation\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && editorLangId == git-commit\"\n        },\n        {\n          \"command\": \"git.commitMessageDiscard\",\n          \"group\": \"navigation\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && editorLangId == git-commit\"\n        },\n        {\n          \"command\": \"git.stashApplyEditor\",\n          \"alt\": \"git.stashPopEditor\",\n          \"group\": \"navigation@1\",\n          \"when\": \"config.git.enabled && !git.missing && resourceScheme == git-stash\"\n        },\n        {\n          \"command\": \"git.stashDropEditor\",\n          \"group\": \"navigation@2\",\n          \"when\": \"config.git.enabled && !git.missing && resourceScheme == git-stash\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"group\": \"2_git@1\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && !isInDiffEditor && !isMergeEditor && resourceScheme == file && git.activeResourceHasUnstagedChanges\"\n        },\n        {\n          \"command\": \"git.unstage\",\n          \"group\": \"2_git@2\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && !isInDiffEditor && !isMergeEditor && resourceScheme == file && git.activeResourceHasStagedChanges\"\n        },\n        {\n          \"command\": \"git.stage\",\n          \"group\": \"2_git@1\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == file\"\n        },\n        {\n          \"command\": \"git.stageSelectedRanges\",\n          \"group\": \"2_git@2\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == file\"\n        },\n        {\n          \"command\": \"git.unstage\",\n          \"group\": \"2_git@3\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == git\"\n        },\n        {\n          \"command\": \"git.unstageSelectedRanges\",\n          \"group\": \"2_git@4\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == git\"\n        },\n        {\n          \"command\": \"git.revertSelectedRanges\",\n          \"group\": \"2_git@5\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == file\"\n        }\n      ],\n      \"editor/context\": [\n        {\n          \"command\": \"git.stageSelectedRanges\",\n          \"group\": \"2_git@1\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == file\"\n        },\n        {\n          \"command\": \"git.unstageSelectedRanges\",\n          \"group\": \"2_git@2\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == git\"\n        },\n        {\n          \"command\": \"git.revertSelectedRanges\",\n          \"group\": \"2_git@3\",\n          \"when\": \"config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && isInDiffRightEditor && !isEmbeddedDiffEditor && resourceScheme == file\"\n        }\n      ],\n      \"editor/content\": [\n        {\n          \"command\": \"git.acceptMerge\",\n          \"when\": \"isMergeResultEditor && mergeEditorBaseUri =~ /^(git|file):/ && mergeEditorResultUri in git.mergeChanges\"\n        },\n        {\n          \"command\": \"git.openMergeEditor\",\n          \"group\": \"navigation@-10\",\n          \"when\": \"config.git.enabled && !git.missing && !isInDiffEditor && !isMergeEditor && resource in git.mergeChanges\"\n        }\n      ],\n      \"multiDiffEditor/resource/title\": [\n        {\n          \"command\": \"git.stageFile\",\n          \"group\": \"navigation\",\n          \"when\": \"scmProvider == git && scmResourceGroup == workingTree\"\n        },\n        {\n          \"command\": \"git.stageFile\",\n          \"group\": \"navigation\",\n          \"when\": \"scmProvider == git && scmResourceGroup == untracked\"\n        },\n        {\n          \"command\": \"git.unstageFile\",\n          \"group\": \"navigation\",\n          \"when\": \"scmProvider == git && scmResourceGroup == index\"\n        }\n      ],\n      \"diffEditor/gutter/hunk\": [\n        {\n          \"command\": \"git.diff.stageHunk\",\n          \"group\": \"primary@10\",\n          \"when\": \"diffEditorOriginalUri =~ /^git\\\\:.*%22ref%22%3A%22~%22%7D$/\"\n        }\n      ],\n      \"diffEditor/gutter/selection\": [\n        {\n          \"command\": \"git.diff.stageSelection\",\n          \"group\": \"primary@10\",\n          \"when\": \"diffEditorOriginalUri =~ /^git\\\\:.*%22ref%22%3A%22~%22%7D$/\"\n        }\n      ],\n      \"scm/change/title\": [\n        {\n          \"command\": \"git.stageChange\",\n          \"when\": \"config.git.enabled && !git.missing && originalResourceScheme == git\"\n        },\n        {\n          \"command\": \"git.revertChange\",\n          \"when\": \"config.git.enabled && !git.missing && originalResourceScheme == git\"\n        }\n      ],\n      \"timeline/item/context\": [\n        {\n          \"command\": \"git.timeline.viewCommit\",\n          \"group\": \"inline\",\n          \"when\": \"config.git.enabled && !git.missing && timelineItem =~ /git:file:commit\\\\b/ && !listMultiSelection && config.multiDiffEditor.experimental.enabled\"\n        },\n        {\n          \"command\": \"git.timeline.openDiff\",\n          \"group\": \"1_actions@1\",\n          \"when\": \"config.git.enabled && !git.missing && timelineItem =~ /git:file\\\\b/ && !listMultiSelection\"\n        },\n        {\n          \"command\": \"git.timeline.viewCommit\",\n          \"group\": \"1_actions@2\",\n          \"when\": \"config.git.enabled && !git.missing && timelineItem =~ /git:file:commit\\\\b/ && !listMultiSelection && config.multiDiffEditor.experimental.enabled\"\n        },\n        {\n          \"command\": \"git.timeline.compareWithSelected\",\n          \"group\": \"3_compare@1\",\n          \"when\": \"config.git.enabled && !git.missing && git.timeline.selectedForCompare && timelineItem =~ /git:file\\\\b/ && !listMultiSelection\"\n        },\n        {\n          \"command\": \"git.timeline.selectForCompare\",\n          \"group\": \"3_compare@2\",\n          \"when\": \"config.git.enabled && !git.missing && timelineItem =~ /git:file\\\\b/ && !listMultiSelection\"\n        },\n        {\n          \"command\": \"git.timeline.copyCommitId\",\n          \"group\": \"5_copy@1\",\n          \"when\": \"config.git.enabled && !git.missing && timelineItem =~ /git:file:commit\\\\b/ && !listMultiSelection\"\n        },\n        {\n          \"command\": \"git.timeline.copyCommitMessage\",\n          \"group\": \"5_copy@2\",\n          \"when\": \"config.git.enabled && !git.missing && timelineItem =~ /git:file:commit\\\\b/ && !listMultiSelection\"\n        }\n      ],\n      \"git.commit\": [\n        {\n          \"command\": \"git.commit\",\n          \"group\": \"1_commit@1\"\n        },\n        {\n          \"command\": \"git.commitStaged\",\n          \"group\": \"1_commit@2\"\n        },\n        {\n          \"command\": \"git.commitAll\",\n          \"group\": \"1_commit@3\"\n        },\n        {\n          \"command\": \"git.undoCommit\",\n          \"group\": \"1_commit@4\"\n        },\n        {\n          \"command\": \"git.rebaseAbort\",\n          \"group\": \"1_commit@5\"\n        },\n        {\n          \"command\": \"git.commitNoVerify\",\n          \"group\": \"2_commit_noverify@1\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitStagedNoVerify\",\n          \"group\": \"2_commit_noverify@2\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitAllNoVerify\",\n          \"group\": \"2_commit_noverify@3\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitAmend\",\n          \"group\": \"3_amend@1\"\n        },\n        {\n          \"command\": \"git.commitStagedAmend\",\n          \"group\": \"3_amend@2\"\n        },\n        {\n          \"command\": \"git.commitAllAmend\",\n          \"group\": \"3_amend@3\"\n        },\n        {\n          \"command\": \"git.commitAmendNoVerify\",\n          \"group\": \"4_amend_noverify@1\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitStagedAmendNoVerify\",\n          \"group\": \"4_amend_noverify@2\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitAllAmendNoVerify\",\n          \"group\": \"4_amend_noverify@3\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitSigned\",\n          \"group\": \"5_signoff@1\"\n        },\n        {\n          \"command\": \"git.commitStagedSigned\",\n          \"group\": \"5_signoff@2\"\n        },\n        {\n          \"command\": \"git.commitAllSigned\",\n          \"group\": \"5_signoff@3\"\n        },\n        {\n          \"command\": \"git.commitSignedNoVerify\",\n          \"group\": \"6_signoff_noverify@1\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitStagedSignedNoVerify\",\n          \"group\": \"6_signoff_noverify@2\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        },\n        {\n          \"command\": \"git.commitAllSignedNoVerify\",\n          \"group\": \"6_signoff_noverify@3\",\n          \"when\": \"config.git.allowNoVerifyCommit\"\n        }\n      ],\n      \"git.changes\": [\n        {\n          \"command\": \"git.stageAll\",\n          \"group\": \"changes@1\"\n        },\n        {\n          \"command\": \"git.unstageAll\",\n          \"group\": \"changes@2\"\n        },\n        {\n          \"command\": \"git.cleanAll\",\n          \"group\": \"changes@3\"\n        }\n      ],\n      \"git.pullpush\": [\n        {\n          \"command\": \"git.sync\",\n          \"group\": \"1_sync@1\"\n        },\n        {\n          \"command\": \"git.syncRebase\",\n          \"when\": \"gitState == idle\",\n          \"group\": \"1_sync@2\"\n        },\n        {\n          \"command\": \"git.pull\",\n          \"group\": \"2_pull@1\"\n        },\n        {\n          \"command\": \"git.pullRebase\",\n          \"group\": \"2_pull@2\"\n        },\n        {\n          \"command\": \"git.pullFrom\",\n          \"group\": \"2_pull@3\"\n        },\n        {\n          \"command\": \"git.push\",\n          \"group\": \"3_push@1\"\n        },\n        {\n          \"command\": \"git.pushForce\",\n          \"when\": \"config.git.allowForcePush\",\n          \"group\": \"3_push@2\"\n        },\n        {\n          \"command\": \"git.pushTo\",\n          \"group\": \"3_push@3\"\n        },\n        {\n          \"command\": \"git.pushToForce\",\n          \"when\": \"config.git.allowForcePush\",\n          \"group\": \"3_push@4\"\n        },\n        {\n          \"command\": \"git.fetch\",\n          \"group\": \"4_fetch@1\"\n        },\n        {\n          \"command\": \"git.fetchPrune\",\n          \"group\": \"4_fetch@2\"\n        },\n        {\n          \"command\": \"git.fetchAll\",\n          \"group\": \"4_fetch@3\"\n        }\n      ],\n      \"git.branch\": [\n        {\n          \"command\": \"git.merge\",\n          \"group\": \"1_merge@1\"\n        },\n        {\n          \"command\": \"git.rebase\",\n          \"group\": \"1_merge@2\"\n        },\n        {\n          \"command\": \"git.branch\",\n          \"group\": \"2_branch@1\"\n        },\n        {\n          \"command\": \"git.branchFrom\",\n          \"group\": \"2_branch@2\"\n        },\n        {\n          \"command\": \"git.renameBranch\",\n          \"group\": \"3_modify@1\"\n        },\n        {\n          \"command\": \"git.deleteBranch\",\n          \"group\": \"3_modify@2\"\n        },\n        {\n          \"command\": \"git.deleteRemoteBranch\",\n          \"group\": \"3_modify@3\"\n        },\n        {\n          \"command\": \"git.publish\",\n          \"group\": \"4_publish@1\"\n        }\n      ],\n      \"git.remotes\": [\n        {\n          \"command\": \"git.addRemote\",\n          \"group\": \"remote@1\"\n        },\n        {\n          \"command\": \"git.removeRemote\",\n          \"group\": \"remote@2\"\n        }\n      ],\n      \"git.stash\": [\n        {\n          \"command\": \"git.stash\",\n          \"group\": \"1_stash@1\"\n        },\n        {\n          \"command\": \"git.stashIncludeUntracked\",\n          \"group\": \"1_stash@2\"\n        },\n        {\n          \"command\": \"git.stashStaged\",\n          \"when\": \"gitVersion2.35\",\n          \"group\": \"1_stash@3\"\n        },\n        {\n          \"command\": \"git.stashApplyLatest\",\n          \"group\": \"2_apply@1\"\n        },\n        {\n          \"command\": \"git.stashApply\",\n          \"group\": \"2_apply@2\"\n        },\n        {\n          \"command\": \"git.stashPopLatest\",\n          \"group\": \"3_pop@1\"\n        },\n        {\n          \"command\": \"git.stashPop\",\n          \"group\": \"3_pop@2\"\n        },\n        {\n          \"command\": \"git.stashDrop\",\n          \"group\": \"4_drop@1\"\n        },\n        {\n          \"command\": \"git.stashDropAll\",\n          \"group\": \"4_drop@2\"\n        },\n        {\n          \"command\": \"git.stashView\",\n          \"when\": \"config.multiDiffEditor.experimental.enabled\",\n          \"group\": \"5_preview@1\"\n        }\n      ],\n      \"git.tags\": [\n        {\n          \"command\": \"git.createTag\",\n          \"group\": \"tags@1\"\n        },\n        {\n          \"command\": \"git.deleteTag\",\n          \"group\": \"tags@2\"\n        },\n        {\n          \"command\": \"git.deleteRemoteTag\",\n          \"group\": \"tags@3\"\n        }\n      ]\n    },\n    \"submenus\": [\n      {\n        \"id\": \"git.commit\",\n        \"label\": \"%submenu.commit%\"\n      },\n      {\n        \"id\": \"git.changes\",\n        \"label\": \"%submenu.changes%\"\n      },\n      {\n        \"id\": \"git.pullpush\",\n        \"label\": \"%submenu.pullpush%\"\n      },\n      {\n        \"id\": \"git.branch\",\n        \"label\": \"%submenu.branch%\"\n      },\n      {\n        \"id\": \"git.remotes\",\n        \"label\": \"%submenu.remotes%\"\n      },\n      {\n        \"id\": \"git.stash\",\n        \"label\": \"%submenu.stash%\"\n      },\n      {\n        \"id\": \"git.tags\",\n        \"label\": \"%submenu.tags%\"\n      }\n    ],\n    \"configuration\": {\n      \"title\": \"Git\",\n      \"properties\": {\n        \"git.enabled\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"description\": \"%config.enabled%\",\n          \"default\": true\n        },\n        \"git.path\": {\n          \"type\": [\n            \"string\",\n            \"null\",\n            \"array\"\n          ],\n          \"markdownDescription\": \"%config.path%\",\n          \"default\": null,\n          \"scope\": \"machine\"\n        },\n        \"git.autoRepositoryDetection\": {\n          \"type\": [\n            \"boolean\",\n            \"string\"\n          ],\n          \"enum\": [\n            true,\n            false,\n            \"subFolders\",\n            \"openEditors\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.autoRepositoryDetection.true%\",\n            \"%config.autoRepositoryDetection.false%\",\n            \"%config.autoRepositoryDetection.subFolders%\",\n            \"%config.autoRepositoryDetection.openEditors%\"\n          ],\n          \"description\": \"%config.autoRepositoryDetection%\",\n          \"default\": true\n        },\n        \"git.autorefresh\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.autorefresh%\",\n          \"default\": true\n        },\n        \"git.autofetch\": {\n          \"type\": [\n            \"boolean\",\n            \"string\"\n          ],\n          \"enum\": [\n            true,\n            false,\n            \"all\"\n          ],\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%config.autofetch%\",\n          \"default\": false,\n          \"tags\": [\n            \"usesOnlineServices\"\n          ]\n        },\n        \"git.autofetchPeriod\": {\n          \"type\": \"number\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%config.autofetchPeriod%\",\n          \"default\": 180\n        },\n        \"git.defaultBranchName\": {\n          \"type\": \"string\",\n          \"markdownDescription\": \"%config.defaultBranchName%\",\n          \"default\": \"main\",\n          \"scope\": \"resource\"\n        },\n        \"git.branchPrefix\": {\n          \"type\": \"string\",\n          \"description\": \"%config.branchPrefix%\",\n          \"default\": \"\",\n          \"scope\": \"resource\"\n        },\n        \"git.branchProtection\": {\n          \"type\": \"array\",\n          \"markdownDescription\": \"%config.branchProtection%\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"default\": [],\n          \"scope\": \"resource\"\n        },\n        \"git.branchProtectionPrompt\": {\n          \"type\": \"string\",\n          \"description\": \"%config.branchProtectionPrompt%\",\n          \"enum\": [\n            \"alwaysCommit\",\n            \"alwaysCommitToNewBranch\",\n            \"alwaysPrompt\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.branchProtectionPrompt.alwaysCommit%\",\n            \"%config.branchProtectionPrompt.alwaysCommitToNewBranch%\",\n            \"%config.branchProtectionPrompt.alwaysPrompt%\"\n          ],\n          \"default\": \"alwaysPrompt\",\n          \"scope\": \"resource\"\n        },\n        \"git.branchValidationRegex\": {\n          \"type\": \"string\",\n          \"description\": \"%config.branchValidationRegex%\",\n          \"default\": \"\"\n        },\n        \"git.branchWhitespaceChar\": {\n          \"type\": \"string\",\n          \"description\": \"%config.branchWhitespaceChar%\",\n          \"default\": \"-\"\n        },\n        \"git.branchRandomName.enable\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.branchRandomNameEnable%\",\n          \"default\": false,\n          \"scope\": \"resource\"\n        },\n        \"git.branchRandomName.dictionary\": {\n          \"type\": \"array\",\n          \"markdownDescription\": \"%config.branchRandomNameDictionary%\",\n          \"items\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"adjectives\",\n              \"animals\",\n              \"colors\",\n              \"numbers\"\n            ],\n            \"enumDescriptions\": [\n              \"%config.branchRandomNameDictionary.adjectives%\",\n              \"%config.branchRandomNameDictionary.animals%\",\n              \"%config.branchRandomNameDictionary.colors%\",\n              \"%config.branchRandomNameDictionary.numbers%\"\n            ]\n          },\n          \"minItems\": 1,\n          \"maxItems\": 5,\n          \"default\": [\n            \"adjectives\",\n            \"animals\"\n          ],\n          \"scope\": \"resource\"\n        },\n        \"git.confirmSync\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.confirmSync%\",\n          \"default\": true\n        },\n        \"git.countBadge\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"all\",\n            \"tracked\",\n            \"off\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.countBadge.all%\",\n            \"%config.countBadge.tracked%\",\n            \"%config.countBadge.off%\"\n          ],\n          \"description\": \"%config.countBadge%\",\n          \"default\": \"all\",\n          \"scope\": \"resource\"\n        },\n        \"git.checkoutType\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"local\",\n              \"tags\",\n              \"remote\"\n            ],\n            \"enumDescriptions\": [\n              \"%config.checkoutType.local%\",\n              \"%config.checkoutType.tags%\",\n              \"%config.checkoutType.remote%\"\n            ]\n          },\n          \"uniqueItems\": true,\n          \"markdownDescription\": \"%config.checkoutType%\",\n          \"default\": [\n            \"local\",\n            \"remote\",\n            \"tags\"\n          ]\n        },\n        \"git.ignoreLegacyWarning\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.ignoreLegacyWarning%\",\n          \"default\": false\n        },\n        \"git.ignoreMissingGitWarning\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.ignoreMissingGitWarning%\",\n          \"default\": false\n        },\n        \"git.ignoreWindowsGit27Warning\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.ignoreWindowsGit27Warning%\",\n          \"default\": false\n        },\n        \"git.ignoreLimitWarning\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.ignoreLimitWarning%\",\n          \"default\": false\n        },\n        \"git.ignoreRebaseWarning\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.ignoreRebaseWarning%\",\n          \"default\": false\n        },\n        \"git.defaultCloneDirectory\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"default\": null,\n          \"scope\": \"machine\",\n          \"description\": \"%config.defaultCloneDirectory%\"\n        },\n        \"git.useEditorAsCommitInput\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.useEditorAsCommitInput%\",\n          \"default\": true\n        },\n        \"git.verboseCommit\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%config.verboseCommit%\",\n          \"default\": false\n        },\n        \"git.enableSmartCommit\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"description\": \"%config.enableSmartCommit%\",\n          \"default\": false\n        },\n        \"git.smartCommitChanges\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"all\",\n            \"tracked\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.smartCommitChanges.all%\",\n            \"%config.smartCommitChanges.tracked%\"\n          ],\n          \"scope\": \"resource\",\n          \"description\": \"%config.smartCommitChanges%\",\n          \"default\": \"all\"\n        },\n        \"git.suggestSmartCommit\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"description\": \"%config.suggestSmartCommit%\",\n          \"default\": true\n        },\n        \"git.enableCommitSigning\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"description\": \"%config.enableCommitSigning%\",\n          \"default\": false\n        },\n        \"git.confirmEmptyCommits\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"description\": \"%config.confirmEmptyCommits%\",\n          \"default\": true\n        },\n        \"git.decorations.enabled\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.decorations.enabled%\"\n        },\n        \"git.enableStatusBarSync\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.enableStatusBarSync%\",\n          \"scope\": \"resource\"\n        },\n        \"git.followTagsWhenSync\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.followTagsWhenSync%\"\n        },\n        \"git.replaceTagsWhenPull\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.replaceTagsWhenPull%\"\n        },\n        \"git.promptToSaveFilesBeforeStash\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"always\",\n            \"staged\",\n            \"never\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.promptToSaveFilesBeforeStash.always%\",\n            \"%config.promptToSaveFilesBeforeStash.staged%\",\n            \"%config.promptToSaveFilesBeforeStash.never%\"\n          ],\n          \"scope\": \"resource\",\n          \"default\": \"always\",\n          \"description\": \"%config.promptToSaveFilesBeforeStash%\"\n        },\n        \"git.promptToSaveFilesBeforeCommit\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"always\",\n            \"staged\",\n            \"never\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.promptToSaveFilesBeforeCommit.always%\",\n            \"%config.promptToSaveFilesBeforeCommit.staged%\",\n            \"%config.promptToSaveFilesBeforeCommit.never%\"\n          ],\n          \"scope\": \"resource\",\n          \"default\": \"always\",\n          \"description\": \"%config.promptToSaveFilesBeforeCommit%\"\n        },\n        \"git.postCommitCommand\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"none\",\n            \"push\",\n            \"sync\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.postCommitCommand.none%\",\n            \"%config.postCommitCommand.push%\",\n            \"%config.postCommitCommand.sync%\"\n          ],\n          \"markdownDescription\": \"%config.postCommitCommand%\",\n          \"scope\": \"resource\",\n          \"default\": \"none\"\n        },\n        \"git.rememberPostCommitCommand\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.rememberPostCommitCommand%\",\n          \"scope\": \"resource\",\n          \"default\": false\n        },\n        \"git.openAfterClone\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"always\",\n            \"alwaysNewWindow\",\n            \"whenNoFolderOpen\",\n            \"prompt\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.openAfterClone.always%\",\n            \"%config.openAfterClone.alwaysNewWindow%\",\n            \"%config.openAfterClone.whenNoFolderOpen%\",\n            \"%config.openAfterClone.prompt%\"\n          ],\n          \"default\": \"prompt\",\n          \"description\": \"%config.openAfterClone%\"\n        },\n        \"git.showInlineOpenFileAction\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.showInlineOpenFileAction%\"\n        },\n        \"git.showPushSuccessNotification\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.showPushSuccessNotification%\",\n          \"default\": false\n        },\n        \"git.inputValidation\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"%config.inputValidation%\"\n        },\n        \"git.inputValidationLength\": {\n          \"type\": \"number\",\n          \"default\": 72,\n          \"description\": \"%config.inputValidationLength%\"\n        },\n        \"git.inputValidationSubjectLength\": {\n          \"type\": [\n            \"number\",\n            \"null\"\n          ],\n          \"default\": 50,\n          \"markdownDescription\": \"%config.inputValidationSubjectLength%\"\n        },\n        \"git.detectSubmodules\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%config.detectSubmodules%\"\n        },\n        \"git.detectSubmodulesLimit\": {\n          \"type\": \"number\",\n          \"scope\": \"resource\",\n          \"default\": 10,\n          \"description\": \"%config.detectSubmodulesLimit%\"\n        },\n        \"git.alwaysShowStagedChangesResourceGroup\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.alwaysShowStagedChangesResourceGroup%\"\n        },\n        \"git.alwaysSignOff\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.alwaysSignOff%\"\n        },\n        \"git.ignoreSubmodules\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.ignoreSubmodules%\"\n        },\n        \"git.ignoredRepositories\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"default\": [],\n          \"scope\": \"window\",\n          \"description\": \"%config.ignoredRepositories%\"\n        },\n        \"git.scanRepositories\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"default\": [],\n          \"scope\": \"resource\",\n          \"description\": \"%config.scanRepositories%\"\n        },\n        \"git.showProgress\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.showProgress%\",\n          \"default\": true,\n          \"scope\": \"resource\"\n        },\n        \"git.rebaseWhenSync\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.rebaseWhenSync%\"\n        },\n        \"git.pullBeforeCheckout\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.pullBeforeCheckout%\"\n        },\n        \"git.fetchOnPull\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.fetchOnPull%\"\n        },\n        \"git.pruneOnFetch\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.pruneOnFetch%\"\n        },\n        \"git.pullTags\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%config.pullTags%\"\n        },\n        \"git.autoStash\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.autoStash%\"\n        },\n        \"git.allowForcePush\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"%config.allowForcePush%\"\n        },\n        \"git.useForcePushWithLease\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.useForcePushWithLease%\"\n        },\n        \"git.useForcePushIfIncludes\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"markdownDescription\": \"%config.useForcePushIfIncludes%\"\n        },\n        \"git.confirmForcePush\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.confirmForcePush%\"\n        },\n        \"git.allowNoVerifyCommit\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"%config.allowNoVerifyCommit%\"\n        },\n        \"git.confirmNoVerifyCommit\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.confirmNoVerifyCommit%\"\n        },\n        \"git.closeDiffOnOperation\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.closeDiffOnOperation%\"\n        },\n        \"git.openDiffOnClick\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%config.openDiffOnClick%\"\n        },\n        \"git.supportCancellation\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.supportCancellation%\"\n        },\n        \"git.branchSortOrder\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"committerdate\",\n            \"alphabetically\"\n          ],\n          \"default\": \"committerdate\",\n          \"description\": \"%config.branchSortOrder%\"\n        },\n        \"git.untrackedChanges\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"mixed\",\n            \"separate\",\n            \"hidden\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.untrackedChanges.mixed%\",\n            \"%config.untrackedChanges.separate%\",\n            \"%config.untrackedChanges.hidden%\"\n          ],\n          \"default\": \"mixed\",\n          \"description\": \"%config.untrackedChanges%\",\n          \"scope\": \"resource\"\n        },\n        \"git.requireGitUserConfig\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.requireGitUserConfig%\",\n          \"default\": true,\n          \"scope\": \"resource\"\n        },\n        \"git.showCommitInput\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%config.showCommitInput%\"\n        },\n        \"git.terminalAuthentication\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.terminalAuthentication%\"\n        },\n        \"git.terminalGitEditor\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"%config.terminalGitEditor%\"\n        },\n        \"git.useCommitInputAsStashMessage\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%config.useCommitInputAsStashMessage%\"\n        },\n        \"git.useIntegratedAskPass\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.useIntegratedAskPass%\"\n        },\n        \"git.githubAuthentication\": {\n          \"markdownDeprecationMessage\": \"This setting is now deprecated, please use `#github.gitAuthentication#` instead.\"\n        },\n        \"git.timeline.date\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"committed\",\n            \"authored\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.timeline.date.committed%\",\n            \"%config.timeline.date.authored%\"\n          ],\n          \"default\": \"committed\",\n          \"description\": \"%config.timeline.date%\",\n          \"scope\": \"window\"\n        },\n        \"git.timeline.showAuthor\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%config.timeline.showAuthor%\",\n          \"scope\": \"window\"\n        },\n        \"git.timeline.showUncommitted\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"%config.timeline.showUncommitted%\",\n          \"scope\": \"window\"\n        },\n        \"git.showActionButton\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"description\": \"%config.showActionButton%\",\n          \"properties\": {\n            \"commit\": {\n              \"type\": \"boolean\",\n              \"description\": \"%config.showActionButton.commit%\"\n            },\n            \"publish\": {\n              \"type\": \"boolean\",\n              \"description\": \"%config.showActionButton.publish%\"\n            },\n            \"sync\": {\n              \"type\": \"boolean\",\n              \"description\": \"%config.showActionButton.sync%\"\n            }\n          },\n          \"default\": {\n            \"commit\": true,\n            \"publish\": true,\n            \"sync\": true\n          },\n          \"scope\": \"resource\"\n        },\n        \"git.statusLimit\": {\n          \"type\": \"number\",\n          \"scope\": \"resource\",\n          \"default\": 10000,\n          \"description\": \"%config.statusLimit%\"\n        },\n        \"git.repositoryScanIgnoredFolders\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"default\": [\n            \"node_modules\"\n          ],\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%config.repositoryScanIgnoredFolders%\"\n        },\n        \"git.repositoryScanMaxDepth\": {\n          \"type\": \"number\",\n          \"scope\": \"resource\",\n          \"default\": 1,\n          \"markdownDescription\": \"%config.repositoryScanMaxDepth%\"\n        },\n        \"git.commandsToLog\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"default\": [],\n          \"markdownDescription\": \"%config.commandsToLog%\"\n        },\n        \"git.mergeEditor\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%config.mergeEditor%\",\n          \"scope\": \"window\"\n        },\n        \"git.optimisticUpdate\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"markdownDescription\": \"%config.optimisticUpdate%\",\n          \"scope\": \"resource\",\n          \"tags\": [\n            \"experimental\"\n          ]\n        },\n        \"git.openRepositoryInParentFolders\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"always\",\n            \"never\",\n            \"prompt\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.openRepositoryInParentFolders.always%\",\n            \"%config.openRepositoryInParentFolders.never%\",\n            \"%config.openRepositoryInParentFolders.prompt%\"\n          ],\n          \"default\": \"prompt\",\n          \"markdownDescription\": \"%config.openRepositoryInParentFolders%\",\n          \"scope\": \"resource\"\n        },\n        \"git.similarityThreshold\": {\n          \"type\": \"number\",\n          \"default\": 50,\n          \"minimum\": 0,\n          \"maximum\": 100,\n          \"markdownDescription\": \"%config.similarityThreshold%\",\n          \"scope\": \"resource\"\n        },\n        \"git.blame.editorDecoration.enabled\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%config.blameEditorDecoration.enabled%\"\n        },\n        \"git.blame.editorDecoration.template\": {\n          \"type\": \"string\",\n          \"default\": \"${subject}, ${authorName} (${authorDateAgo})\",\n          \"markdownDescription\": \"%config.blameEditorDecoration.template%\"\n        },\n        \"git.blame.statusBarItem.enabled\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"markdownDescription\": \"%config.blameStatusBarItem.enabled%\"\n        },\n        \"git.blame.statusBarItem.template\": {\n          \"type\": \"string\",\n          \"default\": \"${authorName} (${authorDateAgo})\",\n          \"markdownDescription\": \"%config.blameStatusBarItem.template%\"\n        },\n        \"git.commitShortHashLength\": {\n          \"type\": \"number\",\n          \"default\": 7,\n          \"minimum\": 7,\n          \"maximum\": 40,\n          \"markdownDescription\": \"%config.commitShortHashLength%\",\n          \"scope\": \"resource\"\n        },\n        \"git.diagnosticsCommitHook.Enabled\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%config.diagnosticsCommitHook.Enabled%\",\n          \"scope\": \"resource\"\n        },\n        \"git.diagnosticsCommitHook.Sources\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"error\",\n              \"warning\",\n              \"information\",\n              \"hint\",\n              \"none\"\n            ]\n          },\n          \"default\": {\n            \"*\": \"error\"\n          },\n          \"markdownDescription\": \"%config.diagnosticsCommitHook.Sources%\",\n          \"scope\": \"resource\"\n        },\n        \"git.discardUntrackedChangesToTrash\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"markdownDescription\": \"%config.discardUntrackedChangesToTrash%\"\n        },\n        \"git.showReferenceDetails\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"markdownDescription\": \"%config.showReferenceDetails%\"\n        }\n      }\n    },\n    \"colors\": [\n      {\n        \"id\": \"gitDecoration.addedResourceForeground\",\n        \"description\": \"%colors.added%\",\n        \"defaults\": {\n          \"light\": \"#587c0c\",\n          \"dark\": \"#81b88b\",\n          \"highContrast\": \"#a1e3ad\",\n          \"highContrastLight\": \"#374e06\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.modifiedResourceForeground\",\n        \"description\": \"%colors.modified%\",\n        \"defaults\": {\n          \"light\": \"#895503\",\n          \"dark\": \"#E2C08D\",\n          \"highContrast\": \"#E2C08D\",\n          \"highContrastLight\": \"#895503\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.deletedResourceForeground\",\n        \"description\": \"%colors.deleted%\",\n        \"defaults\": {\n          \"light\": \"#ad0707\",\n          \"dark\": \"#c74e39\",\n          \"highContrast\": \"#c74e39\",\n          \"highContrastLight\": \"#ad0707\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.renamedResourceForeground\",\n        \"description\": \"%colors.renamed%\",\n        \"defaults\": {\n          \"light\": \"#007100\",\n          \"dark\": \"#73C991\",\n          \"highContrast\": \"#73C991\",\n          \"highContrastLight\": \"#007100\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.untrackedResourceForeground\",\n        \"description\": \"%colors.untracked%\",\n        \"defaults\": {\n          \"light\": \"#007100\",\n          \"dark\": \"#73C991\",\n          \"highContrast\": \"#73C991\",\n          \"highContrastLight\": \"#007100\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.ignoredResourceForeground\",\n        \"description\": \"%colors.ignored%\",\n        \"defaults\": {\n          \"light\": \"#8E8E90\",\n          \"dark\": \"#8C8C8C\",\n          \"highContrast\": \"#A7A8A9\",\n          \"highContrastLight\": \"#8e8e90\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.stageModifiedResourceForeground\",\n        \"description\": \"%colors.stageModified%\",\n        \"defaults\": {\n          \"light\": \"#895503\",\n          \"dark\": \"#E2C08D\",\n          \"highContrast\": \"#E2C08D\",\n          \"highContrastLight\": \"#895503\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.stageDeletedResourceForeground\",\n        \"description\": \"%colors.stageDeleted%\",\n        \"defaults\": {\n          \"light\": \"#ad0707\",\n          \"dark\": \"#c74e39\",\n          \"highContrast\": \"#c74e39\",\n          \"highContrastLight\": \"#ad0707\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.conflictingResourceForeground\",\n        \"description\": \"%colors.conflict%\",\n        \"defaults\": {\n          \"light\": \"#ad0707\",\n          \"dark\": \"#e4676b\",\n          \"highContrast\": \"#c74e39\",\n          \"highContrastLight\": \"#ad0707\"\n        }\n      },\n      {\n        \"id\": \"gitDecoration.submoduleResourceForeground\",\n        \"description\": \"%colors.submodule%\",\n        \"defaults\": {\n          \"light\": \"#1258a7\",\n          \"dark\": \"#8db9e2\",\n          \"highContrast\": \"#8db9e2\",\n          \"highContrastLight\": \"#1258a7\"\n        }\n      },\n      {\n        \"id\": \"git.blame.editorDecorationForeground\",\n        \"description\": \"%colors.blameEditorDecoration%\",\n        \"defaults\": {\n          \"dark\": \"editorInlayHint.foreground\",\n          \"light\": \"editorInlayHint.foreground\",\n          \"highContrast\": \"editorInlayHint.foreground\",\n          \"highContrastLight\": \"editorInlayHint.foreground\"\n        }\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[git-commit]\": {\n        \"editor.rulers\": [\n          50,\n          72\n        ],\n        \"editor.wordWrap\": \"off\",\n        \"workbench.editor.restoreViewState\": false\n      },\n      \"[git-rebase]\": {\n        \"workbench.editor.restoreViewState\": false\n      }\n    },\n    \"viewsWelcome\": [\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.disabled%\",\n        \"when\": \"!config.git.enabled\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.missing%\",\n        \"when\": \"config.git.enabled && git.missing && remoteName != ''\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.missing.mac%\",\n        \"when\": \"config.git.enabled && git.missing && remoteName == '' && isMac\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.missing.windows%\",\n        \"when\": \"config.git.enabled && git.missing && remoteName == '' && isWindows\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.missing.linux%\",\n        \"when\": \"config.git.enabled && git.missing && remoteName == '' && isLinux\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.empty%\",\n        \"when\": \"config.git.enabled && !git.missing && workbenchState == empty && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0\",\n        \"enablement\": \"git.state == initialized\",\n        \"group\": \"2_open@1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.emptyWorkspace%\",\n        \"when\": \"config.git.enabled && !git.missing && workbenchState == workspace && workspaceFolderCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0\",\n        \"enablement\": \"git.state == initialized\",\n        \"group\": \"2_open@1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.scanFolderForRepositories%\",\n        \"when\": \"config.git.enabled && !git.missing && workbenchState == folder && workspaceFolderCount != 0 && git.state != initialized\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.scanWorkspaceForRepositories%\",\n        \"when\": \"config.git.enabled && !git.missing && workbenchState == workspace && workspaceFolderCount != 0 && git.state != initialized\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.folder%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && workbenchState == folder && scm.providerCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0 && remoteName != 'codespaces'\",\n        \"group\": \"5_scm@1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.workspace%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && workbenchState == workspace && workspaceFolderCount != 0 && scm.providerCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0 && remoteName != 'codespaces'\",\n        \"group\": \"5_scm@1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.repositoryInParentFolders%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && git.parentRepositoryCount == 1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.repositoriesInParentFolders%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && git.parentRepositoryCount > 1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.unsafeRepository%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && git.unsafeRepositoryCount == 1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.unsafeRepositories%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && git.unsafeRepositoryCount > 1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.closedRepository%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && git.closedRepositoryCount == 1\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%view.workbench.scm.closedRepositories%\",\n        \"when\": \"config.git.enabled && !git.missing && git.state == initialized && git.closedRepositoryCount > 1\"\n      },\n      {\n        \"view\": \"explorer\",\n        \"contents\": \"%view.workbench.cloneRepository%\",\n        \"when\": \"config.git.enabled && git.state == initialized && scm.providerCount == 0\",\n        \"group\": \"5_scm@1\"\n      },\n      {\n        \"view\": \"explorer\",\n        \"contents\": \"%view.workbench.learnMore%\",\n        \"when\": \"config.git.enabled && git.state == initialized && scm.providerCount == 0\",\n        \"group\": \"5_scm@10\"\n      }\n    ]\n  },\n  \"dependencies\": {\n    \"@joaomoreno/unique-names-generator\": \"^5.2.0\",\n    \"@vscode/extension-telemetry\": \"^0.9.8\",\n    \"byline\": \"^5.0.0\",\n    \"file-type\": \"16.5.4\",\n    \"picomatch\": \"2.3.1\",\n    \"vscode-uri\": \"^2.0.0\",\n    \"which\": \"4.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/byline\": \"4.2.31\",\n    \"@types/mocha\": \"^9.1.1\",\n    \"@types/node\": \"20.x\",\n    \"@types/picomatch\": \"2.3.0\",\n    \"@types/which\": \"3.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/git/package.nls.json",
    "content": "{\n\t\"displayName\": \"Git\",\n\t\"description\": \"Git SCM Integration\",\n\t\"command.continueInLocalClone\": \"Clone Repository Locally and Open on Desktop...\",\n\t\"command.continueInLocalClone.qualifiedName\": \"Continue Working in New Local Clone\",\n\t\"command.clone\": \"Clone\",\n\t\"command.cloneRecursive\": \"Clone (Recursive)\",\n\t\"command.init\": \"Initialize Repository\",\n\t\"command.openRepository\": \"Open Repository\",\n\t\"command.reopenClosedRepositories\": \"Reopen Closed Repositories...\",\n\t\"command.close\": \"Close Repository\",\n\t\"command.closeOtherRepositories\": \"Close Other Repositories\",\n\t\"command.refresh\": \"Refresh\",\n\t\"command.openChange\": \"Open Changes\",\n\t\"command.openAllChanges\": \"Open All Changes\",\n\t\"command.openFile\": \"Open File\",\n\t\"command.openHEADFile\": \"Open File (HEAD)\",\n\t\"command.stage\": \"Stage Changes\",\n\t\"command.stageAll\": \"Stage All Changes\",\n\t\"command.stageAllTracked\": \"Stage All Tracked Changes\",\n\t\"command.stageAllUntracked\": \"Stage All Untracked Changes\",\n\t\"command.stageAllMerge\": \"Stage All Merge Changes\",\n\t\"command.stageSelectedRanges\": \"Stage Selected Ranges\",\n\t\"command.revertSelectedRanges\": \"Revert Selected Ranges\",\n\t\"command.stageChange\": \"Stage Change\",\n\t\"command.stageSelection\": \"Stage Selection\",\n\t\"command.stageBlock\": \"Stage Block\",\n\t\"command.revertChange\": \"Revert Change\",\n\t\"command.unstage\": \"Unstage Changes\",\n\t\"command.unstageAll\": \"Unstage All Changes\",\n\t\"command.unstageSelectedRanges\": \"Unstage Selected Ranges\",\n\t\"command.rename\": \"Rename\",\n\t\"command.clean\": \"Discard Changes\",\n\t\"command.cleanAll\": \"Discard All Changes\",\n\t\"command.cleanAllTracked\": \"Discard All Tracked Changes\",\n\t\"command.cleanAllUntracked\": \"Discard All Untracked Changes\",\n\t\"command.closeAllDiffEditors\": \"Close All Diff Editors\",\n\t\"command.closeAllUnmodifiedEditors\": \"Close All Unmodified Editors\",\n\t\"command.commit\": \"Commit\",\n\t\"command.commitAmend\": \"Commit (Amend)\",\n\t\"command.commitSigned\": \"Commit (Signed Off)\",\n\t\"command.commitStaged\": \"Commit Staged\",\n\t\"command.commitEmpty\": \"Commit Empty\",\n\t\"command.commitStagedSigned\": \"Commit Staged (Signed Off)\",\n\t\"command.commitStagedAmend\": \"Commit Staged (Amend)\",\n\t\"command.commitAll\": \"Commit All\",\n\t\"command.commitAllSigned\": \"Commit All (Signed Off)\",\n\t\"command.commitAllAmend\": \"Commit All (Amend)\",\n\t\"command.commitNoVerify\": \"Commit (No Verify)\",\n\t\"command.commitStagedNoVerify\": \"Commit Staged (No Verify)\",\n\t\"command.commitEmptyNoVerify\": \"Commit Empty (No Verify)\",\n\t\"command.commitStagedSignedNoVerify\": \"Commit Staged (Signed Off, No Verify)\",\n\t\"command.commitAmendNoVerify\": \"Commit (Amend, No Verify)\",\n\t\"command.commitSignedNoVerify\": \"Commit (Signed Off, No Verify)\",\n\t\"command.commitStagedAmendNoVerify\": \"Commit Staged (Amend, No Verify)\",\n\t\"command.commitAllNoVerify\": \"Commit All (No Verify)\",\n\t\"command.commitAllSignedNoVerify\": \"Commit All (Signed Off, No Verify)\",\n\t\"command.commitAllAmendNoVerify\": \"Commit All (Amend, No Verify)\",\n\t\"command.commitMessageAccept\": \"Accept Commit Message\",\n\t\"command.commitMessageDiscard\": \"Discard Commit Message\",\n\t\"command.restoreCommitTemplate\": \"Restore Commit Template\",\n\t\"command.undoCommit\": \"Undo Last Commit\",\n\t\"command.checkout\": \"Checkout to...\",\n\t\"command.checkoutDetached\": \"Checkout to (Detached)...\",\n\t\"command.branch\": \"Create Branch...\",\n\t\"command.branchFrom\": \"Create Branch From...\",\n\t\"command.deleteBranch\": \"Delete Branch...\",\n\t\"command.deleteRemoteBranch\": \"Delete Remote Branch...\",\n\t\"command.renameBranch\": \"Rename Branch...\",\n\t\"command.cherryPick\": \"Cherry Pick...\",\n\t\"command.cherryPickAbort\": \"Abort Cherry Pick\",\n\t\"command.merge\": \"Merge...\",\n\t\"command.mergeAbort\": \"Abort Merge\",\n\t\"command.rebase\": \"Rebase Branch...\",\n\t\"command.createTag\": \"Create Tag...\",\n\t\"command.deleteTag\": \"Delete Tag...\",\n\t\"command.deleteRemoteTag\": \"Delete Remote Tag...\",\n\t\"command.fetch\": \"Fetch\",\n\t\"command.fetchPrune\": \"Fetch (Prune)\",\n\t\"command.fetchAll\": \"Fetch From All Remotes\",\n\t\"command.pull\": \"Pull\",\n\t\"command.pullRebase\": \"Pull (Rebase)\",\n\t\"command.pullFrom\": \"Pull from...\",\n\t\"command.push\": \"Push\",\n\t\"command.pushForce\": \"Push (Force)\",\n\t\"command.pushTo\": \"Push to...\",\n\t\"command.pushToForce\": \"Push to... (Force)\",\n\t\"command.pushFollowTags\": \"Push (Follow Tags)\",\n\t\"command.pushFollowTagsForce\": \"Push (Follow Tags, Force)\",\n\t\"command.pushTags\": \"Push Tags\",\n\t\"command.addRemote\": \"Add Remote...\",\n\t\"command.removeRemote\": \"Remove Remote\",\n\t\"command.sync\": \"Sync\",\n\t\"command.syncRebase\": \"Sync (Rebase)\",\n\t\"command.publish\": \"Publish Branch...\",\n\t\"command.showOutput\": \"Show Git Output\",\n\t\"command.ignore\": \"Add to .gitignore\",\n\t\"command.revealInExplorer\": \"Reveal in Explorer View\",\n\t\"command.revealFileInOS.linux\": \"Open Containing Folder\",\n\t\"command.revealFileInOS.mac\": \"Reveal in Finder\",\n\t\"command.revealFileInOS.windows\": \"Reveal in File Explorer\",\n\t\"command.rebaseAbort\": \"Abort Rebase\",\n\t\"command.stashIncludeUntracked\": \"Stash (Include Untracked)\",\n\t\"command.stash\": \"Stash\",\n\t\"command.stashStaged\": \"Stash Staged\",\n\t\"command.stashPop\": \"Pop Stash...\",\n\t\"command.stashPopLatest\": \"Pop Latest Stash\",\n\t\"command.stashPopEditor\": \"Pop Stash\",\n\t\"command.stashApply\": \"Apply Stash...\",\n\t\"command.stashApplyLatest\": \"Apply Latest Stash\",\n\t\"command.stashApplyEditor\": \"Apply Stash\",\n\t\"command.stashDrop\": \"Drop Stash...\",\n\t\"command.stashDropAll\": \"Drop All Stashes...\",\n\t\"command.stashDropEditor\": \"Drop Stash\",\n\t\"command.stashView\": \"View Stash...\",\n\t\"command.timelineOpenDiff\": \"Open Changes\",\n\t\"command.timelineCopyCommitId\": \"Copy Commit ID\",\n\t\"command.timelineCopyCommitMessage\": \"Copy Commit Message\",\n\t\"command.timelineSelectForCompare\": \"Select for Compare\",\n\t\"command.timelineCompareWithSelected\": \"Compare with Selected\",\n\t\"command.manageUnsafeRepositories\": \"Manage Unsafe Repositories\",\n\t\"command.openRepositoriesInParentFolders\": \"Open Repositories In Parent Folders\",\n\t\"command.viewChanges\": \"Open Changes\",\n\t\"command.viewStagedChanges\": \"Open Staged Changes\",\n\t\"command.viewUntrackedChanges\": \"Open Untracked Changes\",\n\t\"command.viewCommit\": \"Open Commit\",\n\t\"command.graphCheckout\": \"Checkout\",\n\t\"command.graphCheckoutDetached\": \"Checkout (Detached)\",\n\t\"command.graphCherryPick\": \"Cherry Pick\",\n\t\"command.graphDeleteBranch\": \"Delete Branch\",\n\t\"command.graphDeleteTag\": \"Delete Tag\",\n\t\"command.blameToggleEditorDecoration\": \"Toggle Git Blame Editor Decoration\",\n\t\"command.blameToggleStatusBarItem\": \"Toggle Git Blame Status Bar Item\",\n\t\"command.api.getRepositories\": \"Get Repositories\",\n\t\"command.api.getRepositoryState\": \"Get Repository State\",\n\t\"command.api.getRemoteSources\": \"Get Remote Sources\",\n\t\"command.git.acceptMerge\": \"Complete Merge\",\n\t\"command.git.openMergeEditor\": \"Resolve in Merge Editor\",\n\t\"command.git.runGitMerge\": \"Compute Conflicts With Git\",\n\t\"command.git.runGitMergeDiff3\": \"Compute Conflicts With Git (Diff3)\",\n\t\"config.enabled\": \"Whether Git is enabled.\",\n\t\"config.path\": \"Path and filename of the git executable, e.g. `C:\\\\Program Files\\\\Git\\\\bin\\\\git.exe` (Windows). This can also be an array of string values containing multiple paths to look up.\",\n\t\"config.autoRepositoryDetection\": \"Configures when repositories should be automatically detected.\",\n\t\"config.autoRepositoryDetection.true\": \"Scan for both subfolders of the current opened folder and parent folders of open files.\",\n\t\"config.autoRepositoryDetection.false\": \"Disable automatic repository scanning.\",\n\t\"config.autoRepositoryDetection.subFolders\": \"Scan for subfolders of the currently opened folder.\",\n\t\"config.autoRepositoryDetection.openEditors\": \"Scan for parent folders of open files.\",\n\t\"config.autorefresh\": \"Whether auto refreshing is enabled.\",\n\t\"config.autofetch\": \"When set to true, commits will automatically be fetched from the default remote of the current Git repository. Setting to `all` will fetch from all remotes.\",\n\t\"config.autofetchPeriod\": \"Duration in seconds between each automatic git fetch, when `#git.autofetch#` is enabled.\",\n\t\"config.confirmSync\": \"Confirm before synchronizing Git repositories.\",\n\t\"config.countBadge\": \"Controls the Git count badge.\",\n\t\"config.countBadge.all\": \"Count all changes.\",\n\t\"config.countBadge.tracked\": \"Count only tracked changes.\",\n\t\"config.countBadge.off\": \"Turn off counter.\",\n\t\"config.checkoutType\": \"Controls what type of Git refs are listed when running `Checkout to...`.\",\n\t\"config.checkoutType.local\": \"Local branches\",\n\t\"config.checkoutType.tags\": \"Tags\",\n\t\"config.checkoutType.remote\": \"Remote branches\",\n\t\"config.defaultBranchName\": \"The name of the default branch (example: main, trunk, development) when initializing a new Git repository. When set to empty, the default branch name configured in Git will be used. **Note:** Requires Git version `2.28.0` or later.\",\n\t\"config.branchPrefix\": \"Prefix used when creating a new branch.\",\n\t\"config.branchProtection\": \"List of protected branches. By default, a prompt is shown before changes are committed to a protected branch. The prompt can be controlled using the `#git.branchProtectionPrompt#`  setting.\",\n\t\"config.branchProtectionPrompt\": \"Controls whether a prompt is being shown before changes are committed to a protected branch.\",\n\t\"config.branchProtectionPrompt.alwaysCommit\": \"Always commit changes to the protected branch.\",\n\t\"config.branchProtectionPrompt.alwaysCommitToNewBranch\": \"Always commit changes to a new branch.\",\n\t\"config.branchProtectionPrompt.alwaysPrompt\": \"Always prompt before changes are committed to a protected branch.\",\n\t\"config.branchRandomNameDictionary\": \"List of dictionaries used for the randomly generated branch name. Each value represents the dictionary used to generate the segment of the branch name. Supported dictionaries: `adjectives`, `animals`, `colors` and `numbers`.\",\n\t\"config.branchRandomNameDictionary.adjectives\": \"A random adjective\",\n\t\"config.branchRandomNameDictionary.animals\": \"A random animal name\",\n\t\"config.branchRandomNameDictionary.colors\": \"A random color name\",\n\t\"config.branchRandomNameDictionary.numbers\": \"A random number between 100 and 999\",\n\t\"config.branchRandomNameEnable\": \"Controls whether a random name is generated when creating a new branch.\",\n\t\"config.branchValidationRegex\": \"A regular expression to validate new branch names.\",\n\t\"config.branchWhitespaceChar\": \"The character to replace whitespace in new branch names, and to separate segments of a randomly generated branch name.\",\n\t\"config.ignoreLegacyWarning\": \"Ignores the legacy Git warning.\",\n\t\"config.ignoreMissingGitWarning\": \"Ignores the warning when Git is missing.\",\n\t\"config.ignoreWindowsGit27Warning\": \"Ignores the warning when Git 2.25 - 2.26 is installed on Windows.\",\n\t\"config.ignoreLimitWarning\": \"Ignores the warning when there are too many changes in a repository.\",\n\t\"config.ignoreRebaseWarning\": \"Ignores the warning when it looks like the branch might have been rebased when pulling.\",\n\t\"config.defaultCloneDirectory\": \"The default location to clone a Git repository.\",\n\t\"config.useEditorAsCommitInput\": \"Controls whether a full text editor will be used to author commit messages, whenever no message is provided in the commit input box.\",\n\t\"config.verboseCommit\": \"Enable verbose output when `#git.useEditorAsCommitInput#` is enabled.\",\n\t\"config.enableSmartCommit\": \"Commit all changes when there are no staged changes.\",\n\t\"config.smartCommitChanges\": \"Control which changes are automatically staged by Smart Commit.\",\n\t\"config.smartCommitChanges.all\": \"Automatically stage all changes.\",\n\t\"config.smartCommitChanges.tracked\": \"Automatically stage tracked changes only.\",\n\t\"config.suggestSmartCommit\": \"Suggests to enable smart commit (commit all changes when there are no staged changes).\",\n\t\"config.enableCommitSigning\": \"Enables commit signing with GPG, X.509, or SSH.\",\n\t\"config.discardAllScope\": \"Controls what changes are discarded by the `Discard all changes` command. `all` discards all changes. `tracked` discards only tracked files. `prompt` shows a prompt dialog every time the action is run.\",\n\t\"config.decorations.enabled\": \"Controls whether Git contributes colors and badges to the Explorer and the Open Editors view.\",\n\t\"config.enableStatusBarSync\": \"Controls whether the Git Sync command appears in the status bar.\",\n\t\"config.followTagsWhenSync\": \"Push all annotated tags when running the sync command.\",\n\t\"config.replaceTagsWhenPull\": \"Automatically replace the local tags with the remote tags in case of a conflict when running the pull command.\",\n\t\"config.promptToSaveFilesBeforeStash\": \"Controls whether Git should check for unsaved files before stashing changes.\",\n\t\"config.promptToSaveFilesBeforeStash.always\": \"Check for any unsaved files.\",\n\t\"config.promptToSaveFilesBeforeStash.staged\": \"Check only for unsaved staged files.\",\n\t\"config.promptToSaveFilesBeforeStash.never\": \"Disable this check.\",\n\t\"config.promptToSaveFilesBeforeCommit\": \"Controls whether Git should check for unsaved files before committing.\",\n\t\"config.promptToSaveFilesBeforeCommit.always\": \"Check for any unsaved files.\",\n\t\"config.promptToSaveFilesBeforeCommit.staged\": \"Check only for unsaved staged files.\",\n\t\"config.promptToSaveFilesBeforeCommit.never\": \"Disable this check.\",\n\t\"config.postCommitCommand\": \"Run a git command after a successful commit.\",\n\t\"config.postCommitCommand.none\": \"Don't run any command after a commit.\",\n\t\"config.postCommitCommand.push\": \"Run 'git push' after a successful commit.\",\n\t\"config.postCommitCommand.sync\": \"Run 'git pull' and 'git push' after a successful commit.\",\n\t\"config.rememberPostCommitCommand\": \"Remember the last git command that ran after a commit.\",\n\t\"config.openAfterClone\": \"Controls whether to open a repository automatically after cloning.\",\n\t\"config.openAfterClone.always\": \"Always open in current window.\",\n\t\"config.openAfterClone.alwaysNewWindow\": \"Always open in a new window.\",\n\t\"config.openAfterClone.whenNoFolderOpen\": \"Only open in current window when no folder is opened.\",\n\t\"config.openAfterClone.prompt\": \"Always prompt for action.\",\n\t\"config.showInlineOpenFileAction\": \"Controls whether to show an inline Open File action in the Git changes view.\",\n\t\"config.showPushSuccessNotification\": \"Controls whether to show a notification when a push is successful.\",\n\t\"config.inputValidation\": \"Controls whether to show commit message input validation diagnostics.\",\n\t\"config.inputValidationLength\": \"Controls the commit message length threshold for showing a warning.\",\n\t\"config.inputValidationSubjectLength\": \"Controls the commit message subject length threshold for showing a warning. Unset it to inherit the value of `#git.inputValidationLength#`.\",\n\t\"config.detectSubmodules\": \"Controls whether to automatically detect Git submodules.\",\n\t\"config.detectSubmodulesLimit\": \"Controls the limit of Git submodules detected.\",\n\t\"config.alwaysShowStagedChangesResourceGroup\": \"Always show the Staged Changes resource group.\",\n\t\"config.alwaysSignOff\": \"Controls the signoff flag for all commits.\",\n\t\"config.ignoreSubmodules\": \"Ignore modifications to submodules in the file tree.\",\n\t\"config.ignoredRepositories\": \"List of Git repositories to ignore.\",\n\t\"config.scanRepositories\": \"List of paths to search for Git repositories in.\",\n\t\"config.commandsToLog\": {\n\t\t\"message\": \"List of git commands (ex: commit, push) that would have their `stdout` logged to the [git output](command:git.showOutput). If the git command has a client-side hook configured, the client-side hook's `stdout` will also be logged to the [git output](command:git.showOutput).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.showOutput'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"config.showProgress\": \"Controls whether Git actions should show progress.\",\n\t\"config.rebaseWhenSync\": \"Force Git to use rebase when running the sync command.\",\n\t\"config.confirmEmptyCommits\": \"Always confirm the creation of empty commits for the 'Git: Commit Empty' command.\",\n\t\"config.fetchOnPull\": \"When enabled, fetch all branches when pulling. Otherwise, fetch just the current one.\",\n\t\"config.pullBeforeCheckout\": \"Controls whether a branch that does not have outgoing commits is fast-forwarded before it is checked out.\",\n\t\"config.pullTags\": \"Fetch all tags when pulling.\",\n\t\"config.pruneOnFetch\": \"Prune when fetching.\",\n\t\"config.autoStash\": \"Stash any changes before pulling and restore them after successful pull.\",\n\t\"config.allowForcePush\": \"Controls whether force push (with or without lease) is enabled.\",\n\t\"config.useForcePushWithLease\": \"Controls whether force pushing uses the safer force-with-lease variant.\",\n\t\"config.useForcePushIfIncludes\": \"Controls whether force pushing uses the safer force-if-includes variant. Note: This setting requires the `#git.useForcePushWithLease#` setting to be enabled, and Git version `2.30.0` or later.\",\n\t\"config.confirmForcePush\": \"Controls whether to ask for confirmation before force-pushing.\",\n\t\"config.allowNoVerifyCommit\": \"Controls whether commits without running pre-commit and commit-msg hooks are allowed.\",\n\t\"config.confirmNoVerifyCommit\": \"Controls whether to ask for confirmation before committing without verification.\",\n\t\"config.closeDiffOnOperation\": \"Controls whether the diff editor should be automatically closed when changes are stashed, committed, discarded, staged, or unstaged.\",\n\t\"config.openDiffOnClick\": \"Controls whether the diff editor should be opened when clicking a change. Otherwise the regular editor will be opened.\",\n\t\"config.supportCancellation\": \"Controls whether a notification comes up when running the Sync action, which allows the user to cancel the operation.\",\n\t\"config.branchSortOrder\": \"Controls the sort order for branches.\",\n\t\"config.untrackedChanges\": \"Controls how untracked changes behave.\",\n\t\"config.untrackedChanges.mixed\": \"All changes, tracked and untracked, appear together and behave equally.\",\n\t\"config.untrackedChanges.separate\": \"Untracked changes appear separately in the Source Control view. They are also excluded from several actions.\",\n\t\"config.untrackedChanges.hidden\": \"Untracked changes are hidden and excluded from several actions.\",\n\t\"config.requireGitUserConfig\": \"Controls whether to require explicit Git user configuration or allow Git to guess if missing.\",\n\t\"config.showCommitInput\": \"Controls whether to show the commit input in the Git source control panel.\",\n\t\"config.terminalAuthentication\": \"Controls whether to enable VS Code to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.\",\n\t\"config.terminalGitEditor\": \"Controls whether to enable VS Code to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.\",\n\t\"config.timeline.showAuthor\": \"Controls whether to show the commit author in the Timeline view.\",\n\t\"config.timeline.showUncommitted\": \"Controls whether to show uncommitted changes in the Timeline view.\",\n\t\"config.timeline.date\": \"Controls which date to use for items in the Timeline view.\",\n\t\"config.timeline.date.committed\": \"Use the committed date\",\n\t\"config.timeline.date.authored\": \"Use the authored date\",\n\t\"config.useCommitInputAsStashMessage\": \"Controls whether to use the message from the commit input box as the default stash message.\",\n\t\"config.showActionButton\": \"Controls whether an action button is shown in the Source Control view.\",\n\t\"config.showActionButton.commit\": \"Show an action button to commit changes when the local branch has modified files ready to be committed.\",\n\t\"config.showActionButton.publish\": \"Show an action button to publish the local branch when it does not have a tracking remote branch.\",\n\t\"config.showActionButton.sync\": \"Show an action button to synchronize changes when the local branch is either ahead or behind the remote branch.\",\n\t\"config.statusLimit\": \"Controls how to limit the number of changes that can be parsed from Git status command. Can be set to 0 for no limit.\",\n\t\"config.experimental.installGuide\": \"Experimental improvements for the Git setup flow.\",\n\t\"config.repositoryScanIgnoredFolders\": \"List of folders that are ignored while scanning for Git repositories when `#git.autoRepositoryDetection#` is set to `true` or `subFolders`.\",\n\t\"config.repositoryScanMaxDepth\": \"Controls the depth used when scanning workspace folders for Git repositories when `#git.autoRepositoryDetection#` is set to `true` or `subFolders`. Can be set to `-1` for no limit.\",\n\t\"config.useIntegratedAskPass\": \"Controls whether GIT_ASKPASS should be overwritten to use the integrated version.\",\n\t\"config.mergeEditor\": \"Open the merge editor for files that are currently under conflict.\",\n\t\"config.optimisticUpdate\": \"Controls whether to optimistically update the state of the Source Control view after running git commands.\",\n\t\"config.openRepositoryInParentFolders\": \"Control whether a repository in parent folders of workspaces or open files should be opened.\",\n\t\"config.openRepositoryInParentFolders.always\": \"Always open a repository in parent folders of workspaces or open files.\",\n\t\"config.openRepositoryInParentFolders.never\": \"Never open a repository in parent folders of workspaces or open files.\",\n\t\"config.openRepositoryInParentFolders.prompt\": \"Prompt before opening a repository the parent folders of workspaces or open files.\",\n\t\"config.publishBeforeContinueOn\": \"Controls whether to publish unpublished Git state when using Continue Working On from a Git repository.\",\n\t\"config.publishBeforeContinueOn.always\": \"Always publish unpublished Git state when using Continue Working On from a Git repository\",\n\t\"config.publishBeforeContinueOn.never\": \"Never publish unpublished Git state when using Continue Working On from a Git repository\",\n\t\"config.publishBeforeContinueOn.prompt\": \"Prompt to publish unpublished Git state when using Continue Working On from a Git repository\",\n\t\"config.similarityThreshold\": \"Controls the threshold of the similarity index (the amount of additions/deletions compared to the file's size) for changes in a pair of added/deleted files to be considered a rename. **Note:** Requires Git version `2.18.0` or later.\",\n\t\"config.blameEditorDecoration.enabled\": \"Controls whether to show blame information in the editor using editor decorations.\",\n\t\"config.blameEditorDecoration.template\": \"Template for the blame information editor decoration. Supported variables:\\n\\n* `hash`: Commit hash\\n\\n* `hashShort`: First N characters of the commit hash according to `#git.commitShortHashLength#`\\n\\n* `subject`: First line of the commit message\\n\\n* `authorName`: Author name\\n\\n* `authorEmail`: Author email\\n\\n* `authorDate`: Author date\\n\\n* `authorDateAgo`: Time difference between now and the author date\\n\\n\",\n\t\"config.blameStatusBarItem.enabled\": \"Controls whether to show blame information in the status bar.\",\n\t\"config.blameStatusBarItem.template\": \"Template for the blame information status bar item. Supported variables:\\n\\n* `hash`: Commit hash\\n\\n* `hashShort`: First N characters of the commit hash according to `#git.commitShortHashLength#`\\n\\n* `subject`: First line of the commit message\\n\\n* `authorName`: Author name\\n\\n* `authorEmail`: Author email\\n\\n* `authorDate`: Author date\\n\\n* `authorDateAgo`: Time difference between now and the author date\\n\\n\",\n\t\"config.commitShortHashLength\": \"Controls the length of the commit short hash.\",\n\t\"config.diagnosticsCommitHook.Enabled\": \"Controls whether to check for unresolved diagnostics before committing.\",\n\t\"config.diagnosticsCommitHook.Sources\": \"Controls the list of sources (**Item**) and the minimum severity (**Value**) to be considered before committing. **Note:** To ignore diagnostics from a particular source, add the source to the list and set the minimum severity to `none`.\",\n\t\"config.discardUntrackedChangesToTrash\": \"Controls whether discarding untracked changes moves the file(s) to the Recycle Bin (Windows), Trash (macOS, Linux) instead of deleting them permanently. **Note:** This setting has no effect when connected to a remote or when running in Linux as a snap package.\",\n\t\"config.showReferenceDetails\": \"Controls whether to show the details of the last commit for Git refs in the checkout, branch, and tag pickers.\",\n\t\"submenu.explorer\": \"Git\",\n\t\"submenu.commit\": \"Commit\",\n\t\"submenu.commit.amend\": \"Amend\",\n\t\"submenu.commit.signoff\": \"Sign Off\",\n\t\"submenu.changes\": \"Changes\",\n\t\"submenu.pullpush\": \"Pull, Push\",\n\t\"submenu.branch\": \"Branch\",\n\t\"submenu.remotes\": \"Remote\",\n\t\"submenu.stash\": \"Stash\",\n\t\"submenu.tags\": \"Tags\",\n\t\"colors.added\": \"Color for added resources.\",\n\t\"colors.modified\": \"Color for modified resources.\",\n\t\"colors.stageModified\": \"Color for modified resources which have been staged.\",\n\t\"colors.stageDeleted\": \"Color for deleted resources which have been staged.\",\n\t\"colors.deleted\": \"Color for deleted resources.\",\n\t\"colors.renamed\": \"Color for renamed or copied resources.\",\n\t\"colors.untracked\": \"Color for untracked resources.\",\n\t\"colors.ignored\": \"Color for ignored resources.\",\n\t\"colors.conflict\": \"Color for resources with conflicts.\",\n\t\"colors.submodule\": \"Color for submodule resources.\",\n\t\"colors.incomingAdded\": \"Color for added incoming resource.\",\n\t\"colors.incomingDeleted\": \"Color for deleted incoming resource.\",\n\t\"colors.incomingRenamed\": \"Color for renamed incoming resource.\",\n\t\"colors.incomingModified\": \"Color for modified incoming resource.\",\n\t\"colors.blameEditorDecoration\": \"Color for the blame editor decoration.\",\n\t\"view.workbench.scm.missing.windows\": {\n\t\t\"message\": \"[Download Git for Windows](https://git-scm.com/download/win)\\nAfter installing, please [reload](command:workbench.action.reloadWindow) (or [troubleshoot](command:git.showOutput)). Additional source control providers can be installed [from the Marketplace](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:workbench.action.reloadWindow'}\",\n\t\t\t\"{Locked='](command:git.showOutput'}\",\n\t\t\t\"{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.missing.mac\": {\n\t\t\"message\": \"[Download Git for macOS](https://git-scm.com/download/mac)\\nAfter installing, please [reload](command:workbench.action.reloadWindow) (or [troubleshoot](command:git.showOutput)). Additional source control providers can be installed [from the Marketplace](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:workbench.action.reloadWindow'}\",\n\t\t\t\"{Locked='](command:git.showOutput'}\",\n\t\t\t\"{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.missing.linux\": {\n\t\t\"message\": \"Source control depends on Git being installed.\\n[Download Git for Linux](https://git-scm.com/download/linux)\\nAfter installing, please [reload](command:workbench.action.reloadWindow) (or [troubleshoot](command:git.showOutput)). Additional source control providers can be installed [from the Marketplace](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:workbench.action.reloadWindow'}\",\n\t\t\t\"{Locked='](command:git.showOutput'}\",\n\t\t\t\"{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.missing\": {\n\t\t\"message\": \"Install Git, a popular source control system, to track code changes and collaborate with others. Learn more in our [Git guides](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](https://aka.ms/vscode-scm'}\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.disabled\": {\n\t\t\"message\": \"If you would like to use Git features, please enable Git in your [settings](command:workbench.action.openSettings?%5B%22git.enabled%22%5D).\\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:workbench.action.openSettings?%5B%22git.enabled%22%5D'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.empty\": {\n\t\t\"message\": \"In order to use Git features, you can open a folder containing a Git repository or clone from a URL.\\n[Open Folder](command:vscode.openFolder)\\n[Clone Repository](command:git.cloneRecursive)\\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:vscode.openFolder'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.folder\": {\n\t\t\"message\": \"The folder currently open doesn't have a Git repository. You can initialize a repository which will enable source control features powered by Git.\\n[Initialize Repository](command:git.init?%5Btrue%5D)\\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.init?%5Btrue%5D'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.workspace\": {\n\t\t\"message\": \"The workspace currently open doesn't have any folders containing Git repositories. You can initialize a repository on a folder which will enable source control features powered by Git.\\n[Initialize Repository](command:git.init)\\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.init'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.emptyWorkspace\": {\n\t\t\"message\": \"The workspace currently open doesn't have any folders containing Git repositories.\\n[Add Folder to Workspace](command:workbench.action.addRootFolder)\\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:workbench.action.addRootFolder'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.scanFolderForRepositories\": {\n\t\t\"message\": \"Scanning folder for Git repositories...\"\n\t},\n\t\"view.workbench.scm.scanWorkspaceForRepositories\": {\n\t\t\"message\": \"Scanning workspace for Git repositories...\"\n\t},\n\t\"view.workbench.scm.repositoryInParentFolders\": {\n\t\t\"message\": \"A Git repository was found in the parent folders of the workspace or the open file(s).\\n[Open Repository](command:git.openRepositoriesInParentFolders)\\nUse the [git.openRepositoryInParentFolders](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D) setting to control whether Git repositories in parent folders of workspaces or open files are opened. To learn more [read our docs](https://aka.ms/vscode-git-repository-in-parent-folders).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.openRepositoriesInParentFolders'}\",\n\t\t\t\"{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.repositoriesInParentFolders\": {\n\t\t\"message\": \"Git repositories were found in the parent folders of the workspace or the open file(s).\\n[Open Repository](command:git.openRepositoriesInParentFolders)\\nUse the [git.openRepositoryInParentFolders](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D) setting to control whether Git repositories in parent folders of workspace or open files are opened. To learn more [read our docs](https://aka.ms/vscode-git-repository-in-parent-folders).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.openRepositoriesInParentFolders'}\",\n\t\t\t\"{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.unsafeRepository\": {\n\t\t\"message\": \"The detected Git repository is potentially unsafe as the folder is owned by someone other than the current user.\\n[Manage Unsafe Repositories](command:git.manageUnsafeRepositories)\\nTo learn more about unsafe repositories [read our docs](https://aka.ms/vscode-git-unsafe-repository).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.manageUnsafeRepositories'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.unsafeRepositories\": {\n\t\t\"message\": \"The detected Git repositories are potentially unsafe as the folders are owned by someone other than the current user.\\n[Manage Unsafe Repositories](command:git.manageUnsafeRepositories)\\nTo learn more about unsafe repositories [read our docs](https://aka.ms/vscode-git-unsafe-repository).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.manageUnsafeRepositories'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.closedRepository\": {\n\t\t\"message\": \"A Git repository was found that was previously closed.\\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.reopenClosedRepositories'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.scm.closedRepositories\": {\n\t\t\"message\": \"Git repositories were found that were previously closed.\\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.reopenClosedRepositories'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.cloneRepository\": {\n\t\t\"message\": \"You can clone a repository locally.\\n[Clone Repository](command:git.clone 'Clone a repository once the Git extension has activated')\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='](command:git.clone'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"view.workbench.learnMore\": \"To learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).\"\n}\n"
  },
  {
    "path": "extensions/git/resources/emojis.json",
    "content": "{\"100\":\"💯\",\"1234\":\"🔢\",\"+1\":\"👍\",\"-1\":\"👎\",\"1st_place_medal\":\"🥇\",\"2nd_place_medal\":\"🥈\",\"3rd_place_medal\":\"🥉\",\"8ball\":\"🎱\",\"a\":\"🅰\",\"ab\":\"🆎\",\"abacus\":\"🧮\",\"abc\":\"🔤\",\"abcd\":\"🔡\",\"accept\":\"🉑\",\"adhesive_bandage\":\"🩹\",\"adult\":\"🧑\",\"aerial_tramway\":\"🚡\",\"afghanistan\":\"🇦🇫\",\"airplane\":\"✈\",\"aland_islands\":\"🇦🇽\",\"alarm_clock\":\"⏰\",\"albania\":\"🇦🇱\",\"alembi\":\"⚗\",\"alembic\":\"⚗\",\"algeria\":\"🇩🇿\",\"alie\":\"👽\",\"alien\":\"👽\",\"ambulanc\":\"🚑\",\"ambulance\":\"🚑\",\"american_samoa\":\"🇦🇸\",\"amphora\":\"🏺\",\"anchor\":\"⚓\",\"andorra\":\"🇦🇩\",\"angel\":\"👼\",\"anger\":\"💢\",\"angola\":\"🇦🇴\",\"angry\":\"😠\",\"anguilla\":\"🇦🇮\",\"anguished\":\"😧\",\"ant\":\"🐜\",\"antarctica\":\"🇦🇶\",\"antigua_barbuda\":\"🇦🇬\",\"apple\":\"🍎\",\"aquarius\":\"♒\",\"ar\":\"🎨\",\"argentina\":\"🇦🇷\",\"aries\":\"♈\",\"armenia\":\"🇦🇲\",\"arrow_backward\":\"◀\",\"arrow_double_down\":\"⏬\",\"arrow_double_up\":\"⏫\",\"arrow_dow\":\"⬇️\",\"arrow_down\":\"⬇\",\"arrow_down_small\":\"🔽\",\"arrow_forward\":\"▶\",\"arrow_heading_down\":\"⤵\",\"arrow_heading_up\":\"⤴\",\"arrow_left\":\"⬅\",\"arrow_lower_left\":\"↙\",\"arrow_lower_right\":\"↘\",\"arrow_right\":\"➡\",\"arrow_right_hook\":\"↪\",\"arrow_u\":\"⬆️\",\"arrow_up\":\"⬆\",\"arrow_up_down\":\"↕\",\"arrow_up_small\":\"🔼\",\"arrow_upper_left\":\"↖\",\"arrow_upper_right\":\"↗\",\"arrows_clockwise\":\"🔃\",\"arrows_counterclockwise\":\"🔄\",\"art\":\"🎨\",\"articulated_lorry\":\"🚛\",\"artificial_satellite\":\"🛰\",\"artist\":\"🧑‍🎨\",\"aruba\":\"🇦🇼\",\"ascension_island\":\"🇦🇨\",\"asterisk\":\"*️⃣\",\"astonished\":\"😲\",\"astronaut\":\"🧑‍🚀\",\"athletic_shoe\":\"👟\",\"atm\":\"🏧\",\"atom_symbol\":\"⚛\",\"australia\":\"🇦🇺\",\"austria\":\"🇦🇹\",\"auto_rickshaw\":\"🛺\",\"avocado\":\"🥑\",\"axe\":\"🪓\",\"azerbaijan\":\"🇦🇿\",\"b\":\"🅱\",\"baby\":\"👶\",\"baby_bottle\":\"🍼\",\"baby_chick\":\"🐤\",\"baby_symbol\":\"🚼\",\"back\":\"🔙\",\"bacon\":\"🥓\",\"badger\":\"🦡\",\"badminton\":\"🏸\",\"bagel\":\"🥯\",\"baggage_claim\":\"🛄\",\"baguette_bread\":\"🥖\",\"bahamas\":\"🇧🇸\",\"bahrain\":\"🇧🇭\",\"balance_scale\":\"⚖\",\"bald_man\":\"👨‍🦲\",\"bald_woman\":\"👩‍🦲\",\"ballet_shoes\":\"🩰\",\"balloon\":\"🎈\",\"ballot_box\":\"🗳\",\"ballot_box_with_check\":\"☑\",\"bamboo\":\"🎍\",\"banana\":\"🍌\",\"bangbang\":\"‼\",\"bangladesh\":\"🇧🇩\",\"banjo\":\"🪕\",\"bank\":\"🏦\",\"bar_chart\":\"📊\",\"barbados\":\"🇧🇧\",\"barber\":\"💈\",\"baseball\":\"⚾\",\"basket\":\"🧺\",\"basketball\":\"🏀\",\"basketball_man\":\"⛹️‍♂️\",\"basketball_woman\":\"⛹️‍♀️\",\"bat\":\"🦇\",\"bath\":\"🛀\",\"bathtub\":\"🛁\",\"battery\":\"🔋\",\"beach_umbrella\":\"🏖\",\"bear\":\"🐻\",\"bearded_person\":\"🧔\",\"bed\":\"🛏\",\"bee\":\"🐝\",\"beer\":\"🍺\",\"beers\":\"🍻\",\"beetle\":\"🐞\",\"beginner\":\"🔰\",\"belarus\":\"🇧🇾\",\"belgium\":\"🇧🇪\",\"belize\":\"🇧🇿\",\"bell\":\"🔔\",\"bellhop_bell\":\"🛎\",\"benin\":\"🇧🇯\",\"bent\":\"🍱\",\"bento\":\"🍱\",\"bermuda\":\"🇧🇲\",\"beverage_box\":\"🧃\",\"bhutan\":\"🇧🇹\",\"bicyclist\":\"🚴\",\"bike\":\"🚲\",\"biking_man\":\"🚴‍♂️\",\"biking_woman\":\"🚴‍♀️\",\"bikini\":\"👙\",\"billed_cap\":\"🧢\",\"biohazard\":\"☣\",\"bird\":\"🐦\",\"birthday\":\"🎂\",\"black_circle\":\"⚫\",\"black_flag\":\"🏴\",\"black_heart\":\"🖤\",\"black_joker\":\"🃏\",\"black_large_square\":\"⬛\",\"black_medium_small_square\":\"◾\",\"black_medium_square\":\"◼\",\"black_nib\":\"✒\",\"black_small_square\":\"▪\",\"black_square_button\":\"🔲\",\"blond_haired_man\":\"👱‍♂️\",\"blond_haired_person\":\"👱\",\"blond_haired_woman\":\"👱‍♀️\",\"blonde_woman\":\"👱‍♀️\",\"blossom\":\"🌼\",\"blowfish\":\"🐡\",\"blue_book\":\"📘\",\"blue_car\":\"🚙\",\"blue_heart\":\"💙\",\"blue_square\":\"🟦\",\"blush\":\"😊\",\"boar\":\"🐗\",\"boat\":\"⛵\",\"bolivia\":\"🇧🇴\",\"bomb\":\"💣\",\"bone\":\"🦴\",\"boo\":\"💥\",\"book\":\"📖\",\"bookmar\":\"🔖\",\"bookmark\":\"🔖\",\"bookmark_tabs\":\"📑\",\"books\":\"📚\",\"boom\":\"💥\",\"boot\":\"👢\",\"bosnia_herzegovina\":\"🇧🇦\",\"botswana\":\"🇧🇼\",\"bouncing_ball_man\":\"⛹️‍♂️\",\"bouncing_ball_person\":\"⛹\",\"bouncing_ball_woman\":\"⛹️‍♀️\",\"bouquet\":\"💐\",\"bouvet_island\":\"🇧🇻\",\"bow\":\"🙇\",\"bow_and_arrow\":\"🏹\",\"bowing_man\":\"🙇‍♂️\",\"bowing_woman\":\"🙇‍♀️\",\"bowl_with_spoon\":\"🥣\",\"bowling\":\"🎳\",\"boxing_glove\":\"🥊\",\"boy\":\"👦\",\"brain\":\"🧠\",\"brazil\":\"🇧🇷\",\"bread\":\"🍞\",\"breast_feeding\":\"🤱\",\"bricks\":\"🧱\",\"bride_with_veil\":\"👰\",\"bridge_at_night\":\"🌉\",\"briefcase\":\"💼\",\"british_indian_ocean_territory\":\"🇮🇴\",\"british_virgin_islands\":\"🇻🇬\",\"broccoli\":\"🥦\",\"broken_heart\":\"💔\",\"broom\":\"🧹\",\"brown_circle\":\"🟤\",\"brown_heart\":\"🤎\",\"brown_square\":\"🟫\",\"brunei\":\"🇧🇳\",\"bu\":\"🐛\",\"bug\":\"🐛\",\"building_constructio\":\"🏗\",\"building_construction\":\"🏗\",\"bul\":\"💡\",\"bulb\":\"💡\",\"bulgaria\":\"🇧🇬\",\"bullettrain_front\":\"🚅\",\"bullettrain_side\":\"🚄\",\"burkina_faso\":\"🇧🇫\",\"burrito\":\"🌯\",\"burundi\":\"🇧🇮\",\"bus\":\"🚌\",\"business_suit_levitating\":\"🕴\",\"busstop\":\"🚏\",\"bust_in_silhouette\":\"👤\",\"busts_in_silhouett\":\"👥\",\"busts_in_silhouette\":\"👥\",\"butter\":\"🧈\",\"butterfly\":\"🦋\",\"cactus\":\"🌵\",\"cake\":\"🍰\",\"calendar\":\"📆\",\"call_me_hand\":\"🤙\",\"calling\":\"📲\",\"cambodia\":\"🇰🇭\",\"camel\":\"🐫\",\"camera\":\"📷\",\"camera_flas\":\"📸\",\"camera_flash\":\"📸\",\"cameroon\":\"🇨🇲\",\"camping\":\"🏕\",\"canada\":\"🇨🇦\",\"canary_islands\":\"🇮🇨\",\"cancer\":\"♋\",\"candle\":\"🕯\",\"candy\":\"🍬\",\"canned_food\":\"🥫\",\"canoe\":\"🛶\",\"cape_verde\":\"🇨🇻\",\"capital_abcd\":\"🔠\",\"capricorn\":\"♑\",\"car\":\"🚗\",\"card_file_bo\":\"🗃\",\"card_file_box\":\"🗃\",\"card_index\":\"📇\",\"card_index_dividers\":\"🗂\",\"caribbean_netherlands\":\"🇧🇶\",\"carousel_horse\":\"🎠\",\"carrot\":\"🥕\",\"cartwheeling\":\"🤸\",\"cat\":\"🐱\",\"cat2\":\"🐈\",\"cayman_islands\":\"🇰🇾\",\"cd\":\"💿\",\"central_african_republic\":\"🇨🇫\",\"ceuta_melilla\":\"🇪🇦\",\"chad\":\"🇹🇩\",\"chains\":\"⛓\",\"chair\":\"🪑\",\"champagne\":\"🍾\",\"chart\":\"💹\",\"chart_with_downwards_trend\":\"📉\",\"chart_with_upwards_tren\":\"📈\",\"chart_with_upwards_trend\":\"📈\",\"checkered_flag\":\"🏁\",\"cheese\":\"🧀\",\"cherries\":\"🍒\",\"cherry_blossom\":\"🌸\",\"chess_pawn\":\"♟\",\"chestnut\":\"🌰\",\"chicken\":\"🐔\",\"child\":\"🧒\",\"children_crossin\":\"🚸\",\"children_crossing\":\"🚸\",\"chile\":\"🇨🇱\",\"chipmunk\":\"🐿\",\"chocolate_bar\":\"🍫\",\"chopsticks\":\"🥢\",\"christmas_island\":\"🇨🇽\",\"christmas_tree\":\"🎄\",\"church\":\"⛪\",\"cinema\":\"🎦\",\"circus_tent\":\"🎪\",\"city_sunrise\":\"🌇\",\"city_sunset\":\"🌆\",\"cityscape\":\"🏙\",\"cl\":\"🆑\",\"clamp\":\"🗜\",\"clap\":\"👏\",\"clapper\":\"🎬\",\"classical_building\":\"🏛\",\"climbing\":\"🧗\",\"climbing_man\":\"🧗‍♂️\",\"climbing_woman\":\"🧗‍♀️\",\"clinking_glasses\":\"🥂\",\"clipboard\":\"📋\",\"clipperton_island\":\"🇨🇵\",\"clock1\":\"🕐\",\"clock10\":\"🕙\",\"clock1030\":\"🕥\",\"clock11\":\"🕚\",\"clock1130\":\"🕦\",\"clock12\":\"🕛\",\"clock1230\":\"🕧\",\"clock130\":\"🕜\",\"clock2\":\"🕑\",\"clock230\":\"🕝\",\"clock3\":\"🕒\",\"clock330\":\"🕞\",\"clock4\":\"🕓\",\"clock430\":\"🕟\",\"clock5\":\"🕔\",\"clock530\":\"🕠\",\"clock6\":\"🕕\",\"clock630\":\"🕡\",\"clock7\":\"🕖\",\"clock730\":\"🕢\",\"clock8\":\"🕗\",\"clock830\":\"🕣\",\"clock9\":\"🕘\",\"clock930\":\"🕤\",\"closed_book\":\"📕\",\"closed_lock_with_key\":\"🔐\",\"closed_umbrella\":\"🌂\",\"cloud\":\"☁\",\"cloud_with_lightning\":\"🌩\",\"cloud_with_lightning_and_rain\":\"⛈\",\"cloud_with_rain\":\"🌧\",\"cloud_with_snow\":\"🌨\",\"clown_fac\":\"🤡\",\"clown_face\":\"🤡\",\"clubs\":\"♣\",\"cn\":\"🇨🇳\",\"coat\":\"🧥\",\"cocktail\":\"🍸\",\"coconut\":\"🥥\",\"cocos_islands\":\"🇨🇨\",\"coffee\":\"☕\",\"coffin\":\"⚰\",\"cold_face\":\"🥶\",\"cold_sweat\":\"😰\",\"collision\":\"💥\",\"colombia\":\"🇨🇴\",\"comet\":\"☄\",\"comoros\":\"🇰🇲\",\"compass\":\"🧭\",\"computer\":\"💻\",\"computer_mouse\":\"🖱\",\"confetti_ball\":\"🎊\",\"confounded\":\"😖\",\"confused\":\"😕\",\"congo_brazzaville\":\"🇨🇬\",\"congo_kinshasa\":\"🇨🇩\",\"congratulations\":\"㊗\",\"constructio\":\"🚧\",\"construction\":\"🚧\",\"construction_worke\":\"👷\",\"construction_worker\":\"👷\",\"construction_worker_man\":\"👷‍♂️\",\"construction_worker_woman\":\"👷‍♀️\",\"control_knobs\":\"🎛\",\"convenience_store\":\"🏪\",\"cook\":\"🧑‍🍳\",\"cook_islands\":\"🇨🇰\",\"cookie\":\"🍪\",\"cool\":\"🆒\",\"cop\":\"👮\",\"copyright\":\"©\",\"corn\":\"🌽\",\"costa_rica\":\"🇨🇷\",\"cote_divoire\":\"🇨🇮\",\"couch_and_lamp\":\"🛋\",\"couple\":\"👫\",\"couple_with_heart\":\"💑\",\"couple_with_heart_man_man\":\"👨‍❤️‍👨\",\"couple_with_heart_woman_man\":\"👩‍❤️‍👨\",\"couple_with_heart_woman_woman\":\"👩‍❤️‍👩\",\"couplekiss\":\"💏\",\"couplekiss_man_man\":\"👨‍❤️‍💋‍👨\",\"couplekiss_man_woman\":\"👩‍❤️‍💋‍👨\",\"couplekiss_woman_woman\":\"👩‍❤️‍💋‍👩\",\"cow\":\"🐮\",\"cow2\":\"🐄\",\"cowboy_hat_face\":\"🤠\",\"crab\":\"🦀\",\"crayon\":\"🖍\",\"credit_card\":\"💳\",\"crescent_moon\":\"🌙\",\"cricket\":\"🦗\",\"cricket_game\":\"🏏\",\"croatia\":\"🇭🇷\",\"crocodile\":\"🐊\",\"croissant\":\"🥐\",\"crossed_fingers\":\"🤞\",\"crossed_flags\":\"🎌\",\"crossed_swords\":\"⚔\",\"crown\":\"👑\",\"cry\":\"😢\",\"crying_cat_face\":\"😿\",\"crystal_ball\":\"🔮\",\"cuba\":\"🇨🇺\",\"cucumber\":\"🥒\",\"cup_with_straw\":\"🥤\",\"cupcake\":\"🧁\",\"cupid\":\"💘\",\"curacao\":\"🇨🇼\",\"curling_stone\":\"🥌\",\"curly_haired_man\":\"👨‍🦱\",\"curly_haired_woman\":\"👩‍🦱\",\"curly_loop\":\"➰\",\"currency_exchange\":\"💱\",\"curry\":\"🍛\",\"cursing_face\":\"🤬\",\"custard\":\"🍮\",\"customs\":\"🛃\",\"cut_of_meat\":\"🥩\",\"cyclone\":\"🌀\",\"cyprus\":\"🇨🇾\",\"czech_republic\":\"🇨🇿\",\"dagger\":\"🗡\",\"dancer\":\"💃\",\"dancers\":\"👯\",\"dancing_men\":\"👯‍♂️\",\"dancing_women\":\"👯‍♀️\",\"dango\":\"🍡\",\"dark_sunglasses\":\"🕶\",\"dart\":\"🎯\",\"dash\":\"💨\",\"date\":\"📅\",\"de\":\"🇩🇪\",\"deaf_man\":\"🧏‍♂️\",\"deaf_person\":\"🧏\",\"deaf_woman\":\"🧏‍♀️\",\"deciduous_tree\":\"🌳\",\"deer\":\"🦌\",\"denmark\":\"🇩🇰\",\"department_store\":\"🏬\",\"derelict_house\":\"🏚\",\"desert\":\"🏜\",\"desert_island\":\"🏝\",\"desktop_computer\":\"🖥\",\"detective\":\"🕵\",\"diamond_shape_with_a_dot_inside\":\"💠\",\"diamonds\":\"♦\",\"diego_garcia\":\"🇩🇬\",\"disappointed\":\"😞\",\"disappointed_relieved\":\"😥\",\"diving_mask\":\"🤿\",\"diya_lamp\":\"🪔\",\"dizz\":\"💫\",\"dizzy\":\"💫\",\"dizzy_face\":\"😵\",\"djibouti\":\"🇩🇯\",\"dna\":\"🧬\",\"do_not_litter\":\"🚯\",\"dog\":\"🐶\",\"dog2\":\"🐕\",\"dollar\":\"💵\",\"dolls\":\"🎎\",\"dolphin\":\"🐬\",\"dominica\":\"🇩🇲\",\"dominican_republic\":\"🇩🇴\",\"door\":\"🚪\",\"doughnut\":\"🍩\",\"dove\":\"🕊\",\"dragon\":\"🐉\",\"dragon_face\":\"🐲\",\"dress\":\"👗\",\"dromedary_camel\":\"🐪\",\"drooling_face\":\"🤤\",\"drop_of_blood\":\"🩸\",\"droplet\":\"💧\",\"drum\":\"🥁\",\"duck\":\"🦆\",\"dumpling\":\"🥟\",\"dvd\":\"📀\",\"e-mail\":\"📧\",\"eagle\":\"🦅\",\"ear\":\"👂\",\"ear_of_rice\":\"🌾\",\"ear_with_hearing_aid\":\"🦻\",\"earth_africa\":\"🌍\",\"earth_americas\":\"🌎\",\"earth_asia\":\"🌏\",\"ecuador\":\"🇪🇨\",\"eg\":\"🥚\",\"egg\":\"🥚\",\"eggplant\":\"🍆\",\"egypt\":\"🇪🇬\",\"eight\":\"8️⃣\",\"eight_pointed_black_star\":\"✴\",\"eight_spoked_asterisk\":\"✳\",\"eject_button\":\"⏏\",\"el_salvador\":\"🇸🇻\",\"electric_plug\":\"🔌\",\"elephant\":\"🐘\",\"elf\":\"🧝\",\"elf_man\":\"🧝‍♂️\",\"elf_woman\":\"🧝‍♀️\",\"email\":\"✉\",\"end\":\"🔚\",\"england\":\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\"envelope\":\"✉\",\"envelope_with_arrow\":\"📩\",\"equatorial_guinea\":\"🇬🇶\",\"eritrea\":\"🇪🇷\",\"es\":\"🇪🇸\",\"estonia\":\"🇪🇪\",\"ethiopia\":\"🇪🇹\",\"eu\":\"🇪🇺\",\"euro\":\"💶\",\"european_castle\":\"🏰\",\"european_post_office\":\"🏤\",\"european_union\":\"🇪🇺\",\"evergreen_tree\":\"🌲\",\"exclamation\":\"❗\",\"exploding_head\":\"🤯\",\"expressionless\":\"😑\",\"eye\":\"👁\",\"eye_speech_bubble\":\"👁️‍🗨️\",\"eyeglasses\":\"👓\",\"eyes\":\"👀\",\"face_with_head_bandage\":\"🤕\",\"face_with_thermometer\":\"🤒\",\"facepalm\":\"🤦\",\"facepunch\":\"👊\",\"factory\":\"🏭\",\"factory_worker\":\"🧑‍🏭\",\"fairy\":\"🧚\",\"fairy_man\":\"🧚‍♂️\",\"fairy_woman\":\"🧚‍♀️\",\"falafel\":\"🧆\",\"falkland_islands\":\"🇫🇰\",\"fallen_leaf\":\"🍂\",\"family\":\"👪\",\"family_man_boy\":\"👨‍👦\",\"family_man_boy_boy\":\"👨‍👦‍👦\",\"family_man_girl\":\"👨‍👧\",\"family_man_girl_boy\":\"👨‍👧‍👦\",\"family_man_girl_girl\":\"👨‍👧‍👧\",\"family_man_man_boy\":\"👨‍👨‍👦\",\"family_man_man_boy_boy\":\"👨‍👨‍👦‍👦\",\"family_man_man_girl\":\"👨‍👨‍👧\",\"family_man_man_girl_boy\":\"👨‍👨‍👧‍👦\",\"family_man_man_girl_girl\":\"👨‍👨‍👧‍👧\",\"family_man_woman_boy\":\"👨‍👩‍👦\",\"family_man_woman_boy_boy\":\"👨‍👩‍👦‍👦\",\"family_man_woman_girl\":\"👨‍👩‍👧\",\"family_man_woman_girl_boy\":\"👨‍👩‍👧‍👦\",\"family_man_woman_girl_girl\":\"👨‍👩‍👧‍👧\",\"family_woman_boy\":\"👩‍👦\",\"family_woman_boy_boy\":\"👩‍👦‍👦\",\"family_woman_girl\":\"👩‍👧\",\"family_woman_girl_boy\":\"👩‍👧‍👦\",\"family_woman_girl_girl\":\"👩‍👧‍👧\",\"family_woman_woman_boy\":\"👩‍👩‍👦\",\"family_woman_woman_boy_boy\":\"👩‍👩‍👦‍👦\",\"family_woman_woman_girl\":\"👩‍👩‍👧\",\"family_woman_woman_girl_boy\":\"👩‍👩‍👧‍👦\",\"family_woman_woman_girl_girl\":\"👩‍👩‍👧‍👧\",\"farmer\":\"🧑‍🌾\",\"faroe_islands\":\"🇫🇴\",\"fast_forward\":\"⏩\",\"fax\":\"📠\",\"fearful\":\"😨\",\"feet\":\"🐾\",\"female_detective\":\"🕵️‍♀️\",\"female_sign\":\"♀\",\"ferris_wheel\":\"🎡\",\"ferry\":\"⛴\",\"field_hockey\":\"🏑\",\"fiji\":\"🇫🇯\",\"file_cabinet\":\"🗄\",\"file_folder\":\"📁\",\"film_projector\":\"📽\",\"film_strip\":\"🎞\",\"finland\":\"🇫🇮\",\"fir\":\"🔥\",\"fire\":\"🔥\",\"fire_engine\":\"🚒\",\"fire_extinguisher\":\"🧯\",\"firecracker\":\"🧨\",\"firefighter\":\"🧑‍🚒\",\"fireworks\":\"🎆\",\"first_quarter_moon\":\"🌓\",\"first_quarter_moon_with_face\":\"🌛\",\"fish\":\"🐟\",\"fish_cake\":\"🍥\",\"fishing_pole_and_fish\":\"🎣\",\"fist\":\"✊\",\"fist_left\":\"🤛\",\"fist_oncoming\":\"👊\",\"fist_raised\":\"✊\",\"fist_right\":\"🤜\",\"five\":\"5️⃣\",\"flags\":\"🎏\",\"flamingo\":\"🦩\",\"flashlight\":\"🔦\",\"flat_shoe\":\"🥿\",\"fleur_de_lis\":\"⚜\",\"flight_arrival\":\"🛬\",\"flight_departure\":\"🛫\",\"flipper\":\"🐬\",\"floppy_disk\":\"💾\",\"flower_playing_cards\":\"🎴\",\"flushed\":\"😳\",\"flying_disc\":\"🥏\",\"flying_saucer\":\"🛸\",\"fog\":\"🌫\",\"foggy\":\"🌁\",\"foot\":\"🦶\",\"football\":\"🏈\",\"footprints\":\"👣\",\"fork_and_knife\":\"🍴\",\"fortune_cookie\":\"🥠\",\"fountain\":\"⛲\",\"fountain_pen\":\"🖋\",\"four\":\"4️⃣\",\"four_leaf_clover\":\"🍀\",\"fox_face\":\"🦊\",\"fr\":\"🇫🇷\",\"framed_picture\":\"🖼\",\"free\":\"🆓\",\"french_guiana\":\"🇬🇫\",\"french_polynesia\":\"🇵🇫\",\"french_southern_territories\":\"🇹🇫\",\"fried_egg\":\"🍳\",\"fried_shrimp\":\"🍤\",\"fries\":\"🍟\",\"frog\":\"🐸\",\"frowning\":\"😦\",\"frowning_face\":\"☹\",\"frowning_man\":\"🙍‍♂️\",\"frowning_person\":\"🙍\",\"frowning_woman\":\"🙍‍♀️\",\"fu\":\"🖕\",\"fuelpump\":\"⛽\",\"full_moon\":\"🌕\",\"full_moon_with_face\":\"🌝\",\"funeral_urn\":\"⚱\",\"gabon\":\"🇬🇦\",\"gambia\":\"🇬🇲\",\"game_die\":\"🎲\",\"garlic\":\"🧄\",\"gb\":\"🇬🇧\",\"gear\":\"⚙\",\"gem\":\"💎\",\"gemini\":\"♊\",\"genie\":\"🧞\",\"genie_man\":\"🧞‍♂️\",\"genie_woman\":\"🧞‍♀️\",\"georgia\":\"🇬🇪\",\"ghana\":\"🇬🇭\",\"ghost\":\"👻\",\"gibraltar\":\"🇬🇮\",\"gift\":\"🎁\",\"gift_heart\":\"💝\",\"giraffe\":\"🦒\",\"girl\":\"👧\",\"globe_with_meridian\":\"🌐\",\"globe_with_meridians\":\"🌐\",\"gloves\":\"🧤\",\"goal_ne\":\"🥅\",\"goal_net\":\"🥅\",\"goat\":\"🐐\",\"goggles\":\"🥽\",\"golf\":\"⛳\",\"golfing\":\"🏌\",\"golfing_man\":\"🏌️‍♂️\",\"golfing_woman\":\"🏌️‍♀️\",\"gorilla\":\"🦍\",\"grapes\":\"🍇\",\"greece\":\"🇬🇷\",\"green_apple\":\"🍏\",\"green_book\":\"📗\",\"green_circle\":\"🟢\",\"green_hear\":\"💚\",\"green_heart\":\"💚\",\"green_salad\":\"🥗\",\"green_square\":\"🟩\",\"greenland\":\"🇬🇱\",\"grenada\":\"🇬🇩\",\"grey_exclamation\":\"❕\",\"grey_question\":\"❔\",\"grimacing\":\"😬\",\"grin\":\"😁\",\"grinning\":\"😀\",\"guadeloupe\":\"🇬🇵\",\"guam\":\"🇬🇺\",\"guard\":\"💂\",\"guardsman\":\"💂‍♂️\",\"guardswoman\":\"💂‍♀️\",\"guatemala\":\"🇬🇹\",\"guernsey\":\"🇬🇬\",\"guide_dog\":\"🦮\",\"guinea\":\"🇬🇳\",\"guinea_bissau\":\"🇬🇼\",\"guitar\":\"🎸\",\"gun\":\"🔫\",\"guyana\":\"🇬🇾\",\"haircut\":\"💇\",\"haircut_man\":\"💇‍♂️\",\"haircut_woman\":\"💇‍♀️\",\"haiti\":\"🇭🇹\",\"hamburger\":\"🍔\",\"hamme\":\"🔨\",\"hammer\":\"🔨\",\"hammer_and_pick\":\"⚒\",\"hammer_and_wrench\":\"🛠\",\"hamster\":\"🐹\",\"hand\":\"✋\",\"hand_over_mouth\":\"🤭\",\"handbag\":\"👜\",\"handball_person\":\"🤾\",\"handshake\":\"🤝\",\"hankey\":\"💩\",\"hash\":\"#️⃣\",\"hatched_chick\":\"🐥\",\"hatching_chick\":\"🐣\",\"headphones\":\"🎧\",\"health_worker\":\"🧑‍⚕️\",\"hear_no_evil\":\"🙉\",\"heard_mcdonald_islands\":\"🇭🇲\",\"heart\":\"❤\",\"heart_decoration\":\"💟\",\"heart_eyes\":\"😍\",\"heart_eyes_cat\":\"😻\",\"heartbeat\":\"💓\",\"heartpulse\":\"💗\",\"hearts\":\"♥\",\"heavy_check_mark\":\"✔\",\"heavy_division_sign\":\"➗\",\"heavy_dollar_sign\":\"💲\",\"heavy_exclamation_mark\":\"❗\",\"heavy_heart_exclamation\":\"❣\",\"heavy_minus_sig\":\"➖\",\"heavy_minus_sign\":\"➖\",\"heavy_multiplication_x\":\"✖\",\"heavy_plus_sig\":\"➕\",\"heavy_plus_sign\":\"➕\",\"hedgehog\":\"🦔\",\"helicopter\":\"🚁\",\"herb\":\"🌿\",\"hibiscus\":\"🌺\",\"high_brightness\":\"🔆\",\"high_heel\":\"👠\",\"hiking_boot\":\"🥾\",\"hindu_temple\":\"🛕\",\"hippopotamus\":\"🦛\",\"hocho\":\"🔪\",\"hole\":\"🕳\",\"honduras\":\"🇭🇳\",\"honey_pot\":\"🍯\",\"honeybee\":\"🐝\",\"hong_kong\":\"🇭🇰\",\"horse\":\"🐴\",\"horse_racing\":\"🏇\",\"hospital\":\"🏥\",\"hot_face\":\"🥵\",\"hot_pepper\":\"🌶\",\"hotdog\":\"🌭\",\"hotel\":\"🏨\",\"hotsprings\":\"♨\",\"hourglass\":\"⌛\",\"hourglass_flowing_sand\":\"⏳\",\"house\":\"🏠\",\"house_with_garden\":\"🏡\",\"houses\":\"🏘\",\"hugs\":\"🤗\",\"hungary\":\"🇭🇺\",\"hushed\":\"😯\",\"ice_cream\":\"🍨\",\"ice_cube\":\"🧊\",\"ice_hockey\":\"🏒\",\"ice_skate\":\"⛸\",\"icecream\":\"🍦\",\"iceland\":\"🇮🇸\",\"id\":\"🆔\",\"ideograph_advantage\":\"🉐\",\"imp\":\"👿\",\"inbox_tray\":\"📥\",\"incoming_envelope\":\"📨\",\"india\":\"🇮🇳\",\"indonesia\":\"🇮🇩\",\"infinity\":\"♾\",\"information_desk_person\":\"💁\",\"information_source\":\"ℹ\",\"innocent\":\"😇\",\"interrobang\":\"⁉\",\"iphon\":\"📱\",\"iphone\":\"📱\",\"iran\":\"🇮🇷\",\"iraq\":\"🇮🇶\",\"ireland\":\"🇮🇪\",\"isle_of_man\":\"🇮🇲\",\"israel\":\"🇮🇱\",\"it\":\"🇮🇹\",\"izakaya_lantern\":\"🏮\",\"jack_o_lantern\":\"🎃\",\"jamaica\":\"🇯🇲\",\"japan\":\"🗾\",\"japanese_castle\":\"🏯\",\"japanese_goblin\":\"👺\",\"japanese_ogre\":\"👹\",\"jeans\":\"👖\",\"jersey\":\"🇯🇪\",\"jigsaw\":\"🧩\",\"jordan\":\"🇯🇴\",\"joy\":\"😂\",\"joy_cat\":\"😹\",\"joystick\":\"🕹\",\"jp\":\"🇯🇵\",\"judge\":\"🧑‍⚖️\",\"juggling_person\":\"🤹\",\"kaaba\":\"🕋\",\"kangaroo\":\"🦘\",\"kazakhstan\":\"🇰🇿\",\"kenya\":\"🇰🇪\",\"key\":\"🔑\",\"keyboard\":\"⌨\",\"keycap_ten\":\"🔟\",\"kick_scooter\":\"🛴\",\"kimono\":\"👘\",\"kiribati\":\"🇰🇮\",\"kiss\":\"💋\",\"kissing\":\"😗\",\"kissing_cat\":\"😽\",\"kissing_closed_eyes\":\"😚\",\"kissing_heart\":\"😘\",\"kissing_smiling_eyes\":\"😙\",\"kite\":\"🪁\",\"kiwi_fruit\":\"🥝\",\"kneeling_man\":\"🧎‍♂️\",\"kneeling_person\":\"🧎\",\"kneeling_woman\":\"🧎‍♀️\",\"knife\":\"🔪\",\"koala\":\"🐨\",\"koko\":\"🈁\",\"kosovo\":\"🇽🇰\",\"kr\":\"🇰🇷\",\"kuwait\":\"🇰🇼\",\"kyrgyzstan\":\"🇰🇬\",\"lab_coat\":\"🥼\",\"labe\":\"🏷️\",\"label\":\"🏷\",\"lacrosse\":\"🥍\",\"lantern\":\"🏮\",\"laos\":\"🇱🇦\",\"large_blue_circle\":\"🔵\",\"large_blue_diamond\":\"🔷\",\"large_orange_diamond\":\"🔶\",\"last_quarter_moon\":\"🌗\",\"last_quarter_moon_with_face\":\"🌜\",\"latin_cross\":\"✝\",\"latvia\":\"🇱🇻\",\"laughing\":\"😆\",\"leafy_green\":\"🥬\",\"leaves\":\"🍃\",\"lebanon\":\"🇱🇧\",\"ledger\":\"📒\",\"left_luggage\":\"🛅\",\"left_right_arrow\":\"↔\",\"left_speech_bubble\":\"🗨\",\"leftwards_arrow_with_hook\":\"↩\",\"leg\":\"🦵\",\"lemon\":\"🍋\",\"leo\":\"♌\",\"leopard\":\"🐆\",\"lesotho\":\"🇱🇸\",\"level_slider\":\"🎚\",\"liberia\":\"🇱🇷\",\"libra\":\"♎\",\"libya\":\"🇱🇾\",\"liechtenstein\":\"🇱🇮\",\"light_rail\":\"🚈\",\"link\":\"🔗\",\"lion\":\"🦁\",\"lips\":\"👄\",\"lipstic\":\"💄\",\"lipstick\":\"💄\",\"lithuania\":\"🇱🇹\",\"lizard\":\"🦎\",\"llama\":\"🦙\",\"lobster\":\"🦞\",\"loc\":\"🔒\",\"lock\":\"🔒\",\"lock_with_ink_pen\":\"🔏\",\"lollipop\":\"🍭\",\"loop\":\"➿\",\"lotion_bottle\":\"🧴\",\"lotus_position\":\"🧘\",\"lotus_position_man\":\"🧘‍♂️\",\"lotus_position_woman\":\"🧘‍♀️\",\"loud_soun\":\"🔊\",\"loud_sound\":\"🔊\",\"loudspeaker\":\"📢\",\"love_hotel\":\"🏩\",\"love_letter\":\"💌\",\"love_you_gesture\":\"🤟\",\"low_brightness\":\"🔅\",\"luggage\":\"🧳\",\"luxembourg\":\"🇱🇺\",\"lying_face\":\"🤥\",\"m\":\"Ⓜ\",\"ma\":\"🔍\",\"macau\":\"🇲🇴\",\"macedonia\":\"🇲🇰\",\"madagascar\":\"🇲🇬\",\"mag\":\"🔍\",\"mag_right\":\"🔎\",\"mage\":\"🧙\",\"mage_man\":\"🧙‍♂️\",\"mage_woman\":\"🧙‍♀️\",\"magnet\":\"🧲\",\"mahjong\":\"🀄\",\"mailbox\":\"📫\",\"mailbox_closed\":\"📪\",\"mailbox_with_mail\":\"📬\",\"mailbox_with_no_mail\":\"📭\",\"malawi\":\"🇲🇼\",\"malaysia\":\"🇲🇾\",\"maldives\":\"🇲🇻\",\"male_detective\":\"🕵️‍♂️\",\"male_sign\":\"♂\",\"mali\":\"🇲🇱\",\"malta\":\"🇲🇹\",\"man\":\"👨\",\"man_artist\":\"👨‍🎨\",\"man_astronaut\":\"👨‍🚀\",\"man_cartwheeling\":\"🤸‍♂️\",\"man_cook\":\"👨‍🍳\",\"man_dancing\":\"🕺\",\"man_facepalming\":\"🤦‍♂️\",\"man_factory_worker\":\"👨‍🏭\",\"man_farmer\":\"👨‍🌾\",\"man_firefighter\":\"👨‍🚒\",\"man_health_worker\":\"👨‍⚕️\",\"man_in_manual_wheelchair\":\"👨‍🦽\",\"man_in_motorized_wheelchair\":\"👨‍🦼\",\"man_in_tuxedo\":\"🤵\",\"man_judge\":\"👨‍⚖️\",\"man_juggling\":\"🤹‍♂️\",\"man_mechanic\":\"👨‍🔧\",\"man_office_worker\":\"👨‍💼\",\"man_pilot\":\"👨‍✈️\",\"man_playing_handball\":\"🤾‍♂️\",\"man_playing_water_polo\":\"🤽‍♂️\",\"man_scientist\":\"👨‍🔬\",\"man_shrugging\":\"🤷‍♂️\",\"man_singer\":\"👨‍🎤\",\"man_student\":\"👨‍🎓\",\"man_teacher\":\"👨‍🏫\",\"man_technologist\":\"👨‍💻\",\"man_with_gua_pi_mao\":\"👲\",\"man_with_probing_cane\":\"👨‍🦯\",\"man_with_turban\":\"👳‍♂️\",\"mandarin\":\"🍊\",\"mango\":\"🥭\",\"mans_shoe\":\"👞\",\"mantelpiece_clock\":\"🕰\",\"manual_wheelchair\":\"🦽\",\"maple_leaf\":\"🍁\",\"marshall_islands\":\"🇲🇭\",\"martial_arts_uniform\":\"🥋\",\"martinique\":\"🇲🇶\",\"mask\":\"😷\",\"massage\":\"💆\",\"massage_man\":\"💆‍♂️\",\"massage_woman\":\"💆‍♀️\",\"mate\":\"🧉\",\"mauritania\":\"🇲🇷\",\"mauritius\":\"🇲🇺\",\"mayotte\":\"🇾🇹\",\"meat_on_bone\":\"🍖\",\"mechanic\":\"🧑‍🔧\",\"mechanical_arm\":\"🦾\",\"mechanical_leg\":\"🦿\",\"medal_military\":\"🎖\",\"medal_sports\":\"🏅\",\"medical_symbol\":\"⚕\",\"mega\":\"📣\",\"melon\":\"🍈\",\"mem\":\"📝\",\"memo\":\"📝\",\"men_wrestling\":\"🤼‍♂️\",\"menorah\":\"🕎\",\"mens\":\"🚹\",\"mermaid\":\"🧜‍♀️\",\"merman\":\"🧜‍♂️\",\"merperson\":\"🧜\",\"metal\":\"🤘\",\"metro\":\"🚇\",\"mexico\":\"🇲🇽\",\"microbe\":\"🦠\",\"micronesia\":\"🇫🇲\",\"microphone\":\"🎤\",\"microscope\":\"🔬\",\"middle_finger\":\"🖕\",\"milk_glass\":\"🥛\",\"milky_way\":\"🌌\",\"minibus\":\"🚐\",\"minidisc\":\"💽\",\"mobile_phone_off\":\"📴\",\"moldova\":\"🇲🇩\",\"monaco\":\"🇲🇨\",\"money_mouth_face\":\"🤑\",\"money_with_wings\":\"💸\",\"moneybag\":\"💰\",\"mongolia\":\"🇲🇳\",\"monkey\":\"🐒\",\"monkey_face\":\"🐵\",\"monocle_face\":\"🧐\",\"monorail\":\"🚝\",\"montenegro\":\"🇲🇪\",\"montserrat\":\"🇲🇸\",\"moon\":\"🌔\",\"moon_cake\":\"🥮\",\"morocco\":\"🇲🇦\",\"mortar_board\":\"🎓\",\"mosque\":\"🕌\",\"mosquito\":\"🦟\",\"motor_boat\":\"🛥\",\"motor_scooter\":\"🛵\",\"motorcycle\":\"🏍\",\"motorized_wheelchair\":\"🦼\",\"motorway\":\"🛣\",\"mount_fuji\":\"🗻\",\"mountain\":\"⛰\",\"mountain_bicyclist\":\"🚵\",\"mountain_biking_man\":\"🚵‍♂️\",\"mountain_biking_woman\":\"🚵‍♀️\",\"mountain_cableway\":\"🚠\",\"mountain_railway\":\"🚞\",\"mountain_snow\":\"🏔\",\"mouse\":\"🐭\",\"mouse2\":\"🐁\",\"movie_camera\":\"🎥\",\"moyai\":\"🗿\",\"mozambique\":\"🇲🇿\",\"mrs_claus\":\"🤶\",\"muscle\":\"💪\",\"mushroom\":\"🍄\",\"musical_keyboard\":\"🎹\",\"musical_note\":\"🎵\",\"musical_score\":\"🎼\",\"mut\":\"🔇\",\"mute\":\"🔇\",\"myanmar\":\"🇲🇲\",\"nail_care\":\"💅\",\"name_badge\":\"📛\",\"namibia\":\"🇳🇦\",\"national_park\":\"🏞\",\"nauru\":\"🇳🇷\",\"nauseated_face\":\"🤢\",\"nazar_amulet\":\"🧿\",\"necktie\":\"👔\",\"negative_squared_cross_mark\":\"❎\",\"nepal\":\"🇳🇵\",\"nerd_face\":\"🤓\",\"netherlands\":\"🇳🇱\",\"neutral_face\":\"😐\",\"new\":\"🆕\",\"new_caledonia\":\"🇳🇨\",\"new_moon\":\"🌑\",\"new_moon_with_face\":\"🌚\",\"new_zealand\":\"🇳🇿\",\"newspaper\":\"📰\",\"newspaper_roll\":\"🗞\",\"next_track_button\":\"⏭\",\"ng\":\"🆖\",\"ng_man\":\"🙅‍♂️\",\"ng_woman\":\"🙅‍♀️\",\"nicaragua\":\"🇳🇮\",\"niger\":\"🇳🇪\",\"nigeria\":\"🇳🇬\",\"night_with_stars\":\"🌃\",\"nine\":\"9️⃣\",\"niue\":\"🇳🇺\",\"no_bell\":\"🔕\",\"no_bicycles\":\"🚳\",\"no_entry\":\"⛔\",\"no_entry_sign\":\"🚫\",\"no_good\":\"🙅\",\"no_good_man\":\"🙅‍♂️\",\"no_good_woman\":\"🙅‍♀️\",\"no_mobile_phones\":\"📵\",\"no_mouth\":\"😶\",\"no_pedestrians\":\"🚷\",\"no_smoking\":\"🚭\",\"non-potable_water\":\"🚱\",\"norfolk_island\":\"🇳🇫\",\"north_korea\":\"🇰🇵\",\"northern_mariana_islands\":\"🇲🇵\",\"norway\":\"🇳🇴\",\"nose\":\"👃\",\"notebook\":\"📓\",\"notebook_with_decorative_cover\":\"📔\",\"notes\":\"🎶\",\"nut_and_bolt\":\"🔩\",\"o\":\"⭕\",\"o2\":\"🅾\",\"ocean\":\"🌊\",\"octopus\":\"🐙\",\"oden\":\"🍢\",\"office\":\"🏢\",\"office_worker\":\"🧑‍💼\",\"oil_drum\":\"🛢\",\"ok\":\"🆗\",\"ok_hand\":\"👌\",\"ok_man\":\"🙆‍♂️\",\"ok_person\":\"🙆\",\"ok_woman\":\"🙆‍♀️\",\"old_key\":\"🗝\",\"older_adult\":\"🧓\",\"older_man\":\"👴\",\"older_woman\":\"👵\",\"om\":\"🕉\",\"oman\":\"🇴🇲\",\"on\":\"🔛\",\"oncoming_automobile\":\"🚘\",\"oncoming_bus\":\"🚍\",\"oncoming_police_car\":\"🚔\",\"oncoming_taxi\":\"🚖\",\"one\":\"1️⃣\",\"one_piece_swimsuit\":\"🩱\",\"onion\":\"🧅\",\"open_book\":\"📖\",\"open_file_folder\":\"📂\",\"open_hands\":\"👐\",\"open_mouth\":\"😮\",\"open_umbrella\":\"☂\",\"ophiuchus\":\"⛎\",\"orange\":\"🍊\",\"orange_book\":\"📙\",\"orange_circle\":\"🟠\",\"orange_heart\":\"🧡\",\"orange_square\":\"🟧\",\"orangutan\":\"🦧\",\"orthodox_cross\":\"☦\",\"otter\":\"🦦\",\"outbox_tray\":\"📤\",\"owl\":\"🦉\",\"ox\":\"🐂\",\"oyster\":\"🦪\",\"packag\":\"📦\",\"package\":\"📦\",\"page_facing_u\":\"📄\",\"page_facing_up\":\"📄\",\"page_with_curl\":\"📃\",\"pager\":\"📟\",\"paintbrush\":\"🖌\",\"pakistan\":\"🇵🇰\",\"palau\":\"🇵🇼\",\"palestinian_territories\":\"🇵🇸\",\"palm_tree\":\"🌴\",\"palms_up_together\":\"🤲\",\"panama\":\"🇵🇦\",\"pancakes\":\"🥞\",\"panda_face\":\"🐼\",\"paperclip\":\"📎\",\"paperclips\":\"🖇\",\"papua_new_guinea\":\"🇵🇬\",\"parachute\":\"🪂\",\"paraguay\":\"🇵🇾\",\"parasol_on_ground\":\"⛱\",\"parking\":\"🅿\",\"parrot\":\"🦜\",\"part_alternation_mark\":\"〽\",\"partly_sunny\":\"⛅\",\"partying_face\":\"🥳\",\"passenger_ship\":\"🛳\",\"passport_control\":\"🛂\",\"pause_button\":\"⏸\",\"paw_prints\":\"🐾\",\"peace_symbol\":\"☮\",\"peach\":\"🍑\",\"peacock\":\"🦚\",\"peanuts\":\"🥜\",\"pear\":\"🍐\",\"pen\":\"🖊\",\"pencil\":\"📝\",\"pencil2\":\"✏\",\"penguin\":\"🐧\",\"pensive\":\"😔\",\"people_holding_hands\":\"🧑‍🤝‍🧑\",\"performing_arts\":\"🎭\",\"persevere\":\"😣\",\"person_bald\":\"🧑‍🦲\",\"person_curly_hair\":\"🧑‍🦱\",\"person_fencing\":\"🤺\",\"person_in_manual_wheelchair\":\"🧑‍🦽\",\"person_in_motorized_wheelchair\":\"🧑‍🦼\",\"person_red_hair\":\"🧑‍🦰\",\"person_white_hair\":\"🧑‍🦳\",\"person_with_probing_cane\":\"🧑‍🦯\",\"person_with_turban\":\"👳\",\"peru\":\"🇵🇪\",\"petri_dish\":\"🧫\",\"philippines\":\"🇵🇭\",\"phone\":\"☎\",\"pick\":\"⛏\",\"pie\":\"🥧\",\"pig\":\"🐷\",\"pig2\":\"🐖\",\"pig_nose\":\"🐽\",\"pill\":\"💊\",\"pilot\":\"🧑‍✈️\",\"pinching_hand\":\"🤏\",\"pineapple\":\"🍍\",\"ping_pong\":\"🏓\",\"pirate_flag\":\"🏴‍☠️\",\"pisces\":\"♓\",\"pitcairn_islands\":\"🇵🇳\",\"pizza\":\"🍕\",\"place_of_worship\":\"🛐\",\"plate_with_cutlery\":\"🍽\",\"play_or_pause_button\":\"⏯\",\"pleading_face\":\"🥺\",\"point_down\":\"👇\",\"point_left\":\"👈\",\"point_right\":\"👉\",\"point_up\":\"☝\",\"point_up_2\":\"👆\",\"poland\":\"🇵🇱\",\"police_car\":\"🚓\",\"police_officer\":\"👮\",\"policeman\":\"👮‍♂️\",\"policewoman\":\"👮‍♀️\",\"poo\":\"💩\",\"poodle\":\"🐩\",\"poop\":\"💩\",\"popcorn\":\"🍿\",\"portugal\":\"🇵🇹\",\"post_office\":\"🏣\",\"postal_horn\":\"📯\",\"postbox\":\"📮\",\"potable_water\":\"🚰\",\"potato\":\"🥔\",\"pouch\":\"👝\",\"poultry_leg\":\"🍗\",\"pound\":\"💷\",\"pout\":\"😡\",\"pouting_cat\":\"😾\",\"pouting_face\":\"🙎\",\"pouting_man\":\"🙎‍♂️\",\"pouting_woman\":\"🙎‍♀️\",\"pray\":\"🙏\",\"prayer_beads\":\"📿\",\"pregnant_woman\":\"🤰\",\"pretzel\":\"🥨\",\"previous_track_button\":\"⏮\",\"prince\":\"🤴\",\"princess\":\"👸\",\"printer\":\"🖨\",\"probing_cane\":\"🦯\",\"puerto_rico\":\"🇵🇷\",\"punch\":\"👊\",\"purple_circle\":\"🟣\",\"purple_heart\":\"💜\",\"purple_square\":\"🟪\",\"purse\":\"👛\",\"pushpi\":\"📌\",\"pushpin\":\"📌\",\"put_litter_in_its_place\":\"🚮\",\"qatar\":\"🇶🇦\",\"question\":\"❓\",\"rabbit\":\"🐰\",\"rabbit2\":\"🐇\",\"raccoon\":\"🦝\",\"racehorse\":\"🐎\",\"racing_car\":\"🏎\",\"radio\":\"📻\",\"radio_button\":\"🔘\",\"radioactive\":\"☢\",\"rage\":\"😡\",\"railway_car\":\"🚃\",\"railway_track\":\"🛤\",\"rainbow\":\"🌈\",\"rainbow_flag\":\"🏳️‍🌈\",\"raised_back_of_hand\":\"🤚\",\"raised_eyebrow\":\"🤨\",\"raised_hand\":\"✋\",\"raised_hand_with_fingers_splayed\":\"🖐\",\"raised_hands\":\"🙌\",\"raising_hand\":\"🙋\",\"raising_hand_man\":\"🙋‍♂️\",\"raising_hand_woman\":\"🙋‍♀️\",\"ram\":\"🐏\",\"ramen\":\"🍜\",\"rat\":\"🐀\",\"razor\":\"🪒\",\"receipt\":\"🧾\",\"record_button\":\"⏺\",\"recycl\":\"♻️\",\"recycle\":\"♻\",\"red_car\":\"🚗\",\"red_circle\":\"🔴\",\"red_envelope\":\"🧧\",\"red_haired_man\":\"👨‍🦰\",\"red_haired_woman\":\"👩‍🦰\",\"red_square\":\"🟥\",\"registered\":\"®\",\"relaxed\":\"☺\",\"relieved\":\"😌\",\"reminder_ribbon\":\"🎗\",\"repeat\":\"🔁\",\"repeat_one\":\"🔂\",\"rescue_worker_helmet\":\"⛑\",\"restroom\":\"🚻\",\"reunion\":\"🇷🇪\",\"revolving_hearts\":\"💞\",\"rewin\":\"⏪\",\"rewind\":\"⏪\",\"rhinoceros\":\"🦏\",\"ribbon\":\"🎀\",\"rice\":\"🍚\",\"rice_ball\":\"🍙\",\"rice_cracker\":\"🍘\",\"rice_scene\":\"🎑\",\"right_anger_bubble\":\"🗯\",\"ring\":\"💍\",\"ringed_planet\":\"🪐\",\"robot\":\"🤖\",\"rocke\":\"🚀\",\"rocket\":\"🚀\",\"rofl\":\"🤣\",\"roll_eyes\":\"🙄\",\"roll_of_paper\":\"🧻\",\"roller_coaster\":\"🎢\",\"romania\":\"🇷🇴\",\"rooster\":\"🐓\",\"rose\":\"🌹\",\"rosette\":\"🏵\",\"rotating_ligh\":\"🚨\",\"rotating_light\":\"🚨\",\"round_pushpin\":\"📍\",\"rowboat\":\"🚣\",\"rowing_man\":\"🚣‍♂️\",\"rowing_woman\":\"🚣‍♀️\",\"ru\":\"🇷🇺\",\"rugby_football\":\"🏉\",\"runner\":\"🏃\",\"running\":\"🏃\",\"running_man\":\"🏃‍♂️\",\"running_shirt_with_sash\":\"🎽\",\"running_woman\":\"🏃‍♀️\",\"rwanda\":\"🇷🇼\",\"sa\":\"🈂\",\"safety_pin\":\"🧷\",\"safety_vest\":\"🦺\",\"sagittarius\":\"♐\",\"sailboat\":\"⛵\",\"sake\":\"🍶\",\"salt\":\"🧂\",\"samoa\":\"🇼🇸\",\"san_marino\":\"🇸🇲\",\"sandal\":\"👡\",\"sandwich\":\"🥪\",\"santa\":\"🎅\",\"sao_tome_principe\":\"🇸🇹\",\"sari\":\"🥻\",\"sassy_man\":\"💁‍♂️\",\"sassy_woman\":\"💁‍♀️\",\"satellite\":\"📡\",\"satisfied\":\"😆\",\"saudi_arabia\":\"🇸🇦\",\"sauna_man\":\"🧖‍♂️\",\"sauna_person\":\"🧖\",\"sauna_woman\":\"🧖‍♀️\",\"sauropod\":\"🦕\",\"saxophone\":\"🎷\",\"scarf\":\"🧣\",\"school\":\"🏫\",\"school_satchel\":\"🎒\",\"scientist\":\"🧑‍🔬\",\"scissors\":\"✂\",\"scorpion\":\"🦂\",\"scorpius\":\"♏\",\"scotland\":\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\"scream\":\"😱\",\"scream_cat\":\"🙀\",\"scroll\":\"📜\",\"seat\":\"💺\",\"secret\":\"㊙\",\"see_no_evi\":\"🙈\",\"see_no_evil\":\"🙈\",\"seedlin\":\"🌱\",\"seedling\":\"🌱\",\"selfie\":\"🤳\",\"senegal\":\"🇸🇳\",\"serbia\":\"🇷🇸\",\"service_dog\":\"🐕‍🦺\",\"seven\":\"7️⃣\",\"seychelles\":\"🇸🇨\",\"shallow_pan_of_food\":\"🥘\",\"shamrock\":\"☘\",\"shark\":\"🦈\",\"shaved_ice\":\"🍧\",\"sheep\":\"🐑\",\"shell\":\"🐚\",\"shield\":\"🛡\",\"shinto_shrine\":\"⛩\",\"ship\":\"🚢\",\"shirt\":\"👕\",\"shit\":\"💩\",\"shoe\":\"👞\",\"shopping\":\"🛍\",\"shopping_cart\":\"🛒\",\"shorts\":\"🩳\",\"shower\":\"🚿\",\"shrimp\":\"🦐\",\"shrug\":\"🤷\",\"shushing_face\":\"🤫\",\"sierra_leone\":\"🇸🇱\",\"signal_strength\":\"📶\",\"singapore\":\"🇸🇬\",\"singer\":\"🧑‍🎤\",\"sint_maarten\":\"🇸🇽\",\"six\":\"6️⃣\",\"six_pointed_star\":\"🔯\",\"skateboard\":\"🛹\",\"ski\":\"🎿\",\"skier\":\"⛷\",\"skull\":\"💀\",\"skull_and_crossbones\":\"☠\",\"skunk\":\"🦨\",\"sled\":\"🛷\",\"sleeping\":\"😴\",\"sleeping_bed\":\"🛌\",\"sleepy\":\"😪\",\"slightly_frowning_face\":\"🙁\",\"slightly_smiling_face\":\"🙂\",\"slot_machine\":\"🎰\",\"sloth\":\"🦥\",\"slovakia\":\"🇸🇰\",\"slovenia\":\"🇸🇮\",\"small_airplane\":\"🛩\",\"small_blue_diamond\":\"🔹\",\"small_orange_diamond\":\"🔸\",\"small_red_triangle\":\"🔺\",\"small_red_triangle_down\":\"🔻\",\"smile\":\"😄\",\"smile_cat\":\"😸\",\"smiley\":\"😃\",\"smiley_cat\":\"😺\",\"smiling_face_with_three_hearts\":\"🥰\",\"smiling_imp\":\"😈\",\"smirk\":\"😏\",\"smirk_cat\":\"😼\",\"smoking\":\"🚬\",\"snail\":\"🐌\",\"snake\":\"🐍\",\"sneezing_face\":\"🤧\",\"snowboarder\":\"🏂\",\"snowflake\":\"❄\",\"snowman\":\"⛄\",\"snowman_with_snow\":\"☃\",\"soap\":\"🧼\",\"sob\":\"😭\",\"soccer\":\"⚽\",\"socks\":\"🧦\",\"softball\":\"🥎\",\"solomon_islands\":\"🇸🇧\",\"somalia\":\"🇸🇴\",\"soon\":\"🔜\",\"sos\":\"🆘\",\"sound\":\"🔉\",\"south_africa\":\"🇿🇦\",\"south_georgia_south_sandwich_islands\":\"🇬🇸\",\"south_sudan\":\"🇸🇸\",\"space_invader\":\"👾\",\"spades\":\"♠\",\"spaghetti\":\"🍝\",\"sparkle\":\"❇\",\"sparkler\":\"🎇\",\"sparkles\":\"✨\",\"sparkling_heart\":\"💖\",\"speak_no_evil\":\"🙊\",\"speaker\":\"🔈\",\"speaking_head\":\"🗣\",\"speech_balloo\":\"💬\",\"speech_balloon\":\"💬\",\"speedboat\":\"🚤\",\"spider\":\"🕷\",\"spider_web\":\"🕸\",\"spiral_calendar\":\"🗓\",\"spiral_notepad\":\"🗒\",\"sponge\":\"🧽\",\"spoon\":\"🥄\",\"squid\":\"🦑\",\"sri_lanka\":\"🇱🇰\",\"st_barthelemy\":\"🇧🇱\",\"st_helena\":\"🇸🇭\",\"st_kitts_nevis\":\"🇰🇳\",\"st_lucia\":\"🇱🇨\",\"st_martin\":\"🇲🇫\",\"st_pierre_miquelon\":\"🇵🇲\",\"st_vincent_grenadines\":\"🇻🇨\",\"stadium\":\"🏟\",\"standing_man\":\"🧍‍♂️\",\"standing_person\":\"🧍\",\"standing_woman\":\"🧍‍♀️\",\"star\":\"⭐\",\"star2\":\"🌟\",\"star_and_crescent\":\"☪\",\"star_of_david\":\"✡\",\"star_struck\":\"🤩\",\"stars\":\"🌠\",\"station\":\"🚉\",\"statue_of_liberty\":\"🗽\",\"steam_locomotive\":\"🚂\",\"stethoscope\":\"🩺\",\"stew\":\"🍲\",\"stop_button\":\"⏹\",\"stop_sign\":\"🛑\",\"stopwatch\":\"⏱\",\"straight_ruler\":\"📏\",\"strawberry\":\"🍓\",\"stuck_out_tongue\":\"😛\",\"stuck_out_tongue_closed_eyes\":\"😝\",\"stuck_out_tongue_winking_eye\":\"😜\",\"student\":\"🧑‍🎓\",\"studio_microphone\":\"🎙\",\"stuffed_flatbread\":\"🥙\",\"sudan\":\"🇸🇩\",\"sun_behind_large_cloud\":\"🌥\",\"sun_behind_rain_cloud\":\"🌦\",\"sun_behind_small_cloud\":\"🌤\",\"sun_with_face\":\"🌞\",\"sunflower\":\"🌻\",\"sunglasses\":\"😎\",\"sunny\":\"☀\",\"sunrise\":\"🌅\",\"sunrise_over_mountains\":\"🌄\",\"superhero\":\"🦸\",\"superhero_man\":\"🦸‍♂️\",\"superhero_woman\":\"🦸‍♀️\",\"supervillain\":\"🦹\",\"supervillain_man\":\"🦹‍♂️\",\"supervillain_woman\":\"🦹‍♀️\",\"surfer\":\"🏄\",\"surfing_man\":\"🏄‍♂️\",\"surfing_woman\":\"🏄‍♀️\",\"suriname\":\"🇸🇷\",\"sushi\":\"🍣\",\"suspension_railway\":\"🚟\",\"svalbard_jan_mayen\":\"🇸🇯\",\"swan\":\"🦢\",\"swaziland\":\"🇸🇿\",\"sweat\":\"😓\",\"sweat_drops\":\"💦\",\"sweat_smile\":\"😅\",\"sweden\":\"🇸🇪\",\"sweet_potato\":\"🍠\",\"swim_brief\":\"🩲\",\"swimmer\":\"🏊\",\"swimming_man\":\"🏊‍♂️\",\"swimming_woman\":\"🏊‍♀️\",\"switzerland\":\"🇨🇭\",\"symbols\":\"🔣\",\"synagogue\":\"🕍\",\"syria\":\"🇸🇾\",\"syringe\":\"💉\",\"t-rex\":\"🦖\",\"taco\":\"🌮\",\"tad\":\"🎉\",\"tada\":\"🎉\",\"taiwan\":\"🇹🇼\",\"tajikistan\":\"🇹🇯\",\"takeout_box\":\"🥡\",\"tanabata_tree\":\"🎋\",\"tangerine\":\"🍊\",\"tanzania\":\"🇹🇿\",\"taurus\":\"♉\",\"taxi\":\"🚕\",\"tea\":\"🍵\",\"teacher\":\"🧑‍🏫\",\"technologist\":\"🧑‍💻\",\"teddy_bear\":\"🧸\",\"telephone\":\"☎\",\"telephone_receiver\":\"📞\",\"telescope\":\"🔭\",\"tennis\":\"🎾\",\"tent\":\"⛺\",\"test_tube\":\"🧪\",\"thailand\":\"🇹🇭\",\"thermometer\":\"🌡\",\"thinking\":\"🤔\",\"thought_balloon\":\"💭\",\"thread\":\"🧵\",\"three\":\"3️⃣\",\"thumbsdown\":\"👎\",\"thumbsup\":\"👍\",\"ticket\":\"🎫\",\"tickets\":\"🎟\",\"tiger\":\"🐯\",\"tiger2\":\"🐅\",\"timer_clock\":\"⏲\",\"timor_leste\":\"🇹🇱\",\"tipping_hand_man\":\"💁‍♂️\",\"tipping_hand_person\":\"💁\",\"tipping_hand_woman\":\"💁‍♀️\",\"tired_face\":\"😫\",\"tm\":\"™\",\"togo\":\"🇹🇬\",\"toilet\":\"🚽\",\"tokelau\":\"🇹🇰\",\"tokyo_tower\":\"🗼\",\"tomato\":\"🍅\",\"tonga\":\"🇹🇴\",\"tongue\":\"👅\",\"toolbox\":\"🧰\",\"tooth\":\"🦷\",\"top\":\"🔝\",\"tophat\":\"🎩\",\"tornado\":\"🌪\",\"tr\":\"🇹🇷\",\"trackball\":\"🖲\",\"tractor\":\"🚜\",\"traffic_light\":\"🚥\",\"train\":\"🚋\",\"train2\":\"🚆\",\"tram\":\"🚊\",\"triangular_flag_on_pos\":\"🚩\",\"triangular_flag_on_post\":\"🚩\",\"triangular_ruler\":\"📐\",\"trident\":\"🔱\",\"trinidad_tobago\":\"🇹🇹\",\"tristan_da_cunha\":\"🇹🇦\",\"triumph\":\"😤\",\"trolleybus\":\"🚎\",\"trophy\":\"🏆\",\"tropical_drink\":\"🍹\",\"tropical_fish\":\"🐠\",\"truc\":\"🚚\",\"truck\":\"🚚\",\"trumpet\":\"🎺\",\"tshirt\":\"👕\",\"tulip\":\"🌷\",\"tumbler_glass\":\"🥃\",\"tunisia\":\"🇹🇳\",\"turkey\":\"🦃\",\"turkmenistan\":\"🇹🇲\",\"turks_caicos_islands\":\"🇹🇨\",\"turtle\":\"🐢\",\"tuvalu\":\"🇹🇻\",\"tv\":\"📺\",\"twisted_rightwards_arrow\":\"🔀\",\"twisted_rightwards_arrows\":\"🔀\",\"two\":\"2️⃣\",\"two_hearts\":\"💕\",\"two_men_holding_hands\":\"👬\",\"two_women_holding_hands\":\"👭\",\"u5272\":\"🈹\",\"u5408\":\"🈴\",\"u55b6\":\"🈺\",\"u6307\":\"🈯\",\"u6708\":\"🈷\",\"u6709\":\"🈶\",\"u6e80\":\"🈵\",\"u7121\":\"🈚\",\"u7533\":\"🈸\",\"u7981\":\"🈲\",\"u7a7a\":\"🈳\",\"uganda\":\"🇺🇬\",\"uk\":\"🇬🇧\",\"ukraine\":\"🇺🇦\",\"umbrella\":\"☔\",\"unamused\":\"😒\",\"underage\":\"🔞\",\"unicorn\":\"🦄\",\"united_arab_emirates\":\"🇦🇪\",\"united_nations\":\"🇺🇳\",\"unlock\":\"🔓\",\"up\":\"🆙\",\"upside_down_face\":\"🙃\",\"uruguay\":\"🇺🇾\",\"us\":\"🇺🇸\",\"us_outlying_islands\":\"🇺🇲\",\"us_virgin_islands\":\"🇻🇮\",\"uzbekistan\":\"🇺🇿\",\"v\":\"✌\",\"vampire\":\"🧛\",\"vampire_man\":\"🧛‍♂️\",\"vampire_woman\":\"🧛‍♀️\",\"vanuatu\":\"🇻🇺\",\"vatican_city\":\"🇻🇦\",\"venezuela\":\"🇻🇪\",\"vertical_traffic_light\":\"🚦\",\"vhs\":\"📼\",\"vibration_mode\":\"📳\",\"video_camera\":\"📹\",\"video_game\":\"🎮\",\"vietnam\":\"🇻🇳\",\"violin\":\"🎻\",\"virgo\":\"♍\",\"volcano\":\"🌋\",\"volleyball\":\"🏐\",\"vomiting_face\":\"🤮\",\"vs\":\"🆚\",\"vulcan_salute\":\"🖖\",\"waffle\":\"🧇\",\"wales\":\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\"walking\":\"🚶\",\"walking_man\":\"🚶‍♂️\",\"walking_woman\":\"🚶‍♀️\",\"wallis_futuna\":\"🇼🇫\",\"waning_crescent_moon\":\"🌘\",\"waning_gibbous_moon\":\"🌖\",\"warning\":\"⚠\",\"wastebaske\":\"🗑\",\"wastebasket\":\"🗑\",\"watch\":\"⌚\",\"water_buffalo\":\"🐃\",\"water_polo\":\"🤽\",\"watermelon\":\"🍉\",\"wave\":\"👋\",\"wavy_dash\":\"〰\",\"waxing_crescent_moon\":\"🌒\",\"waxing_gibbous_moon\":\"🌔\",\"wc\":\"🚾\",\"weary\":\"😩\",\"wedding\":\"💒\",\"weight_lifting\":\"🏋\",\"weight_lifting_man\":\"🏋️‍♂️\",\"weight_lifting_woman\":\"🏋️‍♀️\",\"western_sahara\":\"🇪🇭\",\"whale\":\"🐳\",\"whale2\":\"🐋\",\"wheel_of_dharma\":\"☸\",\"wheelchai\":\"♿️\",\"wheelchair\":\"♿\",\"white_check_mar\":\"✅\",\"white_check_mark\":\"✅\",\"white_circle\":\"⚪\",\"white_flag\":\"🏳\",\"white_flower\":\"💮\",\"white_haired_man\":\"👨‍🦳\",\"white_haired_woman\":\"👩‍🦳\",\"white_heart\":\"🤍\",\"white_large_square\":\"⬜\",\"white_medium_small_square\":\"◽\",\"white_medium_square\":\"◻\",\"white_small_square\":\"▫\",\"white_square_button\":\"🔳\",\"wilted_flower\":\"🥀\",\"wind_chime\":\"🎐\",\"wind_face\":\"🌬\",\"wine_glass\":\"🍷\",\"wink\":\"😉\",\"wolf\":\"🐺\",\"woman\":\"👩\",\"woman_artist\":\"👩‍🎨\",\"woman_astronaut\":\"👩‍🚀\",\"woman_cartwheeling\":\"🤸‍♀️\",\"woman_cook\":\"👩‍🍳\",\"woman_dancing\":\"💃\",\"woman_facepalming\":\"🤦‍♀️\",\"woman_factory_worker\":\"👩‍🏭\",\"woman_farmer\":\"👩‍🌾\",\"woman_firefighter\":\"👩‍🚒\",\"woman_health_worker\":\"👩‍⚕️\",\"woman_in_manual_wheelchair\":\"👩‍🦽\",\"woman_in_motorized_wheelchair\":\"👩‍🦼\",\"woman_judge\":\"👩‍⚖️\",\"woman_juggling\":\"🤹‍♀️\",\"woman_mechanic\":\"👩‍🔧\",\"woman_office_worker\":\"👩‍💼\",\"woman_pilot\":\"👩‍✈️\",\"woman_playing_handball\":\"🤾‍♀️\",\"woman_playing_water_polo\":\"🤽‍♀️\",\"woman_scientist\":\"👩‍🔬\",\"woman_shrugging\":\"🤷‍♀️\",\"woman_singer\":\"👩‍🎤\",\"woman_student\":\"👩‍🎓\",\"woman_teacher\":\"👩‍🏫\",\"woman_technologist\":\"👩‍💻\",\"woman_with_headscarf\":\"🧕\",\"woman_with_probing_cane\":\"👩‍🦯\",\"woman_with_turban\":\"👳‍♀️\",\"womans_clothes\":\"👚\",\"womans_hat\":\"👒\",\"women_wrestling\":\"🤼‍♀️\",\"womens\":\"🚺\",\"woozy_face\":\"🥴\",\"world_map\":\"🗺\",\"worried\":\"😟\",\"wrenc\":\"🔧\",\"wrench\":\"🔧\",\"wrestling\":\"🤼\",\"writing_hand\":\"✍\",\"x\":\"❌\",\"yarn\":\"🧶\",\"yawning_face\":\"🥱\",\"yellow_circle\":\"🟡\",\"yellow_heart\":\"💛\",\"yellow_square\":\"🟨\",\"yemen\":\"🇾🇪\",\"yen\":\"💴\",\"yin_yang\":\"☯\",\"yo_yo\":\"🪀\",\"yum\":\"😋\",\"za\":\"⚡️\",\"zambia\":\"🇿🇲\",\"zany_face\":\"🤪\",\"zap\":\"⚡\",\"zebra\":\"🦓\",\"zero\":\"0️⃣\",\"zimbabwe\":\"🇿🇼\",\"zipper_mouth_face\":\"🤐\",\"zombie\":\"🧟\",\"zombie_man\":\"🧟‍♂️\",\"zombie_woman\":\"🧟‍♀️\",\"zzz\":\"💤\"}"
  },
  {
    "path": "extensions/git/src/actionButton.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command, Disposable, Event, EventEmitter, SourceControlActionButton, Uri, workspace, l10n, LogOutputChannel } from 'vscode';\nimport { Branch, RefType, Status } from './api/git';\nimport { OperationKind } from './operation';\nimport { CommitCommandsCenter } from './postCommitCommands';\nimport { Repository } from './repository';\nimport { dispose } from './util';\n\nfunction isActionButtonStateEqual(state1: ActionButtonState, state2: ActionButtonState): boolean {\n\treturn state1.HEAD?.name === state2.HEAD?.name &&\n\t\tstate1.HEAD?.commit === state2.HEAD?.commit &&\n\t\tstate1.HEAD?.remote === state2.HEAD?.remote &&\n\t\tstate1.HEAD?.type === state2.HEAD?.type &&\n\t\tstate1.HEAD?.ahead === state2.HEAD?.ahead &&\n\t\tstate1.HEAD?.behind === state2.HEAD?.behind &&\n\t\tstate1.HEAD?.upstream?.name === state2.HEAD?.upstream?.name &&\n\t\tstate1.HEAD?.upstream?.remote === state2.HEAD?.upstream?.remote &&\n\t\tstate1.HEAD?.upstream?.commit === state2.HEAD?.upstream?.commit &&\n\t\tstate1.isCheckoutInProgress === state2.isCheckoutInProgress &&\n\t\tstate1.isCommitInProgress === state2.isCommitInProgress &&\n\t\tstate1.isMergeInProgress === state2.isMergeInProgress &&\n\t\tstate1.isRebaseInProgress === state2.isRebaseInProgress &&\n\t\tstate1.isSyncInProgress === state2.isSyncInProgress &&\n\t\tstate1.repositoryHasChangesToCommit === state2.repositoryHasChangesToCommit &&\n\t\tstate1.repositoryHasUnresolvedConflicts === state2.repositoryHasUnresolvedConflicts;\n}\n\ninterface ActionButtonState {\n\treadonly HEAD: Branch | undefined;\n\treadonly isCheckoutInProgress: boolean;\n\treadonly isCommitInProgress: boolean;\n\treadonly isMergeInProgress: boolean;\n\treadonly isRebaseInProgress: boolean;\n\treadonly isSyncInProgress: boolean;\n\treadonly repositoryHasChangesToCommit: boolean;\n\treadonly repositoryHasUnresolvedConflicts: boolean;\n}\n\nexport class ActionButton {\n\tprivate _onDidChange = new EventEmitter<void>();\n\tget onDidChange(): Event<void> { return this._onDidChange.event; }\n\n\tprivate _state: ActionButtonState;\n\tprivate get state() { return this._state; }\n\tprivate set state(state: ActionButtonState) {\n\t\tif (isActionButtonStateEqual(this._state, state)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.logger.trace(`[ActionButton][setState] ${JSON.stringify(state)}`);\n\n\t\tthis._state = state;\n\t\tthis._onDidChange.fire();\n\t}\n\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(\n\t\tprivate readonly repository: Repository,\n\t\tprivate readonly postCommitCommandCenter: CommitCommandsCenter,\n\t\tprivate readonly logger: LogOutputChannel) {\n\t\tthis._state = {\n\t\t\tHEAD: undefined,\n\t\t\tisCheckoutInProgress: false,\n\t\t\tisCommitInProgress: false,\n\t\t\tisMergeInProgress: false,\n\t\t\tisRebaseInProgress: false,\n\t\t\tisSyncInProgress: false,\n\t\t\trepositoryHasChangesToCommit: false,\n\t\t\trepositoryHasUnresolvedConflicts: false\n\t\t};\n\n\t\trepository.onDidRunGitStatus(this.onDidRunGitStatus, this, this.disposables);\n\t\trepository.onDidChangeOperations(this.onDidChangeOperations, this, this.disposables);\n\n\t\tthis.disposables.push(repository.onDidChangeBranchProtection(() => this._onDidChange.fire()));\n\t\tthis.disposables.push(postCommitCommandCenter.onDidChange(() => this._onDidChange.fire()));\n\n\t\tconst root = Uri.file(repository.root);\n\t\tthis.disposables.push(workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('git.enableSmartCommit', root) ||\n\t\t\t\te.affectsConfiguration('git.smartCommitChanges', root) ||\n\t\t\t\te.affectsConfiguration('git.suggestSmartCommit', root)) {\n\t\t\t\tthis.onDidChangeSmartCommitSettings();\n\t\t\t}\n\n\t\t\tif (e.affectsConfiguration('git.branchProtectionPrompt', root) ||\n\t\t\t\te.affectsConfiguration('git.postCommitCommand', root) ||\n\t\t\t\te.affectsConfiguration('git.rememberPostCommitCommand', root) ||\n\t\t\t\te.affectsConfiguration('git.showActionButton', root)) {\n\t\t\t\tthis._onDidChange.fire();\n\t\t\t}\n\t\t}));\n\t}\n\n\tget button(): SourceControlActionButton | undefined {\n\t\tif (!this.state.HEAD) { return undefined; }\n\n\t\tlet actionButton: SourceControlActionButton | undefined;\n\n\t\tif (this.state.repositoryHasChangesToCommit) {\n\t\t\t// Commit Changes (enabled)\n\t\t\tactionButton = this.getCommitActionButton();\n\t\t}\n\n\t\t// Commit Changes (enabled) -> Publish Branch -> Sync Changes -> Commit Changes (disabled)\n\t\tactionButton = actionButton ?? this.getPublishBranchActionButton() ?? this.getSyncChangesActionButton() ?? this.getCommitActionButton();\n\n\t\tthis.logger.trace(`[ActionButton][getButton] ${JSON.stringify({\n\t\t\tcommand: actionButton?.command.command,\n\t\t\ttitle: actionButton?.command.title,\n\t\t\tenabled: actionButton?.enabled\n\t\t})}`);\n\n\t\treturn actionButton;\n\t}\n\n\tprivate getCommitActionButton(): SourceControlActionButton | undefined {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst showActionButton = config.get<{ commit: boolean }>('showActionButton', { commit: true });\n\n\t\t// The button is disabled\n\t\tif (!showActionButton.commit) { return undefined; }\n\n\t\tconst primaryCommand = this.getCommitActionButtonPrimaryCommand();\n\n\t\treturn {\n\t\t\tcommand: primaryCommand,\n\t\t\tsecondaryCommands: this.getCommitActionButtonSecondaryCommands(),\n\t\t\tenabled: (\n\t\t\t\tthis.state.repositoryHasChangesToCommit ||\n\t\t\t\t(this.state.isRebaseInProgress && !this.state.repositoryHasUnresolvedConflicts) ||\n\t\t\t\t(this.state.isMergeInProgress && !this.state.repositoryHasUnresolvedConflicts)) &&\n\t\t\t\t!this.state.isCommitInProgress\n\t\t};\n\t}\n\n\tprivate getCommitActionButtonPrimaryCommand(): Command {\n\t\t// Rebase Continue\n\t\tif (this.state.isRebaseInProgress) {\n\t\t\treturn {\n\t\t\t\tcommand: 'git.commit',\n\t\t\t\ttitle: l10n.t('{0} Continue', '$(check)'),\n\t\t\t\ttooltip: this.state.isCommitInProgress ? l10n.t('Continuing Rebase...') : l10n.t('Continue Rebase'),\n\t\t\t\targuments: [this.repository.sourceControl, null]\n\t\t\t};\n\t\t}\n\n\t\t// Merge Continue\n\t\tif (this.state.isMergeInProgress) {\n\t\t\treturn {\n\t\t\t\tcommand: 'git.commit',\n\t\t\t\ttitle: l10n.t('{0} Continue', '$(check)'),\n\t\t\t\ttooltip: this.state.isCommitInProgress ? l10n.t('Continuing Merge...') : l10n.t('Continue Merge'),\n\t\t\t\targuments: [this.repository.sourceControl, null]\n\t\t\t};\n\t\t}\n\n\t\t// Not a branch (tag, detached)\n\t\tif (this.state.HEAD?.type === RefType.Tag || !this.state.HEAD?.name) {\n\t\t\treturn {\n\t\t\t\tcommand: 'git.commit',\n\t\t\t\ttitle: l10n.t('{0} Commit', '$(check)'),\n\t\t\t\ttooltip: this.state.isCommitInProgress ? l10n.t('Committing Changes...') : l10n.t('Commit Changes'),\n\t\t\t\targuments: [this.repository.sourceControl, null]\n\t\t\t};\n\t\t}\n\n\t\t// Commit\n\t\treturn this.postCommitCommandCenter.getPrimaryCommand();\n\t}\n\n\tprivate getCommitActionButtonSecondaryCommands(): Command[][] {\n\t\t// Rebase Continue\n\t\tif (this.state.isRebaseInProgress) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// Merge Continue\n\t\tif (this.state.isMergeInProgress) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// Not a branch (tag, detached)\n\t\tif (this.state.HEAD?.type === RefType.Tag || !this.state.HEAD?.name) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// Commit\n\t\tconst commandGroups: Command[][] = [];\n\t\tfor (const commands of this.postCommitCommandCenter.getSecondaryCommands()) {\n\t\t\tcommandGroups.push(commands.map(c => {\n\t\t\t\treturn { command: c.command, title: c.title, tooltip: c.tooltip, arguments: c.arguments };\n\t\t\t}));\n\t\t}\n\n\t\treturn commandGroups;\n\t}\n\n\tprivate getPublishBranchActionButton(): SourceControlActionButton | undefined {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst showActionButton = config.get<{ publish: boolean }>('showActionButton', { publish: true });\n\n\t\t// Not a branch (tag, detached), branch does have an upstream, commit/merge/rebase is in progress, or the button is disabled\n\t\tif (this.state.HEAD?.type === RefType.Tag || !this.state.HEAD?.name || this.state.HEAD?.upstream || this.state.isCommitInProgress || this.state.isMergeInProgress || this.state.isRebaseInProgress || !showActionButton.publish) { return undefined; }\n\n\t\t// Button icon\n\t\tconst icon = this.state.isSyncInProgress ? '$(sync~spin)' : '$(cloud-upload)';\n\n\t\treturn {\n\t\t\tcommand: {\n\t\t\t\tcommand: 'git.publish',\n\t\t\t\ttitle: l10n.t({ message: '{0} Publish Branch', args: [icon], comment: ['{Locked=\"Branch\"}', 'Do not translate \"Branch\" as it is a git term'] }),\n\t\t\t\ttooltip: this.state.isSyncInProgress ?\n\t\t\t\t\t(this.state.HEAD?.name ?\n\t\t\t\t\t\tl10n.t({ message: 'Publishing Branch \"{0}\"...', args: [this.state.HEAD.name], comment: ['{Locked=\"Branch\"}', 'Do not translate \"Branch\" as it is a git term'] }) :\n\t\t\t\t\t\tl10n.t({ message: 'Publishing Branch...', comment: ['{Locked=\"Branch\"}', 'Do not translate \"Branch\" as it is a git term'] })) :\n\t\t\t\t\t(this.repository.HEAD?.name ?\n\t\t\t\t\t\tl10n.t({ message: 'Publish Branch \"{0}\"', args: [this.state.HEAD?.name], comment: ['{Locked=\"Branch\"}', 'Do not translate \"Branch\" as it is a git term'] }) :\n\t\t\t\t\t\tl10n.t({ message: 'Publish Branch', comment: ['{Locked=\"Branch\"}', 'Do not translate \"Branch\" as it is a git term'] })),\n\t\t\t\targuments: [this.repository.sourceControl],\n\t\t\t},\n\t\t\tenabled: !this.state.isCheckoutInProgress && !this.state.isSyncInProgress\n\t\t};\n\t}\n\n\tprivate getSyncChangesActionButton(): SourceControlActionButton | undefined {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst showActionButton = config.get<{ sync: boolean }>('showActionButton', { sync: true });\n\t\tconst branchIsAheadOrBehind = (this.state.HEAD?.behind ?? 0) > 0 || (this.state.HEAD?.ahead ?? 0) > 0;\n\n\t\t// Branch does not have an upstream, branch is not ahead/behind the remote branch, commit/merge/rebase is in progress, or the button is disabled\n\t\tif (!this.state.HEAD?.upstream || !branchIsAheadOrBehind || this.state.isCommitInProgress || this.state.isMergeInProgress || this.state.isRebaseInProgress || !showActionButton.sync) { return undefined; }\n\n\t\tconst ahead = this.state.HEAD.ahead ? ` ${this.state.HEAD.ahead}$(arrow-up)` : '';\n\t\tconst behind = this.state.HEAD.behind ? ` ${this.state.HEAD.behind}$(arrow-down)` : '';\n\t\tconst icon = this.state.isSyncInProgress ? '$(sync~spin)' : '$(sync)';\n\n\t\treturn {\n\t\t\tcommand: {\n\t\t\t\tcommand: 'git.sync',\n\t\t\t\ttitle: l10n.t('{0} Sync Changes{1}{2}', icon, behind, ahead),\n\t\t\t\tshortTitle: `${icon}${behind}${ahead}`,\n\t\t\t\ttooltip: this.state.isSyncInProgress ?\n\t\t\t\t\tl10n.t('Synchronizing Changes...')\n\t\t\t\t\t: this.repository.syncTooltip,\n\t\t\t\targuments: [this.repository.sourceControl],\n\t\t\t},\n\t\t\tenabled: !this.state.isCheckoutInProgress && !this.state.isSyncInProgress\n\t\t};\n\t}\n\n\tprivate onDidChangeOperations(): void {\n\t\tconst isCheckoutInProgress\n\t\t\t= this.repository.operations.isRunning(OperationKind.Checkout) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.CheckoutTracking);\n\n\t\tconst isCommitInProgress =\n\t\t\tthis.repository.operations.isRunning(OperationKind.Commit) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.PostCommitCommand) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.RebaseContinue);\n\n\t\tconst isSyncInProgress =\n\t\t\tthis.repository.operations.isRunning(OperationKind.Sync) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.Push) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.Pull);\n\n\t\tthis.state = { ...this.state, isCheckoutInProgress, isCommitInProgress, isSyncInProgress };\n\t}\n\n\tprivate onDidChangeSmartCommitSettings(): void {\n\t\tthis.state = {\n\t\t\t...this.state,\n\t\t\trepositoryHasChangesToCommit: this.repositoryHasChangesToCommit()\n\t\t};\n\t}\n\n\tprivate onDidRunGitStatus(): void {\n\t\tthis.state = {\n\t\t\t...this.state,\n\t\t\tHEAD: this.repository.HEAD,\n\t\t\tisMergeInProgress: this.repository.mergeInProgress,\n\t\t\tisRebaseInProgress: !!this.repository.rebaseCommit,\n\t\t\trepositoryHasChangesToCommit: this.repositoryHasChangesToCommit(),\n\t\t\trepositoryHasUnresolvedConflicts: this.repository.mergeGroup.resourceStates.length > 0\n\t\t};\n\t}\n\n\tprivate repositoryHasChangesToCommit(): boolean {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst enableSmartCommit = config.get<boolean>('enableSmartCommit') === true;\n\t\tconst suggestSmartCommit = config.get<boolean>('suggestSmartCommit') === true;\n\t\tconst smartCommitChanges = config.get<'all' | 'tracked'>('smartCommitChanges', 'all');\n\n\t\tconst resources = [...this.repository.indexGroup.resourceStates];\n\n\t\tif (\n\t\t\t// Smart commit enabled (all)\n\t\t\t(enableSmartCommit && smartCommitChanges === 'all') ||\n\t\t\t// Smart commit disabled, smart suggestion enabled\n\t\t\t(!enableSmartCommit && suggestSmartCommit)\n\t\t) {\n\t\t\tresources.push(...this.repository.workingTreeGroup.resourceStates);\n\t\t}\n\n\t\t// Smart commit enabled (tracked only)\n\t\tif (enableSmartCommit && smartCommitChanges === 'tracked') {\n\t\t\tresources.push(...this.repository.workingTreeGroup.resourceStates.filter(r => r.type !== Status.UNTRACKED));\n\t\t}\n\n\t\treturn resources.length !== 0;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/api/api1.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* eslint-disable local/code-no-native-private */\n\nimport { Model } from '../model';\nimport { Repository as BaseRepository, Resource } from '../repository';\nimport { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, ForcePushMode, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, RefType, CredentialsProvider, BranchQuery, PushErrorHandler, PublishEvent, FetchOptions, RemoteSourceProvider, RemoteSourcePublisher, PostCommitCommandsProvider, RefQuery, BranchProtectionProvider, InitOptions, SourceControlHistoryItemDetailsProvider } from './git';\nimport { Event, SourceControlInputBox, Uri, SourceControl, Disposable, commands, CancellationToken } from 'vscode';\nimport { combinedDisposable, filterEvent, mapEvent } from '../util';\nimport { toGitUri } from '../uri';\nimport { GitExtensionImpl } from './extension';\nimport { GitBaseApi } from '../git-base';\nimport { PickRemoteSourceOptions } from '../typings/git-base';\nimport { OperationKind, OperationResult } from '../operation';\n\nclass ApiInputBox implements InputBox {\n\t#inputBox: SourceControlInputBox;\n\n\tconstructor(inputBox: SourceControlInputBox) { this.#inputBox = inputBox; }\n\n\tset value(value: string) { this.#inputBox.value = value; }\n\tget value(): string { return this.#inputBox.value; }\n}\n\nexport class ApiChange implements Change {\n\t#resource: Resource;\n\tconstructor(resource: Resource) { this.#resource = resource; }\n\n\tget uri(): Uri { return this.#resource.resourceUri; }\n\tget originalUri(): Uri { return this.#resource.original; }\n\tget renameUri(): Uri | undefined { return this.#resource.renameResourceUri; }\n\tget status(): Status { return this.#resource.type; }\n}\n\nexport class ApiRepositoryState implements RepositoryState {\n\t#repository: BaseRepository;\n\treadonly onDidChange: Event<void>;\n\n\tconstructor(repository: BaseRepository) {\n\t\tthis.#repository = repository;\n\t\tthis.onDidChange = this.#repository.onDidRunGitStatus;\n\t}\n\n\tget HEAD(): Branch | undefined { return this.#repository.HEAD; }\n\t/**\n\t * @deprecated Use ApiRepository.getRefs() instead.\n\t */\n\tget refs(): Ref[] { console.warn('Deprecated. Use ApiRepository.getRefs() instead.'); return []; }\n\tget remotes(): Remote[] { return [...this.#repository.remotes]; }\n\tget submodules(): Submodule[] { return [...this.#repository.submodules]; }\n\tget rebaseCommit(): Commit | undefined { return this.#repository.rebaseCommit; }\n\n\tget mergeChanges(): Change[] { return this.#repository.mergeGroup.resourceStates.map(r => new ApiChange(r)); }\n\tget indexChanges(): Change[] { return this.#repository.indexGroup.resourceStates.map(r => new ApiChange(r)); }\n\tget workingTreeChanges(): Change[] { return this.#repository.workingTreeGroup.resourceStates.map(r => new ApiChange(r)); }\n\tget untrackedChanges(): Change[] { return this.#repository.untrackedGroup.resourceStates.map(r => new ApiChange(r)); }\n}\n\nexport class ApiRepositoryUIState implements RepositoryUIState {\n\t#sourceControl: SourceControl;\n\treadonly onDidChange: Event<void>;\n\n\tconstructor(sourceControl: SourceControl) {\n\t\tthis.#sourceControl = sourceControl;\n\t\tthis.onDidChange = mapEvent<boolean, void>(this.#sourceControl.onDidChangeSelection, () => null);\n\t}\n\n\tget selected(): boolean { return this.#sourceControl.selected; }\n}\n\nexport class ApiRepository implements Repository {\n\t#repository: BaseRepository;\n\n\treadonly rootUri: Uri;\n\treadonly inputBox: InputBox;\n\treadonly state: RepositoryState;\n\treadonly ui: RepositoryUIState;\n\n\treadonly onDidCommit: Event<void>;\n\treadonly onDidCheckout: Event<void>;\n\n\tconstructor(repository: BaseRepository) {\n\t\tthis.#repository = repository;\n\n\t\tthis.rootUri = Uri.file(this.#repository.root);\n\t\tthis.inputBox = new ApiInputBox(this.#repository.inputBox);\n\t\tthis.state = new ApiRepositoryState(this.#repository);\n\t\tthis.ui = new ApiRepositoryUIState(this.#repository.sourceControl);\n\n\t\tthis.onDidCommit = mapEvent<OperationResult, void>(\n\t\t\tfilterEvent(this.#repository.onDidRunOperation, e => e.operation.kind === OperationKind.Commit), () => null);\n\t\tthis.onDidCheckout = mapEvent<OperationResult, void>(\n\t\t\tfilterEvent(this.#repository.onDidRunOperation, e => e.operation.kind === OperationKind.Checkout || e.operation.kind === OperationKind.CheckoutTracking), () => null);\n\t}\n\n\tapply(patch: string, reverse?: boolean): Promise<void> {\n\t\treturn this.#repository.apply(patch, reverse);\n\t}\n\n\tgetConfigs(): Promise<{ key: string; value: string }[]> {\n\t\treturn this.#repository.getConfigs();\n\t}\n\n\tgetConfig(key: string): Promise<string> {\n\t\treturn this.#repository.getConfig(key);\n\t}\n\n\tsetConfig(key: string, value: string): Promise<string> {\n\t\treturn this.#repository.setConfig(key, value);\n\t}\n\n\tunsetConfig(key: string): Promise<string> {\n\t\treturn this.#repository.unsetConfig(key);\n\t}\n\n\tgetGlobalConfig(key: string): Promise<string> {\n\t\treturn this.#repository.getGlobalConfig(key);\n\t}\n\n\tgetObjectDetails(treeish: string, path: string): Promise<{ mode: string; object: string; size: number }> {\n\t\treturn this.#repository.getObjectDetails(treeish, path);\n\t}\n\n\tdetectObjectType(object: string): Promise<{ mimetype: string; encoding?: string }> {\n\t\treturn this.#repository.detectObjectType(object);\n\t}\n\n\tbuffer(ref: string, filePath: string): Promise<Buffer> {\n\t\treturn this.#repository.buffer(ref, filePath);\n\t}\n\n\tshow(ref: string, path: string): Promise<string> {\n\t\treturn this.#repository.show(ref, path);\n\t}\n\n\tgetCommit(ref: string): Promise<Commit> {\n\t\treturn this.#repository.getCommit(ref);\n\t}\n\n\tadd(paths: string[]) {\n\t\treturn this.#repository.add(paths.map(p => Uri.file(p)));\n\t}\n\n\trevert(paths: string[]) {\n\t\treturn this.#repository.revert(paths.map(p => Uri.file(p)));\n\t}\n\n\tclean(paths: string[]) {\n\t\treturn this.#repository.clean(paths.map(p => Uri.file(p)));\n\t}\n\n\tdiff(cached?: boolean) {\n\t\treturn this.#repository.diff(cached);\n\t}\n\n\tdiffWithHEAD(): Promise<Change[]>;\n\tdiffWithHEAD(path: string): Promise<string>;\n\tdiffWithHEAD(path?: string): Promise<string | Change[]> {\n\t\treturn this.#repository.diffWithHEAD(path);\n\t}\n\n\tdiffWith(ref: string): Promise<Change[]>;\n\tdiffWith(ref: string, path: string): Promise<string>;\n\tdiffWith(ref: string, path?: string): Promise<string | Change[]> {\n\t\treturn this.#repository.diffWith(ref, path);\n\t}\n\n\tdiffIndexWithHEAD(): Promise<Change[]>;\n\tdiffIndexWithHEAD(path: string): Promise<string>;\n\tdiffIndexWithHEAD(path?: string): Promise<string | Change[]> {\n\t\treturn this.#repository.diffIndexWithHEAD(path);\n\t}\n\n\tdiffIndexWith(ref: string): Promise<Change[]>;\n\tdiffIndexWith(ref: string, path: string): Promise<string>;\n\tdiffIndexWith(ref: string, path?: string): Promise<string | Change[]> {\n\t\treturn this.#repository.diffIndexWith(ref, path);\n\t}\n\n\tdiffBlobs(object1: string, object2: string): Promise<string> {\n\t\treturn this.#repository.diffBlobs(object1, object2);\n\t}\n\n\tdiffBetween(ref1: string, ref2: string): Promise<Change[]>;\n\tdiffBetween(ref1: string, ref2: string, path: string): Promise<string>;\n\tdiffBetween(ref1: string, ref2: string, path?: string): Promise<string | Change[]> {\n\t\treturn this.#repository.diffBetween(ref1, ref2, path);\n\t}\n\n\thashObject(data: string): Promise<string> {\n\t\treturn this.#repository.hashObject(data);\n\t}\n\n\tcreateBranch(name: string, checkout: boolean, ref?: string | undefined): Promise<void> {\n\t\treturn this.#repository.branch(name, checkout, ref);\n\t}\n\n\tdeleteBranch(name: string, force?: boolean): Promise<void> {\n\t\treturn this.#repository.deleteBranch(name, force);\n\t}\n\n\tgetBranch(name: string): Promise<Branch> {\n\t\treturn this.#repository.getBranch(name);\n\t}\n\n\tgetBranches(query: BranchQuery, cancellationToken?: CancellationToken): Promise<Ref[]> {\n\t\treturn this.#repository.getBranches(query, cancellationToken);\n\t}\n\n\tgetBranchBase(name: string): Promise<Branch | undefined> {\n\t\treturn this.#repository.getBranchBase(name);\n\t}\n\n\tsetBranchUpstream(name: string, upstream: string): Promise<void> {\n\t\treturn this.#repository.setBranchUpstream(name, upstream);\n\t}\n\n\tgetRefs(query: RefQuery, cancellationToken?: CancellationToken): Promise<Ref[]> {\n\t\treturn this.#repository.getRefs(query, cancellationToken);\n\t}\n\n\tcheckIgnore(paths: string[]): Promise<Set<string>> {\n\t\treturn this.#repository.checkIgnore(paths);\n\t}\n\n\tgetMergeBase(ref1: string, ref2: string): Promise<string | undefined> {\n\t\treturn this.#repository.getMergeBase(ref1, ref2);\n\t}\n\n\ttag(name: string, message: string, ref?: string | undefined): Promise<void> {\n\t\treturn this.#repository.tag({ name, message, ref });\n\t}\n\n\tdeleteTag(name: string): Promise<void> {\n\t\treturn this.#repository.deleteTag(name);\n\t}\n\n\tstatus(): Promise<void> {\n\t\treturn this.#repository.status();\n\t}\n\n\tcheckout(treeish: string): Promise<void> {\n\t\treturn this.#repository.checkout(treeish);\n\t}\n\n\taddRemote(name: string, url: string): Promise<void> {\n\t\treturn this.#repository.addRemote(name, url);\n\t}\n\n\tremoveRemote(name: string): Promise<void> {\n\t\treturn this.#repository.removeRemote(name);\n\t}\n\n\trenameRemote(name: string, newName: string): Promise<void> {\n\t\treturn this.#repository.renameRemote(name, newName);\n\t}\n\n\tfetch(arg0?: FetchOptions | string | undefined,\n\t\tref?: string | undefined,\n\t\tdepth?: number | undefined,\n\t\tprune?: boolean | undefined\n\t): Promise<void> {\n\t\tif (arg0 !== undefined && typeof arg0 !== 'string') {\n\t\t\treturn this.#repository.fetch(arg0);\n\t\t}\n\n\t\treturn this.#repository.fetch({ remote: arg0, ref, depth, prune });\n\t}\n\n\tpull(unshallow?: boolean): Promise<void> {\n\t\treturn this.#repository.pull(undefined, unshallow);\n\t}\n\n\tpush(remoteName?: string, branchName?: string, setUpstream: boolean = false, force?: ForcePushMode): Promise<void> {\n\t\treturn this.#repository.pushTo(remoteName, branchName, setUpstream, force);\n\t}\n\n\tblame(path: string): Promise<string> {\n\t\treturn this.#repository.blame(path);\n\t}\n\n\tlog(options?: LogOptions): Promise<Commit[]> {\n\t\treturn this.#repository.log(options);\n\t}\n\n\tcommit(message: string, opts?: CommitOptions): Promise<void> {\n\t\treturn this.#repository.commit(message, { ...opts, postCommitCommand: null });\n\t}\n\n\tmerge(ref: string): Promise<void> {\n\t\treturn this.#repository.merge(ref);\n\t}\n\n\tmergeAbort(): Promise<void> {\n\t\treturn this.#repository.mergeAbort();\n\t}\n\n\tapplyStash(index?: number): Promise<void> {\n\t\treturn this.#repository.applyStash(index);\n\t}\n\n\tpopStash(index?: number): Promise<void> {\n\t\treturn this.#repository.popStash(index);\n\t}\n\n\tdropStash(index?: number): Promise<void> {\n\t\treturn this.#repository.dropStash(index);\n\t}\n}\n\nexport class ApiGit implements Git {\n\t#model: Model;\n\n\tprivate _env: { [key: string]: string } | undefined;\n\n\tconstructor(model: Model) { this.#model = model; }\n\n\tget path(): string { return this.#model.git.path; }\n\n\tget env(): { [key: string]: string } {\n\t\tif (this._env === undefined) {\n\t\t\tthis._env = Object.freeze(this.#model.git.env);\n\t\t}\n\n\t\treturn this._env;\n\t}\n}\n\nexport class ApiImpl implements API {\n\t#model: Model;\n\treadonly git: ApiGit;\n\n\tconstructor(model: Model) {\n\t\tthis.#model = model;\n\t\tthis.git = new ApiGit(this.#model);\n\t}\n\n\tget state(): APIState {\n\t\treturn this.#model.state;\n\t}\n\n\tget onDidChangeState(): Event<APIState> {\n\t\treturn this.#model.onDidChangeState;\n\t}\n\n\tget onDidPublish(): Event<PublishEvent> {\n\t\treturn this.#model.onDidPublish;\n\t}\n\n\tget onDidOpenRepository(): Event<Repository> {\n\t\treturn mapEvent(this.#model.onDidOpenRepository, r => new ApiRepository(r));\n\t}\n\n\tget onDidCloseRepository(): Event<Repository> {\n\t\treturn mapEvent(this.#model.onDidCloseRepository, r => new ApiRepository(r));\n\t}\n\n\tget repositories(): Repository[] {\n\t\treturn this.#model.repositories.map(r => new ApiRepository(r));\n\t}\n\n\ttoGitUri(uri: Uri, ref: string): Uri {\n\t\treturn toGitUri(uri, ref);\n\t}\n\n\tgetRepository(uri: Uri): Repository | null {\n\t\tconst result = this.#model.getRepository(uri);\n\t\treturn result ? new ApiRepository(result) : null;\n\t}\n\n\tasync init(root: Uri, options?: InitOptions): Promise<Repository | null> {\n\t\tconst path = root.fsPath;\n\t\tawait this.#model.git.init(path, options);\n\t\tawait this.#model.openRepository(path);\n\t\treturn this.getRepository(root) || null;\n\t}\n\n\tasync openRepository(root: Uri): Promise<Repository | null> {\n\t\tif (root.scheme !== 'file') {\n\t\t\treturn null;\n\t\t}\n\n\t\tawait this.#model.openRepository(root.fsPath);\n\t\treturn this.getRepository(root) || null;\n\t}\n\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable {\n\t\tconst disposables: Disposable[] = [];\n\n\t\tif (provider.publishRepository) {\n\t\t\tdisposables.push(this.#model.registerRemoteSourcePublisher(provider as RemoteSourcePublisher));\n\t\t}\n\t\tdisposables.push(GitBaseApi.getAPI().registerRemoteSourceProvider(provider));\n\n\t\treturn combinedDisposable(disposables);\n\t}\n\n\tregisterRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable {\n\t\treturn this.#model.registerRemoteSourcePublisher(publisher);\n\t}\n\n\tregisterCredentialsProvider(provider: CredentialsProvider): Disposable {\n\t\treturn this.#model.registerCredentialsProvider(provider);\n\t}\n\n\tregisterPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable {\n\t\treturn this.#model.registerPostCommitCommandsProvider(provider);\n\t}\n\n\tregisterPushErrorHandler(handler: PushErrorHandler): Disposable {\n\t\treturn this.#model.registerPushErrorHandler(handler);\n\t}\n\n\tregisterSourceControlHistoryItemDetailsProvider(provider: SourceControlHistoryItemDetailsProvider): Disposable {\n\t\treturn this.#model.registerSourceControlHistoryItemDetailsProvider(provider);\n\t}\n\n\tregisterBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable {\n\t\treturn this.#model.registerBranchProtectionProvider(root, provider);\n\t}\n}\n\nfunction getRefType(type: RefType): string {\n\tswitch (type) {\n\t\tcase RefType.Head: return 'Head';\n\t\tcase RefType.RemoteHead: return 'RemoteHead';\n\t\tcase RefType.Tag: return 'Tag';\n\t}\n\n\treturn 'unknown';\n}\n\nfunction getStatus(status: Status): string {\n\tswitch (status) {\n\t\tcase Status.INDEX_MODIFIED: return 'INDEX_MODIFIED';\n\t\tcase Status.INDEX_ADDED: return 'INDEX_ADDED';\n\t\tcase Status.INDEX_DELETED: return 'INDEX_DELETED';\n\t\tcase Status.INDEX_RENAMED: return 'INDEX_RENAMED';\n\t\tcase Status.INDEX_COPIED: return 'INDEX_COPIED';\n\t\tcase Status.MODIFIED: return 'MODIFIED';\n\t\tcase Status.DELETED: return 'DELETED';\n\t\tcase Status.UNTRACKED: return 'UNTRACKED';\n\t\tcase Status.IGNORED: return 'IGNORED';\n\t\tcase Status.INTENT_TO_ADD: return 'INTENT_TO_ADD';\n\t\tcase Status.INTENT_TO_RENAME: return 'INTENT_TO_RENAME';\n\t\tcase Status.TYPE_CHANGED: return 'TYPE_CHANGED';\n\t\tcase Status.ADDED_BY_US: return 'ADDED_BY_US';\n\t\tcase Status.ADDED_BY_THEM: return 'ADDED_BY_THEM';\n\t\tcase Status.DELETED_BY_US: return 'DELETED_BY_US';\n\t\tcase Status.DELETED_BY_THEM: return 'DELETED_BY_THEM';\n\t\tcase Status.BOTH_ADDED: return 'BOTH_ADDED';\n\t\tcase Status.BOTH_DELETED: return 'BOTH_DELETED';\n\t\tcase Status.BOTH_MODIFIED: return 'BOTH_MODIFIED';\n\t}\n\n\treturn 'UNKNOWN';\n}\n\nexport function registerAPICommands(extension: GitExtensionImpl): Disposable {\n\tconst disposables: Disposable[] = [];\n\n\tdisposables.push(commands.registerCommand('git.api.getRepositories', () => {\n\t\tconst api = extension.getAPI(1);\n\t\treturn api.repositories.map(r => r.rootUri.toString());\n\t}));\n\n\tdisposables.push(commands.registerCommand('git.api.getRepositoryState', (uri: string) => {\n\t\tconst api = extension.getAPI(1);\n\t\tconst repository = api.getRepository(Uri.parse(uri));\n\n\t\tif (!repository) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst state = repository.state;\n\n\t\tconst ref = (ref: Ref | undefined) => (ref && { ...ref, type: getRefType(ref.type) });\n\t\tconst change = (change: Change) => ({\n\t\t\turi: change.uri.toString(),\n\t\t\toriginalUri: change.originalUri.toString(),\n\t\t\trenameUri: change.renameUri?.toString(),\n\t\t\tstatus: getStatus(change.status)\n\t\t});\n\n\t\treturn {\n\t\t\tHEAD: ref(state.HEAD),\n\t\t\trefs: state.refs.map(ref),\n\t\t\tremotes: state.remotes,\n\t\t\tsubmodules: state.submodules,\n\t\t\trebaseCommit: state.rebaseCommit,\n\t\t\tmergeChanges: state.mergeChanges.map(change),\n\t\t\tindexChanges: state.indexChanges.map(change),\n\t\t\tworkingTreeChanges: state.workingTreeChanges.map(change)\n\t\t};\n\t}));\n\n\tdisposables.push(commands.registerCommand('git.api.getRemoteSources', (opts?: PickRemoteSourceOptions) => {\n\t\treturn commands.executeCommand('git-base.api.getRemoteSources', opts);\n\t}));\n\n\treturn Disposable.from(...disposables);\n}\n"
  },
  {
    "path": "extensions/git/src/api/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Model } from '../model';\nimport { GitExtension, Repository, API } from './git';\nimport { ApiRepository, ApiImpl } from './api1';\nimport { Event, EventEmitter } from 'vscode';\n\nexport function deprecated(_target: any, key: string, descriptor: any): void {\n\tif (typeof descriptor.value !== 'function') {\n\t\tthrow new Error('not supported');\n\t}\n\n\tconst fn = descriptor.value;\n\tdescriptor.value = function () {\n\t\tconsole.warn(`Git extension API method '${key}' is deprecated.`);\n\t\treturn fn.apply(this, arguments);\n\t};\n}\n\nexport class GitExtensionImpl implements GitExtension {\n\n\tenabled: boolean = false;\n\n\tprivate _onDidChangeEnablement = new EventEmitter<boolean>();\n\treadonly onDidChangeEnablement: Event<boolean> = this._onDidChangeEnablement.event;\n\n\tprivate _model: Model | undefined = undefined;\n\n\tset model(model: Model | undefined) {\n\t\tthis._model = model;\n\n\t\tconst enabled = !!model;\n\n\t\tif (this.enabled === enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enabled = enabled;\n\t\tthis._onDidChangeEnablement.fire(this.enabled);\n\t}\n\n\tget model(): Model | undefined {\n\t\treturn this._model;\n\t}\n\n\tconstructor(model?: Model) {\n\t\tif (model) {\n\t\t\tthis.enabled = true;\n\t\t\tthis._model = model;\n\t\t}\n\t}\n\n\t@deprecated\n\tasync getGitPath(): Promise<string> {\n\t\tif (!this._model) {\n\t\t\tthrow new Error('Git model not found');\n\t\t}\n\n\t\treturn this._model.git.path;\n\t}\n\n\t@deprecated\n\tasync getRepositories(): Promise<Repository[]> {\n\t\tif (!this._model) {\n\t\t\tthrow new Error('Git model not found');\n\t\t}\n\n\t\treturn this._model.repositories.map(repository => new ApiRepository(repository));\n\t}\n\n\tgetAPI(version: number): API {\n\t\tif (!this._model) {\n\t\t\tthrow new Error('Git model not found');\n\t\t}\n\n\t\tif (version !== 1) {\n\t\t\tthrow new Error(`No API version ${version} found.`);\n\t\t}\n\n\t\treturn new ApiImpl(this._model);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/api/git.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Uri, Event, Disposable, ProviderResult, Command, CancellationToken, SourceControlHistoryItem } from 'vscode';\nexport { ProviderResult } from 'vscode';\n\nexport interface Git {\n\treadonly path: string;\n}\n\nexport interface InputBox {\n\tvalue: string;\n}\n\nexport const enum ForcePushMode {\n\tForce,\n\tForceWithLease,\n\tForceWithLeaseIfIncludes,\n}\n\nexport const enum RefType {\n\tHead,\n\tRemoteHead,\n\tTag\n}\n\nexport interface Ref {\n\treadonly type: RefType;\n\treadonly name?: string;\n\treadonly commit?: string;\n\treadonly commitDetails?: Commit;\n\treadonly remote?: string;\n}\n\nexport interface UpstreamRef {\n\treadonly remote: string;\n\treadonly name: string;\n\treadonly commit?: string;\n}\n\nexport interface Branch extends Ref {\n\treadonly upstream?: UpstreamRef;\n\treadonly ahead?: number;\n\treadonly behind?: number;\n}\n\nexport interface CommitShortStat {\n\treadonly files: number;\n\treadonly insertions: number;\n\treadonly deletions: number;\n}\n\nexport interface Commit {\n\treadonly hash: string;\n\treadonly message: string;\n\treadonly parents: string[];\n\treadonly authorDate?: Date;\n\treadonly authorName?: string;\n\treadonly authorEmail?: string;\n\treadonly commitDate?: Date;\n\treadonly shortStat?: CommitShortStat;\n}\n\nexport interface Submodule {\n\treadonly name: string;\n\treadonly path: string;\n\treadonly url: string;\n}\n\nexport interface Remote {\n\treadonly name: string;\n\treadonly fetchUrl?: string;\n\treadonly pushUrl?: string;\n\treadonly isReadOnly: boolean;\n}\n\nexport const enum Status {\n\tINDEX_MODIFIED,\n\tINDEX_ADDED,\n\tINDEX_DELETED,\n\tINDEX_RENAMED,\n\tINDEX_COPIED,\n\n\tMODIFIED,\n\tDELETED,\n\tUNTRACKED,\n\tIGNORED,\n\tINTENT_TO_ADD,\n\tINTENT_TO_RENAME,\n\tTYPE_CHANGED,\n\n\tADDED_BY_US,\n\tADDED_BY_THEM,\n\tDELETED_BY_US,\n\tDELETED_BY_THEM,\n\tBOTH_ADDED,\n\tBOTH_DELETED,\n\tBOTH_MODIFIED\n}\n\nexport interface Change {\n\n\t/**\n\t * Returns either `originalUri` or `renameUri`, depending\n\t * on whether this change is a rename change. When\n\t * in doubt always use `uri` over the other two alternatives.\n\t */\n\treadonly uri: Uri;\n\treadonly originalUri: Uri;\n\treadonly renameUri: Uri | undefined;\n\treadonly status: Status;\n}\n\nexport interface RepositoryState {\n\treadonly HEAD: Branch | undefined;\n\treadonly refs: Ref[];\n\treadonly remotes: Remote[];\n\treadonly submodules: Submodule[];\n\treadonly rebaseCommit: Commit | undefined;\n\n\treadonly mergeChanges: Change[];\n\treadonly indexChanges: Change[];\n\treadonly workingTreeChanges: Change[];\n\treadonly untrackedChanges: Change[];\n\n\treadonly onDidChange: Event<void>;\n}\n\nexport interface RepositoryUIState {\n\treadonly selected: boolean;\n\treadonly onDidChange: Event<void>;\n}\n\n/**\n * Log options.\n */\nexport interface LogOptions {\n\t/** Max number of log entries to retrieve. If not specified, the default is 32. */\n\treadonly maxEntries?: number;\n\treadonly path?: string;\n\t/** A commit range, such as \"0a47c67f0fb52dd11562af48658bc1dff1d75a38..0bb4bdea78e1db44d728fd6894720071e303304f\" */\n\treadonly range?: string;\n\treadonly reverse?: boolean;\n\treadonly sortByAuthorDate?: boolean;\n\treadonly shortStats?: boolean;\n\treadonly author?: string;\n\treadonly refNames?: string[];\n\treadonly maxParents?: number;\n\treadonly skip?: number;\n}\n\nexport interface CommitOptions {\n\tall?: boolean | 'tracked';\n\tamend?: boolean;\n\tsignoff?: boolean;\n\tsignCommit?: boolean;\n\tempty?: boolean;\n\tnoVerify?: boolean;\n\trequireUserConfig?: boolean;\n\tuseEditor?: boolean;\n\tverbose?: boolean;\n\t/**\n\t * string    - execute the specified command after the commit operation\n\t * undefined - execute the command specified in git.postCommitCommand\n\t *             after the commit operation\n\t * null      - do not execute any command after the commit operation\n\t */\n\tpostCommitCommand?: string | null;\n}\n\nexport interface FetchOptions {\n\tremote?: string;\n\tref?: string;\n\tall?: boolean;\n\tprune?: boolean;\n\tdepth?: number;\n}\n\nexport interface InitOptions {\n\tdefaultBranch?: string;\n}\n\nexport interface RefQuery {\n\treadonly contains?: string;\n\treadonly count?: number;\n\treadonly pattern?: string | string[];\n\treadonly sort?: 'alphabetically' | 'committerdate';\n}\n\nexport interface BranchQuery extends RefQuery {\n\treadonly remote?: boolean;\n}\n\nexport interface Repository {\n\n\treadonly rootUri: Uri;\n\treadonly inputBox: InputBox;\n\treadonly state: RepositoryState;\n\treadonly ui: RepositoryUIState;\n\n\treadonly onDidCommit: Event<void>;\n\treadonly onDidCheckout: Event<void>;\n\n\tgetConfigs(): Promise<{ key: string; value: string; }[]>;\n\tgetConfig(key: string): Promise<string>;\n\tsetConfig(key: string, value: string): Promise<string>;\n\tunsetConfig(key: string): Promise<string>;\n\tgetGlobalConfig(key: string): Promise<string>;\n\n\tgetObjectDetails(treeish: string, path: string): Promise<{ mode: string, object: string, size: number }>;\n\tdetectObjectType(object: string): Promise<{ mimetype: string, encoding?: string }>;\n\tbuffer(ref: string, path: string): Promise<Buffer>;\n\tshow(ref: string, path: string): Promise<string>;\n\tgetCommit(ref: string): Promise<Commit>;\n\n\tadd(paths: string[]): Promise<void>;\n\trevert(paths: string[]): Promise<void>;\n\tclean(paths: string[]): Promise<void>;\n\n\tapply(patch: string, reverse?: boolean): Promise<void>;\n\tdiff(cached?: boolean): Promise<string>;\n\tdiffWithHEAD(): Promise<Change[]>;\n\tdiffWithHEAD(path: string): Promise<string>;\n\tdiffWith(ref: string): Promise<Change[]>;\n\tdiffWith(ref: string, path: string): Promise<string>;\n\tdiffIndexWithHEAD(): Promise<Change[]>;\n\tdiffIndexWithHEAD(path: string): Promise<string>;\n\tdiffIndexWith(ref: string): Promise<Change[]>;\n\tdiffIndexWith(ref: string, path: string): Promise<string>;\n\tdiffBlobs(object1: string, object2: string): Promise<string>;\n\tdiffBetween(ref1: string, ref2: string): Promise<Change[]>;\n\tdiffBetween(ref1: string, ref2: string, path: string): Promise<string>;\n\n\thashObject(data: string): Promise<string>;\n\n\tcreateBranch(name: string, checkout: boolean, ref?: string): Promise<void>;\n\tdeleteBranch(name: string, force?: boolean): Promise<void>;\n\tgetBranch(name: string): Promise<Branch>;\n\tgetBranches(query: BranchQuery, cancellationToken?: CancellationToken): Promise<Ref[]>;\n\tgetBranchBase(name: string): Promise<Branch | undefined>;\n\tsetBranchUpstream(name: string, upstream: string): Promise<void>;\n\n\tcheckIgnore(paths: string[]): Promise<Set<string>>;\n\n\tgetRefs(query: RefQuery, cancellationToken?: CancellationToken): Promise<Ref[]>;\n\n\tgetMergeBase(ref1: string, ref2: string): Promise<string | undefined>;\n\n\ttag(name: string, upstream: string): Promise<void>;\n\tdeleteTag(name: string): Promise<void>;\n\n\tstatus(): Promise<void>;\n\tcheckout(treeish: string): Promise<void>;\n\n\taddRemote(name: string, url: string): Promise<void>;\n\tremoveRemote(name: string): Promise<void>;\n\trenameRemote(name: string, newName: string): Promise<void>;\n\n\tfetch(options?: FetchOptions): Promise<void>;\n\tfetch(remote?: string, ref?: string, depth?: number): Promise<void>;\n\tpull(unshallow?: boolean): Promise<void>;\n\tpush(remoteName?: string, branchName?: string, setUpstream?: boolean, force?: ForcePushMode): Promise<void>;\n\n\tblame(path: string): Promise<string>;\n\tlog(options?: LogOptions): Promise<Commit[]>;\n\n\tcommit(message: string, opts?: CommitOptions): Promise<void>;\n\tmerge(ref: string): Promise<void>;\n\tmergeAbort(): Promise<void>;\n\n\tapplyStash(index?: number): Promise<void>;\n\tpopStash(index?: number): Promise<void>;\n\tdropStash(index?: number): Promise<void>;\n}\n\nexport interface RemoteSource {\n\treadonly name: string;\n\treadonly description?: string;\n\treadonly url: string | string[];\n}\n\nexport interface RemoteSourceProvider {\n\treadonly name: string;\n\treadonly icon?: string; // codicon name\n\treadonly supportsQuery?: boolean;\n\tgetRemoteSources(query?: string): ProviderResult<RemoteSource[]>;\n\tgetBranches?(url: string): ProviderResult<string[]>;\n\tpublishRepository?(repository: Repository): Promise<void>;\n}\n\nexport interface RemoteSourcePublisher {\n\treadonly name: string;\n\treadonly icon?: string; // codicon name\n\tpublishRepository(repository: Repository): Promise<void>;\n}\n\nexport interface Credentials {\n\treadonly username: string;\n\treadonly password: string;\n}\n\nexport interface CredentialsProvider {\n\tgetCredentials(host: Uri): ProviderResult<Credentials>;\n}\n\nexport interface PostCommitCommandsProvider {\n\tgetCommands(repository: Repository): Command[];\n}\n\nexport interface PushErrorHandler {\n\thandlePushError(repository: Repository, remote: Remote, refspec: string, error: Error & { gitErrorCode: GitErrorCodes }): Promise<boolean>;\n}\n\nexport interface BranchProtection {\n\treadonly remote: string;\n\treadonly rules: BranchProtectionRule[];\n}\n\nexport interface BranchProtectionRule {\n\treadonly include?: string[];\n\treadonly exclude?: string[];\n}\n\nexport interface BranchProtectionProvider {\n\tonDidChangeBranchProtection: Event<Uri>;\n\tprovideBranchProtection(): BranchProtection[];\n}\n\nexport interface AvatarQueryCommit {\n\treadonly hash: string;\n\treadonly authorName?: string;\n\treadonly authorEmail?: string;\n}\n\nexport interface AvatarQuery {\n\treadonly commits: AvatarQueryCommit[];\n\treadonly size: number;\n}\n\nexport interface SourceControlHistoryItemDetailsProvider {\n\tprovideAvatar(repository: Repository, query: AvatarQuery): ProviderResult<Map<string, string | undefined>>;\n\tprovideHoverCommands(repository: Repository): ProviderResult<Command[]>;\n\tprovideMessageLinks(repository: Repository, message: string): ProviderResult<string>;\n}\n\nexport type APIState = 'uninitialized' | 'initialized';\n\nexport interface PublishEvent {\n\trepository: Repository;\n\tbranch?: string;\n}\n\nexport interface API {\n\treadonly state: APIState;\n\treadonly onDidChangeState: Event<APIState>;\n\treadonly onDidPublish: Event<PublishEvent>;\n\treadonly git: Git;\n\treadonly repositories: Repository[];\n\treadonly onDidOpenRepository: Event<Repository>;\n\treadonly onDidCloseRepository: Event<Repository>;\n\n\ttoGitUri(uri: Uri, ref: string): Uri;\n\tgetRepository(uri: Uri): Repository | null;\n\tinit(root: Uri, options?: InitOptions): Promise<Repository | null>;\n\topenRepository(root: Uri): Promise<Repository | null>\n\n\tregisterRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable;\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;\n\tregisterCredentialsProvider(provider: CredentialsProvider): Disposable;\n\tregisterPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable;\n\tregisterPushErrorHandler(handler: PushErrorHandler): Disposable;\n\tregisterBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable;\n\tregisterSourceControlHistoryItemDetailsProvider(provider: SourceControlHistoryItemDetailsProvider): Disposable;\n}\n\nexport interface GitExtension {\n\n\treadonly enabled: boolean;\n\treadonly onDidChangeEnablement: Event<boolean>;\n\n\t/**\n\t * Returns a specific API version.\n\t *\n\t * Throws error if git extension is disabled. You can listen to the\n\t * [GitExtension.onDidChangeEnablement](#GitExtension.onDidChangeEnablement) event\n\t * to know when the extension becomes enabled/disabled.\n\t *\n\t * @param version Version number.\n\t * @returns API instance\n\t */\n\tgetAPI(version: 1): API;\n}\n\nexport const enum GitErrorCodes {\n\tBadConfigFile = 'BadConfigFile',\n\tAuthenticationFailed = 'AuthenticationFailed',\n\tNoUserNameConfigured = 'NoUserNameConfigured',\n\tNoUserEmailConfigured = 'NoUserEmailConfigured',\n\tNoRemoteRepositorySpecified = 'NoRemoteRepositorySpecified',\n\tNotAGitRepository = 'NotAGitRepository',\n\tNotAtRepositoryRoot = 'NotAtRepositoryRoot',\n\tConflict = 'Conflict',\n\tStashConflict = 'StashConflict',\n\tUnmergedChanges = 'UnmergedChanges',\n\tPushRejected = 'PushRejected',\n\tForcePushWithLeaseRejected = 'ForcePushWithLeaseRejected',\n\tForcePushWithLeaseIfIncludesRejected = 'ForcePushWithLeaseIfIncludesRejected',\n\tRemoteConnectionError = 'RemoteConnectionError',\n\tDirtyWorkTree = 'DirtyWorkTree',\n\tCantOpenResource = 'CantOpenResource',\n\tGitNotFound = 'GitNotFound',\n\tCantCreatePipe = 'CantCreatePipe',\n\tPermissionDenied = 'PermissionDenied',\n\tCantAccessRemote = 'CantAccessRemote',\n\tRepositoryNotFound = 'RepositoryNotFound',\n\tRepositoryIsLocked = 'RepositoryIsLocked',\n\tBranchNotFullyMerged = 'BranchNotFullyMerged',\n\tNoRemoteReference = 'NoRemoteReference',\n\tInvalidBranchName = 'InvalidBranchName',\n\tBranchAlreadyExists = 'BranchAlreadyExists',\n\tNoLocalChanges = 'NoLocalChanges',\n\tNoStashFound = 'NoStashFound',\n\tLocalChangesOverwritten = 'LocalChangesOverwritten',\n\tNoUpstreamBranch = 'NoUpstreamBranch',\n\tIsInSubmodule = 'IsInSubmodule',\n\tWrongCase = 'WrongCase',\n\tCantLockRef = 'CantLockRef',\n\tCantRebaseMultipleBranches = 'CantRebaseMultipleBranches',\n\tPatchDoesNotApply = 'PatchDoesNotApply',\n\tNoPathFound = 'NoPathFound',\n\tUnknownPath = 'UnknownPath',\n\tEmptyCommitMessage = 'EmptyCommitMessage',\n\tBranchFastForwardRejected = 'BranchFastForwardRejected',\n\tBranchNotYetBorn = 'BranchNotYetBorn',\n\tTagConflict = 'TagConflict',\n\tCherryPickEmpty = 'CherryPickEmpty',\n\tCherryPickConflict = 'CherryPickConflict'\n}\n"
  },
  {
    "path": "extensions/git/src/askpass-empty.sh",
    "content": "#!/bin/sh\necho ''"
  },
  {
    "path": "extensions/git/src/askpass-main.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs';\nimport { IPCClient } from './ipc/ipcClient';\n\nfunction fatal(err: any): void {\n\tconsole.error('Missing or invalid credentials.');\n\tconsole.error(err);\n\tprocess.exit(1);\n}\n\nfunction main(argv: string[]): void {\n\tif (!process.env['VSCODE_GIT_ASKPASS_PIPE']) {\n\t\treturn fatal('Missing pipe');\n\t}\n\n\tif (!process.env['VSCODE_GIT_ASKPASS_TYPE']) {\n\t\treturn fatal('Missing type');\n\t}\n\n\tif (process.env['VSCODE_GIT_ASKPASS_TYPE'] !== 'https' && process.env['VSCODE_GIT_ASKPASS_TYPE'] !== 'ssh') {\n\t\treturn fatal(`Invalid type: ${process.env['VSCODE_GIT_ASKPASS_TYPE']}`);\n\t}\n\n\tif (process.env['VSCODE_GIT_COMMAND'] === 'fetch' && !!process.env['VSCODE_GIT_FETCH_SILENT']) {\n\t\treturn fatal('Skip silent fetch commands');\n\t}\n\n\tconst output = process.env['VSCODE_GIT_ASKPASS_PIPE'] as string;\n\tconst askpassType = process.env['VSCODE_GIT_ASKPASS_TYPE'] as 'https' | 'ssh';\n\n\t// HTTPS (username | password), SSH (passphrase | authenticity)\n\tconst request = askpassType === 'https' ? argv[2] : argv[3];\n\n\tlet host: string | undefined,\n\t\tfile: string | undefined,\n\t\tfingerprint: string | undefined;\n\n\tif (askpassType === 'https') {\n\t\thost = argv[4].replace(/^[\"']+|[\"':]+$/g, '');\n\t}\n\n\tif (askpassType === 'ssh') {\n\t\tif (/passphrase/i.test(request)) {\n\t\t\t// passphrase\n\t\t\t// Commit signing - Enter passphrase:\n\t\t\t// Git operation  - Enter passphrase for key '/c/Users/<username>/.ssh/id_ed25519':\n\t\t\tfile = argv[6]?.replace(/^[\"']+|[\"':]+$/g, '');\n\t\t} else {\n\t\t\t// authenticity\n\t\t\thost = argv[6].replace(/^[\"']+|[\"':]+$/g, '');\n\t\t\tfingerprint = argv[15];\n\t\t}\n\t}\n\n\tconst ipcClient = new IPCClient('askpass');\n\tipcClient.call({ askpassType, request, host, file, fingerprint }).then(res => {\n\t\tfs.writeFileSync(output, res + '\\n');\n\t\tsetTimeout(() => process.exit(0), 0);\n\t}).catch(err => fatal(err));\n}\n\nmain(process.argv);\n"
  },
  {
    "path": "extensions/git/src/askpass.sh",
    "content": "#!/bin/sh\nVSCODE_GIT_ASKPASS_PIPE=`mktemp`\nELECTRON_RUN_AS_NODE=\"1\" VSCODE_GIT_ASKPASS_PIPE=\"$VSCODE_GIT_ASKPASS_PIPE\" VSCODE_GIT_ASKPASS_TYPE=\"https\" \"$VSCODE_GIT_ASKPASS_NODE\" \"$VSCODE_GIT_ASKPASS_MAIN\" $VSCODE_GIT_ASKPASS_EXTRA_ARGS $*\ncat $VSCODE_GIT_ASKPASS_PIPE\nrm $VSCODE_GIT_ASKPASS_PIPE\n"
  },
  {
    "path": "extensions/git/src/askpass.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { window, InputBoxOptions, Uri, Disposable, workspace, QuickPickOptions, l10n } from 'vscode';\nimport { IDisposable, EmptyDisposable, toDisposable } from './util';\nimport * as path from 'path';\nimport { IIPCHandler, IIPCServer } from './ipc/ipcServer';\nimport { CredentialsProvider, Credentials } from './api/git';\nimport { ITerminalEnvironmentProvider } from './terminal';\n\nexport class Askpass implements IIPCHandler, ITerminalEnvironmentProvider {\n\n\tprivate env: { [key: string]: string };\n\tprivate sshEnv: { [key: string]: string };\n\tprivate disposable: IDisposable = EmptyDisposable;\n\tprivate cache = new Map<string, Credentials>();\n\tprivate credentialsProviders = new Set<CredentialsProvider>();\n\n\treadonly featureDescription = 'git auth provider';\n\n\tconstructor(private ipc?: IIPCServer) {\n\t\tif (ipc) {\n\t\t\tthis.disposable = ipc.registerHandler('askpass', this);\n\t\t}\n\n\t\tthis.env = {\n\t\t\t// GIT_ASKPASS\n\t\t\tGIT_ASKPASS: path.join(__dirname, this.ipc ? 'askpass.sh' : 'askpass-empty.sh'),\n\t\t\t// VSCODE_GIT_ASKPASS\n\t\t\tVSCODE_GIT_ASKPASS_NODE: process.execPath,\n\t\t\tVSCODE_GIT_ASKPASS_EXTRA_ARGS: '',\n\t\t\tVSCODE_GIT_ASKPASS_MAIN: path.join(__dirname, 'askpass-main.js'),\n\t\t};\n\n\t\tthis.sshEnv = {\n\t\t\t// SSH_ASKPASS\n\t\t\tSSH_ASKPASS: path.join(__dirname, this.ipc ? 'ssh-askpass.sh' : 'ssh-askpass-empty.sh'),\n\t\t\tSSH_ASKPASS_REQUIRE: 'force',\n\t\t};\n\t}\n\n\tasync handle(payload:\n\t\t{ askpassType: 'https'; request: string; host: string } |\n\t\t{ askpassType: 'ssh'; request: string; host?: string; file?: string; fingerprint?: string }\n\t): Promise<string> {\n\t\tconst config = workspace.getConfiguration('git', null);\n\t\tconst enabled = config.get<boolean>('enabled');\n\n\t\tif (!enabled) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// https\n\t\tif (payload.askpassType === 'https') {\n\t\t\treturn await this.handleAskpass(payload.request, payload.host);\n\t\t}\n\n\t\t// ssh\n\t\treturn await this.handleSSHAskpass(payload.request, payload.host, payload.file, payload.fingerprint);\n\t}\n\n\tasync handleAskpass(request: string, host: string): Promise<string> {\n\t\tconst uri = Uri.parse(host);\n\t\tconst authority = uri.authority.replace(/^.*@/, '');\n\t\tconst password = /password/i.test(request);\n\t\tconst cached = this.cache.get(authority);\n\n\t\tif (cached && password) {\n\t\t\tthis.cache.delete(authority);\n\t\t\treturn cached.password;\n\t\t}\n\n\t\tif (!password) {\n\t\t\tfor (const credentialsProvider of this.credentialsProviders) {\n\t\t\t\ttry {\n\t\t\t\t\tconst credentials = await credentialsProvider.getCredentials(uri);\n\n\t\t\t\t\tif (credentials) {\n\t\t\t\t\t\tthis.cache.set(authority, credentials);\n\t\t\t\t\t\tsetTimeout(() => this.cache.delete(authority), 60_000);\n\t\t\t\t\t\treturn credentials.username;\n\t\t\t\t\t}\n\t\t\t\t} catch { }\n\t\t\t}\n\t\t}\n\n\t\tconst options: InputBoxOptions = {\n\t\t\tpassword,\n\t\t\tplaceHolder: request,\n\t\t\tprompt: `Git: ${host}`,\n\t\t\tignoreFocusOut: true\n\t\t};\n\n\t\treturn await window.showInputBox(options) || '';\n\t}\n\n\tasync handleSSHAskpass(request: string, host?: string, file?: string, fingerprint?: string): Promise<string> {\n\t\t// passphrase\n\t\tif (/passphrase/i.test(request)) {\n\t\t\tconst options: InputBoxOptions = {\n\t\t\t\tpassword: true,\n\t\t\t\tplaceHolder: l10n.t('Passphrase'),\n\t\t\t\tprompt: file ? `SSH Key: ${file}` : undefined,\n\t\t\t\tignoreFocusOut: true\n\t\t\t};\n\n\t\t\treturn await window.showInputBox(options) || '';\n\t\t}\n\n\t\t// authenticity\n\t\tconst options: QuickPickOptions = {\n\t\t\tcanPickMany: false,\n\t\t\tignoreFocusOut: true,\n\t\t\tplaceHolder: l10n.t('Are you sure you want to continue connecting?'),\n\t\t\ttitle: l10n.t('\"{0}\" has fingerprint \"{1}\"', host ?? '', fingerprint ?? '')\n\t\t};\n\t\tconst items = [l10n.t('yes'), l10n.t('no')];\n\t\treturn await window.showQuickPick(items, options) ?? '';\n\t}\n\n\tgetEnv(): { [key: string]: string } {\n\t\tconst config = workspace.getConfiguration('git');\n\t\treturn config.get<boolean>('useIntegratedAskPass') ? { ...this.env, ...this.sshEnv } : {};\n\t}\n\n\tgetTerminalEnv(): { [key: string]: string } {\n\t\tconst config = workspace.getConfiguration('git');\n\t\treturn config.get<boolean>('useIntegratedAskPass') && config.get<boolean>('terminalAuthentication') ? this.env : {};\n\t}\n\n\tregisterCredentialsProvider(provider: CredentialsProvider): Disposable {\n\t\tthis.credentialsProviders.add(provider);\n\t\treturn toDisposable(() => this.credentialsProviders.delete(provider));\n\t}\n\n\tdispose(): void {\n\t\tthis.disposable.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/autofetch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { workspace, Disposable, EventEmitter, Memento, window, MessageItem, ConfigurationTarget, Uri, ConfigurationChangeEvent, l10n, env } from 'vscode';\nimport { Repository } from './repository';\nimport { eventToPromise, filterEvent, onceEvent } from './util';\nimport { GitErrorCodes } from './api/git';\n\nexport class AutoFetcher {\n\n\tprivate static DidInformUser = 'autofetch.didInformUser';\n\n\tprivate _onDidChange = new EventEmitter<boolean>();\n\tprivate onDidChange = this._onDidChange.event;\n\n\tprivate _enabled: boolean = false;\n\tprivate _fetchAll: boolean = false;\n\tget enabled(): boolean { return this._enabled; }\n\tset enabled(enabled: boolean) { this._enabled = enabled; this._onDidChange.fire(enabled); }\n\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(private repository: Repository, private globalState: Memento) {\n\t\tworkspace.onDidChangeConfiguration(this.onConfiguration, this, this.disposables);\n\t\tthis.onConfiguration();\n\n\t\tconst onGoodRemoteOperation = filterEvent(repository.onDidRunOperation, ({ operation, error }) => !error && operation.remote);\n\t\tconst onFirstGoodRemoteOperation = onceEvent(onGoodRemoteOperation);\n\t\tonFirstGoodRemoteOperation(this.onFirstGoodRemoteOperation, this, this.disposables);\n\t}\n\n\tprivate async onFirstGoodRemoteOperation(): Promise<void> {\n\t\tconst didInformUser = !this.globalState.get<boolean>(AutoFetcher.DidInformUser);\n\n\t\tif (this.enabled && !didInformUser) {\n\t\t\tthis.globalState.update(AutoFetcher.DidInformUser, true);\n\t\t}\n\n\t\tconst shouldInformUser = !this.enabled && didInformUser;\n\n\t\tif (!shouldInformUser) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst yes: MessageItem = { title: l10n.t('Yes') };\n\t\tconst no: MessageItem = { isCloseAffordance: true, title: l10n.t('No') };\n\t\tconst askLater: MessageItem = { title: l10n.t('Ask Me Later') };\n\t\tconst result = await window.showInformationMessage(l10n.t('Would you like {0} to [periodically run \"git fetch\"]({1})?', env.appName, 'https://go.microsoft.com/fwlink/?linkid=865294'), yes, no, askLater);\n\n\t\tif (result === askLater) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (result === yes) {\n\t\t\tconst gitConfig = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\t\tgitConfig.update('autofetch', true, ConfigurationTarget.Global);\n\t\t}\n\n\t\tthis.globalState.update(AutoFetcher.DidInformUser, true);\n\t}\n\n\tprivate onConfiguration(e?: ConfigurationChangeEvent): void {\n\t\tif (e !== undefined && !e.affectsConfiguration('git.autofetch')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst gitConfig = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tswitch (gitConfig.get<boolean | 'all'>('autofetch')) {\n\t\t\tcase true:\n\t\t\t\tthis._fetchAll = false;\n\t\t\t\tthis.enable();\n\t\t\t\tbreak;\n\t\t\tcase 'all':\n\t\t\t\tthis._fetchAll = true;\n\t\t\t\tthis.enable();\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\tdefault:\n\t\t\t\tthis._fetchAll = false;\n\t\t\t\tthis.disable();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tenable(): void {\n\t\tif (this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enabled = true;\n\t\tthis.run();\n\t}\n\n\tdisable(): void {\n\t\tthis.enabled = false;\n\t}\n\n\tprivate async run(): Promise<void> {\n\t\twhile (this.enabled) {\n\t\t\tawait this.repository.whenIdleAndFocused();\n\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (this._fetchAll) {\n\t\t\t\t\tawait this.repository.fetchAll({ silent: true });\n\t\t\t\t} else {\n\t\t\t\t\tawait this.repository.fetchDefault({ silent: true });\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tif (err.gitErrorCode === GitErrorCodes.AuthenticationFailed) {\n\t\t\t\t\tthis.disable();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst period = workspace.getConfiguration('git', Uri.file(this.repository.root)).get<number>('autofetchPeriod', 180) * 1000;\n\t\t\tconst timeout = new Promise(c => setTimeout(c, period));\n\t\t\tconst whenDisabled = eventToPromise(filterEvent(this.onDidChange, enabled => !enabled));\n\n\t\t\tawait Promise.race([timeout, whenDisabled]);\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.disable();\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/blame.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { DecorationOptions, l10n, Position, Range, TextEditor, TextEditorChange, TextEditorDecorationType, TextEditorChangeKind, ThemeColor, Uri, window, workspace, EventEmitter, ConfigurationChangeEvent, StatusBarItem, StatusBarAlignment, Command, MarkdownString, languages, HoverProvider, CancellationToken, Hover, TextDocument } from 'vscode';\nimport { Model } from './model';\nimport { dispose, fromNow, getCommitShortHash, IDisposable } from './util';\nimport { Repository } from './repository';\nimport { throttle } from './decorators';\nimport { BlameInformation, Commit } from './git';\nimport { fromGitUri, isGitUri, toGitUri } from './uri';\nimport { emojify, ensureEmojis } from './emoji';\nimport { getWorkingTreeAndIndexDiffInformation, getWorkingTreeDiffInformation } from './staging';\nimport { provideSourceControlHistoryItemAvatar, provideSourceControlHistoryItemHoverCommands, provideSourceControlHistoryItemMessageLinks } from './historyItemDetailsProvider';\nimport { AvatarQuery, AvatarQueryCommit } from './api/git';\nimport { LRUCache } from './cache';\n\nconst AVATAR_SIZE = 20;\n\nfunction lineRangesContainLine(changes: readonly TextEditorChange[], lineNumber: number): boolean {\n\treturn changes.some(c => c.modified.startLineNumber <= lineNumber && lineNumber < c.modified.endLineNumberExclusive);\n}\n\nfunction lineRangeLength(startLineNumber: number, endLineNumberExclusive: number): number {\n\treturn endLineNumberExclusive - startLineNumber;\n}\n\nfunction mapModifiedLineNumberToOriginalLineNumber(lineNumber: number, changes: readonly TextEditorChange[]): number {\n\tif (changes.length === 0) {\n\t\treturn lineNumber;\n\t}\n\n\tfor (const change of changes) {\n\t\t// Do not process changes after the line number\n\t\tif (lineNumber < change.modified.startLineNumber) {\n\t\t\tbreak;\n\t\t}\n\n\t\t// Map line number to the original line number\n\t\tif (change.kind === TextEditorChangeKind.Addition) {\n\t\t\t// Addition\n\t\t\tlineNumber = lineNumber - lineRangeLength(change.modified.startLineNumber, change.modified.endLineNumberExclusive);\n\t\t} else if (change.kind === TextEditorChangeKind.Deletion) {\n\t\t\t// Deletion\n\t\t\tlineNumber = lineNumber + lineRangeLength(change.original.startLineNumber, change.original.endLineNumberExclusive);\n\t\t} else if (change.kind === TextEditorChangeKind.Modification) {\n\t\t\t// Modification\n\t\t\tconst originalRangeLength = lineRangeLength(change.original.startLineNumber, change.original.endLineNumberExclusive);\n\t\t\tconst modifiedRangeLength = lineRangeLength(change.modified.startLineNumber, change.modified.endLineNumberExclusive);\n\n\t\t\tif (originalRangeLength !== modifiedRangeLength) {\n\t\t\t\tlineNumber = lineNumber - (modifiedRangeLength - originalRangeLength);\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Unexpected change kind');\n\t\t}\n\t}\n\n\treturn lineNumber;\n}\n\nfunction getEditorDecorationRange(lineNumber: number): Range {\n\tconst position = new Position(lineNumber, Number.MAX_SAFE_INTEGER);\n\treturn new Range(position, position);\n}\n\nfunction isResourceSchemeSupported(uri: Uri): boolean {\n\treturn uri.scheme === 'file' || isGitUri(uri);\n}\n\nfunction isResourceBlameInformationEqual(a: ResourceBlameInformation | undefined, b: ResourceBlameInformation | undefined): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tif (!a || !b ||\n\t\ta.resource.toString() !== b.resource.toString() ||\n\t\ta.blameInformation.length !== b.blameInformation.length) {\n\t\treturn false;\n\t}\n\n\tfor (let index = 0; index < a.blameInformation.length; index++) {\n\t\tif (a.blameInformation[index].lineNumber !== b.blameInformation[index].lineNumber) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst aBlameInformation = a.blameInformation[index].blameInformation;\n\t\tconst bBlameInformation = b.blameInformation[index].blameInformation;\n\n\t\tif (typeof aBlameInformation === 'string' && typeof bBlameInformation === 'string') {\n\t\t\tif (aBlameInformation !== bBlameInformation) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (typeof aBlameInformation !== 'string' && typeof bBlameInformation !== 'string') {\n\t\t\tif (aBlameInformation.hash !== bBlameInformation.hash) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\ntype BlameInformationTemplateTokens = {\n\treadonly hash: string;\n\treadonly hashShort: string;\n\treadonly subject: string;\n\treadonly authorName: string;\n\treadonly authorEmail: string;\n\treadonly authorDate: string;\n\treadonly authorDateAgo: string;\n};\n\ninterface ResourceBlameInformation {\n\treadonly resource: Uri;\n\treadonly blameInformation: readonly LineBlameInformation[];\n}\n\ninterface LineBlameInformation {\n\treadonly lineNumber: number;\n\treadonly blameInformation: BlameInformation | string;\n}\n\nclass GitBlameInformationCache {\n\tprivate readonly _cache = new Map<Repository, LRUCache<string, BlameInformation[]>>();\n\n\tdelete(repository: Repository): boolean {\n\t\treturn this._cache.delete(repository);\n\t}\n\n\tget(repository: Repository, resource: Uri, commit: string): BlameInformation[] | undefined {\n\t\tconst key = this._getCacheKey(resource, commit);\n\t\treturn this._cache.get(repository)?.get(key);\n\t}\n\n\tset(repository: Repository, resource: Uri, commit: string, blameInformation: BlameInformation[]): void {\n\t\tif (!this._cache.has(repository)) {\n\t\t\tthis._cache.set(repository, new LRUCache<string, BlameInformation[]>(100));\n\t\t}\n\n\t\tconst key = this._getCacheKey(resource, commit);\n\t\tthis._cache.get(repository)!.set(key, blameInformation);\n\t}\n\n\tprivate _getCacheKey(resource: Uri, commit: string): string {\n\t\treturn toGitUri(resource, commit).toString();\n\t}\n}\n\nexport class GitBlameController {\n\tprivate readonly _subjectMaxLength = 50;\n\n\tprivate readonly _onDidChangeBlameInformation = new EventEmitter<void>();\n\tpublic readonly onDidChangeBlameInformation = this._onDidChangeBlameInformation.event;\n\n\tprivate _textEditorBlameInformation: ResourceBlameInformation | undefined;\n\tget textEditorBlameInformation(): ResourceBlameInformation | undefined {\n\t\treturn this._textEditorBlameInformation;\n\t}\n\tprivate set textEditorBlameInformation(blameInformation: ResourceBlameInformation | undefined) {\n\t\tif (isResourceBlameInformationEqual(this._textEditorBlameInformation, blameInformation)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._textEditorBlameInformation = blameInformation;\n\t\tthis._onDidChangeBlameInformation.fire();\n\t}\n\n\tprivate _HEAD: string | undefined;\n\tprivate readonly _commitInformationCache = new LRUCache<string, Commit>(100);\n\tprivate readonly _repositoryBlameCache = new GitBlameInformationCache();\n\n\tprivate _editorDecoration: GitBlameEditorDecoration | undefined;\n\tprivate _statusBarItem: GitBlameStatusBarItem | undefined;\n\n\tprivate _repositoryDisposables = new Map<Repository, IDisposable[]>();\n\tprivate _enablementDisposables: IDisposable[] = [];\n\tprivate _disposables: IDisposable[] = [];\n\n\tconstructor(private readonly _model: Model) {\n\t\tworkspace.onDidChangeConfiguration(this._onDidChangeConfiguration, this, this._disposables);\n\t\tthis._onDidChangeConfiguration();\n\t}\n\n\tformatBlameInformationMessage(documentUri: Uri, template: string, blameInformation: BlameInformation): string {\n\t\tconst subject = blameInformation.subject && blameInformation.subject.length > this._subjectMaxLength\n\t\t\t? `${blameInformation.subject.substring(0, this._subjectMaxLength)}\\u2026`\n\t\t\t: blameInformation.subject;\n\n\t\tconst templateTokens = {\n\t\t\thash: blameInformation.hash,\n\t\t\thashShort: getCommitShortHash(documentUri, blameInformation.hash),\n\t\t\tsubject: emojify(subject ?? ''),\n\t\t\tauthorName: blameInformation.authorName ?? '',\n\t\t\tauthorEmail: blameInformation.authorEmail ?? '',\n\t\t\tauthorDate: new Date(blameInformation.authorDate ?? new Date()).toLocaleString(),\n\t\t\tauthorDateAgo: fromNow(blameInformation.authorDate ?? new Date(), true, true)\n\t\t} satisfies BlameInformationTemplateTokens;\n\n\t\treturn template.replace(/\\$\\{(.+?)\\}/g, (_, token) => {\n\t\t\treturn token in templateTokens ? templateTokens[token as keyof BlameInformationTemplateTokens] : `\\${${token}}`;\n\t\t});\n\t}\n\n\tasync getBlameInformationHover(documentUri: Uri, blameInformation: BlameInformation): Promise<MarkdownString> {\n\t\tconst remoteHoverCommands: Command[] = [];\n\t\tlet commitAvatar: string | undefined;\n\t\tlet commitInformation: Commit | undefined;\n\t\tlet commitMessageWithLinks: string | undefined;\n\n\t\tconst repository = this._model.getRepository(documentUri);\n\t\tif (repository) {\n\t\t\ttry {\n\t\t\t\t// Commit details\n\t\t\t\tcommitInformation = this._commitInformationCache.get(blameInformation.hash);\n\t\t\t\tif (!commitInformation) {\n\t\t\t\t\tcommitInformation = await repository.getCommit(blameInformation.hash);\n\t\t\t\t\tthis._commitInformationCache.set(blameInformation.hash, commitInformation);\n\t\t\t\t}\n\n\t\t\t\t// Avatar\n\t\t\t\tconst avatarQuery = {\n\t\t\t\t\tcommits: [{\n\t\t\t\t\t\thash: blameInformation.hash,\n\t\t\t\t\t\tauthorName: blameInformation.authorName,\n\t\t\t\t\t\tauthorEmail: blameInformation.authorEmail\n\t\t\t\t\t} satisfies AvatarQueryCommit],\n\t\t\t\t\tsize: AVATAR_SIZE\n\t\t\t\t} satisfies AvatarQuery;\n\n\t\t\t\tconst avatarResult = await provideSourceControlHistoryItemAvatar(this._model, repository, avatarQuery);\n\t\t\t\tcommitAvatar = avatarResult?.get(blameInformation.hash);\n\t\t\t} catch { }\n\n\t\t\t// Remote hover commands\n\t\t\tconst unpublishedCommits = await repository.getUnpublishedCommits();\n\t\t\tif (!unpublishedCommits.has(blameInformation.hash)) {\n\t\t\t\tremoteHoverCommands.push(...await provideSourceControlHistoryItemHoverCommands(this._model, repository) ?? []);\n\t\t\t}\n\n\t\t\t// Message links\n\t\t\tcommitMessageWithLinks = await provideSourceControlHistoryItemMessageLinks(\n\t\t\t\tthis._model, repository, commitInformation?.message ?? blameInformation.subject ?? '');\n\t\t}\n\n\t\tconst markdownString = new MarkdownString();\n\t\tmarkdownString.isTrusted = true;\n\t\tmarkdownString.supportThemeIcons = true;\n\n\t\t// Author, date\n\t\tconst hash = commitInformation?.hash ?? blameInformation.hash;\n\t\tconst authorName = commitInformation?.authorName ?? blameInformation.authorName;\n\t\tconst authorEmail = commitInformation?.authorEmail ?? blameInformation.authorEmail;\n\t\tconst authorDate = commitInformation?.authorDate ?? blameInformation.authorDate;\n\t\tconst avatar = commitAvatar ? `![${authorName}](${commitAvatar}|width=${AVATAR_SIZE},height=${AVATAR_SIZE})` : '$(account)';\n\n\t\tif (authorName) {\n\t\t\tif (authorEmail) {\n\t\t\t\tconst emailTitle = l10n.t('Email');\n\t\t\t\tmarkdownString.appendMarkdown(`${avatar} [**${authorName}**](mailto:${authorEmail} \"${emailTitle} ${authorName}\")`);\n\t\t\t} else {\n\t\t\t\tmarkdownString.appendMarkdown(`${avatar} **${authorName}**`);\n\t\t\t}\n\n\t\t\tif (authorDate) {\n\t\t\t\tconst dateString = new Date(authorDate).toLocaleString(undefined, {\n\t\t\t\t\tyear: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric'\n\t\t\t\t});\n\t\t\t\tmarkdownString.appendMarkdown(`, $(history) ${fromNow(authorDate, true, true)} (${dateString})`);\n\t\t\t}\n\n\t\t\tmarkdownString.appendMarkdown('\\n\\n');\n\t\t}\n\n\t\t// Subject | Message\n\t\tmarkdownString.appendMarkdown(`${emojify(commitMessageWithLinks ?? commitInformation?.message ?? blameInformation.subject ?? '')}\\n\\n`);\n\t\tmarkdownString.appendMarkdown(`---\\n\\n`);\n\n\t\t// Short stats\n\t\tif (commitInformation?.shortStat) {\n\t\t\tmarkdownString.appendMarkdown(`<span>${commitInformation.shortStat.files === 1 ?\n\t\t\t\tl10n.t('{0} file changed', commitInformation.shortStat.files) :\n\t\t\t\tl10n.t('{0} files changed', commitInformation.shortStat.files)}</span>`);\n\n\t\t\tif (commitInformation.shortStat.insertions) {\n\t\t\t\tmarkdownString.appendMarkdown(`,&nbsp;<span style=\"color:var(--vscode-scmGraph-historyItemHoverAdditionsForeground);\">${commitInformation.shortStat.insertions === 1 ?\n\t\t\t\t\tl10n.t('{0} insertion{1}', commitInformation.shortStat.insertions, '(+)') :\n\t\t\t\t\tl10n.t('{0} insertions{1}', commitInformation.shortStat.insertions, '(+)')}</span>`);\n\t\t\t}\n\n\t\t\tif (commitInformation.shortStat.deletions) {\n\t\t\t\tmarkdownString.appendMarkdown(`,&nbsp;<span style=\"color:var(--vscode-scmGraph-historyItemHoverDeletionsForeground);\">${commitInformation.shortStat.deletions === 1 ?\n\t\t\t\t\tl10n.t('{0} deletion{1}', commitInformation.shortStat.deletions, '(-)') :\n\t\t\t\t\tl10n.t('{0} deletions{1}', commitInformation.shortStat.deletions, '(-)')}</span>`);\n\t\t\t}\n\n\t\t\tmarkdownString.appendMarkdown(`\\n\\n---\\n\\n`);\n\t\t}\n\n\t\t// Commands\n\t\tmarkdownString.appendMarkdown(`[\\`$(git-commit) ${getCommitShortHash(documentUri, hash)} \\`](command:git.viewCommit?${encodeURIComponent(JSON.stringify([documentUri, hash]))} \"${l10n.t('Open Commit')}\")`);\n\t\tmarkdownString.appendMarkdown('&nbsp;');\n\t\tmarkdownString.appendMarkdown(`[$(copy)](command:git.copyContentToClipboard?${encodeURIComponent(JSON.stringify(hash))} \"${l10n.t('Copy Commit Hash')}\")`);\n\n\t\t// Remote hover commands\n\t\tif (remoteHoverCommands.length > 0) {\n\t\t\tmarkdownString.appendMarkdown('&nbsp;&nbsp;|&nbsp;&nbsp;');\n\n\t\t\tconst remoteCommandsMarkdown = remoteHoverCommands\n\t\t\t\t.map(command => `[${command.title}](command:${command.command}?${encodeURIComponent(JSON.stringify([...command.arguments ?? [], hash]))} \"${command.tooltip}\")`);\n\t\t\tmarkdownString.appendMarkdown(remoteCommandsMarkdown.join('&nbsp;'));\n\t\t}\n\n\t\tmarkdownString.appendMarkdown('&nbsp;&nbsp;|&nbsp;&nbsp;');\n\t\tmarkdownString.appendMarkdown(`[$(gear)](command:workbench.action.openSettings?%5B%22git.blame%22%5D \"${l10n.t('Open Settings')}\")`);\n\n\t\treturn markdownString;\n\t}\n\n\tprivate _onDidChangeConfiguration(e?: ConfigurationChangeEvent): void {\n\t\tif (e &&\n\t\t\t!e.affectsConfiguration('git.blame.editorDecoration.enabled') &&\n\t\t\t!e.affectsConfiguration('git.blame.statusBarItem.enabled')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst editorDecorationEnabled = config.get<boolean>('blame.editorDecoration.enabled') === true;\n\t\tconst statusBarItemEnabled = config.get<boolean>('blame.statusBarItem.enabled') === true;\n\n\t\t// Editor decoration\n\t\tif (editorDecorationEnabled) {\n\t\t\tif (!this._editorDecoration) {\n\t\t\t\tthis._editorDecoration = new GitBlameEditorDecoration(this);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._editorDecoration?.dispose();\n\t\t\tthis._editorDecoration = undefined;\n\t\t}\n\n\t\t// StatusBar item\n\t\tif (statusBarItemEnabled) {\n\t\t\tif (!this._statusBarItem) {\n\t\t\t\tthis._statusBarItem = new GitBlameStatusBarItem(this);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._statusBarItem?.dispose();\n\t\t\tthis._statusBarItem = undefined;\n\t\t}\n\n\t\t// Listeners\n\t\tif (editorDecorationEnabled || statusBarItemEnabled) {\n\t\t\tif (this._enablementDisposables.length === 0) {\n\t\t\t\tthis._model.onDidOpenRepository(this._onDidOpenRepository, this, this._enablementDisposables);\n\t\t\t\tthis._model.onDidCloseRepository(this._onDidCloseRepository, this, this._enablementDisposables);\n\t\t\t\tfor (const repository of this._model.repositories) {\n\t\t\t\t\tthis._onDidOpenRepository(repository);\n\t\t\t\t}\n\n\t\t\t\twindow.onDidChangeActiveTextEditor(e => this._updateTextEditorBlameInformation(e), this, this._enablementDisposables);\n\t\t\t\twindow.onDidChangeTextEditorSelection(e => this._updateTextEditorBlameInformation(e.textEditor, 'selection'), this, this._enablementDisposables);\n\t\t\t\twindow.onDidChangeTextEditorDiffInformation(e => this._updateTextEditorBlameInformation(e.textEditor), this, this._enablementDisposables);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._enablementDisposables = dispose(this._enablementDisposables);\n\t\t}\n\n\t\tthis._updateTextEditorBlameInformation(window.activeTextEditor);\n\t}\n\n\tprivate _onDidOpenRepository(repository: Repository): void {\n\t\tconst repositoryDisposables: IDisposable[] = [];\n\t\trepository.onDidRunGitStatus(() => this._onDidRunGitStatus(repository), this, repositoryDisposables);\n\n\t\tthis._repositoryDisposables.set(repository, repositoryDisposables);\n\t}\n\n\tprivate _onDidCloseRepository(repository: Repository): void {\n\t\tconst disposables = this._repositoryDisposables.get(repository);\n\t\tif (disposables) {\n\t\t\tdispose(disposables);\n\t\t}\n\n\t\tthis._repositoryDisposables.delete(repository);\n\t\tthis._repositoryBlameCache.delete(repository);\n\t}\n\n\tprivate _onDidRunGitStatus(repository: Repository): void {\n\t\tif (!repository.HEAD?.commit || this._HEAD === repository.HEAD.commit) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._HEAD = repository.HEAD.commit;\n\t\tthis._updateTextEditorBlameInformation(window.activeTextEditor);\n\t}\n\n\tprivate async _getBlameInformation(resource: Uri, commit: string): Promise<BlameInformation[] | undefined> {\n\t\tconst repository = this._model.getRepository(resource);\n\t\tif (!repository) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst resourceBlameInformation = this._repositoryBlameCache.get(repository, resource, commit);\n\t\tif (resourceBlameInformation) {\n\t\t\treturn resourceBlameInformation;\n\t\t}\n\n\t\t// Ensure that the emojis are loaded as we will need\n\t\t// access to them when formatting the blame information.\n\t\tawait ensureEmojis();\n\n\t\t// Get blame information for the resource and cache it\n\t\tconst blameInformation = await repository.blame2(resource.fsPath, commit) ?? [];\n\t\tthis._repositoryBlameCache.set(repository, resource, commit, blameInformation);\n\n\t\treturn blameInformation;\n\t}\n\n\t@throttle\n\tprivate async _updateTextEditorBlameInformation(textEditor: TextEditor | undefined, reason?: 'selection'): Promise<void> {\n\t\tif (textEditor) {\n\t\t\tif (!textEditor.diffInformation || textEditor !== window.activeTextEditor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.textEditorBlameInformation = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tconst repository = this._model.getRepository(textEditor.document.uri);\n\t\tif (!repository || !repository.HEAD?.commit) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Only support resources with `file` and `git` schemes\n\t\tif (!isResourceSchemeSupported(textEditor.document.uri)) {\n\t\t\tthis.textEditorBlameInformation = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not show blame information when there is a single selection and it is at the beginning\n\t\t// of the file [0, 0, 0, 0] unless the user explicitly navigates the cursor there. We do this\n\t\t// to avoid showing blame information when the editor is not focused.\n\t\tif (reason !== 'selection' && textEditor.selections.length === 1 &&\n\t\t\ttextEditor.selections[0].start.line === 0 && textEditor.selections[0].start.character === 0 &&\n\t\t\ttextEditor.selections[0].end.line === 0 && textEditor.selections[0].end.character === 0) {\n\t\t\tthis.textEditorBlameInformation = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tlet allChanges: readonly TextEditorChange[];\n\t\tlet workingTreeChanges: readonly TextEditorChange[];\n\t\tlet workingTreeAndIndexChanges: readonly TextEditorChange[] | undefined;\n\n\t\tif (isGitUri(textEditor.document.uri)) {\n\t\t\tconst { ref } = fromGitUri(textEditor.document.uri);\n\n\t\t\t// For the following scenarios we can discard the diff information\n\t\t\t// 1) Commit - Resource in the multi-file diff editor when viewing the details of a commit.\n\t\t\t// 2) HEAD   - Resource on the left-hand side of the diff editor when viewing a resource from the index.\n\t\t\t// 3) ~      - Resource on the left-hand side of the diff editor when viewing a resource from the working tree.\n\t\t\tif (/^[0-9a-f]{40}$/i.test(ref) || ref === 'HEAD' || ref === '~') {\n\t\t\t\tworkingTreeChanges = allChanges = [];\n\t\t\t\tworkingTreeAndIndexChanges = undefined;\n\t\t\t} else if (ref === '') {\n\t\t\t\t// Resource on the right-hand side of the diff editor when viewing a resource from the index.\n\t\t\t\tconst diffInformationWorkingTreeAndIndex = getWorkingTreeAndIndexDiffInformation(textEditor);\n\n\t\t\t\t// Working tree + index diff information is present and it is stale. Diff information\n\t\t\t\t// may be stale when the selection changes because of a content change and the diff\n\t\t\t\t// information is not yet updated.\n\t\t\t\tif (diffInformationWorkingTreeAndIndex && diffInformationWorkingTreeAndIndex.isStale) {\n\t\t\t\t\tthis.textEditorBlameInformation = undefined;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tworkingTreeChanges = [];\n\t\t\t\tworkingTreeAndIndexChanges = allChanges = diffInformationWorkingTreeAndIndex?.changes ?? [];\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Unexpected ref: ${ref}`);\n\t\t\t}\n\t\t} else {\n\t\t\t// Working tree diff information. Diff Editor (Working Tree) -> Text Editor\n\t\t\tconst diffInformationWorkingTree = getWorkingTreeDiffInformation(textEditor);\n\n\t\t\t// Working tree diff information is not present or it is stale. Diff information\n\t\t\t// may be stale when the selection changes because of a content change and the diff\n\t\t\t// information is not yet updated.\n\t\t\tif (!diffInformationWorkingTree || diffInformationWorkingTree.isStale) {\n\t\t\t\tthis.textEditorBlameInformation = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Working tree + index diff information\n\t\t\tconst diffInformationWorkingTreeAndIndex = getWorkingTreeAndIndexDiffInformation(textEditor);\n\n\t\t\t// Working tree + index diff information is present and it is stale. Diff information\n\t\t\t// may be stale when the selection changes because of a content change and the diff\n\t\t\t// information is not yet updated.\n\t\t\tif (diffInformationWorkingTreeAndIndex && diffInformationWorkingTreeAndIndex.isStale) {\n\t\t\t\tthis.textEditorBlameInformation = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tworkingTreeChanges = diffInformationWorkingTree.changes;\n\t\t\tworkingTreeAndIndexChanges = diffInformationWorkingTreeAndIndex?.changes;\n\n\t\t\t// For staged resources, we provide an additional \"original resource\" so that the editor\n\t\t\t// diff information contains both the changes that are in the working tree and the changes\n\t\t\t// that are in the working tree + index.\n\t\t\tallChanges = workingTreeAndIndexChanges ?? workingTreeChanges;\n\t\t}\n\n\t\tlet commit: string;\n\t\tif (!isGitUri(textEditor.document.uri)) {\n\t\t\t// Resource with the `file` scheme\n\t\t\tcommit = repository.HEAD.commit;\n\t\t} else {\n\t\t\t// Resource with the `git` scheme\n\t\t\tconst { ref } = fromGitUri(textEditor.document.uri);\n\t\t\tcommit = /^[0-9a-f]{40}$/i.test(ref) ? ref : repository.HEAD.commit;\n\t\t}\n\n\t\t// Git blame information\n\t\tconst resourceBlameInformation = await this._getBlameInformation(textEditor.document.uri, commit);\n\t\tif (!resourceBlameInformation) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lineBlameInformation: LineBlameInformation[] = [];\n\t\tfor (const lineNumber of new Set(textEditor.selections.map(s => s.active.line))) {\n\t\t\t// Check if the line is contained in the working tree diff information\n\t\t\tif (lineRangesContainLine(workingTreeChanges, lineNumber + 1)) {\n\t\t\t\tif (reason === 'selection') {\n\t\t\t\t\t// Only show the `Not Committed Yet` message upon selection change due to navigation\n\t\t\t\t\tlineBlameInformation.push({ lineNumber, blameInformation: l10n.t('Not Committed Yet') });\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check if the line is contained in the working tree + index diff information\n\t\t\tif (lineRangesContainLine(workingTreeAndIndexChanges ?? [], lineNumber + 1)) {\n\t\t\t\tlineBlameInformation.push({ lineNumber, blameInformation: l10n.t('Not Committed Yet (Staged)') });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Map the line number to the git blame ranges using the diff information\n\t\t\tconst lineNumberWithDiff = mapModifiedLineNumberToOriginalLineNumber(lineNumber + 1, allChanges);\n\t\t\tconst blameInformation = resourceBlameInformation.find(blameInformation => {\n\t\t\t\treturn blameInformation.ranges.find(range => {\n\t\t\t\t\treturn lineNumberWithDiff >= range.startLineNumber && lineNumberWithDiff <= range.endLineNumber;\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif (blameInformation) {\n\t\t\t\tlineBlameInformation.push({ lineNumber, blameInformation });\n\t\t\t}\n\t\t}\n\n\t\tthis.textEditorBlameInformation = {\n\t\t\tresource: textEditor.document.uri,\n\t\t\tblameInformation: lineBlameInformation\n\t\t};\n\t}\n\n\tdispose() {\n\t\tfor (const disposables of this._repositoryDisposables.values()) {\n\t\t\tdispose(disposables);\n\t\t}\n\t\tthis._repositoryDisposables.clear();\n\n\t\tthis._disposables = dispose(this._disposables);\n\t}\n}\n\nclass GitBlameEditorDecoration implements HoverProvider {\n\tprivate _decoration: TextEditorDecorationType;\n\n\tprivate _hoverDisposable: IDisposable | undefined;\n\tprivate _disposables: IDisposable[] = [];\n\n\tconstructor(private readonly _controller: GitBlameController) {\n\t\tthis._decoration = window.createTextEditorDecorationType({\n\t\t\tafter: {\n\t\t\t\tcolor: new ThemeColor('git.blame.editorDecorationForeground')\n\t\t\t}\n\t\t});\n\t\tthis._disposables.push(this._decoration);\n\n\t\tworkspace.onDidChangeConfiguration(this._onDidChangeConfiguration, this, this._disposables);\n\t\twindow.onDidChangeActiveTextEditor(this._onDidChangeActiveTextEditor, this, this._disposables);\n\t\tthis._controller.onDidChangeBlameInformation(() => this._onDidChangeBlameInformation(), this, this._disposables);\n\n\t\tthis._onDidChangeConfiguration();\n\t}\n\n\tasync provideHover(document: TextDocument, position: Position, token: CancellationToken): Promise<Hover | undefined> {\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst textEditor = window.activeTextEditor;\n\t\tif (!textEditor) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Position must be at the end of the line\n\t\tif (position.character !== document.lineAt(position.line).range.end.character) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Get blame information\n\t\tconst blameInformation = this._controller.textEditorBlameInformation?.blameInformation;\n\t\tconst lineBlameInformation = blameInformation?.find(blame => blame.lineNumber === position.line);\n\n\t\tif (!lineBlameInformation || typeof lineBlameInformation.blameInformation === 'string') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst contents = await this._controller.getBlameInformationHover(textEditor.document.uri, lineBlameInformation.blameInformation);\n\n\t\tif (!contents || token.isCancellationRequested) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn { range: getEditorDecorationRange(position.line), contents: [contents] };\n\t}\n\n\tprivate _onDidChangeConfiguration(e?: ConfigurationChangeEvent): void {\n\t\tif (e &&\n\t\t\t!e.affectsConfiguration('git.commitShortHashLength') &&\n\t\t\t!e.affectsConfiguration('git.blame.editorDecoration.template')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._registerHoverProvider();\n\t\tthis._onDidChangeBlameInformation();\n\t}\n\n\tprivate _onDidChangeActiveTextEditor(): void {\n\t\t// Clear decorations\n\t\tfor (const editor of window.visibleTextEditors) {\n\t\t\tif (editor !== window.activeTextEditor) {\n\t\t\t\teditor.setDecorations(this._decoration, []);\n\t\t\t}\n\t\t}\n\n\t\t// Register hover provider\n\t\tthis._registerHoverProvider();\n\t}\n\n\tprivate _onDidChangeBlameInformation(): void {\n\t\tconst textEditor = window.activeTextEditor;\n\t\tif (!textEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get blame information\n\t\tconst blameInformation = this._controller.textEditorBlameInformation?.blameInformation;\n\t\tif (!blameInformation || blameInformation.length === 0) {\n\t\t\ttextEditor.setDecorations(this._decoration, []);\n\t\t\treturn;\n\t\t}\n\n\t\t// Set decorations for the editor\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst template = config.get<string>('blame.editorDecoration.template', '${subject}, ${authorName} (${authorDateAgo})');\n\n\t\tconst decorations = blameInformation.map(blame => {\n\t\t\tconst contentText = typeof blame.blameInformation !== 'string'\n\t\t\t\t? this._controller.formatBlameInformationMessage(textEditor.document.uri, template, blame.blameInformation)\n\t\t\t\t: blame.blameInformation;\n\n\t\t\treturn this._createDecoration(blame.lineNumber, contentText);\n\t\t});\n\n\t\ttextEditor.setDecorations(this._decoration, decorations);\n\t}\n\n\tprivate _createDecoration(lineNumber: number, contentText: string): DecorationOptions {\n\t\treturn {\n\t\t\trange: getEditorDecorationRange(lineNumber),\n\t\t\trenderOptions: {\n\t\t\t\tafter: {\n\t\t\t\t\tcontentText,\n\t\t\t\t\tmargin: '0 0 0 50px'\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate _registerHoverProvider(): void {\n\t\tthis._hoverDisposable?.dispose();\n\n\t\tif (window.activeTextEditor && isResourceSchemeSupported(window.activeTextEditor.document.uri)) {\n\t\t\tthis._hoverDisposable = languages.registerHoverProvider({\n\t\t\t\tpattern: window.activeTextEditor.document.uri.fsPath\n\t\t\t}, this);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis._hoverDisposable?.dispose();\n\t\tthis._hoverDisposable = undefined;\n\n\t\tthis._disposables = dispose(this._disposables);\n\t}\n}\n\nclass GitBlameStatusBarItem {\n\tprivate _statusBarItem: StatusBarItem;\n\tprivate _disposables: IDisposable[] = [];\n\n\tconstructor(private readonly _controller: GitBlameController) {\n\t\tthis._statusBarItem = window.createStatusBarItem('git.blame', StatusBarAlignment.Right, 200);\n\t\tthis._statusBarItem.name = l10n.t('Git Blame Information');\n\t\tthis._disposables.push(this._statusBarItem);\n\n\t\tworkspace.onDidChangeConfiguration(this._onDidChangeConfiguration, this, this._disposables);\n\t\tthis._controller.onDidChangeBlameInformation(() => this._onDidChangeBlameInformation(), this, this._disposables);\n\t}\n\n\tprivate _onDidChangeConfiguration(e: ConfigurationChangeEvent): void {\n\t\tif (!e.affectsConfiguration('git.commitShortHashLength') &&\n\t\t\t!e.affectsConfiguration('git.blame.statusBarItem.template')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._onDidChangeBlameInformation();\n\t}\n\n\tprivate async _onDidChangeBlameInformation(): Promise<void> {\n\t\tif (!window.activeTextEditor) {\n\t\t\tthis._statusBarItem.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tconst blameInformation = this._controller.textEditorBlameInformation?.blameInformation;\n\t\tif (!blameInformation || blameInformation.length === 0) {\n\t\t\tthis._statusBarItem.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof blameInformation[0].blameInformation === 'string') {\n\t\t\tthis._statusBarItem.text = `$(git-commit) ${blameInformation[0].blameInformation}`;\n\t\t\tthis._statusBarItem.tooltip = l10n.t('Git Blame Information');\n\t\t\tthis._statusBarItem.command = undefined;\n\t\t} else {\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tconst template = config.get<string>('blame.statusBarItem.template', '${authorName} (${authorDateAgo})');\n\n\t\t\tthis._statusBarItem.text = `$(git-commit) ${this._controller.formatBlameInformationMessage(\n\t\t\t\twindow.activeTextEditor.document.uri, template, blameInformation[0].blameInformation)}`;\n\n\t\t\tthis._statusBarItem.tooltip2 = (cancellationToken: CancellationToken) => {\n\t\t\t\treturn this._provideTooltip(window.activeTextEditor!.document.uri,\n\t\t\t\t\tblameInformation[0].blameInformation as BlameInformation, cancellationToken);\n\t\t\t};\n\n\t\t\tthis._statusBarItem.command = {\n\t\t\t\ttitle: l10n.t('Open Commit'),\n\t\t\t\tcommand: 'git.viewCommit',\n\t\t\t\targuments: [window.activeTextEditor.document.uri, blameInformation[0].blameInformation.hash]\n\t\t\t} satisfies Command;\n\t\t}\n\n\t\tthis._statusBarItem.show();\n\t}\n\n\tprivate async _provideTooltip(uri: Uri, blameInformation: BlameInformation, cancellationToken: CancellationToken): Promise<MarkdownString | undefined> {\n\t\tif (cancellationToken.isCancellationRequested) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst tooltip = await this._controller.getBlameInformationHover(uri, blameInformation);\n\t\treturn cancellationToken.isCancellationRequested ? undefined : tooltip;\n\t}\n\n\tdispose() {\n\t\tthis._disposables = dispose(this._disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/branchProtection.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, Event, EventEmitter, Uri, workspace } from 'vscode';\nimport { BranchProtection, BranchProtectionProvider } from './api/git';\nimport { dispose, filterEvent } from './util';\n\nexport interface IBranchProtectionProviderRegistry {\n\treadonly onDidChangeBranchProtectionProviders: Event<Uri>;\n\n\tgetBranchProtectionProviders(root: Uri): BranchProtectionProvider[];\n\tregisterBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable;\n}\n\nexport class GitBranchProtectionProvider implements BranchProtectionProvider {\n\n\tprivate readonly _onDidChangeBranchProtection = new EventEmitter<Uri>();\n\tonDidChangeBranchProtection = this._onDidChangeBranchProtection.event;\n\n\tprivate branchProtection!: BranchProtection;\n\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(private readonly repositoryRoot: Uri) {\n\t\tconst onDidChangeBranchProtectionEvent = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.branchProtection', repositoryRoot));\n\t\tonDidChangeBranchProtectionEvent(this.updateBranchProtection, this, this.disposables);\n\t\tthis.updateBranchProtection();\n\t}\n\n\tprovideBranchProtection(): BranchProtection[] {\n\t\treturn [this.branchProtection];\n\t}\n\n\tprivate updateBranchProtection(): void {\n\t\tconst scopedConfig = workspace.getConfiguration('git', this.repositoryRoot);\n\t\tconst branchProtectionConfig = scopedConfig.get<unknown>('branchProtection') ?? [];\n\t\tconst branchProtectionValues = Array.isArray(branchProtectionConfig) ? branchProtectionConfig : [branchProtectionConfig];\n\n\t\tconst branches = branchProtectionValues\n\t\t\t.map(bp => typeof bp === 'string' ? bp.trim() : '')\n\t\t\t.filter(bp => bp !== '');\n\n\t\tthis.branchProtection = { remote: '', rules: [{ include: branches }] };\n\t\tthis._onDidChangeBranchProtection.fire(this.repositoryRoot);\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/cache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ninterface Item<K, V> {\n\tprevious: Item<K, V> | undefined;\n\tnext: Item<K, V> | undefined;\n\tkey: K;\n\tvalue: V;\n}\n\nconst enum Touch {\n\tNone = 0,\n\tAsOld = 1,\n\tAsNew = 2\n}\n\nclass LinkedMap<K, V> implements Map<K, V> {\n\n\treadonly [Symbol.toStringTag] = 'LinkedMap';\n\n\tprivate _map: Map<K, Item<K, V>>;\n\tprivate _head: Item<K, V> | undefined;\n\tprivate _tail: Item<K, V> | undefined;\n\tprivate _size: number;\n\n\tprivate _state: number;\n\n\tconstructor() {\n\t\tthis._map = new Map<K, Item<K, V>>();\n\t\tthis._head = undefined;\n\t\tthis._tail = undefined;\n\t\tthis._size = 0;\n\t\tthis._state = 0;\n\t}\n\n\tclear(): void {\n\t\tthis._map.clear();\n\t\tthis._head = undefined;\n\t\tthis._tail = undefined;\n\t\tthis._size = 0;\n\t\tthis._state++;\n\t}\n\n\tisEmpty(): boolean {\n\t\treturn !this._head && !this._tail;\n\t}\n\n\tget size(): number {\n\t\treturn this._size;\n\t}\n\n\tget first(): V | undefined {\n\t\treturn this._head?.value;\n\t}\n\n\tget last(): V | undefined {\n\t\treturn this._tail?.value;\n\t}\n\n\thas(key: K): boolean {\n\t\treturn this._map.has(key);\n\t}\n\n\tget(key: K, touch: Touch = Touch.None): V | undefined {\n\t\tconst item = this._map.get(key);\n\t\tif (!item) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (touch !== Touch.None) {\n\t\t\tthis.touch(item, touch);\n\t\t}\n\t\treturn item.value;\n\t}\n\n\tset(key: K, value: V, touch: Touch = Touch.None): this {\n\t\tlet item = this._map.get(key);\n\t\tif (item) {\n\t\t\titem.value = value;\n\t\t\tif (touch !== Touch.None) {\n\t\t\t\tthis.touch(item, touch);\n\t\t\t}\n\t\t} else {\n\t\t\titem = { key, value, next: undefined, previous: undefined };\n\t\t\tswitch (touch) {\n\t\t\t\tcase Touch.None:\n\t\t\t\t\tthis.addItemLast(item);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Touch.AsOld:\n\t\t\t\t\tthis.addItemFirst(item);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Touch.AsNew:\n\t\t\t\t\tthis.addItemLast(item);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.addItemLast(item);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis._map.set(key, item);\n\t\t\tthis._size++;\n\t\t}\n\t\treturn this;\n\t}\n\n\tdelete(key: K): boolean {\n\t\treturn !!this.remove(key);\n\t}\n\n\tremove(key: K): V | undefined {\n\t\tconst item = this._map.get(key);\n\t\tif (!item) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthis._map.delete(key);\n\t\tthis.removeItem(item);\n\t\tthis._size--;\n\t\treturn item.value;\n\t}\n\n\tshift(): V | undefined {\n\t\tif (!this._head && !this._tail) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!this._head || !this._tail) {\n\t\t\tthrow new Error('Invalid list');\n\t\t}\n\t\tconst item = this._head;\n\t\tthis._map.delete(item.key);\n\t\tthis.removeItem(item);\n\t\tthis._size--;\n\t\treturn item.value;\n\t}\n\n\tforEach(callbackfn: (value: V, key: K, map: LinkedMap<K, V>) => void, thisArg?: any): void {\n\t\tconst state = this._state;\n\t\tlet current = this._head;\n\t\twhile (current) {\n\t\t\tif (thisArg) {\n\t\t\t\tcallbackfn.bind(thisArg)(current.value, current.key, this);\n\t\t\t} else {\n\t\t\t\tcallbackfn(current.value, current.key, this);\n\t\t\t}\n\t\t\tif (this._state !== state) {\n\t\t\t\tthrow new Error(`LinkedMap got modified during iteration.`);\n\t\t\t}\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\tkeys(): IterableIterator<K> {\n\t\tconst map = this;\n\t\tconst state = this._state;\n\t\tlet current = this._head;\n\t\tconst iterator: IterableIterator<K> = {\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn iterator;\n\t\t\t},\n\t\t\tnext(): IteratorResult<K> {\n\t\t\t\tif (map._state !== state) {\n\t\t\t\t\tthrow new Error(`LinkedMap got modified during iteration.`);\n\t\t\t\t}\n\t\t\t\tif (current) {\n\t\t\t\t\tconst result = { value: current.key, done: false };\n\t\t\t\t\tcurrent = current.next;\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\treturn { value: undefined, done: true };\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn iterator;\n\t}\n\n\tvalues(): IterableIterator<V> {\n\t\tconst map = this;\n\t\tconst state = this._state;\n\t\tlet current = this._head;\n\t\tconst iterator: IterableIterator<V> = {\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn iterator;\n\t\t\t},\n\t\t\tnext(): IteratorResult<V> {\n\t\t\t\tif (map._state !== state) {\n\t\t\t\t\tthrow new Error(`LinkedMap got modified during iteration.`);\n\t\t\t\t}\n\t\t\t\tif (current) {\n\t\t\t\t\tconst result = { value: current.value, done: false };\n\t\t\t\t\tcurrent = current.next;\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\treturn { value: undefined, done: true };\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn iterator;\n\t}\n\n\tentries(): IterableIterator<[K, V]> {\n\t\tconst map = this;\n\t\tconst state = this._state;\n\t\tlet current = this._head;\n\t\tconst iterator: IterableIterator<[K, V]> = {\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn iterator;\n\t\t\t},\n\t\t\tnext(): IteratorResult<[K, V]> {\n\t\t\t\tif (map._state !== state) {\n\t\t\t\t\tthrow new Error(`LinkedMap got modified during iteration.`);\n\t\t\t\t}\n\t\t\t\tif (current) {\n\t\t\t\t\tconst result: IteratorResult<[K, V]> = { value: [current.key, current.value], done: false };\n\t\t\t\t\tcurrent = current.next;\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\treturn { value: undefined, done: true };\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn iterator;\n\t}\n\n\t[Symbol.iterator](): IterableIterator<[K, V]> {\n\t\treturn this.entries();\n\t}\n\n\tprotected trimOld(newSize: number) {\n\t\tif (newSize >= this.size) {\n\t\t\treturn;\n\t\t}\n\t\tif (newSize === 0) {\n\t\t\tthis.clear();\n\t\t\treturn;\n\t\t}\n\t\tlet current = this._head;\n\t\tlet currentSize = this.size;\n\t\twhile (current && currentSize > newSize) {\n\t\t\tthis._map.delete(current.key);\n\t\t\tcurrent = current.next;\n\t\t\tcurrentSize--;\n\t\t}\n\t\tthis._head = current;\n\t\tthis._size = currentSize;\n\t\tif (current) {\n\t\t\tcurrent.previous = undefined;\n\t\t}\n\t\tthis._state++;\n\t}\n\n\tprotected trimNew(newSize: number) {\n\t\tif (newSize >= this.size) {\n\t\t\treturn;\n\t\t}\n\t\tif (newSize === 0) {\n\t\t\tthis.clear();\n\t\t\treturn;\n\t\t}\n\t\tlet current = this._tail;\n\t\tlet currentSize = this.size;\n\t\twhile (current && currentSize > newSize) {\n\t\t\tthis._map.delete(current.key);\n\t\t\tcurrent = current.previous;\n\t\t\tcurrentSize--;\n\t\t}\n\t\tthis._tail = current;\n\t\tthis._size = currentSize;\n\t\tif (current) {\n\t\t\tcurrent.next = undefined;\n\t\t}\n\t\tthis._state++;\n\t}\n\n\tprivate addItemFirst(item: Item<K, V>): void {\n\t\t// First time Insert\n\t\tif (!this._head && !this._tail) {\n\t\t\tthis._tail = item;\n\t\t} else if (!this._head) {\n\t\t\tthrow new Error('Invalid list');\n\t\t} else {\n\t\t\titem.next = this._head;\n\t\t\tthis._head.previous = item;\n\t\t}\n\t\tthis._head = item;\n\t\tthis._state++;\n\t}\n\n\tprivate addItemLast(item: Item<K, V>): void {\n\t\t// First time Insert\n\t\tif (!this._head && !this._tail) {\n\t\t\tthis._head = item;\n\t\t} else if (!this._tail) {\n\t\t\tthrow new Error('Invalid list');\n\t\t} else {\n\t\t\titem.previous = this._tail;\n\t\t\tthis._tail.next = item;\n\t\t}\n\t\tthis._tail = item;\n\t\tthis._state++;\n\t}\n\n\tprivate removeItem(item: Item<K, V>): void {\n\t\tif (item === this._head && item === this._tail) {\n\t\t\tthis._head = undefined;\n\t\t\tthis._tail = undefined;\n\t\t}\n\t\telse if (item === this._head) {\n\t\t\t// This can only happen if size === 1 which is handled\n\t\t\t// by the case above.\n\t\t\tif (!item.next) {\n\t\t\t\tthrow new Error('Invalid list');\n\t\t\t}\n\t\t\titem.next.previous = undefined;\n\t\t\tthis._head = item.next;\n\t\t}\n\t\telse if (item === this._tail) {\n\t\t\t// This can only happen if size === 1 which is handled\n\t\t\t// by the case above.\n\t\t\tif (!item.previous) {\n\t\t\t\tthrow new Error('Invalid list');\n\t\t\t}\n\t\t\titem.previous.next = undefined;\n\t\t\tthis._tail = item.previous;\n\t\t}\n\t\telse {\n\t\t\tconst next = item.next;\n\t\t\tconst previous = item.previous;\n\t\t\tif (!next || !previous) {\n\t\t\t\tthrow new Error('Invalid list');\n\t\t\t}\n\t\t\tnext.previous = previous;\n\t\t\tprevious.next = next;\n\t\t}\n\t\titem.next = undefined;\n\t\titem.previous = undefined;\n\t\tthis._state++;\n\t}\n\n\tprivate touch(item: Item<K, V>, touch: Touch): void {\n\t\tif (!this._head || !this._tail) {\n\t\t\tthrow new Error('Invalid list');\n\t\t}\n\t\tif ((touch !== Touch.AsOld && touch !== Touch.AsNew)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (touch === Touch.AsOld) {\n\t\t\tif (item === this._head) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = item.next;\n\t\t\tconst previous = item.previous;\n\n\t\t\t// Unlink the item\n\t\t\tif (item === this._tail) {\n\t\t\t\t// previous must be defined since item was not head but is tail\n\t\t\t\t// So there are more than on item in the map\n\t\t\t\tprevious!.next = undefined;\n\t\t\t\tthis._tail = previous;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Both next and previous are not undefined since item was neither head nor tail.\n\t\t\t\tnext!.previous = previous;\n\t\t\t\tprevious!.next = next;\n\t\t\t}\n\n\t\t\t// Insert the node at head\n\t\t\titem.previous = undefined;\n\t\t\titem.next = this._head;\n\t\t\tthis._head.previous = item;\n\t\t\tthis._head = item;\n\t\t\tthis._state++;\n\t\t} else if (touch === Touch.AsNew) {\n\t\t\tif (item === this._tail) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = item.next;\n\t\t\tconst previous = item.previous;\n\n\t\t\t// Unlink the item.\n\t\t\tif (item === this._head) {\n\t\t\t\t// next must be defined since item was not tail but is head\n\t\t\t\t// So there are more than on item in the map\n\t\t\t\tnext!.previous = undefined;\n\t\t\t\tthis._head = next;\n\t\t\t} else {\n\t\t\t\t// Both next and previous are not undefined since item was neither head nor tail.\n\t\t\t\tnext!.previous = previous;\n\t\t\t\tprevious!.next = next;\n\t\t\t}\n\t\t\titem.next = undefined;\n\t\t\titem.previous = this._tail;\n\t\t\tthis._tail.next = item;\n\t\t\tthis._tail = item;\n\t\t\tthis._state++;\n\t\t}\n\t}\n\n\ttoJSON(): [K, V][] {\n\t\tconst data: [K, V][] = [];\n\n\t\tthis.forEach((value, key) => {\n\t\t\tdata.push([key, value]);\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tfromJSON(data: [K, V][]): void {\n\t\tthis.clear();\n\n\t\tfor (const [key, value] of data) {\n\t\t\tthis.set(key, value);\n\t\t}\n\t}\n}\n\nabstract class Cache<K, V> extends LinkedMap<K, V> {\n\n\tprotected _limit: number;\n\tprotected _ratio: number;\n\n\tconstructor(limit: number, ratio: number = 1) {\n\t\tsuper();\n\t\tthis._limit = limit;\n\t\tthis._ratio = Math.min(Math.max(0, ratio), 1);\n\t}\n\n\tget limit(): number {\n\t\treturn this._limit;\n\t}\n\n\tset limit(limit: number) {\n\t\tthis._limit = limit;\n\t\tthis.checkTrim();\n\t}\n\n\tget ratio(): number {\n\t\treturn this._ratio;\n\t}\n\n\tset ratio(ratio: number) {\n\t\tthis._ratio = Math.min(Math.max(0, ratio), 1);\n\t\tthis.checkTrim();\n\t}\n\n\toverride get(key: K, touch: Touch = Touch.AsNew): V | undefined {\n\t\treturn super.get(key, touch);\n\t}\n\n\tpeek(key: K): V | undefined {\n\t\treturn super.get(key, Touch.None);\n\t}\n\n\toverride set(key: K, value: V): this {\n\t\tsuper.set(key, value, Touch.AsNew);\n\t\treturn this;\n\t}\n\n\tprotected checkTrim() {\n\t\tif (this.size > this._limit) {\n\t\t\tthis.trim(Math.round(this._limit * this._ratio));\n\t\t}\n\t}\n\n\tprotected abstract trim(newSize: number): void;\n}\n\nexport class LRUCache<K, V> extends Cache<K, V> {\n\n\tconstructor(limit: number, ratio: number = 1) {\n\t\tsuper(limit, ratio);\n\t}\n\n\tprotected override trim(newSize: number) {\n\t\tthis.trimOld(newSize);\n\t}\n\n\toverride set(key: K, value: V): this {\n\t\tsuper.set(key, value);\n\t\tthis.checkTrim();\n\t\treturn this;\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/commands.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as os from 'os';\nimport * as path from 'path';\nimport { Command, commands, Disposable, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon, SourceControlHistoryItem, SourceControl, InputBoxValidationMessage, Tab, TabInputNotebook, QuickInputButtonLocation, languages } from 'vscode';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { uniqueNamesGenerator, adjectives, animals, colors, NumberDictionary } from '@joaomoreno/unique-names-generator';\nimport { ForcePushMode, GitErrorCodes, RefType, Status, CommitOptions, RemoteSourcePublisher, Remote, Branch, Ref } from './api/git';\nimport { Git, Stash } from './git';\nimport { Model } from './model';\nimport { GitResourceGroup, Repository, Resource, ResourceGroupType } from './repository';\nimport { DiffEditorSelectionHunkToolbarContext, LineChange, applyLineChanges, getIndexDiffInformation, getModifiedRange, getWorkingTreeDiffInformation, intersectDiffWithRange, invertLineChange, toLineChanges, toLineRanges } from './staging';\nimport { fromGitUri, toGitUri, isGitUri, toMergeUris, toMultiFileDiffEditorUris } from './uri';\nimport { DiagnosticSeverityConfig, dispose, fromNow, getCommitShortHash, grep, isDefined, isDescendant, isLinuxSnap, isRemote, isWindows, pathEquals, relativePath, toDiagnosticSeverity, truncate } from './util';\nimport { GitTimelineItem } from './timelineProvider';\nimport { ApiRepository } from './api/api1';\nimport { getRemoteSourceActions, pickRemoteSource } from './remoteSource';\nimport { RemoteSourceAction } from './typings/git-base';\n\nabstract class CheckoutCommandItem implements QuickPickItem {\n\tabstract get label(): string;\n\tget description(): string { return ''; }\n\tget alwaysShow(): boolean { return true; }\n}\n\nclass CreateBranchItem extends CheckoutCommandItem {\n\tget label(): string { return l10n.t('{0} Create new branch...', '$(plus)'); }\n}\n\nclass CreateBranchFromItem extends CheckoutCommandItem {\n\tget label(): string { return l10n.t('{0} Create new branch from...', '$(plus)'); }\n}\n\nclass CheckoutDetachedItem extends CheckoutCommandItem {\n\tget label(): string { return l10n.t('{0} Checkout detached...', '$(debug-disconnect)'); }\n}\n\nclass RefItemSeparator implements QuickPickItem {\n\tget kind(): QuickPickItemKind { return QuickPickItemKind.Separator; }\n\n\tget label(): string {\n\t\tswitch (this.refType) {\n\t\t\tcase RefType.Head:\n\t\t\t\treturn l10n.t('branches');\n\t\t\tcase RefType.RemoteHead:\n\t\t\t\treturn l10n.t('remote branches');\n\t\t\tcase RefType.Tag:\n\t\t\t\treturn l10n.t('tags');\n\t\t\tdefault:\n\t\t\t\treturn '';\n\t\t}\n\t}\n\n\tconstructor(private readonly refType: RefType) { }\n}\n\nclass RefItem implements QuickPickItem {\n\n\tget label(): string {\n\t\tswitch (this.ref.type) {\n\t\t\tcase RefType.Head:\n\t\t\t\treturn `$(git-branch) ${this.ref.name ?? this.shortCommit}`;\n\t\t\tcase RefType.RemoteHead:\n\t\t\t\treturn `$(cloud) ${this.ref.name ?? this.shortCommit}`;\n\t\t\tcase RefType.Tag:\n\t\t\t\treturn `$(tag) ${this.ref.name ?? this.shortCommit}`;\n\t\t\tdefault:\n\t\t\t\treturn '';\n\t\t}\n\t}\n\n\tget description(): string {\n\t\tif (this.ref.commitDetails?.commitDate) {\n\t\t\treturn fromNow(this.ref.commitDetails.commitDate, true, true);\n\t\t}\n\n\t\tswitch (this.ref.type) {\n\t\t\tcase RefType.Head:\n\t\t\t\treturn this.shortCommit;\n\t\t\tcase RefType.RemoteHead:\n\t\t\t\treturn l10n.t('Remote branch at {0}', this.shortCommit);\n\t\t\tcase RefType.Tag:\n\t\t\t\treturn l10n.t('Tag at {0}', this.shortCommit);\n\t\t\tdefault:\n\t\t\t\treturn '';\n\t\t}\n\t}\n\n\tget detail(): string | undefined {\n\t\tif (this.ref.commitDetails?.authorName && this.ref.commitDetails?.message) {\n\t\t\treturn `${this.ref.commitDetails?.authorName}$(circle-small-filled)${this.ref.commitDetails?.message}`;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget refName(): string | undefined { return this.ref.name; }\n\tget refRemote(): string | undefined { return this.ref.remote; }\n\tget shortCommit(): string { return (this.ref.commit || '').substr(0, 8); }\n\n\tprivate _buttons?: QuickInputButton[];\n\tget buttons(): QuickInputButton[] | undefined { return this._buttons; }\n\tset buttons(newButtons: QuickInputButton[] | undefined) { this._buttons = newButtons; }\n\n\tconstructor(protected readonly ref: Ref) { }\n}\n\nclass BranchItem extends RefItem {\n\toverride get description(): string {\n\t\tconst description: string[] = [];\n\n\t\tif (typeof this.ref.behind === 'number' && typeof this.ref.ahead === 'number') {\n\t\t\tdescription.push(`${this.ref.behind}↓ ${this.ref.ahead}↑`);\n\t\t}\n\t\tif (this.ref.commitDetails?.commitDate) {\n\t\t\tdescription.push(fromNow(this.ref.commitDetails.commitDate, true, true));\n\t\t}\n\n\t\treturn description.length > 0 ? description.join('$(circle-small-filled)') : this.shortCommit;\n\t}\n\n\tconstructor(override readonly ref: Branch) {\n\t\tsuper(ref);\n\t}\n}\n\nclass CheckoutItem extends BranchItem {\n\tasync run(repository: Repository, opts?: { detached?: boolean }): Promise<void> {\n\t\tif (!this.ref.name) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\tconst pullBeforeCheckout = config.get<boolean>('pullBeforeCheckout', false) === true;\n\n\t\tconst treeish = opts?.detached ? this.ref.commit ?? this.ref.name : this.ref.name;\n\t\tawait repository.checkout(treeish, { ...opts, pullBeforeCheckout });\n\t}\n}\n\nclass CheckoutProtectedItem extends CheckoutItem {\n\n\toverride get label(): string {\n\t\treturn `$(lock) ${this.ref.name ?? this.shortCommit}`;\n\t}\n}\n\nclass CheckoutRemoteHeadItem extends RefItem {\n\n\tasync run(repository: Repository, opts?: { detached?: boolean }): Promise<void> {\n\t\tif (!this.ref.name) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (opts?.detached) {\n\t\t\tawait repository.checkout(this.ref.commit ?? this.ref.name, opts);\n\t\t\treturn;\n\t\t}\n\n\t\tconst branches = await repository.findTrackingBranches(this.ref.name);\n\n\t\tif (branches.length > 0) {\n\t\t\tawait repository.checkout(branches[0].name!, opts);\n\t\t} else {\n\t\t\tawait repository.checkoutTracking(this.ref.name, opts);\n\t\t}\n\t}\n}\n\nclass CheckoutTagItem extends RefItem {\n\n\tasync run(repository: Repository, opts?: { detached?: boolean }): Promise<void> {\n\t\tif (!this.ref.name) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.checkout(this.ref.name, opts);\n\t}\n}\n\nclass BranchDeleteItem extends BranchItem {\n\n\tasync run(repository: Repository, force?: boolean): Promise<void> {\n\t\tif (this.ref.type === RefType.Head && this.refName) {\n\t\t\tawait repository.deleteBranch(this.refName, force);\n\t\t} else if (this.ref.type === RefType.RemoteHead && this.refRemote && this.refName) {\n\t\t\tconst refName = this.refName.substring(this.refRemote.length + 1);\n\t\t\tawait repository.deleteRemoteRef(this.refRemote, refName, { force });\n\t\t}\n\t}\n}\n\nclass TagDeleteItem extends RefItem {\n\n\tasync run(repository: Repository): Promise<void> {\n\t\tif (this.ref.name) {\n\t\t\tawait repository.deleteTag(this.ref.name);\n\t\t}\n\t}\n}\n\nclass RemoteTagDeleteItem extends RefItem {\n\n\toverride get description(): string {\n\t\treturn l10n.t('Remote tag at {0}', this.shortCommit);\n\t}\n\n\tasync run(repository: Repository, remote: string): Promise<void> {\n\t\tif (this.ref.name) {\n\t\t\tawait repository.deleteRemoteRef(remote, this.ref.name);\n\t\t}\n\t}\n}\n\nclass MergeItem extends BranchItem {\n\n\tasync run(repository: Repository): Promise<void> {\n\t\tif (this.ref.name || this.ref.commit) {\n\t\t\tawait repository.merge(this.ref.name ?? this.ref.commit!);\n\t\t}\n\t}\n}\n\nclass RebaseItem extends BranchItem {\n\n\tasync run(repository: Repository): Promise<void> {\n\t\tif (this.ref?.name) {\n\t\t\tawait repository.rebase(this.ref.name);\n\t\t}\n\t}\n}\n\nclass RebaseUpstreamItem extends RebaseItem {\n\n\toverride get description(): string {\n\t\treturn '(upstream)';\n\t}\n}\n\nclass HEADItem implements QuickPickItem {\n\n\tconstructor(private repository: Repository) { }\n\n\tget label(): string { return 'HEAD'; }\n\tget description(): string { return (this.repository.HEAD && this.repository.HEAD.commit || '').substr(0, 8); }\n\tget alwaysShow(): boolean { return true; }\n\tget refName(): string { return 'HEAD'; }\n}\n\nclass AddRemoteItem implements QuickPickItem {\n\n\tconstructor(private cc: CommandCenter) { }\n\n\tget label(): string { return '$(plus) ' + l10n.t('Add a new remote...'); }\n\tget description(): string { return ''; }\n\n\tget alwaysShow(): boolean { return true; }\n\n\tasync run(repository: Repository): Promise<void> {\n\t\tawait this.cc.addRemote(repository);\n\t}\n}\n\nclass RemoteItem implements QuickPickItem {\n\tget label() { return `$(cloud) ${this.remote.name}`; }\n\tget description(): string | undefined { return this.remote.fetchUrl; }\n\tget remoteName(): string { return this.remote.name; }\n\n\tconstructor(private readonly repository: Repository, private readonly remote: Remote) { }\n\n\tasync run(): Promise<void> {\n\t\tawait this.repository.fetch({ remote: this.remote.name });\n\t}\n}\n\nclass FetchAllRemotesItem implements QuickPickItem {\n\tget label(): string { return l10n.t('{0} Fetch all remotes', '$(cloud-download)'); }\n\n\tconstructor(private readonly repository: Repository) { }\n\n\tasync run(): Promise<void> {\n\t\tawait this.repository.fetch({ all: true });\n\t}\n}\n\nclass RepositoryItem implements QuickPickItem {\n\tget label(): string { return `$(repo) ${getRepositoryLabel(this.path)}`; }\n\n\tget description(): string { return this.path; }\n\n\tconstructor(public readonly path: string) { }\n}\n\nclass StashItem implements QuickPickItem {\n\tget label(): string { return `#${this.stash.index}: ${this.stash.description}`; }\n\n\tget description(): string | undefined { return this.stash.branchName; }\n\n\tconstructor(readonly stash: Stash) { }\n}\n\ninterface ScmCommandOptions {\n\trepository?: boolean;\n}\n\ninterface ScmCommand {\n\tcommandId: string;\n\tkey: string;\n\tmethod: Function;\n\toptions: ScmCommandOptions;\n}\n\nconst Commands: ScmCommand[] = [];\n\nfunction command(commandId: string, options: ScmCommandOptions = {}): Function {\n\treturn (_target: any, key: string, descriptor: any) => {\n\t\tif (!(typeof descriptor.value === 'function')) {\n\t\t\tthrow new Error('not supported');\n\t\t}\n\n\t\tCommands.push({ commandId, key, method: descriptor.value, options });\n\t};\n}\n\n// const ImageMimetypes = [\n// \t'image/png',\n// \t'image/gif',\n// \t'image/jpeg',\n// \t'image/webp',\n// \t'image/tiff',\n// \t'image/bmp'\n// ];\n\nasync function categorizeResourceByResolution(resources: Resource[]): Promise<{ merge: Resource[]; resolved: Resource[]; unresolved: Resource[]; deletionConflicts: Resource[] }> {\n\tconst selection = resources.filter(s => s instanceof Resource) as Resource[];\n\tconst merge = selection.filter(s => s.resourceGroupType === ResourceGroupType.Merge);\n\tconst isBothAddedOrModified = (s: Resource) => s.type === Status.BOTH_MODIFIED || s.type === Status.BOTH_ADDED;\n\tconst isAnyDeleted = (s: Resource) => s.type === Status.DELETED_BY_THEM || s.type === Status.DELETED_BY_US;\n\tconst possibleUnresolved = merge.filter(isBothAddedOrModified);\n\tconst promises = possibleUnresolved.map(s => grep(s.resourceUri.fsPath, /^<{7}\\s|^={7}$|^>{7}\\s/));\n\tconst unresolvedBothModified = await Promise.all<boolean>(promises);\n\tconst resolved = possibleUnresolved.filter((_s, i) => !unresolvedBothModified[i]);\n\tconst deletionConflicts = merge.filter(s => isAnyDeleted(s));\n\tconst unresolved = [\n\t\t...merge.filter(s => !isBothAddedOrModified(s) && !isAnyDeleted(s)),\n\t\t...possibleUnresolved.filter((_s, i) => unresolvedBothModified[i])\n\t];\n\n\treturn { merge, resolved, unresolved, deletionConflicts };\n}\n\nasync function createCheckoutItems(repository: Repository, detached = false): Promise<QuickPickItem[]> {\n\tconst config = workspace.getConfiguration('git');\n\tconst checkoutTypeConfig = config.get<string | string[]>('checkoutType');\n\tconst showRefDetails = config.get<boolean>('showReferenceDetails') === true;\n\n\tlet checkoutTypes: string[];\n\n\tif (checkoutTypeConfig === 'all' || !checkoutTypeConfig || checkoutTypeConfig.length === 0) {\n\t\tcheckoutTypes = ['local', 'remote', 'tags'];\n\t} else if (typeof checkoutTypeConfig === 'string') {\n\t\tcheckoutTypes = [checkoutTypeConfig];\n\t} else {\n\t\tcheckoutTypes = checkoutTypeConfig;\n\t}\n\n\tif (detached) {\n\t\t// Remove tags when in detached mode\n\t\tcheckoutTypes = checkoutTypes.filter(t => t !== 'tags');\n\t}\n\n\tconst refs = await repository.getRefs({ includeCommitDetails: showRefDetails });\n\tconst refProcessors = checkoutTypes.map(type => getCheckoutRefProcessor(repository, type))\n\t\t.filter(p => !!p) as RefProcessor[];\n\n\tconst buttons = await getRemoteRefItemButtons(repository);\n\tconst itemsProcessor = new CheckoutItemsProcessor(repository, refProcessors, buttons, detached);\n\n\treturn itemsProcessor.processRefs(refs);\n}\n\ntype RemoteSourceActionButton = {\n\ticonPath: ThemeIcon;\n\ttooltip: string;\n\tactual: RemoteSourceAction;\n};\n\nasync function getRemoteRefItemButtons(repository: Repository) {\n\t// Compute actions for all known remotes\n\tconst remoteUrlsToActions = new Map<string, RemoteSourceActionButton[]>();\n\n\tconst getButtons = async (remoteUrl: string) => (await getRemoteSourceActions(remoteUrl)).map((action) => ({ iconPath: new ThemeIcon(action.icon), tooltip: action.label, actual: action }));\n\n\tfor (const remote of repository.remotes) {\n\t\tif (remote.fetchUrl) {\n\t\t\tconst actions = remoteUrlsToActions.get(remote.fetchUrl) ?? [];\n\t\t\tactions.push(...await getButtons(remote.fetchUrl));\n\t\t\tremoteUrlsToActions.set(remote.fetchUrl, actions);\n\t\t}\n\t\tif (remote.pushUrl && remote.pushUrl !== remote.fetchUrl) {\n\t\t\tconst actions = remoteUrlsToActions.get(remote.pushUrl) ?? [];\n\t\t\tactions.push(...await getButtons(remote.pushUrl));\n\t\t\tremoteUrlsToActions.set(remote.pushUrl, actions);\n\t\t}\n\t}\n\n\treturn remoteUrlsToActions;\n}\n\nclass RefProcessor {\n\tprotected readonly refs: Ref[] = [];\n\n\tget items(): QuickPickItem[] {\n\t\tconst items = this.refs.map(r => new this.ctor(r));\n\t\treturn items.length === 0 ? items : [new RefItemSeparator(this.type), ...items];\n\t}\n\n\tconstructor(protected readonly type: RefType, protected readonly ctor: { new(ref: Ref): QuickPickItem } = RefItem) { }\n\n\tprocessRef(ref: Ref): boolean {\n\t\tif (!ref.name && !ref.commit) {\n\t\t\treturn false;\n\t\t}\n\t\tif (ref.type !== this.type) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.refs.push(ref);\n\t\treturn true;\n\t}\n}\n\nclass RefItemsProcessor {\n\n\tconstructor(\n\t\tprotected readonly repository: Repository,\n\t\tprotected readonly processors: RefProcessor[],\n\t\tprotected readonly options: {\n\t\t\tskipCurrentBranch?: boolean;\n\t\t\tskipCurrentBranchRemote?: boolean;\n\t\t} = {}\n\t) { }\n\n\tprocessRefs(refs: Ref[]): QuickPickItem[] {\n\t\tconst refsToSkip = this.getRefsToSkip();\n\n\t\tfor (const ref of refs) {\n\t\t\tif (ref.name && refsToSkip.includes(ref.name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const processor of this.processors) {\n\t\t\t\tif (processor.processRef(ref)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst result: QuickPickItem[] = [];\n\t\tfor (const processor of this.processors) {\n\t\t\tresult.push(...processor.items);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprotected getRefsToSkip(): string[] {\n\t\tconst refsToSkip = ['origin/HEAD'];\n\n\t\tif (this.options.skipCurrentBranch && this.repository.HEAD?.name) {\n\t\t\trefsToSkip.push(this.repository.HEAD.name);\n\t\t}\n\n\t\tif (this.options.skipCurrentBranchRemote && this.repository.HEAD?.upstream) {\n\t\t\trefsToSkip.push(`${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`);\n\t\t}\n\n\t\treturn refsToSkip;\n\t}\n}\n\nclass CheckoutRefProcessor extends RefProcessor {\n\n\toverride get items(): QuickPickItem[] {\n\t\tconst items = this.refs.map(ref => {\n\t\t\treturn this.repository.isBranchProtected(ref) ?\n\t\t\t\tnew CheckoutProtectedItem(ref) :\n\t\t\t\tnew CheckoutItem(ref);\n\t\t});\n\n\t\treturn items.length === 0 ? items : [new RefItemSeparator(this.type), ...items];\n\t}\n\n\tconstructor(private readonly repository: Repository) {\n\t\tsuper(RefType.Head);\n\t}\n}\n\nclass CheckoutItemsProcessor extends RefItemsProcessor {\n\n\tprivate defaultButtons: RemoteSourceActionButton[] | undefined;\n\n\tconstructor(\n\t\trepository: Repository,\n\t\tprocessors: RefProcessor[],\n\t\tprivate readonly buttons: Map<string, RemoteSourceActionButton[]>,\n\t\tprivate readonly detached = false) {\n\t\tsuper(repository, processors);\n\n\t\t// Default button(s)\n\t\tconst remote = repository.remotes.find(r => r.pushUrl === repository.HEAD?.remote || r.fetchUrl === repository.HEAD?.remote) ?? repository.remotes[0];\n\t\tconst remoteUrl = remote?.pushUrl ?? remote?.fetchUrl;\n\t\tif (remoteUrl) {\n\t\t\tthis.defaultButtons = buttons.get(remoteUrl);\n\t\t}\n\t}\n\n\toverride processRefs(refs: Ref[]): QuickPickItem[] {\n\t\tfor (const ref of refs) {\n\t\t\tif (!this.detached && ref.name === 'origin/HEAD') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const processor of this.processors) {\n\t\t\t\tif (processor.processRef(ref)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst result: QuickPickItem[] = [];\n\t\tfor (const processor of this.processors) {\n\t\t\tfor (const item of processor.items) {\n\t\t\t\tif (!(item instanceof RefItem)) {\n\t\t\t\t\tresult.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Button(s)\n\t\t\t\tif (item.refRemote) {\n\t\t\t\t\tconst matchingRemote = this.repository.remotes.find((remote) => remote.name === item.refRemote);\n\t\t\t\t\tconst buttons = [];\n\t\t\t\t\tif (matchingRemote?.pushUrl) {\n\t\t\t\t\t\tbuttons.push(...this.buttons.get(matchingRemote.pushUrl) ?? []);\n\t\t\t\t\t}\n\t\t\t\t\tif (matchingRemote?.fetchUrl && matchingRemote.fetchUrl !== matchingRemote.pushUrl) {\n\t\t\t\t\t\tbuttons.push(...this.buttons.get(matchingRemote.fetchUrl) ?? []);\n\t\t\t\t\t}\n\t\t\t\t\tif (buttons.length) {\n\t\t\t\t\t\titem.buttons = buttons;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\titem.buttons = this.defaultButtons;\n\t\t\t\t}\n\n\t\t\t\tresult.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nfunction getCheckoutRefProcessor(repository: Repository, type: string): RefProcessor | undefined {\n\tswitch (type) {\n\t\tcase 'local':\n\t\t\treturn new CheckoutRefProcessor(repository);\n\t\tcase 'remote':\n\t\t\treturn new RefProcessor(RefType.RemoteHead, CheckoutRemoteHeadItem);\n\t\tcase 'tags':\n\t\t\treturn new RefProcessor(RefType.Tag, CheckoutTagItem);\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction getRepositoryLabel(repositoryRoot: string): string {\n\tconst workspaceFolder = workspace.getWorkspaceFolder(Uri.file(repositoryRoot));\n\treturn workspaceFolder?.uri.toString() === repositoryRoot ? workspaceFolder.name : path.basename(repositoryRoot);\n}\n\nfunction compareRepositoryLabel(repositoryRoot1: string, repositoryRoot2: string): number {\n\treturn getRepositoryLabel(repositoryRoot1).localeCompare(getRepositoryLabel(repositoryRoot2));\n}\n\nfunction sanitizeBranchName(name: string, whitespaceChar: string): string {\n\treturn name ? name.trim().replace(/^-+/, '').replace(/^\\.|\\/\\.|\\.\\.|~|\\^|:|\\/$|\\.lock$|\\.lock\\/|\\\\|\\*|\\s|^\\s*$|\\.$|\\[|\\]$/g, whitespaceChar) : name;\n}\n\nfunction sanitizeRemoteName(name: string) {\n\tname = name.trim();\n\treturn name && name.replace(/^\\.|\\/\\.|\\.\\.|~|\\^|:|\\/$|\\.lock$|\\.lock\\/|\\\\|\\*|\\s|^\\s*$|\\.$|\\[|\\]$/g, '-');\n}\n\nenum PushType {\n\tPush,\n\tPushTo,\n\tPushFollowTags,\n\tPushTags\n}\n\ninterface PushOptions {\n\tpushType: PushType;\n\tforcePush?: boolean;\n\tsilent?: boolean;\n\n\tpushTo?: {\n\t\tremote?: string;\n\t\trefspec?: string;\n\t\tsetUpstream?: boolean;\n\t};\n}\n\nclass CommandErrorOutputTextDocumentContentProvider implements TextDocumentContentProvider {\n\n\tprivate items = new Map<string, string>();\n\n\tset(uri: Uri, contents: string): void {\n\t\tthis.items.set(uri.path, contents);\n\t}\n\n\tdelete(uri: Uri): void {\n\t\tthis.items.delete(uri.path);\n\t}\n\n\tprovideTextDocumentContent(uri: Uri): string | undefined {\n\t\treturn this.items.get(uri.path);\n\t}\n}\n\nasync function evaluateDiagnosticsCommitHook(repository: Repository, options: CommitOptions): Promise<boolean> {\n\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\tconst enabled = config.get<boolean>('diagnosticsCommitHook.Enabled', false) === true;\n\tconst sourceSeverity = config.get<Record<string, DiagnosticSeverityConfig>>('diagnosticsCommitHook.Sources', { '*': 'error' });\n\n\tif (!enabled) {\n\t\treturn true;\n\t}\n\n\tconst changes: Uri[] = [];\n\tif (repository.indexGroup.resourceStates.length > 0) {\n\t\t// Staged files\n\t\tchanges.push(...repository.indexGroup.resourceStates.map(r => r.resourceUri));\n\t} else if (options.all === 'tracked') {\n\t\t// Tracked files\n\t\tchanges.push(...repository.workingTreeGroup.resourceStates\n\t\t\t.filter(r => r.type !== Status.UNTRACKED && r.type !== Status.IGNORED)\n\t\t\t.map(r => r.resourceUri));\n\t} else {\n\t\t// All files\n\t\tchanges.push(...repository.workingTreeGroup.resourceStates.map(r => r.resourceUri));\n\t\tchanges.push(...repository.untrackedGroup.resourceStates.map(r => r.resourceUri));\n\t}\n\n\tconst diagnostics = languages.getDiagnostics();\n\tconst changesDiagnostics = diagnostics.filter(([uri, diags]) => {\n\t\t// File\n\t\tif (uri.scheme !== 'file' || !changes.find(c => pathEquals(c.fsPath, uri.fsPath))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Diagnostics\n\t\treturn diags.find(d => {\n\t\t\t// No source or ignored source\n\t\t\tif (!d.source || (Object.keys(sourceSeverity).includes(d.source) && sourceSeverity[d.source] === 'none')) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Source severity\n\t\t\tif (Object.keys(sourceSeverity).includes(d.source) &&\n\t\t\t\td.severity <= toDiagnosticSeverity(sourceSeverity[d.source])) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Wildcard severity\n\t\t\tif (Object.keys(sourceSeverity).includes('*') &&\n\t\t\t\td.severity <= toDiagnosticSeverity(sourceSeverity['*'])) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tif (changesDiagnostics.length === 0) {\n\t\treturn true;\n\t}\n\n\t// Show dialog\n\tconst commit = l10n.t('Commit Anyway');\n\tconst view = l10n.t('View Problems');\n\n\tconst message = changesDiagnostics.length === 1\n\t\t? l10n.t('The following file has unresolved diagnostics: \\'{0}\\'.\\n\\nHow would you like to proceed?', path.basename(changesDiagnostics[0][0].fsPath))\n\t\t: l10n.t('There are {0} files that have unresolved diagnostics.\\n\\nHow would you like to proceed?', changesDiagnostics.length);\n\n\tconst choice = await window.showWarningMessage(message, { modal: true }, commit, view);\n\n\t// Commit Anyway\n\tif (choice === commit) {\n\t\treturn true;\n\t}\n\n\t// View Problems\n\tif (choice === view) {\n\t\tcommands.executeCommand('workbench.panel.markers.view.focus');\n\t}\n\n\treturn false;\n}\n\nexport class CommandCenter {\n\n\tprivate disposables: Disposable[];\n\tprivate commandErrors = new CommandErrorOutputTextDocumentContentProvider();\n\n\tconstructor(\n\t\tprivate git: Git,\n\t\tprivate model: Model,\n\t\tprivate globalState: Memento,\n\t\tprivate logger: LogOutputChannel,\n\t\tprivate telemetryReporter: TelemetryReporter\n\t) {\n\t\tthis.disposables = Commands.map(({ commandId, key, method, options }) => {\n\t\t\tconst command = this.createCommand(commandId, key, method, options);\n\t\t\treturn commands.registerCommand(commandId, command);\n\t\t});\n\n\t\tthis.disposables.push(workspace.registerTextDocumentContentProvider('git-output', this.commandErrors));\n\t}\n\n\t@command('git.showOutput')\n\tshowOutput(): void {\n\t\tthis.logger.show();\n\t}\n\n\t@command('git.refresh', { repository: true })\n\tasync refresh(repository: Repository): Promise<void> {\n\t\tawait repository.refresh();\n\t}\n\n\t@command('git.openResource')\n\tasync openResource(resource: Resource): Promise<void> {\n\t\tconst repository = this.model.getRepository(resource.resourceUri);\n\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait resource.open();\n\t}\n\n\t@command('git.openAllChanges', { repository: true })\n\tasync openChanges(repository: Repository): Promise<void> {\n\t\tfor (const resource of [...repository.workingTreeGroup.resourceStates, ...repository.untrackedGroup.resourceStates]) {\n\t\t\tif (\n\t\t\t\tresource.type === Status.DELETED || resource.type === Status.DELETED_BY_THEM ||\n\t\t\t\tresource.type === Status.DELETED_BY_US || resource.type === Status.BOTH_DELETED\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvoid commands.executeCommand(\n\t\t\t\t'vscode.open',\n\t\t\t\tresource.resourceUri,\n\t\t\t\t{ background: true, preview: false, }\n\t\t\t);\n\t\t}\n\t}\n\n\t@command('git.openMergeEditor')\n\tasync openMergeEditor(uri: unknown) {\n\t\tif (uri === undefined) {\n\t\t\t// fallback to active editor...\n\t\t\tif (window.tabGroups.activeTabGroup.activeTab?.input instanceof TabInputText) {\n\t\t\t\turi = window.tabGroups.activeTabGroup.activeTab.input.uri;\n\t\t\t}\n\t\t}\n\t\tif (!(uri instanceof Uri)) {\n\t\t\treturn;\n\t\t}\n\t\tconst repo = this.model.getRepository(uri);\n\t\tif (!repo) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isRebasing = Boolean(repo.rebaseCommit);\n\n\t\ttype InputData = { uri: Uri; title?: string; detail?: string; description?: string };\n\t\tconst mergeUris = toMergeUris(uri);\n\n\t\tlet isStashConflict = false;\n\t\ttry {\n\t\t\t// Look at the conflict markers to check if this is a stash conflict\n\t\t\tconst document = await workspace.openTextDocument(uri);\n\t\t\tconst firstConflictInfo = findFirstConflictMarker(document);\n\t\t\tisStashConflict = firstConflictInfo?.incomingChangeLabel === 'Stashed changes';\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\n\t\tconst current: InputData = { uri: mergeUris.ours, title: l10n.t('Current') };\n\t\tconst incoming: InputData = { uri: mergeUris.theirs, title: l10n.t('Incoming') };\n\n\t\tif (isStashConflict) {\n\t\t\tincoming.title = l10n.t('Stashed Changes');\n\t\t}\n\n\t\ttry {\n\t\t\tconst [head, rebaseOrMergeHead, diffBetween] = await Promise.all([\n\t\t\t\trepo.getCommit('HEAD'),\n\t\t\t\tisRebasing ? repo.getCommit('REBASE_HEAD') : repo.getCommit('MERGE_HEAD'),\n\t\t\t\tawait repo.diffBetween(isRebasing ? 'REBASE_HEAD' : 'MERGE_HEAD', 'HEAD')\n\t\t\t]);\n\t\t\tconst diffFile = diffBetween?.find(diff => diff.uri.fsPath === uri.fsPath);\n\n\t\t\t// ours (current branch and commit)\n\t\t\tcurrent.detail = head.refNames.map(s => s.replace(/^HEAD ->/, '')).join(', ');\n\t\t\tcurrent.description = '$(git-commit) ' + head.hash.substring(0, 7);\n\t\t\tcurrent.uri = toGitUri(uri, head.hash);\n\n\t\t\t// theirs\n\t\t\tincoming.detail = rebaseOrMergeHead.refNames.join(', ');\n\t\t\tincoming.description = '$(git-commit) ' + rebaseOrMergeHead.hash.substring(0, 7);\n\t\t\tif (diffFile) {\n\t\t\t\tincoming.uri = toGitUri(diffFile.originalUri, rebaseOrMergeHead.hash);\n\t\t\t} else {\n\t\t\t\tincoming.uri = toGitUri(uri, rebaseOrMergeHead.hash);\n\t\t\t}\n\n\t\t} catch (error) {\n\t\t\t// not so bad, can continue with just uris\n\t\t\tconsole.error('FAILED to read HEAD, MERGE_HEAD commits');\n\t\t\tconsole.error(error);\n\t\t}\n\n\t\tconst options = {\n\t\t\tbase: mergeUris.base,\n\t\t\tinput1: isRebasing ? current : incoming,\n\t\t\tinput2: isRebasing ? incoming : current,\n\t\t\toutput: uri\n\t\t};\n\n\t\tawait commands.executeCommand(\n\t\t\t'_open.mergeEditor',\n\t\t\toptions\n\t\t);\n\n\t\tfunction findFirstConflictMarker(doc: TextDocument): { currentChangeLabel: string; incomingChangeLabel: string } | undefined {\n\t\t\tconst conflictMarkerStart = '<<<<<<<';\n\t\t\tconst conflictMarkerEnd = '>>>>>>>';\n\t\t\tlet inConflict = false;\n\t\t\tlet currentChangeLabel: string = '';\n\t\t\tlet incomingChangeLabel: string = '';\n\t\t\tlet hasConflict = false;\n\n\t\t\tfor (let lineIdx = 0; lineIdx < doc.lineCount; lineIdx++) {\n\t\t\t\tconst lineStr = doc.lineAt(lineIdx).text;\n\t\t\t\tif (!inConflict) {\n\t\t\t\t\tif (lineStr.startsWith(conflictMarkerStart)) {\n\t\t\t\t\t\tcurrentChangeLabel = lineStr.substring(conflictMarkerStart.length).trim();\n\t\t\t\t\t\tinConflict = true;\n\t\t\t\t\t\thasConflict = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (lineStr.startsWith(conflictMarkerEnd)) {\n\t\t\t\t\t\tincomingChangeLabel = lineStr.substring(conflictMarkerStart.length).trim();\n\t\t\t\t\t\tinConflict = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasConflict) {\n\t\t\t\treturn {\n\t\t\t\t\tcurrentChangeLabel,\n\t\t\t\t\tincomingChangeLabel\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync cloneRepository(url?: string, parentPath?: string, options: { recursive?: boolean; ref?: string } = {}): Promise<void> {\n\t\tif (!url || typeof url !== 'string') {\n\t\t\turl = await pickRemoteSource({\n\t\t\t\tproviderLabel: provider => l10n.t('Clone from {0}', provider.name),\n\t\t\t\turlLabel: l10n.t('Clone from URL')\n\t\t\t});\n\t\t}\n\n\t\tif (!url) {\n\t\t\t/* __GDPR__\n\t\t\t\t\"clone\" : {\n\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\"outcome\" : { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"The outcome of the git operation\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('clone', { outcome: 'no_URL' });\n\t\t\treturn;\n\t\t}\n\n\t\turl = url.trim().replace(/^git\\s+clone\\s+/, '');\n\n\t\tif (!parentPath) {\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tlet defaultCloneDirectory = config.get<string>('defaultCloneDirectory') || os.homedir();\n\t\t\tdefaultCloneDirectory = defaultCloneDirectory.replace(/^~/, os.homedir());\n\n\t\t\tconst uris = await window.showOpenDialog({\n\t\t\t\tcanSelectFiles: false,\n\t\t\t\tcanSelectFolders: true,\n\t\t\t\tcanSelectMany: false,\n\t\t\t\tdefaultUri: Uri.file(defaultCloneDirectory),\n\t\t\t\ttitle: l10n.t('Choose a folder to clone {0} into', url),\n\t\t\t\topenLabel: l10n.t('Select as Repository Destination')\n\t\t\t});\n\n\t\t\tif (!uris || uris.length === 0) {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"clone\" : {\n\t\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\t\"outcome\" : { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"The outcome of the git operation\" }\n\t\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\tthis.telemetryReporter.sendTelemetryEvent('clone', { outcome: 'no_directory' });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst uri = uris[0];\n\t\t\tparentPath = uri.fsPath;\n\t\t}\n\n\t\ttry {\n\t\t\tconst opts = {\n\t\t\t\tlocation: ProgressLocation.Notification,\n\t\t\t\ttitle: l10n.t('Cloning git repository \"{0}\"...', url),\n\t\t\t\tcancellable: true\n\t\t\t};\n\n\t\t\tconst repositoryPath = await window.withProgress(\n\t\t\t\topts,\n\t\t\t\t(progress, token) => this.git.clone(url!, { parentPath: parentPath!, progress, recursive: options.recursive, ref: options.ref }, token)\n\t\t\t);\n\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tconst openAfterClone = config.get<'always' | 'alwaysNewWindow' | 'whenNoFolderOpen' | 'prompt'>('openAfterClone');\n\n\t\t\tenum PostCloneAction { Open, OpenNewWindow, AddToWorkspace }\n\t\t\tlet action: PostCloneAction | undefined = undefined;\n\n\t\t\tif (openAfterClone === 'always') {\n\t\t\t\taction = PostCloneAction.Open;\n\t\t\t} else if (openAfterClone === 'alwaysNewWindow') {\n\t\t\t\taction = PostCloneAction.OpenNewWindow;\n\t\t\t} else if (openAfterClone === 'whenNoFolderOpen' && !workspace.workspaceFolders) {\n\t\t\t\taction = PostCloneAction.Open;\n\t\t\t}\n\n\t\t\tif (action === undefined) {\n\t\t\t\tlet message = l10n.t('Would you like to open the cloned repository?');\n\t\t\t\tconst open = l10n.t('Open');\n\t\t\t\tconst openNewWindow = l10n.t('Open in New Window');\n\t\t\t\tconst choices = [open, openNewWindow];\n\n\t\t\t\tconst addToWorkspace = l10n.t('Add to Workspace');\n\t\t\t\tif (workspace.workspaceFolders) {\n\t\t\t\t\tmessage = l10n.t('Would you like to open the cloned repository, or add it to the current workspace?');\n\t\t\t\t\tchoices.push(addToWorkspace);\n\t\t\t\t}\n\n\t\t\t\tconst result = await window.showInformationMessage(message, { modal: true }, ...choices);\n\n\t\t\t\taction = result === open ? PostCloneAction.Open\n\t\t\t\t\t: result === openNewWindow ? PostCloneAction.OpenNewWindow\n\t\t\t\t\t\t: result === addToWorkspace ? PostCloneAction.AddToWorkspace : undefined;\n\t\t\t}\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"clone\" : {\n\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\"outcome\" : { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"The outcome of the git operation\" },\n\t\t\t\t\t\"openFolder\": { \"classification\": \"SystemMetaData\", \"purpose\": \"PerformanceAndHealth\", \"isMeasurement\": true, \"comment\": \"Indicates whether the folder is opened following the clone operation\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('clone', { outcome: 'success' }, { openFolder: action === PostCloneAction.Open || action === PostCloneAction.OpenNewWindow ? 1 : 0 });\n\n\t\t\tconst uri = Uri.file(repositoryPath);\n\n\t\t\tif (action === PostCloneAction.Open) {\n\t\t\t\tcommands.executeCommand('vscode.openFolder', uri, { forceReuseWindow: true });\n\t\t\t} else if (action === PostCloneAction.AddToWorkspace) {\n\t\t\t\tworkspace.updateWorkspaceFolders(workspace.workspaceFolders!.length, 0, { uri });\n\t\t\t} else if (action === PostCloneAction.OpenNewWindow) {\n\t\t\t\tcommands.executeCommand('vscode.openFolder', uri, { forceNewWindow: true });\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (/already exists and is not an empty directory/.test(err && err.stderr || '')) {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"clone\" : {\n\t\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\t\"outcome\" : { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"The outcome of the git operation\" }\n\t\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\tthis.telemetryReporter.sendTelemetryEvent('clone', { outcome: 'directory_not_empty' });\n\t\t\t} else if (/Cancelled/i.test(err && (err.message || err.stderr || ''))) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"clone\" : {\n\t\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\t\"outcome\" : { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"The outcome of the git operation\" }\n\t\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\tthis.telemetryReporter.sendTelemetryEvent('clone', { outcome: 'error' });\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t@command('git.continueInLocalClone')\n\tasync continueInLocalClone(): Promise<Uri | void> {\n\t\tif (this.model.repositories.length === 0) { return; }\n\n\t\t// Pick a single repository to continue working on in a local clone if there's more than one\n\t\tconst items = this.model.repositories.reduce<(QuickPickItem & { repository: Repository })[]>((items, repository) => {\n\t\t\tconst remote = repository.remotes.find((r) => r.name === repository.HEAD?.upstream?.remote);\n\t\t\tif (remote?.pushUrl) {\n\t\t\t\titems.push({ repository: repository, label: remote.pushUrl });\n\t\t\t}\n\t\t\treturn items;\n\t\t}, []);\n\n\t\tlet selection = items[0];\n\t\tif (items.length > 1) {\n\t\t\tconst pick = await window.showQuickPick(items, { canPickMany: false, placeHolder: l10n.t('Choose which repository to clone') });\n\t\t\tif (pick === undefined) { return; }\n\t\t\tselection = pick;\n\t\t}\n\n\t\tconst uri = selection.label;\n\t\tconst ref = selection.repository.HEAD?.upstream?.name;\n\n\t\tif (uri !== undefined) {\n\t\t\tlet target = `${env.uriScheme}://vscode.git/clone?url=${encodeURIComponent(uri)}`;\n\t\t\tconst isWeb = env.uiKind === UIKind.Web;\n\t\t\tconst isRemote = env.remoteName !== undefined;\n\n\t\t\tif (isWeb || isRemote) {\n\t\t\t\tif (ref !== undefined) {\n\t\t\t\t\ttarget += `&ref=${encodeURIComponent(ref)}`;\n\t\t\t\t}\n\n\t\t\t\tif (isWeb) {\n\t\t\t\t\t// Launch desktop client if currently in web\n\t\t\t\t\treturn Uri.parse(target);\n\t\t\t\t}\n\n\t\t\t\tif (isRemote) {\n\t\t\t\t\t// If already in desktop client but in a remote window, we need to force a new window\n\t\t\t\t\t// so that the git extension can access the local filesystem for cloning\n\t\t\t\t\ttarget += `&windowId=_blank`;\n\t\t\t\t\treturn Uri.parse(target);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Otherwise, directly clone\n\t\t\tvoid this.clone(uri, undefined, { ref: ref });\n\t\t}\n\t}\n\n\t@command('git.clone')\n\tasync clone(url?: string, parentPath?: string, options?: { ref?: string }): Promise<void> {\n\t\tawait this.cloneRepository(url, parentPath, options);\n\t}\n\n\t@command('git.cloneRecursive')\n\tasync cloneRecursive(url?: string, parentPath?: string): Promise<void> {\n\t\tawait this.cloneRepository(url, parentPath, { recursive: true });\n\t}\n\n\t@command('git.init')\n\tasync init(skipFolderPrompt = false): Promise<void> {\n\t\tlet repositoryPath: string | undefined = undefined;\n\t\tlet askToOpen = true;\n\n\t\tif (workspace.workspaceFolders) {\n\t\t\tif (skipFolderPrompt && workspace.workspaceFolders.length === 1) {\n\t\t\t\trepositoryPath = workspace.workspaceFolders[0].uri.fsPath;\n\t\t\t\taskToOpen = false;\n\t\t\t} else {\n\t\t\t\tconst placeHolder = l10n.t('Pick workspace folder to initialize git repo in');\n\t\t\t\tconst pick = { label: l10n.t('Choose Folder...') };\n\t\t\t\tconst items: { label: string; folder?: WorkspaceFolder }[] = [\n\t\t\t\t\t...workspace.workspaceFolders.map(folder => ({ label: folder.name, description: folder.uri.fsPath, folder })),\n\t\t\t\t\tpick\n\t\t\t\t];\n\t\t\t\tconst item = await window.showQuickPick(items, { placeHolder, ignoreFocusOut: true });\n\n\t\t\t\tif (!item) {\n\t\t\t\t\treturn;\n\t\t\t\t} else if (item.folder) {\n\t\t\t\t\trepositoryPath = item.folder.uri.fsPath;\n\t\t\t\t\taskToOpen = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!repositoryPath) {\n\t\t\tconst homeUri = Uri.file(os.homedir());\n\t\t\tconst defaultUri = workspace.workspaceFolders && workspace.workspaceFolders.length > 0\n\t\t\t\t? Uri.file(workspace.workspaceFolders[0].uri.fsPath)\n\t\t\t\t: homeUri;\n\n\t\t\tconst result = await window.showOpenDialog({\n\t\t\t\tcanSelectFiles: false,\n\t\t\t\tcanSelectFolders: true,\n\t\t\t\tcanSelectMany: false,\n\t\t\t\tdefaultUri,\n\t\t\t\topenLabel: l10n.t('Initialize Repository')\n\t\t\t});\n\n\t\t\tif (!result || result.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst uri = result[0];\n\n\t\t\tif (homeUri.toString().startsWith(uri.toString())) {\n\t\t\t\tconst yes = l10n.t('Initialize Repository');\n\t\t\t\tconst answer = await window.showWarningMessage(l10n.t('This will create a Git repository in \"{0}\". Are you sure you want to continue?', uri.fsPath), yes);\n\n\t\t\t\tif (answer !== yes) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trepositoryPath = uri.fsPath;\n\n\t\t\tif (workspace.workspaceFolders && workspace.workspaceFolders.some(w => w.uri.toString() === uri.toString())) {\n\t\t\t\taskToOpen = false;\n\t\t\t}\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst defaultBranchName = config.get<string>('defaultBranchName', 'main');\n\t\tconst branchWhitespaceChar = config.get<string>('branchWhitespaceChar', '-');\n\n\t\tawait this.git.init(repositoryPath, { defaultBranch: sanitizeBranchName(defaultBranchName, branchWhitespaceChar) });\n\n\t\tlet message = l10n.t('Would you like to open the initialized repository?');\n\t\tconst open = l10n.t('Open');\n\t\tconst openNewWindow = l10n.t('Open in New Window');\n\t\tconst choices = [open, openNewWindow];\n\n\t\tif (!askToOpen) {\n\t\t\tawait this.model.openRepository(repositoryPath);\n\t\t\treturn;\n\t\t}\n\n\t\tconst addToWorkspace = l10n.t('Add to Workspace');\n\t\tif (workspace.workspaceFolders) {\n\t\t\tmessage = l10n.t('Would you like to open the initialized repository, or add it to the current workspace?');\n\t\t\tchoices.push(addToWorkspace);\n\t\t}\n\n\t\tconst result = await window.showInformationMessage(message, ...choices);\n\t\tconst uri = Uri.file(repositoryPath);\n\n\t\tif (result === open) {\n\t\t\tcommands.executeCommand('vscode.openFolder', uri);\n\t\t} else if (result === addToWorkspace) {\n\t\t\tworkspace.updateWorkspaceFolders(workspace.workspaceFolders!.length, 0, { uri });\n\t\t} else if (result === openNewWindow) {\n\t\t\tcommands.executeCommand('vscode.openFolder', uri, true);\n\t\t} else {\n\t\t\tawait this.model.openRepository(repositoryPath);\n\t\t}\n\t}\n\n\t@command('git.openRepository', { repository: false })\n\tasync openRepository(path?: string): Promise<void> {\n\t\tif (!path) {\n\t\t\tconst result = await window.showOpenDialog({\n\t\t\t\tcanSelectFiles: false,\n\t\t\t\tcanSelectFolders: true,\n\t\t\t\tcanSelectMany: false,\n\t\t\t\tdefaultUri: Uri.file(os.homedir()),\n\t\t\t\topenLabel: l10n.t('Open Repository')\n\t\t\t});\n\n\t\t\tif (!result || result.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpath = result[0].fsPath;\n\t\t}\n\n\t\tawait this.model.openRepository(path, true);\n\t}\n\n\t@command('git.reopenClosedRepositories', { repository: false })\n\tasync reopenClosedRepositories(): Promise<void> {\n\t\tif (this.model.closedRepositories.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst closedRepositories: string[] = [];\n\n\t\tconst title = l10n.t('Reopen Closed Repositories');\n\t\tconst placeHolder = l10n.t('Pick a repository to reopen');\n\n\t\tconst allRepositoriesLabel = l10n.t('All Repositories');\n\t\tconst allRepositoriesQuickPickItem: QuickPickItem = { label: allRepositoriesLabel };\n\t\tconst repositoriesQuickPickItems: QuickPickItem[] = this.model.closedRepositories\n\t\t\t.sort(compareRepositoryLabel).map(r => new RepositoryItem(r));\n\n\t\tconst items = this.model.closedRepositories.length === 1 ? [...repositoriesQuickPickItems] :\n\t\t\t[...repositoriesQuickPickItems, { label: '', kind: QuickPickItemKind.Separator }, allRepositoriesQuickPickItem];\n\n\t\tconst repositoryItem = await window.showQuickPick(items, { title, placeHolder });\n\t\tif (!repositoryItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (repositoryItem === allRepositoriesQuickPickItem) {\n\t\t\t// All Repositories\n\t\t\tclosedRepositories.push(...this.model.closedRepositories.values());\n\t\t} else {\n\t\t\t// One Repository\n\t\t\tclosedRepositories.push((repositoryItem as RepositoryItem).path);\n\t\t}\n\n\t\tfor (const repository of closedRepositories) {\n\t\t\tawait this.model.openRepository(repository, true);\n\t\t}\n\t}\n\n\t@command('git.close', { repository: true })\n\tasync close(repository: Repository, ...args: SourceControl[]): Promise<void> {\n\t\tconst otherRepositories = args\n\t\t\t.map(sourceControl => this.model.getRepository(sourceControl))\n\t\t\t.filter(isDefined);\n\n\t\tfor (const r of [repository, ...otherRepositories]) {\n\t\t\tthis.model.close(r);\n\t\t}\n\t}\n\n\t@command('git.closeOtherRepositories', { repository: true })\n\tasync closeOtherRepositories(repository: Repository, ...args: SourceControl[]): Promise<void> {\n\t\tconst otherRepositories = args\n\t\t\t.map(sourceControl => this.model.getRepository(sourceControl))\n\t\t\t.filter(isDefined);\n\n\t\tconst selectedRepositories = [repository, ...otherRepositories];\n\t\tfor (const r of this.model.repositories) {\n\t\t\tif (selectedRepositories.includes(r)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.model.close(r);\n\t\t}\n\t}\n\n\t@command('git.openFile')\n\tasync openFile(arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise<void> {\n\t\tconst preserveFocus = arg instanceof Resource;\n\n\t\tlet uris: Uri[] | undefined;\n\n\t\tif (arg instanceof Uri) {\n\t\t\tif (isGitUri(arg)) {\n\t\t\t\turis = [Uri.file(fromGitUri(arg).path)];\n\t\t\t} else if (arg.scheme === 'file') {\n\t\t\t\turis = [arg];\n\t\t\t}\n\t\t} else {\n\t\t\tlet resource = arg;\n\n\t\t\tif (!(resource instanceof Resource)) {\n\t\t\t\t// can happen when called from a keybinding\n\t\t\t\tresource = this.getSCMResource();\n\t\t\t}\n\n\t\t\tif (resource) {\n\t\t\t\turis = ([resource, ...resourceStates] as Resource[])\n\t\t\t\t\t.filter(r => r.type !== Status.DELETED && r.type !== Status.INDEX_DELETED)\n\t\t\t\t\t.map(r => r.resourceUri);\n\t\t\t} else if (window.activeTextEditor) {\n\t\t\t\turis = [window.activeTextEditor.document.uri];\n\t\t\t}\n\t\t}\n\n\t\tif (!uris) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeTextEditor = window.activeTextEditor;\n\t\t// Must extract these now because opening a new document will change the activeTextEditor reference\n\t\tconst previousVisibleRanges = activeTextEditor?.visibleRanges;\n\t\tconst previousURI = activeTextEditor?.document.uri;\n\t\tconst previousSelection = activeTextEditor?.selection;\n\n\t\tfor (const uri of uris) {\n\t\t\tconst opts: TextDocumentShowOptions = {\n\t\t\t\tpreserveFocus,\n\t\t\t\tpreview: false,\n\t\t\t\tviewColumn: ViewColumn.Active\n\t\t\t};\n\n\t\t\tawait commands.executeCommand('vscode.open', uri, {\n\t\t\t\t...opts,\n\t\t\t\toverride: arg instanceof Resource && arg.type === Status.BOTH_MODIFIED ? false : undefined\n\t\t\t});\n\n\t\t\tconst document = window.activeTextEditor?.document;\n\n\t\t\t// If the document doesn't match what we opened then don't attempt to select the range\n\t\t\t// Additionally if there was no previous document we don't have information to select a range\n\t\t\tif (document?.uri.toString() !== uri.toString() || !activeTextEditor || !previousURI || !previousSelection) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check if active text editor has same path as other editor. we cannot compare via\n\t\t\t// URI.toString() here because the schemas can be different. Instead we just go by path.\n\t\t\tif (previousURI.path === uri.path && document) {\n\t\t\t\t// preserve not only selection but also visible range\n\t\t\t\topts.selection = previousSelection;\n\t\t\t\tconst editor = await window.showTextDocument(document, opts);\n\t\t\t\t// This should always be defined but just in case\n\t\t\t\tif (previousVisibleRanges && previousVisibleRanges.length > 0) {\n\t\t\t\t\tlet rangeToReveal = previousVisibleRanges[0];\n\t\t\t\t\tif (previousSelection && previousVisibleRanges.length > 1) {\n\t\t\t\t\t\t// In case of multiple visible ranges, find the one that intersects with the selection\n\t\t\t\t\t\trangeToReveal = previousVisibleRanges.find(r => r.intersection(previousSelection)) ?? rangeToReveal;\n\t\t\t\t\t}\n\t\t\t\t\teditor.revealRange(rangeToReveal);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t@command('git.openFile2')\n\tasync openFile2(arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise<void> {\n\t\tthis.openFile(arg, ...resourceStates);\n\t}\n\n\t@command('git.openHEADFile')\n\tasync openHEADFile(arg?: Resource | Uri): Promise<void> {\n\t\tlet resource: Resource | undefined = undefined;\n\t\tconst preview = !(arg instanceof Resource);\n\n\t\tif (arg instanceof Resource) {\n\t\t\tresource = arg;\n\t\t} else if (arg instanceof Uri) {\n\t\t\tresource = this.getSCMResource(arg);\n\t\t} else {\n\t\t\tresource = this.getSCMResource();\n\t\t}\n\n\t\tif (!resource) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst HEAD = resource.leftUri;\n\t\tconst basename = path.basename(resource.resourceUri.fsPath);\n\t\tconst title = `${basename} (HEAD)`;\n\n\t\tif (!HEAD) {\n\t\t\twindow.showWarningMessage(l10n.t('HEAD version of \"{0}\" is not available.', path.basename(resource.resourceUri.fsPath)));\n\t\t\treturn;\n\t\t}\n\n\t\tconst opts: TextDocumentShowOptions = {\n\t\t\tpreview\n\t\t};\n\n\t\treturn await commands.executeCommand<void>('vscode.open', HEAD, opts, title);\n\t}\n\n\t@command('git.openChange')\n\tasync openChange(arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise<void> {\n\t\tlet resources: Resource[] | undefined = undefined;\n\n\t\tif (arg instanceof Uri) {\n\t\t\tconst resource = this.getSCMResource(arg);\n\t\t\tif (resource !== undefined) {\n\t\t\t\tresources = [resource];\n\t\t\t}\n\t\t} else {\n\t\t\tlet resource: Resource | undefined = undefined;\n\n\t\t\tif (arg instanceof Resource) {\n\t\t\t\tresource = arg;\n\t\t\t} else {\n\t\t\t\tresource = this.getSCMResource();\n\t\t\t}\n\n\t\t\tif (resource) {\n\t\t\t\tresources = [...resourceStates as Resource[], resource];\n\t\t\t}\n\t\t}\n\n\t\tif (!resources) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const resource of resources) {\n\t\t\tawait resource.openChange();\n\t\t}\n\t}\n\n\t@command('git.rename', { repository: true })\n\tasync rename(repository: Repository, fromUri: Uri | undefined): Promise<void> {\n\t\tfromUri = fromUri ?? window.activeTextEditor?.document.uri;\n\n\t\tif (!fromUri) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst from = relativePath(repository.root, fromUri.fsPath);\n\t\tlet to = await window.showInputBox({\n\t\t\tvalue: from,\n\t\t\tvalueSelection: [from.length - path.basename(from).length, from.length]\n\t\t});\n\n\t\tto = to?.trim();\n\n\t\tif (!to) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.move(from, to);\n\n\t\t// Close active editor and open the renamed file\n\t\tawait commands.executeCommand('workbench.action.closeActiveEditor');\n\t\tawait commands.executeCommand('vscode.open', Uri.file(path.join(repository.root, to)), { viewColumn: ViewColumn.Active });\n\t}\n\n\t@command('git.stage')\n\tasync stage(...resourceStates: SourceControlResourceState[]): Promise<void> {\n\t\tthis.logger.debug(`[CommandCenter][stage] git.stage ${resourceStates.length} `);\n\n\t\tresourceStates = resourceStates.filter(s => !!s);\n\n\t\tif (resourceStates.length === 0 || (resourceStates[0] && !(resourceStates[0].resourceUri instanceof Uri))) {\n\t\t\tconst resource = this.getSCMResource();\n\n\t\t\tthis.logger.debug(`[CommandCenter][stage] git.stage.getSCMResource ${resource ? resource.resourceUri.toString() : null} `);\n\n\t\t\tif (!resource) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourceStates = [resource];\n\t\t}\n\n\t\tconst selection = resourceStates.filter(s => s instanceof Resource) as Resource[];\n\t\tconst { resolved, unresolved, deletionConflicts } = await categorizeResourceByResolution(selection);\n\n\t\tif (unresolved.length > 0) {\n\t\t\tconst message = unresolved.length > 1\n\t\t\t\t? l10n.t('Are you sure you want to stage {0} files with merge conflicts?', unresolved.length)\n\t\t\t\t: l10n.t('Are you sure you want to stage {0} with merge conflicts?', path.basename(unresolved[0].resourceUri.fsPath));\n\n\t\t\tconst yes = l10n.t('Yes');\n\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes);\n\n\t\t\tif (pick !== yes) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.runByRepository(deletionConflicts.map(r => r.resourceUri), async (repository, resources) => {\n\t\t\t\tfor (const resource of resources) {\n\t\t\t\t\tawait this._stageDeletionConflict(repository, resource);\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tif (/Cancelled/.test(err.message)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\n\t\tconst workingTree = selection.filter(s => s.resourceGroupType === ResourceGroupType.WorkingTree);\n\t\tconst untracked = selection.filter(s => s.resourceGroupType === ResourceGroupType.Untracked);\n\t\tconst scmResources = [...workingTree, ...untracked, ...resolved, ...unresolved];\n\n\t\tthis.logger.debug(`[CommandCenter][stage] git.stage.scmResources ${scmResources.length} `);\n\t\tif (!scmResources.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resources = scmResources.map(r => r.resourceUri);\n\t\tawait this.runByRepository(resources, async (repository, resources) => repository.add(resources));\n\t}\n\n\t@command('git.stageAll', { repository: true })\n\tasync stageAll(repository: Repository): Promise<void> {\n\t\tconst resources = [...repository.workingTreeGroup.resourceStates, ...repository.untrackedGroup.resourceStates];\n\t\tconst uris = resources.map(r => r.resourceUri);\n\n\t\tif (uris.length > 0) {\n\t\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\t\tconst untrackedChanges = config.get<'mixed' | 'separate' | 'hidden'>('untrackedChanges');\n\t\t\tawait repository.add(uris, untrackedChanges === 'mixed' ? undefined : { update: true });\n\t\t}\n\t}\n\n\tprivate async _stageDeletionConflict(repository: Repository, uri: Uri): Promise<void> {\n\t\tconst uriString = uri.toString();\n\t\tconst resource = repository.mergeGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString)[0];\n\n\t\tif (!resource) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (resource.type === Status.DELETED_BY_THEM) {\n\t\t\tconst keepIt = l10n.t('Keep Our Version');\n\t\t\tconst deleteIt = l10n.t('Delete File');\n\t\t\tconst result = await window.showInformationMessage(l10n.t('File \"{0}\" was deleted by them and modified by us.\\n\\nWhat would you like to do?', path.basename(uri.fsPath)), { modal: true }, keepIt, deleteIt);\n\n\t\t\tif (result === keepIt) {\n\t\t\t\tawait repository.add([uri]);\n\t\t\t} else if (result === deleteIt) {\n\t\t\t\tawait repository.rm([uri]);\n\t\t\t} else {\n\t\t\t\tthrow new Error('Cancelled');\n\t\t\t}\n\t\t} else if (resource.type === Status.DELETED_BY_US) {\n\t\t\tconst keepIt = l10n.t('Keep Their Version');\n\t\t\tconst deleteIt = l10n.t('Delete File');\n\t\t\tconst result = await window.showInformationMessage(l10n.t('File \"{0}\" was deleted by us and modified by them.\\n\\nWhat would you like to do?', path.basename(uri.fsPath)), { modal: true }, keepIt, deleteIt);\n\n\t\t\tif (result === keepIt) {\n\t\t\t\tawait repository.add([uri]);\n\t\t\t} else if (result === deleteIt) {\n\t\t\t\tawait repository.rm([uri]);\n\t\t\t} else {\n\t\t\t\tthrow new Error('Cancelled');\n\t\t\t}\n\t\t}\n\t}\n\n\t@command('git.stageAllTracked', { repository: true })\n\tasync stageAllTracked(repository: Repository): Promise<void> {\n\t\tconst resources = repository.workingTreeGroup.resourceStates\n\t\t\t.filter(r => r.type !== Status.UNTRACKED && r.type !== Status.IGNORED);\n\t\tconst uris = resources.map(r => r.resourceUri);\n\n\t\tawait repository.add(uris);\n\t}\n\n\t@command('git.stageAllUntracked', { repository: true })\n\tasync stageAllUntracked(repository: Repository): Promise<void> {\n\t\tconst resources = [...repository.workingTreeGroup.resourceStates, ...repository.untrackedGroup.resourceStates]\n\t\t\t.filter(r => r.type === Status.UNTRACKED || r.type === Status.IGNORED);\n\t\tconst uris = resources.map(r => r.resourceUri);\n\n\t\tawait repository.add(uris);\n\t}\n\n\t@command('git.stageAllMerge', { repository: true })\n\tasync stageAllMerge(repository: Repository): Promise<void> {\n\t\tconst resources = repository.mergeGroup.resourceStates.filter(s => s instanceof Resource) as Resource[];\n\t\tconst { merge, unresolved, deletionConflicts } = await categorizeResourceByResolution(resources);\n\n\t\ttry {\n\t\t\tfor (const deletionConflict of deletionConflicts) {\n\t\t\t\tawait this._stageDeletionConflict(repository, deletionConflict.resourceUri);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (/Cancelled/.test(err.message)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (unresolved.length > 0) {\n\t\t\tconst message = unresolved.length > 1\n\t\t\t\t? l10n.t('Are you sure you want to stage {0} files with merge conflicts?', merge.length)\n\t\t\t\t: l10n.t('Are you sure you want to stage {0} with merge conflicts?', path.basename(merge[0].resourceUri.fsPath));\n\n\t\t\tconst yes = l10n.t('Yes');\n\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes);\n\n\t\t\tif (pick !== yes) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst uris = resources.map(r => r.resourceUri);\n\n\t\tif (uris.length > 0) {\n\t\t\tawait repository.add(uris);\n\t\t}\n\t}\n\n\t@command('git.stageChange')\n\tasync stageChange(uri: Uri, changes: LineChange[], index: number): Promise<void> {\n\t\tif (!uri) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst textEditor = window.visibleTextEditors.filter(e => e.document.uri.toString() === uri.toString())[0];\n\n\t\tif (!textEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._stageChanges(textEditor, [changes[index]]);\n\n\t\tconst firstStagedLine = changes[index].modifiedStartLineNumber;\n\t\ttextEditor.selections = [new Selection(firstStagedLine, 0, firstStagedLine, 0)];\n\t}\n\n\t@command('git.diff.stageHunk')\n\tasync diffStageHunk(changes: DiffEditorSelectionHunkToolbarContext | undefined): Promise<void> {\n\t\tthis.diffStageHunkOrSelection(changes);\n\t}\n\n\t@command('git.diff.stageSelection')\n\tasync diffStageSelection(changes: DiffEditorSelectionHunkToolbarContext | undefined): Promise<void> {\n\t\tthis.diffStageHunkOrSelection(changes);\n\t}\n\n\tasync diffStageHunkOrSelection(changes: DiffEditorSelectionHunkToolbarContext | undefined): Promise<void> {\n\t\tif (!changes) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet modifiedUri = changes.modifiedUri;\n\t\tlet modifiedDocument: TextDocument | undefined;\n\n\t\tif (!modifiedUri) {\n\t\t\tconst textEditor = window.activeTextEditor;\n\t\t\tif (!textEditor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmodifiedDocument = textEditor.document;\n\t\t\tmodifiedUri = modifiedDocument.uri;\n\t\t}\n\n\t\tif (modifiedUri.scheme !== 'file') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!modifiedDocument) {\n\t\t\tmodifiedDocument = await workspace.openTextDocument(modifiedUri);\n\t\t}\n\n\t\tconst result = changes.originalWithModifiedChanges;\n\t\tawait this.runByRepository(modifiedUri, async (repository, resource) =>\n\t\t\tawait repository.stage(resource, result, modifiedDocument.encoding));\n\t}\n\n\t@command('git.stageSelectedRanges')\n\tasync stageSelectedChanges(): Promise<void> {\n\t\tconst textEditor = window.activeTextEditor;\n\n\t\tif (!textEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst workingTreeDiffInformation = getWorkingTreeDiffInformation(textEditor);\n\t\tif (!workingTreeDiffInformation) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst workingTreeLineChanges = toLineChanges(workingTreeDiffInformation);\n\n\t\tthis.logger.trace(`[CommandCenter][stageSelectedChanges] diffInformation: ${JSON.stringify(workingTreeDiffInformation)}`);\n\t\tthis.logger.trace(`[CommandCenter][stageSelectedChanges] diffInformation changes: ${JSON.stringify(workingTreeLineChanges)}`);\n\n\t\tconst modifiedDocument = textEditor.document;\n\t\tconst selectedLines = toLineRanges(textEditor.selections, modifiedDocument);\n\t\tconst selectedChanges = workingTreeLineChanges\n\t\t\t.map(change => selectedLines.reduce<LineChange | null>((result, range) => result || intersectDiffWithRange(modifiedDocument, change, range), null))\n\t\t\t.filter(d => !!d) as LineChange[];\n\n\t\tthis.logger.trace(`[CommandCenter][stageSelectedChanges] selectedChanges: ${JSON.stringify(selectedChanges)}`);\n\n\t\tif (!selectedChanges.length) {\n\t\t\twindow.showInformationMessage(l10n.t('The selection range does not contain any changes.'));\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._stageChanges(textEditor, selectedChanges);\n\t}\n\n\t@command('git.stageFile')\n\tasync stageFile(uri: Uri): Promise<void> {\n\t\tif (!uri) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst repository = this.model.getRepository(uri);\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resources = [\n\t\t\t...repository.workingTreeGroup.resourceStates,\n\t\t\t...repository.untrackedGroup.resourceStates]\n\t\t\t.filter(r => r.multiFileDiffEditorModifiedUri?.toString() === uri.toString())\n\t\t\t.map(r => r.resourceUri);\n\n\t\tif (resources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.add(resources);\n\t}\n\n\t@command('git.acceptMerge')\n\tasync acceptMerge(_uri: Uri | unknown): Promise<void> {\n\t\tconst { activeTab } = window.tabGroups.activeTabGroup;\n\t\tif (!activeTab) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!(activeTab.input instanceof TabInputTextMerge)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst uri = activeTab.input.result;\n\n\t\tconst repository = this.model.getRepository(uri);\n\t\tif (!repository) {\n\t\t\tconsole.log(`FAILED to complete merge because uri ${uri.toString()} doesn't belong to any repository`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await commands.executeCommand('mergeEditor.acceptMerge') as { successful: boolean };\n\t\tif (result.successful) {\n\t\t\tawait repository.add([uri]);\n\t\t\tawait commands.executeCommand('workbench.view.scm');\n\t\t}\n\n\t\t/*\n\t\tif (!(uri instanceof Uri)) {\n\t\t\treturn;\n\t\t}\n\n\n\n\n\t\t// make sure to save the merged document\n\t\tconst doc = workspace.textDocuments.find(doc => doc.uri.toString() === uri.toString());\n\t\tif (!doc) {\n\t\t\tconsole.log(`FAILED to complete merge because uri ${uri.toString()} doesn't match a document`);\n\t\t\treturn;\n\t\t}\n\t\tif (doc.isDirty) {\n\t\t\tawait doc.save();\n\t\t}\n\n\t\t// find the merge editor tabs for the resource in question and close them all\n\t\tlet didCloseTab = false;\n\t\tconst mergeEditorTabs = window.tabGroups.all.map(group => group.tabs.filter(tab => tab.input instanceof TabInputTextMerge && tab.input.result.toString() === uri.toString())).flat();\n\t\tif (mergeEditorTabs.includes(activeTab)) {\n\t\t\tdidCloseTab = await window.tabGroups.close(mergeEditorTabs, true);\n\t\t}\n\n\t\t// Only stage if the merge editor has been successfully closed. That means all conflicts have been\n\t\t// handled or unhandled conflicts are OK by the user.\n\t\tif (didCloseTab) {\n\t\t\tawait repository.add([uri]);\n\t\t\tawait commands.executeCommand('workbench.view.scm');\n\t\t}*/\n\t}\n\n\t@command('git.runGitMerge')\n\tasync runGitMergeNoDiff3(): Promise<void> {\n\t\tawait this.runGitMerge(false);\n\t}\n\n\t@command('git.runGitMergeDiff3')\n\tasync runGitMergeDiff3(): Promise<void> {\n\t\tawait this.runGitMerge(true);\n\t}\n\n\tprivate async runGitMerge(diff3: boolean): Promise<void> {\n\t\tconst { activeTab } = window.tabGroups.activeTabGroup;\n\t\tif (!activeTab) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst input = activeTab.input;\n\t\tif (!(input instanceof TabInputTextMerge)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await this.git.mergeFile({\n\t\t\tbasePath: input.base.fsPath,\n\t\t\tinput1Path: input.input1.fsPath,\n\t\t\tinput2Path: input.input2.fsPath,\n\t\t\tdiff3,\n\t\t});\n\n\t\tconst doc = workspace.textDocuments.find(doc => doc.uri.toString() === input.result.toString());\n\t\tif (!doc) {\n\t\t\treturn;\n\t\t}\n\t\tconst e = new WorkspaceEdit();\n\n\t\te.replace(\n\t\t\tinput.result,\n\t\t\tnew Range(\n\t\t\t\tnew Position(0, 0),\n\t\t\t\tnew Position(doc.lineCount, 0),\n\t\t\t),\n\t\t\tresult\n\t\t);\n\t\tawait workspace.applyEdit(e);\n\t}\n\n\tprivate async _stageChanges(textEditor: TextEditor, changes: LineChange[]): Promise<void> {\n\t\tconst modifiedDocument = textEditor.document;\n\t\tconst modifiedUri = modifiedDocument.uri;\n\n\t\tif (modifiedUri.scheme !== 'file') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst originalUri = toGitUri(modifiedUri, '~');\n\t\tconst originalDocument = await workspace.openTextDocument(originalUri);\n\t\tconst result = applyLineChanges(originalDocument, modifiedDocument, changes);\n\n\t\tawait this.runByRepository(modifiedUri, async (repository, resource) =>\n\t\t\tawait repository.stage(resource, result, modifiedDocument.encoding));\n\t}\n\n\t@command('git.revertChange')\n\tasync revertChange(uri: Uri, changes: LineChange[], index: number): Promise<void> {\n\t\tif (!uri) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst textEditor = window.visibleTextEditors.filter(e => e.document.uri.toString() === uri.toString())[0];\n\n\t\tif (!textEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._revertChanges(textEditor, [...changes.slice(0, index), ...changes.slice(index + 1)]);\n\n\t\tconst firstStagedLine = changes[index].modifiedStartLineNumber;\n\t\ttextEditor.selections = [new Selection(firstStagedLine, 0, firstStagedLine, 0)];\n\t}\n\n\t@command('git.revertSelectedRanges')\n\tasync revertSelectedRanges(): Promise<void> {\n\t\tconst textEditor = window.activeTextEditor;\n\n\t\tif (!textEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst workingTreeDiffInformation = getWorkingTreeDiffInformation(textEditor);\n\t\tif (!workingTreeDiffInformation) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst workingTreeLineChanges = toLineChanges(workingTreeDiffInformation);\n\n\t\tthis.logger.trace(`[CommandCenter][revertSelectedRanges] diffInformation: ${JSON.stringify(workingTreeDiffInformation)}`);\n\t\tthis.logger.trace(`[CommandCenter][revertSelectedRanges] diffInformation changes: ${JSON.stringify(workingTreeLineChanges)}`);\n\n\t\tconst modifiedDocument = textEditor.document;\n\t\tconst selections = textEditor.selections;\n\t\tconst selectedChanges = workingTreeLineChanges.filter(change => {\n\t\t\tconst modifiedRange = getModifiedRange(modifiedDocument, change);\n\t\t\treturn selections.every(selection => !selection.intersection(modifiedRange));\n\t\t});\n\n\t\tif (selectedChanges.length === workingTreeLineChanges.length) {\n\t\t\twindow.showInformationMessage(l10n.t('The selection range does not contain any changes.'));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.logger.trace(`[CommandCenter][revertSelectedRanges] selectedChanges: ${JSON.stringify(selectedChanges)}`);\n\n\t\tconst selectionsBeforeRevert = textEditor.selections;\n\t\tawait this._revertChanges(textEditor, selectedChanges);\n\t\ttextEditor.selections = selectionsBeforeRevert;\n\t}\n\n\tprivate async _revertChanges(textEditor: TextEditor, changes: LineChange[]): Promise<void> {\n\t\tconst modifiedDocument = textEditor.document;\n\t\tconst modifiedUri = modifiedDocument.uri;\n\n\t\tif (modifiedUri.scheme !== 'file') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst originalUri = toGitUri(modifiedUri, '~');\n\t\tconst originalDocument = await workspace.openTextDocument(originalUri);\n\t\tconst visibleRangesBeforeRevert = textEditor.visibleRanges;\n\t\tconst result = applyLineChanges(originalDocument, modifiedDocument, changes);\n\n\t\tconst edit = new WorkspaceEdit();\n\t\tedit.replace(modifiedUri, new Range(new Position(0, 0), modifiedDocument.lineAt(modifiedDocument.lineCount - 1).range.end), result);\n\t\tworkspace.applyEdit(edit);\n\n\t\tawait modifiedDocument.save();\n\n\t\ttextEditor.revealRange(visibleRangesBeforeRevert[0]);\n\t}\n\n\t@command('git.unstage')\n\tasync unstage(...resourceStates: SourceControlResourceState[]): Promise<void> {\n\t\tresourceStates = resourceStates.filter(s => !!s);\n\n\t\tif (resourceStates.length === 0 || (resourceStates[0] && !(resourceStates[0].resourceUri instanceof Uri))) {\n\t\t\tconst resource = this.getSCMResource();\n\n\t\t\tif (!resource) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourceStates = [resource];\n\t\t}\n\n\t\tconst scmResources = resourceStates\n\t\t\t.filter(s => s instanceof Resource && s.resourceGroupType === ResourceGroupType.Index) as Resource[];\n\n\t\tif (!scmResources.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resources = scmResources.map(r => r.resourceUri);\n\t\tawait this.runByRepository(resources, async (repository, resources) => repository.revert(resources));\n\t}\n\n\t@command('git.unstageAll', { repository: true })\n\tasync unstageAll(repository: Repository): Promise<void> {\n\t\tawait repository.revert([]);\n\t}\n\n\t@command('git.unstageSelectedRanges')\n\tasync unstageSelectedRanges(): Promise<void> {\n\t\tconst textEditor = window.activeTextEditor;\n\n\t\tif (!textEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst modifiedDocument = textEditor.document;\n\t\tconst modifiedUri = modifiedDocument.uri;\n\n\t\tif (!isGitUri(modifiedUri)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { ref } = fromGitUri(modifiedUri);\n\n\t\tif (ref !== '') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst repository = this.model.getRepository(modifiedUri);\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resource = repository.indexGroup.resourceStates\n\t\t\t.find(r => pathEquals(r.resourceUri.fsPath, modifiedUri.fsPath));\n\t\tif (!resource) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexDiffInformation = getIndexDiffInformation(textEditor);\n\t\tif (!indexDiffInformation) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexLineChanges = toLineChanges(indexDiffInformation);\n\n\t\tthis.logger.trace(`[CommandCenter][unstageSelectedRanges] diffInformation: ${JSON.stringify(indexDiffInformation)}`);\n\t\tthis.logger.trace(`[CommandCenter][unstageSelectedRanges] diffInformation changes: ${JSON.stringify(indexLineChanges)}`);\n\n\t\tconst originalUri = toGitUri(resource.original, 'HEAD');\n\t\tconst originalDocument = await workspace.openTextDocument(originalUri);\n\t\tconst selectedLines = toLineRanges(textEditor.selections, modifiedDocument);\n\t\tconst selectedDiffs = indexLineChanges\n\t\t\t.map(change => selectedLines.reduce<LineChange | null>((result, range) => result || intersectDiffWithRange(modifiedDocument, change, range), null))\n\t\t\t.filter(c => !!c) as LineChange[];\n\n\t\tif (!selectedDiffs.length) {\n\t\t\twindow.showInformationMessage(l10n.t('The selection range does not contain any changes.'));\n\t\t\treturn;\n\t\t}\n\n\t\tconst invertedDiffs = selectedDiffs.map(invertLineChange);\n\n\t\tthis.logger.trace(`[CommandCenter][unstageSelectedRanges] selectedDiffs: ${JSON.stringify(selectedDiffs)}`);\n\t\tthis.logger.trace(`[CommandCenter][unstageSelectedRanges] invertedDiffs: ${JSON.stringify(invertedDiffs)}`);\n\n\t\tconst result = applyLineChanges(modifiedDocument, originalDocument, invertedDiffs);\n\t\tawait repository.stage(modifiedUri, result, modifiedDocument.encoding);\n\t}\n\n\t@command('git.unstageFile')\n\tasync unstageFile(uri: Uri): Promise<void> {\n\t\tif (!uri) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst repository = this.model.getRepository(uri);\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resources = repository.indexGroup.resourceStates\n\t\t\t.filter(r => r.multiFileDiffEditorModifiedUri?.toString() === uri.toString())\n\t\t\t.map(r => r.resourceUri);\n\n\t\tif (resources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.revert(resources);\n\t}\n\n\n\t@command('git.clean')\n\tasync clean(...resourceStates: SourceControlResourceState[]): Promise<void> {\n\t\t// Remove duplicate resources\n\t\tconst resourceUris = new Set<string>();\n\t\tresourceStates = resourceStates.filter(s => {\n\t\t\tif (s === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (resourceUris.has(s.resourceUri.toString())) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tresourceUris.add(s.resourceUri.toString());\n\t\t\treturn true;\n\t\t});\n\n\t\tif (resourceStates.length === 0 || (resourceStates[0] && !(resourceStates[0].resourceUri instanceof Uri))) {\n\t\t\tconst resource = this.getSCMResource();\n\n\t\t\tif (!resource) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourceStates = [resource];\n\t\t}\n\n\t\tconst scmResources = resourceStates.filter(s => s instanceof Resource\n\t\t\t&& (s.resourceGroupType === ResourceGroupType.WorkingTree || s.resourceGroupType === ResourceGroupType.Untracked)) as Resource[];\n\n\t\tif (!scmResources.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._cleanAll(scmResources);\n\t}\n\n\t@command('git.cleanAll', { repository: true })\n\tasync cleanAll(repository: Repository): Promise<void> {\n\t\tawait this._cleanAll(repository.workingTreeGroup.resourceStates);\n\t}\n\n\t@command('git.cleanAllTracked', { repository: true })\n\tasync cleanAllTracked(repository: Repository): Promise<void> {\n\t\tconst resources = repository.workingTreeGroup.resourceStates\n\t\t\t.filter(r => r.type !== Status.UNTRACKED && r.type !== Status.IGNORED);\n\n\t\tif (resources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._cleanTrackedChanges(resources);\n\t}\n\n\t@command('git.cleanAllUntracked', { repository: true })\n\tasync cleanAllUntracked(repository: Repository): Promise<void> {\n\t\tconst resources = [...repository.workingTreeGroup.resourceStates, ...repository.untrackedGroup.resourceStates]\n\t\t\t.filter(r => r.type === Status.UNTRACKED || r.type === Status.IGNORED);\n\n\t\tif (resources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._cleanUntrackedChanges(resources);\n\t}\n\n\tprivate async _cleanAll(resources: Resource[]): Promise<void> {\n\t\tif (resources.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst trackedResources = resources.filter(r => r.type !== Status.UNTRACKED && r.type !== Status.IGNORED);\n\t\tconst untrackedResources = resources.filter(r => r.type === Status.UNTRACKED || r.type === Status.IGNORED);\n\n\t\tif (untrackedResources.length === 0) {\n\t\t\t// Tracked files only\n\t\t\tawait this._cleanTrackedChanges(resources);\n\t\t} else if (trackedResources.length === 0) {\n\t\t\t// Untracked files only\n\t\t\tawait this._cleanUntrackedChanges(resources);\n\t\t} else {\n\t\t\t// Tracked & Untracked files\n\t\t\tconst [untrackedMessage, untrackedMessageDetail] = this.getDiscardUntrackedChangesDialogDetails(untrackedResources);\n\n\t\t\tconst trackedMessage = trackedResources.length === 1\n\t\t\t\t? l10n.t('\\n\\nAre you sure you want to discard changes in \\'{0}\\'?', path.basename(trackedResources[0].resourceUri.fsPath))\n\t\t\t\t: l10n.t('\\n\\nAre you sure you want to discard ALL changes in {0} files?', trackedResources.length);\n\n\t\t\tconst yesTracked = trackedResources.length === 1\n\t\t\t\t? l10n.t('Discard 1 Tracked File')\n\t\t\t\t: l10n.t('Discard All {0} Tracked Files', trackedResources.length);\n\n\t\t\tconst yesAll = l10n.t('Discard All {0} Files', resources.length);\n\t\t\tconst pick = await window.showWarningMessage(`${untrackedMessage} ${untrackedMessageDetail}${trackedMessage}\\n\\nThis is IRREVERSIBLE!\\nYour current working set will be FOREVER LOST if you proceed.`, { modal: true }, yesTracked, yesAll);\n\n\t\t\tif (pick === yesTracked) {\n\t\t\t\tresources = trackedResources;\n\t\t\t} else if (pick !== yesAll) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst resourceUris = resources.map(r => r.resourceUri);\n\t\t\tawait this.runByRepository(resourceUris, async (repository, resources) => repository.clean(resources));\n\t\t}\n\t}\n\n\tprivate async _cleanTrackedChanges(resources: Resource[]): Promise<void> {\n\t\tconst allResourcesDeleted = resources.every(r => r.type === Status.DELETED);\n\n\t\tconst message = allResourcesDeleted\n\t\t\t? resources.length === 1\n\t\t\t\t? l10n.t('Are you sure you want to restore \\'{0}\\'?', path.basename(resources[0].resourceUri.fsPath))\n\t\t\t\t: l10n.t('Are you sure you want to restore ALL {0} files?', resources.length)\n\t\t\t: resources.length === 1\n\t\t\t\t? l10n.t('Are you sure you want to discard changes in \\'{0}\\'?', path.basename(resources[0].resourceUri.fsPath))\n\t\t\t\t: l10n.t('Are you sure you want to discard ALL changes in {0} files?\\n\\nThis is IRREVERSIBLE!\\nYour current working set will be FOREVER LOST if you proceed.', resources.length);\n\n\t\tconst yes = allResourcesDeleted\n\t\t\t? resources.length === 1\n\t\t\t\t? l10n.t('Restore File')\n\t\t\t\t: l10n.t('Restore All {0} Files', resources.length)\n\t\t\t: resources.length === 1\n\t\t\t\t? l10n.t('Discard File')\n\t\t\t\t: l10n.t('Discard All {0} Files', resources.length);\n\n\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes);\n\n\t\tif (pick !== yes) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resourceUris = resources.map(r => r.resourceUri);\n\t\tawait this.runByRepository(resourceUris, async (repository, resources) => repository.clean(resources));\n\t}\n\n\tprivate async _cleanUntrackedChanges(resources: Resource[]): Promise<void> {\n\t\tconst [message, messageDetail, primaryAction] = this.getDiscardUntrackedChangesDialogDetails(resources);\n\t\tconst pick = await window.showWarningMessage(message, { detail: messageDetail, modal: true }, primaryAction);\n\n\t\tif (pick !== primaryAction) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resourceUris = resources.map(r => r.resourceUri);\n\t\tawait this.runByRepository(resourceUris, async (repository, resources) => repository.clean(resources));\n\t}\n\n\tprivate getDiscardUntrackedChangesDialogDetails(resources: Resource[]): [string, string, string] {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst discardUntrackedChangesToTrash = config.get<boolean>('discardUntrackedChangesToTrash', true) && !isRemote && !isLinuxSnap;\n\n\t\tconst messageWarning = !discardUntrackedChangesToTrash\n\t\t\t? resources.length === 1\n\t\t\t\t? '\\n\\nThis is IRREVERSIBLE!\\nThis file will be FOREVER LOST if you proceed.'\n\t\t\t\t: '\\n\\nThis is IRREVERSIBLE!\\nThese files will be FOREVER LOST if you proceed.'\n\t\t\t: '';\n\n\t\tconst message = resources.length === 1\n\t\t\t? l10n.t('Are you sure you want to DELETE the following untracked file: \\'{0}\\'?{1}', path.basename(resources[0].resourceUri.fsPath), messageWarning)\n\t\t\t: l10n.t('Are you sure you want to DELETE the {0} untracked files?{1}', resources.length, messageWarning);\n\n\t\tconst messageDetail = discardUntrackedChangesToTrash\n\t\t\t? isWindows\n\t\t\t\t? resources.length === 1\n\t\t\t\t\t? 'You can restore this file from the Recycle Bin.'\n\t\t\t\t\t: 'You can restore these files from the Recycle Bin.'\n\t\t\t\t: resources.length === 1\n\t\t\t\t\t? 'You can restore this file from the Trash.'\n\t\t\t\t\t: 'You can restore these files from the Trash.'\n\t\t\t: '';\n\n\t\tconst primaryAction = discardUntrackedChangesToTrash\n\t\t\t? isWindows\n\t\t\t\t? l10n.t('Move to Recycle Bin')\n\t\t\t\t: l10n.t('Move to Trash')\n\t\t\t: resources.length === 1\n\t\t\t\t? l10n.t('Delete File')\n\t\t\t\t: l10n.t('Delete All {0} Files', resources.length);\n\n\t\treturn [message, messageDetail, primaryAction];\n\t}\n\n\tprivate async smartCommit(\n\t\trepository: Repository,\n\t\tgetCommitMessage: () => Promise<string | undefined>,\n\t\topts: CommitOptions\n\t): Promise<void> {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\tlet promptToSaveFilesBeforeCommit = config.get<'always' | 'staged' | 'never'>('promptToSaveFilesBeforeCommit');\n\n\t\t// migration\n\t\tif (promptToSaveFilesBeforeCommit as any === true) {\n\t\t\tpromptToSaveFilesBeforeCommit = 'always';\n\t\t} else if (promptToSaveFilesBeforeCommit as any === false) {\n\t\t\tpromptToSaveFilesBeforeCommit = 'never';\n\t\t}\n\n\t\tlet enableSmartCommit = config.get<boolean>('enableSmartCommit') === true;\n\t\tconst enableCommitSigning = config.get<boolean>('enableCommitSigning') === true;\n\t\tlet noStagedChanges = repository.indexGroup.resourceStates.length === 0;\n\t\tlet noUnstagedChanges = repository.workingTreeGroup.resourceStates.length === 0;\n\n\t\tif (!opts.empty) {\n\t\t\tif (promptToSaveFilesBeforeCommit !== 'never') {\n\t\t\t\tlet documents = workspace.textDocuments\n\t\t\t\t\t.filter(d => !d.isUntitled && d.isDirty && isDescendant(repository.root, d.uri.fsPath));\n\n\t\t\t\tif (promptToSaveFilesBeforeCommit === 'staged' || repository.indexGroup.resourceStates.length > 0) {\n\t\t\t\t\tdocuments = documents\n\t\t\t\t\t\t.filter(d => repository.indexGroup.resourceStates.some(s => pathEquals(s.resourceUri.fsPath, d.uri.fsPath)));\n\t\t\t\t}\n\n\t\t\t\tif (documents.length > 0) {\n\t\t\t\t\tconst message = documents.length === 1\n\t\t\t\t\t\t? l10n.t('The following file has unsaved changes which won\\'t be included in the commit if you proceed: {0}.\\n\\nWould you like to save it before committing?', path.basename(documents[0].uri.fsPath))\n\t\t\t\t\t\t: l10n.t('There are {0} unsaved files.\\n\\nWould you like to save them before committing?', documents.length);\n\t\t\t\t\tconst saveAndCommit = l10n.t('Save All & Commit Changes');\n\t\t\t\t\tconst commit = l10n.t('Commit Changes');\n\t\t\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, saveAndCommit, commit);\n\n\t\t\t\t\tif (pick === saveAndCommit) {\n\t\t\t\t\t\tawait Promise.all(documents.map(d => d.save()));\n\n\t\t\t\t\t\t// After saving the dirty documents, if there are any documents that are part of the\n\t\t\t\t\t\t// index group we have to add them back in order for the saved changes to be committed\n\t\t\t\t\t\tdocuments = documents\n\t\t\t\t\t\t\t.filter(d => repository.indexGroup.resourceStates.some(s => pathEquals(s.resourceUri.fsPath, d.uri.fsPath)));\n\t\t\t\t\t\tawait repository.add(documents.map(d => d.uri));\n\n\t\t\t\t\t\tnoStagedChanges = repository.indexGroup.resourceStates.length === 0;\n\t\t\t\t\t\tnoUnstagedChanges = repository.workingTreeGroup.resourceStates.length === 0;\n\t\t\t\t\t} else if (pick !== commit) {\n\t\t\t\t\t\treturn; // do not commit on cancel\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// no changes, and the user has not configured to commit all in this case\n\t\t\tif (!noUnstagedChanges && noStagedChanges && !enableSmartCommit && !opts.all && !opts.amend) {\n\t\t\t\tconst suggestSmartCommit = config.get<boolean>('suggestSmartCommit') === true;\n\n\t\t\t\tif (!suggestSmartCommit) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// prompt the user if we want to commit all or not\n\t\t\t\tconst message = l10n.t('There are no staged changes to commit.\\n\\nWould you like to stage all your changes and commit them directly?');\n\t\t\t\tconst yes = l10n.t('Yes');\n\t\t\t\tconst always = l10n.t('Always');\n\t\t\t\tconst never = l10n.t('Never');\n\t\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes, always, never);\n\n\t\t\t\tif (pick === always) {\n\t\t\t\t\tenableSmartCommit = true;\n\t\t\t\t\tconfig.update('enableSmartCommit', true, true);\n\t\t\t\t} else if (pick === never) {\n\t\t\t\t\tconfig.update('suggestSmartCommit', false, true);\n\t\t\t\t\treturn;\n\t\t\t\t} else if (pick === yes) {\n\t\t\t\t\tenableSmartCommit = true;\n\t\t\t\t} else {\n\t\t\t\t\t// Cancel\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// smart commit\n\t\t\tif (enableSmartCommit && !opts.all) {\n\t\t\t\topts = { ...opts, all: noStagedChanges };\n\t\t\t}\n\t\t}\n\n\t\t// enable signing of commits if configured\n\t\topts.signCommit = enableCommitSigning;\n\n\t\tif (config.get<boolean>('alwaysSignOff')) {\n\t\t\topts.signoff = true;\n\t\t}\n\n\t\tif (config.get<boolean>('useEditorAsCommitInput')) {\n\t\t\topts.useEditor = true;\n\n\t\t\tif (config.get<boolean>('verboseCommit')) {\n\t\t\t\topts.verbose = true;\n\t\t\t}\n\t\t}\n\n\t\tconst smartCommitChanges = config.get<'all' | 'tracked'>('smartCommitChanges');\n\n\t\tif (\n\t\t\t(\n\t\t\t\t// no changes\n\t\t\t\t(noStagedChanges && noUnstagedChanges)\n\t\t\t\t// or no staged changes and not `all`\n\t\t\t\t|| (!opts.all && noStagedChanges)\n\t\t\t\t// no staged changes and no tracked unstaged changes\n\t\t\t\t|| (noStagedChanges && smartCommitChanges === 'tracked' && repository.workingTreeGroup.resourceStates.every(r => r.type === Status.UNTRACKED))\n\t\t\t)\n\t\t\t// amend allows changing only the commit message\n\t\t\t&& !opts.amend\n\t\t\t&& !opts.empty\n\t\t\t// merge not in progress\n\t\t\t&& !repository.mergeInProgress\n\t\t\t// rebase not in progress\n\t\t\t&& repository.rebaseCommit === undefined\n\t\t) {\n\t\t\tconst commitAnyway = l10n.t('Create Empty Commit');\n\t\t\tconst answer = await window.showInformationMessage(l10n.t('There are no changes to commit.'), commitAnyway);\n\n\t\t\tif (answer !== commitAnyway) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topts.empty = true;\n\t\t}\n\n\t\tif (opts.noVerify) {\n\t\t\tif (!config.get<boolean>('allowNoVerifyCommit')) {\n\t\t\t\tawait window.showErrorMessage(l10n.t('Commits without verification are not allowed, please enable them with the \"git.allowNoVerifyCommit\" setting.'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (config.get<boolean>('confirmNoVerifyCommit')) {\n\t\t\t\tconst message = l10n.t('You are about to commit your changes without verification, this skips pre-commit hooks and can be undesirable.\\n\\nAre you sure to continue?');\n\t\t\t\tconst yes = l10n.t('OK');\n\t\t\t\tconst neverAgain = l10n.t('OK, Don\\'t Ask Again');\n\t\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes, neverAgain);\n\n\t\t\t\tif (pick === neverAgain) {\n\t\t\t\t\tconfig.update('confirmNoVerifyCommit', false, true);\n\t\t\t\t} else if (pick !== yes) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst message = await getCommitMessage();\n\n\t\tif (!message && !opts.amend && !opts.useEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (opts.all && smartCommitChanges === 'tracked') {\n\t\t\topts.all = 'tracked';\n\t\t}\n\n\t\tif (opts.all && config.get<'mixed' | 'separate' | 'hidden'>('untrackedChanges') !== 'mixed') {\n\t\t\topts.all = 'tracked';\n\t\t}\n\n\t\t// Diagnostics commit hook\n\t\tconst diagnosticsResult = await evaluateDiagnosticsCommitHook(repository, opts);\n\t\tif (!diagnosticsResult) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Branch protection commit hook\n\t\tconst branchProtectionPrompt = config.get<'alwaysCommit' | 'alwaysCommitToNewBranch' | 'alwaysPrompt'>('branchProtectionPrompt')!;\n\t\tif (repository.isBranchProtected() && (branchProtectionPrompt === 'alwaysPrompt' || branchProtectionPrompt === 'alwaysCommitToNewBranch')) {\n\t\t\tconst commitToNewBranch = l10n.t('Commit to a New Branch');\n\n\t\t\tlet pick: string | undefined = commitToNewBranch;\n\n\t\t\tif (branchProtectionPrompt === 'alwaysPrompt') {\n\t\t\t\tconst message = l10n.t('You are trying to commit to a protected branch and you might not have permission to push your commits to the remote.\\n\\nHow would you like to proceed?');\n\t\t\t\tconst commit = l10n.t('Commit Anyway');\n\n\t\t\t\tpick = await window.showWarningMessage(message, { modal: true }, commitToNewBranch, commit);\n\t\t\t}\n\n\t\t\tif (!pick) {\n\t\t\t\treturn;\n\t\t\t} else if (pick === commitToNewBranch) {\n\t\t\t\tconst branchName = await this.promptForBranchName(repository);\n\n\t\t\t\tif (!branchName) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait repository.branch(branchName, true);\n\t\t\t}\n\t\t}\n\n\t\tawait repository.commit(message, opts);\n\t}\n\n\tprivate async commitWithAnyInput(repository: Repository, opts: CommitOptions): Promise<void> {\n\t\tconst message = repository.inputBox.value;\n\t\tconst root = Uri.file(repository.root);\n\t\tconst config = workspace.getConfiguration('git', root);\n\n\t\tconst getCommitMessage = async () => {\n\t\t\tlet _message: string | undefined = message;\n\n\t\t\tif (!_message && !config.get<boolean>('useEditorAsCommitInput')) {\n\t\t\t\tconst value: string | undefined = undefined;\n\n\t\t\t\tif (opts && opts.amend && repository.HEAD && repository.HEAD.commit) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tconst branchName = repository.headShortName;\n\t\t\t\tlet placeHolder: string;\n\n\t\t\t\tif (branchName) {\n\t\t\t\t\tplaceHolder = l10n.t('Message (commit on \"{0}\")', branchName);\n\t\t\t\t} else {\n\t\t\t\t\tplaceHolder = l10n.t('Commit message');\n\t\t\t\t}\n\n\t\t\t\t_message = await window.showInputBox({\n\t\t\t\t\tvalue,\n\t\t\t\t\tplaceHolder,\n\t\t\t\t\tprompt: l10n.t('Please provide a commit message'),\n\t\t\t\t\tignoreFocusOut: true\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn _message;\n\t\t};\n\n\t\tawait this.smartCommit(repository, getCommitMessage, opts);\n\t}\n\n\t@command('git.commit', { repository: true })\n\tasync commit(repository: Repository, postCommitCommand?: string | null): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { postCommitCommand });\n\t}\n\n\t@command('git.commitAmend', { repository: true })\n\tasync commitAmend(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { amend: true });\n\t}\n\n\t@command('git.commitSigned', { repository: true })\n\tasync commitSigned(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { signoff: true });\n\t}\n\n\t@command('git.commitStaged', { repository: true })\n\tasync commitStaged(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: false });\n\t}\n\n\t@command('git.commitStagedSigned', { repository: true })\n\tasync commitStagedSigned(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: false, signoff: true });\n\t}\n\n\t@command('git.commitStagedAmend', { repository: true })\n\tasync commitStagedAmend(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: false, amend: true });\n\t}\n\n\t@command('git.commitAll', { repository: true })\n\tasync commitAll(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: true });\n\t}\n\n\t@command('git.commitAllSigned', { repository: true })\n\tasync commitAllSigned(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: true, signoff: true });\n\t}\n\n\t@command('git.commitAllAmend', { repository: true })\n\tasync commitAllAmend(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: true, amend: true });\n\t}\n\n\t@command('git.commitMessageAccept')\n\tasync commitMessageAccept(arg?: Uri): Promise<void> {\n\t\tif (!arg && !window.activeTextEditor) { return; }\n\t\targ ??= window.activeTextEditor!.document.uri;\n\n\t\t// Close the tab\n\t\tthis._closeEditorTab(arg);\n\t}\n\n\t@command('git.commitMessageDiscard')\n\tasync commitMessageDiscard(arg?: Uri): Promise<void> {\n\t\tif (!arg && !window.activeTextEditor) { return; }\n\t\targ ??= window.activeTextEditor!.document.uri;\n\n\t\t// Clear the contents of the editor\n\t\tconst editors = window.visibleTextEditors\n\t\t\t.filter(e => e.document.languageId === 'git-commit' && e.document.uri.toString() === arg!.toString());\n\n\t\tif (editors.length !== 1) { return; }\n\n\t\tconst commitMsgEditor = editors[0];\n\t\tconst commitMsgDocument = commitMsgEditor.document;\n\n\t\tconst editResult = await commitMsgEditor.edit(builder => {\n\t\t\tconst firstLine = commitMsgDocument.lineAt(0);\n\t\t\tconst lastLine = commitMsgDocument.lineAt(commitMsgDocument.lineCount - 1);\n\n\t\t\tbuilder.delete(new Range(firstLine.range.start, lastLine.range.end));\n\t\t});\n\n\t\tif (!editResult) { return; }\n\n\t\t// Save the document\n\t\tconst saveResult = await commitMsgDocument.save();\n\t\tif (!saveResult) { return; }\n\n\t\t// Close the tab\n\t\tthis._closeEditorTab(arg);\n\t}\n\n\tprivate _closeEditorTab(uri: Uri): void {\n\t\tconst tabToClose = window.tabGroups.all.map(g => g.tabs).flat()\n\t\t\t.filter(t => t.input instanceof TabInputText && t.input.uri.toString() === uri.toString());\n\n\t\twindow.tabGroups.close(tabToClose);\n\t}\n\n\tprivate async _commitEmpty(repository: Repository, noVerify?: boolean): Promise<void> {\n\t\tconst root = Uri.file(repository.root);\n\t\tconst config = workspace.getConfiguration('git', root);\n\t\tconst shouldPrompt = config.get<boolean>('confirmEmptyCommits') === true;\n\n\t\tif (shouldPrompt) {\n\t\t\tconst message = l10n.t('Are you sure you want to create an empty commit?');\n\t\t\tconst yes = l10n.t('Yes');\n\t\t\tconst neverAgain = l10n.t('Yes, Don\\'t Show Again');\n\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes, neverAgain);\n\n\t\t\tif (pick === neverAgain) {\n\t\t\t\tawait config.update('confirmEmptyCommits', false, true);\n\t\t\t} else if (pick !== yes) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tawait this.commitWithAnyInput(repository, { empty: true, noVerify });\n\t}\n\n\t@command('git.commitEmpty', { repository: true })\n\tasync commitEmpty(repository: Repository): Promise<void> {\n\t\tawait this._commitEmpty(repository);\n\t}\n\n\t@command('git.commitNoVerify', { repository: true })\n\tasync commitNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { noVerify: true });\n\t}\n\n\t@command('git.commitStagedNoVerify', { repository: true })\n\tasync commitStagedNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: false, noVerify: true });\n\t}\n\n\t@command('git.commitStagedSignedNoVerify', { repository: true })\n\tasync commitStagedSignedNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: false, signoff: true, noVerify: true });\n\t}\n\n\t@command('git.commitAmendNoVerify', { repository: true })\n\tasync commitAmendNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { amend: true, noVerify: true });\n\t}\n\n\t@command('git.commitSignedNoVerify', { repository: true })\n\tasync commitSignedNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { signoff: true, noVerify: true });\n\t}\n\n\t@command('git.commitStagedAmendNoVerify', { repository: true })\n\tasync commitStagedAmendNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: false, amend: true, noVerify: true });\n\t}\n\n\t@command('git.commitAllNoVerify', { repository: true })\n\tasync commitAllNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: true, noVerify: true });\n\t}\n\n\t@command('git.commitAllSignedNoVerify', { repository: true })\n\tasync commitAllSignedNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: true, signoff: true, noVerify: true });\n\t}\n\n\t@command('git.commitAllAmendNoVerify', { repository: true })\n\tasync commitAllAmendNoVerify(repository: Repository): Promise<void> {\n\t\tawait this.commitWithAnyInput(repository, { all: true, amend: true, noVerify: true });\n\t}\n\n\t@command('git.commitEmptyNoVerify', { repository: true })\n\tasync commitEmptyNoVerify(repository: Repository): Promise<void> {\n\t\tawait this._commitEmpty(repository, true);\n\t}\n\n\t@command('git.restoreCommitTemplate', { repository: true })\n\tasync restoreCommitTemplate(repository: Repository): Promise<void> {\n\t\trepository.inputBox.value = await repository.getCommitTemplate();\n\t}\n\n\t@command('git.undoCommit', { repository: true })\n\tasync undoCommit(repository: Repository): Promise<void> {\n\t\tconst HEAD = repository.HEAD;\n\n\t\tif (!HEAD || !HEAD.commit) {\n\t\t\twindow.showWarningMessage(l10n.t('Can\\'t undo because HEAD doesn\\'t point to any commit.'));\n\t\t\treturn;\n\t\t}\n\n\t\tconst commit = await repository.getCommit('HEAD');\n\n\t\tif (commit.parents.length > 1) {\n\t\t\tconst yes = l10n.t('Undo merge commit');\n\t\t\tconst result = await window.showWarningMessage(l10n.t('The last commit was a merge commit. Are you sure you want to undo it?'), { modal: true }, yes);\n\n\t\t\tif (result !== yes) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (commit.parents.length > 0) {\n\t\t\tawait repository.reset('HEAD~');\n\t\t} else {\n\t\t\tawait repository.deleteRef('HEAD');\n\t\t\tawait this.unstageAll(repository);\n\t\t}\n\n\t\trepository.inputBox.value = commit.message;\n\t}\n\n\t@command('git.checkout', { repository: true })\n\tasync checkout(repository: Repository, treeish?: string): Promise<boolean> {\n\t\treturn this._checkout(repository, { treeish });\n\t}\n\n\t@command('git.graph.checkout', { repository: true })\n\tasync checkout2(repository: Repository, historyItem?: SourceControlHistoryItem, historyItemRefId?: string): Promise<void> {\n\t\tconst historyItemRef = historyItem?.references?.find(r => r.id === historyItemRefId);\n\t\tif (!historyItemRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\tconst pullBeforeCheckout = config.get<boolean>('pullBeforeCheckout', false) === true;\n\n\t\t// Branch, tag\n\t\tif (historyItemRef.id.startsWith('refs/heads/') || historyItemRef.id.startsWith('refs/tags/')) {\n\t\t\tawait repository.checkout(historyItemRef.name, { pullBeforeCheckout });\n\t\t\treturn;\n\t\t}\n\n\t\t// Remote branch\n\t\tconst branches = await repository.findTrackingBranches(historyItemRef.name);\n\t\tif (branches.length > 0) {\n\t\t\tawait repository.checkout(branches[0].name!, { pullBeforeCheckout });\n\t\t} else {\n\t\t\tawait repository.checkoutTracking(historyItemRef.name);\n\t\t}\n\t}\n\n\t@command('git.checkoutDetached', { repository: true })\n\tasync checkoutDetached(repository: Repository, treeish?: string): Promise<boolean> {\n\t\treturn this._checkout(repository, { detached: true, treeish });\n\t}\n\n\t@command('git.graph.checkoutDetached', { repository: true })\n\tasync checkoutDetached2(repository: Repository, historyItem?: SourceControlHistoryItem): Promise<boolean> {\n\t\tif (!historyItem) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this._checkout(repository, { detached: true, treeish: historyItem.id });\n\t}\n\n\tprivate async _checkout(repository: Repository, opts?: { detached?: boolean; treeish?: string }): Promise<boolean> {\n\t\tif (typeof opts?.treeish === 'string') {\n\t\t\tawait repository.checkout(opts?.treeish, opts);\n\t\t\treturn true;\n\t\t}\n\n\t\tconst createBranch = new CreateBranchItem();\n\t\tconst createBranchFrom = new CreateBranchFromItem();\n\t\tconst checkoutDetached = new CheckoutDetachedItem();\n\t\tconst picks: QuickPickItem[] = [];\n\t\tconst commands: QuickPickItem[] = [];\n\n\t\tif (!opts?.detached) {\n\t\t\tcommands.push(createBranch, createBranchFrom, checkoutDetached);\n\t\t}\n\n\t\tconst disposables: Disposable[] = [];\n\t\tconst quickPick = window.createQuickPick();\n\t\tquickPick.busy = true;\n\t\tquickPick.sortByLabel = false;\n\t\tquickPick.matchOnDetail = false;\n\t\tquickPick.placeholder = opts?.detached\n\t\t\t? l10n.t('Select a branch to checkout in detached mode')\n\t\t\t: l10n.t('Select a branch or tag to checkout');\n\n\t\tquickPick.show();\n\t\tpicks.push(... await createCheckoutItems(repository, opts?.detached));\n\n\t\tconst setQuickPickItems = () => {\n\t\t\tswitch (true) {\n\t\t\t\tcase quickPick.value === '':\n\t\t\t\t\tquickPick.items = [...commands, ...picks];\n\t\t\t\t\tbreak;\n\t\t\t\tcase commands.length === 0:\n\t\t\t\t\tquickPick.items = picks;\n\t\t\t\t\tbreak;\n\t\t\t\tcase picks.length === 0:\n\t\t\t\t\tquickPick.items = commands;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tquickPick.items = [...picks, { label: '', kind: QuickPickItemKind.Separator }, ...commands];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\tsetQuickPickItems();\n\t\tquickPick.busy = false;\n\n\t\tconst choice = await new Promise<QuickPickItem | undefined>(c => {\n\t\t\tdisposables.push(quickPick.onDidHide(() => c(undefined)));\n\t\t\tdisposables.push(quickPick.onDidAccept(() => c(quickPick.activeItems[0])));\n\t\t\tdisposables.push((quickPick.onDidTriggerItemButton((e) => {\n\t\t\t\tconst button = e.button as QuickInputButton & { actual: RemoteSourceAction };\n\t\t\t\tconst item = e.item as CheckoutItem;\n\t\t\t\tif (button.actual && item.refName) {\n\t\t\t\t\tbutton.actual.run(item.refRemote ? item.refName.substring(item.refRemote.length + 1) : item.refName);\n\t\t\t\t}\n\n\t\t\t\tc(undefined);\n\t\t\t})));\n\t\t\tdisposables.push(quickPick.onDidChangeValue(() => setQuickPickItems()));\n\t\t});\n\n\t\tdispose(disposables);\n\t\tquickPick.dispose();\n\n\t\tif (!choice) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (choice === createBranch) {\n\t\t\tawait this._branch(repository, quickPick.value);\n\t\t} else if (choice === createBranchFrom) {\n\t\t\tawait this._branch(repository, quickPick.value, true);\n\t\t} else if (choice === checkoutDetached) {\n\t\t\treturn this._checkout(repository, { detached: true });\n\t\t} else {\n\t\t\tconst item = choice as CheckoutItem;\n\n\t\t\ttry {\n\t\t\t\tawait item.run(repository, opts);\n\t\t\t} catch (err) {\n\t\t\t\tif (err.gitErrorCode !== GitErrorCodes.DirtyWorkTree) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\n\t\t\t\tconst stash = l10n.t('Stash & Checkout');\n\t\t\t\tconst migrate = l10n.t('Migrate Changes');\n\t\t\t\tconst force = l10n.t('Force Checkout');\n\t\t\t\tconst choice = await window.showWarningMessage(l10n.t('Your local changes would be overwritten by checkout.'), { modal: true }, stash, migrate, force);\n\n\t\t\t\tif (choice === force) {\n\t\t\t\t\tawait this.cleanAll(repository);\n\t\t\t\t\tawait item.run(repository, opts);\n\t\t\t\t} else if (choice === stash || choice === migrate) {\n\t\t\t\t\tif (await this._stash(repository, true)) {\n\t\t\t\t\t\tawait item.run(repository, opts);\n\n\t\t\t\t\t\tif (choice === migrate) {\n\t\t\t\t\t\t\tawait this.stashPopLatest(repository);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t@command('git.branch', { repository: true })\n\tasync branch(repository: Repository, historyItem?: SourceControlHistoryItem): Promise<void> {\n\t\tawait this._branch(repository, undefined, false, historyItem?.id);\n\t}\n\n\t@command('git.branchFrom', { repository: true })\n\tasync branchFrom(repository: Repository): Promise<void> {\n\t\tawait this._branch(repository, undefined, true);\n\t}\n\n\tprivate async generateRandomBranchName(repository: Repository, separator: string): Promise<string> {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst branchRandomNameDictionary = config.get<string[]>('branchRandomName.dictionary')!;\n\n\t\tconst dictionaries: string[][] = [];\n\t\tfor (const dictionary of branchRandomNameDictionary) {\n\t\t\tif (dictionary.toLowerCase() === 'adjectives') {\n\t\t\t\tdictionaries.push(adjectives);\n\t\t\t}\n\t\t\tif (dictionary.toLowerCase() === 'animals') {\n\t\t\t\tdictionaries.push(animals);\n\t\t\t}\n\t\t\tif (dictionary.toLowerCase() === 'colors') {\n\t\t\t\tdictionaries.push(colors);\n\t\t\t}\n\t\t\tif (dictionary.toLowerCase() === 'numbers') {\n\t\t\t\tdictionaries.push(NumberDictionary.generate({ length: 3 }));\n\t\t\t}\n\t\t}\n\n\t\tif (dictionaries.length === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// 5 attempts to generate a random branch name\n\t\tfor (let index = 0; index < 5; index++) {\n\t\t\tconst randomName = uniqueNamesGenerator({\n\t\t\t\tdictionaries,\n\t\t\t\tlength: dictionaries.length,\n\t\t\t\tseparator\n\t\t\t});\n\n\t\t\t// Check for local ref conflict\n\t\t\tconst refs = await repository.getRefs({ pattern: `refs/heads/${randomName}` });\n\t\t\tif (refs.length === 0) {\n\t\t\t\treturn randomName;\n\t\t\t}\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tprivate async promptForBranchName(repository: Repository, defaultName?: string, initialValue?: string): Promise<string> {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst branchPrefix = config.get<string>('branchPrefix')!;\n\t\tconst branchWhitespaceChar = config.get<string>('branchWhitespaceChar')!;\n\t\tconst branchValidationRegex = config.get<string>('branchValidationRegex')!;\n\t\tconst branchRandomNameEnabled = config.get<boolean>('branchRandomName.enable', false);\n\n\t\tif (defaultName) {\n\t\t\treturn sanitizeBranchName(defaultName, branchWhitespaceChar);\n\t\t}\n\n\t\tconst getBranchName = async (): Promise<string> => {\n\t\t\tconst branchName = branchRandomNameEnabled ? await this.generateRandomBranchName(repository, branchWhitespaceChar) : '';\n\t\t\treturn `${branchPrefix}${branchName}`;\n\t\t};\n\n\t\tconst getValueSelection = (value: string): [number, number] | undefined => {\n\t\t\treturn value.startsWith(branchPrefix) ? [branchPrefix.length, value.length] : undefined;\n\t\t};\n\n\t\tconst getValidationMessage = (name: string): string | InputBoxValidationMessage | undefined => {\n\t\t\tconst validateName = new RegExp(branchValidationRegex);\n\t\t\tconst sanitizedName = sanitizeBranchName(name, branchWhitespaceChar);\n\t\t\tif (validateName.test(sanitizedName)) {\n\t\t\t\t// If the sanitized name that we will use is different than what is\n\t\t\t\t// in the input box, show an info message to the user informing them\n\t\t\t\t// the branch name that will be used.\n\t\t\t\treturn name === sanitizedName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: {\n\t\t\t\t\t\tmessage: l10n.t('The new branch will be \"{0}\"', sanitizedName),\n\t\t\t\t\t\tseverity: InputBoxValidationSeverity.Info\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn l10n.t('Branch name needs to match regex: {0}', branchValidationRegex);\n\t\t};\n\n\t\tconst disposables: Disposable[] = [];\n\t\tconst inputBox = window.createInputBox();\n\n\t\tinputBox.placeholder = l10n.t('Branch name');\n\t\tinputBox.prompt = l10n.t('Please provide a new branch name');\n\n\t\tinputBox.buttons = branchRandomNameEnabled ? [\n\t\t\t{\n\t\t\t\ticonPath: new ThemeIcon('refresh'),\n\t\t\t\ttooltip: l10n.t('Regenerate Branch Name'),\n\t\t\t\tlocation: QuickInputButtonLocation.Inline\n\t\t\t}\n\t\t] : [];\n\n\t\tinputBox.value = initialValue ?? await getBranchName();\n\t\tinputBox.valueSelection = getValueSelection(inputBox.value);\n\t\tinputBox.validationMessage = getValidationMessage(inputBox.value);\n\t\tinputBox.ignoreFocusOut = true;\n\n\t\tinputBox.show();\n\n\t\tconst branchName = await new Promise<string | undefined>((resolve) => {\n\t\t\tdisposables.push(inputBox.onDidHide(() => resolve(undefined)));\n\t\t\tdisposables.push(inputBox.onDidAccept(() => resolve(inputBox.value)));\n\t\t\tdisposables.push(inputBox.onDidChangeValue(value => {\n\t\t\t\tinputBox.validationMessage = getValidationMessage(value);\n\t\t\t}));\n\t\t\tdisposables.push(inputBox.onDidTriggerButton(async () => {\n\t\t\t\tinputBox.value = await getBranchName();\n\t\t\t\tinputBox.valueSelection = getValueSelection(inputBox.value);\n\t\t\t}));\n\t\t});\n\n\t\tdispose(disposables);\n\t\tinputBox.dispose();\n\n\t\treturn sanitizeBranchName(branchName || '', branchWhitespaceChar);\n\t}\n\n\tprivate async _branch(repository: Repository, defaultName?: string, from = false, target?: string): Promise<void> {\n\t\ttarget = target ?? 'HEAD';\n\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst showRefDetails = config.get<boolean>('showReferenceDetails') === true;\n\n\t\tif (from) {\n\t\t\tconst getRefPicks = async () => {\n\t\t\t\tconst refs = await repository.getRefs({ includeCommitDetails: showRefDetails });\n\t\t\t\tconst refProcessors = new RefItemsProcessor(repository, [\n\t\t\t\t\tnew RefProcessor(RefType.Head),\n\t\t\t\t\tnew RefProcessor(RefType.RemoteHead),\n\t\t\t\t\tnew RefProcessor(RefType.Tag)\n\t\t\t\t]);\n\n\t\t\t\treturn [new HEADItem(repository), ...refProcessors.processRefs(refs)];\n\t\t\t};\n\n\t\t\tconst placeHolder = l10n.t('Select a ref to create the branch from');\n\t\t\tconst choice = await window.showQuickPick(getRefPicks(), { placeHolder });\n\n\t\t\tif (!choice) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (choice instanceof RefItem && choice.refName) {\n\t\t\t\ttarget = choice.refName;\n\t\t\t}\n\t\t}\n\n\t\tconst branchName = await this.promptForBranchName(repository, defaultName);\n\n\t\tif (!branchName) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.branch(branchName, true, target);\n\t}\n\n\tprivate async pickRef<T extends QuickPickItem>(items: Promise<T[]>, placeHolder: string): Promise<T | undefined> {\n\t\tconst disposables: Disposable[] = [];\n\t\tconst quickPick = window.createQuickPick<T>();\n\n\t\tquickPick.placeholder = placeHolder;\n\t\tquickPick.sortByLabel = false;\n\t\tquickPick.busy = true;\n\n\t\tquickPick.show();\n\n\t\tquickPick.items = await items;\n\t\tquickPick.busy = false;\n\n\t\tconst choice = await new Promise<T | undefined>(resolve => {\n\t\t\tdisposables.push(quickPick.onDidHide(() => resolve(undefined)));\n\t\t\tdisposables.push(quickPick.onDidAccept(() => resolve(quickPick.activeItems[0])));\n\t\t});\n\n\t\tdispose(disposables);\n\t\tquickPick.dispose();\n\n\t\treturn choice;\n\t}\n\n\t@command('git.deleteBranch', { repository: true })\n\tasync deleteBranch(repository: Repository, name: string | undefined, force?: boolean): Promise<void> {\n\t\tawait this._deleteBranch(repository, undefined, name, { remote: false, force });\n\t}\n\n\t@command('git.graph.deleteBranch', { repository: true })\n\tasync deleteBranch2(repository: Repository, historyItem?: SourceControlHistoryItem, historyItemRefId?: string): Promise<void> {\n\t\tconst historyItemRef = historyItem?.references?.find(r => r.id === historyItemRefId);\n\t\tif (!historyItemRef) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Local branch\n\t\tif (historyItemRef.id.startsWith('refs/heads/')) {\n\t\t\tif (historyItemRef.id === repository.historyProvider.currentHistoryItemRef?.id) {\n\t\t\t\twindow.showInformationMessage(l10n.t('The active branch cannot be deleted.'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this._deleteBranch(repository, undefined, historyItemRef.name, { remote: false });\n\t\t\treturn;\n\t\t}\n\n\t\t// Remote branch\n\t\tif (historyItemRef.id === repository.historyProvider.currentHistoryItemRemoteRef?.id) {\n\t\t\twindow.showInformationMessage(l10n.t('The remote branch of the active branch cannot be deleted.'));\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = historyItemRef.name.indexOf('/');\n\t\tif (index === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remoteName = historyItemRef.name.substring(0, index);\n\t\tconst refName = historyItemRef.name.substring(index + 1);\n\n\t\tawait this._deleteBranch(repository, remoteName, refName, { remote: true });\n\t}\n\n\t@command('git.deleteRemoteBranch', { repository: true })\n\tasync deleteRemoteBranch(repository: Repository): Promise<void> {\n\t\tawait this._deleteBranch(repository, undefined, undefined, { remote: true });\n\t}\n\n\tprivate async _deleteBranch(repository: Repository, remote: string | undefined, name: string | undefined, options: { remote: boolean; force?: boolean }): Promise<void> {\n\t\tlet run: (force?: boolean) => Promise<void>;\n\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst showRefDetails = config.get<boolean>('showReferenceDetails') === true;\n\n\t\tif (!options.remote && typeof name === 'string') {\n\t\t\t// Local branch\n\t\t\trun = force => repository.deleteBranch(name!, force);\n\t\t} else if (options.remote && typeof remote === 'string' && typeof name === 'string') {\n\t\t\t// Remote branch\n\t\t\trun = force => repository.deleteRemoteRef(remote, name!, { force });\n\t\t} else {\n\t\t\tconst getBranchPicks = async () => {\n\t\t\t\tconst pattern = options.remote ? 'refs/remotes' : 'refs/heads';\n\t\t\t\tconst refs = await repository.getRefs({ pattern, includeCommitDetails: showRefDetails });\n\t\t\t\tconst processors = options.remote\n\t\t\t\t\t? [new RefProcessor(RefType.RemoteHead, BranchDeleteItem)]\n\t\t\t\t\t: [new RefProcessor(RefType.Head, BranchDeleteItem)];\n\n\t\t\t\tconst itemsProcessor = new RefItemsProcessor(repository, processors, {\n\t\t\t\t\tskipCurrentBranch: true,\n\t\t\t\t\tskipCurrentBranchRemote: true\n\t\t\t\t});\n\n\t\t\t\treturn itemsProcessor.processRefs(refs);\n\t\t\t};\n\n\t\t\tconst placeHolder = !options.remote\n\t\t\t\t? l10n.t('Select a branch to delete')\n\t\t\t\t: l10n.t('Select a remote branch to delete');\n\n\t\t\tconst choice = await this.pickRef(getBranchPicks(), placeHolder);\n\n\t\t\tif (!(choice instanceof BranchDeleteItem) || !choice.refName) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tname = choice.refName;\n\t\t\trun = force => choice.run(repository, force);\n\t\t}\n\n\t\ttry {\n\t\t\tawait run(options.force);\n\t\t} catch (err) {\n\t\t\tif (err.gitErrorCode !== GitErrorCodes.BranchNotFullyMerged) {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst message = l10n.t('The branch \"{0}\" is not fully merged. Delete anyway?', name);\n\t\t\tconst yes = l10n.t('Delete Branch');\n\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes);\n\n\t\t\tif (pick === yes) {\n\t\t\t\tawait run(true);\n\t\t\t}\n\t\t}\n\t}\n\n\t@command('git.renameBranch', { repository: true })\n\tasync renameBranch(repository: Repository): Promise<void> {\n\t\tconst currentBranchName = repository.HEAD && repository.HEAD.name;\n\t\tconst branchName = await this.promptForBranchName(repository, undefined, currentBranchName);\n\n\t\tif (!branchName) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait repository.renameBranch(branchName);\n\t\t} catch (err) {\n\t\t\tswitch (err.gitErrorCode) {\n\t\t\t\tcase GitErrorCodes.InvalidBranchName:\n\t\t\t\t\twindow.showErrorMessage(l10n.t('Invalid branch name'));\n\t\t\t\t\treturn;\n\t\t\t\tcase GitErrorCodes.BranchAlreadyExists:\n\t\t\t\t\twindow.showErrorMessage(l10n.t('A branch named \"{0}\" already exists', branchName));\n\t\t\t\t\treturn;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t}\n\n\t@command('git.merge', { repository: true })\n\tasync merge(repository: Repository): Promise<void> {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst showRefDetails = config.get<boolean>('showReferenceDetails') === true;\n\n\t\tconst getQuickPickItems = async (): Promise<QuickPickItem[]> => {\n\t\t\tconst refs = await repository.getRefs({ includeCommitDetails: showRefDetails });\n\t\t\tconst itemsProcessor = new RefItemsProcessor(repository, [\n\t\t\t\tnew RefProcessor(RefType.Head, MergeItem),\n\t\t\t\tnew RefProcessor(RefType.RemoteHead, MergeItem),\n\t\t\t\tnew RefProcessor(RefType.Tag, MergeItem)\n\t\t\t], {\n\t\t\t\tskipCurrentBranch: true,\n\t\t\t\tskipCurrentBranchRemote: true\n\t\t\t});\n\n\t\t\treturn itemsProcessor.processRefs(refs);\n\t\t};\n\n\t\tconst placeHolder = l10n.t('Select a branch or tag to merge from');\n\t\tconst choice = await this.pickRef(getQuickPickItems(), placeHolder);\n\n\t\tif (choice instanceof MergeItem) {\n\t\t\tawait choice.run(repository);\n\t\t}\n\t}\n\n\t@command('git.mergeAbort', { repository: true })\n\tasync abortMerge(repository: Repository): Promise<void> {\n\t\tawait repository.mergeAbort();\n\t}\n\n\t@command('git.rebase', { repository: true })\n\tasync rebase(repository: Repository): Promise<void> {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst showRefDetails = config.get<boolean>('showReferenceDetails') === true;\n\n\t\tconst getQuickPickItems = async (): Promise<QuickPickItem[]> => {\n\t\t\tconst refs = await repository.getRefs({ includeCommitDetails: showRefDetails });\n\t\t\tconst itemsProcessor = new RefItemsProcessor(repository, [\n\t\t\t\tnew RefProcessor(RefType.Head, RebaseItem),\n\t\t\t\tnew RefProcessor(RefType.RemoteHead, RebaseItem)\n\t\t\t], {\n\t\t\t\tskipCurrentBranch: true,\n\t\t\t\tskipCurrentBranchRemote: true\n\t\t\t});\n\n\t\t\tconst quickPickItems = itemsProcessor.processRefs(refs);\n\n\t\t\tif (repository.HEAD?.upstream) {\n\t\t\t\tconst upstreamRef = refs.find(ref => ref.type === RefType.RemoteHead &&\n\t\t\t\t\tref.name === `${repository.HEAD!.upstream!.remote}/${repository.HEAD!.upstream!.name}`);\n\n\t\t\t\tif (upstreamRef) {\n\t\t\t\t\tquickPickItems.splice(0, 0, new RebaseUpstreamItem(upstreamRef));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn quickPickItems;\n\t\t};\n\n\t\tconst placeHolder = l10n.t('Select a branch to rebase onto');\n\t\tconst choice = await this.pickRef(getQuickPickItems(), placeHolder);\n\n\t\tif (choice instanceof RebaseItem) {\n\t\t\tawait choice.run(repository);\n\t\t}\n\t}\n\n\t@command('git.createTag', { repository: true })\n\tasync createTag(repository: Repository, historyItem?: SourceControlHistoryItem): Promise<void> {\n\t\tconst inputTagName = await window.showInputBox({\n\t\t\tplaceHolder: l10n.t('Tag name'),\n\t\t\tprompt: l10n.t('Please provide a tag name'),\n\t\t\tignoreFocusOut: true\n\t\t});\n\n\t\tif (!inputTagName) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst inputMessage = await window.showInputBox({\n\t\t\tplaceHolder: l10n.t('Message'),\n\t\t\tprompt: l10n.t('Please provide a message to annotate the tag'),\n\t\t\tignoreFocusOut: true\n\t\t});\n\n\t\tconst name = inputTagName.replace(/^\\.|\\/\\.|\\.\\.|~|\\^|:|\\/$|\\.lock$|\\.lock\\/|\\\\|\\*|\\s|^\\s*$|\\.$/g, '-');\n\t\tawait repository.tag({ name, message: inputMessage, ref: historyItem?.id });\n\t}\n\n\t@command('git.deleteTag', { repository: true })\n\tasync deleteTag(repository: Repository): Promise<void> {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst showRefDetails = config.get<boolean>('showReferenceDetails') === true;\n\n\t\tconst tagPicks = async (): Promise<TagDeleteItem[] | QuickPickItem[]> => {\n\t\t\tconst remoteTags = await repository.getRefs({ pattern: 'refs/tags', includeCommitDetails: showRefDetails });\n\t\t\treturn remoteTags.length === 0 ? [{ label: l10n.t('$(info) This repository has no tags.') }] : remoteTags.map(ref => new TagDeleteItem(ref));\n\t\t};\n\n\t\tconst placeHolder = l10n.t('Select a tag to delete');\n\t\tconst choice = await this.pickRef<TagDeleteItem | QuickPickItem>(tagPicks(), placeHolder);\n\n\t\tif (choice instanceof TagDeleteItem) {\n\t\t\tawait choice.run(repository);\n\t\t}\n\t}\n\n\t@command('git.graph.deleteTag', { repository: true })\n\tasync deleteTag2(repository: Repository, historyItem?: SourceControlHistoryItem, historyItemRefId?: string): Promise<void> {\n\t\tconst historyItemRef = historyItem?.references?.find(r => r.id === historyItemRefId);\n\t\tif (!historyItemRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.deleteTag(historyItemRef.name);\n\t}\n\n\t@command('git.deleteRemoteTag', { repository: true })\n\tasync deleteRemoteTag(repository: Repository): Promise<void> {\n\t\tconst remotePicks = repository.remotes\n\t\t\t.filter(r => r.pushUrl !== undefined)\n\t\t\t.map(r => new RemoteItem(repository, r));\n\n\t\tif (remotePicks.length === 0) {\n\t\t\twindow.showErrorMessage(l10n.t(\"Your repository has no remotes configured to push to.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet remoteName = remotePicks[0].remoteName;\n\t\tif (remotePicks.length > 1) {\n\t\t\tconst remotePickPlaceholder = l10n.t('Select a remote to delete a tag from');\n\t\t\tconst remotePick = await window.showQuickPick(remotePicks, { placeHolder: remotePickPlaceholder });\n\n\t\t\tif (!remotePick) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tremoteName = remotePick.remoteName;\n\t\t}\n\n\t\tconst remoteTagPicks = async (): Promise<RemoteTagDeleteItem[] | QuickPickItem[]> => {\n\t\t\tconst remoteTagsRaw = await repository.getRemoteRefs(remoteName, { tags: true });\n\n\t\t\t// Deduplicate annotated and lightweight tags\n\t\t\tconst remoteTagNames = new Set<string>();\n\t\t\tconst remoteTags: Ref[] = [];\n\n\t\t\tfor (const tag of remoteTagsRaw) {\n\t\t\t\tconst tagName = (tag.name ?? '').replace(/\\^{}$/, '');\n\t\t\t\tif (!remoteTagNames.has(tagName)) {\n\t\t\t\t\tremoteTags.push({ ...tag, name: tagName });\n\t\t\t\t\tremoteTagNames.add(tagName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn remoteTags.length === 0 ? [{ label: l10n.t('$(info) Remote \"{0}\" has no tags.', remoteName) }] : remoteTags.map(ref => new RemoteTagDeleteItem(ref));\n\t\t};\n\n\t\tconst tagPickPlaceholder = l10n.t('Select a remote tag to delete');\n\t\tconst remoteTagPick = await window.showQuickPick<RemoteTagDeleteItem | QuickPickItem>(remoteTagPicks(), { placeHolder: tagPickPlaceholder });\n\n\t\tif (remoteTagPick instanceof RemoteTagDeleteItem) {\n\t\t\tawait remoteTagPick.run(repository, remoteName);\n\t\t}\n\t}\n\n\t@command('git.fetch', { repository: true })\n\tasync fetch(repository: Repository): Promise<void> {\n\t\tif (repository.remotes.length === 0) {\n\t\t\twindow.showWarningMessage(l10n.t('This repository has no remotes configured to fetch from.'));\n\t\t\treturn;\n\t\t}\n\n\t\tif (repository.remotes.length === 1) {\n\t\t\tawait repository.fetchDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst remoteItems: RemoteItem[] = repository.remotes.map(r => new RemoteItem(repository, r));\n\n\t\tif (repository.HEAD?.upstream?.remote) {\n\t\t\t// Move default remote to the top\n\t\t\tconst defaultRemoteIndex = remoteItems\n\t\t\t\t.findIndex(r => r.remoteName === repository.HEAD!.upstream!.remote);\n\n\t\t\tif (defaultRemoteIndex !== -1) {\n\t\t\t\tremoteItems.splice(0, 0, ...remoteItems.splice(defaultRemoteIndex, 1));\n\t\t\t}\n\t\t}\n\n\t\tconst quickpick = window.createQuickPick();\n\t\tquickpick.placeholder = l10n.t('Select a remote to fetch');\n\t\tquickpick.canSelectMany = false;\n\t\tquickpick.items = [...remoteItems, { label: '', kind: QuickPickItemKind.Separator }, new FetchAllRemotesItem(repository)];\n\n\t\tquickpick.show();\n\t\tconst remoteItem = await new Promise<RemoteItem | FetchAllRemotesItem | undefined>(resolve => {\n\t\t\tquickpick.onDidAccept(() => resolve(quickpick.activeItems[0] as RemoteItem | FetchAllRemotesItem));\n\t\t\tquickpick.onDidHide(() => resolve(undefined));\n\t\t});\n\t\tquickpick.hide();\n\n\t\tif (!remoteItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait remoteItem.run();\n\t}\n\n\t@command('git.fetchPrune', { repository: true })\n\tasync fetchPrune(repository: Repository): Promise<void> {\n\t\tif (repository.remotes.length === 0) {\n\t\t\twindow.showWarningMessage(l10n.t('This repository has no remotes configured to fetch from.'));\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.fetchPrune();\n\t}\n\n\n\t@command('git.fetchAll', { repository: true })\n\tasync fetchAll(repository: Repository): Promise<void> {\n\t\tif (repository.remotes.length === 0) {\n\t\t\twindow.showWarningMessage(l10n.t('This repository has no remotes configured to fetch from.'));\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.fetchAll();\n\t}\n\n\t@command('git.fetchRef', { repository: true })\n\tasync fetchRef(repository: Repository, ref?: string): Promise<void> {\n\t\tref = ref ?? repository?.historyProvider.currentHistoryItemRemoteRef?.id;\n\t\tif (!repository || !ref) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst branch = await repository.getBranch(ref);\n\t\tawait repository.fetch({ remote: branch.remote, ref: branch.name });\n\t}\n\n\t@command('git.pullFrom', { repository: true })\n\tasync pullFrom(repository: Repository): Promise<void> {\n\t\tconst remotes = repository.remotes;\n\n\t\tif (remotes.length === 0) {\n\t\t\twindow.showWarningMessage(l10n.t('Your repository has no remotes configured to pull from.'));\n\t\t\treturn;\n\t\t}\n\n\t\tlet remoteName = remotes[0].name;\n\t\tif (remotes.length > 1) {\n\t\t\tconst remotePicks = remotes.filter(r => r.fetchUrl !== undefined).map(r => ({ label: r.name, description: r.fetchUrl! }));\n\t\t\tconst placeHolder = l10n.t('Pick a remote to pull the branch from');\n\t\t\tconst remotePick = await window.showQuickPick(remotePicks, { placeHolder });\n\n\t\t\tif (!remotePick) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tremoteName = remotePick.label;\n\t\t}\n\n\t\tconst getBranchPicks = async (): Promise<RefItem[]> => {\n\t\t\tconst remoteRefs = await repository.getRefs({ pattern: `refs/remotes/${remoteName}/` });\n\t\t\treturn remoteRefs.map(r => new RefItem(r));\n\t\t};\n\n\t\tconst branchPlaceHolder = l10n.t('Pick a branch to pull from');\n\t\tconst branchPick = await this.pickRef(getBranchPicks(), branchPlaceHolder);\n\n\t\tif (!branchPick || !branchPick.refName) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remoteCharCnt = remoteName.length;\n\t\tawait repository.pullFrom(false, remoteName, branchPick.refName.slice(remoteCharCnt + 1));\n\t}\n\n\t@command('git.pull', { repository: true })\n\tasync pull(repository: Repository): Promise<void> {\n\t\tconst remotes = repository.remotes;\n\n\t\tif (remotes.length === 0) {\n\t\t\twindow.showWarningMessage(l10n.t('Your repository has no remotes configured to pull from.'));\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.pull(repository.HEAD);\n\t}\n\n\t@command('git.pullRebase', { repository: true })\n\tasync pullRebase(repository: Repository): Promise<void> {\n\t\tconst remotes = repository.remotes;\n\n\t\tif (remotes.length === 0) {\n\t\t\twindow.showWarningMessage(l10n.t('Your repository has no remotes configured to pull from.'));\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.pullWithRebase(repository.HEAD);\n\t}\n\n\t@command('git.pullRef', { repository: true })\n\tasync pullRef(repository: Repository, ref?: string): Promise<void> {\n\t\tref = ref ?? repository?.historyProvider.currentHistoryItemRemoteRef?.id;\n\t\tif (!repository || !ref) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst branch = await repository.getBranch(ref);\n\t\tawait repository.pullFrom(false, branch.remote, branch.name);\n\t}\n\n\tprivate async _push(repository: Repository, pushOptions: PushOptions) {\n\t\tconst remotes = repository.remotes;\n\n\t\tif (remotes.length === 0) {\n\t\t\tif (pushOptions.silent) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst addRemote = l10n.t('Add Remote');\n\t\t\tconst result = await window.showWarningMessage(l10n.t('Your repository has no remotes configured to push to.'), addRemote);\n\n\t\t\tif (result === addRemote) {\n\t\t\t\tawait this.addRemote(repository);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\tlet forcePushMode: ForcePushMode | undefined = undefined;\n\n\t\tif (pushOptions.forcePush) {\n\t\t\tif (!config.get<boolean>('allowForcePush')) {\n\t\t\t\tawait window.showErrorMessage(l10n.t('Force push is not allowed, please enable it with the \"git.allowForcePush\" setting.'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst useForcePushWithLease = config.get<boolean>('useForcePushWithLease') === true;\n\t\t\tconst useForcePushIfIncludes = config.get<boolean>('useForcePushIfIncludes') === true;\n\t\t\tforcePushMode = useForcePushWithLease ? useForcePushIfIncludes ? ForcePushMode.ForceWithLeaseIfIncludes : ForcePushMode.ForceWithLease : ForcePushMode.Force;\n\n\t\t\tif (config.get<boolean>('confirmForcePush')) {\n\t\t\t\tconst message = l10n.t('You are about to force push your changes, this can be destructive and could inadvertently overwrite changes made by others.\\n\\nAre you sure to continue?');\n\t\t\t\tconst yes = l10n.t('OK');\n\t\t\t\tconst neverAgain = l10n.t('OK, Don\\'t Ask Again');\n\t\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes, neverAgain);\n\n\t\t\t\tif (pick === neverAgain) {\n\t\t\t\t\tconfig.update('confirmForcePush', false, true);\n\t\t\t\t} else if (pick !== yes) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (pushOptions.pushType === PushType.PushFollowTags) {\n\t\t\tawait repository.pushFollowTags(undefined, forcePushMode);\n\t\t\treturn;\n\t\t}\n\n\t\tif (pushOptions.pushType === PushType.PushTags) {\n\t\t\tawait repository.pushTags(undefined, forcePushMode);\n\t\t}\n\n\t\tif (!repository.HEAD || !repository.HEAD.name) {\n\t\t\tif (!pushOptions.silent) {\n\t\t\t\twindow.showWarningMessage(l10n.t('Please check out a branch to push to a remote.'));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (pushOptions.pushType === PushType.Push) {\n\t\t\ttry {\n\t\t\t\tawait repository.push(repository.HEAD, forcePushMode);\n\t\t\t} catch (err) {\n\t\t\t\tif (err.gitErrorCode !== GitErrorCodes.NoUpstreamBranch) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\n\t\t\t\tif (pushOptions.silent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.globalState.get<boolean>('confirmBranchPublish', true)) {\n\t\t\t\t\tconst branchName = repository.HEAD.name;\n\t\t\t\t\tconst message = l10n.t('The branch \"{0}\" has no remote branch. Would you like to publish this branch?', branchName);\n\t\t\t\t\tconst yes = l10n.t('OK');\n\t\t\t\t\tconst neverAgain = l10n.t('OK, Don\\'t Ask Again');\n\t\t\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes, neverAgain);\n\n\t\t\t\t\tif (pick === yes || pick === neverAgain) {\n\t\t\t\t\t\tif (pick === neverAgain) {\n\t\t\t\t\t\t\tthis.globalState.update('confirmBranchPublish', false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait this.publish(repository);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tawait this.publish(repository);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst branchName = repository.HEAD.name;\n\t\t\tif (!pushOptions.pushTo?.remote) {\n\t\t\t\tconst addRemote = new AddRemoteItem(this);\n\t\t\t\tconst picks = [...remotes.filter(r => r.pushUrl !== undefined).map(r => ({ label: r.name, description: r.pushUrl })), addRemote];\n\t\t\t\tconst placeHolder = l10n.t('Pick a remote to publish the branch \"{0}\" to:', branchName);\n\t\t\t\tconst choice = await window.showQuickPick(picks, { placeHolder });\n\n\t\t\t\tif (!choice) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (choice === addRemote) {\n\t\t\t\t\tconst newRemote = await this.addRemote(repository);\n\n\t\t\t\t\tif (newRemote) {\n\t\t\t\t\t\tawait repository.pushTo(newRemote, branchName, undefined, forcePushMode);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tawait repository.pushTo(choice.label, branchName, undefined, forcePushMode);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait repository.pushTo(pushOptions.pushTo.remote, pushOptions.pushTo.refspec || branchName, pushOptions.pushTo.setUpstream, forcePushMode);\n\t\t\t}\n\t\t}\n\t}\n\n\t@command('git.push', { repository: true })\n\tasync push(repository: Repository): Promise<void> {\n\t\tawait this._push(repository, { pushType: PushType.Push });\n\t}\n\n\t@command('git.pushForce', { repository: true })\n\tasync pushForce(repository: Repository): Promise<void> {\n\t\tawait this._push(repository, { pushType: PushType.Push, forcePush: true });\n\t}\n\n\t@command('git.pushWithTags', { repository: true })\n\tasync pushFollowTags(repository: Repository): Promise<void> {\n\t\tawait this._push(repository, { pushType: PushType.PushFollowTags });\n\t}\n\n\t@command('git.pushWithTagsForce', { repository: true })\n\tasync pushFollowTagsForce(repository: Repository): Promise<void> {\n\t\tawait this._push(repository, { pushType: PushType.PushFollowTags, forcePush: true });\n\t}\n\n\t@command('git.pushRef', { repository: true })\n\tasync pushRef(repository: Repository): Promise<void> {\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._push(repository, { pushType: PushType.Push });\n\t}\n\n\t@command('git.cherryPick', { repository: true })\n\tasync cherryPick(repository: Repository): Promise<void> {\n\t\tconst hash = await window.showInputBox({\n\t\t\tplaceHolder: l10n.t('Commit Hash'),\n\t\t\tprompt: l10n.t('Please provide the commit hash'),\n\t\t\tignoreFocusOut: true\n\t\t});\n\n\t\tif (!hash) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.cherryPick(hash);\n\t}\n\n\t@command('git.graph.cherryPick', { repository: true })\n\tasync cherryPick2(repository: Repository, historyItem?: SourceControlHistoryItem): Promise<void> {\n\t\tif (!historyItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.cherryPick(historyItem.id);\n\t}\n\n\t@command('git.cherryPickAbort', { repository: true })\n\tasync cherryPickAbort(repository: Repository): Promise<void> {\n\t\tawait repository.cherryPickAbort();\n\t}\n\n\t@command('git.pushTo', { repository: true })\n\tasync pushTo(repository: Repository, remote?: string, refspec?: string, setUpstream?: boolean): Promise<void> {\n\t\tawait this._push(repository, { pushType: PushType.PushTo, pushTo: { remote: remote, refspec: refspec, setUpstream: setUpstream } });\n\t}\n\n\t@command('git.pushToForce', { repository: true })\n\tasync pushToForce(repository: Repository, remote?: string, refspec?: string, setUpstream?: boolean): Promise<void> {\n\t\tawait this._push(repository, { pushType: PushType.PushTo, pushTo: { remote: remote, refspec: refspec, setUpstream: setUpstream }, forcePush: true });\n\t}\n\n\t@command('git.pushTags', { repository: true })\n\tasync pushTags(repository: Repository): Promise<void> {\n\t\tawait this._push(repository, { pushType: PushType.PushTags });\n\t}\n\n\t@command('git.addRemote', { repository: true })\n\tasync addRemote(repository: Repository): Promise<string | undefined> {\n\t\tconst url = await pickRemoteSource({\n\t\t\tproviderLabel: provider => l10n.t('Add remote from {0}', provider.name),\n\t\t\turlLabel: l10n.t('Add remote from URL')\n\t\t});\n\n\t\tif (!url) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resultName = await window.showInputBox({\n\t\t\tplaceHolder: l10n.t('Remote name'),\n\t\t\tprompt: l10n.t('Please provide a remote name'),\n\t\t\tignoreFocusOut: true,\n\t\t\tvalidateInput: (name: string) => {\n\t\t\t\tif (!sanitizeRemoteName(name)) {\n\t\t\t\t\treturn l10n.t('Remote name format invalid');\n\t\t\t\t} else if (repository.remotes.find(r => r.name === name)) {\n\t\t\t\t\treturn l10n.t('Remote \"{0}\" already exists.', name);\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\n\t\tconst name = sanitizeRemoteName(resultName || '');\n\n\t\tif (!name) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.addRemote(name, url.trim());\n\t\tawait repository.fetch({ remote: name });\n\t\treturn name;\n\t}\n\n\t@command('git.removeRemote', { repository: true })\n\tasync removeRemote(repository: Repository): Promise<void> {\n\t\tconst remotes = repository.remotes;\n\n\t\tif (remotes.length === 0) {\n\t\t\twindow.showErrorMessage(l10n.t('Your repository has no remotes.'));\n\t\t\treturn;\n\t\t}\n\n\t\tconst picks: RemoteItem[] = repository.remotes.map(r => new RemoteItem(repository, r));\n\t\tconst placeHolder = l10n.t('Pick a remote to remove');\n\n\t\tconst remote = await window.showQuickPick(picks, { placeHolder });\n\n\t\tif (!remote) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.removeRemote(remote.remoteName);\n\t}\n\n\tprivate async _sync(repository: Repository, rebase: boolean): Promise<void> {\n\t\tconst HEAD = repository.HEAD;\n\n\t\tif (!HEAD) {\n\t\t\treturn;\n\t\t} else if (!HEAD.upstream) {\n\t\t\tthis._push(repository, { pushType: PushType.Push });\n\t\t\treturn;\n\t\t}\n\n\t\tconst remoteName = HEAD.remote || HEAD.upstream.remote;\n\t\tconst remote = repository.remotes.find(r => r.name === remoteName);\n\t\tconst isReadonly = remote && remote.isReadOnly;\n\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst shouldPrompt = !isReadonly && config.get<boolean>('confirmSync') === true;\n\n\t\tif (shouldPrompt) {\n\t\t\tconst message = l10n.t('This action will pull and push commits from and to \"{0}/{1}\".', HEAD.upstream.remote, HEAD.upstream.name);\n\t\t\tconst yes = l10n.t('OK');\n\t\t\tconst neverAgain = l10n.t('OK, Don\\'t Show Again');\n\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, yes, neverAgain);\n\n\t\t\tif (pick === neverAgain) {\n\t\t\t\tawait config.update('confirmSync', false, true);\n\t\t\t} else if (pick !== yes) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tawait repository.sync(HEAD, rebase);\n\t}\n\n\t@command('git.sync', { repository: true })\n\tasync sync(repository: Repository): Promise<void> {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\tconst rebase = config.get<boolean>('rebaseWhenSync', false) === true;\n\n\t\ttry {\n\t\t\tawait this._sync(repository, rebase);\n\t\t} catch (err) {\n\t\t\tif (/Cancelled/i.test(err && (err.message || err.stderr || ''))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t@command('git._syncAll')\n\tasync syncAll(): Promise<void> {\n\t\tawait Promise.all(this.model.repositories.map(async repository => {\n\t\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\t\tconst rebase = config.get<boolean>('rebaseWhenSync', false) === true;\n\n\t\t\tconst HEAD = repository.HEAD;\n\n\t\t\tif (!HEAD || !HEAD.upstream) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait repository.sync(HEAD, rebase);\n\t\t}));\n\t}\n\n\t@command('git.syncRebase', { repository: true })\n\tasync syncRebase(repository: Repository): Promise<void> {\n\t\ttry {\n\t\t\tawait this._sync(repository, true);\n\t\t} catch (err) {\n\t\t\tif (/Cancelled/i.test(err && (err.message || err.stderr || ''))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t@command('git.publish', { repository: true })\n\tasync publish(repository: Repository): Promise<void> {\n\t\tconst branchName = repository.HEAD && repository.HEAD.name || '';\n\t\tconst remotes = repository.remotes;\n\n\t\tif (remotes.length === 0) {\n\t\t\tconst publishers = this.model.getRemoteSourcePublishers();\n\n\t\t\tif (publishers.length === 0) {\n\t\t\t\twindow.showWarningMessage(l10n.t('Your repository has no remotes configured to publish to.'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet publisher: RemoteSourcePublisher;\n\n\t\t\tif (publishers.length === 1) {\n\t\t\t\tpublisher = publishers[0];\n\t\t\t} else {\n\t\t\t\tconst picks = publishers\n\t\t\t\t\t.map(provider => ({ label: (provider.icon ? `$(${provider.icon}) ` : '') + l10n.t('Publish to {0}', provider.name), alwaysShow: true, provider }));\n\t\t\t\tconst placeHolder = l10n.t('Pick a provider to publish the branch \"{0}\" to:', branchName);\n\t\t\t\tconst choice = await window.showQuickPick(picks, { placeHolder });\n\n\t\t\t\tif (!choice) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpublisher = choice.provider;\n\t\t\t}\n\n\t\t\tawait publisher.publishRepository(new ApiRepository(repository));\n\t\t\tthis.model.firePublishEvent(repository, branchName);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (remotes.length === 1) {\n\t\t\tawait repository.pushTo(remotes[0].name, branchName, true);\n\t\t\tthis.model.firePublishEvent(repository, branchName);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst addRemote = new AddRemoteItem(this);\n\t\tconst picks = [...repository.remotes.map(r => ({ label: r.name, description: r.pushUrl })), addRemote];\n\t\tconst placeHolder = l10n.t('Pick a remote to publish the branch \"{0}\" to:', branchName);\n\t\tconst choice = await window.showQuickPick(picks, { placeHolder });\n\n\t\tif (!choice) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (choice === addRemote) {\n\t\t\tconst newRemote = await this.addRemote(repository);\n\n\t\t\tif (newRemote) {\n\t\t\t\tawait repository.pushTo(newRemote, branchName, true);\n\n\t\t\t\tthis.model.firePublishEvent(repository, branchName);\n\t\t\t}\n\t\t} else {\n\t\t\tawait repository.pushTo(choice.label, branchName, true);\n\n\t\t\tthis.model.firePublishEvent(repository, branchName);\n\t\t}\n\t}\n\n\t@command('git.ignore')\n\tasync ignore(...resourceStates: SourceControlResourceState[]): Promise<void> {\n\t\tresourceStates = resourceStates.filter(s => !!s);\n\n\t\tif (resourceStates.length === 0 || (resourceStates[0] && !(resourceStates[0].resourceUri instanceof Uri))) {\n\t\t\tconst resource = this.getSCMResource();\n\n\t\t\tif (!resource) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourceStates = [resource];\n\t\t}\n\n\t\tconst resources = resourceStates\n\t\t\t.filter(s => s instanceof Resource)\n\t\t\t.map(r => r.resourceUri);\n\n\t\tif (!resources.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.runByRepository(resources, async (repository, resources) => repository.ignore(resources));\n\t}\n\n\t@command('git.revealInExplorer')\n\tasync revealInExplorer(resourceState: SourceControlResourceState): Promise<void> {\n\t\tif (!resourceState) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!(resourceState.resourceUri instanceof Uri)) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait commands.executeCommand('revealInExplorer', resourceState.resourceUri);\n\t}\n\n\t@command('git.revealFileInOS.linux')\n\t@command('git.revealFileInOS.mac')\n\t@command('git.revealFileInOS.windows')\n\tasync revealFileInOS(resourceState: SourceControlResourceState): Promise<void> {\n\t\tif (!resourceState) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!(resourceState.resourceUri instanceof Uri)) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait commands.executeCommand('revealFileInOS', resourceState.resourceUri);\n\t}\n\n\tprivate async _stash(repository: Repository, includeUntracked = false, staged = false): Promise<boolean> {\n\t\tconst noUnstagedChanges = repository.workingTreeGroup.resourceStates.length === 0\n\t\t\t&& (!includeUntracked || repository.untrackedGroup.resourceStates.length === 0);\n\t\tconst noStagedChanges = repository.indexGroup.resourceStates.length === 0;\n\n\t\tif (staged) {\n\t\t\tif (noStagedChanges) {\n\t\t\t\twindow.showInformationMessage(l10n.t('There are no staged changes to stash.'));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tif (noUnstagedChanges && noStagedChanges) {\n\t\t\t\twindow.showInformationMessage(l10n.t('There are no changes to stash.'));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\t\tconst promptToSaveFilesBeforeStashing = config.get<'always' | 'staged' | 'never'>('promptToSaveFilesBeforeStash');\n\n\t\tif (promptToSaveFilesBeforeStashing !== 'never') {\n\t\t\tlet documents = workspace.textDocuments\n\t\t\t\t.filter(d => !d.isUntitled && d.isDirty && isDescendant(repository.root, d.uri.fsPath));\n\n\t\t\tif (promptToSaveFilesBeforeStashing === 'staged' || repository.indexGroup.resourceStates.length > 0) {\n\t\t\t\tdocuments = documents\n\t\t\t\t\t.filter(d => repository.indexGroup.resourceStates.some(s => pathEquals(s.resourceUri.fsPath, d.uri.fsPath)));\n\t\t\t}\n\n\t\t\tif (documents.length > 0) {\n\t\t\t\tconst message = documents.length === 1\n\t\t\t\t\t? l10n.t('The following file has unsaved changes which won\\'t be included in the stash if you proceed: {0}.\\n\\nWould you like to save it before stashing?', path.basename(documents[0].uri.fsPath))\n\t\t\t\t\t: l10n.t('There are {0} unsaved files.\\n\\nWould you like to save them before stashing?', documents.length);\n\t\t\t\tconst saveAndStash = l10n.t('Save All & Stash');\n\t\t\t\tconst stash = l10n.t('Stash Anyway');\n\t\t\t\tconst pick = await window.showWarningMessage(message, { modal: true }, saveAndStash, stash);\n\n\t\t\t\tif (pick === saveAndStash) {\n\t\t\t\t\tawait Promise.all(documents.map(d => d.save()));\n\t\t\t\t} else if (pick !== stash) {\n\t\t\t\t\treturn false; // do not stash on cancel\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet message: string | undefined;\n\n\t\tif (config.get<boolean>('useCommitInputAsStashMessage') && (!repository.sourceControl.commitTemplate || repository.inputBox.value !== repository.sourceControl.commitTemplate)) {\n\t\t\tmessage = repository.inputBox.value;\n\t\t}\n\n\t\tmessage = await window.showInputBox({\n\t\t\tvalue: message,\n\t\t\tprompt: l10n.t('Optionally provide a stash message'),\n\t\t\tplaceHolder: l10n.t('Stash message')\n\t\t});\n\n\t\tif (typeof message === 'undefined') {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tawait repository.createStash(message, includeUntracked, staged);\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\tif (/You do not have the initial commit yet/.test(err.stderr || '')) {\n\t\t\t\twindow.showInformationMessage(l10n.t('The repository does not have any commits. Please make an initial commit before creating a stash.'));\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t@command('git.stash', { repository: true })\n\tasync stash(repository: Repository): Promise<boolean> {\n\t\tconst result = await this._stash(repository);\n\t\treturn result;\n\t}\n\n\t@command('git.stashStaged', { repository: true })\n\tasync stashStaged(repository: Repository): Promise<boolean> {\n\t\tconst result = await this._stash(repository, false, true);\n\t\treturn result;\n\t}\n\n\t@command('git.stashIncludeUntracked', { repository: true })\n\tasync stashIncludeUntracked(repository: Repository): Promise<boolean> {\n\t\tconst result = await this._stash(repository, true);\n\t\treturn result;\n\t}\n\n\t@command('git.stashPop', { repository: true })\n\tasync stashPop(repository: Repository): Promise<void> {\n\t\tconst placeHolder = l10n.t('Pick a stash to pop');\n\t\tconst stash = await this.pickStash(repository, placeHolder);\n\n\t\tif (!stash) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.popStash(stash.index);\n\t}\n\n\t@command('git.stashPopLatest', { repository: true })\n\tasync stashPopLatest(repository: Repository): Promise<void> {\n\t\tconst stashes = await repository.getStashes();\n\n\t\tif (stashes.length === 0) {\n\t\t\twindow.showInformationMessage(l10n.t('There are no stashes in the repository.'));\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.popStash();\n\t}\n\n\t@command('git.stashPopEditor')\n\tasync stashPopEditor(uri: Uri): Promise<void> {\n\t\tconst result = await this.getStashFromUri(uri);\n\t\tif (!result) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait commands.executeCommand('workbench.action.closeActiveEditor');\n\t\tawait result.repository.popStash(result.stash.index);\n\t}\n\n\t@command('git.stashApply', { repository: true })\n\tasync stashApply(repository: Repository): Promise<void> {\n\t\tconst placeHolder = l10n.t('Pick a stash to apply');\n\t\tconst stash = await this.pickStash(repository, placeHolder);\n\n\t\tif (!stash) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.applyStash(stash.index);\n\t}\n\n\t@command('git.stashApplyLatest', { repository: true })\n\tasync stashApplyLatest(repository: Repository): Promise<void> {\n\t\tconst stashes = await repository.getStashes();\n\n\t\tif (stashes.length === 0) {\n\t\t\twindow.showInformationMessage(l10n.t('There are no stashes in the repository.'));\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.applyStash();\n\t}\n\n\t@command('git.stashApplyEditor')\n\tasync stashApplyEditor(uri: Uri): Promise<void> {\n\t\tconst result = await this.getStashFromUri(uri);\n\t\tif (!result) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait commands.executeCommand('workbench.action.closeActiveEditor');\n\t\tawait result.repository.applyStash(result.stash.index);\n\t}\n\n\t@command('git.stashDrop', { repository: true })\n\tasync stashDrop(repository: Repository): Promise<void> {\n\t\tconst placeHolder = l10n.t('Pick a stash to drop');\n\t\tconst stash = await this.pickStash(repository, placeHolder);\n\n\t\tif (!stash) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._stashDrop(repository, stash);\n\t}\n\n\t@command('git.stashDropAll', { repository: true })\n\tasync stashDropAll(repository: Repository): Promise<void> {\n\t\tconst stashes = await repository.getStashes();\n\n\t\tif (stashes.length === 0) {\n\t\t\twindow.showInformationMessage(l10n.t('There are no stashes in the repository.'));\n\t\t\treturn;\n\t\t}\n\n\t\t// request confirmation for the operation\n\t\tconst yes = l10n.t('Yes');\n\t\tconst question = stashes.length === 1 ?\n\t\t\tl10n.t('Are you sure you want to drop ALL stashes? There is 1 stash that will be subject to pruning, and MAY BE IMPOSSIBLE TO RECOVER.') :\n\t\t\tl10n.t('Are you sure you want to drop ALL stashes? There are {0} stashes that will be subject to pruning, and MAY BE IMPOSSIBLE TO RECOVER.', stashes.length);\n\n\t\tconst result = await window.showWarningMessage(question, { modal: true }, yes);\n\t\tif (result !== yes) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.dropStash();\n\t}\n\n\t@command('git.stashDropEditor')\n\tasync stashDropEditor(uri: Uri): Promise<void> {\n\t\tconst result = await this.getStashFromUri(uri);\n\t\tif (!result) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (await this._stashDrop(result.repository, result.stash)) {\n\t\t\tawait commands.executeCommand('workbench.action.closeActiveEditor');\n\t\t}\n\t}\n\n\tasync _stashDrop(repository: Repository, stash: Stash): Promise<boolean> {\n\t\tconst yes = l10n.t('Yes');\n\t\tconst result = await window.showWarningMessage(\n\t\t\tl10n.t('Are you sure you want to drop the stash: {0}?', stash.description),\n\t\t\t{ modal: true },\n\t\t\tyes\n\t\t);\n\t\tif (result !== yes) {\n\t\t\treturn false;\n\t\t}\n\n\t\tawait repository.dropStash(stash.index);\n\t\treturn true;\n\t}\n\n\t@command('git.stashView', { repository: true })\n\tasync stashView(repository: Repository): Promise<void> {\n\t\tconst placeHolder = l10n.t('Pick a stash to view');\n\t\tconst stash = await this.pickStash(repository, placeHolder);\n\n\t\tif (!stash) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stashChanges = await repository.showStash(stash.index);\n\t\tif (!stashChanges || stashChanges.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// A stash commit can have up to 3 parents:\n\t\t// 1. The first parent is the commit that was HEAD when the stash was created.\n\t\t// 2. The second parent is the commit that represents the index when the stash was created.\n\t\t// 3. The third parent (when present) represents the untracked files when the stash was created.\n\t\tconst stashFirstParentCommit = stash.parents.length > 0 ? stash.parents[0] : `${stash.hash}^`;\n\t\tconst stashUntrackedFilesParentCommit = stash.parents.length === 3 ? stash.parents[2] : undefined;\n\t\tconst stashUntrackedFiles: string[] = [];\n\n\t\tif (stashUntrackedFilesParentCommit) {\n\t\t\tconst untrackedFiles = await repository.getObjectFiles(stashUntrackedFilesParentCommit);\n\t\t\tstashUntrackedFiles.push(...untrackedFiles.map(f => path.join(repository.root, f.file)));\n\t\t}\n\n\t\tconst title = `Git Stash #${stash.index}: ${stash.description}`;\n\t\tconst multiDiffSourceUri = toGitUri(Uri.file(repository.root), `stash@{${stash.index}}`, { scheme: 'git-stash' });\n\n\t\tconst resources: { originalUri: Uri | undefined; modifiedUri: Uri | undefined }[] = [];\n\t\tfor (const change of stashChanges) {\n\t\t\tconst isChangeUntracked = !!stashUntrackedFiles.find(f => pathEquals(f, change.uri.fsPath));\n\t\t\tconst modifiedUriRef = !isChangeUntracked ? stash.hash : stashUntrackedFilesParentCommit ?? stash.hash;\n\n\t\t\tresources.push(toMultiFileDiffEditorUris(change, stashFirstParentCommit, modifiedUriRef));\n\t\t}\n\n\t\tcommands.executeCommand('_workbench.openMultiDiffEditor', { multiDiffSourceUri, title, resources });\n\t}\n\n\tprivate async pickStash(repository: Repository, placeHolder: string): Promise<Stash | undefined> {\n\t\tconst getStashQuickPickItems = async (): Promise<StashItem[] | QuickPickItem[]> => {\n\t\t\tconst stashes = await repository.getStashes();\n\t\t\treturn stashes.length > 0 ?\n\t\t\t\tstashes.map(stash => new StashItem(stash)) :\n\t\t\t\t[{ label: l10n.t('$(info) This repository has no stashes.') }];\n\t\t};\n\n\t\tconst result = await window.showQuickPick<StashItem | QuickPickItem>(getStashQuickPickItems(), { placeHolder });\n\t\treturn result instanceof StashItem ? result.stash : undefined;\n\t}\n\n\tprivate async getStashFromUri(uri: Uri | undefined): Promise<{ repository: Repository; stash: Stash } | undefined> {\n\t\tif (!uri || uri.scheme !== 'git-stash') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst stashUri = fromGitUri(uri);\n\n\t\t// Repository\n\t\tconst repository = this.model.getRepository(stashUri.path);\n\t\tif (!repository) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Stash\n\t\tconst regex = /^stash@{(\\d+)}$/;\n\t\tconst match = regex.exec(stashUri.ref);\n\t\tif (!match) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst [, index] = match;\n\t\tconst stashes = await repository.getStashes();\n\t\tconst stash = stashes.find(stash => stash.index === parseInt(index));\n\t\tif (!stash) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn { repository, stash };\n\t}\n\n\t@command('git.timeline.openDiff', { repository: false })\n\tasync timelineOpenDiff(item: TimelineItem, uri: Uri | undefined, _source: string) {\n\t\tconst cmd = this.resolveTimelineOpenDiffCommand(\n\t\t\titem, uri,\n\t\t\t{\n\t\t\t\tpreserveFocus: true,\n\t\t\t\tpreview: true,\n\t\t\t\tviewColumn: ViewColumn.Active\n\t\t\t},\n\t\t);\n\t\tif (cmd === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn commands.executeCommand(cmd.command, ...(cmd.arguments ?? []));\n\t}\n\n\tresolveTimelineOpenDiffCommand(item: TimelineItem, uri: Uri | undefined, options?: TextDocumentShowOptions): Command | undefined {\n\t\tif (uri === undefined || uri === null || !GitTimelineItem.is(item)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst basename = path.basename(uri.fsPath);\n\n\t\tlet title;\n\t\tif ((item.previousRef === 'HEAD' || item.previousRef === '~') && item.ref === '') {\n\t\t\ttitle = l10n.t('{0} (Working Tree)', basename);\n\t\t}\n\t\telse if (item.previousRef === 'HEAD' && item.ref === '~') {\n\t\t\ttitle = l10n.t('{0} (Index)', basename);\n\t\t} else {\n\t\t\ttitle = l10n.t('{0} ({1}) ↔ {0} ({2})', basename, item.shortPreviousRef, item.shortRef);\n\t\t}\n\n\t\treturn {\n\t\t\tcommand: 'vscode.diff',\n\t\t\ttitle: l10n.t('Open Comparison'),\n\t\t\targuments: [toGitUri(uri, item.previousRef), item.ref === '' ? uri : toGitUri(uri, item.ref), title, options]\n\t\t};\n\t}\n\n\t@command('git.timeline.viewCommit', { repository: false })\n\tasync timelineViewCommit(item: TimelineItem, uri: Uri | undefined, _source: string) {\n\t\tif (!GitTimelineItem.is(item)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cmd = await this._resolveTimelineOpenCommitCommand(\n\t\t\titem, uri,\n\t\t\t{\n\t\t\t\tpreserveFocus: true,\n\t\t\t\tpreview: true,\n\t\t\t\tviewColumn: ViewColumn.Active\n\t\t\t},\n\t\t);\n\t\tif (cmd === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn commands.executeCommand(cmd.command, ...(cmd.arguments ?? []));\n\t}\n\n\tprivate async _resolveTimelineOpenCommitCommand(item: TimelineItem, uri: Uri | undefined, options?: TextDocumentShowOptions): Promise<Command | undefined> {\n\t\tif (uri === undefined || uri === null || !GitTimelineItem.is(item)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst repository = await this.model.getRepository(uri.fsPath);\n\t\tif (!repository) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst commit = await repository.getCommit(item.ref);\n\t\tconst commitParentId = commit.parents.length > 0 ? commit.parents[0] : await repository.getEmptyTree();\n\t\tconst changes = await repository.diffTrees(commitParentId, commit.hash);\n\t\tconst resources = changes.map(c => toMultiFileDiffEditorUris(c, commitParentId, commit.hash));\n\n\t\tconst title = `${item.shortRef} - ${truncate(commit.message)}`;\n\t\tconst multiDiffSourceUri = Uri.from({ scheme: 'scm-history-item', path: `${repository.root}/${commitParentId}..${commit.hash}` });\n\n\t\treturn {\n\t\t\tcommand: '_workbench.openMultiDiffEditor',\n\t\t\ttitle: l10n.t('Open Commit'),\n\t\t\targuments: [{ multiDiffSourceUri, title, resources }, options]\n\t\t};\n\t}\n\n\t@command('git.timeline.copyCommitId', { repository: false })\n\tasync timelineCopyCommitId(item: TimelineItem, _uri: Uri | undefined, _source: string) {\n\t\tif (!GitTimelineItem.is(item)) {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.clipboard.writeText(item.ref);\n\t}\n\n\t@command('git.timeline.copyCommitMessage', { repository: false })\n\tasync timelineCopyCommitMessage(item: TimelineItem, _uri: Uri | undefined, _source: string) {\n\t\tif (!GitTimelineItem.is(item)) {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.clipboard.writeText(item.message);\n\t}\n\n\tprivate _selectedForCompare: { uri: Uri; item: GitTimelineItem } | undefined;\n\n\t@command('git.timeline.selectForCompare', { repository: false })\n\tasync timelineSelectForCompare(item: TimelineItem, uri: Uri | undefined, _source: string) {\n\t\tif (!GitTimelineItem.is(item) || !uri) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._selectedForCompare = { uri, item };\n\t\tawait commands.executeCommand('setContext', 'git.timeline.selectedForCompare', true);\n\t}\n\n\t@command('git.timeline.compareWithSelected', { repository: false })\n\tasync timelineCompareWithSelected(item: TimelineItem, uri: Uri | undefined, _source: string) {\n\t\tif (!GitTimelineItem.is(item) || !uri || !this._selectedForCompare || uri.toString() !== this._selectedForCompare.uri.toString()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { item: selected } = this._selectedForCompare;\n\n\t\tconst basename = path.basename(uri.fsPath);\n\t\tlet leftTitle;\n\t\tif ((selected.previousRef === 'HEAD' || selected.previousRef === '~') && selected.ref === '') {\n\t\t\tleftTitle = l10n.t('{0} (Working Tree)', basename);\n\t\t}\n\t\telse if (selected.previousRef === 'HEAD' && selected.ref === '~') {\n\t\t\tleftTitle = l10n.t('{0} (Index)', basename);\n\t\t} else {\n\t\t\tleftTitle = l10n.t('{0} ({1})', basename, selected.shortRef);\n\t\t}\n\n\t\tlet rightTitle;\n\t\tif ((item.previousRef === 'HEAD' || item.previousRef === '~') && item.ref === '') {\n\t\t\trightTitle = l10n.t('{0} (Working Tree)', basename);\n\t\t}\n\t\telse if (item.previousRef === 'HEAD' && item.ref === '~') {\n\t\t\trightTitle = l10n.t('{0} (Index)', basename);\n\t\t} else {\n\t\t\trightTitle = l10n.t('{0} ({1})', basename, item.shortRef);\n\t\t}\n\n\n\t\tconst title = l10n.t('{0} ↔ {1}', leftTitle, rightTitle);\n\t\tawait commands.executeCommand('vscode.diff', selected.ref === '' ? uri : toGitUri(uri, selected.ref), item.ref === '' ? uri : toGitUri(uri, item.ref), title);\n\t}\n\n\t@command('git.rebaseAbort', { repository: true })\n\tasync rebaseAbort(repository: Repository): Promise<void> {\n\t\tif (repository.rebaseCommit) {\n\t\t\tawait repository.rebaseAbort();\n\t\t} else {\n\t\t\tawait window.showInformationMessage(l10n.t('No rebase in progress.'));\n\t\t}\n\t}\n\n\t@command('git.closeAllDiffEditors', { repository: true })\n\tcloseDiffEditors(repository: Repository): void {\n\t\trepository.closeDiffEditors(undefined, undefined, true);\n\t}\n\n\t@command('git.closeAllUnmodifiedEditors')\n\tcloseUnmodifiedEditors(): void {\n\t\tconst editorTabsToClose: Tab[] = [];\n\n\t\t// Collect all modified files\n\t\tconst modifiedFiles: string[] = [];\n\t\tfor (const repository of this.model.repositories) {\n\t\t\tmodifiedFiles.push(...repository.indexGroup.resourceStates.map(r => r.resourceUri.fsPath));\n\t\t\tmodifiedFiles.push(...repository.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath));\n\t\t\tmodifiedFiles.push(...repository.untrackedGroup.resourceStates.map(r => r.resourceUri.fsPath));\n\t\t\tmodifiedFiles.push(...repository.mergeGroup.resourceStates.map(r => r.resourceUri.fsPath));\n\t\t}\n\n\t\t// Collect all editor tabs that are not dirty and not modified\n\t\tfor (const tab of window.tabGroups.all.map(g => g.tabs).flat()) {\n\t\t\tif (tab.isDirty) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tab.input instanceof TabInputText || tab.input instanceof TabInputNotebook) {\n\t\t\t\tconst { uri } = tab.input;\n\t\t\t\tif (!modifiedFiles.find(p => pathEquals(p, uri.fsPath))) {\n\t\t\t\t\teditorTabsToClose.push(tab);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Close editors\n\t\twindow.tabGroups.close(editorTabsToClose, true);\n\t}\n\n\t@command('git.openRepositoriesInParentFolders')\n\tasync openRepositoriesInParentFolders(): Promise<void> {\n\t\tconst parentRepositories: string[] = [];\n\n\t\tconst title = l10n.t('Open Repositories In Parent Folders');\n\t\tconst placeHolder = l10n.t('Pick a repository to open');\n\n\t\tconst allRepositoriesLabel = l10n.t('All Repositories');\n\t\tconst allRepositoriesQuickPickItem: QuickPickItem = { label: allRepositoriesLabel };\n\t\tconst repositoriesQuickPickItems: QuickPickItem[] = this.model.parentRepositories\n\t\t\t.sort(compareRepositoryLabel).map(r => new RepositoryItem(r));\n\n\t\tconst items = this.model.parentRepositories.length === 1 ? [...repositoriesQuickPickItems] :\n\t\t\t[...repositoriesQuickPickItems, { label: '', kind: QuickPickItemKind.Separator }, allRepositoriesQuickPickItem];\n\n\t\tconst repositoryItem = await window.showQuickPick(items, { title, placeHolder });\n\t\tif (!repositoryItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (repositoryItem === allRepositoriesQuickPickItem) {\n\t\t\t// All Repositories\n\t\t\tparentRepositories.push(...this.model.parentRepositories);\n\t\t} else {\n\t\t\t// One Repository\n\t\t\tparentRepositories.push((repositoryItem as RepositoryItem).path);\n\t\t}\n\n\t\tfor (const parentRepository of parentRepositories) {\n\t\t\tawait this.model.openParentRepository(parentRepository);\n\t\t}\n\t}\n\n\t@command('git.manageUnsafeRepositories')\n\tasync manageUnsafeRepositories(): Promise<void> {\n\t\tconst unsafeRepositories: string[] = [];\n\n\t\tconst quickpick = window.createQuickPick();\n\t\tquickpick.title = l10n.t('Manage Unsafe Repositories');\n\t\tquickpick.placeholder = l10n.t('Pick a repository to mark as safe and open');\n\n\t\tconst allRepositoriesLabel = l10n.t('All Repositories');\n\t\tconst allRepositoriesQuickPickItem: QuickPickItem = { label: allRepositoriesLabel };\n\t\tconst repositoriesQuickPickItems: QuickPickItem[] = this.model.unsafeRepositories\n\t\t\t.sort(compareRepositoryLabel).map(r => new RepositoryItem(r));\n\n\t\tquickpick.items = this.model.unsafeRepositories.length === 1 ? [...repositoriesQuickPickItems] :\n\t\t\t[...repositoriesQuickPickItems, { label: '', kind: QuickPickItemKind.Separator }, allRepositoriesQuickPickItem];\n\n\t\tquickpick.show();\n\t\tconst repositoryItem = await new Promise<RepositoryItem | QuickPickItem | undefined>(\n\t\t\tresolve => {\n\t\t\t\tquickpick.onDidAccept(() => resolve(quickpick.activeItems[0]));\n\t\t\t\tquickpick.onDidHide(() => resolve(undefined));\n\t\t\t});\n\t\tquickpick.hide();\n\n\t\tif (!repositoryItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (repositoryItem.label === allRepositoriesLabel) {\n\t\t\t// All Repositories\n\t\t\tunsafeRepositories.push(...this.model.unsafeRepositories);\n\t\t} else {\n\t\t\t// One Repository\n\t\t\tunsafeRepositories.push((repositoryItem as RepositoryItem).path);\n\t\t}\n\n\t\tfor (const unsafeRepository of unsafeRepositories) {\n\t\t\t// Mark as Safe\n\t\t\tawait this.git.addSafeDirectory(this.model.getUnsafeRepositoryPath(unsafeRepository)!);\n\n\t\t\t// Open Repository\n\t\t\tawait this.model.openRepository(unsafeRepository);\n\t\t\tthis.model.deleteUnsafeRepository(unsafeRepository);\n\t\t}\n\t}\n\n\t@command('git.viewChanges', { repository: true })\n\tasync viewChanges(repository: Repository): Promise<void> {\n\t\tawait this._viewResourceGroupChanges(repository, repository.workingTreeGroup);\n\t}\n\n\t@command('git.viewStagedChanges', { repository: true })\n\tasync viewStagedChanges(repository: Repository): Promise<void> {\n\t\tawait this._viewResourceGroupChanges(repository, repository.indexGroup);\n\t}\n\n\t@command('git.viewUntrackedChanges', { repository: true })\n\tasync viewUnstagedChanges(repository: Repository): Promise<void> {\n\t\tawait this._viewResourceGroupChanges(repository, repository.untrackedGroup);\n\t}\n\n\tprivate async _viewResourceGroupChanges(repository: Repository, resourceGroup: GitResourceGroup): Promise<void> {\n\t\tif (resourceGroup.resourceStates.length === 0) {\n\t\t\tswitch (resourceGroup.id) {\n\t\t\t\tcase 'index':\n\t\t\t\t\twindow.showInformationMessage(l10n.t('The repository does not have any staged changes.'));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'workingTree':\n\t\t\t\t\twindow.showInformationMessage(l10n.t('The repository does not have any changes.'));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'untracked':\n\t\t\t\t\twindow.showInformationMessage(l10n.t('The repository does not have any untracked changes.'));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tawait commands.executeCommand('_workbench.openScmMultiDiffEditor', {\n\t\t\ttitle: `${repository.sourceControl.label}: ${resourceGroup.label}`,\n\t\t\trepositoryUri: Uri.file(repository.root),\n\t\t\tresourceGroupId: resourceGroup.id\n\t\t});\n\t}\n\n\t@command('git.copyCommitId', { repository: true })\n\tasync copyCommitId(repository: Repository, historyItem: SourceControlHistoryItem): Promise<void> {\n\t\tif (!repository || !historyItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.clipboard.writeText(historyItem.id);\n\t}\n\n\t@command('git.copyCommitMessage', { repository: true })\n\tasync copyCommitMessage(repository: Repository, historyItem: SourceControlHistoryItem): Promise<void> {\n\t\tif (!repository || !historyItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.clipboard.writeText(historyItem.message);\n\t}\n\n\t@command('git.viewCommit', { repository: true })\n\tasync viewCommit(repository: Repository, historyItemId: string): Promise<void> {\n\t\tif (!repository || !historyItemId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rootUri = Uri.file(repository.root);\n\t\tconst commit = await repository.getCommit(historyItemId);\n\t\tconst title = `${getCommitShortHash(rootUri, historyItemId)} - ${truncate(commit.message)}`;\n\t\tconst historyItemParentId = commit.parents.length > 0 ? commit.parents[0] : await repository.getEmptyTree();\n\n\t\tconst multiDiffSourceUri = Uri.from({ scheme: 'scm-history-item', path: `${repository.root}/${historyItemParentId}..${historyItemId}` });\n\n\t\tconst changes = await repository.diffTrees(historyItemParentId, historyItemId);\n\t\tconst resources = changes.map(c => toMultiFileDiffEditorUris(c, historyItemParentId, historyItemId));\n\n\t\tawait commands.executeCommand('_workbench.openMultiDiffEditor', { multiDiffSourceUri, title, resources });\n\t}\n\n\t@command('git.copyContentToClipboard')\n\tasync copyContentToClipboard(content: string): Promise<void> {\n\t\tif (typeof content !== 'string') {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.clipboard.writeText(content);\n\t}\n\n\t@command('git.blame.toggleEditorDecoration')\n\ttoggleBlameEditorDecoration(): void {\n\t\tthis._toggleBlameSetting('blame.editorDecoration.enabled');\n\t}\n\n\t@command('git.blame.toggleStatusBarItem')\n\ttoggleBlameStatusBarItem(): void {\n\t\tthis._toggleBlameSetting('blame.statusBarItem.enabled');\n\t}\n\n\tprivate _toggleBlameSetting(setting: string): void {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst enabled = config.get<boolean>(setting) === true;\n\n\t\tconfig.update(setting, !enabled, true);\n\t}\n\n\tprivate createCommand(id: string, key: string, method: Function, options: ScmCommandOptions): (...args: any[]) => any {\n\t\tconst result = (...args: any[]) => {\n\t\t\tlet result: Promise<any>;\n\n\t\t\tif (!options.repository) {\n\t\t\t\tresult = Promise.resolve(method.apply(this, args));\n\t\t\t} else {\n\t\t\t\t// try to guess the repository based on the first argument\n\t\t\t\tconst repository = this.model.getRepository(args[0]);\n\t\t\t\tlet repositoryPromise: Promise<Repository | undefined>;\n\n\t\t\t\tif (repository) {\n\t\t\t\t\trepositoryPromise = Promise.resolve(repository);\n\t\t\t\t} else if (this.model.repositories.length === 1) {\n\t\t\t\t\trepositoryPromise = Promise.resolve(this.model.repositories[0]);\n\t\t\t\t} else {\n\t\t\t\t\trepositoryPromise = this.model.pickRepository();\n\t\t\t\t}\n\n\t\t\t\tresult = repositoryPromise.then(repository => {\n\t\t\t\t\tif (!repository) {\n\t\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.resolve(method.apply(this, [repository, ...args.slice(1)]));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"git.command\" : {\n\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\"command\" : { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"The command id of the command being executed\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('git.command', { command: id });\n\n\t\t\treturn result.catch(err => {\n\t\t\t\tconst options: MessageOptions = {\n\t\t\t\t\tmodal: true\n\t\t\t\t};\n\n\t\t\t\tlet message: string;\n\t\t\t\tlet type: 'error' | 'warning' | 'information' = 'error';\n\n\t\t\t\tconst choices = new Map<string, () => void>();\n\t\t\t\tconst openOutputChannelChoice = l10n.t('Open Git Log');\n\t\t\t\tconst outputChannelLogger = this.logger;\n\t\t\t\tchoices.set(openOutputChannelChoice, () => outputChannelLogger.show());\n\n\t\t\t\tconst showCommandOutputChoice = l10n.t('Show Command Output');\n\t\t\t\tif (err.stderr) {\n\t\t\t\t\tchoices.set(showCommandOutputChoice, async () => {\n\t\t\t\t\t\tconst timestamp = new Date().getTime();\n\t\t\t\t\t\tconst uri = Uri.parse(`git-output:/git-error-${timestamp}`);\n\n\t\t\t\t\t\tlet command = 'git';\n\n\t\t\t\t\t\tif (err.gitArgs) {\n\t\t\t\t\t\t\tcommand = `${command} ${err.gitArgs.join(' ')}`;\n\t\t\t\t\t\t} else if (err.gitCommand) {\n\t\t\t\t\t\t\tcommand = `${command} ${err.gitCommand}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.commandErrors.set(uri, `> ${command}\\n${err.stderr}`);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst doc = await workspace.openTextDocument(uri);\n\t\t\t\t\t\t\tawait window.showTextDocument(doc);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tthis.commandErrors.delete(uri);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tswitch (err.gitErrorCode) {\n\t\t\t\t\tcase GitErrorCodes.DirtyWorkTree:\n\t\t\t\t\t\tmessage = l10n.t('Please clean your repository working tree before checkout.');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.PushRejected:\n\t\t\t\t\t\tmessage = l10n.t('Can\\'t push refs to remote. Try running \"Pull\" first to integrate your changes.');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.ForcePushWithLeaseRejected:\n\t\t\t\t\tcase GitErrorCodes.ForcePushWithLeaseIfIncludesRejected:\n\t\t\t\t\t\tmessage = l10n.t('Can\\'t force push refs to remote. The tip of the remote-tracking branch has been updated since the last checkout. Try running \"Pull\" first to pull the latest changes from the remote branch first.');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.Conflict:\n\t\t\t\t\t\tmessage = l10n.t('There are merge conflicts. Please resolve them before committing your changes.');\n\t\t\t\t\t\ttype = 'warning';\n\t\t\t\t\t\tchoices.clear();\n\t\t\t\t\t\tchoices.set(l10n.t('Show Changes'), () => commands.executeCommand('workbench.view.scm'));\n\t\t\t\t\t\toptions.modal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.StashConflict:\n\t\t\t\t\t\tmessage = l10n.t('There are merge conflicts while applying the stash. Please resolve them before committing your changes.');\n\t\t\t\t\t\ttype = 'warning';\n\t\t\t\t\t\tchoices.clear();\n\t\t\t\t\t\tchoices.set(l10n.t('Show Changes'), () => commands.executeCommand('workbench.view.scm'));\n\t\t\t\t\t\toptions.modal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.AuthenticationFailed: {\n\t\t\t\t\t\tconst regex = /Authentication failed for '(.*)'/i;\n\t\t\t\t\t\tconst match = regex.exec(err.stderr || String(err));\n\n\t\t\t\t\t\tmessage = match\n\t\t\t\t\t\t\t? l10n.t('Failed to authenticate to git remote:\\n\\n{0}', match[1])\n\t\t\t\t\t\t\t: l10n.t('Failed to authenticate to git remote.');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase GitErrorCodes.NoUserNameConfigured:\n\t\t\t\t\tcase GitErrorCodes.NoUserEmailConfigured:\n\t\t\t\t\t\tmessage = l10n.t('Make sure you configure your \"user.name\" and \"user.email\" in git.');\n\t\t\t\t\t\tchoices.set(l10n.t('Learn More'), () => commands.executeCommand('vscode.open', Uri.parse('https://aka.ms/vscode-setup-git')));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.EmptyCommitMessage:\n\t\t\t\t\t\tmessage = l10n.t('Commit operation was cancelled due to empty commit message.');\n\t\t\t\t\t\tchoices.clear();\n\t\t\t\t\t\ttype = 'information';\n\t\t\t\t\t\toptions.modal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.CherryPickEmpty:\n\t\t\t\t\t\tmessage = l10n.t('The changes are already present in the current branch.');\n\t\t\t\t\t\tchoices.clear();\n\t\t\t\t\t\ttype = 'information';\n\t\t\t\t\t\toptions.modal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase GitErrorCodes.CherryPickConflict:\n\t\t\t\t\t\tmessage = l10n.t('There were merge conflicts while cherry picking the changes. Resolve the conflicts before committing them.');\n\t\t\t\t\t\ttype = 'warning';\n\t\t\t\t\t\tchoices.set(l10n.t('Show Changes'), () => commands.executeCommand('workbench.view.scm'));\n\t\t\t\t\t\toptions.modal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tconst hint = (err.stderr || err.message || String(err))\n\t\t\t\t\t\t\t.replace(/^error: /mi, '')\n\t\t\t\t\t\t\t.replace(/^> husky.*$/mi, '')\n\t\t\t\t\t\t\t.split(/[\\r\\n]/)\n\t\t\t\t\t\t\t.filter((line: string) => !!line)\n\t\t\t\t\t\t[0];\n\n\t\t\t\t\t\tmessage = hint\n\t\t\t\t\t\t\t? l10n.t('Git: {0}', hint)\n\t\t\t\t\t\t\t: l10n.t('Git error');\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!message) {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// We explicitly do not await this promise, because we do not\n\t\t\t\t// want the command execution to be stuck waiting for the user\n\t\t\t\t// to take action on the notification.\n\t\t\t\tthis.showErrorNotification(type, message, options, choices);\n\t\t\t});\n\t\t};\n\n\t\t// patch this object, so people can call methods directly\n\t\t(this as any)[key] = result;\n\n\t\treturn result;\n\t}\n\n\tprivate async showErrorNotification(type: 'error' | 'warning' | 'information', message: string, options: MessageOptions, choices: Map<string, () => void>): Promise<void> {\n\t\tlet result: string | undefined;\n\t\tconst allChoices = Array.from(choices.keys());\n\n\t\tswitch (type) {\n\t\t\tcase 'error':\n\t\t\t\tresult = await window.showErrorMessage(message, options, ...allChoices);\n\t\t\t\tbreak;\n\t\t\tcase 'warning':\n\t\t\t\tresult = await window.showWarningMessage(message, options, ...allChoices);\n\t\t\t\tbreak;\n\t\t\tcase 'information':\n\t\t\t\tresult = await window.showInformationMessage(message, options, ...allChoices);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (result) {\n\t\t\tconst resultFn = choices.get(result);\n\n\t\t\tresultFn?.();\n\t\t}\n\t}\n\n\tprivate getSCMResource(uri?: Uri): Resource | undefined {\n\t\turi = uri ? uri : (window.activeTextEditor && window.activeTextEditor.document.uri);\n\n\t\tthis.logger.debug(`[CommandCenter][getSCMResource] git.getSCMResource.uri: ${uri && uri.toString()}`);\n\n\t\tfor (const r of this.model.repositories.map(r => r.root)) {\n\t\t\tthis.logger.debug(`[CommandCenter][getSCMResource] repo root: ${r}`);\n\t\t}\n\n\t\tif (!uri) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (isGitUri(uri)) {\n\t\t\tconst { path } = fromGitUri(uri);\n\t\t\turi = Uri.file(path);\n\t\t}\n\n\t\tif (uri.scheme === 'file') {\n\t\t\tconst uriString = uri.toString();\n\t\t\tconst repository = this.model.getRepository(uri);\n\n\t\t\tif (!repository) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn repository.workingTreeGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString)[0]\n\t\t\t\t|| repository.indexGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString)[0]\n\t\t\t\t|| repository.mergeGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString)[0];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate runByRepository<T>(resource: Uri, fn: (repository: Repository, resource: Uri) => Promise<T>): Promise<T[]>;\n\tprivate runByRepository<T>(resources: Uri[], fn: (repository: Repository, resources: Uri[]) => Promise<T>): Promise<T[]>;\n\tprivate async runByRepository<T>(arg: Uri | Uri[], fn: (repository: Repository, resources: any) => Promise<T>): Promise<T[]> {\n\t\tconst resources = arg instanceof Uri ? [arg] : arg;\n\t\tconst isSingleResource = arg instanceof Uri;\n\n\t\tconst groups = resources.reduce((result, resource) => {\n\t\t\tlet repository = this.model.getRepository(resource);\n\n\t\t\tif (!repository) {\n\t\t\t\tconsole.warn('Could not find git repository for ', resource);\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// Could it be a submodule?\n\t\t\tif (pathEquals(resource.fsPath, repository.root)) {\n\t\t\t\trepository = this.model.getRepositoryForSubmodule(resource) || repository;\n\t\t\t}\n\n\t\t\tconst tuple = result.filter(p => p.repository === repository)[0];\n\n\t\t\tif (tuple) {\n\t\t\t\ttuple.resources.push(resource);\n\t\t\t} else {\n\t\t\t\tresult.push({ repository, resources: [resource] });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}, [] as { repository: Repository; resources: Uri[] }[]);\n\n\t\tconst promises = groups\n\t\t\t.map(({ repository, resources }) => fn(repository as Repository, isSingleResource ? resources[0] : resources));\n\n\t\treturn Promise.all(promises);\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/decorationProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { window, workspace, Uri, Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, ThemeColor, l10n, SourceControlHistoryItemRef } from 'vscode';\nimport * as path from 'path';\nimport { Repository, GitResourceGroup } from './repository';\nimport { Model } from './model';\nimport { debounce } from './decorators';\nimport { filterEvent, dispose, anyEvent, fireEvent, PromiseSource, combinedDisposable, runAndSubscribeEvent } from './util';\nimport { Change, GitErrorCodes, Status } from './api/git';\n\nfunction equalSourceControlHistoryItemRefs(ref1?: SourceControlHistoryItemRef, ref2?: SourceControlHistoryItemRef): boolean {\n\tif (ref1 === ref2) {\n\t\treturn true;\n\t}\n\n\treturn ref1?.id === ref2?.id &&\n\t\tref1?.name === ref2?.name &&\n\t\tref1?.revision === ref2?.revision;\n}\n\nclass GitIgnoreDecorationProvider implements FileDecorationProvider {\n\n\tprivate static Decoration: FileDecoration = { color: new ThemeColor('gitDecoration.ignoredResourceForeground') };\n\n\treadonly onDidChangeFileDecorations: Event<Uri[]>;\n\tprivate queue = new Map<string, { repository: Repository; queue: Map<string, PromiseSource<FileDecoration | undefined>> }>();\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(private model: Model) {\n\t\tthis.onDidChangeFileDecorations = fireEvent(anyEvent<any>(\n\t\t\tfilterEvent(workspace.onDidSaveTextDocument, e => /\\.gitignore$|\\.git\\/info\\/exclude$/.test(e.uri.path)),\n\t\t\tmodel.onDidOpenRepository,\n\t\t\tmodel.onDidCloseRepository\n\t\t));\n\n\t\tthis.disposables.push(window.registerFileDecorationProvider(this));\n\t}\n\n\tasync provideFileDecoration(uri: Uri): Promise<FileDecoration | undefined> {\n\t\tconst repository = this.model.getRepository(uri);\n\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet queueItem = this.queue.get(repository.root);\n\n\t\tif (!queueItem) {\n\t\t\tqueueItem = { repository, queue: new Map<string, PromiseSource<FileDecoration | undefined>>() };\n\t\t\tthis.queue.set(repository.root, queueItem);\n\t\t}\n\n\t\tlet promiseSource = queueItem.queue.get(uri.fsPath);\n\n\t\tif (!promiseSource) {\n\t\t\tpromiseSource = new PromiseSource();\n\t\t\tqueueItem!.queue.set(uri.fsPath, promiseSource);\n\t\t\tthis.checkIgnoreSoon();\n\t\t}\n\n\t\treturn await promiseSource.promise;\n\t}\n\n\t@debounce(500)\n\tprivate checkIgnoreSoon(): void {\n\t\tconst queue = new Map(this.queue.entries());\n\t\tthis.queue.clear();\n\n\t\tfor (const [, item] of queue) {\n\t\t\tconst paths = [...item.queue.keys()];\n\n\t\t\titem.repository.checkIgnore(paths).then(ignoreSet => {\n\t\t\t\tfor (const [path, promiseSource] of item.queue.entries()) {\n\t\t\t\t\tpromiseSource.resolve(ignoreSet.has(path) ? GitIgnoreDecorationProvider.Decoration : undefined);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tif (err.gitErrorCode !== GitErrorCodes.IsInSubmodule) {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t}\n\n\t\t\t\tfor (const [, promiseSource] of item.queue.entries()) {\n\t\t\t\t\tpromiseSource.reject(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t\tthis.queue.clear();\n\t}\n}\n\nclass GitDecorationProvider implements FileDecorationProvider {\n\n\tprivate static SubmoduleDecorationData: FileDecoration = {\n\t\ttooltip: 'Submodule',\n\t\tbadge: 'S',\n\t\tcolor: new ThemeColor('gitDecoration.submoduleResourceForeground')\n\t};\n\n\tprivate readonly _onDidChangeDecorations = new EventEmitter<Uri[]>();\n\treadonly onDidChangeFileDecorations: Event<Uri[]> = this._onDidChangeDecorations.event;\n\n\tprivate disposables: Disposable[] = [];\n\tprivate decorations = new Map<string, FileDecoration>();\n\n\tconstructor(private repository: Repository) {\n\t\tthis.disposables.push(\n\t\t\twindow.registerFileDecorationProvider(this),\n\t\t\trunAndSubscribeEvent(repository.onDidRunGitStatus, () => this.onDidRunGitStatus())\n\t\t);\n\t}\n\n\tprivate onDidRunGitStatus(): void {\n\t\tconst newDecorations = new Map<string, FileDecoration>();\n\n\t\tthis.collectDecorationData(this.repository.indexGroup, newDecorations);\n\t\tthis.collectDecorationData(this.repository.untrackedGroup, newDecorations);\n\t\tthis.collectDecorationData(this.repository.workingTreeGroup, newDecorations);\n\t\tthis.collectDecorationData(this.repository.mergeGroup, newDecorations);\n\t\tthis.collectSubmoduleDecorationData(newDecorations);\n\n\t\tconst uris = new Set([...this.decorations.keys()].concat([...newDecorations.keys()]));\n\t\tthis.decorations = newDecorations;\n\t\tthis._onDidChangeDecorations.fire([...uris.values()].map(value => Uri.parse(value, true)));\n\t}\n\n\tprivate collectDecorationData(group: GitResourceGroup, bucket: Map<string, FileDecoration>): void {\n\t\tfor (const r of group.resourceStates) {\n\t\t\tconst decoration = r.resourceDecoration;\n\n\t\t\tif (decoration) {\n\t\t\t\t// not deleted and has a decoration\n\t\t\t\tbucket.set(r.original.toString(), decoration);\n\n\t\t\t\tif (r.type === Status.DELETED && r.rightUri) {\n\t\t\t\t\tbucket.set(r.rightUri.toString(), decoration);\n\t\t\t\t}\n\n\t\t\t\tif (r.type === Status.INDEX_RENAMED || r.type === Status.INTENT_TO_RENAME) {\n\t\t\t\t\tbucket.set(r.resourceUri.toString(), decoration);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate collectSubmoduleDecorationData(bucket: Map<string, FileDecoration>): void {\n\t\tfor (const submodule of this.repository.submodules) {\n\t\t\tbucket.set(Uri.file(path.join(this.repository.root, submodule.path)).toString(), GitDecorationProvider.SubmoduleDecorationData);\n\t\t}\n\t}\n\n\tprovideFileDecoration(uri: Uri): FileDecoration | undefined {\n\t\treturn this.decorations.get(uri.toString());\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n}\n\nclass GitIncomingChangesFileDecorationProvider implements FileDecorationProvider {\n\n\tprivate readonly _onDidChangeDecorations = new EventEmitter<Uri[]>();\n\treadonly onDidChangeFileDecorations: Event<Uri[]> = this._onDidChangeDecorations.event;\n\n\tprivate _currentHistoryItemRef: SourceControlHistoryItemRef | undefined;\n\tprivate _currentHistoryItemRemoteRef: SourceControlHistoryItemRef | undefined;\n\n\tprivate _decorations = new Map<string, FileDecoration>();\n\tprivate readonly disposables: Disposable[] = [];\n\n\tconstructor(private readonly repository: Repository) {\n\t\tthis.disposables.push(\n\t\t\twindow.registerFileDecorationProvider(this),\n\t\t\trunAndSubscribeEvent(repository.historyProvider.onDidChangeCurrentHistoryItemRefs, () => this.onDidChangeCurrentHistoryItemRefs())\n\t\t);\n\t}\n\n\tprivate async onDidChangeCurrentHistoryItemRefs(): Promise<void> {\n\t\tconst historyProvider = this.repository.historyProvider;\n\t\tconst currentHistoryItemRef = historyProvider.currentHistoryItemRef;\n\t\tconst currentHistoryItemRemoteRef = historyProvider.currentHistoryItemRemoteRef;\n\n\t\tif (equalSourceControlHistoryItemRefs(this._currentHistoryItemRef, currentHistoryItemRef) &&\n\t\t\tequalSourceControlHistoryItemRefs(this._currentHistoryItemRemoteRef, currentHistoryItemRemoteRef)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst decorations = new Map<string, FileDecoration>();\n\t\tawait this.collectIncomingChangesFileDecorations(decorations);\n\t\tconst uris = new Set([...this._decorations.keys()].concat([...decorations.keys()]));\n\n\t\tthis._decorations = decorations;\n\t\tthis._currentHistoryItemRef = currentHistoryItemRef;\n\t\tthis._currentHistoryItemRemoteRef = currentHistoryItemRemoteRef;\n\n\t\tthis._onDidChangeDecorations.fire([...uris.values()].map(value => Uri.parse(value, true)));\n\t}\n\n\tprivate async collectIncomingChangesFileDecorations(bucket: Map<string, FileDecoration>): Promise<void> {\n\t\tfor (const change of await this.getIncomingChanges()) {\n\t\t\tswitch (change.status) {\n\t\t\t\tcase Status.INDEX_ADDED:\n\t\t\t\t\tbucket.set(change.uri.toString(), {\n\t\t\t\t\t\tbadge: '↓A',\n\t\t\t\t\t\ttooltip: l10n.t('Incoming Changes (added)'),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase Status.DELETED:\n\t\t\t\t\tbucket.set(change.uri.toString(), {\n\t\t\t\t\t\tbadge: '↓D',\n\t\t\t\t\t\ttooltip: l10n.t('Incoming Changes (deleted)'),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase Status.INDEX_RENAMED:\n\t\t\t\t\tbucket.set(change.originalUri.toString(), {\n\t\t\t\t\t\tbadge: '↓R',\n\t\t\t\t\t\ttooltip: l10n.t('Incoming Changes (renamed)'),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase Status.MODIFIED:\n\t\t\t\t\tbucket.set(change.uri.toString(), {\n\t\t\t\t\t\tbadge: '↓M',\n\t\t\t\t\t\ttooltip: l10n.t('Incoming Changes (modified)'),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: {\n\t\t\t\t\tbucket.set(change.uri.toString(), {\n\t\t\t\t\t\tbadge: '↓~',\n\t\t\t\t\t\ttooltip: l10n.t('Incoming Changes'),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async getIncomingChanges(): Promise<Change[]> {\n\t\ttry {\n\t\t\tconst historyProvider = this.repository.historyProvider;\n\t\t\tconst currentHistoryItemRef = historyProvider.currentHistoryItemRef;\n\t\t\tconst currentHistoryItemRemoteRef = historyProvider.currentHistoryItemRemoteRef;\n\n\t\t\tif (!currentHistoryItemRef || !currentHistoryItemRemoteRef) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst ancestor = await historyProvider.resolveHistoryItemRefsCommonAncestor([currentHistoryItemRef.id, currentHistoryItemRemoteRef.id]);\n\t\t\tif (!ancestor) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst changes = await this.repository.diffBetween(ancestor, currentHistoryItemRemoteRef.id);\n\t\t\treturn changes;\n\t\t} catch (err) {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprovideFileDecoration(uri: Uri): FileDecoration | undefined {\n\t\treturn this._decorations.get(uri.toString());\n\t}\n\n\tdispose(): void {\n\t\tdispose(this.disposables);\n\t}\n}\n\nexport class GitDecorations {\n\n\tprivate enabled = false;\n\tprivate disposables: Disposable[] = [];\n\tprivate modelDisposables: Disposable[] = [];\n\tprivate providers = new Map<Repository, Disposable>();\n\n\tconstructor(private model: Model) {\n\t\tthis.disposables.push(new GitIgnoreDecorationProvider(model));\n\n\t\tconst onEnablementChange = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.decorations.enabled'));\n\t\tonEnablementChange(this.update, this, this.disposables);\n\t\tthis.update();\n\t}\n\n\tprivate update(): void {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst enabled = config.get<boolean>('decorations.enabled') === true;\n\t\tif (this.enabled === enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (enabled) {\n\t\t\tthis.enable();\n\t\t} else {\n\t\t\tthis.disable();\n\t\t}\n\n\t\tthis.enabled = enabled;\n\t}\n\n\tprivate enable(): void {\n\t\tthis.model.onDidOpenRepository(this.onDidOpenRepository, this, this.modelDisposables);\n\t\tthis.model.onDidCloseRepository(this.onDidCloseRepository, this, this.modelDisposables);\n\t\tthis.model.repositories.forEach(this.onDidOpenRepository, this);\n\t}\n\n\tprivate disable(): void {\n\t\tthis.modelDisposables = dispose(this.modelDisposables);\n\t\tthis.providers.forEach(value => value.dispose());\n\t\tthis.providers.clear();\n\t}\n\n\tprivate onDidOpenRepository(repository: Repository): void {\n\t\tconst providers = combinedDisposable([\n\t\t\tnew GitDecorationProvider(repository),\n\t\t\tnew GitIncomingChangesFileDecorationProvider(repository)\n\t\t]);\n\n\t\tthis.providers.set(repository, providers);\n\t}\n\n\tprivate onDidCloseRepository(repository: Repository): void {\n\t\tconst provider = this.providers.get(repository);\n\n\t\tif (provider) {\n\t\t\tprovider.dispose();\n\t\t\tthis.providers.delete(repository);\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.disable();\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/decorators.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { done } from './util';\n\nfunction decorate(decorator: (fn: Function, key: string) => Function): Function {\n\treturn (_target: any, key: string, descriptor: any) => {\n\t\tlet fnKey: string | null = null;\n\t\tlet fn: Function | null = null;\n\n\t\tif (typeof descriptor.value === 'function') {\n\t\t\tfnKey = 'value';\n\t\t\tfn = descriptor.value;\n\t\t} else if (typeof descriptor.get === 'function') {\n\t\t\tfnKey = 'get';\n\t\t\tfn = descriptor.get;\n\t\t}\n\n\t\tif (!fn || !fnKey) {\n\t\t\tthrow new Error('not supported');\n\t\t}\n\n\t\tdescriptor[fnKey] = decorator(fn, key);\n\t};\n}\n\nfunction _memoize(fn: Function, key: string): Function {\n\tconst memoizeKey = `$memoize$${key}`;\n\n\treturn function (this: any, ...args: any[]) {\n\t\tif (!this.hasOwnProperty(memoizeKey)) {\n\t\t\tObject.defineProperty(this, memoizeKey, {\n\t\t\t\tconfigurable: false,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: false,\n\t\t\t\tvalue: fn.apply(this, args)\n\t\t\t});\n\t\t}\n\n\t\treturn this[memoizeKey];\n\t};\n}\n\nexport const memoize = decorate(_memoize);\n\nfunction _throttle<T>(fn: Function, key: string): Function {\n\tconst currentKey = `$throttle$current$${key}`;\n\tconst nextKey = `$throttle$next$${key}`;\n\n\tconst trigger = function (this: any, ...args: any[]) {\n\t\tif (this[nextKey]) {\n\t\t\treturn this[nextKey];\n\t\t}\n\n\t\tif (this[currentKey]) {\n\t\t\tthis[nextKey] = done(this[currentKey]).then(() => {\n\t\t\t\tthis[nextKey] = undefined;\n\t\t\t\treturn trigger.apply(this, args);\n\t\t\t});\n\n\t\t\treturn this[nextKey];\n\t\t}\n\n\t\tthis[currentKey] = fn.apply(this, args) as Promise<T>;\n\n\t\tconst clear = () => this[currentKey] = undefined;\n\t\tdone(this[currentKey]).then(clear, clear);\n\n\t\treturn this[currentKey];\n\t};\n\n\treturn trigger;\n}\n\nexport const throttle = decorate(_throttle);\n\nfunction _sequentialize(fn: Function, key: string): Function {\n\tconst currentKey = `__$sequence$${key}`;\n\n\treturn function (this: any, ...args: any[]) {\n\t\tconst currentPromise = this[currentKey] as Promise<any> || Promise.resolve(null);\n\t\tconst run = async () => await fn.apply(this, args);\n\t\tthis[currentKey] = currentPromise.then(run, run);\n\t\treturn this[currentKey];\n\t};\n}\n\nexport const sequentialize = decorate(_sequentialize);\n\nexport function debounce(delay: number): Function {\n\treturn decorate((fn, key) => {\n\t\tconst timerKey = `$debounce$${key}`;\n\n\t\treturn function (this: any, ...args: any[]) {\n\t\t\tclearTimeout(this[timerKey]);\n\t\t\tthis[timerKey] = setTimeout(() => fn.apply(this, args), delay);\n\t\t};\n\t});\n}\n"
  },
  {
    "path": "extensions/git/src/diagnostics.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CodeAction, CodeActionKind, CodeActionProvider, Diagnostic, DiagnosticCollection, DiagnosticSeverity, Disposable, Range, Selection, TextDocument, Uri, WorkspaceEdit, l10n, languages, workspace } from 'vscode';\nimport { mapEvent, filterEvent, dispose } from './util';\nimport { Model } from './model';\n\nexport enum DiagnosticCodes {\n\tempty_message = 'empty_message',\n\tline_length = 'line_length'\n}\n\nexport class GitCommitInputBoxDiagnosticsManager {\n\n\tprivate readonly diagnostics: DiagnosticCollection;\n\tprivate readonly severity = DiagnosticSeverity.Warning;\n\tprivate readonly disposables: Disposable[] = [];\n\n\tconstructor(private readonly model: Model) {\n\t\tthis.diagnostics = languages.createDiagnosticCollection();\n\n\t\tthis.migrateInputValidationSettings()\n\t\t\t.then(() => {\n\t\t\t\tmapEvent(filterEvent(workspace.onDidChangeTextDocument, e => e.document.uri.scheme === 'vscode-scm'), e => e.document)(this.onDidChangeTextDocument, this, this.disposables);\n\t\t\t\tfilterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.inputValidation') || e.affectsConfiguration('git.inputValidationLength') || e.affectsConfiguration('git.inputValidationSubjectLength'))(this.onDidChangeConfiguration, this, this.disposables);\n\t\t\t});\n\t}\n\n\tpublic getDiagnostics(uri: Uri): ReadonlyArray<Diagnostic> {\n\t\treturn this.diagnostics.get(uri) ?? [];\n\t}\n\n\tprivate async migrateInputValidationSettings(): Promise<void> {\n\t\ttry {\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tconst inputValidation = config.inspect<'always' | 'warn' | 'off' | boolean>('inputValidation');\n\n\t\t\tif (inputValidation === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Workspace setting\n\t\t\tif (typeof inputValidation.workspaceValue === 'string') {\n\t\t\t\tawait config.update('inputValidation', inputValidation.workspaceValue !== 'off', false);\n\t\t\t}\n\n\t\t\t// User setting\n\t\t\tif (typeof inputValidation.globalValue === 'string') {\n\t\t\t\tawait config.update('inputValidation', inputValidation.workspaceValue !== 'off', true);\n\t\t\t}\n\t\t} catch { }\n\t}\n\n\tprivate onDidChangeConfiguration(): void {\n\t\tfor (const repository of this.model.repositories) {\n\t\t\tthis.onDidChangeTextDocument(repository.inputBox.document);\n\t\t}\n\t}\n\n\tprivate onDidChangeTextDocument(document: TextDocument): void {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst inputValidation = config.get<boolean>('inputValidation', false);\n\t\tif (!inputValidation) {\n\t\t\tthis.diagnostics.set(document.uri, undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tif (/^\\s+$/.test(document.getText())) {\n\t\t\tconst documentRange = new Range(document.lineAt(0).range.start, document.lineAt(document.lineCount - 1).range.end);\n\t\t\tconst diagnostic = new Diagnostic(documentRange, l10n.t('Current commit message only contains whitespace characters'), this.severity);\n\t\t\tdiagnostic.code = DiagnosticCodes.empty_message;\n\n\t\t\tthis.diagnostics.set(document.uri, [diagnostic]);\n\t\t\treturn;\n\t\t}\n\n\t\tconst diagnostics: Diagnostic[] = [];\n\t\tconst inputValidationLength = config.get<number>('inputValidationLength', 50);\n\t\tconst inputValidationSubjectLength = config.get<number | undefined>('inputValidationSubjectLength', undefined);\n\n\t\tfor (let index = 0; index < document.lineCount; index++) {\n\t\t\tconst line = document.lineAt(index);\n\t\t\tconst threshold = index === 0 ? inputValidationSubjectLength ?? inputValidationLength : inputValidationLength;\n\n\t\t\tif (line.text.length > threshold) {\n\t\t\t\tconst diagnostic = new Diagnostic(line.range, l10n.t('{0} characters over {1} in current line', line.text.length - threshold, threshold), this.severity);\n\t\t\t\tdiagnostic.code = DiagnosticCodes.line_length;\n\n\t\t\t\tdiagnostics.push(diagnostic);\n\t\t\t}\n\t\t}\n\n\t\tthis.diagnostics.set(document.uri, diagnostics);\n\t}\n\n\tdispose() {\n\t\tdispose(this.disposables);\n\t}\n}\n\nexport class GitCommitInputBoxCodeActionsProvider implements CodeActionProvider {\n\n\tprivate readonly disposables: Disposable[] = [];\n\n\tconstructor(private readonly diagnosticsManager: GitCommitInputBoxDiagnosticsManager) {\n\t\tthis.disposables.push(languages.registerCodeActionsProvider({ scheme: 'vscode-scm' }, this));\n\t}\n\n\tprovideCodeActions(document: TextDocument, range: Range | Selection): CodeAction[] {\n\t\tconst codeActions: CodeAction[] = [];\n\t\tconst diagnostics = this.diagnosticsManager.getDiagnostics(document.uri);\n\t\tconst wrapAllLinesCodeAction = this.getWrapAllLinesCodeAction(document, diagnostics);\n\n\t\tfor (const diagnostic of diagnostics) {\n\t\t\tif (!diagnostic.range.contains(range)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tswitch (diagnostic.code) {\n\t\t\t\tcase DiagnosticCodes.empty_message: {\n\t\t\t\t\tconst workspaceEdit = new WorkspaceEdit();\n\t\t\t\t\tworkspaceEdit.delete(document.uri, diagnostic.range);\n\n\t\t\t\t\tconst codeAction = new CodeAction(l10n.t('Clear whitespace characters'), CodeActionKind.QuickFix);\n\t\t\t\t\tcodeAction.diagnostics = [diagnostic];\n\t\t\t\t\tcodeAction.edit = workspaceEdit;\n\t\t\t\t\tcodeActions.push(codeAction);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase DiagnosticCodes.line_length: {\n\t\t\t\t\tconst workspaceEdit = this.getWrapLineWorkspaceEdit(document, diagnostic.range);\n\n\t\t\t\t\tconst codeAction = new CodeAction(l10n.t('Hard wrap line'), CodeActionKind.QuickFix);\n\t\t\t\t\tcodeAction.diagnostics = [diagnostic];\n\t\t\t\t\tcodeAction.edit = workspaceEdit;\n\t\t\t\t\tcodeActions.push(codeAction);\n\n\t\t\t\t\tif (wrapAllLinesCodeAction) {\n\t\t\t\t\t\twrapAllLinesCodeAction.diagnostics = [diagnostic];\n\t\t\t\t\t\tcodeActions.push(wrapAllLinesCodeAction);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn codeActions;\n\t}\n\n\tprivate getWrapLineWorkspaceEdit(document: TextDocument, range: Range): WorkspaceEdit {\n\t\tconst lineSegments = this.wrapTextDocumentLine(document, range.start.line);\n\n\t\tconst workspaceEdit = new WorkspaceEdit();\n\t\tworkspaceEdit.replace(document.uri, range, lineSegments.join('\\n'));\n\n\t\treturn workspaceEdit;\n\t}\n\n\tprivate getWrapAllLinesCodeAction(document: TextDocument, diagnostics: readonly Diagnostic[]): CodeAction | undefined {\n\t\tconst lineLengthDiagnostics = diagnostics.filter(d => d.code === DiagnosticCodes.line_length);\n\t\tif (lineLengthDiagnostics.length < 2) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst wrapAllLinesCodeAction = new CodeAction(l10n.t('Hard wrap all lines'), CodeActionKind.QuickFix);\n\t\twrapAllLinesCodeAction.edit = this.getWrapAllLinesWorkspaceEdit(document, lineLengthDiagnostics);\n\n\t\treturn wrapAllLinesCodeAction;\n\t}\n\n\tprivate getWrapAllLinesWorkspaceEdit(document: TextDocument, diagnostics: Diagnostic[]): WorkspaceEdit {\n\t\tconst workspaceEdit = new WorkspaceEdit();\n\n\t\tfor (const diagnostic of diagnostics) {\n\t\t\tconst lineSegments = this.wrapTextDocumentLine(document, diagnostic.range.start.line);\n\t\t\tworkspaceEdit.replace(document.uri, diagnostic.range, lineSegments.join('\\n'));\n\t\t}\n\n\t\treturn workspaceEdit;\n\t}\n\n\tprivate wrapTextDocumentLine(document: TextDocument, line: number): string[] {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst inputValidationLength = config.get<number>('inputValidationLength', 50);\n\t\tconst inputValidationSubjectLength = config.get<number | undefined>('inputValidationSubjectLength', undefined);\n\t\tconst lineLengthThreshold = line === 0 ? inputValidationSubjectLength ?? inputValidationLength : inputValidationLength;\n\n\t\tconst lineSegments: string[] = [];\n\t\tconst lineText = document.lineAt(line).text.trim();\n\n\t\tlet position = 0;\n\t\twhile (lineText.length - position > lineLengthThreshold) {\n\t\t\tconst lastSpaceBeforeThreshold = lineText.lastIndexOf(' ', position + lineLengthThreshold);\n\n\t\t\tif (lastSpaceBeforeThreshold !== -1 && lastSpaceBeforeThreshold > position) {\n\t\t\t\tlineSegments.push(lineText.substring(position, lastSpaceBeforeThreshold));\n\t\t\t\tposition = lastSpaceBeforeThreshold + 1;\n\t\t\t} else {\n\t\t\t\t// Find first space after threshold\n\t\t\t\tconst firstSpaceAfterThreshold = lineText.indexOf(' ', position + lineLengthThreshold);\n\t\t\t\tif (firstSpaceAfterThreshold !== -1) {\n\t\t\t\t\tlineSegments.push(lineText.substring(position, firstSpaceAfterThreshold));\n\t\t\t\t\tposition = firstSpaceAfterThreshold + 1;\n\t\t\t\t} else {\n\t\t\t\t\tlineSegments.push(lineText.substring(position));\n\t\t\t\t\tposition = lineText.length;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (position < lineText.length) {\n\t\t\tlineSegments.push(lineText.substring(position));\n\t\t}\n\n\t\treturn lineSegments;\n\t}\n\n\tdispose() {\n\t\tdispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/editSessionIdentityProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport { RefType } from './api/git';\nimport { Model } from './model';\n\nexport class GitEditSessionIdentityProvider implements vscode.EditSessionIdentityProvider, vscode.Disposable {\n\n\tprivate providerRegistration: vscode.Disposable;\n\n\tconstructor(private model: Model) {\n\t\tthis.providerRegistration = vscode.workspace.registerEditSessionIdentityProvider('file', this);\n\n\t\tvscode.workspace.onWillCreateEditSessionIdentity((e) => {\n\t\t\te.waitUntil(this._onWillCreateEditSessionIdentity(e.workspaceFolder));\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.providerRegistration.dispose();\n\t}\n\n\tasync provideEditSessionIdentity(workspaceFolder: vscode.WorkspaceFolder, token: vscode.CancellationToken): Promise<string | undefined> {\n\t\tawait this.model.openRepository(path.dirname(workspaceFolder.uri.fsPath));\n\n\t\tconst repository = this.model.getRepository(workspaceFolder.uri);\n\t\tawait repository?.status();\n\n\t\tif (!repository || !repository?.HEAD?.upstream) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst remoteUrl = repository.remotes.find((remote) => remote.name === repository.HEAD?.upstream?.remote)?.pushUrl?.replace(/^(git@[^\\/:]+)(:)/i, 'ssh://$1/');\n\t\tconst remote = remoteUrl ? await vscode.workspace.getCanonicalUri(vscode.Uri.parse(remoteUrl), { targetScheme: 'https' }, token) : null;\n\n\t\treturn JSON.stringify({\n\t\t\tremote: remote?.toString() ?? remoteUrl,\n\t\t\tref: repository.HEAD?.upstream?.name ?? null,\n\t\t\tsha: repository.HEAD?.commit ?? null,\n\t\t});\n\t}\n\n\tprovideEditSessionIdentityMatch(identity1: string, identity2: string): vscode.EditSessionIdentityMatch {\n\t\ttry {\n\t\t\tconst normalizedIdentity1 = normalizeEditSessionIdentity(identity1);\n\t\t\tconst normalizedIdentity2 = normalizeEditSessionIdentity(identity2);\n\n\t\t\tif (normalizedIdentity1.remote === normalizedIdentity2.remote &&\n\t\t\t\tnormalizedIdentity1.ref === normalizedIdentity2.ref &&\n\t\t\t\tnormalizedIdentity1.sha === normalizedIdentity2.sha) {\n\t\t\t\t// This is a perfect match\n\t\t\t\treturn vscode.EditSessionIdentityMatch.Complete;\n\t\t\t} else if (normalizedIdentity1.remote === normalizedIdentity2.remote &&\n\t\t\t\tnormalizedIdentity1.ref === normalizedIdentity2.ref &&\n\t\t\t\tnormalizedIdentity1.sha !== normalizedIdentity2.sha) {\n\t\t\t\t// Same branch and remote but different SHA\n\t\t\t\treturn vscode.EditSessionIdentityMatch.Partial;\n\t\t\t} else {\n\t\t\t\treturn vscode.EditSessionIdentityMatch.None;\n\t\t\t}\n\t\t} catch (ex) {\n\t\t\treturn vscode.EditSessionIdentityMatch.Partial;\n\t\t}\n\t}\n\n\tprivate async _onWillCreateEditSessionIdentity(workspaceFolder: vscode.WorkspaceFolder): Promise<void> {\n\t\tawait this._doPublish(workspaceFolder);\n\t}\n\n\tprivate async _doPublish(workspaceFolder: vscode.WorkspaceFolder) {\n\t\tawait this.model.openRepository(path.dirname(workspaceFolder.uri.fsPath));\n\n\t\tconst repository = this.model.getRepository(workspaceFolder.uri);\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait repository.status();\n\n\t\t// If this branch hasn't been published to the remote yet,\n\t\t// ensure that it is published before Continue On is invoked\n\t\tif (!repository.HEAD?.upstream && repository.HEAD?.type === RefType.Head) {\n\n\t\t\tconst publishBranch = vscode.l10n.t('Publish Branch');\n\t\t\tconst selection = await vscode.window.showInformationMessage(\n\t\t\t\tvscode.l10n.t('The current branch is not published to the remote. Would you like to publish it to access your changes elsewhere?'),\n\t\t\t\t{ modal: true },\n\t\t\t\tpublishBranch\n\t\t\t);\n\t\t\tif (selection !== publishBranch) {\n\t\t\t\tthrow new vscode.CancellationError();\n\t\t\t}\n\n\t\t\tawait vscode.commands.executeCommand('git.publish');\n\t\t}\n\t}\n}\n\nfunction normalizeEditSessionIdentity(identity: string) {\n\tlet { remote, ref, sha } = JSON.parse(identity);\n\n\tif (typeof remote === 'string' && remote.endsWith('.git')) {\n\t\tremote = remote.slice(0, remote.length - 4);\n\t}\n\n\treturn {\n\t\tremote,\n\t\tref,\n\t\tsha\n\t};\n}\n"
  },
  {
    "path": "extensions/git/src/emoji.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\nimport { workspace, Uri } from 'vscode';\nimport { getExtensionContext } from './main';\nimport { TextDecoder } from 'util';\n\nconst emojiRegex = /:([-+_a-z0-9]+):/g;\n\nlet emojiMap: Record<string, string> | undefined;\nlet emojiMapPromise: Promise<void> | undefined;\n\nexport async function ensureEmojis() {\n\tif (emojiMap === undefined) {\n\t\tif (emojiMapPromise === undefined) {\n\t\t\temojiMapPromise = loadEmojiMap();\n\t\t}\n\t\tawait emojiMapPromise;\n\t}\n}\n\nasync function loadEmojiMap() {\n\tconst context = getExtensionContext();\n\tconst uri = (Uri as any).joinPath(context.extensionUri, 'resources', 'emojis.json');\n\temojiMap = JSON.parse(new TextDecoder('utf8').decode(await workspace.fs.readFile(uri)));\n}\n\nexport function emojify(message: string) {\n\tif (emojiMap === undefined) {\n\t\treturn message;\n\t}\n\n\treturn message.replace(emojiRegex, (s, code) => {\n\t\treturn emojiMap?.[code] || s;\n\t});\n}\n"
  },
  {
    "path": "extensions/git/src/fileSystemProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { workspace, Uri, Disposable, Event, EventEmitter, window, FileSystemProvider, FileChangeEvent, FileStat, FileType, FileChangeType, FileSystemError, LogOutputChannel } from 'vscode';\nimport { debounce, throttle } from './decorators';\nimport { fromGitUri, toGitUri } from './uri';\nimport { Model, ModelChangeEvent, OriginalResourceChangeEvent } from './model';\nimport { filterEvent, eventToPromise, isDescendant, pathEquals, EmptyDisposable } from './util';\nimport { Repository } from './repository';\n\ninterface CacheRow {\n\turi: Uri;\n\ttimestamp: number;\n}\n\nconst THREE_MINUTES = 1000 * 60 * 3;\nconst FIVE_MINUTES = 1000 * 60 * 5;\n\nfunction sanitizeRef(ref: string, path: string, submoduleOf: string | undefined, repository: Repository): string {\n\tif (ref === '~') {\n\t\tconst fileUri = Uri.file(path);\n\t\tconst uriString = fileUri.toString();\n\t\tconst [indexStatus] = repository.indexGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString);\n\t\treturn indexStatus ? '' : 'HEAD';\n\t}\n\n\tif (/^~\\d$/.test(ref)) {\n\t\treturn `:${ref[1]}`;\n\t}\n\n\t// Submodule HEAD\n\tif (submoduleOf && (ref === 'index' || ref === 'wt')) {\n\t\treturn 'HEAD';\n\t}\n\n\treturn ref;\n}\n\nexport class GitFileSystemProvider implements FileSystemProvider {\n\n\tprivate _onDidChangeFile = new EventEmitter<FileChangeEvent[]>();\n\treadonly onDidChangeFile: Event<FileChangeEvent[]> = this._onDidChangeFile.event;\n\n\tprivate changedRepositoryRoots = new Set<string>();\n\tprivate cache = new Map<string, CacheRow>();\n\tprivate mtime = new Date().getTime();\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(private readonly model: Model, private readonly logger: LogOutputChannel) {\n\t\tthis.disposables.push(\n\t\t\tmodel.onDidChangeRepository(this.onDidChangeRepository, this),\n\t\t\tmodel.onDidChangeOriginalResource(this.onDidChangeOriginalResource, this),\n\t\t\tworkspace.registerFileSystemProvider('git', this, { isReadonly: true, isCaseSensitive: true }),\n\t\t);\n\n\t\tsetInterval(() => this.cleanup(), FIVE_MINUTES);\n\t}\n\n\tprivate onDidChangeRepository({ repository }: ModelChangeEvent): void {\n\t\tthis.changedRepositoryRoots.add(repository.root);\n\t\tthis.eventuallyFireChangeEvents();\n\t}\n\n\tprivate onDidChangeOriginalResource({ uri }: OriginalResourceChangeEvent): void {\n\t\tif (uri.scheme !== 'file') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst diffOriginalResourceUri = toGitUri(uri, '~',);\n\t\tconst quickDiffOriginalResourceUri = toGitUri(uri, '', { replaceFileExtension: true });\n\n\t\tthis.mtime = new Date().getTime();\n\t\tthis._onDidChangeFile.fire([\n\t\t\t{ type: FileChangeType.Changed, uri: diffOriginalResourceUri },\n\t\t\t{ type: FileChangeType.Changed, uri: quickDiffOriginalResourceUri }\n\t\t]);\n\t}\n\n\t@debounce(1100)\n\tprivate eventuallyFireChangeEvents(): void {\n\t\tthis.fireChangeEvents();\n\t}\n\n\t@throttle\n\tprivate async fireChangeEvents(): Promise<void> {\n\t\tif (!window.state.focused) {\n\t\t\tconst onDidFocusWindow = filterEvent(window.onDidChangeWindowState, e => e.focused);\n\t\t\tawait eventToPromise(onDidFocusWindow);\n\t\t}\n\n\t\tconst events: FileChangeEvent[] = [];\n\n\t\tfor (const { uri } of this.cache.values()) {\n\t\t\tconst fsPath = uri.fsPath;\n\n\t\t\tfor (const root of this.changedRepositoryRoots) {\n\t\t\t\tif (isDescendant(root, fsPath)) {\n\t\t\t\t\tevents.push({ type: FileChangeType.Changed, uri });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (events.length > 0) {\n\t\t\tthis.mtime = new Date().getTime();\n\t\t\tthis._onDidChangeFile.fire(events);\n\t\t}\n\n\t\tthis.changedRepositoryRoots.clear();\n\t}\n\n\tprivate cleanup(): void {\n\t\tconst now = new Date().getTime();\n\t\tconst cache = new Map<string, CacheRow>();\n\n\t\tfor (const row of this.cache.values()) {\n\t\t\tconst { path } = fromGitUri(row.uri);\n\t\t\tconst isOpen = workspace.textDocuments\n\t\t\t\t.filter(d => d.uri.scheme === 'file')\n\t\t\t\t.some(d => pathEquals(d.uri.fsPath, path));\n\n\t\t\tif (isOpen || now - row.timestamp < THREE_MINUTES) {\n\t\t\t\tcache.set(row.uri.toString(), row);\n\t\t\t} else {\n\t\t\t\t// TODO: should fire delete events?\n\t\t\t}\n\t\t}\n\n\t\tthis.cache = cache;\n\t}\n\n\twatch(): Disposable {\n\t\treturn EmptyDisposable;\n\t}\n\n\tasync stat(uri: Uri): Promise<FileStat> {\n\t\tawait this.model.isInitialized;\n\n\t\tconst { submoduleOf, path, ref } = fromGitUri(uri);\n\t\tconst repository = submoduleOf ? this.model.getRepository(submoduleOf) : this.model.getRepository(uri);\n\t\tif (!repository) {\n\t\t\tthis.logger.warn(`[GitFileSystemProvider][stat] Repository not found - ${uri.toString()}`);\n\t\t\tthrow FileSystemError.FileNotFound();\n\t\t}\n\n\t\ttry {\n\t\t\tconst details = await repository.getObjectDetails(sanitizeRef(ref, path, submoduleOf, repository), path);\n\t\t\treturn { type: FileType.File, size: details.size, mtime: this.mtime, ctime: 0 };\n\t\t} catch {\n\t\t\t// Empty tree\n\t\t\tif (ref === await repository.getEmptyTree()) {\n\t\t\t\tthis.logger.warn(`[GitFileSystemProvider][stat] Empty tree - ${uri.toString()}`);\n\t\t\t\treturn { type: FileType.File, size: 0, mtime: this.mtime, ctime: 0 };\n\t\t\t}\n\n\t\t\t// File does not exist in git. This could be because the file is untracked or ignored\n\t\t\tthis.logger.warn(`[GitFileSystemProvider][stat] File not found - ${uri.toString()}`);\n\t\t\tthrow FileSystemError.FileNotFound();\n\t\t}\n\t}\n\n\treadDirectory(): Thenable<[string, FileType][]> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n\tcreateDirectory(): void {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n\tasync readFile(uri: Uri): Promise<Uint8Array> {\n\t\tawait this.model.isInitialized;\n\n\t\tconst { path, ref, submoduleOf } = fromGitUri(uri);\n\n\t\tif (submoduleOf) {\n\t\t\tconst repository = this.model.getRepository(submoduleOf);\n\n\t\t\tif (!repository) {\n\t\t\t\tthrow FileSystemError.FileNotFound();\n\t\t\t}\n\n\t\t\tconst encoder = new TextEncoder();\n\n\t\t\tif (ref === 'index') {\n\t\t\t\treturn encoder.encode(await repository.diffIndexWithHEAD(path));\n\t\t\t} else {\n\t\t\t\treturn encoder.encode(await repository.diffWithHEAD(path));\n\t\t\t}\n\t\t}\n\n\t\tconst repository = this.model.getRepository(uri);\n\n\t\tif (!repository) {\n\t\t\tthis.logger.warn(`[GitFileSystemProvider][readFile] Repository not found - ${uri.toString()}`);\n\t\t\tthrow FileSystemError.FileNotFound();\n\t\t}\n\n\t\tconst timestamp = new Date().getTime();\n\t\tconst cacheValue: CacheRow = { uri, timestamp };\n\n\t\tthis.cache.set(uri.toString(), cacheValue);\n\n\t\ttry {\n\t\t\treturn await repository.buffer(sanitizeRef(ref, path, submoduleOf, repository), path);\n\t\t} catch {\n\t\t\t// Empty tree\n\t\t\tif (ref === await repository.getEmptyTree()) {\n\t\t\t\tthis.logger.warn(`[GitFileSystemProvider][readFile] Empty tree - ${uri.toString()}`);\n\t\t\t\treturn new Uint8Array(0);\n\t\t\t}\n\n\t\t\t// File does not exist in git. This could be because the file is untracked or ignored\n\t\t\tthis.logger.warn(`[GitFileSystemProvider][readFile] File not found - ${uri.toString()}`);\n\t\t\tthrow FileSystemError.FileNotFound();\n\t\t}\n\t}\n\n\twriteFile(): void {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n\tdelete(): void {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n\trename(): void {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/git-base.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { extensions } from 'vscode';\nimport { API as GitBaseAPI, GitBaseExtension } from './typings/git-base';\n\nexport class GitBaseApi {\n\n\tprivate static _gitBaseApi: GitBaseAPI | undefined;\n\n\tstatic getAPI(): GitBaseAPI {\n\t\tif (!this._gitBaseApi) {\n\t\t\tconst gitBaseExtension = extensions.getExtension<GitBaseExtension>('vscode.git-base')!.exports;\n\t\t\tconst onDidChangeGitBaseExtensionEnablement = (enabled: boolean) => {\n\t\t\t\tthis._gitBaseApi = enabled ? gitBaseExtension.getAPI(1) : undefined;\n\t\t\t};\n\n\t\t\tgitBaseExtension.onDidChangeEnablement(onDidChangeGitBaseExtensionEnablement);\n\t\t\tonDidChangeGitBaseExtensionEnablement(gitBaseExtension.enabled);\n\n\t\t\tif (!this._gitBaseApi) {\n\t\t\t\tthrow new Error('vscode.git-base extension is not enabled.');\n\t\t\t}\n\t\t}\n\n\t\treturn this._gitBaseApi;\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/git-editor-empty.sh",
    "content": "#!/bin/sh\n"
  },
  {
    "path": "extensions/git/src/git-editor-main.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IPCClient } from './ipc/ipcClient';\n\nfunction fatal(err: any): void {\n\tconsole.error(err);\n\tprocess.exit(1);\n}\n\nfunction main(argv: string[]): void {\n\tconst ipcClient = new IPCClient('git-editor');\n\tconst commitMessagePath = argv[argv.length - 1];\n\n\tipcClient.call({ commitMessagePath }).then(() => {\n\t\tsetTimeout(() => process.exit(0), 0);\n\t}).catch(err => fatal(err));\n}\n\nmain(process.argv);\n"
  },
  {
    "path": "extensions/git/src/git-editor.sh",
    "content": "#!/bin/sh\n\nELECTRON_RUN_AS_NODE=\"1\" \\\n\"$VSCODE_GIT_EDITOR_NODE\" \"$VSCODE_GIT_EDITOR_MAIN\" $VSCODE_GIT_EDITOR_EXTRA_ARGS \"$@\"\n"
  },
  {
    "path": "extensions/git/src/git.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { promises as fs, exists, realpath } from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport * as cp from 'child_process';\nimport { fileURLToPath } from 'url';\nimport which from 'which';\nimport { EventEmitter } from 'events';\nimport * as filetype from 'file-type';\nimport { assign, groupBy, IDisposable, toDisposable, dispose, mkdirp, readBytes, detectUnicodeEncoding, Encoding, onceEvent, splitInChunks, Limiter, Versions, isWindows, pathEquals, isMacintosh, isDescendant, relativePath } from './util';\nimport { CancellationError, CancellationToken, ConfigurationChangeEvent, LogOutputChannel, Progress, Uri, workspace } from 'vscode';\nimport { Commit as ApiCommit, Ref, RefType, Branch, Remote, ForcePushMode, GitErrorCodes, LogOptions, Change, Status, CommitOptions, RefQuery as ApiRefQuery, InitOptions } from './api/git';\nimport * as byline from 'byline';\nimport { StringDecoder } from 'string_decoder';\n\n// https://github.com/microsoft/vscode/issues/65693\nconst MAX_CLI_LENGTH = 30000;\n\nexport interface IGit {\n\tpath: string;\n\tversion: string;\n}\n\nexport interface IFileStatus {\n\tx: string;\n\ty: string;\n\tpath: string;\n\trename?: string;\n}\n\nexport interface Stash {\n\treadonly hash: string;\n\treadonly parents: string[];\n\treadonly index: number;\n\treadonly description: string;\n\treadonly branchName?: string;\n}\n\ninterface MutableRemote extends Remote {\n\tfetchUrl?: string;\n\tpushUrl?: string;\n\tisReadOnly: boolean;\n}\n\n// TODO@eamodio: Move to git.d.ts once we are good with the api\n/**\n * Log file options.\n */\nexport interface LogFileOptions {\n\t/** Optional. Continue listing the history of a file beyond renames */\n\treadonly follow?: boolean;\n\t/** Optional. The maximum number of log entries to retrieve. */\n\treadonly maxEntries?: number | string;\n\t/** Optional. The Git sha (hash) to start retrieving log entries from. */\n\treadonly hash?: string;\n\t/** Optional. Specifies whether to start retrieving log entries in reverse order. */\n\treadonly reverse?: boolean;\n\treadonly sortByAuthorDate?: boolean;\n\treadonly shortStats?: boolean;\n}\n\nfunction parseVersion(raw: string): string {\n\treturn raw.replace(/^git version /, '');\n}\n\nfunction findSpecificGit(path: string, onValidate: (path: string) => boolean): Promise<IGit> {\n\treturn new Promise<IGit>((c, e) => {\n\t\tif (!onValidate(path)) {\n\t\t\treturn e(new Error(`Path \"${path}\" is invalid.`));\n\t\t}\n\n\t\tconst buffers: Buffer[] = [];\n\t\tconst child = cp.spawn(path, ['--version']);\n\t\tchild.stdout.on('data', (b: Buffer) => buffers.push(b));\n\t\tchild.on('error', cpErrorHandler(e));\n\t\tchild.on('close', code => code ? e(new Error(`Not found. Code: ${code}`)) : c({ path, version: parseVersion(Buffer.concat(buffers).toString('utf8').trim()) }));\n\t});\n}\n\nfunction findGitDarwin(onValidate: (path: string) => boolean): Promise<IGit> {\n\treturn new Promise<IGit>((c, e) => {\n\t\tcp.exec('which git', (err, gitPathBuffer) => {\n\t\t\tif (err) {\n\t\t\t\treturn e(new Error(`Executing \"which git\" failed: ${err.message}`));\n\t\t\t}\n\n\t\t\tconst path = gitPathBuffer.toString().trim();\n\n\t\t\tfunction getVersion(path: string) {\n\t\t\t\tif (!onValidate(path)) {\n\t\t\t\t\treturn e(new Error(`Path \"${path}\" is invalid.`));\n\t\t\t\t}\n\n\t\t\t\t// make sure git executes\n\t\t\t\tcp.exec('git --version', (err, stdout) => {\n\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn e(new Error(`Executing \"git --version\" failed: ${err.message}`));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn c({ path, version: parseVersion(stdout.trim()) });\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (path !== '/usr/bin/git') {\n\t\t\t\treturn getVersion(path);\n\t\t\t}\n\n\t\t\t// must check if XCode is installed\n\t\t\tcp.exec('xcode-select -p', (err: any) => {\n\t\t\t\tif (err && err.code === 2) {\n\t\t\t\t\t// git is not installed, and launching /usr/bin/git\n\t\t\t\t\t// will prompt the user to install it\n\n\t\t\t\t\treturn e(new Error('Executing \"xcode-select -p\" failed with error code 2.'));\n\t\t\t\t}\n\n\t\t\t\tgetVersion(path);\n\t\t\t});\n\t\t});\n\t});\n}\n\nfunction findSystemGitWin32(base: string, onValidate: (path: string) => boolean): Promise<IGit> {\n\tif (!base) {\n\t\treturn Promise.reject<IGit>('Not found');\n\t}\n\n\treturn findSpecificGit(path.join(base, 'Git', 'cmd', 'git.exe'), onValidate);\n}\n\nasync function findGitWin32InPath(onValidate: (path: string) => boolean): Promise<IGit> {\n\tconst path = await which('git.exe');\n\treturn findSpecificGit(path, onValidate);\n}\n\nfunction findGitWin32(onValidate: (path: string) => boolean): Promise<IGit> {\n\treturn findSystemGitWin32(process.env['ProgramW6432'] as string, onValidate)\n\t\t.then(undefined, () => findSystemGitWin32(process.env['ProgramFiles(x86)'] as string, onValidate))\n\t\t.then(undefined, () => findSystemGitWin32(process.env['ProgramFiles'] as string, onValidate))\n\t\t.then(undefined, () => findSystemGitWin32(path.join(process.env['LocalAppData'] as string, 'Programs'), onValidate))\n\t\t.then(undefined, () => findGitWin32InPath(onValidate));\n}\n\nexport async function findGit(hints: string[], onValidate: (path: string) => boolean, logger: LogOutputChannel): Promise<IGit> {\n\tfor (const hint of hints) {\n\t\ttry {\n\t\t\treturn await findSpecificGit(hint, onValidate);\n\t\t} catch (err) {\n\t\t\t// noop\n\t\t\tlogger.info(`Unable to find git on the PATH: \"${hint}\". Error: ${err.message}`);\n\t\t}\n\t}\n\n\ttry {\n\t\tswitch (process.platform) {\n\t\t\tcase 'darwin': return await findGitDarwin(onValidate);\n\t\t\tcase 'win32': return await findGitWin32(onValidate);\n\t\t\tdefault: return await findSpecificGit('git', onValidate);\n\t\t}\n\t} catch (err) {\n\t\t// noop\n\t\tlogger.warn(`Unable to find git. Error: ${err.message}`);\n\t}\n\n\tthrow new Error('Git installation not found.');\n}\n\nexport interface IExecutionResult<T extends string | Buffer> {\n\texitCode: number;\n\tstdout: T;\n\tstderr: string;\n}\n\nfunction cpErrorHandler(cb: (reason?: any) => void): (reason?: any) => void {\n\treturn err => {\n\t\tif (/ENOENT/.test(err.message)) {\n\t\t\terr = new GitError({\n\t\t\t\terror: err,\n\t\t\t\tmessage: 'Failed to execute git (ENOENT)',\n\t\t\t\tgitErrorCode: GitErrorCodes.NotAGitRepository\n\t\t\t});\n\t\t}\n\n\t\tcb(err);\n\t};\n}\n\nexport interface SpawnOptions extends cp.SpawnOptions {\n\tinput?: string;\n\tlog?: boolean;\n\tcancellationToken?: CancellationToken;\n\tonSpawn?: (childProcess: cp.ChildProcess) => void;\n}\n\nasync function exec(child: cp.ChildProcess, cancellationToken?: CancellationToken): Promise<IExecutionResult<Buffer>> {\n\tif (!child.stdout || !child.stderr) {\n\t\tthrow new GitError({ message: 'Failed to get stdout or stderr from git process.' });\n\t}\n\n\tif (cancellationToken && cancellationToken.isCancellationRequested) {\n\t\tthrow new CancellationError();\n\t}\n\n\tconst disposables: IDisposable[] = [];\n\n\tconst once = (ee: NodeJS.EventEmitter, name: string, fn: (...args: any[]) => void) => {\n\t\tee.once(name, fn);\n\t\tdisposables.push(toDisposable(() => ee.removeListener(name, fn)));\n\t};\n\n\tconst on = (ee: NodeJS.EventEmitter, name: string, fn: (...args: any[]) => void) => {\n\t\tee.on(name, fn);\n\t\tdisposables.push(toDisposable(() => ee.removeListener(name, fn)));\n\t};\n\n\tlet result = Promise.all<any>([\n\t\tnew Promise<number>((c, e) => {\n\t\t\tonce(child, 'error', cpErrorHandler(e));\n\t\t\tonce(child, 'exit', c);\n\t\t}),\n\t\tnew Promise<Buffer>(c => {\n\t\t\tconst buffers: Buffer[] = [];\n\t\t\ton(child.stdout!, 'data', (b: Buffer) => buffers.push(b));\n\t\t\tonce(child.stdout!, 'close', () => c(Buffer.concat(buffers)));\n\t\t}),\n\t\tnew Promise<string>(c => {\n\t\t\tconst buffers: Buffer[] = [];\n\t\t\ton(child.stderr!, 'data', (b: Buffer) => buffers.push(b));\n\t\t\tonce(child.stderr!, 'close', () => c(Buffer.concat(buffers).toString('utf8')));\n\t\t})\n\t]) as Promise<[number, Buffer, string]>;\n\n\tif (cancellationToken) {\n\t\tconst cancellationPromise = new Promise<[number, Buffer, string]>((_, e) => {\n\t\t\tonceEvent(cancellationToken.onCancellationRequested)(() => {\n\t\t\t\ttry {\n\t\t\t\t\tchild.kill();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// noop\n\t\t\t\t}\n\n\t\t\t\te(new CancellationError());\n\t\t\t});\n\t\t});\n\n\t\tresult = Promise.race([result, cancellationPromise]);\n\t}\n\n\ttry {\n\t\tconst [exitCode, stdout, stderr] = await result;\n\t\treturn { exitCode, stdout, stderr };\n\t} finally {\n\t\tdispose(disposables);\n\t}\n}\n\nexport interface IGitErrorData {\n\terror?: Error;\n\tmessage?: string;\n\tstdout?: string;\n\tstderr?: string;\n\texitCode?: number;\n\tgitErrorCode?: string;\n\tgitCommand?: string;\n\tgitArgs?: string[];\n}\n\nexport class GitError extends Error {\n\n\terror?: Error;\n\tstdout?: string;\n\tstderr?: string;\n\texitCode?: number;\n\tgitErrorCode?: string;\n\tgitCommand?: string;\n\tgitArgs?: string[];\n\n\tconstructor(data: IGitErrorData) {\n\t\tsuper(data.error?.message || data.message || 'Git error');\n\n\t\tthis.error = data.error;\n\t\tthis.stdout = data.stdout;\n\t\tthis.stderr = data.stderr;\n\t\tthis.exitCode = data.exitCode;\n\t\tthis.gitErrorCode = data.gitErrorCode;\n\t\tthis.gitCommand = data.gitCommand;\n\t\tthis.gitArgs = data.gitArgs;\n\t}\n\n\toverride toString(): string {\n\t\tlet result = this.message + ' ' + JSON.stringify({\n\t\t\texitCode: this.exitCode,\n\t\t\tgitErrorCode: this.gitErrorCode,\n\t\t\tgitCommand: this.gitCommand,\n\t\t\tstdout: this.stdout,\n\t\t\tstderr: this.stderr\n\t\t}, null, 2);\n\n\t\tif (this.error) {\n\t\t\tresult += (<any>this.error).stack;\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport interface IGitOptions {\n\tgitPath: string;\n\tuserAgent: string;\n\tversion: string;\n\tenv?: { [key: string]: string };\n}\n\nfunction getGitErrorCode(stderr: string): string | undefined {\n\tif (/Another git process seems to be running in this repository|If no other git process is currently running/.test(stderr)) {\n\t\treturn GitErrorCodes.RepositoryIsLocked;\n\t} else if (/Authentication failed/i.test(stderr)) {\n\t\treturn GitErrorCodes.AuthenticationFailed;\n\t} else if (/Not a git repository/i.test(stderr)) {\n\t\treturn GitErrorCodes.NotAGitRepository;\n\t} else if (/bad config file/.test(stderr)) {\n\t\treturn GitErrorCodes.BadConfigFile;\n\t} else if (/cannot make pipe for command substitution|cannot create standard input pipe/.test(stderr)) {\n\t\treturn GitErrorCodes.CantCreatePipe;\n\t} else if (/Repository not found/.test(stderr)) {\n\t\treturn GitErrorCodes.RepositoryNotFound;\n\t} else if (/unable to access/.test(stderr)) {\n\t\treturn GitErrorCodes.CantAccessRemote;\n\t} else if (/branch '.+' is not fully merged/.test(stderr)) {\n\t\treturn GitErrorCodes.BranchNotFullyMerged;\n\t} else if (/Couldn\\'t find remote ref/.test(stderr)) {\n\t\treturn GitErrorCodes.NoRemoteReference;\n\t} else if (/A branch named '.+' already exists/.test(stderr)) {\n\t\treturn GitErrorCodes.BranchAlreadyExists;\n\t} else if (/'.+' is not a valid branch name/.test(stderr)) {\n\t\treturn GitErrorCodes.InvalidBranchName;\n\t} else if (/Please,? commit your changes or stash them/.test(stderr)) {\n\t\treturn GitErrorCodes.DirtyWorkTree;\n\t}\n\n\treturn undefined;\n}\n\n// https://github.com/microsoft/vscode/issues/89373\n// https://github.com/git-for-windows/git/issues/2478\nfunction sanitizePath(path: string): string {\n\treturn path.replace(/^([a-z]):\\\\/i, (_, letter) => `${letter.toUpperCase()}:\\\\`);\n}\n\nfunction sanitizeRelativePath(from: string, to: string): string {\n\treturn path.isAbsolute(to) ? relativePath(from, to).replace(/\\\\/g, '/') : to;\n}\n\nconst COMMIT_FORMAT = '%H%n%aN%n%aE%n%at%n%ct%n%P%n%D%n%B';\nconst STASH_FORMAT = '%H%n%P%n%gd%n%gs';\n\nexport interface ICloneOptions {\n\treadonly parentPath: string;\n\treadonly progress: Progress<{ increment: number }>;\n\treadonly recursive?: boolean;\n\treadonly ref?: string;\n}\n\nexport class Git {\n\n\treadonly path: string;\n\treadonly userAgent: string;\n\treadonly version: string;\n\treadonly env: { [key: string]: string };\n\n\tprivate commandsToLog: string[] = [];\n\n\tprivate _onOutput = new EventEmitter();\n\tget onOutput(): EventEmitter { return this._onOutput; }\n\n\tconstructor(options: IGitOptions) {\n\t\tthis.path = options.gitPath;\n\t\tthis.version = options.version;\n\t\tthis.userAgent = options.userAgent;\n\t\tthis.env = options.env || {};\n\n\t\tconst onConfigurationChanged = (e?: ConfigurationChangeEvent) => {\n\t\t\tif (e !== undefined && !e.affectsConfiguration('git.commandsToLog')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tthis.commandsToLog = config.get<string[]>('commandsToLog', []);\n\t\t};\n\n\t\tworkspace.onDidChangeConfiguration(onConfigurationChanged, this);\n\t\tonConfigurationChanged();\n\t}\n\n\tcompareGitVersionTo(version: string): -1 | 0 | 1 {\n\t\treturn Versions.compare(Versions.fromString(this.version), Versions.fromString(version));\n\t}\n\n\topen(repositoryRoot: string, repositoryRootRealPath: string | undefined, dotGit: { path: string; commonPath?: string }, logger: LogOutputChannel): Repository {\n\t\treturn new Repository(this, repositoryRoot, repositoryRootRealPath, dotGit, logger);\n\t}\n\n\tasync init(repository: string, options: InitOptions = {}): Promise<void> {\n\t\tconst args = ['init'];\n\n\t\tif (options.defaultBranch && options.defaultBranch !== '' && this.compareGitVersionTo('2.28.0') !== -1) {\n\t\t\targs.push('-b', options.defaultBranch);\n\t\t}\n\n\t\tawait this.exec(repository, args);\n\t}\n\n\tasync clone(url: string, options: ICloneOptions, cancellationToken?: CancellationToken): Promise<string> {\n\t\tconst baseFolderName = decodeURI(url).replace(/[\\/]+$/, '').replace(/^.*[\\/\\\\]/, '').replace(/\\.git$/, '') || 'repository';\n\t\tlet folderName = baseFolderName;\n\t\tlet folderPath = path.join(options.parentPath, folderName);\n\t\tlet count = 1;\n\n\t\twhile (count < 20 && await new Promise(c => exists(folderPath, c))) {\n\t\t\tfolderName = `${baseFolderName}-${count++}`;\n\t\t\tfolderPath = path.join(options.parentPath, folderName);\n\t\t}\n\n\t\tawait mkdirp(options.parentPath);\n\n\t\tconst onSpawn = (child: cp.ChildProcess) => {\n\t\t\tconst decoder = new StringDecoder('utf8');\n\t\t\tconst lineStream = new byline.LineStream({ encoding: 'utf8' });\n\t\t\tchild.stderr!.on('data', (buffer: Buffer) => lineStream.write(decoder.write(buffer)));\n\n\t\t\tlet totalProgress = 0;\n\t\t\tlet previousProgress = 0;\n\n\t\t\tlineStream.on('data', (line: string) => {\n\t\t\t\tlet match: RegExpExecArray | null = null;\n\n\t\t\t\tif (match = /Counting objects:\\s*(\\d+)%/i.exec(line)) {\n\t\t\t\t\ttotalProgress = Math.floor(parseInt(match[1]) * 0.1);\n\t\t\t\t} else if (match = /Compressing objects:\\s*(\\d+)%/i.exec(line)) {\n\t\t\t\t\ttotalProgress = 10 + Math.floor(parseInt(match[1]) * 0.1);\n\t\t\t\t} else if (match = /Receiving objects:\\s*(\\d+)%/i.exec(line)) {\n\t\t\t\t\ttotalProgress = 20 + Math.floor(parseInt(match[1]) * 0.4);\n\t\t\t\t} else if (match = /Resolving deltas:\\s*(\\d+)%/i.exec(line)) {\n\t\t\t\t\ttotalProgress = 60 + Math.floor(parseInt(match[1]) * 0.4);\n\t\t\t\t}\n\n\t\t\t\tif (totalProgress !== previousProgress) {\n\t\t\t\t\toptions.progress.report({ increment: totalProgress - previousProgress });\n\t\t\t\t\tpreviousProgress = totalProgress;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\ttry {\n\t\t\tconst command = ['clone', url.includes(' ') ? encodeURI(url) : url, folderPath, '--progress'];\n\t\t\tif (options.recursive) {\n\t\t\t\tcommand.push('--recursive');\n\t\t\t}\n\t\t\tif (options.ref) {\n\t\t\t\tcommand.push('--branch', options.ref);\n\t\t\t}\n\t\t\tawait this.exec(options.parentPath, command, {\n\t\t\t\tcancellationToken,\n\t\t\t\tenv: { 'GIT_HTTP_USER_AGENT': this.userAgent },\n\t\t\t\tonSpawn,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tif (err.stderr) {\n\t\t\t\terr.stderr = err.stderr.replace(/^Cloning.+$/m, '').trim();\n\t\t\t\terr.stderr = err.stderr.replace(/^ERROR:\\s+/, '').trim();\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\n\t\treturn folderPath;\n\t}\n\n\tasync getRepositoryRoot(pathInsidePossibleRepository: string): Promise<string> {\n\t\tconst result = await this.exec(pathInsidePossibleRepository, ['rev-parse', '--show-toplevel']);\n\n\t\t// Keep trailing spaces which are part of the directory name\n\t\tconst repositoryRootPath = path.normalize(result.stdout.trimStart().replace(/[\\r\\n]+$/, ''));\n\n\t\t// Handle symbolic links and UNC paths\n\t\t// Git 2.31 added the `--path-format` flag to rev-parse which\n\t\t// allows us to get the relative path of the repository root\n\t\tif (!pathEquals(pathInsidePossibleRepository, repositoryRootPath) &&\n\t\t\t!isDescendant(repositoryRootPath, pathInsidePossibleRepository) &&\n\t\t\t!isDescendant(pathInsidePossibleRepository, repositoryRootPath) &&\n\t\t\tthis.compareGitVersionTo('2.31.0') !== -1) {\n\t\t\tconst relativePathResult = await this.exec(pathInsidePossibleRepository, ['rev-parse', '--path-format=relative', '--show-toplevel',]);\n\t\t\treturn path.resolve(pathInsidePossibleRepository, relativePathResult.stdout.trimStart().replace(/[\\r\\n]+$/, ''));\n\t\t}\n\n\t\tif (isWindows) {\n\t\t\t// On Git 2.25+ if you call `rev-parse --show-toplevel` on a mapped drive, instead of getting the mapped\n\t\t\t// drive path back, you get the UNC path for the mapped drive. So we will try to normalize it back to the\n\t\t\t// mapped drive path, if possible\n\t\t\tconst repoUri = Uri.file(repositoryRootPath);\n\t\t\tconst pathUri = Uri.file(pathInsidePossibleRepository);\n\t\t\tif (repoUri.authority.length !== 0 && pathUri.authority.length === 0) {\n\t\t\t\tconst match = /^[\\/]?([a-zA-Z])[:\\/]/.exec(pathUri.path);\n\t\t\t\tif (match !== null) {\n\t\t\t\t\tconst [, letter] = match;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst networkPath = await new Promise<string | undefined>(resolve =>\n\t\t\t\t\t\t\trealpath.native(`${letter}:\\\\`, { encoding: 'utf8' }, (err, resolvedPath) =>\n\t\t\t\t\t\t\t\tresolve(err !== null ? undefined : resolvedPath),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (networkPath !== undefined) {\n\t\t\t\t\t\t\t// If the repository is at the root of the mapped drive then we\n\t\t\t\t\t\t\t// have to append `\\` (ex: D:\\) otherwise the path is not valid.\n\t\t\t\t\t\t\tconst isDriveRoot = pathEquals(repoUri.fsPath, networkPath);\n\n\t\t\t\t\t\t\treturn path.normalize(\n\t\t\t\t\t\t\t\trepoUri.fsPath.replace(\n\t\t\t\t\t\t\t\t\tnetworkPath,\n\t\t\t\t\t\t\t\t\t`${letter.toLowerCase()}:${isDriveRoot || networkPath.endsWith('\\\\') ? '\\\\' : ''}`\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch { }\n\t\t\t\t}\n\n\t\t\t\treturn path.normalize(pathUri.fsPath);\n\t\t\t}\n\t\t}\n\n\t\treturn repositoryRootPath;\n\t}\n\n\tasync getRepositoryDotGit(repositoryPath: string): Promise<{ path: string; commonPath?: string }> {\n\t\tconst result = await this.exec(repositoryPath, ['rev-parse', '--git-dir', '--git-common-dir']);\n\t\tlet [dotGitPath, commonDotGitPath] = result.stdout.split('\\n').map(r => r.trim());\n\n\t\tif (!path.isAbsolute(dotGitPath)) {\n\t\t\tdotGitPath = path.join(repositoryPath, dotGitPath);\n\t\t}\n\t\tdotGitPath = path.normalize(dotGitPath);\n\n\t\tif (commonDotGitPath) {\n\t\t\tif (!path.isAbsolute(commonDotGitPath)) {\n\t\t\t\tcommonDotGitPath = path.join(repositoryPath, commonDotGitPath);\n\t\t\t}\n\t\t\tcommonDotGitPath = path.normalize(commonDotGitPath);\n\n\t\t\treturn { path: dotGitPath, commonPath: commonDotGitPath !== dotGitPath ? commonDotGitPath : undefined };\n\t\t}\n\n\t\treturn { path: dotGitPath };\n\t}\n\n\tasync exec(cwd: string, args: string[], options: SpawnOptions = {}): Promise<IExecutionResult<string>> {\n\t\toptions = assign({ cwd }, options || {});\n\t\treturn await this._exec(args, options);\n\t}\n\n\tasync exec2(args: string[], options: SpawnOptions = {}): Promise<IExecutionResult<string>> {\n\t\treturn await this._exec(args, options);\n\t}\n\n\tstream(cwd: string, args: string[], options: SpawnOptions = {}): cp.ChildProcess {\n\t\toptions = assign({ cwd }, options || {});\n\t\tconst child = this.spawn(args, options);\n\n\t\tif (options.log !== false) {\n\t\t\tconst startTime = Date.now();\n\t\t\tchild.on('exit', (_) => {\n\t\t\t\tthis.log(`> git ${args.join(' ')} [${Date.now() - startTime}ms]${child.killed ? ' (cancelled)' : ''}\\n`);\n\t\t\t});\n\t\t}\n\n\t\treturn child;\n\t}\n\n\tprivate async _exec(args: string[], options: SpawnOptions = {}): Promise<IExecutionResult<string>> {\n\t\tconst child = this.spawn(args, options);\n\n\t\toptions.onSpawn?.(child);\n\n\t\tif (options.input) {\n\t\t\tchild.stdin!.end(options.input, 'utf8');\n\t\t}\n\n\t\tconst startExec = Date.now();\n\t\tlet bufferResult: IExecutionResult<Buffer>;\n\n\t\ttry {\n\t\t\tbufferResult = await exec(child, options.cancellationToken);\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof CancellationError) {\n\t\t\t\tthis.log(`> git ${args.join(' ')} [${Date.now() - startExec}ms] (cancelled)\\n`);\n\t\t\t}\n\n\t\t\tthrow ex;\n\t\t}\n\n\t\tif (options.log !== false) {\n\t\t\t// command\n\t\t\tthis.log(`> git ${args.join(' ')} [${Date.now() - startExec}ms]\\n`);\n\n\t\t\t// stdout\n\t\t\tif (bufferResult.stdout.length > 0 && args.find(a => this.commandsToLog.includes(a))) {\n\t\t\t\tthis.log(`${bufferResult.stdout}\\n`);\n\t\t\t}\n\n\t\t\t// stderr\n\t\t\tif (bufferResult.stderr.length > 0) {\n\t\t\t\tthis.log(`${bufferResult.stderr}\\n`);\n\t\t\t}\n\t\t}\n\n\t\tconst result: IExecutionResult<string> = {\n\t\t\texitCode: bufferResult.exitCode,\n\t\t\tstdout: bufferResult.stdout.toString('utf8'),\n\t\t\tstderr: bufferResult.stderr\n\t\t};\n\n\t\tif (bufferResult.exitCode) {\n\t\t\treturn Promise.reject<IExecutionResult<string>>(new GitError({\n\t\t\t\tmessage: 'Failed to execute git',\n\t\t\t\tstdout: result.stdout,\n\t\t\t\tstderr: result.stderr,\n\t\t\t\texitCode: result.exitCode,\n\t\t\t\tgitErrorCode: getGitErrorCode(result.stderr),\n\t\t\t\tgitCommand: args[0],\n\t\t\t\tgitArgs: args\n\t\t\t}));\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tspawn(args: string[], options: SpawnOptions = {}): cp.ChildProcess {\n\t\tif (!this.path) {\n\t\t\tthrow new Error('git could not be found in the system.');\n\t\t}\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tif (!options.stdio && !options.input) {\n\t\t\toptions.stdio = ['ignore', null, null]; // Unless provided, ignore stdin and leave default streams for stdout and stderr\n\t\t}\n\n\t\toptions.env = assign({}, process.env, this.env, options.env || {}, {\n\t\t\tVSCODE_GIT_COMMAND: args[0],\n\t\t\tLC_ALL: 'en_US.UTF-8',\n\t\t\tLANG: 'en_US.UTF-8',\n\t\t\tGIT_PAGER: 'cat'\n\t\t});\n\n\t\tconst cwd = this.getCwd(options);\n\t\tif (cwd) {\n\t\t\toptions.cwd = sanitizePath(cwd);\n\t\t}\n\n\t\treturn cp.spawn(this.path, args, options);\n\t}\n\n\tprivate getCwd(options: SpawnOptions): string | undefined {\n\t\tconst cwd = options.cwd;\n\t\tif (typeof cwd === 'undefined' || typeof cwd === 'string') {\n\t\t\treturn cwd;\n\t\t}\n\n\t\tif (cwd.protocol === 'file:') {\n\t\t\treturn fileURLToPath(cwd);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate log(output: string): void {\n\t\tthis._onOutput.emit('log', output);\n\t}\n\n\tasync mergeFile(options: { input1Path: string; input2Path: string; basePath: string; diff3?: boolean }): Promise<string> {\n\t\tconst args = ['merge-file', '-p', options.input1Path, options.basePath, options.input2Path];\n\t\tif (options.diff3) {\n\t\t\targs.push('--diff3');\n\t\t} else {\n\t\t\targs.push('--no-diff3');\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.exec(os.homedir(), args);\n\t\t\treturn result.stdout;\n\t\t} catch (err) {\n\t\t\tif (typeof err.stdout === 'string') {\n\t\t\t\t// The merge had conflicts, stdout still contains the merged result (with conflict markers)\n\t\t\t\treturn err.stdout;\n\t\t\t} else {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync addSafeDirectory(repositoryPath: string): Promise<void> {\n\t\tawait this.exec(os.homedir(), ['config', '--global', '--add', 'safe.directory', repositoryPath]);\n\t\treturn;\n\t}\n}\n\nexport interface CommitShortStat {\n\treadonly files: number;\n\treadonly insertions: number;\n\treadonly deletions: number;\n}\n\nexport interface Commit {\n\thash: string;\n\tmessage: string;\n\tparents: string[];\n\tauthorDate?: Date;\n\tauthorName?: string;\n\tauthorEmail?: string;\n\tcommitDate?: Date;\n\trefNames: string[];\n\tshortStat?: CommitShortStat;\n}\n\nexport interface RefQuery extends ApiRefQuery {\n\treadonly includeCommitDetails?: boolean;\n}\n\ninterface GitConfigSection {\n\tname: string;\n\tsubSectionName?: string;\n\tproperties: { [key: string]: string };\n}\n\nclass GitConfigParser {\n\tprivate static readonly _lineSeparator = /\\r?\\n/;\n\n\tprivate static readonly _propertyRegex = /^\\s*(\\w+)\\s*=\\s*\"?([^\"]+)\"?$/;\n\tprivate static readonly _sectionRegex = /^\\s*\\[\\s*([^\\]]+?)\\s*(\\\"[^\"]+\\\")*\\]\\s*$/;\n\n\tstatic parse(raw: string): GitConfigSection[] {\n\t\tconst config: { sections: GitConfigSection[] } = { sections: [] };\n\t\tlet section: GitConfigSection = { name: 'DEFAULT', properties: {} };\n\n\t\tconst addSection = (section?: GitConfigSection) => {\n\t\t\tif (!section) { return; }\n\t\t\tconfig.sections.push(section);\n\t\t};\n\n\t\tfor (const line of raw.split(GitConfigParser._lineSeparator)) {\n\t\t\t// Section\n\t\t\tconst sectionMatch = line.match(GitConfigParser._sectionRegex);\n\t\t\tif (sectionMatch?.length === 3) {\n\t\t\t\taddSection(section);\n\t\t\t\tsection = { name: sectionMatch[1], subSectionName: sectionMatch[2]?.replaceAll('\"', ''), properties: {} };\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Property\n\t\t\tconst propertyMatch = line.match(GitConfigParser._propertyRegex);\n\t\t\tif (propertyMatch?.length === 3 && !Object.keys(section.properties).includes(propertyMatch[1])) {\n\t\t\t\tsection.properties[propertyMatch[1]] = propertyMatch[2];\n\t\t\t}\n\t\t}\n\n\t\taddSection(section);\n\n\t\treturn config.sections;\n\t}\n}\n\nexport class GitStatusParser {\n\n\tprivate lastRaw = '';\n\tprivate result: IFileStatus[] = [];\n\n\tget status(): IFileStatus[] {\n\t\treturn this.result;\n\t}\n\n\tupdate(raw: string): void {\n\t\tlet i = 0;\n\t\tlet nextI: number | undefined;\n\n\t\traw = this.lastRaw + raw;\n\n\t\twhile ((nextI = this.parseEntry(raw, i)) !== undefined) {\n\t\t\ti = nextI;\n\t\t}\n\n\t\tthis.lastRaw = raw.substr(i);\n\t}\n\n\tprivate parseEntry(raw: string, i: number): number | undefined {\n\t\tif (i + 4 >= raw.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet lastIndex: number;\n\t\tconst entry: IFileStatus = {\n\t\t\tx: raw.charAt(i++),\n\t\t\ty: raw.charAt(i++),\n\t\t\trename: undefined,\n\t\t\tpath: ''\n\t\t};\n\n\t\t// space\n\t\ti++;\n\n\t\tif (entry.x === 'R' || entry.y === 'R' || entry.x === 'C') {\n\t\t\tlastIndex = raw.indexOf('\\0', i);\n\n\t\t\tif (lastIndex === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tentry.rename = raw.substring(i, lastIndex);\n\t\t\ti = lastIndex + 1;\n\t\t}\n\n\t\tlastIndex = raw.indexOf('\\0', i);\n\n\t\tif (lastIndex === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tentry.path = raw.substring(i, lastIndex);\n\n\t\t// If path ends with slash, it must be a nested git repo\n\t\tif (entry.path[entry.path.length - 1] !== '/') {\n\t\t\tthis.result.push(entry);\n\t\t}\n\n\t\treturn lastIndex + 1;\n\t}\n}\n\nexport interface Submodule {\n\tname: string;\n\tpath: string;\n\turl: string;\n}\n\nexport function parseGitmodules(raw: string): Submodule[] {\n\tconst result: Submodule[] = [];\n\n\tfor (const submoduleSection of GitConfigParser.parse(raw).filter(s => s.name === 'submodule')) {\n\t\tif (submoduleSection.subSectionName && submoduleSection.properties['path'] && submoduleSection.properties['url']) {\n\t\t\tresult.push({\n\t\t\t\tname: submoduleSection.subSectionName,\n\t\t\t\tpath: submoduleSection.properties['path'],\n\t\t\t\turl: submoduleSection.properties['url']\n\t\t\t});\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function parseGitRemotes(raw: string): MutableRemote[] {\n\tconst remotes: MutableRemote[] = [];\n\n\tfor (const remoteSection of GitConfigParser.parse(raw).filter(s => s.name === 'remote')) {\n\t\tif (remoteSection.subSectionName) {\n\t\t\tremotes.push({\n\t\t\t\tname: remoteSection.subSectionName,\n\t\t\t\tfetchUrl: remoteSection.properties['url'],\n\t\t\t\tpushUrl: remoteSection.properties['pushurl'] ?? remoteSection.properties['url'],\n\t\t\t\tisReadOnly: false\n\t\t\t});\n\t\t}\n\t}\n\n\treturn remotes;\n}\n\nconst commitRegex = /([0-9a-f]{40})\\n(.*)\\n(.*)\\n(.*)\\n(.*)\\n(.*)\\n(.*)(?:\\n([^]*?))?(?:\\x00)(?:\\n((?:.*)files? changed(?:.*))$)?/gm;\n\nexport function parseGitCommits(data: string): Commit[] {\n\tconst commits: Commit[] = [];\n\n\tlet ref;\n\tlet authorName;\n\tlet authorEmail;\n\tlet authorDate;\n\tlet commitDate;\n\tlet parents;\n\tlet refNames;\n\tlet message;\n\tlet shortStat;\n\tlet match;\n\n\tdo {\n\t\tmatch = commitRegex.exec(data);\n\t\tif (match === null) {\n\t\t\tbreak;\n\t\t}\n\n\t\t[, ref, authorName, authorEmail, authorDate, commitDate, parents, refNames, message, shortStat] = match;\n\n\t\tif (message[message.length - 1] === '\\n') {\n\t\t\tmessage = message.substr(0, message.length - 1);\n\t\t}\n\n\t\t// Stop excessive memory usage by using substr -- https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\tcommits.push({\n\t\t\thash: ` ${ref}`.substr(1),\n\t\t\tmessage: ` ${message}`.substr(1),\n\t\t\tparents: parents ? parents.split(' ') : [],\n\t\t\tauthorDate: new Date(Number(authorDate) * 1000),\n\t\t\tauthorName: ` ${authorName}`.substr(1),\n\t\t\tauthorEmail: ` ${authorEmail}`.substr(1),\n\t\t\tcommitDate: new Date(Number(commitDate) * 1000),\n\t\t\trefNames: refNames.split(',').map(s => s.trim()),\n\t\t\tshortStat: shortStat ? parseGitDiffShortStat(shortStat) : undefined\n\t\t});\n\t} while (true);\n\n\treturn commits;\n}\n\nconst diffShortStatRegex = /(\\d+) files? changed(?:, (\\d+) insertions?\\(\\+\\))?(?:, (\\d+) deletions?\\(-\\))?/;\n\nfunction parseGitDiffShortStat(data: string): CommitShortStat {\n\tconst matches = data.trim().match(diffShortStatRegex);\n\n\tif (!matches) {\n\t\treturn { files: 0, insertions: 0, deletions: 0 };\n\t}\n\n\tconst [, files, insertions = undefined, deletions = undefined] = matches;\n\treturn { files: parseInt(files), insertions: parseInt(insertions ?? '0'), deletions: parseInt(deletions ?? '0') };\n}\n\nexport interface LsTreeElement {\n\tmode: string;\n\ttype: string;\n\tobject: string;\n\tsize: string;\n\tfile: string;\n}\n\nexport function parseLsTree(raw: string): LsTreeElement[] {\n\treturn raw.split('\\n')\n\t\t.filter(l => !!l)\n\t\t.map(line => /^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)$/.exec(line)!)\n\t\t.filter(m => !!m)\n\t\t.map(([, mode, type, object, size, file]) => ({ mode, type, object, size, file }));\n}\n\ninterface LsFilesElement {\n\tmode: string;\n\tobject: string;\n\tstage: string;\n\tfile: string;\n}\n\nexport function parseLsFiles(raw: string): LsFilesElement[] {\n\treturn raw.split('\\n')\n\t\t.filter(l => !!l)\n\t\t.map(line => /^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)$/.exec(line)!)\n\t\t.filter(m => !!m)\n\t\t.map(([, mode, object, stage, file]) => ({ mode, object, stage, file }));\n}\n\nconst stashRegex = /([0-9a-f]{40})\\n(.*)\\nstash@{(\\d+)}\\n(WIP\\s)*on([^:]+):(.*)(?:\\x00)/gmi;\n\nfunction parseGitStashes(raw: string): Stash[] {\n\tconst result: Stash[] = [];\n\n\tlet match, hash, parents, index, wip, branchName, description;\n\n\tdo {\n\t\tmatch = stashRegex.exec(raw);\n\t\tif (match === null) {\n\t\t\tbreak;\n\t\t}\n\n\t\t[, hash, parents, index, wip, branchName, description] = match;\n\t\tresult.push({\n\t\t\thash,\n\t\t\tparents: parents.split(' '),\n\t\t\tindex: parseInt(index),\n\t\t\tbranchName: branchName.trim(),\n\t\t\tdescription: wip ? `WIP (${description.trim()})` : description.trim()\n\t\t});\n\t} while (true);\n\n\treturn result;\n}\n\nfunction parseGitChanges(repositoryRoot: string, raw: string): Change[] {\n\tlet index = 0;\n\tconst result: Change[] = [];\n\tconst segments = raw.trim().split('\\x00').filter(s => s);\n\n\tsegmentsLoop:\n\twhile (index < segments.length - 1) {\n\t\tconst change = segments[index++];\n\t\tconst resourcePath = segments[index++];\n\n\t\tif (!change || !resourcePath) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst originalUri = Uri.file(path.isAbsolute(resourcePath) ? resourcePath : path.join(repositoryRoot, resourcePath));\n\n\t\tlet uri = originalUri;\n\t\tlet renameUri = originalUri;\n\t\tlet status = Status.UNTRACKED;\n\n\t\t// Copy or Rename status comes with a number (ex: 'R100').\n\t\t// We don't need the number, we use only first character of the status.\n\t\tswitch (change[0]) {\n\t\t\tcase 'A':\n\t\t\t\tstatus = Status.INDEX_ADDED;\n\t\t\t\tbreak;\n\n\t\t\tcase 'M':\n\t\t\t\tstatus = Status.MODIFIED;\n\t\t\t\tbreak;\n\n\t\t\tcase 'D':\n\t\t\t\tstatus = Status.DELETED;\n\t\t\t\tbreak;\n\n\t\t\t// Rename contains two paths, the second one is what the file is renamed/copied to.\n\t\t\tcase 'R': {\n\t\t\t\tif (index >= segments.length) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst newPath = segments[index++];\n\t\t\t\tif (!newPath) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tstatus = Status.INDEX_RENAMED;\n\t\t\t\turi = renameUri = Uri.file(path.isAbsolute(newPath) ? newPath : path.join(repositoryRoot, newPath));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// Unknown status\n\t\t\t\tbreak segmentsLoop;\n\t\t}\n\n\t\tresult.push({ status, uri, originalUri, renameUri });\n\t}\n\n\treturn result;\n}\n\nexport interface BlameInformation {\n\treadonly hash: string;\n\treadonly subject?: string;\n\treadonly authorName?: string;\n\treadonly authorEmail?: string;\n\treadonly authorDate?: number;\n\treadonly ranges: {\n\t\treadonly startLineNumber: number;\n\t\treadonly endLineNumber: number;\n\t}[];\n}\n\nfunction parseGitBlame(data: string): BlameInformation[] {\n\tconst lineSeparator = /\\r?\\n/;\n\tconst commitRegex = /^([0-9a-f]{40})/gm;\n\n\tconst blameInformation = new Map<string, BlameInformation>();\n\n\tlet commitHash: string | undefined = undefined;\n\tlet authorName: string | undefined = undefined;\n\tlet authorEmail: string | undefined = undefined;\n\tlet authorTime: number | undefined = undefined;\n\tlet message: string | undefined = undefined;\n\tlet startLineNumber: number | undefined = undefined;\n\tlet endLineNumber: number | undefined = undefined;\n\n\tfor (const line of data.split(lineSeparator)) {\n\t\t// Commit\n\t\tconst commitMatch = line.match(commitRegex);\n\t\tif (!commitHash && commitMatch) {\n\t\t\tconst segments = line.split(' ');\n\n\t\t\tcommitHash = commitMatch[0];\n\t\t\tstartLineNumber = Number(segments[2]);\n\t\t\tendLineNumber = Number(segments[2]) + Number(segments[3]) - 1;\n\t\t}\n\n\t\t// Commit properties\n\t\tif (commitHash && line.startsWith('author ')) {\n\t\t\tauthorName = line.substring('author '.length);\n\t\t}\n\t\tif (commitHash && line.startsWith('author-mail ')) {\n\t\t\tauthorEmail = line.substring('author-mail <'.length, line.length - 1);\n\t\t}\n\t\tif (commitHash && line.startsWith('author-time ')) {\n\t\t\tauthorTime = Number(line.substring('author-time '.length)) * 1000;\n\t\t}\n\t\tif (commitHash && line.startsWith('summary ')) {\n\t\t\tmessage = line.substring('summary '.length);\n\t\t}\n\n\t\t// Commit end\n\t\tif (commitHash && startLineNumber && endLineNumber && line.startsWith('filename ')) {\n\t\t\tconst existingCommit = blameInformation.get(commitHash);\n\t\t\tif (existingCommit) {\n\t\t\t\texistingCommit.ranges.push({ startLineNumber, endLineNumber });\n\t\t\t\tblameInformation.set(commitHash, existingCommit);\n\t\t\t} else {\n\t\t\t\tblameInformation.set(commitHash, {\n\t\t\t\t\thash: commitHash, authorName, authorEmail, authorDate: authorTime, subject: message, ranges: [{ startLineNumber, endLineNumber }]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcommitHash = authorName = authorEmail = authorTime = message = startLineNumber = endLineNumber = undefined;\n\t\t}\n\t}\n\n\treturn Array.from(blameInformation.values());\n}\n\nconst REFS_FORMAT = '%(refname)%00%(objectname)%00%(*objectname)';\nconst REFS_WITH_DETAILS_FORMAT = `${REFS_FORMAT}%00%(parent)%00%(*parent)%00%(authorname)%00%(*authorname)%00%(committerdate:unix)%00%(*committerdate:unix)%00%(subject)%00%(*subject)`;\n\nfunction parseRefs(data: string): (Ref | Branch)[] {\n\tconst refRegex = /^(refs\\/[^\\0]+)\\0([0-9a-f]{40})\\0([0-9a-f]{40})?(?:\\0(.*))?$/gm;\n\n\tconst headRegex = /^refs\\/heads\\/([^ ]+)$/;\n\tconst remoteHeadRegex = /^refs\\/remotes\\/([^/]+)\\/([^ ]+)$/;\n\tconst tagRegex = /^refs\\/tags\\/([^ ]+)$/;\n\tconst statusRegex = /\\[(?:ahead ([0-9]+))?[,\\s]*(?:behind ([0-9]+))?]|\\[gone]/;\n\n\tlet ref: string | undefined;\n\tlet commitHash: string | undefined;\n\tlet tagCommitHash: string | undefined;\n\tlet details: string | undefined;\n\tlet commitParents: string | undefined;\n\tlet tagCommitParents: string | undefined;\n\tlet commitSubject: string | undefined;\n\tlet tagCommitSubject: string | undefined;\n\tlet authorName: string | undefined;\n\tlet tagAuthorName: string | undefined;\n\tlet committerDate: string | undefined;\n\tlet tagCommitterDate: string | undefined;\n\tlet status: string | undefined;\n\n\tconst refs: (Ref | Branch)[] = [];\n\n\tlet match: RegExpExecArray | null;\n\tlet refMatch: RegExpExecArray | null;\n\n\tdo {\n\t\tmatch = refRegex.exec(data);\n\t\tif (match === null) {\n\t\t\tbreak;\n\t\t}\n\n\t\t[, ref, commitHash, tagCommitHash, details] = match;\n\t\t[commitParents, tagCommitParents, authorName, tagAuthorName, committerDate, tagCommitterDate, commitSubject, tagCommitSubject, status] = details?.split('\\0') ?? [];\n\n\t\tconst parents = tagCommitParents || commitParents;\n\t\tconst subject = tagCommitSubject || commitSubject;\n\t\tconst author = tagAuthorName || authorName;\n\t\tconst date = tagCommitterDate || committerDate;\n\n\t\tconst commitDetails = parents && subject && author && date\n\t\t\t? {\n\t\t\t\thash: commitHash,\n\t\t\t\tmessage: subject,\n\t\t\t\tparents: parents.split(' '),\n\t\t\t\tauthorName: author,\n\t\t\t\tcommitDate: date ? new Date(Number(date) * 1000) : undefined,\n\t\t\t} satisfies ApiCommit : undefined;\n\n\t\tif (refMatch = headRegex.exec(ref)) {\n\t\t\tconst [, aheadCount, behindCount] = statusRegex.exec(status) ?? [];\n\t\t\tconst ahead = status ? aheadCount ? Number(aheadCount) : 0 : undefined;\n\t\t\tconst behind = status ? behindCount ? Number(behindCount) : 0 : undefined;\n\t\t\trefs.push({ name: refMatch[1], commit: commitHash, commitDetails, ahead, behind, type: RefType.Head });\n\t\t} else if (refMatch = remoteHeadRegex.exec(ref)) {\n\t\t\tconst name = `${refMatch[1]}/${refMatch[2]}`;\n\t\t\trefs.push({ name, remote: refMatch[1], commit: commitHash, commitDetails, type: RefType.RemoteHead });\n\t\t} else if (refMatch = tagRegex.exec(ref)) {\n\t\t\trefs.push({ name: refMatch[1], commit: tagCommitHash ?? commitHash, commitDetails, type: RefType.Tag });\n\t\t}\n\t} while (true);\n\n\treturn refs;\n}\n\nexport interface PullOptions {\n\treadonly unshallow?: boolean;\n\treadonly tags?: boolean;\n\treadonly autoStash?: boolean;\n\treadonly cancellationToken?: CancellationToken;\n}\n\nexport class Repository {\n\tprivate _isUsingRefTable = false;\n\n\tconstructor(\n\t\tprivate _git: Git,\n\t\tprivate repositoryRoot: string,\n\t\tprivate repositoryRootRealPath: string | undefined,\n\t\treadonly dotGit: { path: string; commonPath?: string },\n\t\tprivate logger: LogOutputChannel\n\t) { }\n\n\tget git(): Git {\n\t\treturn this._git;\n\t}\n\n\tget root(): string {\n\t\treturn this.repositoryRoot;\n\t}\n\n\tget rootRealPath(): string | undefined {\n\t\treturn this.repositoryRootRealPath;\n\t}\n\n\tasync exec(args: string[], options: SpawnOptions = {}): Promise<IExecutionResult<string>> {\n\t\treturn await this.git.exec(this.repositoryRoot, args, options);\n\t}\n\n\tstream(args: string[], options: SpawnOptions = {}): cp.ChildProcess {\n\t\treturn this.git.stream(this.repositoryRoot, args, options);\n\t}\n\n\tspawn(args: string[], options: SpawnOptions = {}): cp.ChildProcess {\n\t\treturn this.git.spawn(args, options);\n\t}\n\n\tasync config(command: string, scope: string, key: string, value: any = null, options: SpawnOptions = {}): Promise<string> {\n\t\tconst args = ['config', `--${command}`];\n\n\t\tif (scope) {\n\t\t\targs.push(`--${scope}`);\n\t\t}\n\n\t\targs.push(key);\n\n\t\tif (value) {\n\t\t\targs.push(value);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.exec(args, options);\n\t\t\treturn result.stdout.trim();\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.warn(`[Git][config] git config failed: ${err.message}`);\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tasync getConfigs(scope: string): Promise<{ key: string; value: string }[]> {\n\t\tconst args = ['config'];\n\n\t\tif (scope) {\n\t\t\targs.push('--' + scope);\n\t\t}\n\n\t\targs.push('-l');\n\n\t\tconst result = await this.exec(args);\n\t\tconst lines = result.stdout.trim().split(/\\r|\\r\\n|\\n/);\n\n\t\treturn lines.map(entry => {\n\t\t\tconst equalsIndex = entry.indexOf('=');\n\t\t\treturn { key: entry.substr(0, equalsIndex), value: entry.substr(equalsIndex + 1) };\n\t\t});\n\t}\n\n\tasync log(options?: LogOptions): Promise<Commit[]> {\n\t\tconst spawnOptions: SpawnOptions = {};\n\t\tconst args = ['log', `--format=${COMMIT_FORMAT}`, '-z'];\n\n\t\tif (options?.shortStats) {\n\t\t\targs.push('--shortstat');\n\n\t\t\tif (this._git.compareGitVersionTo('2.31') !== -1) {\n\t\t\t\targs.push('--diff-merges=first-parent');\n\t\t\t}\n\t\t}\n\n\t\tif (options?.reverse) {\n\t\t\targs.push('--reverse', '--ancestry-path');\n\t\t}\n\n\t\tif (options?.sortByAuthorDate) {\n\t\t\targs.push('--author-date-order');\n\t\t}\n\n\t\tif (options?.range) {\n\t\t\targs.push(options.range);\n\t\t} else {\n\t\t\targs.push(`-n${options?.maxEntries ?? 32}`);\n\t\t}\n\n\t\tif (options?.author) {\n\t\t\targs.push(`--author=\"${options.author}\"`);\n\t\t}\n\n\t\tif (typeof options?.maxParents === 'number') {\n\t\t\targs.push(`--max-parents=${options.maxParents}`);\n\t\t}\n\n\t\tif (typeof options?.skip === 'number') {\n\t\t\targs.push(`--skip=${options.skip}`);\n\t\t}\n\n\t\tif (options?.refNames) {\n\t\t\targs.push('--topo-order');\n\t\t\targs.push('--decorate=full');\n\n\t\t\t// In order to avoid hitting the command line limit due to large number of reference\n\t\t\t// names (can happen when the `all` filter is used in the Source Control Graph view),\n\t\t\t// we are passing the reference names via stdin.\n\t\t\tspawnOptions.input = options.refNames.join('\\n');\n\t\t\targs.push('--stdin');\n\t\t}\n\n\t\tif (options?.path) {\n\t\t\targs.push('--', options.path);\n\t\t}\n\n\t\tconst result = await this.exec(args, spawnOptions);\n\t\tif (result.exitCode) {\n\t\t\t// An empty repo\n\t\t\treturn [];\n\t\t}\n\n\t\treturn parseGitCommits(result.stdout);\n\t}\n\n\tasync logFile(uri: Uri, options?: LogFileOptions): Promise<Commit[]> {\n\t\tconst args = ['log', `--format=${COMMIT_FORMAT}`, '-z'];\n\n\t\tif (options?.maxEntries && !options?.reverse) {\n\t\t\targs.push(`-n${options.maxEntries}`);\n\t\t}\n\n\t\tif (options?.hash) {\n\t\t\t// If we are reversing, we must add a range (with HEAD) because we are using --ancestry-path for better reverse walking\n\t\t\tif (options?.reverse) {\n\t\t\t\targs.push('--reverse', '--ancestry-path', `${options.hash}..HEAD`);\n\t\t\t} else {\n\t\t\t\targs.push(options.hash);\n\t\t\t}\n\t\t}\n\n\t\tif (options?.shortStats) {\n\t\t\targs.push('--shortstat');\n\t\t}\n\n\t\tif (options?.sortByAuthorDate) {\n\t\t\targs.push('--author-date-order');\n\t\t}\n\n\t\tif (options?.follow) {\n\t\t\targs.push('--follow');\n\t\t}\n\n\t\targs.push('--', uri.fsPath);\n\n\t\ttry {\n\t\t\tconst result = await this.exec(args);\n\t\t\tif (result.exitCode) {\n\t\t\t\t// No file history, e.g. a new file or untracked\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn parseGitCommits(result.stdout);\n\t\t} catch (err) {\n\t\t\t// Repository has no commits yet\n\t\t\tif (/does not have any commits yet/.test(err.stderr)) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync reflog(ref: string, pattern: string): Promise<string[]> {\n\t\tconst args = ['reflog', ref, `--grep-reflog=${pattern}`];\n\t\tconst result = await this.exec(args);\n\t\tif (result.exitCode) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn result.stdout.split('\\n')\n\t\t\t.filter(entry => !!entry);\n\t}\n\n\tasync buffer(ref: string, filePath: string): Promise<Buffer> {\n\t\tconst relativePath = sanitizeRelativePath(this.repositoryRoot, filePath);\n\t\tconst child = this.stream(['show', '--textconv', `${ref}:${relativePath}`]);\n\n\t\tif (!child.stdout) {\n\t\t\treturn Promise.reject<Buffer>('Can\\'t open file from git');\n\t\t}\n\n\t\tconst { exitCode, stdout, stderr } = await exec(child);\n\n\t\tif (exitCode) {\n\t\t\tconst err = new GitError({\n\t\t\t\tmessage: 'Could not show object.',\n\t\t\t\texitCode\n\t\t\t});\n\n\t\t\tif (/exists on disk, but not in/.test(stderr)) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.WrongCase;\n\t\t\t}\n\n\t\t\treturn Promise.reject<Buffer>(err);\n\t\t}\n\n\t\treturn stdout;\n\t}\n\n\tasync getObjectDetails(treeish: string, path: string): Promise<{ mode: string; object: string; size: number }> {\n\t\tif (!treeish || treeish === ':1' || treeish === ':2' || treeish === ':3') { // index\n\t\t\tconst elements = await this.lsfiles(path);\n\n\t\t\tif (elements.length === 0) {\n\t\t\t\tthrow new GitError({ message: 'Path not known by git', gitErrorCode: GitErrorCodes.UnknownPath });\n\t\t\t}\n\n\t\t\tconst { mode, object } = treeish !== ''\n\t\t\t\t? elements.find(e => e.stage === treeish.substring(1)) ?? elements[0]\n\t\t\t\t: elements[0];\n\n\t\t\tconst catFile = await this.exec(['cat-file', '-s', object]);\n\t\t\tconst size = parseInt(catFile.stdout);\n\n\t\t\treturn { mode, object, size };\n\t\t}\n\n\t\tconst elements = await this.lstree(treeish, path);\n\n\t\tif (elements.length === 0) {\n\t\t\tthrow new GitError({ message: 'Path not known by git', gitErrorCode: GitErrorCodes.UnknownPath });\n\t\t}\n\n\t\tconst { mode, object, size } = elements[0];\n\t\treturn { mode, object, size: parseInt(size) || 0 };\n\t}\n\n\tasync lstree(treeish: string, path?: string, options?: { recursive?: boolean }): Promise<LsTreeElement[]> {\n\t\tconst args = ['ls-tree', '-l'];\n\n\t\tif (options?.recursive) {\n\t\t\targs.push('-r');\n\t\t}\n\n\t\targs.push(treeish);\n\n\t\tif (path) {\n\t\t\targs.push('--', sanitizeRelativePath(this.repositoryRoot, path));\n\t\t}\n\n\t\tconst { stdout } = await this.exec(args);\n\t\treturn parseLsTree(stdout);\n\t}\n\n\tasync lsfiles(path: string): Promise<LsFilesElement[]> {\n\t\tconst args = ['ls-files', '--stage'];\n\t\tconst relativePath = sanitizeRelativePath(this.repositoryRoot, path);\n\n\t\tif (relativePath) {\n\t\t\targs.push('--', relativePath);\n\t\t}\n\n\t\tconst { stdout } = await this.exec(args);\n\t\treturn parseLsFiles(stdout);\n\t}\n\n\tasync getGitFilePath(ref: string, filePath: string): Promise<string> {\n\t\tconst elements: { file: string }[] = ref\n\t\t\t? await this.lstree(ref, undefined, { recursive: true })\n\t\t\t: await this.lsfiles(this.repositoryRoot);\n\n\t\tconst relativePathLowercase = sanitizeRelativePath(this.repositoryRoot, filePath).toLowerCase();\n\t\tconst element = elements.find(file => file.file.toLowerCase() === relativePathLowercase);\n\n\t\tif (!element) {\n\t\t\tthrow new GitError({\n\t\t\t\tmessage: `Git relative path not found. Was looking for ${relativePathLowercase} among ${JSON.stringify(elements.map(({ file }) => file), null, 2)}`,\n\t\t\t});\n\t\t}\n\n\t\treturn path.join(this.repositoryRoot, element.file);\n\t}\n\n\tasync detectObjectType(object: string): Promise<{ mimetype: string; encoding?: string }> {\n\t\tconst child = await this.stream(['show', '--textconv', object]);\n\t\tconst buffer = await readBytes(child.stdout!, 4100);\n\n\t\ttry {\n\t\t\tchild.kill();\n\t\t} catch (err) {\n\t\t\t// noop\n\t\t}\n\n\t\tconst encoding = detectUnicodeEncoding(buffer);\n\t\tlet isText = true;\n\n\t\tif (encoding !== Encoding.UTF16be && encoding !== Encoding.UTF16le) {\n\t\t\tfor (let i = 0; i < buffer.length; i++) {\n\t\t\t\tif (buffer.readInt8(i) === 0) {\n\t\t\t\t\tisText = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!isText) {\n\t\t\tconst result = await filetype.fromBuffer(buffer);\n\n\t\t\tif (!result) {\n\t\t\t\treturn { mimetype: 'application/octet-stream' };\n\t\t\t} else {\n\t\t\t\treturn { mimetype: result.mime };\n\t\t\t}\n\t\t}\n\n\t\tif (encoding) {\n\t\t\treturn { mimetype: 'text/plain', encoding };\n\t\t} else {\n\t\t\t// TODO@JOAO: read the setting OUTSIDE!\n\t\t\treturn { mimetype: 'text/plain' };\n\t\t}\n\t}\n\n\tasync apply(patch: string, reverse?: boolean): Promise<void> {\n\t\tconst args = ['apply', patch];\n\n\t\tif (reverse) {\n\t\t\targs.push('-R');\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(args);\n\t\t} catch (err) {\n\t\t\tif (/patch does not apply/.test(err.stderr)) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.PatchDoesNotApply;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync diff(cached = false): Promise<string> {\n\t\tconst args = ['diff'];\n\n\t\tif (cached) {\n\t\t\targs.push('--cached');\n\t\t}\n\n\t\tconst result = await this.exec(args);\n\t\treturn result.stdout;\n\t}\n\n\tdiffWithHEAD(): Promise<Change[]>;\n\tdiffWithHEAD(path: string): Promise<string>;\n\tdiffWithHEAD(path?: string | undefined): Promise<string | Change[]>;\n\tasync diffWithHEAD(path?: string | undefined): Promise<string | Change[]> {\n\t\tif (!path) {\n\t\t\treturn await this.diffFiles(false);\n\t\t}\n\n\t\tconst args = ['diff', '--', sanitizeRelativePath(this.repositoryRoot, path)];\n\t\tconst result = await this.exec(args);\n\t\treturn result.stdout;\n\t}\n\n\tdiffWith(ref: string): Promise<Change[]>;\n\tdiffWith(ref: string, path: string): Promise<string>;\n\tdiffWith(ref: string, path?: string | undefined): Promise<string | Change[]>;\n\tasync diffWith(ref: string, path?: string): Promise<string | Change[]> {\n\t\tif (!path) {\n\t\t\treturn await this.diffFiles(false, ref);\n\t\t}\n\n\t\tconst args = ['diff', ref, '--', sanitizeRelativePath(this.repositoryRoot, path)];\n\t\tconst result = await this.exec(args);\n\t\treturn result.stdout;\n\t}\n\n\tdiffIndexWithHEAD(): Promise<Change[]>;\n\tdiffIndexWithHEAD(path: string): Promise<string>;\n\tdiffIndexWithHEAD(path?: string | undefined): Promise<Change[]>;\n\tasync diffIndexWithHEAD(path?: string): Promise<string | Change[]> {\n\t\tif (!path) {\n\t\t\treturn await this.diffFiles(true);\n\t\t}\n\n\t\tconst args = ['diff', '--cached', '--', sanitizeRelativePath(this.repositoryRoot, path)];\n\t\tconst result = await this.exec(args);\n\t\treturn result.stdout;\n\t}\n\n\tdiffIndexWith(ref: string): Promise<Change[]>;\n\tdiffIndexWith(ref: string, path: string): Promise<string>;\n\tdiffIndexWith(ref: string, path?: string | undefined): Promise<string | Change[]>;\n\tasync diffIndexWith(ref: string, path?: string): Promise<string | Change[]> {\n\t\tif (!path) {\n\t\t\treturn await this.diffFiles(true, ref);\n\t\t}\n\n\t\tconst args = ['diff', '--cached', ref, '--', sanitizeRelativePath(this.repositoryRoot, path)];\n\t\tconst result = await this.exec(args);\n\t\treturn result.stdout;\n\t}\n\n\tasync diffBlobs(object1: string, object2: string): Promise<string> {\n\t\tconst args = ['diff', object1, object2];\n\t\tconst result = await this.exec(args);\n\t\treturn result.stdout;\n\t}\n\n\tdiffBetween(ref1: string, ref2: string): Promise<Change[]>;\n\tdiffBetween(ref1: string, ref2: string, path: string): Promise<string>;\n\tdiffBetween(ref1: string, ref2: string, path?: string | undefined): Promise<string | Change[]>;\n\tasync diffBetween(ref1: string, ref2: string, path?: string): Promise<string | Change[]> {\n\t\tconst range = `${ref1}...${ref2}`;\n\t\tif (!path) {\n\t\t\treturn await this.diffFiles(false, range);\n\t\t}\n\n\t\tconst args = ['diff', range, '--', sanitizeRelativePath(this.repositoryRoot, path)];\n\t\tconst result = await this.exec(args);\n\n\t\treturn result.stdout.trim();\n\t}\n\n\tasync diffBetweenShortStat(ref1: string, ref2: string): Promise<{ files: number; insertions: number; deletions: number }> {\n\t\tconst args = ['diff', '--shortstat', `${ref1}...${ref2}`];\n\n\t\tconst result = await this.exec(args);\n\t\tif (result.exitCode) {\n\t\t\treturn { files: 0, insertions: 0, deletions: 0 };\n\t\t}\n\n\t\treturn parseGitDiffShortStat(result.stdout.trim());\n\t}\n\n\tprivate async diffFiles(cached: boolean, ref?: string): Promise<Change[]> {\n\t\tconst args = ['diff', '--name-status', '-z', '--diff-filter=ADMR'];\n\t\tif (cached) {\n\t\t\targs.push('--cached');\n\t\t}\n\n\t\tif (ref) {\n\t\t\targs.push(ref);\n\t\t}\n\n\t\tconst gitResult = await this.exec(args);\n\t\tif (gitResult.exitCode) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn parseGitChanges(this.repositoryRoot, gitResult.stdout);\n\t}\n\n\tasync diffTrees(treeish1: string, treeish2?: string, options?: { similarityThreshold?: number }): Promise<Change[]> {\n\t\tconst args = ['diff-tree', '-r', '--name-status', '-z', '--diff-filter=ADMR'];\n\n\t\tif (options?.similarityThreshold) {\n\t\t\targs.push(`--find-renames=${options.similarityThreshold}%`);\n\t\t}\n\n\t\targs.push(treeish1);\n\n\t\tif (treeish2) {\n\t\t\targs.push(treeish2);\n\t\t}\n\n\t\tconst gitResult = await this.exec(args);\n\t\tif (gitResult.exitCode) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn parseGitChanges(this.repositoryRoot, gitResult.stdout);\n\t}\n\n\tasync getMergeBase(ref1: string, ref2: string, ...refs: string[]): Promise<string | undefined> {\n\t\ttry {\n\t\t\tconst args = ['merge-base'];\n\t\t\tif (refs.length !== 0) {\n\t\t\t\targs.push('--octopus');\n\t\t\t\targs.push(...refs);\n\t\t\t}\n\n\t\t\targs.push(ref1, ref2);\n\n\t\t\tconst result = await this.exec(args);\n\n\t\t\treturn result.stdout.trim();\n\t\t}\n\t\tcatch (err) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync hashObject(data: string): Promise<string> {\n\t\tconst args = ['hash-object', '-w', '--stdin'];\n\t\tconst result = await this.exec(args, { input: data });\n\n\t\treturn result.stdout.trim();\n\t}\n\n\tasync add(paths: string[], opts?: { update?: boolean }): Promise<void> {\n\t\tconst args = ['add'];\n\n\t\tif (opts && opts.update) {\n\t\t\targs.push('-u');\n\t\t} else {\n\t\t\targs.push('-A');\n\t\t}\n\n\t\tif (paths && paths.length) {\n\t\t\tfor (const chunk of splitInChunks(paths.map(p => sanitizeRelativePath(this.repositoryRoot, p)), MAX_CLI_LENGTH)) {\n\t\t\t\tawait this.exec([...args, '--', ...chunk]);\n\t\t\t}\n\t\t} else {\n\t\t\tawait this.exec([...args, '--', '.']);\n\t\t}\n\t}\n\n\tasync rm(paths: string[]): Promise<void> {\n\t\tconst args = ['rm', '--'];\n\n\t\tif (!paths || !paths.length) {\n\t\t\treturn;\n\t\t}\n\n\t\targs.push(...paths.map(p => sanitizeRelativePath(this.repositoryRoot, p)));\n\n\t\tawait this.exec(args);\n\t}\n\n\tasync stage(path: string, data: Uint8Array): Promise<void> {\n\t\tconst relativePath = sanitizeRelativePath(this.repositoryRoot, path);\n\t\tconst child = this.stream(['hash-object', '--stdin', '-w', '--path', relativePath], { stdio: [null, null, null] });\n\t\tchild.stdin!.end(data);\n\n\t\tconst { exitCode, stdout } = await exec(child);\n\t\tconst hash = stdout.toString('utf8');\n\n\t\tif (exitCode) {\n\t\t\tthrow new GitError({\n\t\t\t\tmessage: 'Could not hash object.',\n\t\t\t\texitCode: exitCode\n\t\t\t});\n\t\t}\n\n\t\tconst treeish = await this.getCommit('HEAD').then(() => 'HEAD', () => '');\n\t\tlet mode: string;\n\t\tlet add: string = '';\n\n\t\ttry {\n\t\t\tconst details = await this.getObjectDetails(treeish, path);\n\t\t\tmode = details.mode;\n\t\t} catch (err) {\n\t\t\tif (err.gitErrorCode !== GitErrorCodes.UnknownPath) {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tmode = '100644';\n\t\t\tadd = '--add';\n\t\t}\n\n\t\tawait this.exec(['update-index', add, '--cacheinfo', mode, hash, relativePath]);\n\t}\n\n\tasync checkout(treeish: string, paths: string[], opts: { track?: boolean; detached?: boolean } = Object.create(null)): Promise<void> {\n\t\tconst args = ['checkout', '-q'];\n\n\t\tif (opts.track) {\n\t\t\targs.push('--track');\n\t\t}\n\n\t\tif (opts.detached) {\n\t\t\targs.push('--detach');\n\t\t}\n\n\t\tif (treeish) {\n\t\t\targs.push(treeish);\n\t\t}\n\n\t\ttry {\n\t\t\tif (paths && paths.length > 0) {\n\t\t\t\tfor (const chunk of splitInChunks(paths.map(p => sanitizeRelativePath(this.repositoryRoot, p)), MAX_CLI_LENGTH)) {\n\t\t\t\t\tawait this.exec([...args, '--', ...chunk]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait this.exec(args);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (/Please,? commit your changes or stash them/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.DirtyWorkTree;\n\t\t\t\terr.gitTreeish = treeish;\n\t\t\t} else if (/You are on a branch yet to be born/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.BranchNotYetBorn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync commit(message: string | undefined, opts: CommitOptions = Object.create(null)): Promise<void> {\n\t\tconst args = ['commit', '--quiet'];\n\t\tconst options: SpawnOptions = {};\n\n\t\tif (message) {\n\t\t\toptions.input = message;\n\t\t\targs.push('--allow-empty-message', '--file', '-');\n\t\t}\n\n\t\tif (opts.verbose) {\n\t\t\targs.push('--verbose');\n\t\t}\n\n\t\tif (opts.all) {\n\t\t\targs.push('--all');\n\t\t}\n\n\t\tif (opts.amend) {\n\t\t\targs.push('--amend');\n\t\t}\n\n\t\tif (!opts.useEditor) {\n\t\t\tif (!message) {\n\t\t\t\tif (opts.amend) {\n\t\t\t\t\targs.push('--no-edit');\n\t\t\t\t} else {\n\t\t\t\t\toptions.input = '';\n\t\t\t\t\targs.push('--file', '-');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\targs.push('--allow-empty-message');\n\t\t}\n\n\t\tif (opts.signoff) {\n\t\t\targs.push('--signoff');\n\t\t}\n\n\t\tif (opts.signCommit) {\n\t\t\targs.push('-S');\n\t\t}\n\n\t\tif (opts.empty) {\n\t\t\targs.push('--allow-empty');\n\t\t}\n\n\t\tif (opts.noVerify) {\n\t\t\targs.push('--no-verify');\n\t\t}\n\n\t\tif (opts.requireUserConfig ?? true) {\n\t\t\t// Stops git from guessing at user/email\n\t\t\targs.splice(0, 0, '-c', 'user.useConfigOnly=true');\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(args, options);\n\t\t} catch (commitErr) {\n\t\t\tawait this.handleCommitError(commitErr);\n\t\t}\n\t}\n\n\tasync rebaseAbort(): Promise<void> {\n\t\tawait this.exec(['rebase', '--abort']);\n\t}\n\n\tasync rebaseContinue(): Promise<void> {\n\t\tconst args = ['rebase', '--continue'];\n\n\t\ttry {\n\t\t\tawait this.exec(args, { env: { GIT_EDITOR: 'true' } });\n\t\t} catch (commitErr) {\n\t\t\tawait this.handleCommitError(commitErr);\n\t\t}\n\t}\n\n\tprivate async handleCommitError(commitErr: any): Promise<void> {\n\t\tif (/not possible because you have unmerged files/.test(commitErr.stderr || '')) {\n\t\t\tcommitErr.gitErrorCode = GitErrorCodes.UnmergedChanges;\n\t\t\tthrow commitErr;\n\t\t} else if (/Aborting commit due to empty commit message/.test(commitErr.stderr || '')) {\n\t\t\tcommitErr.gitErrorCode = GitErrorCodes.EmptyCommitMessage;\n\t\t\tthrow commitErr;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(['config', '--get-all', 'user.name']);\n\t\t} catch (err) {\n\t\t\terr.gitErrorCode = GitErrorCodes.NoUserNameConfigured;\n\t\t\tthrow err;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(['config', '--get-all', 'user.email']);\n\t\t} catch (err) {\n\t\t\terr.gitErrorCode = GitErrorCodes.NoUserEmailConfigured;\n\t\t\tthrow err;\n\t\t}\n\n\t\tthrow commitErr;\n\t}\n\n\tasync branch(name: string, checkout: boolean, ref?: string): Promise<void> {\n\t\tconst args = checkout ? ['checkout', '-q', '-b', name, '--no-track'] : ['branch', '-q', name];\n\n\t\tif (ref) {\n\t\t\targs.push(ref);\n\t\t}\n\n\t\tawait this.exec(args);\n\t}\n\n\tasync deleteBranch(name: string, force?: boolean): Promise<void> {\n\t\tconst args = ['branch', force ? '-D' : '-d', name];\n\t\tawait this.exec(args);\n\t}\n\n\tasync renameBranch(name: string): Promise<void> {\n\t\tconst args = ['branch', '-m', name];\n\t\tawait this.exec(args);\n\t}\n\n\tasync move(from: string, to: string): Promise<void> {\n\t\tconst args = ['mv', from, to];\n\t\tawait this.exec(args);\n\t}\n\n\tasync setBranchUpstream(name: string, upstream: string): Promise<void> {\n\t\tconst args = ['branch', '--set-upstream-to', upstream, name];\n\t\tawait this.exec(args);\n\t}\n\n\tasync deleteRef(ref: string): Promise<void> {\n\t\tconst args = ['update-ref', '-d', ref];\n\t\tawait this.exec(args);\n\t}\n\n\tasync merge(ref: string): Promise<void> {\n\t\tconst args = ['merge', ref];\n\n\t\ttry {\n\t\t\tawait this.exec(args);\n\t\t} catch (err) {\n\t\t\tif (/^CONFLICT /m.test(err.stdout || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.Conflict;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync mergeAbort(): Promise<void> {\n\t\tawait this.exec(['merge', '--abort']);\n\t}\n\n\tasync tag(options: { name: string; message?: string; ref?: string }): Promise<void> {\n\t\tlet args = ['tag'];\n\n\t\tif (options.message) {\n\t\t\targs = [...args, '-a', options.name, '-m', options.message];\n\t\t} else {\n\t\t\targs = [...args, options.name];\n\t\t}\n\n\t\tif (options.ref) {\n\t\t\targs.push(options.ref);\n\t\t}\n\n\t\tawait this.exec(args);\n\t}\n\n\tasync deleteTag(name: string): Promise<void> {\n\t\tconst args = ['tag', '-d', name];\n\t\tawait this.exec(args);\n\t}\n\n\tasync deleteRemoteRef(remoteName: string, refName: string, options?: { force?: boolean }): Promise<void> {\n\t\tconst args = ['push', remoteName, '--delete'];\n\n\t\tif (options?.force) {\n\t\t\targs.push('--force');\n\t\t}\n\n\t\targs.push(refName);\n\t\tawait this.exec(args);\n\t}\n\n\tasync clean(paths: string[]): Promise<void> {\n\t\tconst pathsByGroup = groupBy(paths.map(sanitizePath), p => path.dirname(p));\n\t\tconst groups = Object.keys(pathsByGroup).map(k => pathsByGroup[k]);\n\n\t\tconst limiter = new Limiter(5);\n\t\tconst promises: Promise<any>[] = [];\n\t\tconst args = ['clean', '-f', '-q'];\n\n\t\tfor (const paths of groups) {\n\t\t\tfor (const chunk of splitInChunks(paths.map(p => sanitizeRelativePath(this.repositoryRoot, p)), MAX_CLI_LENGTH)) {\n\t\t\t\tpromises.push(limiter.queue(() => this.exec([...args, '--', ...chunk])));\n\t\t\t}\n\t\t}\n\n\t\tawait Promise.all(promises);\n\t}\n\n\tasync undo(): Promise<void> {\n\t\tawait this.exec(['clean', '-fd']);\n\n\t\ttry {\n\t\t\tawait this.exec(['checkout', '--', '.']);\n\t\t} catch (err) {\n\t\t\tif (/did not match any file\\(s\\) known to git\\./.test(err.stderr || '')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync reset(treeish: string, hard: boolean = false): Promise<void> {\n\t\tconst args = ['reset', hard ? '--hard' : '--soft', treeish];\n\t\tawait this.exec(args);\n\t}\n\n\tasync revert(treeish: string, paths: string[]): Promise<void> {\n\t\tconst result = await this.exec(['branch']);\n\t\tlet args: string[];\n\n\t\t// In case there are no branches, we must use rm --cached\n\t\tif (!result.stdout) {\n\t\t\targs = ['rm', '--cached', '-r'];\n\t\t} else {\n\t\t\targs = ['reset', '-q', treeish];\n\t\t}\n\n\t\ttry {\n\t\t\tif (paths && paths.length > 0) {\n\t\t\t\tfor (const chunk of splitInChunks(paths.map(p => sanitizeRelativePath(this.repositoryRoot, p)), MAX_CLI_LENGTH)) {\n\t\t\t\t\tawait this.exec([...args, '--', ...chunk]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait this.exec([...args, '--', '.']);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t// In case there are merge conflicts to be resolved, git reset will output\n\t\t\t// some \"needs merge\" data. We try to get around that.\n\t\t\tif (/([^:]+: needs merge\\n)+/m.test(err.stdout || '')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync addRemote(name: string, url: string): Promise<void> {\n\t\tconst args = ['remote', 'add', name, url];\n\t\tawait this.exec(args);\n\t}\n\n\tasync removeRemote(name: string): Promise<void> {\n\t\tconst args = ['remote', 'remove', name];\n\t\tawait this.exec(args);\n\t}\n\n\tasync renameRemote(name: string, newName: string): Promise<void> {\n\t\tconst args = ['remote', 'rename', name, newName];\n\t\tawait this.exec(args);\n\t}\n\n\tasync fetch(options: { remote?: string; ref?: string; all?: boolean; prune?: boolean; depth?: number; silent?: boolean; readonly cancellationToken?: CancellationToken } = {}): Promise<void> {\n\t\tconst args = ['fetch'];\n\t\tconst spawnOptions: SpawnOptions = {\n\t\t\tcancellationToken: options.cancellationToken,\n\t\t\tenv: { 'GIT_HTTP_USER_AGENT': this.git.userAgent }\n\t\t};\n\n\t\tif (options.remote) {\n\t\t\targs.push(options.remote);\n\n\t\t\tif (options.ref) {\n\t\t\t\targs.push(options.ref);\n\t\t\t}\n\t\t} else if (options.all) {\n\t\t\targs.push('--all');\n\t\t}\n\n\t\tif (options.prune) {\n\t\t\targs.push('--prune');\n\t\t}\n\n\t\tif (typeof options.depth === 'number') {\n\t\t\targs.push(`--depth=${options.depth}`);\n\t\t}\n\n\t\tif (options.silent) {\n\t\t\tspawnOptions.env!['VSCODE_GIT_FETCH_SILENT'] = 'true';\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(args, spawnOptions);\n\t\t} catch (err) {\n\t\t\tif (/No remote repository specified\\./.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.NoRemoteRepositorySpecified;\n\t\t\t} else if (/Could not read from remote repository/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.RemoteConnectionError;\n\t\t\t} else if (/! \\[rejected\\].*\\(non-fast-forward\\)/m.test(err.stderr || '')) {\n\t\t\t\t// The local branch has outgoing changes and it cannot be fast-forwarded.\n\t\t\t\terr.gitErrorCode = GitErrorCodes.BranchFastForwardRejected;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync fetchTags(options: { remote: string; tags: string[]; force?: boolean }): Promise<void> {\n\t\tconst args = ['fetch'];\n\t\tconst spawnOptions: SpawnOptions = {\n\t\t\tenv: { 'GIT_HTTP_USER_AGENT': this.git.userAgent }\n\t\t};\n\n\t\targs.push(options.remote);\n\n\t\tfor (const tag of options.tags) {\n\t\t\targs.push(`refs/tags/${tag}:refs/tags/${tag}`);\n\t\t}\n\n\t\tif (options.force) {\n\t\t\targs.push('--force');\n\t\t}\n\n\t\tawait this.exec(args, spawnOptions);\n\t}\n\n\tasync pull(rebase?: boolean, remote?: string, branch?: string, options: PullOptions = {}): Promise<void> {\n\t\tconst args = ['pull'];\n\n\t\tif (options.tags) {\n\t\t\targs.push('--tags');\n\t\t}\n\n\t\tif (options.unshallow) {\n\t\t\targs.push('--unshallow');\n\t\t}\n\n\t\t// --auto-stash option is only available `git pull --merge` starting with git 2.27.0\n\t\tif (options.autoStash && this._git.compareGitVersionTo('2.27.0') !== -1) {\n\t\t\targs.push('--autostash');\n\t\t}\n\n\t\tif (rebase) {\n\t\t\targs.push('-r');\n\t\t}\n\n\t\tif (remote && branch) {\n\t\t\targs.push(remote);\n\t\t\targs.push(branch);\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(args, {\n\t\t\t\tcancellationToken: options.cancellationToken,\n\t\t\t\tenv: { 'GIT_HTTP_USER_AGENT': this.git.userAgent }\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tif (/^CONFLICT \\([^)]+\\): \\b/m.test(err.stdout || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.Conflict;\n\t\t\t} else if (/Please tell me who you are\\./.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.NoUserNameConfigured;\n\t\t\t} else if (/Could not read from remote repository/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.RemoteConnectionError;\n\t\t\t} else if (/Pull(?:ing)? is not possible because you have unmerged files|Cannot pull with rebase: You have unstaged changes|Your local changes to the following files would be overwritten|Please, commit your changes before you can merge/i.test(err.stderr)) {\n\t\t\t\terr.stderr = err.stderr.replace(/Cannot pull with rebase: You have unstaged changes/i, 'Cannot pull with rebase, you have unstaged changes');\n\t\t\t\terr.gitErrorCode = GitErrorCodes.DirtyWorkTree;\n\t\t\t} else if (/cannot lock ref|unable to update local ref/i.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.CantLockRef;\n\t\t\t} else if (/cannot rebase onto multiple branches/i.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.CantRebaseMultipleBranches;\n\t\t\t} else if (/! \\[rejected\\].*\\(would clobber existing tag\\)/m.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.TagConflict;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync rebase(branch: string, options: PullOptions = {}): Promise<void> {\n\t\tconst args = ['rebase'];\n\n\t\targs.push(branch);\n\n\t\ttry {\n\t\t\tawait this.exec(args, options);\n\t\t} catch (err) {\n\t\t\tif (/^CONFLICT \\([^)]+\\): \\b/m.test(err.stdout || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.Conflict;\n\t\t\t} else if (/cannot rebase onto multiple branches/i.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.CantRebaseMultipleBranches;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync push(remote?: string, name?: string, setUpstream: boolean = false, followTags = false, forcePushMode?: ForcePushMode, tags = false): Promise<void> {\n\t\tconst args = ['push'];\n\n\t\tif (forcePushMode === ForcePushMode.ForceWithLease || forcePushMode === ForcePushMode.ForceWithLeaseIfIncludes) {\n\t\t\targs.push('--force-with-lease');\n\t\t\tif (forcePushMode === ForcePushMode.ForceWithLeaseIfIncludes && this._git.compareGitVersionTo('2.30') !== -1) {\n\t\t\t\targs.push('--force-if-includes');\n\t\t\t}\n\t\t} else if (forcePushMode === ForcePushMode.Force) {\n\t\t\targs.push('--force');\n\t\t}\n\n\t\tif (setUpstream) {\n\t\t\targs.push('-u');\n\t\t}\n\n\t\tif (followTags) {\n\t\t\targs.push('--follow-tags');\n\t\t}\n\n\t\tif (tags) {\n\t\t\targs.push('--tags');\n\t\t}\n\n\t\tif (remote) {\n\t\t\targs.push(remote);\n\t\t}\n\n\t\tif (name) {\n\t\t\targs.push(name);\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(args, { env: { 'GIT_HTTP_USER_AGENT': this.git.userAgent } });\n\t\t} catch (err) {\n\t\t\tif (/^error: failed to push some refs to\\b/m.test(err.stderr || '')) {\n\t\t\t\tif (forcePushMode === ForcePushMode.ForceWithLease && /! \\[rejected\\].*\\(stale info\\)/m.test(err.stderr || '')) {\n\t\t\t\t\terr.gitErrorCode = GitErrorCodes.ForcePushWithLeaseRejected;\n\t\t\t\t} else if (forcePushMode === ForcePushMode.ForceWithLeaseIfIncludes && /! \\[rejected\\].*\\(remote ref updated since checkout\\)/m.test(err.stderr || '')) {\n\t\t\t\t\terr.gitErrorCode = GitErrorCodes.ForcePushWithLeaseIfIncludesRejected;\n\t\t\t\t} else {\n\t\t\t\t\terr.gitErrorCode = GitErrorCodes.PushRejected;\n\t\t\t\t}\n\t\t\t} else if (/Permission.*denied/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.PermissionDenied;\n\t\t\t} else if (/Could not read from remote repository/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.RemoteConnectionError;\n\t\t\t} else if (/^fatal: The current branch .* has no upstream branch/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.NoUpstreamBranch;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync cherryPick(commitHash: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.exec(['cherry-pick', commitHash]);\n\t\t} catch (err) {\n\t\t\tif (/The previous cherry-pick is now empty, possibly due to conflict resolution./.test(err.stderr ?? '')) {\n\t\t\t\t// Abort cherry-pick\n\t\t\t\tawait this.cherryPickAbort();\n\n\t\t\t\terr.gitErrorCode = GitErrorCodes.CherryPickEmpty;\n\t\t\t} else {\n\t\t\t\t// Conflict during cherry-pick\n\t\t\t\terr.gitErrorCode = GitErrorCodes.CherryPickConflict;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync cherryPickAbort(): Promise<void> {\n\t\tawait this.exec(['cherry-pick', '--abort']);\n\t}\n\n\tasync blame(path: string): Promise<string> {\n\t\ttry {\n\t\t\tconst args = ['blame', '--', sanitizeRelativePath(this.repositoryRoot, path)];\n\t\t\tconst result = await this.exec(args);\n\t\t\treturn result.stdout.trim();\n\t\t} catch (err) {\n\t\t\tif (/^fatal: no such path/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.NoPathFound;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync blame2(path: string, ref?: string): Promise<BlameInformation[] | undefined> {\n\t\ttry {\n\t\t\tconst args = ['blame', '--root', '--incremental'];\n\n\t\t\tif (ref) {\n\t\t\t\targs.push(ref);\n\t\t\t}\n\n\t\t\targs.push('--', sanitizeRelativePath(this.repositoryRoot, path));\n\n\t\t\tconst result = await this.exec(args);\n\n\t\t\treturn parseGitBlame(result.stdout.trim());\n\t\t}\n\t\tcatch (err) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync createStash(message?: string, includeUntracked?: boolean, staged?: boolean): Promise<void> {\n\t\ttry {\n\t\t\tconst args = ['stash', 'push'];\n\n\t\t\tif (includeUntracked) {\n\t\t\t\targs.push('-u');\n\t\t\t}\n\n\t\t\tif (staged) {\n\t\t\t\targs.push('-S');\n\t\t\t}\n\n\t\t\tif (message) {\n\t\t\t\targs.push('-m', message);\n\t\t\t}\n\n\t\t\tawait this.exec(args);\n\t\t} catch (err) {\n\t\t\tif (/No local changes to save/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.NoLocalChanges;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync popStash(index?: number): Promise<void> {\n\t\tconst args = ['stash', 'pop'];\n\t\tawait this.popOrApplyStash(args, index);\n\t}\n\n\tasync applyStash(index?: number): Promise<void> {\n\t\tconst args = ['stash', 'apply'];\n\t\tawait this.popOrApplyStash(args, index);\n\t}\n\n\tprivate async popOrApplyStash(args: string[], index?: number): Promise<void> {\n\t\ttry {\n\t\t\tif (typeof index === 'number') {\n\t\t\t\targs.push(`stash@{${index}}`);\n\t\t\t}\n\n\t\t\tawait this.exec(args);\n\t\t} catch (err) {\n\t\t\tif (/No stash found/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.NoStashFound;\n\t\t\t} else if (/error: Your local changes to the following files would be overwritten/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.LocalChangesOverwritten;\n\t\t\t} else if (/^CONFLICT/m.test(err.stdout || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.StashConflict;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync dropStash(index?: number): Promise<void> {\n\t\tconst args = ['stash'];\n\n\t\tif (typeof index === 'number') {\n\t\t\targs.push('drop');\n\t\t\targs.push(`stash@{${index}}`);\n\t\t} else {\n\t\t\targs.push('clear');\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.exec(args);\n\t\t} catch (err) {\n\t\t\tif (/No stash found/.test(err.stderr || '')) {\n\t\t\t\terr.gitErrorCode = GitErrorCodes.NoStashFound;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync showStash(index: number): Promise<Change[] | undefined> {\n\t\tconst args = ['stash', 'show', `stash@{${index}}`, '--name-status', '-z', '-u'];\n\n\t\ttry {\n\t\t\tconst result = await this.exec(args);\n\t\t\tif (result.exitCode) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn parseGitChanges(this.repositoryRoot, result.stdout.trim());\n\t\t} catch (err) {\n\t\t\tif (/No stash found/.test(err.stderr || '')) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync getStatus(opts?: { limit?: number; ignoreSubmodules?: boolean; similarityThreshold?: number; untrackedChanges?: 'mixed' | 'separate' | 'hidden'; cancellationToken?: CancellationToken }): Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }> {\n\t\tif (opts?.cancellationToken && opts?.cancellationToken.isCancellationRequested) {\n\t\t\tthrow new CancellationError();\n\t\t}\n\n\t\tconst disposables: IDisposable[] = [];\n\n\t\tconst env = { GIT_OPTIONAL_LOCKS: '0' };\n\t\tconst args = ['status', '-z'];\n\n\t\tif (opts?.untrackedChanges === 'hidden') {\n\t\t\targs.push('-uno');\n\t\t} else {\n\t\t\targs.push('-uall');\n\t\t}\n\n\t\tif (opts?.ignoreSubmodules) {\n\t\t\targs.push('--ignore-submodules');\n\t\t}\n\n\t\t// --find-renames option is only available starting with git 2.18.0\n\t\tif (opts?.similarityThreshold && opts.similarityThreshold !== 50 && this._git.compareGitVersionTo('2.18.0') !== -1) {\n\t\t\targs.push(`--find-renames=${opts.similarityThreshold}%`);\n\t\t}\n\n\t\tconst child = this.stream(args, { env });\n\n\t\tlet result = new Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }>((c, e) => {\n\t\t\tconst parser = new GitStatusParser();\n\n\t\t\tconst onClose = (exitCode: number) => {\n\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\tconst stderr = stderrData.join('');\n\t\t\t\t\treturn e(new GitError({\n\t\t\t\t\t\tmessage: 'Failed to execute git',\n\t\t\t\t\t\tstderr,\n\t\t\t\t\t\texitCode,\n\t\t\t\t\t\tgitErrorCode: getGitErrorCode(stderr),\n\t\t\t\t\t\tgitCommand: 'status',\n\t\t\t\t\t\tgitArgs: args\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tc({ status: parser.status, statusLength: parser.status.length, didHitLimit: false });\n\t\t\t};\n\n\t\t\tconst limit = opts?.limit ?? 10000;\n\t\t\tconst onStdoutData = (raw: string) => {\n\t\t\t\tparser.update(raw);\n\n\t\t\t\tif (limit !== 0 && parser.status.length > limit) {\n\t\t\t\t\tchild.removeListener('close', onClose);\n\t\t\t\t\tchild.stdout!.removeListener('data', onStdoutData);\n\t\t\t\t\tchild.kill();\n\n\t\t\t\t\tc({ status: parser.status.slice(0, limit), statusLength: parser.status.length, didHitLimit: true });\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tchild.stdout!.setEncoding('utf8');\n\t\t\tchild.stdout!.on('data', onStdoutData);\n\n\t\t\tconst stderrData: string[] = [];\n\t\t\tchild.stderr!.setEncoding('utf8');\n\t\t\tchild.stderr!.on('data', raw => stderrData.push(raw as string));\n\n\t\t\tchild.on('error', cpErrorHandler(e));\n\t\t\tchild.on('close', onClose);\n\t\t});\n\n\t\tif (opts?.cancellationToken) {\n\t\t\tconst cancellationPromise = new Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }>((_, e) => {\n\t\t\t\tdisposables.push(onceEvent(opts.cancellationToken!.onCancellationRequested)(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tchild.kill();\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t// noop\n\t\t\t\t\t}\n\n\t\t\t\t\te(new CancellationError());\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tresult = Promise.race([result, cancellationPromise]);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { status, statusLength, didHitLimit } = await result;\n\t\t\treturn { status, statusLength, didHitLimit };\n\t\t}\n\t\tfinally {\n\t\t\tdispose(disposables);\n\t\t}\n\t}\n\n\tasync getHEADRef(): Promise<Branch | undefined> {\n\t\tlet HEAD: Branch | undefined;\n\n\t\ttry {\n\t\t\tHEAD = await this.getHEAD();\n\n\t\t\tif (HEAD.name) {\n\t\t\t\t// Branch\n\t\t\t\tHEAD = await this.getBranch(HEAD.name);\n\n\t\t\t\t// Upstream commit\n\t\t\t\tif (HEAD && HEAD.upstream) {\n\t\t\t\t\tconst ref = HEAD.upstream.remote !== '.'\n\t\t\t\t\t\t? `refs/remotes/${HEAD.upstream.remote}/${HEAD.upstream.name}`\n\t\t\t\t\t\t: `refs/heads/${HEAD.upstream.name}`;\n\t\t\t\t\tconst commit = await this.revParse(ref);\n\t\t\t\t\tHEAD = { ...HEAD, upstream: { ...HEAD.upstream, commit } };\n\t\t\t\t}\n\t\t\t} else if (HEAD.commit) {\n\t\t\t\t// Tag || Commit\n\t\t\t\tconst tags = await this.getRefs({ pattern: 'refs/tags' });\n\t\t\t\tconst tag = tags.find(tag => tag.commit === HEAD!.commit);\n\n\t\t\t\tif (tag) {\n\t\t\t\t\tHEAD = { ...HEAD, name: tag.name, type: RefType.Tag };\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t// noop\n\t\t}\n\n\t\treturn HEAD;\n\t}\n\n\tasync getHEAD(): Promise<Ref> {\n\t\tif (!this._isUsingRefTable) {\n\t\t\ttry {\n\t\t\t\t// Attempt to parse the HEAD file\n\t\t\t\tconst result = await this.getHEADFS();\n\n\t\t\t\t// Git 2.45 adds support for a new reference storage backend called \"reftable\", promising\n\t\t\t\t// faster lookups, reads, and writes for repositories with any number of references. For\n\t\t\t\t// backwards compatibility the `.git/HEAD` file contains `ref: refs/heads/.invalid`. More\n\t\t\t\t// details are available at https://git-scm.com/docs/reftable\n\t\t\t\tif (result.name === '.invalid') {\n\t\t\t\t\tthis._isUsingRefTable = true;\n\t\t\t\t\tthis.logger.warn(`[Git][getHEAD] Failed to parse HEAD file: Repository is using reftable format.`);\n\t\t\t\t} else {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis.logger.warn(`[Git][getHEAD] Failed to parse HEAD file: ${err.message}`);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\t// Fallback to using git to determine HEAD\n\t\t\tconst result = await this.exec(['symbolic-ref', '--short', 'HEAD']);\n\n\t\t\tif (!result.stdout) {\n\t\t\t\tthrow new Error('Not in a branch');\n\t\t\t}\n\n\t\t\treturn { name: result.stdout.trim(), commit: undefined, type: RefType.Head };\n\t\t}\n\t\tcatch (err) { }\n\n\t\t// Detached HEAD\n\t\tconst result = await this.exec(['rev-parse', 'HEAD']);\n\n\t\tif (!result.stdout) {\n\t\t\tthrow new Error('Error parsing HEAD');\n\t\t}\n\n\t\treturn { name: undefined, commit: result.stdout.trim(), type: RefType.Head };\n\t}\n\n\tasync getHEADFS(): Promise<Ref> {\n\t\tconst raw = await fs.readFile(path.join(this.dotGit.path, 'HEAD'), 'utf8');\n\n\t\t// Branch\n\t\tconst branchMatch = raw.match(/^ref: refs\\/heads\\/(?<name>.*)$/m);\n\t\tif (branchMatch?.groups?.name) {\n\t\t\treturn { name: branchMatch.groups.name, commit: undefined, type: RefType.Head };\n\t\t}\n\n\t\t// Detached\n\t\tconst commitMatch = raw.match(/^(?<commit>[0-9a-f]{40})$/m);\n\t\tif (commitMatch?.groups?.commit) {\n\t\t\treturn { name: undefined, commit: commitMatch.groups.commit, type: RefType.Head };\n\t\t}\n\n\t\tthrow new Error(`Unable to parse HEAD file. HEAD file contents: ${raw}.`);\n\t}\n\n\tasync findTrackingBranches(upstreamBranch: string): Promise<Branch[]> {\n\t\tconst result = await this.exec(['for-each-ref', '--format', '%(refname:short)%00%(upstream:short)', 'refs/heads']);\n\t\treturn result.stdout.trim().split('\\n')\n\t\t\t.map(line => line.trim().split('\\0'))\n\t\t\t.filter(([_, upstream]) => upstream === upstreamBranch)\n\t\t\t.map(([ref]): Branch => ({ name: ref, type: RefType.Head }));\n\t}\n\n\tasync getRefs(query: RefQuery, cancellationToken?: CancellationToken): Promise<(Ref | Branch)[]> {\n\t\tif (cancellationToken && cancellationToken.isCancellationRequested) {\n\t\t\tthrow new CancellationError();\n\t\t}\n\n\t\tconst args = ['for-each-ref'];\n\n\t\tif (query.count) {\n\t\t\targs.push(`--count=${query.count}`);\n\t\t}\n\n\t\tif (query.sort && query.sort !== 'alphabetically') {\n\t\t\targs.push('--sort', `-${query.sort}`);\n\t\t}\n\n\t\tif (query.includeCommitDetails) {\n\t\t\tconst format = this._git.compareGitVersionTo('1.9.0') !== -1\n\t\t\t\t? `${REFS_WITH_DETAILS_FORMAT}%00%(upstream:track)`\n\t\t\t\t: REFS_WITH_DETAILS_FORMAT;\n\t\t\targs.push('--format', format);\n\t\t} else {\n\t\t\targs.push('--format', REFS_FORMAT);\n\t\t}\n\n\t\tif (query.pattern) {\n\t\t\tconst patterns = Array.isArray(query.pattern) ? query.pattern : [query.pattern];\n\t\t\tfor (const pattern of patterns) {\n\t\t\t\targs.push(pattern.startsWith('refs/') ? pattern : `refs/${pattern}`);\n\t\t\t}\n\t\t}\n\n\t\tif (query.contains) {\n\t\t\targs.push('--contains', query.contains);\n\t\t}\n\n\t\tconst result = await this.exec(args, { cancellationToken });\n\t\treturn parseRefs(result.stdout);\n\t}\n\n\tasync getRemoteRefs(remote: string, opts?: { heads?: boolean; tags?: boolean; cancellationToken?: CancellationToken }): Promise<Ref[]> {\n\t\tif (opts?.cancellationToken && opts?.cancellationToken.isCancellationRequested) {\n\t\t\tthrow new CancellationError();\n\t\t}\n\n\t\tconst args = ['ls-remote'];\n\n\t\tif (opts?.heads) {\n\t\t\targs.push('--heads');\n\t\t}\n\n\t\tif (opts?.tags) {\n\t\t\targs.push('--tags');\n\t\t}\n\n\t\targs.push(remote);\n\n\t\tconst result = await this.exec(args, { cancellationToken: opts?.cancellationToken });\n\n\t\tconst fn = (line: string): Ref | null => {\n\t\t\tlet match: RegExpExecArray | null;\n\n\t\t\tif (match = /^([0-9a-f]{40})\\trefs\\/heads\\/([^ ]+)$/.exec(line)) {\n\t\t\t\treturn { name: match[1], commit: match[2], type: RefType.Head };\n\t\t\t} else if (match = /^([0-9a-f]{40})\\trefs\\/tags\\/([^ ]+)$/.exec(line)) {\n\t\t\t\treturn { name: match[2], commit: match[1], type: RefType.Tag };\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\n\t\treturn result.stdout.split('\\n')\n\t\t\t.filter(line => !!line)\n\t\t\t.map(fn)\n\t\t\t.filter(ref => !!ref) as Ref[];\n\t}\n\n\tasync getStashes(): Promise<Stash[]> {\n\t\tconst result = await this.exec(['stash', 'list', `--format=${STASH_FORMAT}`, '-z']);\n\t\treturn parseGitStashes(result.stdout.trim());\n\t}\n\n\tasync getRemotes(): Promise<Remote[]> {\n\t\tconst remotes: MutableRemote[] = [];\n\n\t\ttry {\n\t\t\t// Attempt to parse the config file\n\t\t\tremotes.push(...await this.getRemotesFS());\n\n\t\t\tif (remotes.length === 0) {\n\t\t\t\tthis.logger.info('[Git][getRemotes] No remotes found in the git config file');\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.warn(`[Git][getRemotes] Error: ${err.message}`);\n\n\t\t\t// Fallback to using git to get the remotes\n\t\t\tremotes.push(...await this.getRemotesGit());\n\t\t}\n\n\t\tfor (const remote of remotes) {\n\t\t\t// https://github.com/microsoft/vscode/issues/45271\n\t\t\tremote.isReadOnly = remote.pushUrl === undefined || remote.pushUrl === 'no_push';\n\t\t}\n\n\t\treturn remotes;\n\t}\n\n\tprivate async getRemotesFS(): Promise<MutableRemote[]> {\n\t\tconst raw = await fs.readFile(path.join(this.dotGit.commonPath ?? this.dotGit.path, 'config'), 'utf8');\n\t\treturn parseGitRemotes(raw);\n\t}\n\n\tprivate async getRemotesGit(): Promise<MutableRemote[]> {\n\t\tconst remotes: MutableRemote[] = [];\n\n\t\tconst result = await this.exec(['remote', '--verbose']);\n\t\tconst lines = result.stdout.trim().split('\\n').filter(l => !!l);\n\n\t\tfor (const line of lines) {\n\t\t\tconst parts = line.split(/\\s/);\n\t\t\tconst [name, url, type] = parts;\n\n\t\t\tlet remote = remotes.find(r => r.name === name);\n\n\t\t\tif (!remote) {\n\t\t\t\tremote = { name, isReadOnly: false };\n\t\t\t\tremotes.push(remote);\n\t\t\t}\n\n\t\t\tif (/fetch/i.test(type)) {\n\t\t\t\tremote.fetchUrl = url;\n\t\t\t} else if (/push/i.test(type)) {\n\t\t\t\tremote.pushUrl = url;\n\t\t\t} else {\n\t\t\t\tremote.fetchUrl = url;\n\t\t\t\tremote.pushUrl = url;\n\t\t\t}\n\t\t}\n\n\t\treturn remotes;\n\t}\n\n\tasync getBranch(name: string): Promise<Branch> {\n\t\tif (name === 'HEAD') {\n\t\t\treturn this.getHEAD();\n\t\t}\n\n\t\tconst args = ['for-each-ref'];\n\n\t\tlet supportsAheadBehind = true;\n\t\tif (this._git.compareGitVersionTo('1.9.0') === -1) {\n\t\t\targs.push('--format=%(refname)%00%(upstream:short)%00%(objectname)');\n\t\t\tsupportsAheadBehind = false;\n\t\t} else if (this._git.compareGitVersionTo('2.16.0') === -1) {\n\t\t\targs.push('--format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)');\n\t\t} else {\n\t\t\targs.push('--format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref)');\n\t\t}\n\n\t\t// On Windows and macOS ref names are case insensitive so we add --ignore-case\n\t\t// to handle the scenario where the user switched to a branch with incorrect\n\t\t// casing\n\t\tif (this.git.compareGitVersionTo('2.12') !== -1 && (isWindows || isMacintosh)) {\n\t\t\targs.push('--ignore-case');\n\t\t}\n\n\t\tif (/^refs\\/(heads|remotes)\\//i.test(name)) {\n\t\t\targs.push(name);\n\t\t} else {\n\t\t\targs.push(`refs/heads/${name}`, `refs/remotes/${name}`);\n\t\t}\n\n\t\tconst result = await this.exec(args);\n\t\tconst branches: Branch[] = result.stdout.trim().split('\\n').map<Branch | undefined>(line => {\n\t\t\tlet [branchName, upstream, ref, status, remoteName, upstreamRef] = line.trim().split('\\0');\n\n\t\t\tif (branchName.startsWith('refs/heads/')) {\n\t\t\t\tbranchName = branchName.substring(11);\n\t\t\t\tconst index = upstream.indexOf('/');\n\n\t\t\t\tlet ahead;\n\t\t\t\tlet behind;\n\t\t\t\tconst match = /\\[(?:ahead ([0-9]+))?[,\\s]*(?:behind ([0-9]+))?]|\\[gone]/.exec(status);\n\t\t\t\tif (match) {\n\t\t\t\t\t[, ahead, behind] = match;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: RefType.Head,\n\t\t\t\t\tname: branchName,\n\t\t\t\t\tupstream: upstream !== '' && status !== '[gone]' ? {\n\t\t\t\t\t\tname: upstreamRef ? upstreamRef.substring(11) : upstream.substring(index + 1),\n\t\t\t\t\t\tremote: remoteName ? remoteName : upstream.substring(0, index)\n\t\t\t\t\t} : undefined,\n\t\t\t\t\tcommit: ref || undefined,\n\t\t\t\t\tahead: Number(ahead) || 0,\n\t\t\t\t\tbehind: Number(behind) || 0,\n\t\t\t\t};\n\t\t\t} else if (branchName.startsWith('refs/remotes/')) {\n\t\t\t\tbranchName = branchName.substring(13);\n\t\t\t\tconst index = branchName.indexOf('/');\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: RefType.RemoteHead,\n\t\t\t\t\tname: branchName.substring(index + 1),\n\t\t\t\t\tremote: branchName.substring(0, index),\n\t\t\t\t\tcommit: ref,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}).filter((b?: Branch): b is Branch => !!b);\n\n\t\tif (branches.length) {\n\t\t\tconst [branch] = branches;\n\n\t\t\tif (!supportsAheadBehind && branch.upstream) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.exec(['rev-list', '--left-right', '--count', `${branch.name}...${branch.upstream.remote}/${branch.upstream.name}`]);\n\t\t\t\t\tconst [ahead, behind] = result.stdout.trim().split('\\t');\n\n\t\t\t\t\t(branch as any).ahead = Number(ahead) || 0;\n\t\t\t\t\t(branch as any).behind = Number(behind) || 0;\n\t\t\t\t} catch { }\n\t\t\t}\n\n\t\t\treturn branch;\n\t\t}\n\n\t\tthis.logger.warn(`[Git][getBranch] No such branch: ${name}`);\n\t\treturn Promise.reject<Branch>(new Error(`No such branch: ${name}.`));\n\t}\n\n\tasync getDefaultBranch(remoteName: string): Promise<Branch> {\n\t\tconst result = await this.exec(['symbolic-ref', '--short', `refs/remotes/${remoteName}/HEAD`]);\n\t\tif (!result.stdout || result.stderr) {\n\t\t\tthrow new Error('No default branch');\n\t\t}\n\n\t\treturn this.getBranch(result.stdout.trim());\n\t}\n\n\t// TODO: Support core.commentChar\n\tstripCommitMessageComments(message: string): string {\n\t\treturn message.replace(/^\\s*#.*$\\n?/gm, '').trim();\n\t}\n\n\tasync getSquashMessage(): Promise<string | undefined> {\n\t\tconst squashMsgPath = path.join(this.repositoryRoot, '.git', 'SQUASH_MSG');\n\n\t\ttry {\n\t\t\tconst raw = await fs.readFile(squashMsgPath, 'utf8');\n\t\t\treturn this.stripCommitMessageComments(raw);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync getMergeMessage(): Promise<string | undefined> {\n\t\tconst mergeMsgPath = path.join(this.repositoryRoot, '.git', 'MERGE_MSG');\n\n\t\ttry {\n\t\t\tconst raw = await fs.readFile(mergeMsgPath, 'utf8');\n\t\t\treturn this.stripCommitMessageComments(raw);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync getCommitTemplate(): Promise<string> {\n\t\ttry {\n\t\t\tconst result = await this.exec(['config', '--get', 'commit.template']);\n\n\t\t\tif (!result.stdout) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// https://github.com/git/git/blob/3a0f269e7c82aa3a87323cb7ae04ac5f129f036b/path.c#L612\n\t\t\tconst homedir = os.homedir();\n\t\t\tlet templatePath = result.stdout.trim()\n\t\t\t\t.replace(/^~([^\\/]*)\\//, (_, user) => `${user ? path.join(path.dirname(homedir), user) : homedir}/`);\n\n\t\t\tif (!path.isAbsolute(templatePath)) {\n\t\t\t\ttemplatePath = path.join(this.repositoryRoot, templatePath);\n\t\t\t}\n\n\t\t\tconst raw = await fs.readFile(templatePath, 'utf8');\n\t\t\treturn this.stripCommitMessageComments(raw);\n\t\t} catch (err) {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tasync getCommit(ref: string): Promise<Commit> {\n\t\tconst result = await this.exec(['show', '-s', '--decorate=full', '--shortstat', `--format=${COMMIT_FORMAT}`, '-z', ref, '--']);\n\t\tconst commits = parseGitCommits(result.stdout);\n\t\tif (commits.length === 0) {\n\t\t\treturn Promise.reject<Commit>('bad commit format');\n\t\t}\n\t\treturn commits[0];\n\t}\n\n\tasync revList(ref1: string, ref2: string): Promise<string[]> {\n\t\tconst result = await this.exec(['rev-list', `${ref1}..${ref2}`]);\n\t\tif (result.stderr) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn result.stdout.trim().split('\\n');\n\t}\n\n\tasync revParse(ref: string): Promise<string | undefined> {\n\t\ttry {\n\t\t\tconst result = await fs.readFile(path.join(this.dotGit.path, ref), 'utf8');\n\t\t\treturn result.trim();\n\t\t} catch (err) {\n\t\t\tthis.logger.warn(`[Git][revParse] Unable to read file: ${err.message}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.exec(['rev-parse', ref]);\n\t\t\tif (result.stderr) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn result.stdout.trim();\n\t\t} catch (err) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync updateSubmodules(paths: string[]): Promise<void> {\n\t\tconst args = ['submodule', 'update'];\n\n\t\tfor (const chunk of splitInChunks(paths.map(p => sanitizeRelativePath(this.repositoryRoot, p)), MAX_CLI_LENGTH)) {\n\t\t\tawait this.exec([...args, '--', ...chunk]);\n\t\t}\n\t}\n\n\tasync getSubmodules(): Promise<Submodule[]> {\n\t\tconst gitmodulesPath = path.join(this.root, '.gitmodules');\n\n\t\ttry {\n\t\t\tconst gitmodulesRaw = await fs.readFile(gitmodulesPath, 'utf8');\n\t\t\treturn parseGitmodules(gitmodulesRaw);\n\t\t} catch (err) {\n\t\t\tif (/ENOENT/.test(err.message)) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/gitEditor.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as path from 'path';\nimport { CancellationToken, DocumentLink, DocumentLinkProvider, l10n, Range, TabInputText, TextDocument, Uri, window, workspace } from 'vscode';\nimport { IIPCHandler, IIPCServer } from './ipc/ipcServer';\nimport { ITerminalEnvironmentProvider } from './terminal';\nimport { EmptyDisposable, IDisposable } from './util';\nimport { Model } from './model';\nimport { Repository } from './repository';\n\ninterface GitEditorRequest {\n\tcommitMessagePath?: string;\n}\n\nexport class GitEditor implements IIPCHandler, ITerminalEnvironmentProvider {\n\n\tprivate env: { [key: string]: string };\n\tprivate disposable: IDisposable = EmptyDisposable;\n\n\treadonly featureDescription = 'git editor';\n\n\tconstructor(ipc?: IIPCServer) {\n\t\tif (ipc) {\n\t\t\tthis.disposable = ipc.registerHandler('git-editor', this);\n\t\t}\n\n\t\tthis.env = {\n\t\t\tGIT_EDITOR: `\"${path.join(__dirname, ipc ? 'git-editor.sh' : 'git-editor-empty.sh')}\"`,\n\t\t\tVSCODE_GIT_EDITOR_NODE: process.execPath,\n\t\t\tVSCODE_GIT_EDITOR_EXTRA_ARGS: '',\n\t\t\tVSCODE_GIT_EDITOR_MAIN: path.join(__dirname, 'git-editor-main.js')\n\t\t};\n\t}\n\n\tasync handle({ commitMessagePath }: GitEditorRequest): Promise<any> {\n\t\tif (commitMessagePath) {\n\t\t\tconst uri = Uri.file(commitMessagePath);\n\t\t\tconst doc = await workspace.openTextDocument(uri);\n\t\t\tawait window.showTextDocument(doc, { preview: false });\n\n\t\t\treturn new Promise((c) => {\n\t\t\t\tconst onDidClose = window.tabGroups.onDidChangeTabs(async (tabs) => {\n\t\t\t\t\tif (tabs.closed.some(t => t.input instanceof TabInputText && t.input.uri.toString() === uri.toString())) {\n\t\t\t\t\t\tonDidClose.dispose();\n\t\t\t\t\t\treturn c(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tgetEnv(): { [key: string]: string } {\n\t\tconst config = workspace.getConfiguration('git');\n\t\treturn config.get<boolean>('useEditorAsCommitInput') ? this.env : {};\n\t}\n\n\tgetTerminalEnv(): { [key: string]: string } {\n\t\tconst config = workspace.getConfiguration('git');\n\t\treturn config.get<boolean>('useEditorAsCommitInput') && config.get<boolean>('terminalGitEditor') ? this.env : {};\n\t}\n\n\tdispose(): void {\n\t\tthis.disposable.dispose();\n\t}\n}\n\nexport class GitEditorDocumentLinkProvider implements DocumentLinkProvider {\n\tprivate readonly _regex = /^#\\s+(modified|new file|deleted|renamed|copied|type change):\\s+(?<file1>.*?)(?:\\s+->\\s+(?<file2>.*))*$/gm;\n\n\tconstructor(private readonly _model: Model) { }\n\n\tprovideDocumentLinks(document: TextDocument, token: CancellationToken): DocumentLink[] {\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst repository = this._model.getRepository(document.uri);\n\t\tif (!repository) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst links: DocumentLink[] = [];\n\t\tfor (const match of document.getText().matchAll(this._regex)) {\n\t\t\tif (!match.groups) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst { file1, file2 } = match.groups;\n\n\t\t\tif (file1) {\n\t\t\t\tlinks.push(this._createDocumentLink(repository, document, match, file1));\n\t\t\t}\n\t\t\tif (file2) {\n\t\t\t\tlinks.push(this._createDocumentLink(repository, document, match, file2));\n\t\t\t}\n\t\t}\n\n\t\treturn links;\n\t}\n\n\tprivate _createDocumentLink(repository: Repository, document: TextDocument, match: RegExpExecArray, file: string): DocumentLink {\n\t\tconst startIndex = match[0].indexOf(file);\n\t\tconst startPosition = document.positionAt(match.index + startIndex);\n\t\tconst endPosition = document.positionAt(match.index + startIndex + file.length);\n\n\t\tconst documentLink = new DocumentLink(\n\t\t\tnew Range(startPosition, endPosition),\n\t\t\tUri.file(path.join(repository.root, file)));\n\t\tdocumentLink.tooltip = l10n.t('Open File');\n\n\t\treturn documentLink;\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/historyItemDetailsProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command, Disposable } from 'vscode';\nimport { AvatarQuery, SourceControlHistoryItemDetailsProvider } from './api/git';\nimport { Repository } from './repository';\nimport { ApiRepository } from './api/api1';\n\nexport interface ISourceControlHistoryItemDetailsProviderRegistry {\n\tregisterSourceControlHistoryItemDetailsProvider(provider: SourceControlHistoryItemDetailsProvider): Disposable;\n\tgetSourceControlHistoryItemDetailsProviders(): SourceControlHistoryItemDetailsProvider[];\n}\n\nexport async function provideSourceControlHistoryItemAvatar(\n\tregistry: ISourceControlHistoryItemDetailsProviderRegistry,\n\trepository: Repository,\n\tquery: AvatarQuery\n): Promise<Map<string, string | undefined> | undefined> {\n\tfor (const provider of registry.getSourceControlHistoryItemDetailsProviders()) {\n\t\tconst result = await provider.provideAvatar(new ApiRepository(repository), query);\n\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nexport async function provideSourceControlHistoryItemHoverCommands(\n\tregistry: ISourceControlHistoryItemDetailsProviderRegistry,\n\trepository: Repository\n): Promise<Command[] | undefined> {\n\tfor (const provider of registry.getSourceControlHistoryItemDetailsProviders()) {\n\t\tconst result = await provider.provideHoverCommands(new ApiRepository(repository));\n\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nexport async function provideSourceControlHistoryItemMessageLinks(\n\tregistry: ISourceControlHistoryItemDetailsProviderRegistry,\n\trepository: Repository,\n\tmessage: string\n): Promise<string | undefined> {\n\tfor (const provider of registry.getSourceControlHistoryItemDetailsProviders()) {\n\t\tconst result = await provider.provideMessageLinks(\n\t\t\tnew ApiRepository(repository), message);\n\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n"
  },
  {
    "path": "extensions/git/src/historyProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nimport { Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, SourceControlHistoryItem, SourceControlHistoryItemChange, SourceControlHistoryOptions, SourceControlHistoryProvider, ThemeIcon, Uri, window, LogOutputChannel, SourceControlHistoryItemRef, l10n, SourceControlHistoryItemRefsChangeEvent } from 'vscode';\nimport { Repository, Resource } from './repository';\nimport { IDisposable, deltaHistoryItemRefs, dispose, filterEvent, getCommitShortHash } from './util';\nimport { toMultiFileDiffEditorUris } from './uri';\nimport { AvatarQuery, AvatarQueryCommit, Branch, LogOptions, Ref, RefType } from './api/git';\nimport { emojify, ensureEmojis } from './emoji';\nimport { Commit } from './git';\nimport { OperationKind, OperationResult } from './operation';\nimport { ISourceControlHistoryItemDetailsProviderRegistry, provideSourceControlHistoryItemAvatar, provideSourceControlHistoryItemMessageLinks } from './historyItemDetailsProvider';\n\nfunction toSourceControlHistoryItemRef(repository: Repository, ref: Ref): SourceControlHistoryItemRef {\n\tconst rootUri = Uri.file(repository.root);\n\n\tswitch (ref.type) {\n\t\tcase RefType.RemoteHead:\n\t\t\treturn {\n\t\t\t\tid: `refs/remotes/${ref.name}`,\n\t\t\t\tname: ref.name ?? '',\n\t\t\t\tdescription: ref.commit ? l10n.t('Remote branch at {0}', getCommitShortHash(rootUri, ref.commit)) : undefined,\n\t\t\t\trevision: ref.commit,\n\t\t\t\ticon: new ThemeIcon('cloud'),\n\t\t\t\tcategory: l10n.t('remote branches')\n\t\t\t};\n\t\tcase RefType.Tag:\n\t\t\treturn {\n\t\t\t\tid: `refs/tags/${ref.name}`,\n\t\t\t\tname: ref.name ?? '',\n\t\t\t\tdescription: ref.commit ? l10n.t('Tag at {0}', getCommitShortHash(rootUri, ref.commit)) : undefined,\n\t\t\t\trevision: ref.commit,\n\t\t\t\ticon: new ThemeIcon('tag'),\n\t\t\t\tcategory: l10n.t('tags')\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tid: `refs/heads/${ref.name}`,\n\t\t\t\tname: ref.name ?? '',\n\t\t\t\tdescription: ref.commit ? getCommitShortHash(rootUri, ref.commit) : undefined,\n\t\t\t\trevision: ref.commit,\n\t\t\t\ticon: new ThemeIcon('git-branch'),\n\t\t\t\tcategory: l10n.t('branches')\n\t\t\t};\n\t}\n}\n\nfunction compareSourceControlHistoryItemRef(ref1: SourceControlHistoryItemRef, ref2: SourceControlHistoryItemRef): number {\n\tconst getOrder = (ref: SourceControlHistoryItemRef): number => {\n\t\tif (ref.id.startsWith('refs/heads/')) {\n\t\t\treturn 1;\n\t\t} else if (ref.id.startsWith('refs/remotes/')) {\n\t\t\treturn 2;\n\t\t} else if (ref.id.startsWith('refs/tags/')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\treturn 99;\n\t};\n\n\tconst ref1Order = getOrder(ref1);\n\tconst ref2Order = getOrder(ref2);\n\n\tif (ref1Order !== ref2Order) {\n\t\treturn ref1Order - ref2Order;\n\t}\n\n\treturn ref1.name.localeCompare(ref2.name);\n}\n\nexport class GitHistoryProvider implements SourceControlHistoryProvider, FileDecorationProvider, IDisposable {\n\tprivate readonly _onDidChangeDecorations = new EventEmitter<Uri[]>();\n\treadonly onDidChangeFileDecorations: Event<Uri[]> = this._onDidChangeDecorations.event;\n\n\tprivate _currentHistoryItemRef: SourceControlHistoryItemRef | undefined;\n\tget currentHistoryItemRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemRef; }\n\n\tprivate _currentHistoryItemRemoteRef: SourceControlHistoryItemRef | undefined;\n\tget currentHistoryItemRemoteRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemRemoteRef; }\n\n\tprivate _currentHistoryItemBaseRef: SourceControlHistoryItemRef | undefined;\n\tget currentHistoryItemBaseRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemBaseRef; }\n\n\tprivate readonly _onDidChangeCurrentHistoryItemRefs = new EventEmitter<void>();\n\treadonly onDidChangeCurrentHistoryItemRefs: Event<void> = this._onDidChangeCurrentHistoryItemRefs.event;\n\n\tprivate readonly _onDidChangeHistoryItemRefs = new EventEmitter<SourceControlHistoryItemRefsChangeEvent>();\n\treadonly onDidChangeHistoryItemRefs: Event<SourceControlHistoryItemRefsChangeEvent> = this._onDidChangeHistoryItemRefs.event;\n\n\tprivate _HEAD: Branch | undefined;\n\tprivate _historyItemRefs: SourceControlHistoryItemRef[] = [];\n\n\tprivate historyItemDecorations = new Map<string, FileDecoration>();\n\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(\n\t\tprivate historyItemDetailProviderRegistry: ISourceControlHistoryItemDetailsProviderRegistry,\n\t\tprivate readonly repository: Repository,\n\t\tprivate readonly logger: LogOutputChannel\n\t) {\n\t\tconst onDidRunWriteOperation = filterEvent(repository.onDidRunOperation, e => !e.operation.readOnly);\n\t\tthis.disposables.push(onDidRunWriteOperation(this.onDidRunWriteOperation, this));\n\n\t\tthis.disposables.push(window.registerFileDecorationProvider(this));\n\t}\n\n\tprivate async onDidRunWriteOperation(result: OperationResult): Promise<void> {\n\t\tif (!this.repository.HEAD) {\n\t\t\tthis.logger.trace('[GitHistoryProvider][onDidRunWriteOperation] repository.HEAD is undefined');\n\t\t\tthis._currentHistoryItemRef = this._currentHistoryItemRemoteRef = this._currentHistoryItemBaseRef = undefined;\n\t\t\tthis._onDidChangeCurrentHistoryItemRefs.fire();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Refs (alphabetically)\n\t\tconst historyItemRefs = this.repository.refs\n\t\t\t.map(ref => toSourceControlHistoryItemRef(this.repository, ref))\n\t\t\t.sort((a, b) => a.id.localeCompare(b.id));\n\n\t\tconst delta = deltaHistoryItemRefs(this._historyItemRefs, historyItemRefs);\n\t\tthis._historyItemRefs = historyItemRefs;\n\n\t\tlet historyItemRefId = '';\n\t\tlet historyItemRefName = '';\n\n\t\tswitch (this.repository.HEAD.type) {\n\t\t\tcase RefType.Head: {\n\t\t\t\tif (this.repository.HEAD.name !== undefined) {\n\t\t\t\t\t// Branch\n\t\t\t\t\thistoryItemRefId = `refs/heads/${this.repository.HEAD.name}`;\n\t\t\t\t\thistoryItemRefName = this.repository.HEAD.name;\n\n\t\t\t\t\t// Remote\n\t\t\t\t\tif (this.repository.HEAD.upstream) {\n\t\t\t\t\t\tif (this.repository.HEAD.upstream.remote === '.') {\n\t\t\t\t\t\t\t// Local branch\n\t\t\t\t\t\t\tthis._currentHistoryItemRemoteRef = {\n\t\t\t\t\t\t\t\tid: `refs/heads/${this.repository.HEAD.upstream.name}`,\n\t\t\t\t\t\t\t\tname: this.repository.HEAD.upstream.name,\n\t\t\t\t\t\t\t\trevision: this.repository.HEAD.upstream.commit,\n\t\t\t\t\t\t\t\ticon: new ThemeIcon('gi-branch')\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Remote branch\n\t\t\t\t\t\t\tthis._currentHistoryItemRemoteRef = {\n\t\t\t\t\t\t\t\tid: `refs/remotes/${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`,\n\t\t\t\t\t\t\t\tname: `${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`,\n\t\t\t\t\t\t\t\trevision: this.repository.HEAD.upstream.commit,\n\t\t\t\t\t\t\t\ticon: new ThemeIcon('cloud')\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._currentHistoryItemRemoteRef = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Base\n\t\t\t\t\tif (this._HEAD?.name !== this.repository.HEAD.name) {\n\t\t\t\t\t\t// Compute base if the branch has changed\n\t\t\t\t\t\tconst mergeBase = await this.resolveHEADMergeBase();\n\n\t\t\t\t\t\tthis._currentHistoryItemBaseRef = mergeBase && mergeBase.name && mergeBase.remote &&\n\t\t\t\t\t\t\t(mergeBase.remote !== this.repository.HEAD.upstream?.remote ||\n\t\t\t\t\t\t\t\tmergeBase.name !== this.repository.HEAD.upstream?.name) ? {\n\t\t\t\t\t\t\tid: `refs/remotes/${mergeBase.remote}/${mergeBase.name}`,\n\t\t\t\t\t\t\tname: `${mergeBase.remote}/${mergeBase.name}`,\n\t\t\t\t\t\t\trevision: mergeBase.commit,\n\t\t\t\t\t\t\ticon: new ThemeIcon('cloud')\n\t\t\t\t\t\t} : undefined;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Update base revision if it has changed\n\t\t\t\t\t\tconst mergeBaseModified = delta.modified\n\t\t\t\t\t\t\t.find(ref => ref.id === this._currentHistoryItemBaseRef?.id);\n\n\t\t\t\t\t\tif (this._currentHistoryItemBaseRef && mergeBaseModified) {\n\t\t\t\t\t\t\tthis._currentHistoryItemBaseRef = {\n\t\t\t\t\t\t\t\t...this._currentHistoryItemBaseRef,\n\t\t\t\t\t\t\t\trevision: mergeBaseModified.revision\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Detached commit\n\t\t\t\t\thistoryItemRefId = this.repository.HEAD.commit ?? '';\n\t\t\t\t\thistoryItemRefName = this.repository.HEAD.commit ?? '';\n\n\t\t\t\t\tthis._currentHistoryItemRemoteRef = undefined;\n\t\t\t\t\tthis._currentHistoryItemBaseRef = undefined;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase RefType.Tag: {\n\t\t\t\t// Tag\n\t\t\t\thistoryItemRefId = `refs/tags/${this.repository.HEAD.name}`;\n\t\t\t\thistoryItemRefName = this.repository.HEAD.name ?? this.repository.HEAD.commit ?? '';\n\n\t\t\t\tthis._currentHistoryItemRemoteRef = undefined;\n\t\t\t\tthis._currentHistoryItemBaseRef = undefined;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis._HEAD = this.repository.HEAD;\n\n\t\tthis._currentHistoryItemRef = {\n\t\t\tid: historyItemRefId,\n\t\t\tname: historyItemRefName,\n\t\t\trevision: this.repository.HEAD.commit,\n\t\t\ticon: new ThemeIcon('target'),\n\t\t};\n\n\t\tthis._onDidChangeCurrentHistoryItemRefs.fire();\n\t\tthis.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemRef: ${JSON.stringify(this._currentHistoryItemRef)}`);\n\t\tthis.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemRemoteRef: ${JSON.stringify(this._currentHistoryItemRemoteRef)}`);\n\t\tthis.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemBaseRef: ${JSON.stringify(this._currentHistoryItemBaseRef)}`);\n\n\t\t// Auto-fetch\n\t\tconst silent = result.operation.kind === OperationKind.Fetch && result.operation.showProgress === false;\n\t\tthis._onDidChangeHistoryItemRefs.fire({ ...delta, silent });\n\n\t\tconst deltaLog = {\n\t\t\tadded: delta.added.map(ref => ref.id),\n\t\t\tmodified: delta.modified.map(ref => ref.id),\n\t\t\tremoved: delta.removed.map(ref => ref.id),\n\t\t\tsilent\n\t\t};\n\t\tthis.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] historyItemRefs: ${JSON.stringify(deltaLog)}`);\n\t}\n\n\tasync provideHistoryItemRefs(historyItemRefs: string[] | undefined): Promise<SourceControlHistoryItemRef[]> {\n\t\tconst refs = await this.repository.getRefs({ pattern: historyItemRefs });\n\n\t\tconst branches: SourceControlHistoryItemRef[] = [];\n\t\tconst remoteBranches: SourceControlHistoryItemRef[] = [];\n\t\tconst tags: SourceControlHistoryItemRef[] = [];\n\n\t\tfor (const ref of refs) {\n\t\t\tswitch (ref.type) {\n\t\t\t\tcase RefType.RemoteHead:\n\t\t\t\t\tremoteBranches.push(toSourceControlHistoryItemRef(this.repository, ref));\n\t\t\t\t\tbreak;\n\t\t\t\tcase RefType.Tag:\n\t\t\t\t\ttags.push(toSourceControlHistoryItemRef(this.repository, ref));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbranches.push(toSourceControlHistoryItemRef(this.repository, ref));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn [...branches, ...remoteBranches, ...tags];\n\t}\n\n\tasync provideHistoryItems(options: SourceControlHistoryOptions): Promise<SourceControlHistoryItem[]> {\n\t\tif (!this.currentHistoryItemRef || !options.historyItemRefs) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// Deduplicate refNames\n\t\tconst refNames = Array.from(new Set<string>(options.historyItemRefs));\n\n\t\tlet logOptions: LogOptions = { refNames, shortStats: true };\n\n\t\ttry {\n\t\t\tif (options.limit === undefined || typeof options.limit === 'number') {\n\t\t\t\tlogOptions = { ...logOptions, maxEntries: options.limit ?? 50 };\n\t\t\t} else if (typeof options.limit.id === 'string') {\n\t\t\t\t// Get the common ancestor commit, and commits\n\t\t\t\tconst commit = await this.repository.getCommit(options.limit.id);\n\t\t\t\tconst commitParentId = commit.parents.length > 0 ? commit.parents[0] : await this.repository.getEmptyTree();\n\n\t\t\t\tlogOptions = { ...logOptions, range: `${commitParentId}..` };\n\t\t\t}\n\n\t\t\tif (typeof options.skip === 'number') {\n\t\t\t\tlogOptions = { ...logOptions, skip: options.skip };\n\t\t\t}\n\n\t\t\tconst commits = await this.repository.log({ ...logOptions, silent: true });\n\n\t\t\t// Avatars\n\t\t\tconst avatarQuery = {\n\t\t\t\tcommits: commits.map(c => ({\n\t\t\t\t\thash: c.hash,\n\t\t\t\t\tauthorName: c.authorName,\n\t\t\t\t\tauthorEmail: c.authorEmail\n\t\t\t\t} satisfies AvatarQueryCommit)),\n\t\t\t\tsize: 20\n\t\t\t} satisfies AvatarQuery;\n\n\t\t\tconst commitAvatars = await provideSourceControlHistoryItemAvatar(\n\t\t\t\tthis.historyItemDetailProviderRegistry, this.repository, avatarQuery);\n\n\t\t\tawait ensureEmojis();\n\n\t\t\tconst historyItems: SourceControlHistoryItem[] = [];\n\t\t\tfor (const commit of commits) {\n\t\t\t\tconst message = emojify(commit.message);\n\t\t\t\tconst messageWithLinks = await provideSourceControlHistoryItemMessageLinks(\n\t\t\t\t\tthis.historyItemDetailProviderRegistry, this.repository, message) ?? message;\n\n\t\t\t\tconst newLineIndex = message.indexOf('\\n');\n\t\t\t\tconst subject = newLineIndex !== -1\n\t\t\t\t\t? `${message.substring(0, newLineIndex)}\\u2026`\n\t\t\t\t\t: message;\n\n\t\t\t\tconst avatarUrl = commitAvatars?.get(commit.hash);\n\t\t\t\tconst references = this._resolveHistoryItemRefs(commit);\n\n\t\t\t\thistoryItems.push({\n\t\t\t\t\tid: commit.hash,\n\t\t\t\t\tparentIds: commit.parents,\n\t\t\t\t\tsubject,\n\t\t\t\t\tmessage: messageWithLinks,\n\t\t\t\t\tauthor: commit.authorName,\n\t\t\t\t\tauthorEmail: commit.authorEmail,\n\t\t\t\t\tauthorIcon: avatarUrl ? Uri.parse(avatarUrl) : new ThemeIcon('account'),\n\t\t\t\t\tdisplayId: getCommitShortHash(Uri.file(this.repository.root), commit.hash),\n\t\t\t\t\ttimestamp: commit.authorDate?.getTime(),\n\t\t\t\t\tstatistics: commit.shortStat ?? { files: 0, insertions: 0, deletions: 0 },\n\t\t\t\t\treferences: references.length !== 0 ? references : undefined\n\t\t\t\t} satisfies SourceControlHistoryItem);\n\t\t\t}\n\n\t\t\treturn historyItems;\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`[GitHistoryProvider][provideHistoryItems] Failed to get history items with options '${JSON.stringify(options)}': ${err}`);\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tasync provideHistoryItemChanges(historyItemId: string, historyItemParentId: string | undefined): Promise<SourceControlHistoryItemChange[]> {\n\t\thistoryItemParentId = historyItemParentId ?? await this.repository.getEmptyTree();\n\n\t\tconst historyItemChangesUri: Uri[] = [];\n\t\tconst historyItemChanges: SourceControlHistoryItemChange[] = [];\n\t\tconst changes = await this.repository.diffTrees(historyItemParentId, historyItemId);\n\n\t\tfor (const change of changes) {\n\t\t\tconst historyItemUri = change.uri.with({\n\t\t\t\tquery: `ref=${historyItemId}`\n\t\t\t});\n\n\t\t\t// History item change\n\t\t\thistoryItemChanges.push({\n\t\t\t\turi: historyItemUri,\n\t\t\t\t...toMultiFileDiffEditorUris(change, historyItemParentId, historyItemId)\n\t\t\t} satisfies SourceControlHistoryItemChange);\n\n\t\t\t// History item change decoration\n\t\t\tconst letter = Resource.getStatusLetter(change.status);\n\t\t\tconst tooltip = Resource.getStatusText(change.status);\n\t\t\tconst color = Resource.getStatusColor(change.status);\n\t\t\tconst fileDecoration = new FileDecoration(letter, tooltip, color);\n\t\t\tthis.historyItemDecorations.set(historyItemUri.toString(), fileDecoration);\n\n\t\t\thistoryItemChangesUri.push(historyItemUri);\n\t\t}\n\n\t\tthis._onDidChangeDecorations.fire(historyItemChangesUri);\n\t\treturn historyItemChanges;\n\t}\n\n\tasync resolveHistoryItemRefsCommonAncestor(historyItemRefs: string[]): Promise<string | undefined> {\n\t\ttry {\n\t\t\tif (historyItemRefs.length === 0) {\n\t\t\t\t// TODO@lszomoru - log\n\t\t\t\treturn undefined;\n\t\t\t} else if (historyItemRefs.length === 1 && historyItemRefs[0] === this.currentHistoryItemRef?.id) {\n\t\t\t\t// Remote\n\t\t\t\tif (this.currentHistoryItemRemoteRef) {\n\t\t\t\t\tconst ancestor = await this.repository.getMergeBase(historyItemRefs[0], this.currentHistoryItemRemoteRef.id);\n\t\t\t\t\treturn ancestor;\n\t\t\t\t}\n\n\t\t\t\t// Base\n\t\t\t\tif (this.currentHistoryItemBaseRef) {\n\t\t\t\t\tconst ancestor = await this.repository.getMergeBase(historyItemRefs[0], this.currentHistoryItemBaseRef.id);\n\t\t\t\t\treturn ancestor;\n\t\t\t\t}\n\n\t\t\t\t// First commit\n\t\t\t\tconst commits = await this.repository.log({ maxParents: 0, refNames: ['HEAD'] });\n\t\t\t\tif (commits.length > 0) {\n\t\t\t\t\treturn commits[0].hash;\n\t\t\t\t}\n\t\t\t} else if (historyItemRefs.length > 1) {\n\t\t\t\tconst ancestor = await this.repository.getMergeBase(historyItemRefs[0], historyItemRefs[1], ...historyItemRefs.slice(2));\n\t\t\t\treturn ancestor;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.error(`[GitHistoryProvider][resolveHistoryItemRefsCommonAncestor] Failed to resolve common ancestor for ${historyItemRefs.join(',')}: ${err}`);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprovideFileDecoration(uri: Uri): FileDecoration | undefined {\n\t\treturn this.historyItemDecorations.get(uri.toString());\n\t}\n\n\tprivate _resolveHistoryItemRefs(commit: Commit): SourceControlHistoryItemRef[] {\n\t\tconst references: SourceControlHistoryItemRef[] = [];\n\n\t\tfor (const ref of commit.refNames) {\n\t\t\tif (ref === 'refs/remotes/origin/HEAD') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tswitch (true) {\n\t\t\t\tcase ref.startsWith('HEAD -> refs/heads/'):\n\t\t\t\t\treferences.push({\n\t\t\t\t\t\tid: ref.substring('HEAD -> '.length),\n\t\t\t\t\t\tname: ref.substring('HEAD -> refs/heads/'.length),\n\t\t\t\t\t\trevision: commit.hash,\n\t\t\t\t\t\tcategory: l10n.t('branches'),\n\t\t\t\t\t\ticon: new ThemeIcon('target')\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase ref.startsWith('refs/heads/'):\n\t\t\t\t\treferences.push({\n\t\t\t\t\t\tid: ref,\n\t\t\t\t\t\tname: ref.substring('refs/heads/'.length),\n\t\t\t\t\t\trevision: commit.hash,\n\t\t\t\t\t\tcategory: l10n.t('branches'),\n\t\t\t\t\t\ticon: new ThemeIcon('git-branch')\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase ref.startsWith('refs/remotes/'):\n\t\t\t\t\treferences.push({\n\t\t\t\t\t\tid: ref,\n\t\t\t\t\t\tname: ref.substring('refs/remotes/'.length),\n\t\t\t\t\t\trevision: commit.hash,\n\t\t\t\t\t\tcategory: l10n.t('remote branches'),\n\t\t\t\t\t\ticon: new ThemeIcon('cloud')\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase ref.startsWith('tag: refs/tags/'):\n\t\t\t\t\treferences.push({\n\t\t\t\t\t\tid: ref.substring('tag: '.length),\n\t\t\t\t\t\tname: ref.substring('tag: refs/tags/'.length),\n\t\t\t\t\t\trevision: commit.hash,\n\t\t\t\t\t\tcategory: l10n.t('tags'),\n\t\t\t\t\t\ticon: new ThemeIcon('tag')\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn references.sort(compareSourceControlHistoryItemRef);\n\t}\n\n\tprivate async resolveHEADMergeBase(): Promise<Branch | undefined> {\n\t\ttry {\n\t\t\tif (this.repository.HEAD?.type !== RefType.Head || !this.repository.HEAD?.name) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst mergeBase = await this.repository.getBranchBase(this.repository.HEAD.name);\n\t\t\treturn mergeBase;\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`[GitHistoryProvider][resolveHEADMergeBase] Failed to resolve merge base for ${this.repository.HEAD?.name}: ${err}`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tdispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/ipc/ipcClient.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as http from 'http';\n\nexport class IPCClient {\n\n\tprivate ipcHandlePath: string;\n\n\tconstructor(private handlerName: string) {\n\t\tconst ipcHandlePath = process.env['VSCODE_GIT_IPC_HANDLE'];\n\n\t\tif (!ipcHandlePath) {\n\t\t\tthrow new Error('Missing VSCODE_GIT_IPC_HANDLE');\n\t\t}\n\n\t\tthis.ipcHandlePath = ipcHandlePath;\n\t}\n\n\tcall(request: any): Promise<any> {\n\t\tconst opts: http.RequestOptions = {\n\t\t\tsocketPath: this.ipcHandlePath,\n\t\t\tpath: `/${this.handlerName}`,\n\t\t\tmethod: 'POST'\n\t\t};\n\n\t\treturn new Promise((c, e) => {\n\t\t\tconst req = http.request(opts, res => {\n\t\t\t\tif (res.statusCode !== 200) {\n\t\t\t\t\treturn e(new Error(`Bad status code: ${res.statusCode}`));\n\t\t\t\t}\n\n\t\t\t\tconst chunks: Buffer[] = [];\n\t\t\t\tres.on('data', d => chunks.push(d));\n\t\t\t\tres.on('end', () => c(JSON.parse(Buffer.concat(chunks).toString('utf8'))));\n\t\t\t});\n\n\t\t\treq.on('error', err => e(err));\n\t\t\treq.write(JSON.stringify(request));\n\t\t\treq.end();\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/ipc/ipcServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable } from 'vscode';\nimport { ITerminalEnvironmentProvider } from '../terminal';\nimport { toDisposable } from '../util';\nimport * as path from 'path';\nimport * as http from 'http';\nimport * as os from 'os';\nimport * as fs from 'fs';\nimport * as crypto from 'crypto';\n\nfunction getIPCHandlePath(id: string): string {\n\tif (process.platform === 'win32') {\n\t\treturn `\\\\\\\\.\\\\pipe\\\\vscode-git-${id}-sock`;\n\t}\n\n\tif (process.platform !== 'darwin' && process.env['XDG_RUNTIME_DIR']) {\n\t\treturn path.join(process.env['XDG_RUNTIME_DIR'] as string, `vscode-git-${id}.sock`);\n\t}\n\n\treturn path.join(os.tmpdir(), `vscode-git-${id}.sock`);\n}\n\nexport interface IIPCHandler {\n\thandle(request: any): Promise<any>;\n}\n\nexport async function createIPCServer(context?: string): Promise<IPCServer> {\n\tconst server = http.createServer();\n\tconst hash = crypto.createHash('sha256');\n\n\tif (!context) {\n\t\tconst buffer = await new Promise<Buffer>((c, e) => crypto.randomBytes(20, (err, buf) => err ? e(err) : c(buf)));\n\t\thash.update(buffer);\n\t} else {\n\t\thash.update(context);\n\t}\n\n\tconst ipcHandlePath = getIPCHandlePath(hash.digest('hex').substring(0, 10));\n\n\tif (process.platform !== 'win32') {\n\t\ttry {\n\t\t\tawait fs.promises.unlink(ipcHandlePath);\n\t\t} catch {\n\t\t\t// noop\n\t\t}\n\t}\n\n\treturn new Promise((c, e) => {\n\t\ttry {\n\t\t\tserver.on('error', err => e(err));\n\t\t\tserver.listen(ipcHandlePath);\n\t\t\tc(new IPCServer(server, ipcHandlePath));\n\t\t} catch (err) {\n\t\t\te(err);\n\t\t}\n\t});\n}\n\nexport interface IIPCServer extends Disposable {\n\treadonly ipcHandlePath: string | undefined;\n\tgetEnv(): { [key: string]: string };\n\tregisterHandler(name: string, handler: IIPCHandler): Disposable;\n}\n\nexport class IPCServer implements IIPCServer, ITerminalEnvironmentProvider, Disposable {\n\n\tprivate handlers = new Map<string, IIPCHandler>();\n\tget ipcHandlePath(): string { return this._ipcHandlePath; }\n\n\tconstructor(private server: http.Server, private _ipcHandlePath: string) {\n\t\tthis.server.on('request', this.onRequest.bind(this));\n\t}\n\n\tregisterHandler(name: string, handler: IIPCHandler): Disposable {\n\t\tthis.handlers.set(`/${name}`, handler);\n\t\treturn toDisposable(() => this.handlers.delete(name));\n\t}\n\n\tprivate onRequest(req: http.IncomingMessage, res: http.ServerResponse): void {\n\t\tif (!req.url) {\n\t\t\tconsole.warn(`Request lacks url`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = this.handlers.get(req.url);\n\n\t\tif (!handler) {\n\t\t\tconsole.warn(`IPC handler for ${req.url} not found`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst chunks: Buffer[] = [];\n\t\treq.on('data', d => chunks.push(d));\n\t\treq.on('end', () => {\n\t\t\tconst request = JSON.parse(Buffer.concat(chunks).toString('utf8'));\n\t\t\thandler.handle(request).then(result => {\n\t\t\t\tres.writeHead(200);\n\t\t\t\tres.end(JSON.stringify(result));\n\t\t\t}, () => {\n\t\t\t\tres.writeHead(500);\n\t\t\t\tres.end();\n\t\t\t});\n\t\t});\n\t}\n\n\tgetEnv(): { [key: string]: string } {\n\t\treturn { VSCODE_GIT_IPC_HANDLE: this.ipcHandlePath };\n\t}\n\n\tgetTerminalEnv(): { [key: string]: string } {\n\t\treturn { VSCODE_GIT_IPC_HANDLE: this.ipcHandlePath };\n\t}\n\n\tdispose(): void {\n\t\tthis.handlers.clear();\n\t\tthis.server.close();\n\n\t\tif (this._ipcHandlePath && process.platform !== 'win32') {\n\t\t\tfs.unlinkSync(this._ipcHandlePath);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/main.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { env, ExtensionContext, workspace, window, Disposable, commands, Uri, version as vscodeVersion, WorkspaceFolder, LogOutputChannel, l10n, LogLevel, languages } from 'vscode';\nimport { findGit, Git, IGit } from './git';\nimport { Model } from './model';\nimport { CommandCenter } from './commands';\nimport { GitFileSystemProvider } from './fileSystemProvider';\nimport { GitDecorations } from './decorationProvider';\nimport { Askpass } from './askpass';\nimport { toDisposable, filterEvent, eventToPromise } from './util';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { GitExtension } from './api/git';\nimport { GitProtocolHandler } from './protocolHandler';\nimport { GitExtensionImpl } from './api/extension';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport { GitTimelineProvider } from './timelineProvider';\nimport { registerAPICommands } from './api/api1';\nimport { TerminalEnvironmentManager, TerminalShellExecutionManager } from './terminal';\nimport { createIPCServer, IPCServer } from './ipc/ipcServer';\nimport { GitEditor, GitEditorDocumentLinkProvider } from './gitEditor';\nimport { GitPostCommitCommandsProvider } from './postCommitCommands';\nimport { GitEditSessionIdentityProvider } from './editSessionIdentityProvider';\nimport { GitCommitInputBoxCodeActionsProvider, GitCommitInputBoxDiagnosticsManager } from './diagnostics';\nimport { GitBlameController } from './blame';\nimport { StagedResourceQuickDiffProvider } from './repository';\n\nconst deactivateTasks: { (): Promise<any> }[] = [];\n\nexport async function deactivate(): Promise<any> {\n\tfor (const task of deactivateTasks) {\n\t\tawait task();\n\t}\n}\n\nasync function createModel(context: ExtensionContext, logger: LogOutputChannel, telemetryReporter: TelemetryReporter, disposables: Disposable[]): Promise<Model> {\n\tconst pathValue = workspace.getConfiguration('git').get<string | string[]>('path');\n\tlet pathHints = Array.isArray(pathValue) ? pathValue : pathValue ? [pathValue] : [];\n\n\tconst { isTrusted, workspaceFolders = [] } = workspace;\n\tconst excludes = isTrusted ? [] : workspaceFolders.map(f => path.normalize(f.uri.fsPath).replace(/[\\r\\n]+$/, ''));\n\n\tif (!isTrusted && pathHints.length !== 0) {\n\t\t// Filter out any non-absolute paths\n\t\tpathHints = pathHints.filter(p => path.isAbsolute(p));\n\t}\n\n\tconst info = await findGit(pathHints, gitPath => {\n\t\tlogger.info(l10n.t('[main] Validating found git in: \"{0}\"', gitPath));\n\t\tif (excludes.length === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst normalized = path.normalize(gitPath).replace(/[\\r\\n]+$/, '');\n\t\tconst skip = excludes.some(e => normalized.startsWith(e));\n\t\tif (skip) {\n\t\t\tlogger.info(l10n.t('[main] Skipped found git in: \"{0}\"', gitPath));\n\t\t}\n\t\treturn !skip;\n\t}, logger);\n\n\tlet ipcServer: IPCServer | undefined = undefined;\n\n\ttry {\n\t\tipcServer = await createIPCServer(context.storagePath);\n\t} catch (err) {\n\t\tlogger.error(`[main] Failed to create git IPC: ${err}`);\n\t}\n\n\tconst askpass = new Askpass(ipcServer);\n\tdisposables.push(askpass);\n\n\tconst gitEditor = new GitEditor(ipcServer);\n\tdisposables.push(gitEditor);\n\n\tconst environment = { ...askpass.getEnv(), ...gitEditor.getEnv(), ...ipcServer?.getEnv() };\n\tconst terminalEnvironmentManager = new TerminalEnvironmentManager(context, [askpass, gitEditor, ipcServer]);\n\tdisposables.push(terminalEnvironmentManager);\n\n\tlogger.info(l10n.t('[main] Using git \"{0}\" from \"{1}\"', info.version, info.path));\n\n\tconst git = new Git({\n\t\tgitPath: info.path,\n\t\tuserAgent: `git/${info.version} (${(os as any).version?.() ?? os.type()} ${os.release()}; ${os.platform()} ${os.arch()}) vscode/${vscodeVersion} (${env.appName})`,\n\t\tversion: info.version,\n\t\tenv: environment,\n\t});\n\tconst model = new Model(git, askpass, context.globalState, context.workspaceState, logger, telemetryReporter);\n\tdisposables.push(model);\n\n\tconst onRepository = () => commands.executeCommand('setContext', 'gitOpenRepositoryCount', `${model.repositories.length}`);\n\tmodel.onDidOpenRepository(onRepository, null, disposables);\n\tmodel.onDidCloseRepository(onRepository, null, disposables);\n\tonRepository();\n\n\tconst onOutput = (str: string) => {\n\t\tconst lines = str.split(/\\r?\\n/mg);\n\n\t\twhile (/^\\s*$/.test(lines[lines.length - 1])) {\n\t\t\tlines.pop();\n\t\t}\n\n\t\tlogger.appendLine(lines.join('\\n'));\n\t};\n\tgit.onOutput.addListener('log', onOutput);\n\tdisposables.push(toDisposable(() => git.onOutput.removeListener('log', onOutput)));\n\n\tconst cc = new CommandCenter(git, model, context.globalState, logger, telemetryReporter);\n\tdisposables.push(\n\t\tcc,\n\t\tnew GitFileSystemProvider(model, logger),\n\t\tnew GitDecorations(model),\n\t\tnew GitBlameController(model),\n\t\tnew GitTimelineProvider(model, cc),\n\t\tnew GitEditSessionIdentityProvider(model),\n\t\tnew StagedResourceQuickDiffProvider(model),\n\t\tnew TerminalShellExecutionManager(model, logger)\n\t);\n\n\tconst postCommitCommandsProvider = new GitPostCommitCommandsProvider(model);\n\tmodel.registerPostCommitCommandsProvider(postCommitCommandsProvider);\n\n\tconst diagnosticsManager = new GitCommitInputBoxDiagnosticsManager(model);\n\tdisposables.push(diagnosticsManager);\n\n\tconst codeActionsProvider = new GitCommitInputBoxCodeActionsProvider(diagnosticsManager);\n\tdisposables.push(codeActionsProvider);\n\n\tconst gitEditorDocumentLinkProvider = languages.registerDocumentLinkProvider('git-commit', new GitEditorDocumentLinkProvider(model));\n\tdisposables.push(gitEditorDocumentLinkProvider);\n\n\tcheckGitVersion(info);\n\tcommands.executeCommand('setContext', 'gitVersion2.35', git.compareGitVersionTo('2.35') >= 0);\n\n\treturn model;\n}\n\nasync function isGitRepository(folder: WorkspaceFolder): Promise<boolean> {\n\tif (folder.uri.scheme !== 'file') {\n\t\treturn false;\n\t}\n\n\tconst dotGit = path.join(folder.uri.fsPath, '.git');\n\n\ttry {\n\t\tconst dotGitStat = await new Promise<fs.Stats>((c, e) => fs.stat(dotGit, (err, stat) => err ? e(err) : c(stat)));\n\t\treturn dotGitStat.isDirectory();\n\t} catch (err) {\n\t\treturn false;\n\t}\n}\n\nasync function warnAboutMissingGit(): Promise<void> {\n\tconst config = workspace.getConfiguration('git');\n\tconst shouldIgnore = config.get<boolean>('ignoreMissingGitWarning') === true;\n\n\tif (shouldIgnore) {\n\t\treturn;\n\t}\n\n\tif (!workspace.workspaceFolders) {\n\t\treturn;\n\t}\n\n\tconst areGitRepositories = await Promise.all(workspace.workspaceFolders.map(isGitRepository));\n\n\tif (areGitRepositories.every(isGitRepository => !isGitRepository)) {\n\t\treturn;\n\t}\n\n\tconst download = l10n.t('Download Git');\n\tconst neverShowAgain = l10n.t('Don\\'t Show Again');\n\tconst choice = await window.showWarningMessage(\n\t\tl10n.t('Git not found. Install it or configure it using the \"git.path\" setting.'),\n\t\tdownload,\n\t\tneverShowAgain\n\t);\n\n\tif (choice === download) {\n\t\tcommands.executeCommand('vscode.open', Uri.parse('https://aka.ms/vscode-download-git'));\n\t} else if (choice === neverShowAgain) {\n\t\tawait config.update('ignoreMissingGitWarning', true, true);\n\t}\n}\n\nexport async function _activate(context: ExtensionContext): Promise<GitExtensionImpl> {\n\tconst disposables: Disposable[] = [];\n\tcontext.subscriptions.push(new Disposable(() => Disposable.from(...disposables).dispose()));\n\n\tconst logger = window.createOutputChannel('Git', { log: true });\n\tdisposables.push(logger);\n\n\tconst onDidChangeLogLevel = (logLevel: LogLevel) => {\n\t\tlogger.appendLine(l10n.t('[main] Log level: {0}', LogLevel[logLevel]));\n\t};\n\tdisposables.push(logger.onDidChangeLogLevel(onDidChangeLogLevel));\n\tonDidChangeLogLevel(logger.logLevel);\n\n\tconst { aiKey } = require('../package.json') as { aiKey: string };\n\tconst telemetryReporter = new TelemetryReporter(aiKey);\n\tdeactivateTasks.push(() => telemetryReporter.dispose());\n\n\tconst config = workspace.getConfiguration('git', null);\n\tconst enabled = config.get<boolean>('enabled');\n\n\tif (!enabled) {\n\t\tconst onConfigChange = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git'));\n\t\tconst onEnabled = filterEvent(onConfigChange, () => workspace.getConfiguration('git', null).get<boolean>('enabled') === true);\n\t\tconst result = new GitExtensionImpl();\n\n\t\teventToPromise(onEnabled).then(async () => result.model = await createModel(context, logger, telemetryReporter, disposables));\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tconst model = await createModel(context, logger, telemetryReporter, disposables);\n\t\treturn new GitExtensionImpl(model);\n\t} catch (err) {\n\t\tconsole.warn(err.message);\n\t\tlogger.warn(`[main] Failed to create model: ${err}`);\n\n\t\tif (!/Git installation not found/.test(err.message || '')) {\n\t\t\tthrow err;\n\t\t}\n\n\t\t/* __GDPR__\n\t\t\t\"git.missing\" : {\n\t\t\t\t\"owner\": \"lszomoru\"\n\t\t\t}\n\t\t*/\n\t\ttelemetryReporter.sendTelemetryEvent('git.missing');\n\n\t\tcommands.executeCommand('setContext', 'git.missing', true);\n\t\twarnAboutMissingGit();\n\n\t\treturn new GitExtensionImpl();\n\t} finally {\n\t\tdisposables.push(new GitProtocolHandler(logger));\n\t}\n}\n\nlet _context: ExtensionContext;\nexport function getExtensionContext(): ExtensionContext {\n\treturn _context;\n}\n\nexport async function activate(context: ExtensionContext): Promise<GitExtension> {\n\t_context = context;\n\n\tconst result = await _activate(context);\n\tcontext.subscriptions.push(registerAPICommands(result));\n\treturn result;\n}\n\nasync function checkGitv1(info: IGit): Promise<void> {\n\tconst config = workspace.getConfiguration('git');\n\tconst shouldIgnore = config.get<boolean>('ignoreLegacyWarning') === true;\n\n\tif (shouldIgnore) {\n\t\treturn;\n\t}\n\n\tif (!/^[01]/.test(info.version)) {\n\t\treturn;\n\t}\n\n\tconst update = l10n.t('Update Git');\n\tconst neverShowAgain = l10n.t('Don\\'t Show Again');\n\n\tconst choice = await window.showWarningMessage(\n\t\tl10n.t('You seem to have git \"{0}\" installed. Code works best with git >= 2', info.version),\n\t\tupdate,\n\t\tneverShowAgain\n\t);\n\n\tif (choice === update) {\n\t\tcommands.executeCommand('vscode.open', Uri.parse('https://aka.ms/vscode-download-git'));\n\t} else if (choice === neverShowAgain) {\n\t\tawait config.update('ignoreLegacyWarning', true, true);\n\t}\n}\n\nasync function checkGitWindows(info: IGit): Promise<void> {\n\tif (!/^2\\.(25|26)\\./.test(info.version)) {\n\t\treturn;\n\t}\n\n\tconst config = workspace.getConfiguration('git');\n\tconst shouldIgnore = config.get<boolean>('ignoreWindowsGit27Warning') === true;\n\n\tif (shouldIgnore) {\n\t\treturn;\n\t}\n\n\tconst update = l10n.t('Update Git');\n\tconst neverShowAgain = l10n.t('Don\\'t Show Again');\n\tconst choice = await window.showWarningMessage(\n\t\tl10n.t('There are known issues with the installed Git \"{0}\". Please update to Git >= 2.27 for the git features to work correctly.', info.version),\n\t\tupdate,\n\t\tneverShowAgain\n\t);\n\n\tif (choice === update) {\n\t\tcommands.executeCommand('vscode.open', Uri.parse('https://aka.ms/vscode-download-git'));\n\t} else if (choice === neverShowAgain) {\n\t\tawait config.update('ignoreWindowsGit27Warning', true, true);\n\t}\n}\n\nasync function checkGitVersion(info: IGit): Promise<void> {\n\tawait checkGitv1(info);\n\n\tif (process.platform === 'win32') {\n\t\tawait checkGitWindows(info);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/model.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { workspace, WorkspaceFoldersChangeEvent, Uri, window, Event, EventEmitter, QuickPickItem, Disposable, SourceControl, SourceControlResourceGroup, TextEditor, Memento, commands, LogOutputChannel, l10n, ProgressLocation, WorkspaceFolder } from 'vscode';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { IRepositoryResolver, Repository, RepositoryState } from './repository';\nimport { memoize, sequentialize, debounce } from './decorators';\nimport { dispose, anyEvent, filterEvent, isDescendant, pathEquals, toDisposable, eventToPromise } from './util';\nimport { Git } from './git';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { fromGitUri } from './uri';\nimport { APIState as State, CredentialsProvider, PushErrorHandler, PublishEvent, RemoteSourcePublisher, PostCommitCommandsProvider, BranchProtectionProvider, SourceControlHistoryItemDetailsProvider } from './api/git';\nimport { Askpass } from './askpass';\nimport { IPushErrorHandlerRegistry } from './pushError';\nimport { ApiRepository } from './api/api1';\nimport { IRemoteSourcePublisherRegistry } from './remotePublisher';\nimport { IPostCommitCommandsProviderRegistry } from './postCommitCommands';\nimport { IBranchProtectionProviderRegistry } from './branchProtection';\nimport { ISourceControlHistoryItemDetailsProviderRegistry } from './historyItemDetailsProvider';\n\nclass RepositoryPick implements QuickPickItem {\n\t@memoize get label(): string {\n\t\treturn path.basename(this.repository.root);\n\t}\n\n\t@memoize get description(): string {\n\t\treturn [this.repository.headLabel, this.repository.syncLabel]\n\t\t\t.filter(l => !!l)\n\t\t\t.join(' ');\n\t}\n\n\tconstructor(public readonly repository: Repository, public readonly index: number) { }\n}\n\nexport interface ModelChangeEvent {\n\trepository: Repository;\n\turi: Uri;\n}\n\nexport interface OriginalResourceChangeEvent {\n\trepository: Repository;\n\turi: Uri;\n}\n\ninterface OpenRepository extends Disposable {\n\trepository: Repository;\n}\n\nclass ClosedRepositoriesManager {\n\n\tprivate _repositories: Set<string>;\n\tget repositories(): string[] {\n\t\treturn [...this._repositories.values()];\n\t}\n\n\tconstructor(private readonly workspaceState: Memento) {\n\t\tthis._repositories = new Set<string>(workspaceState.get<string[]>('closedRepositories', []));\n\t\tthis.onDidChangeRepositories();\n\t}\n\n\taddRepository(repository: string): void {\n\t\tthis._repositories.add(repository);\n\t\tthis.onDidChangeRepositories();\n\t}\n\n\tdeleteRepository(repository: string): boolean {\n\t\tconst result = this._repositories.delete(repository);\n\t\tif (result) {\n\t\t\tthis.onDidChangeRepositories();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tisRepositoryClosed(repository: string): boolean {\n\t\treturn this._repositories.has(repository);\n\t}\n\n\tprivate onDidChangeRepositories(): void {\n\t\tthis.workspaceState.update('closedRepositories', [...this._repositories.values()]);\n\t\tcommands.executeCommand('setContext', 'git.closedRepositoryCount', this._repositories.size);\n\t}\n}\n\nclass ParentRepositoriesManager {\n\n\t/**\n\t * Key   - normalized path used in user interface\n\t * Value - value indicating whether the repository should be opened\n\t */\n\tprivate _repositories = new Set<string>;\n\tget repositories(): string[] {\n\t\treturn [...this._repositories.values()];\n\t}\n\n\tconstructor(private readonly globalState: Memento) {\n\t\tthis.onDidChangeRepositories();\n\t}\n\n\taddRepository(repository: string): void {\n\t\tthis._repositories.add(repository);\n\t\tthis.onDidChangeRepositories();\n\t}\n\n\tdeleteRepository(repository: string): boolean {\n\t\tconst result = this._repositories.delete(repository);\n\t\tif (result) {\n\t\t\tthis.onDidChangeRepositories();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\thasRepository(repository: string): boolean {\n\t\treturn this._repositories.has(repository);\n\t}\n\n\topenRepository(repository: string): void {\n\t\tthis.globalState.update(`parentRepository:${repository}`, true);\n\t\tthis.deleteRepository(repository);\n\t}\n\n\tprivate onDidChangeRepositories(): void {\n\t\tcommands.executeCommand('setContext', 'git.parentRepositoryCount', this._repositories.size);\n\t}\n}\n\nclass UnsafeRepositoriesManager {\n\n\t/**\n\t * Key   - normalized path used in user interface\n\t * Value - path extracted from the output of the `git status` command\n\t *         used when calling `git config --global --add safe.directory`\n\t */\n\tprivate _repositories = new Map<string, string>();\n\tget repositories(): string[] {\n\t\treturn [...this._repositories.keys()];\n\t}\n\n\tconstructor() {\n\t\tthis.onDidChangeRepositories();\n\t}\n\n\taddRepository(repository: string, path: string): void {\n\t\tthis._repositories.set(repository, path);\n\t\tthis.onDidChangeRepositories();\n\t}\n\n\tdeleteRepository(repository: string): boolean {\n\t\tconst result = this._repositories.delete(repository);\n\t\tif (result) {\n\t\t\tthis.onDidChangeRepositories();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tgetRepositoryPath(repository: string): string | undefined {\n\t\treturn this._repositories.get(repository);\n\t}\n\n\thasRepository(repository: string): boolean {\n\t\treturn this._repositories.has(repository);\n\t}\n\n\tprivate onDidChangeRepositories(): void {\n\t\tcommands.executeCommand('setContext', 'git.unsafeRepositoryCount', this._repositories.size);\n\t}\n}\n\nexport class Model implements IRepositoryResolver, IBranchProtectionProviderRegistry, IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry, ISourceControlHistoryItemDetailsProviderRegistry {\n\n\tprivate _onDidOpenRepository = new EventEmitter<Repository>();\n\treadonly onDidOpenRepository: Event<Repository> = this._onDidOpenRepository.event;\n\n\tprivate _onDidCloseRepository = new EventEmitter<Repository>();\n\treadonly onDidCloseRepository: Event<Repository> = this._onDidCloseRepository.event;\n\n\tprivate _onDidChangeRepository = new EventEmitter<ModelChangeEvent>();\n\treadonly onDidChangeRepository: Event<ModelChangeEvent> = this._onDidChangeRepository.event;\n\n\tprivate _onDidChangeOriginalResource = new EventEmitter<OriginalResourceChangeEvent>();\n\treadonly onDidChangeOriginalResource: Event<OriginalResourceChangeEvent> = this._onDidChangeOriginalResource.event;\n\n\tprivate openRepositories: OpenRepository[] = [];\n\tget repositories(): Repository[] { return this.openRepositories.map(r => r.repository); }\n\n\tprivate possibleGitRepositoryPaths = new Set<string>();\n\n\tprivate _onDidChangeState = new EventEmitter<State>();\n\treadonly onDidChangeState = this._onDidChangeState.event;\n\n\tprivate _onDidPublish = new EventEmitter<PublishEvent>();\n\treadonly onDidPublish = this._onDidPublish.event;\n\n\tfirePublishEvent(repository: Repository, branch?: string) {\n\t\tthis._onDidPublish.fire({ repository: new ApiRepository(repository), branch: branch });\n\t}\n\n\tprivate _state: State = 'uninitialized';\n\tget state(): State { return this._state; }\n\n\tsetState(state: State): void {\n\t\tthis._state = state;\n\t\tthis._onDidChangeState.fire(state);\n\t\tcommands.executeCommand('setContext', 'git.state', state);\n\t}\n\n\t@memoize\n\tget isInitialized(): Promise<void> {\n\t\tif (this._state === 'initialized') {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\treturn eventToPromise(filterEvent(this.onDidChangeState, s => s === 'initialized')) as Promise<any>;\n\t}\n\n\tprivate remoteSourcePublishers = new Set<RemoteSourcePublisher>();\n\n\tprivate _onDidAddRemoteSourcePublisher = new EventEmitter<RemoteSourcePublisher>();\n\treadonly onDidAddRemoteSourcePublisher = this._onDidAddRemoteSourcePublisher.event;\n\n\tprivate _onDidRemoveRemoteSourcePublisher = new EventEmitter<RemoteSourcePublisher>();\n\treadonly onDidRemoveRemoteSourcePublisher = this._onDidRemoveRemoteSourcePublisher.event;\n\n\tprivate postCommitCommandsProviders = new Set<PostCommitCommandsProvider>();\n\n\tprivate _onDidChangePostCommitCommandsProviders = new EventEmitter<void>();\n\treadonly onDidChangePostCommitCommandsProviders = this._onDidChangePostCommitCommandsProviders.event;\n\n\tprivate branchProtectionProviders = new Map<string, Set<BranchProtectionProvider>>();\n\n\tprivate _onDidChangeBranchProtectionProviders = new EventEmitter<Uri>();\n\treadonly onDidChangeBranchProtectionProviders = this._onDidChangeBranchProtectionProviders.event;\n\n\tprivate pushErrorHandlers = new Set<PushErrorHandler>();\n\tprivate historyItemDetailsProviders = new Set<SourceControlHistoryItemDetailsProvider>();\n\n\tprivate _unsafeRepositoriesManager: UnsafeRepositoriesManager;\n\tget unsafeRepositories(): string[] {\n\t\treturn this._unsafeRepositoriesManager.repositories;\n\t}\n\n\tprivate _parentRepositoriesManager: ParentRepositoriesManager;\n\tget parentRepositories(): string[] {\n\t\treturn this._parentRepositoriesManager.repositories;\n\t}\n\n\tprivate _closedRepositoriesManager: ClosedRepositoriesManager;\n\tget closedRepositories(): string[] {\n\t\treturn [...this._closedRepositoriesManager.repositories];\n\t}\n\n\t/**\n\t * We maintain a map containing both the path and the canonical path of the\n\t * workspace folders. We are doing this as `git.exe` expands the symbolic links\n\t * while there are scenarios in which VS Code does not.\n\t *\n\t * Key   - path of the workspace folder\n\t * Value - canonical path of the workspace folder\n\t */\n\tprivate _workspaceFolders = new Map<string, string>();\n\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(readonly git: Git, private readonly askpass: Askpass, private globalState: Memento, readonly workspaceState: Memento, private logger: LogOutputChannel, private telemetryReporter: TelemetryReporter) {\n\t\t// Repositories managers\n\t\tthis._closedRepositoriesManager = new ClosedRepositoriesManager(workspaceState);\n\t\tthis._parentRepositoriesManager = new ParentRepositoriesManager(globalState);\n\t\tthis._unsafeRepositoriesManager = new UnsafeRepositoriesManager();\n\n\t\tworkspace.onDidChangeWorkspaceFolders(this.onDidChangeWorkspaceFolders, this, this.disposables);\n\t\twindow.onDidChangeVisibleTextEditors(this.onDidChangeVisibleTextEditors, this, this.disposables);\n\t\twindow.onDidChangeActiveTextEditor(this.onDidChangeActiveTextEditor, this, this.disposables);\n\t\tworkspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this.disposables);\n\n\t\tconst fsWatcher = workspace.createFileSystemWatcher('**');\n\t\tthis.disposables.push(fsWatcher);\n\n\t\tconst onWorkspaceChange = anyEvent(fsWatcher.onDidChange, fsWatcher.onDidCreate, fsWatcher.onDidDelete);\n\t\tconst onGitRepositoryChange = filterEvent(onWorkspaceChange, uri => /\\/\\.git/.test(uri.path));\n\t\tconst onPossibleGitRepositoryChange = filterEvent(onGitRepositoryChange, uri => !this.getRepository(uri));\n\t\tonPossibleGitRepositoryChange(this.onPossibleGitRepositoryChange, this, this.disposables);\n\n\t\tthis.setState('uninitialized');\n\t\tthis.doInitialScan().finally(() => this.setState('initialized'));\n\t}\n\n\tprivate async doInitialScan(): Promise<void> {\n\t\tthis.logger.info('[Model][doInitialScan] Initial repository scan started');\n\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst autoRepositoryDetection = config.get<boolean | 'subFolders' | 'openEditors'>('autoRepositoryDetection');\n\t\tconst parentRepositoryConfig = config.get<'always' | 'never' | 'prompt'>('openRepositoryInParentFolders', 'prompt');\n\n\t\tthis.logger.trace(`[Model][doInitialScan] Settings: autoRepositoryDetection=${autoRepositoryDetection}, openRepositoryInParentFolders=${parentRepositoryConfig}`);\n\n\t\t// Initial repository scan function\n\t\tconst initialScanFn = () => Promise.all([\n\t\t\tthis.onDidChangeWorkspaceFolders({ added: workspace.workspaceFolders || [], removed: [] }),\n\t\t\tthis.onDidChangeVisibleTextEditors(window.visibleTextEditors),\n\t\t\tthis.scanWorkspaceFolders()\n\t\t]);\n\n\t\tif (config.get<boolean>('showProgress', true)) {\n\t\t\tawait window.withProgress({ location: ProgressLocation.SourceControl }, initialScanFn);\n\t\t} else {\n\t\t\tawait initialScanFn();\n\t\t}\n\n\t\tif (this.parentRepositories.length !== 0 &&\n\t\t\tparentRepositoryConfig === 'prompt') {\n\t\t\t// Parent repositories notification\n\t\t\tthis.showParentRepositoryNotification();\n\t\t} else if (this.unsafeRepositories.length !== 0) {\n\t\t\t// Unsafe repositories notification\n\t\t\tthis.showUnsafeRepositoryNotification();\n\t\t}\n\n\t\t/* __GDPR__\n\t\t\t\"git.repositoryInitialScan\" : {\n\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\"autoRepositoryDetection\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Setting that controls the initial repository scan\" },\n\t\t\t\t\"repositoryCount\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Number of repositories opened during initial repository scan\" }\n\t\t\t}\n\t\t*/\n\t\tthis.telemetryReporter.sendTelemetryEvent('git.repositoryInitialScan', { autoRepositoryDetection: String(autoRepositoryDetection) }, { repositoryCount: this.openRepositories.length });\n\t\tthis.logger.info(`[Model][doInitialScan] Initial repository scan completed - repositories (${this.repositories.length}), closed repositories (${this.closedRepositories.length}), parent repositories (${this.parentRepositories.length}), unsafe repositories (${this.unsafeRepositories.length})`);\n\t}\n\n\t/**\n\t * Scans each workspace folder, looking for git repositories. By\n\t * default it scans one level deep but that can be changed using\n\t * the git.repositoryScanMaxDepth setting.\n\t */\n\tprivate async scanWorkspaceFolders(): Promise<void> {\n\t\ttry {\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tconst autoRepositoryDetection = config.get<boolean | 'subFolders' | 'openEditors'>('autoRepositoryDetection');\n\n\t\t\tif (autoRepositoryDetection !== true && autoRepositoryDetection !== 'subFolders') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait Promise.all((workspace.workspaceFolders || []).map(async folder => {\n\t\t\t\tconst root = folder.uri.fsPath;\n\t\t\t\tthis.logger.trace(`[Model][scanWorkspaceFolders] Workspace folder: ${root}`);\n\n\t\t\t\t// Workspace folder children\n\t\t\t\tconst repositoryScanMaxDepth = (workspace.isTrusted ? workspace.getConfiguration('git', folder.uri) : config).get<number>('repositoryScanMaxDepth', 1);\n\t\t\t\tconst repositoryScanIgnoredFolders = (workspace.isTrusted ? workspace.getConfiguration('git', folder.uri) : config).get<string[]>('repositoryScanIgnoredFolders', []);\n\n\t\t\t\tconst subfolders = new Set(await this.traverseWorkspaceFolder(root, repositoryScanMaxDepth, repositoryScanIgnoredFolders));\n\n\t\t\t\t// Repository scan folders\n\t\t\t\tconst scanPaths = (workspace.isTrusted ? workspace.getConfiguration('git', folder.uri) : config).get<string[]>('scanRepositories') || [];\n\t\t\t\tthis.logger.trace(`[Model][scanWorkspaceFolders] Workspace scan settings: repositoryScanMaxDepth=${repositoryScanMaxDepth}; repositoryScanIgnoredFolders=[${repositoryScanIgnoredFolders.join(', ')}]; scanRepositories=[${scanPaths.join(', ')}]`);\n\n\t\t\t\tfor (const scanPath of scanPaths) {\n\t\t\t\t\tif (scanPath === '.git') {\n\t\t\t\t\t\tthis.logger.trace('[Model][scanWorkspaceFolders] \\'.git\\' not supported in \\'git.scanRepositories\\' setting.');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (path.isAbsolute(scanPath)) {\n\t\t\t\t\t\tconst notSupportedMessage = l10n.t('Absolute paths not supported in \"git.scanRepositories\" setting.');\n\t\t\t\t\t\tthis.logger.warn(`[Model][scanWorkspaceFolders] ${notSupportedMessage}`);\n\t\t\t\t\t\tconsole.warn(notSupportedMessage);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubfolders.add(path.join(root, scanPath));\n\t\t\t\t}\n\n\t\t\t\tthis.logger.trace(`[Model][scanWorkspaceFolders] Workspace scan sub folders: [${[...subfolders].join(', ')}]`);\n\t\t\t\tawait Promise.all([...subfolders].map(f => this.openRepository(f)));\n\t\t\t}));\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.warn(`[Model][scanWorkspaceFolders] Error: ${err}`);\n\t\t}\n\t}\n\n\tprivate async traverseWorkspaceFolder(workspaceFolder: string, maxDepth: number, repositoryScanIgnoredFolders: string[]): Promise<string[]> {\n\t\tconst result: string[] = [];\n\t\tconst foldersToTravers = [{ path: workspaceFolder, depth: 0 }];\n\n\t\twhile (foldersToTravers.length > 0) {\n\t\t\tconst currentFolder = foldersToTravers.shift()!;\n\n\t\t\tconst children: fs.Dirent[] = [];\n\t\t\ttry {\n\t\t\t\tchildren.push(...await fs.promises.readdir(currentFolder.path, { withFileTypes: true }));\n\n\t\t\t\tif (currentFolder.depth !== 0) {\n\t\t\t\t\tresult.push(currentFolder.path);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis.logger.warn(`[Model][traverseWorkspaceFolder] Unable to read workspace folder '${currentFolder.path}': ${err}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (currentFolder.depth < maxDepth || maxDepth === -1) {\n\t\t\t\tconst childrenFolders = children\n\t\t\t\t\t.filter(dirent =>\n\t\t\t\t\t\tdirent.isDirectory() && dirent.name !== '.git' &&\n\t\t\t\t\t\t!repositoryScanIgnoredFolders.find(f => pathEquals(dirent.name, f)))\n\t\t\t\t\t.map(dirent => path.join(currentFolder.path, dirent.name));\n\n\t\t\t\tfoldersToTravers.push(...childrenFolders.map(folder => {\n\t\t\t\t\treturn { path: folder, depth: currentFolder.depth + 1 };\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate onPossibleGitRepositoryChange(uri: Uri): void {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst autoRepositoryDetection = config.get<boolean | 'subFolders' | 'openEditors'>('autoRepositoryDetection');\n\n\t\tif (autoRepositoryDetection === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.eventuallyScanPossibleGitRepository(uri.fsPath.replace(/\\.git.*$/, ''));\n\t}\n\n\tprivate eventuallyScanPossibleGitRepository(path: string) {\n\t\tthis.possibleGitRepositoryPaths.add(path);\n\t\tthis.eventuallyScanPossibleGitRepositories();\n\t}\n\n\t@debounce(500)\n\tprivate eventuallyScanPossibleGitRepositories(): void {\n\t\tfor (const path of this.possibleGitRepositoryPaths) {\n\t\t\tthis.openRepository(path);\n\t\t}\n\n\t\tthis.possibleGitRepositoryPaths.clear();\n\t}\n\n\tprivate async onDidChangeWorkspaceFolders({ added, removed }: WorkspaceFoldersChangeEvent): Promise<void> {\n\t\ttry {\n\t\t\tconst possibleRepositoryFolders = added\n\t\t\t\t.filter(folder => !this.getOpenRepository(folder.uri));\n\n\t\t\tconst activeRepositoriesList = window.visibleTextEditors\n\t\t\t\t.map(editor => this.getRepository(editor.document.uri))\n\t\t\t\t.filter(repository => !!repository) as Repository[];\n\n\t\t\tconst activeRepositories = new Set<Repository>(activeRepositoriesList);\n\t\t\tconst openRepositoriesToDispose = removed\n\t\t\t\t.map(folder => this.getOpenRepository(folder.uri))\n\t\t\t\t.filter(r => !!r)\n\t\t\t\t.filter(r => !activeRepositories.has(r!.repository))\n\t\t\t\t.filter(r => !(workspace.workspaceFolders || []).some(f => isDescendant(f.uri.fsPath, r!.repository.root))) as OpenRepository[];\n\n\t\t\topenRepositoriesToDispose.forEach(r => r.dispose());\n\t\t\tthis.logger.trace(`[Model][onDidChangeWorkspaceFolders] Workspace folders: [${possibleRepositoryFolders.map(p => p.uri.fsPath).join(', ')}]`);\n\t\t\tawait Promise.all(possibleRepositoryFolders.map(p => this.openRepository(p.uri.fsPath)));\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.warn(`[Model][onDidChangeWorkspaceFolders] Error: ${err}`);\n\t\t}\n\t}\n\n\tprivate onDidChangeConfiguration(): void {\n\t\tconst possibleRepositoryFolders = (workspace.workspaceFolders || [])\n\t\t\t.filter(folder => workspace.getConfiguration('git', folder.uri).get<boolean>('enabled') === true)\n\t\t\t.filter(folder => !this.getOpenRepository(folder.uri));\n\n\t\tconst openRepositoriesToDispose = this.openRepositories\n\t\t\t.map(repository => ({ repository, root: Uri.file(repository.repository.root) }))\n\t\t\t.filter(({ root }) => workspace.getConfiguration('git', root).get<boolean>('enabled') !== true)\n\t\t\t.map(({ repository }) => repository);\n\n\t\tthis.logger.trace(`[Model][onDidChangeConfiguration] Workspace folders: [${possibleRepositoryFolders.map(p => p.uri.fsPath).join(', ')}]`);\n\t\tpossibleRepositoryFolders.forEach(p => this.openRepository(p.uri.fsPath));\n\t\topenRepositoriesToDispose.forEach(r => r.dispose());\n\t}\n\n\tprivate async onDidChangeVisibleTextEditors(editors: readonly TextEditor[]): Promise<void> {\n\t\ttry {\n\t\t\tif (!workspace.isTrusted) {\n\t\t\t\tthis.logger.trace('[Model][onDidChangeVisibleTextEditors] Workspace is not trusted.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tconst autoRepositoryDetection = config.get<boolean | 'subFolders' | 'openEditors'>('autoRepositoryDetection');\n\n\t\t\tif (autoRepositoryDetection !== true && autoRepositoryDetection !== 'openEditors') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait Promise.all(editors.map(async editor => {\n\t\t\t\tconst uri = editor.document.uri;\n\n\t\t\t\tif (uri.scheme !== 'file') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst repository = this.getRepository(uri);\n\n\t\t\t\tif (repository) {\n\t\t\t\t\tthis.logger.trace(`[Model][onDidChangeVisibleTextEditors] Repository for editor resource ${uri.fsPath} already exists: ${repository.root}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.logger.trace(`[Model][onDidChangeVisibleTextEditors] Open repository for editor resource ${uri.fsPath}`);\n\t\t\t\tawait this.openRepository(path.dirname(uri.fsPath));\n\t\t\t}));\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.warn(`[Model][onDidChangeVisibleTextEditors] Error: ${err}`);\n\t\t}\n\t}\n\n\tprivate onDidChangeActiveTextEditor(): void {\n\t\tconst textEditor = window.activeTextEditor;\n\n\t\tif (textEditor === undefined) {\n\t\t\tcommands.executeCommand('setContext', 'git.activeResourceHasUnstagedChanges', false);\n\t\t\tcommands.executeCommand('setContext', 'git.activeResourceHasStagedChanges', false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst repository = this.getRepository(textEditor.document.uri);\n\t\tif (!repository) {\n\t\t\tcommands.executeCommand('setContext', 'git.activeResourceHasUnstagedChanges', false);\n\t\t\tcommands.executeCommand('setContext', 'git.activeResourceHasStagedChanges', false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexResource = repository.indexGroup.resourceStates\n\t\t\t.find(resource => pathEquals(resource.resourceUri.fsPath, textEditor.document.uri.fsPath));\n\t\tconst workingTreeResource = repository.workingTreeGroup.resourceStates\n\t\t\t.find(resource => pathEquals(resource.resourceUri.fsPath, textEditor.document.uri.fsPath));\n\n\t\tcommands.executeCommand('setContext', 'git.activeResourceHasStagedChanges', indexResource !== undefined);\n\t\tcommands.executeCommand('setContext', 'git.activeResourceHasUnstagedChanges', workingTreeResource !== undefined);\n\t}\n\n\t@sequentialize\n\tasync openRepository(repoPath: string, openIfClosed = false): Promise<void> {\n\t\tthis.logger.trace(`[Model][openRepository] Repository: ${repoPath}`);\n\t\tconst existingRepository = await this.getRepositoryExact(repoPath);\n\t\tif (existingRepository) {\n\t\t\tthis.logger.trace(`[Model][openRepository] Repository for path ${repoPath} already exists: ${existingRepository.root}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repoPath));\n\t\tconst enabled = config.get<boolean>('enabled') === true;\n\n\t\tif (!enabled) {\n\t\t\tthis.logger.trace('[Model][openRepository] Git is not enabled');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!workspace.isTrusted) {\n\t\t\t// Check if the folder is a bare repo: if it has a file named HEAD && `rev-parse --show -cdup` is empty\n\t\t\ttry {\n\t\t\t\tfs.accessSync(path.join(repoPath, 'HEAD'), fs.constants.F_OK);\n\t\t\t\tconst result = await this.git.exec(repoPath, ['-C', repoPath, 'rev-parse', '--show-cdup']);\n\t\t\t\tif (result.stderr.trim() === '' && result.stdout.trim() === '') {\n\t\t\t\t\tthis.logger.trace(`[Model][openRepository] Bare repository: ${repoPath}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// If this throw, we should be good to open the repo (e.g. HEAD doesn't exist)\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst { repositoryRoot, unsafeRepositoryMatch } = await this.getRepositoryRoot(repoPath);\n\t\t\tthis.logger.trace(`[Model][openRepository] Repository root for path ${repoPath} is: ${repositoryRoot}`);\n\n\t\t\tconst existingRepository = await this.getRepositoryExact(repositoryRoot);\n\t\t\tif (existingRepository) {\n\t\t\t\tthis.logger.trace(`[Model][openRepository] Repository for path ${repositoryRoot} already exists: ${existingRepository.root}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.shouldRepositoryBeIgnored(repositoryRoot)) {\n\t\t\t\tthis.logger.trace(`[Model][openRepository] Repository for path ${repositoryRoot} is ignored`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle git repositories that are in parent folders\n\t\t\tconst parentRepositoryConfig = config.get<'always' | 'never' | 'prompt'>('openRepositoryInParentFolders', 'prompt');\n\t\t\tif (parentRepositoryConfig !== 'always' && this.globalState.get<boolean>(`parentRepository:${repositoryRoot}`) !== true) {\n\t\t\t\tconst isRepositoryOutsideWorkspace = await this.isRepositoryOutsideWorkspace(repositoryRoot);\n\t\t\t\tif (isRepositoryOutsideWorkspace) {\n\t\t\t\t\tthis.logger.trace(`[Model][openRepository] Repository in parent folder: ${repositoryRoot}`);\n\n\t\t\t\t\tif (!this._parentRepositoriesManager.hasRepository(repositoryRoot)) {\n\t\t\t\t\t\t// Show a notification if the parent repository is opened after the initial scan\n\t\t\t\t\t\tif (this.state === 'initialized' && parentRepositoryConfig === 'prompt') {\n\t\t\t\t\t\t\tthis.showParentRepositoryNotification();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._parentRepositoriesManager.addRepository(repositoryRoot);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Handle unsafe repositories\n\t\t\tif (unsafeRepositoryMatch && unsafeRepositoryMatch.length === 3) {\n\t\t\t\tthis.logger.trace(`[Model][openRepository] Unsafe repository: ${repositoryRoot}`);\n\n\t\t\t\t// Show a notification if the unsafe repository is opened after the initial scan\n\t\t\t\tif (this._state === 'initialized' && !this._unsafeRepositoriesManager.hasRepository(repositoryRoot)) {\n\t\t\t\t\tthis.showUnsafeRepositoryNotification();\n\t\t\t\t}\n\n\t\t\t\tthis._unsafeRepositoriesManager.addRepository(repositoryRoot, unsafeRepositoryMatch[2]);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle repositories that were closed by the user\n\t\t\tif (!openIfClosed && this._closedRepositoriesManager.isRepositoryClosed(repositoryRoot)) {\n\t\t\t\tthis.logger.trace(`[Model][openRepository] Repository for path ${repositoryRoot} is closed`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Open repository\n\t\t\tconst [dotGit, repositoryRootRealPath] = await Promise.all([this.git.getRepositoryDotGit(repositoryRoot), this.getRepositoryRootRealPath(repositoryRoot)]);\n\t\t\tconst repository = new Repository(this.git.open(repositoryRoot, repositoryRootRealPath, dotGit, this.logger), this, this, this, this, this, this, this.globalState, this.logger, this.telemetryReporter);\n\n\t\t\tthis.open(repository);\n\t\t\tthis._closedRepositoriesManager.deleteRepository(repository.root);\n\n\t\t\tthis.logger.info(`[Model][openRepository] Opened repository: ${repository.root}`);\n\n\t\t\t// Do not await this, we want SCM\n\t\t\t// to know about the repo asap\n\t\t\trepository.status();\n\t\t} catch (err) {\n\t\t\t// noop\n\t\t\tthis.logger.trace(`[Model][openRepository] Opening repository for path='${repoPath}' failed. Error:${err}`);\n\t\t}\n\t}\n\n\tasync openParentRepository(repoPath: string): Promise<void> {\n\t\tthis._parentRepositoriesManager.openRepository(repoPath);\n\t\tawait this.openRepository(repoPath);\n\t}\n\n\tprivate async getRepositoryRoot(repoPath: string): Promise<{ repositoryRoot: string; unsafeRepositoryMatch: RegExpMatchArray | null }> {\n\t\ttry {\n\t\t\tconst rawRoot = await this.git.getRepositoryRoot(repoPath);\n\n\t\t\t// This can happen whenever `path` has the wrong case sensitivity in case\n\t\t\t// insensitive file systems https://github.com/microsoft/vscode/issues/33498\n\t\t\treturn { repositoryRoot: Uri.file(rawRoot).fsPath, unsafeRepositoryMatch: null };\n\t\t} catch (err) {\n\t\t\t// Handle unsafe repository\n\t\t\tconst unsafeRepositoryMatch = /^fatal: detected dubious ownership in repository at \\'([^']+)\\'[\\s\\S]*git config --global --add safe\\.directory '?([^'\\n]+)'?$/m.exec(err.stderr);\n\t\t\tif (unsafeRepositoryMatch && unsafeRepositoryMatch.length === 3) {\n\t\t\t\treturn { repositoryRoot: path.normalize(unsafeRepositoryMatch[1]), unsafeRepositoryMatch };\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate async getRepositoryRootRealPath(repositoryRoot: string): Promise<string | undefined> {\n\t\ttry {\n\t\t\tconst repositoryRootRealPath = await fs.promises.realpath(repositoryRoot);\n\t\t\treturn !pathEquals(repositoryRoot, repositoryRootRealPath) ? repositoryRootRealPath : undefined;\n\t\t} catch (err) {\n\t\t\tthis.logger.warn(`[Model][getRepositoryRootRealPath] Failed to get repository realpath for \"${repositoryRoot}\": ${err}`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate shouldRepositoryBeIgnored(repositoryRoot: string): boolean {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst ignoredRepos = config.get<string[]>('ignoredRepositories') || [];\n\n\t\tfor (const ignoredRepo of ignoredRepos) {\n\t\t\tif (path.isAbsolute(ignoredRepo)) {\n\t\t\t\tif (pathEquals(ignoredRepo, repositoryRoot)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const folder of workspace.workspaceFolders || []) {\n\t\t\t\t\tif (pathEquals(path.join(folder.uri.fsPath, ignoredRepo), repositoryRoot)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate open(repository: Repository): void {\n\t\tthis.logger.trace(`[Model][open] Repository: ${repository.root}`);\n\n\t\tconst onDidDisappearRepository = filterEvent(repository.onDidChangeState, state => state === RepositoryState.Disposed);\n\t\tconst disappearListener = onDidDisappearRepository(() => dispose());\n\t\tconst changeListener = repository.onDidChangeRepository(uri => this._onDidChangeRepository.fire({ repository, uri }));\n\t\tconst originalResourceChangeListener = repository.onDidChangeOriginalResource(uri => this._onDidChangeOriginalResource.fire({ repository, uri }));\n\n\t\tconst shouldDetectSubmodules = workspace\n\t\t\t.getConfiguration('git', Uri.file(repository.root))\n\t\t\t.get<boolean>('detectSubmodules') as boolean;\n\n\t\tconst submodulesLimit = workspace\n\t\t\t.getConfiguration('git', Uri.file(repository.root))\n\t\t\t.get<number>('detectSubmodulesLimit') as number;\n\n\t\tconst checkForSubmodules = () => {\n\t\t\tif (!shouldDetectSubmodules) {\n\t\t\t\tthis.logger.trace('[Model][open] Automatic detection of git submodules is not enabled.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (repository.submodules.length > submodulesLimit) {\n\t\t\t\twindow.showWarningMessage(l10n.t('The \"{0}\" repository has {1} submodules which won\\'t be opened automatically. You can still open each one individually by opening a file within.', path.basename(repository.root), repository.submodules.length));\n\t\t\t\tstatusListener.dispose();\n\t\t\t}\n\n\t\t\trepository.submodules\n\t\t\t\t.slice(0, submodulesLimit)\n\t\t\t\t.map(r => path.join(repository.root, r.path))\n\t\t\t\t.forEach(p => {\n\t\t\t\t\tthis.logger.trace(`[Model][open] Opening submodule: '${p}'`);\n\t\t\t\t\tthis.eventuallyScanPossibleGitRepository(p);\n\t\t\t\t});\n\t\t};\n\n\t\tconst updateMergeChanges = () => {\n\t\t\t// set mergeChanges context\n\t\t\tconst mergeChanges: Uri[] = [];\n\t\t\tfor (const { repository } of this.openRepositories.values()) {\n\t\t\t\tfor (const state of repository.mergeGroup.resourceStates) {\n\t\t\t\t\tmergeChanges.push(state.resourceUri);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcommands.executeCommand('setContext', 'git.mergeChanges', mergeChanges);\n\t\t};\n\n\t\tconst statusListener = repository.onDidRunGitStatus(() => {\n\t\t\tcheckForSubmodules();\n\t\t\tupdateMergeChanges();\n\t\t\tthis.onDidChangeActiveTextEditor();\n\t\t});\n\t\tcheckForSubmodules();\n\t\tthis.onDidChangeActiveTextEditor();\n\n\t\tconst updateOperationInProgressContext = () => {\n\t\t\tlet operationInProgress = false;\n\t\t\tfor (const { repository } of this.openRepositories.values()) {\n\t\t\t\tif (repository.operations.shouldDisableCommands()) {\n\t\t\t\t\toperationInProgress = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommands.executeCommand('setContext', 'operationInProgress', operationInProgress);\n\t\t};\n\n\t\tconst operationEvent = anyEvent(repository.onDidRunOperation as Event<any>, repository.onRunOperation as Event<any>);\n\t\tconst operationListener = operationEvent(() => updateOperationInProgressContext());\n\t\tupdateOperationInProgressContext();\n\n\t\tconst dispose = () => {\n\t\t\tdisappearListener.dispose();\n\t\t\tchangeListener.dispose();\n\t\t\toriginalResourceChangeListener.dispose();\n\t\t\tstatusListener.dispose();\n\t\t\toperationListener.dispose();\n\t\t\trepository.dispose();\n\n\t\t\tthis.openRepositories = this.openRepositories.filter(e => e !== openRepository);\n\t\t\tthis._onDidCloseRepository.fire(repository);\n\t\t};\n\n\t\tconst openRepository = { repository, dispose };\n\t\tthis.openRepositories.push(openRepository);\n\t\tupdateMergeChanges();\n\t\tthis._onDidOpenRepository.fire(repository);\n\t}\n\n\tclose(repository: Repository): void {\n\t\tconst openRepository = this.getOpenRepository(repository);\n\n\t\tif (!openRepository) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.logger.info(`[Model][close] Repository: ${repository.root}`);\n\t\tthis._closedRepositoriesManager.addRepository(openRepository.repository.root);\n\n\t\topenRepository.dispose();\n\t}\n\n\tasync pickRepository(): Promise<Repository | undefined> {\n\t\tif (this.openRepositories.length === 0) {\n\t\t\tthrow new Error(l10n.t('There are no available repositories'));\n\t\t}\n\n\t\tconst picks = this.openRepositories.map((e, index) => new RepositoryPick(e.repository, index));\n\t\tconst active = window.activeTextEditor;\n\t\tconst repository = active && this.getRepository(active.document.fileName);\n\t\tconst index = picks.findIndex(pick => pick.repository === repository);\n\n\t\t// Move repository pick containing the active text editor to appear first\n\t\tif (index > -1) {\n\t\t\tpicks.unshift(...picks.splice(index, 1));\n\t\t}\n\n\t\tconst placeHolder = l10n.t('Choose a repository');\n\t\tconst pick = await window.showQuickPick(picks, { placeHolder });\n\n\t\treturn pick && pick.repository;\n\t}\n\n\tgetRepository(sourceControl: SourceControl): Repository | undefined;\n\tgetRepository(resourceGroup: SourceControlResourceGroup): Repository | undefined;\n\tgetRepository(path: string): Repository | undefined;\n\tgetRepository(resource: Uri): Repository | undefined;\n\tgetRepository(hint: any): Repository | undefined {\n\t\tconst liveRepository = this.getOpenRepository(hint);\n\t\treturn liveRepository && liveRepository.repository;\n\t}\n\n\tprivate async getRepositoryExact(repoPath: string): Promise<Repository | undefined> {\n\t\t// Use the repository path\n\t\tconst openRepository = this.openRepositories\n\t\t\t.find(r => pathEquals(r.repository.root, repoPath));\n\n\t\tif (openRepository) {\n\t\t\treturn openRepository.repository;\n\t\t}\n\n\t\ttry {\n\t\t\t// Use the repository real path\n\t\t\tconst repoPathRealPath = await fs.promises.realpath(repoPath, { encoding: 'utf8' });\n\t\t\tconst openRepositoryRealPath = this.openRepositories\n\t\t\t\t.find(r => pathEquals(r.repository.rootRealPath ?? r.repository.root, repoPathRealPath));\n\n\t\t\treturn openRepositoryRealPath?.repository;\n\t\t} catch (err) {\n\t\t\tthis.logger.warn(`[Model][getRepositoryExact] Failed to get repository realpath for: \"${repoPath}\". Error:${err}`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate getOpenRepository(repository: Repository): OpenRepository | undefined;\n\tprivate getOpenRepository(sourceControl: SourceControl): OpenRepository | undefined;\n\tprivate getOpenRepository(resourceGroup: SourceControlResourceGroup): OpenRepository | undefined;\n\tprivate getOpenRepository(path: string): OpenRepository | undefined;\n\tprivate getOpenRepository(resource: Uri): OpenRepository | undefined;\n\tprivate getOpenRepository(hint: any): OpenRepository | undefined {\n\t\tif (!hint) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (hint instanceof Repository) {\n\t\t\treturn this.openRepositories.filter(r => r.repository === hint)[0];\n\t\t}\n\n\t\tif (hint instanceof ApiRepository) {\n\t\t\thint = hint.rootUri;\n\t\t}\n\n\t\tif (typeof hint === 'string') {\n\t\t\thint = Uri.file(hint);\n\t\t}\n\n\t\tif (hint instanceof Uri) {\n\t\t\tlet resourcePath: string;\n\n\t\t\tif (hint.scheme === 'git') {\n\t\t\t\tresourcePath = fromGitUri(hint).path;\n\t\t\t} else {\n\t\t\t\tresourcePath = hint.fsPath;\n\t\t\t}\n\n\t\t\touter:\n\t\t\tfor (const liveRepository of this.openRepositories.sort((a, b) => b.repository.root.length - a.repository.root.length)) {\n\t\t\t\tif (!isDescendant(liveRepository.repository.root, resourcePath)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (const submodule of liveRepository.repository.submodules) {\n\t\t\t\t\tconst submoduleRoot = path.join(liveRepository.repository.root, submodule.path);\n\n\t\t\t\t\tif (isDescendant(submoduleRoot, resourcePath)) {\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn liveRepository;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tfor (const liveRepository of this.openRepositories) {\n\t\t\tconst repository = liveRepository.repository;\n\n\t\t\tif (hint === repository.sourceControl) {\n\t\t\t\treturn liveRepository;\n\t\t\t}\n\n\t\t\tif (hint === repository.mergeGroup || hint === repository.indexGroup || hint === repository.workingTreeGroup || hint === repository.untrackedGroup) {\n\t\t\t\treturn liveRepository;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tgetRepositoryForSubmodule(submoduleUri: Uri): Repository | undefined {\n\t\tfor (const repository of this.repositories) {\n\t\t\tfor (const submodule of repository.submodules) {\n\t\t\t\tconst submodulePath = path.join(repository.root, submodule.path);\n\n\t\t\t\tif (submodulePath === submoduleUri.fsPath) {\n\t\t\t\t\treturn repository;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tregisterRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable {\n\t\tthis.remoteSourcePublishers.add(publisher);\n\t\tthis._onDidAddRemoteSourcePublisher.fire(publisher);\n\n\t\treturn toDisposable(() => {\n\t\t\tthis.remoteSourcePublishers.delete(publisher);\n\t\t\tthis._onDidRemoveRemoteSourcePublisher.fire(publisher);\n\t\t});\n\t}\n\n\tgetRemoteSourcePublishers(): RemoteSourcePublisher[] {\n\t\treturn [...this.remoteSourcePublishers.values()];\n\t}\n\n\tregisterBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable {\n\t\tconst providerDisposables: Disposable[] = [];\n\n\t\tthis.branchProtectionProviders.set(root.toString(), (this.branchProtectionProviders.get(root.toString()) ?? new Set()).add(provider));\n\t\tproviderDisposables.push(provider.onDidChangeBranchProtection(uri => this._onDidChangeBranchProtectionProviders.fire(uri)));\n\n\t\tthis._onDidChangeBranchProtectionProviders.fire(root);\n\n\t\treturn toDisposable(() => {\n\t\t\tconst providers = this.branchProtectionProviders.get(root.toString());\n\n\t\t\tif (providers && providers.has(provider)) {\n\t\t\t\tproviders.delete(provider);\n\t\t\t\tthis.branchProtectionProviders.set(root.toString(), providers);\n\t\t\t\tthis._onDidChangeBranchProtectionProviders.fire(root);\n\t\t\t}\n\n\t\t\tdispose(providerDisposables);\n\t\t});\n\t}\n\n\tgetBranchProtectionProviders(root: Uri): BranchProtectionProvider[] {\n\t\treturn [...(this.branchProtectionProviders.get(root.toString()) ?? new Set()).values()];\n\t}\n\n\tregisterPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable {\n\t\tthis.postCommitCommandsProviders.add(provider);\n\t\tthis._onDidChangePostCommitCommandsProviders.fire();\n\n\t\treturn toDisposable(() => {\n\t\t\tthis.postCommitCommandsProviders.delete(provider);\n\t\t\tthis._onDidChangePostCommitCommandsProviders.fire();\n\t\t});\n\t}\n\n\tgetPostCommitCommandsProviders(): PostCommitCommandsProvider[] {\n\t\treturn [...this.postCommitCommandsProviders.values()];\n\t}\n\n\tregisterCredentialsProvider(provider: CredentialsProvider): Disposable {\n\t\treturn this.askpass.registerCredentialsProvider(provider);\n\t}\n\n\tregisterPushErrorHandler(handler: PushErrorHandler): Disposable {\n\t\tthis.pushErrorHandlers.add(handler);\n\t\treturn toDisposable(() => this.pushErrorHandlers.delete(handler));\n\t}\n\n\tgetPushErrorHandlers(): PushErrorHandler[] {\n\t\treturn [...this.pushErrorHandlers];\n\t}\n\n\tregisterSourceControlHistoryItemDetailsProvider(provider: SourceControlHistoryItemDetailsProvider): Disposable {\n\t\tthis.historyItemDetailsProviders.add(provider);\n\t\treturn toDisposable(() => this.historyItemDetailsProviders.delete(provider));\n\t}\n\n\tgetSourceControlHistoryItemDetailsProviders(): SourceControlHistoryItemDetailsProvider[] {\n\t\treturn [...this.historyItemDetailsProviders];\n\t}\n\n\tgetUnsafeRepositoryPath(repository: string): string | undefined {\n\t\treturn this._unsafeRepositoriesManager.getRepositoryPath(repository);\n\t}\n\n\tdeleteUnsafeRepository(repository: string): boolean {\n\t\treturn this._unsafeRepositoriesManager.deleteRepository(repository);\n\t}\n\n\tprivate async isRepositoryOutsideWorkspace(repositoryPath: string): Promise<boolean> {\n\t\tconst workspaceFolders = (workspace.workspaceFolders || [])\n\t\t\t.filter(folder => folder.uri.scheme === 'file');\n\n\t\tif (workspaceFolders.length === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// The repository path may be a canonical path or it may contain a symbolic link so we have\n\t\t// to match it against the workspace folders and the canonical paths of the workspace folders\n\t\tconst workspaceFolderPaths = new Set<string | undefined>([\n\t\t\t...workspaceFolders.map(folder => folder.uri.fsPath),\n\t\t\t...await Promise.all(workspaceFolders.map(folder => this.getWorkspaceFolderRealPath(folder)))\n\t\t]);\n\n\t\treturn !Array.from(workspaceFolderPaths).some(folder => folder && (pathEquals(folder, repositoryPath) || isDescendant(folder, repositoryPath)));\n\t}\n\n\tprivate async getWorkspaceFolderRealPath(workspaceFolder: WorkspaceFolder): Promise<string | undefined> {\n\t\tlet result = this._workspaceFolders.get(workspaceFolder.uri.fsPath);\n\n\t\tif (!result) {\n\t\t\ttry {\n\t\t\t\tresult = await fs.promises.realpath(workspaceFolder.uri.fsPath, { encoding: 'utf8' });\n\t\t\t\tthis._workspaceFolders.set(workspaceFolder.uri.fsPath, result);\n\t\t\t} catch (err) {\n\t\t\t\t// noop - Workspace folder does not exist\n\t\t\t\tthis.logger.trace(`[Model][getWorkspaceFolderRealPath] Failed to resolve workspace folder \"${workspaceFolder.uri.fsPath}\". Error:${err}`);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate async showParentRepositoryNotification(): Promise<void> {\n\t\tconst message = this.parentRepositories.length === 1 ?\n\t\t\tl10n.t('A git repository was found in the parent folders of the workspace or the open file(s). Would you like to open the repository?') :\n\t\t\tl10n.t('Git repositories were found in the parent folders of the workspace or the open file(s). Would you like to open the repositories?');\n\n\t\tconst yes = l10n.t('Yes');\n\t\tconst always = l10n.t('Always');\n\t\tconst never = l10n.t('Never');\n\n\t\tconst choice = await window.showInformationMessage(message, yes, always, never);\n\t\tif (choice === yes) {\n\t\t\t// Open Parent Repositories\n\t\t\tcommands.executeCommand('git.openRepositoriesInParentFolders');\n\t\t} else if (choice === always || choice === never) {\n\t\t\t// Update setting\n\t\t\tconst config = workspace.getConfiguration('git');\n\t\t\tawait config.update('openRepositoryInParentFolders', choice === always ? 'always' : 'never', true);\n\n\t\t\tif (choice === always) {\n\t\t\t\tfor (const parentRepository of this.parentRepositories) {\n\t\t\t\t\tawait this.openParentRepository(parentRepository);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async showUnsafeRepositoryNotification(): Promise<void> {\n\t\t// If no repositories are open, we will use a welcome view to inform the user\n\t\t// that a potentially unsafe repository was found so we do not have to show\n\t\t// the notification\n\t\tif (this.repositories.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = this.unsafeRepositories.length === 1 ?\n\t\t\tl10n.t('The git repository in the current folder is potentially unsafe as the folder is owned by someone other than the current user.') :\n\t\t\tl10n.t('The git repositories in the current folder are potentially unsafe as the folders are owned by someone other than the current user.');\n\n\t\tconst manageUnsafeRepositories = l10n.t('Manage Unsafe Repositories');\n\t\tconst learnMore = l10n.t('Learn More');\n\n\t\tconst choice = await window.showErrorMessage(message, manageUnsafeRepositories, learnMore);\n\t\tif (choice === manageUnsafeRepositories) {\n\t\t\t// Manage Unsafe Repositories\n\t\t\tcommands.executeCommand('git.manageUnsafeRepositories');\n\t\t} else if (choice === learnMore) {\n\t\t\t// Learn More\n\t\t\tcommands.executeCommand('vscode.open', Uri.parse('https://aka.ms/vscode-git-unsafe-repository'));\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tconst openRepositories = [...this.openRepositories];\n\t\topenRepositories.forEach(r => r.dispose());\n\t\tthis.openRepositories = [];\n\n\t\tthis.possibleGitRepositoryPaths.clear();\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/operation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable local/code-no-dangerous-type-assertions */\n\nimport { LogOutputChannel } from 'vscode';\n\nexport const enum OperationKind {\n\tAdd = 'Add',\n\tApply = 'Apply',\n\tBlame = 'Blame',\n\tBranch = 'Branch',\n\tCheckIgnore = 'CheckIgnore',\n\tCheckout = 'Checkout',\n\tCheckoutTracking = 'CheckoutTracking',\n\tCherryPick = 'CherryPick',\n\tClean = 'Clean',\n\tCommit = 'Commit',\n\tConfig = 'Config',\n\tDeleteBranch = 'DeleteBranch',\n\tDeleteRef = 'DeleteRef',\n\tDeleteRemoteRef = 'DeleteRemoteRef',\n\tDeleteTag = 'DeleteTag',\n\tDiff = 'Diff',\n\tFetch = 'Fetch',\n\tFindTrackingBranches = 'GetTracking',\n\tGetBranch = 'GetBranch',\n\tGetBranches = 'GetBranches',\n\tGetCommitTemplate = 'GetCommitTemplate',\n\tGetObjectDetails = 'GetObjectDetails',\n\tGetObjectFiles = 'GetObjectFiles',\n\tGetRefs = 'GetRefs',\n\tGetRemoteRefs = 'GetRemoteRefs',\n\tHashObject = 'HashObject',\n\tIgnore = 'Ignore',\n\tLog = 'Log',\n\tLogFile = 'LogFile',\n\tMerge = 'Merge',\n\tMergeAbort = 'MergeAbort',\n\tMergeBase = 'MergeBase',\n\tMove = 'Move',\n\tPostCommitCommand = 'PostCommitCommand',\n\tPull = 'Pull',\n\tPush = 'Push',\n\tRemote = 'Remote',\n\tRenameBranch = 'RenameBranch',\n\tRemove = 'Remove',\n\tReset = 'Reset',\n\tRebase = 'Rebase',\n\tRebaseAbort = 'RebaseAbort',\n\tRebaseContinue = 'RebaseContinue',\n\tRefresh = 'Refresh',\n\tRevertFiles = 'RevertFiles',\n\tRevList = 'RevList',\n\tRevParse = 'RevParse',\n\tSetBranchUpstream = 'SetBranchUpstream',\n\tShow = 'Show',\n\tStage = 'Stage',\n\tStatus = 'Status',\n\tStash = 'Stash',\n\tSubmoduleUpdate = 'SubmoduleUpdate',\n\tSync = 'Sync',\n\tTag = 'Tag',\n}\n\nexport type Operation = AddOperation | ApplyOperation | BlameOperation | BranchOperation | CheckIgnoreOperation | CherryPickOperation |\n\tCheckoutOperation | CheckoutTrackingOperation | CleanOperation | CommitOperation | ConfigOperation | DeleteBranchOperation |\n\tDeleteRefOperation | DeleteRemoteRefOperation | DeleteTagOperation | DiffOperation | FetchOperation | FindTrackingBranchesOperation |\n\tGetBranchOperation | GetBranchesOperation | GetCommitTemplateOperation | GetObjectDetailsOperation | GetObjectFilesOperation | GetRefsOperation |\n\tGetRemoteRefsOperation | HashObjectOperation | IgnoreOperation | LogOperation | LogFileOperation | MergeOperation | MergeAbortOperation |\n\tMergeBaseOperation | MoveOperation | PostCommitCommandOperation | PullOperation | PushOperation | RemoteOperation | RenameBranchOperation |\n\tRemoveOperation | ResetOperation | RebaseOperation | RebaseAbortOperation | RebaseContinueOperation | RefreshOperation | RevertFilesOperation |\n\tRevListOperation | RevParseOperation | SetBranchUpstreamOperation | ShowOperation | StageOperation | StatusOperation | StashOperation |\n\tSubmoduleUpdateOperation | SyncOperation | TagOperation;\n\ntype BaseOperation = { kind: OperationKind; blocking: boolean; readOnly: boolean; remote: boolean; retry: boolean; showProgress: boolean };\nexport type AddOperation = BaseOperation & { kind: OperationKind.Add };\nexport type ApplyOperation = BaseOperation & { kind: OperationKind.Apply };\nexport type BlameOperation = BaseOperation & { kind: OperationKind.Blame };\nexport type BranchOperation = BaseOperation & { kind: OperationKind.Branch };\nexport type CheckIgnoreOperation = BaseOperation & { kind: OperationKind.CheckIgnore };\nexport type CherryPickOperation = BaseOperation & { kind: OperationKind.CherryPick };\nexport type CheckoutOperation = BaseOperation & { kind: OperationKind.Checkout; refLabel: string };\nexport type CheckoutTrackingOperation = BaseOperation & { kind: OperationKind.CheckoutTracking; refLabel: string };\nexport type CleanOperation = BaseOperation & { kind: OperationKind.Clean };\nexport type CommitOperation = BaseOperation & { kind: OperationKind.Commit };\nexport type ConfigOperation = BaseOperation & { kind: OperationKind.Config };\nexport type DeleteBranchOperation = BaseOperation & { kind: OperationKind.DeleteBranch };\nexport type DeleteRefOperation = BaseOperation & { kind: OperationKind.DeleteRef };\nexport type DeleteRemoteRefOperation = BaseOperation & { kind: OperationKind.DeleteRemoteRef };\nexport type DeleteTagOperation = BaseOperation & { kind: OperationKind.DeleteTag };\nexport type DiffOperation = BaseOperation & { kind: OperationKind.Diff };\nexport type FetchOperation = BaseOperation & { kind: OperationKind.Fetch };\nexport type FindTrackingBranchesOperation = BaseOperation & { kind: OperationKind.FindTrackingBranches };\nexport type GetBranchOperation = BaseOperation & { kind: OperationKind.GetBranch };\nexport type GetBranchesOperation = BaseOperation & { kind: OperationKind.GetBranches };\nexport type GetCommitTemplateOperation = BaseOperation & { kind: OperationKind.GetCommitTemplate };\nexport type GetObjectDetailsOperation = BaseOperation & { kind: OperationKind.GetObjectDetails };\nexport type GetObjectFilesOperation = BaseOperation & { kind: OperationKind.GetObjectFiles };\nexport type GetRefsOperation = BaseOperation & { kind: OperationKind.GetRefs };\nexport type GetRemoteRefsOperation = BaseOperation & { kind: OperationKind.GetRemoteRefs };\nexport type HashObjectOperation = BaseOperation & { kind: OperationKind.HashObject };\nexport type IgnoreOperation = BaseOperation & { kind: OperationKind.Ignore };\nexport type LogOperation = BaseOperation & { kind: OperationKind.Log };\nexport type LogFileOperation = BaseOperation & { kind: OperationKind.LogFile };\nexport type MergeOperation = BaseOperation & { kind: OperationKind.Merge };\nexport type MergeAbortOperation = BaseOperation & { kind: OperationKind.MergeAbort };\nexport type MergeBaseOperation = BaseOperation & { kind: OperationKind.MergeBase };\nexport type MoveOperation = BaseOperation & { kind: OperationKind.Move };\nexport type PostCommitCommandOperation = BaseOperation & { kind: OperationKind.PostCommitCommand };\nexport type PullOperation = BaseOperation & { kind: OperationKind.Pull };\nexport type PushOperation = BaseOperation & { kind: OperationKind.Push };\nexport type RemoteOperation = BaseOperation & { kind: OperationKind.Remote };\nexport type RenameBranchOperation = BaseOperation & { kind: OperationKind.RenameBranch };\nexport type RemoveOperation = BaseOperation & { kind: OperationKind.Remove };\nexport type ResetOperation = BaseOperation & { kind: OperationKind.Reset };\nexport type RebaseOperation = BaseOperation & { kind: OperationKind.Rebase };\nexport type RebaseAbortOperation = BaseOperation & { kind: OperationKind.RebaseAbort };\nexport type RebaseContinueOperation = BaseOperation & { kind: OperationKind.RebaseContinue };\nexport type RefreshOperation = BaseOperation & { kind: OperationKind.Refresh };\nexport type RevertFilesOperation = BaseOperation & { kind: OperationKind.RevertFiles };\nexport type RevListOperation = BaseOperation & { kind: OperationKind.RevList };\nexport type RevParseOperation = BaseOperation & { kind: OperationKind.RevParse };\nexport type SetBranchUpstreamOperation = BaseOperation & { kind: OperationKind.SetBranchUpstream };\nexport type ShowOperation = BaseOperation & { kind: OperationKind.Show };\nexport type StageOperation = BaseOperation & { kind: OperationKind.Stage };\nexport type StatusOperation = BaseOperation & { kind: OperationKind.Status };\nexport type StashOperation = BaseOperation & { kind: OperationKind.Stash };\nexport type SubmoduleUpdateOperation = BaseOperation & { kind: OperationKind.SubmoduleUpdate };\nexport type SyncOperation = BaseOperation & { kind: OperationKind.Sync };\nexport type TagOperation = BaseOperation & { kind: OperationKind.Tag };\n\nexport const Operation = {\n\tAdd: (showProgress: boolean): AddOperation => ({ kind: OperationKind.Add, blocking: false, readOnly: false, remote: false, retry: false, showProgress }),\n\tApply: { kind: OperationKind.Apply, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as ApplyOperation,\n\tBlame: (showProgress: boolean) => ({ kind: OperationKind.Blame, blocking: false, readOnly: true, remote: false, retry: false, showProgress } as BlameOperation),\n\tBranch: { kind: OperationKind.Branch, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as BranchOperation,\n\tCheckIgnore: { kind: OperationKind.CheckIgnore, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as CheckIgnoreOperation,\n\tCherryPick: { kind: OperationKind.CherryPick, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as CherryPickOperation,\n\tCheckout: (refLabel: string) => ({ kind: OperationKind.Checkout, blocking: true, readOnly: false, remote: false, retry: false, showProgress: true, refLabel } as CheckoutOperation),\n\tCheckoutTracking: (refLabel: string) => ({ kind: OperationKind.CheckoutTracking, blocking: true, readOnly: false, remote: false, retry: false, showProgress: true, refLabel } as CheckoutTrackingOperation),\n\tClean: (showProgress: boolean) => ({ kind: OperationKind.Clean, blocking: false, readOnly: false, remote: false, retry: false, showProgress } as CleanOperation),\n\tCommit: { kind: OperationKind.Commit, blocking: true, readOnly: false, remote: false, retry: false, showProgress: true } as CommitOperation,\n\tConfig: (readOnly: boolean) => ({ kind: OperationKind.Config, blocking: false, readOnly, remote: false, retry: false, showProgress: false } as ConfigOperation),\n\tDeleteBranch: { kind: OperationKind.DeleteBranch, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as DeleteBranchOperation,\n\tDeleteRef: { kind: OperationKind.DeleteRef, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as DeleteRefOperation,\n\tDeleteRemoteRef: { kind: OperationKind.DeleteRemoteRef, blocking: false, readOnly: false, remote: true, retry: false, showProgress: true } as DeleteRemoteRefOperation,\n\tDeleteTag: { kind: OperationKind.DeleteTag, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as DeleteTagOperation,\n\tDiff: { kind: OperationKind.Diff, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as DiffOperation,\n\tFetch: (showProgress: boolean) => ({ kind: OperationKind.Fetch, blocking: false, readOnly: false, remote: true, retry: true, showProgress } as FetchOperation),\n\tFindTrackingBranches: { kind: OperationKind.FindTrackingBranches, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as FindTrackingBranchesOperation,\n\tGetBranch: { kind: OperationKind.GetBranch, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as GetBranchOperation,\n\tGetBranches: { kind: OperationKind.GetBranches, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as GetBranchesOperation,\n\tGetCommitTemplate: { kind: OperationKind.GetCommitTemplate, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as GetCommitTemplateOperation,\n\tGetObjectDetails: { kind: OperationKind.GetObjectDetails, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as GetObjectDetailsOperation,\n\tGetObjectFiles: { kind: OperationKind.GetObjectFiles, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as GetObjectFilesOperation,\n\tGetRefs: { kind: OperationKind.GetRefs, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as GetRefsOperation,\n\tGetRemoteRefs: { kind: OperationKind.GetRemoteRefs, blocking: false, readOnly: true, remote: true, retry: false, showProgress: false } as GetRemoteRefsOperation,\n\tHashObject: { kind: OperationKind.HashObject, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as HashObjectOperation,\n\tIgnore: { kind: OperationKind.Ignore, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as IgnoreOperation,\n\tLog: (showProgress: boolean) => ({ kind: OperationKind.Log, blocking: false, readOnly: true, remote: false, retry: false, showProgress }) as LogOperation,\n\tLogFile: { kind: OperationKind.LogFile, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as LogFileOperation,\n\tMerge: { kind: OperationKind.Merge, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as MergeOperation,\n\tMergeAbort: { kind: OperationKind.MergeAbort, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as MergeAbortOperation,\n\tMergeBase: { kind: OperationKind.MergeBase, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as MergeBaseOperation,\n\tMove: { kind: OperationKind.Move, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as MoveOperation,\n\tPostCommitCommand: { kind: OperationKind.PostCommitCommand, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as PostCommitCommandOperation,\n\tPull: { kind: OperationKind.Pull, blocking: true, readOnly: false, remote: true, retry: true, showProgress: true } as PullOperation,\n\tPush: { kind: OperationKind.Push, blocking: true, readOnly: false, remote: true, retry: false, showProgress: true } as PushOperation,\n\tRemote: { kind: OperationKind.Remote, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as RemoteOperation,\n\tRenameBranch: { kind: OperationKind.RenameBranch, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as RenameBranchOperation,\n\tRemove: { kind: OperationKind.Remove, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as RemoveOperation,\n\tReset: { kind: OperationKind.Reset, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as ResetOperation,\n\tRebase: { kind: OperationKind.Rebase, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as RebaseOperation,\n\tRebaseAbort: { kind: OperationKind.RebaseAbort, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as RebaseAbortOperation,\n\tRebaseContinue: { kind: OperationKind.RebaseContinue, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as RebaseContinueOperation,\n\tRefresh: { kind: OperationKind.Refresh, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as RefreshOperation,\n\tRevertFiles: (showProgress: boolean) => ({ kind: OperationKind.RevertFiles, blocking: false, readOnly: false, remote: false, retry: false, showProgress } as RevertFilesOperation),\n\tRevList: { kind: OperationKind.RevList, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as RevListOperation,\n\tRevParse: { kind: OperationKind.RevParse, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as RevParseOperation,\n\tSetBranchUpstream: { kind: OperationKind.SetBranchUpstream, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as SetBranchUpstreamOperation,\n\tShow: { kind: OperationKind.Show, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as ShowOperation,\n\tStage: { kind: OperationKind.Stage, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as StageOperation,\n\tStatus: { kind: OperationKind.Status, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as StatusOperation,\n\tStash: { kind: OperationKind.Stash, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as StashOperation,\n\tSubmoduleUpdate: { kind: OperationKind.SubmoduleUpdate, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as SubmoduleUpdateOperation,\n\tSync: { kind: OperationKind.Sync, blocking: true, readOnly: false, remote: true, retry: true, showProgress: true } as SyncOperation,\n\tTag: { kind: OperationKind.Tag, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as TagOperation\n};\n\nexport interface OperationResult {\n\toperation: Operation;\n\terror: any;\n}\n\ninterface IOperationManager {\n\tgetOperations(operationKind: OperationKind): Operation[];\n\tisIdle(): boolean;\n\tisRunning(operationKind: OperationKind): boolean;\n\tshouldDisableCommands(): boolean;\n\tshouldShowProgress(): boolean;\n}\n\nexport class OperationManager implements IOperationManager {\n\n\tprivate operations = new Map<OperationKind, Set<Operation>>();\n\n\tconstructor(private readonly logger: LogOutputChannel) { }\n\n\tstart(operation: Operation): void {\n\t\tif (this.operations.has(operation.kind)) {\n\t\t\tthis.operations.get(operation.kind)!.add(operation);\n\t\t} else {\n\t\t\tthis.operations.set(operation.kind, new Set([operation]));\n\t\t}\n\n\t\tthis.logger.trace(`[OperationManager][start] ${operation.kind} (blocking: ${operation.blocking}, readOnly: ${operation.readOnly}; retry: ${operation.retry}; showProgress: ${operation.showProgress})`);\n\t}\n\n\tend(operation: Operation): void {\n\t\tconst operationSet = this.operations.get(operation.kind);\n\t\tif (operationSet) {\n\t\t\toperationSet.delete(operation);\n\t\t\tif (operationSet.size === 0) {\n\t\t\t\tthis.operations.delete(operation.kind);\n\t\t\t}\n\t\t}\n\n\t\tthis.logger.trace(`[OperationManager][end] ${operation.kind} (blocking: ${operation.blocking}, readOnly: ${operation.readOnly}; retry: ${operation.retry}; showProgress: ${operation.showProgress})`);\n\t}\n\n\tgetOperations(operationKind: OperationKind): Operation[] {\n\t\tconst operationSet = this.operations.get(operationKind);\n\t\treturn operationSet ? Array.from(operationSet) : [];\n\t}\n\n\tisIdle(): boolean {\n\t\tconst operationSets = this.operations.values();\n\n\t\tfor (const operationSet of operationSets) {\n\t\t\tfor (const operation of operationSet) {\n\t\t\t\tif (!operation.readOnly) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tisRunning(operationKind: OperationKind): boolean {\n\t\treturn this.operations.has(operationKind);\n\t}\n\n\tshouldDisableCommands(): boolean {\n\t\tconst operationSets = this.operations.values();\n\n\t\tfor (const operationSet of operationSets) {\n\t\t\tfor (const operation of operationSet) {\n\t\t\t\tif (operation.blocking) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tshouldShowProgress(): boolean {\n\t\tconst operationSets = this.operations.values();\n\n\t\tfor (const operationSet of operationSets) {\n\t\t\tfor (const operation of operationSet) {\n\t\t\t\tif (operation.showProgress) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/postCommitCommands.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command, commands, Disposable, Event, EventEmitter, Memento, Uri, workspace, l10n } from 'vscode';\nimport { PostCommitCommandsProvider } from './api/git';\nimport { IRepositoryResolver, Repository } from './repository';\nimport { ApiRepository } from './api/api1';\nimport { dispose } from './util';\nimport { OperationKind } from './operation';\n\nexport interface IPostCommitCommandsProviderRegistry {\n\treadonly onDidChangePostCommitCommandsProviders: Event<void>;\n\n\tgetPostCommitCommandsProviders(): PostCommitCommandsProvider[];\n\tregisterPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable;\n}\n\nexport class GitPostCommitCommandsProvider implements PostCommitCommandsProvider {\n\tconstructor(private readonly _repositoryResolver: IRepositoryResolver) { }\n\n\tgetCommands(apiRepository: ApiRepository): Command[] {\n\t\tconst repository = this._repositoryResolver.getRepository(apiRepository.rootUri);\n\t\tif (!repository) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git', Uri.file(repository.root));\n\n\t\t// Branch protection\n\t\tconst isBranchProtected = repository.isBranchProtected();\n\t\tconst branchProtectionPrompt = config.get<'alwaysCommit' | 'alwaysCommitToNewBranch' | 'alwaysPrompt'>('branchProtectionPrompt')!;\n\t\tconst alwaysPrompt = isBranchProtected && branchProtectionPrompt === 'alwaysPrompt';\n\t\tconst alwaysCommitToNewBranch = isBranchProtected && branchProtectionPrompt === 'alwaysCommitToNewBranch';\n\n\t\t// Icon\n\t\tconst isCommitInProgress = repository.operations.isRunning(OperationKind.Commit) || repository.operations.isRunning(OperationKind.PostCommitCommand);\n\t\tconst icon = isCommitInProgress ? '$(sync~spin)' : alwaysPrompt ? '$(lock)' : alwaysCommitToNewBranch ? '$(git-branch)' : undefined;\n\n\t\t// Tooltip (default)\n\t\tlet pushCommandTooltip = !alwaysCommitToNewBranch ?\n\t\t\tl10n.t('Commit & Push Changes') :\n\t\t\tl10n.t('Commit to New Branch & Push Changes');\n\n\t\tlet syncCommandTooltip = !alwaysCommitToNewBranch ?\n\t\t\tl10n.t('Commit & Sync Changes') :\n\t\t\tl10n.t('Commit to New Branch & Synchronize Changes');\n\n\t\t// Tooltip (in progress)\n\t\tif (isCommitInProgress) {\n\t\t\tpushCommandTooltip = !alwaysCommitToNewBranch ?\n\t\t\t\tl10n.t('Committing & Pushing Changes...') :\n\t\t\t\tl10n.t('Committing to New Branch & Pushing Changes...');\n\n\t\t\tsyncCommandTooltip = !alwaysCommitToNewBranch ?\n\t\t\t\tl10n.t('Committing & Synchronizing Changes...') :\n\t\t\t\tl10n.t('Committing to New Branch & Synchronizing Changes...');\n\t\t}\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tcommand: 'git.push',\n\t\t\t\ttitle: l10n.t('{0} Commit & Push', icon ?? '$(arrow-up)'),\n\t\t\t\ttooltip: pushCommandTooltip\n\t\t\t},\n\t\t\t{\n\t\t\t\tcommand: 'git.sync',\n\t\t\t\ttitle: l10n.t('{0} Commit & Sync', icon ?? '$(sync)'),\n\t\t\t\ttooltip: syncCommandTooltip\n\t\t\t},\n\t\t];\n\t}\n}\n\nexport class CommitCommandsCenter {\n\n\tprivate _onDidChange = new EventEmitter<void>();\n\tget onDidChange(): Event<void> { return this._onDidChange.event; }\n\n\tprivate disposables: Disposable[] = [];\n\n\tset postCommitCommand(command: string | null | undefined) {\n\t\tif (command === undefined) {\n\t\t\t// Commit WAS NOT initiated using the action button\n\t\t\t// so there is no need to store the post-commit command\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globalState.update(this.getGlobalStateKey(), command)\n\t\t\t.then(() => this._onDidChange.fire());\n\t}\n\n\tconstructor(\n\t\tprivate readonly globalState: Memento,\n\t\tprivate readonly repository: Repository,\n\t\tprivate readonly postCommitCommandsProviderRegistry: IPostCommitCommandsProviderRegistry\n\t) {\n\t\tconst root = Uri.file(repository.root);\n\n\t\t// Migrate post commit command storage\n\t\tthis.migratePostCommitCommandStorage()\n\t\t\t.then(() => {\n\t\t\t\tconst onRememberPostCommitCommandChange = async () => {\n\t\t\t\t\tconst config = workspace.getConfiguration('git', root);\n\t\t\t\t\tif (!config.get<boolean>('rememberPostCommitCommand')) {\n\t\t\t\t\t\tawait this.globalState.update(this.getGlobalStateKey(), undefined);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.disposables.push(workspace.onDidChangeConfiguration(e => {\n\t\t\t\t\tif (e.affectsConfiguration('git.rememberPostCommitCommand', root)) {\n\t\t\t\t\t\tonRememberPostCommitCommandChange();\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t\tonRememberPostCommitCommandChange();\n\n\t\t\t\tthis.disposables.push(postCommitCommandsProviderRegistry.onDidChangePostCommitCommandsProviders(() => this._onDidChange.fire()));\n\t\t\t});\n\t}\n\n\tgetPrimaryCommand(): Command {\n\t\tconst allCommands = this.getSecondaryCommands().map(c => c).flat();\n\t\tconst commandFromStorage = allCommands.find(c => c.arguments?.length === 2 && c.arguments[1] === this.getPostCommitCommandStringFromStorage());\n\t\tconst commandFromSetting = allCommands.find(c => c.arguments?.length === 2 && c.arguments[1] === this.getPostCommitCommandStringFromSetting());\n\n\t\treturn commandFromStorage ?? commandFromSetting ?? this.getCommitCommands()[0];\n\t}\n\n\tgetSecondaryCommands(): Command[][] {\n\t\tconst commandGroups: Command[][] = [];\n\n\t\tfor (const provider of this.postCommitCommandsProviderRegistry.getPostCommitCommandsProviders()) {\n\t\t\tconst commands = provider.getCommands(new ApiRepository(this.repository));\n\t\t\tcommandGroups.push((commands ?? []).map(c => {\n\t\t\t\treturn { command: 'git.commit', title: c.title, tooltip: c.tooltip, arguments: [this.repository.sourceControl, c.command] };\n\t\t\t}));\n\t\t}\n\n\t\tif (commandGroups.length > 0) {\n\t\t\tcommandGroups.splice(0, 0, this.getCommitCommands());\n\t\t}\n\n\t\treturn commandGroups;\n\t}\n\n\tasync executePostCommitCommand(command: string | null | undefined): Promise<void> {\n\t\ttry {\n\t\t\tif (command === null) {\n\t\t\t\t// No post-commit command\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (command === undefined) {\n\t\t\t\t// Commit WAS NOT initiated using the action button (ex: keybinding, toolbar action,\n\t\t\t\t// command palette) so we have to honour the default post commit command (memento/setting).\n\t\t\t\tconst primaryCommand = this.getPrimaryCommand();\n\t\t\t\tcommand = primaryCommand.arguments?.length === 2 ? primaryCommand.arguments[1] : null;\n\t\t\t}\n\n\t\t\tif (command !== null) {\n\t\t\t\tawait commands.executeCommand(command!.toString(), new ApiRepository(this.repository));\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tif (!this.isRememberPostCommitCommandEnabled()) {\n\t\t\t\tawait this.globalState.update(this.getGlobalStateKey(), undefined);\n\t\t\t\tthis._onDidChange.fire();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getGlobalStateKey(): string {\n\t\treturn `postCommitCommand:${this.repository.root}`;\n\t}\n\n\tprivate getCommitCommands(): Command[] {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\n\t\t// Branch protection\n\t\tconst isBranchProtected = this.repository.isBranchProtected();\n\t\tconst branchProtectionPrompt = config.get<'alwaysCommit' | 'alwaysCommitToNewBranch' | 'alwaysPrompt'>('branchProtectionPrompt')!;\n\t\tconst alwaysPrompt = isBranchProtected && branchProtectionPrompt === 'alwaysPrompt';\n\t\tconst alwaysCommitToNewBranch = isBranchProtected && branchProtectionPrompt === 'alwaysCommitToNewBranch';\n\n\t\t// Icon\n\t\tconst icon = alwaysPrompt ? '$(lock)' : alwaysCommitToNewBranch ? '$(git-branch)' : undefined;\n\n\t\t// Tooltip (default)\n\t\tconst branch = this.repository.HEAD?.name;\n\t\tlet tooltip = alwaysCommitToNewBranch ?\n\t\t\tl10n.t('Commit Changes to New Branch') :\n\t\t\tbranch ?\n\t\t\t\tl10n.t('Commit Changes on \"{0}\"', branch) :\n\t\t\t\tl10n.t('Commit Changes');\n\n\t\t// Tooltip (in progress)\n\t\tif (this.repository.operations.isRunning(OperationKind.Commit)) {\n\t\t\ttooltip = !alwaysCommitToNewBranch ?\n\t\t\t\tl10n.t('Committing Changes...') :\n\t\t\t\tl10n.t('Committing Changes to New Branch...');\n\t\t}\n\n\t\treturn [\n\t\t\t{ command: 'git.commit', title: l10n.t('{0} Commit', icon ?? '$(check)'), tooltip, arguments: [this.repository.sourceControl, null] },\n\t\t\t{ command: 'git.commitAmend', title: l10n.t('{0} Commit (Amend)', icon ?? '$(check)'), tooltip, arguments: [this.repository.sourceControl, null] },\n\t\t];\n\t}\n\n\tprivate getPostCommitCommandStringFromSetting(): string | undefined {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst postCommitCommandSetting = config.get<string>('postCommitCommand');\n\n\t\treturn postCommitCommandSetting === 'push' || postCommitCommandSetting === 'sync' ? `git.${postCommitCommandSetting}` : undefined;\n\t}\n\n\tprivate getPostCommitCommandStringFromStorage(): string | null | undefined {\n\t\treturn this.globalState.get<string | null>(this.getGlobalStateKey());\n\t}\n\n\tprivate async migratePostCommitCommandStorage(): Promise<void> {\n\t\tconst postCommitCommandString = this.globalState.get<string | null>(this.repository.root);\n\n\t\tif (postCommitCommandString !== undefined) {\n\t\t\tawait this.globalState.update(this.getGlobalStateKey(), postCommitCommandString);\n\t\t\tawait this.globalState.update(this.repository.root, undefined);\n\t\t}\n\t}\n\n\tprivate isRememberPostCommitCommandEnabled(): boolean {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\treturn config.get<boolean>('rememberPostCommitCommand') === true;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/protocolHandler.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { UriHandler, Uri, window, Disposable, commands, LogOutputChannel, l10n } from 'vscode';\nimport { dispose, isWindows } from './util';\nimport * as querystring from 'querystring';\n\nconst schemes = isWindows ?\n\tnew Set(['git', 'http', 'https', 'ssh']) :\n\tnew Set(['file', 'git', 'http', 'https', 'ssh']);\n\nconst refRegEx = /^$|[~\\^:\\\\\\*\\s\\[\\]]|^-|^\\.|\\/\\.|\\.\\.|\\.lock\\/|\\.lock$|\\/$|\\.$/;\n\nexport class GitProtocolHandler implements UriHandler {\n\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(private readonly logger: LogOutputChannel) {\n\t\tthis.disposables.push(window.registerUriHandler(this));\n\t}\n\n\thandleUri(uri: Uri): void {\n\t\tthis.logger.info(`[GitProtocolHandler][handleUri] URI:(${uri.toString()})`);\n\n\t\tswitch (uri.path) {\n\t\t\tcase '/clone': this.clone(uri);\n\t\t}\n\t}\n\n\tprivate async clone(uri: Uri): Promise<void> {\n\t\tconst data = querystring.parse(uri.query);\n\t\tconst ref = data.ref;\n\n\t\tif (!data.url) {\n\t\t\tthis.logger.warn('[GitProtocolHandler][clone] Failed to open URI:' + uri.toString());\n\t\t\treturn;\n\t\t}\n\n\t\tif (Array.isArray(data.url) && data.url.length === 0) {\n\t\t\tthis.logger.warn('[GitProtocolHandler][clone] Failed to open URI:' + uri.toString());\n\t\t\treturn;\n\t\t}\n\n\t\tif (ref !== undefined && typeof ref !== 'string') {\n\t\t\tthis.logger.warn('[GitProtocolHandler][clone] Failed to open URI due to multiple references:' + uri.toString());\n\t\t\treturn;\n\t\t}\n\n\t\tlet cloneUri: Uri;\n\t\ttry {\n\t\t\tlet rawUri = Array.isArray(data.url) ? data.url[0] : data.url;\n\n\t\t\t// Handle SSH Uri\n\t\t\t// Ex: git@github.com:microsoft/vscode.git\n\t\t\trawUri = rawUri.replace(/^(git@[^\\/:]+)(:)/i, 'ssh://$1/');\n\n\t\t\tcloneUri = Uri.parse(rawUri, true);\n\n\t\t\t// Validate against supported schemes\n\t\t\tif (!schemes.has(cloneUri.scheme.toLowerCase())) {\n\t\t\t\tthrow new Error('Unsupported scheme.');\n\t\t\t}\n\n\t\t\t// Validate the reference\n\t\t\tif (typeof ref === 'string' && refRegEx.test(ref)) {\n\t\t\t\tthrow new Error('Invalid reference.');\n\t\t\t}\n\t\t}\n\t\tcatch (ex) {\n\t\t\tthis.logger.warn('[GitProtocolHandler][clone] Invalid URI:' + uri.toString());\n\t\t\treturn;\n\t\t}\n\n\t\tif (!(await commands.getCommands(true)).includes('git.clone')) {\n\t\t\tthis.logger.error('[GitProtocolHandler][clone] Could not complete git clone operation as git installation was not found.');\n\n\t\t\tconst errorMessage = l10n.t('Could not clone your repository as Git is not installed.');\n\t\t\tconst downloadGit = l10n.t('Download Git');\n\n\t\t\tif (await window.showErrorMessage(errorMessage, { modal: true }, downloadGit) === downloadGit) {\n\t\t\t\tcommands.executeCommand('vscode.open', Uri.parse('https://aka.ms/vscode-download-git'));\n\t\t\t}\n\n\t\t\treturn;\n\t\t} else {\n\t\t\tconst cloneTarget = cloneUri.toString(true);\n\t\t\tthis.logger.info(`[GitProtocolHandler][clone] Executing git.clone for ${cloneTarget}`);\n\t\t\tcommands.executeCommand('git.clone', cloneTarget, undefined, { ref: ref });\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/pushError.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable } from 'vscode';\nimport { PushErrorHandler } from './api/git';\n\nexport interface IPushErrorHandlerRegistry {\n\tregisterPushErrorHandler(provider: PushErrorHandler): Disposable;\n\tgetPushErrorHandlers(): PushErrorHandler[];\n}\n"
  },
  {
    "path": "extensions/git/src/remotePublisher.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, Event } from 'vscode';\nimport { RemoteSourcePublisher } from './api/git';\n\nexport interface IRemoteSourcePublisherRegistry {\n\treadonly onDidAddRemoteSourcePublisher: Event<RemoteSourcePublisher>;\n\treadonly onDidRemoveRemoteSourcePublisher: Event<RemoteSourcePublisher>;\n\n\tgetRemoteSourcePublishers(): RemoteSourcePublisher[];\n\tregisterRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable;\n}\n"
  },
  {
    "path": "extensions/git/src/remoteSource.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { PickRemoteSourceOptions, PickRemoteSourceResult } from './typings/git-base';\nimport { GitBaseApi } from './git-base';\n\nexport async function pickRemoteSource(options: PickRemoteSourceOptions & { branch?: false | undefined }): Promise<string | undefined>;\nexport async function pickRemoteSource(options: PickRemoteSourceOptions & { branch: true }): Promise<PickRemoteSourceResult | undefined>;\nexport async function pickRemoteSource(options: PickRemoteSourceOptions = {}): Promise<string | PickRemoteSourceResult | undefined> {\n\treturn GitBaseApi.getAPI().pickRemoteSource(options);\n}\n\nexport async function getRemoteSourceActions(url: string) {\n\treturn GitBaseApi.getAPI().getRemoteSourceActions(url);\n}\n"
  },
  {
    "path": "extensions/git/src/repository.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport picomatch from 'picomatch';\nimport { CancellationError, CancellationToken, CancellationTokenSource, Command, commands, Disposable, Event, EventEmitter, FileDecoration, l10n, LogLevel, LogOutputChannel, Memento, ProgressLocation, ProgressOptions, QuickDiffProvider, RelativePattern, scm, SourceControl, SourceControlInputBox, SourceControlInputBoxValidation, SourceControlInputBoxValidationType, SourceControlResourceDecorations, SourceControlResourceGroup, SourceControlResourceState, TabInputNotebookDiff, TabInputTextDiff, TabInputTextMultiDiff, ThemeColor, Uri, window, workspace, WorkspaceEdit } from 'vscode';\nimport { ActionButton } from './actionButton';\nimport { ApiRepository } from './api/api1';\nimport { Branch, BranchQuery, Change, CommitOptions, FetchOptions, ForcePushMode, GitErrorCodes, LogOptions, Ref, RefType, Remote, Status } from './api/git';\nimport { AutoFetcher } from './autofetch';\nimport { GitBranchProtectionProvider, IBranchProtectionProviderRegistry } from './branchProtection';\nimport { debounce, memoize, throttle } from './decorators';\nimport { Repository as BaseRepository, BlameInformation, Commit, GitError, LogFileOptions, LsTreeElement, PullOptions, RefQuery, Stash, Submodule } from './git';\nimport { GitHistoryProvider } from './historyProvider';\nimport { Operation, OperationKind, OperationManager, OperationResult } from './operation';\nimport { CommitCommandsCenter, IPostCommitCommandsProviderRegistry } from './postCommitCommands';\nimport { IPushErrorHandlerRegistry } from './pushError';\nimport { IRemoteSourcePublisherRegistry } from './remotePublisher';\nimport { StatusBarCommands } from './statusbar';\nimport { toGitUri } from './uri';\nimport { anyEvent, combinedDisposable, debounceEvent, dispose, EmptyDisposable, eventToPromise, filterEvent, find, getCommitShortHash, IDisposable, isDescendant, isLinuxSnap, isRemote, Limiter, onceEvent, pathEquals, relativePath } from './util';\nimport { IFileWatcher, watch } from './watch';\nimport { ISourceControlHistoryItemDetailsProviderRegistry } from './historyItemDetailsProvider';\n\nconst timeout = (millis: number) => new Promise(c => setTimeout(c, millis));\n\nconst iconsRootPath = path.join(path.dirname(__dirname), 'resources', 'icons');\n\nfunction getIconUri(iconName: string, theme: string): Uri {\n\treturn Uri.file(path.join(iconsRootPath, theme, `${iconName}.svg`));\n}\n\nexport const enum RepositoryState {\n\tIdle,\n\tDisposed\n}\n\nexport const enum ResourceGroupType {\n\tMerge,\n\tIndex,\n\tWorkingTree,\n\tUntracked\n}\n\nexport class Resource implements SourceControlResourceState {\n\n\tstatic getStatusLetter(type: Status): string {\n\t\tswitch (type) {\n\t\t\tcase Status.INDEX_MODIFIED:\n\t\t\tcase Status.MODIFIED:\n\t\t\t\treturn 'M';\n\t\t\tcase Status.INDEX_ADDED:\n\t\t\tcase Status.INTENT_TO_ADD:\n\t\t\t\treturn 'A';\n\t\t\tcase Status.INDEX_DELETED:\n\t\t\tcase Status.DELETED:\n\t\t\t\treturn 'D';\n\t\t\tcase Status.INDEX_RENAMED:\n\t\t\tcase Status.INTENT_TO_RENAME:\n\t\t\t\treturn 'R';\n\t\t\tcase Status.TYPE_CHANGED:\n\t\t\t\treturn 'T';\n\t\t\tcase Status.UNTRACKED:\n\t\t\t\treturn 'U';\n\t\t\tcase Status.IGNORED:\n\t\t\t\treturn 'I';\n\t\t\tcase Status.DELETED_BY_THEM:\n\t\t\t\treturn 'D';\n\t\t\tcase Status.DELETED_BY_US:\n\t\t\t\treturn 'D';\n\t\t\tcase Status.INDEX_COPIED:\n\t\t\t\treturn 'C';\n\t\t\tcase Status.BOTH_DELETED:\n\t\t\tcase Status.ADDED_BY_US:\n\t\t\tcase Status.ADDED_BY_THEM:\n\t\t\tcase Status.BOTH_ADDED:\n\t\t\tcase Status.BOTH_MODIFIED:\n\t\t\t\treturn '!'; // Using ! instead of ⚠, because the latter looks really bad on windows\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown git status: ' + type);\n\t\t}\n\t}\n\n\tstatic getStatusText(type: Status) {\n\t\tswitch (type) {\n\t\t\tcase Status.INDEX_MODIFIED: return l10n.t('Index Modified');\n\t\t\tcase Status.MODIFIED: return l10n.t('Modified');\n\t\t\tcase Status.INDEX_ADDED: return l10n.t('Index Added');\n\t\t\tcase Status.INDEX_DELETED: return l10n.t('Index Deleted');\n\t\t\tcase Status.DELETED: return l10n.t('Deleted');\n\t\t\tcase Status.INDEX_RENAMED: return l10n.t('Index Renamed');\n\t\t\tcase Status.INDEX_COPIED: return l10n.t('Index Copied');\n\t\t\tcase Status.UNTRACKED: return l10n.t('Untracked');\n\t\t\tcase Status.IGNORED: return l10n.t('Ignored');\n\t\t\tcase Status.INTENT_TO_ADD: return l10n.t('Intent to Add');\n\t\t\tcase Status.INTENT_TO_RENAME: return l10n.t('Intent to Rename');\n\t\t\tcase Status.TYPE_CHANGED: return l10n.t('Type Changed');\n\t\t\tcase Status.BOTH_DELETED: return l10n.t('Conflict: Both Deleted');\n\t\t\tcase Status.ADDED_BY_US: return l10n.t('Conflict: Added By Us');\n\t\t\tcase Status.DELETED_BY_THEM: return l10n.t('Conflict: Deleted By Them');\n\t\t\tcase Status.ADDED_BY_THEM: return l10n.t('Conflict: Added By Them');\n\t\t\tcase Status.DELETED_BY_US: return l10n.t('Conflict: Deleted By Us');\n\t\t\tcase Status.BOTH_ADDED: return l10n.t('Conflict: Both Added');\n\t\t\tcase Status.BOTH_MODIFIED: return l10n.t('Conflict: Both Modified');\n\t\t\tdefault: return '';\n\t\t}\n\t}\n\n\tstatic getStatusColor(type: Status): ThemeColor {\n\t\tswitch (type) {\n\t\t\tcase Status.INDEX_MODIFIED:\n\t\t\t\treturn new ThemeColor('gitDecoration.stageModifiedResourceForeground');\n\t\t\tcase Status.MODIFIED:\n\t\t\tcase Status.TYPE_CHANGED:\n\t\t\t\treturn new ThemeColor('gitDecoration.modifiedResourceForeground');\n\t\t\tcase Status.INDEX_DELETED:\n\t\t\t\treturn new ThemeColor('gitDecoration.stageDeletedResourceForeground');\n\t\t\tcase Status.DELETED:\n\t\t\t\treturn new ThemeColor('gitDecoration.deletedResourceForeground');\n\t\t\tcase Status.INDEX_ADDED:\n\t\t\tcase Status.INTENT_TO_ADD:\n\t\t\t\treturn new ThemeColor('gitDecoration.addedResourceForeground');\n\t\t\tcase Status.INDEX_COPIED:\n\t\t\tcase Status.INDEX_RENAMED:\n\t\t\tcase Status.INTENT_TO_RENAME:\n\t\t\t\treturn new ThemeColor('gitDecoration.renamedResourceForeground');\n\t\t\tcase Status.UNTRACKED:\n\t\t\t\treturn new ThemeColor('gitDecoration.untrackedResourceForeground');\n\t\t\tcase Status.IGNORED:\n\t\t\t\treturn new ThemeColor('gitDecoration.ignoredResourceForeground');\n\t\t\tcase Status.BOTH_DELETED:\n\t\t\tcase Status.ADDED_BY_US:\n\t\t\tcase Status.DELETED_BY_THEM:\n\t\t\tcase Status.ADDED_BY_THEM:\n\t\t\tcase Status.DELETED_BY_US:\n\t\t\tcase Status.BOTH_ADDED:\n\t\t\tcase Status.BOTH_MODIFIED:\n\t\t\t\treturn new ThemeColor('gitDecoration.conflictingResourceForeground');\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown git status: ' + type);\n\t\t}\n\t}\n\n\t@memoize\n\tget resourceUri(): Uri {\n\t\tif (this.renameResourceUri && (this._type === Status.MODIFIED || this._type === Status.DELETED || this._type === Status.INDEX_RENAMED || this._type === Status.INDEX_COPIED || this._type === Status.INTENT_TO_RENAME)) {\n\t\t\treturn this.renameResourceUri;\n\t\t}\n\n\t\treturn this._resourceUri;\n\t}\n\n\tget leftUri(): Uri | undefined {\n\t\treturn this.resources.left;\n\t}\n\n\tget rightUri(): Uri | undefined {\n\t\treturn this.resources.right;\n\t}\n\n\tget multiDiffEditorOriginalUri(): Uri | undefined {\n\t\treturn this.resources.original;\n\t}\n\n\tget multiFileDiffEditorModifiedUri(): Uri | undefined {\n\t\treturn this.resources.modified;\n\t}\n\n\t@memoize\n\tget command(): Command {\n\t\treturn this._commandResolver.resolveDefaultCommand(this);\n\t}\n\n\t@memoize\n\tprivate get resources(): { left: Uri | undefined; right: Uri | undefined; original: Uri | undefined; modified: Uri | undefined } {\n\t\treturn this._commandResolver.getResources(this);\n\t}\n\n\tget resourceGroupType(): ResourceGroupType { return this._resourceGroupType; }\n\tget type(): Status { return this._type; }\n\tget original(): Uri { return this._resourceUri; }\n\tget renameResourceUri(): Uri | undefined { return this._renameResourceUri; }\n\n\tprivate static Icons: any = {\n\t\tlight: {\n\t\t\tModified: getIconUri('status-modified', 'light'),\n\t\t\tAdded: getIconUri('status-added', 'light'),\n\t\t\tDeleted: getIconUri('status-deleted', 'light'),\n\t\t\tRenamed: getIconUri('status-renamed', 'light'),\n\t\t\tCopied: getIconUri('status-copied', 'light'),\n\t\t\tUntracked: getIconUri('status-untracked', 'light'),\n\t\t\tIgnored: getIconUri('status-ignored', 'light'),\n\t\t\tConflict: getIconUri('status-conflict', 'light'),\n\t\t\tTypeChanged: getIconUri('status-type-changed', 'light')\n\t\t},\n\t\tdark: {\n\t\t\tModified: getIconUri('status-modified', 'dark'),\n\t\t\tAdded: getIconUri('status-added', 'dark'),\n\t\t\tDeleted: getIconUri('status-deleted', 'dark'),\n\t\t\tRenamed: getIconUri('status-renamed', 'dark'),\n\t\t\tCopied: getIconUri('status-copied', 'dark'),\n\t\t\tUntracked: getIconUri('status-untracked', 'dark'),\n\t\t\tIgnored: getIconUri('status-ignored', 'dark'),\n\t\t\tConflict: getIconUri('status-conflict', 'dark'),\n\t\t\tTypeChanged: getIconUri('status-type-changed', 'dark')\n\t\t}\n\t};\n\n\tprivate getIconPath(theme: string): Uri {\n\t\tswitch (this.type) {\n\t\t\tcase Status.INDEX_MODIFIED: return Resource.Icons[theme].Modified;\n\t\t\tcase Status.MODIFIED: return Resource.Icons[theme].Modified;\n\t\t\tcase Status.INDEX_ADDED: return Resource.Icons[theme].Added;\n\t\t\tcase Status.INDEX_DELETED: return Resource.Icons[theme].Deleted;\n\t\t\tcase Status.DELETED: return Resource.Icons[theme].Deleted;\n\t\t\tcase Status.INDEX_RENAMED: return Resource.Icons[theme].Renamed;\n\t\t\tcase Status.INDEX_COPIED: return Resource.Icons[theme].Copied;\n\t\t\tcase Status.UNTRACKED: return Resource.Icons[theme].Untracked;\n\t\t\tcase Status.IGNORED: return Resource.Icons[theme].Ignored;\n\t\t\tcase Status.INTENT_TO_ADD: return Resource.Icons[theme].Added;\n\t\t\tcase Status.INTENT_TO_RENAME: return Resource.Icons[theme].Renamed;\n\t\t\tcase Status.TYPE_CHANGED: return Resource.Icons[theme].TypeChanged;\n\t\t\tcase Status.BOTH_DELETED: return Resource.Icons[theme].Conflict;\n\t\t\tcase Status.ADDED_BY_US: return Resource.Icons[theme].Conflict;\n\t\t\tcase Status.DELETED_BY_THEM: return Resource.Icons[theme].Conflict;\n\t\t\tcase Status.ADDED_BY_THEM: return Resource.Icons[theme].Conflict;\n\t\t\tcase Status.DELETED_BY_US: return Resource.Icons[theme].Conflict;\n\t\t\tcase Status.BOTH_ADDED: return Resource.Icons[theme].Conflict;\n\t\t\tcase Status.BOTH_MODIFIED: return Resource.Icons[theme].Conflict;\n\t\t\tdefault: throw new Error('Unknown git status: ' + this.type);\n\t\t}\n\t}\n\n\tprivate get tooltip(): string {\n\t\treturn Resource.getStatusText(this.type);\n\t}\n\n\tprivate get strikeThrough(): boolean {\n\t\tswitch (this.type) {\n\t\t\tcase Status.DELETED:\n\t\t\tcase Status.BOTH_DELETED:\n\t\t\tcase Status.DELETED_BY_THEM:\n\t\t\tcase Status.DELETED_BY_US:\n\t\t\tcase Status.INDEX_DELETED:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\t@memoize\n\tprivate get faded(): boolean {\n\t\t// TODO@joao\n\t\treturn false;\n\t\t// const workspaceRootPath = this.workspaceRoot.fsPath;\n\t\t// return this.resourceUri.fsPath.substr(0, workspaceRootPath.length) !== workspaceRootPath;\n\t}\n\n\tget decorations(): SourceControlResourceDecorations {\n\t\tconst light = this._useIcons ? { iconPath: this.getIconPath('light') } : undefined;\n\t\tconst dark = this._useIcons ? { iconPath: this.getIconPath('dark') } : undefined;\n\t\tconst tooltip = this.tooltip;\n\t\tconst strikeThrough = this.strikeThrough;\n\t\tconst faded = this.faded;\n\t\treturn { strikeThrough, faded, tooltip, light, dark };\n\t}\n\n\tget letter(): string {\n\t\treturn Resource.getStatusLetter(this.type);\n\t}\n\n\tget color(): ThemeColor {\n\t\treturn Resource.getStatusColor(this.type);\n\t}\n\n\tget priority(): number {\n\t\tswitch (this.type) {\n\t\t\tcase Status.INDEX_MODIFIED:\n\t\t\tcase Status.MODIFIED:\n\t\t\tcase Status.INDEX_COPIED:\n\t\t\tcase Status.TYPE_CHANGED:\n\t\t\t\treturn 2;\n\t\t\tcase Status.IGNORED:\n\t\t\t\treturn 3;\n\t\t\tcase Status.BOTH_DELETED:\n\t\t\tcase Status.ADDED_BY_US:\n\t\t\tcase Status.DELETED_BY_THEM:\n\t\t\tcase Status.ADDED_BY_THEM:\n\t\t\tcase Status.DELETED_BY_US:\n\t\t\tcase Status.BOTH_ADDED:\n\t\t\tcase Status.BOTH_MODIFIED:\n\t\t\t\treturn 4;\n\t\t\tdefault:\n\t\t\t\treturn 1;\n\t\t}\n\t}\n\n\tget resourceDecoration(): FileDecoration {\n\t\tconst res = new FileDecoration(this.letter, this.tooltip, this.color);\n\t\tres.propagate = this.type !== Status.DELETED && this.type !== Status.INDEX_DELETED;\n\t\treturn res;\n\t}\n\n\tconstructor(\n\t\tprivate _commandResolver: ResourceCommandResolver,\n\t\tprivate _resourceGroupType: ResourceGroupType,\n\t\tprivate _resourceUri: Uri,\n\t\tprivate _type: Status,\n\t\tprivate _useIcons: boolean,\n\t\tprivate _renameResourceUri?: Uri,\n\t) { }\n\n\tasync open(): Promise<void> {\n\t\tconst command = this.command;\n\t\tawait commands.executeCommand<void>(command.command, ...(command.arguments || []));\n\t}\n\n\tasync openFile(): Promise<void> {\n\t\tconst command = this._commandResolver.resolveFileCommand(this);\n\t\tawait commands.executeCommand<void>(command.command, ...(command.arguments || []));\n\t}\n\n\tasync openChange(): Promise<void> {\n\t\tconst command = this._commandResolver.resolveChangeCommand(this);\n\t\tawait commands.executeCommand<void>(command.command, ...(command.arguments || []));\n\t}\n\n\tclone(resourceGroupType?: ResourceGroupType) {\n\t\treturn new Resource(this._commandResolver, resourceGroupType ?? this._resourceGroupType, this._resourceUri, this._type, this._useIcons, this._renameResourceUri);\n\t}\n}\n\nexport interface GitResourceGroup extends SourceControlResourceGroup {\n\tresourceStates: Resource[];\n}\n\ninterface GitResourceGroups {\n\tindexGroup?: Resource[];\n\tmergeGroup?: Resource[];\n\tuntrackedGroup?: Resource[];\n\tworkingTreeGroup?: Resource[];\n}\n\nclass ProgressManager {\n\n\tprivate enabled = false;\n\tprivate disposable: IDisposable = EmptyDisposable;\n\n\tconstructor(private repository: Repository) {\n\t\tconst onDidChange = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git', Uri.file(this.repository.root)));\n\t\tonDidChange(_ => this.updateEnablement());\n\t\tthis.updateEnablement();\n\n\t\tthis.repository.onDidChangeOperations(() => {\n\t\t\t// Disable input box when the commit operation is running\n\t\t\tthis.repository.sourceControl.inputBox.enabled = !this.repository.operations.isRunning(OperationKind.Commit);\n\t\t});\n\t}\n\n\tprivate updateEnablement(): void {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\n\t\tif (config.get<boolean>('showProgress')) {\n\t\t\tthis.enable();\n\t\t} else {\n\t\t\tthis.disable();\n\t\t}\n\t}\n\n\tprivate enable(): void {\n\t\tif (this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst start = onceEvent(filterEvent(this.repository.onDidChangeOperations, () => this.repository.operations.shouldShowProgress()));\n\t\tconst end = onceEvent(filterEvent(debounceEvent(this.repository.onDidChangeOperations, 300), () => !this.repository.operations.shouldShowProgress()));\n\n\t\tconst setup = () => {\n\t\t\tthis.disposable = start(() => {\n\t\t\t\tconst promise = eventToPromise(end).then(() => setup());\n\t\t\t\twindow.withProgress({ location: ProgressLocation.SourceControl }, () => promise);\n\t\t\t});\n\t\t};\n\n\t\tsetup();\n\t\tthis.enabled = true;\n\t}\n\n\tprivate disable(): void {\n\t\tif (!this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.disposable.dispose();\n\t\tthis.disposable = EmptyDisposable;\n\t\tthis.enabled = false;\n\t}\n\n\tdispose(): void {\n\t\tthis.disable();\n\t}\n}\n\nclass FileEventLogger {\n\n\tprivate eventDisposable: IDisposable = EmptyDisposable;\n\tprivate logLevelDisposable: IDisposable = EmptyDisposable;\n\n\tconstructor(\n\t\tprivate onWorkspaceWorkingTreeFileChange: Event<Uri>,\n\t\tprivate onDotGitFileChange: Event<Uri>,\n\t\tprivate logger: LogOutputChannel\n\t) {\n\t\tthis.logLevelDisposable = logger.onDidChangeLogLevel(this.onDidChangeLogLevel, this);\n\t\tthis.onDidChangeLogLevel(logger.logLevel);\n\t}\n\n\tprivate onDidChangeLogLevel(logLevel: LogLevel): void {\n\t\tthis.eventDisposable.dispose();\n\n\t\tif (logLevel > LogLevel.Debug) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.eventDisposable = combinedDisposable([\n\t\t\tthis.onWorkspaceWorkingTreeFileChange(uri => this.logger.debug(`[FileEventLogger][onWorkspaceWorkingTreeFileChange] ${uri.fsPath}`)),\n\t\t\tthis.onDotGitFileChange(uri => this.logger.debug(`[FileEventLogger][onDotGitFileChange] ${uri.fsPath}`))\n\t\t]);\n\t}\n\n\tdispose(): void {\n\t\tthis.eventDisposable.dispose();\n\t\tthis.logLevelDisposable.dispose();\n\t}\n}\n\nclass DotGitWatcher implements IFileWatcher {\n\n\treadonly event: Event<Uri>;\n\n\tprivate emitter = new EventEmitter<Uri>();\n\tprivate transientDisposables: IDisposable[] = [];\n\tprivate disposables: IDisposable[] = [];\n\n\tconstructor(\n\t\tprivate repository: Repository,\n\t\tprivate logger: LogOutputChannel\n\t) {\n\t\tconst rootWatcher = watch(repository.dotGit.path);\n\t\tthis.disposables.push(rootWatcher);\n\n\t\t// Ignore changes to the \"index.lock\" file, and watchman fsmonitor hook (https://git-scm.com/docs/githooks#_fsmonitor_watchman) cookie files.\n\t\t// Watchman creates a cookie file inside the git directory whenever a query is run (https://facebook.github.io/watchman/docs/cookies.html).\n\t\tconst filteredRootWatcher = filterEvent(rootWatcher.event, uri => uri.scheme === 'file' && !/\\/\\.git(\\/index\\.lock)?$|\\/\\.watchman-cookie-/.test(uri.path));\n\t\tthis.event = anyEvent(filteredRootWatcher, this.emitter.event);\n\n\t\trepository.onDidRunGitStatus(this.updateTransientWatchers, this, this.disposables);\n\t\tthis.updateTransientWatchers();\n\t}\n\n\tprivate updateTransientWatchers() {\n\t\tthis.transientDisposables = dispose(this.transientDisposables);\n\n\t\tif (!this.repository.HEAD || !this.repository.HEAD.upstream) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.transientDisposables = dispose(this.transientDisposables);\n\n\t\tconst { name, remote } = this.repository.HEAD.upstream;\n\t\tconst upstreamPath = path.join(this.repository.dotGit.commonPath ?? this.repository.dotGit.path, 'refs', 'remotes', remote, name);\n\n\t\ttry {\n\t\t\tconst upstreamWatcher = watch(upstreamPath);\n\t\t\tthis.transientDisposables.push(upstreamWatcher);\n\t\t\tupstreamWatcher.event(this.emitter.fire, this.emitter, this.transientDisposables);\n\t\t} catch (err) {\n\t\t\tthis.logger.warn(`[DotGitWatcher][updateTransientWatchers] Failed to watch ref '${upstreamPath}', is most likely packed.`);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.emitter.dispose();\n\t\tthis.transientDisposables = dispose(this.transientDisposables);\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n\nclass ResourceCommandResolver {\n\n\tconstructor(private repository: Repository) { }\n\n\tresolveDefaultCommand(resource: Resource): Command {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst openDiffOnClick = config.get<boolean>('openDiffOnClick', true);\n\t\treturn openDiffOnClick ? this.resolveChangeCommand(resource) : this.resolveFileCommand(resource);\n\t}\n\n\tresolveFileCommand(resource: Resource): Command {\n\t\treturn {\n\t\t\tcommand: 'vscode.open',\n\t\t\ttitle: l10n.t('Open'),\n\t\t\targuments: [resource.resourceUri]\n\t\t};\n\t}\n\n\tresolveChangeCommand(resource: Resource): Command {\n\t\tconst title = this.getTitle(resource);\n\n\t\tif (!resource.leftUri) {\n\t\t\tconst bothModified = resource.type === Status.BOTH_MODIFIED;\n\t\t\tif (resource.rightUri && workspace.getConfiguration('git').get<boolean>('mergeEditor', false) && (bothModified || resource.type === Status.BOTH_ADDED)) {\n\t\t\t\treturn {\n\t\t\t\t\tcommand: 'git.openMergeEditor',\n\t\t\t\t\ttitle: l10n.t('Open Merge'),\n\t\t\t\t\targuments: [resource.rightUri]\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tcommand: 'vscode.open',\n\t\t\t\t\ttitle: l10n.t('Open'),\n\t\t\t\t\targuments: [resource.rightUri, { override: bothModified ? false : undefined }, title]\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tcommand: 'vscode.diff',\n\t\t\t\ttitle: l10n.t('Open'),\n\t\t\t\targuments: [resource.leftUri, resource.rightUri, title]\n\t\t\t};\n\t\t}\n\t}\n\n\tgetResources(resource: Resource): { left: Uri | undefined; right: Uri | undefined; original: Uri | undefined; modified: Uri | undefined } {\n\t\tfor (const submodule of this.repository.submodules) {\n\t\t\tif (path.join(this.repository.root, submodule.path) === resource.resourceUri.fsPath) {\n\t\t\t\tconst original = undefined;\n\t\t\t\tconst modified = toGitUri(resource.resourceUri, resource.resourceGroupType === ResourceGroupType.Index ? 'index' : 'wt', { submoduleOf: this.repository.root });\n\t\t\t\treturn { left: original, right: modified, original, modified };\n\t\t\t}\n\t\t}\n\n\t\tconst left = this.getLeftResource(resource);\n\t\tconst right = this.getRightResource(resource);\n\n\t\treturn {\n\t\t\tleft: left.original ?? left.modified,\n\t\t\tright: right.original ?? right.modified,\n\t\t\toriginal: left.original ?? right.original,\n\t\t\tmodified: left.modified ?? right.modified,\n\t\t};\n\t}\n\n\tprivate getLeftResource(resource: Resource): ModifiedOrOriginal {\n\t\tswitch (resource.type) {\n\t\t\tcase Status.INDEX_MODIFIED:\n\t\t\tcase Status.INDEX_RENAMED:\n\t\t\tcase Status.INTENT_TO_RENAME:\n\t\t\tcase Status.TYPE_CHANGED:\n\t\t\t\treturn { original: toGitUri(resource.original, 'HEAD') };\n\n\t\t\tcase Status.MODIFIED:\n\t\t\t\treturn { original: toGitUri(resource.resourceUri, '~') };\n\n\t\t\tcase Status.DELETED_BY_US:\n\t\t\tcase Status.DELETED_BY_THEM:\n\t\t\t\treturn { original: toGitUri(resource.resourceUri, '~1') };\n\t\t}\n\t\treturn {};\n\t}\n\n\tprivate getRightResource(resource: Resource): ModifiedOrOriginal {\n\t\tswitch (resource.type) {\n\t\t\tcase Status.INDEX_MODIFIED:\n\t\t\tcase Status.INDEX_ADDED:\n\t\t\tcase Status.INDEX_COPIED:\n\t\t\tcase Status.INDEX_RENAMED:\n\t\t\t\treturn { modified: toGitUri(resource.resourceUri, '') };\n\n\t\t\tcase Status.INDEX_DELETED:\n\t\t\tcase Status.DELETED:\n\t\t\t\treturn { original: toGitUri(resource.resourceUri, 'HEAD') };\n\n\t\t\tcase Status.DELETED_BY_US:\n\t\t\t\treturn { original: toGitUri(resource.resourceUri, '~3') };\n\n\t\t\tcase Status.DELETED_BY_THEM:\n\t\t\t\treturn { original: toGitUri(resource.resourceUri, '~2') };\n\n\t\t\tcase Status.MODIFIED:\n\t\t\tcase Status.UNTRACKED:\n\t\t\tcase Status.IGNORED:\n\t\t\tcase Status.INTENT_TO_ADD:\n\t\t\tcase Status.INTENT_TO_RENAME:\n\t\t\tcase Status.TYPE_CHANGED: {\n\t\t\t\tconst uriString = resource.resourceUri.toString();\n\t\t\t\tconst [indexStatus] = this.repository.indexGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString);\n\n\t\t\t\tif (indexStatus && indexStatus.renameResourceUri) {\n\t\t\t\t\treturn { modified: indexStatus.renameResourceUri };\n\t\t\t\t}\n\n\t\t\t\treturn { modified: resource.resourceUri };\n\t\t\t}\n\t\t\tcase Status.BOTH_ADDED:\n\t\t\tcase Status.BOTH_MODIFIED:\n\t\t\t\treturn { modified: resource.resourceUri };\n\t\t}\n\n\t\treturn {};\n\t}\n\n\tprivate getTitle(resource: Resource): string {\n\t\tconst basename = path.basename(resource.resourceUri.fsPath);\n\n\t\tswitch (resource.type) {\n\t\t\tcase Status.INDEX_MODIFIED:\n\t\t\tcase Status.INDEX_RENAMED:\n\t\t\tcase Status.INDEX_ADDED:\n\t\t\t\treturn l10n.t('{0} (Index)', basename);\n\n\t\t\tcase Status.MODIFIED:\n\t\t\tcase Status.BOTH_ADDED:\n\t\t\tcase Status.BOTH_MODIFIED:\n\t\t\t\treturn l10n.t('{0} (Working Tree)', basename);\n\n\t\t\tcase Status.INDEX_DELETED:\n\t\t\tcase Status.DELETED:\n\t\t\t\treturn l10n.t('{0} (Deleted)', basename);\n\n\t\t\tcase Status.DELETED_BY_US:\n\t\t\t\treturn l10n.t('{0} (Theirs)', basename);\n\n\t\t\tcase Status.DELETED_BY_THEM:\n\t\t\t\treturn l10n.t('{0} (Ours)', basename);\n\n\t\t\tcase Status.UNTRACKED:\n\t\t\t\treturn l10n.t('{0} (Untracked)', basename);\n\n\t\t\tcase Status.INTENT_TO_ADD:\n\t\t\tcase Status.INTENT_TO_RENAME:\n\t\t\t\treturn l10n.t('{0} (Intent to add)', basename);\n\n\t\t\tcase Status.TYPE_CHANGED:\n\t\t\t\treturn l10n.t('{0} (Type changed)', basename);\n\n\t\t\tdefault:\n\t\t\t\treturn '';\n\t\t}\n\t}\n}\n\ninterface ModifiedOrOriginal {\n\tmodified?: Uri | undefined;\n\toriginal?: Uri | undefined;\n}\n\ninterface BranchProtectionMatcher {\n\tinclude?: picomatch.Matcher;\n\texclude?: picomatch.Matcher;\n}\n\nexport interface IRepositoryResolver {\n\tgetRepository(sourceControl: SourceControl): Repository | undefined;\n\tgetRepository(resourceGroup: SourceControlResourceGroup): Repository | undefined;\n\tgetRepository(path: string): Repository | undefined;\n\tgetRepository(resource: Uri): Repository | undefined;\n\tgetRepository(hint: any): Repository | undefined;\n}\n\nexport class Repository implements Disposable {\n\n\tprivate _onDidChangeRepository = new EventEmitter<Uri>();\n\treadonly onDidChangeRepository: Event<Uri> = this._onDidChangeRepository.event;\n\n\tprivate _onDidChangeState = new EventEmitter<RepositoryState>();\n\treadonly onDidChangeState: Event<RepositoryState> = this._onDidChangeState.event;\n\n\tprivate _onDidChangeStatus = new EventEmitter<void>();\n\treadonly onDidRunGitStatus: Event<void> = this._onDidChangeStatus.event;\n\n\tprivate _onDidChangeOriginalResource = new EventEmitter<Uri>();\n\treadonly onDidChangeOriginalResource: Event<Uri> = this._onDidChangeOriginalResource.event;\n\n\tprivate _onRunOperation = new EventEmitter<OperationKind>();\n\treadonly onRunOperation: Event<OperationKind> = this._onRunOperation.event;\n\n\tprivate _onDidRunOperation = new EventEmitter<OperationResult>();\n\treadonly onDidRunOperation: Event<OperationResult> = this._onDidRunOperation.event;\n\n\tprivate _onDidChangeBranchProtection = new EventEmitter<void>();\n\treadonly onDidChangeBranchProtection: Event<void> = this._onDidChangeBranchProtection.event;\n\n\t@memoize\n\tget onDidChangeOperations(): Event<void> {\n\t\treturn anyEvent(this.onRunOperation as Event<any>, this.onDidRunOperation as Event<any>);\n\t}\n\n\tprivate _sourceControl: SourceControl;\n\tget sourceControl(): SourceControl { return this._sourceControl; }\n\n\tget inputBox(): SourceControlInputBox { return this._sourceControl.inputBox; }\n\n\tprivate _mergeGroup: SourceControlResourceGroup;\n\tget mergeGroup(): GitResourceGroup { return this._mergeGroup as GitResourceGroup; }\n\n\tprivate _indexGroup: SourceControlResourceGroup;\n\tget indexGroup(): GitResourceGroup { return this._indexGroup as GitResourceGroup; }\n\n\tprivate _workingTreeGroup: SourceControlResourceGroup;\n\tget workingTreeGroup(): GitResourceGroup { return this._workingTreeGroup as GitResourceGroup; }\n\n\tprivate _untrackedGroup: SourceControlResourceGroup;\n\tget untrackedGroup(): GitResourceGroup { return this._untrackedGroup as GitResourceGroup; }\n\n\tprivate _EMPTY_TREE: string | undefined;\n\n\tprivate _HEAD: Branch | undefined;\n\tget HEAD(): Branch | undefined {\n\t\treturn this._HEAD;\n\t}\n\n\tprivate _refs: Ref[] = [];\n\tget refs(): Ref[] {\n\t\treturn this._refs;\n\t}\n\n\tget headShortName(): string | undefined {\n\t\tif (!this.HEAD) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst HEAD = this.HEAD;\n\n\t\tif (HEAD.name) {\n\t\t\treturn HEAD.name;\n\t\t}\n\n\t\treturn (HEAD.commit || '').substr(0, 8);\n\t}\n\n\tprivate _remotes: Remote[] = [];\n\tget remotes(): Remote[] {\n\t\treturn this._remotes;\n\t}\n\n\tprivate _submodules: Submodule[] = [];\n\tget submodules(): Submodule[] {\n\t\treturn this._submodules;\n\t}\n\n\tprivate _rebaseCommit: Commit | undefined = undefined;\n\n\tset rebaseCommit(rebaseCommit: Commit | undefined) {\n\t\tif (this._rebaseCommit && !rebaseCommit) {\n\t\t\tthis.inputBox.value = '';\n\t\t} else if (rebaseCommit && (!this._rebaseCommit || this._rebaseCommit.hash !== rebaseCommit.hash)) {\n\t\t\tthis.inputBox.value = rebaseCommit.message;\n\t\t}\n\n\t\tconst shouldUpdateContext = !!this._rebaseCommit !== !!rebaseCommit;\n\t\tthis._rebaseCommit = rebaseCommit;\n\n\t\tif (shouldUpdateContext) {\n\t\t\tcommands.executeCommand('setContext', 'gitRebaseInProgress', !!this._rebaseCommit);\n\t\t}\n\t}\n\n\tget rebaseCommit(): Commit | undefined {\n\t\treturn this._rebaseCommit;\n\t}\n\n\tprivate _mergeInProgress: boolean = false;\n\n\tset mergeInProgress(value: boolean) {\n\t\tif (this._mergeInProgress === value) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mergeInProgress = value;\n\t\tcommands.executeCommand('setContext', 'gitMergeInProgress', value);\n\t}\n\n\tget mergeInProgress() {\n\t\treturn this._mergeInProgress;\n\t}\n\n\tprivate _cherryPickInProgress: boolean = false;\n\n\tset cherryPickInProgress(value: boolean) {\n\t\tif (this._cherryPickInProgress === value) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._cherryPickInProgress = value;\n\t\tcommands.executeCommand('setContext', 'gitCherryPickInProgress', value);\n\t}\n\n\tget cherryPickInProgress() {\n\t\treturn this._cherryPickInProgress;\n\t}\n\n\tprivate _operations = new OperationManager(this.logger);\n\tget operations(): OperationManager { return this._operations; }\n\n\tprivate _state = RepositoryState.Idle;\n\tget state(): RepositoryState { return this._state; }\n\tset state(state: RepositoryState) {\n\t\tthis._state = state;\n\t\tthis._onDidChangeState.fire(state);\n\n\t\tthis._HEAD = undefined;\n\t\tthis._remotes = [];\n\t\tthis.mergeGroup.resourceStates = [];\n\t\tthis.indexGroup.resourceStates = [];\n\t\tthis.workingTreeGroup.resourceStates = [];\n\t\tthis.untrackedGroup.resourceStates = [];\n\t\tthis._sourceControl.count = 0;\n\t}\n\n\tget root(): string {\n\t\treturn this.repository.root;\n\t}\n\n\tget rootRealPath(): string | undefined {\n\t\treturn this.repository.rootRealPath;\n\t}\n\n\tget dotGit(): { path: string; commonPath?: string } {\n\t\treturn this.repository.dotGit;\n\t}\n\n\tprivate _historyProvider: GitHistoryProvider;\n\tget historyProvider(): GitHistoryProvider { return this._historyProvider; }\n\n\tprivate isRepositoryHuge: false | { limit: number } = false;\n\tprivate didWarnAboutLimit = false;\n\n\tprivate unpublishedCommits: Set<string> | undefined = undefined;\n\tprivate branchProtection = new Map<string, BranchProtectionMatcher[]>();\n\tprivate commitCommandCenter: CommitCommandsCenter;\n\tprivate resourceCommandResolver = new ResourceCommandResolver(this);\n\tprivate updateModelStateCancellationTokenSource: CancellationTokenSource | undefined;\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(\n\t\tprivate readonly repository: BaseRepository,\n\t\tprivate readonly repositoryResolver: IRepositoryResolver,\n\t\tprivate pushErrorHandlerRegistry: IPushErrorHandlerRegistry,\n\t\tremoteSourcePublisherRegistry: IRemoteSourcePublisherRegistry,\n\t\tpostCommitCommandsProviderRegistry: IPostCommitCommandsProviderRegistry,\n\t\tprivate readonly branchProtectionProviderRegistry: IBranchProtectionProviderRegistry,\n\t\thistoryItemDetailProviderRegistry: ISourceControlHistoryItemDetailsProviderRegistry,\n\t\tglobalState: Memento,\n\t\tprivate readonly logger: LogOutputChannel,\n\t\tprivate telemetryReporter: TelemetryReporter\n\t) {\n\t\tconst repositoryWatcher = workspace.createFileSystemWatcher(new RelativePattern(Uri.file(repository.root), '**'));\n\t\tthis.disposables.push(repositoryWatcher);\n\n\t\tconst onRepositoryFileChange = anyEvent(repositoryWatcher.onDidChange, repositoryWatcher.onDidCreate, repositoryWatcher.onDidDelete);\n\t\tconst onRepositoryWorkingTreeFileChange = filterEvent(onRepositoryFileChange, uri => !/\\.git($|\\\\|\\/)/.test(relativePath(repository.root, uri.fsPath)));\n\n\t\tlet onRepositoryDotGitFileChange: Event<Uri>;\n\n\t\ttry {\n\t\t\tconst dotGitFileWatcher = new DotGitWatcher(this, logger);\n\t\t\tonRepositoryDotGitFileChange = dotGitFileWatcher.event;\n\t\t\tthis.disposables.push(dotGitFileWatcher);\n\t\t} catch (err) {\n\t\t\tlogger.error(`Failed to watch path:'${this.dotGit.path}' or commonPath:'${this.dotGit.commonPath}', reverting to legacy API file watched. Some events might be lost.\\n${err.stack || err}`);\n\n\t\t\tonRepositoryDotGitFileChange = filterEvent(onRepositoryFileChange, uri => /\\.git($|\\\\|\\/)/.test(uri.path));\n\t\t}\n\n\t\t// FS changes should trigger `git status`:\n\t\t// \t- any change inside the repository working tree\n\t\t//\t- any change whithin the first level of the `.git` folder, except the folder itself and `index.lock`\n\t\tconst onFileChange = anyEvent(onRepositoryWorkingTreeFileChange, onRepositoryDotGitFileChange);\n\t\tonFileChange(this.onFileChange, this, this.disposables);\n\n\t\t// Relevate repository changes should trigger virtual document change events\n\t\tonRepositoryDotGitFileChange(this._onDidChangeRepository.fire, this._onDidChangeRepository, this.disposables);\n\n\t\tthis.disposables.push(new FileEventLogger(onRepositoryWorkingTreeFileChange, onRepositoryDotGitFileChange, logger));\n\n\t\tconst root = Uri.file(repository.root);\n\t\tthis._sourceControl = scm.createSourceControl('git', 'Git', root);\n\n\t\tthis._sourceControl.quickDiffProvider = this;\n\n\t\tthis._historyProvider = new GitHistoryProvider(historyItemDetailProviderRegistry, this, logger);\n\t\tthis._sourceControl.historyProvider = this._historyProvider;\n\t\tthis.disposables.push(this._historyProvider);\n\n\t\tthis._sourceControl.acceptInputCommand = { command: 'git.commit', title: l10n.t('Commit'), arguments: [this._sourceControl] };\n\t\tthis._sourceControl.inputBox.validateInput = this.validateInput.bind(this);\n\n\t\tthis.disposables.push(this._sourceControl);\n\n\t\tthis.updateInputBoxPlaceholder();\n\t\tthis.disposables.push(this.onDidRunGitStatus(() => this.updateInputBoxPlaceholder()));\n\n\t\tthis._mergeGroup = this._sourceControl.createResourceGroup('merge', l10n.t('Merge Changes'));\n\t\tthis._indexGroup = this._sourceControl.createResourceGroup('index', l10n.t('Staged Changes'), { multiDiffEditorEnableViewChanges: true });\n\t\tthis._workingTreeGroup = this._sourceControl.createResourceGroup('workingTree', l10n.t('Changes'), { multiDiffEditorEnableViewChanges: true });\n\t\tthis._untrackedGroup = this._sourceControl.createResourceGroup('untracked', l10n.t('Untracked Changes'), { multiDiffEditorEnableViewChanges: true });\n\n\t\tconst updateIndexGroupVisibility = () => {\n\t\t\tconst config = workspace.getConfiguration('git', root);\n\t\t\tthis.indexGroup.hideWhenEmpty = !config.get<boolean>('alwaysShowStagedChangesResourceGroup');\n\t\t};\n\n\t\tconst onConfigListener = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.alwaysShowStagedChangesResourceGroup', root));\n\t\tonConfigListener(updateIndexGroupVisibility, this, this.disposables);\n\t\tupdateIndexGroupVisibility();\n\n\t\tworkspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('git.mergeEditor')) {\n\t\t\t\tthis.mergeGroup.resourceStates = this.mergeGroup.resourceStates.map(r => r.clone());\n\t\t\t}\n\t\t}, undefined, this.disposables);\n\n\t\tfilterEvent(workspace.onDidChangeConfiguration, e =>\n\t\t\te.affectsConfiguration('git.branchSortOrder', root)\n\t\t\t|| e.affectsConfiguration('git.untrackedChanges', root)\n\t\t\t|| e.affectsConfiguration('git.ignoreSubmodules', root)\n\t\t\t|| e.affectsConfiguration('git.openDiffOnClick', root)\n\t\t\t|| e.affectsConfiguration('git.showActionButton', root)\n\t\t\t|| e.affectsConfiguration('git.similarityThreshold', root)\n\t\t)(() => this.updateModelState(), this, this.disposables);\n\n\t\tconst updateInputBoxVisibility = () => {\n\t\t\tconst config = workspace.getConfiguration('git', root);\n\t\t\tthis._sourceControl.inputBox.visible = config.get<boolean>('showCommitInput', true);\n\t\t};\n\n\t\tconst onConfigListenerForInputBoxVisibility = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.showCommitInput', root));\n\t\tonConfigListenerForInputBoxVisibility(updateInputBoxVisibility, this, this.disposables);\n\t\tupdateInputBoxVisibility();\n\n\t\tthis.mergeGroup.hideWhenEmpty = true;\n\t\tthis.untrackedGroup.hideWhenEmpty = true;\n\n\t\tthis.disposables.push(this.mergeGroup);\n\t\tthis.disposables.push(this.indexGroup);\n\t\tthis.disposables.push(this.workingTreeGroup);\n\t\tthis.disposables.push(this.untrackedGroup);\n\n\t\t// Don't allow auto-fetch in untrusted workspaces\n\t\tif (workspace.isTrusted) {\n\t\t\tthis.disposables.push(new AutoFetcher(this, globalState));\n\t\t} else {\n\t\t\tconst trustDisposable = workspace.onDidGrantWorkspaceTrust(() => {\n\t\t\t\ttrustDisposable.dispose();\n\t\t\t\tthis.disposables.push(new AutoFetcher(this, globalState));\n\t\t\t});\n\t\t\tthis.disposables.push(trustDisposable);\n\t\t}\n\n\t\t// https://github.com/microsoft/vscode/issues/39039\n\t\tconst onSuccessfulPush = filterEvent(this.onDidRunOperation, e => e.operation.kind === OperationKind.Push && !e.error);\n\t\tonSuccessfulPush(() => {\n\t\t\tconst gitConfig = workspace.getConfiguration('git');\n\n\t\t\tif (gitConfig.get<boolean>('showPushSuccessNotification')) {\n\t\t\t\twindow.showInformationMessage(l10n.t('Successfully pushed.'));\n\t\t\t}\n\t\t}, null, this.disposables);\n\n\t\t// Default branch protection provider\n\t\tconst onBranchProtectionProviderChanged = filterEvent(this.branchProtectionProviderRegistry.onDidChangeBranchProtectionProviders, e => pathEquals(e.fsPath, root.fsPath));\n\t\tthis.disposables.push(onBranchProtectionProviderChanged(root => this.updateBranchProtectionMatchers(root)));\n\t\tthis.disposables.push(this.branchProtectionProviderRegistry.registerBranchProtectionProvider(root, new GitBranchProtectionProvider(root)));\n\n\t\tconst statusBar = new StatusBarCommands(this, remoteSourcePublisherRegistry);\n\t\tthis.disposables.push(statusBar);\n\t\tstatusBar.onDidChange(() => this._sourceControl.statusBarCommands = statusBar.commands, null, this.disposables);\n\t\tthis._sourceControl.statusBarCommands = statusBar.commands;\n\n\t\tthis.commitCommandCenter = new CommitCommandsCenter(globalState, this, postCommitCommandsProviderRegistry);\n\t\tthis.disposables.push(this.commitCommandCenter);\n\n\t\tconst actionButton = new ActionButton(this, this.commitCommandCenter, this.logger);\n\t\tthis.disposables.push(actionButton);\n\t\tactionButton.onDidChange(() => this._sourceControl.actionButton = actionButton.button, this, this.disposables);\n\t\tthis._sourceControl.actionButton = actionButton.button;\n\n\t\tconst progressManager = new ProgressManager(this);\n\t\tthis.disposables.push(progressManager);\n\n\t\tconst onDidChangeCountBadge = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.countBadge', root));\n\t\tonDidChangeCountBadge(this.setCountBadge, this, this.disposables);\n\t\tthis.setCountBadge();\n\t}\n\n\tvalidateInput(text: string, _: number): SourceControlInputBoxValidation | undefined {\n\t\tif (this.isRepositoryHuge) {\n\t\t\treturn {\n\t\t\t\tmessage: l10n.t('Too many changes were detected. Only the first {0} changes will be shown below.', this.isRepositoryHuge.limit),\n\t\t\t\ttype: SourceControlInputBoxValidationType.Warning\n\t\t\t};\n\t\t}\n\n\t\tif (this.rebaseCommit) {\n\t\t\tif (this.rebaseCommit.message !== text) {\n\t\t\t\treturn {\n\t\t\t\t\tmessage: l10n.t('It\\'s not possible to change the commit message in the middle of a rebase. Please complete the rebase operation and use interactive rebase instead.'),\n\t\t\t\t\ttype: SourceControlInputBoxValidationType.Warning\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Quick diff label\n\t */\n\tget label(): string {\n\t\treturn l10n.t('Git local changes (working tree)');\n\t}\n\n\tprovideOriginalResource(uri: Uri): Uri | undefined {\n\t\tif (uri.scheme !== 'file') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore path that is not inside the current repository\n\t\tif (this.repositoryResolver.getRepository(uri) !== this) {\n\t\t\tthis.logger.trace(`[Repository][provideOriginalResource] Resource is not part of the repository: ${uri.toString()}`);\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Ignore path that is inside a merge group\n\t\tif (this.mergeGroup.resourceStates.some(r => pathEquals(r.resourceUri.fsPath, uri.fsPath))) {\n\t\t\tthis.logger.trace(`[Repository][provideOriginalResource] Resource is part of a merge group: ${uri.toString()}`);\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Ignore path that is untracked\n\t\tif (this.untrackedGroup.resourceStates.some(r => pathEquals(r.resourceUri.path, uri.path)) ||\n\t\t\tthis.workingTreeGroup.resourceStates.some(r => pathEquals(r.resourceUri.path, uri.path) && r.type === Status.UNTRACKED)) {\n\t\t\tthis.logger.trace(`[Repository][provideOriginalResource] Resource is untracked: ${uri.toString()}`);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst activeTabInput = window.tabGroups.activeTabGroup.activeTab?.input;\n\n\t\t// Ignore file that is on the right-hand side of a diff editor\n\t\tif (activeTabInput instanceof TabInputTextDiff && pathEquals(activeTabInput.modified.fsPath, uri.fsPath)) {\n\t\t\tthis.logger.trace(`[Repository][provideOriginalResource] Resource is on the right-hand side of a diff editor: ${uri.toString()}`);\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Ignore file that is on the right -hand side of a multi-file diff editor\n\t\tif (activeTabInput instanceof TabInputTextMultiDiff && activeTabInput.textDiffs.some(diff => pathEquals(diff.modified.fsPath, uri.fsPath))) {\n\t\t\tthis.logger.trace(`[Repository][provideOriginalResource] Resource is on the right-hand side of a multi-file diff editor: ${uri.toString()}`);\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn toGitUri(uri, '', { replaceFileExtension: true });\n\t}\n\n\tasync getInputTemplate(): Promise<string> {\n\t\tconst commitMessage = (await Promise.all([this.repository.getMergeMessage(), this.repository.getSquashMessage()])).find(msg => !!msg);\n\n\t\tif (commitMessage) {\n\t\t\treturn commitMessage;\n\t\t}\n\n\t\treturn await this.repository.getCommitTemplate();\n\t}\n\n\tgetConfigs(): Promise<{ key: string; value: string }[]> {\n\t\treturn this.run(Operation.Config(true), () => this.repository.getConfigs('local'));\n\t}\n\n\tgetConfig(key: string): Promise<string> {\n\t\treturn this.run(Operation.Config(true), () => this.repository.config('get', 'local', key));\n\t}\n\n\tgetGlobalConfig(key: string): Promise<string> {\n\t\treturn this.run(Operation.Config(true), () => this.repository.config('get', 'global', key));\n\t}\n\n\tsetConfig(key: string, value: string): Promise<string> {\n\t\treturn this.run(Operation.Config(false), () => this.repository.config('add', 'local', key, value));\n\t}\n\n\tunsetConfig(key: string): Promise<string> {\n\t\treturn this.run(Operation.Config(false), () => this.repository.config('unset', 'local', key));\n\t}\n\n\tlog(options?: LogOptions & { silent?: boolean }): Promise<Commit[]> {\n\t\tconst showProgress = !options || options.silent !== true;\n\t\treturn this.run(Operation.Log(showProgress), () => this.repository.log(options));\n\t}\n\n\tlogFile(uri: Uri, options?: LogFileOptions): Promise<Commit[]> {\n\t\t// TODO: This probably needs per-uri granularity\n\t\treturn this.run(Operation.LogFile, () => this.repository.logFile(uri, options));\n\t}\n\n\t@throttle\n\tasync status(): Promise<void> {\n\t\tawait this.run(Operation.Status);\n\t}\n\n\t@throttle\n\tasync refresh(): Promise<void> {\n\t\tawait this.run(Operation.Refresh);\n\t}\n\n\tdiff(cached?: boolean): Promise<string> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diff(cached));\n\t}\n\n\tdiffWithHEAD(): Promise<Change[]>;\n\tdiffWithHEAD(path: string): Promise<string>;\n\tdiffWithHEAD(path?: string | undefined): Promise<string | Change[]>;\n\tdiffWithHEAD(path?: string | undefined): Promise<string | Change[]> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diffWithHEAD(path));\n\t}\n\n\tdiffWith(ref: string): Promise<Change[]>;\n\tdiffWith(ref: string, path: string): Promise<string>;\n\tdiffWith(ref: string, path?: string | undefined): Promise<string | Change[]>;\n\tdiffWith(ref: string, path?: string): Promise<string | Change[]> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diffWith(ref, path));\n\t}\n\n\tdiffIndexWithHEAD(): Promise<Change[]>;\n\tdiffIndexWithHEAD(path: string): Promise<string>;\n\tdiffIndexWithHEAD(path?: string | undefined): Promise<string | Change[]>;\n\tdiffIndexWithHEAD(path?: string): Promise<string | Change[]> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diffIndexWithHEAD(path));\n\t}\n\n\tdiffIndexWith(ref: string): Promise<Change[]>;\n\tdiffIndexWith(ref: string, path: string): Promise<string>;\n\tdiffIndexWith(ref: string, path?: string | undefined): Promise<string | Change[]>;\n\tdiffIndexWith(ref: string, path?: string): Promise<string | Change[]> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diffIndexWith(ref, path));\n\t}\n\n\tdiffBlobs(object1: string, object2: string): Promise<string> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diffBlobs(object1, object2));\n\t}\n\n\tdiffBetween(ref1: string, ref2: string): Promise<Change[]>;\n\tdiffBetween(ref1: string, ref2: string, path: string): Promise<string>;\n\tdiffBetween(ref1: string, ref2: string, path?: string | undefined): Promise<string | Change[]>;\n\tdiffBetween(ref1: string, ref2: string, path?: string): Promise<string | Change[]> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diffBetween(ref1, ref2, path));\n\t}\n\n\tdiffBetweenShortStat(ref1: string, ref2: string): Promise<{ files: number; insertions: number; deletions: number }> {\n\t\treturn this.run(Operation.Diff, () => this.repository.diffBetweenShortStat(ref1, ref2));\n\t}\n\n\tdiffTrees(treeish1: string, treeish2?: string): Promise<Change[]> {\n\t\tconst scopedConfig = workspace.getConfiguration('git', Uri.file(this.root));\n\t\tconst similarityThreshold = scopedConfig.get<number>('similarityThreshold', 50);\n\n\t\treturn this.run(Operation.Diff, () => this.repository.diffTrees(treeish1, treeish2, { similarityThreshold }));\n\t}\n\n\tgetMergeBase(ref1: string, ref2: string, ...refs: string[]): Promise<string | undefined> {\n\t\treturn this.run(Operation.MergeBase, () => this.repository.getMergeBase(ref1, ref2, ...refs));\n\t}\n\n\tasync hashObject(data: string): Promise<string> {\n\t\treturn this.run(Operation.HashObject, () => this.repository.hashObject(data));\n\t}\n\n\tasync add(resources: Uri[], opts?: { update?: boolean }): Promise<void> {\n\t\tawait this.run(\n\t\t\tOperation.Add(!this.optimisticUpdateEnabled()),\n\t\t\tasync () => {\n\t\t\t\tawait this.repository.add(resources.map(r => r.fsPath), opts);\n\t\t\t\tthis.closeDiffEditors([], [...resources.map(r => r.fsPath)]);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tconst resourcePaths = resources.map(r => r.fsPath);\n\t\t\t\tconst indexGroupResourcePaths = this.indexGroup.resourceStates.map(r => r.resourceUri.fsPath);\n\n\t\t\t\t// Collect added resources\n\t\t\t\tconst addedResourceStates: Resource[] = [];\n\t\t\t\tfor (const resource of [...this.mergeGroup.resourceStates, ...this.untrackedGroup.resourceStates, ...this.workingTreeGroup.resourceStates]) {\n\t\t\t\t\tif (resourcePaths.includes(resource.resourceUri.fsPath) && !indexGroupResourcePaths.includes(resource.resourceUri.fsPath)) {\n\t\t\t\t\t\taddedResourceStates.push(resource.clone(ResourceGroupType.Index));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add new resource(s) to index group\n\t\t\t\tconst indexGroup = [...this.indexGroup.resourceStates, ...addedResourceStates];\n\n\t\t\t\t// Remove resource(s) from merge group\n\t\t\t\tconst mergeGroup = this.mergeGroup.resourceStates\n\t\t\t\t\t.filter(r => !resourcePaths.includes(r.resourceUri.fsPath));\n\n\t\t\t\t// Remove resource(s) from working group\n\t\t\t\tconst workingTreeGroup = this.workingTreeGroup.resourceStates\n\t\t\t\t\t.filter(r => !resourcePaths.includes(r.resourceUri.fsPath));\n\n\t\t\t\t// Remove resource(s) from untracked group\n\t\t\t\tconst untrackedGroup = this.untrackedGroup.resourceStates\n\t\t\t\t\t.filter(r => !resourcePaths.includes(r.resourceUri.fsPath));\n\n\t\t\t\treturn { indexGroup, mergeGroup, workingTreeGroup, untrackedGroup };\n\t\t\t});\n\t}\n\n\tasync rm(resources: Uri[]): Promise<void> {\n\t\tawait this.run(Operation.Remove, () => this.repository.rm(resources.map(r => r.fsPath)));\n\t}\n\n\tasync stage(resource: Uri, contents: string, encoding: string): Promise<void> {\n\t\tawait this.run(Operation.Stage, async () => {\n\t\t\tconst data = await workspace.encode(contents, resource, { encoding });\n\t\t\tawait this.repository.stage(resource.fsPath, data);\n\n\t\t\tthis._onDidChangeOriginalResource.fire(resource);\n\t\t\tthis.closeDiffEditors([], [...resource.fsPath]);\n\t\t});\n\t}\n\n\tasync revert(resources: Uri[]): Promise<void> {\n\t\tawait this.run(\n\t\t\tOperation.RevertFiles(!this.optimisticUpdateEnabled()),\n\t\t\tasync () => {\n\t\t\t\tawait this.repository.revert('HEAD', resources.map(r => r.fsPath));\n\t\t\t\tthis.closeDiffEditors([...resources.length !== 0 ?\n\t\t\t\t\tresources.map(r => r.fsPath) :\n\t\t\t\t\tthis.indexGroup.resourceStates.map(r => r.resourceUri.fsPath)], []);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\t\t\tconst untrackedChanges = config.get<'mixed' | 'separate' | 'hidden'>('untrackedChanges');\n\t\t\t\tconst untrackedChangesResourceGroupType = untrackedChanges === 'mixed' ? ResourceGroupType.WorkingTree : ResourceGroupType.Untracked;\n\n\t\t\t\tconst resourcePaths = resources.length === 0 ?\n\t\t\t\t\tthis.indexGroup.resourceStates.map(r => r.resourceUri.fsPath) : resources.map(r => r.fsPath);\n\n\t\t\t\t// Collect removed resources\n\t\t\t\tconst trackedResources: Resource[] = [];\n\t\t\t\tconst untrackedResources: Resource[] = [];\n\t\t\t\tfor (const resource of this.indexGroup.resourceStates) {\n\t\t\t\t\tif (resourcePaths.includes(resource.resourceUri.fsPath)) {\n\t\t\t\t\t\tif (resource.type === Status.INDEX_ADDED) {\n\t\t\t\t\t\t\tuntrackedResources.push(resource.clone(untrackedChangesResourceGroupType));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttrackedResources.push(resource.clone(ResourceGroupType.WorkingTree));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove resource(s) from index group\n\t\t\t\tconst indexGroup = this.indexGroup.resourceStates\n\t\t\t\t\t.filter(r => !resourcePaths.includes(r.resourceUri.fsPath));\n\n\t\t\t\t// Add resource(s) to working group\n\t\t\t\tconst workingTreeGroup = untrackedChanges === 'mixed' ?\n\t\t\t\t\t[...this.workingTreeGroup.resourceStates, ...trackedResources, ...untrackedResources] :\n\t\t\t\t\t[...this.workingTreeGroup.resourceStates, ...trackedResources];\n\n\t\t\t\t// Add resource(s) to untracked group\n\t\t\t\tconst untrackedGroup = untrackedChanges === 'separate' ?\n\t\t\t\t\t[...this.untrackedGroup.resourceStates, ...untrackedResources] : undefined;\n\n\t\t\t\treturn { indexGroup, workingTreeGroup, untrackedGroup };\n\t\t\t});\n\t}\n\n\tasync commit(message: string | undefined, opts: CommitOptions = Object.create(null)): Promise<void> {\n\t\tconst indexResources = [...this.indexGroup.resourceStates.map(r => r.resourceUri.fsPath)];\n\t\tconst workingGroupResources = opts.all && opts.all !== 'tracked' ?\n\t\t\t[...this.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath)] : [];\n\n\t\tif (this.rebaseCommit) {\n\t\t\tawait this.run(\n\t\t\t\tOperation.RebaseContinue,\n\t\t\t\tasync () => {\n\t\t\t\t\tif (opts.all) {\n\t\t\t\t\t\tconst addOpts = opts.all === 'tracked' ? { update: true } : {};\n\t\t\t\t\t\tawait this.repository.add([], addOpts);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this.repository.rebaseContinue();\n\t\t\t\t\tawait this.commitOperationCleanup(message, indexResources, workingGroupResources);\n\t\t\t\t},\n\t\t\t\t() => this.commitOperationGetOptimisticResourceGroups(opts));\n\t\t} else {\n\t\t\t// Set post-commit command to render the correct action button\n\t\t\tthis.commitCommandCenter.postCommitCommand = opts.postCommitCommand;\n\n\t\t\tawait this.run(\n\t\t\t\tOperation.Commit,\n\t\t\t\tasync () => {\n\t\t\t\t\tif (opts.all) {\n\t\t\t\t\t\tconst addOpts = opts.all === 'tracked' ? { update: true } : {};\n\t\t\t\t\t\tawait this.repository.add([], addOpts);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete opts.all;\n\n\t\t\t\t\tif (opts.requireUserConfig === undefined || opts.requireUserConfig === null) {\n\t\t\t\t\t\tconst config = workspace.getConfiguration('git', Uri.file(this.root));\n\t\t\t\t\t\topts.requireUserConfig = config.get<boolean>('requireGitUserConfig');\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this.repository.commit(message, opts);\n\t\t\t\t\tawait this.commitOperationCleanup(message, indexResources, workingGroupResources);\n\t\t\t\t},\n\t\t\t\t() => this.commitOperationGetOptimisticResourceGroups(opts));\n\n\t\t\t// Execute post-commit command\n\t\t\tawait this.run(Operation.PostCommitCommand, async () => {\n\t\t\t\tawait this.commitCommandCenter.executePostCommitCommand(opts.postCommitCommand);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async commitOperationCleanup(message: string | undefined, indexResources: string[], workingGroupResources: string[]) {\n\t\tif (message) {\n\t\t\tthis.inputBox.value = await this.getInputTemplate();\n\t\t}\n\t\tthis.closeDiffEditors(indexResources, workingGroupResources);\n\t}\n\n\tprivate commitOperationGetOptimisticResourceGroups(opts: CommitOptions): GitResourceGroups {\n\t\tlet untrackedGroup: Resource[] | undefined = undefined,\n\t\t\tworkingTreeGroup: Resource[] | undefined = undefined;\n\n\t\tif (opts.all === 'tracked') {\n\t\t\tworkingTreeGroup = this.workingTreeGroup.resourceStates\n\t\t\t\t.filter(r => r.type === Status.UNTRACKED);\n\t\t} else if (opts.all) {\n\t\t\tuntrackedGroup = workingTreeGroup = [];\n\t\t}\n\n\t\treturn { indexGroup: [], mergeGroup: [], untrackedGroup, workingTreeGroup };\n\t}\n\n\tasync clean(resources: Uri[]): Promise<void> {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst discardUntrackedChangesToTrash = config.get<boolean>('discardUntrackedChangesToTrash', true) && !isRemote && !isLinuxSnap;\n\n\t\tawait this.run(\n\t\t\tOperation.Clean(!this.optimisticUpdateEnabled()),\n\t\t\tasync () => {\n\t\t\t\tconst toClean: string[] = [];\n\t\t\t\tconst toCheckout: string[] = [];\n\t\t\t\tconst submodulesToUpdate: string[] = [];\n\t\t\t\tconst resourceStates = [...this.workingTreeGroup.resourceStates, ...this.untrackedGroup.resourceStates];\n\n\t\t\t\tresources.forEach(r => {\n\t\t\t\t\tconst fsPath = r.fsPath;\n\n\t\t\t\t\tfor (const submodule of this.submodules) {\n\t\t\t\t\t\tif (path.join(this.root, submodule.path) === fsPath) {\n\t\t\t\t\t\t\tsubmodulesToUpdate.push(fsPath);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst raw = r.toString();\n\t\t\t\t\tconst scmResource = find(resourceStates, sr => sr.resourceUri.toString() === raw);\n\n\t\t\t\t\tif (!scmResource) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (scmResource.type) {\n\t\t\t\t\t\tcase Status.UNTRACKED:\n\t\t\t\t\t\tcase Status.IGNORED:\n\t\t\t\t\t\t\ttoClean.push(fsPath);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\ttoCheckout.push(fsPath);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (toClean.length > 0) {\n\t\t\t\t\tif (discardUntrackedChangesToTrash) {\n\t\t\t\t\t\tconst limiter = new Limiter<void>(5);\n\t\t\t\t\t\tawait Promise.all(toClean.map(fsPath => limiter.queue(\n\t\t\t\t\t\t\tasync () => await workspace.fs.delete(Uri.file(fsPath), { useTrash: true }))));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.repository.clean(toClean);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (toCheckout.length > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.repository.checkout('', toCheckout);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (err.gitErrorCode !== GitErrorCodes.BranchNotYetBorn) {\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (submodulesToUpdate.length > 0) {\n\t\t\t\t\tawait this.repository.updateSubmodules(submodulesToUpdate);\n\t\t\t\t}\n\n\t\t\t\tthis.closeDiffEditors([], [...toClean, ...toCheckout]);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tconst resourcePaths = resources.map(r => r.fsPath);\n\n\t\t\t\t// Remove resource(s) from working group\n\t\t\t\tconst workingTreeGroup = this.workingTreeGroup.resourceStates\n\t\t\t\t\t.filter(r => !resourcePaths.includes(r.resourceUri.fsPath));\n\n\t\t\t\t// Remove resource(s) from untracked group\n\t\t\t\tconst untrackedGroup = this.untrackedGroup.resourceStates\n\t\t\t\t\t.filter(r => !resourcePaths.includes(r.resourceUri.fsPath));\n\n\t\t\t\treturn { workingTreeGroup, untrackedGroup };\n\t\t\t});\n\t}\n\n\tcloseDiffEditors(indexResources: string[] | undefined, workingTreeResources: string[] | undefined, ignoreSetting = false): void {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.root));\n\t\tif (!config.get<boolean>('closeDiffOnOperation', false) && !ignoreSetting) { return; }\n\n\t\tfunction checkTabShouldClose(input: TabInputTextDiff | TabInputNotebookDiff) {\n\t\t\tif (input.modified.scheme === 'git' && (indexResources === undefined || indexResources.some(r => pathEquals(r, input.modified.fsPath)))) {\n\t\t\t\t// Index\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (input.modified.scheme === 'file' && input.original.scheme === 'git' && (workingTreeResources === undefined || workingTreeResources.some(r => pathEquals(r, input.modified.fsPath)))) {\n\t\t\t\t// Working Tree\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst diffEditorTabsToClose = window.tabGroups.all\n\t\t\t.flatMap(g => g.tabs)\n\t\t\t.filter(({ input }) => {\n\t\t\t\tif (input instanceof TabInputTextDiff || input instanceof TabInputNotebookDiff) {\n\t\t\t\t\treturn checkTabShouldClose(input);\n\t\t\t\t} else if (input instanceof TabInputTextMultiDiff) {\n\t\t\t\t\treturn input.textDiffs.every(checkTabShouldClose);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t// Close editors\n\t\twindow.tabGroups.close(diffEditorTabsToClose, true);\n\t}\n\n\tasync branch(name: string, _checkout: boolean, _ref?: string): Promise<void> {\n\t\tawait this.run(Operation.Branch, () => this.repository.branch(name, _checkout, _ref));\n\t}\n\n\tasync deleteBranch(name: string, force?: boolean): Promise<void> {\n\t\treturn this.run(Operation.DeleteBranch, async () => {\n\t\t\tawait this.repository.deleteBranch(name, force);\n\t\t\tawait this.repository.config('unset', 'local', `branch.${name}.vscode-merge-base`);\n\t\t});\n\t}\n\n\tasync renameBranch(name: string): Promise<void> {\n\t\tawait this.run(Operation.RenameBranch, () => this.repository.renameBranch(name));\n\t}\n\n\t@throttle\n\tasync fastForwardBranch(name: string): Promise<void> {\n\t\t// Get branch details\n\t\tconst branch = await this.getBranch(name);\n\t\tif (!branch.upstream?.remote || !branch.upstream?.name || !branch.name) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Fast-forward the branch if possible\n\t\t\tconst options = { remote: branch.upstream.remote, ref: `${branch.upstream.name}:${branch.name}` };\n\t\t\tawait this.run(Operation.Fetch(true), async () => this.repository.fetch(options));\n\t\t} catch (err) {\n\t\t\tif (err.gitErrorCode === GitErrorCodes.BranchFastForwardRejected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync cherryPick(commitHash: string): Promise<void> {\n\t\tawait this.run(Operation.CherryPick, () => this.repository.cherryPick(commitHash));\n\t}\n\n\tasync cherryPickAbort(): Promise<void> {\n\t\tawait this.run(Operation.CherryPick, () => this.repository.cherryPickAbort());\n\t}\n\n\tasync move(from: string, to: string): Promise<void> {\n\t\tawait this.run(Operation.Move, () => this.repository.move(from, to));\n\t}\n\n\tasync getBranch(name: string): Promise<Branch> {\n\t\treturn await this.run(Operation.GetBranch, () => this.repository.getBranch(name));\n\t}\n\n\tasync getBranches(query: BranchQuery = {}, cancellationToken?: CancellationToken): Promise<Ref[]> {\n\t\treturn await this.run(Operation.GetBranches, async () => {\n\t\t\tconst refs = await this.getRefs(query, cancellationToken);\n\t\t\treturn refs.filter(value => value.type === RefType.Head || (value.type === RefType.RemoteHead && query.remote));\n\t\t});\n\t}\n\n\tasync getBranchBase(ref: string): Promise<Branch | undefined> {\n\t\tconst branch = await this.getBranch(ref);\n\n\t\t// Git config\n\t\tconst mergeBaseConfigKey = `branch.${branch.name}.vscode-merge-base`;\n\n\t\ttry {\n\t\t\tconst mergeBase = await this.getConfig(mergeBaseConfigKey);\n\t\t\tconst branchFromConfig = mergeBase !== '' ? await this.getBranch(mergeBase) : undefined;\n\n\t\t\t// There was a brief period of time when we would consider local branches as a valid\n\t\t\t// merge base. Since then we have fixed the issue and only remote branches can be used\n\t\t\t// as a merge base so we are adding an additional check.\n\t\t\tif (branchFromConfig && branchFromConfig.remote) {\n\t\t\t\treturn branchFromConfig;\n\t\t\t}\n\t\t} catch (err) { }\n\n\t\t// Reflog\n\t\tconst branchFromReflog = await this.getBranchBaseFromReflog(ref);\n\n\t\tlet branchFromReflogUpstream: Branch | undefined = undefined;\n\n\t\tif (branchFromReflog?.type === RefType.RemoteHead) {\n\t\t\tbranchFromReflogUpstream = branchFromReflog;\n\t\t} else if (branchFromReflog?.type === RefType.Head) {\n\t\t\tbranchFromReflogUpstream = await this.getUpstreamBranch(branchFromReflog);\n\t\t}\n\n\t\tif (branchFromReflogUpstream) {\n\t\t\tawait this.setConfig(mergeBaseConfigKey, `${branchFromReflogUpstream.remote}/${branchFromReflogUpstream.name}`);\n\t\t\treturn branchFromReflogUpstream;\n\t\t}\n\n\t\t// Default branch\n\t\tconst defaultBranch = await this.getDefaultBranch();\n\t\tif (defaultBranch) {\n\t\t\tawait this.setConfig(mergeBaseConfigKey, `${defaultBranch.remote}/${defaultBranch.name}`);\n\t\t\treturn defaultBranch;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate async getBranchBaseFromReflog(ref: string): Promise<Branch | undefined> {\n\t\ttry {\n\t\t\tconst reflogEntries = await this.repository.reflog(ref, 'branch: Created from *.');\n\t\t\tif (reflogEntries.length !== 1) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t// Branch created from an explicit branch\n\t\t\tconst match = reflogEntries[0].match(/branch: Created from (?<name>.*)$/);\n\t\t\tif (match && match.length === 2 && match[1] !== 'HEAD') {\n\t\t\t\treturn await this.getBranch(match[1]);\n\t\t\t}\n\n\t\t\t// Branch created from HEAD\n\t\t\tconst headReflogEntries = await this.repository.reflog('HEAD', `checkout: moving from .* to ${ref.replace('refs/heads/', '')}`);\n\t\t\tif (headReflogEntries.length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst match2 = headReflogEntries[headReflogEntries.length - 1].match(/checkout: moving from ([^\\s]+)\\s/);\n\t\t\tif (match2 && match2.length === 2) {\n\t\t\t\treturn await this.getBranch(match2[1]);\n\t\t\t}\n\n\t\t}\n\t\tcatch (err) { }\n\n\t\treturn undefined;\n\t}\n\n\tprivate async getDefaultBranch(): Promise<Branch | undefined> {\n\t\tconst defaultRemote = this.getDefaultRemote();\n\t\tif (!defaultRemote) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\ttry {\n\t\t\tconst defaultBranch = await this.repository.getDefaultBranch(defaultRemote.name);\n\t\t\treturn defaultBranch;\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.warn(`[Repository][getDefaultBranch] Failed to get default branch details: ${err.message}.`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate async getUpstreamBranch(branch: Branch): Promise<Branch | undefined> {\n\t\tif (!branch.upstream) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\ttry {\n\t\t\tconst upstreamBranch = await this.getBranch(`refs/remotes/${branch.upstream.remote}/${branch.upstream.name}`);\n\t\t\treturn upstreamBranch;\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.logger.warn(`[Repository][getUpstreamBranch] Failed to get branch details for 'refs/remotes/${branch.upstream.remote}/${branch.upstream.name}': ${err.message}.`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync getRefs(query: RefQuery = {}, cancellationToken?: CancellationToken): Promise<(Ref | Branch)[]> {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tlet defaultSort = config.get<'alphabetically' | 'committerdate'>('branchSortOrder');\n\t\tif (defaultSort !== 'alphabetically' && defaultSort !== 'committerdate') {\n\t\t\tdefaultSort = 'alphabetically';\n\t\t}\n\n\t\tquery = { ...query, sort: query?.sort ?? defaultSort };\n\t\treturn await this.run(Operation.GetRefs, () => this.repository.getRefs(query, cancellationToken));\n\t}\n\n\tasync getRemoteRefs(remote: string, opts?: { heads?: boolean; tags?: boolean }): Promise<Ref[]> {\n\t\treturn await this.run(Operation.GetRemoteRefs, () => this.repository.getRemoteRefs(remote, opts));\n\t}\n\n\tasync setBranchUpstream(name: string, upstream: string): Promise<void> {\n\t\tawait this.run(Operation.SetBranchUpstream, () => this.repository.setBranchUpstream(name, upstream));\n\t}\n\n\tasync merge(ref: string): Promise<void> {\n\t\tawait this.run(Operation.Merge, () => this.repository.merge(ref));\n\t}\n\n\tasync mergeAbort(): Promise<void> {\n\t\tawait this.run(Operation.MergeAbort, async () => await this.repository.mergeAbort());\n\t}\n\n\tasync rebase(branch: string): Promise<void> {\n\t\tawait this.run(Operation.Rebase, () => this.repository.rebase(branch));\n\t}\n\n\tasync tag(options: { name: string; message?: string; ref?: string }): Promise<void> {\n\t\tawait this.run(Operation.Tag, () => this.repository.tag(options));\n\t}\n\n\tasync deleteTag(name: string): Promise<void> {\n\t\tawait this.run(Operation.DeleteTag, () => this.repository.deleteTag(name));\n\t}\n\n\tasync deleteRemoteRef(remoteName: string, refName: string, options?: { force?: boolean }): Promise<void> {\n\t\tawait this.run(Operation.DeleteRemoteRef, () => this.repository.deleteRemoteRef(remoteName, refName, options));\n\t}\n\n\tasync checkout(treeish: string, opts?: { detached?: boolean; pullBeforeCheckout?: boolean }): Promise<void> {\n\t\tconst refLabel = opts?.detached ? getCommitShortHash(Uri.file(this.root), treeish) : treeish;\n\n\t\tawait this.run(Operation.Checkout(refLabel),\n\t\t\tasync () => {\n\t\t\t\tif (opts?.pullBeforeCheckout && !opts?.detached) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.fastForwardBranch(treeish);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t// noop\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait this.repository.checkout(treeish, [], opts);\n\t\t\t});\n\t}\n\n\tasync checkoutTracking(treeish: string, opts: { detached?: boolean } = {}): Promise<void> {\n\t\tconst refLabel = opts.detached ? getCommitShortHash(Uri.file(this.root), treeish) : treeish;\n\t\tawait this.run(Operation.CheckoutTracking(refLabel), () => this.repository.checkout(treeish, [], { ...opts, track: true }));\n\t}\n\n\tasync findTrackingBranches(upstreamRef: string): Promise<Branch[]> {\n\t\treturn await this.run(Operation.FindTrackingBranches, () => this.repository.findTrackingBranches(upstreamRef));\n\t}\n\n\tasync getCommit(ref: string): Promise<Commit> {\n\t\treturn await this.repository.getCommit(ref);\n\t}\n\n\tasync getEmptyTree(): Promise<string> {\n\t\tif (!this._EMPTY_TREE) {\n\t\t\tconst result = await this.repository.exec(['hash-object', '-t', 'tree', '/dev/null']);\n\t\t\tthis._EMPTY_TREE = result.stdout.trim();\n\t\t}\n\n\t\treturn this._EMPTY_TREE;\n\t}\n\n\tasync reset(treeish: string, hard?: boolean): Promise<void> {\n\t\tawait this.run(Operation.Reset, () => this.repository.reset(treeish, hard));\n\t}\n\n\tasync deleteRef(ref: string): Promise<void> {\n\t\tawait this.run(Operation.DeleteRef, () => this.repository.deleteRef(ref));\n\t}\n\n\tgetDefaultRemote(): Remote | undefined {\n\t\tif (this.remotes.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this.remotes.find(r => r.name === 'origin') ?? this.remotes[0];\n\t}\n\n\tasync addRemote(name: string, url: string): Promise<void> {\n\t\tawait this.run(Operation.Remote, () => this.repository.addRemote(name, url));\n\t}\n\n\tasync removeRemote(name: string): Promise<void> {\n\t\tawait this.run(Operation.Remote, () => this.repository.removeRemote(name));\n\t}\n\n\tasync renameRemote(name: string, newName: string): Promise<void> {\n\t\tawait this.run(Operation.Remote, () => this.repository.renameRemote(name, newName));\n\t}\n\n\t@throttle\n\tasync fetchDefault(options: { silent?: boolean } = {}): Promise<void> {\n\t\tawait this._fetch({ silent: options.silent });\n\t}\n\n\t@throttle\n\tasync fetchPrune(): Promise<void> {\n\t\tawait this._fetch({ prune: true });\n\t}\n\n\t@throttle\n\tasync fetchAll(options: { silent?: boolean } = {}, cancellationToken?: CancellationToken): Promise<void> {\n\t\tawait this._fetch({ all: true, silent: options.silent, cancellationToken });\n\t}\n\n\tasync fetch(options: FetchOptions): Promise<void> {\n\t\tawait this._fetch(options);\n\t}\n\n\tprivate async _fetch(options: { remote?: string; ref?: string; all?: boolean; prune?: boolean; depth?: number; silent?: boolean; cancellationToken?: CancellationToken } = {}): Promise<void> {\n\t\tif (!options.prune) {\n\t\t\tconst config = workspace.getConfiguration('git', Uri.file(this.root));\n\t\t\tconst prune = config.get<boolean>('pruneOnFetch');\n\t\t\toptions.prune = prune;\n\t\t}\n\n\t\tawait this.run(Operation.Fetch(options.silent !== true), async () => this.repository.fetch(options));\n\t}\n\n\t@throttle\n\tasync pullWithRebase(head: Branch | undefined): Promise<void> {\n\t\tlet remote: string | undefined;\n\t\tlet branch: string | undefined;\n\n\t\tif (head && head.name && head.upstream) {\n\t\t\tremote = head.upstream.remote;\n\t\t\tbranch = `${head.upstream.name}`;\n\t\t}\n\n\t\treturn this.pullFrom(true, remote, branch);\n\t}\n\n\t@throttle\n\tasync pull(head?: Branch, unshallow?: boolean): Promise<void> {\n\t\tlet remote: string | undefined;\n\t\tlet branch: string | undefined;\n\n\t\tif (head && head.name && head.upstream) {\n\t\t\tremote = head.upstream.remote;\n\t\t\tbranch = `${head.upstream.name}`;\n\t\t}\n\n\t\treturn this.pullFrom(false, remote, branch, unshallow);\n\t}\n\n\tasync pullFrom(rebase?: boolean, remote?: string, branch?: string, unshallow?: boolean): Promise<void> {\n\t\tawait this.run(Operation.Pull, async () => {\n\t\t\tawait this.maybeAutoStash(async () => {\n\t\t\t\tconst config = workspace.getConfiguration('git', Uri.file(this.root));\n\t\t\t\tconst autoStash = config.get<boolean>('autoStash');\n\t\t\t\tconst fetchOnPull = config.get<boolean>('fetchOnPull');\n\t\t\t\tconst tags = config.get<boolean>('pullTags');\n\n\t\t\t\t// When fetchOnPull is enabled, fetch all branches when pulling\n\t\t\t\tif (fetchOnPull) {\n\t\t\t\t\tawait this.fetchAll();\n\t\t\t\t}\n\n\t\t\t\tif (await this.checkIfMaybeRebased(this.HEAD?.name)) {\n\t\t\t\t\tawait this._pullAndHandleTagConflict(rebase, remote, branch, { unshallow, tags, autoStash });\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async _pullAndHandleTagConflict(rebase?: boolean, remote?: string, branch?: string, options: PullOptions = {}): Promise<void> {\n\t\ttry {\n\t\t\tawait this.repository.pull(rebase, remote, branch, options);\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (err.gitErrorCode !== GitErrorCodes.TagConflict) {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\t// Handle tag(s) conflict\n\t\t\tif (await this.handleTagConflict(remote, err.stderr)) {\n\t\t\t\tawait this.repository.pull(rebase, remote, branch, options);\n\t\t\t}\n\t\t}\n\t}\n\n\t@throttle\n\tasync push(head: Branch, forcePushMode?: ForcePushMode): Promise<void> {\n\t\tlet remote: string | undefined;\n\t\tlet branch: string | undefined;\n\n\t\tif (head && head.name && head.upstream) {\n\t\t\tremote = head.upstream.remote;\n\t\t\tbranch = `${head.name}:${head.upstream.name}`;\n\t\t}\n\n\t\tawait this.run(Operation.Push, () => this._push(remote, branch, undefined, undefined, forcePushMode));\n\t}\n\n\tasync pushTo(remote?: string, name?: string, setUpstream = false, forcePushMode?: ForcePushMode): Promise<void> {\n\t\tawait this.run(Operation.Push, () => this._push(remote, name, setUpstream, undefined, forcePushMode));\n\t}\n\n\tasync pushFollowTags(remote?: string, forcePushMode?: ForcePushMode): Promise<void> {\n\t\tawait this.run(Operation.Push, () => this._push(remote, undefined, false, true, forcePushMode));\n\t}\n\n\tasync pushTags(remote?: string, forcePushMode?: ForcePushMode): Promise<void> {\n\t\tawait this.run(Operation.Push, () => this._push(remote, undefined, false, false, forcePushMode, true));\n\t}\n\n\tasync blame(path: string): Promise<string> {\n\t\treturn await this.run(Operation.Blame(true), () => this.repository.blame(path));\n\t}\n\n\tasync blame2(path: string, ref?: string): Promise<BlameInformation[] | undefined> {\n\t\treturn await this.run(Operation.Blame(false), () => this.repository.blame2(path, ref));\n\t}\n\n\t@throttle\n\tsync(head: Branch, rebase: boolean): Promise<void> {\n\t\treturn this._sync(head, rebase);\n\t}\n\n\tprivate async _sync(head: Branch, rebase: boolean): Promise<void> {\n\t\tlet remoteName: string | undefined;\n\t\tlet pullBranch: string | undefined;\n\t\tlet pushBranch: string | undefined;\n\n\t\tif (head.name && head.upstream) {\n\t\t\tremoteName = head.upstream.remote;\n\t\t\tpullBranch = `${head.upstream.name}`;\n\t\t\tpushBranch = `${head.name}:${head.upstream.name}`;\n\t\t}\n\n\t\tawait this.run(Operation.Sync, async () => {\n\t\t\tawait this.maybeAutoStash(async () => {\n\t\t\t\tconst config = workspace.getConfiguration('git', Uri.file(this.root));\n\t\t\t\tconst autoStash = config.get<boolean>('autoStash');\n\t\t\t\tconst fetchOnPull = config.get<boolean>('fetchOnPull');\n\t\t\t\tconst tags = config.get<boolean>('pullTags');\n\t\t\t\tconst followTags = config.get<boolean>('followTagsWhenSync');\n\t\t\t\tconst supportCancellation = config.get<boolean>('supportCancellation');\n\n\t\t\t\tconst fn = async (cancellationToken?: CancellationToken) => {\n\t\t\t\t\t// When fetchOnPull is enabled, fetch all branches when pulling\n\t\t\t\t\tif (fetchOnPull) {\n\t\t\t\t\t\tawait this.fetchAll({}, cancellationToken);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (await this.checkIfMaybeRebased(this.HEAD?.name)) {\n\t\t\t\t\t\tawait this._pullAndHandleTagConflict(rebase, remoteName, pullBranch, { tags, cancellationToken, autoStash });\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif (supportCancellation) {\n\t\t\t\t\tconst opts: ProgressOptions = {\n\t\t\t\t\t\tlocation: ProgressLocation.Notification,\n\t\t\t\t\t\ttitle: l10n.t('Syncing. Cancelling may cause serious damages to the repository'),\n\t\t\t\t\t\tcancellable: true\n\t\t\t\t\t};\n\n\t\t\t\t\tawait window.withProgress(opts, (_, token) => fn(token));\n\t\t\t\t} else {\n\t\t\t\t\tawait fn();\n\t\t\t\t}\n\n\t\t\t\tconst remote = this.remotes.find(r => r.name === remoteName);\n\n\t\t\t\tif (remote && remote.isReadOnly) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst shouldPush = this.HEAD && (typeof this.HEAD.ahead === 'number' ? this.HEAD.ahead > 0 : true);\n\n\t\t\t\tif (shouldPush) {\n\t\t\t\t\tawait this._push(remoteName, pushBranch, false, followTags);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async checkIfMaybeRebased(currentBranch?: string) {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst shouldIgnore = config.get<boolean>('ignoreRebaseWarning') === true;\n\n\t\tif (shouldIgnore) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst maybeRebased = await this.run(Operation.Log(true), async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.repository.exec(['log', '--oneline', '--cherry', `${currentBranch ?? ''}...${currentBranch ?? ''}@{upstream}`, '--']);\n\t\t\t\tif (result.exitCode) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn /^=/.test(result.stdout);\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\tif (!maybeRebased) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst always = { title: l10n.t('Always Pull') };\n\t\tconst pull = { title: l10n.t('Pull') };\n\t\tconst cancel = { title: l10n.t('Don\\'t Pull') };\n\t\tconst result = await window.showWarningMessage(\n\t\t\tcurrentBranch\n\t\t\t\t? l10n.t('It looks like the current branch \"{0}\" might have been rebased. Are you sure you still want to pull into it?', currentBranch)\n\t\t\t\t: l10n.t('It looks like the current branch might have been rebased. Are you sure you still want to pull into it?'),\n\t\t\talways, pull, cancel\n\t\t);\n\n\t\tif (result === pull) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (result === always) {\n\t\t\tawait config.update('ignoreRebaseWarning', true, true);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tasync show(ref: string, filePath: string): Promise<string> {\n\t\treturn await this.run(Operation.Show, async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await this.repository.buffer(ref, filePath);\n\t\t\t\treturn await workspace.decode(content, Uri.file(filePath));\n\t\t\t} catch (err) {\n\t\t\t\tif (err.gitErrorCode === GitErrorCodes.WrongCase) {\n\t\t\t\t\tconst gitFilePath = await this.repository.getGitFilePath(ref, filePath);\n\t\t\t\t\tconst content = await this.repository.buffer(ref, gitFilePath);\n\t\t\t\t\treturn await workspace.decode(content, Uri.file(filePath));\n\t\t\t\t}\n\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync buffer(ref: string, filePath: string): Promise<Buffer> {\n\t\treturn this.run(Operation.Show, () => this.repository.buffer(ref, filePath));\n\t}\n\n\tgetObjectFiles(ref: string): Promise<LsTreeElement[]> {\n\t\treturn this.run(Operation.GetObjectFiles, () => this.repository.lstree(ref));\n\t}\n\n\tgetObjectDetails(ref: string, path: string): Promise<{ mode: string; object: string; size: number }> {\n\t\treturn this.run(Operation.GetObjectDetails, () => this.repository.getObjectDetails(ref, path));\n\t}\n\n\tdetectObjectType(object: string): Promise<{ mimetype: string; encoding?: string }> {\n\t\treturn this.run(Operation.Show, () => this.repository.detectObjectType(object));\n\t}\n\n\tasync apply(patch: string, reverse?: boolean): Promise<void> {\n\t\treturn await this.run(Operation.Apply, () => this.repository.apply(patch, reverse));\n\t}\n\n\tasync getStashes(): Promise<Stash[]> {\n\t\treturn this.run(Operation.Stash, () => this.repository.getStashes());\n\t}\n\n\tasync createStash(message?: string, includeUntracked?: boolean, staged?: boolean): Promise<void> {\n\t\tconst indexResources = [...this.indexGroup.resourceStates.map(r => r.resourceUri.fsPath)];\n\t\tconst workingGroupResources = [\n\t\t\t...!staged ? this.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath) : [],\n\t\t\t...includeUntracked ? this.untrackedGroup.resourceStates.map(r => r.resourceUri.fsPath) : []];\n\n\t\treturn await this.run(Operation.Stash, async () => {\n\t\t\tawait this.repository.createStash(message, includeUntracked, staged);\n\t\t\tthis.closeDiffEditors(indexResources, workingGroupResources);\n\t\t});\n\t}\n\n\tasync popStash(index?: number): Promise<void> {\n\t\treturn await this.run(Operation.Stash, () => this.repository.popStash(index));\n\t}\n\n\tasync dropStash(index?: number): Promise<void> {\n\t\treturn await this.run(Operation.Stash, () => this.repository.dropStash(index));\n\t}\n\n\tasync applyStash(index?: number): Promise<void> {\n\t\treturn await this.run(Operation.Stash, () => this.repository.applyStash(index));\n\t}\n\n\tasync showStash(index: number): Promise<Change[] | undefined> {\n\t\treturn await this.run(Operation.Stash, () => this.repository.showStash(index));\n\t}\n\n\tasync getCommitTemplate(): Promise<string> {\n\t\treturn await this.run(Operation.GetCommitTemplate, async () => this.repository.getCommitTemplate());\n\t}\n\n\tasync ignore(files: Uri[]): Promise<void> {\n\t\treturn await this.run(Operation.Ignore, async () => {\n\t\t\tconst ignoreFile = `${this.repository.root}${path.sep}.gitignore`;\n\t\t\tconst textToAppend = files\n\t\t\t\t.map(uri => relativePath(this.repository.root, uri.fsPath)\n\t\t\t\t\t.replace(/\\\\|\\[/g, match => match === '\\\\' ? '/' : `\\\\${match}`))\n\t\t\t\t.join('\\n');\n\n\t\t\tconst document = await new Promise(c => fs.exists(ignoreFile, c))\n\t\t\t\t? await workspace.openTextDocument(ignoreFile)\n\t\t\t\t: await workspace.openTextDocument(Uri.file(ignoreFile).with({ scheme: 'untitled' }));\n\n\t\t\tawait window.showTextDocument(document);\n\n\t\t\tconst edit = new WorkspaceEdit();\n\t\t\tconst lastLine = document.lineAt(document.lineCount - 1);\n\t\t\tconst text = lastLine.isEmptyOrWhitespace ? `${textToAppend}\\n` : `\\n${textToAppend}\\n`;\n\n\t\t\tedit.insert(document.uri, lastLine.range.end, text);\n\t\t\tawait workspace.applyEdit(edit);\n\t\t\tawait document.save();\n\t\t});\n\t}\n\n\tasync rebaseAbort(): Promise<void> {\n\t\tawait this.run(Operation.RebaseAbort, async () => await this.repository.rebaseAbort());\n\t}\n\n\tcheckIgnore(filePaths: string[]): Promise<Set<string>> {\n\t\treturn this.run(Operation.CheckIgnore, () => {\n\t\t\treturn new Promise<Set<string>>((resolve, reject) => {\n\n\t\t\t\tfilePaths = filePaths\n\t\t\t\t\t.filter(filePath => isDescendant(this.root, filePath));\n\n\t\t\t\tif (filePaths.length === 0) {\n\t\t\t\t\t// nothing left\n\t\t\t\t\treturn resolve(new Set<string>());\n\t\t\t\t}\n\n\t\t\t\t// https://git-scm.com/docs/git-check-ignore#git-check-ignore--z\n\t\t\t\tconst child = this.repository.stream(['check-ignore', '-v', '-z', '--stdin'], { stdio: [null, null, null] });\n\t\t\t\tchild.stdin!.end(filePaths.join('\\0'), 'utf8');\n\n\t\t\t\tconst onExit = (exitCode: number) => {\n\t\t\t\t\tif (exitCode === 1) {\n\t\t\t\t\t\t// nothing ignored\n\t\t\t\t\t\tresolve(new Set<string>());\n\t\t\t\t\t} else if (exitCode === 0) {\n\t\t\t\t\t\tresolve(new Set<string>(this.parseIgnoreCheck(data)));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/ is in submodule /.test(stderr)) {\n\t\t\t\t\t\t\treject(new GitError({ stdout: data, stderr, exitCode, gitErrorCode: GitErrorCodes.IsInSubmodule }));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(new GitError({ stdout: data, stderr, exitCode }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet data = '';\n\t\t\t\tconst onStdoutData = (raw: string) => {\n\t\t\t\t\tdata += raw;\n\t\t\t\t};\n\n\t\t\t\tchild.stdout!.setEncoding('utf8');\n\t\t\t\tchild.stdout!.on('data', onStdoutData);\n\n\t\t\t\tlet stderr: string = '';\n\t\t\t\tchild.stderr!.setEncoding('utf8');\n\t\t\t\tchild.stderr!.on('data', raw => stderr += raw);\n\n\t\t\t\tchild.on('error', reject);\n\t\t\t\tchild.on('exit', onExit);\n\t\t\t});\n\t\t});\n\t}\n\n\t// Parses output of `git check-ignore -v -z` and returns only those paths\n\t// that are actually ignored by git.\n\t// Matches to a negative pattern (starting with '!') are filtered out.\n\t// See also https://git-scm.com/docs/git-check-ignore#_output.\n\tprivate parseIgnoreCheck(raw: string): string[] {\n\t\tconst ignored = [];\n\t\tconst elements = raw.split('\\0');\n\t\tfor (let i = 0; i < elements.length; i += 4) {\n\t\t\tconst pattern = elements[i + 2];\n\t\t\tconst path = elements[i + 3];\n\t\t\tif (pattern && !pattern.startsWith('!')) {\n\t\t\t\tignored.push(path);\n\t\t\t}\n\t\t}\n\t\treturn ignored;\n\t}\n\n\tprivate async _push(remote?: string, refspec?: string, setUpstream = false, followTags = false, forcePushMode?: ForcePushMode, tags = false): Promise<void> {\n\t\ttry {\n\t\t\tawait this.repository.push(remote, refspec, setUpstream, followTags, forcePushMode, tags);\n\t\t} catch (err) {\n\t\t\tif (!remote || !refspec) {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst repository = new ApiRepository(this);\n\t\t\tconst remoteObj = repository.state.remotes.find(r => r.name === remote);\n\n\t\t\tif (!remoteObj) {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tfor (const handler of this.pushErrorHandlerRegistry.getPushErrorHandlers()) {\n\t\t\t\tif (await handler.handlePushError(repository, remoteObj, refspec, err)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate async run<T>(\n\t\toperation: Operation,\n\t\trunOperation: () => Promise<T> = () => Promise.resolve<any>(null),\n\t\tgetOptimisticResourceGroups: () => GitResourceGroups | undefined = () => undefined): Promise<T> {\n\n\t\tif (this.state !== RepositoryState.Idle) {\n\t\t\tthrow new Error('Repository not initialized');\n\t\t}\n\n\t\tlet error: any = null;\n\n\t\tthis._operations.start(operation);\n\t\tthis._onRunOperation.fire(operation.kind);\n\n\t\ttry {\n\t\t\tconst result = await this.retryRun(operation, runOperation);\n\n\t\t\tif (!operation.readOnly) {\n\t\t\t\tawait this.updateModelState(this.optimisticUpdateEnabled() ? getOptimisticResourceGroups() : undefined);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\terror = err;\n\n\t\t\tif (err.gitErrorCode === GitErrorCodes.NotAGitRepository) {\n\t\t\t\tthis.state = RepositoryState.Disposed;\n\t\t\t}\n\n\t\t\tif (!operation.readOnly) {\n\t\t\t\tawait this.updateModelState();\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tthis._operations.end(operation);\n\t\t\tthis._onDidRunOperation.fire({ operation: operation, error });\n\t\t}\n\t}\n\n\tprivate async retryRun<T>(operation: Operation, runOperation: () => Promise<T> = () => Promise.resolve<any>(null)): Promise<T> {\n\t\tlet attempt = 0;\n\n\t\twhile (true) {\n\t\t\ttry {\n\t\t\t\tattempt++;\n\t\t\t\treturn await runOperation();\n\t\t\t} catch (err) {\n\t\t\t\tconst shouldRetry = attempt <= 10 && (\n\t\t\t\t\t(err.gitErrorCode === GitErrorCodes.RepositoryIsLocked)\n\t\t\t\t\t|| (operation.retry && (err.gitErrorCode === GitErrorCodes.CantLockRef || err.gitErrorCode === GitErrorCodes.CantRebaseMultipleBranches))\n\t\t\t\t);\n\n\t\t\t\tif (shouldRetry) {\n\t\t\t\t\t// quatratic backoff\n\t\t\t\t\tawait timeout(Math.pow(attempt, 2) * 50);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static KnownHugeFolderNames = ['node_modules'];\n\n\tprivate async findKnownHugeFolderPathsToIgnore(): Promise<string[]> {\n\t\tconst folderPaths: string[] = [];\n\n\t\tfor (const folderName of Repository.KnownHugeFolderNames) {\n\t\t\tconst folderPath = path.join(this.repository.root, folderName);\n\n\t\t\tif (await new Promise<boolean>(c => fs.exists(folderPath, c))) {\n\t\t\t\tfolderPaths.push(folderPath);\n\t\t\t}\n\t\t}\n\n\t\tconst ignored = await this.checkIgnore(folderPaths);\n\n\t\treturn folderPaths.filter(p => !ignored.has(p));\n\t}\n\n\tprivate async updateModelState(optimisticResourcesGroups?: GitResourceGroups) {\n\t\tthis.updateModelStateCancellationTokenSource?.cancel();\n\n\t\tthis.updateModelStateCancellationTokenSource = new CancellationTokenSource();\n\t\tawait this._updateModelState(optimisticResourcesGroups, this.updateModelStateCancellationTokenSource.token);\n\t}\n\n\tprivate async _updateModelState(optimisticResourcesGroups?: GitResourceGroups, cancellationToken?: CancellationToken): Promise<void> {\n\t\ttry {\n\t\t\t// Optimistically update resource groups\n\t\t\tif (optimisticResourcesGroups) {\n\t\t\t\tthis._updateResourceGroupsState(optimisticResourcesGroups);\n\t\t\t}\n\n\t\t\tconst [HEAD, remotes, submodules, rebaseCommit, mergeInProgress, cherryPickInProgress, commitTemplate] =\n\t\t\t\tawait Promise.all([\n\t\t\t\t\tthis.repository.getHEADRef(),\n\t\t\t\t\tthis.repository.getRemotes(),\n\t\t\t\t\tthis.repository.getSubmodules(),\n\t\t\t\t\tthis.getRebaseCommit(),\n\t\t\t\t\tthis.isMergeInProgress(),\n\t\t\t\t\tthis.isCherryPickInProgress(),\n\t\t\t\t\tthis.getInputTemplate()]);\n\n\t\t\t// Reset the list of unpublished commits if HEAD has\n\t\t\t// changed (ex: checkout, fetch, pull, push, publish, etc.).\n\t\t\t// The list of unpublished commits will be computed lazily\n\t\t\t// on demand.\n\t\t\tif (this.HEAD?.name !== HEAD?.name ||\n\t\t\t\tthis.HEAD?.commit !== HEAD?.commit ||\n\t\t\t\tthis.HEAD?.ahead !== HEAD?.ahead ||\n\t\t\t\tthis.HEAD?.upstream !== HEAD?.upstream) {\n\t\t\t\tthis.unpublishedCommits = undefined;\n\t\t\t}\n\n\t\t\tthis._HEAD = HEAD;\n\t\t\tthis._remotes = remotes!;\n\t\t\tthis._submodules = submodules!;\n\t\t\tthis.rebaseCommit = rebaseCommit;\n\t\t\tthis.mergeInProgress = mergeInProgress;\n\t\t\tthis.cherryPickInProgress = cherryPickInProgress;\n\n\t\t\tthis._sourceControl.commitTemplate = commitTemplate;\n\n\t\t\t// Execute cancellable long-running operation\n\t\t\tconst [resourceGroups, refs] =\n\t\t\t\tawait Promise.all([\n\t\t\t\t\tthis.getStatus(cancellationToken),\n\t\t\t\t\tthis.getRefs({}, cancellationToken)]);\n\n\t\t\tthis._refs = refs;\n\t\t\tthis._updateResourceGroupsState(resourceGroups);\n\n\t\t\tthis._onDidChangeStatus.fire();\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (err instanceof CancellationError) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate _updateResourceGroupsState(resourcesGroups: GitResourceGroups): void {\n\t\t// set resource groups\n\t\tif (resourcesGroups.indexGroup) { this.indexGroup.resourceStates = resourcesGroups.indexGroup; }\n\t\tif (resourcesGroups.mergeGroup) { this.mergeGroup.resourceStates = resourcesGroups.mergeGroup; }\n\t\tif (resourcesGroups.untrackedGroup) { this.untrackedGroup.resourceStates = resourcesGroups.untrackedGroup; }\n\t\tif (resourcesGroups.workingTreeGroup) { this.workingTreeGroup.resourceStates = resourcesGroups.workingTreeGroup; }\n\n\t\t// set count badge\n\t\tthis.setCountBadge();\n\t}\n\n\tprivate async getStatus(cancellationToken?: CancellationToken): Promise<GitResourceGroups> {\n\t\tif (cancellationToken && cancellationToken.isCancellationRequested) {\n\t\t\tthrow new CancellationError();\n\t\t}\n\n\t\tconst scopedConfig = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst untrackedChanges = scopedConfig.get<'mixed' | 'separate' | 'hidden'>('untrackedChanges');\n\t\tconst ignoreSubmodules = scopedConfig.get<boolean>('ignoreSubmodules');\n\n\t\tconst limit = scopedConfig.get<number>('statusLimit', 10000);\n\t\tconst similarityThreshold = scopedConfig.get<number>('similarityThreshold', 50);\n\n\t\tconst start = new Date().getTime();\n\t\tconst { status, statusLength, didHitLimit } = await this.repository.getStatus({ limit, ignoreSubmodules, similarityThreshold, untrackedChanges, cancellationToken });\n\t\tconst totalTime = new Date().getTime() - start;\n\n\t\tthis.isRepositoryHuge = didHitLimit ? { limit } : false;\n\n\t\tif (didHitLimit) {\n\t\t\t/* __GDPR__\n\t\t\t\t\"statusLimit\" : {\n\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\"ignoreSubmodules\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Setting indicating whether submodules are ignored\" },\n\t\t\t\t\t\"limit\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Setting indicating the limit of status entries\" },\n\t\t\t\t\t\"statusLength\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Total number of status entries\" },\n\t\t\t\t\t\"totalTime\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Total number of ms the operation took\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('statusLimit', { ignoreSubmodules: String(ignoreSubmodules) }, { limit, statusLength, totalTime });\n\t\t}\n\n\t\tif (totalTime > 5000) {\n\t\t\t/* __GDPR__\n\t\t\t\t\"statusSlow\" : {\n\t\t\t\t\t\"owner\": \"digitarald\",\n\t\t\t\t\t\"comment\": \"Reports when git status is slower than 5s\",\n\t\t\t\t\t\"expiration\": \"1.73\",\n\t\t\t\t\t\"ignoreSubmodules\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Setting indicating whether submodules are ignored\" },\n\t\t\t\t\t\"didHitLimit\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Total number of status entries\" },\n\t\t\t\t\t\"didWarnAboutLimit\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"True when the user was warned about slow git status\" },\n\t\t\t\t\t\"statusLength\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Total number of status entries\" },\n\t\t\t\t\t\"totalTime\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Total number of ms the operation took\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('statusSlow', { ignoreSubmodules: String(ignoreSubmodules), didHitLimit: String(didHitLimit), didWarnAboutLimit: String(this.didWarnAboutLimit) }, { statusLength, totalTime });\n\t\t}\n\n\t\t// Triggers or clears any validation warning\n\t\tthis._sourceControl.inputBox.validateInput = this._sourceControl.inputBox.validateInput;\n\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst shouldIgnore = config.get<boolean>('ignoreLimitWarning') === true;\n\t\tconst useIcons = !config.get<boolean>('decorations.enabled', true);\n\n\t\tif (didHitLimit && !shouldIgnore && !this.didWarnAboutLimit) {\n\t\t\tconst knownHugeFolderPaths = await this.findKnownHugeFolderPathsToIgnore();\n\t\t\tconst gitWarn = l10n.t('The git repository at \"{0}\" has too many active changes, only a subset of Git features will be enabled.', this.repository.root);\n\t\t\tconst neverAgain = { title: l10n.t('Don\\'t Show Again') };\n\n\t\t\tif (knownHugeFolderPaths.length > 0) {\n\t\t\t\tconst folderPath = knownHugeFolderPaths[0];\n\t\t\t\tconst folderName = path.basename(folderPath);\n\n\t\t\t\tconst addKnown = l10n.t('Would you like to add \"{0}\" to .gitignore?', folderName);\n\t\t\t\tconst yes = { title: l10n.t('Yes') };\n\t\t\t\tconst no = { title: l10n.t('No') };\n\n\t\t\t\twindow.showWarningMessage(`${gitWarn} ${addKnown}`, yes, no, neverAgain).then(result => {\n\t\t\t\t\tif (result === yes) {\n\t\t\t\t\t\tthis.ignore([Uri.file(folderPath)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (result === neverAgain) {\n\t\t\t\t\t\t\tconfig.update('ignoreLimitWarning', true, false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.didWarnAboutLimit = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst ok = { title: l10n.t('OK') };\n\t\t\t\twindow.showWarningMessage(gitWarn, ok, neverAgain).then(result => {\n\t\t\t\t\tif (result === neverAgain) {\n\t\t\t\t\t\tconfig.update('ignoreLimitWarning', true, false);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.didWarnAboutLimit = true;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst indexGroup: Resource[] = [],\n\t\t\tmergeGroup: Resource[] = [],\n\t\t\tuntrackedGroup: Resource[] = [],\n\t\t\tworkingTreeGroup: Resource[] = [];\n\n\t\tstatus.forEach(raw => {\n\t\t\tconst uri = Uri.file(path.join(this.repository.root, raw.path));\n\t\t\tconst renameUri = raw.rename\n\t\t\t\t? Uri.file(path.join(this.repository.root, raw.rename))\n\t\t\t\t: undefined;\n\n\t\t\tswitch (raw.x + raw.y) {\n\t\t\t\tcase '??': switch (untrackedChanges) {\n\t\t\t\t\tcase 'mixed': return workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.UNTRACKED, useIcons));\n\t\t\t\t\tcase 'separate': return untrackedGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Untracked, uri, Status.UNTRACKED, useIcons));\n\t\t\t\t\tdefault: return undefined;\n\t\t\t\t}\n\t\t\t\tcase '!!': switch (untrackedChanges) {\n\t\t\t\t\tcase 'mixed': return workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.IGNORED, useIcons));\n\t\t\t\t\tcase 'separate': return untrackedGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Untracked, uri, Status.IGNORED, useIcons));\n\t\t\t\t\tdefault: return undefined;\n\t\t\t\t}\n\t\t\t\tcase 'DD': return mergeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Merge, uri, Status.BOTH_DELETED, useIcons));\n\t\t\t\tcase 'AU': return mergeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Merge, uri, Status.ADDED_BY_US, useIcons));\n\t\t\t\tcase 'UD': return mergeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Merge, uri, Status.DELETED_BY_THEM, useIcons));\n\t\t\t\tcase 'UA': return mergeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Merge, uri, Status.ADDED_BY_THEM, useIcons));\n\t\t\t\tcase 'DU': return mergeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Merge, uri, Status.DELETED_BY_US, useIcons));\n\t\t\t\tcase 'AA': return mergeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Merge, uri, Status.BOTH_ADDED, useIcons));\n\t\t\t\tcase 'UU': return mergeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Merge, uri, Status.BOTH_MODIFIED, useIcons));\n\t\t\t}\n\n\t\t\tswitch (raw.x) {\n\t\t\t\tcase 'M': indexGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Index, uri, Status.INDEX_MODIFIED, useIcons)); break;\n\t\t\t\tcase 'A': indexGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Index, uri, Status.INDEX_ADDED, useIcons)); break;\n\t\t\t\tcase 'D': indexGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Index, uri, Status.INDEX_DELETED, useIcons)); break;\n\t\t\t\tcase 'R': indexGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Index, uri, Status.INDEX_RENAMED, useIcons, renameUri)); break;\n\t\t\t\tcase 'C': indexGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.Index, uri, Status.INDEX_COPIED, useIcons, renameUri)); break;\n\t\t\t}\n\n\t\t\tswitch (raw.y) {\n\t\t\t\tcase 'M': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.MODIFIED, useIcons, renameUri)); break;\n\t\t\t\tcase 'D': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.DELETED, useIcons, renameUri)); break;\n\t\t\t\tcase 'A': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.INTENT_TO_ADD, useIcons, renameUri)); break;\n\t\t\t\tcase 'R': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.INTENT_TO_RENAME, useIcons, renameUri)); break;\n\t\t\t\tcase 'T': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.TYPE_CHANGED, useIcons, renameUri)); break;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t});\n\n\t\treturn { indexGroup, mergeGroup, untrackedGroup, workingTreeGroup };\n\t}\n\n\tprivate setCountBadge(): void {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst countBadge = config.get<'all' | 'tracked' | 'off'>('countBadge');\n\t\tconst untrackedChanges = config.get<'mixed' | 'separate' | 'hidden'>('untrackedChanges');\n\n\t\tlet count =\n\t\t\tthis.mergeGroup.resourceStates.length +\n\t\t\tthis.indexGroup.resourceStates.length +\n\t\t\tthis.workingTreeGroup.resourceStates.length;\n\n\t\tswitch (countBadge) {\n\t\t\tcase 'off': count = 0; break;\n\t\t\tcase 'tracked':\n\t\t\t\tif (untrackedChanges === 'mixed') {\n\t\t\t\t\tcount -= this.workingTreeGroup.resourceStates.filter(r => r.type === Status.UNTRACKED || r.type === Status.IGNORED).length;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'all':\n\t\t\t\tif (untrackedChanges === 'separate') {\n\t\t\t\t\tcount += this.untrackedGroup.resourceStates.length;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis._sourceControl.count = count;\n\t}\n\n\tprivate async getRebaseCommit(): Promise<Commit | undefined> {\n\t\tconst rebaseHeadPath = path.join(this.repository.root, '.git', 'REBASE_HEAD');\n\t\tconst rebaseApplyPath = path.join(this.repository.root, '.git', 'rebase-apply');\n\t\tconst rebaseMergePath = path.join(this.repository.root, '.git', 'rebase-merge');\n\n\t\ttry {\n\t\t\tconst [rebaseApplyExists, rebaseMergePathExists, rebaseHead] = await Promise.all([\n\t\t\t\tnew Promise<boolean>(c => fs.exists(rebaseApplyPath, c)),\n\t\t\t\tnew Promise<boolean>(c => fs.exists(rebaseMergePath, c)),\n\t\t\t\tnew Promise<string>((c, e) => fs.readFile(rebaseHeadPath, 'utf8', (err, result) => err ? e(err) : c(result)))\n\t\t\t]);\n\t\t\tif (!rebaseApplyExists && !rebaseMergePathExists) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn await this.getCommit(rebaseHead.trim());\n\t\t} catch (err) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate isMergeInProgress(): Promise<boolean> {\n\t\tconst mergeHeadPath = path.join(this.repository.root, '.git', 'MERGE_HEAD');\n\t\treturn new Promise<boolean>(resolve => fs.exists(mergeHeadPath, resolve));\n\t}\n\n\tprivate isCherryPickInProgress(): Promise<boolean> {\n\t\tconst cherryPickHeadPath = path.join(this.repository.root, '.git', 'CHERRY_PICK_HEAD');\n\t\treturn new Promise<boolean>(resolve => fs.exists(cherryPickHeadPath, resolve));\n\t}\n\n\tprivate async maybeAutoStash<T>(runOperation: () => Promise<T>): Promise<T> {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.root));\n\t\tconst shouldAutoStash = config.get<boolean>('autoStash')\n\t\t\t&& this.repository.git.compareGitVersionTo('2.27.0') < 0\n\t\t\t&& (this.indexGroup.resourceStates.length > 0\n\t\t\t\t|| this.workingTreeGroup.resourceStates.some(\n\t\t\t\t\tr => r.type !== Status.UNTRACKED && r.type !== Status.IGNORED));\n\n\t\tif (!shouldAutoStash) {\n\t\t\treturn await runOperation();\n\t\t}\n\n\t\tawait this.repository.createStash(undefined, true);\n\t\ttry {\n\t\t\tconst result = await runOperation();\n\t\t\treturn result;\n\t\t} finally {\n\t\t\tawait this.repository.popStash();\n\t\t}\n\t}\n\n\tprivate onFileChange(_uri: Uri): void {\n\t\tconst config = workspace.getConfiguration('git');\n\t\tconst autorefresh = config.get<boolean>('autorefresh');\n\n\t\tif (!autorefresh) {\n\t\t\tthis.logger.trace('[Repository][onFileChange] Skip running git status because autorefresh setting is disabled.');\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.isRepositoryHuge) {\n\t\t\tthis.logger.trace('[Repository][onFileChange] Skip running git status because repository is huge.');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.operations.isIdle()) {\n\t\t\tthis.logger.trace('[Repository][onFileChange] Skip running git status because an operation is running.');\n\t\t\treturn;\n\t\t}\n\n\t\tthis.eventuallyUpdateWhenIdleAndWait();\n\t}\n\n\t@debounce(1000)\n\tprivate eventuallyUpdateWhenIdleAndWait(): void {\n\t\tthis.updateWhenIdleAndWait();\n\t}\n\n\t@throttle\n\tprivate async updateWhenIdleAndWait(): Promise<void> {\n\t\tawait this.whenIdleAndFocused();\n\t\tawait this.status();\n\t\tawait timeout(5000);\n\t}\n\n\tasync whenIdleAndFocused(): Promise<void> {\n\t\twhile (true) {\n\t\t\tif (!this.operations.isIdle()) {\n\t\t\t\tawait eventToPromise(this.onDidRunOperation);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!window.state.focused) {\n\t\t\t\tconst onDidFocusWindow = filterEvent(window.onDidChangeWindowState, e => e.focused);\n\t\t\t\tawait eventToPromise(onDidFocusWindow);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tget headLabel(): string {\n\t\tconst HEAD = this.HEAD;\n\n\t\tif (!HEAD) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst head = HEAD.name || (HEAD.commit || '').substr(0, 8);\n\n\t\treturn head\n\t\t\t+ (this.workingTreeGroup.resourceStates.length + this.untrackedGroup.resourceStates.length > 0 ? '*' : '')\n\t\t\t+ (this.indexGroup.resourceStates.length > 0 ? '+' : '')\n\t\t\t+ (this.mergeInProgress || !!this.rebaseCommit ? '!' : '');\n\t}\n\n\tget syncLabel(): string {\n\t\tif (!this.HEAD\n\t\t\t|| !this.HEAD.name\n\t\t\t|| !this.HEAD.commit\n\t\t\t|| !this.HEAD.upstream\n\t\t\t|| !(this.HEAD.ahead || this.HEAD.behind)\n\t\t) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst remoteName = this.HEAD && this.HEAD.remote || this.HEAD.upstream.remote;\n\t\tconst remote = this.remotes.find(r => r.name === remoteName);\n\n\t\tif (remote && remote.isReadOnly) {\n\t\t\treturn `${this.HEAD.behind}↓`;\n\t\t}\n\n\t\treturn `${this.HEAD.behind}↓ ${this.HEAD.ahead}↑`;\n\t}\n\n\tget syncTooltip(): string {\n\t\tif (!this.HEAD\n\t\t\t|| !this.HEAD.name\n\t\t\t|| !this.HEAD.commit\n\t\t\t|| !this.HEAD.upstream\n\t\t\t|| !(this.HEAD.ahead || this.HEAD.behind)\n\t\t) {\n\t\t\treturn l10n.t('Synchronize Changes');\n\t\t}\n\n\t\tconst remoteName = this.HEAD && this.HEAD.remote || this.HEAD.upstream.remote;\n\t\tconst remote = this.remotes.find(r => r.name === remoteName);\n\n\t\tif ((remote && remote.isReadOnly) || !this.HEAD.ahead) {\n\t\t\treturn l10n.t('Pull {0} commits from {1}/{2}', this.HEAD.behind!, this.HEAD.upstream.remote, this.HEAD.upstream.name);\n\t\t} else if (!this.HEAD.behind) {\n\t\t\treturn l10n.t('Push {0} commits to {1}/{2}', this.HEAD.ahead, this.HEAD.upstream.remote, this.HEAD.upstream.name);\n\t\t} else {\n\t\t\treturn l10n.t('Pull {0} and push {1} commits between {2}/{3}', this.HEAD.behind, this.HEAD.ahead, this.HEAD.upstream.remote, this.HEAD.upstream.name);\n\t\t}\n\t}\n\n\tprivate updateInputBoxPlaceholder(): void {\n\t\tconst branchName = this.headShortName;\n\n\t\tif (branchName) {\n\t\t\t// '{0}' will be replaced by the corresponding key-command later in the process, which is why it needs to stay.\n\t\t\tthis._sourceControl.inputBox.placeholder = l10n.t('Message ({0} to commit on \"{1}\")', '{0}', branchName);\n\t\t} else {\n\t\t\tthis._sourceControl.inputBox.placeholder = l10n.t('Message ({0} to commit)');\n\t\t}\n\t}\n\n\tprivate updateBranchProtectionMatchers(root: Uri): void {\n\t\tthis.branchProtection.clear();\n\n\t\tfor (const provider of this.branchProtectionProviderRegistry.getBranchProtectionProviders(root)) {\n\t\t\tfor (const { remote, rules } of provider.provideBranchProtection()) {\n\t\t\t\tconst matchers: BranchProtectionMatcher[] = [];\n\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\tconst include = rule.include && rule.include.length !== 0 ? picomatch(rule.include) : undefined;\n\t\t\t\t\tconst exclude = rule.exclude && rule.exclude.length !== 0 ? picomatch(rule.exclude) : undefined;\n\n\t\t\t\t\tif (include || exclude) {\n\t\t\t\t\t\tmatchers.push({ include, exclude });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (matchers.length !== 0) {\n\t\t\t\t\tthis.branchProtection.set(remote, matchers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._onDidChangeBranchProtection.fire();\n\t}\n\n\tprivate optimisticUpdateEnabled(): boolean {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.root));\n\t\treturn config.get<boolean>('optimisticUpdate') === true;\n\t}\n\n\tprivate async handleTagConflict(remote: string | undefined, raw: string): Promise<boolean> {\n\t\t// Ensure there is a remote\n\t\tremote = remote ?? this.HEAD?.upstream?.remote;\n\t\tif (!remote) {\n\t\t\tthrow new Error('Unable to resolve tag conflict due to missing remote.');\n\t\t}\n\n\t\t// Extract tag names from message\n\t\tconst tags: string[] = [];\n\t\tfor (const match of raw.matchAll(/^ ! \\[rejected\\]\\s+([^\\s]+)\\s+->\\s+([^\\s]+)\\s+\\(would clobber existing tag\\)$/gm)) {\n\t\t\tif (match.length === 3) {\n\t\t\t\ttags.push(match[1]);\n\t\t\t}\n\t\t}\n\t\tif (tags.length === 0) {\n\t\t\tthrow new Error(`Unable to extract tag names from error message: ${raw}`);\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst replaceTagsWhenPull = config.get<boolean>('replaceTagsWhenPull', false) === true;\n\n\t\tif (!replaceTagsWhenPull) {\n\t\t\t// Notification\n\t\t\tconst replaceLocalTags = l10n.t('Replace Local Tag(s)');\n\t\t\tconst replaceLocalTagsAlways = l10n.t('Always Replace Local Tag(s)');\n\t\t\tconst message = l10n.t('Unable to pull from remote repository due to conflicting tag(s): {0}. Would you like to resolve the conflict by replacing the local tag(s)?', tags.join(', '));\n\t\t\tconst choice = await window.showErrorMessage(message, { modal: true }, replaceLocalTags, replaceLocalTagsAlways);\n\n\t\t\tif (choice !== replaceLocalTags && choice !== replaceLocalTagsAlways) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (choice === replaceLocalTagsAlways) {\n\t\t\t\tawait config.update('replaceTagsWhenPull', true, true);\n\t\t\t}\n\t\t}\n\n\t\t// Force fetch tags\n\t\tawait this.repository.fetchTags({ remote, tags, force: true });\n\t\treturn true;\n\t}\n\n\tpublic isBranchProtected(branch = this.HEAD): boolean {\n\t\tif (branch?.name) {\n\t\t\t// Default branch protection (settings)\n\t\t\tconst defaultBranchProtectionMatcher = this.branchProtection.get('');\n\t\t\tif (defaultBranchProtectionMatcher?.length === 1 &&\n\t\t\t\tdefaultBranchProtectionMatcher[0].include &&\n\t\t\t\tdefaultBranchProtectionMatcher[0].include(branch.name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (branch.upstream?.remote) {\n\t\t\t\t// Branch protection (contributed)\n\t\t\t\tconst remoteBranchProtectionMatcher = this.branchProtection.get(branch.upstream.remote);\n\t\t\t\tif (remoteBranchProtectionMatcher && remoteBranchProtectionMatcher?.length !== 0) {\n\t\t\t\t\treturn remoteBranchProtectionMatcher.some(matcher => {\n\t\t\t\t\t\tconst include = matcher.include ? matcher.include(branch.name!) : true;\n\t\t\t\t\t\tconst exclude = matcher.exclude ? matcher.exclude(branch.name!) : false;\n\n\t\t\t\t\t\treturn include && !exclude;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tasync getUnpublishedCommits(): Promise<Set<string>> {\n\t\tif (this.unpublishedCommits) {\n\t\t\treturn this.unpublishedCommits;\n\t\t}\n\n\t\tif (!this.HEAD?.name) {\n\t\t\tthis.unpublishedCommits = new Set<string>();\n\t\t\treturn this.unpublishedCommits;\n\t\t}\n\n\t\tif (this.HEAD.upstream) {\n\t\t\t// Upstream\n\t\t\tif (this.HEAD.ahead === 0) {\n\t\t\t\tthis.unpublishedCommits = new Set<string>();\n\t\t\t} else {\n\t\t\t\tconst ref1 = `${this.HEAD.upstream.remote}/${this.HEAD.upstream.name}`;\n\t\t\t\tconst ref2 = this.HEAD.name;\n\n\t\t\t\tconst revList = await this.repository.revList(ref1, ref2);\n\t\t\t\tthis.unpublishedCommits = new Set<string>(revList);\n\t\t\t}\n\t\t} else if (this.historyProvider.currentHistoryItemBaseRef) {\n\t\t\t// Base\n\t\t\tconst ref1 = this.historyProvider.currentHistoryItemBaseRef.id;\n\t\t\tconst ref2 = this.HEAD.name;\n\n\t\t\tconst revList = await this.repository.revList(ref1, ref2);\n\t\t\tthis.unpublishedCommits = new Set<string>(revList);\n\t\t} else {\n\t\t\tthis.unpublishedCommits = new Set<string>();\n\t\t}\n\n\t\treturn this.unpublishedCommits;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n\nexport class StagedResourceQuickDiffProvider implements QuickDiffProvider {\n\treadonly visible: boolean = false;\n\n\tprivate _disposables: IDisposable[] = [];\n\n\tconstructor(private readonly _repositoryResolver: IRepositoryResolver) {\n\t\tthis._disposables.push(window.registerQuickDiffProvider({ scheme: 'file' }, this, l10n.t('Git local changes (working tree + index)')));\n\t}\n\n\tprovideOriginalResource(uri: Uri): Uri | undefined {\n\t\t// Ignore resources outside a repository\n\t\tconst repository = this._repositoryResolver.getRepository(uri);\n\t\tif (!repository) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Ignore resources that are not in the index group\n\t\tif (!repository.indexGroup.resourceStates.some(r => pathEquals(r.resourceUri.fsPath, uri.fsPath))) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn toGitUri(uri, 'HEAD', { replaceFileExtension: true });\n\t}\n\n\tdispose() {\n\t\tthis._disposables = dispose(this._disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/ssh-askpass-empty.sh",
    "content": "#!/bin/sh\necho ''"
  },
  {
    "path": "extensions/git/src/ssh-askpass.sh",
    "content": "#!/bin/sh\nVSCODE_GIT_ASKPASS_PIPE=`mktemp`\nELECTRON_RUN_AS_NODE=\"1\" VSCODE_GIT_ASKPASS_PIPE=\"$VSCODE_GIT_ASKPASS_PIPE\" VSCODE_GIT_ASKPASS_TYPE=\"ssh\" \"$VSCODE_GIT_ASKPASS_NODE\" \"$VSCODE_GIT_ASKPASS_MAIN\" $VSCODE_GIT_ASKPASS_EXTRA_ARGS $*\ncat $VSCODE_GIT_ASKPASS_PIPE\nrm $VSCODE_GIT_ASKPASS_PIPE\n"
  },
  {
    "path": "extensions/git/src/staging.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument, Range, Selection, Uri, TextEditor, TextEditorDiffInformation } from 'vscode';\nimport { fromGitUri, isGitUri } from './uri';\n\nexport interface LineChange {\n\treadonly originalStartLineNumber: number;\n\treadonly originalEndLineNumber: number;\n\treadonly modifiedStartLineNumber: number;\n\treadonly modifiedEndLineNumber: number;\n}\n\nexport function applyLineChanges(original: TextDocument, modified: TextDocument, diffs: LineChange[]): string {\n\tconst result: string[] = [];\n\tlet currentLine = 0;\n\n\tfor (const diff of diffs) {\n\t\tconst isInsertion = diff.originalEndLineNumber === 0;\n\t\tconst isDeletion = diff.modifiedEndLineNumber === 0;\n\n\t\tlet endLine = isInsertion ? diff.originalStartLineNumber : diff.originalStartLineNumber - 1;\n\t\tlet endCharacter = 0;\n\n\t\t// if this is a deletion at the very end of the document,then we need to account\n\t\t// for a newline at the end of the last line which may have been deleted\n\t\t// https://github.com/microsoft/vscode/issues/59670\n\t\tif (isDeletion && diff.originalEndLineNumber === original.lineCount) {\n\t\t\tendLine -= 1;\n\t\t\tendCharacter = original.lineAt(endLine).range.end.character;\n\t\t}\n\n\t\tresult.push(original.getText(new Range(currentLine, 0, endLine, endCharacter)));\n\n\t\tif (!isDeletion) {\n\t\t\tlet fromLine = diff.modifiedStartLineNumber - 1;\n\t\t\tlet fromCharacter = 0;\n\n\t\t\t// if this is an insertion at the very end of the document,\n\t\t\t// then we must start the next range after the last character of the\n\t\t\t// previous line, in order to take the correct eol\n\t\t\tif (isInsertion && diff.originalStartLineNumber === original.lineCount) {\n\t\t\t\tfromLine -= 1;\n\t\t\t\tfromCharacter = modified.lineAt(fromLine).range.end.character;\n\t\t\t}\n\n\t\t\tresult.push(modified.getText(new Range(fromLine, fromCharacter, diff.modifiedEndLineNumber, 0)));\n\t\t}\n\n\t\tcurrentLine = isInsertion ? diff.originalStartLineNumber : diff.originalEndLineNumber;\n\t}\n\n\tresult.push(original.getText(new Range(currentLine, 0, original.lineCount, 0)));\n\n\treturn result.join('');\n}\n\nexport function toLineRanges(selections: readonly Selection[], textDocument: TextDocument): Range[] {\n\tconst lineRanges = selections.map(s => {\n\t\tconst startLine = textDocument.lineAt(s.start.line);\n\t\tconst endLine = textDocument.lineAt(s.end.line);\n\t\treturn new Range(startLine.range.start, endLine.range.end);\n\t});\n\n\tlineRanges.sort((a, b) => a.start.line - b.start.line);\n\n\tconst result = lineRanges.reduce((result, l) => {\n\t\tif (result.length === 0) {\n\t\t\tresult.push(l);\n\t\t\treturn result;\n\t\t}\n\n\t\tconst [last, ...rest] = result;\n\t\tconst intersection = l.intersection(last);\n\n\t\tif (intersection) {\n\t\t\treturn [intersection, ...rest];\n\t\t}\n\n\t\tif (l.start.line === last.end.line + 1) {\n\t\t\tconst merge = new Range(last.start, l.end);\n\t\t\treturn [merge, ...rest];\n\t\t}\n\n\t\treturn [l, ...result];\n\t}, [] as Range[]);\n\n\tresult.reverse();\n\n\treturn result;\n}\n\nexport function getModifiedRange(textDocument: TextDocument, diff: LineChange): Range {\n\tif (diff.modifiedEndLineNumber === 0) {\n\t\tif (diff.modifiedStartLineNumber === 0) {\n\t\t\treturn new Range(textDocument.lineAt(diff.modifiedStartLineNumber).range.end, textDocument.lineAt(diff.modifiedStartLineNumber).range.start);\n\t\t} else if (textDocument.lineCount === diff.modifiedStartLineNumber) {\n\t\t\treturn new Range(textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.end, textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.end);\n\t\t} else {\n\t\t\treturn new Range(textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.end, textDocument.lineAt(diff.modifiedStartLineNumber).range.start);\n\t\t}\n\t} else {\n\t\treturn new Range(textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.start, textDocument.lineAt(diff.modifiedEndLineNumber - 1).range.end);\n\t}\n}\n\nexport function intersectDiffWithRange(textDocument: TextDocument, diff: LineChange, range: Range): LineChange | null {\n\tconst modifiedRange = getModifiedRange(textDocument, diff);\n\tconst intersection = range.intersection(modifiedRange);\n\n\tif (!intersection) {\n\t\treturn null;\n\t}\n\n\tif (diff.modifiedEndLineNumber === 0) {\n\t\treturn diff;\n\t} else {\n\t\tconst modifiedStartLineNumber = intersection.start.line + 1;\n\t\tconst modifiedEndLineNumber = intersection.end.line + 1;\n\n\t\t// heuristic: same number of lines on both sides, let's assume line by line\n\t\tif (diff.originalEndLineNumber - diff.originalStartLineNumber === diff.modifiedEndLineNumber - diff.modifiedStartLineNumber) {\n\t\t\tconst delta = modifiedStartLineNumber - diff.modifiedStartLineNumber;\n\t\t\tconst length = modifiedEndLineNumber - modifiedStartLineNumber;\n\n\t\t\treturn {\n\t\t\t\toriginalStartLineNumber: diff.originalStartLineNumber + delta,\n\t\t\t\toriginalEndLineNumber: diff.originalStartLineNumber + delta + length,\n\t\t\t\tmodifiedStartLineNumber,\n\t\t\t\tmodifiedEndLineNumber\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\toriginalStartLineNumber: diff.originalStartLineNumber,\n\t\t\t\toriginalEndLineNumber: diff.originalEndLineNumber,\n\t\t\t\tmodifiedStartLineNumber,\n\t\t\t\tmodifiedEndLineNumber\n\t\t\t};\n\t\t}\n\t}\n}\n\nexport function invertLineChange(diff: LineChange): LineChange {\n\treturn {\n\t\tmodifiedStartLineNumber: diff.originalStartLineNumber,\n\t\tmodifiedEndLineNumber: diff.originalEndLineNumber,\n\t\toriginalStartLineNumber: diff.modifiedStartLineNumber,\n\t\toriginalEndLineNumber: diff.modifiedEndLineNumber\n\t};\n}\n\nexport function toLineChanges(diffInformation: TextEditorDiffInformation): LineChange[] {\n\treturn diffInformation.changes.map(x => {\n\t\tlet originalStartLineNumber: number;\n\t\tlet originalEndLineNumber: number;\n\t\tlet modifiedStartLineNumber: number;\n\t\tlet modifiedEndLineNumber: number;\n\n\t\tif (x.original.startLineNumber === x.original.endLineNumberExclusive) {\n\t\t\t// Insertion\n\t\t\toriginalStartLineNumber = x.original.startLineNumber - 1;\n\t\t\toriginalEndLineNumber = 0;\n\t\t} else {\n\t\t\toriginalStartLineNumber = x.original.startLineNumber;\n\t\t\toriginalEndLineNumber = x.original.endLineNumberExclusive - 1;\n\t\t}\n\n\t\tif (x.modified.startLineNumber === x.modified.endLineNumberExclusive) {\n\t\t\t// Deletion\n\t\t\tmodifiedStartLineNumber = x.modified.startLineNumber - 1;\n\t\t\tmodifiedEndLineNumber = 0;\n\t\t} else {\n\t\t\tmodifiedStartLineNumber = x.modified.startLineNumber;\n\t\t\tmodifiedEndLineNumber = x.modified.endLineNumberExclusive - 1;\n\t\t}\n\n\t\treturn {\n\t\t\toriginalStartLineNumber,\n\t\t\toriginalEndLineNumber,\n\t\t\tmodifiedStartLineNumber,\n\t\t\tmodifiedEndLineNumber\n\t\t};\n\t});\n}\n\nexport function getIndexDiffInformation(textEditor: TextEditor): TextEditorDiffInformation | undefined {\n\t// Diff Editor (Index)\n\treturn textEditor.diffInformation?.find(diff =>\n\t\tdiff.original && isGitUri(diff.original) && fromGitUri(diff.original).ref === 'HEAD' &&\n\t\tdiff.modified && isGitUri(diff.modified) && fromGitUri(diff.modified).ref === '');\n}\n\nexport function getWorkingTreeDiffInformation(textEditor: TextEditor): TextEditorDiffInformation | undefined {\n\t// Working tree diff information. Diff Editor (Working Tree) -> Text Editor\n\treturn getDiffInformation(textEditor, '~') ?? getDiffInformation(textEditor, '');\n}\n\nexport function getWorkingTreeAndIndexDiffInformation(textEditor: TextEditor): TextEditorDiffInformation | undefined {\n\treturn getDiffInformation(textEditor, 'HEAD');\n}\n\nfunction getDiffInformation(textEditor: TextEditor, ref: string): TextEditorDiffInformation | undefined {\n\treturn textEditor.diffInformation?.find(diff => diff.original && isGitUri(diff.original) && fromGitUri(diff.original).ref === ref);\n}\n\nexport interface DiffEditorSelectionHunkToolbarContext {\n\tmapping: unknown;\n\t/**\n\t * The original text with the selected modified changes applied.\n\t*/\n\toriginalWithModifiedChanges: string;\n\n\tmodifiedUri: Uri;\n\toriginalUri: Uri;\n}\n"
  },
  {
    "path": "extensions/git/src/statusbar.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, Command, EventEmitter, Event, workspace, Uri, l10n } from 'vscode';\nimport { Repository } from './repository';\nimport { anyEvent, dispose, filterEvent } from './util';\nimport { Branch, RefType, RemoteSourcePublisher } from './api/git';\nimport { IRemoteSourcePublisherRegistry } from './remotePublisher';\nimport { CheckoutOperation, CheckoutTrackingOperation, OperationKind } from './operation';\n\ninterface CheckoutStatusBarState {\n\treadonly isCheckoutRunning: boolean;\n\treadonly isCommitRunning: boolean;\n\treadonly isSyncRunning: boolean;\n}\n\nclass CheckoutStatusBar {\n\n\tprivate _onDidChange = new EventEmitter<void>();\n\tget onDidChange(): Event<void> { return this._onDidChange.event; }\n\tprivate disposables: Disposable[] = [];\n\n\tprivate _state: CheckoutStatusBarState;\n\tprivate get state() { return this._state; }\n\tprivate set state(state: CheckoutStatusBarState) {\n\t\tthis._state = state;\n\t\tthis._onDidChange.fire();\n\t}\n\n\tconstructor(private repository: Repository) {\n\t\tthis._state = {\n\t\t\tisCheckoutRunning: false,\n\t\t\tisCommitRunning: false,\n\t\t\tisSyncRunning: false\n\t\t};\n\n\t\trepository.onDidChangeOperations(this.onDidChangeOperations, this, this.disposables);\n\t\trepository.onDidRunGitStatus(this._onDidChange.fire, this._onDidChange, this.disposables);\n\t\trepository.onDidChangeBranchProtection(this._onDidChange.fire, this._onDidChange, this.disposables);\n\t}\n\n\tget command(): Command | undefined {\n\t\tconst operationData = [\n\t\t\t...this.repository.operations.getOperations(OperationKind.Checkout) as CheckoutOperation[],\n\t\t\t...this.repository.operations.getOperations(OperationKind.CheckoutTracking) as CheckoutTrackingOperation[]\n\t\t];\n\n\t\tconst rebasing = !!this.repository.rebaseCommit;\n\t\tconst label = operationData[0]?.refLabel ?? `${this.repository.headLabel}${rebasing ? ` (${l10n.t('Rebasing')})` : ''}`;\n\t\tconst command = (this.state.isCheckoutRunning || this.state.isCommitRunning || this.state.isSyncRunning) ? '' : 'git.checkout';\n\n\t\treturn {\n\t\t\tcommand,\n\t\t\ttooltip: `${label}, ${this.getTooltip()}`,\n\t\t\ttitle: `${this.getIcon()} ${label}`,\n\t\t\targuments: [this.repository.sourceControl]\n\t\t};\n\t}\n\n\tprivate getIcon(): string {\n\t\tif (!this.repository.HEAD) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Checkout\n\t\tif (this.state.isCheckoutRunning) {\n\t\t\treturn '$(loading~spin)';\n\t\t}\n\n\t\t// Branch\n\t\tif (this.repository.HEAD.type === RefType.Head && this.repository.HEAD.name) {\n\t\t\treturn this.repository.isBranchProtected() ? '$(lock)' : '$(git-branch)';\n\t\t}\n\n\t\t// Tag\n\t\tif (this.repository.HEAD.type === RefType.Tag) {\n\t\t\treturn '$(tag)';\n\t\t}\n\n\t\t// Commit\n\t\treturn '$(git-commit)';\n\t}\n\n\tprivate getTooltip(): string {\n\t\tif (this.state.isCheckoutRunning) {\n\t\t\treturn l10n.t('Checking Out Branch/Tag...');\n\t\t}\n\n\t\tif (this.state.isCommitRunning) {\n\t\t\treturn l10n.t('Committing Changes...');\n\n\t\t}\n\n\t\tif (this.state.isSyncRunning) {\n\t\t\treturn l10n.t('Synchronizing Changes...');\n\t\t}\n\n\t\treturn l10n.t('Checkout Branch/Tag...');\n\t}\n\n\tprivate onDidChangeOperations(): void {\n\t\tconst isCommitRunning = this.repository.operations.isRunning(OperationKind.Commit);\n\t\tconst isCheckoutRunning = this.repository.operations.isRunning(OperationKind.Checkout) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.CheckoutTracking);\n\t\tconst isSyncRunning = this.repository.operations.isRunning(OperationKind.Sync) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.Push) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.Pull);\n\n\t\tthis.state = { ...this.state, isCheckoutRunning, isCommitRunning, isSyncRunning };\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n}\n\ninterface SyncStatusBarState {\n\treadonly enabled: boolean;\n\treadonly isCheckoutRunning: boolean;\n\treadonly isCommitRunning: boolean;\n\treadonly isSyncRunning: boolean;\n\treadonly hasRemotes: boolean;\n\treadonly HEAD: Branch | undefined;\n\treadonly remoteSourcePublishers: RemoteSourcePublisher[];\n}\n\nclass SyncStatusBar {\n\n\tprivate _onDidChange = new EventEmitter<void>();\n\tget onDidChange(): Event<void> { return this._onDidChange.event; }\n\tprivate disposables: Disposable[] = [];\n\n\tprivate _state: SyncStatusBarState;\n\tprivate get state() { return this._state; }\n\tprivate set state(state: SyncStatusBarState) {\n\t\tthis._state = state;\n\t\tthis._onDidChange.fire();\n\t}\n\n\tconstructor(private repository: Repository, private remoteSourcePublisherRegistry: IRemoteSourcePublisherRegistry) {\n\t\tthis._state = {\n\t\t\tenabled: true,\n\t\t\tisCheckoutRunning: false,\n\t\t\tisCommitRunning: false,\n\t\t\tisSyncRunning: false,\n\t\t\thasRemotes: false,\n\t\t\tHEAD: undefined,\n\t\t\tremoteSourcePublishers: remoteSourcePublisherRegistry.getRemoteSourcePublishers()\n\t\t};\n\n\t\trepository.onDidRunGitStatus(this.onDidRunGitStatus, this, this.disposables);\n\t\trepository.onDidChangeOperations(this.onDidChangeOperations, this, this.disposables);\n\n\t\tanyEvent(remoteSourcePublisherRegistry.onDidAddRemoteSourcePublisher, remoteSourcePublisherRegistry.onDidRemoveRemoteSourcePublisher)\n\t\t\t(this.onDidChangeRemoteSourcePublishers, this, this.disposables);\n\n\t\tconst onEnablementChange = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.enableStatusBarSync'));\n\t\tonEnablementChange(this.updateEnablement, this, this.disposables);\n\t\tthis.updateEnablement();\n\t}\n\n\tprivate updateEnablement(): void {\n\t\tconst config = workspace.getConfiguration('git', Uri.file(this.repository.root));\n\t\tconst enabled = config.get<boolean>('enableStatusBarSync', true);\n\n\t\tthis.state = { ... this.state, enabled };\n\t}\n\n\tprivate onDidChangeOperations(): void {\n\t\tconst isCommitRunning = this.repository.operations.isRunning(OperationKind.Commit);\n\t\tconst isCheckoutRunning = this.repository.operations.isRunning(OperationKind.Checkout) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.CheckoutTracking);\n\t\tconst isSyncRunning = this.repository.operations.isRunning(OperationKind.Sync) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.Push) ||\n\t\t\tthis.repository.operations.isRunning(OperationKind.Pull);\n\n\t\tthis.state = { ...this.state, isCheckoutRunning, isCommitRunning, isSyncRunning };\n\t}\n\n\tprivate onDidRunGitStatus(): void {\n\t\tthis.state = {\n\t\t\t...this.state,\n\t\t\thasRemotes: this.repository.remotes.length > 0,\n\t\t\tHEAD: this.repository.HEAD\n\t\t};\n\t}\n\n\tprivate onDidChangeRemoteSourcePublishers(): void {\n\t\tthis.state = {\n\t\t\t...this.state,\n\t\t\tremoteSourcePublishers: this.remoteSourcePublisherRegistry.getRemoteSourcePublishers()\n\t\t};\n\t}\n\n\tget command(): Command | undefined {\n\t\tif (!this.state.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.state.hasRemotes) {\n\t\t\tif (this.state.remoteSourcePublishers.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst command = (this.state.isCheckoutRunning || this.state.isCommitRunning) ? '' : 'git.publish';\n\t\t\tconst tooltip =\n\t\t\t\tthis.state.isCheckoutRunning ? l10n.t('Checking Out Changes...') :\n\t\t\t\t\tthis.state.isCommitRunning ? l10n.t('Committing Changes...') :\n\t\t\t\t\t\tthis.state.remoteSourcePublishers.length === 1\n\t\t\t\t\t\t\t? l10n.t('Publish to {0}', this.state.remoteSourcePublishers[0].name)\n\t\t\t\t\t\t\t: l10n.t('Publish to...');\n\n\t\t\treturn {\n\t\t\t\tcommand,\n\t\t\t\ttitle: `$(cloud-upload)`,\n\t\t\t\ttooltip,\n\t\t\t\targuments: [this.repository.sourceControl]\n\t\t\t};\n\t\t}\n\n\t\tconst HEAD = this.state.HEAD;\n\t\tlet icon = '$(sync)';\n\t\tlet text = '';\n\t\tlet command = '';\n\t\tlet tooltip = '';\n\n\t\tif (HEAD && HEAD.name && HEAD.commit) {\n\t\t\tif (HEAD.upstream) {\n\t\t\t\tif (HEAD.ahead || HEAD.behind) {\n\t\t\t\t\ttext += this.repository.syncLabel;\n\t\t\t\t}\n\n\t\t\t\tcommand = 'git.sync';\n\t\t\t\ttooltip = this.repository.syncTooltip;\n\t\t\t} else {\n\t\t\t\ticon = '$(cloud-upload)';\n\t\t\t\tcommand = 'git.publish';\n\t\t\t\ttooltip = l10n.t('Publish Branch');\n\t\t\t}\n\t\t} else {\n\t\t\tcommand = '';\n\t\t\ttooltip = '';\n\t\t}\n\n\t\tif (this.state.isCheckoutRunning) {\n\t\t\tcommand = '';\n\t\t\ttooltip = l10n.t('Checking Out Changes...');\n\t\t}\n\n\t\tif (this.state.isCommitRunning) {\n\t\t\tcommand = '';\n\t\t\ttooltip = l10n.t('Committing Changes...');\n\t\t}\n\n\t\tif (this.state.isSyncRunning) {\n\t\t\ticon = '$(sync~spin)';\n\t\t\tcommand = '';\n\t\t\ttooltip = l10n.t('Synchronizing Changes...');\n\t\t}\n\n\t\treturn {\n\t\t\tcommand,\n\t\t\ttitle: [icon, text].join(' ').trim(),\n\t\t\ttooltip,\n\t\t\targuments: [this.repository.sourceControl]\n\t\t};\n\t}\n\n\tdispose(): void {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n}\n\nexport class StatusBarCommands {\n\n\treadonly onDidChange: Event<void>;\n\n\tprivate syncStatusBar: SyncStatusBar;\n\tprivate checkoutStatusBar: CheckoutStatusBar;\n\tprivate disposables: Disposable[] = [];\n\n\tconstructor(repository: Repository, remoteSourcePublisherRegistry: IRemoteSourcePublisherRegistry) {\n\t\tthis.syncStatusBar = new SyncStatusBar(repository, remoteSourcePublisherRegistry);\n\t\tthis.checkoutStatusBar = new CheckoutStatusBar(repository);\n\t\tthis.onDidChange = anyEvent(this.syncStatusBar.onDidChange, this.checkoutStatusBar.onDidChange);\n\t}\n\n\tget commands(): Command[] {\n\t\treturn [this.checkoutStatusBar.command, this.syncStatusBar.command]\n\t\t\t.filter((c): c is Command => !!c);\n\t}\n\n\tdispose(): void {\n\t\tthis.syncStatusBar.dispose();\n\t\tthis.checkoutStatusBar.dispose();\n\t\tthis.disposables = dispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/terminal.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ExtensionContext, l10n, LogOutputChannel, TerminalShellExecutionEndEvent, window, workspace } from 'vscode';\nimport { dispose, filterEvent, IDisposable } from './util';\nimport { Model } from './model';\n\nexport interface ITerminalEnvironmentProvider {\n\tfeatureDescription?: string;\n\tgetTerminalEnv(): { [key: string]: string };\n}\n\nexport class TerminalEnvironmentManager {\n\n\tprivate readonly disposable: IDisposable;\n\n\tconstructor(private readonly context: ExtensionContext, private readonly envProviders: (ITerminalEnvironmentProvider | undefined)[]) {\n\t\tthis.disposable = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git'))\n\t\t\t(this.refresh, this);\n\n\t\tthis.refresh();\n\t}\n\n\tprivate refresh(): void {\n\t\tconst config = workspace.getConfiguration('git', null);\n\t\tthis.context.environmentVariableCollection.clear();\n\n\t\tif (!config.get<boolean>('enabled', true)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst features: string[] = [];\n\t\tfor (const envProvider of this.envProviders) {\n\t\t\tconst terminalEnv = envProvider?.getTerminalEnv() ?? {};\n\n\t\t\tfor (const name of Object.keys(terminalEnv)) {\n\t\t\t\tthis.context.environmentVariableCollection.replace(name, terminalEnv[name]);\n\t\t\t}\n\t\t\tif (envProvider?.featureDescription && Object.keys(terminalEnv).length > 0) {\n\t\t\t\tfeatures.push(envProvider.featureDescription);\n\t\t\t}\n\t\t}\n\t\tif (features.length) {\n\t\t\tthis.context.environmentVariableCollection.description = l10n.t('Enables the following features: {0}', features.join(', '));\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.disposable.dispose();\n\t}\n}\n\nexport class TerminalShellExecutionManager {\n\tprivate readonly subcommands = new Set<string>([\n\t\t'add', 'branch', 'checkout', 'cherry-pick', 'clean', 'commit', 'fetch', 'merge',\n\t\t'mv', 'rebase', 'reset', 'restore', 'revert', 'rm', 'pull', 'push', 'stash', 'switch']);\n\n\tprivate readonly disposables: IDisposable[] = [];\n\n\tconstructor(\n\t\tprivate readonly model: Model,\n\t\tprivate readonly logger: LogOutputChannel\n\t) {\n\t\twindow.onDidEndTerminalShellExecution(this.onDidEndTerminalShellExecution, this, this.disposables);\n\t}\n\n\tprivate onDidEndTerminalShellExecution(e: TerminalShellExecutionEndEvent): void {\n\t\tconst { execution, exitCode, shellIntegration } = e;\n\t\tconst [executable, subcommand] = execution.commandLine.value.split(/\\s+/);\n\t\tconst cwd = execution.cwd ?? shellIntegration.cwd;\n\n\t\tif (executable.toLowerCase() !== 'git' || !this.subcommands.has(subcommand?.toLowerCase()) || !cwd || exitCode !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.logger.trace(`[TerminalShellExecutionManager][onDidEndTerminalShellExecution] Matched git subcommand: ${subcommand}`);\n\n\t\tconst repository = this.model.getRepository(cwd);\n\t\tif (!repository) {\n\t\t\tthis.logger.trace(`[TerminalShellExecutionManager][onDidEndTerminalShellExecution] Unable to find repository for current working directory: ${cwd.toString()}`);\n\t\t\treturn;\n\t\t}\n\n\t\trepository.status();\n\t}\n\n\tdispose(): void {\n\t\tdispose(this.disposables);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/test/git.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { GitStatusParser, parseGitCommits, parseGitmodules, parseLsTree, parseLsFiles, parseGitRemotes } from '../git';\nimport * as assert from 'assert';\nimport { splitInChunks } from '../util';\n\nsuite('git', () => {\n\tsuite('GitStatusParser', () => {\n\t\ttest('empty parser', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tassert.deepStrictEqual(parser.status, []);\n\t\t});\n\n\t\ttest('empty parser 2', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('');\n\t\t\tassert.deepStrictEqual(parser.status, []);\n\t\t});\n\n\t\ttest('simple', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('?? file.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('simple 2', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('?? file.txt\\0');\n\t\t\tparser.update('?? file2.txt\\0');\n\t\t\tparser.update('?? file3.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('empty lines', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('');\n\t\t\tparser.update('?? file.txt\\0');\n\t\t\tparser.update('');\n\t\t\tparser.update('');\n\t\t\tparser.update('?? file2.txt\\0');\n\t\t\tparser.update('');\n\t\t\tparser.update('?? file3.txt\\0');\n\t\t\tparser.update('');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('combined', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('?? file.txt\\0?? file2.txt\\0?? file3.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('split 1', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('?? file.txt\\0?? file2');\n\t\t\tparser.update('.txt\\0?? file3.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('split 2', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('?? file.txt');\n\t\t\tparser.update('\\0?? file2.txt\\0?? file3.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('split 3', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('?? file.txt\\0?? file2.txt\\0?? file3.txt');\n\t\t\tparser.update('\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('rename', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('R  newfile.txt\\0file.txt\\0?? file2.txt\\0?? file3.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: 'newfile.txt', x: 'R', y: ' ' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('rename split', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('R  newfile.txt\\0fil');\n\t\t\tparser.update('e.txt\\0?? file2.txt\\0?? file3.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file.txt', rename: 'newfile.txt', x: 'R', y: ' ' },\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('rename split 3', () => {\n\t\t\tconst parser = new GitStatusParser();\n\t\t\tparser.update('?? file2.txt\\0R  new');\n\t\t\tparser.update('file.txt\\0fil');\n\t\t\tparser.update('e.txt\\0?? file3.txt\\0');\n\t\t\tassert.deepStrictEqual(parser.status, [\n\t\t\t\t{ path: 'file2.txt', rename: undefined, x: '?', y: '?' },\n\t\t\t\t{ path: 'file.txt', rename: 'newfile.txt', x: 'R', y: ' ' },\n\t\t\t\t{ path: 'file3.txt', rename: undefined, x: '?', y: '?' }\n\t\t\t]);\n\t\t});\n\t});\n\n\tsuite('parseGitmodules', () => {\n\t\ttest('empty', () => {\n\t\t\tassert.deepStrictEqual(parseGitmodules(''), []);\n\t\t});\n\n\t\ttest('sample', () => {\n\t\t\tconst sample = `[submodule \"deps/spdlog\"]\n\tpath = deps/spdlog\n\turl = https://github.com/gabime/spdlog.git\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitmodules(sample), [\n\t\t\t\t{ name: 'deps/spdlog', path: 'deps/spdlog', url: 'https://github.com/gabime/spdlog.git' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('big', () => {\n\t\t\tconst sample = `[submodule \"deps/spdlog\"]\n\tpath = deps/spdlog\n\turl = https://github.com/gabime/spdlog.git\n[submodule \"deps/spdlog2\"]\n\tpath = deps/spdlog2\n\turl = https://github.com/gabime/spdlog.git\n[submodule \"deps/spdlog3\"]\n\tpath = deps/spdlog3\n\turl = https://github.com/gabime/spdlog.git\n[submodule \"deps/spdlog4\"]\n\tpath = deps/spdlog4\n\turl = https://github.com/gabime/spdlog4.git\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitmodules(sample), [\n\t\t\t\t{ name: 'deps/spdlog', path: 'deps/spdlog', url: 'https://github.com/gabime/spdlog.git' },\n\t\t\t\t{ name: 'deps/spdlog2', path: 'deps/spdlog2', url: 'https://github.com/gabime/spdlog.git' },\n\t\t\t\t{ name: 'deps/spdlog3', path: 'deps/spdlog3', url: 'https://github.com/gabime/spdlog.git' },\n\t\t\t\t{ name: 'deps/spdlog4', path: 'deps/spdlog4', url: 'https://github.com/gabime/spdlog4.git' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('whitespace #74844', () => {\n\t\t\tconst sample = `[submodule \"deps/spdlog\"]\n\tpath = deps/spdlog\n\turl  = https://github.com/gabime/spdlog.git\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitmodules(sample), [\n\t\t\t\t{ name: 'deps/spdlog', path: 'deps/spdlog', url: 'https://github.com/gabime/spdlog.git' }\n\t\t\t]);\n\t\t});\n\n\t\ttest('whitespace again #108371', () => {\n\t\t\tconst sample = `[submodule \"deps/spdlog\"]\n\tpath= deps/spdlog\n\turl=https://github.com/gabime/spdlog.git\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitmodules(sample), [\n\t\t\t\t{ name: 'deps/spdlog', path: 'deps/spdlog', url: 'https://github.com/gabime/spdlog.git' }\n\t\t\t]);\n\t\t});\n\t});\n\n\tsuite('parseGitRemotes', () => {\n\t\ttest('empty', () => {\n\t\t\tassert.deepStrictEqual(parseGitRemotes(''), []);\n\t\t});\n\n\t\ttest('single remote', () => {\n\t\t\tconst sample = `[remote \"origin\"]\n\turl = https://github.com/microsoft/vscode.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitRemotes(sample), [\n\t\t\t\t{ name: 'origin', fetchUrl: 'https://github.com/microsoft/vscode.git', pushUrl: 'https://github.com/microsoft/vscode.git', isReadOnly: false }\n\t\t\t]);\n\t\t});\n\n\t\ttest('single remote (multiple urls)', () => {\n\t\t\tconst sample = `[remote \"origin\"]\n\turl = https://github.com/microsoft/vscode.git\n\turl = https://github.com/microsoft/vscode2.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitRemotes(sample), [\n\t\t\t\t{ name: 'origin', fetchUrl: 'https://github.com/microsoft/vscode.git', pushUrl: 'https://github.com/microsoft/vscode.git', isReadOnly: false }\n\t\t\t]);\n\t\t});\n\n\t\ttest('multiple remotes', () => {\n\t\t\tconst sample = `[remote \"origin\"]\n\turl = https://github.com/microsoft/vscode.git\n\tpushurl = https://github.com/microsoft/vscode1.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n[remote \"remote2\"]\n\turl = https://github.com/microsoft/vscode2.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitRemotes(sample), [\n\t\t\t\t{ name: 'origin', fetchUrl: 'https://github.com/microsoft/vscode.git', pushUrl: 'https://github.com/microsoft/vscode1.git', isReadOnly: false },\n\t\t\t\t{ name: 'remote2', fetchUrl: 'https://github.com/microsoft/vscode2.git', pushUrl: 'https://github.com/microsoft/vscode2.git', isReadOnly: false }\n\t\t\t]);\n\t\t});\n\n\t\ttest('remotes (white space)', () => {\n\t\t\tconst sample = ` [remote \"origin\"]\n\turl  =  https://github.com/microsoft/vscode.git\n\tpushurl=https://github.com/microsoft/vscode1.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n[ remote\"remote2\"]\n\turl = https://github.com/microsoft/vscode2.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitRemotes(sample), [\n\t\t\t\t{ name: 'origin', fetchUrl: 'https://github.com/microsoft/vscode.git', pushUrl: 'https://github.com/microsoft/vscode1.git', isReadOnly: false },\n\t\t\t\t{ name: 'remote2', fetchUrl: 'https://github.com/microsoft/vscode2.git', pushUrl: 'https://github.com/microsoft/vscode2.git', isReadOnly: false }\n\t\t\t]);\n\t\t});\n\n\t\ttest('remotes (invalid section)', () => {\n\t\t\tconst sample = `[remote \"origin\"\n\turl = https://github.com/microsoft/vscode.git\n\tpushurl = https://github.com/microsoft/vscode1.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`;\n\n\t\t\tassert.deepStrictEqual(parseGitRemotes(sample), []);\n\t\t});\n\t});\n\n\tsuite('parseGitCommit', () => {\n\t\ttest('single parent commit', function () {\n\t\t\tconst GIT_OUTPUT_SINGLE_PARENT =\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385554\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is a commit message.\\x00';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_SINGLE_PARENT), [{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385554'],\n\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\tauthorName: 'John Doe',\n\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\tshortStat: undefined\n\t\t\t}]);\n\t\t});\n\n\t\ttest('multiple parent commits', function () {\n\t\t\tconst GIT_OUTPUT_MULTIPLE_PARENTS =\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385554 df27d8c75b129ab9b178b386077da2822101b217\\n' +\n\t\t\t\t'main\\n' +\n\t\t\t\t'This is a commit message.\\x00';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_MULTIPLE_PARENTS), [{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385554', 'df27d8c75b129ab9b178b386077da2822101b217'],\n\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\tauthorName: 'John Doe',\n\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\trefNames: ['main'],\n\t\t\t\tshortStat: undefined\n\t\t\t}]);\n\t\t});\n\n\t\ttest('no parent commits', function () {\n\t\t\tconst GIT_OUTPUT_NO_PARENTS =\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'\\n' +\n\t\t\t\t'main\\n' +\n\t\t\t\t'This is a commit message.\\x00';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_NO_PARENTS), [{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\tparents: [],\n\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\tauthorName: 'John Doe',\n\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\trefNames: ['main'],\n\t\t\t\tshortStat: undefined\n\t\t\t}]);\n\t\t});\n\n\t\ttest('commit with shortstat', function () {\n\t\t\tconst GIT_OUTPUT_SINGLE_PARENT =\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385554\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is a commit message.\\x00\\n' +\n\t\t\t\t' 1 file changed, 2 insertions(+), 3 deletion(-)';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_SINGLE_PARENT), [{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385554'],\n\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\tauthorName: 'John Doe',\n\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\tshortStat: {\n\t\t\t\t\tdeletions: 3,\n\t\t\t\t\tfiles: 1,\n\t\t\t\t\tinsertions: 2\n\t\t\t\t}\n\t\t\t}]);\n\t\t});\n\n\t\ttest('commit with shortstat (no insertions)', function () {\n\t\t\tconst GIT_OUTPUT_SINGLE_PARENT =\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385554\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is a commit message.\\x00\\n' +\n\t\t\t\t' 1 file changed, 3 deletion(-)';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_SINGLE_PARENT), [{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385554'],\n\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\tauthorName: 'John Doe',\n\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\tshortStat: {\n\t\t\t\t\tdeletions: 3,\n\t\t\t\t\tfiles: 1,\n\t\t\t\t\tinsertions: 0\n\t\t\t\t}\n\t\t\t}]);\n\t\t});\n\n\t\ttest('commit with shortstat (no deletions)', function () {\n\t\t\tconst GIT_OUTPUT_SINGLE_PARENT =\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385554\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is a commit message.\\x00\\n' +\n\t\t\t\t' 1 file changed, 2 insertions(+)';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_SINGLE_PARENT), [{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385554'],\n\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\tauthorName: 'John Doe',\n\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\tshortStat: {\n\t\t\t\t\tdeletions: 0,\n\t\t\t\t\tfiles: 1,\n\t\t\t\t\tinsertions: 2\n\t\t\t\t}\n\t\t\t}]);\n\t\t});\n\n\t\ttest('commit list', function () {\n\t\t\tconst GIT_OUTPUT_SINGLE_PARENT =\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385554\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is a commit message.\\x00\\n' +\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a2\\n' +\n\t\t\t\t'Jane Doe\\n' +\n\t\t\t\t'jane.doe@mail.com\\n' +\n\t\t\t\t'1580811032\\n' +\n\t\t\t\t'1580811033\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385555\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is another commit message.\\x00';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_SINGLE_PARENT), [\n\t\t\t\t{\n\t\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385554'],\n\t\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\t\tauthorName: 'John Doe',\n\t\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\t\tshortStat: undefined,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a2',\n\t\t\t\t\tmessage: 'This is another commit message.',\n\t\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385555'],\n\t\t\t\t\tauthorDate: new Date(1580811032000),\n\t\t\t\t\tauthorName: 'Jane Doe',\n\t\t\t\t\tauthorEmail: 'jane.doe@mail.com',\n\t\t\t\t\tcommitDate: new Date(1580811033000),\n\t\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\t\tshortStat: undefined,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\ttest('commit list with shortstat', function () {\n\t\t\tconst GIT_OUTPUT_SINGLE_PARENT = '52c293a05038d865604c2284aa8698bd087915a1\\n' +\n\t\t\t\t'John Doe\\n' +\n\t\t\t\t'john.doe@mail.com\\n' +\n\t\t\t\t'1580811030\\n' +\n\t\t\t\t'1580811031\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385554\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is a commit message.\\x00\\n' +\n\t\t\t\t' 5 file changed, 12 insertions(+), 13 deletion(-)\\n' +\n\t\t\t\t'52c293a05038d865604c2284aa8698bd087915a2\\n' +\n\t\t\t\t'Jane Doe\\n' +\n\t\t\t\t'jane.doe@mail.com\\n' +\n\t\t\t\t'1580811032\\n' +\n\t\t\t\t'1580811033\\n' +\n\t\t\t\t'8e5a374372b8393906c7e380dbb09349c5385555\\n' +\n\t\t\t\t'main,branch\\n' +\n\t\t\t\t'This is another commit message.\\x00\\n' +\n\t\t\t\t' 6 file changed, 22 insertions(+), 23 deletion(-)';\n\n\t\t\tassert.deepStrictEqual(parseGitCommits(GIT_OUTPUT_SINGLE_PARENT), [{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a1',\n\t\t\t\tmessage: 'This is a commit message.',\n\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385554'],\n\t\t\t\tauthorDate: new Date(1580811030000),\n\t\t\t\tauthorName: 'John Doe',\n\t\t\t\tauthorEmail: 'john.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811031000),\n\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\tshortStat: {\n\t\t\t\t\tdeletions: 13,\n\t\t\t\t\tfiles: 5,\n\t\t\t\t\tinsertions: 12\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\thash: '52c293a05038d865604c2284aa8698bd087915a2',\n\t\t\t\tmessage: 'This is another commit message.',\n\t\t\t\tparents: ['8e5a374372b8393906c7e380dbb09349c5385555'],\n\t\t\t\tauthorDate: new Date(1580811032000),\n\t\t\t\tauthorName: 'Jane Doe',\n\t\t\t\tauthorEmail: 'jane.doe@mail.com',\n\t\t\t\tcommitDate: new Date(1580811033000),\n\t\t\t\trefNames: ['main', 'branch'],\n\t\t\t\tshortStat: {\n\t\t\t\t\tdeletions: 23,\n\t\t\t\t\tfiles: 6,\n\t\t\t\t\tinsertions: 22\n\t\t\t\t}\n\t\t\t}]);\n\t\t});\n\t});\n\n\tsuite('parseLsTree', function () {\n\t\ttest('sample', function () {\n\t\t\tconst input = `040000 tree 0274a81f8ee9ca3669295dc40f510bd2021d0043       -\t.vscode\n100644 blob 1d487c1817262e4f20efbfa1d04c18f51b0046f6  491570\tScreen Shot 2018-06-01 at 14.48.05.png\n100644 blob 686c16e4f019b734655a2576ce8b98749a9ffdb9  764420\tScreen Shot 2018-06-07 at 20.04.59.png\n100644 blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99       4\tboom.txt\n100644 blob 86dc360dd25f13fa50ffdc8259e9653921f4f2b7      11\tboomcaboom.txt\n100644 blob a68b14060589b16d7ac75f67b905c918c03c06eb      24\tfile.js\n100644 blob f7bcfb05af46850d780f88c069edcd57481d822d     201\tfile.md\n100644 blob ab8b86114a051f6490f1ec5e3141b9a632fb46b5       8\thello.js\n100644 blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99       4\twhat.js\n100644 blob be859e3f412fa86513cd8bebe8189d1ea1a3e46d      24\twhat.txt\n100644 blob 56ec42c9dc6fcf4534788f0fe34b36e09f37d085  261186\twhat.txt2`;\n\n\t\t\tconst output = parseLsTree(input);\n\n\t\t\tassert.deepStrictEqual(output, [\n\t\t\t\t{ mode: '040000', type: 'tree', object: '0274a81f8ee9ca3669295dc40f510bd2021d0043', size: '-', file: '.vscode' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: '1d487c1817262e4f20efbfa1d04c18f51b0046f6', size: '491570', file: 'Screen Shot 2018-06-01 at 14.48.05.png' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: '686c16e4f019b734655a2576ce8b98749a9ffdb9', size: '764420', file: 'Screen Shot 2018-06-07 at 20.04.59.png' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: '257cc5642cb1a054f08cc83f2d943e56fd3ebe99', size: '4', file: 'boom.txt' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: '86dc360dd25f13fa50ffdc8259e9653921f4f2b7', size: '11', file: 'boomcaboom.txt' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: 'a68b14060589b16d7ac75f67b905c918c03c06eb', size: '24', file: 'file.js' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: 'f7bcfb05af46850d780f88c069edcd57481d822d', size: '201', file: 'file.md' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: 'ab8b86114a051f6490f1ec5e3141b9a632fb46b5', size: '8', file: 'hello.js' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: '257cc5642cb1a054f08cc83f2d943e56fd3ebe99', size: '4', file: 'what.js' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: 'be859e3f412fa86513cd8bebe8189d1ea1a3e46d', size: '24', file: 'what.txt' },\n\t\t\t\t{ mode: '100644', type: 'blob', object: '56ec42c9dc6fcf4534788f0fe34b36e09f37d085', size: '261186', file: 'what.txt2' }\n\t\t\t]);\n\t\t});\n\t});\n\n\tsuite('parseLsFiles', function () {\n\t\ttest('sample', function () {\n\t\t\tconst input = `100644 7a73a41bfdf76d6f793007240d80983a52f15f97 0\t.vscode/settings.json\n100644 1d487c1817262e4f20efbfa1d04c18f51b0046f6 0\tScreen Shot 2018-06-01 at 14.48.05.png\n100644 686c16e4f019b734655a2576ce8b98749a9ffdb9 0\tScreen Shot 2018-06-07 at 20.04.59.png\n100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0\tboom.txt\n100644 86dc360dd25f13fa50ffdc8259e9653921f4f2b7 0\tboomcaboom.txt\n100644 a68b14060589b16d7ac75f67b905c918c03c06eb 0\tfile.js\n100644 f7bcfb05af46850d780f88c069edcd57481d822d 0\tfile.md\n100644 ab8b86114a051f6490f1ec5e3141b9a632fb46b5 0\thello.js\n100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0\twhat.js\n100644 be859e3f412fa86513cd8bebe8189d1ea1a3e46d 0\twhat.txt\n100644 56ec42c9dc6fcf4534788f0fe34b36e09f37d085 0\twhat.txt2`;\n\n\t\t\tconst output = parseLsFiles(input);\n\n\t\t\tassert.deepStrictEqual(output, [\n\t\t\t\t{ mode: '100644', object: '7a73a41bfdf76d6f793007240d80983a52f15f97', stage: '0', file: '.vscode/settings.json' },\n\t\t\t\t{ mode: '100644', object: '1d487c1817262e4f20efbfa1d04c18f51b0046f6', stage: '0', file: 'Screen Shot 2018-06-01 at 14.48.05.png' },\n\t\t\t\t{ mode: '100644', object: '686c16e4f019b734655a2576ce8b98749a9ffdb9', stage: '0', file: 'Screen Shot 2018-06-07 at 20.04.59.png' },\n\t\t\t\t{ mode: '100644', object: '257cc5642cb1a054f08cc83f2d943e56fd3ebe99', stage: '0', file: 'boom.txt' },\n\t\t\t\t{ mode: '100644', object: '86dc360dd25f13fa50ffdc8259e9653921f4f2b7', stage: '0', file: 'boomcaboom.txt' },\n\t\t\t\t{ mode: '100644', object: 'a68b14060589b16d7ac75f67b905c918c03c06eb', stage: '0', file: 'file.js' },\n\t\t\t\t{ mode: '100644', object: 'f7bcfb05af46850d780f88c069edcd57481d822d', stage: '0', file: 'file.md' },\n\t\t\t\t{ mode: '100644', object: 'ab8b86114a051f6490f1ec5e3141b9a632fb46b5', stage: '0', file: 'hello.js' },\n\t\t\t\t{ mode: '100644', object: '257cc5642cb1a054f08cc83f2d943e56fd3ebe99', stage: '0', file: 'what.js' },\n\t\t\t\t{ mode: '100644', object: 'be859e3f412fa86513cd8bebe8189d1ea1a3e46d', stage: '0', file: 'what.txt' },\n\t\t\t\t{ mode: '100644', object: '56ec42c9dc6fcf4534788f0fe34b36e09f37d085', stage: '0', file: 'what.txt2' },\n\t\t\t]);\n\t\t});\n\t});\n\n\tsuite('splitInChunks', () => {\n\t\ttest('unit tests', function () {\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['hello', 'there', 'cool', 'stuff'], 6)],\n\t\t\t\t[['hello'], ['there'], ['cool'], ['stuff']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['hello', 'there', 'cool', 'stuff'], 10)],\n\t\t\t\t[['hello', 'there'], ['cool', 'stuff']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['hello', 'there', 'cool', 'stuff'], 12)],\n\t\t\t\t[['hello', 'there'], ['cool', 'stuff']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['hello', 'there', 'cool', 'stuff'], 14)],\n\t\t\t\t[['hello', 'there', 'cool'], ['stuff']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['hello', 'there', 'cool', 'stuff'], 2000)],\n\t\t\t\t[['hello', 'there', 'cool', 'stuff']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 1)],\n\t\t\t\t[['0'], ['01'], ['012'], ['0'], ['01'], ['012'], ['0'], ['01'], ['012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 2)],\n\t\t\t\t[['0'], ['01'], ['012'], ['0'], ['01'], ['012'], ['0'], ['01'], ['012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 3)],\n\t\t\t\t[['0', '01'], ['012'], ['0', '01'], ['012'], ['0', '01'], ['012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 4)],\n\t\t\t\t[['0', '01'], ['012', '0'], ['01'], ['012', '0'], ['01'], ['012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 5)],\n\t\t\t\t[['0', '01'], ['012', '0'], ['01', '012'], ['0', '01'], ['012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 6)],\n\t\t\t\t[['0', '01', '012'], ['0', '01', '012'], ['0', '01', '012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 7)],\n\t\t\t\t[['0', '01', '012', '0'], ['01', '012', '0'], ['01', '012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 8)],\n\t\t\t\t[['0', '01', '012', '0'], ['01', '012', '0', '01'], ['012']]\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual(\n\t\t\t\t[...splitInChunks(['0', '01', '012', '0', '01', '012', '0', '01', '012'], 9)],\n\t\t\t\t[['0', '01', '012', '0', '01'], ['012', '0', '01', '012']]\n\t\t\t);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/git/src/test/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as testRunner from '../../../../test/integration/electron/testrunner';\n\nconst options: import('mocha').MochaOptions = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\n// These integration tests is being run in multiple environments (electron, web, remote)\n// so we need to set the suite name based on the environment as the suite name is used\n// for the test results file name\nlet suite = '';\nif (process.env.VSCODE_BROWSER) {\n\tsuite = `${process.env.VSCODE_BROWSER} Browser Integration Git Tests`;\n} else if (process.env.REMOTE_VSCODE) {\n\tsuite = 'Remote Integration Git Tests';\n} else {\n\tsuite = 'Integration Git Tests';\n}\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\ntestRunner.configure(options);\n\nexport = testRunner;\n"
  },
  {
    "path": "extensions/git/src/test/smoke.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport assert from 'assert';\nimport { workspace, commands, window, Uri, WorkspaceEdit, Range, TextDocument, extensions, TabInputTextDiff } from 'vscode';\nimport * as cp from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { GitExtension, API, Repository, Status } from '../api/git';\nimport { eventToPromise } from '../util';\n\nsuite('git smoke test', function () {\n\tconst cwd = fs.realpathSync(workspace.workspaceFolders![0].uri.fsPath);\n\n\tfunction file(relativePath: string) {\n\t\treturn path.join(cwd, relativePath);\n\t}\n\n\tfunction uri(relativePath: string) {\n\t\treturn Uri.file(file(relativePath));\n\t}\n\n\tasync function open(relativePath: string) {\n\t\tconst doc = await workspace.openTextDocument(uri(relativePath));\n\t\tawait window.showTextDocument(doc);\n\t\treturn doc;\n\t}\n\n\tasync function type(doc: TextDocument, text: string) {\n\t\tconst edit = new WorkspaceEdit();\n\t\tconst end = doc.lineAt(doc.lineCount - 1).range.end;\n\t\tedit.replace(doc.uri, new Range(end, end), text);\n\t\tawait workspace.applyEdit(edit);\n\t}\n\n\tlet git: API;\n\tlet repository: Repository;\n\n\tsuiteSetup(async function () {\n\t\tfs.writeFileSync(file('app.js'), 'hello', 'utf8');\n\t\tfs.writeFileSync(file('index.pug'), 'hello', 'utf8');\n\t\tcp.execSync('git init -b main', { cwd });\n\t\tcp.execSync('git config user.name testuser', { cwd });\n\t\tcp.execSync('git config user.email monacotools@example.com', { cwd });\n\t\tcp.execSync('git config commit.gpgsign false', { cwd });\n\t\tcp.execSync('git add .', { cwd });\n\t\tcp.execSync('git commit -m \"initial commit\"', { cwd });\n\n\t\t// make sure git is activated\n\t\tconst ext = extensions.getExtension<GitExtension>('vscode.git');\n\t\tawait ext?.activate();\n\t\tgit = ext!.exports.getAPI(1);\n\n\t\tif (git.repositories.length === 0) {\n\t\t\tconst onDidOpenRepository = eventToPromise(git.onDidOpenRepository);\n\t\t\tawait commands.executeCommand('git.openRepository', cwd);\n\t\t\tawait onDidOpenRepository;\n\t\t}\n\n\t\tassert.strictEqual(git.repositories.length, 1);\n\t\tassert.strictEqual(fs.realpathSync(git.repositories[0].rootUri.fsPath), cwd);\n\n\t\trepository = git.repositories[0];\n\t});\n\n\ttest('reflects working tree changes', async function () {\n\t\tawait commands.executeCommand('workbench.view.scm');\n\n\t\tconst appjs = await open('app.js');\n\t\tawait type(appjs, ' world');\n\t\tawait appjs.save();\n\t\tawait repository.status();\n\n\t\tassert.strictEqual(repository.state.workingTreeChanges.length, 1);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].uri.path, appjs.uri.path);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].status, Status.MODIFIED);\n\n\t\tfs.writeFileSync(file('newfile.txt'), '');\n\t\tconst newfile = await open('newfile.txt');\n\t\tawait type(newfile, 'hey there');\n\t\tawait newfile.save();\n\t\tawait repository.status();\n\n\t\tassert.strictEqual(repository.state.workingTreeChanges.length, 2);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].uri.path, appjs.uri.path);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].status, Status.MODIFIED);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[1].uri.path, newfile.uri.path);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[1].status, Status.UNTRACKED);\n\t});\n\n\ttest('opens diff editor', async function () {\n\t\tconst appjs = uri('app.js');\n\t\tawait commands.executeCommand('git.openChange', appjs);\n\n\t\tassert(window.activeTextEditor);\n\t\tassert.strictEqual(window.activeTextEditor!.document.uri.path, appjs.path);\n\n\t\tassert(window.tabGroups.activeTabGroup.activeTab);\n\t\tassert(window.tabGroups.activeTabGroup.activeTab!.input instanceof TabInputTextDiff);\n\t});\n\n\ttest('stages correctly', async function () {\n\t\tconst appjs = uri('app.js');\n\t\tconst newfile = uri('newfile.txt');\n\n\t\tawait repository.add([appjs.fsPath]);\n\n\t\tassert.strictEqual(repository.state.indexChanges.length, 1);\n\t\tassert.strictEqual(repository.state.indexChanges[0].uri.path, appjs.path);\n\t\tassert.strictEqual(repository.state.indexChanges[0].status, Status.INDEX_MODIFIED);\n\n\t\tassert.strictEqual(repository.state.workingTreeChanges.length, 1);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].uri.path, newfile.path);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].status, Status.UNTRACKED);\n\n\t\tawait repository.revert([appjs.fsPath]);\n\n\t\tassert.strictEqual(repository.state.indexChanges.length, 0);\n\n\t\tassert.strictEqual(repository.state.workingTreeChanges.length, 2);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].uri.path, appjs.path);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].status, Status.MODIFIED);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[1].uri.path, newfile.path);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[1].status, Status.UNTRACKED);\n\t});\n\n\ttest('stages, commits changes and verifies outgoing change', async function () {\n\t\tconst appjs = uri('app.js');\n\t\tconst newfile = uri('newfile.txt');\n\n\t\tawait repository.add([appjs.fsPath]);\n\t\tawait repository.commit('second commit');\n\n\t\tassert.strictEqual(repository.state.workingTreeChanges.length, 1);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].uri.path, newfile.path);\n\t\tassert.strictEqual(repository.state.workingTreeChanges[0].status, Status.UNTRACKED);\n\n\t\tassert.strictEqual(repository.state.indexChanges.length, 0);\n\n\t\tawait repository.commit('third commit', { all: true });\n\n\t\tassert.strictEqual(repository.state.workingTreeChanges.length, 0);\n\t\tassert.strictEqual(repository.state.indexChanges.length, 0);\n\t});\n\n\ttest('rename/delete conflict', async function () {\n\t\tawait commands.executeCommand('workbench.view.scm');\n\n\t\tconst appjs = file('app.js');\n\t\tconst renamejs = file('rename.js');\n\n\t\tawait repository.createBranch('test', true);\n\n\t\t// Delete file (test branch)\n\t\tfs.unlinkSync(appjs);\n\t\tawait repository.commit('commit on test', { all: true });\n\n\t\tawait repository.checkout('main');\n\n\t\t// Rename file (main branch)\n\t\tfs.renameSync(appjs, renamejs);\n\t\tawait repository.commit('commit on main', { all: true });\n\n\t\ttry {\n\t\t\tawait repository.merge('test');\n\t\t} catch (e) { }\n\n\t\tassert.strictEqual(repository.state.mergeChanges.length, 1);\n\t\tassert.strictEqual(repository.state.mergeChanges[0].status, Status.DELETED_BY_THEM);\n\n\t\tassert.strictEqual(repository.state.workingTreeChanges.length, 0);\n\t\tassert.strictEqual(repository.state.indexChanges.length, 0);\n\t});\n});\n"
  },
  {
    "path": "extensions/git/src/timelineProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationToken, ConfigurationChangeEvent, Disposable, env, Event, EventEmitter, MarkdownString, ThemeIcon, Timeline, TimelineChangeEvent, TimelineItem, TimelineOptions, TimelineProvider, Uri, workspace, l10n, Command } from 'vscode';\nimport { Model } from './model';\nimport { Repository, Resource } from './repository';\nimport { debounce } from './decorators';\nimport { emojify, ensureEmojis } from './emoji';\nimport { CommandCenter } from './commands';\nimport { OperationKind, OperationResult } from './operation';\nimport { getCommitShortHash } from './util';\nimport { CommitShortStat } from './git';\nimport { provideSourceControlHistoryItemAvatar, provideSourceControlHistoryItemHoverCommands, provideSourceControlHistoryItemMessageLinks } from './historyItemDetailsProvider';\nimport { AvatarQuery, AvatarQueryCommit } from './api/git';\n\nconst AVATAR_SIZE = 20;\n\nexport class GitTimelineItem extends TimelineItem {\n\tstatic is(item: TimelineItem): item is GitTimelineItem {\n\t\treturn item instanceof GitTimelineItem;\n\t}\n\n\treadonly ref: string;\n\treadonly previousRef: string;\n\treadonly message: string;\n\n\tconstructor(\n\t\tref: string,\n\t\tpreviousRef: string,\n\t\tmessage: string,\n\t\ttimestamp: number,\n\t\tid: string,\n\t\tcontextValue: string\n\t) {\n\t\tconst index = message.indexOf('\\n');\n\t\tconst label = index !== -1 ? `${message.substring(0, index)} \\u2026` : message;\n\n\t\tsuper(label, timestamp);\n\n\t\tthis.ref = ref;\n\t\tthis.previousRef = previousRef;\n\t\tthis.message = message;\n\t\tthis.id = id;\n\t\tthis.contextValue = contextValue;\n\t}\n\n\tget shortRef() {\n\t\treturn this.shortenRef(this.ref);\n\t}\n\n\tget shortPreviousRef() {\n\t\treturn this.shortenRef(this.previousRef);\n\t}\n\n\tsetItemDetails(uri: Uri, hash: string | undefined, avatar: string | undefined, author: string, email: string | undefined, date: string, message: string, shortStat?: CommitShortStat, remoteSourceCommands: Command[] = []): void {\n\t\tthis.tooltip = new MarkdownString('', true);\n\t\tthis.tooltip.isTrusted = true;\n\n\t\tconst avatarMarkdown = avatar\n\t\t\t? `![${author}](${avatar}|width=${AVATAR_SIZE},height=${AVATAR_SIZE})`\n\t\t\t: '$(account)';\n\n\t\tif (email) {\n\t\t\tconst emailTitle = l10n.t('Email');\n\t\t\tthis.tooltip.appendMarkdown(`${avatarMarkdown} [**${author}**](mailto:${email} \"${emailTitle} ${author}\")`);\n\t\t} else {\n\t\t\tthis.tooltip.appendMarkdown(`${avatarMarkdown} **${author}**`);\n\t\t}\n\n\t\tthis.tooltip.appendMarkdown(`, $(history) ${date}\\n\\n`);\n\t\tthis.tooltip.appendMarkdown(`${message}\\n\\n`);\n\n\t\tif (shortStat) {\n\t\t\tthis.tooltip.appendMarkdown(`---\\n\\n`);\n\n\t\t\tconst labels: string[] = [];\n\t\t\tif (shortStat.insertions) {\n\t\t\t\tlabels.push(`<span style=\"color:var(--vscode-scmGraph-historyItemHoverAdditionsForeground);\">${shortStat.insertions === 1 ?\n\t\t\t\t\tl10n.t('{0} insertion{1}', shortStat.insertions, '(+)') :\n\t\t\t\t\tl10n.t('{0} insertions{1}', shortStat.insertions, '(+)')}</span>`);\n\t\t\t}\n\n\t\t\tif (shortStat.deletions) {\n\t\t\t\tlabels.push(`<span style=\"color:var(--vscode-scmGraph-historyItemHoverDeletionsForeground);\">${shortStat.deletions === 1 ?\n\t\t\t\t\tl10n.t('{0} deletion{1}', shortStat.deletions, '(-)') :\n\t\t\t\t\tl10n.t('{0} deletions{1}', shortStat.deletions, '(-)')}</span>`);\n\t\t\t}\n\n\t\t\tthis.tooltip.appendMarkdown(`${labels.join(', ')}\\n\\n`);\n\t\t}\n\n\t\tif (hash) {\n\t\t\tthis.tooltip.appendMarkdown(`---\\n\\n`);\n\n\t\t\tthis.tooltip.appendMarkdown(`[\\`$(git-commit) ${getCommitShortHash(uri, hash)} \\`](command:git.viewCommit?${encodeURIComponent(JSON.stringify([uri, hash]))} \"${l10n.t('Open Commit')}\")`);\n\t\t\tthis.tooltip.appendMarkdown('&nbsp;');\n\t\t\tthis.tooltip.appendMarkdown(`[$(copy)](command:git.copyContentToClipboard?${encodeURIComponent(JSON.stringify(hash))} \"${l10n.t('Copy Commit Hash')}\")`);\n\n\t\t\t// Remote commands\n\t\t\tif (remoteSourceCommands.length > 0) {\n\t\t\t\tthis.tooltip.appendMarkdown('&nbsp;&nbsp;|&nbsp;&nbsp;');\n\n\t\t\t\tconst remoteCommandsMarkdown = remoteSourceCommands\n\t\t\t\t\t.map(command => `[${command.title}](command:${command.command}?${encodeURIComponent(JSON.stringify([...command.arguments ?? [], hash]))} \"${command.tooltip}\")`);\n\t\t\t\tthis.tooltip.appendMarkdown(remoteCommandsMarkdown.join('&nbsp;'));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate shortenRef(ref: string): string {\n\t\tif (ref === '' || ref === '~' || ref === 'HEAD') {\n\t\t\treturn ref;\n\t\t}\n\t\treturn ref.endsWith('^') ? `${ref.substr(0, 8)}^` : ref.substr(0, 8);\n\t}\n}\n\nexport class GitTimelineProvider implements TimelineProvider {\n\tprivate _onDidChange = new EventEmitter<TimelineChangeEvent | undefined>();\n\tget onDidChange(): Event<TimelineChangeEvent | undefined> {\n\t\treturn this._onDidChange.event;\n\t}\n\n\treadonly id = 'git-history';\n\treadonly label = l10n.t('Git History');\n\n\tprivate readonly disposable: Disposable;\n\tprivate providerDisposable: Disposable | undefined;\n\n\tprivate repo: Repository | undefined;\n\tprivate repoDisposable: Disposable | undefined;\n\tprivate repoOperationDate: Date | undefined;\n\n\tconstructor(private readonly model: Model, private commands: CommandCenter) {\n\t\tthis.disposable = Disposable.from(\n\t\t\tmodel.onDidOpenRepository(this.onRepositoriesChanged, this),\n\t\t\tworkspace.onDidChangeConfiguration(this.onConfigurationChanged, this)\n\t\t);\n\n\t\tif (model.repositories.length) {\n\t\t\tthis.ensureProviderRegistration();\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.providerDisposable?.dispose();\n\t\tthis.disposable.dispose();\n\t}\n\n\tasync provideTimeline(uri: Uri, options: TimelineOptions, _token: CancellationToken): Promise<Timeline> {\n\t\t// console.log(`GitTimelineProvider.provideTimeline: uri=${uri}`);\n\n\t\tconst repo = this.model.getRepository(uri);\n\t\tif (!repo) {\n\t\t\tthis.repoDisposable?.dispose();\n\t\t\tthis.repoOperationDate = undefined;\n\t\t\tthis.repo = undefined;\n\n\t\t\treturn { items: [] };\n\t\t}\n\n\t\tif (this.repo?.root !== repo.root) {\n\t\t\tthis.repoDisposable?.dispose();\n\n\t\t\tthis.repo = repo;\n\t\t\tthis.repoOperationDate = new Date();\n\t\t\tthis.repoDisposable = Disposable.from(\n\t\t\t\trepo.onDidChangeRepository(uri => this.onRepositoryChanged(repo, uri)),\n\t\t\t\trepo.onDidRunGitStatus(() => this.onRepositoryStatusChanged(repo)),\n\t\t\t\trepo.onDidRunOperation(result => this.onRepositoryOperationRun(repo, result))\n\t\t\t);\n\t\t}\n\n\t\tconst config = workspace.getConfiguration('git.timeline');\n\n\t\t// TODO@eamodio: Ensure that the uri is a file -- if not we could get the history of the repo?\n\n\t\tlet limit: number | undefined;\n\t\tif (options.limit !== undefined && typeof options.limit !== 'number') {\n\t\t\ttry {\n\t\t\t\tconst result = await this.model.git.exec(repo.root, ['rev-list', '--count', `${options.limit.id}..`, '--', uri.fsPath]);\n\t\t\t\tif (!result.exitCode) {\n\t\t\t\t\t// Ask for 2 more (1 for the limit commit and 1 for the next commit) than so we can determine if there are more commits\n\t\t\t\t\tlimit = Number(result.stdout) + 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\tlimit = undefined;\n\t\t\t}\n\t\t} else {\n\t\t\t// If we are not getting everything, ask for 1 more than so we can determine if there are more commits\n\t\t\tlimit = options.limit === undefined ? undefined : options.limit + 1;\n\t\t}\n\n\t\tawait ensureEmojis();\n\n\t\tconst commits = await repo.logFile(uri, {\n\t\t\tmaxEntries: limit,\n\t\t\thash: options.cursor,\n\t\t\tfollow: true,\n\t\t\tshortStats: true,\n\t\t\t// sortByAuthorDate: true\n\t\t});\n\n\t\tconst paging = commits.length ? {\n\t\t\tcursor: limit === undefined ? undefined : (commits.length >= limit ? commits[commits.length - 1]?.hash : undefined)\n\t\t} : undefined;\n\n\t\t// If we asked for an extra commit, strip it off\n\t\tif (limit !== undefined && commits.length >= limit) {\n\t\t\tcommits.splice(commits.length - 1, 1);\n\t\t}\n\n\t\tconst dateFormatter = new Intl.DateTimeFormat(env.language, { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' });\n\n\t\tconst dateType = config.get<'committed' | 'authored'>('date');\n\t\tconst showAuthor = config.get<boolean>('showAuthor');\n\t\tconst showUncommitted = config.get<boolean>('showUncommitted');\n\n\t\tconst openComparison = l10n.t('Open Comparison');\n\n\t\tconst emptyTree = await repo.getEmptyTree();\n\t\tconst unpublishedCommits = await repo.getUnpublishedCommits();\n\t\tconst remoteHoverCommands = await provideSourceControlHistoryItemHoverCommands(this.model, repo);\n\n\t\tconst avatarQuery = {\n\t\t\tcommits: commits.map(c => ({\n\t\t\t\thash: c.hash,\n\t\t\t\tauthorName: c.authorName,\n\t\t\t\tauthorEmail: c.authorEmail\n\t\t\t}) satisfies AvatarQueryCommit),\n\t\t\tsize: 20\n\t\t} satisfies AvatarQuery;\n\t\tconst avatars = await provideSourceControlHistoryItemAvatar(this.model, repo, avatarQuery);\n\n\t\tconst items: GitTimelineItem[] = [];\n\t\tfor (let index = 0; index < commits.length; index++) {\n\t\t\tconst c = commits[index];\n\n\t\t\tconst date = dateType === 'authored' ? c.authorDate : c.commitDate;\n\n\t\t\tconst message = emojify(c.message);\n\n\t\t\tconst previousRef = commits[index + 1]?.hash ?? emptyTree;\n\t\t\tconst item = new GitTimelineItem(c.hash, previousRef, message, date?.getTime() ?? 0, c.hash, 'git:file:commit');\n\t\t\titem.iconPath = new ThemeIcon('git-commit');\n\t\t\tif (showAuthor) {\n\t\t\t\titem.description = c.authorName;\n\t\t\t}\n\n\t\t\tconst commitRemoteSourceCommands = !unpublishedCommits.has(c.hash) ? remoteHoverCommands : [];\n\t\t\tconst messageWithLinks = await provideSourceControlHistoryItemMessageLinks(this.model, repo, message) ?? message;\n\n\t\t\titem.setItemDetails(uri, c.hash, avatars?.get(c.hash), c.authorName!, c.authorEmail, dateFormatter.format(date), messageWithLinks, c.shortStat, commitRemoteSourceCommands);\n\n\t\t\tconst cmd = this.commands.resolveTimelineOpenDiffCommand(item, uri);\n\t\t\tif (cmd) {\n\t\t\t\titem.command = {\n\t\t\t\t\ttitle: openComparison,\n\t\t\t\t\tcommand: cmd.command,\n\t\t\t\t\targuments: cmd.arguments,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\titems.push(item);\n\t\t}\n\n\t\tif (options.cursor === undefined) {\n\t\t\tconst you = l10n.t('You');\n\n\t\t\tconst index = repo.indexGroup.resourceStates.find(r => r.resourceUri.fsPath === uri.fsPath);\n\t\t\tif (index) {\n\t\t\t\tconst date = this.repoOperationDate ?? new Date();\n\n\t\t\t\tconst item = new GitTimelineItem('~', 'HEAD', l10n.t('Staged Changes'), date.getTime(), 'index', 'git:file:index');\n\t\t\t\t// TODO@eamodio: Replace with a better icon -- reflecting its status maybe?\n\t\t\t\titem.iconPath = new ThemeIcon('git-commit');\n\t\t\t\titem.description = '';\n\t\t\t\titem.setItemDetails(uri, undefined, undefined, you, undefined, dateFormatter.format(date), Resource.getStatusText(index.type));\n\n\t\t\t\tconst cmd = this.commands.resolveTimelineOpenDiffCommand(item, uri);\n\t\t\t\tif (cmd) {\n\t\t\t\t\titem.command = {\n\t\t\t\t\t\ttitle: openComparison,\n\t\t\t\t\t\tcommand: cmd.command,\n\t\t\t\t\t\targuments: cmd.arguments,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\titems.splice(0, 0, item);\n\t\t\t}\n\n\t\t\tif (showUncommitted) {\n\t\t\t\tconst working = repo.workingTreeGroup.resourceStates.find(r => r.resourceUri.fsPath === uri.fsPath);\n\t\t\t\tif (working) {\n\t\t\t\t\tconst date = new Date();\n\n\t\t\t\t\tconst item = new GitTimelineItem('', index ? '~' : 'HEAD', l10n.t('Uncommitted Changes'), date.getTime(), 'working', 'git:file:working');\n\t\t\t\t\titem.iconPath = new ThemeIcon('circle-outline');\n\t\t\t\t\titem.description = '';\n\t\t\t\t\titem.setItemDetails(uri, undefined, undefined, you, undefined, dateFormatter.format(date), Resource.getStatusText(working.type));\n\n\t\t\t\t\tconst cmd = this.commands.resolveTimelineOpenDiffCommand(item, uri);\n\t\t\t\t\tif (cmd) {\n\t\t\t\t\t\titem.command = {\n\t\t\t\t\t\t\ttitle: openComparison,\n\t\t\t\t\t\t\tcommand: cmd.command,\n\t\t\t\t\t\t\targuments: cmd.arguments,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\titems.splice(0, 0, item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\titems: items,\n\t\t\tpaging: paging\n\t\t};\n\t}\n\n\tprivate ensureProviderRegistration() {\n\t\tif (this.providerDisposable === undefined) {\n\t\t\tthis.providerDisposable = workspace.registerTimelineProvider(['file', 'git', 'vscode-remote', 'vscode-local-history'], this);\n\t\t}\n\t}\n\n\tprivate onConfigurationChanged(e: ConfigurationChangeEvent) {\n\t\tif (e.affectsConfiguration('git.timeline.date') || e.affectsConfiguration('git.timeline.showAuthor') || e.affectsConfiguration('git.timeline.showUncommitted')) {\n\t\t\tthis.fireChanged();\n\t\t}\n\t}\n\n\tprivate onRepositoriesChanged(_repo: Repository) {\n\t\t// console.log(`GitTimelineProvider.onRepositoriesChanged`);\n\n\t\tthis.ensureProviderRegistration();\n\n\t\t// TODO@eamodio: Being naive for now and just always refreshing each time there is a new repository\n\t\tthis.fireChanged();\n\t}\n\n\tprivate onRepositoryChanged(_repo: Repository, _uri: Uri) {\n\t\t// console.log(`GitTimelineProvider.onRepositoryChanged: uri=${uri.toString(true)}`);\n\n\t\tthis.fireChanged();\n\t}\n\n\tprivate onRepositoryStatusChanged(_repo: Repository) {\n\t\t// console.log(`GitTimelineProvider.onRepositoryStatusChanged`);\n\n\t\tconst config = workspace.getConfiguration('git.timeline');\n\t\tconst showUncommitted = config.get<boolean>('showUncommitted') === true;\n\n\t\tif (showUncommitted) {\n\t\t\tthis.fireChanged();\n\t\t}\n\t}\n\n\tprivate onRepositoryOperationRun(_repo: Repository, _result: OperationResult) {\n\t\t// console.log(`GitTimelineProvider.onRepositoryOperationRun`);\n\n\t\t// Successful operations that are not read-only and not status operations\n\t\tif (!_result.error && !_result.operation.readOnly && _result.operation.kind !== OperationKind.Status) {\n\t\t\t// This is less than ideal, but for now just save the last time an\n\t\t\t// operation was run and use that as the timestamp for staged items\n\t\t\tthis.repoOperationDate = new Date();\n\n\t\t\tthis.fireChanged();\n\t\t}\n\t}\n\n\t@debounce(500)\n\tprivate fireChanged() {\n\t\tthis._onDidChange.fire(undefined);\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/typings/git-base.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command, Disposable, Event, ProviderResult } from 'vscode';\nexport { ProviderResult } from 'vscode';\n\nexport interface API {\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;\n\tgetRemoteSourceActions(url: string): Promise<RemoteSourceAction[]>;\n\tpickRemoteSource(options: PickRemoteSourceOptions): Promise<string | PickRemoteSourceResult | undefined>;\n}\n\nexport interface GitBaseExtension {\n\n\treadonly enabled: boolean;\n\treadonly onDidChangeEnablement: Event<boolean>;\n\n\t/**\n\t * Returns a specific API version.\n\t *\n\t * Throws error if git-base extension is disabled. You can listed to the\n\t * [GitBaseExtension.onDidChangeEnablement](#GitBaseExtension.onDidChangeEnablement)\n\t * event to know when the extension becomes enabled/disabled.\n\t *\n\t * @param version Version number.\n\t * @returns API instance\n\t */\n\tgetAPI(version: 1): API;\n}\n\nexport interface PickRemoteSourceOptions {\n\treadonly providerLabel?: (provider: RemoteSourceProvider) => string;\n\treadonly urlLabel?: string | ((url: string) => string);\n\treadonly providerName?: string;\n\treadonly title?: string;\n\treadonly placeholder?: string;\n\treadonly branch?: boolean; // then result is PickRemoteSourceResult\n\treadonly showRecentSources?: boolean;\n}\n\nexport interface PickRemoteSourceResult {\n\treadonly url: string;\n\treadonly branch?: string;\n}\n\nexport interface RemoteSourceAction {\n\treadonly label: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon: string;\n\trun(branch: string): void;\n}\n\nexport interface RemoteSource {\n\treadonly name: string;\n\treadonly description?: string;\n\treadonly detail?: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon?: string;\n\treadonly url: string | string[];\n}\n\nexport interface RecentRemoteSource extends RemoteSource {\n\treadonly timestamp: number;\n}\n\nexport interface RemoteSourceProvider {\n\treadonly name: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon?: string;\n\treadonly label?: string;\n\treadonly placeholder?: string;\n\treadonly supportsQuery?: boolean;\n\n\tgetBranches?(url: string): ProviderResult<string[]>;\n\tgetRemoteSourceActions?(url: string): ProviderResult<RemoteSourceAction[]>;\n\tgetRecentRemoteSources?(query?: string): ProviderResult<RecentRemoteSource[]>;\n\tgetRemoteSources(query?: string): ProviderResult<RemoteSource[]>;\n}\n"
  },
  {
    "path": "extensions/git/src/uri.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Uri } from 'vscode';\nimport { Change, Status } from './api/git';\n\nexport interface GitUriParams {\n\tpath: string;\n\tref: string;\n\tsubmoduleOf?: string;\n}\n\nexport function isGitUri(uri: Uri): boolean {\n\treturn /^git$/.test(uri.scheme);\n}\n\nexport function fromGitUri(uri: Uri): GitUriParams {\n\treturn JSON.parse(uri.query);\n}\n\nexport interface GitUriOptions {\n\tscheme?: string;\n\treplaceFileExtension?: boolean;\n\tsubmoduleOf?: string;\n}\n\n// As a mitigation for extensions like ESLint showing warnings and errors\n// for git URIs, let's change the file extension of these uris to .git,\n// when `replaceFileExtension` is true.\nexport function toGitUri(uri: Uri, ref: string, options: GitUriOptions = {}): Uri {\n\tconst params: GitUriParams = {\n\t\tpath: uri.fsPath,\n\t\tref\n\t};\n\n\tif (options.submoduleOf) {\n\t\tparams.submoduleOf = options.submoduleOf;\n\t}\n\n\tlet path = uri.path;\n\n\tif (options.replaceFileExtension) {\n\t\tpath = `${path}.git`;\n\t} else if (options.submoduleOf) {\n\t\tpath = `${path}.diff`;\n\t}\n\n\treturn uri.with({ scheme: options.scheme ?? 'git', path, query: JSON.stringify(params) });\n}\n\n/**\n * Assuming `uri` is being merged it creates uris for `base`, `ours`, and `theirs`\n */\nexport function toMergeUris(uri: Uri): { base: Uri; ours: Uri; theirs: Uri } {\n\treturn {\n\t\tbase: toGitUri(uri, ':1'),\n\t\tours: toGitUri(uri, ':2'),\n\t\ttheirs: toGitUri(uri, ':3'),\n\t};\n}\n\nexport function toMultiFileDiffEditorUris(change: Change, originalRef: string, modifiedRef: string): { originalUri: Uri | undefined; modifiedUri: Uri | undefined } {\n\tswitch (change.status) {\n\t\tcase Status.INDEX_ADDED:\n\t\t\treturn {\n\t\t\t\toriginalUri: undefined,\n\t\t\t\tmodifiedUri: toGitUri(change.uri, modifiedRef)\n\t\t\t};\n\t\tcase Status.DELETED:\n\t\t\treturn {\n\t\t\t\toriginalUri: toGitUri(change.uri, originalRef),\n\t\t\t\tmodifiedUri: undefined\n\t\t\t};\n\t\tcase Status.INDEX_RENAMED:\n\t\t\treturn {\n\t\t\t\toriginalUri: toGitUri(change.originalUri, originalRef),\n\t\t\t\tmodifiedUri: toGitUri(change.uri, modifiedRef)\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\toriginalUri: toGitUri(change.uri, originalRef),\n\t\t\t\tmodifiedUri: toGitUri(change.uri, modifiedRef)\n\t\t\t};\n\t}\n}\n"
  },
  {
    "path": "extensions/git/src/util.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Event, Disposable, EventEmitter, SourceControlHistoryItemRef, l10n, workspace, Uri, DiagnosticSeverity, env } from 'vscode';\nimport { dirname, sep, relative } from 'path';\nimport { Readable } from 'stream';\nimport { promises as fs, createReadStream } from 'fs';\nimport byline from 'byline';\n\nexport const isMacintosh = process.platform === 'darwin';\nexport const isWindows = process.platform === 'win32';\nexport const isRemote = env.remoteName !== undefined;\nexport const isLinux = process.platform === 'linux';\nexport const isLinuxSnap = isLinux && !!process.env['SNAP'] && !!process.env['SNAP_REVISION'];\n\nexport function log(...args: any[]): void {\n\tconsole.log.apply(console, ['git:', ...args]);\n}\n\nexport interface IDisposable {\n\tdispose(): void;\n}\n\nexport function dispose<T extends IDisposable>(disposables: T[]): T[] {\n\tdisposables.forEach(d => d.dispose());\n\treturn [];\n}\n\nexport function toDisposable(dispose: () => void): IDisposable {\n\treturn { dispose };\n}\n\nexport function combinedDisposable(disposables: IDisposable[]): IDisposable {\n\treturn toDisposable(() => dispose(disposables));\n}\n\nexport const EmptyDisposable = toDisposable(() => null);\n\nexport function fireEvent<T>(event: Event<T>): Event<T> {\n\treturn (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => event(_ => (listener as any).call(thisArgs), null, disposables);\n}\n\nexport function mapEvent<I, O>(event: Event<I>, map: (i: I) => O): Event<O> {\n\treturn (listener: (e: O) => any, thisArgs?: any, disposables?: Disposable[]) => event(i => listener.call(thisArgs, map(i)), null, disposables);\n}\n\nexport function filterEvent<T>(event: Event<T>, filter: (e: T) => boolean): Event<T> {\n\treturn (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables);\n}\n\nexport function runAndSubscribeEvent<T>(event: Event<T>, handler: (e: T) => any, initial: T): IDisposable;\nexport function runAndSubscribeEvent<T>(event: Event<T>, handler: (e: T | undefined) => any): IDisposable;\nexport function runAndSubscribeEvent<T>(event: Event<T>, handler: (e: T | undefined) => any, initial?: T): IDisposable {\n\thandler(initial);\n\treturn event(e => handler(e));\n}\n\nexport function anyEvent<T>(...events: Event<T>[]): Event<T> {\n\treturn (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => {\n\t\tconst result = combinedDisposable(events.map(event => event(i => listener.call(thisArgs, i))));\n\n\t\tdisposables?.push(result);\n\n\t\treturn result;\n\t};\n}\n\nexport function done<T>(promise: Promise<T>): Promise<void> {\n\treturn promise.then<void>(() => undefined);\n}\n\nexport function onceEvent<T>(event: Event<T>): Event<T> {\n\treturn (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => {\n\t\tconst result = event(e => {\n\t\t\tresult.dispose();\n\t\t\treturn listener.call(thisArgs, e);\n\t\t}, null, disposables);\n\n\t\treturn result;\n\t};\n}\n\nexport function debounceEvent<T>(event: Event<T>, delay: number): Event<T> {\n\treturn (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => {\n\t\tlet timer: NodeJS.Timeout;\n\t\treturn event(e => {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = setTimeout(() => listener.call(thisArgs, e), delay);\n\t\t}, null, disposables);\n\t};\n}\n\nexport function eventToPromise<T>(event: Event<T>): Promise<T> {\n\treturn new Promise<T>(c => onceEvent(event)(c));\n}\n\nexport function once(fn: (...args: any[]) => any): (...args: any[]) => any {\n\tconst didRun = false;\n\n\treturn (...args) => {\n\t\tif (didRun) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn fn(...args);\n\t};\n}\n\nexport function assign<T>(destination: T, ...sources: any[]): T {\n\tfor (const source of sources) {\n\t\tObject.keys(source).forEach(key => (destination as any)[key] = source[key]);\n\t}\n\n\treturn destination;\n}\n\nexport function uniqBy<T>(arr: T[], fn: (el: T) => string): T[] {\n\tconst seen = Object.create(null);\n\n\treturn arr.filter(el => {\n\t\tconst key = fn(el);\n\n\t\tif (seen[key]) {\n\t\t\treturn false;\n\t\t}\n\n\t\tseen[key] = true;\n\t\treturn true;\n\t});\n}\n\nexport function groupBy<T>(arr: T[], fn: (el: T) => string): { [key: string]: T[] } {\n\treturn arr.reduce((result, el) => {\n\t\tconst key = fn(el);\n\t\tresult[key] = [...(result[key] || []), el];\n\t\treturn result;\n\t}, Object.create(null));\n}\n\n\nexport async function mkdirp(path: string, mode?: number): Promise<boolean> {\n\tconst mkdir = async () => {\n\t\ttry {\n\t\t\tawait fs.mkdir(path, mode);\n\t\t} catch (err) {\n\t\t\tif (err.code === 'EEXIST') {\n\t\t\t\tconst stat = await fs.stat(path);\n\n\t\t\t\tif (stat.isDirectory()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error(`'${path}' exists and is not a directory.`);\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t};\n\n\t// is root?\n\tif (path === dirname(path)) {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tawait mkdir();\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tthrow err;\n\t\t}\n\n\t\tawait mkdirp(dirname(path), mode);\n\t\tawait mkdir();\n\t}\n\n\treturn true;\n}\n\nexport function uniqueFilter<T>(keyFn: (t: T) => string): (t: T) => boolean {\n\tconst seen: { [key: string]: boolean } = Object.create(null);\n\n\treturn element => {\n\t\tconst key = keyFn(element);\n\n\t\tif (seen[key]) {\n\t\t\treturn false;\n\t\t}\n\n\t\tseen[key] = true;\n\t\treturn true;\n\t};\n}\n\nexport function find<T>(array: T[], fn: (t: T) => boolean): T | undefined {\n\tlet result: T | undefined = undefined;\n\n\tarray.some(e => {\n\t\tif (fn(e)) {\n\t\t\tresult = e;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n\n\treturn result;\n}\n\nexport async function grep(filename: string, pattern: RegExp): Promise<boolean> {\n\treturn new Promise<boolean>((c, e) => {\n\t\tconst fileStream = createReadStream(filename, { encoding: 'utf8' });\n\t\tconst stream = byline(fileStream);\n\t\tstream.on('data', (line: string) => {\n\t\t\tif (pattern.test(line)) {\n\t\t\t\tfileStream.close();\n\t\t\t\tc(true);\n\t\t\t}\n\t\t});\n\n\t\tstream.on('error', e);\n\t\tstream.on('end', () => c(false));\n\t});\n}\n\nexport function readBytes(stream: Readable, bytes: number): Promise<Buffer> {\n\treturn new Promise<Buffer>((complete, error) => {\n\t\tlet done = false;\n\t\tconst buffer = Buffer.allocUnsafe(bytes);\n\t\tlet bytesRead = 0;\n\n\t\tstream.on('data', (data: Buffer) => {\n\t\t\tconst bytesToRead = Math.min(bytes - bytesRead, data.length);\n\t\t\tdata.copy(buffer, bytesRead, 0, bytesToRead);\n\t\t\tbytesRead += bytesToRead;\n\n\t\t\tif (bytesRead === bytes) {\n\t\t\t\t(stream as any).destroy(); // Will trigger the close event eventually\n\t\t\t}\n\t\t});\n\n\t\tstream.on('error', (e: Error) => {\n\t\t\tif (!done) {\n\t\t\t\tdone = true;\n\t\t\t\terror(e);\n\t\t\t}\n\t\t});\n\n\t\tstream.on('close', () => {\n\t\t\tif (!done) {\n\t\t\t\tdone = true;\n\t\t\t\tcomplete(buffer.slice(0, bytesRead));\n\t\t\t}\n\t\t});\n\t});\n}\n\nexport const enum Encoding {\n\tUTF8 = 'utf8',\n\tUTF16be = 'utf16be',\n\tUTF16le = 'utf16le'\n}\n\nexport function detectUnicodeEncoding(buffer: Buffer): Encoding | null {\n\tif (buffer.length < 2) {\n\t\treturn null;\n\t}\n\n\tconst b0 = buffer.readUInt8(0);\n\tconst b1 = buffer.readUInt8(1);\n\n\tif (b0 === 0xFE && b1 === 0xFF) {\n\t\treturn Encoding.UTF16be;\n\t}\n\n\tif (b0 === 0xFF && b1 === 0xFE) {\n\t\treturn Encoding.UTF16le;\n\t}\n\n\tif (buffer.length < 3) {\n\t\treturn null;\n\t}\n\n\tconst b2 = buffer.readUInt8(2);\n\n\tif (b0 === 0xEF && b1 === 0xBB && b2 === 0xBF) {\n\t\treturn Encoding.UTF8;\n\t}\n\n\treturn null;\n}\n\nexport function truncate(value: string, maxLength = 20): string {\n\treturn value.length <= maxLength ? value : `${value.substring(0, maxLength)}\\u2026`;\n}\n\nfunction normalizePath(path: string): string {\n\t// Windows & Mac are currently being handled\n\t// as case insensitive file systems in VS Code.\n\tif (isWindows || isMacintosh) {\n\t\treturn path.toLowerCase();\n\t}\n\n\treturn path;\n}\n\nexport function isDescendant(parent: string, descendant: string): boolean {\n\tif (parent === descendant) {\n\t\treturn true;\n\t}\n\n\tif (parent.charAt(parent.length - 1) !== sep) {\n\t\tparent += sep;\n\t}\n\n\treturn normalizePath(descendant).startsWith(normalizePath(parent));\n}\n\nexport function pathEquals(a: string, b: string): boolean {\n\treturn normalizePath(a) === normalizePath(b);\n}\n\n/**\n * Given the `repository.root` compute the relative path while trying to preserve\n * the casing of the resource URI. The `repository.root` segment of the path can\n * have a casing mismatch if the folder/workspace is being opened with incorrect\n * casing which is why we attempt to use substring() before relative().\n */\nexport function relativePath(from: string, to: string): string {\n\t// There are cases in which the `from` path may contain a trailing separator at\n\t// the end (ex: \"C:\\\", \"\\\\server\\folder\\\" (Windows) or \"/\" (Linux/macOS)) which\n\t// is by design as documented in https://github.com/nodejs/node/issues/1765. If\n\t// the trailing separator is missing, we add it.\n\tif (from.charAt(from.length - 1) !== sep) {\n\t\tfrom += sep;\n\t}\n\n\tif (isDescendant(from, to) && from.length < to.length) {\n\t\treturn to.substring(from.length);\n\t}\n\n\t// Fallback to `path.relative`\n\treturn relative(from, to);\n}\n\nexport function* splitInChunks(array: string[], maxChunkLength: number): IterableIterator<string[]> {\n\tlet current: string[] = [];\n\tlet length = 0;\n\n\tfor (const value of array) {\n\t\tlet newLength = length + value.length;\n\n\t\tif (newLength > maxChunkLength && current.length > 0) {\n\t\t\tyield current;\n\t\t\tcurrent = [];\n\t\t\tnewLength = value.length;\n\t\t}\n\n\t\tcurrent.push(value);\n\t\tlength = newLength;\n\t}\n\n\tif (current.length > 0) {\n\t\tyield current;\n\t}\n}\n\n/**\n * @returns whether the provided parameter is defined.\n */\nexport function isDefined<T>(arg: T | null | undefined): arg is T {\n\treturn !isUndefinedOrNull(arg);\n}\n\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj: unknown): obj is undefined | null {\n\treturn (isUndefined(obj) || obj === null);\n}\n\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj: unknown): obj is undefined {\n\treturn (typeof obj === 'undefined');\n}\n\ninterface ILimitedTaskFactory<T> {\n\tfactory: () => Promise<T>;\n\tc: (value: T | Promise<T>) => void;\n\te: (error?: any) => void;\n}\n\nexport class Limiter<T> {\n\n\tprivate runningPromises: number;\n\tprivate maxDegreeOfParalellism: number;\n\tprivate outstandingPromises: ILimitedTaskFactory<T>[];\n\n\tconstructor(maxDegreeOfParalellism: number) {\n\t\tthis.maxDegreeOfParalellism = maxDegreeOfParalellism;\n\t\tthis.outstandingPromises = [];\n\t\tthis.runningPromises = 0;\n\t}\n\n\tqueue(factory: () => Promise<T>): Promise<T> {\n\t\treturn new Promise<T>((c, e) => {\n\t\t\tthis.outstandingPromises.push({ factory, c, e });\n\t\t\tthis.consume();\n\t\t});\n\t}\n\n\tprivate consume(): void {\n\t\twhile (this.outstandingPromises.length && this.runningPromises < this.maxDegreeOfParalellism) {\n\t\t\tconst iLimitedTask = this.outstandingPromises.shift()!;\n\t\t\tthis.runningPromises++;\n\n\t\t\tconst promise = iLimitedTask.factory();\n\t\t\tpromise.then(iLimitedTask.c, iLimitedTask.e);\n\t\t\tpromise.then(() => this.consumed(), () => this.consumed());\n\t\t}\n\t}\n\n\tprivate consumed(): void {\n\t\tthis.runningPromises--;\n\n\t\tif (this.outstandingPromises.length > 0) {\n\t\t\tthis.consume();\n\t\t}\n\t}\n}\n\ntype Completion<T> = { success: true; value: T } | { success: false; err: any };\n\nexport class PromiseSource<T> {\n\n\tprivate _onDidComplete = new EventEmitter<Completion<T>>();\n\n\tprivate _promise: Promise<T> | undefined;\n\tget promise(): Promise<T> {\n\t\tif (this._promise) {\n\t\t\treturn this._promise;\n\t\t}\n\n\t\treturn eventToPromise(this._onDidComplete.event).then(completion => {\n\t\t\tif (completion.success) {\n\t\t\t\treturn completion.value;\n\t\t\t} else {\n\t\t\t\tthrow completion.err;\n\t\t\t}\n\t\t});\n\t}\n\n\tresolve(value: T): void {\n\t\tif (!this._promise) {\n\t\t\tthis._promise = Promise.resolve(value);\n\t\t\tthis._onDidComplete.fire({ success: true, value });\n\t\t}\n\t}\n\n\treject(err: any): void {\n\t\tif (!this._promise) {\n\t\t\tthis._promise = Promise.reject(err);\n\t\t\tthis._onDidComplete.fire({ success: false, err });\n\t\t}\n\t}\n}\n\nexport namespace Versions {\n\tdeclare type VersionComparisonResult = -1 | 0 | 1;\n\n\texport interface Version {\n\t\tmajor: number;\n\t\tminor: number;\n\t\tpatch: number;\n\t\tpre?: string;\n\t}\n\n\texport function compare(v1: string | Version, v2: string | Version): VersionComparisonResult {\n\t\tif (typeof v1 === 'string') {\n\t\t\tv1 = fromString(v1);\n\t\t}\n\t\tif (typeof v2 === 'string') {\n\t\t\tv2 = fromString(v2);\n\t\t}\n\n\t\tif (v1.major > v2.major) { return 1; }\n\t\tif (v1.major < v2.major) { return -1; }\n\n\t\tif (v1.minor > v2.minor) { return 1; }\n\t\tif (v1.minor < v2.minor) { return -1; }\n\n\t\tif (v1.patch > v2.patch) { return 1; }\n\t\tif (v1.patch < v2.patch) { return -1; }\n\n\t\tif (v1.pre === undefined && v2.pre !== undefined) { return 1; }\n\t\tif (v1.pre !== undefined && v2.pre === undefined) { return -1; }\n\n\t\tif (v1.pre !== undefined && v2.pre !== undefined) {\n\t\t\treturn v1.pre.localeCompare(v2.pre) as VersionComparisonResult;\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\texport function from(major: string | number, minor: string | number, patch?: string | number, pre?: string): Version {\n\t\treturn {\n\t\t\tmajor: typeof major === 'string' ? parseInt(major, 10) : major,\n\t\t\tminor: typeof minor === 'string' ? parseInt(minor, 10) : minor,\n\t\t\tpatch: patch === undefined || patch === null ? 0 : typeof patch === 'string' ? parseInt(patch, 10) : patch,\n\t\t\tpre: pre,\n\t\t};\n\t}\n\n\texport function fromString(version: string): Version {\n\t\tconst [ver, pre] = version.split('-');\n\t\tconst [major, minor, patch] = ver.split('.');\n\t\treturn from(major, minor, patch, pre);\n\t}\n}\n\nexport function deltaHistoryItemRefs(before: SourceControlHistoryItemRef[], after: SourceControlHistoryItemRef[]): {\n\tadded: SourceControlHistoryItemRef[];\n\tmodified: SourceControlHistoryItemRef[];\n\tremoved: SourceControlHistoryItemRef[];\n} {\n\tif (before.length === 0) {\n\t\treturn { added: after, modified: [], removed: [] };\n\t}\n\n\tconst added: SourceControlHistoryItemRef[] = [];\n\tconst modified: SourceControlHistoryItemRef[] = [];\n\tconst removed: SourceControlHistoryItemRef[] = [];\n\n\tlet beforeIdx = 0;\n\tlet afterIdx = 0;\n\n\twhile (true) {\n\t\tif (beforeIdx === before.length) {\n\t\t\tadded.push(...after.slice(afterIdx));\n\t\t\tbreak;\n\t\t}\n\t\tif (afterIdx === after.length) {\n\t\t\tremoved.push(...before.slice(beforeIdx));\n\t\t\tbreak;\n\t\t}\n\n\t\tconst beforeElement = before[beforeIdx];\n\t\tconst afterElement = after[afterIdx];\n\n\t\tconst result = beforeElement.id.localeCompare(afterElement.id);\n\n\t\tif (result === 0) {\n\t\t\tif (beforeElement.revision !== afterElement.revision) {\n\t\t\t\t// modified\n\t\t\t\tmodified.push(afterElement);\n\t\t\t}\n\n\t\t\tbeforeIdx += 1;\n\t\t\tafterIdx += 1;\n\t\t} else if (result < 0) {\n\t\t\t// beforeElement is smaller -> before element removed\n\t\t\tremoved.push(beforeElement);\n\n\t\t\tbeforeIdx += 1;\n\t\t} else if (result > 0) {\n\t\t\t// beforeElement is greater -> after element added\n\t\t\tadded.push(afterElement);\n\n\t\t\tafterIdx += 1;\n\t\t}\n\t}\n\n\treturn { added, modified, removed };\n}\n\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst month = day * 30;\nconst year = day * 365;\n\n/**\n * Create a l10n.td difference of the time between now and the specified date.\n * @param date The date to generate the difference from.\n * @param appendAgoLabel Whether to append the \" ago\" to the end.\n * @param useFullTimeWords Whether to use full words (eg. seconds) instead of\n * shortened (eg. secs).\n * @param disallowNow Whether to disallow the string \"now\" when the difference\n * is less than 30 seconds.\n */\nexport function fromNow(date: number | Date, appendAgoLabel?: boolean, useFullTimeWords?: boolean, disallowNow?: boolean): string {\n\tif (typeof date !== 'number') {\n\t\tdate = date.getTime();\n\t}\n\n\tconst seconds = Math.round((new Date().getTime() - date) / 1000);\n\tif (seconds < -30) {\n\t\treturn l10n.t('in {0}', fromNow(new Date().getTime() + seconds * 1000, false));\n\t}\n\n\tif (!disallowNow && seconds < 30) {\n\t\treturn l10n.t('now');\n\t}\n\n\tlet value: number;\n\tif (seconds < minute) {\n\t\tvalue = seconds;\n\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} second ago', value)\n\t\t\t\t\t: l10n.t('{0} sec ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} seconds ago', value)\n\t\t\t\t\t: l10n.t('{0} secs ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} second', value)\n\t\t\t\t\t: l10n.t('{0} sec', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} seconds', value)\n\t\t\t\t\t: l10n.t('{0} secs', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < hour) {\n\t\tvalue = Math.floor(seconds / minute);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minute ago', value)\n\t\t\t\t\t: l10n.t('{0} min ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minutes ago', value)\n\t\t\t\t\t: l10n.t('{0} mins ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minute', value)\n\t\t\t\t\t: l10n.t('{0} min', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minutes', value)\n\t\t\t\t\t: l10n.t('{0} mins', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < day) {\n\t\tvalue = Math.floor(seconds / hour);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hour ago', value)\n\t\t\t\t\t: l10n.t('{0} hr ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hours ago', value)\n\t\t\t\t\t: l10n.t('{0} hrs ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hour', value)\n\t\t\t\t\t: l10n.t('{0} hr', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hours', value)\n\t\t\t\t\t: l10n.t('{0} hrs', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < week) {\n\t\tvalue = Math.floor(seconds / day);\n\t\tif (appendAgoLabel) {\n\t\t\treturn value === 1\n\t\t\t\t? l10n.t('{0} day ago', value)\n\t\t\t\t: l10n.t('{0} days ago', value);\n\t\t} else {\n\t\t\treturn value === 1\n\t\t\t\t? l10n.t('{0} day', value)\n\t\t\t\t: l10n.t('{0} days', value);\n\t\t}\n\t}\n\n\tif (seconds < month) {\n\t\tvalue = Math.floor(seconds / week);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} week ago', value)\n\t\t\t\t\t: l10n.t('{0} wk ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} weeks ago', value)\n\t\t\t\t\t: l10n.t('{0} wks ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} week', value)\n\t\t\t\t\t: l10n.t('{0} wk', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} weeks', value)\n\t\t\t\t\t: l10n.t('{0} wks', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < year) {\n\t\tvalue = Math.floor(seconds / month);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} month ago', value)\n\t\t\t\t\t: l10n.t('{0} mo ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} months ago', value)\n\t\t\t\t\t: l10n.t('{0} mos ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} month', value)\n\t\t\t\t\t: l10n.t('{0} mo', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} months', value)\n\t\t\t\t\t: l10n.t('{0} mos', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tvalue = Math.floor(seconds / year);\n\tif (appendAgoLabel) {\n\t\tif (value === 1) {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} year ago', value)\n\t\t\t\t: l10n.t('{0} yr ago', value);\n\t\t} else {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} years ago', value)\n\t\t\t\t: l10n.t('{0} yrs ago', value);\n\t\t}\n\t} else {\n\t\tif (value === 1) {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} year', value)\n\t\t\t\t: l10n.t('{0} yr', value);\n\t\t} else {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} years', value)\n\t\t\t\t: l10n.t('{0} yrs', value);\n\t\t}\n\t}\n}\n\nexport function getCommitShortHash(scope: Uri, hash: string): string {\n\tconst config = workspace.getConfiguration('git', scope);\n\tconst shortHashLength = config.get<number>('commitShortHashLength', 7);\n\treturn hash.substring(0, shortHashLength);\n}\n\nexport type DiagnosticSeverityConfig = 'error' | 'warning' | 'information' | 'hint' | 'none';\n\nexport function toDiagnosticSeverity(value: DiagnosticSeverityConfig): DiagnosticSeverity {\n\treturn value === 'error'\n\t\t? DiagnosticSeverity.Error\n\t\t: value === 'warning'\n\t\t\t? DiagnosticSeverity.Warning\n\t\t\t: value === 'information'\n\t\t\t\t? DiagnosticSeverity.Information\n\t\t\t\t: DiagnosticSeverity.Hint;\n}\n"
  },
  {
    "path": "extensions/git/src/watch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Event, RelativePattern, Uri, workspace } from 'vscode';\nimport { IDisposable, anyEvent } from './util';\n\nexport interface IFileWatcher extends IDisposable {\n\treadonly event: Event<Uri>;\n}\n\nexport function watch(location: string): IFileWatcher {\n\tconst watcher = workspace.createFileSystemWatcher(new RelativePattern(location, '*'));\n\n\treturn new class implements IFileWatcher {\n\t\tevent = anyEvent(watcher.onDidCreate, watcher.onDidChange, watcher.onDidDelete);\n\t\tdispose() {\n\t\t\twatcher.dispose();\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/git/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"experimentalDecorators\": true,\n\t\t\"typeRoots\": [\n\t\t\t\"./node_modules/@types\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.canonicalUriProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.editSessionIdentityProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.quickDiffProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.quickInputButtonLocation.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.quickPickSortByLabel.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.scmActionButton.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.scmSelectedProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.scmValidation.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.scmMultiDiffEditor.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.scmTextDocument.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.statusBarItemTooltip.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.tabInputMultiDiff.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.tabInputTextMerge.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.textDocumentEncoding.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.textEditorDiffInformation.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.timeline.d.ts\",\n\t\t\"../types/lib.textEncoder.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/git-base/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/git-base/.vscodeignore",
    "content": "src/**\nbuild/**\ncgmanifest.json\nextension.webpack.config.js\nextension-browser.webpack.config.js\ntsconfig.json\n\n"
  },
  {
    "path": "extensions/git-base/README.md",
    "content": "# Git static contributions and remote repository picker\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nGit static contributions and remote repository picker.\n\n## API\n\nThe Git extension exposes an API, reachable by any other extension.\n\n1. Copy `src/api/git-base.d.ts` to your extension's sources;\n2. Include `git-base.d.ts` in your extension's compilation.\n3. Get a hold of the API with the following snippet:\n\n ```ts\n const gitBaseExtension = vscode.extensions.getExtension<GitBaseExtension>('vscode.git-base').exports;\n const git = gitBaseExtension.getAPI(1);\n\n ```\n"
  },
  {
    "path": "extensions/git-base/build/update-grammars.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nvar updateGrammar = require('vscode-grammar-updater');\n\nupdateGrammar.update('walles/git-commit-message-plus', 'syntaxes/git-commit.tmLanguage.json', './syntaxes/git-commit.tmLanguage.json', undefined, 'main');\nupdateGrammar.update('textmate/git.tmbundle', 'Syntaxes/Git%20Rebase%20Message.tmLanguage', './syntaxes/git-rebase.tmLanguage.json');\n"
  },
  {
    "path": "extensions/git-base/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/git.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/git.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"5870cf3f8abad3a6637bdf69250b5d2ded427dc4\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) 2008 Tim Harper\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining\",\n\t\t\t\t\"a copy of this software and associated documentation files (the\\\"\",\n\t\t\t\t\"Software\\\"), to deal in the Software without restriction, including\",\n\t\t\t\t\"without limitation the rights to use, copy, modify, merge, publish,\",\n\t\t\t\t\"distribute, sublicense, and/or sell copies of the Software, and to\",\n\t\t\t\t\"permit persons to whom the Software is furnished to do so, subject to\",\n\t\t\t\t\"the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be\",\n\t\t\t\t\"included in all copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\",\n\t\t\t\t\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\",\n\t\t\t\t\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\",\n\t\t\t\t\"NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\",\n\t\t\t\t\"LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\",\n\t\t\t\t\"OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\",\n\t\t\t\t\"WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t\t],\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"walles/git-commit-message-plus\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/walles/git-commit-message-plus\",\n\t\t\t\t\t\"commitHash\": \"35a079dea5a91b087021b40c01a6bb4eb0337a87\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) 2023 Johan Walles <johan.walles@gmail.com>\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining\",\n\t\t\t\t\"a copy of this software and associated documentation files (the\\\"\",\n\t\t\t\t\"Software\\\"), to deal in the Software without restriction, including\",\n\t\t\t\t\"without limitation the rights to use, copy, modify, merge, publish,\",\n\t\t\t\t\"distribute, sublicense, and/or sell copies of the Software, and to\",\n\t\t\t\t\"permit persons to whom the Software is furnished to do so, subject to\",\n\t\t\t\t\"the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be\",\n\t\t\t\t\"included in all copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\",\n\t\t\t\t\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\",\n\t\t\t\t\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\",\n\t\t\t\t\"NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\",\n\t\t\t\t\"LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\",\n\t\t\t\t\"OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\",\n\t\t\t\t\"WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t\t],\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"description\": \"The original JSON grammars were derived from https://github.com/microsoft/vscode/blob/e95c74c4c7af876e79ec58df262464467c06df28/extensions/git-base/syntaxes/git-commit.tmLanguage.json. That file was originally copied from https://github.com/textmate/git.tmbundle.\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/git-base/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t},\n\toutput: {\n\t\tfilename: 'extension.js'\n\t}\n});\n"
  },
  {
    "path": "extensions/git-base/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t},\n\toutput: {\n\t\tfilename: 'extension.js'\n\t}\n});\n"
  },
  {
    "path": "extensions/git-base/languages/git-commit.language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"#\", \" \" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\" },\n\t\t{ \"open\": \"[\", \"close\": \"]\" },\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"/**\", \"close\": \" */\", \"notIn\": [\"string\"] }\n\t]\n}\n"
  },
  {
    "path": "extensions/git-base/languages/git-rebase.language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"#\", \" \" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\" },\n\t\t{ \"open\": \"[\", \"close\": \"]\" },\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"/**\", \"close\": \" */\", \"notIn\": [\"string\"] }\n\t]\n}\n"
  },
  {
    "path": "extensions/git-base/languages/ignore.language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t},\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\" },\n\t\t{ \"open\": \"[\", \"close\": \"]\" },\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"/**\", \"close\": \" */\", \"notIn\": [\"string\"] }\n\t]\n}\n"
  },
  {
    "path": "extensions/git-base/package.json",
    "content": "{\n  \"name\": \"git-base\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"categories\": [\n    \"Other\"\n  ],\n  \"activationEvents\": [\n    \"*\"\n  ],\n  \"main\": \"./out/extension.js\",\n  \"browser\": \"./dist/browser/extension.js\",\n  \"icon\": \"resources/icons/git.png\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:git-base\",\n    \"watch\": \"gulp watch-extension:git-base\",\n    \"update-grammar\": \"node ./build/update-grammars.js\"\n  },\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"command\": \"git-base.api.getRemoteSources\",\n        \"title\": \"%command.api.getRemoteSources%\",\n        \"category\": \"Git Base API\"\n      }\n    ],\n    \"menus\": {\n      \"commandPalette\": [\n        {\n          \"command\": \"git-base.api.getRemoteSources\",\n          \"when\": \"false\"\n        }\n      ]\n    },\n    \"languages\": [\n      {\n        \"id\": \"git-commit\",\n        \"aliases\": [\n          \"Git Commit Message\",\n          \"git-commit\"\n        ],\n        \"filenames\": [\n          \"COMMIT_EDITMSG\",\n          \"MERGE_MSG\"\n        ],\n        \"configuration\": \"./languages/git-commit.language-configuration.json\"\n      },\n      {\n        \"id\": \"git-rebase\",\n        \"aliases\": [\n          \"Git Rebase Message\",\n          \"git-rebase\"\n        ],\n        \"filenames\": [\n          \"git-rebase-todo\"\n        ],\n        \"filenamePatterns\": [\n          \"**/rebase-merge/done\"\n        ],\n        \"configuration\": \"./languages/git-rebase.language-configuration.json\"\n      },\n      {\n        \"id\": \"ignore\",\n        \"aliases\": [\n          \"Ignore\",\n          \"ignore\"\n        ],\n        \"extensions\": [\n          \".gitignore_global\",\n          \".gitignore\",\n          \".git-blame-ignore-revs\"\n        ],\n        \"configuration\": \"./languages/ignore.language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"git-commit\",\n        \"scopeName\": \"text.git-commit\",\n        \"path\": \"./syntaxes/git-commit.tmLanguage.json\"\n      },\n      {\n        \"language\": \"git-rebase\",\n        \"scopeName\": \"text.git-rebase\",\n        \"path\": \"./syntaxes/git-rebase.tmLanguage.json\"\n      },\n      {\n        \"language\": \"ignore\",\n        \"scopeName\": \"source.ignore\",\n        \"path\": \"./syntaxes/ignore.tmLanguage.json\"\n      }\n    ]\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/git-base/package.nls.json",
    "content": "{\n\t\"displayName\": \"Git Base\",\n\t\"description\": \"Git static contributions and pickers.\",\n\t\"command.api.getRemoteSources\": \"Get Remote Sources\"\n}\n"
  },
  {
    "path": "extensions/git-base/src/api/api1.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, commands } from 'vscode';\nimport { Model } from '../model';\nimport { getRemoteSourceActions, pickRemoteSource } from '../remoteSource';\nimport { GitBaseExtensionImpl } from './extension';\nimport { API, PickRemoteSourceOptions, PickRemoteSourceResult, RemoteSourceAction, RemoteSourceProvider } from './git-base';\n\nexport class ApiImpl implements API {\n\n\tconstructor(private _model: Model) { }\n\n\tpickRemoteSource(options: PickRemoteSourceOptions): Promise<PickRemoteSourceResult | string | undefined> {\n\t\treturn pickRemoteSource(this._model, options as any);\n\t}\n\n\tgetRemoteSourceActions(url: string): Promise<RemoteSourceAction[]> {\n\t\treturn getRemoteSourceActions(this._model, url);\n\t}\n\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable {\n\t\treturn this._model.registerRemoteSourceProvider(provider);\n\t}\n}\n\nexport function registerAPICommands(extension: GitBaseExtensionImpl): Disposable {\n\tconst disposables: Disposable[] = [];\n\n\tdisposables.push(commands.registerCommand('git-base.api.getRemoteSources', (opts?: PickRemoteSourceOptions) => {\n\t\tif (!extension.model) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn pickRemoteSource(extension.model, opts as any);\n\t}));\n\n\treturn Disposable.from(...disposables);\n}\n"
  },
  {
    "path": "extensions/git-base/src/api/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Model } from '../model';\nimport { GitBaseExtension, API } from './git-base';\nimport { Event, EventEmitter } from 'vscode';\nimport { ApiImpl } from './api1';\n\nexport class GitBaseExtensionImpl implements GitBaseExtension {\n\n\tenabled: boolean = false;\n\n\tprivate _onDidChangeEnablement = new EventEmitter<boolean>();\n\treadonly onDidChangeEnablement: Event<boolean> = this._onDidChangeEnablement.event;\n\n\tprivate _model: Model | undefined = undefined;\n\n\tset model(model: Model | undefined) {\n\t\tthis._model = model;\n\n\t\tconst enabled = !!model;\n\n\t\tif (this.enabled === enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enabled = enabled;\n\t\tthis._onDidChangeEnablement.fire(this.enabled);\n\t}\n\n\tget model(): Model | undefined {\n\t\treturn this._model;\n\t}\n\n\tconstructor(model?: Model) {\n\t\tif (model) {\n\t\t\tthis.enabled = true;\n\t\t\tthis._model = model;\n\t\t}\n\t}\n\n\tgetAPI(version: number): API {\n\t\tif (!this._model) {\n\t\t\tthrow new Error('Git model not found');\n\t\t}\n\n\t\tif (version !== 1) {\n\t\t\tthrow new Error(`No API version ${version} found.`);\n\t\t}\n\n\t\treturn new ApiImpl(this._model);\n\t}\n}\n"
  },
  {
    "path": "extensions/git-base/src/api/git-base.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command, Disposable, Event, ProviderResult } from 'vscode';\nexport { ProviderResult } from 'vscode';\n\nexport interface API {\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;\n\tgetRemoteSourceActions(url: string): Promise<RemoteSourceAction[]>;\n\tpickRemoteSource(options: PickRemoteSourceOptions): Promise<string | PickRemoteSourceResult | undefined>;\n}\n\nexport interface GitBaseExtension {\n\n\treadonly enabled: boolean;\n\treadonly onDidChangeEnablement: Event<boolean>;\n\n\t/**\n\t * Returns a specific API version.\n\t *\n\t * Throws error if git-base extension is disabled. You can listed to the\n\t * [GitBaseExtension.onDidChangeEnablement](#GitBaseExtension.onDidChangeEnablement)\n\t * event to know when the extension becomes enabled/disabled.\n\t *\n\t * @param version Version number.\n\t * @returns API instance\n\t */\n\tgetAPI(version: 1): API;\n}\n\nexport interface PickRemoteSourceOptions {\n\treadonly providerLabel?: (provider: RemoteSourceProvider) => string;\n\treadonly urlLabel?: string | ((url: string) => string);\n\treadonly providerName?: string;\n\treadonly title?: string;\n\treadonly placeholder?: string;\n\treadonly branch?: boolean; // then result is PickRemoteSourceResult\n\treadonly showRecentSources?: boolean;\n}\n\nexport interface PickRemoteSourceResult {\n\treadonly url: string;\n\treadonly branch?: string;\n}\n\nexport interface RemoteSourceAction {\n\treadonly label: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon: string;\n\trun(branch: string): void;\n}\n\nexport interface RemoteSource {\n\treadonly name: string;\n\treadonly description?: string;\n\treadonly detail?: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon?: string;\n\treadonly url: string | string[];\n}\n\nexport interface RecentRemoteSource extends RemoteSource {\n\treadonly timestamp: number;\n}\n\nexport interface RemoteSourceProvider {\n\treadonly name: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon?: string;\n\treadonly label?: string;\n\treadonly placeholder?: string;\n\treadonly supportsQuery?: boolean;\n\n\tgetBranches?(url: string): ProviderResult<string[]>;\n\tgetRemoteSourceActions?(url: string): ProviderResult<RemoteSourceAction[]>;\n\tgetRecentRemoteSources?(query?: string): ProviderResult<RecentRemoteSource[]>;\n\tgetRemoteSources(query?: string): ProviderResult<RemoteSource[]>;\n}\n"
  },
  {
    "path": "extensions/git-base/src/decorators.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { done } from './util';\n\nexport function debounce(delay: number): Function {\n\treturn decorate((fn, key) => {\n\t\tconst timerKey = `$debounce$${key}`;\n\n\t\treturn function (this: any, ...args: any[]) {\n\t\t\tclearTimeout(this[timerKey]);\n\t\t\tthis[timerKey] = setTimeout(() => fn.apply(this, args), delay);\n\t\t};\n\t});\n}\n\nexport const throttle = decorate(_throttle);\n\nfunction _throttle<T>(fn: Function, key: string): Function {\n\tconst currentKey = `$throttle$current$${key}`;\n\tconst nextKey = `$throttle$next$${key}`;\n\n\tconst trigger = function (this: any, ...args: any[]) {\n\t\tif (this[nextKey]) {\n\t\t\treturn this[nextKey];\n\t\t}\n\n\t\tif (this[currentKey]) {\n\t\t\tthis[nextKey] = done(this[currentKey]).then(() => {\n\t\t\t\tthis[nextKey] = undefined;\n\t\t\t\treturn trigger.apply(this, args);\n\t\t\t});\n\n\t\t\treturn this[nextKey];\n\t\t}\n\n\t\tthis[currentKey] = fn.apply(this, args) as Promise<T>;\n\n\t\tconst clear = () => this[currentKey] = undefined;\n\t\tdone(this[currentKey]).then(clear, clear);\n\n\t\treturn this[currentKey];\n\t};\n\n\treturn trigger;\n}\n\nfunction decorate(decorator: (fn: Function, key: string) => Function): Function {\n\treturn (_target: any, key: string, descriptor: any) => {\n\t\tlet fnKey: string | null = null;\n\t\tlet fn: Function | null = null;\n\n\t\tif (typeof descriptor.value === 'function') {\n\t\t\tfnKey = 'value';\n\t\t\tfn = descriptor.value;\n\t\t} else if (typeof descriptor.get === 'function') {\n\t\t\tfnKey = 'get';\n\t\t\tfn = descriptor.get;\n\t\t}\n\n\t\tif (!fn || !fnKey) {\n\t\t\tthrow new Error('not supported');\n\t\t}\n\n\t\tdescriptor[fnKey] = decorator(fn, key);\n\t};\n}\n"
  },
  {
    "path": "extensions/git-base/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ExtensionContext } from 'vscode';\nimport { registerAPICommands } from './api/api1';\nimport { GitBaseExtensionImpl } from './api/extension';\nimport { Model } from './model';\n\nexport function activate(context: ExtensionContext): GitBaseExtensionImpl {\n\tconst apiImpl = new GitBaseExtensionImpl(new Model());\n\tcontext.subscriptions.push(registerAPICommands(apiImpl));\n\n\treturn apiImpl;\n}\n"
  },
  {
    "path": "extensions/git-base/src/model.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { EventEmitter, Disposable } from 'vscode';\nimport { toDisposable } from './util';\nimport { RemoteSourceProvider } from './api/git-base';\nimport { IRemoteSourceProviderRegistry } from './remoteProvider';\n\nexport class Model implements IRemoteSourceProviderRegistry {\n\n\tprivate remoteSourceProviders = new Set<RemoteSourceProvider>();\n\n\tprivate _onDidAddRemoteSourceProvider = new EventEmitter<RemoteSourceProvider>();\n\treadonly onDidAddRemoteSourceProvider = this._onDidAddRemoteSourceProvider.event;\n\n\tprivate _onDidRemoveRemoteSourceProvider = new EventEmitter<RemoteSourceProvider>();\n\treadonly onDidRemoveRemoteSourceProvider = this._onDidRemoveRemoteSourceProvider.event;\n\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable {\n\t\tthis.remoteSourceProviders.add(provider);\n\t\tthis._onDidAddRemoteSourceProvider.fire(provider);\n\n\t\treturn toDisposable(() => {\n\t\t\tthis.remoteSourceProviders.delete(provider);\n\t\t\tthis._onDidRemoveRemoteSourceProvider.fire(provider);\n\t\t});\n\t}\n\n\tgetRemoteProviders(): RemoteSourceProvider[] {\n\t\treturn [...this.remoteSourceProviders.values()];\n\t}\n}\n"
  },
  {
    "path": "extensions/git-base/src/remoteProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, Event } from 'vscode';\nimport { RemoteSourceProvider } from './api/git-base';\n\nexport interface IRemoteSourceProviderRegistry {\n\treadonly onDidAddRemoteSourceProvider: Event<RemoteSourceProvider>;\n\treadonly onDidRemoveRemoteSourceProvider: Event<RemoteSourceProvider>;\n\n\tgetRemoteProviders(): RemoteSourceProvider[];\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;\n}\n"
  },
  {
    "path": "extensions/git-base/src/remoteSource.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { QuickPickItem, window, QuickPick, QuickPickItemKind, l10n, Disposable } from 'vscode';\nimport { RemoteSourceProvider, RemoteSource, PickRemoteSourceOptions, PickRemoteSourceResult, RemoteSourceAction } from './api/git-base';\nimport { Model } from './model';\nimport { throttle, debounce } from './decorators';\n\nasync function getQuickPickResult<T extends QuickPickItem>(quickpick: QuickPick<T>): Promise<T | undefined> {\n\tconst listeners: Disposable[] = [];\n\tconst result = await new Promise<T | undefined>(c => {\n\t\tlisteners.push(\n\t\t\tquickpick.onDidAccept(() => c(quickpick.selectedItems[0])),\n\t\t\tquickpick.onDidHide(() => c(undefined)),\n\t\t);\n\t\tquickpick.show();\n\t});\n\n\tquickpick.hide();\n\tlisteners.forEach(l => l.dispose());\n\treturn result;\n}\n\nclass RemoteSourceProviderQuickPick implements Disposable {\n\n\tprivate disposables: Disposable[] = [];\n\tprivate isDisposed: boolean = false;\n\n\tprivate quickpick: QuickPick<QuickPickItem & { remoteSource?: RemoteSource }> | undefined;\n\n\tconstructor(private provider: RemoteSourceProvider) { }\n\n\tdispose() {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t\tthis.disposables = [];\n\t\tthis.quickpick = undefined;\n\t\tthis.isDisposed = true;\n\t}\n\n\tprivate ensureQuickPick() {\n\t\tif (!this.quickpick) {\n\t\t\tthis.quickpick = window.createQuickPick();\n\t\t\tthis.disposables.push(this.quickpick);\n\t\t\tthis.quickpick.ignoreFocusOut = true;\n\t\t\tthis.disposables.push(this.quickpick.onDidHide(() => this.dispose()));\n\t\t\tif (this.provider.supportsQuery) {\n\t\t\t\tthis.quickpick.placeholder = this.provider.placeholder ?? l10n.t('Repository name (type to search)');\n\t\t\t\tthis.disposables.push(this.quickpick.onDidChangeValue(this.onDidChangeValue, this));\n\t\t\t} else {\n\t\t\t\tthis.quickpick.placeholder = this.provider.placeholder ?? l10n.t('Repository name');\n\t\t\t}\n\t\t}\n\t}\n\n\t@debounce(300)\n\tprivate onDidChangeValue(): void {\n\t\tthis.query();\n\t}\n\n\t@throttle\n\tprivate async query(): Promise<void> {\n\t\ttry {\n\t\t\tif (this.isDisposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.ensureQuickPick();\n\t\t\tthis.quickpick!.busy = true;\n\t\t\tthis.quickpick!.show();\n\n\t\t\tconst remoteSources = await this.provider.getRemoteSources(this.quickpick?.value) || [];\n\t\t\t// The user may have cancelled the picker in the meantime\n\t\t\tif (this.isDisposed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (remoteSources.length === 0) {\n\t\t\t\tthis.quickpick!.items = [{\n\t\t\t\t\tlabel: l10n.t('No remote repositories found.'),\n\t\t\t\t\talwaysShow: true\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\tthis.quickpick!.items = remoteSources.map(remoteSource => ({\n\t\t\t\t\tlabel: remoteSource.icon ? `$(${remoteSource.icon}) ${remoteSource.name}` : remoteSource.name,\n\t\t\t\t\tdescription: remoteSource.description || (typeof remoteSource.url === 'string' ? remoteSource.url : remoteSource.url[0]),\n\t\t\t\t\tdetail: remoteSource.detail,\n\t\t\t\t\tremoteSource,\n\t\t\t\t\talwaysShow: true\n\t\t\t\t}));\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tthis.quickpick!.items = [{ label: l10n.t('{0} Error: {1}', '$(error)', err.message), alwaysShow: true }];\n\t\t\tconsole.error(err);\n\t\t} finally {\n\t\t\tif (!this.isDisposed) {\n\t\t\t\tthis.quickpick!.busy = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync pick(): Promise<RemoteSource | undefined> {\n\t\tawait this.query();\n\t\tif (this.isDisposed) {\n\t\t\treturn;\n\t\t}\n\t\tconst result = await getQuickPickResult(this.quickpick!);\n\t\treturn result?.remoteSource;\n\t}\n}\n\nexport async function getRemoteSourceActions(model: Model, url: string): Promise<RemoteSourceAction[]> {\n\tconst providers = model.getRemoteProviders();\n\n\tconst remoteSourceActions = [];\n\tfor (const provider of providers) {\n\t\tconst providerActions = await provider.getRemoteSourceActions?.(url);\n\t\tif (providerActions?.length) {\n\t\t\tremoteSourceActions.push(...providerActions);\n\t\t}\n\t}\n\n\treturn remoteSourceActions;\n}\n\nexport async function pickRemoteSource(model: Model, options: PickRemoteSourceOptions & { branch?: false | undefined }): Promise<string | undefined>;\nexport async function pickRemoteSource(model: Model, options: PickRemoteSourceOptions & { branch: true }): Promise<PickRemoteSourceResult | undefined>;\nexport async function pickRemoteSource(model: Model, options: PickRemoteSourceOptions = {}): Promise<string | PickRemoteSourceResult | undefined> {\n\tconst quickpick = window.createQuickPick<(QuickPickItem & { provider?: RemoteSourceProvider; url?: string })>();\n\tquickpick.title = options.title;\n\n\tif (options.providerName) {\n\t\tconst provider = model.getRemoteProviders()\n\t\t\t.filter(provider => provider.name === options.providerName)[0];\n\n\t\tif (provider) {\n\t\t\treturn await pickProviderSource(provider, options);\n\t\t}\n\t}\n\n\tconst remoteProviders = model.getRemoteProviders()\n\t\t.map(provider => ({ label: (provider.icon ? `$(${provider.icon}) ` : '') + (options.providerLabel ? options.providerLabel(provider) : provider.name), alwaysShow: true, provider }));\n\n\tconst recentSources: (QuickPickItem & { url?: string; timestamp: number })[] = [];\n\tif (options.showRecentSources) {\n\t\tfor (const { provider } of remoteProviders) {\n\t\t\tconst sources = (await provider.getRecentRemoteSources?.() ?? []).map((item) => {\n\t\t\t\treturn {\n\t\t\t\t\t...item,\n\t\t\t\t\tlabel: (item.icon ? `$(${item.icon}) ` : '') + item.name,\n\t\t\t\t\turl: typeof item.url === 'string' ? item.url : item.url[0],\n\t\t\t\t};\n\t\t\t});\n\t\t\trecentSources.push(...sources);\n\t\t}\n\t}\n\n\tconst items = [\n\t\t{ kind: QuickPickItemKind.Separator, label: l10n.t('remote sources') },\n\t\t...remoteProviders,\n\t\t{ kind: QuickPickItemKind.Separator, label: l10n.t('recently opened') },\n\t\t...recentSources.sort((a, b) => b.timestamp - a.timestamp)\n\t];\n\n\tquickpick.placeholder = options.placeholder ?? (remoteProviders.length === 0\n\t\t? l10n.t('Provide repository URL')\n\t\t: l10n.t('Provide repository URL or pick a repository source.'));\n\n\tconst updatePicks = (value?: string) => {\n\t\tif (value) {\n\t\t\tconst label = (typeof options.urlLabel === 'string' ? options.urlLabel : options.urlLabel?.(value)) ?? l10n.t('URL');\n\t\t\tquickpick.items = [{\n\t\t\t\tlabel: label,\n\t\t\t\tdescription: value,\n\t\t\t\talwaysShow: true,\n\t\t\t\turl: value\n\t\t\t},\n\t\t\t...items\n\t\t\t];\n\t\t} else {\n\t\t\tquickpick.items = items;\n\t\t}\n\t};\n\n\tquickpick.onDidChangeValue(updatePicks);\n\tupdatePicks();\n\n\tconst result = await getQuickPickResult(quickpick);\n\n\tif (result) {\n\t\tif (result.url) {\n\t\t\treturn result.url;\n\t\t} else if (result.provider) {\n\t\t\treturn await pickProviderSource(result.provider, options);\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nasync function pickProviderSource(provider: RemoteSourceProvider, options: PickRemoteSourceOptions = {}): Promise<string | PickRemoteSourceResult | undefined> {\n\tconst quickpick = new RemoteSourceProviderQuickPick(provider);\n\tconst remote = await quickpick.pick();\n\tquickpick.dispose();\n\n\tlet url: string | undefined;\n\n\tif (remote) {\n\t\tif (typeof remote.url === 'string') {\n\t\t\turl = remote.url;\n\t\t} else if (remote.url.length > 0) {\n\t\t\turl = await window.showQuickPick(remote.url, { ignoreFocusOut: true, placeHolder: l10n.t('Choose a URL to clone from.') });\n\t\t}\n\t}\n\n\tif (!url || !options.branch) {\n\t\treturn url;\n\t}\n\n\tif (!provider.getBranches) {\n\t\treturn { url };\n\t}\n\n\tconst branches = await provider.getBranches(url);\n\n\tif (!branches) {\n\t\treturn { url };\n\t}\n\n\tconst branch = await window.showQuickPick(branches, {\n\t\tplaceHolder: l10n.t('Branch name')\n\t});\n\n\tif (!branch) {\n\t\treturn { url };\n\t}\n\n\treturn { url, branch };\n}\n"
  },
  {
    "path": "extensions/git-base/src/util.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IDisposable {\n\tdispose(): void;\n}\n\nexport function toDisposable(dispose: () => void): IDisposable {\n\treturn { dispose };\n}\n\nexport function done<T>(promise: Promise<T>): Promise<void> {\n\treturn promise.then<void>(() => undefined);\n}\n\nexport namespace Versions {\n\tdeclare type VersionComparisonResult = -1 | 0 | 1;\n\n\texport interface Version {\n\t\tmajor: number;\n\t\tminor: number;\n\t\tpatch: number;\n\t\tpre?: string;\n\t}\n\n\texport function compare(v1: string | Version, v2: string | Version): VersionComparisonResult {\n\t\tif (typeof v1 === 'string') {\n\t\t\tv1 = fromString(v1);\n\t\t}\n\t\tif (typeof v2 === 'string') {\n\t\t\tv2 = fromString(v2);\n\t\t}\n\n\t\tif (v1.major > v2.major) { return 1; }\n\t\tif (v1.major < v2.major) { return -1; }\n\n\t\tif (v1.minor > v2.minor) { return 1; }\n\t\tif (v1.minor < v2.minor) { return -1; }\n\n\t\tif (v1.patch > v2.patch) { return 1; }\n\t\tif (v1.patch < v2.patch) { return -1; }\n\n\t\tif (v1.pre === undefined && v2.pre !== undefined) { return 1; }\n\t\tif (v1.pre !== undefined && v2.pre === undefined) { return -1; }\n\n\t\tif (v1.pre !== undefined && v2.pre !== undefined) {\n\t\t\treturn v1.pre.localeCompare(v2.pre) as VersionComparisonResult;\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\texport function from(major: string | number, minor: string | number, patch?: string | number, pre?: string): Version {\n\t\treturn {\n\t\t\tmajor: typeof major === 'string' ? parseInt(major, 10) : major,\n\t\t\tminor: typeof minor === 'string' ? parseInt(minor, 10) : minor,\n\t\t\tpatch: patch === undefined || patch === null ? 0 : typeof patch === 'string' ? parseInt(patch, 10) : patch,\n\t\t\tpre: pre,\n\t\t};\n\t}\n\n\texport function fromString(version: string): Version {\n\t\tconst [ver, pre] = version.split('-');\n\t\tconst [major, minor, patch] = ver.split('.');\n\t\treturn from(major, minor, patch, pre);\n\t}\n}\n"
  },
  {
    "path": "extensions/git-base/syntaxes/git-commit.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/walles/git-commit-message-plus/blob/master/syntaxes/git-commit.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/walles/git-commit-message-plus/commit/35a079dea5a91b087021b40c01a6bb4eb0337a87\",\n\t\"name\": \"Git Commit Message\",\n\t\"scopeName\": \"text.git-commit\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"comment\": \"diff presented at the end of the commit message when using commit -v.\",\n\t\t\t\"name\": \"meta.embedded.diff.git-commit\",\n\t\t\t\"contentName\": \"source.diff\",\n\t\t\t\"begin\": \"(?=^diff\\\\ \\\\-\\\\-git)\",\n\t\t\t\"end\": \"\\\\z\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.diff\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"User supplied message\",\n\t\t\t\"name\": \"meta.scope.message.git-commit\",\n\t\t\t\"begin\": \"^(?!#)\",\n\t\t\t\"end\": \"^(?=#)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Mark > 50 lines as deprecated, > 72 as illegal\",\n\t\t\t\t\t\"name\": \"meta.scope.subject.git-commit\",\n\t\t\t\t\t\"match\": \"\\\\G.{0,50}(.{0,22}(.*))$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.line-too-long.git-commit\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.line-too-long.git-commit\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Git supplied metadata in a number of lines starting with #\",\n\t\t\t\"name\": \"meta.scope.metadata.git-commit\",\n\t\t\t\"begin\": \"^(?=#)\",\n\t\t\t\"contentName\": \"comment.line.number-sign.git-commit\",\n\t\t\t\"end\": \"^(?!#)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^#\\\\t((modified|renamed):.*)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"markup.changed.git-commit\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^#\\\\t(new file:.*)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"markup.inserted.git-commit\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^#\\\\t(deleted.*)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"markup.deleted.git-commit\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Fallback for non-English git commit template\",\n\t\t\t\t\t\"match\": \"^#\\\\t([^:]+): *(.*)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.file-type.git-commit\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.filename.git-commit\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/git-base/syntaxes/git-rebase.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/git.tmbundle/blob/master/Syntaxes/Git%20Rebase%20Message.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/git.tmbundle/commit/5870cf3f8abad3a6637bdf69250b5d2ded427dc4\",\n\t\"name\": \"Git Rebase Message\",\n\t\"scopeName\": \"text.git-rebase\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.git-rebase\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(#).*$\\\\n?\",\n\t\t\t\"name\": \"comment.line.number-sign.git-rebase\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.git-rebase\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.sha.git-rebase\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.commit-message.git-rebase\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(pick|p|reword|r|edit|e|squash|s|fixup|f|drop|d)\\\\s+([0-9a-f]+)\\\\s+(.*)$\",\n\t\t\t\"name\": \"meta.commit-command.git-rebase\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.git-rebase\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(exec|x)\\\\s+(.*)$\",\n\t\t\t\"name\": \"meta.commit-command.git-rebase\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.git-rebase\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(break|b)\\\\s*$\",\n\t\t\t\"name\": \"meta.commit-command.git-rebase\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/git-base/syntaxes/ignore.tmLanguage.json",
    "content": "{\n\t\"name\": \"Ignore\",\n\t\"scopeName\": \"source.ignore\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"match\": \"^#.*\",\n\t\t\t\"name\": \"comment.line.number-sign.ignore\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/git-base/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"experimentalDecorators\": true,\n\t\t\"typeRoots\": [\n\t\t\t\"./node_modules/@types\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/github/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/github/.vscodeignore",
    "content": "src/**\n!src/common/config.json\nout/**\nbuild/**\nextension.webpack.config.js\ntsconfig.json\npackage-lock.json\n"
  },
  {
    "path": "extensions/github/README.md",
    "content": "# GitHub for Visual Studio Code\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension provides the following GitHub-related features for VS Code:\n\n- `Publish to GitHub` command\n- `Clone from GitHub` participant to the `Git: Clone` command\n- GitHub authentication for built-in git commands, controlled via the `github.gitAuthentication` command\n- Automatic fork creation when attempting to push to a repository without permissions\n"
  },
  {
    "path": "extensions/github/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t}\n});\n"
  },
  {
    "path": "extensions/github/markdown.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.vscode-dark img[src$=\\#gh-light-mode-only],\n.vscode-light img[src$=\\#gh-dark-mode-only],\n.vscode-high-contrast:not(.vscode-high-contrast-light) img[src$=\\#gh-light-mode-only],\n.vscode-high-contrast-light img[src$=\\#gh-dark-mode-only] {\n\tdisplay: none;\n}\n"
  },
  {
    "path": "extensions/github/package.json",
    "content": "{\n  \"name\": \"github\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"version\": \"0.0.1\",\n  \"engines\": {\n    \"vscode\": \"^1.41.0\"\n  },\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"icon\": \"images/icon.png\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"activationEvents\": [\n    \"*\"\n  ],\n  \"extensionDependencies\": [\n    \"vscode.git-base\"\n  ],\n  \"main\": \"./out/extension.js\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"enabledApiProposals\": [\n    \"canonicalUriProvider\",\n    \"contribEditSessions\",\n    \"contribShareMenu\",\n    \"contribSourceControlHistoryItemMenu\",\n    \"scmHistoryProvider\",\n    \"shareProvider\",\n    \"timeline\"\n  ],\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"command\": \"github.publish\",\n        \"title\": \"%command.publish%\"\n      },\n      {\n        \"command\": \"github.copyVscodeDevLink\",\n        \"title\": \"%command.copyVscodeDevLink%\"\n      },\n      {\n        \"command\": \"github.copyVscodeDevLinkFile\",\n        \"title\": \"%command.copyVscodeDevLink%\"\n      },\n      {\n        \"command\": \"github.copyVscodeDevLinkWithoutRange\",\n        \"title\": \"%command.copyVscodeDevLink%\"\n      },\n      {\n        \"command\": \"github.openOnVscodeDev\",\n        \"title\": \"%command.openOnVscodeDev%\",\n        \"icon\": \"$(globe)\"\n      },\n      {\n        \"command\": \"github.graph.openOnGitHub\",\n        \"title\": \"%command.openOnGitHub%\",\n        \"icon\": \"$(github)\"\n      },\n      {\n        \"command\": \"github.timeline.openOnGitHub\",\n        \"title\": \"%command.openOnGitHub%\",\n        \"icon\": \"$(github)\"\n      }\n    ],\n    \"continueEditSession\": [\n      {\n        \"command\": \"github.openOnVscodeDev\",\n        \"when\": \"github.hasGitHubRepo\",\n        \"qualifiedName\": \"Continue Working in vscode.dev\",\n        \"category\": \"Remote Repositories\",\n        \"remoteGroup\": \"virtualfs_44_vscode-vfs_2_web@2\"\n      }\n    ],\n    \"menus\": {\n      \"commandPalette\": [\n        {\n          \"command\": \"github.publish\",\n          \"when\": \"git-base.gitEnabled && workspaceFolderCount != 0 && remoteName != 'codespaces'\"\n        },\n        {\n          \"command\": \"github.graph.openOnGitHub\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"github.copyVscodeDevLink\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"github.copyVscodeDevLinkFile\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"github.copyVscodeDevLinkWithoutRange\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"github.openOnVscodeDev\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"github.timeline.openOnGitHub\",\n          \"when\": \"false\"\n        }\n      ],\n      \"file/share\": [\n        {\n          \"command\": \"github.copyVscodeDevLinkFile\",\n          \"when\": \"github.hasGitHubRepo && remoteName != 'codespaces'\",\n          \"group\": \"0_vscode@0\"\n        }\n      ],\n      \"editor/context/share\": [\n        {\n          \"command\": \"github.copyVscodeDevLink\",\n          \"when\": \"github.hasGitHubRepo && resourceScheme != untitled && !isInEmbeddedEditor && remoteName != 'codespaces'\",\n          \"group\": \"0_vscode@0\"\n        }\n      ],\n      \"explorer/context/share\": [\n        {\n          \"command\": \"github.copyVscodeDevLinkWithoutRange\",\n          \"when\": \"github.hasGitHubRepo && resourceScheme != untitled && !isInEmbeddedEditor && remoteName != 'codespaces'\",\n          \"group\": \"0_vscode@0\"\n        }\n      ],\n      \"editor/lineNumber/context\": [\n        {\n          \"command\": \"github.copyVscodeDevLink\",\n          \"when\": \"github.hasGitHubRepo && resourceScheme != untitled && activeEditor == workbench.editors.files.textFileEditor && config.editor.lineNumbers == on && remoteName != 'codespaces'\",\n          \"group\": \"1_cutcopypaste@2\"\n        },\n        {\n          \"command\": \"github.copyVscodeDevLink\",\n          \"when\": \"github.hasGitHubRepo && resourceScheme != untitled && activeEditor == workbench.editor.notebook && remoteName != 'codespaces'\",\n          \"group\": \"1_cutcopypaste@2\"\n        }\n      ],\n      \"editor/title/context/share\": [\n        {\n          \"command\": \"github.copyVscodeDevLinkWithoutRange\",\n          \"when\": \"github.hasGitHubRepo && resourceScheme != untitled && remoteName != 'codespaces'\",\n          \"group\": \"0_vscode@0\"\n        }\n      ],\n      \"scm/historyItem/context\": [\n        {\n          \"command\": \"github.graph.openOnGitHub\",\n          \"when\": \"github.hasGitHubRepo\",\n          \"group\": \"0_view@2\"\n        }\n      ],\n      \"scm/historyItem/hover\": [\n        {\n          \"command\": \"github.graph.openOnGitHub\",\n          \"when\": \"github.hasGitHubRepo\",\n          \"group\": \"1_open@1\"\n        }\n      ],\n      \"timeline/item/context\": [\n        {\n          \"command\": \"github.timeline.openOnGitHub\",\n          \"group\": \"1_actions@3\",\n          \"when\": \"github.hasGitHubRepo && timelineItem =~ /git:file:commit\\\\b/\"\n        }\n      ]\n    },\n    \"configuration\": [\n      {\n        \"title\": \"GitHub\",\n        \"properties\": {\n          \"github.branchProtection\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%config.branchProtection%\"\n          },\n          \"github.gitAuthentication\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%config.gitAuthentication%\"\n          },\n          \"github.gitProtocol\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"https\",\n              \"ssh\"\n            ],\n            \"default\": \"https\",\n            \"description\": \"%config.gitProtocol%\"\n          },\n          \"github.showAvatar\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"default\": true,\n            \"description\": \"%config.showAvatar%\"\n          }\n        }\n      }\n    ],\n    \"viewsWelcome\": [\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%welcome.publishFolder%\",\n        \"when\": \"config.git.enabled && git.state == initialized && workbenchState == folder && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0\"\n      },\n      {\n        \"view\": \"scm\",\n        \"contents\": \"%welcome.publishWorkspaceFolder%\",\n        \"when\": \"config.git.enabled && git.state == initialized && workbenchState == workspace && workspaceFolderCount != 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0\"\n      }\n    ],\n    \"markdown.previewStyles\": [\n      \"./markdown.css\"\n    ]\n  },\n  \"scripts\": {\n    \"vscode:prepublish\": \"npm run compile\",\n    \"compile\": \"gulp compile-extension:github\",\n    \"watch\": \"gulp watch-extension:github\"\n  },\n  \"dependencies\": {\n    \"@octokit/graphql\": \"8.2.0\",\n    \"@octokit/graphql-schema\": \"14.4.0\",\n    \"@octokit/rest\": \"21.1.0\",\n    \"tunnel\": \"^0.0.6\",\n    \"@vscode/extension-telemetry\": \"^0.9.8\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/github/package.nls.json",
    "content": "{\n\t\"displayName\": \"GitHub\",\n\t\"description\": \"GitHub features for VS Code\",\n\t\"command.copyVscodeDevLink\": \"Copy vscode.dev Link\",\n\t\"command.publish\": \"Publish to GitHub\",\n\t\"command.openOnGitHub\": \"Open on GitHub\",\n\t\"command.openOnVscodeDev\": \"Open in vscode.dev\",\n\t\"config.branchProtection\": \"Controls whether to query repository rules for GitHub repositories\",\n\t\"config.gitAuthentication\": \"Controls whether to enable automatic GitHub authentication for git commands within VS Code.\",\n\t\"config.gitProtocol\": \"Controls which protocol is used to clone a GitHub repository\",\n\t\"config.showAvatar\": \"Controls whether to show the GitHub avatar of the commit author in various hovers (ex: Git blame, Timeline, Source Control Graph, etc.)\",\n\t\"welcome.publishFolder\": {\n\t\t\"message\": \"You can directly publish this folder to a GitHub repository. Once published, you'll have access to source control features powered by Git and GitHub.\\n[$(github) Publish to GitHub](command:github.publish)\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='$(github)'}\",\n\t\t\t\"Do not translate '$(github)'. It will be rendered as an icon\",\n\t\t\t\"{Locked='](command:github.publish'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t},\n\t\"welcome.publishWorkspaceFolder\": {\n\t\t\"message\": \"You can directly publish a workspace folder to a GitHub repository. Once published, you'll have access to source control features powered by Git and GitHub.\\n[$(github) Publish to GitHub](command:github.publish)\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='$(github)'}\",\n\t\t\t\"Do not translate '$(github)'. It will be rendered as an icon\",\n\t\t\t\"{Locked='](command:github.publish'}\",\n\t\t\t\"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code\",\n\t\t\t\"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "extensions/github/src/auth.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AuthenticationSession, authentication, window } from 'vscode';\nimport { Agent, globalAgent } from 'https';\nimport { graphql } from '@octokit/graphql/dist-types/types';\nimport { Octokit } from '@octokit/rest';\nimport { httpsOverHttp } from 'tunnel';\nimport { URL } from 'url';\n\nexport class AuthenticationError extends Error { }\n\nfunction getAgent(url: string | undefined = process.env.HTTPS_PROXY): Agent {\n\tif (!url) {\n\t\treturn globalAgent;\n\t}\n\n\ttry {\n\t\tconst { hostname, port, username, password } = new URL(url);\n\t\tconst auth = username && password && `${username}:${password}`;\n\t\treturn httpsOverHttp({ proxy: { host: hostname, port, proxyAuth: auth } });\n\t} catch (e) {\n\t\twindow.showErrorMessage(`HTTPS_PROXY environment variable ignored: ${e.message}`);\n\t\treturn globalAgent;\n\t}\n}\n\nconst scopes = ['repo', 'workflow', 'user:email', 'read:user'];\n\nexport async function getSession(): Promise<AuthenticationSession> {\n\treturn await authentication.getSession('github', scopes, { createIfNone: true });\n}\n\nlet _octokit: Promise<Octokit> | undefined;\n\nexport function getOctokit(): Promise<Octokit> {\n\tif (!_octokit) {\n\t\t_octokit = getSession().then(async session => {\n\t\t\tconst token = session.accessToken;\n\t\t\tconst agent = getAgent();\n\n\t\t\tconst { Octokit } = await import('@octokit/rest');\n\n\t\t\treturn new Octokit({\n\t\t\t\trequest: { agent },\n\t\t\t\tuserAgent: 'GitHub VSCode',\n\t\t\t\tauth: `token ${token}`\n\t\t\t});\n\t\t}).then(null, async err => {\n\t\t\t_octokit = undefined;\n\t\t\tthrow err;\n\t\t});\n\t}\n\n\treturn _octokit;\n}\n\nlet _octokitGraphql: Promise<graphql> | undefined;\n\nexport async function getOctokitGraphql(): Promise<graphql> {\n\tif (!_octokitGraphql) {\n\t\ttry {\n\t\t\tconst session = await authentication.getSession('github', scopes, { silent: true });\n\n\t\t\tif (!session) {\n\t\t\t\tthrow new AuthenticationError('No GitHub authentication session available.');\n\t\t\t}\n\n\t\t\tconst token = session.accessToken;\n\t\t\tconst { graphql } = await import('@octokit/graphql');\n\n\t\t\treturn graphql.defaults({\n\t\t\t\theaders: {\n\t\t\t\t\tauthorization: `token ${token}`\n\t\t\t\t},\n\t\t\t\trequest: {\n\t\t\t\t\tagent: getAgent()\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (err) {\n\t\t\t_octokitGraphql = undefined;\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\treturn _octokitGraphql;\n}\n"
  },
  {
    "path": "extensions/github/src/branchProtection.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { authentication, EventEmitter, LogOutputChannel, Memento, Uri, workspace } from 'vscode';\nimport { Repository as GitHubRepository, RepositoryRuleset } from '@octokit/graphql-schema';\nimport { AuthenticationError, getOctokitGraphql } from './auth';\nimport { API, BranchProtection, BranchProtectionProvider, BranchProtectionRule, Repository } from './typings/git';\nimport { DisposableStore, getRepositoryFromUrl } from './util';\nimport TelemetryReporter from '@vscode/extension-telemetry';\n\nconst REPOSITORY_QUERY = `\n\tquery repositoryPermissions($owner: String!, $repo: String!) {\n\t\trepository(owner: $owner, name: $repo) {\n\t\t\tdefaultBranchRef {\n\t\t\t\tname\n\t\t\t},\n\t\t\tviewerPermission\n\t\t}\n\t}\n`;\n\nconst REPOSITORY_RULESETS_QUERY = `\n\tquery repositoryRulesets($owner: String!, $repo: String!, $cursor: String, $limit: Int = 100) {\n\t\trepository(owner: $owner, name: $repo) {\n\t\t\trulesets(includeParents: true, first: $limit, after: $cursor) {\n\t\t\t\tnodes {\n\t\t\t\t\tname\n\t\t\t\t\tenforcement\n\t\t\t\t\trules(type: PULL_REQUEST) {\n\t\t\t\t\t\ttotalCount\n\t\t\t\t\t}\n\t\t\t\t\tconditions {\n\t\t\t\t\t\trefName {\n\t\t\t\t\t\t\tinclude\n\t\t\t\t\t\t\texclude\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttarget\n\t\t\t\t},\n\t\t\t\tpageInfo {\n\t\t\t\t\tendCursor,\n\t\t\t\t\thasNextPage\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport class GitHubBranchProtectionProviderManager {\n\n\tprivate readonly disposables = new DisposableStore();\n\tprivate readonly providerDisposables = new DisposableStore();\n\n\tprivate _enabled = false;\n\tprivate set enabled(enabled: boolean) {\n\t\tif (this._enabled === enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (enabled) {\n\t\t\tfor (const repository of this.gitAPI.repositories) {\n\t\t\t\tthis.providerDisposables.add(this.gitAPI.registerBranchProtectionProvider(repository.rootUri, new GitHubBranchProtectionProvider(repository, this.globalState, this.logger, this.telemetryReporter)));\n\t\t\t}\n\t\t} else {\n\t\t\tthis.providerDisposables.dispose();\n\t\t}\n\n\t\tthis._enabled = enabled;\n\t}\n\n\tconstructor(\n\t\tprivate readonly gitAPI: API,\n\t\tprivate readonly globalState: Memento,\n\t\tprivate readonly logger: LogOutputChannel,\n\t\tprivate readonly telemetryReporter: TelemetryReporter) {\n\t\tthis.disposables.add(this.gitAPI.onDidOpenRepository(repository => {\n\t\t\tif (this._enabled) {\n\t\t\t\tthis.providerDisposables.add(gitAPI.registerBranchProtectionProvider(repository.rootUri, new GitHubBranchProtectionProvider(repository, this.globalState, this.logger, this.telemetryReporter)));\n\t\t\t}\n\t\t}));\n\n\t\tthis.disposables.add(workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('github.branchProtection')) {\n\t\t\t\tthis.updateEnablement();\n\t\t\t}\n\t\t}));\n\n\t\tthis.updateEnablement();\n\t}\n\n\tprivate updateEnablement(): void {\n\t\tconst config = workspace.getConfiguration('github', null);\n\t\tthis.enabled = config.get<boolean>('branchProtection', true) === true;\n\t}\n\n\tdispose(): void {\n\t\tthis.enabled = false;\n\t\tthis.disposables.dispose();\n\t}\n\n}\n\nexport class GitHubBranchProtectionProvider implements BranchProtectionProvider {\n\tprivate readonly _onDidChangeBranchProtection = new EventEmitter<Uri>();\n\tonDidChangeBranchProtection = this._onDidChangeBranchProtection.event;\n\n\tprivate branchProtection: BranchProtection[];\n\tprivate readonly globalStateKey = `branchProtection:${this.repository.rootUri.toString()}`;\n\n\tconstructor(\n\t\tprivate readonly repository: Repository,\n\t\tprivate readonly globalState: Memento,\n\t\tprivate readonly logger: LogOutputChannel,\n\t\tprivate readonly telemetryReporter: TelemetryReporter) {\n\t\t// Restore branch protection from global state\n\t\tthis.branchProtection = this.globalState.get<BranchProtection[]>(this.globalStateKey, []);\n\n\t\trepository.status().then(() => {\n\t\t\tauthentication.onDidChangeSessions(e => {\n\t\t\t\tif (e.provider.id === 'github') {\n\t\t\t\t\tthis.updateRepositoryBranchProtection();\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updateRepositoryBranchProtection();\n\t\t});\n\t}\n\n\tprovideBranchProtection(): BranchProtection[] {\n\t\treturn this.branchProtection;\n\t}\n\n\tprivate async getRepositoryDetails(owner: string, repo: string): Promise<GitHubRepository> {\n\t\tconst graphql = await getOctokitGraphql();\n\t\tconst { repository } = await graphql<{ repository: GitHubRepository }>(REPOSITORY_QUERY, { owner, repo });\n\n\t\treturn repository;\n\t}\n\n\tprivate async getRepositoryRulesets(owner: string, repo: string): Promise<RepositoryRuleset[]> {\n\t\tconst rulesets: RepositoryRuleset[] = [];\n\n\t\tlet cursor: string | undefined = undefined;\n\t\tconst graphql = await getOctokitGraphql();\n\n\t\twhile (true) {\n\t\t\tconst { repository } = await graphql<{ repository: GitHubRepository }>(REPOSITORY_RULESETS_QUERY, { owner, repo, cursor });\n\n\t\t\trulesets.push(...(repository.rulesets?.nodes ?? [])\n\t\t\t\t// Active branch ruleset that contains the pull request required rule\n\t\t\t\t.filter(node => node && node.target === 'BRANCH' && node.enforcement === 'ACTIVE' && (node.rules?.totalCount ?? 0) > 0) as RepositoryRuleset[]);\n\n\t\t\tif (repository.rulesets?.pageInfo.hasNextPage) {\n\t\t\t\tcursor = repository.rulesets.pageInfo.endCursor as string | undefined;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn rulesets;\n\t}\n\n\tprivate async updateRepositoryBranchProtection(): Promise<void> {\n\t\tconst branchProtection: BranchProtection[] = [];\n\n\t\ttry {\n\t\t\tfor (const remote of this.repository.state.remotes) {\n\t\t\t\tconst repository = getRepositoryFromUrl(remote.pushUrl ?? remote.fetchUrl ?? '');\n\n\t\t\t\tif (!repository) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Repository details\n\t\t\t\tthis.logger.trace(`[GitHubBranchProtectionProvider][updateRepositoryBranchProtection] Fetching repository details for \"${repository.owner}/${repository.repo}\".`);\n\t\t\t\tconst repositoryDetails = await this.getRepositoryDetails(repository.owner, repository.repo);\n\n\t\t\t\t// Check repository write permission\n\t\t\t\tif (repositoryDetails.viewerPermission !== 'ADMIN' && repositoryDetails.viewerPermission !== 'MAINTAIN' && repositoryDetails.viewerPermission !== 'WRITE') {\n\t\t\t\t\tthis.logger.trace(`[GitHubBranchProtectionProvider][updateRepositoryBranchProtection] Skipping branch protection for \"${repository.owner}/${repository.repo}\" due to missing repository write permission.`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Get repository rulesets\n\t\t\t\tconst branchProtectionRules: BranchProtectionRule[] = [];\n\t\t\t\tconst repositoryRulesets = await this.getRepositoryRulesets(repository.owner, repository.repo);\n\n\t\t\t\tfor (const ruleset of repositoryRulesets) {\n\t\t\t\t\tbranchProtectionRules.push({\n\t\t\t\t\t\tinclude: (ruleset.conditions.refName?.include ?? []).map(r => this.parseRulesetRefName(repositoryDetails, r)),\n\t\t\t\t\t\texclude: (ruleset.conditions.refName?.exclude ?? []).map(r => this.parseRulesetRefName(repositoryDetails, r))\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tbranchProtection.push({ remote: remote.name, rules: branchProtectionRules });\n\t\t\t}\n\n\t\t\tthis.branchProtection = branchProtection;\n\t\t\tthis._onDidChangeBranchProtection.fire(this.repository.rootUri);\n\n\t\t\t// Save branch protection to global state\n\t\t\tawait this.globalState.update(this.globalStateKey, branchProtection);\n\t\t\tthis.logger.trace(`[GitHubBranchProtectionProvider][updateRepositoryBranchProtection] Branch protection for \"${this.repository.rootUri.toString()}\": ${JSON.stringify(branchProtection)}.`);\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"branchProtection\" : {\n\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\"rulesetCount\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Number of repository rulesets\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('branchProtection', undefined, { rulesetCount: this.branchProtection.length });\n\t\t} catch (err) {\n\t\t\tthis.logger.warn(`[GitHubBranchProtectionProvider][updateRepositoryBranchProtection] Failed to update repository branch protection: ${err.message}`);\n\n\t\t\tif (err instanceof AuthenticationError) {\n\t\t\t\t// A GitHub authentication session could be missing if the user has not yet\n\t\t\t\t// signed in with their GitHub account or they have signed out. If there is\n\t\t\t\t// branch protection information we have to clear it.\n\t\t\t\tif (this.branchProtection.length !== 0) {\n\t\t\t\t\tthis.branchProtection = branchProtection;\n\t\t\t\t\tthis._onDidChangeBranchProtection.fire(this.repository.rootUri);\n\n\t\t\t\t\tawait this.globalState.update(this.globalStateKey, undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate parseRulesetRefName(repository: GitHubRepository, refName: string): string {\n\t\tif (refName.startsWith('refs/heads/')) {\n\t\t\treturn refName.substring(11);\n\t\t}\n\n\t\tswitch (refName) {\n\t\t\tcase '~ALL':\n\t\t\t\treturn '**/*';\n\t\t\tcase '~DEFAULT_BRANCH':\n\t\t\t\treturn repository.defaultBranchRef!.name;\n\t\t\tdefault:\n\t\t\t\treturn refName;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/github/src/canonicalUriProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationToken, CanonicalUriProvider, CanonicalUriRequestOptions, Disposable, ProviderResult, Uri, workspace } from 'vscode';\nimport { API } from './typings/git';\n\nconst SUPPORTED_SCHEMES = ['ssh', 'https', 'file'];\n\nexport class GitHubCanonicalUriProvider implements CanonicalUriProvider {\n\n\tprivate disposables: Disposable[] = [];\n\tconstructor(private gitApi: API) {\n\t\tthis.disposables.push(...SUPPORTED_SCHEMES.map((scheme) => workspace.registerCanonicalUriProvider(scheme, this)));\n\t}\n\n\tdispose() { this.disposables.forEach((disposable) => disposable.dispose()); }\n\n\tprovideCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, _token: CancellationToken): ProviderResult<Uri> {\n\t\tif (options.targetScheme !== 'https') {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (uri.scheme) {\n\t\t\tcase 'file': {\n\t\t\t\tconst repository = this.gitApi.getRepository(uri);\n\t\t\t\tconst remote = repository?.state.remotes.find((remote) => remote.name === repository.state.HEAD?.remote)?.pushUrl?.replace(/^(git@[^\\/:]+)(:)/i, 'ssh://$1/');\n\t\t\t\tif (remote) {\n\t\t\t\t\treturn toHttpsGitHubRemote(uri);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn toHttpsGitHubRemote(uri);\n\t\t}\n\t}\n}\n\nfunction toHttpsGitHubRemote(uri: Uri) {\n\tif (uri.scheme === 'ssh' && uri.authority === 'git@github.com') {\n\t\t// if this is a git@github.com URI, return the HTTPS equivalent\n\t\tconst [owner, repo] = (uri.path.endsWith('.git') ? uri.path.slice(0, -4) : uri.path).split('/').filter((segment) => segment.length > 0);\n\t\treturn Uri.parse(`https://github.com/${owner}/${repo}`);\n\t}\n\tif (uri.scheme === 'https' && uri.authority === 'github.com') {\n\t\treturn uri;\n\t}\n\treturn undefined;\n}\n"
  },
  {
    "path": "extensions/github/src/commands.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { API as GitAPI, RefType, Repository } from './typings/git';\nimport { publishRepository } from './publish';\nimport { DisposableStore, getRepositoryFromUrl } from './util';\nimport { LinkContext, getCommitLink, getLink, getVscodeDevHost } from './links';\n\nasync function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean, context: LinkContext, includeRange = true) {\n\ttry {\n\t\tconst permalink = await getLink(gitAPI, useSelection, true, getVscodeDevHost(), 'headlink', context, includeRange);\n\t\tif (permalink) {\n\t\t\treturn vscode.env.clipboard.writeText(permalink);\n\t\t}\n\t} catch (err) {\n\t\tif (!(err instanceof vscode.CancellationError)) {\n\t\t\tvscode.window.showErrorMessage(err.message);\n\t\t}\n\t}\n}\n\nasync function openVscodeDevLink(gitAPI: GitAPI): Promise<vscode.Uri | undefined> {\n\ttry {\n\t\tconst headlink = await getLink(gitAPI, true, false, getVscodeDevHost(), 'headlink');\n\t\treturn headlink ? vscode.Uri.parse(headlink) : undefined;\n\t} catch (err) {\n\t\tif (!(err instanceof vscode.CancellationError)) {\n\t\t\tvscode.window.showErrorMessage(err.message);\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\nasync function openOnGitHub(repository: Repository, commit: string): Promise<void> {\n\t// Get the unique remotes that contain the commit\n\tconst branches = await repository.getBranches({ contains: commit, remote: true });\n\tconst remoteNames = new Set(branches.filter(b => b.type === RefType.RemoteHead && b.remote).map(b => b.remote!));\n\n\t// GitHub remotes that contain the commit\n\tconst remotes = repository.state.remotes\n\t\t.filter(r => remoteNames.has(r.name) && r.fetchUrl && getRepositoryFromUrl(r.fetchUrl));\n\n\tif (remotes.length === 0) {\n\t\tvscode.window.showInformationMessage(vscode.l10n.t('No GitHub remotes found that contain this commit.'));\n\t\treturn;\n\t}\n\n\t// upstream -> origin -> first\n\tconst remote = remotes.find(r => r.name === 'upstream')\n\t\t?? remotes.find(r => r.name === 'origin')\n\t\t?? remotes[0];\n\n\tconst link = getCommitLink(remote.fetchUrl!, commit);\n\tvscode.env.openExternal(vscode.Uri.parse(link));\n}\n\nexport function registerCommands(gitAPI: GitAPI): vscode.Disposable {\n\tconst disposables = new DisposableStore();\n\n\tdisposables.add(vscode.commands.registerCommand('github.publish', async () => {\n\t\ttry {\n\t\t\tpublishRepository(gitAPI);\n\t\t} catch (err) {\n\t\t\tvscode.window.showErrorMessage(err.message);\n\t\t}\n\t}));\n\n\tdisposables.add(vscode.commands.registerCommand('github.copyVscodeDevLink', async (context: LinkContext) => {\n\t\treturn copyVscodeDevLink(gitAPI, true, context);\n\t}));\n\n\tdisposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkFile', async (context: LinkContext) => {\n\t\treturn copyVscodeDevLink(gitAPI, false, context);\n\t}));\n\n\tdisposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkWithoutRange', async (context: LinkContext) => {\n\t\treturn copyVscodeDevLink(gitAPI, true, context, false);\n\t}));\n\n\tdisposables.add(vscode.commands.registerCommand('github.openOnGitHub', async (url: string, historyItemId: string) => {\n\t\tconst link = getCommitLink(url, historyItemId);\n\t\tvscode.env.openExternal(vscode.Uri.parse(link));\n\t}));\n\n\tdisposables.add(vscode.commands.registerCommand('github.graph.openOnGitHub', async (repository: vscode.SourceControl, historyItem: vscode.SourceControlHistoryItem) => {\n\t\tif (!repository || !historyItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst apiRepository = gitAPI.repositories.find(r => r.rootUri.fsPath === repository.rootUri?.fsPath);\n\t\tif (!apiRepository) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait openOnGitHub(apiRepository, historyItem.id);\n\t}));\n\n\tdisposables.add(vscode.commands.registerCommand('github.timeline.openOnGitHub', async (item: vscode.TimelineItem, uri: vscode.Uri) => {\n\t\tif (!item.id || !uri) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst apiRepository = gitAPI.getRepository(uri);\n\t\tif (!apiRepository) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait openOnGitHub(apiRepository, item.id);\n\t}));\n\n\tdisposables.add(vscode.commands.registerCommand('github.openOnVscodeDev', async () => {\n\t\treturn openVscodeDevLink(gitAPI);\n\t}));\n\n\treturn disposables;\n}\n"
  },
  {
    "path": "extensions/github/src/credentialProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CredentialsProvider, Credentials, API as GitAPI } from './typings/git';\nimport { workspace, Uri, Disposable } from 'vscode';\nimport { getSession } from './auth';\n\nconst EmptyDisposable: Disposable = { dispose() { } };\n\nclass GitHubCredentialProvider implements CredentialsProvider {\n\n\tasync getCredentials(host: Uri): Promise<Credentials | undefined> {\n\t\tif (!/github\\.com/i.test(host.authority)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst session = await getSession();\n\t\treturn { username: session.account.id, password: session.accessToken };\n\t}\n}\n\nexport class GithubCredentialProviderManager {\n\n\tprivate providerDisposable: Disposable = EmptyDisposable;\n\tprivate readonly disposable: Disposable;\n\n\tprivate _enabled = false;\n\tprivate set enabled(enabled: boolean) {\n\t\tif (this._enabled === enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._enabled = enabled;\n\n\t\tif (enabled) {\n\t\t\tthis.providerDisposable = this.gitAPI.registerCredentialsProvider(new GitHubCredentialProvider());\n\t\t} else {\n\t\t\tthis.providerDisposable.dispose();\n\t\t}\n\t}\n\n\tconstructor(private gitAPI: GitAPI) {\n\t\tthis.disposable = workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('github')) {\n\t\t\t\tthis.refresh();\n\t\t\t}\n\t\t});\n\n\t\tthis.refresh();\n\t}\n\n\tprivate refresh(): void {\n\t\tconst config = workspace.getConfiguration('github', null);\n\t\tconst enabled = config.get<boolean>('gitAuthentication', true);\n\t\tthis.enabled = !!enabled;\n\t}\n\n\tdispose(): void {\n\t\tthis.enabled = false;\n\t\tthis.disposable.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/github/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { commands, Disposable, ExtensionContext, extensions, l10n, LogLevel, LogOutputChannel, window } from 'vscode';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { GithubRemoteSourceProvider } from './remoteSourceProvider';\nimport { API, GitExtension } from './typings/git';\nimport { registerCommands } from './commands';\nimport { GithubCredentialProviderManager } from './credentialProvider';\nimport { DisposableStore, repositoryHasGitHubRemote } from './util';\nimport { GithubPushErrorHandler } from './pushErrorHandler';\nimport { GitBaseExtension } from './typings/git-base';\nimport { GithubRemoteSourcePublisher } from './remoteSourcePublisher';\nimport { GitHubBranchProtectionProviderManager } from './branchProtection';\nimport { GitHubCanonicalUriProvider } from './canonicalUriProvider';\nimport { VscodeDevShareProvider } from './shareProviders';\nimport { GitHubSourceControlHistoryItemDetailsProvider } from './historyItemDetailsProvider';\n\nexport function activate(context: ExtensionContext): void {\n\tconst disposables: Disposable[] = [];\n\tcontext.subscriptions.push(new Disposable(() => Disposable.from(...disposables).dispose()));\n\n\tconst logger = window.createOutputChannel('GitHub', { log: true });\n\tdisposables.push(logger);\n\n\tconst onDidChangeLogLevel = (logLevel: LogLevel) => {\n\t\tlogger.appendLine(l10n.t('Log level: {0}', LogLevel[logLevel]));\n\t};\n\tdisposables.push(logger.onDidChangeLogLevel(onDidChangeLogLevel));\n\tonDidChangeLogLevel(logger.logLevel);\n\n\tconst { aiKey } = require('../package.json') as { aiKey: string };\n\tconst telemetryReporter = new TelemetryReporter(aiKey);\n\tdisposables.push(telemetryReporter);\n\n\tdisposables.push(initializeGitBaseExtension());\n\tdisposables.push(initializeGitExtension(context, telemetryReporter, logger));\n}\n\nfunction initializeGitBaseExtension(): Disposable {\n\tconst disposables = new DisposableStore();\n\n\tconst initialize = () => {\n\t\ttry {\n\t\t\tconst gitBaseAPI = gitBaseExtension.getAPI(1);\n\n\t\t\tdisposables.add(gitBaseAPI.registerRemoteSourceProvider(new GithubRemoteSourceProvider()));\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Could not initialize GitHub extension');\n\t\t\tconsole.warn(err);\n\t\t}\n\t};\n\n\tconst onDidChangeGitBaseExtensionEnablement = (enabled: boolean) => {\n\t\tif (!enabled) {\n\t\t\tdisposables.dispose();\n\t\t} else {\n\t\t\tinitialize();\n\t\t}\n\t};\n\n\tconst gitBaseExtension = extensions.getExtension<GitBaseExtension>('vscode.git-base')!.exports;\n\tdisposables.add(gitBaseExtension.onDidChangeEnablement(onDidChangeGitBaseExtensionEnablement));\n\tonDidChangeGitBaseExtensionEnablement(gitBaseExtension.enabled);\n\n\treturn disposables;\n}\n\nfunction setGitHubContext(gitAPI: API, disposables: DisposableStore) {\n\tif (gitAPI.repositories.find(repo => repositoryHasGitHubRemote(repo))) {\n\t\tcommands.executeCommand('setContext', 'github.hasGitHubRepo', true);\n\t} else {\n\t\tconst openRepoDisposable = gitAPI.onDidOpenRepository(async e => {\n\t\t\tawait e.status();\n\t\t\tif (repositoryHasGitHubRemote(e)) {\n\t\t\t\tcommands.executeCommand('setContext', 'github.hasGitHubRepo', true);\n\t\t\t\topenRepoDisposable.dispose();\n\t\t\t}\n\t\t});\n\t\tdisposables.add(openRepoDisposable);\n\t}\n}\n\nfunction initializeGitExtension(context: ExtensionContext, telemetryReporter: TelemetryReporter, logger: LogOutputChannel): Disposable {\n\tconst disposables = new DisposableStore();\n\n\tlet gitExtension = extensions.getExtension<GitExtension>('vscode.git');\n\n\tconst initialize = () => {\n\t\tgitExtension!.activate()\n\t\t\t.then(extension => {\n\t\t\t\tconst onDidChangeGitExtensionEnablement = (enabled: boolean) => {\n\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\tconst gitAPI = extension.getAPI(1);\n\n\t\t\t\t\t\tdisposables.add(registerCommands(gitAPI));\n\t\t\t\t\t\tdisposables.add(new GithubCredentialProviderManager(gitAPI));\n\t\t\t\t\t\tdisposables.add(new GitHubBranchProtectionProviderManager(gitAPI, context.globalState, logger, telemetryReporter));\n\t\t\t\t\t\tdisposables.add(gitAPI.registerPushErrorHandler(new GithubPushErrorHandler(telemetryReporter)));\n\t\t\t\t\t\tdisposables.add(gitAPI.registerRemoteSourcePublisher(new GithubRemoteSourcePublisher(gitAPI)));\n\t\t\t\t\t\tdisposables.add(gitAPI.registerSourceControlHistoryItemDetailsProvider(new GitHubSourceControlHistoryItemDetailsProvider(gitAPI, logger)));\n\t\t\t\t\t\tdisposables.add(new GitHubCanonicalUriProvider(gitAPI));\n\t\t\t\t\t\tdisposables.add(new VscodeDevShareProvider(gitAPI));\n\t\t\t\t\t\tsetGitHubContext(gitAPI, disposables);\n\n\t\t\t\t\t\tcommands.executeCommand('setContext', 'git-base.gitEnabled', true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdisposables.dispose();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tdisposables.add(extension.onDidChangeEnablement(onDidChangeGitExtensionEnablement));\n\t\t\t\tonDidChangeGitExtensionEnablement(extension.enabled);\n\t\t\t});\n\t};\n\n\tif (gitExtension) {\n\t\tinitialize();\n\t} else {\n\t\tconst listener = extensions.onDidChange(() => {\n\t\t\tif (!gitExtension && extensions.getExtension<GitExtension>('vscode.git')) {\n\t\t\t\tgitExtension = extensions.getExtension<GitExtension>('vscode.git');\n\t\t\t\tinitialize();\n\t\t\t\tlistener.dispose();\n\t\t\t}\n\t\t});\n\t\tdisposables.add(listener);\n\t}\n\n\treturn disposables;\n}\n"
  },
  {
    "path": "extensions/github/src/historyItemDetailsProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { authentication, Command, l10n, LogOutputChannel, workspace } from 'vscode';\nimport { Commit, Repository as GitHubRepository, Maybe } from '@octokit/graphql-schema';\nimport { API, AvatarQuery, AvatarQueryCommit, Repository, SourceControlHistoryItemDetailsProvider } from './typings/git';\nimport { DisposableStore, getRepositoryDefaultRemote, getRepositoryDefaultRemoteUrl, getRepositoryFromUrl, groupBy, sequentialize } from './util';\nimport { AuthenticationError, getOctokitGraphql } from './auth';\nimport { getAvatarLink } from './links';\n\nconst ISSUE_EXPRESSION = /(([A-Za-z0-9_.\\-]+)\\/([A-Za-z0-9_.\\-]+))?(#|GH-)([1-9][0-9]*)($|\\b)/g;\n\nconst ASSIGNABLE_USERS_QUERY = `\n\tquery assignableUsers($owner: String!, $repo: String!) {\n\t\trepository(owner: $owner, name: $repo) {\n\t\t\tassignableUsers(first: 100) {\n\t\t\t\tnodes {\n\t\t\t\t\tid\n\t\t\t\t\tlogin\n\t\t\t\t\tname\n\t\t\t\t\temail\n\t\t\t\t\tavatarUrl\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nconst COMMIT_AUTHOR_QUERY = `\n\tquery commitAuthor($owner: String!, $repo: String!, $commit: String!) {\n\t\trepository(owner: $owner, name: $repo) {\n\t\t\tobject(expression: $commit) {\n\t\t\t\t... on Commit {\n\t\t\t\t\tauthor {\n\t\t\t\t\t\tname\n\t\t\t\t\t\temail\n\t\t\t\t\t\tavatarUrl\n\t\t\t\t\t\tuser {\n\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\tlogin\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\ninterface GitHubRepositoryStore {\n\treadonly users: GitHubUser[];\n\treadonly commits: Set<string>;\n}\n\ninterface GitHubUser {\n\treadonly id: string;\n\treadonly login: string;\n\treadonly name?: Maybe<string>;\n\treadonly email: string;\n\treadonly avatarUrl: string;\n}\n\nfunction getUserIdFromNoReplyEmail(email: string | undefined): string | undefined {\n\tconst match = email?.match(/^([0-9]+)\\+[^@]+@users\\.noreply\\.github\\.com$/);\n\treturn match?.[1];\n}\n\nfunction compareAvatarQuery(a: AvatarQueryCommit, b: AvatarQueryCommit): number {\n\t// Email\n\tconst emailComparison = (a.authorEmail ?? '').localeCompare(b.authorEmail ?? '');\n\tif (emailComparison !== 0) {\n\t\treturn emailComparison;\n\t}\n\n\t// Name\n\treturn (a.authorName ?? '').localeCompare(b.authorName ?? '');\n}\n\nexport class GitHubSourceControlHistoryItemDetailsProvider implements SourceControlHistoryItemDetailsProvider {\n\tprivate _isUserAuthenticated = true;\n\tprivate readonly _store = new Map<string, GitHubRepositoryStore>();\n\tprivate readonly _disposables = new DisposableStore();\n\n\tconstructor(private readonly _gitAPI: API, private readonly _logger: LogOutputChannel) {\n\t\tthis._disposables.add(this._gitAPI.onDidCloseRepository(repository => this._onDidCloseRepository(repository)));\n\n\t\tthis._disposables.add(authentication.onDidChangeSessions(e => {\n\t\t\tif (e.provider.id === 'github') {\n\t\t\t\tthis._isUserAuthenticated = true;\n\t\t\t}\n\t\t}));\n\n\t\tthis._disposables.add(workspace.onDidChangeConfiguration(e => {\n\t\t\tif (!e.affectsConfiguration('github.showAvatar')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._store.clear();\n\t\t}));\n\t}\n\n\tasync provideAvatar(repository: Repository, query: AvatarQuery): Promise<Map<string, string | undefined> | undefined> {\n\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][provideAvatar] Avatar resolution for ${query.commits.length} commit(s) in ${repository.rootUri.fsPath}.`);\n\n\t\tconst config = workspace.getConfiguration('github', repository.rootUri);\n\t\tconst showAvatar = config.get<boolean>('showAvatar', true) === true;\n\n\t\tif (!this._isUserAuthenticated || !showAvatar) {\n\t\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][provideAvatar] Avatar resolution is disabled. (${showAvatar === false ? 'setting' : 'auth'})`);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst descriptor = getRepositoryDefaultRemote(repository);\n\t\tif (!descriptor) {\n\t\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][provideAvatar] Repository does not have a GitHub remote.`);\n\t\t\treturn undefined;\n\t\t}\n\n\n\t\ttry {\n\t\t\tconst logs = { cached: 0, email: 0, github: 0, incomplete: 0 };\n\n\t\t\t// Warm up the in-memory cache with the first page\n\t\t\t// (100 users) from this list of assignable users\n\t\t\tawait this._loadAssignableUsers(descriptor);\n\n\t\t\tconst repositoryStore = this._store.get(this._getRepositoryKey(descriptor));\n\t\t\tif (!repositoryStore) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t// Group the query by author\n\t\t\tconst authorQuery = groupBy<AvatarQueryCommit>(query.commits, compareAvatarQuery);\n\n\t\t\tconst results = new Map<string, string | undefined>();\n\t\t\tawait Promise.all(authorQuery.map(async commits => {\n\t\t\t\tif (commits.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Query the in-memory cache for the user\n\t\t\t\tconst avatarUrl = repositoryStore.users.find(\n\t\t\t\t\tuser => user.email === commits[0].authorEmail || user.name === commits[0].authorName)?.avatarUrl;\n\n\t\t\t\t// Cache hit\n\t\t\t\tif (avatarUrl) {\n\t\t\t\t\t// Add avatar for each commit\n\t\t\t\t\tlogs.cached += commits.length;\n\t\t\t\t\tcommits.forEach(({ hash }) => results.set(hash, `${avatarUrl}&s=${query.size}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check if any of the commit are being tracked in the list\n\t\t\t\t// of known commits that have incomplte author information\n\t\t\t\tif (commits.some(({ hash }) => repositoryStore.commits.has(hash))) {\n\t\t\t\t\tcommits.forEach(({ hash }) => results.set(hash, undefined));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Try to extract the user identifier from GitHub no-reply emails\n\t\t\t\tconst userIdFromEmail = getUserIdFromNoReplyEmail(commits[0].authorEmail);\n\t\t\t\tif (userIdFromEmail) {\n\t\t\t\t\tlogs.email += commits.length;\n\t\t\t\t\tconst avatarUrl = getAvatarLink(userIdFromEmail, query.size);\n\t\t\t\t\tcommits.forEach(({ hash }) => results.set(hash, avatarUrl));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Get the commit details\n\t\t\t\tconst commitAuthor = await this._getCommitAuthor(descriptor, commits[0].hash);\n\t\t\t\tif (!commitAuthor) {\n\t\t\t\t\t// The commit has incomplete author information, so\n\t\t\t\t\t// we should not try to query the authors details again\n\t\t\t\t\tlogs.incomplete += commits.length;\n\t\t\t\t\tfor (const { hash } of commits) {\n\t\t\t\t\t\trepositoryStore.commits.add(hash);\n\t\t\t\t\t\tresults.set(hash, undefined);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Save the user to the cache\n\t\t\t\trepositoryStore.users.push(commitAuthor);\n\n\t\t\t\t// Add avatar for each commit\n\t\t\t\tlogs.github += commits.length;\n\t\t\t\tcommits.forEach(({ hash }) => results.set(hash, `${commitAuthor.avatarUrl}&s=${query.size}`));\n\t\t\t}));\n\n\t\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][provideAvatar] Avatar resolution for ${query.commits.length} commit(s) in ${repository.rootUri.fsPath} complete: ${JSON.stringify(logs)}.`);\n\n\t\t\treturn results;\n\t\t} catch (err) {\n\t\t\t// A GitHub authentication session could be missing if the user has not yet\n\t\t\t// signed in with their GitHub account or they have signed out. Disable the\n\t\t\t// avatar resolution until the user signes in with their GitHub account.\n\t\t\tif (err instanceof AuthenticationError) {\n\t\t\t\tthis._isUserAuthenticated = false;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync provideHoverCommands(repository: Repository): Promise<Command[] | undefined> {\n\t\tconst url = getRepositoryDefaultRemoteUrl(repository);\n\t\tif (!url) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn [{\n\t\t\ttitle: l10n.t('{0} Open on GitHub', '$(github)'),\n\t\t\ttooltip: l10n.t('Open on GitHub'),\n\t\t\tcommand: 'github.openOnGitHub',\n\t\t\targuments: [url]\n\t\t}];\n\t}\n\n\tasync provideMessageLinks(repository: Repository, message: string): Promise<string | undefined> {\n\t\tconst descriptor = getRepositoryDefaultRemote(repository);\n\t\tif (!descriptor) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn message.replace(\n\t\t\tISSUE_EXPRESSION,\n\t\t\t(match, _group1, owner: string | undefined, repo: string | undefined, _group2, number: string | undefined) => {\n\t\t\t\tif (!number || Number.isNaN(parseInt(number))) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\n\t\t\t\tconst label = owner && repo\n\t\t\t\t\t? `${owner}/${repo}#${number}`\n\t\t\t\t\t: `#${number}`;\n\n\t\t\t\towner = owner ?? descriptor.owner;\n\t\t\t\trepo = repo ?? descriptor.repo;\n\n\t\t\t\treturn `[${label}](https://github.com/${owner}/${repo}/issues/${number})`;\n\t\t\t});\n\t}\n\n\tprivate _onDidCloseRepository(repository: Repository) {\n\t\tfor (const remote of repository.state.remotes) {\n\t\t\tif (!remote.fetchUrl) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst repository = getRepositoryFromUrl(remote.fetchUrl);\n\t\t\tif (!repository) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis._store.delete(this._getRepositoryKey(repository));\n\t\t}\n\t}\n\n\t@sequentialize\n\tprivate async _loadAssignableUsers(descriptor: { owner: string; repo: string }): Promise<void> {\n\t\tif (this._store.has(this._getRepositoryKey(descriptor))) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][_loadAssignableUsers] Querying assignable user(s) for ${descriptor.owner}/${descriptor.repo}.`);\n\n\t\ttry {\n\t\t\tconst graphql = await getOctokitGraphql();\n\t\t\tconst { repository } = await graphql<{ repository: GitHubRepository }>(ASSIGNABLE_USERS_QUERY, descriptor);\n\n\t\t\tconst users: GitHubUser[] = [];\n\t\t\tfor (const node of repository.assignableUsers.nodes ?? []) {\n\t\t\t\tif (!node) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tusers.push({\n\t\t\t\t\tid: node.id,\n\t\t\t\t\tlogin: node.login,\n\t\t\t\t\tname: node.name,\n\t\t\t\t\temail: node.email,\n\t\t\t\t\tavatarUrl: node.avatarUrl,\n\t\t\t\t} satisfies GitHubUser);\n\t\t\t}\n\n\t\t\tthis._store.set(this._getRepositoryKey(descriptor), { users, commits: new Set() });\n\t\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][_loadAssignableUsers] Successfully queried assignable user(s) for ${descriptor.owner}/${descriptor.repo}: ${users.length} user(s).`);\n\t\t} catch (err) {\n\t\t\tthis._logger.warn(`[GitHubSourceControlHistoryItemDetailsProvider][_loadAssignableUsers] Failed to load assignable user(s) for ${descriptor.owner}/${descriptor.repo}: ${err}`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate async _getCommitAuthor(descriptor: { owner: string; repo: string }, commit: string): Promise<GitHubUser | undefined> {\n\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][_getCommitAuthor] Querying commit author for ${descriptor.owner}/${descriptor.repo}/${commit}.`);\n\n\t\ttry {\n\t\t\tconst graphql = await getOctokitGraphql();\n\t\t\tconst { repository } = await graphql<{ repository: GitHubRepository }>(COMMIT_AUTHOR_QUERY, { ...descriptor, commit });\n\n\t\t\tconst commitAuthor = (repository.object as Commit).author;\n\t\t\tif (!commitAuthor?.user?.id || !commitAuthor.user?.login ||\n\t\t\t\t!commitAuthor?.name || !commitAuthor?.email || !commitAuthor?.avatarUrl) {\n\t\t\t\tthis._logger.info(`[GitHubSourceControlHistoryItemDetailsProvider][_getCommitAuthor] Incomplete commit author for ${descriptor.owner}/${descriptor.repo}/${commit}: ${JSON.stringify(repository.object)}`);\n\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst user = {\n\t\t\t\tid: commitAuthor.user.id,\n\t\t\t\tlogin: commitAuthor.user.login,\n\t\t\t\tname: commitAuthor.name,\n\t\t\t\temail: commitAuthor.email,\n\t\t\t\tavatarUrl: commitAuthor.avatarUrl,\n\t\t\t} satisfies GitHubUser;\n\n\t\t\tthis._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][_getCommitAuthor] Successfully queried commit author for ${descriptor.owner}/${descriptor.repo}/${commit}: ${user.login}.`);\n\t\t\treturn user;\n\t\t} catch (err) {\n\t\t\tthis._logger.warn(`[GitHubSourceControlHistoryItemDetailsProvider][_getCommitAuthor] Failed to get commit author for ${descriptor.owner}/${descriptor.repo}/${commit}: ${err}`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate _getRepositoryKey(descriptor: { owner: string; repo: string }): string {\n\t\treturn `${descriptor.owner}/${descriptor.repo}`;\n\t}\n\n\tdispose(): void {\n\t\tthis._disposables.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/github/src/links.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { API as GitAPI, RefType, Repository } from './typings/git';\nimport { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util';\n\nexport function isFileInRepo(repository: Repository, file: vscode.Uri): boolean {\n\treturn file.path.toLowerCase() === repository.rootUri.path.toLowerCase() ||\n\t\t(file.path.toLowerCase().startsWith(repository.rootUri.path.toLowerCase()) &&\n\t\t\tfile.path.substring(repository.rootUri.path.length).startsWith('/'));\n}\n\nexport function getRepositoryForFile(gitAPI: GitAPI, file: vscode.Uri): Repository | undefined {\n\tfor (const repository of gitAPI.repositories) {\n\t\tif (isFileInRepo(repository, file)) {\n\t\t\treturn repository;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nenum LinkType {\n\tFile = 1,\n\tNotebook = 2\n}\n\ninterface IFilePosition {\n\ttype: LinkType.File;\n\turi: vscode.Uri;\n\trange: vscode.Range | undefined;\n}\n\ninterface INotebookPosition {\n\ttype: LinkType.Notebook;\n\turi: vscode.Uri;\n\tcellIndex: number;\n\trange: vscode.Range | undefined;\n}\n\ninterface EditorLineNumberContext {\n\turi: vscode.Uri;\n\tlineNumber: number;\n}\nexport type LinkContext = vscode.Uri | EditorLineNumberContext | undefined;\n\nfunction extractContext(context: LinkContext): { fileUri: vscode.Uri | undefined; lineNumber: number | undefined } {\n\tif (context instanceof vscode.Uri) {\n\t\treturn { fileUri: context, lineNumber: undefined };\n\t} else if (context !== undefined && 'lineNumber' in context && 'uri' in context) {\n\t\treturn { fileUri: context.uri, lineNumber: context.lineNumber };\n\t} else {\n\t\treturn { fileUri: undefined, lineNumber: undefined };\n\t}\n}\n\nfunction getFileAndPosition(context: LinkContext): IFilePosition | INotebookPosition | undefined {\n\tlet range: vscode.Range | undefined;\n\n\tconst { fileUri, lineNumber } = extractContext(context);\n\tconst uri = fileUri ?? vscode.window.activeTextEditor?.document.uri;\n\n\tif (uri) {\n\t\tif (uri.scheme === 'vscode-notebook-cell' && vscode.window.activeNotebookEditor?.notebook.uri.fsPath === uri.fsPath) {\n\t\t\t// if the active editor is a notebook editor and the focus is inside any a cell text editor\n\t\t\t// generate deep link for text selection for the notebook cell.\n\t\t\tconst cell = vscode.window.activeNotebookEditor.notebook.getCells().find(cell => cell.document.uri.fragment === uri?.fragment);\n\t\t\tconst cellIndex = cell?.index ?? vscode.window.activeNotebookEditor.selection.start;\n\n\t\t\tconst range = getRangeOrSelection(lineNumber);\n\t\t\treturn { type: LinkType.Notebook, uri, cellIndex, range };\n\t\t} else {\n\t\t\t// the active editor is a text editor\n\t\t\trange = getRangeOrSelection(lineNumber);\n\t\t\treturn { type: LinkType.File, uri, range };\n\t\t}\n\t}\n\n\tif (vscode.window.activeNotebookEditor) {\n\t\t// if the active editor is a notebook editor but the focus is not inside any cell text editor, generate deep link for the cell selection in the notebook document.\n\t\treturn { type: LinkType.Notebook, uri: vscode.window.activeNotebookEditor.notebook.uri, cellIndex: vscode.window.activeNotebookEditor.selection.start, range: undefined };\n\t}\n\n\treturn undefined;\n}\n\nfunction getRangeOrSelection(lineNumber: number | undefined) {\n\treturn lineNumber !== undefined && (!vscode.window.activeTextEditor || vscode.window.activeTextEditor.selection.isEmpty || !vscode.window.activeTextEditor.selection.contains(new vscode.Position(lineNumber - 1, 0)))\n\t\t? new vscode.Range(lineNumber - 1, 0, lineNumber - 1, 1)\n\t\t: vscode.window.activeTextEditor?.selection;\n}\n\nexport function rangeString(range: vscode.Range | undefined) {\n\tif (!range) {\n\t\treturn '';\n\t}\n\tlet hash = `#L${range.start.line + 1}`;\n\tif (range.start.line !== range.end.line) {\n\t\thash += `-L${range.end.line + 1}`;\n\t}\n\treturn hash;\n}\n\nexport function notebookCellRangeString(index: number | undefined, range: vscode.Range | undefined) {\n\tif (index === undefined) {\n\t\treturn '';\n\t}\n\n\tif (!range) {\n\t\treturn `#C${index + 1}`;\n\t}\n\n\tlet hash = `#C${index + 1}:L${range.start.line + 1}`;\n\tif (range.start.line !== range.end.line) {\n\t\thash += `-L${range.end.line + 1}`;\n\t}\n\treturn hash;\n}\n\nexport function encodeURIComponentExceptSlashes(path: string) {\n\t// There may be special characters like # and whitespace in the path.\n\t// These characters are not escaped by encodeURI(), so it is not sufficient to\n\t// feed the full URI to encodeURI().\n\t// Additonally, if we feed the full path into encodeURIComponent(),\n\t// this will also encode the path separators, leading to an invalid path.\n\t// Therefore, split on the path separator and encode each segment individually.\n\treturn path.split('/').map((segment) => encodeURIComponent(segment)).join('/');\n}\n\nexport async function getLink(gitAPI: GitAPI, useSelection: boolean, shouldEnsurePublished: boolean, hostPrefix?: string, linkType: 'permalink' | 'headlink' = 'permalink', context?: LinkContext, useRange?: boolean): Promise<string | undefined> {\n\thostPrefix = hostPrefix ?? 'https://github.com';\n\tconst fileAndPosition = getFileAndPosition(context);\n\tconst fileUri = fileAndPosition?.uri;\n\n\t// Use the first repo if we cannot determine a repo from the uri.\n\tconst githubRepository = gitAPI.repositories.find(repo => repositoryHasGitHubRemote(repo));\n\tconst gitRepo = (fileUri ? getRepositoryForFile(gitAPI, fileUri) : githubRepository) ?? githubRepository;\n\tif (!gitRepo) {\n\t\treturn;\n\t}\n\n\tif (shouldEnsurePublished && fileUri) {\n\t\tawait ensurePublished(gitRepo, fileUri);\n\t}\n\n\tlet repo: { owner: string; repo: string } | undefined;\n\tgitRepo.state.remotes.find(remote => {\n\t\tif (remote.fetchUrl) {\n\t\t\tconst foundRepo = getRepositoryFromUrl(remote.fetchUrl);\n\t\t\tif (foundRepo && (remote.name === gitRepo.state.HEAD?.upstream?.remote)) {\n\t\t\t\trepo = foundRepo;\n\t\t\t\treturn;\n\t\t\t} else if (foundRepo && !repo) {\n\t\t\t\trepo = foundRepo;\n\t\t\t}\n\t\t}\n\t\treturn;\n\t});\n\tif (!repo) {\n\t\treturn;\n\t}\n\n\tconst blobSegment = gitRepo.state.HEAD ? (`/blob/${linkType === 'headlink' && gitRepo.state.HEAD.name ? encodeURIComponentExceptSlashes(gitRepo.state.HEAD.name) : gitRepo.state.HEAD?.commit}`) : '';\n\tconst uriWithoutFileSegments = `${hostPrefix}/${repo.owner}/${repo.repo}${blobSegment}`;\n\tif (!fileUri) {\n\t\treturn uriWithoutFileSegments;\n\t}\n\n\tconst encodedFilePath = encodeURIComponentExceptSlashes(fileUri.path.substring(gitRepo.rootUri.path.length));\n\tconst fileSegments = fileAndPosition.type === LinkType.File\n\t\t? (useSelection ? `${encodedFilePath}${useRange ? rangeString(fileAndPosition.range) : ''}` : '')\n\t\t: (useSelection ? `${encodedFilePath}${useRange ? notebookCellRangeString(fileAndPosition.cellIndex, fileAndPosition.range) : ''}` : '');\n\n\treturn `${uriWithoutFileSegments}${fileSegments}`;\n}\n\nexport function getAvatarLink(userId: string, size: number): string {\n\treturn `https://avatars.githubusercontent.com/u/${userId}?s=${size}`;\n}\n\nexport function getBranchLink(url: string, branch: string, hostPrefix: string = 'https://github.com') {\n\tconst repo = getRepositoryFromUrl(url);\n\tif (!repo) {\n\t\tthrow new Error('Invalid repository URL provided');\n\t}\n\n\tbranch = encodeURIComponentExceptSlashes(branch);\n\treturn `${hostPrefix}/${repo.owner}/${repo.repo}/tree/${branch}`;\n}\n\nexport function getCommitLink(url: string, hash: string, hostPrefix: string = 'https://github.com') {\n\tconst repo = getRepositoryFromUrl(url);\n\tif (!repo) {\n\t\tthrow new Error('Invalid repository URL provided');\n\t}\n\n\treturn `${hostPrefix}/${repo.owner}/${repo.repo}/commit/${hash}`;\n}\n\nexport function getVscodeDevHost(): string {\n\treturn `https://${vscode.env.appName.toLowerCase().includes('insiders') ? 'insiders.' : ''}vscode.dev/github`;\n}\n\nexport async function ensurePublished(repository: Repository, file: vscode.Uri) {\n\tawait repository.status();\n\n\tif ((repository.state.HEAD?.type === RefType.Head || repository.state.HEAD?.type === RefType.Tag)\n\t\t// If HEAD is not published, make sure it is\n\t\t&& !repository?.state.HEAD?.upstream\n\t) {\n\t\tconst publishBranch = vscode.l10n.t('Publish Branch & Copy Link');\n\t\tconst selection = await vscode.window.showInformationMessage(\n\t\t\tvscode.l10n.t('The current branch is not published to the remote. Would you like to publish your branch before copying a link?'),\n\t\t\t{ modal: true },\n\t\t\tpublishBranch\n\t\t);\n\t\tif (selection !== publishBranch) {\n\t\t\tthrow new vscode.CancellationError();\n\t\t}\n\n\t\tawait vscode.commands.executeCommand('git.publish');\n\t}\n\n\tconst uncommittedChanges = [...repository.state.workingTreeChanges, ...repository.state.indexChanges];\n\tif (uncommittedChanges.find((c) => c.uri.toString() === file.toString()) && !repository.state.HEAD?.ahead && !repository.state.HEAD?.behind) {\n\t\tconst commitChanges = vscode.l10n.t('Commit Changes');\n\t\tconst copyAnyway = vscode.l10n.t('Copy Anyway');\n\t\tconst selection = await vscode.window.showWarningMessage(\n\t\t\tvscode.l10n.t('The current file has uncommitted changes. Please commit your changes before copying a link.'),\n\t\t\t{ modal: true },\n\t\t\tcommitChanges,\n\t\t\tcopyAnyway\n\t\t);\n\n\t\tif (selection !== copyAnyway) {\n\t\t\t// Focus the SCM view\n\t\t\tvscode.commands.executeCommand('workbench.view.scm');\n\t\t\tthrow new vscode.CancellationError();\n\t\t}\n\t} else if (repository.state.HEAD?.ahead) {\n\t\tconst pushCommits = vscode.l10n.t('Push Commits & Copy Link');\n\t\tconst selection = await vscode.window.showInformationMessage(\n\t\t\tvscode.l10n.t('The current branch has unpublished commits. Would you like to push your commits before copying a link?'),\n\t\t\t{ modal: true },\n\t\t\tpushCommits\n\t\t);\n\t\tif (selection !== pushCommits) {\n\t\t\tthrow new vscode.CancellationError();\n\t\t}\n\n\t\tawait repository.push();\n\t} else if (repository.state.HEAD?.behind) {\n\t\tconst pull = vscode.l10n.t('Pull Changes & Copy Link');\n\t\tconst selection = await vscode.window.showInformationMessage(\n\t\t\tvscode.l10n.t('The current branch is not up to date. Would you like to pull before copying a link?'),\n\t\t\t{ modal: true },\n\t\t\tpull\n\t\t);\n\t\tif (selection !== pull) {\n\t\t\tthrow new vscode.CancellationError();\n\t\t}\n\n\t\tawait repository.pull();\n\t}\n\n\tawait repository.status();\n}\n"
  },
  {
    "path": "extensions/github/src/publish.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { API as GitAPI, Repository } from './typings/git';\nimport { getOctokit } from './auth';\nimport { TextEncoder } from 'util';\nimport { basename } from 'path';\nimport { Octokit } from '@octokit/rest';\nimport { isInCodespaces } from './pushErrorHandler';\n\nfunction sanitizeRepositoryName(value: string): string {\n\treturn value.trim().replace(/[^a-z0-9_.]/ig, '-');\n}\n\nfunction getPick<T extends vscode.QuickPickItem>(quickpick: vscode.QuickPick<T>): Promise<T | undefined> {\n\treturn Promise.race<T | undefined>([\n\t\tnew Promise<T>(c => quickpick.onDidAccept(() => quickpick.selectedItems.length > 0 && c(quickpick.selectedItems[0]))),\n\t\tnew Promise<undefined>(c => quickpick.onDidHide(() => c(undefined)))\n\t]);\n}\n\nexport async function publishRepository(gitAPI: GitAPI, repository?: Repository): Promise<void> {\n\tif (!vscode.workspace.workspaceFolders?.length) {\n\t\treturn;\n\t}\n\n\tlet folder: vscode.Uri;\n\n\tif (repository) {\n\t\tfolder = repository.rootUri;\n\t} else if (gitAPI.repositories.length === 1) {\n\t\trepository = gitAPI.repositories[0];\n\t\tfolder = repository.rootUri;\n\t} else if (vscode.workspace.workspaceFolders.length === 1) {\n\t\tfolder = vscode.workspace.workspaceFolders[0].uri;\n\t} else {\n\t\tconst picks = vscode.workspace.workspaceFolders.map(folder => ({ label: folder.name, folder }));\n\t\tconst placeHolder = vscode.l10n.t('Pick a folder to publish to GitHub');\n\t\tconst pick = await vscode.window.showQuickPick(picks, { placeHolder });\n\n\t\tif (!pick) {\n\t\t\treturn;\n\t\t}\n\n\t\tfolder = pick.folder.uri;\n\t}\n\n\tlet quickpick = vscode.window.createQuickPick<vscode.QuickPickItem & { repo?: string; auth?: 'https' | 'ssh'; isPrivate?: boolean }>();\n\tquickpick.ignoreFocusOut = true;\n\n\tquickpick.placeholder = 'Repository Name';\n\tquickpick.value = basename(folder.fsPath);\n\tquickpick.show();\n\tquickpick.busy = true;\n\n\tlet owner: string;\n\tlet octokit: Octokit;\n\ttry {\n\t\toctokit = await getOctokit();\n\t\tconst user = await octokit.users.getAuthenticated({});\n\t\towner = user.data.login;\n\t} catch (e) {\n\t\t// User has cancelled sign in\n\t\tquickpick.dispose();\n\t\treturn;\n\t}\n\n\tquickpick.busy = false;\n\n\tlet repo: string | undefined;\n\tlet isPrivate: boolean;\n\n\tconst onDidChangeValue = async () => {\n\t\tconst sanitizedRepo = sanitizeRepositoryName(quickpick.value);\n\n\t\tif (!sanitizedRepo) {\n\t\t\tquickpick.items = [];\n\t\t} else {\n\t\t\tquickpick.items = [\n\t\t\t\t{ label: `$(repo) Publish to GitHub private repository`, description: `$(github) ${owner}/${sanitizedRepo}`, alwaysShow: true, repo: sanitizedRepo, isPrivate: true },\n\t\t\t\t{ label: `$(repo) Publish to GitHub public repository`, description: `$(github) ${owner}/${sanitizedRepo}`, alwaysShow: true, repo: sanitizedRepo, isPrivate: false },\n\t\t\t];\n\t\t}\n\t};\n\n\tonDidChangeValue();\n\n\twhile (true) {\n\t\tconst listener = quickpick.onDidChangeValue(onDidChangeValue);\n\t\tconst pick = await getPick(quickpick);\n\t\tlistener.dispose();\n\n\t\trepo = pick?.repo;\n\t\tisPrivate = pick?.isPrivate ?? true;\n\n\t\tif (repo) {\n\t\t\ttry {\n\t\t\t\tquickpick.busy = true;\n\t\t\t\tawait octokit.repos.get({ owner, repo: repo });\n\t\t\t\tquickpick.items = [{ label: `$(error) GitHub repository already exists`, description: `$(github) ${owner}/${repo}`, alwaysShow: true }];\n\t\t\t} catch {\n\t\t\t\tbreak;\n\t\t\t} finally {\n\t\t\t\tquickpick.busy = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tquickpick.dispose();\n\n\tif (!repo) {\n\t\treturn;\n\t}\n\n\tif (!repository) {\n\t\tconst gitignore = vscode.Uri.joinPath(folder, '.gitignore');\n\t\tlet shouldGenerateGitignore = false;\n\n\t\ttry {\n\t\t\tawait vscode.workspace.fs.stat(gitignore);\n\t\t} catch (err) {\n\t\t\tshouldGenerateGitignore = true;\n\t\t}\n\n\t\tif (shouldGenerateGitignore) {\n\t\t\tquickpick = vscode.window.createQuickPick();\n\t\t\tquickpick.placeholder = vscode.l10n.t('Select which files should be included in the repository.');\n\t\t\tquickpick.canSelectMany = true;\n\t\t\tquickpick.show();\n\n\t\t\ttry {\n\t\t\t\tquickpick.busy = true;\n\n\t\t\t\tconst children = (await vscode.workspace.fs.readDirectory(folder))\n\t\t\t\t\t.map(([name]) => name)\n\t\t\t\t\t.filter(name => name !== '.git');\n\n\t\t\t\tquickpick.items = children.map(name => ({ label: name }));\n\t\t\t\tquickpick.selectedItems = quickpick.items;\n\t\t\t\tquickpick.busy = false;\n\n\t\t\t\tconst result = await Promise.race([\n\t\t\t\t\tnew Promise<readonly vscode.QuickPickItem[]>(c => quickpick.onDidAccept(() => c(quickpick.selectedItems))),\n\t\t\t\t\tnew Promise<undefined>(c => quickpick.onDidHide(() => c(undefined)))\n\t\t\t\t]);\n\n\t\t\t\tif (!result || result.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst ignored = new Set(children);\n\t\t\t\tresult.forEach(c => ignored.delete(c.label));\n\n\t\t\t\tif (ignored.size > 0) {\n\t\t\t\t\tconst raw = [...ignored].map(i => `/${i}`).join('\\n');\n\t\t\t\t\tconst encoder = new TextEncoder();\n\t\t\t\t\tawait vscode.workspace.fs.writeFile(gitignore, encoder.encode(raw));\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tquickpick.dispose();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst githubRepository = await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, cancellable: false, title: 'Publish to GitHub' }, async progress => {\n\t\tprogress.report({\n\t\t\tmessage: isPrivate\n\t\t\t\t? vscode.l10n.t('Publishing to a private GitHub repository')\n\t\t\t\t: vscode.l10n.t('Publishing to a public GitHub repository'),\n\t\t\tincrement: 25\n\t\t});\n\n\t\ttype CreateRepositoryResponseData = Awaited<ReturnType<typeof octokit.repos.createForAuthenticatedUser>>['data'];\n\t\tlet createdGithubRepository: CreateRepositoryResponseData | undefined = undefined;\n\n\t\tif (isInCodespaces()) {\n\t\t\tcreatedGithubRepository = await vscode.commands.executeCommand<CreateRepositoryResponseData>('github.codespaces.publish', { name: repo!, isPrivate });\n\t\t} else {\n\t\t\tconst res = await octokit.repos.createForAuthenticatedUser({\n\t\t\t\tname: repo!,\n\t\t\t\tprivate: isPrivate\n\t\t\t});\n\t\t\tcreatedGithubRepository = res.data;\n\t\t}\n\n\t\tif (createdGithubRepository) {\n\t\t\tprogress.report({ message: vscode.l10n.t('Creating first commit'), increment: 25 });\n\n\t\t\tif (!repository) {\n\t\t\t\trepository = await gitAPI.init(folder, { defaultBranch: createdGithubRepository.default_branch }) || undefined;\n\n\t\t\t\tif (!repository) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait repository.commit('first commit', { all: true, postCommitCommand: null });\n\t\t\t}\n\n\t\t\tprogress.report({ message: vscode.l10n.t('Uploading files'), increment: 25 });\n\n\t\t\tconst branch = await repository.getBranch('HEAD');\n\t\t\tconst protocol = vscode.workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol');\n\t\t\tconst remoteUrl = protocol === 'https' ? createdGithubRepository.clone_url : createdGithubRepository.ssh_url;\n\t\t\tawait repository.addRemote('origin', remoteUrl);\n\t\t\tawait repository.push('origin', branch.name, true);\n\t\t}\n\n\t\treturn createdGithubRepository;\n\t});\n\n\tif (!githubRepository) {\n\t\treturn;\n\t}\n\n\tconst openOnGitHub = vscode.l10n.t('Open on GitHub');\n\tvscode.window.showInformationMessage(vscode.l10n.t('Successfully published the \"{0}\" repository to GitHub.', `${owner}/${repo}`), openOnGitHub).then(action => {\n\t\tif (action === openOnGitHub) {\n\t\t\tvscode.commands.executeCommand('vscode.open', vscode.Uri.parse(githubRepository.html_url));\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "extensions/github/src/pushErrorHandler.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDecoder } from 'util';\nimport { commands, env, ProgressLocation, Uri, window, workspace, QuickPickOptions, FileType, l10n, Disposable, TextDocumentContentProvider } from 'vscode';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { getOctokit } from './auth';\nimport { GitErrorCodes, PushErrorHandler, Remote, Repository } from './typings/git';\nimport * as path from 'path';\n\ntype Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T;\n\nexport function isInCodespaces(): boolean {\n\treturn env.remoteName === 'codespaces';\n}\n\nconst PR_TEMPLATE_FILES = [\n\t{ dir: '.', files: ['pull_request_template.md', 'PULL_REQUEST_TEMPLATE.md'] },\n\t{ dir: 'docs', files: ['pull_request_template.md', 'PULL_REQUEST_TEMPLATE.md'] },\n\t{ dir: '.github', files: ['PULL_REQUEST_TEMPLATE.md', 'PULL_REQUEST_TEMPLATE.md'] }\n];\n\nconst PR_TEMPLATE_DIRECTORY_NAMES = [\n\t'PULL_REQUEST_TEMPLATE',\n\t'docs/PULL_REQUEST_TEMPLATE',\n\t'.github/PULL_REQUEST_TEMPLATE'\n];\n\nasync function assertMarkdownFiles(dir: Uri, files: string[]): Promise<Uri[]> {\n\tconst dirFiles = await workspace.fs.readDirectory(dir);\n\treturn dirFiles\n\t\t.filter(([name, type]) => Boolean(type & FileType.File) && files.indexOf(name) !== -1)\n\t\t.map(([name]) => Uri.joinPath(dir, name));\n}\n\nasync function findMarkdownFilesInDir(uri: Uri): Promise<Uri[]> {\n\tconst files = await workspace.fs.readDirectory(uri);\n\treturn files\n\t\t.filter(([name, type]) => Boolean(type & FileType.File) && path.extname(name) === '.md')\n\t\t.map(([name]) => Uri.joinPath(uri, name));\n}\n\n/**\n * PR templates can be:\n * - In the root, `docs`, or `.github` folders, called `pull_request_template.md` or `PULL_REQUEST_TEMPLATE.md`\n * - Or, in a `PULL_REQUEST_TEMPLATE` directory directly below the root, `docs`, or `.github` folders, called `*.md`\n *\n * NOTE This method is a modified copy of a method with same name at microsoft/vscode-pull-request-github repository:\n *   https://github.com/microsoft/vscode-pull-request-github/blob/0a0c3c6c21c0b9c2f4d5ffbc3f8c6a825472e9e6/src/github/folderRepositoryManager.ts#L1061\n *\n */\nexport async function findPullRequestTemplates(repositoryRootUri: Uri): Promise<Uri[]> {\n\tconst results = await Promise.allSettled([\n\t\t...PR_TEMPLATE_FILES.map(x => assertMarkdownFiles(Uri.joinPath(repositoryRootUri, x.dir), x.files)),\n\t\t...PR_TEMPLATE_DIRECTORY_NAMES.map(x => findMarkdownFilesInDir(Uri.joinPath(repositoryRootUri, x)))\n\t]);\n\n\treturn results.flatMap(x => x.status === 'fulfilled' && x.value || []);\n}\n\nexport async function pickPullRequestTemplate(repositoryRootUri: Uri, templates: Uri[]): Promise<Uri | undefined> {\n\tconst quickPickItemFromUri = (x: Uri) => ({ label: path.relative(repositoryRootUri.path, x.path), template: x });\n\tconst quickPickItems = [\n\t\t{\n\t\t\tlabel: l10n.t('No template'),\n\t\t\tpicked: true,\n\t\t\ttemplate: undefined,\n\t\t},\n\t\t...templates.map(quickPickItemFromUri)\n\t];\n\tconst quickPickOptions: QuickPickOptions = {\n\t\tplaceHolder: l10n.t('Select the Pull Request template'),\n\t\tignoreFocusOut: true\n\t};\n\tconst pickedTemplate = await window.showQuickPick(quickPickItems, quickPickOptions);\n\treturn pickedTemplate?.template;\n}\n\nclass CommandErrorOutputTextDocumentContentProvider implements TextDocumentContentProvider {\n\n\tprivate items = new Map<string, string>();\n\n\tset(uri: Uri, contents: string): void {\n\t\tthis.items.set(uri.path, contents);\n\t}\n\n\tdelete(uri: Uri): void {\n\t\tthis.items.delete(uri.path);\n\t}\n\n\tprovideTextDocumentContent(uri: Uri): string | undefined {\n\t\treturn this.items.get(uri.path);\n\t}\n}\n\nexport class GithubPushErrorHandler implements PushErrorHandler {\n\n\tprivate disposables: Disposable[] = [];\n\tprivate commandErrors = new CommandErrorOutputTextDocumentContentProvider();\n\n\tconstructor(private readonly telemetryReporter: TelemetryReporter) {\n\t\tthis.disposables.push(workspace.registerTextDocumentContentProvider('github-output', this.commandErrors));\n\t}\n\n\tasync handlePushError(repository: Repository, remote: Remote, refspec: string, error: Error & { stderr: string; gitErrorCode: GitErrorCodes }): Promise<boolean> {\n\t\tif (error.gitErrorCode !== GitErrorCodes.PermissionDenied && error.gitErrorCode !== GitErrorCodes.PushRejected) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst remoteUrl = remote.pushUrl || (isInCodespaces() ? remote.fetchUrl : undefined);\n\t\tif (!remoteUrl) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst match = /^(?:https:\\/\\/github\\.com\\/|git@github\\.com:)([^\\/]+)\\/([^\\/.]+)/i.exec(remoteUrl);\n\t\tif (!match) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (/^:/.test(refspec)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst [, owner, repo] = match;\n\n\t\tif (error.gitErrorCode === GitErrorCodes.PermissionDenied) {\n\t\t\tawait this.handlePermissionDeniedError(repository, remote, refspec, owner, repo);\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"pushErrorHandler\" : {\n\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\"handler\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('pushErrorHandler', { handler: 'PermissionDenied' });\n\n\t\t\treturn true;\n\t\t}\n\n\t\t// Push protection\n\t\tif (/GH009: Secrets detected!/i.test(error.stderr)) {\n\t\t\tawait this.handlePushProtectionError(owner, repo, error.stderr);\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"pushErrorHandler\" : {\n\t\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\t\"handler\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('pushErrorHandler', { handler: 'PushRejected.PushProtection' });\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/* __GDPR__\n\t\t\t\"pushErrorHandler\" : {\n\t\t\t\t\"owner\": \"lszomoru\",\n\t\t\t\t\"handler\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\" }\n\t\t\t}\n\t\t*/\n\t\tthis.telemetryReporter.sendTelemetryEvent('pushErrorHandler', { handler: 'None' });\n\n\t\treturn false;\n\t}\n\n\tprivate async handlePermissionDeniedError(repository: Repository, remote: Remote, refspec: string, owner: string, repo: string): Promise<void> {\n\t\tconst yes = l10n.t('Create Fork');\n\t\tconst no = l10n.t('No');\n\t\tconst askFork = l10n.t('You don\\'t have permissions to push to \"{0}/{1}\" on GitHub. Would you like to create a fork and push to it instead?', owner, repo);\n\n\t\tconst answer = await window.showWarningMessage(askFork, { modal: true }, yes, no);\n\t\tif (answer !== yes) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst match = /^([^:]*):([^:]*)$/.exec(refspec);\n\t\tconst localName = match ? match[1] : refspec;\n\t\tlet remoteName = match ? match[2] : refspec;\n\n\t\tconst [octokit, ghRepository] = await window.withProgress({ location: ProgressLocation.Notification, cancellable: false, title: l10n.t('Create GitHub fork') }, async progress => {\n\t\t\tprogress.report({ message: l10n.t('Forking \"{0}/{1}\"...', owner, repo), increment: 33 });\n\n\t\t\tconst octokit = await getOctokit();\n\n\t\t\ttype CreateForkResponseData = Awaited<ReturnType<typeof octokit.repos.createFork>>['data'];\n\n\t\t\t// Issue: what if the repo already exists?\n\t\t\tlet ghRepository: CreateForkResponseData;\n\t\t\ttry {\n\t\t\t\tif (isInCodespaces()) {\n\t\t\t\t\t// Call into the codespaces extension to fork the repository\n\t\t\t\t\tconst resp = await commands.executeCommand<{ repository: CreateForkResponseData; ref: string }>('github.codespaces.forkRepository');\n\t\t\t\t\tif (!resp) {\n\t\t\t\t\t\tthrow new Error('Unable to fork respository');\n\t\t\t\t\t}\n\n\t\t\t\t\tghRepository = resp.repository;\n\n\t\t\t\t\tif (resp.ref) {\n\t\t\t\t\t\tlet ref = resp.ref;\n\t\t\t\t\t\tif (ref.startsWith('refs/heads/')) {\n\t\t\t\t\t\t\tref = ref.substr(11);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tremoteName = ref;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst resp = await octokit.repos.createFork({ owner, repo });\n\t\t\t\t\tghRepository = resp.data;\n\t\t\t\t}\n\t\t\t} catch (ex) {\n\t\t\t\tconsole.error(ex);\n\t\t\t\tthrow ex;\n\t\t\t}\n\n\t\t\tprogress.report({ message: l10n.t('Pushing changes...'), increment: 33 });\n\n\t\t\t// Issue: what if there's already an `upstream` repo?\n\t\t\tawait repository.renameRemote(remote.name, 'upstream');\n\n\t\t\t// Issue: what if there's already another `origin` repo?\n\t\t\tconst protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol');\n\t\t\tconst remoteUrl = protocol === 'https' ? ghRepository.clone_url : ghRepository.ssh_url;\n\t\t\tawait repository.addRemote('origin', remoteUrl);\n\n\t\t\ttry {\n\t\t\t\tawait repository.fetch('origin', remoteName);\n\t\t\t\tawait repository.setBranchUpstream(localName, `origin/${remoteName}`);\n\t\t\t} catch {\n\t\t\t\t// noop\n\t\t\t}\n\n\t\t\tawait repository.push('origin', localName, true);\n\n\t\t\treturn [octokit, ghRepository] as const;\n\t\t});\n\n\t\t// yield\n\t\t(async () => {\n\t\t\tconst openOnGitHub = l10n.t('Open on GitHub');\n\t\t\tconst createPR = l10n.t('Create PR');\n\t\t\tconst action = await window.showInformationMessage(l10n.t('The fork \"{0}\" was successfully created on GitHub.', ghRepository.full_name), openOnGitHub, createPR);\n\n\t\t\tif (action === openOnGitHub) {\n\t\t\t\tawait commands.executeCommand('vscode.open', Uri.parse(ghRepository.html_url));\n\t\t\t} else if (action === createPR) {\n\t\t\t\tconst pr = await window.withProgress({ location: ProgressLocation.Notification, cancellable: false, title: l10n.t('Creating GitHub Pull Request...') }, async _ => {\n\t\t\t\t\tlet title = `Update ${remoteName}`;\n\t\t\t\t\tconst head = repository.state.HEAD?.name;\n\n\t\t\t\t\tlet body: string | undefined;\n\n\t\t\t\t\tif (head) {\n\t\t\t\t\t\tconst commit = await repository.getCommit(head);\n\t\t\t\t\t\ttitle = commit.message.split('\\n')[0];\n\t\t\t\t\t\tbody = commit.message.slice(title.length + 1).trim();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst templates = await findPullRequestTemplates(repository.rootUri);\n\t\t\t\t\tif (templates.length > 0) {\n\t\t\t\t\t\ttemplates.sort((a, b) => a.path.localeCompare(b.path));\n\n\t\t\t\t\t\tconst template = await pickPullRequestTemplate(repository.rootUri, templates);\n\n\t\t\t\t\t\tif (template) {\n\t\t\t\t\t\t\tbody = new TextDecoder('utf-8').decode(await workspace.fs.readFile(template));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { data: pr } = await octokit.pulls.create({\n\t\t\t\t\t\towner,\n\t\t\t\t\t\trepo,\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\thead: `${ghRepository.owner.login}:${remoteName}`,\n\t\t\t\t\t\tbase: ghRepository.default_branch\n\t\t\t\t\t});\n\n\t\t\t\t\tawait repository.setConfig(`branch.${localName}.remote`, 'upstream');\n\t\t\t\t\tawait repository.setConfig(`branch.${localName}.merge`, `refs/heads/${remoteName}`);\n\t\t\t\t\tawait repository.setConfig(`branch.${localName}.github-pr-owner-number`, `${owner}#${repo}#${pr.number}`);\n\n\t\t\t\t\treturn pr;\n\t\t\t\t});\n\n\t\t\t\tconst openPR = l10n.t('Open PR');\n\t\t\t\tconst action = await window.showInformationMessage(l10n.t('The PR \"{0}/{1}#{2}\" was successfully created on GitHub.', owner, repo, pr.number), openPR);\n\n\t\t\t\tif (action === openPR) {\n\t\t\t\t\tawait commands.executeCommand('vscode.open', Uri.parse(pr.html_url));\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate async handlePushProtectionError(owner: string, repo: string, stderr: string): Promise<void> {\n\t\t// Open command output in an editor\n\t\tconst timestamp = new Date().getTime();\n\t\tconst uri = Uri.parse(`github-output:/github-error-${timestamp}`);\n\t\tthis.commandErrors.set(uri, stderr);\n\n\t\ttry {\n\t\t\tconst doc = await workspace.openTextDocument(uri);\n\t\t\tawait window.showTextDocument(doc);\n\t\t}\n\t\tfinally {\n\t\t\tthis.commandErrors.set(uri, stderr);\n\t\t}\n\n\t\t// Show dialog\n\t\tconst learnMore = l10n.t('Learn More');\n\t\tconst message = l10n.t('Your push to \"{0}/{1}\" was rejected by GitHub because push protection is enabled and one or more secrets were detected.', owner, repo);\n\t\tconst answer = await window.showWarningMessage(message, { modal: true }, learnMore);\n\t\tif (answer === learnMore) {\n\t\t\tcommands.executeCommand('vscode.open', 'https://aka.ms/vscode-github-push-protection');\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n}\n"
  },
  {
    "path": "extensions/github/src/remoteSourceProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Uri, env, l10n, workspace } from 'vscode';\nimport { RemoteSourceProvider, RemoteSource, RemoteSourceAction } from './typings/git-base';\nimport { getOctokit } from './auth';\nimport { Octokit } from '@octokit/rest';\nimport { getRepositoryFromQuery, getRepositoryFromUrl } from './util';\nimport { getBranchLink, getVscodeDevHost } from './links';\n\nfunction asRemoteSource(raw: any): RemoteSource {\n\tconst protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol');\n\treturn {\n\t\tname: `$(github) ${raw.full_name}`,\n\t\tdescription: `${raw.stargazers_count > 0 ? `$(star-full) ${raw.stargazers_count}` : ''\n\t\t\t}`,\n\t\tdetail: raw.description || undefined,\n\t\turl: protocol === 'https' ? raw.clone_url : raw.ssh_url\n\t};\n}\n\nexport class GithubRemoteSourceProvider implements RemoteSourceProvider {\n\n\treadonly name = 'GitHub';\n\treadonly icon = 'github';\n\treadonly supportsQuery = true;\n\n\tprivate userReposCache: RemoteSource[] = [];\n\n\tasync getRemoteSources(query?: string): Promise<RemoteSource[]> {\n\t\tconst octokit = await getOctokit();\n\n\t\tif (query) {\n\t\t\tconst repository = getRepositoryFromUrl(query);\n\n\t\t\tif (repository) {\n\t\t\t\tconst raw = await octokit.repos.get(repository);\n\t\t\t\treturn [asRemoteSource(raw.data)];\n\t\t\t}\n\t\t}\n\n\t\tconst all = await Promise.all([\n\t\t\tthis.getQueryRemoteSources(octokit, query),\n\t\t\tthis.getUserRemoteSources(octokit, query),\n\t\t]);\n\n\t\tconst map = new Map<string, RemoteSource>();\n\n\t\tfor (const group of all) {\n\t\t\tfor (const remoteSource of group) {\n\t\t\t\tmap.set(remoteSource.name, remoteSource);\n\t\t\t}\n\t\t}\n\n\t\treturn [...map.values()];\n\t}\n\n\tprivate async getUserRemoteSources(octokit: Octokit, query?: string): Promise<RemoteSource[]> {\n\t\tif (!query) {\n\t\t\tconst user = await octokit.users.getAuthenticated({});\n\t\t\tconst username = user.data.login;\n\t\t\tconst res = await octokit.repos.listForAuthenticatedUser({ username, sort: 'updated', per_page: 100 });\n\t\t\tthis.userReposCache = res.data.map(asRemoteSource);\n\t\t}\n\n\t\treturn this.userReposCache;\n\t}\n\n\tprivate async getQueryRemoteSources(octokit: Octokit, query?: string): Promise<RemoteSource[]> {\n\t\tif (!query) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst repository = getRepositoryFromQuery(query);\n\n\t\tif (repository) {\n\t\t\tquery = `user:${repository.owner}+${repository.repo}`;\n\t\t}\n\n\t\tquery += ` fork:true`;\n\n\t\tconst raw = await octokit.search.repos({ q: query, sort: 'stars' });\n\t\treturn raw.data.items.map(asRemoteSource);\n\t}\n\n\tasync getBranches(url: string): Promise<string[]> {\n\t\tconst repository = getRepositoryFromUrl(url);\n\n\t\tif (!repository) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst octokit = await getOctokit();\n\n\t\tconst branches: string[] = [];\n\t\tlet page = 1;\n\n\t\twhile (true) {\n\t\t\tconst res = await octokit.repos.listBranches({ ...repository, per_page: 100, page });\n\n\t\t\tif (res.data.length === 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbranches.push(...res.data.map(b => b.name));\n\t\t\tpage++;\n\t\t}\n\n\t\tconst repo = await octokit.repos.get(repository);\n\t\tconst defaultBranch = repo.data.default_branch;\n\n\t\treturn branches.sort((a, b) => a === defaultBranch ? -1 : b === defaultBranch ? 1 : 0);\n\t}\n\n\tasync getRemoteSourceActions(url: string): Promise<RemoteSourceAction[]> {\n\t\tconst repository = getRepositoryFromUrl(url);\n\t\tif (!repository) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn [{\n\t\t\tlabel: l10n.t('Open on GitHub'),\n\t\t\ticon: 'github',\n\t\t\trun(branch: string) {\n\t\t\t\tconst link = getBranchLink(url, branch);\n\t\t\t\tenv.openExternal(Uri.parse(link));\n\t\t\t}\n\t\t}, {\n\t\t\tlabel: l10n.t('Checkout on vscode.dev'),\n\t\t\ticon: 'globe',\n\t\t\trun(branch: string) {\n\t\t\t\tconst link = getBranchLink(url, branch, getVscodeDevHost());\n\t\t\t\tenv.openExternal(Uri.parse(link));\n\t\t\t}\n\t\t}];\n\t}\n}\n"
  },
  {
    "path": "extensions/github/src/remoteSourcePublisher.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { publishRepository } from './publish';\nimport { API as GitAPI, RemoteSourcePublisher, Repository } from './typings/git';\n\nexport class GithubRemoteSourcePublisher implements RemoteSourcePublisher {\n\treadonly name = 'GitHub';\n\treadonly icon = 'github';\n\n\tconstructor(private gitAPI: GitAPI) { }\n\n\tpublishRepository(repository: Repository): Promise<void> {\n\t\treturn publishRepository(this.gitAPI, repository);\n\t}\n}\n"
  },
  {
    "path": "extensions/github/src/shareProviders.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { API } from './typings/git';\nimport { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util';\nimport { encodeURIComponentExceptSlashes, ensurePublished, getRepositoryForFile, notebookCellRangeString, rangeString } from './links';\n\nexport class VscodeDevShareProvider implements vscode.ShareProvider, vscode.Disposable {\n\treadonly id: string = 'copyVscodeDevLink';\n\treadonly label: string = vscode.l10n.t('Copy vscode.dev Link');\n\treadonly priority: number = 10;\n\n\n\tprivate _hasGitHubRepositories: boolean = false;\n\tprivate set hasGitHubRepositories(value: boolean) {\n\t\tvscode.commands.executeCommand('setContext', 'github.hasGitHubRepo', value);\n\t\tthis._hasGitHubRepositories = value;\n\t\tthis.ensureShareProviderRegistration();\n\t}\n\n\tprivate shareProviderRegistration: vscode.Disposable | undefined;\n\tprivate disposables: vscode.Disposable[] = [];\n\n\tconstructor(private readonly gitAPI: API) {\n\t\tthis.initializeGitHubRepoContext();\n\t}\n\n\tdispose() {\n\t\tthis.disposables.forEach(d => d.dispose());\n\t}\n\n\tprivate initializeGitHubRepoContext() {\n\t\tif (this.gitAPI.repositories.find(repo => repositoryHasGitHubRemote(repo))) {\n\t\t\tthis.hasGitHubRepositories = true;\n\t\t\tvscode.commands.executeCommand('setContext', 'github.hasGitHubRepo', true);\n\t\t} else {\n\t\t\tthis.disposables.push(this.gitAPI.onDidOpenRepository(async e => {\n\t\t\t\tawait e.status();\n\t\t\t\tif (repositoryHasGitHubRemote(e)) {\n\t\t\t\t\tvscode.commands.executeCommand('setContext', 'github.hasGitHubRepo', true);\n\t\t\t\t\tthis.hasGitHubRepositories = true;\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t\tthis.disposables.push(this.gitAPI.onDidCloseRepository(() => {\n\t\t\tif (!this.gitAPI.repositories.find(repo => repositoryHasGitHubRemote(repo))) {\n\t\t\t\tthis.hasGitHubRepositories = false;\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate ensureShareProviderRegistration() {\n\t\tif (vscode.env.appHost !== 'codespaces' && !this.shareProviderRegistration && this._hasGitHubRepositories) {\n\t\t\tconst shareProviderRegistration = vscode.window.registerShareProvider({ scheme: 'file' }, this);\n\t\t\tthis.shareProviderRegistration = shareProviderRegistration;\n\t\t\tthis.disposables.push(shareProviderRegistration);\n\t\t} else if (this.shareProviderRegistration && !this._hasGitHubRepositories) {\n\t\t\tthis.shareProviderRegistration.dispose();\n\t\t\tthis.shareProviderRegistration = undefined;\n\t\t}\n\t}\n\n\tasync provideShare(item: vscode.ShareableItem, _token: vscode.CancellationToken): Promise<vscode.Uri | undefined> {\n\t\tconst repository = getRepositoryForFile(this.gitAPI, item.resourceUri);\n\t\tif (!repository) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait ensurePublished(repository, item.resourceUri);\n\n\t\tlet repo: { owner: string; repo: string } | undefined;\n\t\trepository.state.remotes.find(remote => {\n\t\t\tif (remote.fetchUrl) {\n\t\t\t\tconst foundRepo = getRepositoryFromUrl(remote.fetchUrl);\n\t\t\t\tif (foundRepo && (remote.name === repository.state.HEAD?.upstream?.remote)) {\n\t\t\t\t\trepo = foundRepo;\n\t\t\t\t\treturn;\n\t\t\t\t} else if (foundRepo && !repo) {\n\t\t\t\t\trepo = foundRepo;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t});\n\n\t\tif (!repo) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blobSegment = repository?.state.HEAD?.name ? encodeURIComponentExceptSlashes(repository.state.HEAD?.name) : repository?.state.HEAD?.commit;\n\t\tconst filepathSegment = encodeURIComponentExceptSlashes(item.resourceUri.path.substring(repository?.rootUri.path.length));\n\t\tconst rangeSegment = getRangeSegment(item);\n\t\treturn vscode.Uri.parse(`${this.getVscodeDevHost()}/${repo.owner}/${repo.repo}/blob/${blobSegment}${filepathSegment}${rangeSegment}`);\n\n\t}\n\n\tprivate getVscodeDevHost(): string {\n\t\treturn `https://${vscode.env.appName.toLowerCase().includes('insiders') ? 'insiders.' : ''}vscode.dev/github`;\n\t}\n}\n\nfunction getRangeSegment(item: vscode.ShareableItem) {\n\tif (item.resourceUri.scheme === 'vscode-notebook-cell') {\n\t\tconst notebookEditor = vscode.window.visibleNotebookEditors.find(editor => editor.notebook.uri.fsPath === item.resourceUri.fsPath);\n\t\tconst cell = notebookEditor?.notebook.getCells().find(cell => cell.document.uri.fragment === item.resourceUri?.fragment);\n\t\tconst cellIndex = cell?.index ?? notebookEditor?.selection.start;\n\t\treturn notebookCellRangeString(cellIndex, item.selection);\n\t}\n\n\treturn rangeString(item.selection);\n}\n"
  },
  {
    "path": "extensions/github/src/test/github.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { workspace, extensions, Uri, commands } from 'vscode';\nimport { findPullRequestTemplates, pickPullRequestTemplate } from '../pushErrorHandler';\n\nsuite('github smoke test', function () {\n\tconst cwd = workspace.workspaceFolders![0].uri;\n\n\tsuiteSetup(async function () {\n\t\tconst ext = extensions.getExtension('vscode.github');\n\t\tawait ext?.activate();\n\t});\n\n\ttest('should find all templates', async function () {\n\t\tconst expectedValuesSorted = [\n\t\t\t'PULL_REQUEST_TEMPLATE/a.md',\n\t\t\t'PULL_REQUEST_TEMPLATE/b.md',\n\t\t\t'docs/PULL_REQUEST_TEMPLATE.md',\n\t\t\t'docs/PULL_REQUEST_TEMPLATE/a.md',\n\t\t\t'docs/PULL_REQUEST_TEMPLATE/b.md',\n\t\t\t'.github/PULL_REQUEST_TEMPLATE.md',\n\t\t\t'.github/PULL_REQUEST_TEMPLATE/a.md',\n\t\t\t'.github/PULL_REQUEST_TEMPLATE/b.md',\n\t\t\t'PULL_REQUEST_TEMPLATE.md'\n\t\t];\n\t\texpectedValuesSorted.sort();\n\n\t\tconst uris = await findPullRequestTemplates(cwd);\n\n\t\tconst urisSorted = uris.map(x => x.path.slice(cwd.path.length));\n\t\turisSorted.sort();\n\n\t\tassert.deepStrictEqual(urisSorted, expectedValuesSorted);\n\t});\n\n\ttest('selecting non-default quick-pick item should correspond to a template', async () => {\n\t\tconst template0 = Uri.file(\"some-imaginary-template-0\");\n\t\tconst template1 = Uri.file(\"some-imaginary-template-1\");\n\t\tconst templates = [template0, template1];\n\n\t\tconst pick = pickPullRequestTemplate(Uri.file(\"/\"), templates);\n\n\t\tawait commands.executeCommand('workbench.action.quickOpenSelectNext');\n\t\tawait commands.executeCommand('workbench.action.quickOpenSelectNext');\n\t\tawait commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');\n\n\t\tassert.ok(await pick === template0);\n\t});\n\n\ttest('selecting first quick-pick item should return undefined', async () => {\n\t\tconst templates = [Uri.file(\"some-imaginary-file\")];\n\n\t\tconst pick = pickPullRequestTemplate(Uri.file(\"/\"), templates);\n\n\t\tawait commands.executeCommand('workbench.action.quickOpenSelectNext');\n\t\tawait commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');\n\n\t\tassert.ok(await pick === undefined);\n\t});\n});\n"
  },
  {
    "path": "extensions/github/src/test/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as testRunner from '../../../../test/integration/electron/testrunner';\n\nconst suite = 'Github Tests';\n\nconst options: import('mocha').MochaOptions = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\ntestRunner.configure(options);\n\nexport = testRunner;\n"
  },
  {
    "path": "extensions/github/src/typings/git-base.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command, Disposable, Event, ProviderResult } from 'vscode';\nexport { ProviderResult } from 'vscode';\n\nexport interface API {\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;\n\tgetRemoteSourceActions(url: string): Promise<RemoteSourceAction[]>;\n\tpickRemoteSource(options: PickRemoteSourceOptions): Promise<string | PickRemoteSourceResult | undefined>;\n}\n\nexport interface GitBaseExtension {\n\n\treadonly enabled: boolean;\n\treadonly onDidChangeEnablement: Event<boolean>;\n\n\t/**\n\t * Returns a specific API version.\n\t *\n\t * Throws error if git-base extension is disabled. You can listed to the\n\t * [GitBaseExtension.onDidChangeEnablement](#GitBaseExtension.onDidChangeEnablement)\n\t * event to know when the extension becomes enabled/disabled.\n\t *\n\t * @param version Version number.\n\t * @returns API instance\n\t */\n\tgetAPI(version: 1): API;\n}\n\nexport interface PickRemoteSourceOptions {\n\treadonly providerLabel?: (provider: RemoteSourceProvider) => string;\n\treadonly urlLabel?: string | ((url: string) => string);\n\treadonly providerName?: string;\n\treadonly title?: string;\n\treadonly placeholder?: string;\n\treadonly branch?: boolean; // then result is PickRemoteSourceResult\n\treadonly showRecentSources?: boolean;\n}\n\nexport interface PickRemoteSourceResult {\n\treadonly url: string;\n\treadonly branch?: string;\n}\n\nexport interface RemoteSourceAction {\n\treadonly label: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon: string;\n\trun(branch: string): void;\n}\n\nexport interface RemoteSource {\n\treadonly name: string;\n\treadonly description?: string;\n\treadonly detail?: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon?: string;\n\treadonly url: string | string[];\n}\n\nexport interface RecentRemoteSource extends RemoteSource {\n\treadonly timestamp: number;\n}\n\nexport interface RemoteSourceProvider {\n\treadonly name: string;\n\t/**\n\t * Codicon name\n\t */\n\treadonly icon?: string;\n\treadonly label?: string;\n\treadonly placeholder?: string;\n\treadonly supportsQuery?: boolean;\n\n\tgetBranches?(url: string): ProviderResult<string[]>;\n\tgetRemoteSourceActions?(url: string): ProviderResult<RemoteSourceAction[]>;\n\tgetRecentRemoteSources?(query?: string): ProviderResult<RecentRemoteSource[]>;\n\tgetRemoteSources(query?: string): ProviderResult<RemoteSource[]>;\n}\n"
  },
  {
    "path": "extensions/github/src/typings/git.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Uri, Event, Disposable, ProviderResult, Command, SourceControlHistoryItem } from 'vscode';\nexport { ProviderResult } from 'vscode';\n\nexport interface Git {\n\treadonly path: string;\n}\n\nexport interface InputBox {\n\tvalue: string;\n}\n\nexport const enum ForcePushMode {\n\tForce,\n\tForceWithLease\n}\n\nexport const enum RefType {\n\tHead,\n\tRemoteHead,\n\tTag\n}\n\nexport interface Ref {\n\treadonly type: RefType;\n\treadonly name?: string;\n\treadonly commit?: string;\n\treadonly remote?: string;\n}\n\nexport interface UpstreamRef {\n\treadonly remote: string;\n\treadonly name: string;\n}\n\nexport interface Branch extends Ref {\n\treadonly upstream?: UpstreamRef;\n\treadonly ahead?: number;\n\treadonly behind?: number;\n}\n\nexport interface Commit {\n\treadonly hash: string;\n\treadonly message: string;\n\treadonly parents: string[];\n\treadonly authorDate?: Date;\n\treadonly authorName?: string;\n\treadonly authorEmail?: string;\n\treadonly commitDate?: Date;\n}\n\nexport interface Submodule {\n\treadonly name: string;\n\treadonly path: string;\n\treadonly url: string;\n}\n\nexport interface Remote {\n\treadonly name: string;\n\treadonly fetchUrl?: string;\n\treadonly pushUrl?: string;\n\treadonly isReadOnly: boolean;\n}\n\nexport const enum Status {\n\tINDEX_MODIFIED,\n\tINDEX_ADDED,\n\tINDEX_DELETED,\n\tINDEX_RENAMED,\n\tINDEX_COPIED,\n\n\tMODIFIED,\n\tDELETED,\n\tUNTRACKED,\n\tIGNORED,\n\tINTENT_TO_ADD,\n\tINTENT_TO_RENAME,\n\tTYPE_CHANGED,\n\n\tADDED_BY_US,\n\tADDED_BY_THEM,\n\tDELETED_BY_US,\n\tDELETED_BY_THEM,\n\tBOTH_ADDED,\n\tBOTH_DELETED,\n\tBOTH_MODIFIED\n}\n\nexport interface Change {\n\n\t/**\n\t * Returns either `originalUri` or `renameUri`, depending\n\t * on whether this change is a rename change. When\n\t * in doubt always use `uri` over the other two alternatives.\n\t */\n\treadonly uri: Uri;\n\treadonly originalUri: Uri;\n\treadonly renameUri: Uri | undefined;\n\treadonly status: Status;\n}\n\nexport interface RepositoryState {\n\treadonly HEAD: Branch | undefined;\n\treadonly refs: Ref[];\n\treadonly remotes: Remote[];\n\treadonly submodules: Submodule[];\n\treadonly rebaseCommit: Commit | undefined;\n\n\treadonly mergeChanges: Change[];\n\treadonly indexChanges: Change[];\n\treadonly workingTreeChanges: Change[];\n\n\treadonly onDidChange: Event<void>;\n}\n\nexport interface RepositoryUIState {\n\treadonly selected: boolean;\n\treadonly onDidChange: Event<void>;\n}\n\n/**\n * Log options.\n */\nexport interface LogOptions {\n\t/** Max number of log entries to retrieve. If not specified, the default is 32. */\n\treadonly maxEntries?: number;\n\treadonly path?: string;\n}\n\nexport interface CommitOptions {\n\tall?: boolean | 'tracked';\n\tamend?: boolean;\n\tsignoff?: boolean;\n\tsignCommit?: boolean;\n\tempty?: boolean;\n\tnoVerify?: boolean;\n\trequireUserConfig?: boolean;\n\tuseEditor?: boolean;\n\tverbose?: boolean;\n\t/**\n\t * string    - execute the specified command after the commit operation\n\t * undefined - execute the command specified in git.postCommitCommand\n\t *             after the commit operation\n\t * null      - do not execute any command after the commit operation\n\t */\n\tpostCommitCommand?: string | null;\n}\n\nexport interface FetchOptions {\n\tremote?: string;\n\tref?: string;\n\tall?: boolean;\n\tprune?: boolean;\n\tdepth?: number;\n}\n\nexport interface InitOptions {\n\tdefaultBranch?: string;\n}\n\nexport interface BranchQuery {\n\treadonly remote?: boolean;\n\treadonly pattern?: string;\n\treadonly count?: number;\n\treadonly contains?: string;\n}\n\nexport interface Repository {\n\n\treadonly rootUri: Uri;\n\treadonly inputBox: InputBox;\n\treadonly state: RepositoryState;\n\treadonly ui: RepositoryUIState;\n\n\tgetConfigs(): Promise<{ key: string; value: string; }[]>;\n\tgetConfig(key: string): Promise<string>;\n\tsetConfig(key: string, value: string): Promise<string>;\n\tgetGlobalConfig(key: string): Promise<string>;\n\n\tgetObjectDetails(treeish: string, path: string): Promise<{ mode: string, object: string, size: number }>;\n\tdetectObjectType(object: string): Promise<{ mimetype: string, encoding?: string }>;\n\tbuffer(ref: string, path: string): Promise<Buffer>;\n\tshow(ref: string, path: string): Promise<string>;\n\tgetCommit(ref: string): Promise<Commit>;\n\n\tadd(paths: string[]): Promise<void>;\n\trevert(paths: string[]): Promise<void>;\n\tclean(paths: string[]): Promise<void>;\n\n\tapply(patch: string, reverse?: boolean): Promise<void>;\n\tdiff(cached?: boolean): Promise<string>;\n\tdiffWithHEAD(): Promise<Change[]>;\n\tdiffWithHEAD(path: string): Promise<string>;\n\tdiffWith(ref: string): Promise<Change[]>;\n\tdiffWith(ref: string, path: string): Promise<string>;\n\tdiffIndexWithHEAD(): Promise<Change[]>;\n\tdiffIndexWithHEAD(path: string): Promise<string>;\n\tdiffIndexWith(ref: string): Promise<Change[]>;\n\tdiffIndexWith(ref: string, path: string): Promise<string>;\n\tdiffBlobs(object1: string, object2: string): Promise<string>;\n\tdiffBetween(ref1: string, ref2: string): Promise<Change[]>;\n\tdiffBetween(ref1: string, ref2: string, path: string): Promise<string>;\n\n\thashObject(data: string): Promise<string>;\n\n\tcreateBranch(name: string, checkout: boolean, ref?: string): Promise<void>;\n\tdeleteBranch(name: string, force?: boolean): Promise<void>;\n\tgetBranch(name: string): Promise<Branch>;\n\tgetBranches(query: BranchQuery): Promise<Ref[]>;\n\tsetBranchUpstream(name: string, upstream: string): Promise<void>;\n\n\tgetMergeBase(ref1: string, ref2: string): Promise<string>;\n\n\ttag(name: string, upstream: string): Promise<void>;\n\tdeleteTag(name: string): Promise<void>;\n\n\tstatus(): Promise<void>;\n\tcheckout(treeish: string): Promise<void>;\n\n\taddRemote(name: string, url: string): Promise<void>;\n\tremoveRemote(name: string): Promise<void>;\n\trenameRemote(name: string, newName: string): Promise<void>;\n\n\tfetch(options?: FetchOptions): Promise<void>;\n\tfetch(remote?: string, ref?: string, depth?: number): Promise<void>;\n\tpull(unshallow?: boolean): Promise<void>;\n\tpush(remoteName?: string, branchName?: string, setUpstream?: boolean, force?: ForcePushMode): Promise<void>;\n\n\tblame(path: string): Promise<string>;\n\tlog(options?: LogOptions): Promise<Commit[]>;\n\n\tcommit(message: string, opts?: CommitOptions): Promise<void>;\n}\n\nexport interface RemoteSource {\n\treadonly name: string;\n\treadonly description?: string;\n\treadonly url: string | string[];\n}\n\nexport interface RemoteSourceProvider {\n\treadonly name: string;\n\treadonly icon?: string; // codicon name\n\treadonly supportsQuery?: boolean;\n\tgetRemoteSources(query?: string): ProviderResult<RemoteSource[]>;\n\tgetBranches?(url: string): ProviderResult<string[]>;\n\tpublishRepository?(repository: Repository): Promise<void>;\n}\n\nexport interface RemoteSourcePublisher {\n\treadonly name: string;\n\treadonly icon?: string; // codicon name\n\tpublishRepository(repository: Repository): Promise<void>;\n}\n\nexport interface Credentials {\n\treadonly username: string;\n\treadonly password: string;\n}\n\nexport interface CredentialsProvider {\n\tgetCredentials(host: Uri): ProviderResult<Credentials>;\n}\n\nexport interface PostCommitCommandsProvider {\n\tgetCommands(repository: Repository): Command[];\n}\n\nexport interface PushErrorHandler {\n\thandlePushError(repository: Repository, remote: Remote, refspec: string, error: Error & { gitErrorCode: GitErrorCodes }): Promise<boolean>;\n}\n\nexport interface BranchProtection {\n\treadonly remote: string;\n\treadonly rules: BranchProtectionRule[];\n}\n\nexport interface BranchProtectionRule {\n\treadonly include?: string[];\n\treadonly exclude?: string[];\n}\n\nexport interface BranchProtectionProvider {\n\tonDidChangeBranchProtection: Event<Uri>;\n\tprovideBranchProtection(): BranchProtection[];\n}\n\nexport interface AvatarQueryCommit {\n\treadonly hash: string;\n\treadonly authorName?: string;\n\treadonly authorEmail?: string;\n}\n\nexport interface AvatarQuery {\n\treadonly commits: AvatarQueryCommit[];\n\treadonly size: number;\n}\n\nexport interface SourceControlHistoryItemDetailsProvider {\n\tprovideAvatar(repository: Repository, query: AvatarQuery): Promise<Map<string, string | undefined> | undefined>;\n\tprovideHoverCommands(repository: Repository): Promise<Command[] | undefined>;\n\tprovideMessageLinks(repository: Repository, message: string): Promise<string | undefined>;\n}\n\nexport type APIState = 'uninitialized' | 'initialized';\n\nexport interface PublishEvent {\n\trepository: Repository;\n\tbranch?: string;\n}\n\nexport interface API {\n\treadonly state: APIState;\n\treadonly onDidChangeState: Event<APIState>;\n\treadonly onDidPublish: Event<PublishEvent>;\n\treadonly git: Git;\n\treadonly repositories: Repository[];\n\treadonly onDidOpenRepository: Event<Repository>;\n\treadonly onDidCloseRepository: Event<Repository>;\n\n\ttoGitUri(uri: Uri, ref: string): Uri;\n\tgetRepository(uri: Uri): Repository | null;\n\tinit(root: Uri, options?: InitOptions): Promise<Repository | null>;\n\topenRepository(root: Uri): Promise<Repository | null>\n\n\tregisterRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable;\n\tregisterRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;\n\tregisterCredentialsProvider(provider: CredentialsProvider): Disposable;\n\tregisterPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable;\n\tregisterPushErrorHandler(handler: PushErrorHandler): Disposable;\n\tregisterBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable;\n\tregisterSourceControlHistoryItemDetailsProvider(provider: SourceControlHistoryItemDetailsProvider): Disposable;\n}\n\nexport interface GitExtension {\n\n\treadonly enabled: boolean;\n\treadonly onDidChangeEnablement: Event<boolean>;\n\n\t/**\n\t * Returns a specific API version.\n\t *\n\t * Throws error if git extension is disabled. You can listen to the\n\t * [GitExtension.onDidChangeEnablement](#GitExtension.onDidChangeEnablement) event\n\t * to know when the extension becomes enabled/disabled.\n\t *\n\t * @param version Version number.\n\t * @returns API instance\n\t */\n\tgetAPI(version: 1): API;\n}\n\nexport const enum GitErrorCodes {\n\tBadConfigFile = 'BadConfigFile',\n\tAuthenticationFailed = 'AuthenticationFailed',\n\tNoUserNameConfigured = 'NoUserNameConfigured',\n\tNoUserEmailConfigured = 'NoUserEmailConfigured',\n\tNoRemoteRepositorySpecified = 'NoRemoteRepositorySpecified',\n\tNotAGitRepository = 'NotAGitRepository',\n\tNotAtRepositoryRoot = 'NotAtRepositoryRoot',\n\tConflict = 'Conflict',\n\tStashConflict = 'StashConflict',\n\tUnmergedChanges = 'UnmergedChanges',\n\tPushRejected = 'PushRejected',\n\tRemoteConnectionError = 'RemoteConnectionError',\n\tDirtyWorkTree = 'DirtyWorkTree',\n\tCantOpenResource = 'CantOpenResource',\n\tGitNotFound = 'GitNotFound',\n\tCantCreatePipe = 'CantCreatePipe',\n\tPermissionDenied = 'PermissionDenied',\n\tCantAccessRemote = 'CantAccessRemote',\n\tRepositoryNotFound = 'RepositoryNotFound',\n\tRepositoryIsLocked = 'RepositoryIsLocked',\n\tBranchNotFullyMerged = 'BranchNotFullyMerged',\n\tNoRemoteReference = 'NoRemoteReference',\n\tInvalidBranchName = 'InvalidBranchName',\n\tBranchAlreadyExists = 'BranchAlreadyExists',\n\tNoLocalChanges = 'NoLocalChanges',\n\tNoStashFound = 'NoStashFound',\n\tLocalChangesOverwritten = 'LocalChangesOverwritten',\n\tNoUpstreamBranch = 'NoUpstreamBranch',\n\tIsInSubmodule = 'IsInSubmodule',\n\tWrongCase = 'WrongCase',\n\tCantLockRef = 'CantLockRef',\n\tCantRebaseMultipleBranches = 'CantRebaseMultipleBranches',\n\tPatchDoesNotApply = 'PatchDoesNotApply',\n\tNoPathFound = 'NoPathFound',\n\tUnknownPath = 'UnknownPath',\n\tEmptyCommitMessage = 'EmptyCommitMessage'\n}\n"
  },
  {
    "path": "extensions/github/src/typings/ref.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ndeclare module 'tunnel';\n"
  },
  {
    "path": "extensions/github/src/util.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Repository } from './typings/git';\n\nexport class DisposableStore {\n\n\tprivate disposables = new Set<vscode.Disposable>();\n\n\tadd(disposable: vscode.Disposable): void {\n\t\tthis.disposables.add(disposable);\n\t}\n\n\tdispose(): void {\n\t\tfor (const disposable of this.disposables) {\n\t\t\tdisposable.dispose();\n\t\t}\n\n\t\tthis.disposables.clear();\n\t}\n}\n\nfunction decorate(decorator: (fn: Function, key: string) => Function): Function {\n\treturn (_target: any, key: string, descriptor: any) => {\n\t\tlet fnKey: string | null = null;\n\t\tlet fn: Function | null = null;\n\n\t\tif (typeof descriptor.value === 'function') {\n\t\t\tfnKey = 'value';\n\t\t\tfn = descriptor.value;\n\t\t} else if (typeof descriptor.get === 'function') {\n\t\t\tfnKey = 'get';\n\t\t\tfn = descriptor.get;\n\t\t}\n\n\t\tif (!fn || !fnKey) {\n\t\t\tthrow new Error('not supported');\n\t\t}\n\n\t\tdescriptor[fnKey] = decorator(fn, key);\n\t};\n}\n\nfunction _sequentialize(fn: Function, key: string): Function {\n\tconst currentKey = `__$sequence$${key}`;\n\n\treturn function (this: any, ...args: any[]) {\n\t\tconst currentPromise = this[currentKey] as Promise<any> || Promise.resolve(null);\n\t\tconst run = async () => await fn.apply(this, args);\n\t\tthis[currentKey] = currentPromise.then(run, run);\n\t\treturn this[currentKey];\n\t};\n}\n\nexport const sequentialize = decorate(_sequentialize);\n\nexport function groupBy<T>(data: ReadonlyArray<T>, compare: (a: T, b: T) => number): T[][] {\n\tconst result: T[][] = [];\n\tlet currentGroup: T[] | undefined = undefined;\n\tfor (const element of data.slice(0).sort(compare)) {\n\t\tif (!currentGroup || compare(currentGroup[0], element) !== 0) {\n\t\t\tcurrentGroup = [element];\n\t\t\tresult.push(currentGroup);\n\t\t} else {\n\t\t\tcurrentGroup.push(element);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function getRepositoryFromUrl(url: string): { owner: string; repo: string } | undefined {\n\tconst match = /^https:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(\\.git)?$/i.exec(url)\n\t\t|| /^git@github\\.com:([^/]+)\\/([^/]+?)(\\.git)?$/i.exec(url);\n\treturn match ? { owner: match[1], repo: match[2] } : undefined;\n}\n\nexport function getRepositoryFromQuery(query: string): { owner: string; repo: string } | undefined {\n\tconst match = /^([^/]+)\\/([^/]+)$/i.exec(query);\n\treturn match ? { owner: match[1], repo: match[2] } : undefined;\n}\n\nexport function repositoryHasGitHubRemote(repository: Repository) {\n\treturn !!repository.state.remotes.find(remote => remote.fetchUrl ? getRepositoryFromUrl(remote.fetchUrl) : undefined);\n}\n\nexport function getRepositoryDefaultRemoteUrl(repository: Repository): string | undefined {\n\tconst remotes = repository.state.remotes\n\t\t.filter(remote => remote.fetchUrl && getRepositoryFromUrl(remote.fetchUrl));\n\n\tif (remotes.length === 0) {\n\t\treturn undefined;\n\t}\n\n\t// upstream -> origin -> first\n\tconst remote = remotes.find(remote => remote.name === 'upstream')\n\t\t?? remotes.find(remote => remote.name === 'origin')\n\t\t?? remotes[0];\n\n\treturn remote.fetchUrl;\n}\n\nexport function getRepositoryDefaultRemote(repository: Repository): { owner: string; repo: string } | undefined {\n\tconst fetchUrl = getRepositoryDefaultRemoteUrl(repository);\n\treturn fetchUrl ? getRepositoryFromUrl(fetchUrl) : undefined;\n}\n"
  },
  {
    "path": "extensions/github/testWorkspace/.github/PULL_REQUEST_TEMPLATE/a.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/.github/PULL_REQUEST_TEMPLATE/b.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/.github/PULL_REQUEST_TEMPLATE/x.txt",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/.github/PULL_REQUEST_TEMPLATE.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/PULL_REQUEST_TEMPLATE/a.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/PULL_REQUEST_TEMPLATE/b.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/PULL_REQUEST_TEMPLATE/x.txt",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/PULL_REQUEST_TEMPLATE.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/docs/PULL_REQUEST_TEMPLATE/a.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/docs/PULL_REQUEST_TEMPLATE/b.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/docs/PULL_REQUEST_TEMPLATE/x.txt",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/docs/PULL_REQUEST_TEMPLATE.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/some-markdown.md",
    "content": ""
  },
  {
    "path": "extensions/github/testWorkspace/x.txt",
    "content": ""
  },
  {
    "path": "extensions/github/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"experimentalDecorators\": true,\n\t\t\"typeRoots\": [\n\t\t\t\"./node_modules/@types\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.canonicalUriProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.shareProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.timeline.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/github-authentication/.gitignore",
    "content": "src/common/config.json\n"
  },
  {
    "path": "extensions/github-authentication/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/github-authentication/.vscodeignore",
    "content": ".gitignore\nsrc/**\n!src/common/config.json\nout/**\nbuild/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\ntsconfig.json\npackage-lock.json\n"
  },
  {
    "path": "extensions/github-authentication/README.md",
    "content": "# GitHub Authentication for Visual Studio Code\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension provides support for authenticating to GitHub. It registers the `github` Authentication Provider that can be leveraged by other extensions. This also provides the GitHub authentication used by Settings Sync.\n"
  },
  {
    "path": "extensions/github-authentication/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst path = require('path');\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tnode: false,\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n\tresolve: {\n\t\talias: {\n\t\t\t'uuid': path.resolve(__dirname, 'node_modules/uuid/dist/esm-browser/index.js'),\n\t\t\t'./node/authServer': path.resolve(__dirname, 'src/browser/authServer'),\n\t\t\t'./node/crypto': path.resolve(__dirname, 'src/browser/crypto'),\n\t\t\t'./node/fetch': path.resolve(__dirname, 'src/browser/fetch'),\n\t\t\t'./node/buffer': path.resolve(__dirname, 'src/browser/buffer'),\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "extensions/github-authentication/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n});\n"
  },
  {
    "path": "extensions/github-authentication/media/auth.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nhtml {\n\theight: 100%;\n}\n\nbody {\n\tbox-sizing: border-box;\n\tmin-height: 100%;\n\tmargin: 0;\n\tpadding: 15px 30px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tcolor: white;\n\tfont-family: \"Segoe UI\",\"Helvetica Neue\",\"Helvetica\",Arial,sans-serif;\n\tbackground-color: #2C2C32;\n}\n\n.branding {\n\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAlqADAAQAAAABAAAAlgAAAADkcSUjAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAxaElEQVR4Ae19CbgdRbXu6j2cecoECTIkICCGzAg+7qeQ9544QFQgiXpVEJTEe59ALsbMwE5AMZCQELgKeSoqDlyiQogCSUAC6FNCQhIwQMALCbNMGc68p37/v7prnz47++yzzzl76OCu851d3dXV1VXVf69atWqtVZaUg397IPJwSCKT46zgx16wh+19XSYnO6PjE7H4MDuZ7BSxXhQJ/On5KTWbTSMm3bYlvHXmJNxj2SatFLFVioeWn5lDDwAgMvOU2NG/3DMo2h691rLtr4bqBtVX1NVJRUOVBIIiyYSI3RkXO9q5NZmU5S98tu7XpmQF2AwAzCoNwMrAMm/CT3HkrgqJTI/KwodOD4ZDa5MVdUPtfe+KxONKiSob6+SIE46XqsYGK5FIBoLVtQEJiSRaWp+xktaNuzpqfirTLcBOZNJtdnjrDCk6wMrA8hOgWJcZoFSrT4nJogfPESu4Dv8AVLTTEqsC9MkSDHB2NIYfkZGnjJOqpiZQrkTCAmWyKqtDgXBAEs0tLyZtWRl7953/u/uiUR0sVgH2xuKERCJJnhc6lIFV6B7OuXyAJrIpqDzVlQ99TUKVt0scAEomQaXskBAONlEFrgpvLdkZk6r6Wjn6IxMx2qVeY0IsSVrhqnCgMiiJA62v4a5Vkmz/4a7PDWtmVXSIfGMSAGYVFGCpGvGh5VCiHohEAiJXi77sKx+eLZU1N0hHCyuTAJCCDqCAKIUCYxv4AcY6YnL0qeOkZuhQSeoo6b5OG+AC4ZJQRThQFQbAWt7Bvf8ZSNg3P3deA8ZUF2AzADCrMAArA4u9XMoQsQMp6nHlH5dKdcMcad+fJGVCCKRAxfMU1XKB1dYpI8acKI0jj5FkDNSti3LpzSgjCQQmrFA4HKiuIMAO2EnrtkBb+8pdXxr2OjOd+bAd2vQ2cro8mXPjwH/LwBp4H/a/hLvuCsr06cpky6KHfiK1jRdJ235M80ClABMtmMMfKJQDNB4j1VCstg4ZcTKANWpkZmCxAJZiABYIhgO1VRwi21HGj63OxI27pje9xGz5BlgZWOzVUgSPjEqufOheqWmcIq37YwBCWKsDDGlQULnAUh6L4CLFAh/fCmCNOSE7sNxi3IilxiUQCAdrayR+oCWBcn4q0eSy56c2PMc80+6yg2t4MEAKVgYWO7HYwcz8Ig9XSTz5kNQ0nC7tB6KoBmZ+bnAZdaVUhIMHVDxWQtQCYI3thWKZ8rrHLICiCwCslmIKFGn/GoPm9S+cW7ddswJgZw4Ta9NkC/n6HsrA6nufDewOV/Ap8x8cggHvMUztTpLO5igkCV2g4hMIJI3dY56mqBdwgXOlWP0DlhbNkhVgtoQDELza7Z1iJ2J3J2P2DX8/r+Evmsm2A2dukkBfAYbZSDkUrQco+IQ0XeY9eKwEraekovYkzP4OBhUrlGLEXYB1q6QnzXPYLUtuJ5SLcei1k62tMYDKDtTWnRusrf5/J9zbcv9xa5snc9aooLJti3xYbsVy1lEOxekBI01f8NBECVnbJVx1hHS2YSrnGf4y1SQTwAyYTJzpvr6lAWA2AWYlW1vidrQjGait/VS4pvaPx9/bvOn43+4/GwCzDcAoC0P+rKNd1ot9q1s5d489YIa/BQ9+Ap/yAxKsgJSJ8gGXUc94I1BD4Og/j91zDodYGFTmvf88VsYnpiWSt7ICNXWcoQoo2uNJ217298/X/8bky7ZcVKZYppcKE0OaDg0FDn9XPfwFCYc3YEYGUEUpTQeFUNTgyZniDBUyfJdecu9hVJjAYS+YbGuJ8z9QXXNaqL5uzQlrm3d88O79X+Ujt860MIu17ExDZJliFealkMJYMn1NQNZATnXlQ9+ScPXNEm3H02zKrZQK9PpoxQ5+PBJ3pVwqbkBJpFhjPiSNx47sWY7V60Nyy4BaQDQhdqCyJgRWX5LNLbuA8xUfaKz7sTtEkkhhMuBoU5QpVm792rdclKbzkyWoFj64WCrrAKo2SNMxhukSjb4CvoZe/pGBebyfP88ZTNx14KQX6BdV4McQSna2JZItLXGrsurEUEPdra8daPnv43934CIy+Qoqth2hDKx8v4hpkKbrAi++3AUbf4AlmqukvTmuiytgWfr3OBdg/bs533cpwMDgJ6BFEQtUVB4dGlz/kxPuab5TH8S2A1z9bGi+6/o+KY/8FKkUw6KH/ktqm/4Ngk8y6UHltvVCH39IrQx1SsXmoI9l5Tc72xS2Y50AWGtnaEjdF46/p3mtPuJqqmOUQ356YMZtYai8xITrfzsGb4Dg8392W6IZ8FOygImXslwe8KOzF0Dti2D8vZbO0KC6z37wdwfm/d2yvu8dvbPfXr7acw8YcULkrw0Sa34EoBovHZCmq3Jez7dlvwKkGMCoqIHn+E8tQtse5n1UwZn37HXVq0nOeO14sj0Ws44tD4U59FjWLEaaPue+IyXWskMqa11QUfCZQgaK6OtxhqeaIkpInjLUyiRBjJKMhRrrqkOh5IXlodB0S3/ilDR9/cngyx+RcOVg6WjtXZqe67OUUqVnJroQsgu+nTzF/oXUlsIUTIk/WaZY/e18A6r5D34MXbkV0vTBEoVKZ1Zpen8flv2+FCHLnq0YV4N2Zwcwb48pU6z+dDfVXiKnRKGh8HksJt+tIp44penZlmj68yBzD6DjRQ8pmQbwWR4u2aSau0oQg2JRT9EaUqZYfep9vEaKFGhFs2DDN6Si8m594Yk4RQyF+0gVMRlgwyTzb9qRIZu51C02+Uzc7WLaSS55eIvJh1WHwnVGWt0O+VM1eFgMg4dIXBY8OF+qar8HlRd0JciHRRutEoXUy/Q836R5kjIemnwmzpjJTcwlD7O6+crAytaZ5ppK013B5/wNy6W6/goIPkmlMBD1V5puCu8h5gs66GV6E7zHPZRRsmSrgOS7ZI3K84O9Bg/zN/wcuulfVYMHZ+3Mw+Hk+bmmuHT8pPgrZki/aG4qfVymWNneAfmp6Y5TDpm34T6s+306v9L0bA/ntSzAMZdK45qht4qXKVaPPeTM/GISWVcjnZV/xPB3mho8WL1ofPZY4AAuGHmWAZMpKv3cpPsgLlOsTC/BLNHMXn+YRAOPglE/ERoK3a1oMt1XrDQdDsne4YEEl/kv1vOzPcetUxlY6Z3kLNFEZdGG42Gk/hh00w9Xg4fedNPTy8n7OdBjgKRl+5RcudUqy7G8ADDS9DkPnApQbYNjjsOlsz1/SzTeZ/V2bKiQiZk/HUvp572VWcTrfaNYVLddvTUkgyYl5Rk2c1NARtRbUkIHX3nrKyNNn/fgp6BCcL8E0DUxuHShNL3ULzBFqVCR1KwwlZi3LshnQbkDizMkS61i2dkmqDa2zMQpr7tuDc3FQyOmNH0TtD4hTZ97/1ckFLxDEniBCbpvUZMofzQjHdzp5/6oZaoWuQHLMLOrXmgQO34hvugzUMJgfMnvIH5I9rXfgRfTJpqv9P4vU63r7cAYPESmx2X+A7NgQLoCtn68q7BLNL3VK3U9DT1pp6lsPjzoBVj8mqFWSzOfW549B7ZwP4W67RB1fgm7ACh24T84DZTsKlm2/WKZOX499Z1l512OdYoPG5yqkho8qBAoIXMf+K5UNiyAch4axbdXwiWaVAU9BwZQqdHPJCAPD82/55aSHbp17BlY/JrXQLVmOoa/VTtnSqjqVuFI2LI3itkJmX6nCLrICVceIRVVD8iNTy2RK6yrtVGGypWshVke7Bg8kCqJzF2/Gk45LoGMynEf5HGPl6WEIl/yAIlPTjstcmWyP86tW+ZZoWvCo65sbvrblVLVcCuGCFtiUb6MCjQshH/oOquAtQJMbgKzp6TUD7lKVjy9Ua57bJAaaUZ2dnd0kb1KxblKXtAYPMxd/zss0VwibTB4sEGlaF7sl8AXZP61TjhxX1qqirYO2alTPx0c3JHetbGbdq6SmqZLpXUfAEUnAo7NWA8NYLNjkFBXQJj4NpxkTpMrJj6ixgXPTLNTXut6uLkoyTR4WD0zpg5kB7+3EbrpZ6g0veQyqh5abyTuRBSP1dsM8iYwnMBTn91ph4afdKw0jDrWtqForq+oh6KKmWyDoegOLO/MbuXOO6V20BekdS9ngRwyu+ftsaZ2DPIfmI8je7Rtvlwx9vuatdRDo/FJNe/3gzDZg8FD3RjH4KE/SzTsinTy0WOH9OFCWrl8hD4GPwZYSSj/wmzBqm2y7Ff23H7cZ856Lzxk6LfjLc30nFw69R1PKwmsrqGQL57iAg6DK3c+CCadoOIyhnoh8dzXy6EVhvvohMQ7bQyN18mNf1sHUURdSYdGCj6pnDd349H4RmDwUD0AULH5hQBVT+WaZwF0YEYkGA5KKGRZrfsWyS++fHGgtvofYEpArArjpLaXl93jZYd5N9SE4oTkM5vAd0yQln1k0vvLI/HLsZXa1TbCX7n1nNyw43z5zujHBZ7iVLhaYHfQqRYbafrcB8ZhDHkEk5BG6YD7oP63LVV04Q8AKhIxGuZjsAOVBZtx4C1JJKYmb/78Y/r8aKLKrsYR1A0NBAtfryxPcIkuPPbajjeUVTuOhBcUfM11E6Aa4iy4sqb9/4fPJVCvNrhADFd+QCqr/irLd8zSCYFjht3zjDRLvft0SakwdniYd/+ZuG+LhMKNKk03fj77VFiJMiuDjnGwuoG860a4ED1RAKojbttSwxrB7zYGHuc1MS55AF4IGUjLIUO46RksuNp/lYpqmC/Bw1x+mVln1mhB07Ju6AoMjf8iL738FTy3UzhrjIzm8/IfyKjTfdCc+6bC1eYa/Z7jMcfggS33BsPamDjTtfQ0c55eFtO95XiPzT0m5jUGU0Z6XhvyQ3g6ViXVtr2LZeWUiOZH2044YVL0dT3x5w8oFhys2rIeqiEwX2rPN6hMqx0n+G37YuDdpsqoY56V67eNV1DphCHSxeuZO/obU/7GMjn7m/PANyFNX6MC3XiCzvgpJjk4mDQTe3P0lMb0TNd4rzfde+wt1+TzXk8d66gWxUYC8P4f2yvtLWfJjQAV9e7JA7NtPg8haTzsPzD7GyUt72GbMqksYH35PWJoxDBbUTUK85ptsvypb8q3x96mz/TOSPtbCTV4wGvlJGTu+kWwSr7GFwYPfWoP51RoA4e+1n2PSqdMlZs/97aKSCKngOJGUvDrXiyTDQnsfqX4Z7bOCqc6DsHwNRcnYGjsgJQbHVE3+FZZ/vQdcC7u7CGDnar6XQUtI+L4aJpz/01gdK8BTwL5Gx9Egwd2vJ//teUY+kIBsCRBgGqpLPvMGXLzZxxQcVbrNCCti5wFBCfRL+2juMGW0QoseAzRd8D30O2fzUlP6+nc5DWxN583jUMSCm2Dw/y6QV+R007aKUu3nqRrkpxMcDjrS6BQ10jT59z/K6luvAyg4syPQ6wLqr4UWIq8Nih5NYe+Vuk48FmAap72Az8YB1Q9VwrdfNA3w9wm3RybOD2d5yakX2N6+nWTZtLNPeYc17lXC10yp93NcxM8uU1Sj7HJa2JvRm+aHjueelsh1qiqOREzx7/Jsh0X6mSC7gY5NOYSyKRz2xC24zv3rccQ8iXsRYOv2/ECnEsRpc2jQ19ch77Ols0ST5woy6as06GPn5f5YLJV0tu1Jp83zRybuKc83uvm2Bt7jzOVwTTmwT9dGu6ERS+TvDSV58UKFViH5EaNAfB6PwXftVofTD6J4oJsQaXpYGRnr6+V79y/GUs0ZykPR9/lbgN9G7NdNjeoDGLoqw2h3jfJDWefJiumvJbaszBX0VTf6Hu2Hs3bNQwT1m+kgiIRiB1KFSxYZFNLghoGdYMvkRuf3iHXbzlOxQUEV6ahcZorTZ/1wAjoiO3AyzkFwx+c8XORHKjiv5+DLRz6sA8h9nZuOzBdbvjMLK1uLkOfn9vl1g3A2r8CM8I9mEFV4qU4MiXvOzHH3th7zIK85+nH5rynfCYdW2ugnJBK/Ctrx0qw6hm5fvsXFFwcGimxN4HS9DUQfH573YfwPTwFg4fjpJM7PKjmhcnlV3Bx1ucOfe07xI6dJDees0Y4pNPFRy5DX1cLfXsUkCtOxxZjyU/Br9M+fEFUiekClwFFeszmpKeZc+8102xeM9dNbPJ5z538FbrkEghWQOZ1pyx7apUmczcqUi/VTQeoZq37H3g9T8J90FDpgMGDoVR8kLdMf1EuZ8ivqgthdWO1LPv0eFn22ZecoY+yKX+syjivYWC/kLxjFjYba3k37RwHbYQ/gU85qgDS977WMgyhZhL1SGJovFSWPf1ReIs7T2aOe1ULunTt2Vgp+L0EQcSiEF1YWDqiSoluDwKGg++HE0vDexhwmfO+1iYv+S0ubVHUksTQ9zVZfvYdWqzK71SU0L+nOFIv517vB9W/0gZ+l9vHkOSCtyIluHz0yxK1x0GV5GmdoeCVDfwpAyqBogJ82Zg1Vtd/RIKBF8B7nSUX/OJf4drz90qVYjHOBimecKgUY90ShOfuMaJU8B6nEgt+gFePpZlqLCBH25/DBzNaQUVAkXfMhwEK21Wath3ceW5d+PIkxSTPH7tXmk+eiOn6I1Dwo2ZDqcHF2nHxNY79jaskWLleRh33S2irQqVQfVIFHSDh3XHWrpQJLdPGeWMee/9ZbFECJkSY7VbVYcWh+eey7AmAaspz+iETUO4uDgOuSUkpcebad8mKuGCrZFlnh2fKsr/9FtP/86TNVfSDWkbmIoqQylljPEaib0lTExaGwra8/lpQosB9GE1QIOEqPxPW0tSUMa9pwEnqnIkmk3s5/1EUCo8V0E0TiBJmyvJzVusj2Mfs6/d5cCiWaSS/IkqxGWaffD70qWBoMIgyIcq4Uq9Irxfzx3myA5t43JKamoCMHClSXw+aSlkoMpihzwyFhKFJ1/vdPE5ZXdfy3Q5oTqFI6E5BRTvW8SK2lx+voNKPNgLWA338TxC6A4sNphRbjSkw/s8+eaa07fsurFhI2dhhfF2lDWTQoaggQVTpA0eJHHY4XiPOwetrDVNgwrnqiBtApRDl5DOtYP78BQ5vAlCFsSxzl7zcClHClB2iyoYAVARrmf8koWso9DZYFfHwdX0Y9oHTRy/CrOxt8AkrIZJALjpcpm51Xl+I9+m9H3MU05UQxEOHiVRXibwO7SRSrwoOjahbgJkQWE0e8oVztmji9Fkj0wcWMPRVVKiKTtuBy+XGsx0xiVKqyYXlVdlG/vshuN2YGVisoH5dnLWoOOImyJPeAc/wC3QcGGa4xnUMLErfFFaltk5k5CiRN94QaW4GuCBrVPGDCyRvLfkC2Hj+6zEO9Nh9MzzOOWhm3hhXteGOlldBTc/HssxmxzrpGbsYQ182omua21OT3FZrFzBPT+e85u0ak8+km3OVxOGkZ2DxDn7iEXQaxREzx/4SDD1M6m3sEAqO2ewQakrU/O6Pvije7p5785hrvGSu89jk8V7PlMdcN/eS0pih8UgMje++LfI2qoklOLXUZkt1wOcDkFfv1x8cI874Vkw+VgCB2RlMHXmsRejegwGIZ8JYjlon1rtfkhUXtOrQNx1C3CIFVstbtfTHZrtm8qbnST9nvkxp6enMw/+DeSzmTA86Y4Qa8eyT16NHT8UMrRVGCWTqM89uTA3MU7zlmWtMM9fT09Lzm3zmHhOn0vGWafJPkAw9TOQoAIygUb8eyJxi6HE9xXchnflT/ywUQctkunPaleY552HStZgJhi3M+uZBNgVVF4CKSzOR4oGKVTG457FfQm7AYm2pm04d9dknPwFqMB4znjexvkjtg6J9mVk7jUBiIPWqw2zxmFGC2SNqh+oRPBnB5QJIQcRjPXDKMYBzzry/zARVH7Q9EXsL1uEfx1rfUkdZ8dBQG/Y2plDHuQOLNTDgumL03/Gmxkln6y61fPYLuFhHMzSGgfkjj3aYezL1pGgMBjA8V+rlUjoDKr3uZE3l7zoFakHLqDbc0bIRVk0nyopzHtO1Pi4eF8ukras+vj3qG7DYDIKLPNd3xr0lweYJ4C0ehx2iX6T0TkcTXAZIFEccBYBxFqgyL2QheMyQmKJkSNc0FpGJenHoCwWx3hfAWl8EVOosWXnuPh36etPwZJH/ZKEX5r2H3lCeC7PFKyzunv1Ruf6pP0BK/xnIvEAaqFvFt1jqgCpw0OLQWN8gMhLKjG+8JtIK/1ecNbKGJGLpNeU9BCbTnWOagsZgMQOFRGiAWPHpECVsVIuZnR+Gh8PpmflM3F6UwDawnvz3S0Bd+k6xTOW5eG10pOaMPRuLxXCuTyl90hkuTL6Sx0AIlxXDIKpHjRQZMsShXPTa56VcqSHQTdcXBbJnQ2BWSWPR1kelDUPfcoBKVXci9vtFd6oQr6j/wGJtqCNFjUeGOWMuxBLQcixekwriO/KRLwHv0Hj4CPBeRzqgov0qAaT8Fqps+C4m2kkYY0BmEa4KghIvlZXnnCG3nveWZ+hT6LHp5XBwD/RvKPSWo0wrZkMMc6zZGBbfgT+t66DRyY6nkagDPM1Qwh+Ci4FDYwMWsisprcfQ2IGhkYw+KRazONloLIq1vvZWiFa+BJP2dchgybQ1MBYt8dCnjfD/z8AolmkfZ0NXA0JcvpgDt0Wdzd/Al45XFODSD4dG/wQCjOCiAcnRI0WaBrtMPb8D12KmAgvIHa2bpS3+IQUVhz6G94nasLalwD8Dp1imgo5ukSulH/NjuQGUywrdA78JQch7yGLmB8TmeQONCS6CbPgRWDSGu5Z/vAF+CkNfTS1mfXtXya1TL9dHqCXQIaLmwm/DBFJe7znT09PMuYl7upfXGdLLc1K7/7p58/+yOWNUccTYtVhS+QgsaPaBcPE5BJd/gndoHDTYlpHHBeB36oC89drZCirObA8VixkltmldmwkE6Wnm3MSmiEzn6Wkmb3rMfPjPP7D4oK3u0/78Z5FX9jhMsVq551o79/5iRDo0gomvAs818liR8ad1PXVa12H5qA89AKqVf2BxrYwCw5lrPieHD31C2jub5OUXk2CCAw7L5UNwcUxMQKHLCjTAKvsPct2Om5Bkq24aqW859LkH8ggsDB1k3uli59/v/jqMYO9Rvj2AmWFHR0BefglMMhza0LKGMzD/hQDUgRyj2fpBl8l12zdL5K9HpuwBVHTvv0r7tUb5AZb6bVoMYEFL8lv3zINu0o/AsBM9CTCMWAbBHCEOATXB1Y7pvU4WcZk5/PXfZTRLy6Cq6ufke09+VsHFehq1bb++TR/Va+CzQjK4EXe/5MvWLoerSeyXDPdBAVCwpOvFlxQqRHBhJrZnt7M4TOU8MzPzUYe4VaG4gS6FatGetfK97ddjaJyLa47RrB+NIQh8PwTOClGXgVEsgsrIdi5f+zOs+l8Bwahj7UuzJz5E//mDgDVcPX9lt8iB/Y7euj+HRdbWMZqNtiakfvAc8F2PSmTHYV1Do7aE+UobONf2C6jYE6gL33b/gUV+KgWqdX+AT6oLoOnARWhnhwcDKM669JhPRSCPxf/XXhHZS01PHPuqZ7SW5of9E3CNZj8mVbJLrtl+loIr4oojTM4Sxn7CFbuB9enfUKhakpNj8h93VUuyGvsl130UVilw323R94MTCCg9YYygp7hI1RQaOpB6vQEDCA6H1PrkOp03v97kgx/HnpL6V1CbqWgCv7hevrttsSy0Ilq7EgtQ2Wump33QW6kq9B1YpiMvvW8YhJ+PqdO0Ds9+yYoj/Ojam56kHqYHmgRwMaZFzVtvOuAaNtzBlR/B5bSAGqPYGAFbi9QPuVq+t+NfJJqcJpEJ+4QuLrlDWjmkeqBvQ6HZ4eGydcdLAO6DKqpPhI4SVZOp6OeARYHhAsekKZjwo8OiJ+Z16kbRAOLNV3nm5NElO5RhyvJLTHea3MiJ/iRq6v+3VFjPy7VPflxBxRmj2mNqK/7pf3IHltnh4fJ7P4IZ3zZoUg6Hdxp+pQ6oTFfqEOieKKBwzDh17AKLwyH/mR/meLJ/L7QN9jhDIvdB9CtTr0qMNneIiKEPhmH7lEfku9vnOoa+WIw3C9amP4oR+/AbzA1Y7Cxanlz++08CCI9DRbcWPgnIqGeWSnvBpR0L8JiYh/qPH+bTf6RREa8FNoFcAqKtoJ/B5bQFewZhO7141IaD3u9DJLFOZu+o1VUHP26np3Uu3k8vwDLSdCzRzFr7ZciiHgAQsPwBuyobfEW2LyVFokxjCCIee8BkQMV02v8RXNSPenk3zOYxwhpBKm/LFkw9TB6eDySY+03MsjIeu3I6qmTXYM+gwfYuWbLlNLULoHZtUYdGVtD8pzc+vfLefOnXvPem5zN5M6V3v9YzsChNp2Ibpemz7p0l4dpfqOeUJFSPnQ0wvTXo4ViR5FxLgYqnBlxpMTuGSnc02SK4OqBST3AZIwfTnvTYeUL3fk3P05dzlsf8DOa+no45a6QzXe4ZFKr6APjOv8o12y4v6p5BWlHvj6m0idMrb/Jma6S5Zu5Nvyc9vft5ZmDpEk3E0em+7N5rIX1eIdFWzGyVq6bgKfdAqmSCF1wpapUJXHgEh8NXXoILoBa/C1JN6+CyqBOUPI7t9AatxKzxLrn0vkp1bPdPODQeDCxdook4QqVZa2/D7GchZDjcL5mwQH7zFfQh5p0KKjc2YPOCy0vF+Koo5+KzXtkNfwz7HHBpAp/r2wALJdSNGyPUNE6DEuGzsuTJcY49JgTKzpYsvq18PivWHVjdpOlrfwvd9RmuM/787Jes4HIB6QUaW6Tgw4+Czb1IqTyZ+NdeFtn3btKR0pMZ85GhxsFvg5V39wyqHgWB6na5ZutMZSnoaIV9XKrQn2+yP/egfV2NNNJ0xjXDN0ql2S8Z0vR8BgLHK0pgxV0cOY/xnDAflU8tGIu+9aYzWRgCt0UJOF9znMH1bVjOZzt6L8vZM4h9zD2Drt3+LxIf97WUz9d8LWSbBYtcAZBrPm/7+noP8jsUS5XzoEc16+4mqR6+RSrqzkjtl8xCc/lnRUw+7zHTTEgde8Bz0LCIzLys/5oPFjPwkxCQDnn+2bPgYO1fwSTjOrh6G4Ya5pn+jDE0grpS5lXb9FUJP7VTIls+5Kw1gnL5wrDXvJz8xpj1oYFUzrt83dGSCMAZf81Y8FQHO+Pv7bkp0CCj95j3mZdujhl7yZSCCyDSYZCXcBzACwnAKLYGxqLxts2QPxwvd39zo8w/+ddQGDxHqR73Rwa3rMX59kc3RjBD44cw690JvusCHRqppVrKobGAfeaIEy5feyImfNg2pOooSNO7lmgK+GAt2lArnihxYkyAYeijAUYl9pjpaF4lt00/TX70lVfVWJSqwgvH/AE5T8eQ2AEzMw7n7jpdOqJxJWPIlC/XtPQCM92XMQ/ccbt7BtU1/QwiidWai+Kc96H6c0C+xh1W7fWQvzTBNVHxQGX6vhu4lGphjxnsLCrJKDZvmp4yw1KLGVBW9RsBd0oLxv4FIJyAOr+NZRXkx7ZsGviie/tnxvQ8uablcl9PecBv2VDj0D2DBl0i127bLpEnjtU26VIQBNLvkxCQ+v1XQJfqGHxNUEjHGthBHZ7eSQU4d7qTbChcLtLbMPaYSdgnyQ/Py7zHjHGntGDscxhaMHS3/re6asy0XYvBi/eFsQnpwdsscy0930DymHsdvha7fWEhu7J2HDZAfxYAm+bsSYih0fjDMHXoT2yeZervPc+WxmeZ6+bYe6+pS7Y0Nw+1PKfiq+dp1wzRFFC8OA5+Co72MfS1H1gtt5w7Xn54/otZ95gx7pTmjH5T4vvGw2nHFvVbZcDFupsO8B6bjjPXTOxtqzfNHDP2BpPONHOcLY+5tysvvdeg3dgzqKr+Llmy/SbNYvYMMvlzibvK7A4M3ptep2xpJq8pL/3ZmdLT09xzzgpH61INfSyYTMWMsYCDWV4Iin5JqDVfAFDN1PbopAJrlNmCDos2BI+TW2Th2FMByg3ujhrZ78tWZlGvweWTs2cQttNrugx81+MQS3xAh0blu3IbGv04ftIqJTOqC93BxtF+pTrafw6mYqNl1bl36CyJ03AytbkE406JM6xF4z8Jge6vAK6wTgDcvWNzKaaEefhxO0NjVd2pON4li7dOUXDx3ZC37CUwmwnmdZrYpDP2ppljE5t86efp96XnY34TzDFjSh//Bv/kvAYd4aIFGFzgj3vMdGCPmSHbR8stU59z/E4BUI4fiNwr43WntHDcl8G/rJJqgIu+rfwtpfe2EbNG1zKouv5eiWxbqv1Au4JeZo0GDObFegvNdC1bPnNvT/eZdJOPsTfNlM09oddgys7ruVEI5hxIsDj0VYKfAwFvb54Jby4XYg3NWeoYiMtFvgCqqZDaLRp/OcB1JZakKOci3YLDD1Ta7/9JWgbBRq6TlkGD5sjiJx+V2X/2n2VQDu8/IC17V2L42A1xA/z64KUXKujQR5eL2F4tFn0RBHI8+KnVOvSpNkWOQ1+2+tGdEgP5s0Xjr8WOW/8GgS9oozqOKCZFzlbL7NccXjfoWAY1fEzqq3fJVds+4YhZImARXF9k3lL89MGwXqhPQH56UQcsts6CuOE93ahR5UF5rimXXshhco+Z9pY1MrTzJLn5vB3gHypSi7PejhrIsUqzAVLKha4afytEF1NVpyug6hLFocoDqT/vdWR7mDU2O5ZBVdUb5KqtEYey4+Pxqj87n9JAn5i/+wkdBGdJZ9WUFyCQxA6rHS/hCyfDxSWd/AwdOuurgHYEFNw7sMfMLZ+frmrOpCrc17lQgcMqeZNF434LmdhkDDHc8zAEgB8iM0b2P3eOhWVQtD0J58FXy5VPbpBZ25oo83r++TfyqxyQ5/fgLOlwEfrm818Vq3U8KNc2LEI74BrYwwBNDH0sK9b5GmZ9p4FKrdJZTr6Gvt7qZ6T0V47ZBHP5SRCr7JMwpfQ+B5f71euXzaGRE522/di0oP4TUpvcJXM3f/z1mUdAhxvB5jDvv+BUiovQpCA3f+WADN1xCuRJD6oEnIx2/4KjdVCFPWY6WtZJdcuJcvO5m3XoUyZbFQn7V3Jf7zJS+oVjnsIEcTx2Z31FKqAtQUGqUmXi32f/rJjWCY1lHeFgCb/caTYGqnsY+OFHAnO3LGJXBMIWWBkeaU498MOPUyVTE4LLyI++dc+vAa4vYvji0EGpfPe85p70mGAM0CoCIR6dJ/953lI99patCUX+4bBICjbvsUFwB/kIpPRj8KL44fhzSCGgGBh3Axn41aQdsGqHWPZbr99+zLgT3gsNGvrtROuBBF5QrzIvLbPQP6jzwWDxOvr41t2rAK5LIWvijIp5s5FdKi9j6KvlUsVbYECnQpTwmA59o6fZUHArPZtJptfwXv8IboT68Bk6xPgRXClg4cALLvZiEjIVKDraiXBo2PB6qR9xmG1z59kMr7PQGMpYPup7MFCcocqRB91y7mUA1VVYLOVyDypuPCBrS1EmYwam47OiFL2zZSPoG4Y+BVWFOg7xA6hYTYKKlJOU66oJZ0rr/rtTS0CHgpReuxs/jmVQCPywI0JxztlC34SDKZapGgWN02H+RaB963ffxHreDzGzwteC3bNtBSTvZZOgkIehjzxkLBqRH5y7WIswWqmmPD/FNIfnFsUMS7bDYKRxBgSqFEVwKOm5T5i/WKELROxl/W7R06RW+g+KJXZnTIYdNVzqh9ONBprjVUEqVj0zPQd1660TIZB7GIaXkAv9+2+mADy3Y2gcgoVTp6E0dCCgOg5g1pe8WH4wbQNkLQHhHjMEpJ8DBY0RvjK8osg27HvduACCYjNcH0zJi90W1Ayd7DyVkbGtzAiswwAsfBeHELCchhnqM+OuRqkIXoD2noEL8LxvvY3GPCTh2B2yYnq7sx3ITH75bo84t/v210uVl2ybBf5wBfhDNAvrpqXeUUN70O1Gwt0w8OnAOhIUa8ShCiwio7dZXW/X/YsuUOVNDlVevA1uBCp+4Qz5HPd1NlyamucCrA53KDykgcXu5Rc+c3VI9g5KymhspE3m//UR2FptBumw+3mV5j0M+KlGHBHZ+ikM7/dj32sMP7EYKBcFqsUP2YCFncu681igWLQcTx8KWUZPzE62awNtLcru6bEDLfrQvJ+m8CpQ3X4q3tzD0PqogXYt5XjFB1cmYPXIvPtvKCw9k+onCBopfWT8ZkjksLzV+aYadqSk9KgsX3gx/k2/pD/LpPs8LgMr/QUZXfprJ2Bh3sK+123P6/JWIVWK0utgzg2ozPkhNL6UgWVemjemAJU8VwT7XjcMHQ8h8eNqqFEIlaKeyB9ngb0FD/ByyN1baXm9fgh9A3ltd26FRWysnVqcHWJW/OR9kNJ/GoLU4vBcBilGzGBil8/iAhkFpEMpIPXhrLBMsbJBzBhqKLAmcjN17HsNXXpHjdu8+mwl9P9apk9eKRR+0p9szvU6HlnK2G1xGVi9vXqvoUZk4oUA140w8KW2B2hGARfWDThYP++x1tckmNjNo9dK/ONWKdN3UeKa+fTxRtecC+pXbZkPcH0PqsPU5GdX5v8DZakMZgg0cZrkXYfC4Yf7bkkn/x3idMf775eAigBEXGFYcgo3U79EQtXQ7cSCKXX6CxIMunoo3KUOPVwtaXIZWH3qfi5Yu4YakQk/go3A51XafUi4U+pTQweWGSpIZWD1pwtVrwtS+iUT1ko8/nFVJaKtZKENNQyFMnF/6l7Ye2wrCIc62GukDKz+drSR0l8z6TG4s5yIPXbew9BIXXqKI7oYbgOCvsbeepl7vWneY/JfDMqH4bhEMRj2hAXjZxCsp8vAcl5J/34NuK4av1OsTpjPte+GQa5jqNG/ErvuUjDhVbmY6bqQ6cgFU6ZLRUyzEdRnbFIeKANroB1vloAiH31VAlEsAbVsd6T0/bZw8tQoJ1Qhvy8m99ysPZxs2d8mVujnZWB5XmO/D7kEREONyEcPyMkTTsEuFX+ERir2boRdZSGDUrVCPqAPZYMFCNbX84Yluy+qe7MMrD70XdasxlCDAtVrJv4vWP+sgadkDIsElzI9uN0gIdfYPNGlXOnFmMsljdFeLNAHmxorE/v33bv7oqalaK4/rWhL2k8DeThFEcaf1ZKJ0+HY4wegXOS5YAuI31zx5OJI8cib9L5UImpojgdS2QHfS0DFrFA4GKxrrEjs3/9fuy8e9DktdbFaQgz4AeUCvD2g5nOuO6VrJv0fDItL4E4JogjVsOUScm7BYMfEB93FC+b/oIuFTEiAcMYx+wsGahvDyVjnq4nmfReDUn1RH6pGKlayPBQW4hUYO0qamV0z8WpYMV0KhUH0tY4Q+ZfSG/AZnBUmTuDTiFsVNcFgbWPIjna8YLfun1H38uvHgVLdnvJN5rbdF9OJQrxbn5RJf1Yw1IDqzZVPfhEbiP5aN1BLUkG9F0MNBQt+UiBxj71rhdCaHno07QoLt1YIgGA7M9BbGC1zM5Bk+4GnwUIt3XNxw69cKixnPmyHNk121Yvcji9TrMIiEEtA6HAqDV4z8U5I6T+hzmyD3GW9Hx5vCDIGAzZzrIn5/eFwhxITVlVdKFBVF7Q7W59IdLSev/viprF7vt74S4JqEtsFlKWDijUpU6z8vo+eS0sZamyBlN7aBEONejXUsGCoYQDjvVvT8GNAZGaEXoqVUvTLH8VS/snCnmvVDQFa/tjR1sdsO3AdwHS/Wz0LgAptnTmJZkGZaq7ZysDyvsxCHxtwLdoxCiPMn2AgewQc2mb2eJMJWAQV0xHzlXZpkA4YWCiNQ5kdCtQ0WuCf4NmscwOmsd/f8/VBD2u3gDKduUmCmahTpm4rAytTrxQyLWW/uGUoKNejMNQ4CTr13cFF8GggenDgpVY89wLr6BHgsQ7DOjidTff5dbI0DnlhAEqSHdjNNh5fiw3Llu75+pC/IB0q2aqoAHcE3XkovZblp881yVJW+VKuPWDcKV36QqU0qJT+dPiN6AIXX7cGHPA4G7COGiF1AFaffDfQsw55KMsCoBok2bqfT7sTz7l+zzcGbdNHc+uVZzZh8jGZwOtzKAOrz12Wpxu8LgkWbr0XUvopEKimGWp4gEUJmAGZl2L1DVgsAYAKhAO19ZJs3o9j+Zkkg8v3XFL/rLaM9frwmbZulj6AppaBNYDOG/CtpApcAmJYuPUnMNS4SNr2gmO2HP/0TDdgMjEBRmDxkjLvOVEs3pWA92hQqDpJtuxrR7k/hl/AFS9f3PQirolAZCBvI9XURxP7/1MGVv/7Lj93upJqLWzh1qWQ0s/pcqdECT6umKGQxwAV05R5j9L8C8A6vMehUAFlBcNhq7oGgNp/wLKTt8bDVatevbDmNT6TIoOtg15MpvyFMTEPoQysPHTigIugTzG5Gowy9OoXPPEdMPTXwykwAUVqxi2KFUwKMgUWKRYYpWhchn/wGGCxAU5BkLWLeQegrATW8cJWVTUB9Q6YqlsqrI4f/P3iEW+zvpNus8Nb3wAVM6sEA25E9wLKwOreHyU8gycf405pwdavwZ3S7ZIAP5+EOyUbUvoUuFxQxeLY76FSjjj+WC+giK6kFa4IWxVVYMr3vQ5ErgzG965+ceZxyqErhXpjUsEAZTqwDCzTE36JzYxx/tZzYFS2DkpzdMHZiRcF7866L5DjFhJE7IhRx8CNfi135COg7EBFdQig4izvJSwdLU80t/7k1SuOamfTCk2h0ruvDKz0HvHDuRGkLtx2OpistXZlw1C7+T2w3xBWwV9yuKpKhh0xApuIYJ+gZDJgVdUGaMQAQD0HfN2w59Wmnxu5kwOoxaBQEfJbRQtlYBWtq/v4IJdyjbx9b1Pzu3uvxXB4QbCmqT4MnqmiBgYL4Mq4aZ7diQleLPokhKM37P5G453mKTrkzcCyi6OuY5KLFpeBVbSu7seDPLKuCffZw5rfjU6OJ2LjIQyFm2S7E2B7MRBI/OmlbwzdbEpXQPWyjmfyFjL+/4JPu45FLkyEAAAAAElFTkSuQmCC');\n\tbackground-size: 24px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: left center;\n\tpadding-left: 36px;\n\tfont-size: 20px;\n\tletter-spacing: -0.04rem;\n\tfont-weight: 400;\n\tcolor: white;\n\ttext-decoration: none;\n}\n\n.message-container {\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin: 0 30px;\n}\n\n.message {\n\tfont-weight: 300;\n\tfont-size: 1.4rem;\n}\n\nbody.error .message {\n\tdisplay: none;\n}\n\nbody.error .error-message {\n\tdisplay: block;\n}\n\n.error-message {\n\tdisplay: none;\n\tfont-weight: 300;\n\tfont-size: 1.3rem;\n}\n\n.error-text {\n\tcolor: red;\n\tfont-size: 1rem;\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Light\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.woff2\") format(\"woff2\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.svg#web\") format(\"svg\");\n\tfont-weight: 200\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Semilight\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.woff2\") format(\"woff2\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.svg#web\") format(\"svg\");\n\tfont-weight: 300\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.svg#web\") format(\"svg\");\n\tfont-weight: 400\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Semibold\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.svg#web\") format(\"svg\");\n\tfont-weight: 600\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Bold\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.svg#web\") format(\"svg\");\n\tfont-weight: 700\n}\n"
  },
  {
    "path": "extensions/github-authentication/media/index.html",
    "content": "<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n\t<meta charset=\"utf-8\" />\n\t<title>GitHub Authentication - Sign In</title>\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"auth.css\" />\n</head>\n\n<body>\n\t<a class=\"branding\" href=\"https://code.visualstudio.com/\">\n\t\tVisual Studio Code\n\t</a>\n\t<div class=\"message-container\">\n\t\t<div class=\"message\">\n\t\t\tYou are signed in now and can close this page.\n\t\t</div>\n\t\t<div class=\"error-message\">\n\t\t\tAn error occurred while signing in:\n\t\t\t<div class=\"error-text\"></div>\n\t\t</div>\n\t</div>\n\t<script>\n\t\tvar search = window.location.search;\n\t\tvar error = (/[?&^]error=([^&]+)/.exec(search) || [])[1];\n\t\tif (error) {\n\t\t\tdocument.querySelector('.error-text')\n\t\t\t\t.textContent = decodeURIComponent(error);\n\t\t\tdocument.querySelector('body')\n\t\t\t\t.classList.add('error');\n\t\t}\n\t</script>\n</body>\n\n</html>\n"
  },
  {
    "path": "extensions/github-authentication/package.json",
    "content": "{\n  \"name\": \"github-authentication\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"version\": \"0.0.2\",\n  \"engines\": {\n    \"vscode\": \"^1.41.0\"\n  },\n  \"icon\": \"images/icon.png\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"api\": \"none\",\n  \"extensionKind\": [\n    \"ui\",\n    \"workspace\"\n  ],\n  \"activationEvents\": [],\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": \"limited\",\n      \"restrictedConfigurations\": [\n        \"github-enterprise.uri\"\n      ]\n    }\n  },\n  \"contributes\": {\n    \"authentication\": [\n      {\n        \"label\": \"GitHub\",\n        \"id\": \"github\"\n      },\n      {\n        \"label\": \"GitHub Enterprise Server\",\n        \"id\": \"github-enterprise\"\n      }\n    ],\n    \"configuration\": [{\n      \"title\": \"%config.github-enterprise.title%\",\n      \"properties\": {\n        \"github-enterprise.uri\": {\n          \"type\": \"string\",\n          \"markdownDescription\": \"%config.github-enterprise.uri.description%\",\n          \"pattern\": \"^(?:$|(https?)://(?!github\\\\.com).*)\"\n        }\n      }\n    }\n  ]\n  },\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"main\": \"./out/extension.js\",\n  \"browser\": \"./dist/browser/extension.js\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:github-authentication\",\n    \"compile-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none\",\n    \"watch\": \"gulp watch-extension:github-authentication\",\n    \"watch-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose\",\n    \"vscode:prepublish\": \"npm run compile\"\n  },\n  \"dependencies\": {\n    \"node-fetch\": \"2.6.7\",\n    \"@vscode/extension-telemetry\": \"^0.9.8\",\n    \"vscode-tas-client\": \"^0.1.84\"\n  },\n  \"devDependencies\": {\n    \"@types/mocha\": \"^9.1.1\",\n    \"@types/node\": \"20.x\",\n    \"@types/node-fetch\": \"^2.5.7\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/github-authentication/package.nls.json",
    "content": "{\n\t\"displayName\": \"GitHub Authentication\",\n\t\"description\": \"GitHub Authentication Provider\",\n\t\"config.github-enterprise.title\": \"GHE.com & GitHub Enterprise Server Authentication\",\n\t\"config.github-enterprise.uri.description\": \"The URI for your GHE.com or GitHub Enterprise Server instance.\\n\\nExamples:\\n* GHE.com: `https://octocat.ghe.com`\\n* GitHub Enterprise Server: `https://github.octocat.com`\\n\\n> **Note:** This should _not_ be set to a GitHub.com URI. If your account exists on GitHub.com or is a GitHub Enterprise Managed User, you do not need any additional configuration and can simply log in to GitHub.\"\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/browser/authServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function startServer(_: any): any {\n\tthrow new Error('Not implemented');\n}\n\nexport function createServer(_: any): any {\n\tthrow new Error('Not implemented');\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/browser/buffer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function base64Encode(text: string): string {\n\treturn btoa(text);\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/browser/crypto.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const crypto = globalThis.crypto;\n"
  },
  {
    "path": "extensions/github-authentication/src/browser/fetch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const fetching = fetch;\n"
  },
  {
    "path": "extensions/github-authentication/src/common/env.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Uri } from 'vscode';\nimport { AuthProviderType } from '../github';\n\nconst VALID_DESKTOP_CALLBACK_SCHEMES = [\n\t'vscode',\n\t'vscode-insiders',\n\t// On Windows, some browsers don't seem to redirect back to OSS properly.\n\t// As a result, you get stuck in the auth flow. We exclude this from the\n\t// list until we can figure out a way to fix this behavior in browsers.\n\t// 'code-oss',\n\t'vscode-wsl',\n\t'vscode-exploration'\n];\n\nexport function isSupportedClient(uri: Uri): boolean {\n\treturn (\n\t\tVALID_DESKTOP_CALLBACK_SCHEMES.includes(uri.scheme) ||\n\t\t// vscode.dev & insiders.vscode.dev\n\t\t/(?:^|\\.)vscode\\.dev$/.test(uri.authority) ||\n\t\t// github.dev & codespaces\n\t\t/(?:^|\\.)github\\.dev$/.test(uri.authority)\n\t);\n}\n\nexport function isSupportedTarget(type: AuthProviderType, gheUri?: Uri): boolean {\n\treturn (\n\t\ttype === AuthProviderType.github ||\n\t\tisHostedGitHubEnterprise(gheUri!)\n\t);\n}\n\nexport function isHostedGitHubEnterprise(uri: Uri): boolean {\n\treturn /\\.ghe\\.com$/.test(uri.authority);\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/common/errors.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const TIMED_OUT_ERROR = 'Timed out';\n\n// These error messages are internal and should not be shown to the user in any way.\nexport const USER_CANCELLATION_ERROR = 'User Cancelled';\nexport const NETWORK_ERROR = 'network error';\n\n// This is the error message that we throw if the login was cancelled for any reason. Extensions\n// calling `getSession` can handle this error to know that the user cancelled the login.\nexport const CANCELLATION_ERROR = 'Cancelled';\n"
  },
  {
    "path": "extensions/github-authentication/src/common/experimentationService.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { getExperimentationService, IExperimentationService, IExperimentationTelemetry, TargetPopulation } from 'vscode-tas-client';\n\nexport class ExperimentationTelemetry implements IExperimentationTelemetry {\n\tprivate sharedProperties: Record<string, string> = {};\n\tprivate experimentationServicePromise: Promise<IExperimentationService> | undefined;\n\n\tconstructor(private readonly context: vscode.ExtensionContext, private baseReporter: TelemetryReporter) { }\n\n\tprivate async createExperimentationService(): Promise<IExperimentationService> {\n\t\tlet targetPopulation: TargetPopulation;\n\t\tswitch (vscode.env.uriScheme) {\n\t\t\tcase 'vscode':\n\t\t\t\ttargetPopulation = TargetPopulation.Public;\n\t\t\t\tbreak;\n\t\t\tcase 'vscode-insiders':\n\t\t\t\ttargetPopulation = TargetPopulation.Insiders;\n\t\t\t\tbreak;\n\t\t\tcase 'vscode-exploration':\n\t\t\t\ttargetPopulation = TargetPopulation.Internal;\n\t\t\t\tbreak;\n\t\t\tcase 'code-oss':\n\t\t\t\ttargetPopulation = TargetPopulation.Team;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\ttargetPopulation = TargetPopulation.Public;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst id = this.context.extension.id;\n\t\tconst version = this.context.extension.packageJSON.version;\n\t\tconst experimentationService = getExperimentationService(id, version, targetPopulation, this, this.context.globalState);\n\t\tawait experimentationService.initialFetch;\n\t\treturn experimentationService;\n\t}\n\n\t/**\n\t * @returns A promise that you shouldn't need to await because this is just telemetry.\n\t */\n\tasync sendTelemetryEvent(eventName: string, properties?: Record<string, string>, measurements?: Record<string, number>) {\n\t\tif (!this.experimentationServicePromise) {\n\t\t\tthis.experimentationServicePromise = this.createExperimentationService();\n\t\t}\n\t\tawait this.experimentationServicePromise;\n\n\t\tthis.baseReporter.sendTelemetryEvent(\n\t\t\teventName,\n\t\t\t{\n\t\t\t\t...this.sharedProperties,\n\t\t\t\t...properties,\n\t\t\t},\n\t\t\tmeasurements,\n\t\t);\n\t}\n\n\t/**\n\t * @returns A promise that you shouldn't need to await because this is just telemetry.\n\t */\n\tasync sendTelemetryErrorEvent(\n\t\teventName: string,\n\t\tproperties?: Record<string, string>,\n\t\t_measurements?: Record<string, number>\n\t) {\n\t\tif (!this.experimentationServicePromise) {\n\t\t\tthis.experimentationServicePromise = this.createExperimentationService();\n\t\t}\n\t\tawait this.experimentationServicePromise;\n\n\t\tthis.baseReporter.sendTelemetryErrorEvent(eventName, {\n\t\t\t...this.sharedProperties,\n\t\t\t...properties,\n\t\t});\n\t}\n\n\tsetSharedProperty(name: string, value: string): void {\n\t\tthis.sharedProperties[name] = value;\n\t}\n\n\tpostEvent(eventName: string, props: Map<string, string>): void {\n\t\tconst event: Record<string, string> = {};\n\t\tfor (const [key, value] of props) {\n\t\t\tevent[key] = value;\n\t\t}\n\t\tthis.sendTelemetryEvent(eventName, event);\n\t}\n\n\tdispose(): Promise<any> {\n\t\treturn this.baseReporter.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/common/keychain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Log } from './logger';\n\nexport class Keychain {\n\tconstructor(\n\t\tprivate readonly context: vscode.ExtensionContext,\n\t\tprivate readonly serviceId: string,\n\t\tprivate readonly Logger: Log\n\t) { }\n\n\tasync setToken(token: string): Promise<void> {\n\t\ttry {\n\t\t\treturn await this.context.secrets.store(this.serviceId, token);\n\t\t} catch (e) {\n\t\t\t// Ignore\n\t\t\tthis.Logger.error(`Setting token failed: ${e}`);\n\t\t}\n\t}\n\n\tasync getToken(): Promise<string | null | undefined> {\n\t\ttry {\n\t\t\tconst secret = await this.context.secrets.get(this.serviceId);\n\t\t\tif (secret && secret !== '[]') {\n\t\t\t\tthis.Logger.trace('Token acquired from secret storage.');\n\t\t\t}\n\t\t\treturn secret;\n\t\t} catch (e) {\n\t\t\t// Ignore\n\t\t\tthis.Logger.error(`Getting token failed: ${e}`);\n\t\t\treturn Promise.resolve(undefined);\n\t\t}\n\t}\n\n\tasync deleteToken(): Promise<void> {\n\t\ttry {\n\t\t\treturn await this.context.secrets.delete(this.serviceId);\n\t\t} catch (e) {\n\t\t\t// Ignore\n\t\t\tthis.Logger.error(`Deleting token failed: ${e}`);\n\t\t\treturn Promise.resolve(undefined);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/common/logger.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { AuthProviderType } from '../github';\n\nexport class Log {\n\tprivate output: vscode.LogOutputChannel;\n\n\tconstructor(private readonly type: AuthProviderType) {\n\t\tconst friendlyName = this.type === AuthProviderType.github ? 'GitHub' : 'GitHub Enterprise';\n\t\tthis.output = vscode.window.createOutputChannel(`${friendlyName} Authentication`, { log: true });\n\t}\n\n\tpublic trace(message: string): void {\n\t\tthis.output.trace(message);\n\t}\n\n\tpublic info(message: string): void {\n\t\tthis.output.info(message);\n\t}\n\n\tpublic error(message: string): void {\n\t\tthis.output.error(message);\n\t}\n\n\tpublic warn(message: string): void {\n\t\tthis.output.warn(message);\n\t}\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/common/utils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { EventEmitter, Event, Disposable } from 'vscode';\n\nexport function filterEvent<T>(event: Event<T>, filter: (e: T) => boolean): Event<T> {\n\treturn (listener, thisArgs = null, disposables?) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables);\n}\n\nexport function onceEvent<T>(event: Event<T>): Event<T> {\n\treturn (listener, thisArgs = null, disposables?) => {\n\t\tconst result = event(e => {\n\t\t\tresult.dispose();\n\t\t\treturn listener.call(thisArgs, e);\n\t\t}, null, disposables);\n\n\t\treturn result;\n\t};\n}\n\n\nexport interface PromiseAdapter<T, U> {\n\t(\n\t\tvalue: T,\n\t\tresolve:\n\t\t\t(value: U | PromiseLike<U>) => void,\n\t\treject:\n\t\t\t(reason: any) => void\n\t): any;\n}\n\nconst passthrough = (value: any, resolve: (value?: any) => void) => resolve(value);\n\n/**\n * Return a promise that resolves with the next emitted event, or with some future\n * event as decided by an adapter.\n *\n * If specified, the adapter is a function that will be called with\n * `(event, resolve, reject)`. It will be called once per event until it resolves or\n * rejects.\n *\n * The default adapter is the passthrough function `(value, resolve) => resolve(value)`.\n *\n * @param event the event\n * @param adapter controls resolution of the returned promise\n * @returns a promise that resolves or rejects as specified by the adapter\n */\nexport function promiseFromEvent<T, U>(\n\tevent: Event<T>,\n\tadapter: PromiseAdapter<T, U> = passthrough): { promise: Promise<U>; cancel: EventEmitter<void> } {\n\tlet subscription: Disposable;\n\tconst cancel = new EventEmitter<void>();\n\treturn {\n\t\tpromise: new Promise<U>((resolve, reject) => {\n\t\t\tcancel.event(_ => reject('Cancelled'));\n\t\t\tsubscription = event((value: T) => {\n\t\t\t\ttry {\n\t\t\t\t\tPromise.resolve(adapter(value, resolve, reject))\n\t\t\t\t\t\t.catch(reject);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t});\n\t\t}).then(\n\t\t\t(result: U) => {\n\t\t\t\tsubscription.dispose();\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tsubscription.dispose();\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t),\n\t\tcancel\n\t};\n}\n\nexport function arrayEquals<T>(one: ReadonlyArray<T> | undefined, other: ReadonlyArray<T> | undefined, itemEquals: (a: T, b: T) => boolean = (a, b) => a === b): boolean {\n\tif (one === other) {\n\t\treturn true;\n\t}\n\n\tif (!one || !other) {\n\t\treturn false;\n\t}\n\n\tif (one.length !== other.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0, len = one.length; i < len; i++) {\n\t\tif (!itemEquals(one[i], other[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\nexport class StopWatch {\n\n\tprivate _startTime: number = Date.now();\n\tprivate _stopTime: number = -1;\n\n\tpublic stop(): void {\n\t\tthis._stopTime = Date.now();\n\t}\n\n\tpublic elapsed(): number {\n\t\tif (this._stopTime !== -1) {\n\t\t\treturn this._stopTime - this._startTime;\n\t\t}\n\t\treturn Date.now() - this._startTime;\n\t}\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/config.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IConfig {\n\t// The client ID of the GitHub OAuth app\n\tgitHubClientId: string;\n\tgitHubClientSecret?: string;\n}\n\n// For easy access to mixin client ID and secret\n//\n// NOTE: GitHub client secrets cannot be secured when running in a native client so in other words, the client secret is\n// not really a secret... so we allow the client secret in code. It is brought in before we publish VS Code. Reference:\n// https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/best-practices-for-creating-an-oauth-app#client-secrets\nexport const Config: IConfig = {\n\tgitHubClientId: '01ab8ac9400c4e429b23'\n};\n"
  },
  {
    "path": "extensions/github-authentication/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { GitHubAuthenticationProvider, UriEventHandler } from './github';\n\nfunction initGHES(context: vscode.ExtensionContext, uriHandler: UriEventHandler) {\n\tconst settingValue = vscode.workspace.getConfiguration().get<string>('github-enterprise.uri');\n\tif (!settingValue) {\n\t\treturn undefined;\n\t}\n\n\t// validate user value\n\tlet uri: vscode.Uri;\n\ttry {\n\t\turi = vscode.Uri.parse(settingValue, true);\n\t} catch (e) {\n\t\tvscode.window.showErrorMessage(vscode.l10n.t('GitHub Enterprise Server URI is not a valid URI: {0}', e.message ?? e));\n\t\treturn;\n\t}\n\n\tconst githubEnterpriseAuthProvider = new GitHubAuthenticationProvider(context, uriHandler, uri);\n\tcontext.subscriptions.push(githubEnterpriseAuthProvider);\n\treturn githubEnterpriseAuthProvider;\n}\n\nexport function activate(context: vscode.ExtensionContext) {\n\tconst uriHandler = new UriEventHandler();\n\tcontext.subscriptions.push(uriHandler);\n\tcontext.subscriptions.push(vscode.window.registerUriHandler(uriHandler));\n\n\tcontext.subscriptions.push(new GitHubAuthenticationProvider(context, uriHandler));\n\n\tlet githubEnterpriseAuthProvider: GitHubAuthenticationProvider | undefined = initGHES(context, uriHandler);\n\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(async e => {\n\t\tif (e.affectsConfiguration('github-enterprise.uri')) {\n\t\t\tif (vscode.workspace.getConfiguration().get<string>('github-enterprise.uri')) {\n\t\t\t\tgithubEnterpriseAuthProvider?.dispose();\n\t\t\t\tgithubEnterpriseAuthProvider = initGHES(context, uriHandler);\n\t\t\t}\n\t\t}\n\t}));\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/flows.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport { ProgressLocation, Uri, commands, env, l10n, window } from 'vscode';\nimport { Log } from './common/logger';\nimport { Config } from './config';\nimport { UriEventHandler } from './github';\nimport { fetching } from './node/fetch';\nimport { LoopbackAuthServer } from './node/authServer';\nimport { promiseFromEvent } from './common/utils';\nimport { isHostedGitHubEnterprise } from './common/env';\nimport { NETWORK_ERROR, TIMED_OUT_ERROR, USER_CANCELLATION_ERROR } from './common/errors';\n\ninterface IGitHubDeviceCodeResponse {\n\tdevice_code: string;\n\tuser_code: string;\n\tverification_uri: string;\n\tinterval: number;\n}\n\ninterface IFlowOptions {\n\t// GitHub.com\n\treadonly supportsGitHubDotCom: boolean;\n\t// A GitHub Enterprise Server that is hosted by an organization\n\treadonly supportsGitHubEnterpriseServer: boolean;\n\t// A GitHub Enterprise Server that is hosted by GitHub for an organization\n\treadonly supportsHostedGitHubEnterprise: boolean;\n\n\t// Runtimes - there are constraints on which runtimes support which flows\n\treadonly supportsWebWorkerExtensionHost: boolean;\n\treadonly supportsRemoteExtensionHost: boolean;\n\n\t// Clients - see `isSupportedClient` in `common/env.ts` for what constitutes a supported client\n\treadonly supportsSupportedClients: boolean;\n\treadonly supportsUnsupportedClients: boolean;\n\n\t// Configurations - some flows require a client secret\n\treadonly supportsNoClientSecret: boolean;\n}\n\nexport const enum GitHubTarget {\n\tDotCom,\n\tEnterprise,\n\tHostedEnterprise\n}\n\nexport const enum ExtensionHost {\n\tWebWorker,\n\tRemote,\n\tLocal\n}\n\nexport interface IFlowQuery {\n\ttarget: GitHubTarget;\n\textensionHost: ExtensionHost;\n\tisSupportedClient: boolean;\n}\n\ninterface IFlowTriggerOptions {\n\tscopes: string;\n\tbaseUri: Uri;\n\tlogger: Log;\n\tredirectUri: Uri;\n\tnonce: string;\n\tcallbackUri: Uri;\n\turiHandler: UriEventHandler;\n\tenterpriseUri?: Uri;\n\texistingLogin?: string;\n}\n\ninterface IFlow {\n\tlabel: string;\n\toptions: IFlowOptions;\n\ttrigger(options: IFlowTriggerOptions): Promise<string>;\n}\n\nasync function exchangeCodeForToken(\n\tlogger: Log,\n\tendpointUri: Uri,\n\tredirectUri: Uri,\n\tcode: string,\n\tenterpriseUri?: Uri\n): Promise<string> {\n\tlogger.info('Exchanging code for token...');\n\n\tconst clientSecret = Config.gitHubClientSecret;\n\tif (!clientSecret) {\n\t\tthrow new Error('No client secret configured for GitHub authentication.');\n\t}\n\n\tconst body = new URLSearchParams([\n\t\t['code', code],\n\t\t['client_id', Config.gitHubClientId],\n\t\t['redirect_uri', redirectUri.toString(true)],\n\t\t['client_secret', clientSecret]\n\t]);\n\tif (enterpriseUri) {\n\t\tbody.append('github_enterprise', enterpriseUri.toString(true));\n\t}\n\tconst result = await fetching(endpointUri.toString(true), {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t},\n\t\tbody: body.toString()\n\t});\n\n\tif (result.ok) {\n\t\tconst json = await result.json();\n\t\tlogger.info('Token exchange success!');\n\t\treturn json.access_token;\n\t} else {\n\t\tconst text = await result.text();\n\t\tconst error = new Error(text);\n\t\terror.name = 'GitHubTokenExchangeError';\n\t\tthrow error;\n\t}\n}\n\nconst allFlows: IFlow[] = [\n\tnew class UrlHandlerFlow implements IFlow {\n\t\tlabel = l10n.t('url handler');\n\t\toptions: IFlowOptions = {\n\t\t\tsupportsGitHubDotCom: true,\n\t\t\t// Supporting GHES would be challenging because different versions\n\t\t\t// used a different client ID. We could try to detect the version\n\t\t\t// and use the right one, but that's a lot of work when we have\n\t\t\t// other flows that work well.\n\t\t\tsupportsGitHubEnterpriseServer: false,\n\t\t\tsupportsHostedGitHubEnterprise: true,\n\t\t\tsupportsRemoteExtensionHost: true,\n\t\t\tsupportsWebWorkerExtensionHost: true,\n\t\t\t// exchanging a code for a token requires a client secret\n\t\t\tsupportsNoClientSecret: false,\n\t\t\tsupportsSupportedClients: true,\n\t\t\tsupportsUnsupportedClients: false\n\t\t};\n\n\t\tasync trigger({\n\t\t\tscopes,\n\t\t\tbaseUri,\n\t\t\tredirectUri,\n\t\t\tlogger,\n\t\t\tnonce,\n\t\t\tcallbackUri,\n\t\t\turiHandler,\n\t\t\tenterpriseUri,\n\t\t\texistingLogin\n\t\t}: IFlowTriggerOptions): Promise<string> {\n\t\t\tlogger.info(`Trying without local server... (${scopes})`);\n\t\t\treturn await window.withProgress<string>({\n\t\t\t\tlocation: ProgressLocation.Notification,\n\t\t\t\ttitle: l10n.t({\n\t\t\t\t\tmessage: 'Signing in to {0}...',\n\t\t\t\t\targs: [baseUri.authority],\n\t\t\t\t\tcomment: ['The {0} will be a url, e.g. github.com']\n\t\t\t\t}),\n\t\t\t\tcancellable: true\n\t\t\t}, async (_, token) => {\n\t\t\t\tconst promise = uriHandler.waitForCode(logger, scopes, nonce, token);\n\n\t\t\t\tconst searchParams = new URLSearchParams([\n\t\t\t\t\t['client_id', Config.gitHubClientId],\n\t\t\t\t\t['redirect_uri', redirectUri.toString(true)],\n\t\t\t\t\t['scope', scopes],\n\t\t\t\t\t['state', encodeURIComponent(callbackUri.toString(true))]\n\t\t\t\t]);\n\t\t\t\tif (existingLogin) {\n\t\t\t\t\tsearchParams.append('login', existingLogin);\n\t\t\t\t} else {\n\t\t\t\t\tsearchParams.append('prompt', 'select_account');\n\t\t\t\t}\n\n\t\t\t\t// The extra toString, parse is apparently needed for env.openExternal\n\t\t\t\t// to open the correct URL.\n\t\t\t\tconst uri = Uri.parse(baseUri.with({\n\t\t\t\t\tpath: '/login/oauth/authorize',\n\t\t\t\t\tquery: searchParams.toString()\n\t\t\t\t}).toString(true));\n\t\t\t\tawait env.openExternal(uri);\n\n\t\t\t\tconst code = await promise;\n\n\t\t\t\tconst proxyEndpoints: { [providerId: string]: string } | undefined = await commands.executeCommand('workbench.getCodeExchangeProxyEndpoints');\n\t\t\t\tconst endpointUrl = proxyEndpoints?.github\n\t\t\t\t\t? Uri.parse(`${proxyEndpoints.github}login/oauth/access_token`)\n\t\t\t\t\t: baseUri.with({ path: '/login/oauth/access_token' });\n\n\t\t\t\tconst accessToken = await exchangeCodeForToken(logger, endpointUrl, redirectUri, code, enterpriseUri);\n\t\t\t\treturn accessToken;\n\t\t\t});\n\t\t}\n\t},\n\tnew class LocalServerFlow implements IFlow {\n\t\tlabel = l10n.t('local server');\n\t\toptions: IFlowOptions = {\n\t\t\tsupportsGitHubDotCom: true,\n\t\t\t// Supporting GHES would be challenging because different versions\n\t\t\t// used a different client ID. We could try to detect the version\n\t\t\t// and use the right one, but that's a lot of work when we have\n\t\t\t// other flows that work well.\n\t\t\tsupportsGitHubEnterpriseServer: false,\n\t\t\tsupportsHostedGitHubEnterprise: true,\n\t\t\t// Opening a port on the remote side can't be open in the browser on\n\t\t\t// the client side so this flow won't work in remote extension hosts\n\t\t\tsupportsRemoteExtensionHost: false,\n\t\t\t// Web worker can't open a port to listen for the redirect\n\t\t\tsupportsWebWorkerExtensionHost: false,\n\t\t\t// exchanging a code for a token requires a client secret\n\t\t\tsupportsNoClientSecret: false,\n\t\t\tsupportsSupportedClients: true,\n\t\t\tsupportsUnsupportedClients: true\n\t\t};\n\t\tasync trigger({\n\t\t\tscopes,\n\t\t\tbaseUri,\n\t\t\tredirectUri,\n\t\t\tlogger,\n\t\t\tenterpriseUri,\n\t\t\texistingLogin\n\t\t}: IFlowTriggerOptions): Promise<string> {\n\t\t\tlogger.info(`Trying with local server... (${scopes})`);\n\t\t\treturn await window.withProgress<string>({\n\t\t\t\tlocation: ProgressLocation.Notification,\n\t\t\t\ttitle: l10n.t({\n\t\t\t\t\tmessage: 'Signing in to {0}...',\n\t\t\t\t\targs: [baseUri.authority],\n\t\t\t\t\tcomment: ['The {0} will be a url, e.g. github.com']\n\t\t\t\t}),\n\t\t\t\tcancellable: true\n\t\t\t}, async (_, token) => {\n\t\t\t\tconst searchParams = new URLSearchParams([\n\t\t\t\t\t['client_id', Config.gitHubClientId],\n\t\t\t\t\t['redirect_uri', redirectUri.toString(true)],\n\t\t\t\t\t['scope', scopes],\n\t\t\t\t]);\n\t\t\t\tif (existingLogin) {\n\t\t\t\t\tsearchParams.append('login', existingLogin);\n\t\t\t\t} else {\n\t\t\t\t\tsearchParams.append('prompt', 'select_account');\n\t\t\t\t}\n\n\t\t\t\tconst loginUrl = baseUri.with({\n\t\t\t\t\tpath: '/login/oauth/authorize',\n\t\t\t\t\tquery: searchParams.toString()\n\t\t\t\t});\n\t\t\t\tconst server = new LoopbackAuthServer(path.join(__dirname, '../media'), loginUrl.toString(true));\n\t\t\t\tconst port = await server.start();\n\n\t\t\t\tlet codeToExchange;\n\t\t\t\ttry {\n\t\t\t\t\tenv.openExternal(Uri.parse(`http://127.0.0.1:${port}/signin?nonce=${encodeURIComponent(server.nonce)}`));\n\t\t\t\t\tconst { code } = await Promise.race([\n\t\t\t\t\t\tserver.waitForOAuthResponse(),\n\t\t\t\t\t\tnew Promise<any>((_, reject) => setTimeout(() => reject(TIMED_OUT_ERROR), 300_000)), // 5min timeout\n\t\t\t\t\t\tpromiseFromEvent<any, any>(token.onCancellationRequested, (_, __, reject) => { reject(USER_CANCELLATION_ERROR); }).promise\n\t\t\t\t\t]);\n\t\t\t\t\tcodeToExchange = code;\n\t\t\t\t} finally {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tvoid server.stop();\n\t\t\t\t\t}, 5000);\n\t\t\t\t}\n\n\t\t\t\tconst accessToken = await exchangeCodeForToken(\n\t\t\t\t\tlogger,\n\t\t\t\t\tbaseUri.with({ path: '/login/oauth/access_token' }),\n\t\t\t\t\tredirectUri,\n\t\t\t\t\tcodeToExchange,\n\t\t\t\t\tenterpriseUri);\n\t\t\t\treturn accessToken;\n\t\t\t});\n\t\t}\n\t},\n\tnew class DeviceCodeFlow implements IFlow {\n\t\tlabel = l10n.t('device code');\n\t\toptions: IFlowOptions = {\n\t\t\tsupportsGitHubDotCom: true,\n\t\t\tsupportsGitHubEnterpriseServer: true,\n\t\t\tsupportsHostedGitHubEnterprise: true,\n\t\t\tsupportsRemoteExtensionHost: true,\n\t\t\t// CORS prevents this from working in web workers\n\t\t\tsupportsWebWorkerExtensionHost: false,\n\t\t\tsupportsNoClientSecret: true,\n\t\t\tsupportsSupportedClients: true,\n\t\t\tsupportsUnsupportedClients: true\n\t\t};\n\t\tasync trigger({ scopes, baseUri, logger }: IFlowTriggerOptions) {\n\t\t\tlogger.info(`Trying device code flow... (${scopes})`);\n\n\t\t\t// Get initial device code\n\t\t\tconst uri = baseUri.with({\n\t\t\t\tpath: '/login/device/code',\n\t\t\t\tquery: `client_id=${Config.gitHubClientId}&scope=${scopes}`\n\t\t\t});\n\t\t\tconst result = await fetching(uri.toString(true), {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\tAccept: 'application/json'\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!result.ok) {\n\t\t\t\tthrow new Error(`Failed to get one-time code: ${await result.text()}`);\n\t\t\t}\n\n\t\t\tconst json = await result.json() as IGitHubDeviceCodeResponse;\n\n\t\t\tconst button = l10n.t('Copy & Continue to GitHub');\n\t\t\tconst modalResult = await window.showInformationMessage(\n\t\t\t\tl10n.t({ message: 'Your Code: {0}', args: [json.user_code], comment: ['The {0} will be a code, e.g. 123-456'] }),\n\t\t\t\t{\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tdetail: l10n.t('To finish authenticating, navigate to GitHub and paste in the above one-time code.')\n\t\t\t\t}, button);\n\n\t\t\tif (modalResult !== button) {\n\t\t\t\tthrow new Error(USER_CANCELLATION_ERROR);\n\t\t\t}\n\n\t\t\tawait env.clipboard.writeText(json.user_code);\n\n\t\t\tconst uriToOpen = await env.asExternalUri(Uri.parse(json.verification_uri));\n\t\t\tawait env.openExternal(uriToOpen);\n\n\t\t\treturn await this.waitForDeviceCodeAccessToken(baseUri, json);\n\t\t}\n\n\t\tprivate async waitForDeviceCodeAccessToken(\n\t\t\tbaseUri: Uri,\n\t\t\tjson: IGitHubDeviceCodeResponse,\n\t\t): Promise<string> {\n\t\t\treturn await window.withProgress<string>({\n\t\t\t\tlocation: ProgressLocation.Notification,\n\t\t\t\tcancellable: true,\n\t\t\t\ttitle: l10n.t({\n\t\t\t\t\tmessage: 'Open [{0}]({0}) in a new tab and paste your one-time code: {1}',\n\t\t\t\t\targs: [json.verification_uri, json.user_code],\n\t\t\t\t\tcomment: [\n\t\t\t\t\t\t'The [{0}]({0}) will be a url and the {1} will be a code, e.g. 123-456',\n\t\t\t\t\t\t'{Locked=\"[{0}]({0})\"}'\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t}, async (_, token) => {\n\t\t\t\tconst refreshTokenUri = baseUri.with({\n\t\t\t\t\tpath: '/login/oauth/access_token',\n\t\t\t\t\tquery: `client_id=${Config.gitHubClientId}&device_code=${json.device_code}&grant_type=urn:ietf:params:oauth:grant-type:device_code`\n\t\t\t\t});\n\n\t\t\t\t// Try for 2 minutes\n\t\t\t\tconst attempts = 120 / json.interval;\n\t\t\t\tfor (let i = 0; i < attempts; i++) {\n\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, json.interval * 1000));\n\t\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\t\tthrow new Error(USER_CANCELLATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\tlet accessTokenResult;\n\t\t\t\t\ttry {\n\t\t\t\t\t\taccessTokenResult = await fetching(refreshTokenUri.toString(true), {\n\t\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAccept: 'application/json'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!accessTokenResult.ok) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst accessTokenJson = await accessTokenResult.json();\n\n\t\t\t\t\tif (accessTokenJson.error === 'authorization_pending') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (accessTokenJson.error) {\n\t\t\t\t\t\tthrow new Error(accessTokenJson.error_description);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn accessTokenJson.access_token;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error(TIMED_OUT_ERROR);\n\t\t\t});\n\t\t}\n\t},\n\tnew class PatFlow implements IFlow {\n\t\tlabel = l10n.t('personal access token');\n\t\toptions: IFlowOptions = {\n\t\t\tsupportsGitHubDotCom: true,\n\t\t\tsupportsGitHubEnterpriseServer: true,\n\t\t\tsupportsHostedGitHubEnterprise: true,\n\t\t\tsupportsRemoteExtensionHost: true,\n\t\t\tsupportsWebWorkerExtensionHost: true,\n\t\t\tsupportsNoClientSecret: true,\n\t\t\t// PATs can't be used with Settings Sync so we don't enable this flow\n\t\t\t// for supported clients\n\t\t\tsupportsSupportedClients: false,\n\t\t\tsupportsUnsupportedClients: true\n\t\t};\n\n\t\tasync trigger({ scopes, baseUri, logger, enterpriseUri }: IFlowTriggerOptions) {\n\t\t\tlogger.info(`Trying to retrieve PAT... (${scopes})`);\n\n\t\t\tconst button = l10n.t('Continue to GitHub');\n\t\t\tconst modalResult = await window.showInformationMessage(\n\t\t\t\tl10n.t('Continue to GitHub to create a Personal Access Token (PAT)'),\n\t\t\t\t{\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tdetail: l10n.t('To finish authenticating, navigate to GitHub to create a PAT then paste the PAT into the input box.')\n\t\t\t\t}, button);\n\n\t\t\tif (modalResult !== button) {\n\t\t\t\tthrow new Error(USER_CANCELLATION_ERROR);\n\t\t\t}\n\n\t\t\tconst description = `${env.appName} (${scopes})`;\n\t\t\tconst uriToOpen = await env.asExternalUri(baseUri.with({ path: '/settings/tokens/new', query: `description=${description}&scopes=${scopes.split(' ').join(',')}` }));\n\t\t\tawait env.openExternal(uriToOpen);\n\t\t\tconst token = await window.showInputBox({ placeHolder: `ghp_1a2b3c4...`, prompt: `GitHub Personal Access Token - ${scopes}`, ignoreFocusOut: true });\n\t\t\tif (!token) { throw new Error(USER_CANCELLATION_ERROR); }\n\n\t\t\tconst appUri = !enterpriseUri || isHostedGitHubEnterprise(enterpriseUri)\n\t\t\t\t? Uri.parse(`${baseUri.scheme}://api.${baseUri.authority}`)\n\t\t\t\t: Uri.parse(`${baseUri.scheme}://${baseUri.authority}/api/v3`);\n\n\t\t\tconst tokenScopes = await this.getScopes(token, appUri, logger); // Example: ['repo', 'user']\n\t\t\tconst scopesList = scopes.split(' '); // Example: 'read:user repo user:email'\n\t\t\tif (!scopesList.every(scope => {\n\t\t\t\tconst included = tokenScopes.includes(scope);\n\t\t\t\tif (included || !scope.includes(':')) {\n\t\t\t\t\treturn included;\n\t\t\t\t}\n\n\t\t\t\treturn scope.split(':').some(splitScopes => {\n\t\t\t\t\treturn tokenScopes.includes(splitScopes);\n\t\t\t\t});\n\t\t\t})) {\n\t\t\t\tthrow new Error(`The provided token does not match the requested scopes: ${scopes}`);\n\t\t\t}\n\n\t\t\treturn token;\n\t\t}\n\n\t\tprivate async getScopes(token: string, serverUri: Uri, logger: Log): Promise<string[]> {\n\t\t\ttry {\n\t\t\t\tlogger.info('Getting token scopes...');\n\t\t\t\tconst result = await fetching(serverUri.toString(), {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAuthorization: `token ${token}`,\n\t\t\t\t\t\t'User-Agent': `${env.appName} (${env.appHost})`\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (result.ok) {\n\t\t\t\t\tconst scopes = result.headers.get('X-OAuth-Scopes');\n\t\t\t\t\treturn scopes ? scopes.split(',').map(scope => scope.trim()) : [];\n\t\t\t\t} else {\n\t\t\t\t\tlogger.error(`Getting scopes failed: ${result.statusText}`);\n\t\t\t\t\tthrow new Error(result.statusText);\n\t\t\t\t}\n\t\t\t} catch (ex) {\n\t\t\t\tlogger.error(ex.message);\n\t\t\t\tthrow new Error(NETWORK_ERROR);\n\t\t\t}\n\t\t}\n\t}\n];\n\nexport function getFlows(query: IFlowQuery) {\n\treturn allFlows.filter(flow => {\n\t\tlet useFlow: boolean = true;\n\t\tswitch (query.target) {\n\t\t\tcase GitHubTarget.DotCom:\n\t\t\t\tuseFlow &&= flow.options.supportsGitHubDotCom;\n\t\t\t\tbreak;\n\t\t\tcase GitHubTarget.Enterprise:\n\t\t\t\tuseFlow &&= flow.options.supportsGitHubEnterpriseServer;\n\t\t\t\tbreak;\n\t\t\tcase GitHubTarget.HostedEnterprise:\n\t\t\t\tuseFlow &&= flow.options.supportsHostedGitHubEnterprise;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tswitch (query.extensionHost) {\n\t\t\tcase ExtensionHost.Remote:\n\t\t\t\tuseFlow &&= flow.options.supportsRemoteExtensionHost;\n\t\t\t\tbreak;\n\t\t\tcase ExtensionHost.WebWorker:\n\t\t\t\tuseFlow &&= flow.options.supportsWebWorkerExtensionHost;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!Config.gitHubClientSecret) {\n\t\t\tuseFlow &&= flow.options.supportsNoClientSecret;\n\t\t}\n\n\t\tif (query.isSupportedClient) {\n\t\t\t// TODO: revisit how we support PAT in GHES but not DotCom... but this works for now since\n\t\t\t// there isn't another flow that has supportsSupportedClients = false\n\t\t\tuseFlow &&= (flow.options.supportsSupportedClients || query.target !== GitHubTarget.DotCom);\n\t\t} else {\n\t\t\tuseFlow &&= flow.options.supportsUnsupportedClients;\n\t\t}\n\t\treturn useFlow;\n\t});\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/github.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { Keychain } from './common/keychain';\nimport { GitHubServer, IGitHubServer } from './githubServer';\nimport { PromiseAdapter, arrayEquals, promiseFromEvent } from './common/utils';\nimport { ExperimentationTelemetry } from './common/experimentationService';\nimport { Log } from './common/logger';\nimport { crypto } from './node/crypto';\nimport { TIMED_OUT_ERROR, USER_CANCELLATION_ERROR } from './common/errors';\n\ninterface SessionData {\n\tid: string;\n\taccount?: {\n\t\tlabel?: string;\n\t\tdisplayName?: string;\n\t\t// Unfortunately, for some time the id was a number, so we need to support both.\n\t\t// This can be removed once we are confident that all users have migrated to the new id.\n\t\tid: string | number;\n\t};\n\tscopes: string[];\n\taccessToken: string;\n}\n\nexport enum AuthProviderType {\n\tgithub = 'github',\n\tgithubEnterprise = 'github-enterprise'\n}\n\nexport class UriEventHandler extends vscode.EventEmitter<vscode.Uri> implements vscode.UriHandler {\n\tprivate readonly _pendingNonces = new Map<string, string[]>();\n\tprivate readonly _codeExchangePromises = new Map<string, { promise: Promise<string>; cancel: vscode.EventEmitter<void> }>();\n\n\tpublic handleUri(uri: vscode.Uri) {\n\t\tthis.fire(uri);\n\t}\n\n\tpublic async waitForCode(logger: Log, scopes: string, nonce: string, token: vscode.CancellationToken) {\n\t\tconst existingNonces = this._pendingNonces.get(scopes) || [];\n\t\tthis._pendingNonces.set(scopes, [...existingNonces, nonce]);\n\n\t\tlet codeExchangePromise = this._codeExchangePromises.get(scopes);\n\t\tif (!codeExchangePromise) {\n\t\t\tcodeExchangePromise = promiseFromEvent(this.event, this.handleEvent(logger, scopes));\n\t\t\tthis._codeExchangePromises.set(scopes, codeExchangePromise);\n\t\t}\n\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\tcodeExchangePromise.promise,\n\t\t\t\tnew Promise<string>((_, reject) => setTimeout(() => reject(TIMED_OUT_ERROR), 300_000)), // 5min timeout\n\t\t\t\tpromiseFromEvent<void, string>(token.onCancellationRequested, (_, __, reject) => { reject(USER_CANCELLATION_ERROR); }).promise\n\t\t\t]);\n\t\t} finally {\n\t\t\tthis._pendingNonces.delete(scopes);\n\t\t\tcodeExchangePromise?.cancel.fire();\n\t\t\tthis._codeExchangePromises.delete(scopes);\n\t\t}\n\t}\n\n\tprivate handleEvent: (logger: Log, scopes: string) => PromiseAdapter<vscode.Uri, string> =\n\t\t(logger: Log, scopes) => (uri, resolve, reject) => {\n\t\t\tconst query = new URLSearchParams(uri.query);\n\t\t\tconst code = query.get('code');\n\t\t\tconst nonce = query.get('nonce');\n\t\t\tif (!code) {\n\t\t\t\treject(new Error('No code'));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!nonce) {\n\t\t\t\treject(new Error('No nonce'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst acceptedNonces = this._pendingNonces.get(scopes) || [];\n\t\t\tif (!acceptedNonces.includes(nonce)) {\n\t\t\t\t// A common scenario of this happening is if you:\n\t\t\t\t// 1. Trigger a sign in with one set of scopes\n\t\t\t\t// 2. Before finishing 1, you trigger a sign in with a different set of scopes\n\t\t\t\t// In this scenario we should just return and wait for the next UriHandler event\n\t\t\t\t// to run as we are probably still waiting on the user to hit 'Continue'\n\t\t\t\tlogger.info('Nonce not found in accepted nonces. Skipping this execution...');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve(code);\n\t\t};\n}\n\nexport class GitHubAuthenticationProvider implements vscode.AuthenticationProvider, vscode.Disposable {\n\tprivate readonly _sessionChangeEmitter = new vscode.EventEmitter<vscode.AuthenticationProviderAuthenticationSessionsChangeEvent>();\n\tprivate readonly _logger: Log;\n\tprivate readonly _githubServer: IGitHubServer;\n\tprivate readonly _telemetryReporter: ExperimentationTelemetry;\n\tprivate readonly _keychain: Keychain;\n\tprivate readonly _accountsSeen = new Set<string>();\n\tprivate readonly _disposable: vscode.Disposable | undefined;\n\n\tprivate _sessionsPromise: Promise<vscode.AuthenticationSession[]>;\n\n\tconstructor(\n\t\tprivate readonly context: vscode.ExtensionContext,\n\t\turiHandler: UriEventHandler,\n\t\tghesUri?: vscode.Uri\n\t) {\n\t\tconst { aiKey } = context.extension.packageJSON as { name: string; version: string; aiKey: string };\n\t\tthis._telemetryReporter = new ExperimentationTelemetry(context, new TelemetryReporter(aiKey));\n\n\t\tconst type = ghesUri ? AuthProviderType.githubEnterprise : AuthProviderType.github;\n\n\t\tthis._logger = new Log(type);\n\n\t\tthis._keychain = new Keychain(\n\t\t\tthis.context,\n\t\t\ttype === AuthProviderType.github\n\t\t\t\t? `${type}.auth`\n\t\t\t\t: `${ghesUri?.authority}${ghesUri?.path}.ghes.auth`,\n\t\t\tthis._logger);\n\n\t\tthis._githubServer = new GitHubServer(\n\t\t\tthis._logger,\n\t\t\tthis._telemetryReporter,\n\t\t\turiHandler,\n\t\t\tcontext.extension.extensionKind,\n\t\t\tghesUri);\n\n\t\t// Contains the current state of the sessions we have available.\n\t\tthis._sessionsPromise = this.readSessions().then((sessions) => {\n\t\t\t// fire telemetry after a second to allow the workbench to focus on loading\n\t\t\tsetTimeout(() => sessions.forEach(s => this.afterSessionLoad(s)), 1000);\n\t\t\treturn sessions;\n\t\t});\n\n\t\tthis._disposable = vscode.Disposable.from(\n\t\t\tthis._telemetryReporter,\n\t\t\tvscode.authentication.registerAuthenticationProvider(type, this._githubServer.friendlyName, this, { supportsMultipleAccounts: true }),\n\t\t\tthis.context.secrets.onDidChange(() => this.checkForUpdates())\n\t\t);\n\t}\n\n\tdispose() {\n\t\tthis._disposable?.dispose();\n\t}\n\n\tget onDidChangeSessions() {\n\t\treturn this._sessionChangeEmitter.event;\n\t}\n\n\tasync getSessions(scopes: string[] | undefined, options?: vscode.AuthenticationProviderSessionOptions): Promise<vscode.AuthenticationSession[]> {\n\t\t// For GitHub scope list, order doesn't matter so we immediately sort the scopes\n\t\tconst sortedScopes = scopes?.sort() || [];\n\t\tthis._logger.info(`Getting sessions for ${sortedScopes.length ? sortedScopes.join(',') : 'all scopes'}...`);\n\t\tconst sessions = await this._sessionsPromise;\n\t\tconst accountFilteredSessions = options?.account\n\t\t\t? sessions.filter(session => session.account.label === options.account?.label)\n\t\t\t: sessions;\n\t\tconst finalSessions = sortedScopes.length\n\t\t\t? accountFilteredSessions.filter(session => arrayEquals([...session.scopes].sort(), sortedScopes))\n\t\t\t: accountFilteredSessions;\n\n\t\tthis._logger.info(`Got ${finalSessions.length} sessions for ${sortedScopes?.join(',') ?? 'all scopes'}...`);\n\t\treturn finalSessions;\n\t}\n\n\tprivate async afterSessionLoad(session: vscode.AuthenticationSession): Promise<void> {\n\t\t// We only want to fire a telemetry if we haven't seen this account yet in this session.\n\t\tif (!this._accountsSeen.has(session.account.id)) {\n\t\t\tthis._accountsSeen.add(session.account.id);\n\t\t\tthis._githubServer.sendAdditionalTelemetryInfo(session);\n\t\t}\n\t}\n\n\tprivate async checkForUpdates() {\n\t\tconst previousSessions = await this._sessionsPromise;\n\t\tthis._sessionsPromise = this.readSessions();\n\t\tconst storedSessions = await this._sessionsPromise;\n\n\t\tconst added: vscode.AuthenticationSession[] = [];\n\t\tconst removed: vscode.AuthenticationSession[] = [];\n\n\t\tstoredSessions.forEach(session => {\n\t\t\tconst matchesExisting = previousSessions.some(s => s.id === session.id);\n\t\t\t// Another window added a session to the keychain, add it to our state as well\n\t\t\tif (!matchesExisting) {\n\t\t\t\tthis._logger.info('Adding session found in keychain');\n\t\t\t\tadded.push(session);\n\t\t\t}\n\t\t});\n\n\t\tpreviousSessions.forEach(session => {\n\t\t\tconst matchesExisting = storedSessions.some(s => s.id === session.id);\n\t\t\t// Another window has logged out, remove from our state\n\t\t\tif (!matchesExisting) {\n\t\t\t\tthis._logger.info('Removing session no longer found in keychain');\n\t\t\t\tremoved.push(session);\n\t\t\t}\n\t\t});\n\n\t\tif (added.length || removed.length) {\n\t\t\tthis._sessionChangeEmitter.fire({ added, removed, changed: [] });\n\t\t}\n\t}\n\n\tprivate async readSessions(): Promise<vscode.AuthenticationSession[]> {\n\t\tlet sessionData: SessionData[];\n\t\ttry {\n\t\t\tthis._logger.info('Reading sessions from keychain...');\n\t\t\tconst storedSessions = await this._keychain.getToken();\n\t\t\tif (!storedSessions) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tthis._logger.info('Got stored sessions!');\n\n\t\t\ttry {\n\t\t\t\tsessionData = JSON.parse(storedSessions);\n\t\t\t} catch (e) {\n\t\t\t\tawait this._keychain.deleteToken();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis._logger.error(`Error reading token: ${e}`);\n\t\t\treturn [];\n\t\t}\n\n\t\t// Unfortunately, we were using a number secretly for the account id for some time... this is due to a bad `any`.\n\t\t// AuthenticationSession's account id is a string, so we need to detect when there is a number accountId and re-store\n\t\t// the sessions to migrate away from the bad number usage.\n\t\t// TODO@TylerLeonhardt: Remove this after we are confident that all users have migrated to the new id.\n\t\tlet seenNumberAccountId: boolean = false;\n\t\t// TODO: eventually remove this Set because we should only have one session per set of scopes.\n\t\tconst scopesSeen = new Set<string>();\n\t\tconst sessionPromises = sessionData.map(async (session: SessionData): Promise<vscode.AuthenticationSession | undefined> => {\n\t\t\t// For GitHub scope list, order doesn't matter so we immediately sort the scopes\n\t\t\tconst scopesStr = [...session.scopes].sort().join(' ');\n\t\t\tlet userInfo: { id: string; accountName: string } | undefined;\n\t\t\tif (!session.account) {\n\t\t\t\ttry {\n\t\t\t\t\tuserInfo = await this._githubServer.getUserInfo(session.accessToken);\n\t\t\t\t\tthis._logger.info(`Verified session with the following scopes: ${scopesStr}`);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Remove sessions that return unauthorized response\n\t\t\t\t\tif (e.message === 'Unauthorized') {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._logger.trace(`Read the following session from the keychain with the following scopes: ${scopesStr}`);\n\t\t\tscopesSeen.add(scopesStr);\n\n\t\t\tlet accountId: string;\n\t\t\tif (session.account?.id) {\n\t\t\t\tif (typeof session.account.id === 'number') {\n\t\t\t\t\tseenNumberAccountId = true;\n\t\t\t\t}\n\t\t\t\taccountId = `${session.account.id}`;\n\t\t\t} else {\n\t\t\t\taccountId = userInfo?.id ?? '<unknown>';\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tid: session.id,\n\t\t\t\taccount: {\n\t\t\t\t\tlabel: session.account\n\t\t\t\t\t\t? session.account.label ?? session.account.displayName ?? '<unknown>'\n\t\t\t\t\t\t: userInfo?.accountName ?? '<unknown>',\n\t\t\t\t\tid: accountId\n\t\t\t\t},\n\t\t\t\t// we set this to session.scopes to maintain the original order of the scopes requested\n\t\t\t\t// by the extension that called getSession()\n\t\t\t\tscopes: session.scopes,\n\t\t\t\taccessToken: session.accessToken\n\t\t\t};\n\t\t});\n\n\t\tconst verifiedSessions = (await Promise.allSettled(sessionPromises))\n\t\t\t.filter(p => p.status === 'fulfilled')\n\t\t\t.map(p => (p as PromiseFulfilledResult<vscode.AuthenticationSession | undefined>).value)\n\t\t\t.filter(<T>(p?: T): p is T => Boolean(p));\n\n\t\tthis._logger.info(`Got ${verifiedSessions.length} verified sessions.`);\n\t\tif (seenNumberAccountId || verifiedSessions.length !== sessionData.length) {\n\t\t\tawait this.storeSessions(verifiedSessions);\n\t\t}\n\n\t\treturn verifiedSessions;\n\t}\n\n\tprivate async storeSessions(sessions: vscode.AuthenticationSession[]): Promise<void> {\n\t\tthis._logger.info(`Storing ${sessions.length} sessions...`);\n\t\tthis._sessionsPromise = Promise.resolve(sessions);\n\t\tawait this._keychain.setToken(JSON.stringify(sessions));\n\t\tthis._logger.info(`Stored ${sessions.length} sessions!`);\n\t}\n\n\tpublic async createSession(scopes: string[], options?: vscode.AuthenticationProviderSessionOptions): Promise<vscode.AuthenticationSession> {\n\t\ttry {\n\t\t\t// For GitHub scope list, order doesn't matter so we use a sorted scope to determine\n\t\t\t// if we've got a session already.\n\t\t\tconst sortedScopes = [...scopes].sort();\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"login\" : {\n\t\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\t\"comment\": \"Used to determine how much usage the GitHub Auth Provider gets.\",\n\t\t\t\t\t\"scopes\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what scope combinations are being requested.\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis._telemetryReporter?.sendTelemetryEvent('login', {\n\t\t\t\tscopes: JSON.stringify(scopes),\n\t\t\t});\n\n\t\t\tconst sessions = await this._sessionsPromise;\n\t\t\tconst loginWith = options?.account?.label;\n\t\t\tthis._logger.info(`Logging in with '${loginWith ? loginWith : 'any'}' account...`);\n\t\t\tconst scopeString = sortedScopes.join(' ');\n\t\t\tconst token = await this._githubServer.login(scopeString, loginWith);\n\t\t\tconst session = await this.tokenToSession(token, scopes);\n\t\t\tthis.afterSessionLoad(session);\n\n\t\t\tconst sessionIndex = sessions.findIndex(s => s.account.id === session.account.id && arrayEquals([...s.scopes].sort(), sortedScopes));\n\t\t\tconst removed = new Array<vscode.AuthenticationSession>();\n\t\t\tif (sessionIndex > -1) {\n\t\t\t\tremoved.push(...sessions.splice(sessionIndex, 1, session));\n\t\t\t} else {\n\t\t\t\tsessions.push(session);\n\t\t\t}\n\t\t\tawait this.storeSessions(sessions);\n\n\t\t\tthis._sessionChangeEmitter.fire({ added: [session], removed, changed: [] });\n\n\t\t\tthis._logger.info('Login success!');\n\n\t\t\treturn session;\n\t\t} catch (e) {\n\t\t\t// If login was cancelled, do not notify user.\n\t\t\tif (e === 'Cancelled' || e.message === 'Cancelled') {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"loginCancelled\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users cancel the login flow.\" }\n\t\t\t\t*/\n\t\t\t\tthis._telemetryReporter?.sendTelemetryEvent('loginCancelled');\n\t\t\t\tthrow e;\n\t\t\t}\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"loginFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users run into an error login flow.\" }\n\t\t\t*/\n\t\t\tthis._telemetryReporter?.sendTelemetryEvent('loginFailed');\n\n\t\t\tvscode.window.showErrorMessage(vscode.l10n.t('Sign in failed: {0}', `${e}`));\n\t\t\tthis._logger.error(e);\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tprivate async tokenToSession(token: string, scopes: string[]): Promise<vscode.AuthenticationSession> {\n\t\tconst userInfo = await this._githubServer.getUserInfo(token);\n\t\treturn {\n\t\t\tid: crypto.getRandomValues(new Uint32Array(2)).reduce((prev, curr) => prev += curr.toString(16), ''),\n\t\t\taccessToken: token,\n\t\t\taccount: { label: userInfo.accountName, id: userInfo.id },\n\t\t\tscopes\n\t\t};\n\t}\n\n\tpublic async removeSession(id: string) {\n\t\ttry {\n\t\t\t/* __GDPR__\n\t\t\t\t\"logout\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users log out of an account.\" }\n\t\t\t*/\n\t\t\tthis._telemetryReporter?.sendTelemetryEvent('logout');\n\n\t\t\tthis._logger.info(`Logging out of ${id}`);\n\n\t\t\tconst sessions = await this._sessionsPromise;\n\t\t\tconst sessionIndex = sessions.findIndex(session => session.id === id);\n\t\t\tif (sessionIndex > -1) {\n\t\t\t\tconst session = sessions[sessionIndex];\n\t\t\t\tsessions.splice(sessionIndex, 1);\n\n\t\t\t\tawait this.storeSessions(sessions);\n\t\t\t\tawait this._githubServer.logout(session);\n\n\t\t\t\tthis._sessionChangeEmitter.fire({ added: [], removed: [session], changed: [] });\n\t\t\t} else {\n\t\t\t\tthis._logger.error('Session not found');\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t/* __GDPR__\n\t\t\t\t\"logoutFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often logging out of an account fails.\" }\n\t\t\t*/\n\t\t\tthis._telemetryReporter?.sendTelemetryEvent('logoutFailed');\n\n\t\t\tvscode.window.showErrorMessage(vscode.l10n.t('Sign out failed: {0}', `${e}`));\n\t\t\tthis._logger.error(e);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/githubServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { ExperimentationTelemetry } from './common/experimentationService';\nimport { AuthProviderType, UriEventHandler } from './github';\nimport { Log } from './common/logger';\nimport { isSupportedClient, isSupportedTarget } from './common/env';\nimport { crypto } from './node/crypto';\nimport { fetching } from './node/fetch';\nimport { ExtensionHost, GitHubTarget, getFlows } from './flows';\nimport { CANCELLATION_ERROR, NETWORK_ERROR, USER_CANCELLATION_ERROR } from './common/errors';\nimport { Config } from './config';\nimport { base64Encode } from './node/buffer';\n\nconst REDIRECT_URL_STABLE = 'https://vscode.dev/redirect';\nconst REDIRECT_URL_INSIDERS = 'https://insiders.vscode.dev/redirect';\n\nexport interface IGitHubServer {\n\tlogin(scopes: string, existingLogin?: string): Promise<string>;\n\tlogout(session: vscode.AuthenticationSession): Promise<void>;\n\tgetUserInfo(token: string): Promise<{ id: string; accountName: string }>;\n\tsendAdditionalTelemetryInfo(session: vscode.AuthenticationSession): Promise<void>;\n\tfriendlyName: string;\n}\n\n\nexport class GitHubServer implements IGitHubServer {\n\treadonly friendlyName: string;\n\n\tprivate readonly _type: AuthProviderType;\n\n\tprivate _redirectEndpoint: string | undefined;\n\n\tconstructor(\n\t\tprivate readonly _logger: Log,\n\t\tprivate readonly _telemetryReporter: ExperimentationTelemetry,\n\t\tprivate readonly _uriHandler: UriEventHandler,\n\t\tprivate readonly _extensionKind: vscode.ExtensionKind,\n\t\tprivate readonly _ghesUri?: vscode.Uri\n\t) {\n\t\tthis._type = _ghesUri ? AuthProviderType.githubEnterprise : AuthProviderType.github;\n\t\tthis.friendlyName = this._type === AuthProviderType.github ? 'GitHub' : _ghesUri?.authority!;\n\t}\n\n\tget baseUri() {\n\t\tif (this._type === AuthProviderType.github) {\n\t\t\treturn vscode.Uri.parse('https://github.com/');\n\t\t}\n\t\treturn this._ghesUri!;\n\t}\n\n\tprivate async getRedirectEndpoint(): Promise<string> {\n\t\tif (this._redirectEndpoint) {\n\t\t\treturn this._redirectEndpoint;\n\t\t}\n\t\tif (this._type === AuthProviderType.github) {\n\t\t\tconst proxyEndpoints = await vscode.commands.executeCommand<{ [providerId: string]: string } | undefined>('workbench.getCodeExchangeProxyEndpoints');\n\t\t\t// If we are running in insiders vscode.dev, then ensure we use the redirect route on that.\n\t\t\tthis._redirectEndpoint = REDIRECT_URL_STABLE;\n\t\t\tif (proxyEndpoints?.github && new URL(proxyEndpoints.github).hostname === 'insiders.vscode.dev') {\n\t\t\t\tthis._redirectEndpoint = REDIRECT_URL_INSIDERS;\n\t\t\t}\n\t\t} else {\n\t\t\t// GHE only supports a single redirect endpoint, so we can't use\n\t\t\t// insiders.vscode.dev/redirect when we're running in Insiders, unfortunately.\n\t\t\t// Additionally, we make the assumption that this function will only be used\n\t\t\t// in flows that target supported GHE targets, not on-prem GHES. Because of this\n\t\t\t// assumption, we can assume that the GHE version used is at least 3.8 which is\n\t\t\t// the version that changed the redirect endpoint to this URI from the old\n\t\t\t// GitHub maintained server.\n\t\t\tthis._redirectEndpoint = 'https://vscode.dev/redirect';\n\t\t}\n\t\treturn this._redirectEndpoint;\n\t}\n\n\t// TODO@joaomoreno TODO@TylerLeonhardt\n\tprivate _isNoCorsEnvironment: boolean | undefined;\n\tprivate async isNoCorsEnvironment(): Promise<boolean> {\n\t\tif (this._isNoCorsEnvironment !== undefined) {\n\t\t\treturn this._isNoCorsEnvironment;\n\t\t}\n\t\tconst uri = await vscode.env.asExternalUri(vscode.Uri.parse(`${vscode.env.uriScheme}://vscode.github-authentication/dummy`));\n\t\tthis._isNoCorsEnvironment = (uri.scheme === 'https' && /^((insiders\\.)?vscode|github)\\./.test(uri.authority)) || (uri.scheme === 'http' && /^localhost/.test(uri.authority));\n\t\treturn this._isNoCorsEnvironment;\n\t}\n\n\tpublic async login(scopes: string, existingLogin?: string): Promise<string> {\n\t\tthis._logger.info(`Logging in for the following scopes: ${scopes}`);\n\n\t\t// Used for showing a friendlier message to the user when the explicitly cancel a flow.\n\t\tlet userCancelled: boolean | undefined;\n\t\tconst yes = vscode.l10n.t('Yes');\n\t\tconst no = vscode.l10n.t('No');\n\t\tconst promptToContinue = async (mode: string) => {\n\t\t\tif (userCancelled === undefined) {\n\t\t\t\t// We haven't had a failure yet so wait to prompt\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst message = userCancelled\n\t\t\t\t? vscode.l10n.t('Having trouble logging in? Would you like to try a different way? ({0})', mode)\n\t\t\t\t: vscode.l10n.t('You have not yet finished authorizing this extension to use GitHub. Would you like to try a different way? ({0})', mode);\n\t\t\tconst result = await vscode.window.showWarningMessage(message, yes, no);\n\t\t\tif (result !== yes) {\n\t\t\t\tthrow new Error(CANCELLATION_ERROR);\n\t\t\t}\n\t\t};\n\n\t\tconst nonce: string = crypto.getRandomValues(new Uint32Array(2)).reduce((prev, curr) => prev += curr.toString(16), '');\n\t\tconst callbackUri = await vscode.env.asExternalUri(vscode.Uri.parse(`${vscode.env.uriScheme}://vscode.github-authentication/did-authenticate?nonce=${encodeURIComponent(nonce)}`));\n\n\t\tconst supportedClient = isSupportedClient(callbackUri);\n\t\tconst supportedTarget = isSupportedTarget(this._type, this._ghesUri);\n\n\t\tconst flows = getFlows({\n\t\t\ttarget: this._type === AuthProviderType.github\n\t\t\t\t? GitHubTarget.DotCom\n\t\t\t\t: supportedTarget ? GitHubTarget.HostedEnterprise : GitHubTarget.Enterprise,\n\t\t\textensionHost: typeof navigator === 'undefined'\n\t\t\t\t? this._extensionKind === vscode.ExtensionKind.UI ? ExtensionHost.Local : ExtensionHost.Remote\n\t\t\t\t: ExtensionHost.WebWorker,\n\t\t\tisSupportedClient: supportedClient\n\t\t});\n\n\n\t\tfor (const flow of flows) {\n\t\t\ttry {\n\t\t\t\tif (flow !== flows[0]) {\n\t\t\t\t\tawait promptToContinue(flow.label);\n\t\t\t\t}\n\t\t\t\treturn await flow.trigger({\n\t\t\t\t\tscopes,\n\t\t\t\t\tcallbackUri,\n\t\t\t\t\tnonce,\n\t\t\t\t\tbaseUri: this.baseUri,\n\t\t\t\t\tlogger: this._logger,\n\t\t\t\t\turiHandler: this._uriHandler,\n\t\t\t\t\tenterpriseUri: this._ghesUri,\n\t\t\t\t\tredirectUri: vscode.Uri.parse(await this.getRedirectEndpoint()),\n\t\t\t\t\texistingLogin\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tuserCancelled = this.processLoginError(e);\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(userCancelled ? CANCELLATION_ERROR : 'No auth flow succeeded.');\n\t}\n\n\tpublic async logout(session: vscode.AuthenticationSession): Promise<void> {\n\t\tthis._logger.trace(`Deleting session (${session.id}) from server...`);\n\n\t\tif (!Config.gitHubClientSecret) {\n\t\t\tthis._logger.warn('No client secret configured for GitHub authentication. The token has been deleted with best effort on this system, but we are unable to delete the token on server without the client secret.');\n\t\t\treturn;\n\t\t}\n\n\t\t// Only attempt to delete OAuth tokens. They are always prefixed with `gho_`.\n\t\t// https://docs.github.com/en/rest/apps/oauth-applications#about-oauth-apps-and-oauth-authorizations-of-github-apps\n\t\tif (!session.accessToken.startsWith('gho_')) {\n\t\t\tthis._logger.warn('The token being deleted is not an OAuth token. It has been deleted locally, but we cannot delete it on server.');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isSupportedTarget(this._type, this._ghesUri)) {\n\t\t\tthis._logger.trace('GitHub.com and GitHub hosted GitHub Enterprise are the only options that support deleting tokens on the server. Skipping.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst authHeader = 'Basic ' + base64Encode(`${Config.gitHubClientId}:${Config.gitHubClientSecret}`);\n\t\tconst uri = this.getServerUri(`/applications/${Config.gitHubClientId}/token`);\n\n\t\ttry {\n\t\t\t// Defined here: https://docs.github.com/en/rest/apps/oauth-applications?apiVersion=2022-11-28#delete-an-app-token\n\t\t\tconst result = await fetching(uri.toString(true), {\n\t\t\t\tmethod: 'DELETE',\n\t\t\t\theaders: {\n\t\t\t\t\tAccept: 'application/vnd.github+json',\n\t\t\t\t\tAuthorization: authHeader,\n\t\t\t\t\t'X-GitHub-Api-Version': '2022-11-28',\n\t\t\t\t\t'User-Agent': `${vscode.env.appName} (${vscode.env.appHost})`\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({ access_token: session.accessToken }),\n\t\t\t});\n\n\t\t\tif (result.status === 204) {\n\t\t\t\tthis._logger.trace(`Successfully deleted token from session (${session.id}) from server.`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst body = await result.text();\n\t\t\t\tthrow new Error(body);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(`${result.status} ${result.statusText}`);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis._logger.warn('Failed to delete token from server.' + (e.message ?? e));\n\t\t}\n\t}\n\n\tprivate getServerUri(path: string = '') {\n\t\tconst apiUri = this.baseUri;\n\t\t// github.com and Hosted GitHub Enterprise instances\n\t\tif (isSupportedTarget(this._type, this._ghesUri)) {\n\t\t\treturn vscode.Uri.parse(`${apiUri.scheme}://api.${apiUri.authority}`).with({ path });\n\t\t}\n\t\t// GitHub Enterprise Server (aka on-prem)\n\t\treturn vscode.Uri.parse(`${apiUri.scheme}://${apiUri.authority}/api/v3${path}`);\n\t}\n\n\tpublic async getUserInfo(token: string): Promise<{ id: string; accountName: string }> {\n\t\tlet result;\n\t\ttry {\n\t\t\tthis._logger.info('Getting user info...');\n\t\t\tresult = await fetching(this.getServerUri('/user').toString(), {\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `token ${token}`,\n\t\t\t\t\t'User-Agent': `${vscode.env.appName} (${vscode.env.appHost})`\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (ex) {\n\t\t\tthis._logger.error(ex.message);\n\t\t\tthrow new Error(NETWORK_ERROR);\n\t\t}\n\n\t\tif (result.ok) {\n\t\t\ttry {\n\t\t\t\tconst json = await result.json() as { id: number; login: string };\n\t\t\t\tthis._logger.info('Got account info!');\n\t\t\t\treturn { id: `${json.id}`, accountName: json.login };\n\t\t\t} catch (e) {\n\t\t\t\tthis._logger.error(`Unexpected error parsing response from GitHub: ${e.message ?? e}`);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t} else {\n\t\t\t// either display the response message or the http status text\n\t\t\tlet errorMessage = result.statusText;\n\t\t\ttry {\n\t\t\t\tconst json = await result.json();\n\t\t\t\tif (json.message) {\n\t\t\t\t\terrorMessage = json.message;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// noop\n\t\t\t}\n\t\t\tthis._logger.error(`Getting account info failed: ${errorMessage}`);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\t}\n\n\tpublic async sendAdditionalTelemetryInfo(session: vscode.AuthenticationSession): Promise<void> {\n\t\tif (!vscode.env.isTelemetryEnabled) {\n\t\t\treturn;\n\t\t}\n\t\tconst nocors = await this.isNoCorsEnvironment();\n\n\t\tif (nocors) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._type === AuthProviderType.github) {\n\t\t\treturn await this.checkUserDetails(session);\n\t\t}\n\n\t\t// GHES\n\t\tawait this.checkEnterpriseVersion(session.accessToken);\n\t}\n\n\tprivate async checkUserDetails(session: vscode.AuthenticationSession): Promise<void> {\n\t\tlet edu: string | undefined;\n\n\t\ttry {\n\t\t\tconst result = await fetching('https://education.github.com/api/user', {\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `token ${session.accessToken}`,\n\t\t\t\t\t'faculty-check-preview': 'true',\n\t\t\t\t\t'User-Agent': `${vscode.env.appName} (${vscode.env.appHost})`\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (result.ok) {\n\t\t\t\tconst json: { student: boolean; faculty: boolean } = await result.json();\n\t\t\t\tedu = json.student\n\t\t\t\t\t? 'student'\n\t\t\t\t\t: json.faculty\n\t\t\t\t\t\t? 'faculty'\n\t\t\t\t\t\t: 'none';\n\t\t\t} else {\n\t\t\t\tedu = 'unknown';\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tedu = 'unknown';\n\t\t}\n\n\t\t/* __GDPR__\n\t\t\t\"session\" : {\n\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\"isEdu\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\" },\n\t\t\t\t\"isManaged\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\" }\n\t\t\t}\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('session', {\n\t\t\tisEdu: edu,\n\t\t\t// Apparently, this is how you tell if a user is an EMU...\n\t\t\tisManaged: session.account.label.includes('_') ? 'true' : 'false'\n\t\t});\n\t}\n\n\tprivate async checkEnterpriseVersion(token: string): Promise<void> {\n\t\ttry {\n\t\t\tlet version: string;\n\t\t\tif (!isSupportedTarget(this._type, this._ghesUri)) {\n\t\t\t\tconst result = await fetching(this.getServerUri('/meta').toString(), {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAuthorization: `token ${token}`,\n\t\t\t\t\t\t'User-Agent': `${vscode.env.appName} (${vscode.env.appHost})`\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst json: { verifiable_password_authentication: boolean; installed_version: string } = await result.json();\n\t\t\t\tversion = json.installed_version;\n\t\t\t} else {\n\t\t\t\tversion = 'hosted';\n\t\t\t}\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"ghe-session\" : {\n\t\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\t\"version\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis._telemetryReporter.sendTelemetryEvent('ghe-session', {\n\t\t\t\tversion\n\t\t\t});\n\t\t} catch {\n\t\t\t// No-op\n\t\t}\n\t}\n\n\tprivate processLoginError(error: Error): boolean {\n\t\tif (error.message === CANCELLATION_ERROR) {\n\t\t\tthrow error;\n\t\t}\n\t\tthis._logger.error(error.message ?? error);\n\t\treturn error.message === USER_CANCELLATION_ERROR;\n\t}\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/node/authServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as http from 'http';\nimport { URL } from 'url';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { randomBytes } from 'crypto';\n\nfunction sendFile(res: http.ServerResponse, filepath: string) {\n\tfs.readFile(filepath, (err, body) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t\tres.writeHead(404);\n\t\t\tres.end();\n\t\t} else {\n\t\t\tres.writeHead(200, {\n\t\t\t\t'content-length': body.length,\n\t\t\t});\n\t\t\tres.end(body);\n\t\t}\n\t});\n}\n\ninterface IOAuthResult {\n\tcode: string;\n\tstate: string;\n}\n\ninterface ILoopbackServer {\n\t/**\n\t * If undefined, the server is not started yet.\n\t */\n\tport: number | undefined;\n\n\t/**\n\t * The nonce used\n\t */\n\tnonce: string;\n\n\t/**\n\t * The state parameter used in the OAuth flow.\n\t */\n\tstate: string | undefined;\n\n\t/**\n\t * Starts the server.\n\t * @returns The port to listen on.\n\t * @throws If the server fails to start.\n\t * @throws If the server is already started.\n\t */\n\tstart(): Promise<number>;\n\t/**\n\t * Stops the server.\n\t * @throws If the server is not started.\n\t * @throws If the server fails to stop.\n\t */\n\tstop(): Promise<void>;\n\t/**\n\t * Returns a promise that resolves to the result of the OAuth flow.\n\t */\n\twaitForOAuthResponse(): Promise<IOAuthResult>;\n}\n\nexport class LoopbackAuthServer implements ILoopbackServer {\n\tprivate readonly _server: http.Server;\n\tprivate readonly _resultPromise: Promise<IOAuthResult>;\n\tprivate _startingRedirect: URL;\n\n\tpublic nonce = randomBytes(16).toString('base64');\n\tpublic port: number | undefined;\n\n\tpublic set state(state: string | undefined) {\n\t\tif (state) {\n\t\t\tthis._startingRedirect.searchParams.set('state', state);\n\t\t} else {\n\t\t\tthis._startingRedirect.searchParams.delete('state');\n\t\t}\n\t}\n\tpublic get state(): string | undefined {\n\t\treturn this._startingRedirect.searchParams.get('state') ?? undefined;\n\t}\n\n\tconstructor(serveRoot: string, startingRedirect: string) {\n\t\tif (!serveRoot) {\n\t\t\tthrow new Error('serveRoot must be defined');\n\t\t}\n\t\tif (!startingRedirect) {\n\t\t\tthrow new Error('startingRedirect must be defined');\n\t\t}\n\t\tthis._startingRedirect = new URL(startingRedirect);\n\t\tlet deferred: { resolve: (result: IOAuthResult) => void; reject: (reason: any) => void };\n\t\tthis._resultPromise = new Promise<IOAuthResult>((resolve, reject) => deferred = { resolve, reject });\n\n\t\tthis._server = http.createServer((req, res) => {\n\t\t\tconst reqUrl = new URL(req.url!, `http://${req.headers.host}`);\n\t\t\tswitch (reqUrl.pathname) {\n\t\t\t\tcase '/signin': {\n\t\t\t\t\tconst receivedNonce = (reqUrl.searchParams.get('nonce') ?? '').replace(/ /g, '+');\n\t\t\t\t\tif (receivedNonce !== this.nonce) {\n\t\t\t\t\t\tres.writeHead(302, { location: `/?error=${encodeURIComponent('Nonce does not match.')}` });\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t}\n\t\t\t\t\tres.writeHead(302, { location: this._startingRedirect.toString() });\n\t\t\t\t\tres.end();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase '/callback': {\n\t\t\t\t\tconst code = reqUrl.searchParams.get('code') ?? undefined;\n\t\t\t\t\tconst state = reqUrl.searchParams.get('state') ?? undefined;\n\t\t\t\t\tconst nonce = (reqUrl.searchParams.get('nonce') ?? '').replace(/ /g, '+');\n\t\t\t\t\tif (!code || !state || !nonce) {\n\t\t\t\t\t\tres.writeHead(400);\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.state !== state) {\n\t\t\t\t\t\tres.writeHead(302, { location: `/?error=${encodeURIComponent('State does not match.')}` });\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t\tthrow new Error('State does not match.');\n\t\t\t\t\t}\n\t\t\t\t\tif (this.nonce !== nonce) {\n\t\t\t\t\t\tres.writeHead(302, { location: `/?error=${encodeURIComponent('Nonce does not match.')}` });\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t\tthrow new Error('Nonce does not match.');\n\t\t\t\t\t}\n\t\t\t\t\tdeferred.resolve({ code, state });\n\t\t\t\t\tres.writeHead(302, { location: '/' });\n\t\t\t\t\tres.end();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Serve the static files\n\t\t\t\tcase '/':\n\t\t\t\t\tsendFile(res, path.join(serveRoot, 'index.html'));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// substring to get rid of leading '/'\n\t\t\t\t\tsendFile(res, path.join(serveRoot, reqUrl.pathname.substring(1)));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic start(): Promise<number> {\n\t\treturn new Promise<number>((resolve, reject) => {\n\t\t\tif (this._server.listening) {\n\t\t\t\tthrow new Error('Server is already started');\n\t\t\t}\n\t\t\tconst portTimeout = setTimeout(() => {\n\t\t\t\treject(new Error('Timeout waiting for port'));\n\t\t\t}, 5000);\n\t\t\tthis._server.on('listening', () => {\n\t\t\t\tconst address = this._server.address();\n\t\t\t\tif (typeof address === 'string') {\n\t\t\t\t\tthis.port = parseInt(address);\n\t\t\t\t} else if (address instanceof Object) {\n\t\t\t\t\tthis.port = address.port;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Unable to determine port');\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(portTimeout);\n\n\t\t\t\t// set state which will be used to redirect back to vscode\n\t\t\t\tthis.state = `http://127.0.0.1:${this.port}/callback?nonce=${encodeURIComponent(this.nonce)}`;\n\n\t\t\t\tresolve(this.port);\n\t\t\t});\n\t\t\tthis._server.on('error', err => {\n\t\t\t\treject(new Error(`Error listening to server: ${err}`));\n\t\t\t});\n\t\t\tthis._server.on('close', () => {\n\t\t\t\treject(new Error('Closed'));\n\t\t\t});\n\t\t\tthis._server.listen(0, '127.0.0.1');\n\t\t});\n\t}\n\n\tpublic stop(): Promise<void> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tif (!this._server.listening) {\n\t\t\t\tthrow new Error('Server is not started');\n\t\t\t}\n\t\t\tthis._server.close((err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic waitForOAuthResponse(): Promise<IOAuthResult> {\n\t\treturn this._resultPromise;\n\t}\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/node/buffer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function base64Encode(text: string): string {\n\treturn Buffer.from(text, 'binary').toString('base64');\n}\n"
  },
  {
    "path": "extensions/github-authentication/src/node/crypto.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { webcrypto } from 'crypto';\n\nexport const crypto = webcrypto as any as Crypto;\n"
  },
  {
    "path": "extensions/github-authentication/src/node/fetch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nlet _fetch: typeof fetch;\ntry {\n\t_fetch = require('electron').net.fetch;\n} catch {\n\t_fetch = fetch;\n}\nexport const fetching = _fetch;\n"
  },
  {
    "path": "extensions/github-authentication/src/test/flows.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { ExtensionHost, GitHubTarget, IFlowQuery, getFlows } from '../flows';\nimport { Config } from '../config';\n\nconst enum Flows {\n\tUrlHandlerFlow = 'url handler',\n\tLocalServerFlow = 'local server',\n\tDeviceCodeFlow = 'device code',\n\tPatFlow = 'personal access token'\n}\n\nsuite('getFlows', () => {\n\tlet lastClientSecret: string | undefined = undefined;\n\tsuiteSetup(() => {\n\t\tlastClientSecret = Config.gitHubClientSecret;\n\t\tConfig.gitHubClientSecret = 'asdf';\n\t});\n\n\tsuiteTeardown(() => {\n\t\tConfig.gitHubClientSecret = lastClientSecret;\n\t});\n\n\tconst testCases: Array<{ label: string; query: IFlowQuery; expectedFlows: Flows[] }> = [\n\t\t{\n\t\t\tlabel: 'VS Code Desktop. Local filesystem. GitHub.com',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Local,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.DotCom\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.UrlHandlerFlow,\n\t\t\t\tFlows.LocalServerFlow,\n\t\t\t\tFlows.DeviceCodeFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'VS Code Desktop. Local filesystem. GitHub Hosted Enterprise',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Local,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.HostedEnterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.UrlHandlerFlow,\n\t\t\t\tFlows.LocalServerFlow,\n\t\t\t\tFlows.DeviceCodeFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'VS Code Desktop. Local filesystem. GitHub Enterprise Server',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Local,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.Enterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.DeviceCodeFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'vscode.dev. serverful. GitHub.com',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Remote,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.DotCom\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.UrlHandlerFlow,\n\t\t\t\tFlows.DeviceCodeFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'vscode.dev. serverful. GitHub Hosted Enterprise',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Remote,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.HostedEnterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.UrlHandlerFlow,\n\t\t\t\tFlows.DeviceCodeFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'vscode.dev. serverful. GitHub Enterprise',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Remote,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.Enterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.DeviceCodeFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'vscode.dev. serverless. GitHub.com',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.WebWorker,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.DotCom\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.UrlHandlerFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'vscode.dev. serverless. GitHub Hosted Enterprise',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.WebWorker,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.HostedEnterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.UrlHandlerFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'vscode.dev. serverless. GitHub Enterprise Server',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.WebWorker,\n\t\t\t\tisSupportedClient: true,\n\t\t\t\ttarget: GitHubTarget.Enterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'Code - OSS. Local filesystem. GitHub.com',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Local,\n\t\t\t\tisSupportedClient: false,\n\t\t\t\ttarget: GitHubTarget.DotCom\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.LocalServerFlow,\n\t\t\t\tFlows.DeviceCodeFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'Code - OSS. Local filesystem. GitHub Hosted Enterprise',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Local,\n\t\t\t\tisSupportedClient: false,\n\t\t\t\ttarget: GitHubTarget.HostedEnterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.LocalServerFlow,\n\t\t\t\tFlows.DeviceCodeFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: 'Code - OSS. Local filesystem. GitHub Enterprise Server',\n\t\t\tquery: {\n\t\t\t\textensionHost: ExtensionHost.Local,\n\t\t\t\tisSupportedClient: false,\n\t\t\t\ttarget: GitHubTarget.Enterprise\n\t\t\t},\n\t\t\texpectedFlows: [\n\t\t\t\tFlows.DeviceCodeFlow,\n\t\t\t\tFlows.PatFlow\n\t\t\t]\n\t\t},\n\t];\n\n\tfor (const testCase of testCases) {\n\t\ttest(`gives the correct flows - ${testCase.label}`, () => {\n\t\t\tconst flows = getFlows(testCase.query);\n\n\t\t\tassert.strictEqual(\n\t\t\t\tflows.length,\n\t\t\t\ttestCase.expectedFlows.length,\n\t\t\t\t`Unexpected number of flows: ${flows.map(f => f.label).join(',')}`\n\t\t\t);\n\n\t\t\tfor (let i = 0; i < flows.length; i++) {\n\t\t\t\tconst flow = flows[i];\n\n\t\t\t\tassert.strictEqual(flow.label, testCase.expectedFlows[i]);\n\t\t\t}\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "extensions/github-authentication/src/test/node/authServer.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { LoopbackAuthServer } from '../../node/authServer';\n\nsuite('LoopbackAuthServer', () => {\n\tlet server: LoopbackAuthServer;\n\tlet port: number;\n\n\tsetup(async () => {\n\t\tserver = new LoopbackAuthServer(__dirname, 'http://localhost:8080');\n\t\tport = await server.start();\n\t});\n\n\tteardown(async () => {\n\t\tawait server.stop();\n\t});\n\n\ttest('should redirect to starting redirect on /signin', async () => {\n\t\tconst response = await fetch(`http://localhost:${port}/signin?nonce=${server.nonce}`, {\n\t\t\tredirect: 'manual'\n\t\t});\n\t\t// Redirect\n\t\tassert.strictEqual(response.status, 302);\n\n\t\t// Check location\n\t\tconst location = response.headers.get('location');\n\t\tassert.ok(location);\n\t\tconst locationUrl = new URL(location);\n\t\tassert.strictEqual(locationUrl.origin, 'http://localhost:8080');\n\n\t\t// Check state\n\t\tconst state = locationUrl.searchParams.get('state');\n\t\tassert.ok(state);\n\t\tconst stateLocation = new URL(state);\n\t\tassert.strictEqual(stateLocation.origin, `http://127.0.0.1:${port}`);\n\t\tassert.strictEqual(stateLocation.pathname, '/callback');\n\t\tassert.strictEqual(stateLocation.searchParams.get('nonce'), server.nonce);\n\t});\n\n\ttest('should return 400 on /callback with missing parameters', async () => {\n\t\tconst response = await fetch(`http://localhost:${port}/callback`);\n\t\tassert.strictEqual(response.status, 400);\n\t});\n\n\ttest('should resolve with code and state on /callback with valid parameters', async () => {\n\t\tserver.state = 'valid-state';\n\t\tconst response = await fetch(\n\t\t\t`http://localhost:${port}/callback?code=valid-code&state=${server.state}&nonce=${server.nonce}`,\n\t\t\t{ redirect: 'manual' }\n\t\t);\n\t\tassert.strictEqual(response.status, 302);\n\t\tassert.strictEqual(response.headers.get('location'), '/');\n\t\tawait Promise.race([\n\t\t\tserver.waitForOAuthResponse().then(result => {\n\t\t\t\tassert.strictEqual(result.code, 'valid-code');\n\t\t\t\tassert.strictEqual(result.state, server.state);\n\t\t\t}),\n\t\t\tnew Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 5000))\n\t\t]);\n\t});\n});\n"
  },
  {
    "path": "extensions/github-authentication/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"experimentalDecorators\": true,\n\t\t\"typeRoots\": [\n\t\t\t\"./node_modules/@types\"\n\t\t],\n\t\t\"lib\": [\n\t\t\t\"WebWorker\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/go/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/go/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"go-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/worlpaker/go-syntax\",\n\t\t\t\t\t\"commitHash\": \"fbdaec061157e98dda185c0ce771ce6a2c793045\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"description\": \"The file syntaxes/go.tmLanguage.json is from https://github.com/worlpaker/go-syntax, which in turn was derived from https://github.com/jeff-hykin/better-go-syntax.\",\n\t\t\t\"version\": \"0.7.9\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/go/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"`\",\n\t\t\t\"close\": \"`\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"`\",\n\t\t\t\"`\"\n\t\t]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"^.*(\\\\bcase\\\\b.*:|\\\\bdefault\\\\b:|(\\\\b(func|if|else|switch|select|for|struct)\\\\b.*)?{[^}\\\"'`]*|\\\\([^)\\\"'`]*)$\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*(\\\\bcase\\\\b.*:|\\\\bdefault\\\\b:|}[)}]*[),]?|\\\\)[,]?)$\"\n\t},\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*//\\\\s*#?region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*//\\\\s*#?endregion\\\\b\"\n\t\t}\n\t},\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/go/package.json",
    "content": "{\n  \"name\": \"go\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin worlpaker/go-syntax syntaxes/go.tmLanguage.json ./syntaxes/go.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"go\",\n        \"extensions\": [\n          \".go\"\n        ],\n        \"aliases\": [\n          \"Go\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"go\",\n        \"scopeName\": \"source.go\",\n        \"path\": \"./syntaxes/go.tmLanguage.json\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[go]\": {\n        \"editor.insertSpaces\": false\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/go/package.nls.json",
    "content": "{\n\t\"displayName\": \"Go Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Go files.\"\n}\n"
  },
  {
    "path": "extensions/go/syntaxes/go.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/worlpaker/go-syntax/blob/master/syntaxes/go.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/worlpaker/go-syntax/commit/fbdaec061157e98dda185c0ce771ce6a2c793045\",\n\t\"name\": \"Go\",\n\t\"scopeName\": \"source.go\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#statements\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"statements\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#package_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#syntax_errors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#group-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#group-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#group-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field_hover\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"group-functions\": {\n\t\t\t\"comment\": \"all statements related to functions\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functions_inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#built_in_functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support_functions\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"group-types\": {\n\t\t\t\"comment\": \"all statements related to types\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#other_struct_interface_expressions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_assertion_inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single_type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multi_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_interface_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double_parentheses_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"group-variables\": {\n\t\t\t\"comment\": \"all statements related to variables\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#const_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#label_loop_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#slice_index_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_select_case_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#other_variables\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-declarations\": {\n\t\t\t\"comment\": \"includes all type declarations\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#map_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#runes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw_string_literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric_literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#terminators\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-declarations-without-brackets\": {\n\t\t\t\"comment\": \"includes all type declarations without brackets (in some cases, brackets need to be captured manually)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#map_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#runes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw_string_literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric_literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#terminators\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-variable-types\": {\n\t\t\t\"comment\": \"function and generic parameter types\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\{\",\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:([\\\\w\\\\.\\\\*]+)?(\\\\[))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"language_constants\": {\n\t\t\t\"comment\": \"Language constants\",\n\t\t\t\"match\": \"\\\\b(?:(true|false)|(nil)|(iota))\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.language.boolean.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.language.null.go\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.language.iota.go\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.go\",\n\t\t\t\t\t\"begin\": \"(\\\\/\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\*\\\\/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.double-slash.go\",\n\t\t\t\t\t\"begin\": \"(\\\\/\\\\/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?:\\\\n|$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"map_types\": {\n\t\t\t\"comment\": \"map types\",\n\t\t\t\"begin\": \"(?:(\\\\bmap\\\\b)(\\\\[))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.map.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?:(\\\\])((?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?!(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:func|struct|map)\\\\b)(?:[\\\\*\\\\[\\\\]]+)?(?:[\\\\w\\\\.]+)(?:\\\\[(?:(?:[\\\\w\\\\.\\\\*\\\\[\\\\]\\\\{\\\\}]+)(?:(?:\\\\,\\\\s*(?:[\\\\w\\\\.\\\\*\\\\[\\\\]\\\\{\\\\}]+))*))?\\\\])?)?)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\{\",\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"brackets\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"delimiters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\,\",\n\t\t\t\t\t\"name\": \"punctuation.other.comma.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.(?!\\\\.\\\\.)\",\n\t\t\t\t\t\"name\": \"punctuation.other.period.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":(?!=)\",\n\t\t\t\t\t\"name\": \"punctuation.other.colon.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Flow control keywords\",\n\t\t\t\t\t\"match\": \"\\\\b(break|case|continue|default|defer|else|fallthrough|for|go|goto|if|range|return|select|switch)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bchan\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.channel.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bconst\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.const.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bvar\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.var.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bfunc\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.function.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\binterface\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.interface.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bmap\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.map.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bstruct\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.struct.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bimport\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.import.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\btype\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.type.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"comment\": \"Note that the order here is very important!\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:\\\\*|\\\\&)+)(?:(?!\\\\d)(?=(?:[\\\\w\\\\[\\\\]])|(?:\\\\<\\\\-)))\",\n\t\t\t\t\t\"name\": \"keyword.operator.address.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<\\\\-\",\n\t\t\t\t\t\"name\": \"keyword.operator.channel.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\-\\\\-\",\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(==|!=|<=|>=|<(?!<)|>(?!>))\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(&&|\\\\|\\\\||!)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(=|\\\\+=|\\\\-=|\\\\|=|\\\\^=|\\\\*=|/=|:=|%=|<<=|>>=|&\\\\^=|&=)\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\+|\\\\-|\\\\*|/|%)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(&(?!\\\\^)|\\\\||\\\\^|&\\\\^|<<|>>|\\\\~)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.bitwise.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"name\": \"keyword.operator.ellipsis.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"runes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.rune.go\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G(\\\\\\\\([0-7]{3}|[abfnrtv\\\\\\\\'\\\"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})|.)(?=')\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.rune.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^']+\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-rune.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"storage_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bbool\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.boolean.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bbyte\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.byte.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\berror\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.error.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(complex(64|128)|float(32|64)|u?int(8|16|32|64)?)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.numeric.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\brune\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.rune.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bstring\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.string.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\buintptr\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.uintptr.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bany\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.type.any.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"raw_string_literals\": {\n\t\t\t\"comment\": \"Raw string literals\",\n\t\t\t\"begin\": \"`\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"`\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.raw.go\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_literals\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Interpreted string literals\",\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.go\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escaped_char\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\([0-7]{3}|[abfnrtv\\\\\\\\'\\\"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})\",\n\t\t\t\t\t\"name\": \"constant.character.escape.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[^0-7xuUabfnrtv\\\\'\\\"]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_placeholder\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"%(\\\\[\\\\d+\\\\])?([\\\\+#\\\\-0\\\\x20]{,2}((\\\\d+|\\\\*)?(\\\\.?(\\\\d+|\\\\*|(\\\\[\\\\d+\\\\])\\\\*?)?(\\\\[\\\\d+\\\\])?)?))?[vT%tbcdoqxXUbeEfFgGspw]\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numeric_literals\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.])|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\n|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:(?:(?:(?:\\\\G(?=[0-9.])(?!0[xXbBoO])([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?(?:(?<!_)([eE])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?(i(?!\\\\w))?(?:\\\\n|$)|\\\\G(?=[0-9.])(?!0[xXbBoO])([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?<!_)([eE])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\\\w))?(?:\\\\n|$))|\\\\G((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?:(?<!_)([eE])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?(i(?!\\\\w))?(?:\\\\n|$))|(\\\\G0[xX])_?([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?(?<!_)([pP])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\\\w))?(?:\\\\n|$))|(\\\\G0[xX])_?([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?<!_)([pP])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\\\w))?(?:\\\\n|$))|(\\\\G0[xX])((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?<!_)([pP])(\\\\+?)(\\\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\\\w))?(?:\\\\n|$))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"43\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"44\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"45\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"46\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"47\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"48\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"49\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"50\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"51\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"52\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"53\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:(?:\\\\G(?=[0-9.])(?!0[xXbBoO])([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(i(?!\\\\w))?(?:\\\\n|$)|(\\\\G0[bB])_?([01](?:[01]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(i(?!\\\\w))?(?:\\\\n|$))|(\\\\G0[oO]?)_?((?:[0-7]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))+)(i(?!\\\\w))?(?:\\\\n|$))|(\\\\G0[xX])_?([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(i(?!\\\\w))?(?:\\\\n|$))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.go\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.imaginary.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.])|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"terminators\": {\n\t\t\t\"comment\": \"Terminators\",\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.go\"\n\t\t},\n\t\t\"package_name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"package name\",\n\t\t\t\t\t\"begin\": \"\\\\b(package)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.package.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\d\\\\w*\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.package.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import\": {\n\t\t\t\"comment\": \"import\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"import\",\n\t\t\t\t\t\"begin\": \"\\\\b(import)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#imports\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"imports\": {\n\t\t\t\"comment\": \"import package(s)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\s*[\\\\w\\\\.]+)?\\\\s*((\\\")([^\\\"]*)(\\\"))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.import.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.import.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.imports.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.imports.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#imports\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_declaration\": {\n\t\t\t\"comment\": \"Function declarations\",\n\t\t\t\"begin\": \"(?:^(\\\\bfunc\\\\b)(?:\\\\s*(\\\\([^\\\\)]+\\\\)\\\\s*)?(?:(\\\\w+)(?=\\\\(|\\\\[))?))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.function.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(\\\\w+(?:\\\\s+))?((?:[\\\\w\\\\.\\\\*]+)(?:\\\\[(?:(?:(?:[\\\\w\\\\.\\\\*]+)(?:\\\\,\\\\s+)?)+)?\\\\])?))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\d\\\\w*\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?:(?<=\\\\))\\\\s*((?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?!(?:[\\\\[\\\\]\\\\*]+)?(?:\\\\bstruct\\\\b|\\\\binterface\\\\b))[\\\\w\\\\.\\\\-\\\\*\\\\[\\\\]]+)?\\\\s*(?=\\\\{))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:([\\\\w\\\\.\\\\*]+)?(\\\\[))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"single function as a type returned type(s) declaration\",\n\t\t\t\t\t\"match\": \"(?:(?<=\\\\))(?:\\\\s*)((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?[\\\\w\\\\*\\\\.\\\\[\\\\]\\\\<\\\\>\\\\-]+(?:\\\\s*)(?:\\\\/(?:\\\\/|\\\\*).*)?)$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_param_types\": {\n\t\t\t\"comment\": \"function parameter variables and types\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"struct/interface type declaration\",\n\t\t\t\t\t\"match\": \"((?:(?:\\\\b\\\\w+\\\\,\\\\s*)+)?\\\\b\\\\w+)\\\\s+(?=(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:struct|interface)\\\\b\\\\s*\\\\{)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"multiple parameters one type -with multilines\",\n\t\t\t\t\t\"match\": \"(?:(?:(?<=\\\\()|^\\\\s*)((?:(?:\\\\b\\\\w+\\\\,\\\\s*)+)(?:/(?:/|\\\\*).*)?)$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"multiple params and types | multiple params one type | one param one type\",\n\t\t\t\t\t\"match\": \"(?:((?:(?:\\\\b\\\\w+\\\\,\\\\s*)+)?\\\\b\\\\w+)(?:\\\\s+)((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:(?:(?:[\\\\w\\\\[\\\\]\\\\.\\\\*]+)?(?:(?:\\\\bfunc\\\\b\\\\((?:[^\\\\)]+)?\\\\))(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:\\\\s*))+(?:(?:(?:[\\\\w\\\\*\\\\.\\\\[\\\\]]+)|(?:\\\\((?:[^\\\\)]+)?\\\\))))?)|(?:(?:[\\\\[\\\\]\\\\*]+)?[\\\\w\\\\*\\\\.]+(?:\\\\[(?:[^\\\\]]+)\\\\])?(?:[\\\\w\\\\.\\\\*]+)?)+)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:([\\\\w\\\\.\\\\*]+)?(\\\\[))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"other types\",\n\t\t\t\t\t\"match\": \"([\\\\w\\\\.]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"generic_param_types\": {\n\t\t\t\"comment\": \"generic parameter variables and types\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"struct/interface type declaration\",\n\t\t\t\t\t\"match\": \"((?:(?:\\\\b\\\\w+\\\\,\\\\s*)+)?\\\\b\\\\w+)\\\\s+(?=(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:struct|interface)\\\\b\\\\s*\\\\{)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"multiple parameters one type -with multilines\",\n\t\t\t\t\t\"match\": \"(?:(?:(?<=\\\\()|^\\\\s*)((?:(?:\\\\b\\\\w+\\\\,\\\\s*)+)(?:/(?:/|\\\\*).*)?)$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"multiple params and types | multiple types one param\",\n\t\t\t\t\t\"match\": \"(?:((?:(?:\\\\b\\\\w+\\\\,\\\\s*)+)?\\\\b\\\\w+)(?:\\\\s+)((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:(?:(?:[\\\\w\\\\[\\\\]\\\\.\\\\*]+)?(?:(?:\\\\bfunc\\\\b\\\\((?:[^\\\\)]+)?\\\\))(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:\\\\s*))+(?:(?:(?:[\\\\w\\\\*\\\\.]+)|(?:\\\\((?:[^\\\\)]+)?\\\\))))?)|(?:(?:(?:[\\\\w\\\\*\\\\.\\\\~]+)|(?:\\\\[(?:(?:[\\\\w\\\\.\\\\*]+)?(?:\\\\[(?:[^\\\\]]+)?\\\\])?(?:\\\\,\\\\s+)?)+\\\\]))(?:[\\\\w\\\\.\\\\*]+)?)+)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:([\\\\w\\\\.\\\\*]+)?(\\\\[))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"other types\",\n\t\t\t\t\t\"match\": \"(?:\\\\b([\\\\w\\\\.]+))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functions\": {\n\t\t\t\"comment\": \"Functions\",\n\t\t\t\"begin\": \"(?:(\\\\bfunc\\\\b)(?=\\\\())\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.function.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?:(?<=\\\\))(\\\\s*(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?((?:(?:\\\\s*(?:(?:[\\\\[\\\\]\\\\*]+)?[\\\\w\\\\.\\\\*]+)?(?:(?:\\\\[(?:(?:[\\\\w\\\\.\\\\*]+)?(?:\\\\[(?:[^\\\\]]+)?\\\\])?(?:\\\\,\\\\s+)?)+\\\\])|(?:\\\\((?:[^\\\\)]+)?\\\\)))?(?:[\\\\w\\\\.\\\\*]+)?)(?:\\\\s*)(?=\\\\{))|(?:\\\\s*(?:(?:(?:[\\\\[\\\\]\\\\*]+)?(?!\\\\bfunc\\\\b)(?:[\\\\w\\\\.\\\\*]+)(?:\\\\[(?:(?:[\\\\w\\\\.\\\\*]+)?(?:\\\\[(?:[^\\\\]]+)?\\\\])?(?:\\\\,\\\\s+)?)+\\\\])?(?:[\\\\w\\\\.\\\\*]+)?)|(?:\\\\((?:[^\\\\)]+)?\\\\)))))?)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functions_inline\": {\n\t\t\t\"comment\": \"functions in-line with multi return types\",\n\t\t\t\"match\": \"(?:(\\\\bfunc\\\\b)((?:\\\\((?:[^/]*?)\\\\))(?:\\\\s+)(?:\\\\((?:[^/]*?)\\\\)))(?:\\\\s+)(?=\\\\{))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.function.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\{\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"support_functions\": {\n\t\t\t\"comment\": \"Support Functions\",\n\t\t\t\"match\": \"(?:(?:((?<=\\\\.)\\\\b\\\\w+)|(\\\\b\\\\w+))(\\\\[(?:(?:[\\\\w\\\\.\\\\*\\\\[\\\\]\\\\{\\\\}\\\"\\\\']+)(?:(?:\\\\,\\\\s*(?:[\\\\w\\\\.\\\\*\\\\[\\\\]\\\\{\\\\}]+))*))?\\\\])?(?=\\\\())\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.support.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\d\\\\w*\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.support.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\{\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"other_struct_interface_expressions\": {\n\t\t\t\"comment\": \"struct and interface expression in-line (before curly bracket)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"after control variables must be added exactly here, do not move it! (changing may not affect tests, so be careful!)\",\n\t\t\t\t\t\"include\": \"#after_control_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\b[\\\\w\\\\.]+)(\\\\[(?:[^\\\\]]+)?\\\\])?(?=\\\\{)(?<!\\\\bstruct\\\\b|\\\\binterface\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type_assertion_inline\": {\n\t\t\t\"comment\": \"struct/interface types in-line (type assertion) | switch type keyword\",\n\t\t\t\"match\": \"(?:(?<=\\\\.\\\\()(?:(\\\\btype\\\\b)|((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?[\\\\w\\\\.\\\\[\\\\]\\\\*]+))(?=\\\\)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.type.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"struct_variables_types\": {\n\t\t\t\"comment\": \"Struct variable type\",\n\t\t\t\"begin\": \"(\\\\bstruct\\\\b)\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.struct.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_variables_types_fields\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"struct_variables_types_fields\": {\n\t\t\t\"comment\": \"Struct variable type fields\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_variable_types_fields_multi\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"one line - single type\",\n\t\t\t\t\t\"match\": \"(?:(?<=\\\\{)\\\\s*((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:[\\\\w\\\\.\\\\*\\\\[\\\\]]+))\\\\s*(?=\\\\}))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"one line - property variables and types\",\n\t\t\t\t\t\"match\": \"(?:(?<=\\\\{)\\\\s*((?:(?:\\\\w+\\\\,\\\\s*)+)?(?:\\\\w+\\\\s+))((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:[\\\\w\\\\.\\\\*\\\\[\\\\]]+))\\\\s*(?=\\\\}))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"one line with semicolon(;) without formatting gofmt - single type | property variables and types\",\n\t\t\t\t\t\"match\": \"(?:(?<=\\\\{)((?:\\\\s*(?:(?:(?:\\\\w+\\\\,\\\\s*)+)?(?:\\\\w+\\\\s+))?(?:(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:[\\\\S]+)(?:\\\\;)?))+)\\\\s*(?=\\\\}))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:\\\\w+\\\\,\\\\s*)+)?(?:\\\\w+\\\\s+))?((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:[\\\\S]+)(?:\\\\;)?))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"one type only\",\n\t\t\t\t\t\"match\": \"(?:((?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:[\\\\w\\\\.\\\\*]+)\\\\s*)(?:(?=\\\\`|\\\\/|\\\")|$))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"property variables and types\",\n\t\t\t\t\t\"match\": \"(?:((?:(?:\\\\w+\\\\,\\\\s*)+)?(?:\\\\w+\\\\s+))([^\\\\`\\\"\\\\/]+))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_variable_types_fields_multi\": {\n\t\t\t\"comment\": \"struct variable and type fields with multi lines\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"struct in struct types\",\n\t\t\t\t\t\"begin\": \"(?:((?:\\\\w+(?:\\\\,\\\\s*\\\\w+)*)(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:\\\\s+)(?:[\\\\[\\\\]\\\\*]+)?)(\\\\bstruct\\\\b)(?:\\\\s*)(\\\\{))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.struct.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#struct_variables_types_fields\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"interface in struct types\",\n\t\t\t\t\t\"begin\": \"(?:((?:\\\\w+(?:\\\\,\\\\s*\\\\w+)*)(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:\\\\s+)(?:[\\\\[\\\\]\\\\*]+)?)(\\\\binterface\\\\b)(?:\\\\s*)(\\\\{))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.interface.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface_variables_types_field\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"function in struct types\",\n\t\t\t\t\t\"begin\": \"(?:((?:\\\\w+(?:\\\\,\\\\s*\\\\w+)*)(?:(?:\\\\s*(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:\\\\s+)(?:[\\\\[\\\\]\\\\*]+)?)(\\\\bfunc\\\\b)(?:\\\\s*)(\\\\())\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.function.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface_variables_types\": {\n\t\t\t\"comment\": \"interface variable types\",\n\t\t\t\"begin\": \"(\\\\binterface\\\\b)\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.interface.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_variables_types_field\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"interface_variables_types_field\": {\n\t\t\t\"comment\": \"interface variable type fields\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support_functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:([\\\\w\\\\.\\\\*]+)?(\\\\[))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"other types\",\n\t\t\t\t\t\"match\": \"([\\\\w\\\\.]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single_type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"single type declaration\",\n\t\t\t\t\t\"match\": \"(?:(?:^\\\\s*)(\\\\btype\\\\b)(?:\\\\s*)([\\\\w\\\\.\\\\*]+)(?:\\\\s+)(?!(?:\\\\=\\\\s*)?(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:struct|interface)\\\\b)([\\\\s\\\\S]+))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.type.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#function_param_types\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#generic_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"single type declaration with generics\",\n\t\t\t\t\t\"begin\": \"(?:(?:^|\\\\s+)(\\\\btype\\\\b)(?:\\\\s*)([\\\\w\\\\.\\\\*]+)(?=\\\\[))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.type.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?:(?<=\\\\])((?:\\\\s+)(?:\\\\=\\\\s*)?(?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+)?(?:(?!(?:[\\\\[\\\\]\\\\*]+)?(?:\\\\bstruct\\\\b|\\\\binterface\\\\b|\\\\bfunc\\\\b))[\\\\w\\\\.\\\\-\\\\*\\\\[\\\\]]+(?:\\\\,\\\\s*[\\\\w\\\\.\\\\[\\\\]\\\\*]+)*))?)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#struct_variables_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\{\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"multi_types\": {\n\t\t\t\"comment\": \"multi type declaration\",\n\t\t\t\"begin\": \"(\\\\btype\\\\b)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.type.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_variables_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"after_control_variables\": {\n\t\t\t\"comment\": \"After control variables, to not highlight as a struct/interface (before formatting with gofmt)\",\n\t\t\t\"match\": \"(?:(?<=\\\\brange\\\\b|\\\\bswitch\\\\b|\\\\;|\\\\bif\\\\b|\\\\bfor\\\\b|\\\\<|\\\\>|\\\\<\\\\=|\\\\>\\\\=|\\\\=\\\\=|\\\\!\\\\=|\\\\w(?:\\\\+|/|\\\\-|\\\\*|\\\\%)|\\\\w(?:\\\\+|/|\\\\-|\\\\*|\\\\%)\\\\=|\\\\|\\\\||\\\\&\\\\&)(?:\\\\s*)((?![\\\\[\\\\]]+)[[:alnum:]\\\\-\\\\_\\\\!\\\\.\\\\[\\\\]\\\\<\\\\>\\\\=\\\\*/\\\\+\\\\%\\\\:]+)(?:\\\\s*)(?=\\\\{))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"syntax_errors\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Syntax error using slices\",\n\t\t\t\t\t\"match\": \"\\\\[\\\\](\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.slice.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Syntax error numeric literals\",\n\t\t\t\t\t\"match\": \"\\\\b0[0-7]*[89]\\\\d*\\\\b\",\n\t\t\t\t\t\"name\": \"invalid.illegal.numeric.go\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"built_in_functions\": {\n\t\t\t\"comment\": \"Built-in functions\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(append|cap|close|complex|copy|delete|imag|len|panic|print|println|real|recover|min|max|clear)\\\\b(?=\\\\()\",\n\t\t\t\t\t\"name\": \"entity.name.function.support.builtin.go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"new keyword\",\n\t\t\t\t\t\"begin\": \"(?:(\\\\bnew\\\\b)(\\\\())\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.support.builtin.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#struct_variables_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#generic_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\w+)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"make keyword\",\n\t\t\t\t\t\"begin\": \"(?:(\\\\bmake\\\\b)(?:(\\\\()((?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+(?:\\\\([^\\\\)]+\\\\))?)?(?:[\\\\[\\\\]\\\\*]+)?(?:(?!\\\\bmap\\\\b)(?:[\\\\w\\\\.]+))?(\\\\[(?:(?:[\\\\S]+)(?:(?:\\\\,\\\\s*(?:[\\\\S]+))*))?\\\\])?(?:\\\\,)?)?))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.support.builtin.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_interface_declaration\": {\n\t\t\t\"comment\": \"struct, interface type declarations (related to: struct_variables_types, interface_variables_types)\",\n\t\t\t\"match\": \"(?:(?:^\\\\s*)(\\\\btype\\\\b)(?:\\\\s*)([\\\\w\\\\.]+))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.type.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"switch_types\": {\n\t\t\t\"comment\": \"switch type assertions, only highlights types after case keyword\",\n\t\t\t\"begin\": \"(?<=\\\\bswitch\\\\b)(?:\\\\s*)(?:(\\\\w+\\\\s*\\\\:\\\\=)?\\\\s*([\\\\w\\\\.\\\\*\\\\(\\\\)\\\\[\\\\]\\\\+/\\\\-\\\\%\\\\<\\\\>\\\\|\\\\&]+))(\\\\.\\\\(\\\\btype\\\\b\\\\)\\\\s*)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#support_functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\btype\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?:\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.go\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"types after case keyword with single line\",\n\t\t\t\t\t\"match\": \"(?:^\\\\s*(\\\\bcase\\\\b))(?:\\\\s+)([\\\\w\\\\.\\\\,\\\\*\\\\=\\\\<\\\\>\\\\!\\\\s]+)(:)(\\\\s*/(?:/|\\\\*)\\\\s*.*)?$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.other.colon.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"types after case keyword with multi lines\",\n\t\t\t\t\t\"begin\": \"\\\\bcase\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\:\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.other.colon.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var_assignment\": {\n\t\t\t\"comment\": \"variable assignment with var keyword\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"single assignment\",\n\t\t\t\t\t\"match\": \"(?:(?<=\\\\bvar\\\\b)(?:\\\\s*)(\\\\b[\\\\w\\\\.]+(?:\\\\,\\\\s*[\\\\w\\\\.]+)*)(?:\\\\s*)((?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+(?:\\\\([^\\\\)]+\\\\))?)?(?!(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:struct|func|map)\\\\b)(?:[\\\\w\\\\.\\\\[\\\\]\\\\*]+(?:\\\\,\\\\s*[\\\\w\\\\.\\\\[\\\\]\\\\*]+)*)?(?:\\\\s*)(?:\\\\=)?)?)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#generic_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"multi assignment\",\n\t\t\t\t\t\"begin\": \"(?:(?<=\\\\bvar\\\\b)(?:\\\\s*)(\\\\())\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:^\\\\s*)(\\\\b[\\\\w\\\\.]+(?:\\\\,\\\\s*[\\\\w\\\\.]+)*)(?:\\\\s*)((?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+(?:\\\\([^\\\\)]+\\\\))?)?(?!(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:struct|func|map)\\\\b)(?:[\\\\w\\\\.\\\\[\\\\]\\\\*]+(?:\\\\,\\\\s*[\\\\w\\\\.\\\\[\\\\]\\\\*]+)*)?(?:\\\\s*)(?:\\\\=)?)?)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#generic_types\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"const_assignment\": {\n\t\t\t\"comment\": \"constant assignment with const keyword\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"single assignment\",\n\t\t\t\t\t\"match\": \"(?:(?<=\\\\bconst\\\\b)(?:\\\\s*)(\\\\b[\\\\w\\\\.]+(?:\\\\,\\\\s*[\\\\w\\\\.]+)*)(?:\\\\s*)((?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+(?:\\\\([^\\\\)]+\\\\))?)?(?!(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:struct|func|map)\\\\b)(?:[\\\\w\\\\.\\\\[\\\\]\\\\*]+(?:\\\\,\\\\s*[\\\\w\\\\.\\\\[\\\\]\\\\*]+)*)?(?:\\\\s*)(?:\\\\=)?)?)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.constant.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#generic_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"multi assignment\",\n\t\t\t\t\t\"begin\": \"(?:(?<=\\\\bconst\\\\b)(?:\\\\s*)(\\\\())\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:^\\\\s*)(\\\\b[\\\\w\\\\.]+(?:\\\\,\\\\s*[\\\\w\\\\.]+)*)(?:\\\\s*)((?:(?:(?:[\\\\*\\\\[\\\\]]+)?(?:\\\\<\\\\-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*\\\\<\\\\-)?\\\\s*)+(?:\\\\([^\\\\)]+\\\\))?)?(?!(?:[\\\\[\\\\]\\\\*]+)?\\\\b(?:struct|func|map)\\\\b)(?:[\\\\w\\\\.\\\\[\\\\]\\\\*]+(?:\\\\,\\\\s*[\\\\w\\\\.\\\\[\\\\]\\\\*]+)*)?(?:\\\\s*)(?:\\\\=)?)?)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.constant.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#generic_types\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable_assignment\": {\n\t\t\t\"comment\": \"variable assignment\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"variable assignment with :=\",\n\t\t\t\t\t\"match\": \"\\\\b\\\\w+(?:\\\\,\\\\s*\\\\w+)*(?=\\\\s*:=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\d\\\\w*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"variable assignment with =\",\n\t\t\t\t\t\"match\": \"\\\\b[\\\\w\\\\.\\\\*]+(?:\\\\,\\\\s*[\\\\w\\\\.\\\\*]+)*(?=\\\\s*=(?!=))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#delimiters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\d\\\\w*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.go\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.go\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"generic_types\": {\n\t\t\t\"comment\": \"Generic support for all types\",\n\t\t\t\"match\": \"(?:([\\\\w\\\\.\\\\*]+)(\\\\[(?:[^\\\\]]+)?\\\\]))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"switch_select_case_variables\": {\n\t\t\t\"comment\": \"variables after case control keyword in switch/select expression, to not scope them as property variables\",\n\t\t\t\"match\": \"(?:(?:^\\\\s*(\\\\bcase\\\\b))(?:\\\\s+)([\\\\s\\\\S]+(?:\\\\:)\\\\s*(?:/(?:/|\\\\*).*)?)$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.go\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#support_functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable_assignment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"slice_index_variables\": {\n\t\t\t\"comment\": \"slice index and capacity variables, to not scope them as property variables\",\n\t\t\t\"match\": \"(?<=\\\\w\\\\[)((?:(?:\\\\b[\\\\w\\\\.\\\\*\\\\+/\\\\-\\\\%\\\\<\\\\>\\\\|\\\\&]+\\\\:)|(?:\\\\:\\\\b[\\\\w\\\\.\\\\*\\\\+/\\\\-\\\\%\\\\<\\\\>\\\\|\\\\&]+))(?:\\\\b[\\\\w\\\\.\\\\*\\\\+/\\\\-\\\\%\\\\<\\\\>\\\\|\\\\&]+)?(?:\\\\:\\\\b[\\\\w\\\\.\\\\*\\\\+/\\\\-\\\\%\\\\<\\\\>\\\\|\\\\&]+)?)(?=\\\\])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"property_variables\": {\n\t\t\t\"comment\": \"Property variables in struct\",\n\t\t\t\"match\": \"((?:\\\\b[\\\\w\\\\.]+)(?:\\\\:(?!\\\\=)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"label_loop_variables\": {\n\t\t\t\"comment\": \"labeled loop variable name\",\n\t\t\t\"match\": \"((?:^\\\\s*\\\\w+:\\\\s*$)|(?:^\\\\s*(?:\\\\bbreak\\\\b|\\\\bgoto\\\\b|\\\\bcontinue\\\\b)\\\\s+\\\\w+(?:\\\\s*/(?:/|\\\\*)\\\\s*.*)?$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.label.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"double_parentheses_types\": {\n\t\t\t\"comment\": \"double parentheses types\",\n\t\t\t\"match\": \"(?:(?<!\\\\w)(\\\\((?:[\\\\w\\\\.\\\\[\\\\]\\\\*\\\\&]+)\\\\))(?=\\\\())\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"field_hover\": {\n\t\t\t\"comment\": \"struct field property and types when hovering with the mouse\",\n\t\t\t\"match\": \"(?:(?<=^\\\\bfield\\\\b)\\\\s+([\\\\w\\\\*\\\\.]+)\\\\s+([\\\\s\\\\S]+))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\binvalid\\\\b\\\\s+\\\\btype\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"invalid.field.go\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-declarations-without-brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-variable-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"other_variables\": {\n\t\t\t\"comment\": \"all other variables\",\n\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\"name\": \"variable.other.go\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/groovy/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/groovy/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/groovy.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/groovy.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"85d8f7c97ae473ccb9473f6c8d27e4ec957f4be1\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-groovy.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/groovy/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t]\n\t],\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/groovy/package.json",
    "content": "{\n  \"name\": \"groovy\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin textmate/groovy.tmbundle Syntaxes/Groovy.tmLanguage ./syntaxes/groovy.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"groovy\",\n        \"aliases\": [\n          \"Groovy\",\n          \"groovy\"\n        ],\n        \"extensions\": [\n          \".groovy\",\n          \".gvy\",\n          \".gradle\",\n          \".jenkinsfile\",\n          \".nf\"\n        ],\n        \"filenames\": [\n          \"Jenkinsfile\"\n        ],\n        \"filenamePatterns\": [\n          \"Jenkinsfile*\"\n        ],\n        \"firstLine\": \"^#!.*\\\\bgroovy\\\\b\",\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"groovy\",\n        \"scopeName\": \"source.groovy\",\n        \"path\": \"./syntaxes/groovy.tmLanguage.json\"\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"groovy\",\n        \"path\": \"./snippets/groovy.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/groovy/package.nls.json",
    "content": "{\n\t\"displayName\": \"Groovy Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting and bracket matching in Groovy files.\"\n}\n"
  },
  {
    "path": "extensions/groovy/snippets/groovy.code-snippets",
    "content": "{\n\t\"replace(dir: …, includes: …, token: …, value: …)\": {\n\t\t\"prefix\": \"replace\",\n\t\t\"body\": \"replace(dir:\\\"${1:dirName}\\\", includes:\\\"${2:*.*}\\\", token:\\\"${3:tokenName}\\\", value:\\\"\\\\${${4:value}}\\\")$0\",\n\t\t\"description\": \"Replace(...)\"\n\t},\n\t\"Doc Block\": {\n\t\t\"prefix\": \"doc\",\n\t\t\"body\": [\n\t\t\t\"/**\",\n\t\t\t\" * $0\",\n\t\t\t\" */\"\n\t\t],\n\t\t\"description\": \"Doc block comment\"\n\t},\n\t\"key: \\\"value\\\" (Hash Pair)\": {\n\t\t\"prefix\": \"key\",\n\t\t\"body\": \"${1:key}: ${2:\\\"${3:value}\\\"}\"\n\t},\n\t\"Thread.start { … }\": {\n\t\t\"prefix\": \"thread\",\n\t\t\"body\": [\n\t\t\t\"Thread.start {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Thread.start { ... }\"\n\t},\n\t\"Thread.startDaemon { … }\": {\n\t\t\"prefix\": \"thread\",\n\t\t\"body\": [\n\t\t\t\"Thread.startDaemon {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Thread.startDaemon { ... }\"\n\t},\n\t\"case … break\": {\n\t\t\"prefix\": \"case\",\n\t\t\"body\": [\n\t\t\t\"case ${1:CASE_NAME}:\",\n\t\t\t\"\\t$2\",\n\t\t\t\"break$0\"\n\t\t],\n\t\t\"description\": \"case ... break\"\n\t},\n\t\"instance … (Singleton)\": {\n\t\t\"prefix\": \"instance\",\n\t\t\"body\": [\n\t\t\t\"private static $1 instance\",\n\t\t\t\"\",\n\t\t\t\"static $1 getInstance(${2:args}) { \",\n\t\t\t\"\\tif (!instance) instance = new $1(${2:args})\",\n\t\t\t\"\\treturn instance\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Singleton instance + Getter\"\n\t},\n\t\"class … extends GroovyTestCase { … }\": {\n\t\t\"prefix\": \"tc\",\n\t\t\"body\": [\n\t\t\t\"class $1 extends GroovyTestCase {\",\n\t\t\t\"\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"GroovyTestCase class\"\n\t},\n\t\"copy(file: …, tofile: …) \": {\n\t\t\"prefix\": \"copy\",\n\t\t\"body\": \"copy(file:\\\"${1:sourceFile}\\\", tofile:\\\"${2:targetFile}\\\")\",\n\t\t\"description\": \"Copy file\"\n\t},\n\t\"copy(todir: …) { fileset(dir: …) { include … exclude }\": {\n\t\t\"prefix\": \"copy\",\n\t\t\"body\": [\n\t\t\t\"copy(todir:\\\"${1:targetDir}\\\") {\",\n\t\t\t\"\\tfileset(dir:\\\"${2:sourceDir}\\\") {\",\n\t\t\t\"\\t\\tinclude(name:\\\"${3:includeName}\\\")\",\n\t\t\t\"\\t\\texclude(name:\\\"${4:excludeName}\\\")\",\n\t\t\t\"\\t}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Copy fileset todir w/ include/exclude\"\n\t},\n\t\"copy(todir: …) { fileset:dir …) }\": {\n\t\t\"prefix\": \"copy\",\n\t\t\"body\": [\n\t\t\t\"copy(todir:\\\"${1:targetDir}\\\") {\",\n\t\t\t\"\\tfileset(dir:\\\"${2:sourceDir}\\\")\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Copy fileset todir\"\n\t},\n\t\"closure = { … } \": {\n\t\t\"prefix\": \"cv\",\n\t\t\"body\": [\n\t\t\t\"def ${1:closureName} = { ${2:args} ->\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Closure block\"\n\t},\n\t\"for(… in …) { … }\": {\n\t\t\"prefix\": \"forin\",\n\t\t\"body\": [\n\t\t\t\"for (${1:element} in ${2:collection}) {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"For-loop\"\n\t},\n\t\"mkdir(dir: …)\": {\n\t\t\"prefix\": \"mkdir\",\n\t\t\"body\": \"mkdir(dir:\\\"${1:dirName}\\\")\",\n\t\t\"description\": \"mkdir\"\n\t},\n\t\"print\": {\n\t\t\"prefix\": \"p\",\n\t\t\"body\": \"print $0\",\n\t\t\"description\": \"print\"\n\t},\n\t\"println \": {\n\t\t\"prefix\": \"pl\",\n\t\t\"body\": \"println $0\",\n\t\t\"description\": \"println\"\n\t},\n\t\"runAfter() { … }\": {\n\t\t\"prefix\": \"runa\",\n\t\t\"body\": [\n\t\t\t\"runAfter(${1:delay}) {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"runAfter()  { ... }\"\n\t},\n\t\"setUp() { … }\": {\n\t\t\"prefix\": \"setup\",\n\t\t\"body\": [\n\t\t\t\"void setUp() {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"setup() { ... }\"\n\t},\n\t\"sleep(secs) { … // on interrupt do }\": {\n\t\t\"prefix\": \"sleep\",\n\t\t\"body\": [\n\t\t\t\"sleep(${1:secs}) {\",\n\t\t\t\"\\t${2:// on interrupt do}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"sleep with interrupt\"\n\t},\n\t\"sleep(secs)\": {\n\t\t\"prefix\": \"sleep\",\n\t\t\"body\": \"sleep(${1:secs})\",\n\t\t\"description\": \"sleep\"\n\t},\n\t\"sort { … }\": {\n\t\t\"prefix\": \"sort\",\n\t\t\"body\": [\n\t\t\t\"sort { \",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"sort\"\n\t},\n\t\"static main() { … }\": {\n\t\t\"prefix\": \"main\",\n\t\t\"body\": [\n\t\t\t\"static main(args) {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"main method\"\n\t},\n\t\"switch … case\": {\n\t\t\"prefix\": \"switch\",\n\t\t\"body\": [\n\t\t\t\"switch(${1:value}) {\",\n\t\t\t\"\\tcase ${2:CASE}:\",\n\t\t\t\"\\t\\t$3\",\n\t\t\t\"\\tbreak$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Switch-Case block\"\n\t},\n\t\"switch … case … default\": {\n\t\t\"prefix\": \"switch\",\n\t\t\"body\": [\n\t\t\t\"switch(${1:value}) {\",\n\t\t\t\"\\tcase ${3:CASE}:\",\n\t\t\t\"\\t\\t$4\",\n\t\t\t\"\\tbreak$0\",\n\t\t\t\"\\tdefault:\",\n\t\t\t\"\\t\\t$2\",\n\t\t\t\"\\tbreak\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Switch-Case-Default block\"\n\t},\n\t\"tearDown() { … }\": {\n\t\t\"prefix\": \"tear\",\n\t\t\"body\": [\n\t\t\t\"void tearDown() {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"tearDown() { ... }\"\n\t},\n\t\"test()\": {\n\t\t\"prefix\": \"t\",\n\t\t\"body\": [\n\t\t\t\"void test$1() {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"test method\"\n\t},\n\t\"var\": {\n\t\t\"prefix\": \"v\",\n\t\t\"body\": \"${1:def} ${2:var}${3: = ${0:null}}\",\n\t\t\"description\": \"var\"\n\t}\n}"
  },
  {
    "path": "extensions/groovy/syntaxes/groovy.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/groovy.tmbundle/blob/master/Syntaxes/Groovy.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/groovy.tmbundle/commit/85d8f7c97ae473ccb9473f6c8d27e4ec957f4be1\",\n\t\"name\": \"Groovy\",\n\t\"scopeName\": \"source.groovy\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^(#!).+$\\\\n\",\n\t\t\t\"name\": \"comment.line.hashbang.groovy\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.package.groovy\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.package.groovy\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(package)\\\\b(?:\\\\s*([^ ;$]+)\\\\s*(;)?)?\",\n\t\t\t\"name\": \"meta.package.groovy\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(import static)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.static.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.groovy\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.import.groovy\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"storage.modifier.import.groovy\",\n\t\t\t\"end\": \"\\\\s*(?:$|(?=%>)(;))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.import.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\"name\": \"punctuation.separator.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(import)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.groovy\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.import.groovy\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"storage.modifier.import.groovy\",\n\t\t\t\"end\": \"\\\\s*(?:$|(?=%>)|(;))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.import.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\"name\": \"punctuation.separator.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.groovy\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.static.groovy\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.import.groovy\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(import)(?:\\\\s+(static)\\\\s+)\\\\b(?:\\\\s*([^ ;$]+)\\\\s*(;)?)?\",\n\t\t\t\"name\": \"meta.import.groovy\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#groovy\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"annotations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\\.)(@[^ (]+)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.groovy\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.annotation-arguments.begin.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.annotation-arguments.end.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.declaration.annotation.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.other.key.groovy\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(\\\\w*)\\\\s*(=)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.seperator.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\.)@\\\\S+\",\n\t\t\t\t\t\"name\": \"storage.type.annotation.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous-classes-and-new\": {\n\t\t\t\"begin\": \"\\\\bnew\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.new.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=[;])|$\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\w+)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\s*(?:,|;|\\\\)))|$\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\w.*\\\\(?)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))|$\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"name\": \"meta.inner-class.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"braces\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class\": {\n\t\t\t\"begin\": \"(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum)\\\\s+\\\\w+)\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.class.end.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.definition.class.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.groovy\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(class|(?:@)?interface|enum)\\\\s+(\\\\w+)\",\n\t\t\t\t\t\"name\": \"meta.class.identifier.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"extends\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.extends.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?={|implements)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.inherited.classes.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(implements)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.implements.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*extends|\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.implemented.interfaces.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"name\": \"meta.class.body.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constructors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"closures\": {\n\t\t\t\"begin\": \"\\\\{(?=.*?->)\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{)(?=[^\\\\}]*?->)\",\n\t\t\t\t\t\"end\": \"->\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?!->)\",\n\t\t\t\t\t\t\t\"end\": \"(?=->)\",\n\t\t\t\t\t\t\t\"name\": \"meta.closure.parameters.groovy\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?!,|->)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=,|->)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.closure.parameter.groovy\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.groovy\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=,|->)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.parameter.default.groovy\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#parameters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[^}])\",\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment-block\": {\n\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\"name\": \"comment.block.groovy\"\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"/\\\\*\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.empty.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.javadoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(//).*$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.double-slash.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([A-Z][A-Z0-9_]+)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.other.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(true|false|null)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructors\": {\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"begin\": \"(?<=;|^)(?=\\\\s*(?:(?:private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final)\\\\s+)*[A-Z]\\\\w*\\\\()\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"enum-values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=;|^)\\\\s*\\\\b([A-Z0-9_]+)(?=\\\\s*(?:,|;|}|\\\\(|$))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.enum.name.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \",|;|(?=})|^(?!\\\\s*\\\\w+\\\\s*(?:,|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"name\": \"meta.enum.value.groovy\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.seperator.parameter.groovy\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"groovy\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#methods\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"groovy-code\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#groovy-code-minus-map-keys\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#map-keys\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"groovy-code-minus-map-keys\": {\n\t\t\t\"comment\": \"In some situations, maps can't be declared without enclosing []'s, \\n\\t\\t\\t\\ttherefore we create a collection of everything but that\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keyword-language\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous-classes-and-new\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keyword-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#closures\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#braces\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keyword\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keyword-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keyword-language\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keyword-language\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(try|catch|finally|throw)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.exception.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b((?<!\\\\.)(?:return|break|continue|default|do|while|for|switch|if|else))\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\bcase\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.case-terminator.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.case.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#groovy-code-minus-map-keys\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(assert)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.assert.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"$|;|}\",\n\t\t\t\t\t\"name\": \"meta.declaration.assertion.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assert.expression-seperator.groovy\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#groovy-code-minus-map-keys\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(throws)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.throws.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keyword-operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(as)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.operator.as.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(in)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.operator.in.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\?\\\\:\",\n\t\t\t\t\t\"name\": \"keyword.operator.elvis.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\*\\\\:\",\n\t\t\t\t\t\"name\": \"keyword.operator.spreadmap.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\",\n\t\t\t\t\t\"name\": \"keyword.operator.range.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\->\",\n\t\t\t\t\t\"name\": \"keyword.operator.arrow.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<<\",\n\t\t\t\t\t\"name\": \"keyword.operator.leftshift.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\S)\\\\.(?=\\\\S)\",\n\t\t\t\t\t\"name\": \"keyword.operator.navigation.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\S)\\\\?\\\\.(?=\\\\S)\",\n\t\t\t\t\t\"name\": \"keyword.operator.safe-navigation.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|\\\\)|}|])\",\n\t\t\t\t\t\"name\": \"meta.evaluation.ternary.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.expression-seperator.groovy\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#groovy-code-minus-map-keys\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"==~\",\n\t\t\t\t\t\"name\": \"keyword.operator.match.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"=~\",\n\t\t\t\t\t\"name\": \"keyword.operator.find.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(instanceof)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.operator.instanceof.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(===|==|!=|<=|>=|<=>|<>|<|>|<<)\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\-\\\\-|\\\\+\\\\+)\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment-decrement.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\-|\\\\+|\\\\*|\\\\/|%)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(!|&&|\\\\|\\\\|)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"language-variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(this|super)\\\\b\",\n\t\t\t\t\t\"name\": \"variable.language.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"map-keys\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.key.groovy\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.seperator.key-value.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\w+)\\\\s*(:)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-call\": {\n\t\t\t\"begin\": \"([\\\\w$]+)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.method.groovy\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.method-parameters.begin.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.method-parameters.end.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.method-call.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.definition.seperator.parameter.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-content\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(?:\\\\w|<)[^\\\\(]*\\\\s+(?:[\\\\w$]|<)+\\\\s*\\\\()\",\n\t\t\t\t\t\"end\": \"(?=[\\\\w$]+\\\\s*\\\\()\",\n\t\t\t\t\t\"name\": \"meta.method.return-type.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([\\\\w$]+)\\\\s*\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"meta.definition.method.signature.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=[^)])\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"name\": \"meta.method.parameters.groovy\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?=[^,)])\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\))\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.method.parameter.groovy\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.separator.groovy\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.groovy\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\))\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.parameter.default.groovy\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#parameters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=<)\",\n\t\t\t\t\t\"end\": \"(?=\\\\s)\",\n\t\t\t\t\t\"name\": \"meta.method.paramerised-type.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.parameters.groovy\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.seperator.groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"throws\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?={|;)|^(?=\\\\s*(?:[^{\\\\s]|$))\",\n\t\t\t\t\t\"name\": \"meta.throwables.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"name\": \"meta.method.body.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"methods\": {\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"begin\": \"(?x:(?<=;|^|{)(?=\\\\s*\\n                (?:\\n                    (?:private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final) # visibility/modifier\\n                        |\\n                    (?:def)\\n                        |\\n                    (?:\\n                        (?:\\n                            (?:void|boolean|byte|char|short|int|float|long|double)\\n                                |\\n                            (?:@?(?:[a-zA-Z]\\\\w*\\\\.)*[A-Z]+\\\\w*) # object type\\n                        )\\n                        [\\\\[\\\\]]*\\n                        (?:<.*>)?\\n                    ) \\n                    \\n                )\\n                \\\\s+\\n                ([^=]+\\\\s+)?\\\\w+\\\\s*\\\\(\\n\\t\\t\\t))\",\n\t\t\t\"end\": \"}|(?=[^{])\",\n\t\t\t\"name\": \"meta.definition.method.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_curly\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numbers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((0(x|X)[0-9a-fA-F]*)|(\\\\+|-)?\\\\b(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)([LlFfUuDdg]|UL|ul)?\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b((?:[a-z]\\\\w*\\\\.)*(?:[A-Z]+\\\\w*[a-z]+\\\\w*|UR[LI]))<\",\n\t\t\t\t\t\"end\": \">|[^\\\\w\\\\s,\\\\?<\\\\[\\\\]]\",\n\t\t\t\t\t\"name\": \"storage.type.generic.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"comment\": \"This is just to support <>'s with no actual type prefix\",\n\t\t\t\t\t\t\t\"end\": \">|[^\\\\w\\\\s,\\\\[\\\\]<]\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.generic.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b((?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*[a-z]+\\\\w*)(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=[^\\\\]\\\\s])\",\n\t\t\t\t\t\"name\": \"storage.type.object.array.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:[a-zA-Z]\\\\w*\\\\.)*(?:[A-Z]+\\\\w*[a-z]+\\\\w*|UR[LI])\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-types-inherited\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b((?:[a-zA-Z]\\\\w*\\\\.)*[A-Z]+\\\\w*[a-z]+\\\\w*)<\",\n\t\t\t\t\t\"end\": \">|[^\\\\w\\\\s,\\\\?<\\\\[\\\\]]\",\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"comment\": \"This is just to support <>'s with no actual type prefix\",\n\t\t\t\t\t\t\t\"end\": \">|[^\\\\w\\\\s,\\\\[\\\\]<]\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.generic.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.dereference.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\b(?:[a-zA-Z]\\\\w*(\\\\.))*[A-Z]+\\\\w*[a-z]+\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\"name\": \"variable.parameter.method.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parens\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"primitive-arrays\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:void|boolean|byte|char|short|int|float|long|double)(\\\\[\\\\])*\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.primitive.array.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"primitive-types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:void|boolean|byte|char|short|int|float|long|double)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.primitive.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/(?=[^/]+/([^>]|$))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.begin.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.end.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.regexp.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"~\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.begin.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.end.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.regexp.compiled.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"storage-modifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(private|protected|public)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.access-control.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(static)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.static.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(final)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.final.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(native|synchronized|abstract|threadsafe|transient)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.other.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-double\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-double-contents\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-double-contents\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\t\t\"begin\": \"\\\\$\\\\w\",\n\t\t\t\t\t\"end\": \"(?=\\\\W)\",\n\t\t\t\t\t\"name\": \"variable.other.interpolated.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.interpolated.groovy\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.dereference.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"source.groovy.embedded.source\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nest_curly\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-double-multiline\": {\n\t\t\t\"begin\": \"\\\"\\\"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.multiline.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-double-contents\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-single\": {\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-single-contents\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-single-contents\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-single-multiline\": {\n\t\t\t\"begin\": \"'''\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'''\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.multiline.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-single-contents\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-double-multiline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-single-multiline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"structures\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.structure.begin.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.structure.end.groovy\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.groovy\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.definition.separator.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\b(?:sprintf|print(?:f|ln)?)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.print.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\b(?:shouldFail|fail(?:NotEquals)?|ass(?:ume|ert(?:S(?:cript|ame)|N(?:ot(?:Same|\\n\\t\\t\\t\\t\\tNull)|ull)|Contains|T(?:hat|oString|rue)|Inspect|Equals|False|Length|\\n\\t\\t\\t\\t\\tArrayEquals)))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.testing.groovy\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(def)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.def.groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#primitive-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#primitive-arrays\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#structures\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-call\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x:(?=\\n                        (?:\\n                            (?:private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final) # visibility/modifier\\n                                |\\n                            (?:def)\\n                                |\\n                            (?:void|boolean|byte|char|short|int|float|long|double)\\n                                |\\n                            (?:(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*) # object type\\n                        )\\n                        \\\\s+\\n                        [\\\\w\\\\d_<>\\\\[\\\\],\\\\s]+\\n                        (?:=|$)\\n                        \\n        \\t\\t\\t))\",\n\t\t\t\t\t\"end\": \";|$\",\n\t\t\t\t\t\"name\": \"meta.definition.variable.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.variable.groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"([A-Z_0-9]+)\\\\s+(?=\\\\=)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.name.groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(\\\\w[^\\\\s,]*)\\\\s+(?=\\\\=)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.name.groovy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(\\\\w[^\\\\s=]*)(?=\\\\s*($|;))\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#groovy-code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/grunt/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/grunt/.vscodeignore",
    "content": "test/**\nsrc/**\ntsconfig.json\nout/**\nextension.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/grunt/README.md",
    "content": "# Grunt - The JavaScript Task Runner\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension supports running [Grunt](https://gruntjs.com/) tasks defined in a `gruntfile.js` file as [VS Code tasks](https://code.visualstudio.com/docs/editor/tasks). Grunt tasks with the name 'build', 'compile', or 'watch' are treated as build tasks.\n\nTo run Grunt tasks, use the **Tasks** menu.\n\n## Settings\n\n- `grunt.autoDetect` - Enable detecting tasks from `gruntfile.js` files, the default is `on`.\n"
  },
  {
    "path": "extensions/grunt/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\tmain: './src/main.ts',\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t}\n});\n"
  },
  {
    "path": "extensions/grunt/package.json",
    "content": "{\n  \"name\": \"grunt\",\n  \"publisher\": \"vscode\",\n  \"description\": \"Extension to add Grunt capabilities to VS Code.\",\n  \"displayName\": \"Grunt support for VS Code\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"icon\": \"images/grunt.png\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\n    \"Other\"\n  ],\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:grunt\",\n    \"watch\": \"gulp watch-extension:grunt\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"main\": \"./out/main\",\n  \"activationEvents\": [\n    \"onTaskType:grunt\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"configuration\": {\n      \"id\": \"grunt\",\n      \"type\": \"object\",\n      \"title\": \"Grunt\",\n      \"properties\": {\n        \"grunt.autoDetect\": {\n          \"scope\": \"application\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"off\",\n            \"on\"\n          ],\n          \"default\": \"off\",\n          \"description\": \"%config.grunt.autoDetect%\"\n        }\n      }\n    },\n    \"taskDefinitions\": [\n      {\n        \"type\": \"grunt\",\n        \"required\": [\n          \"task\"\n        ],\n        \"properties\": {\n          \"task\": {\n            \"type\": \"string\",\n            \"description\": \"%grunt.taskDefinition.type.description%\"\n          },\n          \"args\": {\n            \"type\": \"array\",\n            \"description\": \"%grunt.taskDefinition.args.description%\"\n          },\n          \"file\": {\n            \"type\": \"string\",\n            \"description\": \"%grunt.taskDefinition.file.description%\"\n          }\n        },\n        \"when\": \"shellExecutionSupported\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/grunt/package.nls.json",
    "content": "{\n\t\"description\": \"Extension to add Grunt capabilities to VS Code.\",\n\t\"displayName\": \"Grunt support for VS Code\",\n\t\"config.grunt.autoDetect\": \"Controls enablement of Grunt task detection. Grunt task detection can cause files in any open workspace to be executed.\",\n\t\"grunt.taskDefinition.type.description\": \"The Grunt task to customize.\",\n\t\"grunt.taskDefinition.args.description\": \"Command line arguments to pass to the grunt task\",\n\t\"grunt.taskDefinition.file.description\": \"The Grunt file that provides the task. Can be omitted.\"\n}\n"
  },
  {
    "path": "extensions/grunt/src/main.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as cp from 'child_process';\nimport * as vscode from 'vscode';\n\ntype AutoDetect = 'on' | 'off';\n\nfunction exists(file: string): Promise<boolean> {\n\treturn new Promise<boolean>((resolve, _reject) => {\n\t\tfs.exists(file, (value) => {\n\t\t\tresolve(value);\n\t\t});\n\t});\n}\n\nfunction exec(command: string, options: cp.ExecOptions): Promise<{ stdout: string; stderr: string }> {\n\treturn new Promise<{ stdout: string; stderr: string }>((resolve, reject) => {\n\t\tcp.exec(command, options, (error, stdout, stderr) => {\n\t\t\tif (error) {\n\t\t\t\treject({ error, stdout, stderr });\n\t\t\t}\n\t\t\tresolve({ stdout, stderr });\n\t\t});\n\t});\n}\n\nconst buildNames: string[] = ['build', 'compile', 'watch'];\nfunction isBuildTask(name: string): boolean {\n\tfor (const buildName of buildNames) {\n\t\tif (name.indexOf(buildName) !== -1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nconst testNames: string[] = ['test'];\nfunction isTestTask(name: string): boolean {\n\tfor (const testName of testNames) {\n\t\tif (name.indexOf(testName) !== -1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nlet _channel: vscode.OutputChannel;\nfunction getOutputChannel(): vscode.OutputChannel {\n\tif (!_channel) {\n\t\t_channel = vscode.window.createOutputChannel('Grunt Auto Detection');\n\t}\n\treturn _channel;\n}\n\nfunction showError() {\n\tvscode.window.showWarningMessage(vscode.l10n.t(\"Problem finding grunt tasks. See the output for more information.\"),\n\t\tvscode.l10n.t(\"Go to output\")).then(() => {\n\t\t\tgetOutputChannel().show(true);\n\t\t});\n}\ninterface GruntTaskDefinition extends vscode.TaskDefinition {\n\ttask: string;\n\targs?: string[];\n\tfile?: string;\n}\n\nasync function findGruntCommand(rootPath: string): Promise<string> {\n\tlet command: string;\n\tconst platform = process.platform;\n\tif (platform === 'win32' && await exists(path.join(rootPath!, 'node_modules', '.bin', 'grunt.cmd'))) {\n\t\tcommand = path.join('.', 'node_modules', '.bin', 'grunt.cmd');\n\t} else if ((platform === 'linux' || platform === 'darwin') && await exists(path.join(rootPath!, 'node_modules', '.bin', 'grunt'))) {\n\t\tcommand = path.join('.', 'node_modules', '.bin', 'grunt');\n\t} else {\n\t\tcommand = 'grunt';\n\t}\n\treturn command;\n}\n\nclass FolderDetector {\n\n\tprivate fileWatcher: vscode.FileSystemWatcher | undefined;\n\tprivate promise: Thenable<vscode.Task[]> | undefined;\n\n\tconstructor(\n\t\tprivate _workspaceFolder: vscode.WorkspaceFolder,\n\t\tprivate _gruntCommand: Promise<string>) {\n\t}\n\n\tpublic get workspaceFolder(): vscode.WorkspaceFolder {\n\t\treturn this._workspaceFolder;\n\t}\n\n\tpublic isEnabled(): boolean {\n\t\treturn vscode.workspace.getConfiguration('grunt', this._workspaceFolder.uri).get<AutoDetect>('autoDetect') === 'on';\n\t}\n\n\tpublic start(): void {\n\t\tconst pattern = path.join(this._workspaceFolder.uri.fsPath, '{node_modules,[Gg]runtfile.js}');\n\t\tthis.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern);\n\t\tthis.fileWatcher.onDidChange(() => this.promise = undefined);\n\t\tthis.fileWatcher.onDidCreate(() => this.promise = undefined);\n\t\tthis.fileWatcher.onDidDelete(() => this.promise = undefined);\n\t}\n\n\tpublic async getTasks(): Promise<vscode.Task[]> {\n\t\tif (this.isEnabled()) {\n\t\t\tif (!this.promise) {\n\t\t\t\tthis.promise = this.computeTasks();\n\t\t\t}\n\t\t\treturn this.promise;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tpublic async getTask(_task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\tconst taskDefinition = <any>_task.definition;\n\t\tconst gruntTask = taskDefinition.task;\n\t\tif (gruntTask) {\n\t\t\tconst options: vscode.ShellExecutionOptions = { cwd: this.workspaceFolder.uri.fsPath };\n\t\t\tconst source = 'grunt';\n\t\t\tconst task = gruntTask.indexOf(' ') === -1\n\t\t\t\t? new vscode.Task(taskDefinition, this.workspaceFolder, gruntTask, source, new vscode.ShellExecution(`${await this._gruntCommand}`, [gruntTask, ...taskDefinition.args], options))\n\t\t\t\t: new vscode.Task(taskDefinition, this.workspaceFolder, gruntTask, source, new vscode.ShellExecution(`${await this._gruntCommand}`, [`\"${gruntTask}\"`, ...taskDefinition.args], options));\n\t\t\treturn task;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async computeTasks(): Promise<vscode.Task[]> {\n\t\tconst rootPath = this._workspaceFolder.uri.scheme === 'file' ? this._workspaceFolder.uri.fsPath : undefined;\n\t\tconst emptyTasks: vscode.Task[] = [];\n\t\tif (!rootPath) {\n\t\t\treturn emptyTasks;\n\t\t}\n\t\tif (!await exists(path.join(rootPath, 'gruntfile.js')) && !await exists(path.join(rootPath, 'Gruntfile.js'))) {\n\t\t\treturn emptyTasks;\n\t\t}\n\n\t\tconst commandLine = `${await this._gruntCommand} --help --no-color`;\n\t\ttry {\n\t\t\tconst { stdout, stderr } = await exec(commandLine, { cwd: rootPath });\n\t\t\tif (stderr) {\n\t\t\t\tgetOutputChannel().appendLine(stderr);\n\t\t\t\tshowError();\n\t\t\t}\n\t\t\tconst result: vscode.Task[] = [];\n\t\t\tif (stdout) {\n\t\t\t\t// grunt lists tasks as follows (description is wrapped into a new line if too long):\n\t\t\t\t// ...\n\t\t\t\t// Available tasks\n\t\t\t\t//         uglify  Minify files with UglifyJS. *\n\t\t\t\t//         jshint  Validate files with JSHint. *\n\t\t\t\t//           test  Alias for \"jshint\", \"qunit\" tasks.\n\t\t\t\t//        default  Alias for \"jshint\", \"qunit\", \"concat\", \"uglify\" tasks.\n\t\t\t\t//           long  Alias for \"eslint\", \"qunit\", \"browserify\", \"sass\",\n\t\t\t\t//                 \"autoprefixer\", \"uglify\", tasks.\n\t\t\t\t//\n\t\t\t\t// Tasks run in the order specified\n\n\t\t\t\tconst lines = stdout.split(/\\r{0,1}\\n/);\n\t\t\t\tlet tasksStart = false;\n\t\t\t\tlet tasksEnd = false;\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tif (line.length === 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!tasksStart && !tasksEnd) {\n\t\t\t\t\t\tif (line.indexOf('Available tasks') === 0) {\n\t\t\t\t\t\t\ttasksStart = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (tasksStart && !tasksEnd) {\n\t\t\t\t\t\tif (line.indexOf('Tasks run in the order specified') === 0) {\n\t\t\t\t\t\t\ttasksEnd = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst regExp = /^\\s*(\\S.*\\S)  \\S/g;\n\t\t\t\t\t\t\tconst matches = regExp.exec(line);\n\t\t\t\t\t\t\tif (matches && matches.length === 2) {\n\t\t\t\t\t\t\t\tconst name = matches[1];\n\t\t\t\t\t\t\t\tconst kind: GruntTaskDefinition = {\n\t\t\t\t\t\t\t\t\ttype: 'grunt',\n\t\t\t\t\t\t\t\t\ttask: name\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst source = 'grunt';\n\t\t\t\t\t\t\t\tconst options: vscode.ShellExecutionOptions = { cwd: this.workspaceFolder.uri.fsPath };\n\t\t\t\t\t\t\t\tconst task = name.indexOf(' ') === -1\n\t\t\t\t\t\t\t\t\t? new vscode.Task(kind, this.workspaceFolder, name, source, new vscode.ShellExecution(`${await this._gruntCommand} ${name}`, options))\n\t\t\t\t\t\t\t\t\t: new vscode.Task(kind, this.workspaceFolder, name, source, new vscode.ShellExecution(`${await this._gruntCommand} \"${name}\"`, options));\n\t\t\t\t\t\t\t\tresult.push(task);\n\t\t\t\t\t\t\t\tconst lowerCaseTaskName = name.toLowerCase();\n\t\t\t\t\t\t\t\tif (isBuildTask(lowerCaseTaskName)) {\n\t\t\t\t\t\t\t\t\ttask.group = vscode.TaskGroup.Build;\n\t\t\t\t\t\t\t\t} else if (isTestTask(lowerCaseTaskName)) {\n\t\t\t\t\t\t\t\t\ttask.group = vscode.TaskGroup.Test;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst channel = getOutputChannel();\n\t\t\tif (err.stderr) {\n\t\t\t\tchannel.appendLine(err.stderr);\n\t\t\t}\n\t\t\tif (err.stdout) {\n\t\t\t\tchannel.appendLine(err.stdout);\n\t\t\t}\n\t\t\tchannel.appendLine(vscode.l10n.t(\"Auto detecting Grunt for folder {0} failed with error: {1}', this.workspaceFolder.name, err.error ? err.error.toString() : 'unknown\"));\n\t\t\tshowError();\n\t\t\treturn emptyTasks;\n\t\t}\n\t}\n\n\tpublic dispose() {\n\t\tthis.promise = undefined;\n\t\tif (this.fileWatcher) {\n\t\t\tthis.fileWatcher.dispose();\n\t\t}\n\t}\n}\n\nclass TaskDetector {\n\n\tprivate taskProvider: vscode.Disposable | undefined;\n\tprivate detectors: Map<string, FolderDetector> = new Map();\n\n\tconstructor() {\n\t}\n\n\tpublic start(): void {\n\t\tconst folders = vscode.workspace.workspaceFolders;\n\t\tif (folders) {\n\t\t\tthis.updateWorkspaceFolders(folders, []);\n\t\t}\n\t\tvscode.workspace.onDidChangeWorkspaceFolders((event) => this.updateWorkspaceFolders(event.added, event.removed));\n\t\tvscode.workspace.onDidChangeConfiguration(this.updateConfiguration, this);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this.taskProvider) {\n\t\t\tthis.taskProvider.dispose();\n\t\t\tthis.taskProvider = undefined;\n\t\t}\n\t\tthis.detectors.clear();\n\t}\n\n\tprivate updateWorkspaceFolders(added: readonly vscode.WorkspaceFolder[], removed: readonly vscode.WorkspaceFolder[]): void {\n\t\tfor (const remove of removed) {\n\t\t\tconst detector = this.detectors.get(remove.uri.toString());\n\t\t\tif (detector) {\n\t\t\t\tdetector.dispose();\n\t\t\t\tthis.detectors.delete(remove.uri.toString());\n\t\t\t}\n\t\t}\n\t\tfor (const add of added) {\n\t\t\tconst detector = new FolderDetector(add, findGruntCommand(add.uri.fsPath));\n\t\t\tthis.detectors.set(add.uri.toString(), detector);\n\t\t\tif (detector.isEnabled()) {\n\t\t\t\tdetector.start();\n\t\t\t}\n\t\t}\n\t\tthis.updateProvider();\n\t}\n\n\tprivate updateConfiguration(): void {\n\t\tfor (const detector of this.detectors.values()) {\n\t\t\tdetector.dispose();\n\t\t\tthis.detectors.delete(detector.workspaceFolder.uri.toString());\n\t\t}\n\t\tconst folders = vscode.workspace.workspaceFolders;\n\t\tif (folders) {\n\t\t\tfor (const folder of folders) {\n\t\t\t\tif (!this.detectors.has(folder.uri.toString())) {\n\t\t\t\t\tconst detector = new FolderDetector(folder, findGruntCommand(folder.uri.fsPath));\n\t\t\t\t\tthis.detectors.set(folder.uri.toString(), detector);\n\t\t\t\t\tif (detector.isEnabled()) {\n\t\t\t\t\t\tdetector.start();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.updateProvider();\n\t}\n\n\tprivate updateProvider(): void {\n\t\tif (!this.taskProvider && this.detectors.size > 0) {\n\t\t\tconst thisCapture = this;\n\t\t\tthis.taskProvider = vscode.tasks.registerTaskProvider('grunt', {\n\t\t\t\tprovideTasks: (): Promise<vscode.Task[]> => {\n\t\t\t\t\treturn thisCapture.getTasks();\n\t\t\t\t},\n\t\t\t\tresolveTask(_task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\t\t\t\treturn thisCapture.getTask(_task);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse if (this.taskProvider && this.detectors.size === 0) {\n\t\t\tthis.taskProvider.dispose();\n\t\t\tthis.taskProvider = undefined;\n\t\t}\n\t}\n\n\tpublic getTasks(): Promise<vscode.Task[]> {\n\t\treturn this.computeTasks();\n\t}\n\n\tprivate computeTasks(): Promise<vscode.Task[]> {\n\t\tif (this.detectors.size === 0) {\n\t\t\treturn Promise.resolve([]);\n\t\t} else if (this.detectors.size === 1) {\n\t\t\treturn this.detectors.values().next().value!.getTasks();\n\t\t} else {\n\t\t\tconst promises: Promise<vscode.Task[]>[] = [];\n\t\t\tfor (const detector of this.detectors.values()) {\n\t\t\t\tpromises.push(detector.getTasks().then((value) => value, () => []));\n\t\t\t}\n\t\t\treturn Promise.all(promises).then((values) => {\n\t\t\t\tconst result: vscode.Task[] = [];\n\t\t\t\tfor (const tasks of values) {\n\t\t\t\t\tif (tasks && tasks.length > 0) {\n\t\t\t\t\t\tresult.push(...tasks);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic async getTask(task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\tif (this.detectors.size === 0) {\n\t\t\treturn undefined;\n\t\t} else if (this.detectors.size === 1) {\n\t\t\treturn this.detectors.values().next().value!.getTask(task);\n\t\t} else {\n\t\t\tif ((task.scope === vscode.TaskScope.Workspace) || (task.scope === vscode.TaskScope.Global)) {\n\t\t\t\treturn undefined;\n\t\t\t} else if (task.scope) {\n\t\t\t\tconst detector = this.detectors.get(task.scope.uri.toString());\n\t\t\t\tif (detector) {\n\t\t\t\t\treturn detector.getTask(task);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nlet detector: TaskDetector;\nexport function activate(_context: vscode.ExtensionContext): void {\n\tdetector = new TaskDetector();\n\tdetector.start();\n}\n\nexport function deactivate(): void {\n\tdetector.dispose();\n}\n"
  },
  {
    "path": "extensions/grunt/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/gulp/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/gulp/.vscodeignore",
    "content": "src/**\ntsconfig.json\nout/**\nextension.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/gulp/README.md",
    "content": "# Gulp - Automate and enhance your workflow\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension supports running [Gulp](https://gulpjs.com/) tasks defined in a `gulpfile.{js,ts}` file as [VS Code tasks](https://code.visualstudio.com/docs/editor/tasks). Gulp tasks with the name 'build', 'compile', or 'watch' are treated as build tasks.\n\nTo run Gulp tasks, use the **Tasks** menu.\n\n## Settings\n\n- `gulp.autoDetect` - Enable detecting tasks from `gulpfile.{js,ts}` files, the default is `on`.\n"
  },
  {
    "path": "extensions/gulp/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\tmain: './src/main.ts',\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t}\n});\n"
  },
  {
    "path": "extensions/gulp/package.json",
    "content": "{\n  \"name\": \"gulp\",\n  \"publisher\": \"vscode\",\n  \"description\": \"%description%\",\n  \"displayName\": \"%displayName%\",\n  \"version\": \"1.0.0\",\n  \"icon\": \"images/gulp.png\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\n    \"Other\"\n  ],\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:gulp\",\n    \"watch\": \"gulp watch-extension:gulp\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"main\": \"./out/main\",\n  \"activationEvents\": [\n    \"onTaskType:gulp\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"configuration\": {\n      \"id\": \"gulp\",\n      \"type\": \"object\",\n      \"title\": \"Gulp\",\n      \"properties\": {\n        \"gulp.autoDetect\": {\n          \"scope\": \"application\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"off\",\n            \"on\"\n          ],\n          \"default\": \"off\",\n          \"description\": \"%config.gulp.autoDetect%\"\n        }\n      }\n    },\n    \"taskDefinitions\": [\n      {\n        \"type\": \"gulp\",\n        \"required\": [\n          \"task\"\n        ],\n        \"properties\": {\n          \"task\": {\n            \"type\": \"string\",\n            \"description\": \"%gulp.taskDefinition.type.description%\"\n          },\n          \"file\": {\n            \"type\": \"string\",\n            \"description\": \"%gulp.taskDefinition.file.description%\"\n          }\n        },\n        \"when\": \"shellExecutionSupported\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/gulp/package.nls.json",
    "content": "{\n\t\"description\": \"Extension to add Gulp capabilities to VSCode.\",\n\t\"displayName\": \"Gulp support for VSCode\",\n\t\"config.gulp.autoDetect\": \"Controls enablement of Gulp task detection. Gulp task detection can cause files in any open workspace to be executed.\",\n\t\"gulp.taskDefinition.type.description\": \"The Gulp task to customize.\",\n\t\"gulp.taskDefinition.file.description\": \"The Gulp file that provides the task. Can be omitted.\"\n}\n"
  },
  {
    "path": "extensions/gulp/src/main.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as cp from 'child_process';\nimport * as vscode from 'vscode';\n\n\ntype AutoDetect = 'on' | 'off';\n\n/**\n * Check if the given filename is a file.\n *\n * If returns false in case the file does not exist or\n * the file stats cannot be accessed/queried or it\n * is no file at all.\n *\n * @param filename\n *   the filename to the checked\n * @returns\n *   true in case the file exists, in any other case false.\n */\nasync function exists(filename: string): Promise<boolean> {\n\ttry {\n\n\t\tif ((await fs.promises.stat(filename)).isFile()) {\n\t\t\treturn true;\n\t\t}\n\t} catch (ex) {\n\t\t// In case requesting the file statistics fail.\n\t\t// we assume it does not exist.\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\nfunction exec(command: string, options: cp.ExecOptions): Promise<{ stdout: string; stderr: string }> {\n\treturn new Promise<{ stdout: string; stderr: string }>((resolve, reject) => {\n\t\tcp.exec(command, options, (error, stdout, stderr) => {\n\t\t\tif (error) {\n\t\t\t\treject({ error, stdout, stderr });\n\t\t\t}\n\t\t\tresolve({ stdout, stderr });\n\t\t});\n\t});\n}\n\nconst buildNames: string[] = ['build', 'compile', 'watch'];\nfunction isBuildTask(name: string): boolean {\n\tfor (const buildName of buildNames) {\n\t\tif (name.indexOf(buildName) !== -1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nconst testNames: string[] = ['test'];\nfunction isTestTask(name: string): boolean {\n\tfor (const testName of testNames) {\n\t\tif (name.indexOf(testName) !== -1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nlet _channel: vscode.OutputChannel;\nfunction getOutputChannel(): vscode.OutputChannel {\n\tif (!_channel) {\n\t\t_channel = vscode.window.createOutputChannel('Gulp Auto Detection');\n\t}\n\treturn _channel;\n}\n\nfunction showError() {\n\tvscode.window.showWarningMessage(vscode.l10n.t(\"Problem finding gulp tasks. See the output for more information.\"),\n\t\tvscode.l10n.t(\"Go to output\")).then((choice) => {\n\t\t\tif (choice !== undefined) {\n\t\t\t\t_channel.show(true);\n\t\t\t}\n\t\t});\n}\n\nasync function findGulpCommand(rootPath: string): Promise<string> {\n\tconst platform = process.platform;\n\n\tif (platform === 'win32' && await exists(path.join(rootPath, 'node_modules', '.bin', 'gulp.cmd'))) {\n\t\tconst globalGulp = path.join(process.env.APPDATA ? process.env.APPDATA : '', 'npm', 'gulp.cmd');\n\t\tif (await exists(globalGulp)) {\n\t\t\treturn `\"${globalGulp}\"`;\n\t\t}\n\n\t\treturn path.join('.', 'node_modules', '.bin', 'gulp.cmd');\n\n\t}\n\n\tif ((platform === 'linux' || platform === 'darwin') && await exists(path.join(rootPath, 'node_modules', '.bin', 'gulp'))) {\n\t\treturn path.join('.', 'node_modules', '.bin', 'gulp');\n\t}\n\n\treturn 'gulp';\n}\n\ninterface GulpTaskDefinition extends vscode.TaskDefinition {\n\ttask: string;\n\tfile?: string;\n}\n\nclass FolderDetector {\n\n\tprivate fileWatcher: vscode.FileSystemWatcher | undefined;\n\tprivate promise: Thenable<vscode.Task[]> | undefined;\n\n\tconstructor(\n\t\tprivate _workspaceFolder: vscode.WorkspaceFolder,\n\t\tprivate _gulpCommand: Promise<string>) {\n\t}\n\n\tpublic get workspaceFolder(): vscode.WorkspaceFolder {\n\t\treturn this._workspaceFolder;\n\t}\n\n\tpublic isEnabled(): boolean {\n\t\treturn vscode.workspace.getConfiguration('gulp', this._workspaceFolder.uri).get<AutoDetect>('autoDetect') === 'on';\n\t}\n\n\tpublic start(): void {\n\t\tconst pattern = path.join(this._workspaceFolder.uri.fsPath, '{node_modules,gulpfile{.babel.js,.esm.js,.js,.mjs,.cjs,.ts}}');\n\t\tthis.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern);\n\t\tthis.fileWatcher.onDidChange(() => this.promise = undefined);\n\t\tthis.fileWatcher.onDidCreate(() => this.promise = undefined);\n\t\tthis.fileWatcher.onDidDelete(() => this.promise = undefined);\n\t}\n\n\tpublic async getTasks(): Promise<vscode.Task[]> {\n\t\tif (!this.isEnabled()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!this.promise) {\n\t\t\tthis.promise = this.computeTasks();\n\t\t}\n\n\t\treturn this.promise;\n\t}\n\n\tpublic async getTask(_task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\tconst gulpTask = (<any>_task.definition).task;\n\t\tif (gulpTask) {\n\t\t\tconst kind: GulpTaskDefinition = (<any>_task.definition);\n\t\t\tconst options: vscode.ShellExecutionOptions = { cwd: this.workspaceFolder.uri.fsPath };\n\t\t\tconst task = new vscode.Task(kind, this.workspaceFolder, gulpTask, 'gulp', new vscode.ShellExecution(await this._gulpCommand, [gulpTask], options));\n\t\t\treturn task;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Searches for a gulp entry point inside the given folder.\n\t *\n\t * Typically the entry point is a file named \"gulpfile.js\"\n\t *\n\t * It can also be a transposed gulp entry points, like gulp.babel.js or gulp.esm.js\n\t *\n\t * Additionally recent node version prefer the .mjs or .cjs extension over the .js.\n\t *\n\t * @param root\n\t *   the folder which should be checked.\n\t */\n\tprivate async hasGulpfile(root: string): Promise<boolean | undefined> {\n\n\t\tfor (const filename of await fs.promises.readdir(root)) {\n\n\t\t\tconst ext = path.extname(filename);\n\t\t\tif (ext !== '.js' && ext !== '.mjs' && ext !== '.cjs' && ext !== '.ts') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!exists(filename)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst basename = path.basename(filename, ext).toLowerCase();\n\t\t\tif (basename === 'gulpfile') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (basename === 'gulpfile.esm') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (basename === 'gulpfile.babel') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async computeTasks(): Promise<vscode.Task[]> {\n\t\tconst rootPath = this._workspaceFolder.uri.scheme === 'file' ? this._workspaceFolder.uri.fsPath : undefined;\n\t\tconst emptyTasks: vscode.Task[] = [];\n\t\tif (!rootPath) {\n\t\t\treturn emptyTasks;\n\t\t}\n\n\t\tif (!await this.hasGulpfile(rootPath)) {\n\t\t\treturn emptyTasks;\n\t\t}\n\n\t\tconst commandLine = `${await this._gulpCommand} --tasks-simple --no-color`;\n\t\ttry {\n\t\t\tconst { stdout, stderr } = await exec(commandLine, { cwd: rootPath });\n\t\t\tif (stderr && stderr.length > 0) {\n\t\t\t\t// Filter out \"No license field\"\n\t\t\t\tconst errors = stderr.split('\\n');\n\t\t\t\terrors.pop(); // The last line is empty.\n\t\t\t\tif (!errors.every(value => value.indexOf('No license field') >= 0)) {\n\t\t\t\t\tgetOutputChannel().appendLine(stderr);\n\t\t\t\t\tshowError();\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst result: vscode.Task[] = [];\n\t\t\tif (stdout) {\n\t\t\t\tconst lines = stdout.split(/\\r{0,1}\\n/);\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tif (line.length === 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst kind: GulpTaskDefinition = {\n\t\t\t\t\t\ttype: 'gulp',\n\t\t\t\t\t\ttask: line\n\t\t\t\t\t};\n\t\t\t\t\tconst options: vscode.ShellExecutionOptions = { cwd: this.workspaceFolder.uri.fsPath };\n\t\t\t\t\tconst task = new vscode.Task(kind, this.workspaceFolder, line, 'gulp', new vscode.ShellExecution(await this._gulpCommand, [line], options));\n\t\t\t\t\tresult.push(task);\n\t\t\t\t\tconst lowerCaseLine = line.toLowerCase();\n\t\t\t\t\tif (isBuildTask(lowerCaseLine)) {\n\t\t\t\t\t\ttask.group = vscode.TaskGroup.Build;\n\t\t\t\t\t} else if (isTestTask(lowerCaseLine)) {\n\t\t\t\t\t\ttask.group = vscode.TaskGroup.Test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst channel = getOutputChannel();\n\t\t\tif (err.stderr) {\n\t\t\t\tchannel.appendLine(err.stderr);\n\t\t\t}\n\t\t\tif (err.stdout) {\n\t\t\t\tchannel.appendLine(err.stdout);\n\t\t\t}\n\t\t\tchannel.appendLine(vscode.l10n.t(\"Auto detecting gulp for folder {0} failed with error: {1}', this.workspaceFolder.name, err.error ? err.error.toString() : 'unknown\"));\n\t\t\tshowError();\n\t\t\treturn emptyTasks;\n\t\t}\n\t}\n\n\tpublic dispose() {\n\t\tthis.promise = undefined;\n\t\tif (this.fileWatcher) {\n\t\t\tthis.fileWatcher.dispose();\n\t\t}\n\t}\n}\n\nclass TaskDetector {\n\n\tprivate taskProvider: vscode.Disposable | undefined;\n\tprivate detectors: Map<string, FolderDetector> = new Map();\n\n\tconstructor() {\n\t}\n\n\tpublic start(): void {\n\t\tconst folders = vscode.workspace.workspaceFolders;\n\t\tif (folders) {\n\t\t\tthis.updateWorkspaceFolders(folders, []);\n\t\t}\n\t\tvscode.workspace.onDidChangeWorkspaceFolders((event) => this.updateWorkspaceFolders(event.added, event.removed));\n\t\tvscode.workspace.onDidChangeConfiguration(this.updateConfiguration, this);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this.taskProvider) {\n\t\t\tthis.taskProvider.dispose();\n\t\t\tthis.taskProvider = undefined;\n\t\t}\n\t\tthis.detectors.clear();\n\t}\n\n\tprivate updateWorkspaceFolders(added: readonly vscode.WorkspaceFolder[], removed: readonly vscode.WorkspaceFolder[]): void {\n\t\tfor (const remove of removed) {\n\t\t\tconst detector = this.detectors.get(remove.uri.toString());\n\t\t\tif (detector) {\n\t\t\t\tdetector.dispose();\n\t\t\t\tthis.detectors.delete(remove.uri.toString());\n\t\t\t}\n\t\t}\n\t\tfor (const add of added) {\n\t\t\tconst detector = new FolderDetector(add, findGulpCommand(add.uri.fsPath));\n\t\t\tthis.detectors.set(add.uri.toString(), detector);\n\t\t\tif (detector.isEnabled()) {\n\t\t\t\tdetector.start();\n\t\t\t}\n\t\t}\n\t\tthis.updateProvider();\n\t}\n\n\tprivate updateConfiguration(): void {\n\t\tfor (const detector of this.detectors.values()) {\n\t\t\tdetector.dispose();\n\t\t\tthis.detectors.delete(detector.workspaceFolder.uri.toString());\n\t\t}\n\t\tconst folders = vscode.workspace.workspaceFolders;\n\t\tif (folders) {\n\t\t\tfor (const folder of folders) {\n\t\t\t\tif (!this.detectors.has(folder.uri.toString())) {\n\t\t\t\t\tconst detector = new FolderDetector(folder, findGulpCommand(folder.uri.fsPath));\n\t\t\t\t\tthis.detectors.set(folder.uri.toString(), detector);\n\t\t\t\t\tif (detector.isEnabled()) {\n\t\t\t\t\t\tdetector.start();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.updateProvider();\n\t}\n\n\tprivate updateProvider(): void {\n\t\tif (!this.taskProvider && this.detectors.size > 0) {\n\t\t\tconst thisCapture = this;\n\t\t\tthis.taskProvider = vscode.tasks.registerTaskProvider('gulp', {\n\t\t\t\tprovideTasks(): Promise<vscode.Task[]> {\n\t\t\t\t\treturn thisCapture.getTasks();\n\t\t\t\t},\n\t\t\t\tresolveTask(_task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\t\t\t\treturn thisCapture.getTask(_task);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse if (this.taskProvider && this.detectors.size === 0) {\n\t\t\tthis.taskProvider.dispose();\n\t\t\tthis.taskProvider = undefined;\n\t\t}\n\t}\n\n\tpublic getTasks(): Promise<vscode.Task[]> {\n\t\treturn this.computeTasks();\n\t}\n\n\tprivate computeTasks(): Promise<vscode.Task[]> {\n\t\tif (this.detectors.size === 0) {\n\t\t\treturn Promise.resolve([]);\n\t\t} else if (this.detectors.size === 1) {\n\t\t\treturn this.detectors.values().next().value!.getTasks();\n\t\t} else {\n\t\t\tconst promises: Promise<vscode.Task[]>[] = [];\n\t\t\tfor (const detector of this.detectors.values()) {\n\t\t\t\tpromises.push(detector.getTasks().then((value) => value, () => []));\n\t\t\t}\n\t\t\treturn Promise.all(promises).then((values) => {\n\t\t\t\tconst result: vscode.Task[] = [];\n\t\t\t\tfor (const tasks of values) {\n\t\t\t\t\tif (tasks && tasks.length > 0) {\n\t\t\t\t\t\tresult.push(...tasks);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic async getTask(task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\tif (this.detectors.size === 0) {\n\t\t\treturn undefined;\n\t\t} else if (this.detectors.size === 1) {\n\t\t\treturn this.detectors.values().next().value!.getTask(task);\n\t\t} else {\n\t\t\tif ((task.scope === vscode.TaskScope.Workspace) || (task.scope === vscode.TaskScope.Global)) {\n\t\t\t\t// Not supported, we don't have enough info to create the task.\n\t\t\t\treturn undefined;\n\t\t\t} else if (task.scope) {\n\t\t\t\tconst detector = this.detectors.get(task.scope.uri.toString());\n\t\t\t\tif (detector) {\n\t\t\t\t\treturn detector.getTask(task);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nlet detector: TaskDetector;\nexport function activate(_context: vscode.ExtensionContext): void {\n\tdetector = new TaskDetector();\n\tdetector.start();\n}\n\nexport function deactivate(): void {\n\tdetector.dispose();\n}\n"
  },
  {
    "path": "extensions/gulp/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/handlebars/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/handlebars/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"daaain/Handlebars\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/daaain/Handlebars\",\n\t\t\t\t\t\"commitHash\": \"85a153a6f759df4e8da7533e1b3651f007867c51\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"-- Credits\",\n\t\t\t\t\"\",\n\t\t\t\t\"Adapted from the great sublime-text-handlebars package by Nicholas Westlake.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Thanks a lot to all the generous contributors (in alphabetical order): @bittersweetryan, @bradcliffe, @calumbrodie, @duncanbeevers, @hlvnst, @jonschlinkert, @Krutius, @samselikoff, @utkarshkukreti, @zeppelin\",\n\t\t\t\t\"\",\n\t\t\t\t\"-- License\",\n\t\t\t\t\"\",\n\t\t\t\t\"(The MIT License)\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) daaain/Handlebars project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t\t],\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.8.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/handlebars/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [ \"{{!--\", \"--}}\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"<!--\", \"-->\"],\n\t\t[\"<\", \">\"],\n\t\t[\"{{\", \"}}\"],\n\t\t[\"{{{\", \"}}}\"],\n\t\t[\"{\", \"}\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\"},\n\t\t{ \"open\": \"[\", \"close\": \"]\"},\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\" }\n\t],\n\t\"surroundingPairs\": [\n\t\t{ \"open\": \"'\", \"close\": \"'\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\" },\n\t\t{ \"open\": \"<\", \"close\": \">\" },\n\t\t{ \"open\": \"{\", \"close\": \"}\" }\n\t],\n\t\"wordPattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\!\\\\@\\\\$\\\\^\\\\&\\\\*\\\\(\\\\)\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>\\\\/\\\\s]+)\",\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t\"beforeText\": { \"pattern\": \"<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))([_:\\\\w][_:\\\\w-.\\\\d]*)([^/>]*(?!\\\\/)>)[^<]*$\", \"flags\": \"i\" },\n\t\t\t\"afterText\": { \"pattern\": \"^<\\\\/([_:\\\\w][_:\\\\w-.\\\\d]*)\\\\s*>\", \"flags\": \"i\" },\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"beforeText\": { \"pattern\": \"<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))(\\\\w[\\\\w\\\\d]*)([^/>]*(?!\\\\/)>)[^<]*$\", \"flags\": \"i\" },\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indent\"\n\t\t\t}\n\t\t}\n\t],\n}\n"
  },
  {
    "path": "extensions/handlebars/package.json",
    "content": "{\n  \"name\": \"handlebars\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin daaain/Handlebars grammars/Handlebars.json ./syntaxes/Handlebars.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"extensionKind\": [\n    \"ui\",\n    \"workspace\"\n  ],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"handlebars\",\n        \"extensions\": [\n          \".handlebars\",\n          \".hbs\",\n          \".hjs\"\n        ],\n        \"aliases\": [\n          \"Handlebars\",\n          \"handlebars\"\n        ],\n        \"mimetypes\": [\n          \"text/x-handlebars-template\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"handlebars\",\n        \"scopeName\": \"text.html.handlebars\",\n        \"path\": \"./syntaxes/Handlebars.tmLanguage.json\"\n      }\n    ],\n    \"htmlLanguageParticipants\": [\n      {\n        \"languageId\": \"handlebars\",\n        \"autoInsert\": true\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/handlebars/package.nls.json",
    "content": "{\n\t\"displayName\": \"Handlebars Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Handlebars files.\"\n}\n"
  },
  {
    "path": "extensions/handlebars/syntaxes/Handlebars.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/daaain/Handlebars/blob/master/grammars/Handlebars.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/daaain/Handlebars/commit/85a153a6f759df4e8da7533e1b3651f007867c51\",\n\t\"name\": \"Handlebars\",\n\t\"scopeName\": \"text.html.handlebars\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#yfm\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#extends\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block_comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block_helper\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#end_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#else_token\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#partial_and_var\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#inline_script\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#html_tags\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"text.html.basic\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"html_tags\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)([a-zA-Z0-9:-]+)(?=[^>]*></\\\\2>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>(<)/)(\\\\2)(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.scope.between-tag-pair.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.any.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<\\\\?)(xml)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.xml.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\?>)\",\n\t\t\t\t\t\"name\": \"meta.tag.preprocessor.xml.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_generic_attribute\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"<!--\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"--\\\\s*>\",\n\t\t\t\t\t\"name\": \"comment.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.bad-comments-or-CDATA.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"<!\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"name\": \"meta.tag.sgml.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(DOCTYPE|doctype)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.doctype.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=>)\",\n\t\t\t\t\t\t\t\"name\": \"meta.tag.sgml.doctype.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\"[^\\\">]*\\\"\",\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.doctype.identifiers-and-DTDs.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\[CDATA\\\\[\",\n\t\t\t\t\t\t\t\"end\": \"]](?=>)\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.inline-data.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\s*)(?!--|>)\\\\S(\\\\s*)\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.bad-comments-or-CDATA.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:^\\\\s+)?(<)((?i:style))\\\\b(?![^>]*/>)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.style.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(</)((?i:style))(>)(?:\\\\s*\\\\n)?\",\n\t\t\t\t\t\"name\": \"source.css.embedded.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(>)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=</(?i:style))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:^\\\\s+)?(<)((?i:script))\\\\b(?![^>]*/>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.script.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=</(script|SCRIPT))(>)(?:\\\\s*\\\\n)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"source.js.embedded.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<!</(?:script|SCRIPT))(>)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.script.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(</)((?i:script))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(//).*?((?=</script)|$\\\\n?)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\*/|(?=</script)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</?)((?i:body|head|html)\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.structure.any.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"name\": \"meta.tag.structure.any.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</?)((?i:address|blockquote|dd|div|header|section|footer|aside|nav|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.block.any.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"name\": \"meta.tag.block.any.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.inline.any.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((?: ?/)?>)\",\n\t\t\t\t\t\"name\": \"meta.tag.inline.any.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</?)([a-zA-Z0-9:-]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.other.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"name\": \"meta.tag.other.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</?)([a-zA-Z0-9{}:-]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.tokenised.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"name\": \"meta.tag.tokenised.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#entities\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<>\",\n\t\t\t\t\t\"name\": \"invalid.illegal.incomplete.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<\",\n\t\t\t\t\t\"name\": \"invalid.illegal.bad-angle-bracket.html\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"entities\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"constant.character.entity.html\",\n\t\t\t\t\t\"match\": \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.bad-ampersand.html\",\n\t\t\t\t\t\"match\": \"&\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"end_block\": {\n\t\t\t\"begin\": \"(\\\\{\\\\{)(~?/)([a-zA-Z0-9/_\\\\.-]+)\\\\s*\",\n\t\t\t\"end\": \"(~?\\\\}\\\\})\",\n\t\t\t\"name\": \"meta.function.block.end.handlebars\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars keyword.control\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": []\n\t\t},\n\t\t\"yfm\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"begin\": \"(?<!\\\\s)---\\\\n$\",\n\t\t\t\t\t\"end\": \"^---\\\\s\",\n\t\t\t\t\t\"name\": \"markup.raw.yaml.front-matter\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.annotation.handlebars\",\n\t\t\t\t\t\t\t\"match\": \"@\\\\w*\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"begin\": \"\\\\{\\\\{!\",\n\t\t\t\t\t\"end\": \"\\\\}\\\\}\",\n\t\t\t\t\t\"name\": \"comment.block.handlebars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"begin\": \"<!--\",\n\t\t\t\t\t\"end\": \"-{2,3}\\\\s*>\",\n\t\t\t\t\t\"name\": \"comment.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.bad-comments-or-CDATA.html\",\n\t\t\t\t\t\t\t\"match\": \"--\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.annotation.handlebars\",\n\t\t\t\t\t\t\t\"match\": \"@\\\\w*\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"begin\": \"\\\\{\\\\{!--\",\n\t\t\t\t\t\"end\": \"--\\\\}\\\\}\",\n\t\t\t\t\t\"name\": \"comment.block.handlebars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"begin\": \"<!--\",\n\t\t\t\t\t\"end\": \"-{2,3}\\\\s*>\",\n\t\t\t\t\t\"name\": \"comment.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.bad-comments-or-CDATA.html\",\n\t\t\t\t\t\t\t\"match\": \"--\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_helper\": {\n\t\t\t\"begin\": \"(\\\\{\\\\{)(~?\\\\#)([-a-zA-Z0-9_\\\\./>]+)\\\\s?(@?[-a-zA-Z0-9_\\\\./]+)*\\\\s?(@?[-a-zA-Z0-9_\\\\./]+)*\\\\s?(@?[-a-zA-Z0-9_\\\\./]+)*\",\n\t\t\t\"end\": \"(~?\\\\}\\\\})\",\n\t\t\t\"name\": \"meta.function.block.start.handlebars\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"variable.parameter.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#handlebars_attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-single-quoted\": {\n\t\t\t\"begin\": \"'\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"name\": \"string.quoted.single.handlebars\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped-single-quote\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_helper\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#else_token\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#end_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#partial_and_var\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-single-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-double-quoted\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"escaped-single-quote\": {\n\t\t\t\"name\": \"constant.character.escape.js\",\n\t\t\t\"match\": \"\\\\\\\\'\"\n\t\t},\n\t\t\"escaped-double-quote\": {\n\t\t\t\"name\": \"constant.character.escape.js\",\n\t\t\t\"match\": \"\\\\\\\\\\\"\"\n\t\t},\n\t\t\"partial_and_var\": {\n\t\t\t\"begin\": \"(\\\\{\\\\{~?\\\\{*(>|!<)*)\\\\s*(@?[-a-zA-Z0-9$_\\\\./]+)*\",\n\t\t\t\"end\": \"(~?\\\\}\\\\}\\\\}*)\",\n\t\t\t\"name\": \"meta.function.inline.other.handlebars\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#handlebars_attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"handlebars_attribute_name\": {\n\t\t\t\"begin\": \"\\\\b([-a-zA-Z0-9_\\\\.]+)\\\\b=\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.parameter.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?='|\\\"|)\",\n\t\t\t\"name\": \"entity.other.attribute-name.handlebars\"\n\t\t},\n\t\t\"handlebars_attribute_value\": {\n\t\t\t\"begin\": \"([-a-zA-Z0-9_\\\\./]+)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.parameter.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"('|\\\"|)\",\n\t\t\t\"name\": \"entity.other.attribute-value.handlebars\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"handlebars_attribute\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#handlebars_attribute_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#handlebars_attribute_value\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"extends\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"end\": \"(\\\\}\\\\})\",\n\t\t\t\t\t\"begin\": \"(\\\\{\\\\{!<)\\\\s([-a-zA-Z0-9_\\\\./]+)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.handlebars\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.class.handlebars\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.handlebars\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.preprocessor.handlebars\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"else_token\": {\n\t\t\t\"begin\": \"(\\\\{\\\\{)(~?else)(@?\\\\s(if)\\\\s([-a-zA-Z0-9_\\\\.\\\\(\\\\s\\\\)/]+))?\",\n\t\t\t\"end\": \"(~?\\\\}\\\\}\\\\}*)\",\n\t\t\t\"name\": \"meta.function.inline.else.handlebars\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.handlebars\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.handlebars\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"string-double-quoted\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"name\": \"string.quoted.double.handlebars\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped-double-quote\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_helper\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#else_token\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#end_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#partial_and_var\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_script\": {\n\t\t\t\"begin\": \"(?:^\\\\s+)?(<)((?i:script))\\\\b(?:.*(type)=([\\\"'](?:text/x-handlebars-template|text/x-handlebars|text/template|x-tmpl-handlebars)[\\\"']))(?![^>]*/>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.script.html\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=</(script|SCRIPT))(>)(?:\\\\s*\\\\n)?\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"source.handlebars.embedded.html\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag-stuff\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!</(?:script|SCRIPT))(>)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.script.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(</)((?i:script))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#end_block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#else_token\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#partial_and_var\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#html_tags\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag_generic_attribute\": {\n\t\t\t\"begin\": \"\\\\b([a-zA-Z0-9_-]+)\\\\b\\\\s*(=)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.generic.html\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"name\": \"entity.other.attribute-name.html\",\n\t\t\t\"end\": \"(?<='|\\\"|)\"\n\t\t},\n\t\t\"tag_id_attribute\": {\n\t\t\t\"begin\": \"\\\\b(id)\\\\b\\\\s*(=)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.id.html\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<='|\\\"|)\",\n\t\t\t\"name\": \"meta.attribute-with-value.id.html\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag-stuff\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_id_attribute\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_generic_attribute\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_helper\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#end_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#else_token\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#partial_and_var\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/hlsl/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/hlsl/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"shaders-tmLanguage\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/tgjones/shaders-tmLanguage\",\n\t\t\t\t\t\"commitHash\": \"87c0dca3a39170dbd7ee7e277db4f915fb2de14a\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/hlsl/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [ \"/*\", \"*/\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"]\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"]\n\t]\n}"
  },
  {
    "path": "extensions/hlsl/package.json",
    "content": "{\n  \"name\": \"hlsl\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin tgjones/shaders-tmLanguage grammars/hlsl.json ./syntaxes/hlsl.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"hlsl\",\n        \"extensions\": [\n          \".hlsl\",\n          \".hlsli\",\n          \".fx\",\n          \".fxh\",\n          \".vsh\",\n          \".psh\",\n          \".cginc\",\n          \".compute\"\n        ],\n        \"aliases\": [\n          \"HLSL\",\n          \"hlsl\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"hlsl\",\n        \"path\": \"./syntaxes/hlsl.tmLanguage.json\",\n        \"scopeName\": \"source.hlsl\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/hlsl/package.nls.json",
    "content": "{\n\t\"displayName\": \"HLSL Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in HLSL files.\"\n}\n"
  },
  {
    "path": "extensions/hlsl/syntaxes/hlsl.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/tgjones/shaders-tmLanguage/blob/master/grammars/hlsl.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/tgjones/shaders-tmLanguage/commit/87c0dca3a39170dbd7ee7e277db4f915fb2de14a\",\n\t\"name\": \"HLSL\",\n\t\"scopeName\": \"source.hlsl\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"name\": \"comment.line.block.hlsl\",\n\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\"end\": \"\\\\*/\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"comment.line.double-slash.hlsl\",\n\t\t\t\"begin\": \"//\",\n\t\t\t\"end\": \"$\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"constant.numeric.decimal.hlsl\",\n\t\t\t\"match\": \"\\\\b[0-9]+\\\\.[0-9]*(F|f)?\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"constant.numeric.decimal.hlsl\",\n\t\t\t\"match\": \"(\\\\.([0-9]+)(F|f)?)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"constant.numeric.decimal.hlsl\",\n\t\t\t\"match\": \"\\\\b([0-9]+(F|f)?)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"constant.numeric.hex.hlsl\",\n\t\t\t\"match\": \"\\\\b(0(x|X)[0-9a-fA-F]+)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"constant.language.hlsl\",\n\t\t\t\"match\": \"\\\\b(false|true)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"keyword.preprocessor.hlsl\",\n\t\t\t\"match\": \"^\\\\s*#\\\\s*(define|elif|else|endif|ifdef|ifndef|if|undef|include|line|error|pragma)\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"keyword.control.hlsl\",\n\t\t\t\"match\": \"\\\\b(break|case|continue|default|discard|do|else|for|if|return|switch|while)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"keyword.control.fx.hlsl\",\n\t\t\t\"match\": \"\\\\b(compile)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"keyword.typealias.hlsl\",\n\t\t\t\"match\": \"\\\\b(typedef)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.type.basic.hlsl\",\n\t\t\t\"match\": \"\\\\b(bool([1-4](x[1-4])?)?|double([1-4](x[1-4])?)?|dword|float([1-4](x[1-4])?)?|half([1-4](x[1-4])?)?|int([1-4](x[1-4])?)?|matrix|min10float([1-4](x[1-4])?)?|min12int([1-4](x[1-4])?)?|min16float([1-4](x[1-4])?)?|min16int([1-4](x[1-4])?)?|min16uint([1-4](x[1-4])?)?|unsigned|uint([1-4](x[1-4])?)?|vector|void)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.function.hlsl\",\n\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)(?=[\\\\s]*\\\\()\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.variable.semantic.hlsl\",\n\t\t\t\"match\": \"(?<=\\\\:\\\\s|\\\\:)(?i:BINORMAL[0-9]*|BLENDINDICES[0-9]*|BLENDWEIGHT[0-9]*|COLOR[0-9]*|NORMAL[0-9]*|POSITIONT|POSITION|PSIZE[0-9]*|TANGENT[0-9]*|TEXCOORD[0-9]*|FOG|TESSFACTOR[0-9]*|VFACE|VPOS|DEPTH[0-9]*)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.variable.semantic.sm4.hlsl\",\n\t\t\t\"match\": \"(?<=\\\\:\\\\s|\\\\:)(?i:SV_ClipDistance[0-9]*|SV_CullDistance[0-9]*|SV_Coverage|SV_Depth|SV_DepthGreaterEqual[0-9]*|SV_DepthLessEqual[0-9]*|SV_InstanceID|SV_IsFrontFace|SV_Position|SV_RenderTargetArrayIndex|SV_SampleIndex|SV_StencilRef|SV_Target[0-7]?|SV_VertexID|SV_ViewportArrayIndex)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.variable.semantic.sm5.hlsl\",\n\t\t\t\"match\": \"(?<=\\\\:\\\\s|\\\\:)(?i:SV_DispatchThreadID|SV_DomainLocation|SV_GroupID|SV_GroupIndex|SV_GroupThreadID|SV_GSInstanceID|SV_InsideTessFactor|SV_OutputControlPointID|SV_TessFactor)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.variable.semantic.sm5_1.hlsl\",\n\t\t\t\"match\": \"(?<=\\\\:\\\\s|\\\\:)(?i:SV_InnerCoverage|SV_StencilRef)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.modifier.hlsl\",\n\t\t\t\"match\": \"\\\\b(column_major|const|export|extern|globallycoherent|groupshared|inline|inout|in|out|precise|row_major|shared|static|uniform|volatile)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.modifier.float.hlsl\",\n\t\t\t\"match\": \"\\\\b(snorm|unorm)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.modifier.postfix.hlsl\",\n\t\t\t\"match\": \"\\\\b(packoffset|register)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.modifier.interpolation.hlsl\",\n\t\t\t\"match\": \"\\\\b(centroid|linear|nointerpolation|noperspective|sample)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.modifier.geometryshader.hlsl\",\n\t\t\t\"match\": \"\\\\b(lineadj|line|point|triangle|triangleadj)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.other.hlsl\",\n\t\t\t\"match\": \"\\\\b(string)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.object.hlsl\",\n\t\t\t\"match\": \"\\\\b(AppendStructuredBuffer|Buffer|ByteAddressBuffer|ConstantBuffer|ConsumeStructuredBuffer|InputPatch|OutputPatch)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.object.rasterizerordered.hlsl\",\n\t\t\t\"match\": \"\\\\b(RasterizerOrderedBuffer|RasterizerOrderedByteAddressBuffer|RasterizerOrderedStructuredBuffer|RasterizerOrderedTexture1D|RasterizerOrderedTexture1DArray|RasterizerOrderedTexture2D|RasterizerOrderedTexture2DArray|RasterizerOrderedTexture3D)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.object.rw.hlsl\",\n\t\t\t\"match\": \"\\\\b(RWBuffer|RWByteAddressBuffer|RWStructuredBuffer|RWTexture1D|RWTexture1DArray|RWTexture2D|RWTexture2DArray|RWTexture3D)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.object.geometryshader.hlsl\",\n\t\t\t\"match\": \"\\\\b(LineStream|PointStream|TriangleStream)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.sampler.legacy.hlsl\",\n\t\t\t\"match\": \"\\\\b(sampler|sampler1D|sampler2D|sampler3D|samplerCUBE|sampler_state)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.sampler.hlsl\",\n\t\t\t\"match\": \"\\\\b(SamplerState|SamplerComparisonState)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.texture.legacy.hlsl\",\n\t\t\t\"match\": \"\\\\b(texture2D|textureCUBE)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.texture.hlsl\",\n\t\t\t\"match\": \"\\\\b(Texture1D|Texture1DArray|Texture2D|Texture2DArray|Texture2DMS|Texture2DMSArray|Texture3D|TextureCube|TextureCubeArray)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.type.structured.hlsl\",\n\t\t\t\"match\": \"\\\\b(cbuffer|class|interface|namespace|struct|tbuffer)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.hlsl\",\n\t\t\t\"match\": \"\\\\b(FALSE|TRUE|NULL)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.fx.hlsl\",\n\t\t\t\"match\": \"\\\\b(BlendState|DepthStencilState|RasterizerState)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.type.fx.technique.hlsl\",\n\t\t\t\"match\": \"\\\\b(technique|Technique|technique10|technique11|pass)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.object-literal.key.fx.blendstate.hlsl\",\n\t\t\t\"match\": \"\\\\b(AlphaToCoverageEnable|BlendEnable|SrcBlend|DestBlend|BlendOp|SrcBlendAlpha|DestBlendAlpha|BlendOpAlpha|RenderTargetWriteMask)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.object-literal.key.fx.depthstencilstate.hlsl\",\n\t\t\t\"match\": \"\\\\b(DepthEnable|DepthWriteMask|DepthFunc|StencilEnable|StencilReadMask|StencilWriteMask|FrontFaceStencilFail|FrontFaceStencilZFail|FrontFaceStencilPass|FrontFaceStencilFunc|BackFaceStencilFail|BackFaceStencilZFail|BackFaceStencilPass|BackFaceStencilFunc)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.object-literal.key.fx.rasterizerstate.hlsl\",\n\t\t\t\"match\": \"\\\\b(FillMode|CullMode|FrontCounterClockwise|DepthBias|DepthBiasClamp|SlopeScaleDepthBias|ZClipEnable|ScissorEnable|MultiSampleEnable|AntiAliasedLineEnable)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.object-literal.key.fx.samplerstate.hlsl\",\n\t\t\t\"match\": \"\\\\b(Filter|AddressU|AddressV|AddressW|MipLODBias|MaxAnisotropy|ComparisonFunc|BorderColor|MinLOD|MaxLOD)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.blend.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:ZERO|ONE|SRC_COLOR|INV_SRC_COLOR|SRC_ALPHA|INV_SRC_ALPHA|DEST_ALPHA|INV_DEST_ALPHA|DEST_COLOR|INV_DEST_COLOR|SRC_ALPHA_SAT|BLEND_FACTOR|INV_BLEND_FACTOR|SRC1_COLOR|INV_SRC1_COLOR|SRC1_ALPHA|INV_SRC1_ALPHA)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.blendop.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:ADD|SUBTRACT|REV_SUBTRACT|MIN|MAX)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.depthwritemask.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:ALL)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.comparisonfunc.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:NEVER|LESS|EQUAL|LESS_EQUAL|GREATER|NOT_EQUAL|GREATER_EQUAL|ALWAYS)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.stencilop.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:KEEP|REPLACE|INCR_SAT|DECR_SAT|INVERT|INCR|DECR)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.fillmode.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:WIREFRAME|SOLID)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.cullmode.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:NONE|FRONT|BACK)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.filter.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:MIN_MAG_MIP_POINT|MIN_MAG_POINT_MIP_LINEAR|MIN_POINT_MAG_LINEAR_MIP_POINT|MIN_POINT_MAG_MIP_LINEAR|MIN_LINEAR_MAG_MIP_POINT|MIN_LINEAR_MAG_POINT_MIP_LINEAR|MIN_MAG_LINEAR_MIP_POINT|MIN_MAG_MIP_LINEAR|ANISOTROPIC|COMPARISON_MIN_MAG_MIP_POINT|COMPARISON_MIN_MAG_POINT_MIP_LINEAR|COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT|COMPARISON_MIN_POINT_MAG_MIP_LINEAR|COMPARISON_MIN_LINEAR_MAG_MIP_POINT|COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR|COMPARISON_MIN_MAG_LINEAR_MIP_POINT|COMPARISON_MIN_MAG_MIP_LINEAR|COMPARISON_ANISOTROPIC|TEXT_1BIT)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fx.textureaddressmode.hlsl\",\n\t\t\t\"match\": \"\\\\b(?i:WRAP|MIRROR|CLAMP|BORDER|MIRROR_ONCE)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"string.quoted.double.hlsl\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.hlsl\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/html/.vscodeignore",
    "content": "build/**\ntest/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/html/build/update-grammar.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\nimport * as vscodeGrammarUpdater from 'vscode-grammar-updater';\n\nfunction patchGrammar(grammar) {\n\tlet patchCount = 0;\n\n\tlet visit = function (rule, parent) {\n\t\tif (rule.name === 'source.js' || rule.name === 'source.css') {\n\t\t\tif (parent.node[0].name !== 'punctuation.definition.string.end.html' && parent.parent && parent.parent.property === 'endCaptures') {\n\t\t\t\trule.name = rule.name + '-ignored-vscode';\n\t\t\t\tpatchCount++;\n\t\t\t}\n\t\t}\n\t\tfor (let property in rule) {\n\t\t\tlet value = rule[property];\n\t\t\tif (typeof value === 'object') {\n\t\t\t\tvisit(value, { node: rule, property: property, parent: parent });\n\t\t\t}\n\t\t}\n\t};\n\n\tlet repository = grammar.repository;\n\tfor (let key in repository) {\n\t\tvisit(repository[key], { node: repository, property: key, parent: undefined });\n\t}\n\tif (patchCount !== 2) {\n\t\tconsole.warn(`Expected to patch 2 occurrences of source.js & source.css: Was ${patchCount}`);\n\t}\n\n\n\treturn grammar;\n}\n\nconst tsGrammarRepo = 'textmate/html.tmbundle';\nconst grammarPath = 'Syntaxes/HTML.plist';\nvscodeGrammarUpdater.update(tsGrammarRepo, grammarPath, './syntaxes/html.tmLanguage.json', grammar => patchGrammar(grammar));\n\n\n"
  },
  {
    "path": "extensions/html/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/html.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/html.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"0c3d5ee54de3a993f747f54186b73a4d2d3c44a2\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-html.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/html/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [ \"<!--\", \"-->\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"<!--\", \"-->\"],\n\t\t[\"{\", \"}\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\"},\n\t\t{ \"open\": \"[\", \"close\": \"]\"},\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\" },\n\t\t{ \"open\": \"<!--\", \"close\": \"-->\", \"notIn\": [ \"comment\", \"string\" ]}\n\t],\n\t\"surroundingPairs\": [\n\t\t{ \"open\": \"'\", \"close\": \"'\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\" },\n\t\t{ \"open\": \"{\", \"close\": \"}\"},\n\t\t{ \"open\": \"[\", \"close\": \"]\"},\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"<\", \"close\": \">\" }\n\t],\n\t\"colorizedBracketPairs\": [\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*<!--\\\\s*#region\\\\b.*-->\",\n\t\t\t\"end\": \"^\\\\s*<!--\\\\s*#endregion\\\\b.*-->\"\n\t\t}\n\t},\n\t\"wordPattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\!\\\\@\\\\$\\\\^\\\\&\\\\*\\\\(\\\\)\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>\\\\/\\\\s]+)\",\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t\"beforeText\": { \"pattern\": \"<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))([_:\\\\w][_:\\\\w-.\\\\d]*)(?:(?:[^'\\\"/>]|\\\"[^\\\"]*\\\"|'[^']*')*?(?!\\\\/)>)[^<]*$\", \"flags\": \"i\" },\n\t\t\t\"afterText\": { \"pattern\": \"^<\\\\/([_:\\\\w][_:\\\\w-.\\\\d]*)\\\\s*>\", \"flags\": \"i\" },\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"beforeText\": { \"pattern\": \"<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))([_:\\\\w][_:\\\\w-.\\\\d]*)(?:(?:[^'\\\"/>]|\\\"[^\\\"]*\\\"|'[^']*')*?(?!\\\\/)>)[^<]*$\", \"flags\": \"i\" },\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indent\"\n\t\t\t}\n\t\t}\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"<(?!\\\\?|(?:area|base|br|col|frame|hr|html|img|input|keygen|link|menuitem|meta|param|source|track|wbr)\\\\b|[^>]*\\\\/>)([-_\\\\.A-Za-z0-9]+)(?=\\\\s|>)\\\\b[^>]*>(?!.*<\\\\/\\\\1>)|<!--(?!.*-->)|\\\\{[^}\\\"']*$\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*(<\\\\/(?!html)[-_\\\\.A-Za-z0-9]+\\\\b[^>]*>|-->|\\\\})\"\n\t}\n}\n"
  },
  {
    "path": "extensions/html/package.json",
    "content": "{\n  \"name\": \"html\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammar.mjs\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"html\",\n        \"extensions\": [\n          \".html\",\n          \".htm\",\n          \".shtml\",\n          \".xhtml\",\n          \".xht\",\n          \".mdoc\",\n          \".jsp\",\n          \".asp\",\n          \".aspx\",\n          \".jshtm\",\n          \".volt\",\n          \".ejs\",\n          \".rhtml\"\n        ],\n        \"aliases\": [\n          \"HTML\",\n          \"htm\",\n          \"html\",\n          \"xhtml\"\n        ],\n        \"mimetypes\": [\n          \"text/html\",\n          \"text/x-jshtm\",\n          \"text/template\",\n          \"text/ng-template\",\n          \"application/xhtml+xml\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"scopeName\": \"text.html.basic\",\n        \"path\": \"./syntaxes/html.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"text.html\": \"html\",\n          \"source.css\": \"css\",\n          \"source.js\": \"javascript\",\n          \"source.python\": \"python\",\n          \"source.smarty\": \"smarty\"\n        },\n        \"tokenTypes\": {\n          \"meta.tag string.quoted\": \"other\"\n        }\n      },\n      {\n        \"language\": \"html\",\n        \"scopeName\": \"text.html.derivative\",\n        \"path\": \"./syntaxes/html-derivative.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"text.html\": \"html\",\n          \"source.css\": \"css\",\n          \"source.js\": \"javascript\",\n          \"source.python\": \"python\",\n          \"source.smarty\": \"smarty\"\n        },\n        \"tokenTypes\": {\n          \"meta.tag string.quoted\": \"other\"\n        }\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"html\",\n        \"path\": \"./snippets/html.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/html/package.nls.json",
    "content": "{\n\t\"displayName\": \"HTML Language Basics\",\n\t\"description\": \"Provides syntax highlighting, bracket matching & snippets in HTML files.\"\n}\n"
  },
  {
    "path": "extensions/html/snippets/html.code-snippets",
    "content": "{\n\t\"html doc\": {\n\t\t\"isFileTemplate\": true,\n\t\t\"body\": [\n\t\t\t\"<!DOCTYPE html>\",\n\t\t\t\"<html>\",\n\t\t\t\"<head>\",\n\t\t\t\"\\t<meta charset=\\\"UTF-8\\\" />\",\n\t\t\t\"\\t<title>${1:title}</title>\",\n\t\t\t\"</head>\",\n\t\t\t\"<body>\",\n\t\t\t\"\\t$0\",\n\t\t\t\"</body>\",\n\t\t\t\"</html>\"\n\t\t],\n\t\t\"description\": \"HTML Document\"\n\t}\n}\n"
  },
  {
    "path": "extensions/html/syntaxes/html-derivative.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/html.tmbundle/blob/master/Syntaxes/HTML%20%28Derivative%29.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/html.tmbundle/commit/390c8870273a2ae80244dae6db6ba064a802f407\",\n\t\"name\": \"HTML (Derivative)\",\n\t\"scopeName\": \"text.html.derivative\",\n\t\"injections\": {\n\t\t\"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)\": {\n\t\t\t\"comment\": \"Uses R: to ensure this matches after any other injections.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<\",\n\t\t\t\t\t\"name\": \"invalid.illegal.bad-angle-bracket.html\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"text.html.basic#core-minus-invalid\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(</?)(\\\\w[^\\\\s>]*)(?<!/)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"((?: ?/)?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.tag.other.unrecognized.html.derivative\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.basic#attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/html/syntaxes/html.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/html.tmbundle/blob/master/Syntaxes/HTML.plist\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/html.tmbundle/commit/0c3d5ee54de3a993f747f54186b73a4d2d3c44a2\",\n\t\"name\": \"HTML\",\n\t\"scopeName\": \"text.html.basic\",\n\t\"injections\": {\n\t\t\"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)\": {\n\t\t\t\"comment\": \"Uses R: to ensure this matches after any other injections.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<\",\n\t\t\t\t\t\"name\": \"invalid.illegal.bad-angle-bracket.html\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#xml-processing\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#doctype\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#cdata\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#tags-valid\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#tags-invalid\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#entities\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"attribute\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(s(hape|cope|t(ep|art)|ize(s)?|p(ellcheck|an)|elected|lot|andbox|rc(set|doc|lang)?)|h(ttp-equiv|i(dden|gh)|e(ight|aders)|ref(lang)?)|n(o(nce|validate|module)|ame)|c(h(ecked|arset)|ite|o(nt(ent(editable)?|rols)|ords|l(s(pan)?|or))|lass|rossorigin)|t(ype(mustmatch)?|itle|a(rget|bindex)|ranslate)|i(s(map)?|n(tegrity|putmode)|tem(scope|type|id|prop|ref)|d)|op(timum|en)|d(i(sabled|r(name)?)|ownload|e(coding|f(er|ault))|at(etime|a)|raggable)|usemap|p(ing|oster|la(ysinline|ceholder)|attern|reload)|enctype|value|kind|for(m(novalidate|target|enctype|action|method)?)?|w(idth|rap)|l(ist|o(op|w)|a(ng|bel))|a(s(ync)?|c(ce(sskey|pt(-charset)?)|tion)|uto(c(omplete|apitalize)|play|focus)|l(t|low(usermedia|paymentrequest|fullscreen))|bbr)|r(ows(pan)?|e(versed|quired|ferrerpolicy|l|adonly))|m(in(length)?|u(ted|ltiple)|e(thod|dia)|a(nifest|x(length)?)))(?![\\\\w:-])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"HTML5 attributes, not event handlers\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\"name\": \"meta.attribute.$1.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"style(?![\\\\w:-])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"HTML5 style attribute\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\"name\": \"meta.attribute.style.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=[^\\\\s=])(?!\\\\s*=)|(?=/?>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?=[^\\\\s=<>`/]|/(?!>))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.embedded.line.css\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.css\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"([^\\\\s\\\"'=<>`/]|/(?!>))+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.html\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"contentName\": \"source.css\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(\\\")\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.css\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.html\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#entities\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"contentName\": \"source.css\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(')\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.css\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.single.html\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#entities\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unexpected-equals-sign.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"on(s(croll|t(orage|alled)|u(spend|bmit)|e(curitypolicyviolation|ek(ing|ed)|lect))|hashchange|c(hange|o(ntextmenu|py)|u(t|echange)|l(ick|ose)|an(cel|play(through)?))|t(imeupdate|oggle)|in(put|valid)|o(nline|ffline)|d(urationchange|r(op|ag(start|over|e(n(ter|d)|xit)|leave)?)|blclick)|un(handledrejection|load)|p(opstate|lay(ing)?|a(ste|use|ge(show|hide))|rogress)|e(nded|rror|mptied)|volumechange|key(down|up|press)|focus|w(heel|aiting)|l(oad(start|e(nd|d(data|metadata)))?|anguagechange)|a(uxclick|fterprint|bort)|r(e(s(ize|et)|jectionhandled)|atechange)|m(ouse(o(ut|ver)|down|up|enter|leave|move)|essage(error)?)|b(efore(unload|print)|lur))(?![\\\\w:-])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"HTML5 attributes, event handlers\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\"name\": \"meta.attribute.event-handler.$1.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=[^\\\\s=])(?!\\\\s*=)|(?=/?>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?=[^\\\\s=<>`/]|/(?!>))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.embedded.line.js\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(([^\\\\s\\\"'=<>`/]|/(?!>))+)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.html\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"contentName\": \"source.js\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(\\\")\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.html\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"([^\\\\n\\\"/]|/(?![/*]))+\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\")|\\\\n\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\")|\\\\*/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"contentName\": \"source.js\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(')\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.single.html\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"([^\\\\n'/]|/(?![/*]))+\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=')|\\\\n\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=')|\\\\*/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unexpected-equals-sign.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(data-[a-z\\\\-]+)(?![\\\\w:-])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"HTML5 attributes, data-*\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\"name\": \"meta.attribute.data-x.$1.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(align|bgcolor|border)(?![\\\\w:-])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.entity.other.attribute-name.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"HTML attributes, deprecated\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\"name\": \"meta.attribute.$1.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([^\\\\x{0020}\\\"'<>/=\\\\x{0000}-\\\\x{001F}\\\\x{007F}-\\\\x{009F}\\\\x{FDD0}-\\\\x{FDEF}\\\\x{FFFE}\\\\x{FFFF}\\\\x{1FFFE}\\\\x{1FFFF}\\\\x{2FFFE}\\\\x{2FFFF}\\\\x{3FFFE}\\\\x{3FFFF}\\\\x{4FFFE}\\\\x{4FFFF}\\\\x{5FFFE}\\\\x{5FFFF}\\\\x{6FFFE}\\\\x{6FFFF}\\\\x{7FFFE}\\\\x{7FFFF}\\\\x{8FFFE}\\\\x{8FFFF}\\\\x{9FFFE}\\\\x{9FFFF}\\\\x{AFFFE}\\\\x{AFFFF}\\\\x{BFFFE}\\\\x{BFFFF}\\\\x{CFFFE}\\\\x{CFFFF}\\\\x{DFFFE}\\\\x{DFFFF}\\\\x{EFFFE}\\\\x{EFFFF}\\\\x{FFFFE}\\\\x{FFFFF}\\\\x{10FFFE}\\\\x{10FFFF}]+)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Anything else that is valid\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\"name\": \"meta.attribute.unrecognized.$1.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s>]+\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.html\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attribute-interior\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=[^\\\\s=])(?!\\\\s*=)|(?=/?>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([^\\\\s\\\"'=<>`/]|/(?!>))+\",\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#entities\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#entities\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unexpected-equals-sign.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cdata\": {\n\t\t\t\"begin\": \"<!\\\\[CDATA\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"string.other.inline-data.html\",\n\t\t\t\"end\": \"]]>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.tag.metadata.cdata.html\"\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"begin\": \"<!--\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"-->\",\n\t\t\t\"name\": \"comment.block.html\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\G-?>\",\n\t\t\t\t\t\"name\": \"invalid.illegal.characters-not-allowed-here.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<!--(?!>)|<!-(?=-->)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.characters-not-allowed-here.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--!>\",\n\t\t\t\t\t\"name\": \"invalid.illegal.characters-not-allowed-here.html\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"core-minus-invalid\": {\n\t\t\t\"comment\": \"This should be the root pattern array includes minus #tags-invalid\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#xml-processing\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#doctype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cdata\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tags-valid\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"doctype\": {\n\t\t\t\"begin\": \"<!(?=(?i:DOCTYPE\\\\s))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.tag.metadata.doctype.html\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\G(?i:DOCTYPE)\",\n\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"name\": \"string.quoted.double.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s>]+\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"entities\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"912\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Yes this is a bit ridiculous, there are quite a lot of these\",\n\t\t\t\t\t\"match\": \"(?x)\\n\\t\\t\\t\\t\\t\\t(&)\\t(?=[a-zA-Z])\\n\\t\\t\\t\\t\\t\\t(\\n\\t\\t\\t\\t\\t\\t\\t(a(s(ymp(eq)?|cr|t)|n(d(slope|d|v|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a(h|c|d|e|f|a|g|b))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|e|E|acir)?|elig|f(r)?|w(conint|int)|l(pha|e(ph|fsym))|acute|ring|grave|m(p|a(cr|lg))|breve)|A(s(sign|cr)|nd|MP|c(y|irc)|tilde|o(pf|gon)|uml|pplyFunction|fr|Elig|lpha|acute|ring|grave|macr|breve))\\n\\t\\t\\t\\t\\t\\t  | (B(scr|cy|opf|umpeq|e(cause|ta|rnoullis)|fr|a(ckslash|r(v|wed))|reve)|b(s(cr|im(e)?|ol(hsub|b)?|emi)|n(ot|e(quiv)?)|c(y|ong)|ig(s(tar|qcup)|c(irc|up|ap)|triangle(down|up)|o(times|dot|plus)|uplus|vee|wedge)|o(t(tom)?|pf|wtie|x(h(d|u|D|U)?|times|H(d|u|D|U)?|d(R|l|r|L)|u(R|l|r|L)|plus|D(R|l|r|L)|v(R|h|H|l|r|L)?|U(R|l|r|L)|V(R|h|H|l|r|L)?|minus|box))|Not|dquo|u(ll(et)?|mp(e(q)?|E)?)|prime|e(caus(e)?|t(h|ween|a)|psi|rnou|mptyv)|karow|fr|l(ock|k(1(2|4)|34)|a(nk|ck(square|triangle(down|left|right)?|lozenge)))|a(ck(sim(eq)?|cong|prime|epsilon)|r(vee|wed(ge)?))|r(eve|vbar)|brk(tbrk)?))\\n\\t\\t\\t\\t\\t\\t  | (c(s(cr|u(p(e)?|b(e)?))|h(cy|i|eck(mark)?)|ylcty|c(irc|ups(sm)?|edil|a(ps|ron))|tdot|ir(scir|c(eq|le(d(R|circ|S|dash|ast)|arrow(left|right)))?|e|fnint|E|mid)?|o(n(int|g(dot)?)|p(y(sr)?|f|rod)|lon(e(q)?)?|m(p(fn|le(xes|ment))?|ma(t)?))|dot|u(darr(l|r)|p(s|c(up|ap)|or|dot|brcap)?|e(sc|pr)|vee|wed|larr(p)?|r(vearrow(left|right)|ly(eq(succ|prec)|vee|wedge)|arr(m)?|ren))|e(nt(erdot)?|dil|mptyv)|fr|w(conint|int)|lubs(uit)?|a(cute|p(s|c(up|ap)|dot|and|brcup)?|r(on|et))|r(oss|arr))|C(scr|hi|c(irc|onint|edil|aron)|ircle(Minus|Times|Dot|Plus)|Hcy|o(n(tourIntegral|int|gruent)|unterClockwiseContourIntegral|p(f|roduct)|lon(e)?)|dot|up(Cap)?|OPY|e(nterDot|dilla)|fr|lo(seCurly(DoubleQuote|Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))\\n\\t\\t\\t\\t\\t\\t  | (d(s(c(y|r)|trok|ol)|har(l|r)|c(y|aron)|t(dot|ri(f)?)|i(sin|e|v(ide(ontimes)?|onx)?|am(s|ond(suit)?)?|gamma)|Har|z(cy|igrarr)|o(t(square|plus|eq(dot)?|minus)?|ublebarwedge|pf|wn(harpoon(left|right)|downarrows|arrow)|llar)|d(otseq|a(rr|gger))?|u(har|arr)|jcy|e(lta|g|mptyv)|f(isht|r)|wangle|lc(orn|rop)|a(sh(v)?|leth|rr|gger)|r(c(orn|rop)|bkarow)|b(karow|lac)|Arr)|D(s(cr|trok)|c(y|aron)|Scy|i(fferentialD|a(critical(Grave|Tilde|Do(t|ubleAcute)|Acute)|mond))|o(t(Dot|Equal)?|uble(Right(Tee|Arrow)|ContourIntegral|Do(t|wnArrow)|Up(DownArrow|Arrow)|VerticalBar|L(ong(RightArrow|Left(RightArrow|Arrow))|eft(RightArrow|Tee|Arrow)))|pf|wn(Right(TeeVector|Vector(Bar)?)|Breve|Tee(Arrow)?|arrow|Left(RightVector|TeeVector|Vector(Bar)?)|Arrow(Bar|UpArrow)?))|Zcy|el(ta)?|D(otrahd)?|Jcy|fr|a(shv|rr|gger)))\\n\\t\\t\\t\\t\\t\\t  | (e(s(cr|im|dot)|n(sp|g)|c(y|ir(c)?|olon|aron)|t(h|a)|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(ot|Dot)|q(s(im|lant(less|gtr))|c(irc|olon)|u(iv(DD)?|est|als)|vparsl)|f(Dot|r)|l(s(dot)?|inters|l)?|a(ster|cute)|r(Dot|arr)|g(s(dot)?|rave)?|x(cl|ist|p(onentiale|ectation))|m(sp(1(3|4))?|pty(set|v)?|acr))|E(s(cr|im)|c(y|irc|aron)|ta|o(pf|gon)|NG|dot|uml|TH|psilon|qu(ilibrium|al(Tilde)?)|fr|lement|acute|grave|x(ists|ponentialE)|m(pty(SmallSquare|VerySmallSquare)|acr)))\\n\\t\\t\\t\\t\\t\\t  | (f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(ig|lig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1(2|8|3|4|5|6)|78|2(3|5)|3(8|4|5)|45|5(8|6)))))|F(scr|cy|illed(SmallSquare|VerySmallSquare)|o(uriertrf|pf|rAll)|fr))\\n\\t\\t\\t\\t\\t\\t  | (G(scr|c(y|irc|edil)|t|opf|dot|T|Jcy|fr|amma(d)?|reater(Greater|SlantEqual|Tilde|Equal(Less)?|FullEqual|Less)|g|breve)|g(s(cr|im(e|l)?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(qless|less)|less|a(pprox|rr)))?|imel|opf|dot|jcy|e(s(cc|dot(o(l)?)?|l(es)?)?|q(slant|q)?|l)?|v(nE|ertneqq)|fr|E(l)?|l(j|E|a)?|a(cute|p|mma(d)?)|rave|g(g)?|breve))\\n\\t\\t\\t\\t\\t\\t  | (h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok(leftarrow|rightarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks(earow|warow)|fr|a(irsp|lf|r(dcy|r(cir|w)?)|milt)|bar|Arr)|H(s(cr|trok)|circ|ilbertSpace|o(pf|rizontalLine)|ump(DownHump|Equal)|fr|a(cek|t)|ARDcy))\\n\\t\\t\\t\\t\\t\\t  | (i(s(cr|in(s(v)?|dot|v|E)?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(nt|int)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f(f|r)|acute|grave|m(of|ped|a(cr|th|g(part|e|line))))|I(scr|n(t(e(rsection|gral))?|visible(Comma|Times))|c(y|irc)|tilde|o(ta|pf|gon)|dot|u(kcy|ml)|Ocy|Jlig|fr|Ecy|acute|grave|m(plies|a(cr|ginaryI))?))\\n\\t\\t\\t\\t\\t\\t  | (j(s(cr|ercy)|c(y|irc)|opf|ukcy|fr|math)|J(s(cr|ercy)|c(y|irc)|opf|ukcy|fr))\\n\\t\\t\\t\\t\\t\\t  | (k(scr|hcy|c(y|edil)|opf|jcy|fr|appa(v)?|green)|K(scr|c(y|edil)|Hcy|opf|Jcy|fr|appa))\\n\\t\\t\\t\\t\\t\\t  | (l(s(h|cr|trok|im(e|g)?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(il|dil)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i(e|f)?|Par))?|Har|o(ng(left(arrow|rightarrow)|rightarrow|mapsto)|times|z(enge|f)?|oparrow(left|right)|p(f|lus|ar)|w(ast|bar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|r(dhar|ushar))|ur(dshar|uhar)|jcy|par(lt)?|e(s(s(sim|dot|eq(qgtr|gtr)|approx|gtr)|cc|dot(o(r)?)?|g(es)?)?|q(slant|q)?|ft(harpoon(down|up)|threetimes|leftarrows|arrow(tail)?|right(squigarrow|harpoons|arrow(s)?))|g)?|v(nE|ertneqq)|f(isht|loor|r)|E(g)?|l(hard|corner|tri|arr)?|a(ng(d|le)?|cute|t(e(s)?|ail)?|p|emptyv|quo|rr(sim|hk|tl|pl|fs|lp|b(fs)?)?|gran|mbda)|r(har(d)?|corner|tri|arr|m)|g(E)?|m(idot|oust(ache)?)|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left(arrow|rightarrow)|rightarrow|Left(RightArrow|Arrow))|pf|wer(RightArrow|LeftArrow))|T|e(ss(Greater|SlantEqual|Tilde|EqualGreater|FullEqual|Less)|ft(Right(Vector|Arrow)|Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|rightarrow|Floor|A(ngleBracket|rrow(RightArrow|Bar)?)))|Jcy|fr|l(eftarrow)?|a(ng|cute|placetrf|rr|mbda)|midot))\\n\\t\\t\\t\\t\\t\\t  | (M(scr|cy|inusPlus|opf|u|e(diumSpace|llintrf)|fr|ap)|m(s(cr|tpos)|ho|nplus|c(y|omma)|i(nus(d(u)?|b)?|cro|d(cir|dot|ast)?)|o(dels|pf)|dash|u(ltimap|map)?|p|easuredangle|DDot|fr|l(cp|dr)|a(cr|p(sto(down|up|left)?)?|l(t(ese)?|e)|rker)))\\n\\t\\t\\t\\t\\t\\t  | (n(s(hort(parallel|mid)|c(cue|e|r)?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|e|E)?|b(set(eq(q)?)?|e|E)?)|par|qsu(pe|be)|mid)|Rightarrow|h(par|arr|Arr)|G(t(v)?|g)|c(y|ong(dot)?|up|edil|a(p|ron))|t(ilde|lg|riangle(left(eq)?|right(eq)?)|gl)|i(s(d)?|v)?|o(t(ni(v(c|a|b))?|in(dot|v(c|a|b)|E)?)?|pf)|dash|u(m(sp|ero)?)?|jcy|p(olint|ar(sl|t|allel)?|r(cue|e(c(eq)?)?)?)|e(s(im|ear)|dot|quiv|ar(hk|r(ow)?)|xist(s)?|Arr)?|v(sim|infin|Harr|dash|Dash|l(t(rie)?|e|Arr)|ap|r(trie|Arr)|g(t|e))|fr|w(near|ar(hk|r(ow)?)|Arr)|V(dash|Dash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft(arrow|rightarrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr(c|w)?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft(arrow|rightarrow)|l)|b(sp|ump(e)?))|N(scr|c(y|edil|aron)|tilde|o(nBreakingSpace|Break|t(R(ightTriangle(Bar|Equal)?|everseElement)|Greater(Greater|SlantEqual|Tilde|Equal|FullEqual|Less)?|S(u(cceeds(SlantEqual|Tilde|Equal)?|perset(Equal)?|bset(Equal)?)|quareSu(perset(Equal)?|bset(Equal)?))|Hump(DownHump|Equal)|Nested(GreaterGreater|LessLess)|C(ongruent|upCap)|Tilde(Tilde|Equal|FullEqual)?|DoubleVerticalBar|Precedes(SlantEqual|Equal)?|E(qual(Tilde)?|lement|xists)|VerticalBar|Le(ss(Greater|SlantEqual|Tilde|Equal|Less)?|ftTriangle(Bar|Equal)?))?|pf)|u|e(sted(GreaterGreater|LessLess)|wLine|gative(MediumSpace|Thi(nSpace|ckSpace)|VeryThinSpace))|Jcy|fr|acute))\\n\\t\\t\\t\\t\\t\\t  | (o(s(cr|ol|lash)|h(m|bar)|c(y|ir(c)?)|ti(lde|mes(as)?)|S|int|opf|d(sold|iv|ot|ash|blac)|uml|p(erp|lus|ar)|elig|vbar|f(cir|r)|l(c(ir|ross)|t|ine|arr)|a(st|cute)|r(slope|igof|or|d(er(of)?|f|m)?|v|arr)?|g(t|on|rave)|m(i(nus|cron|d)|ega|acr))|O(s(cr|lash)|c(y|irc)|ti(lde|mes)|opf|dblac|uml|penCurly(DoubleQuote|Quote)|ver(B(ar|rac(e|ket))|Parenthesis)|fr|Elig|acute|r|grave|m(icron|ega|acr)))\\n\\t\\t\\t\\t\\t\\t  | (p(s(cr|i)|h(i(v)?|one|mmat)|cy|i(tchfork|v)?|o(intint|und|pf)|uncsp|er(cnt|tenk|iod|p|mil)|fr|l(us(sim|cir|two|d(o|u)|e|acir|mn|b)?|an(ck(h)?|kv))|ar(s(im|l)|t|a(llel)?)?|r(sim|n(sim|E|ap)|cue|ime(s)?|o(d|p(to)?|f(surf|line|alar))|urel|e(c(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?)?|E|ap)?|m)|P(s(cr|i)|hi|cy|i|o(incareplane|pf)|fr|lusMinus|artialD|r(ime|o(duct|portion(al)?)|ecedes(SlantEqual|Tilde|Equal)?)?))\\n\\t\\t\\t\\t\\t\\t  | (q(scr|int|opf|u(ot|est(eq)?|at(int|ernions))|prime|fr)|Q(scr|opf|UOT|fr))\\n\\t\\t\\t\\t\\t\\t  | (R(s(h|cr)|ho|c(y|edil|aron)|Barr|ight(Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|Floor|A(ngleBracket|rrow(Bar|LeftArrow)?))|o(undImplies|pf)|uleDelayed|e(verse(UpEquilibrium|E(quilibrium|lement)))?|fr|EG|a(ng|cute|rr(tl)?)|rightarrow)|r(s(h|cr|q(uo(r)?|b)|aquo)|h(o(v)?|ar(d|u(l)?))|nmid|c(y|ub|e(il|dil)|aron)|Barr|t(hree|imes|ri(e|f|ltri)?)|i(singdotseq|ng|ght(squigarrow|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(tail)?|rightarrows))|Har|o(times|p(f|lus|ar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|ldhar)|uluhar|p(polint|ar(gt)?)|e(ct|al(s|ine|part)?|g)|f(isht|loor|r)|l(har|arr|m)|a(ng(d|e|le)?|c(ute|e)|t(io(nals)?|ail)|dic|emptyv|quo|rr(sim|hk|c|tl|pl|fs|w|lp|ap|b(fs)?)?)|rarr|x|moust(ache)?|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr)))\\n\\t\\t\\t\\t\\t\\t  | (s(s(cr|tarf|etmn|mile)|h(y|c(hcy|y)|ort(parallel|mid)|arp)|c(sim|y|n(sim|E|ap)|cue|irc|polint|e(dil)?|E|a(p|ron))?|t(ar(f)?|r(ns|aight(phi|epsilon)))|i(gma(v|f)?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot(e|b)?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n(e|E)|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|n(e|E)|dot|plus|e(dot)?|E|rarr|mult)?)|pa(des(uit)?|r)|e(swar|ct|tm(n|inus)|ar(hk|r(ow)?)|xt|mi|Arr)|q(su(p(set(eq)?|e)?|b(set(eq)?|e)?)|c(up(s)?|ap(s)?)|u(f|ar(e|f))?)|fr(own)?|w(nwar|ar(hk|r(ow)?)|Arr)|larr|acute|rarr|m(t(e(s)?)?|i(d|le)|eparsl|a(shp|llsetminus))|bquo)|S(scr|hort(RightArrow|DownArrow|UpArrow|LeftArrow)|c(y|irc|edil|aron)?|tar|igma|H(cy|CHcy)|opf|u(c(hThat|ceeds(SlantEqual|Tilde|Equal)?)|p(set|erset(Equal)?)?|m|b(set(Equal)?)?)|OFTcy|q(uare(Su(perset(Equal)?|bset(Equal)?)|Intersection|Union)?|rt)|fr|acute|mallCircle))\\n\\t\\t\\t\\t\\t\\t  | (t(s(hcy|c(y|r)|trok)|h(i(nsp|ck(sim|approx))|orn|e(ta(sym|v)?|re(4|fore))|k(sim|ap))|c(y|edil|aron)|i(nt|lde|mes(d|b(ar)?)?)|o(sa|p(cir|f(ork)?|bot)?|ea)|dot|prime|elrec|fr|w(ixt|ohead(leftarrow|rightarrow))|a(u|rget)|r(i(sb|time|dot|plus|e|angle(down|q|left(eq)?|right(eq)?)?|minus)|pezium|ade)|brk)|T(s(cr|trok)|RADE|h(i(nSpace|ckSpace)|e(ta|refore))|c(y|edil|aron)|S(cy|Hcy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a(u|b)|ripleDot))\\n\\t\\t\\t\\t\\t\\t  | (u(scr|h(ar(l|r)|blk)|c(y|irc)|t(ilde|dot|ri(f)?)|Har|o(pf|gon)|d(har|arr|blac)|u(arr|ml)|p(si(h|lon)?|harpoon(left|right)|downarrow|uparrows|lus|arrow)|f(isht|r)|wangle|l(c(orn(er)?|rop)|tri)|a(cute|rr)|r(c(orn(er)?|rop)|tri|ing)|grave|m(l|acr)|br(cy|eve)|Arr)|U(scr|n(ion(Plus)?|der(B(ar|rac(e|ket))|Parenthesis))|c(y|irc)|tilde|o(pf|gon)|dblac|uml|p(si(lon)?|downarrow|Tee(Arrow)?|per(RightArrow|LeftArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))\\n\\t\\t\\t\\t\\t\\t  | (v(s(cr|u(pn(e|E)|bn(e|E)))|nsu(p|b)|cy|Bar(v)?|zigzag|opf|dash|prop|e(e(eq|bar)?|llip|r(t|bar))|Dash|fr|ltri|a(ngrt|r(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|t(heta|riangle(left|right))|p(hi|i|ropto)|epsilon|kappa|r(ho)?))|rtri|Arr)|V(scr|cy|opf|dash(l)?|e(e|r(yThinSpace|t(ical(Bar|Separator|Tilde|Line))?|bar))|Dash|vdash|fr|bar))\\n\\t\\t\\t\\t\\t\\t  | (w(scr|circ|opf|p|e(ierp|d(ge(q)?|bar))|fr|r(eath)?)|W(scr|circ|opf|edge|fr))\\n\\t\\t\\t\\t\\t\\t  | (X(scr|i|opf|fr)|x(s(cr|qcup)|h(arr|Arr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l(arr|Arr)|r(arr|Arr)|map))\\n\\t\\t\\t\\t\\t\\t  | (y(scr|c(y|irc)|icy|opf|u(cy|ml)|en|fr|ac(y|ute))|Y(scr|c(y|irc)|opf|uml|Icy|Ucy|fr|acute|Acy))\\n\\t\\t\\t\\t\\t\\t  | (z(scr|hcy|c(y|aron)|igrarr|opf|dot|e(ta|etrf)|fr|w(nj|j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute))\\n\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t(;)\\n\\t\\t\\t\\t\\t\",\n\t\t\t\t\t\"name\": \"constant.character.entity.named.$2.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(&)#[0-9]+(;)\",\n\t\t\t\t\t\"name\": \"constant.character.entity.numeric.decimal.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(&)#[xX][0-9a-fA-F]+(;)\",\n\t\t\t\t\t\"name\": \"constant.character.entity.numeric.hexadecimal.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&(?=[a-zA-Z0-9]+;)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.ambiguous-ampersand.html\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"math\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(math)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.$2.start.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.$2.end.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.element.structure.$2.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.start.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"repository\": {\n\t\t\t\t\"attribute\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(s(hift|ymmetric|cript(sizemultiplier|level|minsize)|t(ackalign|retchy)|ide|u(pscriptshift|bscriptshift)|e(parator(s)?|lection)|rc)|h(eight|ref)|n(otation|umalign)|c(haralign|olumn(spa(n|cing)|width|lines|align)|lose|rossout)|i(n(dent(shift(first|last)?|target|align(first|last)?)|fixlinebreakstyle)|d)|o(pen|verflow)|d(i(splay(style)?|r)|e(nomalign|cimalpoint|pth))|position|e(dge|qual(columns|rows))|voffset|f(orm|ence|rame(spacing)?)|width|l(space|ine(thickness|leading|break(style|multchar)?)|o(ngdivstyle|cation)|ength|quote|argeop)|a(c(cent(under)?|tiontype)|l(t(text|img(-(height|valign|width))?)|ign(mentscope)?))|r(space|ow(spa(n|cing)|lines|align)|quote)|groupalign|x(link:href|mlns)|m(in(size|labelspacing)|ovablelimits|a(th(size|color|variant|background)|xsize))|bevelled)(?![\\\\w:-])\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\t\t\"name\": \"meta.attribute.$1.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"([^\\\\x{0020}\\\"'<>/=\\\\x{0000}-\\\\x{001F}\\\\x{007F}-\\\\x{009F}\\\\x{FDD0}-\\\\x{FDEF}\\\\x{FFFE}\\\\x{FFFF}\\\\x{1FFFE}\\\\x{1FFFF}\\\\x{2FFFE}\\\\x{2FFFF}\\\\x{3FFFE}\\\\x{3FFFF}\\\\x{4FFFE}\\\\x{4FFFF}\\\\x{5FFFE}\\\\x{5FFFF}\\\\x{6FFFE}\\\\x{6FFFF}\\\\x{7FFFE}\\\\x{7FFFF}\\\\x{8FFFE}\\\\x{8FFFF}\\\\x{9FFFE}\\\\x{9FFFF}\\\\x{AFFFE}\\\\x{AFFFF}\\\\x{BFFFE}\\\\x{BFFFF}\\\\x{CFFFE}\\\\x{CFFFF}\\\\x{DFFFE}\\\\x{DFFFF}\\\\x{EFFFE}\\\\x{EFFFF}\\\\x{FFFFE}\\\\x{FFFFF}\\\\x{10FFFE}\\\\x{10FFFF}]+)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"comment\": \"Anything else that is valid\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\t\t\"name\": \"meta.attribute.unrecognized.$1.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s>]+\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"tags\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#cdata\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.math.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.structure.math.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.math.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.math.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.structure.math.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.math.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.inline.math.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.math.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.math.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.inline.math.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.math.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(mglyph)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.object.math.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(mglyph)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.math.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.math.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.object.math.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(([\\\\w:]+))(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.other.invalid.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)((\\\\w[^\\\\s>]*))(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)((\\\\2))\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.other.invalid.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tags-invalid\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"svg\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(svg)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.$2.start.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.$2.end.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.element.structure.$2.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.start.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"repository\": {\n\t\t\t\t\"attribute\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(s(hape-rendering|ystemLanguage|cale|t(yle|itchTiles|op-(color|opacity)|dDeviation|em(h|v)|artOffset|r(i(ng|kethrough-(thickness|position))|oke(-(opacity|dash(offset|array)|width|line(cap|join)|miterlimit))?))|urfaceScale|p(e(cular(Constant|Exponent)|ed)|acing|readMethod)|eed|lope)|h(oriz-(origin-x|adv-x)|eight|anging|ref(lang)?)|y(1|2|ChannelSelector)?|n(umOctaves|ame)|c(y|o(ntentS(criptType|tyleType)|lor(-(interpolation(-filters)?|profile|rendering))?)|ursor|l(ip(-(path|rule)|PathUnits)?|ass)|a(p-height|lcMode)|x)|t(ype|o|ext(-(decoration|anchor|rendering)|Length)|a(rget(X|Y)?|b(index|leValues))|ransform)|i(n(tercept|2)?|d(eographic)?|mage-rendering)|z(oomAndPan)?|o(p(erator|acity)|ver(flow|line-(thickness|position))|ffset|r(i(ent(ation)?|gin)|der))|d(y|i(splay|visor|ffuseConstant|rection)|ominant-baseline|ur|e(scent|celerate)|x)?|u(1|n(i(code(-(range|bidi))?|ts-per-em)|derline-(thickness|position))|2)|p(ing|oint(s(At(X|Y|Z))?|er-events)|a(nose-1|t(h(Length)?|tern(ContentUnits|Transform|Units))|int-order)|r(imitiveUnits|eserveA(spectRatio|lpha)))|e(n(d|able-background)|dgeMode|levation|x(ternalResourcesRequired|ponent))|v(i(sibility|ew(Box|Target))|-(hanging|ideographic|alphabetic|mathematical)|e(ctor-effect|r(sion|t-(origin-(y|x)|adv-y)))|alues)|k(1|2|3|e(y(Splines|Times|Points)|rn(ing|el(Matrix|UnitLength)))|4)?|f(y|il(ter(Res|Units)?|l(-(opacity|rule))?)|o(nt-(s(t(yle|retch)|ize(-adjust)?)|variant|family|weight)|rmat)|lood-(color|opacity)|r(om)?|x)|w(idth(s)?|ord-spacing|riting-mode)|l(i(ghting-color|mitingConeAngle)|ocal|e(ngthAdjust|tter-spacing)|ang)|a(scent|cc(umulate|ent-height)|ttribute(Name|Type)|zimuth|dditive|utoReverse|l(ignment-baseline|phabetic|lowReorder)|rabic-form|mplitude)|r(y|otate|e(s(tart|ult)|ndering-intent|peat(Count|Dur)|quired(Extensions|Features)|f(X|Y|errerPolicy)|l)|adius|x)?|g(1|2|lyph(Ref|-(name|orientation-(horizontal|vertical)))|radient(Transform|Units))|x(1|2|ChannelSelector|-height|link:(show|href|t(ype|itle)|a(ctuate|rcrole)|role)|ml:(space|lang|base))?|m(in|ode|e(thod|dia)|a(sk(ContentUnits|Units)?|thematical|rker(Height|-(start|end|mid)|Units|Width)|x))|b(y|ias|egin|ase(Profile|line-shift|Frequency)|box))(?![\\\\w:-])\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\t\t\"name\": \"meta.attribute.$1.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"([^\\\\x{0020}\\\"'<>/=\\\\x{0000}-\\\\x{001F}\\\\x{007F}-\\\\x{009F}\\\\x{FDD0}-\\\\x{FDEF}\\\\x{FFFE}\\\\x{FFFF}\\\\x{1FFFE}\\\\x{1FFFF}\\\\x{2FFFE}\\\\x{2FFFF}\\\\x{3FFFE}\\\\x{3FFFF}\\\\x{4FFFE}\\\\x{4FFFF}\\\\x{5FFFE}\\\\x{5FFFF}\\\\x{6FFFE}\\\\x{6FFFF}\\\\x{7FFFE}\\\\x{7FFFF}\\\\x{8FFFE}\\\\x{8FFFF}\\\\x{9FFFE}\\\\x{9FFFF}\\\\x{AFFFE}\\\\x{AFFFF}\\\\x{BFFFE}\\\\x{BFFFF}\\\\x{CFFFE}\\\\x{CFFFF}\\\\x{DFFFE}\\\\x{DFFFF}\\\\x{EFFFE}\\\\x{EFFFF}\\\\x{FFFFE}\\\\x{FFFFF}\\\\x{10FFFE}\\\\x{10FFFF}]+)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"comment\": \"Anything else that is valid\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*+[^=\\\\s])\",\n\t\t\t\t\t\t\t\"name\": \"meta.attribute.unrecognized.$1.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute-interior\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s>]+\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"tags\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#cdata\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.svg.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(color-profile|desc|metadata|script|style|title)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.metadata.svg.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(color-profile|desc|metadata|script|style|title)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.svg.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.svg.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.metadata.svg.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.svg.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.structure.svg.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.svg.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.svg.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.structure.svg.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.svg.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.inline.svg.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.svg.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.svg.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.inline.svg.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.inline.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.svg.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.object.svg.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(a|circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.svg.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)(\\\\2)\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.svg.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.object.svg.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.object.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.svg.$2.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.other.svg.$2.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.svg.$2.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)((\\\\2))\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.svg.$2.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.other.svg.$2.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.void.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)(<)(([\\\\w:]+))(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(/>))\",\n\t\t\t\t\t\t\t\"name\": \"meta.element.other.invalid.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)((\\\\w[^\\\\s>]*))(?=\\\\s|/?>)(?:(([^\\\"'>]|\\\"[^\\\"]*\\\"|'[^']*')*)(>))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)(</)((\\\\2))\\\\s*(>)|(/>)|(?=</\\\\w+)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.element.other.invalid.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<!>)\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/>)|>\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other.invalid.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#tags\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tags-invalid\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"tags-invalid\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</?)((\\\\w[^\\\\s>]*))(?<!/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((?: ?/)?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.other.$2.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tags-valid\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=<(?i:style)\\\\b(?!-))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.embedded.leading.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)([ \\\\t]*$\\\\n?)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.embedded.trailing.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(<)(style)(?=\\\\s|/?>)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.style.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?i)((<)/)(style)\\\\s*(>)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.style.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"source.css-ignored-vscode\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.embedded.block.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.style.start.html\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=</(?i:style))\",\n\t\t\t\t\t\t\t\t\t\"name\": \"source.css\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=<(?i:script)\\\\b(?!-))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.embedded.leading.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)([ \\\\t]*$\\\\n?)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.embedded.trailing.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(<)((?i:script))\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.start.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(/)((?i:script))(>)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.end.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.embedded.block.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=/)\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"(>)\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.start.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"((<))(?=/(?i:script))\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.js-ignored-vscode\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=</(?i:script))\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.js\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=</script)|\\\\n\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"\\\\*/|(?=</script)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?ix:\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(?=>\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t# Tag without type attribute\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | type(?=[\\\\s=])\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\t(?!\\\\s*=\\\\s*\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t''\\t\\t\\t\\t\\t\\t\\t\\t# Empty\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | \\\"\\\"\\t\\t\\t\\t\\t\\t\\t\\t\\t#   Values\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | ('|\\\"|)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\ttext/\\t\\t\\t\\t\\t\\t\\t# Text mime-types\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tjavascript(1\\\\.[0-5])?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | x-javascript\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | jscript\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | livescript\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | (x-)?ecmascript\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | babel\\t\\t\\t\\t\\t\\t# Javascript variant currently\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\t\\t\\t\\t\\t\\t\\t\\t#   recognized as such\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | application/\\t\\t\\t\\t\\t# Application mime-types\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\t(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(x-)?javascript\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | (x-)?ecmascript\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | module\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[\\\\s\\\"'>]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.start.html\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"(?ix:\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(?=\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\ttype\\\\s*=\\\\s*\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t('|\\\"|)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\ttext/\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tx-handlebars\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | (x-(handlebars-)?|ng-)?template\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  | html\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[\\\\s\\\"'>]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t)\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"((<))(?=/(?i:script))\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"text.html.basic\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.start.html\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=</(?i:script))\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"text.html.basic\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"(?=(?i:type))\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(<)(?=/(?i:script))\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.metadata.script.start.html\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=</(?i:script))\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"source.unknown\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(base|link|meta)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/?>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.metadata.$2.void.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(noscript|title)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.metadata.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)(noscript|title)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.metadata.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(col|hr|input)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/?>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.structure.$2.void.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.structure.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.structure.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(area|br|wbr)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/?>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.inline.$2.void.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.inline.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.inline.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(embed|img|param|source|track)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/?>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.object.$2.void.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)(audio|canvas|iframe|object|picture|video)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.object.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)(audio|canvas|iframe|object|picture|video)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.object.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)((basefont|isindex))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/?>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.metadata.$2.void.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)((center|frameset|noembed|noframes))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.structure.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)((center|frameset|noembed|noframes))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.structure.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)((acronym|big|blink|font|strike|tt|xmp))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.inline.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)((acronym|big|blink|font|strike|tt|xmp))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.inline.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)((frame))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/?>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.object.$2.void.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)((applet))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.object.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)((applet))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.object.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.no-longer-supported.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.other.$2.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(</)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.no-longer-supported.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.other.$2.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#svg\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)([a-zA-Z][.0-9_a-zA-Z\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}-\\\\x{200D}\\\\x{203F}-\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}]*-[\\\\-.0-9_a-zA-Z\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}-\\\\x{200D}\\\\x{203F}-\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}]*)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/?>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.custom.start.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(</)([a-zA-Z][.0-9_a-zA-Z\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}-\\\\x{200D}\\\\x{203F}-\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}]*-[\\\\-.0-9_a-zA-Z\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}-\\\\x{200D}\\\\x{203F}-\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}]*)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.tag.custom.end.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"xml-processing\": {\n\t\t\t\"begin\": \"(<\\\\?)(xml)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.html\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\?>)\",\n\t\t\t\"name\": \"meta.tag.metadata.processing.xml.html\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/html-language-features/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/html-language-features/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"compounds\": [\n\t\t{\n\t\t\t\"name\": \"Debug Extension and Language Server\",\n\t\t\t\"configurations\": [\"Launch Extension\", \"Attach Language Server\"]\n\t\t}\n\t],\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/client/out/**/*.js\"]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Launch Tests\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\"--extensionDevelopmentPath=${workspaceFolder}\", \"--extensionTestsPath=${workspaceFolder}/client/out/test\" ],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/client/out/test/**/*.js\"]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Attach Language Server\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"port\": 6045,\n\t\t\t\"protocol\": \"inspector\",\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/server/out/**/*.js\"],\n\t\t\t\"restart\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/html-language-features/.vscode/settings.json",
    "content": "{\n\t\"editor.insertSpaces\": false,\n\t\"prettier.semi\": true,\n\t\"prettier.singleQuote\": true,\n\t\"prettier.printWidth\": 120\n}\n"
  },
  {
    "path": "extensions/html-language-features/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"label\": \"npm install\",\n\t\t\t\"command\": \"npm i\",\n\t\t\t\"args\": [\"compile\"],\n\t\t\t\"type\": \"shell\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"silent\",\n\t\t\t\t\"focus\": false,\n\t\t\t\t\"panel\": \"shared\"\n\t\t\t},\n\t\t\t\"isBackground\": true,\n\t\t\t\"problemMatcher\": \"$tsc-watch\"\n\t\t}\n\t],\n}\n"
  },
  {
    "path": "extensions/html-language-features/.vscodeignore",
    "content": "build/**\ntest/**\n.vscode/**\nserver/.vscode/**\nserver/node_modules/**\nclient/src/**\nserver/src/**\nclient/out/**\nserver/out/**\nclient/tsconfig.json\nserver/tsconfig.json\nserver/test/**\nserver/bin/**\nserver/build/**\nserver/lib/cgmanifest.json\nserver/package-lock.json\nserver/.npmignore\npackage-lock.json\nserver/extension.webpack.config.js\nextension.webpack.config.js\nserver/extension-browser.webpack.config.js\nextension-browser.webpack.config.js\nCONTRIBUTING.md\ncgmanifest.json\n"
  },
  {
    "path": "extensions/html-language-features/CONTRIBUTING.md",
    "content": "## Setup\n\n- Clone [microsoft/vscode](https://github.com/microsoft/vscode)\n- Run `npm i` at `/`, this will install\n\t- Dependencies for `/extension/html-language-features/`\n\t- Dependencies for `/extension/html-language-features/server/`\n\t- devDependencies such as `gulp`\n- Open `/extensions/html-language-features/` as the workspace in VS Code\n- In `/extensions/html-language-features/` run `npm run compile`(or `npm run watch`) to build the client and server\n- Run the [`Launch Extension`](https://github.com/microsoft/vscode/blob/master/extensions/html-language-features/.vscode/launch.json) debug target in the Debug View. This will:\n\t- Launch a new VS Code instance with the `html-language-features` extension loaded\n- Open a `.html` file to activate the extension. The extension will start the HTML language server process.\n- Add `\"html.trace.server\": \"verbose\"` to the settings to observe the communication between client and server in the `HTML Language Server` output.\n- Debug the extension and the language server client by setting breakpoints in`html-language-features/client/`\n- Debug the language server process by using `Attach to Node Process` command in the  VS Code window opened on `html-language-features`.\n  - Pick the process that contains `htmlServerMain` in the command line. Hover over `code-insiders` resp `code` processes to see the full process command line.\n  - Set breakpoints in `html-language-features/server/`\n- Run `Reload Window` command in the launched instance to reload the extension\n\n### Contribute to vscode-html-languageservice\n\n[microsoft/vscode-html-languageservice](https://github.com/microsoft/vscode-html-languageservice) contains the language smarts for html.\nThis extension wraps the html language service into a Language Server for VS Code.\nIf you want to fix html issues or make improvements, you should make changes at [microsoft/vscode-html-languageservice](https://github.com/microsoft/vscode-html-languageservice).\n\nHowever, within this extension, you can run a development version of `vscode-html-languageservice` to debug code or test language features interactively:\n\n#### Linking `vscode-html-languageservice` in `html-language-features/server/`\n\n- Clone [microsoft/vscode-html-languageservice](https://github.com/microsoft/vscode-html-languageservice)\n- Run `npm i` in `vscode-html-languageservice`\n- Run `npm link` in `vscode-html-languageservice`. This will compile and link `vscode-html-languageservice`\n- In `html-language-features/server/`, run `npm link vscode-html-languageservice`\n\n#### Testing the development version of `vscode-html-languageservice`\n\n- Open both `vscode-html-languageservice` and this extension in two windows or with a single window with the[multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) feature\n- Run `npm run watch` at `html-languagefeatures/server/` to recompile this extension with the linked version of `vscode-html-languageservice`\n- Make some changes in `vscode-html-languageservice`\n- Now when you run `Launch Extension` debug target, the launched instance will use your development version of `vscode-html-languageservice`. You can interactively test the language features.\n"
  },
  {
    "path": "extensions/html-language-features/README.md",
    "content": "# Language Features for HTML\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [HTML in Visual Studio Code](https://code.visualstudio.com/docs/languages/html) to learn about the features of this extension.\n\nPlease read the [CONTRIBUTING.md](https://github.com/microsoft/vscode/blob/master/extensions/html-language-features/CONTRIBUTING.md) file to learn how to contribute to this extension.\n"
  },
  {
    "path": "extensions/html-language-features/build/bundleTypeScriptLibraries.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst path = require('path');\nconst fs = require('fs');\nconst child_process = require('child_process');\n\nconst generatedNote = `//\n// **NOTE**: Do not edit directly! This file is generated using \\`npm run import-typescript\\`\n//\n`;\n\nconst TYPESCRIPT_LIB_SOURCE = path.join(__dirname, '../../node_modules/typescript/lib');\nconst TYPESCRIPT_LIB_DESTINATION = path.join(__dirname, '../server/build');\n\n(function () {\n\ttry {\n\t\tfs.statSync(TYPESCRIPT_LIB_DESTINATION);\n\t} catch (err) {\n\t\tfs.mkdirSync(TYPESCRIPT_LIB_DESTINATION);\n\t}\n\timportLibs('es6');\n})();\n\n\nfunction importLibs(startLib) {\n\tfunction getFileName(name) {\n\t\treturn (name === '' ? 'lib.d.ts' : `lib.${name}.d.ts`);\n\t}\n\tfunction getVariableName(name) {\n\t\treturn (name === '' ? 'lib_dts' : `lib_${name.replace(/\\./g, '_')}_dts`);\n\t}\n\tfunction readLibFile(name) {\n\t\tvar srcPath = path.join(TYPESCRIPT_LIB_SOURCE, getFileName(name));\n\t\treturn fs.readFileSync(srcPath).toString();\n\t}\n\n\tvar queue = [];\n\tvar in_queue = {};\n\n\tvar enqueue = function (name) {\n\t\tif (in_queue[name]) {\n\t\t\treturn;\n\t\t}\n\t\tin_queue[name] = true;\n\t\tqueue.push(name);\n\t};\n\n\tenqueue(startLib);\n\n\tvar result = [];\n\twhile (queue.length > 0) {\n\t\tvar name = queue.shift();\n\t\tvar contents = readLibFile(name);\n\t\tvar lines = contents.split(/\\r\\n|\\r|\\n/);\n\n\t\tvar output = '';\n\t\tvar writeOutput = function (text) {\n\t\t\tif (output.length === 0) {\n\t\t\t\toutput = text;\n\t\t\t} else {\n\t\t\t\toutput += ` + ${text}`;\n\t\t\t}\n\t\t};\n\t\tvar outputLines = [];\n\t\tvar flushOutputLines = function () {\n\t\t\twriteOutput(`\"${escapeText(outputLines.join('\\n'))}\"`);\n\t\t\toutputLines = [];\n\t\t};\n\t\tvar deps = [];\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tlet m = lines[i].match(/\\/\\/\\/\\s*<reference\\s*lib=\"([^\"]+)\"/);\n\t\t\tif (m) {\n\t\t\t\tflushOutputLines();\n\t\t\t\twriteOutput(getVariableName(m[1]));\n\t\t\t\tdeps.push(getVariableName(m[1]));\n\t\t\t\tenqueue(m[1]);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutputLines.push(lines[i]);\n\t\t}\n\t\tflushOutputLines();\n\n\t\tresult.push({\n\t\t\tname: getVariableName(name),\n\t\t\tdeps: deps,\n\t\t\toutput: output\n\t\t});\n\t}\n\n\tvar strResult = `/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n${generatedNote}`;\n\t// Do a topological sort\n\twhile (result.length > 0) {\n\t\tfor (let i = result.length - 1; i >= 0; i--) {\n\t\t\tif (result[i].deps.length === 0) {\n\t\t\t\t// emit this node\n\t\t\t\tstrResult += `\\nexport const ${result[i].name}: string = ${result[i].output};\\n`;\n\n\t\t\t\t// mark dep as resolved\n\t\t\t\tfor (let j = 0; j < result.length; j++) {\n\t\t\t\t\tfor (let k = 0; k < result[j].deps.length; k++) {\n\t\t\t\t\t\tif (result[j].deps[k] === result[i].name) {\n\t\t\t\t\t\t\tresult[j].deps.splice(k, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// remove from result\n\t\t\t\tresult.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar dstPath = path.join(TYPESCRIPT_LIB_DESTINATION, 'lib.ts');\n\tfs.writeFileSync(dstPath, strResult);\n}\n\n/**\n * Escape text such that it can be used in a javascript string enclosed by double quotes (\")\n */\nfunction escapeText(text) {\n\t// See http://www.javascriptkit.com/jsref/escapesequence.shtml\n\tvar _backspace = '\\b'.charCodeAt(0);\n\tvar _formFeed = '\\f'.charCodeAt(0);\n\tvar _newLine = '\\n'.charCodeAt(0);\n\tvar _nullChar = 0;\n\tvar _carriageReturn = '\\r'.charCodeAt(0);\n\tvar _tab = '\\t'.charCodeAt(0);\n\tvar _verticalTab = '\\v'.charCodeAt(0);\n\tvar _backslash = '\\\\'.charCodeAt(0);\n\tvar _doubleQuote = '\"'.charCodeAt(0);\n\n\tvar startPos = 0, chrCode, replaceWith = null, resultPieces = [];\n\n\tfor (var i = 0, len = text.length; i < len; i++) {\n\t\tchrCode = text.charCodeAt(i);\n\t\tswitch (chrCode) {\n\t\t\tcase _backspace:\n\t\t\t\treplaceWith = '\\\\b';\n\t\t\t\tbreak;\n\t\t\tcase _formFeed:\n\t\t\t\treplaceWith = '\\\\f';\n\t\t\t\tbreak;\n\t\t\tcase _newLine:\n\t\t\t\treplaceWith = '\\\\n';\n\t\t\t\tbreak;\n\t\t\tcase _nullChar:\n\t\t\t\treplaceWith = '\\\\0';\n\t\t\t\tbreak;\n\t\t\tcase _carriageReturn:\n\t\t\t\treplaceWith = '\\\\r';\n\t\t\t\tbreak;\n\t\t\tcase _tab:\n\t\t\t\treplaceWith = '\\\\t';\n\t\t\t\tbreak;\n\t\t\tcase _verticalTab:\n\t\t\t\treplaceWith = '\\\\v';\n\t\t\t\tbreak;\n\t\t\tcase _backslash:\n\t\t\t\treplaceWith = '\\\\\\\\';\n\t\t\t\tbreak;\n\t\t\tcase _doubleQuote:\n\t\t\t\treplaceWith = '\\\\\"';\n\t\t\t\tbreak;\n\t\t}\n\t\tif (replaceWith !== null) {\n\t\t\tresultPieces.push(text.substring(startPos, i));\n\t\t\tresultPieces.push(replaceWith);\n\t\t\tstartPos = i + 1;\n\t\t\treplaceWith = null;\n\t\t}\n\t}\n\tresultPieces.push(text.substring(startPos, len));\n\treturn resultPieces.join('');\n}\n"
  },
  {
    "path": "extensions/html-language-features/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"js-beautify\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/beautify-web/js-beautify\",\n\t\t\t\t\t\"commitHash\": \"12e73365f9d0b203843c5b7c22d7017845a7c580\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.6.8\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"other\",\n\t\t\t\t\"other\": {\n\t\t\t\t\t\"name\": \"HTML 5.1 W3C Working Draft\",\n\t\t\t\t\t\"downloadUrl\": \"http://www.w3.org/TR/2015/WD-html51-20151008/\",\n\t\t\t\t\t\"version\": \"08 October 2015\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang). This software or document includes material copied \",\n\t\t\t\t\"from or derived from HTML 5.1 W3C Working Draft (http://www.w3.org/TR/2015/WD-html51-20151008/.)\",\n\t\t\t\t\"\",\n\t\t\t\t\"THIS DOCUMENT IS PROVIDED \\\"AS IS,\\\" AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT \",\n\t\t\t\t\"NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF \",\n\t\t\t\t\"THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY \",\n\t\t\t\t\"PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.\",\n\t\t\t\t\"\",\n\t\t\t\t\"COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE \",\n\t\t\t\t\"DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to this document or its contents\",\n\t\t\t\t\"without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders.\"\n\t\t\t],\n\t\t\t\"license\": \"W3C Document License\",\n\t\t\t\"version\": \"08 October 2015\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Ionic documentation\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/ionic-team/ionic-site\",\n\t\t\t\t\t\"commitHash\": \"e952bde103470738e19a456ec4acb0f1e650b619\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright Drifty Co. http://drifty.com/.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Apache License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Version 2.0, January 2004\",\n\t\t\t\t\"\",\n\t\t\t\t\"http://www.apache.org/licenses/\",\n\t\t\t\t\"\",\n\t\t\t\t\"TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\",\n\t\t\t\t\"\",\n\t\t\t\t\"1. Definitions.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"License\\\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Licensor\\\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Legal Entity\\\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \\\"control\\\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"You\\\" (or \\\"Your\\\") shall mean an individual or Legal Entity exercising permissions granted by this License.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Source\\\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Object\\\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Work\\\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Derivative Works\\\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Contribution\\\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \\\"submitted\\\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \\\"Not a Contribution.\\\"\",\n\t\t\t\t\"\",\n\t\t\t\t\"\\\"Contributor\\\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\",\n\t\t\t\t\"\",\n\t\t\t\t\"2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\",\n\t\t\t\t\"\",\n\t\t\t\t\"3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\",\n\t\t\t\t\"\",\n\t\t\t\t\"4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"You must give any other recipients of the Work or Derivative Works a copy of this License; and\",\n\t\t\t\t\"\",\n\t\t\t\t\"You must cause any modified files to carry prominent notices stating that You changed the files; and\",\n\t\t\t\t\"\",\n\t\t\t\t\"You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\",\n\t\t\t\t\"\",\n\t\t\t\t\"If the Work includes a \\\"NOTICE\\\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\",\n\t\t\t\t\"\",\n\t\t\t\t\"5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\",\n\t\t\t\t\"\",\n\t\t\t\t\"6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\",\n\t\t\t\t\"\",\n\t\t\t\t\"7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\",\n\t\t\t\t\"\",\n\t\t\t\t\"8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\",\n\t\t\t\t\"\",\n\t\t\t\t\"9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\",\n\t\t\t\t\"\",\n\t\t\t\t\"END OF TERMS AND CONDITIONS\"\n\t\t\t],\n\t\t\t\"license\": \"Apache-2.0\",\n\t\t\t\"version\": \"1.2.4\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/src/autoInsertion.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { window, workspace, Disposable, TextDocument, Position, SnippetString, TextDocumentChangeEvent, TextDocumentChangeReason, TextDocumentContentChangeEvent } from 'vscode';\nimport { Runtime } from './htmlClient';\nimport { LanguageParticipants } from './languageParticipants';\n\nexport function activateAutoInsertion(provider: (kind: 'autoQuote' | 'autoClose', document: TextDocument, position: Position) => Thenable<string>, languageParticipants: LanguageParticipants, runtime: Runtime): Disposable {\n\tconst disposables: Disposable[] = [];\n\tworkspace.onDidChangeTextDocument(onDidChangeTextDocument, null, disposables);\n\n\tlet anyIsEnabled = false;\n\tconst isEnabled = {\n\t\t'autoQuote': false,\n\t\t'autoClose': false\n\t};\n\tupdateEnabledState();\n\twindow.onDidChangeActiveTextEditor(updateEnabledState, null, disposables);\n\n\tlet timeout: Disposable | undefined = undefined;\n\n\tdisposables.push({\n\t\tdispose: () => {\n\t\t\ttimeout?.dispose();\n\t\t}\n\t});\n\n\tfunction updateEnabledState() {\n\t\tanyIsEnabled = false;\n\t\tconst editor = window.activeTextEditor;\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\t\tconst document = editor.document;\n\t\tif (!languageParticipants.useAutoInsert(document.languageId)) {\n\t\t\treturn;\n\t\t}\n\t\tconst configurations = workspace.getConfiguration(undefined, document.uri);\n\t\tisEnabled['autoQuote'] = configurations.get<boolean>('html.autoCreateQuotes') ?? false;\n\t\tisEnabled['autoClose'] = configurations.get<boolean>('html.autoClosingTags') ?? false;\n\t\tanyIsEnabled = isEnabled['autoQuote'] || isEnabled['autoClose'];\n\t}\n\n\tfunction onDidChangeTextDocument({ document, contentChanges, reason }: TextDocumentChangeEvent) {\n\t\tif (!anyIsEnabled || contentChanges.length === 0 || reason === TextDocumentChangeReason.Undo || reason === TextDocumentChangeReason.Redo) {\n\t\t\treturn;\n\t\t}\n\t\tconst activeDocument = window.activeTextEditor && window.activeTextEditor.document;\n\t\tif (document !== activeDocument) {\n\t\t\treturn;\n\t\t}\n\t\tif (timeout) {\n\t\t\ttimeout.dispose();\n\t\t}\n\n\t\tconst lastChange = contentChanges[contentChanges.length - 1];\n\t\tif (lastChange.rangeLength === 0 && isSingleLine(lastChange.text)) {\n\t\t\tconst lastCharacter = lastChange.text[lastChange.text.length - 1];\n\t\t\tif (isEnabled['autoQuote'] && lastCharacter === '=') {\n\t\t\t\tdoAutoInsert('autoQuote', document, lastChange);\n\t\t\t} else if (isEnabled['autoClose'] && (lastCharacter === '>' || lastCharacter === '/')) {\n\t\t\t\tdoAutoInsert('autoClose', document, lastChange);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isSingleLine(text: string): boolean {\n\t\treturn !/\\n/.test(text);\n\t}\n\n\tfunction doAutoInsert(kind: 'autoQuote' | 'autoClose', document: TextDocument, lastChange: TextDocumentContentChangeEvent) {\n\t\tconst rangeStart = lastChange.range.start;\n\t\tconst version = document.version;\n\t\ttimeout = runtime.timer.setTimeout(() => {\n\t\t\tconst position = new Position(rangeStart.line, rangeStart.character + lastChange.text.length);\n\t\t\tprovider(kind, document, position).then(text => {\n\t\t\t\tif (text && isEnabled[kind]) {\n\t\t\t\t\tconst activeEditor = window.activeTextEditor;\n\t\t\t\t\tif (activeEditor) {\n\t\t\t\t\t\tconst activeDocument = activeEditor.document;\n\t\t\t\t\t\tif (document === activeDocument && activeDocument.version === version) {\n\t\t\t\t\t\t\tconst selections = activeEditor.selections;\n\t\t\t\t\t\t\tif (selections.length && selections.some(s => s.active.isEqual(position))) {\n\t\t\t\t\t\t\t\tactiveEditor.insertSnippet(new SnippetString(text), selections.map(s => s.active));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tactiveEditor.insertSnippet(new SnippetString(text), position);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\ttimeout = undefined;\n\t\t}, 100);\n\t}\n\treturn Disposable.from(...disposables);\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/src/browser/htmlClientMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, ExtensionContext, Uri, l10n } from 'vscode';\nimport { LanguageClientOptions } from 'vscode-languageclient';\nimport { startClient, LanguageClientConstructor, AsyncDisposable } from '../htmlClient';\nimport { LanguageClient } from 'vscode-languageclient/browser';\n\nlet client: AsyncDisposable | undefined;\n\n// this method is called when vs code is activated\nexport async function activate(context: ExtensionContext) {\n\tconst serverMain = Uri.joinPath(context.extensionUri, 'server/dist/browser/htmlServerMain.js');\n\ttry {\n\t\tconst worker = new Worker(serverMain.toString());\n\t\tworker.postMessage({ i10lLocation: l10n.uri?.toString(false) ?? '' });\n\n\t\tconst newLanguageClient: LanguageClientConstructor = (id: string, name: string, clientOptions: LanguageClientOptions) => {\n\t\t\treturn new LanguageClient(id, name, worker, clientOptions);\n\t\t};\n\n\t\tconst timer = {\n\t\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t\t}\n\t\t};\n\n\t\tclient = await startClient(context, newLanguageClient, { TextDecoder, timer });\n\n\t} catch (e) {\n\t\tconsole.log(e);\n\t}\n}\n\nexport async function deactivate(): Promise<void> {\n\tif (client) {\n\t\tawait client.dispose();\n\t\tclient = undefined;\n\t}\n}\n\n"
  },
  {
    "path": "extensions/html-language-features/client/src/customData.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { workspace, extensions, Uri, EventEmitter, Disposable } from 'vscode';\nimport { Runtime } from './htmlClient';\nimport { Utils } from 'vscode-uri';\n\n\nexport function getCustomDataSource(runtime: Runtime, toDispose: Disposable[]) {\n\tlet localExtensionUris = new Set<string>();\n\tlet externalExtensionUris = new Set<string>();\n\tconst workspaceUris = new Set<string>();\n\n\tcollectInWorkspaces(workspaceUris);\n\tcollectInExtensions(localExtensionUris, externalExtensionUris);\n\n\tconst onChange = new EventEmitter<void>();\n\n\ttoDispose.push(extensions.onDidChange(_ => {\n\t\tconst newLocalExtensionUris = new Set<string>();\n\t\tconst newExternalExtensionUris = new Set<string>();\n\t\tcollectInExtensions(newLocalExtensionUris, newExternalExtensionUris);\n\t\tif (hasChanges(newLocalExtensionUris, localExtensionUris) || hasChanges(newExternalExtensionUris, externalExtensionUris)) {\n\t\t\tlocalExtensionUris = newLocalExtensionUris;\n\t\t\texternalExtensionUris = newExternalExtensionUris;\n\t\t\tonChange.fire();\n\t\t}\n\t}));\n\ttoDispose.push(workspace.onDidChangeConfiguration(e => {\n\t\tif (e.affectsConfiguration('html.customData')) {\n\t\t\tworkspaceUris.clear();\n\t\t\tcollectInWorkspaces(workspaceUris);\n\t\t\tonChange.fire();\n\t\t}\n\t}));\n\n\ttoDispose.push(workspace.onDidChangeTextDocument(e => {\n\t\tconst path = e.document.uri.toString();\n\t\tif (externalExtensionUris.has(path) || workspaceUris.has(path)) {\n\t\t\tonChange.fire();\n\t\t}\n\t}));\n\n\treturn {\n\t\tget uris() {\n\t\t\treturn [...localExtensionUris].concat([...externalExtensionUris], [...workspaceUris]);\n\t\t},\n\t\tget onDidChange() {\n\t\t\treturn onChange.event;\n\t\t},\n\t\tgetContent(uriString: string): Thenable<string> {\n\t\t\tconst uri = Uri.parse(uriString);\n\t\t\tif (localExtensionUris.has(uriString)) {\n\t\t\t\treturn workspace.fs.readFile(uri).then(buffer => {\n\t\t\t\t\treturn new runtime.TextDecoder().decode(buffer);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn workspace.openTextDocument(uri).then(doc => {\n\t\t\t\treturn doc.getText();\n\t\t\t});\n\t\t}\n\t};\n}\n\nfunction hasChanges(s1: Set<string>, s2: Set<string>) {\n\tif (s1.size !== s2.size) {\n\t\treturn true;\n\t}\n\tfor (const uri of s1) {\n\t\tif (!s2.has(uri)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction isURI(uriOrPath: string) {\n\treturn /^(?<scheme>\\w[\\w\\d+.-]*):/.test(uriOrPath);\n}\n\n\nfunction collectInWorkspaces(workspaceUris: Set<string>): Set<string> {\n\tconst workspaceFolders = workspace.workspaceFolders;\n\n\tconst dataPaths = new Set<string>();\n\n\tif (!workspaceFolders) {\n\t\treturn dataPaths;\n\t}\n\n\tconst collect = (uriOrPaths: string[] | undefined, rootFolder: Uri) => {\n\t\tif (Array.isArray(uriOrPaths)) {\n\t\t\tfor (const uriOrPath of uriOrPaths) {\n\t\t\t\tif (typeof uriOrPath === 'string') {\n\t\t\t\t\tif (!isURI(uriOrPath)) {\n\t\t\t\t\t\t// path in the workspace\n\t\t\t\t\t\tworkspaceUris.add(Utils.resolvePath(rootFolder, uriOrPath).toString());\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// external uri\n\t\t\t\t\t\tworkspaceUris.add(uriOrPath);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfor (let i = 0; i < workspaceFolders.length; i++) {\n\t\tconst folderUri = workspaceFolders[i].uri;\n\t\tconst allHtmlConfig = workspace.getConfiguration('html', folderUri);\n\t\tconst customDataInspect = allHtmlConfig.inspect<string[]>('customData');\n\t\tif (customDataInspect) {\n\t\t\tcollect(customDataInspect.workspaceFolderValue, folderUri);\n\t\t\tif (i === 0) {\n\t\t\t\tif (workspace.workspaceFile) {\n\t\t\t\t\tcollect(customDataInspect.workspaceValue, workspace.workspaceFile);\n\t\t\t\t}\n\t\t\t\tcollect(customDataInspect.globalValue, folderUri);\n\t\t\t}\n\t\t}\n\n\t}\n\treturn dataPaths;\n}\n\nfunction collectInExtensions(localExtensionUris: Set<string>, externalUris: Set<string>): void {\n\tfor (const extension of extensions.allAcrossExtensionHosts) {\n\t\tconst customData = extension.packageJSON?.contributes?.html?.customData;\n\t\tif (Array.isArray(customData)) {\n\t\t\tfor (const uriOrPath of customData) {\n\t\t\t\tif (!isURI(uriOrPath)) {\n\t\t\t\t\t// relative path in an extension\n\t\t\t\t\tlocalExtensionUris.add(Uri.joinPath(extension.extensionUri, uriOrPath).toString());\n\t\t\t\t} else {\n\t\t\t\t\t// external uri\n\t\t\t\t\texternalUris.add(uriOrPath);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/src/htmlClient.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nimport {\n\tlanguages, ExtensionContext, Position, TextDocument, Range, CompletionItem, CompletionItemKind, SnippetString, workspace, extensions,\n\tDisposable, FormattingOptions, CancellationToken, ProviderResult, TextEdit, CompletionContext, CompletionList, SemanticTokensLegend,\n\tDocumentSemanticTokensProvider, DocumentRangeSemanticTokensProvider, SemanticTokens, window, commands, OutputChannel, l10n\n} from 'vscode';\nimport {\n\tLanguageClientOptions, RequestType, DocumentRangeFormattingParams,\n\tDocumentRangeFormattingRequest, ProvideCompletionItemsSignature, TextDocumentIdentifier, RequestType0, Range as LspRange, Position as LspPosition, NotificationType, BaseLanguageClient\n} from 'vscode-languageclient';\nimport { FileSystemProvider, serveFileSystemRequests } from './requests';\nimport { getCustomDataSource } from './customData';\nimport { activateAutoInsertion } from './autoInsertion';\nimport { getLanguageParticipants, LanguageParticipants } from './languageParticipants';\n\nnamespace CustomDataChangedNotification {\n\texport const type: NotificationType<string[]> = new NotificationType('html/customDataChanged');\n}\n\nnamespace CustomDataContent {\n\texport const type: RequestType<string, string, any> = new RequestType('html/customDataContent');\n}\n\ninterface AutoInsertParams {\n\t/**\n\t * The auto insert kind\n\t */\n\tkind: 'autoQuote' | 'autoClose';\n\t/**\n\t * The text document.\n\t */\n\ttextDocument: TextDocumentIdentifier;\n\t/**\n\t * The position inside the text document.\n\t */\n\tposition: LspPosition;\n}\n\nnamespace AutoInsertRequest {\n\texport const type: RequestType<AutoInsertParams, string, any> = new RequestType('html/autoInsert');\n}\n\n// experimental: semantic tokens\ninterface SemanticTokenParams {\n\ttextDocument: TextDocumentIdentifier;\n\tranges?: LspRange[];\n}\nnamespace SemanticTokenRequest {\n\texport const type: RequestType<SemanticTokenParams, number[] | null, any> = new RequestType('html/semanticTokens');\n}\nnamespace SemanticTokenLegendRequest {\n\texport const type: RequestType0<{ types: string[]; modifiers: string[] } | null, any> = new RequestType0('html/semanticTokenLegend');\n}\n\nnamespace SettingIds {\n\texport const linkedEditing = 'editor.linkedEditing';\n\texport const formatEnable = 'html.format.enable';\n\n}\n\nexport interface TelemetryReporter {\n\tsendTelemetryEvent(eventName: string, properties?: {\n\t\t[key: string]: string;\n\t}, measurements?: {\n\t\t[key: string]: number;\n\t}): void;\n}\n\nexport type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => BaseLanguageClient;\n\nexport const languageServerDescription = l10n.t('HTML Language Server');\n\nexport interface Runtime {\n\tTextDecoder: { new(encoding?: string): { decode(buffer: ArrayBuffer): string } };\n\tfileFs?: FileSystemProvider;\n\ttelemetry?: TelemetryReporter;\n\treadonly timer: {\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable;\n\t};\n}\n\nexport interface AsyncDisposable {\n\tdispose(): Promise<void>;\n}\n\nexport async function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime): Promise<AsyncDisposable> {\n\n\tconst outputChannel = window.createOutputChannel(languageServerDescription);\n\n\tconst languageParticipants = getLanguageParticipants();\n\tcontext.subscriptions.push(languageParticipants);\n\n\tlet client: Disposable | undefined = await startClientWithParticipants(languageParticipants, newLanguageClient, outputChannel, runtime);\n\n\tconst promptForLinkedEditingKey = 'html.promptForLinkedEditing';\n\tif (extensions.getExtension('formulahendry.auto-rename-tag') !== undefined && (context.globalState.get(promptForLinkedEditingKey) !== false)) {\n\t\tconst config = workspace.getConfiguration('editor', { languageId: 'html' });\n\t\tif (!config.get('linkedEditing') && !config.get('renameOnType')) {\n\t\t\tconst activeEditorListener = window.onDidChangeActiveTextEditor(async e => {\n\t\t\t\tif (e && languageParticipants.hasLanguage(e.document.languageId)) {\n\t\t\t\t\tcontext.globalState.update(promptForLinkedEditingKey, false);\n\t\t\t\t\tactiveEditorListener.dispose();\n\t\t\t\t\tconst configure = l10n.t('Configure');\n\t\t\t\t\tconst res = await window.showInformationMessage(l10n.t('VS Code now has built-in support for auto-renaming tags. Do you want to enable it?'), configure);\n\t\t\t\t\tif (res === configure) {\n\t\t\t\t\t\tcommands.executeCommand('workbench.action.openSettings', SettingIds.linkedEditing);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tcontext.subscriptions.push(activeEditorListener);\n\t\t}\n\t}\n\n\tlet restartTrigger: Disposable | undefined;\n\tlanguageParticipants.onDidChange(() => {\n\t\tif (restartTrigger) {\n\t\t\trestartTrigger.dispose();\n\t\t}\n\t\trestartTrigger = runtime.timer.setTimeout(async () => {\n\t\t\tif (client) {\n\t\t\t\toutputChannel.appendLine('Extensions have changed, restarting HTML server...');\n\t\t\t\toutputChannel.appendLine('');\n\t\t\t\tconst oldClient = client;\n\t\t\t\tclient = undefined;\n\t\t\t\tawait oldClient.dispose();\n\t\t\t\tclient = await startClientWithParticipants(languageParticipants, newLanguageClient, outputChannel, runtime);\n\t\t\t}\n\t\t}, 2000);\n\t});\n\n\treturn {\n\t\tdispose: async () => {\n\t\t\trestartTrigger?.dispose();\n\t\t\tawait client?.dispose();\n\t\t\toutputChannel.dispose();\n\t\t}\n\t};\n}\n\nasync function startClientWithParticipants(languageParticipants: LanguageParticipants, newLanguageClient: LanguageClientConstructor, outputChannel: OutputChannel, runtime: Runtime): Promise<AsyncDisposable> {\n\n\tconst toDispose: Disposable[] = [];\n\n\tconst documentSelector = languageParticipants.documentSelector;\n\tconst embeddedLanguages = { css: true, javascript: true };\n\n\tlet rangeFormatting: Disposable | undefined = undefined;\n\n\t// Options to control the language client\n\tconst clientOptions: LanguageClientOptions = {\n\t\tdocumentSelector,\n\t\tsynchronize: {\n\t\t\tconfigurationSection: ['html', 'css', 'javascript', 'js/ts'], // the settings to synchronize\n\t\t},\n\t\tinitializationOptions: {\n\t\t\tembeddedLanguages,\n\t\t\thandledSchemas: ['file'],\n\t\t\tprovideFormatter: false, // tell the server to not provide formatting capability and ignore the `html.format.enable` setting.\n\t\t\tcustomCapabilities: { rangeFormatting: { editLimit: 10000 } }\n\t\t},\n\t\tmiddleware: {\n\t\t\t// testing the replace / insert mode\n\t\t\tprovideCompletionItem(document: TextDocument, position: Position, context: CompletionContext, token: CancellationToken, next: ProvideCompletionItemsSignature): ProviderResult<CompletionItem[] | CompletionList> {\n\t\t\t\tfunction updateRanges(item: CompletionItem) {\n\t\t\t\t\tconst range = item.range;\n\t\t\t\t\tif (range instanceof Range && range.end.isAfter(position) && range.start.isBeforeOrEqual(position)) {\n\t\t\t\t\t\titem.range = { inserting: new Range(range.start, position), replacing: range };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfunction updateProposals(r: CompletionItem[] | CompletionList | null | undefined): CompletionItem[] | CompletionList | null | undefined {\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\t(Array.isArray(r) ? r : r.items).forEach(updateRanges);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\tconst isThenable = <T>(obj: ProviderResult<T>): obj is Thenable<T> => obj && (<any>obj)['then'];\n\n\t\t\t\tconst r = next(document, position, context, token);\n\t\t\t\tif (isThenable<CompletionItem[] | CompletionList | null | undefined>(r)) {\n\t\t\t\t\treturn r.then(updateProposals);\n\t\t\t\t}\n\t\t\t\treturn updateProposals(r);\n\t\t\t}\n\t\t}\n\t};\n\tclientOptions.outputChannel = outputChannel;\n\n\t// Create the language client and start the client.\n\tconst client = newLanguageClient('html', languageServerDescription, clientOptions);\n\tclient.registerProposedFeatures();\n\n\tawait client.start();\n\n\ttoDispose.push(serveFileSystemRequests(client, runtime));\n\n\tconst customDataSource = getCustomDataSource(runtime, toDispose);\n\n\tclient.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);\n\tcustomDataSource.onDidChange(() => {\n\t\tclient.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);\n\t}, undefined, toDispose);\n\ttoDispose.push(client.onRequest(CustomDataContent.type, customDataSource.getContent));\n\n\n\tconst insertRequestor = (kind: 'autoQuote' | 'autoClose', document: TextDocument, position: Position): Promise<string> => {\n\t\tconst param: AutoInsertParams = {\n\t\t\tkind,\n\t\t\ttextDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n\t\t\tposition: client.code2ProtocolConverter.asPosition(position)\n\t\t};\n\t\treturn client.sendRequest(AutoInsertRequest.type, param);\n\t};\n\n\tconst disposable = activateAutoInsertion(insertRequestor, languageParticipants, runtime);\n\ttoDispose.push(disposable);\n\n\tconst disposable2 = client.onTelemetry(e => {\n\t\truntime.telemetry?.sendTelemetryEvent(e.key, e.data);\n\t});\n\ttoDispose.push(disposable2);\n\n\t// manually register / deregister format provider based on the `html.format.enable` setting avoiding issues with late registration. See #71652.\n\tupdateFormatterRegistration();\n\ttoDispose.push({ dispose: () => rangeFormatting && rangeFormatting.dispose() });\n\ttoDispose.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration(SettingIds.formatEnable) && updateFormatterRegistration()));\n\n\tclient.sendRequest(SemanticTokenLegendRequest.type).then(legend => {\n\t\tif (legend) {\n\t\t\tconst provider: DocumentSemanticTokensProvider & DocumentRangeSemanticTokensProvider = {\n\t\t\t\tprovideDocumentSemanticTokens(doc) {\n\t\t\t\t\tconst params: SemanticTokenParams = {\n\t\t\t\t\t\ttextDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(doc),\n\t\t\t\t\t};\n\t\t\t\t\treturn client.sendRequest(SemanticTokenRequest.type, params).then(data => {\n\t\t\t\t\t\treturn data && new SemanticTokens(new Uint32Array(data));\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tprovideDocumentRangeSemanticTokens(doc, range) {\n\t\t\t\t\tconst params: SemanticTokenParams = {\n\t\t\t\t\t\ttextDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(doc),\n\t\t\t\t\t\tranges: [client.code2ProtocolConverter.asRange(range)]\n\t\t\t\t\t};\n\t\t\t\t\treturn client.sendRequest(SemanticTokenRequest.type, params).then(data => {\n\t\t\t\t\t\treturn data && new SemanticTokens(new Uint32Array(data));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t\ttoDispose.push(languages.registerDocumentSemanticTokensProvider(documentSelector, provider, new SemanticTokensLegend(legend.types, legend.modifiers)));\n\t\t}\n\t});\n\n\tfunction updateFormatterRegistration() {\n\t\tconst formatEnabled = workspace.getConfiguration().get(SettingIds.formatEnable);\n\t\tif (!formatEnabled && rangeFormatting) {\n\t\t\trangeFormatting.dispose();\n\t\t\trangeFormatting = undefined;\n\t\t} else if (formatEnabled && !rangeFormatting) {\n\t\t\trangeFormatting = languages.registerDocumentRangeFormattingEditProvider(documentSelector, {\n\t\t\t\tprovideDocumentRangeFormattingEdits(document: TextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]> {\n\t\t\t\t\tconst filesConfig = workspace.getConfiguration('files', document);\n\t\t\t\t\tconst fileFormattingOptions = {\n\t\t\t\t\t\ttrimTrailingWhitespace: filesConfig.get<boolean>('trimTrailingWhitespace'),\n\t\t\t\t\t\ttrimFinalNewlines: filesConfig.get<boolean>('trimFinalNewlines'),\n\t\t\t\t\t\tinsertFinalNewline: filesConfig.get<boolean>('insertFinalNewline'),\n\t\t\t\t\t};\n\t\t\t\t\tconst params: DocumentRangeFormattingParams = {\n\t\t\t\t\t\ttextDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n\t\t\t\t\t\trange: client.code2ProtocolConverter.asRange(range),\n\t\t\t\t\t\toptions: client.code2ProtocolConverter.asFormattingOptions(options, fileFormattingOptions)\n\t\t\t\t\t};\n\t\t\t\t\treturn client.sendRequest(DocumentRangeFormattingRequest.type, params, token).then(\n\t\t\t\t\t\tclient.protocol2CodeConverter.asTextEdits,\n\t\t\t\t\t\t(error) => {\n\t\t\t\t\t\t\tclient.handleFailedRequest(DocumentRangeFormattingRequest.type, undefined, error, []);\n\t\t\t\t\t\t\treturn Promise.resolve([]);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tconst regionCompletionRegExpr = /^(\\s*)(<(!(-(-\\s*(#\\w*)?)?)?)?)?$/;\n\tconst htmlSnippetCompletionRegExpr = /^(\\s*)(<(h(t(m(l)?)?)?)?)?$/;\n\ttoDispose.push(languages.registerCompletionItemProvider(documentSelector, {\n\t\tprovideCompletionItems(doc, pos) {\n\t\t\tconst results: CompletionItem[] = [];\n\t\t\tconst lineUntilPos = doc.getText(new Range(new Position(pos.line, 0), pos));\n\t\t\tconst match = lineUntilPos.match(regionCompletionRegExpr);\n\t\t\tif (match) {\n\t\t\t\tconst range = new Range(new Position(pos.line, match[1].length), pos);\n\t\t\t\tconst beginProposal = new CompletionItem('#region', CompletionItemKind.Snippet);\n\t\t\t\tbeginProposal.range = range;\n\t\t\t\tbeginProposal.insertText = new SnippetString('<!-- #region $1-->');\n\t\t\t\tbeginProposal.documentation = l10n.t('Folding Region Start');\n\t\t\t\tbeginProposal.filterText = match[2];\n\t\t\t\tbeginProposal.sortText = 'za';\n\t\t\t\tresults.push(beginProposal);\n\t\t\t\tconst endProposal = new CompletionItem('#endregion', CompletionItemKind.Snippet);\n\t\t\t\tendProposal.range = range;\n\t\t\t\tendProposal.insertText = new SnippetString('<!-- #endregion -->');\n\t\t\t\tendProposal.documentation = l10n.t('Folding Region End');\n\t\t\t\tendProposal.filterText = match[2];\n\t\t\t\tendProposal.sortText = 'zb';\n\t\t\t\tresults.push(endProposal);\n\t\t\t}\n\t\t\tconst match2 = lineUntilPos.match(htmlSnippetCompletionRegExpr);\n\t\t\tif (match2 && doc.getText(new Range(new Position(0, 0), pos)).match(htmlSnippetCompletionRegExpr)) {\n\t\t\t\tconst range = new Range(new Position(pos.line, match2[1].length), pos);\n\t\t\t\tconst snippetProposal = new CompletionItem('HTML sample', CompletionItemKind.Snippet);\n\t\t\t\tsnippetProposal.range = range;\n\t\t\t\tconst content = ['<!DOCTYPE html>',\n\t\t\t\t\t'<html>',\n\t\t\t\t\t'<head>',\n\t\t\t\t\t'\\t<meta charset=\\'utf-8\\'>',\n\t\t\t\t\t'\\t<meta http-equiv=\\'X-UA-Compatible\\' content=\\'IE=edge\\'>',\n\t\t\t\t\t'\\t<title>${1:Page Title}</title>',\n\t\t\t\t\t'\\t<meta name=\\'viewport\\' content=\\'width=device-width, initial-scale=1\\'>',\n\t\t\t\t\t'\\t<link rel=\\'stylesheet\\' type=\\'text/css\\' media=\\'screen\\' href=\\'${2:main.css}\\'>',\n\t\t\t\t\t'\\t<script src=\\'${3:main.js}\\'></script>',\n\t\t\t\t\t'</head>',\n\t\t\t\t\t'<body>',\n\t\t\t\t\t'\\t$0',\n\t\t\t\t\t'</body>',\n\t\t\t\t\t'</html>'].join('\\n');\n\t\t\t\tsnippetProposal.insertText = new SnippetString(content);\n\t\t\t\tsnippetProposal.documentation = l10n.t('Simple HTML5 starting point');\n\t\t\t\tsnippetProposal.filterText = match2[2];\n\t\t\t\tsnippetProposal.sortText = 'za';\n\t\t\t\tresults.push(snippetProposal);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\t}));\n\n\treturn {\n\t\tdispose: async () => {\n\t\t\tawait client.stop();\n\t\t\ttoDispose.forEach(d => d.dispose());\n\t\t\trangeFormatting?.dispose();\n\t\t}\n\t};\n\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/src/languageParticipants.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Event, EventEmitter, extensions } from 'vscode';\n\n/**\n * HTML language participant contribution.\n */\ninterface LanguageParticipantContribution {\n\t/**\n\t * The id of the language which participates with the HTML language server.\n\t */\n\tlanguageId: string;\n\t/**\n\t * true if the language activates the auto insertion and false otherwise.\n\t */\n\tautoInsert?: boolean;\n}\n\nexport interface LanguageParticipants {\n\treadonly onDidChange: Event<void>;\n\treadonly documentSelector: string[];\n\thasLanguage(languageId: string): boolean;\n\tuseAutoInsert(languageId: string): boolean;\n\tdispose(): void;\n}\n\nexport function getLanguageParticipants(): LanguageParticipants {\n\tconst onDidChangeEmmiter = new EventEmitter<void>();\n\tlet languages = new Set<string>();\n\tlet autoInsert = new Set<string>();\n\n\tfunction update() {\n\t\tconst oldLanguages = languages, oldAutoInsert = autoInsert;\n\n\t\tlanguages = new Set();\n\t\tlanguages.add('html');\n\t\tautoInsert = new Set();\n\t\tautoInsert.add('html');\n\n\t\tfor (const extension of extensions.allAcrossExtensionHosts) {\n\t\t\tconst htmlLanguageParticipants = extension.packageJSON?.contributes?.htmlLanguageParticipants as LanguageParticipantContribution[];\n\t\t\tif (Array.isArray(htmlLanguageParticipants)) {\n\t\t\t\tfor (const htmlLanguageParticipant of htmlLanguageParticipants) {\n\t\t\t\t\tconst languageId = htmlLanguageParticipant.languageId;\n\t\t\t\t\tif (typeof languageId === 'string') {\n\t\t\t\t\t\tlanguages.add(languageId);\n\t\t\t\t\t\tif (htmlLanguageParticipant.autoInsert !== false) {\n\t\t\t\t\t\t\tautoInsert.add(languageId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !isEqualSet(languages, oldLanguages) || !isEqualSet(autoInsert, oldAutoInsert);\n\t}\n\tupdate();\n\n\tconst changeListener = extensions.onDidChange(_ => {\n\t\tif (update()) {\n\t\t\tonDidChangeEmmiter.fire();\n\t\t}\n\t});\n\n\treturn {\n\t\tonDidChange: onDidChangeEmmiter.event,\n\t\tget documentSelector() { return Array.from(languages); },\n\t\thasLanguage(languageId: string) { return languages.has(languageId); },\n\t\tuseAutoInsert(languageId: string) { return autoInsert.has(languageId); },\n\t\tdispose: () => changeListener.dispose()\n\t};\n}\n\nfunction isEqualSet<T>(s1: Set<T>, s2: Set<T>) {\n\tif (s1.size !== s2.size) {\n\t\treturn false;\n\t}\n\tfor (const e of s1) {\n\t\tif (!s2.has(e)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/src/node/htmlClientMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { getNodeFileFS } from './nodeFs';\nimport { Disposable, ExtensionContext, l10n } from 'vscode';\nimport { startClient, LanguageClientConstructor, AsyncDisposable } from '../htmlClient';\nimport { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient } from 'vscode-languageclient/node';\nimport { TextDecoder } from 'util';\nimport * as fs from 'fs';\nimport TelemetryReporter from '@vscode/extension-telemetry';\n\n\nlet telemetry: TelemetryReporter | undefined;\nlet client: AsyncDisposable | undefined;\n\n// this method is called when vs code is activated\nexport async function activate(context: ExtensionContext) {\n\n\tconst clientPackageJSON = getPackageInfo(context);\n\ttelemetry = new TelemetryReporter(clientPackageJSON.aiKey);\n\n\tconst serverMain = `./server/${clientPackageJSON.main.indexOf('/dist/') !== -1 ? 'dist' : 'out'}/node/htmlServerMain`;\n\tconst serverModule = context.asAbsolutePath(serverMain);\n\n\t// The debug options for the server\n\tconst debugOptions = { execArgv: ['--nolazy', '--inspect=' + (8000 + Math.round(Math.random() * 999))] };\n\n\t// If the extension is launch in debug mode the debug server options are use\n\t// Otherwise the run options are used\n\tconst serverOptions: ServerOptions = {\n\t\trun: { module: serverModule, transport: TransportKind.ipc },\n\t\tdebug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions }\n\t};\n\n\tconst newLanguageClient: LanguageClientConstructor = (id: string, name: string, clientOptions: LanguageClientOptions) => {\n\t\treturn new LanguageClient(id, name, serverOptions, clientOptions);\n\t};\n\n\tconst timer = {\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t};\n\n\n\t// pass the location of the localization bundle to the server\n\tprocess.env['VSCODE_L10N_BUNDLE_LOCATION'] = l10n.uri?.toString() ?? '';\n\n\tclient = await startClient(context, newLanguageClient, { fileFs: getNodeFileFS(), TextDecoder, telemetry, timer });\n}\n\nexport async function deactivate(): Promise<void> {\n\tif (client) {\n\t\tawait client.dispose();\n\t\tclient = undefined;\n\t}\n}\n\ninterface IPackageInfo {\n\tname: string;\n\tversion: string;\n\taiKey: string;\n\tmain: string;\n}\n\nfunction getPackageInfo(context: ExtensionContext): IPackageInfo {\n\tconst location = context.asAbsolutePath('./package.json');\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(location).toString());\n\t} catch (e) {\n\t\tconsole.log(`Problems reading ${location}: ${e}`);\n\t\treturn { name: '', version: '', aiKey: '', main: '' };\n\t}\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/src/node/nodeFs.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs';\nimport { Uri } from 'vscode';\nimport { FileSystemProvider, FileType } from '../requests';\n\nexport function getNodeFileFS(): FileSystemProvider {\n\tfunction ensureFileUri(location: string) {\n\t\tif (!location.startsWith('file:')) {\n\t\t\tthrow new Error('fileRequestService can only handle file URLs');\n\t\t}\n\t}\n\treturn {\n\t\tstat(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst uri = Uri.parse(location);\n\t\t\t\tfs.stat(uri.fsPath, (err, stats) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\t\t\t\treturn c({ type: FileType.Unknown, ctime: -1, mtime: -1, size: -1 });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet type = FileType.Unknown;\n\t\t\t\t\tif (stats.isFile()) {\n\t\t\t\t\t\ttype = FileType.File;\n\t\t\t\t\t} else if (stats.isDirectory()) {\n\t\t\t\t\t\ttype = FileType.Directory;\n\t\t\t\t\t} else if (stats.isSymbolicLink()) {\n\t\t\t\t\t\ttype = FileType.SymbolicLink;\n\t\t\t\t\t}\n\n\t\t\t\t\tc({\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tctime: stats.ctime.getTime(),\n\t\t\t\t\t\tmtime: stats.mtime.getTime(),\n\t\t\t\t\t\tsize: stats.size\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\treadDirectory(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst path = Uri.parse(location).fsPath;\n\n\t\t\t\tfs.readdir(path, { withFileTypes: true }, (err, children) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t}\n\t\t\t\t\tc(children.map(stat => {\n\t\t\t\t\t\tif (stat.isSymbolicLink()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.SymbolicLink];\n\t\t\t\t\t\t} else if (stat.isDirectory()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Directory];\n\t\t\t\t\t\t} else if (stat.isFile()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.File];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Unknown];\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/src/requests.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Uri, workspace, Disposable } from 'vscode';\nimport { RequestType, BaseLanguageClient } from 'vscode-languageclient';\nimport { Runtime } from './htmlClient';\n\nexport namespace FsStatRequest {\n\texport const type: RequestType<string, FileStat, any> = new RequestType('fs/stat');\n}\n\nexport namespace FsReadDirRequest {\n\texport const type: RequestType<string, [string, FileType][], any> = new RequestType('fs/readDir');\n}\n\nexport function serveFileSystemRequests(client: BaseLanguageClient, runtime: Runtime): Disposable {\n\tconst disposables = [];\n\tdisposables.push(client.onRequest(FsReadDirRequest.type, (uriString: string) => {\n\t\tconst uri = Uri.parse(uriString);\n\t\tif (uri.scheme === 'file' && runtime.fileFs) {\n\t\t\treturn runtime.fileFs.readDirectory(uriString);\n\t\t}\n\t\treturn workspace.fs.readDirectory(uri);\n\t}));\n\tdisposables.push(client.onRequest(FsStatRequest.type, (uriString: string) => {\n\t\tconst uri = Uri.parse(uriString);\n\t\tif (uri.scheme === 'file' && runtime.fileFs) {\n\t\t\treturn runtime.fileFs.stat(uriString);\n\t\t}\n\t\treturn workspace.fs.stat(uri);\n\t}));\n\treturn Disposable.from(...disposables);\n}\n\nexport enum FileType {\n\t/**\n\t * The file type is unknown.\n\t */\n\tUnknown = 0,\n\t/**\n\t * A regular file.\n\t */\n\tFile = 1,\n\t/**\n\t * A directory.\n\t */\n\tDirectory = 2,\n\t/**\n\t * A symbolic link to a file.\n\t */\n\tSymbolicLink = 64\n}\nexport interface FileStat {\n\t/**\n\t * The type of the file, e.g. is a regular file, a directory, or symbolic link\n\t * to a file.\n\t */\n\ttype: FileType;\n\t/**\n\t * The creation timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tctime: number;\n\t/**\n\t * The modification timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tmtime: number;\n\t/**\n\t * The size in bytes.\n\t */\n\tsize: number;\n}\n\nexport interface FileSystemProvider {\n\tstat(uri: string): Promise<FileStat>;\n\treadDirectory(uri: string): Promise<[string, FileType][]>;\n}\n"
  },
  {
    "path": "extensions/html-language-features/client/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"lib\": [\n\t\t\t\"webworker\"\n\t\t],\n\t\t\"module\": \"Node16\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../../src/vscode-dts/vscode.proposed.extensionsAny.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/html-language-features/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\nconst path = require('path');\n\nmodule.exports = withBrowserDefaults({\n\tcontext: path.join(__dirname, 'client'),\n\tentry: {\n\t\textension: './src/browser/htmlClientMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'htmlClientMain.js',\n\t\tpath: path.join(__dirname, 'client', 'dist', 'browser')\n\t}\n});\n"
  },
  {
    "path": "extensions/html-language-features/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\nconst path = require('path');\n\nmodule.exports = withDefaults({\n\tcontext: path.join(__dirname, 'client'),\n\tentry: {\n\t\textension: './src/node/htmlClientMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'htmlClientMain.js',\n\t\tpath: path.join(__dirname, 'client', 'dist', 'node')\n\t}\n});\n"
  },
  {
    "path": "extensions/html-language-features/package.json",
    "content": "{\n  \"name\": \"html-language-features\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"engines\": {\n    \"vscode\": \"^1.77.0\"\n  },\n  \"icon\": \"icons/html.png\",\n  \"activationEvents\": [\n    \"onLanguage:html\",\n    \"onLanguage:handlebars\"\n  ],\n  \"enabledApiProposals\": [\n    \"extensionsAny\"\n  ],\n  \"main\": \"./client/out/node/htmlClientMain\",\n  \"browser\": \"./client/dist/browser/htmlClientMain\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:html-language-features-client compile-extension:html-language-features-server\",\n    \"watch\": \"npx gulp watch-extension:html-language-features-client watch-extension:html-language-features-server\",\n    \"install-client-next\": \"npm install vscode-languageclient@next\"\n  },\n  \"categories\": [\n    \"Programming Languages\"\n  ],\n  \"contributes\": {\n    \"configuration\": {\n      \"id\": \"html\",\n      \"order\": 20,\n      \"type\": \"object\",\n      \"title\": \"HTML\",\n      \"properties\": {\n        \"html.completion.attributeDefaultValue\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"enum\": [\n            \"doublequotes\",\n            \"singlequotes\",\n            \"empty\"\n          ],\n          \"enumDescriptions\": [\n            \"%html.completion.attributeDefaultValue.doublequotes%\",\n            \"%html.completion.attributeDefaultValue.singlequotes%\",\n            \"%html.completion.attributeDefaultValue.empty%\"\n          ],\n          \"default\": \"doublequotes\",\n          \"markdownDescription\": \"%html.completion.attributeDefaultValue%\"\n        },\n        \"html.customData\": {\n          \"type\": \"array\",\n          \"markdownDescription\": \"%html.customData.desc%\",\n          \"default\": [],\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"scope\": \"resource\"\n        },\n        \"html.format.enable\": {\n          \"type\": \"boolean\",\n          \"scope\": \"window\",\n          \"default\": true,\n          \"description\": \"%html.format.enable.desc%\"\n        },\n        \"html.format.wrapLineLength\": {\n          \"type\": \"integer\",\n          \"scope\": \"resource\",\n          \"default\": 120,\n          \"description\": \"%html.format.wrapLineLength.desc%\"\n        },\n        \"html.format.unformatted\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"scope\": \"resource\",\n          \"default\": \"wbr\",\n          \"markdownDescription\": \"%html.format.unformatted.desc%\"\n        },\n        \"html.format.contentUnformatted\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"scope\": \"resource\",\n          \"default\": \"pre,code,textarea\",\n          \"markdownDescription\": \"%html.format.contentUnformatted.desc%\"\n        },\n        \"html.format.indentInnerHtml\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"markdownDescription\": \"%html.format.indentInnerHtml.desc%\"\n        },\n        \"html.format.preserveNewLines\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.format.preserveNewLines.desc%\"\n        },\n        \"html.format.maxPreserveNewLines\": {\n          \"type\": [\n            \"number\",\n            \"null\"\n          ],\n          \"scope\": \"resource\",\n          \"default\": null,\n          \"markdownDescription\": \"%html.format.maxPreserveNewLines.desc%\"\n        },\n        \"html.format.indentHandlebars\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"markdownDescription\": \"%html.format.indentHandlebars.desc%\"\n        },\n        \"html.format.extraLiners\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"scope\": \"resource\",\n          \"default\": \"head, body, /html\",\n          \"markdownDescription\": \"%html.format.extraLiners.desc%\"\n        },\n        \"html.format.wrapAttributes\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"default\": \"auto\",\n          \"enum\": [\n            \"auto\",\n            \"force\",\n            \"force-aligned\",\n            \"force-expand-multiline\",\n            \"aligned-multiple\",\n            \"preserve\",\n            \"preserve-aligned\"\n          ],\n          \"enumDescriptions\": [\n            \"%html.format.wrapAttributes.auto%\",\n            \"%html.format.wrapAttributes.force%\",\n            \"%html.format.wrapAttributes.forcealign%\",\n            \"%html.format.wrapAttributes.forcemultiline%\",\n            \"%html.format.wrapAttributes.alignedmultiple%\",\n            \"%html.format.wrapAttributes.preserve%\",\n            \"%html.format.wrapAttributes.preservealigned%\"\n          ],\n          \"description\": \"%html.format.wrapAttributes.desc%\"\n        },\n        \"html.format.wrapAttributesIndentSize\": {\n          \"type\": [\n            \"number\",\n            \"null\"\n          ],\n          \"scope\": \"resource\",\n          \"default\": null,\n          \"markdownDescription\": \"%html.format.wrapAttributesIndentSize.desc%\"\n        },\n        \"html.format.templating\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%html.format.templating.desc%\"\n        },\n        \"html.format.unformattedContentDelimiter\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"default\": \"\",\n          \"markdownDescription\": \"%html.format.unformattedContentDelimiter.desc%\"\n        },\n        \"html.suggest.html5\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.suggest.html5.desc%\"\n        },\n        \"html.validate.scripts\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.validate.scripts%\"\n        },\n        \"html.validate.styles\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.validate.styles%\"\n        },\n        \"html.autoCreateQuotes\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.autoCreateQuotes%\"\n        },\n        \"html.autoClosingTags\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.autoClosingTags%\"\n        },\n        \"html.hover.documentation\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.hover.documentation%\"\n        },\n        \"html.hover.references\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": true,\n          \"description\": \"%html.hover.references%\"\n        },\n        \"html.mirrorCursorOnMatchingTag\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"default\": false,\n          \"description\": \"%html.mirrorCursorOnMatchingTag%\",\n          \"deprecationMessage\": \"%html.mirrorCursorOnMatchingTagDeprecationMessage%\"\n        },\n        \"html.trace.server\": {\n          \"type\": \"string\",\n          \"scope\": \"window\",\n          \"enum\": [\n            \"off\",\n            \"messages\",\n            \"verbose\"\n          ],\n          \"default\": \"off\",\n          \"description\": \"%html.trace.server.desc%\"\n        }\n      }\n    },\n    \"configurationDefaults\": {\n      \"[html]\": {\n        \"editor.suggest.insertMode\": \"replace\"\n      },\n      \"[handlebars]\": {\n        \"editor.suggest.insertMode\": \"replace\"\n      }\n    },\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"*.html-data.json\",\n        \"url\": \"https://raw.githubusercontent.com/microsoft/vscode-html-languageservice/master/docs/customData.schema.json\"\n      },\n      {\n        \"fileMatch\": \"package.json\",\n        \"url\": \"./schemas/package.schema.json\"\n      }\n    ]\n  },\n  \"dependencies\": {\n    \"@vscode/extension-telemetry\": \"^0.9.8\",\n    \"vscode-languageclient\": \"^10.0.0-next.14\",\n    \"vscode-uri\": \"^3.0.8\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/html-language-features/package.nls.json",
    "content": "{\n\t\"displayName\": \"HTML Language Features\",\n\t\"description\": \"Provides rich language support for HTML and Handlebar files\",\n\t\"html.customData.desc\": \"A list of relative file paths pointing to JSON files following the [custom data format](https://github.com/microsoft/vscode-html-languageservice/blob/master/docs/customData.md).\\n\\nVS Code loads custom data on startup to enhance its HTML support for the custom HTML tags, attributes and attribute values you specify in the JSON files.\\n\\nThe file paths are relative to workspace and only workspace folder settings are considered.\",\n\t\"html.format.enable.desc\": \"Enable/disable default HTML formatter.\",\n\t\"html.format.wrapLineLength.desc\": \"Maximum amount of characters per line (0 = disable).\",\n\t\"html.format.unformatted.desc\": \"List of tags, comma separated, that shouldn't be reformatted. `null` defaults to all tags listed at https://www.w3.org/TR/html5/dom.html#phrasing-content.\",\n\t\"html.format.contentUnformatted.desc\": \"List of tags, comma separated, where the content shouldn't be reformatted. `null` defaults to the `pre` tag.\",\n\t\"html.format.indentInnerHtml.desc\": \"Indent `<head>` and `<body>` sections.\",\n\t\"html.format.preserveNewLines.desc\": \"Controls whether existing line breaks before elements should be preserved. Only works before elements, not inside tags or for text.\",\n\t\"html.format.maxPreserveNewLines.desc\": \"Maximum number of line breaks to be preserved in one chunk. Use `null` for unlimited.\",\n\t\"html.format.indentHandlebars.desc\": \"Format and indent `{{#foo}}` and `{{/foo}}`.\",\n\t\"html.format.extraLiners.desc\": \"List of tags, comma separated, that should have an extra newline before them. `null` defaults to `\\\"head, body, /html\\\"`.\",\n\t\"html.format.wrapAttributes.desc\": \"Wrap attributes.\",\n\t\"html.format.wrapAttributes.auto\": \"Wrap attributes only when line length is exceeded.\",\n\t\"html.format.wrapAttributes.force\": \"Wrap each attribute except first.\",\n\t\"html.format.wrapAttributes.forcealign\": \"Wrap each attribute except first and keep aligned.\",\n\t\"html.format.wrapAttributes.forcemultiline\": \"Wrap each attribute.\",\n\t\"html.format.wrapAttributes.alignedmultiple\": \"Wrap when line length is exceeded, align attributes vertically.\",\n\t\"html.format.wrapAttributes.preserve\": \"Preserve wrapping of attributes.\",\n\t\"html.format.wrapAttributes.preservealigned\": \"Preserve wrapping of attributes but align.\",\n\t\"html.format.templating.desc\": \"Honor django, erb, handlebars and php templating language tags.\",\n\t\"html.format.unformattedContentDelimiter.desc\": \"Keep text content together between this string.\",\n\t\"html.format.wrapAttributesIndentSize.desc\": \"Indent wrapped attributes to after N characters. Use `null` to use the default indent size. Ignored if `#html.format.wrapAttributes#` is set to `aligned`.\",\n\t\"html.suggest.html5.desc\": \"Controls whether the built-in HTML language support suggests HTML5 tags, properties and values.\",\n\t\"html.trace.server.desc\": \"Traces the communication between VS Code and the HTML language server.\",\n\t\"html.validate.scripts\": \"Controls whether the built-in HTML language support validates embedded scripts.\",\n\t\"html.validate.styles\": \"Controls whether the built-in HTML language support validates embedded styles.\",\n\t\"html.autoCreateQuotes\": \"Enable/disable auto creation of quotes for HTML attribute assignment. The type of quotes can be configured by `#html.completion.attributeDefaultValue#`.\",\n\t\"html.autoClosingTags\": \"Enable/disable autoclosing of HTML tags.\",\n\t\"html.completion.attributeDefaultValue\": \"Controls the default value for attributes when completion is accepted.\",\n\t\"html.completion.attributeDefaultValue.doublequotes\": \"Attribute value is set to \\\"\\\".\",\n\t\"html.completion.attributeDefaultValue.singlequotes\": \"Attribute value is set to ''.\",\n\t\"html.completion.attributeDefaultValue.empty\": \"Attribute value is not set.\",\n\t\"html.mirrorCursorOnMatchingTag\": \"Enable/disable mirroring cursor on matching HTML tag.\",\n\t\"html.mirrorCursorOnMatchingTagDeprecationMessage\": \"Deprecated in favor of `editor.linkedEditing`\",\n\t\"html.hover.documentation\": \"Show tag and attribute documentation in hover.\",\n\t\"html.hover.references\": \"Show references to MDN in hover.\"\n}\n"
  },
  {
    "path": "extensions/html-language-features/schemas/package.schema.json",
    "content": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"contributes\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"html.customData\": {\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"markdownDescription\": \"A list of relative file paths pointing to JSON files following the [custom data format](https://github.com/microsoft/vscode-html-languageservice/blob/master/docs/customData.md).\\n\\nVS Code loads custom data on startup to enhance its HTML support for the custom HTML tags, attributes and attribute values you specify in the JSON files.\\n\\nThe file paths are relative to workspace and only workspace folder settings are considered.\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Relative path to a HTML custom data file\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"htmlLanguageParticipants\": {\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"description\": \"A list of languages that participate with the HTML language server.\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\"languageId\": {\n\t\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\t\"description\": \"The id of the language that participates with HTML language server.\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"autoInsert\": {\n\t\t\t\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\t\t\t\"description\": \"Whether the language participates with HTML auto insertions. If not specified, defaults to <code>true</code>.\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/html-language-features/server/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.1.0\",\n\t// List of configurations. Add new configurations or edit existing ones.\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Attach\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"port\": 6045,\n\t\t\t\"protocol\": \"inspector\",\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*.js\"]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Unit Tests\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"program\": \"${workspaceFolder}/../../../node_modules/mocha/bin/_mocha\",\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"args\": [\n\t\t\t\t\"--timeout\",\n\t\t\t\t\"999999\",\n\t\t\t\t\"--colors\"\n\t\t\t],\n\t\t\t\"cwd\": \"${workspaceFolder}\",\n\t\t\t\"runtimeExecutable\": null,\n\t\t\t\"runtimeArgs\": [],\n\t\t\t\"env\": {},\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*.js\"]\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/html-language-features/server/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"label\": \"npm run watch\",\n\t\t\t\"command\": \"npm i\",\n\t\t\t\"args\": [\"watch\"],\n\t\t\t\"type\": \"shell\",\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"silent\",\n\t\t\t\t\"focus\": false,\n\t\t\t\t\"panel\": \"shared\"\n\t\t\t},\n\t\t\t\"isBackground\": true,\n\t\t\t\"problemMatcher\": \"$tsc-watch\"\n\t\t}\n\t],\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/build/javaScriptLibraryLoader.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// a webpack loader that bundles all library definitions (d.ts) for the embedded JavaScript engine.\n\nconst path = require('path');\nconst fs = require('fs');\n\nconst TYPESCRIPT_LIB_SOURCE = path.join(__dirname, '../../../node_modules/typescript/lib');\nconst JQUERY_DTS = path.join(__dirname, '../lib/jquery.d.ts');\n\nmodule.exports = function () {\n\tfunction getFileName(name) {\n\t\treturn (name === '' ? 'lib.d.ts' : `lib.${name}.d.ts`);\n\t}\n\tfunction readLibFile(name) {\n\t\tvar srcPath = path.join(TYPESCRIPT_LIB_SOURCE, getFileName(name));\n\t\treturn fs.readFileSync(srcPath).toString();\n\t}\n\n\tvar queue = [];\n\tvar in_queue = {};\n\n\tvar enqueue = function (name) {\n\t\tif (in_queue[name]) {\n\t\t\treturn;\n\t\t}\n\t\tin_queue[name] = true;\n\t\tqueue.push(name);\n\t};\n\n\tenqueue('es2020.full');\n\n\tvar result = [];\n\twhile (queue.length > 0) {\n\t\tvar name = queue.shift();\n\t\tvar contents = readLibFile(name);\n\t\tvar lines = contents.split(/\\r\\n|\\r|\\n/);\n\n\t\tvar outputLines = [];\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tlet m = lines[i].match(/\\/\\/\\/\\s*<reference\\s*lib=\"([^\"]+)\"/);\n\t\t\tif (m) {\n\t\t\t\tenqueue(m[1]);\n\t\t\t}\n\t\t\toutputLines.push(lines[i]);\n\t\t}\n\n\t\tresult.push({\n\t\t\tname: getFileName(name),\n\t\t\toutput: `\"${escapeText(outputLines.join('\\n'))}\"`\n\t\t});\n\t}\n\n\tconst jquerySource = fs.readFileSync(JQUERY_DTS).toString();\n\tvar lines = jquerySource.split(/\\r\\n|\\r|\\n/);\n\tresult.push({\n\t\tname: 'jquery',\n\t\toutput: `\"${escapeText(lines.join('\\n'))}\"`\n\t});\n\n\tlet strResult = `\\nconst libs : { [name:string]: string; } = {\\n`\n\tfor (let i = result.length - 1; i >= 0; i--) {\n\t\tstrResult += `\"${result[i].name}\": ${result[i].output},\\n`;\n\t}\n\tstrResult += `\\n};`\n\n\tstrResult += `export function loadLibrary(name: string) : string {\\n return libs[name] || ''; \\n}`;\n\n\treturn strResult;\n}\n\n/**\n * Escape text such that it can be used in a javascript string enclosed by double quotes (\")\n */\nfunction escapeText(text) {\n\t// See http://www.javascriptkit.com/jsref/escapesequence.shtml\n\tvar _backspace = '\\b'.charCodeAt(0);\n\tvar _formFeed = '\\f'.charCodeAt(0);\n\tvar _newLine = '\\n'.charCodeAt(0);\n\tvar _nullChar = 0;\n\tvar _carriageReturn = '\\r'.charCodeAt(0);\n\tvar _tab = '\\t'.charCodeAt(0);\n\tvar _verticalTab = '\\v'.charCodeAt(0);\n\tvar _backslash = '\\\\'.charCodeAt(0);\n\tvar _doubleQuote = '\"'.charCodeAt(0);\n\n\tvar startPos = 0, chrCode, replaceWith = null, resultPieces = [];\n\n\tfor (var i = 0, len = text.length; i < len; i++) {\n\t\tchrCode = text.charCodeAt(i);\n\t\tswitch (chrCode) {\n\t\t\tcase _backspace:\n\t\t\t\treplaceWith = '\\\\b';\n\t\t\t\tbreak;\n\t\t\tcase _formFeed:\n\t\t\t\treplaceWith = '\\\\f';\n\t\t\t\tbreak;\n\t\t\tcase _newLine:\n\t\t\t\treplaceWith = '\\\\n';\n\t\t\t\tbreak;\n\t\t\tcase _nullChar:\n\t\t\t\treplaceWith = '\\\\0';\n\t\t\t\tbreak;\n\t\t\tcase _carriageReturn:\n\t\t\t\treplaceWith = '\\\\r';\n\t\t\t\tbreak;\n\t\t\tcase _tab:\n\t\t\t\treplaceWith = '\\\\t';\n\t\t\t\tbreak;\n\t\t\tcase _verticalTab:\n\t\t\t\treplaceWith = '\\\\v';\n\t\t\t\tbreak;\n\t\t\tcase _backslash:\n\t\t\t\treplaceWith = '\\\\\\\\';\n\t\t\t\tbreak;\n\t\t\tcase _doubleQuote:\n\t\t\t\treplaceWith = '\\\\\"';\n\t\t\t\tbreak;\n\t\t}\n\t\tif (replaceWith !== null) {\n\t\t\tresultPieces.push(text.substring(startPos, i));\n\t\t\tresultPieces.push(replaceWith);\n\t\t\tstartPos = i + 1;\n\t\t\treplaceWith = null;\n\t\t}\n\t}\n\tresultPieces.push(text.substring(startPos, len));\n\treturn resultPieces.join('');\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../../shared.webpack.config').browser;\nconst path = require('path');\n\nconst serverConfig = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/browser/htmlServerWorkerMain.ts',\n\t},\n\tresolve: {\n\t\textensionAlias: {\n\t\t\t// this is needed to resolve dynamic imports that now require the .js extension\n\t\t\t'.js': ['.js', '.ts'],\n\t\t},\n\t},\n\toutput: {\n\t\tfilename: 'htmlServerMain.js',\n\t\tpath: path.join(__dirname, 'dist', 'browser'),\n\t\tlibraryTarget: 'var',\n\t\tlibrary: 'serverExportVar'\n\t},\n\toptimization: {\n\t\tsplitChunks: {\n\t\t\tchunks: 'async'\n\t\t}\n\t}\n});\nserverConfig.module.noParse = /typescript[\\/\\\\]lib[\\/\\\\]typescript\\.js/;\nserverConfig.module.rules.push({\n\ttest: /javascriptLibs.ts$/,\n\tuse: [\n\t\t{\n\t\t\tloader: path.resolve(__dirname, 'build', 'javaScriptLibraryLoader.js')\n\t\t}\n\t]\n});\n\nmodule.exports = serverConfig;\n"
  },
  {
    "path": "extensions/html-language-features/server/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../../shared.webpack.config');\nconst path = require('path');\n\nmodule.exports = withDefaults({\n\tcontext: path.join(__dirname),\n\tentry: {\n\t\textension: './src/node/htmlServerNodeMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'htmlServerMain.js',\n\t\tpath: path.join(__dirname, 'dist', 'node'),\n\t},\n\texternals: {\n\t\t'typescript': 'commonjs typescript'\n\t}\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/lib/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"definitelytyped\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/DefinitelyTyped/DefinitelyTyped\",\n\t\t\t\t\t\"commitHash\": \"69e3ac6bec3008271f76bbfa7cf69aa9198c4ff0\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/lib/jquery.d.ts",
    "content": "// Type definitions for jQuery 1.10.x / 2.0.x\n// Project: http://jquery.com/\n// Definitions by: Boris Yankov <https://github.com/borisyankov/>, Christian Hoffmeister <https://github.com/choffmeister>, Steve Fenton <https://github.com/Steve-Fenton>, Diullei Gomes <https://github.com/Diullei>, Tass Iliopoulos <https://github.com/tasoili>, Jason Swearingen <https://github.com/jasons-novaleaf>, Sean Hill <https://github.com/seanski>, Guus Goossens <https://github.com/Guuz>, Kelly Summerlin <https://github.com/ksummerlin>, Basarat Ali Syed <https://github.com/basarat>, Nicholas Wolverson <https://github.com/nwolverson>, Derek Cicerone <https://github.com/derekcicerone>, Andrew Gaspar <https://github.com/AndrewGaspar>, James Harrison Fisher <https://github.com/jameshfisher>, Seikichi Kondo <https://github.com/seikichi>, Benjamin Jackman <https://github.com/benjaminjackman>, Poul Sorensen <https://github.com/s093294>, Josh Strobl <https://github.com/JoshStrobl>, John Reilly <https://github.com/johnnyreilly/>, Dick van den Brink <https://github.com/DickvdBrink>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/* *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/**\n * Interface for the AJAX setting that will configure the AJAX request\n */\ninterface JQueryAjaxSettings {\n    /**\n     * The content type sent in the request header that tells the server what kind of response it will accept in return. If the accepts setting needs modification, it is recommended to do so once in the $.ajaxSetup() method.\n     */\n    accepts?: any;\n    /**\n     * By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: \"jsonp\" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().\n     */\n    async?: boolean;\n    /**\n     * A pre-request callback function that can be used to modify the jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object before it is sent. Use this to set custom headers, etc. The jqXHR and settings objects are passed as arguments. This is an Ajax Event. Returning false in the beforeSend function will cancel the request. As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.\n     */\n    beforeSend?(jqXHR: JQueryXHR, settings: JQueryAjaxSettings): any;\n    /**\n     * If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending \"_={timestamp}\" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.\n     */\n    cache?: boolean;\n    /**\n     * A function to be called when the request finishes (after success and error callbacks are executed). The function gets passed two arguments: The jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object and a string categorizing the status of the request (\"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", or \"parsererror\"). As of jQuery 1.5, the complete setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.\n     */\n    complete?(jqXHR: JQueryXHR, textStatus: string): any;\n    /**\n     * An object of string/regular-expression pairs that determine how jQuery will parse the response, given its content type. (version added: 1.5)\n     */\n    contents?: { [key: string]: any; };\n    //According to jQuery.ajax source code, ajax's option actually allows contentType to set to \"false\"\n    // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/742\n    /**\n     * When sending data to the server, use this content type. Default is \"application/x-www-form-urlencoded; charset=UTF-8\", which is fine for most cases. If you explicitly pass in a content-type to $.ajax(), then it is always sent to the server (even if no data is sent). The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.\n     */\n    contentType?: any;\n    /**\n     * This object will be made the context of all Ajax-related callbacks. By default, the context is an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax).\n     */\n    context?: any;\n    /**\n     * An object containing dataType-to-dataType converters. Each converter's value is a function that returns the transformed value of the response. (version added: 1.5)\n     */\n    converters?: { [key: string]: any; };\n    /**\n     * If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)\n     */\n    crossDomain?: boolean;\n    /**\n     * Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).\n     */\n    data?: any;\n    /**\n     * A function to be used to handle the raw response data of XMLHttpRequest.This is a pre-filtering function to sanitize the response. You should return the sanitized data. The function accepts two arguments: The raw data returned from the server and the 'dataType' parameter.\n     */\n    dataFilter?(data: any, ty: any): any;\n    /**\n     * The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).\n     */\n    dataType?: string;\n    /**\n     * A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are \"timeout\", \"error\", \"abort\", and \"parsererror\". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as \"Not Found\" or \"Internal Server Error.\" As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event.\n     */\n    error?(jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any;\n    /**\n     * Whether to trigger global Ajax event handlers for this request. The default is true. Set to false to prevent the global handlers like ajaxStart or ajaxStop from being triggered. This can be used to control various Ajax Events.\n     */\n    global?: boolean;\n    /**\n     * An object of additional header key/value pairs to send along with requests using the XMLHttpRequest transport. The header X-Requested-With: XMLHttpRequest is always added, but its default XMLHttpRequest value can be changed here. Values in the headers setting can also be overwritten from within the beforeSend function. (version added: 1.5)\n     */\n    headers?: { [key: string]: any; };\n    /**\n     * Allow the request to be successful only if the response has changed since the last request. This is done by checking the Last-Modified header. Default value is false, ignoring the header. In jQuery 1.4 this technique also checks the 'etag' specified by the server to catch unmodified data.\n     */\n    ifModified?: boolean;\n    /**\n     * Allow the current environment to be recognized as \"local,\" (e.g. the filesystem), even if jQuery does not recognize it as such by default. The following protocols are currently recognized as local: file, *-extension, and widget. If the isLocal setting needs modification, it is recommended to do so once in the $.ajaxSetup() method. (version added: 1.5.1)\n     */\n    isLocal?: boolean;\n    /**\n     * Override the callback function name in a jsonp request. This value will be used instead of 'callback' in the 'callback=?' part of the query string in the url. So {jsonp:'onJSONPLoad'} would result in 'onJSONPLoad=?' passed to the server. As of jQuery 1.5, setting the jsonp option to false prevents jQuery from adding the \"?callback\" string to the URL or attempting to use \"=?\" for transformation. In this case, you should also explicitly set the jsonpCallback setting. For example, { jsonp: false, jsonpCallback: \"callbackName\" }\n     */\n    jsonp?: any;\n    /**\n     * Specify the callback function name for a JSONP request. This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it'll make it easier to manage the requests and provide callbacks and error handling. You may want to specify the callback when you want to enable better browser caching of GET requests. As of jQuery 1.5, you can also use a function for this setting, in which case the value of jsonpCallback is set to the return value of that function.\n     */\n    jsonpCallback?: any;\n    /**\n     * The HTTP method to use for the request (e.g. \"POST\", \"GET\", \"PUT\"). (version added: 1.9.0)\n     */\n    method?: string;\n    /**\n     * A mime type to override the XHR mime type. (version added: 1.5.1)\n     */\n    mimeType?: string;\n    /**\n     * A password to be used with XMLHttpRequest in response to an HTTP access authentication request.\n     */\n    password?: string;\n    /**\n     * By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type \"application/x-www-form-urlencoded\". If you want to send a DOMDocument, or other non-processed data, set this option to false.\n     */\n    processData?: boolean;\n    /**\n     * Only applies when the \"script\" transport is used (e.g., cross-domain requests with \"jsonp\" or \"script\" dataType and \"GET\" type). Sets the charset attribute on the script tag used in the request. Used when the character set on the local page is not the same as the one on the remote script.\n     */\n    scriptCharset?: string;\n    /**\n     * An object of numeric HTTP codes and functions to be called when the response has the corresponding code. f the request is successful, the status code functions take the same parameters as the success callback; if it results in an error (including 3xx redirect), they take the same parameters as the error callback. (version added: 1.5)\n     */\n    statusCode?: { [key: string]: any; };\n    /**\n     * A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.\n     */\n    success?(data: any, textStatus: string, jqXHR: JQueryXHR): any;\n    /**\n     * Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.\n     */\n    timeout?: number;\n    /**\n     * Set this to true if you wish to use the traditional style of param serialization.\n     */\n    traditional?: boolean;\n    /**\n     * The type of request to make (\"POST\" or \"GET\"), default is \"GET\". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers.\n     */\n    type?: string;\n    /**\n     * A string containing the URL to which the request is sent.\n     */\n    url?: string;\n    /**\n     * A username to be used with XMLHttpRequest in response to an HTTP access authentication request.\n     */\n    username?: string;\n    /**\n     * Callback for creating the XMLHttpRequest object. Defaults to the ActiveXObject when available (IE), the XMLHttpRequest otherwise. Override to provide your own implementation for XMLHttpRequest or enhancements to the factory.\n     */\n    xhr?: any;\n    /**\n     * An object of fieldName-fieldValue pairs to set on the native XHR object. For example, you can use it to set withCredentials to true for cross-domain requests if needed. In jQuery 1.5, the withCredentials property was not propagated to the native XHR and thus CORS requests requiring it would ignore this flag. For this reason, we recommend using jQuery 1.5.1+ should you require the use of it. (version added: 1.5.1)\n     */\n    xhrFields?: { [key: string]: any; };\n}\n\n/**\n * Interface for the jqXHR object\n */\ninterface JQueryXHR extends XMLHttpRequest, JQueryPromise<any> {\n    /**\n     * The .overrideMimeType() method may be used in the beforeSend() callback function, for example, to modify the response content-type header. As of jQuery 1.5.1, the jqXHR object also contains the overrideMimeType() method (it was available in jQuery 1.4.x, as well, but was temporarily removed in jQuery 1.5).\n     */\n    overrideMimeType(mimeType: string): any;\n    /**\n     * Cancel the request.\n     *\n     * @param statusText A string passed as the textStatus parameter for the done callback. Default value: \"canceled\"\n     */\n    abort(statusText?: string): void;\n    /**\n     * Incorporates the functionality of the .done() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated. Refer to deferred.then() for implementation details.\n     */\n    then<R>(doneCallback: (data: any, textStatus: string, jqXHR: JQueryXHR) => R, failCallback?: (jqXHR: JQueryXHR, textStatus: string, errorThrown: any) => void): JQueryPromise<R>;\n    /**\n     * Property containing the parsed response if the response Content-Type is json\n     */\n    responseJSON?: any;\n    /**\n     * A function to be called if the request fails.\n     */\n    error(xhr: JQueryXHR, textStatus: string, errorThrown: string): void;\n}\n\n/**\n * Interface for the JQuery callback\n */\ninterface JQueryCallback {\n    /**\n     * Add a callback or a collection of callbacks to a callback list.\n     *\n     * @param callbacks A function, or array of functions, that are to be added to the callback list.\n     */\n    add(callbacks: Function): JQueryCallback;\n    /**\n     * Add a callback or a collection of callbacks to a callback list.\n     *\n     * @param callbacks A function, or array of functions, that are to be added to the callback list.\n     */\n    add(callbacks: Function[]): JQueryCallback;\n\n    /**\n     * Disable a callback list from doing anything more.\n     */\n    disable(): JQueryCallback;\n\n    /**\n     * Determine if the callbacks list has been disabled.\n     */\n    disabled(): boolean;\n\n    /**\n     * Remove all of the callbacks from a list.\n     */\n    empty(): JQueryCallback;\n\n    /**\n     * Call all of the callbacks with the given arguments\n     *\n     * @param arguments The argument or list of arguments to pass back to the callback list.\n     */\n    fire(...arguments: any[]): JQueryCallback;\n\n    /**\n     * Determine if the callbacks have already been called at least once.\n     */\n    fired(): boolean;\n\n    /**\n     * Call all callbacks in a list with the given context and arguments.\n     *\n     * @param context A reference to the context in which the callbacks in the list should be fired.\n     * @param arguments An argument, or array of arguments, to pass to the callbacks in the list.\n     */\n    fireWith(context?: any, args?: any[]): JQueryCallback;\n\n    /**\n     * Determine whether a supplied callback is in a list\n     *\n     * @param callback The callback to search for.\n     */\n    has(callback: Function): boolean;\n\n    /**\n     * Lock a callback list in its current state.\n     */\n    lock(): JQueryCallback;\n\n    /**\n     * Determine if the callbacks list has been locked.\n     */\n    locked(): boolean;\n\n    /**\n     * Remove a callback or a collection of callbacks from a callback list.\n     *\n     * @param callbacks A function, or array of functions, that are to be removed from the callback list.\n     */\n    remove(callbacks: Function): JQueryCallback;\n    /**\n     * Remove a callback or a collection of callbacks from a callback list.\n     *\n     * @param callbacks A function, or array of functions, that are to be removed from the callback list.\n     */\n    remove(callbacks: Function[]): JQueryCallback;\n}\n\n/**\n * Allows jQuery Promises to interop with non-jQuery promises\n */\ninterface JQueryGenericPromise<T> {\n    /**\n     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.\n     *\n     * @param doneFilter A function that is called when the Deferred is resolved.\n     * @param failFilter An optional function that is called when the Deferred is rejected.\n     */\n    then<U>(doneFilter: (value?: T, ...values: any[]) => U | JQueryPromise<U>, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise<U>;\n\n    /**\n     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.\n     *\n     * @param doneFilter A function that is called when the Deferred is resolved.\n     * @param failFilter An optional function that is called when the Deferred is rejected.\n     */\n    then(doneFilter: (value?: T, ...values: any[]) => void, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise<void>;\n}\n\n/**\n * Interface for the JQuery promise/deferred callbacks\n */\ninterface JQueryPromiseCallback<T> {\n    (value?: T, ...args: any[]): void;\n}\n\ninterface JQueryPromiseOperator<T, U> {\n    (callback1: JQueryPromiseCallback<T> | JQueryPromiseCallback<T>[], ...callbacksN: Array<JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[]>): JQueryPromise<U>;\n}\n\n/**\n * Interface for the JQuery promise, part of callbacks\n */\ninterface JQueryPromise<T> extends JQueryGenericPromise<T> {\n    /**\n     * Determine the current state of a Deferred object.\n     */\n    state(): string;\n    /**\n     * Add handlers to be called when the Deferred object is either resolved or rejected.\n     *\n     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.\n     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.\n     */\n    always(alwaysCallback1?: JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[], ...alwaysCallbacksN: Array<JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[]>): JQueryPromise<T>;\n    /**\n     * Add handlers to be called when the Deferred object is resolved.\n     *\n     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.\n     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.\n     */\n    done(doneCallback1?: JQueryPromiseCallback<T> | JQueryPromiseCallback<T>[], ...doneCallbackN: Array<JQueryPromiseCallback<T> | JQueryPromiseCallback<T>[]>): JQueryPromise<T>;\n    /**\n     * Add handlers to be called when the Deferred object is rejected.\n     *\n     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.\n     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.\n     */\n    fail(failCallback1?: JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[], ...failCallbacksN: Array<JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[]>): JQueryPromise<T>;\n    /**\n     * Add handlers to be called when the Deferred object generates progress notifications.\n     *\n     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.\n     */\n    progress(progressCallback1?: JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[], ...progressCallbackN: Array<JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[]>): JQueryPromise<T>;\n\n    // Deprecated - given no typings\n    pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>;\n\n    /**\n     * Return a Deferred's Promise object.\n     *\n     * @param target Object onto which the promise methods have to be attached\n     */\n    promise(target?: any): JQueryPromise<T>;\n}\n\n/**\n * Interface for the JQuery deferred, part of callbacks\n */\ninterface JQueryDeferred<T> extends JQueryGenericPromise<T> {\n    /**\n     * Determine the current state of a Deferred object.\n     */\n    state(): string;\n    /**\n     * Add handlers to be called when the Deferred object is either resolved or rejected.\n     *\n     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.\n     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.\n     */\n    always(alwaysCallback1?: JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[], ...alwaysCallbacksN: Array<JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;\n    /**\n     * Add handlers to be called when the Deferred object is resolved.\n     *\n     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.\n     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.\n     */\n    done(doneCallback1?: JQueryPromiseCallback<T> | JQueryPromiseCallback<T>[], ...doneCallbackN: Array<JQueryPromiseCallback<T> | JQueryPromiseCallback<T>[]>): JQueryDeferred<T>;\n    /**\n     * Add handlers to be called when the Deferred object is rejected.\n     *\n     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.\n     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.\n     */\n    fail(failCallback1?: JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[], ...failCallbacksN: Array<JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;\n    /**\n     * Add handlers to be called when the Deferred object generates progress notifications.\n     *\n     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.\n     */\n    progress(progressCallback1?: JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[], ...progressCallbackN: Array<JQueryPromiseCallback<any> | JQueryPromiseCallback<any>[]>): JQueryDeferred<T>;\n\n    /**\n     * Call the progressCallbacks on a Deferred object with the given args.\n     *\n     * @param args Optional arguments that are passed to the progressCallbacks.\n     */\n    notify(value?: any, ...args: any[]): JQueryDeferred<T>;\n\n    /**\n     * Call the progressCallbacks on a Deferred object with the given context and args.\n     *\n     * @param context Context passed to the progressCallbacks as the this object.\n     * @param args Optional arguments that are passed to the progressCallbacks.\n     */\n    notifyWith(context: any, value?: any[]): JQueryDeferred<T>;\n\n    /**\n     * Reject a Deferred object and call any failCallbacks with the given args.\n     *\n     * @param args Optional arguments that are passed to the failCallbacks.\n     */\n    reject(value?: any, ...args: any[]): JQueryDeferred<T>;\n    /**\n     * Reject a Deferred object and call any failCallbacks with the given context and args.\n     *\n     * @param context Context passed to the failCallbacks as the this object.\n     * @param args An optional array of arguments that are passed to the failCallbacks.\n     */\n    rejectWith(context: any, value?: any[]): JQueryDeferred<T>;\n\n    /**\n     * Resolve a Deferred object and call any doneCallbacks with the given args.\n     *\n     * @param value First argument passed to doneCallbacks.\n     * @param args Optional subsequent arguments that are passed to the doneCallbacks.\n     */\n    resolve(value?: T, ...args: any[]): JQueryDeferred<T>;\n\n    /**\n     * Resolve a Deferred object and call any doneCallbacks with the given context and args.\n     *\n     * @param context Context passed to the doneCallbacks as the this object.\n     * @param args An optional array of arguments that are passed to the doneCallbacks.\n     */\n    resolveWith(context: any, value?: T[]): JQueryDeferred<T>;\n\n    /**\n     * Return a Deferred's Promise object.\n     *\n     * @param target Object onto which the promise methods have to be attached\n     */\n    promise(target?: any): JQueryPromise<T>;\n\n    // Deprecated - given no typings\n    pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>;\n}\n\n/**\n * Interface of the JQuery extension of the W3C event object\n */\ninterface BaseJQueryEventObject extends Event {\n    currentTarget: Element;\n    data: any;\n    delegateTarget: Element;\n    isDefaultPrevented(): boolean;\n    isImmediatePropagationStopped(): boolean;\n    isPropagationStopped(): boolean;\n    namespace: string;\n    originalEvent: Event;\n    preventDefault(): any;\n    relatedTarget: Element;\n    result: any;\n    stopImmediatePropagation(): void;\n    stopPropagation(): void;\n    target: Element;\n    pageX: number;\n    pageY: number;\n    which: number;\n    metaKey: boolean;\n}\n\ninterface JQueryInputEventObject extends BaseJQueryEventObject {\n    altKey: boolean;\n    ctrlKey: boolean;\n    metaKey: boolean;\n    shiftKey: boolean;\n}\n\ninterface JQueryMouseEventObject extends JQueryInputEventObject {\n    button: number;\n    clientX: number;\n    clientY: number;\n    offsetX: number;\n    offsetY: number;\n    pageX: number;\n    pageY: number;\n    screenX: number;\n    screenY: number;\n}\n\ninterface JQueryKeyEventObject extends JQueryInputEventObject {\n    char: any;\n    charCode: number;\n    key: any;\n    keyCode: number;\n}\n\ninterface JQueryEventObject extends BaseJQueryEventObject, JQueryInputEventObject, JQueryMouseEventObject, JQueryKeyEventObject {\n}\n\n/*\n    Collection of properties of the current browser\n*/\n\ninterface JQuerySupport {\n    ajax?: boolean;\n    boxModel?: boolean;\n    changeBubbles?: boolean;\n    checkClone?: boolean;\n    checkOn?: boolean;\n    cors?: boolean;\n    cssFloat?: boolean;\n    hrefNormalized?: boolean;\n    htmlSerialize?: boolean;\n    leadingWhitespace?: boolean;\n    noCloneChecked?: boolean;\n    noCloneEvent?: boolean;\n    opacity?: boolean;\n    optDisabled?: boolean;\n    optSelected?: boolean;\n    scriptEval?(): boolean;\n    style?: boolean;\n    submitBubbles?: boolean;\n    tbody?: boolean;\n}\n\ninterface JQueryParam {\n    /**\n     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.\n     *\n     * @param obj An array or object to serialize.\n     */\n    (obj: any): string;\n\n    /**\n     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.\n     *\n     * @param obj An array or object to serialize.\n     * @param traditional A Boolean indicating whether to perform a traditional \"shallow\" serialization.\n     */\n    (obj: any, traditional: boolean): string;\n}\n\n/**\n * The interface used to construct jQuery events (with $.Event). It is\n * defined separately instead of inline in JQueryStatic to allow\n * overriding the construction function with specific strings\n * returning specific event objects.\n */\ninterface JQueryEventConstructor {\n    (name: string, eventProperties?: any): JQueryEventObject;\n    new(name: string, eventProperties?: any): JQueryEventObject;\n}\n\n/**\n * The interface used to specify coordinates.\n */\ninterface JQueryCoordinates {\n    left: number;\n    top: number;\n}\n\n/**\n * Elements in the array returned by serializeArray()\n */\ninterface JQuerySerializeArrayElement {\n    name: string;\n    value: string;\n}\n\ninterface JQueryAnimationOptions {\n    /**\n     * A string or number determining how long the animation will run.\n     */\n    duration?: any;\n    /**\n     * A string indicating which easing function to use for the transition.\n     */\n    easing?: string;\n    /**\n     * A function to call once the animation is complete.\n     */\n    complete?: Function;\n    /**\n     * A function to be called for each animated property of each animated element. This function provides an opportunity to modify the Tween object to change the value of the property before it is set.\n     */\n    step?: (now: number, tween: any) => any;\n    /**\n     * A function to be called after each step of the animation, only once per animated element regardless of the number of animated properties. (version added: 1.8)\n     */\n    progress?: (animation: JQueryPromise<any>, progress: number, remainingMs: number) => any;\n    /**\n     * A function to call when the animation begins. (version added: 1.8)\n     */\n    start?: (animation: JQueryPromise<any>) => any;\n    /**\n     * A function to be called when the animation completes (its Promise object is resolved). (version added: 1.8)\n     */\n    done?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any;\n    /**\n     * A function to be called when the animation fails to complete (its Promise object is rejected). (version added: 1.8)\n     */\n    fail?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any;\n    /**\n     * A function to be called when the animation completes or stops without completing (its Promise object is either resolved or rejected). (version added: 1.8)\n     */\n    always?: (animation: JQueryPromise<any>, jumpedToEnd: boolean) => any;\n    /**\n     * A Boolean indicating whether to place the animation in the effects queue. If false, the animation will begin immediately. As of jQuery 1.7, the queue option can also accept a string, in which case the animation is added to the queue represented by that string. When a custom queue name is used the animation does not automatically start; you must call .dequeue(\"queuename\") to start it.\n     */\n    queue?: any;\n    /**\n     * A map of one or more of the CSS properties defined by the properties argument and their corresponding easing functions. (version added: 1.4)\n     */\n    specialEasing?: Object;\n}\n\ninterface JQueryEasingFunction {\n    (percent: number): number;\n}\n\ninterface JQueryEasingFunctions {\n    [name: string]: JQueryEasingFunction;\n    linear: JQueryEasingFunction;\n    swing: JQueryEasingFunction;\n}\n\n/**\n * Static members of jQuery (those on $ and jQuery themselves)\n */\ninterface JQueryStatic {\n\n    /**\n     * Perform an asynchronous HTTP (Ajax) request.\n     *\n     * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().\n     */\n    ajax(settings: JQueryAjaxSettings): JQueryXHR;\n    /**\n     * Perform an asynchronous HTTP (Ajax) request.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().\n     */\n    ajax(url: string, settings?: JQueryAjaxSettings): JQueryXHR;\n\n    /**\n     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().\n     *\n     * @param dataTypes An optional string containing one or more space-separated dataTypes\n     * @param handler A handler to set default values for future Ajax requests.\n     */\n    ajaxPrefilter(dataTypes: string, handler: (opts: any, originalOpts: JQueryAjaxSettings, jqXHR: JQueryXHR) => any): void;\n    /**\n     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().\n     *\n     * @param handler A handler to set default values for future Ajax requests.\n     */\n    ajaxPrefilter(handler: (opts: any, originalOpts: JQueryAjaxSettings, jqXHR: JQueryXHR) => any): void;\n\n    ajaxSettings: JQueryAjaxSettings;\n\n    /**\n     * Set default values for future Ajax requests. Its use is not recommended.\n     *\n     * @param options A set of key/value pairs that configure the default Ajax request. All options are optional.\n     */\n    ajaxSetup(options: JQueryAjaxSettings): void;\n\n    /**\n     * Load data from the server using a HTTP GET request.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param success A callback function that is executed if the request succeeds.\n     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).\n     */\n    get(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;\n    /**\n     * Load data from the server using a HTTP GET request.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param data A plain object or string that is sent to the server with the request.\n     * @param success A callback function that is executed if the request succeeds.\n     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).\n     */\n    get(url: string, data?: Object | string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;\n    /**\n     * Load data from the server using a HTTP GET request.\n     *\n     * @param settings The JQueryAjaxSettings to be used for the request\n     */\n    get(settings: JQueryAjaxSettings): JQueryXHR;\n    /**\n     * Load JSON-encoded data from the server using a GET HTTP request.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param success A callback function that is executed if the request succeeds.\n     */\n    getJSON(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;\n    /**\n     * Load JSON-encoded data from the server using a GET HTTP request.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param data A plain object or string that is sent to the server with the request.\n     * @param success A callback function that is executed if the request succeeds.\n     */\n    getJSON(url: string, data?: Object | string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;\n    /**\n     * Load a JavaScript file from the server using a GET HTTP request, then execute it.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param success A callback function that is executed if the request succeeds.\n     */\n    getScript(url: string, success?: (script: string, textStatus: string, jqXHR: JQueryXHR) => any): JQueryXHR;\n\n    /**\n     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.\n     */\n    param: JQueryParam;\n\n    /**\n     * Load data from the server using a HTTP POST request.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.\n     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).\n     */\n    post(url: string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;\n    /**\n     * Load data from the server using a HTTP POST request.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param data A plain object or string that is sent to the server with the request.\n     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.\n     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).\n     */\n    post(url: string, data?: Object | string, success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any, dataType?: string): JQueryXHR;\n    /**\n     * Load data from the server using a HTTP POST request.\n     *\n     * @param settings The JQueryAjaxSettings to be used for the request\n     */\n    post(settings: JQueryAjaxSettings): JQueryXHR;\n    /**\n     * A multi-purpose callbacks list object that provides a powerful way to manage callback lists.\n     *\n     * @param flags An optional list of space-separated flags that change how the callback list behaves.\n     */\n    Callbacks(flags?: string): JQueryCallback;\n\n    /**\n     * Holds or releases the execution of jQuery's ready event.\n     *\n     * @param hold Indicates whether the ready hold is being requested or released\n     */\n    holdReady(hold: boolean): void;\n\n    /**\n     * Accepts a string containing a CSS selector which is then used to match a set of elements.\n     *\n     * @param selector A string containing a selector expression\n     * @param context A DOM Element, Document, or jQuery to use as context\n     */\n    (selector: string, context?: Element | JQuery): JQuery;\n\n    /**\n     * Accepts a string containing a CSS selector which is then used to match a set of elements.\n     *\n     * @param element A DOM element to wrap in a jQuery object.\n     */\n    (element: Element): JQuery;\n\n    /**\n     * Accepts a string containing a CSS selector which is then used to match a set of elements.\n     *\n     * @param elementArray An array containing a set of DOM elements to wrap in a jQuery object.\n     */\n    (elementArray: Element[]): JQuery;\n\n    /**\n     * Binds a function to be executed when the DOM has finished loading.\n     *\n     * @param callback A function to execute after the DOM is ready.\n     */\n    (callback: (jQueryAlias?: JQueryStatic) => any): JQuery;\n\n    /**\n     * Accepts a string containing a CSS selector which is then used to match a set of elements.\n     *\n     * @param object A plain object to wrap in a jQuery object.\n     */\n    (object: {}): JQuery;\n\n    /**\n     * Accepts a string containing a CSS selector which is then used to match a set of elements.\n     *\n     * @param object An existing jQuery object to clone.\n     */\n    (object: JQuery): JQuery;\n\n    /**\n     * Specify a function to execute when the DOM is fully loaded.\n     */\n    (): JQuery;\n\n    /**\n     * Creates DOM elements on the fly from the provided string of raw HTML.\n     *\n     * @param html A string of HTML to create on the fly. Note that this parses HTML, not XML.\n     * @param ownerDocument A document in which the new elements will be created.\n     */\n    (html: string, ownerDocument?: Document): JQuery;\n\n    /**\n     * Creates DOM elements on the fly from the provided string of raw HTML.\n     *\n     * @param html A string defining a single, standalone, HTML element (e.g. <div/> or <div></div>).\n     * @param attributes An object of attributes, events, and methods to call on the newly-created element.\n     */\n    (html: string, attributes: Object): JQuery;\n\n    /**\n     * Relinquish jQuery's control of the $ variable.\n     *\n     * @param removeAll A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).\n     */\n    noConflict(removeAll?: boolean): JQueryStatic;\n\n    /**\n     * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.\n     *\n     * @param deferreds One or more Deferred objects, or plain JavaScript objects.\n     */\n    when<T>(...deferreds: Array<T | JQueryPromise<T>/* as JQueryDeferred<T> */>): JQueryPromise<T>;\n\n    /**\n     * Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.\n     */\n    cssHooks: { [key: string]: any; };\n    cssNumber: any;\n\n    /**\n     * Store arbitrary data associated with the specified element. Returns the value that was set.\n     *\n     * @param element The DOM element to associate with the data.\n     * @param key A string naming the piece of data to set.\n     * @param value The new data value.\n     */\n    data<T>(element: Element, key: string, value: T): T;\n    /**\n     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.\n     *\n     * @param element The DOM element to associate with the data.\n     * @param key A string naming the piece of data to set.\n     */\n    data(element: Element, key: string): any;\n    /**\n     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.\n     *\n     * @param element The DOM element to associate with the data.\n     */\n    data(element: Element): any;\n\n    /**\n     * Execute the next function on the queue for the matched element.\n     *\n     * @param element A DOM element from which to remove and execute a queued function.\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     */\n    dequeue(element: Element, queueName?: string): void;\n\n    /**\n     * Determine whether an element has any jQuery data associated with it.\n     *\n     * @param element A DOM element to be checked for data.\n     */\n    hasData(element: Element): boolean;\n\n    /**\n     * Show the queue of functions to be executed on the matched element.\n     *\n     * @param element A DOM element to inspect for an attached queue.\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     */\n    queue(element: Element, queueName?: string): any[];\n    /**\n     * Manipulate the queue of functions to be executed on the matched element.\n     *\n     * @param element A DOM element where the array of queued functions is attached.\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     * @param newQueue An array of functions to replace the current queue contents.\n     */\n    queue(element: Element, queueName: string, newQueue: Function[]): JQuery;\n    /**\n     * Manipulate the queue of functions to be executed on the matched element.\n     *\n     * @param element A DOM element on which to add a queued function.\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     * @param callback The new function to add to the queue.\n     */\n    queue(element: Element, queueName: string, callback: Function): JQuery;\n\n    /**\n     * Remove a previously-stored piece of data.\n     *\n     * @param element A DOM element from which to remove data.\n     * @param name A string naming the piece of data to remove.\n     */\n    removeData(element: Element, name?: string): JQuery;\n\n    /**\n     * A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.\n     *\n     * @param beforeStart A function that is called just before the constructor returns.\n     */\n    Deferred<T>(beforeStart?: (deferred: JQueryDeferred<T>) => any): JQueryDeferred<T>;\n\n    /**\n     * Effects\n     */\n\n    easing: JQueryEasingFunctions;\n\n    fx: {\n        tick: () => void;\n        /**\n         * The rate (in milliseconds) at which animations fire.\n         */\n        interval: number;\n        stop: () => void;\n        speeds: { slow: number; fast: number; };\n        /**\n         * Globally disable all animations.\n         */\n        off: boolean;\n        step: any;\n    };\n\n    /**\n     * Takes a function and returns a new one that will always have a particular context.\n     *\n     * @param fnction The function whose context will be changed.\n     * @param context The object to which the context (this) of the function should be set.\n     * @param additionalArguments Any number of arguments to be passed to the function referenced in the function argument.\n     */\n    proxy(fnction: (...args: any[]) => any, context: Object, ...additionalArguments: any[]): any;\n    /**\n     * Takes a function and returns a new one that will always have a particular context.\n     *\n     * @param context The object to which the context (this) of the function should be set.\n     * @param name The name of the function whose context will be changed (should be a property of the context object).\n     * @param additionalArguments Any number of arguments to be passed to the function named in the name argument.\n     */\n    proxy(context: Object, name: string, ...additionalArguments: any[]): any;\n\n    Event: JQueryEventConstructor;\n\n    /**\n     * Takes a string and throws an exception containing it.\n     *\n     * @param message The message to send out.\n     */\n    error(message: any): JQuery;\n\n    expr: any;\n    fn: any;  //TODO: Decide how we want to type this\n\n    isReady: boolean;\n\n    // Properties\n    support: JQuerySupport;\n\n    /**\n     * Check to see if a DOM element is a descendant of another DOM element.\n     *\n     * @param container The DOM element that may contain the other element.\n     * @param contained The DOM element that may be contained by (a descendant of) the other element.\n     */\n    contains(container: Element, contained: Element): boolean;\n\n    /**\n     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.\n     *\n     * @param collection The object or array to iterate over.\n     * @param callback The function that will be executed on every object.\n     */\n    each<T>(\n        collection: T[],\n        callback: (indexInArray: number, valueOfElement: T) => any\n    ): any;\n\n    /**\n     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.\n     *\n     * @param collection The object or array to iterate over.\n     * @param callback The function that will be executed on every object.\n     */\n    each(\n        collection: any,\n        callback: (indexInArray: any, valueOfElement: any) => any\n    ): any;\n\n    /**\n     * Merge the contents of two or more objects together into the first object.\n     *\n     * @param target An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.\n     * @param object1 An object containing additional properties to merge in.\n     * @param objectN Additional objects containing properties to merge in.\n     */\n    extend(target: any, object1?: any, ...objectN: any[]): any;\n    /**\n     * Merge the contents of two or more objects together into the first object.\n     *\n     * @param deep If true, the merge becomes recursive (aka. deep copy).\n     * @param target The object to extend. It will receive the new properties.\n     * @param object1 An object containing additional properties to merge in.\n     * @param objectN Additional objects containing properties to merge in.\n     */\n    extend(deep: boolean, target: any, object1?: any, ...objectN: any[]): any;\n\n    /**\n     * Execute some JavaScript code globally.\n     *\n     * @param code The JavaScript code to execute.\n     */\n    globalEval(code: string): any;\n\n    /**\n     * Finds the elements of an array which satisfy a filter function. The original array is not affected.\n     *\n     * @param array The array to search through.\n     * @param func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.\n     * @param invert If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true. If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.\n     */\n    grep<T>(array: T[], func: (elementOfArray?: T, indexInArray?: number) => boolean, invert?: boolean): T[];\n\n    /**\n     * Search for a specified value within an array and return its index (or -1 if not found).\n     *\n     * @param value The value to search for.\n     * @param array An array through which to search.\n     * @param fromIndex he index of the array at which to begin the search. The default is 0, which will search the whole array.\n     */\n    inArray<T>(value: T, array: T[], fromIndex?: number): number;\n\n    /**\n     * Determine whether the argument is an array.\n     *\n     * @param obj Object to test whether or not it is an array.\n     */\n    isArray(obj: any): boolean;\n    /**\n     * Check to see if an object is empty (contains no enumerable properties).\n     *\n     * @param obj The object that will be checked to see if it's empty.\n     */\n    isEmptyObject(obj: any): boolean;\n    /**\n     * Determine if the argument passed is a Javascript function object.\n     *\n     * @param obj Object to test whether or not it is a function.\n     */\n    isFunction(obj: any): boolean;\n    /**\n     * Determines whether its argument is a number.\n     *\n     * @param obj The value to be tested.\n     */\n    isNumeric(value: any): boolean;\n    /**\n     * Check to see if an object is a plain object (created using \"{}\" or \"new Object\").\n     *\n     * @param obj The object that will be checked to see if it's a plain object.\n     */\n    isPlainObject(obj: any): boolean;\n    /**\n     * Determine whether the argument is a window.\n     *\n     * @param obj Object to test whether or not it is a window.\n     */\n    isWindow(obj: any): boolean;\n    /**\n     * Check to see if a DOM node is within an XML document (or is an XML document).\n     *\n     * @param node he DOM node that will be checked to see if it's in an XML document.\n     */\n    isXMLDoc(node: Node): boolean;\n\n    /**\n     * Convert an array-like object into a true JavaScript array.\n     *\n     * @param obj Any object to turn into a native Array.\n     */\n    makeArray(obj: any): any[];\n\n    /**\n     * Translate all items in an array or object to new array of items.\n     *\n     * @param array The Array to translate.\n     * @param callback The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.\n     */\n    map<T, U>(array: T[], callback: (elementOfArray?: T, indexInArray?: number) => U): U[];\n    /**\n     * Translate all items in an array or object to new array of items.\n     *\n     * @param arrayOrObject The Array or Object to translate.\n     * @param callback The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.\n     */\n    map(arrayOrObject: any, callback: (value?: any, indexOrKey?: any) => any): any;\n\n    /**\n     * Merge the contents of two arrays together into the first array.\n     *\n     * @param first The first array to merge, the elements of second added.\n     * @param second The second array to merge into the first, unaltered.\n     */\n    merge<T>(first: T[], second: T[]): T[];\n\n    /**\n     * An empty function.\n     */\n    noop(): any;\n\n    /**\n     * Return a number representing the current time.\n     */\n    now(): number;\n\n    /**\n     * Takes a well-formed JSON string and returns the resulting JavaScript object.\n     *\n     * @param json The JSON string to parse.\n     */\n    parseJSON(json: string): any;\n\n    /**\n     * Parses a string into an XML document.\n     *\n     * @param data a well-formed XML string to be parsed\n     */\n    parseXML(data: string): XMLDocument;\n\n    /**\n     * Remove the whitespace from the beginning and end of a string.\n     *\n     * @param str Remove the whitespace from the beginning and end of a string.\n     */\n    trim(str: string): string;\n\n    /**\n     * Determine the internal JavaScript [[Class]] of an object.\n     *\n     * @param obj Object to get the internal JavaScript [[Class]] of.\n     */\n    type(obj: any): string;\n\n    /**\n     * Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.\n     *\n     * @param array The Array of DOM elements.\n     */\n    unique(array: Element[]): Element[];\n\n    /**\n     * Parses a string into an array of DOM nodes.\n     *\n     * @param data HTML string to be parsed\n     * @param context DOM element to serve as the context in which the HTML fragment will be created\n     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string\n     */\n    parseHTML(data: string, context?: HTMLElement, keepScripts?: boolean): any[];\n\n    /**\n     * Parses a string into an array of DOM nodes.\n     *\n     * @param data HTML string to be parsed\n     * @param context DOM element to serve as the context in which the HTML fragment will be created\n     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string\n     */\n    parseHTML(data: string, context?: Document, keepScripts?: boolean): any[];\n}\n\n/**\n * The jQuery instance members\n */\ninterface JQuery {\n    /**\n     * Register a handler to be called when Ajax requests complete. This is an AjaxEvent.\n     *\n     * @param handler The function to be invoked.\n     */\n    ajaxComplete(handler: (event: JQueryEventObject, XMLHttpRequest: XMLHttpRequest, ajaxOptions: any) => any): JQuery;\n    /**\n     * Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.\n     *\n     * @param handler The function to be invoked.\n     */\n    ajaxError(handler: (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxSettings: JQueryAjaxSettings, thrownError: any) => any): JQuery;\n    /**\n     * Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.\n     *\n     * @param handler The function to be invoked.\n     */\n    ajaxSend(handler: (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxOptions: JQueryAjaxSettings) => any): JQuery;\n    /**\n     * Register a handler to be called when the first Ajax request begins. This is an Ajax Event.\n     *\n     * @param handler The function to be invoked.\n     */\n    ajaxStart(handler: () => any): JQuery;\n    /**\n     * Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.\n     *\n     * @param handler The function to be invoked.\n     */\n    ajaxStop(handler: () => any): JQuery;\n    /**\n     * Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.\n     *\n     * @param handler The function to be invoked.\n     */\n    ajaxSuccess(handler: (event: JQueryEventObject, XMLHttpRequest: XMLHttpRequest, ajaxOptions: JQueryAjaxSettings) => any): JQuery;\n\n    /**\n     * Load data from the server and place the returned HTML into the matched element.\n     *\n     * @param url A string containing the URL to which the request is sent.\n     * @param data A plain object or string that is sent to the server with the request.\n     * @param complete A callback function that is executed when the request completes.\n     */\n    load(url: string, data?: string | Object, complete?: (responseText: string, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any): JQuery;\n\n    /**\n     * Encode a set of form elements as a string for submission.\n     */\n    serialize(): string;\n    /**\n     * Encode a set of form elements as an array of names and values.\n     */\n    serializeArray(): JQuerySerializeArrayElement[];\n\n    /**\n     * Adds the specified class(es) to each of the set of matched elements.\n     *\n     * @param className One or more space-separated classes to be added to the class attribute of each matched element.\n     */\n    addClass(className: string): JQuery;\n    /**\n     * Adds the specified class(es) to each of the set of matched elements.\n     *\n     * @param function A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.\n     */\n    addClass(func: (index: number, className: string) => string): JQuery;\n\n    /**\n     * Add the previous set of elements on the stack to the current set, optionally filtered by a selector.\n     */\n    addBack(selector?: string): JQuery;\n\n    /**\n     * Get the value of an attribute for the first element in the set of matched elements.\n     *\n     * @param attributeName The name of the attribute to get.\n     */\n    attr(attributeName: string): string;\n    /**\n     * Set one or more attributes for the set of matched elements.\n     *\n     * @param attributeName The name of the attribute to set.\n     * @param value A value to set for the attribute.\n     */\n    attr(attributeName: string, value: string | number): JQuery;\n    /**\n     * Set one or more attributes for the set of matched elements.\n     *\n     * @param attributeName The name of the attribute to set.\n     * @param func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.\n     */\n    attr(attributeName: string, func: (index: number, attr: string) => string | number): JQuery;\n    /**\n     * Set one or more attributes for the set of matched elements.\n     *\n     * @param attributes An object of attribute-value pairs to set.\n     */\n    attr(attributes: Object): JQuery;\n\n    /**\n     * Determine whether any of the matched elements are assigned the given class.\n     *\n     * @param className The class name to search for.\n     */\n    hasClass(className: string): boolean;\n\n    /**\n     * Get the HTML contents of the first element in the set of matched elements.\n     */\n    html(): string;\n    /**\n     * Set the HTML contents of each element in the set of matched elements.\n     *\n     * @param htmlString A string of HTML to set as the content of each matched element.\n     */\n    html(htmlString: string): JQuery;\n    /**\n     * Set the HTML contents of each element in the set of matched elements.\n     *\n     * @param func A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.\n     */\n    html(func: (index: number, oldhtml: string) => string): JQuery;\n    /**\n     * Set the HTML contents of each element in the set of matched elements.\n     *\n     * @param func A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.\n     */\n\n    /**\n     * Get the value of a property for the first element in the set of matched elements.\n     *\n     * @param propertyName The name of the property to get.\n     */\n    prop(propertyName: string): any;\n    /**\n     * Set one or more properties for the set of matched elements.\n     *\n     * @param propertyName The name of the property to set.\n     * @param value A value to set for the property.\n     */\n    prop(propertyName: string, value: string | number | boolean): JQuery;\n    /**\n     * Set one or more properties for the set of matched elements.\n     *\n     * @param properties An object of property-value pairs to set.\n     */\n    prop(properties: Object): JQuery;\n    /**\n     * Set one or more properties for the set of matched elements.\n     *\n     * @param propertyName The name of the property to set.\n     * @param func A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.\n     */\n    prop(propertyName: string, func: (index: number, oldPropertyValue: any) => any): JQuery;\n\n    /**\n     * Remove an attribute from each element in the set of matched elements.\n     *\n     * @param attributeName An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.\n     */\n    removeAttr(attributeName: string): JQuery;\n\n    /**\n     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.\n     *\n     * @param className One or more space-separated classes to be removed from the class attribute of each matched element.\n     */\n    removeClass(className?: string): JQuery;\n    /**\n     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.\n     *\n     * @param function A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.\n     */\n    removeClass(func: (index: number, className: string) => string): JQuery;\n\n    /**\n     * Remove a property for the set of matched elements.\n     *\n     * @param propertyName The name of the property to remove.\n     */\n    removeProp(propertyName: string): JQuery;\n\n    /**\n     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.\n     *\n     * @param className One or more class names (separated by spaces) to be toggled for each element in the matched set.\n     * @param swtch A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.\n     */\n    toggleClass(className: string, swtch?: boolean): JQuery;\n    /**\n     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.\n     *\n     * @param swtch A boolean value to determine whether the class should be added or removed.\n     */\n    toggleClass(swtch?: boolean): JQuery;\n    /**\n     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.\n     *\n     * @param func A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.\n     * @param swtch A boolean value to determine whether the class should be added or removed.\n     */\n    toggleClass(func: (index: number, className: string, swtch: boolean) => string, swtch?: boolean): JQuery;\n\n    /**\n     * Get the current value of the first element in the set of matched elements.\n     */\n    val(): any;\n    /**\n     * Set the value of each element in the set of matched elements.\n     *\n     * @param value A string of text, an array of strings or number corresponding to the value of each matched element to set as selected/checked.\n     */\n    val(value: string | string[] | number): JQuery;\n    /**\n     * Set the value of each element in the set of matched elements.\n     *\n     * @param func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.\n     */\n    val(func: (index: number, value: string) => string): JQuery;\n\n\n    /**\n     * Get the value of style properties for the first element in the set of matched elements.\n     *\n     * @param propertyName A CSS property.\n     */\n    css(propertyName: string): string;\n    /**\n     * Set one or more CSS properties for the set of matched elements.\n     *\n     * @param propertyName A CSS property name.\n     * @param value A value to set for the property.\n     */\n    css(propertyName: string, value: string | number): JQuery;\n    /**\n     * Set one or more CSS properties for the set of matched elements.\n     *\n     * @param propertyName A CSS property name.\n     * @param value A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.\n     */\n    css(propertyName: string, value: (index: number, value: string) => string | number): JQuery;\n    /**\n     * Set one or more CSS properties for the set of matched elements.\n     *\n     * @param properties An object of property-value pairs to set.\n     */\n    css(properties: Object): JQuery;\n\n    /**\n     * Get the current computed height for the first element in the set of matched elements.\n     */\n    height(): number;\n    /**\n     * Set the CSS height of every matched element.\n     *\n     * @param value An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).\n     */\n    height(value: number | string): JQuery;\n    /**\n     * Set the CSS height of every matched element.\n     *\n     * @param func A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.\n     */\n    height(func: (index: number, height: number) => number | string): JQuery;\n\n    /**\n     * Get the current computed height for the first element in the set of matched elements, including padding but not border.\n     */\n    innerHeight(): number;\n\n    /**\n     * Sets the inner height on elements in the set of matched elements, including padding but not border.\n     *\n     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).\n     */\n    innerHeight(height: number | string): JQuery;\n\n    /**\n     * Get the current computed width for the first element in the set of matched elements, including padding but not border.\n     */\n    innerWidth(): number;\n\n    /**\n     * Sets the inner width on elements in the set of matched elements, including padding but not border.\n     *\n     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).\n     */\n    innerWidth(width: number | string): JQuery;\n\n    /**\n     * Get the current coordinates of the first element in the set of matched elements, relative to the document.\n     */\n    offset(): JQueryCoordinates;\n    /**\n     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.\n     *\n     * @param coordinates An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.\n     */\n    offset(coordinates: JQueryCoordinates): JQuery;\n    /**\n     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.\n     *\n     * @param func A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.\n     */\n    offset(func: (index: number, coords: JQueryCoordinates) => JQueryCoordinates): JQuery;\n\n    /**\n     * Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.\n     *\n     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.\n     */\n    outerHeight(includeMargin?: boolean): number;\n\n    /**\n     * Sets the outer height on elements in the set of matched elements, including padding and border.\n     *\n     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).\n     */\n    outerHeight(height: number | string): JQuery;\n\n    /**\n     * Get the current computed width for the first element in the set of matched elements, including padding and border.\n     *\n     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.\n     */\n    outerWidth(includeMargin?: boolean): number;\n\n    /**\n     * Sets the outer width on elements in the set of matched elements, including padding and border.\n     *\n     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).\n     */\n    outerWidth(width: number | string): JQuery;\n\n    /**\n     * Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.\n     */\n    position(): JQueryCoordinates;\n\n    /**\n     * Get the current horizontal position of the scroll bar for the first element in the set of matched elements or set the horizontal position of the scroll bar for every matched element.\n     */\n    scrollLeft(): number;\n    /**\n     * Set the current horizontal position of the scroll bar for each of the set of matched elements.\n     *\n     * @param value An integer indicating the new position to set the scroll bar to.\n     */\n    scrollLeft(value: number): JQuery;\n\n    /**\n     * Get the current vertical position of the scroll bar for the first element in the set of matched elements or set the vertical position of the scroll bar for every matched element.\n     */\n    scrollTop(): number;\n    /**\n     * Set the current vertical position of the scroll bar for each of the set of matched elements.\n     *\n     * @param value An integer indicating the new position to set the scroll bar to.\n     */\n    scrollTop(value: number): JQuery;\n\n    /**\n     * Get the current computed width for the first element in the set of matched elements.\n     */\n    width(): number;\n    /**\n     * Set the CSS width of each element in the set of matched elements.\n     *\n     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).\n     */\n    width(value: number | string): JQuery;\n    /**\n     * Set the CSS width of each element in the set of matched elements.\n     *\n     * @param func A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.\n     */\n    width(func: (index: number, width: number) => number | string): JQuery;\n\n    /**\n     * Remove from the queue all items that have not yet been run.\n     *\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     */\n    clearQueue(queueName?: string): JQuery;\n\n    /**\n     * Store arbitrary data associated with the matched elements.\n     *\n     * @param key A string naming the piece of data to set.\n     * @param value The new data value; it can be any Javascript type including Array or Object.\n     */\n    data(key: string, value: any): JQuery;\n    /**\n     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.\n     *\n     * @param key Name of the data stored.\n     */\n    data(key: string): any;\n    /**\n     * Store arbitrary data associated with the matched elements.\n     *\n     * @param obj An object of key-value pairs of data to update.\n     */\n    data(obj: { [key: string]: any; }): JQuery;\n    /**\n     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.\n     */\n    data(): any;\n\n    /**\n     * Execute the next function on the queue for the matched elements.\n     *\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     */\n    dequeue(queueName?: string): JQuery;\n\n    /**\n     * Remove a previously-stored piece of data.\n     *\n     * @param name A string naming the piece of data to delete or space-separated string naming the pieces of data to delete.\n     */\n    removeData(name: string): JQuery;\n    /**\n     * Remove a previously-stored piece of data.\n     *\n     * @param list An array of strings naming the pieces of data to delete.\n     */\n    removeData(list: string[]): JQuery;\n    /**\n     * Remove all previously-stored piece of data.\n     */\n    removeData(): JQuery;\n\n    /**\n     * Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.\n     *\n     * @param type The type of queue that needs to be observed. (default: fx)\n     * @param target Object onto which the promise methods have to be attached\n     */\n    promise(type?: string, target?: Object): JQueryPromise<any>;\n\n    /**\n     * Perform a custom animation of a set of CSS properties.\n     *\n     * @param properties An object of CSS properties and values that the animation will move toward.\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    animate(properties: Object, duration?: string | number, complete?: Function): JQuery;\n    /**\n     * Perform a custom animation of a set of CSS properties.\n     *\n     * @param properties An object of CSS properties and values that the animation will move toward.\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition. (default: swing)\n     * @param complete A function to call once the animation is complete.\n     */\n    animate(properties: Object, duration?: string | number, easing?: string, complete?: Function): JQuery;\n    /**\n     * Perform a custom animation of a set of CSS properties.\n     *\n     * @param properties An object of CSS properties and values that the animation will move toward.\n     * @param options A map of additional options to pass to the method.\n     */\n    animate(properties: Object, options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Set a timer to delay execution of subsequent items in the queue.\n     *\n     * @param duration An integer indicating the number of milliseconds to delay execution of the next item in the queue.\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     */\n    delay(duration: number, queueName?: string): JQuery;\n\n    /**\n     * Display the matched elements by fading them to opaque.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeIn(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Display the matched elements by fading them to opaque.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeIn(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Display the matched elements by fading them to opaque.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    fadeIn(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Hide the matched elements by fading them to transparent.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeOut(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Hide the matched elements by fading them to transparent.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeOut(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Hide the matched elements by fading them to transparent.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    fadeOut(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Adjust the opacity of the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param opacity A number between 0 and 1 denoting the target opacity.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeTo(duration: string | number, opacity: number, complete?: Function): JQuery;\n    /**\n     * Adjust the opacity of the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param opacity A number between 0 and 1 denoting the target opacity.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeTo(duration: string | number, opacity: number, easing?: string, complete?: Function): JQuery;\n\n    /**\n     * Display or hide the matched elements by animating their opacity.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeToggle(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Display or hide the matched elements by animating their opacity.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    fadeToggle(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Display or hide the matched elements by animating their opacity.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    fadeToggle(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.\n     *\n     * @param queue The name of the queue in which to stop animations.\n     */\n    finish(queue?: string): JQuery;\n\n    /**\n     * Hide the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    hide(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Hide the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    hide(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Hide the matched elements.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    hide(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Display the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    show(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Display the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    show(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Display the matched elements.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    show(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Display the matched elements with a sliding motion.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    slideDown(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Display the matched elements with a sliding motion.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    slideDown(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Display the matched elements with a sliding motion.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    slideDown(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Display or hide the matched elements with a sliding motion.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    slideToggle(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Display or hide the matched elements with a sliding motion.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    slideToggle(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Display or hide the matched elements with a sliding motion.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    slideToggle(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Hide the matched elements with a sliding motion.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    slideUp(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Hide the matched elements with a sliding motion.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    slideUp(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Hide the matched elements with a sliding motion.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    slideUp(options: JQueryAnimationOptions): JQuery;\n\n    /**\n     * Stop the currently-running animation on the matched elements.\n     *\n     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.\n     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.\n     */\n    stop(clearQueue?: boolean, jumpToEnd?: boolean): JQuery;\n    /**\n     * Stop the currently-running animation on the matched elements.\n     *\n     * @param queue The name of the queue in which to stop animations.\n     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.\n     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.\n     */\n    stop(queue?: string, clearQueue?: boolean, jumpToEnd?: boolean): JQuery;\n\n    /**\n     * Display or hide the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param complete A function to call once the animation is complete.\n     */\n    toggle(duration?: number | string, complete?: Function): JQuery;\n    /**\n     * Display or hide the matched elements.\n     *\n     * @param duration A string or number determining how long the animation will run.\n     * @param easing A string indicating which easing function to use for the transition.\n     * @param complete A function to call once the animation is complete.\n     */\n    toggle(duration?: number | string, easing?: string, complete?: Function): JQuery;\n    /**\n     * Display or hide the matched elements.\n     *\n     * @param options A map of additional options to pass to the method.\n     */\n    toggle(options: JQueryAnimationOptions): JQuery;\n    /**\n     * Display or hide the matched elements.\n     *\n     * @param showOrHide A Boolean indicating whether to show or hide the elements.\n     */\n    toggle(showOrHide: boolean): JQuery;\n\n    /**\n     * Attach a handler to an event for the elements.\n     *\n     * @param eventType A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    bind(eventType: string, eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Attach a handler to an event for the elements.\n     *\n     * @param eventType A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    bind(eventType: string, handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Attach a handler to an event for the elements.\n     *\n     * @param eventType A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.\n     */\n    bind(eventType: string, eventData: any, preventBubble: boolean): JQuery;\n    /**\n     * Attach a handler to an event for the elements.\n     *\n     * @param eventType A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.\n     * @param preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.\n     */\n    bind(eventType: string, preventBubble: boolean): JQuery;\n    /**\n     * Attach a handler to an event for the elements.\n     *\n     * @param events An object containing one or more DOM event types and functions to execute for them.\n     */\n    bind(events: any): JQuery;\n\n    /**\n     * Trigger the \"blur\" event on an element\n     */\n    blur(): JQuery;\n    /**\n     * Bind an event handler to the \"blur\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    blur(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"blur\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    blur(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"change\" event on an element.\n     */\n    change(): JQuery;\n    /**\n     * Bind an event handler to the \"change\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    change(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"change\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    change(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"click\" event on an element.\n     */\n    click(): JQuery;\n    /**\n     * Bind an event handler to the \"click\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     */\n    click(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"click\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    click(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"contextmenu\" event on an element.\n     */\n    contextmenu(): JQuery;\n    /**\n     * Bind an event handler to the \"contextmenu\" JavaScript event.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    contextmenu(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"contextmenu\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    contextmenu(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"dblclick\" event on an element.\n     */\n    dblclick(): JQuery;\n    /**\n     * Bind an event handler to the \"dblclick\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    dblclick(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"dblclick\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    dblclick(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    delegate(selector: any, eventType: string, handler: (eventObject: JQueryEventObject) => any): JQuery;\n    delegate(selector: any, eventType: string, eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"focus\" event on an element.\n     */\n    focus(): JQuery;\n    /**\n     * Bind an event handler to the \"focus\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    focus(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"focus\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    focus(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"focusin\" event on an element.\n     */\n    focusin(): JQuery;\n    /**\n     * Bind an event handler to the \"focusin\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    focusin(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"focusin\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    focusin(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"focusout\" event on an element.\n     */\n    focusout(): JQuery;\n    /**\n     * Bind an event handler to the \"focusout\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    focusout(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"focusout\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    focusout(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.\n     *\n     * @param handlerIn A function to execute when the mouse pointer enters the element.\n     * @param handlerOut A function to execute when the mouse pointer leaves the element.\n     */\n    hover(handlerIn: (eventObject: JQueryEventObject) => any, handlerOut: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements.\n     *\n     * @param handlerInOut A function to execute when the mouse pointer enters or leaves the element.\n     */\n    hover(handlerInOut: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"keydown\" event on an element.\n     */\n    keydown(): JQuery;\n    /**\n     * Bind an event handler to the \"keydown\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    keydown(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"keydown\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    keydown(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"keypress\" event on an element.\n     */\n    keypress(): JQuery;\n    /**\n     * Bind an event handler to the \"keypress\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    keypress(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"keypress\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    keypress(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"keyup\" event on an element.\n     */\n    keyup(): JQuery;\n    /**\n     * Bind an event handler to the \"keyup\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    keyup(handler: (eventObject: JQueryKeyEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"keyup\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    keyup(eventData?: any, handler?: (eventObject: JQueryKeyEventObject) => any): JQuery;\n\n    /**\n     * Bind an event handler to the \"load\" JavaScript event.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    load(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"load\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    load(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"mousedown\" event on an element.\n     */\n    mousedown(): JQuery;\n    /**\n     * Bind an event handler to the \"mousedown\" JavaScript event.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    mousedown(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"mousedown\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    mousedown(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"mouseenter\" event on an element.\n     */\n    mouseenter(): JQuery;\n    /**\n     * Bind an event handler to be fired when the mouse enters an element.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseenter(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to be fired when the mouse enters an element.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseenter(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"mouseleave\" event on an element.\n     */\n    mouseleave(): JQuery;\n    /**\n     * Bind an event handler to be fired when the mouse leaves an element.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseleave(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to be fired when the mouse leaves an element.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseleave(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"mousemove\" event on an element.\n     */\n    mousemove(): JQuery;\n    /**\n     * Bind an event handler to the \"mousemove\" JavaScript event.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    mousemove(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"mousemove\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    mousemove(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"mouseout\" event on an element.\n     */\n    mouseout(): JQuery;\n    /**\n     * Bind an event handler to the \"mouseout\" JavaScript event.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseout(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"mouseout\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseout(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"mouseover\" event on an element.\n     */\n    mouseover(): JQuery;\n    /**\n     * Bind an event handler to the \"mouseover\" JavaScript event.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseover(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"mouseover\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseover(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"mouseup\" event on an element.\n     */\n    mouseup(): JQuery;\n    /**\n     * Bind an event handler to the \"mouseup\" JavaScript event.\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseup(handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"mouseup\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    mouseup(eventData: Object, handler: (eventObject: JQueryMouseEventObject) => any): JQuery;\n\n    /**\n     * Remove an event handler.\n     */\n    off(): JQuery;\n    /**\n     * Remove an event handler.\n     *\n     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".\n     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.\n     * @param handler A handler function previously attached for the event(s), or the special value false.\n     */\n    off(events: string, selector?: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Remove an event handler.\n     *\n     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".\n     * @param handler A handler function previously attached for the event(s), or the special value false. Takes handler with extra args that can be attached with on().\n     */\n    off(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;\n    /**\n     * Remove an event handler.\n     *\n     * @param events One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".\n     * @param handler A handler function previously attached for the event(s), or the special value false.\n     */\n    off(events: string, handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Remove an event handler.\n     *\n     * @param events An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).\n     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.\n     */\n    off(events: { [key: string]: any; }, selector?: string): JQuery;\n\n    /**\n     * Attach an event handler function for one or more events to the selected elements.\n     *\n     * @param events One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".\n     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. Rest parameter args is for optional parameters passed to jQuery.trigger(). Note that the actual parameters on the event handler function must be marked as optional (? syntax).\n     */\n    on(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;\n    /**\n     * Attach an event handler function for one or more events to the selected elements.\n     *\n     * @param events One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".\n     * @param data Data to be passed to the handler in event.data when an event is triggered.\n     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.\n    */\n    on(events: string, data: any, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;\n    /**\n     * Attach an event handler function for one or more events to the selected elements.\n     *\n     * @param events One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".\n     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.\n     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.\n     */\n    on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;\n    /**\n     * Attach an event handler function for one or more events to the selected elements.\n     *\n     * @param events One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".\n     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.\n     * @param data Data to be passed to the handler in event.data when an event is triggered.\n     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.\n     */\n    on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;\n    /**\n     * Attach an event handler function for one or more events to the selected elements.\n     *\n     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).\n     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.\n     * @param data Data to be passed to the handler in event.data when an event occurs.\n     */\n    on(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;\n    /**\n     * Attach an event handler function for one or more events to the selected elements.\n     *\n     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).\n     * @param data Data to be passed to the handler in event.data when an event occurs.\n     */\n    on(events: { [key: string]: any; }, data?: any): JQuery;\n\n    /**\n     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.\n     *\n     * @param events A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.\n     * @param handler A function to execute at the time the event is triggered.\n     */\n    one(events: string, handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.\n     *\n     * @param events A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.\n     * @param data An object containing data that will be passed to the event handler.\n     * @param handler A function to execute at the time the event is triggered.\n     */\n    one(events: string, data: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.\n     *\n     * @param events One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".\n     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.\n     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.\n     */\n    one(events: string, selector: string, handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.\n     *\n     * @param events One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".\n     * @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.\n     * @param data Data to be passed to the handler in event.data when an event is triggered.\n     * @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.\n     */\n    one(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.\n     *\n     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).\n     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.\n     * @param data Data to be passed to the handler in event.data when an event occurs.\n     */\n    one(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;\n\n    /**\n     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.\n     *\n     * @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).\n     * @param data Data to be passed to the handler in event.data when an event occurs.\n     */\n    one(events: { [key: string]: any; }, data?: any): JQuery;\n\n\n    /**\n     * Specify a function to execute when the DOM is fully loaded.\n     *\n     * @param handler A function to execute after the DOM is ready.\n     */\n    ready(handler: (jQueryAlias?: JQueryStatic) => any): JQuery;\n\n    /**\n     * Trigger the \"resize\" event on an element.\n     */\n    resize(): JQuery;\n    /**\n     * Bind an event handler to the \"resize\" JavaScript event.\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    resize(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"resize\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    resize(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"scroll\" event on an element.\n     */\n    scroll(): JQuery;\n    /**\n     * Bind an event handler to the \"scroll\" JavaScript event.\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    scroll(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"scroll\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    scroll(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"select\" event on an element.\n     */\n    select(): JQuery;\n    /**\n     * Bind an event handler to the \"select\" JavaScript event.\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    select(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"select\" JavaScript event.\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    select(eventData: Object, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Trigger the \"submit\" event on an element.\n     */\n    submit(): JQuery;\n    /**\n     * Bind an event handler to the \"submit\" JavaScript event\n     *\n     * @param handler A function to execute each time the event is triggered.\n     */\n    submit(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"submit\" JavaScript event\n     *\n     * @param eventData An object containing data that will be passed to the event handler.\n     * @param handler A function to execute each time the event is triggered.\n     */\n    submit(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Execute all handlers and behaviors attached to the matched elements for the given event type.\n     *\n     * @param eventType A string containing a JavaScript event type, such as click or submit.\n     * @param extraParameters Additional parameters to pass along to the event handler.\n     */\n    trigger(eventType: string, extraParameters?: any[] | Object): JQuery;\n    /**\n     * Execute all handlers and behaviors attached to the matched elements for the given event type.\n     *\n     * @param event A jQuery.Event object.\n     * @param extraParameters Additional parameters to pass along to the event handler.\n     */\n    trigger(event: JQueryEventObject, extraParameters?: any[] | Object): JQuery;\n\n    /**\n     * Execute all handlers attached to an element for an event.\n     *\n     * @param eventType A string containing a JavaScript event type, such as click or submit.\n     * @param extraParameters An array of additional parameters to pass along to the event handler.\n     */\n    triggerHandler(eventType: string, ...extraParameters: any[]): Object;\n\n    /**\n     * Execute all handlers attached to an element for an event.\n     *\n     * @param event A jQuery.Event object.\n     * @param extraParameters An array of additional parameters to pass along to the event handler.\n     */\n    triggerHandler(event: JQueryEventObject, ...extraParameters: any[]): Object;\n\n    /**\n     * Remove a previously-attached event handler from the elements.\n     *\n     * @param eventType A string containing a JavaScript event type, such as click or submit.\n     * @param handler The function that is to be no longer executed.\n     */\n    unbind(eventType?: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Remove a previously-attached event handler from the elements.\n     *\n     * @param eventType A string containing a JavaScript event type, such as click or submit.\n     * @param fls Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).\n     */\n    unbind(eventType: string, fls: boolean): JQuery;\n    /**\n     * Remove a previously-attached event handler from the elements.\n     *\n     * @param evt A JavaScript event object as passed to an event handler.\n     */\n    unbind(evt: any): JQuery;\n\n    /**\n     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.\n     */\n    undelegate(): JQuery;\n    /**\n     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.\n     *\n     * @param selector A selector which will be used to filter the event results.\n     * @param eventType A string containing a JavaScript event type, such as \"click\" or \"keydown\"\n     * @param handler A function to execute at the time the event is triggered.\n     */\n    undelegate(selector: string, eventType: string, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.\n     *\n     * @param selector A selector which will be used to filter the event results.\n     * @param events An object of one or more event types and previously bound functions to unbind from them.\n     */\n    undelegate(selector: string, events: Object): JQuery;\n    /**\n     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.\n     *\n     * @param namespace A string containing a namespace to unbind all events from.\n     */\n    undelegate(namespace: string): JQuery;\n\n    /**\n     * Bind an event handler to the \"unload\" JavaScript event. (DEPRECATED from v1.8)\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    unload(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"unload\" JavaScript event. (DEPRECATED from v1.8)\n     *\n     * @param eventData A plain object of data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    unload(eventData?: any, handler?: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. (DEPRECATED from v1.10)\n     */\n    context: Element;\n\n    jquery: string;\n\n    /**\n     * Bind an event handler to the \"error\" JavaScript event. (DEPRECATED from v1.8)\n     *\n     * @param handler A function to execute when the event is triggered.\n     */\n    error(handler: (eventObject: JQueryEventObject) => any): JQuery;\n    /**\n     * Bind an event handler to the \"error\" JavaScript event. (DEPRECATED from v1.8)\n     *\n     * @param eventData A plain object of data that will be passed to the event handler.\n     * @param handler A function to execute when the event is triggered.\n     */\n    error(eventData: any, handler: (eventObject: JQueryEventObject) => any): JQuery;\n\n    /**\n     * Add a collection of DOM elements onto the jQuery stack.\n     *\n     * @param elements An array of elements to push onto the stack and make into a new jQuery object.\n     */\n    pushStack(elements: any[]): JQuery;\n    /**\n     * Add a collection of DOM elements onto the jQuery stack.\n     *\n     * @param elements An array of elements to push onto the stack and make into a new jQuery object.\n     * @param name The name of a jQuery method that generated the array of elements.\n     * @param arguments The arguments that were passed in to the jQuery method (for serialization).\n     */\n    pushStack(elements: any[], name: string, arguments: any[]): JQuery;\n\n    /**\n     * Insert content, specified by the parameter, after each element in the set of matched elements.\n     *\n     * param content1 HTML string, DOM element, DocumentFragment, array of elements, or jQuery object to insert after each element in the set of matched elements.\n     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.\n     */\n    after(content1: JQuery | any[] | Element | DocumentFragment | Text | string, ...content2: any[]): JQuery;\n    /**\n     * Insert content, specified by the parameter, after each element in the set of matched elements.\n     *\n     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.\n     */\n    after(func: (index: number, html: string) => string | Element | JQuery): JQuery;\n\n    /**\n     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.\n     *\n     * param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.\n     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.\n     */\n    append(content1: JQuery | any[] | Element | DocumentFragment | Text | string, ...content2: any[]): JQuery;\n    /**\n     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.\n     *\n     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.\n     */\n    append(func: (index: number, html: string) => string | Element | JQuery): JQuery;\n\n    /**\n     * Insert every element in the set of matched elements to the end of the target.\n     *\n     * @param target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.\n     */\n    appendTo(target: JQuery | any[] | Element | string): JQuery;\n\n    /**\n     * Insert content, specified by the parameter, before each element in the set of matched elements.\n     *\n     * param content1 HTML string, DOM element, DocumentFragment, array of elements, or jQuery object to insert before each element in the set of matched elements.\n     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.\n     */\n    before(content1: JQuery | any[] | Element | DocumentFragment | Text | string, ...content2: any[]): JQuery;\n    /**\n     * Insert content, specified by the parameter, before each element in the set of matched elements.\n     *\n     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.\n     */\n    before(func: (index: number, html: string) => string | Element | JQuery): JQuery;\n\n    /**\n     * Create a deep copy of the set of matched elements.\n     *\n     * param withDataAndEvents A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false.\n     * param deepWithDataAndEvents A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).\n     */\n    clone(withDataAndEvents?: boolean, deepWithDataAndEvents?: boolean): JQuery;\n\n    /**\n     * Remove the set of matched elements from the DOM.\n     *\n     * param selector A selector expression that filters the set of matched elements to be removed.\n     */\n    detach(selector?: string): JQuery;\n\n    /**\n     * Remove all child nodes of the set of matched elements from the DOM.\n     */\n    empty(): JQuery;\n\n    /**\n     * Insert every element in the set of matched elements after the target.\n     *\n     * param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.\n     */\n    insertAfter(target: JQuery | any[] | Element | Text | string): JQuery;\n\n    /**\n     * Insert every element in the set of matched elements before the target.\n     *\n     * param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.\n     */\n    insertBefore(target: JQuery | any[] | Element | Text | string): JQuery;\n\n    /**\n     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.\n     *\n     * param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.\n     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.\n     */\n    prepend(content1: JQuery | any[] | Element | DocumentFragment | Text | string, ...content2: any[]): JQuery;\n    /**\n     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.\n     *\n     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.\n     */\n    prepend(func: (index: number, html: string) => string | Element | JQuery): JQuery;\n\n    /**\n     * Insert every element in the set of matched elements to the beginning of the target.\n     *\n     * @param target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.\n     */\n    prependTo(target: JQuery | any[] | Element | string): JQuery;\n\n    /**\n     * Remove the set of matched elements from the DOM.\n     *\n     * @param selector A selector expression that filters the set of matched elements to be removed.\n     */\n    remove(selector?: string): JQuery;\n\n    /**\n     * Replace each target element with the set of matched elements.\n     *\n     * @param target A selector string, jQuery object, DOM element, or array of elements indicating which element(s) to replace.\n     */\n    replaceAll(target: JQuery | any[] | Element | string): JQuery;\n\n    /**\n     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.\n     *\n     * param newContent The content to insert. May be an HTML string, DOM element, array of DOM elements, or jQuery object.\n     */\n    replaceWith(newContent: JQuery | any[] | Element | Text | string): JQuery;\n    /**\n     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.\n     *\n     * param func A function that returns content with which to replace the set of matched elements.\n     */\n    replaceWith(func: () => Element | JQuery): JQuery;\n\n    /**\n     * Get the combined text contents of each element in the set of matched elements, including their descendants.\n     */\n    text(): string;\n    /**\n     * Set the content of each element in the set of matched elements to the specified text.\n     *\n     * @param text The text to set as the content of each matched element. When Number or Boolean is supplied, it will be converted to a String representation.\n     */\n    text(text: string | number | boolean): JQuery;\n    /**\n     * Set the content of each element in the set of matched elements to the specified text.\n     *\n     * @param func A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.\n     */\n    text(func: (index: number, text: string) => string): JQuery;\n\n    /**\n     * Retrieve all the elements contained in the jQuery set, as an array.\n     * @name toArray\n     */\n    toArray(): HTMLElement[];\n\n    /**\n     * Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.\n     */\n    unwrap(): JQuery;\n\n    /**\n     * Wrap an HTML structure around each element in the set of matched elements.\n     *\n     * @param wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.\n     */\n    wrap(wrappingElement: JQuery | Element | string): JQuery;\n    /**\n     * Wrap an HTML structure around each element in the set of matched elements.\n     *\n     * @param func A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.\n     */\n    wrap(func: (index: number) => string | JQuery): JQuery;\n\n    /**\n     * Wrap an HTML structure around all elements in the set of matched elements.\n     *\n     * @param wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.\n     */\n    wrapAll(wrappingElement: JQuery | Element | string): JQuery;\n    wrapAll(func: (index: number) => string): JQuery;\n\n    /**\n     * Wrap an HTML structure around the content of each element in the set of matched elements.\n     *\n     * @param wrappingElement An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.\n     */\n    wrapInner(wrappingElement: JQuery | Element | string): JQuery;\n    /**\n     * Wrap an HTML structure around the content of each element in the set of matched elements.\n     *\n     * @param func A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.\n     */\n    wrapInner(func: (index: number) => string): JQuery;\n\n    /**\n     * Iterate over a jQuery object, executing a function for each matched element.\n     *\n     * @param func A function to execute for each matched element.\n     */\n    each(func: (index: number, elem: Element) => any): JQuery;\n\n    /**\n     * Retrieve one of the elements matched by the jQuery object.\n     *\n     * @param index A zero-based integer indicating which element to retrieve.\n     */\n    get(index: number): HTMLElement;\n    /**\n     * Retrieve the elements matched by the jQuery object.\n     * @alias toArray\n     */\n    get(): HTMLElement[];\n\n    /**\n     * Search for a given element from among the matched elements.\n     */\n    index(): number;\n    /**\n     * Search for a given element from among the matched elements.\n     *\n     * @param selector A selector representing a jQuery collection in which to look for an element.\n     */\n    index(selector: string | JQuery | Element): number;\n\n    /**\n     * The number of elements in the jQuery object.\n     */\n    length: number;\n    /**\n     * A selector representing selector passed to jQuery(), if any, when creating the original set.\n     * version deprecated: 1.7, removed: 1.9\n     */\n    selector: string;\n    [index: string]: any;\n    [index: number]: HTMLElement;\n\n    /**\n     * Add elements to the set of matched elements.\n     *\n     * @param selector A string representing a selector expression to find additional elements to add to the set of matched elements.\n     * @param context The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.\n     */\n    add(selector: string, context?: Element): JQuery;\n    /**\n     * Add elements to the set of matched elements.\n     *\n     * @param elements One or more elements to add to the set of matched elements.\n     */\n    add(...elements: Element[]): JQuery;\n    /**\n     * Add elements to the set of matched elements.\n     *\n     * @param html An HTML fragment to add to the set of matched elements.\n     */\n    add(html: string): JQuery;\n    /**\n     * Add elements to the set of matched elements.\n     *\n     * @param obj An existing jQuery object to add to the set of matched elements.\n     */\n    add(obj: JQuery): JQuery;\n\n    /**\n     * Get the children of each element in the set of matched elements, optionally filtered by a selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    children(selector?: string): JQuery;\n\n    /**\n     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    closest(selector: string): JQuery;\n    /**\n     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     * @param context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.\n     */\n    closest(selector: string, context?: Element): JQuery;\n    /**\n     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n     *\n     * @param obj A jQuery object to match elements against.\n     */\n    closest(obj: JQuery): JQuery;\n    /**\n     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n     *\n     * @param element An element to match elements against.\n     */\n    closest(element: Element): JQuery;\n\n    /**\n     * Get an array of all the elements and selectors matched against the current element up through the DOM tree.\n     *\n     * @param selectors An array or string containing a selector expression to match elements against (can also be a jQuery object).\n     * @param context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.\n     */\n    closest(selectors: any, context?: Element): any[];\n\n    /**\n     * Get the children of each element in the set of matched elements, including text and comment nodes.\n     */\n    contents(): JQuery;\n\n    /**\n     * End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.\n     */\n    end(): JQuery;\n\n    /**\n     * Reduce the set of matched elements to the one at the specified index.\n     *\n     * @param index An integer indicating the 0-based position of the element. OR An integer indicating the position of the element, counting backwards from the last element in the set.\n     *\n     */\n    eq(index: number): JQuery;\n\n    /**\n     * Reduce the set of matched elements to those that match the selector or pass the function's test.\n     *\n     * @param selector A string containing a selector expression to match the current set of elements against.\n     */\n    filter(selector: string): JQuery;\n    /**\n     * Reduce the set of matched elements to those that match the selector or pass the function's test.\n     *\n     * @param func A function used as a test for each element in the set. this is the current DOM element.\n     */\n    filter(func: (index: number, element: Element) => any): JQuery;\n    /**\n     * Reduce the set of matched elements to those that match the selector or pass the function's test.\n     *\n     * @param element An element to match the current set of elements against.\n     */\n    filter(element: Element): JQuery;\n    /**\n     * Reduce the set of matched elements to those that match the selector or pass the function's test.\n     *\n     * @param obj An existing jQuery object to match the current set of elements against.\n     */\n    filter(obj: JQuery): JQuery;\n\n    /**\n     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    find(selector: string): JQuery;\n    /**\n     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.\n     *\n     * @param element An element to match elements against.\n     */\n    find(element: Element): JQuery;\n    /**\n     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.\n     *\n     * @param obj A jQuery object to match elements against.\n     */\n    find(obj: JQuery): JQuery;\n\n    /**\n     * Reduce the set of matched elements to the first in the set.\n     */\n    first(): JQuery;\n\n    /**\n     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    has(selector: string): JQuery;\n    /**\n     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.\n     *\n     * @param contained A DOM element to match elements against.\n     */\n    has(contained: Element): JQuery;\n\n    /**\n     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    is(selector: string): boolean;\n    /**\n     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.\n     *\n     * @param func A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.\n     */\n    is(func: (index: number, element: Element) => boolean): boolean;\n    /**\n     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.\n     *\n     * @param obj An existing jQuery object to match the current set of elements against.\n     */\n    is(obj: JQuery): boolean;\n    /**\n     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.\n     *\n     * @param elements One or more elements to match the current set of elements against.\n     */\n    is(elements: any): boolean;\n\n    /**\n     * Reduce the set of matched elements to the final one in the set.\n     */\n    last(): JQuery;\n\n    /**\n     * Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.\n     *\n     * @param callback A function object that will be invoked for each element in the current set.\n     */\n    map(callback: (index: number, domElement: Element) => any): JQuery;\n\n    /**\n     * Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    next(selector?: string): JQuery;\n\n    /**\n     * Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    nextAll(selector?: string): JQuery;\n\n    /**\n     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.\n     *\n     * @param selector A string containing a selector expression to indicate where to stop matching following sibling elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    nextUntil(selector?: string, filter?: string): JQuery;\n    /**\n     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.\n     *\n     * @param element A DOM node or jQuery object indicating where to stop matching following sibling elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    nextUntil(element?: Element, filter?: string): JQuery;\n    /**\n     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.\n     *\n     * @param obj A DOM node or jQuery object indicating where to stop matching following sibling elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    nextUntil(obj?: JQuery, filter?: string): JQuery;\n\n    /**\n     * Remove elements from the set of matched elements.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    not(selector: string): JQuery;\n    /**\n     * Remove elements from the set of matched elements.\n     *\n     * @param func A function used as a test for each element in the set. this is the current DOM element.\n     */\n    not(func: (index: number, element: Element) => boolean): JQuery;\n    /**\n     * Remove elements from the set of matched elements.\n     *\n     * @param elements One or more DOM elements to remove from the matched set.\n     */\n    not(elements: Element | Element[]): JQuery;\n    /**\n     * Remove elements from the set of matched elements.\n     *\n     * @param obj An existing jQuery object to match the current set of elements against.\n     */\n    not(obj: JQuery): JQuery;\n\n    /**\n     * Get the closest ancestor element that is positioned.\n     */\n    offsetParent(): JQuery;\n\n    /**\n     * Get the parent of each element in the current set of matched elements, optionally filtered by a selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    parent(selector?: string): JQuery;\n\n    /**\n     * Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    parents(selector?: string): JQuery;\n\n    /**\n     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.\n     *\n     * @param selector A string containing a selector expression to indicate where to stop matching ancestor elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    parentsUntil(selector?: string, filter?: string): JQuery;\n    /**\n     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.\n     *\n     * @param element A DOM node or jQuery object indicating where to stop matching ancestor elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    parentsUntil(element?: Element, filter?: string): JQuery;\n    /**\n     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.\n     *\n     * @param obj A DOM node or jQuery object indicating where to stop matching ancestor elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    parentsUntil(obj?: JQuery, filter?: string): JQuery;\n\n    /**\n     * Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    prev(selector?: string): JQuery;\n\n    /**\n     * Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    prevAll(selector?: string): JQuery;\n\n    /**\n     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.\n     *\n     * @param selector A string containing a selector expression to indicate where to stop matching preceding sibling elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    prevUntil(selector?: string, filter?: string): JQuery;\n    /**\n     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.\n     *\n     * @param element A DOM node or jQuery object indicating where to stop matching preceding sibling elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    prevUntil(element?: Element, filter?: string): JQuery;\n    /**\n     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.\n     *\n     * @param obj A DOM node or jQuery object indicating where to stop matching preceding sibling elements.\n     * @param filter A string containing a selector expression to match elements against.\n     */\n    prevUntil(obj?: JQuery, filter?: string): JQuery;\n\n    /**\n     * Get the siblings of each element in the set of matched elements, optionally filtered by a selector.\n     *\n     * @param selector A string containing a selector expression to match elements against.\n     */\n    siblings(selector?: string): JQuery;\n\n    /**\n     * Reduce the set of matched elements to a subset specified by a range of indices.\n     *\n     * @param start An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.\n     * @param end An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.\n     */\n    slice(start: number, end?: number): JQuery;\n\n    /**\n     * Show the queue of functions to be executed on the matched elements.\n     *\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     */\n    queue(queueName?: string): any[];\n    /**\n     * Manipulate the queue of functions to be executed, once for each matched element.\n     *\n     * @param newQueue An array of functions to replace the current queue contents.\n     */\n    queue(newQueue: Function[]): JQuery;\n    /**\n     * Manipulate the queue of functions to be executed, once for each matched element.\n     *\n     * @param callback The new function to add to the queue, with a function to call that will dequeue the next item.\n     */\n    queue(callback: Function): JQuery;\n    /**\n     * Manipulate the queue of functions to be executed, once for each matched element.\n     *\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     * @param newQueue An array of functions to replace the current queue contents.\n     */\n    queue(queueName: string, newQueue: Function[]): JQuery;\n    /**\n     * Manipulate the queue of functions to be executed, once for each matched element.\n     *\n     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.\n     * @param callback The new function to add to the queue, with a function to call that will dequeue the next item.\n     */\n    queue(queueName: string, callback: Function): JQuery;\n}\ndeclare module 'jquery' {\n    export = $;\n}\ndeclare const jQuery: JQueryStatic;\ndeclare const $: JQueryStatic;\n"
  },
  {
    "path": "extensions/html-language-features/server/package.json",
    "content": "{\n  \"name\": \"vscode-html-languageserver\",\n  \"description\": \"HTML language server\",\n  \"version\": \"1.0.0\",\n  \"author\": \"Microsoft Corporation\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \"*\"\n  },\n  \"main\": \"./out/node/htmlServerMain\",\n  \"dependencies\": {\n    \"@vscode/l10n\": \"^0.0.18\",\n    \"vscode-css-languageservice\": \"^6.3.3\",\n    \"vscode-html-languageservice\": \"^5.3.3\",\n    \"vscode-languageserver\": \"^10.0.0-next.12\",\n    \"vscode-languageserver-textdocument\": \"^1.0.12\",\n    \"vscode-uri\": \"^3.0.8\"\n  },\n  \"devDependencies\": {\n    \"@types/mocha\": \"^9.1.1\",\n    \"@types/node\": \"20.x\"\n  },\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:html-language-features-server\",\n    \"watch\": \"npx gulp watch-extension:html-language-features-server\",\n    \"install-service-next\": \"npm install vscode-css-languageservice && npm install vscode-html-languageservice\",\n    \"install-service-local\": \"npm install vscode-css-languageservice && npm install vscode-html-languageservice\",\n    \"install-server-next\": \"npm install vscode-languageserver@next\",\n    \"install-server-local\": \"npm install vscode-languageserver\",\n    \"test\": \"npm run compile && node ./test/index.js\"\n  }\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/browser/htmlServerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createConnection, BrowserMessageReader, BrowserMessageWriter, Disposable } from 'vscode-languageserver/browser';\nimport { RuntimeEnvironment, startServer } from '../htmlServer';\n\nconst messageReader = new BrowserMessageReader(self);\nconst messageWriter = new BrowserMessageWriter(self);\n\nconst connection = createConnection(messageReader, messageWriter);\n\nconsole.log = connection.console.log.bind(connection.console);\nconsole.error = connection.console.error.bind(connection.console);\n\nconst runtime: RuntimeEnvironment = {\n\ttimer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, 0, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t},\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t}\n};\n\nstartServer(connection, runtime);\n"
  },
  {
    "path": "extensions/html-language-features/server/src/browser/htmlServerWorkerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as l10n from '@vscode/l10n';\n\nlet initialized = false;\nconst pendingMessages: any[] = [];\nconst messageHandler = async (e: any) => {\n\tif (!initialized) {\n\t\tconst l10nLog: string[] = [];\n\t\tinitialized = true;\n\t\tconst i10lLocation = e.data.i10lLocation;\n\t\tif (i10lLocation) {\n\t\t\ttry {\n\t\t\t\tawait l10n.config({ uri: i10lLocation });\n\t\t\t\tl10nLog.push(`l10n: Configured to ${i10lLocation.toString()}.`);\n\t\t\t} catch (e) {\n\t\t\t\tl10nLog.push(`l10n: Problems loading ${i10lLocation.toString()} : ${e}.`);\n\t\t\t}\n\t\t} else {\n\t\t\tl10nLog.push(`l10n: No bundle configured.`);\n\t\t}\n\t\tawait import('./htmlServerMain.js');\n\t\tif (self.onmessage !== messageHandler) {\n\t\t\tpendingMessages.forEach(msg => self.onmessage?.(msg));\n\t\t\tpendingMessages.length = 0;\n\t\t}\n\t\tl10nLog.forEach(console.log);\n\t} else {\n\t\tpendingMessages.push(e);\n\t}\n};\nself.onmessage = messageHandler;\n"
  },
  {
    "path": "extensions/html-language-features/server/src/customData.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IHTMLDataProvider, newHTMLDataProvider } from 'vscode-html-languageservice';\nimport { CustomDataRequestService } from './htmlServer';\n\nexport function fetchHTMLDataProviders(dataPaths: string[], requestService: CustomDataRequestService): Promise<IHTMLDataProvider[]> {\n\tconst providers = dataPaths.map(async p => {\n\t\ttry {\n\t\t\tconst content = await requestService.getContent(p);\n\t\t\treturn parseHTMLData(p, content);\n\t\t} catch (e) {\n\t\t\treturn newHTMLDataProvider(p, { version: 1 });\n\t\t}\n\t});\n\n\treturn Promise.all(providers);\n}\n\nfunction parseHTMLData(id: string, source: string): IHTMLDataProvider {\n\tlet rawData: any;\n\n\ttry {\n\t\trawData = JSON.parse(source);\n\t} catch (err) {\n\t\treturn newHTMLDataProvider(id, { version: 1 });\n\t}\n\n\treturn newHTMLDataProvider(id, {\n\t\tversion: rawData.version || 1,\n\t\ttags: rawData.tags || [],\n\t\tglobalAttributes: rawData.globalAttributes || [],\n\t\tvalueSets: rawData.valueSets || []\n\t});\n}\n\n"
  },
  {
    "path": "extensions/html-language-features/server/src/htmlServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n\tConnection, TextDocuments, InitializeParams, InitializeResult, RequestType,\n\tDocumentRangeFormattingRequest, Disposable, ServerCapabilities,\n\tConfigurationRequest, ConfigurationParams, DidChangeWorkspaceFoldersNotification,\n\tDocumentColorRequest, ColorPresentationRequest, TextDocumentSyncKind, NotificationType, RequestType0, DocumentFormattingRequest, FormattingOptions, TextEdit\n} from 'vscode-languageserver';\nimport {\n\tgetLanguageModes, LanguageModes, Settings, TextDocument, Position, Diagnostic, WorkspaceFolder, ColorInformation,\n\tRange, DocumentLink, SymbolInformation, TextDocumentIdentifier, isCompletionItemData\n} from './modes/languageModes';\n\nimport { format } from './modes/formatting';\nimport { pushAll } from './utils/arrays';\nimport { getDocumentContext } from './utils/documentContext';\nimport { URI } from 'vscode-uri';\nimport { formatError, runSafe } from './utils/runner';\nimport { DiagnosticsSupport, registerDiagnosticsPullSupport, registerDiagnosticsPushSupport } from './utils/validation';\n\nimport { getFoldingRanges } from './modes/htmlFolding';\nimport { fetchHTMLDataProviders } from './customData';\nimport { getSelectionRanges } from './modes/selectionRanges';\nimport { SemanticTokenProvider, newSemanticTokenProvider } from './modes/semanticTokens';\nimport { FileSystemProvider, getFileSystemProvider } from './requests';\n\nnamespace CustomDataChangedNotification {\n\texport const type: NotificationType<string[]> = new NotificationType('html/customDataChanged');\n}\n\nnamespace CustomDataContent {\n\texport const type: RequestType<string, string, any> = new RequestType('html/customDataContent');\n}\n\ninterface AutoInsertParams {\n\t/**\n\t * The auto insert kind\n\t */\n\tkind: 'autoQuote' | 'autoClose';\n\t/**\n\t * The text document.\n\t */\n\ttextDocument: TextDocumentIdentifier;\n\t/**\n\t * The position inside the text document.\n\t */\n\tposition: Position;\n}\n\nnamespace AutoInsertRequest {\n\texport const type: RequestType<AutoInsertParams, string, any> = new RequestType('html/autoInsert');\n}\n\n// experimental: semantic tokens\ninterface SemanticTokenParams {\n\ttextDocument: TextDocumentIdentifier;\n\tranges?: Range[];\n}\nnamespace SemanticTokenRequest {\n\texport const type: RequestType<SemanticTokenParams, number[] | null, any> = new RequestType('html/semanticTokens');\n}\nnamespace SemanticTokenLegendRequest {\n\texport const type: RequestType0<{ types: string[]; modifiers: string[] } | null, any> = new RequestType0('html/semanticTokenLegend');\n}\n\nexport interface RuntimeEnvironment {\n\tfileFs?: FileSystemProvider;\n\tconfigureHttpRequests?(proxy: string | undefined, strictSSL: boolean): void;\n\treadonly timer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable;\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable;\n\t};\n}\n\n\nexport interface CustomDataRequestService {\n\tgetContent(uri: string): Promise<string>;\n}\n\n\nexport function startServer(connection: Connection, runtime: RuntimeEnvironment) {\n\n\t// Create a text document manager.\n\tconst documents = new TextDocuments(TextDocument);\n\t// Make the text document manager listen on the connection\n\t// for open, change and close text document events\n\tdocuments.listen(connection);\n\n\tlet workspaceFolders: WorkspaceFolder[] = [];\n\n\tlet languageModes: LanguageModes;\n\n\tlet diagnosticsSupport: DiagnosticsSupport | undefined;\n\n\tlet clientSnippetSupport = false;\n\tlet dynamicFormatterRegistration = false;\n\tlet scopedSettingsSupport = false;\n\tlet workspaceFoldersSupport = false;\n\tlet foldingRangeLimit = Number.MAX_VALUE;\n\tlet formatterMaxNumberOfEdits = Number.MAX_VALUE;\n\n\tconst customDataRequestService: CustomDataRequestService = {\n\t\tgetContent(uri: string) {\n\t\t\treturn connection.sendRequest(CustomDataContent.type, uri);\n\t\t}\n\t};\n\n\tlet globalSettings: Settings = {};\n\tlet documentSettings: { [key: string]: Thenable<Settings> } = {};\n\t// remove document settings on close\n\tdocuments.onDidClose(e => {\n\t\tdelete documentSettings[e.document.uri];\n\t});\n\n\tfunction getDocumentSettings(textDocument: TextDocument, needsDocumentSettings: () => boolean): Thenable<Settings | undefined> {\n\t\tif (scopedSettingsSupport && needsDocumentSettings()) {\n\t\t\tlet promise = documentSettings[textDocument.uri];\n\t\t\tif (!promise) {\n\t\t\t\tconst scopeUri = textDocument.uri;\n\t\t\t\tconst sections = ['css', 'html', 'javascript', 'js/ts'];\n\t\t\t\tconst configRequestParam: ConfigurationParams = { items: sections.map(section => ({ scopeUri, section })) };\n\t\t\t\tpromise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => ({ css: s[0], html: s[1], javascript: s[2], 'js/ts': s[3] }));\n\t\t\t\tdocumentSettings[textDocument.uri] = promise;\n\t\t\t}\n\t\t\treturn promise;\n\t\t}\n\t\treturn Promise.resolve(undefined);\n\t}\n\n\t// After the server has started the client sends an initialize request. The server receives\n\t// in the passed params the rootPath of the workspace plus the client capabilities\n\tconnection.onInitialize((params: InitializeParams): InitializeResult => {\n\t\tconst initializationOptions = params.initializationOptions as any || {};\n\n\t\tworkspaceFolders = (<any>params).workspaceFolders;\n\t\tif (!Array.isArray(workspaceFolders)) {\n\t\t\tworkspaceFolders = [];\n\t\t\tif (params.rootPath) {\n\t\t\t\tworkspaceFolders.push({ name: '', uri: URI.file(params.rootPath).toString() });\n\t\t\t}\n\t\t}\n\n\t\tconst handledSchemas = initializationOptions?.handledSchemas as string[] ?? ['file'];\n\n\t\tconst fileSystemProvider = getFileSystemProvider(handledSchemas, connection, runtime);\n\n\t\tconst workspace = {\n\t\t\tget settings() { return globalSettings; },\n\t\t\tget folders() { return workspaceFolders; }\n\t\t};\n\n\t\tlanguageModes = getLanguageModes(initializationOptions?.embeddedLanguages || { css: true, javascript: true }, workspace, params.capabilities, fileSystemProvider);\n\n\t\tconst dataPaths: string[] = initializationOptions?.dataPaths || [];\n\t\tfetchHTMLDataProviders(dataPaths, customDataRequestService).then(dataProviders => {\n\t\t\tlanguageModes.updateDataProviders(dataProviders);\n\t\t});\n\n\t\tdocuments.onDidClose(e => {\n\t\t\tlanguageModes.onDocumentRemoved(e.document);\n\t\t});\n\t\tconnection.onShutdown(() => {\n\t\t\tlanguageModes.dispose();\n\t\t});\n\n\t\tfunction getClientCapability<T>(name: string, def: T) {\n\t\t\tconst keys = name.split('.');\n\t\t\tlet c: any = params.capabilities;\n\t\t\tfor (let i = 0; c && i < keys.length; i++) {\n\t\t\t\tif (!c.hasOwnProperty(keys[i])) {\n\t\t\t\t\treturn def;\n\t\t\t\t}\n\t\t\t\tc = c[keys[i]];\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t\tclientSnippetSupport = getClientCapability('textDocument.completion.completionItem.snippetSupport', false);\n\t\tdynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && (typeof initializationOptions?.provideFormatter !== 'boolean');\n\t\tscopedSettingsSupport = getClientCapability('workspace.configuration', false);\n\t\tworkspaceFoldersSupport = getClientCapability('workspace.workspaceFolders', false);\n\t\tfoldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);\n\t\tformatterMaxNumberOfEdits = initializationOptions?.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;\n\n\t\tconst supportsDiagnosticPull = getClientCapability('textDocument.diagnostic', undefined);\n\t\tif (supportsDiagnosticPull === undefined) {\n\t\t\tdiagnosticsSupport = registerDiagnosticsPushSupport(documents, connection, runtime, validateTextDocument);\n\t\t} else {\n\t\t\tdiagnosticsSupport = registerDiagnosticsPullSupport(documents, connection, runtime, validateTextDocument);\n\t\t}\n\n\t\tconst capabilities: ServerCapabilities = {\n\t\t\ttextDocumentSync: TextDocumentSyncKind.Incremental,\n\t\t\tcompletionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['.', ':', '<', '\"', '=', '/'] } : undefined,\n\t\t\thoverProvider: true,\n\t\t\tdocumentHighlightProvider: true,\n\t\t\tdocumentRangeFormattingProvider: initializationOptions?.provideFormatter === true,\n\t\t\tdocumentFormattingProvider: initializationOptions?.provideFormatter === true,\n\t\t\tdocumentLinkProvider: { resolveProvider: false },\n\t\t\tdocumentSymbolProvider: true,\n\t\t\tdefinitionProvider: true,\n\t\t\tsignatureHelpProvider: { triggerCharacters: ['('] },\n\t\t\treferencesProvider: true,\n\t\t\tcolorProvider: {},\n\t\t\tfoldingRangeProvider: true,\n\t\t\tselectionRangeProvider: true,\n\t\t\trenameProvider: true,\n\t\t\tlinkedEditingRangeProvider: true,\n\t\t\tdiagnosticProvider: {\n\t\t\t\tdocumentSelector: null,\n\t\t\t\tinterFileDependencies: false,\n\t\t\t\tworkspaceDiagnostics: false\n\t\t\t}\n\t\t};\n\t\treturn { capabilities };\n\t});\n\n\tconnection.onInitialized(() => {\n\t\tif (workspaceFoldersSupport) {\n\t\t\tconnection.client.register(DidChangeWorkspaceFoldersNotification.type);\n\n\t\t\tconnection.onNotification(DidChangeWorkspaceFoldersNotification.type, e => {\n\t\t\t\tconst toAdd = e.event.added;\n\t\t\t\tconst toRemove = e.event.removed;\n\t\t\t\tconst updatedFolders = [];\n\t\t\t\tif (workspaceFolders) {\n\t\t\t\t\tfor (const folder of workspaceFolders) {\n\t\t\t\t\t\tif (!toRemove.some(r => r.uri === folder.uri) && !toAdd.some(r => r.uri === folder.uri)) {\n\t\t\t\t\t\t\tupdatedFolders.push(folder);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tworkspaceFolders = updatedFolders.concat(toAdd);\n\t\t\t\tdiagnosticsSupport?.requestRefresh();\n\t\t\t});\n\t\t}\n\t});\n\n\tlet formatterRegistrations: Thenable<Disposable>[] | null = null;\n\n\t// The settings have changed. Is send on server activation as well.\n\tconnection.onDidChangeConfiguration((change) => {\n\t\tglobalSettings = change.settings as Settings;\n\t\tdocumentSettings = {}; // reset all document settings\n\t\tdiagnosticsSupport?.requestRefresh();\n\n\t\t// dynamically enable & disable the formatter\n\t\tif (dynamicFormatterRegistration) {\n\t\t\tconst enableFormatter = globalSettings && globalSettings.html && globalSettings.html.format && globalSettings.html.format.enable;\n\t\t\tif (enableFormatter) {\n\t\t\t\tif (!formatterRegistrations) {\n\t\t\t\t\tconst documentSelector = [{ language: 'html' }, { language: 'handlebars' }];\n\t\t\t\t\tformatterRegistrations = [\n\t\t\t\t\t\tconnection.client.register(DocumentRangeFormattingRequest.type, { documentSelector }),\n\t\t\t\t\t\tconnection.client.register(DocumentFormattingRequest.type, { documentSelector })\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else if (formatterRegistrations) {\n\t\t\t\tformatterRegistrations.forEach(p => p.then(r => r.dispose()));\n\t\t\t\tformatterRegistrations = null;\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction isValidationEnabled(languageId: string, settings: Settings = globalSettings) {\n\t\tconst validationSettings = settings && settings.html && settings.html.validate;\n\t\tif (validationSettings) {\n\t\t\treturn languageId === 'css' && validationSettings.styles !== false || languageId === 'javascript' && validationSettings.scripts !== false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tasync function validateTextDocument(textDocument: TextDocument): Promise<Diagnostic[]> {\n\t\ttry {\n\t\t\tconst version = textDocument.version;\n\t\t\tconst diagnostics: Diagnostic[] = [];\n\t\t\tif (textDocument.languageId === 'html') {\n\t\t\t\tconst modes = languageModes.getAllModesInDocument(textDocument);\n\t\t\t\tconst settings = await getDocumentSettings(textDocument, () => modes.some(m => !!m.doValidation));\n\t\t\t\tconst latestTextDocument = documents.get(textDocument.uri);\n\t\t\t\tif (latestTextDocument && latestTextDocument.version === version) { // check no new version has come in after in after the async op\n\t\t\t\t\tfor (const mode of modes) {\n\t\t\t\t\t\tif (mode.doValidation && isValidationEnabled(mode.getId(), settings)) {\n\t\t\t\t\t\t\tpushAll(diagnostics, await mode.doValidation(latestTextDocument, settings));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn diagnostics;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconnection.console.error(formatError(`Error while validating ${textDocument.uri}`, e));\n\t\t}\n\t\treturn [];\n\t}\n\n\tconnection.onCompletion(async (textDocumentPosition, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(textDocumentPosition.textDocument.uri);\n\t\t\tif (!document) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst mode = languageModes.getModeAtPosition(document, textDocumentPosition.position);\n\t\t\tif (!mode || !mode.doComplete) {\n\t\t\t\treturn { isIncomplete: true, items: [] };\n\t\t\t}\n\t\t\tconst doComplete = mode.doComplete;\n\n\t\t\tconst settings = await getDocumentSettings(document, () => doComplete.length > 2);\n\t\t\tconst documentContext = getDocumentContext(document.uri, workspaceFolders);\n\t\t\treturn doComplete(document, textDocumentPosition.position, documentContext, settings);\n\n\t\t}, null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`, token);\n\t});\n\n\tconnection.onCompletionResolve((item, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst data = item.data;\n\t\t\tif (isCompletionItemData(data)) {\n\t\t\t\tconst mode = languageModes.getMode(data.languageId);\n\t\t\t\tconst document = documents.get(data.uri);\n\t\t\t\tif (mode && mode.doResolve && document) {\n\t\t\t\t\treturn mode.doResolve(document, item);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn item;\n\t\t}, item, `Error while resolving completion proposal`, token);\n\t});\n\n\tconnection.onHover((textDocumentPosition, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(textDocumentPosition.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst mode = languageModes.getModeAtPosition(document, textDocumentPosition.position);\n\t\t\t\tconst doHover = mode?.doHover;\n\t\t\t\tif (doHover) {\n\t\t\t\t\tconst settings = await getDocumentSettings(document, () => doHover.length > 2);\n\t\t\t\t\treturn doHover(document, textDocumentPosition.position, settings);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing hover for ${textDocumentPosition.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentHighlight((documentHighlightParams, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(documentHighlightParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst mode = languageModes.getModeAtPosition(document, documentHighlightParams.position);\n\t\t\t\tif (mode && mode.findDocumentHighlight) {\n\t\t\t\t\treturn mode.findDocumentHighlight(document, documentHighlightParams.position);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing document highlights for ${documentHighlightParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDefinition((definitionParams, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(definitionParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst mode = languageModes.getModeAtPosition(document, definitionParams.position);\n\t\t\t\tif (mode && mode.findDefinition) {\n\t\t\t\t\treturn mode.findDefinition(document, definitionParams.position);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t}, null, `Error while computing definitions for ${definitionParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onReferences((referenceParams, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(referenceParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst mode = languageModes.getModeAtPosition(document, referenceParams.position);\n\t\t\t\tif (mode && mode.findReferences) {\n\t\t\t\t\treturn mode.findReferences(document, referenceParams.position);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing references for ${referenceParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onSignatureHelp((signatureHelpParms, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(signatureHelpParms.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst mode = languageModes.getModeAtPosition(document, signatureHelpParms.position);\n\t\t\t\tif (mode && mode.doSignatureHelp) {\n\t\t\t\t\treturn mode.doSignatureHelp(document, signatureHelpParms.position);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing signature help for ${signatureHelpParms.textDocument.uri}`, token);\n\t});\n\n\tasync function onFormat(textDocument: TextDocumentIdentifier, range: Range | undefined, options: FormattingOptions): Promise<TextEdit[]> {\n\t\tconst document = documents.get(textDocument.uri);\n\t\tif (document) {\n\t\t\tlet settings = await getDocumentSettings(document, () => true);\n\t\t\tif (!settings) {\n\t\t\t\tsettings = globalSettings;\n\t\t\t}\n\t\t\tconst unformattedTags: string = settings && settings.html && settings.html.format && settings.html.format.unformatted || '';\n\t\t\tconst enabledModes = { css: !unformattedTags.match(/\\bstyle\\b/), javascript: !unformattedTags.match(/\\bscript\\b/) };\n\n\t\t\tconst edits = await format(languageModes, document, range ?? getFullRange(document), options, settings, enabledModes);\n\t\t\tif (edits.length > formatterMaxNumberOfEdits) {\n\t\t\t\tconst newText = TextDocument.applyEdits(document, edits);\n\t\t\t\treturn [TextEdit.replace(getFullRange(document), newText)];\n\t\t\t}\n\t\t\treturn edits;\n\t\t}\n\t\treturn [];\n\t}\n\n\tconnection.onDocumentRangeFormatting((formatParams, token) => {\n\t\treturn runSafe(runtime, () => onFormat(formatParams.textDocument, formatParams.range, formatParams.options), [], `Error while formatting range for ${formatParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentFormatting((formatParams, token) => {\n\t\treturn runSafe(runtime, () => onFormat(formatParams.textDocument, undefined, formatParams.options), [], `Error while formatting ${formatParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentLinks((documentLinkParam, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(documentLinkParam.textDocument.uri);\n\t\t\tconst links: DocumentLink[] = [];\n\t\t\tif (document) {\n\t\t\t\tconst documentContext = getDocumentContext(document.uri, workspaceFolders);\n\t\t\t\tfor (const m of languageModes.getAllModesInDocument(document)) {\n\t\t\t\t\tif (m.findDocumentLinks) {\n\t\t\t\t\t\tpushAll(links, await m.findDocumentLinks(document, documentContext));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn links;\n\t\t}, [], `Error while document links for ${documentLinkParam.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentSymbol((documentSymbolParms, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(documentSymbolParms.textDocument.uri);\n\t\t\tconst symbols: SymbolInformation[] = [];\n\t\t\tif (document) {\n\t\t\t\tfor (const m of languageModes.getAllModesInDocument(document)) {\n\t\t\t\t\tif (m.findDocumentSymbols) {\n\t\t\t\t\t\tpushAll(symbols, await m.findDocumentSymbols(document));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn symbols;\n\t\t}, [], `Error while computing document symbols for ${documentSymbolParms.textDocument.uri}`, token);\n\t});\n\n\tconnection.onRequest(DocumentColorRequest.type, (params, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst infos: ColorInformation[] = [];\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tfor (const m of languageModes.getAllModesInDocument(document)) {\n\t\t\t\t\tif (m.findDocumentColors) {\n\t\t\t\t\t\tpushAll(infos, await m.findDocumentColors(document));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn infos;\n\t\t}, [], `Error while computing document colors for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onRequest(ColorPresentationRequest.type, (params, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst mode = languageModes.getModeAtPosition(document, params.range.start);\n\t\t\t\tif (mode && mode.getColorPresentations) {\n\t\t\t\t\treturn mode.getColorPresentations(document, params.color, params.range);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing color presentations for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onRequest(AutoInsertRequest.type, (params, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst pos = params.position;\n\t\t\t\tif (pos.character > 0) {\n\t\t\t\t\tconst mode = languageModes.getModeAtPosition(document, Position.create(pos.line, pos.character - 1));\n\t\t\t\t\tif (mode && mode.doAutoInsert) {\n\t\t\t\t\t\treturn mode.doAutoInsert(document, pos, params.kind);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing auto insert actions for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onFoldingRanges((params, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\treturn getFoldingRanges(languageModes, document, foldingRangeLimit, token);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing folding regions for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onSelectionRanges((params, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\treturn getSelectionRanges(languageModes, document, params.positions);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing selection ranges for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onRenameRequest((params, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tconst position: Position = params.position;\n\n\t\t\tif (document) {\n\t\t\t\tconst mode = languageModes.getModeAtPosition(document, params.position);\n\n\t\t\t\tif (mode && mode.doRename) {\n\t\t\t\t\treturn mode.doRename(document, position, params.newName);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing rename for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.languages.onLinkedEditingRange((params, token) => {\n\t\treturn <any> /* todo remove when microsoft/vscode-languageserver-node#700 fixed */ runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst pos = params.position;\n\t\t\t\tif (pos.character > 0) {\n\t\t\t\t\tconst mode = languageModes.getModeAtPosition(document, Position.create(pos.line, pos.character - 1));\n\t\t\t\t\tif (mode && mode.doLinkedEditing) {\n\t\t\t\t\t\tconst ranges = await mode.doLinkedEditing(document, pos);\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\treturn { ranges };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing synced regions for ${params.textDocument.uri}`, token);\n\t});\n\n\tlet semanticTokensProvider: SemanticTokenProvider | undefined;\n\tfunction getSemanticTokenProvider() {\n\t\tif (!semanticTokensProvider) {\n\t\t\tsemanticTokensProvider = newSemanticTokenProvider(languageModes);\n\t\t}\n\t\treturn semanticTokensProvider;\n\t}\n\n\tconnection.onRequest(SemanticTokenRequest.type, (params, token) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\treturn getSemanticTokenProvider().getSemanticTokens(document, params.ranges);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing semantic tokens for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onRequest(SemanticTokenLegendRequest.type, token => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\treturn getSemanticTokenProvider().legend;\n\t\t}, null, `Error while computing semantic tokens legend`, token);\n\t});\n\n\tconnection.onNotification(CustomDataChangedNotification.type, dataPaths => {\n\t\tfetchHTMLDataProviders(dataPaths, customDataRequestService).then(dataProviders => {\n\t\t\tlanguageModes.updateDataProviders(dataProviders);\n\t\t});\n\t});\n\n\t// Listen on the connection\n\tconnection.listen();\n}\n\nfunction getFullRange(document: TextDocument): Range {\n\treturn Range.create(Position.create(0, 0), document.positionAt(document.getText().length));\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/languageModelCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument } from 'vscode-html-languageservice';\n\nexport interface LanguageModelCache<T> {\n\tget(document: TextDocument): T;\n\tonDocumentRemoved(document: TextDocument): void;\n\tdispose(): void;\n}\n\nexport function getLanguageModelCache<T>(maxEntries: number, cleanupIntervalTimeInSec: number, parse: (document: TextDocument) => T): LanguageModelCache<T> {\n\tlet languageModels: { [uri: string]: { version: number; languageId: string; cTime: number; languageModel: T } } = {};\n\tlet nModels = 0;\n\n\tlet cleanupInterval: NodeJS.Timeout | undefined = undefined;\n\tif (cleanupIntervalTimeInSec > 0) {\n\t\tcleanupInterval = setInterval(() => {\n\t\t\tconst cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;\n\t\t\tconst uris = Object.keys(languageModels);\n\t\t\tfor (const uri of uris) {\n\t\t\t\tconst languageModelInfo = languageModels[uri];\n\t\t\t\tif (languageModelInfo.cTime < cutoffTime) {\n\t\t\t\t\tdelete languageModels[uri];\n\t\t\t\t\tnModels--;\n\t\t\t\t}\n\t\t\t}\n\t\t}, cleanupIntervalTimeInSec * 1000);\n\t}\n\n\treturn {\n\t\tget(document: TextDocument): T {\n\t\t\tconst version = document.version;\n\t\t\tconst languageId = document.languageId;\n\t\t\tconst languageModelInfo = languageModels[document.uri];\n\t\t\tif (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {\n\t\t\t\tlanguageModelInfo.cTime = Date.now();\n\t\t\t\treturn languageModelInfo.languageModel;\n\t\t\t}\n\t\t\tconst languageModel = parse(document);\n\t\t\tlanguageModels[document.uri] = { languageModel, version, languageId, cTime: Date.now() };\n\t\t\tif (!languageModelInfo) {\n\t\t\t\tnModels++;\n\t\t\t}\n\n\t\t\tif (nModels === maxEntries) {\n\t\t\t\tlet oldestTime = Number.MAX_VALUE;\n\t\t\t\tlet oldestUri = null;\n\t\t\t\tfor (const uri in languageModels) {\n\t\t\t\t\tconst languageModelInfo = languageModels[uri];\n\t\t\t\t\tif (languageModelInfo.cTime < oldestTime) {\n\t\t\t\t\t\toldestUri = uri;\n\t\t\t\t\t\toldestTime = languageModelInfo.cTime;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (oldestUri) {\n\t\t\t\t\tdelete languageModels[oldestUri];\n\t\t\t\t\tnModels--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn languageModel;\n\n\t\t},\n\t\tonDocumentRemoved(document: TextDocument) {\n\t\t\tconst uri = document.uri;\n\t\t\tif (languageModels[uri]) {\n\t\t\t\tdelete languageModels[uri];\n\t\t\t\tnModels--;\n\t\t\t}\n\t\t},\n\t\tdispose() {\n\t\t\tif (typeof cleanupInterval !== 'undefined') {\n\t\t\t\tclearInterval(cleanupInterval);\n\t\t\t\tcleanupInterval = undefined;\n\t\t\t\tlanguageModels = {};\n\t\t\t\tnModels = 0;\n\t\t\t}\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/cssMode.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { LanguageModelCache, getLanguageModelCache } from '../languageModelCache';\nimport { Stylesheet, LanguageService as CSSLanguageService } from 'vscode-css-languageservice';\nimport { LanguageMode, Workspace, Color, TextDocument, Position, Range, CompletionList, DocumentContext, Diagnostic } from './languageModes';\nimport { HTMLDocumentRegions, CSS_STYLE_RULE } from './embeddedSupport';\n\nexport function getCSSMode(cssLanguageService: CSSLanguageService, documentRegions: LanguageModelCache<HTMLDocumentRegions>, workspace: Workspace): LanguageMode {\n\tconst embeddedCSSDocuments = getLanguageModelCache<TextDocument>(10, 60, document => documentRegions.get(document).getEmbeddedDocument('css'));\n\tconst cssStylesheets = getLanguageModelCache<Stylesheet>(10, 60, document => cssLanguageService.parseStylesheet(document));\n\n\treturn {\n\t\tgetId() {\n\t\t\treturn 'css';\n\t\t},\n\t\tasync doValidation(document: TextDocument, settings = workspace.settings) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn (cssLanguageService.doValidation(embedded, cssStylesheets.get(embedded), settings && settings.css) as Diagnostic[]);\n\t\t},\n\t\tasync doComplete(document: TextDocument, position: Position, documentContext: DocumentContext, _settings = workspace.settings) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\tconst stylesheet = cssStylesheets.get(embedded);\n\t\t\treturn cssLanguageService.doComplete2(embedded, position, stylesheet, documentContext, _settings?.css?.completion) || CompletionList.create();\n\t\t},\n\t\tasync doHover(document: TextDocument, position: Position, settings = workspace.settings) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.doHover(embedded, position, cssStylesheets.get(embedded), settings?.css?.hover);\n\t\t},\n\t\tasync findDocumentHighlight(document: TextDocument, position: Position) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.findDocumentHighlights(embedded, position, cssStylesheets.get(embedded));\n\t\t},\n\t\tasync findDocumentSymbols(document: TextDocument) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.findDocumentSymbols(embedded, cssStylesheets.get(embedded)).filter(s => s.name !== CSS_STYLE_RULE);\n\t\t},\n\t\tasync findDefinition(document: TextDocument, position: Position) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.findDefinition(embedded, position, cssStylesheets.get(embedded));\n\t\t},\n\t\tasync findReferences(document: TextDocument, position: Position) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.findReferences(embedded, position, cssStylesheets.get(embedded));\n\t\t},\n\t\tasync findDocumentColors(document: TextDocument) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.findDocumentColors(embedded, cssStylesheets.get(embedded));\n\t\t},\n\t\tasync getColorPresentations(document: TextDocument, color: Color, range: Range) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.getColorPresentations(embedded, cssStylesheets.get(embedded), color, range);\n\t\t},\n\t\tasync getFoldingRanges(document: TextDocument) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.getFoldingRanges(embedded, {});\n\t\t},\n\t\tasync getSelectionRange(document: TextDocument, position: Position) {\n\t\t\tconst embedded = embeddedCSSDocuments.get(document);\n\t\t\treturn cssLanguageService.getSelectionRanges(embedded, [position], cssStylesheets.get(embedded))[0];\n\t\t},\n\t\tonDocumentRemoved(document: TextDocument) {\n\t\t\tembeddedCSSDocuments.onDocumentRemoved(document);\n\t\t\tcssStylesheets.onDocumentRemoved(document);\n\t\t},\n\t\tdispose() {\n\t\t\tembeddedCSSDocuments.dispose();\n\t\t\tcssStylesheets.dispose();\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/embeddedSupport.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument, Position, LanguageService, TokenType, Range } from './languageModes';\n\nexport interface LanguageRange extends Range {\n\tlanguageId: string | undefined;\n\tattributeValue?: boolean;\n}\n\nexport interface HTMLDocumentRegions {\n\tgetEmbeddedDocument(languageId: string, ignoreAttributeValues?: boolean): TextDocument;\n\tgetLanguageRanges(range: Range): LanguageRange[];\n\tgetLanguageAtPosition(position: Position): string | undefined;\n\tgetLanguagesInDocument(): string[];\n\tgetImportedScripts(): string[];\n}\n\nexport const CSS_STYLE_RULE = '__';\n\ninterface EmbeddedRegion { languageId: string | undefined; start: number; end: number; attributeValue?: boolean }\n\n\nexport function getDocumentRegions(languageService: LanguageService, document: TextDocument): HTMLDocumentRegions {\n\tconst regions: EmbeddedRegion[] = [];\n\tconst scanner = languageService.createScanner(document.getText());\n\tlet lastTagName: string = '';\n\tlet lastAttributeName: string | null = null;\n\tlet languageIdFromType: string | undefined = undefined;\n\tconst importedScripts: string[] = [];\n\n\tlet token = scanner.scan();\n\twhile (token !== TokenType.EOS) {\n\t\tswitch (token) {\n\t\t\tcase TokenType.StartTag:\n\t\t\t\tlastTagName = scanner.getTokenText();\n\t\t\t\tlastAttributeName = null;\n\t\t\t\tlanguageIdFromType = 'javascript';\n\t\t\t\tbreak;\n\t\t\tcase TokenType.Styles:\n\t\t\t\tregions.push({ languageId: 'css', start: scanner.getTokenOffset(), end: scanner.getTokenEnd() });\n\t\t\t\tbreak;\n\t\t\tcase TokenType.Script:\n\t\t\t\tregions.push({ languageId: languageIdFromType, start: scanner.getTokenOffset(), end: scanner.getTokenEnd() });\n\t\t\t\tbreak;\n\t\t\tcase TokenType.AttributeName:\n\t\t\t\tlastAttributeName = scanner.getTokenText();\n\t\t\t\tbreak;\n\t\t\tcase TokenType.AttributeValue:\n\t\t\t\tif (lastAttributeName === 'src' && lastTagName.toLowerCase() === 'script') {\n\t\t\t\t\tlet value = scanner.getTokenText();\n\t\t\t\t\tif (value[0] === '\\'' || value[0] === '\"') {\n\t\t\t\t\t\tvalue = value.substr(1, value.length - 1);\n\t\t\t\t\t}\n\t\t\t\t\timportedScripts.push(value);\n\t\t\t\t} else if (lastAttributeName === 'type' && lastTagName.toLowerCase() === 'script') {\n\t\t\t\t\tif (/[\"'](module|(text|application)\\/(java|ecma)script|text\\/babel)[\"']/.test(scanner.getTokenText())) {\n\t\t\t\t\t\tlanguageIdFromType = 'javascript';\n\t\t\t\t\t} else if (/[\"']text\\/typescript[\"']/.test(scanner.getTokenText())) {\n\t\t\t\t\t\tlanguageIdFromType = 'typescript';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlanguageIdFromType = undefined;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst attributeLanguageId = getAttributeLanguage(lastAttributeName!);\n\t\t\t\t\tif (attributeLanguageId) {\n\t\t\t\t\t\tlet start = scanner.getTokenOffset();\n\t\t\t\t\t\tlet end = scanner.getTokenEnd();\n\t\t\t\t\t\tconst firstChar = document.getText()[start];\n\t\t\t\t\t\tif (firstChar === '\\'' || firstChar === '\"') {\n\t\t\t\t\t\t\tstart++;\n\t\t\t\t\t\t\tend--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tregions.push({ languageId: attributeLanguageId, start, end, attributeValue: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastAttributeName = null;\n\t\t\t\tbreak;\n\t\t}\n\t\ttoken = scanner.scan();\n\t}\n\treturn {\n\t\tgetLanguageRanges: (range: Range) => getLanguageRanges(document, regions, range),\n\t\tgetEmbeddedDocument: (languageId: string, ignoreAttributeValues: boolean) => getEmbeddedDocument(document, regions, languageId, ignoreAttributeValues),\n\t\tgetLanguageAtPosition: (position: Position) => getLanguageAtPosition(document, regions, position),\n\t\tgetLanguagesInDocument: () => getLanguagesInDocument(document, regions),\n\t\tgetImportedScripts: () => importedScripts\n\t};\n}\n\n\nfunction getLanguageRanges(document: TextDocument, regions: EmbeddedRegion[], range: Range): LanguageRange[] {\n\tconst result: LanguageRange[] = [];\n\tlet currentPos = range ? range.start : Position.create(0, 0);\n\tlet currentOffset = range ? document.offsetAt(range.start) : 0;\n\tconst endOffset = range ? document.offsetAt(range.end) : document.getText().length;\n\tfor (const region of regions) {\n\t\tif (region.end > currentOffset && region.start < endOffset) {\n\t\t\tconst start = Math.max(region.start, currentOffset);\n\t\t\tconst startPos = document.positionAt(start);\n\t\t\tif (currentOffset < region.start) {\n\t\t\t\tresult.push({\n\t\t\t\t\tstart: currentPos,\n\t\t\t\t\tend: startPos,\n\t\t\t\t\tlanguageId: 'html'\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst end = Math.min(region.end, endOffset);\n\t\t\tconst endPos = document.positionAt(end);\n\t\t\tif (end > region.start) {\n\t\t\t\tresult.push({\n\t\t\t\t\tstart: startPos,\n\t\t\t\t\tend: endPos,\n\t\t\t\t\tlanguageId: region.languageId,\n\t\t\t\t\tattributeValue: region.attributeValue\n\t\t\t\t});\n\t\t\t}\n\t\t\tcurrentOffset = end;\n\t\t\tcurrentPos = endPos;\n\t\t}\n\t}\n\tif (currentOffset < endOffset) {\n\t\tconst endPos = range ? range.end : document.positionAt(endOffset);\n\t\tresult.push({\n\t\t\tstart: currentPos,\n\t\t\tend: endPos,\n\t\t\tlanguageId: 'html'\n\t\t});\n\t}\n\treturn result;\n}\n\nfunction getLanguagesInDocument(_document: TextDocument, regions: EmbeddedRegion[]): string[] {\n\tconst result = [];\n\tfor (const region of regions) {\n\t\tif (region.languageId && result.indexOf(region.languageId) === -1) {\n\t\t\tresult.push(region.languageId);\n\t\t\tif (result.length === 3) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tresult.push('html');\n\treturn result;\n}\n\nfunction getLanguageAtPosition(document: TextDocument, regions: EmbeddedRegion[], position: Position): string | undefined {\n\tconst offset = document.offsetAt(position);\n\tfor (const region of regions) {\n\t\tif (region.start <= offset) {\n\t\t\tif (offset <= region.end) {\n\t\t\t\treturn region.languageId;\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn 'html';\n}\n\nfunction getEmbeddedDocument(document: TextDocument, contents: EmbeddedRegion[], languageId: string, ignoreAttributeValues: boolean): TextDocument {\n\tlet currentPos = 0;\n\tconst oldContent = document.getText();\n\tlet result = '';\n\tlet lastSuffix = '';\n\tfor (const c of contents) {\n\t\tif (c.languageId === languageId && (!ignoreAttributeValues || !c.attributeValue)) {\n\t\t\tresult = substituteWithWhitespace(result, currentPos, c.start, oldContent, lastSuffix, getPrefix(c));\n\t\t\tresult += updateContent(c, oldContent.substring(c.start, c.end));\n\t\t\tcurrentPos = c.end;\n\t\t\tlastSuffix = getSuffix(c);\n\t\t}\n\t}\n\tresult = substituteWithWhitespace(result, currentPos, oldContent.length, oldContent, lastSuffix, '');\n\treturn TextDocument.create(document.uri, languageId, document.version, result);\n}\n\nfunction getPrefix(c: EmbeddedRegion) {\n\tif (c.attributeValue) {\n\t\tswitch (c.languageId) {\n\t\t\tcase 'css': return CSS_STYLE_RULE + '{';\n\t\t}\n\t}\n\treturn '';\n}\nfunction getSuffix(c: EmbeddedRegion) {\n\tif (c.attributeValue) {\n\t\tswitch (c.languageId) {\n\t\t\tcase 'css': return '}';\n\t\t\tcase 'javascript': return ';';\n\t\t}\n\t}\n\treturn '';\n}\nfunction updateContent(c: EmbeddedRegion, content: string): string {\n\tif (!c.attributeValue && c.languageId === 'javascript') {\n\t\treturn content.replace(`<!--`, `/* `).replace(`-->`, ` */`);\n\t}\n\tif (c.languageId === 'css') {\n\t\tconst quoteEscape = /(&quot;|&#34;)/g;\n\t\treturn content.replace(quoteEscape, (match, _, offset) => {\n\t\t\tconst spaces = ' '.repeat(match.length - 1);\n\t\t\tconst afterChar = content[offset + match.length];\n\t\t\tif (!afterChar || afterChar.includes(' ')) {\n\t\t\t\treturn `${spaces}\"`;\n\t\t\t}\n\t\t\treturn `\"${spaces}`;\n\t\t});\n\t}\n\treturn content;\n}\n\nfunction substituteWithWhitespace(result: string, start: number, end: number, oldContent: string, before: string, after: string) {\n\tresult += before;\n\tlet accumulatedWS = -before.length; // start with a negative value to account for the before string\n\tfor (let i = start; i < end; i++) {\n\t\tconst ch = oldContent[i];\n\t\tif (ch === '\\n' || ch === '\\r') {\n\t\t\t// only write new lines, skip the whitespace\n\t\t\taccumulatedWS = 0;\n\t\t\tresult += ch;\n\t\t} else {\n\t\t\taccumulatedWS++;\n\t\t}\n\t}\n\tresult = append(result, ' ', accumulatedWS - after.length);\n\tresult += after;\n\treturn result;\n}\n\nfunction append(result: string, str: string, n: number): string {\n\twhile (n > 0) {\n\t\tif (n & 1) {\n\t\t\tresult += str;\n\t\t}\n\t\tn >>= 1;\n\t\tstr += str;\n\t}\n\treturn result;\n}\n\nfunction getAttributeLanguage(attributeName: string): string | null {\n\tconst match = attributeName.match(/^(style)$|^(on\\w+)$/i);\n\tif (!match) {\n\t\treturn null;\n\t}\n\treturn match[1] ? 'css' : 'javascript';\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/formatting.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { LanguageModes, Settings, LanguageModeRange, TextDocument, Range, TextEdit, FormattingOptions, Position } from './languageModes';\nimport { pushAll } from '../utils/arrays';\nimport { isEOL } from '../utils/strings';\n\nexport async function format(languageModes: LanguageModes, document: TextDocument, formatRange: Range, formattingOptions: FormattingOptions, settings: Settings | undefined, enabledModes: { [mode: string]: boolean }) {\n\tconst result: TextEdit[] = [];\n\n\tconst endPos = formatRange.end;\n\tlet endOffset = document.offsetAt(endPos);\n\tconst content = document.getText();\n\tif (endPos.character === 0 && endPos.line > 0 && endOffset !== content.length) {\n\t\t// if selection ends after a new line, exclude that new line\n\t\tconst prevLineStart = document.offsetAt(Position.create(endPos.line - 1, 0));\n\t\twhile (isEOL(content, endOffset - 1) && endOffset > prevLineStart) {\n\t\t\tendOffset--;\n\t\t}\n\t\tformatRange = Range.create(formatRange.start, document.positionAt(endOffset));\n\t}\n\n\n\t// run the html formatter on the full range and pass the result content to the embedded formatters.\n\t// from the final content create a single edit\n\t// advantages of this approach are\n\t//  - correct indents in the html document\n\t//  - correct initial indent for embedded formatters\n\t//  - no worrying of overlapping edits\n\n\t// make sure we start in html\n\tconst allRanges = languageModes.getModesInRange(document, formatRange);\n\tlet i = 0;\n\tlet startPos = formatRange.start;\n\tconst isHTML = (range: LanguageModeRange) => range.mode && range.mode.getId() === 'html';\n\n\twhile (i < allRanges.length && !isHTML(allRanges[i])) {\n\t\tconst range = allRanges[i];\n\t\tif (!range.attributeValue && range.mode && range.mode.format) {\n\t\t\tconst edits = await range.mode.format(document, Range.create(startPos, range.end), formattingOptions, settings);\n\t\t\tpushAll(result, edits);\n\t\t}\n\t\tstartPos = range.end;\n\t\ti++;\n\t}\n\tif (i === allRanges.length) {\n\t\treturn result;\n\t}\n\t// modify the range\n\tformatRange = Range.create(startPos, formatRange.end);\n\n\t// perform a html format and apply changes to a new document\n\tconst htmlMode = languageModes.getMode('html')!;\n\tconst htmlEdits = await htmlMode.format!(document, formatRange, formattingOptions, settings);\n\tlet htmlFormattedContent = TextDocument.applyEdits(document, htmlEdits);\n\tif (formattingOptions.insertFinalNewline && endOffset === content.length && !htmlFormattedContent.endsWith('\\n')) {\n\t\thtmlFormattedContent = htmlFormattedContent + '\\n';\n\t\thtmlEdits.push(TextEdit.insert(endPos, '\\n'));\n\t}\n\tconst newDocument = TextDocument.create(document.uri + '.tmp', document.languageId, document.version, htmlFormattedContent);\n\ttry {\n\t\t// run embedded formatters on html formatted content: - formatters see correct initial indent\n\t\tconst afterFormatRangeLength = document.getText().length - document.offsetAt(formatRange.end); // length of unchanged content after replace range\n\t\tconst newFormatRange = Range.create(formatRange.start, newDocument.positionAt(htmlFormattedContent.length - afterFormatRangeLength));\n\t\tconst embeddedRanges = languageModes.getModesInRange(newDocument, newFormatRange);\n\n\t\tconst embeddedEdits: TextEdit[] = [];\n\n\t\tfor (const r of embeddedRanges) {\n\t\t\tconst mode = r.mode;\n\t\t\tif (mode && mode.format && enabledModes[mode.getId()] && !r.attributeValue) {\n\t\t\t\tconst edits = await mode.format(newDocument, r, formattingOptions, settings);\n\t\t\t\tfor (const edit of edits) {\n\t\t\t\t\tembeddedEdits.push(edit);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (embeddedEdits.length === 0) {\n\t\t\tpushAll(result, htmlEdits);\n\t\t\treturn result;\n\t\t}\n\n\t\t// apply all embedded format edits and create a single edit for all changes\n\t\tconst resultContent = TextDocument.applyEdits(newDocument, embeddedEdits);\n\t\tconst resultReplaceText = resultContent.substring(document.offsetAt(formatRange.start), resultContent.length - afterFormatRangeLength);\n\n\t\tresult.push(TextEdit.replace(formatRange, resultReplaceText));\n\t\treturn result;\n\t} finally {\n\t\tlanguageModes.onDocumentRemoved(newDocument);\n\t}\n\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/htmlFolding.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument, FoldingRange, Position, Range, LanguageModes, LanguageMode } from './languageModes';\nimport { CancellationToken } from 'vscode-languageserver';\n\nexport async function getFoldingRanges(languageModes: LanguageModes, document: TextDocument, maxRanges: number | undefined, _cancellationToken: CancellationToken | null): Promise<FoldingRange[]> {\n\tconst htmlMode = languageModes.getMode('html');\n\tconst range = Range.create(Position.create(0, 0), Position.create(document.lineCount, 0));\n\tlet result: FoldingRange[] = [];\n\tif (htmlMode && htmlMode.getFoldingRanges) {\n\t\tresult.push(... await htmlMode.getFoldingRanges(document));\n\t}\n\n\t// cache folding ranges per mode\n\tconst rangesPerMode: { [mode: string]: FoldingRange[] } = Object.create(null);\n\tconst getRangesForMode = async (mode: LanguageMode) => {\n\t\tif (mode.getFoldingRanges) {\n\t\t\tlet ranges = rangesPerMode[mode.getId()];\n\t\t\tif (!Array.isArray(ranges)) {\n\t\t\t\tranges = await mode.getFoldingRanges(document) || [];\n\t\t\t\trangesPerMode[mode.getId()] = ranges;\n\t\t\t}\n\t\t\treturn ranges;\n\t\t}\n\t\treturn [];\n\t};\n\n\tconst modeRanges = languageModes.getModesInRange(document, range);\n\tfor (const modeRange of modeRanges) {\n\t\tconst mode = modeRange.mode;\n\t\tif (mode && mode !== htmlMode && !modeRange.attributeValue) {\n\t\t\tconst ranges = await getRangesForMode(mode);\n\t\t\tresult.push(...ranges.filter(r => r.startLine >= modeRange.start.line && r.endLine < modeRange.end.line));\n\t\t}\n\t}\n\tif (maxRanges && result.length > maxRanges) {\n\t\tresult = limitRanges(result, maxRanges);\n\t}\n\treturn result;\n}\n\nfunction limitRanges(ranges: FoldingRange[], maxRanges: number) {\n\tranges = ranges.sort((r1, r2) => {\n\t\tlet diff = r1.startLine - r2.startLine;\n\t\tif (diff === 0) {\n\t\t\tdiff = r1.endLine - r2.endLine;\n\t\t}\n\t\treturn diff;\n\t});\n\n\t// compute each range's nesting level in 'nestingLevels'.\n\t// count the number of ranges for each level in 'nestingLevelCounts'\n\tlet top: FoldingRange | undefined = undefined;\n\tconst previous: FoldingRange[] = [];\n\tconst nestingLevels: number[] = [];\n\tconst nestingLevelCounts: number[] = [];\n\n\tconst setNestingLevel = (index: number, level: number) => {\n\t\tnestingLevels[index] = level;\n\t\tif (level < 30) {\n\t\t\tnestingLevelCounts[level] = (nestingLevelCounts[level] || 0) + 1;\n\t\t}\n\t};\n\n\t// compute nesting levels and sanitize\n\tfor (let i = 0; i < ranges.length; i++) {\n\t\tconst entry = ranges[i];\n\t\tif (!top) {\n\t\t\ttop = entry;\n\t\t\tsetNestingLevel(i, 0);\n\t\t} else {\n\t\t\tif (entry.startLine > top.startLine) {\n\t\t\t\tif (entry.endLine <= top.endLine) {\n\t\t\t\t\tprevious.push(top);\n\t\t\t\t\ttop = entry;\n\t\t\t\t\tsetNestingLevel(i, previous.length);\n\t\t\t\t} else if (entry.startLine > top.endLine) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttop = previous.pop();\n\t\t\t\t\t} while (top && entry.startLine > top.endLine);\n\t\t\t\t\tif (top) {\n\t\t\t\t\t\tprevious.push(top);\n\t\t\t\t\t}\n\t\t\t\t\ttop = entry;\n\t\t\t\t\tsetNestingLevel(i, previous.length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tlet entries = 0;\n\tlet maxLevel = 0;\n\tfor (let i = 0; i < nestingLevelCounts.length; i++) {\n\t\tconst n = nestingLevelCounts[i];\n\t\tif (n) {\n\t\t\tif (n + entries > maxRanges) {\n\t\t\t\tmaxLevel = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tentries += n;\n\t\t}\n\t}\n\tconst result = [];\n\tfor (let i = 0; i < ranges.length; i++) {\n\t\tconst level = nestingLevels[i];\n\t\tif (typeof level === 'number') {\n\t\t\tif (level < maxLevel || (level === maxLevel && entries++ < maxRanges)) {\n\t\t\t\tresult.push(ranges[i]);\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/htmlMode.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { getLanguageModelCache } from '../languageModelCache';\nimport {\n\tLanguageService as HTMLLanguageService, HTMLDocument, DocumentContext, FormattingOptions,\n\tHTMLFormatConfiguration, SelectionRange,\n\tTextDocument, Position, Range, FoldingRange,\n\tLanguageMode, Workspace, Settings\n} from './languageModes';\n\nexport function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace: Workspace): LanguageMode {\n\tconst htmlDocuments = getLanguageModelCache<HTMLDocument>(10, 60, document => htmlLanguageService.parseHTMLDocument(document));\n\treturn {\n\t\tgetId() {\n\t\t\treturn 'html';\n\t\t},\n\t\tasync getSelectionRange(document: TextDocument, position: Position): Promise<SelectionRange> {\n\t\t\treturn htmlLanguageService.getSelectionRanges(document, [position])[0];\n\t\t},\n\t\tdoComplete(document: TextDocument, position: Position, documentContext: DocumentContext, settings = workspace.settings) {\n\t\t\tconst htmlSettings = settings?.html;\n\t\t\tconst options = merge(htmlSettings?.suggest, {});\n\t\t\toptions.hideAutoCompleteProposals = htmlSettings?.autoClosingTags === true;\n\t\t\toptions.attributeDefaultValue = htmlSettings?.completion?.attributeDefaultValue ?? 'doublequotes';\n\n\t\t\tconst htmlDocument = htmlDocuments.get(document);\n\t\t\tconst completionList = htmlLanguageService.doComplete2(document, position, htmlDocument, documentContext, options);\n\t\t\treturn completionList;\n\t\t},\n\t\tasync doHover(document: TextDocument, position: Position, settings?: Settings) {\n\t\t\treturn htmlLanguageService.doHover(document, position, htmlDocuments.get(document), settings?.html?.hover);\n\t\t},\n\t\tasync findDocumentHighlight(document: TextDocument, position: Position) {\n\t\t\treturn htmlLanguageService.findDocumentHighlights(document, position, htmlDocuments.get(document));\n\t\t},\n\t\tasync findDocumentLinks(document: TextDocument, documentContext: DocumentContext) {\n\t\t\treturn htmlLanguageService.findDocumentLinks(document, documentContext);\n\t\t},\n\t\tasync findDocumentSymbols(document: TextDocument) {\n\t\t\treturn htmlLanguageService.findDocumentSymbols(document, htmlDocuments.get(document));\n\t\t},\n\t\tasync format(document: TextDocument, range: Range, formatParams: FormattingOptions, settings = workspace.settings) {\n\t\t\tconst formatSettings: HTMLFormatConfiguration = merge(settings?.html?.format, {});\n\t\t\tif (formatSettings.contentUnformatted) {\n\t\t\t\tformatSettings.contentUnformatted = formatSettings.contentUnformatted + ',script';\n\t\t\t} else {\n\t\t\t\tformatSettings.contentUnformatted = 'script';\n\t\t\t}\n\t\t\tmerge(formatParams, formatSettings);\n\t\t\treturn htmlLanguageService.format(document, range, formatSettings);\n\t\t},\n\t\tasync getFoldingRanges(document: TextDocument): Promise<FoldingRange[]> {\n\t\t\treturn htmlLanguageService.getFoldingRanges(document);\n\t\t},\n\t\tasync doAutoInsert(document: TextDocument, position: Position, kind: 'autoQuote' | 'autoClose', settings = workspace.settings) {\n\t\t\tconst offset = document.offsetAt(position);\n\t\t\tconst text = document.getText();\n\t\t\tif (kind === 'autoQuote') {\n\t\t\t\tif (offset > 0 && text.charAt(offset - 1) === '=') {\n\t\t\t\t\tconst htmlSettings = settings?.html;\n\t\t\t\t\tconst options = merge(htmlSettings?.suggest, {});\n\t\t\t\t\toptions.attributeDefaultValue = htmlSettings?.completion?.attributeDefaultValue ?? 'doublequotes';\n\n\t\t\t\t\treturn htmlLanguageService.doQuoteComplete(document, position, htmlDocuments.get(document), options);\n\t\t\t\t}\n\t\t\t} else if (kind === 'autoClose') {\n\t\t\t\tif (offset > 0 && text.charAt(offset - 1).match(/[>\\/]/g)) {\n\t\t\t\t\treturn htmlLanguageService.doTagComplete(document, position, htmlDocuments.get(document));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync doRename(document: TextDocument, position: Position, newName: string) {\n\t\t\tconst htmlDocument = htmlDocuments.get(document);\n\t\t\treturn htmlLanguageService.doRename(document, position, newName, htmlDocument);\n\t\t},\n\t\tasync onDocumentRemoved(document: TextDocument) {\n\t\t\thtmlDocuments.onDocumentRemoved(document);\n\t\t},\n\t\tasync findMatchingTagPosition(document: TextDocument, position: Position) {\n\t\t\tconst htmlDocument = htmlDocuments.get(document);\n\t\t\treturn htmlLanguageService.findMatchingTagPosition(document, position, htmlDocument);\n\t\t},\n\t\tasync doLinkedEditing(document: TextDocument, position: Position) {\n\t\t\tconst htmlDocument = htmlDocuments.get(document);\n\t\t\treturn htmlLanguageService.findLinkedEditingRanges(document, position, htmlDocument);\n\t\t},\n\t\tdispose() {\n\t\t\thtmlDocuments.dispose();\n\t\t}\n\t};\n}\n\nfunction merge(src: any, dst: any): any {\n\tif (src) {\n\t\tfor (const key in src) {\n\t\t\tif (src.hasOwnProperty(key)) {\n\t\t\t\tdst[key] = src[key];\n\t\t\t}\n\t\t}\n\t}\n\treturn dst;\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/javascriptLibs.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { join, basename, dirname } from 'path';\nimport { readFileSync } from 'fs';\n\nconst contents: { [name: string]: string } = {};\n\nconst serverFolder = basename(__dirname) === 'dist' ? dirname(__dirname) : dirname(dirname(__dirname));\nconst TYPESCRIPT_LIB_SOURCE = join(serverFolder, '../../node_modules/typescript/lib');\nconst JQUERY_PATH = join(serverFolder, 'lib/jquery.d.ts');\n\nexport function loadLibrary(name: string) {\n\tlet content = contents[name];\n\tif (typeof content !== 'string') {\n\t\tlet libPath;\n\t\tif (name === 'jquery') {\n\t\t\tlibPath = JQUERY_PATH;\n\t\t} else {\n\t\t\tlibPath = join(TYPESCRIPT_LIB_SOURCE, name); // from source\n\t\t}\n\t\ttry {\n\t\t\tcontent = readFileSync(libPath).toString();\n\t\t} catch (e) {\n\t\t\tconsole.log(`Unable to load library ${name} at ${libPath}`);\n\t\t\tcontent = '';\n\t\t}\n\t\tcontents[name] = content;\n\t}\n\treturn content;\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/javascriptMode.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { LanguageModelCache, getLanguageModelCache } from '../languageModelCache';\nimport {\n\tSymbolInformation, SymbolKind, CompletionItem, Location, SignatureHelp, SignatureInformation, ParameterInformation,\n\tDefinition, TextEdit, TextDocument, Diagnostic, DiagnosticSeverity, Range, CompletionItemKind, Hover,\n\tDocumentHighlight, DocumentHighlightKind, CompletionList, Position, FormattingOptions, FoldingRange, FoldingRangeKind, SelectionRange,\n\tLanguageMode, Settings, SemanticTokenData, Workspace, DocumentContext, CompletionItemData, isCompletionItemData\n} from './languageModes';\nimport { getWordAtText, isWhitespaceOnly, repeat } from '../utils/strings';\nimport { HTMLDocumentRegions } from './embeddedSupport';\n\nimport * as ts from 'typescript';\nimport { getSemanticTokens, getSemanticTokenLegend } from './javascriptSemanticTokens';\n\nconst JS_WORD_REGEX = /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g;\n\nfunction getLanguageServiceHost(scriptKind: ts.ScriptKind) {\n\tconst compilerOptions: ts.CompilerOptions = { allowNonTsExtensions: true, allowJs: true, lib: ['lib.es2020.full.d.ts'], target: ts.ScriptTarget.Latest, moduleResolution: ts.ModuleResolutionKind.Classic, experimentalDecorators: false };\n\n\tlet currentTextDocument = TextDocument.create('init', 'javascript', 1, '');\n\tconst jsLanguageService = import(/* webpackChunkName: \"javascriptLibs\" */ './javascriptLibs.js').then(libs => {\n\t\tconst host: ts.LanguageServiceHost = {\n\t\t\tgetCompilationSettings: () => compilerOptions,\n\t\t\tgetScriptFileNames: () => [currentTextDocument.uri, 'jquery'],\n\t\t\tgetScriptKind: (fileName) => {\n\t\t\t\tif (fileName === currentTextDocument.uri) {\n\t\t\t\t\treturn scriptKind;\n\t\t\t\t}\n\t\t\t\treturn fileName.substr(fileName.length - 2) === 'ts' ? ts.ScriptKind.TS : ts.ScriptKind.JS;\n\t\t\t},\n\t\t\tgetScriptVersion: (fileName: string) => {\n\t\t\t\tif (fileName === currentTextDocument.uri) {\n\t\t\t\t\treturn String(currentTextDocument.version);\n\t\t\t\t}\n\t\t\t\treturn '1'; // default lib an jquery.d.ts are static\n\t\t\t},\n\t\t\tgetScriptSnapshot: (fileName: string) => {\n\t\t\t\tlet text = '';\n\t\t\t\tif (fileName === currentTextDocument.uri) {\n\t\t\t\t\ttext = currentTextDocument.getText();\n\t\t\t\t} else {\n\t\t\t\t\ttext = libs.loadLibrary(fileName);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tgetText: (start, end) => text.substring(start, end),\n\t\t\t\t\tgetLength: () => text.length,\n\t\t\t\t\tgetChangeRange: () => undefined\n\t\t\t\t};\n\t\t\t},\n\t\t\tgetCurrentDirectory: () => '',\n\t\t\tgetDefaultLibFileName: (_options: ts.CompilerOptions) => 'es2020.full',\n\t\t\treadFile: (path: string, _encoding?: string | undefined): string | undefined => {\n\t\t\t\tif (path === currentTextDocument.uri) {\n\t\t\t\t\treturn currentTextDocument.getText();\n\t\t\t\t} else {\n\t\t\t\t\treturn libs.loadLibrary(path);\n\t\t\t\t}\n\t\t\t},\n\t\t\tfileExists: (path: string): boolean => {\n\t\t\t\tif (path === currentTextDocument.uri) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\treturn !!libs.loadLibrary(path);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdirectoryExists: (path: string): boolean => {\n\t\t\t\t// typescript tries to first find libraries in node_modules/@types and node_modules/@typescript\n\t\t\t\t// there's no node_modules in our setup\n\t\t\t\tif (path.startsWith('node_modules')) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\n\t\t\t}\n\t\t};\n\t\treturn ts.createLanguageService(host);\n\t});\n\treturn {\n\t\tasync getLanguageService(jsDocument: TextDocument): Promise<ts.LanguageService> {\n\t\t\tcurrentTextDocument = jsDocument;\n\t\t\treturn jsLanguageService;\n\t\t},\n\t\tgetCompilationSettings() {\n\t\t\treturn compilerOptions;\n\t\t},\n\t\tdispose() {\n\t\t\tjsLanguageService.then(s => s.dispose());\n\t\t}\n\t};\n}\n\nconst ignoredErrors = [\n\t1108,  /* A_return_statement_can_only_be_used_within_a_function_body_1108 */\n\t2792, /* Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_the_paths_option */\n];\n\nexport function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocumentRegions>, languageId: 'javascript' | 'typescript', workspace: Workspace): LanguageMode {\n\tconst jsDocuments = getLanguageModelCache<TextDocument>(10, 60, document => documentRegions.get(document).getEmbeddedDocument(languageId));\n\n\tconst host = getLanguageServiceHost(languageId === 'javascript' ? ts.ScriptKind.JS : ts.ScriptKind.TS);\n\tconst globalSettings: Settings = {};\n\n\tfunction updateHostSettings(settings: Settings) {\n\t\tconst hostSettings = host.getCompilationSettings();\n\t\thostSettings.experimentalDecorators = settings?.['js/ts']?.implicitProjectConfig?.experimentalDecorators;\n\t\thostSettings.strictNullChecks = settings?.['js/ts']?.implicitProjectConfig.strictNullChecks;\n\t}\n\n\treturn {\n\t\tgetId() {\n\t\t\treturn languageId;\n\t\t},\n\t\tasync doValidation(document: TextDocument, settings = workspace.settings): Promise<Diagnostic[]> {\n\t\t\tupdateHostSettings(settings);\n\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst languageService = await host.getLanguageService(jsDocument);\n\t\t\tconst syntaxDiagnostics: ts.Diagnostic[] = languageService.getSyntacticDiagnostics(jsDocument.uri);\n\t\t\tconst semanticDiagnostics = languageService.getSemanticDiagnostics(jsDocument.uri);\n\t\t\treturn syntaxDiagnostics.concat(semanticDiagnostics).filter(d => !ignoredErrors.includes(d.code)).map((diag: ts.Diagnostic): Diagnostic => {\n\t\t\t\treturn {\n\t\t\t\t\trange: convertRange(jsDocument, diag),\n\t\t\t\t\tseverity: DiagnosticSeverity.Error,\n\t\t\t\t\tsource: languageId,\n\t\t\t\t\tmessage: ts.flattenDiagnosticMessageText(diag.messageText, '\\n')\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tasync doComplete(document: TextDocument, position: Position, _documentContext: DocumentContext): Promise<CompletionList> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst offset = jsDocument.offsetAt(position);\n\t\t\tconst completions = jsLanguageService.getCompletionsAtPosition(jsDocument.uri, offset, { includeExternalModuleExports: false, includeInsertTextCompletions: false });\n\t\t\tif (!completions) {\n\t\t\t\treturn { isIncomplete: false, items: [] };\n\t\t\t}\n\t\t\tconst replaceRange = convertRange(jsDocument, getWordAtText(jsDocument.getText(), offset, JS_WORD_REGEX));\n\t\t\treturn {\n\t\t\t\tisIncomplete: false,\n\t\t\t\titems: completions.entries.map(entry => {\n\t\t\t\t\tconst data: CompletionItemData = { // data used for resolving item details (see 'doResolve')\n\t\t\t\t\t\tlanguageId,\n\t\t\t\t\t\turi: document.uri,\n\t\t\t\t\t\toffset: offset\n\t\t\t\t\t};\n\t\t\t\t\treturn {\n\t\t\t\t\t\turi: document.uri,\n\t\t\t\t\t\tposition: position,\n\t\t\t\t\t\tlabel: entry.name,\n\t\t\t\t\t\tsortText: entry.sortText,\n\t\t\t\t\t\tkind: convertKind(entry.kind),\n\t\t\t\t\t\ttextEdit: TextEdit.replace(replaceRange, entry.name),\n\t\t\t\t\t\tdata\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t};\n\t\t},\n\t\tasync doResolve(document: TextDocument, item: CompletionItem): Promise<CompletionItem> {\n\t\t\tif (isCompletionItemData(item.data)) {\n\t\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\t\tconst details = jsLanguageService.getCompletionEntryDetails(jsDocument.uri, item.data.offset, item.label, undefined, undefined, undefined, undefined);\n\t\t\t\tif (details) {\n\t\t\t\t\titem.detail = ts.displayPartsToString(details.displayParts);\n\t\t\t\t\titem.documentation = ts.displayPartsToString(details.documentation);\n\t\t\t\t\tdelete item.data;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\t\tasync doHover(document: TextDocument, position: Position): Promise<Hover | null> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst info = jsLanguageService.getQuickInfoAtPosition(jsDocument.uri, jsDocument.offsetAt(position));\n\t\t\tif (info) {\n\t\t\t\tconst contents = ts.displayPartsToString(info.displayParts);\n\t\t\t\treturn {\n\t\t\t\t\trange: convertRange(jsDocument, info.textSpan),\n\t\t\t\t\tcontents: ['```typescript', contents, '```'].join('\\n')\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync doSignatureHelp(document: TextDocument, position: Position): Promise<SignatureHelp | null> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst signHelp = jsLanguageService.getSignatureHelpItems(jsDocument.uri, jsDocument.offsetAt(position), undefined);\n\t\t\tif (signHelp) {\n\t\t\t\tconst ret: SignatureHelp = {\n\t\t\t\t\tactiveSignature: signHelp.selectedItemIndex,\n\t\t\t\t\tactiveParameter: signHelp.argumentIndex,\n\t\t\t\t\tsignatures: []\n\t\t\t\t};\n\t\t\t\tsignHelp.items.forEach(item => {\n\n\t\t\t\t\tconst signature: SignatureInformation = {\n\t\t\t\t\t\tlabel: '',\n\t\t\t\t\t\tdocumentation: undefined,\n\t\t\t\t\t\tparameters: []\n\t\t\t\t\t};\n\n\t\t\t\t\tsignature.label += ts.displayPartsToString(item.prefixDisplayParts);\n\t\t\t\t\titem.parameters.forEach((p, i, a) => {\n\t\t\t\t\t\tconst label = ts.displayPartsToString(p.displayParts);\n\t\t\t\t\t\tconst parameter: ParameterInformation = {\n\t\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\t\tdocumentation: ts.displayPartsToString(p.documentation)\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsignature.label += label;\n\t\t\t\t\t\tsignature.parameters!.push(parameter);\n\t\t\t\t\t\tif (i < a.length - 1) {\n\t\t\t\t\t\t\tsignature.label += ts.displayPartsToString(item.separatorDisplayParts);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tsignature.label += ts.displayPartsToString(item.suffixDisplayParts);\n\t\t\t\t\tret.signatures.push(signature);\n\t\t\t\t});\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync doRename(document: TextDocument, position: Position, newName: string) {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst jsDocumentPosition = jsDocument.offsetAt(position);\n\t\t\tconst { canRename } = jsLanguageService.getRenameInfo(jsDocument.uri, jsDocumentPosition);\n\t\t\tif (!canRename) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst renameInfos = jsLanguageService.findRenameLocations(jsDocument.uri, jsDocumentPosition, false, false);\n\n\t\t\tconst edits: TextEdit[] = [];\n\t\t\trenameInfos?.map(renameInfo => {\n\t\t\t\tedits.push({\n\t\t\t\t\trange: convertRange(jsDocument, renameInfo.textSpan),\n\t\t\t\t\tnewText: newName,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanges: { [document.uri]: edits },\n\t\t\t};\n\t\t},\n\t\tasync findDocumentHighlight(document: TextDocument, position: Position): Promise<DocumentHighlight[]> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst highlights = jsLanguageService.getDocumentHighlights(jsDocument.uri, jsDocument.offsetAt(position), [jsDocument.uri]);\n\t\t\tconst out: DocumentHighlight[] = [];\n\t\t\tfor (const entry of highlights || []) {\n\t\t\t\tfor (const highlight of entry.highlightSpans) {\n\t\t\t\t\tout.push({\n\t\t\t\t\t\trange: convertRange(jsDocument, highlight.textSpan),\n\t\t\t\t\t\tkind: highlight.kind === 'writtenReference' ? DocumentHighlightKind.Write : DocumentHighlightKind.Text\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\tasync findDocumentSymbols(document: TextDocument): Promise<SymbolInformation[]> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst items = jsLanguageService.getNavigationBarItems(jsDocument.uri);\n\t\t\tif (items) {\n\t\t\t\tconst result: SymbolInformation[] = [];\n\t\t\t\tconst existing = Object.create(null);\n\t\t\t\tconst collectSymbols = (item: ts.NavigationBarItem, containerLabel?: string) => {\n\t\t\t\t\tconst sig = item.text + item.kind + item.spans[0].start;\n\t\t\t\t\tif (item.kind !== 'script' && !existing[sig]) {\n\t\t\t\t\t\tconst symbol: SymbolInformation = {\n\t\t\t\t\t\t\tname: item.text,\n\t\t\t\t\t\t\tkind: convertSymbolKind(item.kind),\n\t\t\t\t\t\t\tlocation: {\n\t\t\t\t\t\t\t\turi: document.uri,\n\t\t\t\t\t\t\t\trange: convertRange(jsDocument, item.spans[0])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcontainerName: containerLabel\n\t\t\t\t\t\t};\n\t\t\t\t\t\texisting[sig] = true;\n\t\t\t\t\t\tresult.push(symbol);\n\t\t\t\t\t\tcontainerLabel = item.text;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item.childItems && item.childItems.length > 0) {\n\t\t\t\t\t\tfor (const child of item.childItems) {\n\t\t\t\t\t\t\tcollectSymbols(child, containerLabel);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\titems.forEach(item => collectSymbols(item));\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tasync findDefinition(document: TextDocument, position: Position): Promise<Definition | null> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst definition = jsLanguageService.getDefinitionAtPosition(jsDocument.uri, jsDocument.offsetAt(position));\n\t\t\tif (definition) {\n\t\t\t\treturn definition.filter(d => d.fileName === jsDocument.uri).map(d => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\turi: document.uri,\n\t\t\t\t\t\trange: convertRange(jsDocument, d.textSpan)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync findReferences(document: TextDocument, position: Position): Promise<Location[]> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst references = jsLanguageService.getReferencesAtPosition(jsDocument.uri, jsDocument.offsetAt(position));\n\t\t\tif (references) {\n\t\t\t\treturn references.filter(d => d.fileName === jsDocument.uri).map(d => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\turi: document.uri,\n\t\t\t\t\t\trange: convertRange(jsDocument, d.textSpan)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tasync getSelectionRange(document: TextDocument, position: Position): Promise<SelectionRange> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tfunction convertSelectionRange(selectionRange: ts.SelectionRange): SelectionRange {\n\t\t\t\tconst parent = selectionRange.parent ? convertSelectionRange(selectionRange.parent) : undefined;\n\t\t\t\treturn SelectionRange.create(convertRange(jsDocument, selectionRange.textSpan), parent);\n\t\t\t}\n\t\t\tconst range = jsLanguageService.getSmartSelectionRange(jsDocument.uri, jsDocument.offsetAt(position));\n\t\t\treturn convertSelectionRange(range);\n\t\t},\n\t\tasync format(document: TextDocument, range: Range, formatParams: FormattingOptions, settings: Settings = globalSettings): Promise<TextEdit[]> {\n\t\t\tconst jsDocument = documentRegions.get(document).getEmbeddedDocument('javascript', true);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\n\t\t\tconst formatterSettings = settings && settings.javascript && settings.javascript.format;\n\n\t\t\tconst initialIndentLevel = computeInitialIndent(document, range, formatParams);\n\t\t\tconst formatSettings = convertOptions(formatParams, formatterSettings, initialIndentLevel + 1);\n\t\t\tconst start = jsDocument.offsetAt(range.start);\n\t\t\tlet end = jsDocument.offsetAt(range.end);\n\t\t\tlet lastLineRange = null;\n\t\t\tif (range.end.line > range.start.line && (range.end.character === 0 || isWhitespaceOnly(jsDocument.getText().substr(end - range.end.character, range.end.character)))) {\n\t\t\t\tend -= range.end.character;\n\t\t\t\tlastLineRange = Range.create(Position.create(range.end.line, 0), range.end);\n\t\t\t}\n\t\t\tconst edits = jsLanguageService.getFormattingEditsForRange(jsDocument.uri, start, end, formatSettings);\n\t\t\tif (edits) {\n\t\t\t\tconst result = [];\n\t\t\t\tfor (const edit of edits) {\n\t\t\t\t\tif (edit.span.start >= start && edit.span.start + edit.span.length <= end) {\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\trange: convertRange(jsDocument, edit.span),\n\t\t\t\t\t\t\tnewText: edit.newText\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (lastLineRange) {\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\trange: lastLineRange,\n\t\t\t\t\t\tnewText: generateIndent(initialIndentLevel, formatParams)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tasync getFoldingRanges(document: TextDocument): Promise<FoldingRange[]> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\tconst spans = jsLanguageService.getOutliningSpans(jsDocument.uri);\n\t\t\tconst ranges: FoldingRange[] = [];\n\t\t\tfor (const span of spans) {\n\t\t\t\tconst curr = convertRange(jsDocument, span.textSpan);\n\t\t\t\tconst startLine = curr.start.line;\n\t\t\t\tconst endLine = curr.end.line;\n\t\t\t\tif (startLine < endLine) {\n\t\t\t\t\tconst foldingRange: FoldingRange = { startLine, endLine };\n\t\t\t\t\tconst match = document.getText(curr).match(/^\\s*\\/(?:(\\/\\s*#(?:end)?region\\b)|(\\*|\\/))/);\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tfoldingRange.kind = match[1] ? FoldingRangeKind.Region : FoldingRangeKind.Comment;\n\t\t\t\t\t}\n\t\t\t\t\tranges.push(foldingRange);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ranges;\n\t\t},\n\t\tonDocumentRemoved(document: TextDocument) {\n\t\t\tjsDocuments.onDocumentRemoved(document);\n\t\t},\n\t\tasync getSemanticTokens(document: TextDocument): Promise<SemanticTokenData[]> {\n\t\t\tconst jsDocument = jsDocuments.get(document);\n\t\t\tconst jsLanguageService = await host.getLanguageService(jsDocument);\n\t\t\treturn [...getSemanticTokens(jsLanguageService, jsDocument, jsDocument.uri)];\n\t\t},\n\t\tgetSemanticTokenLegend(): { types: string[]; modifiers: string[] } {\n\t\t\treturn getSemanticTokenLegend();\n\t\t},\n\t\tdispose() {\n\t\t\thost.dispose();\n\t\t\tjsDocuments.dispose();\n\t\t}\n\t};\n}\n\n\n\n\nfunction convertRange(document: TextDocument, span: { start: number | undefined; length: number | undefined }): Range {\n\tif (typeof span.start === 'undefined') {\n\t\tconst pos = document.positionAt(0);\n\t\treturn Range.create(pos, pos);\n\t}\n\tconst startPosition = document.positionAt(span.start);\n\tconst endPosition = document.positionAt(span.start + (span.length || 0));\n\treturn Range.create(startPosition, endPosition);\n}\n\nfunction convertKind(kind: string): CompletionItemKind {\n\tswitch (kind) {\n\t\tcase Kind.primitiveType:\n\t\tcase Kind.keyword:\n\t\t\treturn CompletionItemKind.Keyword;\n\n\t\tcase Kind.const:\n\t\tcase Kind.let:\n\t\tcase Kind.variable:\n\t\tcase Kind.localVariable:\n\t\tcase Kind.alias:\n\t\tcase Kind.parameter:\n\t\t\treturn CompletionItemKind.Variable;\n\n\t\tcase Kind.memberVariable:\n\t\tcase Kind.memberGetAccessor:\n\t\tcase Kind.memberSetAccessor:\n\t\t\treturn CompletionItemKind.Field;\n\n\t\tcase Kind.function:\n\t\tcase Kind.localFunction:\n\t\t\treturn CompletionItemKind.Function;\n\n\t\tcase Kind.method:\n\t\tcase Kind.constructSignature:\n\t\tcase Kind.callSignature:\n\t\tcase Kind.indexSignature:\n\t\t\treturn CompletionItemKind.Method;\n\n\t\tcase Kind.enum:\n\t\t\treturn CompletionItemKind.Enum;\n\n\t\tcase Kind.enumMember:\n\t\t\treturn CompletionItemKind.EnumMember;\n\n\t\tcase Kind.module:\n\t\tcase Kind.externalModuleName:\n\t\t\treturn CompletionItemKind.Module;\n\n\t\tcase Kind.class:\n\t\tcase Kind.type:\n\t\t\treturn CompletionItemKind.Class;\n\n\t\tcase Kind.interface:\n\t\t\treturn CompletionItemKind.Interface;\n\n\t\tcase Kind.warning:\n\t\t\treturn CompletionItemKind.Text;\n\n\t\tcase Kind.script:\n\t\t\treturn CompletionItemKind.File;\n\n\t\tcase Kind.directory:\n\t\t\treturn CompletionItemKind.Folder;\n\n\t\tcase Kind.string:\n\t\t\treturn CompletionItemKind.Constant;\n\n\t\tdefault:\n\t\t\treturn CompletionItemKind.Property;\n\t}\n}\nconst enum Kind {\n\talias = 'alias',\n\tcallSignature = 'call',\n\tclass = 'class',\n\tconst = 'const',\n\tconstructorImplementation = 'constructor',\n\tconstructSignature = 'construct',\n\tdirectory = 'directory',\n\tenum = 'enum',\n\tenumMember = 'enum member',\n\texternalModuleName = 'external module name',\n\tfunction = 'function',\n\tindexSignature = 'index',\n\tinterface = 'interface',\n\tkeyword = 'keyword',\n\tlet = 'let',\n\tlocalFunction = 'local function',\n\tlocalVariable = 'local var',\n\tmethod = 'method',\n\tmemberGetAccessor = 'getter',\n\tmemberSetAccessor = 'setter',\n\tmemberVariable = 'property',\n\tmodule = 'module',\n\tprimitiveType = 'primitive type',\n\tscript = 'script',\n\ttype = 'type',\n\tvariable = 'var',\n\twarning = 'warning',\n\tstring = 'string',\n\tparameter = 'parameter',\n\ttypeParameter = 'type parameter'\n}\n\nfunction convertSymbolKind(kind: string): SymbolKind {\n\tswitch (kind) {\n\t\tcase Kind.module: return SymbolKind.Module;\n\t\tcase Kind.class: return SymbolKind.Class;\n\t\tcase Kind.enum: return SymbolKind.Enum;\n\t\tcase Kind.enumMember: return SymbolKind.EnumMember;\n\t\tcase Kind.interface: return SymbolKind.Interface;\n\t\tcase Kind.indexSignature: return SymbolKind.Method;\n\t\tcase Kind.callSignature: return SymbolKind.Method;\n\t\tcase Kind.method: return SymbolKind.Method;\n\t\tcase Kind.memberVariable: return SymbolKind.Property;\n\t\tcase Kind.memberGetAccessor: return SymbolKind.Property;\n\t\tcase Kind.memberSetAccessor: return SymbolKind.Property;\n\t\tcase Kind.variable: return SymbolKind.Variable;\n\t\tcase Kind.let: return SymbolKind.Variable;\n\t\tcase Kind.const: return SymbolKind.Variable;\n\t\tcase Kind.localVariable: return SymbolKind.Variable;\n\t\tcase Kind.alias: return SymbolKind.Variable;\n\t\tcase Kind.function: return SymbolKind.Function;\n\t\tcase Kind.localFunction: return SymbolKind.Function;\n\t\tcase Kind.constructSignature: return SymbolKind.Constructor;\n\t\tcase Kind.constructorImplementation: return SymbolKind.Constructor;\n\t\tcase Kind.typeParameter: return SymbolKind.TypeParameter;\n\t\tcase Kind.string: return SymbolKind.String;\n\t\tdefault: return SymbolKind.Variable;\n\t}\n}\n\nfunction convertOptions(options: FormattingOptions, formatSettings: any, initialIndentLevel: number): ts.FormatCodeSettings {\n\treturn {\n\t\tconvertTabsToSpaces: options.insertSpaces,\n\t\ttabSize: options.tabSize,\n\t\tindentSize: options.tabSize,\n\t\tindentStyle: ts.IndentStyle.Smart,\n\t\tnewLineCharacter: '\\n',\n\t\tbaseIndentSize: options.tabSize * initialIndentLevel,\n\t\tinsertSpaceAfterCommaDelimiter: Boolean(!formatSettings || formatSettings.insertSpaceAfterCommaDelimiter),\n\t\tinsertSpaceAfterConstructor: Boolean(formatSettings && formatSettings.insertSpaceAfterConstructor),\n\t\tinsertSpaceAfterSemicolonInForStatements: Boolean(!formatSettings || formatSettings.insertSpaceAfterSemicolonInForStatements),\n\t\tinsertSpaceBeforeAndAfterBinaryOperators: Boolean(!formatSettings || formatSettings.insertSpaceBeforeAndAfterBinaryOperators),\n\t\tinsertSpaceAfterKeywordsInControlFlowStatements: Boolean(!formatSettings || formatSettings.insertSpaceAfterKeywordsInControlFlowStatements),\n\t\tinsertSpaceAfterFunctionKeywordForAnonymousFunctions: Boolean(!formatSettings || formatSettings.insertSpaceAfterFunctionKeywordForAnonymousFunctions),\n\t\tinsertSpaceBeforeFunctionParenthesis: Boolean(formatSettings && formatSettings.insertSpaceBeforeFunctionParenthesis),\n\t\tinsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis),\n\t\tinsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets),\n\t\tinsertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces),\n\t\tinsertSpaceAfterOpeningAndBeforeClosingEmptyBraces: Boolean(!formatSettings || formatSettings.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces),\n\t\tinsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces),\n\t\tinsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces),\n\t\tinsertSpaceAfterTypeAssertion: Boolean(formatSettings && formatSettings.insertSpaceAfterTypeAssertion),\n\t\tplaceOpenBraceOnNewLineForControlBlocks: Boolean(formatSettings && formatSettings.placeOpenBraceOnNewLineForFunctions),\n\t\tplaceOpenBraceOnNewLineForFunctions: Boolean(formatSettings && formatSettings.placeOpenBraceOnNewLineForControlBlocks),\n\t\tsemicolons: formatSettings?.semicolons\n\t};\n}\n\nfunction computeInitialIndent(document: TextDocument, range: Range, options: FormattingOptions) {\n\tconst lineStart = document.offsetAt(Position.create(range.start.line, 0));\n\tconst content = document.getText();\n\n\tlet i = lineStart;\n\tlet nChars = 0;\n\tconst tabSize = options.tabSize || 4;\n\twhile (i < content.length) {\n\t\tconst ch = content.charAt(i);\n\t\tif (ch === ' ') {\n\t\t\tnChars++;\n\t\t} else if (ch === '\\t') {\n\t\t\tnChars += tabSize;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\treturn Math.floor(nChars / tabSize);\n}\n\nfunction generateIndent(level: number, options: FormattingOptions) {\n\tif (options.insertSpaces) {\n\t\treturn repeat(' ', level * options.tabSize);\n\t} else {\n\t\treturn repeat('\\t', level);\n\t}\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/javascriptSemanticTokens.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument, SemanticTokenData } from './languageModes';\nimport * as ts from 'typescript';\n\nexport function getSemanticTokenLegend() {\n\tif (tokenTypes.length !== TokenType._) {\n\t\tconsole.warn('TokenType has added new entries.');\n\t}\n\tif (tokenModifiers.length !== TokenModifier._) {\n\t\tconsole.warn('TokenModifier has added new entries.');\n\t}\n\treturn { types: tokenTypes, modifiers: tokenModifiers };\n}\n\nexport function* getSemanticTokens(jsLanguageService: ts.LanguageService, document: TextDocument, fileName: string): Iterable<SemanticTokenData> {\n\tconst { spans } = jsLanguageService.getEncodedSemanticClassifications(fileName, { start: 0, length: document.getText().length }, '2020' as ts.SemanticClassificationFormat);\n\n\tfor (let i = 0; i < spans.length;) {\n\t\tconst offset = spans[i++];\n\t\tconst length = spans[i++];\n\t\tconst tsClassification = spans[i++];\n\n\t\tconst tokenType = getTokenTypeFromClassification(tsClassification);\n\t\tif (tokenType === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tokenModifiers = getTokenModifierFromClassification(tsClassification);\n\t\tconst startPos = document.positionAt(offset);\n\t\tyield {\n\t\t\tstart: startPos,\n\t\t\tlength: length,\n\t\t\ttypeIdx: tokenType,\n\t\t\tmodifierSet: tokenModifiers\n\t\t};\n\t}\n}\n\n\n// typescript encodes type and modifiers in the classification:\n// TSClassification = (TokenType + 1) << 8 + TokenModifier\n\nconst enum TokenType {\n\tclass = 0,\n\tenum = 1,\n\tinterface = 2,\n\tnamespace = 3,\n\ttypeParameter = 4,\n\ttype = 5,\n\tparameter = 6,\n\tvariable = 7,\n\tenumMember = 8,\n\tproperty = 9,\n\tfunction = 10,\n\tmethod = 11,\n\t_ = 12\n}\n\nconst enum TokenModifier {\n\tdeclaration = 0,\n\tstatic = 1,\n\tasync = 2,\n\treadonly = 3,\n\tdefaultLibrary = 4,\n\tlocal = 5,\n\t_ = 6\n}\n\nconst enum TokenEncodingConsts {\n\ttypeOffset = 8,\n\tmodifierMask = 255\n}\n\nfunction getTokenTypeFromClassification(tsClassification: number): number | undefined {\n\tif (tsClassification > TokenEncodingConsts.modifierMask) {\n\t\treturn (tsClassification >> TokenEncodingConsts.typeOffset) - 1;\n\t}\n\treturn undefined;\n}\n\nfunction getTokenModifierFromClassification(tsClassification: number) {\n\treturn tsClassification & TokenEncodingConsts.modifierMask;\n}\n\nconst tokenTypes: string[] = [];\ntokenTypes[TokenType.class] = 'class';\ntokenTypes[TokenType.enum] = 'enum';\ntokenTypes[TokenType.interface] = 'interface';\ntokenTypes[TokenType.namespace] = 'namespace';\ntokenTypes[TokenType.typeParameter] = 'typeParameter';\ntokenTypes[TokenType.type] = 'type';\ntokenTypes[TokenType.parameter] = 'parameter';\ntokenTypes[TokenType.variable] = 'variable';\ntokenTypes[TokenType.enumMember] = 'enumMember';\ntokenTypes[TokenType.property] = 'property';\ntokenTypes[TokenType.function] = 'function';\ntokenTypes[TokenType.method] = 'method';\n\nconst tokenModifiers: string[] = [];\ntokenModifiers[TokenModifier.async] = 'async';\ntokenModifiers[TokenModifier.declaration] = 'declaration';\ntokenModifiers[TokenModifier.readonly] = 'readonly';\ntokenModifiers[TokenModifier.static] = 'static';\ntokenModifiers[TokenModifier.local] = 'local';\ntokenModifiers[TokenModifier.defaultLibrary] = 'defaultLibrary';\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/languageModes.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { getCSSLanguageService } from 'vscode-css-languageservice';\nimport {\n\tDocumentContext, getLanguageService as getHTMLLanguageService, IHTMLDataProvider, ClientCapabilities\n} from 'vscode-html-languageservice';\nimport {\n\tSelectionRange,\n\tCompletionItem, CompletionList, Definition, Diagnostic, DocumentHighlight, DocumentLink, FoldingRange, FormattingOptions,\n\tHover, Location, Position, Range, SignatureHelp, SymbolInformation, TextEdit,\n\tColor, ColorInformation, ColorPresentation, WorkspaceEdit,\n\tWorkspaceFolder\n} from 'vscode-languageserver';\nimport { TextDocument } from 'vscode-languageserver-textdocument';\n\nimport { getLanguageModelCache, LanguageModelCache } from '../languageModelCache';\nimport { getCSSMode } from './cssMode';\nimport { getDocumentRegions, HTMLDocumentRegions } from './embeddedSupport';\nimport { getHTMLMode } from './htmlMode';\nimport { getJavaScriptMode } from './javascriptMode';\nimport { FileSystemProvider } from '../requests';\n\nexport {\n\tWorkspaceFolder, CompletionItem, CompletionList, CompletionItemKind, Definition, Diagnostic, DocumentHighlight, DocumentHighlightKind,\n\tDocumentLink, FoldingRange, FoldingRangeKind, FormattingOptions,\n\tHover, Location, Position, Range, SignatureHelp, SymbolInformation, SymbolKind, TextEdit,\n\tColor, ColorInformation, ColorPresentation, WorkspaceEdit,\n\tSignatureInformation, ParameterInformation, DiagnosticSeverity,\n\tSelectionRange, TextDocumentIdentifier\n} from 'vscode-languageserver';\n\nexport { ClientCapabilities, DocumentContext, LanguageService, HTMLDocument, HTMLFormatConfiguration, TokenType } from 'vscode-html-languageservice';\n\nexport { TextDocument } from 'vscode-languageserver-textdocument';\n\nexport interface Settings {\n\treadonly css?: any;\n\treadonly html?: any;\n\treadonly javascript?: any;\n\treadonly 'js/ts'?: any;\n}\n\nexport interface Workspace {\n\treadonly settings: Settings;\n\treadonly folders: WorkspaceFolder[];\n}\n\nexport interface SemanticTokenData {\n\tstart: Position;\n\tlength: number;\n\ttypeIdx: number;\n\tmodifierSet: number;\n}\n\nexport type CompletionItemData = {\n\tlanguageId: string;\n\turi: string;\n\toffset: number;\n};\n\nexport function isCompletionItemData(value: any): value is CompletionItemData {\n\treturn value && typeof value.languageId === 'string' && typeof value.uri === 'string' && typeof value.offset === 'number';\n}\n\nexport interface LanguageMode {\n\tgetId(): string;\n\tgetSelectionRange?: (document: TextDocument, position: Position) => Promise<SelectionRange>;\n\tdoValidation?: (document: TextDocument, settings?: Settings) => Promise<Diagnostic[]>;\n\tdoComplete?: (document: TextDocument, position: Position, documentContext: DocumentContext, settings?: Settings) => Promise<CompletionList>;\n\tdoResolve?: (document: TextDocument, item: CompletionItem) => Promise<CompletionItem>;\n\tdoHover?: (document: TextDocument, position: Position, settings?: Settings) => Promise<Hover | null>;\n\tdoSignatureHelp?: (document: TextDocument, position: Position) => Promise<SignatureHelp | null>;\n\tdoRename?: (document: TextDocument, position: Position, newName: string) => Promise<WorkspaceEdit | null>;\n\tdoLinkedEditing?: (document: TextDocument, position: Position) => Promise<Range[] | null>;\n\tfindDocumentHighlight?: (document: TextDocument, position: Position) => Promise<DocumentHighlight[]>;\n\tfindDocumentSymbols?: (document: TextDocument) => Promise<SymbolInformation[]>;\n\tfindDocumentLinks?: (document: TextDocument, documentContext: DocumentContext) => Promise<DocumentLink[]>;\n\tfindDefinition?: (document: TextDocument, position: Position) => Promise<Definition | null>;\n\tfindReferences?: (document: TextDocument, position: Position) => Promise<Location[]>;\n\tformat?: (document: TextDocument, range: Range, options: FormattingOptions, settings?: Settings) => Promise<TextEdit[]>;\n\tfindDocumentColors?: (document: TextDocument) => Promise<ColorInformation[]>;\n\tgetColorPresentations?: (document: TextDocument, color: Color, range: Range) => Promise<ColorPresentation[]>;\n\tdoAutoInsert?: (document: TextDocument, position: Position, kind: 'autoClose' | 'autoQuote') => Promise<string | null>;\n\tfindMatchingTagPosition?: (document: TextDocument, position: Position) => Promise<Position | null>;\n\tgetFoldingRanges?: (document: TextDocument) => Promise<FoldingRange[]>;\n\tonDocumentRemoved(document: TextDocument): void;\n\tgetSemanticTokens?(document: TextDocument): Promise<SemanticTokenData[]>;\n\tgetSemanticTokenLegend?(): { types: string[]; modifiers: string[] };\n\tdispose(): void;\n}\n\nexport interface LanguageModes {\n\tupdateDataProviders(dataProviders: IHTMLDataProvider[]): void;\n\tgetModeAtPosition(document: TextDocument, position: Position): LanguageMode | undefined;\n\tgetModesInRange(document: TextDocument, range: Range): LanguageModeRange[];\n\tgetAllModes(): LanguageMode[];\n\tgetAllModesInDocument(document: TextDocument): LanguageMode[];\n\tgetMode(languageId: string): LanguageMode | undefined;\n\tonDocumentRemoved(document: TextDocument): void;\n\tdispose(): void;\n}\n\nexport interface LanguageModeRange extends Range {\n\tmode: LanguageMode | undefined;\n\tattributeValue?: boolean;\n}\n\nexport function getLanguageModes(supportedLanguages: { [languageId: string]: boolean }, workspace: Workspace, clientCapabilities: ClientCapabilities, requestService: FileSystemProvider): LanguageModes {\n\tconst htmlLanguageService = getHTMLLanguageService({ clientCapabilities, fileSystemProvider: requestService });\n\tconst cssLanguageService = getCSSLanguageService({ clientCapabilities, fileSystemProvider: requestService });\n\n\tconst documentRegions = getLanguageModelCache<HTMLDocumentRegions>(10, 60, document => getDocumentRegions(htmlLanguageService, document));\n\n\tlet modelCaches: LanguageModelCache<any>[] = [];\n\tmodelCaches.push(documentRegions);\n\n\tlet modes = Object.create(null);\n\tmodes['html'] = getHTMLMode(htmlLanguageService, workspace);\n\tif (supportedLanguages['css']) {\n\t\tmodes['css'] = getCSSMode(cssLanguageService, documentRegions, workspace);\n\t}\n\tif (supportedLanguages['javascript']) {\n\t\tmodes['javascript'] = getJavaScriptMode(documentRegions, 'javascript', workspace);\n\t\tmodes['typescript'] = getJavaScriptMode(documentRegions, 'typescript', workspace);\n\t}\n\treturn {\n\t\tasync updateDataProviders(dataProviders: IHTMLDataProvider[]): Promise<void> {\n\t\t\thtmlLanguageService.setDataProviders(true, dataProviders);\n\t\t},\n\t\tgetModeAtPosition(document: TextDocument, position: Position): LanguageMode | undefined {\n\t\t\tconst languageId = documentRegions.get(document).getLanguageAtPosition(position);\n\t\t\tif (languageId) {\n\t\t\t\treturn modes[languageId];\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tgetModesInRange(document: TextDocument, range: Range): LanguageModeRange[] {\n\t\t\treturn documentRegions.get(document).getLanguageRanges(range).map((r): LanguageModeRange => {\n\t\t\t\treturn {\n\t\t\t\t\tstart: r.start,\n\t\t\t\t\tend: r.end,\n\t\t\t\t\tmode: r.languageId && modes[r.languageId],\n\t\t\t\t\tattributeValue: r.attributeValue\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tgetAllModesInDocument(document: TextDocument): LanguageMode[] {\n\t\t\tconst result = [];\n\t\t\tfor (const languageId of documentRegions.get(document).getLanguagesInDocument()) {\n\t\t\t\tconst mode = modes[languageId];\n\t\t\t\tif (mode) {\n\t\t\t\t\tresult.push(mode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetAllModes(): LanguageMode[] {\n\t\t\tconst result = [];\n\t\t\tfor (const languageId in modes) {\n\t\t\t\tconst mode = modes[languageId];\n\t\t\t\tif (mode) {\n\t\t\t\t\tresult.push(mode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetMode(languageId: string): LanguageMode {\n\t\t\treturn modes[languageId];\n\t\t},\n\t\tonDocumentRemoved(document: TextDocument) {\n\t\t\tmodelCaches.forEach(mc => mc.onDocumentRemoved(document));\n\t\t\tfor (const mode in modes) {\n\t\t\t\tmodes[mode].onDocumentRemoved(document);\n\t\t\t}\n\t\t},\n\t\tdispose(): void {\n\t\t\tmodelCaches.forEach(mc => mc.dispose());\n\t\t\tmodelCaches = [];\n\t\t\tfor (const mode in modes) {\n\t\t\t\tmodes[mode].dispose();\n\t\t\t}\n\t\t\tmodes = {};\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/selectionRanges.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { LanguageModes, TextDocument, Position, Range, SelectionRange } from './languageModes';\nimport { insideRangeButNotSame } from '../utils/positions';\n\nexport async function getSelectionRanges(languageModes: LanguageModes, document: TextDocument, positions: Position[]) {\n\tconst htmlMode = languageModes.getMode('html');\n\treturn Promise.all(positions.map(async position => {\n\t\tconst htmlRange = await htmlMode!.getSelectionRange!(document, position);\n\t\tconst mode = languageModes.getModeAtPosition(document, position);\n\t\tif (mode && mode.getSelectionRange) {\n\t\t\tconst range = await mode.getSelectionRange(document, position);\n\t\t\tlet top = range;\n\t\t\twhile (top.parent && insideRangeButNotSame(htmlRange.range, top.parent.range)) {\n\t\t\t\ttop = top.parent;\n\t\t\t}\n\t\t\ttop.parent = htmlRange;\n\t\t\treturn range;\n\t\t}\n\t\treturn htmlRange || SelectionRange.create(Range.create(position, position));\n\t}));\n}\n\n"
  },
  {
    "path": "extensions/html-language-features/server/src/modes/semanticTokens.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { SemanticTokenData, Range, TextDocument, LanguageModes, Position } from './languageModes';\nimport { beforeOrSame } from '../utils/positions';\n\ninterface LegendMapping {\n\ttypes: number[] | undefined;\n\tmodifiers: number[] | undefined;\n}\n\nexport interface SemanticTokenProvider {\n\treadonly legend: { types: string[]; modifiers: string[] };\n\tgetSemanticTokens(document: TextDocument, ranges?: Range[]): Promise<number[]>;\n}\n\n\nexport function newSemanticTokenProvider(languageModes: LanguageModes): SemanticTokenProvider {\n\n\t// combined legend across modes\n\tconst legend: { types: string[]; modifiers: string[] } = { types: [], modifiers: [] };\n\tconst legendMappings: { [modeId: string]: LegendMapping } = {};\n\n\tfor (const mode of languageModes.getAllModes()) {\n\t\tif (mode.getSemanticTokenLegend && mode.getSemanticTokens) {\n\t\t\tconst modeLegend = mode.getSemanticTokenLegend();\n\t\t\tlegendMappings[mode.getId()] = { types: createMapping(modeLegend.types, legend.types), modifiers: createMapping(modeLegend.modifiers, legend.modifiers) };\n\t\t}\n\t}\n\n\treturn {\n\t\tlegend,\n\t\tasync getSemanticTokens(document: TextDocument, ranges?: Range[]): Promise<number[]> {\n\t\t\tconst allTokens: SemanticTokenData[] = [];\n\t\t\tfor (const mode of languageModes.getAllModesInDocument(document)) {\n\t\t\t\tif (mode.getSemanticTokens) {\n\t\t\t\t\tconst mapping = legendMappings[mode.getId()];\n\t\t\t\t\tconst tokens = await mode.getSemanticTokens(document);\n\t\t\t\t\tapplyTypesMapping(tokens, mapping.types);\n\t\t\t\t\tapplyModifiersMapping(tokens, mapping.modifiers);\n\t\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\t\tallTokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn encodeTokens(allTokens, ranges, document);\n\t\t}\n\t};\n}\n\nfunction createMapping(origLegend: string[], newLegend: string[]): number[] | undefined {\n\tconst mapping: number[] = [];\n\tlet needsMapping = false;\n\tfor (let origIndex = 0; origIndex < origLegend.length; origIndex++) {\n\t\tconst entry = origLegend[origIndex];\n\t\tlet newIndex = newLegend.indexOf(entry);\n\t\tif (newIndex === -1) {\n\t\t\tnewIndex = newLegend.length;\n\t\t\tnewLegend.push(entry);\n\t\t}\n\t\tmapping.push(newIndex);\n\t\tneedsMapping = needsMapping || (newIndex !== origIndex);\n\t}\n\treturn needsMapping ? mapping : undefined;\n}\n\nfunction applyTypesMapping(tokens: SemanticTokenData[], typesMapping: number[] | undefined): void {\n\tif (typesMapping) {\n\t\tfor (const token of tokens) {\n\t\t\ttoken.typeIdx = typesMapping[token.typeIdx];\n\t\t}\n\t}\n}\n\nfunction applyModifiersMapping(tokens: SemanticTokenData[], modifiersMapping: number[] | undefined): void {\n\tif (modifiersMapping) {\n\t\tfor (const token of tokens) {\n\t\t\tlet modifierSet = token.modifierSet;\n\t\t\tif (modifierSet) {\n\t\t\t\tlet index = 0;\n\t\t\t\tlet result = 0;\n\t\t\t\twhile (modifierSet > 0) {\n\t\t\t\t\tif ((modifierSet & 1) !== 0) {\n\t\t\t\t\t\tresult = result + (1 << modifiersMapping[index]);\n\t\t\t\t\t}\n\t\t\t\t\tindex++;\n\t\t\t\t\tmodifierSet = modifierSet >> 1;\n\t\t\t\t}\n\t\t\t\ttoken.modifierSet = result;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction encodeTokens(tokens: SemanticTokenData[], ranges: Range[] | undefined, document: TextDocument): number[] {\n\n\tconst resultTokens = tokens.sort((d1, d2) => d1.start.line - d2.start.line || d1.start.character - d2.start.character);\n\tif (ranges) {\n\t\tranges = ranges.sort((d1, d2) => d1.start.line - d2.start.line || d1.start.character - d2.start.character);\n\t} else {\n\t\tranges = [Range.create(Position.create(0, 0), Position.create(document.lineCount, 0))];\n\t}\n\n\tlet rangeIndex = 0;\n\tlet currRange = ranges[rangeIndex++];\n\n\tlet prefLine = 0;\n\tlet prevChar = 0;\n\n\tconst encodedResult: number[] = [];\n\n\tfor (let k = 0; k < resultTokens.length && currRange; k++) {\n\t\tconst curr = resultTokens[k];\n\t\tconst start = curr.start;\n\t\twhile (currRange && beforeOrSame(currRange.end, start)) {\n\t\t\tcurrRange = ranges[rangeIndex++];\n\t\t}\n\t\tif (currRange && beforeOrSame(currRange.start, start) && beforeOrSame({ line: start.line, character: start.character + curr.length }, currRange.end)) {\n\t\t\t// token inside a range\n\n\t\t\tif (prefLine !== start.line) {\n\t\t\t\tprevChar = 0;\n\t\t\t}\n\t\t\tencodedResult.push(start.line - prefLine); // line delta\n\t\t\tencodedResult.push(start.character - prevChar); // line delta\n\t\t\tencodedResult.push(curr.length); // length\n\t\t\tencodedResult.push(curr.typeIdx); // tokenType\n\t\t\tencodedResult.push(curr.modifierSet); // tokenModifier\n\n\t\t\tprefLine = start.line;\n\t\t\tprevChar = start.character;\n\t\t}\n\t}\n\treturn encodedResult;\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/node/htmlServerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createConnection, Connection, Disposable } from 'vscode-languageserver/node';\nimport { formatError } from '../utils/runner';\nimport { RuntimeEnvironment, startServer } from '../htmlServer';\nimport { getNodeFileFS } from './nodeFs';\n\n\n// Create a connection for the server.\nconst connection: Connection = createConnection();\n\nconsole.log = connection.console.log.bind(connection.console);\nconsole.error = connection.console.error.bind(connection.console);\n\nprocess.on('unhandledRejection', (e: any) => {\n\tconnection.console.error(formatError(`Unhandled exception`, e));\n});\n\nconst runtime: RuntimeEnvironment = {\n\ttimer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable {\n\t\t\tconst handle = setImmediate(callback, ...args);\n\t\t\treturn { dispose: () => clearImmediate(handle) };\n\t\t},\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t},\n\tfileFs: getNodeFileFS()\n};\n\nstartServer(connection, runtime);\n"
  },
  {
    "path": "extensions/html-language-features/server/src/node/htmlServerNodeMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as l10n from '@vscode/l10n';\n\nasync function setupMain() {\n\tconst l10nLog: string[] = [];\n\n\tconst i10lLocation = process.env['VSCODE_L10N_BUNDLE_LOCATION'];\n\tif (i10lLocation) {\n\t\ttry {\n\t\t\tawait l10n.config({ uri: i10lLocation });\n\t\t\tl10nLog.push(`l10n: Configured to ${i10lLocation.toString()}`);\n\t\t} catch (e) {\n\t\t\tl10nLog.push(`l10n: Problems loading ${i10lLocation.toString()} : ${e}`);\n\t\t}\n\t}\n\tawait import('./htmlServerMain.js');\n\tl10nLog.forEach(console.log);\n}\nsetupMain();\n"
  },
  {
    "path": "extensions/html-language-features/server/src/node/nodeFs.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FileSystemProvider } from '../requests';\nimport { URI as Uri } from 'vscode-uri';\n\nimport * as fs from 'fs';\nimport { FileType } from 'vscode-css-languageservice';\n\nexport function getNodeFileFS(): FileSystemProvider {\n\tfunction ensureFileUri(location: string) {\n\t\tif (!location.startsWith('file:')) {\n\t\t\tthrow new Error('fileSystemProvider can only handle file URLs');\n\t\t}\n\t}\n\treturn {\n\t\tstat(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst uri = Uri.parse(location);\n\t\t\t\tfs.stat(uri.fsPath, (err, stats) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\t\t\t\treturn c({ type: FileType.Unknown, ctime: -1, mtime: -1, size: -1 });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet type = FileType.Unknown;\n\t\t\t\t\tif (stats.isFile()) {\n\t\t\t\t\t\ttype = FileType.File;\n\t\t\t\t\t} else if (stats.isDirectory()) {\n\t\t\t\t\t\ttype = FileType.Directory;\n\t\t\t\t\t} else if (stats.isSymbolicLink()) {\n\t\t\t\t\t\ttype = FileType.SymbolicLink;\n\t\t\t\t\t}\n\n\t\t\t\t\tc({\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tctime: stats.ctime.getTime(),\n\t\t\t\t\t\tmtime: stats.mtime.getTime(),\n\t\t\t\t\t\tsize: stats.size\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\treadDirectory(location: string) {\n\t\t\tensureFileUri(location);\n\t\t\treturn new Promise((c, e) => {\n\t\t\t\tconst path = Uri.parse(location).fsPath;\n\n\t\t\t\tfs.readdir(path, { withFileTypes: true }, (err, children) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn e(err);\n\t\t\t\t\t}\n\t\t\t\t\tc(children.map(stat => {\n\t\t\t\t\t\tif (stat.isSymbolicLink()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.SymbolicLink];\n\t\t\t\t\t\t} else if (stat.isDirectory()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Directory];\n\t\t\t\t\t\t} else if (stat.isFile()) {\n\t\t\t\t\t\t\treturn [stat.name, FileType.File];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn [stat.name, FileType.Unknown];\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/requests.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { RequestType, Connection } from 'vscode-languageserver';\nimport { RuntimeEnvironment } from './htmlServer';\n\nexport namespace FsStatRequest {\n\texport const type: RequestType<string, FileStat, any> = new RequestType('fs/stat');\n}\n\nexport namespace FsReadDirRequest {\n\texport const type: RequestType<string, [string, FileType][], any> = new RequestType('fs/readDir');\n}\n\nexport enum FileType {\n\t/**\n\t * The file type is unknown.\n\t */\n\tUnknown = 0,\n\t/**\n\t * A regular file.\n\t */\n\tFile = 1,\n\t/**\n\t * A directory.\n\t */\n\tDirectory = 2,\n\t/**\n\t * A symbolic link to a file.\n\t */\n\tSymbolicLink = 64\n}\nexport interface FileStat {\n\t/**\n\t * The type of the file, e.g. is a regular file, a directory, or symbolic link\n\t * to a file.\n\t */\n\ttype: FileType;\n\t/**\n\t * The creation timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tctime: number;\n\t/**\n\t * The modification timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n\t */\n\tmtime: number;\n\t/**\n\t * The size in bytes.\n\t */\n\tsize: number;\n}\n\nexport interface FileSystemProvider {\n\tstat(uri: string): Promise<FileStat>;\n\treadDirectory(uri: string): Promise<[string, FileType][]>;\n}\n\n\nexport function getFileSystemProvider(handledSchemas: string[], connection: Connection, runtime: RuntimeEnvironment): FileSystemProvider {\n\tconst fileFs = runtime.fileFs && handledSchemas.indexOf('file') !== -1 ? runtime.fileFs : undefined;\n\treturn {\n\t\tasync stat(uri: string): Promise<FileStat> {\n\t\t\tif (fileFs && uri.startsWith('file:')) {\n\t\t\t\treturn fileFs.stat(uri);\n\t\t\t}\n\t\t\tconst res = await connection.sendRequest(FsStatRequest.type, uri.toString());\n\t\t\treturn res;\n\t\t},\n\t\treadDirectory(uri: string): Promise<[string, FileType][]> {\n\t\t\tif (fileFs && uri.startsWith('file:')) {\n\t\t\t\treturn fileFs.readDirectory(uri);\n\t\t\t}\n\t\t\treturn connection.sendRequest(FsReadDirRequest.type, uri.toString());\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/completions.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport 'mocha';\nimport * as assert from 'assert';\nimport * as path from 'path';\nimport { URI } from 'vscode-uri';\nimport { getLanguageModes, WorkspaceFolder, TextDocument, CompletionList, CompletionItemKind, ClientCapabilities, TextEdit } from '../modes/languageModes';\nimport { getNodeFileFS } from '../node/nodeFs';\nimport { getDocumentContext } from '../utils/documentContext';\nexport interface ItemDescription {\n\tlabel: string;\n\tdocumentation?: string;\n\tkind?: CompletionItemKind;\n\tresultText?: string;\n\tcommand?: { title: string; command: string };\n\tnotAvailable?: boolean;\n}\n\nexport function assertCompletion(completions: CompletionList, expected: ItemDescription, document: TextDocument) {\n\tconst matches = completions.items.filter(completion => {\n\t\treturn completion.label === expected.label;\n\t});\n\tif (expected.notAvailable) {\n\t\tassert.strictEqual(matches.length, 0, `${expected.label} should not existing is results`);\n\t\treturn;\n\t}\n\n\tassert.strictEqual(matches.length, 1, `${expected.label} should only existing once: Actual: ${completions.items.map(c => c.label).join(', ')}`);\n\tconst match = matches[0];\n\tif (expected.documentation) {\n\t\tassert.strictEqual(match.documentation, expected.documentation);\n\t}\n\tif (expected.kind) {\n\t\tassert.strictEqual(match.kind, expected.kind);\n\t}\n\tif (expected.resultText && match.textEdit) {\n\t\tconst edit = TextEdit.is(match.textEdit) ? match.textEdit : TextEdit.replace(match.textEdit.replace, match.textEdit.newText);\n\t\tassert.strictEqual(TextDocument.applyEdits(document, [edit]), expected.resultText);\n\t}\n\tif (expected.command) {\n\t\tassert.deepStrictEqual(match.command, expected.command);\n\t}\n}\n\nconst testUri = 'test://test/test.html';\n\nexport async function testCompletionFor(value: string, expected: { count?: number; items?: ItemDescription[] }, uri = testUri, workspaceFolders?: WorkspaceFolder[]): Promise<void> {\n\tconst offset = value.indexOf('|');\n\tvalue = value.substr(0, offset) + value.substr(offset + 1);\n\n\tconst workspace = {\n\t\tsettings: {},\n\t\tfolders: workspaceFolders || [{ name: 'x', uri: uri.substr(0, uri.lastIndexOf('/')) }]\n\t};\n\n\tconst document = TextDocument.create(uri, 'html', 0, value);\n\tconst position = document.positionAt(offset);\n\tconst context = getDocumentContext(uri, workspace.folders);\n\n\tconst languageModes = getLanguageModes({ css: true, javascript: true }, workspace, ClientCapabilities.LATEST, getNodeFileFS());\n\tconst mode = languageModes.getModeAtPosition(document, position)!;\n\n\tconst list = await mode.doComplete!(document, position, context);\n\n\tif (expected.count) {\n\t\tassert.strictEqual(list.items.length, expected.count);\n\t}\n\tif (expected.items) {\n\t\tfor (const item of expected.items) {\n\t\t\tassertCompletion(list, item, document);\n\t\t}\n\t}\n}\n\nsuite('HTML Completion', () => {\n\ttest('HTML JavaScript Completions', async () => {\n\t\tawait testCompletionFor('<html><script>window.|</script></html>', {\n\t\t\titems: [\n\t\t\t\t{ label: 'location', resultText: '<html><script>window.location</script></html>' },\n\t\t\t]\n\t\t});\n\t\tawait testCompletionFor('<html><script>$.|</script></html>', {\n\t\t\titems: [\n\t\t\t\t{ label: 'getJSON', resultText: '<html><script>$.getJSON</script></html>' },\n\t\t\t]\n\t\t});\n\t\tawait testCompletionFor('<html><script>const x = { a: 1 };</script><script>x.|</script></html>', {\n\t\t\titems: [\n\t\t\t\t{ label: 'a', resultText: '<html><script>const x = { a: 1 };</script><script>x.a</script></html>' },\n\t\t\t]\n\t\t}, 'test://test/test2.html');\n\t});\n});\n\nsuite('HTML Path Completion', () => {\n\tconst triggerSuggestCommand = {\n\t\ttitle: 'Suggest',\n\t\tcommand: 'editor.action.triggerSuggest'\n\t};\n\n\tconst fixtureRoot = path.resolve(__dirname, '../../src/test/pathCompletionFixtures');\n\tconst fixtureWorkspace = { name: 'fixture', uri: URI.file(fixtureRoot).toString() };\n\tconst indexHtmlUri = URI.file(path.resolve(fixtureRoot, 'index.html')).toString();\n\tconst aboutHtmlUri = URI.file(path.resolve(fixtureRoot, 'about/about.html')).toString();\n\n\ttest('Basics - Correct label/kind/result/command', async () => {\n\t\tawait testCompletionFor('<script src=\"./|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', kind: CompletionItemKind.Folder, resultText: '<script src=\"./about/\">', command: triggerSuggestCommand },\n\t\t\t\t{ label: 'index.html', kind: CompletionItemKind.File, resultText: '<script src=\"./index.html\">' },\n\t\t\t\t{ label: 'src/', kind: CompletionItemKind.Folder, resultText: '<script src=\"./src/\">', command: triggerSuggestCommand }\n\t\t\t]\n\t\t}, indexHtmlUri);\n\t});\n\n\ttest('Basics - Single Quote', async () => {\n\t\tawait testCompletionFor(`<script src='./|'>`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', kind: CompletionItemKind.Folder, resultText: `<script src='./about/'>`, command: triggerSuggestCommand },\n\t\t\t\t{ label: 'index.html', kind: CompletionItemKind.File, resultText: `<script src='./index.html'>` },\n\t\t\t\t{ label: 'src/', kind: CompletionItemKind.Folder, resultText: `<script src='./src/'>`, command: triggerSuggestCommand }\n\t\t\t]\n\t\t}, indexHtmlUri);\n\t});\n\n\ttest('No completion for remote paths', async () => {\n\t\tawait testCompletionFor('<script src=\"http:\">', { items: [] });\n\t\tawait testCompletionFor('<script src=\"http:/|\">', { items: [] });\n\t\tawait testCompletionFor('<script src=\"http://|\">', { items: [] });\n\t\tawait testCompletionFor('<script src=\"https:|\">', { items: [] });\n\t\tawait testCompletionFor('<script src=\"https:/|\">', { items: [] });\n\t\tawait testCompletionFor('<script src=\"https://|\">', { items: [] });\n\t\tawait testCompletionFor('<script src=\"//|\">', { items: [] });\n\t});\n\n\ttest('Relative Path', async () => {\n\t\tawait testCompletionFor('<script src=\"../|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: '<script src=\"../about/\">' },\n\t\t\t\t{ label: 'index.html', resultText: '<script src=\"../index.html\">' },\n\t\t\t\t{ label: 'src/', resultText: '<script src=\"../src/\">' }\n\t\t\t]\n\t\t}, aboutHtmlUri);\n\n\t\tawait testCompletionFor('<script src=\"../src/|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: '<script src=\"../src/feature.js\">' },\n\t\t\t\t{ label: 'test.js', resultText: '<script src=\"../src/test.js\">' },\n\t\t\t]\n\t\t}, aboutHtmlUri);\n\t});\n\n\ttest('Absolute Path', async () => {\n\t\tawait testCompletionFor('<script src=\"/|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: '<script src=\"/about/\">' },\n\t\t\t\t{ label: 'index.html', resultText: '<script src=\"/index.html\">' },\n\t\t\t\t{ label: 'src/', resultText: '<script src=\"/src/\">' },\n\t\t\t]\n\t\t}, indexHtmlUri);\n\n\t\tawait testCompletionFor('<script src=\"/src/|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: '<script src=\"/src/feature.js\">' },\n\t\t\t\t{ label: 'test.js', resultText: '<script src=\"/src/test.js\">' },\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\t});\n\n\ttest('Empty Path Value', async () => {\n\t\t// document: index.html\n\t\tawait testCompletionFor('<script src=\"|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: '<script src=\"about/\">' },\n\t\t\t\t{ label: 'index.html', resultText: '<script src=\"index.html\">' },\n\t\t\t\t{ label: 'src/', resultText: '<script src=\"src/\">' },\n\t\t\t]\n\t\t}, indexHtmlUri);\n\t\t// document: about.html\n\t\tawait testCompletionFor('<script src=\"|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.css', resultText: '<script src=\"about.css\">' },\n\t\t\t\t{ label: 'about.html', resultText: '<script src=\"about.html\">' },\n\t\t\t\t{ label: 'media/', resultText: '<script src=\"media/\">' },\n\t\t\t]\n\t\t}, aboutHtmlUri);\n\t});\n\ttest('Incomplete Path', async () => {\n\t\tawait testCompletionFor('<script src=\"/src/f|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: '<script src=\"/src/feature.js\">' },\n\t\t\t\t{ label: 'test.js', resultText: '<script src=\"/src/test.js\">' },\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"../src/f|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: '<script src=\"../src/feature.js\">' },\n\t\t\t\t{ label: 'test.js', resultText: '<script src=\"../src/test.js\">' },\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\t});\n\n\ttest('No leading dot or slash', async () => {\n\t\t// document: index.html\n\t\tawait testCompletionFor('<script src=\"s|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: '<script src=\"about/\">' },\n\t\t\t\t{ label: 'index.html', resultText: '<script src=\"index.html\">' },\n\t\t\t\t{ label: 'src/', resultText: '<script src=\"src/\">' },\n\t\t\t]\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"src/|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: '<script src=\"src/feature.js\">' },\n\t\t\t\t{ label: 'test.js', resultText: '<script src=\"src/test.js\">' },\n\t\t\t]\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"src/f|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: '<script src=\"src/feature.js\">' },\n\t\t\t\t{ label: 'test.js', resultText: '<script src=\"src/test.js\">' },\n\t\t\t]\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\n\t\t// document: about.html\n\t\tawait testCompletionFor('<script src=\"s|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.css', resultText: '<script src=\"about.css\">' },\n\t\t\t\t{ label: 'about.html', resultText: '<script src=\"about.html\">' },\n\t\t\t\t{ label: 'media/', resultText: '<script src=\"media/\">' },\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"media/|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'icon.pic', resultText: '<script src=\"media/icon.pic\">' }\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"media/f|\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'icon.pic', resultText: '<script src=\"media/icon.pic\">' }\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\t});\n\n\ttest('Trigger completion in middle of path', async () => {\n\t\t// document: index.html\n\t\tawait testCompletionFor('<script src=\"src/f|eature.js\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'feature.js', resultText: '<script src=\"src/feature.js\">' },\n\t\t\t\t{ label: 'test.js', resultText: '<script src=\"src/test.js\">' },\n\t\t\t]\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"s|rc/feature.js\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: '<script src=\"about/\">' },\n\t\t\t\t{ label: 'index.html', resultText: '<script src=\"index.html\">' },\n\t\t\t\t{ label: 'src/', resultText: '<script src=\"src/\">' },\n\t\t\t]\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\n\t\t// document: about.html\n\t\tawait testCompletionFor('<script src=\"media/f|eature.js\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'icon.pic', resultText: '<script src=\"media/icon.pic\">' }\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"m|edia/feature.js\">', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.css', resultText: '<script src=\"about.css\">' },\n\t\t\t\t{ label: 'about.html', resultText: '<script src=\"about.html\">' },\n\t\t\t\t{ label: 'media/', resultText: '<script src=\"media/\">' },\n\t\t\t]\n\t\t}, aboutHtmlUri, [fixtureWorkspace]);\n\t});\n\n\n\ttest('Trigger completion in middle of path and with whitespaces', async () => {\n\t\tawait testCompletionFor('<script src=\"./| about/about.html>', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: '<script src=\"./about/ about/about.html>' },\n\t\t\t\t{ label: 'index.html', resultText: '<script src=\"./index.html about/about.html>' },\n\t\t\t\t{ label: 'src/', resultText: '<script src=\"./src/ about/about.html>' },\n\t\t\t]\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\n\t\tawait testCompletionFor('<script src=\"./a|bout /about.html>', {\n\t\t\titems: [\n\t\t\t\t{ label: 'about/', resultText: '<script src=\"./about/ /about.html>' },\n\t\t\t\t{ label: 'index.html', resultText: '<script src=\"./index.html /about.html>' },\n\t\t\t\t{ label: 'src/', resultText: '<script src=\"./src/ /about.html>' },\n\t\t\t]\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\t});\n\n\ttest('Completion should ignore files/folders starting with dot', async () => {\n\t\tawait testCompletionFor('<script src=\"./|\"', {\n\t\t\tcount: 3\n\t\t}, indexHtmlUri, [fixtureWorkspace]);\n\t});\n\n\ttest('Unquoted Path', async () => {\n\t\t/* Unquoted value is not supported in html language service yet\n\t\ttestCompletionFor(`<div><a href=about/|>`, {\n\t\t\titems: [\n\t\t\t\t{ label: 'about.html', resultText: `<div><a href=about/about.html>` }\n\t\t\t]\n\t\t}, testUri);\n\t\t*/\n\t});\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/documentContext.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as assert from 'assert';\nimport { getDocumentContext } from '../utils/documentContext';\n\nsuite('HTML Document Context', () => {\n\n\ttest('Context', function (): any {\n\t\tconst docURI = 'file:///users/test/folder/test.html';\n\t\tconst rootFolders = [{ name: '', uri: 'file:///users/test/' }];\n\n\t\tconst context = getDocumentContext(docURI, rootFolders);\n\t\tassert.strictEqual(context.resolveReference('/', docURI), 'file:///users/test/');\n\t\tassert.strictEqual(context.resolveReference('/message.html', docURI), 'file:///users/test/message.html');\n\t\tassert.strictEqual(context.resolveReference('message.html', docURI), 'file:///users/test/folder/message.html');\n\t\tassert.strictEqual(context.resolveReference('message.html', 'file:///users/test/'), 'file:///users/test/message.html');\n\t});\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/embedded.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport 'mocha';\nimport * as assert from 'assert';\nimport * as embeddedSupport from '../modes/embeddedSupport';\nimport { getLanguageService } from 'vscode-html-languageservice';\nimport { TextDocument } from '../modes/languageModes';\n\nsuite('HTML Embedded Support', () => {\n\n\tconst htmlLanguageService = getLanguageService();\n\n\tfunction assertLanguageId(value: string, expectedLanguageId: string | undefined): void {\n\t\tconst offset = value.indexOf('|');\n\t\tvalue = value.substr(0, offset) + value.substr(offset + 1);\n\n\t\tconst document = TextDocument.create('test://test/test.html', 'html', 0, value);\n\n\t\tconst position = document.positionAt(offset);\n\n\t\tconst docRegions = embeddedSupport.getDocumentRegions(htmlLanguageService, document);\n\t\tconst languageId = docRegions.getLanguageAtPosition(position);\n\n\t\tassert.strictEqual(languageId, expectedLanguageId);\n\t}\n\n\tfunction assertEmbeddedLanguageContent(value: string, languageId: string, expectedContent: string): void {\n\t\tconst document = TextDocument.create('test://test/test.html', 'html', 0, value);\n\n\t\tconst docRegions = embeddedSupport.getDocumentRegions(htmlLanguageService, document);\n\t\tconst content = docRegions.getEmbeddedDocument(languageId);\n\t\tassert.strictEqual(content.getText(), expectedContent);\n\t}\n\n\ttest('Styles', function (): any {\n\t\tassertLanguageId('|<html><style>foo { }</style></html>', 'html');\n\t\tassertLanguageId('<html|><style>foo { }</style></html>', 'html');\n\t\tassertLanguageId('<html><st|yle>foo { }</style></html>', 'html');\n\t\tassertLanguageId('<html><style>|foo { }</style></html>', 'css');\n\t\tassertLanguageId('<html><style>foo| { }</style></html>', 'css');\n\t\tassertLanguageId('<html><style>foo { }|</style></html>', 'css');\n\t\tassertLanguageId('<html><style>foo { }</sty|le></html>', 'html');\n\t});\n\n\ttest('Styles - Incomplete HTML', function (): any {\n\t\tassertLanguageId('|<html><style>foo { }', 'html');\n\t\tassertLanguageId('<html><style>fo|o { }', 'css');\n\t\tassertLanguageId('<html><style>foo { }|', 'css');\n\t});\n\n\ttest('Style in attribute', function (): any {\n\t\tassertLanguageId('<div id=\"xy\" |style=\"color: red\"/>', 'html');\n\t\tassertLanguageId('<div id=\"xy\" styl|e=\"color: red\"/>', 'html');\n\t\tassertLanguageId('<div id=\"xy\" style=|\"color: red\"/>', 'html');\n\t\tassertLanguageId('<div id=\"xy\" style=\"|color: red\"/>', 'css');\n\t\tassertLanguageId('<div id=\"xy\" style=\"color|: red\"/>', 'css');\n\t\tassertLanguageId('<div id=\"xy\" style=\"color: red|\"/>', 'css');\n\t\tassertLanguageId('<div id=\"xy\" style=\"color: red\"|/>', 'html');\n\t\tassertLanguageId('<div id=\"xy\" style=\\'color: r|ed\\'/>', 'css');\n\t\tassertLanguageId('<div id=\"xy\" style|=color:red/>', 'html');\n\t\tassertLanguageId('<div id=\"xy\" style=|color:red/>', 'css');\n\t\tassertLanguageId('<div id=\"xy\" style=color:r|ed/>', 'css');\n\t\tassertLanguageId('<div id=\"xy\" style=color:red|/>', 'css');\n\t\tassertLanguageId('<div id=\"xy\" style=color:red/|>', 'html');\n\t});\n\n\ttest('Style content', function (): any {\n\t\tassertEmbeddedLanguageContent('<html><style>foo { }</style></html>', 'css', '             foo { }               ');\n\t\tassertEmbeddedLanguageContent('<html><script>var i = 0;</script></html>', 'css', '                                        ');\n\t\tassertEmbeddedLanguageContent('<html><style>foo { }</style>Hello<style>foo { }</style></html>', 'css', '             foo { }                    foo { }               ');\n\t\tassertEmbeddedLanguageContent('<html>\\n  <style>\\n    foo { }  \\n  </style>\\n</html>\\n', 'css', '\\n         \\n    foo { }  \\n  \\n\\n');\n\n\t\tassertEmbeddedLanguageContent('<div style=\"color: red\"></div>', 'css', '         __{color: red}       ');\n\t\tassertEmbeddedLanguageContent('<div style=color:red></div>', 'css', '        __{color:red}      ');\n\t});\n\n\ttest('Scripts', function (): any {\n\t\tassertLanguageId('|<html><script>var i = 0;</script></html>', 'html');\n\t\tassertLanguageId('<html|><script>var i = 0;</script></html>', 'html');\n\t\tassertLanguageId('<html><scr|ipt>var i = 0;</script></html>', 'html');\n\t\tassertLanguageId('<html><script>|var i = 0;</script></html>', 'javascript');\n\t\tassertLanguageId('<html><script>var| i = 0;</script></html>', 'javascript');\n\t\tassertLanguageId('<html><script>var i = 0;|</script></html>', 'javascript');\n\t\tassertLanguageId('<html><script>var i = 0;</scr|ipt></html>', 'html');\n\n\t\tassertLanguageId('<script type=\"text/javascript\">var| i = 0;</script>', 'javascript');\n\t\tassertLanguageId('<script type=\"text/ecmascript\">var| i = 0;</script>', 'javascript');\n\t\tassertLanguageId('<script type=\"application/javascript\">var| i = 0;</script>', 'javascript');\n\t\tassertLanguageId('<script type=\"application/ecmascript\">var| i = 0;</script>', 'javascript');\n\t\tassertLanguageId('<script type=\"application/typescript\">var| i = 0;</script>', undefined);\n\t\tassertLanguageId('<script type=\\'text/javascript\\'>var| i = 0;</script>', 'javascript');\n\t});\n\n\ttest('Scripts in attribute', function (): any {\n\t\tassertLanguageId('<div |onKeyUp=\"foo()\" onkeydown=\\'bar()\\'/>', 'html');\n\t\tassertLanguageId('<div onKeyUp=|\"foo()\" onkeydown=\\'bar()\\'/>', 'html');\n\t\tassertLanguageId('<div onKeyUp=\"|foo()\" onkeydown=\\'bar()\\'/>', 'javascript');\n\t\tassertLanguageId('<div onKeyUp=\"foo(|)\" onkeydown=\\'bar()\\'/>', 'javascript');\n\t\tassertLanguageId('<div onKeyUp=\"foo()|\" onkeydown=\\'bar()\\'/>', 'javascript');\n\t\tassertLanguageId('<div onKeyUp=\"foo()\"| onkeydown=\\'bar()\\'/>', 'html');\n\t\tassertLanguageId('<div onKeyUp=\"foo()\" onkeydown=|\\'bar()\\'/>', 'html');\n\t\tassertLanguageId('<div onKeyUp=\"foo()\" onkeydown=\\'|bar()\\'/>', 'javascript');\n\t\tassertLanguageId('<div onKeyUp=\"foo()\" onkeydown=\\'bar()|\\'/>', 'javascript');\n\t\tassertLanguageId('<div onKeyUp=\"foo()\" onkeydown=\\'bar()\\'|/>', 'html');\n\n\t\tassertLanguageId('<DIV ONKEYUP|=foo()</DIV>', 'html');\n\t\tassertLanguageId('<DIV ONKEYUP=|foo()</DIV>', 'javascript');\n\t\tassertLanguageId('<DIV ONKEYUP=f|oo()</DIV>', 'javascript');\n\t\tassertLanguageId('<DIV ONKEYUP=foo(|)</DIV>', 'javascript');\n\t\tassertLanguageId('<DIV ONKEYUP=foo()|</DIV>', 'javascript');\n\t\tassertLanguageId('<DIV ONKEYUP=foo()<|/DIV>', 'html');\n\n\t\tassertLanguageId('<label data-content=\"|Checkbox\"/>', 'html');\n\t\tassertLanguageId('<label on=\"|Checkbox\"/>', 'html');\n\t});\n\n\ttest('Script content', function (): any {\n\t\tassertEmbeddedLanguageContent('<html><script>var i = 0;</script></html>', 'javascript', '              var i = 0;                ');\n\t\tassertEmbeddedLanguageContent('<script type=\"text/javascript\">var i = 0;</script>', 'javascript', '                               var i = 0;         ');\n\t\tassertEmbeddedLanguageContent('<script><!--this comment should not give error--></script>', 'javascript', '        /* this comment should not give error */         ');\n\t\tassertEmbeddedLanguageContent('<script><!--this comment should not give error--> console.log(\"logging\");</script>', 'javascript', '        /* this comment should not give error */ console.log(\"logging\");         ');\n\n\t\tassertEmbeddedLanguageContent('<script>var data=100; <!--this comment should not give error--> </script>', 'javascript', '        var data=100; /* this comment should not give error */          ');\n\t\tassertEmbeddedLanguageContent('<div onKeyUp=\"foo()\" onkeydown=\"bar()\"/>', 'javascript', '              foo();            bar();  ');\n\t\tassertEmbeddedLanguageContent('<div onKeyUp=\"return\"/>', 'javascript', '              return;  ');\n\t\tassertEmbeddedLanguageContent('<div onKeyUp=return\\n/><script>foo();</script>', 'javascript', '             return;\\n          foo();         ');\n\t});\n\n\ttest('Script content - HTML escape characters', function (): any {\n\t\tassertEmbeddedLanguageContent('<div style=\"font-family: &quot;Arial&quot;\"></div>', 'css', '         __{font-family: \"     Arial     \"}       ');\n\t\tassertEmbeddedLanguageContent('<div style=\"font-family: &#34;Arial&#34;\"></div>', 'css', '         __{font-family: \"    Arial    \"}       ');\n\t\tassertEmbeddedLanguageContent('<div style=\"font-family: &quot;Arial&#34;\"></div>', 'css', '         __{font-family: \"     Arial    \"}       ');\n\t\tassertEmbeddedLanguageContent('<div style=\"font-family:&quot; Arial &quot; \"></div>', 'css', '         __{font-family:     \" Arial      \" }       ');\n\t\tassertEmbeddedLanguageContent('<div style=\"font-family: Arial\"></div>', 'css', '         __{font-family: Arial}       ');\n\t});\n\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/fixtures/expected/19813-4spaces.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"utf-8\">\n    <script>\n        Polymer({\n            is: \"chat-messages\",\n            properties: {\n                user: {},\n                friend: {\n                    observer: \"_friendChanged\"\n                }\n            },\n        });\n    </script>\n</head>\n\n<body>\n</body>\n\n</html>"
  },
  {
    "path": "extensions/html-language-features/server/src/test/fixtures/expected/19813-tab.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta charset=\"utf-8\">\n\t<script>\n\t\tPolymer({\n\t\t\tis: \"chat-messages\",\n\t\t\tproperties: {\n\t\t\t\tuser: {},\n\t\t\t\tfriend: {\n\t\t\t\t\tobserver: \"_friendChanged\"\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t</script>\n</head>\n\n<body>\n</body>\n\n</html>"
  },
  {
    "path": "extensions/html-language-features/server/src/test/fixtures/expected/19813.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n  <meta charset=\"utf-8\">\n  <script>\n    Polymer({\n      is: \"chat-messages\",\n      properties: {\n        user: {},\n        friend: {\n          observer: \"_friendChanged\"\n        }\n      },\n    });\n  </script>\n</head>\n\n<body>\n</body>\n\n</html>"
  },
  {
    "path": "extensions/html-language-features/server/src/test/fixtures/expected/21634.html",
    "content": "<app-route path=\"/module\" element=\"page-module\" bindRouter onUrlChange=\"updateModel\"></app-route>\n\n<script>\n  Polymer({\n  });\n</script>"
  },
  {
    "path": "extensions/html-language-features/server/src/test/fixtures/inputs/19813.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n<script>\n    Polymer({\n        is: \"chat-messages\",\n        properties: {\n             user: {},\n            friend: {\n                observer: \"_friendChanged\"\n            }\n        },\n    });\n</script>\n</head>\n<body>\n</body>\n</html>"
  },
  {
    "path": "extensions/html-language-features/server/src/test/fixtures/inputs/21634.html",
    "content": "<app-route path=\"/module\" element=\"page-module\" bindRouter onUrlChange=\"updateModel\"></app-route>\n\n<script>\nPolymer({\n});\n</script>"
  },
  {
    "path": "extensions/html-language-features/server/src/test/folding.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { getFoldingRanges } from '../modes/htmlFolding';\nimport { TextDocument, getLanguageModes } from '../modes/languageModes';\nimport { ClientCapabilities } from 'vscode-css-languageservice';\nimport { getNodeFileFS } from '../node/nodeFs';\n\ninterface ExpectedIndentRange {\n\tstartLine: number;\n\tendLine: number;\n\tkind?: string;\n}\n\nasync function assertRanges(lines: string[], expected: ExpectedIndentRange[], message?: string, nRanges?: number): Promise<void> {\n\tconst document = TextDocument.create('test://foo/bar.html', 'html', 1, lines.join('\\n'));\n\tconst workspace = {\n\t\tsettings: {},\n\t\tfolders: [{ name: 'foo', uri: 'test://foo' }]\n\t};\n\tconst languageModes = getLanguageModes({ css: true, javascript: true }, workspace, ClientCapabilities.LATEST, getNodeFileFS());\n\tconst actual = await getFoldingRanges(languageModes, document, nRanges, null);\n\n\tlet actualRanges = [];\n\tfor (let i = 0; i < actual.length; i++) {\n\t\tactualRanges[i] = r(actual[i].startLine, actual[i].endLine, actual[i].kind);\n\t}\n\tactualRanges = actualRanges.sort((r1, r2) => r1.startLine - r2.startLine);\n\tassert.deepStrictEqual(actualRanges, expected, message);\n}\n\nfunction r(startLine: number, endLine: number, kind?: string): ExpectedIndentRange {\n\treturn { startLine, endLine, kind };\n}\n\nsuite('HTML Folding', () => {\n\n\ttest('Embedded JavaScript', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script>',\n\t\t\t/*3*/'function f() {',\n\t\t\t/*4*/'}',\n\t\t\t/*5*/'</script>',\n\t\t\t/*6*/'</head>',\n\t\t\t/*7*/'</html>',\n\t\t];\n\t\tawait await assertRanges(input, [r(0, 6), r(1, 5), r(2, 4), r(3, 4)]);\n\t});\n\n\ttest('Embedded JavaScript - multiple areas', async () => {\n\t\tconst input = [\n\t\t\t/* 0*/'<html>',\n\t\t\t/* 1*/'<head>',\n\t\t\t/* 2*/'<script>',\n\t\t\t/* 3*/'  var x = {',\n\t\t\t/* 4*/'    foo: true,',\n\t\t\t/* 5*/'    bar: {}',\n\t\t\t/* 6*/'  };',\n\t\t\t/* 7*/'</script>',\n\t\t\t/* 8*/'<script>',\n\t\t\t/* 9*/'  test(() => { // hello',\n\t\t\t/*10*/'    f();',\n\t\t\t/*11*/'  });',\n\t\t\t/*12*/'</script>',\n\t\t\t/*13*/'</head>',\n\t\t\t/*14*/'</html>',\n\t\t];\n\t\tawait assertRanges(input, [r(0, 13), r(1, 12), r(2, 6), r(3, 6), r(8, 11), r(9, 11), r(9, 11)]);\n\t});\n\n\ttest('Embedded JavaScript - incomplete', async () => {\n\t\tconst input = [\n\t\t\t/* 0*/'<html>',\n\t\t\t/* 1*/'<head>',\n\t\t\t/* 2*/'<script>',\n\t\t\t/* 3*/'  var x = {',\n\t\t\t/* 4*/'</script>',\n\t\t\t/* 5*/'<script>',\n\t\t\t/* 6*/'  });',\n\t\t\t/* 7*/'</script>',\n\t\t\t/* 8*/'</head>',\n\t\t\t/* 9*/'</html>',\n\t\t];\n\t\tawait assertRanges(input, [r(0, 8), r(1, 7), r(2, 3), r(5, 6)]);\n\t});\n\n\ttest('Embedded JavaScript - regions', async () => {\n\t\tconst input = [\n\t\t\t/* 0*/'<html>',\n\t\t\t/* 1*/'<head>',\n\t\t\t/* 2*/'<script>',\n\t\t\t/* 3*/'  // #region Lalala',\n\t\t\t/* 4*/'   //  #region',\n\t\t\t/* 5*/'   x = 9;',\n\t\t\t/* 6*/'  //  #endregion',\n\t\t\t/* 7*/'  // #endregion Lalala',\n\t\t\t/* 8*/'</script>',\n\t\t\t/* 9*/'</head>',\n\t\t\t/*10*/'</html>',\n\t\t];\n\t\tawait assertRanges(input, [r(0, 9), r(1, 8), r(2, 7), r(3, 7, 'region'), r(4, 6, 'region')]);\n\t});\n\n\ttest('Embedded CSS', async () => {\n\t\tconst input = [\n\t\t\t/* 0*/'<html>',\n\t\t\t/* 1*/'<head>',\n\t\t\t/* 2*/'<style>',\n\t\t\t/* 3*/'  foo {',\n\t\t\t/* 4*/'   display: block;',\n\t\t\t/* 5*/'   color: black;',\n\t\t\t/* 6*/'  }',\n\t\t\t/* 7*/'</style>',\n\t\t\t/* 8*/'</head>',\n\t\t\t/* 9*/'</html>',\n\t\t];\n\t\tawait assertRanges(input, [r(0, 8), r(1, 7), r(2, 6), r(3, 5)]);\n\t});\n\n\ttest('Embedded CSS - multiple areas', async () => {\n\t\tconst input = [\n\t\t\t/* 0*/'<html>',\n\t\t\t/* 1*/'<head style=\"color:red\">',\n\t\t\t/* 2*/'<style>',\n\t\t\t/* 3*/'  /*',\n\t\t\t/* 4*/'    foo: true,',\n\t\t\t/* 5*/'    bar: {}',\n\t\t\t/* 6*/'  */',\n\t\t\t/* 7*/'</style>',\n\t\t\t/* 8*/'<style>',\n\t\t\t/* 9*/'  @keyframes mymove {',\n\t\t\t/*10*/'    from {top: 0px;}',\n\t\t\t/*11*/'  }',\n\t\t\t/*12*/'</style>',\n\t\t\t/*13*/'</head>',\n\t\t\t/*14*/'</html>',\n\t\t];\n\t\tawait assertRanges(input, [r(0, 13), r(1, 12), r(2, 6), r(3, 6, 'comment'), r(8, 11), r(9, 10)]);\n\t});\n\n\ttest('Embedded CSS - regions', async () => {\n\t\tconst input = [\n\t\t\t/* 0*/'<html>',\n\t\t\t/* 1*/'<head>',\n\t\t\t/* 2*/'<style>',\n\t\t\t/* 3*/'  /* #region Lalala */',\n\t\t\t/* 4*/'   /*  #region*/',\n\t\t\t/* 5*/'   x = 9;',\n\t\t\t/* 6*/'  /*  #endregion*/',\n\t\t\t/* 7*/'  /* #endregion Lalala*/',\n\t\t\t/* 8*/'</style>',\n\t\t\t/* 9*/'</head>',\n\t\t\t/*10*/'</html>',\n\t\t];\n\t\tawait assertRanges(input, [r(0, 9), r(1, 8), r(2, 7), r(3, 7, 'region'), r(4, 6, 'region')]);\n\t});\n\n\n\t// test('Embedded JavaScript - multi line comment', async () => {\n\t// \tconst input = [\n\t// \t\t/* 0*/'<html>',\n\t// \t\t/* 1*/'<head>',\n\t// \t\t/* 2*/'<script>',\n\t// \t\t/* 3*/'  /*',\n\t// \t\t/* 4*/'   * Hello',\n\t// \t\t/* 5*/'   */',\n\t// \t\t/* 6*/'</script>',\n\t// \t\t/* 7*/'</head>',\n\t// \t\t/* 8*/'</html>',\n\t// \t];\n\t// \tawait assertRanges(input, [r(0, 7), r(1, 6), r(2, 5), r(3, 5, 'comment')]);\n\t// });\n\n\ttest('Test limit', async () => {\n\t\tconst input = [\n\t\t\t/* 0*/'<div>',\n\t\t\t/* 1*/' <span>',\n\t\t\t/* 2*/'  <b>',\n\t\t\t/* 3*/'  ',\n\t\t\t/* 4*/'  </b>,',\n\t\t\t/* 5*/'  <b>',\n\t\t\t/* 6*/'   <pre>',\n\t\t\t/* 7*/'  ',\n\t\t\t/* 8*/'   </pre>,',\n\t\t\t/* 9*/'   <pre>',\n\t\t\t/*10*/'  ',\n\t\t\t/*11*/'   </pre>,',\n\t\t\t/*12*/'  </b>,',\n\t\t\t/*13*/'  <b>',\n\t\t\t/*14*/'  ',\n\t\t\t/*15*/'  </b>,',\n\t\t\t/*16*/'  <b>',\n\t\t\t/*17*/'  ',\n\t\t\t/*18*/'  </b>',\n\t\t\t/*19*/' </span>',\n\t\t\t/*20*/'</div>',\n\t\t];\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(6, 7), r(9, 10), r(13, 14), r(16, 17)], 'no limit', undefined);\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(6, 7), r(9, 10), r(13, 14), r(16, 17)], 'limit 8', 8);\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(6, 7), r(13, 14), r(16, 17)], 'limit 7', 7);\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(13, 14), r(16, 17)], 'limit 6', 6);\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11), r(13, 14)], 'limit 5', 5);\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18), r(2, 3), r(5, 11)], 'limit 4', 4);\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18), r(2, 3)], 'limit 3', 3);\n\t\tawait assertRanges(input, [r(0, 19), r(1, 18)], 'limit 2', 2);\n\t\tawait assertRanges(input, [r(0, 19)], 'limit 1', 1);\n\t});\n\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/formatting.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport 'mocha';\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nimport * as assert from 'assert';\nimport { getLanguageModes, TextDocument, Range, FormattingOptions, ClientCapabilities } from '../modes/languageModes';\n\nimport { format } from '../modes/formatting';\nimport { getNodeFileFS } from '../node/nodeFs';\n\nsuite('HTML Embedded Formatting', () => {\n\n\tasync function assertFormat(value: string, expected: string, options?: any, formatOptions?: FormattingOptions, message?: string): Promise<void> {\n\t\tconst workspace = {\n\t\t\tsettings: options,\n\t\t\tfolders: [{ name: 'foo', uri: 'test://foo' }]\n\t\t};\n\t\tconst languageModes = getLanguageModes({ css: true, javascript: true }, workspace, ClientCapabilities.LATEST, getNodeFileFS());\n\n\t\tlet rangeStartOffset = value.indexOf('|');\n\t\tlet rangeEndOffset;\n\t\tif (rangeStartOffset !== -1) {\n\t\t\tvalue = value.substr(0, rangeStartOffset) + value.substr(rangeStartOffset + 1);\n\n\t\t\trangeEndOffset = value.indexOf('|');\n\t\t\tvalue = value.substr(0, rangeEndOffset) + value.substr(rangeEndOffset + 1);\n\t\t} else {\n\t\t\trangeStartOffset = 0;\n\t\t\trangeEndOffset = value.length;\n\t\t}\n\t\tconst document = TextDocument.create('test://test/test.html', 'html', 0, value);\n\t\tconst range = Range.create(document.positionAt(rangeStartOffset), document.positionAt(rangeEndOffset));\n\t\tif (!formatOptions) {\n\t\t\tformatOptions = FormattingOptions.create(2, true);\n\t\t}\n\n\t\tconst result = await format(languageModes, document, range, formatOptions, undefined, { css: true, javascript: true });\n\n\t\tconst actual = TextDocument.applyEdits(document, result);\n\t\tassert.strictEqual(actual, expected, message);\n\t}\n\n\tasync function assertFormatWithFixture(fixtureName: string, expectedPath: string, options?: any, formatOptions?: FormattingOptions): Promise<void> {\n\t\tconst input = fs.readFileSync(path.join(__dirname, '..', '..', 'src', 'test', 'fixtures', 'inputs', fixtureName)).toString().replace(/\\r\\n/mg, '\\n');\n\t\tconst expected = fs.readFileSync(path.join(__dirname, '..', '..', 'src', 'test', 'fixtures', 'expected', expectedPath)).toString().replace(/\\r\\n/mg, '\\n');\n\t\tawait assertFormat(input, expected, options, formatOptions, expectedPath);\n\t}\n\n\ttest('HTML only', async () => {\n\t\tawait assertFormat('<html><body><p>Hello</p></body></html>', '<html>\\n\\n<body>\\n  <p>Hello</p>\\n</body>\\n\\n</html>');\n\t\tawait assertFormat('|<html><body><p>Hello</p></body></html>|', '<html>\\n\\n<body>\\n  <p>Hello</p>\\n</body>\\n\\n</html>');\n\t\tawait assertFormat('<html>|<body><p>Hello</p></body>|</html>', '<html><body>\\n  <p>Hello</p>\\n</body></html>');\n\t});\n\n\ttest('HTML & Scripts', async () => {\n\t\tawait assertFormat('<html><head><script></script></head></html>', '<html>\\n\\n<head>\\n  <script></script>\\n</head>\\n\\n</html>');\n\t\tawait assertFormat('<html><head><script>var x=1;</script></head></html>', '<html>\\n\\n<head>\\n  <script>var x = 1;</script>\\n</head>\\n\\n</html>');\n\t\tawait assertFormat('<html><head><script>\\nvar x=2;\\n</script></head></html>', '<html>\\n\\n<head>\\n  <script>\\n    var x = 2;\\n  </script>\\n</head>\\n\\n</html>');\n\t\tawait assertFormat('<html><head>\\n  <script>\\nvar x=3;\\n</script></head></html>', '<html>\\n\\n<head>\\n  <script>\\n    var x = 3;\\n  </script>\\n</head>\\n\\n</html>');\n\t\tawait assertFormat('<html><head>\\n  <script>\\nvar x=4;\\nconsole.log(\"Hi\");\\n</script></head></html>', '<html>\\n\\n<head>\\n  <script>\\n    var x = 4;\\n    console.log(\"Hi\");\\n  </script>\\n</head>\\n\\n</html>');\n\t\tawait assertFormat('<html><head>\\n  |<script>\\nvar x=5;\\n</script>|</head></html>', '<html><head>\\n  <script>\\n    var x = 5;\\n  </script></head></html>');\n\t});\n\n\ttest('HTLM & Scripts - Fixtures', async () => {\n\t\tassertFormatWithFixture('19813.html', '19813.html');\n\t\tassertFormatWithFixture('19813.html', '19813-4spaces.html', undefined, FormattingOptions.create(4, true));\n\t\tassertFormatWithFixture('19813.html', '19813-tab.html', undefined, FormattingOptions.create(1, false));\n\t\tassertFormatWithFixture('21634.html', '21634.html');\n\t});\n\n\ttest('Script end tag', async () => {\n\t\tawait assertFormat('<html>\\n<head>\\n  <script>\\nvar x  =  0;\\n</script></head></html>', '<html>\\n\\n<head>\\n  <script>\\n    var x = 0;\\n  </script>\\n</head>\\n\\n</html>');\n\t});\n\n\ttest('HTML & Multiple Scripts', async () => {\n\t\tawait assertFormat('<html><head>\\n<script>\\nif(x){\\nbar(); }\\n</script><script>\\nfunction(x){    }\\n</script></head></html>', '<html>\\n\\n<head>\\n  <script>\\n    if (x) {\\n      bar();\\n    }\\n  </script>\\n  <script>\\n    function(x) { }\\n  </script>\\n</head>\\n\\n</html>');\n\t});\n\n\ttest('HTML & Styles', async () => {\n\t\tawait assertFormat('<html><head>\\n<style>\\n.foo{display:none;}\\n</style></head></html>', '<html>\\n\\n<head>\\n  <style>\\n    .foo {\\n      display: none;\\n    }\\n  </style>\\n</head>\\n\\n</html>');\n\t});\n\n\ttest('EndWithNewline', async () => {\n\t\tconst options: FormattingOptions = FormattingOptions.create(2, true);\n\t\toptions.insertFinalNewline = true;\n\n\t\tawait assertFormat('<html><body><p>Hello</p></body></html>', '<html>\\n\\n<body>\\n  <p>Hello</p>\\n</body>\\n\\n</html>\\n', {}, options);\n\t\tawait assertFormat('<html>|<body><p>Hello</p></body>|</html>', '<html><body>\\n  <p>Hello</p>\\n</body></html>', {}, options);\n\t\tawait assertFormat('<html>|<body><p>Hello</p></body></html>|', '<html><body>\\n  <p>Hello</p>\\n</body>\\n\\n</html>\\n', {}, options);\n\t\tawait assertFormat('<html><head><script>\\nvar x=1;\\n</script></head></html>', '<html>\\n\\n<head>\\n  <script>\\n    var x = 1;\\n  </script>\\n</head>\\n\\n</html>\\n', {}, options);\n\t});\n\n\ttest('Inside script', async () => {\n\t\tawait assertFormat('<html><head>\\n  <script>\\n|var x=6;|\\n</script></head></html>', '<html><head>\\n  <script>\\n  var x = 6;\\n</script></head></html>');\n\t\tawait assertFormat('<html><head>\\n  <script>\\n|var x=6;\\nvar y=  9;|\\n</script></head></html>', '<html><head>\\n  <script>\\n  var x = 6;\\n  var y = 9;\\n</script></head></html>');\n\t});\n\n\ttest('Range after new line', async () => {\n\t\tawait assertFormat('<html><head>\\n  |<script>\\nvar x=6;\\n</script>\\n|</head></html>', '<html><head>\\n  <script>\\n    var x = 6;\\n  </script>\\n</head></html>');\n\t});\n\n\ttest('bug 36574', async () => {\n\t\tawait assertFormat('<script src=\"/js/main.js\"> </script>', '<script src=\"/js/main.js\"> </script>');\n\t});\n\n\ttest('bug 48049', async () => {\n\t\tawait assertFormat(\n\t\t\t[\n\t\t\t\t'<html>',\n\t\t\t\t'<head>',\n\t\t\t\t'</head>',\n\t\t\t\t'',\n\t\t\t\t'<body>',\n\t\t\t\t'',\n\t\t\t\t'    <script>',\n\t\t\t\t'        function f(x) { }',\n\t\t\t\t'        f(function () {',\n\t\t\t\t'        // ',\n\t\t\t\t'',\n\t\t\t\t'        console.log(\" vsc crashes on formatting\")',\n\t\t\t\t'        });',\n\t\t\t\t'    </script>',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'        </body>',\n\t\t\t\t'',\n\t\t\t\t'</html>'\n\t\t\t].join('\\n'),\n\t\t\t[\n\t\t\t\t'<html>',\n\t\t\t\t'',\n\t\t\t\t'<head>',\n\t\t\t\t'</head>',\n\t\t\t\t'',\n\t\t\t\t'<body>',\n\t\t\t\t'',\n\t\t\t\t'  <script>',\n\t\t\t\t'    function f(x) { }',\n\t\t\t\t'    f(function () {',\n\t\t\t\t'      // ',\n\t\t\t\t'',\n\t\t\t\t'      console.log(\" vsc crashes on formatting\")',\n\t\t\t\t'    });',\n\t\t\t\t'  </script>',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'</body>',\n\t\t\t\t'',\n\t\t\t\t'</html>'\n\t\t\t].join('\\n')\n\t\t);\n\t});\n\ttest('#58435', async () => {\n\t\tconst options = {\n\t\t\thtml: {\n\t\t\t\tformat: {\n\t\t\t\t\tcontentUnformatted: 'textarea'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst content = [\n\t\t\t'<html>',\n\t\t\t'',\n\t\t\t'<body>',\n\t\t\t'  <textarea name= \"\" id =\"\" cols=\"30\" rows=\"10\">',\n\t\t\t'  </textarea>',\n\t\t\t'</body>',\n\t\t\t'',\n\t\t\t'</html>',\n\t\t].join('\\n');\n\n\t\tconst expected = [\n\t\t\t'<html>',\n\t\t\t'',\n\t\t\t'<body>',\n\t\t\t'  <textarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">',\n\t\t\t'  </textarea>',\n\t\t\t'</body>',\n\t\t\t'',\n\t\t\t'</html>',\n\t\t].join('\\n');\n\n\t\tawait assertFormat(content, expected, options);\n\t});\n\n}); /*\ncontent_unformatted: Array(4)[\"pre\", \"code\", \"textarea\", …]\nend_with_newline: false\neol: \"\\n\"\nextra_liners: Array(3)[\"head\", \"body\", \"/html\"]\nindent_char: \"\\t\"\nindent_handlebars: false\nindent_inner_html: false\nindent_size: 1\nmax_preserve_newlines: 32786\npreserve_newlines: true\nunformatted: Array(1)[\"wbr\"]\nwrap_attributes: \"auto\"\nwrap_attributes_indent_size: undefined\nwrap_line_length: 120*/\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/pathCompletionFixtures/.foo.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/html-language-features/server/src/test/pathCompletionFixtures/about/about.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/html-language-features/server/src/test/pathCompletionFixtures/about/about.html",
    "content": ""
  },
  {
    "path": "extensions/html-language-features/server/src/test/pathCompletionFixtures/about/media/icon.pic",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/html-language-features/server/src/test/pathCompletionFixtures/index.html",
    "content": ""
  },
  {
    "path": "extensions/html-language-features/server/src/test/pathCompletionFixtures/src/feature.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/html-language-features/server/src/test/pathCompletionFixtures/src/test.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/"
  },
  {
    "path": "extensions/html-language-features/server/src/test/rename.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { WorkspaceEdit, TextDocument, getLanguageModes, ClientCapabilities } from '../modes/languageModes';\nimport { getNodeFileFS } from '../node/nodeFs';\n\n\nasync function testRename(value: string, newName: string, expectedDocContent: string): Promise<void> {\n\tconst offset = value.indexOf('|');\n\tvalue = value.substr(0, offset) + value.substr(offset + 1);\n\n\tconst document = TextDocument.create('test://test/test.html', 'html', 0, value);\n\tconst workspace = {\n\t\tsettings: {},\n\t\tfolders: [{ name: 'foo', uri: 'test://foo' }]\n\t};\n\tconst languageModes = getLanguageModes({ css: true, javascript: true }, workspace, ClientCapabilities.LATEST, getNodeFileFS());\n\tconst javascriptMode = languageModes.getMode('javascript');\n\tconst position = document.positionAt(offset);\n\n\tif (javascriptMode) {\n\t\tconst workspaceEdit: WorkspaceEdit | null = await javascriptMode.doRename!(document, position, newName);\n\n\t\tif (!workspaceEdit || !workspaceEdit.changes) {\n\t\t\tassert.fail('No workspace edits');\n\t\t}\n\n\t\tconst edits = workspaceEdit.changes[document.uri.toString()];\n\t\tif (!edits) {\n\t\t\tassert.fail(`No edits for file at ${document.uri.toString()}`);\n\t\t}\n\n\t\tconst newDocContent = TextDocument.applyEdits(document, edits);\n\t\tassert.strictEqual(newDocContent, expectedDocContent, `Expected: ${expectedDocContent}\\nActual: ${newDocContent}`);\n\t} else {\n\t\tassert.fail('should have javascriptMode but no');\n\t}\n}\n\nasync function testNoRename(value: string, newName: string): Promise<void> {\n\tconst offset = value.indexOf('|');\n\tvalue = value.substr(0, offset) + value.substr(offset + 1);\n\n\tconst document = TextDocument.create('test://test/test.html', 'html', 0, value);\n\tconst workspace = {\n\t\tsettings: {},\n\t\tfolders: [{ name: 'foo', uri: 'test://foo' }]\n\t};\n\tconst languageModes = getLanguageModes({ css: true, javascript: true }, workspace, ClientCapabilities.LATEST, getNodeFileFS());\n\tconst javascriptMode = languageModes.getMode('javascript');\n\tconst position = document.positionAt(offset);\n\n\tif (javascriptMode) {\n\t\tconst workspaceEdit: WorkspaceEdit | null = await javascriptMode.doRename!(document, position, newName);\n\n\t\tassert.ok(workspaceEdit?.changes === undefined, 'Should not rename but rename happened');\n\t} else {\n\t\tassert.fail('should have javascriptMode but no');\n\t}\n}\n\nsuite('HTML Javascript Rename', () => {\n\ttest('Rename Variable', async () => {\n\t\tconst input = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t'const |a = 2;',\n\t\t\t'const b = a + 2',\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tconst output = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t'const h = 2;',\n\t\t\t'const b = h + 2',\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tawait testRename(input.join('\\n'), 'h', output.join('\\n'));\n\t});\n\n\ttest('Rename Function', async () => {\n\t\tconst input = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`const name = 'cjg';`,\n\t\t\t'function |sayHello(name) {',\n\t\t\t`console.log('hello', name)`,\n\t\t\t'}',\n\t\t\t'sayHello(name)',\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tconst output = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`const name = 'cjg';`,\n\t\t\t'function sayName(name) {',\n\t\t\t`console.log('hello', name)`,\n\t\t\t'}',\n\t\t\t'sayName(name)',\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tawait testRename(input.join('\\n'), 'sayName', output.join('\\n'));\n\t});\n\n\ttest('Rename Function Params', async () => {\n\t\tconst input = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`const name = 'cjg';`,\n\t\t\t'function sayHello(|name) {',\n\t\t\t`console.log('hello', name)`,\n\t\t\t'}',\n\t\t\t'sayHello(name)',\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tconst output = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`const name = 'cjg';`,\n\t\t\t'function sayHello(newName) {',\n\t\t\t`console.log('hello', newName)`,\n\t\t\t'}',\n\t\t\t'sayHello(name)',\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tawait testRename(input.join('\\n'), 'newName', output.join('\\n'));\n\t});\n\n\ttest('Rename Class', async () => {\n\t\tconst input = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`class |Foo {}`,\n\t\t\t`const foo = new Foo()`,\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tconst output = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`class Bar {}`,\n\t\t\t`const foo = new Bar()`,\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tawait testRename(input.join('\\n'), 'Bar', output.join('\\n'));\n\t});\n\n\ttest('Cannot Rename literal', async () => {\n\t\tconst stringLiteralInput = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`const name = |'cjg';`,\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\t\tconst numberLiteralInput = [\n\t\t\t'<html>',\n\t\t\t'<head>',\n\t\t\t'<script>',\n\t\t\t`const num = |2;`,\n\t\t\t'</script>',\n\t\t\t'</head>',\n\t\t\t'</html>'\n\t\t];\n\n\t\tawait testNoRename(stringLiteralInput.join('\\n'), 'something');\n\t\tawait testNoRename(numberLiteralInput.join('\\n'), 'hhhh');\n\t});\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/selectionRanges.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { getLanguageModes, ClientCapabilities, TextDocument, SelectionRange } from '../modes/languageModes';\nimport { getSelectionRanges } from '../modes/selectionRanges';\nimport { getNodeFileFS } from '../node/nodeFs';\n\nasync function assertRanges(content: string, expected: (number | string)[][]): Promise<void> {\n\tlet message = `${content} gives selection range:\\n`;\n\n\tconst offset = content.indexOf('|');\n\tcontent = content.substr(0, offset) + content.substr(offset + 1);\n\n\tconst workspace = {\n\t\tsettings: {},\n\t\tfolders: [{ name: 'foo', uri: 'test://foo' }]\n\t};\n\tconst languageModes = getLanguageModes({ css: true, javascript: true }, workspace, ClientCapabilities.LATEST, getNodeFileFS());\n\n\tconst document = TextDocument.create('test://foo.html', 'html', 1, content);\n\tconst actualRanges = await getSelectionRanges(languageModes, document, [document.positionAt(offset)]);\n\tassert.strictEqual(actualRanges.length, 1);\n\tconst offsetPairs: [number, string][] = [];\n\tlet curr: SelectionRange | undefined = actualRanges[0];\n\twhile (curr) {\n\t\toffsetPairs.push([document.offsetAt(curr.range.start), document.getText(curr.range)]);\n\t\tcurr = curr.parent;\n\t}\n\n\tmessage += `${JSON.stringify(offsetPairs)}\\n but should give:\\n${JSON.stringify(expected)}\\n`;\n\tassert.deepStrictEqual(offsetPairs, expected, message);\n}\n\nsuite('HTML SelectionRange', () => {\n\ttest('Embedded JavaScript', async () => {\n\t\tawait assertRanges('<html><head><script>  function foo() { return ((1|+2)*6) }</script></head></html>', [\n\t\t\t[48, '1'],\n\t\t\t[48, '1+2'],\n\t\t\t[47, '(1+2)'],\n\t\t\t[47, '(1+2)*6'],\n\t\t\t[46, '((1+2)*6)'],\n\t\t\t[39, 'return ((1+2)*6)'],\n\t\t\t[22, 'function foo() { return ((1+2)*6) }'],\n\t\t\t[20, '  function foo() { return ((1+2)*6) }'],\n\t\t\t[12, '<script>  function foo() { return ((1+2)*6) }</script>'],\n\t\t\t[6, '<head><script>  function foo() { return ((1+2)*6) }</script></head>'],\n\t\t\t[0, '<html><head><script>  function foo() { return ((1+2)*6) }</script></head></html>'],\n\t\t]);\n\t});\n\n\ttest('Embedded CSS', async () => {\n\t\tawait assertRanges('<html><head><style>foo { display: |none; } </style></head></html>', [\n\t\t\t[34, 'none'],\n\t\t\t[25, 'display: none'],\n\t\t\t[24, ' display: none; '],\n\t\t\t[23, '{ display: none; }'],\n\t\t\t[19, 'foo { display: none; }'],\n\t\t\t[19, 'foo { display: none; } '],\n\t\t\t[12, '<style>foo { display: none; } </style>'],\n\t\t\t[6, '<head><style>foo { display: none; } </style></head>'],\n\t\t\t[0, '<html><head><style>foo { display: none; } </style></head></html>'],\n\t\t]);\n\t});\n\n\ttest('Embedded style', async () => {\n\t\tawait assertRanges('<div style=\"color: |red\"></div>', [\n\t\t\t[19, 'red'],\n\t\t\t[12, 'color: red'],\n\t\t\t[11, '\"color: red\"'],\n\t\t\t[5, 'style=\"color: red\"'],\n\t\t\t[1, 'div style=\"color: red\"'],\n\t\t\t[0, '<div style=\"color: red\"></div>']\n\t\t]);\n\t});\n\n\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/semanticTokens.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as assert from 'assert';\nimport { TextDocument, getLanguageModes, ClientCapabilities, Range, Position } from '../modes/languageModes';\nimport { newSemanticTokenProvider } from '../modes/semanticTokens';\nimport { getNodeFileFS } from '../node/nodeFs';\n\ninterface ExpectedToken {\n\tstartLine: number;\n\tcharacter: number;\n\tlength: number;\n\ttokenClassifiction: string;\n}\n\nasync function assertTokens(lines: string[], expected: ExpectedToken[], ranges?: Range[], message?: string): Promise<void> {\n\tconst document = TextDocument.create('test://foo/bar.html', 'html', 1, lines.join('\\n'));\n\tconst workspace = {\n\t\tsettings: {},\n\t\tfolders: [{ name: 'foo', uri: 'test://foo' }]\n\t};\n\tconst languageModes = getLanguageModes({ css: true, javascript: true }, workspace, ClientCapabilities.LATEST, getNodeFileFS());\n\tconst semanticTokensProvider = newSemanticTokenProvider(languageModes);\n\n\tconst legend = semanticTokensProvider.legend;\n\tconst actual = await semanticTokensProvider.getSemanticTokens(document, ranges);\n\n\tconst actualRanges = [];\n\tlet lastLine = 0;\n\tlet lastCharacter = 0;\n\tfor (let i = 0; i < actual.length; i += 5) {\n\t\tconst lineDelta = actual[i], charDelta = actual[i + 1], len = actual[i + 2], typeIdx = actual[i + 3], modSet = actual[i + 4];\n\t\tconst line = lastLine + lineDelta;\n\t\tconst character = lineDelta === 0 ? lastCharacter + charDelta : charDelta;\n\t\tconst tokenClassifiction = [legend.types[typeIdx], ...legend.modifiers.filter((_, i) => modSet & 1 << i)].join('.');\n\t\tactualRanges.push(t(line, character, len, tokenClassifiction));\n\t\tlastLine = line;\n\t\tlastCharacter = character;\n\t}\n\tassert.deepStrictEqual(actualRanges, expected, message);\n}\n\nfunction t(startLine: number, character: number, length: number, tokenClassifiction: string): ExpectedToken {\n\treturn { startLine, character, length, tokenClassifiction };\n}\n\nsuite('HTML Semantic Tokens', () => {\n\n\ttest('Variables', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script>',\n\t\t\t/*3*/'  var x = 9, y1 = [x];',\n\t\t\t/*4*/'  try {',\n\t\t\t/*5*/'    for (const s of y1) { x = s }',\n\t\t\t/*6*/'  } catch (e) {',\n\t\t\t/*7*/'    throw y1;',\n\t\t\t/*8*/'  }',\n\t\t\t/*9*/'</script>',\n\t\t\t/*10*/'</head>',\n\t\t\t/*11*/'</html>',\n\t\t];\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 6, 1, 'variable.declaration'), t(3, 13, 2, 'variable.declaration'), t(3, 19, 1, 'variable'),\n\t\t\tt(5, 15, 1, 'variable.declaration.readonly.local'), t(5, 20, 2, 'variable'), t(5, 26, 1, 'variable'), t(5, 30, 1, 'variable.readonly.local'),\n\t\t\tt(6, 11, 1, 'variable.declaration.local'),\n\t\t\tt(7, 10, 2, 'variable')\n\t\t]);\n\t});\n\n\ttest('Functions', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script>',\n\t\t\t/*3*/'  function foo(p1) {',\n\t\t\t/*4*/'    return foo(Math.abs(p1))',\n\t\t\t/*5*/'  }',\n\t\t\t/*6*/'  `/${window.location}`.split(\"/\").forEach(s => foo(s));',\n\t\t\t/*7*/'</script>',\n\t\t\t/*8*/'</head>',\n\t\t\t/*9*/'</html>',\n\t\t];\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 11, 3, 'function.declaration'), t(3, 15, 2, 'parameter.declaration'),\n\t\t\tt(4, 11, 3, 'function'), t(4, 15, 4, 'variable.defaultLibrary'), t(4, 20, 3, 'method.defaultLibrary'), t(4, 24, 2, 'parameter'),\n\t\t\tt(6, 6, 6, 'variable.defaultLibrary'), t(6, 13, 8, 'property.defaultLibrary'), t(6, 24, 5, 'method.defaultLibrary'), t(6, 35, 7, 'method.defaultLibrary'), t(6, 43, 1, 'parameter.declaration'), t(6, 48, 3, 'function'), t(6, 52, 1, 'parameter')\n\t\t]);\n\t});\n\n\ttest('Members', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script>',\n\t\t\t/*3*/'  class A {',\n\t\t\t/*4*/'    static x = 9;',\n\t\t\t/*5*/'    f = 9;',\n\t\t\t/*6*/'    async m() { return A.x + await this.m(); };',\n\t\t\t/*7*/'    get s() { return this.f; ',\n\t\t\t/*8*/'    static t() { return new A().f; };',\n\t\t\t/*9*/'    constructor() {}',\n\t\t\t/*10*/'  }',\n\t\t\t/*11*/'</script>',\n\t\t\t/*12*/'</head>',\n\t\t\t/*13*/'</html>',\n\t\t];\n\n\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 8, 1, 'class.declaration'),\n\t\t\tt(4, 11, 1, 'property.declaration.static'),\n\t\t\tt(5, 4, 1, 'property.declaration'),\n\t\t\tt(6, 10, 1, 'method.declaration.async'), t(6, 23, 1, 'class'), t(6, 25, 1, 'property.static'), t(6, 40, 1, 'method.async'),\n\t\t\tt(7, 8, 1, 'property.declaration'), t(7, 26, 1, 'property'),\n\t\t\tt(8, 11, 1, 'method.declaration.static'), t(8, 28, 1, 'class'), t(8, 32, 1, 'property'),\n\t\t]);\n\t});\n\n\ttest('Interfaces', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script type=\"text/typescript\">',\n\t\t\t/*3*/'  interface Position { x: number, y: number };',\n\t\t\t/*4*/'  const p = { x: 1, y: 2 } as Position;',\n\t\t\t/*5*/'  const foo = (o: Position) => o.x + o.y;',\n\t\t\t/*6*/'</script>',\n\t\t\t/*7*/'</head>',\n\t\t\t/*8*/'</html>',\n\t\t];\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 12, 8, 'interface.declaration'), t(3, 23, 1, 'property.declaration'), t(3, 34, 1, 'property.declaration'),\n\t\t\tt(4, 8, 1, 'variable.declaration.readonly'), t(4, 14, 1, 'property.declaration'), t(4, 20, 1, 'property.declaration'), t(4, 30, 8, 'interface'),\n\t\t\tt(5, 8, 3, 'function.declaration.readonly'), t(5, 15, 1, 'parameter.declaration'), t(5, 18, 8, 'interface'), t(5, 31, 1, 'parameter'), t(5, 33, 1, 'property'), t(5, 37, 1, 'parameter'), t(5, 39, 1, 'property')\n\t\t]);\n\t});\n\n\ttest('Readonly', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script type=\"text/typescript\">',\n\t\t\t/*3*/'  const f = 9;',\n\t\t\t/*4*/'  class A { static readonly t = 9; static url: URL; }',\n\t\t\t/*5*/'  const enum E { A = 9, B = A + 1 }',\n\t\t\t/*6*/'  console.log(f + A.t + A.url.origin);',\n\t\t\t/*7*/'</script>',\n\t\t\t/*8*/'</head>',\n\t\t\t/*9*/'</html>',\n\t\t];\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 8, 1, 'variable.declaration.readonly'),\n\t\t\tt(4, 8, 1, 'class.declaration'), t(4, 28, 1, 'property.declaration.static.readonly'), t(4, 42, 3, 'property.declaration.static'), t(4, 47, 3, 'interface.defaultLibrary'),\n\t\t\tt(5, 13, 1, 'enum.declaration'), t(5, 17, 1, 'enumMember.declaration.readonly'), t(5, 24, 1, 'enumMember.declaration.readonly'), t(5, 28, 1, 'enumMember.readonly'),\n\t\t\tt(6, 2, 7, 'variable.defaultLibrary'), t(6, 10, 3, 'method.defaultLibrary'), t(6, 14, 1, 'variable.readonly'), t(6, 18, 1, 'class'), t(6, 20, 1, 'property.static.readonly'), t(6, 24, 1, 'class'), t(6, 26, 3, 'property.static'), t(6, 30, 6, 'property.readonly.defaultLibrary'),\n\t\t]);\n\t});\n\n\n\ttest('Type aliases and type parameters', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script type=\"text/typescript\">',\n\t\t\t/*3*/'  type MyMap = Map<string, number>;',\n\t\t\t/*4*/'  function f<T extends MyMap>(t: T | number) : T { ',\n\t\t\t/*5*/'    return <T> <unknown> new Map<string, MyMap>();',\n\t\t\t/*6*/'  }',\n\t\t\t/*7*/'</script>',\n\t\t\t/*8*/'</head>',\n\t\t\t/*9*/'</html>',\n\t\t];\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 7, 5, 'type.declaration'), t(3, 15, 3, 'interface.defaultLibrary') /* to investiagte */,\n\t\t\tt(4, 11, 1, 'function.declaration'), t(4, 13, 1, 'typeParameter.declaration'), t(4, 23, 5, 'type'), t(4, 30, 1, 'parameter.declaration'), t(4, 33, 1, 'typeParameter'), t(4, 47, 1, 'typeParameter'),\n\t\t\tt(5, 12, 1, 'typeParameter'), t(5, 29, 3, 'class.defaultLibrary'), t(5, 41, 5, 'type'),\n\t\t]);\n\t});\n\n\ttest('TS and JS', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script type=\"text/typescript\">',\n\t\t\t/*3*/'  function f<T>(p1: T): T[] { return [ p1 ]; }',\n\t\t\t/*4*/'</script>',\n\t\t\t/*5*/'<script>',\n\t\t\t/*6*/'  window.alert(\"Hello\");',\n\t\t\t/*7*/'</script>',\n\t\t\t/*8*/'</head>',\n\t\t\t/*9*/'</html>',\n\t\t];\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 11, 1, 'function.declaration'), t(3, 13, 1, 'typeParameter.declaration'), t(3, 16, 2, 'parameter.declaration'), t(3, 20, 1, 'typeParameter'), t(3, 24, 1, 'typeParameter'), t(3, 39, 2, 'parameter'),\n\t\t\tt(6, 2, 6, 'variable.defaultLibrary'), t(6, 9, 5, 'method.defaultLibrary')\n\t\t]);\n\t});\n\n\ttest('Ranges', async () => {\n\t\tconst input = [\n\t\t\t/*0*/'<html>',\n\t\t\t/*1*/'<head>',\n\t\t\t/*2*/'<script>',\n\t\t\t/*3*/'  window.alert(\"Hello\");',\n\t\t\t/*4*/'</script>',\n\t\t\t/*5*/'<script>',\n\t\t\t/*6*/'  window.alert(\"World\");',\n\t\t\t/*7*/'</script>',\n\t\t\t/*8*/'</head>',\n\t\t\t/*9*/'</html>',\n\t\t];\n\t\tawait assertTokens(input, [\n\t\t\tt(3, 2, 6, 'variable.defaultLibrary'), t(3, 9, 5, 'method.defaultLibrary')\n\t\t], [Range.create(Position.create(2, 0), Position.create(4, 0))]);\n\n\t\tawait assertTokens(input, [\n\t\t\tt(6, 2, 6, 'variable.defaultLibrary'),\n\t\t], [Range.create(Position.create(6, 2), Position.create(6, 8))]);\n\t});\n\n\n});\n\n"
  },
  {
    "path": "extensions/html-language-features/server/src/test/words.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport assert from 'assert';\nimport * as words from '../utils/strings';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nsuite('HTML Language Configuration', () => {\n\tconst config = JSON.parse((fs.readFileSync(path.join(__dirname, '../../../../html/language-configuration.json')).toString()));\n\n\tfunction createRegex(str: string | { pattern: string; flags: string }): RegExp {\n\t\tif (typeof str === 'string') {\n\t\t\treturn new RegExp(str, 'g');\n\t\t}\n\t\treturn new RegExp(str.pattern, str.flags);\n\t}\n\n\tconst wordRegex = createRegex(config.wordPattern);\n\n\tfunction assertWord(value: string, expected: string): void {\n\t\tconst offset = value.indexOf('|');\n\t\tvalue = value.substr(0, offset) + value.substring(offset + 1);\n\n\t\tconst actualRange = words.getWordAtText(value, offset, wordRegex);\n\t\tassert.ok(actualRange.start <= offset);\n\t\tassert.ok(actualRange.start + actualRange.length >= offset);\n\t\tassert.strictEqual(value.substr(actualRange.start, actualRange.length), expected);\n\t}\n\n\ttest('Words Basic', function (): any {\n\t\tassertWord('|var x1 = new F<A>(a, b);', 'var');\n\t\tassertWord('v|ar x1 = new F<A>(a, b);', 'var');\n\t\tassertWord('var| x1 = new F<A>(a, b);', 'var');\n\t\tassertWord('var |x1 = new F<A>(a, b);', 'x1');\n\t\tassertWord('var x1| = new F<A>(a, b);', 'x1');\n\t\tassertWord('var x1 = new |F<A>(a, b);', 'F');\n\t\tassertWord('var x1 = new F<|A>(a, b);', 'A');\n\t\tassertWord('var x1 = new F<A>(|a, b);', 'a');\n\t\tassertWord('var x1 = new F<A>(a, b|);', 'b');\n\t\tassertWord('var x1 = new F<A>(a, b)|;', '');\n\t\tassertWord('var x1 = new F<A>(a, b)|;|', '');\n\t\tassertWord('var x1 = |  new F<A>(a, b)|;|', '');\n\t});\n\n\ttest('Words Multiline', function (): any {\n\t\tassertWord('console.log(\"hello\");\\n|var x1 = new F<A>(a, b);', 'var');\n\t\tassertWord('console.log(\"hello\");\\n|\\nvar x1 = new F<A>(a, b);', '');\n\t\tassertWord('console.log(\"hello\");\\n\\r |var x1 = new F<A>(a, b);', 'var');\n\t});\n\n\tconst onEnterBeforeRules: RegExp[] = config.onEnterRules.map((r: any) => createRegex(r.beforeText));\n\n\tfunction assertBeforeRule(text: string, expectedMatch: boolean): void {\n\t\tfor (const reg of onEnterBeforeRules) {\n\t\t\tconst start = new Date().getTime();\n\t\t\tassert.strictEqual(reg.test(text), expectedMatch);\n\t\t\tconst totalTime = new Date().getTime() - start;\n\t\t\tassert.ok(totalTime < 200, `Evaluation of ${reg.source} on ${text} took ${totalTime}ms]`);\n\t\t}\n\t}\n\n\ttest('OnEnter Before', function (): any {\n\t\tassertBeforeRule('<button attr1=val1 attr2=val2', false);\n\t\tassertBeforeRule('<button attr1=val1 attr2=val2>', true);\n\t\tassertBeforeRule('<button attr1=\\'val1\\' attr2=\"val2\">', true);\n\t\tassertBeforeRule('<button attr1=val1 attr2=val2></button>', false);\n\t});\n\n});\n"
  },
  {
    "path": "extensions/html-language-features/server/src/utils/arrays.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function pushAll<T>(to: T[], from: T[]) {\n\tif (from) {\n\t\tfor (const e of from) {\n\t\t\tto.push(e);\n\t\t}\n\t}\n}\n\nexport function contains<T>(arr: T[], val: T) {\n\treturn arr.indexOf(val) !== -1;\n}\n\n/**\n * Like `Array#sort` but always stable. Usually runs a little slower `than Array#sort`\n * so only use this when actually needing stable sort.\n */\nexport function mergeSort<T>(data: T[], compare: (a: T, b: T) => number): T[] {\n\t_divideAndMerge(data, compare);\n\treturn data;\n}\n\nfunction _divideAndMerge<T>(data: T[], compare: (a: T, b: T) => number): void {\n\tif (data.length <= 1) {\n\t\t// sorted\n\t\treturn;\n\t}\n\tconst p = (data.length / 2) | 0;\n\tconst left = data.slice(0, p);\n\tconst right = data.slice(p);\n\n\t_divideAndMerge(left, compare);\n\t_divideAndMerge(right, compare);\n\n\tlet leftIdx = 0;\n\tlet rightIdx = 0;\n\tlet i = 0;\n\twhile (leftIdx < left.length && rightIdx < right.length) {\n\t\tconst ret = compare(left[leftIdx], right[rightIdx]);\n\t\tif (ret <= 0) {\n\t\t\t// smaller_equal -> take left to preserve order\n\t\t\tdata[i++] = left[leftIdx++];\n\t\t} else {\n\t\t\t// greater -> take right\n\t\t\tdata[i++] = right[rightIdx++];\n\t\t}\n\t}\n\twhile (leftIdx < left.length) {\n\t\tdata[i++] = left[leftIdx++];\n\t}\n\twhile (rightIdx < right.length) {\n\t\tdata[i++] = right[rightIdx++];\n\t}\n}\n\nexport function binarySearch<T>(array: T[], key: T, comparator: (op1: T, op2: T) => number): number {\n\tlet low = 0,\n\t\thigh = array.length - 1;\n\n\twhile (low <= high) {\n\t\tconst mid = ((low + high) / 2) | 0;\n\t\tconst comp = comparator(array[mid], key);\n\t\tif (comp < 0) {\n\t\t\tlow = mid + 1;\n\t\t} else if (comp > 0) {\n\t\t\thigh = mid - 1;\n\t\t} else {\n\t\t\treturn mid;\n\t\t}\n\t}\n\treturn -(low + 1);\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/utils/documentContext.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { DocumentContext } from 'vscode-css-languageservice';\nimport { endsWith, startsWith } from '../utils/strings';\nimport { WorkspaceFolder } from 'vscode-languageserver';\nimport { URI, Utils } from 'vscode-uri';\n\nexport function getDocumentContext(documentUri: string, workspaceFolders: WorkspaceFolder[]): DocumentContext {\n\tfunction getRootFolder(): string | undefined {\n\t\tfor (const folder of workspaceFolders) {\n\t\t\tlet folderURI = folder.uri;\n\t\t\tif (!endsWith(folderURI, '/')) {\n\t\t\t\tfolderURI = folderURI + '/';\n\t\t\t}\n\t\t\tif (startsWith(documentUri, folderURI)) {\n\t\t\t\treturn folderURI;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tresolveReference: (ref: string, base = documentUri) => {\n\t\t\tif (ref.match(/^\\w[\\w\\d+.-]*:/)) {\n\t\t\t\t// starts with a schema\n\t\t\t\treturn ref;\n\t\t\t}\n\t\t\tif (ref[0] === '/') { // resolve absolute path against the current workspace folder\n\t\t\t\tconst folderUri = getRootFolder();\n\t\t\t\tif (folderUri) {\n\t\t\t\t\treturn folderUri + ref.substr(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst baseUri = URI.parse(base);\n\t\t\tconst baseUriDir = baseUri.path.endsWith('/') ? baseUri : Utils.dirname(baseUri);\n\t\t\treturn Utils.resolvePath(baseUriDir, ref).toString(true);\n\t\t},\n\t};\n}\n\n"
  },
  {
    "path": "extensions/html-language-features/server/src/utils/positions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Position, Range } from '../modes/languageModes';\n\nexport function beforeOrSame(p1: Position, p2: Position) {\n\treturn p1.line < p2.line || p1.line === p2.line && p1.character <= p2.character;\n}\nexport function insideRangeButNotSame(r1: Range, r2: Range) {\n\treturn beforeOrSame(r1.start, r2.start) && beforeOrSame(r2.end, r1.end) && !equalRange(r1, r2);\n}\nexport function equalRange(r1: Range, r2: Range) {\n\treturn r1.start.line === r2.start.line && r1.start.character === r2.start.character && r1.end.line === r2.end.line && r1.end.character === r2.end.character;\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/utils/runner.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ResponseError, CancellationToken, LSPErrorCodes } from 'vscode-languageserver';\nimport { RuntimeEnvironment } from '../htmlServer';\n\nexport function formatError(message: string, err: any): string {\n\tif (err instanceof Error) {\n\t\tconst error = <Error>err;\n\t\treturn `${message}: ${error.message}\\n${error.stack}`;\n\t} else if (typeof err === 'string') {\n\t\treturn `${message}: ${err}`;\n\t} else if (err) {\n\t\treturn `${message}: ${err.toString()}`;\n\t}\n\treturn message;\n}\n\nexport function runSafe<T>(runtime: RuntimeEnvironment, func: () => Thenable<T>, errorVal: T, errorMessage: string, token: CancellationToken): Thenable<T | ResponseError<any>> {\n\treturn new Promise<T | ResponseError<any>>((resolve) => {\n\t\truntime.timer.setImmediate(() => {\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\tresolve(cancelValue());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn func().then(result => {\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\tresolve(cancelValue());\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t}, e => {\n\t\t\t\tconsole.error(formatError(errorMessage, e));\n\t\t\t\tresolve(errorVal);\n\t\t\t});\n\t\t});\n\t});\n}\n\n\n\nfunction cancelValue<E>() {\n\treturn new ResponseError<E>(LSPErrorCodes.RequestCancelled, 'Request cancelled');\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/src/utils/strings.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function getWordAtText(text: string, offset: number, wordDefinition: RegExp): { start: number; length: number } {\n\tlet lineStart = offset;\n\twhile (lineStart > 0 && !isNewlineCharacter(text.charCodeAt(lineStart - 1))) {\n\t\tlineStart--;\n\t}\n\tconst offsetInLine = offset - lineStart;\n\tconst lineText = text.substr(lineStart);\n\n\t// make a copy of the regex as to not keep the state\n\tconst flags = wordDefinition.ignoreCase ? 'gi' : 'g';\n\twordDefinition = new RegExp(wordDefinition.source, flags);\n\n\tlet match = wordDefinition.exec(lineText);\n\twhile (match && match.index + match[0].length < offsetInLine) {\n\t\tmatch = wordDefinition.exec(lineText);\n\t}\n\tif (match && match.index <= offsetInLine) {\n\t\treturn { start: match.index + lineStart, length: match[0].length };\n\t}\n\n\treturn { start: offset, length: 0 };\n}\n\nexport function startsWith(haystack: string, needle: string): boolean {\n\tif (haystack.length < needle.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < needle.length; i++) {\n\t\tif (haystack[i] !== needle[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function endsWith(haystack: string, needle: string): boolean {\n\tconst diff = haystack.length - needle.length;\n\tif (diff > 0) {\n\t\treturn haystack.indexOf(needle, diff) === diff;\n\t} else if (diff === 0) {\n\t\treturn haystack === needle;\n\t} else {\n\t\treturn false;\n\t}\n}\n\nexport function repeat(value: string, count: number) {\n\tlet s = '';\n\twhile (count > 0) {\n\t\tif ((count & 1) === 1) {\n\t\t\ts += value;\n\t\t}\n\t\tvalue += value;\n\t\tcount = count >>> 1;\n\t}\n\treturn s;\n}\n\nexport function isWhitespaceOnly(str: string) {\n\treturn /^\\s*$/.test(str);\n}\n\nexport function isEOL(content: string, offset: number) {\n\treturn isNewlineCharacter(content.charCodeAt(offset));\n}\n\nconst CR = '\\r'.charCodeAt(0);\nconst NL = '\\n'.charCodeAt(0);\nexport function isNewlineCharacter(charCode: number) {\n\treturn charCode === CR || charCode === NL;\n}"
  },
  {
    "path": "extensions/html-language-features/server/src/utils/validation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationToken, Connection, Diagnostic, Disposable, DocumentDiagnosticParams, DocumentDiagnosticReport, DocumentDiagnosticReportKind, TextDocuments } from 'vscode-languageserver';\nimport { TextDocument } from 'vscode-html-languageservice';\nimport { formatError, runSafe } from './runner';\nimport { RuntimeEnvironment } from '../htmlServer';\n\nexport type Validator = (textDocument: TextDocument) => Promise<Diagnostic[]>;\nexport type DiagnosticsSupport = {\n\tdispose(): void;\n\trequestRefresh(): void;\n};\n\nexport function registerDiagnosticsPushSupport(documents: TextDocuments<TextDocument>, connection: Connection, runtime: RuntimeEnvironment, validate: Validator): DiagnosticsSupport {\n\n\tconst pendingValidationRequests: { [uri: string]: Disposable } = {};\n\tconst validationDelayMs = 500;\n\n\tconst disposables: Disposable[] = [];\n\n\t// The content of a text document has changed. This event is emitted\n\t// when the text document first opened or when its content has changed.\n\tdocuments.onDidChangeContent(change => {\n\t\ttriggerValidation(change.document);\n\t}, undefined, disposables);\n\n\t// a document has closed: clear all diagnostics\n\tdocuments.onDidClose(event => {\n\t\tcleanPendingValidation(event.document);\n\t\tconnection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });\n\t}, undefined, disposables);\n\n\tfunction cleanPendingValidation(textDocument: TextDocument): void {\n\t\tconst request = pendingValidationRequests[textDocument.uri];\n\t\tif (request) {\n\t\t\trequest.dispose();\n\t\t\tdelete pendingValidationRequests[textDocument.uri];\n\t\t}\n\t}\n\n\tfunction triggerValidation(textDocument: TextDocument): void {\n\t\tcleanPendingValidation(textDocument);\n\t\tconst request = pendingValidationRequests[textDocument.uri] = runtime.timer.setTimeout(async () => {\n\t\t\tif (request === pendingValidationRequests[textDocument.uri]) {\n\t\t\t\ttry {\n\t\t\t\t\tconst diagnostics = await validate(textDocument);\n\t\t\t\t\tif (request === pendingValidationRequests[textDocument.uri]) {\n\t\t\t\t\t\tconnection.sendDiagnostics({ uri: textDocument.uri, diagnostics });\n\t\t\t\t\t}\n\t\t\t\t\tdelete pendingValidationRequests[textDocument.uri];\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconnection.console.error(formatError(`Error while validating ${textDocument.uri}`, e));\n\t\t\t\t}\n\t\t\t}\n\t\t}, validationDelayMs);\n\t}\n\n\treturn {\n\t\trequestRefresh: () => {\n\t\t\tdocuments.all().forEach(triggerValidation);\n\t\t},\n\t\tdispose: () => {\n\t\t\tdisposables.forEach(d => d.dispose());\n\t\t\tdisposables.length = 0;\n\t\t\tconst keys = Object.keys(pendingValidationRequests);\n\t\t\tfor (const key of keys) {\n\t\t\t\tpendingValidationRequests[key].dispose();\n\t\t\t\tdelete pendingValidationRequests[key];\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport function registerDiagnosticsPullSupport(documents: TextDocuments<TextDocument>, connection: Connection, runtime: RuntimeEnvironment, validate: Validator): DiagnosticsSupport {\n\n\tfunction newDocumentDiagnosticReport(diagnostics: Diagnostic[]): DocumentDiagnosticReport {\n\t\treturn {\n\t\t\tkind: DocumentDiagnosticReportKind.Full,\n\t\t\titems: diagnostics\n\t\t};\n\t}\n\n\tconst registration = connection.languages.diagnostics.on(async (params: DocumentDiagnosticParams, token: CancellationToken) => {\n\t\treturn runSafe(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\treturn newDocumentDiagnosticReport(await validate(document));\n\t\t\t}\n\t\t\treturn newDocumentDiagnosticReport([]);\n\n\t\t}, newDocumentDiagnosticReport([]), `Error while computing diagnostics for ${params.textDocument.uri}`, token);\n\t});\n\n\tfunction requestRefresh(): void {\n\t\tconnection.languages.diagnostics.refresh();\n\t}\n\n\treturn {\n\t\trequestRefresh,\n\t\tdispose: () => {\n\t\t\tregistration.dispose();\n\t\t}\n\t};\n\n}\n"
  },
  {
    "path": "extensions/html-language-features/server/test/index.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst path = require('path');\nconst Mocha = require('mocha');\nconst glob = require('glob');\n\nconst suite = 'Integration HTML Extension Tests';\n\nconst options = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\nconst mocha = new Mocha(options);\n\nglob.sync(__dirname + '/../out/test/**/*.test.js')\n\t.forEach(file => mocha.addFile(file));\n\nmocha.run(failures => process.exit(failures ? -1 : 0));\n"
  },
  {
    "path": "extensions/html-language-features/server/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"lib\": [\n\t\t\t\"ES2020\",\n\t\t\t\"WebWorker\"\n\t\t],\n\t\t\"module\": \"Node16\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\"\n\t]\n}\n"
  },
  {
    "path": "extensions/ini/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/ini/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/ini.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/ini.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"2af0cbb0704940f967152616f2f1ff0aae6287a6\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-ini.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this folder fall under the following license: \",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information, \",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added \",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example \",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/ini/ini.language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \";\",\n\t\t\"blockComment\": [ \";\", \" \" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t]\n}\n"
  },
  {
    "path": "extensions/ini/package.json",
    "content": "{\n  \"name\": \"ini\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin textmate/ini.tmbundle Syntaxes/Ini.plist ./syntaxes/ini.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"ini\",\n        \"extensions\": [\n          \".ini\"\n        ],\n        \"aliases\": [\n          \"Ini\",\n          \"ini\"\n        ],\n        \"configuration\": \"./ini.language-configuration.json\"\n      },\n      {\n        \"id\": \"properties\",\n        \"extensions\": [\n          \".conf\",\n          \".properties\",\n          \".cfg\",\n          \".directory\",\n          \".gitattributes\",\n          \".gitconfig\",\n          \".gitmodules\",\n          \".editorconfig\",\n          \".repo\"\n        ],\n        \"filenames\": [\n          \"gitconfig\",\n          \".env\"\n        ],\n        \"filenamePatterns\": [\n          \"**/.config/git/config\",\n          \"**/.git/config\"\n        ],\n        \"aliases\": [\n          \"Properties\",\n          \"properties\"\n        ],\n        \"configuration\": \"./properties.language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"ini\",\n        \"scopeName\": \"source.ini\",\n        \"path\": \"./syntaxes/ini.tmLanguage.json\"\n      },\n      {\n        \"language\": \"properties\",\n        \"scopeName\": \"source.ini\",\n        \"path\": \"./syntaxes/ini.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/ini/package.nls.json",
    "content": "{\n\t\"displayName\": \"Ini Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Ini files.\"\n}\n"
  },
  {
    "path": "extensions/ini/properties.language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"#\", \" \" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t]\n}\n"
  },
  {
    "path": "extensions/ini/syntaxes/ini.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/ini.tmbundle/blob/master/Syntaxes/Ini.plist\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/ini.tmbundle/commit/2af0cbb0704940f967152616f2f1ff0aae6287a6\",\n\t\"name\": \"Ini\",\n\t\"scopeName\": \"source.ini\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.ini\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.ini\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=;)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \";\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.ini\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"name\": \"comment.line.semicolon.ini\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.definition.ini\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b([a-zA-Z0-9_.-]+)\\\\b\\\\s*(=)\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.ini\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^(\\\\[)(.*?)(\\\\])\",\n\t\t\t\"name\": \"entity.name.section.group-title.ini\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.ini\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ini\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ini\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.ini\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/ipynb/.gitignore",
    "content": "out\ndist\nnode_modules\n*.vsix\nnotebook-out\n"
  },
  {
    "path": "extensions/ipynb/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/ipynb/.vscode/launch.json",
    "content": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"args\": [\n                \"--extensionDevelopmentPath=${workspaceFolder}\"\n            ],\n            \"name\": \"Launch Extension\",\n            \"outFiles\": [\n                \"${workspaceFolder}/out/**/*.js\"\n            ],\n            \"request\": \"launch\",\n            \"type\": \"extensionHost\"\n        }\n    ]\n}"
  },
  {
    "path": "extensions/ipynb/.vscodeignore",
    "content": ".vscode/**\nsrc/**\nnotebook-src/**\nout/**\ntsconfig.json\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\n.gitignore\nesbuild.js\n"
  },
  {
    "path": "extensions/ipynb/README.md",
    "content": "# Jupyter for Visual Studio Code\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension provides the following Jupyter-related features for VS Code:\n\n- Open, edit and save .ipynb files\n"
  },
  {
    "path": "extensions/ipynb/esbuild.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n//@ts-check\n\nconst path = require('path');\n\nconst srcDir = path.join(__dirname, 'notebook-src');\nconst outDir = path.join(__dirname, 'notebook-out');\n\nrequire('../esbuild-webview-common').run({\n\tentryPoints: [\n\t\tpath.join(srcDir, 'cellAttachmentRenderer.ts'),\n\t],\n\tsrcDir,\n\toutdir: outDir,\n}, process.argv);\n"
  },
  {
    "path": "extensions/ipynb/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\nconst path = require('path');\n\nconst mainConfig = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/ipynbMain.browser.ts'\n\t},\n\toutput: {\n\t\tfilename: 'ipynbMain.browser.js',\n\t\tpath: path.join(__dirname, 'dist', 'browser')\n\t}\n});\n\n\nconst workerConfig = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\tnotebookSerializerWorker: './src/notebookSerializerWorker.web.ts',\n\t},\n\toutput: {\n\t\tfilename: 'notebookSerializerWorker.js',\n\t\tpath: path.join(__dirname, 'dist', 'browser'),\n\t\tlibraryTarget: 'var',\n\t\tlibrary: 'serverExportVar'\n\t},\n});\n\nmodule.exports = [mainConfig, workerConfig];\n"
  },
  {
    "path": "extensions/ipynb/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\nconst path = require('path');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\t['ipynbMain.node']: './src/ipynbMain.node.ts',\n\t\tnotebookSerializerWorker: './src/notebookSerializerWorker.ts',\n\t},\n\toutput: {\n\t\tpath: path.resolve(__dirname, 'dist'),\n\t\tfilename: '[name].js'\n\t},\n\tplugins: [\n\t\t...withDefaults.nodePlugins(__dirname), // add plugins, don't replace inherited\n\t]\n});\n"
  },
  {
    "path": "extensions/ipynb/notebook-src/cellAttachmentRenderer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type * as MarkdownIt from 'markdown-it';\nimport type * as MarkdownItToken from 'markdown-it/lib/token';\nimport type { RendererContext } from 'vscode-notebook-renderer';\n\ninterface MarkdownItRenderer {\n\textendMarkdownIt(fn: (md: MarkdownIt) => void): void;\n}\n\nexport async function activate(ctx: RendererContext<void>) {\n\tconst markdownItRenderer = (await ctx.getRenderer('vscode.markdown-it-renderer')) as MarkdownItRenderer | any;\n\tif (!markdownItRenderer) {\n\t\tthrow new Error(`Could not load 'vscode.markdown-it-renderer'`);\n\t}\n\n\tmarkdownItRenderer.extendMarkdownIt((md: MarkdownIt) => {\n\t\tconst original = md.renderer.rules.image;\n\t\tmd.renderer.rules.image = (tokens: MarkdownItToken[], idx: number, options, env, self) => {\n\t\t\tconst token = tokens[idx];\n\t\t\tconst src = token.attrGet('src');\n\t\t\tconst attachments: Record<string, Record<string, string>> | undefined = env.outputItem.metadata?.attachments;\n\t\t\tif (attachments && src && src.startsWith('attachment:')) {\n\t\t\t\tconst imageAttachment = attachments[tryDecodeURIComponent(src.replace('attachment:', ''))];\n\t\t\t\tif (imageAttachment) {\n\t\t\t\t\t// objEntries will always be length 1, with objEntries[0] holding [0]=mime,[1]=b64\n\t\t\t\t\t// if length = 0, something is wrong with the attachment, mime/b64 weren't copied over\n\t\t\t\t\tconst objEntries = Object.entries(imageAttachment);\n\t\t\t\t\tif (objEntries.length) {\n\t\t\t\t\t\tconst [attachmentKey, attachmentVal] = objEntries[0];\n\t\t\t\t\t\tconst b64Markdown = 'data:' + attachmentKey + ';base64,' + attachmentVal;\n\t\t\t\t\t\ttoken.attrSet('src', b64Markdown);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (original) {\n\t\t\t\treturn original(tokens, idx, options, env, self);\n\t\t\t} else {\n\t\t\t\treturn self.renderToken(tokens, idx, options);\n\t\t\t}\n\t\t};\n\t});\n}\n\nfunction tryDecodeURIComponent(uri: string) {\n\ttry {\n\t\treturn decodeURIComponent(uri);\n\t} catch {\n\t\treturn uri;\n\t}\n}\n"
  },
  {
    "path": "extensions/ipynb/package.json",
    "content": "{\n  \"name\": \"ipynb\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"publisher\": \"vscode\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"icon\": \"media/icon.png\",\n  \"engines\": {\n    \"vscode\": \"^1.57.0\"\n  },\n  \"enabledApiProposals\": [\n    \"diffContentOptions\"\n  ],\n  \"activationEvents\": [\n    \"onNotebook:jupyter-notebook\",\n    \"onNotebookSerializer:interactive\",\n    \"onNotebookSerializer:repl\"\n  ],\n  \"extensionKind\": [\n    \"workspace\",\n    \"ui\"\n  ],\n  \"main\": \"./out/ipynbMain.node.js\",\n  \"browser\": \"./dist/browser/ipynbMain.browser.js\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"configuration\": [\n      {\n        \"properties\": {\n          \"ipynb.pasteImagesAsAttachments.enabled\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"markdownDescription\": \"%ipynb.pasteImagesAsAttachments.enabled%\",\n            \"default\": true\n          },\n          \"ipynb.experimental.serialization\": {\n            \"type\": \"boolean\",\n            \"scope\": \"resource\",\n            \"markdownDescription\": \"%ipynb.experimental.serialization%\",\n            \"default\": true,\n            \"tags\": [\n              \"experimental\"\n            ]\n          }\n        }\n      }\n    ],\n    \"commands\": [\n      {\n        \"command\": \"ipynb.newUntitledIpynb\",\n        \"title\": \"%newUntitledIpynb.title%\",\n        \"shortTitle\": \"%newUntitledIpynb.shortTitle%\",\n        \"category\": \"Create\"\n      },\n      {\n        \"command\": \"ipynb.openIpynbInNotebookEditor\",\n        \"title\": \"%openIpynbInNotebookEditor.title%\"\n      },\n      {\n        \"command\": \"ipynb.cleanInvalidImageAttachment\",\n        \"title\": \"%cleanInvalidImageAttachment.title%\"\n      },\n      {\n        \"command\": \"notebook.cellOutput.copy\",\n        \"title\": \"%copyCellOutput.title%\",\n        \"category\": \"Notebook\"\n      },\n      {\n        \"command\": \"notebook.cellOutput.addToChat\",\n        \"title\": \"%addCellOutputToChat.title%\",\n        \"category\": \"Notebook\",\n        \"enablement\": \"chatIsEnabled\"\n      },\n      {\n        \"command\": \"notebook.cellOutput.openInTextEditor\",\n        \"title\": \"%openCellOutput.title%\",\n        \"category\": \"Notebook\"\n      }\n    ],\n    \"notebooks\": [\n      {\n        \"type\": \"jupyter-notebook\",\n        \"displayName\": \"Jupyter Notebook\",\n        \"selector\": [\n          {\n            \"filenamePattern\": \"*.ipynb\"\n          }\n        ],\n        \"priority\": \"default\"\n      }\n    ],\n    \"notebookRenderer\": [\n      {\n        \"id\": \"vscode.markdown-it-cell-attachment-renderer\",\n        \"displayName\": \"%markdownAttachmentRenderer.displayName%\",\n        \"entrypoint\": {\n          \"extends\": \"vscode.markdown-it-renderer\",\n          \"path\": \"./notebook-out/cellAttachmentRenderer.js\"\n        }\n      }\n    ],\n    \"menus\": {\n      \"file/newFile\": [\n        {\n          \"command\": \"ipynb.newUntitledIpynb\",\n          \"group\": \"notebook\"\n        }\n      ],\n      \"commandPalette\": [\n        {\n          \"command\": \"ipynb.newUntitledIpynb\"\n        },\n        {\n          \"command\": \"ipynb.openIpynbInNotebookEditor\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"ipynb.cleanInvalidImageAttachment\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"notebook.cellOutput.copy\",\n          \"when\": \"notebookCellHasOutputs\"\n        },\n        {\n          \"command\": \"notebook.cellOutput.openInTextEditor\",\n          \"when\": \"false\"\n        }\n      ],\n      \"webview/context\": [\n        {\n          \"command\": \"notebook.cellOutput.copy\",\n          \"when\": \"webviewId == 'notebook.output' && webviewSection == 'image'\",\n          \"group\": \"context@1\"\n        },\n        {\n          \"command\": \"notebook.cellOutput.copy\",\n          \"when\": \"webviewId == 'notebook.output' && webviewSection == 'text'\"\n        },\n        {\n          \"command\": \"notebook.cellOutput.addToChat\",\n          \"when\": \"webviewId == 'notebook.output' && (webviewSection == 'text' || webviewSection == 'image')\",\n          \"group\": \"context@2\"\n        },\n        {\n          \"command\": \"notebook.cellOutput.openInTextEditor\",\n          \"when\": \"webviewId == 'notebook.output' && webviewSection == 'text'\"\n        }\n      ]\n    }\n  },\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:ipynb && npm run build-notebook\",\n    \"watch\": \"npx gulp watch-extension:ipynb\",\n    \"build-notebook\": \"node ./esbuild\"\n  },\n  \"dependencies\": {\n    \"@enonic/fnv-plus\": \"^1.3.0\",\n    \"detect-indent\": \"^6.0.0\"\n  },\n  \"devDependencies\": {\n    \"@jupyterlab/nbformat\": \"^3.2.9\",\n    \"@types/markdown-it\": \"12.2.3\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/ipynb/package.nls.json",
    "content": "{\n\t\"displayName\": \".ipynb Support\",\n\t\"description\": \"Provides basic support for opening and reading Jupyter's .ipynb notebook files\",\n\t\"ipynb.pasteImagesAsAttachments.enabled\": \"Enable/disable pasting of images into Markdown cells in ipynb notebook files. Pasted images are inserted as attachments to the cell.\",\n\t\"ipynb.experimental.serialization\": \"Experimental feature to serialize the Jupyter notebook in a worker thread.\",\n\t\"newUntitledIpynb.title\": \"New Jupyter Notebook\",\n\t\"newUntitledIpynb.shortTitle\": \"Jupyter Notebook\",\n\t\"openIpynbInNotebookEditor.title\": \"Open IPYNB File In Notebook Editor\",\n\t\"cleanInvalidImageAttachment.title\": \"Clean Invalid Image Attachment Reference\",\n\t\"copyCellOutput.title\": \"Copy Cell Output\",\n\t\"addCellOutputToChat.title\": \"Add Cell Output to Chat\",\n\t\"openCellOutput.title\": \"Open Cell Output in Text Editor\",\n\t\"markdownAttachmentRenderer.displayName\": {\n\t\t\"message\": \"Markdown-It ipynb Cell Attachment renderer\",\n\t\t\"comment\": [\n\t\t\t\"Markdown-It is a product name and should not be translated\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "extensions/ipynb/src/common.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type * as nbformat from '@jupyterlab/nbformat';\n\n/**\n * Metadata we store in VS Code cell output items.\n * This contains the original metadata from the Jupyter outputs.\n */\nexport interface CellOutputMetadata {\n\t/**\n\t * Cell output metadata.\n\t */\n\tmetadata?: any;\n\n\t/**\n\t * Transient data from Jupyter.\n\t */\n\ttransient?: {\n\t\t/**\n\t\t * This is used for updating the output in other cells.\n\t\t * We don't know of other properties, but this is definitely used.\n\t\t */\n\t\tdisplay_id?: string;\n\t} & any;\n\n\t/**\n\t * Original cell output type\n\t */\n\toutputType: nbformat.OutputType | string;\n\n\texecutionCount?: nbformat.IExecuteResult['ExecutionCount'];\n\n\t/**\n\t * Whether the original Mime data is JSON or not.\n\t * This properly only exists in metadata for NotebookCellOutputItems\n\t * (this is something we have added)\n\t */\n\t__isJson?: boolean;\n}\n\n\n/**\n * Metadata we store in VS Code cells.\n * This contains the original metadata from the Jupyter cells.\n */\nexport interface CellMetadata {\n\t/**\n\t * Cell id for notebooks created with the new 4.5 version of nbformat.\n\t*/\n\tid?: string;\n\t/**\n\t * Stores attachments for cells.\n\t */\n\tattachments?: nbformat.IAttachments;\n\t/**\n\t * Stores cell metadata.\n\t */\n\tmetadata?: Partial<nbformat.ICellMetadata> & { vscode?: { languageId?: string } };\n\t/**\n\t * The code cell's prompt number. Will be null if the cell has not been run.\n\t */\n\texecution_count?: number | null;\n}\n\n"
  },
  {
    "path": "extensions/ipynb/src/constants.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type { DocumentSelector } from 'vscode';\n\nexport const defaultNotebookFormat = { major: 4, minor: 5 };\nexport const ATTACHMENT_CLEANUP_COMMANDID = 'ipynb.cleanInvalidImageAttachment';\n\nexport const JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR: DocumentSelector = { notebookType: 'jupyter-notebook', language: 'markdown' };\n\n// Copied from NotebookCellKind.Markup as we cannot import it from vscode directly in worker threads.\nexport const NotebookCellKindMarkup = 1;\n// Copied from NotebookCellKind.Code as we cannot import it from vscode directly in worker threads.\nexport const NotebookCellKindCode = 2;\n\nexport enum CellOutputMimeTypes {\n\terror = 'application/vnd.code.notebook.error',\n\tstderr = 'application/vnd.code.notebook.stderr',\n\tstdout = 'application/vnd.code.notebook.stdout'\n}\n\nexport const textMimeTypes = ['text/plain', 'text/markdown', 'text/latex', CellOutputMimeTypes.stderr, CellOutputMimeTypes.stdout];\n\n"
  },
  {
    "path": "extensions/ipynb/src/deserializers.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type * as nbformat from '@jupyterlab/nbformat';\nimport { extensions, NotebookCellData, NotebookCellExecutionSummary, NotebookCellKind, NotebookCellOutput, NotebookCellOutputItem, NotebookData } from 'vscode';\nimport { CellMetadata, CellOutputMetadata } from './common';\nimport { textMimeTypes } from './constants';\n\nconst jupyterLanguageToMonacoLanguageMapping = new Map([\n\t['c#', 'csharp'],\n\t['f#', 'fsharp'],\n\t['q#', 'qsharp'],\n\t['c++11', 'c++'],\n\t['c++12', 'c++'],\n\t['c++14', 'c++']\n]);\n\nexport function getPreferredLanguage(metadata?: nbformat.INotebookMetadata) {\n\tconst jupyterLanguage =\n\t\tmetadata?.language_info?.name ||\n\t\t(metadata?.kernelspec as any)?.language;\n\n\t// Default to python language only if the Python extension is installed.\n\tconst defaultLanguage =\n\t\textensions.getExtension('ms-python.python')\n\t\t\t? 'python'\n\t\t\t: (extensions.getExtension('ms-dotnettools.dotnet-interactive-vscode') ? 'csharp' : 'python');\n\n\t// Note, whatever language is returned here, when the user selects a kernel, the cells (of blank documents) get updated based on that kernel selection.\n\treturn translateKernelLanguageToMonaco(jupyterLanguage || defaultLanguage);\n}\n\nfunction translateKernelLanguageToMonaco(language: string): string {\n\tlanguage = language.toLowerCase();\n\tif (language.length === 2 && language.endsWith('#')) {\n\t\treturn `${language.substring(0, 1)}sharp`;\n\t}\n\treturn jupyterLanguageToMonacoLanguageMapping.get(language) || language;\n}\n\nconst orderOfMimeTypes = [\n\t'application/vnd.*',\n\t'application/vdom.*',\n\t'application/geo+json',\n\t'application/x-nteract-model-debug+json',\n\t'text/html',\n\t'application/javascript',\n\t'image/gif',\n\t'text/latex',\n\t'text/markdown',\n\t'image/png',\n\t'image/svg+xml',\n\t'image/jpeg',\n\t'application/json',\n\t'text/plain'\n];\n\nfunction isEmptyVendoredMimeType(outputItem: NotebookCellOutputItem) {\n\tif (outputItem.mime.startsWith('application/vnd.')) {\n\t\ttry {\n\t\t\treturn outputItem.data.byteLength === 0 || Buffer.from(outputItem.data).toString().length === 0;\n\t\t} catch { }\n\t}\n\treturn false;\n}\nfunction isMimeTypeMatch(value: string, compareWith: string) {\n\tif (value.endsWith('.*')) {\n\t\tvalue = value.substr(0, value.indexOf('.*'));\n\t}\n\treturn compareWith.startsWith(value);\n}\n\nfunction sortOutputItemsBasedOnDisplayOrder(outputItems: NotebookCellOutputItem[]): NotebookCellOutputItem[] {\n\treturn outputItems\n\t\t.map(item => {\n\t\t\tlet index = orderOfMimeTypes.findIndex((mime) => isMimeTypeMatch(mime, item.mime));\n\t\t\t// Sometimes we can have mime types with empty data, e.g. when using holoview we can have `application/vnd.holoviews_load.v0+json` with empty value.\n\t\t\t// & in these cases we have HTML/JS and those take precedence.\n\t\t\t// https://github.com/microsoft/vscode-jupyter/issues/6109\n\t\t\tif (isEmptyVendoredMimeType(item)) {\n\t\t\t\tindex = -1;\n\t\t\t}\n\t\t\tindex = index === -1 ? 100 : index;\n\t\t\treturn {\n\t\t\t\titem, index\n\t\t\t};\n\t\t})\n\t\t.sort((outputItemA, outputItemB) => outputItemA.index - outputItemB.index).map(item => item.item);\n}\n\nfunction concatMultilineString(str: string | string[], trim?: boolean): string {\n\tconst nonLineFeedWhiteSpaceTrim = /(^[\\t\\f\\v\\r ]+|[\\t\\f\\v\\r ]+$)/g;\n\tif (Array.isArray(str)) {\n\t\tlet result = '';\n\t\tfor (let i = 0; i < str.length; i += 1) {\n\t\t\tconst s = str[i];\n\t\t\tif (i < str.length - 1 && !s.endsWith('\\n')) {\n\t\t\t\tresult = result.concat(`${s}\\n`);\n\t\t\t} else {\n\t\t\t\tresult = result.concat(s);\n\t\t\t}\n\t\t}\n\n\t\t// Just trim whitespace. Leave \\n in place\n\t\treturn trim ? result.replace(nonLineFeedWhiteSpaceTrim, '') : result;\n\t}\n\treturn trim ? str.toString().replace(nonLineFeedWhiteSpaceTrim, '') : str.toString();\n}\n\nfunction convertJupyterOutputToBuffer(mime: string, value: unknown): NotebookCellOutputItem {\n\tif (!value) {\n\t\treturn NotebookCellOutputItem.text('', mime);\n\t}\n\ttry {\n\t\tif (\n\t\t\t(mime.startsWith('text/') || textMimeTypes.includes(mime)) &&\n\t\t\t(Array.isArray(value) || typeof value === 'string')\n\t\t) {\n\t\t\tconst stringValue = Array.isArray(value) ? concatMultilineString(value) : value;\n\t\t\treturn NotebookCellOutputItem.text(stringValue, mime);\n\t\t} else if (mime.startsWith('image/') && typeof value === 'string' && mime !== 'image/svg+xml') {\n\t\t\t// Images in Jupyter are stored in base64 encoded format.\n\t\t\t// VS Code expects bytes when rendering images.\n\t\t\tif (typeof Buffer !== 'undefined' && typeof Buffer.from === 'function') {\n\t\t\t\treturn new NotebookCellOutputItem(Buffer.from(value, 'base64'), mime);\n\t\t\t} else {\n\t\t\t\tconst data = Uint8Array.from(atob(value), c => c.charCodeAt(0));\n\t\t\t\treturn new NotebookCellOutputItem(data, mime);\n\t\t\t}\n\t\t} else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n\t\t\treturn NotebookCellOutputItem.text(JSON.stringify(value), mime);\n\t\t} else if (mime === 'application/json') {\n\t\t\treturn NotebookCellOutputItem.json(value, mime);\n\t\t} else {\n\t\t\t// For everything else, treat the data as strings (or multi-line strings).\n\t\t\tvalue = Array.isArray(value) ? concatMultilineString(value) : value;\n\t\t\treturn NotebookCellOutputItem.text(value as string, mime);\n\t\t}\n\t} catch (ex) {\n\t\treturn NotebookCellOutputItem.error(ex);\n\t}\n}\n\nfunction getNotebookCellMetadata(cell: nbformat.IBaseCell): {\n\t[key: string]: any;\n} {\n\t// We put this only for VSC to display in diff view.\n\t// Else we don't use this.\n\tconst cellMetadata: CellMetadata = {};\n\tif (cell.cell_type === 'code') {\n\t\tif (typeof cell['execution_count'] === 'number') {\n\t\t\tcellMetadata.execution_count = cell['execution_count'];\n\t\t} else {\n\t\t\tcellMetadata.execution_count = null;\n\t\t}\n\t}\n\n\tif (cell['metadata']) {\n\t\tcellMetadata['metadata'] = JSON.parse(JSON.stringify(cell['metadata']));\n\t}\n\n\tif ('id' in cell && typeof cell.id === 'string') {\n\t\tcellMetadata.id = cell.id;\n\t}\n\n\tif (cell['attachments']) {\n\t\tcellMetadata.attachments = JSON.parse(JSON.stringify(cell['attachments']));\n\t}\n\treturn cellMetadata;\n}\n\nfunction getOutputMetadata(output: nbformat.IOutput): CellOutputMetadata {\n\t// Add on transient data if we have any. This should be removed by our save functions elsewhere.\n\tconst metadata: CellOutputMetadata = {\n\t\toutputType: output.output_type\n\t};\n\tif (output.transient) {\n\t\tmetadata.transient = output.transient;\n\t}\n\n\tswitch (output.output_type as nbformat.OutputType) {\n\t\tcase 'display_data':\n\t\tcase 'execute_result':\n\t\tcase 'update_display_data': {\n\t\t\tmetadata.executionCount = output.execution_count;\n\t\t\tmetadata.metadata = output.metadata ? JSON.parse(JSON.stringify(output.metadata)) : {};\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn metadata;\n}\n\n\nfunction translateDisplayDataOutput(\n\toutput: nbformat.IDisplayData | nbformat.IDisplayUpdate | nbformat.IExecuteResult\n): NotebookCellOutput {\n\t// Metadata could be as follows:\n\t// We'll have metadata specific to each mime type as well as generic metadata.\n\t/*\n\tIDisplayData = {\n\t\toutput_type: 'display_data',\n\t\tdata: {\n\t\t\t'image/jpg': '/////'\n\t\t\t'image/png': '/////'\n\t\t\t'text/plain': '/////'\n\t\t},\n\t\tmetadata: {\n\t\t\t'image/png': '/////',\n\t\t\t'background': true,\n\t\t\t'xyz': '///\n\t\t}\n\t}\n\t*/\n\tconst metadata = getOutputMetadata(output);\n\tconst items: NotebookCellOutputItem[] = [];\n\tif (output.data) {\n\t\tfor (const key in output.data) {\n\t\t\titems.push(convertJupyterOutputToBuffer(key, output.data[key]));\n\t\t}\n\t}\n\n\treturn new NotebookCellOutput(sortOutputItemsBasedOnDisplayOrder(items), metadata);\n}\n\nfunction translateErrorOutput(output?: nbformat.IError): NotebookCellOutput {\n\toutput = output || { output_type: 'error', ename: '', evalue: '', traceback: [] };\n\treturn new NotebookCellOutput(\n\t\t[\n\t\t\tNotebookCellOutputItem.error({\n\t\t\t\tname: output?.ename || '',\n\t\t\t\tmessage: output?.evalue || '',\n\t\t\t\tstack: (output?.traceback || []).join('\\n')\n\t\t\t})\n\t\t],\n\t\t{ ...getOutputMetadata(output), originalError: output }\n\t);\n}\n\nfunction translateStreamOutput(output: nbformat.IStream): NotebookCellOutput {\n\tconst value = concatMultilineString(output.text);\n\tconst item = output.name === 'stderr' ? NotebookCellOutputItem.stderr(value) : NotebookCellOutputItem.stdout(value);\n\treturn new NotebookCellOutput([item], getOutputMetadata(output));\n}\n\nconst cellOutputMappers = new Map<nbformat.OutputType, (output: any) => NotebookCellOutput>();\ncellOutputMappers.set('display_data', translateDisplayDataOutput);\ncellOutputMappers.set('execute_result', translateDisplayDataOutput);\ncellOutputMappers.set('update_display_data', translateDisplayDataOutput);\ncellOutputMappers.set('error', translateErrorOutput);\ncellOutputMappers.set('stream', translateStreamOutput);\n\nexport function jupyterCellOutputToCellOutput(output: nbformat.IOutput): NotebookCellOutput {\n\t/**\n\t * Stream, `application/x.notebook.stream`\n\t * Error, `application/x.notebook.error-traceback`\n\t * Rich, { mime: value }\n\t *\n\t * outputs: [\n\t\t\tnew vscode.NotebookCellOutput([\n\t\t\t\tnew vscode.NotebookCellOutputItem('application/x.notebook.stream', 2),\n\t\t\t\tnew vscode.NotebookCellOutputItem('application/x.notebook.stream', 3),\n\t\t\t]),\n\t\t\tnew vscode.NotebookCellOutput([\n\t\t\t\tnew vscode.NotebookCellOutputItem('text/markdown', '## header 2'),\n\t\t\t\tnew vscode.NotebookCellOutputItem('image/svg+xml', [\n\t\t\t\t\t\"<svg baseProfile=\\\"full\\\" height=\\\"200\\\" version=\\\"1.1\\\" width=\\\"300\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\",\n\t\t\t\t\t\"  <rect fill=\\\"blue\\\" height=\\\"100%\\\" width=\\\"100%\\\"/>\\n\",\n\t\t\t\t\t\"  <circle cx=\\\"150\\\" cy=\\\"100\\\" fill=\\\"green\\\" r=\\\"80\\\"/>\\n\",\n\t\t\t\t\t\"  <text fill=\\\"white\\\" font-size=\\\"60\\\" text-anchor=\\\"middle\\\" x=\\\"150\\\" y=\\\"125\\\">SVG</text>\\n\",\n\t\t\t\t\t\"</svg>\"\n\t\t\t\t\t]),\n\t\t\t]),\n\t\t]\n\t *\n\t */\n\tconst fn = cellOutputMappers.get(output.output_type as nbformat.OutputType);\n\tlet result: NotebookCellOutput;\n\tif (fn) {\n\t\tresult = fn(output);\n\t} else {\n\t\tresult = translateDisplayDataOutput(output as any);\n\t}\n\treturn result;\n}\n\nfunction createNotebookCellDataFromRawCell(cell: nbformat.IRawCell): NotebookCellData {\n\tconst cellData = new NotebookCellData(NotebookCellKind.Code, concatMultilineString(cell.source), 'raw');\n\tcellData.outputs = [];\n\tcellData.metadata = getNotebookCellMetadata(cell);\n\treturn cellData;\n}\nfunction createNotebookCellDataFromMarkdownCell(cell: nbformat.IMarkdownCell): NotebookCellData {\n\tconst cellData = new NotebookCellData(\n\t\tNotebookCellKind.Markup,\n\t\tconcatMultilineString(cell.source),\n\t\t'markdown'\n\t);\n\tcellData.outputs = [];\n\tcellData.metadata = getNotebookCellMetadata(cell);\n\treturn cellData;\n}\nfunction createNotebookCellDataFromCodeCell(cell: nbformat.ICodeCell, cellLanguage: string): NotebookCellData {\n\tconst cellOutputs = Array.isArray(cell.outputs) ? cell.outputs : [];\n\tconst outputs = cellOutputs.map(jupyterCellOutputToCellOutput);\n\tconst hasExecutionCount = typeof cell.execution_count === 'number' && cell.execution_count > 0;\n\n\tconst source = concatMultilineString(cell.source);\n\n\tconst executionSummary: NotebookCellExecutionSummary = hasExecutionCount\n\t\t? { executionOrder: cell.execution_count as number }\n\t\t: {};\n\n\tconst vscodeCustomMetadata = cell.metadata['vscode'] as { [key: string]: any } | undefined;\n\tconst cellLanguageId = vscodeCustomMetadata && vscodeCustomMetadata.languageId && typeof vscodeCustomMetadata.languageId === 'string' ? vscodeCustomMetadata.languageId : cellLanguage;\n\tconst cellData = new NotebookCellData(NotebookCellKind.Code, source, cellLanguageId);\n\n\tcellData.outputs = outputs;\n\tcellData.metadata = getNotebookCellMetadata(cell);\n\tcellData.executionSummary = executionSummary;\n\treturn cellData;\n}\n\nfunction createNotebookCellDataFromJupyterCell(\n\tcellLanguage: string,\n\tcell: nbformat.IBaseCell\n): NotebookCellData | undefined {\n\tswitch (cell.cell_type) {\n\t\tcase 'raw': {\n\t\t\treturn createNotebookCellDataFromRawCell(cell as nbformat.IRawCell);\n\t\t}\n\t\tcase 'markdown': {\n\t\t\treturn createNotebookCellDataFromMarkdownCell(cell as nbformat.IMarkdownCell);\n\t\t}\n\t\tcase 'code': {\n\t\t\treturn createNotebookCellDataFromCodeCell(cell as nbformat.ICodeCell, cellLanguage);\n\t\t}\n\t}\n\n\treturn;\n}\n\n/**\n * Converts a NotebookModel into VS Code format.\n */\nexport function jupyterNotebookModelToNotebookData(\n\tnotebookContent: Partial<nbformat.INotebookContent>,\n\tpreferredLanguage: string\n): NotebookData {\n\tconst notebookContentWithoutCells = { ...notebookContent, cells: [] };\n\tif (!Array.isArray(notebookContent.cells)) {\n\t\tthrow new Error('Notebook content is missing cells');\n\t}\n\n\tconst cells = notebookContent.cells\n\t\t.map(cell => createNotebookCellDataFromJupyterCell(preferredLanguage, cell))\n\t\t.filter((item): item is NotebookCellData => !!item);\n\n\tconst notebookData = new NotebookData(cells);\n\tnotebookData.metadata = notebookContentWithoutCells;\n\treturn notebookData;\n}\n"
  },
  {
    "path": "extensions/ipynb/src/helper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationError } from 'vscode';\n\nexport function deepClone<T>(obj: T): T {\n\tif (!obj || typeof obj !== 'object') {\n\t\treturn obj;\n\t}\n\tif (obj instanceof RegExp) {\n\t\t// See https://github.com/microsoft/TypeScript/issues/10990\n\t\treturn obj as any;\n\t}\n\tconst result: any = Array.isArray(obj) ? [] : {};\n\tObject.keys(<any>obj).forEach((key: string) => {\n\t\tif ((<any>obj)[key] && typeof (<any>obj)[key] === 'object') {\n\t\t\tresult[key] = deepClone((<any>obj)[key]);\n\t\t} else {\n\t\t\tresult[key] = (<any>obj)[key];\n\t\t}\n\t});\n\treturn result;\n}\n\n// from https://github.com/microsoft/vscode/blob/43ae27a30e7b5e8711bf6b218ee39872ed2b8ef6/src/vs/base/common/objects.ts#L117\nexport function objectEquals(one: any, other: any) {\n\tif (one === other) {\n\t\treturn true;\n\t}\n\tif (one === null || one === undefined || other === null || other === undefined) {\n\t\treturn false;\n\t}\n\tif (typeof one !== typeof other) {\n\t\treturn false;\n\t}\n\tif (typeof one !== 'object') {\n\t\treturn false;\n\t}\n\tif ((Array.isArray(one)) !== (Array.isArray(other))) {\n\t\treturn false;\n\t}\n\n\tlet i: number;\n\tlet key: string;\n\n\tif (Array.isArray(one)) {\n\t\tif (one.length !== other.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (i = 0; i < one.length; i++) {\n\t\t\tif (!objectEquals(one[i], other[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst oneKeys: string[] = [];\n\n\t\tfor (key in one) {\n\t\t\toneKeys.push(key);\n\t\t}\n\t\toneKeys.sort();\n\t\tconst otherKeys: string[] = [];\n\t\tfor (key in other) {\n\t\t\totherKeys.push(key);\n\t\t}\n\t\totherKeys.sort();\n\t\tif (!objectEquals(oneKeys, otherKeys)) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (i = 0; i < oneKeys.length; i++) {\n\t\t\tif (!objectEquals(one[oneKeys[i]], other[oneKeys[i]])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * A helper to delay/debounce execution of a task, includes cancellation/disposal support.\n * Pulled from https://github.com/microsoft/vscode/blob/3059063b805ed0ac10a6d9539e213386bfcfb852/extensions/markdown-language-features/src/util/async.ts\n */\nexport class Delayer<T> {\n\n\tpublic defaultDelay: number;\n\tprivate _timeout: any; // Timer\n\tprivate _cancelTimeout: Promise<T | null> | null;\n\tprivate _onSuccess: ((value: T | PromiseLike<T> | undefined) => void) | null;\n\tprivate _task: ITask<T> | null;\n\n\tconstructor(defaultDelay: number) {\n\t\tthis.defaultDelay = defaultDelay;\n\t\tthis._timeout = null;\n\t\tthis._cancelTimeout = null;\n\t\tthis._onSuccess = null;\n\t\tthis._task = null;\n\t}\n\n\tdispose() {\n\t\tthis._doCancelTimeout();\n\t}\n\n\tpublic trigger(task: ITask<T>, delay: number = this.defaultDelay): Promise<T | null> {\n\t\tthis._task = task;\n\t\tif (delay >= 0) {\n\t\t\tthis._doCancelTimeout();\n\t\t}\n\n\t\tif (!this._cancelTimeout) {\n\t\t\tthis._cancelTimeout = new Promise<T | undefined>((resolve) => {\n\t\t\t\tthis._onSuccess = resolve;\n\t\t\t}).then(() => {\n\t\t\t\tthis._cancelTimeout = null;\n\t\t\t\tthis._onSuccess = null;\n\t\t\t\tconst result = this._task && this._task?.();\n\t\t\t\tthis._task = null;\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\n\t\tif (delay >= 0 || this._timeout === null) {\n\t\t\tthis._timeout = setTimeout(() => {\n\t\t\t\tthis._timeout = null;\n\t\t\t\tthis._onSuccess?.(undefined);\n\t\t\t}, delay >= 0 ? delay : this.defaultDelay);\n\t\t}\n\n\t\treturn this._cancelTimeout;\n\t}\n\n\tprivate _doCancelTimeout(): void {\n\t\tif (this._timeout !== null) {\n\t\t\tclearTimeout(this._timeout);\n\t\t\tthis._timeout = null;\n\t\t}\n\t}\n}\n\nexport interface ITask<T> {\n\t(): T;\n}\n\n\n/**\n * Copied from src/vs/base/common/uuid.ts\n */\nexport function generateUuid(): string {\n\t// use `randomUUID` if possible\n\tif (typeof crypto.randomUUID === 'function') {\n\t\t// see https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto\n\t\t// > Although crypto is available on all windows, the returned Crypto object only has one\n\t\t// > usable feature in insecure contexts: the getRandomValues() method.\n\t\t// > In general, you should use this API only in secure contexts.\n\n\t\treturn crypto.randomUUID.bind(crypto)();\n\t}\n\n\t// prep-work\n\tconst _data = new Uint8Array(16);\n\tconst _hex: string[] = [];\n\tfor (let i = 0; i < 256; i++) {\n\t\t_hex.push(i.toString(16).padStart(2, '0'));\n\t}\n\n\t// get data\n\tcrypto.getRandomValues(_data);\n\n\t// set version bits\n\t_data[6] = (_data[6] & 0x0f) | 0x40;\n\t_data[8] = (_data[8] & 0x3f) | 0x80;\n\n\t// print as string\n\tlet i = 0;\n\tlet result = '';\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += '-';\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += '-';\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += '-';\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += '-';\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\tresult += _hex[_data[i++]];\n\treturn result;\n}\n\nexport type ValueCallback<T = unknown> = (value: T | Promise<T>) => void;\n\nconst enum DeferredOutcome {\n\tResolved,\n\tRejected\n}\n\n\n/**\n * Creates a promise whose resolution or rejection can be controlled imperatively.\n */\nexport class DeferredPromise<T> {\n\n\tprivate completeCallback!: ValueCallback<T>;\n\tprivate errorCallback!: (err: unknown) => void;\n\tprivate outcome?: { outcome: DeferredOutcome.Rejected; value: any } | { outcome: DeferredOutcome.Resolved; value: T };\n\n\tpublic get isRejected() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Rejected;\n\t}\n\n\tpublic get isResolved() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Resolved;\n\t}\n\n\tpublic get isSettled() {\n\t\treturn !!this.outcome;\n\t}\n\n\tpublic get value() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Resolved ? this.outcome?.value : undefined;\n\t}\n\n\tpublic readonly p: Promise<T>;\n\n\tconstructor() {\n\t\tthis.p = new Promise<T>((c, e) => {\n\t\t\tthis.completeCallback = c;\n\t\t\tthis.errorCallback = e;\n\t\t});\n\t}\n\n\tpublic complete(value: T) {\n\t\treturn new Promise<void>(resolve => {\n\t\t\tthis.completeCallback(value);\n\t\t\tthis.outcome = { outcome: DeferredOutcome.Resolved, value };\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic error(err: unknown) {\n\t\treturn new Promise<void>(resolve => {\n\t\t\tthis.errorCallback(err);\n\t\t\tthis.outcome = { outcome: DeferredOutcome.Rejected, value: err };\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic cancel() {\n\t\treturn this.error(new CancellationError());\n\t}\n}\n"
  },
  {
    "path": "extensions/ipynb/src/ipynbMain.browser.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as main from './ipynbMain';\nimport { NotebookSerializer } from './notebookSerializer.web';\n\nexport function activate(context: vscode.ExtensionContext) {\n\treturn main.activate(context, new NotebookSerializer(context));\n}\n\nexport function deactivate() {\n\treturn main.deactivate();\n}\n"
  },
  {
    "path": "extensions/ipynb/src/ipynbMain.node.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as main from './ipynbMain';\nimport { NotebookSerializer } from './notebookSerializer.node';\n\nexport function activate(context: vscode.ExtensionContext) {\n\treturn main.activate(context, new NotebookSerializer(context));\n}\n\nexport function deactivate() {\n\treturn main.deactivate();\n}\n"
  },
  {
    "path": "extensions/ipynb/src/ipynbMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { activate as keepNotebookModelStoreInSync } from './notebookModelStoreSync';\nimport { notebookImagePasteSetup } from './notebookImagePaste';\nimport { AttachmentCleaner } from './notebookAttachmentCleaner';\nimport { serializeNotebookToString } from './serializers';\nimport { defaultNotebookFormat } from './constants';\n\n// From {nbformat.INotebookMetadata} in @jupyterlab/coreutils\ntype NotebookMetadata = {\n\tkernelspec?: {\n\t\tname: string;\n\t\tdisplay_name: string;\n\t\t[propName: string]: unknown;\n\t};\n\tlanguage_info?: {\n\t\tname: string;\n\t\tcodemirror_mode?: string | {};\n\t\tfile_extension?: string;\n\t\tmimetype?: string;\n\t\tpygments_lexer?: string;\n\t\t[propName: string]: unknown;\n\t};\n\torig_nbformat?: number;\n\t[propName: string]: unknown;\n};\n\ntype OptionsWithCellContentMetadata = vscode.NotebookDocumentContentOptions & { cellContentMetadata: { attachments: boolean } };\n\n\nexport function activate(context: vscode.ExtensionContext, serializer: vscode.NotebookSerializer) {\n\tkeepNotebookModelStoreInSync(context);\n\tconst notebookSerializerOptions: OptionsWithCellContentMetadata = {\n\t\ttransientOutputs: false,\n\t\ttransientDocumentMetadata: {\n\t\t\tcells: true,\n\t\t\tindentAmount: true\n\t\t},\n\t\ttransientCellMetadata: {\n\t\t\tbreakpointMargin: true,\n\t\t\tid: false,\n\t\t\tmetadata: false,\n\t\t\tattachments: false\n\t\t},\n\t\tcellContentMetadata: {\n\t\t\tattachments: true\n\t\t}\n\t};\n\tcontext.subscriptions.push(vscode.workspace.registerNotebookSerializer('jupyter-notebook', serializer, notebookSerializerOptions));\n\n\tconst interactiveSerializeOptions: OptionsWithCellContentMetadata = {\n\t\ttransientOutputs: false,\n\t\ttransientCellMetadata: {\n\t\t\tbreakpointMargin: true,\n\t\t\tid: false,\n\t\t\tmetadata: false,\n\t\t\tattachments: false\n\t\t},\n\t\tcellContentMetadata: {\n\t\t\tattachments: true\n\t\t}\n\t};\n\tcontext.subscriptions.push(vscode.workspace.registerNotebookSerializer('interactive', serializer, interactiveSerializeOptions));\n\n\tvscode.languages.registerCodeLensProvider({ pattern: '**/*.ipynb' }, {\n\t\tprovideCodeLenses: (document) => {\n\t\t\tif (\n\t\t\t\tdocument.uri.scheme === 'vscode-notebook-cell' ||\n\t\t\t\tdocument.uri.scheme === 'vscode-notebook-cell-metadata' ||\n\t\t\t\tdocument.uri.scheme === 'vscode-notebook-cell-output'\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst codelens = new vscode.CodeLens(new vscode.Range(0, 0, 0, 0), { title: 'Open in Notebook Editor', command: 'ipynb.openIpynbInNotebookEditor', arguments: [document.uri] });\n\t\t\treturn [codelens];\n\t\t}\n\t});\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('ipynb.newUntitledIpynb', async () => {\n\t\tconst language = 'python';\n\t\tconst cell = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, '', language);\n\t\tconst data = new vscode.NotebookData([cell]);\n\t\tdata.metadata = {\n\t\t\tcells: [],\n\t\t\tmetadata: {},\n\t\t\tnbformat: defaultNotebookFormat.major,\n\t\t\tnbformat_minor: defaultNotebookFormat.minor,\n\t\t};\n\t\tconst doc = await vscode.workspace.openNotebookDocument('jupyter-notebook', data);\n\t\tawait vscode.window.showNotebookDocument(doc);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('ipynb.openIpynbInNotebookEditor', async (uri: vscode.Uri) => {\n\t\tif (vscode.window.activeTextEditor?.document.uri.toString() === uri.toString()) {\n\t\t\tawait vscode.commands.executeCommand('workbench.action.closeActiveEditor');\n\t\t}\n\t\tconst document = await vscode.workspace.openNotebookDocument(uri);\n\t\tawait vscode.window.showNotebookDocument(document);\n\t}));\n\n\tcontext.subscriptions.push(notebookImagePasteSetup());\n\n\tconst enabled = vscode.workspace.getConfiguration('ipynb').get('pasteImagesAsAttachments.enabled', false);\n\tif (enabled) {\n\t\tconst cleaner = new AttachmentCleaner();\n\t\tcontext.subscriptions.push(cleaner);\n\t}\n\n\treturn {\n\t\tget dropCustomMetadata() {\n\t\t\treturn true;\n\t\t},\n\t\texportNotebook: (notebook: vscode.NotebookData): Promise<string> => {\n\t\t\treturn Promise.resolve(serializeNotebookToString(notebook));\n\t\t},\n\t\tsetNotebookMetadata: async (resource: vscode.Uri, metadata: Partial<NotebookMetadata>): Promise<boolean> => {\n\t\t\tconst document = vscode.workspace.notebookDocuments.find(doc => doc.uri.toString() === resource.toString());\n\t\t\tif (!document) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst edit = new vscode.WorkspaceEdit();\n\t\t\tedit.set(resource, [vscode.NotebookEdit.updateNotebookMetadata({\n\t\t\t\t...document.metadata,\n\t\t\t\tmetadata: {\n\t\t\t\t\t...(document.metadata.metadata ?? {}),\n\t\t\t\t\t...metadata\n\t\t\t\t} satisfies NotebookMetadata,\n\t\t\t})]);\n\t\t\treturn vscode.workspace.applyEdit(edit);\n\t\t},\n\t};\n}\n\nexport function deactivate() { }\n"
  },
  {
    "path": "extensions/ipynb/src/notebookAttachmentCleaner.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { ATTACHMENT_CLEANUP_COMMANDID, JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR } from './constants';\nimport { deepClone, objectEquals, Delayer } from './helper';\n\ninterface AttachmentCleanRequest {\n\tnotebook: vscode.NotebookDocument;\n\tdocument: vscode.TextDocument;\n\tcell: vscode.NotebookCell;\n}\n\ninterface IAttachmentData {\n\t[key: string /** mimetype */]: string;/** b64-encoded */\n}\n\ninterface IAttachmentDiagnostic {\n\tname: string;\n\tranges: vscode.Range[];\n}\n\nexport enum DiagnosticCode {\n\tmissing_attachment = 'notebook.missing-attachment'\n}\n\nexport class AttachmentCleaner implements vscode.CodeActionProvider {\n\tprivate _attachmentCache:\n\t\tMap<string /** uri */, Map<string /** cell fragment*/, Map<string /** attachment filename */, IAttachmentData>>> = new Map();\n\n\tprivate _disposables: vscode.Disposable[];\n\tprivate _imageDiagnosticCollection: vscode.DiagnosticCollection;\n\tprivate readonly _delayer = new Delayer(750);\n\n\tconstructor() {\n\t\tthis._disposables = [];\n\t\tthis._imageDiagnosticCollection = vscode.languages.createDiagnosticCollection('Notebook Image Attachment');\n\t\tthis._disposables.push(this._imageDiagnosticCollection);\n\n\t\tthis._disposables.push(vscode.commands.registerCommand(ATTACHMENT_CLEANUP_COMMANDID, async (document: vscode.Uri, range: vscode.Range) => {\n\t\t\tconst workspaceEdit = new vscode.WorkspaceEdit();\n\t\t\tworkspaceEdit.delete(document, range);\n\t\t\tawait vscode.workspace.applyEdit(workspaceEdit);\n\t\t}));\n\n\t\tthis._disposables.push(vscode.languages.registerCodeActionsProvider(JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR, this, {\n\t\t\tprovidedCodeActionKinds: [\n\t\t\t\tvscode.CodeActionKind.QuickFix\n\t\t\t],\n\t\t}));\n\n\t\tthis._disposables.push(vscode.workspace.onDidChangeNotebookDocument(e => {\n\t\t\tthis._delayer.trigger(() => {\n\n\t\t\t\te.cellChanges.forEach(change => {\n\t\t\t\t\tif (!change.document) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (change.cell.kind !== vscode.NotebookCellKind.Markup) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst metadataEdit = this.cleanNotebookAttachments({\n\t\t\t\t\t\tnotebook: e.notebook,\n\t\t\t\t\t\tcell: change.cell,\n\t\t\t\t\t\tdocument: change.document\n\t\t\t\t\t});\n\t\t\t\t\tif (metadataEdit) {\n\t\t\t\t\t\tconst workspaceEdit = new vscode.WorkspaceEdit();\n\t\t\t\t\t\tworkspaceEdit.set(e.notebook.uri, [metadataEdit]);\n\t\t\t\t\t\tvscode.workspace.applyEdit(workspaceEdit);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}));\n\n\n\t\tthis._disposables.push(vscode.workspace.onWillSaveNotebookDocument(e => {\n\t\t\tif (e.reason === vscode.TextDocumentSaveReason.Manual) {\n\t\t\t\tthis._delayer.dispose();\n\t\t\t\tif (e.notebook.getCells().length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst notebookEdits: vscode.NotebookEdit[] = [];\n\t\t\t\tfor (const cell of e.notebook.getCells()) {\n\t\t\t\t\tif (cell.kind !== vscode.NotebookCellKind.Markup) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst metadataEdit = this.cleanNotebookAttachments({\n\t\t\t\t\t\tnotebook: e.notebook,\n\t\t\t\t\t\tcell: cell,\n\t\t\t\t\t\tdocument: cell.document\n\t\t\t\t\t});\n\n\t\t\t\t\tif (metadataEdit) {\n\t\t\t\t\t\tnotebookEdits.push(metadataEdit);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!notebookEdits.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst workspaceEdit = new vscode.WorkspaceEdit();\n\t\t\t\tworkspaceEdit.set(e.notebook.uri, notebookEdits);\n\t\t\t\te.waitUntil(Promise.resolve(workspaceEdit));\n\t\t\t}\n\t\t}));\n\n\t\tthis._disposables.push(vscode.workspace.onDidCloseNotebookDocument(e => {\n\t\t\tthis._attachmentCache.delete(e.uri.toString());\n\t\t}));\n\n\t\tthis._disposables.push(vscode.workspace.onWillRenameFiles(e => {\n\t\t\tconst re = /\\.ipynb$/;\n\t\t\tfor (const file of e.files) {\n\t\t\t\tif (!re.exec(file.oldUri.toString())) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// transfer cache to new uri\n\t\t\t\tif (this._attachmentCache.has(file.oldUri.toString())) {\n\t\t\t\t\tthis._attachmentCache.set(file.newUri.toString(), this._attachmentCache.get(file.oldUri.toString())!);\n\t\t\t\t\tthis._attachmentCache.delete(file.oldUri.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._disposables.push(vscode.workspace.onDidOpenTextDocument(e => {\n\t\t\tthis.analyzeMissingAttachments(e);\n\t\t}));\n\n\t\tthis._disposables.push(vscode.workspace.onDidCloseTextDocument(e => {\n\t\t\tthis.analyzeMissingAttachments(e);\n\t\t}));\n\n\t\tvscode.workspace.textDocuments.forEach(document => {\n\t\t\tthis.analyzeMissingAttachments(document);\n\t\t});\n\t}\n\n\tprovideCodeActions(document: vscode.TextDocument, _range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, _token: vscode.CancellationToken): vscode.ProviderResult<(vscode.CodeAction | vscode.Command)[]> {\n\t\tconst fixes: vscode.CodeAction[] = [];\n\n\t\tfor (const diagnostic of context.diagnostics) {\n\t\t\tswitch (diagnostic.code) {\n\t\t\t\tcase DiagnosticCode.missing_attachment:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst fix = new vscode.CodeAction(\n\t\t\t\t\t\t\t'Remove invalid image attachment reference',\n\t\t\t\t\t\t\tvscode.CodeActionKind.QuickFix);\n\n\t\t\t\t\t\tfix.command = {\n\t\t\t\t\t\t\tcommand: ATTACHMENT_CLEANUP_COMMANDID,\n\t\t\t\t\t\t\ttitle: 'Remove invalid image attachment reference',\n\t\t\t\t\t\t\targuments: [document.uri, diagnostic.range],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfixes.push(fix);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn fixes;\n\t}\n\n\t/**\n\t * take in a NotebookDocumentChangeEvent, and clean the attachment data for the cell(s) that have had their markdown source code changed\n\t * @param e NotebookDocumentChangeEvent from the onDidChangeNotebookDocument listener\n\t * @returns vscode.NotebookEdit, the metadata alteration performed on the json behind the ipynb\n\t */\n\tprivate cleanNotebookAttachments(e: AttachmentCleanRequest): vscode.NotebookEdit | undefined {\n\n\t\tif (e.notebook.isClosed) {\n\t\t\treturn;\n\t\t}\n\t\tconst document = e.document;\n\t\tconst cell = e.cell;\n\n\t\tconst markdownAttachmentsInUse: { [key: string /** filename */]: IAttachmentData } = {};\n\t\tconst cellFragment = cell.document.uri.fragment;\n\t\tconst notebookUri = e.notebook.uri.toString();\n\t\tconst diagnostics: IAttachmentDiagnostic[] = [];\n\t\tconst markdownAttachmentsRefedInCell = this.getAttachmentNames(document);\n\n\t\tif (markdownAttachmentsRefedInCell.size === 0) {\n\t\t\t// no attachments used in this cell, cache all images from cell metadata\n\t\t\tthis.saveAllAttachmentsToCache(cell.metadata, notebookUri, cellFragment);\n\t\t}\n\n\t\tif (this.checkMetadataHasAttachmentsField(cell.metadata)) {\n\t\t\t// the cell metadata contains attachments, check if any are used in the markdown source\n\n\t\t\tfor (const [currFilename, attachment] of Object.entries(cell.metadata.attachments)) {\n\t\t\t\t// means markdown reference is present in the metadata, rendering will work properly\n\t\t\t\t// therefore, we don't need to check it in the next loop either\n\t\t\t\tif (markdownAttachmentsRefedInCell.has(currFilename)) {\n\t\t\t\t\t// attachment reference is present in the markdown source, no need to cache it\n\t\t\t\t\tmarkdownAttachmentsRefedInCell.get(currFilename)!.valid = true;\n\t\t\t\t\tmarkdownAttachmentsInUse[currFilename] = attachment as IAttachmentData;\n\t\t\t\t} else {\n\t\t\t\t\t// attachment reference is not present in the markdown source, cache it\n\t\t\t\t\tthis.saveAttachmentToCache(notebookUri, cellFragment, currFilename, cell.metadata);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const [currFilename, attachment] of markdownAttachmentsRefedInCell) {\n\t\t\tif (attachment.valid) {\n\t\t\t\t// attachment reference is present in both the markdown source and the metadata, no op\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// if image is referenced in markdown source but not in metadata -> check if we have image in the cache\n\t\t\tconst cachedImageAttachment = this._attachmentCache.get(notebookUri)?.get(cellFragment)?.get(currFilename);\n\t\t\tif (cachedImageAttachment) {\n\t\t\t\tmarkdownAttachmentsInUse[currFilename] = cachedImageAttachment;\n\t\t\t\tthis._attachmentCache.get(notebookUri)?.get(cellFragment)?.delete(currFilename);\n\t\t\t} else {\n\t\t\t\t// if image is not in the cache, show warning\n\t\t\t\tdiagnostics.push({ name: currFilename, ranges: attachment.ranges });\n\t\t\t}\n\t\t}\n\n\t\tthis.updateDiagnostics(cell.document.uri, diagnostics);\n\n\t\tif (cell.index > -1 && !objectEquals(markdownAttachmentsInUse || {}, cell.metadata.attachments || {})) {\n\t\t\tconst updateMetadata: { [key: string]: any } = deepClone(cell.metadata);\n\t\t\tif (Object.keys(markdownAttachmentsInUse).length === 0) {\n\t\t\t\tupdateMetadata.attachments = undefined;\n\t\t\t} else {\n\t\t\t\tupdateMetadata.attachments = markdownAttachmentsInUse;\n\t\t\t}\n\t\t\tconst metadataEdit = vscode.NotebookEdit.updateCellMetadata(cell.index, updateMetadata);\n\t\t\treturn metadataEdit;\n\t\t}\n\t\treturn;\n\t}\n\n\tprivate analyzeMissingAttachments(document: vscode.TextDocument): void {\n\t\tif (document.uri.scheme !== 'vscode-notebook-cell') {\n\t\t\t// not notebook\n\t\t\treturn;\n\t\t}\n\n\t\tif (document.isClosed) {\n\t\t\tthis.updateDiagnostics(document.uri, []);\n\t\t\treturn;\n\t\t}\n\n\t\tlet notebook: vscode.NotebookDocument | undefined;\n\t\tlet activeCell: vscode.NotebookCell | undefined;\n\t\tfor (const notebookDocument of vscode.workspace.notebookDocuments) {\n\t\t\tconst cell = notebookDocument.getCells().find(cell => cell.document === document);\n\t\t\tif (cell) {\n\t\t\t\tnotebook = notebookDocument;\n\t\t\t\tactiveCell = cell;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!notebook || !activeCell) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst diagnostics: IAttachmentDiagnostic[] = [];\n\t\tconst markdownAttachments = this.getAttachmentNames(document);\n\t\tif (this.checkMetadataHasAttachmentsField(activeCell.metadata)) {\n\t\t\tfor (const [currFilename, attachment] of markdownAttachments) {\n\t\t\t\tif (!activeCell.metadata.attachments[currFilename]) {\n\t\t\t\t\t// no attachment reference in the metadata\n\t\t\t\t\tdiagnostics.push({ name: currFilename, ranges: attachment.ranges });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.updateDiagnostics(activeCell.document.uri, diagnostics);\n\t}\n\n\tprivate updateDiagnostics(cellUri: vscode.Uri, diagnostics: IAttachmentDiagnostic[]) {\n\t\tconst vscodeDiagnostics: vscode.Diagnostic[] = [];\n\t\tfor (const currDiagnostic of diagnostics) {\n\t\t\tcurrDiagnostic.ranges.forEach(range => {\n\t\t\t\tconst diagnostic = new vscode.Diagnostic(range, `The image named: '${currDiagnostic.name}' is not present in cell metadata.`, vscode.DiagnosticSeverity.Warning);\n\t\t\t\tdiagnostic.code = DiagnosticCode.missing_attachment;\n\t\t\t\tvscodeDiagnostics.push(diagnostic);\n\t\t\t});\n\t\t}\n\n\t\tthis._imageDiagnosticCollection.set(cellUri, vscodeDiagnostics);\n\t}\n\n\t/**\n\t * remove attachment from metadata and add it to the cache\n\t * @param notebookUri uri of the notebook currently being edited\n\t * @param cellFragment fragment of the cell currently being edited\n\t * @param currFilename filename of the image being pulled into the cell\n\t * @param metadata metadata of the cell currently being edited\n\t */\n\tprivate saveAttachmentToCache(notebookUri: string, cellFragment: string, currFilename: string, metadata: { [key: string]: any }): void {\n\t\tconst documentCache = this._attachmentCache.get(notebookUri);\n\t\tif (!documentCache) {\n\t\t\t// no cache for this notebook yet\n\t\t\tconst cellCache = new Map<string, IAttachmentData>();\n\t\t\tcellCache.set(currFilename, this.getMetadataAttachment(metadata, currFilename));\n\t\t\tconst documentCache = new Map();\n\t\t\tdocumentCache.set(cellFragment, cellCache);\n\t\t\tthis._attachmentCache.set(notebookUri, documentCache);\n\t\t} else if (!documentCache.has(cellFragment)) {\n\t\t\t// no cache for this cell yet\n\t\t\tconst cellCache = new Map<string, IAttachmentData>();\n\t\t\tcellCache.set(currFilename, this.getMetadataAttachment(metadata, currFilename));\n\t\t\tdocumentCache.set(cellFragment, cellCache);\n\t\t} else {\n\t\t\t// cache for this cell already exists\n\t\t\t// add to cell cache\n\t\t\tdocumentCache.get(cellFragment)?.set(currFilename, this.getMetadataAttachment(metadata, currFilename));\n\t\t}\n\t}\n\n\t/**\n\t * get an attachment entry from the given metadata\n\t * @param metadata metadata to extract image data from\n\t * @param currFilename filename of image being extracted\n\t * @returns\n\t */\n\tprivate getMetadataAttachment(metadata: { [key: string]: any }, currFilename: string): { [key: string]: any } {\n\t\treturn metadata.attachments[currFilename];\n\t}\n\n\t/**\n\t * returns a boolean that represents if there are any images in the attachment field of a cell's metadata\n\t * @param metadata metadata of cell\n\t * @returns boolean representing the presence of any attachments\n\t */\n\tprivate checkMetadataHasAttachmentsField(metadata: { [key: string]: unknown }): metadata is { readonly attachments: Record<string, unknown> } {\n\t\treturn !!metadata.attachments && typeof metadata.attachments === 'object';\n\t}\n\n\t/**\n\t * given metadata from a cell, cache every image (used in cases with no image links in markdown source)\n\t * @param metadata metadata for a cell with no images in markdown source\n\t * @param notebookUri uri for the notebook being edited\n\t * @param cellFragment fragment of cell being edited\n\t */\n\tprivate saveAllAttachmentsToCache(metadata: { [key: string]: unknown }, notebookUri: string, cellFragment: string): void {\n\t\tconst documentCache = this._attachmentCache.get(notebookUri) ?? new Map();\n\t\tthis._attachmentCache.set(notebookUri, documentCache);\n\t\tconst cellCache = documentCache.get(cellFragment) ?? new Map<string, IAttachmentData>();\n\t\tdocumentCache.set(cellFragment, cellCache);\n\n\t\tif (metadata.attachments && typeof metadata.attachments === 'object') {\n\t\t\tfor (const [currFilename, attachment] of Object.entries(metadata.attachments)) {\n\t\t\t\tcellCache.set(currFilename, attachment);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * pass in all of the markdown source code, and get a dictionary of all images referenced in the markdown. keys are image filenames, values are render state\n\t * @param document the text document for the cell, formatted as a string\n\t */\n\tprivate getAttachmentNames(document: vscode.TextDocument) {\n\t\tconst source = document.getText();\n\t\tconst filenames: Map<string, { valid: boolean; ranges: vscode.Range[] }> = new Map();\n\t\tconst re = /!\\[.*?\\]\\(<?attachment:(?<filename>.*?)>?\\)/gm;\n\n\t\tlet match;\n\t\twhile ((match = re.exec(source))) {\n\t\t\tif (match.groups?.filename) {\n\t\t\t\tconst index = match.index;\n\t\t\t\tconst length = match[0].length;\n\t\t\t\tconst startPosition = document.positionAt(index);\n\t\t\t\tconst endPosition = document.positionAt(index + length);\n\t\t\t\tconst range = new vscode.Range(startPosition, endPosition);\n\t\t\t\tconst filename = filenames.get(match.groups.filename) ?? { valid: false, ranges: [] };\n\t\t\t\tfilenames.set(match.groups.filename, filename);\n\t\t\t\tfilename.ranges.push(range);\n\t\t\t}\n\t\t}\n\t\treturn filenames;\n\t}\n\n\tdispose() {\n\t\tthis._disposables.forEach(d => d.dispose());\n\t\tthis._delayer.dispose();\n\t}\n}\n\n"
  },
  {
    "path": "extensions/ipynb/src/notebookImagePaste.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR } from './constants';\nimport { basename, extname } from 'path';\n\nenum MimeType {\n\tbmp = 'image/bmp',\n\tgif = 'image/gif',\n\tico = 'image/ico',\n\tjpeg = 'image/jpeg',\n\tpng = 'image/png',\n\ttiff = 'image/tiff',\n\twebp = 'image/webp',\n\tplain = 'text/plain',\n\turiList = 'text/uri-list',\n}\n\nconst imageMimeTypes: ReadonlySet<string> = new Set<string>([\n\tMimeType.bmp,\n\tMimeType.gif,\n\tMimeType.ico,\n\tMimeType.jpeg,\n\tMimeType.png,\n\tMimeType.tiff,\n\tMimeType.webp,\n]);\n\nconst imageExtToMime: ReadonlyMap<string, string> = new Map<string, string>([\n\t['.bmp', MimeType.bmp],\n\t['.gif', MimeType.gif],\n\t['.ico', MimeType.ico],\n\t['.jpe', MimeType.jpeg],\n\t['.jpeg', MimeType.jpeg],\n\t['.jpg', MimeType.jpeg],\n\t['.png', MimeType.png],\n\t['.tif', MimeType.tiff],\n\t['.tiff', MimeType.tiff],\n\t['.webp', MimeType.webp],\n]);\n\nfunction getImageMimeType(uri: vscode.Uri): string | undefined {\n\treturn imageExtToMime.get(extname(uri.fsPath).toLowerCase());\n}\n\nclass DropOrPasteEditProvider implements vscode.DocumentPasteEditProvider, vscode.DocumentDropEditProvider {\n\n\tpublic static readonly kind = vscode.DocumentDropOrPasteEditKind.Empty.append('markdown', 'link', 'image', 'attachment');\n\n\tasync provideDocumentPasteEdits(\n\t\tdocument: vscode.TextDocument,\n\t\t_ranges: readonly vscode.Range[],\n\t\tdataTransfer: vscode.DataTransfer,\n\t\t_context: vscode.DocumentPasteEditContext,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<vscode.DocumentPasteEdit[] | undefined> {\n\t\tconst enabled = vscode.workspace.getConfiguration('ipynb', document).get('pasteImagesAsAttachments.enabled', true);\n\t\tif (!enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst insert = await this.createInsertImageAttachmentEdit(document, dataTransfer, token);\n\t\tif (!insert) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pasteEdit = new vscode.DocumentPasteEdit(insert.insertText, vscode.l10n.t('Insert Image as Attachment'), DropOrPasteEditProvider.kind);\n\t\tpasteEdit.yieldTo = [vscode.DocumentDropOrPasteEditKind.Text];\n\t\tpasteEdit.additionalEdit = insert.additionalEdit;\n\t\treturn [pasteEdit];\n\t}\n\n\tasync provideDocumentDropEdits(\n\t\tdocument: vscode.TextDocument,\n\t\t_position: vscode.Position,\n\t\tdataTransfer: vscode.DataTransfer,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<vscode.DocumentDropEdit | undefined> {\n\t\tconst insert = await this.createInsertImageAttachmentEdit(document, dataTransfer, token);\n\t\tif (!insert) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst dropEdit = new vscode.DocumentDropEdit(insert.insertText);\n\t\tdropEdit.yieldTo = [vscode.DocumentDropOrPasteEditKind.Text];\n\t\tdropEdit.additionalEdit = insert.additionalEdit;\n\t\tdropEdit.title = vscode.l10n.t('Insert Image as Attachment');\n\t\treturn dropEdit;\n\t}\n\n\tprivate async createInsertImageAttachmentEdit(\n\t\tdocument: vscode.TextDocument,\n\t\tdataTransfer: vscode.DataTransfer,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<{ insertText: vscode.SnippetString; additionalEdit: vscode.WorkspaceEdit } | undefined> {\n\t\tconst imageData = await getDroppedImageData(dataTransfer, token);\n\t\tif (!imageData.length || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentCell = getCellFromCellDocument(document);\n\t\tif (!currentCell) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// create updated metadata for cell (prep for WorkspaceEdit)\n\t\tconst newAttachment = buildAttachment(currentCell, imageData);\n\t\tif (!newAttachment) {\n\t\t\treturn;\n\t\t}\n\n\t\t// build edits\n\t\tconst additionalEdit = new vscode.WorkspaceEdit();\n\t\tconst nbEdit = vscode.NotebookEdit.updateCellMetadata(currentCell.index, newAttachment.metadata);\n\t\tconst notebookUri = currentCell.notebook.uri;\n\t\tadditionalEdit.set(notebookUri, [nbEdit]);\n\n\t\t// create a snippet for paste\n\t\tconst insertText = new vscode.SnippetString();\n\t\tnewAttachment.filenames.forEach((filename, i) => {\n\t\t\tinsertText.appendText('![');\n\t\t\tinsertText.appendPlaceholder(`${filename}`);\n\t\t\tinsertText.appendText(`](${/\\s/.test(filename) ? `<attachment:${filename}>` : `attachment:${filename}`})`);\n\t\t\tif (i !== newAttachment.filenames.length - 1) {\n\t\t\t\tinsertText.appendText(' ');\n\t\t\t}\n\t\t});\n\n\t\treturn { insertText, additionalEdit };\n\t}\n}\n\nasync function getDroppedImageData(\n\tdataTransfer: vscode.DataTransfer,\n\ttoken: vscode.CancellationToken,\n): Promise<readonly ImageAttachmentData[]> {\n\n\t// Prefer using image data in the clipboard\n\tconst files = coalesce(await Promise.all(Array.from(dataTransfer, async ([mimeType, item]): Promise<ImageAttachmentData | undefined> => {\n\t\tif (!imageMimeTypes.has(mimeType)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = item.asFile();\n\t\tif (!file) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst data = await file.data();\n\t\treturn { fileName: file.name, mimeType, data };\n\t})));\n\tif (files.length) {\n\t\treturn files;\n\t}\n\n\t// Then fallback to image files in the uri-list\n\tconst urlList = await dataTransfer.get('text/uri-list')?.asString();\n\tif (token.isCancellationRequested) {\n\t\treturn [];\n\t}\n\n\tif (urlList) {\n\t\tconst uris: vscode.Uri[] = [];\n\t\tfor (const resource of urlList.split(/\\r?\\n/g)) {\n\t\t\ttry {\n\t\t\t\turis.push(vscode.Uri.parse(resource));\n\t\t\t} catch {\n\t\t\t\t// noop\n\t\t\t}\n\t\t}\n\n\t\tconst entries = await Promise.all(uris.map(async (uri) => {\n\t\t\tconst mimeType = getImageMimeType(uri);\n\t\t\tif (!mimeType) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst data = await vscode.workspace.fs.readFile(uri);\n\t\t\treturn { fileName: basename(uri.fsPath), mimeType, data };\n\t\t}));\n\n\t\treturn coalesce(entries);\n\t}\n\n\treturn [];\n}\n\nfunction coalesce<T>(array: ReadonlyArray<T | undefined | null>): T[] {\n\treturn <T[]>array.filter(e => !!e);\n}\n\nfunction getCellFromCellDocument(cellDocument: vscode.TextDocument): vscode.NotebookCell | undefined {\n\tfor (const notebook of vscode.workspace.notebookDocuments) {\n\t\tif (notebook.uri.path === cellDocument.uri.path) {\n\t\t\tfor (const cell of notebook.getCells()) {\n\t\t\t\tif (cell.document === cellDocument) {\n\t\t\t\t\treturn cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n *  Taken from https://github.com/microsoft/vscode/blob/743b016722db90df977feecde0a4b3b4f58c2a4c/src/vs/base/common/buffer.ts#L350-L387\n */\nfunction encodeBase64(buffer: Uint8Array, padded = true, urlSafe = false) {\n\tconst base64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\tconst base64UrlSafeAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n\tconst dictionary = urlSafe ? base64UrlSafeAlphabet : base64Alphabet;\n\tlet output = '';\n\n\tconst remainder = buffer.byteLength % 3;\n\n\tlet i = 0;\n\tfor (; i < buffer.byteLength - remainder; i += 3) {\n\t\tconst a = buffer[i + 0];\n\t\tconst b = buffer[i + 1];\n\t\tconst c = buffer[i + 2];\n\n\t\toutput += dictionary[a >>> 2];\n\t\toutput += dictionary[(a << 4 | b >>> 4) & 0b111111];\n\t\toutput += dictionary[(b << 2 | c >>> 6) & 0b111111];\n\t\toutput += dictionary[c & 0b111111];\n\t}\n\n\tif (remainder === 1) {\n\t\tconst a = buffer[i + 0];\n\t\toutput += dictionary[a >>> 2];\n\t\toutput += dictionary[(a << 4) & 0b111111];\n\t\tif (padded) { output += '=='; }\n\t} else if (remainder === 2) {\n\t\tconst a = buffer[i + 0];\n\t\tconst b = buffer[i + 1];\n\t\toutput += dictionary[a >>> 2];\n\t\toutput += dictionary[(a << 4 | b >>> 4) & 0b111111];\n\t\toutput += dictionary[(b << 2) & 0b111111];\n\t\tif (padded) { output += '='; }\n\t}\n\n\treturn output;\n}\n\n\ninterface ImageAttachmentData {\n\treadonly fileName: string;\n\treadonly data: Uint8Array;\n\treadonly mimeType: string;\n}\n\nfunction buildAttachment(\n\tcell: vscode.NotebookCell,\n\tattachments: readonly ImageAttachmentData[],\n): { metadata: { [key: string]: any }; filenames: string[] } | undefined {\n\tconst cellMetadata = { ...cell.metadata };\n\tconst tempFilenames: string[] = [];\n\tif (!attachments.length) {\n\t\treturn undefined;\n\t}\n\n\tif (!cellMetadata.attachments) {\n\t\tcellMetadata.attachments = {};\n\t}\n\n\tfor (const attachment of attachments) {\n\t\tconst b64 = encodeBase64(attachment.data);\n\n\t\tconst fileExt = extname(attachment.fileName);\n\t\tconst filenameWithoutExt = basename(attachment.fileName, fileExt);\n\n\t\tlet tempFilename = filenameWithoutExt + fileExt;\n\t\tfor (let appendValue = 2; tempFilename in cellMetadata.attachments; appendValue++) {\n\t\t\tconst objEntries = Object.entries(cellMetadata.attachments[tempFilename]);\n\t\t\tif (objEntries.length) { // check that mime:b64 are present\n\t\t\t\tconst [mime, attachmentb64] = objEntries[0];\n\t\t\t\tif (mime === attachment.mimeType && attachmentb64 === b64) { // checking if filename can be reused, based on comparison of image data\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\ttempFilename = filenameWithoutExt.concat(`-${appendValue}`) + fileExt;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttempFilenames.push(tempFilename);\n\t\tcellMetadata.attachments[tempFilename] = { [attachment.mimeType]: b64 };\n\t}\n\n\treturn {\n\t\tmetadata: cellMetadata,\n\t\tfilenames: tempFilenames,\n\t};\n}\n\nexport function notebookImagePasteSetup(): vscode.Disposable {\n\tconst provider = new DropOrPasteEditProvider();\n\treturn vscode.Disposable.from(\n\t\tvscode.languages.registerDocumentPasteEditProvider(JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR, provider, {\n\t\t\tprovidedPasteEditKinds: [DropOrPasteEditProvider.kind],\n\t\t\tpasteMimeTypes: [\n\t\t\t\tMimeType.png,\n\t\t\t\tMimeType.uriList,\n\t\t\t],\n\t\t}),\n\t\tvscode.languages.registerDocumentDropEditProvider(JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR, provider, {\n\t\t\tprovidedDropEditKinds: [DropOrPasteEditProvider.kind],\n\t\t\tdropMimeTypes: [\n\t\t\t\t...Object.values(imageExtToMime),\n\t\t\t\tMimeType.uriList,\n\t\t\t],\n\t\t})\n\t);\n}\n"
  },
  {
    "path": "extensions/ipynb/src/notebookModelStoreSync.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, ExtensionContext, NotebookCellKind, NotebookDocument, NotebookDocumentChangeEvent, NotebookEdit, workspace, WorkspaceEdit, type NotebookCell, type NotebookDocumentWillSaveEvent } from 'vscode';\nimport { getCellMetadata, getVSCodeCellLanguageId, removeVSCodeCellLanguageId, setVSCodeCellLanguageId, sortObjectPropertiesRecursively, getNotebookMetadata } from './serializers';\nimport { CellMetadata } from './common';\nimport type * as nbformat from '@jupyterlab/nbformat';\nimport { generateUuid } from './helper';\n\nconst noop = () => {\n\t//\n};\n\n/**\n * Code here is used to ensure the Notebook Model is in sync the ipynb JSON file.\n * E.g. assume you add a new cell, this new cell will not have any metadata at all.\n * However when we save the ipynb, the metadata will be an empty object `{}`.\n * Now thats completely different from the metadata os being `empty/undefined` in the model.\n * As a result, when looking at things like diff view or accessing metadata, we'll see differences.\n*\n* This code ensures that the model is in sync with the ipynb file.\n*/\nexport const pendingNotebookCellModelUpdates = new WeakMap<NotebookDocument, Set<Thenable<void>>>();\nexport function activate(context: ExtensionContext) {\n\tworkspace.onDidChangeNotebookDocument(onDidChangeNotebookCells, undefined, context.subscriptions);\n\tworkspace.onWillSaveNotebookDocument(waitForPendingModelUpdates, undefined, context.subscriptions);\n}\n\ntype NotebookDocumentChangeEventEx = Omit<NotebookDocumentChangeEvent, 'metadata'>;\nlet mergedEvents: NotebookDocumentChangeEventEx | undefined;\nlet timer: NodeJS.Timeout;\n\nfunction triggerDebouncedNotebookDocumentChangeEvent() {\n\tif (timer) {\n\t\tclearTimeout(timer);\n\t}\n\tif (!mergedEvents) {\n\t\treturn;\n\t}\n\tconst args = mergedEvents;\n\tmergedEvents = undefined;\n\tonDidChangeNotebookCells(args);\n}\n\nexport function debounceOnDidChangeNotebookDocument() {\n\tconst disposable = workspace.onDidChangeNotebookDocument(e => {\n\t\tif (!isSupportedNotebook(e.notebook)) {\n\t\t\treturn;\n\t\t}\n\t\tif (!mergedEvents) {\n\t\t\tmergedEvents = e;\n\t\t} else if (mergedEvents.notebook === e.notebook) {\n\t\t\t// Same notebook, we can merge the updates.\n\t\t\tmergedEvents = {\n\t\t\t\tcellChanges: e.cellChanges.concat(mergedEvents.cellChanges),\n\t\t\t\tcontentChanges: e.contentChanges.concat(mergedEvents.contentChanges),\n\t\t\t\tnotebook: e.notebook\n\t\t\t};\n\t\t} else {\n\t\t\t// Different notebooks, we cannot merge the updates.\n\t\t\t// Hence we need to process the previous notebook and start a new timer for the new notebook.\n\t\t\ttriggerDebouncedNotebookDocumentChangeEvent();\n\t\t\t// Start a new timer for the new notebook.\n\t\t\tmergedEvents = e;\n\t\t}\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t\ttimer = setTimeout(triggerDebouncedNotebookDocumentChangeEvent, 200);\n\t});\n\n\n\treturn Disposable.from(disposable, new Disposable(() => {\n\t\tclearTimeout(timer);\n\t}));\n}\n\nfunction isSupportedNotebook(notebook: NotebookDocument) {\n\treturn notebook.notebookType === 'jupyter-notebook';\n}\n\nfunction waitForPendingModelUpdates(e: NotebookDocumentWillSaveEvent) {\n\tif (!isSupportedNotebook(e.notebook)) {\n\t\treturn;\n\t}\n\n\ttriggerDebouncedNotebookDocumentChangeEvent();\n\tconst promises = pendingNotebookCellModelUpdates.get(e.notebook);\n\tif (!promises) {\n\t\treturn;\n\t}\n\te.waitUntil(Promise.all(promises));\n}\n\nfunction cleanup(notebook: NotebookDocument, promise: PromiseLike<void>) {\n\tconst pendingUpdates = pendingNotebookCellModelUpdates.get(notebook);\n\tif (pendingUpdates) {\n\t\tpendingUpdates.delete(promise);\n\t\tif (!pendingUpdates.size) {\n\t\t\tpendingNotebookCellModelUpdates.delete(notebook);\n\t\t}\n\t}\n}\nfunction trackAndUpdateCellMetadata(notebook: NotebookDocument, updates: { cell: NotebookCell; metadata: CellMetadata & { vscode?: { languageId: string } } }[]) {\n\tconst pendingUpdates = pendingNotebookCellModelUpdates.get(notebook) ?? new Set<Thenable<void>>();\n\tpendingNotebookCellModelUpdates.set(notebook, pendingUpdates);\n\tconst edit = new WorkspaceEdit();\n\tupdates.forEach(({ cell, metadata }) => {\n\t\tconst newMetadata = { ...cell.metadata, ...metadata };\n\t\tif (!metadata.execution_count && newMetadata.execution_count) {\n\t\t\tnewMetadata.execution_count = null;\n\t\t}\n\t\tif (!metadata.attachments && newMetadata.attachments) {\n\t\t\tdelete newMetadata.attachments;\n\t\t}\n\t\tedit.set(cell.notebook.uri, [NotebookEdit.updateCellMetadata(cell.index, sortObjectPropertiesRecursively(newMetadata))]);\n\t});\n\tconst promise = workspace.applyEdit(edit).then(noop, noop);\n\tpendingUpdates.add(promise);\n\tconst clean = () => cleanup(notebook, promise);\n\tpromise.then(clean, clean);\n}\n\nconst pendingCellUpdates = new WeakSet<NotebookCell>();\nfunction onDidChangeNotebookCells(e: NotebookDocumentChangeEventEx) {\n\tif (!isSupportedNotebook(e.notebook)) {\n\t\treturn;\n\t}\n\n\tconst notebook = e.notebook;\n\tconst notebookMetadata = getNotebookMetadata(e.notebook);\n\n\t// use the preferred language from document metadata or the first cell language as the notebook preferred cell language\n\tconst preferredCellLanguage = notebookMetadata.metadata?.language_info?.name;\n\tconst updates: { cell: NotebookCell; metadata: CellMetadata & { vscode?: { languageId: string } } }[] = [];\n\t// When we change the language of a cell,\n\t// Ensure the metadata in the notebook cell has been updated as well,\n\t// Else model will be out of sync with ipynb https://github.com/microsoft/vscode/issues/207968#issuecomment-2002858596\n\te.cellChanges.forEach(e => {\n\t\tif (!preferredCellLanguage || e.cell.kind !== NotebookCellKind.Code) {\n\t\t\treturn;\n\t\t}\n\t\tconst currentMetadata = e.metadata ? getCellMetadata({ metadata: e.metadata }) : getCellMetadata({ cell: e.cell });\n\t\tconst languageIdInMetadata = getVSCodeCellLanguageId(currentMetadata);\n\t\tconst metadata: CellMetadata = JSON.parse(JSON.stringify(currentMetadata));\n\t\tmetadata.metadata = metadata.metadata || {};\n\t\tlet metadataUpdated = false;\n\t\tif (e.executionSummary?.executionOrder && typeof e.executionSummary.success === 'boolean' && currentMetadata.execution_count !== e.executionSummary?.executionOrder) {\n\t\t\tmetadata.execution_count = e.executionSummary.executionOrder;\n\t\t\tmetadataUpdated = true;\n\t\t} else if (!e.executionSummary && !e.metadata && e.outputs?.length === 0 && currentMetadata.execution_count) {\n\t\t\t// Clear all (user hit clear all).\n\t\t\t// NOTE: At this point we're updating the `execution_count` in metadata to `null`.\n\t\t\t// Thus this is a change in metadata, which we will need to update in the model.\n\t\t\tmetadata.execution_count = null;\n\t\t\tmetadataUpdated = true;\n\t\t\t// Note: We will get another event for this, see below for the check.\n\t\t\t// track the fact that we're expecting an update for this cell.\n\t\t\tpendingCellUpdates.add(e.cell);\n\t\t} else if ((!e.executionSummary || (!e.executionSummary?.executionOrder && !e.executionSummary?.success && !e.executionSummary?.timing))\n\t\t\t&& !e.metadata && !e.outputs && currentMetadata.execution_count && pendingCellUpdates.has(e.cell)) {\n\t\t\t// This is a result of the cell being cleared (i.e. we perfomed an update request and this is now the update event).\n\t\t\tmetadata.execution_count = null;\n\t\t\tmetadataUpdated = true;\n\t\t\tpendingCellUpdates.delete(e.cell);\n\t\t} else if (!e.executionSummary?.executionOrder && !e.executionSummary?.success && !e.executionSummary?.timing\n\t\t\t&& !e.metadata && !e.outputs && currentMetadata.execution_count && !pendingCellUpdates.has(e.cell)) {\n\t\t\t// This is a result of the cell without outupts but has execution count being cleared\n\t\t\t// Create two cells, one that produces output and one that doesn't. Run both and then clear the output or all cells.\n\t\t\t// This condition will be satisfied for first cell without outputs.\n\t\t\tmetadata.execution_count = null;\n\t\t\tmetadataUpdated = true;\n\t\t}\n\n\t\tif (e.document?.languageId && e.document?.languageId !== preferredCellLanguage && e.document?.languageId !== languageIdInMetadata) {\n\t\t\tsetVSCodeCellLanguageId(metadata, e.document.languageId);\n\t\t\tmetadataUpdated = true;\n\t\t} else if (e.document?.languageId && e.document.languageId === preferredCellLanguage && languageIdInMetadata) {\n\t\t\tremoveVSCodeCellLanguageId(metadata);\n\t\t\tmetadataUpdated = true;\n\t\t} else if (e.document?.languageId && e.document.languageId === preferredCellLanguage && e.document.languageId === languageIdInMetadata) {\n\t\t\tremoveVSCodeCellLanguageId(metadata);\n\t\t\tmetadataUpdated = true;\n\t\t}\n\n\t\tif (metadataUpdated) {\n\t\t\tupdates.push({ cell: e.cell, metadata });\n\t\t}\n\t});\n\n\t// Ensure all new cells in notebooks with nbformat >= 4.5 have an id.\n\t// Details of the spec can be found here https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html#\n\te.contentChanges.forEach(change => {\n\t\tchange.addedCells.forEach(cell => {\n\t\t\t// When ever a cell is added, always update the metadata\n\t\t\t// as metadata is always an empty `{}` in ipynb JSON file\n\t\t\tconst cellMetadata = getCellMetadata({ cell });\n\n\t\t\t// Avoid updating the metadata if it's not required.\n\t\t\tif (cellMetadata.metadata) {\n\t\t\t\tif (!isCellIdRequired(notebookMetadata)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isCellIdRequired(notebookMetadata) && cellMetadata?.id) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Don't edit the metadata directly, always get a clone (prevents accidental singletons and directly editing the objects).\n\t\t\tconst metadata: CellMetadata = { ...JSON.parse(JSON.stringify(cellMetadata || {})) };\n\t\t\tmetadata.metadata = metadata.metadata || {};\n\n\t\t\tif (isCellIdRequired(notebookMetadata) && !cellMetadata?.id) {\n\t\t\t\tmetadata.id = generateCellId(e.notebook);\n\t\t\t}\n\t\t\tupdates.push({ cell, metadata });\n\t\t});\n\t});\n\n\tif (updates.length) {\n\t\ttrackAndUpdateCellMetadata(notebook, updates);\n\t}\n}\n\n\n/**\n * Cell ids are required in notebooks only in notebooks with nbformat >= 4.5\n */\nfunction isCellIdRequired(metadata: Pick<Partial<nbformat.INotebookContent>, 'nbformat' | 'nbformat_minor'>) {\n\tif ((metadata.nbformat || 0) >= 5) {\n\t\treturn true;\n\t}\n\tif ((metadata.nbformat || 0) === 4 && (metadata.nbformat_minor || 0) >= 5) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction generateCellId(notebook: NotebookDocument) {\n\twhile (true) {\n\t\t// Details of the id can be found here https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html#adding-an-id-field,\n\t\t// & here https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html#updating-older-formats\n\t\tconst id = generateUuid().replace(/-/g, '').substring(0, 8);\n\t\tlet duplicate = false;\n\t\tfor (let index = 0; index < notebook.cellCount; index++) {\n\t\t\tconst cell = notebook.cellAt(index);\n\t\t\tconst existingId = getCellMetadata({ cell })?.id;\n\t\t\tif (!existingId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (existingId === id) {\n\t\t\t\tduplicate = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!duplicate) {\n\t\t\treturn id;\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "extensions/ipynb/src/notebookSerializer.node.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { DeferredPromise, generateUuid } from './helper';\nimport { NotebookSerializerBase } from './notebookSerializer';\n\nexport class NotebookSerializer extends NotebookSerializerBase {\n\tprivate experimentalSave = vscode.workspace.getConfiguration('ipynb').get('experimental.serialization', false);\n\tprivate worker?: import('node:worker_threads').Worker;\n\tprivate tasks = new Map<string, DeferredPromise<Uint8Array>>();\n\n\tconstructor(context: vscode.ExtensionContext) {\n\t\tsuper(context);\n\t\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('ipynb.experimental.serialization')) {\n\t\t\t\tthis.experimentalSave = vscode.workspace.getConfiguration('ipynb').get('experimental.serialization', false);\n\t\t\t}\n\t\t}));\n\t}\n\n\toverride dispose() {\n\t\ttry {\n\t\t\tvoid this.worker?.terminate();\n\t\t} catch {\n\t\t\t//\n\t\t}\n\t\tsuper.dispose();\n\t}\n\n\tpublic override async serializeNotebook(data: vscode.NotebookData, token: vscode.CancellationToken): Promise<Uint8Array> {\n\t\tif (this.disposed) {\n\t\t\treturn new Uint8Array(0);\n\t\t}\n\n\t\tif (this.experimentalSave) {\n\t\t\treturn this.serializeViaWorker(data);\n\t\t}\n\n\t\treturn super.serializeNotebook(data, token);\n\t}\n\n\tprivate async startWorker() {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error('Serializer disposed');\n\t\t}\n\t\tif (this.worker) {\n\t\t\treturn this.worker;\n\t\t}\n\t\tconst { Worker } = await import('node:worker_threads');\n\t\tconst outputDir = getOutputDir(this.context);\n\t\tthis.worker = new Worker(vscode.Uri.joinPath(this.context.extensionUri, outputDir, 'notebookSerializerWorker.js').fsPath, {});\n\t\tthis.worker.on('exit', (exitCode) => {\n\t\t\tif (!this.disposed) {\n\t\t\t\tconsole.error(`IPynb Notebook Serializer Worker exited unexpectedly`, exitCode);\n\t\t\t}\n\t\t\tthis.worker = undefined;\n\t\t});\n\t\tthis.worker.on('message', (result: { data: Uint8Array; id: string }) => {\n\t\t\tconst task = this.tasks.get(result.id);\n\t\t\tif (task) {\n\t\t\t\ttask.complete(result.data);\n\t\t\t\tthis.tasks.delete(result.id);\n\t\t\t}\n\t\t});\n\t\tthis.worker.on('error', (err) => {\n\t\t\tif (!this.disposed) {\n\t\t\t\tconsole.error(`IPynb Notebook Serializer Worker errored unexpectedly`, err);\n\t\t\t}\n\t\t});\n\t\treturn this.worker;\n\t}\n\tprivate async serializeViaWorker(data: vscode.NotebookData): Promise<Uint8Array> {\n\t\tconst worker = await this.startWorker();\n\t\tconst id = generateUuid();\n\n\t\tconst deferred = new DeferredPromise<Uint8Array>();\n\t\tthis.tasks.set(id, deferred);\n\t\tworker.postMessage({ data, id });\n\n\t\treturn deferred.p;\n\t}\n}\n\n\nfunction getOutputDir(context: vscode.ExtensionContext): string {\n\tconst main = context.extension.packageJSON.main as string;\n\treturn main.indexOf('/dist/') !== -1 ? 'dist' : 'out';\n}\n"
  },
  {
    "path": "extensions/ipynb/src/notebookSerializer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type * as nbformat from '@jupyterlab/nbformat';\nimport detectIndent from 'detect-indent';\nimport * as vscode from 'vscode';\nimport { getPreferredLanguage, jupyterNotebookModelToNotebookData } from './deserializers';\nimport * as fnv from '@enonic/fnv-plus';\nimport { serializeNotebookToString } from './serializers';\n\nexport abstract class NotebookSerializerBase extends vscode.Disposable implements vscode.NotebookSerializer {\n\tprotected disposed: boolean = false;\n\tconstructor(protected readonly context: vscode.ExtensionContext) {\n\t\tsuper(() => { });\n\t}\n\n\toverride dispose() {\n\t\tthis.disposed = true;\n\t\tsuper.dispose();\n\t}\n\n\tpublic async deserializeNotebook(content: Uint8Array, _token: vscode.CancellationToken): Promise<vscode.NotebookData> {\n\t\tlet contents = '';\n\t\ttry {\n\t\t\tcontents = new TextDecoder().decode(content);\n\t\t} catch {\n\t\t}\n\n\t\tlet json = contents && /\\S/.test(contents) ? (JSON.parse(contents) as Partial<nbformat.INotebookContent>) : {};\n\n\t\tif (json.__webview_backup) {\n\t\t\tconst backupId = json.__webview_backup;\n\t\t\tconst uri = this.context.globalStorageUri;\n\t\t\tconst folder = uri.with({ path: this.context.globalStorageUri.path.replace('vscode.ipynb', 'ms-toolsai.jupyter') });\n\t\t\tconst fileHash = fnv.fast1a32hex(backupId) as string;\n\t\t\tconst fileName = `${fileHash}.ipynb`;\n\t\t\tconst file = vscode.Uri.joinPath(folder, fileName);\n\t\t\tconst data = await vscode.workspace.fs.readFile(file);\n\t\t\tjson = data ? JSON.parse(data.toString()) : {};\n\n\t\t\tif (json.contents && typeof json.contents === 'string') {\n\t\t\t\tcontents = json.contents;\n\t\t\t\tjson = JSON.parse(contents) as Partial<nbformat.INotebookContent>;\n\t\t\t}\n\t\t}\n\n\t\tif (json.nbformat && json.nbformat < 4) {\n\t\t\tthrow new Error('Only Jupyter notebooks version 4+ are supported');\n\t\t}\n\n\t\t// Then compute indent from the contents (only use first 1K characters as a perf optimization)\n\t\tconst indentAmount = contents ? detectIndent(contents.substring(0, 1_000)).indent : ' ';\n\n\t\tconst preferredCellLanguage = getPreferredLanguage(json.metadata);\n\t\t// Ensure we always have a blank cell.\n\t\tif ((json.cells || []).length === 0) {\n\t\t\tjson.cells = [\n\t\t\t];\n\t\t}\n\n\t\t// For notebooks without metadata default the language in metadata to the preferred language.\n\t\tif (!json.metadata || (!json.metadata.kernelspec && !json.metadata.language_info)) {\n\t\t\tjson.metadata = json.metadata || {};\n\t\t\tjson.metadata.language_info = json.metadata.language_info || { name: preferredCellLanguage };\n\t\t}\n\n\t\tconst data = jupyterNotebookModelToNotebookData(\n\t\t\tjson,\n\t\t\tpreferredCellLanguage\n\t\t);\n\t\tdata.metadata = data.metadata || {};\n\t\tdata.metadata.indentAmount = indentAmount;\n\n\t\treturn data;\n\t}\n\n\tpublic async serializeNotebook(data: vscode.NotebookData, _token: vscode.CancellationToken): Promise<Uint8Array> {\n\t\tif (this.disposed) {\n\t\t\treturn new Uint8Array(0);\n\t\t}\n\n\t\tconst serialized = serializeNotebookToString(data);\n\t\treturn new TextEncoder().encode(serialized);\n\t}\n\n}\n"
  },
  {
    "path": "extensions/ipynb/src/notebookSerializer.web.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { DeferredPromise, generateUuid } from './helper';\nimport { NotebookSerializerBase } from './notebookSerializer';\n\nexport class NotebookSerializer extends NotebookSerializerBase {\n\tprivate experimentalSave = vscode.workspace.getConfiguration('ipynb').get('experimental.serialization', false);\n\tprivate worker?: Worker;\n\tprivate tasks = new Map<string, DeferredPromise<Uint8Array>>();\n\n\tconstructor(context: vscode.ExtensionContext) {\n\t\tsuper(context);\n\t\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('ipynb.experimental.serialization')) {\n\t\t\t\tthis.experimentalSave = vscode.workspace.getConfiguration('ipynb').get('experimental.serialization', false);\n\t\t\t}\n\t\t}));\n\t}\n\n\toverride dispose() {\n\t\ttry {\n\t\t\tvoid this.worker?.terminate();\n\t\t} catch {\n\t\t\t//\n\t\t}\n\t\tsuper.dispose();\n\t}\n\n\tpublic override async serializeNotebook(data: vscode.NotebookData, token: vscode.CancellationToken): Promise<Uint8Array> {\n\t\tif (this.disposed) {\n\t\t\treturn new Uint8Array(0);\n\t\t}\n\n\t\tif (this.experimentalSave) {\n\t\t\treturn this.serializeViaWorker(data);\n\t\t}\n\n\t\treturn super.serializeNotebook(data, token);\n\t}\n\n\tprivate async startWorker() {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error('Serializer disposed');\n\t\t}\n\t\tif (this.worker) {\n\t\t\treturn this.worker;\n\t\t}\n\t\tconst entry = vscode.Uri.joinPath(this.context.extensionUri, 'dist', 'browser', 'notebookSerializerWorker.js');\n\t\tthis.worker = new Worker(entry.toString());\n\t\tthis.worker.addEventListener('exit', (exitCode) => {\n\t\t\tif (!this.disposed) {\n\t\t\t\tconsole.error(`IPynb Notebook Serializer Worker exited unexpectedly`, exitCode);\n\t\t\t}\n\t\t\tthis.worker = undefined;\n\t\t});\n\t\tthis.worker.onmessage = (e) => {\n\t\t\tconst result = e.data as { id: string; data: Uint8Array };\n\t\t\tconst task = this.tasks.get(result.id);\n\t\t\tif (task) {\n\t\t\t\ttask.complete(result.data);\n\t\t\t\tthis.tasks.delete(result.id);\n\t\t\t}\n\t\t};\n\t\tthis.worker.onerror = (err) => {\n\t\t\tif (!this.disposed) {\n\t\t\t\tconsole.error(`IPynb Notebook Serializer Worker errored unexpectedly`, err);\n\t\t\t}\n\t\t};\n\t\treturn this.worker;\n\t}\n\tprivate async serializeViaWorker(data: vscode.NotebookData): Promise<Uint8Array> {\n\t\tconst worker = await this.startWorker();\n\t\tconst id = generateUuid();\n\n\t\tconst deferred = new DeferredPromise<Uint8Array>();\n\t\tthis.tasks.set(id, deferred);\n\t\tworker.postMessage({ data, id });\n\n\t\treturn deferred.p;\n\t}\n}\n"
  },
  {
    "path": "extensions/ipynb/src/notebookSerializerWorker.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { parentPort } from 'worker_threads';\nimport { serializeNotebookToString } from './serializers';\nimport type { NotebookData } from 'vscode';\n\n\nif (parentPort) {\n\tparentPort.on('message', ({ id, data }: { id: string; data: NotebookData }) => {\n\t\tif (parentPort) {\n\t\t\tconst json = serializeNotebookToString(data);\n\t\t\tconst bytes = new TextEncoder().encode(json);\n\t\t\tparentPort.postMessage({ id, data: bytes });\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "extensions/ipynb/src/notebookSerializerWorker.web.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { serializeNotebookToString } from './serializers';\nimport type { NotebookData } from 'vscode';\n\nonmessage = (e) => {\n\tconst data = e.data as { id: string; data: NotebookData };\n\tconst json = serializeNotebookToString(data.data);\n\tconst bytes = new TextEncoder().encode(json);\n\tpostMessage({ id: data.id, data: bytes });\n};\n"
  },
  {
    "path": "extensions/ipynb/src/serializers.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type * as nbformat from '@jupyterlab/nbformat';\nimport type { NotebookCell, NotebookCellData, NotebookCellOutput, NotebookData, NotebookDocument } from 'vscode';\nimport { CellOutputMetadata, type CellMetadata } from './common';\nimport { textMimeTypes, NotebookCellKindMarkup, CellOutputMimeTypes, defaultNotebookFormat } from './constants';\n\nconst textDecoder = new TextDecoder();\n\nexport function createJupyterCellFromNotebookCell(\n\tvscCell: NotebookCellData,\n\tpreferredLanguage: string | undefined,\n): nbformat.IRawCell | nbformat.IMarkdownCell | nbformat.ICodeCell {\n\tlet cell: nbformat.IRawCell | nbformat.IMarkdownCell | nbformat.ICodeCell;\n\tif (vscCell.kind === NotebookCellKindMarkup) {\n\t\tcell = createMarkdownCellFromNotebookCell(vscCell);\n\t} else if (vscCell.languageId === 'raw') {\n\t\tcell = createRawCellFromNotebookCell(vscCell);\n\t} else {\n\t\tcell = createCodeCellFromNotebookCell(vscCell, preferredLanguage);\n\t}\n\treturn cell;\n}\n\n\n/**\n * Sort the JSON to minimize unnecessary SCM changes.\n * Jupyter notbeooks/labs sorts the JSON keys in alphabetical order.\n * https://github.com/microsoft/vscode-python/issues/13155\n */\nexport function sortObjectPropertiesRecursively(obj: any): any {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map(sortObjectPropertiesRecursively);\n\t}\n\tif (obj !== undefined && obj !== null && typeof obj === 'object' && Object.keys(obj).length > 0) {\n\t\treturn (\n\t\t\tObject.keys(obj)\n\t\t\t\t.sort()\n\t\t\t\t.reduce<Record<string, any>>((sortedObj, prop) => {\n\t\t\t\t\tsortedObj[prop] = sortObjectPropertiesRecursively(obj[prop]);\n\t\t\t\t\treturn sortedObj;\n\t\t\t\t}, {}) as any\n\t\t);\n\t}\n\treturn obj;\n}\n\nexport function getCellMetadata(options: { cell: NotebookCell | NotebookCellData } | { metadata?: { [key: string]: any } }): CellMetadata {\n\tif ('cell' in options) {\n\t\tconst cell = options.cell;\n\t\tconst metadata = {\n\t\t\texecution_count: null,\n\t\t\t// it contains the cell id, and the cell metadata, along with other nb cell metadata\n\t\t\t...(cell.metadata ?? {})\n\t\t} satisfies CellMetadata;\n\t\tif (cell.kind === NotebookCellKindMarkup) {\n\t\t\tdelete (metadata as any).execution_count;\n\t\t}\n\t\treturn metadata;\n\t} else {\n\t\tconst cell = options;\n\t\tconst metadata = {\n\t\t\t// it contains the cell id, and the cell metadata, along with other nb cell metadata\n\t\t\t...(cell.metadata ?? {})\n\t\t};\n\n\t\treturn metadata as CellMetadata;\n\t}\n}\n\nexport function getVSCodeCellLanguageId(metadata: CellMetadata): string | undefined {\n\treturn metadata.metadata?.vscode?.languageId;\n}\nexport function setVSCodeCellLanguageId(metadata: CellMetadata, languageId: string) {\n\tmetadata.metadata = metadata.metadata || {};\n\tmetadata.metadata.vscode = { languageId };\n}\nexport function removeVSCodeCellLanguageId(metadata: CellMetadata) {\n\tif (metadata.metadata?.vscode) {\n\t\tdelete metadata.metadata.vscode;\n\t}\n}\n\nfunction createCodeCellFromNotebookCell(cell: NotebookCellData, preferredLanguage: string | undefined): nbformat.ICodeCell {\n\tconst cellMetadata: CellMetadata = JSON.parse(JSON.stringify(getCellMetadata({ cell })));\n\tcellMetadata.metadata = cellMetadata.metadata || {}; // This cannot be empty.\n\tif (cell.languageId !== preferredLanguage) {\n\t\tsetVSCodeCellLanguageId(cellMetadata, cell.languageId);\n\t} else {\n\t\t// cell current language is the same as the preferred cell language in the document, flush the vscode custom language id metadata\n\t\tremoveVSCodeCellLanguageId(cellMetadata);\n\t}\n\n\tconst codeCell: nbformat.ICodeCell = {\n\t\tcell_type: 'code',\n\t\t// Metadata should always contain the execution_count.\n\t\t// When ever execution summary data changes we will update the metadata to contain the execution count.\n\t\t// Failing to do so means we have a problem.\n\t\t// Also do not read the value of executionSummary here, as its possible user reverted changes to metadata\n\t\t// & in that case execution summary could contain the data, but metadata will not.\n\t\t// In such cases we do not want to re-set the metadata with the value from execution summary (remember, user reverted that).\n\t\texecution_count: cellMetadata.execution_count ?? null,\n\t\tsource: splitMultilineString(cell.value.replace(/\\r\\n/g, '\\n')),\n\t\toutputs: (cell.outputs || []).map(translateCellDisplayOutput),\n\t\tmetadata: cellMetadata.metadata\n\t};\n\tif (cellMetadata?.id) {\n\t\tcodeCell.id = cellMetadata.id;\n\t}\n\treturn codeCell;\n}\n\nfunction createRawCellFromNotebookCell(cell: NotebookCellData): nbformat.IRawCell {\n\tconst cellMetadata = getCellMetadata({ cell });\n\tconst rawCell: any = {\n\t\tcell_type: 'raw',\n\t\tsource: splitMultilineString(cell.value.replace(/\\r\\n/g, '\\n')),\n\t\tmetadata: cellMetadata?.metadata || {} // This cannot be empty.\n\t};\n\tif (cellMetadata?.attachments) {\n\t\trawCell.attachments = cellMetadata.attachments;\n\t}\n\tif (cellMetadata?.id) {\n\t\trawCell.id = cellMetadata.id;\n\t}\n\treturn rawCell;\n}\n\nfunction splitMultilineString(source: nbformat.MultilineString): string[] {\n\tif (Array.isArray(source)) {\n\t\treturn source as string[];\n\t}\n\tconst str = source.toString();\n\tif (str.length > 0) {\n\t\t// Each line should be a separate entry, but end with a \\n if not last entry\n\t\tconst arr = str.split('\\n');\n\t\treturn arr\n\t\t\t.map((s, i) => {\n\t\t\t\tif (i < arr.length - 1) {\n\t\t\t\t\treturn `${s}\\n`;\n\t\t\t\t}\n\t\t\t\treturn s;\n\t\t\t})\n\t\t\t.filter(s => s.length > 0); // Skip last one if empty (it's the only one that could be length 0)\n\t}\n\treturn [];\n}\n\nfunction translateCellDisplayOutput(output: NotebookCellOutput): JupyterOutput {\n\tconst customMetadata = output.metadata as CellOutputMetadata | undefined;\n\tlet result: JupyterOutput;\n\t// Possible some other extension added some output (do best effort to translate & save in ipynb).\n\t// In which case metadata might not contain `outputType`.\n\tconst outputType = customMetadata?.outputType as nbformat.OutputType;\n\tswitch (outputType) {\n\t\tcase 'error': {\n\t\t\tresult = translateCellErrorOutput(output);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'stream': {\n\t\t\tresult = convertStreamOutput(output);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'display_data': {\n\t\t\tresult = {\n\t\t\t\toutput_type: 'display_data',\n\t\t\t\tdata: output.items.reduce((prev: any, curr) => {\n\t\t\t\t\tprev[curr.mime] = convertOutputMimeToJupyterOutput(curr.mime, curr.data as Uint8Array);\n\t\t\t\t\treturn prev;\n\t\t\t\t}, {}),\n\t\t\t\tmetadata: customMetadata?.metadata || {} // This can never be undefined.\n\t\t\t};\n\t\t\tbreak;\n\t\t}\n\t\tcase 'execute_result': {\n\t\t\tresult = {\n\t\t\t\toutput_type: 'execute_result',\n\t\t\t\tdata: output.items.reduce((prev: any, curr) => {\n\t\t\t\t\tprev[curr.mime] = convertOutputMimeToJupyterOutput(curr.mime, curr.data as Uint8Array);\n\t\t\t\t\treturn prev;\n\t\t\t\t}, {}),\n\t\t\t\tmetadata: customMetadata?.metadata || {}, // This can never be undefined.\n\t\t\t\texecution_count:\n\t\t\t\t\ttypeof customMetadata?.executionCount === 'number' ? customMetadata?.executionCount : null // This can never be undefined, only a number or `null`.\n\t\t\t};\n\t\t\tbreak;\n\t\t}\n\t\tcase 'update_display_data': {\n\t\t\tresult = {\n\t\t\t\toutput_type: 'update_display_data',\n\t\t\t\tdata: output.items.reduce((prev: any, curr) => {\n\t\t\t\t\tprev[curr.mime] = convertOutputMimeToJupyterOutput(curr.mime, curr.data as Uint8Array);\n\t\t\t\t\treturn prev;\n\t\t\t\t}, {}),\n\t\t\t\tmetadata: customMetadata?.metadata || {} // This can never be undefined.\n\t\t\t};\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tconst isError =\n\t\t\t\toutput.items.length === 1 && output.items.every((item) => item.mime === CellOutputMimeTypes.error);\n\t\t\tconst isStream = output.items.every(\n\t\t\t\t(item) => item.mime === CellOutputMimeTypes.stderr || item.mime === CellOutputMimeTypes.stdout\n\t\t\t);\n\n\t\t\tif (isError) {\n\t\t\t\treturn translateCellErrorOutput(output);\n\t\t\t}\n\n\t\t\t// In the case of .NET & other kernels, we need to ensure we save ipynb correctly.\n\t\t\t// Hence if we have stream output, save the output as Jupyter `stream` else `display_data`\n\t\t\t// Unless we already know its an unknown output type.\n\t\t\tconst outputType: nbformat.OutputType =\n\t\t\t\t<nbformat.OutputType>customMetadata?.outputType || (isStream ? 'stream' : 'display_data');\n\t\t\tlet unknownOutput: nbformat.IUnrecognizedOutput | nbformat.IDisplayData | nbformat.IStream;\n\t\t\tif (outputType === 'stream') {\n\t\t\t\t// If saving as `stream` ensure the mandatory properties are set.\n\t\t\t\tunknownOutput = convertStreamOutput(output);\n\t\t\t} else if (outputType === 'display_data') {\n\t\t\t\t// If saving as `display_data` ensure the mandatory properties are set.\n\t\t\t\tconst displayData: nbformat.IDisplayData = {\n\t\t\t\t\tdata: {},\n\t\t\t\t\tmetadata: {},\n\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t};\n\t\t\t\tunknownOutput = displayData;\n\t\t\t} else {\n\t\t\t\tunknownOutput = {\n\t\t\t\t\toutput_type: outputType\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (customMetadata?.metadata) {\n\t\t\t\tunknownOutput.metadata = customMetadata.metadata;\n\t\t\t}\n\t\t\tif (output.items.length > 0) {\n\t\t\t\tunknownOutput.data = output.items.reduce((prev: any, curr) => {\n\t\t\t\t\tprev[curr.mime] = convertOutputMimeToJupyterOutput(curr.mime, curr.data as Uint8Array);\n\t\t\t\t\treturn prev;\n\t\t\t\t}, {});\n\t\t\t}\n\t\t\tresult = unknownOutput;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Account for transient data as well\n\t// `transient.display_id` is used to update cell output in other cells, at least thats one use case we know of.\n\tif (result && customMetadata && customMetadata.transient) {\n\t\tresult.transient = customMetadata.transient;\n\t}\n\treturn result;\n}\n\nfunction translateCellErrorOutput(output: NotebookCellOutput): nbformat.IError {\n\t// it should have at least one output item\n\tconst firstItem = output.items[0];\n\t// Bug in VS Code.\n\tif (!firstItem.data) {\n\t\treturn {\n\t\t\toutput_type: 'error',\n\t\t\tename: '',\n\t\t\tevalue: '',\n\t\t\ttraceback: []\n\t\t};\n\t}\n\tconst originalError: undefined | nbformat.IError = output.metadata?.originalError;\n\tconst value: Error = JSON.parse(textDecoder.decode(firstItem.data));\n\treturn {\n\t\toutput_type: 'error',\n\t\tename: value.name,\n\t\tevalue: value.message,\n\t\t// VS Code needs an `Error` object which requires a `stack` property as a string.\n\t\t// Its possible the format could change when converting from `traceback` to `string` and back again to `string`\n\t\t// When .NET stores errors in output (with their .NET kernel),\n\t\t// stack is empty, hence store the message instead of stack (so that somethign gets displayed in ipynb).\n\t\ttraceback: originalError?.traceback || splitMultilineString(value.stack || value.message || '')\n\t};\n}\n\n\nfunction getOutputStreamType(output: NotebookCellOutput): string | undefined {\n\tif (output.items.length > 0) {\n\t\treturn output.items[0].mime === CellOutputMimeTypes.stderr ? 'stderr' : 'stdout';\n\t}\n\n\treturn;\n}\n\ntype JupyterOutput =\n\t| nbformat.IUnrecognizedOutput\n\t| nbformat.IExecuteResult\n\t| nbformat.IDisplayData\n\t| nbformat.IStream\n\t| nbformat.IError;\n\nfunction convertStreamOutput(output: NotebookCellOutput): JupyterOutput {\n\tconst outputs: string[] = [];\n\toutput.items\n\t\t.filter((opit) => opit.mime === CellOutputMimeTypes.stderr || opit.mime === CellOutputMimeTypes.stdout)\n\t\t.map((opit) => textDecoder.decode(opit.data))\n\t\t.forEach(value => {\n\t\t\t// Ensure each line is a separate entry in an array (ending with \\n).\n\t\t\tconst lines = value.split('\\n');\n\t\t\t// If the last item in `outputs` is not empty and the first item in `lines` is not empty, then concate them.\n\t\t\t// As they are part of the same line.\n\t\t\tif (outputs.length && lines.length && lines[0].length > 0) {\n\t\t\t\toutputs[outputs.length - 1] = `${outputs[outputs.length - 1]}${lines.shift()!}`;\n\t\t\t}\n\t\t\tfor (const line of lines) {\n\t\t\t\toutputs.push(line);\n\t\t\t}\n\t\t});\n\n\tfor (let index = 0; index < (outputs.length - 1); index++) {\n\t\toutputs[index] = `${outputs[index]}\\n`;\n\t}\n\n\t// Skip last one if empty (it's the only one that could be length 0)\n\tif (outputs.length && outputs[outputs.length - 1].length === 0) {\n\t\toutputs.pop();\n\t}\n\n\tconst streamType = getOutputStreamType(output) || 'stdout';\n\n\treturn {\n\t\toutput_type: 'stream',\n\t\tname: streamType,\n\t\ttext: outputs\n\t};\n}\n\nfunction convertOutputMimeToJupyterOutput(mime: string, value: Uint8Array) {\n\tif (!value) {\n\t\treturn '';\n\t}\n\ttry {\n\t\tif (mime === CellOutputMimeTypes.error) {\n\t\t\tconst stringValue = textDecoder.decode(value);\n\t\t\treturn JSON.parse(stringValue);\n\t\t} else if (mime.startsWith('text/') || textMimeTypes.includes(mime)) {\n\t\t\tconst stringValue = textDecoder.decode(value);\n\t\t\treturn splitMultilineString(stringValue);\n\t\t} else if (mime.startsWith('image/') && mime !== 'image/svg+xml') {\n\t\t\t// Images in Jupyter are stored in base64 encoded format.\n\t\t\t// VS Code expects bytes when rendering images.\n\t\t\tif (typeof Buffer !== 'undefined' && typeof Buffer.from === 'function') {\n\t\t\t\treturn Buffer.from(value).toString('base64');\n\t\t\t} else {\n\t\t\t\treturn btoa(value.reduce((s: string, b: number) => s + String.fromCharCode(b), ''));\n\t\t\t}\n\t\t} else if (mime.toLowerCase().includes('json')) {\n\t\t\tconst stringValue = textDecoder.decode(value);\n\t\t\treturn stringValue.length > 0 ? JSON.parse(stringValue) : stringValue;\n\t\t} else if (mime === 'image/svg+xml') {\n\t\t\treturn splitMultilineString(textDecoder.decode(value));\n\t\t} else {\n\t\t\treturn textDecoder.decode(value);\n\t\t}\n\t} catch (ex) {\n\t\treturn '';\n\t}\n}\n\nexport function createMarkdownCellFromNotebookCell(cell: NotebookCellData): nbformat.IMarkdownCell {\n\tconst cellMetadata = getCellMetadata({ cell });\n\tconst markdownCell: any = {\n\t\tcell_type: 'markdown',\n\t\tsource: splitMultilineString(cell.value.replace(/\\r\\n/g, '\\n')),\n\t\tmetadata: cellMetadata?.metadata || {} // This cannot be empty.\n\t};\n\tif (cellMetadata?.attachments) {\n\t\tmarkdownCell.attachments = cellMetadata.attachments;\n\t}\n\tif (cellMetadata?.id) {\n\t\tmarkdownCell.id = cellMetadata.id;\n\t}\n\treturn markdownCell;\n}\n\nexport function pruneCell(cell: nbformat.ICell): nbformat.ICell {\n\t// Source is usually a single string on input. Convert back to an array\n\tconst result: nbformat.ICell = {\n\t\t...cell,\n\t\tsource: splitMultilineString(cell.source)\n\t};\n\n\t// Remove outputs and execution_count from non code cells\n\tif (result.cell_type !== 'code') {\n\t\tdelete (<any>result).outputs;\n\t\tdelete (<any>result).execution_count;\n\t} else {\n\t\t// Clean outputs from code cells\n\t\tresult.outputs = result.outputs ? (result.outputs as nbformat.IOutput[]).map(fixupOutput) : [];\n\t}\n\n\treturn result;\n}\nconst dummyStreamObj: nbformat.IStream = {\n\toutput_type: 'stream',\n\tname: 'stdout',\n\ttext: ''\n};\nconst dummyErrorObj: nbformat.IError = {\n\toutput_type: 'error',\n\tename: '',\n\tevalue: '',\n\ttraceback: ['']\n};\nconst dummyDisplayObj: nbformat.IDisplayData = {\n\toutput_type: 'display_data',\n\tdata: {},\n\tmetadata: {}\n};\nconst dummyExecuteResultObj: nbformat.IExecuteResult = {\n\toutput_type: 'execute_result',\n\tname: '',\n\texecution_count: 0,\n\tdata: {},\n\tmetadata: {}\n};\nconst AllowedCellOutputKeys = {\n\t['stream']: new Set(Object.keys(dummyStreamObj)),\n\t['error']: new Set(Object.keys(dummyErrorObj)),\n\t['display_data']: new Set(Object.keys(dummyDisplayObj)),\n\t['execute_result']: new Set(Object.keys(dummyExecuteResultObj))\n};\n\nfunction fixupOutput(output: nbformat.IOutput): nbformat.IOutput {\n\tlet allowedKeys: Set<string>;\n\tswitch (output.output_type) {\n\t\tcase 'stream':\n\t\tcase 'error':\n\t\tcase 'execute_result':\n\t\tcase 'display_data':\n\t\t\tallowedKeys = AllowedCellOutputKeys[output.output_type];\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn output;\n\t}\n\tconst result = { ...output };\n\tfor (const k of Object.keys(output)) {\n\t\tif (!allowedKeys.has(k)) {\n\t\t\tdelete result[k];\n\t\t}\n\t}\n\treturn result;\n}\n\n\nexport function serializeNotebookToString(data: NotebookData): string {\n\tconst notebookContent = getNotebookMetadata(data);\n\t// use the preferred language from document metadata or the first cell language as the notebook preferred cell language\n\tconst preferredCellLanguage = notebookContent.metadata?.language_info?.name ?? data.cells.find(cell => cell.kind === 2)?.languageId;\n\n\tnotebookContent.cells = data.cells\n\t\t.map(cell => createJupyterCellFromNotebookCell(cell, preferredCellLanguage))\n\t\t.map(pruneCell);\n\n\tconst indentAmount = data.metadata && 'indentAmount' in data.metadata && typeof data.metadata.indentAmount === 'string' ?\n\t\tdata.metadata.indentAmount :\n\t\t' ';\n\n\treturn serializeNotebookToJSON(notebookContent, indentAmount);\n}\nfunction serializeNotebookToJSON(notebookContent: Partial<nbformat.INotebookContent>, indentAmount: string): string {\n\t// ipynb always ends with a trailing new line (we add this so that SCMs do not show unnecessary changes, resulting from a missing trailing new line).\n\tconst sorted = sortObjectPropertiesRecursively(notebookContent);\n\n\treturn JSON.stringify(sorted, undefined, indentAmount) + '\\n';\n}\n\nexport function getNotebookMetadata(document: NotebookDocument | NotebookData) {\n\tconst existingContent: Partial<nbformat.INotebookContent> = document.metadata || {};\n\tconst notebookContent: Partial<nbformat.INotebookContent> = {};\n\tnotebookContent.cells = existingContent.cells || [];\n\tnotebookContent.nbformat = existingContent.nbformat || defaultNotebookFormat.major;\n\tnotebookContent.nbformat_minor = existingContent.nbformat_minor ?? defaultNotebookFormat.minor;\n\tnotebookContent.metadata = existingContent.metadata || {};\n\treturn notebookContent;\n}\n"
  },
  {
    "path": "extensions/ipynb/src/test/clearOutputs.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as sinon from 'sinon';\nimport type * as nbformat from '@jupyterlab/nbformat';\nimport * as assert from 'assert';\nimport * as vscode from 'vscode';\nimport { jupyterNotebookModelToNotebookData } from '../deserializers';\nimport { activate } from '../notebookModelStoreSync';\n\n\nsuite(`ipynb Clear Outputs`, () => {\n\tconst disposables: vscode.Disposable[] = [];\n\tconst context = { subscriptions: disposables } as vscode.ExtensionContext;\n\tsetup(() => {\n\t\tdisposables.length = 0;\n\t\tactivate(context);\n\t});\n\tteardown(async () => {\n\t\tdisposables.forEach(d => d.dispose());\n\t\tdisposables.length = 0;\n\t\tsinon.restore();\n\t\tawait vscode.commands.executeCommand('workbench.action.closeAllEditors');\n\t});\n\n\ttest('Clear outputs after opening Notebook', async () => {\n\t\tconst cells: nbformat.ICell[] = [\n\t\t\t{\n\t\t\t\tcell_type: 'code',\n\t\t\t\texecution_count: 10,\n\t\t\t\toutputs: [{ output_type: 'stream', name: 'stdout', text: ['Hello'] }],\n\t\t\t\tsource: 'print(1)',\n\t\t\t\tmetadata: {}\n\t\t\t},\n\t\t\t{\n\t\t\t\tcell_type: 'code',\n\t\t\t\toutputs: [],\n\t\t\t\tsource: 'print(2)',\n\t\t\t\tmetadata: {}\n\t\t\t},\n\t\t\t{\n\t\t\t\tcell_type: 'markdown',\n\t\t\t\tsource: '# HEAD',\n\t\t\t\tmetadata: {}\n\t\t\t}\n\t\t];\n\t\tconst notebook = jupyterNotebookModelToNotebookData({ cells }, 'python');\n\n\t\tconst notebookDocument = await vscode.workspace.openNotebookDocument('jupyter-notebook', notebook);\n\t\tawait vscode.window.showNotebookDocument(notebookDocument);\n\n\t\tassert.strictEqual(notebookDocument.cellCount, 3);\n\t\tassert.strictEqual(notebookDocument.cellAt(0).metadata.execution_count, 10);\n\t\tassert.strictEqual(notebookDocument.cellAt(1).metadata.execution_count, null);\n\t\tassert.strictEqual(notebookDocument.cellAt(2).metadata.execution_count, undefined);\n\n\t\t// Clear all outputs\n\t\tawait vscode.commands.executeCommand('notebook.clearAllCellsOutputs');\n\n\t\t// Wait for all changes to be applied, could take a few ms.\n\t\tconst verifyMetadataChanges = () => {\n\t\t\tassert.strictEqual(notebookDocument.cellAt(0).metadata.execution_count, null);\n\t\t\tassert.strictEqual(notebookDocument.cellAt(1).metadata.execution_count, null);\n\t\t\tassert.strictEqual(notebookDocument.cellAt(2).metadata.execution_count, undefined);\n\t\t};\n\n\t\tvscode.workspace.onDidChangeNotebookDocument(() => verifyMetadataChanges(), undefined, disposables);\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\ttry {\n\t\t\t\t\tverifyMetadataChanges();\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\tresolve();\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\t\t\t}, 50);\n\t\t\tdisposables.push({ dispose: () => clearInterval(interval) });\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\ttry {\n\t\t\t\t\tverifyMetadataChanges();\n\t\t\t\t\tresolve();\n\t\t\t\t} catch (ex) {\n\t\t\t\t\treject(ex);\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t\tdisposables.push({ dispose: () => clearTimeout(timeout) });\n\t\t});\n\t});\n\n\n\t// test('Serialize', async () => {\n\t// \tconst markdownCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown');\n\t// \tmarkdownCell.metadata = {\n\t// \t\tattachments: {\n\t// \t\t\t'image.png': {\n\t// \t\t\t\t'image/png': 'abc'\n\t// \t\t\t}\n\t// \t\t},\n\t// \t\tid: '123',\n\t// \t\tmetadata: {\n\t// \t\t\tfoo: 'bar'\n\t// \t\t}\n\t// \t};\n\n\t// \tconst cellMetadata = getCellMetadata({ cell: markdownCell });\n\t// \tassert.deepStrictEqual(cellMetadata, {\n\t// \t\tid: '123',\n\t// \t\tmetadata: {\n\t// \t\t\tfoo: 'bar',\n\t// \t\t},\n\t// \t\tattachments: {\n\t// \t\t\t'image.png': {\n\t// \t\t\t\t'image/png': 'abc'\n\t// \t\t\t}\n\t// \t\t}\n\t// \t});\n\n\t// \tconst markdownCell2 = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown');\n\t// \tmarkdownCell2.metadata = {\n\t// \t\tid: '123',\n\t// \t\tmetadata: {\n\t// \t\t\tfoo: 'bar'\n\t// \t\t},\n\t// \t\tattachments: {\n\t// \t\t\t'image.png': {\n\t// \t\t\t\t'image/png': 'abc'\n\t// \t\t\t}\n\t// \t\t}\n\t// \t};\n\n\t// \tconst nbMarkdownCell = createMarkdownCellFromNotebookCell(markdownCell);\n\t// \tconst nbMarkdownCell2 = createMarkdownCellFromNotebookCell(markdownCell2);\n\t// \tassert.deepStrictEqual(nbMarkdownCell, nbMarkdownCell2);\n\n\t// \tassert.deepStrictEqual(nbMarkdownCell, {\n\t// \t\tcell_type: 'markdown',\n\t// \t\tsource: ['# header1'],\n\t// \t\tmetadata: {\n\t// \t\t\tfoo: 'bar',\n\t// \t\t},\n\t// \t\tattachments: {\n\t// \t\t\t'image.png': {\n\t// \t\t\t\t'image/png': 'abc'\n\t// \t\t\t}\n\t// \t\t},\n\t// \t\tid: '123'\n\t// \t});\n\t// });\n\n\t// suite('Outputs', () => {\n\t// \tfunction validateCellOutputTranslation(\n\t// \t\toutputs: nbformat.IOutput[],\n\t// \t\texpectedOutputs: vscode.NotebookCellOutput[],\n\t// \t\tpropertiesToExcludeFromComparison: string[] = []\n\t// \t) {\n\t// \t\tconst cells: nbformat.ICell[] = [\n\t// \t\t\t{\n\t// \t\t\t\tcell_type: 'code',\n\t// \t\t\t\texecution_count: 10,\n\t// \t\t\t\toutputs,\n\t// \t\t\t\tsource: 'print(1)',\n\t// \t\t\t\tmetadata: {}\n\t// \t\t\t}\n\t// \t\t];\n\t// \t\tconst notebook = jupyterNotebookModelToNotebookData({ cells }, 'python');\n\n\t// \t\t// OutputItems contain an `id` property generated by VSC.\n\t// \t\t// Exclude that property when comparing.\n\t// \t\tconst propertiesToExclude = propertiesToExcludeFromComparison.concat(['id']);\n\t// \t\tconst actualOuts = notebook.cells[0].outputs;\n\t// \t\tdeepStripProperties(actualOuts, propertiesToExclude);\n\t// \t\tdeepStripProperties(expectedOutputs, propertiesToExclude);\n\t// \t\tassert.deepStrictEqual(actualOuts, expectedOutputs);\n\t// \t}\n\n\t// \ttest('Empty output', () => {\n\t// \t\tvalidateCellOutputTranslation([], []);\n\t// \t});\n\n\t// \ttest('Stream output', () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\toutput_type: 'stream',\n\t// \t\t\t\t\tname: 'stderr',\n\t// \t\t\t\t\ttext: 'Error'\n\t// \t\t\t\t},\n\t// \t\t\t\t{\n\t// \t\t\t\t\toutput_type: 'stream',\n\t// \t\t\t\t\tname: 'stdout',\n\t// \t\t\t\t\ttext: 'NoError'\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('Error')], {\n\t// \t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t}),\n\t// \t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('NoError')], {\n\t// \t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t})\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\t// \ttest('Stream output and line endings', () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\toutput_type: 'stream',\n\t// \t\t\t\t\tname: 'stdout',\n\t// \t\t\t\t\ttext: [\n\t// \t\t\t\t\t\t'Line1\\n',\n\t// \t\t\t\t\t\t'\\n',\n\t// \t\t\t\t\t\t'Line3\\n',\n\t// \t\t\t\t\t\t'Line4'\n\t// \t\t\t\t\t]\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Line1\\n\\nLine3\\nLine4')], {\n\t// \t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t})\n\t// \t\t\t]\n\t// \t\t);\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\toutput_type: 'stream',\n\t// \t\t\t\t\tname: 'stdout',\n\t// \t\t\t\t\ttext: [\n\t// \t\t\t\t\t\t'Hello\\n',\n\t// \t\t\t\t\t\t'Hello\\n',\n\t// \t\t\t\t\t\t'Hello\\n',\n\t// \t\t\t\t\t\t'Hello\\n',\n\t// \t\t\t\t\t\t'Hello\\n',\n\t// \t\t\t\t\t\t'Hello\\n'\n\t// \t\t\t\t\t]\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Hello\\nHello\\nHello\\nHello\\nHello\\nHello\\n')], {\n\t// \t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t})\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\t// \ttest('Multi-line Stream output', () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\tname: 'stdout',\n\t// \t\t\t\t\toutput_type: 'stream',\n\t// \t\t\t\t\ttext: [\n\t// \t\t\t\t\t\t'Epoch 1/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 2/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 3/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 4/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 5/5\\n',\n\t// \t\t\t\t\t\t'...\\n'\n\t// \t\t\t\t\t]\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout(['Epoch 1/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 2/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 3/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 4/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 5/5\\n',\n\t// \t\t\t\t\t'...\\n'].join(''))], {\n\t// \t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t})\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\n\t// \ttest('Multi-line Stream output (last empty line should not be saved in ipynb)', () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\tname: 'stderr',\n\t// \t\t\t\t\toutput_type: 'stream',\n\t// \t\t\t\t\ttext: [\n\t// \t\t\t\t\t\t'Epoch 1/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 2/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 3/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 4/5\\n',\n\t// \t\t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t\t'Epoch 5/5\\n',\n\t// \t\t\t\t\t\t'...\\n'\n\t// \t\t\t\t\t]\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr(['Epoch 1/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 2/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 3/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 4/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t'Epoch 5/5\\n',\n\t// \t\t\t\t\t'...\\n',\n\t// \t\t\t\t\t// This last empty line should not be saved in ipynb.\n\t// \t\t\t\t\t'\\n'].join(''))], {\n\t// \t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t})\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\n\t// \ttest('Streamed text with Ansi characters', async () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\tname: 'stderr',\n\t// \t\t\t\t\ttext: '\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n',\n\t// \t\t\t\t\toutput_type: 'stream'\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t[vscode.NotebookCellOutputItem.stderr('\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n')],\n\t// \t\t\t\t\t{\n\t// \t\t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t\t}\n\t// \t\t\t\t)\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\n\t// \ttest('Streamed text with angle bracket characters', async () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\tname: 'stderr',\n\t// \t\t\t\t\ttext: '1 is < 2',\n\t// \t\t\t\t\toutput_type: 'stream'\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('1 is < 2')], {\n\t// \t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t})\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\n\t// \ttest('Streamed text with angle bracket characters and ansi chars', async () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\tname: 'stderr',\n\t// \t\t\t\t\ttext: '1 is < 2\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n',\n\t// \t\t\t\t\toutput_type: 'stream'\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t[vscode.NotebookCellOutputItem.stderr('1 is < 2\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n')],\n\t// \t\t\t\t\t{\n\t// \t\t\t\t\t\toutputType: 'stream'\n\t// \t\t\t\t\t}\n\t// \t\t\t\t)\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\n\t// \ttest('Error', async () => {\n\t// \t\tvalidateCellOutputTranslation(\n\t// \t\t\t[\n\t// \t\t\t\t{\n\t// \t\t\t\t\tename: 'Error Name',\n\t// \t\t\t\t\tevalue: 'Error Value',\n\t// \t\t\t\t\ttraceback: ['stack1', 'stack2', 'stack3'],\n\t// \t\t\t\t\toutput_type: 'error'\n\t// \t\t\t\t}\n\t// \t\t\t],\n\t// \t\t\t[\n\t// \t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\tvscode.NotebookCellOutputItem.error({\n\t// \t\t\t\t\t\t\tname: 'Error Name',\n\t// \t\t\t\t\t\t\tmessage: 'Error Value',\n\t// \t\t\t\t\t\t\tstack: ['stack1', 'stack2', 'stack3'].join('\\n')\n\t// \t\t\t\t\t\t})\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\t{\n\t// \t\t\t\t\t\toutputType: 'error',\n\t// \t\t\t\t\t\toriginalError: {\n\t// \t\t\t\t\t\t\tename: 'Error Name',\n\t// \t\t\t\t\t\t\tevalue: 'Error Value',\n\t// \t\t\t\t\t\t\ttraceback: ['stack1', 'stack2', 'stack3'],\n\t// \t\t\t\t\t\t\toutput_type: 'error'\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t}\n\t// \t\t\t\t)\n\t// \t\t\t]\n\t// \t\t);\n\t// \t});\n\n\t// \t['display_data', 'execute_result'].forEach(output_type => {\n\t// \t\tsuite(`Rich output for output_type = ${output_type}`, () => {\n\t// \t\t\t// Properties to exclude when comparing.\n\t// \t\t\tlet propertiesToExcludeFromComparison: string[] = [];\n\t// \t\t\tsetup(() => {\n\t// \t\t\t\tif (output_type === 'display_data') {\n\t// \t\t\t\t\t// With display_data the execution_count property will never exist in the output.\n\t// \t\t\t\t\t// We can ignore that (as it will never exist).\n\t// \t\t\t\t\t// But we leave it in the case of `output_type === 'execute_result'`\n\t// \t\t\t\t\tpropertiesToExcludeFromComparison = ['execution_count', 'executionCount'];\n\t// \t\t\t\t}\n\t// \t\t\t});\n\n\t// \t\t\ttest('Text mimeType output', async () => {\n\t// \t\t\t\tvalidateCellOutputTranslation(\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t\t\t'text/plain': 'Hello World!'\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\toutput_type,\n\t// \t\t\t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\t\t\texecution_count: 1\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from('Hello World!', 'utf8'), 'text/plain')],\n\t// \t\t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\t\toutputType: output_type,\n\t// \t\t\t\t\t\t\t\tmetadata: {}, // display_data & execute_result always have metadata.\n\t// \t\t\t\t\t\t\t\texecutionCount: 1\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t)\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\tpropertiesToExcludeFromComparison\n\t// \t\t\t\t);\n\t// \t\t\t});\n\n\t// \t\t\ttest('png,jpeg images', async () => {\n\t// \t\t\t\tvalidateCellOutputTranslation(\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\texecution_count: 1,\n\t// \t\t\t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t\t\t'image/png': base64EncodedImage,\n\t// \t\t\t\t\t\t\t\t'image/jpeg': base64EncodedImage\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\t\t\toutput_type\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t\t\t[\n\t// \t\t\t\t\t\t\t\tnew vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png'),\n\t// \t\t\t\t\t\t\t\tnew vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/jpeg')\n\t// \t\t\t\t\t\t\t],\n\t// \t\t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\t\texecutionCount: 1,\n\t// \t\t\t\t\t\t\t\toutputType: output_type,\n\t// \t\t\t\t\t\t\t\tmetadata: {} // display_data & execute_result always have metadata.\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t)\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\tpropertiesToExcludeFromComparison\n\t// \t\t\t\t);\n\t// \t\t\t});\n\n\t// \t\t\ttest('png image with a light background', async () => {\n\t// \t\t\t\tvalidateCellOutputTranslation(\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\texecution_count: 1,\n\t// \t\t\t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\tneeds_background: 'light'\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\toutput_type\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t// \t\t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\t\texecutionCount: 1,\n\t// \t\t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\t\tneeds_background: 'light'\n\t// \t\t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\t\toutputType: output_type\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t)\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\tpropertiesToExcludeFromComparison\n\t// \t\t\t\t);\n\t// \t\t\t});\n\n\t// \t\t\ttest('png image with a dark background', async () => {\n\t// \t\t\t\tvalidateCellOutputTranslation(\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\texecution_count: 1,\n\t// \t\t\t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\tneeds_background: 'dark'\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\toutput_type\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t// \t\t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\t\texecutionCount: 1,\n\t// \t\t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\t\tneeds_background: 'dark'\n\t// \t\t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\t\toutputType: output_type\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t)\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\tpropertiesToExcludeFromComparison\n\t// \t\t\t\t);\n\t// \t\t\t});\n\n\t// \t\t\ttest('png image with custom dimensions', async () => {\n\t// \t\t\t\tvalidateCellOutputTranslation(\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\texecution_count: 1,\n\t// \t\t\t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\t'image/png': { height: '111px', width: '999px' }\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\toutput_type\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t// \t\t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\t\texecutionCount: 1,\n\t// \t\t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\t\t'image/png': { height: '111px', width: '999px' }\n\t// \t\t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\t\toutputType: output_type\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t)\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\tpropertiesToExcludeFromComparison\n\t// \t\t\t\t);\n\t// \t\t\t});\n\n\t// \t\t\ttest('png allowed to scroll', async () => {\n\t// \t\t\t\tvalidateCellOutputTranslation(\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\texecution_count: 1,\n\t// \t\t\t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\tunconfined: true,\n\t// \t\t\t\t\t\t\t\t'image/png': { width: '999px' }\n\t// \t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\toutput_type\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\t[\n\t// \t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t// \t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t// \t\t\t\t\t\t\t{\n\t// \t\t\t\t\t\t\t\texecutionCount: 1,\n\t// \t\t\t\t\t\t\t\tmetadata: {\n\t// \t\t\t\t\t\t\t\t\tunconfined: true,\n\t// \t\t\t\t\t\t\t\t\t'image/png': { width: '999px' }\n\t// \t\t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\t\toutputType: output_type\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t)\n\t// \t\t\t\t\t],\n\t// \t\t\t\t\tpropertiesToExcludeFromComparison\n\t// \t\t\t\t);\n\t// \t\t\t});\n\t// \t\t});\n\t// \t});\n\t// });\n\n\t// suite('Output Order', () => {\n\t// \ttest('Verify order of outputs', async () => {\n\t// \t\tconst dataAndExpectedOrder: { output: nbformat.IDisplayData; expectedMimeTypesOrder: string[] }[] = [\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'application/vnd.vegalite.v4+json': 'some json',\n\t// \t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: ['application/vnd.vegalite.v4+json', 'text/html']\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'application/vnd.vegalite.v4+json': 'some json',\n\t// \t\t\t\t\t\t'application/javascript': 'some js',\n\t// \t\t\t\t\t\t'text/plain': 'some text',\n\t// \t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: [\n\t// \t\t\t\t\t'application/vnd.vegalite.v4+json',\n\t// \t\t\t\t\t'text/html',\n\t// \t\t\t\t\t'application/javascript',\n\t// \t\t\t\t\t'text/plain'\n\t// \t\t\t\t]\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'application/vnd.vegalite.v4+json': '', // Empty, should give preference to other mimetypes.\n\t// \t\t\t\t\t\t'application/javascript': 'some js',\n\t// \t\t\t\t\t\t'text/plain': 'some text',\n\t// \t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: [\n\t// \t\t\t\t\t'text/html',\n\t// \t\t\t\t\t'application/javascript',\n\t// \t\t\t\t\t'text/plain',\n\t// \t\t\t\t\t'application/vnd.vegalite.v4+json'\n\t// \t\t\t\t]\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'text/plain': 'some text',\n\t// \t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: ['text/html', 'text/plain']\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'application/javascript': 'some js',\n\t// \t\t\t\t\t\t'text/plain': 'some text'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: ['application/javascript', 'text/plain']\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'image/svg+xml': 'some svg',\n\t// \t\t\t\t\t\t'text/plain': 'some text'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: ['image/svg+xml', 'text/plain']\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'text/latex': 'some latex',\n\t// \t\t\t\t\t\t'text/plain': 'some text'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: ['text/latex', 'text/plain']\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'application/vnd.jupyter.widget-view+json': 'some widget',\n\t// \t\t\t\t\t\t'text/plain': 'some text'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: ['application/vnd.jupyter.widget-view+json', 'text/plain']\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\toutput: {\n\t// \t\t\t\t\tdata: {\n\t// \t\t\t\t\t\t'text/plain': 'some text',\n\t// \t\t\t\t\t\t'image/svg+xml': 'some svg',\n\t// \t\t\t\t\t\t'image/png': 'some png'\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\tmetadata: {},\n\t// \t\t\t\t\toutput_type: 'display_data'\n\t// \t\t\t\t},\n\t// \t\t\t\texpectedMimeTypesOrder: ['image/png', 'image/svg+xml', 'text/plain']\n\t// \t\t\t}\n\t// \t\t];\n\n\t// \t\tdataAndExpectedOrder.forEach(({ output, expectedMimeTypesOrder }) => {\n\t// \t\t\tconst sortedOutputs = jupyterCellOutputToCellOutput(output);\n\t// \t\t\tconst mimeTypes = sortedOutputs.items.map((item) => item.mime).join(',');\n\t// \t\t\tassert.equal(mimeTypes, expectedMimeTypesOrder.join(','));\n\t// \t\t});\n\t// \t});\n\t// });\n});\n"
  },
  {
    "path": "extensions/ipynb/src/test/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as testRunner from '../../../../test/integration/electron/testrunner';\n\nconst options: import('mocha').MochaOptions = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\n// These integration tests is being run in multiple environments (electron, web, remote)\n// so we need to set the suite name based on the environment as the suite name is used\n// for the test results file name\nlet suite = '';\nif (process.env.VSCODE_BROWSER) {\n\tsuite = `${process.env.VSCODE_BROWSER} Browser Integration .ipynb Tests`;\n} else if (process.env.REMOTE_VSCODE) {\n\tsuite = 'Remote Integration .ipynb Tests';\n} else {\n\tsuite = 'Integration .ipynb Tests';\n}\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\ntestRunner.configure(options);\n\nexport = testRunner;\n"
  },
  {
    "path": "extensions/ipynb/src/test/notebookModelStoreSync.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport * as sinon from 'sinon';\nimport { CancellationTokenSource, Disposable, EventEmitter, ExtensionContext, NotebookCellKind, NotebookDocumentChangeEvent, NotebookDocumentWillSaveEvent, NotebookEdit, NotebookRange, TextDocumentSaveReason, workspace, type CancellationToken, type NotebookCell, type NotebookDocument, type WorkspaceEdit, type WorkspaceEditMetadata } from 'vscode';\nimport { activate } from '../notebookModelStoreSync';\n\nsuite(`Notebook Model Store Sync`, () => {\n\tlet disposables: Disposable[] = [];\n\tlet onDidChangeNotebookDocument: EventEmitter<NotebookDocumentChangeEvent>;\n\tlet onWillSaveNotebookDocument: AsyncEmitter<NotebookDocumentWillSaveEvent>;\n\tlet notebook: NotebookDocument;\n\tlet token: CancellationTokenSource;\n\tlet editsApplied: WorkspaceEdit[] = [];\n\tlet pendingPromises: Promise<void>[] = [];\n\tlet cellMetadataUpdates: NotebookEdit[] = [];\n\tlet applyEditStub: sinon.SinonStub<[edit: WorkspaceEdit, metadata?: WorkspaceEditMetadata | undefined], Thenable<boolean>>;\n\tsetup(() => {\n\t\tdisposables = [];\n\t\tnotebook = {\n\t\t\tnotebookType: '',\n\t\t\tmetadata: {}\n\t\t} as NotebookDocument;\n\t\ttoken = new CancellationTokenSource();\n\t\tdisposables.push(token);\n\t\tsinon.stub(notebook, 'notebookType').get(() => 'jupyter-notebook');\n\t\tapplyEditStub = sinon.stub(workspace, 'applyEdit').callsFake((edit: WorkspaceEdit) => {\n\t\t\teditsApplied.push(edit);\n\t\t\treturn Promise.resolve(true);\n\t\t});\n\t\tconst context = { subscriptions: [] as Disposable[] } as ExtensionContext;\n\t\tonDidChangeNotebookDocument = new EventEmitter<NotebookDocumentChangeEvent>();\n\t\tdisposables.push(onDidChangeNotebookDocument);\n\t\tonWillSaveNotebookDocument = new AsyncEmitter<NotebookDocumentWillSaveEvent>();\n\n\t\tsinon.stub(NotebookEdit, 'updateCellMetadata').callsFake((index, metadata) => {\n\t\t\tconst edit = (NotebookEdit.updateCellMetadata as any).wrappedMethod.call(NotebookEdit, index, metadata);\n\t\t\tcellMetadataUpdates.push(edit);\n\t\t\treturn edit;\n\t\t}\n\t\t);\n\t\tsinon.stub(workspace, 'onDidChangeNotebookDocument').callsFake(cb =>\n\t\t\tonDidChangeNotebookDocument.event(cb)\n\t\t);\n\t\tsinon.stub(workspace, 'onWillSaveNotebookDocument').callsFake(cb =>\n\t\t\tonWillSaveNotebookDocument.event(cb)\n\t\t);\n\t\tactivate(context);\n\t});\n\tteardown(async () => {\n\t\tawait Promise.allSettled(pendingPromises);\n\t\teditsApplied = [];\n\t\tpendingPromises = [];\n\t\tcellMetadataUpdates = [];\n\t\tdisposables.forEach(d => d.dispose());\n\t\tdisposables = [];\n\t\tsinon.restore();\n\t});\n\n\ttest('Empty cell will not result in any updates', async () => {\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [],\n\t\t\tcellChanges: []\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 0);\n\t});\n\ttest('Adding cell for non Jupyter Notebook will not result in any updates', async () => {\n\t\tsinon.stub(notebook, 'notebookType').get(() => 'some-other-type');\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [\n\t\t\t\t{\n\t\t\t\t\trange: new NotebookRange(0, 0),\n\t\t\t\t\tremovedCells: [],\n\t\t\t\t\taddedCells: [cell]\n\t\t\t\t}\n\t\t\t],\n\t\t\tcellChanges: []\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 0);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 0);\n\t});\n\ttest('Adding cell to nbformat 4.2 notebook will result in adding empty metadata', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 2 }));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [\n\t\t\t\t{\n\t\t\t\t\trange: new NotebookRange(0, 0),\n\t\t\t\t\tremovedCells: [],\n\t\t\t\t\taddedCells: [cell]\n\t\t\t\t}\n\t\t\t],\n\t\t\tcellChanges: []\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 1);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 1);\n\t\tconst newMetadata = cellMetadataUpdates[0].newCellMetadata;\n\t\tassert.deepStrictEqual(newMetadata, { execution_count: null, metadata: {} });\n\t});\n\ttest('Added cell will have a cell id if nbformat is 4.5', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 }));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [\n\t\t\t\t{\n\t\t\t\t\trange: new NotebookRange(0, 0),\n\t\t\t\t\tremovedCells: [],\n\t\t\t\t\taddedCells: [cell]\n\t\t\t\t}\n\t\t\t],\n\t\t\tcellChanges: []\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 1);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 1);\n\t\tconst newMetadata = cellMetadataUpdates[0].newCellMetadata || {};\n\t\tassert.strictEqual(Object.keys(newMetadata).length, 3);\n\t\tassert.deepStrictEqual(newMetadata.execution_count, null);\n\t\tassert.deepStrictEqual(newMetadata.metadata, {});\n\t\tassert.ok(newMetadata.id);\n\t});\n\ttest('Do not add cell id if one already exists', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 }));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {\n\t\t\t\tid: '1234'\n\t\t\t},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [\n\t\t\t\t{\n\t\t\t\t\trange: new NotebookRange(0, 0),\n\t\t\t\t\tremovedCells: [],\n\t\t\t\t\taddedCells: [cell]\n\t\t\t\t}\n\t\t\t],\n\t\t\tcellChanges: []\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 1);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 1);\n\t\tconst newMetadata = cellMetadataUpdates[0].newCellMetadata || {};\n\t\tassert.strictEqual(Object.keys(newMetadata).length, 3);\n\t\tassert.deepStrictEqual(newMetadata.execution_count, null);\n\t\tassert.deepStrictEqual(newMetadata.metadata, {});\n\t\tassert.strictEqual(newMetadata.id, '1234');\n\t});\n\ttest('Do not perform any updates if cell id and metadata exists', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({ nbformat: 4, nbformat_minor: 5 }));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {\n\t\t\t\tid: '1234',\n\t\t\t\tmetadata: {}\n\t\t\t},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [\n\t\t\t\t{\n\t\t\t\t\trange: new NotebookRange(0, 0),\n\t\t\t\t\tremovedCells: [],\n\t\t\t\t\taddedCells: [cell]\n\t\t\t\t}\n\t\t\t],\n\t\t\tcellChanges: []\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 0);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 0);\n\t});\n\ttest('Store language id in custom metadata, whilst preserving existing metadata', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({\n\t\t\tnbformat: 4, nbformat_minor: 5,\n\t\t\tmetadata: {\n\t\t\t\tlanguage_info: { name: 'python' }\n\t\t\t}\n\t\t}));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {\n\t\t\t\tlanguageId: 'javascript'\n\t\t\t} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {\n\t\t\t\tid: '1234',\n\t\t\t\tmetadata: {\n\t\t\t\t\tcollapsed: true, scrolled: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [],\n\t\t\tcellChanges: [\n\t\t\t\t{\n\t\t\t\t\tcell,\n\t\t\t\t\tdocument: {\n\t\t\t\t\t\tlanguageId: 'javascript'\n\t\t\t\t\t} as any,\n\t\t\t\t\tmetadata: undefined,\n\t\t\t\t\toutputs: undefined,\n\t\t\t\t\texecutionSummary: undefined\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 1);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 1);\n\t\tconst newMetadata = cellMetadataUpdates[0].newCellMetadata || {};\n\t\tassert.strictEqual(Object.keys(newMetadata).length, 3);\n\t\tassert.deepStrictEqual(newMetadata.execution_count, null);\n\t\tassert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'javascript' } });\n\t\tassert.strictEqual(newMetadata.id, '1234');\n\t});\n\ttest('No changes when language is javascript', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({\n\t\t\tnbformat: 4, nbformat_minor: 5,\n\t\t\tmetadata: {\n\t\t\t\tlanguage_info: { name: 'javascript' }\n\t\t\t}\n\t\t}));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {\n\t\t\t\tlanguageId: 'javascript'\n\t\t\t} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {\n\t\t\t\tid: '1234',\n\t\t\t\tmetadata: {\n\t\t\t\t\tcollapsed: true, scrolled: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [],\n\t\t\tcellChanges: [\n\t\t\t\t{\n\t\t\t\t\tcell,\n\t\t\t\t\tdocument: undefined,\n\t\t\t\t\tmetadata: undefined,\n\t\t\t\t\toutputs: undefined,\n\t\t\t\t\texecutionSummary: undefined\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 0);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 0);\n\t});\n\ttest('Remove language from metadata when cell language matches kernel language', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({\n\t\t\tnbformat: 4, nbformat_minor: 5,\n\t\t\tmetadata: {\n\t\t\t\tlanguage_info: { name: 'javascript' }\n\t\t\t}\n\t\t}));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {\n\t\t\t\tlanguageId: 'javascript'\n\t\t\t} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {\n\t\t\t\tid: '1234',\n\t\t\t\tmetadata: {\n\t\t\t\t\tvscode: { languageId: 'python' },\n\t\t\t\t\tcollapsed: true, scrolled: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [],\n\t\t\tcellChanges: [\n\t\t\t\t{\n\t\t\t\t\tcell,\n\t\t\t\t\tdocument: {\n\t\t\t\t\t\tlanguageId: 'javascript'\n\t\t\t\t\t} as any,\n\t\t\t\t\tmetadata: undefined,\n\t\t\t\t\toutputs: undefined,\n\t\t\t\t\texecutionSummary: undefined\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 1);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 1);\n\t\tconst newMetadata = cellMetadataUpdates[0].newCellMetadata || {};\n\t\tassert.strictEqual(Object.keys(newMetadata).length, 3);\n\t\tassert.deepStrictEqual(newMetadata.execution_count, null);\n\t\tassert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true });\n\t\tassert.strictEqual(newMetadata.id, '1234');\n\t});\n\ttest('Update language in metadata', async () => {\n\t\tsinon.stub(notebook, 'metadata').get(() => ({\n\t\t\tnbformat: 4, nbformat_minor: 5,\n\t\t\tmetadata: {\n\t\t\t\tlanguage_info: { name: 'javascript' }\n\t\t\t}\n\t\t}));\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {\n\t\t\t\tlanguageId: 'powershell'\n\t\t\t} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {\n\t\t\t\tid: '1234',\n\t\t\t\tmetadata: {\n\t\t\t\t\tvscode: { languageId: 'python' },\n\t\t\t\t\tcollapsed: true, scrolled: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [],\n\t\t\tcellChanges: [\n\t\t\t\t{\n\t\t\t\t\tcell,\n\t\t\t\t\tdocument: {\n\t\t\t\t\t\tlanguageId: 'powershell'\n\t\t\t\t\t} as any,\n\t\t\t\t\tmetadata: undefined,\n\t\t\t\t\toutputs: undefined,\n\t\t\t\t\texecutionSummary: undefined\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 1);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 1);\n\t\tconst newMetadata = cellMetadataUpdates[0].newCellMetadata || {};\n\t\tassert.strictEqual(Object.keys(newMetadata).length, 3);\n\t\tassert.deepStrictEqual(newMetadata.execution_count, null);\n\t\tassert.deepStrictEqual(newMetadata.metadata, { collapsed: true, scrolled: true, vscode: { languageId: 'powershell' } });\n\t\tassert.strictEqual(newMetadata.id, '1234');\n\t});\n\n\ttest('Will save event without any changes', async () => {\n\t\tawait onWillSaveNotebookDocument.fireAsync({ notebook, reason: TextDocumentSaveReason.Manual }, token.token);\n\t});\n\ttest('Wait for pending updates to complete when saving', async () => {\n\t\tlet resolveApplyEditPromise: (value: boolean) => void;\n\t\tconst promise = new Promise<boolean>((resolve) => resolveApplyEditPromise = resolve);\n\t\tapplyEditStub.restore();\n\t\tsinon.stub(workspace, 'applyEdit').callsFake((edit: WorkspaceEdit) => {\n\t\t\teditsApplied.push(edit);\n\t\t\treturn promise;\n\t\t});\n\n\t\tconst cell: NotebookCell = {\n\t\t\tdocument: {} as any,\n\t\t\texecutionSummary: {},\n\t\t\tindex: 0,\n\t\t\tkind: NotebookCellKind.Code,\n\t\t\tmetadata: {},\n\t\t\tnotebook,\n\t\t\toutputs: []\n\t\t};\n\t\tconst e: NotebookDocumentChangeEvent = {\n\t\t\tnotebook,\n\t\t\tmetadata: undefined,\n\t\t\tcontentChanges: [\n\t\t\t\t{\n\t\t\t\t\trange: new NotebookRange(0, 0),\n\t\t\t\t\tremovedCells: [],\n\t\t\t\t\taddedCells: [cell]\n\t\t\t\t}\n\t\t\t],\n\t\t\tcellChanges: []\n\t\t};\n\n\t\tonDidChangeNotebookDocument.fire(e);\n\n\t\tassert.strictEqual(editsApplied.length, 1);\n\t\tassert.strictEqual(cellMetadataUpdates.length, 1);\n\n\t\t// Try to save.\n\t\tlet saveCompleted = false;\n\t\tconst saved = onWillSaveNotebookDocument.fireAsync({\n\t\t\tnotebook,\n\t\t\treason: TextDocumentSaveReason.Manual\n\t\t}, token.token);\n\t\tsaved.finally(() => saveCompleted = true);\n\t\tawait new Promise((resolve) => setTimeout(resolve, 10));\n\n\t\t// Verify we have not yet completed saving.\n\t\tassert.strictEqual(saveCompleted, false);\n\n\t\tresolveApplyEditPromise!(true);\n\t\tawait new Promise((resolve) => setTimeout(resolve, 1));\n\n\t\t// Should have completed saving.\n\t\tsaved.finally(() => saveCompleted = true);\n\t});\n\n\tinterface IWaitUntil {\n\t\ttoken: CancellationToken;\n\t\twaitUntil(thenable: Promise<unknown>): void;\n\t}\n\n\tinterface IWaitUntil {\n\t\ttoken: CancellationToken;\n\t\twaitUntil(thenable: Promise<unknown>): void;\n\t}\n\ttype IWaitUntilData<T> = Omit<Omit<T, 'waitUntil'>, 'token'>;\n\n\tclass AsyncEmitter<T extends IWaitUntil> {\n\t\tprivate listeners: ((d: T) => void)[] = [];\n\t\tget event(): (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]) => Disposable {\n\n\t\t\treturn (listener, thisArgs, _disposables) => {\n\t\t\t\tthis.listeners.push(listener.bind(thisArgs));\n\t\t\t\treturn {\n\t\t\t\t\tdispose: () => {\n\t\t\t\t\t\t//\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t\tdispose() {\n\t\t\tthis.listeners = [];\n\t\t}\n\t\tasync fireAsync(data: IWaitUntilData<T>, token: CancellationToken): Promise<void> {\n\t\t\tif (!this.listeners.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst promises: Promise<unknown>[] = [];\n\t\t\tthis.listeners.forEach(cb => {\n\t\t\t\tconst event = {\n\t\t\t\t\t...data,\n\t\t\t\t\ttoken,\n\t\t\t\t\twaitUntil: (thenable: Promise<WorkspaceEdit>) => {\n\t\t\t\t\t\tpromises.push(thenable);\n\t\t\t\t\t}\n\t\t\t\t} as T;\n\t\t\t\tcb(event);\n\t\t\t});\n\n\t\t\tawait Promise.all(promises);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "extensions/ipynb/src/test/serializers.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as sinon from 'sinon';\nimport type * as nbformat from '@jupyterlab/nbformat';\nimport * as assert from 'assert';\nimport * as vscode from 'vscode';\nimport { jupyterCellOutputToCellOutput, jupyterNotebookModelToNotebookData } from '../deserializers';\nimport { createMarkdownCellFromNotebookCell, getCellMetadata } from '../serializers';\n\nfunction deepStripProperties(obj: any, props: string[]) {\n\tfor (const prop in obj) {\n\t\tif (obj[prop]) {\n\t\t\tdelete obj[prop];\n\t\t} else if (typeof obj[prop] === 'object') {\n\t\t\tdeepStripProperties(obj[prop], props);\n\t\t}\n\t}\n}\nsuite(`ipynb serializer`, () => {\n\tlet disposables: vscode.Disposable[] = [];\n\tsetup(() => {\n\t\tdisposables = [];\n\t});\n\tteardown(async () => {\n\t\tdisposables.forEach(d => d.dispose());\n\t\tdisposables = [];\n\t\tsinon.restore();\n\t});\n\n\tconst base64EncodedImage =\n\t\t'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOUlZL6DwAB/wFSU1jVmgAAAABJRU5ErkJggg==';\n\ttest('Deserialize', async () => {\n\t\tconst cells: nbformat.ICell[] = [\n\t\t\t{\n\t\t\t\tcell_type: 'code',\n\t\t\t\texecution_count: 10,\n\t\t\t\toutputs: [],\n\t\t\t\tsource: 'print(1)',\n\t\t\t\tmetadata: {}\n\t\t\t},\n\t\t\t{\n\t\t\t\tcell_type: 'code',\n\t\t\t\toutputs: [],\n\t\t\t\tsource: 'print(2)',\n\t\t\t\tmetadata: {}\n\t\t\t},\n\t\t\t{\n\t\t\t\tcell_type: 'markdown',\n\t\t\t\tsource: '# HEAD',\n\t\t\t\tmetadata: {}\n\t\t\t}\n\t\t];\n\t\tconst notebook = jupyterNotebookModelToNotebookData({ cells }, 'python');\n\t\tassert.ok(notebook);\n\n\t\tconst expectedCodeCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, 'print(1)', 'python');\n\t\texpectedCodeCell.outputs = [];\n\t\texpectedCodeCell.metadata = { execution_count: 10, metadata: {} };\n\t\texpectedCodeCell.executionSummary = { executionOrder: 10 };\n\n\t\tconst expectedCodeCell2 = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, 'print(2)', 'python');\n\t\texpectedCodeCell2.outputs = [];\n\t\texpectedCodeCell2.metadata = { execution_count: null, metadata: {} };\n\t\texpectedCodeCell2.executionSummary = {};\n\n\t\tconst expectedMarkdownCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# HEAD', 'markdown');\n\t\texpectedMarkdownCell.outputs = [];\n\t\texpectedMarkdownCell.metadata = {\n\t\t\tmetadata: {}\n\t\t};\n\n\t\tassert.deepStrictEqual(notebook.cells, [expectedCodeCell, expectedCodeCell2, expectedMarkdownCell]);\n\t});\n\n\n\ttest('Serialize', async () => {\n\t\tconst markdownCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown');\n\t\tmarkdownCell.metadata = {\n\t\t\tattachments: {\n\t\t\t\t'image.png': {\n\t\t\t\t\t'image/png': 'abc'\n\t\t\t\t}\n\t\t\t},\n\t\t\tid: '123',\n\t\t\tmetadata: {\n\t\t\t\tfoo: 'bar'\n\t\t\t}\n\t\t};\n\n\t\tconst cellMetadata = getCellMetadata({ cell: markdownCell });\n\t\tassert.deepStrictEqual(cellMetadata, {\n\t\t\tid: '123',\n\t\t\tmetadata: {\n\t\t\t\tfoo: 'bar',\n\t\t\t},\n\t\t\tattachments: {\n\t\t\t\t'image.png': {\n\t\t\t\t\t'image/png': 'abc'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst markdownCell2 = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, '# header1', 'markdown');\n\t\tmarkdownCell2.metadata = {\n\t\t\tid: '123',\n\t\t\tmetadata: {\n\t\t\t\tfoo: 'bar'\n\t\t\t},\n\t\t\tattachments: {\n\t\t\t\t'image.png': {\n\t\t\t\t\t'image/png': 'abc'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst nbMarkdownCell = createMarkdownCellFromNotebookCell(markdownCell);\n\t\tconst nbMarkdownCell2 = createMarkdownCellFromNotebookCell(markdownCell2);\n\t\tassert.deepStrictEqual(nbMarkdownCell, nbMarkdownCell2);\n\n\t\tassert.deepStrictEqual(nbMarkdownCell, {\n\t\t\tcell_type: 'markdown',\n\t\t\tsource: ['# header1'],\n\t\t\tmetadata: {\n\t\t\t\tfoo: 'bar',\n\t\t\t},\n\t\t\tattachments: {\n\t\t\t\t'image.png': {\n\t\t\t\t\t'image/png': 'abc'\n\t\t\t\t}\n\t\t\t},\n\t\t\tid: '123'\n\t\t});\n\t});\n\n\tsuite('Outputs', () => {\n\t\tfunction validateCellOutputTranslation(\n\t\t\toutputs: nbformat.IOutput[],\n\t\t\texpectedOutputs: vscode.NotebookCellOutput[],\n\t\t\tpropertiesToExcludeFromComparison: string[] = []\n\t\t) {\n\t\t\tconst cells: nbformat.ICell[] = [\n\t\t\t\t{\n\t\t\t\t\tcell_type: 'code',\n\t\t\t\t\texecution_count: 10,\n\t\t\t\t\toutputs,\n\t\t\t\t\tsource: 'print(1)',\n\t\t\t\t\tmetadata: {}\n\t\t\t\t}\n\t\t\t];\n\t\t\tconst notebook = jupyterNotebookModelToNotebookData({ cells }, 'python');\n\n\t\t\t// OutputItems contain an `id` property generated by VSC.\n\t\t\t// Exclude that property when comparing.\n\t\t\tconst propertiesToExclude = propertiesToExcludeFromComparison.concat(['id']);\n\t\t\tconst actualOuts = notebook.cells[0].outputs;\n\t\t\tdeepStripProperties(actualOuts, propertiesToExclude);\n\t\t\tdeepStripProperties(expectedOutputs, propertiesToExclude);\n\t\t\tassert.deepStrictEqual(actualOuts, expectedOutputs);\n\t\t}\n\n\t\ttest('Empty output', () => {\n\t\t\tvalidateCellOutputTranslation([], []);\n\t\t});\n\n\t\ttest('Stream output', () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\toutput_type: 'stream',\n\t\t\t\t\t\tname: 'stderr',\n\t\t\t\t\t\ttext: 'Error'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\toutput_type: 'stream',\n\t\t\t\t\t\tname: 'stdout',\n\t\t\t\t\t\ttext: 'NoError'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('Error')], {\n\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t}),\n\t\t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('NoError')], {\n\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\t\ttest('Stream output and line endings', () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\toutput_type: 'stream',\n\t\t\t\t\t\tname: 'stdout',\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t'Line1\\n',\n\t\t\t\t\t\t\t'\\n',\n\t\t\t\t\t\t\t'Line3\\n',\n\t\t\t\t\t\t\t'Line4'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Line1\\n\\nLine3\\nLine4')], {\n\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t);\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\toutput_type: 'stream',\n\t\t\t\t\t\tname: 'stdout',\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t'Hello\\n',\n\t\t\t\t\t\t\t'Hello\\n',\n\t\t\t\t\t\t\t'Hello\\n',\n\t\t\t\t\t\t\t'Hello\\n',\n\t\t\t\t\t\t\t'Hello\\n',\n\t\t\t\t\t\t\t'Hello\\n'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout('Hello\\nHello\\nHello\\nHello\\nHello\\nHello\\n')], {\n\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\t\ttest('Multi-line Stream output', () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'stdout',\n\t\t\t\t\t\toutput_type: 'stream',\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t'Epoch 1/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 2/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 3/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 4/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 5/5\\n',\n\t\t\t\t\t\t\t'...\\n'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stdout(['Epoch 1/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 2/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 3/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 4/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 5/5\\n',\n\t\t\t\t\t\t'...\\n'].join(''))], {\n\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('Multi-line Stream output (last empty line should not be saved in ipynb)', () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'stderr',\n\t\t\t\t\t\toutput_type: 'stream',\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t'Epoch 1/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 2/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 3/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 4/5\\n',\n\t\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t\t'Epoch 5/5\\n',\n\t\t\t\t\t\t\t'...\\n'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr(['Epoch 1/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 2/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 3/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 4/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t'Epoch 5/5\\n',\n\t\t\t\t\t\t'...\\n',\n\t\t\t\t\t\t// This last empty line should not be saved in ipynb.\n\t\t\t\t\t\t'\\n'].join(''))], {\n\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('Streamed text with Ansi characters', async () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'stderr',\n\t\t\t\t\t\ttext: '\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n',\n\t\t\t\t\t\toutput_type: 'stream'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t[vscode.NotebookCellOutputItem.stderr('\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n')],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('Streamed text with angle bracket characters', async () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'stderr',\n\t\t\t\t\t\ttext: '1 is < 2',\n\t\t\t\t\t\toutput_type: 'stream'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput([vscode.NotebookCellOutputItem.stderr('1 is < 2')], {\n\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('Streamed text with angle bracket characters and ansi chars', async () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'stderr',\n\t\t\t\t\t\ttext: '1 is < 2\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n',\n\t\t\t\t\t\toutput_type: 'stream'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t[vscode.NotebookCellOutputItem.stderr('1 is < 2\\u001b[K\\u001b[33m✅ \\u001b[0m Loading\\n')],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\toutputType: 'stream'\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\ttest('Error', async () => {\n\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tename: 'Error Name',\n\t\t\t\t\t\tevalue: 'Error Value',\n\t\t\t\t\t\ttraceback: ['stack1', 'stack2', 'stack3'],\n\t\t\t\t\t\toutput_type: 'error'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tvscode.NotebookCellOutputItem.error({\n\t\t\t\t\t\t\t\tname: 'Error Name',\n\t\t\t\t\t\t\t\tmessage: 'Error Value',\n\t\t\t\t\t\t\t\tstack: ['stack1', 'stack2', 'stack3'].join('\\n')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\toutputType: 'error',\n\t\t\t\t\t\t\toriginalError: {\n\t\t\t\t\t\t\t\tename: 'Error Name',\n\t\t\t\t\t\t\t\tevalue: 'Error Value',\n\t\t\t\t\t\t\t\ttraceback: ['stack1', 'stack2', 'stack3'],\n\t\t\t\t\t\t\t\toutput_type: 'error'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t);\n\t\t});\n\n\t\t['display_data', 'execute_result'].forEach(output_type => {\n\t\t\tsuite(`Rich output for output_type = ${output_type}`, () => {\n\t\t\t\t// Properties to exclude when comparing.\n\t\t\t\tlet propertiesToExcludeFromComparison: string[] = [];\n\t\t\t\tsetup(() => {\n\t\t\t\t\tif (output_type === 'display_data') {\n\t\t\t\t\t\t// With display_data the execution_count property will never exist in the output.\n\t\t\t\t\t\t// We can ignore that (as it will never exist).\n\t\t\t\t\t\t// But we leave it in the case of `output_type === 'execute_result'`\n\t\t\t\t\t\tpropertiesToExcludeFromComparison = ['execution_count', 'executionCount'];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\ttest('Text mimeType output', async () => {\n\t\t\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t'text/plain': 'Hello World!'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toutput_type,\n\t\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t\t\texecution_count: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from('Hello World!', 'utf8'), 'text/plain')],\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\toutputType: output_type,\n\t\t\t\t\t\t\t\t\tmetadata: {}, // display_data & execute_result always have metadata.\n\t\t\t\t\t\t\t\t\texecutionCount: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tpropertiesToExcludeFromComparison\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\ttest('png,jpeg images', async () => {\n\t\t\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\texecution_count: 1,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t'image/png': base64EncodedImage,\n\t\t\t\t\t\t\t\t\t'image/jpeg': base64EncodedImage\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t\t\toutput_type\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tnew vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png'),\n\t\t\t\t\t\t\t\t\tnew vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/jpeg')\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\texecutionCount: 1,\n\t\t\t\t\t\t\t\t\toutputType: output_type,\n\t\t\t\t\t\t\t\t\tmetadata: {} // display_data & execute_result always have metadata.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tpropertiesToExcludeFromComparison\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\ttest('png image with a light background', async () => {\n\t\t\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\texecution_count: 1,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tneeds_background: 'light'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toutput_type\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\texecutionCount: 1,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\tneeds_background: 'light'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\toutputType: output_type\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tpropertiesToExcludeFromComparison\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\ttest('png image with a dark background', async () => {\n\t\t\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\texecution_count: 1,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tneeds_background: 'dark'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toutput_type\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\texecutionCount: 1,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\tneeds_background: 'dark'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\toutputType: output_type\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tpropertiesToExcludeFromComparison\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\ttest('png image with custom dimensions', async () => {\n\t\t\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\texecution_count: 1,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t'image/png': { height: '111px', width: '999px' }\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toutput_type\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\texecutionCount: 1,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\t'image/png': { height: '111px', width: '999px' }\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\toutputType: output_type\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tpropertiesToExcludeFromComparison\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\ttest('png allowed to scroll', async () => {\n\t\t\t\t\tvalidateCellOutputTranslation(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\texecution_count: 1,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t'image/png': base64EncodedImage\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tunconfined: true,\n\t\t\t\t\t\t\t\t\t'image/png': { width: '999px' }\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toutput_type\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tnew vscode.NotebookCellOutput(\n\t\t\t\t\t\t\t\t[new vscode.NotebookCellOutputItem(Buffer.from(base64EncodedImage, 'base64'), 'image/png')],\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\texecutionCount: 1,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\tunconfined: true,\n\t\t\t\t\t\t\t\t\t\t'image/png': { width: '999px' }\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\toutputType: output_type\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t],\n\t\t\t\t\t\tpropertiesToExcludeFromComparison\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tsuite('Output Order', () => {\n\t\ttest('Verify order of outputs', async () => {\n\t\t\tconst dataAndExpectedOrder: { output: nbformat.IDisplayData; expectedMimeTypesOrder: string[] }[] = [\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'application/vnd.vegalite.v4+json': 'some json',\n\t\t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: ['application/vnd.vegalite.v4+json', 'text/html']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'application/vnd.vegalite.v4+json': 'some json',\n\t\t\t\t\t\t\t'application/javascript': 'some js',\n\t\t\t\t\t\t\t'text/plain': 'some text',\n\t\t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: [\n\t\t\t\t\t\t'application/vnd.vegalite.v4+json',\n\t\t\t\t\t\t'text/html',\n\t\t\t\t\t\t'application/javascript',\n\t\t\t\t\t\t'text/plain'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'application/vnd.vegalite.v4+json': '', // Empty, should give preference to other mimetypes.\n\t\t\t\t\t\t\t'application/javascript': 'some js',\n\t\t\t\t\t\t\t'text/plain': 'some text',\n\t\t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: [\n\t\t\t\t\t\t'text/html',\n\t\t\t\t\t\t'application/javascript',\n\t\t\t\t\t\t'text/plain',\n\t\t\t\t\t\t'application/vnd.vegalite.v4+json'\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'text/plain': 'some text',\n\t\t\t\t\t\t\t'text/html': '<a>Hello</a>'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: ['text/html', 'text/plain']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'application/javascript': 'some js',\n\t\t\t\t\t\t\t'text/plain': 'some text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: ['application/javascript', 'text/plain']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'image/svg+xml': 'some svg',\n\t\t\t\t\t\t\t'text/plain': 'some text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: ['image/svg+xml', 'text/plain']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'text/latex': 'some latex',\n\t\t\t\t\t\t\t'text/plain': 'some text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: ['text/latex', 'text/plain']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'application/vnd.jupyter.widget-view+json': 'some widget',\n\t\t\t\t\t\t\t'text/plain': 'some text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: ['application/vnd.jupyter.widget-view+json', 'text/plain']\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t'text/plain': 'some text',\n\t\t\t\t\t\t\t'image/svg+xml': 'some svg',\n\t\t\t\t\t\t\t'image/png': 'some png'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\toutput_type: 'display_data'\n\t\t\t\t\t},\n\t\t\t\t\texpectedMimeTypesOrder: ['image/png', 'image/svg+xml', 'text/plain']\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tdataAndExpectedOrder.forEach(({ output, expectedMimeTypesOrder }) => {\n\t\t\t\tconst sortedOutputs = jupyterCellOutputToCellOutput(output);\n\t\t\t\tconst mimeTypes = sortedOutputs.items.map((item) => item.mime).join(',');\n\t\t\t\tassert.equal(mimeTypes, expectedMimeTypesOrder.join(','));\n\t\t\t});\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/ipynb/src/types.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ndeclare module '@enonic/fnv-plus';\n"
  },
  {
    "path": "extensions/ipynb/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"lib\": [\"dom\"]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/jake/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/jake/.vscodeignore",
    "content": "src/**\ntsconfig.json\nout/**\nextension.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/jake/README.md",
    "content": "# Jake - JavaScript build tool\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension supports running [Jake](http://jakejs.com/) tasks defined in a `Jakefile.js` file as [VS Code tasks](https://code.visualstudio.com/docs/editor/tasks). Jake tasks with the name 'build', 'compile', or 'watch' are treated as build tasks.\n\nTo run Jake tasks, use the **Tasks** menu.\n\n## Settings\n\n- `jake.autoDetect` - Enable detecting tasks from `Jakefile.js` files, the default is `on`.\n"
  },
  {
    "path": "extensions/jake/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\tmain: './src/main.ts',\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t}\n});\n"
  },
  {
    "path": "extensions/jake/package.json",
    "content": "{\n  \"name\": \"jake\",\n  \"publisher\": \"vscode\",\n  \"description\": \"%description%\",\n  \"displayName\": \"%displayName%\",\n  \"icon\": \"images/cowboy_hat.png\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\n    \"Other\"\n  ],\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:jake\",\n    \"watch\": \"gulp watch-extension:jake\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"main\": \"./out/main\",\n  \"activationEvents\": [\n    \"onTaskType:jake\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"configuration\": {\n      \"id\": \"jake\",\n      \"type\": \"object\",\n      \"title\": \"Jake\",\n      \"properties\": {\n        \"jake.autoDetect\": {\n          \"scope\": \"application\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"off\",\n            \"on\"\n          ],\n          \"default\": \"off\",\n          \"description\": \"%config.jake.autoDetect%\"\n        }\n      }\n    },\n    \"taskDefinitions\": [\n      {\n        \"type\": \"jake\",\n        \"required\": [\n          \"task\"\n        ],\n        \"properties\": {\n          \"task\": {\n            \"type\": \"string\",\n            \"description\": \"%jake.taskDefinition.type.description%\"\n          },\n          \"file\": {\n            \"type\": \"string\",\n            \"description\": \"%jake.taskDefinition.file.description%\"\n          }\n        },\n        \"when\": \"shellExecutionSupported\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/jake/package.nls.json",
    "content": "{\n\t\"description\": \"Extension to add Jake capabilities to VS Code.\",\n\t\"displayName\": \"Jake support for VS Code\",\n\t\"jake.taskDefinition.type.description\": \"The Jake task to customize.\",\n\t\"jake.taskDefinition.file.description\": \"The Jake file that provides the task. Can be omitted.\",\n\t\"config.jake.autoDetect\": \"Controls enablement of Jake task detection. Jake task detection can cause files in any open workspace to be executed.\"\n}\n"
  },
  {
    "path": "extensions/jake/src/main.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as cp from 'child_process';\nimport * as vscode from 'vscode';\n\ntype AutoDetect = 'on' | 'off';\n\nfunction exists(file: string): Promise<boolean> {\n\treturn new Promise<boolean>((resolve, _reject) => {\n\t\tfs.exists(file, (value) => {\n\t\t\tresolve(value);\n\t\t});\n\t});\n}\n\nfunction exec(command: string, options: cp.ExecOptions): Promise<{ stdout: string; stderr: string }> {\n\treturn new Promise<{ stdout: string; stderr: string }>((resolve, reject) => {\n\t\tcp.exec(command, options, (error, stdout, stderr) => {\n\t\t\tif (error) {\n\t\t\t\treject({ error, stdout, stderr });\n\t\t\t}\n\t\t\tresolve({ stdout, stderr });\n\t\t});\n\t});\n}\n\nconst buildNames: string[] = ['build', 'compile', 'watch'];\nfunction isBuildTask(name: string): boolean {\n\tfor (const buildName of buildNames) {\n\t\tif (name.indexOf(buildName) !== -1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nconst testNames: string[] = ['test'];\nfunction isTestTask(name: string): boolean {\n\tfor (const testName of testNames) {\n\t\tif (name.indexOf(testName) !== -1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nlet _channel: vscode.OutputChannel;\nfunction getOutputChannel(): vscode.OutputChannel {\n\tif (!_channel) {\n\t\t_channel = vscode.window.createOutputChannel('Jake Auto Detection');\n\t}\n\treturn _channel;\n}\n\nfunction showError() {\n\tvscode.window.showWarningMessage(vscode.l10n.t(\"Problem finding jake tasks. See the output for more information.\"),\n\t\tvscode.l10n.t(\"Go to output\")).then(() => {\n\t\t\tgetOutputChannel().show(true);\n\t\t});\n}\n\nasync function findJakeCommand(rootPath: string): Promise<string> {\n\tlet jakeCommand: string;\n\tconst platform = process.platform;\n\tif (platform === 'win32' && await exists(path.join(rootPath!, 'node_modules', '.bin', 'jake.cmd'))) {\n\t\tjakeCommand = path.join('.', 'node_modules', '.bin', 'jake.cmd');\n\t} else if ((platform === 'linux' || platform === 'darwin') && await exists(path.join(rootPath!, 'node_modules', '.bin', 'jake'))) {\n\t\tjakeCommand = path.join('.', 'node_modules', '.bin', 'jake');\n\t} else {\n\t\tjakeCommand = 'jake';\n\t}\n\treturn jakeCommand;\n}\n\ninterface JakeTaskDefinition extends vscode.TaskDefinition {\n\ttask: string;\n\tfile?: string;\n}\n\nclass FolderDetector {\n\n\tprivate fileWatcher: vscode.FileSystemWatcher | undefined;\n\tprivate promise: Thenable<vscode.Task[]> | undefined;\n\n\tconstructor(\n\t\tprivate _workspaceFolder: vscode.WorkspaceFolder,\n\t\tprivate _jakeCommand: Promise<string>) {\n\t}\n\n\tpublic get workspaceFolder(): vscode.WorkspaceFolder {\n\t\treturn this._workspaceFolder;\n\t}\n\n\tpublic isEnabled(): boolean {\n\t\treturn vscode.workspace.getConfiguration('jake', this._workspaceFolder.uri).get<AutoDetect>('autoDetect') === 'on';\n\t}\n\n\tpublic start(): void {\n\t\tconst pattern = path.join(this._workspaceFolder.uri.fsPath, '{node_modules,Jakefile,Jakefile.js}');\n\t\tthis.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern);\n\t\tthis.fileWatcher.onDidChange(() => this.promise = undefined);\n\t\tthis.fileWatcher.onDidCreate(() => this.promise = undefined);\n\t\tthis.fileWatcher.onDidDelete(() => this.promise = undefined);\n\t}\n\n\tpublic async getTasks(): Promise<vscode.Task[]> {\n\t\tif (this.isEnabled()) {\n\t\t\tif (!this.promise) {\n\t\t\t\tthis.promise = this.computeTasks();\n\t\t\t}\n\t\t\treturn this.promise;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tpublic async getTask(_task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\tconst jakeTask = (<any>_task.definition).task;\n\t\tif (jakeTask) {\n\t\t\tconst kind: JakeTaskDefinition = (<any>_task.definition);\n\t\t\tconst options: vscode.ShellExecutionOptions = { cwd: this.workspaceFolder.uri.fsPath };\n\t\t\tconst task = new vscode.Task(kind, this.workspaceFolder, jakeTask, 'jake', new vscode.ShellExecution(await this._jakeCommand, [jakeTask], options));\n\t\t\treturn task;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async computeTasks(): Promise<vscode.Task[]> {\n\t\tconst rootPath = this._workspaceFolder.uri.scheme === 'file' ? this._workspaceFolder.uri.fsPath : undefined;\n\t\tconst emptyTasks: vscode.Task[] = [];\n\t\tif (!rootPath) {\n\t\t\treturn emptyTasks;\n\t\t}\n\t\tlet jakefile = path.join(rootPath, 'Jakefile');\n\t\tif (!await exists(jakefile)) {\n\t\t\tjakefile = path.join(rootPath, 'Jakefile.js');\n\t\t\tif (! await exists(jakefile)) {\n\t\t\t\treturn emptyTasks;\n\t\t\t}\n\t\t}\n\n\t\tconst commandLine = `${await this._jakeCommand} --tasks`;\n\t\ttry {\n\t\t\tconst { stdout, stderr } = await exec(commandLine, { cwd: rootPath });\n\t\t\tif (stderr) {\n\t\t\t\tgetOutputChannel().appendLine(stderr);\n\t\t\t\tshowError();\n\t\t\t}\n\t\t\tconst result: vscode.Task[] = [];\n\t\t\tif (stdout) {\n\t\t\t\tconst lines = stdout.split(/\\r{0,1}\\n/);\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tif (line.length === 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst regExp = /^jake\\s+([^\\s]+)\\s/g;\n\t\t\t\t\tconst matches = regExp.exec(line);\n\t\t\t\t\tif (matches && matches.length === 2) {\n\t\t\t\t\t\tconst taskName = matches[1];\n\t\t\t\t\t\tconst kind: JakeTaskDefinition = {\n\t\t\t\t\t\t\ttype: 'jake',\n\t\t\t\t\t\t\ttask: taskName\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst options: vscode.ShellExecutionOptions = { cwd: this.workspaceFolder.uri.fsPath };\n\t\t\t\t\t\tconst task = new vscode.Task(kind, taskName, 'jake', new vscode.ShellExecution(`${await this._jakeCommand} ${taskName}`, options));\n\t\t\t\t\t\tresult.push(task);\n\t\t\t\t\t\tconst lowerCaseLine = line.toLowerCase();\n\t\t\t\t\t\tif (isBuildTask(lowerCaseLine)) {\n\t\t\t\t\t\t\ttask.group = vscode.TaskGroup.Build;\n\t\t\t\t\t\t} else if (isTestTask(lowerCaseLine)) {\n\t\t\t\t\t\t\ttask.group = vscode.TaskGroup.Test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst channel = getOutputChannel();\n\t\t\tif (err.stderr) {\n\t\t\t\tchannel.appendLine(err.stderr);\n\t\t\t}\n\t\t\tif (err.stdout) {\n\t\t\t\tchannel.appendLine(err.stdout);\n\t\t\t}\n\t\t\tchannel.appendLine(vscode.l10n.t(\"Auto detecting Jake for folder {0} failed with error: {1}', this.workspaceFolder.name, err.error ? err.error.toString() : 'unknown\"));\n\t\t\tshowError();\n\t\t\treturn emptyTasks;\n\t\t}\n\t}\n\n\tpublic dispose() {\n\t\tthis.promise = undefined;\n\t\tif (this.fileWatcher) {\n\t\t\tthis.fileWatcher.dispose();\n\t\t}\n\t}\n}\n\nclass TaskDetector {\n\n\tprivate taskProvider: vscode.Disposable | undefined;\n\tprivate detectors: Map<string, FolderDetector> = new Map();\n\n\tconstructor() {\n\t}\n\n\tpublic start(): void {\n\t\tconst folders = vscode.workspace.workspaceFolders;\n\t\tif (folders) {\n\t\t\tthis.updateWorkspaceFolders(folders, []);\n\t\t}\n\t\tvscode.workspace.onDidChangeWorkspaceFolders((event) => this.updateWorkspaceFolders(event.added, event.removed));\n\t\tvscode.workspace.onDidChangeConfiguration(this.updateConfiguration, this);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this.taskProvider) {\n\t\t\tthis.taskProvider.dispose();\n\t\t\tthis.taskProvider = undefined;\n\t\t}\n\t\tthis.detectors.clear();\n\t}\n\n\tprivate updateWorkspaceFolders(added: readonly vscode.WorkspaceFolder[], removed: readonly vscode.WorkspaceFolder[]): void {\n\t\tfor (const remove of removed) {\n\t\t\tconst detector = this.detectors.get(remove.uri.toString());\n\t\t\tif (detector) {\n\t\t\t\tdetector.dispose();\n\t\t\t\tthis.detectors.delete(remove.uri.toString());\n\t\t\t}\n\t\t}\n\t\tfor (const add of added) {\n\t\t\tconst detector = new FolderDetector(add, findJakeCommand(add.uri.fsPath));\n\t\t\tthis.detectors.set(add.uri.toString(), detector);\n\t\t\tif (detector.isEnabled()) {\n\t\t\t\tdetector.start();\n\t\t\t}\n\t\t}\n\t\tthis.updateProvider();\n\t}\n\n\tprivate updateConfiguration(): void {\n\t\tfor (const detector of this.detectors.values()) {\n\t\t\tdetector.dispose();\n\t\t\tthis.detectors.delete(detector.workspaceFolder.uri.toString());\n\t\t}\n\t\tconst folders = vscode.workspace.workspaceFolders;\n\t\tif (folders) {\n\t\t\tfor (const folder of folders) {\n\t\t\t\tif (!this.detectors.has(folder.uri.toString())) {\n\t\t\t\t\tconst detector = new FolderDetector(folder, findJakeCommand(folder.uri.fsPath));\n\t\t\t\t\tthis.detectors.set(folder.uri.toString(), detector);\n\t\t\t\t\tif (detector.isEnabled()) {\n\t\t\t\t\t\tdetector.start();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.updateProvider();\n\t}\n\n\tprivate updateProvider(): void {\n\t\tif (!this.taskProvider && this.detectors.size > 0) {\n\t\t\tconst thisCapture = this;\n\t\t\tthis.taskProvider = vscode.tasks.registerTaskProvider('jake', {\n\t\t\t\tprovideTasks(): Promise<vscode.Task[]> {\n\t\t\t\t\treturn thisCapture.getTasks();\n\t\t\t\t},\n\t\t\t\tresolveTask(_task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\t\t\t\treturn thisCapture.getTask(_task);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse if (this.taskProvider && this.detectors.size === 0) {\n\t\t\tthis.taskProvider.dispose();\n\t\t\tthis.taskProvider = undefined;\n\t\t}\n\t}\n\n\tpublic getTasks(): Promise<vscode.Task[]> {\n\t\treturn this.computeTasks();\n\t}\n\n\tprivate computeTasks(): Promise<vscode.Task[]> {\n\t\tif (this.detectors.size === 0) {\n\t\t\treturn Promise.resolve([]);\n\t\t} else if (this.detectors.size === 1) {\n\t\t\treturn this.detectors.values().next().value!.getTasks();\n\t\t} else {\n\t\t\tconst promises: Promise<vscode.Task[]>[] = [];\n\t\t\tfor (const detector of this.detectors.values()) {\n\t\t\t\tpromises.push(detector.getTasks().then((value) => value, () => []));\n\t\t\t}\n\t\t\treturn Promise.all(promises).then((values) => {\n\t\t\t\tconst result: vscode.Task[] = [];\n\t\t\t\tfor (const tasks of values) {\n\t\t\t\t\tif (tasks && tasks.length > 0) {\n\t\t\t\t\t\tresult.push(...tasks);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic async getTask(task: vscode.Task): Promise<vscode.Task | undefined> {\n\t\tif (this.detectors.size === 0) {\n\t\t\treturn undefined;\n\t\t} else if (this.detectors.size === 1) {\n\t\t\treturn this.detectors.values().next().value!.getTask(task);\n\t\t} else {\n\t\t\tif ((task.scope === vscode.TaskScope.Workspace) || (task.scope === vscode.TaskScope.Global)) {\n\t\t\t\t// Not supported, we don't have enough info to create the task.\n\t\t\t\treturn undefined;\n\t\t\t} else if (task.scope) {\n\t\t\t\tconst detector = this.detectors.get(task.scope.uri.toString());\n\t\t\t\tif (detector) {\n\t\t\t\t\treturn detector.getTask(task);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nlet detector: TaskDetector;\nexport function activate(_context: vscode.ExtensionContext): void {\n\tdetector = new TaskDetector();\n\tdetector.start();\n}\n\nexport function deactivate(): void {\n\tdetector.dispose();\n}\n"
  },
  {
    "path": "extensions/jake/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/java/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/java/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"redhat-developer/vscode-java\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/redhat-developer/vscode-java\",\n\t\t\t\t\t\"commitHash\": \"f09b712f5d6d6339e765f58c8dfab3f78a378183\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) 2014 GitHub Inc.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining\",\n\t\t\t\t\"a copy of this software and associated documentation files (the\",\n\t\t\t\t\"\\\"Software\\\"), to deal in the Software without restriction, including\",\n\t\t\t\t\"without limitation the rights to use, copy, modify, merge, publish,\",\n\t\t\t\t\"distribute, sublicense, and/or sell copies of the Software, and to\",\n\t\t\t\t\"permit persons to whom the Software is furnished to do so, subject to\",\n\t\t\t\t\"the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be\",\n\t\t\t\t\"included in all copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\",\n\t\t\t\t\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\",\n\t\t\t\t\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\",\n\t\t\t\t\"NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\",\n\t\t\t\t\"LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\",\n\t\t\t\t\"OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\",\n\t\t\t\t\"WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\",\n\t\t\t\t\"\",\n\t\t\t\t\"--------------------------------------------------------------------\",\n\t\t\t\t\"\",\n\t\t\t\t\"This package was derived from a TextMate bundle located at\",\n\t\t\t\t\"https://github.com/textmate/java.tmbundle and distributed under the following\",\n\t\t\t\t\"license, located in `README.mdown`:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\"\n\t\t\t],\n\t\t\t\"description\": \"This grammar was derived from https://github.com/atom/language-java/blob/master/grammars/java.cson.\",\n\t\t\t\"version\": \"1.26.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/java/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"/**\",\n\t\t\t\"close\": \" */\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*//\\\\s*(?:(?:#?region\\\\b)|(?:<editor-fold\\\\b))\",\n\t\t\t\"end\": \"^\\\\s*//\\\\s*(?:(?:#?endregion\\\\b)|(?:</editor-fold>))\"\n\t\t}\n\t},\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t// e.g. /** | */\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*\\\\*/$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g. /** ...|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  * ...|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*([ ]([^\\\\*]|\\\\*(?!/))*)?$\"\n\t\t\t},\n\t\t\t\"previousLineText\": {\n\t\t\t\t\"pattern\": \"(?=^(\\\\s*(/\\\\*\\\\*|\\\\*)).*)(?=(?!(\\\\s*\\\\*/)))\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"* \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  */|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*/\\\\s*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  *-----*/|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*[^/]*\\\\*/\\\\s*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*(\\\\bcase\\\\s.+:|\\\\bdefault:)$\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*(\\\\bcase\\\\b|\\\\bdefault\\\\b))\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indent\"\n\t\t\t}\n\t\t},\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/java/package.json",
    "content": "{\n  \"name\": \"java\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin redhat-developer/vscode-java language-support/java/java.tmLanguage.json ./syntaxes/java.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"java\",\n        \"extensions\": [\n          \".java\",\n          \".jav\"\n        ],\n        \"aliases\": [\n          \"Java\",\n          \"java\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"java\",\n        \"scopeName\": \"source.java\",\n        \"path\": \"./syntaxes/java.tmLanguage.json\"\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"java\",\n        \"path\": \"./snippets/java.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/java/package.nls.json",
    "content": "{\n\t\"displayName\": \"Java Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in Java files.\"\n}\n"
  },
  {
    "path": "extensions/java/snippets/java.code-snippets",
    "content": "{\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"//#region\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"//#endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t}\n}\n"
  },
  {
    "path": "extensions/java/syntaxes/java.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/redhat-developer/vscode-java/blob/master/language-support/java/java.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/redhat-developer/vscode-java/commit/f09b712f5d6d6339e765f58c8dfab3f78a378183\",\n\t\"name\": \"Java\",\n\t\"scopeName\": \"source.java\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"begin\": \"\\\\b(package)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.package.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(;)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.package.java\",\n\t\t\t\"contentName\": \"storage.modifier.package.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\.)\\\\s*\\\\.|\\\\.(?=\\\\s*;)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!_)_(?=\\\\s*(\\\\.|;))|\\\\b\\\\d+|-+\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[A-Z]+\",\n\t\t\t\t\t\"name\": \"invalid.deprecated.package_name_not_lowercase.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\b(?<!\\\\$)\\n(abstract|assert|boolean|break|byte|case|catch|char|class|\\nconst|continue|default|do|double|else|enum|extends|final|\\nfinally|float|for|goto|if|implements|import|instanceof|int|\\ninterface|long|native|new|non-sealed|package|permits|private|protected|public|\\nreturn|sealed|short|static|strictfp|super|switch|syncronized|this|\\nthrow|throws|transient|try|void|volatile|while|yield|\\ntrue|false|null)\\\\b\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\"name\": \"punctuation.separator.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(import)\\\\b\\\\s*\\\\b(static)?\\\\b\\\\s\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.import.java\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(;)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.import.java\",\n\t\t\t\"contentName\": \"storage.modifier.import.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\.)\\\\s*\\\\.|\\\\.(?=\\\\s*;)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\s*\\\\*\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!_)_(?=\\\\s*(\\\\.|;))|\\\\b\\\\d+|-+\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\b(?<!\\\\$)\\n(abstract|assert|boolean|break|byte|case|catch|char|class|\\nconst|continue|default|do|double|else|enum|extends|final|\\nfinally|float|for|goto|if|implements|import|instanceof|int|\\ninterface|long|native|new|non-sealed|package|permits|private|protected|public|\\nreturn|sealed|short|static|strictfp|super|switch|syncronized|this|\\nthrow|throws|transient|try|void|volatile|while|yield|\\ntrue|false|null)\\\\b\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character_not_allowed_here.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\"name\": \"punctuation.separator.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\"name\": \"variable.language.wildcard.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments-javadoc\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#code\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#module\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"all-types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#primitive-arrays\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#primitive-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"annotations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)\\\\s*([^\\\\s(]+))(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.annotation.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.annotation-arguments.begin.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.annotation-arguments.end.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.declaration.annotation.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.other.key.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(\\\\w*)\\\\s*(=)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@)(interface)\\\\s+(\\\\w*)|((@)\\\\s*(\\\\w+))\",\n\t\t\t\t\t\"name\": \"meta.declaration.annotation.java\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.annotation.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.annotation.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous-block-and-instance-initializer\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous-classes-and-new\": {\n\t\t\t\"begin\": \"\\\\bnew\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.new.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|\\\\)|\\\\]|\\\\.|,|\\\\?|:|}|\\\\+|\\\\-|\\\\*|\\\\/(?!\\\\/|\\\\*)|%|!|&|\\\\||\\\\^|=)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#all-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\",\n\t\t\t\t\t\"end\": \"(?=;|\\\\)|\\\\]|\\\\.|,|\\\\?|:|}|\\\\+|\\\\-|\\\\*|\\\\/(?!\\\\/|\\\\*)|%|!|&|\\\\||\\\\^|=)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.inner-class.begin.bracket.curly.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.inner-class.end.bracket.curly.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.inner-class.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#class-body\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\])\",\n\t\t\t\t\t\"end\": \"(?=;|\\\\)|\\\\]|\\\\.|,|\\\\?|:|}|\\\\+|\\\\-|\\\\*|\\\\/(?!\\\\/|\\\\*)|%|!|&|\\\\||\\\\^|=)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.array-initializer.begin.bracket.curly.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.array-initializer.end.bracket.curly.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.array-initializer.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assertions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(assert)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.assert.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"name\": \"meta.declaration.assertion.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assert.expression-separator.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class\": {\n\t\t\t\"begin\": \"(?=\\\\w?[\\\\w\\\\s-]*\\\\b(?:class|(?<!@)interface|enum)\\\\s+[\\\\w$]+)\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.class.end.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.class.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(class|(?<!@)interface|enum)\\\\s+([\\\\w$]+)\",\n\t\t\t\t\t\"name\": \"meta.class.identifier.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"extends\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.extends.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?={|implements|permits)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.inherited.classes.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(implements)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.implements.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*extends|permits|\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.implemented.interfaces.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(permits)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.permits.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*extends|implements|\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.permits.classes.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.class.begin.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"contentName\": \"meta.class.body.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-javadoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enums\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#static-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-fields-and-methods\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-fields-and-methods\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\=)\",\n\t\t\t\t\t\"end\": \"(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#methods\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enums\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#record\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous-block-and-instance-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#try-catch-finally\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assertions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants-and-special-vars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous-classes-and-new\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambda-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables-local\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#objects\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#properties\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#all-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\"name\": \"punctuation.terminator.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"/\\\\*\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.empty.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-inline\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-inline\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-javadoc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(/\\\\*\\\\*)(?!/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.javadoc.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"@(author|deprecated|return|see|serial|since|version)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.documentation.javadoc.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(@param)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.documentation.javadoc.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(@(?:exception|throws))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.documentation.javadoc.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"{(@link)\\\\s+(\\\\S+)?#([\\\\w$]+\\\\s*\\\\([^\\\\(\\\\)]*\\\\)).*?}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.documentation.javadoc.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants-and-special-vars\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(true|false|null)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bthis\\\\b\",\n\t\t\t\t\t\"name\": \"variable.language.this.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bsuper\\\\b\",\n\t\t\t\t\t\"name\": \"variable.language.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"enums\": {\n\t\t\t\"begin\": \"^\\\\s*([\\\\w\\\\s]*)(enum)\\\\s+(\\\\w+)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.enum.end.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.enum.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(extends)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.extends.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?={|\\\\bimplements\\\\b)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.inherited.classes.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(implements)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.implements.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?={|\\\\bextends\\\\b)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.implemented.interfaces.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.enum.begin.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<={)\",\n\t\t\t\t\t\t\t\"end\": \"(?=;|})\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments-javadoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\b(\\\\w+)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.other.enum.java\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(,)|(?=;|})\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.java\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comments-javadoc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.round.java\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.round.java\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.curly.java\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.curly.java\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#class-body\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call\": {\n\t\t\t\"begin\": \"([A-Za-z_$][\\\\w$]*)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.java\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"generics\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.bracket.angle.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.bracket.angle.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(extends|super)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.$1.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\.)([a-zA-Z$_][a-zA-Z0-9$_]*)(?=\\\\s*<)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#primitive-arrays\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z$_][a-zA-Z0-9$_]*\",\n\t\t\t\t\t\"name\": \"storage.type.generic.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\?\",\n\t\t\t\t\t\"name\": \"storage.type.generic.wildcard.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&\",\n\t\t\t\t\t\"name\": \"punctuation.separator.types.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bthrow\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.throw.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\?|:\",\n\t\t\t\t\t\"name\": \"keyword.control.ternary.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(return|yield|break|case|continue|default|do|while|for|switch|if|else)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(instanceof)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.operator.instanceof.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(<<|>>>?|~|\\\\^)\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((&|\\\\^|\\\\||<<|>>>?)=)\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.bitwise.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(===?|!=|<=|>=|<>|<|>)\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([+*/%-]=)\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.arithmetic.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(=)\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\-\\\\-|\\\\+\\\\+)\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment-decrement.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\-|\\\\+|\\\\*|\\\\/|%)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(!|&&|\\\\|\\\\|)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\||&)\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(const|goto)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.reserved.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"lambda-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"->\",\n\t\t\t\t\t\"name\": \"storage.type.function.arrow.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member-variables\": {\n\t\t\t\"begin\": \"(?=private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final)\",\n\t\t\t\"end\": \"(?=\\\\=|;)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#primitive-arrays\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-call\": {\n\t\t\t\"begin\": \"(\\\\.)\\\\s*([A-Za-z_$][\\\\w$]*)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.java\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.method-call.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"methods\": {\n\t\t\t\"begin\": \"(?!new)(?=[\\\\w<].*\\\\s+)(?=([^=/]|/(?!/))+\\\\()\",\n\t\t\t\"end\": \"(})|(?=;)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.method.end.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.method.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\w+)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.method.identifier.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()\",\n\t\t\t\t\t\"end\": \"(?=\\\\s+\\\\w+\\\\s*\\\\()\",\n\t\t\t\t\t\"name\": \"meta.method.return-type.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#all-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#throws\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.method.begin.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"contentName\": \"meta.method.body.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"module\": {\n\t\t\t\"begin\": \"((open)\\\\s)?(module)\\\\s+(\\\\w+)\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.module.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.module.end.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.module.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.module.begin.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"contentName\": \"meta.module.body.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-javadoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.module.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numbers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n\\\\b(?<!\\\\$)\\n0(x|X)\\n(\\n  (?<!\\\\.)[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?[Ll]?(?!\\\\.)\\n  |\\n  (\\n    [0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?\\\\.?\\n    |\\n    ([0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?)?\\\\.[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?\\n  )\\n  [Pp][+-]?[0-9]([0-9_]*[0-9])?[FfDd]?\\n)\\n\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"constant.numeric.hex.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(b|B)[01]([01_]*[01])?[Ll]?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"constant.numeric.binary.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0[0-7]([0-7_]*[0-7])?[Ll]?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"constant.numeric.octal.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?<!\\\\$)\\n(\\n  \\\\b[0-9]([0-9_]*[0-9])?\\\\.\\\\B(?!\\\\.)\\n  |\\n  \\\\b[0-9]([0-9_]*[0-9])?\\\\.([Ee][+-]?[0-9]([0-9_]*[0-9])?)[FfDd]?\\\\b\\n  |\\n  \\\\b[0-9]([0-9_]*[0-9])?\\\\.([Ee][+-]?[0-9]([0-9_]*[0-9])?)?[FfDd]\\\\b\\n  |\\n  \\\\b[0-9]([0-9_]*[0-9])?\\\\.([0-9]([0-9_]*[0-9])?)([Ee][+-]?[0-9]([0-9_]*[0-9])?)?[FfDd]?\\\\b\\n  |\\n  (?<!\\\\.)\\\\B\\\\.[0-9]([0-9_]*[0-9])?([Ee][+-]?[0-9]([0-9_]*[0-9])?)?[FfDd]?\\\\b\\n  |\\n  \\\\b[0-9]([0-9_]*[0-9])?([Ee][+-]?[0-9]([0-9_]*[0-9])?)[FfDd]?\\\\b\\n  |\\n  \\\\b[0-9]([0-9_]*[0-9])?([Ee][+-]?[0-9]([0-9_]*[0-9])?)?[FfDd]\\\\b\\n  |\\n  \\\\b(0|[1-9]([0-9_]*[0-9])?)(?!\\\\.)[Ll]?\\\\b\\n)\\n(?!\\\\$)\",\n\t\t\t\t\t\"name\": \"constant.numeric.decimal.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b((?:[A-Za-z_]\\\\w*\\\\s*\\\\.\\\\s*)*)([A-Z_]\\\\w*)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[A-Za-z_]\\\\w*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.object.array.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\s*\\\\[)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b((?:[A-Za-z_]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z_]\\\\w*)\\\\s*(?=<)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[A-Za-z_]\\\\w*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b((?:[A-Za-z_]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z_]\\\\w*)\\\\b((?=\\\\s*[A-Za-z$_\\\\n])|(?=\\\\s*\\\\.\\\\.\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[A-Za-z_]\\\\w*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.java\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-types-inherited\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:[A-Z]\\\\w*\\\\s*(\\\\.)\\\\s*)*[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.java\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"objects\": {\n\t\t\t\"match\": \"(?<![\\\\w$])[a-zA-Z_$][\\\\w$]*(?=\\\\s*\\\\.\\\\s*[\\\\w$]+)\",\n\t\t\t\"name\": \"variable.other.object.java\"\n\t\t},\n\t\t\"parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bfinal\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#all-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\"name\": \"variable.parameter.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.varargs.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parens\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.square.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.square.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"primitive-arrays\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(void|boolean|byte|char|short|int|float|long|double)\\\\b\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.array.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\s*\\\\[)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"primitive-types\": {\n\t\t\t\"match\": \"\\\\b(void|boolean|byte|char|short|int|float|long|double)\\\\b\",\n\t\t\t\"name\": \"storage.type.primitive.java\"\n\t\t},\n\t\t\"properties\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\.)\\\\s*(new)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.new.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\.)\\\\s*([a-zA-Z_$][\\\\w$]*)(?=\\\\s*\\\\.\\\\s*[a-zA-Z_$][\\\\w$]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\.)\\\\s*([a-zA-Z_$][\\\\w$]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\.)\\\\s*([0-9][\\\\w$]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"record\": {\n\t\t\t\"begin\": \"(?=\\\\w?[\\\\w\\\\s]*\\\\b(?:record)\\\\s+[\\\\w$]+)\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.class.end.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.record.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(record)\\\\s+([\\\\w$]+)(<[\\\\w$]+>)?(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.record.java\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#generics\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.record.identifier.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(implements)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.implements.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.definition.class.implemented.interfaces.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-types-inherited\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#record-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"record-body\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.class.begin.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=})\",\n\t\t\t\"name\": \"meta.record.body.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#record-constructor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"record-constructor\": {\n\t\t\t\"begin\": \"(?!new)(?=[\\\\w<].*\\\\s+)(?=([^\\\\(=/]|/(?!/))+(?={))\",\n\t\t\t\"end\": \"(})|(?=;)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.method.end.bracket.curly.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.method.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\w+)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*{)\",\n\t\t\t\t\t\"name\": \"meta.method.identifier.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.method.begin.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"contentName\": \"meta.method.body.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"static-initializer\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anonymous-block-and-instance-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"static\",\n\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"storage-modifiers\": {\n\t\t\t\"match\": \"\\\\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|volatile|default|strictfp|sealed|non-sealed)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.java\"\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.triple.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\"\\\"\\\")(?!\\\")|(\\\\\\\\.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"throws\": {\n\t\t\t\"begin\": \"throws\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"storage.modifier.java\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?={|;)\",\n\t\t\t\"name\": \"meta.throwables.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z$_][\\\\.a-zA-Z0-9$_]*\",\n\t\t\t\t\t\"name\": \"storage.type.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"try-catch-finally\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\btry\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.try.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.try.end.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.try.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.try.resources.begin.bracket.round.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.try.resources.end.bracket.round.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.try.resources.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.try.begin.bracket.curly.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.try.body.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(catch)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.catch.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.catch.end.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.catch.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.catch.parameters.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage-modifiers\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"[a-zA-Z$_][\\\\.a-zA-Z0-9$_]*\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.java\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(\\\\|)|(?=\\\\))\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.catch.separator.java\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.java\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.catch.begin.bracket.curly.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.catch.body.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\bfinally\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.finally.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.finally.end.bracket.curly.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.finally.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.finally.begin.bracket.curly.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.finally.body.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"begin\": \"(?x)\\n(?=\\n  \\\\b\\n  (\\n    (void|boolean|byte|char|short|int|float|long|double)\\n    |\\n    (?>(\\\\w+\\\\.)*[A-Z_]+\\\\w*) # e.g. `javax.ws.rs.Response`, or `String`\\n  )\\n  \\\\b\\n  \\\\s*\\n  (\\n    <[\\\\w<>,\\\\.?\\\\s\\\\[\\\\]]*> # e.g. `HashMap<Integer, String>`, or `List<java.lang.String>`\\n  )?\\n  \\\\s*\\n  (\\n    (\\\\[\\\\])* # int[][]\\n  )?\\n  \\\\s+\\n  [A-Za-z_$][\\\\w$]* # At least one identifier after space\\n  ([\\\\w\\\\[\\\\],$][\\\\w\\\\[\\\\],\\\\s]*)? # possibly primitive array or additional identifiers\\n  \\\\s*(=|:|;)\\n)\",\n\t\t\t\"end\": \"(?=\\\\=|:|;)\",\n\t\t\t\"name\": \"meta.definition.variable.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([A-Za-z$_][\\\\w$]*)(?=\\\\s*(\\\\[\\\\])*\\\\s*(;|:|=|,))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.definition.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#all-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables-local\": {\n\t\t\t\"begin\": \"(?=\\\\b(var)\\\\b\\\\s+[A-Za-z_$][\\\\w$]*\\\\s*(=|:|;))\",\n\t\t\t\"end\": \"(?=\\\\=|:|;)\",\n\t\t\t\"name\": \"meta.definition.variable.local.java\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bvar\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.local.java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([A-Za-z$_][\\\\w$]*)(?=\\\\s*(\\\\[\\\\])*\\\\s*(=|:|;))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.definition.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/javascript/.vscodeignore",
    "content": "test/**\nsrc/**/*.ts\nsyntaxes/Readme.md\ntsconfig.json\ncgmanifest.json\n"
  },
  {
    "path": "extensions/javascript/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"microsoft/TypeScript-TmLanguage\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/TypeScript-TmLanguage\",\n\t\t\t\t\t\"commitHash\": \"3133e3d914db9a2bb8812119f9273727a305f16b\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.0.1\",\n\t\t\t\"description\": \"The file syntaxes/JavaScript.tmLanguage.json was derived from TypeScriptReact.tmLanguage in https://github.com/microsoft/TypeScript-TmLanguage.\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/javascript.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/javascript.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"fccf0af0c95430a42e1bf98f0c7a4723a53283e7\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-javascript.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/javascript/javascript-language-configuration.json",
    "content": "{\n\t// Note that this file should stay in sync with 'typescript-language-basics/language-configuration.json'\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"${\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"`\",\n\t\t\t\"close\": \"`\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"/**\",\n\t\t\t\"close\": \" */\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"`\",\n\t\t\t\"`\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t]\n\t],\n\t\"autoCloseBefore\": \";:.,=}])>` \\n\\t\",\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*//\\\\s*#?region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*//\\\\s*#?endregion\\\\b\"\n\t\t}\n\t},\n\t\"wordPattern\": {\n\t\t\"pattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\@\\\\!\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>/\\\\?\\\\s]+)\",\n\t},\n\t\"indentationRules\": {\n\t\t\"decreaseIndentPattern\": {\n\t\t\t\"pattern\": \"^\\\\s*[\\\\}\\\\]\\\\)].*$\"\n\t\t},\n\t\t\"increaseIndentPattern\": {\n\t\t\t\"pattern\": \"^.*(\\\\{[^}]*|\\\\([^)]*|\\\\[[^\\\\]]*)$\"\n\t\t},\n\t\t// e.g.  * ...| or */| or *-----*/|\n\t\t\"unIndentedLinePattern\": {\n\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*[^/]*\\\\*/\\\\s*$|^(\\\\t|[ ])*[ ]\\\\*/\\\\s*$|^(\\\\t|[ ])*[ ]\\\\*([ ]([^\\\\*]|\\\\*(?!/))*)?$\"\n\t\t},\n\t\t\"indentNextLinePattern\": {\n\t\t\t\"pattern\": \"^((.*=>\\\\s*)|((.*[^\\\\w]+|\\\\s*)(if|while|for)\\\\s*\\\\(.*\\\\)\\\\s*))$\"\n\t\t}\n\t},\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t// e.g. /** | */\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*\\\\*/$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g. /** ...|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  * ...|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*([ ]([^\\\\*]|\\\\*(?!/))*)?$\"\n\t\t\t},\n\t\t\t\"previousLineText\": {\n\t\t\t\t\"pattern\": \"(?=^(\\\\s*(/\\\\*\\\\*|\\\\*)).*)(?=(?!(\\\\s*\\\\*/)))\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"* \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  */|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*/\\\\s*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// e.g.  *-----*/|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*[^/]*\\\\*/\\\\s*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*(\\\\bcase\\\\s.+:|\\\\bdefault:)$\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*(\\\\bcase\\\\b|\\\\bdefault\\\\b))\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indent\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// Decrease indentation after single line if/else if/else, for, or while\n\t\t\t\"previousLineText\": \"^\\\\s*(((else ?)?if|for|while)\\\\s*\\\\(.*\\\\)\\\\s*|else\\\\s*)$\",\n\t\t\t// But make sure line doesn't have braces or is not another if statement\n\t\t\t\"beforeText\": \"^\\\\s+([^{i\\\\s]|i(?!f\\\\b))\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"outdent\"\n\t\t\t}\n\t\t},\n\t\t// Indent when pressing enter from inside ()\n\t\t{\n\t\t\t\"beforeText\": \"^.*\\\\([^\\\\)]*$\",\n\t\t\t\"afterText\": \"^\\\\s*\\\\).*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \"\\t\",\n\t\t\t}\n\t\t},\n\t\t// Indent when pressing enter from inside {}\n\t\t{\n\t\t\t\"beforeText\": \"^.*\\\\{[^\\\\}]*$\",\n\t\t\t\"afterText\": \"^\\\\s*\\\\}.*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \"\\t\",\n\t\t\t}\n\t\t},\n\t\t// Indent when pressing enter from inside []\n\t\t{\n\t\t\t\"beforeText\": \"^.*\\\\[[^\\\\]]*$\",\n\t\t\t\"afterText\": \"^\\\\s*\\\\].*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \"\\t\",\n\t\t\t}\n\t\t},\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"(?<!\\\\\\\\)(?<!\\\\w:)\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/javascript/package.json",
    "content": "{\n  \"name\": \"javascript\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"configurationDefaults\": {\n      \"[javascript]\": {\n        \"editor.maxTokenizationLineLength\": 2500\n      }\n    },\n    \"languages\": [\n      {\n        \"id\": \"javascriptreact\",\n        \"aliases\": [\n          \"JavaScript JSX\",\n          \"JavaScript React\",\n          \"jsx\"\n        ],\n        \"extensions\": [\n          \".jsx\"\n        ],\n        \"configuration\": \"./javascript-language-configuration.json\"\n      },\n      {\n        \"id\": \"javascript\",\n        \"aliases\": [\n          \"JavaScript\",\n          \"javascript\",\n          \"js\"\n        ],\n        \"extensions\": [\n          \".js\",\n          \".es6\",\n          \".mjs\",\n          \".cjs\",\n          \".pac\"\n        ],\n        \"filenames\": [\n          \"jakefile\"\n        ],\n        \"firstLine\": \"^#!.*\\\\bnode\",\n        \"mimetypes\": [\n          \"text/javascript\"\n        ],\n        \"configuration\": \"./javascript-language-configuration.json\"\n      },\n      {\n        \"id\": \"jsx-tags\",\n        \"aliases\": [],\n        \"configuration\": \"./tags-language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"javascriptreact\",\n        \"scopeName\": \"source.js.jsx\",\n        \"path\": \"./syntaxes/JavaScriptReact.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"meta.tag.js\": \"jsx-tags\",\n          \"meta.tag.without-attributes.js\": \"jsx-tags\",\n          \"meta.tag.attributes.js.jsx\": \"javascriptreact\",\n          \"meta.embedded.expression.js\": \"javascriptreact\"\n        },\n        \"tokenTypes\": {\n          \"meta.template.expression\": \"other\",\n          \"meta.template.expression string\": \"string\",\n          \"meta.template.expression comment\": \"comment\",\n          \"entity.name.type.instance.jsdoc\": \"other\",\n          \"entity.name.function.tagged-template\": \"other\",\n          \"meta.import string.quoted\": \"other\",\n          \"variable.other.jsdoc\": \"other\"\n        }\n      },\n      {\n        \"language\": \"javascript\",\n        \"scopeName\": \"source.js\",\n        \"path\": \"./syntaxes/JavaScript.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"meta.tag.js\": \"jsx-tags\",\n          \"meta.tag.without-attributes.js\": \"jsx-tags\",\n          \"meta.tag.attributes.js\": \"javascript\",\n          \"meta.embedded.expression.js\": \"javascript\"\n        },\n        \"tokenTypes\": {\n          \"meta.template.expression\": \"other\",\n          \"meta.template.expression string\": \"string\",\n          \"meta.template.expression comment\": \"comment\",\n          \"entity.name.type.instance.jsdoc\": \"other\",\n          \"entity.name.function.tagged-template\": \"other\",\n          \"meta.import string.quoted\": \"other\",\n          \"variable.other.jsdoc\": \"other\"\n        }\n      },\n      {\n        \"scopeName\": \"source.js.regexp\",\n        \"path\": \"./syntaxes/Regular Expressions (JavaScript).tmLanguage\"\n      }\n    ],\n    \"semanticTokenScopes\": [\n      {\n        \"language\": \"javascript\",\n        \"scopes\": {\n          \"property\": [\n            \"variable.other.property.js\"\n          ],\n          \"property.readonly\": [\n            \"variable.other.constant.property.js\"\n          ],\n          \"variable\": [\n            \"variable.other.readwrite.js\"\n          ],\n          \"variable.readonly\": [\n            \"variable.other.constant.object.js\"\n          ],\n          \"function\": [\n            \"entity.name.function.js\"\n          ],\n          \"namespace\": [\n            \"entity.name.type.module.js\"\n          ],\n          \"variable.defaultLibrary\": [\n            \"support.variable.js\"\n          ],\n          \"function.defaultLibrary\": [\n            \"support.function.js\"\n          ]\n        }\n      },\n      {\n        \"language\": \"javascriptreact\",\n        \"scopes\": {\n          \"property\": [\n            \"variable.other.property.jsx\"\n          ],\n          \"property.readonly\": [\n            \"variable.other.constant.property.jsx\"\n          ],\n          \"variable\": [\n            \"variable.other.readwrite.jsx\"\n          ],\n          \"variable.readonly\": [\n            \"variable.other.constant.object.jsx\"\n          ],\n          \"function\": [\n            \"entity.name.function.jsx\"\n          ],\n          \"namespace\": [\n            \"entity.name.type.module.jsx\"\n          ],\n          \"variable.defaultLibrary\": [\n            \"support.variable.js\"\n          ],\n          \"function.defaultLibrary\": [\n            \"support.function.js\"\n          ]\n        }\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"javascript\",\n        \"path\": \"./snippets/javascript.code-snippets\"\n      },\n      {\n        \"language\": \"javascriptreact\",\n        \"path\": \"./snippets/javascript.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/javascript/package.nls.json",
    "content": "{\n\t\"displayName\": \"JavaScript Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in JavaScript files.\"\n}\n"
  },
  {
    "path": "extensions/javascript/snippets/javascript.code-snippets",
    "content": "{\n\t\"Constructor\": {\n\t\t\"prefix\": \"ctor\",\n\t\t\"body\": [\n\t\t\t\"/**\",\n\t\t\t\" *\",\n\t\t\t\" */\",\n\t\t\t\"constructor() {\",\n\t\t\t\"\\tsuper();\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Constructor\"\n\t},\n\t\"Class Definition\": {\n\t\t\"prefix\": \"class\",\n\t\t\"isFileTemplate\": true,\n\t\t\"body\": [\n\t\t\t\"class ${1:name} {\",\n\t\t\t\"\\tconstructor(${2:parameters}) {\",\n\t\t\t\"\\t\\t$0\",\n\t\t\t\"\\t}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Class Definition\"\n\t},\n\t\"Method Definition\": {\n\t\t\"prefix\": \"method\",\n\t\t\"body\": [\n\t\t\t\"/**\",\n\t\t\t\" * \",\n\t\t\t\" */\",\n\t\t\t\"${1:name}() {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Method Definition\"\n\t},\n\t\"Import Statement\": {\n\t\t\"prefix\": \"import\",\n\t\t\"body\": [\n\t\t\t\"import { $0 } from \\\"${1:module}\\\";\"\n\t\t],\n\t\t\"description\": \"Import external module\"\n\t},\n\t\"Log to the console\": {\n\t\t\"prefix\": \"log\",\n\t\t\"body\": [\n\t\t\t\"console.log($1);\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"Log to the console\"\n\t},\n\t\"Log warning to console\": {\n\t\t\"prefix\": \"warn\",\n\t\t\"body\": [\n\t\t\t\"console.warn($1);\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"Log warning to the console\"\n\t},\n\t\"Log error to console\": {\n\t\t\"prefix\": \"error\",\n\t\t\"body\": [\n\t\t\t\"console.error($1);\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"Log error to the console\"\n\t},\n\t\"Throw Exception\": {\n\t\t\"prefix\": \"throw\",\n\t\t\"body\": [\n\t\t\t\"throw new Error(\\\"$1\\\");\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"Throw Exception\"\n\t},\n\t\"For Loop\": {\n\t\t\"prefix\": \"for\",\n\t\t\"body\": [\n\t\t\t\"for (let ${1:index} = 0; ${1:index} < ${2:array}.length; ${1:index}++) {\",\n\t\t\t\"\\tconst ${3:element} = ${2:array}[${1:index}];\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"For Loop\"\n\t},\n\t\"For-Each Loop using =>\": {\n\t\t\"prefix\": \"foreach =>\",\n\t\t\"body\": [\n\t\t\t\"${1:array}.forEach(${2:element} => {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"});\"\n\t\t],\n\t\t\"description\": \"For-Each Loop using =>\"\n\t},\n\t\"For-In Loop\": {\n\t\t\"prefix\": \"forin\",\n\t\t\"body\": [\n\t\t\t\"for (const ${1:key} in ${2:object}) {\",\n\t\t\t\"\\tif (Object.prototype.hasOwnProperty.call(${2:object}, ${1:key})) {\",\n\t\t\t\"\\t\\tconst ${3:element} = ${2:object}[${1:key}];\",\n\t\t\t\"\\t\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"\\t}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"For-In Loop\"\n\t},\n\t\"For-Of Loop\": {\n\t\t\"prefix\": \"forof\",\n\t\t\"body\": [\n\t\t\t\"for (const ${1:element} of ${2:object}) {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"For-Of Loop\"\n\t},\n\t\"For-Await-Of Loop\": {\n\t\t\"prefix\": \"forawaitof\",\n\t\t\"body\": [\n\t\t\t\"for await (const ${1:element} of ${2:object}) {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"For-Await-Of Loop\"\n\t},\n\t\"Function Statement\": {\n\t\t\"prefix\": \"function\",\n\t\t\"body\": [\n\t\t\t\"function ${1:name}(${2:params}) {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Function Statement\"\n\t},\n\t\"If Statement\": {\n\t\t\"prefix\": \"if\",\n\t\t\"body\": [\n\t\t\t\"if (${1:condition}) {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"If Statement\"\n\t},\n\t\"If-Else Statement\": {\n\t\t\"prefix\": \"ifelse\",\n\t\t\"body\": [\n\t\t\t\"if (${1:condition}) {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"} else {\",\n\t\t\t\"\\t\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"If-Else Statement\"\n\t},\n\t\"New Statement\": {\n\t\t\"prefix\": \"new\",\n\t\t\"body\": [\n\t\t\t\"const ${1:name} = new ${2:type}(${3:arguments});$0\"\n\t\t],\n\t\t\"description\": \"New Statement\"\n\t},\n\t\"Switch Statement\": {\n\t\t\"prefix\": \"switch\",\n\t\t\"body\": [\n\t\t\t\"switch (${1:key}) {\",\n\t\t\t\"\\tcase ${2:value}:\",\n\t\t\t\"\\t\\t$0\",\n\t\t\t\"\\t\\tbreak;\",\n\t\t\t\"\",\n\t\t\t\"\\tdefault:\",\n\t\t\t\"\\t\\tbreak;\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Switch Statement\"\n\t},\n\t\"While Statement\": {\n\t\t\"prefix\": \"while\",\n\t\t\"body\": [\n\t\t\t\"while (${1:condition}) {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"While Statement\"\n\t},\n\t\"Do-While Statement\": {\n\t\t\"prefix\": \"dowhile\",\n\t\t\"body\": [\n\t\t\t\"do {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"} while (${1:condition});\"\n\t\t],\n\t\t\"description\": \"Do-While Statement\"\n\t},\n\t\"Try-Catch Statement\": {\n\t\t\"prefix\": \"trycatch\",\n\t\t\"body\": [\n\t\t\t\"try {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"} catch (${1:error}) {\",\n\t\t\t\"\\t\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Try-Catch Statement\"\n\t},\n\t\"Set Timeout Function\": {\n\t\t\"prefix\": \"settimeout\",\n\t\t\"body\": [\n\t\t\t\"setTimeout(() => {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}, ${1:timeout});\"\n\t\t],\n\t\t\"description\": \"Set Timeout Function\"\n\t},\n\t\"Set Interval Function\": {\n\t\t\"prefix\": \"setinterval\",\n\t\t\"body\": [\n\t\t\t\"setInterval(() => {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}, ${1:interval});\"\n\t\t],\n\t\t\"description\": \"Set Interval Function\"\n\t},\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"//#region $0\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"//#endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t},\n\t\"new Promise\": {\n\t\t\"prefix\": \"newpromise\",\n\t\t\"body\": [\n\t\t\t\"new Promise((resolve, reject) => {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"})\"\n\t\t],\n\t\t\"description\": \"Create a new Promise\"\n\t},\n\t\"Async Function Statement\": {\n\t\t\"prefix\": \"async function\",\n\t\t\"body\": [\n\t\t\t\"async function ${1:name}(${2:params}) {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Async Function Statement\"\n\t},\n\t\"Async Function Expression\": {\n\t\t\"prefix\": \"async arrow function\",\n\t\t\"body\": [\n\t\t\t\"async (${1:params}) => {\",\n\t\t\t\"\\t$TM_SELECTED_TEXT$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Async Function Expression\"\n\t}\n}\n"
  },
  {
    "path": "extensions/javascript/syntaxes/JavaScript.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScriptReact.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/TypeScript-TmLanguage/commit/48f608692aa6d6ad7bd65b478187906c798234a8\",\n\t\"name\": \"JavaScript (with React support)\",\n\t\"scopeName\": \"source.js\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#directives\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#statements\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#shebang\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"shebang\": {\n\t\t\t\"name\": \"comment.line.shebang.js\",\n\t\t\t\"match\": \"\\\\A(#!).*(?=$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"statements\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#after-operator-block-as-object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#label\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-alias-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-equals-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#export-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"control-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for-loop\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.trycatch.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|goto)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(return)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[;}]|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.switch.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#if-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.conditional.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.with.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(with)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(package)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.debugger.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"label\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressionWithoutIdentifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cast\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ternary-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#new-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#instanceof-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-objects\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressionPunctuations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decorator\": {\n\t\t\t\"name\": \"meta.decorator.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))\\\\@\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.decorator.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\s)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-expr\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.js\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^let|[^\\\\._$[:alnum:]]let|^var|[^\\\\._$[:alnum:]]var)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructuring-variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructuring-variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.js\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^const|[^\\\\._$[:alnum:]]const)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructuring-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructuring-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.js\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^using|[^\\\\._$[:alnum:]]using|^await\\\\s+using|[^\\\\._$[:alnum:]]await\\\\s+using)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*((?!\\\\S)|(?=\\\\/\\\\/))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js\",\n\t\t\t\t\t\"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js entity.name.function.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js\",\n\t\t\t\t\t\"begin\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\\\!)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js variable.other.constant.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js variable.other.readwrite.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js\",\n\t\t\t\t\t\"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js variable.other.constant.js entity.name.function.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js variable.other.constant.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-variable-type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-binding-pattern-variable.js\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.array-binding-pattern-variable.js\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-binding-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-binding-pattern-variable.js\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.array-binding-pattern-variable.js\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-binding-pattern-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#binding-element\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#binding-element-const\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element-propertyName\": {\n\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\"end\": \"(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.destructuring.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.object.property.js\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"binding-element-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-variable-rest\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.definition.variable.js variable.other.readwrite.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"destructuring-variable-rest-const\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.definition.variable.js variable.other.constant.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"object-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-element\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-pattern-const\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-element-const\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#binding-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-binding-pattern-const\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#binding-element-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-parameter\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.parameter.object-binding-pattern.js\",\n\t\t\t\t\t\"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-object-binding-element\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.paramter.array-binding-pattern.js\",\n\t\t\t\t\t\"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-object-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-array-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-parameter-rest\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter-object-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-element\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-array-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"field-declaration\": {\n\t\t\t\"name\": \"meta.field.declaration.js\",\n\t\t\t\"begin\": \"(?x)(?<!\\\\()(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s+)?(?=\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|\\\\}|$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?x)(?=\\\\}|;|,|$|(^(?!\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|$))))|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\\\?)|(\\\\!))?(?=\\\\s*\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.property.js entity.name.function.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.property.js variable.object.property.js\",\n\t\t\t\t\t\"match\": \"\\\\#?[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js\",\n\t\t\t\t\t\"match\": \"\\\\?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js\",\n\t\t\t\t\t\"match\": \"\\\\!\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable-initializer\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!=|!)(=)(?!=)(?=\\\\s*\\\\S)(?!\\\\s*.*=>\\\\s*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!=|!)(=)(?!=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))|(?=^\\\\s*$)|(?<![\\\\|\\\\&\\\\+\\\\-\\\\*\\\\/])(?<=\\\\S)(?<!=)(?=\\\\s*$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-declaration\": {\n\t\t\t\"name\": \"meta.function.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.function.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.definition.function.js entity.name.function.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-expression\": {\n\t\t\t\"name\": \"meta.function.expression.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.function.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.definition.function.js entity.name.function.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;)|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-name\": {\n\t\t\t\"name\": \"meta.definition.function.js entity.name.function.js\",\n\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t},\n\t\t\"function-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-function-return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\",\n\t\t\t\t\t\"match\": \"\\\\*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?\\\\s*\\\\b(constructor)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:(?:\\\\s*\\\\b(new)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|(?:(\\\\*)\\\\s*)?)(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.new.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.property.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-literal-method-declaration\": {\n\t\t\t\"name\": \"meta.method.declaration.js\",\n\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.property.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.property.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\(|\\\\<)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-declaration-name\": {\n\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??)\\\\s*[\\\\(\\\\<])\",\n\t\t\t\"end\": \"(?=\\\\(|\\\\<)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.method.js entity.name.function.js\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js\",\n\t\t\t\t\t\"match\": \"\\\\?\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-function\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.js\",\n\t\t\t\t\t\"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?==>)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.js\",\n\t\t\t\t\t\"begin\": \"(?x) (?:\\n  (?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\n)? ((?<![})!\\\\]])\\\\s*\\n  (?=\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  )\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arrow-return-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.js\",\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((?<=\\\\}|\\\\S)(?<!=>)|((?!\\\\{)(?=\\\\S)))(?!\\\\/[\\\\/\\\\*])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"indexer-declaration\": {\n\t\t\t\"name\": \"meta.indexer.declaration.js\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])\\\\s*(\\\\?\\\\s*)?|$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"indexer-mapped-type-declaration\": {\n\t\t\t\"name\": \"meta.indexer.mappedtype.declaration.js\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([+-])?(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s+(in)\\\\s+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.in.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])([+-])?\\\\s*(\\\\?\\\\s*)?|$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters\": {\n\t\t\t\"name\": \"meta.parameters.js\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.js\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-declaration\": {\n\t\t\t\"name\": \"meta.class.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(class)\\\\b(?=\\\\s+|/[/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.class.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration-or-expression-patterns\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-expression\": {\n\t\t\t\"name\": \"meta.class.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(class)\\\\b(?=\\\\s+|[<{]|\\\\/[\\\\/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.class.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration-or-expression-patterns\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-declaration-or-expression-patterns\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface-declaration\": {\n\t\t\t\"name\": \"meta.interface.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(interface)\\\\b(?=\\\\s+|/[/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.interface.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.interface.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-or-interface-heritage\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(extends|implements)\\\\b)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s*\\\\??\\\\.\\\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\\\s*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.inherited-class.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-or-interface-body\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*\",\n\t\t\t\t\t\"end\": \"(?=\\\\s|[;),}\\\\]:\\\\-\\\\+]|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#access-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#after-operator-block-as-object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"access-modifier\": {\n\t\t\t\"name\": \"storage.modifier.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"property-accessor\": {\n\t\t\t\"name\": \"storage.type.property.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"async-modifier\": {\n\t\t\t\"name\": \"storage.modifier.async.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(async)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"enum-declaration\": {\n\t\t\t\"name\": \"meta.enum.declaration.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:\\\\b(const)\\\\s+)?\\\\b(enum)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.enummember.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\}|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\])))\",\n\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\}|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace-declaration\": {\n\t\t\t\"name\": \"meta.namespace.declaration.js\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(namespace|module)\\\\s+(?=[_$[:alpha:]\\\"'`]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.namespace.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.module.js\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-alias-declaration\": {\n\t\t\t\"name\": \"meta.type.declaration.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(type)\\\\b\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.type.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.alias.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(=)\\\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.intrinsic.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(=)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-equals-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.import-equals.external.js\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(require)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.require.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.import-equals.internal.js\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(?!require\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;|$|^)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.js\",\n\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-declaration\": {\n\t\t\t\"name\": \"meta.import.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type)(?!\\\\s+from))?(?!\\\\s*[:\\\\(])(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.control.type.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!^import|[^\\\\._$[:alnum:]]import)(?=;|$|^)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^import|[^\\\\._$[:alnum:]]import)(?!\\\\s*[\\\"'])\",\n\t\t\t\t\t\"end\": \"\\\\bfrom\\\\b\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.from.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"export-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)\\\\s+(as)\\\\s+(namespace)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.namespace.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.export.default.js\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?(?:(?:\\\\s*(=))|(?:\\\\s+(default)(?=\\\\s+)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface-declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.export.js\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?\\\\b(?!(\\\\$)|(\\\\s*:))((?=\\\\s*[\\\\{*])|((?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s|,))(?!\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.from.js\",\n\t\t\t\t\t\"match\": \"\\\\bfrom\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-assert-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-assert-clause\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(with)|(assert))\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.with.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.assert.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-literal.key.js\",\n\t\t\t\t\t\"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.js\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-block\": {\n\t\t\t\"name\": \"meta.block.js\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-clause\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(?:(\\\\btype)\\\\s+)?(?:(\\\\bdefault)|(\\\\*)|(\\\\b[_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))))\\\\s+(as)\\\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.import-export-all.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.import-export-all.js\",\n\t\t\t\t\t\"match\": \"\\\\*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.default.js\",\n\t\t\t\t\t\"match\": \"\\\\b(default)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\btype)\\\\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch-statement\": {\n\t\t\t\"name\": \"switch-statement.expr.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bswitch\\\\s*\\\\()\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"switch-expression.expr.js\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(switch)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"switch-block.expr.js\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"case-clause.expr.js\",\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=:)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"case-clause.expr.js punctuation.definition.section.case-statement.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.block.js punctuation.definition.block.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.block.js punctuation.definition.block.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.block.js\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(:)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"case-clause.expr.js punctuation.definition.section.case-statement.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"for-loop\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))for(?=((\\\\s+|(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*))await)?\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)?(\\\\())\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.js\",\n\t\t\t\t\t\"match\": \"await\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-expr\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"if-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bif\\\\s*(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))\\\\s*(?!\\\\{))\",\n\t\t\t\t\t\"end\": \"(?=;|$|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(if)\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"string.regexp.js\",\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decl-block\": {\n\t\t\t\"name\": \"meta.block.js\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"after-operator-block-as-object-literal\": {\n\t\t\t\"name\": \"meta.objectliteral.js\",\n\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--)(?<=[:=(,\\\\[?+!>]|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^yield|[^\\\\._$[:alnum:]]yield|^throw|[^\\\\._$[:alnum:]]throw|^in|[^\\\\._$[:alnum:]]in|^of|[^\\\\._$[:alnum:]]of|^typeof|[^\\\\._$[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-member\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-literal\": {\n\t\t\t\"name\": \"meta.objectliteral.js\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-member\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-member\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-literal-method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js meta.object-literal.key.js\",\n\t\t\t\t\t\"begin\": \"(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=:)|((?<=[\\\\]])(?=\\\\s*[\\\\(\\\\<]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js meta.object-literal.key.js\",\n\t\t\t\t\t\"begin\": \"(?=[\\\\'\\\\\\\"\\\\`])\",\n\t\t\t\t\t\"end\": \"(?=:)|((?<=[\\\\'\\\\\\\"\\\\`])(?=((\\\\s*[\\\\(\\\\<,}])|(\\\\s+(as|satisifies)\\\\s+))))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js meta.object-literal.key.js\",\n\t\t\t\t\t\"begin\": \"(?x)(?=(\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)))\",\n\t\t\t\t\t\"end\": \"(?=:)|(?=\\\\s*([\\\\(\\\\<,}])|(\\\\s+as|satisifies\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js\",\n\t\t\t\t\t\"begin\": \"(?<=[\\\\]\\\\'\\\\\\\"\\\\`])(?=\\\\s*[\\\\(\\\\<])\",\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"match\": \"(?![_$[:alpha:]])([[:digit:]]+)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"match\": \"(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)*\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"begin\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.spread.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*([,}]|$))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.satisfies.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|^|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisifies)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"begin\": \"(?=[_$[:alpha:]][_$[:alnum:]]*\\\\s*=)\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js\",\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js punctuation.separator.key-value.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?(?=\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(?=\\\\<\\\\s*$)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\>)\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ternary-expression\": {\n\t\t\t\"begin\": \"(?!\\\\?\\\\.\\\\s*[^[:digit:]])(\\\\?)(?!\\\\?)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.js\",\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-target\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-optionals\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\"end\": \"(?<=\\\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.js\",\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-target\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-optionals\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call-target\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-function-call-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.function.js\",\n\t\t\t\t\t\"match\": \"(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call-optionals\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function-call.js punctuation.accessor.optional.js\",\n\t\t\t\t\t\"match\": \"\\\\?\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function-call.js keyword.operator.definiteassignment.js\",\n\t\t\t\t\t\"match\": \"\\\\!\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support-function-call-identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-objects\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.import.js\",\n\t\t\t\t\t\"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*[\\\\(]\\\\s*[\\\\\\\"\\\\'\\\\`]))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"new-expr\": {\n\t\t\t\"name\": \"new.expr.js\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.new.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"instanceof-expr\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.instanceof.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|(===|!==|==|!=)|(([\\\\&\\\\~\\\\^\\\\|]\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s+instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression-possibly-arrow\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[(=,])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[(=,]|=>|^return|[^\\\\._$[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)))\\\\s*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression-possibly-arrow-with-typeparameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-inside-possibly-arrow-parens\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*[:,]|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.js\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cast\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.flow.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(await)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?=\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s*(\\\\*))?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.delete.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))delete(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.in.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))in(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.of.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))of(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.instanceof.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.new.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typeof-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.void.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))void(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*($|[;,:})\\\\]]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.satisfies.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^|[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisfies)\\\\s+)|(\\\\s+\\\\<))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.spread.js\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js\",\n\t\t\t\t\t\"match\": \"\\\\*=|(?<!\\\\()/=|%=|\\\\+=|\\\\-=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.js\",\n\t\t\t\t\t\"match\": \"\\\\&=|\\\\^=|<<=|>>=|>>>=|\\\\|=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.js\",\n\t\t\t\t\t\"match\": \"<<|>>>|>>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.js\",\n\t\t\t\t\t\"match\": \"===|!==|==|!=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.relational.js\",\n\t\t\t\t\t\"match\": \"<=|>=|<>|<|>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=[_$[:alnum:]])(\\\\!)\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.logical.js\",\n\t\t\t\t\t\"match\": \"\\\\!|&&|\\\\|\\\\||\\\\?\\\\?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.js\",\n\t\t\t\t\t\"match\": \"\\\\&|~|\\\\^|\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\",\n\t\t\t\t\t\"match\": \"\\\\=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.js\",\n\t\t\t\t\t\"match\": \"--\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.increment.js\",\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js\",\n\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)+(?:(/=)|(?:(/)(?![/*]))))\",\n\t\t\t\t\t\"end\": \"(?:(/=)|(?:(/)(?!\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typeof-operator\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))typeof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.typeof.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[,);}\\\\]=>:&|{\\\\?]|(extends\\\\s+)|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#boolean-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#null-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undefined-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numericConstant-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#this-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#super-literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-literal\": {\n\t\t\t\"name\": \"meta.array.literal.js\",\n\t\t\t\"begin\": \"\\\\s*(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numeric-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.hex.js\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.binary.js\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.octal.js\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"boolean-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.true.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))true(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.false.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))false(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"null-literal\": {\n\t\t\t\"name\": \"constant.language.null.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))null(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"this-literal\": {\n\t\t\t\"name\": \"variable.language.this.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))this\\\\b(?!\\\\$)\"\n\t\t},\n\t\t\"super-literal\": {\n\t\t\t\"name\": \"variable.language.super.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))super\\\\b(?!\\\\$)\"\n\t\t},\n\t\t\"undefined-literal\": {\n\t\t\t\"name\": \"constant.language.undefined.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))undefined(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"numericConstant-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.nan.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))NaN(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.infinity.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Infinity(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support-objects\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.language.arguments.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(arguments)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.promise.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(Promise)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(import)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(meta)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.importmeta.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(target)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.new.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.target.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]]))) \\\\s* (?:\\n  (?:(constructor|length|prototype|__proto__)\\\\b(?!\\\\$|\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\\\())\\n  |\\n  (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(exports)|(module)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.property.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.constant.js\",\n\t\t\t\t\t\"match\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.readwrite.js\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.js\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\\\??\\\\.\\\\s*prototype\\\\b(?!\\\\$))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(?:\\n  (\\\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\\n  (\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.object.property.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:\\n  ([[:upper:]][_$[:digit:][:upper:]]*) |\\n  ([_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.object.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.js\",\n\t\t\t\t\t\"begin\": \"(:)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])(?!\\\\s*[|&]\\\\s+)((?=^|[,);\\\\}\\\\]]|//)|(?==[^>])|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.js\",\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])((?=[,);\\\\}\\\\]]|\\\\/\\\\/)|(?==[^>])|(?=^\\\\s*$)|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.js\",\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,)])|(?==[^>])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.return.type.js\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])(?=$|^|[{};,]|//)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.return.type.js\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])((?=[{};,]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-type-core\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[:|&])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-return-type\": {\n\t\t\t\"name\": \"meta.return.type.arrow.js\",\n\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-return-type-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"possibly-arrow-return-type\": {\n\t\t\t\"begin\": \"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*=>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.arrow.js meta.return.type.arrow.js keyword.operator.type.annotation.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\"contentName\": \"meta.arrow.js meta.return.type.arrow.js\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-return-type-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-return-type-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[:])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-parameters\": {\n\t\t\t\"name\": \"meta.type.parameters.js\",\n\t\t\t\"begin\": \"(<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\",\n\t\t\t\t\t\"match\": \"(=)(?!>)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-arguments\": {\n\t\t\t\"name\": \"meta.type.parameters.js\",\n\t\t\t\"begin\": \"\\\\<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-arguments-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-primitive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-builtin-literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-tuple\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-fn-type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-paren-or-function-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-function-return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-primitive\": {\n\t\t\t\"name\": \"support.type.primitive.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"type-builtin-literals\": {\n\t\t\t\"name\": \"support.type.builtin.js\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"type-tuple\": {\n\t\t\t\"name\": \"meta.type.tuple.js\",\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(\\\\?)?\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-object\": {\n\t\t\t\"name\": \"meta.object.type.js\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-mapped-type-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.spread.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-conditional\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=:)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-paren-or-function-parameters\": {\n\t\t\t\"name\": \"meta.type.paren.cover.js\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=\\\\s*(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.js\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-fn-type-parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b(?=\\\\s*\\\\<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.constructor.js storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.constructor.js keyword.control.new.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.constructor.js\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.new.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.js\",\n\t\t\t\t\t\"begin\": \"(?x)(\\n  (?=\\n    [(]\\\\s*(\\n      ([)]) |\\n      (\\\\.\\\\.\\\\.) |\\n      ([_$[:alnum:]]+\\\\s*(\\n        ([:,?=])|\\n        ([)]\\\\s*=>)\\n      ))\\n    )\\n  )\\n)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-function-return-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.return.js\",\n\t\t\t\t\t\"begin\": \"(=>)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!=>)(?<![|&])(?=[,\\\\]\\\\)\\\\{\\\\}=;>:\\\\?]|//|$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-function-return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.return.js\",\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!=>)(?<![|&])((?=[,\\\\]\\\\)\\\\{\\\\}=;:\\\\?>]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-function-return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-function-return-type-core\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==>)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typeof-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-infer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([&|])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[&|]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.keyof.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))keyof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.js\",\n\t\t\t\t\t\"match\": \"(\\\\?|\\\\:)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.import.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*\\\\()\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-infer\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(infer)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s+(extends)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))?\",\n\t\t\t\t\t\"name\": \"meta.type.infer.js\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.infer.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.extends.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-predicate-operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(asserts)\\\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s(is)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.is.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(asserts)\\\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js variable.language.this.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))asserts(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.is.js\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))is(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(<)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.begin.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.end.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.type.parameters.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.begin.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.end.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.type.parameters.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.js\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"punctuation-comma\": {\n\t\t\t\"name\": \"punctuation.separator.comma.js\",\n\t\t\t\"match\": \",\"\n\t\t},\n\t\t\"punctuation-semicolon\": {\n\t\t\t\"name\": \"punctuation.terminator.statement.js\",\n\t\t\t\"match\": \";\"\n\t\t},\n\t\t\"punctuation-accessor\": {\n\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qstring-double\": {\n\t\t\t\"name\": \"string.quoted.double.js\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\")|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qstring-single\": {\n\t\t\t\"name\": \"string.quoted.single.js\",\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\')|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-character-escape\": {\n\t\t\t\"name\": \"constant.character.escape.js\",\n\t\t\t\"match\": \"\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\\\{[0-9A-Fa-f]+\\\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)\"\n\t\t},\n\t\t\"template\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"string.template.js\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js punctuation.definition.string.template.begin.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js punctuation.definition.string.template.end.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template-substitution-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n\t\t\t\t\t\"end\": \"(?=`)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#support-function-call-identifiers\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js\",\n\t\t\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=`)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-substitution-element\": {\n\t\t\t\"name\": \"meta.template.expression.js\",\n\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"contentName\": \"meta.embedded.line.js\"\n\t\t},\n\t\t\"type-string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"string.template.js\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js punctuation.definition.string.template.begin.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js punctuation.definition.string.template.end.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template-type-substitution-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-type-substitution-element\": {\n\t\t\t\"name\": \"meta.template.expression.js\",\n\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"contentName\": \"meta.embedded.line.js\"\n\t\t},\n\t\t\"regex\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.regexp.js\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--|})(?<=[=(:,\\\\[?+!]|^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case|=>|&&|\\\\|\\\\||\\\\*\\\\/)\\\\s*(\\\\/)(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[\\\\()]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)+\\\\]|\\\\(([^\\\\)\\\\\\\\]|\\\\\\\\.)+\\\\))+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.regexp.js\",\n\t\t\t\t\t\"begin\": \"((?<![_$[:alnum:])\\\\]]|\\\\+\\\\+|--|}|\\\\*\\\\/)|((?<=^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case))\\\\s*)\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.anchor.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[bB]|\\\\^|\\\\$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[1-9]\\\\d*|\\\\\\\\k<([a-zA-Z_$][\\\\w$]*)>\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\t\t\"match\": \"[?+*]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)\\\\}\\\\??\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.or.regexp\",\n\t\t\t\t\t\"match\": \"\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.assertion.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?<!))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.assertion.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.look-ahead.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.negative-look-ahead.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.look-behind.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.negative-look-behind.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.regexp\",\n\t\t\t\t\t\"begin\": \"\\\\((?:(\\\\?:)|(?:\\\\?<([a-zA-Z_$][\\\\w$]*)>))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.no-capture.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.character-class.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.other.character-class.range.regexp\",\n\t\t\t\t\t\t\t\"match\": \"(?:.|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\\\\-(?:[^\\\\]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regex-character-class\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.character-class.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[wWsSdDtrnvf]|\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.control.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\c[A-Z]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.js\",\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#docblock\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.js\",\n\t\t\t\t\t\"begin\": \"(/\\\\*)(?:\\\\s*((@)internal)(?=\\\\s|(\\\\*/)))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$)\",\n\t\t\t\t\t\"contentName\": \"comment.line.double-slash.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-line-comment-consuming-line-ending\": {\n\t\t\t\"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^)\",\n\t\t\t\"contentName\": \"comment.line.double-slash.js\"\n\t\t},\n\t\t\"directives\": {\n\t\t\t\"name\": \"comment.line.triple-slash.directive.js\",\n\t\t\t\"begin\": \"^(///)\\\\s*(?=<(reference|amd-dependency|amd-module)(\\\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\\\s*=\\\\s*((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))+\\\\s*/>\\\\s*$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.tag.js\",\n\t\t\t\t\t\"begin\": \"(<)(reference|amd-dependency|amd-module)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.directive.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.directive.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.directive.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.directive.js\",\n\t\t\t\t\t\t\t\"match\": \"path|types|no-default-lib|lib|name|resolution-mode\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js\",\n\t\t\t\t\t\t\t\"match\": \"=\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"docblock\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)(?:access|api))\\n\\\\s+\\n(private|protected|public)\\n\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.access-type.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)author)\\n\\\\s+\\n(\\n  [^@\\\\s<>*/]\\n  (?:[^@<>*/]|\\\\*[^/])*\\n)\\n(?:\\n  \\\\s*\\n  (<)\\n  ([^>\\\\s]+)\\n  (>)\\n)?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.email.link.underline.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)borrows) \\\\s+\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <that namepath>\\n\\\\s+ (as) \\\\s+              # as\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <this namepath>\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.control.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.example.jsdoc\",\n\t\t\t\t\t\"begin\": \"((@)example)\\\\s+\",\n\t\t\t\t\t\"end\": \"(?=@|\\\\*/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s\\\\*\\\\s+\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"contentName\": \"constant.other.description.jsdoc\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(<)caption(>)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.inline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(</)caption(>)|(?=\\\\*/)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.inline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"source.embedded.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) ((@)kind) \\\\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.symbol-type.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)see)\\n\\\\s+\\n(?:\\n  # URL\\n  (\\n    (?=https?://)\\n    (?:[^\\\\s*]|\\\\*[^/])+\\n  )\\n  |\\n  # JSDoc namepath\\n  (\\n    (?!\\n      # Avoid matching bare URIs (also acceptable as links)\\n      https?://\\n      |\\n      # Avoid matching {@inline tags}; we match those below\\n      (?:\\\\[[^\\\\[\\\\]]*\\\\])? # Possible description [preceding]{@tag}\\n      {@(?:link|linkcode|linkplain|tutorial)\\\\b\\n    )\\n    # Matched namepath\\n    (?:[^@\\\\s*/]|\\\\*[^/])+\\n  )\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.link.underline.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)template)\\n\\\\s+\\n# One or more valid identifiers\\n(\\n  [A-Za-z_$]         # First character: non-numeric word character\\n  [\\\\w$.\\\\[\\\\]]*        # Rest of identifier\\n  (?:                # Possible list of additional identifiers\\n    \\\\s* , \\\\s*\\n    [A-Za-z_$]\\n    [\\\\w$.\\\\[\\\\]]*\\n  )*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)((@)template)\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:arg|argument|const|constant|member|namespace|param|var)\\n)\\n\\\\s+\\n(\\n  [A-Za-z_$]\\n  [\\\\w$.\\\\[\\\\]]*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)typedef)\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"(?:[^@\\\\s*/]|\\\\*[^/])+\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(\\\\[)\\\\s*\\n[\\\\w$]+\\n(?:\\n  (?:\\\\[\\\\])?                                        # Foo[ ].bar properties within an array\\n  \\\\.                                                # Foo.Bar namespaced parameter\\n  [\\\\w$]+\\n)*\\n(?:\\n  \\\\s*\\n  (=)                                                # [foo=bar] Default parameter value\\n  \\\\s*\\n  (\\n    # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\\n    (?>\\n      \\\"(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!\\\"))|[^*\\\\\\\\])*?\\\" |                      # [foo=\\\"bar\\\"] Double-quoted\\n      '(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!'))|[^*\\\\\\\\])*?' |                      # [foo='bar'] Single-quoted\\n      \\\\[ (?:(?:\\\\*(?!/))|[^*])*? \\\\] |                                # [foo=[1,2]] Array literal\\n      (?:(?:\\\\*(?!/))|\\\\s(?!\\\\s*\\\\])|\\\\[.*?(?:\\\\]|(?=\\\\*/))|[^*\\\\s\\\\[\\\\]])*   # Everything else\\n    )*\\n  )\\n)?\\n\\\\s*(?:(\\\\])((?:[^*\\\\s]|\\\\*[^\\\\s/])+)?|(?=\\\\*/))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.begin.bracket.square.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"source.embedded.js\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.end.bracket.square.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.syntax.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(\\n  (@)\\n  (?:define|enum|exception|export|extends|lends|implements|modifies\\n  |namespace|private|protected|returns?|satisfies|suppress|this|throws|type\\n  |yields?)\\n)\\n\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:alias|augments|callback|constructs|emits|event|fires|exports?\\n  |extends|external|function|func|host|lends|listens|interface|memberof!?\\n  |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\\n)\\n\\\\s+\\n(\\n  (?:\\n    [^{}@\\\\s*] | \\\\*[^/]\\n  )+\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"variable.other.jsdoc\",\n\t\t\t\t\t\"begin\": \"((@)(?:default(?:value)?|license|version))\\\\s+(([''\\\"]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\3)|(?=$|\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^\\\\s*]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\",\n\t\t\t\t\t\"match\": \"(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline-tags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"brackets\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"end\": \"}|(?=\\\\*/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=\\\\*/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline-tags\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.description.jsdoc\",\n\t\t\t\t\t\"match\": \"(\\\\[)[^\\\\]]+(\\\\])(?={@(?:link|linkcode|linkplain|tutorial))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.square.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.square.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\"begin\": \"({)((@)(?:link(?:code|plain)?|tutorial))\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.inline.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G((?=https?://)(?:[^|}\\\\s*]|\\\\*[/])+)(\\\\|)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.link.underline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pipe.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G((?:[^{}@\\\\s|*]|\\\\*[^/])+)(\\\\|)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.description.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pipe.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsdoctype\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\"begin\": \"\\\\G({)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((}))\\\\s*|(?=\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes-in-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-in-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-without-attributes-in-expression\": {\n\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-without-attributes\": {\n\t\t\t\"name\": \"meta.tag.without-attributes.js\",\n\t\t\t\"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>)\",\n\t\t\t\"end\": \"(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"support.class.component.js\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"support.class.component.js\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.jsx.children.js\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-children\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-in-expression\": {\n\t\t\t\"begin\": \"(?x)\\n  (?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*\\n  (?!<\\\\s*[_$[:alpha:]][_$[:alnum:]]*((\\\\s+extends\\\\s+[^=>])|,)) # look ahead is not type parameter of arrow\\n  (?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag\": {\n\t\t\t\"name\": \"meta.tag.js\",\n\t\t\t\"begin\": \"(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"end\": \"(/>)|(?:(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.js\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"support.class.component.js\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"support.class.component.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[/]?>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsx-tag-attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=</)\",\n\t\t\t\t\t\"contentName\": \"meta.jsx.children.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsx-children\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-children\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-evaluated-code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-evaluated-code\": {\n\t\t\t\"contentName\": \"meta.embedded.expression.js\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-entities\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.entity.js\",\n\t\t\t\t\t\"match\": \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attributes\": {\n\t\t\t\"name\": \"meta.tag.attributes.js\",\n\t\t\t\"begin\": \"\\\\s+\",\n\t\t\t\"end\": \"(?=[/]?>)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attribute-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attribute-assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-string-double-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-string-single-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-evaluated-code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attributes-illegal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attribute-name\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\s*\\n  (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\\n  ([_$[:alpha:]][-_$[:alnum:]]*)\\n  (?=\\\\s|=|/?>|/\\\\*|//)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"jsx-tag-attribute-assignment\": {\n\t\t\t\"name\": \"keyword.operator.assignment.js\",\n\t\t\t\"match\": \"=(?=\\\\s*(?:'|\\\"|{|/\\\\*|//|\\\\n))\"\n\t\t},\n\t\t\"jsx-string-double-quoted\": {\n\t\t\t\"name\": \"string.quoted.double.js\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-string-single-quoted\": {\n\t\t\t\"name\": \"string.quoted.single.js\",\n\t\t\t\"begin\": \"'\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attributes-illegal\": {\n\t\t\t\"name\": \"invalid.illegal.attribute.js\",\n\t\t\t\"match\": \"\\\\S+\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScriptReact.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/TypeScript-TmLanguage/commit/48f608692aa6d6ad7bd65b478187906c798234a8\",\n\t\"name\": \"JavaScript (with React support)\",\n\t\"scopeName\": \"source.js.jsx\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#directives\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#statements\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#shebang\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"shebang\": {\n\t\t\t\"name\": \"comment.line.shebang.js.jsx\",\n\t\t\t\"match\": \"\\\\A(#!).*(?=$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"statements\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#after-operator-block-as-object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#label\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-alias-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-equals-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#export-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"control-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for-loop\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.trycatch.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|goto)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(return)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[;}]|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.switch.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#if-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.conditional.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.with.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(with)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(package)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.debugger.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"label\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressionWithoutIdentifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cast\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ternary-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#new-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#instanceof-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-objects\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressionPunctuations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decorator\": {\n\t\t\t\"name\": \"meta.decorator.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))\\\\@\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.decorator.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\s)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-expr\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^let|[^\\\\._$[:alnum:]]let|^var|[^\\\\._$[:alnum:]]var)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructuring-variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructuring-variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^const|[^\\\\._$[:alnum:]]const)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructuring-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructuring-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^using|[^\\\\._$[:alnum:]]using|^await\\\\s+using|[^\\\\._$[:alnum:]]await\\\\s+using)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*((?!\\\\S)|(?=\\\\/\\\\/))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js.jsx entity.name.function.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\\\!)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js.jsx variable.other.constant.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js.jsx variable.other.readwrite.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js.jsx variable.other.constant.js.jsx entity.name.function.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.js.jsx variable.other.constant.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-variable-type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-binding-pattern-variable.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.array-binding-pattern-variable.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-binding-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-binding-pattern-variable.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.array-binding-pattern-variable.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-binding-pattern-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#binding-element\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#binding-element-const\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element-propertyName\": {\n\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\"end\": \"(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.destructuring.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.object.property.js.jsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"binding-element-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-variable-rest\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.definition.variable.js.jsx variable.other.readwrite.js.jsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"destructuring-variable-rest-const\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.definition.variable.js.jsx variable.other.constant.js.jsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"object-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-element\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-pattern-const\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-element-const\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#binding-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-binding-pattern-const\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#binding-element-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-parameter\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.parameter.object-binding-pattern.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-object-binding-element\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.paramter.array-binding-pattern.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-object-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-array-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-parameter-rest\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter-object-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-element\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-array-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"field-declaration\": {\n\t\t\t\"name\": \"meta.field.declaration.js.jsx\",\n\t\t\t\"begin\": \"(?x)(?<!\\\\()(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s+)?(?=\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|\\\\}|$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?x)(?=\\\\}|;|,|$|(^(?!\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|$))))|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\\\?)|(\\\\!))?(?=\\\\s*\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.property.js.jsx entity.name.function.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.property.js.jsx variable.object.property.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\#?[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\!\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable-initializer\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!=|!)(=)(?!=)(?=\\\\s*\\\\S)(?!\\\\s*.*=>\\\\s*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!=|!)(=)(?!=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))|(?=^\\\\s*$)|(?<![\\\\|\\\\&\\\\+\\\\-\\\\*\\\\/])(?<=\\\\S)(?<!=)(?=\\\\s*$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-declaration\": {\n\t\t\t\"name\": \"meta.function.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.function.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.definition.function.js.jsx entity.name.function.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-expression\": {\n\t\t\t\"name\": \"meta.function.expression.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.function.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.definition.function.js.jsx entity.name.function.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;)|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-name\": {\n\t\t\t\"name\": \"meta.definition.function.js.jsx entity.name.function.js.jsx\",\n\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t},\n\t\t\"function-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-function-return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?\\\\s*\\\\b(constructor)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:(?:\\\\s*\\\\b(new)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|(?:(\\\\*)\\\\s*)?)(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.new.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.property.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-literal-method-declaration\": {\n\t\t\t\"name\": \"meta.method.declaration.js.jsx\",\n\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.property.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.property.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\(|\\\\<)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-declaration-name\": {\n\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??)\\\\s*[\\\\(\\\\<])\",\n\t\t\t\"end\": \"(?=\\\\(|\\\\<)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.method.js.jsx entity.name.function.js.jsx\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\?\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-function\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.js.jsx\",\n\t\t\t\t\t\"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?==>)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x) (?:\\n  (?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\n)? ((?<![})!\\\\]])\\\\s*\\n  (?=\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  )\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arrow-return-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.js.jsx\",\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((?<=\\\\}|\\\\S)(?<!=>)|((?!\\\\{)(?=\\\\S)))(?!\\\\/[\\\\/\\\\*])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"indexer-declaration\": {\n\t\t\t\"name\": \"meta.indexer.declaration.js.jsx\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])\\\\s*(\\\\?\\\\s*)?|$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"indexer-mapped-type-declaration\": {\n\t\t\t\"name\": \"meta.indexer.mappedtype.declaration.js.jsx\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([+-])?(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s+(in)\\\\s+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.in.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])([+-])?\\\\s*(\\\\?\\\\s*)?|$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters\": {\n\t\t\t\"name\": \"meta.parameters.js.jsx\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.js.jsx\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-declaration\": {\n\t\t\t\"name\": \"meta.class.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(class)\\\\b(?=\\\\s+|/[/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.class.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration-or-expression-patterns\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-expression\": {\n\t\t\t\"name\": \"meta.class.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(class)\\\\b(?=\\\\s+|[<{]|\\\\/[\\\\/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.class.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration-or-expression-patterns\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-declaration-or-expression-patterns\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface-declaration\": {\n\t\t\t\"name\": \"meta.interface.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(interface)\\\\b(?=\\\\s+|/[/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.interface.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.interface.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-or-interface-heritage\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(extends|implements)\\\\b)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s*\\\\??\\\\.\\\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\\\s*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.inherited-class.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-or-interface-body\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*\",\n\t\t\t\t\t\"end\": \"(?=\\\\s|[;),}\\\\]:\\\\-\\\\+]|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#access-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#after-operator-block-as-object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"access-modifier\": {\n\t\t\t\"name\": \"storage.modifier.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"property-accessor\": {\n\t\t\t\"name\": \"storage.type.property.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"async-modifier\": {\n\t\t\t\"name\": \"storage.modifier.async.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(async)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"enum-declaration\": {\n\t\t\t\"name\": \"meta.enum.declaration.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:\\\\b(const)\\\\s+)?\\\\b(enum)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.enummember.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\}|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\])))\",\n\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\}|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace-declaration\": {\n\t\t\t\"name\": \"meta.namespace.declaration.js.jsx\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(namespace|module)\\\\s+(?=[_$[:alpha:]\\\"'`]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.namespace.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.module.js.jsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-alias-declaration\": {\n\t\t\t\"name\": \"meta.type.declaration.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(type)\\\\b\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.type.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.alias.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(=)\\\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.intrinsic.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(=)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-equals-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.import-equals.external.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(require)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.require.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.import-equals.internal.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(?!require\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;|$|^)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.js.jsx\",\n\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-declaration\": {\n\t\t\t\"name\": \"meta.import.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type)(?!\\\\s+from))?(?!\\\\s*[:\\\\(])(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.control.type.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!^import|[^\\\\._$[:alnum:]]import)(?=;|$|^)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^import|[^\\\\._$[:alnum:]]import)(?!\\\\s*[\\\"'])\",\n\t\t\t\t\t\"end\": \"\\\\bfrom\\\\b\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.from.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"export-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)\\\\s+(as)\\\\s+(namespace)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.namespace.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.export.default.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?(?:(?:\\\\s*(=))|(?:\\\\s+(default)(?=\\\\s+)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface-declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.export.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?\\\\b(?!(\\\\$)|(\\\\s*:))((?=\\\\s*[\\\\{*])|((?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s|,))(?!\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.from.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\bfrom\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-assert-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-assert-clause\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(with)|(assert))\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.with.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.assert.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-literal.key.js.jsx\",\n\t\t\t\t\t\"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.js.jsx\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-block\": {\n\t\t\t\"name\": \"meta.block.js.jsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-clause\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(?:(\\\\btype)\\\\s+)?(?:(\\\\bdefault)|(\\\\*)|(\\\\b[_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))))\\\\s+(as)\\\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.import-export-all.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.import-export-all.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.default.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\b(default)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\btype)\\\\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch-statement\": {\n\t\t\t\"name\": \"switch-statement.expr.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bswitch\\\\s*\\\\()\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"switch-expression.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(switch)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"switch-block.expr.js.jsx\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"case-clause.expr.js.jsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=:)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"case-clause.expr.js.jsx punctuation.definition.section.case-statement.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.block.js.jsx punctuation.definition.block.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.block.js.jsx punctuation.definition.block.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.block.js.jsx\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(:)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"case-clause.expr.js.jsx punctuation.definition.section.case-statement.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"for-loop\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))for(?=((\\\\s+|(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*))await)?\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)?(\\\\())\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.js.jsx\",\n\t\t\t\t\t\"match\": \"await\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-expr\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"if-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bif\\\\s*(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))\\\\s*(?!\\\\{))\",\n\t\t\t\t\t\"end\": \"(?=;|$|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(if)\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"string.regexp.js.jsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decl-block\": {\n\t\t\t\"name\": \"meta.block.js.jsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"after-operator-block-as-object-literal\": {\n\t\t\t\"name\": \"meta.objectliteral.js.jsx\",\n\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--)(?<=[:=(,\\\\[?+!>]|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^yield|[^\\\\._$[:alnum:]]yield|^throw|[^\\\\._$[:alnum:]]throw|^in|[^\\\\._$[:alnum:]]in|^of|[^\\\\._$[:alnum:]]of|^typeof|[^\\\\._$[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-member\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-literal\": {\n\t\t\t\"name\": \"meta.objectliteral.js.jsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-member\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-member\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-literal-method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx meta.object-literal.key.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=:)|((?<=[\\\\]])(?=\\\\s*[\\\\(\\\\<]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx meta.object-literal.key.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?=[\\\\'\\\\\\\"\\\\`])\",\n\t\t\t\t\t\"end\": \"(?=:)|((?<=[\\\\'\\\\\\\"\\\\`])(?=((\\\\s*[\\\\(\\\\<,}])|(\\\\s+(as|satisifies)\\\\s+))))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx meta.object-literal.key.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?=(\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)))\",\n\t\t\t\t\t\"end\": \"(?=:)|(?=\\\\s*([\\\\(\\\\<,}])|(\\\\s+as|satisifies\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<=[\\\\]\\\\'\\\\\\\"\\\\`])(?=\\\\s*[\\\\(\\\\<])\",\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"match\": \"(?![_$[:alpha:]])([[:digit:]]+)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"match\": \"(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)*\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"begin\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.spread.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*([,}]|$))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.satisfies.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|^|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisifies)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?=[_$[:alpha:]][_$[:alnum:]]*\\\\s*=)\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.js.jsx\",\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.js.jsx punctuation.separator.key-value.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?(?=\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(?=\\\\<\\\\s*$)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\>)\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ternary-expression\": {\n\t\t\t\"begin\": \"(?!\\\\?\\\\.\\\\s*[^[:digit:]])(\\\\?)(?!\\\\?)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.js.jsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-target\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-optionals\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\"end\": \"(?<=\\\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.js.jsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-target\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-optionals\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call-target\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-function-call-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.function.js.jsx\",\n\t\t\t\t\t\"match\": \"(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call-optionals\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function-call.js.jsx punctuation.accessor.optional.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\?\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function-call.js.jsx keyword.operator.definiteassignment.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\!\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support-function-call-identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-objects\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.import.js.jsx\",\n\t\t\t\t\t\"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*[\\\\(]\\\\s*[\\\\\\\"\\\\'\\\\`]))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"new-expr\": {\n\t\t\t\"name\": \"new.expr.js.jsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.new.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"instanceof-expr\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.instanceof.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|(===|!==|==|!=)|(([\\\\&\\\\~\\\\^\\\\|]\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s+instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression-possibly-arrow\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[(=,])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[(=,]|=>|^return|[^\\\\._$[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)))\\\\s*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression-possibly-arrow-with-typeparameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-inside-possibly-arrow-parens\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*[:,]|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.js.jsx\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cast\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.flow.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(await)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?=\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s*(\\\\*))?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.delete.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))delete(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.in.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))in(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.of.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))of(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.instanceof.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.new.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typeof-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.void.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))void(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*($|[;,:})\\\\]]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.satisfies.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^|[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisfies)\\\\s+)|(\\\\s+\\\\<))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.spread.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\*=|(?<!\\\\()/=|%=|\\\\+=|\\\\-=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\&=|\\\\^=|<<=|>>=|>>>=|\\\\|=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.js.jsx\",\n\t\t\t\t\t\"match\": \"<<|>>>|>>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.js.jsx\",\n\t\t\t\t\t\"match\": \"===|!==|==|!=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.relational.js.jsx\",\n\t\t\t\t\t\"match\": \"<=|>=|<>|<|>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=[_$[:alnum:]])(\\\\!)\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.logical.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\!|&&|\\\\|\\\\||\\\\?\\\\?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\&|~|\\\\^|\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.js.jsx\",\n\t\t\t\t\t\"match\": \"--\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.increment.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js.jsx\",\n\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)+(?:(/=)|(?:(/)(?![/*]))))\",\n\t\t\t\t\t\"end\": \"(?:(/=)|(?:(/)(?!\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typeof-operator\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))typeof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.typeof.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[,);}\\\\]=>:&|{\\\\?]|(extends\\\\s+)|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#boolean-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#null-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undefined-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numericConstant-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#this-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#super-literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-literal\": {\n\t\t\t\"name\": \"meta.array.literal.js.jsx\",\n\t\t\t\"begin\": \"\\\\s*(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numeric-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.hex.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.binary.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.octal.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"boolean-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.true.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))true(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.false.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))false(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"null-literal\": {\n\t\t\t\"name\": \"constant.language.null.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))null(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"this-literal\": {\n\t\t\t\"name\": \"variable.language.this.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))this\\\\b(?!\\\\$)\"\n\t\t},\n\t\t\"super-literal\": {\n\t\t\t\"name\": \"variable.language.super.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))super\\\\b(?!\\\\$)\"\n\t\t},\n\t\t\"undefined-literal\": {\n\t\t\t\"name\": \"constant.language.undefined.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))undefined(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"numericConstant-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.nan.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))NaN(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.infinity.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Infinity(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support-objects\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.language.arguments.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(arguments)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.promise.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(Promise)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(import)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(meta)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.importmeta.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(target)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.new.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.target.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]]))) \\\\s* (?:\\n  (?:(constructor|length|prototype|__proto__)\\\\b(?!\\\\$|\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\\\())\\n  |\\n  (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(exports)|(module)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.property.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.constant.js.jsx\",\n\t\t\t\t\t\"match\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.readwrite.js.jsx\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.js.jsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\\\??\\\\.\\\\s*prototype\\\\b(?!\\\\$))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(?:\\n  (\\\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\\n  (\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.object.property.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:\\n  ([[:upper:]][_$[:digit:][:upper:]]*) |\\n  ([_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.object.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.js.jsx\",\n\t\t\t\t\t\"begin\": \"(:)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])(?!\\\\s*[|&]\\\\s+)((?=^|[,);\\\\}\\\\]]|//)|(?==[^>])|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.js.jsx\",\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])((?=[,);\\\\}\\\\]]|\\\\/\\\\/)|(?==[^>])|(?=^\\\\s*$)|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.js.jsx\",\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,)])|(?==[^>])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.return.type.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])(?=$|^|[{};,]|//)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.return.type.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])((?=[{};,]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-type-core\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[:|&])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-return-type\": {\n\t\t\t\"name\": \"meta.return.type.arrow.js.jsx\",\n\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-return-type-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"possibly-arrow-return-type\": {\n\t\t\t\"begin\": \"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*=>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.arrow.js.jsx meta.return.type.arrow.js.jsx keyword.operator.type.annotation.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\"contentName\": \"meta.arrow.js.jsx meta.return.type.arrow.js.jsx\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-return-type-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-return-type-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[:])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-parameters\": {\n\t\t\t\"name\": \"meta.type.parameters.js.jsx\",\n\t\t\t\"begin\": \"(<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\",\n\t\t\t\t\t\"match\": \"(=)(?!>)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-arguments\": {\n\t\t\t\"name\": \"meta.type.parameters.js.jsx\",\n\t\t\t\"begin\": \"\\\\<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-arguments-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-primitive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-builtin-literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-tuple\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-fn-type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-paren-or-function-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-function-return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-primitive\": {\n\t\t\t\"name\": \"support.type.primitive.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"type-builtin-literals\": {\n\t\t\t\"name\": \"support.type.builtin.js.jsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"type-tuple\": {\n\t\t\t\"name\": \"meta.type.tuple.js.jsx\",\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(\\\\?)?\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-object\": {\n\t\t\t\"name\": \"meta.object.type.js.jsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-mapped-type-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.spread.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-conditional\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=:)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-paren-or-function-parameters\": {\n\t\t\t\"name\": \"meta.type.paren.cover.js.jsx\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=\\\\s*(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.js.jsx\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-fn-type-parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b(?=\\\\s*\\\\<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.constructor.js.jsx storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.constructor.js.jsx keyword.control.new.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.constructor.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.new.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?x)(\\n  (?=\\n    [(]\\\\s*(\\n      ([)]) |\\n      (\\\\.\\\\.\\\\.) |\\n      ([_$[:alnum:]]+\\\\s*(\\n        ([:,?=])|\\n        ([)]\\\\s*=>)\\n      ))\\n    )\\n  )\\n)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-function-return-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.return.js.jsx\",\n\t\t\t\t\t\"begin\": \"(=>)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!=>)(?<![|&])(?=[,\\\\]\\\\)\\\\{\\\\}=;>:\\\\?]|//|$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-function-return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.return.js.jsx\",\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!=>)(?<![|&])((?=[,\\\\]\\\\)\\\\{\\\\}=;:\\\\?>]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-function-return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-function-return-type-core\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==>)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typeof-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-infer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([&|])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[&|]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.keyof.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))keyof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.js.jsx\",\n\t\t\t\t\t\"match\": \"(\\\\?|\\\\:)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.import.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*\\\\()\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-infer\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(infer)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s+(extends)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))?\",\n\t\t\t\t\t\"name\": \"meta.type.infer.js.jsx\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.infer.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.extends.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-predicate-operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(asserts)\\\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s(is)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.is.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(asserts)\\\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx variable.language.this.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))asserts(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.is.js.jsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))is(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(<)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js.jsx punctuation.definition.typeparameters.begin.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js.jsx punctuation.definition.typeparameters.end.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.type.parameters.js.jsx\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js.jsx punctuation.definition.typeparameters.begin.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.js.jsx punctuation.definition.typeparameters.end.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.type.parameters.js.jsx\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.js.jsx\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"punctuation-comma\": {\n\t\t\t\"name\": \"punctuation.separator.comma.js.jsx\",\n\t\t\t\"match\": \",\"\n\t\t},\n\t\t\"punctuation-semicolon\": {\n\t\t\t\"name\": \"punctuation.terminator.statement.js.jsx\",\n\t\t\t\"match\": \";\"\n\t\t},\n\t\t\"punctuation-accessor\": {\n\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.optional.js.jsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qstring-double\": {\n\t\t\t\"name\": \"string.quoted.double.js.jsx\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\")|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qstring-single\": {\n\t\t\t\"name\": \"string.quoted.single.js.jsx\",\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\')|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-character-escape\": {\n\t\t\t\"name\": \"constant.character.escape.js.jsx\",\n\t\t\t\"match\": \"\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\\\{[0-9A-Fa-f]+\\\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)\"\n\t\t},\n\t\t\"template\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"string.template.js.jsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js.jsx punctuation.definition.string.template.begin.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js.jsx punctuation.definition.string.template.end.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template-substitution-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n\t\t\t\t\t\"end\": \"(?=`)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#support-function-call-identifiers\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js.jsx\",\n\t\t\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=`)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-substitution-element\": {\n\t\t\t\"name\": \"meta.template.expression.js.jsx\",\n\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"contentName\": \"meta.embedded.line.js.jsx\"\n\t\t},\n\t\t\"type-string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"string.template.js.jsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js.jsx punctuation.definition.string.template.begin.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.js.jsx punctuation.definition.string.template.end.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template-type-substitution-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-type-substitution-element\": {\n\t\t\t\"name\": \"meta.template.expression.js.jsx\",\n\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"contentName\": \"meta.embedded.line.js.jsx\"\n\t\t},\n\t\t\"regex\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.regexp.js.jsx\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--|})(?<=[=(:,\\\\[?+!]|^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case|=>|&&|\\\\|\\\\||\\\\*\\\\/)\\\\s*(\\\\/)(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[\\\\()]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)+\\\\]|\\\\(([^\\\\)\\\\\\\\]|\\\\\\\\.)+\\\\))+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.regexp.js.jsx\",\n\t\t\t\t\t\"begin\": \"((?<![_$[:alnum:])\\\\]]|\\\\+\\\\+|--|}|\\\\*\\\\/)|((?<=^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case))\\\\s*)\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.anchor.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[bB]|\\\\^|\\\\$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[1-9]\\\\d*|\\\\\\\\k<([a-zA-Z_$][\\\\w$]*)>\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\t\t\"match\": \"[?+*]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)\\\\}\\\\??\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.or.regexp\",\n\t\t\t\t\t\"match\": \"\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.assertion.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?<!))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.assertion.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.look-ahead.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.negative-look-ahead.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.look-behind.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.negative-look-behind.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.regexp\",\n\t\t\t\t\t\"begin\": \"\\\\((?:(\\\\?:)|(?:\\\\?<([a-zA-Z_$][\\\\w$]*)>))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.no-capture.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.character-class.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.other.character-class.range.regexp\",\n\t\t\t\t\t\t\t\"match\": \"(?:.|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\\\\-(?:[^\\\\]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regex-character-class\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.character-class.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[wWsSdDtrnvf]|\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.control.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\c[A-Z]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.js.jsx\",\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#docblock\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.js.jsx\",\n\t\t\t\t\t\"begin\": \"(/\\\\*)(?:\\\\s*((@)internal)(?=\\\\s|(\\\\*/)))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$)\",\n\t\t\t\t\t\"contentName\": \"comment.line.double-slash.js.jsx\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-line-comment-consuming-line-ending\": {\n\t\t\t\"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.line.double-slash.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^)\",\n\t\t\t\"contentName\": \"comment.line.double-slash.js.jsx\"\n\t\t},\n\t\t\"directives\": {\n\t\t\t\"name\": \"comment.line.triple-slash.directive.js.jsx\",\n\t\t\t\"begin\": \"^(///)\\\\s*(?=<(reference|amd-dependency|amd-module)(\\\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\\\s*=\\\\s*((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))+\\\\s*/>\\\\s*$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.tag.js.jsx\",\n\t\t\t\t\t\"begin\": \"(<)(reference|amd-dependency|amd-module)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.directive.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.directive.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.directive.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.directive.js.jsx\",\n\t\t\t\t\t\t\t\"match\": \"path|types|no-default-lib|lib|name|resolution-mode\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\",\n\t\t\t\t\t\t\t\"match\": \"=\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"docblock\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)(?:access|api))\\n\\\\s+\\n(private|protected|public)\\n\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.access-type.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)author)\\n\\\\s+\\n(\\n  [^@\\\\s<>*/]\\n  (?:[^@<>*/]|\\\\*[^/])*\\n)\\n(?:\\n  \\\\s*\\n  (<)\\n  ([^>\\\\s]+)\\n  (>)\\n)?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.email.link.underline.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)borrows) \\\\s+\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <that namepath>\\n\\\\s+ (as) \\\\s+              # as\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <this namepath>\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.control.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.example.jsdoc\",\n\t\t\t\t\t\"begin\": \"((@)example)\\\\s+\",\n\t\t\t\t\t\"end\": \"(?=@|\\\\*/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s\\\\*\\\\s+\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"contentName\": \"constant.other.description.jsdoc\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(<)caption(>)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.inline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(</)caption(>)|(?=\\\\*/)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.inline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"source.embedded.js.jsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) ((@)kind) \\\\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.symbol-type.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)see)\\n\\\\s+\\n(?:\\n  # URL\\n  (\\n    (?=https?://)\\n    (?:[^\\\\s*]|\\\\*[^/])+\\n  )\\n  |\\n  # JSDoc namepath\\n  (\\n    (?!\\n      # Avoid matching bare URIs (also acceptable as links)\\n      https?://\\n      |\\n      # Avoid matching {@inline tags}; we match those below\\n      (?:\\\\[[^\\\\[\\\\]]*\\\\])? # Possible description [preceding]{@tag}\\n      {@(?:link|linkcode|linkplain|tutorial)\\\\b\\n    )\\n    # Matched namepath\\n    (?:[^@\\\\s*/]|\\\\*[^/])+\\n  )\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.link.underline.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)template)\\n\\\\s+\\n# One or more valid identifiers\\n(\\n  [A-Za-z_$]         # First character: non-numeric word character\\n  [\\\\w$.\\\\[\\\\]]*        # Rest of identifier\\n  (?:                # Possible list of additional identifiers\\n    \\\\s* , \\\\s*\\n    [A-Za-z_$]\\n    [\\\\w$.\\\\[\\\\]]*\\n  )*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)((@)template)\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:arg|argument|const|constant|member|namespace|param|var)\\n)\\n\\\\s+\\n(\\n  [A-Za-z_$]\\n  [\\\\w$.\\\\[\\\\]]*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)typedef)\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"(?:[^@\\\\s*/]|\\\\*[^/])+\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(\\\\[)\\\\s*\\n[\\\\w$]+\\n(?:\\n  (?:\\\\[\\\\])?                                        # Foo[ ].bar properties within an array\\n  \\\\.                                                # Foo.Bar namespaced parameter\\n  [\\\\w$]+\\n)*\\n(?:\\n  \\\\s*\\n  (=)                                                # [foo=bar] Default parameter value\\n  \\\\s*\\n  (\\n    # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\\n    (?>\\n      \\\"(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!\\\"))|[^*\\\\\\\\])*?\\\" |                      # [foo=\\\"bar\\\"] Double-quoted\\n      '(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!'))|[^*\\\\\\\\])*?' |                      # [foo='bar'] Single-quoted\\n      \\\\[ (?:(?:\\\\*(?!/))|[^*])*? \\\\] |                                # [foo=[1,2]] Array literal\\n      (?:(?:\\\\*(?!/))|\\\\s(?!\\\\s*\\\\])|\\\\[.*?(?:\\\\]|(?=\\\\*/))|[^*\\\\s\\\\[\\\\]])*   # Everything else\\n    )*\\n  )\\n)?\\n\\\\s*(?:(\\\\])((?:[^*\\\\s]|\\\\*[^\\\\s/])+)?|(?=\\\\*/))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.begin.bracket.square.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"source.embedded.js.jsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.end.bracket.square.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.syntax.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(\\n  (@)\\n  (?:define|enum|exception|export|extends|lends|implements|modifies\\n  |namespace|private|protected|returns?|satisfies|suppress|this|throws|type\\n  |yields?)\\n)\\n\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:alias|augments|callback|constructs|emits|event|fires|exports?\\n  |extends|external|function|func|host|lends|listens|interface|memberof!?\\n  |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\\n)\\n\\\\s+\\n(\\n  (?:\\n    [^{}@\\\\s*] | \\\\*[^/]\\n  )+\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"variable.other.jsdoc\",\n\t\t\t\t\t\"begin\": \"((@)(?:default(?:value)?|license|version))\\\\s+(([''\\\"]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\3)|(?=$|\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^\\\\s*]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\",\n\t\t\t\t\t\"match\": \"(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline-tags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"brackets\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"end\": \"}|(?=\\\\*/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=\\\\*/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline-tags\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.description.jsdoc\",\n\t\t\t\t\t\"match\": \"(\\\\[)[^\\\\]]+(\\\\])(?={@(?:link|linkcode|linkplain|tutorial))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.square.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.square.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\"begin\": \"({)((@)(?:link(?:code|plain)?|tutorial))\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.inline.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G((?=https?://)(?:[^|}\\\\s*]|\\\\*[/])+)(\\\\|)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.link.underline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pipe.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G((?:[^{}@\\\\s|*]|\\\\*[^/])+)(\\\\|)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.description.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pipe.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsdoctype\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\"begin\": \"\\\\G({)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((}))\\\\s*|(?=\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes-in-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-in-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-without-attributes-in-expression\": {\n\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-without-attributes\": {\n\t\t\t\"name\": \"meta.tag.without-attributes.js.jsx\",\n\t\t\t\"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>)\",\n\t\t\t\"end\": \"(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"support.class.component.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"support.class.component.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.jsx.children.js.jsx\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-children\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-in-expression\": {\n\t\t\t\"begin\": \"(?x)\\n  (?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*\\n  (?!<\\\\s*[_$[:alpha:]][_$[:alnum:]]*((\\\\s+extends\\\\s+[^=>])|,)) # look ahead is not type parameter of arrow\\n  (?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag\": {\n\t\t\t\"name\": \"meta.tag.js.jsx\",\n\t\t\t\"begin\": \"(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"end\": \"(/>)|(?:(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"support.class.component.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.namespace.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"support.class.component.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[/]?>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsx-tag-attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=</)\",\n\t\t\t\t\t\"contentName\": \"meta.jsx.children.js.jsx\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsx-children\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-children\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-evaluated-code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-evaluated-code\": {\n\t\t\t\"contentName\": \"meta.embedded.expression.js.jsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-entities\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.entity.js.jsx\",\n\t\t\t\t\t\"match\": \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.js.jsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.js.jsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attributes\": {\n\t\t\t\"name\": \"meta.tag.attributes.js.jsx\",\n\t\t\t\"begin\": \"\\\\s+\",\n\t\t\t\"end\": \"(?=[/]?>)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attribute-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attribute-assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-string-double-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-string-single-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-evaluated-code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attributes-illegal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attribute-name\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\s*\\n  (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\\n  ([_$[:alpha:]][-_$[:alnum:]]*)\\n  (?=\\\\s|=|/?>|/\\\\*|//)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.js.jsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.js.jsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"jsx-tag-attribute-assignment\": {\n\t\t\t\"name\": \"keyword.operator.assignment.js.jsx\",\n\t\t\t\"match\": \"=(?=\\\\s*(?:'|\\\"|{|/\\\\*|//|\\\\n))\"\n\t\t},\n\t\t\"jsx-string-double-quoted\": {\n\t\t\t\"name\": \"string.quoted.double.js.jsx\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-string-single-quoted\": {\n\t\t\t\"name\": \"string.quoted.single.js.jsx\",\n\t\t\t\"begin\": \"'\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.js.jsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attributes-illegal\": {\n\t\t\t\"name\": \"invalid.illegal.attribute.js.jsx\",\n\t\t\t\"match\": \"\\\\S+\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/javascript/syntaxes/Readme.md",
    "content": "The file `JavaScript.tmLanguage.json` is derived from [TypeScriptReact.tmLanguage](https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScriptReact.tmLanguage).\n\nTo update to the latest version:\n\n- `cd extensions/typescript-basics` and run `npm run update-grammars`\n- don't forget to run the integration tests at `./scripts/test-integration.sh`\n\nThe script does the following changes:\n\n- fileTypes .tsx -> .js & .jsx\n- scopeName scope.tsx -> scope.js\n- update all rule names .tsx -> .js\n"
  },
  {
    "path": "extensions/javascript/syntaxes/Regular Expressions (JavaScript).tmLanguage",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>fileTypes</key>\n\t<array/>\n\t<key>hideFromUser</key>\n\t<true/>\n\t<key>name</key>\n\t<string>Regular Expressions (JavaScript)</string>\n\t<key>patterns</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>include</key>\n\t\t\t<string>#regexp</string>\n\t\t</dict>\n\t</array>\n\t<key>repository</key>\n\t<dict>\n\t\t<key>regex-character-class</key>\n\t\t<dict>\n\t\t\t<key>patterns</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>\\\\[wWsSdD]|\\.</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>constant.character.character-class.regexp</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>\\\\([0-7]{3}|x\\h\\h|u\\h\\h\\h\\h)</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>constant.character.numeric.regexp</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>\\\\c[A-Z]</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>constant.character.control.regexp</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>\\\\.</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>constant.character.escape.backslash.regexp</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t\t<key>regexp</key>\n\t\t<dict>\n\t\t\t<key>patterns</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>\\\\[bB]|\\^|\\$</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>keyword.control.anchor.regexp</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>\\\\[1-9]\\d*</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>keyword.other.back-reference.regexp</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>keyword.operator.quantifier.regexp</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>match</key>\n\t\t\t\t\t<string>\\|</string>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>keyword.operator.or.regexp</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t<string>(\\()((\\?=)|(\\?!))</string>\n\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>meta.assertion.look-ahead.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>meta.assertion.negative-look-ahead.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>end</key>\n\t\t\t\t\t<string>(\\))</string>\n\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>meta.group.assertion.regexp</string>\n\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t<array>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</array>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t<string>\\((\\?:)?</string>\n\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>end</key>\n\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>meta.group.regexp</string>\n\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t<array>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</array>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t<string>(\\[)(\\^)?</string>\n\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>punctuation.definition.character-class.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>keyword.operator.negation.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>end</key>\n\t\t\t\t\t<string>(\\])</string>\n\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>punctuation.definition.character-class.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>name</key>\n\t\t\t\t\t<string>constant.other.character-class.set.regexp</string>\n\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t<array>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t<string>constant.character.numeric.regexp</string>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t<string>constant.character.control.regexp</string>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t<string>constant.character.escape.backslash.regexp</string>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t<string>constant.character.numeric.regexp</string>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t<string>constant.character.control.regexp</string>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t<string>constant.character.escape.backslash.regexp</string>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t<string>(?:.|(\\\\(?:[0-7]{3}|x\\h\\h|u\\h\\h\\h\\h))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x\\h\\h|u\\h\\h\\h\\h))|(\\\\c[A-Z])|(\\\\.))</string>\n\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t<string>constant.other.character-class.range.regexp</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t<string>#regex-character-class</string>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</array>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>include</key>\n\t\t\t\t\t<string>#regex-character-class</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t</dict>\n\t<key>scopeName</key>\n\t<string>source.js.regexp</string>\n\t<key>uuid</key>\n\t<string>AC8679DE-3AC7-4056-84F9-69A7ADC29DDD</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "extensions/javascript/tags-language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [\n\t\t\t\"{/*\",\n\t\t\t\"*/}\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t]\n\t],\n\t\"colorizedBracketPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"/**\",\n\t\t\t\"close\": \" */\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t]\n\t],\n\t\"wordPattern\": {\n\t\t\"pattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\!\\\\@\\\\$\\\\^\\\\&\\\\*\\\\(\\\\)\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:'\\\"\\\\,\\\\.\\\\<\\\\>\\\\/\\\\s]+)\"\n\t},\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))([_:\\\\w][_:\\\\w\\\\-.\\\\d]*)([^/>]*(?!/)>)[^<]*$\",\n\t\t\t\t\"flags\": \"i\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^<\\\\/([_:\\\\w][_:\\\\w-.\\\\d]*)\\\\s*>$\",\n\t\t\t\t\"flags\": \"i\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))([_:\\\\w][_:\\\\w\\\\-.\\\\d]*)([^/>]*(?!/)>)[^<]*$\",\n\t\t\t\t\"flags\": \"i\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indent\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// `beforeText` only applies to tokens of a given language. Since we are dealing with jsx-tags,\n\t\t\t// make sure we apply to the closing `>` of a tag so that mixed language spans\n\t\t\t// such as `<div onclick={1}>` are handled properly.\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^>$\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^<\\\\/([_:\\\\w][_:\\\\w-.\\\\d]*)\\\\s*>$\",\n\t\t\t\t\"flags\": \"i\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^>$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indent\"\n\t\t\t}\n\t\t}\n\t],\n}\n"
  },
  {
    "path": "extensions/json/.vscodeignore",
    "content": "build/**\ntest/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/json/build/update-grammars.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nvar updateGrammar = require('vscode-grammar-updater');\n\nfunction adaptJSON(grammar, name, replacementScope, replaceeScope = 'json') {\n\tgrammar.name = name;\n\tgrammar.scopeName = `source${replacementScope}`;\n\tconst regex = new RegExp(`\\.${replaceeScope}`, 'g');\n\tvar fixScopeNames = function (rule) {\n\t\tif (typeof rule.name === 'string') {\n\t\t\trule.name = rule.name.replace(regex, replacementScope);\n\t\t}\n\t\tif (typeof rule.contentName === 'string') {\n\t\t\trule.contentName = rule.contentName.replace(regex, replacementScope);\n\t\t}\n\t\tfor (var property in rule) {\n\t\t\tvar value = rule[property];\n\t\t\tif (typeof value === 'object') {\n\t\t\t\tfixScopeNames(value);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar repository = grammar.repository;\n\tfor (var key in repository) {\n\t\tfixScopeNames(repository[key]);\n\t}\n}\n\nvar tsGrammarRepo = 'microsoft/vscode-JSON.tmLanguage';\nupdateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSON.tmLanguage.json');\nupdateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONC.tmLanguage.json', grammar => adaptJSON(grammar, 'JSON with Comments', '.json.comments'));\nupdateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONL.tmLanguage.json', grammar => adaptJSON(grammar, 'JSON Lines', '.json.lines'));\n\nupdateGrammar.update('jeff-hykin/better-snippet-syntax', 'autogenerated/jsonc.tmLanguage.json', './syntaxes/snippets.tmLanguage.json', grammar => adaptJSON(grammar, 'Snippets', '.json.comments.snippets', 'json.comments'));\n"
  },
  {
    "path": "extensions/json/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"microsoft/vscode-JSON.tmLanguage\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/vscode-JSON.tmLanguage\",\n\t\t\t\t\t\"commitHash\": \"9bd83f1c252b375e957203f21793316203f61f70\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jeff-hykin/better-snippet-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jeff-hykin/better-snippet-syntax\",\n\t\t\t\t\t\"commitHash\": \"2b1bb124cb2b9c75c3c80eae1b8f3a043841d654\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.0.2\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/json/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"`\",\n\t\t\t\"close\": \"`\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t}\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"({+(?=((\\\\\\\\.|[^\\\"\\\\\\\\])*\\\"(\\\\\\\\.|[^\\\"\\\\\\\\])*\\\")*[^\\\"}]*)$)|(\\\\[+(?=((\\\\\\\\.|[^\\\"\\\\\\\\])*\\\"(\\\\\\\\.|[^\\\"\\\\\\\\])*\\\")*[^\\\"\\\\]]*)$)\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*[}\\\\]],?\\\\s*$\"\n\t},\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/json/package.json",
    "content": "{\n  \"name\": \"json\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammars.js\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"json\",\n        \"aliases\": [\n          \"JSON\",\n          \"json\"\n        ],\n        \"extensions\": [\n          \".json\",\n          \".bowerrc\",\n          \".jscsrc\",\n          \".webmanifest\",\n          \".js.map\",\n          \".css.map\",\n          \".ts.map\",\n          \".har\",\n          \".jslintrc\",\n          \".jsonld\",\n          \".geojson\",\n          \".ipynb\",\n          \".vuerc\"\n        ],\n        \"filenames\": [\n          \"composer.lock\",\n          \".watchmanconfig\"\n        ],\n        \"mimetypes\": [\n          \"application/json\",\n          \"application/manifest+json\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      },\n      {\n        \"id\": \"jsonc\",\n        \"aliases\": [\n          \"JSON with Comments\"\n        ],\n        \"extensions\": [\n          \".jsonc\",\n          \".eslintrc\",\n          \".eslintrc.json\",\n          \".jsfmtrc\",\n          \".jshintrc\",\n          \".swcrc\",\n          \".hintrc\",\n          \".babelrc\"\n        ],\n        \"filenames\": [\n          \"babel.config.json\",\n          \"bun.lock\",\n          \".babelrc.json\",\n          \".ember-cli\",\n          \"typedoc.json\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      },\n      {\n        \"id\": \"jsonl\",\n        \"aliases\": [\n          \"JSON Lines\"\n        ],\n        \"extensions\": [\n          \".jsonl\",\n          \".ndjson\"\n        ],\n        \"filenames\": [],\n        \"configuration\": \"./language-configuration.json\"\n      },\n      {\n        \"id\": \"snippets\",\n        \"aliases\": [\n            \"Code Snippets\"\n        ],\n        \"extensions\": [\n          \".code-snippets\"\n        ],\n        \"filenamePatterns\": [\n          \"**/User/snippets/*.json\",\n          \"**/User/profiles/*/snippets/*.json\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"json\",\n        \"scopeName\": \"source.json\",\n        \"path\": \"./syntaxes/JSON.tmLanguage.json\"\n      },\n      {\n        \"language\": \"jsonc\",\n        \"scopeName\": \"source.json.comments\",\n        \"path\": \"./syntaxes/JSONC.tmLanguage.json\"\n      },\n      {\n        \"language\": \"jsonl\",\n        \"scopeName\": \"source.json.lines\",\n        \"path\": \"./syntaxes/JSONL.tmLanguage.json\"\n      },\n      {\n        \"language\": \"snippets\",\n        \"scopeName\": \"source.json.comments.snippets\",\n        \"path\": \"./syntaxes/snippets.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/json/package.nls.json",
    "content": "{\n\t\"displayName\": \"JSON Language Basics\",\n\t\"description\": \"Provides syntax highlighting & bracket matching in JSON files.\"\n}\n"
  },
  {
    "path": "extensions/json/syntaxes/JSON.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/vscode-JSON.tmLanguage/blob/master/JSON.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70\",\n\t\"name\": \"JSON (Javascript Next)\",\n\t\"scopeName\": \"source.json\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#value\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"array\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.array.json\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.array.json\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\]]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-array-separator.json\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.documentation.json\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.json\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(//).*$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constant\": {\n\t\t\t\"match\": \"\\\\b(?:true|false|null)\\\\b\",\n\t\t\t\"name\": \"constant.language.json\"\n\t\t},\n\t\t\"number\": {\n\t\t\t\"match\": \"(?x)        # turn on extended mode\\n  -?        # an optional minus\\n  (?:\\n    0       # a zero\\n    |       # ...or...\\n    [1-9]   # a 1-9 character\\n    \\\\d*     # followed by zero or more digits\\n  )\\n  (?:\\n    (?:\\n      \\\\.    # a period\\n      \\\\d+   # followed by one or more digits\\n    )?\\n    (?:\\n      [eE]  # an e character\\n      [+-]? # followed by an option +/-\\n      \\\\d+   # followed by one or more digits\\n    )?      # make exponent optional\\n  )?        # make decimal portion optional\",\n\t\t\t\"name\": \"constant.numeric.json\"\n\t\t},\n\t\t\"object\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.begin.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.end.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.dictionary.json\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"the JSON object key\",\n\t\t\t\t\t\"include\": \"#objectkey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.key-value.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(,)|(?=\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.pair.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.structure.dictionary.value.json\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"the JSON object value\",\n\t\t\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s,]\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\}]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.json\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"objectkey\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.begin.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.end.json\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.json support.type.property-name.json\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"stringcontent\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)                # turn on extended mode\\n  \\\\\\\\                # a literal backslash\\n  (?:               # ...followed by...\\n    [\\\"\\\\\\\\/bfnrt]     # one of these characters\\n    |               # ...or...\\n    u               # a u\\n    [0-9a-fA-F]{4}) # and four hex digits\",\n\t\t\t\t\t\"name\": \"constant.character.escape.json\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-string-escape.json\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"value\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/json/syntaxes/JSONC.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/vscode-JSON.tmLanguage/blob/master/JSON.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70\",\n\t\"name\": \"JSON with Comments\",\n\t\"scopeName\": \"source.json.comments\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#value\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"array\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.array.json.comments\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.array.json.comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\]]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-array-separator.json.comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.documentation.json.comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.json.comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(//).*$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constant\": {\n\t\t\t\"match\": \"\\\\b(?:true|false|null)\\\\b\",\n\t\t\t\"name\": \"constant.language.json.comments\"\n\t\t},\n\t\t\"number\": {\n\t\t\t\"match\": \"(?x)        # turn on extended mode\\n  -?        # an optional minus\\n  (?:\\n    0       # a zero\\n    |       # ...or...\\n    [1-9]   # a 1-9 character\\n    \\\\d*     # followed by zero or more digits\\n  )\\n  (?:\\n    (?:\\n      \\\\.    # a period\\n      \\\\d+   # followed by one or more digits\\n    )?\\n    (?:\\n      [eE]  # an e character\\n      [+-]? # followed by an option +/-\\n      \\\\d+   # followed by one or more digits\\n    )?      # make exponent optional\\n  )?        # make decimal portion optional\",\n\t\t\t\"name\": \"constant.numeric.json.comments\"\n\t\t},\n\t\t\"object\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.begin.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.end.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.dictionary.json.comments\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"the JSON object key\",\n\t\t\t\t\t\"include\": \"#objectkey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.key-value.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(,)|(?=\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.pair.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.structure.dictionary.value.json.comments\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"the JSON object value\",\n\t\t\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s,]\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\}]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.json.comments\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"objectkey\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.begin.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.end.json.comments\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.json.comments support.type.property-name.json.comments\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"stringcontent\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)                # turn on extended mode\\n  \\\\\\\\                # a literal backslash\\n  (?:               # ...followed by...\\n    [\\\"\\\\\\\\/bfnrt]     # one of these characters\\n    |               # ...or...\\n    u               # a u\\n    [0-9a-fA-F]{4}) # and four hex digits\",\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-string-escape.json.comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"value\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/json/syntaxes/JSONL.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/vscode-JSON.tmLanguage/blob/master/JSON.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70\",\n\t\"name\": \"JSON Lines\",\n\t\"scopeName\": \"source.json.lines\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#value\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"array\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.array.json.lines\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.array.json.lines\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\]]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-array-separator.json.lines\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.lines\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.documentation.json.lines\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.lines\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.json.lines\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.lines\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(//).*$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constant\": {\n\t\t\t\"match\": \"\\\\b(?:true|false|null)\\\\b\",\n\t\t\t\"name\": \"constant.language.json.lines\"\n\t\t},\n\t\t\"number\": {\n\t\t\t\"match\": \"(?x)        # turn on extended mode\\n  -?        # an optional minus\\n  (?:\\n    0       # a zero\\n    |       # ...or...\\n    [1-9]   # a 1-9 character\\n    \\\\d*     # followed by zero or more digits\\n  )\\n  (?:\\n    (?:\\n      \\\\.    # a period\\n      \\\\d+   # followed by one or more digits\\n    )?\\n    (?:\\n      [eE]  # an e character\\n      [+-]? # followed by an option +/-\\n      \\\\d+   # followed by one or more digits\\n    )?      # make exponent optional\\n  )?        # make decimal portion optional\",\n\t\t\t\"name\": \"constant.numeric.json.lines\"\n\t\t},\n\t\t\"object\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.begin.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.end.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.dictionary.json.lines\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"the JSON object key\",\n\t\t\t\t\t\"include\": \"#objectkey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.key-value.json.lines\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(,)|(?=\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.pair.json.lines\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.structure.dictionary.value.json.lines\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"the JSON object value\",\n\t\t\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s,]\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.lines\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\}]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.lines\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.json.lines\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"objectkey\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.begin.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.end.json.lines\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.json.lines support.type.property-name.json.lines\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"stringcontent\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)                # turn on extended mode\\n  \\\\\\\\                # a literal backslash\\n  (?:               # ...followed by...\\n    [\\\"\\\\\\\\/bfnrt]     # one of these characters\\n    |               # ...or...\\n    u               # a u\\n    [0-9a-fA-F]{4}) # and four hex digits\",\n\t\t\t\t\t\"name\": \"constant.character.escape.json.lines\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unrecognized-string-escape.json.lines\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"value\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/json/syntaxes/snippets.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jeff-hykin/better-snippet-syntax/blob/master/autogenerated/jsonc.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jeff-hykin/better-snippet-syntax/commit/2b1bb124cb2b9c75c3c80eae1b8f3a043841d654\",\n\t\"name\": \"Snippets\",\n\t\"scopeName\": \"source.json.comments.snippets\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#value\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"array\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.array.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.array.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\]]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-array-separator.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"basic_escape\": {\n\t\t\t\"match\": \"\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4}))\",\n\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t},\n\t\t\"bnf_any\": {\n\t\t\t\"match\": \"(?:\\\\}|((?:(?:(?:(?:(?:(?:((?:(\\\\$)([0-9]+)))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)((?:(\\\\/)((?:(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|[^\\\\/\\\\n])+))(\\\\/)(((?:(?:(?:(?:(?:(?:(?:(?:\\\\$(?:(?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|(?:\\\\$(?:[0-9]+)))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:\\\\/(?:upcase|downcase|capitalize|camelcase|pascalcase))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\+(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\?(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?)):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\-(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:(?:\\\\\\\\(?:\\\\\\\\\\\\/))|(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\/)))|(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])|[^\\\\n\\\\r])*)))*))(\\\\/)([igmyu]{0,5})))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(\\\\|)(((?:(?:(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(?:(\\\\/\\\\/)(?:\\\\,|\\\\|))|((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|[^,}\\\\|])+))(?:(?:,\\\\g<33>)*?))(\\\\|)(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(?:(?:(?:(?:(?:\\\\$(?:[0-9]+))|(?:(?:\\\\$\\\\{)(?:[0-9]+)\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+)(?:\\\\/((?:(?:(?:(?:\\\\\\\\(?:\\\\\\\\\\\\/))|(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\/)))|[^\\\\/\\\\n])+))\\\\/((?:(?:(?:(?:(?:(?:(?:(?:(?:\\\\$(?:(?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|(?:\\\\$(?:[0-9]+)))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:\\\\/(?:upcase|downcase|capitalize|camelcase|pascalcase))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\+((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\?((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?)):((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\-((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:(?:\\\\\\\\(?:\\\\\\\\\\\\/))|(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\/)))|((?:(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])|[^\\\\n\\\\r])*))))*))\\\\/(?:[igmyu]{0,5}))\\\\}))|\\\\g<1>)+)(\\\\}))))|(?:(?:(?:((?:(\\\\$)((?<!\\\\w)(?:[_a-zA-Z][_a-zA-Z0-9]*)(?!\\\\w))))|((?:(?:(\\\\$)(\\\\{))((?<!\\\\w)(?:[_a-zA-Z][_a-zA-Z0-9]*)(?!\\\\w))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))((?<!\\\\w)(?:[_a-zA-Z][_a-zA-Z0-9]*)(?!\\\\w))(:)((?:\\\\g<1>+))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))((?<!\\\\w)(?:[_a-zA-Z][_a-zA-Z0-9]*)(?!\\\\w))((?:(?:\\\\/(?:(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|[^\\\\/])+?)\\\\/(?:.*?)\\\\/(?:[igmyu]{0,5}))|((?:(\\\\/)((?:(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|[^\\\\/\\\\n])+))(\\\\/)(((?:(?:(?:(?:(?:(?:(?:(?:\\\\$(?:(?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|(?:\\\\$(?:[0-9]+)))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:\\\\/(?:upcase|downcase|capitalize|camelcase|pascalcase))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\+(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\?(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?)):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\-(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:(?:\\\\\\\\(?:\\\\\\\\\\\\/))|(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\/)))|(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])|[^\\\\n\\\\r])*)))*))(\\\\/)([igmyu]{0,5})))))(\\\\})))))|(((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.numeric.json.comments.snippets meta.insertion.tabstop.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.tabstop.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.tabstop.transform.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"meta.insertion.transform.json.comments.snippets string.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.syntax.regexp.tmLanguage\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\d+\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\{\\\\d+\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_format\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex_backslash_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(?:(?:(?:(?:(?:(?:(\\\\$)((?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|((?:(\\\\$)([0-9]+))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(?:(\\\\/)(upcase|downcase|capitalize|camelcase|pascalcase))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\+)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\?)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\-)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|((?:(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))|[^\\\\n\\\\r])*))))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.numeric.json.comments.snippets meta.insertion.format.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.conditional.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"43\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.conditional.json.comments.snippets keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"44\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"45\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"46\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"47\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"48\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"49\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"50\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"51\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"52\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"53\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"54\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"55\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"56\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"57\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"58\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"59\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"60\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"61\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"62\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"63\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"64\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"65\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"66\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"67\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"68\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"69\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"70\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"71\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"72\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"73\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"74\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"75\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"76\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"77\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"78\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"79\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"80\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.remove.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"81\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"82\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"83\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"84\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"85\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dash.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"86\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"87\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"88\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"89\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"90\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"91\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"92\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"93\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"94\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"95\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"96\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"97\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"98\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"99\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"100\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"101\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"102\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"103\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"104\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.default.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"105\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"106\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"107\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"108\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"109\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"110\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"111\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"112\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"113\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"114\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"115\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"116\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"117\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"118\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"119\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"120\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"121\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"122\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"123\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"124\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"125\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"126\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"127\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"128\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"129\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"130\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"131\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"132\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"133\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"134\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"135\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"136\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"137\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"138\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"139\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"keyword.other.flag.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.choice.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.choice.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.choice.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"meta.insertion.choice.json.comments.snippets punctuation.separator.comma.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#choice_option\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"meta.insertion.choice.json.comments.snippets constant.other.option.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.choice.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.choice.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.placeholder.json.comments.snippets\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\$)(\\\\{))([0-9]+)(:)(.+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_insertion_ender\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bnf_any\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.syntax.regexp.tmLanguage\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\d+\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\{\\\\d+\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_format\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex_backslash_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"58\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"59\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"60\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"61\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"62\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"63\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"64\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"65\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"66\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"67\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"68\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"69\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"70\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"71\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"72\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"73\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"74\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"75\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"76\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"77\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"78\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"79\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"80\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"81\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"82\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"83\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"84\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"85\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"86\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"87\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"88\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"89\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"90\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets meta.insertion.variable.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"91\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"92\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.named.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"93\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.variable.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"94\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"95\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"96\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.named.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"97\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"98\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.variable.any.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"99\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"100\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"101\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.named.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"102\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"103\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_any\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"104\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"105\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.variable.transform.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"106\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"107\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"108\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.named.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"109\": {\n\t\t\t\t\t\"name\": \"meta.insertion.variable.json.comments.snippets\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_transform\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"110\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"111\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"112\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"113\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"114\": {\n\t\t\t\t\t\"name\": \"meta.insertion.transform.json.comments.snippets string.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"115\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"116\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.syntax.regexp.tmLanguage\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"117\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"118\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"119\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"120\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"121\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"122\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\d+\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\{\\\\d+\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_format\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex_backslash_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"123\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(?:(?:(?:(?:(?:(?:(\\\\$)((?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|((?:(\\\\$)([0-9]+))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(?:(\\\\/)(upcase|downcase|capitalize|camelcase|pascalcase))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\+)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\?)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\-)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|((?:(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))|[^\\\\n\\\\r])*))))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.numeric.json.comments.snippets meta.insertion.format.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.conditional.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"43\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.conditional.json.comments.snippets keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"44\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"45\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"46\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"47\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"48\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"49\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"50\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"51\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"52\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"53\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"54\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"55\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"56\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"57\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"58\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"59\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"60\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"61\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"62\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"63\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"64\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"65\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"66\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"67\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"68\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"69\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"70\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"71\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"72\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"73\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"74\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"75\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"76\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"77\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"78\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"79\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"80\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.remove.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"81\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"82\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"83\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"84\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"85\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dash.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"86\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"87\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"88\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"89\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"90\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"91\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"92\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"93\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"94\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"95\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"96\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"97\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"98\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"99\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"100\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"101\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"102\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"103\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"104\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.default.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"105\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"106\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"107\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"108\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"109\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"110\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"111\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"112\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"113\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"114\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"115\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"116\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"117\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"118\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"119\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"120\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"121\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"122\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"123\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"124\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"125\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"126\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"127\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"128\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"129\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"130\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"131\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"132\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"133\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"134\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"135\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"136\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"137\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"138\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"139\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"124\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"125\": {\n\t\t\t\t\t\"name\": \"keyword.other.flag.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"126\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"127\": {\n\t\t\t\t\t\"name\": \"meta.insertion.text.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"128\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"129\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"130\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"131\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"132\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"133\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"134\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"135\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"136\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"137\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"138\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"139\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"140\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"141\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"142\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"143\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"144\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.any.json.comments.snippets\"\n\t\t},\n\t\t\"bnf_choice\": {\n\t\t\t\"match\": \"(?:(?:(\\\\$)(\\\\{))([0-9]+)(\\\\|)(((?:(?:(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(?:(\\\\/\\\\/)(?:\\\\,|\\\\|))|((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|[^,}\\\\|])+))(?:(?:,\\\\g<6>)*?))(\\\\|)(\\\\}))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.choice.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.choice.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"meta.insertion.choice.json.comments.snippets punctuation.separator.comma.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#choice_option\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.insertion.choice.json.comments.snippets constant.other.option.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.choice.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.choice.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.choice.json.comments.snippets\"\n\t\t},\n\t\t\"bnf_format\": {\n\t\t\t\"match\": \"(?:(?:(?:(?:(?:(?:(?:(\\\\$)((?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|((?:(\\\\$)([0-9]+))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(?:(\\\\/)(upcase|downcase|capitalize|camelcase|pascalcase))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\+)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\?)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\-)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.numeric.json.comments.snippets meta.insertion.format.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.transform.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.plus.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.plus.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.conditional.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.conditional.json.comments.snippets keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"58\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"59\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"60\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"61\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"62\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"63\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"64\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"65\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"66\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"67\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"68\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"69\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"70\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"71\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"72\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"73\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"74\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"75\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"76\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"77\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"78\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"79\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"80\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.remove.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"81\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"82\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"83\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"84\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"85\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dash.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"86\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"87\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"88\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"89\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"90\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"91\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"92\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"93\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"94\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"95\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"96\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"97\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"98\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"99\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"100\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"101\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"102\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"103\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"104\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.default.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"105\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"106\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"107\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"108\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"109\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"110\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"111\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"112\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"113\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"114\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"115\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"116\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"117\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"118\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"119\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"120\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"121\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"122\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"123\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"124\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"125\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"126\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"bnf_int\": {\n\t\t\t\"match\": \"[0-9]+\",\n\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t},\n\t\t\"bnf_int_simple\": {\n\t\t\t\"match\": \"[0-9]+\",\n\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t},\n\t\t\"bnf_tabstop\": {\n\t\t\t\"match\": \"(?:(?:((?:(\\\\$)([0-9]+)))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)((?:(\\\\/)((?:(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|[^\\\\/\\\\n])+))(\\\\/)(((?:(?:(?:(?:(?:(?:(?:(?:\\\\$(?:(?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|(?:\\\\$(?:[0-9]+)))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:\\\\/(?:upcase|downcase|capitalize|camelcase|pascalcase))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\+(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\?(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?)):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\-(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:(?:\\\\\\\\(?:\\\\\\\\\\\\/))|(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\/)))|(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])|[^\\\\n\\\\r])*)))*))(\\\\/)([igmyu]{0,5})))(\\\\}))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.numeric.json.comments.snippets meta.insertion.tabstop.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.tabstop.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.tabstop.transform.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"meta.insertion.transform.json.comments.snippets string.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.syntax.regexp.tmLanguage\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\d+\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\{\\\\d+\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_format\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex_backslash_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(?:(?:(?:(?:(?:(?:(\\\\$)((?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|((?:(\\\\$)([0-9]+))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(?:(\\\\/)(upcase|downcase|capitalize|camelcase|pascalcase))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\+)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\?)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\-)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|((?:(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))|[^\\\\n\\\\r])*))))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.numeric.json.comments.snippets meta.insertion.format.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.conditional.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"43\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.conditional.json.comments.snippets keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"44\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"45\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"46\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"47\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"48\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"49\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"50\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"51\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"52\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"53\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"54\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"55\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"56\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"57\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"58\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"59\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"60\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"61\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"62\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"63\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"64\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"65\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"66\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"67\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"68\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"69\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"70\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"71\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"72\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"73\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"74\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"75\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"76\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"77\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"78\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"79\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"80\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.remove.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"81\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"82\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"83\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"84\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"85\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dash.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"86\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"87\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"88\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"89\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"90\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"91\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"92\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"93\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"94\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"95\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"96\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"97\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"98\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"99\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"100\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"101\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"102\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"103\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"104\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.default.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"105\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"106\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"107\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"108\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"109\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"110\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"111\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"112\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"113\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"114\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"115\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"116\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"117\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"118\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"119\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"120\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"121\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"122\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"123\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"124\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"125\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"126\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"127\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"128\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"129\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"130\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"131\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"132\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"133\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"134\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"135\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"136\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"137\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"138\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"139\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"keyword.other.flag.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"bnf_text\": {\n\t\t\t\"match\": \"(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"bnf_transform\": {\n\t\t\t\"match\": \"(?:(\\\\/)((?:(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|[^\\\\/\\\\n])+))(\\\\/)(((?:(?:(?:(?:(?:(?:(?:(?:\\\\$(?:(?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|(?:\\\\$(?:[0-9]+)))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:\\\\/(?:upcase|downcase|capitalize|camelcase|pascalcase))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\+(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\?(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?)):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):\\\\-(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:\\\\$\\\\{)(?:[0-9]+):(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])?)(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])*?))\\\\}))|(?:(?:(?:\\\\\\\\(?:\\\\\\\\\\\\/))|(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\/)))|(?:(?:(?:(?:(?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|(?:(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|(?:(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(?:\\\\\\\\\\\\\\\\)(?:\\\\\\\\\\\\\\\\))|(?:\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|(?:\\\\\\\\.)|[^\\\\\\\\\\\\n\\\\}\\\"])|[^\\\\n\\\\r])*)))*))(\\\\/)([igmyu]{0,5}))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.syntax.regexp.tmLanguage\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\d+\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$\\\\{\\\\d+\\\\}\",\n\t\t\t\t\t\t\t\"name\": \"variable.language.capture.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_format\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex_backslash_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bnf_text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:(?:(?:(?:(?:(?:(?:(\\\\$)((?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))|((?:(\\\\$)([0-9]+))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(?:(\\\\/)(upcase|downcase|capitalize|camelcase|pascalcase))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\+)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\?)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)(\\\\-)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|((?:(?:(\\\\$)(\\\\{))([0-9]+)(:)((?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))?)(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))*?))(\\\\}))))|(?:(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))|((?:(?:(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))|[^\\\\n\\\\r])*))))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.simple.numeric.json.comments.snippets meta.insertion.format.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.simple.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.built-in.json.comments.snippets variable.language.special.transform.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.plus.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.conditional.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"43\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.conditional.json.comments.snippets keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"44\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"45\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"46\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"47\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"48\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"49\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"50\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"51\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"52\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"53\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"54\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"55\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"56\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"57\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"58\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"59\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"60\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"61\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"62\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"63\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"64\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"65\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"66\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"67\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"68\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"69\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"70\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"71\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"72\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"73\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"74\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"75\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"76\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"77\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"78\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"79\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"80\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.remove.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"81\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"82\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"83\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"84\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"85\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dash.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"86\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"87\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"88\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"89\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"90\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"91\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"92\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"93\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"94\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"95\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"96\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"97\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"98\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"99\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"100\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"101\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"102\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"103\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"104\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.insertion.brackets.json.comments.snippets meta.insertion.format.default.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"105\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"106\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"107\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.numeric.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"108\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"109\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"110\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"111\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"112\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"113\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"114\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"115\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"116\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"117\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"118\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"119\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"120\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"121\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"122\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"123\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"124\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"125\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"126\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"127\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"128\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"129\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"130\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"131\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#simple_escape_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"132\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"133\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"134\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"135\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"136\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"137\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"138\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"139\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"keyword.other.flag.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.insertion.transform.json.comments.snippets string.regexp.json.comments.snippets\"\n\t\t},\n\t\t\"bnf_var\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:[_a-zA-Z][_a-zA-Z0-9]*)(?!\\\\w)\",\n\t\t\t\"name\": \"variable.other.normal.json.comments.snippets custom.variable.other.normal.named.json.comments.snippets\"\n\t\t},\n\t\t\"bnf_var_simple\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:[_a-zA-Z][_a-zA-Z0-9]*)(?!\\\\w)\",\n\t\t\t\"name\": \"variable.other.normal.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.variable.other.normal.named.json.comments.snippets\"\n\t\t},\n\t\t\"body_array\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.array.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.array.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\]]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-array-separator.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"body_comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.documentation.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(//).*$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"body_constant\": {\n\t\t\t\"match\": \"\\\\b(?:true|false|null)\\\\b\",\n\t\t\t\"name\": \"constant.language.json.comments.snippets\"\n\t\t},\n\t\t\"body_number\": {\n\t\t\t\"match\": \"(?x)        # turn on extended mode\\n  -?        # an optional minus\\n  (?:\\n    0       # a zero\\n    |       # ...or...\\n    [1-9]   # a 1-9 character\\n    \\\\d*     # followed by zero or more digits\\n  )\\n  (?:\\n    (?:\\n      \\\\.    # a period\\n      \\\\d+   # followed by one or more digits\\n    )?\\n    (?:\\n      [eE]  # an e character\\n      [+-]? # followed by an option +/-\\n      \\\\d+   # followed by one or more digits\\n    )?      # make exponent optional\\n  )?        # make decimal portion optional\",\n\t\t\t\"name\": \"constant.numeric.json.comments.snippets\"\n\t\t},\n\t\t\"body_object\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.dictionary.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"the JSON object key\",\n\t\t\t\t\t\"include\": \"#special_object_key\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"the JSON object key\",\n\t\t\t\t\t\"include\": \"#body_objectkey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.key-value.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(,)|(?=\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.pair.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.structure.dictionary.value.json.comments.snippets\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"the JSON object value\",\n\t\t\t\t\t\t\t\"include\": \"#body_value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s,]\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\}]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"body_objectkey\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.json.comments.snippets support.type.property-name.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_string_key_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"body_string\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"body_stringcontent\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\\\\\\\\\\\\\|\\\\\\\\\\\"|[^\\\"])++\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#bnf_any\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"body_value\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_constant\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_array\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body_comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracket_escape\": {\n\t\t\t\"match\": \"(?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"bracket_insertion_ender\": {\n\t\t\t\"match\": \"(\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"bracket_insertion_starter\": {\n\t\t\t\"match\": \"(?:(\\\\$)(\\\\{))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.dollar.brackets.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.dollar.brackets.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.bracket.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.section.insertion.bracket.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"choice_option\": {\n\t\t\t\"match\": \"(?:(?:(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(?:(\\\\/\\\\/)(?:\\\\,|\\\\|))|((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|[^,}\\\\|])+)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.insertion.choice.json.comments.snippets constant.other.option.json.comments.snippets\"\n\t\t},\n\t\t\"choice_option_escape\": {\n\t\t\t\"match\": \"(?:(\\\\/\\\\/)(?:\\\\,|\\\\|))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"colon_separator\": {\n\t\t\t\"match\": \":\",\n\t\t\t\"name\": \"punctuation.section.insertion.json.comments.snippets punctuation.separator.colon.json.comments.snippets keyword.operator.insertion.json.comments.snippets custom.punctuation.separator.colon.json.comments.snippets\"\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.documentation.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(//).*$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.double-slash.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constant\": {\n\t\t\t\"match\": \"\\\\b(?:true|false|null)\\\\b\",\n\t\t\t\"name\": \"constant.language.json.comments.snippets\"\n\t\t},\n\t\t\"dollar_sign_escape\": {\n\t\t\t\"match\": \"(?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"invalid_escape\": {\n\t\t\t\"match\": \"(?:\\\\\\\\.)\",\n\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t},\n\t\t\"normal_characters\": {\n\t\t\t\"match\": \"[^\\\\\\\\\\\\n\\\\}\\\"]\",\n\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t},\n\t\t\"null_quad_backslash\": {\n\t\t\t\"match\": \"((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"number\": {\n\t\t\t\"match\": \"(?x)        # turn on extended mode\\n  -?        # an optional minus\\n  (?:\\n    0       # a zero\\n    |       # ...or...\\n    [1-9]   # a 1-9 character\\n    \\\\d*     # followed by zero or more digits\\n  )\\n  (?:\\n    (?:\\n      \\\\.    # a period\\n      \\\\d+   # followed by one or more digits\\n    )?\\n    (?:\\n      [eE]  # an e character\\n      [+-]? # followed by an option +/-\\n      \\\\d+   # followed by one or more digits\\n    )?      # make exponent optional\\n  )?        # make decimal portion optional\",\n\t\t\t\"name\": \"constant.numeric.json.comments.snippets\"\n\t\t},\n\t\t\"object\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dictionary.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.dictionary.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"the JSON object key\",\n\t\t\t\t\t\"include\": \"#special_object_key\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"the JSON object key\",\n\t\t\t\t\t\"include\": \"#objectkey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.key-value.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(,)|(?=\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.pair.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.structure.dictionary.value.json.comments.snippets\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"the JSON object value\",\n\t\t\t\t\t\t\t\"include\": \"#value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s,]\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s\\\\}]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"objectkey\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.support.type.property-name.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.json.comments.snippets support.type.property-name.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_key_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"quad_backslash_match\": {\n\t\t\t\"match\": \"(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regex_backslash_escape\": {\n\t\t\t\"match\": \"(?:(?:(\\\\\\\\)(\\\\\\\\\\\\/))|(?:(\\\\\\\\\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\/)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"simple_escape_context\": {\n\t\t\t\"match\": \"(?:((?!\\\\\\\\)(?:(?:(?:\\\\\\\\\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))|(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)+)(?:[^\\\\{\\\\$\\\"\\\\\\\\]|(?=\\\")))))|((?<!\\\\\\\\)(?:(?:(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\$))|(?:\\\\\\\\\\\\$)))|((?<!\\\\\\\\)(?:(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)*)(?:(?:\\\\\\\\\\\\\\\\)\\\\}))|(?:(\\\\\\\\\\\\\\\\)(\\\\\\\\\\\\\\\\))|(\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|(?:u[0-9a-fA-F]{4})))|((?:\\\\\\\\.))|([^\\\\\\\\\\\\n\\\\}\\\"]))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#dollar_sign_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_characters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\$\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#quad_backslash_match\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)\\\\}\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escapee.json.comments.snippets string.regexp.insertion.escape.json.comments.snippets string.quoted.double.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.insertion.escape.escaper.json.comments.snippets comment.block.json.comments.snippets punctuation.definition.comment.insertion.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.json.comments.snippets invalid.illegal.unrecognized-string-escape.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"special_object_key\": {\n\t\t\t\"begin\": \"(?:(\\\")(body)(\\\"))\",\n\t\t\t\"end\": \"(?:(?<=,)|(?=\\\\}))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.json.comments.snippets support.type.property-name.json.comments.snippets punctuation.support.type.property-name.begin.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.json.comments.snippets support.type.property-name.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"string.json.comments.snippets support.type.property-name.json.comments.snippets punctuation.support.type.property-name.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"end\": \"(?:(,)|(?=\\\\}))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.key-value.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dictionary.pair.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.structure.dictionary.value.json.comments.snippets\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#body_value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s,]\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.expected-dictionary-separator.json.comments.snippets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"special_variables\": {\n\t\t\t\"match\": \"(?:(\\\\$)((?<!\\\\w)(?:TM_SELECTED_TEXT|TM_CURRENT_LINE|TM_CURRENT_WORD|TM_LINE_INDEX|TM_LINE_NUMBER|TM_FILENAME|TM_FILENAME_BASE|TM_DIRECTORY|TM_FILEPATH|RELATIVE_FILEPATH|CLIPBOARD|WORKSPACE_NAME|WORKSPACE_FOLDER|CURSOR_INDEX|CURSOR_NUMBER|CURRENT_YEAR|CURRENT_YEAR_SHORT|CURRENT_MONTH|CURRENT_MONTH_NAME|CURRENT_MONTH_NAME_SHORT|CURRENT_DATE|CURRENT_DAY_NAME|CURRENT_DAY_NAME_SHORT|CURRENT_HOUR|CURRENT_MINUTE|CURRENT_SECOND|CURRENT_SECONDS_UNIX|CURRENT_TIMEZONE_OFFSET|RANDOM|RANDOM_HEX|UUID|BLOCK_COMMENT_START|BLOCK_COMMENT_END|LINE_COMMENT)(?!\\\\w)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets punctuation.section.insertion.dollar.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.insertion.simple.json.comments.snippets keyword.operator.insertion.json.comments.snippets variable.language.this.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"string\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.json.comments.snippets\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.json.comments.snippets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#stringcontent\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_key_content\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"stringcontent\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#basic_escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#invalid_escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"value\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/json-language-features/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/json-language-features/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/client/out\"]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Launch Tests\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\"--extensionDevelopmentPath=${workspaceFolder}\", \"--extensionTestsPath=${workspaceFolder}/client/out/test\" ],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/client/out/test\"]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Attach Language Server\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"port\": 6004,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/server/out\"]\n\t\t}\n\t],\n\t\"compounds\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension and Attach Language Server\",\n\t\t\t\"configurations\": [\n\t\t\t\t\"Launch Extension\",\n\t\t\t\t\"Attach Language Server\"\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/json-language-features/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"command\": \"npm\",\n\t\"type\": \"shell\",\n\t\"presentation\": {\n\t\t\"reveal\": \"silent\"\n\t},\n\t\"args\": [\"run\", \"compile\"],\n\t\"isBackground\": true,\n\t\"problemMatcher\": \"$tsc-watch\"\n}\n"
  },
  {
    "path": "extensions/json-language-features/.vscodeignore",
    "content": ".vscode/**\nserver/.vscode/**\nserver/node_modules/**\nclient/src/**\nserver/src/**\nclient/out/**\nserver/out/**\nclient/tsconfig.json\nserver/tsconfig.json\nserver/test/**\nserver/bin/**\nserver/build/**\nserver/package-lock.json\nserver/.npmignore\nserver/README.md\npackage-lock.json\nCONTRIBUTING.md\nserver/extension.webpack.config.js\nextension.webpack.config.js\nserver/extension-browser.webpack.config.js\nextension-browser.webpack.config.js\n"
  },
  {
    "path": "extensions/json-language-features/CONTRIBUTING.md",
    "content": "## Setup\n\n- Clone [microsoft/vscode](https://github.com/microsoft/vscode)\n- Run `npm i` at `/`, this will install\n\t- Dependencies for `/extension/json-language-features/`\n\t- Dependencies for `/extension/json-language-features/server/`\n\t- devDependencies such as `gulp`\n- Open `/extensions/json-language-features/` as the workspace in VS Code\n- In `/extensions/json-language-features/` run `npm run compile`(or `npm run watch`) to build the client and server\n- Run the [`Launch Extension`](https://github.com/microsoft/vscode/blob/master/extensions/json-language-features/.vscode/launch.json) debug target in the Debug View. This will:\n\t- Launch a new VS Code instance with the `json-language-features` extension loaded\n- Open a `.json` file to activate the extension. The extension will start the JSON language server process.\n- Add `\"json.trace.server\": \"verbose\"` to the settings to observe the communication between client and server in the `JSON Language Server` output.\n- Debug the extension and the language server client by setting breakpoints in`json-language-features/client/`\n- Debug the language server process by using `Attach to Node Process` command in the  VS Code window opened on `json-language-features`.\n  - Pick the process that contains `jsonServerMain` in the command line. Hover over `code-insiders` resp `code` processes to see the full process command line.\n  - Set breakpoints in `json-language-features/server/`\n- Run `Reload Window` command in the launched instance to reload the extension\n\n\n### Contribute to vscode-json-languageservice\n\n[microsoft/vscode-json-languageservice](https://github.com/microsoft/vscode-json-languageservice) is the library that implements the language smarts for JSON.\nThe JSON language server forwards most the of requests to the service library.\nIf you want to fix JSON issues or make improvements, you should make changes at [microsoft/vscode-json-languageservice](https://github.com/microsoft/vscode-json-languageservice).\n\nHowever, within this extension, you can run a development version of `vscode-json-languageservice` to debug code or test language features interactively:\n\n#### Linking `vscode-json-languageservice` in `json-language-features/server/`\n\n- Clone [microsoft/vscode-json-languageservice](https://github.com/microsoft/vscode-json-languageservice)\n- Run `npm i` in `vscode-json-languageservice`\n- Run `npm link` in `vscode-json-languageservice`. This will compile and link `vscode-json-languageservice`\n- In `json-language-features/server/`, run `npm link vscode-json-languageservice`\n\n#### Testing the development version of `vscode-json-languageservice`\n\n- Open both `vscode-json-languageservice` and this extension in two windows or with a single window with the[multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) feature.\n- Run `npm run watch` at `json-languagefeatures/server/` to recompile this extension with the linked version of `vscode-json-languageservice`\n- Make some changes in `vscode-json-languageservice`\n- Now when you run `Launch Extension` debug target, the launched instance will use your development version of `vscode-json-languageservice`. You can interactively test the language features.\n"
  },
  {
    "path": "extensions/json-language-features/README.md",
    "content": "# Language Features for JSON files\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [JSON in Visual Studio Code](https://code.visualstudio.com/docs/languages/json) to learn about the features of this extension.\n"
  },
  {
    "path": "extensions/json-language-features/client/src/browser/jsonClientMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, ExtensionContext, Uri, l10n, window } from 'vscode';\nimport { LanguageClientOptions } from 'vscode-languageclient';\nimport { startClient, LanguageClientConstructor, SchemaRequestService, AsyncDisposable, languageServerDescription } from '../jsonClient';\nimport { LanguageClient } from 'vscode-languageclient/browser';\n\nlet client: AsyncDisposable | undefined;\n\n// this method is called when vs code is activated\nexport async function activate(context: ExtensionContext) {\n\tconst serverMain = Uri.joinPath(context.extensionUri, 'server/dist/browser/jsonServerMain.js');\n\ttry {\n\t\tconst worker = new Worker(serverMain.toString());\n\t\tworker.postMessage({ i10lLocation: l10n.uri?.toString(false) ?? '' });\n\n\t\tconst newLanguageClient: LanguageClientConstructor = (id: string, name: string, clientOptions: LanguageClientOptions) => {\n\t\t\treturn new LanguageClient(id, name, worker, clientOptions);\n\t\t};\n\n\t\tconst schemaRequests: SchemaRequestService = {\n\t\t\tgetContent(uri: string) {\n\t\t\t\treturn fetch(uri, { mode: 'cors' })\n\t\t\t\t\t.then(function (response: any) {\n\t\t\t\t\t\treturn response.text();\n\t\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst timer = {\n\t\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t\t}\n\t\t};\n\n\t\tconst logOutputChannel = window.createOutputChannel(languageServerDescription, { log: true });\n\t\tcontext.subscriptions.push(logOutputChannel);\n\n\t\tclient = await startClient(context, newLanguageClient, { schemaRequests, timer, logOutputChannel });\n\n\t} catch (e) {\n\t\tconsole.log(e);\n\t}\n}\n\nexport async function deactivate(): Promise<void> {\n\tif (client) {\n\t\tawait client.dispose();\n\t\tclient = undefined;\n\t}\n}\n"
  },
  {
    "path": "extensions/json-language-features/client/src/jsonClient.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport type JSONLanguageStatus = { schemas: string[] };\n\nimport {\n\tworkspace, window, languages, commands, LogOutputChannel, ExtensionContext, extensions, Uri, ColorInformation,\n\tDiagnostic, StatusBarAlignment, TextEditor, TextDocument, FormattingOptions, CancellationToken, FoldingRange,\n\tProviderResult, TextEdit, Range, Position, Disposable, CompletionItem, CompletionList, CompletionContext, Hover, MarkdownString, FoldingContext, DocumentSymbol, SymbolInformation, l10n,\n\tRelativePattern\n} from 'vscode';\nimport {\n\tLanguageClientOptions, RequestType, NotificationType, FormattingOptions as LSPFormattingOptions, DocumentDiagnosticReportKind,\n\tDiagnostic as LSPDiagnostic,\n\tDidChangeConfigurationNotification, HandleDiagnosticsSignature, ResponseError, DocumentRangeFormattingParams,\n\tDocumentRangeFormattingRequest, ProvideCompletionItemsSignature, ProvideHoverSignature, BaseLanguageClient, ProvideFoldingRangeSignature, ProvideDocumentSymbolsSignature, ProvideDocumentColorsSignature\n} from 'vscode-languageclient';\n\n\nimport { hash } from './utils/hash';\nimport { createDocumentSymbolsLimitItem, createLanguageStatusItem, createLimitStatusItem } from './languageStatus';\nimport { getLanguageParticipants, LanguageParticipants } from './languageParticipants';\n\nnamespace VSCodeContentRequest {\n\texport const type: RequestType<string, string, any> = new RequestType('vscode/content');\n}\n\nnamespace SchemaContentChangeNotification {\n\texport const type: NotificationType<string | string[]> = new NotificationType('json/schemaContent');\n}\n\nnamespace ForceValidateRequest {\n\texport const type: RequestType<string, Diagnostic[], any> = new RequestType('json/validate');\n}\n\nnamespace LanguageStatusRequest {\n\texport const type: RequestType<string, JSONLanguageStatus, any> = new RequestType('json/languageStatus');\n}\n\nnamespace ValidateContentRequest {\n\texport const type: RequestType<{ schemaUri: string; content: string }, LSPDiagnostic[], any> = new RequestType('json/validateContent');\n}\ninterface SortOptions extends LSPFormattingOptions {\n}\n\ninterface DocumentSortingParams {\n\t/**\n\t * The uri of the document to sort.\n\t */\n\treadonly uri: string;\n\t/**\n\t * The sort options\n\t */\n\treadonly options: SortOptions;\n}\n\nnamespace DocumentSortingRequest {\n\texport interface ITextEdit {\n\t\trange: {\n\t\t\tstart: { line: number; character: number };\n\t\t\tend: { line: number; character: number };\n\t\t};\n\t\tnewText: string;\n\t}\n\texport const type: RequestType<DocumentSortingParams, ITextEdit[], any> = new RequestType('json/sort');\n}\n\nexport interface ISchemaAssociations {\n\t[pattern: string]: string[];\n}\n\nexport interface ISchemaAssociation {\n\tfileMatch: string[];\n\turi: string;\n}\n\nnamespace SchemaAssociationNotification {\n\texport const type: NotificationType<ISchemaAssociations | ISchemaAssociation[]> = new NotificationType('json/schemaAssociations');\n}\n\ntype Settings = {\n\tjson?: {\n\t\tschemas?: JSONSchemaSettings[];\n\t\tformat?: { enable?: boolean };\n\t\tkeepLines?: { enable?: boolean };\n\t\tvalidate?: { enable?: boolean };\n\t\tresultLimit?: number;\n\t\tjsonFoldingLimit?: number;\n\t\tjsoncFoldingLimit?: number;\n\t\tjsonColorDecoratorLimit?: number;\n\t\tjsoncColorDecoratorLimit?: number;\n\t};\n\thttp?: {\n\t\tproxy?: string;\n\t\tproxyStrictSSL?: boolean;\n\t};\n};\n\nexport type JSONSchemaSettings = {\n\tfileMatch?: string[];\n\turl?: string;\n\tschema?: any;\n\tfolderUri?: string;\n};\n\nexport namespace SettingIds {\n\texport const enableFormatter = 'json.format.enable';\n\texport const enableKeepLines = 'json.format.keepLines';\n\texport const enableValidation = 'json.validate.enable';\n\texport const enableSchemaDownload = 'json.schemaDownload.enable';\n\texport const maxItemsComputed = 'json.maxItemsComputed';\n\texport const editorFoldingMaximumRegions = 'editor.foldingMaximumRegions';\n\texport const editorColorDecoratorsLimit = 'editor.colorDecoratorsLimit';\n\n\texport const editorSection = 'editor';\n\texport const foldingMaximumRegions = 'foldingMaximumRegions';\n\texport const colorDecoratorsLimit = 'colorDecoratorsLimit';\n}\n\nexport interface TelemetryReporter {\n\tsendTelemetryEvent(eventName: string, properties?: {\n\t\t[key: string]: string;\n\t}, measurements?: {\n\t\t[key: string]: number;\n\t}): void;\n}\n\nexport type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => BaseLanguageClient;\n\nexport interface Runtime {\n\tschemaRequests: SchemaRequestService;\n\ttelemetry?: TelemetryReporter;\n\treadonly timer: {\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable;\n\t};\n\tlogOutputChannel: LogOutputChannel;\n}\n\nexport interface SchemaRequestService {\n\tgetContent(uri: string): Promise<string>;\n\tclearCache?(): Promise<string[]>;\n}\n\nexport const languageServerDescription = l10n.t('JSON Language Server');\n\nlet resultLimit = 5000;\nlet jsonFoldingLimit = 5000;\nlet jsoncFoldingLimit = 5000;\nlet jsonColorDecoratorLimit = 5000;\nlet jsoncColorDecoratorLimit = 5000;\n\nexport interface AsyncDisposable {\n\tdispose(): Promise<void>;\n}\n\nexport async function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime): Promise<AsyncDisposable> {\n\tconst languageParticipants = getLanguageParticipants();\n\tcontext.subscriptions.push(languageParticipants);\n\n\tlet client: Disposable | undefined = await startClientWithParticipants(context, languageParticipants, newLanguageClient, runtime);\n\n\tlet restartTrigger: Disposable | undefined;\n\tlanguageParticipants.onDidChange(() => {\n\t\tif (restartTrigger) {\n\t\t\trestartTrigger.dispose();\n\t\t}\n\t\trestartTrigger = runtime.timer.setTimeout(async () => {\n\t\t\tif (client) {\n\t\t\t\truntime.logOutputChannel.info('Extensions have changed, restarting JSON server...');\n\t\t\t\truntime.logOutputChannel.info('');\n\t\t\t\tconst oldClient = client;\n\t\t\t\tclient = undefined;\n\t\t\t\tawait oldClient.dispose();\n\t\t\t\tclient = await startClientWithParticipants(context, languageParticipants, newLanguageClient, runtime);\n\t\t\t}\n\t\t}, 2000);\n\t});\n\n\treturn {\n\t\tdispose: async () => {\n\t\t\trestartTrigger?.dispose();\n\t\t\tawait client?.dispose();\n\t\t}\n\t};\n}\n\nasync function startClientWithParticipants(_context: ExtensionContext, languageParticipants: LanguageParticipants, newLanguageClient: LanguageClientConstructor, runtime: Runtime): Promise<AsyncDisposable> {\n\n\tconst toDispose: Disposable[] = [];\n\n\tlet rangeFormatting: Disposable | undefined = undefined;\n\n\tconst documentSelector = languageParticipants.documentSelector;\n\n\tconst schemaResolutionErrorStatusBarItem = window.createStatusBarItem('status.json.resolveError', StatusBarAlignment.Right, 0);\n\tschemaResolutionErrorStatusBarItem.name = l10n.t('JSON: Schema Resolution Error');\n\tschemaResolutionErrorStatusBarItem.text = '$(alert)';\n\ttoDispose.push(schemaResolutionErrorStatusBarItem);\n\n\tconst fileSchemaErrors = new Map<string, string>();\n\tlet schemaDownloadEnabled = true;\n\n\tlet isClientReady = false;\n\n\tconst documentSymbolsLimitStatusbarItem = createLimitStatusItem((limit: number) => createDocumentSymbolsLimitItem(documentSelector, SettingIds.maxItemsComputed, limit));\n\ttoDispose.push(documentSymbolsLimitStatusbarItem);\n\n\ttoDispose.push(commands.registerCommand('json.clearCache', async () => {\n\t\tif (isClientReady && runtime.schemaRequests.clearCache) {\n\t\t\tconst cachedSchemas = await runtime.schemaRequests.clearCache();\n\t\t\tawait client.sendNotification(SchemaContentChangeNotification.type, cachedSchemas);\n\t\t}\n\t\twindow.showInformationMessage(l10n.t('JSON schema cache cleared.'));\n\t}));\n\n\ttoDispose.push(commands.registerCommand('json.validate', async (schemaUri: Uri, content: string) => {\n\t\tconst diagnostics: LSPDiagnostic[] = await client.sendRequest(ValidateContentRequest.type, { schemaUri: schemaUri.toString(), content });\n\t\treturn diagnostics.map(client.protocol2CodeConverter.asDiagnostic);\n\t}));\n\n\ttoDispose.push(commands.registerCommand('json.sort', async () => {\n\n\t\tif (isClientReady) {\n\t\t\tconst textEditor = window.activeTextEditor;\n\t\t\tif (textEditor) {\n\t\t\t\tconst documentOptions = textEditor.options;\n\t\t\t\tconst textEdits = await getSortTextEdits(textEditor.document, documentOptions.tabSize, documentOptions.insertSpaces);\n\t\t\t\tconst success = await textEditor.edit(mutator => {\n\t\t\t\t\tfor (const edit of textEdits) {\n\t\t\t\t\t\tmutator.replace(client.protocol2CodeConverter.asRange(edit.range), edit.newText);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!success) {\n\t\t\t\t\twindow.showErrorMessage(l10n.t('Failed to sort the JSONC document, please consider opening an issue.'));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}));\n\n\tfunction filterSchemaErrorDiagnostics(uri: Uri, diagnostics: Diagnostic[]): Diagnostic[] {\n\t\tconst schemaErrorIndex = diagnostics.findIndex(isSchemaResolveError);\n\t\tif (schemaErrorIndex !== -1) {\n\t\t\tconst schemaResolveDiagnostic = diagnostics[schemaErrorIndex];\n\t\t\tfileSchemaErrors.set(uri.toString(), schemaResolveDiagnostic.message);\n\t\t\tif (!schemaDownloadEnabled) {\n\t\t\t\tdiagnostics = diagnostics.filter(d => !isSchemaResolveError(d));\n\t\t\t}\n\t\t\tif (window.activeTextEditor && window.activeTextEditor.document.uri.toString() === uri.toString()) {\n\t\t\t\tschemaResolutionErrorStatusBarItem.show();\n\t\t\t}\n\t\t}\n\t\treturn diagnostics;\n\t}\n\n\t// Options to control the language client\n\tconst clientOptions: LanguageClientOptions = {\n\t\t// Register the server for json documents\n\t\tdocumentSelector,\n\t\tinitializationOptions: {\n\t\t\thandledSchemaProtocols: ['file'], // language server only loads file-URI. Fetching schemas with other protocols ('http'...) are made on the client.\n\t\t\tprovideFormatter: false, // tell the server to not provide formatting capability and ignore the `json.format.enable` setting.\n\t\t\tcustomCapabilities: { rangeFormatting: { editLimit: 10000 } }\n\t\t},\n\t\tsynchronize: {\n\t\t\t// Synchronize the setting section 'json' to the server\n\t\t\tconfigurationSection: ['json', 'http'],\n\t\t\tfileEvents: workspace.createFileSystemWatcher('**/*.json')\n\t\t},\n\t\tmiddleware: {\n\t\t\tworkspace: {\n\t\t\t\tdidChangeConfiguration: () => client.sendNotification(DidChangeConfigurationNotification.type, { settings: getSettings() })\n\t\t\t},\n\t\t\tprovideDiagnostics: async (uriOrDoc, previousResolutId, token, next) => {\n\t\t\t\tconst diagnostics = await next(uriOrDoc, previousResolutId, token);\n\t\t\t\tif (diagnostics && diagnostics.kind === DocumentDiagnosticReportKind.Full) {\n\t\t\t\t\tconst uri = uriOrDoc instanceof Uri ? uriOrDoc : uriOrDoc.uri;\n\t\t\t\t\tdiagnostics.items = filterSchemaErrorDiagnostics(uri, diagnostics.items);\n\t\t\t\t}\n\t\t\t\treturn diagnostics;\n\t\t\t},\n\t\t\thandleDiagnostics: (uri: Uri, diagnostics: Diagnostic[], next: HandleDiagnosticsSignature) => {\n\t\t\t\tdiagnostics = filterSchemaErrorDiagnostics(uri, diagnostics);\n\t\t\t\tnext(uri, diagnostics);\n\t\t\t},\n\t\t\t// testing the replace / insert mode\n\t\t\tprovideCompletionItem(document: TextDocument, position: Position, context: CompletionContext, token: CancellationToken, next: ProvideCompletionItemsSignature): ProviderResult<CompletionItem[] | CompletionList> {\n\t\t\t\tfunction update(item: CompletionItem) {\n\t\t\t\t\tconst range = item.range;\n\t\t\t\t\tif (range instanceof Range && range.end.isAfter(position) && range.start.isBeforeOrEqual(position)) {\n\t\t\t\t\t\titem.range = { inserting: new Range(range.start, position), replacing: range };\n\t\t\t\t\t}\n\t\t\t\t\tif (item.documentation instanceof MarkdownString) {\n\t\t\t\t\t\titem.documentation = updateMarkdownString(item.documentation);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\tfunction updateProposals(r: CompletionItem[] | CompletionList | null | undefined): CompletionItem[] | CompletionList | null | undefined {\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\t(Array.isArray(r) ? r : r.items).forEach(update);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\n\t\t\t\tconst r = next(document, position, context, token);\n\t\t\t\tif (isThenable<CompletionItem[] | CompletionList | null | undefined>(r)) {\n\t\t\t\t\treturn r.then(updateProposals);\n\t\t\t\t}\n\t\t\t\treturn updateProposals(r);\n\t\t\t},\n\t\t\tprovideHover(document: TextDocument, position: Position, token: CancellationToken, next: ProvideHoverSignature) {\n\t\t\t\tfunction updateHover(r: Hover | null | undefined): Hover | null | undefined {\n\t\t\t\t\tif (r && Array.isArray(r.contents)) {\n\t\t\t\t\t\tr.contents = r.contents.map(h => h instanceof MarkdownString ? updateMarkdownString(h) : h);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\tconst r = next(document, position, token);\n\t\t\t\tif (isThenable<Hover | null | undefined>(r)) {\n\t\t\t\t\treturn r.then(updateHover);\n\t\t\t\t}\n\t\t\t\treturn updateHover(r);\n\t\t\t},\n\t\t\tprovideFoldingRanges(document: TextDocument, context: FoldingContext, token: CancellationToken, next: ProvideFoldingRangeSignature) {\n\t\t\t\tconst r = next(document, context, token);\n\t\t\t\tif (isThenable<FoldingRange[] | null | undefined>(r)) {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\t},\n\t\t\tprovideDocumentColors(document: TextDocument, token: CancellationToken, next: ProvideDocumentColorsSignature) {\n\t\t\t\tconst r = next(document, token);\n\t\t\t\tif (isThenable<ColorInformation[] | null | undefined>(r)) {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\t},\n\t\t\tprovideDocumentSymbols(document: TextDocument, token: CancellationToken, next: ProvideDocumentSymbolsSignature) {\n\t\t\t\ttype T = SymbolInformation[] | DocumentSymbol[];\n\t\t\t\tfunction countDocumentSymbols(symbols: DocumentSymbol[]): number {\n\t\t\t\t\treturn symbols.reduce((previousValue, s) => previousValue + 1 + countDocumentSymbols(s.children), 0);\n\t\t\t\t}\n\t\t\t\tfunction isDocumentSymbol(r: T): r is DocumentSymbol[] {\n\t\t\t\t\treturn r[0] instanceof DocumentSymbol;\n\t\t\t\t}\n\t\t\t\tfunction checkLimit(r: T | null | undefined): T | null | undefined {\n\t\t\t\t\tif (Array.isArray(r) && (isDocumentSymbol(r) ? countDocumentSymbols(r) : r.length) > resultLimit) {\n\t\t\t\t\t\tdocumentSymbolsLimitStatusbarItem.update(document, resultLimit);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdocumentSymbolsLimitStatusbarItem.update(document, false);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\tconst r = next(document, token);\n\t\t\t\tif (isThenable<T | undefined | null>(r)) {\n\t\t\t\t\treturn r.then(checkLimit);\n\t\t\t\t}\n\t\t\t\treturn checkLimit(r);\n\t\t\t}\n\t\t}\n\t};\n\n\tclientOptions.outputChannel = runtime.logOutputChannel;\n\t// Create the language client and start the client.\n\tconst client = newLanguageClient('json', languageServerDescription, clientOptions);\n\tclient.registerProposedFeatures();\n\n\tconst schemaDocuments: { [uri: string]: boolean } = {};\n\n\t// handle content request\n\tclient.onRequest(VSCodeContentRequest.type, async (uriPath: string) => {\n\t\tconst uri = Uri.parse(uriPath);\n\t\tconst uriString = uri.toString();\n\t\tif (uri.scheme === 'untitled') {\n\t\t\tthrow new ResponseError(3, l10n.t('Unable to load {0}', uriString));\n\t\t}\n\t\tif (uri.scheme === 'vscode') {\n\t\t\ttry {\n\t\t\t\truntime.logOutputChannel.info('read schema from vscode: ' + uriString);\n\t\t\t\tensureFilesystemWatcherInstalled(uri);\n\t\t\t\tconst content = await workspace.fs.readFile(uri);\n\t\t\t\treturn new TextDecoder().decode(content);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ResponseError(5, e.toString(), e);\n\t\t\t}\n\t\t} else if (uri.scheme !== 'http' && uri.scheme !== 'https') {\n\t\t\ttry {\n\t\t\t\tconst document = await workspace.openTextDocument(uri);\n\t\t\t\tschemaDocuments[uriString] = true;\n\t\t\t\treturn document.getText();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ResponseError(2, e.toString(), e);\n\t\t\t}\n\t\t} else if (schemaDownloadEnabled) {\n\t\t\tif (runtime.telemetry && uri.authority === 'schema.management.azure.com') {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"json.schema\" : {\n\t\t\t\t\t\t\"owner\": \"aeschli\",\n\t\t\t\t\t\t\"comment\": \"Measure the use of the Azure resource manager schemas\",\n\t\t\t\t\t\t\"schemaURL\" : { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"The azure schema URL that was requested.\" }\n\t\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\truntime.telemetry.sendTelemetryEvent('json.schema', { schemaURL: uriString });\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn await runtime.schemaRequests.getContent(uriString);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ResponseError(4, e.toString());\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new ResponseError(1, l10n.t('Downloading schemas is disabled through setting \\'{0}\\'', SettingIds.enableSchemaDownload));\n\t\t}\n\t});\n\n\tawait client.start();\n\n\tisClientReady = true;\n\n\tconst handleContentChange = (uriString: string) => {\n\t\tif (schemaDocuments[uriString]) {\n\t\t\tclient.sendNotification(SchemaContentChangeNotification.type, uriString);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\tconst handleActiveEditorChange = (activeEditor?: TextEditor) => {\n\t\tif (!activeEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeDocUri = activeEditor.document.uri.toString();\n\n\t\tif (activeDocUri && fileSchemaErrors.has(activeDocUri)) {\n\t\t\tschemaResolutionErrorStatusBarItem.show();\n\t\t} else {\n\t\t\tschemaResolutionErrorStatusBarItem.hide();\n\t\t}\n\t};\n\tconst handleContentClosed = (uriString: string) => {\n\t\tif (handleContentChange(uriString)) {\n\t\t\tdelete schemaDocuments[uriString];\n\t\t}\n\t\tfileSchemaErrors.delete(uriString);\n\t};\n\n\tconst watchers: Map<string, Disposable> = new Map();\n\ttoDispose.push(new Disposable(() => {\n\t\tfor (const d of watchers.values()) {\n\t\t\td.dispose();\n\t\t}\n\t}));\n\n\n\tconst ensureFilesystemWatcherInstalled = (uri: Uri) => {\n\n\t\tconst uriString = uri.toString();\n\t\tif (!watchers.has(uriString)) {\n\t\t\ttry {\n\t\t\t\tconst watcher = workspace.createFileSystemWatcher(new RelativePattern(uri, '*'));\n\t\t\t\tconst handleChange = (uri: Uri) => {\n\t\t\t\t\truntime.logOutputChannel.info('schema change detected ' + uri.toString());\n\t\t\t\t\tclient.sendNotification(SchemaContentChangeNotification.type, uriString);\n\t\t\t\t};\n\t\t\t\tconst createListener = watcher.onDidCreate(handleChange);\n\t\t\t\tconst changeListener = watcher.onDidChange(handleChange);\n\t\t\t\tconst deleteListener = watcher.onDidDelete(() => {\n\t\t\t\t\tconst watcher = watchers.get(uriString);\n\t\t\t\t\tif (watcher) {\n\t\t\t\t\t\twatcher.dispose();\n\t\t\t\t\t\twatchers.delete(uriString);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\twatchers.set(uriString, Disposable.from(watcher, createListener, changeListener, deleteListener));\n\t\t\t} catch {\n\t\t\t\truntime.logOutputChannel.info('Problem installing a file system watcher for ' + uriString);\n\t\t\t}\n\t\t}\n\t};\n\n\ttoDispose.push(workspace.onDidChangeTextDocument(e => handleContentChange(e.document.uri.toString())));\n\ttoDispose.push(workspace.onDidCloseTextDocument(d => handleContentClosed(d.uri.toString())));\n\n\ttoDispose.push(window.onDidChangeActiveTextEditor(handleActiveEditorChange));\n\n\tconst handleRetryResolveSchemaCommand = () => {\n\t\tif (window.activeTextEditor) {\n\t\t\tschemaResolutionErrorStatusBarItem.text = '$(watch)';\n\t\t\tconst activeDocUri = window.activeTextEditor.document.uri.toString();\n\t\t\tclient.sendRequest(ForceValidateRequest.type, activeDocUri).then((diagnostics) => {\n\t\t\t\tconst schemaErrorIndex = diagnostics.findIndex(isSchemaResolveError);\n\t\t\t\tif (schemaErrorIndex !== -1) {\n\t\t\t\t\t// Show schema resolution errors in status bar only; ref: #51032\n\t\t\t\t\tconst schemaResolveDiagnostic = diagnostics[schemaErrorIndex];\n\t\t\t\t\tfileSchemaErrors.set(activeDocUri, schemaResolveDiagnostic.message);\n\t\t\t\t} else {\n\t\t\t\t\tschemaResolutionErrorStatusBarItem.hide();\n\t\t\t\t}\n\t\t\t\tschemaResolutionErrorStatusBarItem.text = '$(alert)';\n\t\t\t});\n\t\t}\n\t};\n\n\ttoDispose.push(commands.registerCommand('_json.retryResolveSchema', handleRetryResolveSchemaCommand));\n\n\tclient.sendNotification(SchemaAssociationNotification.type, await getSchemaAssociations());\n\n\ttoDispose.push(extensions.onDidChange(async _ => {\n\t\tclient.sendNotification(SchemaAssociationNotification.type, await getSchemaAssociations());\n\t}));\n\n\tconst associationWatcher = workspace.createFileSystemWatcher(new RelativePattern(\n\t\tUri.parse(`vscode://schemas-associations/`),\n\t\t'**/schemas-associations.json')\n\t);\n\ttoDispose.push(associationWatcher);\n\ttoDispose.push(associationWatcher.onDidChange(async _e => {\n\t\tclient.sendNotification(SchemaAssociationNotification.type, await getSchemaAssociations());\n\t}));\n\n\t// manually register / deregister format provider based on the `json.format.enable` setting avoiding issues with late registration. See #71652.\n\tupdateFormatterRegistration();\n\ttoDispose.push({ dispose: () => rangeFormatting && rangeFormatting.dispose() });\n\n\tupdateSchemaDownloadSetting();\n\n\ttoDispose.push(workspace.onDidChangeConfiguration(e => {\n\t\tif (e.affectsConfiguration(SettingIds.enableFormatter)) {\n\t\t\tupdateFormatterRegistration();\n\t\t} else if (e.affectsConfiguration(SettingIds.enableSchemaDownload)) {\n\t\t\tupdateSchemaDownloadSetting();\n\t\t} else if (e.affectsConfiguration(SettingIds.editorFoldingMaximumRegions) || e.affectsConfiguration(SettingIds.editorColorDecoratorsLimit)) {\n\t\t\tclient.sendNotification(DidChangeConfigurationNotification.type, { settings: getSettings() });\n\t\t}\n\t}));\n\n\ttoDispose.push(createLanguageStatusItem(documentSelector, (uri: string) => client.sendRequest(LanguageStatusRequest.type, uri)));\n\n\tfunction updateFormatterRegistration() {\n\t\tconst formatEnabled = workspace.getConfiguration().get(SettingIds.enableFormatter);\n\t\tif (!formatEnabled && rangeFormatting) {\n\t\t\trangeFormatting.dispose();\n\t\t\trangeFormatting = undefined;\n\t\t} else if (formatEnabled && !rangeFormatting) {\n\t\t\trangeFormatting = languages.registerDocumentRangeFormattingEditProvider(documentSelector, {\n\t\t\t\tprovideDocumentRangeFormattingEdits(document: TextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]> {\n\t\t\t\t\tconst filesConfig = workspace.getConfiguration('files', document);\n\t\t\t\t\tconst fileFormattingOptions = {\n\t\t\t\t\t\ttrimTrailingWhitespace: filesConfig.get<boolean>('trimTrailingWhitespace'),\n\t\t\t\t\t\ttrimFinalNewlines: filesConfig.get<boolean>('trimFinalNewlines'),\n\t\t\t\t\t\tinsertFinalNewline: filesConfig.get<boolean>('insertFinalNewline'),\n\t\t\t\t\t};\n\t\t\t\t\tconst params: DocumentRangeFormattingParams = {\n\t\t\t\t\t\ttextDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n\t\t\t\t\t\trange: client.code2ProtocolConverter.asRange(range),\n\t\t\t\t\t\toptions: client.code2ProtocolConverter.asFormattingOptions(options, fileFormattingOptions)\n\t\t\t\t\t};\n\n\t\t\t\t\treturn client.sendRequest(DocumentRangeFormattingRequest.type, params, token).then(\n\t\t\t\t\t\tclient.protocol2CodeConverter.asTextEdits,\n\t\t\t\t\t\t(error) => {\n\t\t\t\t\t\t\tclient.handleFailedRequest(DocumentRangeFormattingRequest.type, undefined, error, []);\n\t\t\t\t\t\t\treturn Promise.resolve([]);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction updateSchemaDownloadSetting() {\n\t\tschemaDownloadEnabled = workspace.getConfiguration().get(SettingIds.enableSchemaDownload) !== false;\n\t\tif (schemaDownloadEnabled) {\n\t\t\tschemaResolutionErrorStatusBarItem.tooltip = l10n.t('Unable to resolve schema. Click to retry.');\n\t\t\tschemaResolutionErrorStatusBarItem.command = '_json.retryResolveSchema';\n\t\t\thandleRetryResolveSchemaCommand();\n\t\t} else {\n\t\t\tschemaResolutionErrorStatusBarItem.tooltip = l10n.t('Downloading schemas is disabled. Click to configure.');\n\t\t\tschemaResolutionErrorStatusBarItem.command = { command: 'workbench.action.openSettings', arguments: [SettingIds.enableSchemaDownload], title: '' };\n\t\t}\n\t}\n\n\tasync function getSortTextEdits(document: TextDocument, tabSize: string | number = 4, insertSpaces: string | boolean = true): Promise<TextEdit[]> {\n\t\tconst filesConfig = workspace.getConfiguration('files', document);\n\t\tconst options: SortOptions = {\n\t\t\ttabSize: Number(tabSize),\n\t\t\tinsertSpaces: Boolean(insertSpaces),\n\t\t\ttrimTrailingWhitespace: filesConfig.get<boolean>('trimTrailingWhitespace'),\n\t\t\ttrimFinalNewlines: filesConfig.get<boolean>('trimFinalNewlines'),\n\t\t\tinsertFinalNewline: filesConfig.get<boolean>('insertFinalNewline'),\n\t\t};\n\t\tconst params: DocumentSortingParams = {\n\t\t\turi: document.uri.toString(),\n\t\t\toptions\n\t\t};\n\t\tconst edits = await client.sendRequest(DocumentSortingRequest.type, params);\n\t\t// Here we convert the JSON objects to real TextEdit objects\n\t\treturn edits.map((edit) => {\n\t\t\treturn new TextEdit(\n\t\t\t\tnew Range(edit.range.start.line, edit.range.start.character, edit.range.end.line, edit.range.end.character),\n\t\t\t\tedit.newText\n\t\t\t);\n\t\t});\n\t}\n\n\treturn {\n\t\tdispose: async () => {\n\t\t\tawait client.stop();\n\t\t\ttoDispose.forEach(d => d.dispose());\n\t\t\trangeFormatting?.dispose();\n\t\t}\n\t};\n}\n\nasync function getSchemaAssociations(): Promise<ISchemaAssociation[]> {\n\treturn getSchemaExtensionAssociations()\n\t\t.concat(await getDynamicSchemaAssociations());\n}\n\nfunction getSchemaExtensionAssociations(): ISchemaAssociation[] {\n\tconst associations: ISchemaAssociation[] = [];\n\textensions.allAcrossExtensionHosts.forEach(extension => {\n\t\tconst packageJSON = extension.packageJSON;\n\t\tif (packageJSON && packageJSON.contributes && packageJSON.contributes.jsonValidation) {\n\t\t\tconst jsonValidation = packageJSON.contributes.jsonValidation;\n\t\t\tif (Array.isArray(jsonValidation)) {\n\t\t\t\tjsonValidation.forEach(jv => {\n\t\t\t\t\tlet { fileMatch, url } = jv;\n\t\t\t\t\tif (typeof fileMatch === 'string') {\n\t\t\t\t\t\tfileMatch = [fileMatch];\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(fileMatch) && typeof url === 'string') {\n\t\t\t\t\t\tlet uri: string = url;\n\t\t\t\t\t\tif (uri[0] === '.' && uri[1] === '/') {\n\t\t\t\t\t\t\turi = Uri.joinPath(extension.extensionUri, uri).toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfileMatch = fileMatch.map(fm => {\n\t\t\t\t\t\t\tif (fm[0] === '%') {\n\t\t\t\t\t\t\t\tfm = fm.replace(/%APP_SETTINGS_HOME%/, '/User');\n\t\t\t\t\t\t\t\tfm = fm.replace(/%MACHINE_SETTINGS_HOME%/, '/Machine');\n\t\t\t\t\t\t\t\tfm = fm.replace(/%APP_WORKSPACES_HOME%/, '/Workspaces');\n\t\t\t\t\t\t\t} else if (!fm.match(/^(\\w+:\\/\\/|\\/|!)/)) {\n\t\t\t\t\t\t\t\tfm = '/' + fm;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn fm;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tassociations.push({ fileMatch, uri });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\treturn associations;\n}\n\nasync function getDynamicSchemaAssociations(): Promise<ISchemaAssociation[]> {\n\tconst result: ISchemaAssociation[] = [];\n\ttry {\n\t\tconst data = await workspace.fs.readFile(Uri.parse(`vscode://schemas-associations/schemas-associations.json`));\n\t\tconst rawStr = new TextDecoder().decode(data);\n\t\tconst obj = <Record<string, string[]>>JSON.parse(rawStr);\n\t\tfor (const item of Object.keys(obj)) {\n\t\t\tresult.push({\n\t\t\t\tfileMatch: obj[item],\n\t\t\t\turi: item\n\t\t\t});\n\t\t}\n\t} catch {\n\t\t// ignore\n\t}\n\treturn result;\n}\n\nfunction getSettings(): Settings {\n\tconst configuration = workspace.getConfiguration();\n\tconst httpSettings = workspace.getConfiguration('http');\n\n\tconst normalizeLimit = (settingValue: any) => Math.trunc(Math.max(0, Number(settingValue))) || 5000;\n\n\tresultLimit = normalizeLimit(workspace.getConfiguration().get(SettingIds.maxItemsComputed));\n\tconst editorJSONSettings = workspace.getConfiguration(SettingIds.editorSection, { languageId: 'json' });\n\tconst editorJSONCSettings = workspace.getConfiguration(SettingIds.editorSection, { languageId: 'jsonc' });\n\n\tjsonFoldingLimit = normalizeLimit(editorJSONSettings.get(SettingIds.foldingMaximumRegions));\n\tjsoncFoldingLimit = normalizeLimit(editorJSONCSettings.get(SettingIds.foldingMaximumRegions));\n\tjsonColorDecoratorLimit = normalizeLimit(editorJSONSettings.get(SettingIds.colorDecoratorsLimit));\n\tjsoncColorDecoratorLimit = normalizeLimit(editorJSONCSettings.get(SettingIds.colorDecoratorsLimit));\n\n\tconst schemas: JSONSchemaSettings[] = [];\n\n\tconst settings: Settings = {\n\t\thttp: {\n\t\t\tproxy: httpSettings.get('proxy'),\n\t\t\tproxyStrictSSL: httpSettings.get('proxyStrictSSL')\n\t\t},\n\t\tjson: {\n\t\t\tvalidate: { enable: configuration.get(SettingIds.enableValidation) },\n\t\t\tformat: { enable: configuration.get(SettingIds.enableFormatter) },\n\t\t\tkeepLines: { enable: configuration.get(SettingIds.enableKeepLines) },\n\t\t\tschemas,\n\t\t\tresultLimit: resultLimit + 1, // ask for one more so we can detect if the limit has been exceeded\n\t\t\tjsonFoldingLimit: jsonFoldingLimit + 1,\n\t\t\tjsoncFoldingLimit: jsoncFoldingLimit + 1,\n\t\t\tjsonColorDecoratorLimit: jsonColorDecoratorLimit + 1,\n\t\t\tjsoncColorDecoratorLimit: jsoncColorDecoratorLimit + 1\n\t\t}\n\t};\n\n\t/*\n\t * Add schemas from the settings\n\t * folderUri to which folder the setting is scoped to. `undefined` means global (also external files)\n\t * settingsLocation against which path relative schema URLs are resolved\n\t */\n\tconst collectSchemaSettings = (schemaSettings: JSONSchemaSettings[] | undefined, folderUri: string | undefined, settingsLocation: Uri | undefined) => {\n\t\tif (schemaSettings) {\n\t\t\tfor (const setting of schemaSettings) {\n\t\t\t\tconst url = getSchemaId(setting, settingsLocation);\n\t\t\t\tif (url) {\n\t\t\t\t\tconst schemaSetting: JSONSchemaSettings = { url, fileMatch: setting.fileMatch, folderUri, schema: setting.schema };\n\t\t\t\t\tschemas.push(schemaSetting);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst folders = workspace.workspaceFolders ?? [];\n\n\tconst schemaConfigInfo = workspace.getConfiguration('json', null).inspect<JSONSchemaSettings[]>('schemas');\n\tif (schemaConfigInfo) {\n\t\t// settings in user config\n\t\tcollectSchemaSettings(schemaConfigInfo.globalValue, undefined, undefined);\n\t\tif (workspace.workspaceFile) {\n\t\t\tif (schemaConfigInfo.workspaceValue) {\n\t\t\t\tconst settingsLocation = Uri.joinPath(workspace.workspaceFile, '..');\n\t\t\t\t// settings in the workspace configuration file apply to all files (also external files)\n\t\t\t\tcollectSchemaSettings(schemaConfigInfo.workspaceValue, undefined, settingsLocation);\n\t\t\t}\n\t\t\tfor (const folder of folders) {\n\t\t\t\tconst folderUri = folder.uri;\n\t\t\t\tconst folderSchemaConfigInfo = workspace.getConfiguration('json', folderUri).inspect<JSONSchemaSettings[]>('schemas');\n\t\t\t\tcollectSchemaSettings(folderSchemaConfigInfo?.workspaceFolderValue, folderUri.toString(false), folderUri);\n\t\t\t}\n\t\t} else {\n\t\t\tif (schemaConfigInfo.workspaceValue && folders.length === 1) {\n\t\t\t\t// single folder workspace: settings apply to all files (also external files)\n\t\t\t\tcollectSchemaSettings(schemaConfigInfo.workspaceValue, undefined, folders[0].uri);\n\t\t\t}\n\t\t}\n\t}\n\treturn settings;\n}\n\nfunction getSchemaId(schema: JSONSchemaSettings, settingsLocation?: Uri): string | undefined {\n\tlet url = schema.url;\n\tif (!url) {\n\t\tif (schema.schema) {\n\t\t\turl = schema.schema.id || `vscode://schemas/custom/${encodeURIComponent(hash(schema.schema).toString(16))}`;\n\t\t}\n\t} else if (settingsLocation && (url[0] === '.' || url[0] === '/')) {\n\t\turl = Uri.joinPath(settingsLocation, url).toString(false);\n\t}\n\treturn url;\n}\n\nfunction isThenable<T>(obj: ProviderResult<T>): obj is Thenable<T> {\n\treturn obj && (<any>obj)['then'];\n}\n\nfunction updateMarkdownString(h: MarkdownString): MarkdownString {\n\tconst n = new MarkdownString(h.value, true);\n\tn.isTrusted = h.isTrusted;\n\treturn n;\n}\n\nfunction isSchemaResolveError(d: Diagnostic) {\n\treturn d.code === /* SchemaResolveError */ 0x300;\n}\n\n\n"
  },
  {
    "path": "extensions/json-language-features/client/src/languageParticipants.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Event, EventEmitter, extensions } from 'vscode';\n\n/**\n * JSON language participant contribution.\n */\ninterface LanguageParticipantContribution {\n\t/**\n\t * The id of the language which participates with the JSON language server.\n\t */\n\tlanguageId: string;\n\t/**\n\t * true if the language allows comments and false otherwise.\n\t * TODO: implement server side setting\n\t */\n\tcomments?: boolean;\n}\n\nexport interface LanguageParticipants {\n\treadonly onDidChange: Event<void>;\n\treadonly documentSelector: string[];\n\thasLanguage(languageId: string): boolean;\n\tuseComments(languageId: string): boolean;\n\tdispose(): void;\n}\n\nexport function getLanguageParticipants(): LanguageParticipants {\n\tconst onDidChangeEmmiter = new EventEmitter<void>();\n\tlet languages = new Set<string>();\n\tlet comments = new Set<string>();\n\n\tfunction update() {\n\t\tconst oldLanguages = languages, oldComments = comments;\n\n\t\tlanguages = new Set();\n\t\tlanguages.add('json');\n\t\tlanguages.add('jsonc');\n\t\tlanguages.add('snippets');\n\t\tcomments = new Set();\n\t\tcomments.add('jsonc');\n\t\tcomments.add('snippets');\n\n\t\tfor (const extension of extensions.allAcrossExtensionHosts) {\n\t\t\tconst jsonLanguageParticipants = extension.packageJSON?.contributes?.jsonLanguageParticipants as LanguageParticipantContribution[];\n\t\t\tif (Array.isArray(jsonLanguageParticipants)) {\n\t\t\t\tfor (const jsonLanguageParticipant of jsonLanguageParticipants) {\n\t\t\t\t\tconst languageId = jsonLanguageParticipant.languageId;\n\t\t\t\t\tif (typeof languageId === 'string') {\n\t\t\t\t\t\tlanguages.add(languageId);\n\t\t\t\t\t\tif (jsonLanguageParticipant.comments === true) {\n\t\t\t\t\t\t\tcomments.add(languageId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !isEqualSet(languages, oldLanguages) || !isEqualSet(comments, oldComments);\n\t}\n\tupdate();\n\n\tconst changeListener = extensions.onDidChange(_ => {\n\t\tif (update()) {\n\t\t\tonDidChangeEmmiter.fire();\n\t\t}\n\t});\n\n\treturn {\n\t\tonDidChange: onDidChangeEmmiter.event,\n\t\tget documentSelector() { return Array.from(languages); },\n\t\thasLanguage(languageId: string) { return languages.has(languageId); },\n\t\tuseComments(languageId: string) { return comments.has(languageId); },\n\t\tdispose: () => changeListener.dispose()\n\t};\n}\n\nfunction isEqualSet<T>(s1: Set<T>, s2: Set<T>) {\n\tif (s1.size !== s2.size) {\n\t\treturn false;\n\t}\n\tfor (const e of s1) {\n\t\tif (!s2.has(e)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n"
  },
  {
    "path": "extensions/json-language-features/client/src/languageStatus.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n\twindow, languages, Uri, Disposable, commands, QuickPickItem,\n\textensions, workspace, Extension, WorkspaceFolder, QuickPickItemKind,\n\tThemeIcon, TextDocument, LanguageStatusSeverity, l10n, DocumentSelector\n} from 'vscode';\nimport { JSONLanguageStatus, JSONSchemaSettings } from './jsonClient';\n\ntype ShowSchemasInput = {\n\tschemas: string[];\n\turi: string;\n};\n\ninterface ShowSchemasItem extends QuickPickItem {\n\turi?: Uri;\n\tbuttonCommands?: (() => void)[];\n}\n\nfunction getExtensionSchemaAssociations() {\n\tconst associations: { fullUri: string; extension: Extension<any>; label: string }[] = [];\n\n\tfor (const extension of extensions.all) {\n\t\tconst jsonValidations = extension.packageJSON?.contributes?.jsonValidation;\n\t\tif (Array.isArray(jsonValidations)) {\n\t\t\tfor (const jsonValidation of jsonValidations) {\n\t\t\t\tlet uri = jsonValidation.url;\n\t\t\t\tif (typeof uri === 'string') {\n\t\t\t\t\tif (uri[0] === '.' && uri[1] === '/') {\n\t\t\t\t\t\turi = Uri.joinPath(extension.extensionUri, uri).toString(false);\n\t\t\t\t\t}\n\t\t\t\t\tassociations.push({ fullUri: uri, extension, label: jsonValidation.url });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tfindExtension(uri: string): ShowSchemasItem | undefined {\n\t\t\tfor (const association of associations) {\n\t\t\t\tif (association.fullUri === uri) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: association.label,\n\t\t\t\t\t\tdetail: l10n.t('Configured by extension: {0}', association.extension.id),\n\t\t\t\t\t\turi: Uri.parse(association.fullUri),\n\t\t\t\t\t\tbuttons: [{ iconPath: new ThemeIcon('extensions'), tooltip: l10n.t('Open Extension') }],\n\t\t\t\t\t\tbuttonCommands: [() => commands.executeCommand('workbench.extensions.action.showExtensionsWithIds', [[association.extension.id]])]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t};\n}\n\n//\n\nfunction getSettingsSchemaAssociations(uri: string) {\n\tconst resourceUri = Uri.parse(uri);\n\tconst workspaceFolder = workspace.getWorkspaceFolder(resourceUri);\n\n\tconst settings = workspace.getConfiguration('json', resourceUri).inspect<JSONSchemaSettings[]>('schemas');\n\n\tconst associations: { fullUri: string; workspaceFolder: WorkspaceFolder | undefined; label: string }[] = [];\n\n\tconst folderSettingSchemas = settings?.workspaceFolderValue;\n\tif (workspaceFolder && Array.isArray(folderSettingSchemas)) {\n\t\tfor (const setting of folderSettingSchemas) {\n\t\t\tconst uri = setting.url;\n\t\t\tif (typeof uri === 'string') {\n\t\t\t\tlet fullUri = uri;\n\t\t\t\tif (uri[0] === '.' && uri[1] === '/') {\n\t\t\t\t\tfullUri = Uri.joinPath(workspaceFolder.uri, uri).toString(false);\n\t\t\t\t}\n\t\t\t\tassociations.push({ fullUri, workspaceFolder, label: uri });\n\t\t\t}\n\t\t}\n\t}\n\tconst userSettingSchemas = settings?.globalValue;\n\tif (Array.isArray(userSettingSchemas)) {\n\t\tfor (const setting of userSettingSchemas) {\n\t\t\tconst uri = setting.url;\n\t\t\tif (typeof uri === 'string') {\n\t\t\t\tlet fullUri = uri;\n\t\t\t\tif (workspaceFolder && uri[0] === '.' && uri[1] === '/') {\n\t\t\t\t\tfullUri = Uri.joinPath(workspaceFolder.uri, uri).toString(false);\n\t\t\t\t}\n\t\t\t\tassociations.push({ fullUri, workspaceFolder: undefined, label: uri });\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tfindSetting(uri: string): ShowSchemasItem | undefined {\n\t\t\tfor (const association of associations) {\n\t\t\t\tif (association.fullUri === uri) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: association.label,\n\t\t\t\t\t\tdetail: association.workspaceFolder ? l10n.t('Configured in workspace settings') : l10n.t('Configured in user settings'),\n\t\t\t\t\t\turi: Uri.parse(association.fullUri),\n\t\t\t\t\t\tbuttons: [{ iconPath: new ThemeIcon('gear'), tooltip: l10n.t('Open Settings') }],\n\t\t\t\t\t\tbuttonCommands: [() => commands.executeCommand(association.workspaceFolder ? 'workbench.action.openWorkspaceSettingsFile' : 'workbench.action.openSettingsJson', ['json.schemas'])]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t};\n}\n\nfunction showSchemaList(input: ShowSchemasInput) {\n\n\tconst extensionSchemaAssocations = getExtensionSchemaAssociations();\n\tconst settingsSchemaAssocations = getSettingsSchemaAssociations(input.uri);\n\n\tconst extensionEntries = [];\n\tconst settingsEntries = [];\n\tconst otherEntries = [];\n\n\tfor (const schemaUri of input.schemas) {\n\t\tconst extensionEntry = extensionSchemaAssocations.findExtension(schemaUri);\n\t\tif (extensionEntry) {\n\t\t\textensionEntries.push(extensionEntry);\n\t\t\tcontinue;\n\t\t}\n\t\tconst settingsEntry = settingsSchemaAssocations.findSetting(schemaUri);\n\t\tif (settingsEntry) {\n\t\t\tsettingsEntries.push(settingsEntry);\n\t\t\tcontinue;\n\t\t}\n\t\totherEntries.push({ label: schemaUri, uri: Uri.parse(schemaUri) });\n\t}\n\n\tconst items: ShowSchemasItem[] = [...extensionEntries, ...settingsEntries, ...otherEntries];\n\tif (items.length === 0) {\n\t\titems.push({\n\t\t\tlabel: l10n.t('No schema configured for this file'),\n\t\t\tbuttons: [{ iconPath: new ThemeIcon('gear'), tooltip: l10n.t('Open Settings') }],\n\t\t\tbuttonCommands: [() => commands.executeCommand('workbench.action.openSettingsJson', ['json.schemas'])]\n\t\t});\n\t}\n\n\titems.push({ label: '', kind: QuickPickItemKind.Separator });\n\titems.push({ label: l10n.t('Learn more about JSON schema configuration...'), uri: Uri.parse('https://code.visualstudio.com/docs/languages/json#_json-schemas-and-settings') });\n\n\tconst quickPick = window.createQuickPick<ShowSchemasItem>();\n\tquickPick.placeholder = items.length ? l10n.t('Select the schema to use for {0}', input.uri) : undefined;\n\tquickPick.items = items;\n\tquickPick.show();\n\tquickPick.onDidAccept(() => {\n\t\tconst uri = quickPick.selectedItems[0].uri;\n\t\tif (uri) {\n\t\t\tcommands.executeCommand('vscode.open', uri);\n\t\t\tquickPick.dispose();\n\t\t}\n\t});\n\tquickPick.onDidTriggerItemButton(b => {\n\t\tconst index = b.item.buttons?.indexOf(b.button);\n\t\tif (index !== undefined && index >= 0 && b.item.buttonCommands && b.item.buttonCommands[index]) {\n\t\t\tb.item.buttonCommands[index]();\n\t\t}\n\t});\n}\n\nexport function createLanguageStatusItem(documentSelector: DocumentSelector, statusRequest: (uri: string) => Promise<JSONLanguageStatus>): Disposable {\n\tconst statusItem = languages.createLanguageStatusItem('json.projectStatus', documentSelector);\n\tstatusItem.name = l10n.t('JSON Validation Status');\n\tstatusItem.severity = LanguageStatusSeverity.Information;\n\n\tconst showSchemasCommand = commands.registerCommand('_json.showAssociatedSchemaList', showSchemaList);\n\n\tconst activeEditorListener = window.onDidChangeActiveTextEditor(() => {\n\t\tupdateLanguageStatus();\n\t});\n\n\tasync function updateLanguageStatus() {\n\t\tconst document = window.activeTextEditor?.document;\n\t\tif (document) {\n\t\t\ttry {\n\t\t\t\tstatusItem.text = '$(loading~spin)';\n\t\t\t\tstatusItem.detail = l10n.t('Loading JSON info');\n\t\t\t\tstatusItem.command = undefined;\n\n\t\t\t\tconst schemas = (await statusRequest(document.uri.toString())).schemas;\n\t\t\t\tstatusItem.detail = undefined;\n\t\t\t\tif (schemas.length === 0) {\n\t\t\t\t\tstatusItem.text = l10n.t('No schema validation');\n\t\t\t\t\tstatusItem.detail = l10n.t('no JSON schema configured');\n\t\t\t\t} else if (schemas.length === 1) {\n\t\t\t\t\tstatusItem.text = l10n.t('Schema validated');\n\t\t\t\t\tstatusItem.detail = l10n.t('JSON schema configured');\n\t\t\t\t} else {\n\t\t\t\t\tstatusItem.text = l10n.t('Schema validated');\n\t\t\t\t\tstatusItem.detail = l10n.t('multiple JSON schemas configured');\n\t\t\t\t}\n\t\t\t\tstatusItem.command = {\n\t\t\t\t\tcommand: '_json.showAssociatedSchemaList',\n\t\t\t\t\ttitle: l10n.t('Show Schemas'),\n\t\t\t\t\targuments: [{ schemas, uri: document.uri.toString() } satisfies ShowSchemasInput]\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\tstatusItem.text = l10n.t('Unable to compute used schemas: {0}', e.message);\n\t\t\t\tstatusItem.detail = undefined;\n\t\t\t\tstatusItem.command = undefined;\n\t\t\t}\n\t\t} else {\n\t\t\tstatusItem.text = l10n.t('Unable to compute used schemas: No document');\n\t\t\tstatusItem.detail = undefined;\n\t\t\tstatusItem.command = undefined;\n\t\t}\n\t}\n\n\tupdateLanguageStatus();\n\n\treturn Disposable.from(statusItem, activeEditorListener, showSchemasCommand);\n}\n\nexport function createLimitStatusItem(newItem: (limit: number) => Disposable) {\n\tlet statusItem: Disposable | undefined;\n\tconst activeLimits: Map<TextDocument, number> = new Map();\n\n\tconst toDispose: Disposable[] = [];\n\ttoDispose.push(window.onDidChangeActiveTextEditor(textEditor => {\n\t\tstatusItem?.dispose();\n\t\tstatusItem = undefined;\n\t\tconst doc = textEditor?.document;\n\t\tif (doc) {\n\t\t\tconst limit = activeLimits.get(doc);\n\t\t\tif (limit !== undefined) {\n\t\t\t\tstatusItem = newItem(limit);\n\t\t\t}\n\t\t}\n\t}));\n\ttoDispose.push(workspace.onDidCloseTextDocument(document => {\n\t\tactiveLimits.delete(document);\n\t}));\n\n\tfunction update(document: TextDocument, limitApplied: number | false) {\n\t\tif (limitApplied === false) {\n\t\t\tactiveLimits.delete(document);\n\t\t\tif (statusItem && document === window.activeTextEditor?.document) {\n\t\t\t\tstatusItem.dispose();\n\t\t\t\tstatusItem = undefined;\n\t\t\t}\n\t\t} else {\n\t\t\tactiveLimits.set(document, limitApplied);\n\t\t\tif (document === window.activeTextEditor?.document) {\n\t\t\t\tif (!statusItem || limitApplied !== activeLimits.get(document)) {\n\t\t\t\t\tstatusItem?.dispose();\n\t\t\t\t\tstatusItem = newItem(limitApplied);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tupdate,\n\t\tdispose() {\n\t\t\tstatusItem?.dispose();\n\t\t\ttoDispose.forEach(d => d.dispose());\n\t\t\ttoDispose.length = 0;\n\t\t\tstatusItem = undefined;\n\t\t\tactiveLimits.clear();\n\t\t}\n\t};\n}\n\nconst openSettingsCommand = 'workbench.action.openSettings';\nconst configureSettingsLabel = l10n.t('Configure');\n\nexport function createDocumentSymbolsLimitItem(documentSelector: DocumentSelector, settingId: string, limit: number): Disposable {\n\tconst statusItem = languages.createLanguageStatusItem('json.documentSymbolsStatus', documentSelector);\n\tstatusItem.name = l10n.t('JSON Outline Status');\n\tstatusItem.severity = LanguageStatusSeverity.Warning;\n\tstatusItem.text = l10n.t('Outline');\n\tstatusItem.detail = l10n.t('only {0} document symbols shown for performance reasons', limit);\n\tstatusItem.command = { command: openSettingsCommand, arguments: [settingId], title: configureSettingsLabel };\n\treturn Disposable.from(statusItem);\n}\n\n\n"
  },
  {
    "path": "extensions/json-language-features/client/src/node/jsonClientMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, ExtensionContext, LogOutputChannel, window, l10n, env, LogLevel } from 'vscode';\nimport { startClient, LanguageClientConstructor, SchemaRequestService, languageServerDescription, AsyncDisposable } from '../jsonClient';\nimport { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient } from 'vscode-languageclient/node';\n\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\nimport { xhr, XHRResponse, getErrorStatusDescription, Headers } from 'request-light';\n\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { JSONSchemaCache } from './schemaCache';\n\nlet client: AsyncDisposable | undefined;\n\n// this method is called when vs code is activated\nexport async function activate(context: ExtensionContext) {\n\tconst clientPackageJSON = await getPackageInfo(context);\n\tconst telemetry = new TelemetryReporter(clientPackageJSON.aiKey);\n\tcontext.subscriptions.push(telemetry);\n\n\tconst logOutputChannel = window.createOutputChannel(languageServerDescription, { log: true });\n\tcontext.subscriptions.push(logOutputChannel);\n\n\tconst serverMain = `./server/${clientPackageJSON.main.indexOf('/dist/') !== -1 ? 'dist' : 'out'}/node/jsonServerMain`;\n\tconst serverModule = context.asAbsolutePath(serverMain);\n\n\t// The debug options for the server\n\tconst debugOptions = { execArgv: ['--nolazy', '--inspect=' + (6000 + Math.round(Math.random() * 999))] };\n\n\t// If the extension is launch in debug mode the debug server options are use\n\t// Otherwise the run options are used\n\tconst serverOptions: ServerOptions = {\n\t\trun: { module: serverModule, transport: TransportKind.ipc },\n\t\tdebug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions }\n\t};\n\n\tconst newLanguageClient: LanguageClientConstructor = (id: string, name: string, clientOptions: LanguageClientOptions) => {\n\t\treturn new LanguageClient(id, name, serverOptions, clientOptions);\n\t};\n\n\tconst timer = {\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t};\n\n\t// pass the location of the localization bundle to the server\n\tprocess.env['VSCODE_L10N_BUNDLE_LOCATION'] = l10n.uri?.toString() ?? '';\n\n\tconst schemaRequests = await getSchemaRequestService(context, logOutputChannel);\n\n\tclient = await startClient(context, newLanguageClient, { schemaRequests, telemetry, timer, logOutputChannel });\n}\n\nexport async function deactivate(): Promise<any> {\n\tif (client) {\n\t\tawait client.dispose();\n\t\tclient = undefined;\n\t}\n}\n\ninterface IPackageInfo {\n\tname: string;\n\tversion: string;\n\taiKey: string;\n\tmain: string;\n}\n\nasync function getPackageInfo(context: ExtensionContext): Promise<IPackageInfo> {\n\tconst location = context.asAbsolutePath('./package.json');\n\ttry {\n\t\treturn JSON.parse((await fs.readFile(location)).toString());\n\t} catch (e) {\n\t\tconsole.log(`Problems reading ${location}: ${e}`);\n\t\treturn { name: '', version: '', aiKey: '', main: '' };\n\t}\n}\n\nconst retryTimeoutInHours = 2 * 24; // 2 days\n\nasync function getSchemaRequestService(context: ExtensionContext, log: LogOutputChannel): Promise<SchemaRequestService> {\n\tlet cache: JSONSchemaCache | undefined = undefined;\n\tconst globalStorage = context.globalStorageUri;\n\n\tlet clearCache: (() => Promise<string[]>) | undefined;\n\tif (globalStorage.scheme === 'file') {\n\t\tconst schemaCacheLocation = path.join(globalStorage.fsPath, 'json-schema-cache');\n\t\tawait fs.mkdir(schemaCacheLocation, { recursive: true });\n\n\t\tconst schemaCache = new JSONSchemaCache(schemaCacheLocation, context.globalState);\n\t\tlog.trace(`[json schema cache] initial state: ${JSON.stringify(schemaCache.getCacheInfo(), null, ' ')}`);\n\t\tcache = schemaCache;\n\t\tclearCache = async () => {\n\t\t\tconst cachedSchemas = await schemaCache.clearCache();\n\t\t\tlog.trace(`[json schema cache] cache cleared. Previously cached schemas: ${cachedSchemas.join(', ')}`);\n\t\t\treturn cachedSchemas;\n\t\t};\n\t}\n\n\n\tconst isXHRResponse = (error: any): error is XHRResponse => typeof error?.status === 'number';\n\n\tconst request = async (uri: string, etag?: string): Promise<string> => {\n\t\tconst headers: Headers = {\n\t\t\t'Accept-Encoding': 'gzip, deflate',\n\t\t\t'User-Agent': `${env.appName} (${env.appHost})`\n\t\t};\n\t\tif (etag) {\n\t\t\theaders['If-None-Match'] = etag;\n\t\t}\n\t\ttry {\n\t\t\tlog.trace(`[json schema cache] Requesting schema ${uri} etag ${etag}...`);\n\n\t\t\tconst response = await xhr({ url: uri, followRedirects: 5, headers });\n\t\t\tif (cache) {\n\t\t\t\tconst etag = response.headers['etag'];\n\t\t\t\tif (typeof etag === 'string') {\n\t\t\t\t\tlog.trace(`[json schema cache] Storing schema ${uri} etag ${etag} in cache`);\n\t\t\t\t\tawait cache.putSchema(uri, etag, response.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tlog.trace(`[json schema cache] Response: schema ${uri} no etag`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn response.responseText;\n\t\t} catch (error: unknown) {\n\t\t\tif (isXHRResponse(error)) {\n\t\t\t\tif (error.status === 304 && etag && cache) {\n\n\t\t\t\t\tlog.trace(`[json schema cache] Response: schema ${uri} unchanged etag ${etag}`);\n\n\t\t\t\t\tconst content = await cache.getSchema(uri, etag, true);\n\t\t\t\t\tif (content) {\n\t\t\t\t\t\tlog.trace(`[json schema cache] Get schema ${uri} etag ${etag} from cache`);\n\t\t\t\t\t\treturn content;\n\t\t\t\t\t}\n\t\t\t\t\treturn request(uri);\n\t\t\t\t}\n\n\t\t\t\tlet status = getErrorStatusDescription(error.status);\n\t\t\t\tif (status && error.responseText) {\n\t\t\t\t\tstatus = `${status}\\n${error.responseText.substring(0, 200)}`;\n\t\t\t\t}\n\t\t\t\tif (!status) {\n\t\t\t\t\tstatus = error.toString();\n\t\t\t\t}\n\t\t\t\tlog.trace(`[json schema cache] Respond schema ${uri} error ${status}`);\n\n\t\t\t\tthrow status;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t};\n\n\treturn {\n\t\tgetContent: async (uri: string) => {\n\t\t\tif (cache && /^https?:\\/\\/json\\.schemastore\\.org\\//.test(uri)) {\n\t\t\t\tconst content = await cache.getSchemaIfUpdatedSince(uri, retryTimeoutInHours);\n\t\t\t\tif (content) {\n\t\t\t\t\tif (log.logLevel === LogLevel.Trace) {\n\t\t\t\t\t\tlog.trace(`[json schema cache] Schema ${uri} from cache without request (last accessed ${cache.getLastUpdatedInHours(uri)} hours ago)`);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn content;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn request(uri, cache?.getETag(uri));\n\t\t},\n\t\tclearCache\n\t};\n}\n"
  },
  {
    "path": "extensions/json-language-features/client/src/node/schemaCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\nimport { createHash } from 'crypto';\nimport { Memento } from 'vscode';\n\ninterface CacheEntry {\n\tetag: string;\n\tfileName: string;\n\tupdateTime: number;\n}\n\ninterface CacheInfo {\n\t[schemaUri: string]: CacheEntry;\n}\n\nconst MEMENTO_KEY = 'json-schema-cache';\n\nexport class JSONSchemaCache {\n\tprivate cacheInfo: CacheInfo;\n\n\tconstructor(private readonly schemaCacheLocation: string, private readonly globalState: Memento) {\n\t\tconst infos = globalState.get<CacheInfo>(MEMENTO_KEY, {}) as CacheInfo;\n\t\tconst validated: CacheInfo = {};\n\t\tfor (const schemaUri in infos) {\n\t\t\tconst { etag, fileName, updateTime } = infos[schemaUri];\n\t\t\tif (typeof etag === 'string' && typeof fileName === 'string' && typeof updateTime === 'number') {\n\t\t\t\tvalidated[schemaUri] = { etag, fileName, updateTime };\n\t\t\t}\n\t\t}\n\t\tthis.cacheInfo = validated;\n\t}\n\n\tgetETag(schemaUri: string): string | undefined {\n\t\treturn this.cacheInfo[schemaUri]?.etag;\n\t}\n\n\tgetLastUpdatedInHours(schemaUri: string): number | undefined {\n\t\tconst updateTime = this.cacheInfo[schemaUri]?.updateTime;\n\t\tif (updateTime !== undefined) {\n\t\t\treturn (new Date().getTime() - updateTime) / 1000 / 60 / 60;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync putSchema(schemaUri: string, etag: string, schemaContent: string): Promise<void> {\n\t\ttry {\n\t\t\tconst fileName = getCacheFileName(schemaUri);\n\t\t\tawait fs.writeFile(path.join(this.schemaCacheLocation, fileName), schemaContent);\n\t\t\tconst entry: CacheEntry = { etag, fileName, updateTime: new Date().getTime() };\n\t\t\tthis.cacheInfo[schemaUri] = entry;\n\t\t} catch (e) {\n\t\t\tdelete this.cacheInfo[schemaUri];\n\t\t} finally {\n\t\t\tawait this.updateMemento();\n\t\t}\n\t}\n\n\tasync getSchemaIfUpdatedSince(schemaUri: string, expirationDurationInHours: number): Promise<string | undefined> {\n\t\tconst lastUpdatedInHours = this.getLastUpdatedInHours(schemaUri);\n\t\tif (lastUpdatedInHours !== undefined && (lastUpdatedInHours < expirationDurationInHours)) {\n\t\t\treturn this.loadSchemaFile(schemaUri, this.cacheInfo[schemaUri], false);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync getSchema(schemaUri: string, etag: string, etagValid: boolean): Promise<string | undefined> {\n\t\tconst cacheEntry = this.cacheInfo[schemaUri];\n\t\tif (cacheEntry) {\n\t\t\tif (cacheEntry.etag === etag) {\n\t\t\t\treturn this.loadSchemaFile(schemaUri, cacheEntry, etagValid);\n\t\t\t} else {\n\t\t\t\tthis.deleteSchemaFile(schemaUri, cacheEntry);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async loadSchemaFile(schemaUri: string, cacheEntry: CacheEntry, isUpdated: boolean): Promise<string | undefined> {\n\t\tconst cacheLocation = path.join(this.schemaCacheLocation, cacheEntry.fileName);\n\t\ttry {\n\t\t\tconst content = (await fs.readFile(cacheLocation)).toString();\n\t\t\tif (isUpdated) {\n\t\t\t\tcacheEntry.updateTime = new Date().getTime();\n\t\t\t}\n\t\t\treturn content;\n\t\t} catch (e) {\n\t\t\tdelete this.cacheInfo[schemaUri];\n\t\t\treturn undefined;\n\t\t} finally {\n\t\t\tawait this.updateMemento();\n\t\t}\n\t}\n\n\tprivate async deleteSchemaFile(schemaUri: string, cacheEntry: CacheEntry): Promise<void> {\n\t\tconst cacheLocation = path.join(this.schemaCacheLocation, cacheEntry.fileName);\n\t\tdelete this.cacheInfo[schemaUri];\n\t\tawait this.updateMemento();\n\t\ttry {\n\t\t\tawait fs.rm(cacheLocation);\n\t\t} catch (e) {\n\t\t\t// ignore\n\t\t}\n\t}\n\n\n\t// for debugging\n\tpublic getCacheInfo() {\n\t\treturn this.cacheInfo;\n\t}\n\n\tprivate async updateMemento() {\n\t\ttry {\n\t\t\tawait this.globalState.update(MEMENTO_KEY, this.cacheInfo);\n\t\t} catch (e) {\n\t\t\t// ignore\n\t\t}\n\t}\n\n\tpublic async clearCache(): Promise<string[]> {\n\t\tconst uris = Object.keys(this.cacheInfo);\n\t\ttry {\n\t\t\tconst files = await fs.readdir(this.schemaCacheLocation);\n\t\t\tfor (const file of files) {\n\t\t\t\ttry {\n\t\t\t\t\tawait fs.unlink(path.join(this.schemaCacheLocation, file));\n\t\t\t\t} catch (_e) {\n\t\t\t\t\t// ignore\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// ignore\n\t\t} finally {\n\n\t\t\tthis.cacheInfo = {};\n\t\t\tawait this.updateMemento();\n\t\t}\n\t\treturn uris;\n\t}\n}\nfunction getCacheFileName(uri: string): string {\n\treturn `${createHash('sha256').update(uri).digest('hex')}.schema.json`;\n}\n"
  },
  {
    "path": "extensions/json-language-features/client/src/utils/hash.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Return a hash value for an object.\n */\nexport function hash(obj: any, hashVal = 0): number {\n\tswitch (typeof obj) {\n\t\tcase 'object':\n\t\t\tif (obj === null) {\n\t\t\t\treturn numberHash(349, hashVal);\n\t\t\t} else if (Array.isArray(obj)) {\n\t\t\t\treturn arrayHash(obj, hashVal);\n\t\t\t}\n\t\t\treturn objectHash(obj, hashVal);\n\t\tcase 'string':\n\t\t\treturn stringHash(obj, hashVal);\n\t\tcase 'boolean':\n\t\t\treturn booleanHash(obj, hashVal);\n\t\tcase 'number':\n\t\t\treturn numberHash(obj, hashVal);\n\t\tcase 'undefined':\n\t\t\treturn 937 * 31;\n\t\tdefault:\n\t\t\treturn numberHash(obj, 617);\n\t}\n}\n\nfunction numberHash(val: number, initialHashVal: number): number {\n\treturn (((initialHashVal << 5) - initialHashVal) + val) | 0;  // hashVal * 31 + ch, keep as int32\n}\n\nfunction booleanHash(b: boolean, initialHashVal: number): number {\n\treturn numberHash(b ? 433 : 863, initialHashVal);\n}\n\nfunction stringHash(s: string, hashVal: number) {\n\thashVal = numberHash(149417, hashVal);\n\tfor (let i = 0, length = s.length; i < length; i++) {\n\t\thashVal = numberHash(s.charCodeAt(i), hashVal);\n\t}\n\treturn hashVal;\n}\n\nfunction arrayHash(arr: any[], initialHashVal: number): number {\n\tinitialHashVal = numberHash(104579, initialHashVal);\n\treturn arr.reduce((hashVal, item) => hash(item, hashVal), initialHashVal);\n}\n\nfunction objectHash(obj: any, initialHashVal: number): number {\n\tinitialHashVal = numberHash(181387, initialHashVal);\n\treturn Object.keys(obj).sort().reduce((hashVal, key) => {\n\t\thashVal = stringHash(key, hashVal);\n\t\treturn hash(obj[key], hashVal);\n\t}, initialHashVal);\n}\n"
  },
  {
    "path": "extensions/json-language-features/client/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"lib\": [\n\t\t\t\"webworker\"\n\t\t],\n\t\t\"module\": \"Node16\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../../src/vscode-dts/vscode.proposed.languageStatus.d.ts\",\n\t\t\"../../../src/vscode-dts/vscode.proposed.extensionsAny.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/json-language-features/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\nconst path = require('path');\n\nmodule.exports = withBrowserDefaults({\n\ttarget: 'webworker',\n\tcontext: path.join(__dirname, 'client'),\n\tentry: {\n\t\textension: './src/browser/jsonClientMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'jsonClientMain.js',\n\t\tpath: path.join(__dirname, 'client', 'dist', 'browser')\n\t}\n});\n"
  },
  {
    "path": "extensions/json-language-features/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\nconst path = require('path');\n\nconst config = withDefaults({\n\tcontext: path.join(__dirname, 'client'),\n\tentry: {\n\t\textension: './src/node/jsonClientMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'jsonClientMain.js',\n\t\tpath: path.join(__dirname, 'client', 'dist', 'node')\n\t}\n});\n\n\nmodule.exports = config;\n"
  },
  {
    "path": "extensions/json-language-features/package.json",
    "content": "{\n  \"name\": \"json-language-features\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"engines\": {\n    \"vscode\": \"^1.77.0\"\n  },\n  \"enabledApiProposals\": [\n    \"extensionsAny\"\n  ],\n  \"icon\": \"icons/json.png\",\n  \"activationEvents\": [\n    \"onLanguage:json\",\n    \"onLanguage:jsonc\",\n    \"onLanguage:snippets\",\n    \"onCommand:json.validate\"\n  ],\n  \"main\": \"./client/out/node/jsonClientMain\",\n  \"browser\": \"./client/dist/browser/jsonClientMain\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:json-language-features-client compile-extension:json-language-features-server\",\n    \"watch\": \"npx gulp watch-extension:json-language-features-client watch-extension:json-language-features-server\",\n    \"install-client-next\": \"npm install vscode-languageclient@next\"\n  },\n  \"categories\": [\n    \"Programming Languages\"\n  ],\n  \"contributes\": {\n    \"configuration\": {\n      \"id\": \"json\",\n      \"order\": 20,\n      \"type\": \"object\",\n      \"title\": \"JSON\",\n      \"properties\": {\n        \"json.schemas\": {\n          \"type\": \"array\",\n          \"scope\": \"resource\",\n          \"description\": \"%json.schemas.desc%\",\n          \"items\": {\n            \"type\": \"object\",\n            \"default\": {\n              \"fileMatch\": [\n                \"/myfile\"\n              ],\n              \"url\": \"schemaURL\"\n            },\n            \"properties\": {\n              \"url\": {\n                \"type\": \"string\",\n                \"default\": \"/user.schema.json\",\n                \"description\": \"%json.schemas.url.desc%\"\n              },\n              \"fileMatch\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\",\n                  \"default\": \"MyFile.json\",\n                  \"description\": \"%json.schemas.fileMatch.item.desc%\"\n                },\n                \"minItems\": 1,\n                \"description\": \"%json.schemas.fileMatch.desc%\"\n              },\n              \"schema\": {\n                \"$ref\": \"http://json-schema.org/draft-07/schema#\",\n                \"description\": \"%json.schemas.schema.desc%\"\n              }\n            }\n          }\n        },\n        \"json.validate.enable\": {\n          \"type\": \"boolean\",\n          \"scope\": \"window\",\n          \"default\": true,\n          \"description\": \"%json.validate.enable.desc%\"\n        },\n        \"json.format.enable\": {\n          \"type\": \"boolean\",\n          \"scope\": \"window\",\n          \"default\": true,\n          \"description\": \"%json.format.enable.desc%\"\n        },\n        \"json.format.keepLines\": {\n          \"type\": \"boolean\",\n          \"scope\": \"window\",\n          \"default\": false,\n          \"description\": \"%json.format.keepLines.desc%\"\n        },\n        \"json.trace.server\": {\n          \"type\": \"string\",\n          \"scope\": \"window\",\n          \"enum\": [\n            \"off\",\n            \"messages\",\n            \"verbose\"\n          ],\n          \"default\": \"off\",\n          \"description\": \"%json.tracing.desc%\"\n        },\n        \"json.colorDecorators.enable\": {\n          \"type\": \"boolean\",\n          \"scope\": \"window\",\n          \"default\": true,\n          \"description\": \"%json.colorDecorators.enable.desc%\",\n          \"deprecationMessage\": \"%json.colorDecorators.enable.deprecationMessage%\"\n        },\n        \"json.maxItemsComputed\": {\n          \"type\": \"number\",\n          \"default\": 5000,\n          \"description\": \"%json.maxItemsComputed.desc%\"\n        },\n        \"json.schemaDownload.enable\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%json.enableSchemaDownload.desc%\",\n          \"tags\": [\n            \"usesOnlineServices\"\n          ]\n        }\n      }\n    },\n    \"configurationDefaults\": {\n      \"[json]\": {\n        \"editor.quickSuggestions\": {\n          \"strings\": true\n        },\n        \"editor.suggest.insertMode\": \"replace\"\n      },\n      \"[jsonc]\": {\n        \"editor.quickSuggestions\": {\n          \"strings\": true\n        },\n        \"editor.suggest.insertMode\": \"replace\"\n      },\n      \"[snippets]\": {\n        \"editor.quickSuggestions\": {\n          \"strings\": true\n        },\n        \"editor.suggest.insertMode\": \"replace\"\n      }\n    },\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"*.schema.json\",\n        \"url\": \"http://json-schema.org/draft-07/schema#\"\n      }\n    ],\n    \"commands\": [\n      {\n        \"command\": \"json.clearCache\",\n        \"title\": \"%json.command.clearCache%\",\n        \"category\": \"JSON\"\n      },\n      {\n        \"command\": \"json.sort\",\n        \"title\": \"%json.command.sort%\",\n        \"category\": \"JSON\"\n      }\n    ]\n  },\n  \"dependencies\": {\n    \"@vscode/extension-telemetry\": \"^0.9.8\",\n    \"request-light\": \"^0.8.0\",\n    \"vscode-languageclient\": \"^10.0.0-next.14\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/json-language-features/package.nls.json",
    "content": "{\n\t\"displayName\": \"JSON Language Features\",\n\t\"description\": \"Provides rich language support for JSON files.\",\n\t\"json.schemas.desc\": \"Associate schemas to JSON files in the current project.\",\n\t\"json.schemas.url.desc\": \"A URL or absolute file path to a schema. Can be a relative path (starting with './') in workspace and workspace folder settings.\",\n\t\"json.schemas.fileMatch.desc\": \"An array of file patterns to match against when resolving JSON files to schemas. `*` and '**' can be used as a wildcard. Exclusion patterns can also be defined and start with '!'. A file matches when there is at least one matching pattern and the last matching pattern is not an exclusion pattern.\",\n\t\"json.schemas.fileMatch.item.desc\": \"A file pattern that can contain '*' and '**' to match against when resolving JSON files to schemas. When beginning with '!', it defines an exclusion pattern.\",\n\t\"json.schemas.schema.desc\": \"The schema definition for the given URL. The schema only needs to be provided to avoid accesses to the schema URL.\",\n\t\"json.format.enable.desc\": \"Enable/disable default JSON formatter\",\n\t\"json.format.keepLines.desc\" : \"Keep all existing new lines when formatting.\",\n\t\"json.validate.enable.desc\": \"Enable/disable JSON validation.\",\n\t\"json.tracing.desc\": \"Traces the communication between VS Code and the JSON language server.\",\n\t\"json.colorDecorators.enable.desc\": \"Enables or disables color decorators\",\n\t\"json.colorDecorators.enable.deprecationMessage\": \"The setting `json.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.\",\n\t\"json.schemaResolutionErrorMessage\": \"Unable to resolve schema.\",\n\t\"json.clickToRetry\": \"Click to retry.\",\n\t\"json.maxItemsComputed.desc\": \"The maximum number of outline symbols and folding regions computed (limited for performance reasons).\",\n\t\"json.maxItemsExceededInformation.desc\": \"Show notification when exceeding the maximum number of outline symbols and folding regions.\",\n\t\"json.enableSchemaDownload.desc\": \"When enabled, JSON schemas can be fetched from http and https locations.\",\n\t\"json.command.clearCache\": \"Clear Schema Cache\",\n\t\"json.command.sort\": \"Sort Document\"\n}\n"
  },
  {
    "path": "extensions/json-language-features/server/.npmignore",
    "content": ".vscode/\nout/test/\nout/**/*.js.map\nsrc/\ntest/\ntsconfig.json\n.gitignore\npackage-lock.json\nextension.webpack.config.js\nvscode-json-languageserver-*.tgz\n"
  },
  {
    "path": "extensions/json-language-features/server/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/json-language-features/server/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.1.0\",\n\t// List of configurations. Add new configurations or edit existing ones.\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Attach\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"attach\",\n\t\t\t\"port\": 6004,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*js\"],\n\t\t\t\"preLaunchTask\": \"npm: compile\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Unit Tests\",\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"program\": \"${workspaceFolder}/../../../node_modules/mocha/bin/_mocha\",\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"args\": [\n\t\t\t\t\"--timeout\",\n\t\t\t\t\"999999\",\n\t\t\t\t\"--colors\"\n\t\t\t],\n\t\t\t\"cwd\": \"${workspaceFolder}\",\n\t\t\t\"runtimeExecutable\": null,\n\t\t\t\"runtimeArgs\": [],\n\t\t\t\"env\": {},\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/out/**/*js\"],\n\t\t\t\"preLaunchTask\": \"npm: compile\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/json-language-features/server/.vscode/tasks.json",
    "content": "// See https://go.microsoft.com/fwlink/?LinkId=733558\n// for the documentation about the tasks.json format\n{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"compile\",\n\t\t\t\"problemMatcher\": \"$tsc-watch\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\"\n\t\t\t},\n\t\t\t\"group\": {\n\t\t\t\t\"kind\": \"build\",\n\t\t\t\t\"isDefault\": true\n\t\t\t}\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/json-language-features/server/README.md",
    "content": "# VSCode JSON Language Server\n\n[![NPM Version](https://img.shields.io/npm/v/vscode-json-languageserver.svg)](https://npmjs.org/package/vscode-json-languageserver)\n[![NPM Downloads](https://img.shields.io/npm/dm/vscode-json-languageserver.svg)](https://npmjs.org/package/vscode-json-languageserver)\n[![NPM Version](https://img.shields.io/npm/l/vscode-json-languageserver.svg)](https://npmjs.org/package/vscode-json-languageserver)\n\nThe JSON Language server provides language-specific smarts for editing, validating and understanding JSON documents. It runs as a separate executable and implements the [language server protocol](https://microsoft.github.io/language-server-protocol/overview) to be connected by any code editor or IDE.\n\n## Capabilities\n\n### Server capabilities\n\nThe JSON language server supports requests on documents of language id `json` and `jsonc`.\n\n- `json` documents are parsed and validated following the [JSON specification](https://tools.ietf.org/html/rfc7159).\n- `jsonc` documents additionally accept single line (`//`) and multi-line comments (`/* ... */`). JSONC is a VSCode specific file format, intended for VSCode configuration files, without any aspirations to define a new common file format.\n\nThe server implements the following capabilities of the language server protocol:\n\n- [Code completion](https://microsoft.github.io/language-server-protocol/specification#textDocument_completion) for JSON properties and values based on the document's [JSON schema](http://json-schema.org/) or based on existing properties and values used at other places in the document. JSON schemas are configured through the server configuration options.\n- [Hover](https://microsoft.github.io/language-server-protocol/specification#textDocument_hover) for values based on descriptions in the document's [JSON schema](http://json-schema.org/).\n- [Document Symbols](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentSymbol) for quick navigation to properties in the document.\n- [Document Colors](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentColor) for showing color decorators on values representing colors and [Color Presentation](https://microsoft.github.io/language-server-protocol/specification#textDocument_colorPresentation) for color presentation information to support color pickers. The location of colors is defined by the document's [JSON schema](http://json-schema.org/). All values marked with `\"format\": \"color-hex\"` (VSCode specific, non-standard JSON Schema extension) are considered color values. The supported color formats are `#rgb[a]` and `#rrggbb[aa]`.\n- [Code Formatting](https://microsoft.github.io/language-server-protocol/specification#textDocument_rangeFormatting) supporting ranges and formatting the whole document.\n- [Folding Ranges](https://microsoft.github.io/language-server-protocol/specification#textDocument_foldingRange) for all folding ranges in the document.\n- Semantic Selection for semantic selection for one or multiple cursor positions.\n- [Goto Definition](https://microsoft.github.io/language-server-protocol/specification#textDocument_definition) for $ref references in JSON schemas\n- [Diagnostics (Validation)](https://microsoft.github.io/language-server-protocol/specification#textDocument_publishDiagnostics) are pushed for all open documents\n  - syntax errors\n  - structural validation based on the document's [JSON schema](http://json-schema.org/).\n\nIn order to load JSON schemas, the JSON server uses NodeJS `http` and `fs` modules. For all other features, the JSON server only relies on the documents and settings provided by the client through the LSP.\n\n### Client requirements\n\nThe JSON language server expects the client to only send requests and notifications for documents of language id `json` and `jsonc`.\n\nThe JSON language server has the following dependencies on the client's capabilities:\n\n- Code completion requires that the client capability has *snippetSupport*. If not supported by the client, the server will not offer the completion capability.\n- Formatting support requires the client to support *dynamicRegistration* for *rangeFormatting*. If not supported by the client, the server will not offer the format capability.\n\n## Configuration\n\n### Initialization options\n\nThe client can send the following initialization options to the server:\n\n- `provideFormatter: boolean | undefined`. If defined, the value defines whether the server provides the `documentRangeFormattingProvider` capability on initialization. If undefined, the setting `json.format.enable` is used to determine whether formatting is provided. The formatter will then be registered through dynamic registration. If the client does not support dynamic registration, no formatter will be available.\n- `handledSchemaProtocols`: The URI schemas handles by the server. See section `Schema configuration` below.\n- `customCapabilities`: Additional non-LSP client capabilities:\n  - `rangeFormatting: { editLimit: x } }`: For performance reasons, limit the number of edits returned by the range formatter to `x`.\n\n### Settings\n\nClients may send a `workspace/didChangeConfiguration` notification to notify the server of settings changes.\nThe server supports the following settings:\n\n- http\n  - `proxy`: The URL of the proxy server to use when fetching schema. When undefined or empty, no proxy is used.\n  - `proxyStrictSSL`: Whether the proxy server certificate should be verified against the list of supplied CAs.\n\n- json\n  - `format`\n    - `enable`: Whether the server should register the formatting support. This option is only applicable if the client supports *dynamicRegistration* for *rangeFormatting* and `initializationOptions.provideFormatter` is not defined.\n  - `validate`\n    - `enable`: Whether the server should validate. Defaults to `true` if not set.\n  - `schemas`: Configures association of file names to schema URL or schemas and/or associations of schema URL to schema content.\n    - `fileMatch`: an array of file names or paths (separated by `/`). `*` can be used as a wildcard. Exclusion patterns can also be defined and start with '!'. A file matches when there is at least one matching pattern and the last matching pattern is not an exclusion pattern.\n    - `folderUri`: If provided, the association is only used if the document is located in the given folder (directly or in a subfolder)\n    - `url`: The URL of the schema, optional when also a schema is provided.\n    - `schema`: The schema content, optional\n  - `resultLimit`: The max number of color decorators and outline symbols to be computed (for performance reasons)\n  - `jsonFoldingLimit`: The max number of folding ranges to be computed for json documents (for performance reasons)\n  - `jsoncFoldingLimit`: The max number of folding ranges to be computed for jsonc documents (for performance reasons)\n\n```json\n    {\n        \"http\": {\n            \"proxy\": \"\",\n            \"proxyStrictSSL\": true\n        },\n        \"json\": {\n            \"format\": {\n                \"enable\": true\n            },\n            \"schemas\": [\n                {\n                    \"fileMatch\": [\n                        \"foo.json\",\n                        \"*.superfoo.json\"\n                    ],\n                    \"url\": \"http://json.schemastore.org/foo\",\n                    \"schema\": {\n                        \"type\": \"array\"\n                    }\n                }\n            ]\n        }\n    }\n```\n\n### Schema configuration and custom schema content delivery\n\n[JSON schemas](http://json-schema.org/) are essential for code assist, hovers, color decorators to work and are required for structural validation.\n\nTo find the schema for a given JSON document, the server uses the following mechanisms:\n\n- JSON documents can define the schema URL using a `$schema` property\n- The settings define a schema association based on the documents URL. Settings can either associate a schema URL to a file or path pattern, and they can directly provide a schema.\n- Additionally, schema associations can also be provided by a custom 'schemaAssociations' configuration call.\n\nSchemas are identified by URLs. To load the content of a schema, the JSON language server either tries to load from that URI or path itself or delegates to the client.\n\nThe `initializationOptions.handledSchemaProtocols` initialization option defines which URLs are handled by the server. Requests for all other URIs are sent to the client.\n\n`handledSchemaProtocols` is part of the initialization options and can't be changed while the server is running.\n\n```ts\nlet clientOptions: LanguageClientOptions = {\n  initializationOptions: {\n   handledSchemaProtocols: ['file'] // language server should only try to load file URLs\n  }\n        ...\n}\n```\n\nIf `handledSchemaProtocols` is not set, the JSON language server will load the following URLs itself:\n\n- `http`, `https`: Loaded using NodeJS's HTTP support. Proxies can be configured through the settings.\n- `file`: Loaded using NodeJS's `fs` support.\n\n#### Schema content request\n\nRequests for schemas with URLs not handled by the server are forwarded to the client through an LSP request. This request is a JSON language server-specific, non-standardized, extension to the LSP.\n\nRequest:\n\n- method: 'vscode/content'\n- params: `string` - The schema URL to request.\n- response: `string` - The content of the schema with the given URL\n\n#### Schema content change notification\n\nWhen the client is aware that a schema content has changed, it will notify the server through a notification. This notification is a JSON language server-specific, non-standardized, extension to the LSP.\nThe server will, as a response, clear the schema content from the cache and reload the schema content when required again.\n\n#### Schema associations notification\n\nIn addition to the settings, schemas associations can also be provided through a notification from the client to the server. This notification is a JSON language server-specific, non-standardized, extension to the LSP.\n\nNotification:\n\n- method: 'json/schemaAssociations'\n- params: `ISchemaAssociations` or `ISchemaAssociation[]` defined as follows\n\n```ts\ninterface ISchemaAssociations {\n  /**\n   * An object where:\n   *  - keys are file names or file paths (using `/` as path separator). `*` can be used as a wildcard.\n   *  - values are an arrays of schema URIs\n   */\n  [pattern: string]: string[];\n}\n\ninterface ISchemaAssociation {\n  /**\n   * The URI of the schema, which is also the identifier of the schema.\n   */\n  uri: string;\n\n  /**\n   * A list of file path patterns that are associated to the schema. The '*' wildcard can be used. Exclusion patterns starting with '!'.\n   * For example '*.schema.json', 'package.json', '!foo*.schema.json'.\n   * A match succeeds when there is at least one pattern matching and last matching pattern does not start with '!'.\n   */\n  fileMatch: string[];\n  /**\n   * If provided, the association is only used if the validated document is located in the given folder (directly or in a subfolder)\n   */\n  folderUri?: string;\n  /*\n   * The schema for the given URI.\n   * If no schema is provided, the schema will be fetched with the schema request service (if available).\n   */\n  schema?: JSONSchema;\n}\n\n```\n\n`ISchemaAssociations`\n\n- keys: a file names or file path (separated by `/`). `*` can be used as a wildcard.\n- values: An array of schema URLs\n\nNotification:\n\n- method: 'json/schemaContent'\n- params: `string` the URL of the schema that has changed.\n\n### Item Limit\n\nIf the setting `resultLimit` is set, the JSON language server will limit the number of color symbols and document symbols computed.\nIf the setting `jsonFoldingLimit` or `jsoncFoldingLimit` is set, the JSON language server will limit the number of folding ranges computed.\n\n## Try\n\nThe JSON language server is shipped with [Visual Studio Code](https://code.visualstudio.com/) as part of the built-in VSCode extension `json-language-features`. The server is started when the first JSON file is opened. The [VSCode JSON documentation](https://code.visualstudio.com/docs/languages/json) for detailed information on the user experience and has more information on how to configure the language support.\n\n## Integrate\n\nIf you plan to integrate the JSON language server into an editor and IDE, check out [this page](https://microsoft.github.io/language-server-protocol/implementors/tools/) if there's already an LSP client integration available.\n\nYou can also launch the language server as a command and connect to it.\nFor that, install the `vscode-json-languageserver` npm module:\n\n`npm install -g vscode-json-languageserver`\n\nStart the language server with the `vscode-json-languageserver` command. Use a command line argument to specify the preferred communication channel:\n\n```\nvscode-json-languageserver --node-ipc\nvscode-json-languageserver --stdio\nvscode-json-languageserver --socket=<port>\n```\n\nTo connect to the server from NodeJS, see Remy Suen's great write-up on [how to communicate with the server](https://github.com/rcjsuen/dockerfile-language-server-nodejs#communicating-with-the-server) through the available communication channels.\n\n## Participate\n\nThe source code of the JSON language server can be found in the [VSCode repository](https://github.com/microsoft/vscode) at [extensions/json-language-features/server](https://github.com/microsoft/vscode/tree/master/extensions/json-language-features/server).\n\nFile issues and pull requests in the [VSCode GitHub Issues](https://github.com/microsoft/vscode/issues). See the document [How to Contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute) on how to build and run from source.\n\nMost of the functionality of the server is located in libraries:\n\n- [jsonc-parser](https://github.com/microsoft/node-jsonc-parser) contains the JSON parser and scanner.\n- [vscode-json-languageservice](https://github.com/microsoft/vscode-json-languageservice) contains the implementation of all features as a re-usable library.\n- [vscode-languageserver-node](https://github.com/microsoft/vscode-languageserver-node) contains the implementation of language server for NodeJS.\n\nHelp on any of these projects is very welcome.\n\n## Code of Conduct\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n## License\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the [MIT](https://github.com/microsoft/vscode/blob/master/LICENSE.txt) License.\n"
  },
  {
    "path": "extensions/json-language-features/server/bin/vscode-json-languageserver",
    "content": "#!/usr/bin/env node\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nrequire('../out/node/jsonServerMain');\n"
  },
  {
    "path": "extensions/json-language-features/server/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../../shared.webpack.config').browser;\nconst path = require('path');\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/browser/jsonServerWorkerMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'jsonServerMain.js',\n\t\tpath: path.join(__dirname, 'dist', 'browser'),\n\t\tlibraryTarget: 'var',\n\t\tlibrary: 'serverExportVar'\n\t}\n});\n"
  },
  {
    "path": "extensions/json-language-features/server/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../../shared.webpack.config');\nconst path = require('path');\n\nconst config = withDefaults({\n\tcontext: path.join(__dirname),\n\tentry: {\n\t\textension: './src/node/jsonServerNodeMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'jsonServerMain.js',\n\t\tpath: path.join(__dirname, 'dist', 'node'),\n\t}\n});\n\nmodule.exports = config;\n"
  },
  {
    "path": "extensions/json-language-features/server/package.json",
    "content": "{\n  \"name\": \"vscode-json-languageserver\",\n  \"description\": \"JSON language server\",\n  \"version\": \"1.3.4\",\n  \"author\": \"Microsoft Corporation\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \"*\"\n  },\n  \"bin\": {\n    \"vscode-json-languageserver\": \"./bin/vscode-json-languageserver\"\n  },\n  \"main\": \"./out/node/jsonServerMain\",\n  \"dependencies\": {\n    \"@vscode/l10n\": \"^0.0.18\",\n    \"jsonc-parser\": \"^3.3.1\",\n    \"request-light\": \"^0.8.0\",\n    \"vscode-json-languageservice\": \"^5.4.4\",\n    \"vscode-languageserver\": \"^10.0.0-next.12\",\n    \"vscode-uri\": \"^3.0.8\"\n  },\n  \"devDependencies\": {\n    \"@types/mocha\": \"^9.1.1\",\n    \"@types/node\": \"20.x\"\n  },\n  \"scripts\": {\n    \"prepublishOnly\": \"npm run clean && npm run compile\",\n    \"compile\": \"npx gulp compile-extension:json-language-features-server\",\n    \"watch\": \"npx gulp watch-extension:json-language-features-server\",\n    \"clean\": \"../../../node_modules/.bin/rimraf out\",\n    \"install-service-next\": \"npm install vscode-json-languageservice\",\n    \"install-service-latest\": \"npm install vscode-json-languageservice\",\n    \"install-service-local\": \"npm link vscode-json-languageservice\",\n    \"install-server-next\": \"npm install vscode-languageserver@next\",\n    \"install-server-local\": \"npm link vscode-languageserver-server\",\n    \"version\": \"git commit -m \\\"JSON Language Server $npm_package_version\\\" package.json\"\n  }\n}\n"
  },
  {
    "path": "extensions/json-language-features/server/src/browser/jsonServerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createConnection, BrowserMessageReader, BrowserMessageWriter, Disposable } from 'vscode-languageserver/browser';\nimport { RuntimeEnvironment, startServer } from '../jsonServer';\n\n\nconst messageReader = new BrowserMessageReader(self);\nconst messageWriter = new BrowserMessageWriter(self);\n\nconst connection = createConnection(messageReader, messageWriter);\n\nconsole.log = connection.console.log.bind(connection.console);\nconsole.error = connection.console.error.bind(connection.console);\n\nconst runtime: RuntimeEnvironment = {\n\ttimer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, 0, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t},\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t}\n};\n\nstartServer(connection, runtime);\n"
  },
  {
    "path": "extensions/json-language-features/server/src/browser/jsonServerWorkerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as l10n from '@vscode/l10n';\n\nlet initialized = false;\nconst pendingMessages: any[] = [];\nconst messageHandler = async (e: any) => {\n\tif (!initialized) {\n\t\tconst l10nLog: string[] = [];\n\t\tinitialized = true;\n\t\tconst i10lLocation = e.data.i10lLocation;\n\t\tif (i10lLocation) {\n\t\t\ttry {\n\t\t\t\tawait l10n.config({ uri: i10lLocation });\n\t\t\t\tl10nLog.push(`l10n: Configured to ${i10lLocation.toString()}.`);\n\t\t\t} catch (e) {\n\t\t\t\tl10nLog.push(`l10n: Problems loading ${i10lLocation.toString()} : ${e}.`);\n\t\t\t}\n\t\t} else {\n\t\t\tl10nLog.push(`l10n: No bundle configured.`);\n\t\t}\n\t\tawait import('./jsonServerMain.js');\n\t\tif (self.onmessage !== messageHandler) {\n\t\t\tpendingMessages.forEach(msg => self.onmessage?.(msg));\n\t\t\tpendingMessages.length = 0;\n\t\t}\n\t\tl10nLog.forEach(console.log);\n\t} else {\n\t\tpendingMessages.push(e);\n\t}\n};\nself.onmessage = messageHandler;\n"
  },
  {
    "path": "extensions/json-language-features/server/src/jsonServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n\tConnection,\n\tTextDocuments, InitializeParams, InitializeResult, NotificationType, RequestType,\n\tDocumentRangeFormattingRequest, Disposable, ServerCapabilities, TextDocumentSyncKind, TextEdit, DocumentFormattingRequest, TextDocumentIdentifier, FormattingOptions, Diagnostic, CodeAction, CodeActionKind\n} from 'vscode-languageserver';\n\nimport { runSafe, runSafeAsync } from './utils/runner';\nimport { DiagnosticsSupport, registerDiagnosticsPullSupport, registerDiagnosticsPushSupport } from './utils/validation';\nimport { TextDocument, JSONDocument, JSONSchema, getLanguageService, DocumentLanguageSettings, SchemaConfiguration, ClientCapabilities, Range, Position, SortOptions } from 'vscode-json-languageservice';\nimport { getLanguageModelCache } from './languageModelCache';\nimport { Utils, URI } from 'vscode-uri';\nimport * as l10n from '@vscode/l10n';\n\ntype ISchemaAssociations = Record<string, string[]>;\n\ntype JSONLanguageStatus = { schemas: string[] };\n\nnamespace SchemaAssociationNotification {\n\texport const type: NotificationType<ISchemaAssociations | SchemaConfiguration[]> = new NotificationType('json/schemaAssociations');\n}\n\nnamespace VSCodeContentRequest {\n\texport const type: RequestType<string, string, any> = new RequestType('vscode/content');\n}\n\nnamespace SchemaContentChangeNotification {\n\texport const type: NotificationType<string | string[]> = new NotificationType('json/schemaContent');\n}\n\nnamespace ForceValidateRequest {\n\texport const type: RequestType<string, Diagnostic[], any> = new RequestType('json/validate');\n}\n\nnamespace LanguageStatusRequest {\n\texport const type: RequestType<string, JSONLanguageStatus, any> = new RequestType('json/languageStatus');\n}\n\nnamespace ValidateContentRequest {\n\texport const type: RequestType<{ schemaUri: string; content: string }, Diagnostic[], any> = new RequestType('json/validateContent');\n}\n\nexport interface DocumentSortingParams {\n\t/**\n\t * The uri of the document to sort.\n\t */\n\turi: string;\n\t/**\n\t * The sort options\n\t */\n\toptions: SortOptions;\n}\n\nnamespace DocumentSortingRequest {\n\texport const type: RequestType<DocumentSortingParams, TextEdit[], any> = new RequestType('json/sort');\n}\n\nconst workspaceContext = {\n\tresolveRelativePath: (relativePath: string, resource: string) => {\n\t\tconst base = resource.substring(0, resource.lastIndexOf('/') + 1);\n\t\treturn Utils.resolvePath(URI.parse(base), relativePath).toString();\n\t}\n};\n\nexport interface RequestService {\n\tgetContent(uri: string): Promise<string>;\n}\n\nexport interface RuntimeEnvironment {\n\tfile?: RequestService;\n\thttp?: RequestService;\n\tconfigureHttpRequests?(proxy: string | undefined, strictSSL: boolean): void;\n\treadonly timer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable;\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable;\n\t};\n}\n\nexport function startServer(connection: Connection, runtime: RuntimeEnvironment) {\n\n\tfunction getSchemaRequestService(handledSchemas: string[] = ['https', 'http', 'file']) {\n\t\tconst builtInHandlers: { [protocol: string]: RequestService | undefined } = {};\n\t\tfor (const protocol of handledSchemas) {\n\t\t\tif (protocol === 'file') {\n\t\t\t\tbuiltInHandlers[protocol] = runtime.file;\n\t\t\t} else if (protocol === 'http' || protocol === 'https') {\n\t\t\t\tbuiltInHandlers[protocol] = runtime.http;\n\t\t\t}\n\t\t}\n\t\treturn (uri: string): Thenable<string> => {\n\t\t\tconst protocol = uri.substr(0, uri.indexOf(':'));\n\n\t\t\tconst builtInHandler = builtInHandlers[protocol];\n\t\t\tif (builtInHandler) {\n\t\t\t\treturn builtInHandler.getContent(uri);\n\t\t\t}\n\t\t\treturn connection.sendRequest(VSCodeContentRequest.type, uri).then(responseText => {\n\t\t\t\treturn responseText;\n\t\t\t}, error => {\n\t\t\t\treturn Promise.reject(error.message);\n\t\t\t});\n\t\t};\n\t}\n\n\t// create the JSON language service\n\tlet languageService = getLanguageService({\n\t\tworkspaceContext,\n\t\tcontributions: [],\n\t\tclientCapabilities: ClientCapabilities.LATEST\n\t});\n\n\t// Create a text document manager.\n\tconst documents = new TextDocuments(TextDocument);\n\n\t// Make the text document manager listen on the connection\n\t// for open, change and close text document events\n\tdocuments.listen(connection);\n\n\tlet clientSnippetSupport = false;\n\tlet dynamicFormatterRegistration = false;\n\tlet hierarchicalDocumentSymbolSupport = false;\n\n\tlet foldingRangeLimitDefault = Number.MAX_VALUE;\n\tlet resultLimit = Number.MAX_VALUE;\n\tlet jsonFoldingRangeLimit = Number.MAX_VALUE;\n\tlet jsoncFoldingRangeLimit = Number.MAX_VALUE;\n\tlet jsonColorDecoratorLimit = Number.MAX_VALUE;\n\tlet jsoncColorDecoratorLimit = Number.MAX_VALUE;\n\n\tlet formatterMaxNumberOfEdits = Number.MAX_VALUE;\n\tlet diagnosticsSupport: DiagnosticsSupport | undefined;\n\n\n\t// After the server has started the client sends an initialize request. The server receives\n\t// in the passed params the rootPath of the workspace plus the client capabilities.\n\tconnection.onInitialize((params: InitializeParams): InitializeResult => {\n\n\t\tconst initializationOptions = params.initializationOptions as any || {};\n\n\t\tconst handledProtocols = initializationOptions?.handledSchemaProtocols;\n\n\t\tlanguageService = getLanguageService({\n\t\t\tschemaRequestService: getSchemaRequestService(handledProtocols),\n\t\t\tworkspaceContext,\n\t\t\tcontributions: [],\n\t\t\tclientCapabilities: params.capabilities\n\t\t});\n\n\t\tfunction getClientCapability<T>(name: string, def: T) {\n\t\t\tconst keys = name.split('.');\n\t\t\tlet c: any = params.capabilities;\n\t\t\tfor (let i = 0; c && i < keys.length; i++) {\n\t\t\t\tif (!c.hasOwnProperty(keys[i])) {\n\t\t\t\t\treturn def;\n\t\t\t\t}\n\t\t\t\tc = c[keys[i]];\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t\tclientSnippetSupport = getClientCapability('textDocument.completion.completionItem.snippetSupport', false);\n\t\tdynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && (typeof initializationOptions.provideFormatter !== 'boolean');\n\t\tfoldingRangeLimitDefault = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);\n\t\thierarchicalDocumentSymbolSupport = getClientCapability('textDocument.documentSymbol.hierarchicalDocumentSymbolSupport', false);\n\t\tformatterMaxNumberOfEdits = initializationOptions.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;\n\n\t\tconst supportsDiagnosticPull = getClientCapability('textDocument.diagnostic', undefined);\n\t\tif (supportsDiagnosticPull === undefined) {\n\t\t\tdiagnosticsSupport = registerDiagnosticsPushSupport(documents, connection, runtime, validateTextDocument);\n\t\t} else {\n\t\t\tdiagnosticsSupport = registerDiagnosticsPullSupport(documents, connection, runtime, validateTextDocument);\n\t\t}\n\n\t\tconst capabilities: ServerCapabilities = {\n\t\t\ttextDocumentSync: TextDocumentSyncKind.Incremental,\n\t\t\tcompletionProvider: clientSnippetSupport ? {\n\t\t\t\tresolveProvider: false, // turn off resolving as the current language service doesn't do anything on resolve. Also fixes #91747\n\t\t\t\ttriggerCharacters: ['\"', ':']\n\t\t\t} : undefined,\n\t\t\thoverProvider: true,\n\t\t\tdocumentSymbolProvider: true,\n\t\t\tdocumentRangeFormattingProvider: initializationOptions.provideFormatter === true,\n\t\t\tdocumentFormattingProvider: initializationOptions.provideFormatter === true,\n\t\t\tcolorProvider: {},\n\t\t\tfoldingRangeProvider: true,\n\t\t\tselectionRangeProvider: true,\n\t\t\tdocumentLinkProvider: {},\n\t\t\tdiagnosticProvider: {\n\t\t\t\tdocumentSelector: null,\n\t\t\t\tinterFileDependencies: false,\n\t\t\t\tworkspaceDiagnostics: false\n\t\t\t},\n\t\t\tcodeActionProvider: true\n\t\t};\n\n\t\treturn { capabilities };\n\t});\n\n\n\n\t// The settings interface describes the server relevant settings part\n\tinterface Settings {\n\t\tjson?: {\n\t\t\tschemas?: JSONSchemaSettings[];\n\t\t\tformat?: { enable?: boolean };\n\t\t\tkeepLines?: { enable?: boolean };\n\t\t\tvalidate?: { enable?: boolean };\n\t\t\tresultLimit?: number;\n\t\t\tjsonFoldingLimit?: number;\n\t\t\tjsoncFoldingLimit?: number;\n\t\t\tjsonColorDecoratorLimit?: number;\n\t\t\tjsoncColorDecoratorLimit?: number;\n\t\t};\n\t\thttp?: {\n\t\t\tproxy?: string;\n\t\t\tproxyStrictSSL?: boolean;\n\t\t};\n\t}\n\n\tinterface JSONSchemaSettings {\n\t\tfileMatch?: string[];\n\t\turl?: string;\n\t\tschema?: JSONSchema;\n\t\tfolderUri?: string;\n\t}\n\n\n\n\tlet jsonConfigurationSettings: JSONSchemaSettings[] | undefined = undefined;\n\tlet schemaAssociations: ISchemaAssociations | SchemaConfiguration[] | undefined = undefined;\n\tlet formatterRegistrations: Thenable<Disposable>[] | null = null;\n\tlet validateEnabled = true;\n\tlet keepLinesEnabled = false;\n\n\t// The settings have changed. Is sent on server activation as well.\n\tconnection.onDidChangeConfiguration((change) => {\n\t\tconst settings = <Settings>change.settings;\n\t\truntime.configureHttpRequests?.(settings?.http?.proxy, !!settings.http?.proxyStrictSSL);\n\t\tjsonConfigurationSettings = settings.json?.schemas;\n\t\tvalidateEnabled = !!settings.json?.validate?.enable;\n\t\tkeepLinesEnabled = settings.json?.keepLines?.enable || false;\n\t\tupdateConfiguration();\n\n\t\tconst sanitizeLimitSetting = (settingValue: any) => Math.trunc(Math.max(settingValue, 0));\n\t\tresultLimit = sanitizeLimitSetting(settings.json?.resultLimit || Number.MAX_VALUE);\n\t\tjsonFoldingRangeLimit = sanitizeLimitSetting(settings.json?.jsonFoldingLimit || foldingRangeLimitDefault);\n\t\tjsoncFoldingRangeLimit = sanitizeLimitSetting(settings.json?.jsoncFoldingLimit || foldingRangeLimitDefault);\n\t\tjsonColorDecoratorLimit = sanitizeLimitSetting(settings.json?.jsonColorDecoratorLimit || Number.MAX_VALUE);\n\t\tjsoncColorDecoratorLimit = sanitizeLimitSetting(settings.json?.jsoncColorDecoratorLimit || Number.MAX_VALUE);\n\n\t\t// dynamically enable & disable the formatter\n\t\tif (dynamicFormatterRegistration) {\n\t\t\tconst enableFormatter = settings.json?.format?.enable;\n\t\t\tif (enableFormatter) {\n\t\t\t\tif (!formatterRegistrations) {\n\t\t\t\t\tconst documentSelector = [{ language: 'json' }, { language: 'jsonc' }];\n\t\t\t\t\tformatterRegistrations = [\n\t\t\t\t\t\tconnection.client.register(DocumentRangeFormattingRequest.type, { documentSelector }),\n\t\t\t\t\t\tconnection.client.register(DocumentFormattingRequest.type, { documentSelector })\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else if (formatterRegistrations) {\n\t\t\t\tformatterRegistrations.forEach(p => p.then(r => r.dispose()));\n\t\t\t\tformatterRegistrations = null;\n\t\t\t}\n\t\t}\n\t});\n\n\t// The jsonValidation extension configuration has changed\n\tconnection.onNotification(SchemaAssociationNotification.type, associations => {\n\t\tschemaAssociations = associations;\n\t\tupdateConfiguration();\n\t});\n\n\t// A schema has changed\n\tconnection.onNotification(SchemaContentChangeNotification.type, uriOrUris => {\n\t\tlet needsRevalidation = false;\n\t\tif (Array.isArray(uriOrUris)) {\n\t\t\tfor (const uri of uriOrUris) {\n\t\t\t\tif (languageService.resetSchema(uri)) {\n\t\t\t\t\tneedsRevalidation = true;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tneedsRevalidation = languageService.resetSchema(uriOrUris);\n\t\t}\n\t\tif (needsRevalidation) {\n\t\t\tdiagnosticsSupport?.requestRefresh();\n\t\t}\n\t});\n\n\t// Retry schema validation on all open documents\n\tconnection.onRequest(ForceValidateRequest.type, async uri => {\n\t\tconst document = documents.get(uri);\n\t\tif (document) {\n\t\t\tupdateConfiguration();\n\t\t\treturn await validateTextDocument(document);\n\t\t}\n\t\treturn [];\n\t});\n\n\tconnection.onRequest(ValidateContentRequest.type, async ({ schemaUri, content }) => {\n\t\tconst docURI = 'vscode://schemas/temp/' + new Date().getTime();\n\t\tconst document = TextDocument.create(docURI, 'json', 1, content);\n\t\tupdateConfiguration([{ uri: schemaUri, fileMatch: [docURI] }]);\n\t\treturn await validateTextDocument(document);\n\t});\n\n\n\tconnection.onRequest(LanguageStatusRequest.type, async uri => {\n\t\tconst document = documents.get(uri);\n\t\tif (document) {\n\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\treturn languageService.getLanguageStatus(document, jsonDocument);\n\t\t} else {\n\t\t\treturn { schemas: [] };\n\t\t}\n\t});\n\n\tconnection.onRequest(DocumentSortingRequest.type, async params => {\n\t\tconst uri = params.uri;\n\t\tconst options = params.options;\n\t\tconst document = documents.get(uri);\n\t\tif (document) {\n\t\t\treturn languageService.sort(document, options);\n\t\t}\n\t\treturn [];\n\t});\n\n\tfunction updateConfiguration(extraSchemas?: SchemaConfiguration[]) {\n\t\tconst languageSettings = {\n\t\t\tvalidate: validateEnabled,\n\t\t\tallowComments: true,\n\t\t\tschemas: new Array<SchemaConfiguration>()\n\t\t};\n\t\tif (schemaAssociations) {\n\t\t\tif (Array.isArray(schemaAssociations)) {\n\t\t\t\tArray.prototype.push.apply(languageSettings.schemas, schemaAssociations);\n\t\t\t} else {\n\t\t\t\tfor (const pattern in schemaAssociations) {\n\t\t\t\t\tconst association = schemaAssociations[pattern];\n\t\t\t\t\tif (Array.isArray(association)) {\n\t\t\t\t\t\tassociation.forEach(uri => {\n\t\t\t\t\t\t\tlanguageSettings.schemas.push({ uri, fileMatch: [pattern] });\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (jsonConfigurationSettings) {\n\t\t\tjsonConfigurationSettings.forEach((schema, index) => {\n\t\t\t\tlet uri = schema.url;\n\t\t\t\tif (!uri && schema.schema) {\n\t\t\t\t\turi = schema.schema.id || `vscode://schemas/custom/${index}`;\n\t\t\t\t}\n\t\t\t\tif (uri) {\n\t\t\t\t\tlanguageSettings.schemas.push({ uri, fileMatch: schema.fileMatch, schema: schema.schema, folderUri: schema.folderUri });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (extraSchemas) {\n\t\t\tlanguageSettings.schemas.push(...extraSchemas);\n\t\t}\n\n\t\tlanguageService.configure(languageSettings);\n\n\t\tdiagnosticsSupport?.requestRefresh();\n\t}\n\n\tasync function validateTextDocument(textDocument: TextDocument): Promise<Diagnostic[]> {\n\t\tif (textDocument.getText().length === 0) {\n\t\t\treturn []; // ignore empty documents\n\t\t}\n\t\tconst jsonDocument = getJSONDocument(textDocument);\n\t\tconst documentSettings: DocumentLanguageSettings = textDocument.languageId === 'jsonc' ? { comments: 'ignore', trailingCommas: 'warning' } : { comments: 'error', trailingCommas: 'error' };\n\t\treturn await languageService.doValidation(textDocument, jsonDocument, documentSettings);\n\t}\n\n\tconnection.onDidChangeWatchedFiles((change) => {\n\t\t// Monitored files have changed in VSCode\n\t\tlet hasChanges = false;\n\t\tchange.changes.forEach(c => {\n\t\t\tif (languageService.resetSchema(c.uri)) {\n\t\t\t\thasChanges = true;\n\t\t\t}\n\t\t});\n\t\tif (hasChanges) {\n\t\t\tdiagnosticsSupport?.requestRefresh();\n\t\t}\n\t});\n\n\tconst jsonDocuments = getLanguageModelCache<JSONDocument>(10, 60, document => languageService.parseJSONDocument(document));\n\tdocuments.onDidClose(e => {\n\t\tjsonDocuments.onDocumentRemoved(e.document);\n\t});\n\tconnection.onShutdown(() => {\n\t\tjsonDocuments.dispose();\n\t});\n\n\tfunction getJSONDocument(document: TextDocument): JSONDocument {\n\t\treturn jsonDocuments.get(document);\n\t}\n\n\tconnection.onCompletion((textDocumentPosition, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(textDocumentPosition.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\t\treturn languageService.doComplete(document, textDocumentPosition.position, jsonDocument);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`, token);\n\t});\n\n\tconnection.onHover((textDocumentPositionParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(textDocumentPositionParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\t\treturn languageService.doHover(document, textDocumentPositionParams.position, jsonDocument);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing hover for ${textDocumentPositionParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentSymbol((documentSymbolParams, token) => {\n\t\treturn runSafe(runtime, () => {\n\t\t\tconst document = documents.get(documentSymbolParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\t\tif (hierarchicalDocumentSymbolSupport) {\n\t\t\t\t\treturn languageService.findDocumentSymbols2(document, jsonDocument, { resultLimit });\n\t\t\t\t} else {\n\t\t\t\t\treturn languageService.findDocumentSymbols(document, jsonDocument, { resultLimit });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing document symbols for ${documentSymbolParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onCodeAction((codeActionParams, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(codeActionParams.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst sortCodeAction = CodeAction.create('Sort JSON', CodeActionKind.Source.concat('.sort', '.json'));\n\t\t\t\tsortCodeAction.command = {\n\t\t\t\t\tcommand: 'json.sort',\n\t\t\t\t\ttitle: l10n.t('Sort JSON')\n\t\t\t\t};\n\t\t\t\treturn [sortCodeAction];\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing code actions for ${codeActionParams.textDocument.uri}`, token);\n\t});\n\n\tfunction onFormat(textDocument: TextDocumentIdentifier, range: Range | undefined, options: FormattingOptions): TextEdit[] {\n\n\t\toptions.keepLines = keepLinesEnabled;\n\t\tconst document = documents.get(textDocument.uri);\n\t\tif (document) {\n\t\t\tconst edits = languageService.format(document, range ?? getFullRange(document), options);\n\t\t\tif (edits.length > formatterMaxNumberOfEdits) {\n\t\t\t\tconst newText = TextDocument.applyEdits(document, edits);\n\t\t\t\treturn [TextEdit.replace(getFullRange(document), newText)];\n\t\t\t}\n\t\t\treturn edits;\n\t\t}\n\t\treturn [];\n\t}\n\n\tconnection.onDocumentRangeFormatting((formatParams, token) => {\n\t\treturn runSafe(runtime, () => onFormat(formatParams.textDocument, formatParams.range, formatParams.options), [], `Error while formatting range for ${formatParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentFormatting((formatParams, token) => {\n\t\treturn runSafe(runtime, () => onFormat(formatParams.textDocument, undefined, formatParams.options), [], `Error while formatting ${formatParams.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentColor((params, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\n\t\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\t\tconst resultLimit = document.languageId === 'jsonc' ? jsoncColorDecoratorLimit : jsonColorDecoratorLimit;\n\t\t\t\treturn languageService.findDocumentColors(document, jsonDocument, { resultLimit });\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing document colors for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onColorPresentation((params, token) => {\n\t\treturn runSafe(runtime, () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\t\treturn languageService.getColorPresentations(document, jsonDocument, params.color, params.range);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing color presentations for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onFoldingRanges((params, token) => {\n\t\treturn runSafe(runtime, () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst rangeLimit = document.languageId === 'jsonc' ? jsoncFoldingRangeLimit : jsonFoldingRangeLimit;\n\t\t\t\treturn languageService.getFoldingRanges(document, { rangeLimit });\n\t\t\t}\n\t\t\treturn null;\n\t\t}, null, `Error while computing folding ranges for ${params.textDocument.uri}`, token);\n\t});\n\n\n\tconnection.onSelectionRanges((params, token) => {\n\t\treturn runSafe(runtime, () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\t\treturn languageService.getSelectionRanges(document, params.positions, jsonDocument);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing selection ranges for ${params.textDocument.uri}`, token);\n\t});\n\n\tconnection.onDocumentLinks((params, token) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\tconst jsonDocument = getJSONDocument(document);\n\t\t\t\treturn languageService.findLinks(document, jsonDocument);\n\t\t\t}\n\t\t\treturn [];\n\t\t}, [], `Error while computing links for ${params.textDocument.uri}`, token);\n\t});\n\n\t// Listen on the connection\n\tconnection.listen();\n}\n\nfunction getFullRange(document: TextDocument): Range {\n\treturn Range.create(Position.create(0, 0), document.positionAt(document.getText().length));\n}\n\n\n\n\n"
  },
  {
    "path": "extensions/json-language-features/server/src/languageModelCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument } from 'vscode-languageserver';\n\nexport interface LanguageModelCache<T> {\n\tget(document: TextDocument): T;\n\tonDocumentRemoved(document: TextDocument): void;\n\tdispose(): void;\n}\n\nexport function getLanguageModelCache<T>(maxEntries: number, cleanupIntervalTimeInSec: number, parse: (document: TextDocument) => T): LanguageModelCache<T> {\n\tlet languageModels: { [uri: string]: { version: number; languageId: string; cTime: number; languageModel: T } } = {};\n\tlet nModels = 0;\n\n\tlet cleanupInterval: NodeJS.Timeout | undefined = undefined;\n\tif (cleanupIntervalTimeInSec > 0) {\n\t\tcleanupInterval = setInterval(() => {\n\t\t\tconst cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;\n\t\t\tconst uris = Object.keys(languageModels);\n\t\t\tfor (const uri of uris) {\n\t\t\t\tconst languageModelInfo = languageModels[uri];\n\t\t\t\tif (languageModelInfo.cTime < cutoffTime) {\n\t\t\t\t\tdelete languageModels[uri];\n\t\t\t\t\tnModels--;\n\t\t\t\t}\n\t\t\t}\n\t\t}, cleanupIntervalTimeInSec * 1000);\n\t}\n\n\treturn {\n\t\tget(document: TextDocument): T {\n\t\t\tconst version = document.version;\n\t\t\tconst languageId = document.languageId;\n\t\t\tconst languageModelInfo = languageModels[document.uri];\n\t\t\tif (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {\n\t\t\t\tlanguageModelInfo.cTime = Date.now();\n\t\t\t\treturn languageModelInfo.languageModel;\n\t\t\t}\n\t\t\tconst languageModel = parse(document);\n\t\t\tlanguageModels[document.uri] = { languageModel, version, languageId, cTime: Date.now() };\n\t\t\tif (!languageModelInfo) {\n\t\t\t\tnModels++;\n\t\t\t}\n\n\t\t\tif (nModels === maxEntries) {\n\t\t\t\tlet oldestTime = Number.MAX_VALUE;\n\t\t\t\tlet oldestUri = null;\n\t\t\t\tfor (const uri in languageModels) {\n\t\t\t\t\tconst languageModelInfo = languageModels[uri];\n\t\t\t\t\tif (languageModelInfo.cTime < oldestTime) {\n\t\t\t\t\t\toldestUri = uri;\n\t\t\t\t\t\toldestTime = languageModelInfo.cTime;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (oldestUri) {\n\t\t\t\t\tdelete languageModels[oldestUri];\n\t\t\t\t\tnModels--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn languageModel;\n\n\t\t},\n\t\tonDocumentRemoved(document: TextDocument) {\n\t\t\tconst uri = document.uri;\n\t\t\tif (languageModels[uri]) {\n\t\t\t\tdelete languageModels[uri];\n\t\t\t\tnModels--;\n\t\t\t}\n\t\t},\n\t\tdispose() {\n\t\t\tif (typeof cleanupInterval !== 'undefined') {\n\t\t\t\tclearInterval(cleanupInterval);\n\t\t\t\tcleanupInterval = undefined;\n\t\t\t\tlanguageModels = {};\n\t\t\t\tnModels = 0;\n\t\t\t}\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "extensions/json-language-features/server/src/node/jsonServerMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createConnection, Connection, Disposable } from 'vscode-languageserver/node';\nimport { formatError } from '../utils/runner';\nimport { RequestService, RuntimeEnvironment, startServer } from '../jsonServer';\n\nimport { xhr, XHRResponse, configure as configureHttpRequests, getErrorStatusDescription } from 'request-light';\nimport { URI as Uri } from 'vscode-uri';\nimport { promises as fs } from 'fs';\nimport * as l10n from '@vscode/l10n';\n\n// Create a connection for the server.\nconst connection: Connection = createConnection();\n\nconsole.log = connection.console.log.bind(connection.console);\nconsole.error = connection.console.error.bind(connection.console);\n\nprocess.on('unhandledRejection', (e: any) => {\n\tconnection.console.error(formatError(`Unhandled exception`, e));\n});\n\nfunction getHTTPRequestService(): RequestService {\n\treturn {\n\t\tgetContent(uri: string, _encoding?: string) {\n\t\t\tconst headers = { 'Accept-Encoding': 'gzip, deflate' };\n\t\t\treturn xhr({ url: uri, followRedirects: 5, headers }).then(response => {\n\t\t\t\treturn response.responseText;\n\t\t\t}, (error: XHRResponse) => {\n\t\t\t\treturn Promise.reject(error.responseText || getErrorStatusDescription(error.status) || error.toString());\n\t\t\t});\n\t\t}\n\t};\n}\n\nfunction getFileRequestService(): RequestService {\n\treturn {\n\t\tasync getContent(location: string, encoding?: BufferEncoding) {\n\t\t\ttry {\n\t\t\t\tconst uri = Uri.parse(location);\n\t\t\t\treturn (await fs.readFile(uri.fsPath, encoding)).toString();\n\t\t\t} catch (e) {\n\t\t\t\tif (e.code === 'ENOENT') {\n\t\t\t\t\tthrow new Error(l10n.t('Schema not found: {0}', location));\n\t\t\t\t} else if (e.code === 'EISDIR') {\n\t\t\t\t\tthrow new Error(l10n.t('{0} is a directory, not a file', location));\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst runtime: RuntimeEnvironment = {\n\ttimer: {\n\t\tsetImmediate(callback: (...args: any[]) => void, ...args: any[]): Disposable {\n\t\t\tconst handle = setImmediate(callback, ...args);\n\t\t\treturn { dispose: () => clearImmediate(handle) };\n\t\t},\n\t\tsetTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): Disposable {\n\t\t\tconst handle = setTimeout(callback, ms, ...args);\n\t\t\treturn { dispose: () => clearTimeout(handle) };\n\t\t}\n\t},\n\tfile: getFileRequestService(),\n\thttp: getHTTPRequestService(),\n\tconfigureHttpRequests\n};\n\n\n\nstartServer(connection, runtime);\n"
  },
  {
    "path": "extensions/json-language-features/server/src/node/jsonServerNodeMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as l10n from '@vscode/l10n';\n\nasync function setupMain() {\n\tconst l10nLog: string[] = [];\n\n\tconst i10lLocation = process.env['VSCODE_L10N_BUNDLE_LOCATION'];\n\tif (i10lLocation) {\n\t\ttry {\n\t\t\tawait l10n.config({ uri: i10lLocation });\n\t\t\tl10nLog.push(`l10n: Configured to ${i10lLocation.toString()}`);\n\t\t} catch (e) {\n\t\t\tl10nLog.push(`l10n: Problems loading ${i10lLocation.toString()} : ${e}`);\n\t\t}\n\t}\n\tawait import('./jsonServerMain.js');\n\tl10nLog.forEach(console.log);\n}\nsetupMain();\n"
  },
  {
    "path": "extensions/json-language-features/server/src/utils/runner.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationToken, ResponseError, LSPErrorCodes } from 'vscode-languageserver';\nimport { RuntimeEnvironment } from '../jsonServer';\n\nexport function formatError(message: string, err: any): string {\n\tif (err instanceof Error) {\n\t\tconst error = <Error>err;\n\t\treturn `${message}: ${error.message}\\n${error.stack}`;\n\t} else if (typeof err === 'string') {\n\t\treturn `${message}: ${err}`;\n\t} else if (err) {\n\t\treturn `${message}: ${err.toString()}`;\n\t}\n\treturn message;\n}\n\nexport function runSafeAsync<T>(runtime: RuntimeEnvironment, func: () => Thenable<T>, errorVal: T, errorMessage: string, token: CancellationToken): Thenable<T | ResponseError<any>> {\n\treturn new Promise<T | ResponseError<any>>((resolve) => {\n\t\truntime.timer.setImmediate(() => {\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\tresolve(cancelValue());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn func().then(result => {\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\tresolve(cancelValue());\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t}, e => {\n\t\t\t\tconsole.error(formatError(errorMessage, e));\n\t\t\t\tresolve(errorVal);\n\t\t\t});\n\t\t});\n\t});\n}\n\nexport function runSafe<T, E>(runtime: RuntimeEnvironment, func: () => T, errorVal: T, errorMessage: string, token: CancellationToken): Thenable<T | ResponseError<E>> {\n\treturn new Promise<T | ResponseError<E>>((resolve) => {\n\t\truntime.timer.setImmediate(() => {\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\tresolve(cancelValue());\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = func();\n\t\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\t\tresolve(cancelValue());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t}\n\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(formatError(errorMessage, e));\n\t\t\t\t\tresolve(errorVal);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction cancelValue<E>() {\n\tconsole.log('cancelled');\n\treturn new ResponseError<E>(LSPErrorCodes.RequestCancelled, 'Request cancelled');\n}\n"
  },
  {
    "path": "extensions/json-language-features/server/src/utils/strings.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Determines if haystack ends with needle.\n */\nexport function endsWith(haystack: string, needle: string): boolean {\n\tconst diff = haystack.length - needle.length;\n\tif (diff > 0) {\n\t\treturn haystack.lastIndexOf(needle) === diff;\n\t} else if (diff === 0) {\n\t\treturn haystack === needle;\n\t} else {\n\t\treturn false;\n\t}\n}\n\nexport function convertSimple2RegExpPattern(pattern: string): string {\n\treturn pattern.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&').replace(/[\\*]/g, '.*');\n}\n"
  },
  {
    "path": "extensions/json-language-features/server/src/utils/validation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationToken, Connection, Diagnostic, Disposable, DocumentDiagnosticParams, DocumentDiagnosticReport, DocumentDiagnosticReportKind, TextDocuments } from 'vscode-languageserver';\nimport { TextDocument } from 'vscode-json-languageservice';\nimport { formatError, runSafeAsync } from './runner';\nimport { RuntimeEnvironment } from '../jsonServer';\n\nexport type Validator = (textDocument: TextDocument) => Promise<Diagnostic[]>;\nexport type DiagnosticsSupport = {\n\tdispose(): void;\n\trequestRefresh(): void;\n};\n\nexport function registerDiagnosticsPushSupport(documents: TextDocuments<TextDocument>, connection: Connection, runtime: RuntimeEnvironment, validate: Validator): DiagnosticsSupport {\n\n\tconst pendingValidationRequests: { [uri: string]: Disposable } = {};\n\tconst validationDelayMs = 500;\n\n\tconst disposables: Disposable[] = [];\n\n\t// The content of a text document has changed. This event is emitted\n\t// when the text document first opened or when its content has changed.\n\tdocuments.onDidChangeContent(change => {\n\t\ttriggerValidation(change.document);\n\t}, undefined, disposables);\n\n\t// a document has closed: clear all diagnostics\n\tdocuments.onDidClose(event => {\n\t\tcleanPendingValidation(event.document);\n\t\tconnection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });\n\t}, undefined, disposables);\n\n\tfunction cleanPendingValidation(textDocument: TextDocument): void {\n\t\tconst request = pendingValidationRequests[textDocument.uri];\n\t\tif (request) {\n\t\t\trequest.dispose();\n\t\t\tdelete pendingValidationRequests[textDocument.uri];\n\t\t}\n\t}\n\n\tfunction triggerValidation(textDocument: TextDocument): void {\n\t\tcleanPendingValidation(textDocument);\n\t\tconst request = pendingValidationRequests[textDocument.uri] = runtime.timer.setTimeout(async () => {\n\t\t\tif (request === pendingValidationRequests[textDocument.uri]) {\n\t\t\t\ttry {\n\t\t\t\t\tconst diagnostics = await validate(textDocument);\n\t\t\t\t\tif (request === pendingValidationRequests[textDocument.uri]) {\n\t\t\t\t\t\tconnection.sendDiagnostics({ uri: textDocument.uri, diagnostics });\n\t\t\t\t\t}\n\t\t\t\t\tdelete pendingValidationRequests[textDocument.uri];\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconnection.console.error(formatError(`Error while validating ${textDocument.uri}`, e));\n\t\t\t\t}\n\t\t\t}\n\t\t}, validationDelayMs);\n\t}\n\n\treturn {\n\t\trequestRefresh: () => {\n\t\t\tdocuments.all().forEach(triggerValidation);\n\t\t},\n\t\tdispose: () => {\n\t\t\tdisposables.forEach(d => d.dispose());\n\t\t\tdisposables.length = 0;\n\t\t\tconst keys = Object.keys(pendingValidationRequests);\n\t\t\tfor (const key of keys) {\n\t\t\t\tpendingValidationRequests[key].dispose();\n\t\t\t\tdelete pendingValidationRequests[key];\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport function registerDiagnosticsPullSupport(documents: TextDocuments<TextDocument>, connection: Connection, runtime: RuntimeEnvironment, validate: Validator): DiagnosticsSupport {\n\n\tfunction newDocumentDiagnosticReport(diagnostics: Diagnostic[]): DocumentDiagnosticReport {\n\t\treturn {\n\t\t\tkind: DocumentDiagnosticReportKind.Full,\n\t\t\titems: diagnostics\n\t\t};\n\t}\n\n\tconst registration = connection.languages.diagnostics.on(async (params: DocumentDiagnosticParams, token: CancellationToken) => {\n\t\treturn runSafeAsync(runtime, async () => {\n\t\t\tconst document = documents.get(params.textDocument.uri);\n\t\t\tif (document) {\n\t\t\t\treturn newDocumentDiagnosticReport(await validate(document));\n\t\t\t}\n\t\t\treturn newDocumentDiagnosticReport([]);\n\n\t\t}, newDocumentDiagnosticReport([]), `Error while computing diagnostics for ${params.textDocument.uri}`, token);\n\t});\n\n\tfunction requestRefresh(): void {\n\t\tconnection.languages.diagnostics.refresh();\n\t}\n\n\treturn {\n\t\trequestRefresh,\n\t\tdispose: () => {\n\t\t\tregistration.dispose();\n\t\t}\n\t};\n\n}\n"
  },
  {
    "path": "extensions/json-language-features/server/test/mocha.opts",
    "content": "--ui tdd\n--useColors true\n./out/test/**/*.test.js"
  },
  {
    "path": "extensions/json-language-features/server/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"sourceMap\": true,\n\t\t\"sourceRoot\": \"../src\",\n\t\t\"lib\": [\n\t\t\t\"ES2020\",\n\t\t\t\"WebWorker\"\n\t\t],\n\t\t\"module\": \"Node16\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\"\n\t]\n}\n"
  },
  {
    "path": "extensions/julia/.vscodeignore",
    "content": "build/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/julia/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"JuliaEditorSupport/atom-language-julia\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/JuliaEditorSupport/atom-language-julia\",\n\t\t\t\t\t\"commitHash\": \"c686684f18153687886e7d19c1bfc3a33076b1ab\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.23.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/julia/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"#=\", \"=#\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"`\", \"`\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"`\", \"`\"]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#region\",\n\t\t\t\"end\": \"^\\\\s*#endregion\"\n\t\t}\n\t},\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"^(\\\\s*|.*=\\\\s*|.*@\\\\w*\\\\s*)[\\\\w\\\\s]*(?:[\\\"'`][^\\\"'`]*[\\\"'`])*[\\\\w\\\\s]*\\\\b(if|while|for|function|macro|(mutable\\\\s+)?struct|abstract\\\\s+type|primitive\\\\s+type|let|quote|try|begin|.*\\\\)\\\\s*do|else|elseif|catch|finally)\\\\b(?!(?:.*\\\\bend\\\\b[^\\\\]]*)|(?:[^\\\\[]*\\\\].*)$).*$\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*(end|else|elseif|catch|finally)\\\\b.*$\"\n\t}\n}\n"
  },
  {
    "path": "extensions/julia/package.json",
    "content": "{\n\t\"name\": \"julia\",\n\t\"displayName\": \"%displayName%\",\n\t\"description\": \"%description%\",\n\t\"version\": \"1.0.0\",\n\t\"publisher\": \"vscode\",\n\t\"license\": \"MIT\",\n\t\"engines\": {\n\t\t\"vscode\": \"0.10.x\"\n\t},\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin JuliaEditorSupport/atom-language-julia grammars/julia_vscode.json ./syntaxes/julia.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n\t\"contributes\": {\n\t\t\"languages\": [\n\t\t\t{\n\t\t\t\t\t\"id\": \"julia\",\n\t\t\t\t\t\"aliases\": [\n\t\t\t\t\t\t\t\"Julia\",\n\t\t\t\t\t\t\t\"julia\"\n\t\t\t\t\t],\n\t\t\t\t\t\"extensions\": [\n\t\t\t\t\t\t\t\".jl\"\n\t\t\t\t\t],\n\t\t\t\t\t\"firstLine\": \"^#!\\\\s*/.*\\\\bjulia[0-9.-]*\\\\b\",\n\t\t\t\t\t\"configuration\": \"./language-configuration.json\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\t\"id\": \"juliamarkdown\",\n\t\t\t\t\t\"aliases\": [\n\t\t\t\t\t\t\t\"Julia Markdown\",\n\t\t\t\t\t\t\t\"juliamarkdown\"\n\t\t\t\t\t],\n\t\t\t\t\t\"extensions\": [\n\t\t\t\t\t\t\t\".jmd\"\n\t\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\t\"grammars\": [\n\t\t\t{\n\t\t\t\t\t\"language\": \"julia\",\n\t\t\t\t\t\"scopeName\": \"source.julia\",\n\t\t\t\t\t\"path\": \"./syntaxes/julia.tmLanguage.json\",\n\t\t\t\t\t\"embeddedLanguages\": {\n\t\t\t\t\t\t\t\"meta.embedded.inline.cpp\": \"cpp\",\n\t\t\t\t\t\t\t\"meta.embedded.inline.javascript\": \"javascript\",\n\t\t\t\t\t\t\t\"meta.embedded.inline.python\": \"python\",\n\t\t\t\t\t\t\t\"meta.embedded.inline.r\": \"r\",\n\t\t\t\t\t\t\t\"meta.embedded.inline.sql\": \"sql\"\n\t\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t\"configurationDefaults\": {\n\t\t\t\"[julia]\": {\n\t\t\t\t\"editor.defaultColorDecorators\": \"never\"\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/julia/package.nls.json",
    "content": "{\n\t\"displayName\": \"Julia Language Basics\",\n\t\"description\": \"Provides syntax highlighting & bracket matching in Julia files.\"\n}\n"
  },
  {
    "path": "extensions/julia/syntaxes/julia.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/JuliaEditorSupport/atom-language-julia/blob/master/grammars/julia_vscode.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/JuliaEditorSupport/atom-language-julia/commit/c686684f18153687886e7d19c1bfc3a33076b1ab\",\n\t\"name\": \"Julia\",\n\t\"scopeName\": \"source.julia\",\n\t\"comment\": \"This grammar is used by Atom (Oniguruma), GitHub (PCRE), and VSCode (Oniguruma),\\nso all regexps must be compatible with both engines.\\n\\nSpecs:\\n- https://github.com/kkos/oniguruma/blob/master/doc/RE\\n- https://www.pcre.org/current/doc/html/\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#operator\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#array\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#string\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#parentheses\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#bracket\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_decl\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_call\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#for_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#keyword\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#number\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#type_decl\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#symbol\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#punctuation\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"array\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\])((?:\\\\.)?'*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transpose.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.array.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\bbegin\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\bend\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#self_no_for_block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parentheses\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))((?:\\\\.)?'*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transpose.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#self_no_for_block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracket\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})((?:\\\\.)?'*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transpose.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#self_no_for_block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment_tags\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bTODO\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.comment-annotation.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bFIXME\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.comment-annotation.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bCHANGED\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.comment-annotation.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bXXX\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.comment-annotation.julia\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_tags\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment_block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"#=\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"=#\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.number-sign-equals.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_tags\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)({(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})?\\\\.?(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)(('|(\\\\.'))*\\\\.?')?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transposed-func.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#self_no_for_block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_decl\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)({(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})?(?=\\\\([^#]*\\\\)(::[^\\\\s]+)?(\\\\s*\\\\bwhere\\\\b\\\\s+.+?)?\\\\s*?=(?![=>]))\",\n\t\t\t\t\t\"comment\": \"first group is function name\\nSecond group is type parameters (e.g. {T<:Number, S})\\nThen open parens\\nThen a lookahead ensures that we are followed by:\\n  - anything (function arguments)\\n  - 0 or more spaces\\n  - Finally an equal sign\\nNegative lookahead ensures we don't have another equal sign (not `==`)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.dots.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\b(function|macro)(?:\\\\s+(?:(?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*(\\\\.))?((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)({(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})?|\\\\s*)(?=\\\\()\",\n\t\t\t\t\t\"comment\": \"similar regex to previous, but with keyword not 1-line syntax\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"for_block\": {\n\t\t\t\"comment\": \"for blocks need to be special-cased to support tokenizing 'outer' properly\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(for)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!,|\\\\s)(\\\\s*\\\\n)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\bouter\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keyword\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<![:_\\\\.])(?:function|mutable\\\\s+struct|struct|macro|quote|abstract\\\\s+type|primitive\\\\s+type|module|baremodule|where)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<![:_])(?:if|else|elseif|for|while|begin|let|do|try|catch|finally|return|break|continue)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<![:_])end\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.end.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<![:_])(?:global|local|const)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.storage.modifier.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<![:_])(?:export)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.export.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^(?:public)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.public.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<![:_])(?:import)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.import.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?<![:_])(?:using)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.using.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\S\\\\s+)\\\\b(as)\\\\b(?=\\\\s+\\\\S)\",\n\t\t\t\t\t\"name\": \"keyword.control.as.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(@(\\\\.|(?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*))\",\n\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"number\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿]))(?:(?:\\\\b0(?:x|X)[0-9a-fA-F](?:_?[0-9a-fA-F])*)|(?:\\\\b0o[0-7](?:_?[0-7])*)|(?:\\\\b0b[0-1](?:_?[0-1])*)|(?:(?:\\\\b[0-9](?:_?[0-9])*\\\\.?(?!\\\\.)(?:[_0-9]*))|(?:\\\\b\\\\.[0-9](?:_?[0-9])*))(?:[efE][+-]?[0-9](?:_?[0-9])*)?(?:im\\\\b|Inf(?:16|32|64)?\\\\b|NaN(?:16|32|64)?\\\\b|π\\\\b|pi\\\\b|ℯ\\\\b)?|\\\\b[0-9]+|\\\\bInf(?:16|32|64)?\\\\b|\\\\bNaN(?:16|32|64)?\\\\b|\\\\bπ\\\\b|\\\\bpi\\\\b|\\\\bℯ\\\\b))('*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.conjugate-number.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bARGS\\\\b|\\\\bC_NULL\\\\b|\\\\bDEPOT_PATH\\\\b|\\\\bENDIAN_BOM\\\\b|\\\\bENV\\\\b|\\\\bLOAD_PATH\\\\b|\\\\bPROGRAM_FILE\\\\b|\\\\bstdin\\\\b|\\\\bstdout\\\\b|\\\\bstderr\\\\b|\\\\bVERSION\\\\b|\\\\bdevnull\\\\b\",\n\t\t\t\t\t\"name\": \"constant.global.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\btrue\\\\b|\\\\bfalse\\\\b|\\\\bnothing\\\\b|\\\\bmissing\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.julia\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.?(?:<-->|->|-->|<--|←|→|↔|↚|↛|↞|↠|↢|↣|↦|↤|↮|⇎|⇍|⇏|⇐|⇒|⇔|⇴|⇶|⇷|⇸|⇹|⇺|⇻|⇼|⇽|⇾|⇿|⟵|⟶|⟷|⟹|⟺|⟻|⟼|⟽|⟾|⟿|⤀|⤁|⤂|⤃|⤄|⤅|⤆|⤇|⤌|⤍|⤎|⤏|⤐|⤑|⤔|⤕|⤖|⤗|⤘|⤝|⤞|⤟|⤠|⥄|⥅|⥆|⥇|⥈|⥊|⥋|⥎|⥐|⥒|⥓|⥖|⥗|⥚|⥛|⥞|⥟|⥢|⥤|⥦|⥧|⥨|⥩|⥪|⥫|⥬|⥭|⥰|⧴|⬱|⬰|⬲|⬳|⬴|⬵|⬶|⬷|⬸|⬹|⬺|⬻|⬼|⬽|⬾|⬿|⭀|⭁|⭂|⭃|⥷|⭄|⥺|⭇|⭈|⭉|⭊|⭋|⭌|￩|￫|⇜|⇝|↜|↝|↩|↪|↫|↬|↼|↽|⇀|⇁|⇄|⇆|⇇|⇉|⇋|⇌|⇚|⇛|⇠|⇢|↷|↶|↺|↻|=>)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arrow.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?::=|\\\\+=|-=|\\\\*=|//=|/=|\\\\.//=|\\\\./=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|\\\\^=|\\\\.\\\\^=|%=|\\\\.%=|÷=|\\\\.÷=|\\\\|=|&=|\\\\.&=|⊻=|\\\\.⊻=|\\\\$=|<<=|>>=|>>>=|=(?!=))\",\n\t\t\t\t\t\"name\": \"keyword.operator.update.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:<<|>>>|>>|\\\\.>>>|\\\\.>>|\\\\.<<)\",\n\t\t\t\t\t\"name\": \"keyword.operator.shift.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\s*(::|>:|<:)\\\\s*((?:(?:Union)?\\\\([^)]*\\\\)|[[:alpha:]_$∇][[:word:]⁺-ₜ!′\\\\.]*(?:(?:{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})|(?:\\\".+?(?<!\\\\\\\\)\\\"))?)))(?:\\\\.\\\\.\\\\.)?((?:\\\\.)?'*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.relation.types.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transpose.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\.?((?<!<)<=|(?<!>)>=|>|<|≥|≤|===|==|≡|!=|≠|!==|≢|∈|∉|∋|∌|⊆|⊈|⊂|⊄|⊊|∝|∊|∍|∥|∦|∷|∺|∻|∽|∾|≁|≃|≂|≄|≅|≆|≇|≈|≉|≊|≋|≌|≍|≎|≐|≑|≒|≓|≖|≗|≘|≙|≚|≛|≜|≝|≞|≟|≣|≦|≧|≨|≩|≪|≫|≬|≭|≮|≯|≰|≱|≲|≳|≴|≵|≶|≷|≸|≹|≺|≻|≼|≽|≾|≿|⊀|⊁|⊃|⊅|⊇|⊉|⊋|⊏|⊐|⊑|⊒|⊜|⊩|⊬|⊮|⊰|⊱|⊲|⊳|⊴|⊵|⊶|⊷|⋍|⋐|⋑|⋕|⋖|⋗|⋘|⋙|⋚|⋛|⋜|⋝|⋞|⋟|⋠|⋡|⋢|⋣|⋤|⋥|⋦|⋧|⋨|⋩|⋪|⋫|⋬|⋭|⋲|⋳|⋴|⋵|⋶|⋷|⋸|⋹|⋺|⋻|⋼|⋽|⋾|⋿|⟈|⟉|⟒|⦷|⧀|⧁|⧡|⧣|⧤|⧥|⩦|⩧|⩪|⩫|⩬|⩭|⩮|⩯|⩰|⩱|⩲|⩳|⩵|⩶|⩷|⩸|⩹|⩺|⩻|⩼|⩽|⩾|⩿|⪀|⪁|⪂|⪃|⪄|⪅|⪆|⪇|⪈|⪉|⪊|⪋|⪌|⪍|⪎|⪏|⪐|⪑|⪒|⪓|⪔|⪕|⪖|⪗|⪘|⪙|⪚|⪛|⪜|⪝|⪞|⪟|⪠|⪡|⪢|⪣|⪤|⪥|⪦|⪧|⪨|⪩|⪪|⪫|⪬|⪭|⪮|⪯|⪰|⪱|⪲|⪳|⪴|⪵|⪶|⪷|⪸|⪹|⪺|⪻|⪼|⪽|⪾|⪿|⫀|⫁|⫂|⫃|⫄|⫅|⫆|⫇|⫈|⫉|⫊|⫋|⫌|⫍|⫎|⫏|⫐|⫑|⫒|⫓|⫔|⫕|⫖|⫗|⫘|⫙|⫷|⫸|⫹|⫺|⊢|⊣|⟂|⫪|⫫|<:|>:))\",\n\t\t\t\t\t\"name\": \"keyword.operator.relation.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\s)(?:\\\\?)(?=\\\\s)\",\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\s)(?:\\\\:)(?=\\\\s)\",\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\|\\\\||&&|(?<!(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿]))!)\",\n\t\t\t\t\t\"name\": \"keyword.operator.boolean.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=[[:word:]⁺-ₜ!′∇\\\\)\\\\]\\\\}])(?::)\",\n\t\t\t\t\t\"name\": \"keyword.operator.range.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\|>)\",\n\t\t\t\t\t\"name\": \"keyword.operator.applies.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\||\\\\.\\\\||\\\\&|\\\\.\\\\&|~|¬|\\\\.~|⊻|\\\\.⊻)\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.?(?:\\\\+\\\\+|\\\\-\\\\-|\\\\+|\\\\-|−|¦|\\\\||⊕|⊖|⊞|⊟|∪|∨|⊔|±|∓|∔|∸|≏|⊎|⊻|⊽|⋎|⋓|⟇|⧺|⧻|⨈|⨢|⨣|⨤|⨥|⨦|⨧|⨨|⨩|⨪|⨫|⨬|⨭|⨮|⨹|⨺|⩁|⩂|⩅|⩊|⩌|⩏|⩐|⩒|⩔|⩖|⩗|⩛|⩝|⩡|⩢|⩣|\\\\*|//?|⌿|÷|%|&|·|·|⋅|∘|×|\\\\\\\\|∩|∧|⊗|⊘|⊙|⊚|⊛|⊠|⊡|⊓|∗|∙|∤|⅋|≀|⊼|⋄|⋆|⋇|⋉|⋊|⋋|⋌|⋏|⋒|⟑|⦸|⦼|⦾|⦿|⧶|⧷|⨇|⨰|⨱|⨲|⨳|⨴|⨵|⨶|⨷|⨸|⨻|⨼|⨽|⩀|⩃|⩄|⩋|⩍|⩎|⩑|⩓|⩕|⩘|⩚|⩜|⩞|⩟|⩠|⫛|⊍|▷|⨝|⟕|⟖|⟗|⨟|\\\\^|↑|↓|⇵|⟰|⟱|⤈|⤉|⤊|⤋|⤒|⤓|⥉|⥌|⥍|⥏|⥑|⥔|⥕|⥘|⥙|⥜|⥝|⥠|⥡|⥣|⥥|⥮|⥯|￪|￬|√|∛|∜|⋆|±|∓)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:∘)\",\n\t\t\t\t\t\"name\": \"keyword.operator.compose.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:::|(?<=\\\\s)isa(?=\\\\s))\",\n\t\t\t\t\t\"name\": \"keyword.operator.isa.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?<=\\\\s)in(?=\\\\s))\",\n\t\t\t\t\t\"name\": \"keyword.operator.relation.in.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\.(?=(?:@|_|\\\\p{L}))|\\\\.\\\\.+|…|⁝|⋮|⋱|⋰|⋯)\",\n\t\t\t\t\t\"name\": \"keyword.operator.dots.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\$)(?=.+)\",\n\t\t\t\t\t\"name\": \"keyword.operator.interpolation.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transposed-variable.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)(('|(\\\\.'))*\\\\.?')\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"bracket.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transposed-matrix.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\])((?:'|(?:\\\\.'))*\\\\.?')\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"bracket.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.transposed-parens.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\))((?:'|(?:\\\\.'))*\\\\.?')\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(@doc)\\\\s((?:doc)?\\\"\\\"\\\")|(doc\\\"\\\"\\\"))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\"\\\"\\\") ?(->)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arrow.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.docstring.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(i?cxx)(\\\"\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"embed.cxx.julia\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.inline.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp#root_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(py)(\\\"\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"([\\\\s\\\\w]*)(\\\"\\\"\\\")\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"embed.python.julia\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.inline.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(js)(\\\"\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"embed.js.julia\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.inline.javascript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(R)(\\\"\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"embed.R.julia\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.inline.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(raw)(\\\"\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"name\": \"string.quoted.other.julia\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(raw)(\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"name\": \"string.quoted.other.julia\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(sql)(\\\"\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"embed.sql.julia\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.inline.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"var\\\"\\\"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"name\": \"constant.other.symbol.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"var\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"name\": \"constant.other.symbol.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s?(doc)?(\\\"\\\"\\\")\\\\s?$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\"\\\"\\\")\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.docstring.julia\",\n\t\t\t\t\t\"comment\": \"This only matches docstrings that start and end with triple quotes on\\ntheir own line in the void\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'(?!')\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.multiline.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.multiline.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.triple.double.julia\",\n\t\t\t\t\t\"comment\": \"multi-line string with triple double quotes\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.double.julia\",\n\t\t\t\t\t\"begin\": \"\\\"(?!\\\"\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"String with single pair of double quotes. Regex matches isolated double quote\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"r\\\"\\\"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\"\\\"\\\")([imsx]{0,4})?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"comment\": \"I took this scope name from python regex grammar\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.option-toggle.regexp.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.regexp.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"r\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.begin.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\")([imsx]{0,4})?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.regexp.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"comment\": \"I took this scope name from python regex grammar\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.option-toggle.regexp.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.regexp.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\")((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)\\\"\\\"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\"\\\"\\\")((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.other.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\")((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![^\\\\\\\\]\\\\\\\\)(\\\")((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.other.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!`)((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)?```\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(```)((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.interpolated.backtick.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!`)((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)?`\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![^\\\\\\\\]\\\\\\\\)(`)((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.macro.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.interpolated.backtick.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_dollar_sign_interpolate\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escaped_char\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)\",\n\t\t\t\t\t\"name\": \"constant.character.escape.julia\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_dollar_sign_interpolate\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\$(?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿]|[^\\\\p{^Sc}$])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿]|[^\\\\p{^Sc}$])*\",\n\t\t\t\t\t\"name\": \"variable.interpolation.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\$(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.bracket.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"variable.interpolation.julia\",\n\t\t\t\t\t\"comment\": \"`punctuation.section.embedded`, `constant.escape`,\\n& `meta.embedded.line` were considered but appear to have even spottier\\nsupport among popular syntaxes.\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#self_no_for_block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"symbol\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![[:word:]⁺-ₜ!′∇\\\\)\\\\]\\\\}]):(?:(?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)(?!(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿]))(?![\\\"`])\",\n\t\t\t\t\t\"name\": \"constant.other.symbol.julia\",\n\t\t\t\t\t\"comment\": \"This is string.quoted.symbol.julia in tpoisot's package\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type_decl\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.inherited-class.julia\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?>!:_)(?:struct|mutable\\\\s+struct|abstract\\\\s+type|primitive\\\\s+type)\\\\s+((?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*)(\\\\s*(<:)\\\\s*(?:[[:alpha:]_\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{So}←-⇿])(?:[[:word:]_!\\\\p{Lu}\\\\p{Ll}\\\\p{Lt}\\\\p{Lm}\\\\p{Lo}\\\\p{Nl}\\\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\\\P{Mn}\\u0001-¡]|[^\\\\P{Mc}\\u0001-¡]|[^\\\\P{Nd}\\u0001-¡]|[^\\\\P{Pc}\\u0001-¡]|[^\\\\P{Sk}\\u0001-¡]|[^\\\\P{Me}\\u0001-¡]|[^\\\\P{No}\\u0001-¡]|[′-‷⁗]|[^\\\\P{So}←-⇿])*(?:{.*})?)?\",\n\t\t\t\t\t\"name\": \"meta.type.julia\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"self_no_for_block\": {\n\t\t\t\"comment\": \"Same as $self, but does not contain #for_block. 'outer' is not valid in some contexts (e.g. generators, comprehensions, indexing), so use this when matching those in begin/end patterns. Keep this up-to-date with $self!\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_decl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_decl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#symbol\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"punctuation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.comma.julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\"name\": \"punctuation.separator.semicolon.julia\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/latex/.vscodeignore",
    "content": "cgmanifest.json\nbuild/**\n\n"
  },
  {
    "path": "extensions/latex/build/update-grammars.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nvar updateGrammar = require('vscode-grammar-updater');\n\nupdateGrammar.update('jlelong/vscode-latex-basics', 'syntaxes/Bibtex.tmLanguage.json', 'syntaxes/Bibtex.tmLanguage.json', undefined, 'main');\nupdateGrammar.update('jlelong/vscode-latex-basics', 'syntaxes/LaTeX.tmLanguage.json', 'syntaxes/LaTeX.tmLanguage.json', undefined, 'main');\nupdateGrammar.update('jlelong/vscode-latex-basics', 'syntaxes/TeX.tmLanguage.json', 'syntaxes/TeX.tmLanguage.json', undefined, 'main');\nupdateGrammar.update('jlelong/vscode-latex-basics', 'syntaxes/cpp-grammar-bailout.tmLanguage.json', 'syntaxes/cpp-grammar-bailout.tmLanguage.json', undefined, 'main');\nupdateGrammar.update('jlelong/vscode-latex-basics', 'syntaxes/markdown-latex-combined.tmLanguage.json', 'syntaxes/markdown-latex-combined.tmLanguage.json', undefined, 'main');\n"
  },
  {
    "path": "extensions/latex/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jlelong/vscode-latex-basics\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jlelong/vscode-latex-basics\",\n\t\t\t\t\t\"commitHash\": \"df6ef817c932d24da5cc72927344a547e463cc65\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.9.0\",\n\t\t\t\"description\": \"The files in syntaxes/ were originally part of https://github.com/James-Yu/LaTeX-Workshop. They have been extracted in the hope that they can useful outside of the LaTeX-Workshop extension.\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) vscode-latex-basics authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the MIT License\",\n\t\t\t\t\"\",\n\t\t\t\t\"\",\n\t\t\t\t\"The file syntaxes/LaTeX.tmLanguage.json is based on https://github.com/textmate/latex.tmbundle/blob/master/Syntaxes/LaTeX.plist\",\n\t\t\t\t\"but has been largely modified. The original file falls under the following license\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The file syntaxes/markdown-latex-combined.tmLanguage.json is generated from the Markdown grammar\",\n\t\t\t\t\"included in VSCode and falls under the license described in markdown-latex-combined-license.txt.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The file syntaxes/cpp-grammar-bailout.tmLanguage.json is generated from https://github.com/jeff-hykin/better-cpp-syntax\",\n\t\t\t\t\"and falls under the license described in cpp-bailout-license.txt.\"\n\t\t\t]\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/latex/cpp-bailout-license.txt",
    "content": "MIT License\n\nCopyright (c) 2019 Jeff Hykin\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": "extensions/latex/latex-cpp-embedded-language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\"/*\", \"*/\"]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"[\", \"close\": \"]\" },\n\t\t{ \"open\": \"{\", \"close\": \"}\" },\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"<\", \">\"]\n\t],\n\t\"wordPattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\!\\\\@\\\\#\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>\\\\/\\\\?\\\\s]+)\",\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#pragma\\\\s+region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*#pragma\\\\s+endregion\\\\b\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/latex/latex-language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"%\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"[\", \")\"],\n\t\t[\"(\", \"]\"],\n\t\t[\"\\\\left(\", \"\\\\right)\"],\n\t\t[\"\\\\left(\", \"\\\\right.\"],\n\t\t[\"\\\\left.\", \"\\\\right)\"],\n\t\t[\"\\\\left[\", \"\\\\right]\"],\n\t\t[\"\\\\left[\", \"\\\\right.\"],\n\t\t[\"\\\\left.\", \"\\\\right]\"],\n\t\t[\"\\\\left\\\\{\", \"\\\\right\\\\}\"],\n\t\t[\"\\\\left\\\\{\", \"\\\\right.\"],\n\t\t[\"\\\\left.\", \"\\\\right\\\\}\"],\n\t\t[\"\\\\left<\", \"\\\\right>\"],\n\t\t[\"\\\\bigl(\", \"\\\\bigr)\"],\n\t\t[\"\\\\bigl[\", \"\\\\bigr]\"],\n\t\t[\"\\\\bigl\\\\{\", \"\\\\bigr\\\\}\"],\n\t\t[\"\\\\Bigl(\", \"\\\\Bigr)\"],\n\t\t[\"\\\\Bigl[\", \"\\\\Bigr]\"],\n\t\t[\"\\\\Bigl\\\\{\", \"\\\\Bigr\\\\}\"],\n\t\t[\"\\\\biggl(\", \"\\\\biggr)\"],\n\t\t[\"\\\\biggl[\", \"\\\\biggr]\"],\n\t\t[\"\\\\biggl\\\\{\", \"\\\\biggr\\\\}\"],\n\t\t[\"\\\\Biggl(\", \"\\\\Biggr)\"],\n\t\t[\"\\\\Biggl[\", \"\\\\Biggr]\"],\n\t\t[\"\\\\Biggl\\\\{\", \"\\\\Biggr\\\\}\"],\n\t\t[\"\\\\langle\", \"\\\\rangle\"],\n\t\t[\"\\\\lvert\", \"\\\\rvert\"],\n\t\t[\"\\\\lVert\", \"\\\\rVert\"],\n\t\t[\"\\\\left|\", \"\\\\right|\"],\n\t\t[\"\\\\left\\\\vert\", \"\\\\right\\\\vert\"],\n\t\t[\"\\\\left\\\\|\", \"\\\\right\\\\|\"],\n\t\t[\"\\\\left\\\\Vert\", \"\\\\right\\\\Vert\"],\n\t\t[\"\\\\left\\\\langle\", \"\\\\right\\\\rangle\"],\n\t\t[\"\\\\left\\\\lvert\", \"\\\\right\\\\rvert\"],\n\t\t[\"\\\\left\\\\lVert\", \"\\\\right\\\\rVert\"],\n\t\t[\"\\\\bigl\\\\langle\", \"\\\\bigr\\\\rangle\"],\n\t\t[\"\\\\bigl|\", \"\\\\bigr|\"],\n\t\t[\"\\\\bigl\\\\vert\", \"\\\\bigr\\\\vert\"],\n\t\t[\"\\\\bigl\\\\lvert\", \"\\\\bigr\\\\rvert\"],\n\t\t[\"\\\\bigl\\\\|\", \"\\\\bigr\\\\|\"],\n\t\t[\"\\\\bigl\\\\lVert\", \"\\\\bigr\\\\rVert\"],\n\t\t[\"\\\\bigl\\\\Vert\", \"\\\\bigr\\\\Vert\"],\n\t\t[\"\\\\Bigl\\\\langle\", \"\\\\Bigr\\\\rangle\"],\n\t\t[\"\\\\Bigl|\", \"\\\\Bigr|\"],\n\t\t[\"\\\\Bigl\\\\lvert\", \"\\\\Bigr\\\\rvert\"],\n\t\t[\"\\\\Bigl\\\\vert\", \"\\\\Bigr\\\\vert\"],\n\t\t[\"\\\\Bigl\\\\|\", \"\\\\Bigr\\\\|\"],\n\t\t[\"\\\\Bigl\\\\lVert\", \"\\\\Bigr\\\\rVert\"],\n\t\t[\"\\\\Bigl\\\\Vert\", \"\\\\Bigr\\\\Vert\"],\n\t\t[\"\\\\biggl\\\\langle\", \"\\\\biggr\\\\rangle\"],\n\t\t[\"\\\\biggl|\", \"\\\\biggr|\"],\n\t\t[\"\\\\biggl\\\\lvert\", \"\\\\biggr\\\\rvert\"],\n\t\t[\"\\\\biggl\\\\vert\", \"\\\\biggr\\\\vert\"],\n\t\t[\"\\\\biggl\\\\|\", \"\\\\biggr\\\\|\"],\n\t\t[\"\\\\biggl\\\\lVert\", \"\\\\biggr\\\\rVert\"],\n\t\t[\"\\\\biggl\\\\Vert\", \"\\\\biggr\\\\Vert\"],\n\t\t[\"\\\\Biggl\\\\langle\", \"\\\\Biggr\\\\rangle\"],\n\t\t[\"\\\\Biggl|\", \"\\\\Biggr|\"],\n\t\t[\"\\\\Biggl\\\\lvert\", \"\\\\Biggr\\\\rvert\"],\n\t\t[\"\\\\Biggl\\\\vert\", \"\\\\Biggr\\\\vert\"],\n\t\t[\"\\\\Biggl\\\\|\", \"\\\\Biggr\\\\|\"],\n\t\t[\"\\\\Biggl\\\\lVert\", \"\\\\Biggr\\\\rVert\"],\n\t\t[\"\\\\Biggl\\\\Vert\", \"\\\\Biggr\\\\Vert\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"\\\\left(\", \"\\\\right)\"],\n\t\t[\"\\\\left[\", \"\\\\right]\"],\n\t\t[\"\\\\left\\\\{\", \"\\\\right\\\\}\"],\n\t\t[\"\\\\bigl(\", \"\\\\bigr)\"],\n\t\t[\"\\\\bigl[\", \"\\\\bigr]\"],\n\t\t[\"\\\\bigl\\\\{\", \"\\\\bigr\\\\}\"],\n\t\t[\"\\\\Bigl(\", \"\\\\Bigr)\"],\n\t\t[\"\\\\Bigl[\", \"\\\\Bigr]\"],\n\t\t[\"\\\\Bigl\\\\{\", \"\\\\Bigr\\\\}\"],\n\t\t[\"\\\\biggl(\", \"\\\\biggr)\"],\n\t\t[\"\\\\biggl[\", \"\\\\biggr]\"],\n\t\t[\"\\\\biggl\\\\{\", \"\\\\biggr\\\\}\"],\n\t\t[\"\\\\Biggl(\", \"\\\\Biggr)\"],\n\t\t[\"\\\\Biggl[\", \"\\\\Biggr]\"],\n\t\t[\"\\\\Biggl\\\\{\", \"\\\\Biggr\\\\}\"],\n\t\t[\"\\\\(\", \"\\\\)\"],\n\t\t[\"\\\\[\", \"\\\\]\"],\n\t\t[\"\\\\{\", \"\\\\}\"],\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"`\", \"'\"]\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"`\", \"'\"],\n\t\t[\"$\", \"$\"]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"\\\\\\\\begin{(?!document)([^}]*)}(?!.*\\\\\\\\end{\\\\1})\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*\\\\\\\\end{(?!document)\"\n\t},\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*%?\\\\s*(region|\\\\\\\\begingroup)\\\\b\",\n\t\t\t\"end\": \"^\\\\s*%?\\\\s*(endregion|\\\\\\\\endgroup)\\\\b\"\n\t\t}\n\t},\n\t\"autoCloseBefore\": \";:.,={}])>\\\\` \\n\\t$\",\n\t\"wordPattern\": {\n\t\t\"pattern\": \"(\\\\p{Alphabetic}|\\\\p{Number}|\\\\p{Nonspacing_Mark}){1,}\",\n\t\t\"flags\": \"u\"\n\t}\n}\n"
  },
  {
    "path": "extensions/latex/markdown-latex-combined-language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [\n\t\t\t\"<!--\",\n\t\t\t\"-->\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"[\", \")\"],\n\t\t[\"(\", \"]\"],\n\t\t[\"\\\\left(\", \"\\\\right)\"],\n\t\t[\"\\\\left(\", \"\\\\right.\"],\n\t\t[\"\\\\left.\", \"\\\\right)\"],\n\t\t[\"\\\\left[\", \"\\\\right]\"],\n\t\t[\"\\\\left[\", \"\\\\right.\"],\n\t\t[\"\\\\left.\", \"\\\\right]\"],\n\t\t[\"\\\\left\\\\{\", \"\\\\right\\\\}\"],\n\t\t[\"\\\\left\\\\{\", \"\\\\right.\"],\n\t\t[\"\\\\left.\", \"\\\\right\\\\}\"],\n\t\t[\"\\\\left<\", \"\\\\right>\"],\n\t\t[\"\\\\bigl(\", \"\\\\bigr)\"],\n\t\t[\"\\\\bigl[\", \"\\\\bigr]\"],\n\t\t[\"\\\\bigl\\\\{\", \"\\\\bigr\\\\}\"],\n\t\t[\"\\\\Bigl(\", \"\\\\Bigr)\"],\n\t\t[\"\\\\Bigl[\", \"\\\\Bigr]\"],\n\t\t[\"\\\\Bigl\\\\{\", \"\\\\Bigr\\\\}\"],\n\t\t[\"\\\\biggl(\", \"\\\\biggr)\"],\n\t\t[\"\\\\biggl[\", \"\\\\biggr]\"],\n\t\t[\"\\\\biggl\\\\{\", \"\\\\biggr\\\\}\"],\n\t\t[\"\\\\Biggl(\", \"\\\\Biggr)\"],\n\t\t[\"\\\\Biggl[\", \"\\\\Biggr]\"],\n\t\t[\"\\\\Biggl\\\\{\", \"\\\\Biggr\\\\}\"],\n\t\t[\"\\\\langle\", \"\\\\rangle\"],\n\t\t[\"\\\\lvert\", \"\\\\rvert\"],\n\t\t[\"\\\\lVert\", \"\\\\rVert\"],\n\t\t[\"\\\\left|\", \"\\\\right|\"],\n\t\t[\"\\\\left\\\\vert\", \"\\\\right\\\\vert\"],\n\t\t[\"\\\\left\\\\|\", \"\\\\right\\\\|\"],\n\t\t[\"\\\\left\\\\Vert\", \"\\\\right\\\\Vert\"],\n\t\t[\"\\\\left\\\\langle\", \"\\\\right\\\\rangle\"],\n\t\t[\"\\\\left\\\\lvert\", \"\\\\right\\\\rvert\"],\n\t\t[\"\\\\left\\\\lVert\", \"\\\\right\\\\rVert\"],\n\t\t[\"\\\\bigl\\\\langle\", \"\\\\bigr\\\\rangle\"],\n\t\t[\"\\\\bigl|\", \"\\\\bigr|\"],\n\t\t[\"\\\\bigl\\\\vert\", \"\\\\bigr\\\\vert\"],\n\t\t[\"\\\\bigl\\\\lvert\", \"\\\\bigr\\\\rvert\"],\n\t\t[\"\\\\bigl\\\\|\", \"\\\\bigr\\\\|\"],\n\t\t[\"\\\\bigl\\\\lVert\", \"\\\\bigr\\\\rVert\"],\n\t\t[\"\\\\bigl\\\\Vert\", \"\\\\bigr\\\\Vert\"],\n\t\t[\"\\\\Bigl\\\\langle\", \"\\\\Bigr\\\\rangle\"],\n\t\t[\"\\\\Bigl|\", \"\\\\Bigr|\"],\n\t\t[\"\\\\Bigl\\\\lvert\", \"\\\\Bigr\\\\rvert\"],\n\t\t[\"\\\\Bigl\\\\vert\", \"\\\\Bigr\\\\vert\"],\n\t\t[\"\\\\Bigl\\\\|\", \"\\\\Bigr\\\\|\"],\n\t\t[\"\\\\Bigl\\\\lVert\", \"\\\\Bigr\\\\rVert\"],\n\t\t[\"\\\\Bigl\\\\Vert\", \"\\\\Bigr\\\\Vert\"],\n\t\t[\"\\\\biggl\\\\langle\", \"\\\\biggr\\\\rangle\"],\n\t\t[\"\\\\biggl|\", \"\\\\biggr|\"],\n\t\t[\"\\\\biggl\\\\lvert\", \"\\\\biggr\\\\rvert\"],\n\t\t[\"\\\\biggl\\\\vert\", \"\\\\biggr\\\\vert\"],\n\t\t[\"\\\\biggl\\\\|\", \"\\\\biggr\\\\|\"],\n\t\t[\"\\\\biggl\\\\lVert\", \"\\\\biggr\\\\rVert\"],\n\t\t[\"\\\\biggl\\\\Vert\", \"\\\\biggr\\\\Vert\"],\n\t\t[\"\\\\Biggl\\\\langle\", \"\\\\Biggr\\\\rangle\"],\n\t\t[\"\\\\Biggl|\", \"\\\\Biggr|\"],\n\t\t[\"\\\\Biggl\\\\lvert\", \"\\\\Biggr\\\\rvert\"],\n\t\t[\"\\\\Biggl\\\\vert\", \"\\\\Biggr\\\\vert\"],\n\t\t[\"\\\\Biggl\\\\|\", \"\\\\Biggr\\\\|\"],\n\t\t[\"\\\\Biggl\\\\lVert\", \"\\\\Biggr\\\\rVert\"],\n\t\t[\"\\\\Biggl\\\\Vert\", \"\\\\Biggr\\\\Vert\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"\\\\left(\", \"\\\\right)\"],\n\t\t[\"\\\\left[\", \"\\\\right]\"],\n\t\t[\"\\\\left\\\\{\", \"\\\\right\\\\}\"],\n\t\t[\"\\\\bigl(\", \"\\\\bigr)\"],\n\t\t[\"\\\\bigl[\", \"\\\\bigr]\"],\n\t\t[\"\\\\bigl\\\\{\", \"\\\\bigr\\\\}\"],\n\t\t[\"\\\\Bigl(\", \"\\\\Bigr)\"],\n\t\t[\"\\\\Bigl[\", \"\\\\Bigr]\"],\n\t\t[\"\\\\Bigl\\\\{\", \"\\\\Bigr\\\\}\"],\n\t\t[\"\\\\biggl(\", \"\\\\biggr)\"],\n\t\t[\"\\\\biggl[\", \"\\\\biggr]\"],\n\t\t[\"\\\\biggl\\\\{\", \"\\\\biggr\\\\}\"],\n\t\t[\"\\\\Biggl(\", \"\\\\Biggr)\"],\n\t\t[\"\\\\Biggl[\", \"\\\\Biggr]\"],\n\t\t[\"\\\\Biggl\\\\{\", \"\\\\Biggr\\\\}\"],\n\t\t[\"\\\\(\", \"\\\\)\"],\n\t\t[\"\\\\[\", \"\\\\]\"],\n\t\t[\"\\\\{\", \"\\\\}\"],\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"`\", \"'\"]\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"$\", \"$\"],\n\t\t[\"`\", \"`\"],\n\t\t[\"_\", \"_\"],\n\t\t[\"*\", \"*\"]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"\\\\\\\\begin{(?!document)([^}]*)}(?!.*\\\\\\\\end{\\\\1})\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*\\\\\\\\end{(?!document)\"\n\t},\n\t\"folding\": {\n\t\t\"offSide\": true,\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*<!--\\\\s*#?region\\\\b.*-->\",\n\t\t\t\"end\": \"^\\\\s*<!--\\\\s*#?endregion\\\\b.*-->\"\n\t\t}\n\t},\n\t\"autoCloseBefore\": \";:.,={}])>\\\\` \\n\\t$\",\n\t\"wordPattern\": {\n\t\t\"pattern\": \"([*_]{1,2})?(\\\\p{Alphabetic}|\\\\p{Number}|\\\\p{Nonspacing_Mark})(((\\\\p{Alphabetic}|\\\\p{Number}|\\\\p{Nonspacing_Mark})|[_])?(\\\\p{Alphabetic}|\\\\p{Number}|\\\\p{Nonspacing_Mark}))*\\\\1\",\n\t\t\"flags\": \"u\"\n\t}\n}\n"
  },
  {
    "path": "extensions/latex/markdown-latex-combined-license.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) Microsoft 2018\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": "extensions/latex/package.json",
    "content": "{\n  \"name\": \"latex\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammars.js\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"tex\",\n        \"aliases\": [\n          \"TeX\",\n          \"tex\"\n        ],\n        \"extensions\": [\n          \".sty\",\n          \".cls\",\n          \".bbx\",\n          \".cbx\"\n        ],\n        \"configuration\": \"latex-language-configuration.json\"\n      },\n      {\n        \"id\": \"latex\",\n        \"aliases\": [\n          \"LaTeX\",\n          \"latex\"\n        ],\n        \"extensions\": [\n          \".tex\",\n          \".ltx\",\n          \".ctx\"\n        ],\n        \"configuration\": \"latex-language-configuration.json\"\n      },\n      {\n        \"id\": \"bibtex\",\n        \"aliases\": [\n          \"BibTeX\",\n          \"bibtex\"\n        ],\n        \"extensions\": [\n          \".bib\"\n        ]\n      },\n      {\n        \"id\": \"cpp_embedded_latex\",\n        \"configuration\": \"latex-cpp-embedded-language-configuration.json\",\n        \"aliases\": []\n      },\n      {\n        \"id\": \"markdown_latex_combined\",\n        \"configuration\": \"markdown-latex-combined-language-configuration.json\",\n        \"aliases\": []\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"tex\",\n        \"scopeName\": \"text.tex\",\n        \"path\": \"./syntaxes/TeX.tmLanguage.json\"\n      },\n      {\n        \"language\": \"latex\",\n        \"scopeName\": \"text.tex.latex\",\n        \"path\": \"./syntaxes/LaTeX.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"source.cpp\": \"cpp_embedded_latex\",\n          \"source.css\": \"css\",\n          \"text.html\": \"html\",\n          \"source.java\": \"java\",\n          \"source.js\": \"javascript\",\n          \"source.julia\": \"julia\",\n          \"source.lua\": \"lua\",\n          \"source.python\": \"python\",\n          \"source.ruby\": \"ruby\",\n          \"source.ts\": \"typescript\",\n          \"text.xml\": \"xml\",\n          \"source.yaml\": \"yaml\",\n          \"meta.embedded.markdown_latex_combined\": \"markdown_latex_combined\"\n        }\n      },\n      {\n        \"language\": \"bibtex\",\n        \"scopeName\": \"text.bibtex\",\n        \"path\": \"./syntaxes/Bibtex.tmLanguage.json\"\n      },\n      {\n        \"language\": \"markdown_latex_combined\",\n        \"scopeName\": \"text.tex.markdown_latex_combined\",\n        \"path\": \"./syntaxes/markdown-latex-combined.tmLanguage.json\"\n      },\n      {\n        \"language\": \"cpp_embedded_latex\",\n        \"scopeName\": \"source.cpp.embedded.latex\",\n        \"path\": \"./syntaxes/cpp-grammar-bailout.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/latex/package.nls.json",
    "content": "{\n\t\"displayName\": \"LaTeX Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching for TeX, LaTeX and BibTeX.\"\n}\n"
  },
  {
    "path": "extensions/latex/syntaxes/Bibtex.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jlelong/vscode-latex-basics/blob/master/syntaxes/Bibtex.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jlelong/vscode-latex-basics/commit/c787db94a56bd93131ce0938046063320a02cc73\",\n\t\"name\": \"BibTeX\",\n\t\"scopeName\": \"text.bibtex\",\n\t\"comment\": \"Grammar based on description from https://github.com/aclements/biblib\\n\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"@(?i:comment)(?=[\\\\s{(])\",\n\t\t\t\"name\": \"comment.block.at-sign.bibtex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((@)(?i:preamble))\\\\s*(\\\\{)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.preamble.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.preamble.begin.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.preamble.end.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preamble.braces.bibtex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field_value\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((@)(?i:preamble))\\\\s*(\\\\()\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.preamble.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.preamble.begin.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.preamble.end.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preamble.parenthesis.bibtex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field_value\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((@)(?i:string))\\\\s*(\\\\{)\\\\s*([a-zA-Z!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~][a-zA-Z0-9!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.string-constant.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.string-constant.begin.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.other.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.string-constant.end.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.string-constant.braces.bibtex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field_value\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((@)(?i:string))\\\\s*(\\\\()\\\\s*([a-zA-Z!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~][a-zA-Z0-9!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.string-constant.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.string-constant.begin.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.other.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.string-constant.end.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.string-constant.parenthesis.bibtex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field_value\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((@)[a-zA-Z!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~][a-zA-Z0-9!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~]*)\\\\s*(\\\\{)\\\\s*([^\\\\s,}]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.entry-type.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.entry.begin.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.entry-key.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.entry.end.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.entry.braces.bibtex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([a-zA-Z!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~][a-zA-Z0-9!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~]*)\\\\s*(\\\\=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.key.bibtex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,}])\",\n\t\t\t\t\t\"name\": \"meta.key-assignment.bibtex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#field_value\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((@)[a-zA-Z!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~][a-zA-Z0-9!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~]*)\\\\s*(\\\\()\\\\s*([^\\\\s,]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.entry-type.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.entry.begin.bibtex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.entry-key.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.entry.end.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.entry.parenthesis.bibtex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([a-zA-Z!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~][a-zA-Z0-9!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~]*)\\\\s*(\\\\=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.key.bibtex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,)])\",\n\t\t\t\t\t\"name\": \"meta.key-assignment.bibtex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#field_value\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"[^@\\\\n]\",\n\t\t\t\"end\": \"(?=@)\",\n\t\t\t\"name\": \"comment.block.bibtex\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"field_value\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_content\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#integer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_var\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"#\",\n\t\t\t\t\t\"name\": \"keyword.operator.bibtex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"integer\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.numeric.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\s*(\\\\d+)\\\\s*\"\n\t\t},\n\t\t\"nested_braces\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_braces\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_content\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_braces\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_braces\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_var\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.variable.bibtex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"[a-zA-Z!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~][a-zA-Z0-9!$&*+\\\\-./:;<>?@\\\\[\\\\\\\\\\\\]^_`|~]*\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/latex/syntaxes/LaTeX.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jlelong/vscode-latex-basics/blob/master/syntaxes/LaTeX.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jlelong/vscode-latex-basics/commit/7b75bae583f3f9802c533e021f882428872c572c\",\n\t\"name\": \"LaTeX\",\n\t\"scopeName\": \"text.tex.latex\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"comment\": \"This scope identifies partially typed commands such as `\\\\tab`. We use this to trigger “Command Completion” only when it makes sense.\",\n\t\t\t\"match\": \"(?<=\\\\\\\\[\\\\w@]|\\\\\\\\[\\\\w@]{2}|\\\\\\\\[\\\\w@]{3}|\\\\\\\\[\\\\w@]{4}|\\\\\\\\[\\\\w@]{5}|\\\\\\\\[\\\\w@]{6})\\\\s\",\n\t\t\t\"name\": \"meta.space-after-command.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)(?:usepackage|documentclass))\\\\b(?=\\\\[|\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.preamble.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preamble.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:\\\\G|(?<=\\\\]))\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"support.class.latex\",\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)(?:include|input))(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.include.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.include.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)((?:sub){0,2}section|(?:sub)?paragraph|chapter|part|addpart|addchap|addsec|minisec|frametitle)(?:\\\\*)?)((?:\\\\[[^\\\\[]*?\\\\]){0,2})(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.section.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"this works OK with all kinds of crazy stuff as long as section is one line\",\n\t\t\t\"contentName\": \"entity.name.section.latex\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.section.$3.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((?:\\\\s*)\\\\\\\\begin\\\\{songs\\\\}\\\\{.*\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.data.environment.songs.latex\",\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{songs\\\\}(?:\\\\s*\\\\n)?)\",\n\t\t\t\"name\": \"meta.function.environment.songs.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\\\\\\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"meta.chord.block.latex support.class.chord.block.environment.latex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\^\",\n\t\t\t\t\t\"name\": \"meta.chord.block.latex support.class.chord.block.environment.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?:^\\\\s*)?\\\\\\\\begin\\\\{(lstlisting|minted|pyglist)\\\\}(?=\\\\[|\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\\\\\end\\\\{\\\\1\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:asy|asymptote))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.asy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.asy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:bash))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:c|cpp))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.cpp.embedded.latex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp.embedded.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:css))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:gnuplot))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.gnuplot\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.gnuplot\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:hs|haskell))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.haskell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.haskell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:html))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"text.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:java))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:jl|julia))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:js|javascript))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:lua))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:py|python|sage))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:rb|ruby))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:rust))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.rust\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:ts|typescript))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.ts\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:xml))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"text.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)((?:yaml))(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:minted|lstlisting|pyglist)\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.yaml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)([a-zA-Z]*)(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.function.embedded.latex\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:lstlisting|minted|pyglist)\\\\})\",\n\t\t\t\t\t\"name\": \"meta.embedded.block.generic.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:asy|asycode)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:asy|asycode)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:asy|asycode)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.asymptote\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.asymptote\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:cppcode)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:cppcode)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:cppcode)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.cpp.embedded.latex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp.embedded.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:dot2tex|dotcode)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:dot2tex|dotcode)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:dot2tex|dotcode)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.dot\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.dot\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:gnuplot)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:gnuplot)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:gnuplot)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.gnuplot\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.gnuplot\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:hscode)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:hscode)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:hscode)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.haskell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.haskell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:javacode|javaverbatim|javablock|javaconcode|javaconsole|javaconverbatim)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:javacode|javaverbatim|javablock|javaconcode|javaconsole|javaconverbatim)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:javacode|javaverbatim|javablock|javaconcode|javaconsole|javaconverbatim)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:jlcode|jlverbatim|jlblock|jlconcode|jlconsole|jlconverbatim)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:jlcode|jlverbatim|jlblock|jlconcode|jlconsole|jlconverbatim)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:jlcode|jlverbatim|jlblock|jlconcode|jlconsole|jlconverbatim)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:juliacode|juliaverbatim|juliablock|juliaconcode|juliaconsole|juliaconverbatim)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:juliacode|juliaverbatim|juliablock|juliaconcode|juliaconsole|juliaconverbatim)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:juliacode|juliaverbatim|juliablock|juliaconcode|juliaconsole|juliaconverbatim)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:luacode)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:luacode)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:luacode)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:pycode|pyverbatim|pyblock|pyconcode|pyconsole|pyconverbatim)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:pycode|pyverbatim|pyblock|pyconcode|pyconsole|pyconverbatim)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:pycode|pyverbatim|pyblock|pyconcode|pyconsole|pyconverbatim)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:pylabcode|pylabverbatim|pylabblock|pylabconcode|pylabconsole|pylabconverbatim)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:pylabcode|pylabverbatim|pylabblock|pylabconcode|pylabconsole|pylabconverbatim)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:pylabcode|pylabverbatim|pylabblock|pylabconcode|pylabconsole|pylabconverbatim)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:sageblock|sagesilent|sageverbatim|sageexample|sagecommandline|python|pythonq|pythonrepl)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:sageblock|sagesilent|sageverbatim|sageexample|sagecommandline|python|pythonq|pythonrepl)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:sageblock|sagesilent|sageverbatim|sageexample|sagecommandline|python|pythonq|pythonrepl)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:scalacode)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:scalacode)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:scalacode)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.scala\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.scala\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{(?:sympycode|sympyverbatim|sympyblock|sympyconcode|sympyconsole|sympyconverbatim)\\\\*?\\\\}(?:\\\\[[a-zA-Z0-9_-]*\\\\])?(?=\\\\[|\\\\{|\\\\s*$)\",\n\t\t\t\"end\": \"\\\\s*\\\\\\\\end\\\\{(?:sympycode|sympyverbatim|sympyblock|sympyconcode|sympyconsole|sympyconverbatim)\\\\*?\\\\}\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=\\\\s*)\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:sympycode|sympyverbatim|sympyblock|sympyconcode|sympyconsole|sympyconverbatim)\\\\*?\\\\})\",\n\t\t\t\t\t\"contentName\": \"source.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\s*\\\\\\\\begin\\\\{((?:[a-zA-Z]*code|lstlisting|minted|pyglist)\\\\*?)\\\\}(?:\\\\[.*\\\\])?(?:\\\\{.*\\\\})?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.function.embedded.latex\",\n\t\t\t\"end\": \"\\\\\\\\end\\\\{\\\\1\\\\}(?:\\\\s*\\\\n)?\",\n\t\t\t\"name\": \"meta.embedded.block.generic.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((?:^\\\\s*)?\\\\\\\\begin\\\\{((?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?))\\\\})(?:\\\\[[^\\\\]]*\\\\]){,2}(?=\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{\\\\2\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:asy|asymptote)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.asy\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.asy\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:bash)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.shell\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.shell\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:c|cpp)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.cpp.embedded.latex\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cpp.embedded.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:css)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:gnuplot)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.gnuplot\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.gnuplot\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:hs|haskell)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.haskell\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.haskell\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:html)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"text.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:java)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.java\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.java\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:jl|julia)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.julia\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:js|javascript)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.js\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:lua)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.lua\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:py|python|sage)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.python\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:rb|ruby)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.ruby\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.ruby\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:rust)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.rust\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.rust\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:ts|typescript)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.ts\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.ts\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:xml)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"text.xml\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:yaml)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"source.yaml\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)(?:__|[a-z\\\\s]*)(?i:tikz|tikzpicture)\",\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"contentName\": \"text.tex.latex\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\\\\s*$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^(\\\\s*)\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.embedded.latex\",\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{(?:RobExt)?(?:CacheMeCode|PlaceholderPathFromCode\\\\*?|PlaceholderFromCode\\\\*?|SetPlaceholderCode\\\\*?)\\\\})\",\n\t\t\t\t\t\t\t\"name\": \"meta.embedded.block.generic.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?:^\\\\s*)?\\\\\\\\begin\\\\{(terminal\\\\*?)\\\\}(?=\\\\[|\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\\\\\end\\\\{\\\\1\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)([a-zA-Z]*)(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.function.embedded.latex\",\n\t\t\t\t\t\"end\": \"^\\\\s*(?=\\\\\\\\end\\\\{terminal\\\\*?\\\\})\",\n\t\t\t\t\t\"name\": \"meta.embedded.block.generic.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)addplot)(?:\\\\+?)((?:\\\\[[^\\\\[]*\\\\]))*\\\\s*(gnuplot)\\\\s*((?:\\\\[[^\\\\[]*\\\\]))*\\\\s*(\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.be.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(\\\\};)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"%\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.percentage.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.gnuplot\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{((?:fboxv|boxedv|V|v|spv)erbatim\\\\*?)\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"markup.raw.verbatim.latex\",\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{\\\\2\\\\})\",\n\t\t\t\"name\": \"meta.function.verbatim.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{VerbatimOut\\\\}\\\\{[^\\\\}]*\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"markup.raw.verbatim.latex\",\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{\\\\VerbatimOut\\\\})\",\n\t\t\t\"name\": \"meta.function.verbatim.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{alltt\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"markup.raw.verbatim.latex\",\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{alltt\\\\})\",\n\t\t\t\"name\": \"meta.function.alltt.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\)[A-Za-z]+\",\n\t\t\t\t\t\"name\": \"support.function.general.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{([Cc]omment)\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"comment.line.percentage.latex\",\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{\\\\2\\\\})\",\n\t\t\t\"name\": \"meta.function.verbatim.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?:\\\\s*)((\\\\\\\\)(?:href|hyperref|hyperimage))(?=\\\\[|\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.url.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"Captures \\\\command[option]{url}{optional category}{optional name}{text}\",\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.hyperlink.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#multiline-optional-arg-no-highlight\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(\\\\{)([^}]*)(\\\\})(?:\\\\{[^}]*\\\\}){2}?(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"markup.underline.link.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.variable.parameter.function.latex\",\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\G|(?<=\\\\]))(?:(\\\\{)[^}]*(\\\\}))?(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.variable.parameter.function.latex\",\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.url.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t},\n\t\t\t\t\"'\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?:\\\\s*)((\\\\\\\\)url)(\\\\{)([^}]*)(\\\\})\",\n\t\t\t\"name\": \"meta.function.link.url.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"These two patterns match the \\\\begin{document} and \\\\end{document} commands, so that the environment matching pattern following them will ignore those commands.\",\n\t\t\t\"match\": \"(\\\\s*\\\\\\\\begin\\\\{document\\\\})\",\n\t\t\t\"name\": \"meta.function.begin-document.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\s*\\\\\\\\end\\\\{document\\\\})\",\n\t\t\t\"name\": \"meta.function.end-document.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?:\\\\s*)((\\\\\\\\)begin)(\\\\{)((?:\\\\+?array|equation|(?:IEEE)?eqnarray|multline|align|aligned|alignat|alignedat|flalign|flaligned|flalignat|split|gather|gathered|\\\\+?cases|(?:display)?math|\\\\+?[a-zA-Z]*matrix|[pbBvV]?NiceMatrix|[pbBvV]?NiceArray|(?:(?:arg)?(?:mini|maxi)))(?:\\\\*|!)?)(\\\\})(\\\\s*\\\\n)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.be.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.math.block.latex support.class.math.block.environment.latex\",\n\t\t\t\"end\": \"(?:\\\\s*)((\\\\\\\\)end)(\\\\{)(\\\\4)(\\\\})(?:\\\\s*\\\\n)?\",\n\t\t\t\"name\": \"meta.function.environment.math.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)&\",\n\t\t\t\t\t\"name\": \"keyword.control.equation.align.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"keyword.control.equation.newline.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#definition-label\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?:\\\\s*)(\\\\\\\\begin\\\\{empheq\\\\}(?:\\\\[.*\\\\])?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.math.block.latex support.class.math.block.environment.latex\",\n\t\t\t\"end\": \"(?:\\\\s*)(\\\\\\\\end\\\\{empheq\\\\})\",\n\t\t\t\"name\": \"meta.function.environment.math.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)&\",\n\t\t\t\t\t\"name\": \"keyword.control.equation.align.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"keyword.control.equation.newline.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#definition-label\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{(tabular[xy*]?|xltabular|longtable|(?:long)?tabu|(?:long|tall)?tblr|NiceTabular[X*]?|booktabs)\\\\}(\\\\s*\\\\n)?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.data.environment.tabular.latex\",\n\t\t\t\"end\": \"(\\\\s*\\\\\\\\end\\\\{(\\\\2)\\\\}(?:\\\\s*\\\\n)?)\",\n\t\t\t\"name\": \"meta.function.environment.tabular.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)&\",\n\t\t\t\t\t\"name\": \"keyword.control.table.cell.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"keyword.control.table.newline.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{(itemize|enumerate|description|list)\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{\\\\2\\\\}(?:\\\\s*\\\\n)?)\",\n\t\t\t\"name\": \"meta.function.environment.list.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{tikzpicture\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{tikzpicture\\\\}(?:\\\\s*\\\\n)?)\",\n\t\t\t\"name\": \"meta.function.environment.latex.tikz\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{frame\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{frame\\\\})\",\n\t\t\t\"name\": \"meta.function.environment.frame.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{(mpost\\\\*?)\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{\\\\2\\\\}(?:\\\\s*\\\\n)?)\",\n\t\t\t\"name\": \"meta.function.environment.latex.mpost\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{markdown\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.embedded.internal_only_markdown_latex_combined\",\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{markdown\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex.internal_only_markdown_latex_combined\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\s*\\\\\\\\begin\\\\{(\\\\p{Alphabetic}+\\\\*?)\\\\})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#begin-env-tokenizer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\\\\\end\\\\{\\\\2\\\\}(?:\\\\s*\\\\n)?)\",\n\t\t\t\"name\": \"meta.function.environment.general.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.function.general.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"((\\\\\\\\)(?:newcommand|renewcommand|(?:re)?newrobustcmd|DeclareRobustCommand))\\\\*?({)((\\\\\\\\)[^}]*)(})\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)marginpar)((?:\\\\[[^\\\\[]*?\\\\])*)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.marginpar.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.marginpar.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.paragraph.margin.latex\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.marginpar.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)footnote)((?:\\\\[[^\\\\[]*?\\\\])*)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.footnote.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.footnote.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"entity.name.footnote.latex\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.footnote.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)emph)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.emph.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.emph.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"markup.italic.emph.latex\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.emph.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.emph.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)textit)(\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.textit.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.textit.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"We put the keyword in a capture and name this capture, so that disabling spell checking for “keyword” won't be inherited by the argument to \\\\textit{...}.\\n\\nPut specific matches for particular LaTeX keyword.functions before the last two more general functions\",\n\t\t\t\"contentName\": \"markup.italic.textit.latex\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.textit.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.textit.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)textbf)(\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.textbf.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.textbf.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"markup.bold.textbf.latex\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.textbf.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.textbf.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)texttt)(\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.texttt.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.texttt.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"markup.raw.texttt.latex\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.texttt.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.texttt.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.other.item.latex\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\\\\\)item\\\\b\",\n\t\t\t\"name\": \"meta.scope.item.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)(?:[aA]uto|foot|full|no|ref|short|[tT]ext|[pP]aren|[sS]mart)?[cC]ite(?:al)?(?:p|s|t|author|year(?:par)?|title)?[ANP]*\\\\*?)((?:(?:\\\\([^\\\\)]*\\\\)){0,2}(?:\\\\[[^\\\\]]*\\\\]){0,2}\\\\{[\\\\p{Alphabetic}\\\\p{Number}_:.-]*\\\\})*)(<[^\\\\]<>]*>)?((?:\\\\[[^\\\\]]*\\\\])*)(\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.cite.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#autocites-arg\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-angle-no-highlight\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket-no-highlight\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.citation.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((%).*)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.line.percentage.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\\p{Alphabetic}\\\\p{Number}:.-]+\",\n\t\t\t\t\t\"name\": \"constant.other.reference.citation.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)bibentry)(\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.cite.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.citation.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\\p{Alphabetic}\\\\p{Number}:.]+\",\n\t\t\t\t\t\"name\": \"constant.other.reference.citation.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)(?:\\\\w*[rR]ef\\\\*?))(?:\\\\[[^\\\\]]*\\\\])?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.ref.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.reference.label.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\\p{Alphabetic}\\\\p{Number}\\\\.,:/*!^_-]\",\n\t\t\t\t\t\"name\": \"constant.other.reference.label.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#definition-label\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)(?:verb|Verb|spverb)\\\\*?)\\\\s*((\\\\\\\\)scantokens)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"markup.raw.verb.latex\",\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.verb.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"markup.raw.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"((\\\\\\\\)(?:verb|Verb|spverb)\\\\*?)\\\\s*((?<=\\\\s)\\\\S|[^a-zA-Z])(.*?)(\\\\3|$)\",\n\t\t\t\"name\": \"meta.function.verb.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"markup.raw.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"markup.raw.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"((\\\\\\\\)(?:mint|mintinline))((?:\\\\[[^\\\\[]*?\\\\])?)(\\\\{)[a-zA-Z]*(\\\\})(?:(?:([^a-zA-Z\\\\{])(.*?)(\\\\6))|(?:(\\\\{)(.*?)(\\\\})))\",\n\t\t\t\"name\": \"meta.function.verb.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"markup.raw.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"markup.raw.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"((\\\\\\\\)[a-z]+inline)((?:\\\\[[^\\\\[]*?\\\\])?)(?:(?:([^a-zA-Z\\\\{])(.*?)(\\\\4))|(?:(\\\\{)(.*?)(\\\\})))\",\n\t\t\t\"name\": \"meta.function.verb.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"source.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"source.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"((\\\\\\\\)(?:(?:py|pycon|pylab|pylabcon|sympy|sympycon)[cv]?|pyq|pycq|pyif))((?:\\\\[[^\\\\[]*?\\\\])?)(?:(?:([^a-zA-Z\\\\{])(.*?)(\\\\4))|(?:(\\\\{)(.*?)(\\\\})))\",\n\t\t\t\"name\": \"meta.function.verb.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"source.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"source.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.verb.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"((\\\\\\\\)(?:jl|julia)[cv]?)((?:\\\\[[^\\\\[]*?\\\\])?)(?:(?:([^a-zA-Z\\\\{])(.*?)(\\\\4))|(?:(\\\\{)(.*?)(\\\\})))\",\n\t\t\t\"name\": \"meta.function.verb.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\\\\\)(?:directlua|luadirect))(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.verb.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"source.lua\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\\\\\(?:newline|pagebreak|clearpage|linebreak|pause)(?:\\\\b)\",\n\t\t\t\"name\": \"keyword.control.layout.latex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\\\\\\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\\\\\\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.math.block.latex support.class.math.block.environment.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\$\\\\$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\$\\\\$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.math.block.latex support.class.math.block.environment.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\$\",\n\t\t\t\t\t\"name\": \"constant.character.escape.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.math.block.tex support.class.math.block.tex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\$\",\n\t\t\t\t\t\"name\": \"constant.character.escape.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\\\\\\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\\\\\\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.math.block.latex support.class.math.block.environment.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\\\\\)(text(s(terling|ixoldstyle|urd|e(ction|venoldstyle|rvicemark))|yen|n(ineoldstyle|umero|aira)|c(ircledP|o(py(left|right)|lonmonetary)|urrency|e(nt(oldstyle)?|lsius))|t(hree(superior|oldstyle|quarters(emdash)?)|i(ldelow|mes)|w(o(superior|oldstyle)|elveudash)|rademark)|interrobang(down)?|zerooldstyle|o(hm|ne(superior|half|oldstyle|quarter)|penbullet|rd(feminine|masculine))|d(i(scount|ed|v(orced)?)|o(ng|wnarrow|llar(oldstyle)?)|egree|agger(dbl)?|blhyphen(char)?)|uparrow|p(ilcrow|e(so|r(t(housand|enthousand)|iodcentered))|aragraph|m)|e(stimated|ightoldstyle|uro)|quotes(traight(dblbase|base)|ingle)|f(iveoldstyle|ouroldstyle|lorin|ractionsolidus)|won|l(not|ira|e(ftarrow|af)|quill|angle|brackdbl)|a(s(cii(caron|dieresis|acute|grave|macron|breve)|teriskcentered)|cutedbl)|r(ightarrow|e(cipe|ferencemark|gistered)|quill|angle|brackdbl)|g(uarani|ravedbl)|m(ho|inus|u(sicalnote)?|arried)|b(igcircle|orn|ullet|lank|a(ht|rdbl)|rokenbar)))\\\\b\",\n\t\t\t\"name\": \"constant.character.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\\\\\)(?:[cgl]_+[_\\\\p{Alphabetic}@]+_[a-z]+|[qs]_[_\\\\p{Alphabetic}@]+[\\\\p{Alphabetic}@])\",\n\t\t\t\"name\": \"variable.other.latex3.latex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.column-specials.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.column-specials.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?:<|>)(\\\\{)\\\\$(\\\\})\",\n\t\t\t\"name\": \"meta.column-specials.latex\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"text.tex\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"autocites-arg\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#optional-arg-parenthesis-no-highlight\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket-no-highlight\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.reference.citation.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#autocites-arg\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"((?:\\\\([^\\\\)]*\\\\)){0,2})((?:\\\\[[^\\\\]]*\\\\]){0,2})(\\\\{)([\\\\p{Alphabetic}\\\\p{Number}_:.-]+)(\\\\})(.*)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"begin-env-tokenizer\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.be.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\s*((\\\\\\\\)(?:begin|end))(\\\\{)(\\\\p{Alphabetic}+\\\\*?)(\\\\})(?:(\\\\[)([^\\\\]]*)(\\\\])){,2}(?:(\\\\{)([^{}]*)(\\\\}))?\"\n\t\t},\n\t\t\"definition-label\": {\n\t\t\t\"begin\": \"((\\\\\\\\)z?label)((?:\\\\[[^\\\\[]*?\\\\])*)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.label.latex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.latex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#optional-arg-bracket\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.definition.label.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\\p{Alphabetic}\\\\p{Number}\\\\.,:/*!^_-]\",\n\t\t\t\t\t\"name\": \"variable.parameter.definition.label.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"multiline-optional-arg\": {\n\t\t\t\"begin\": \"\\\\G\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"variable.parameter.function.latex\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.optional.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"multiline-optional-arg-no-highlight\": {\n\t\t\t\"begin\": \"\\\\G\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.optional.latex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"optional-arg-bracket\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\[)([^\\\\[]*?)(\\\\])\",\n\t\t\t\t\t\"name\": \"meta.parameter.optional.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"optional-arg-parenthesis\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\()([^\\\\(]*?)(\\\\))\",\n\t\t\t\t\t\"name\": \"meta.parameter.optional.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"optional-arg-bracket-no-highlight\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\[)[^\\\\[]*?(\\\\])\",\n\t\t\t\t\t\"name\": \"meta.parameter.optional.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"optional-arg-angle-no-highlight\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(<)[^<]*?(>)\",\n\t\t\t\t\t\"name\": \"meta.parameter.optional.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"optional-arg-parenthesis-no-highlight\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.begin.latex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.optional.end.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\()[^\\\\(]*?(\\\\))\",\n\t\t\t\t\t\"name\": \"meta.parameter.optional.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/latex/syntaxes/TeX.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jlelong/vscode-latex-basics/blob/master/syntaxes/TeX.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jlelong/vscode-latex-basics/commit/df6ef817c932d24da5cc72927344a547e463cc65\",\n\t\"name\": \"TeX\",\n\t\"scopeName\": \"text.tex\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"begin\": \"(?<=^\\\\s*)((\\\\\\\\)iffalse)(?!\\\\s*[{}]\\\\s*\\\\\\\\fi)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.tex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"comment.line.percentage.tex\",\n\t\t\t\"end\": \"((\\\\\\\\)(?:else|fi))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.tex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conditionals\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\\\\\)(backmatter|csname|else|endcsname|fi|frontmatter|mainmatter|unless|if(case|cat|csname|defined|dim|eof|false|fontchar|hbox|hmode|inner|mmode|num|odd|true|vbox|vmode|void|x)?)(?![a-zA-Z@])\",\n\t\t\t\"name\": \"keyword.control.tex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.catcode.tex\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.tex\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.tex\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"constant.numeric.category.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"((\\\\\\\\)catcode)`(?:\\\\\\\\)?.(=)(\\\\d+)\",\n\t\t\t\"name\": \"meta.catcode.tex\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comment\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"[\\\\[\\\\]]\",\n\t\t\t\"name\": \"punctuation.definition.brackets.tex\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(\\\\$\\\\$|\\\\$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\1)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.math.block.tex support.class.math.block.tex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\$\",\n\t\t\t\t\t\"name\": \"constant.character.escape.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\\\\\\\\\\\\\\",\n\t\t\t\"name\": \"keyword.control.newline.tex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\\\\\)_*[\\\\p{Alphabetic}@]+(?:_[\\\\p{Alphabetic}@]+)*:[NncVvoxefTFpwD]*\",\n\t\t\t\"name\": \"support.class.general.latex3.tex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\.)[\\\\p{Alphabetic}@]+(?:_[\\\\p{Alphabetic}@]+)*:[NncVvoxefTFpwD]*\",\n\t\t\t\"name\": \"support.class.general.latex3.tex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\\\\\)(?:[,;]|(?:[\\\\p{Alphabetic}@]+))\",\n\t\t\t\"name\": \"support.function.general.tex\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\\\\\)[^a-zA-Z@]\",\n\t\t\t\"name\": \"constant.character.escape.tex\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"braces\": {\n\t\t\t\"begin\": \"(?<!\\\\\\\\)\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.group.begin.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!\\\\\\\\)\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.group.end.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.group.braces.tex\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#braces\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=%)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.tex\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"%:?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.percentage.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(%!TEX) (\\\\S*) =\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.percentage.directive.tex\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"conditionals\": {\n\t\t\t\"begin\": \"(?<=^\\\\s*)\\\\\\\\if[a-z]*\",\n\t\t\t\"end\": \"(?<=^\\\\s*)\\\\\\\\fi\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conditionals\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"math\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((\\\\\\\\)(?:text|mbox))(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.tex meta.text.normal.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.text.normal.tex\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.tex meta.text.normal.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#math\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\{|\\\\\\\\}\",\n\t\t\t\t\t\"name\": \"punctuation.math.bracket.pair.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\(left|right|((big|bigg|Big|Bigg)[lr]?))([\\\\(\\\\[\\\\<\\\\>\\\\]\\\\)\\\\.\\\\|]|\\\\\\\\[{}|]|\\\\\\\\[lr]?[Vv]ert|\\\\\\\\[lr]angle)\",\n\t\t\t\t\t\"name\": \"punctuation.math.bracket.pair.big.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\)(s(s(earrow|warrow|lash)|h(ort(downarrow|uparrow|parallel|leftarrow|rightarrow|mid)|arp)|tar|i(gma|m(eq)?)|u(cc(sim|n(sim|approx)|curlyeq|eq|approx)?|pset(neq(q)?|plus(eq)?|eq(q)?)?|rd|m|bset(neq(q)?|plus(eq)?|eq(q)?)?)|p(hericalangle|adesuit)|e(tminus|arrow)|q(su(pset(eq)?|bset(eq)?)|c(up|ap)|uare)|warrow|m(ile|all(s(etminus|mile)|frown)))|h(slash|ook(leftarrow|rightarrow)|eartsuit|bar)|R(sh|ightarrow|e|bag)|Gam(e|ma)|n(s(hort(parallel|mid)|im|u(cc(eq)?|pseteq(q)?|bseteq))|Rightarrow|n(earrow|warrow)|cong|triangle(left(eq(slant)?)?|right(eq(slant)?)?)|i(plus)?|u|p(lus|arallel|rec(eq)?)|e(q|arrow|g|xists)|v(dash|Dash)|warrow|le(ss|q(slant|q)?|ft(arrow|rightarrow))|a(tural|bla)|VDash|rightarrow|g(tr|eq(slant|q)?)|mid|Left(arrow|rightarrow))|c(hi|irc(eq|le(d(circ|S|dash|ast)|arrow(left|right)))?|o(ng|prod|lon|mplement)|dot(s|p)?|u(p|r(vearrow(left|right)|ly(eq(succ|prec)|vee(downarrow|uparrow)?|wedge(downarrow|uparrow)?)))|enterdot|lubsuit|ap)|Xi|Maps(to(char)?|from(char)?)|B(ox|umpeq|bbk)|t(h(ick(sim|approx)|e(ta|refore))|imes|op|wohead(leftarrow|rightarrow)|a(u|lloblong)|riangle(down|q|left(eq(slant)?)?|right(eq(slant)?)?)?)|i(n(t(er(cal|leave))?|plus|fty)?|ota|math)|S(igma|u(pset|bset))|zeta|o(slash|times|int|dot|plus|vee|wedge|lessthan|greaterthan|m(inus|ega)|b(slash|long|ar))|d(i(v(ideontimes)?|a(g(down|up)|mond(suit)?)|gamma)|o(t(plus|eq(dot)?)|ublebarwedge|wn(harpoon(left|right)|downarrows|arrow))|d(ots|agger)|elta|a(sh(v|leftarrow|rightarrow)|leth|gger))|Y(down|up|left|right)|C(up|ap)|u(n(lhd|rhd)|p(silon|harpoon(left|right)|downarrow|uparrows|lus|arrow)|lcorner|rcorner)|jmath|Theta|Im|p(si|hi|i(tchfork)?|erp|ar(tial|allel)|r(ime|o(d|pto)|ec(sim|n(sim|approx)|curlyeq|eq|approx)?)|m)|e(t(h|a)|psilon|q(slant(less|gtr)|circ|uiv)|ll|xists|mptyset)|Omega|D(iamond|ownarrow|elta)|v(d(ots|ash)|ee(bar)?|Dash|ar(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|curly(vee|wedge)|t(heta|imes|riangle(left|right)?)|o(slash|circle|times|dot|plus|vee|wedge|lessthan|ast|greaterthan|minus|b(slash|ar))|p(hi|i|ropto)|epsilon|kappa|rho|bigcirc))|kappa|Up(silon|downarrow|arrow)|Join|f(orall|lat|a(t(s(emi|lash)|bslash)|llingdotseq)|rown)|P(si|hi|i)|w(p|edge|r)|l(hd|n(sim|eq(q)?|approx)|ceil|times|ightning|o(ng(left(arrow|rightarrow)|rightarrow|maps(to|from))|zenge|oparrow(left|right))|dot(s|p)|e(ss(sim|dot|eq(qgtr|gtr)|approx|gtr)|q(slant|q)?|ft(slice|harpoon(down|up)|threetimes|leftarrows|arrow(t(ail|riangle))?|right(squigarrow|harpoons|arrow(s|triangle|eq)?))|adsto)|vertneqq|floor|l(c(orner|eil)|floor|l|bracket)?|a(ngle|mbda)|rcorner|bag)|a(s(ymp|t)|ngle|pprox(eq)?|l(pha|eph)|rrownot|malg)|V(dash|vdash)|r(h(o|d)|ceil|times|i(singdotseq|ght(s(quigarrow|lice)|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(t(ail|riangle))?|rightarrows))|floor|angle|r(ceil|parenthesis|floor|bracket)|bag)|g(n(sim|eq(q)?|approx)|tr(sim|dot|eq(qless|less)|less|approx)|imel|eq(slant|q)?|vertneqq|amma|g(g)?)|Finv|xi|m(ho|i(nuso|d)|o(o|dels)|u(ltimap)?|p|e(asuredangle|rge)|aps(to|from(char)?))|b(i(n(dnasrepma|ampersand)|g(s(tar|qc(up|ap))|nplus|c(irc|u(p|rly(vee|wedge))|ap)|triangle(down|up)|interleave|o(times|dot|plus)|uplus|parallel|vee|wedge|box))|o(t|wtie|x(slash|circle|times|dot|plus|empty|ast|minus|b(slash|ox|ar)))|u(llet|mpeq)|e(cause|t(h|ween|a))|lack(square|triangle(down|left|right)?|lozenge)|a(ck(s(im(eq)?|lash)|prime|epsilon)|r(o|wedge))|bslash)|L(sh|ong(left(arrow|rightarrow)|rightarrow|maps(to|from))|eft(arrow|rightarrow)|leftarrow|ambda|bag)|Arrownot)(?![a-zA-Z@])\",\n\t\t\t\t\t\"name\": \"constant.character.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\)(sum|prod|coprod|int|oint|bigcap|bigcup|bigsqcup|bigvee|bigwedge|bigodot|bigotimes|bogoplus|biguplus)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.character.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\)(arccos|arcsin|arctan|arg|cos|cosh|cot|coth|csc|deg|det|dim|exp|gcd|hom|inf|ker|lg|lim|liminf|limsup|ln|log|max|min|pr|sec|sin|sinh|sup|tan|tanh)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.other.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((\\\\\\\\)Sexpr(\\\\{))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.sexpr.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"support.function.sexpr.math.tex\",\n\t\t\t\t\t\"end\": \"(((\\\\})))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.sexpr.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.line.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?!\\\\})\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\t\t\"name\": \"source.r\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\)(?!begin\\\\{|verb)([A-Za-z]+)\",\n\t\t\t\t\t\"name\": \"constant.other.general.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)\\\\{\",\n\t\t\t\t\t\"name\": \"punctuation.math.begin.bracket.curly.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)\\\\}\",\n\t\t\t\t\t\"name\": \"punctuation.math.end.bracket.curly.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)\\\\(\",\n\t\t\t\t\t\"name\": \"punctuation.math.begin.bracket.round.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)\\\\)\",\n\t\t\t\t\t\"name\": \"punctuation.math.end.bracket.round.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(([0-9]*[\\\\.][0-9]+)|[0-9]+)\",\n\t\t\t\t\t\"name\": \"constant.numeric.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\\+\\\\*/_\\\\^-]\",\n\t\t\t\t\t\"name\": \"punctuation.math.operator.tex\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/latex/syntaxes/cpp-grammar-bailout.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jlelong/vscode-latex-basics/blob/master/syntaxes/cpp-grammar-bailout.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jlelong/vscode-latex-basics/commit/dfa69a16a1154dbc820dc1111d72faa6954dd1e2\",\n\t\"name\": \"C++\",\n\t\"scopeName\": \"source.cpp.embedded.latex\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#ever_present_context\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#destructor_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#simple_array_assignment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#operator_overload\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#using_namespace\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#type_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#using_name\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace_alias\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespace_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#extern_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_class\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_struct\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#typedef_union\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#misc_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#standard_declares\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#class_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#struct_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#union_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#enum_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_isolated_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_definition\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#template_explicit_instantiation\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#access_control_keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#static_assert\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#assembly\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function_pointer\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#evaluation_context\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"access_control_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(((?:protected|private|public))(?:\\\\s+)?(:))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.control.$4.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.access.control.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"alignas_attribute\": {\n\t\t\t\"begin\": \"alignas\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignas_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignas.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"alignof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignof.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assembly\": {\n\t\t\t\"begin\": \"(\\\\b(?:__asm__|asm)\\\\b)(?:\\\\s+)?((?:volatile)?)\",\n\t\t\t\"end\": \"(?!\\\\G)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.asm.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.asm.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\n|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(R?)(\\\")\",\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.assembly.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.assembly.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\t\t\"contentName\": \"meta.embedded.assembly\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.asm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.x86_64\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.arm\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#backslash_escapes\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.assembly.inner.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.assembly.inner.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.asm.label.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.colon.assembly.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assignment_operator\": {\n\t\t\t\"match\": \"\\\\=\",\n\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t},\n\t\t\"attributes_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cpp_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gcc_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ms_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#alignas_attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"backslash_escapes\": {\n\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\"name\": \"constant.character.escape\"\n\t\t},\n\t\t\"block\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"end\": \"}|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\*)\",\n\t\t\t\"end\": \"\\\\*\\\\/|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\*]*\\\\n\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"applyEndPatternLast\": 1\n\t\t},\n\t\t\"builtin_storage_type_initilizer\": {\n\t\t\t\"begin\": \"\\\\s*+(?<!\\\\w)(?:(?:(?:((?:unsigned|wchar_t|double|signed|short|float|auto|void|long|char|bool|int))|((?:uint_least32_t|uint_least64_t|uint_least16_t|uint_fast64_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|uint_fast16_t|uint_fast32_t|int_least8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|int_fast8_t|suseconds_t|useconds_t|uintmax_t|uintmax_t|in_port_t|uintmax_t|in_addr_t|blksize_t|uintptr_t|intmax_t|intptr_t|blkcnt_t|intmax_t|u_quad_t|uint16_t|uint32_t|uint64_t|ssize_t|fixpt_t|qaddr_t|u_short|int16_t|int32_t|int64_t|uint8_t|daddr_t|caddr_t|swblk_t|clock_t|segsz_t|nlink_t|time_t|u_long|ushort|quad_t|mode_t|size_t|u_char|int8_t|u_int|uid_t|off_t|pid_t|gid_t|dev_t|div_t|key_t|ino_t|id_t|id_t|uint)))|((?:pthread_rwlockattr_t|pthread_mutexattr_t|pthread_condattr_t|pthread_rwlock_t|pthread_mutex_t|pthread_cond_t|pthread_attr_t|pthread_once_t|pthread_key_t|pthread_t)))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)\\\\s*+(?<!\\\\w)(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)case(?!\\\\w))\",\n\t\t\t\"end\": \":|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.case.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.class.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.class.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operator_overload\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)class(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comma\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t},\n\t\t\"comma_in_template_argument\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.comma.template.argument.cpp\"\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?:\\\\s+)?+(\\\\/\\\\/[!\\\\/]+)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"comment.line.double-slash.documentation.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*\\\\/)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\s+)?+\\\\/\\\\*[!*]+(?:(?:\\\\n|$)|(?=\\\\s))\",\n\t\t\t\t\t\"end\": \"[!*]*\\\\*\\\\/|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.documentation.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f\\\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\\\$|\\\\#|<|>|%|\\\"|\\\\.|=|::|\\\\||\\\\-\\\\-|\\\\-\\\\-\\\\-)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|em|e))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.italic.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]b)\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.bold.doxygen.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:c|p))\\\\s+(\\\\S+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"markup.inline.raw.string.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<=[\\\\s*!\\\\/])[\\\\\\\\@]param)(?:\\\\s*\\\\[((?:,?(?:\\\\s+)?(?:in|out)(?:\\\\s+)?)+)\\\\])?(\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:(,)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"in|out\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.parameter.direction.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|throws|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=[\\\\s*!\\\\/])[\\\\\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|startuml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*\\\\})?\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.doxygen.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\b[A-Z]+:|@[a-z_]+:)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.gtkdoc.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#emacs_file_banner\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#invalid_comment_end\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_bracket_call\": {\n\t\t\t\"match\": \"(?!class|struct|union|enum|explicit|new|delete|operator|template|throw|decltype|typename|override|final)\\\\b(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.object.construction.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.object.construction.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.object.construction.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.object.construction.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$19.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"constructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:constexpr|consteval|explicit|mutable|virtual|inline|friend)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.function.constructor.cpp entity.name.function.definition.special.constructor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constructor_root\": {\n\t\t\t\"begin\": \"\\\\s*+((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<8>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))::((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\10)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.constructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.initializers.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(\\\\{)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.parameter.initialization\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.constructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.constructor\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.constructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"control_flow_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:co_return|co_yield|co_await|continue|default|switch|return|catch|while|throw|break|case|goto|else|for|try|if|do)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"cpp_attributes\": {\n\t\t\t\"begin\": \"\\\\[\\\\[\",\n\t\t\t\"end\": \"\\\\]\\\\]|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"curly_initializer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\{)\",\n\t\t\t\"end\": \"\\\\}|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.curly.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.curly.initializer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.initialization.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\.)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\",\n\t\t\t\t\t\"end\": \"(?:(,)|(?=\\\\}))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.initializer.cpp variable.parameter.initializer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.initializer.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.initialization.parameter.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"d9bc4796b0b_module_import\": {\n\t\t\t\"match\": \"^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((import))(?:\\\\s+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/)))|((\\\\\\\")[^\\\\\\\"]*(\\\\\\\"?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/))))|(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\.(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;)))))|((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;))))(?:\\\\s+)?(;?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.import.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.import.cpp\"\n\t\t},\n\t\t\"decltype\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.other.decltype.cpp storage.type.decltype.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decltype_specifier\": {\n\t\t\t\"begin\": \"((?<!\\\\w)decltype(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.other.decltype.cpp storage.type.decltype.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.decltype.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.decltype\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"default_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)default(?!\\\\w))\",\n\t\t\t\"end\": \":|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.default.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.case.default.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.case.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_inline\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:constexpr|consteval|explicit|mutable|virtual|inline|friend)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)(~(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.function.destructor.cpp entity.name.function.definition.special.member.destructor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructor_root\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(((?>(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))::((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))~(?:\\\\14)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\())\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?=:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=:)~(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.member.destructor.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.member.destructor\",\n\t\t\t\t\t\t\t\"patterns\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.member.destructor.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"diagnostic\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?:error|warning)))\\\\b(?:\\\\s+)?\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$7.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.diagnostic.$reference(directive).cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"end\": \"(?:(\\\")|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"end\": \"(?:(')|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"string.unquoted.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"emacs_file_banner\": {\n\t\t\t\"match\": \"(?:(^(?:\\\\s+)?((\\\\/\\\\/)(?:\\\\s+)?((?:[#;\\\\/=*C~]+)++(?![#;\\\\/=*C~]))(?:\\\\s+)?.+(?:\\\\s+)?(?:\\\\4)(?:\\\\s+)?(?:\\\\n|$)))|(^(?:\\\\s+)?((\\\\/\\\\*)(?:\\\\s+)?((?:[#;\\\\/=*C~]+)++(?![#;\\\\/=*C~]))(?:\\\\s+)?.+(?:\\\\s+)?(?:\\\\8)(?:\\\\s+)?\\\\*\\\\/)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.banner.double-slash.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.line.double-slash.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.banner.character.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.banner.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.line.banner.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"meta.banner.character.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"empty_square_brackets\": {\n\t\t\t\"name\": \"storage.modifier.array.bracket.square\",\n\t\t\t\"match\": \"(?<!delete)\\\\[(?:\\\\s+)?\\\\]\"\n\t\t},\n\t\t\"enum_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)enum(?!\\\\w))(?:\\\\s+(class|struct))?(?:(?:\\\\s+|((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\))))|(?={))(?:\\\\s+)?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)(?:(?:\\\\s+)?(:)(?:\\\\s+)?(?:((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::))?(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))?\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.enum-key.$2.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.type-specifier.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"storage.type.integral.$17.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.enum.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.enum.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.enum.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#enumerator_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.enum.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"enum_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)enum(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"enumerator_list\": {\n\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?(?:\\\\s+)?(?:(\\\\=)(?:\\\\s+)?(.+?)(?:\\\\s+)?)?(?:(?:((?:[,;](?!')|\\\\n))|(?=\\\\}[^']))|(?=(?:\\\\/\\\\/|\\\\/\\\\*)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.enummember.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.enum.definition.cpp\"\n\t\t},\n\t\t\"evaluation_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constructor_bracket_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_constructor_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_array_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unknown_variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ever_present_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"exception_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:throw|catch|try)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"extern_block\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(extern)(?=\\\\s*\\\\\\\")\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.extern.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"storage.type.extern.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.extern.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.extern.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.extern.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.extern.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_body_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_array_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using_namespace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace_alias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_struct\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typedef_union\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#misc_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#standard_declares\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#struct_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#union_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#access_control_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assembly\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#over_qualified_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#goto_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#label\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)([A-Z][A-Z_0-9]*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Wthread_local|^thread_local|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wsynchronized|^synchronized|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wconstinit|^constinit|\\\\Wco_return|^co_return|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\Wnamespace|^namespace|\\\\Wblksize_t|^blksize_t|\\\\Wco_return|^co_return|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wtemplate|^template|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Wswblk_t|^swblk_t|\\\\Wvirtual|^virtual|\\\\Wssize_t|^ssize_t|\\\\Wconcept|^concept|\\\\Wmutable|^mutable|\\\\Wfixpt_t|^fixpt_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wtypedef|^typedef|\\\\Wdaddr_t|^daddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wqaddr_t|^qaddr_t|\\\\Wdefault|^default|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wu_short|^u_short|\\\\Wwchar_t|^wchar_t|\\\\Wprivate|^private|\\\\W__asm__|^__asm__|\\\\Walignas|^alignas|\\\\Walignof|^alignof|\\\\Wmutable|^mutable|\\\\Wnullptr|^nullptr|\\\\Wclock_t|^clock_t|\\\\Wmode_t|^mode_t|\\\\Wpublic|^public|\\\\Wsize_t|^size_t|\\\\Wdouble|^double|\\\\Wquad_t|^quad_t|\\\\Wstatic|^static|\\\\Wtime_t|^time_t|\\\\Wmodule|^module|\\\\Wimport|^import|\\\\Wexport|^export|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wxor_eq|^xor_eq|\\\\Wand_eq|^and_eq|\\\\Wreturn|^return|\\\\Wfriend|^friend|\\\\Wnot_eq|^not_eq|\\\\Wsigned|^signed|\\\\Wstruct|^struct|\\\\Wint8_t|^int8_t|\\\\Wushort|^ushort|\\\\Wswitch|^switch|\\\\Wu_long|^u_long|\\\\Wtypeid|^typeid|\\\\Wu_char|^u_char|\\\\Wsizeof|^sizeof|\\\\Wbitand|^bitand|\\\\Wdelete|^delete|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wshort|^short|\\\\Wbreak|^break|\\\\Wcatch|^catch|\\\\Wcompl|^compl|\\\\Wwhile|^while|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wor_eq|^or_eq|\\\\Wconst|^const|\\\\Wthrow|^throw|\\\\Wbitor|^bitor|\\\\Wu_int|^u_int|\\\\Wusing|^using|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wfloat|^float|\\\\Wlong|^long|\\\\Wgoto|^goto|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wenum|^enum|\\\\Wtrue|^true|\\\\Wchar|^char|\\\\Wid_t|^id_t|\\\\WNULL|^NULL|\\\\Wthis|^this|\\\\Wbool|^bool|\\\\Welse|^else|\\\\Wfor|^for|\\\\Wnew|^new|\\\\Wnot|^not|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wasm|^asm|\\\\Wint|^int|\\\\Wtry|^try|\\\\Wdo|^do|\\\\Wif|^if|\\\\Wor|^or)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.upper-case.cpp entity.name.function.call.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Wthread_local|^thread_local|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wsynchronized|^synchronized|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wconstinit|^constinit|\\\\Wco_return|^co_return|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\Wnamespace|^namespace|\\\\Wblksize_t|^blksize_t|\\\\Wco_return|^co_return|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wtemplate|^template|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Wswblk_t|^swblk_t|\\\\Wvirtual|^virtual|\\\\Wssize_t|^ssize_t|\\\\Wconcept|^concept|\\\\Wmutable|^mutable|\\\\Wfixpt_t|^fixpt_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wtypedef|^typedef|\\\\Wdaddr_t|^daddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wqaddr_t|^qaddr_t|\\\\Wdefault|^default|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wu_short|^u_short|\\\\Wwchar_t|^wchar_t|\\\\Wprivate|^private|\\\\W__asm__|^__asm__|\\\\Walignas|^alignas|\\\\Walignof|^alignof|\\\\Wmutable|^mutable|\\\\Wnullptr|^nullptr|\\\\Wclock_t|^clock_t|\\\\Wmode_t|^mode_t|\\\\Wpublic|^public|\\\\Wsize_t|^size_t|\\\\Wdouble|^double|\\\\Wquad_t|^quad_t|\\\\Wstatic|^static|\\\\Wtime_t|^time_t|\\\\Wmodule|^module|\\\\Wimport|^import|\\\\Wexport|^export|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wxor_eq|^xor_eq|\\\\Wand_eq|^and_eq|\\\\Wreturn|^return|\\\\Wfriend|^friend|\\\\Wnot_eq|^not_eq|\\\\Wsigned|^signed|\\\\Wstruct|^struct|\\\\Wint8_t|^int8_t|\\\\Wushort|^ushort|\\\\Wswitch|^switch|\\\\Wu_long|^u_long|\\\\Wtypeid|^typeid|\\\\Wu_char|^u_char|\\\\Wsizeof|^sizeof|\\\\Wbitand|^bitand|\\\\Wdelete|^delete|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wshort|^short|\\\\Wbreak|^break|\\\\Wcatch|^catch|\\\\Wcompl|^compl|\\\\Wwhile|^while|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wor_eq|^or_eq|\\\\Wconst|^const|\\\\Wthrow|^throw|\\\\Wbitor|^bitor|\\\\Wu_int|^u_int|\\\\Wusing|^using|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wfloat|^float|\\\\Wlong|^long|\\\\Wgoto|^goto|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wenum|^enum|\\\\Wtrue|^true|\\\\Wchar|^char|\\\\Wid_t|^id_t|\\\\WNULL|^NULL|\\\\Wthis|^this|\\\\Wbool|^bool|\\\\Welse|^else|\\\\Wfor|^for|\\\\Wnew|^new|\\\\Wnot|^not|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wasm|^asm|\\\\Wint|^int|\\\\Wtry|^try|\\\\Wdo|^do|\\\\Wif|^if|\\\\Wor|^or)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_definition\": {\n\t\t\t\"begin\": \"(?:(?:^|\\\\G|(?<=;|\\\\}))|(?<=>|\\\\*\\\\/))\\\\s*+(?:((?<!\\\\w)template(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?<!\\\\w)(?:(?:constexpr|consteval|explicit|mutable|virtual|inline|friend)|(?:thread_local|volatile|register|restrict|static|extern|const))(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<52>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\b(?<!\\\\Wreinterpret_cast|^reinterpret_cast|\\\\Watomic_noexcept|^atomic_noexcept|\\\\Wuint_least16_t|^uint_least16_t|\\\\Wuint_least32_t|^uint_least32_t|\\\\Wuint_least64_t|^uint_least64_t|\\\\Watomic_cancel|^atomic_cancel|\\\\Watomic_commit|^atomic_commit|\\\\Wuint_least8_t|^uint_least8_t|\\\\Wuint_fast16_t|^uint_fast16_t|\\\\Wuint_fast32_t|^uint_fast32_t|\\\\Wint_least16_t|^int_least16_t|\\\\Wint_least32_t|^int_least32_t|\\\\Wint_least64_t|^int_least64_t|\\\\Wuint_fast64_t|^uint_fast64_t|\\\\Wthread_local|^thread_local|\\\\Wint_fast16_t|^int_fast16_t|\\\\Wint_fast32_t|^int_fast32_t|\\\\Wint_fast64_t|^int_fast64_t|\\\\Wsynchronized|^synchronized|\\\\Wuint_fast8_t|^uint_fast8_t|\\\\Wdynamic_cast|^dynamic_cast|\\\\Wint_least8_t|^int_least8_t|\\\\Wint_fast8_t|^int_fast8_t|\\\\Wstatic_cast|^static_cast|\\\\Wsuseconds_t|^suseconds_t|\\\\Wconst_cast|^const_cast|\\\\Wuseconds_t|^useconds_t|\\\\Wconstinit|^constinit|\\\\Wco_return|^co_return|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wuintmax_t|^uintmax_t|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wconstexpr|^constexpr|\\\\Wconstexpr|^constexpr|\\\\Wconsteval|^consteval|\\\\Wprotected|^protected|\\\\Wnamespace|^namespace|\\\\Wblksize_t|^blksize_t|\\\\Wco_return|^co_return|\\\\Win_addr_t|^in_addr_t|\\\\Win_port_t|^in_port_t|\\\\Wuintptr_t|^uintptr_t|\\\\Wtemplate|^template|\\\\Wnoexcept|^noexcept|\\\\Wnoexcept|^noexcept|\\\\Wcontinue|^continue|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wunsigned|^unsigned|\\\\Wu_quad_t|^u_quad_t|\\\\Wblkcnt_t|^blkcnt_t|\\\\Wuint16_t|^uint16_t|\\\\Wuint32_t|^uint32_t|\\\\Wuint64_t|^uint64_t|\\\\Wintptr_t|^intptr_t|\\\\Wintmax_t|^intmax_t|\\\\Wintmax_t|^intmax_t|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wexplicit|^explicit|\\\\Wvolatile|^volatile|\\\\Wnoexcept|^noexcept|\\\\Woperator|^operator|\\\\Wdecltype|^decltype|\\\\Wtypename|^typename|\\\\Wrequires|^requires|\\\\Wco_await|^co_await|\\\\Wco_yield|^co_yield|\\\\Wreflexpr|^reflexpr|\\\\Wswblk_t|^swblk_t|\\\\Wvirtual|^virtual|\\\\Wssize_t|^ssize_t|\\\\Wconcept|^concept|\\\\Wmutable|^mutable|\\\\Wfixpt_t|^fixpt_t|\\\\Wint16_t|^int16_t|\\\\Wint32_t|^int32_t|\\\\Wint64_t|^int64_t|\\\\Wuint8_t|^uint8_t|\\\\Wtypedef|^typedef|\\\\Wdaddr_t|^daddr_t|\\\\Wcaddr_t|^caddr_t|\\\\Wqaddr_t|^qaddr_t|\\\\Wdefault|^default|\\\\Wnlink_t|^nlink_t|\\\\Wsegsz_t|^segsz_t|\\\\Wu_short|^u_short|\\\\Wwchar_t|^wchar_t|\\\\Wprivate|^private|\\\\W__asm__|^__asm__|\\\\Walignas|^alignas|\\\\Walignof|^alignof|\\\\Wmutable|^mutable|\\\\Wnullptr|^nullptr|\\\\Wclock_t|^clock_t|\\\\Wmode_t|^mode_t|\\\\Wpublic|^public|\\\\Wsize_t|^size_t|\\\\Wdouble|^double|\\\\Wquad_t|^quad_t|\\\\Wstatic|^static|\\\\Wtime_t|^time_t|\\\\Wmodule|^module|\\\\Wimport|^import|\\\\Wexport|^export|\\\\Wextern|^extern|\\\\Winline|^inline|\\\\Wxor_eq|^xor_eq|\\\\Wand_eq|^and_eq|\\\\Wreturn|^return|\\\\Wfriend|^friend|\\\\Wnot_eq|^not_eq|\\\\Wsigned|^signed|\\\\Wstruct|^struct|\\\\Wint8_t|^int8_t|\\\\Wushort|^ushort|\\\\Wswitch|^switch|\\\\Wu_long|^u_long|\\\\Wtypeid|^typeid|\\\\Wu_char|^u_char|\\\\Wsizeof|^sizeof|\\\\Wbitand|^bitand|\\\\Wdelete|^delete|\\\\Wino_t|^ino_t|\\\\Wkey_t|^key_t|\\\\Wpid_t|^pid_t|\\\\Woff_t|^off_t|\\\\Wuid_t|^uid_t|\\\\Wshort|^short|\\\\Wbreak|^break|\\\\Wcatch|^catch|\\\\Wcompl|^compl|\\\\Wwhile|^while|\\\\Wfalse|^false|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wconst|^const|\\\\Wor_eq|^or_eq|\\\\Wconst|^const|\\\\Wthrow|^throw|\\\\Wbitor|^bitor|\\\\Wu_int|^u_int|\\\\Wusing|^using|\\\\Wdiv_t|^div_t|\\\\Wdev_t|^dev_t|\\\\Wgid_t|^gid_t|\\\\Wfloat|^float|\\\\Wlong|^long|\\\\Wgoto|^goto|\\\\Wuint|^uint|\\\\Wid_t|^id_t|\\\\Wcase|^case|\\\\Wauto|^auto|\\\\Wvoid|^void|\\\\Wenum|^enum|\\\\Wtrue|^true|\\\\Wchar|^char|\\\\Wid_t|^id_t|\\\\WNULL|^NULL|\\\\Wthis|^this|\\\\Wbool|^bool|\\\\Welse|^else|\\\\Wfor|^for|\\\\Wnew|^new|\\\\Wnot|^not|\\\\Wxor|^xor|\\\\Wand|^and|\\\\Wasm|^asm|\\\\Wint|^int|\\\\Wtry|^try|\\\\Wdo|^do|\\\\Wif|^if|\\\\Wor|^or)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:(?:constexpr|consteval|explicit|mutable|virtual|inline|friend)|(?:thread_local|volatile|register|restrict|static|extern|const))(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.$1.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$8.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"52\": {},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"name\": \"entity.name.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter_or_maybe_value\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=^|\\\\))(?:\\\\s+)?(->)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<23>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<23>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.return-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"23\": {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_parameter_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:override|volatile|noexcept|final|const)(?!\\\\w)))+(?=\\\\s*(?:\\\\{|;|\\\\n|\\\\r|=))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=[{=,);>]|\\\\n)(?!\\\\()|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.other.definition.pointer.function.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$10.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_pointer_parameter\": {\n\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:override|volatile|noexcept|final|const)(?!\\\\w)))+(?=\\\\s*(?:\\\\{|;|\\\\n|\\\\r|=))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=[{=,);>]|\\\\n)(?!\\\\()|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"variable.parameter.pointer.function.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$10.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functional_specifiers_pre_parameters\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:constexpr|consteval|explicit|mutable|virtual|inline|friend)(?!\\\\w)\",\n\t\t\t\"name\": \"storage.modifier.specifier.functional.pre-parameters.$0.cpp\"\n\t\t},\n\t\t\"gcc_attributes\": {\n\t\t\t\"begin\": \"__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(\",\n\t\t\t\"end\": \"\\\\)\\\\s*\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"goto_statement\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)goto(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.goto.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"entity.name.label.call.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"identifier\": {\n\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\"\n\t\t},\n\t\t\"include\": {\n\t\t\t\"match\": \"^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((#)(?:\\\\s+)?((?:include|include_next))\\\\b)(?:\\\\s+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/)))|((\\\\\\\")[^\\\\\\\"]*(\\\\\\\"?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=\\\\/\\\\/))))|(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\.(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;)))))|((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:\\\\n|$)|(?=(?:\\\\/\\\\/|;))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.$5.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.include.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.include.cpp\"\n\t\t},\n\t\t\"inheritance_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.inheritance.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:protected|private|public)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)virtual(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.virtual.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=protected|virtual|private|public|,|:)(?:\\\\s+)?(?!(?:(?:protected|private|public)|virtual))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_builtin_storage_type\": {\n\t\t\t\"match\": \"\\\\s*+(?<!\\\\w)(?:(?:(?:((?:unsigned|wchar_t|double|signed|short|float|auto|void|long|char|bool|int))|((?:uint_least32_t|uint_least64_t|uint_least16_t|uint_fast64_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|uint_fast16_t|uint_fast32_t|int_least8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|int_fast8_t|suseconds_t|useconds_t|uintmax_t|uintmax_t|in_port_t|uintmax_t|in_addr_t|blksize_t|uintptr_t|intmax_t|intptr_t|blkcnt_t|intmax_t|u_quad_t|uint16_t|uint32_t|uint64_t|ssize_t|fixpt_t|qaddr_t|u_short|int16_t|int32_t|int64_t|uint8_t|daddr_t|caddr_t|swblk_t|clock_t|segsz_t|nlink_t|time_t|u_long|ushort|quad_t|mode_t|size_t|u_char|int8_t|u_int|uid_t|off_t|pid_t|gid_t|dev_t|div_t|key_t|ino_t|id_t|id_t|uint)))|((?:pthread_rwlockattr_t|pthread_mutexattr_t|pthread_condattr_t|pthread_rwlock_t|pthread_mutex_t|pthread_cond_t|pthread_attr_t|pthread_once_t|pthread_key_t|pthread_t)))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"inline_comment\": {\n\t\t\t\"match\": \"(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"invalid_comment_end\": {\n\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\"name\": \"invalid.illegal.unexpected.punctuation.definition.comment.end.cpp\"\n\t\t},\n\t\t\"label\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\b(?<!case|default)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:)(?!:)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.label.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.label.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"lambdas\": {\n\t\t\t\"begin\": \"(?:(?<=[^\\\\s]|^)(?<![\\\\w\\\\]\\\\)\\\\[\\\\*&\\\">])|(?<=\\\\Wreturn|^return))(?:\\\\s+)?(\\\\[(?!\\\\[| *+\\\"| *+\\\\d))((?:[^\\\\[\\\\]]|((?<!\\\\[)\\\\[(?!\\\\[)(?:[^\\\\[\\\\]]*+\\\\g<3>?)++\\\\]))*+)(\\\\](?!((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))[\\\\[\\\\];=]))\",\n\t\t\t\"end\": \"(?<=[;}])|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.begin.lambda.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.lambda.capture.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?=\\\\]|\\\\z|$)|(,))|(\\\\=))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.capture.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.capture.end.lambda.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.parameters.lambda.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:constexpr|consteval|mutable)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.modifier.lambda.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"->\",\n\t\t\t\t\t\"end\": \"(?=\\\\{)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.lambda.return-type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\S+\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.return-type.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.lambda.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.body.lambda.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"language_constants\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:nullptr|false|NULL|true)(?!\\\\w)\",\n\t\t\t\"name\": \"constant.language.$0.cpp\"\n\t\t},\n\t\t\"line\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?line\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.line.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.line.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_comment\": {\n\t\t\t\"begin\": \"\\\\s*+(\\\\/\\\\/)\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"comment.line.double-slash.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_continuation_character\": {\n\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\"name\": \"constant.character.escape.line-continuation.cpp\"\n\t\t},\n\t\t\"macro\": {\n\t\t\t\"begin\": \"(^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?define\\\\b)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.define.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.macro.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\G(?:\\\\s+)?(\\\\()([^\\\\(]*)(\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.preprocessor.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.function.preprocessor.parameters.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[(,])(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.variable.parameter.preprocessor.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.preprocessor.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro_argument\": {\n\t\t\t\"match\": \"##?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\"name\": \"variable.other.macro.argument.cpp\"\n\t\t},\n\t\t\"macro_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp.embedded.macro\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macro_name\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\"name\": \"entity.name.function.preprocessor.cpp\"\n\t\t},\n\t\t\"member_access\": {\n\t\t\t\"match\": \"(?:((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|(?:(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))|(?<=\\\\]|\\\\)))(?:\\\\s+)?)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\s+)?(?:(?:\\\\.\\\\*|\\\\.)|(?:->\\\\*|->))(?:\\\\s+)?)*)(?:\\\\s+)?(\\\\b(?!uint_least32_t[^\\\\w]|uint_least16_t[^\\\\w]|uint_least64_t[^\\\\w]|int_least32_t[^\\\\w]|int_least64_t[^\\\\w]|uint_fast32_t[^\\\\w]|uint_fast64_t[^\\\\w]|uint_least8_t[^\\\\w]|uint_fast16_t[^\\\\w]|int_least16_t[^\\\\w]|int_fast16_t[^\\\\w]|int_least8_t[^\\\\w]|uint_fast8_t[^\\\\w]|int_fast64_t[^\\\\w]|int_fast32_t[^\\\\w]|int_fast8_t[^\\\\w]|suseconds_t[^\\\\w]|useconds_t[^\\\\w]|in_addr_t[^\\\\w]|uintmax_t[^\\\\w]|uintmax_t[^\\\\w]|uintmax_t[^\\\\w]|in_port_t[^\\\\w]|uintptr_t[^\\\\w]|blksize_t[^\\\\w]|uint32_t[^\\\\w]|uint64_t[^\\\\w]|u_quad_t[^\\\\w]|intmax_t[^\\\\w]|intmax_t[^\\\\w]|unsigned[^\\\\w]|blkcnt_t[^\\\\w]|uint16_t[^\\\\w]|intptr_t[^\\\\w]|swblk_t[^\\\\w]|wchar_t[^\\\\w]|u_short[^\\\\w]|qaddr_t[^\\\\w]|caddr_t[^\\\\w]|daddr_t[^\\\\w]|fixpt_t[^\\\\w]|nlink_t[^\\\\w]|segsz_t[^\\\\w]|clock_t[^\\\\w]|ssize_t[^\\\\w]|int16_t[^\\\\w]|int32_t[^\\\\w]|int64_t[^\\\\w]|uint8_t[^\\\\w]|int8_t[^\\\\w]|mode_t[^\\\\w]|quad_t[^\\\\w]|ushort[^\\\\w]|u_long[^\\\\w]|u_char[^\\\\w]|double[^\\\\w]|signed[^\\\\w]|time_t[^\\\\w]|size_t[^\\\\w]|key_t[^\\\\w]|div_t[^\\\\w]|ino_t[^\\\\w]|uid_t[^\\\\w]|gid_t[^\\\\w]|off_t[^\\\\w]|pid_t[^\\\\w]|float[^\\\\w]|dev_t[^\\\\w]|u_int[^\\\\w]|short[^\\\\w]|bool[^\\\\w]|id_t[^\\\\w]|uint[^\\\\w]|long[^\\\\w]|char[^\\\\w]|void[^\\\\w]|auto[^\\\\w]|id_t[^\\\\w]|int[^\\\\w])(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?!\\\\())\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.object.access.$4.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.object.access.$5.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.object.access.$6.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.object.access.$7.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$8.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=(?:\\\\.\\\\*|\\\\.|->|->\\\\*))(?:\\\\s+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|(?:(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))|(?<=\\\\]|\\\\)))(?:\\\\s+)?)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.unknown.$10.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|(?:(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))|(?<=\\\\]|\\\\)))(?:\\\\s+)?)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.object.access.$6.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.object.access.$7.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.object.access.$8.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.object.access.$9.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.unknown.$10.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.property.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"memory_operators\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(delete)(?:\\\\s+)?(\\\\[\\\\])|(delete))|(new))(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.array.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.array.bracket.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.delete.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"keyword.operator.new.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"method_access\": {\n\t\t\t\"begin\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|(?:(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))|(?<=\\\\]|\\\\)))(?:\\\\s+)?)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?:\\\\s+)?(?:(?:\\\\.\\\\*|\\\\.)|(?:->\\\\*|->))(?:\\\\s+)?)*)(?:\\\\s+)?(~?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.object.access.$6.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.object.access.$7.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.object.access.$8.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.object.access.$9.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$10.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=(?:\\\\.\\\\*|\\\\.|->|->\\\\*))(?:\\\\s+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|(?:(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))|(?<=\\\\]|\\\\)))(?:\\\\s+)?)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.object.property.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.unknown.$10.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))|(?:(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))|(?<=\\\\]|\\\\)))(?:\\\\s+)?)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.object.access.$6.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.object.access.$7.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.object.access.$8.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.object.access.$9.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.unknown.$10.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"entity.name.function.member.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"misc_keywords\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:constinit|typedef|concept|export|module)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.other.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"ms_attributes\": {\n\t\t\t\"begin\": \"__declspec\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.begin.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.attribute.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.other.attribute.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(using)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.accessor.attribute.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.other.attribute.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace_alias\": {\n\t\t\t\"match\": \"(?<!\\\\w)(namespace)\\\\s+((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?(\\\\=)(?:\\\\s+)?(((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<8>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?(?:(;)|\\\\n))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.alias.cpp storage.type.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.declaration.namespace.alias.value.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.declaration.namespace.alias.cpp\"\n\t\t},\n\t\t\"namespace_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)namespace(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.namespace.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.definition.cpp storage.type.namespace.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.namespace.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<4>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)(?:\\\\s+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?:\\\\s+)?(?:(::)(?:\\\\s+)?(inline))?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.inline.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.namespace.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.namespace.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"noexcept_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.noexcept.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"normal_variable_assignment\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:((?:(?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w)\\\\s+)+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<31>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<31>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?:%=|\\\\+=|-=|\\\\*=|(?<!\\\\()\\\\/=))|((?:&=|\\\\^=|<<=|>>=|\\\\|=))|(\\\\=)))\",\n\t\t\t\"end\": \"(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"26\": {},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$49.cpp\"\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cpp\"\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.assignment.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"normal_variable_declaration\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:((?:(?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w)\\\\s+)+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<31>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<31>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=;|,|\\\\[)(?![^=]++=))\",\n\t\t\t\"end\": \"(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.declaration.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"26\": {},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"47\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$49.cpp\"\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.declaration.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"number_literal\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"operator_overload\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<60>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<60>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<60>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(operator)(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)const(?!\\\\w)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<60>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)(?:(?:((?:delete\\\\[\\\\]|delete|new\\\\[\\\\]|<=>|<<=|new|>>=|\\\\->\\\\*|\\\\/=|%=|&=|>=|\\\\|=|\\\\+\\\\+|\\\\-\\\\-|\\\\(\\\\)|\\\\[\\\\]|\\\\->|\\\\+\\\\+|<<|>>|\\\\-\\\\-|<=|\\\\^=|==|!=|&&|\\\\|\\\\||\\\\+=|\\\\-=|\\\\*=|,|\\\\+|\\\\-|!|~|\\\\*|&|\\\\*|\\\\/|%|\\\\+|\\\\-|<|>|&|\\\\^|\\\\||=))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:\\\\[\\\\])?)))|(\\\"\\\")((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=;|\\\\<|\\\\()\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"34\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"35\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"36\": {\n\t\t\t\t\t\"name\": \"storage.type.modifier.calling-convention.cpp\"\n\t\t\t\t},\n\t\t\t\t\"37\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"38\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"39\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"40\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"41\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"42\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"43\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"44\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"45\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.operator.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"46\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"47\": {},\n\t\t\t\t\"48\": {\n\t\t\t\t\t\"name\": \"keyword.other.operator.overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"49\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"50\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"51\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"52\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"53\": {\n\t\t\t\t\t\"name\": \"storage.modifier.const.cpp\"\n\t\t\t\t},\n\t\t\t\t\"54\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"55\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"56\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"57\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"58\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.operator-overload.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.operator-overload.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"59\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"60\": {},\n\t\t\t\t\"61\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.cpp\"\n\t\t\t\t},\n\t\t\t\t\"62\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.cpp\"\n\t\t\t\t},\n\t\t\t\t\"63\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.type.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"64\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"65\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"66\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"67\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"68\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"69\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"70\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"71\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"72\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"73\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"74\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"75\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"76\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.type.array.cpp\"\n\t\t\t\t},\n\t\t\t\t\"77\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cpp\"\n\t\t\t\t},\n\t\t\t\t\"78\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"79\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"80\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"81\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"82\": {\n\t\t\t\t\t\"name\": \"entity.name.operator.custom-literal.cpp\"\n\t\t\t\t},\n\t\t\t\t\"83\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"84\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"85\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"86\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.definition.special.operator-overload.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.function.definition.special.operator-overload.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.special.operator-overload.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.special.operator-overload.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.function.definition.parameters.special.operator-overload\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\=)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(default)|(delete))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.default.function.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.delete.function.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.function.definition.special.operator-overload.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_body_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.function.definition.special.operator-overload.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignof.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignof.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignof\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)alignas(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.alignas.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.alignas.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.alignas.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.alignas\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.typeid.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)noexcept(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.noexcept.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.noexcept.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.noexcept\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\"name\": \"keyword.operator.increment.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:<<|>>)\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:!=|<=|>=|==|<|>)\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:&&|!|\\\\|\\\\|)\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:&|\\\\||\\\\^|~)\",\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:((?:%=|\\\\+=|-=|\\\\*=|(?<!\\\\()\\\\/=))|((?:&=|\\\\^=|<<=|>>=|\\\\|=))|(\\\\=))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:%|\\\\*|\\\\/|-|\\\\+)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ternary_operator\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"over_qualified_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\bstruct)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.struct.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\benum)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.enum.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\bunion)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.union.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\bclass)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:thread_local|volatile|register|restrict|static|extern|const))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\s*+(?<!\\\\w)(?:(?:(?:((?:unsigned|wchar_t|double|signed|short|float|auto|void|long|char|bool|int))|((?:uint_least32_t|uint_least64_t|uint_least16_t|uint_fast64_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|uint_fast16_t|uint_fast32_t|int_least8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|int_fast8_t|suseconds_t|useconds_t|uintmax_t|uintmax_t|in_port_t|uintmax_t|in_addr_t|blksize_t|uintptr_t|intmax_t|intptr_t|blkcnt_t|intmax_t|u_quad_t|uint16_t|uint32_t|uint64_t|ssize_t|fixpt_t|qaddr_t|u_short|int16_t|int32_t|int64_t|uint8_t|daddr_t|caddr_t|swblk_t|clock_t|segsz_t|nlink_t|time_t|u_long|ushort|quad_t|mode_t|size_t|u_char|int8_t|u_int|uid_t|off_t|pid_t|gid_t|dev_t|div_t|key_t|ino_t|id_t|id_t|uint)))|((?:pthread_rwlockattr_t|pthread_mutexattr_t|pthread_condattr_t|pthread_rwlock_t|pthread_mutex_t|pthread_cond_t|pthread_attr_t|pthread_once_t|pthread_key_t|pthread_t)))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\Wthread_local|^thread_local|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\)|,|\\\\[|=|\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter_class\": {\n\t\t\t\"match\": \"(\\\\bclass)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_enum\": {\n\t\t\t\"match\": \"(\\\\benum)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_or_maybe_value\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\w)\",\n\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parameter.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_pointer_parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#curly_initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:thread_local|volatile|register|restrict|static|extern|const))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\s*+(?<!\\\\w)(?:(?:(?:((?:unsigned|wchar_t|double|signed|short|float|auto|void|long|char|bool|int))|((?:uint_least32_t|uint_least64_t|uint_least16_t|uint_fast64_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|uint_fast16_t|uint_fast32_t|int_least8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|int_fast8_t|suseconds_t|useconds_t|uintmax_t|uintmax_t|in_port_t|uintmax_t|in_addr_t|blksize_t|uintptr_t|intmax_t|intptr_t|blkcnt_t|intmax_t|u_quad_t|uint16_t|uint32_t|uint64_t|ssize_t|fixpt_t|qaddr_t|u_short|int16_t|int32_t|int64_t|uint8_t|daddr_t|caddr_t|swblk_t|clock_t|segsz_t|nlink_t|time_t|u_long|ushort|quad_t|mode_t|size_t|u_char|int8_t|u_int|uid_t|off_t|pid_t|gid_t|dev_t|div_t|key_t|ino_t|id_t|id_t|uint)))|((?:pthread_rwlockattr_t|pthread_mutexattr_t|pthread_condattr_t|pthread_rwlock_t|pthread_mutex_t|pthread_cond_t|pthread_attr_t|pthread_once_t|pthread_key_t|pthread_t)))|([a-zA-Z_]\\\\w*_t))(?!\\\\w)|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\b\\\\b(?<!\\\\Wthread_local|^thread_local|\\\\Wvolatile|^volatile|\\\\Wregister|^register|\\\\Wrestrict|^restrict|\\\\Wstatic|^static|\\\\Wextern|^extern|\\\\Wconst|^const)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=,|\\\\)|=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.cpp storage.type.built-in.primitive.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.cpp storage.type.built-in.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==)\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\))|(,))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\s|\\\\(|,|:)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=(?:\\\\)|,|\\\\[|=|\\\\/\\\\/|(?:\\\\n|$)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.bracket.square.array.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b(?<!\\\\Wstruct|^struct|\\\\Wclass|^class|\\\\Wunion|^union|\\\\Wenum|^enum)\",\n\t\t\t\t\t\"name\": \"entity.name.type.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter_struct\": {\n\t\t\t\"match\": \"(\\\\bstruct)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.struct.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.struct.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter_union\": {\n\t\t\t\"match\": \"(\\\\bunion)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))?)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:\\\\[((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\]((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=,|\\\\)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.union.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.union.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#range_for_inner\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#over_qualified_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!:):(?!:)\",\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.range-based.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?pragma\\\\b\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.preprocessor.pragma.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma_mark\": {\n\t\t\t\"match\": \"(^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?pragma\\\\s+mark)\\\\s+(.*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.pragma-mark.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.pragma-mark.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.pragma.cpp\"\n\t\t},\n\t\t\"predefined_macros\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(__cplusplus|__DATE__|__FILE__|__LINE__|__STDC__|__STDC_HOSTED__|__STDC_NO_COMPLEX__|__STDC_VERSION__|__STDCPP_THREADS__|__TIME__|NDEBUG|__OBJC__|__ASSEMBLER__|__ATOM__|__AVX__|__AVX2__|_CHAR_UNSIGNED|__CLR_VER|_CONTROL_FLOW_GUARD|__COUNTER__|__cplusplus_cli|__cplusplus_winrt|_CPPRTTI|_CPPUNWIND|_DEBUG|_DLL|__FUNCDNAME__|__FUNCSIG__|__FUNCTION__|_INTEGRAL_MAX_BITS|__INTELLISENSE__|_ISO_VOLATILE|_KERNEL_MODE|_M_AMD64|_M_ARM|_M_ARM_ARMV7VE|_M_ARM_FP|_M_ARM64|_M_CEE|_M_CEE_PURE|_M_CEE_SAFE|_M_FP_EXCEPT|_M_FP_FAST|_M_FP_PRECISE|_M_FP_STRICT|_M_IX86|_M_IX86_FP|_M_X64|_MANAGED|_MSC_BUILD|_MSC_EXTENSIONS|_MSC_FULL_VER|_MSC_VER|_MSVC_LANG|__MSVC_RUNTIME_CHECKS|_MT|_NATIVE_WCHAR_T_DEFINED|_OPENMP|_PREFAST|__TIMESTAMP__|_VC_NO_DEFAULTLIB|_WCHAR_T_DEFINED|_WIN32|_WIN64|_WINRT_DLL|_ATL_VER|_MFC_VER|__GFORTRAN__|__GNUC__|__GNUC_MINOR__|__GNUC_PATCHLEVEL__|__GNUG__|__STRICT_ANSI__|__BASE_FILE__|__INCLUDE_LEVEL__|__ELF__|__VERSION__|__OPTIMIZE__|__OPTIMIZE_SIZE__|__NO_INLINE__|__GNUC_STDC_INLINE__|__CHAR_UNSIGNED__|__WCHAR_UNSIGNED__|__REGISTER_PREFIX__|__REGISTER_PREFIX__|__SIZE_TYPE__|__PTRDIFF_TYPE__|__WCHAR_TYPE__|__WINT_TYPE__|__INTMAX_TYPE__|__UINTMAX_TYPE__|__SIG_ATOMIC_TYPE__|__INT8_TYPE__|__INT16_TYPE__|__INT32_TYPE__|__INT64_TYPE__|__UINT8_TYPE__|__UINT16_TYPE__|__UINT32_TYPE__|__UINT64_TYPE__|__INT_LEAST8_TYPE__|__INT_LEAST16_TYPE__|__INT_LEAST32_TYPE__|__INT_LEAST64_TYPE__|__UINT_LEAST8_TYPE__|__UINT_LEAST16_TYPE__|__UINT_LEAST32_TYPE__|__UINT_LEAST64_TYPE__|__INT_FAST8_TYPE__|__INT_FAST16_TYPE__|__INT_FAST32_TYPE__|__INT_FAST64_TYPE__|__UINT_FAST8_TYPE__|__UINT_FAST16_TYPE__|__UINT_FAST32_TYPE__|__UINT_FAST64_TYPE__|__INTPTR_TYPE__|__UINTPTR_TYPE__|__CHAR_BIT__|__SCHAR_MAX__|__WCHAR_MAX__|__SHRT_MAX__|__INT_MAX__|__LONG_MAX__|__LONG_LONG_MAX__|__WINT_MAX__|__SIZE_MAX__|__PTRDIFF_MAX__|__INTMAX_MAX__|__UINTMAX_MAX__|__SIG_ATOMIC_MAX__|__INT8_MAX__|__INT16_MAX__|__INT32_MAX__|__INT64_MAX__|__UINT8_MAX__|__UINT16_MAX__|__UINT32_MAX__|__UINT64_MAX__|__INT_LEAST8_MAX__|__INT_LEAST16_MAX__|__INT_LEAST32_MAX__|__INT_LEAST64_MAX__|__UINT_LEAST8_MAX__|__UINT_LEAST16_MAX__|__UINT_LEAST32_MAX__|__UINT_LEAST64_MAX__|__INT_FAST8_MAX__|__INT_FAST16_MAX__|__INT_FAST32_MAX__|__INT_FAST64_MAX__|__UINT_FAST8_MAX__|__UINT_FAST16_MAX__|__UINT_FAST32_MAX__|__UINT_FAST64_MAX__|__INTPTR_MAX__|__UINTPTR_MAX__|__WCHAR_MIN__|__WINT_MIN__|__SIG_ATOMIC_MIN__|__SCHAR_WIDTH__|__SHRT_WIDTH__|__INT_WIDTH__|__LONG_WIDTH__|__LONG_LONG_WIDTH__|__PTRDIFF_WIDTH__|__SIG_ATOMIC_WIDTH__|__SIZE_WIDTH__|__WCHAR_WIDTH__|__WINT_WIDTH__|__INT_LEAST8_WIDTH__|__INT_LEAST16_WIDTH__|__INT_LEAST32_WIDTH__|__INT_LEAST64_WIDTH__|__INT_FAST8_WIDTH__|__INT_FAST16_WIDTH__|__INT_FAST32_WIDTH__|__INT_FAST64_WIDTH__|__INTPTR_WIDTH__|__INTMAX_WIDTH__|__SIZEOF_INT__|__SIZEOF_LONG__|__SIZEOF_LONG_LONG__|__SIZEOF_SHORT__|__SIZEOF_POINTER__|__SIZEOF_FLOAT__|__SIZEOF_DOUBLE__|__SIZEOF_LONG_DOUBLE__|__SIZEOF_SIZE_T__|__SIZEOF_WCHAR_T__|__SIZEOF_WINT_T__|__SIZEOF_PTRDIFF_T__|__BYTE_ORDER__|__ORDER_LITTLE_ENDIAN__|__ORDER_BIG_ENDIAN__|__ORDER_PDP_ENDIAN__|__FLOAT_WORD_ORDER__|__DEPRECATED|__EXCEPTIONS|__GXX_RTTI|__USING_SJLJ_EXCEPTIONS__|__GXX_EXPERIMENTAL_CXX0X__|__GXX_WEAK__|__NEXT_RUNTIME__|__LP64__|_LP64|__SSP__|__SSP_ALL__|__SSP_STRONG__|__SSP_EXPLICIT__|__SANITIZE_ADDRESS__|__SANITIZE_THREAD__|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8|__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16|__HAVE_SPECULATION_SAFE_VALUE|__GCC_HAVE_DWARF2_CFI_ASM|__FP_FAST_FMA|__FP_FAST_FMAF|__FP_FAST_FMAL|__FP_FAST_FMAF16|__FP_FAST_FMAF32|__FP_FAST_FMAF64|__FP_FAST_FMAF128|__FP_FAST_FMAF32X|__FP_FAST_FMAF64X|__FP_FAST_FMAF128X|__GCC_IEC_559|__GCC_IEC_559_COMPLEX|__NO_MATH_ERRNO__|__has_builtin|__has_feature|__has_extension|__has_cpp_attribute|__has_c_attribute|__has_attribute|__has_declspec_attribute|__is_identifier|__has_include|__has_include_next|__has_warning|__BASE_FILE__|__FILE_NAME__|__clang__|__clang_major__|__clang_minor__|__clang_patchlevel__|__clang_version__|__fp16|_Float16)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.$1.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b__([A-Z_]+)__\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$1.cpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_defined\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_defined\": {\n\t\t\t\"begin\": \"((?<!\\\\w)defined(?!\\\\w))(\\\\()\",\n\t\t\t\"end\": \"(?:\\\\)|(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$)))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.defined.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.control.defined.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.parens.preprocessor.conditional.cpp\"\n\t\t},\n\t\t\"preprocessor_conditional_range\": {\n\t\t\t\"begin\": \"^((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?:(?:ifndef|ifdef)|if))\",\n\t\t\t\"end\": \"(?<!\\\\\\\\)(?:(?=\\\\n)|(?<=^\\\\n|[^\\\\\\\\]\\\\n)(?=$))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.$6.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"contentName\": \"meta.preprocessor.conditional\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_conditional_standalone\": {\n\t\t\t\"match\": \"^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?((?<!\\\\w)(?:endif|else|elif|elifdef|elifndef)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"keyword.control.directive.$4.cpp\"\n\t\t},\n\t\t\"preprocessor_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma_mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#diagnostic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undef\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor_conditional_standalone\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro_argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor_number_literal\": {\n\t\t\t\"match\": \"(?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\"end\": \"$|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?$\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"qualified_type\": {\n\t\t\t\"match\": \"\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<11>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.qualified-type.cpp\"\n\t\t},\n\t\t\"qualifiers_and_specifiers_post_parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)requires(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.functionlike.cpp keyword.other.requires.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.requires.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.requires.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.arguments.requires\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:(?:(?:(?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:override|volatile|noexcept|final|const)(?!\\\\w))+)(?=\\\\s*(?:\\\\{|;|\\\\n|\\\\r|=))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:override|volatile|noexcept|final|const)(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$5.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qualifiers_and_specifiers_post_parameters_inline\": {\n\t\t\t\"match\": \"((?:(?:(?:(?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:override|volatile|noexcept|final|const)(?!\\\\w))+)(?=\\\\s*(?:\\\\{|;|\\\\n|\\\\r|=))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:override|volatile|noexcept|final|const)(?!\\\\w))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$5.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"range_for_inner\": {\n\t\t\t\"begin\": \"(?<=\\\\Wfor \\\\(|^for \\\\(|\\\\Wfor\\\\(|^for\\\\()\",\n\t\t\t\"end\": \"(?=\\\\))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.parens.control.for.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w)\\\\s+)+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<27>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<27>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:)(?!:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"22\": {},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"27\": {},\n\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.for.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"43\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"44\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"45\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"46\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.range-based.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:((?:(?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w)\\\\s+)+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<27>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<27>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\[)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(,)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))*((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\])((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:)(?!:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.binding.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"43\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"44\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"45\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"46\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.for.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"47\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"48\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"49\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"50\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"51\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"52\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"53\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"54\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"55\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"56\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.for.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"57\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"58\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"59\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"60\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"61\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.binding.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"62\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"63\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"64\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"65\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"66\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.range-based.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.binding.cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"requires_keyword\": {\n\t\t\t\"begin\": \"((?<!\\\\w)requires(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.functionlike.cpp keyword.other.requires.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.requires.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.requires.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.requires\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"scope_resolution\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_call\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_call_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_operator_overload\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_operator_overload_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_function_definition_operator_overload_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_function_definition_operator_overload_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_alias\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_alias_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_alias_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_block\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_block_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_block_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_using\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_namespace_using_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_parameter\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_parameter_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_parameter_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.parameter.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_call\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_call_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.template.call.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_definition\": {\n\t\t\t\"match\": \"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<3>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"scope_resolution_template_definition_inner_generated\": {\n\t\t\t\"match\": \"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\\\\s*+(((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<7>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?(::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.scope-resolution.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"semicolon\": {\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t},\n\t\t\"simple_array_assignment\": {\n\t\t\t\"match\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))(\\\\[) *(\\\\])((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?:%=|\\\\+=|-=|\\\\*=|(?<!\\\\()\\\\/=))|((?:&=|\\\\^=|<<=|>>=|\\\\|=))|(\\\\=))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$24.cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.array.type.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.array.type.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cpp\"\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"simple_constructor_call\": {\n\t\t\t\"match\": \"(?!class|struct|union|enum|explicit|new|delete|operator|template|throw|decltype|typename|override|final)\\\\b(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(?=((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)(?=((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=(?:\\\\{|\\\\()))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"simple_type\": {\n\t\t\t\"match\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<12>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"sizeof_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)sizeof(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sizeof_variadic_operator\": {\n\t\t\t\"begin\": \"(\\\\bsizeof\\\\.\\\\.\\\\.)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.sizeof.variadic.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.sizeof.variadic.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.sizeof.variadic\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"square_brackets\": {\n\t\t\t\"name\": \"meta.bracket.square.access\",\n\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.object\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"standard_declares\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)struct(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.struct.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)union(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.union.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)enum(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.enum.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<!\\\\w)class(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"static_assert\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)static_assert|_Static_assert(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.other.static-assert.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.static-assert.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.static-assert.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(,)(?:\\\\s+)?(?=(?:L|u8|u|U(?:\\\\s+)?\\\\\\\")?)\",\n\t\t\t\t\t\"end\": \"(?=\\\\))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.static-assert.message.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"std_space\": {\n\t\t\t\"match\": \"(?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"storage_specifiers\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"storage_types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_builtin_storage_type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decltype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typename\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?)\\\"\",\n\t\t\t\t\t\"end\": \"(\\\")(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.string.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.string.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8})\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\"?\\\\\\\\abfnrtv]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[0-7]{1,3}\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escapes_context_c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![0-9A-Fa-f])((?:u|u8|U|L)?)'\",\n\t\t\t\t\t\"end\": \"(')(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.character.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.character.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\\\\\x0*[0-9a-fA-F]{2}(?![0-9a-fA-F]))|((?:\\\\\\\\x[0-9a-fA-F]*|\\\\\\\\x)))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escapes_context_c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:(?:_r|re)|regex)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:(?:_r|re)|regex)\\\\\\\"|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.regex.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.regexp.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"(?:glsl|GLSL)\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:glsl|GLSL)\\\\\\\"|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.string.quoted.double.raw.glsl.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.glsl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:[uUL]8?)?R)\\\\\\\"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\\\\\\\"|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?:u|u8|U|L)?R)\\\"(?:([^ ()\\\\\\\\\\\\t]{0,16})|([^ ()\\\\\\\\\\\\t]*))\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.$2.begin\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.encoding\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\)(\\\\2)(\\\\3)\\\")(?:((?:[a-zA-Z]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|(_(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.$2.end\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.reserved.string.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.string.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.$2\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escaped_char\": {\n\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\"name\": \"constant.character.escape\"\n\t\t},\n\t\t\"string_escapes_context_c\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3][0-7]{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\"name\": \"constant.character.escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?!%')(?!%\\\")%\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.struct.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.struct.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operator_overload\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"struct_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)struct(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.struct.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"switch_conditional_parentheses\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.conditional.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.conditional.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.conditional.switch.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#range_for_inner\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_statement\": {\n\t\t\t\"begin\": \"((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)switch(?!\\\\w))\",\n\t\t\t\"end\": \"(?:(?<=\\\\}|%>|\\\\?\\\\?>)|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.switch.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.switch.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.block.switch.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.switch.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#switch_conditional_parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.switch.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#default_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.switch.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_argument_defaulted\": {\n\t\t\t\"match\": \"(?<=<|,)(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)\\\\s+((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(\\\\=)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"template_call_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_template_call_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma_in_template_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualified_type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_call_innards\": {\n\t\t\t\"match\": \"((?<!<)<(?!<)(?:(?:(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/)))|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<1>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.call.cpp\"\n\t\t},\n\t\t\"template_call_range\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"end\": \">|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.call.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_call_range_helper\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b((?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(<<)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"$|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b((?<!\\\\w)\\\\.?\\\\d(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(<)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"$|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?([lLfF](?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([pP])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9a-fA-FpP])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(?=[0-9.])(?!0[xXbB])([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)(?:(?<!')([eE])(\\\\+?)(\\\\-?)([0-9](?:[0-9]|(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))*))?((?:[uU]|(?:[uU]ll?)|(?:[uU]LL?)|(?:ll?[uU]?)|(?:LL?[uU]?)|[fF])(?!\\\\w))?((?:\\\\w(?<![0-9eE])\\\\w*)?$)\",\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.cpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.built-in.integer.cpp keyword.other.unit.suffix.integer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:(?:[0-9a-zA-Z_\\\\.]|')|(?<=[eEpP])[+-])+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_range\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(template)(?:\\\\s+)?(<)\",\n\t\t\t\"end\": \">|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.definition.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\w)(?:\\\\s+)?<\",\n\t\t\t\t\t\"end\": \">|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.call.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_definition_argument\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)|((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\s+)+)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))|((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?(\\\\.\\\\.\\\\.)(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))|(?<!\\\\w)(template)(?:\\\\s+)?(<)(?:\\\\s+)?((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(>)(?:\\\\s+)?(class|typename)(?:\\\\s+((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*))?)(?:\\\\s+)?(?:(\\\\=)(?:\\\\s+)?(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?(?:(,)|(?=>|$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$3.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.argument.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$6.cpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$11.cpp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"storage.type.template.argument.$14.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.comma.template.argument.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"template_definition_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_template_definition_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition_argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_argument_defaulted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_call_innards\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template_explicit_instantiation\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?:(extern)\\\\s+)?(template)\\\\s+\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.extern.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.template.explicit-instantiation.cpp\"\n\t\t},\n\t\t\"template_isolated_definition\": {\n\t\t\t\"match\": \"(?<!\\\\w)(template)(?:\\\\s+)?(<)(.*)(>)(?:\\\\s+)?$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.template.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.begin.template.definition.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.template.definition.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_definition_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"ternary_operator\": {\n\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\"end\": \":|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#predefined_macros\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wordlike_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type_casting_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control_flow_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#exception_keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#the_this_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#language_constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constructor_bracket_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_constructor_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_array_assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin_storage_type_initilizer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qualifiers_and_specifiers_post_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functional_specifiers_pre_parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambdas\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#square_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unknown_variable\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"applyEndPatternLast\": 1\n\t\t},\n\t\t\"the_this_keyword\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)this(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.language.this.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"type_alias\": {\n\t\t\t\"match\": \"(using)\\\\s+(?!namespace)((?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)(?:\\\\s+)?((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?(?:\\\\s+)?(\\\\=)(?:\\\\s+)?((?:typename)?)(?:\\\\s+)?((?:(?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w)\\\\s+)+)?(?:(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<19>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<19>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))|(.*(?<!;)))(?:(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)?(?:\\\\s+)?(?:(;)|\\\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.other.typename.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"meta.declaration.type.alias.value.unknown.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.declaration.type.alias.cpp\"\n\t\t},\n\t\t\"type_casting_operators\": {\n\t\t\t\"match\": \"((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:reinterpret_cast|dynamic_cast|static_cast|const_cast)(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cpp keyword.operator.cast.$3.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"typedef_class\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)class(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)class(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.class.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.class.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.class.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#operator_overload\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.class.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_function_pointer\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=.*\\\\(\\\\*\\\\s*(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\s*\\\\))\",\n\t\t\t\"end\": \"(?<=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<18>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()(\\\\*)(?:\\\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*)?)(?:\\\\s+)?(?:(\\\\[)(\\\\w*)(\\\\])(?:\\\\s+)?)*(\\\\))(?:\\\\s+)?(\\\\()\",\n\t\t\t\t\t\"end\": \"(\\\\))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:override|volatile|noexcept|final|const)(?!\\\\w)))+(?=\\\\s*(?:\\\\{|;|\\\\n|\\\\r|=))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=[{=,);>]|\\\\n)(?!\\\\()|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.pointer.dereference.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp entity.name.type.pointer.function.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.function.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$10.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_parameter_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_struct\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)struct(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)struct(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.struct.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.struct.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#operator_overload\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.struct.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typedef_union\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typedef(?!\\\\w))(?:\\\\s+)?(?=(?<!\\\\w)union(?!\\\\w))\",\n\t\t\t\"end\": \"(?<=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.typedef.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.head.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.body.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#operator_overload\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\t\t\"name\": \"meta.tail.union.cpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.alias.cpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typeid_operator\": {\n\t\t\t\"begin\": \"((?<!\\\\w)typeid(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\()\",\n\t\t\t\"end\": \"\\\\)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.functionlike.cpp keyword.operator.typeid.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.operator.typeid.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.operator.typeid.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.arguments.operator.typeid\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#evaluation_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typename\": {\n\t\t\t\"match\": \"(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?<!\\\\w)typename(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<17>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<17>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {}\n\t\t\t}\n\t\t},\n\t\t\"undef\": {\n\t\t\t\"match\": \"(^((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(#)(?:\\\\s+)?undef\\\\b)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.undef.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.undef.cpp\"\n\t\t},\n\t\t\"union_block\": {\n\t\t\t\"begin\": \"((?<!\\\\w)union(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?={)|(?:((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?((?:(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*+)?(?:((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(:(?!:)))?)\",\n\t\t\t\"end\": \"(?:(?:(?<=\\\\}|%>|\\\\?\\\\?>)(?:\\\\s+)?(;)|(;))|(?=[;>\\\\[\\\\]=]))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.head.union.cpp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?<!\\\\w)final(?!\\\\w))((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?=:|{|$)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.final.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"DLLEXPORT\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.DLLEXPORT.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.other.preprocessor.macro.predefined.probably.$0.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.inheritance.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.block.union.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\"end\": \"(?:\\\\{|<%|\\\\?\\\\?<|(?=;))|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.union.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.head.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ever_present_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\{|<%|\\\\?\\\\?<)\",\n\t\t\t\t\t\"end\": \"\\\\}|%>|\\\\?\\\\?>|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.union.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.body.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_pointer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#static_assert\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructor_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operator_overload\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_variable_assignment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\}|%>|\\\\?\\\\?>)[\\\\s]*\",\n\t\t\t\t\t\"end\": \"[\\\\s]*(?=;)|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.tail.union.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"union_declare\": {\n\t\t\t\"match\": \"((?<!\\\\w)union(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))\\\\b(?!override\\\\W|override\\\\$|final\\\\W|final\\\\$)((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=\\\\S)(?![:{a-zA-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.union.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.union.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"variable.other.object.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"unknown_variable\": {\n\t\t\t\"match\": \"(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.unknown.$1.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.unknown.$2.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.unknown.$3.cpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.unknown.$4.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$5.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using_name\": {\n\t\t\t\"match\": \"(using)\\\\s+(?!namespace\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using_namespace\": {\n\t\t\t\"begin\": \"(?<!\\\\w)(using)\\\\s+(namespace)\\\\s+((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<6>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*\\\\s*+)?((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w))(?=;|\\\\n)\",\n\t\t\t\"end\": \";|(?=\\\\\\\\end\\\\{(?:minted|cppcode)\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.directive.cpp storage.type.namespace.directive.cpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_namespace_using_inner_generated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.using-namespace.cpp\"\n\t\t},\n\t\t\"vararg_ellipses\": {\n\t\t\t\"match\": \"(?<!\\\\.)\\\\.\\\\.\\\\.(?!\\\\.)\",\n\t\t\t\"name\": \"punctuation.vararg-ellipses.cpp\"\n\t\t},\n\t\t\"variable_assignment\": {\n\t\t\t\"match\": \"(?:((?:(?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w)\\\\s+)+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<16>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<16>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:((?:%=|\\\\+=|-=|\\\\*=|(?<!\\\\()\\\\/=))|((?:&=|\\\\^=|<<=|>>=|\\\\|=))|(\\\\=))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.assignment.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$28.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"31\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.cpp\"\n\t\t\t\t},\n\t\t\t\t\"32\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.cpp\"\n\t\t\t\t},\n\t\t\t\t\"33\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.assignment.cpp\"\n\t\t},\n\t\t\"variable_declare\": {\n\t\t\t\"match\": \"(?:((?:(?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)(?<!\\\\w)(?:thread_local|volatile|register|restrict|static|extern|const)(?!\\\\w)\\\\s+)+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?\\\\]\\\\]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\\\\s*+(((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<16>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)\\\\s*+)?::)*+)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\\\\b((?<!<)<(?!<)(?:(?:\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/)|(?:\\\"(?:[^\\\"]*|\\\\\\\\\\\")\\\")|(?:'(?:[^']*|\\\\\\\\')')|\\\\g<16>|(?:(?:[^'\\\"<>\\\\/]|\\\\/[^*])++))*>)?(?![\\\\w<:.]))(((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))?(?:(?:&|\\\\*)((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z)))*(?:&|\\\\*))?((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?:(?:(?:(?:(\\\\b[a-z0-9]+\\\\b)|(\\\\b[a-zA-Z0-9]+_[a-zA-Z0-9]*\\\\b))|(\\\\b[a-z]+[A-Z][a-zA-Z0-9]*\\\\b))|(\\\\b[A-Z][A-Z_0-9]*\\\\b))|((?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)))((?:((?:\\\\s*+\\\\/\\\\*(?:[^\\\\*]++|\\\\*+(?!\\\\/))*+\\\\*\\\\/\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))(?=;|,|\\\\[)(?![^=]++=)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_specifiers\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"meta.qualified-type.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:struct|class|union|enum)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$0.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution_inner_generated\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\U[0-9a-fA-F]{8}))*(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.scope-resolution.type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_range_helper\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.pointer.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\&((?:(?:(?:\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+)+)|(?:\\\\s++)|(?<=\\\\W)|(?=\\\\W)|^|(?:\\\\n?$)|\\\\A|\\\\Z))){2,}\\\\&\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.reference-type.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\&\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"24\": {\n\t\t\t\t\t\"name\": \"variable.lower-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"25\": {\n\t\t\t\t\t\"name\": \"variable.snake-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"26\": {\n\t\t\t\t\t\"name\": \"variable.camel-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"27\": {\n\t\t\t\t\t\"name\": \"variable.upper-case.cpp variable.other.declare.cpp\"\n\t\t\t\t},\n\t\t\t\t\"28\": {\n\t\t\t\t\t\"name\": \"variable.other.unknown.$28.cpp\"\n\t\t\t\t},\n\t\t\t\t\"29\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"30\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\s*+(\\\\/\\\\*)((?:[^\\\\*]++|\\\\*+(?!\\\\/))*+(\\\\*\\\\/))\\\\s*+\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.begin.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.block.cpp punctuation.definition.comment.end.cpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.declaration.cpp\"\n\t\t},\n\t\t\"wordlike_operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:noexcept|xor_eq|and_eq|delete|not_eq|bitand|bitor|compl|or_eq|not|xor|new|and|or)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"keyword.operator.wordlike.cpp keyword.operator.$0.cpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/latex/syntaxes/markdown-latex-combined.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jlelong/vscode-latex-basics/blob/master/syntaxes/markdown-latex-combined.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jlelong/vscode-latex-basics/commit/ed0a6d72377d89eb90280f4159f2d6cdbd63a3a3\",\n\t\"name\": \"Markdown\",\n\t\"scopeName\": \"text.tex.internal_only_markdown_latex_combined\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"text.tex.latex\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#frontMatter\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#separator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heading\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#blockquote\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lists\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-def\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#table\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paragraph\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"blockquote\": {\n\t\t\t\"begin\": \"(^|\\\\G)[ ]{0,3}(>) ?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.quote.begin.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"markup.quote.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"while\": \"(^|\\\\G)\\\\s*(>) ?\"\n\t\t},\n\t\t\"fenced_code_block_css\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(css|css.erb)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_basic\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(html|htm|shtml|xhtml|inc|tmpl|tpl)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_ini\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(ini|conf)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.ini\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ini\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_java\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(java|bsh)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_lua\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(lua)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_makefile\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(Makefile|makefile|GNUmakefile|OCamlMakefile)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_perl\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(perl|pl|pm|pod|t|PL|psgi|vcl)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_r\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(R|r|s|S|Rprofile|\\\\{\\\\.r.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_ruby\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(ruby|rb|rbx|rjs|Rakefile|rake|cgi|fcgi|gemspec|irbrc|Capfile|ru|prawn|Cheffile|Gemfile|Guardfile|Hobofile|Vagrantfile|Appraisals|Rantfile|Berksfile|Berksfile.lock|Thorfile|Puppetfile)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_php\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(php|php3|php4|php5|phpt|phtml|aw|ctp)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_sql\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(sql|ddl|dml)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_vs_net\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(vb)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.vs_net\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.asp.vb.net\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_xml\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(xml|xsd|tld|jsp|pt|cpt|dtml|rss|opml)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_xsl\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(xsl|xslt)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.xsl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml.xsl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_yaml\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(yaml|yml)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.yaml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_dosbatch\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(bat|batch)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.dosbatch\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_clojure\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(clj|cljs|clojure)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.clojure\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.clojure\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_coffee\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(coffee|Cakefile|coffee.erb)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_c\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(c|h)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_cpp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(cpp|c\\\\+\\\\+|cxx)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.cpp source.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_diff\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(patch|diff|rej)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.diff\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.diff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_dockerfile\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(dockerfile|Dockerfile)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.dockerfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.dockerfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_git_commit\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(COMMIT_EDITMSG|MERGE_MSG)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.git_commit\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.git-commit\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_git_rebase\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(git-rebase-todo)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.git_rebase\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.git-rebase\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_go\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(go|golang)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.go\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_groovy\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(groovy|gvy)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_pug\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(jade|pug)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.pug\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_js\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\\\{\\\\.js.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.javascript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_js_regexp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(regexp)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.js_regexp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_json\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.json\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_jsonc\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(jsonc)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.jsonc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_less\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(less)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_objc\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(objectivec|objective-c|mm|objc|obj-c|m|h)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_swift\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(swift)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_scss\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(scss)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_perl6\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(perl6|p6|pl6|pm6|nqp)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.perl6\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.perl.6\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_powershell\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(powershell|ps1|psm1|psd1|pwsh)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.powershell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_python\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\\\{\\\\.python.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_julia\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(julia|\\\\{\\\\.julia.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_regexp_python\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(re)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.regexp_python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.regexp.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_rust\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(rust|rs|\\\\{\\\\.rust.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.rust\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_scala\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(scala|sbt)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.scala\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.scala\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_shell\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\\\{\\\\.bash.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.shellscript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_ts\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(typescript|ts)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.typescript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_tsx\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(tsx)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.typescriptreact\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_csharp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(cs|csharp|c#)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.csharp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_fsharp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(fs|fsharp|f#)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.fsharp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_dart\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(dart)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.dart\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_handlebars\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(handlebars|hbs)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.handlebars\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.handlebars\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_markdown\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(markdown|md)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_log\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(log)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.log\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.log\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_erlang\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(erlang)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.erlang\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.erlang\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_elixir\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(elixir)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.elixir\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.elixir\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_latex\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(latex|tex)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.latex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.tex.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_bibtex\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(bibtex)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.bibtex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_twig\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(twig)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.twig\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.twig\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_basic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_ini\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_makefile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_vs_net\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_xml\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_xsl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_yaml\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_dosbatch\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_diff\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_dockerfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_git_commit\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_git_rebase\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_js\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_js_regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_json\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_jsonc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_swift\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_perl6\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_python\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_regexp_python\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_rust\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_scala\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_ts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_tsx\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_csharp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_fsharp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_dart\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_handlebars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_markdown\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_log\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_erlang\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_elixir\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_bibtex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_twig\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_unknown\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_unknown\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?=([^`]*)?$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\"\n\t\t},\n\t\t\"heading\": {\n\t\t\t\"match\": \"(?:^|\\\\G)[ ]{0,3}(#{1,6}\\\\s+(.*?)(\\\\s+#{1,6})?\\\\s*)$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{6})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.6.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{5})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.5.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{4})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.4.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{3})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.3.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{2})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.2.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{1})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.1.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"markup.heading.markdown\"\n\t\t},\n\t\t\"heading-setext\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^(={3,})(?=[ \\\\t]*$\\\\n?)\",\n\t\t\t\t\t\"name\": \"markup.heading.setext.1.markdown\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^(-{3,})(?=[ \\\\t]*$\\\\n?)\",\n\t\t\t\t\t\"name\": \"markup.heading.setext.2.markdown\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"html\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)\\\\s*(<!--)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(-->)\",\n\t\t\t\t\t\"name\": \"comment.block.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(^|\\\\G)\\\\s*(?=<(script|style|pre)(\\\\s|$|>)(?!.*?</(script|style|pre)>))\",\n\t\t\t\t\t\"end\": \"(?i)(.*)((</)(script|style|pre)(>))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.$4.end.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\s*|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"while\": \"(?i)^(?!.*</(script|style|pre)>)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(^|\\\\G)\\\\s*(?=</?[a-zA-Z]+[^\\\\s/&gt;]*(\\\\s|$|/?>))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"^(?!\\\\s*$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)\\\\s*(?=(<[a-zA-Z0-9\\\\-](/?>|\\\\s.*?>)|</[a-zA-Z0-9\\\\-]>)\\\\s*$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"^(?!\\\\s*$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"link-def\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.other.reference.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?x)\\n  \\\\s*            # Leading whitespace\\n  (\\\\[)([^]]+?)(\\\\])(:)    # Reference name\\n  [ \\\\t]*          # Optional whitespace\\n  (?:(<)((?:\\\\\\\\[<>]|[^<>\\\\n])*)(>)|(\\\\S+?))      # The url\\n  [ \\\\t]*          # Optional whitespace\\n  (?:\\n      ((\\\\().+?(\\\\)))    # Match title in parens…\\n    | ((\\\").+?(\\\"))    # or in double quotes…\\n    | ((').+?('))    # or in single quotes.\\n  )?            # Title is optional\\n  \\\\s*            # Optional whitespace\\n  $\\n\",\n\t\t\t\"name\": \"meta.link.reference.def.markdown\"\n\t\t},\n\t\t\"list_paragraph\": {\n\t\t\t\"begin\": \"(^|\\\\G)(?=\\\\S)(?![*+->]\\\\s|[0-9]+\\\\.\\\\s)\",\n\t\t\t\"name\": \"meta.paragraph.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heading-setext\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*$|#|[ ]{0,3}([-*_>][ ]{2,}){3,}[ \\\\t]*$\\\\n?|[ ]{0,3}[*+->]|[ ]{0,3}[0-9]+\\\\.)\"\n\t\t},\n\t\t\"lists\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)([ ]{0,3})([*+-])([ \\\\t])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.list.begin.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Currently does not support un-indented second lines.\",\n\t\t\t\t\t\"name\": \"markup.list.unnumbered.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#list_paragraph\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"((^|\\\\G)([ ]{2,4}|\\\\t))|(^[ \\\\t]*$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)([ ]{0,3})([0-9]+[\\\\.\\\\)])([ \\\\t])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.list.begin.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"markup.list.numbered.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#list_paragraph\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"((^|\\\\G)([ ]{2,4}|\\\\t))|(^[ \\\\t]*$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paragraph\": {\n\t\t\t\"begin\": \"(^|\\\\G)[ ]{0,3}(?=[^ \\\\t\\\\n])\",\n\t\t\t\"name\": \"meta.paragraph.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heading-setext\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"while\": \"(^|\\\\G)((?=\\\\s*[-=]{3,}\\\\s*$)|[ ]{4,}(?=[^ \\\\t\\\\n]))\"\n\t\t},\n\t\t\"raw_block\": {\n\t\t\t\"begin\": \"(^|\\\\G)([ ]{4}|\\\\t)\",\n\t\t\t\"name\": \"markup.raw.block.markdown\",\n\t\t\t\"while\": \"(^|\\\\G)([ ]{4}|\\\\t)\"\n\t\t},\n\t\t\"separator\": {\n\t\t\t\"match\": \"(^|\\\\G)[ ]{0,3}([\\\\*\\\\-\\\\_])([ ]{0,2}\\\\2){2,}[ \\\\t]*$\\\\n?\",\n\t\t\t\"name\": \"meta.separator.markdown\"\n\t\t},\n\t\t\"frontMatter\": {\n\t\t\t\"begin\": \"\\\\A(?=(-{3,}))\",\n\t\t\t\"end\": \"^ {,3}\\\\1-*[ \\\\t]*$|^[ \\\\t]*\\\\.{3}$\",\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.frontmatter\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\A(-{3,})(.*)$\",\n\t\t\t\t\t\"while\": \"^(?! {,3}\\\\1-*[ \\\\t]*$|[ \\\\t]*\\\\.{3}$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.frontmatter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.frontmatter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.frontmatter\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"table\": {\n\t\t\t\"name\": \"markup.table.markdown\",\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\|)(?=[^|].+\\\\|\\\\s*$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.table.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"while\": \"(^|\\\\G)(?=\\\\|)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\|\",\n\t\t\t\t\t\"name\": \"punctuation.definition.table.markdown\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\|)\\\\s*(:?-+:?)\\\\s*(?=\\\\|)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.table.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\|)\\\\s*(?=\\\\S)((\\\\\\\\\\\\||[^|])+)(?<=\\\\S)\\\\s*(?=\\\\|)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.tex.latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ampersand\": {\n\t\t\t\"comment\": \"Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid.\",\n\t\t\t\"match\": \"&(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);)\",\n\t\t\t\"name\": \"meta.other.valid-ampersand.markdown\"\n\t\t},\n\t\t\"bold\": {\n\t\t\t\"begin\": \"(?x) (?<open>(\\\\*\\\\*(?=\\\\w)|(?<!\\\\w)\\\\*\\\\*|(?<!\\\\w)\\\\b__))(?=\\\\S) (?=\\n  (\\n    <[^>]*+>              # HTML tags\\n    | (?<raw>`+)([^`]|(?!(?<!`)\\\\k<raw>(?!`))`)*+\\\\k<raw>\\n                      # Raw\\n    | \\\\\\\\[\\\\\\\\`*_{}\\\\[\\\\]()#.!+\\\\->]?+      # Escapes\\n    | \\\\[\\n    (\\n        (?<square>          # Named group\\n          [^\\\\[\\\\]\\\\\\\\]        # Match most chars\\n          | \\\\\\\\.            # Escaped chars\\n          | \\\\[ \\\\g<square>*+ \\\\]    # Nested brackets\\n        )*+\\n      \\\\]\\n      (\\n        (              # Reference Link\\n          [ ]?          # Optional space\\n          \\\\[[^\\\\]]*+\\\\]        # Ref name\\n        )\\n        | (              # Inline Link\\n          \\\\(            # Opening paren\\n            [ \\\\t]*+        # Optional whitespace\\n            <?(.*?)>?      # URL\\n            [ \\\\t]*+        # Optional whitespace\\n            (          # Optional Title\\n              (?<title>['\\\"])\\n              (.*?)\\n              \\\\k<title>\\n            )?\\n          \\\\)\\n        )\\n      )\\n    )\\n    | (?!(?<=\\\\S)\\\\k<open>).            # Everything besides\\n                      # style closer\\n  )++\\n  (?<=\\\\S)(?=__\\\\b|\\\\*\\\\*)\\\\k<open>                # Close\\n)\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.bold.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\S)(\\\\1)\",\n\t\t\t\"name\": \"markup.bold.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\t\t\"begin\": \"(?=<[^>]*?>)\",\n\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracket\": {\n\t\t\t\"comment\": \"Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid.\",\n\t\t\t\"match\": \"<(?![a-zA-Z/?\\\\$!])\",\n\t\t\t\"name\": \"meta.other.valid-bracket.markdown\"\n\t\t},\n\t\t\"escape\": {\n\t\t\t\"match\": \"\\\\\\\\[-`*_#+.!(){}\\\\[\\\\]\\\\\\\\>]\",\n\t\t\t\"name\": \"constant.character.escape.markdown\"\n\t\t},\n\t\t\"image-inline\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.image.markdown\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.image.markdown\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?x)\\n  (\\\\!\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])\\n                # Match the link text.\\n  (\\\\()            # Opening paren for url\\n    # The url\\n      [ \\\\t]*\\n      (\\n         (<)((?:\\\\\\\\[<>]|[^<>\\\\n])*)(>)\\n         | ((?<url>(?>[^\\\\s()]+)|\\\\(\\\\g<url>*\\\\))*)\\n      )\\n      [ \\\\t]*\\n    (?:\\n        ((\\\\().+?(\\\\)))    # Match title in parens…\\n      | ((\\\").+?(\\\"))    # or in double quotes…\\n      | ((').+?('))    # or in single quotes.\\n    )?            # Title is optional\\n    \\\\s*            # Optional whitespace\\n  (\\\\))\\n\",\n\t\t\t\"name\": \"meta.image.inline.markdown\"\n\t\t},\n\t\t\"image-ref\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"constant.other.reference.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\!\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])[ ]?(\\\\[)(.*?)(\\\\])\",\n\t\t\t\"name\": \"meta.image.reference.markdown\"\n\t\t},\n\t\t\"italic\": {\n\t\t\t\"begin\": \"(?x) (?<open>(\\\\*(?=\\\\w)|(?<!\\\\w)\\\\*|(?<!\\\\w)\\\\b_))(?=\\\\S)                # Open\\n  (?=\\n    (\\n      <[^>]*+>              # HTML tags\\n      | (?<raw>`+)([^`]|(?!(?<!`)\\\\k<raw>(?!`))`)*+\\\\k<raw>\\n                        # Raw\\n      | \\\\\\\\[\\\\\\\\`*_{}\\\\[\\\\]()#.!+\\\\->]?+      # Escapes\\n      | \\\\[\\n      (\\n          (?<square>          # Named group\\n            [^\\\\[\\\\]\\\\\\\\]        # Match most chars\\n            | \\\\\\\\.            # Escaped chars\\n            | \\\\[ \\\\g<square>*+ \\\\]    # Nested brackets\\n          )*+\\n        \\\\]\\n        (\\n          (              # Reference Link\\n            [ ]?          # Optional space\\n            \\\\[[^\\\\]]*+\\\\]        # Ref name\\n          )\\n          | (              # Inline Link\\n            \\\\(            # Opening paren\\n              [ \\\\t]*+        # Optional whtiespace\\n              <?(.*?)>?      # URL\\n              [ \\\\t]*+        # Optional whtiespace\\n              (          # Optional Title\\n                (?<title>['\\\"])\\n                (.*?)\\n                \\\\k<title>\\n              )?\\n            \\\\)\\n          )\\n        )\\n      )\\n      | \\\\k<open>\\\\k<open>                   # Must be bold closer\\n      | (?!(?<=\\\\S)\\\\k<open>).            # Everything besides\\n                        # style closer\\n    )++\\n    (?<=\\\\S)(?=_\\\\b|\\\\*)\\\\k<open>                # Close\\n  )\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.italic.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\S)(\\\\1)((?!\\\\1)|(?=\\\\1\\\\1))\",\n\t\t\t\"name\": \"markup.italic.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\t\t\"begin\": \"(?=<[^>]*?>)\",\n\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"link-email\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(<)((?:mailto:)?[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*)(>)\",\n\t\t\t\"name\": \"meta.link.email.lt-gt.markdown\"\n\t\t},\n\t\t\"link-inet\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(<)((?:https?|ftp)://.*?)(>)\",\n\t\t\t\"name\": \"meta.link.inet.markdown\"\n\t\t},\n\t\t\"link-inline\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?x)\\n  (\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])\\n                # Match the link text.\\n  (\\\\()            # Opening paren for url\\n    # The url\\n      [ \\\\t]*\\n      (\\n         (<)((?:\\\\\\\\[<>]|[^<>\\\\n])*)(>)\\n         | ((?<url>(?>[^\\\\s()]+)|\\\\(\\\\g<url>*\\\\))*)\\n      )\\n      [ \\\\t]*\\n    # The title  \\n    (?:\\n        ((\\\\()[^()]*(\\\\)))    # Match title in parens…\\n      | ((\\\")[^\\\"]*(\\\"))    # or in double quotes…\\n      | ((')[^']*('))    # or in single quotes.\\n    )?            # Title is optional\\n    \\\\s*            # Optional whitespace\\n  (\\\\))\\n\",\n\t\t\t\"name\": \"meta.link.inline.markdown\"\n\t\t},\n\t\t\"link-ref\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"constant.other.reference.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<![\\\\]\\\\\\\\])(\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])(\\\\[)([^\\\\]]*+)(\\\\])\",\n\t\t\t\"name\": \"meta.link.reference.markdown\"\n\t\t},\n\t\t\"link-ref-literal\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<![\\\\]\\\\\\\\])(\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])[ ]?(\\\\[)(\\\\])\",\n\t\t\t\"name\": \"meta.link.reference.literal.markdown\"\n\t\t},\n\t\t\"link-ref-shortcut\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<![\\\\]\\\\\\\\])(\\\\[)((?:[^\\\\s\\\\[\\\\]\\\\\\\\]|\\\\\\\\[\\\\[\\\\]])+?)((?<!\\\\\\\\)\\\\])\",\n\t\t\t\"name\": \"meta.link.reference.markdown\"\n\t\t},\n\t\t\"raw\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.raw.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.raw.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(`+)((?:[^`]|(?!(?<!`)\\\\1(?!`))`)*+)(\\\\1)\",\n\t\t\t\"name\": \"markup.inline.raw.string.markdown\"\n\t\t},\n\t\t\"strikethrough\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.strikethrough.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\t\t\t\t\"begin\": \"(?=<[^>]*?>)\",\n\t\t\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.strikethrough.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<!\\\\\\\\)(~{2,})((?:[^~]|(?!(?<![~\\\\\\\\])\\\\1(?!~))~)*+)(\\\\1)\",\n\t\t\t\"name\": \"markup.strikethrough.markdown\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/less/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/less/build/update-grammar.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nvar updateGrammar = require('vscode-grammar-updater');\n\nfunction adaptLess(grammar) {\n\tgrammar.name = 'Less';\n\tgrammar.scopeName = 'source.css.less';\n}\n\nasync function updateGrammars() {\n\tawait updateGrammar.update('radium-v/Better-Less', 'Syntaxes/Better%20Less.tmLanguage', './syntaxes/less.tmLanguage.json', adaptLess, 'master');\n}\n\nupdateGrammars();\n\n"
  },
  {
    "path": "extensions/less/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"language-less\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/radium-v/Better-Less\",\n\t\t\t\t\t\"commitHash\": \"63c0cba9792e49e255cce0f6dd03250fb30591e6\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.6.1\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/less/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t],\n\t\t\"lineComment\": \"//\"\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*\\\\/\\\\*\\\\s*#region\\\\b\\\\s*(.*?)\\\\s*\\\\*\\\\/\",\n\t\t\t\"end\": \"^\\\\s*\\\\/\\\\*\\\\s*#endregion\\\\b.*\\\\*\\\\/\"\n\t\t}\n\t},\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"(^.*\\\\{[^}]*$)\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*\\\\}\"\n\t},\n\t\"wordPattern\": \"(#?-?\\\\d*\\\\.\\\\d\\\\w*%?)|(::?[\\\\w-]+(?=[^,{;]*[,{]))|(([@#.!])?[\\\\w-?]+%?|[@#!.])\",\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/less/package.json",
    "content": "{\n  \"name\": \"less\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammar.js\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"less\",\n        \"aliases\": [\n          \"Less\",\n          \"less\"\n        ],\n        \"extensions\": [\n          \".less\"\n        ],\n        \"mimetypes\": [\n          \"text/x-less\",\n          \"text/less\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"less\",\n        \"scopeName\": \"source.css.less\",\n        \"path\": \"./syntaxes/less.tmLanguage.json\"\n      }\n    ],\n    \"problemMatchers\": [\n      {\n        \"name\": \"lessc\",\n        \"label\": \"Lessc compiler\",\n        \"owner\": \"lessc\",\n        \"source\": \"less\",\n        \"fileLocation\": \"absolute\",\n        \"pattern\": {\n          \"regexp\": \"(.*)\\\\sin\\\\s(.*)\\\\son line\\\\s(\\\\d+),\\\\scolumn\\\\s(\\\\d+)\",\n          \"message\": 1,\n          \"file\": 2,\n          \"line\": 3,\n          \"column\": 4\n        }\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/less/package.nls.json",
    "content": "{\n\t\"displayName\": \"Less Language Basics\",\n\t\"description\": \"Provides syntax highlighting, bracket matching and folding in Less files.\"\n}\n"
  },
  {
    "path": "extensions/less/syntaxes/less.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/radium-v/Better-Less/blob/master/Syntaxes/Better%20Less.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/radium-v/Better-Less/commit/63c0cba9792e49e255cce0f6dd03250fb30591e6\",\n\t\"name\": \"Less\",\n\t\"scopeName\": \"source.css.less\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#comment-block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#less-namespace-accessors\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#less-extend\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at-rules\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#less-variable-assignment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#property-list\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#selector\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"angle-type\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i:[-+]?(?:(?:\\\\d*\\\\.\\\\d+(?:[eE](?:[-+]?\\\\d+))*)|(?:[-+]?\\\\d+))(deg|grad|rad|turn))\\\\b\",\n\t\t\t\"name\": \"constant.numeric.less\"\n\t\t},\n\t\t\"arbitrary-repetition\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\s*(?:(,))\"\n\t\t},\n\t\t\"at-charset\": {\n\t\t\t\"begin\": \"\\\\s*((@)charset\\\\b)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.charset.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*((?=;|$))\",\n\t\t\t\"name\": \"meta.at-rule.charset.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-container\": {\n\t\t\t\"begin\": \"(?=\\\\s*@container)\",\n\t\t\t\"end\": \"\\\\s*(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)container)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.container.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.container.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.container.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\s*(?=[^{;])\",\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(?=[{;])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(not|and|or)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.at-rule.container-query.less\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(aspect-ratio|block-size|height|inline-size|orientation|width)\\\\b\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.size-feature.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"((<|>)=?)|=|\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"portrait|landscape\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\/\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#style-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"--|(?:-?(?:(?:[a-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R]))))(?:(?:[-\\\\da-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R])))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.container-name.css\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-counter-style\": {\n\t\t\t\"begin\": \"\\\\s*((@)counter-style\\\\b)\\\\s+(?:(?i:\\\\b(decimal|none)\\\\b)|(-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*))\\\\s*(?=\\\\{|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.counter-style.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.counter-style-name.less\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.other.counter-style-name.css\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.begin.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.at-rule.counter-style.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rule-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-custom-media\": {\n\t\t\t\"begin\": \"(?=\\\\s*@custom-media\\\\b)\",\n\t\t\t\"end\": \"\\\\s*(?=;)\",\n\t\t\t\"name\": \"meta.at-rule.custom-media.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.property-list.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\s*;\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.custom-media.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.custom-media.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\s*((@)custom-media)(?=.*?)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#media-query-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-font-face\": {\n\t\t\t\"begin\": \"\\\\s*((@)font-face)\\\\s*(?=\\\\{|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.font-face.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.at-rule.font-face.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rule-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-import\": {\n\t\t\t\"begin\": \"\\\\s*((@)import\\\\b)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.import.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\;\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.at-rule.import.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#url-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=([\\\"'])|([\\\"']\\\\)))\\\\s*\",\n\t\t\t\t\t\"end\": \"\\\\s*(?=\\\\;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#media-query\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"reference|inline|less|css|once|multiple|optional\",\n\t\t\t\t\t\t\t\"name\": \"constant.language.import-directive.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-keyframes\": {\n\t\t\t\"begin\": \"\\\\s*((@)keyframes)(?=.*?\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.keyframe.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"support.constant.keyframe.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.keyframe-selector.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\s*(?:(from|to)|((?:\\\\.[0-9]+|[0-9]+(?:\\\\.[0-9]*)?)(%)))\\\\s*,?\\\\s*\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(?=[^{;])\",\n\t\t\t\t\t\"end\": \"\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.keyframe.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keyframe-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-media\": {\n\t\t\t\"begin\": \"(?=\\\\s*@media\\\\b)\",\n\t\t\t\"end\": \"\\\\s*(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*((@)media)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.media.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.media.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.media.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#media-query-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-namespace\": {\n\t\t\t\"begin\": \"\\\\s*((@)namespace)\\\\s+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.namespace.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\;\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.at-rule.namespace.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#url-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)\",\n\t\t\t\t\t\"name\": \"entity.name.constant.namespace-prefix.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-page\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.page.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\s*((@)page)\\\\s*(?:(:)(first|left|right))?\\\\s*(?=\\\\{|$)\",\n\t\t\t\"name\": \"meta.at-rule.page.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rule-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-rules\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-charset\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-container\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-counter-style\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-custom-media\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-font-face\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-media\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-import\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-keyframes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-namespace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-page\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-supports\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-viewport\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-supports\": {\n\t\t\t\"begin\": \"(?=\\\\s*@supports\\\\b)\",\n\t\t\t\"end\": \"(?=\\\\s*)(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*((@)supports)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.supports.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.supports.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.supports.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#at-supports-operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#at-supports-parens\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.property-list.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at-supports-operators\": {\n\t\t\t\"match\": \"\\\\b(?:and|or|not)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.logic.less\"\n\t\t},\n\t\t\"at-supports-parens\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-supports-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-supports-parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attr-function\": {\n\t\t\t\"begin\": \"\\\\b(attr)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualified-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?x)\\\\b((?i:em|ex|ch|rem)|(?i:vw|vh|vmin|vmax)|(?i:cm|mm|q|in|pt|pc|px|fr)|(?i:deg|grad|rad|turn)|(?i:s|ms)|(?i:Hz|kHz)|(?i:dpi|dpcm|dppx))\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-value-constants\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attr-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#color-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#counter-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cross-fade-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cubic-bezier-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#filter-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fit-content-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#format-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gradient-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#grid-repeat-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#local-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#minmax-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#shape-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#steps-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#symbols-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#transform-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#url-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"calc-function\": {\n\t\t\t\"begin\": \"\\\\b(calc)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.calc.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attr-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-math\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#relative-color\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"color-adjuster-operators\": {\n\t\t\t\"match\": \"[\\\\-\\\\+*](?=\\\\s+)\",\n\t\t\t\"name\": \"keyword.operator.less\"\n\t\t},\n\t\t\"color-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(rgba?)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"rgb(), rgba()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#value-separator\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(hsla|hsl|hwb|oklab|oklch|lab|lch)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"hsla, hsl, hwb, oklab, oklch, lab, lch\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#value-separator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(light-dark)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"light-dark()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-color-functions\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"color-values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#color-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.color.w3c-standard-color-name.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rebeccapurple|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.color.w3c-extended-color-keywords.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b((?i)currentColor|transparent)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.color.w3c-special-color-keyword.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(#)(\\\\h{3}|\\\\h{4}|\\\\h{6}|\\\\h{8})\\\\b\",\n\t\t\t\t\t\"name\": \"constant.other.color.rgb-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#relative-color\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comma-delimiter\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\s*(,)\\\\s*\"\n\t\t},\n\t\t\"comment-block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-line\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment-line\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(//).*$\\\\n?\",\n\t\t\t\"name\": \"comment.line.double-slash.less\"\n\t\t},\n\t\t\"counter-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(counter)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:--(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))+|-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.counter-name.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?=,)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b((?xi:arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|decimal-leading-zero|decimal|devanagari|disclosure-closed|disclosure-open|disc|ethiopic-numeric|georgian|gujarati|gurmukhi|hebrew|hiragana-iroha|hiragana|japanese-formal|japanese-informal|kannada|katakana-iroha|katakana|khmer|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian|upper-latin|upper-roman)|none)\\\\b\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.counter-style.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(counters)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.counter-name.less string.unquoted.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?=,)\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b((?xi:arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|decimal-leading-zero|decimal|devanagari|disclosure-closed|disclosure-open|disc|ethiopic-numeric|georgian|gujarati|gurmukhi|hebrew|hiragana-iroha|hiragana|japanese-formal|japanese-informal|kannada|katakana-iroha|katakana|khmer|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian|upper-latin|upper-roman)|none)\\\\b\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.counter-style.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cross-fade-function\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(cross-fade)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.image.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#image-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cubic-bezier-function\": {\n\t\t\t\"begin\": \"\\\\b(cubic-bezier)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.timing.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.group.less\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"custom-property-name\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.custom-property.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.type.custom-property.name.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\s*(--)((?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))+)\",\n\t\t\t\"name\": \"support.type.custom-property.less\"\n\t\t},\n\t\t\"dimensions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#frequency-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#time-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"filter-function\": {\n\t\t\t\"begin\": \"\\\\b(filter)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#filter-functions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"filter-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(blur)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(brightness|contrast|grayscale|invert|opacity|saturate|sepia)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(drop-shadow)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(hue-rotate)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.filter.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fit-content-function\": {\n\t\t\t\"begin\": \"\\\\b(fit-content)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.grid.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"format-function\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(format)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.format.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"frequency-type\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i:[-+]?(?:(?:\\\\d*\\\\.\\\\d+(?:[eE](?:[-+]?\\\\d+))*)|(?:[-+]?\\\\d+))(Hz|kHz))\\\\b\",\n\t\t\t\"name\": \"constant.numeric.less\"\n\t\t},\n\t\t\"global-property-values\": {\n\t\t\t\"match\": \"\\\\b(?:initial|inherit|unset|revert-layer|revert)\\\\b\",\n\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t},\n\t\t\"gradient-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b((?:repeating-)?linear-gradient)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.gradient.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bto\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(top|right|bottom|left)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b((?:repeating-)?radial-gradient)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.gradient.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(at|circle|ellipse)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(top|right|bottom|left|center|(farthest|closest)-(corner|side))\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"grid-repeat-function\": {\n\t\t\t\"begin\": \"\\\\b(repeat)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.grid.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#minmax-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#integer-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(auto-(fill|fit))\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"support.keyword.repetitions.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(((max|min)-content)|auto)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"image-function\": {\n\t\t\t\"begin\": \"\\\\b(image)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.image.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"image-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cross-fade-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gradient-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#url-function\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"important\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\!)\\\\s*important\",\n\t\t\t\"name\": \"keyword.other.important.less\"\n\t\t},\n\t\t\"integer-type\": {\n\t\t\t\"match\": \"(?:[-+]?\\\\d+)\",\n\t\t\t\"name\": \"constant.numeric.less\"\n\t\t},\n\t\t\"keyframe-name\": {\n\t\t\t\"begin\": \"\\\\s*(-?(?:[_a-z]|[^\\\\x{00}-\\\\x{7F}]|(?:(:?\\\\\\\\[0-9a-f]{1,6}(\\\\r\\\\n|[\\\\s\\\\t\\\\r\\\\n\\\\f])?)|\\\\\\\\[^\\\\r\\\\n\\\\f0-9a-f]))(?:[_a-z0-9-]|[^\\\\x{00}-\\\\x{7F}]|(?:(:?\\\\\\\\[0-9a-f]{1,6}(\\\\r\\\\n|[\\\\t\\\\r\\\\n\\\\f])?)|\\\\\\\\[^\\\\r\\\\n\\\\f0-9a-f]))*)?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.constant.animation-name.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?:(,)|(?=[{;]))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.less\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"length-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?:[-+]?)(?:\\\\d+\\\\.\\\\d+|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?(em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|m|q|in|pt|pc|px|fr|dpi|dpcm|dppx|x)\",\n\t\t\t\t\t\"name\": \"constant.numeric.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:[-+]?)0\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-boolean-function\": {\n\t\t\t\"begin\": \"\\\\b(boolean)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.boolean.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-logical-comparisons\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-color-blend-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(multiply|screen|overlay|(soft|hard)light|difference|exclusion|negation|average)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-blend.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-color-channel-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(hue|saturation|lightness|hsv(hue|saturation|value)|red|green|blue|alpha|luma|luminance)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-definition.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-color-definition-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(argb)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-definition.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"argb()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(hsva?)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"hsva(), hsv()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#integer-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-color-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-color-blend-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-color-channel-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-color-definition-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-color-operation-functions\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-color-operation-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(fade|shade|tint)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-operation.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(spin)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-operation.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(((de)?saturate)|((light|dark)en)|(fade(in|out)))(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-operation.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\brelative\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.language.relative.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(contrast)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-operation.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(greyscale)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-operation.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(mix)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color-operation.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-math\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-extend\": {\n\t\t\t\"begin\": \"(:)(extend)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.extend.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\ball\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"constant.language.all.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-boolean-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-color-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-if-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-list-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-math-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-misc-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-string-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-type-functions\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-if-function\": {\n\t\t\t\"begin\": \"\\\\b(if)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.if.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-mixin-guards\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-list-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(length)(?=\\\\()\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.length.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(extract)(?=\\\\()\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.extract.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#integer-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(range)(?=\\\\()\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.range.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#integer-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-logical-comparisons\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\s*(=|((<|>)=?))\\\\s*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-logical-comparisons\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\btrue|false\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-math\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[-\\\\+\\\\*\\\\/]\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-math-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(ceil|floor|percentage|round|sqrt|abs|a?(sin|cos|tan))(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.math.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.math.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"((pi)(\\\\()(\\\\)))\",\n\t\t\t\t\t\"name\": \"meta.function-call.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(pow|m(od|in|ax))(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.math.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-misc-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(color)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.color.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(image-(size|width|height))(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.image.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(convert|unit)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.convert.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((c|m)?m|in|p(t|c|x)|m?s|g?rad|deg|turn|%|r?em|ex|ch)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(data-uri)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.data-uri.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\s*(?:(,))\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\b(default(\\\\()(\\\\)))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.default.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(get-unit)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.get-unit.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#dimensions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(svg-gradient)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.svg-gradient.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bto\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(top|right|bottom|left|center)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(at|circle|ellipse)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-mixin-guards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(and|not|or)?\\\\s*(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variable-comparison\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.group.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"default((\\\\()(\\\\)))\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.function.default.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-logical-comparisons\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-namespace-accessors\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\s*when\\\\b)\",\n\t\t\t\t\t\"end\": \"\\\\s*(?:(,)|(?=[{;]))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.conditional.guarded-namespace.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\s*(when)(?=.*?)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-mixin-guards\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\s*(\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.property-list.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\t\t\"name\": \"meta.block.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variable-assignment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(;)|(?=[})])\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-string-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(e(scape)?)(?=\\\\()\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.escape.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(%)(?=\\\\()\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.format.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(replace)(?=\\\\()\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.replace.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(~)('|\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"markup.raw.inline.less\",\n\t\t\t\t\t\"end\": \"('|\\\")|(\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.other.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-content\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-type-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(is(number|string|color|keyword|url|pixel|em|percentage|ruleset))(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.type.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(isunit)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.type.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?x)\\\\b((?i:em|ex|ch|rem)|(?i:vw|vh|vmin|vmax)|(?i:cm|mm|q|in|pt|pc|px|fr)|(?i:deg|grad|rad|turn)|(?i:s|ms)|(?i:Hz|kHz)|(?i:dpi|dpcm|dppx))\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(isdefined)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.type.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-variable-assignment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(@)(-?(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.other.variable.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(;|(\\\\.{3})|(?=\\\\)))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.spread.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.property-value.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(((\\\\+_?)?):)([\\\\s\\\\t]*)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-variable-comparison\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(@{1,2})([-]?([_a-z]|[^\\\\x{00}-\\\\x{7F}]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.other.variable.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(?=\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\s*(=|((<|>)=?))\\\\s*\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\btrue\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"constant.language.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"less-variable-interpolation\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.expression.less\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.other.variable.less\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.expression.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(\\\\{)([-\\\\w]+)(\\\\})\",\n\t\t\t\"name\": \"variable.other.readwrite.less\"\n\t\t},\n\t\t\"less-variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.other.variable.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\s*(@@?)([-\\\\w]+)\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literal-string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(')|(\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-content\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\")|(\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-content\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"local-function\": {\n\t\t\t\"begin\": \"\\\\b(local)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.function.font-face.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"media-query\": {\n\t\t\t\"begin\": \"\\\\s*(only|not)?\\\\s*(all|aural|braille|embossed|handheld|print|projection|screen|tty|tv)?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.logic.media.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.constant.media.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?:(,)|(?=[{;]))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#custom-property-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*(and)?\\\\s*(\\\\()\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logic.media.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(--|(?:-?(?:(?:[a-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R]))))(?:(?:[-\\\\da-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R])))*)\\\\s*(?=[:)])\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.media.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(((\\\\+_?)?):)|(?=\\\\))\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(portrait|landscape|progressive|interlace)\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\s*(\\\\d+)(/)(\\\\d+)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"media-query-list\": {\n\t\t\t\"begin\": \"\\\\s*(?=[^{;])\",\n\t\t\t\"end\": \"\\\\s*(?=[{;])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#media-query\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"minmax-function\": {\n\t\t\t\"begin\": \"\\\\b(minmax)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.grid.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(max-content|min-content)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"number-type\": {\n\t\t\t\"match\": \"(?:[-+]?)(?:\\\\d+\\\\.\\\\d+|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?\",\n\t\t\t\"name\": \"constant.numeric.less\"\n\t\t},\n\t\t\"numeric-values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#dimensions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"percentage-type\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?:[-+]?)(?:\\\\d+\\\\.\\\\d+|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?(%)\",\n\t\t\t\"name\": \"constant.numeric.less\"\n\t\t},\n\t\t\"property-list\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(?=[^;]*)\\\\{)\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-value-constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"align-content, align-items, align-self, justify-content, justify-items, justify-self\",\n\t\t\t\t\t\"match\": \"(?x)\\\\b( flex-start | flex-end | start | end | space-between | space-around | space-evenly | stretch | baseline | safe | unsafe | legacy | anchor-center | first | last | self-start | self-end )\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"alignment-baseline\",\n\t\t\t\t\t\"match\": \"(?x)\\\\b( text-before-edge | before-edge | middle | central | text-after-edge | after-edge | ideographic | alphabetic | hanging | mathematical | top | center | bottom )\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#global-property-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cubic-bezier-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#steps-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"animation-composition\",\n\t\t\t\t\t\"match\": \"\\\\b(?:replace|add|accumulate)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"animation-direction\",\n\t\t\t\t\t\"match\": \"\\\\b(?:normal|alternate-reverse|alternate|reverse)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"animation-fill-mode\",\n\t\t\t\t\t\"match\": \"\\\\b(?:forwards|backwards|both)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"animation-iteration-count\",\n\t\t\t\t\t\"match\": \"\\\\b(?:infinite)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"animation-play-state\",\n\t\t\t\t\t\"match\": \"\\\\b(?:running|paused)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"animation-range, animation-range-start, animation-range-end\",\n\t\t\t\t\t\"match\": \"\\\\b(?:entry-crossing|exit-crossing|entry|exit)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"animation-timing-function\",\n\t\t\t\t\t\"match\": \"(?x)\\\\b(linear | ease-in-out | ease-in | ease-out | ease | step-start | step-end)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\b( absolute | active | add | all-petite-caps | all-small-caps | all-scroll | all | alphabetic | alpha | alternate-reverse | alternate | always | annotation | antialiased | at | autohiding-scrollbar | auto | avoid-column | avoid-page | avoid-region | avoid | background-color | background-image | background-position | background-size | background-repeat | background | backwards | balance | baseline | below | bevel | bicubic | bidi-override | blink | block-line-height | block-start | block-end | block | blur | bolder | bold | border-top-left-radius | border-top-right-radius | border-bottom-left-radius | border-bottom-right-radius | border-end-end-radius | border-end-start-radius | border-start-end-radius | border-start-start-radius | border-block-start-color | border-block-start-style | border-block-start-width | border-block-start | border-block-end-color | border-block-end-style | border-block-end-width | border-block-end | border-block-color | border-block-style | border-block-width | border-block | border-inline-start-color | border-inline-start-style | border-inline-start-width | border-inline-start | border-inline-end-color | border-inline-end-style | border-inline-end-width | border-inline-end | border-inline-color | border-inline-style | border-inline-width | border-inline | border-top-color | border-top-style | border-top-width | border-top | border-right-color | border-right-style | border-right-width | border-right | border-bottom-color | border-bottom-style | border-bottom-width | border-bottom | border-left-color | border-left-style | border-left-width | border-left | border-image-outset | border-image-repeat | border-image-slice | border-image-source | border-image-width | border-image | border-color | border-style | border-width | border-radius | border-collapse | border-spacing | border | both | bottom | box-shadow | box | break-all | break-word | break-spaces | brightness | butt(on)? | capitalize | central | center | char(acter-variant)? | cjk-ideographic | clip | clone | close-quote | closest-corner | closest-side | col-resize | collapse | color-stop | color-burn | color-dodge | color | column-count | column-gap | column-reverse | column-rule-color | column-rule-width | column-rule | column-width | columns | column | common-ligatures | condensed | consider-shifts | contain | content-box | contents? | contextual | contrast | cover | crisp-edges | crispEdges | crop | crosshair | cross | darken | dashed | default | dense | device-width | diagonal-fractions | difference | disabled | discard | discretionary-ligatures | disregard-shifts | distribute-all-lines | distribute-letter | distribute-space | distribute | dotted | double | drop-shadow | [nsew]{1,4}-resize | ease-in-out | ease-in | ease-out | ease | element | ellipsis | embed | end | EndColorStr | evenodd | exclude-ruby | exclusion | expanded | extra-condensed | extra-expanded | farthest-corner | farthest-side | farthest | fill-box | fill-opacity | fill | filter | fit-content | fixed | flat | flex-basis | flex-end | flex-grow | flex-shrink | flex-start | flexbox | flex | flip | flood-color | font-size-adjust | font-size | font-stretch | font-weight | font | forwards | from-image | from | full-width | gap | geometricPrecision | glyphs | gradient | grayscale | grid-column-gap | grid-column | grid-row-gap | grid-row | grid-gap | grid-height | grid | groove | hand | hanging | hard-light | height | help | hidden | hide | historical-forms | historical-ligatures | horizontal-tb | horizontal | hue | ideographic | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space | inactive | include-ruby | infinite | inherit | initial | inline-end | inline-size | inline-start | inline-table | inline-line-height | inline-flexbox | inline-flex | inline-box | inline-block | inline | inset | inside | inter-ideograph | inter-word | intersect | invert | isolate | isolation | italic | jis(04|78|83|90) | justify-all | justify | keep-all | larger | large | last | layout | left | letter-spacing | lighten | lighter | lighting-color | linear-gradient | linearRGB | linear | line-edge | line-height | line-through | line | lining-nums | list-item | local | loose | lowercase | lr-tb | ltr | luminosity | luminance | manual | manipulation | margin-bottom | margin-box | margin-left | margin-right | margin-top | margin | marker(-offset|s)? | match-parent | mathematical | max-(content|height|lines|size|width) | medium | middle | min-(content|height|width) | miter | mixed | move | multiply | newspaper | no-change | no-clip | no-close-quote | no-open-quote | no-common-ligatures | no-discretionary-ligatures | no-historical-ligatures | no-contextual | no-drop | no-repeat | none | nonzero | normal | not-allowed | nowrap | oblique | offset-after | offset-before | offset-end | offset-start | offset | oldstyle-nums | opacity | open-quote | optimize(Legibility|Precision|Quality|Speed) | order | ordinal | ornaments | outline-color | outline-offset | outline-width | outline | outset | outside | overline | over-edge | overlay | padding(-bottom|-box|-left|-right|-top|-box)? | page | paint(ed)? | paused | pan-(x|left|right|y|up|down) | perspective-origin | petite-caps | pixelated | pointer | pinch-zoom | pretty | pre(-line|-wrap)? | preserve-3d | preserve-breaks | preserve-spaces | preserve | progid:DXImageTransform\\\\.Microsoft\\\\.(Alpha|Blur|dropshadow|gradient|Shadow) | progress | proportional-nums | proportional-width | radial-gradient | recto | region | relative | repeating-linear-gradient | repeating-radial-gradient | repeat-x | repeat-y | repeat | replaced | reset-size | reverse | revert-layer | revert | ridge | right | round | row-gap | row-resize | row-reverse | row | rtl | ruby | running | saturate | saturation | screen | scrollbar | scroll-position | scroll | separate | sepia | scale-down | semi-condensed | semi-expanded | shape-image-threshold | shape-margin | shape-outside | show | sideways-lr | sideways-rl | sideways | simplified | size | slashed-zero | slice | small-caps | smaller | small | smooth | snap | solid | soft-light | space-around | space-between | space | span | sRGB | stable | stacked-fractions | stack | startColorStr | start | static | step-end | step-start | sticky | stop-color | stop-opacity | stretch | strict | stroke-box | stroke-dasharray | stroke-dashoffset | stroke-miterlimit | stroke-opacity | stroke-width | stroke | styleset | style | stylistic | subgrid | subpixel-antialiased | subtract | super | swash | table-caption | table-cell | table-column-group | table-footer-group | table-header-group | table-row-group | table-column | table-row | table | tabular-nums | tb-rl | text((-bottom|-(decoration|emphasis)-color|-indent|-(over|under)-edge|-shadow|-size(-adjust)?|-top)|field)? | thick |thin | titling-caps | titling-case | top | touch | to | traditional | transform-origin | transform-style | transform | ultra-condensed | ultra-expanded | under-edge | underline | unicase | unset | uppercase | upright | use-glyph-orientation | use-script | verso | vertical(-align|-ideographic|-lr|-rl|-text)? | view-box | viewport-fill-opacity | viewport-fill | visibility | visibleFill | visiblePainted | visibleStroke | visible | wait | wavy | weight | whitespace | width | word-spacing | wrap-reverse | wrap-reverse | wrap | xx?-(large|small) | z-index | zero | zoom-in | zoom-out | zoom | arabic-indic | armenian | bengali | cambodian | circle | cjk-decimal | cjk-earthly-branch | cjk-heavenly-stem | decimal-leading-zero | decimal | devanagari | disclosure-closed | disclosure-open | disc | ethiopic-numeric | georgian | gujarati | gurmukhi | hebrew | hiragana-iroha | hiragana | japanese-formal | japanese-informal | kannada | katakana-iroha | katakana | khmer | korean-hangul-formal | korean-hanja-formal | korean-hanja-informal | lao | lower-alpha | lower-armenian | lower-greek | lower-latin | lower-roman | malayalam | mongolian | myanmar | oriya | persian | simp-chinese-formal | simp-chinese-informal | square | tamil | telugu | thai | tibetan | trad-chinese-formal | trad-chinese-informal | upper-alpha | upper-armenian | upper-latin | upper-roman)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(sans-serif|serif|monospace|fantasy|cursive)\\\\b(?=\\\\s*[;,\\\\n}])\",\n\t\t\t\t\t\"name\": \"support.constant.font-name.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property-values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#color-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unicode-range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#color-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-value-constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-math\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#important\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pseudo-selectors\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)(dir)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"ltr|rtl\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.dir.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)(lang)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)(not)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)(nth(-last)?-(child|of-type))(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.function-call.less\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(even|odd)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.pseudo-class.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:([-+])?(?:\\\\d+)?(n)(\\\\s*([-+])\\\\s*\\\\d+)?|[-+]?\\\\s*\\\\d+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-math\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-strings\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)(host-context|host|has|is|not|where)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?x)(:)( active | any-link | autofill | blank | buffering | checked | current | default | defined | disabled | empty | enabled | first-child | first-of-type | first | focus-visible | focus-within | focus | fullscreen | future | host | hover | in-range | indeterminate | invalid | last-child | last-of-type | left | local-link | link | modal | muted | only-child | only-of-type | optional | out-of-range | past | paused | picture-in-picture | placeholder-shown | playing | popover-open | read-only | read-write | required | right | root | scope | seeking | stalled | target-within | target | user-invalid | user-valid | valid | visited | volume-locked )\\\\b\",\n\t\t\t\t\t\"name\": \"meta.function-call.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(::?)(highlight|part|state)(?=\\\\s*(\\\\())\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"::highlight()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-element.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"--|(?:-?(?:(?:[a-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R]))))(?:(?:[-\\\\da-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R])))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(::?)slotted(?=\\\\s*(\\\\())\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"::slotted()\",\n\t\t\t\t\t\"contentName\": \"meta.function-call.less\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-element.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"name\": \"meta.group.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"defined pseudo-elements\",\n\t\t\t\t\t\"match\": \"(?x)(::?)(after | backdrop | before | cue | file-selector-button | first-letter | first-line | grammar-error | marker | placeholder | selection | spelling-error | target-text | view-transition-group | view-transition-image-pair | view-transition-new | view-transition-old | view-transition)\\\\b\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-element.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.namespace.vendor-prefix.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"other possible pseudo-elements\",\n\t\t\t\t\t\"match\": \"(?x)(::?)(-\\\\w+-)(--|(?:-?(?:(?:[a-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R]))))(?:(?:[-\\\\da-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R])))*)\\\\b\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-element.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qualified-name\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.constant.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.namespace.wildcard.less\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?:(-?(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)|(\\\\*))?([|])(?!=)\"\n\t\t},\n\t\t\"regexp-function\": {\n\t\t\t\"begin\": \"\\\\b(regexp)(?=\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"support.function.regexp.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"relative-color\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"from\",\n\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b[hslawbch]\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"rule-list\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*\\\\})\",\n\t\t\t\t\t\"name\": \"meta.property-list.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\s*(;)|(?=[})])\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-extend\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"rule-list-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at-rules\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variable-assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[-\\\\w]*?@\\\\{.*\\\\}[-\\\\w]*?\\\\s*:[^;{(]*(?=[;})]))\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=[^\\\\s:])\",\n\t\t\t\t\t\t\t\"end\": \"(?=(((\\\\+_?)?):)[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(((\\\\+_?)?):)(?=[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"support.type.property-name.less\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[-a-z])\",\n\t\t\t\t\t\"end\": \"$|(?![-a-z])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#custom-property-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(-[\\\\w-]+?-)((?:(?:[a-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R])))(?:(?:[-\\\\da-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R])))*)\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.namespace.vendor-prefix.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"comment\": \"vendor-prefixed properties\",\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(((\\\\+_?)?):)(?=[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.property-value.less\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"[\\\\w-]+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#filter-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(border((-(bottom|top)-(left|right))|((-(start|end)){2}))?-radius|(border-image(?!-)))\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"comment\": \"border-radius and border-image properties utilize a slash as a separator\",\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(((\\\\+_?)?):)(?=[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.property-value.less\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#value-separator\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.custom-property.prefix.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.custom-property.name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\b(var-)(-?(?:[[-\\\\w][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)(?=\\\\s)\",\n\t\t\t\t\t\t\t\"name\": \"invalid.deprecated.custom-property.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\bfont(-family)?(?!-)\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.property-name.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(((\\\\+_?)?):)([\\\\s\\\\t]*)\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*(\\\\s+-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\banimation-timeline\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(((\\\\+_?)?):)(?=[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.property-value.less\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#custom-property-name\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scroll-function\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#view-function\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#important\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\banimation(?:-name)?(?=(?:\\\\+_?)?:)\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(((\\\\+_?)?):)(?=[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.property-value.less\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#builtin-functions\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-functions\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#numeric-values\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#property-value-constants\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"-?(?:[_a-zA-Z]|[^\\\\x{00}-\\\\x{7F}]|(?:(:?\\\\\\\\[0-9a-f]{1,6}(\\\\r\\\\n|[\\\\s\\\\t\\\\r\\\\n\\\\f])?)|\\\\\\\\[^\\\\r\\\\n\\\\f0-9a-f]))(?:[-_a-zA-Z0-9]|[^\\\\x{00}-\\\\x{7F}]|(?:(:?\\\\\\\\[0-9a-f]{1,6}(\\\\r\\\\n|[\\\\t\\\\r\\\\n\\\\f])?)|\\\\\\\\[^\\\\r\\\\n\\\\f0-9a-f]))*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.constant.animation-name.less string.unquoted.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#less-math\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#important\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(transition(-(property|duration|delay|timing-function))?)\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(((\\\\+_?)?):)(?=[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.property-value.less\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#time-type\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#cubic-bezier-function\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#steps-function\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(?:backdrop-)?filter\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.property-name.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(((\\\\+_?)?):)([\\\\s\\\\t]*)\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(inherit|initial|unset|none)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#filter-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\bwill-change\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.property-name.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(((\\\\+_?)?):)([\\\\s\\\\t]*)\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"unset|initial|inherit|will-change|auto|scroll-position|contents\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.property-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"-?(?:[[-\\\\w][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\bcounter-(increment|(re)?set)\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.property-name.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(((\\\\+_?)?):)([\\\\s\\\\t]*)\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"-?(?:[[-\\\\w][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{9f}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.constant.counter-name.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#integer-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"unset|initial|inherit|auto\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.property-value.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\bcontainer(?:-name)?(?=\\\\s*?:)\",\n\t\t\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(((\\\\+_?)?):)(?=[\\\\s\\\\t]*)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.property-value.less\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;)|(?=[})]))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bdefault\\\\b\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#global-property-values\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#custom-property-name\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"contentName\": \"variable.other.constant.container-name.less\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"--|(?:-?(?:(?:[a-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R]))))(?:(?:[-\\\\da-zA-Z_]|[\\\\x{00B7}\\\\x{00C0}-\\\\x{00D6}\\\\x{00D8}-\\\\x{00F6}\\\\x{00F8}-\\\\x{037D}\\\\x{037F}-\\\\x{1FFF}\\\\x{200C}\\\\x{200D}\\\\x{203F}\\\\x{2040}\\\\x{2070}-\\\\x{218F}\\\\x{2C00}-\\\\x{2FEF}\\\\x{3001}-\\\\x{D7FF}\\\\x{F900}-\\\\x{FDCF}\\\\x{FDF0}-\\\\x{FFFD}\\\\x{10000}-\\\\x{EFFFF}])|(?:\\\\\\\\(?:\\\\N|[[:^xdigit:]]|[[:xdigit:]]{1,6}[\\\\s\\\\R])))*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\\\b( accent-height | align-content | align-items | align-self | alignment-baseline | all | animation-timing-function | animation-range-start | animation-range-end | animation-range | animation-play-state | animation-name | animation-iteration-count | animation-fill-mode | animation-duration | animation-direction | animation-delay | animation-composition | animation | appearance | ascent | aspect-ratio | azimuth | backface-visibility | background-size | background-repeat-y | background-repeat-x | background-repeat | background-position-y | background-position-x | background-position | background-origin | background-image | background-color | background-clip | background-blend-mode | background-attachment | background | baseline-shift | begin | bias | blend-mode | border-top-left-radius | border-top-right-radius | border-bottom-left-radius | border-bottom-right-radius | border-end-end-radius | border-end-start-radius | border-start-end-radius | border-start-start-radius | border-block-start-color | border-block-start-style | border-block-start-width | border-block-start | border-block-end-color | border-block-end-style | border-block-end-width | border-block-end | border-block-color | border-block-style | border-block-width | border-block | border-inline-start-color | border-inline-start-style | border-inline-start-width | border-inline-start | border-inline-end-color | border-inline-end-style | border-inline-end-width | border-inline-end | border-inline-color | border-inline-style | border-inline-width | border-inline | border-top-color | border-top-style | border-top-width | border-top | border-right-color | border-right-style | border-right-width | border-right | border-bottom-color | border-bottom-style | border-bottom-width | border-bottom | border-left-color | border-left-style | border-left-width | border-left | border-image-outset | border-image-repeat | border-image-slice | border-image-source | border-image-width | border-image | border-color | border-style | border-width | border-radius | border-collapse | border-spacing | border | bottom | box-(align|decoration-break|direction|flex|ordinal-group|orient|pack|shadow|sizing) | break-(after|before|inside) | caption-side | clear | clip-path | clip-rule | clip | color(-(interpolation(-filters)?|profile|rendering))? | columns | column-(break-before|count|fill|gap|(rule(-(color|style|width))?)|span|width) | container-name | container-type | container | contain-intrinsic-block-size | contain-intrinsic-inline-size | contain-intrinsic-height | contain-intrinsic-size | contain-intrinsic-width | contain | content | counter-(increment|reset) | cursor | [cdf][xy] | direction | display | divisor | dominant-baseline | dur | elevation | empty-cells | enable-background | end | fallback | fill(-(opacity|rule))? | filter | flex(-(align|basis|direction|flow|grow|item-align|line-pack|negative|order|pack|positive|preferred-size|shrink|wrap))? | float | flood-(color|opacity) | font-display | font-family | font-feature-settings | font-kerning | font-language-override | font-size(-adjust)? | font-smoothing | font-stretch | font-style | font-synthesis | font-variant(-(alternates|caps|east-asian|ligatures|numeric|position))? | font-weight | font | fr | ((column|row)-)?gap | glyph-orientation-(horizontal|vertical) | grid-(area|gap) | grid-auto-(columns|flow|rows) | grid-(column|row)(-(end|gap|start))? | grid-template(-(areas|columns|rows))? | grid | height | hyphens | image-(orientation|rendering|resolution) | inset(-(block|inline))?(-(start|end))? | isolation | justify-content | justify-items | justify-self | kerning | left | letter-spacing | lighting-color | line-(box-contain|break|clamp|height) | list-style(-(image|position|type))? | (margin|padding)(-(bottom|left|right|top)|(-(block|inline)?(-(end|start))?))? | marker(-(end|mid|start))? | mask(-(clip||composite|image|origin|position|repeat|size|type))? | (max|min)-(height|width) | mix-blend-mode | nbsp-mode | negative | object-(fit|position) | opacity | operator | order | orphans | outline(-(color|offset|style|width))? | overflow(-((inline|block)|scrolling|wrap|x|y))? | overscroll-behavior(-block|-(inline|x|y))? | pad(ding(-(bottom|left|right|top))?)? | page(-break-(after|before|inside))? | paint-order | pause(-(after|before))? | perspective(-origin(-(x|y))?)? | pitch(-range)? | place-content | place-self | pointer-events | position | prefix | quotes | range | resize | right | rotate | scale | scroll-behavior | shape-(image-threshold|margin|outside|rendering) | size | speak(-as)? | src | stop-(color|opacity) | stroke(-(dash(array|offset)|line(cap|join)|miterlimit|opacity|width))? | suffix | symbols | system | tab-size | table-layout | tap-highlight-color | text-align(-last)? | text-decoration(-(color|line|style))? | text-emphasis(-(color|position|style))? | text-(anchor|fill-color|height|indent|justify|orientation|overflow|rendering|size-adjust|shadow|transform|underline-position|wrap) | top | touch-action | transform(-origin(-(x|y))?) | transform(-style)? | transition(-(delay|duration|property|timing-function))? | translate | unicode-(bidi|range) | user-(drag|select) | vertical-align | visibility | white-space(-collapse)? | widows | width | will-change | word-(break|spacing|wrap) | writing-mode | z-index | zoom )\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\\\b(((contain-intrinsic|max|min)-)?(block|inline)?-size)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"support.type.property-name.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b((?:(?:\\\\+_?)?):)([\\\\s\\\\t]*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.property-value.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.property-value.less\",\n\t\t\t\t\t\"end\": \"\\\\s*(;)|(?=[})])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"scroll-function\": {\n\t\t\t\"begin\": \"\\\\b(scroll)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.scroll.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"root|nearest|self\",\n\t\t\t\t\t\"name\": \"support.constant.scroller.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"block|inline|x|y\",\n\t\t\t\t\t\"name\": \"support.constant.axis.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"selector\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[>~+/\\\\.*#a-zA-Z\\\\[&]|(\\\\:{1,2}[^\\\\s])|@\\\\{)\",\n\t\t\t\t\t\"contentName\": \"meta.selector.less\",\n\t\t\t\t\t\"end\": \"(?=@(?!\\\\{)|[{;])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment-line\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-namespace-accessors\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#important\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"selectors\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([a-z](?:(?:[-_a-z0-9\\\\x{00B7}]|\\\\\\\\\\\\.|[[\\\\x{00C0}-\\\\x{00D6}][\\\\x{00D8}-\\\\x{00F6}][\\\\x{00F8}-\\\\x{02FF}][\\\\x{0300}-\\\\x{037D}][\\\\x{037F}-\\\\x{1FFF}][\\\\x{200C}-\\\\x{200D}][\\\\x{203F}-\\\\x{2040}][\\\\x{2070}-\\\\x{218F}][\\\\x{2C00}-\\\\x{2FEF}][\\\\x{3001}-\\\\x{D7FF}][\\\\x{F900}-\\\\x{FDCF}][\\\\x{FDF0}-\\\\x{FFFD}][\\\\x{10000}-\\\\x{EFFFF}]]))*-(?:(?:[-_a-z0-9\\\\x{00B7}]|\\\\\\\\\\\\.|[[\\\\x{00C0}-\\\\x{00D6}][\\\\x{00D8}-\\\\x{00F6}][\\\\x{00F8}-\\\\x{02FF}][\\\\x{0300}-\\\\x{037D}][\\\\x{037F}-\\\\x{1FFF}][\\\\x{200C}-\\\\x{200D}][\\\\x{203F}-\\\\x{2040}][\\\\x{2070}-\\\\x{218F}][\\\\x{2C00}-\\\\x{2FEF}][\\\\x{3001}-\\\\x{D7FF}][\\\\x{F900}-\\\\x{FDCF}][\\\\x{FDF0}-\\\\x{FFFD}][\\\\x{10000}-\\\\x{EFFFF}]]))*)\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.tag.custom.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\b( a | abbr | acronym | address | applet | area | article | aside | audio | b | base | basefont | bdi | bdo | big | blockquote | body | br | button | canvas | caption | circle | cite | clipPath | code | col | colgroup | content | data | dataList | dd | defs | del | details | dfn | dialog | dir | div | dl | dt | element | ellipse | em | embed | eventsource | fieldset | figcaption | figure | filter | footer | foreignObject | form | frame | frameset | g | glyph | glyphRef | h1 | h2 | h3 | h4 | h5 | h6 | head | header | hgroup | hr | html | i | iframe | image | img | input | ins | isindex | kbd | keygen | label | legend | li | line | linearGradient | link | main | map | mark | marker | mask | menu | meta | meter | nav | noframes | noscript | object | ol | optgroup | option | output | p | param | path | pattern | picture | polygon | polyline | pre | progress | q | radialGradient | rect | rp | ruby | rt | rtc | s | samp | script | section | select | shadow | small | source | span | stop | strike | strong | style | sub | summary | sup | svg | switch | symbol | table | tbody | td | template | textarea | textPath | tfoot | th | thead | time | title | tr | track | tref | tspan | tt | u | ul | use | var | video | wbr | xmp )\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.tag.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\.)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?![-\\\\w]|[^\\\\x{00}-\\\\x{9f}]|\\\\\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\\\@(?=\\\\{)))\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.class.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(#)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?![-\\\\w]|[^\\\\x{00}-\\\\x{9f}]|\\\\\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\\\@(?=\\\\{)))\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.id.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(&)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"entity.other.attribute-name.parent.less\",\n\t\t\t\t\t\"end\": \"(?![-\\\\w]|[^\\\\x{00}-\\\\x{9f}]|\\\\\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\\\@(?=\\\\{)))\",\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.parent.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pseudo-selectors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-extend\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?!\\\\+_?:)(?:>{1,3}|[~+])(?![>~+;}])\",\n\t\t\t\t\t\"name\": \"punctuation.separator.combinator.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:>{1,3}|[~+])){2,}\",\n\t\t\t\t\t\"name\": \"invalid.illegal.combinator.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\/deep\\\\/\",\n\t\t\t\t\t\"name\": \"invalid.illegal.combinator.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.attribute-selector.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#qualified-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(-?(?:[[_a-zA-Z][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))(?:[[-\\\\w][^\\\\x{00}-\\\\x{7F}]]|(?:\\\\\\\\\\\\h{1,6}[\\\\s\\\\t\\\\n\\\\f]?|\\\\\\\\[^\\\\n\\\\f\\\\h]))*)\",\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\s*([~*|^$]?=)\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.attribute-selector.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=(\\\\s|\\\\]))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[^\\\\s\\\\]\\\\['\\\"]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"match\": \"(?:\\\\s+([iI]))?\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\"name\": \"entity.name.tag.wildcard.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"shape-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(rect)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.shape.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bauto\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(inset)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.shape.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bround\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(circle|ellipse)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.shape.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bat\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(top|right|bottom|left|center|closest-side|farthest-side)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(polygon)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.shape.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(nonzero|evenodd)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"steps-function\": {\n\t\t\t\"begin\": \"\\\\b(steps)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.timing.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.group.less\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"jump-start|jump-end|jump-none|jump-both|start|end\",\n\t\t\t\t\t\"name\": \"support.constant.step-position.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#integer-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-content\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#less-variable-interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\s*\\\\n\",\n\t\t\t\t\t\"name\": \"constant.character.escape.newline.less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\h{1,6}|.)\",\n\t\t\t\t\t\"name\": \"constant.character.escape.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"style-function\": {\n\t\t\t\"begin\": \"\\\\b(style)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.function.style.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rule-list-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"symbols-function\": {\n\t\t\t\"begin\": \"\\\\b(symbols)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.counter.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(cyclic|numeric|alphabetic|symbolic|fixed)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.symbol-type.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"time-type\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.unit.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i:[-+]?(?:(?:\\\\d*\\\\.\\\\d+(?:[eE](?:[-+]?\\\\d+))*)|(?:[-+]?\\\\d+))(s|ms))\\\\b\",\n\t\t\t\"name\": \"constant.numeric.less\"\n\t\t},\n\t\t\"transform-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(matrix3d|scale3d|matrix|scale)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(translate(3d)?)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(translate[XY])(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(rotate[XYZ]?|skew[XY])(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(skew)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(translateZ|perspective)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(rotate3d)(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(scale[XYZ])(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.transform.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number-type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"unicode-range\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.constant.unicode-range.prefix.less\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.codepoint-range.less\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.range.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i)(u\\\\+)([0-9a-f?]{1,6}(?:(-)[0-9a-f]{1,6})?)\",\n\t\t\t\"name\": \"support.unicode-range.less\"\n\t\t},\n\t\t\"unquoted-string\": {\n\t\t\t\"match\": \"[^\\\\s'\\\"]\",\n\t\t\t\"name\": \"string.unquoted.less\"\n\t\t},\n\t\t\"url-function\": {\n\t\t\t\"begin\": \"\\\\b(url)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.url.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literal-string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#unquoted-string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"value-separator\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\s*(/)\\\\s*\"\n\t\t},\n\t\t\"var-function\": {\n\t\t\t\"begin\": \"\\\\b(var)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.var.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma-delimiter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#custom-property-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property-values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"view-function\": {\n\t\t\t\"begin\": \"\\\\b(view)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.view.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.end.less\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.less\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.begin.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"block|inline|x|y|auto\",\n\t\t\t\t\t\t\t\"name\": \"support.constant.property-value.less\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#percentage-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#length-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#less-variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#calc-function\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arbitrary-repetition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/log/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/log/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"vscode-logfile-highlighter\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/emilast/vscode-logfile-highlighter\",\n\t\t\t\t\t\"commitHash\": \"fc571bd87b33bb69d3bdc0052f94face723ee4f7\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"3.3.4\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/log/package.json",
    "content": "{\n  \"name\": \"log\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin emilast/vscode-logfile-highlighter syntaxes/log.tmLanguage ./syntaxes/log.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"log\",\n        \"extensions\": [\n          \".log\",\n          \"*.log.?\"\n        ],\n        \"aliases\": [\n          \"Log\"\n        ]\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"log\",\n        \"scopeName\": \"text.log\",\n        \"path\": \"./syntaxes/log.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/log/package.nls.json",
    "content": "{\n\t\"displayName\": \"Log\",\n\t\"description\": \"Provides syntax highlighting for files with .log extension.\"\n}\n"
  },
  {
    "path": "extensions/log/syntaxes/log.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/emilast/vscode-logfile-highlighter/blob/master/syntaxes/log.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/emilast/vscode-logfile-highlighter/commit/fc571bd87b33bb69d3bdc0052f94face723ee4f7\",\n\t\"name\": \"Log file\",\n\t\"scopeName\": \"text.log\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"match\": \"\\\\b(Trace)\\\\b:\",\n\t\t\t\"name\": \"comment log.verbose\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\[(verbose|verb|vrb|vb|v)\\\\]\",\n\t\t\t\"name\": \"comment log.verbose\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=^[\\\\s\\\\d\\\\p]*)\\\\bV\\\\b\",\n\t\t\t\"name\": \"comment log.verbose\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(DEBUG|Debug)\\\\b|(?i)\\\\b(debug)\\\\:\",\n\t\t\t\"name\": \"markup.changed log.debug\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\[(debug|dbug|dbg|de|d)\\\\]\",\n\t\t\t\"name\": \"markup.changed log.debug\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=^[\\\\s\\\\d\\\\p]*)\\\\bD\\\\b\",\n\t\t\t\"name\": \"markup.changed log.debug\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(HINT|INFO|INFORMATION|Info|NOTICE|II)\\\\b|(?i)\\\\b(info|information)\\\\:\",\n\t\t\t\"name\": \"markup.inserted log.info\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\[(information|info|inf|in|i)\\\\]\",\n\t\t\t\"name\": \"markup.inserted log.info\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=^[\\\\s\\\\d\\\\p]*)\\\\bI\\\\b\",\n\t\t\t\"name\": \"markup.inserted log.info\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(WARNING|WARN|Warn|WW)\\\\b|(?i)\\\\b(warning)\\\\:\",\n\t\t\t\"name\": \"markup.deleted log.warning\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\[(warning|warn|wrn|wn|w)\\\\]\",\n\t\t\t\"name\": \"markup.deleted log.warning\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=^[\\\\s\\\\d\\\\p]*)\\\\bW\\\\b\",\n\t\t\t\"name\": \"markup.deleted log.warning\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(ALERT|CRITICAL|EMERGENCY|ERROR|FAILURE|FAIL|Fatal|FATAL|Error|EE)\\\\b|(?i)\\\\b(error)\\\\:\",\n\t\t\t\"name\": \"string.regexp, strong log.error\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\[(error|eror|err|er|e|fatal|fatl|ftl|fa|f)\\\\]\",\n\t\t\t\"name\": \"string.regexp, strong log.error\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=^[\\\\s\\\\d\\\\p]*)\\\\bE\\\\b\",\n\t\t\t\"name\": \"string.regexp, strong log.error\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b\\\\d{4}-\\\\d{2}-\\\\d{2}(?=T|\\\\b)\",\n\t\t\t\"name\": \"comment log.date\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=(^|\\\\s))\\\\d{2}[^\\\\w\\\\s]\\\\d{2}[^\\\\w\\\\s]\\\\d{4}\\\\b\",\n\t\t\t\"name\": \"comment log.date\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"T?\\\\d{1,2}:\\\\d{2}(:\\\\d{2}([.,]\\\\d{1,})?)?(Z| ?[+-]\\\\d{1,2}:\\\\d{2})?\\\\b\",\n\t\t\t\"name\": \"comment log.date\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"T\\\\d{2}\\\\d{2}(\\\\d{2}([.,]\\\\d{1,})?)?(Z| ?[+-]\\\\d{1,2}\\\\d{2})?\\\\b\",\n\t\t\t\"name\": \"comment log.date\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([0-9a-fA-F]{40}|[0-9a-fA-F]{10}|[0-9a-fA-F]{7})\\\\b\",\n\t\t\t\"name\": \"constant.language\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}\\\\b\",\n\t\t\t\"name\": \"constant.language log.constant\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([0-9a-fA-F]{2,}[:-])+[0-9a-fA-F]{2,}+\\\\b\",\n\t\t\t\"name\": \"constant.language log.constant\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([0-9]+|true|false|null)\\\\b\",\n\t\t\t\"name\": \"constant.language log.constant\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(0x[a-fA-F0-9]+)\\\\b\",\n\t\t\t\"name\": \"constant.language log.constant\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\"[^\\\"]*\\\"\",\n\t\t\t\"name\": \"string log.string\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w])'[^']*'\",\n\t\t\t\"name\": \"string log.string\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([a-zA-Z.]*Exception)\\\\b\",\n\t\t\t\"name\": \"string.regexp, emphasis log.exceptiontype\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^[\\\\t ]*at[\\\\t ]\",\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"string.key, emphasis log.exception\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b[a-z]+://\\\\S+\\\\b/?\",\n\t\t\t\"name\": \"constant.language log.constant\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w/\\\\\\\\])([\\\\w-]+\\\\.)+([\\\\w-])+(?![\\\\w/\\\\\\\\])\",\n\t\t\t\"name\": \"constant.language log.constant\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/lua/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/lua/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"sumneko/lua.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/sumneko/lua.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"1483add845ebfb3e1e631fe372603e5fed2cdd42\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) sumneko-lua.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"1.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/lua/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"--\",\n\t\t\"blockComment\": [ \"--[[\", \"]]\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"^((?!(\\\\-\\\\-)).)*((\\\\b(else|function|then|do|repeat)\\\\b((?!\\\\b(end|until)\\\\b).)*)|(\\\\{\\\\s*))$\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*((\\\\b(elseif|else|end|until)\\\\b)|(\\\\})|(\\\\)))\"\n\t}\n}\n"
  },
  {
    "path": "extensions/lua/package.json",
    "content": "{\n  \"name\": \"lua\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin sumneko/lua.tmbundle Syntaxes/Lua.plist ./syntaxes/lua.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"lua\",\n        \"extensions\": [\n          \".lua\"\n        ],\n        \"aliases\": [\n          \"Lua\",\n          \"lua\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"lua\",\n        \"scopeName\": \"source.lua\",\n        \"path\": \"./syntaxes/lua.tmLanguage.json\",\n        \"tokenTypes\": {\n          \"comment.line.double-dash.doc.lua\": \"other\"\n        }\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/lua/package.nls.json",
    "content": "{\n\t\"displayName\": \"Lua Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Lua files.\"\n}\n"
  },
  {
    "path": "extensions/lua/syntaxes/lua.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/sumneko/lua.tmbundle/blob/master/Syntaxes/Lua.plist\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/sumneko/lua.tmbundle/commit/1483add845ebfb3e1e631fe372603e5fed2cdd42\",\n\t\"name\": \"Lua\",\n\t\"scopeName\": \"source.lua\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"begin\": \"\\\\b(?:(local)\\\\s+)?(function)\\\\b(?![,:])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.local.lua\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.lua\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=[\\\\)\\\\-{}\\\\[\\\\]\\\"'])\",\n\t\t\t\"name\": \"meta.function.lua\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))|(?=[\\\\-\\\\.{}\\\\[\\\\]\\\"'])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.finish.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.parameter.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_][a-zA-Z0-9_]*\",\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=[\\\\),])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\\\\s*(?=:)\",\n\t\t\t\t\t\"name\": \"entity.name.class.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.function.lua\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w\\\\d.])0[xX][0-9A-Fa-f]+(\\\\.[0-9A-Fa-f]*)?([eE]-?\\\\d*)?([pP][-+]\\\\d+)?\",\n\t\t\t\"name\": \"constant.numeric.float.hexadecimal.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w\\\\d.])0[xX]\\\\.[0-9A-Fa-f]+([eE]-?\\\\d*)?([pP][-+]\\\\d+)?\",\n\t\t\t\"name\": \"constant.numeric.float.hexadecimal.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w\\\\d.])0[xX][0-9A-Fa-f]+(?![pPeE.0-9])\",\n\t\t\t\"name\": \"constant.numeric.integer.hexadecimal.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w\\\\d.])\\\\d+(\\\\.\\\\d*)?([eE]-?\\\\d*)?\",\n\t\t\t\"name\": \"constant.numeric.float.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w\\\\d.])\\\\.\\\\d+([eE]-?\\\\d*)?\",\n\t\t\t\"name\": \"constant.numeric.float.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![\\\\w\\\\d.])\\\\d+(?![pPeE.0-9])\",\n\t\t\t\"name\": \"constant.numeric.integer.lua\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#string\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.lua\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\A(#!).*$\\\\n?\",\n\t\t\t\"name\": \"comment.line.shebang.lua\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comment\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.goto.lua\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.tag.lua\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b(goto)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.lua\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.lua\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(::)\\\\s*[a-zA-Z_][a-zA-Z0-9_]*\\\\s*(::)\",\n\t\t\t\"name\": \"string.tag.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"<\\\\s*(const|close)\\\\s*>\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"storage.type.attribute.lua\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\<[a-zA-Z_\\\\*][a-zA-Z0-9_\\\\.\\\\*\\\\-]*\\\\>\",\n\t\t\t\"name\": \"storage.type.generic.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(break|do|else|for|if|elseif|goto|return|then|repeat|while|until|end|in)\\\\b\",\n\t\t\t\"name\": \"keyword.control.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(local)\\\\b\",\n\t\t\t\"name\": \"keyword.local.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(function)\\\\b(?![,:])\",\n\t\t\t\"name\": \"keyword.control.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![^.]\\\\.|:)\\\\b(false|nil(?!:)|true|_ENV|_G|_VERSION|math\\\\.(pi|huge|maxinteger|mininteger)|utf8\\\\.charpattern|io\\\\.(stdin|stdout|stderr)|package\\\\.(config|cpath|loaded|loaders|path|preload|searchers))\\\\b|(?<![.])\\\\.{3}(?!\\\\.)\",\n\t\t\t\"name\": \"constant.language.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![^.]\\\\.|:)\\\\b(self)\\\\b\",\n\t\t\t\"name\": \"variable.language.self.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![^.]\\\\.|:)\\\\b(assert|collectgarbage|dofile|error|getfenv|getmetatable|ipairs|load|loadfile|loadstring|module|next|pairs|pcall|print|rawequal|rawget|rawlen|rawset|require|select|setfenv|setmetatable|tonumber|tostring|type|unpack|xpcall)\\\\b(?!\\\\s*=(?!=))\",\n\t\t\t\"name\": \"support.function.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![^.]\\\\.|:)\\\\b(async)\\\\b(?!\\\\s*=(?!=))\",\n\t\t\t\"name\": \"entity.name.tag.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<![^.]\\\\.|:)\\\\b(coroutine\\\\.(create|isyieldable|close|resume|running|status|wrap|yield)|string\\\\.(byte|char|dump|find|format|gmatch|gsub|len|lower|match|pack|packsize|rep|reverse|sub|unpack|upper)|table\\\\.(concat|insert|maxn|move|pack|remove|sort|unpack)|math\\\\.(abs|acos|asin|atan2?|ceil|cosh?|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|pow|rad|random|randomseed|sinh?|sqrt|tanh?|tointeger|type)|io\\\\.(close|flush|input|lines|open|output|popen|read|tmpfile|type|write)|os\\\\.(clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\\\\.(loadlib|seeall|searchpath)|debug\\\\.(debug|[gs]etfenv|[gs]ethook|getinfo|[gs]etlocal|[gs]etmetatable|getregistry|[gs]etupvalue|[gs]etuservalue|set[Cc]stacklimit|traceback|upvalueid|upvaluejoin)|bit32\\\\.(arshift|band|bnot|bor|btest|bxor|extract|replace|lrotate|lshift|rrotate|rshift)|utf8\\\\.(char|codes|codepoint|len|offset))\\\\b(?!\\\\s*=(?!=))\",\n\t\t\t\"name\": \"support.function.library.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(and|or|not|\\\\|\\\\||\\\\&\\\\&|\\\\!)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b(?=\\\\s*(?:[({\\\"']|\\\\[\\\\[))\",\n\t\t\t\"name\": \"support.function.any-method.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b(?=\\\\s*\\\\??:)\",\n\t\t\t\"name\": \"entity.name.class.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=[^.]\\\\.|:)\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b(?!\\\\s*=\\\\s*\\\\b(function)\\\\b)\",\n\t\t\t\"name\": \"entity.other.attribute.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b(?!\\\\s*=\\\\s*\\\\b(function)\\\\b)\",\n\t\t\t\"name\": \"variable.other.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b(?=\\\\s*=\\\\s*\\\\b(function)\\\\b)\",\n\t\t\t\"name\": \"entity.name.function.lua\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\+|-|%|#|\\\\*|\\\\/|\\\\^|==?|~=|!=|<=?|>=?|(?<!\\\\.)\\\\.{2}(?!\\\\.)\",\n\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"escaped_char\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[abfnrtv\\\\\\\\\\\"'\\\\n]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\z[\\\\n\\\\t ]*\",\n\t\t\t\t\t\"name\": \"constant.character.escape.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\d{1,3}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.byte.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\x[0-9A-Fa-f][0-9A-Fa-f]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.byte.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\u\\\\{[0-9A-Fa-f]+\\\\}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.unicode.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.character.escape.lua\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'[ \\\\t]*|(?=\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"[ \\\\t]*|(?=\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"`\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`[ \\\\t]*|(?=\\\\n)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\.cdef)\\\\s*(\\\\[(=*)\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.other.multiline.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.embedded.lua\",\n\t\t\t\t\t\"end\": \"(\\\\]\\\\2\\\\])[ \\\\t]*\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.other.multiline.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!--)\\\\[(=*)\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\\\\1\\\\][ \\\\t]*\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.other.multiline.lua\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=--)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)((?!^)[ \\\\t]+\\\\n)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.trailing.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"--\\\\[(=*)\\\\[@@@\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(--)?\\\\]\\\\1\\\\]\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"--\\\\[(=*)\\\\[\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(--)?\\\\]\\\\1\\\\]\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"comment.block.lua\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ldoc_tag\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"----\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-dash.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"---\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-dash.documentation.lua\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ldoc_tag\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"--\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-dash.lua\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#ldoc_tag\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\/\\\\*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*\\\\/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#emmydoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ldoc_tag\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"emmydoc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@class\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b([a-zA-Z_\\\\*][a-zA-Z0-9_\\\\.\\\\*\\\\-]*)\",\n\t\t\t\t\t\t\t\"name\": \"support.class.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \":|,\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@enum\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b([a-zA-Z_\\\\*][a-zA-Z0-9_\\\\.\\\\*\\\\-]*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@type\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@alias\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b([a-zA-Z_\\\\*][a-zA-Z0-9_\\\\.\\\\*\\\\-]*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=[\\\\n#])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*(@operator)\\\\s*(\\\\b[a-z]+)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.library.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@cast\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b([a-zA-Z_\\\\*][a-zA-Z0-9_\\\\.\\\\*\\\\-]*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"([+-|])\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@param\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b(\\\\??)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.variable.lua\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=[\\\\n#])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@return\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\?\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@field\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b|(\\\\[))(\\\\??)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.variable.lua\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=[\\\\n#])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@generic\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.generic.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)|(,)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@vararg\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@overload\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@deprecated\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@meta\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@private\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@protected\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@package\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@version\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(5\\\\.1|5\\\\.2|5\\\\.3|5\\\\.4|JIT)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"support.class.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",|\\\\>|\\\\<\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@see\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b([a-zA-Z_\\\\*][a-zA-Z0-9_\\\\.\\\\*\\\\-]*)\",\n\t\t\t\t\t\t\t\"name\": \"support.class.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"#\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@diagnostic\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"([a-zA-Z_\\\\-0-9]+)[ \\\\t]*(:)?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.unit\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b([a-zA-Z_\\\\*][a-zA-Z0-9_\\\\-]*)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"support.class.lua\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)[ \\\\t]*@module\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=---)[ \\\\t]*@(async|nodiscard)\",\n\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=---)\\\\|\\\\s*[\\\\>\\\\+]?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.annotation.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\n@#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"emmydoc.type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\bfun\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[\\\\s#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[\\\\(\\\\),:\\\\?][ \\\\t]*\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([a-zA-Z_][a-zA-Z0-9_\\\\.\\\\*\\\\[\\\\]\\\\<\\\\>\\\\,\\\\-]*)(?<!,)[ \\\\t]*(?=\\\\??:)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.variable.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#emmydoc.type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\<[a-zA-Z_\\\\*][a-zA-Z0-9_\\\\.\\\\*\\\\-]*\\\\>\",\n\t\t\t\t\t\"name\": \"storage.type.generic.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\basync\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.tag.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\\{\\\\}\\\\:\\\\,\\\\?\\\\|\\\\`][ \\\\t]*\",\n\t\t\t\t\t\"name\": \"keyword.operator.lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[a-zA-Z_\\\\.\\\\*\\\"'\\\\[])\",\n\t\t\t\t\t\"end\": \"(?=[\\\\s\\\\)\\\\,\\\\?\\\\:\\\\}\\\\|#])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([a-zA-Z0-9_\\\\.\\\\*\\\\[\\\\]\\\\<\\\\>\\\\,\\\\-]+)(?<!,)[ \\\\t]*\",\n\t\t\t\t\t\t\t\"name\": \"support.type.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\.\\\\.\\\\.)[ \\\\t]*\",\n\t\t\t\t\t\t\t\"name\": \"constant.language.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ldoc_tag\": {\n\t\t\t\"match\": \"\\\\G[ \\\\t]*(@)(alias|annotation|author|charset|class|classmod|comment|constructor|copyright|description|example|export|factory|field|file|fixme|function|include|lfunction|license|local|module|name|param|pragma|private|raise|release|return|script|section|see|set|static|submodule|summary|tfield|thread|tparam|treturn|todo|topic|type|usage|warning|within)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.ldoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.class.ldoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/make/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/make/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"fadeevab/make.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/fadeevab/make.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"1d4c0b541959995db098df751ffc129da39a294b\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-make.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/make/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\"\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/make/package.json",
    "content": "{\n  \"name\": \"make\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin fadeevab/make.tmbundle Syntaxes/Makefile.plist ./syntaxes/make.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"makefile\",\n        \"aliases\": [\n          \"Makefile\",\n          \"makefile\"\n        ],\n        \"extensions\": [\n          \".mak\",\n          \".mk\"\n        ],\n        \"filenames\": [\n          \"Makefile\",\n          \"makefile\",\n          \"GNUmakefile\",\n          \"OCamlMakefile\"\n        ],\n        \"firstLine\": \"^#!\\\\s*/usr/bin/make\",\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"makefile\",\n        \"scopeName\": \"source.makefile\",\n        \"path\": \"./syntaxes/make.tmLanguage.json\",\n        \"tokenTypes\": {\n          \"string.interpolated\": \"other\"\n        }\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[makefile]\": {\n        \"editor.insertSpaces\": false\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/make/package.nls.json",
    "content": "{\n\t\"displayName\": \"Make Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Make files.\"\n}\n"
  },
  {
    "path": "extensions/make/syntaxes/make.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/fadeevab/make.tmbundle/blob/master/Syntaxes/Makefile.plist\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/fadeevab/make.tmbundle/commit/1d4c0b541959995db098df751ffc129da39a294b\",\n\t\"name\": \"Makefile\",\n\t\"scopeName\": \"source.makefile\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#comment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#variables\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#variable-assignment\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#directives\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#recipe\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#target\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"comma\": {\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimeter.comma.makefile\"\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"begin\": \"(^[ ]+)?((?<!\\\\\\\\)(\\\\\\\\\\\\\\\\)*)(?=#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.makefile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[^\\\\\\\\])$\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"directives\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^[ ]*([s\\\\-]?include)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.include.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^[ ]*(vpath)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.vpath.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(?:(override)\\\\s*)?(define)\\\\s*([^\\\\s]+)\\\\s*(=|\\\\?=|:=|\\\\+=)?(?=\\\\s)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.override.makefile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.define.makefile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.makefile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(endef)\\\\b\",\n\t\t\t\t\t\"name\": \"meta.scope.conditional.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?!\\\\n)\",\n\t\t\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#directives\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^[ ]*(export)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-assignment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s]+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^[ ]*(override|private)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-assignment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^[ ]*(unexport|undefine)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s]+\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(ifeq|ifneq|ifdef|ifndef)(?=\\\\s)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(endif)\\\\b\",\n\t\t\t\t\t\"name\": \"meta.scope.conditional.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\t\t\"name\": \"meta.scope.condition.makefile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*else(?=\\\\s)\\\\s*(ifeq|ifneq|ifdef|ifndef)*(?=\\\\s)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.else.makefile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"target\": {\n\t\t\t\"begin\": \"^(?!\\\\t)([^:]*)(:)(?!\\\\=)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.function.target.$1.makefile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"^\\\\s*(\\\\.(PHONY|SUFFIXES|DEFAULT|PRECIOUS|INTERMEDIATE|SECONDARY|SECONDEXPANSION|DELETE_ON_ERROR|IGNORE|LOW_RESOLUTION_TIME|SILENT|EXPORT_ALL_VARIABLES|NOTPARALLEL|ONESHELL|POSIX))\\\\s*$\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=\\\\S)\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s|$)\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.target.makefile\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"%\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.makefile\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.makefile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"[^\\\\\\\\]$\",\n\t\t\t\"name\": \"meta.scope.target.makefile\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\"end\": \"(?=[^\\\\\\\\])$\",\n\t\t\t\t\t\"name\": \"meta.scope.prerequisites.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%|\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.makefile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"recipe\": {\n\t\t\t\"begin\": \"^\\\\t([+\\\\-@]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.$1.makefile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"[^\\\\\\\\]$\",\n\t\t\t\"name\": \"meta.scope.recipe.makefile\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable-assignment\": {\n\t\t\t\"begin\": \"(^[ ]*|\\\\G\\\\s*)([^\\\\s:#=]+)\\\\s*((?<![?:+!])=|\\\\?=|:=|\\\\+=|!=)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.other.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.makefile\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\n\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parentheses-interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#braces-interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parentheses-interpolation\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"braces-interpolation\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple-variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-braces\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"simple-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\$[^(){}]\",\n\t\t\t\t\t\"name\": \"variable.language.makefile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable-parentheses\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\$\\\\(\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\t\t\"name\": \"string.interpolated.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#builtin-variable-parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-variable-parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#flavor-variable-parentheses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#another-variable-parentheses\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable-braces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\${\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\t\t\"name\": \"string.interpolated.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#builtin-variable-braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-variable-braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#flavor-variable-braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#another-variable-braces\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-variable-parentheses\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\()(MAKEFILES|VPATH|SHELL|MAKESHELL|MAKE|MAKELEVEL|MAKEFLAGS|MAKECMDGOALS|CURDIR|SUFFIXES|\\\\.LIBPATTERNS)(?=\\\\s*\\\\))\",\n\t\t\t\t\t\"name\": \"variable.language.makefile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-variable-braces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<={)(MAKEFILES|VPATH|SHELL|MAKESHELL|MAKE|MAKELEVEL|MAKEFLAGS|MAKECMDGOALS|CURDIR|SUFFIXES|\\\\.LIBPATTERNS)(?=\\\\s*})\",\n\t\t\t\t\t\"name\": \"variable.language.makefile\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-variable-parentheses\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\()(subst|patsubst|strip|findstring|filter(-out)?|sort|word(list)?|firstword|lastword|dir|notdir|suffix|basename|addsuffix|addprefix|join|wildcard|realpath|abspath|info|error|warning|shell|foreach|if|or|and|call|eval|value|file|guile)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\)|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\t\t\"name\": \"meta.scope.function-call.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%|\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.makefile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-variable-braces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<={)(subst|patsubst|strip|findstring|filter(-out)?|sort|word(list)?|firstword|lastword|dir|notdir|suffix|basename|addsuffix|addprefix|join|wildcard|realpath|abspath|info|error|warning|shell|foreach|if|or|and|call|eval|value|file|guile)\\\\s\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=}|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\t\t\"name\": \"meta.scope.function-call.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comma\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%|\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.makefile\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"flavor-variable-parentheses\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\()(origin|flavor)\\\\s(?=[^\\\\s)]+\\\\s*\\\\))\",\n\t\t\t\t\t\"contentName\": \"variable.other.makefile\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\"name\": \"meta.scope.function-call.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"flavor-variable-braces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<={)(origin|flavor)\\\\s(?=[^\\\\s}]+\\\\s*})\",\n\t\t\t\t\t\"contentName\": \"variable.other.makefile\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.$1.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"name\": \"meta.scope.function-call.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"another-variable-parentheses\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\()(?!\\\\))\",\n\t\t\t\t\t\"end\": \"(?=\\\\)|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\t\t\"name\": \"variable.other.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"another-variable-braces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<={)(?!})\",\n\t\t\t\t\t\"end\": \"(?=}|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\t\t\"name\": \"variable.other.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.continuation.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/mangle-loader.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\nconst fs = require('fs');\nconst webpack = require('webpack');\nconst fancyLog = require('fancy-log');\nconst ansiColors = require('ansi-colors');\nconst { Mangler } = require('../build/lib/mangle/index');\n\n/**\n * Map of project paths to mangled file contents\n *\n * @type {Map<string, Promise<Map<string, { out: string; sourceMap?: string }>>>}\n */\nconst mangleMap = new Map();\n\n/**\n * @param {string} projectPath\n */\nfunction getMangledFileContents(projectPath) {\n\tlet entry = mangleMap.get(projectPath);\n\tif (!entry) {\n\t\tconst log = (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data);\n\t\tlog(`Mangling ${projectPath}`);\n\t\tconst ts2tsMangler = new Mangler(projectPath, log, { mangleExports: true, manglePrivateFields: true });\n\t\tentry = ts2tsMangler.computeNewFileContents();\n\t\tmangleMap.set(projectPath, entry);\n\t}\n\n\treturn entry;\n}\n\n/**\n * @type {webpack.LoaderDefinitionFunction}\n */\nmodule.exports = async function (source, sourceMap, meta) {\n\tif (this.mode !== 'production') {\n\t\t// Only enable mangling in production builds\n\t\treturn source;\n\t}\n\tif (true) {\n\t\t// disable mangling for now, SEE https://github.com/microsoft/vscode/issues/204692\n\t\treturn source;\n\t}\n\tconst options = this.getOptions();\n\tif (options.disabled) {\n\t\t// Dynamically disabled\n\t\treturn source;\n\t}\n\n\tif (source !== fs.readFileSync(this.resourcePath).toString()) {\n\t\t// File content has changed by previous webpack steps.\n\t\t// Skip mangling.\n\t\treturn source;\n\t}\n\n\tconst callback = this.async();\n\n\tconst fileContentsMap = await getMangledFileContents(options.configFile);\n\n\tconst newContents = fileContentsMap.get(this.resourcePath);\n\tcallback(null, newContents?.out ?? source, sourceMap, meta);\n};\n"
  },
  {
    "path": "extensions/markdown-basics/.vscodeignore",
    "content": "test/**\nsrc/**\ntsconfig.json\ncgmanifest.json\n"
  },
  {
    "path": "extensions/markdown-basics/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/markdown.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/markdown.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"11cf764606cb2cde54badb5d0e5a0758a8871c4b\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) markdown.tmbundle authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"microsoft/vscode-markdown-tm-grammar\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/vscode-markdown-tm-grammar\",\n\t\t\t\t\t\"commitHash\": \"7418dd20d76c72e82fadee2909e03239e9973b35\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/markdown-basics/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t// symbols used for start and end a block comment. Remove this entry if your language does not support block comments\n\t\t\"blockComment\": [\n\t\t\t\"<!--\",\n\t\t\t\"-->\"\n\t\t]\n\t},\n\t// symbols used as brackets\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"colorizedBracketPairs\": [],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"<\",\n\t\t\t\"close\": \">\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"`\",\n\t\t\t\"`\"\n\t\t],\n\t\t[\n\t\t\t\"_\",\n\t\t\t\"_\"\n\t\t],\n\t\t[\n\t\t\t\"*\",\n\t\t\t\"*\"\n\t\t],\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t],\n\t\t[\n\t\t\t\"~\",\n\t\t\t\"~\"\n\t\t],\n\t\t[\n\t\t\t\"$\",\n\t\t\t\"$\"\n\t\t]\n\t],\n\t\"folding\": {\n\t\t\"offSide\": true,\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*<!--\\\\s*#?region\\\\b.*-->\",\n\t\t\t\"end\": \"^\\\\s*<!--\\\\s*#?endregion\\\\b.*-->\"\n\t\t}\n\t},\n\t\"wordPattern\": {\n\t\t\"pattern\": \"(\\\\p{Alphabetic}|\\\\p{Number}|\\\\p{Nonspacing_Mark})(((\\\\p{Alphabetic}|\\\\p{Number}|\\\\p{Nonspacing_Mark})|[_])?(\\\\p{Alphabetic}|\\\\p{Number}|\\\\p{Nonspacing_Mark}))*\",\n\t\t\"flags\": \"ug\"\n\t},\n}\n"
  },
  {
    "path": "extensions/markdown-basics/package.json",
    "content": "{\n  \"name\": \"markdown\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.20.0\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"markdown\",\n        \"aliases\": [\n          \"Markdown\",\n          \"markdown\"\n        ],\n        \"extensions\": [\n          \".md\",\n          \".mkd\",\n          \".mdwn\",\n          \".mdown\",\n          \".markdown\",\n          \".markdn\",\n          \".mdtxt\",\n          \".mdtext\",\n          \".workbook\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"markdown\",\n        \"scopeName\": \"text.html.markdown\",\n        \"path\": \"./syntaxes/markdown.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"meta.embedded.block.html\": \"html\",\n          \"source.js\": \"javascript\",\n          \"source.css\": \"css\",\n          \"meta.embedded.block.frontmatter\": \"yaml\",\n          \"meta.embedded.block.css\": \"css\",\n          \"meta.embedded.block.ini\": \"ini\",\n          \"meta.embedded.block.java\": \"java\",\n          \"meta.embedded.block.lua\": \"lua\",\n          \"meta.embedded.block.makefile\": \"makefile\",\n          \"meta.embedded.block.perl\": \"perl\",\n          \"meta.embedded.block.r\": \"r\",\n          \"meta.embedded.block.ruby\": \"ruby\",\n          \"meta.embedded.block.php\": \"php\",\n          \"meta.embedded.block.sql\": \"sql\",\n          \"meta.embedded.block.vs_net\": \"vs_net\",\n          \"meta.embedded.block.xml\": \"xml\",\n          \"meta.embedded.block.xsl\": \"xsl\",\n          \"meta.embedded.block.yaml\": \"yaml\",\n          \"meta.embedded.block.dosbatch\": \"dosbatch\",\n          \"meta.embedded.block.clojure\": \"clojure\",\n          \"meta.embedded.block.coffee\": \"coffee\",\n          \"meta.embedded.block.c\": \"c\",\n          \"meta.embedded.block.cpp\": \"cpp\",\n          \"meta.embedded.block.diff\": \"diff\",\n          \"meta.embedded.block.dockerfile\": \"dockerfile\",\n          \"meta.embedded.block.go\": \"go\",\n          \"meta.embedded.block.groovy\": \"groovy\",\n          \"meta.embedded.block.pug\": \"jade\",\n          \"meta.embedded.block.javascript\": \"javascript\",\n          \"meta.embedded.block.json\": \"json\",\n          \"meta.embedded.block.jsonc\": \"jsonc\",\n          \"meta.embedded.block.latex\": \"latex\",\n          \"meta.embedded.block.less\": \"less\",\n          \"meta.embedded.block.objc\": \"objc\",\n          \"meta.embedded.block.scss\": \"scss\",\n          \"meta.embedded.block.perl6\": \"perl6\",\n          \"meta.embedded.block.powershell\": \"powershell\",\n          \"meta.embedded.block.python\": \"python\",\n          \"meta.embedded.block.rust\": \"rust\",\n          \"meta.embedded.block.scala\": \"scala\",\n          \"meta.embedded.block.shellscript\": \"shellscript\",\n          \"meta.embedded.block.typescript\": \"typescript\",\n          \"meta.embedded.block.typescriptreact\": \"typescriptreact\",\n          \"meta.embedded.block.csharp\": \"csharp\",\n          \"meta.embedded.block.fsharp\": \"fsharp\"\n        },\n        \"unbalancedBracketScopes\": [\n          \"markup.underline.link.markdown\",\n          \"punctuation.definition.list.begin.markdown\"\n        ]\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"markdown\",\n        \"path\": \"./snippets/markdown.code-snippets\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[markdown]\": {\n        \"editor.unicodeHighlight.ambiguousCharacters\": false,\n        \"editor.unicodeHighlight.invisibleCharacters\": false,\n        \"diffEditor.ignoreTrimWhitespace\": false\n      }\n    }\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin microsoft/vscode-markdown-tm-grammar syntaxes/markdown.tmLanguage ./syntaxes/markdown.tmLanguage.json\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/markdown-basics/package.nls.json",
    "content": "{\n\t\"displayName\": \"Markdown Language Basics\",\n\t\"description\": \"Provides snippets and syntax highlighting for Markdown.\"\n}\n"
  },
  {
    "path": "extensions/markdown-basics/snippets/markdown.code-snippets",
    "content": "{\n\t\"Insert bold text\": {\n\t\t\"prefix\": \"bold\",\n\t\t\"body\": \"**${1:${TM_SELECTED_TEXT}}**$0\",\n\t\t\"description\": \"Insert bold text\"\n\t},\n\t\"Insert italic text\": {\n\t\t\"prefix\": \"italic\",\n\t\t\"body\": \"*${1:${TM_SELECTED_TEXT}}*$0\",\n\t\t\"description\": \"Insert italic text\"\n\t},\n\t\"Insert quoted text\": {\n\t\t\"prefix\": \"quote\",\n\t\t\"body\": \"> ${1:${TM_SELECTED_TEXT}}\",\n\t\t\"description\": \"Insert quoted text\"\n\t},\n\t\"Insert inline code\": {\n\t\t\"prefix\": \"code\",\n\t\t\"body\": \"`${1:${TM_SELECTED_TEXT}}`$0\",\n\t\t\"description\": \"Insert inline code\"\n\t},\n\t\"Insert fenced code block\": {\n\t\t\"prefix\": \"fenced codeblock\",\n\t\t\"body\": [\"```${1|python,c,c++,c#,ruby,go,java,php,htm,css,javascript,json,markdown,console|}\", \"${TM_SELECTED_TEXT}$0\", \"```\"],\n\t\t\"description\": \"Insert fenced code block\"\n\t},\n\t\"Insert heading level 1\": {\n\t\t\"prefix\": \"heading1\",\n\t\t\"body\": \"# ${1:${TM_SELECTED_TEXT}}\",\n\t\t\"description\": \"Insert heading level 1\"\n\t},\n\t\"Insert heading level 2\": {\n\t\t\"prefix\": \"heading2\",\n\t\t\"body\": \"## ${1:${TM_SELECTED_TEXT}}\",\n\t\t\"description\": \"Insert heading level 2\"\n\t},\n\t\"Insert heading level 3\": {\n\t\t\"prefix\": \"heading3\",\n\t\t\"body\": \"### ${1:${TM_SELECTED_TEXT}}\",\n\t\t\"description\": \"Insert heading level 3\"\n\t},\n\t\"Insert heading level 4\": {\n\t\t\"prefix\": \"heading4\",\n\t\t\"body\": \"#### ${1:${TM_SELECTED_TEXT}}\",\n\t\t\"description\": \"Insert heading level 4\"\n\t},\n\t\"Insert heading level 5\": {\n\t\t\"prefix\": \"heading5\",\n\t\t\"body\": \"##### ${1:${TM_SELECTED_TEXT}}\",\n\t\t\"description\": \"Insert heading level 5\"\n\t},\n\t\"Insert heading level 6\": {\n\t\t\"prefix\": \"heading6\",\n\t\t\"body\": \"###### ${1:${TM_SELECTED_TEXT}}\",\n\t\t\"description\": \"Insert heading level 6\"\n\t},\n\t\"Insert unordered list\": {\n\t\t\"prefix\": \"unordered list\",\n\t\t\"body\": [\"- ${1:first}\", \"- ${2:second}\", \"- ${3:third}\", \"$0\"],\n\t\t\"description\": \"Insert unordered list\"\n\t},\n\t\"Insert ordered list\": {\n\t\t\"prefix\": \"ordered list\",\n\t\t\"body\": [\"1. ${1:first}\", \"2. ${2:second}\", \"3. ${3:third}\", \"$0\"],\n\t\t\"description\": \"Insert ordered list\"\n\t},\n\t\"Insert horizontal rule\": {\n\t\t\"prefix\": \"horizontal rule\",\n\t\t\"body\": \"----------\\n\",\n\t\t\"description\": \"Insert horizontal rule\"\n\t},\n\t\"Insert link\": {\n\t\t\"prefix\": \"link\",\n\t\t\"body\": \"[${TM_SELECTED_TEXT:${1:text}}](${2:https://})$0\",\n\t\t\"description\": \"Insert link\"\n\t},\n\t\"Insert image\": {\n\t\t\"prefix\": \"image\",\n\t\t\"body\": \"![${TM_SELECTED_TEXT:${1:alt}}](${2:https://})$0\",\n\t\t\"description\": \"Insert image\"\n\t},\n\t\"Insert strikethrough\": {\n\t\t\"prefix\": \"strikethrough\",\n\t\t\"body\": \"~~${1:${TM_SELECTED_TEXT}}~~\",\n\t\t\"description\": \"Insert strikethrough\"\n\t},\n\t\"Insert inline math\": {\n\t\t\"prefix\": [\n\t\t\t\"inline math\"\n\t\t],\n\t\t\"body\": \"$${1:${TM_SELECTED_TEXT}}$\",\n\t\t\"description\": \"Insert inline math\"\n\t},\n\t\"Insert fenced math\": {\n\t\t\"prefix\": [\n\t\t\t\"fenced math\"\n\t\t],\n\t\t\"body\": [\n\t\t\t\"$$\",\n\t\t\t\"${1:${TM_SELECTED_TEXT}}\",\n\t\t\t\"$$\"\n\t\t],\n\t\t\"description\": \"Insert fenced math\"\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-basics/syntaxes/markdown.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/vscode-markdown-tm-grammar/blob/master/syntaxes/markdown.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/vscode-markdown-tm-grammar/commit/7418dd20d76c72e82fadee2909e03239e9973b35\",\n\t\"name\": \"Markdown\",\n\t\"scopeName\": \"text.html.markdown\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#frontMatter\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#separator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heading\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#blockquote\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lists\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-def\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#table\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paragraph\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"blockquote\": {\n\t\t\t\"begin\": \"(^|\\\\G)[ ]{0,3}(>) ?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.quote.begin.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"markup.quote.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"while\": \"(^|\\\\G)\\\\s*(>) ?\"\n\t\t},\n\t\t\"fenced_code_block_css\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(css|css.erb)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_basic\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(html|htm|shtml|xhtml|inc|tmpl|tpl)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_ini\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(ini|conf)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.ini\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ini\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_java\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(java|bsh)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.java\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.java\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_lua\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(lua)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.lua\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_makefile\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(Makefile|makefile|GNUmakefile|OCamlMakefile)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.makefile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.makefile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_perl\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(perl|pl|pm|pod|t|PL|psgi|vcl)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_r\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(R|r|s|S|Rprofile|\\\\{\\\\.r.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_ruby\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(ruby|rb|rbx|rjs|Rakefile|rake|cgi|fcgi|gemspec|irbrc|Capfile|ru|prawn|Cheffile|Gemfile|Guardfile|Hobofile|Vagrantfile|Appraisals|Rantfile|Berksfile|Berksfile.lock|Thorfile|Puppetfile)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_php\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(php|php3|php4|php5|phpt|phtml|aw|ctp)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_sql\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(sql|ddl|dml)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_vs_net\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(vb)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.vs_net\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.asp.vb.net\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_xml\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(xml|xsd|tld|jsp|pt|cpt|dtml|rss|opml)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_xsl\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(xsl|xslt)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.xsl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml.xsl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_yaml\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(yaml|yml)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.yaml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_dosbatch\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(bat|batch)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.dosbatch\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.batchfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_clojure\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(clj|cljs|clojure)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.clojure\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.clojure\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_coffee\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(coffee|Cakefile|coffee.erb)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.coffee\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.coffee\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_c\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(c|h)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.c\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_cpp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(cpp|c\\\\+\\\\+|cxx)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.cpp source.cpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_diff\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(patch|diff|rej)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.diff\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.diff\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_dockerfile\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(dockerfile|Dockerfile)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.dockerfile\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.dockerfile\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_git_commit\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(COMMIT_EDITMSG|MERGE_MSG)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.git_commit\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.git-commit\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_git_rebase\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(git-rebase-todo)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.git_rebase\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.git-rebase\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_go\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(go|golang)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.go\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.go\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_groovy\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(groovy|gvy)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.groovy\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.groovy\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_pug\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(jade|pug)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.pug\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_js\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\\\{\\\\.js.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.javascript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_js_regexp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(regexp)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.js_regexp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_json\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.json\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_jsonc\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(jsonc)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.jsonc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.json.comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_less\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(less)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.less\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css.less\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_objc\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(objectivec|objective-c|mm|objc|obj-c|m|h)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_swift\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(swift)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_scss\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(scss)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_perl6\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(perl6|p6|pl6|pm6|nqp)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.perl6\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.perl.6\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_powershell\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(powershell|ps1|psm1|psd1|pwsh)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.powershell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_python\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\\\{\\\\.python.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_julia\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(julia|\\\\{\\\\.julia.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.julia\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.julia\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_regexp_python\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(re)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.regexp_python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.regexp.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_rust\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(rust|rs|\\\\{\\\\.rust.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.rust\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_scala\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(scala|sbt)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.scala\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.scala\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_shell\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\\\{\\\\.bash.+?\\\\})((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.shellscript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_ts\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(typescript|ts)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.typescript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_tsx\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(tsx)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.typescriptreact\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_csharp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(cs|csharp|c#)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.csharp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_fsharp\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(fs|fsharp|f#)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.fsharp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.fsharp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_dart\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(dart)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.dart\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.dart\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_handlebars\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(handlebars|hbs)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.handlebars\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.handlebars\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_markdown\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(markdown|md)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_log\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(log)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.log\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.log\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_erlang\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(erlang)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.erlang\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.erlang\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_elixir\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(elixir)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.elixir\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.elixir\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_latex\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(latex|tex)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.latex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.tex.latex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_bibtex\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(bibtex)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.bibtex\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.bibtex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_twig\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?i:(twig)((\\\\s+|:|,|\\\\{|\\\\?)[^`]*)?$)\",\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\",\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language.attributes.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.twig\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.twig\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_css\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_basic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_ini\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_java\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_lua\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_makefile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_vs_net\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_xml\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_xsl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_yaml\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_dosbatch\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_clojure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_coffee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_diff\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_dockerfile\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_git_commit\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_git_rebase\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_go\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_groovy\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_js\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_js_regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_json\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_jsonc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_less\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_swift\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_perl6\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_python\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_julia\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_regexp_python\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_rust\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_scala\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_ts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_tsx\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_csharp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_fsharp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_dart\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_handlebars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_markdown\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_log\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_erlang\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_elixir\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_latex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_bibtex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_twig\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fenced_code_block_unknown\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fenced_code_block_unknown\": {\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\s*)(`{3,}|~{3,})\\\\s*(?=([^`]*)?$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"fenced_code.block.language\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(^|\\\\G)(\\\\2|\\\\s{0,3})(\\\\3)\\\\s*$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"markup.fenced_code.block.markdown\"\n\t\t},\n\t\t\"heading\": {\n\t\t\t\"match\": \"(?:^|\\\\G)[ ]{0,3}(#{1,6}\\\\s+(.*?)(\\\\s+#{1,6})?\\\\s*)$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{6})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.6.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{5})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.5.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{4})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.4.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{3})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.3.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{2})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.2.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(#{1})\\\\s+(.*?)(?:\\\\s+(#+))?\\\\s*$\",\n\t\t\t\t\t\t\t\"name\": \"heading.1.markdown\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.section.markdown\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.heading.markdown\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"markup.heading.markdown\"\n\t\t},\n\t\t\"heading-setext\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^(={3,})(?=[ \\\\t]*$\\\\n?)\",\n\t\t\t\t\t\"name\": \"markup.heading.setext.1.markdown\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^(-{3,})(?=[ \\\\t]*$\\\\n?)\",\n\t\t\t\t\t\"name\": \"markup.heading.setext.2.markdown\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"html\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)\\\\s*(<!--)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(-->)\",\n\t\t\t\t\t\"name\": \"comment.block.html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(^|\\\\G)\\\\s*(?=<(script|style|pre)(\\\\s|$|>)(?!.*?</(script|style|pre)>))\",\n\t\t\t\t\t\"end\": \"(?i)(.*)((</)(script|style|pre)(>))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.tag.structure.$4.end.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\s*|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"while\": \"(?i)^(?!.*</(script|style|pre)>)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(^|\\\\G)\\\\s*(?=</?[a-zA-Z]+[^\\\\s/&gt;]*(\\\\s|$|/?>))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"^(?!\\\\s*$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)\\\\s*(?=(<[a-zA-Z0-9\\\\-](/?>|\\\\s.*?>)|</[a-zA-Z0-9\\\\-]>)\\\\s*$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"^(?!\\\\s*$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"link-def\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.other.reference.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?x)\\n  \\\\s*            # Leading whitespace\\n  (\\\\[)([^]]+?)(\\\\])(:)    # Reference name\\n  [ \\\\t]*          # Optional whitespace\\n  (?:(<)((?:\\\\\\\\[<>]|[^<>\\\\n])*)(>)|(\\\\S+?))      # The url\\n  [ \\\\t]*          # Optional whitespace\\n  (?:\\n      ((\\\\().+?(\\\\)))    # Match title in parens…\\n    | ((\\\").+?(\\\"))    # or in double quotes…\\n    | ((').+?('))    # or in single quotes.\\n  )?            # Title is optional\\n  \\\\s*            # Optional whitespace\\n  $\\n\",\n\t\t\t\"name\": \"meta.link.reference.def.markdown\"\n\t\t},\n\t\t\"list_paragraph\": {\n\t\t\t\"begin\": \"(^|\\\\G)(?=\\\\S)(?![*+->]\\\\s|[0-9]+\\\\.\\\\s)\",\n\t\t\t\"name\": \"meta.paragraph.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heading-setext\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"while\": \"(^|\\\\G)(?!\\\\s*$|#|[ ]{0,3}([-*_>][ ]{2,}){3,}[ \\\\t]*$\\\\n?|[ ]{0,3}[*+->]|[ ]{0,3}[0-9]+\\\\.)\"\n\t\t},\n\t\t\"lists\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)([ ]{0,3})([*+-])([ \\\\t])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.list.begin.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Currently does not support un-indented second lines.\",\n\t\t\t\t\t\"name\": \"markup.list.unnumbered.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#list_paragraph\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"((^|\\\\G)([ ]{2,4}|\\\\t))|(^[ \\\\t]*$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)([ ]{0,3})([0-9]+[\\\\.\\\\)])([ \\\\t])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.list.begin.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"markup.list.numbered.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#list_paragraph\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"while\": \"((^|\\\\G)([ ]{2,4}|\\\\t))|(^[ \\\\t]*$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paragraph\": {\n\t\t\t\"begin\": \"(^|\\\\G)[ ]{0,3}(?=[^ \\\\t\\\\n])\",\n\t\t\t\"name\": \"meta.paragraph.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heading-setext\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"while\": \"(^|\\\\G)((?=\\\\s*[-=]{3,}\\\\s*$)|[ ]{4,}(?=[^ \\\\t\\\\n]))\"\n\t\t},\n\t\t\"raw_block\": {\n\t\t\t\"begin\": \"(^|\\\\G)([ ]{4}|\\\\t)\",\n\t\t\t\"name\": \"markup.raw.block.markdown\",\n\t\t\t\"while\": \"(^|\\\\G)([ ]{4}|\\\\t)\"\n\t\t},\n\t\t\"separator\": {\n\t\t\t\"match\": \"(^|\\\\G)[ ]{0,3}([\\\\*\\\\-\\\\_])([ ]{0,2}\\\\2){2,}[ \\\\t]*$\\\\n?\",\n\t\t\t\"name\": \"meta.separator.markdown\"\n\t\t},\n\t\t\"frontMatter\": {\n\t\t\t\"begin\": \"\\\\A(?=(-{3,}))\",\n\t\t\t\"end\": \"^ {,3}\\\\1-*[ \\\\t]*$|^[ \\\\t]*\\\\.{3}$\",\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.frontmatter\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\A(-{3,})(.*)$\",\n\t\t\t\t\t\"while\": \"^(?! {,3}\\\\1-*[ \\\\t]*$|[ \\\\t]*\\\\.{3}$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.frontmatter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.frontmatter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.embedded.block.frontmatter\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"table\": {\n\t\t\t\"name\": \"markup.table.markdown\",\n\t\t\t\"begin\": \"(^|\\\\G)(\\\\|)(?=[^|].+\\\\|\\\\s*$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.table.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"while\": \"(^|\\\\G)(?=\\\\|)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\|\",\n\t\t\t\t\t\"name\": \"punctuation.definition.table.markdown\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\|)\\\\s*(:?-+:?)\\\\s*(?=\\\\|)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.table.markdown\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\|)\\\\s*(?=\\\\S)((\\\\\\\\\\\\||[^|])+)(?<=\\\\S)\\\\s*(?=\\\\|)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ampersand\": {\n\t\t\t\"comment\": \"Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid.\",\n\t\t\t\"match\": \"&(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);)\",\n\t\t\t\"name\": \"meta.other.valid-ampersand.markdown\"\n\t\t},\n\t\t\"bold\": {\n\t\t\t\"begin\": \"(?x) (?<open>(\\\\*\\\\*(?=\\\\w)|(?<!\\\\w)\\\\*\\\\*|(?<!\\\\w)\\\\b__))(?=\\\\S) (?=\\n  (\\n    <[^>]*+>              # HTML tags\\n    | (?<raw>`+)([^`]|(?!(?<!`)\\\\k<raw>(?!`))`)*+\\\\k<raw>\\n                      # Raw\\n    | \\\\\\\\[\\\\\\\\`*_{}\\\\[\\\\]()#.!+\\\\->]?+      # Escapes\\n    | \\\\[\\n    (\\n        (?<square>          # Named group\\n          [^\\\\[\\\\]\\\\\\\\]        # Match most chars\\n          | \\\\\\\\.            # Escaped chars\\n          | \\\\[ \\\\g<square>*+ \\\\]    # Nested brackets\\n        )*+\\n      \\\\]\\n      (\\n        (              # Reference Link\\n          [ ]?          # Optional space\\n          \\\\[[^\\\\]]*+\\\\]        # Ref name\\n        )\\n        | (              # Inline Link\\n          \\\\(            # Opening paren\\n            [ \\\\t]*+        # Optional whitespace\\n            <?(.*?)>?      # URL\\n            [ \\\\t]*+        # Optional whitespace\\n            (          # Optional Title\\n              (?<title>['\\\"])\\n              (.*?)\\n              \\\\k<title>\\n            )?\\n          \\\\)\\n        )\\n      )\\n    )\\n    | (?!(?<=\\\\S)\\\\k<open>).            # Everything besides\\n                      # style closer\\n  )++\\n  (?<=\\\\S)(?=__\\\\b|\\\\*\\\\*)\\\\k<open>                # Close\\n)\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.bold.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\S)(\\\\1)\",\n\t\t\t\"name\": \"markup.bold.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\t\t\"begin\": \"(?=<[^>]*?>)\",\n\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracket\": {\n\t\t\t\"comment\": \"Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid.\",\n\t\t\t\"match\": \"<(?![a-zA-Z/?\\\\$!])\",\n\t\t\t\"name\": \"meta.other.valid-bracket.markdown\"\n\t\t},\n\t\t\"escape\": {\n\t\t\t\"match\": \"\\\\\\\\[-`*_#+.!(){}\\\\[\\\\]\\\\\\\\>]\",\n\t\t\t\"name\": \"constant.character.escape.markdown\"\n\t\t},\n\t\t\"image-inline\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.image.markdown\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.image.markdown\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?x)\\n  (\\\\!\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])\\n                # Match the link text.\\n  (\\\\()            # Opening paren for url\\n    # The url\\n      [ \\\\t]*\\n      (\\n         (<)((?:\\\\\\\\[<>]|[^<>\\\\n])*)(>)\\n         | ((?<url>(?>[^\\\\s()]+)|\\\\(\\\\g<url>*\\\\))*)\\n      )\\n      [ \\\\t]*\\n    (?:\\n        ((\\\\().+?(\\\\)))    # Match title in parens…\\n      | ((\\\").+?(\\\"))    # or in double quotes…\\n      | ((').+?('))    # or in single quotes.\\n    )?            # Title is optional\\n    \\\\s*            # Optional whitespace\\n  (\\\\))\\n\",\n\t\t\t\"name\": \"meta.image.inline.markdown\"\n\t\t},\n\t\t\"image-ref\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.description.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"constant.other.reference.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\!\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])[ ]?(\\\\[)(.*?)(\\\\])\",\n\t\t\t\"name\": \"meta.image.reference.markdown\"\n\t\t},\n\t\t\"italic\": {\n\t\t\t\"begin\": \"(?x) (?<open>(\\\\*(?=\\\\w)|(?<!\\\\w)\\\\*|(?<!\\\\w)\\\\b_))(?=\\\\S)                # Open\\n  (?=\\n    (\\n      <[^>]*+>              # HTML tags\\n      | (?<raw>`+)([^`]|(?!(?<!`)\\\\k<raw>(?!`))`)*+\\\\k<raw>\\n                        # Raw\\n      | \\\\\\\\[\\\\\\\\`*_{}\\\\[\\\\]()#.!+\\\\->]?+      # Escapes\\n      | \\\\[\\n      (\\n          (?<square>          # Named group\\n            [^\\\\[\\\\]\\\\\\\\]        # Match most chars\\n            | \\\\\\\\.            # Escaped chars\\n            | \\\\[ \\\\g<square>*+ \\\\]    # Nested brackets\\n          )*+\\n        \\\\]\\n        (\\n          (              # Reference Link\\n            [ ]?          # Optional space\\n            \\\\[[^\\\\]]*+\\\\]        # Ref name\\n          )\\n          | (              # Inline Link\\n            \\\\(            # Opening paren\\n              [ \\\\t]*+        # Optional whtiespace\\n              <?(.*?)>?      # URL\\n              [ \\\\t]*+        # Optional whtiespace\\n              (          # Optional Title\\n                (?<title>['\\\"])\\n                (.*?)\\n                \\\\k<title>\\n              )?\\n            \\\\)\\n          )\\n        )\\n      )\\n      | \\\\k<open>\\\\k<open>                   # Must be bold closer\\n      | (?!(?<=\\\\S)\\\\k<open>).            # Everything besides\\n                        # style closer\\n    )++\\n    (?<=\\\\S)(?=_\\\\b|\\\\*)\\\\k<open>                # Close\\n  )\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.italic.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\S)(\\\\1)((?!\\\\1)|(?=\\\\1\\\\1))\",\n\t\t\t\"name\": \"markup.italic.markdown\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\t\t\"begin\": \"(?=<[^>]*?>)\",\n\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"link-email\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(<)((?:mailto:)?[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*)(>)\",\n\t\t\t\"name\": \"meta.link.email.lt-gt.markdown\"\n\t\t},\n\t\t\"link-inet\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(<)((?:https?|ftp)://.*?)(>)\",\n\t\t\t\"name\": \"meta.link.inet.markdown\"\n\t\t},\n\t\t\"link-inline\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"markup.underline.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"string.other.link.description.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"20\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.metadata.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?x)\\n  (\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])\\n                # Match the link text.\\n  (\\\\()            # Opening paren for url\\n    # The url\\n      [ \\\\t]*\\n      (\\n         (<)((?:\\\\\\\\[<>]|[^<>\\\\n])*)(>)\\n         | ((?<url>(?>[^\\\\s()]+)|\\\\(\\\\g<url>*\\\\))*)\\n      )\\n      [ \\\\t]*\\n    # The title  \\n    (?:\\n        ((\\\\()[^()]*(\\\\)))    # Match title in parens…\\n      | ((\\\")[^\\\"]*(\\\"))    # or in double quotes…\\n      | ((')[^']*('))    # or in single quotes.\\n    )?            # Title is optional\\n    \\\\s*            # Optional whitespace\\n  (\\\\))\\n\",\n\t\t\t\"name\": \"meta.link.inline.markdown\"\n\t\t},\n\t\t\"link-ref\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strikethrough\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"constant.other.reference.link.markdown\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<![\\\\]\\\\\\\\])(\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])(\\\\[)([^\\\\]]*+)(\\\\])\",\n\t\t\t\"name\": \"meta.link.reference.markdown\"\n\t\t},\n\t\t\"link-ref-literal\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<![\\\\]\\\\\\\\])(\\\\[)((?<square>[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\.|\\\\[\\\\g<square>*+\\\\])*+)(\\\\])[ ]?(\\\\[)(\\\\])\",\n\t\t\t\"name\": \"meta.link.reference.literal.markdown\"\n\t\t},\n\t\t\"link-ref-shortcut\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.other.link.title.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.link.title.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<![\\\\]\\\\\\\\])(\\\\[)((?:[^\\\\s\\\\[\\\\]\\\\\\\\]|\\\\\\\\[\\\\[\\\\]])+?)((?<!\\\\\\\\)\\\\])\",\n\t\t\t\"name\": \"meta.link.reference.markdown\"\n\t\t},\n\t\t\"raw\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.raw.markdown\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.raw.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(`+)((?:[^`]|(?!(?<!`)\\\\1(?!`))`)*+)(\\\\1)\",\n\t\t\t\"name\": \"markup.inline.raw.string.markdown\"\n\t\t},\n\t\t\"strikethrough\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.strikethrough.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\t\t\t\t\"begin\": \"(?=<[^>]*?>)\",\n\t\t\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#ampersand\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bracket\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#raw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-inet\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-email\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#image-ref\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-ref-literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-ref\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#link-ref-shortcut\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.strikethrough.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<!\\\\\\\\)(~{2,})((?:[^~]|(?!(?<![~\\\\\\\\])\\\\1(?!~))~)*+)(\\\\1)\",\n\t\t\t\"name\": \"markup.strikethrough.markdown\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/markdown-language-features/.gitignore",
    "content": "notebook-out\nmedia/*.js\n"
  },
  {
    "path": "extensions/markdown-language-features/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/markdown-language-features/.vscodeignore",
    "content": "test/**\ntest-workspace/**\nsrc/**\nnotebook/**\ntsconfig.json\ntsconfig.*.json\nout/test/**\nout/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\ncgmanifest.json\npackage-lock.json\npreview-src/**\nwebpack.config.js\nesbuild-notebook.js\nesbuild-preview.js\n.gitignore\n**/*.d.ts\n"
  },
  {
    "path": "extensions/markdown-language-features/README.md",
    "content": "# Language Features for Markdown files\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [Markdown in Visual Studio Code](https://code.visualstudio.com/docs/languages/markdown) to learn about the features of this extension.\n"
  },
  {
    "path": "extensions/markdown-language-features/esbuild-notebook.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\nconst path = require('path');\n\nconst srcDir = path.join(__dirname, 'notebook');\nconst outDir = path.join(__dirname, 'notebook-out');\n\nrequire('../esbuild-webview-common').run({\n\tentryPoints: [\n\t\tpath.join(srcDir, 'index.ts'),\n\t],\n\tsrcDir,\n\toutdir: outDir,\n}, process.argv);\n"
  },
  {
    "path": "extensions/markdown-language-features/esbuild-preview.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\nconst path = require('path');\n\nconst srcDir = path.join(__dirname, 'preview-src');\nconst outDir = path.join(__dirname, 'media');\n\nrequire('../esbuild-webview-common').run({\n\tentryPoints: [\n\t\tpath.join(srcDir, 'index.ts'),\n\t\tpath.join(srcDir, 'pre'),\n\t],\n\tsrcDir,\n\toutdir: outDir,\n}, process.argv);\n"
  },
  {
    "path": "extensions/markdown-language-features/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst CopyPlugin = require('copy-webpack-plugin');\nconst { browserPlugins, browser } = require('../shared.webpack.config');\n\nmodule.exports = browser({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.browser.ts'\n\t},\n\tplugins: [\n\t\t...browserPlugins(__dirname), // add plugins, don't replace inherited\n\t\tnew CopyPlugin({\n\t\t\tpatterns: [\n\t\t\t\t{\n\t\t\t\t\tfrom: './node_modules/vscode-markdown-languageserver/dist/browser/workerMain.js',\n\t\t\t\t\tto: 'serverWorkerMain.js',\n\t\t\t\t}\n\t\t\t],\n\t\t}),\n\t],\n}, {\n\tconfigFile: 'tsconfig.browser.json'\n});\n"
  },
  {
    "path": "extensions/markdown-language-features/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst CopyPlugin = require('copy-webpack-plugin');\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n\tplugins: [\n\t\t...withDefaults.nodePlugins(__dirname), // add plugins, don't replace inherited\n\t\tnew CopyPlugin({\n\t\t\tpatterns: [\n\t\t\t\t{\n\t\t\t\t\tfrom: './node_modules/vscode-markdown-languageserver/dist/node/workerMain.js',\n\t\t\t\t\tto: 'serverWorkerMain.js',\n\t\t\t\t}\n\t\t\t],\n\t\t}),\n\t],\n});\n"
  },
  {
    "path": "extensions/markdown-language-features/media/highlight.css",
    "content": "/*\nhttps://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/vs2015.css\n*/\n/*\n * Visual Studio 2015 dark style\n * Author: Nicolas LLOBERA <nllobera@gmail.com>\n */\n\n\n.hljs-keyword,\n.hljs-literal,\n.hljs-symbol,\n.hljs-name {\n\tcolor: #569CD6;\n}\n.hljs-link {\n\tcolor: #569CD6;\n\ttext-decoration: underline;\n}\n\n.hljs-built_in,\n.hljs-type {\n\tcolor: #4EC9B0;\n}\n\n.hljs-number,\n.hljs-class {\n\tcolor: #B8D7A3;\n}\n\n.hljs-string,\n.hljs-meta-string {\n\tcolor: #D69D85;\n}\n\n.hljs-regexp,\n.hljs-template-tag {\n\tcolor: #9A5334;\n}\n\n.hljs-subst,\n.hljs-function,\n.hljs-title,\n.hljs-params,\n.hljs-formula {\n\tcolor: #DCDCDC;\n}\n\n.hljs-comment,\n.hljs-quote {\n\tcolor: #57A64A;\n\tfont-style: italic;\n}\n\n.hljs-doctag {\n\tcolor: #608B4E;\n}\n\n.hljs-meta,\n.hljs-meta-keyword,\n.hljs-tag {\n\tcolor: #9B9B9B;\n}\n\n.hljs-variable,\n.hljs-template-variable {\n\tcolor: #BD63C5;\n}\n\n.hljs-attr,\n.hljs-attribute,\n.hljs-builtin-name {\n\tcolor: #9CDCFE;\n}\n\n.hljs-section {\n\tcolor: gold;\n}\n\n.hljs-emphasis {\n\tfont-style: italic;\n}\n\n.hljs-strong {\n\tfont-weight: bold;\n}\n\n/*.hljs-code {\n\tfont-family:'Monospace';\n}*/\n\n.hljs-bullet,\n.hljs-selector-tag,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n\tcolor: #D7BA7D;\n}\n\n.hljs-addition {\n\tbackground-color: var(--vscode-diffEditor-insertedTextBackground, rgba(155, 185, 85, 0.2));\n\tcolor: rgb(155, 185, 85);\n\tdisplay: inline-block;\n\twidth: 100%;\n}\n\n.hljs-deletion {\n\tbackground: var(--vscode-diffEditor-removedTextBackground, rgba(255, 0, 0, 0.2));\n\tcolor: rgb(255, 0, 0);\n\tdisplay: inline-block;\n\twidth: 100%;\n}\n\n\n/*\nFrom https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/vs.css\n*/\n/*\n\nVisual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name>\n\n*/\n\n.vscode-light .hljs-function,\n.vscode-light .hljs-params,\n.vscode-light .hljs-number,\n.vscode-light .hljs-class  {\n\tcolor: inherit;\n}\n\n.vscode-light .hljs-comment,\n.vscode-light .hljs-quote,\n.vscode-light .hljs-number,\n.vscode-light .hljs-class,\n.vscode-light .hljs-variable {\n\tcolor: #008000;\n}\n\n.vscode-light .hljs-keyword,\n.vscode-light .hljs-selector-tag,\n.vscode-light .hljs-name,\n.vscode-light .hljs-tag {\n\tcolor: #00f;\n}\n\n.vscode-light .hljs-built_in,\n.vscode-light .hljs-builtin-name {\n\tcolor: #007acc;\n}\n\n.vscode-light .hljs-string,\n.vscode-light .hljs-section,\n.vscode-light .hljs-attribute,\n.vscode-light .hljs-literal,\n.vscode-light .hljs-template-tag,\n.vscode-light .hljs-template-variable,\n.vscode-light .hljs-type {\n\tcolor: #a31515;\n}\n\n.vscode-light .hljs-subst,\n.vscode-light .hljs-selector-attr,\n.vscode-light .hljs-selector-pseudo,\n.vscode-light .hljs-meta,\n.vscode-light .hljs-meta-keyword {\n\tcolor: #2b91af;\n}\n.vscode-light .hljs-title,\n.vscode-light .hljs-doctag {\n\tcolor: #808080;\n}\n\n.vscode-light .hljs-attr {\n\tcolor: #f00;\n}\n\n.vscode-light .hljs-symbol,\n.vscode-light .hljs-bullet,\n.vscode-light .hljs-link {\n\tcolor: #00b0e8;\n}\n\n\n.vscode-light .hljs-emphasis {\n\tfont-style: italic;\n}\n\n.vscode-light .hljs-strong {\n\tfont-weight: bold;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/media/markdown.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nhtml, body {\n\tfont-family: var(--markdown-font-family, -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif);\n\tfont-size: var(--markdown-font-size, 14px);\n\tpadding: 0 26px;\n\tline-height: var(--markdown-line-height, 22px);\n\tword-wrap: break-word;\n}\n\nbody {\n\tpadding-top: 1em;\n}\n\n/* Reset margin top for elements */\nh1, h2, h3, h4, h5, h6,\np, ol, ul, pre {\n\tmargin-top: 0;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tfont-weight: 600;\n\tmargin-top: 24px;\n\tmargin-bottom: 16px;\n\tline-height: 1.25;\n}\n\n#code-csp-warning {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tcolor: white;\n\tmargin: 16px;\n\ttext-align: center;\n\tfont-size: 12px;\n\tfont-family: sans-serif;\n\tbackground-color:#444444;\n\tcursor: pointer;\n\tpadding: 6px;\n\tbox-shadow: 1px 1px 1px rgba(0,0,0,.25);\n}\n\n#code-csp-warning:hover {\n\ttext-decoration: none;\n\tbackground-color:#007acc;\n\tbox-shadow: 2px 2px 2px rgba(0,0,0,.25);\n}\n\nbody.scrollBeyondLastLine {\n\tmargin-bottom: calc(100vh - 22px);\n}\n\nbody.showEditorSelection .code-line {\n\tposition: relative;\n}\n\nbody.showEditorSelection :not(tr,ul,ol).code-active-line:before,\nbody.showEditorSelection :not(tr,ul,ol).code-line:hover:before {\n\tcontent: \"\";\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: -12px;\n\theight: 100%;\n}\n\n.vscode-high-contrast.showEditorSelection  :not(tr,ul,ol).code-line .code-line:hover:before {\n\tborder-left: none;\n}\n\nbody.showEditorSelection li.code-active-line:before,\nbody.showEditorSelection li.code-line:hover:before {\n\tleft: -30px;\n}\n\n.vscode-light.showEditorSelection .code-active-line:before {\n\tborder-left: 3px solid rgba(0, 0, 0, 0.15);\n}\n\n.vscode-light.showEditorSelection .code-line:hover:before {\n\tborder-left: 3px solid rgba(0, 0, 0, 0.40);\n}\n\n.vscode-dark.showEditorSelection .code-active-line:before {\n\tborder-left: 3px solid rgba(255, 255, 255, 0.4);\n}\n\n.vscode-dark.showEditorSelection .code-line:hover:before {\n\tborder-left: 3px solid rgba(255, 255, 255, 0.60);\n}\n\n.vscode-high-contrast.showEditorSelection .code-active-line:before {\n\tborder-left: 3px solid rgba(255, 160, 0, 0.7);\n}\n\n.vscode-high-contrast.showEditorSelection .code-line:hover:before {\n\tborder-left: 3px solid rgba(255, 160, 0, 1);\n}\n\n/* Prevent `sub` and `sup` elements from affecting line height */\nsub,\nsup {\n\tline-height: 0;\n}\n\nul ul:first-child,\nul ol:first-child,\nol ul:first-child,\nol ol:first-child {\n\tmargin-bottom: 0;\n}\n\nimg, video {\n\tmax-width: 100%;\n\tmax-height: 100%;\n}\n\na {\n\ttext-decoration: none;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na:focus,\ninput:focus,\nselect:focus,\ntextarea:focus {\n\toutline: 1px solid -webkit-focus-ring-color;\n\toutline-offset: -1px;\n}\n\np {\n\tmargin-bottom: 16px;\n}\n\nli p {\n\tmargin-bottom: 0.7em;\n}\n\nul,\nol {\n\tmargin-bottom: 0.7em;\n}\n\nhr {\n\tborder: 0;\n\theight: 1px;\n\tborder-bottom: 1px solid;\n}\n\nh1 {\n\tfont-size: 2em;\n\tmargin-top: 0;\n\tpadding-bottom: 0.3em;\n\tborder-bottom-width: 1px;\n\tborder-bottom-style: solid;\n}\n\nh2 {\n\tfont-size: 1.5em;\n\tpadding-bottom: 0.3em;\n\tborder-bottom-width: 1px;\n\tborder-bottom-style: solid;\n}\n\nh3 {\n\tfont-size: 1.25em;\n}\n\nh4 {\n\tfont-size: 1em;\n}\n\nh5 {\n\tfont-size: 0.875em;\n}\n\nh6 {\n\tfont-size: 0.85em;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tmargin-bottom: 0.7em;\n}\n\nth {\n\ttext-align: left;\n\tborder-bottom: 1px solid;\n}\n\nth,\ntd {\n\tpadding: 5px 10px;\n}\n\ntable > tbody > tr + tr > td {\n\tborder-top: 1px solid;\n}\n\nblockquote {\n\tmargin: 0;\n\tpadding: 0px 16px 0 10px;\n\tborder-left-width: 5px;\n\tborder-left-style: solid;\n\tborder-radius: 2px;\n}\n\ncode {\n\tfont-family: var(--vscode-editor-font-family, \"SF Mono\", Monaco, Menlo, Consolas, \"Ubuntu Mono\", \"Liberation Mono\", \"DejaVu Sans Mono\", \"Courier New\", monospace);\n\tfont-size: 1em;\n\tline-height: 1.357em;\n}\n\nbody.wordWrap pre {\n\twhite-space: pre-wrap;\n}\n\npre:not(.hljs),\npre.hljs code > div {\n\tpadding: 16px;\n\tborder-radius: 3px;\n\toverflow: auto;\n}\n\npre code {\n\tdisplay: inline-block;\n\tcolor: var(--vscode-editor-foreground);\n\ttab-size: 4;\n\tbackground: none;\n}\n\n/** Theming */\n\npre {\n\tbackground-color: var(--vscode-textCodeBlock-background);\n\tborder: 1px solid var(--vscode-widget-border);\n}\n\n.vscode-high-contrast h1 {\n\tborder-color: rgb(0, 0, 0);\n}\n\n.vscode-light th {\n\tborder-color: rgba(0, 0, 0, 0.69);\n}\n\n.vscode-dark th {\n\tborder-color: rgba(255, 255, 255, 0.69);\n}\n\n.vscode-light h1,\n.vscode-light h2,\n.vscode-light hr,\n.vscode-light td {\n\tborder-color: rgba(0, 0, 0, 0.18);\n}\n\n.vscode-dark h1,\n.vscode-dark h2,\n.vscode-dark hr,\n.vscode-dark td {\n\tborder-color: rgba(255, 255, 255, 0.18);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/notebook/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DOMPurify from 'dompurify';\nimport MarkdownIt from 'markdown-it';\nimport type * as MarkdownItToken from 'markdown-it/lib/token';\nimport type { ActivationFunction } from 'vscode-notebook-renderer';\n\nconst allowedHtmlTags = Object.freeze(['a',\n\t'abbr',\n\t'b',\n\t'bdo',\n\t'blockquote',\n\t'br',\n\t'caption',\n\t'cite',\n\t'code',\n\t'col',\n\t'colgroup',\n\t'dd',\n\t'del',\n\t'details',\n\t'dfn',\n\t'div',\n\t'dl',\n\t'dt',\n\t'em',\n\t'figcaption',\n\t'figure',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'hr',\n\t'i',\n\t'img',\n\t'ins',\n\t'kbd',\n\t'label',\n\t'li',\n\t'mark',\n\t'ol',\n\t'p',\n\t'pre',\n\t'q',\n\t'rp',\n\t'rt',\n\t'ruby',\n\t'samp',\n\t'small',\n\t'small',\n\t'source',\n\t'span',\n\t'strike',\n\t'strong',\n\t'sub',\n\t'summary',\n\t'sup',\n\t'table',\n\t'tbody',\n\t'td',\n\t'tfoot',\n\t'th',\n\t'thead',\n\t'time',\n\t'tr',\n\t'tt',\n\t'u',\n\t'ul',\n\t'var',\n\t'video',\n\t'wbr',\n]);\n\nconst allowedSvgTags = Object.freeze([\n\t'svg',\n\t'a',\n\t'altglyph',\n\t'altglyphdef',\n\t'altglyphitem',\n\t'animatecolor',\n\t'animatemotion',\n\t'animatetransform',\n\t'circle',\n\t'clippath',\n\t'defs',\n\t'desc',\n\t'ellipse',\n\t'filter',\n\t'font',\n\t'g',\n\t'glyph',\n\t'glyphref',\n\t'hkern',\n\t'image',\n\t'line',\n\t'lineargradient',\n\t'marker',\n\t'mask',\n\t'metadata',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialgradient',\n\t'rect',\n\t'stop',\n\t'style',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textpath',\n\t'title',\n\t'tref',\n\t'tspan',\n\t'view',\n\t'vkern',\n]);\n\nconst sanitizerOptions: DOMPurify.Config = {\n\tALLOWED_TAGS: [\n\t\t...allowedHtmlTags,\n\t\t...allowedSvgTags,\n\t],\n};\n\nexport const activate: ActivationFunction<void> = (ctx) => {\n\tconst markdownIt: MarkdownIt = new MarkdownIt({\n\t\thtml: true,\n\t\tlinkify: true,\n\t\thighlight: (str: string, lang?: string) => {\n\t\t\tif (lang) {\n\t\t\t\treturn `<div class=\"vscode-code-block\" data-vscode-code-block-lang=\"${markdownIt.utils.escapeHtml(lang)}\">${markdownIt.utils.escapeHtml(str)}</div>`;\n\t\t\t}\n\t\t\treturn markdownIt.utils.escapeHtml(str);\n\t\t}\n\t});\n\tmarkdownIt.linkify.set({ fuzzyLink: false });\n\n\taddNamedHeaderRendering(markdownIt);\n\taddLinkRenderer(markdownIt);\n\n\tconst style = document.createElement('style');\n\tstyle.textContent = `\n\t\t.emptyMarkdownCell::before {\n\t\t\tcontent: \"${document.documentElement.style.getPropertyValue('--notebook-cell-markup-empty-content')}\";\n\t\t\tfont-style: italic;\n\t\t\topacity: 0.6;\n\t\t}\n\n\t\timg {\n\t\t\tmax-width: 100%;\n\t\t\tmax-height: 100%;\n\t\t}\n\n\t\ta {\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\ta:hover {\n\t\t\ttext-decoration: underline;\n\t\t}\n\n\t\ta:focus,\n\t\tinput:focus,\n\t\tselect:focus,\n\t\ttextarea:focus {\n\t\t\toutline: 1px solid -webkit-focus-ring-color;\n\t\t\toutline-offset: -1px;\n\t\t}\n\n\t\thr {\n\t\t\tborder: 0;\n\t\t\theight: 2px;\n\t\t\tborder-bottom: 2px solid;\n\t\t}\n\n\t\th2, h3, h4, h5, h6 {\n\t\t\tfont-weight: normal;\n\t\t}\n\n\t\th1 {\n\t\t\tfont-size: 2.3em;\n\t\t}\n\n\t\th2 {\n\t\t\tfont-size: 2em;\n\t\t}\n\n\t\th3 {\n\t\t\tfont-size: 1.7em;\n\t\t}\n\n\t\th3 {\n\t\t\tfont-size: 1.5em;\n\t\t}\n\n\t\th4 {\n\t\t\tfont-size: 1.3em;\n\t\t}\n\n\t\th5 {\n\t\t\tfont-size: 1.2em;\n\t\t}\n\n\t\th1,\n\t\th2,\n\t\th3 {\n\t\t\tfont-weight: normal;\n\t\t}\n\n\t\tdiv {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t/* Adjust margin of first item in markdown cell */\n\t\t*:first-child {\n\t\t\tmargin-top: 0px;\n\t\t}\n\n\t\t/* h1 tags don't need top margin */\n\t\th1:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\t/* Removes bottom margin when only one item exists in markdown cell */\n\t\t#preview > *:only-child,\n\t\t#preview > *:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\t/* makes all markdown cells consistent */\n\t\tdiv {\n\t\t\tmin-height: var(--notebook-markdown-min-height);\n\t\t}\n\n\t\ttable {\n\t\t\tborder-collapse: collapse;\n\t\t\tborder-spacing: 0;\n\t\t}\n\n\t\ttable th,\n\t\ttable td {\n\t\t\tborder: 1px solid;\n\t\t}\n\n\t\ttable > thead > tr > th {\n\t\t\ttext-align: left;\n\t\t\tborder-bottom: 1px solid;\n\t\t}\n\n\t\ttable > thead > tr > th,\n\t\ttable > thead > tr > td,\n\t\ttable > tbody > tr > th,\n\t\ttable > tbody > tr > td {\n\t\t\tpadding: 5px 10px;\n\t\t}\n\n\t\ttable > tbody > tr + tr > td {\n\t\t\tborder-top: 1px solid;\n\t\t}\n\n\t\tblockquote {\n\t\t\tmargin: 0 7px 0 5px;\n\t\t\tpadding: 0 16px 0 10px;\n\t\t\tborder-left-width: 5px;\n\t\t\tborder-left-style: solid;\n\t\t}\n\n\t\tcode {\n\t\t\tfont-size: 1em;\n\t\t\tfont-family: var(--vscode-editor-font-family);\n\t\t}\n\n\t\tpre code {\n\t\t\tline-height: 1.357em;\n\t\t\twhite-space: pre-wrap;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tli p {\n\t\t\tmargin-bottom: 0.7em;\n\t\t}\n\n\t\tul,\n\t\tol {\n\t\t\tmargin-bottom: 0.7em;\n\t\t}\n\t`;\n\tconst template = document.createElement('template');\n\ttemplate.classList.add('markdown-style');\n\ttemplate.content.appendChild(style);\n\tdocument.head.appendChild(template);\n\n\treturn {\n\t\trenderOutputItem: (outputInfo, element) => {\n\t\t\tlet previewNode: HTMLElement;\n\t\t\tif (!element.shadowRoot) {\n\t\t\t\tconst previewRoot = element.attachShadow({ mode: 'open' });\n\n\t\t\t\t// Insert styles into markdown preview shadow dom so that they are applied.\n\t\t\t\t// First add default webview style\n\t\t\t\tconst defaultStyles = document.getElementById('_defaultStyles') as HTMLStyleElement;\n\t\t\t\tpreviewRoot.appendChild(defaultStyles.cloneNode(true));\n\n\t\t\t\t// And then contributed styles\n\t\t\t\tfor (const element of document.getElementsByClassName('markdown-style')) {\n\t\t\t\t\tif (element instanceof HTMLTemplateElement) {\n\t\t\t\t\t\tpreviewRoot.appendChild(element.content.cloneNode(true));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpreviewRoot.appendChild(element.cloneNode(true));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpreviewNode = document.createElement('div');\n\t\t\t\tpreviewNode.id = 'preview';\n\t\t\t\tpreviewRoot.appendChild(previewNode);\n\t\t\t} else {\n\t\t\t\tpreviewNode = element.shadowRoot.getElementById('preview')!;\n\t\t\t}\n\n\t\t\tconst text = outputInfo.text();\n\t\t\tif (text.trim().length === 0) {\n\t\t\t\tpreviewNode.innerText = '';\n\t\t\t\tpreviewNode.classList.add('emptyMarkdownCell');\n\t\t\t} else {\n\t\t\t\tpreviewNode.classList.remove('emptyMarkdownCell');\n\t\t\t\tconst markdownText = outputInfo.mime.startsWith('text/x-') ? `\\`\\`\\`${outputInfo.mime.substr(7)}\\n${text}\\n\\`\\`\\``\n\t\t\t\t\t: (outputInfo.mime.startsWith('application/') ? `\\`\\`\\`${outputInfo.mime.substr(12)}\\n${text}\\n\\`\\`\\`` : text);\n\t\t\t\tconst unsanitizedRenderedMarkdown = markdownIt.render(markdownText, {\n\t\t\t\t\toutputItem: outputInfo,\n\t\t\t\t});\n\t\t\t\tpreviewNode.innerHTML = (ctx.workspace.isTrusted\n\t\t\t\t\t? unsanitizedRenderedMarkdown\n\t\t\t\t\t: DOMPurify.sanitize(unsanitizedRenderedMarkdown, sanitizerOptions)) as string;\n\t\t\t}\n\t\t},\n\t\textendMarkdownIt: (f: (md: typeof markdownIt) => void) => {\n\t\t\ttry {\n\t\t\t\tf(markdownIt);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('Error extending markdown-it', err);\n\t\t\t}\n\t\t}\n\t};\n};\n\n\nfunction addNamedHeaderRendering(md: InstanceType<typeof MarkdownIt>): void {\n\tconst slugCounter = new Map<string, number>();\n\n\tconst originalHeaderOpen = md.renderer.rules.heading_open;\n\tmd.renderer.rules.heading_open = (tokens: MarkdownItToken[], idx: number, options, env, self) => {\n\t\tconst title = tokens[idx + 1].children!.reduce<string>((acc, t) => acc + t.content, '');\n\t\tlet slug = slugify(title);\n\n\t\tif (slugCounter.has(slug)) {\n\t\t\tconst count = slugCounter.get(slug)!;\n\t\t\tslugCounter.set(slug, count + 1);\n\t\t\tslug = slugify(slug + '-' + (count + 1));\n\t\t} else {\n\t\t\tslugCounter.set(slug, 0);\n\t\t}\n\n\t\ttokens[idx].attrSet('id', slug);\n\n\t\tif (originalHeaderOpen) {\n\t\t\treturn originalHeaderOpen(tokens, idx, options, env, self);\n\t\t} else {\n\t\t\treturn self.renderToken(tokens, idx, options);\n\t\t}\n\t};\n\n\tconst originalRender = md.render;\n\tmd.render = function () {\n\t\tslugCounter.clear();\n\t\treturn originalRender.apply(this, arguments as any);\n\t};\n}\n\nfunction addLinkRenderer(md: MarkdownIt): void {\n\tconst original = md.renderer.rules.link_open;\n\n\tmd.renderer.rules.link_open = (tokens: MarkdownItToken[], idx: number, options, env, self) => {\n\t\tconst token = tokens[idx];\n\t\tconst href = token.attrGet('href');\n\t\tif (typeof href === 'string' && href.startsWith('#')) {\n\t\t\ttoken.attrSet('href', '#' + slugify(href.slice(1)));\n\t\t}\n\t\tif (original) {\n\t\t\treturn original(tokens, idx, options, env, self);\n\t\t} else {\n\t\t\treturn self.renderToken(tokens, idx, options);\n\t\t}\n\t};\n}\n\nfunction slugify(text: string): string {\n\tconst slugifiedHeading = encodeURI(\n\t\ttext.trim()\n\t\t\t.toLowerCase()\n\t\t\t.replace(/\\s+/g, '-') // Replace whitespace with -\n\t\t\t// allow-any-unicode-next-line\n\t\t\t.replace(/[\\]\\[\\!\\/\\'\\\"\\#\\$\\%\\&\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\\\\\^\\{\\|\\}\\~\\`。，、；：？！…—·ˉ¨‘’“”々～‖∶＂＇｀｜〃〔〕〈〉《》「」『』．〖〗【】（）［］｛｝]/g, '') // Remove known punctuators\n\t\t\t.replace(/^\\-+/, '') // Remove leading -\n\t\t\t.replace(/\\-+$/, '') // Remove trailing -\n\t);\n\treturn slugifiedHeading;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/notebook/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist/\",\n\t\t\"jsx\": \"react\",\n\t\t\"moduleResolution\": \"Node\",\n\t\t\"allowSyntheticDefaultImports\": true,\n\t\t\"module\": \"es2020\",\n\t\t\"lib\": [\n\t\t\t\"es2018\",\n\t\t\t\"DOM\",\n\t\t\t\"DOM.Iterable\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/package.json",
    "content": "{\n  \"name\": \"markdown-language-features\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"icon\": \"icon.png\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"engines\": {\n    \"vscode\": \"^1.70.0\"\n  },\n  \"main\": \"./out/extension\",\n  \"browser\": \"./dist/browser/extension\",\n  \"categories\": [\n    \"Programming Languages\"\n  ],\n  \"activationEvents\": [\n    \"onLanguage:markdown\",\n    \"onCommand:markdown.api.render\",\n    \"onCommand:markdown.api.reloadPlugins\",\n    \"onWebviewPanel:markdown.preview\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": \"limited\",\n      \"description\": \"%workspaceTrust%\",\n      \"restrictedConfigurations\": [\n        \"markdown.styles\"\n      ]\n    }\n  },\n  \"contributes\": {\n    \"notebookRenderer\": [\n      {\n        \"id\": \"vscode.markdown-it-renderer\",\n        \"displayName\": \"Markdown it renderer\",\n        \"entrypoint\": \"./notebook-out/index.js\",\n        \"mimeTypes\": [\n          \"text/markdown\",\n          \"text/latex\",\n          \"text/x-css\",\n          \"text/x-html\",\n          \"text/x-json\",\n          \"text/x-typescript\",\n          \"text/x-abap\",\n          \"text/x-apex\",\n          \"text/x-azcli\",\n          \"text/x-bat\",\n          \"text/x-cameligo\",\n          \"text/x-clojure\",\n          \"text/x-coffee\",\n          \"text/x-cpp\",\n          \"text/x-csharp\",\n          \"text/x-csp\",\n          \"text/x-css\",\n          \"text/x-dart\",\n          \"text/x-dockerfile\",\n          \"text/x-ecl\",\n          \"text/x-fsharp\",\n          \"text/x-go\",\n          \"text/x-graphql\",\n          \"text/x-handlebars\",\n          \"text/x-hcl\",\n          \"text/x-html\",\n          \"text/x-ini\",\n          \"text/x-java\",\n          \"text/x-javascript\",\n          \"text/x-julia\",\n          \"text/x-kotlin\",\n          \"text/x-less\",\n          \"text/x-lexon\",\n          \"text/x-lua\",\n          \"text/x-m3\",\n          \"text/x-markdown\",\n          \"text/x-mips\",\n          \"text/x-msdax\",\n          \"text/x-mysql\",\n          \"text/x-objective-c/objective\",\n          \"text/x-pascal\",\n          \"text/x-pascaligo\",\n          \"text/x-perl\",\n          \"text/x-pgsql\",\n          \"text/x-php\",\n          \"text/x-postiats\",\n          \"text/x-powerquery\",\n          \"text/x-powershell\",\n          \"text/x-pug\",\n          \"text/x-python\",\n          \"text/x-r\",\n          \"text/x-razor\",\n          \"text/x-redis\",\n          \"text/x-redshift\",\n          \"text/x-restructuredtext\",\n          \"text/x-ruby\",\n          \"text/x-rust\",\n          \"text/x-sb\",\n          \"text/x-scala\",\n          \"text/x-scheme\",\n          \"text/x-scss\",\n          \"text/x-shell\",\n          \"text/x-solidity\",\n          \"text/x-sophia\",\n          \"text/x-sql\",\n          \"text/x-st\",\n          \"text/x-swift\",\n          \"text/x-systemverilog\",\n          \"text/x-tcl\",\n          \"text/x-twig\",\n          \"text/x-typescript\",\n          \"text/x-vb\",\n          \"text/x-xml\",\n          \"text/x-yaml\",\n          \"application/json\"\n        ]\n      }\n    ],\n    \"commands\": [\n      {\n        \"command\": \"_markdown.copyImage\",\n        \"title\": \"%markdown.copyImage.title%\",\n        \"category\": \"Markdown\"\n      },\n      {\n        \"command\": \"_markdown.openImage\",\n        \"title\": \"%markdown.openImage.title%\",\n        \"category\": \"Markdown\"\n      },\n      {\n        \"command\": \"markdown.showPreview\",\n        \"title\": \"%markdown.preview.title%\",\n        \"category\": \"Markdown\",\n        \"icon\": {\n          \"light\": \"./media/preview-light.svg\",\n          \"dark\": \"./media/preview-dark.svg\"\n        }\n      },\n      {\n        \"command\": \"markdown.showPreviewToSide\",\n        \"title\": \"%markdown.previewSide.title%\",\n        \"category\": \"Markdown\",\n        \"icon\": \"$(open-preview)\"\n      },\n      {\n        \"command\": \"markdown.showLockedPreviewToSide\",\n        \"title\": \"%markdown.showLockedPreviewToSide.title%\",\n        \"category\": \"Markdown\",\n        \"icon\": \"$(open-preview)\"\n      },\n      {\n        \"command\": \"markdown.showSource\",\n        \"title\": \"%markdown.showSource.title%\",\n        \"category\": \"Markdown\",\n        \"icon\": \"$(go-to-file)\"\n      },\n      {\n        \"command\": \"markdown.showPreviewSecuritySelector\",\n        \"title\": \"%markdown.showPreviewSecuritySelector.title%\",\n        \"category\": \"Markdown\"\n      },\n      {\n        \"command\": \"markdown.preview.refresh\",\n        \"title\": \"%markdown.preview.refresh.title%\",\n        \"category\": \"Markdown\"\n      },\n      {\n        \"command\": \"markdown.preview.toggleLock\",\n        \"title\": \"%markdown.preview.toggleLock.title%\",\n        \"category\": \"Markdown\"\n      },\n      {\n        \"command\": \"markdown.findAllFileReferences\",\n        \"title\": \"%markdown.findAllFileReferences%\",\n        \"category\": \"Markdown\"\n      },\n      {\n        \"command\": \"markdown.editor.insertLinkFromWorkspace\",\n        \"title\": \"%markdown.editor.insertLinkFromWorkspace%\",\n        \"category\": \"Markdown\",\n        \"enablement\": \"editorLangId == markdown && !activeEditorIsReadonly\"\n      },\n      {\n        \"command\": \"markdown.editor.insertImageFromWorkspace\",\n        \"title\": \"%markdown.editor.insertImageFromWorkspace%\",\n        \"category\": \"Markdown\",\n        \"enablement\": \"editorLangId == markdown && !activeEditorIsReadonly\"\n      }\n    ],\n    \"menus\": {\n      \"webview/context\": [\n        {\n          \"command\": \"_markdown.copyImage\",\n          \"when\": \"webviewId == 'markdown.preview' && (webviewSection == 'image' || webviewSection == 'localImage')\"\n        },\n        {\n          \"command\": \"_markdown.openImage\",\n          \"when\": \"webviewId == 'markdown.preview' && webviewSection == 'localImage'\"\n        }\n      ],\n      \"editor/title\": [\n        {\n          \"command\": \"markdown.showPreviewToSide\",\n          \"when\": \"editorLangId == markdown && !notebookEditorFocused && !hasCustomMarkdownPreview\",\n          \"alt\": \"markdown.showPreview\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"markdown.showSource\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"markdown.preview.refresh\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\",\n          \"group\": \"1_markdown\"\n        },\n        {\n          \"command\": \"markdown.preview.toggleLock\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\",\n          \"group\": \"1_markdown\"\n        },\n        {\n          \"command\": \"markdown.showPreviewSecuritySelector\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\",\n          \"group\": \"1_markdown\"\n        }\n      ],\n      \"explorer/context\": [\n        {\n          \"command\": \"markdown.showPreview\",\n          \"when\": \"resourceLangId == markdown && !hasCustomMarkdownPreview\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"markdown.findAllFileReferences\",\n          \"when\": \"resourceLangId == markdown\",\n          \"group\": \"4_search\"\n        }\n      ],\n      \"editor/title/context\": [\n        {\n          \"command\": \"markdown.showPreview\",\n          \"when\": \"resourceLangId == markdown && !hasCustomMarkdownPreview\",\n          \"group\": \"1_open\"\n        },\n        {\n          \"command\": \"markdown.findAllFileReferences\",\n          \"when\": \"resourceLangId == markdown\"\n        }\n      ],\n      \"commandPalette\": [\n        {\n          \"command\": \"_markdown.openImage\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"_markdown.copyImage\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"markdown.showPreview\",\n          \"when\": \"editorLangId == markdown && !notebookEditorFocused\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"markdown.showPreviewToSide\",\n          \"when\": \"editorLangId == markdown && !notebookEditorFocused\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"markdown.showLockedPreviewToSide\",\n          \"when\": \"editorLangId == markdown && !notebookEditorFocused\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"markdown.showSource\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"markdown.showPreviewSecuritySelector\",\n          \"when\": \"editorLangId == markdown && !notebookEditorFocused\"\n        },\n        {\n          \"command\": \"markdown.showPreviewSecuritySelector\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\"\n        },\n        {\n          \"command\": \"markdown.preview.toggleLock\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\"\n        },\n        {\n          \"command\": \"markdown.preview.refresh\",\n          \"when\": \"editorLangId == markdown && !notebookEditorFocused\"\n        },\n        {\n          \"command\": \"markdown.preview.refresh\",\n          \"when\": \"activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'\"\n        },\n        {\n          \"command\": \"markdown.findAllFileReferences\",\n          \"when\": \"editorLangId == markdown\"\n        }\n      ]\n    },\n    \"keybindings\": [\n      {\n        \"command\": \"markdown.showPreview\",\n        \"key\": \"shift+ctrl+v\",\n        \"mac\": \"shift+cmd+v\",\n        \"when\": \"editorLangId == markdown && !notebookEditorFocused\"\n      },\n      {\n        \"command\": \"markdown.showPreviewToSide\",\n        \"key\": \"ctrl+k v\",\n        \"mac\": \"cmd+k v\",\n        \"when\": \"editorLangId == markdown && !notebookEditorFocused\"\n      }\n    ],\n    \"configuration\": {\n      \"type\": \"object\",\n      \"title\": \"Markdown\",\n      \"order\": 20,\n      \"properties\": {\n        \"markdown.styles\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"default\": [],\n          \"description\": \"%markdown.styles.dec%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.breaks\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%markdown.preview.breaks.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.linkify\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%markdown.preview.linkify%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.typographer\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"%markdown.preview.typographer%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.fontFamily\": {\n          \"type\": \"string\",\n          \"default\": \"-apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif\",\n          \"description\": \"%markdown.preview.fontFamily.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.fontSize\": {\n          \"type\": \"number\",\n          \"default\": 14,\n          \"description\": \"%markdown.preview.fontSize.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.lineHeight\": {\n          \"type\": \"number\",\n          \"default\": 1.6,\n          \"description\": \"%markdown.preview.lineHeight.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.scrollPreviewWithEditor\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%markdown.preview.scrollPreviewWithEditor.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.markEditorSelection\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%markdown.preview.markEditorSelection.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.scrollEditorWithPreview\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%markdown.preview.scrollEditorWithPreview.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.doubleClickToSwitchToEditor\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%markdown.preview.doubleClickToSwitchToEditor.desc%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.preview.openMarkdownLinks\": {\n          \"type\": \"string\",\n          \"default\": \"inPreview\",\n          \"description\": \"%configuration.markdown.preview.openMarkdownLinks.description%\",\n          \"scope\": \"resource\",\n          \"enum\": [\n            \"inPreview\",\n            \"inEditor\"\n          ],\n          \"enumDescriptions\": [\n            \"%configuration.markdown.preview.openMarkdownLinks.inPreview%\",\n            \"%configuration.markdown.preview.openMarkdownLinks.inEditor%\"\n          ]\n        },\n        \"markdown.links.openLocation\": {\n          \"type\": \"string\",\n          \"default\": \"currentGroup\",\n          \"description\": \"%configuration.markdown.links.openLocation.description%\",\n          \"scope\": \"resource\",\n          \"enum\": [\n            \"currentGroup\",\n            \"beside\"\n          ],\n          \"enumDescriptions\": [\n            \"%configuration.markdown.links.openLocation.currentGroup%\",\n            \"%configuration.markdown.links.openLocation.beside%\"\n          ]\n        },\n        \"markdown.suggest.paths.enabled\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%configuration.markdown.suggest.paths.enabled.description%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.suggest.paths.includeWorkspaceHeaderCompletions\": {\n          \"type\": \"string\",\n          \"default\": \"onDoubleHash\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions%\",\n          \"enum\": [\n            \"never\",\n            \"onDoubleHash\",\n            \"onSingleOrDoubleHash\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.never%\",\n            \"%configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onDoubleHash%\",\n            \"%configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onSingleOrDoubleHash%\"\n          ]\n        },\n        \"markdown.trace.server\": {\n          \"type\": \"string\",\n          \"scope\": \"window\",\n          \"enum\": [\n            \"off\",\n            \"messages\",\n            \"verbose\"\n          ],\n          \"default\": \"off\",\n          \"description\": \"%markdown.trace.server.desc%\"\n        },\n        \"markdown.server.log\": {\n          \"type\": \"string\",\n          \"scope\": \"window\",\n          \"enum\": [\n            \"off\",\n            \"debug\",\n            \"trace\"\n          ],\n          \"default\": \"off\",\n          \"description\": \"%markdown.server.log.desc%\"\n        },\n        \"markdown.editor.drop.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.editor.drop.enabled%\",\n          \"default\": \"smart\",\n          \"enum\": [\n            \"always\",\n            \"smart\",\n            \"never\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.markdown.editor.drop.enabled.always%\",\n            \"%configuration.markdown.editor.drop.enabled.smart%\",\n            \"%configuration.markdown.editor.drop.enabled.never%\"\n          ]\n        },\n        \"markdown.editor.drop.copyIntoWorkspace\": {\n          \"type\": \"string\",\n          \"markdownDescription\": \"%configuration.markdown.editor.drop.copyIntoWorkspace%\",\n          \"default\": \"mediaFiles\",\n          \"enum\": [\n            \"mediaFiles\",\n            \"never\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.copyIntoWorkspace.mediaFiles%\",\n            \"%configuration.copyIntoWorkspace.never%\"\n          ]\n        },\n        \"markdown.editor.filePaste.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.editor.filePaste.enabled%\",\n          \"default\": \"smart\",\n          \"enum\": [\n            \"always\",\n            \"smart\",\n            \"never\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.markdown.editor.filePaste.enabled.always%\",\n            \"%configuration.markdown.editor.filePaste.enabled.smart%\",\n            \"%configuration.markdown.editor.filePaste.enabled.never%\"\n          ]\n        },\n        \"markdown.editor.filePaste.copyIntoWorkspace\": {\n          \"type\": \"string\",\n          \"markdownDescription\": \"%configuration.markdown.editor.filePaste.copyIntoWorkspace%\",\n          \"default\": \"mediaFiles\",\n          \"enum\": [\n            \"mediaFiles\",\n            \"never\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.copyIntoWorkspace.mediaFiles%\",\n            \"%configuration.copyIntoWorkspace.never%\"\n          ]\n        },\n        \"markdown.editor.filePaste.videoSnippet\": {\n          \"type\": \"string\",\n          \"markdownDescription\": \"%configuration.markdown.editor.filePaste.videoSnippet%\",\n          \"default\": \"<video controls src=\\\"${src}\\\" title=\\\"${title}\\\"></video>\"\n        },\n        \"markdown.editor.filePaste.audioSnippet\": {\n          \"type\": \"string\",\n          \"markdownDescription\": \"%configuration.markdown.editor.filePaste.audioSnippet%\",\n          \"default\": \"<audio controls src=\\\"${src}\\\" title=\\\"${title}\\\"></audio>\"\n        },\n        \"markdown.editor.pasteUrlAsFormattedLink.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.editor.pasteUrlAsFormattedLink.enabled%\",\n          \"default\": \"smartWithSelection\",\n          \"enum\": [\n            \"always\",\n            \"smart\",\n            \"smartWithSelection\",\n            \"never\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.pasteUrlAsFormattedLink.always%\",\n            \"%configuration.pasteUrlAsFormattedLink.smart%\",\n            \"%configuration.pasteUrlAsFormattedLink.smartWithSelection%\",\n            \"%configuration.pasteUrlAsFormattedLink.never%\"\n          ]\n        },\n        \"markdown.validate.enabled\": {\n          \"type\": \"boolean\",\n          \"scope\": \"resource\",\n          \"description\": \"%configuration.markdown.validate.enabled.description%\",\n          \"default\": false\n        },\n        \"markdown.validate.referenceLinks.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.validate.referenceLinks.enabled.description%\",\n          \"default\": \"warning\",\n          \"enum\": [\n            \"ignore\",\n            \"warning\",\n            \"error\"\n          ]\n        },\n        \"markdown.validate.fragmentLinks.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.validate.fragmentLinks.enabled.description%\",\n          \"default\": \"warning\",\n          \"enum\": [\n            \"ignore\",\n            \"warning\",\n            \"error\"\n          ]\n        },\n        \"markdown.validate.fileLinks.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.validate.fileLinks.enabled.description%\",\n          \"default\": \"warning\",\n          \"enum\": [\n            \"ignore\",\n            \"warning\",\n            \"error\"\n          ]\n        },\n        \"markdown.validate.fileLinks.markdownFragmentLinks\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.validate.fileLinks.markdownFragmentLinks.description%\",\n          \"default\": \"inherit\",\n          \"enum\": [\n            \"inherit\",\n            \"ignore\",\n            \"warning\",\n            \"error\"\n          ]\n        },\n        \"markdown.validate.ignoredLinks\": {\n          \"type\": \"array\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.validate.ignoredLinks.description%\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"markdown.validate.unusedLinkDefinitions.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.validate.unusedLinkDefinitions.description%\",\n          \"default\": \"hint\",\n          \"enum\": [\n            \"ignore\",\n            \"hint\",\n            \"warning\",\n            \"error\"\n          ]\n        },\n        \"markdown.validate.duplicateLinkDefinitions.enabled\": {\n          \"type\": \"string\",\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%configuration.markdown.validate.duplicateLinkDefinitions.description%\",\n          \"default\": \"warning\",\n          \"enum\": [\n            \"ignore\",\n            \"warning\",\n            \"error\"\n          ]\n        },\n        \"markdown.updateLinksOnFileMove.enabled\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"prompt\",\n            \"always\",\n            \"never\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.markdown.updateLinksOnFileMove.enabled.prompt%\",\n            \"%configuration.markdown.updateLinksOnFileMove.enabled.always%\",\n            \"%configuration.markdown.updateLinksOnFileMove.enabled.never%\"\n          ],\n          \"default\": \"never\",\n          \"markdownDescription\": \"%configuration.markdown.updateLinksOnFileMove.enabled%\",\n          \"scope\": \"window\"\n        },\n        \"markdown.updateLinksOnFileMove.include\": {\n          \"type\": \"array\",\n          \"markdownDescription\": \"%configuration.markdown.updateLinksOnFileMove.include%\",\n          \"scope\": \"window\",\n          \"items\": {\n            \"type\": \"string\",\n            \"description\": \"%configuration.markdown.updateLinksOnFileMove.include.property%\"\n          },\n          \"default\": [\n            \"**/*.{md,mkd,mdwn,mdown,markdown,markdn,mdtxt,mdtext,workbook}\",\n            \"**/*.{jpg,jpe,jpeg,png,bmp,gif,ico,webp,avif,tiff,svg,mp4}\"\n          ]\n        },\n        \"markdown.updateLinksOnFileMove.enableForDirectories\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%configuration.markdown.updateLinksOnFileMove.enableForDirectories%\",\n          \"scope\": \"window\"\n        },\n        \"markdown.occurrencesHighlight.enabled\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"%configuration.markdown.occurrencesHighlight.enabled%\",\n          \"scope\": \"resource\"\n        },\n        \"markdown.copyFiles.destination\": {\n          \"type\": \"object\",\n          \"markdownDescription\": \"%configuration.markdown.copyFiles.destination%\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"markdown.copyFiles.overwriteBehavior\": {\n          \"type\": \"string\",\n          \"markdownDescription\": \"%configuration.markdown.copyFiles.overwriteBehavior%\",\n          \"default\": \"nameIncrementally\",\n          \"enum\": [\n            \"nameIncrementally\",\n            \"overwrite\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.markdown.copyFiles.overwriteBehavior.nameIncrementally%\",\n            \"%configuration.markdown.copyFiles.overwriteBehavior.overwrite%\"\n          ]\n        },\n        \"markdown.preferredMdPathExtensionStyle\": {\n          \"type\": \"string\",\n          \"default\": \"auto\",\n          \"markdownDescription\": \"%configuration.markdown.preferredMdPathExtensionStyle%\",\n          \"enum\": [\n            \"auto\",\n            \"includeExtension\",\n            \"removeExtension\"\n          ],\n          \"markdownEnumDescriptions\": [\n            \"%configuration.markdown.preferredMdPathExtensionStyle.auto%\",\n            \"%configuration.markdown.preferredMdPathExtensionStyle.includeExtension%\",\n            \"%configuration.markdown.preferredMdPathExtensionStyle.removeExtension%\"\n          ]\n        },\n        \"markdown.editor.updateLinksOnPaste.enabled\": {\n          \"type\": \"boolean\",\n          \"markdownDescription\": \"%configuration.markdown.editor.updateLinksOnPaste.enabled%\",\n          \"scope\": \"resource\",\n          \"default\": true\n        }\n      }\n    },\n    \"configurationDefaults\": {\n      \"[markdown]\": {\n        \"editor.wordWrap\": \"on\",\n        \"editor.quickSuggestions\": {\n          \"comments\": \"off\",\n          \"strings\": \"off\",\n          \"other\": \"off\"\n        }\n      }\n    },\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"package.json\",\n        \"url\": \"./schemas/package.schema.json\"\n      }\n    ],\n    \"markdown.previewStyles\": [\n      \"./media/markdown.css\",\n      \"./media/highlight.css\"\n    ],\n    \"markdown.previewScripts\": [\n      \"./media/index.js\"\n    ],\n    \"customEditors\": [\n      {\n        \"viewType\": \"vscode.markdown.preview.editor\",\n        \"displayName\": \"Markdown Preview\",\n        \"priority\": \"option\",\n        \"selector\": [\n          {\n            \"filenamePattern\": \"*.md\"\n          }\n        ]\n      }\n    ]\n  },\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:markdown-language-features-languageService && gulp compile-extension:markdown-language-features && npm run build-preview && npm run build-notebook\",\n    \"watch\": \"npm run build-preview && gulp watch-extension:markdown-language-features watch-extension:markdown-language-features-languageService\",\n    \"vscode:prepublish\": \"npm run build-ext && npm run build-preview\",\n    \"build-ext\": \"node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:markdown-language-features ./tsconfig.json\",\n    \"build-notebook\": \"node ./esbuild-notebook\",\n    \"build-preview\": \"node ./esbuild-preview\",\n    \"compile-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none\",\n    \"watch-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose\"\n  },\n  \"dependencies\": {\n    \"@vscode/extension-telemetry\": \"^0.9.8\",\n    \"dompurify\": \"^3.2.4\",\n    \"highlight.js\": \"^11.8.0\",\n    \"markdown-it\": \"^12.3.2\",\n    \"markdown-it-front-matter\": \"^0.2.4\",\n    \"morphdom\": \"^2.7.4\",\n    \"picomatch\": \"^2.3.1\",\n    \"punycode\": \"^2.3.1\",\n    \"vscode-languageclient\": \"^8.0.2\",\n    \"vscode-languageserver-textdocument\": \"^1.0.11\",\n    \"vscode-markdown-languageserver\": \"^0.5.0-alpha.10\",\n    \"vscode-uri\": \"^3.0.3\"\n  },\n  \"devDependencies\": {\n    \"@types/dompurify\": \"^3.0.5\",\n    \"@types/lodash.throttle\": \"^4.1.3\",\n    \"@types/markdown-it\": \"12.2.3\",\n    \"@types/picomatch\": \"^2.3.0\",\n    \"@types/vscode-notebook-renderer\": \"^1.60.0\",\n    \"@types/vscode-webview\": \"^1.57.0\",\n    \"@vscode/markdown-it-katex\": \"^1.1.1\",\n    \"lodash.throttle\": \"^4.1.1\",\n    \"vscode-languageserver-types\": \"^3.17.2\",\n    \"vscode-markdown-languageservice\": \"^0.3.0-alpha.3\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/package.nls.json",
    "content": "{\n\t\"displayName\": \"Markdown Language Features\",\n\t\"description\": \"Provides rich language support for Markdown.\",\n\t\"markdown.copyImage.title\": \"Copy Image\",\n\t\"markdown.openImage.title\": \"Open Image\",\n\t\"markdown.preview.breaks.desc\": \"Sets how line-breaks are rendered in the Markdown preview. Setting it to `true` creates a `<br>` for newlines inside paragraphs.\",\n\t\"markdown.preview.linkify\": \"Convert URL-like text to links in the Markdown preview.\",\n\t\"markdown.preview.typographer\": \"Enable some language-neutral replacement and quotes beautification in the Markdown preview.\",\n\t\"markdown.preview.doubleClickToSwitchToEditor.desc\": \"Double-click in the Markdown preview to switch to the editor.\",\n\t\"markdown.preview.fontFamily.desc\": \"Controls the font family used in the Markdown preview.\",\n\t\"markdown.preview.fontSize.desc\": \"Controls the font size in pixels used in the Markdown preview.\",\n\t\"markdown.preview.lineHeight.desc\": \"Controls the line height used in the Markdown preview. This number is relative to the font size.\",\n\t\"markdown.preview.markEditorSelection.desc\": \"Mark the current editor selection in the Markdown preview.\",\n\t\"markdown.preview.scrollEditorWithPreview.desc\": \"When a Markdown preview is scrolled, update the view of the editor.\",\n\t\"markdown.preview.scrollPreviewWithEditor.desc\": \"When a Markdown editor is scrolled, update the view of the preview.\",\n\t\"markdown.preview.title\": \"Open Preview\",\n\t\"markdown.previewSide.title\": \"Open Preview to the Side\",\n\t\"markdown.showLockedPreviewToSide.title\": \"Open Locked Preview to the Side\",\n\t\"markdown.showSource.title\": \"Show Source\",\n\t\"markdown.styles.dec\": \"A list of URLs or local paths to CSS style sheets to use from the Markdown preview. Relative paths are interpreted relative to the folder open in the Explorer. If there is no open folder, they are interpreted relative to the location of the Markdown file. All '\\\\' need to be written as '\\\\\\\\'.\",\n\t\"markdown.showPreviewSecuritySelector.title\": \"Change Preview Security Settings\",\n\t\"markdown.trace.extension.desc\": \"Enable debug logging for the Markdown extension.\",\n\t\"markdown.trace.server.desc\": \"Traces the communication between VS Code and the Markdown language server.\",\n\t\"markdown.server.log.desc\": \"Controls the logging level of the Markdown language server.\",\n\t\"markdown.preview.refresh.title\": \"Refresh Preview\",\n\t\"markdown.preview.toggleLock.title\": \"Toggle Preview Locking\",\n\t\"markdown.findAllFileReferences\": \"Find File References\",\n\t\"markdown.editor.insertLinkFromWorkspace\": \"Insert Link to File in Workspace\",\n\t\"markdown.editor.insertImageFromWorkspace\": \"Insert Image from Workspace\",\n\t\"configuration.markdown.preview.openMarkdownLinks.description\": \"Controls how links to other Markdown files in the Markdown preview should be opened.\",\n\t\"configuration.markdown.preview.openMarkdownLinks.inEditor\": \"Try to open links in the editor.\",\n\t\"configuration.markdown.preview.openMarkdownLinks.inPreview\": \"Try to open links in the Markdown preview.\",\n\t\"configuration.markdown.links.openLocation.description\": \"Controls where links in Markdown files should be opened.\",\n\t\"configuration.markdown.links.openLocation.currentGroup\": \"Open links in the active editor group.\",\n\t\"configuration.markdown.links.openLocation.beside\": \"Open links beside the active editor.\",\n\t\"configuration.markdown.suggest.paths.enabled.description\": \"Enable path suggestions while writing links in Markdown files.\",\n\t\"configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions\": \"Enable suggestions for headers in other Markdown files in the current workspace. Accepting one of these suggestions inserts the full path to header in that file, for example: `[link text](/path/to/file.md#header)`.\",\n\t\"configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.never\": \"Disable workspace header suggestions.\",\n\t\"configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onDoubleHash\": \"Enable workspace header suggestions after typing `##` in a path, for example: `[link text](##`.\",\n\t\"configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onSingleOrDoubleHash\": \"Enable workspace header suggestions after typing either `##` or `#` in a path, for example: `[link text](#` or `[link text](##`.\",\n\t\"configuration.markdown.editor.drop.enabled\": \"Enable dropping files into a Markdown editor while holding Shift. Requires enabling `#editor.dropIntoEditor.enabled#`.\",\n\t\"configuration.markdown.editor.drop.enabled.always\": \"Always insert Markdown links.\",\n\t\"configuration.markdown.editor.drop.enabled.smart\": \"Smartly create Markdown links by default when not dropping into a code block or other special element. Use the drop widget to switch between pasting as plain text or as Markdown links.\",\n\t\"configuration.markdown.editor.drop.enabled.never\": \"Never create Markdown links.\",\n\t\"configuration.markdown.editor.drop.copyIntoWorkspace\": \"Controls if files outside of the workspace that are dropped into a Markdown editor should be copied into the workspace.\\n\\nUse `#markdown.copyFiles.destination#` to configure where copied dropped files should be created\",\n\t\"configuration.markdown.editor.filePaste.enabled\": \"Enable pasting files into a Markdown editor to create Markdown links. Requires enabling `#editor.pasteAs.enabled#`.\",\n\t\"configuration.markdown.editor.filePaste.enabled.always\": \"Always insert Markdown links.\",\n\t\"configuration.markdown.editor.filePaste.enabled.smart\": \"Smartly create Markdown links by default when not pasting into a code block or other special element. Use the paste widget to switch between pasting as plain text or as Markdown links.\",\n\t\"configuration.markdown.editor.filePaste.enabled.never\": \"Never create Markdown links.\",\n\t\"configuration.markdown.editor.filePaste.copyIntoWorkspace\": \"Controls if files outside of the workspace that are pasted into a Markdown editor should be copied into the workspace.\\n\\nUse `#markdown.copyFiles.destination#` to configure where copied files should be created.\",\n\t\"configuration.copyIntoWorkspace.mediaFiles\": \"Try to copy external image and video files into the workspace.\",\n\t\"configuration.copyIntoWorkspace.never\": \"Do not copy external files into the workspace.\",\n\t\"configuration.markdown.editor.pasteUrlAsFormattedLink.enabled\": \"Controls if Markdown links are created when URLs are pasted into a Markdown editor. Requires enabling `#editor.pasteAs.enabled#`.\",\n\t\"configuration.pasteUrlAsFormattedLink.always\": \"Always insert Markdown links.\",\n\t\"configuration.pasteUrlAsFormattedLink.smart\": \"Smartly create Markdown links by default when not pasting into a code block or other special element. Use the paste widget to switch between pasting as plain text or as Markdown links.\",\n\t\"configuration.pasteUrlAsFormattedLink.smartWithSelection\": \"Smartly create Markdown links by default when you have selected text and are not pasting into a code block or other special element. Use the paste widget to switch between pasting as plain text or as Markdown links.\",\n\t\"configuration.pasteUrlAsFormattedLink.never\": \"Never create Markdown links.\",\n\t\"configuration.markdown.validate.enabled.description\": \"Enable all error reporting in Markdown files.\",\n\t\"configuration.markdown.validate.referenceLinks.enabled.description\": \"Validate reference links in Markdown files, for example: `[link][ref]`. Requires enabling `#markdown.validate.enabled#`.\",\n\t\"configuration.markdown.validate.fragmentLinks.enabled.description\": \"Validate fragment links to headers in the current Markdown file, for example: `[link](#header)`. Requires enabling `#markdown.validate.enabled#`.\",\n\t\"configuration.markdown.validate.fileLinks.enabled.description\": \"Validate links to other files in Markdown files, for example `[link](/path/to/file.md)`. This checks that the target files exists. Requires enabling `#markdown.validate.enabled#`.\",\n\t\"configuration.markdown.validate.fileLinks.markdownFragmentLinks.description\": \"Validate the fragment part of links to headers in other files in Markdown files, for example: `[link](/path/to/file.md#header)`. Inherits the setting value from `#markdown.validate.fragmentLinks.enabled#` by default.\",\n\t\"configuration.markdown.validate.ignoredLinks.description\": \"Configure links that should not be validated. For example adding `/about` would not validate the link `[about](/about)`, while the glob `/assets/**/*.svg` would let you skip validation for any link to `.svg` files under the `assets` directory.\",\n\t\"configuration.markdown.validate.unusedLinkDefinitions.description\": \"Validate link definitions that are unused in the current file.\",\n\t\"configuration.markdown.validate.duplicateLinkDefinitions.description\": \"Validate duplicated definitions in the current file.\",\n\t\"configuration.markdown.updateLinksOnFileMove.enabled\": \"Try to update links in Markdown files when a file is renamed/moved in the workspace. Use `#markdown.updateLinksOnFileMove.include#` to configure which files trigger link updates.\",\n\t\"configuration.markdown.updateLinksOnFileMove.enabled.prompt\": \"Prompt on each file move.\",\n\t\"configuration.markdown.updateLinksOnFileMove.enabled.always\": \"Always update links automatically.\",\n\t\"configuration.markdown.updateLinksOnFileMove.enabled.never\": \"Never try to update link and don't prompt.\",\n\t\"configuration.markdown.updateLinksOnFileMove.include\": \"Glob patterns that specifies files that trigger automatic link updates. See `#markdown.updateLinksOnFileMove.enabled#` for details about this feature.\",\n\t\"configuration.markdown.updateLinksOnFileMove.include.property\": \"The glob pattern to match file paths against. Set to true to enable the pattern.\",\n\t\"configuration.markdown.updateLinksOnFileMove.enableForDirectories\": \"Enable updating links when a directory is moved or renamed in the workspace.\",\n\t\"configuration.markdown.occurrencesHighlight.enabled\": \"Enable highlighting link occurrences in the current document.\",\n\t\"configuration.markdown.copyFiles.destination\": {\n\t\t\"message\": \"Configures the path and file name of files created by copy/paste or drag and drop. This is a map of globs that match against a Markdown document path to the destination path where the new file should be created.\\n\\nThe destination path may use the following variables:\\n\\n- `${documentDirName}` — Absolute parent directory path of the Markdown document, e.g. `/Users/me/myProject/docs`.\\n- `${documentRelativeDirName}` — Relative parent directory path of the Markdown document, e.g. `docs`. This is the same as `${documentDirName}` if the file is not part of a workspace.\\n- `${documentFileName}` — The full filename of the Markdown document, e.g. `README.md`.\\n- `${documentBaseName}` — The basename of the Markdown document, e.g. `README`.\\n- `${documentExtName}` — The extension of the Markdown document, e.g. `md`.\\n- `${documentFilePath}` — Absolute path of the Markdown document, e.g. `/Users/me/myProject/docs/README.md`.\\n- `${documentRelativeFilePath}` — Relative path of the Markdown document, e.g. `docs/README.md`. This is the same as `${documentFilePath}` if the file is not part of a workspace.\\n- `${documentWorkspaceFolder}` — The workspace folder for the Markdown document, e.g. `/Users/me/myProject`. This is the same as `${documentDirName}` if the file is not part of a workspace.\\n- `${fileName}` — The file name of the dropped file, e.g. `image.png`.\\n- `${fileExtName}` — The extension of the dropped file, e.g. `png`.\\n- `${unixTime}` — The current Unix timestamp in milliseconds.\",\n\t\t\"comment\": [\n\t\t\t\"This setting is use the user drops or pastes image data into the editor. In this case, VS Code automatically creates a new image file in the workspace containing the dropped/pasted image.\",\n\t\t\t\"It's easier to explain this setting with an example. For example, let's say the setting value was:\",\n\t\t\t\"\",\n\t\t\t\"{ 'docs/*.md': '${documentDirName}/images/${fileName}' }\",\n\t\t\t\"\",\n\t\t\t\"Here the setting is an object mapping from a set of globs to a set of file destinations.\",\n\t\t\t\"The left hand side ('docs/*.md') is a glob that matches against a markdown document. If the glob, matches then we use the right hand side to compute the new file's path and name. The right hand side can also use the special variables document in this setting description.\"\n\t\t]\n\t},\n\t\"configuration.markdown.copyFiles.overwriteBehavior\": \"Controls if files created by drop or paste should overwrite existing files.\",\n\t\"configuration.markdown.copyFiles.overwriteBehavior.nameIncrementally\": \"If a file with the same name already exists, append a number to the file name, for example: `image.png` becomes `image-1.png`.\",\n\t\"configuration.markdown.copyFiles.overwriteBehavior.overwrite\": \"If a file with the same name already exists, overwrite it.\",\n\t\"configuration.markdown.preferredMdPathExtensionStyle\": \"Controls if file extensions (for example `.md`) are added or not for links to Markdown files. This setting is used when file paths are added by tooling such as path completions or file renames.\",\n\t\"configuration.markdown.preferredMdPathExtensionStyle.auto\": \"For existing paths, try to maintain the file extension style. For new paths, add file extensions.\",\n\t\"configuration.markdown.preferredMdPathExtensionStyle.includeExtension\": \"Prefer including the file extension. For example, path completions to a file named `file.md` will insert `file.md`.\",\n\t\"configuration.markdown.preferredMdPathExtensionStyle.removeExtension\": \"Prefer removing the file extension. For example, path completions to a file named `file.md` will insert `file` without the `.md`.\",\n\t\"configuration.markdown.editor.filePaste.videoSnippet\": \"Snippet used when adding videos to Markdown. This snippet can use the following variables:\\n- `${src}` — The resolved path of the video file.\\n- `${title}` — The title used for the video. A snippet placeholder will automatically be created for this variable.\",\n\t\"configuration.markdown.editor.filePaste.audioSnippet\": \"Snippet used when adding audio to Markdown. This snippet can use the following variables:\\n- `${src}` — The resolved path of the audio  file.\\n- `${title}` — The title used for the audio. A snippet placeholder will automatically be created for this variable.\",\n\t\"configuration.markdown.editor.updateLinksOnPaste.enabled\": \"Enable/disable a paste option that updates links and reference in text that is copied and pasted between Markdown editors.\\n\\nTo use this feature, after pasting text that contains updatable links, just click on the Paste Widget and select `Paste and update pasted links`.\",\n\t\"workspaceTrust\": \"Required for loading styles configured in the workspace.\"\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/activeLineMarker.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getElementsForSourceLine } from './scroll-sync';\n\nexport class ActiveLineMarker {\n\tprivate _current: any;\n\n\tonDidChangeTextEditorSelection(line: number, documentVersion: number) {\n\t\tconst { previous } = getElementsForSourceLine(line, documentVersion);\n\t\tthis._update(previous && (previous.codeElement || previous.element));\n\t}\n\n\tprivate _update(before: HTMLElement | undefined) {\n\t\tthis._unmarkActiveElement(this._current);\n\t\tthis._markActiveElement(before);\n\t\tthis._current = before;\n\t}\n\n\tprivate _unmarkActiveElement(element: HTMLElement | undefined) {\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\t\telement.classList.toggle('code-active-line', false);\n\t}\n\n\tprivate _markActiveElement(element: HTMLElement | undefined) {\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\n\t\telement.classList.toggle('code-active-line', true);\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/csp.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { MessagePoster } from './messaging';\nimport { SettingsManager } from './settings';\nimport { getStrings } from './strings';\n\n/**\n * Shows an alert when there is a content security policy violation.\n */\nexport class CspAlerter {\n\tprivate _didShow = false;\n\tprivate _didHaveCspWarning = false;\n\n\tprivate _messaging?: MessagePoster;\n\n\tconstructor(\n\t\tprivate readonly _settingsManager: SettingsManager,\n\t) {\n\t\tdocument.addEventListener('securitypolicyviolation', () => {\n\t\t\tthis._onCspWarning();\n\t\t});\n\n\t\twindow.addEventListener('message', (event) => {\n\t\t\tif (event && event.data && event.data.name === 'vscode-did-block-svg') {\n\t\t\t\tthis._onCspWarning();\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic setPoster(poster: MessagePoster) {\n\t\tthis._messaging = poster;\n\t\tif (this._didHaveCspWarning) {\n\t\t\tthis._showCspWarning();\n\t\t}\n\t}\n\n\tprivate _onCspWarning() {\n\t\tthis._didHaveCspWarning = true;\n\t\tthis._showCspWarning();\n\t}\n\n\tprivate _showCspWarning() {\n\t\tconst strings = getStrings();\n\t\tconst settings = this._settingsManager.settings;\n\n\t\tif (this._didShow || settings.disableSecurityWarnings || !this._messaging) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didShow = true;\n\n\t\tconst notification = document.createElement('a');\n\t\tnotification.innerText = strings.cspAlertMessageText;\n\t\tnotification.setAttribute('id', 'code-csp-warning');\n\t\tnotification.setAttribute('title', strings.cspAlertMessageTitle);\n\n\t\tnotification.setAttribute('role', 'button');\n\t\tnotification.setAttribute('aria-label', strings.cspAlertMessageLabel);\n\t\tnotification.onclick = () => {\n\t\t\tthis._messaging!.postMessage('showPreviewSecuritySelector', { source: settings.source });\n\t\t};\n\t\tdocument.body.appendChild(notification);\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/events.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function onceDocumentLoaded(f: () => void) {\n\tif (document.readyState === 'loading' || document.readyState as string === 'uninitialized') {\n\t\tdocument.addEventListener('DOMContentLoaded', f);\n\t} else {\n\t\tf();\n\t}\n}"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ActiveLineMarker } from './activeLineMarker';\nimport { onceDocumentLoaded } from './events';\nimport { createPosterForVsCode } from './messaging';\nimport { getEditorLineNumberForPageOffset, scrollToRevealSourceLine, getLineElementForFragment } from './scroll-sync';\nimport { SettingsManager, getData, getRawData } from './settings';\nimport throttle = require('lodash.throttle');\nimport morphdom from 'morphdom';\nimport type { ToWebviewMessage } from '../types/previewMessaging';\nimport { isOfScheme, Schemes } from '../src/util/schemes';\n\nlet scrollDisabledCount = 0;\n\nconst marker = new ActiveLineMarker();\nconst settings = new SettingsManager();\n\nlet documentVersion = 0;\nlet documentResource = settings.settings.source;\n\nconst vscode = acquireVsCodeApi();\n\nconst originalState = vscode.getState() ?? {} as any;\nconst state = {\n\t...originalState,\n\t...getData<any>('data-state')\n};\n\nif (typeof originalState.scrollProgress !== 'undefined' && originalState?.resource !== state.resource) {\n\tstate.scrollProgress = 0;\n}\n\n// Make sure to sync VS Code state here\nvscode.setState(state);\n\nconst messaging = createPosterForVsCode(vscode, settings);\n\nwindow.cspAlerter.setPoster(messaging);\nwindow.styleLoadingMonitor.setPoster(messaging);\n\n\nfunction doAfterImagesLoaded(cb: () => void) {\n\tconst imgElements = document.getElementsByTagName('img');\n\tif (imgElements.length > 0) {\n\t\tconst ps = Array.from(imgElements, e => {\n\t\t\tif (e.complete) {\n\t\t\t\treturn Promise.resolve();\n\t\t\t} else {\n\t\t\t\treturn new Promise<void>((resolve) => {\n\t\t\t\t\te.addEventListener('load', () => resolve());\n\t\t\t\t\te.addEventListener('error', () => resolve());\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tPromise.all(ps).then(() => setTimeout(cb, 0));\n\t} else {\n\t\tsetTimeout(cb, 0);\n\t}\n}\n\nonceDocumentLoaded(() => {\n\t// Load initial html\n\tconst htmlParser = new DOMParser();\n\tconst markDownHtml = htmlParser.parseFromString(\n\t\tgetRawData('data-initial-md-content'),\n\t\t'text/html'\n\t);\n\n\tconst newElements = [...markDownHtml.body.children];\n\tdocument.body.append(...newElements);\n\tfor (const el of newElements) {\n\t\tif (el instanceof HTMLElement) {\n\t\t\tdomEval(el);\n\t\t}\n\t}\n\n\t// Restore\n\tconst scrollProgress = state.scrollProgress;\n\taddImageContexts();\n\tif (typeof scrollProgress === 'number' && !settings.settings.fragment) {\n\t\tdoAfterImagesLoaded(() => {\n\t\t\tscrollDisabledCount += 1;\n\t\t\t// Always set scroll of at least 1 to prevent VS Code's webview code from auto scrolling us\n\t\t\tconst scrollToY = Math.max(1, scrollProgress * document.body.clientHeight);\n\t\t\twindow.scrollTo(0, scrollToY);\n\t\t});\n\t\treturn;\n\t}\n\n\tif (settings.settings.scrollPreviewWithEditor) {\n\t\tdoAfterImagesLoaded(() => {\n\t\t\t// Try to scroll to fragment if available\n\t\t\tif (settings.settings.fragment) {\n\t\t\t\tlet fragment: string;\n\t\t\t\ttry {\n\t\t\t\t\tfragment = encodeURIComponent(settings.settings.fragment);\n\t\t\t\t} catch {\n\t\t\t\t\tfragment = settings.settings.fragment;\n\t\t\t\t}\n\t\t\t\tstate.fragment = undefined;\n\t\t\t\tvscode.setState(state);\n\n\t\t\t\tconst element = getLineElementForFragment(fragment, documentVersion);\n\t\t\t\tif (element) {\n\t\t\t\t\tscrollDisabledCount += 1;\n\t\t\t\t\tscrollToRevealSourceLine(element.line, documentVersion, settings);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isNaN(settings.settings.line!)) {\n\t\t\t\t\tscrollDisabledCount += 1;\n\t\t\t\t\tscrollToRevealSourceLine(settings.settings.line!, documentVersion, settings);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (typeof settings.settings.selectedLine === 'number') {\n\t\tmarker.onDidChangeTextEditorSelection(settings.settings.selectedLine, documentVersion);\n\t}\n});\n\nconst onUpdateView = (() => {\n\tconst doScroll = throttle((line: number) => {\n\t\tscrollDisabledCount += 1;\n\t\tdoAfterImagesLoaded(() => scrollToRevealSourceLine(line, documentVersion, settings));\n\t}, 50);\n\n\treturn (line: number) => {\n\t\tif (!isNaN(line)) {\n\t\t\tstate.line = line;\n\n\t\t\tdoScroll(line);\n\t\t}\n\t};\n})();\n\nwindow.addEventListener('resize', () => {\n\tscrollDisabledCount += 1;\n\tupdateScrollProgress();\n}, true);\n\nfunction addImageContexts() {\n\tconst images = document.getElementsByTagName('img');\n\tlet idNumber = 0;\n\tfor (const img of images) {\n\t\timg.id = 'image-' + idNumber;\n\t\tidNumber += 1;\n\t\tconst imageSource = img.getAttribute('data-src');\n\t\tconst isLocalFile = imageSource && !(isOfScheme(Schemes.http, imageSource) || isOfScheme(Schemes.https, imageSource));\n\t\tconst webviewSection = isLocalFile ? 'localImage' : 'image';\n\t\timg.setAttribute('data-vscode-context', JSON.stringify({ webviewSection, id: img.id, 'preventDefaultContextMenuItems': true, resource: documentResource, imageSource }));\n\t}\n}\n\nasync function copyImage(image: HTMLImageElement, retries = 5) {\n\tif (!document.hasFocus() && retries > 0) {\n\t\t// copyImage is called at the same time as webview.reveal, which means this function is running whilst the webview is gaining focus.\n\t\t// Since navigator.clipboard.write requires the document to be focused, we need to wait for focus.\n\t\t// We cannot use a listener, as there is a high chance the focus is gained during the setup of the listener resulting in us missing it.\n\t\tsetTimeout(() => { copyImage(image, retries - 1); }, 20);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait navigator.clipboard.write([new ClipboardItem({\n\t\t\t'image/png': new Promise((resolve) => {\n\t\t\t\tconst canvas = document.createElement('canvas');\n\t\t\t\tif (canvas !== null) {\n\t\t\t\t\tcanvas.width = image.naturalWidth;\n\t\t\t\t\tcanvas.height = image.naturalHeight;\n\t\t\t\t\tconst context = canvas.getContext('2d');\n\t\t\t\t\tcontext?.drawImage(image, 0, 0);\n\t\t\t\t}\n\t\t\t\tcanvas.toBlob((blob) => {\n\t\t\t\t\tif (blob) {\n\t\t\t\t\t\tresolve(blob);\n\t\t\t\t\t}\n\t\t\t\t\tcanvas.remove();\n\t\t\t\t}, 'image/png');\n\t\t\t})\n\t\t})]);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\tconst selection = window.getSelection();\n\t\tif (!selection) {\n\t\t\tawait navigator.clipboard.writeText(image.getAttribute('data-src') ?? image.src);\n\t\t\treturn;\n\t\t}\n\t\tselection.removeAllRanges();\n\t\tconst range = document.createRange();\n\t\trange.selectNode(image);\n\t\tselection.addRange(range);\n\t\tdocument.execCommand('copy');\n\t\tselection.removeAllRanges();\n\t}\n}\n\nwindow.addEventListener('message', async event => {\n\tconst data = event.data as ToWebviewMessage.Type;\n\tswitch (data.type) {\n\t\tcase 'copyImage': {\n\t\t\tconst img = document.getElementById(data.id);\n\t\t\tif (img instanceof HTMLImageElement) {\n\t\t\t\tcopyImage(img);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcase 'onDidChangeTextEditorSelection':\n\t\t\tif (data.source === documentResource) {\n\t\t\t\tmarker.onDidChangeTextEditorSelection(data.line, documentVersion);\n\t\t\t}\n\t\t\treturn;\n\n\t\tcase 'updateView':\n\t\t\tif (data.source === documentResource) {\n\t\t\t\tonUpdateView(data.line);\n\t\t\t}\n\t\t\treturn;\n\n\t\tcase 'updateContent': {\n\t\t\tconst root = document.querySelector('.markdown-body')!;\n\n\t\t\tconst parser = new DOMParser();\n\t\t\tconst newContent = parser.parseFromString(data.content, 'text/html'); // CodeQL [SM03712] This renderers content from the workspace into the Markdown preview. Webviews (and the markdown preview) have many other security measures in place to make this safe\n\n\t\t\t// Strip out meta http-equiv tags\n\t\t\tfor (const metaElement of Array.from(newContent.querySelectorAll('meta'))) {\n\t\t\t\tif (metaElement.hasAttribute('http-equiv')) {\n\t\t\t\t\tmetaElement.remove();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (data.source !== documentResource) {\n\t\t\t\tdocumentResource = data.source;\n\t\t\t\tconst newBody = newContent.querySelector('.markdown-body')!;\n\t\t\t\troot.replaceWith(newBody);\n\t\t\t\tdomEval(newBody);\n\t\t\t} else {\n\t\t\t\tconst newRoot = newContent.querySelector('.markdown-body')!;\n\n\t\t\t\t// Move styles to head\n\t\t\t\t// This prevents an ugly flash of unstyled content\n\t\t\t\tconst styles = newRoot.querySelectorAll('link');\n\t\t\t\tfor (const style of styles) {\n\t\t\t\t\tstyle.remove();\n\t\t\t\t}\n\t\t\t\tnewRoot.prepend(...styles);\n\n\t\t\t\tmorphdom(root, newRoot, {\n\t\t\t\t\tchildrenOnly: true,\n\t\t\t\t\tonBeforeElUpdated: (fromEl: Element, toEl: Element) => {\n\t\t\t\t\t\tif (areNodesEqual(fromEl, toEl)) {\n\t\t\t\t\t\t\t// areEqual doesn't look at `data-line` so copy those over manually\n\t\t\t\t\t\t\tconst fromLines = fromEl.querySelectorAll('[data-line]');\n\t\t\t\t\t\t\tconst toLines = toEl.querySelectorAll('[data-line]');\n\t\t\t\t\t\t\tif (fromLines.length !== toLines.length) {\n\t\t\t\t\t\t\t\tconsole.log('unexpected line number change');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (let i = 0; i < fromLines.length; ++i) {\n\t\t\t\t\t\t\t\tconst fromChild = fromLines[i];\n\t\t\t\t\t\t\t\tconst toChild = toLines[i];\n\t\t\t\t\t\t\t\tif (toChild) {\n\t\t\t\t\t\t\t\t\tfromChild.setAttribute('data-line', toChild.getAttribute('data-line')!);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fromEl.tagName === 'DETAILS' && toEl.tagName === 'DETAILS') {\n\t\t\t\t\t\t\tif (fromEl.hasAttribute('open')) {\n\t\t\t\t\t\t\t\ttoEl.setAttribute('open', '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\taddChild: (parentNode: Node, childNode: Node) => {\n\t\t\t\t\t\tparentNode.appendChild(childNode);\n\t\t\t\t\t\tif (childNode instanceof HTMLElement) {\n\t\t\t\t\t\t\tdomEval(childNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} as any);\n\t\t\t}\n\n\t\t\t++documentVersion;\n\n\t\t\twindow.dispatchEvent(new CustomEvent('vscode.markdown.updateContent'));\n\t\t\taddImageContexts();\n\t\t\tbreak;\n\t\t}\n\t}\n}, false);\n\n\n\ndocument.addEventListener('dblclick', event => {\n\tif (!settings.settings.doubleClickToSwitchToEditor) {\n\t\treturn;\n\t}\n\n\t// Ignore clicks on links\n\tfor (let node = event.target as HTMLElement; node; node = node.parentNode as HTMLElement) {\n\t\tif (node.tagName === 'A') {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst offset = event.pageY;\n\tconst line = getEditorLineNumberForPageOffset(offset, documentVersion);\n\tif (typeof line === 'number' && !isNaN(line)) {\n\t\tmessaging.postMessage('didClick', { line: Math.floor(line) });\n\t}\n});\n\nconst passThroughLinkSchemes = ['http:', 'https:', 'mailto:', 'vscode:', 'vscode-insiders:'];\n\ndocument.addEventListener('click', event => {\n\tif (!event) {\n\t\treturn;\n\t}\n\n\tlet node: any = event.target;\n\twhile (node) {\n\t\tif (node.tagName && node.tagName === 'A' && node.href) {\n\t\t\tif (node.getAttribute('href').startsWith('#')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet hrefText = node.getAttribute('data-href');\n\t\t\tif (!hrefText) {\n\t\t\t\threfText = node.getAttribute('href');\n\t\t\t\t// Pass through known schemes\n\t\t\t\tif (passThroughLinkSchemes.some(scheme => hrefText.startsWith(scheme))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If original link doesn't look like a url, delegate back to VS Code to resolve\n\t\t\tif (!/^[a-z\\-]+:/i.test(hrefText)) {\n\t\t\t\tmessaging.postMessage('openLink', { href: hrefText });\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n}, true);\n\nwindow.addEventListener('scroll', throttle(() => {\n\tupdateScrollProgress();\n\n\tif (scrollDisabledCount > 0) {\n\t\tscrollDisabledCount -= 1;\n\t} else {\n\t\tconst line = getEditorLineNumberForPageOffset(window.scrollY, documentVersion);\n\t\tif (typeof line === 'number' && !isNaN(line)) {\n\t\t\tmessaging.postMessage('revealLine', { line });\n\t\t}\n\t}\n}, 50));\n\nfunction updateScrollProgress() {\n\tstate.scrollProgress = window.scrollY / document.body.clientHeight;\n\tvscode.setState(state);\n}\n\n\n/**\n * Compares two nodes for morphdom to see if they are equal.\n *\n * This skips some attributes that should not cause equality to fail.\n */\nfunction areNodesEqual(a: Element, b: Element): boolean {\n\tconst skippedAttrs = [\n\t\t'open', // for details\n\t];\n\n\tif (a.isEqualNode(b)) {\n\t\treturn true;\n\t}\n\n\tif (a.tagName !== b.tagName || a.textContent !== b.textContent) {\n\t\treturn false;\n\t}\n\n\tconst aAttrs = [...a.attributes].filter(attr => !skippedAttrs.includes(attr.name));\n\tconst bAttrs = [...b.attributes].filter(attr => !skippedAttrs.includes(attr.name));\n\tif (aAttrs.length !== bAttrs.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < aAttrs.length; ++i) {\n\t\tconst aAttr = aAttrs[i];\n\t\tconst bAttr = bAttrs[i];\n\t\tif (aAttr.name !== bAttr.name) {\n\t\t\treturn false;\n\t\t}\n\t\tif (aAttr.value !== bAttr.value && aAttr.name !== 'data-line') {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tconst aChildren = Array.from(a.children);\n\tconst bChildren = Array.from(b.children);\n\n\treturn aChildren.length === bChildren.length && aChildren.every((x, i) => areNodesEqual(x, bChildren[i]));\n}\n\n\nfunction domEval(el: Element): void {\n\tconst preservedScriptAttributes: (keyof HTMLScriptElement)[] = [\n\t\t'type', 'src', 'nonce', 'noModule', 'async',\n\t];\n\n\tconst scriptNodes = el.tagName === 'SCRIPT' ? [el] : Array.from(el.getElementsByTagName('script'));\n\n\tfor (const node of scriptNodes) {\n\t\tif (!(node instanceof HTMLElement)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst scriptTag = document.createElement('script');\n\t\tconst trustedScript = node.innerText;\n\t\tscriptTag.text = trustedScript as string;\n\t\tfor (const key of preservedScriptAttributes) {\n\t\t\tconst val = node.getAttribute && node.getAttribute(key);\n\t\t\tif (val) {\n\t\t\t\tscriptTag.setAttribute(key, val as any);\n\t\t\t}\n\t\t}\n\n\t\tnode.insertAdjacentElement('afterend', scriptTag);\n\t\tnode.remove();\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/loading.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { MessagePoster } from './messaging';\n\nexport class StyleLoadingMonitor {\n\tprivate _unloadedStyles: string[] = [];\n\tprivate _finishedLoading: boolean = false;\n\n\tprivate _poster?: MessagePoster;\n\n\tconstructor() {\n\t\tconst onStyleLoadError = (event: any) => {\n\t\t\tconst source = event.target.dataset.source;\n\t\t\tthis._unloadedStyles.push(source);\n\t\t};\n\n\t\twindow.addEventListener('DOMContentLoaded', () => {\n\t\t\tfor (const link of document.getElementsByClassName('code-user-style') as HTMLCollectionOf<HTMLElement>) {\n\t\t\t\tif (link.dataset.source) {\n\t\t\t\t\tlink.onerror = onStyleLoadError;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow.addEventListener('load', () => {\n\t\t\tif (!this._unloadedStyles.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._finishedLoading = true;\n\t\t\tthis._poster?.postMessage('previewStyleLoadError', { unloadedStyles: this._unloadedStyles });\n\t\t});\n\t}\n\n\tpublic setPoster(poster: MessagePoster): void {\n\t\tthis._poster = poster;\n\t\tif (this._finishedLoading) {\n\t\t\tposter.postMessage('previewStyleLoadError', { unloadedStyles: this._unloadedStyles });\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/messaging.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { SettingsManager } from './settings';\nimport type { FromWebviewMessage } from '../types/previewMessaging';\n\nexport interface MessagePoster {\n\t/**\n\t * Post a message to the markdown extension\n\t */\n\tpostMessage<T extends FromWebviewMessage.Type>(\n\t\ttype: T['type'],\n\t\tbody: Omit<T, 'source' | 'type'>\n\t): void;\n}\n\nexport const createPosterForVsCode = (vscode: any, settingsManager: SettingsManager): MessagePoster => {\n\treturn {\n\t\tpostMessage<T extends FromWebviewMessage.Type>(\n\t\t\ttype: T['type'],\n\t\t\tbody: Omit<T, 'source' | 'type'>\n\t\t): void {\n\t\t\tvscode.postMessage({\n\t\t\t\ttype,\n\t\t\t\tsource: settingsManager.settings!.source,\n\t\t\t\t...body\n\t\t\t});\n\t\t}\n\t};\n};\n\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/pre.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CspAlerter } from './csp';\nimport { StyleLoadingMonitor } from './loading';\nimport { SettingsManager } from './settings';\n\ndeclare global {\n\tinterface Window {\n\t\tcspAlerter: CspAlerter;\n\t\tstyleLoadingMonitor: StyleLoadingMonitor;\n\t}\n}\n\nwindow.cspAlerter = new CspAlerter(new SettingsManager());\nwindow.styleLoadingMonitor = new StyleLoadingMonitor();\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/scroll-sync.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { SettingsManager } from './settings';\n\nconst codeLineClass = 'code-line';\n\n\nexport class CodeLineElement {\n\tprivate readonly _detailParentElements: readonly HTMLDetailsElement[];\n\n\tconstructor(\n\t\treadonly element: HTMLElement,\n\t\treadonly line: number,\n\t\treadonly codeElement?: HTMLElement,\n\t) {\n\t\tthis._detailParentElements = Array.from(getParentsWithTagName<HTMLDetailsElement>(element, 'DETAILS'));\n\t}\n\n\tget isVisible(): boolean {\n\t\treturn !this._detailParentElements.some(x => !x.open);\n\t}\n}\n\nconst getCodeLineElements = (() => {\n\tlet cachedElements: CodeLineElement[] | undefined;\n\tlet cachedVersion = -1;\n\treturn (documentVersion: number) => {\n\t\tif (!cachedElements || documentVersion !== cachedVersion) {\n\t\t\tcachedVersion = documentVersion;\n\t\t\tcachedElements = [new CodeLineElement(document.body, -1)];\n\t\t\tfor (const element of document.getElementsByClassName(codeLineClass)) {\n\t\t\t\tif (!(element instanceof HTMLElement)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst line = +element.getAttribute('data-line')!;\n\t\t\t\tif (isNaN(line)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\n\t\t\t\tif (element.tagName === 'CODE' && element.parentElement && element.parentElement.tagName === 'PRE') {\n\t\t\t\t\t// Fenced code blocks are a special case since the `code-line` can only be marked on\n\t\t\t\t\t// the `<code>` element and not the parent `<pre>` element.\n\t\t\t\t\tcachedElements.push(new CodeLineElement(element.parentElement, line, element));\n\t\t\t\t} else if (element.tagName === 'UL' || element.tagName === 'OL') {\n\t\t\t\t\t// Skip adding list elements since the first child has the same code line (and should be preferred)\n\t\t\t\t} else {\n\t\t\t\t\tcachedElements.push(new CodeLineElement(element, line));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cachedElements;\n\t};\n})();\n\n/**\n * Find the html elements that map to a specific target line in the editor.\n *\n * If an exact match, returns a single element. If the line is between elements,\n * returns the element prior to and the element after the given line.\n */\nexport function getElementsForSourceLine(targetLine: number, documentVersion: number): { previous: CodeLineElement; next?: CodeLineElement } {\n\tconst lineNumber = Math.floor(targetLine);\n\tconst lines = getCodeLineElements(documentVersion);\n\tlet previous = lines[0] || null;\n\tfor (const entry of lines) {\n\t\tif (entry.line === lineNumber) {\n\t\t\treturn { previous: entry, next: undefined };\n\t\t} else if (entry.line > lineNumber) {\n\t\t\treturn { previous, next: entry };\n\t\t}\n\t\tprevious = entry;\n\t}\n\treturn { previous };\n}\n\n/**\n * Find the html elements that are at a specific pixel offset on the page.\n */\nexport function getLineElementsAtPageOffset(offset: number, documentVersion: number): { previous: CodeLineElement; next?: CodeLineElement } {\n\tconst lines = getCodeLineElements(documentVersion).filter(x => x.isVisible);\n\tconst position = offset - window.scrollY;\n\tlet lo = -1;\n\tlet hi = lines.length - 1;\n\twhile (lo + 1 < hi) {\n\t\tconst mid = Math.floor((lo + hi) / 2);\n\t\tconst bounds = getElementBounds(lines[mid]);\n\t\tif (bounds.top + bounds.height >= position) {\n\t\t\thi = mid;\n\t\t}\n\t\telse {\n\t\t\tlo = mid;\n\t\t}\n\t}\n\tconst hiElement = lines[hi];\n\tconst hiBounds = getElementBounds(hiElement);\n\tif (hi >= 1 && hiBounds.top > position) {\n\t\tconst loElement = lines[lo];\n\t\treturn { previous: loElement, next: hiElement };\n\t}\n\tif (hi > 1 && hi < lines.length && hiBounds.top + hiBounds.height > position) {\n\t\treturn { previous: hiElement, next: lines[hi + 1] };\n\t}\n\treturn { previous: hiElement };\n}\n\nfunction getElementBounds({ element }: CodeLineElement): { top: number; height: number } {\n\tconst myBounds = element.getBoundingClientRect();\n\n\t// Some code line elements may contain other code line elements.\n\t// In those cases, only take the height up to that child.\n\tconst codeLineChild = element.querySelector(`.${codeLineClass}`);\n\tif (codeLineChild) {\n\t\tconst childBounds = codeLineChild.getBoundingClientRect();\n\t\tconst height = Math.max(1, (childBounds.top - myBounds.top));\n\t\treturn {\n\t\t\ttop: myBounds.top,\n\t\t\theight: height\n\t\t};\n\t}\n\n\treturn myBounds;\n}\n\n/**\n * Attempt to reveal the element for a source line in the editor.\n */\nexport function scrollToRevealSourceLine(line: number, documentVersion: number, settingsManager: SettingsManager) {\n\tif (!settingsManager.settings?.scrollPreviewWithEditor) {\n\t\treturn;\n\t}\n\n\tif (line <= 0) {\n\t\twindow.scroll(window.scrollX, 0);\n\t\treturn;\n\t}\n\n\tconst { previous, next } = getElementsForSourceLine(line, documentVersion);\n\tif (!previous) {\n\t\treturn;\n\t}\n\tlet scrollTo = 0;\n\tconst rect = getElementBounds(previous);\n\tconst previousTop = rect.top;\n\tif (next && next.line !== previous.line) {\n\t\t// Between two elements. Go to percentage offset between them.\n\t\tconst betweenProgress = (line - previous.line) / (next.line - previous.line);\n\t\tconst previousEnd = previousTop + rect.height;\n\t\tconst betweenHeight = next.element.getBoundingClientRect().top - previousEnd;\n\t\tscrollTo = previousEnd + betweenProgress * betweenHeight;\n\t} else {\n\t\tconst progressInElement = line - Math.floor(line);\n\t\tscrollTo = previousTop + (rect.height * progressInElement);\n\t}\n\tscrollTo = Math.abs(scrollTo) < 1 ? Math.sign(scrollTo) : scrollTo;\n\twindow.scroll(window.scrollX, Math.max(1, window.scrollY + scrollTo));\n}\n\nexport function getEditorLineNumberForPageOffset(offset: number, documentVersion: number): number | null {\n\tconst { previous, next } = getLineElementsAtPageOffset(offset, documentVersion);\n\tif (previous) {\n\t\tif (previous.line < 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst previousBounds = getElementBounds(previous);\n\t\tconst offsetFromPrevious = (offset - window.scrollY - previousBounds.top);\n\t\tif (next) {\n\t\t\tconst progressBetweenElements = offsetFromPrevious / (getElementBounds(next).top - previousBounds.top);\n\t\t\treturn previous.line + progressBetweenElements * (next.line - previous.line);\n\t\t} else {\n\t\t\tconst progressWithinElement = offsetFromPrevious / (previousBounds.height);\n\t\t\treturn previous.line + progressWithinElement;\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Try to find the html element by using a fragment id\n */\nexport function getLineElementForFragment(fragment: string, documentVersion: number): CodeLineElement | undefined {\n\treturn getCodeLineElements(documentVersion).find((element) => {\n\t\treturn element.element.id === fragment;\n\t});\n}\n\nfunction* getParentsWithTagName<T extends HTMLElement>(element: HTMLElement, tagName: string): Iterable<T> {\n\tfor (let parent = element.parentElement; parent; parent = parent.parentElement) {\n\t\tif (parent.tagName === tagName) {\n\t\t\tyield parent as T;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/settings.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface PreviewSettings {\n\treadonly source: string;\n\treadonly line?: number;\n\treadonly fragment?: string;\n\treadonly selectedLine?: number;\n\n\treadonly scrollPreviewWithEditor?: boolean;\n\treadonly scrollEditorWithPreview: boolean;\n\treadonly disableSecurityWarnings: boolean;\n\treadonly doubleClickToSwitchToEditor: boolean;\n\treadonly webviewResourceRoot: string;\n}\n\nexport function getRawData(key: string): string {\n\tconst element = document.getElementById('vscode-markdown-preview-data');\n\tif (element) {\n\t\tconst data = element.getAttribute(key);\n\t\tif (data) {\n\t\t\treturn data;\n\t\t}\n\t}\n\n\tthrow new Error(`Could not load data for ${key}`);\n}\n\nexport function getData<T = {}>(key: string): T {\n\treturn JSON.parse(getRawData(key));\n}\n\nexport class SettingsManager {\n\tprivate _settings: PreviewSettings = getData('data-settings');\n\n\tpublic get settings(): PreviewSettings {\n\t\treturn this._settings;\n\t}\n\n\tpublic updateSettings(newSettings: PreviewSettings) {\n\t\tthis._settings = newSettings;\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/strings.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function getStrings(): { [key: string]: string } {\n\tconst store = document.getElementById('vscode-markdown-preview-data');\n\tif (store) {\n\t\tconst data = store.getAttribute('data-strings');\n\t\tif (data) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\t}\n\tthrow new Error('Could not load strings');\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/preview-src/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist/\",\n\t\t\"jsx\": \"react\",\n\t\t\"esModuleInterop\": true,\n\t\t\"lib\": [\n\t\t\t\"es2018\",\n\t\t\t\"DOM\",\n\t\t\t\"DOM.Iterable\"\n\t\t]\n\t},\n\t\"typeAcquisition\": {\n\t\t\"include\": [\n\t\t\t\"@types/vscode-webview\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/schemas/package.schema.json",
    "content": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"contributes\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"markdown.previewStyles\": {\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"description\": \"Contributed CSS files that change the look or layout of the Markdown preview\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Extension relative path to a css file\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"markdown.previewScripts\": {\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"description\": \"Contributed scripts that are executed in the Markdown preview\",\n\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Extension relative path to a JavaScript file\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"markdown.markdownItPlugins\": {\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"description\": \"Does this extension contribute a markdown-it plugin?\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/client/client.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { BaseLanguageClient, LanguageClientOptions, NotebookDocumentSyncRegistrationType, Range, TextEdit } from 'vscode-languageclient';\nimport { IMdParser } from '../markdownEngine';\nimport { IDisposable } from '../util/dispose';\nimport { looksLikeMarkdownPath, markdownFileExtensions } from '../util/file';\nimport { FileWatcherManager } from './fileWatchingManager';\nimport { InMemoryDocument } from './inMemoryDocument';\nimport * as proto from './protocol';\nimport { VsCodeMdWorkspace } from './workspace';\n\nexport type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => BaseLanguageClient;\n\nexport class MdLanguageClient implements IDisposable {\n\n\tconstructor(\n\t\tprivate readonly _client: BaseLanguageClient,\n\t\tprivate readonly _workspace: VsCodeMdWorkspace,\n\t) { }\n\n\tdispose(): void {\n\t\tthis._client.stop();\n\t\tthis._workspace.dispose();\n\t}\n\n\tresolveLinkTarget(linkText: string, uri: vscode.Uri): Promise<proto.ResolvedDocumentLinkTarget> {\n\t\treturn this._client.sendRequest(proto.resolveLinkTarget, { linkText, uri: uri.toString() });\n\t}\n\n\tgetEditForFileRenames(files: ReadonlyArray<{ oldUri: string; newUri: string }>, token: vscode.CancellationToken) {\n\t\treturn this._client.sendRequest(proto.getEditForFileRenames, files, token);\n\t}\n\n\tgetReferencesToFileInWorkspace(resource: vscode.Uri, token: vscode.CancellationToken) {\n\t\treturn this._client.sendRequest(proto.getReferencesToFileInWorkspace, { uri: resource.toString() }, token);\n\t}\n\n\tprepareUpdatePastedLinks(doc: vscode.Uri, ranges: readonly vscode.Range[], token: vscode.CancellationToken) {\n\t\treturn this._client.sendRequest(proto.prepareUpdatePastedLinks, {\n\t\t\turi: doc.toString(),\n\t\t\tranges: ranges.map(range => Range.create(range.start.line, range.start.character, range.end.line, range.end.character)),\n\t\t}, token);\n\t}\n\n\tgetUpdatePastedLinksEdit(pastingIntoDoc: vscode.Uri, edits: readonly vscode.TextEdit[], metadata: string, token: vscode.CancellationToken) {\n\t\treturn this._client.sendRequest(proto.getUpdatePastedLinksEdit, {\n\t\t\tmetadata,\n\t\t\tpasteIntoDoc: pastingIntoDoc.toString(),\n\t\t\tedits: edits.map(edit => TextEdit.replace(edit.range, edit.newText)),\n\t\t}, token);\n\t}\n}\n\nexport async function startClient(factory: LanguageClientConstructor, parser: IMdParser): Promise<MdLanguageClient> {\n\n\tconst mdFileGlob = `**/*.{${markdownFileExtensions.join(',')}}`;\n\n\tconst clientOptions: LanguageClientOptions = {\n\t\tdocumentSelector: [{ language: 'markdown' }],\n\t\tsynchronize: {\n\t\t\tconfigurationSection: ['markdown'],\n\t\t\tfileEvents: vscode.workspace.createFileSystemWatcher(mdFileGlob),\n\t\t},\n\t\tinitializationOptions: {\n\t\t\tmarkdownFileExtensions,\n\t\t\ti10lLocation: vscode.l10n.uri?.toJSON(),\n\t\t},\n\t\tdiagnosticPullOptions: {\n\t\t\tonChange: true,\n\t\t\tonTabs: true,\n\t\t\tmatch(_documentSelector, resource) {\n\t\t\t\treturn looksLikeMarkdownPath(resource);\n\t\t\t},\n\t\t},\n\t\tmarkdown: {\n\t\t\tsupportHtml: true,\n\t\t}\n\t};\n\n\tconst client = factory('markdown', vscode.l10n.t(\"Markdown Language Server\"), clientOptions);\n\n\tclient.registerProposedFeatures();\n\n\tconst notebookFeature = client.getFeature(NotebookDocumentSyncRegistrationType.method);\n\tif (notebookFeature !== undefined) {\n\t\tnotebookFeature.register({\n\t\t\tid: String(Date.now()),\n\t\t\tregisterOptions: {\n\t\t\t\tnotebookSelector: [{\n\t\t\t\t\tnotebook: '*',\n\t\t\t\t\tcells: [{ language: 'markdown' }]\n\t\t\t\t}]\n\t\t\t}\n\t\t});\n\t}\n\n\tconst workspace = new VsCodeMdWorkspace();\n\n\tclient.onRequest(proto.parse, async (e) => {\n\t\tconst uri = vscode.Uri.parse(e.uri);\n\t\tif (typeof e.text === 'string') {\n\t\t\treturn parser.tokenize(new InMemoryDocument(uri, e.text, -1));\n\t\t} else {\n\t\t\tconst doc = await workspace.getOrLoadMarkdownDocument(uri);\n\t\t\tif (doc) {\n\t\t\t\treturn parser.tokenize(doc);\n\t\t\t} else {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\t});\n\n\tclient.onRequest(proto.fs_readFile, async (e): Promise<number[]> => {\n\t\tconst uri = vscode.Uri.parse(e.uri);\n\t\treturn Array.from(await vscode.workspace.fs.readFile(uri));\n\t});\n\n\tclient.onRequest(proto.fs_stat, async (e): Promise<{ isDirectory: boolean } | undefined> => {\n\t\tconst uri = vscode.Uri.parse(e.uri);\n\t\ttry {\n\t\t\tconst stat = await vscode.workspace.fs.stat(uri);\n\t\t\treturn { isDirectory: stat.type === vscode.FileType.Directory };\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t});\n\n\tclient.onRequest(proto.fs_readDirectory, async (e): Promise<[string, { isDirectory: boolean }][]> => {\n\t\tconst uri = vscode.Uri.parse(e.uri);\n\t\tconst result = await vscode.workspace.fs.readDirectory(uri);\n\t\treturn result.map(([name, type]) => [name, { isDirectory: type === vscode.FileType.Directory }]);\n\t});\n\n\tclient.onRequest(proto.findMarkdownFilesInWorkspace, async (): Promise<string[]> => {\n\t\treturn (await vscode.workspace.findFiles(mdFileGlob, '**/node_modules/**')).map(x => x.toString());\n\t});\n\n\tconst watchers = new FileWatcherManager();\n\n\tclient.onRequest(proto.fs_watcher_create, async (params): Promise<void> => {\n\t\tconst id = params.id;\n\t\tconst uri = vscode.Uri.parse(params.uri);\n\n\t\tconst sendWatcherChange = (kind: 'create' | 'change' | 'delete') => {\n\t\t\tclient.sendRequest(proto.fs_watcher_onChange, { id, uri: params.uri, kind });\n\t\t};\n\n\t\twatchers.create(id, uri, params.watchParentDirs, {\n\t\t\tcreate: params.options.ignoreCreate ? undefined : () => sendWatcherChange('create'),\n\t\t\tchange: params.options.ignoreChange ? undefined : () => sendWatcherChange('change'),\n\t\t\tdelete: params.options.ignoreDelete ? undefined : () => sendWatcherChange('delete'),\n\t\t});\n\t});\n\n\tclient.onRequest(proto.fs_watcher_delete, async (params): Promise<void> => {\n\t\twatchers.delete(params.id);\n\t});\n\n\tvscode.commands.registerCommand('vscodeMarkdownLanguageservice.open', (uri, args) => {\n\t\treturn vscode.commands.executeCommand('vscode.open', uri, args);\n\t});\n\n\tvscode.commands.registerCommand('vscodeMarkdownLanguageservice.rename', (uri, pos) => {\n\t\treturn vscode.commands.executeCommand('editor.action.rename', [vscode.Uri.from(uri), new vscode.Position(pos.line, pos.character)]);\n\t});\n\n\tawait client.start();\n\n\treturn new MdLanguageClient(client, workspace);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/client/fileWatchingManager.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Utils } from 'vscode-uri';\nimport { disposeAll, IDisposable } from '../util/dispose';\nimport { ResourceMap } from '../util/resourceMap';\nimport { Schemes } from '../util/schemes';\n\ntype DirWatcherEntry = {\n\treadonly uri: vscode.Uri;\n\treadonly disposables: readonly IDisposable[];\n};\n\n\nexport class FileWatcherManager {\n\n\tprivate readonly _fileWatchers = new Map<number, {\n\t\treadonly watcher: vscode.FileSystemWatcher;\n\t\treadonly dirWatchers: DirWatcherEntry[];\n\t}>();\n\n\tprivate readonly _dirWatchers = new ResourceMap<{\n\t\treadonly watcher: vscode.FileSystemWatcher;\n\t\trefCount: number;\n\t}>();\n\n\tcreate(id: number, uri: vscode.Uri, watchParentDirs: boolean, listeners: { create?: () => void; change?: () => void; delete?: () => void }): void {\n\t\t// Non-writable file systems do not support file watching\n\t\tif (!vscode.workspace.fs.isWritableFileSystem(uri.scheme)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst watcher = vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(uri, '*'), !listeners.create, !listeners.change, !listeners.delete);\n\t\tconst parentDirWatchers: DirWatcherEntry[] = [];\n\t\tthis._fileWatchers.set(id, { watcher, dirWatchers: parentDirWatchers });\n\n\t\tif (listeners.create) { watcher.onDidCreate(listeners.create); }\n\t\tif (listeners.change) { watcher.onDidChange(listeners.change); }\n\t\tif (listeners.delete) { watcher.onDidDelete(listeners.delete); }\n\n\t\tif (watchParentDirs && uri.scheme !== Schemes.untitled) {\n\t\t\t// We need to watch the parent directories too for when these are deleted / created\n\t\t\tfor (let dirUri = Utils.dirname(uri); dirUri.path.length > 1; dirUri = Utils.dirname(dirUri)) {\n\t\t\t\tconst disposables: IDisposable[] = [];\n\n\t\t\t\tlet parentDirWatcher = this._dirWatchers.get(dirUri);\n\t\t\t\tif (!parentDirWatcher) {\n\t\t\t\t\tconst glob = new vscode.RelativePattern(Utils.dirname(dirUri), Utils.basename(dirUri));\n\t\t\t\t\tconst parentWatcher = vscode.workspace.createFileSystemWatcher(glob, !listeners.create, true, !listeners.delete);\n\t\t\t\t\tparentDirWatcher = { refCount: 0, watcher: parentWatcher };\n\t\t\t\t\tthis._dirWatchers.set(dirUri, parentDirWatcher);\n\t\t\t\t}\n\t\t\t\tparentDirWatcher.refCount++;\n\n\t\t\t\tif (listeners.create) {\n\t\t\t\t\tdisposables.push(parentDirWatcher.watcher.onDidCreate(async () => {\n\t\t\t\t\t\t// Just because the parent dir was created doesn't mean our file was created\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst stat = await vscode.workspace.fs.stat(uri);\n\t\t\t\t\t\t\tif (stat.type === vscode.FileType.File) {\n\t\t\t\t\t\t\t\tlisteners.create!();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Noop\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tif (listeners.delete) {\n\t\t\t\t\t// When the parent dir is deleted, consider our file deleted too\n\t\t\t\t\t// TODO: this fires if the file previously did not exist and then the parent is deleted\n\t\t\t\t\tdisposables.push(parentDirWatcher.watcher.onDidDelete(listeners.delete));\n\t\t\t\t}\n\n\t\t\t\tparentDirWatchers.push({ uri: dirUri, disposables });\n\t\t\t}\n\t\t}\n\t}\n\n\tdelete(id: number): void {\n\t\tconst entry = this._fileWatchers.get(id);\n\t\tif (entry) {\n\t\t\tfor (const dirWatcher of entry.dirWatchers) {\n\t\t\t\tdisposeAll(dirWatcher.disposables);\n\n\t\t\t\tconst dirWatcherEntry = this._dirWatchers.get(dirWatcher.uri);\n\t\t\t\tif (dirWatcherEntry) {\n\t\t\t\t\tif (--dirWatcherEntry.refCount <= 0) {\n\t\t\t\t\t\tdirWatcherEntry.watcher.dispose();\n\t\t\t\t\t\tthis._dirWatchers.delete(dirWatcher.uri);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tentry.watcher.dispose();\n\t\t}\n\n\t\tthis._fileWatchers.delete(id);\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/client/inMemoryDocument.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument } from 'vscode-languageserver-textdocument';\nimport * as vscode from 'vscode';\nimport { ITextDocument } from '../types/textDocument';\n\nexport class InMemoryDocument implements ITextDocument {\n\n\tprivate readonly _doc: TextDocument;\n\n\tpublic readonly uri: vscode.Uri;\n\tpublic readonly version: number;\n\n\tconstructor(\n\t\turi: vscode.Uri,\n\t\tcontents: string,\n\t\tversion: number = 0,\n\t) {\n\t\tthis.uri = uri;\n\t\tthis.version = version;\n\t\tthis._doc = TextDocument.create(this.uri.toString(), 'markdown', 0, contents);\n\t}\n\n\tgetText(range?: vscode.Range): string {\n\t\treturn this._doc.getText(range);\n\t}\n\n\tpositionAt(offset: number): vscode.Position {\n\t\tconst pos = this._doc.positionAt(offset);\n\t\treturn new vscode.Position(pos.line, pos.character);\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/client/protocol.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type Token = require('markdown-it/lib/token');\nimport * as vscode from 'vscode';\nimport { FileRename, RequestType } from 'vscode-languageclient';\nimport type * as lsp from 'vscode-languageserver-types';\nimport type * as md from 'vscode-markdown-languageservice';\n\n\nexport type ResolvedDocumentLinkTarget =\n\t| { readonly kind: 'file'; readonly uri: vscode.Uri; position?: lsp.Position; fragment?: string }\n\t| { readonly kind: 'folder'; readonly uri: vscode.Uri }\n\t| { readonly kind: 'external'; readonly uri: vscode.Uri };\n\n//#region From server\nexport const parse = new RequestType<{ uri: string; text?: string }, Token[], any>('markdown/parse');\n\nexport const fs_readFile = new RequestType<{ uri: string }, number[], any>('markdown/fs/readFile');\nexport const fs_readDirectory = new RequestType<{ uri: string }, [string, { isDirectory: boolean }][], any>('markdown/fs/readDirectory');\nexport const fs_stat = new RequestType<{ uri: string }, { isDirectory: boolean } | undefined, any>('markdown/fs/stat');\n\nexport const fs_watcher_create = new RequestType<{ id: number; uri: string; options: md.FileWatcherOptions; watchParentDirs: boolean }, void, any>('markdown/fs/watcher/create');\nexport const fs_watcher_delete = new RequestType<{ id: number }, void, any>('markdown/fs/watcher/delete');\n\nexport const findMarkdownFilesInWorkspace = new RequestType<{}, string[], any>('markdown/findMarkdownFilesInWorkspace');\n//#endregion\n\n//#region To server\nexport const getReferencesToFileInWorkspace = new RequestType<{ uri: string }, lsp.Location[], any>('markdown/getReferencesToFileInWorkspace');\nexport const getEditForFileRenames = new RequestType<Array<FileRename>, { participatingRenames: readonly FileRename[]; edit: lsp.WorkspaceEdit }, any>('markdown/getEditForFileRenames');\n\nexport const prepareUpdatePastedLinks = new RequestType<{ uri: string; ranges: lsp.Range[] }, string, any>('markdown/prepareUpdatePastedLinks');\nexport const getUpdatePastedLinksEdit = new RequestType<{ pasteIntoDoc: string; metadata: string; edits: lsp.TextEdit[] }, lsp.TextEdit[] | undefined, any>('markdown/getUpdatePastedLinksEdit');\n\nexport const fs_watcher_onChange = new RequestType<{ id: number; uri: string; kind: 'create' | 'change' | 'delete' }, void, any>('markdown/fs/watcher/onChange');\n\nexport const resolveLinkTarget = new RequestType<{ linkText: string; uri: string }, ResolvedDocumentLinkTarget, any>('markdown/resolveLinkTarget');\n//#endregion\n"
  },
  {
    "path": "extensions/markdown-language-features/src/client/workspace.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { ITextDocument } from '../types/textDocument';\nimport { Disposable } from '../util/dispose';\nimport { isMarkdownFile, looksLikeMarkdownPath } from '../util/file';\nimport { InMemoryDocument } from './inMemoryDocument';\nimport { ResourceMap } from '../util/resourceMap';\n\n/**\n * Provides set of markdown files known to VS Code.\n *\n * This includes both opened text documents and markdown files in the workspace.\n */\nexport class VsCodeMdWorkspace extends Disposable {\n\n\tprivate _watcher: vscode.FileSystemWatcher | undefined;\n\n\tprivate readonly _documentCache = new ResourceMap<ITextDocument>();\n\n\tprivate readonly _utf8Decoder = new TextDecoder('utf-8');\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._watcher = this._register(vscode.workspace.createFileSystemWatcher('**/*.md'));\n\n\t\tthis._register(this._watcher.onDidChange(async resource => {\n\t\t\tthis._documentCache.delete(resource);\n\t\t}));\n\n\t\tthis._register(this._watcher.onDidDelete(resource => {\n\t\t\tthis._documentCache.delete(resource);\n\t\t}));\n\n\t\tthis._register(vscode.workspace.onDidOpenTextDocument(e => {\n\t\t\tthis._documentCache.delete(e.uri);\n\t\t}));\n\n\t\tthis._register(vscode.workspace.onDidCloseTextDocument(e => {\n\t\t\tthis._documentCache.delete(e.uri);\n\t\t}));\n\t}\n\n\tprivate _isRelevantMarkdownDocument(doc: vscode.TextDocument) {\n\t\treturn isMarkdownFile(doc) && doc.uri.scheme !== 'vscode-bulkeditpreview';\n\t}\n\n\tpublic async getOrLoadMarkdownDocument(resource: vscode.Uri): Promise<ITextDocument | undefined> {\n\t\tconst existing = this._documentCache.get(resource);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\n\t\tconst matchingDocument = vscode.workspace.textDocuments.find((doc) => this._isRelevantMarkdownDocument(doc) && doc.uri.toString() === resource.toString());\n\t\tif (matchingDocument) {\n\t\t\tthis._documentCache.set(resource, matchingDocument);\n\t\t\treturn matchingDocument;\n\t\t}\n\n\t\tif (!looksLikeMarkdownPath(resource)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\ttry {\n\t\t\tconst bytes = await vscode.workspace.fs.readFile(resource);\n\n\t\t\t// We assume that markdown is in UTF-8\n\t\t\tconst text = this._utf8Decoder.decode(bytes);\n\t\t\tconst doc = new InMemoryDocument(resource, text, 0);\n\t\t\tthis._documentCache.set(resource, doc);\n\t\t\treturn doc;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commandManager.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport interface Command {\n\treadonly id: string;\n\n\texecute(...args: any[]): void;\n}\n\nexport class CommandManager {\n\tprivate readonly _commands = new Map<string, vscode.Disposable>();\n\n\tpublic dispose() {\n\t\tfor (const registration of this._commands.values()) {\n\t\t\tregistration.dispose();\n\t\t}\n\t\tthis._commands.clear();\n\t}\n\n\tpublic register<T extends Command>(command: T): vscode.Disposable {\n\t\tthis._registerCommand(command.id, command.execute, command);\n\t\treturn new vscode.Disposable(() => {\n\t\t\tthis._commands.delete(command.id);\n\t\t});\n\t}\n\n\tprivate _registerCommand(id: string, impl: (...args: any[]) => void, thisArg?: any) {\n\t\tif (this._commands.has(id)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._commands.set(id, vscode.commands.registerCommand(id, impl, thisArg));\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/copyImage.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Command } from '../commandManager';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\n\nexport class CopyImageCommand implements Command {\n\tpublic readonly id = '_markdown.copyImage';\n\n\tpublic constructor(\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager,\n\t) { }\n\n\tpublic execute(args: { id: string; resource: string }) {\n\t\tconst source = vscode.Uri.parse(args.resource);\n\t\tthis._webviewManager.findPreview(source)?.copyImage(args.id);\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { CommandManager } from '../commandManager';\nimport { MarkdownItEngine } from '../markdownEngine';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\nimport { ContentSecurityPolicyArbiter, PreviewSecuritySelector } from '../preview/security';\nimport { TelemetryReporter } from '../telemetryReporter';\nimport { InsertLinkFromWorkspace, InsertImageFromWorkspace } from './insertResource';\nimport { RefreshPreviewCommand } from './refreshPreview';\nimport { ReloadPlugins } from './reloadPlugins';\nimport { RenderDocument } from './renderDocument';\nimport { ShowLockedPreviewToSideCommand, ShowPreviewCommand, ShowPreviewToSideCommand } from './showPreview';\nimport { CopyImageCommand } from './copyImage';\nimport { ShowPreviewSecuritySelectorCommand } from './showPreviewSecuritySelector';\nimport { ShowSourceCommand } from './showSource';\nimport { ToggleLockCommand } from './toggleLock';\nimport { OpenImageCommand } from './openImage';\n\nexport function registerMarkdownCommands(\n\tcommandManager: CommandManager,\n\tpreviewManager: MarkdownPreviewManager,\n\ttelemetryReporter: TelemetryReporter,\n\tcspArbiter: ContentSecurityPolicyArbiter,\n\tengine: MarkdownItEngine,\n): vscode.Disposable {\n\tconst previewSecuritySelector = new PreviewSecuritySelector(cspArbiter, previewManager);\n\n\tcommandManager.register(new OpenImageCommand(previewManager));\n\tcommandManager.register(new CopyImageCommand(previewManager));\n\tcommandManager.register(new ShowPreviewCommand(previewManager, telemetryReporter));\n\tcommandManager.register(new ShowPreviewToSideCommand(previewManager, telemetryReporter));\n\tcommandManager.register(new ShowLockedPreviewToSideCommand(previewManager, telemetryReporter));\n\tcommandManager.register(new ShowSourceCommand(previewManager));\n\tcommandManager.register(new RefreshPreviewCommand(previewManager, engine));\n\tcommandManager.register(new ShowPreviewSecuritySelectorCommand(previewSecuritySelector, previewManager));\n\tcommandManager.register(new ToggleLockCommand(previewManager));\n\tcommandManager.register(new RenderDocument(engine));\n\tcommandManager.register(new ReloadPlugins(previewManager, engine));\n\tcommandManager.register(new InsertLinkFromWorkspace());\n\tcommandManager.register(new InsertImageFromWorkspace());\n\n\treturn commandManager;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/insertResource.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Utils } from 'vscode-uri';\nimport { Command } from '../commandManager';\nimport { createUriListSnippet, linkEditKind } from '../languageFeatures/copyFiles/shared';\nimport { mediaFileExtensions } from '../util/mimes';\nimport { coalesce } from '../util/arrays';\nimport { getParentDocumentUri } from '../util/document';\nimport { Schemes } from '../util/schemes';\n\n\nexport class InsertLinkFromWorkspace implements Command {\n\tpublic readonly id = 'markdown.editor.insertLinkFromWorkspace';\n\n\tpublic async execute(resources?: vscode.Uri[]) {\n\t\tconst activeEditor = vscode.window.activeTextEditor;\n\t\tif (!activeEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tresources ??= await vscode.window.showOpenDialog({\n\t\t\tcanSelectFiles: true,\n\t\t\tcanSelectFolders: false,\n\t\t\tcanSelectMany: true,\n\t\t\topenLabel: vscode.l10n.t(\"Insert link\"),\n\t\t\ttitle: vscode.l10n.t(\"Insert link\"),\n\t\t\tdefaultUri: getDefaultUri(activeEditor.document),\n\t\t});\n\t\tif (!resources) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn insertLink(activeEditor, resources, false);\n\t}\n}\n\nexport class InsertImageFromWorkspace implements Command {\n\tpublic readonly id = 'markdown.editor.insertImageFromWorkspace';\n\n\tpublic async execute(resources?: vscode.Uri[]) {\n\t\tconst activeEditor = vscode.window.activeTextEditor;\n\t\tif (!activeEditor) {\n\t\t\treturn;\n\t\t}\n\n\t\tresources ??= await vscode.window.showOpenDialog({\n\t\t\tcanSelectFiles: true,\n\t\t\tcanSelectFolders: false,\n\t\t\tcanSelectMany: true,\n\t\t\tfilters: {\n\t\t\t\t[vscode.l10n.t(\"Media\")]: Array.from(mediaFileExtensions.keys())\n\t\t\t},\n\t\t\topenLabel: vscode.l10n.t(\"Insert image\"),\n\t\t\ttitle: vscode.l10n.t(\"Insert image\"),\n\t\t\tdefaultUri: getDefaultUri(activeEditor.document),\n\t\t});\n\t\tif (!resources) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn insertLink(activeEditor, resources, true);\n\t}\n}\n\nfunction getDefaultUri(document: vscode.TextDocument) {\n\tconst docUri = getParentDocumentUri(document.uri);\n\tif (docUri.scheme === Schemes.untitled) {\n\t\treturn vscode.workspace.workspaceFolders?.[0]?.uri;\n\t}\n\treturn Utils.dirname(docUri);\n}\n\nasync function insertLink(activeEditor: vscode.TextEditor, selectedFiles: readonly vscode.Uri[], insertAsMedia: boolean): Promise<void> {\n\tconst edit = createInsertLinkEdit(activeEditor, selectedFiles, insertAsMedia);\n\tif (edit) {\n\t\tawait vscode.workspace.applyEdit(edit);\n\t}\n}\n\nfunction createInsertLinkEdit(activeEditor: vscode.TextEditor, selectedFiles: readonly vscode.Uri[], insertAsMedia: boolean) {\n\tconst snippetEdits = coalesce(activeEditor.selections.map((selection, i): vscode.SnippetTextEdit | undefined => {\n\t\tconst selectionText = activeEditor.document.getText(selection);\n\t\tconst snippet = createUriListSnippet(activeEditor.document.uri, selectedFiles.map(uri => ({ uri })), {\n\t\t\tlinkKindHint: insertAsMedia ? 'media' : linkEditKind,\n\t\t\tplaceholderText: selectionText,\n\t\t\tplaceholderStartIndex: (i + 1) * selectedFiles.length,\n\t\t\tseparator: insertAsMedia ? '\\n' : ' ',\n\t\t});\n\n\t\treturn snippet ? new vscode.SnippetTextEdit(selection, snippet.snippet) : undefined;\n\t}));\n\tif (!snippetEdits.length) {\n\t\treturn;\n\t}\n\n\tconst edit = new vscode.WorkspaceEdit();\n\tedit.set(activeEditor.document.uri, snippetEdits);\n\treturn edit;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/openImage.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Command } from '../commandManager';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\n\nexport class OpenImageCommand implements Command {\n\tpublic readonly id = '_markdown.openImage';\n\n\tpublic constructor(\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager,\n\t) { }\n\n\tpublic execute(args: { resource: string; imageSource: string }) {\n\t\tconst source = vscode.Uri.parse(args.resource);\n\t\tthis._webviewManager.openDocumentLink(args.imageSource, source);\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/refreshPreview.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command } from '../commandManager';\nimport { MarkdownItEngine } from '../markdownEngine';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\n\nexport class RefreshPreviewCommand implements Command {\n\tpublic readonly id = 'markdown.preview.refresh';\n\n\tpublic constructor(\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager,\n\t\tprivate readonly _engine: MarkdownItEngine\n\t) { }\n\n\tpublic execute() {\n\t\tthis._engine.cleanCache();\n\t\tthis._webviewManager.refresh();\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/reloadPlugins.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command } from '../commandManager';\nimport { MarkdownItEngine } from '../markdownEngine';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\n\nexport class ReloadPlugins implements Command {\n\tpublic readonly id = 'markdown.api.reloadPlugins';\n\n\tpublic constructor(\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager,\n\t\tprivate readonly _engine: MarkdownItEngine,\n\t) { }\n\n\tpublic execute(): void {\n\t\tthis._engine.reloadPlugins();\n\t\tthis._engine.cleanCache();\n\t\tthis._webviewManager.refresh();\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/renderDocument.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command } from '../commandManager';\nimport { MarkdownItEngine } from '../markdownEngine';\nimport { ITextDocument } from '../types/textDocument';\n\nexport class RenderDocument implements Command {\n\tpublic readonly id = 'markdown.api.render';\n\n\tpublic constructor(\n\t\tprivate readonly _engine: MarkdownItEngine\n\t) { }\n\n\tpublic async execute(document: ITextDocument | string): Promise<string> {\n\t\treturn (await (this._engine.render(document))).html;\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/showPreview.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Command } from '../commandManager';\nimport { DynamicPreviewSettings, MarkdownPreviewManager } from '../preview/previewManager';\nimport { TelemetryReporter } from '../telemetryReporter';\n\n\ninterface ShowPreviewSettings {\n\treadonly sideBySide?: boolean;\n\treadonly locked?: boolean;\n}\n\nasync function showPreview(\n\twebviewManager: MarkdownPreviewManager,\n\ttelemetryReporter: TelemetryReporter,\n\turi: vscode.Uri | undefined,\n\tpreviewSettings: ShowPreviewSettings,\n): Promise<any> {\n\tlet resource = uri;\n\tif (!(resource instanceof vscode.Uri)) {\n\t\tif (vscode.window.activeTextEditor) {\n\t\t\t// we are relaxed and don't check for markdown files\n\t\t\tresource = vscode.window.activeTextEditor.document.uri;\n\t\t}\n\t}\n\n\tif (!(resource instanceof vscode.Uri)) {\n\t\tif (!vscode.window.activeTextEditor) {\n\t\t\t// this is most likely toggling the preview\n\t\t\treturn vscode.commands.executeCommand('markdown.showSource');\n\t\t}\n\t\t// nothing found that could be shown or toggled\n\t\treturn;\n\t}\n\n\tconst resourceColumn = (vscode.window.activeTextEditor && vscode.window.activeTextEditor.viewColumn) || vscode.ViewColumn.One;\n\twebviewManager.openDynamicPreview(resource, {\n\t\tresourceColumn: resourceColumn,\n\t\tpreviewColumn: previewSettings.sideBySide ? vscode.ViewColumn.Beside : resourceColumn,\n\t\tlocked: !!previewSettings.locked\n\t});\n\n\ttelemetryReporter.sendTelemetryEvent('openPreview', {\n\t\twhere: previewSettings.sideBySide ? 'sideBySide' : 'inPlace',\n\t\thow: (uri instanceof vscode.Uri) ? 'action' : 'pallete'\n\t});\n}\n\nexport class ShowPreviewCommand implements Command {\n\tpublic readonly id = 'markdown.showPreview';\n\n\tpublic constructor(\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager,\n\t\tprivate readonly _telemetryReporter: TelemetryReporter\n\t) { }\n\n\tpublic execute(mainUri?: vscode.Uri, allUris?: vscode.Uri[], previewSettings?: DynamicPreviewSettings) {\n\t\tfor (const uri of Array.isArray(allUris) ? allUris : [mainUri]) {\n\t\t\tshowPreview(this._webviewManager, this._telemetryReporter, uri, {\n\t\t\t\tsideBySide: false,\n\t\t\t\tlocked: previewSettings && previewSettings.locked\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport class ShowPreviewToSideCommand implements Command {\n\tpublic readonly id = 'markdown.showPreviewToSide';\n\n\tpublic constructor(\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager,\n\t\tprivate readonly _telemetryReporter: TelemetryReporter\n\t) { }\n\n\tpublic execute(uri?: vscode.Uri, previewSettings?: DynamicPreviewSettings) {\n\t\tshowPreview(this._webviewManager, this._telemetryReporter, uri, {\n\t\t\tsideBySide: true,\n\t\t\tlocked: previewSettings && previewSettings.locked\n\t\t});\n\t}\n}\n\n\nexport class ShowLockedPreviewToSideCommand implements Command {\n\tpublic readonly id = 'markdown.showLockedPreviewToSide';\n\n\tpublic constructor(\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager,\n\t\tprivate readonly _telemetryReporter: TelemetryReporter\n\t) { }\n\n\tpublic execute(uri?: vscode.Uri) {\n\t\tshowPreview(this._webviewManager, this._telemetryReporter, uri, {\n\t\t\tsideBySide: true,\n\t\t\tlocked: true\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/showPreviewSecuritySelector.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Command } from '../commandManager';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\nimport { PreviewSecuritySelector } from '../preview/security';\nimport { isMarkdownFile } from '../util/file';\n\nexport class ShowPreviewSecuritySelectorCommand implements Command {\n\tpublic readonly id = 'markdown.showPreviewSecuritySelector';\n\n\tpublic constructor(\n\t\tprivate readonly _previewSecuritySelector: PreviewSecuritySelector,\n\t\tprivate readonly _previewManager: MarkdownPreviewManager\n\t) { }\n\n\tpublic execute(resource: string | undefined) {\n\t\tif (this._previewManager.activePreviewResource) {\n\t\t\tthis._previewSecuritySelector.showSecuritySelectorForResource(this._previewManager.activePreviewResource);\n\t\t} else if (resource) {\n\t\t\tconst source = vscode.Uri.parse(resource);\n\t\t\tthis._previewSecuritySelector.showSecuritySelectorForResource(source.query ? vscode.Uri.parse(source.query) : source);\n\t\t} else if (vscode.window.activeTextEditor && isMarkdownFile(vscode.window.activeTextEditor.document)) {\n\t\t\tthis._previewSecuritySelector.showSecuritySelectorForResource(vscode.window.activeTextEditor.document.uri);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/showSource.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Command } from '../commandManager';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\n\nexport class ShowSourceCommand implements Command {\n\tpublic readonly id = 'markdown.showSource';\n\n\tpublic constructor(\n\t\tprivate readonly _previewManager: MarkdownPreviewManager\n\t) { }\n\n\tpublic execute() {\n\t\tconst { activePreviewResource, activePreviewResourceColumn } = this._previewManager;\n\t\tif (activePreviewResource && activePreviewResourceColumn) {\n\t\t\treturn vscode.workspace.openTextDocument(activePreviewResource).then(document => {\n\t\t\t\treturn vscode.window.showTextDocument(document, activePreviewResourceColumn);\n\t\t\t});\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/commands/toggleLock.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Command } from '../commandManager';\nimport { MarkdownPreviewManager } from '../preview/previewManager';\n\nexport class ToggleLockCommand implements Command {\n\tpublic readonly id = 'markdown.preview.toggleLock';\n\n\tpublic constructor(\n\t\tprivate readonly _previewManager: MarkdownPreviewManager\n\t) { }\n\n\tpublic execute() {\n\t\tthis._previewManager.toggleLock();\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/extension.browser.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { LanguageClient, LanguageClientOptions } from 'vscode-languageclient/browser';\nimport { MdLanguageClient, startClient } from './client/client';\nimport { activateShared } from './extension.shared';\nimport { VsCodeOutputLogger } from './logging';\nimport { IMdParser, MarkdownItEngine } from './markdownEngine';\nimport { getMarkdownExtensionContributions } from './markdownExtensions';\nimport { githubSlugifier } from './slugify';\n\nexport async function activate(context: vscode.ExtensionContext) {\n\tconst contributions = getMarkdownExtensionContributions(context);\n\tcontext.subscriptions.push(contributions);\n\n\tconst logger = new VsCodeOutputLogger();\n\tcontext.subscriptions.push(logger);\n\n\tconst engine = new MarkdownItEngine(contributions, githubSlugifier, logger);\n\n\tconst client = await startServer(context, engine);\n\tcontext.subscriptions.push(client);\n\tactivateShared(context, client, engine, logger, contributions);\n}\n\nfunction startServer(context: vscode.ExtensionContext, parser: IMdParser): Promise<MdLanguageClient> {\n\tconst serverMain = vscode.Uri.joinPath(context.extensionUri, 'dist', 'browser', 'serverWorkerMain.js');\n\n\tconst worker = new Worker(serverMain.toString());\n\tworker.postMessage({ i10lLocation: vscode.l10n.uri?.toString() ?? '' });\n\n\treturn startClient((id: string, name: string, clientOptions: LanguageClientOptions) => {\n\t\treturn new LanguageClient(id, name, clientOptions, worker);\n\t}, parser);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/extension.shared.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { MdLanguageClient } from './client/client';\nimport { CommandManager } from './commandManager';\nimport { registerMarkdownCommands } from './commands/index';\nimport { registerPasteUrlSupport } from './languageFeatures/copyFiles/pasteUrlProvider';\nimport { registerResourceDropOrPasteSupport } from './languageFeatures/copyFiles/dropOrPasteResource';\nimport { registerDiagnosticSupport } from './languageFeatures/diagnostics';\nimport { registerFindFileReferenceSupport } from './languageFeatures/fileReferences';\nimport { registerUpdateLinksOnRename } from './languageFeatures/linkUpdater';\nimport { ILogger } from './logging';\nimport { IMdParser, MarkdownItEngine } from './markdownEngine';\nimport { MarkdownContributionProvider } from './markdownExtensions';\nimport { MdDocumentRenderer } from './preview/documentRenderer';\nimport { MarkdownPreviewManager } from './preview/previewManager';\nimport { ExtensionContentSecurityPolicyArbiter } from './preview/security';\nimport { loadDefaultTelemetryReporter } from './telemetryReporter';\nimport { MdLinkOpener } from './util/openDocumentLink';\nimport { registerUpdatePastedLinks } from './languageFeatures/updateLinksOnPaste';\n\nexport function activateShared(\n\tcontext: vscode.ExtensionContext,\n\tclient: MdLanguageClient,\n\tengine: MarkdownItEngine,\n\tlogger: ILogger,\n\tcontributions: MarkdownContributionProvider,\n) {\n\tconst telemetryReporter = loadDefaultTelemetryReporter();\n\tcontext.subscriptions.push(telemetryReporter);\n\n\tconst cspArbiter = new ExtensionContentSecurityPolicyArbiter(context.globalState, context.workspaceState);\n\tconst commandManager = new CommandManager();\n\n\tconst opener = new MdLinkOpener(client);\n\n\tconst contentProvider = new MdDocumentRenderer(engine, context, cspArbiter, contributions, logger);\n\tconst previewManager = new MarkdownPreviewManager(contentProvider, logger, contributions, opener);\n\tcontext.subscriptions.push(previewManager);\n\n\tcontext.subscriptions.push(registerMarkdownLanguageFeatures(client, commandManager, engine));\n\tcontext.subscriptions.push(registerMarkdownCommands(commandManager, previewManager, telemetryReporter, cspArbiter, engine));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => {\n\t\tpreviewManager.updateConfiguration();\n\t}));\n}\n\nfunction registerMarkdownLanguageFeatures(\n\tclient: MdLanguageClient,\n\tcommandManager: CommandManager,\n\tparser: IMdParser,\n): vscode.Disposable {\n\tconst selector: vscode.DocumentSelector = { language: 'markdown', scheme: '*' };\n\treturn vscode.Disposable.from(\n\t\t// Language features\n\t\tregisterDiagnosticSupport(selector, commandManager),\n\t\tregisterFindFileReferenceSupport(commandManager, client),\n\t\tregisterResourceDropOrPasteSupport(selector, parser),\n\t\tregisterPasteUrlSupport(selector, parser),\n\t\tregisterUpdateLinksOnRename(client),\n\t\tregisterUpdatePastedLinks(selector, client),\n\t);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { LanguageClient, ServerOptions, TransportKind } from 'vscode-languageclient/node';\nimport { MdLanguageClient, startClient } from './client/client';\nimport { activateShared } from './extension.shared';\nimport { VsCodeOutputLogger } from './logging';\nimport { IMdParser, MarkdownItEngine } from './markdownEngine';\nimport { getMarkdownExtensionContributions } from './markdownExtensions';\nimport { githubSlugifier } from './slugify';\n\nexport async function activate(context: vscode.ExtensionContext) {\n\tconst contributions = getMarkdownExtensionContributions(context);\n\tcontext.subscriptions.push(contributions);\n\n\tconst logger = new VsCodeOutputLogger();\n\tcontext.subscriptions.push(logger);\n\n\tconst engine = new MarkdownItEngine(contributions, githubSlugifier, logger);\n\n\tconst client = await startServer(context, engine);\n\tcontext.subscriptions.push(client);\n\tactivateShared(context, client, engine, logger, contributions);\n}\n\nfunction startServer(context: vscode.ExtensionContext, parser: IMdParser): Promise<MdLanguageClient> {\n\tconst isDebugBuild = context.extension.packageJSON.main.includes('/out/');\n\n\tconst serverModule = context.asAbsolutePath(\n\t\tisDebugBuild\n\t\t\t// For local non bundled version of vscode-markdown-languageserver\n\t\t\t// ? './node_modules/vscode-markdown-languageserver/out/node/workerMain'\n\t\t\t? './node_modules/vscode-markdown-languageserver/dist/node/workerMain'\n\t\t\t: './dist/serverWorkerMain'\n\t);\n\n\t// The debug options for the server\n\tconst debugOptions = { execArgv: ['--nolazy', '--inspect=' + (7000 + Math.round(Math.random() * 999))] };\n\n\t// If the extension is launch in debug mode the debug server options are use\n\t// Otherwise the run options are used\n\tconst serverOptions: ServerOptions = {\n\t\trun: { module: serverModule, transport: TransportKind.ipc },\n\t\tdebug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions }\n\t};\n\n\t// pass the location of the localization bundle to the server\n\tprocess.env['VSCODE_L10N_BUNDLE_LOCATION'] = vscode.l10n.uri?.toString() ?? '';\n\n\treturn startClient((id, name, clientOptions) => {\n\t\treturn new LanguageClient(id, name, serverOptions, clientOptions);\n\t}, parser);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/copyFiles/copyFiles.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport { Utils } from 'vscode-uri';\n\ntype OverwriteBehavior = 'overwrite' | 'nameIncrementally';\n\nexport interface CopyFileConfiguration {\n\treadonly destination: Record<string, string>;\n\treadonly overwriteBehavior: OverwriteBehavior;\n}\n\nexport function getCopyFileConfiguration(document: vscode.TextDocument): CopyFileConfiguration {\n\tconst config = vscode.workspace.getConfiguration('markdown', document);\n\treturn {\n\t\tdestination: config.get<Record<string, string>>('copyFiles.destination') ?? {},\n\t\toverwriteBehavior: readOverwriteBehavior(config),\n\t};\n}\n\nfunction readOverwriteBehavior(config: vscode.WorkspaceConfiguration): OverwriteBehavior {\n\tswitch (config.get('copyFiles.overwriteBehavior')) {\n\t\tcase 'overwrite': return 'overwrite';\n\t\tdefault: return 'nameIncrementally';\n\t}\n}\n\nexport function parseGlob(rawGlob: string): Iterable<string> {\n\tif (rawGlob.startsWith('/')) {\n\t\t// Anchor to workspace folders\n\t\treturn (vscode.workspace.workspaceFolders ?? []).map(folder => vscode.Uri.joinPath(folder.uri, rawGlob).path);\n\t}\n\n\t// Relative path, so implicitly track on ** to match everything\n\tif (!rawGlob.startsWith('**')) {\n\t\treturn ['**/' + rawGlob];\n\t}\n\n\treturn [rawGlob];\n}\n\ntype GetWorkspaceFolder = (documentUri: vscode.Uri) => vscode.Uri | undefined;\n\nexport function resolveCopyDestination(documentUri: vscode.Uri, fileName: string, dest: string, getWorkspaceFolder: GetWorkspaceFolder): vscode.Uri {\n\tconst resolvedDest = resolveCopyDestinationSetting(documentUri, fileName, dest, getWorkspaceFolder);\n\n\tif (resolvedDest.startsWith('/')) {\n\t\t// Absolute path\n\t\treturn Utils.resolvePath(documentUri, resolvedDest);\n\t}\n\n\t// Relative to document\n\tconst dirName = Utils.dirname(documentUri);\n\treturn Utils.resolvePath(dirName, resolvedDest);\n}\n\n\nfunction resolveCopyDestinationSetting(documentUri: vscode.Uri, fileName: string, dest: string, getWorkspaceFolder: GetWorkspaceFolder): string {\n\tlet outDest = dest.trim();\n\tif (!outDest) {\n\t\toutDest = '${fileName}';\n\t}\n\n\t// Destination that start with `/` implicitly means go to workspace root\n\tif (outDest.startsWith('/')) {\n\t\toutDest = '${documentWorkspaceFolder}/' + outDest.slice(1);\n\t}\n\n\t// Destination that ends with `/` implicitly needs a fileName\n\tif (outDest.endsWith('/')) {\n\t\toutDest += '${fileName}';\n\t}\n\n\tconst documentDirName = Utils.dirname(documentUri);\n\tconst documentBaseName = Utils.basename(documentUri);\n\tconst documentExtName = Utils.extname(documentUri);\n\n\tconst workspaceFolder = getWorkspaceFolder(documentUri);\n\n\tconst vars = new Map<string, string>([\n\t\t// Document\n\t\t['documentDirName', documentDirName.path], // Absolute parent directory path of the Markdown document, e.g. `/Users/me/myProject/docs`.\n\t\t['documentRelativeDirName', workspaceFolder ? path.posix.relative(workspaceFolder.path, documentDirName.path) : documentDirName.path], // Relative parent directory path of the Markdown document, e.g. `docs`. This is the same as `${documentDirName}` if the file is not part of a workspace.\n\t\t['documentFileName', documentBaseName], // The full filename of the Markdown document, e.g. `README.md`.\n\t\t['documentBaseName', documentBaseName.slice(0, documentBaseName.length - documentExtName.length)], // The basename of the Markdown document, e.g. `README`.\n\t\t['documentExtName', documentExtName.replace('.', '')], // The extension of the Markdown document, e.g. `md`.\n\t\t['documentFilePath', documentUri.path], // Absolute path of the Markdown document, e.g. `/Users/me/myProject/docs/README.md`.\n\t\t['documentRelativeFilePath', workspaceFolder ? path.posix.relative(workspaceFolder.path, documentUri.path) : documentUri.path], // Relative path of the Markdown document, e.g. `docs/README.md`. This is the same as `${documentFilePath}` if the file is not part of a workspace.\n\n\t\t// Workspace\n\t\t['documentWorkspaceFolder', ((workspaceFolder ?? documentDirName).path)], // The workspace folder for the Markdown document, e.g. `/Users/me/myProject`. This is the same as `${documentDirName}` if the file is not part of a workspace.\n\n\t\t// File\n\t\t['fileName', fileName], // The file name of the dropped file, e.g. `image.png`.\n\t\t['fileExtName', path.extname(fileName).replace('.', '')], // The extension of the dropped file, e.g. `png`.\n\t\t['unixTime', Date.now().toString()], // The current Unix timestamp in milliseconds.\n\t]);\n\n\treturn outDest.replaceAll(/(?<escape>\\\\\\$)|(?<!\\\\)\\$\\{(?<name>\\w+)(?:\\/(?<pattern>(?:\\\\\\/|[^\\}\\/])+)\\/(?<replacement>(?:\\\\\\/|[^\\}\\/])*)\\/)?\\}/g, (match, _escape, name, pattern, replacement, _offset, _str, groups) => {\n\t\tif (groups?.['escape']) {\n\t\t\treturn '$';\n\t\t}\n\n\t\tconst entry = vars.get(name);\n\t\tif (typeof entry !== 'string') {\n\t\t\treturn match;\n\t\t}\n\n\t\tif (pattern && replacement) {\n\t\t\ttry {\n\t\t\t\treturn entry.replace(new RegExp(replaceTransformEscapes(pattern)), replaceTransformEscapes(replacement));\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(`Error applying 'resolveCopyDestinationSetting' transform: ${pattern} -> ${replacement}`);\n\t\t\t}\n\t\t}\n\n\t\treturn entry;\n\t});\n}\n\nfunction replaceTransformEscapes(str: string): string {\n\treturn str.replaceAll(/\\\\\\//g, '/');\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/copyFiles/dropOrPasteResource.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { IMdParser } from '../../markdownEngine';\nimport { coalesce } from '../../util/arrays';\nimport { getParentDocumentUri } from '../../util/document';\nimport { getMediaKindForMime, MediaKind, Mime, rootMediaMimesTypes } from '../../util/mimes';\nimport { Schemes } from '../../util/schemes';\nimport { UriList } from '../../util/uriList';\nimport { NewFilePathGenerator } from './newFilePathGenerator';\nimport { audioEditKind, baseLinkEditKind, createInsertUriListEdit, createUriListSnippet, DropOrPasteEdit, getSnippetLabelAndKind, imageEditKind, linkEditKind, videoEditKind } from './shared';\nimport { InsertMarkdownLink, shouldInsertMarkdownLinkByDefault } from './smartDropOrPaste';\n\nenum CopyFilesSettings {\n\tNever = 'never',\n\tMediaFiles = 'mediaFiles',\n}\n\n/**\n * Provides support for pasting or dropping resources into markdown documents.\n *\n * This includes:\n *\n * - `text/uri-list` data in the data transfer.\n * - File object in the data transfer.\n * - Media data in the data transfer, such as `image/png`.\n */\nclass ResourcePasteOrDropProvider implements vscode.DocumentPasteEditProvider, vscode.DocumentDropEditProvider {\n\n\tpublic static readonly mimeTypes = [\n\t\tMime.textUriList,\n\t\t'files',\n\t\t...Object.values(rootMediaMimesTypes).map(type => `${type}/*`),\n\t];\n\n\tprivate readonly _yieldTo = [\n\t\tvscode.DocumentDropOrPasteEditKind.Text,\n\t\tvscode.DocumentDropOrPasteEditKind.Empty.append('markdown', 'link', 'image', 'attachment'), // Prefer notebook attachments\n\t];\n\n\tconstructor(\n\t\tprivate readonly _parser: IMdParser,\n\t) { }\n\n\tpublic async provideDocumentDropEdits(\n\t\tdocument: vscode.TextDocument,\n\t\tposition: vscode.Position,\n\t\tdataTransfer: vscode.DataTransfer,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<vscode.DocumentDropEdit | undefined> {\n\t\tconst edit = await this._createEdit(document, [new vscode.Range(position, position)], dataTransfer, {\n\t\t\tinsert: this._getEnabled(document, 'editor.drop.enabled'),\n\t\t\tcopyIntoWorkspace: vscode.workspace.getConfiguration('markdown', document).get<CopyFilesSettings>('editor.drop.copyIntoWorkspace', CopyFilesSettings.MediaFiles)\n\t\t}, undefined, token);\n\n\t\tif (!edit || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst dropEdit = new vscode.DocumentDropEdit(edit.snippet);\n\t\tdropEdit.title = edit.label;\n\t\tdropEdit.kind = edit.kind;\n\t\tdropEdit.additionalEdit = edit.additionalEdits;\n\t\tdropEdit.yieldTo = [...this._yieldTo, ...edit.yieldTo];\n\t\treturn dropEdit;\n\t}\n\n\tpublic async provideDocumentPasteEdits(\n\t\tdocument: vscode.TextDocument,\n\t\tranges: readonly vscode.Range[],\n\t\tdataTransfer: vscode.DataTransfer,\n\t\tcontext: vscode.DocumentPasteEditContext,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<vscode.DocumentPasteEdit[] | undefined> {\n\t\tconst edit = await this._createEdit(document, ranges, dataTransfer, {\n\t\t\tinsert: this._getEnabled(document, 'editor.paste.enabled'),\n\t\t\tcopyIntoWorkspace: vscode.workspace.getConfiguration('markdown', document).get<CopyFilesSettings>('editor.paste.copyIntoWorkspace', CopyFilesSettings.MediaFiles)\n\t\t}, context, token);\n\n\t\tif (!edit || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pasteEdit = new vscode.DocumentPasteEdit(edit.snippet, edit.label, edit.kind);\n\t\tpasteEdit.additionalEdit = edit.additionalEdits;\n\t\tpasteEdit.yieldTo = [...this._yieldTo, ...edit.yieldTo];\n\t\treturn [pasteEdit];\n\t}\n\n\tprivate _getEnabled(document: vscode.TextDocument, settingName: string): InsertMarkdownLink {\n\t\tconst setting = vscode.workspace.getConfiguration('markdown', document).get<boolean | InsertMarkdownLink>(settingName, true);\n\t\t// Convert old boolean values to new enum setting\n\t\tif (setting === false) {\n\t\t\treturn InsertMarkdownLink.Never;\n\t\t} else if (setting === true) {\n\t\t\treturn InsertMarkdownLink.Smart;\n\t\t} else {\n\t\t\treturn setting;\n\t\t}\n\t}\n\n\tprivate async _createEdit(\n\t\tdocument: vscode.TextDocument,\n\t\tranges: readonly vscode.Range[],\n\t\tdataTransfer: vscode.DataTransfer,\n\t\tsettings: Readonly<{\n\t\t\tinsert: InsertMarkdownLink;\n\t\t\tcopyIntoWorkspace: CopyFilesSettings;\n\t\t}>,\n\t\tcontext: vscode.DocumentPasteEditContext | undefined,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<DropOrPasteEdit | undefined> {\n\t\tif (settings.insert === InsertMarkdownLink.Never) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet edit = await this._createEditForMediaFiles(document, dataTransfer, settings.copyIntoWorkspace, token);\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!edit) {\n\t\t\tedit = await this._createEditFromUriListData(document, ranges, dataTransfer, context, token);\n\t\t}\n\n\t\tif (!edit || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!(await shouldInsertMarkdownLinkByDefault(this._parser, document, settings.insert, ranges, token))) {\n\t\t\tedit.yieldTo.push(vscode.DocumentDropOrPasteEditKind.Empty.append('uri'));\n\t\t}\n\n\t\treturn edit;\n\t}\n\n\tprivate async _createEditFromUriListData(\n\t\tdocument: vscode.TextDocument,\n\t\tranges: readonly vscode.Range[],\n\t\tdataTransfer: vscode.DataTransfer,\n\t\tcontext: vscode.DocumentPasteEditContext | undefined,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<DropOrPasteEdit | undefined> {\n\t\tconst uriListData = await dataTransfer.get(Mime.textUriList)?.asString();\n\t\tif (!uriListData || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst uriList = UriList.from(uriListData);\n\t\tif (!uriList.entries.length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// In some browsers, copying from the address bar sets both text/uri-list and text/plain.\n\t\t// Disable ourselves if there's also a text entry with the same http(s) uri as our list,\n\t\t// unless we are explicitly requested.\n\t\tif (\n\t\t\turiList.entries.length === 1\n\t\t\t&& (uriList.entries[0].uri.scheme === Schemes.http || uriList.entries[0].uri.scheme === Schemes.https)\n\t\t\t&& !context?.only?.contains(baseLinkEditKind)\n\t\t) {\n\t\t\tconst text = await dataTransfer.get(Mime.textPlain)?.asString();\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (text && textMatchesUriList(text, uriList)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst edit = createInsertUriListEdit(document, ranges, uriList, { linkKindHint: context?.only });\n\t\tif (!edit) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst additionalEdits = new vscode.WorkspaceEdit();\n\t\tadditionalEdits.set(document.uri, edit.edits);\n\n\t\treturn {\n\t\t\tlabel: edit.label,\n\t\t\tkind: edit.kind,\n\t\t\tsnippet: new vscode.SnippetString(''),\n\t\t\tadditionalEdits,\n\t\t\tyieldTo: []\n\t\t};\n\t}\n\n\t/**\n\t * Create a new edit for media files in a data transfer.\n\t *\n\t * This tries copying files outside of the workspace into the workspace.\n\t */\n\tprivate async _createEditForMediaFiles(\n\t\tdocument: vscode.TextDocument,\n\t\tdataTransfer: vscode.DataTransfer,\n\t\tcopyIntoWorkspace: CopyFilesSettings,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<DropOrPasteEdit | undefined> {\n\t\tif (copyIntoWorkspace !== CopyFilesSettings.MediaFiles || getParentDocumentUri(document.uri).scheme === Schemes.untitled) {\n\t\t\treturn;\n\t\t}\n\n\t\tinterface FileEntry {\n\t\t\treadonly uri: vscode.Uri;\n\t\t\treadonly kind: MediaKind;\n\t\t\treadonly newFile?: { readonly contents: vscode.DataTransferFile; readonly overwrite: boolean };\n\t\t}\n\n\t\tconst pathGenerator = new NewFilePathGenerator();\n\t\tconst fileEntries = coalesce(await Promise.all(Array.from(dataTransfer, async ([mime, item]): Promise<FileEntry | undefined> => {\n\t\t\tconst mediaKind = getMediaKindForMime(mime);\n\t\t\tif (!mediaKind) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst file = item?.asFile();\n\t\t\tif (!file) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (file.uri) {\n\t\t\t\t// If the file is already in a workspace, we don't want to create a copy of it\n\t\t\t\tconst workspaceFolder = vscode.workspace.getWorkspaceFolder(file.uri);\n\t\t\t\tif (workspaceFolder) {\n\t\t\t\t\treturn { uri: file.uri, kind: mediaKind };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst newFile = await pathGenerator.getNewFilePath(document, file, token);\n\t\t\tif (!newFile) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn { uri: newFile.uri, kind: mediaKind, newFile: { contents: file, overwrite: newFile.overwrite } };\n\t\t})));\n\t\tif (!fileEntries.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snippet = createUriListSnippet(document.uri, fileEntries);\n\t\tif (!snippet) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst additionalEdits = new vscode.WorkspaceEdit();\n\t\tfor (const entry of fileEntries) {\n\t\t\tif (entry.newFile) {\n\t\t\t\tadditionalEdits.createFile(entry.uri, {\n\t\t\t\t\tcontents: entry.newFile.contents,\n\t\t\t\t\toverwrite: entry.newFile.overwrite,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst { label, kind } = getSnippetLabelAndKind(snippet);\n\t\treturn {\n\t\t\tsnippet: snippet.snippet,\n\t\t\tlabel,\n\t\t\tkind,\n\t\t\tadditionalEdits,\n\t\t\tyieldTo: [],\n\t\t};\n\t}\n}\n\nfunction textMatchesUriList(text: string, uriList: UriList): boolean {\n\tif (text === uriList.entries[0].str) {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tconst uri = vscode.Uri.parse(text);\n\t\treturn uriList.entries.some(entry => entry.uri.toString() === uri.toString());\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function registerResourceDropOrPasteSupport(selector: vscode.DocumentSelector, parser: IMdParser): vscode.Disposable {\n\tconst providedEditKinds = [\n\t\tbaseLinkEditKind,\n\t\tlinkEditKind,\n\t\timageEditKind,\n\t\taudioEditKind,\n\t\tvideoEditKind,\n\t];\n\n\treturn vscode.Disposable.from(\n\t\tvscode.languages.registerDocumentPasteEditProvider(selector, new ResourcePasteOrDropProvider(parser), {\n\t\t\tprovidedPasteEditKinds: providedEditKinds,\n\t\t\tpasteMimeTypes: ResourcePasteOrDropProvider.mimeTypes,\n\t\t}),\n\t\tvscode.languages.registerDocumentDropEditProvider(selector, new ResourcePasteOrDropProvider(parser), {\n\t\t\tprovidedDropEditKinds: providedEditKinds,\n\t\t\tdropMimeTypes: ResourcePasteOrDropProvider.mimeTypes,\n\t\t}),\n\t);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/copyFiles/newFilePathGenerator.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as picomatch from 'picomatch';\nimport * as vscode from 'vscode';\nimport { Utils } from 'vscode-uri';\nimport { getParentDocumentUri } from '../../util/document';\nimport { CopyFileConfiguration, getCopyFileConfiguration, parseGlob, resolveCopyDestination } from './copyFiles';\n\n\nexport class NewFilePathGenerator {\n\n\tprivate readonly _usedPaths = new Set<string>();\n\n\tasync getNewFilePath(\n\t\tdocument: vscode.TextDocument,\n\t\tfile: vscode.DataTransferFile,\n\t\ttoken: vscode.CancellationToken\n\t): Promise<{ readonly uri: vscode.Uri; readonly overwrite: boolean } | undefined> {\n\t\tconst config = getCopyFileConfiguration(document);\n\t\tconst desiredPath = getDesiredNewFilePath(config, document, file);\n\n\t\tconst root = Utils.dirname(desiredPath);\n\t\tconst ext = Utils.extname(desiredPath);\n\t\tlet baseName = Utils.basename(desiredPath);\n\t\tbaseName = baseName.slice(0, baseName.length - ext.length);\n\t\tfor (let i = 0; ; ++i) {\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst name = i === 0 ? baseName : `${baseName}-${i}`;\n\t\t\tconst uri = vscode.Uri.joinPath(root, name + ext);\n\t\t\tif (this._wasPathAlreadyUsed(uri)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Try overwriting if it already exists\n\t\t\tif (config.overwriteBehavior === 'overwrite') {\n\t\t\t\tthis._usedPaths.add(uri.toString());\n\t\t\t\treturn { uri, overwrite: true };\n\t\t\t}\n\n\t\t\t// Otherwise we need to check the fs to see if it exists\n\t\t\ttry {\n\t\t\t\tawait vscode.workspace.fs.stat(uri);\n\t\t\t} catch {\n\t\t\t\tif (!this._wasPathAlreadyUsed(uri)) {\n\t\t\t\t\t// Does not exist\n\t\t\t\t\tthis._usedPaths.add(uri.toString());\n\t\t\t\t\treturn { uri, overwrite: false };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _wasPathAlreadyUsed(uri: vscode.Uri) {\n\t\treturn this._usedPaths.has(uri.toString());\n\t}\n}\n\nexport function getDesiredNewFilePath(config: CopyFileConfiguration, document: vscode.TextDocument, file: vscode.DataTransferFile): vscode.Uri {\n\tconst docUri = getParentDocumentUri(document.uri);\n\tfor (const [rawGlob, rawDest] of Object.entries(config.destination)) {\n\t\tfor (const glob of parseGlob(rawGlob)) {\n\t\t\tif (picomatch.isMatch(docUri.path, glob, { dot: true })) {\n\t\t\t\treturn resolveCopyDestination(docUri, file.name, rawDest, uri => vscode.workspace.getWorkspaceFolder(uri)?.uri);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Default to next to current file\n\treturn vscode.Uri.joinPath(Utils.dirname(docUri), file.name);\n}\n\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/copyFiles/pasteUrlProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { IMdParser } from '../../markdownEngine';\nimport { Mime } from '../../util/mimes';\nimport { UriList } from '../../util/uriList';\nimport { createInsertUriListEdit, linkEditKind } from './shared';\nimport { InsertMarkdownLink, findValidUriInText, shouldInsertMarkdownLinkByDefault } from './smartDropOrPaste';\n\n/**\n * Adds support for pasting text uris to create markdown links.\n *\n * This only applies to `text/plain`. Other mimes like `text/uri-list` are handled by ResourcePasteOrDropProvider.\n */\nclass PasteUrlEditProvider implements vscode.DocumentPasteEditProvider {\n\n\tpublic static readonly kind = linkEditKind;\n\n\tpublic static readonly pasteMimeTypes = [Mime.textPlain];\n\n\tconstructor(\n\t\tprivate readonly _parser: IMdParser,\n\t) { }\n\n\tasync provideDocumentPasteEdits(\n\t\tdocument: vscode.TextDocument,\n\t\tranges: readonly vscode.Range[],\n\t\tdataTransfer: vscode.DataTransfer,\n\t\tcontext: vscode.DocumentPasteEditContext,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<vscode.DocumentPasteEdit[] | undefined> {\n\t\tconst pasteUrlSetting = vscode.workspace.getConfiguration('markdown', document)\n\t\t\t.get<InsertMarkdownLink>('editor.pasteUrlAsFormattedLink.enabled', InsertMarkdownLink.SmartWithSelection);\n\t\tif (pasteUrlSetting === InsertMarkdownLink.Never) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst item = dataTransfer.get(Mime.textPlain);\n\t\tconst text = await item?.asString();\n\t\tif (token.isCancellationRequested || !text) {\n\t\t\treturn;\n\t\t}\n\n\t\t// TODO: If the user has explicitly requested to paste as a markdown link,\n\t\t// try to paste even if we don't have a valid uri\n\t\tconst uriText = findValidUriInText(text);\n\t\tif (!uriText) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst edit = createInsertUriListEdit(document, ranges, UriList.from(uriText), {\n\t\t\tlinkKindHint: context.only,\n\t\t\tpreserveAbsoluteUris: true\n\t\t});\n\t\tif (!edit) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pasteEdit = new vscode.DocumentPasteEdit('', edit.label, PasteUrlEditProvider.kind);\n\t\tconst workspaceEdit = new vscode.WorkspaceEdit();\n\t\tworkspaceEdit.set(document.uri, edit.edits);\n\t\tpasteEdit.additionalEdit = workspaceEdit;\n\n\t\tif (!(await shouldInsertMarkdownLinkByDefault(this._parser, document, pasteUrlSetting, ranges, token))) {\n\t\t\tpasteEdit.yieldTo = [\n\t\t\t\tvscode.DocumentDropOrPasteEditKind.Text,\n\t\t\t\tvscode.DocumentDropOrPasteEditKind.Empty.append('uri')\n\t\t\t];\n\t\t}\n\n\t\treturn [pasteEdit];\n\t}\n}\n\nexport function registerPasteUrlSupport(selector: vscode.DocumentSelector, parser: IMdParser) {\n\treturn vscode.languages.registerDocumentPasteEditProvider(selector, new PasteUrlEditProvider(parser), {\n\t\tprovidedPasteEditKinds: [PasteUrlEditProvider.kind],\n\t\tpasteMimeTypes: PasteUrlEditProvider.pasteMimeTypes,\n\t});\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/copyFiles/shared.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport * as URI from 'vscode-uri';\nimport { ITextDocument } from '../../types/textDocument';\nimport { getDocumentDir } from '../../util/document';\nimport { Schemes } from '../../util/schemes';\nimport { UriList } from '../../util/uriList';\nimport { resolveSnippet } from './snippets';\nimport { mediaFileExtensions, MediaKind } from '../../util/mimes';\n\n/** Base kind for any sort of markdown link, including both path and media links */\nexport const baseLinkEditKind = vscode.DocumentDropOrPasteEditKind.Empty.append('markdown', 'link');\n\n/** Kind for normal markdown links, i.e. `[text](path/to/file.md)` */\nexport const linkEditKind = baseLinkEditKind.append('uri');\n\nexport const imageEditKind = baseLinkEditKind.append('image');\nexport const audioEditKind = baseLinkEditKind.append('audio');\nexport const videoEditKind = baseLinkEditKind.append('video');\n\nexport function getSnippetLabelAndKind(counter: { readonly insertedAudioCount: number; readonly insertedVideoCount: number; readonly insertedImageCount: number; readonly insertedLinkCount: number }): {\n\tlabel: string;\n\tkind: vscode.DocumentDropOrPasteEditKind;\n} {\n\tif (counter.insertedVideoCount > 0 || counter.insertedAudioCount > 0) {\n\t\t// Any media plus links\n\t\tif (counter.insertedLinkCount > 0) {\n\t\t\treturn {\n\t\t\t\tlabel: vscode.l10n.t('Insert Markdown Media and Links'),\n\t\t\t\tkind: baseLinkEditKind,\n\t\t\t};\n\t\t}\n\n\t\t// Any media plus images\n\t\tif (counter.insertedImageCount > 0) {\n\t\t\treturn {\n\t\t\t\tlabel: vscode.l10n.t('Insert Markdown Media and Images'),\n\t\t\t\tkind: baseLinkEditKind,\n\t\t\t};\n\t\t}\n\n\t\t// Audio only\n\t\tif (counter.insertedAudioCount > 0 && !counter.insertedVideoCount) {\n\t\t\treturn {\n\t\t\t\tlabel: vscode.l10n.t('Insert Markdown Audio'),\n\t\t\t\tkind: audioEditKind,\n\t\t\t};\n\t\t}\n\n\t\t// Video only\n\t\tif (counter.insertedVideoCount > 0 && !counter.insertedAudioCount) {\n\t\t\treturn {\n\t\t\t\tlabel: vscode.l10n.t('Insert Markdown Video'),\n\t\t\t\tkind: videoEditKind,\n\t\t\t};\n\t\t}\n\n\t\t// Mix of audio and video\n\t\treturn {\n\t\t\tlabel: vscode.l10n.t('Insert Markdown Media'),\n\t\t\tkind: baseLinkEditKind,\n\t\t};\n\t} else if (counter.insertedImageCount > 0) {\n\t\t// Mix of images and links\n\t\tif (counter.insertedLinkCount > 0) {\n\t\t\treturn {\n\t\t\t\tlabel: vscode.l10n.t('Insert Markdown Images and Links'),\n\t\t\t\tkind: baseLinkEditKind,\n\t\t\t};\n\t\t}\n\n\t\t// Just images\n\t\treturn {\n\t\t\tlabel: counter.insertedImageCount > 1\n\t\t\t\t? vscode.l10n.t('Insert Markdown Images')\n\t\t\t\t: vscode.l10n.t('Insert Markdown Image'),\n\t\t\tkind: imageEditKind,\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\tlabel: counter.insertedLinkCount > 1\n\t\t\t\t? vscode.l10n.t('Insert Markdown Links')\n\t\t\t\t: vscode.l10n.t('Insert Markdown Link'),\n\t\t\tkind: linkEditKind,\n\t\t};\n\t}\n}\n\nexport function createInsertUriListEdit(\n\tdocument: ITextDocument,\n\tranges: readonly vscode.Range[],\n\turlList: UriList,\n\toptions?: UriListSnippetOptions,\n): { edits: vscode.SnippetTextEdit[]; label: string; kind: vscode.DocumentDropOrPasteEditKind } | undefined {\n\tif (!ranges.length || !urlList.entries.length) {\n\t\treturn;\n\t}\n\n\tconst edits: vscode.SnippetTextEdit[] = [];\n\n\tlet insertedLinkCount = 0;\n\tlet insertedImageCount = 0;\n\tlet insertedAudioCount = 0;\n\tlet insertedVideoCount = 0;\n\n\t// Use 1 for all empty ranges but give non-empty range unique indices starting after 1\n\tlet placeHolderStartIndex = 1 + urlList.entries.length;\n\n\t// Sort ranges by start position\n\tconst orderedRanges = [...ranges].sort((a, b) => a.start.compareTo(b.start));\n\tconst allRangesAreEmpty = orderedRanges.every(range => range.isEmpty);\n\n\tfor (const range of orderedRanges) {\n\t\tconst snippet = createUriListSnippet(document.uri, urlList.entries, {\n\t\t\tplaceholderText: range.isEmpty ? undefined : document.getText(range),\n\t\t\tplaceholderStartIndex: allRangesAreEmpty ? 1 : placeHolderStartIndex,\n\t\t\t...options,\n\t\t});\n\t\tif (!snippet) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tinsertedLinkCount += snippet.insertedLinkCount;\n\t\tinsertedImageCount += snippet.insertedImageCount;\n\t\tinsertedAudioCount += snippet.insertedAudioCount;\n\t\tinsertedVideoCount += snippet.insertedVideoCount;\n\n\t\tplaceHolderStartIndex += urlList.entries.length;\n\n\t\tedits.push(new vscode.SnippetTextEdit(range, snippet.snippet));\n\t}\n\n\tconst { label, kind } = getSnippetLabelAndKind({ insertedAudioCount, insertedVideoCount, insertedImageCount, insertedLinkCount });\n\treturn { edits, label, kind };\n}\n\ninterface UriListSnippetOptions {\n\treadonly placeholderText?: string;\n\n\treadonly placeholderStartIndex?: number;\n\n\t/**\n\t * Hints how links should be inserted, e.g. as normal markdown link or as an image.\n\t *\n\t * By default this is inferred from the uri. If you use `media`, we will insert the resource as an image, video, or audio.\n\t */\n\treadonly linkKindHint?: vscode.DocumentDropOrPasteEditKind | 'media';\n\n\treadonly separator?: string;\n\n\t/**\n\t * Prevents uris from being made relative to the document.\n\t *\n\t * This is mostly useful for `file:` uris.\n\t */\n\treadonly preserveAbsoluteUris?: boolean;\n}\n\n\nexport interface UriSnippet {\n\treadonly snippet: vscode.SnippetString;\n\treadonly insertedLinkCount: number;\n\treadonly insertedImageCount: number;\n\treadonly insertedVideoCount: number;\n\treadonly insertedAudioCount: number;\n}\n\nexport function createUriListSnippet(\n\tdocument: vscode.Uri,\n\turis: ReadonlyArray<{\n\t\treadonly uri: vscode.Uri;\n\t\treadonly str?: string;\n\t\treadonly kind?: MediaKind;\n\t}>,\n\toptions?: UriListSnippetOptions,\n): UriSnippet | undefined {\n\tif (!uris.length) {\n\t\treturn;\n\t}\n\n\tconst documentDir = getDocumentDir(document);\n\tconst config = vscode.workspace.getConfiguration('markdown', document);\n\tconst title = options?.placeholderText || 'Title';\n\n\tlet insertedLinkCount = 0;\n\tlet insertedImageCount = 0;\n\tlet insertedAudioCount = 0;\n\tlet insertedVideoCount = 0;\n\n\tconst snippet = new vscode.SnippetString();\n\tlet placeholderIndex = options?.placeholderStartIndex ?? 1;\n\n\turis.forEach((uri, i) => {\n\t\tconst mdPath = (!options?.preserveAbsoluteUris ? getRelativeMdPath(documentDir, uri.uri) : undefined) ?? uri.str ?? uri.uri.toString();\n\n\t\tconst desiredKind = getDesiredLinkKind(uri.uri, uri.kind, options);\n\n\t\tif (desiredKind === DesiredLinkKind.Link) {\n\t\t\tinsertedLinkCount++;\n\t\t\tsnippet.appendText('[');\n\t\t\tsnippet.appendPlaceholder(escapeBrackets(options?.placeholderText ?? 'text'), placeholderIndex);\n\t\t\tsnippet.appendText(`](${escapeMarkdownLinkPath(mdPath)})`);\n\t\t} else {\n\t\t\tconst insertAsVideo = desiredKind === DesiredLinkKind.Video;\n\t\t\tconst insertAsAudio = desiredKind === DesiredLinkKind.Audio;\n\t\t\tif (insertAsVideo || insertAsAudio) {\n\t\t\t\tif (insertAsVideo) {\n\t\t\t\t\tinsertedVideoCount++;\n\t\t\t\t} else {\n\t\t\t\t\tinsertedAudioCount++;\n\t\t\t\t}\n\t\t\t\tconst mediaSnippet = insertAsVideo\n\t\t\t\t\t? config.get<string>('editor.filePaste.videoSnippet', '<video controls src=\"${src}\" title=\"${title}\"></video>')\n\t\t\t\t\t: config.get<string>('editor.filePaste.audioSnippet', '<audio controls src=\"${src}\" title=\"${title}\"></audio>');\n\t\t\t\tsnippet.value += resolveSnippet(mediaSnippet, new Map<string, string>([\n\t\t\t\t\t['src', mdPath],\n\t\t\t\t\t['title', `\\${${placeholderIndex++}:${title}}`],\n\t\t\t\t]));\n\t\t\t} else {\n\t\t\t\tinsertedImageCount++;\n\t\t\t\tsnippet.appendText('![');\n\t\t\t\tconst placeholderText = escapeBrackets(options?.placeholderText || 'alt text');\n\t\t\t\tsnippet.appendPlaceholder(placeholderText, placeholderIndex);\n\t\t\t\tsnippet.appendText(`](${escapeMarkdownLinkPath(mdPath)})`);\n\t\t\t}\n\t\t}\n\n\t\tif (i < uris.length - 1 && uris.length > 1) {\n\t\t\tsnippet.appendText(options?.separator ?? ' ');\n\t\t}\n\t});\n\n\treturn { snippet, insertedAudioCount, insertedVideoCount, insertedImageCount, insertedLinkCount };\n}\n\nenum DesiredLinkKind {\n\tLink,\n\tImage,\n\tVideo,\n\tAudio,\n}\n\nfunction getDesiredLinkKind(uri: vscode.Uri, uriFileKind: MediaKind | undefined, options: UriListSnippetOptions | undefined): DesiredLinkKind {\n\tif (options?.linkKindHint instanceof vscode.DocumentDropOrPasteEditKind) {\n\t\tif (linkEditKind.contains(options.linkKindHint)) {\n\t\t\treturn DesiredLinkKind.Link;\n\t\t} else if (imageEditKind.contains(options.linkKindHint)) {\n\t\t\treturn DesiredLinkKind.Image;\n\t\t} else if (audioEditKind.contains(options.linkKindHint)) {\n\t\t\treturn DesiredLinkKind.Audio;\n\t\t} else if (videoEditKind.contains(options.linkKindHint)) {\n\t\t\treturn DesiredLinkKind.Video;\n\t\t}\n\t}\n\n\tif (typeof uriFileKind !== 'undefined') {\n\t\tswitch (uriFileKind) {\n\t\t\tcase MediaKind.Video: return DesiredLinkKind.Video;\n\t\t\tcase MediaKind.Audio: return DesiredLinkKind.Audio;\n\t\t\tcase MediaKind.Image: return DesiredLinkKind.Image;\n\t\t}\n\t}\n\n\tconst normalizedExt = URI.Utils.extname(uri).toLowerCase().replace('.', '');\n\tif (options?.linkKindHint === 'media' || mediaFileExtensions.has(normalizedExt)) {\n\t\tswitch (mediaFileExtensions.get(normalizedExt)) {\n\t\t\tcase MediaKind.Video: return DesiredLinkKind.Video;\n\t\t\tcase MediaKind.Audio: return DesiredLinkKind.Audio;\n\t\t\tdefault: return DesiredLinkKind.Image;\n\t\t}\n\t}\n\n\treturn DesiredLinkKind.Link;\n}\n\nfunction getRelativeMdPath(dir: vscode.Uri | undefined, file: vscode.Uri): string | undefined {\n\tif (dir && dir.scheme === file.scheme && dir.authority === file.authority) {\n\t\tif (file.scheme === Schemes.file) {\n\t\t\t// On windows, we must use the native `path.relative` to generate the relative path\n\t\t\t// so that drive-letters are resolved cast insensitively. However we then want to\n\t\t\t// convert back to a posix path to insert in to the document.\n\t\t\tconst relativePath = path.relative(dir.fsPath, file.fsPath);\n\t\t\treturn path.posix.normalize(relativePath.split(path.sep).join(path.posix.sep));\n\t\t}\n\n\t\treturn path.posix.relative(dir.path, file.path);\n\t}\n\treturn undefined;\n}\n\nfunction escapeMarkdownLinkPath(mdPath: string): string {\n\tif (needsBracketLink(mdPath)) {\n\t\treturn '<' + mdPath.replaceAll('<', '\\\\<').replaceAll('>', '\\\\>') + '>';\n\t}\n\n\treturn mdPath;\n}\n\nfunction escapeBrackets(value: string): string {\n\tvalue = value.replace(/[\\[\\]]/g, '\\\\$&'); // CodeQL [SM02383] The Markdown is fully sanitized after being rendered.\n\treturn value;\n}\n\nfunction needsBracketLink(mdPath: string): boolean {\n\t// Links with whitespace or control characters must be enclosed in brackets\n\tif (mdPath.startsWith('<') || /\\s|[\\u007F\\u0000-\\u001f]/.test(mdPath)) {\n\t\treturn true;\n\t}\n\n\t// Check if the link has mis-matched parens\n\tif (!/[\\(\\)]/.test(mdPath)) {\n\t\treturn false;\n\t}\n\n\tlet previousChar = '';\n\tlet nestingCount = 0;\n\tfor (const char of mdPath) {\n\t\tif (char === '(' && previousChar !== '\\\\') {\n\t\t\tnestingCount++;\n\t\t} else if (char === ')' && previousChar !== '\\\\') {\n\t\t\tnestingCount--;\n\t\t}\n\n\t\tif (nestingCount < 0) {\n\t\t\treturn true;\n\t\t}\n\t\tpreviousChar = char;\n\t}\n\n\treturn nestingCount > 0;\n}\n\nexport interface DropOrPasteEdit {\n\treadonly snippet: vscode.SnippetString;\n\treadonly kind: vscode.DocumentDropOrPasteEditKind;\n\treadonly label: string;\n\treadonly additionalEdits: vscode.WorkspaceEdit;\n\treadonly yieldTo: vscode.DocumentDropOrPasteEditKind[];\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/copyFiles/smartDropOrPaste.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { IMdParser } from '../../markdownEngine';\nimport { ITextDocument } from '../../types/textDocument';\nimport { Schemes } from '../../util/schemes';\n\nconst smartPasteLineRegexes = [\n\t{ regex: /(\\[[^\\[\\]]*](?:\\([^\\(\\)]*\\)|\\[[^\\[\\]]*]))/g }, // In a Markdown link\n\t{ regex: /\\$\\$[\\s\\S]*?\\$\\$/gm }, // In a fenced math block\n\t{ regex: /`[^`]*`/g }, // In inline code\n\t{ regex: /\\$[^$]*\\$/g }, // In inline math\n\t{ regex: /<[^<>\\s]*>/g }, // Autolink\n\t{ regex: /^[ ]{0,3}\\[\\w+\\]:\\s.*$/g, isWholeLine: true }, // Block link definition (needed as tokens are not generated for these)\n];\n\nexport async function shouldInsertMarkdownLinkByDefault(\n\tparser: IMdParser,\n\tdocument: ITextDocument,\n\tpasteUrlSetting: InsertMarkdownLink,\n\tranges: readonly vscode.Range[],\n\ttoken: vscode.CancellationToken\n): Promise<boolean> {\n\tswitch (pasteUrlSetting) {\n\t\tcase InsertMarkdownLink.Always: {\n\t\t\treturn true;\n\t\t}\n\t\tcase InsertMarkdownLink.Smart: {\n\t\t\treturn checkSmart();\n\t\t}\n\t\tcase InsertMarkdownLink.SmartWithSelection: {\n\t\t\t// At least one range must not be empty\n\t\t\tif (!ranges.some(range => document.getText(range).trim().length > 0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// And all ranges must be smart\n\t\t\treturn checkSmart();\n\t\t}\n\t\tdefault: {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync function checkSmart(): Promise<boolean> {\n\t\treturn (await Promise.all(ranges.map(range => shouldSmartPasteForSelection(parser, document, range, token)))).every(x => x);\n\t}\n}\n\nconst textTokenTypes = new Set([\n\t'paragraph_open',\n\t'inline',\n\t'heading_open',\n\t'ordered_list_open',\n\t'bullet_list_open',\n\t'list_item_open',\n\t'blockquote_open',\n]);\n\nasync function shouldSmartPasteForSelection(\n\tparser: IMdParser,\n\tdocument: ITextDocument,\n\tselectedRange: vscode.Range,\n\ttoken: vscode.CancellationToken\n): Promise<boolean> {\n\t// Disable for multi-line selections\n\tif (selectedRange.start.line !== selectedRange.end.line) {\n\t\treturn false;\n\t}\n\n\tconst rangeText = document.getText(selectedRange);\n\t// Disable when the selection is already a link\n\tif (findValidUriInText(rangeText)) {\n\t\treturn false;\n\t}\n\n\tif (/\\[.*\\]\\(.*\\)/.test(rangeText) || /!\\[.*\\]\\(.*\\)/.test(rangeText)) {\n\t\treturn false;\n\t}\n\n\t// Check if selection is inside a special block level element using markdown engine\n\tconst tokens = await parser.tokenize(document);\n\tif (token.isCancellationRequested) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < tokens.length; i++) {\n\t\tconst token = tokens[i];\n\t\tif (!token.map) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.map[0] <= selectedRange.start.line && token.map[1] > selectedRange.start.line) {\n\t\t\tif (!textTokenTypes.has(token.type)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// Special case for html such as:\n\t\t//\n\t\t// <b>\n\t\t// |\n\t\t// </b>\n\t\t//\n\t\t// In this case pasting will cause the html block to be created even though the cursor is not currently inside a block\n\t\tif (token.type === 'html_block' && token.map[1] === selectedRange.start.line) {\n\t\t\tconst nextToken = tokens.at(i + 1);\n\t\t\t// The next token does not need to be a html_block, but it must be on the next line\n\t\t\tif (nextToken?.map?.[0] === selectedRange.end.line + 1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Run additional regex checks on the current line to check if we are inside an inline element\n\tconst line = document.getText(new vscode.Range(selectedRange.start.line, 0, selectedRange.start.line, Number.MAX_SAFE_INTEGER));\n\tfor (const regex of smartPasteLineRegexes) {\n\t\tfor (const match of line.matchAll(regex.regex)) {\n\t\t\tif (match.index === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (regex.isWholeLine) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (selectedRange.start.character > match.index && selectedRange.start.character < match.index + match[0].length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\nconst externalUriSchemes: ReadonlySet<string> = new Set([\n\tSchemes.http,\n\tSchemes.https,\n\tSchemes.mailto,\n\tSchemes.file,\n]);\n\nexport function findValidUriInText(text: string): string | undefined {\n\tconst trimmedUrlList = text.trim();\n\n\tif (!/^\\S+$/.test(trimmedUrlList) // Uri must consist of a single sequence of characters without spaces\n\t\t|| !trimmedUrlList.includes(':') // And it must have colon somewhere for the scheme. We will verify the schema again later\n\t) {\n\t\treturn;\n\t}\n\n\tlet uri: vscode.Uri;\n\ttry {\n\t\turi = vscode.Uri.parse(trimmedUrlList);\n\t} catch {\n\t\t// Could not parse\n\t\treturn;\n\t}\n\n\t// `Uri.parse` is lenient and will return a `file:` uri even for non-uri text such as `abc`\n\t// Make sure that the resolved scheme starts the original text\n\tif (!trimmedUrlList.toLowerCase().startsWith(uri.scheme.toLowerCase() + ':')) {\n\t\treturn;\n\t}\n\n\t// Only enable for an allow list of schemes. Otherwise this can be accidentally activated for non-uri text\n\t// such as `c:\\abc` or `value:foo`\n\tif (!externalUriSchemes.has(uri.scheme.toLowerCase())) {\n\t\treturn;\n\t}\n\n\t// Some part of the uri must not be empty\n\t// This disables the feature for text such as `http:`\n\tif (!uri.authority && uri.path.length < 2 && !uri.query && !uri.fragment) {\n\t\treturn;\n\t}\n\n\treturn trimmedUrlList;\n}\n\nexport enum InsertMarkdownLink {\n\tAlways = 'always',\n\tSmartWithSelection = 'smartWithSelection',\n\tSmart = 'smart',\n\tNever = 'never'\n}\n\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/copyFiles/snippets.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Resolves variables in a VS Code snippet style string\n */\nexport function resolveSnippet(snippetString: string, vars: ReadonlyMap<string, string>): string {\n\treturn snippetString.replaceAll(/(?<escape>\\\\\\$)|(?<!\\\\)\\$\\{(?<name>\\w+)(?:\\/(?<pattern>(?:\\\\\\/|[^\\}])+?)\\/(?<replacement>(?:\\\\\\/|[^\\}])+?)\\/)?\\}/g, (match, _escape, name, pattern, replacement, _offset, _str, groups) => {\n\t\tif (groups?.['escape']) {\n\t\t\treturn '$';\n\t\t}\n\n\t\tconst entry = vars.get(name);\n\t\tif (typeof entry !== 'string') {\n\t\t\treturn match;\n\t\t}\n\n\t\tif (pattern && replacement) {\n\t\t\treturn entry.replace(new RegExp(replaceTransformEscapes(pattern)), replaceTransformEscapes(replacement));\n\t\t}\n\n\t\treturn entry;\n\t});\n}\n\n\nfunction replaceTransformEscapes(str: string): string {\n\treturn str.replaceAll(/\\\\\\//g, '/');\n}\n\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/diagnostics.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { CommandManager } from '../commandManager';\n\n\n// Copied from markdown language service\nexport enum DiagnosticCode {\n\tlink_noSuchReferences = 'link.no-such-reference',\n\tlink_noSuchHeaderInOwnFile = 'link.no-such-header-in-own-file',\n\tlink_noSuchFile = 'link.no-such-file',\n\tlink_noSuchHeaderInFile = 'link.no-such-header-in-file',\n}\n\n\nclass AddToIgnoreLinksQuickFixProvider implements vscode.CodeActionProvider {\n\n\tprivate static readonly _addToIgnoreLinksCommandId = '_markdown.addToIgnoreLinks';\n\n\tprivate static readonly _metadata: vscode.CodeActionProviderMetadata = {\n\t\tprovidedCodeActionKinds: [\n\t\t\tvscode.CodeActionKind.QuickFix\n\t\t],\n\t};\n\n\tpublic static register(selector: vscode.DocumentSelector, commandManager: CommandManager): vscode.Disposable {\n\t\tconst reg = vscode.languages.registerCodeActionsProvider(selector, new AddToIgnoreLinksQuickFixProvider(), AddToIgnoreLinksQuickFixProvider._metadata);\n\t\tconst commandReg = commandManager.register({\n\t\t\tid: AddToIgnoreLinksQuickFixProvider._addToIgnoreLinksCommandId,\n\t\t\texecute(resource: vscode.Uri, path: string) {\n\t\t\t\tconst settingId = 'validate.ignoredLinks';\n\t\t\t\tconst config = vscode.workspace.getConfiguration('markdown', resource);\n\t\t\t\tconst paths = new Set(config.get<string[]>(settingId, []));\n\t\t\t\tpaths.add(path);\n\t\t\t\tconfig.update(settingId, [...paths], vscode.ConfigurationTarget.WorkspaceFolder);\n\t\t\t}\n\t\t});\n\t\treturn vscode.Disposable.from(reg, commandReg);\n\t}\n\n\tprovideCodeActions(document: vscode.TextDocument, _range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, _token: vscode.CancellationToken): vscode.ProviderResult<(vscode.CodeAction | vscode.Command)[]> {\n\t\tconst fixes: vscode.CodeAction[] = [];\n\n\t\tfor (const diagnostic of context.diagnostics) {\n\t\t\tswitch (diagnostic.code) {\n\t\t\t\tcase DiagnosticCode.link_noSuchReferences:\n\t\t\t\tcase DiagnosticCode.link_noSuchHeaderInOwnFile:\n\t\t\t\tcase DiagnosticCode.link_noSuchFile:\n\t\t\t\tcase DiagnosticCode.link_noSuchHeaderInFile: {\n\t\t\t\t\tconst hrefText = (diagnostic as any).data?.hrefText;\n\t\t\t\t\tif (hrefText) {\n\t\t\t\t\t\tconst fix = new vscode.CodeAction(\n\t\t\t\t\t\t\tvscode.l10n.t(\"Exclude '{0}' from link validation.\", hrefText),\n\t\t\t\t\t\t\tvscode.CodeActionKind.QuickFix);\n\n\t\t\t\t\t\tfix.command = {\n\t\t\t\t\t\t\tcommand: AddToIgnoreLinksQuickFixProvider._addToIgnoreLinksCommandId,\n\t\t\t\t\t\t\ttitle: '',\n\t\t\t\t\t\t\targuments: [document.uri, hrefText],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfixes.push(fix);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fixes;\n\t}\n}\n\nfunction registerMarkdownStatusItem(selector: vscode.DocumentSelector, commandManager: CommandManager): vscode.Disposable {\n\tconst statusItem = vscode.languages.createLanguageStatusItem('markdownStatus', selector);\n\n\tconst enabledSettingId = 'validate.enabled';\n\tconst commandId = '_markdown.toggleValidation';\n\n\tconst commandSub = commandManager.register({\n\t\tid: commandId,\n\t\texecute: (enabled: boolean) => {\n\t\t\tvscode.workspace.getConfiguration('markdown').update(enabledSettingId, enabled);\n\t\t}\n\t});\n\n\tconst update = () => {\n\t\tconst activeDoc = vscode.window.activeTextEditor?.document;\n\t\tconst markdownDoc = activeDoc?.languageId === 'markdown' ? activeDoc : undefined;\n\n\t\tconst enabled = vscode.workspace.getConfiguration('markdown', markdownDoc).get(enabledSettingId);\n\t\tif (enabled) {\n\t\t\tstatusItem.text = vscode.l10n.t('Markdown link validation enabled');\n\t\t\tstatusItem.command = {\n\t\t\t\tcommand: commandId,\n\t\t\t\targuments: [false],\n\t\t\t\ttitle: vscode.l10n.t('Disable'),\n\t\t\t\ttooltip: vscode.l10n.t('Disable validation of Markdown links'),\n\t\t\t};\n\t\t} else {\n\t\t\tstatusItem.text = vscode.l10n.t('Markdown link validation disabled');\n\t\t\tstatusItem.command = {\n\t\t\t\tcommand: commandId,\n\t\t\t\targuments: [true],\n\t\t\t\ttitle: vscode.l10n.t('Enable'),\n\t\t\t\ttooltip: vscode.l10n.t('Enable validation of Markdown links'),\n\t\t\t};\n\t\t}\n\t};\n\tupdate();\n\n\treturn vscode.Disposable.from(\n\t\tstatusItem,\n\t\tcommandSub,\n\t\tvscode.workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('markdown.' + enabledSettingId)) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t}),\n\t);\n}\n\nexport function registerDiagnosticSupport(\n\tselector: vscode.DocumentSelector,\n\tcommandManager: CommandManager,\n): vscode.Disposable {\n\treturn vscode.Disposable.from(\n\t\tAddToIgnoreLinksQuickFixProvider.register(selector, commandManager),\n\t\tregisterMarkdownStatusItem(selector, commandManager),\n\t);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/fileReferences.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport type * as lsp from 'vscode-languageserver-types';\nimport { MdLanguageClient } from '../client/client';\nimport { Command, CommandManager } from '../commandManager';\n\n\nexport class FindFileReferencesCommand implements Command {\n\n\tpublic readonly id = 'markdown.findAllFileReferences';\n\n\tconstructor(\n\t\tprivate readonly _client: MdLanguageClient,\n\t) { }\n\n\tpublic async execute(resource?: vscode.Uri) {\n\t\tresource ??= vscode.window.activeTextEditor?.document.uri;\n\t\tif (!resource) {\n\t\t\tvscode.window.showErrorMessage(vscode.l10n.t(\"Find file references failed. No resource provided.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tawait vscode.window.withProgress({\n\t\t\tlocation: vscode.ProgressLocation.Window,\n\t\t\ttitle: vscode.l10n.t(\"Finding file references\")\n\t\t}, async (_progress, token) => {\n\t\t\tconst locations = (await this._client.getReferencesToFileInWorkspace(resource, token)).map(loc => {\n\t\t\t\treturn new vscode.Location(vscode.Uri.parse(loc.uri), convertRange(loc.range));\n\t\t\t});\n\n\t\t\tconst config = vscode.workspace.getConfiguration('references');\n\t\t\tconst existingSetting = config.inspect<string>('preferredLocation');\n\n\t\t\tawait config.update('preferredLocation', 'view');\n\t\t\ttry {\n\t\t\t\tawait vscode.commands.executeCommand('editor.action.showReferences', resource, new vscode.Position(0, 0), locations);\n\t\t\t} finally {\n\t\t\t\tawait config.update('preferredLocation', existingSetting?.workspaceFolderValue ?? existingSetting?.workspaceValue);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport function convertRange(range: lsp.Range): vscode.Range {\n\treturn new vscode.Range(range.start.line, range.start.character, range.end.line, range.end.character);\n}\n\nexport function registerFindFileReferenceSupport(\n\tcommandManager: CommandManager,\n\tclient: MdLanguageClient,\n): vscode.Disposable {\n\treturn commandManager.register(new FindFileReferencesCommand(client));\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/linkUpdater.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as picomatch from 'picomatch';\nimport * as vscode from 'vscode';\nimport { TextDocumentEdit } from 'vscode-languageclient';\nimport { MdLanguageClient } from '../client/client';\nimport { Delayer } from '../util/async';\nimport { noopToken } from '../util/cancellation';\nimport { Disposable } from '../util/dispose';\nimport { convertRange } from './fileReferences';\n\n\nconst settingNames = Object.freeze({\n\tenabled: 'updateLinksOnFileMove.enabled',\n\tinclude: 'updateLinksOnFileMove.include',\n\tenableForDirectories: 'updateLinksOnFileMove.enableForDirectories',\n});\n\nconst enum UpdateLinksOnFileMoveSetting {\n\tPrompt = 'prompt',\n\tAlways = 'always',\n\tNever = 'never',\n}\n\ninterface RenameAction {\n\treadonly oldUri: vscode.Uri;\n\treadonly newUri: vscode.Uri;\n}\n\nclass UpdateLinksOnFileRenameHandler extends Disposable {\n\n\tprivate readonly _delayer = new Delayer(50);\n\tprivate readonly _pendingRenames = new Set<RenameAction>();\n\n\tpublic constructor(\n\t\tprivate readonly _client: MdLanguageClient,\n\t) {\n\t\tsuper();\n\n\t\tthis._register(vscode.workspace.onDidRenameFiles(async (e) => {\n\t\t\tawait Promise.all(e.files.map(async (rename) => {\n\t\t\t\tif (await this._shouldParticipateInLinkUpdate(rename.newUri)) {\n\t\t\t\t\tthis._pendingRenames.add(rename);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tif (this._pendingRenames.size) {\n\t\t\t\tthis._delayer.trigger(() => {\n\t\t\t\t\tvscode.window.withProgress({\n\t\t\t\t\t\tlocation: vscode.ProgressLocation.Window,\n\t\t\t\t\t\ttitle: vscode.l10n.t(\"Checking for Markdown links to update\")\n\t\t\t\t\t}, () => this._flushRenames());\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate async _flushRenames(): Promise<void> {\n\t\tconst renames = Array.from(this._pendingRenames);\n\t\tthis._pendingRenames.clear();\n\n\t\tconst result = await this._getEditsForFileRename(renames, noopToken);\n\n\t\tif (result && result.edit.size) {\n\t\t\tif (await this._confirmActionWithUser(result.resourcesBeingRenamed)) {\n\t\t\t\tawait vscode.workspace.applyEdit(result.edit);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async _confirmActionWithUser(newResources: readonly vscode.Uri[]): Promise<boolean> {\n\t\tif (!newResources.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst config = vscode.workspace.getConfiguration('markdown', newResources[0]);\n\t\tconst setting = config.get<UpdateLinksOnFileMoveSetting>(settingNames.enabled);\n\t\tswitch (setting) {\n\t\t\tcase UpdateLinksOnFileMoveSetting.Prompt:\n\t\t\t\treturn this._promptUser(newResources);\n\t\t\tcase UpdateLinksOnFileMoveSetting.Always:\n\t\t\t\treturn true;\n\t\t\tcase UpdateLinksOnFileMoveSetting.Never:\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprivate async _shouldParticipateInLinkUpdate(newUri: vscode.Uri): Promise<boolean> {\n\t\tconst config = vscode.workspace.getConfiguration('markdown', newUri);\n\t\tconst setting = config.get<UpdateLinksOnFileMoveSetting>(settingNames.enabled);\n\t\tif (setting === UpdateLinksOnFileMoveSetting.Never) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst externalGlob = config.get<string[]>(settingNames.include);\n\t\tif (externalGlob) {\n\t\t\tfor (const glob of externalGlob) {\n\t\t\t\tif (picomatch.isMatch(newUri.fsPath, glob)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst stat = await vscode.workspace.fs.stat(newUri);\n\t\tif (stat.type === vscode.FileType.Directory) {\n\t\t\treturn config.get<boolean>(settingNames.enableForDirectories, true);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async _promptUser(newResources: readonly vscode.Uri[]): Promise<boolean> {\n\t\tif (!newResources.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst rejectItem: vscode.MessageItem = {\n\t\t\ttitle: vscode.l10n.t(\"No\"),\n\t\t\tisCloseAffordance: true,\n\t\t};\n\n\t\tconst acceptItem: vscode.MessageItem = {\n\t\t\ttitle: vscode.l10n.t(\"Yes\"),\n\t\t};\n\n\t\tconst alwaysItem: vscode.MessageItem = {\n\t\t\ttitle: vscode.l10n.t(\"Always\"),\n\t\t};\n\n\t\tconst neverItem: vscode.MessageItem = {\n\t\t\ttitle: vscode.l10n.t(\"Never\"),\n\t\t};\n\n\t\tconst choice = await vscode.window.showInformationMessage(\n\t\t\tnewResources.length === 1\n\t\t\t\t? vscode.l10n.t(\"Update Markdown links for '{0}'?\", path.basename(newResources[0].fsPath))\n\t\t\t\t: this._getConfirmMessage(vscode.l10n.t(\"Update Markdown links for the following {0} files?\", newResources.length), newResources), {\n\t\t\tmodal: true,\n\t\t}, rejectItem, acceptItem, alwaysItem, neverItem);\n\n\t\tswitch (choice) {\n\t\t\tcase acceptItem: {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase rejectItem: {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcase alwaysItem: {\n\t\t\t\tconst config = vscode.workspace.getConfiguration('markdown', newResources[0]);\n\t\t\t\tconfig.update(\n\t\t\t\t\tsettingNames.enabled,\n\t\t\t\t\tUpdateLinksOnFileMoveSetting.Always,\n\t\t\t\t\tthis._getConfigTargetScope(config, settingNames.enabled));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase neverItem: {\n\t\t\t\tconst config = vscode.workspace.getConfiguration('markdown', newResources[0]);\n\t\t\t\tconfig.update(\n\t\t\t\t\tsettingNames.enabled,\n\t\t\t\t\tUpdateLinksOnFileMoveSetting.Never,\n\t\t\t\t\tthis._getConfigTargetScope(config, settingNames.enabled));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async _getEditsForFileRename(renames: readonly RenameAction[], token: vscode.CancellationToken): Promise<{ edit: vscode.WorkspaceEdit; resourcesBeingRenamed: vscode.Uri[] } | undefined> {\n\t\tconst result = await this._client.getEditForFileRenames(renames.map(rename => ({ oldUri: rename.oldUri.toString(), newUri: rename.newUri.toString() })), token);\n\t\tif (!result?.edit.documentChanges?.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst workspaceEdit = new vscode.WorkspaceEdit();\n\n\t\tfor (const change of result.edit.documentChanges as TextDocumentEdit[]) {\n\t\t\tconst uri = vscode.Uri.parse(change.textDocument.uri);\n\t\t\tfor (const edit of change.edits) {\n\t\t\t\tworkspaceEdit.replace(uri, convertRange(edit.range), edit.newText);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tedit: workspaceEdit,\n\t\t\tresourcesBeingRenamed: result.participatingRenames.map(x => vscode.Uri.parse(x.newUri)),\n\t\t};\n\t}\n\n\tprivate _getConfirmMessage(start: string, resourcesToConfirm: readonly vscode.Uri[]): string {\n\t\tconst MAX_CONFIRM_FILES = 10;\n\n\t\tconst paths = [start];\n\t\tpaths.push('');\n\t\tpaths.push(...resourcesToConfirm.slice(0, MAX_CONFIRM_FILES).map(r => path.basename(r.fsPath)));\n\n\t\tif (resourcesToConfirm.length > MAX_CONFIRM_FILES) {\n\t\t\tif (resourcesToConfirm.length - MAX_CONFIRM_FILES === 1) {\n\t\t\t\tpaths.push(vscode.l10n.t(\"...1 additional file not shown\"));\n\t\t\t} else {\n\t\t\t\tpaths.push(vscode.l10n.t(\"...{0} additional files not shown\", resourcesToConfirm.length - MAX_CONFIRM_FILES));\n\t\t\t}\n\t\t}\n\n\t\tpaths.push('');\n\t\treturn paths.join('\\n');\n\t}\n\n\tprivate _getConfigTargetScope(config: vscode.WorkspaceConfiguration, settingsName: string): vscode.ConfigurationTarget {\n\t\tconst inspected = config.inspect(settingsName);\n\t\tif (inspected?.workspaceFolderValue) {\n\t\t\treturn vscode.ConfigurationTarget.WorkspaceFolder;\n\t\t}\n\n\t\tif (inspected?.workspaceValue) {\n\t\t\treturn vscode.ConfigurationTarget.Workspace;\n\t\t}\n\n\t\treturn vscode.ConfigurationTarget.Global;\n\t}\n}\n\nexport function registerUpdateLinksOnRename(client: MdLanguageClient): vscode.Disposable {\n\treturn new UpdateLinksOnFileRenameHandler(client);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/languageFeatures/updateLinksOnPaste.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { MdLanguageClient } from '../client/client';\nimport { Mime } from '../util/mimes';\n\nclass UpdatePastedLinksEditProvider implements vscode.DocumentPasteEditProvider {\n\n\tpublic static readonly kind = vscode.DocumentDropOrPasteEditKind.Text.append('updateLinks', 'markdown');\n\n\tpublic static readonly metadataMime = 'application/vnd.vscode.markdown.updatelinks.metadata';\n\n\tconstructor(\n\t\tprivate readonly _client: MdLanguageClient,\n\t) { }\n\n\tasync prepareDocumentPaste(document: vscode.TextDocument, ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise<void> {\n\t\tif (!this._isEnabled(document)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst metadata = await this._client.prepareUpdatePastedLinks(document.uri, ranges, token);\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tdataTransfer.set(UpdatePastedLinksEditProvider.metadataMime, new vscode.DataTransferItem(metadata));\n\t}\n\n\tasync provideDocumentPasteEdits(\n\t\tdocument: vscode.TextDocument,\n\t\tranges: readonly vscode.Range[],\n\t\tdataTransfer: vscode.DataTransfer,\n\t\tcontext: vscode.DocumentPasteEditContext,\n\t\ttoken: vscode.CancellationToken,\n\t): Promise<vscode.DocumentPasteEdit[] | undefined> {\n\t\tif (!this._isEnabled(document)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst metadata = dataTransfer.get(UpdatePastedLinksEditProvider.metadataMime)?.value;\n\t\tif (!metadata) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst textItem = dataTransfer.get(Mime.textPlain);\n\t\tconst text = await textItem?.asString();\n\t\tif (!text || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\t// TODO: Handle cases such as:\n\t\t// - copy empty line\n\t\t// - Copy with multiple cursors and paste into multiple locations\n\t\t// - ...\n\t\tconst edits = await this._client.getUpdatePastedLinksEdit(document.uri, ranges.map(x => new vscode.TextEdit(x, text)), metadata, token);\n\t\tif (!edits?.length || token.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pasteEdit = new vscode.DocumentPasteEdit('', vscode.l10n.t(\"Paste and update pasted links\"), UpdatePastedLinksEditProvider.kind);\n\t\tconst workspaceEdit = new vscode.WorkspaceEdit();\n\t\tworkspaceEdit.set(document.uri, edits.map(x => new vscode.TextEdit(new vscode.Range(x.range.start.line, x.range.start.character, x.range.end.line, x.range.end.character,), x.newText)));\n\t\tpasteEdit.additionalEdit = workspaceEdit;\n\n\t\tif (!context.only || !UpdatePastedLinksEditProvider.kind.contains(context.only)) {\n\t\t\tpasteEdit.yieldTo = [vscode.DocumentDropOrPasteEditKind.Text];\n\t\t}\n\n\t\treturn [pasteEdit];\n\t}\n\n\tprivate _isEnabled(document: vscode.TextDocument): boolean {\n\t\treturn vscode.workspace.getConfiguration('markdown', document.uri).get<boolean>('editor.updateLinksOnPaste.enabled', true);\n\t}\n}\n\nexport function registerUpdatePastedLinks(selector: vscode.DocumentSelector, client: MdLanguageClient) {\n\treturn vscode.languages.registerDocumentPasteEditProvider(selector, new UpdatePastedLinksEditProvider(client), {\n\t\tcopyMimeTypes: [UpdatePastedLinksEditProvider.metadataMime],\n\t\tprovidedPasteEditKinds: [UpdatePastedLinksEditProvider.kind],\n\t\tpasteMimeTypes: [UpdatePastedLinksEditProvider.metadataMime],\n\t});\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/logging.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Disposable } from './util/dispose';\n\n\nexport interface ILogger {\n\ttrace(title: string, message: string, data?: any): void;\n}\n\nexport class VsCodeOutputLogger extends Disposable implements ILogger {\n\tprivate _outputChannelValue?: vscode.LogOutputChannel;\n\n\tprivate get _outputChannel() {\n\t\tthis._outputChannelValue ??= this._register(vscode.window.createOutputChannel('Markdown', { log: true }));\n\t\treturn this._outputChannelValue;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tpublic trace(title: string, message: string, data?: any): void {\n\t\tthis._outputChannel.trace(`${title}: ${message}`, ...(data ? [JSON.stringify(data, null, 4)] : []));\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/markdownEngine.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type MarkdownIt = require('markdown-it');\nimport type Token = require('markdown-it/lib/token');\nimport * as vscode from 'vscode';\nimport { ILogger } from './logging';\nimport { MarkdownContributionProvider } from './markdownExtensions';\nimport { MarkdownPreviewConfiguration } from './preview/previewConfig';\nimport { Slugifier } from './slugify';\nimport { ITextDocument } from './types/textDocument';\nimport { WebviewResourceProvider } from './util/resources';\nimport { isOfScheme, Schemes } from './util/schemes';\n\n/**\n * Adds begin line index to the output via the 'data-line' data attribute.\n */\nconst pluginSourceMap: MarkdownIt.PluginSimple = (md): void => {\n\t// Set the attribute on every possible token.\n\tmd.core.ruler.push('source_map_data_attribute', (state): void => {\n\t\tfor (const token of state.tokens) {\n\t\t\tif (token.map && token.type !== 'inline') {\n\t\t\t\ttoken.attrSet('data-line', String(token.map[0]));\n\t\t\t\ttoken.attrJoin('class', 'code-line');\n\t\t\t\ttoken.attrJoin('dir', 'auto');\n\t\t\t}\n\t\t}\n\t});\n\n\t// The 'html_block' renderer doesn't respect `attrs`. We need to insert a marker.\n\tconst originalHtmlBlockRenderer = md.renderer.rules['html_block'];\n\tif (originalHtmlBlockRenderer) {\n\t\tmd.renderer.rules['html_block'] = (tokens, idx, options, env, self) => (\n\t\t\t`<div ${self.renderAttrs(tokens[idx])} ></div>\\n` +\n\t\t\toriginalHtmlBlockRenderer(tokens, idx, options, env, self)\n\t\t);\n\t}\n};\n\n/**\n * The markdown-it options that we expose in the settings.\n */\ntype MarkdownItConfig = Readonly<Required<Pick<MarkdownIt.Options, 'breaks' | 'linkify' | 'typographer'>>>;\n\nclass TokenCache {\n\tprivate _cachedDocument?: {\n\t\treadonly uri: vscode.Uri;\n\t\treadonly version: number;\n\t\treadonly config: MarkdownItConfig;\n\t};\n\tprivate _tokens?: Token[];\n\n\tpublic tryGetCached(document: ITextDocument, config: MarkdownItConfig): Token[] | undefined {\n\t\tif (this._cachedDocument\n\t\t\t&& this._cachedDocument.uri.toString() === document.uri.toString()\n\t\t\t&& document.version >= 0 && this._cachedDocument.version === document.version\n\t\t\t&& this._cachedDocument.config.breaks === config.breaks\n\t\t\t&& this._cachedDocument.config.linkify === config.linkify\n\t\t) {\n\t\t\treturn this._tokens;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic update(document: ITextDocument, config: MarkdownItConfig, tokens: Token[]) {\n\t\tthis._cachedDocument = {\n\t\t\turi: document.uri,\n\t\t\tversion: document.version,\n\t\t\tconfig,\n\t\t};\n\t\tthis._tokens = tokens;\n\t}\n\n\tpublic clean(): void {\n\t\tthis._cachedDocument = undefined;\n\t\tthis._tokens = undefined;\n\t}\n}\n\nexport interface RenderOutput {\n\thtml: string;\n\tcontainingImages: Set<string>;\n}\n\ninterface RenderEnv {\n\tcontainingImages: Set<string>;\n\tcurrentDocument: vscode.Uri | undefined;\n\tresourceProvider: WebviewResourceProvider | undefined;\n}\n\nexport interface IMdParser {\n\treadonly slugifier: Slugifier;\n\n\ttokenize(document: ITextDocument): Promise<Token[]>;\n}\n\nexport class MarkdownItEngine implements IMdParser {\n\n\tprivate _md?: Promise<MarkdownIt>;\n\n\tprivate _slugCount = new Map<string, number>();\n\tprivate _tokenCache = new TokenCache();\n\n\tpublic readonly slugifier: Slugifier;\n\n\tpublic constructor(\n\t\tprivate readonly _contributionProvider: MarkdownContributionProvider,\n\t\tslugifier: Slugifier,\n\t\tprivate readonly _logger: ILogger,\n\t) {\n\t\tthis.slugifier = slugifier;\n\n\t\t_contributionProvider.onContributionsChanged(() => {\n\t\t\t// Markdown plugin contributions may have changed\n\t\t\tthis._md = undefined;\n\t\t\tthis._tokenCache.clean();\n\t\t});\n\t}\n\n\n\tpublic async getEngine(resource: vscode.Uri | undefined): Promise<MarkdownIt> {\n\t\tconst config = this._getConfig(resource);\n\t\treturn this._getEngine(config);\n\t}\n\n\tprivate async _getEngine(config: MarkdownItConfig): Promise<MarkdownIt> {\n\t\tif (!this._md) {\n\t\t\tthis._md = (async () => {\n\t\t\t\tconst markdownIt = await import('markdown-it');\n\t\t\t\tlet md: MarkdownIt = markdownIt.default(await getMarkdownOptions(() => md));\n\t\t\t\tmd.linkify.set({ fuzzyLink: false });\n\n\t\t\t\tfor (const plugin of this._contributionProvider.contributions.markdownItPlugins.values()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmd = (await plugin)(md);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error('Could not load markdown it plugin', e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst frontMatterPlugin = await import('markdown-it-front-matter');\n\t\t\t\t// Extract rules from front matter plugin and apply at a lower precedence\n\t\t\t\tlet fontMatterRule: any;\n\t\t\t\tfrontMatterPlugin.default(<any>{\n\t\t\t\t\tblock: {\n\t\t\t\t\t\truler: {\n\t\t\t\t\t\t\tbefore: (_id: any, _id2: any, rule: any) => { fontMatterRule = rule; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, () => { /* noop */ });\n\n\t\t\t\tmd.block.ruler.before('fence', 'front_matter', fontMatterRule, {\n\t\t\t\t\talt: ['paragraph', 'reference', 'blockquote', 'list']\n\t\t\t\t});\n\n\t\t\t\tthis._addImageRenderer(md);\n\t\t\t\tthis._addFencedRenderer(md);\n\t\t\t\tthis._addLinkNormalizer(md);\n\t\t\t\tthis._addLinkValidator(md);\n\t\t\t\tthis._addNamedHeaders(md);\n\t\t\t\tthis._addLinkRenderer(md);\n\t\t\t\tmd.use(pluginSourceMap);\n\t\t\t\treturn md;\n\t\t\t})();\n\t\t}\n\n\t\tconst md = await this._md!;\n\t\tmd.set(config);\n\t\treturn md;\n\t}\n\n\tpublic reloadPlugins() {\n\t\tthis._md = undefined;\n\t}\n\n\tprivate _tokenizeDocument(\n\t\tdocument: ITextDocument,\n\t\tconfig: MarkdownItConfig,\n\t\tengine: MarkdownIt\n\t): Token[] {\n\t\tconst cached = this._tokenCache.tryGetCached(document, config);\n\t\tif (cached) {\n\t\t\tthis._resetSlugCount();\n\t\t\treturn cached;\n\t\t}\n\n\t\tthis._logger.trace('MarkdownItEngine', `tokenizeDocument - ${document.uri}`);\n\t\tconst tokens = this._tokenizeString(document.getText(), engine);\n\t\tthis._tokenCache.update(document, config, tokens);\n\t\treturn tokens;\n\t}\n\n\tprivate _tokenizeString(text: string, engine: MarkdownIt) {\n\t\tthis._resetSlugCount();\n\n\t\treturn engine.parse(text, {});\n\t}\n\n\tprivate _resetSlugCount(): void {\n\t\tthis._slugCount = new Map<string, number>();\n\t}\n\n\tpublic async render(input: ITextDocument | string, resourceProvider?: WebviewResourceProvider): Promise<RenderOutput> {\n\t\tconst config = this._getConfig(typeof input === 'string' ? undefined : input.uri);\n\t\tconst engine = await this._getEngine(config);\n\n\t\tconst tokens = typeof input === 'string'\n\t\t\t? this._tokenizeString(input, engine)\n\t\t\t: this._tokenizeDocument(input, config, engine);\n\n\t\tconst env: RenderEnv = {\n\t\t\tcontainingImages: new Set<string>(),\n\t\t\tcurrentDocument: typeof input === 'string' ? undefined : input.uri,\n\t\t\tresourceProvider,\n\t\t};\n\n\t\tconst html = engine.renderer.render(tokens, {\n\t\t\t...engine.options,\n\t\t\t...config\n\t\t}, env);\n\n\t\treturn {\n\t\t\thtml,\n\t\t\tcontainingImages: env.containingImages\n\t\t};\n\t}\n\n\tpublic async tokenize(document: ITextDocument): Promise<Token[]> {\n\t\tconst config = this._getConfig(document.uri);\n\t\tconst engine = await this._getEngine(config);\n\t\treturn this._tokenizeDocument(document, config, engine);\n\t}\n\n\tpublic cleanCache(): void {\n\t\tthis._tokenCache.clean();\n\t}\n\n\tprivate _getConfig(resource?: vscode.Uri): MarkdownItConfig {\n\t\tconst config = MarkdownPreviewConfiguration.getForResource(resource ?? null);\n\t\treturn {\n\t\t\tbreaks: config.previewLineBreaks,\n\t\t\tlinkify: config.previewLinkify,\n\t\t\ttypographer: config.previewTypographer,\n\t\t};\n\t}\n\n\tprivate _addImageRenderer(md: MarkdownIt): void {\n\t\tconst original = md.renderer.rules.image;\n\t\tmd.renderer.rules.image = (tokens: Token[], idx: number, options, env: RenderEnv, self) => {\n\t\t\tconst token = tokens[idx];\n\t\t\tconst src = token.attrGet('src');\n\t\t\tif (src) {\n\t\t\t\tenv.containingImages?.add(src);\n\n\t\t\t\tif (!token.attrGet('data-src')) {\n\t\t\t\t\ttoken.attrSet('src', this._toResourceUri(src, env.currentDocument, env.resourceProvider));\n\t\t\t\t\ttoken.attrSet('data-src', src);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (original) {\n\t\t\t\treturn original(tokens, idx, options, env, self);\n\t\t\t} else {\n\t\t\t\treturn self.renderToken(tokens, idx, options);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _addFencedRenderer(md: MarkdownIt): void {\n\t\tconst original = md.renderer.rules['fenced'];\n\t\tmd.renderer.rules['fenced'] = (tokens: Token[], idx: number, options, env, self) => {\n\t\t\tconst token = tokens[idx];\n\t\t\tif (token.map?.length) {\n\t\t\t\ttoken.attrJoin('class', 'hljs');\n\t\t\t}\n\n\t\t\tif (original) {\n\t\t\t\treturn original(tokens, idx, options, env, self);\n\t\t\t} else {\n\t\t\t\treturn self.renderToken(tokens, idx, options);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _addLinkNormalizer(md: MarkdownIt): void {\n\t\tconst normalizeLink = md.normalizeLink;\n\t\tmd.normalizeLink = (link: string) => {\n\t\t\ttry {\n\t\t\t\t// Normalize VS Code schemes to target the current version\n\t\t\t\tif (isOfScheme(Schemes.vscode, link) || isOfScheme(Schemes['vscode-insiders'], link)) {\n\t\t\t\t\treturn normalizeLink(vscode.Uri.parse(link).with({ scheme: vscode.env.uriScheme }).toString());\n\t\t\t\t}\n\n\t\t\t} catch (e) {\n\t\t\t\t// noop\n\t\t\t}\n\t\t\treturn normalizeLink(link);\n\t\t};\n\t}\n\n\tprivate _addLinkValidator(md: MarkdownIt): void {\n\t\tconst validateLink = md.validateLink;\n\t\tmd.validateLink = (link: string) => {\n\t\t\treturn validateLink(link)\n\t\t\t\t|| isOfScheme(Schemes.vscode, link)\n\t\t\t\t|| isOfScheme(Schemes['vscode-insiders'], link)\n\t\t\t\t|| /^data:image\\/.*?;/.test(link);\n\t\t};\n\t}\n\n\tprivate _addNamedHeaders(md: MarkdownIt): void {\n\t\tconst original = md.renderer.rules.heading_open;\n\t\tmd.renderer.rules.heading_open = (tokens: Token[], idx: number, options, env, self) => {\n\t\t\tconst title = this._tokenToPlainText(tokens[idx + 1]);\n\t\t\tlet slug = this.slugifier.fromHeading(title);\n\n\t\t\tif (this._slugCount.has(slug.value)) {\n\t\t\t\tconst count = this._slugCount.get(slug.value)!;\n\t\t\t\tthis._slugCount.set(slug.value, count + 1);\n\t\t\t\tslug = this.slugifier.fromHeading(slug.value + '-' + (count + 1));\n\t\t\t} else {\n\t\t\t\tthis._slugCount.set(slug.value, 0);\n\t\t\t}\n\n\t\t\ttokens[idx].attrSet('id', slug.value);\n\n\t\t\tif (original) {\n\t\t\t\treturn original(tokens, idx, options, env, self);\n\t\t\t} else {\n\t\t\t\treturn self.renderToken(tokens, idx, options);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _tokenToPlainText(token: Token): string {\n\t\tif (token.children) {\n\t\t\treturn token.children.map(x => this._tokenToPlainText(x)).join('');\n\t\t}\n\n\t\tswitch (token.type) {\n\t\t\tcase 'text':\n\t\t\tcase 'emoji':\n\t\t\tcase 'code_inline':\n\t\t\t\treturn token.content;\n\t\t\tdefault:\n\t\t\t\treturn '';\n\t\t}\n\t}\n\n\tprivate _addLinkRenderer(md: MarkdownIt): void {\n\t\tconst original = md.renderer.rules.link_open;\n\n\t\tmd.renderer.rules.link_open = (tokens: Token[], idx: number, options, env, self) => {\n\t\t\tconst token = tokens[idx];\n\t\t\tconst href = token.attrGet('href');\n\t\t\t// A string, including empty string, may be `href`.\n\t\t\tif (typeof href === 'string') {\n\t\t\t\ttoken.attrSet('data-href', href);\n\t\t\t}\n\t\t\tif (original) {\n\t\t\t\treturn original(tokens, idx, options, env, self);\n\t\t\t} else {\n\t\t\t\treturn self.renderToken(tokens, idx, options);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate _toResourceUri(href: string, currentDocument: vscode.Uri | undefined, resourceProvider: WebviewResourceProvider | undefined): string {\n\t\ttry {\n\t\t\t// Support file:// links\n\t\t\tif (isOfScheme(Schemes.file, href)) {\n\t\t\t\tconst uri = vscode.Uri.parse(href);\n\t\t\t\tif (resourceProvider) {\n\t\t\t\t\treturn resourceProvider.asWebviewUri(uri).toString(true);\n\t\t\t\t}\n\t\t\t\t// Not sure how to resolve this\n\t\t\t\treturn href;\n\t\t\t}\n\n\t\t\t// If original link doesn't look like a url with a scheme, assume it must be a link to a file in workspace\n\t\t\tif (!/^[a-z\\-]+:/i.test(href)) {\n\t\t\t\t// Use a fake scheme for parsing\n\t\t\t\tlet uri = vscode.Uri.parse('markdown-link:' + href);\n\n\t\t\t\t// Relative paths should be resolved correctly inside the preview but we need to\n\t\t\t\t// handle absolute paths specially to resolve them relative to the workspace root\n\t\t\t\tif (uri.path[0] === '/' && currentDocument) {\n\t\t\t\t\tconst root = vscode.workspace.getWorkspaceFolder(currentDocument);\n\t\t\t\t\tif (root) {\n\t\t\t\t\t\turi = vscode.Uri.joinPath(root.uri, uri.fsPath).with({\n\t\t\t\t\t\t\tfragment: uri.fragment,\n\t\t\t\t\t\t\tquery: uri.query,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (resourceProvider) {\n\t\t\t\t\t\t\treturn resourceProvider.asWebviewUri(uri).toString(true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\turi = uri.with({ scheme: 'markdown-link' });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn uri.toString(true).replace(/^markdown-link:/, '');\n\t\t\t}\n\n\t\t\treturn href;\n\t\t} catch {\n\t\t\treturn href;\n\t\t}\n\t}\n}\n\nasync function getMarkdownOptions(md: () => MarkdownIt): Promise<MarkdownIt.Options> {\n\tconst hljs = (await import('highlight.js')).default;\n\treturn {\n\t\thtml: true,\n\t\thighlight: (str: string, lang?: string) => {\n\t\t\tlang = normalizeHighlightLang(lang);\n\t\t\tif (lang && hljs.getLanguage(lang)) {\n\t\t\t\ttry {\n\t\t\t\t\treturn hljs.highlight(str, {\n\t\t\t\t\t\tlanguage: lang,\n\t\t\t\t\t\tignoreIllegals: true,\n\t\t\t\t\t}).value;\n\t\t\t\t}\n\t\t\t\tcatch (error) { }\n\t\t\t}\n\t\t\treturn md().utils.escapeHtml(str);\n\t\t}\n\t};\n}\n\nfunction normalizeHighlightLang(lang: string | undefined) {\n\tswitch (lang && lang.toLowerCase()) {\n\t\tcase 'shell':\n\t\t\treturn 'sh';\n\n\t\tcase 'py3':\n\t\t\treturn 'python';\n\n\t\tcase 'tsx':\n\t\tcase 'typescriptreact':\n\t\t\t// Workaround for highlight not supporting tsx: https://github.com/isagalaev/highlight.js/issues/1155\n\t\t\treturn 'jsx';\n\n\t\tcase 'json5':\n\t\tcase 'jsonc':\n\t\t\treturn 'json';\n\n\t\tcase 'c#':\n\t\tcase 'csharp':\n\t\t\treturn 'cs';\n\n\t\tdefault:\n\t\t\treturn lang;\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/markdownExtensions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as arrays from './util/arrays';\nimport { Disposable } from './util/dispose';\n\nfunction resolveExtensionResource(extension: vscode.Extension<any>, resourcePath: string): vscode.Uri {\n\treturn vscode.Uri.joinPath(extension.extensionUri, resourcePath);\n}\n\nfunction* resolveExtensionResources(extension: vscode.Extension<any>, resourcePaths: unknown): Iterable<vscode.Uri> {\n\tif (Array.isArray(resourcePaths)) {\n\t\tfor (const resource of resourcePaths) {\n\t\t\ttry {\n\t\t\t\tyield resolveExtensionResource(extension, resource);\n\t\t\t} catch {\n\t\t\t\t// noop\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface MarkdownContributions {\n\treadonly previewScripts: readonly vscode.Uri[];\n\treadonly previewStyles: readonly vscode.Uri[];\n\treadonly previewResourceRoots: readonly vscode.Uri[];\n\treadonly markdownItPlugins: ReadonlyMap<string, Thenable<(md: any) => any>>;\n}\n\nexport namespace MarkdownContributions {\n\texport const Empty: MarkdownContributions = {\n\t\tpreviewScripts: [],\n\t\tpreviewStyles: [],\n\t\tpreviewResourceRoots: [],\n\t\tmarkdownItPlugins: new Map()\n\t};\n\n\texport function merge(a: MarkdownContributions, b: MarkdownContributions): MarkdownContributions {\n\t\treturn {\n\t\t\tpreviewScripts: [...a.previewScripts, ...b.previewScripts],\n\t\t\tpreviewStyles: [...a.previewStyles, ...b.previewStyles],\n\t\t\tpreviewResourceRoots: [...a.previewResourceRoots, ...b.previewResourceRoots],\n\t\t\tmarkdownItPlugins: new Map([...a.markdownItPlugins.entries(), ...b.markdownItPlugins.entries()]),\n\t\t};\n\t}\n\n\tfunction uriEqual(a: vscode.Uri, b: vscode.Uri): boolean {\n\t\treturn a.toString() === b.toString();\n\t}\n\n\texport function equal(a: MarkdownContributions, b: MarkdownContributions): boolean {\n\t\treturn arrays.equals(a.previewScripts, b.previewScripts, uriEqual)\n\t\t\t&& arrays.equals(a.previewStyles, b.previewStyles, uriEqual)\n\t\t\t&& arrays.equals(a.previewResourceRoots, b.previewResourceRoots, uriEqual)\n\t\t\t&& arrays.equals(Array.from(a.markdownItPlugins.keys()), Array.from(b.markdownItPlugins.keys()));\n\t}\n\n\texport function fromExtension(extension: vscode.Extension<any>): MarkdownContributions {\n\t\tconst contributions = extension.packageJSON?.contributes;\n\t\tif (!contributions) {\n\t\t\treturn MarkdownContributions.Empty;\n\t\t}\n\n\t\tconst previewStyles = Array.from(getContributedStyles(contributions, extension));\n\t\tconst previewScripts = Array.from(getContributedScripts(contributions, extension));\n\t\tconst previewResourceRoots = previewStyles.length || previewScripts.length ? [extension.extensionUri] : [];\n\t\tconst markdownItPlugins = getContributedMarkdownItPlugins(contributions, extension);\n\n\t\treturn {\n\t\t\tpreviewScripts,\n\t\t\tpreviewStyles,\n\t\t\tpreviewResourceRoots,\n\t\t\tmarkdownItPlugins\n\t\t};\n\t}\n\n\tfunction getContributedMarkdownItPlugins(\n\t\tcontributes: any,\n\t\textension: vscode.Extension<any>\n\t): Map<string, Thenable<(md: any) => any>> {\n\t\tconst map = new Map<string, Thenable<(md: any) => any>>();\n\t\tif (contributes['markdown.markdownItPlugins']) {\n\t\t\tmap.set(extension.id, extension.activate().then(() => {\n\t\t\t\tif (extension.exports && extension.exports.extendMarkdownIt) {\n\t\t\t\t\treturn (md: any) => extension.exports.extendMarkdownIt(md);\n\t\t\t\t}\n\t\t\t\treturn (md: any) => md;\n\t\t\t}));\n\t\t}\n\t\treturn map;\n\t}\n\n\tfunction getContributedScripts(\n\t\tcontributes: any,\n\t\textension: vscode.Extension<any>\n\t) {\n\t\treturn resolveExtensionResources(extension, contributes['markdown.previewScripts']);\n\t}\n\n\tfunction getContributedStyles(\n\t\tcontributes: any,\n\t\textension: vscode.Extension<any>\n\t) {\n\t\treturn resolveExtensionResources(extension, contributes['markdown.previewStyles']);\n\t}\n}\n\nexport interface MarkdownContributionProvider {\n\treadonly extensionUri: vscode.Uri;\n\n\treadonly contributions: MarkdownContributions;\n\treadonly onContributionsChanged: vscode.Event<this>;\n\n\tdispose(): void;\n}\n\nclass VSCodeExtensionMarkdownContributionProvider extends Disposable implements MarkdownContributionProvider {\n\n\tprivate _contributions?: MarkdownContributions;\n\n\tpublic constructor(\n\t\tprivate readonly _extensionContext: vscode.ExtensionContext,\n\t) {\n\t\tsuper();\n\n\t\tthis._register(vscode.extensions.onDidChange(() => {\n\t\t\tconst currentContributions = this._getCurrentContributions();\n\t\t\tconst existingContributions = this._contributions || MarkdownContributions.Empty;\n\t\t\tif (!MarkdownContributions.equal(existingContributions, currentContributions)) {\n\t\t\t\tthis._contributions = currentContributions;\n\t\t\t\tthis._onContributionsChanged.fire(this);\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic get extensionUri() {\n\t\treturn this._extensionContext.extensionUri;\n\t}\n\n\tprivate readonly _onContributionsChanged = this._register(new vscode.EventEmitter<this>());\n\tpublic readonly onContributionsChanged = this._onContributionsChanged.event;\n\n\tpublic get contributions(): MarkdownContributions {\n\t\tthis._contributions ??= this._getCurrentContributions();\n\t\treturn this._contributions;\n\t}\n\n\tprivate _getCurrentContributions(): MarkdownContributions {\n\t\treturn vscode.extensions.all\n\t\t\t.map(MarkdownContributions.fromExtension)\n\t\t\t.reduce(MarkdownContributions.merge, MarkdownContributions.Empty);\n\t}\n}\n\nexport function getMarkdownExtensionContributions(context: vscode.ExtensionContext): MarkdownContributionProvider {\n\treturn new VSCodeExtensionMarkdownContributionProvider(context);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/preview/documentRenderer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as uri from 'vscode-uri';\nimport { ILogger } from '../logging';\nimport { MarkdownItEngine } from '../markdownEngine';\nimport { MarkdownContributionProvider } from '../markdownExtensions';\nimport { escapeAttribute, getNonce } from '../util/dom';\nimport { WebviewResourceProvider } from '../util/resources';\nimport { MarkdownPreviewConfiguration, MarkdownPreviewConfigurationManager } from './previewConfig';\nimport { ContentSecurityPolicyArbiter, MarkdownPreviewSecurityLevel } from './security';\n\n\n/**\n * Strings used inside the markdown preview.\n *\n * Stored here and then injected in the preview so that they\n * can be localized using our normal localization process.\n */\nconst previewStrings = {\n\tcspAlertMessageText: vscode.l10n.t(\"Some content has been disabled in this document\"),\n\n\tcspAlertMessageTitle: vscode.l10n.t(\"Potentially unsafe or insecure content has been disabled in the Markdown preview. Change the Markdown preview security setting to allow insecure content or enable scripts\"),\n\n\tcspAlertMessageLabel: vscode.l10n.t(\"Content Disabled Security Warning\")\n};\n\nexport interface MarkdownContentProviderOutput {\n\thtml: string;\n\tcontainingImages: Set<string>;\n}\n\nexport interface ImageInfo {\n\treadonly id: string;\n\treadonly width: number;\n\treadonly height: number;\n}\n\nexport class MdDocumentRenderer {\n\tconstructor(\n\t\tprivate readonly _engine: MarkdownItEngine,\n\t\tprivate readonly _context: vscode.ExtensionContext,\n\t\tprivate readonly _cspArbiter: ContentSecurityPolicyArbiter,\n\t\tprivate readonly _contributionProvider: MarkdownContributionProvider,\n\t\tprivate readonly _logger: ILogger\n\t) {\n\t\tthis.iconPath = {\n\t\t\tdark: vscode.Uri.joinPath(this._context.extensionUri, 'media', 'preview-dark.svg'),\n\t\t\tlight: vscode.Uri.joinPath(this._context.extensionUri, 'media', 'preview-light.svg'),\n\t\t};\n\t}\n\n\tpublic readonly iconPath: { light: vscode.Uri; dark: vscode.Uri };\n\n\tpublic async renderDocument(\n\t\tmarkdownDocument: vscode.TextDocument,\n\t\tresourceProvider: WebviewResourceProvider,\n\t\tpreviewConfigurations: MarkdownPreviewConfigurationManager,\n\t\tinitialLine: number | undefined,\n\t\tselectedLine: number | undefined,\n\t\tstate: any | undefined,\n\t\timageInfo: readonly ImageInfo[],\n\t\ttoken: vscode.CancellationToken\n\t): Promise<MarkdownContentProviderOutput> {\n\t\tconst sourceUri = markdownDocument.uri;\n\t\tconst config = previewConfigurations.loadAndCacheConfiguration(sourceUri);\n\t\tconst initialData = {\n\t\t\tsource: sourceUri.toString(),\n\t\t\tfragment: state?.fragment || markdownDocument.uri.fragment || undefined,\n\t\t\tline: initialLine,\n\t\t\tselectedLine,\n\t\t\tscrollPreviewWithEditor: config.scrollPreviewWithEditor,\n\t\t\tscrollEditorWithPreview: config.scrollEditorWithPreview,\n\t\t\tdoubleClickToSwitchToEditor: config.doubleClickToSwitchToEditor,\n\t\t\tdisableSecurityWarnings: this._cspArbiter.shouldDisableSecurityWarnings(),\n\t\t\twebviewResourceRoot: resourceProvider.asWebviewUri(markdownDocument.uri).toString(),\n\t\t};\n\n\t\tthis._logger.trace('DocumentRenderer', `provideTextDocumentContent - ${markdownDocument.uri}`, initialData);\n\n\t\t// Content Security Policy\n\t\tconst nonce = getNonce();\n\t\tconst csp = this._getCsp(resourceProvider, sourceUri, nonce);\n\n\t\tconst body = await this.renderBody(markdownDocument, resourceProvider);\n\t\tif (token.isCancellationRequested) {\n\t\t\treturn { html: '', containingImages: new Set() };\n\t\t}\n\n\t\tconst html = `<!DOCTYPE html>\n\t\t\t<html style=\"${escapeAttribute(this._getSettingsOverrideStyles(config))}\">\n\t\t\t<head>\n\t\t\t\t<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\">\n\t\t\t\t${csp}\n\t\t\t\t<meta id=\"vscode-markdown-preview-data\"\n\t\t\t\t\tdata-settings=\"${escapeAttribute(JSON.stringify(initialData))}\"\n\t\t\t\t\tdata-strings=\"${escapeAttribute(JSON.stringify(previewStrings))}\"\n\t\t\t\t\tdata-state=\"${escapeAttribute(JSON.stringify(state || {}))}\"\n\t\t\t\t\tdata-initial-md-content=\"${escapeAttribute(body.html)}\">\n\t\t\t\t<script src=\"${this._extensionResourcePath(resourceProvider, 'pre.js')}\" nonce=\"${nonce}\"></script>\n\t\t\t\t${this._getStyles(resourceProvider, sourceUri, config, imageInfo)}\n\t\t\t\t<base href=\"${resourceProvider.asWebviewUri(markdownDocument.uri)}\">\n\t\t\t</head>\n\t\t\t<body class=\"vscode-body ${config.scrollBeyondLastLine ? 'scrollBeyondLastLine' : ''} ${config.wordWrap ? 'wordWrap' : ''} ${config.markEditorSelection ? 'showEditorSelection' : ''}\">\n\t\t\t\t${this._getScripts(resourceProvider, nonce)}\n\t\t\t</body>\n\t\t\t</html>`;\n\t\treturn {\n\t\t\thtml,\n\t\t\tcontainingImages: body.containingImages,\n\t\t};\n\t}\n\n\tpublic async renderBody(\n\t\tmarkdownDocument: vscode.TextDocument,\n\t\tresourceProvider: WebviewResourceProvider,\n\t): Promise<MarkdownContentProviderOutput> {\n\t\tconst rendered = await this._engine.render(markdownDocument, resourceProvider);\n\t\tconst html = `<div class=\"markdown-body\" dir=\"auto\">${rendered.html}<div class=\"code-line\" data-line=\"${markdownDocument.lineCount}\"></div></div>`;\n\t\treturn {\n\t\t\thtml,\n\t\t\tcontainingImages: rendered.containingImages\n\t\t};\n\t}\n\n\tpublic renderFileNotFoundDocument(resource: vscode.Uri): string {\n\t\tconst resourcePath = uri.Utils.basename(resource);\n\t\tconst body = vscode.l10n.t('{0} cannot be found', resourcePath);\n\t\treturn `<!DOCTYPE html>\n\t\t\t<html>\n\t\t\t<body class=\"vscode-body\">\n\t\t\t\t${body}\n\t\t\t</body>\n\t\t\t</html>`;\n\t}\n\n\tprivate _extensionResourcePath(resourceProvider: WebviewResourceProvider, mediaFile: string): string {\n\t\tconst webviewResource = resourceProvider.asWebviewUri(\n\t\t\tvscode.Uri.joinPath(this._context.extensionUri, 'media', mediaFile));\n\t\treturn webviewResource.toString();\n\t}\n\n\tprivate _fixHref(resourceProvider: WebviewResourceProvider, resource: vscode.Uri, href: string): string {\n\t\tif (!href) {\n\t\t\treturn href;\n\t\t}\n\n\t\tif (href.startsWith('http:') || href.startsWith('https:') || href.startsWith('file:')) {\n\t\t\treturn href;\n\t\t}\n\n\t\t// Assume it must be a local file\n\t\tif (href.startsWith('/') || /^[a-z]:\\\\/i.test(href)) {\n\t\t\treturn resourceProvider.asWebviewUri(vscode.Uri.file(href)).toString();\n\t\t}\n\n\t\t// Use a workspace relative path if there is a workspace\n\t\tconst root = vscode.workspace.getWorkspaceFolder(resource);\n\t\tif (root) {\n\t\t\treturn resourceProvider.asWebviewUri(vscode.Uri.joinPath(root.uri, href)).toString();\n\t\t}\n\n\t\t// Otherwise look relative to the markdown file\n\t\treturn resourceProvider.asWebviewUri(vscode.Uri.joinPath(uri.Utils.dirname(resource), href)).toString();\n\t}\n\n\tprivate _computeCustomStyleSheetIncludes(resourceProvider: WebviewResourceProvider, resource: vscode.Uri, config: MarkdownPreviewConfiguration): string {\n\t\tif (!Array.isArray(config.styles)) {\n\t\t\treturn '';\n\t\t}\n\t\tconst out: string[] = [];\n\t\tfor (const style of config.styles) {\n\t\t\tout.push(`<link rel=\"stylesheet\" class=\"code-user-style\" data-source=\"${escapeAttribute(style)}\" href=\"${escapeAttribute(this._fixHref(resourceProvider, resource, style))}\" type=\"text/css\" media=\"screen\">`);\n\t\t}\n\t\treturn out.join('\\n');\n\t}\n\n\tprivate _getSettingsOverrideStyles(config: MarkdownPreviewConfiguration): string {\n\t\treturn [\n\t\t\tconfig.fontFamily ? `--markdown-font-family: ${config.fontFamily};` : '',\n\t\t\tisNaN(config.fontSize) ? '' : `--markdown-font-size: ${config.fontSize}px;`,\n\t\t\tisNaN(config.lineHeight) ? '' : `--markdown-line-height: ${config.lineHeight};`,\n\t\t].join(' ');\n\t}\n\n\tprivate _getImageStabilizerStyles(imageInfo: readonly ImageInfo[]): string {\n\t\tif (!imageInfo.length) {\n\t\t\treturn '';\n\t\t}\n\n\t\tlet ret = '<style>\\n';\n\t\tfor (const imgInfo of imageInfo) {\n\t\t\tret += `#${imgInfo.id}.loading {\n\t\t\t\t\theight: ${imgInfo.height}px;\n\t\t\t\t\twidth: ${imgInfo.width}px;\n\t\t\t\t}\\n`;\n\t\t}\n\t\tret += '</style>\\n';\n\n\t\treturn ret;\n\t}\n\n\tprivate _getStyles(resourceProvider: WebviewResourceProvider, resource: vscode.Uri, config: MarkdownPreviewConfiguration, imageInfo: readonly ImageInfo[]): string {\n\t\tconst baseStyles: string[] = [];\n\t\tfor (const resource of this._contributionProvider.contributions.previewStyles) {\n\t\t\tbaseStyles.push(`<link rel=\"stylesheet\" type=\"text/css\" href=\"${escapeAttribute(resourceProvider.asWebviewUri(resource))}\">`);\n\t\t}\n\n\t\treturn `${baseStyles.join('\\n')}\n\t\t\t${this._computeCustomStyleSheetIncludes(resourceProvider, resource, config)}\n\t\t\t${this._getImageStabilizerStyles(imageInfo)}`;\n\t}\n\n\tprivate _getScripts(resourceProvider: WebviewResourceProvider, nonce: string): string {\n\t\tconst out: string[] = [];\n\t\tfor (const resource of this._contributionProvider.contributions.previewScripts) {\n\t\t\tout.push(`<script async\n\t\t\t\tsrc=\"${escapeAttribute(resourceProvider.asWebviewUri(resource))}\"\n\t\t\t\tnonce=\"${nonce}\"\n\t\t\t\tcharset=\"UTF-8\"></script>`);\n\t\t}\n\t\treturn out.join('\\n');\n\t}\n\n\tprivate _getCsp(\n\t\tprovider: WebviewResourceProvider,\n\t\tresource: vscode.Uri,\n\t\tnonce: string\n\t): string {\n\t\tconst rule = provider.cspSource;\n\t\tswitch (this._cspArbiter.getSecurityLevelForResource(resource)) {\n\t\t\tcase MarkdownPreviewSecurityLevel.AllowInsecureContent:\n\t\t\t\treturn `<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; img-src 'self' ${rule} http: https: data:; media-src 'self' ${rule} http: https: data:; script-src 'nonce-${nonce}'; style-src 'self' ${rule} 'unsafe-inline' http: https: data:; font-src 'self' ${rule} http: https: data:;\">`;\n\n\t\t\tcase MarkdownPreviewSecurityLevel.AllowInsecureLocalContent:\n\t\t\t\treturn `<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; img-src 'self' ${rule} https: data: http://localhost:* http://127.0.0.1:*; media-src 'self' ${rule} https: data: http://localhost:* http://127.0.0.1:*; script-src 'nonce-${nonce}'; style-src 'self' ${rule} 'unsafe-inline' https: data: http://localhost:* http://127.0.0.1:*; font-src 'self' ${rule} https: data: http://localhost:* http://127.0.0.1:*;\">`;\n\n\t\t\tcase MarkdownPreviewSecurityLevel.AllowScriptsAndAllContent:\n\t\t\t\treturn '<meta http-equiv=\"Content-Security-Policy\" content=\"\">';\n\n\t\t\tcase MarkdownPreviewSecurityLevel.Strict:\n\t\t\tdefault:\n\t\t\t\treturn `<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; img-src 'self' ${rule} https: data:; media-src 'self' ${rule} https: data:; script-src 'nonce-${nonce}'; style-src 'self' ${rule} 'unsafe-inline' https: data:; font-src 'self' ${rule} https: data:;\">`;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/preview/preview.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as uri from 'vscode-uri';\nimport { ILogger } from '../logging';\nimport { MarkdownContributionProvider } from '../markdownExtensions';\nimport { Disposable } from '../util/dispose';\nimport { isMarkdownFile } from '../util/file';\nimport { MdLinkOpener } from '../util/openDocumentLink';\nimport { WebviewResourceProvider } from '../util/resources';\nimport { urlToUri } from '../util/url';\nimport { ImageInfo, MdDocumentRenderer } from './documentRenderer';\nimport { MarkdownPreviewConfigurationManager } from './previewConfig';\nimport { scrollEditorToLine, StartingScrollFragment, StartingScrollLine, StartingScrollLocation } from './scrolling';\nimport { getVisibleLine, LastScrollLocation, TopmostLineMonitor } from './topmostLineMonitor';\nimport type { FromWebviewMessage, ToWebviewMessage } from '../../types/previewMessaging';\n\nexport class PreviewDocumentVersion {\n\n\tpublic readonly resource: vscode.Uri;\n\tprivate readonly _version: number;\n\n\tpublic constructor(document: vscode.TextDocument) {\n\t\tthis.resource = document.uri;\n\t\tthis._version = document.version;\n\t}\n\n\tpublic equals(other: PreviewDocumentVersion): boolean {\n\t\treturn this.resource.fsPath === other.resource.fsPath\n\t\t\t&& this._version === other._version;\n\t}\n}\n\ninterface MarkdownPreviewDelegate {\n\tgetTitle?(resource: vscode.Uri): string;\n\tgetAdditionalState(): {};\n\topenPreviewLinkToMarkdownFile(markdownLink: vscode.Uri, fragment: string | undefined): void;\n}\n\nclass MarkdownPreview extends Disposable implements WebviewResourceProvider {\n\n\tprivate static readonly _unwatchedImageSchemes = new Set(['https', 'http', 'data']);\n\n\tprivate _disposed: boolean = false;\n\n\tprivate readonly _delay = 300;\n\tprivate _throttleTimer: any;\n\n\tprivate readonly _resource: vscode.Uri;\n\tprivate readonly _webviewPanel: vscode.WebviewPanel;\n\n\tprivate _line: number | undefined;\n\tprivate _scrollToFragment: string | undefined;\n\tprivate _firstUpdate = true;\n\tprivate _currentVersion?: PreviewDocumentVersion;\n\tprivate _isScrolling = false;\n\n\tprivate _imageInfo: readonly ImageInfo[] = [];\n\tprivate readonly _fileWatchersBySrc = new Map</* src: */ string, vscode.FileSystemWatcher>();\n\n\tprivate readonly _onScrollEmitter = this._register(new vscode.EventEmitter<LastScrollLocation>());\n\tpublic readonly onScroll = this._onScrollEmitter.event;\n\n\tprivate readonly _disposeCts = this._register(new vscode.CancellationTokenSource());\n\n\tconstructor(\n\t\twebview: vscode.WebviewPanel,\n\t\tresource: vscode.Uri,\n\t\tstartingScroll: StartingScrollLocation | undefined,\n\t\tprivate readonly _delegate: MarkdownPreviewDelegate,\n\t\tprivate readonly _contentProvider: MdDocumentRenderer,\n\t\tprivate readonly _previewConfigurations: MarkdownPreviewConfigurationManager,\n\t\tprivate readonly _logger: ILogger,\n\t\tprivate readonly _contributionProvider: MarkdownContributionProvider,\n\t\tprivate readonly _opener: MdLinkOpener,\n\t) {\n\t\tsuper();\n\n\t\tthis._webviewPanel = webview;\n\t\tthis._resource = resource;\n\n\t\tswitch (startingScroll?.type) {\n\t\t\tcase 'line':\n\t\t\t\tif (!isNaN(startingScroll.line!)) {\n\t\t\t\t\tthis._line = startingScroll.line;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'fragment':\n\t\t\t\tthis._scrollToFragment = startingScroll.fragment;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis._register(_contributionProvider.onContributionsChanged(() => {\n\t\t\tsetTimeout(() => this.refresh(true), 0);\n\t\t}));\n\n\t\tthis._register(vscode.workspace.onDidChangeTextDocument(event => {\n\t\t\tif (this.isPreviewOf(event.document.uri)) {\n\t\t\t\tthis.refresh();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(vscode.workspace.onDidOpenTextDocument(document => {\n\t\t\tif (this.isPreviewOf(document.uri)) {\n\t\t\t\tthis.refresh();\n\t\t\t}\n\t\t}));\n\n\t\tconst watcher = this._register(vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(resource, '*')));\n\t\tthis._register(watcher.onDidChange(uri => {\n\t\t\tif (this.isPreviewOf(uri)) {\n\t\t\t\t// Only use the file system event when VS Code does not already know about the file\n\t\t\t\tif (!vscode.workspace.textDocuments.some(doc => doc.uri.toString() === uri.toString())) {\n\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._webviewPanel.webview.onDidReceiveMessage((e: FromWebviewMessage.Type) => {\n\t\t\tif (e.source !== this._resource.toString()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (e.type) {\n\t\t\t\tcase 'cacheImageSizes':\n\t\t\t\t\tthis._imageInfo = e.imageData;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'revealLine':\n\t\t\t\t\tthis._onDidScrollPreview(e.line);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'didClick':\n\t\t\t\t\tthis._onDidClickPreview(e.line);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'openLink':\n\t\t\t\t\tthis._onDidClickPreviewLink(e.href);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'showPreviewSecuritySelector':\n\t\t\t\t\tvscode.commands.executeCommand('markdown.showPreviewSecuritySelector', e.source);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'previewStyleLoadError':\n\t\t\t\t\tvscode.window.showWarningMessage(\n\t\t\t\t\t\tvscode.l10n.t(\"Could not load 'markdown.styles': {0}\", e.unloadedStyles.join(', ')));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}));\n\n\t\tthis.refresh();\n\t}\n\n\toverride dispose() {\n\t\tthis._disposeCts.cancel();\n\n\t\tsuper.dispose();\n\n\t\tthis._disposed = true;\n\n\t\tclearTimeout(this._throttleTimer);\n\t\tfor (const entry of this._fileWatchersBySrc.values()) {\n\t\t\tentry.dispose();\n\t\t}\n\t\tthis._fileWatchersBySrc.clear();\n\t}\n\n\tpublic get resource(): vscode.Uri {\n\t\treturn this._resource;\n\t}\n\n\tpublic get state() {\n\t\treturn {\n\t\t\tresource: this._resource.toString(),\n\t\t\tline: this._line,\n\t\t\tfragment: this._scrollToFragment,\n\t\t\t...this._delegate.getAdditionalState(),\n\t\t};\n\t}\n\n\t/**\n\t * The first call immediately refreshes the preview,\n\t * calls happening shortly thereafter are debounced.\n\t*/\n\tpublic refresh(forceUpdate: boolean = false) {\n\t\t// Schedule update if none is pending\n\t\tif (!this._throttleTimer) {\n\t\t\tif (this._firstUpdate) {\n\t\t\t\tthis._updatePreview(true);\n\t\t\t} else {\n\t\t\t\tthis._throttleTimer = setTimeout(() => this._updatePreview(forceUpdate), this._delay);\n\t\t\t}\n\t\t}\n\n\t\tthis._firstUpdate = false;\n\t}\n\n\n\tpublic isPreviewOf(resource: vscode.Uri): boolean {\n\t\treturn this._resource.fsPath === resource.fsPath;\n\t}\n\n\tpublic postMessage(msg: ToWebviewMessage.Type) {\n\t\tif (!this._disposed) {\n\t\t\tthis._webviewPanel.webview.postMessage(msg);\n\t\t}\n\t}\n\n\tpublic scrollTo(topLine: number) {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._isScrolling) {\n\t\t\tthis._isScrolling = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._logger.trace('MarkdownPreview', 'updateForView', { markdownFile: this._resource });\n\t\tthis._line = topLine;\n\t\tthis.postMessage({\n\t\t\ttype: 'updateView',\n\t\t\tline: topLine,\n\t\t\tsource: this._resource.toString()\n\t\t});\n\t}\n\n\tprivate async _updatePreview(forceUpdate?: boolean): Promise<void> {\n\t\tclearTimeout(this._throttleTimer);\n\t\tthis._throttleTimer = undefined;\n\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet document: vscode.TextDocument;\n\t\ttry {\n\t\t\tdocument = await vscode.workspace.openTextDocument(this._resource);\n\t\t} catch {\n\t\t\tif (!this._disposed) {\n\t\t\t\tawait this._showFileNotFoundError();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pendingVersion = new PreviewDocumentVersion(document);\n\t\tif (!forceUpdate && this._currentVersion?.equals(pendingVersion)) {\n\t\t\tif (this._line) {\n\t\t\t\tthis.scrollTo(this._line);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst shouldReloadPage = forceUpdate || !this._currentVersion || this._currentVersion.resource.toString() !== pendingVersion.resource.toString() || !this._webviewPanel.visible;\n\t\tthis._currentVersion = pendingVersion;\n\n\t\tlet selectedLine: number | undefined = undefined;\n\t\tfor (const editor of vscode.window.visibleTextEditors) {\n\t\t\tif (this.isPreviewOf(editor.document.uri)) {\n\t\t\t\tselectedLine = editor.selection.active.line;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst content = await (shouldReloadPage\n\t\t\t? this._contentProvider.renderDocument(document, this, this._previewConfigurations, this._line, selectedLine, this.state, this._imageInfo, this._disposeCts.token)\n\t\t\t: this._contentProvider.renderBody(document, this));\n\n\t\t// Another call to `doUpdate` may have happened.\n\t\t// Make sure we are still updating for the correct document\n\t\tif (this._currentVersion?.equals(pendingVersion)) {\n\t\t\tthis._updateWebviewContent(content.html, shouldReloadPage);\n\t\t\tthis._updateImageWatchers(content.containingImages);\n\t\t}\n\t}\n\n\tprivate _onDidScrollPreview(line: number) {\n\t\tthis._line = line;\n\t\tthis._onScrollEmitter.fire({ line: this._line, uri: this._resource });\n\t\tconst config = this._previewConfigurations.loadAndCacheConfiguration(this._resource);\n\t\tif (!config.scrollEditorWithPreview) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const editor of vscode.window.visibleTextEditors) {\n\t\t\tif (!this.isPreviewOf(editor.document.uri)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis._isScrolling = true;\n\t\t\tscrollEditorToLine(line, editor);\n\t\t}\n\t}\n\n\tprivate async _onDidClickPreview(line: number): Promise<void> {\n\t\t// fix #82457, find currently opened but unfocused source tab\n\t\tawait vscode.commands.executeCommand('markdown.showSource');\n\n\t\tconst revealLineInEditor = (editor: vscode.TextEditor) => {\n\t\t\tconst position = new vscode.Position(line, 0);\n\t\t\tconst newSelection = new vscode.Selection(position, position);\n\t\t\teditor.selection = newSelection;\n\t\t\teditor.revealRange(newSelection, vscode.TextEditorRevealType.InCenterIfOutsideViewport);\n\t\t};\n\n\t\tfor (const visibleEditor of vscode.window.visibleTextEditors) {\n\t\t\tif (this.isPreviewOf(visibleEditor.document.uri)) {\n\t\t\t\tconst editor = await vscode.window.showTextDocument(visibleEditor.document, visibleEditor.viewColumn);\n\t\t\t\trevealLineInEditor(editor);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tawait vscode.workspace.openTextDocument(this._resource)\n\t\t\t.then(vscode.window.showTextDocument)\n\t\t\t.then((editor) => {\n\t\t\t\trevealLineInEditor(editor);\n\t\t\t}, () => {\n\t\t\t\tvscode.window.showErrorMessage(vscode.l10n.t('Could not open {0}', this._resource.toString()));\n\t\t\t});\n\t}\n\n\tprivate async _showFileNotFoundError() {\n\t\tthis._webviewPanel.webview.html = this._contentProvider.renderFileNotFoundDocument(this._resource);\n\t}\n\n\tprivate _updateWebviewContent(html: string, reloadPage: boolean): void {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._delegate.getTitle) {\n\t\t\tthis._webviewPanel.title = this._delegate.getTitle(this._resource);\n\t\t}\n\t\tthis._webviewPanel.webview.options = this._getWebviewOptions();\n\n\t\tif (reloadPage) {\n\t\t\tthis._webviewPanel.webview.html = html;\n\t\t} else {\n\t\t\tthis.postMessage({\n\t\t\t\ttype: 'updateContent',\n\t\t\t\tcontent: html,\n\t\t\t\tsource: this._resource.toString(),\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _updateImageWatchers(srcs: Set<string>) {\n\t\t// Delete stale file watchers.\n\t\tfor (const [src, watcher] of this._fileWatchersBySrc) {\n\t\t\tif (!srcs.has(src)) {\n\t\t\t\twatcher.dispose();\n\t\t\t\tthis._fileWatchersBySrc.delete(src);\n\t\t\t}\n\t\t}\n\n\t\t// Create new file watchers.\n\t\tconst root = vscode.Uri.joinPath(this._resource, '../');\n\t\tfor (const src of srcs) {\n\t\t\tconst uri = urlToUri(src, root);\n\t\t\tif (uri && !MarkdownPreview._unwatchedImageSchemes.has(uri.scheme) && !this._fileWatchersBySrc.has(src)) {\n\t\t\t\tconst watcher = vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(uri, '*'));\n\t\t\t\twatcher.onDidChange(() => {\n\t\t\t\t\tthis.refresh(true);\n\t\t\t\t});\n\t\t\t\tthis._fileWatchersBySrc.set(src, watcher);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _getWebviewOptions(): vscode.WebviewOptions {\n\t\treturn {\n\t\t\tenableScripts: true,\n\t\t\tenableForms: false,\n\t\t\tlocalResourceRoots: this._getLocalResourceRoots()\n\t\t};\n\t}\n\n\tprivate _getLocalResourceRoots(): ReadonlyArray<vscode.Uri> {\n\t\tconst baseRoots = Array.from(this._contributionProvider.contributions.previewResourceRoots);\n\n\t\tconst folder = vscode.workspace.getWorkspaceFolder(this._resource);\n\t\tif (folder) {\n\t\t\tconst workspaceRoots = vscode.workspace.workspaceFolders?.map(folder => folder.uri);\n\t\t\tif (workspaceRoots) {\n\t\t\t\tbaseRoots.push(...workspaceRoots);\n\t\t\t}\n\t\t} else {\n\t\t\tbaseRoots.push(uri.Utils.dirname(this._resource));\n\t\t}\n\n\t\treturn baseRoots;\n\t}\n\n\tprivate async _onDidClickPreviewLink(href: string) {\n\t\tconst config = vscode.workspace.getConfiguration('markdown', this.resource);\n\t\tconst openLinks = config.get<string>('preview.openMarkdownLinks', 'inPreview');\n\t\tif (openLinks === 'inPreview') {\n\t\t\tconst resolved = await this._opener.resolveDocumentLink(href, this.resource);\n\t\t\tif (resolved.kind === 'file') {\n\t\t\t\ttry {\n\t\t\t\t\tconst doc = await vscode.workspace.openTextDocument(vscode.Uri.from(resolved.uri));\n\t\t\t\t\tif (isMarkdownFile(doc)) {\n\t\t\t\t\t\treturn this._delegate.openPreviewLinkToMarkdownFile(doc.uri, resolved.fragment ? decodeURIComponent(resolved.fragment) : undefined);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Noop\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this._opener.openDocumentLink(href, this.resource);\n\t}\n\n\t//#region WebviewResourceProvider\n\n\tasWebviewUri(resource: vscode.Uri) {\n\t\treturn this._webviewPanel.webview.asWebviewUri(resource);\n\t}\n\n\tget cspSource() {\n\t\treturn this._webviewPanel.webview.cspSource;\n\t}\n\n\t//#endregion\n}\n\nexport interface IManagedMarkdownPreview {\n\n\treadonly resource: vscode.Uri;\n\treadonly resourceColumn: vscode.ViewColumn;\n\n\treadonly onDispose: vscode.Event<void>;\n\treadonly onDidChangeViewState: vscode.Event<vscode.WebviewPanelOnDidChangeViewStateEvent>;\n\n\tcopyImage(id: string): void;\n\tdispose(): void;\n\trefresh(): void;\n\tupdateConfiguration(): void;\n\n\tmatchesResource(\n\t\totherResource: vscode.Uri,\n\t\totherPosition: vscode.ViewColumn | undefined,\n\t\totherLocked: boolean\n\t): boolean;\n}\n\nexport class StaticMarkdownPreview extends Disposable implements IManagedMarkdownPreview {\n\n\tpublic static readonly customEditorViewType = 'vscode.markdown.preview.editor';\n\n\tpublic static revive(\n\t\tresource: vscode.Uri,\n\t\twebview: vscode.WebviewPanel,\n\t\tcontentProvider: MdDocumentRenderer,\n\t\tpreviewConfigurations: MarkdownPreviewConfigurationManager,\n\t\ttopmostLineMonitor: TopmostLineMonitor,\n\t\tlogger: ILogger,\n\t\tcontributionProvider: MarkdownContributionProvider,\n\t\topener: MdLinkOpener,\n\t\tscrollLine?: number,\n\t): StaticMarkdownPreview {\n\t\treturn new StaticMarkdownPreview(webview, resource, contentProvider, previewConfigurations, topmostLineMonitor, logger, contributionProvider, opener, scrollLine);\n\t}\n\n\tprivate readonly _preview: MarkdownPreview;\n\n\tprivate constructor(\n\t\tprivate readonly _webviewPanel: vscode.WebviewPanel,\n\t\tresource: vscode.Uri,\n\t\tcontentProvider: MdDocumentRenderer,\n\t\tprivate readonly _previewConfigurations: MarkdownPreviewConfigurationManager,\n\t\ttopmostLineMonitor: TopmostLineMonitor,\n\t\tlogger: ILogger,\n\t\tcontributionProvider: MarkdownContributionProvider,\n\t\topener: MdLinkOpener,\n\t\tscrollLine?: number,\n\t) {\n\t\tsuper();\n\t\tconst topScrollLocation = scrollLine ? new StartingScrollLine(scrollLine) : undefined;\n\t\tthis._preview = this._register(new MarkdownPreview(this._webviewPanel, resource, topScrollLocation, {\n\t\t\tgetAdditionalState: () => { return {}; },\n\t\t\topenPreviewLinkToMarkdownFile: (markdownLink, fragment) => {\n\t\t\t\treturn vscode.commands.executeCommand('vscode.openWith', markdownLink.with({\n\t\t\t\t\tfragment\n\t\t\t\t}), StaticMarkdownPreview.customEditorViewType, this._webviewPanel.viewColumn);\n\t\t\t}\n\t\t}, contentProvider, _previewConfigurations, logger, contributionProvider, opener));\n\n\t\tthis._register(this._webviewPanel.onDidDispose(() => {\n\t\t\tthis.dispose();\n\t\t}));\n\n\t\tthis._register(this._webviewPanel.onDidChangeViewState(e => {\n\t\t\tthis._onDidChangeViewState.fire(e);\n\t\t}));\n\n\t\tthis._register(this._preview.onScroll((scrollInfo) => {\n\t\t\ttopmostLineMonitor.setPreviousStaticEditorLine(scrollInfo);\n\t\t}));\n\n\t\tthis._register(topmostLineMonitor.onDidChanged(event => {\n\t\t\tif (this._preview.isPreviewOf(event.resource)) {\n\t\t\t\tthis._preview.scrollTo(event.line);\n\t\t\t}\n\t\t}));\n\t}\n\n\tcopyImage(id: string) {\n\t\tthis._webviewPanel.reveal();\n\t\tthis._preview.postMessage({\n\t\t\ttype: 'copyImage',\n\t\t\tsource: this.resource.toString(),\n\t\t\tid: id\n\t\t});\n\t}\n\n\tprivate readonly _onDispose = this._register(new vscode.EventEmitter<void>());\n\tpublic readonly onDispose = this._onDispose.event;\n\n\tprivate readonly _onDidChangeViewState = this._register(new vscode.EventEmitter<vscode.WebviewPanelOnDidChangeViewStateEvent>());\n\tpublic readonly onDidChangeViewState = this._onDidChangeViewState.event;\n\n\toverride dispose() {\n\t\tthis._onDispose.fire();\n\t\tsuper.dispose();\n\t}\n\n\tpublic matchesResource(\n\t\t_otherResource: vscode.Uri,\n\t\t_otherPosition: vscode.ViewColumn | undefined,\n\t\t_otherLocked: boolean\n\t): boolean {\n\t\treturn false;\n\t}\n\n\tpublic refresh() {\n\t\tthis._preview.refresh(true);\n\t}\n\n\tpublic updateConfiguration() {\n\t\tif (this._previewConfigurations.hasConfigurationChanged(this._preview.resource)) {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tpublic get resource() {\n\t\treturn this._preview.resource;\n\t}\n\n\tpublic get resourceColumn() {\n\t\treturn this._webviewPanel.viewColumn || vscode.ViewColumn.One;\n\t}\n}\n\ninterface DynamicPreviewInput {\n\treadonly resource: vscode.Uri;\n\treadonly resourceColumn: vscode.ViewColumn;\n\treadonly locked: boolean;\n\treadonly line?: number;\n}\n\nexport class DynamicMarkdownPreview extends Disposable implements IManagedMarkdownPreview {\n\n\tpublic static readonly viewType = 'markdown.preview';\n\n\tprivate readonly _resourceColumn: vscode.ViewColumn;\n\tprivate _locked: boolean;\n\n\tprivate readonly _webviewPanel: vscode.WebviewPanel;\n\tprivate _preview: MarkdownPreview;\n\n\tpublic static revive(\n\t\tinput: DynamicPreviewInput,\n\t\twebview: vscode.WebviewPanel,\n\t\tcontentProvider: MdDocumentRenderer,\n\t\tpreviewConfigurations: MarkdownPreviewConfigurationManager,\n\t\tlogger: ILogger,\n\t\ttopmostLineMonitor: TopmostLineMonitor,\n\t\tcontributionProvider: MarkdownContributionProvider,\n\t\topener: MdLinkOpener,\n\t): DynamicMarkdownPreview {\n\t\twebview.iconPath = contentProvider.iconPath;\n\n\t\treturn new DynamicMarkdownPreview(webview, input,\n\t\t\tcontentProvider, previewConfigurations, logger, topmostLineMonitor, contributionProvider, opener);\n\t}\n\n\tpublic static create(\n\t\tinput: DynamicPreviewInput,\n\t\tpreviewColumn: vscode.ViewColumn,\n\t\tcontentProvider: MdDocumentRenderer,\n\t\tpreviewConfigurations: MarkdownPreviewConfigurationManager,\n\t\tlogger: ILogger,\n\t\ttopmostLineMonitor: TopmostLineMonitor,\n\t\tcontributionProvider: MarkdownContributionProvider,\n\t\topener: MdLinkOpener,\n\t): DynamicMarkdownPreview {\n\t\tconst webview = vscode.window.createWebviewPanel(\n\t\t\tDynamicMarkdownPreview.viewType,\n\t\t\tDynamicMarkdownPreview._getPreviewTitle(input.resource, input.locked),\n\t\t\tpreviewColumn, { enableFindWidget: true, });\n\n\t\twebview.iconPath = contentProvider.iconPath;\n\n\t\treturn new DynamicMarkdownPreview(webview, input,\n\t\t\tcontentProvider, previewConfigurations, logger, topmostLineMonitor, contributionProvider, opener);\n\t}\n\n\tprivate constructor(\n\t\twebview: vscode.WebviewPanel,\n\t\tinput: DynamicPreviewInput,\n\t\tprivate readonly _contentProvider: MdDocumentRenderer,\n\t\tprivate readonly _previewConfigurations: MarkdownPreviewConfigurationManager,\n\t\tprivate readonly _logger: ILogger,\n\t\tprivate readonly _topmostLineMonitor: TopmostLineMonitor,\n\t\tprivate readonly _contributionProvider: MarkdownContributionProvider,\n\t\tprivate readonly _opener: MdLinkOpener,\n\t) {\n\t\tsuper();\n\n\t\tthis._webviewPanel = webview;\n\n\t\tthis._resourceColumn = input.resourceColumn;\n\t\tthis._locked = input.locked;\n\n\t\tthis._preview = this._createPreview(input.resource, typeof input.line === 'number' ? new StartingScrollLine(input.line) : undefined);\n\n\t\tthis._register(webview.onDidDispose(() => { this.dispose(); }));\n\n\t\tthis._register(this._webviewPanel.onDidChangeViewState(e => {\n\t\t\tthis._onDidChangeViewStateEmitter.fire(e);\n\t\t}));\n\n\t\tthis._register(this._topmostLineMonitor.onDidChanged(event => {\n\t\t\tif (this._preview.isPreviewOf(event.resource)) {\n\t\t\t\tthis._preview.scrollTo(event.line);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(vscode.window.onDidChangeTextEditorSelection(event => {\n\t\t\tif (this._preview.isPreviewOf(event.textEditor.document.uri)) {\n\t\t\t\tthis._preview.postMessage({\n\t\t\t\t\ttype: 'onDidChangeTextEditorSelection',\n\t\t\t\t\tline: event.selections[0].active.line,\n\t\t\t\t\tsource: this._preview.resource.toString()\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(vscode.window.onDidChangeActiveTextEditor(editor => {\n\t\t\t// Only allow previewing normal text editors which have a viewColumn: See #101514\n\t\t\tif (typeof editor?.viewColumn === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isMarkdownFile(editor.document) && !this._locked && !this._preview.isPreviewOf(editor.document.uri)) {\n\t\t\t\tconst line = getVisibleLine(editor);\n\t\t\t\tthis.update(editor.document.uri, line ? new StartingScrollLine(line) : undefined);\n\t\t\t}\n\t\t}));\n\t}\n\n\tcopyImage(id: string) {\n\t\tthis._webviewPanel.reveal();\n\t\tthis._preview.postMessage({\n\t\t\ttype: 'copyImage',\n\t\t\tsource: this.resource.toString(),\n\t\t\tid: id\n\t\t});\n\t}\n\n\tprivate readonly _onDisposeEmitter = this._register(new vscode.EventEmitter<void>());\n\tpublic readonly onDispose = this._onDisposeEmitter.event;\n\n\tprivate readonly _onDidChangeViewStateEmitter = this._register(new vscode.EventEmitter<vscode.WebviewPanelOnDidChangeViewStateEvent>());\n\tpublic readonly onDidChangeViewState = this._onDidChangeViewStateEmitter.event;\n\n\toverride dispose() {\n\t\tthis._preview.dispose();\n\t\tthis._webviewPanel.dispose();\n\n\t\tthis._onDisposeEmitter.fire();\n\t\tthis._onDisposeEmitter.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic get resource() {\n\t\treturn this._preview.resource;\n\t}\n\n\tpublic get resourceColumn() {\n\t\treturn this._resourceColumn;\n\t}\n\n\tpublic reveal(viewColumn: vscode.ViewColumn) {\n\t\tthis._webviewPanel.reveal(viewColumn);\n\t}\n\n\tpublic refresh() {\n\t\tthis._preview.refresh(true);\n\t}\n\n\tpublic updateConfiguration() {\n\t\tif (this._previewConfigurations.hasConfigurationChanged(this._preview.resource)) {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tpublic update(newResource: vscode.Uri, scrollLocation?: StartingScrollLocation) {\n\t\tif (this._preview.isPreviewOf(newResource)) {\n\t\t\tswitch (scrollLocation?.type) {\n\t\t\t\tcase 'line':\n\t\t\t\t\tthis._preview.scrollTo(scrollLocation.line);\n\t\t\t\t\treturn;\n\n\t\t\t\tcase 'fragment':\n\t\t\t\t\t// Workaround. For fragments, just reload the entire preview\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis._preview.dispose();\n\t\tthis._preview = this._createPreview(newResource, scrollLocation);\n\t}\n\n\tpublic toggleLock() {\n\t\tthis._locked = !this._locked;\n\t\tthis._webviewPanel.title = DynamicMarkdownPreview._getPreviewTitle(this._preview.resource, this._locked);\n\t}\n\n\tprivate static _getPreviewTitle(resource: vscode.Uri, locked: boolean): string {\n\t\tconst resourceLabel = uri.Utils.basename(resource);\n\t\treturn locked\n\t\t\t? vscode.l10n.t('[Preview] {0}', resourceLabel)\n\t\t\t: vscode.l10n.t('Preview {0}', resourceLabel);\n\t}\n\n\tpublic get position(): vscode.ViewColumn | undefined {\n\t\treturn this._webviewPanel.viewColumn;\n\t}\n\n\tpublic matchesResource(\n\t\totherResource: vscode.Uri,\n\t\totherPosition: vscode.ViewColumn | undefined,\n\t\totherLocked: boolean\n\t): boolean {\n\t\tif (this.position !== otherPosition) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._locked) {\n\t\t\treturn otherLocked && this._preview.isPreviewOf(otherResource);\n\t\t} else {\n\t\t\treturn !otherLocked;\n\t\t}\n\t}\n\n\tpublic matches(otherPreview: DynamicMarkdownPreview): boolean {\n\t\treturn this.matchesResource(otherPreview._preview.resource, otherPreview.position, otherPreview._locked);\n\t}\n\n\tprivate _createPreview(resource: vscode.Uri, startingScroll?: StartingScrollLocation): MarkdownPreview {\n\t\treturn new MarkdownPreview(this._webviewPanel, resource, startingScroll, {\n\t\t\tgetTitle: (resource) => DynamicMarkdownPreview._getPreviewTitle(resource, this._locked),\n\t\t\tgetAdditionalState: () => {\n\t\t\t\treturn {\n\t\t\t\t\tresourceColumn: this.resourceColumn,\n\t\t\t\t\tlocked: this._locked,\n\t\t\t\t};\n\t\t\t},\n\t\t\topenPreviewLinkToMarkdownFile: (link: vscode.Uri, fragment?: string) => {\n\t\t\t\tthis.update(link, fragment ? new StartingScrollFragment(fragment) : undefined);\n\t\t\t}\n\t\t},\n\t\t\tthis._contentProvider,\n\t\t\tthis._previewConfigurations,\n\t\t\tthis._logger,\n\t\t\tthis._contributionProvider,\n\t\t\tthis._opener);\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/preview/previewConfig.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { equals } from '../util/arrays';\n\nexport class MarkdownPreviewConfiguration {\n\tpublic static getForResource(resource: vscode.Uri | null) {\n\t\treturn new MarkdownPreviewConfiguration(resource);\n\t}\n\n\tpublic readonly scrollBeyondLastLine: boolean;\n\tpublic readonly wordWrap: boolean;\n\n\tpublic readonly previewLineBreaks: boolean;\n\tpublic readonly previewLinkify: boolean;\n\tpublic readonly previewTypographer: boolean;\n\n\tpublic readonly doubleClickToSwitchToEditor: boolean;\n\tpublic readonly scrollEditorWithPreview: boolean;\n\tpublic readonly scrollPreviewWithEditor: boolean;\n\tpublic readonly markEditorSelection: boolean;\n\n\tpublic readonly lineHeight: number;\n\tpublic readonly fontSize: number;\n\tpublic readonly fontFamily: string | undefined;\n\tpublic readonly styles: readonly string[];\n\n\tprivate constructor(resource: vscode.Uri | null) {\n\t\tconst editorConfig = vscode.workspace.getConfiguration('editor', resource);\n\t\tconst markdownConfig = vscode.workspace.getConfiguration('markdown', resource);\n\t\tconst markdownEditorConfig = vscode.workspace.getConfiguration('[markdown]', resource);\n\n\t\tthis.scrollBeyondLastLine = editorConfig.get<boolean>('scrollBeyondLastLine', false);\n\n\t\tthis.wordWrap = editorConfig.get<string>('wordWrap', 'off') !== 'off';\n\t\tif (markdownEditorConfig && markdownEditorConfig['editor.wordWrap']) {\n\t\t\tthis.wordWrap = markdownEditorConfig['editor.wordWrap'] !== 'off';\n\t\t}\n\n\t\tthis.scrollPreviewWithEditor = !!markdownConfig.get<boolean>('preview.scrollPreviewWithEditor', true);\n\t\tthis.scrollEditorWithPreview = !!markdownConfig.get<boolean>('preview.scrollEditorWithPreview', true);\n\n\t\tthis.previewLineBreaks = !!markdownConfig.get<boolean>('preview.breaks', false);\n\t\tthis.previewLinkify = !!markdownConfig.get<boolean>('preview.linkify', true);\n\t\tthis.previewTypographer = !!markdownConfig.get<boolean>('preview.typographer', false);\n\n\t\tthis.doubleClickToSwitchToEditor = !!markdownConfig.get<boolean>('preview.doubleClickToSwitchToEditor', true);\n\t\tthis.markEditorSelection = !!markdownConfig.get<boolean>('preview.markEditorSelection', true);\n\n\t\tthis.fontFamily = markdownConfig.get<string | undefined>('preview.fontFamily', undefined);\n\t\tthis.fontSize = Math.max(8, +markdownConfig.get<number>('preview.fontSize', NaN));\n\t\tthis.lineHeight = Math.max(0.6, +markdownConfig.get<number>('preview.lineHeight', NaN));\n\n\t\tthis.styles = markdownConfig.get<string[]>('styles', []);\n\t}\n\n\tpublic isEqualTo(otherConfig: MarkdownPreviewConfiguration) {\n\t\tfor (const key in this) {\n\t\t\tif (this.hasOwnProperty(key) && key !== 'styles') {\n\t\t\t\tif (this[key] !== otherConfig[key]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equals(this.styles, otherConfig.styles);\n\t}\n\n\treadonly [key: string]: any;\n}\n\nexport class MarkdownPreviewConfigurationManager {\n\tprivate readonly _previewConfigurationsForWorkspaces = new Map<string, MarkdownPreviewConfiguration>();\n\n\tpublic loadAndCacheConfiguration(\n\t\tresource: vscode.Uri\n\t): MarkdownPreviewConfiguration {\n\t\tconst config = MarkdownPreviewConfiguration.getForResource(resource);\n\t\tthis._previewConfigurationsForWorkspaces.set(this._getKey(resource), config);\n\t\treturn config;\n\t}\n\n\tpublic hasConfigurationChanged(\n\t\tresource: vscode.Uri\n\t): boolean {\n\t\tconst key = this._getKey(resource);\n\t\tconst currentConfig = this._previewConfigurationsForWorkspaces.get(key);\n\t\tconst newConfig = MarkdownPreviewConfiguration.getForResource(resource);\n\t\treturn (!currentConfig || !currentConfig.isEqualTo(newConfig));\n\t}\n\n\tprivate _getKey(\n\t\tresource: vscode.Uri\n\t): string {\n\t\tconst folder = vscode.workspace.getWorkspaceFolder(resource);\n\t\treturn folder ? folder.uri.toString() : '';\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/preview/previewManager.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { ILogger } from '../logging';\nimport { MarkdownContributionProvider } from '../markdownExtensions';\nimport { Disposable, disposeAll } from '../util/dispose';\nimport { isMarkdownFile } from '../util/file';\nimport { MdLinkOpener } from '../util/openDocumentLink';\nimport { MdDocumentRenderer } from './documentRenderer';\nimport { DynamicMarkdownPreview, IManagedMarkdownPreview, StaticMarkdownPreview } from './preview';\nimport { MarkdownPreviewConfigurationManager } from './previewConfig';\nimport { scrollEditorToLine, StartingScrollFragment } from './scrolling';\nimport { TopmostLineMonitor } from './topmostLineMonitor';\n\n\nexport interface DynamicPreviewSettings {\n\treadonly resourceColumn: vscode.ViewColumn;\n\treadonly previewColumn: vscode.ViewColumn;\n\treadonly locked: boolean;\n}\n\nclass PreviewStore<T extends IManagedMarkdownPreview> extends Disposable {\n\n\tprivate readonly _previews = new Set<T>();\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tfor (const preview of this._previews) {\n\t\t\tpreview.dispose();\n\t\t}\n\t\tthis._previews.clear();\n\t}\n\n\t[Symbol.iterator](): Iterator<T> {\n\t\treturn this._previews[Symbol.iterator]();\n\t}\n\n\tpublic get(resource: vscode.Uri, previewSettings: DynamicPreviewSettings): T | undefined {\n\t\tconst previewColumn = this._resolvePreviewColumn(previewSettings);\n\t\tfor (const preview of this._previews) {\n\t\t\tif (preview.matchesResource(resource, previewColumn, previewSettings.locked)) {\n\t\t\t\treturn preview;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic add(preview: T) {\n\t\tthis._previews.add(preview);\n\t}\n\n\tpublic delete(preview: T) {\n\t\tthis._previews.delete(preview);\n\t}\n\n\tprivate _resolvePreviewColumn(previewSettings: DynamicPreviewSettings): vscode.ViewColumn | undefined {\n\t\tif (previewSettings.previewColumn === vscode.ViewColumn.Active) {\n\t\t\treturn vscode.window.tabGroups.activeTabGroup.viewColumn;\n\t\t}\n\n\t\tif (previewSettings.previewColumn === vscode.ViewColumn.Beside) {\n\t\t\treturn vscode.window.tabGroups.activeTabGroup.viewColumn + 1;\n\t\t}\n\n\t\treturn previewSettings.previewColumn;\n\t}\n}\n\nexport class MarkdownPreviewManager extends Disposable implements vscode.WebviewPanelSerializer, vscode.CustomTextEditorProvider {\n\n\tprivate readonly _topmostLineMonitor = new TopmostLineMonitor();\n\tprivate readonly _previewConfigurations = new MarkdownPreviewConfigurationManager();\n\n\tprivate readonly _dynamicPreviews = this._register(new PreviewStore<DynamicMarkdownPreview>());\n\tprivate readonly _staticPreviews = this._register(new PreviewStore<StaticMarkdownPreview>());\n\n\tprivate _activePreview: IManagedMarkdownPreview | undefined = undefined;\n\n\tpublic constructor(\n\t\tprivate readonly _contentProvider: MdDocumentRenderer,\n\t\tprivate readonly _logger: ILogger,\n\t\tprivate readonly _contributions: MarkdownContributionProvider,\n\t\tprivate readonly _opener: MdLinkOpener,\n\t) {\n\t\tsuper();\n\n\t\tthis._register(vscode.window.registerWebviewPanelSerializer(DynamicMarkdownPreview.viewType, this));\n\n\t\tthis._register(vscode.window.registerCustomEditorProvider(StaticMarkdownPreview.customEditorViewType, this, {\n\t\t\twebviewOptions: { enableFindWidget: true }\n\t\t}));\n\n\t\tthis._register(vscode.window.onDidChangeActiveTextEditor(textEditor => {\n\t\t\t// When at a markdown file, apply existing scroll settings\n\t\t\tif (textEditor?.document && isMarkdownFile(textEditor.document)) {\n\t\t\t\tconst line = this._topmostLineMonitor.getPreviousStaticEditorLineByUri(textEditor.document.uri);\n\t\t\t\tif (typeof line === 'number') {\n\t\t\t\t\tscrollEditorToLine(line, textEditor);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic refresh() {\n\t\tfor (const preview of this._dynamicPreviews) {\n\t\t\tpreview.refresh();\n\t\t}\n\t\tfor (const preview of this._staticPreviews) {\n\t\t\tpreview.refresh();\n\t\t}\n\t}\n\n\tpublic updateConfiguration() {\n\t\tfor (const preview of this._dynamicPreviews) {\n\t\t\tpreview.updateConfiguration();\n\t\t}\n\t\tfor (const preview of this._staticPreviews) {\n\t\t\tpreview.updateConfiguration();\n\t\t}\n\t}\n\n\tpublic openDynamicPreview(\n\t\tresource: vscode.Uri,\n\t\tsettings: DynamicPreviewSettings\n\t): void {\n\t\tlet preview = this._dynamicPreviews.get(resource, settings);\n\t\tif (preview) {\n\t\t\tpreview.reveal(settings.previewColumn);\n\t\t} else {\n\t\t\tpreview = this._createNewDynamicPreview(resource, settings);\n\t\t}\n\n\t\tpreview.update(\n\t\t\tresource,\n\t\t\tresource.fragment ? new StartingScrollFragment(resource.fragment) : undefined\n\t\t);\n\t}\n\n\tpublic get activePreviewResource() {\n\t\treturn this._activePreview?.resource;\n\t}\n\n\tpublic get activePreviewResourceColumn() {\n\t\treturn this._activePreview?.resourceColumn;\n\t}\n\n\tpublic findPreview(resource: vscode.Uri): IManagedMarkdownPreview | undefined {\n\t\tfor (const preview of [...this._dynamicPreviews, ...this._staticPreviews]) {\n\t\t\tif (preview.resource.fsPath === resource.fsPath) {\n\t\t\t\treturn preview;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic toggleLock() {\n\t\tconst preview = this._activePreview;\n\t\tif (preview instanceof DynamicMarkdownPreview) {\n\t\t\tpreview.toggleLock();\n\n\t\t\t// Close any previews that are now redundant, such as having two dynamic previews in the same editor group\n\t\t\tfor (const otherPreview of this._dynamicPreviews) {\n\t\t\t\tif (otherPreview !== preview && preview.matches(otherPreview)) {\n\t\t\t\t\totherPreview.dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic openDocumentLink(linkText: string, fromResource: vscode.Uri) {\n\t\tconst viewColumn = this.findPreview(fromResource)?.resourceColumn;\n\t\treturn this._opener.openDocumentLink(linkText, fromResource, viewColumn);\n\t}\n\n\tpublic async deserializeWebviewPanel(\n\t\twebview: vscode.WebviewPanel,\n\t\tstate: any\n\t): Promise<void> {\n\t\ttry {\n\t\t\tconst resource = vscode.Uri.parse(state.resource);\n\t\t\tconst locked = state.locked;\n\t\t\tconst line = state.line;\n\t\t\tconst resourceColumn = state.resourceColumn;\n\n\t\t\tconst preview = DynamicMarkdownPreview.revive(\n\t\t\t\t{ resource, locked, line, resourceColumn },\n\t\t\t\twebview,\n\t\t\t\tthis._contentProvider,\n\t\t\t\tthis._previewConfigurations,\n\t\t\t\tthis._logger,\n\t\t\t\tthis._topmostLineMonitor,\n\t\t\t\tthis._contributions,\n\t\t\t\tthis._opener);\n\n\t\t\tthis._registerDynamicPreview(preview);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\n\t\t\twebview.webview.html = /* html */`<!DOCTYPE html>\n\t\t\t<html lang=\"en\">\n\t\t\t<head>\n\t\t\t\t<meta charset=\"UTF-8\">\n\n\t\t\t\t<!-- Disable pinch zooming -->\n\t\t\t\t<meta name=\"viewport\"\n\t\t\t\t\tcontent=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no\">\n\n\t\t\t\t<title>Markdown Preview</title>\n\n\t\t\t\t<style>\n\t\t\t\t\thtml, body {\n\t\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t}\n\n\t\t\t\t\t.error-container {\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\n\t\t\t\t<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none';\">\n\t\t\t</head>\n\t\t\t<body class=\"error-container\">\n\t\t\t\t<p>${vscode.l10n.t(\"An unexpected error occurred while restoring the Markdown preview.\")}</p>\n\t\t\t</body>\n\t\t\t</html>`;\n\t\t}\n\t}\n\n\tpublic async resolveCustomTextEditor(\n\t\tdocument: vscode.TextDocument,\n\t\twebview: vscode.WebviewPanel\n\t): Promise<void> {\n\t\tconst lineNumber = this._topmostLineMonitor.getPreviousStaticTextEditorLineByUri(document.uri);\n\t\tconst preview = StaticMarkdownPreview.revive(\n\t\t\tdocument.uri,\n\t\t\twebview,\n\t\t\tthis._contentProvider,\n\t\t\tthis._previewConfigurations,\n\t\t\tthis._topmostLineMonitor,\n\t\t\tthis._logger,\n\t\t\tthis._contributions,\n\t\t\tthis._opener,\n\t\t\tlineNumber\n\t\t);\n\t\tthis._registerStaticPreview(preview);\n\t\tthis._activePreview = preview;\n\t}\n\n\tprivate _createNewDynamicPreview(\n\t\tresource: vscode.Uri,\n\t\tpreviewSettings: DynamicPreviewSettings\n\t): DynamicMarkdownPreview {\n\t\tconst activeTextEditorURI = vscode.window.activeTextEditor?.document.uri;\n\t\tconst scrollLine = (activeTextEditorURI?.toString() === resource.toString()) ? vscode.window.activeTextEditor?.visibleRanges[0].start.line : undefined;\n\t\tconst preview = DynamicMarkdownPreview.create(\n\t\t\t{\n\t\t\t\tresource,\n\t\t\t\tresourceColumn: previewSettings.resourceColumn,\n\t\t\t\tlocked: previewSettings.locked,\n\t\t\t\tline: scrollLine,\n\t\t\t},\n\t\t\tpreviewSettings.previewColumn,\n\t\t\tthis._contentProvider,\n\t\t\tthis._previewConfigurations,\n\t\t\tthis._logger,\n\t\t\tthis._topmostLineMonitor,\n\t\t\tthis._contributions,\n\t\t\tthis._opener);\n\n\t\tthis._activePreview = preview;\n\t\treturn this._registerDynamicPreview(preview);\n\t}\n\n\tprivate _registerDynamicPreview(preview: DynamicMarkdownPreview): DynamicMarkdownPreview {\n\t\tthis._dynamicPreviews.add(preview);\n\n\t\tpreview.onDispose(() => {\n\t\t\tthis._dynamicPreviews.delete(preview);\n\t\t});\n\n\t\tthis._trackActive(preview);\n\n\t\tpreview.onDidChangeViewState(() => {\n\t\t\t// Remove other dynamic previews in our column\n\t\t\tdisposeAll(Array.from(this._dynamicPreviews).filter(otherPreview => preview !== otherPreview && preview.matches(otherPreview)));\n\t\t});\n\t\treturn preview;\n\t}\n\n\tprivate _registerStaticPreview(preview: StaticMarkdownPreview): StaticMarkdownPreview {\n\t\tthis._staticPreviews.add(preview);\n\n\t\tpreview.onDispose(() => {\n\t\t\tthis._staticPreviews.delete(preview);\n\t\t});\n\n\t\tthis._trackActive(preview);\n\t\treturn preview;\n\t}\n\n\tprivate _trackActive(preview: IManagedMarkdownPreview): void {\n\t\tpreview.onDidChangeViewState(({ webviewPanel }) => {\n\t\t\tthis._activePreview = webviewPanel.active ? preview : undefined;\n\t\t});\n\n\t\tpreview.onDispose(() => {\n\t\t\tif (this._activePreview === preview) {\n\t\t\t\tthis._activePreview = undefined;\n\t\t\t}\n\t\t});\n\t}\n\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/preview/scrolling.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\n\n/**\n * Change the top-most visible line of `editor` to be at `line`\n */\nexport function scrollEditorToLine(\n\tline: number,\n\teditor: vscode.TextEditor\n) {\n\tconst revealRange = toRevealRange(line, editor);\n\teditor.revealRange(revealRange, vscode.TextEditorRevealType.AtTop);\n}\n\nfunction toRevealRange(line: number, editor: vscode.TextEditor): vscode.Range {\n\tline = Math.max(0, line);\n\tconst sourceLine = Math.floor(line);\n\tif (sourceLine >= editor.document.lineCount) {\n\t\treturn new vscode.Range(editor.document.lineCount - 1, 0, editor.document.lineCount - 1, 0);\n\t}\n\n\tconst fraction = line - sourceLine;\n\tconst text = editor.document.lineAt(sourceLine).text;\n\tconst start = Math.floor(fraction * text.length);\n\treturn new vscode.Range(sourceLine, start, sourceLine + 1, 0);\n}\n\nexport class StartingScrollFragment {\n\tpublic readonly type = 'fragment';\n\n\tconstructor(\n\t\tpublic readonly fragment: string,\n\t) { }\n}\n\nexport class StartingScrollLine {\n\tpublic readonly type = 'line';\n\n\tconstructor(\n\t\tpublic readonly line: number,\n\t) { }\n}\n\nexport type StartingScrollLocation = StartingScrollLine | StartingScrollFragment;\n"
  },
  {
    "path": "extensions/markdown-language-features/src/preview/security.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { MarkdownPreviewManager } from './previewManager';\n\n\nexport const enum MarkdownPreviewSecurityLevel {\n\tStrict = 0,\n\tAllowInsecureContent = 1,\n\tAllowScriptsAndAllContent = 2,\n\tAllowInsecureLocalContent = 3\n}\n\nexport interface ContentSecurityPolicyArbiter {\n\tgetSecurityLevelForResource(resource: vscode.Uri): MarkdownPreviewSecurityLevel;\n\n\tsetSecurityLevelForResource(resource: vscode.Uri, level: MarkdownPreviewSecurityLevel): Thenable<void>;\n\n\tshouldAllowSvgsForResource(resource: vscode.Uri): void;\n\n\tshouldDisableSecurityWarnings(): boolean;\n\n\tsetShouldDisableSecurityWarning(shouldShow: boolean): Thenable<void>;\n}\n\nexport class ExtensionContentSecurityPolicyArbiter implements ContentSecurityPolicyArbiter {\n\tprivate readonly _old_trusted_workspace_key = 'trusted_preview_workspace:';\n\tprivate readonly _security_level_key = 'preview_security_level:';\n\tprivate readonly _should_disable_security_warning_key = 'preview_should_show_security_warning:';\n\n\tconstructor(\n\t\tprivate readonly _globalState: vscode.Memento,\n\t\tprivate readonly _workspaceState: vscode.Memento\n\t) { }\n\n\tpublic getSecurityLevelForResource(resource: vscode.Uri): MarkdownPreviewSecurityLevel {\n\t\t// Use new security level setting first\n\t\tconst level = this._globalState.get<MarkdownPreviewSecurityLevel | undefined>(this._security_level_key + this._getRoot(resource), undefined);\n\t\tif (typeof level !== 'undefined') {\n\t\t\treturn level;\n\t\t}\n\n\t\t// Fallback to old trusted workspace setting\n\t\tif (this._globalState.get<boolean>(this._old_trusted_workspace_key + this._getRoot(resource), false)) {\n\t\t\treturn MarkdownPreviewSecurityLevel.AllowScriptsAndAllContent;\n\t\t}\n\t\treturn MarkdownPreviewSecurityLevel.Strict;\n\t}\n\n\tpublic setSecurityLevelForResource(resource: vscode.Uri, level: MarkdownPreviewSecurityLevel): Thenable<void> {\n\t\treturn this._globalState.update(this._security_level_key + this._getRoot(resource), level);\n\t}\n\n\tpublic shouldAllowSvgsForResource(resource: vscode.Uri) {\n\t\tconst securityLevel = this.getSecurityLevelForResource(resource);\n\t\treturn securityLevel === MarkdownPreviewSecurityLevel.AllowInsecureContent || securityLevel === MarkdownPreviewSecurityLevel.AllowScriptsAndAllContent;\n\t}\n\n\tpublic shouldDisableSecurityWarnings(): boolean {\n\t\treturn this._workspaceState.get<boolean>(this._should_disable_security_warning_key, false);\n\t}\n\n\tpublic setShouldDisableSecurityWarning(disabled: boolean): Thenable<void> {\n\t\treturn this._workspaceState.update(this._should_disable_security_warning_key, disabled);\n\t}\n\n\tprivate _getRoot(resource: vscode.Uri): vscode.Uri {\n\t\tif (vscode.workspace.workspaceFolders) {\n\t\t\tconst folderForResource = vscode.workspace.getWorkspaceFolder(resource);\n\t\t\tif (folderForResource) {\n\t\t\t\treturn folderForResource.uri;\n\t\t\t}\n\n\t\t\tif (vscode.workspace.workspaceFolders.length) {\n\t\t\t\treturn vscode.workspace.workspaceFolders[0].uri;\n\t\t\t}\n\t\t}\n\n\t\treturn resource;\n\t}\n}\n\nexport class PreviewSecuritySelector {\n\n\tpublic constructor(\n\t\tprivate readonly _cspArbiter: ContentSecurityPolicyArbiter,\n\t\tprivate readonly _webviewManager: MarkdownPreviewManager\n\t) { }\n\n\tpublic async showSecuritySelectorForResource(resource: vscode.Uri): Promise<void> {\n\t\tinterface PreviewSecurityPickItem extends vscode.QuickPickItem {\n\t\t\treadonly type: 'moreinfo' | 'toggle' | MarkdownPreviewSecurityLevel;\n\t\t}\n\n\t\tfunction markActiveWhen(when: boolean): string {\n\t\t\treturn when ? '• ' : '';\n\t\t}\n\n\t\tconst currentSecurityLevel = this._cspArbiter.getSecurityLevelForResource(resource);\n\t\tconst selection = await vscode.window.showQuickPick<PreviewSecurityPickItem>(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttype: MarkdownPreviewSecurityLevel.Strict,\n\t\t\t\t\tlabel: markActiveWhen(currentSecurityLevel === MarkdownPreviewSecurityLevel.Strict) + vscode.l10n.t(\"Strict\"),\n\t\t\t\t\tdescription: vscode.l10n.t(\"Only load secure content\"),\n\t\t\t\t}, {\n\t\t\t\t\ttype: MarkdownPreviewSecurityLevel.AllowInsecureLocalContent,\n\t\t\t\t\tlabel: markActiveWhen(currentSecurityLevel === MarkdownPreviewSecurityLevel.AllowInsecureLocalContent) + vscode.l10n.t(\"Allow insecure local content\"),\n\t\t\t\t\tdescription: vscode.l10n.t(\"Enable loading content over http served from localhost\"),\n\t\t\t\t}, {\n\t\t\t\t\ttype: MarkdownPreviewSecurityLevel.AllowInsecureContent,\n\t\t\t\t\tlabel: markActiveWhen(currentSecurityLevel === MarkdownPreviewSecurityLevel.AllowInsecureContent) + vscode.l10n.t(\"Allow insecure content\"),\n\t\t\t\t\tdescription: vscode.l10n.t(\"Enable loading content over http\"),\n\t\t\t\t}, {\n\t\t\t\t\ttype: MarkdownPreviewSecurityLevel.AllowScriptsAndAllContent,\n\t\t\t\t\tlabel: markActiveWhen(currentSecurityLevel === MarkdownPreviewSecurityLevel.AllowScriptsAndAllContent) + vscode.l10n.t(\"Disable\"),\n\t\t\t\t\tdescription: vscode.l10n.t(\"Allow all content and script execution. Not recommended\"),\n\t\t\t\t}, {\n\t\t\t\t\ttype: 'moreinfo',\n\t\t\t\t\tlabel: vscode.l10n.t(\"More Information\"),\n\t\t\t\t\tdescription: ''\n\t\t\t\t}, {\n\t\t\t\t\ttype: 'toggle',\n\t\t\t\t\tlabel: this._cspArbiter.shouldDisableSecurityWarnings()\n\t\t\t\t\t\t? vscode.l10n.t(\"Enable preview security warnings in this workspace\")\n\t\t\t\t\t\t: vscode.l10n.t(\"Disable preview security warning in this workspace\"),\n\t\t\t\t\tdescription: vscode.l10n.t(\"Does not affect the content security level\")\n\t\t\t\t},\n\t\t\t], {\n\t\t\tplaceHolder: vscode.l10n.t(\"Select security settings for Markdown previews in this workspace\"),\n\t\t});\n\t\tif (!selection) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (selection.type === 'moreinfo') {\n\t\t\tvscode.commands.executeCommand('vscode.open', vscode.Uri.parse('https://go.microsoft.com/fwlink/?linkid=854414'));\n\t\t\treturn;\n\t\t}\n\n\t\tif (selection.type === 'toggle') {\n\t\t\tthis._cspArbiter.setShouldDisableSecurityWarning(!this._cspArbiter.shouldDisableSecurityWarnings());\n\t\t\tthis._webviewManager.refresh();\n\t\t\treturn;\n\t\t} else {\n\t\t\tawait this._cspArbiter.setSecurityLevelForResource(resource, selection.type);\n\t\t}\n\t\tthis._webviewManager.refresh();\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/preview/topmostLineMonitor.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Disposable } from '../util/dispose';\nimport { isMarkdownFile } from '../util/file';\nimport { ResourceMap } from '../util/resourceMap';\n\nexport interface LastScrollLocation {\n\treadonly line: number;\n\treadonly uri: vscode.Uri;\n}\n\nexport class TopmostLineMonitor extends Disposable {\n\n\tprivate readonly _pendingUpdates = new ResourceMap<number>();\n\tprivate readonly _throttle = 50;\n\tprivate _previousTextEditorInfo = new ResourceMap<LastScrollLocation>();\n\tprivate _previousStaticEditorInfo = new ResourceMap<LastScrollLocation>();\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (vscode.window.activeTextEditor) {\n\t\t\tconst line = getVisibleLine(vscode.window.activeTextEditor);\n\t\t\tthis.setPreviousTextEditorLine({ uri: vscode.window.activeTextEditor.document.uri, line: line ?? 0 });\n\t\t}\n\n\t\tthis._register(vscode.window.onDidChangeTextEditorVisibleRanges(event => {\n\t\t\tif (isMarkdownFile(event.textEditor.document)) {\n\t\t\t\tconst line = getVisibleLine(event.textEditor);\n\t\t\t\tif (typeof line === 'number') {\n\t\t\t\t\tthis.updateLine(event.textEditor.document.uri, line);\n\t\t\t\t\tthis.setPreviousTextEditorLine({ uri: event.textEditor.document.uri, line: line });\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _onChanged = this._register(new vscode.EventEmitter<{ readonly resource: vscode.Uri; readonly line: number }>());\n\tpublic readonly onDidChanged = this._onChanged.event;\n\n\tpublic setPreviousStaticEditorLine(scrollLocation: LastScrollLocation): void {\n\t\tthis._previousStaticEditorInfo.set(scrollLocation.uri, scrollLocation);\n\t}\n\n\tpublic getPreviousStaticEditorLineByUri(resource: vscode.Uri): number | undefined {\n\t\tconst scrollLoc = this._previousStaticEditorInfo.get(resource);\n\t\tthis._previousStaticEditorInfo.delete(resource);\n\t\treturn scrollLoc?.line;\n\t}\n\n\n\tpublic setPreviousTextEditorLine(scrollLocation: LastScrollLocation): void {\n\t\tthis._previousTextEditorInfo.set(scrollLocation.uri, scrollLocation);\n\t}\n\n\tpublic getPreviousTextEditorLineByUri(resource: vscode.Uri): number | undefined {\n\t\tconst scrollLoc = this._previousTextEditorInfo.get(resource);\n\t\tthis._previousTextEditorInfo.delete(resource);\n\t\treturn scrollLoc?.line;\n\t}\n\n\tpublic getPreviousStaticTextEditorLineByUri(resource: vscode.Uri): number | undefined {\n\t\tconst state = this._previousStaticEditorInfo.get(resource);\n\t\treturn state?.line;\n\t}\n\n\tpublic updateLine(\n\t\tresource: vscode.Uri,\n\t\tline: number\n\t) {\n\t\tif (!this._pendingUpdates.has(resource)) {\n\t\t\t// schedule update\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (this._pendingUpdates.has(resource)) {\n\t\t\t\t\tthis._onChanged.fire({\n\t\t\t\t\t\tresource,\n\t\t\t\t\t\tline: this._pendingUpdates.get(resource) as number\n\t\t\t\t\t});\n\t\t\t\t\tthis._pendingUpdates.delete(resource);\n\t\t\t\t}\n\t\t\t}, this._throttle);\n\t\t}\n\n\t\tthis._pendingUpdates.set(resource, line);\n\t}\n}\n\n/**\n * Get the top-most visible range of `editor`.\n *\n * Returns a fractional line number based the visible character within the line.\n * Floor to get real line number\n */\nexport function getVisibleLine(\n\teditor: vscode.TextEditor\n): number | undefined {\n\tif (!editor.visibleRanges.length) {\n\t\treturn undefined;\n\t}\n\n\tconst firstVisiblePosition = editor.visibleRanges[0].start;\n\tconst lineNumber = firstVisiblePosition.line;\n\tconst line = editor.document.lineAt(lineNumber);\n\tconst progress = firstVisiblePosition.character / (line.text.length + 2);\n\treturn lineNumber + progress;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/slugify.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class Slug {\n\tpublic constructor(\n\t\tpublic readonly value: string\n\t) { }\n\n\tpublic equals(other: Slug): boolean {\n\t\treturn this.value === other.value;\n\t}\n}\n\nexport interface Slugifier {\n\tfromHeading(heading: string): Slug;\n}\n\nexport const githubSlugifier: Slugifier = new class implements Slugifier {\n\tfromHeading(heading: string): Slug {\n\t\tconst slugifiedHeading = encodeURI(\n\t\t\theading.trim()\n\t\t\t\t.toLowerCase()\n\t\t\t\t.replace(/\\s+/g, '-') // Replace whitespace with -\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t.replace(/[\\]\\[\\!\\/\\'\\\"\\#\\$\\%\\&\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\\\\\^\\{\\|\\}\\~\\`。，、；：？！…—·ˉ¨‘’“”々～‖∶＂＇｀｜〃〔〕〈〉《》「」『』．〖〗【】（）［］｛｝]/g, '') // Remove known punctuators\n\t\t\t\t.replace(/^\\-+/, '') // Remove leading -\n\t\t\t\t.replace(/\\-+$/, '') // Remove trailing -\n\t\t);\n\t\treturn new Slug(slugifiedHeading);\n\t}\n};\n"
  },
  {
    "path": "extensions/markdown-language-features/src/telemetryReporter.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { default as VSCodeTelemetryReporter } from '@vscode/extension-telemetry';\nimport * as vscode from 'vscode';\n\ninterface IPackageInfo {\n\tname: string;\n\tversion: string;\n\taiKey: string;\n}\n\nexport interface TelemetryReporter {\n\tdispose(): void;\n\tsendTelemetryEvent(eventName: string, properties?: {\n\t\t[key: string]: string;\n\t}): void;\n}\n\nconst nullReporter = new class NullTelemetryReporter implements TelemetryReporter {\n\tsendTelemetryEvent() { /** noop */ }\n\tdispose() { /** noop */ }\n};\n\nclass ExtensionReporter implements TelemetryReporter {\n\tprivate readonly _reporter: VSCodeTelemetryReporter;\n\n\tconstructor(\n\t\tpackageInfo: IPackageInfo\n\t) {\n\t\tthis._reporter = new VSCodeTelemetryReporter(packageInfo.aiKey);\n\t}\n\tsendTelemetryEvent(eventName: string, properties?: {\n\t\t[key: string]: string;\n\t}) {\n\t\tthis._reporter.sendTelemetryEvent(eventName, properties);\n\t}\n\n\tdispose() {\n\t\tthis._reporter.dispose();\n\t}\n}\n\nexport function loadDefaultTelemetryReporter(): TelemetryReporter {\n\tconst packageInfo = getPackageInfo();\n\treturn packageInfo ? new ExtensionReporter(packageInfo) : nullReporter;\n}\n\nfunction getPackageInfo(): IPackageInfo | null {\n\tconst extension = vscode.extensions.getExtension('Microsoft.vscode-markdown');\n\tif (extension && extension.packageJSON) {\n\t\treturn {\n\t\t\tname: extension.packageJSON.name,\n\t\t\tversion: extension.packageJSON.version,\n\t\t\taiKey: extension.packageJSON.aiKey\n\t\t};\n\t}\n\treturn null;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/copyFile.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport 'mocha';\nimport * as vscode from 'vscode';\nimport { resolveCopyDestination } from '../languageFeatures/copyFiles/copyFiles';\n\n\nsuite('resolveCopyDestination', () => {\n\n\ttest('Relative destinations should resolve next to document', async () => {\n\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\n\t\t{\n\t\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '${fileName}', () => vscode.Uri.parse('test://projects/project/'));\n\t\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');\n\t\t}\n\t\t{\n\t\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', './${fileName}', () => vscode.Uri.parse('test://projects/project/'));\n\t\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');\n\t\t}\n\t\t{\n\t\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '../${fileName}', () => vscode.Uri.parse('test://projects/project/'));\n\t\t\tassert.strictEqual(dest.toString(), 'test://projects/project/img.png');\n\t\t}\n\t});\n\n\ttest('Destination starting with / should go to workspace root', async () => {\n\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '/${fileName}', () => vscode.Uri.parse('test://projects/project/'));\n\n\t\tassert.strictEqual(dest.toString(), 'test://projects/project/img.png');\n\t});\n\n\ttest('If there is no workspace root, / should resolve to document dir', async () => {\n\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '/${fileName}', () => undefined);\n\n\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');\n\t});\n\n\ttest('If path ends in /, we should automatically add the fileName', async () => {\n\t\t{\n\t\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', 'images/', () => vscode.Uri.parse('test://projects/project/'));\n\t\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/images/img.png');\n\t\t}\n\t\t{\n\t\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', './', () => vscode.Uri.parse('test://projects/project/'));\n\t\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');\n\t\t}\n\t\t{\n\t\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '/', () => vscode.Uri.parse('test://projects/project/'));\n\n\t\t\tassert.strictEqual(dest.toString(), 'test://projects/project/img.png');\n\t\t}\n\t});\n\n\ttest('Basic transform', async () => {\n\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/.png/.gif/}', () => undefined);\n\n\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/img.gif');\n\t});\n\n\ttest('Transforms should support capture groups', async () => {\n\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/(.+)\\\\.(.+)/$2.$1/}', () => undefined);\n\n\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/png.img');\n\t});\n\n\ttest('Should support escaping snippet variables ', async () => {\n\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\n\t\t// Escape leading '$'\n\t\tassert.strictEqual(\n\t\t\tresolveCopyDestination(documentUri, 'img.png', '\\\\${fileName}', () => undefined).toString(true),\n\t\t\t'test://projects/project/sub/${fileName}');\n\n\t\t// Escape closing '}'\n\t\tassert.strictEqual(\n\t\t\tresolveCopyDestination(documentUri, 'img.png', '${fileName\\\\}', () => undefined).toString(true),\n\t\t\t'test://projects/project/sub/${fileName\\\\}');\n\t});\n\n\ttest('Transforms should support escaped slashes', async () => {\n\t\tconst documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');\n\t\tconst dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/(.+)/x\\\\/y/}.${fileExtName}', () => undefined);\n\n\t\tassert.strictEqual(dest.toString(), 'test://projects/project/sub/x/y.png');\n\t});\n});\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/documentLink.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport 'mocha';\nimport * as vscode from 'vscode';\nimport { joinLines } from './util';\n\nconst testFileA = workspaceFile('a.md');\n\nconst debug = false;\n\nfunction debugLog(...args: any[]) {\n\tif (debug) {\n\t\tconsole.log(...args);\n\t}\n}\n\nfunction workspaceFile(...segments: string[]) {\n\treturn vscode.Uri.joinPath(vscode.workspace.workspaceFolders![0].uri, ...segments);\n}\n\nasync function getLinksForFile(file: vscode.Uri): Promise<vscode.DocumentLink[]> {\n\tdebugLog('getting links', file.toString(), Date.now());\n\tconst r = (await vscode.commands.executeCommand<vscode.DocumentLink[]>('vscode.executeLinkProvider', file, /*linkResolveCount*/ 100))!;\n\tdebugLog('got links', file.toString(), Date.now());\n\treturn r;\n}\n\n(vscode.env.uiKind === vscode.UIKind.Web ? suite.skip : suite)('Markdown Document links', () => {\n\n\tsetup(async () => {\n\t\t// the tests make the assumption that link providers are already registered\n\t\tawait vscode.extensions.getExtension('vscode.markdown-language-features')!.activate();\n\t});\n\n\tteardown(async () => {\n\t\tawait vscode.commands.executeCommand('workbench.action.closeAllEditors');\n\t});\n\n\ttest('Should navigate to markdown file', async () => {\n\t\tawait withFileContents(testFileA, '[b](b.md)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('b.md'));\n\t});\n\n\ttest('Should navigate to markdown file with leading ./', async () => {\n\t\tawait withFileContents(testFileA, '[b](./b.md)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('b.md'));\n\t});\n\n\ttest('Should navigate to markdown file with leading /', async () => {\n\t\tawait withFileContents(testFileA, '[b](./b.md)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('b.md'));\n\t});\n\n\ttest('Should navigate to markdown file without file extension', async () => {\n\t\tawait withFileContents(testFileA, '[b](b)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('b.md'));\n\t});\n\n\ttest('Should navigate to markdown file in directory', async () => {\n\t\tawait withFileContents(testFileA, '[b](sub/c)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('sub', 'c.md'));\n\t});\n\n\ttest('Should navigate to fragment by title in file', async () => {\n\t\tawait withFileContents(testFileA, '[b](sub/c#second)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('sub', 'c.md'));\n\t\tassert.strictEqual(vscode.window.activeTextEditor!.selection.start.line, 1);\n\t});\n\n\ttest('Should navigate to fragment by line', async () => {\n\t\tawait withFileContents(testFileA, '[b](sub/c#L2)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('sub', 'c.md'));\n\t\tassert.strictEqual(vscode.window.activeTextEditor!.selection.start.line, 1);\n\t});\n\n\ttest('Should navigate to line number within non-md file', async () => {\n\t\tawait withFileContents(testFileA, '[b](sub/foo.txt#L3)');\n\n\t\tconst [link] = await getLinksForFile(testFileA);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(workspaceFile('sub', 'foo.txt'));\n\t\tassert.strictEqual(vscode.window.activeTextEditor!.selection.start.line, 2);\n\t});\n\n\ttest('Should navigate to fragment within current file', async () => {\n\t\tawait withFileContents(testFileA, joinLines(\n\t\t\t'[](a#header)',\n\t\t\t'[](#header)',\n\t\t\t'# Header'));\n\n\t\tconst links = await getLinksForFile(testFileA);\n\t\t{\n\t\t\tawait executeLink(links[0]);\n\t\t\tassertActiveDocumentUri(workspaceFile('a.md'));\n\t\t\tassert.strictEqual(vscode.window.activeTextEditor!.selection.start.line, 2);\n\t\t}\n\t\t{\n\t\t\tawait executeLink(links[1]);\n\t\t\tassertActiveDocumentUri(workspaceFile('a.md'));\n\t\t\tassert.strictEqual(vscode.window.activeTextEditor!.selection.start.line, 2);\n\t\t}\n\t});\n\n\ttest.skip('Should navigate to fragment within current untitled file', async () => { // TODO: skip for now for ls migration\n\t\tconst testFile = workspaceFile('x.md').with({ scheme: 'untitled' });\n\t\tawait withFileContents(testFile, joinLines(\n\t\t\t'[](#second)',\n\t\t\t'# Second'));\n\n\t\tconst [link] = await getLinksForFile(testFile);\n\t\tawait executeLink(link);\n\n\t\tassertActiveDocumentUri(testFile);\n\t\tassert.strictEqual(vscode.window.activeTextEditor!.selection.start.line, 1);\n\t});\n});\n\n\nfunction assertActiveDocumentUri(expectedUri: vscode.Uri) {\n\tassert.strictEqual(\n\t\tvscode.window.activeTextEditor!.document.uri.fsPath,\n\t\texpectedUri.fsPath\n\t);\n}\n\nasync function withFileContents(file: vscode.Uri, contents: string): Promise<void> {\n\tdebugLog('openTextDocument', file.toString(), Date.now());\n\tconst document = await vscode.workspace.openTextDocument(file);\n\tdebugLog('showTextDocument', file.toString(), Date.now());\n\tconst editor = await vscode.window.showTextDocument(document);\n\tdebugLog('editTextDocument', file.toString(), Date.now());\n\tawait editor.edit(edit => {\n\t\tedit.replace(new vscode.Range(0, 0, 1000, 0), contents);\n\t});\n\tdebugLog('opened done', vscode.window.activeTextEditor?.document.toString(), Date.now());\n}\n\nasync function executeLink(link: vscode.DocumentLink) {\n\tdebugLog('executingLink', link.target?.toString(), Date.now());\n\n\tawait vscode.commands.executeCommand('vscode.open', link.target!);\n\tdebugLog('executedLink', vscode.window.activeTextEditor?.document.toString(), Date.now());\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/engine.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport 'mocha';\nimport * as vscode from 'vscode';\nimport { InMemoryDocument } from '../client/inMemoryDocument';\nimport { createNewMarkdownEngine } from './engine';\n\n\nconst testFileName = vscode.Uri.file('test.md');\n\nsuite('markdown.engine', () => {\n\tsuite('rendering', () => {\n\t\tconst input = '# hello\\n\\nworld!';\n\t\tconst output = '<h1 data-line=\"0\" class=\"code-line\" dir=\"auto\" id=\"hello\">hello</h1>\\n'\n\t\t\t+ '<p data-line=\"2\" class=\"code-line\" dir=\"auto\">world!</p>\\n';\n\n\t\ttest('Renders a document', async () => {\n\t\t\tconst doc = new InMemoryDocument(testFileName, input);\n\t\t\tconst engine = createNewMarkdownEngine();\n\t\t\tassert.strictEqual((await engine.render(doc)).html, output);\n\t\t});\n\n\t\ttest('Renders a string', async () => {\n\t\t\tconst engine = createNewMarkdownEngine();\n\t\t\tassert.strictEqual((await engine.render(input)).html, output);\n\t\t});\n\t});\n\n\tsuite('image-caching', () => {\n\t\tconst input = '![](img.png) [](no-img.png) ![](http://example.org/img.png) ![](img.png) ![](./img2.png)';\n\n\t\ttest('Extracts all images', async () => {\n\t\t\tconst engine = createNewMarkdownEngine();\n\t\t\tconst result = await engine.render(input);\n\t\t\tassert.deepStrictEqual(result.html,\n\t\t\t\t'<p data-line=\"0\" class=\"code-line\" dir=\"auto\">'\n\t\t\t\t+ '<img src=\"img.png\" alt=\"\" data-src=\"img.png\"> '\n\t\t\t\t+ '<a href=\"no-img.png\" data-href=\"no-img.png\"></a> '\n\t\t\t\t+ '<img src=\"http://example.org/img.png\" alt=\"\" data-src=\"http://example.org/img.png\"> '\n\t\t\t\t+ '<img src=\"img.png\" alt=\"\" data-src=\"img.png\"> '\n\t\t\t\t+ '<img src=\"./img2.png\" alt=\"\" data-src=\"./img2.png\">'\n\t\t\t\t+ '</p>\\n'\n\t\t\t);\n\n\t\t\tassert.deepStrictEqual([...result.containingImages], ['img.png', 'http://example.org/img.png', './img2.png']);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/engine.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { MarkdownItEngine } from '../markdownEngine';\nimport { MarkdownContributionProvider, MarkdownContributions } from '../markdownExtensions';\nimport { githubSlugifier } from '../slugify';\nimport { nulLogger } from './nulLogging';\n\nconst emptyContributions = new class implements MarkdownContributionProvider {\n\treadonly extensionUri = vscode.Uri.file('/');\n\treadonly contributions = MarkdownContributions.Empty;\n\n\tprivate readonly _onContributionsChanged = new vscode.EventEmitter<this>();\n\treadonly onContributionsChanged = this._onContributionsChanged.event;\n\n\tdispose() {\n\t\tthis._onContributionsChanged.dispose();\n\t}\n};\n\nexport function createNewMarkdownEngine(): MarkdownItEngine {\n\treturn new MarkdownItEngine(emptyContributions, githubSlugifier, nulLogger);\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as testRunner from '../../../../test/integration/electron/testrunner';\n\nconst options: import('mocha').MochaOptions = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\n// These integration tests is being run in multiple environments (electron, web, remote)\n// so we need to set the suite name based on the environment as the suite name is used\n// for the test results file name\nlet suite = '';\nif (process.env.VSCODE_BROWSER) {\n\tsuite = `${process.env.VSCODE_BROWSER} Browser Integration Markdown Tests`;\n} else if (process.env.REMOTE_VSCODE) {\n\tsuite = 'Remote Integration Markdown Tests';\n} else {\n\tsuite = 'Integration Markdown Tests';\n}\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\ntestRunner.configure(options);\n\nexport = testRunner;\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/nulLogging.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ILogger } from '../logging';\n\nexport const nulLogger = new class implements ILogger {\n\ttrace(): void {\n\t\t// noop\n\t}\n};\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/pasteUrl.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as assert from 'assert';\nimport 'mocha';\nimport * as vscode from 'vscode';\nimport { InMemoryDocument } from '../client/inMemoryDocument';\nimport { createInsertUriListEdit, imageEditKind, linkEditKind } from '../languageFeatures/copyFiles/shared';\nimport { InsertMarkdownLink, findValidUriInText, shouldInsertMarkdownLinkByDefault } from '../languageFeatures/copyFiles/smartDropOrPaste';\nimport { noopToken } from '../util/cancellation';\nimport { UriList } from '../util/uriList';\nimport { createNewMarkdownEngine } from './engine';\nimport { joinLines } from './util';\n\nfunction makeTestDoc(contents: string) {\n\treturn new InMemoryDocument(vscode.Uri.file('test.md'), contents);\n}\n\nsuite('createEditAddingLinksForUriList', () => {\n\n\ttest('Markdown Link Pasting should occur for a valid link (end to end)', async () => {\n\t\tconst result = createInsertUriListEdit(\n\t\t\tnew InMemoryDocument(vscode.Uri.file('test.md'), 'hello world!'), [new vscode.Range(0, 0, 0, 12)], UriList.from('https://www.microsoft.com/'));\n\t\t// need to check the actual result -> snippet value\n\t\tassert.strictEqual(result?.label, 'Insert Markdown Link');\n\t});\n\n\tsuite('validateLink', () => {\n\n\t\ttest('Markdown pasting should occur for a valid link', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('https://www.microsoft.com/'),\n\t\t\t\t'https://www.microsoft.com/');\n\t\t});\n\n\t\ttest('Markdown pasting should occur for a valid link preceded by a new line', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('\\r\\nhttps://www.microsoft.com/'),\n\t\t\t\t'https://www.microsoft.com/');\n\t\t});\n\n\t\ttest('Markdown pasting should occur for a valid link followed by a new line', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('https://www.microsoft.com/\\r\\n'),\n\t\t\t\t'https://www.microsoft.com/');\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for a valid hostname and invalid protool', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('invalid:www.microsoft.com'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for plain text', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('hello world!'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for plain text including a colon', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('hello: world!'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for plain text including a slashes', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('helloworld!'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for a link followed by text', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('https://www.microsoft.com/ hello world!'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should occur for a link preceded or followed by spaces', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('     https://www.microsoft.com/     '),\n\t\t\t\t'https://www.microsoft.com/');\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for a link with an invalid scheme', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('hello:www.microsoft.com'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for multiple links being pasted', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('https://www.microsoft.com/\\r\\nhttps://www.microsoft.com/\\r\\nhttps://www.microsoft.com/\\r\\nhttps://www.microsoft.com/'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for multiple links with spaces being pasted', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('https://www.microsoft.com/    \\r\\nhttps://www.microsoft.com/\\r\\nhttps://www.microsoft.com/\\r\\n hello \\r\\nhttps://www.microsoft.com/'),\n\t\t\t\tundefined);\n\t\t});\n\n\t\ttest('Markdown pasting should not occur for just a valid uri scheme', () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tfindValidUriInText('https://'),\n\t\t\t\tundefined);\n\t\t});\n\t});\n\n\tsuite('createInsertUriListEdit', () => {\n\t\ttest('Should create snippet with < > when pasted link has an mismatched parentheses', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.mic(rosoft.com'));\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](<https://www.mic(rosoft.com>)');\n\t\t});\n\n\t\ttest('Should create Markdown link snippet when pasteAsMarkdownLink is true', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.microsoft.com'));\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com)');\n\t\t});\n\n\t\ttest('Should use an unencoded URI string in Markdown link when passing in an external browser link', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.microsoft.com'));\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com)');\n\t\t});\n\n\t\ttest('Should not decode an encoded URI string when passing in an external browser link', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.microsoft.com/%20'));\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com/%20)');\n\t\t});\n\n\t\ttest('Should not encode an unencoded URI string when passing in an external browser link', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.example.com/path?query=value&another=value#fragment'));\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.example.com/path?query=value&another=value#fragment)');\n\t\t});\n\n\t\ttest('Should add image for image file by default', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.example.com/cat.png'));\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '![${1:alt text}](https://www.example.com/cat.png)');\n\t\t});\n\n\t\ttest('Should be able to override insert style to use link', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.example.com/cat.png'), {\n\t\t\t\tlinkKindHint: linkEditKind,\n\t\t\t});\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.example.com/cat.png)');\n\t\t});\n\n\t\ttest('Should be able to override insert style to use images', () => {\n\t\t\tconst edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], UriList.from('https://www.example.com/'), {\n\t\t\t\tlinkKindHint: imageEditKind,\n\t\t\t});\n\t\t\tassert.strictEqual(edit?.edits?.[0].snippet.value, '![${1:alt text}](https://www.example.com/)');\n\t\t});\n\t});\n\n\n\tsuite('shouldInsertMarkdownLinkByDefault', () => {\n\n\t\ttest('Smart should be enabled for selected plain text', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('hello world'), InsertMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 12)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\n\t\ttest('Smart should be enabled in headers', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('# title'), InsertMarkdownLink.Smart, [new vscode.Range(0, 2, 0, 2)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\n\t\ttest('Smart should be enabled in lists', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('1. text'), InsertMarkdownLink.Smart, [new vscode.Range(0, 3, 0, 3)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\n\t\ttest('Smart should be enabled in blockquotes', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('> text'), InsertMarkdownLink.Smart, [new vscode.Range(0, 3, 0, 3)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\n\t\ttest('Smart should be disabled in indented code blocks', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('    code'), InsertMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 4)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in fenced code blocks', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('```\\r\\n\\r\\n```'), InsertMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken),\n\t\t\t\tfalse);\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('~~~\\r\\n\\r\\n~~~'), InsertMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in math blocks', async () => {\n\n\t\t\tlet katex: any = (await import('@vscode/markdown-it-katex')).default;\n\t\t\tif (typeof katex === 'object') {\n\t\t\t\tkatex = katex.default;\n\t\t\t}\n\n\t\t\tconst engine = createNewMarkdownEngine();\n\t\t\t(await engine.getEngine(undefined)).use(katex);\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(engine, makeTestDoc('$$\\r\\n\\r\\n$$'), InsertMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in link definitions', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[ref]: http://example.com'), InsertMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 6)], noopToken),\n\t\t\t\tfalse);\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[ref]: '), InsertMarkdownLink.Smart, [new vscode.Range(0, 7, 0, 7)], noopToken),\n\t\t\t\tfalse);\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[ref]: '), InsertMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in html blocks', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('<p>\\na\\n</p>'), InsertMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in html blocks where paste creates the block', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('<p>\\n\\n</p>'), InsertMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken),\n\t\t\t\tfalse,\n\t\t\t\t'Between two html tags should be treated as html block');\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('<p>\\n\\ntext'), InsertMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken),\n\t\t\t\tfalse,\n\t\t\t\t'Between opening html tag and text should be treated as html block');\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('<p>\\n\\n\\n</p>'), InsertMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken),\n\t\t\t\ttrue,\n\t\t\t\t'Extra new line after paste should not be treated as html block');\n\t\t});\n\n\t\ttest('Smart should be disabled in Markdown links', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[a](bcdef)'), InsertMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 6)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in Markdown images', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('![a](bcdef)'), InsertMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 10)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in inline code', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('``'), InsertMarkdownLink.Smart, [new vscode.Range(0, 1, 0, 1)], noopToken),\n\t\t\t\tfalse,\n\t\t\t\t'Should be disabled inside of inline code');\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('``'), InsertMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken),\n\t\t\t\ttrue,\n\t\t\t\t'Should be enabled when cursor is outside but next to inline code');\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('`a`'), InsertMarkdownLink.Smart, [new vscode.Range(0, 3, 0, 3)], noopToken),\n\t\t\t\ttrue,\n\t\t\t\t'Should be enabled when cursor is outside but next to inline code');\n\t\t});\n\n\t\ttest('Smart should be enabled when pasting over inline code ', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('`xyz`'), InsertMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 5)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\n\t\ttest('Smart should be disabled in inline math', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('$$'), InsertMarkdownLink.SmartWithSelection, [new vscode.Range(0, 1, 0, 1)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be enabled for empty selection', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('xyz'), InsertMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\n\t\ttest('SmartWithSelection should disable for empty selection', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('xyz'), InsertMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 0)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should disable for selected link', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('https://www.microsoft.com'), InsertMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 25)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should disable for selected link with trailing whitespace', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('   https://www.microsoft.com  '), InsertMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 30)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Should evaluate pasteAsMarkdownLink as true for a link pasted in square brackets', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[abc]'), InsertMarkdownLink.SmartWithSelection, [new vscode.Range(0, 1, 0, 4)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\n\t\ttest('Should evaluate pasteAsMarkdownLink as false for selected whitespace and new lines', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('   \\r\\n\\r\\n'), InsertMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 7)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled inside of autolinks', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('<>'), InsertMarkdownLink.Smart, [new vscode.Range(0, 1, 0, 1)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should be disabled in frontmatter', async () => {\n\t\t\tconst textDoc = makeTestDoc(joinLines(\n\t\t\t\t`---`,\n\t\t\t\t`layout: post`,\n\t\t\t\t`title: Blogging Like a Hacker`,\n\t\t\t\t`---`,\n\t\t\t\t``,\n\t\t\t\t`Link Text`\n\t\t\t));\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), textDoc, InsertMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken),\n\t\t\t\tfalse);\n\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), textDoc, InsertMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken),\n\t\t\t\tfalse);\n\t\t});\n\n\t\ttest('Smart should enabled after frontmatter', async () => {\n\t\t\tassert.strictEqual(\n\t\t\t\tawait shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc(joinLines(\n\t\t\t\t\t`---`,\n\t\t\t\t\t`layout: post`,\n\t\t\t\t\t`title: Blogging Like a Hacker`,\n\t\t\t\t\t`---`,\n\t\t\t\t\t``,\n\t\t\t\t\t`Link Text`\n\t\t\t\t)), InsertMarkdownLink.Smart, [new vscode.Range(5, 0, 5, 0)], noopToken),\n\t\t\t\ttrue);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/urlToUri.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { deepStrictEqual } from 'assert';\nimport 'mocha';\nimport { Uri } from 'vscode';\nimport { urlToUri } from '../util/url';\n\nsuite('urlToUri', () => {\n\ttest('Absolute File', () => {\n\t\tdeepStrictEqual(\n\t\t\turlToUri('file:///root/test.txt', Uri.parse('file:///usr/home/')),\n\t\t\tUri.parse('file:///root/test.txt')\n\t\t);\n\t});\n\n\ttest('Relative File', () => {\n\t\tdeepStrictEqual(\n\t\t\turlToUri('./file.ext', Uri.parse('file:///usr/home/')),\n\t\t\tUri.parse('file:///usr/home/file.ext')\n\t\t);\n\t});\n\n\ttest('Http Basic', () => {\n\t\tdeepStrictEqual(\n\t\t\turlToUri('http://example.org?q=10&f', Uri.parse('file:///usr/home/')),\n\t\t\tUri.parse('http://example.org?q=10&f')\n\t\t);\n\t});\n\n\ttest('Http Encoded Chars', () => {\n\t\tdeepStrictEqual(\n\t\t\turlToUri('http://example.org/%C3%A4', Uri.parse('file:///usr/home/')),\n\t\t\tUri.parse('http://example.org/%C3%A4')\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "extensions/markdown-language-features/src/test/util.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as os from 'os';\n\nexport const joinLines = (...args: string[]) =>\n\targs.join(os.platform() === 'win32' ? '\\r\\n' : '\\n');\n"
  },
  {
    "path": "extensions/markdown-language-features/src/types/textDocument.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\n/**\n * Minimal version of {@link vscode.TextDocument}.\n */\nexport interface ITextDocument {\n\treadonly uri: vscode.Uri;\n\treadonly version: number;\n\n\tgetText(range?: vscode.Range): string;\n\n\tpositionAt(offset: number): vscode.Position;\n}\n\n"
  },
  {
    "path": "extensions/markdown-language-features/src/typings/ref.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ndeclare module 'markdown-it-front-matter';\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/arrays.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * @returns New array with all falsy values removed. The original array IS NOT modified.\n */\nexport function coalesce<T>(array: ReadonlyArray<T | undefined | null>): T[] {\n\treturn <T[]>array.filter(e => !!e);\n}\n\nexport function equals<T>(one: ReadonlyArray<T>, other: ReadonlyArray<T>, itemEquals: (a: T, b: T) => boolean = (a, b) => a === b): boolean {\n\tif (one.length !== other.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0, len = one.length; i < len; i++) {\n\t\tif (!itemEquals(one[i], other[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/async.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface ITask<T> {\n\t(): T;\n}\n\nexport class Delayer<T> {\n\n\tpublic defaultDelay: number;\n\tprivate _timeout: any; // Timer\n\tprivate _cancelTimeout: Promise<T | null> | null;\n\tprivate _onSuccess: ((value: T | PromiseLike<T> | undefined) => void) | null;\n\tprivate _task: ITask<T> | null;\n\n\tconstructor(defaultDelay: number) {\n\t\tthis.defaultDelay = defaultDelay;\n\t\tthis._timeout = null;\n\t\tthis._cancelTimeout = null;\n\t\tthis._onSuccess = null;\n\t\tthis._task = null;\n\t}\n\n\tdispose() {\n\t\tthis._doCancelTimeout();\n\t}\n\n\tpublic trigger(task: ITask<T>, delay: number = this.defaultDelay): Promise<T | null> {\n\t\tthis._task = task;\n\t\tif (delay >= 0) {\n\t\t\tthis._doCancelTimeout();\n\t\t}\n\n\t\tif (!this._cancelTimeout) {\n\t\t\tthis._cancelTimeout = new Promise<T | undefined>((resolve) => {\n\t\t\t\tthis._onSuccess = resolve;\n\t\t\t}).then(() => {\n\t\t\t\tthis._cancelTimeout = null;\n\t\t\t\tthis._onSuccess = null;\n\t\t\t\tconst result = this._task && this._task?.();\n\t\t\t\tthis._task = null;\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\n\t\tif (delay >= 0 || this._timeout === null) {\n\t\t\tthis._timeout = setTimeout(() => {\n\t\t\t\tthis._timeout = null;\n\t\t\t\tthis._onSuccess?.(undefined);\n\t\t\t}, delay >= 0 ? delay : this.defaultDelay);\n\t\t}\n\n\t\treturn this._cancelTimeout;\n\t}\n\n\tprivate _doCancelTimeout(): void {\n\t\tif (this._timeout !== null) {\n\t\t\tclearTimeout(this._timeout);\n\t\t\tthis._timeout = null;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/cancellation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport const noopToken: vscode.CancellationToken = new class implements vscode.CancellationToken {\n\tprivate readonly _onCancellationRequestedEmitter = new vscode.EventEmitter<void>();\n\tonCancellationRequested = this._onCancellationRequestedEmitter.event;\n\n\tget isCancellationRequested() { return false; }\n};\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/dispose.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport function disposeAll(disposables: Iterable<vscode.Disposable>) {\n\tconst errors: any[] = [];\n\n\tfor (const disposable of disposables) {\n\t\ttry {\n\t\t\tdisposable.dispose();\n\t\t} catch (e) {\n\t\t\terrors.push(e);\n\t\t}\n\t}\n\n\tif (errors.length === 1) {\n\t\tthrow errors[0];\n\t} else if (errors.length > 1) {\n\t\tthrow new AggregateError(errors, 'Encountered errors while disposing of store');\n\t}\n}\n\nexport interface IDisposable {\n\tdispose(): void;\n}\n\nexport abstract class Disposable {\n\tprivate _isDisposed = false;\n\n\tprotected _disposables: vscode.Disposable[] = [];\n\n\tpublic dispose(): any {\n\t\tif (this._isDisposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDisposed = true;\n\t\tdisposeAll(this._disposables);\n\t}\n\n\tprotected _register<T extends IDisposable>(value: T): T {\n\t\tif (this._isDisposed) {\n\t\t\tvalue.dispose();\n\t\t} else {\n\t\t\tthis._disposables.push(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected get isDisposed() {\n\t\treturn this._isDisposed;\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/document.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Schemes } from './schemes';\nimport { Utils } from 'vscode-uri';\n\nexport function getDocumentDir(uri: vscode.Uri): vscode.Uri | undefined {\n\tconst docUri = getParentDocumentUri(uri);\n\tif (docUri.scheme === Schemes.untitled) {\n\t\treturn vscode.workspace.workspaceFolders?.[0]?.uri;\n\t}\n\treturn Utils.dirname(docUri);\n}\n\nexport function getParentDocumentUri(uri: vscode.Uri): vscode.Uri {\n\tif (uri.scheme === Schemes.notebookCell) {\n\t\tfor (const notebook of vscode.workspace.notebookDocuments) {\n\t\t\tfor (const cell of notebook.getCells()) {\n\t\t\t\tif (cell.document.uri.toString() === uri.toString()) {\n\t\t\t\t\treturn notebook.uri;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn uri;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/dom.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\n\nexport function escapeAttribute(value: string | vscode.Uri): string {\n\treturn value.toString()\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/\"/g, '&quot;')\n\t\t.replace(/'/g, '&#39;');\n}\n\nexport function getNonce() {\n\tlet text = '';\n\tconst possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tfor (let i = 0; i < 64; i++) {\n\t\ttext += possible.charAt(Math.floor(Math.random() * possible.length));\n\t}\n\treturn text;\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/file.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as URI from 'vscode-uri';\nimport { Schemes } from './schemes';\n\nexport const markdownFileExtensions = Object.freeze<string[]>([\n\t'md',\n\t'mkd',\n\t'mdwn',\n\t'mdown',\n\t'markdown',\n\t'markdn',\n\t'mdtxt',\n\t'mdtext',\n\t'workbook',\n]);\n\nexport function isMarkdownFile(document: vscode.TextDocument) {\n\treturn document.languageId === 'markdown';\n}\n\nexport function looksLikeMarkdownPath(resolvedHrefPath: vscode.Uri): boolean {\n\tconst doc = vscode.workspace.textDocuments.find(doc => doc.uri.toString() === resolvedHrefPath.toString());\n\tif (doc) {\n\t\treturn isMarkdownFile(doc);\n\t}\n\n\tif (resolvedHrefPath.scheme === Schemes.notebookCell) {\n\t\tfor (const notebook of vscode.workspace.notebookDocuments) {\n\t\t\tfor (const cell of notebook.getCells()) {\n\t\t\t\tif (cell.kind === vscode.NotebookCellKind.Markup && isMarkdownFile(cell.document)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\treturn markdownFileExtensions.includes(URI.Utils.extname(resolvedHrefPath).toLowerCase().replace('.', ''));\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/mimes.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const Mime = {\n\ttextUriList: 'text/uri-list',\n\ttextPlain: 'text/plain',\n} as const;\n\nexport const rootMediaMimesTypes = Object.freeze({\n\timage: 'image',\n\taudio: 'audio',\n\tvideo: 'video',\n});\n\nexport enum MediaKind {\n\tImage = 1,\n\tVideo,\n\tAudio\n}\n\nexport function getMediaKindForMime(mime: string): MediaKind | undefined {\n\tconst root = mime.toLowerCase().split('/').at(0);\n\tswitch (root) {\n\t\tcase 'image': return MediaKind.Image;\n\t\tcase 'video': return MediaKind.Video;\n\t\tcase 'audio': return MediaKind.Audio;\n\t\tdefault: return undefined;\n\t}\n}\n\nexport const mediaFileExtensions = new Map<string, MediaKind>([\n\t// Images\n\t['avif', MediaKind.Image],\n\t['bmp', MediaKind.Image],\n\t['gif', MediaKind.Image],\n\t['ico', MediaKind.Image],\n\t['jpe', MediaKind.Image],\n\t['jpeg', MediaKind.Image],\n\t['jpg', MediaKind.Image],\n\t['png', MediaKind.Image],\n\t['psd', MediaKind.Image],\n\t['svg', MediaKind.Image],\n\t['tga', MediaKind.Image],\n\t['tif', MediaKind.Image],\n\t['tiff', MediaKind.Image],\n\t['webp', MediaKind.Image],\n\n\t// Videos\n\t['ogg', MediaKind.Video],\n\t['mp4', MediaKind.Video],\n\t['mov', MediaKind.Video],\n\n\t// Audio Files\n\t['mp3', MediaKind.Audio],\n\t['aac', MediaKind.Audio],\n\t['wav', MediaKind.Audio],\n]);\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/openDocumentLink.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { MdLanguageClient } from '../client/client';\nimport * as proto from '../client/protocol';\n\nenum OpenMarkdownLinks {\n\tbeside = 'beside',\n\tcurrentGroup = 'currentGroup',\n}\n\nexport class MdLinkOpener {\n\n\tconstructor(\n\t\tprivate readonly _client: MdLanguageClient,\n\t) { }\n\n\tpublic async resolveDocumentLink(linkText: string, fromResource: vscode.Uri): Promise<proto.ResolvedDocumentLinkTarget> {\n\t\treturn this._client.resolveLinkTarget(linkText, fromResource);\n\t}\n\n\tpublic async openDocumentLink(linkText: string, fromResource: vscode.Uri, viewColumn?: vscode.ViewColumn): Promise<void> {\n\t\tconst resolved = await this._client.resolveLinkTarget(linkText, fromResource);\n\t\tif (!resolved) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst uri = vscode.Uri.from(resolved.uri);\n\t\tswitch (resolved.kind) {\n\t\t\tcase 'external':\n\t\t\t\treturn vscode.commands.executeCommand('vscode.open', uri);\n\n\t\t\tcase 'folder':\n\t\t\t\treturn vscode.commands.executeCommand('revealInExplorer', uri);\n\n\t\t\tcase 'file': {\n\t\t\t\t// If no explicit viewColumn is given, check if the editor is already open in a tab\n\t\t\t\tif (typeof viewColumn === 'undefined') {\n\t\t\t\t\tfor (const tab of vscode.window.tabGroups.all.flatMap(x => x.tabs)) {\n\t\t\t\t\t\tif (tab.input instanceof vscode.TabInputText) {\n\t\t\t\t\t\t\tif (tab.input.uri.fsPath === uri.fsPath) {\n\t\t\t\t\t\t\t\tviewColumn = tab.group.viewColumn;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn vscode.commands.executeCommand('vscode.open', uri, {\n\t\t\t\t\tselection: resolved.position ? new vscode.Range(resolved.position.line, resolved.position.character, resolved.position.line, resolved.position.character) : undefined,\n\t\t\t\t\tviewColumn: viewColumn ?? getViewColumn(fromResource),\n\t\t\t\t} satisfies vscode.TextDocumentShowOptions);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getViewColumn(resource: vscode.Uri): vscode.ViewColumn {\n\tconst config = vscode.workspace.getConfiguration('markdown', resource);\n\tconst openLinks = config.get<OpenMarkdownLinks>('links.openLocation', OpenMarkdownLinks.currentGroup);\n\tswitch (openLinks) {\n\t\tcase OpenMarkdownLinks.beside:\n\t\t\treturn vscode.ViewColumn.Beside;\n\t\tcase OpenMarkdownLinks.currentGroup:\n\t\tdefault:\n\t\t\treturn vscode.ViewColumn.Active;\n\t}\n}\n\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/resourceMap.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\ntype ResourceToKey = (uri: vscode.Uri) => string;\n\nconst defaultResourceToKey = (resource: vscode.Uri): string => resource.toString();\n\nexport class ResourceMap<T> {\n\n\tprivate readonly _map = new Map<string, { readonly uri: vscode.Uri; readonly value: T }>();\n\n\tprivate readonly _toKey: ResourceToKey;\n\n\tconstructor(toKey: ResourceToKey = defaultResourceToKey) {\n\t\tthis._toKey = toKey;\n\t}\n\n\tpublic set(uri: vscode.Uri, value: T): this {\n\t\tthis._map.set(this._toKey(uri), { uri, value });\n\t\treturn this;\n\t}\n\n\tpublic get(resource: vscode.Uri): T | undefined {\n\t\treturn this._map.get(this._toKey(resource))?.value;\n\t}\n\n\tpublic has(resource: vscode.Uri): boolean {\n\t\treturn this._map.has(this._toKey(resource));\n\t}\n\n\tpublic get size(): number {\n\t\treturn this._map.size;\n\t}\n\n\tpublic clear(): void {\n\t\tthis._map.clear();\n\t}\n\n\tpublic delete(resource: vscode.Uri): boolean {\n\t\treturn this._map.delete(this._toKey(resource));\n\t}\n\n\tpublic *values(): IterableIterator<T> {\n\t\tfor (const entry of this._map.values()) {\n\t\t\tyield entry.value;\n\t\t}\n\t}\n\n\tpublic *keys(): IterableIterator<vscode.Uri> {\n\t\tfor (const entry of this._map.values()) {\n\t\t\tyield entry.uri;\n\t\t}\n\t}\n\n\tpublic *entries(): IterableIterator<[vscode.Uri, T]> {\n\t\tfor (const entry of this._map.values()) {\n\t\t\tyield [entry.uri, entry.value];\n\t\t}\n\t}\n\n\tpublic [Symbol.iterator](): IterableIterator<[vscode.Uri, T]> {\n\t\treturn this.entries();\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/resources.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport interface WebviewResourceProvider {\n\tasWebviewUri(resource: vscode.Uri): vscode.Uri;\n\n\treadonly cspSource: string;\n}\n\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/schemes.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const Schemes = Object.freeze({\n\thttp: 'http',\n\thttps: 'https',\n\tfile: 'file',\n\tuntitled: 'untitled',\n\tmailto: 'mailto',\n\tvscode: 'vscode',\n\t'vscode-insiders': 'vscode-insiders',\n\tnotebookCell: 'vscode-notebook-cell',\n});\n\nexport function isOfScheme(scheme: string, link: string): boolean {\n\treturn link.toLowerCase().startsWith(scheme + ':');\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/uriList.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { coalesce } from './arrays';\nimport * as vscode from 'vscode';\n\nfunction splitUriList(str: string): string[] {\n\treturn str.split('\\r\\n');\n}\n\nfunction parseUriList(str: string): string[] {\n\treturn splitUriList(str)\n\t\t.filter(value => !value.startsWith('#')) // Remove comments\n\t\t.map(value => value.trim());\n}\n\nexport class UriList {\n\n\tstatic from(str: string): UriList {\n\t\treturn new UriList(coalesce(parseUriList(str).map(line => {\n\t\t\ttry {\n\t\t\t\treturn { uri: vscode.Uri.parse(line), str: line };\n\t\t\t} catch {\n\t\t\t\t// Uri parse failure\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})));\n\t}\n\n\tprivate constructor(\n\t\tpublic readonly entries: ReadonlyArray<{ readonly uri: vscode.Uri; readonly str: string }>\n\t) { }\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/src/util/url.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\n/**\n * Tries to convert an url into a vscode uri and returns undefined if this is not possible.\n * `url` can be absolute or relative.\n*/\nexport function urlToUri(url: string, base: vscode.Uri): vscode.Uri | undefined {\n\ttry {\n\t\t// `vscode.Uri.joinPath` cannot be used, since it understands\n\t\t// `src` as path, not as relative url. This is problematic for query args.\n\t\tconst parsedUrl = new URL(url, base.toString());\n\t\tconst uri = vscode.Uri.parse(parsedUrl.toString());\n\t\treturn uri;\n\t} catch (e) {\n\t\t// Don't crash if `URL` cannot parse `src`.\n\t\treturn undefined;\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/test-workspace/a.md",
    "content": "[b](b)\n\n[b.md](b.md)\n\n[./b.md](./b.md)\n\n[/b.md](/b.md) `[/b.md](/b.md)`\n\n[b#header1](b#header1)\n\n```\n[b](b)\n```\n\n~~~\n[b](b)\n~~~\n\n    // Indented code\n    [b](b)\n"
  },
  {
    "path": "extensions/markdown-language-features/test-workspace/b.md",
    "content": "# b\n\n[./a](./a)\n\n# header1"
  },
  {
    "path": "extensions/markdown-language-features/test-workspace/sub/c.md",
    "content": "# First\n# Second\n\n[b](/b.md)\n[b](../b.md)\n[b](./../b.md)\n"
  },
  {
    "path": "extensions/markdown-language-features/test-workspace/sub/d.md",
    "content": ""
  },
  {
    "path": "extensions/markdown-language-features/test-workspace/sub/file with space.md",
    "content": "# Header\n"
  },
  {
    "path": "extensions/markdown-language-features/test-workspace/sub/foo.txt",
    "content": "1\n2\n3\n4\n5"
  },
  {
    "path": "extensions/markdown-language-features/test-workspace/sub with space/file.md",
    "content": "# header\n"
  },
  {
    "path": "extensions/markdown-language-features/tsconfig.browser.json",
    "content": "{\n\t\"extends\": \"./tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"types\": []\n\t},\n\t\"exclude\": [\n\t\t\"./src/test/**\"\n\t]\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\"\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/markdown-language-features/types/previewMessaging.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ninterface BaseMessage {\n\treadonly source: string;\n}\n\nexport namespace FromWebviewMessage {\n\n\texport interface CacheImageSizes extends BaseMessage {\n\t\treadonly type: 'cacheImageSizes';\n\t\treadonly imageData: ReadonlyArray<{ id: string; width: number; height: number }>;\n\t}\n\n\texport interface RevealLine extends BaseMessage {\n\t\treadonly type: 'revealLine';\n\t\treadonly line: number;\n\t}\n\n\texport interface DidClick extends BaseMessage {\n\t\treadonly type: 'didClick';\n\t\treadonly line: number;\n\t}\n\n\texport interface ClickLink extends BaseMessage {\n\t\treadonly type: 'openLink';\n\t\treadonly href: string;\n\t}\n\n\texport interface ShowPreviewSecuritySelector extends BaseMessage {\n\t\treadonly type: 'showPreviewSecuritySelector';\n\t}\n\n\texport interface PreviewStyleLoadError extends BaseMessage {\n\t\treadonly type: 'previewStyleLoadError';\n\t\treadonly unloadedStyles: readonly string[];\n\t}\n\n\texport type Type =\n\t\t| CacheImageSizes\n\t\t| RevealLine\n\t\t| DidClick\n\t\t| ClickLink\n\t\t| ShowPreviewSecuritySelector\n\t\t| PreviewStyleLoadError\n\t\t;\n}\n\nexport namespace ToWebviewMessage {\n\texport interface OnDidChangeTextEditorSelection extends BaseMessage {\n\t\treadonly type: 'onDidChangeTextEditorSelection';\n\t\treadonly line: number;\n\t}\n\n\texport interface UpdateView extends BaseMessage {\n\t\treadonly type: 'updateView';\n\t\treadonly line: number;\n\t\treadonly source: string;\n\t}\n\n\texport interface UpdateContent extends BaseMessage {\n\t\treadonly type: 'updateContent';\n\t\treadonly content: string;\n\t}\n\n\texport interface CopyImageContent extends BaseMessage {\n\t\treadonly type: 'copyImage';\n\t\treadonly source: string;\n\t\treadonly id: string;\n\t}\n\n\texport interface OpenImageContent extends BaseMessage {\n\t\treadonly type: 'openImage';\n\t\treadonly source: string;\n\t\treadonly imageSource: string;\n\t}\n\n\texport type Type =\n\t\t| OnDidChangeTextEditorSelection\n\t\t| UpdateView\n\t\t| UpdateContent\n\t\t| CopyImageContent\n\t\t| OpenImageContent\n\t\t;\n}\n"
  },
  {
    "path": "extensions/markdown-math/.gitignore",
    "content": "notebook-out\nlanguageService\n"
  },
  {
    "path": "extensions/markdown-math/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/markdown-math/.vscodeignore",
    "content": "src/**\nnotebook/**\nextension-browser.webpack.config.js\nextension.webpack.config.js\nesbuild.js\ncgmanifest.json\npackage-lock.json\nwebpack.config.js\ntsconfig.json\n.gitignore\n"
  },
  {
    "path": "extensions/markdown-math/README.md",
    "content": "# Markdown Math\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\nAdds math rendering using [KaTeX](https://katex.org) to VS Code's built-in markdown preview and markdown cells in notebooks.\n"
  },
  {
    "path": "extensions/markdown-math/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"James-Yu/LaTeX-Workshop\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/James-Yu/LaTeX-Workshop\",\n\t\t\t\t\t\"commitHash\": \"e4cd86f1731546c2cdde0cc93717ca3fec2da0ba\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"8.19.1\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/markdown-math/esbuild.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n//@ts-check\n\nconst path = require('path');\nconst fse = require('fs-extra');\n\nconst args = process.argv.slice(2);\n\nconst srcDir = path.join(__dirname, 'notebook');\nconst outDir = path.join(__dirname, 'notebook-out');\n\nfunction postBuild(outDir) {\n\tfse.copySync(\n\t\tpath.join(__dirname, 'node_modules', 'katex', 'dist', 'katex.min.css'),\n\t\tpath.join(outDir, 'katex.min.css'));\n\n\tconst fontsDir = path.join(__dirname, 'node_modules', 'katex', 'dist', 'fonts');\n\tconst fontsOutDir = path.join(outDir, 'fonts/');\n\n\tfse.mkdirSync(fontsOutDir, { recursive: true });\n\n\tfor (const file of fse.readdirSync(fontsDir)) {\n\t\tif (file.endsWith('.woff2')) {\n\t\t\tfse.copyFileSync(path.join(fontsDir, file), path.join(fontsOutDir, file));\n\t\t}\n\t}\n}\n\nrequire('../esbuild-webview-common').run({\n\tentryPoints: [\n\t\tpath.join(srcDir, 'katex.ts'),\n\t],\n\tsrcDir,\n\toutdir: outDir,\n}, process.argv, postBuild);\n"
  },
  {
    "path": "extensions/markdown-math/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t}\n});\n"
  },
  {
    "path": "extensions/markdown-math/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t}\n});\n"
  },
  {
    "path": "extensions/markdown-math/notebook/katex.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport type * as markdownIt from 'markdown-it';\nimport type { RendererContext } from 'vscode-notebook-renderer';\n\nconst styleHref = import.meta.url.replace(/katex.js$/, 'katex.min.css');\n\nexport async function activate(ctx: RendererContext<void>) {\n\tconst markdownItRenderer = (await ctx.getRenderer('vscode.markdown-it-renderer')) as undefined | any;\n\tif (!markdownItRenderer) {\n\t\tthrow new Error(`Could not load 'vscode.markdown-it-renderer'`);\n\t}\n\n\t// Add katex styles to be copied to shadow dom\n\tconst link = document.createElement('link');\n\tlink.rel = 'stylesheet';\n\tlink.classList.add('markdown-style');\n\tlink.href = styleHref;\n\n\t// Add same katex style to root document.\n\t// This is needed for the font to be loaded correctly inside the shadow dom.\n\t//\n\t// Seems like https://bugs.chromium.org/p/chromium/issues/detail?id=336876\n\tconst linkHead = document.createElement('link');\n\tlinkHead.rel = 'stylesheet';\n\tlinkHead.href = styleHref;\n\tdocument.head.appendChild(linkHead);\n\n\tconst style = document.createElement('style');\n\tstyle.textContent = `\n\t\t.katex-error {\n\t\t\tcolor: var(--vscode-editorError-foreground);\n\t\t}\n\t\t.katex-block {\n\t\t\tcounter-reset: katexEqnNo mmlEqnNo;\n\t\t}\n\t`;\n\n\t// Put Everything into a template\n\tconst styleTemplate = document.createElement('template');\n\tstyleTemplate.classList.add('markdown-style');\n\tstyleTemplate.content.appendChild(style);\n\tstyleTemplate.content.appendChild(link);\n\tdocument.head.appendChild(styleTemplate);\n\n\tconst katex = require('@vscode/markdown-it-katex').default;\n\tconst macros = {};\n\tmarkdownItRenderer.extendMarkdownIt((md: markdownIt.MarkdownIt) => {\n\t\treturn md.use(katex, {\n\t\t\tglobalGroup: true,\n\t\t\tenableBareBlocks: true,\n\t\t\tenableFencedBlocks: true,\n\t\t\tmacros,\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "extensions/markdown-math/notebook/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist/\",\n\t\t\"jsx\": \"react\",\n\t\t\"module\": \"es2020\",\n\t\t\"lib\": [\n\t\t\t\"es2018\",\n\t\t\t\"DOM\",\n\t\t\t\"DOM.Iterable\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-math/package.json",
    "content": "{\n  \"name\": \"markdown-math\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"icon\": \"icon.png\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"engines\": {\n    \"vscode\": \"^1.54.0\"\n  },\n  \"categories\": [\n    \"Other\",\n    \"Programming Languages\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"main\": \"./out/extension\",\n  \"browser\": \"./dist/browser/extension\",\n  \"activationEvents\": [],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"markdown-math\",\n        \"aliases\": []\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"markdown-math\",\n        \"scopeName\": \"text.html.markdown.math\",\n        \"path\": \"./syntaxes/md-math.tmLanguage.json\"\n      },\n      {\n        \"scopeName\": \"markdown.math.block\",\n        \"path\": \"./syntaxes/md-math-block.tmLanguage.json\",\n        \"injectTo\": [\n          \"text.html.markdown\"\n        ],\n        \"embeddedLanguages\": {\n          \"meta.embedded.math.markdown\": \"latex\"\n        }\n      },\n      {\n        \"scopeName\": \"markdown.math.inline\",\n        \"path\": \"./syntaxes/md-math-inline.tmLanguage.json\",\n        \"injectTo\": [\n          \"text.html.markdown\"\n        ],\n        \"embeddedLanguages\": {\n          \"meta.embedded.math.markdown\": \"latex\",\n          \"punctuation.definition.math.end.markdown\": \"latex\"\n        }\n      },\n      {\n        \"scopeName\": \"markdown.math.codeblock\",\n        \"path\": \"./syntaxes/md-math-fence.tmLanguage.json\",\n        \"injectTo\": [\n          \"text.html.markdown\"\n        ],\n        \"embeddedLanguages\": {\n          \"meta.embedded.math.markdown\": \"latex\"\n        }\n      }\n    ],\n    \"notebookRenderer\": [\n      {\n        \"id\": \"vscode.markdown-it-katex-extension\",\n        \"displayName\": \"Markdown it KaTeX renderer\",\n        \"entrypoint\": {\n          \"extends\": \"vscode.markdown-it-renderer\",\n          \"path\": \"./notebook-out/katex.js\"\n        }\n      }\n    ],\n    \"markdown.markdownItPlugins\": true,\n    \"markdown.previewStyles\": [\n      \"./notebook-out/katex.min.css\",\n      \"./preview-styles/index.css\"\n    ],\n    \"configuration\": [\n      {\n        \"title\": \"Markdown Math\",\n        \"properties\": {\n          \"markdown.math.enabled\": {\n            \"type\": \"boolean\",\n            \"default\": true,\n            \"description\": \"%config.markdown.math.enabled%\"\n          },\n          \"markdown.math.macros\": {\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"string\"\n            },\n            \"default\": {},\n            \"description\": \"%config.markdown.math.macros%\",\n            \"scope\": \"resource\"\n          }\n        }\n      }\n    ]\n  },\n  \"scripts\": {\n    \"compile\": \"npm run build-notebook\",\n    \"watch\": \"npm run build-notebook\",\n    \"build-notebook\": \"node ./esbuild\"\n  },\n  \"devDependencies\": {\n    \"@types/markdown-it\": \"^0.0.0\",\n    \"@types/vscode-notebook-renderer\": \"^1.60.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  },\n  \"dependencies\": {\n    \"@vscode/markdown-it-katex\": \"^1.1.1\"\n  }\n}\n"
  },
  {
    "path": "extensions/markdown-math/package.nls.json",
    "content": "{\n\t\"displayName\": \"Markdown Math\",\n\t\"description\": \"Adds math support to Markdown in notebooks.\",\n\t\"config.markdown.math.enabled\": \"Enable/disable rendering math in the built-in Markdown preview.\",\n\t\"config.markdown.math.macros\": \"A collection of custom macros. Each macro is a key-value pair where the key is a new command name and the value is the expansion of the macro.\"\n}\n"
  },
  {
    "path": "extensions/markdown-math/preview-styles/index.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.katex-error {\n\tcolor: var(--vscode-editorError-foreground);\n}\n"
  },
  {
    "path": "extensions/markdown-math/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\n\ndeclare function require(path: string): any;\n\nconst markdownMathSetting = 'markdown.math';\n\nexport function activate(context: vscode.ExtensionContext) {\n\tfunction isEnabled(): boolean {\n\t\tconst config = vscode.workspace.getConfiguration('markdown');\n\t\treturn config.get<boolean>('math.enabled', true);\n\t}\n\n\tfunction getMacros(): { [key: string]: string } {\n\t\tconst config = vscode.workspace.getConfiguration('markdown');\n\t\treturn config.get<{ [key: string]: string }>('math.macros', {});\n\t}\n\n\tvscode.workspace.onDidChangeConfiguration(e => {\n\t\tif (e.affectsConfiguration(markdownMathSetting)) {\n\t\t\tvscode.commands.executeCommand('markdown.api.reloadPlugins');\n\t\t}\n\t}, undefined, context.subscriptions);\n\n\treturn {\n\t\textendMarkdownIt(md: any) {\n\t\t\tif (isEnabled()) {\n\t\t\t\tconst katex = require('@vscode/markdown-it-katex').default;\n\t\t\t\tconst settingsMacros = getMacros();\n\t\t\t\tconst options = {\n\t\t\t\t\tenableFencedBlocks: true,\n\t\t\t\t\tglobalGroup: true,\n\t\t\t\t\tmacros: { ...settingsMacros }\n\t\t\t\t};\n\t\t\t\tmd.core.ruler.push('reset-katex-macros', () => {\n\t\t\t\t\toptions.macros = { ...settingsMacros };\n\t\t\t\t});\n\t\t\t\treturn md.use(katex, options);\n\t\t\t}\n\t\t\treturn md;\n\t\t}\n\t};\n}"
  },
  {
    "path": "extensions/markdown-math/syntaxes/md-math-block.tmLanguage.json",
    "content": "{\n\t\"fileTypes\": [],\n\t\"injectionSelector\": \"L:text.html.markdown - (comment, string, meta.paragraph.markdown, markup.math.block.markdown, markup.fenced_code.block.markdown, markup.raw.block.markdown)\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#double_dollar_math_block\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#single_dollar_math_block\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"double_dollar_math_block\": {\n\t\t\t\"name\": \"markup.math.block.markdown\",\n\t\t\t\"contentName\": \"meta.embedded.math.markdown\",\n\t\t\t\"begin\": \"(?<=^\\\\s*)(\\\\${2})(?![^$]*\\\\${2})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.begin.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(.*)(\\\\${2})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.embedded.math.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown.math#math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!.*(\\\\${2}))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown.math#math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single_dollar_math_block\": {\n\t\t\t\"name\": \"markup.math.block.markdown\",\n\t\t\t\"contentName\": \"meta.embedded.math.markdown\",\n\t\t\t\"begin\": \"(?<=^\\\\s*)(\\\\$)(?![^$]*\\\\$|\\\\d)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.begin.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(.*)(\\\\${1})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.embedded.math.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown.math#math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^|\\\\G)\",\n\t\t\t\t\t\"while\": \"(^|\\\\G)(?!.*(\\\\${1}))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown.math#math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"scopeName\": \"markdown.math.block\"\n}"
  },
  {
    "path": "extensions/markdown-math/syntaxes/md-math-fence.tmLanguage.json",
    "content": "{\n    \"fileTypes\": [],\n    \"injectionSelector\": \"L:markup.fenced_code.block.markdown\",\n    \"patterns\": [\n        {\n            \"include\": \"#math-code-block\"\n        }\n    ],\n    \"repository\": {\n        \"math-code-block\": {\n            \"begin\": \"(?<=[`~])math(\\\\s+[^`~]*)?$\",\n            \"end\": \"(^|\\\\G)(?=\\\\s*[`~]{3,}\\\\s*$)\",\n            \"patterns\": [\n                {\n                    \"begin\": \"(^|\\\\G)(\\\\s*)(.*)\",\n                    \"while\": \"(^|\\\\G)(?!\\\\s*([`~]{3,})\\\\s*$)\",\n                    \"contentName\": \"meta.embedded.math.markdown\",\n                    \"patterns\": [\n                        {\n                            \"include\": \"text.html.markdown.math#math\"\n                        }\n                    ]\n                }\n            ]\n        }\n    },\n    \"scopeName\": \"markdown.math.codeblock\"\n}\n"
  },
  {
    "path": "extensions/markdown-math/syntaxes/md-math-inline.tmLanguage.json",
    "content": "{\n\t\"fileTypes\": [],\n\t\"injectionSelector\": \"L:meta.paragraph.markdown - (comment, string, markup.math.inline.markdown, markup.fenced_code.block.markdown)\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#math_inline_double\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#math_inline_single\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#math_inline_block\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"math_inline_single\": {\n\t\t\t\"name\": \"markup.math.inline.markdown\",\n\t\t\t\"match\": \"(?<=\\\\s|\\\\W|^)(?<!\\\\$)(\\\\$)(.+?)(\\\\$)(?!\\\\$)(?=\\\\s|\\\\W|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.embedded.math.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown.math#math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.end.markdown\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"math_inline_double\": {\n\t\t\t\"name\": \"markup.math.inline.markdown\",\n\t\t\t\"match\": \"(?<=\\\\s|\\\\W|^)(?<!\\\\$)(\\\\$\\\\$)(.+?)(\\\\$\\\\$)(?!\\\\$)(?=\\\\s|\\\\W|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.begin.markdown\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.embedded.math.markdown\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.markdown.math#math\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.end.markdown\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"math_inline_block\": {\n\t\t\t\"name\": \"markup.math.inline.markdown\",\n\t\t\t\"contentName\": \"meta.embedded.math.markdown\",\n\t\t\t\"begin\": \"(?<=\\\\s|^)(\\\\${2})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.begin.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\${2})(?=\\\\s|$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.math.end.markdown\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.markdown.math#math\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"scopeName\": \"markdown.math.inline\"\n}\n"
  },
  {
    "path": "extensions/markdown-math/syntaxes/md-math.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file includes some grammar rules copied from https://github.com/James-Yu/LaTeX-Workshop/blob/master/syntax/TeX.tmLanguage.json\"\n\t],\n\t\"name\": \"Markdown Math\",\n\t\"scopeName\": \"text.html.markdown.math\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#math\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"math\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.math.tex\",\n\t\t\t\t\t\"match\": \"((?<!\\\\\\\\)%)(.+)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"line.separator.math.tex\",\n\t\t\t\t\t\"match\": \"(\\\\\\\\\\\\\\\\)$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.line.separator.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function.math.tex\",\n\t\t\t\t\t\"begin\": \"((\\\\\\\\)([a-zA-Z_]+))\\\\s*(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.function.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.math.tex\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\)([a-zA-Z_]+)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.character.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.math.tex\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\\\\\)(?!begin\\\\*\\\\{|verb)([A-Za-z]+)\",\n\t\t\t\t\t\"name\": \"constant.other.general.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)\\\\{\",\n\t\t\t\t\t\"name\": \"punctuation.math.begin.bracket.curly\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\\\\\)\\\\}\",\n\t\t\t\t\t\"name\": \"punctuation.math.end.bracket.curly\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\"name\": \"punctuation.math.begin.bracket.round\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"punctuation.math.end.bracket.round\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(([0-9]*[\\\\.][0-9]+)|[0-9]+)\",\n\t\t\t\t\t\"name\": \"constant.numeric.math.tex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\\+\\\\*/_\\\\^-]\",\n\t\t\t\t\t\"name\": \"punctuation.math.operator.latex\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/markdown-math/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": []\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/media-preview/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/media-preview/.vscodeignore",
    "content": "test/**\nsrc/**\ntsconfig.json\nout/test/**\nout/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\ncgmanifest.json\npackage-lock.json\npreview-src/**\nwebpack.config.js\n"
  },
  {
    "path": "extensions/media-preview/README.md",
    "content": "# Media Preview\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension provides basic preview for images, audio and video files.\n\n### Supported image file extensions\n\n- `.jpg`, `.jpe`, `.jpeg`\n- `.png`\n- `.bmp`\n- `.gif`\n- `.ico`\n- `.webp`\n- `.avif`\n\n### Supported audio formats\n\n- `.mp3`\n- `.wav`\n- `.ogg`, `.oga`\n\n### Supported video formats\n\n- `.mp4` (does not support `aac` audio tracks)\n- `.webm` (vp8 only)\n"
  },
  {
    "path": "extensions/media-preview/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t},\n});\n"
  },
  {
    "path": "extensions/media-preview/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t}\n});\n"
  },
  {
    "path": "extensions/media-preview/media/audioPreview.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nhtml, body {\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: center;\n}\n\nbody {\n\tpadding: 5px 10px;\n\tbox-sizing: border-box;\n\t-webkit-user-select: none;\n\tuser-select: none;\n}\n\n.audio-container {\n\theight: 100%;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.container.loading,\n.container.error {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.loading-indicator {\n\twidth: 30px;\n\theight: 30px;\n\tbackground-image: url('./loading.svg');\n\tbackground-size: cover;\n}\n\n.loading-indicator,\n.loading-error {\n\tdisplay: none;\n}\n\n.loading .loading-indicator,\n.error .loading-error {\n\tdisplay: block;\n}\n\n.loading-error {\n\tmargin: 1em;\n}\n\n.vscode-dark .loading-indicator {\n\tbackground-image: url('./loading-dark.svg');\n}\n\n.vscode-high-contrast .loading-indicator {\n\tbackground-image: url('./loading-hc.svg');\n}\n"
  },
  {
    "path": "extensions/media-preview/media/audioPreview.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\"use strict\";\n\n(function () {\n\t// @ts-ignore\n\tconst vscode = acquireVsCodeApi();\n\n\tfunction getSettings() {\n\t\tconst element = document.getElementById('settings');\n\t\tif (element) {\n\t\t\tconst data = element.getAttribute('data-settings');\n\t\t\tif (data) {\n\t\t\t\treturn JSON.parse(data);\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(`Could not load settings`);\n\t}\n\n\tconst settings = getSettings();\n\n\t// State\n\tlet hasLoadedMedia = false;\n\n\t// Elements\n\tconst container = document.createElement('div');\n\tcontainer.className = 'audio-container';\n\tdocument.body.appendChild(container);\n\n\tconst audio = new Audio(settings.src === null ? undefined : settings.src);\n\taudio.controls = true;\n\n\tfunction onLoaded() {\n\t\tif (hasLoadedMedia) {\n\t\t\treturn;\n\t\t}\n\t\thasLoadedMedia = true;\n\n\t\tdocument.body.classList.remove('loading');\n\t\tdocument.body.classList.add('ready');\n\t\tcontainer.append(audio);\n\t}\n\n\taudio.addEventListener('error', e => {\n\t\tif (hasLoadedMedia) {\n\t\t\treturn;\n\t\t}\n\n\t\thasLoadedMedia = true;\n\t\tdocument.body.classList.add('error');\n\t\tdocument.body.classList.remove('loading');\n\t});\n\n\tif (settings.src === null) {\n\t\tonLoaded();\n\t} else {\n\t\taudio.addEventListener('canplaythrough', () => {\n\t\t\tonLoaded();\n\t\t});\n\t}\n\n\tdocument.querySelector('.open-file-link')?.addEventListener('click', (e) => {\n\t\te.preventDefault();\n\t\tvscode.postMessage({\n\t\t\ttype: 'reopen-as-text',\n\t\t});\n\t});\n}());\n"
  },
  {
    "path": "extensions/media-preview/media/imagePreview.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nhtml, body {\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: center;\n}\n\nbody img {\n\tmax-width: none;\n\tmax-height: none;\n}\n\n.container:focus {\n\toutline: none !important;\n}\n\n.container {\n\tpadding: 5px 0 0 10px;\n\tbox-sizing: border-box;\n\t-webkit-user-select: none;\n\tuser-select: none;\n}\n\n.container.image {\n\tpadding: 0;\n\tdisplay: flex;\n\tbox-sizing: border-box;\n}\n\n.container.image img {\n\tpadding: 0;\n\tbackground-position: 0 0, 8px 8px;\n\tbackground-size: 16px 16px;\n\tborder: 1px solid var(--vscode-imagePreview-border);\n}\n\n.container.image img {\n\tbackground-image:\n\t\tlinear-gradient(45deg, rgb(230, 230, 230) 25%, transparent 25%, transparent 75%, rgb(230, 230, 230) 75%, rgb(230, 230, 230)),\n\t\tlinear-gradient(45deg, rgb(230, 230, 230) 25%, transparent 25%, transparent 75%, rgb(230, 230, 230) 75%, rgb(230, 230, 230));\n}\n\n.vscode-dark.container.image img {\n\tbackground-image:\n\t\tlinear-gradient(45deg, rgb(20, 20, 20) 25%, transparent 25%, transparent 75%, rgb(20, 20, 20) 75%, rgb(20, 20, 20)),\n\t\tlinear-gradient(45deg, rgb(20, 20, 20) 25%, transparent 25%, transparent 75%, rgb(20, 20, 20) 75%, rgb(20, 20, 20));\n}\n\n.container img.pixelated {\n\timage-rendering: pixelated;\n}\n\n.container img.scale-to-fit {\n\tmax-width: calc(100% - 20px);\n\tmax-height: calc(100% - 20px);\n\tobject-fit: contain;\n}\n\n.container img {\n\tmargin: auto;\n}\n\n.container.ready.zoom-in {\n\tcursor: zoom-in;\n}\n\n.container.ready.zoom-out {\n\tcursor: zoom-out;\n}\n\n.container .embedded-link,\n.container .embedded-link:hover {\n\tcursor: pointer;\n\ttext-decoration: underline;\n\tmargin-left: 5px;\n}\n\n.container.loading,\n.container.error {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.loading-indicator {\n\twidth: 30px;\n\theight: 30px;\n\tbackground-image: url('./loading.svg');\n\tbackground-size: cover;\n}\n\n.loading-indicator,\n.image-load-error {\n\tdisplay: none;\n}\n\n.loading .loading-indicator,\n.error .image-load-error {\n\tdisplay: block;\n}\n\n.image-load-error {\n\tmargin: 1em;\n}\n\n.vscode-dark .loading-indicator {\n\tbackground-image: url('./loading-dark.svg');\n}\n\n.vscode-high-contrast .loading-indicator {\n\tbackground-image: url('./loading-hc.svg');\n}\n"
  },
  {
    "path": "extensions/media-preview/media/imagePreview.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\"use strict\";\n\n(function () {\n\t/**\n\t * @param {number} value\n\t * @param {number} min\n\t * @param {number} max\n\t * @return {number}\n\t */\n\tfunction clamp(value, min, max) {\n\t\treturn Math.min(Math.max(value, min), max);\n\t}\n\n\tfunction getSettings() {\n\t\tconst element = document.getElementById('image-preview-settings');\n\t\tif (element) {\n\t\t\tconst data = element.getAttribute('data-settings');\n\t\t\tif (data) {\n\t\t\t\treturn JSON.parse(data);\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(`Could not load settings`);\n\t}\n\n\t/**\n\t * Enable image-rendering: pixelated for images scaled by more than this.\n\t */\n\tconst PIXELATION_THRESHOLD = 3;\n\n\tconst SCALE_PINCH_FACTOR = 0.075;\n\tconst MAX_SCALE = 20;\n\tconst MIN_SCALE = 0.1;\n\n\tconst zoomLevels = [\n\t\t0.1,\n\t\t0.2,\n\t\t0.3,\n\t\t0.4,\n\t\t0.5,\n\t\t0.6,\n\t\t0.7,\n\t\t0.8,\n\t\t0.9,\n\t\t1,\n\t\t1.5,\n\t\t2,\n\t\t3,\n\t\t5,\n\t\t7,\n\t\t10,\n\t\t15,\n\t\t20\n\t];\n\n\tconst settings = getSettings();\n\tconst isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n\n\t// @ts-ignore\n\tconst vscode = acquireVsCodeApi();\n\n\tconst initialState = vscode.getState() || { scale: 'fit', offsetX: 0, offsetY: 0 };\n\n\t// State\n\tlet scale = initialState.scale;\n\tlet ctrlPressed = false;\n\tlet altPressed = false;\n\tlet hasLoadedImage = false;\n\tlet consumeClick = true;\n\tlet isActive = false;\n\n\t// Elements\n\tconst container = document.body;\n\tconst image = document.createElement('img');\n\n\tfunction updateScale(newScale) {\n\t\tif (!image || !hasLoadedImage || !image.parentElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (newScale === 'fit') {\n\t\t\tscale = 'fit';\n\t\t\timage.classList.add('scale-to-fit');\n\t\t\timage.classList.remove('pixelated');\n\t\t\t// @ts-ignore Non-standard CSS property\n\t\t\timage.style.zoom = 'normal';\n\t\t\tvscode.setState(undefined);\n\t\t} else {\n\t\t\tscale = clamp(newScale, MIN_SCALE, MAX_SCALE);\n\t\t\tif (scale >= PIXELATION_THRESHOLD) {\n\t\t\t\timage.classList.add('pixelated');\n\t\t\t} else {\n\t\t\t\timage.classList.remove('pixelated');\n\t\t\t}\n\n\t\t\tconst dx = (window.scrollX + container.clientWidth / 2) / container.scrollWidth;\n\t\t\tconst dy = (window.scrollY + container.clientHeight / 2) / container.scrollHeight;\n\n\t\t\timage.classList.remove('scale-to-fit');\n\t\t\t// @ts-ignore Non-standard CSS property\n\t\t\timage.style.zoom = scale;\n\n\t\t\tconst newScrollX = container.scrollWidth * dx - container.clientWidth / 2;\n\t\t\tconst newScrollY = container.scrollHeight * dy - container.clientHeight / 2;\n\n\t\t\twindow.scrollTo(newScrollX, newScrollY);\n\n\t\t\tvscode.setState({ scale: scale, offsetX: newScrollX, offsetY: newScrollY });\n\t\t}\n\n\t\tvscode.postMessage({\n\t\t\ttype: 'zoom',\n\t\t\tvalue: scale\n\t\t});\n\t}\n\n\tfunction setActive(value) {\n\t\tisActive = value;\n\t\tif (value) {\n\t\t\tif (isMac ? altPressed : ctrlPressed) {\n\t\t\t\tcontainer.classList.remove('zoom-in');\n\t\t\t\tcontainer.classList.add('zoom-out');\n\t\t\t} else {\n\t\t\t\tcontainer.classList.remove('zoom-out');\n\t\t\t\tcontainer.classList.add('zoom-in');\n\t\t\t}\n\t\t} else {\n\t\t\tctrlPressed = false;\n\t\t\taltPressed = false;\n\t\t\tcontainer.classList.remove('zoom-out');\n\t\t\tcontainer.classList.remove('zoom-in');\n\t\t}\n\t}\n\n\tfunction firstZoom() {\n\t\tif (!image || !hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\n\t\tscale = image.clientWidth / image.naturalWidth;\n\t\tupdateScale(scale);\n\t}\n\n\tfunction zoomIn() {\n\t\tif (scale === 'fit') {\n\t\t\tfirstZoom();\n\t\t}\n\n\t\tlet i = 0;\n\t\tfor (; i < zoomLevels.length; ++i) {\n\t\t\tif (zoomLevels[i] > scale) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tupdateScale(zoomLevels[i] || MAX_SCALE);\n\t}\n\n\tfunction zoomOut() {\n\t\tif (scale === 'fit') {\n\t\t\tfirstZoom();\n\t\t}\n\n\t\tlet i = zoomLevels.length - 1;\n\t\tfor (; i >= 0; --i) {\n\t\t\tif (zoomLevels[i] < scale) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tupdateScale(zoomLevels[i] || MIN_SCALE);\n\t}\n\n\twindow.addEventListener('keydown', (/** @type {KeyboardEvent} */ e) => {\n\t\tif (!image || !hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\t\tctrlPressed = e.ctrlKey;\n\t\taltPressed = e.altKey;\n\n\t\tif (isMac ? altPressed : ctrlPressed) {\n\t\t\tcontainer.classList.remove('zoom-in');\n\t\t\tcontainer.classList.add('zoom-out');\n\t\t}\n\t});\n\n\twindow.addEventListener('keyup', (/** @type {KeyboardEvent} */ e) => {\n\t\tif (!image || !hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\n\t\tctrlPressed = e.ctrlKey;\n\t\taltPressed = e.altKey;\n\n\t\tif (!(isMac ? altPressed : ctrlPressed)) {\n\t\t\tcontainer.classList.remove('zoom-out');\n\t\t\tcontainer.classList.add('zoom-in');\n\t\t}\n\t});\n\n\tcontainer.addEventListener('mousedown', (/** @type {MouseEvent} */ e) => {\n\t\tif (!image || !hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tctrlPressed = e.ctrlKey;\n\t\taltPressed = e.altKey;\n\n\t\tconsumeClick = !isActive;\n\t});\n\n\tcontainer.addEventListener('click', (/** @type {MouseEvent} */ e) => {\n\t\tif (!image || !hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (consumeClick) {\n\t\t\tconsumeClick = false;\n\t\t\treturn;\n\t\t}\n\t\t// left click\n\t\tif (scale === 'fit') {\n\t\t\tfirstZoom();\n\t\t}\n\n\t\tif (!(isMac ? altPressed : ctrlPressed)) { // zoom in\n\t\t\tzoomIn();\n\t\t} else {\n\t\t\tzoomOut();\n\t\t}\n\t});\n\n\tcontainer.addEventListener('wheel', (/** @type {WheelEvent} */ e) => {\n\t\t// Prevent pinch to zoom\n\t\tif (e.ctrlKey) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tif (!image || !hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isScrollWheelKeyPressed = isMac ? altPressed : ctrlPressed;\n\t\tif (!isScrollWheelKeyPressed && !e.ctrlKey) { // pinching is reported as scroll wheel + ctrl\n\t\t\treturn;\n\t\t}\n\n\t\tif (scale === 'fit') {\n\t\t\tfirstZoom();\n\t\t}\n\n\t\tconst delta = e.deltaY > 0 ? 1 : -1;\n\t\tupdateScale(scale * (1 - delta * SCALE_PINCH_FACTOR));\n\t}, { passive: false });\n\n\twindow.addEventListener('scroll', e => {\n\t\tif (!image || !hasLoadedImage || !image.parentElement || scale === 'fit') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst entry = vscode.getState();\n\t\tif (entry) {\n\t\t\tvscode.setState({ scale: entry.scale, offsetX: window.scrollX, offsetY: window.scrollY });\n\t\t}\n\t}, { passive: true });\n\n\tcontainer.classList.add('image');\n\n\timage.classList.add('scale-to-fit');\n\n\timage.addEventListener('load', () => {\n\t\tif (hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\t\thasLoadedImage = true;\n\n\t\tvscode.postMessage({\n\t\t\ttype: 'size',\n\t\t\tvalue: `${image.naturalWidth}x${image.naturalHeight}`,\n\t\t});\n\n\t\tdocument.body.classList.remove('loading');\n\t\tdocument.body.classList.add('ready');\n\t\tdocument.body.append(image);\n\n\t\tupdateScale(scale);\n\n\t\tif (initialState.scale !== 'fit') {\n\t\t\twindow.scrollTo(initialState.offsetX, initialState.offsetY);\n\t\t}\n\t});\n\n\timage.addEventListener('error', e => {\n\t\tif (hasLoadedImage) {\n\t\t\treturn;\n\t\t}\n\n\t\thasLoadedImage = true;\n\t\tdocument.body.classList.add('error');\n\t\tdocument.body.classList.remove('loading');\n\t});\n\n\timage.src = settings.src;\n\n\tdocument.querySelector('.open-file-link')?.addEventListener('click', (e) => {\n\t\te.preventDefault();\n\t\tvscode.postMessage({\n\t\t\ttype: 'reopen-as-text',\n\t\t});\n\t});\n\n\twindow.addEventListener('message', e => {\n\t\tif (e.origin !== window.origin) {\n\t\t\tconsole.error('Dropping message from unknown origin in image preview');\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.data.type) {\n\t\t\tcase 'setScale': {\n\t\t\t\tupdateScale(e.data.scale);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'setActive': {\n\t\t\t\tsetActive(e.data.value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'zoomIn': {\n\t\t\t\tzoomIn();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'zoomOut': {\n\t\t\t\tzoomOut();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'copyImage': {\n\t\t\t\tcopyImage();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tdocument.addEventListener('copy', () => {\n\t\tcopyImage();\n\t});\n\n\tasync function copyImage(retries = 5) {\n\t\tif (!document.hasFocus() && retries > 0) {\n\t\t\t// copyImage is called at the same time as webview.reveal, which means this function is running whilst the webview is gaining focus.\n\t\t\t// Since navigator.clipboard.write requires the document to be focused, we need to wait for focus.\n\t\t\t// We cannot use a listener, as there is a high chance the focus is gained during the setup of the listener resulting in us missing it.\n\t\t\tsetTimeout(() => { copyImage(retries - 1); }, 20);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait navigator.clipboard.write([new ClipboardItem({\n\t\t\t\t'image/png': new Promise((resolve, reject) => {\n\t\t\t\t\tconst canvas = document.createElement('canvas');\n\t\t\t\t\tcanvas.width = image.naturalWidth;\n\t\t\t\t\tcanvas.height = image.naturalHeight;\n\t\t\t\t\tcanvas.getContext('2d').drawImage(image, 0, 0);\n\t\t\t\t\tcanvas.toBlob((blob) => {\n\t\t\t\t\t\tresolve(blob);\n\t\t\t\t\t\tcanvas.remove();\n\t\t\t\t\t}, 'image/png');\n\t\t\t\t})\n\t\t\t})]);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t}\n}());\n"
  },
  {
    "path": "extensions/media-preview/media/videoPreview.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nhtml {\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: center;\n}\n\nbody {\n\tpadding: 5px 10px;\n\twidth: calc(100% - 20px);\n\theight: calc(100% - 10px);\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\t-webkit-user-select: none;\n\tuser-select: none;\n}\n\n.loading-indicator {\n\twidth: 30px;\n\theight: 30px;\n\tbackground-image: url('./loading.svg');\n\tbackground-size: cover;\n}\n\n.loading-indicator,\n.loading-error {\n\tdisplay: none;\n}\n\n.loading .loading-indicator,\n.error .loading-error {\n\tdisplay: block;\n}\n\n.loading-error {\n\tmargin: 1em;\n}\n\n.vscode-dark .loading-indicator {\n\tbackground-image: url('./loading-dark.svg');\n}\n\n.vscode-high-contrast .loading-indicator {\n\tbackground-image: url('./loading-hc.svg');\n}\n"
  },
  {
    "path": "extensions/media-preview/media/videoPreview.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\"use strict\";\n\n(function () {\n\t// @ts-ignore\n\tconst vscode = acquireVsCodeApi();\n\n\tfunction getSettings() {\n\t\tconst element = document.getElementById('settings');\n\t\tif (element) {\n\t\t\tconst data = element.getAttribute('data-settings');\n\t\t\tif (data) {\n\t\t\t\treturn JSON.parse(data);\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(`Could not load settings`);\n\t}\n\n\tconst settings = getSettings();\n\n\t// State\n\tlet hasLoadedMedia = false;\n\n\t// Elements\n\tconst video = document.createElement('video');\n\tif (settings.src !== null) {\n\t\tvideo.src = settings.src;\n\t}\n\tvideo.playsInline = true;\n\tvideo.controls = true;\n\tvideo.autoplay = settings.autoplay;\n\tvideo.muted = settings.autoplay;\n\tvideo.loop = settings.loop;\n\n\tfunction onLoaded() {\n\t\tif (hasLoadedMedia) {\n\t\t\treturn;\n\t\t}\n\t\thasLoadedMedia = true;\n\n\t\tdocument.body.classList.remove('loading');\n\t\tdocument.body.classList.add('ready');\n\t\tdocument.body.append(video);\n\t}\n\n\tvideo.addEventListener('error', e => {\n\t\tif (hasLoadedMedia) {\n\t\t\treturn;\n\t\t}\n\n\t\thasLoadedMedia = true;\n\t\tdocument.body.classList.add('error');\n\t\tdocument.body.classList.remove('loading');\n\t});\n\n\tif (settings.src === null) {\n\t\tonLoaded();\n\t} else {\n\t\tvideo.addEventListener('canplaythrough', () => {\n\t\t\tonLoaded();\n\t\t});\n\t}\n\n\tdocument.querySelector('.open-file-link')?.addEventListener('click', (e) => {\n\t\te.preventDefault();\n\t\tvscode.postMessage({\n\t\t\ttype: 'reopen-as-text',\n\t\t});\n\t});\n}());\n"
  },
  {
    "path": "extensions/media-preview/package.json",
    "content": "{\n  \"name\": \"media-preview\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"extensionKind\": [\n    \"ui\",\n    \"workspace\"\n  ],\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"icon\": \"icon.png\",\n  \"license\": \"MIT\",\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"engines\": {\n    \"vscode\": \"^1.70.0\"\n  },\n  \"main\": \"./out/extension\",\n  \"browser\": \"./dist/browser/extension.js\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"activationEvents\": [],\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"configuration\": {\n      \"type\": \"object\",\n      \"title\": \"Media Previewer\",\n      \"properties\": {\n        \"mediaPreview.video.autoPlay\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%videoPreviewerAutoPlay%\"\n        },\n        \"mediaPreview.video.loop\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"markdownDescription\": \"%videoPreviewerLoop%\"\n        }\n      }\n    },\n    \"customEditors\": [\n      {\n        \"viewType\": \"imagePreview.previewEditor\",\n        \"displayName\": \"%customEditor.imagePreview.displayName%\",\n        \"priority\": \"builtin\",\n        \"selector\": [\n          {\n            \"filenamePattern\": \"*.{jpg,jpe,jpeg,png,bmp,gif,ico,webp,avif,svg}\"\n          }\n        ]\n      },\n      {\n        \"viewType\": \"vscode.audioPreview\",\n        \"displayName\": \"%customEditor.audioPreview.displayName%\",\n        \"priority\": \"builtin\",\n        \"selector\": [\n          {\n            \"filenamePattern\": \"*.{mp3,wav,ogg,oga}\"\n          }\n        ]\n      },\n      {\n        \"viewType\": \"vscode.videoPreview\",\n        \"displayName\": \"%customEditor.videoPreview.displayName%\",\n        \"priority\": \"builtin\",\n        \"selector\": [\n          {\n            \"filenamePattern\": \"*.{mp4,webm}\"\n          }\n        ]\n      }\n    ],\n    \"commands\": [\n      {\n        \"command\": \"imagePreview.zoomIn\",\n        \"title\": \"%command.zoomIn%\",\n        \"category\": \"Image Preview\"\n      },\n      {\n        \"command\": \"imagePreview.zoomOut\",\n        \"title\": \"%command.zoomOut%\",\n        \"category\": \"Image Preview\"\n      },\n      {\n        \"command\": \"imagePreview.copyImage\",\n        \"title\": \"%command.copyImage%\",\n        \"category\": \"Image Preview\"\n      }\n    ],\n    \"menus\": {\n      \"commandPalette\": [\n        {\n          \"command\": \"imagePreview.zoomIn\",\n          \"when\": \"activeCustomEditorId == 'imagePreview.previewEditor'\",\n          \"group\": \"1_imagePreview\"\n        },\n        {\n          \"command\": \"imagePreview.zoomOut\",\n          \"when\": \"activeCustomEditorId == 'imagePreview.previewEditor'\",\n          \"group\": \"1_imagePreview\"\n        },\n        {\n          \"command\": \"imagePreview.copyImage\",\n          \"when\": \"false\"\n        }\n      ],\n      \"webview/context\": [\n        {\n          \"command\": \"imagePreview.copyImage\",\n          \"when\": \"webviewId == 'imagePreview.previewEditor'\"\n        }\n      ]\n    }\n  },\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:media-preview\",\n    \"watch\": \"npm run build-preview && gulp watch-extension:media-preview\",\n    \"vscode:prepublish\": \"npm run build-ext\",\n    \"build-ext\": \"node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:media-preview ./tsconfig.json\",\n    \"compile-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none\",\n    \"watch-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose\"\n  },\n  \"dependencies\": {\n    \"@vscode/extension-telemetry\": \"^0.9.8\",\n    \"vscode-uri\": \"^3.0.6\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/media-preview/package.nls.json",
    "content": "{\n\t\"displayName\": \"Media Preview\",\n\t\"description\": \"Provides VS Code's built-in previews for images, audio, and video\",\n\t\"customEditor.audioPreview.displayName\": \"Audio Preview\",\n\t\"customEditor.imagePreview.displayName\": \"Image Preview\",\n\t\"customEditor.videoPreview.displayName\": \"Video Preview\",\n\t\"videoPreviewerAutoPlay\": \"Start playing videos on mute automatically.\",\n\t\"videoPreviewerLoop\": \"Loop videos over again automatically.\",\n\t\"command.zoomIn\": \"Zoom in\",\n\t\"command.zoomOut\": \"Zoom out\",\n\t\"command.copyImage\": \"Copy\"\n}\n"
  },
  {
    "path": "extensions/media-preview/src/audioPreview.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { BinarySizeStatusBarEntry } from './binarySizeStatusBarEntry';\nimport { MediaPreview, reopenAsText } from './mediaPreview';\nimport { escapeAttribute, getNonce } from './util/dom';\n\nclass AudioPreviewProvider implements vscode.CustomReadonlyEditorProvider {\n\n\tpublic static readonly viewType = 'vscode.audioPreview';\n\n\tconstructor(\n\t\tprivate readonly extensionRoot: vscode.Uri,\n\t\tprivate readonly binarySizeStatusBarEntry: BinarySizeStatusBarEntry,\n\t) { }\n\n\tpublic async openCustomDocument(uri: vscode.Uri) {\n\t\treturn { uri, dispose: () => { } };\n\t}\n\n\tpublic async resolveCustomEditor(document: vscode.CustomDocument, webviewEditor: vscode.WebviewPanel): Promise<void> {\n\t\tnew AudioPreview(this.extensionRoot, document.uri, webviewEditor, this.binarySizeStatusBarEntry);\n\t}\n}\n\n\nclass AudioPreview extends MediaPreview {\n\n\tconstructor(\n\t\tprivate readonly extensionRoot: vscode.Uri,\n\t\tresource: vscode.Uri,\n\t\twebviewEditor: vscode.WebviewPanel,\n\t\tbinarySizeStatusBarEntry: BinarySizeStatusBarEntry,\n\t) {\n\t\tsuper(extensionRoot, resource, webviewEditor, binarySizeStatusBarEntry);\n\n\t\tthis._register(webviewEditor.webview.onDidReceiveMessage(message => {\n\t\t\tswitch (message.type) {\n\t\t\t\tcase 'reopen-as-text': {\n\t\t\t\t\treopenAsText(resource, webviewEditor.viewColumn);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis.updateBinarySize();\n\t\tthis.render();\n\t\tthis.updateState();\n\t}\n\n\tprotected async getWebviewContents(): Promise<string> {\n\t\tconst version = Date.now().toString();\n\t\tconst settings = {\n\t\t\tsrc: await this.getResourcePath(this.webviewEditor, this.resource, version),\n\t\t};\n\n\t\tconst nonce = getNonce();\n\n\t\tconst cspSource = this.webviewEditor.webview.cspSource;\n\t\treturn /* html */`<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"UTF-8\">\n\n\t<!-- Disable pinch zooming -->\n\t<meta name=\"viewport\"\n\t\tcontent=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no\">\n\n\t<title>Audio Preview</title>\n\n\t<link rel=\"stylesheet\" href=\"${escapeAttribute(this.extensionResource('media', 'audioPreview.css'))}\" type=\"text/css\" media=\"screen\" nonce=\"${nonce}\">\n\n\t<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';\">\n\t<meta id=\"settings\" data-settings=\"${escapeAttribute(JSON.stringify(settings))}\">\n</head>\n<body class=\"container loading\" data-vscode-context='{ \"preventDefaultContextMenuItems\": true }'>\n\t<div class=\"loading-indicator\"></div>\n\t<div class=\"loading-error\">\n\t\t<p>${vscode.l10n.t(\"An error occurred while loading the audio file.\")}</p>\n\t\t<a href=\"#\" class=\"open-file-link\">${vscode.l10n.t(\"Open file using VS Code's standard text/binary editor?\")}</a>\n\t</div>\n\t<script src=\"${escapeAttribute(this.extensionResource('media', 'audioPreview.js'))}\" nonce=\"${nonce}\"></script>\n</body>\n</html>`;\n\t}\n\n\tprivate async getResourcePath(webviewEditor: vscode.WebviewPanel, resource: vscode.Uri, version: string): Promise<string | null> {\n\t\tif (resource.scheme === 'git') {\n\t\t\tconst stat = await vscode.workspace.fs.stat(resource);\n\t\t\tif (stat.size === 0) {\n\t\t\t\t// The file is stored on git lfs\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Avoid adding cache busting if there is already a query string\n\t\tif (resource.query) {\n\t\t\treturn webviewEditor.webview.asWebviewUri(resource).toString();\n\t\t}\n\t\treturn webviewEditor.webview.asWebviewUri(resource).with({ query: `version=${version}` }).toString();\n\t}\n\n\tprivate extensionResource(...parts: string[]) {\n\t\treturn this.webviewEditor.webview.asWebviewUri(vscode.Uri.joinPath(this.extensionRoot, ...parts));\n\t}\n}\n\nexport function registerAudioPreviewSupport(context: vscode.ExtensionContext, binarySizeStatusBarEntry: BinarySizeStatusBarEntry): vscode.Disposable {\n\tconst provider = new AudioPreviewProvider(context.extensionUri, binarySizeStatusBarEntry);\n\treturn vscode.window.registerCustomEditorProvider(AudioPreviewProvider.viewType, provider, {\n\t\tsupportsMultipleEditorsPerDocument: true,\n\t\twebviewOptions: {\n\t\t\tretainContextWhenHidden: true,\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "extensions/media-preview/src/binarySizeStatusBarEntry.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { PreviewStatusBarEntry } from './ownedStatusBarEntry';\n\n\nclass BinarySize {\n\tstatic readonly KB = 1024;\n\tstatic readonly MB = BinarySize.KB * BinarySize.KB;\n\tstatic readonly GB = BinarySize.MB * BinarySize.KB;\n\tstatic readonly TB = BinarySize.GB * BinarySize.KB;\n\n\tstatic formatSize(size: number): string {\n\t\tif (size < BinarySize.KB) {\n\t\t\treturn vscode.l10n.t(\"{0}B\", size);\n\t\t}\n\n\t\tif (size < BinarySize.MB) {\n\t\t\treturn vscode.l10n.t(\"{0}KB\", (size / BinarySize.KB).toFixed(2));\n\t\t}\n\n\t\tif (size < BinarySize.GB) {\n\t\t\treturn vscode.l10n.t(\"{0}MB\", (size / BinarySize.MB).toFixed(2));\n\t\t}\n\n\t\tif (size < BinarySize.TB) {\n\t\t\treturn vscode.l10n.t(\"{0}GB\", (size / BinarySize.GB).toFixed(2));\n\t\t}\n\n\t\treturn vscode.l10n.t(\"{0}TB\", (size / BinarySize.TB).toFixed(2));\n\t}\n}\n\nexport class BinarySizeStatusBarEntry extends PreviewStatusBarEntry {\n\n\tconstructor() {\n\t\tsuper('status.imagePreview.binarySize', vscode.l10n.t(\"Image Binary Size\"), vscode.StatusBarAlignment.Right, 100);\n\t}\n\n\tpublic show(owner: unknown, size: number | undefined) {\n\t\tif (typeof size === 'number') {\n\t\t\tsuper.showItem(owner, BinarySize.formatSize(size));\n\t\t} else {\n\t\t\tthis.hide(owner);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/media-preview/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { registerAudioPreviewSupport } from './audioPreview';\nimport { BinarySizeStatusBarEntry } from './binarySizeStatusBarEntry';\nimport { registerImagePreviewSupport } from './imagePreview';\nimport { registerVideoPreviewSupport } from './videoPreview';\n\nexport function activate(context: vscode.ExtensionContext) {\n\tconst binarySizeStatusBarEntry = new BinarySizeStatusBarEntry();\n\tcontext.subscriptions.push(binarySizeStatusBarEntry);\n\n\tcontext.subscriptions.push(registerImagePreviewSupport(context, binarySizeStatusBarEntry));\n\tcontext.subscriptions.push(registerAudioPreviewSupport(context, binarySizeStatusBarEntry));\n\tcontext.subscriptions.push(registerVideoPreviewSupport(context, binarySizeStatusBarEntry));\n}\n"
  },
  {
    "path": "extensions/media-preview/src/imagePreview/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { BinarySizeStatusBarEntry } from '../binarySizeStatusBarEntry';\nimport { MediaPreview, PreviewState, reopenAsText } from '../mediaPreview';\nimport { escapeAttribute, getNonce } from '../util/dom';\nimport { SizeStatusBarEntry } from './sizeStatusBarEntry';\nimport { Scale, ZoomStatusBarEntry } from './zoomStatusBarEntry';\n\n\nexport class PreviewManager implements vscode.CustomReadonlyEditorProvider {\n\n\tpublic static readonly viewType = 'imagePreview.previewEditor';\n\n\tprivate readonly _previews = new Set<ImagePreview>();\n\tprivate _activePreview: ImagePreview | undefined;\n\n\tconstructor(\n\t\tprivate readonly extensionRoot: vscode.Uri,\n\t\tprivate readonly sizeStatusBarEntry: SizeStatusBarEntry,\n\t\tprivate readonly binarySizeStatusBarEntry: BinarySizeStatusBarEntry,\n\t\tprivate readonly zoomStatusBarEntry: ZoomStatusBarEntry,\n\t) { }\n\n\tpublic async openCustomDocument(uri: vscode.Uri) {\n\t\treturn { uri, dispose: () => { } };\n\t}\n\n\tpublic async resolveCustomEditor(\n\t\tdocument: vscode.CustomDocument,\n\t\twebviewEditor: vscode.WebviewPanel,\n\t): Promise<void> {\n\t\tconst preview = new ImagePreview(this.extensionRoot, document.uri, webviewEditor, this.sizeStatusBarEntry, this.binarySizeStatusBarEntry, this.zoomStatusBarEntry);\n\t\tthis._previews.add(preview);\n\t\tthis.setActivePreview(preview);\n\n\t\twebviewEditor.onDidDispose(() => { this._previews.delete(preview); });\n\n\t\twebviewEditor.onDidChangeViewState(() => {\n\t\t\tif (webviewEditor.active) {\n\t\t\t\tthis.setActivePreview(preview);\n\t\t\t} else if (this._activePreview === preview && !webviewEditor.active) {\n\t\t\t\tthis.setActivePreview(undefined);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic get activePreview() { return this._activePreview; }\n\n\tprivate setActivePreview(value: ImagePreview | undefined): void {\n\t\tthis._activePreview = value;\n\t}\n}\n\n\nclass ImagePreview extends MediaPreview {\n\n\tprivate _imageSize: string | undefined;\n\tprivate _imageZoom: Scale | undefined;\n\n\tprivate readonly emptyPngDataUri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAEElEQVR42gEFAPr/AP///wAI/AL+Sr4t6gAAAABJRU5ErkJggg==';\n\n\tconstructor(\n\t\tprivate readonly extensionRoot: vscode.Uri,\n\t\tresource: vscode.Uri,\n\t\twebviewEditor: vscode.WebviewPanel,\n\t\tprivate readonly sizeStatusBarEntry: SizeStatusBarEntry,\n\t\tbinarySizeStatusBarEntry: BinarySizeStatusBarEntry,\n\t\tprivate readonly zoomStatusBarEntry: ZoomStatusBarEntry,\n\t) {\n\t\tsuper(extensionRoot, resource, webviewEditor, binarySizeStatusBarEntry);\n\n\t\tthis._register(webviewEditor.webview.onDidReceiveMessage(message => {\n\t\t\tswitch (message.type) {\n\t\t\t\tcase 'size': {\n\t\t\t\t\tthis._imageSize = message.value;\n\t\t\t\t\tthis.updateState();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'zoom': {\n\t\t\t\t\tthis._imageZoom = message.value;\n\t\t\t\t\tthis.updateState();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'reopen-as-text': {\n\t\t\t\t\treopenAsText(resource, webviewEditor.viewColumn);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(zoomStatusBarEntry.onDidChangeScale(e => {\n\t\t\tif (this.previewState === PreviewState.Active) {\n\t\t\t\tthis.webviewEditor.webview.postMessage({ type: 'setScale', scale: e.scale });\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(webviewEditor.onDidChangeViewState(() => {\n\t\t\tthis.webviewEditor.webview.postMessage({ type: 'setActive', value: this.webviewEditor.active });\n\t\t}));\n\n\t\tthis._register(webviewEditor.onDidDispose(() => {\n\t\t\tif (this.previewState === PreviewState.Active) {\n\t\t\t\tthis.sizeStatusBarEntry.hide(this);\n\t\t\t\tthis.zoomStatusBarEntry.hide(this);\n\t\t\t}\n\t\t\tthis.previewState = PreviewState.Disposed;\n\t\t}));\n\n\t\tthis.updateBinarySize();\n\t\tthis.render();\n\t\tthis.updateState();\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.sizeStatusBarEntry.hide(this);\n\t\tthis.zoomStatusBarEntry.hide(this);\n\t}\n\n\tpublic zoomIn() {\n\t\tif (this.previewState === PreviewState.Active) {\n\t\t\tthis.webviewEditor.webview.postMessage({ type: 'zoomIn' });\n\t\t}\n\t}\n\n\tpublic zoomOut() {\n\t\tif (this.previewState === PreviewState.Active) {\n\t\t\tthis.webviewEditor.webview.postMessage({ type: 'zoomOut' });\n\t\t}\n\t}\n\n\tpublic copyImage() {\n\t\tif (this.previewState === PreviewState.Active) {\n\t\t\tthis.webviewEditor.reveal();\n\t\t\tthis.webviewEditor.webview.postMessage({ type: 'copyImage' });\n\t\t}\n\t}\n\n\tprotected override updateState() {\n\t\tsuper.updateState();\n\n\t\tif (this.previewState === PreviewState.Disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.webviewEditor.active) {\n\t\t\tthis.sizeStatusBarEntry.show(this, this._imageSize || '');\n\t\t\tthis.zoomStatusBarEntry.show(this, this._imageZoom || 'fit');\n\t\t} else {\n\t\t\tthis.sizeStatusBarEntry.hide(this);\n\t\t\tthis.zoomStatusBarEntry.hide(this);\n\t\t}\n\t}\n\tprotected override async render(): Promise<void> {\n\t\tawait super.render();\n\t\tthis.webviewEditor.webview.postMessage({ type: 'setActive', value: this.webviewEditor.active });\n\t}\n\n\tprotected override async getWebviewContents(): Promise<string> {\n\t\tconst version = Date.now().toString();\n\t\tconst settings = {\n\t\t\tsrc: await this.getResourcePath(this.webviewEditor, this.resource, version),\n\t\t};\n\n\t\tconst nonce = getNonce();\n\n\t\tconst cspSource = this.webviewEditor.webview.cspSource;\n\t\treturn /* html */`<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"UTF-8\">\n\n\t<!-- Disable pinch zooming -->\n\t<meta name=\"viewport\"\n\t\tcontent=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no\">\n\n\t<title>Image Preview</title>\n\n\t<link rel=\"stylesheet\" href=\"${escapeAttribute(this.extensionResource('media', 'imagePreview.css'))}\" type=\"text/css\" media=\"screen\" nonce=\"${nonce}\">\n\n\t<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; img-src data: ${cspSource}; connect-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';\">\n\t<meta id=\"image-preview-settings\" data-settings=\"${escapeAttribute(JSON.stringify(settings))}\">\n</head>\n<body class=\"container image scale-to-fit loading\" data-vscode-context='{ \"preventDefaultContextMenuItems\": true }'>\n\t<div class=\"loading-indicator\"></div>\n\t<div class=\"image-load-error\">\n\t\t<p>${vscode.l10n.t(\"An error occurred while loading the image.\")}</p>\n\t\t<a href=\"#\" class=\"open-file-link\">${vscode.l10n.t(\"Open file using VS Code's standard text/binary editor?\")}</a>\n\t</div>\n\t<script src=\"${escapeAttribute(this.extensionResource('media', 'imagePreview.js'))}\" nonce=\"${nonce}\"></script>\n</body>\n</html>`;\n\t}\n\n\tprivate async getResourcePath(webviewEditor: vscode.WebviewPanel, resource: vscode.Uri, version: string): Promise<string> {\n\t\tif (resource.scheme === 'git') {\n\t\t\tconst stat = await vscode.workspace.fs.stat(resource);\n\t\t\tif (stat.size === 0) {\n\t\t\t\treturn this.emptyPngDataUri;\n\t\t\t}\n\t\t}\n\n\t\t// Avoid adding cache busting if there is already a query string\n\t\tif (resource.query) {\n\t\t\treturn webviewEditor.webview.asWebviewUri(resource).toString();\n\t\t}\n\t\treturn webviewEditor.webview.asWebviewUri(resource).with({ query: `version=${version}` }).toString();\n\t}\n\n\tprivate extensionResource(...parts: string[]) {\n\t\treturn this.webviewEditor.webview.asWebviewUri(vscode.Uri.joinPath(this.extensionRoot, ...parts));\n\t}\n}\n\n\nexport function registerImagePreviewSupport(context: vscode.ExtensionContext, binarySizeStatusBarEntry: BinarySizeStatusBarEntry): vscode.Disposable {\n\tconst disposables: vscode.Disposable[] = [];\n\n\tconst sizeStatusBarEntry = new SizeStatusBarEntry();\n\tdisposables.push(sizeStatusBarEntry);\n\n\tconst zoomStatusBarEntry = new ZoomStatusBarEntry();\n\tdisposables.push(zoomStatusBarEntry);\n\n\tconst previewManager = new PreviewManager(context.extensionUri, sizeStatusBarEntry, binarySizeStatusBarEntry, zoomStatusBarEntry);\n\n\tdisposables.push(vscode.window.registerCustomEditorProvider(PreviewManager.viewType, previewManager, {\n\t\tsupportsMultipleEditorsPerDocument: true,\n\t}));\n\n\tdisposables.push(vscode.commands.registerCommand('imagePreview.zoomIn', () => {\n\t\tpreviewManager.activePreview?.zoomIn();\n\t}));\n\n\tdisposables.push(vscode.commands.registerCommand('imagePreview.zoomOut', () => {\n\t\tpreviewManager.activePreview?.zoomOut();\n\t}));\n\n\tdisposables.push(vscode.commands.registerCommand('imagePreview.copyImage', () => {\n\t\tpreviewManager.activePreview?.copyImage();\n\t}));\n\n\treturn vscode.Disposable.from(...disposables);\n}\n"
  },
  {
    "path": "extensions/media-preview/src/imagePreview/sizeStatusBarEntry.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { PreviewStatusBarEntry } from '../ownedStatusBarEntry';\n\n\nexport class SizeStatusBarEntry extends PreviewStatusBarEntry {\n\n\tconstructor() {\n\t\tsuper('status.imagePreview.size', vscode.l10n.t(\"Image Size\"), vscode.StatusBarAlignment.Right, 101 /* to the left of editor status (100) */);\n\t}\n\n\tpublic show(owner: unknown, text: string) {\n\t\tthis.showItem(owner, text);\n\t}\n}\n"
  },
  {
    "path": "extensions/media-preview/src/imagePreview/zoomStatusBarEntry.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { PreviewStatusBarEntry as OwnedStatusBarEntry } from '../ownedStatusBarEntry';\n\n\nconst selectZoomLevelCommandId = '_imagePreview.selectZoomLevel';\n\nexport type Scale = number | 'fit';\n\nexport class ZoomStatusBarEntry extends OwnedStatusBarEntry {\n\n\tprivate readonly _onDidChangeScale = this._register(new vscode.EventEmitter<{ scale: Scale }>());\n\tpublic readonly onDidChangeScale = this._onDidChangeScale.event;\n\n\tconstructor() {\n\t\tsuper('status.imagePreview.zoom', vscode.l10n.t(\"Image Zoom\"), vscode.StatusBarAlignment.Right, 102 /* to the left of editor size entry (101) */);\n\n\t\tthis._register(vscode.commands.registerCommand(selectZoomLevelCommandId, async () => {\n\t\t\ttype MyPickItem = vscode.QuickPickItem & { scale: Scale };\n\n\t\t\tconst scales: Scale[] = [10, 5, 2, 1, 0.5, 0.2, 'fit'];\n\t\t\tconst options = scales.map((scale): MyPickItem => ({\n\t\t\t\tlabel: this.zoomLabel(scale),\n\t\t\t\tscale\n\t\t\t}));\n\n\t\t\tconst pick = await vscode.window.showQuickPick(options, {\n\t\t\t\tplaceHolder: vscode.l10n.t(\"Select zoom level\")\n\t\t\t});\n\t\t\tif (pick) {\n\t\t\t\tthis._onDidChangeScale.fire({ scale: pick.scale });\n\t\t\t}\n\t\t}));\n\n\t\tthis.entry.command = selectZoomLevelCommandId;\n\t}\n\n\tpublic show(owner: unknown, scale: Scale) {\n\t\tthis.showItem(owner, this.zoomLabel(scale));\n\t}\n\n\tprivate zoomLabel(scale: Scale): string {\n\t\treturn scale === 'fit'\n\t\t\t? vscode.l10n.t(\"Whole Image\")\n\t\t\t: `${Math.round(scale * 100)}%`;\n\t}\n}\n"
  },
  {
    "path": "extensions/media-preview/src/mediaPreview.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Utils } from 'vscode-uri';\nimport { BinarySizeStatusBarEntry } from './binarySizeStatusBarEntry';\nimport { Disposable } from './util/dispose';\n\nexport function reopenAsText(resource: vscode.Uri, viewColumn: vscode.ViewColumn | undefined) {\n\tvscode.commands.executeCommand('vscode.openWith', resource, 'default', viewColumn);\n}\n\nexport const enum PreviewState {\n\tDisposed,\n\tVisible,\n\tActive,\n}\n\nexport abstract class MediaPreview extends Disposable {\n\n\tprotected previewState = PreviewState.Visible;\n\tprivate _binarySize: number | undefined;\n\n\tconstructor(\n\t\textensionRoot: vscode.Uri,\n\t\tprotected readonly resource: vscode.Uri,\n\t\tprotected readonly webviewEditor: vscode.WebviewPanel,\n\t\tprivate readonly binarySizeStatusBarEntry: BinarySizeStatusBarEntry,\n\t) {\n\t\tsuper();\n\n\t\twebviewEditor.webview.options = {\n\t\t\tenableScripts: true,\n\t\t\tenableForms: false,\n\t\t\tlocalResourceRoots: [\n\t\t\t\tUtils.dirname(resource),\n\t\t\t\textensionRoot,\n\t\t\t]\n\t\t};\n\n\t\tthis._register(webviewEditor.onDidChangeViewState(() => {\n\t\t\tthis.updateState();\n\t\t}));\n\n\t\tthis._register(webviewEditor.onDidDispose(() => {\n\t\t\tthis.previewState = PreviewState.Disposed;\n\t\t\tthis.dispose();\n\t\t}));\n\n\t\tconst watcher = this._register(vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(resource, '*')));\n\t\tthis._register(watcher.onDidChange(e => {\n\t\t\tif (e.toString() === this.resource.toString()) {\n\t\t\t\tthis.updateBinarySize();\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(watcher.onDidDelete(e => {\n\t\t\tif (e.toString() === this.resource.toString()) {\n\t\t\t\tthis.webviewEditor.dispose();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose() {\n\t\tsuper.dispose();\n\t\tthis.binarySizeStatusBarEntry.hide(this);\n\t}\n\n\tprotected updateBinarySize() {\n\t\tvscode.workspace.fs.stat(this.resource).then(({ size }) => {\n\t\t\tthis._binarySize = size;\n\t\t\tthis.updateState();\n\t\t});\n\t}\n\n\tprotected async render() {\n\t\tif (this.previewState === PreviewState.Disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst content = await this.getWebviewContents();\n\t\tif (this.previewState as PreviewState === PreviewState.Disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.webviewEditor.webview.html = content;\n\t}\n\n\tprotected abstract getWebviewContents(): Promise<string>;\n\n\tprotected updateState() {\n\t\tif (this.previewState === PreviewState.Disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.webviewEditor.active) {\n\t\t\tthis.previewState = PreviewState.Active;\n\t\t\tthis.binarySizeStatusBarEntry.show(this, this._binarySize);\n\t\t} else {\n\t\t\tthis.binarySizeStatusBarEntry.hide(this);\n\t\t\tthis.previewState = PreviewState.Visible;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/media-preview/src/ownedStatusBarEntry.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Disposable } from './util/dispose';\n\nexport abstract class PreviewStatusBarEntry extends Disposable {\n\tprivate _showOwner: unknown | undefined;\n\n\tprotected readonly entry: vscode.StatusBarItem;\n\n\tconstructor(id: string, name: string, alignment: vscode.StatusBarAlignment, priority: number) {\n\t\tsuper();\n\t\tthis.entry = this._register(vscode.window.createStatusBarItem(id, alignment, priority));\n\t\tthis.entry.name = name;\n\t}\n\n\tprotected showItem(owner: unknown, text: string) {\n\t\tthis._showOwner = owner;\n\t\tthis.entry.text = text;\n\t\tthis.entry.show();\n\t}\n\n\tpublic hide(owner: unknown) {\n\t\tif (owner === this._showOwner) {\n\t\t\tthis.entry.hide();\n\t\t\tthis._showOwner = undefined;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/media-preview/src/util/dispose.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport function disposeAll(disposables: vscode.Disposable[]) {\n\twhile (disposables.length) {\n\t\tconst item = disposables.pop();\n\t\tif (item) {\n\t\t\titem.dispose();\n\t\t}\n\t}\n}\n\nexport abstract class Disposable {\n\tprivate _isDisposed = false;\n\n\tprotected _disposables: vscode.Disposable[] = [];\n\n\tpublic dispose(): any {\n\t\tif (this._isDisposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDisposed = true;\n\t\tdisposeAll(this._disposables);\n\t}\n\n\tprotected _register<T extends vscode.Disposable>(value: T): T {\n\t\tif (this._isDisposed) {\n\t\t\tvalue.dispose();\n\t\t} else {\n\t\t\tthis._disposables.push(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected get isDisposed() {\n\t\treturn this._isDisposed;\n\t}\n}"
  },
  {
    "path": "extensions/media-preview/src/util/dom.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\n\nexport function escapeAttribute(value: string | vscode.Uri): string {\n\treturn value.toString().replace(/\"/g, '&quot;');\n}\n\nexport function getNonce() {\n\tlet text = '';\n\tconst possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tfor (let i = 0; i < 64; i++) {\n\t\ttext += possible.charAt(Math.floor(Math.random() * possible.length));\n\t}\n\treturn text;\n}\n"
  },
  {
    "path": "extensions/media-preview/src/videoPreview.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { BinarySizeStatusBarEntry } from './binarySizeStatusBarEntry';\nimport { MediaPreview, reopenAsText } from './mediaPreview';\nimport { escapeAttribute, getNonce } from './util/dom';\n\n\nclass VideoPreviewProvider implements vscode.CustomReadonlyEditorProvider {\n\n\tpublic static readonly viewType = 'vscode.videoPreview';\n\n\tconstructor(\n\t\tprivate readonly extensionRoot: vscode.Uri,\n\t\tprivate readonly binarySizeStatusBarEntry: BinarySizeStatusBarEntry,\n\t) { }\n\n\tpublic async openCustomDocument(uri: vscode.Uri) {\n\t\treturn { uri, dispose: () => { } };\n\t}\n\n\tpublic async resolveCustomEditor(document: vscode.CustomDocument, webviewEditor: vscode.WebviewPanel): Promise<void> {\n\t\tnew VideoPreview(this.extensionRoot, document.uri, webviewEditor, this.binarySizeStatusBarEntry);\n\t}\n}\n\n\nclass VideoPreview extends MediaPreview {\n\n\tconstructor(\n\t\tprivate readonly extensionRoot: vscode.Uri,\n\t\tresource: vscode.Uri,\n\t\twebviewEditor: vscode.WebviewPanel,\n\t\tbinarySizeStatusBarEntry: BinarySizeStatusBarEntry,\n\t) {\n\t\tsuper(extensionRoot, resource, webviewEditor, binarySizeStatusBarEntry);\n\n\t\tthis._register(webviewEditor.webview.onDidReceiveMessage(message => {\n\t\t\tswitch (message.type) {\n\t\t\t\tcase 'reopen-as-text': {\n\t\t\t\t\treopenAsText(resource, webviewEditor.viewColumn);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis.updateBinarySize();\n\t\tthis.render();\n\t\tthis.updateState();\n\t}\n\n\tprotected async getWebviewContents(): Promise<string> {\n\t\tconst version = Date.now().toString();\n\t\tconst configurations = vscode.workspace.getConfiguration('mediaPreview.video');\n\t\tconst settings = {\n\t\t\tsrc: await this.getResourcePath(this.webviewEditor, this.resource, version),\n\t\t\tautoplay: configurations.get('autoPlay'),\n\t\t\tloop: configurations.get('loop'),\n\t\t};\n\n\t\tconst nonce = getNonce();\n\n\t\tconst cspSource = this.webviewEditor.webview.cspSource;\n\t\treturn /* html */`<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"UTF-8\">\n\n\t<!-- Disable pinch zooming -->\n\t<meta name=\"viewport\"\n\t\tcontent=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no\">\n\n\t<title>Video Preview</title>\n\n\t<link rel=\"stylesheet\" href=\"${escapeAttribute(this.extensionResource('media', 'videoPreview.css'))}\" type=\"text/css\" media=\"screen\" nonce=\"${nonce}\">\n\n\t<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';\">\n\t<meta id=\"settings\" data-settings=\"${escapeAttribute(JSON.stringify(settings))}\">\n</head>\n<body class=\"loading\" data-vscode-context='{ \"preventDefaultContextMenuItems\": true }'>\n\t<div class=\"loading-indicator\"></div>\n\t<div class=\"loading-error\">\n\t\t<p>${vscode.l10n.t(\"An error occurred while loading the video file.\")}</p>\n\t\t<a href=\"#\" class=\"open-file-link\">${vscode.l10n.t(\"Open file using VS Code's standard text/binary editor?\")}</a>\n\t</div>\n\t<script src=\"${escapeAttribute(this.extensionResource('media', 'videoPreview.js'))}\" nonce=\"${nonce}\"></script>\n</body>\n</html>`;\n\t}\n\n\tprivate async getResourcePath(webviewEditor: vscode.WebviewPanel, resource: vscode.Uri, version: string): Promise<string | null> {\n\t\tif (resource.scheme === 'git') {\n\t\t\tconst stat = await vscode.workspace.fs.stat(resource);\n\t\t\tif (stat.size === 0) {\n\t\t\t\t// The file is stored on git lfs\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Avoid adding cache busting if there is already a query string\n\t\tif (resource.query) {\n\t\t\treturn webviewEditor.webview.asWebviewUri(resource).toString();\n\t\t}\n\t\treturn webviewEditor.webview.asWebviewUri(resource).with({ query: `version=${version}` }).toString();\n\t}\n\n\tprivate extensionResource(...parts: string[]) {\n\t\treturn this.webviewEditor.webview.asWebviewUri(vscode.Uri.joinPath(this.extensionRoot, ...parts));\n\t}\n}\n\nexport function registerVideoPreviewSupport(context: vscode.ExtensionContext, binarySizeStatusBarEntry: BinarySizeStatusBarEntry): vscode.Disposable {\n\tconst provider = new VideoPreviewProvider(context.extensionUri, binarySizeStatusBarEntry);\n\treturn vscode.window.registerCustomEditorProvider(VideoPreviewProvider.viewType, provider, {\n\t\tsupportsMultipleEditorsPerDocument: true,\n\t\twebviewOptions: {\n\t\t\tretainContextWhenHidden: true,\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "extensions/media-preview/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\"\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/merge-conflict/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/merge-conflict/.vscodeignore",
    "content": "src/**\ntsconfig.json\nout/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/merge-conflict/README.md",
    "content": "# Merge Conflict\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [Merge Conflicts in VS Code](https://code.visualstudio.com/docs/editor/versioncontrol#_merge-conflicts) to learn about features of this extension.\n"
  },
  {
    "path": "extensions/merge-conflict/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/mergeConflictMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'mergeConflictMain.js'\n\t}\n});\n"
  },
  {
    "path": "extensions/merge-conflict/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/mergeConflictMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'mergeConflictMain.js'\n\t},\n});\n"
  },
  {
    "path": "extensions/merge-conflict/package.json",
    "content": "{\n  \"name\": \"merge-conflict\",\n  \"publisher\": \"vscode\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"icon\": \"media/icon.png\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"engines\": {\n    \"vscode\": \"^1.5.0\"\n  },\n  \"categories\": [\n    \"Other\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"activationEvents\": [\n    \"onStartupFinished\"\n  ],\n  \"main\": \"./out/mergeConflictMain\",\n  \"browser\": \"./dist/browser/mergeConflictMain\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:merge-conflict\",\n    \"watch\": \"gulp watch-extension:merge-conflict\"\n  },\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.accept.all-current%\",\n        \"original\": \"Accept All Current\",\n        \"command\": \"merge-conflict.accept.all-current\",\n        \"enablement\": \"!isMergeEditor\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.accept.all-incoming%\",\n        \"original\": \"Accept All Incoming\",\n        \"command\": \"merge-conflict.accept.all-incoming\",\n        \"enablement\": \"!isMergeEditor\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.accept.all-both%\",\n        \"original\": \"Accept All Both\",\n        \"command\": \"merge-conflict.accept.all-both\",\n        \"enablement\": \"!isMergeEditor\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.accept.current%\",\n        \"original\": \"Accept Current\",\n        \"command\": \"merge-conflict.accept.current\",\n        \"enablement\": \"!isMergeEditor\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.accept.incoming%\",\n        \"original\": \"Accept Incoming\",\n        \"command\": \"merge-conflict.accept.incoming\",\n        \"enablement\": \"!isMergeEditor\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.accept.selection%\",\n        \"original\": \"Accept Selection\",\n        \"command\": \"merge-conflict.accept.selection\",\n        \"enablement\": \"!isMergeEditor\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.accept.both%\",\n        \"original\": \"Accept Both\",\n        \"command\": \"merge-conflict.accept.both\",\n        \"enablement\": \"!isMergeEditor\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.next%\",\n        \"original\": \"Next Conflict\",\n        \"command\": \"merge-conflict.next\",\n        \"enablement\": \"!isMergeEditor\",\n        \"icon\": \"$(arrow-down)\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.previous%\",\n        \"original\": \"Previous Conflict\",\n        \"command\": \"merge-conflict.previous\",\n        \"enablement\": \"!isMergeEditor\",\n        \"icon\": \"$(arrow-up)\"\n      },\n      {\n        \"category\": \"%command.category%\",\n        \"title\": \"%command.compare%\",\n        \"original\": \"Compare Current Conflict\",\n        \"command\": \"merge-conflict.compare\",\n        \"enablement\": \"!isMergeEditor\"\n      }\n    ],\n    \"menus\": {\n      \"scm/resourceState/context\": [\n        {\n          \"command\": \"merge-conflict.accept.all-current\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"1_modification\"\n        },\n        {\n          \"command\": \"merge-conflict.accept.all-incoming\",\n          \"when\": \"scmProvider == git && scmResourceGroup == merge\",\n          \"group\": \"1_modification\"\n        }\n      ],\n      \"editor/title\": [\n        {\n          \"command\": \"merge-conflict.previous\",\n          \"group\": \"navigation@1\",\n          \"when\": \"!isMergeEditor && mergeConflictsCount && mergeConflictsCount != 0\"\n        },\n        {\n          \"command\": \"merge-conflict.next\",\n          \"group\": \"navigation@2\",\n          \"when\": \"!isMergeEditor && mergeConflictsCount && mergeConflictsCount != 0\"\n        }\n      ]\n    },\n    \"configuration\": {\n      \"title\": \"%config.title%\",\n      \"properties\": {\n        \"merge-conflict.codeLens.enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.codeLensEnabled%\",\n          \"default\": true\n        },\n        \"merge-conflict.decorators.enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.decoratorsEnabled%\",\n          \"default\": true\n        },\n        \"merge-conflict.autoNavigateNextConflict.enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.autoNavigateNextConflictEnabled%\",\n          \"default\": false\n        },\n        \"merge-conflict.diffViewPosition\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"Current\",\n            \"Beside\",\n            \"Below\"\n          ],\n          \"description\": \"%config.diffViewPosition%\",\n          \"enumDescriptions\": [\n            \"%config.diffViewPosition.current%\",\n            \"%config.diffViewPosition.beside%\",\n            \"%config.diffViewPosition.below%\"\n          ],\n          \"default\": \"Current\"\n        }\n      }\n    }\n  },\n  \"dependencies\": {\n    \"@vscode/extension-telemetry\": \"^0.9.8\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/merge-conflict/package.nls.json",
    "content": "{\n\t\"displayName\": \"Merge Conflict\",\n\t\"description\": \"Highlighting and commands for inline merge conflicts.\",\n\t\"command.category\": \"Merge Conflict\",\n\t\"command.accept.all-current\": \"Accept All Current\",\n\t\"command.accept.all-incoming\": \"Accept All Incoming\",\n\t\"command.accept.all-both\": \"Accept All Both\",\n\t\"command.accept.current\": \"Accept Current\",\n\t\"command.accept.incoming\": \"Accept Incoming\",\n\t\"command.accept.selection\": \"Accept Selection\",\n\t\"command.accept.both\": \"Accept Both\",\n\t\"command.next\": \"Next Conflict\",\n\t\"command.previous\": \"Previous Conflict\",\n\t\"command.compare\": \"Compare Current Conflict\",\n\t\"config.title\": \"Merge Conflict\",\n\t\"config.autoNavigateNextConflictEnabled\": \"Whether to automatically navigate to the next merge conflict after resolving a merge conflict.\",\n\t\"config.codeLensEnabled\": \"Create a CodeLens for merge conflict blocks within editor.\",\n\t\"config.decoratorsEnabled\": \"Create decorators for merge conflict blocks within editor.\",\n\t\"config.diffViewPosition\": \"Controls where the diff view should be opened when comparing changes in merge conflicts.\",\n\t\"config.diffViewPosition.current\": \"Open the diff view in the current editor group.\",\n\t\"config.diffViewPosition.beside\": \"Open the diff view next to the current editor group.\",\n\t\"config.diffViewPosition.below\": \"Open the diff view below the current editor group.\"\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/codelensProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as interfaces from './interfaces';\n\nexport default class MergeConflictCodeLensProvider implements vscode.CodeLensProvider, vscode.Disposable {\n\tprivate codeLensRegistrationHandle?: vscode.Disposable | null;\n\tprivate config?: interfaces.IExtensionConfiguration;\n\tprivate tracker: interfaces.IDocumentMergeConflictTracker;\n\n\tconstructor(trackerService: interfaces.IDocumentMergeConflictTrackerService) {\n\t\tthis.tracker = trackerService.createTracker('codelens');\n\t}\n\n\tbegin(config: interfaces.IExtensionConfiguration) {\n\t\tthis.config = config;\n\n\t\tif (this.config.enableCodeLens) {\n\t\t\tthis.registerCodeLensProvider();\n\t\t}\n\t}\n\n\tconfigurationUpdated(updatedConfig: interfaces.IExtensionConfiguration) {\n\n\t\tif (updatedConfig.enableCodeLens === false && this.codeLensRegistrationHandle) {\n\t\t\tthis.codeLensRegistrationHandle.dispose();\n\t\t\tthis.codeLensRegistrationHandle = null;\n\t\t}\n\t\telse if (updatedConfig.enableCodeLens === true && !this.codeLensRegistrationHandle) {\n\t\t\tthis.registerCodeLensProvider();\n\t\t}\n\n\t\tthis.config = updatedConfig;\n\t}\n\n\n\tdispose() {\n\t\tif (this.codeLensRegistrationHandle) {\n\t\t\tthis.codeLensRegistrationHandle.dispose();\n\t\t\tthis.codeLensRegistrationHandle = null;\n\t\t}\n\t}\n\n\tasync provideCodeLenses(document: vscode.TextDocument, _token: vscode.CancellationToken): Promise<vscode.CodeLens[] | null> {\n\n\t\tif (!this.config || !this.config.enableCodeLens) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst conflicts = await this.tracker.getConflicts(document);\n\t\tconst conflictsCount = conflicts?.length ?? 0;\n\t\tvscode.commands.executeCommand('setContext', 'mergeConflictsCount', conflictsCount);\n\n\t\tif (!conflictsCount) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst items: vscode.CodeLens[] = [];\n\n\t\tconflicts.forEach(conflict => {\n\t\t\tconst acceptCurrentCommand: vscode.Command = {\n\t\t\t\tcommand: 'merge-conflict.accept.current',\n\t\t\t\ttitle: vscode.l10n.t(\"Accept Current Change\"),\n\t\t\t\targuments: ['known-conflict', conflict]\n\t\t\t};\n\n\t\t\tconst acceptIncomingCommand: vscode.Command = {\n\t\t\t\tcommand: 'merge-conflict.accept.incoming',\n\t\t\t\ttitle: vscode.l10n.t(\"Accept Incoming Change\"),\n\t\t\t\targuments: ['known-conflict', conflict]\n\t\t\t};\n\n\t\t\tconst acceptBothCommand: vscode.Command = {\n\t\t\t\tcommand: 'merge-conflict.accept.both',\n\t\t\t\ttitle: vscode.l10n.t(\"Accept Both Changes\"),\n\t\t\t\targuments: ['known-conflict', conflict]\n\t\t\t};\n\n\t\t\tconst diffCommand: vscode.Command = {\n\t\t\t\tcommand: 'merge-conflict.compare',\n\t\t\t\ttitle: vscode.l10n.t(\"Compare Changes\"),\n\t\t\t\targuments: [conflict]\n\t\t\t};\n\n\t\t\tconst range = document.lineAt(conflict.range.start.line).range;\n\t\t\titems.push(\n\t\t\t\tnew vscode.CodeLens(range, acceptCurrentCommand),\n\t\t\t\tnew vscode.CodeLens(range, acceptIncomingCommand),\n\t\t\t\tnew vscode.CodeLens(range, acceptBothCommand),\n\t\t\t\tnew vscode.CodeLens(range, diffCommand)\n\t\t\t);\n\t\t});\n\n\t\treturn items;\n\t}\n\n\tprivate registerCodeLensProvider() {\n\t\tthis.codeLensRegistrationHandle = vscode.languages.registerCodeLensProvider([\n\t\t\t{ scheme: 'file' },\n\t\t\t{ scheme: 'vscode-vfs' },\n\t\t\t{ scheme: 'untitled' },\n\t\t\t{ scheme: 'vscode-userdata' },\n\t\t], this);\n\t}\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/commandHandler.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport * as interfaces from './interfaces';\nimport ContentProvider from './contentProvider';\n\ninterface IDocumentMergeConflictNavigationResults {\n\tcanNavigate: boolean;\n\tconflict?: interfaces.IDocumentMergeConflict;\n}\n\nenum NavigationDirection {\n\tForwards,\n\tBackwards\n}\n\nexport default class CommandHandler implements vscode.Disposable {\n\n\tprivate disposables: vscode.Disposable[] = [];\n\tprivate tracker: interfaces.IDocumentMergeConflictTracker;\n\n\tconstructor(trackerService: interfaces.IDocumentMergeConflictTrackerService) {\n\t\tthis.tracker = trackerService.createTracker('commands');\n\t}\n\n\tbegin() {\n\t\tthis.disposables.push(\n\t\t\tthis.registerTextEditorCommand('merge-conflict.accept.current', this.acceptCurrent),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.accept.incoming', this.acceptIncoming),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.accept.selection', this.acceptSelection),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.accept.both', this.acceptBoth),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.accept.all-current', this.acceptAllCurrent, this.acceptAllCurrentResources),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.accept.all-incoming', this.acceptAllIncoming, this.acceptAllIncomingResources),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.accept.all-both', this.acceptAllBoth),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.next', this.navigateNext),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.previous', this.navigatePrevious),\n\t\t\tthis.registerTextEditorCommand('merge-conflict.compare', this.compare)\n\t\t);\n\t}\n\n\tprivate registerTextEditorCommand(command: string, cb: (editor: vscode.TextEditor, ...args: any[]) => Promise<void>, resourceCB?: (uris: vscode.Uri[]) => Promise<void>) {\n\t\treturn vscode.commands.registerCommand(command, (...args) => {\n\t\t\tif (resourceCB && args.length && args.every(arg => arg && arg.resourceUri)) {\n\t\t\t\treturn resourceCB.call(this, args.map(arg => arg.resourceUri));\n\t\t\t}\n\t\t\tconst editor = vscode.window.activeTextEditor;\n\t\t\treturn editor && cb.call(this, editor, ...args);\n\t\t});\n\t}\n\n\tacceptCurrent(editor: vscode.TextEditor, ...args: any[]): Promise<void> {\n\t\treturn this.accept(interfaces.CommitType.Current, editor, ...args);\n\t}\n\n\tacceptIncoming(editor: vscode.TextEditor, ...args: any[]): Promise<void> {\n\t\treturn this.accept(interfaces.CommitType.Incoming, editor, ...args);\n\t}\n\n\tacceptBoth(editor: vscode.TextEditor, ...args: any[]): Promise<void> {\n\t\treturn this.accept(interfaces.CommitType.Both, editor, ...args);\n\t}\n\n\tacceptAllCurrent(editor: vscode.TextEditor): Promise<void> {\n\t\treturn this.acceptAll(interfaces.CommitType.Current, editor);\n\t}\n\n\tacceptAllIncoming(editor: vscode.TextEditor): Promise<void> {\n\t\treturn this.acceptAll(interfaces.CommitType.Incoming, editor);\n\t}\n\n\tacceptAllCurrentResources(resources: vscode.Uri[]): Promise<void> {\n\t\treturn this.acceptAllResources(interfaces.CommitType.Current, resources);\n\t}\n\n\tacceptAllIncomingResources(resources: vscode.Uri[]): Promise<void> {\n\t\treturn this.acceptAllResources(interfaces.CommitType.Incoming, resources);\n\t}\n\n\tacceptAllBoth(editor: vscode.TextEditor): Promise<void> {\n\t\treturn this.acceptAll(interfaces.CommitType.Both, editor);\n\t}\n\n\tasync compare(editor: vscode.TextEditor, conflict: interfaces.IDocumentMergeConflict | null) {\n\n\t\t// No conflict, command executed from command palette\n\t\tif (!conflict) {\n\t\t\tconflict = await this.findConflictContainingSelection(editor);\n\n\t\t\t// Still failed to find conflict, warn the user and exit\n\t\t\tif (!conflict) {\n\t\t\t\tvscode.window.showWarningMessage(vscode.l10n.t(\"Editor cursor is not within a merge conflict\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst conflicts = await this.tracker.getConflicts(editor.document);\n\n\t\t// Still failed to find conflict, warn the user and exit\n\t\tif (!conflicts) {\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t(\"Editor cursor is not within a merge conflict\"));\n\t\t\treturn;\n\t\t}\n\n\t\tconst scheme = editor.document.uri.scheme;\n\t\tlet range = conflict.current.content;\n\t\tconst leftRanges = conflicts.map(conflict => [conflict.current.content, conflict.range]);\n\t\tconst rightRanges = conflicts.map(conflict => [conflict.incoming.content, conflict.range]);\n\n\t\tconst leftUri = editor.document.uri.with({\n\t\t\tscheme: ContentProvider.scheme,\n\t\t\tquery: JSON.stringify({ scheme, range: range, ranges: leftRanges })\n\t\t});\n\n\n\t\trange = conflict.incoming.content;\n\t\tconst rightUri = leftUri.with({ query: JSON.stringify({ scheme, ranges: rightRanges }) });\n\n\t\tlet mergeConflictLineOffsets = 0;\n\t\tfor (const nextconflict of conflicts) {\n\t\t\tif (nextconflict.range.isEqual(conflict.range)) {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tmergeConflictLineOffsets += (nextconflict.range.end.line - nextconflict.range.start.line) - (nextconflict.incoming.content.end.line - nextconflict.incoming.content.start.line);\n\t\t\t}\n\t\t}\n\t\tconst selection = new vscode.Range(\n\t\t\tconflict.range.start.line - mergeConflictLineOffsets, conflict.range.start.character,\n\t\t\tconflict.range.start.line - mergeConflictLineOffsets, conflict.range.start.character\n\t\t);\n\n\t\tconst docPath = editor.document.uri.path;\n\t\tconst fileName = docPath.substring(docPath.lastIndexOf('/') + 1); // avoid NodeJS path to keep browser webpack small\n\t\tconst title = vscode.l10n.t(\"{0}: Current Changes ↔ Incoming Changes\", fileName);\n\t\tconst mergeConflictConfig = vscode.workspace.getConfiguration('merge-conflict');\n\t\tconst openToTheSide = mergeConflictConfig.get<string>('diffViewPosition');\n\t\tconst opts: vscode.TextDocumentShowOptions = {\n\t\t\tviewColumn: openToTheSide === 'Beside' ? vscode.ViewColumn.Beside : vscode.ViewColumn.Active,\n\t\t\tselection\n\t\t};\n\n\t\tif (openToTheSide === 'Below') {\n\t\t\tawait vscode.commands.executeCommand('workbench.action.newGroupBelow');\n\t\t}\n\n\t\tawait vscode.commands.executeCommand('vscode.diff', leftUri, rightUri, title, opts);\n\t}\n\n\tnavigateNext(editor: vscode.TextEditor): Promise<void> {\n\t\treturn this.navigate(editor, NavigationDirection.Forwards);\n\t}\n\n\tnavigatePrevious(editor: vscode.TextEditor): Promise<void> {\n\t\treturn this.navigate(editor, NavigationDirection.Backwards);\n\t}\n\n\tasync acceptSelection(editor: vscode.TextEditor): Promise<void> {\n\t\tconst conflict = await this.findConflictContainingSelection(editor);\n\n\t\tif (!conflict) {\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t(\"Editor cursor is not within a merge conflict\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet typeToAccept: interfaces.CommitType;\n\t\tlet tokenAfterCurrentBlock: vscode.Range = conflict.splitter;\n\n\t\tif (conflict.commonAncestors.length > 0) {\n\t\t\ttokenAfterCurrentBlock = conflict.commonAncestors[0].header;\n\t\t}\n\n\t\t// Figure out if the cursor is in current or incoming, we do this by seeing if\n\t\t// the active position is before or after the range of the splitter or common\n\t\t// ancestors marker. We can use this trick as the previous check in\n\t\t// findConflictByActiveSelection will ensure it's within the conflict range, so\n\t\t// we don't falsely identify \"current\" or \"incoming\" if outside of a conflict range.\n\t\tif (editor.selection.active.isBefore(tokenAfterCurrentBlock.start)) {\n\t\t\ttypeToAccept = interfaces.CommitType.Current;\n\t\t}\n\t\telse if (editor.selection.active.isAfter(conflict.splitter.end)) {\n\t\t\ttypeToAccept = interfaces.CommitType.Incoming;\n\t\t}\n\t\telse if (editor.selection.active.isBefore(conflict.splitter.start)) {\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t('Editor cursor is within the common ancestors block, please move it to either the \"current\" or \"incoming\" block'));\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t('Editor cursor is within the merge conflict splitter, please move it to either the \"current\" or \"incoming\" block'));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.tracker.forget(editor.document);\n\t\tconflict.commitEdit(typeToAccept, editor);\n\t}\n\n\tdispose() {\n\t\tthis.disposables.forEach(disposable => disposable.dispose());\n\t\tthis.disposables = [];\n\t}\n\n\tprivate async navigate(editor: vscode.TextEditor, direction: NavigationDirection): Promise<void> {\n\t\tconst navigationResult = await this.findConflictForNavigation(editor, direction);\n\n\t\tif (!navigationResult) {\n\t\t\t// Check for autoNavigateNextConflict, if it's enabled(which indicating no conflict remain), then do not show warning\n\t\t\tconst mergeConflictConfig = vscode.workspace.getConfiguration('merge-conflict');\n\t\t\tif (mergeConflictConfig.get<boolean>('autoNavigateNextConflict.enabled')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t(\"No merge conflicts found in this file\"));\n\t\t\treturn;\n\t\t}\n\t\telse if (!navigationResult.canNavigate) {\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t(\"No other merge conflicts within this file\"));\n\t\t\treturn;\n\t\t}\n\t\telse if (!navigationResult.conflict) {\n\t\t\t// TODO: Show error message?\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the selection to the first line of the conflict\n\t\teditor.selection = new vscode.Selection(navigationResult.conflict.range.start, navigationResult.conflict.range.start);\n\t\teditor.revealRange(navigationResult.conflict.range, vscode.TextEditorRevealType.Default);\n\t}\n\n\tprivate async accept(type: interfaces.CommitType, editor: vscode.TextEditor, ...args: any[]): Promise<void> {\n\n\t\tlet conflict: interfaces.IDocumentMergeConflict | null;\n\n\t\t// If launched with known context, take the conflict from that\n\t\tif (args[0] === 'known-conflict') {\n\t\t\tconflict = args[1];\n\t\t}\n\t\telse {\n\t\t\t// Attempt to find a conflict that matches the current cursor position\n\t\t\tconflict = await this.findConflictContainingSelection(editor);\n\t\t}\n\n\t\tif (!conflict) {\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t(\"Editor cursor is not within a merge conflict\"));\n\t\t\treturn;\n\t\t}\n\n\t\t// Tracker can forget as we know we are going to do an edit\n\t\tthis.tracker.forget(editor.document);\n\t\tconflict.commitEdit(type, editor);\n\n\t\t// navigate to the next merge conflict\n\t\tconst mergeConflictConfig = vscode.workspace.getConfiguration('merge-conflict');\n\t\tif (mergeConflictConfig.get<boolean>('autoNavigateNextConflict.enabled')) {\n\t\t\tthis.navigateNext(editor);\n\t\t}\n\n\t}\n\n\tprivate async acceptAll(type: interfaces.CommitType, editor: vscode.TextEditor): Promise<void> {\n\t\tconst conflicts = await this.tracker.getConflicts(editor.document);\n\n\t\tif (!conflicts || conflicts.length === 0) {\n\t\t\tvscode.window.showWarningMessage(vscode.l10n.t(\"No merge conflicts found in this file\"));\n\t\t\treturn;\n\t\t}\n\n\t\t// For get the current state of the document, as we know we are doing to do a large edit\n\t\tthis.tracker.forget(editor.document);\n\n\t\t// Apply all changes as one edit\n\t\tawait editor.edit((edit) => conflicts.forEach(conflict => {\n\t\t\tconflict.applyEdit(type, editor.document, edit);\n\t\t}));\n\t}\n\n\tprivate async acceptAllResources(type: interfaces.CommitType, resources: vscode.Uri[]): Promise<void> {\n\t\tconst documents = await Promise.all(resources.map(resource => vscode.workspace.openTextDocument(resource)));\n\t\tconst edit = new vscode.WorkspaceEdit();\n\t\tfor (const document of documents) {\n\t\t\tconst conflicts = await this.tracker.getConflicts(document);\n\n\t\t\tif (!conflicts || conflicts.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// For get the current state of the document, as we know we are doing to do a large edit\n\t\t\tthis.tracker.forget(document);\n\n\t\t\t// Apply all changes as one edit\n\t\t\tconflicts.forEach(conflict => {\n\t\t\t\tconflict.applyEdit(type, document, { replace: (range, newText) => edit.replace(document.uri, range, newText) });\n\t\t\t});\n\t\t}\n\t\tvscode.workspace.applyEdit(edit);\n\t}\n\n\tprivate async findConflictContainingSelection(editor: vscode.TextEditor, conflicts?: interfaces.IDocumentMergeConflict[]): Promise<interfaces.IDocumentMergeConflict | null> {\n\n\t\tif (!conflicts) {\n\t\t\tconflicts = await this.tracker.getConflicts(editor.document);\n\t\t}\n\n\t\tif (!conflicts || conflicts.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (const conflict of conflicts) {\n\t\t\tif (conflict.range.contains(editor.selection.active)) {\n\t\t\t\treturn conflict;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate async findConflictForNavigation(editor: vscode.TextEditor, direction: NavigationDirection, conflicts?: interfaces.IDocumentMergeConflict[]): Promise<IDocumentMergeConflictNavigationResults | null> {\n\t\tif (!conflicts) {\n\t\t\tconflicts = await this.tracker.getConflicts(editor.document);\n\t\t}\n\n\t\tif (!conflicts || conflicts.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst selection = editor.selection.active;\n\t\tif (conflicts.length === 1) {\n\t\t\tif (conflicts[0].range.contains(selection)) {\n\t\t\t\treturn {\n\t\t\t\t\tcanNavigate: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcanNavigate: true,\n\t\t\t\tconflict: conflicts[0]\n\t\t\t};\n\t\t}\n\n\t\tlet predicate: (_conflict: any) => boolean;\n\t\tlet fallback: () => interfaces.IDocumentMergeConflict;\n\t\tlet scanOrder: interfaces.IDocumentMergeConflict[];\n\n\t\tif (direction === NavigationDirection.Forwards) {\n\t\t\tpredicate = (conflict) => selection.isBefore(conflict.range.start);\n\t\t\tfallback = () => conflicts![0];\n\t\t\tscanOrder = conflicts;\n\t\t} else if (direction === NavigationDirection.Backwards) {\n\t\t\tpredicate = (conflict) => selection.isAfter(conflict.range.start);\n\t\t\tfallback = () => conflicts![conflicts!.length - 1];\n\t\t\tscanOrder = conflicts.slice().reverse();\n\t\t} else {\n\t\t\tthrow new Error(`Unsupported direction ${direction}`);\n\t\t}\n\n\t\tfor (const conflict of scanOrder) {\n\t\t\tif (predicate(conflict) && !conflict.range.contains(selection)) {\n\t\t\t\treturn {\n\t\t\t\t\tcanNavigate: true,\n\t\t\t\t\tconflict: conflict\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Went all the way to the end, return the head\n\t\treturn {\n\t\t\tcanNavigate: true,\n\t\t\tconflict: fallback()\n\t\t};\n\t}\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/contentProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport default class MergeConflictContentProvider implements vscode.TextDocumentContentProvider, vscode.Disposable {\n\n\tstatic scheme = 'merge-conflict.conflict-diff';\n\n\tconstructor(private context: vscode.ExtensionContext) {\n\t}\n\n\tbegin() {\n\t\tthis.context.subscriptions.push(\n\t\t\tvscode.workspace.registerTextDocumentContentProvider(MergeConflictContentProvider.scheme, this)\n\t\t);\n\t}\n\n\tdispose() {\n\t}\n\n\tasync provideTextDocumentContent(uri: vscode.Uri): Promise<string | null> {\n\t\ttry {\n\t\t\tconst { scheme, ranges } = JSON.parse(uri.query) as { scheme: string; ranges: [{ line: number; character: number }[], { line: number; character: number }[]][] };\n\n\t\t\t// complete diff\n\t\t\tconst document = await vscode.workspace.openTextDocument(uri.with({ scheme, query: '' }));\n\n\t\t\tlet text = '';\n\t\t\tlet lastPosition = new vscode.Position(0, 0);\n\n\t\t\tranges.forEach(rangeObj => {\n\t\t\t\tconst [conflictRange, fullRange] = rangeObj;\n\t\t\t\tconst [start, end] = conflictRange;\n\t\t\t\tconst [fullStart, fullEnd] = fullRange;\n\n\t\t\t\ttext += document.getText(new vscode.Range(lastPosition.line, lastPosition.character, fullStart.line, fullStart.character));\n\t\t\t\ttext += document.getText(new vscode.Range(start.line, start.character, end.line, end.character));\n\t\t\t\tlastPosition = new vscode.Position(fullEnd.line, fullEnd.character);\n\t\t\t});\n\n\t\t\tconst documentEnd = document.lineAt(document.lineCount - 1).range.end;\n\t\t\ttext += document.getText(new vscode.Range(lastPosition.line, lastPosition.character, documentEnd.line, documentEnd.character));\n\n\t\t\treturn text;\n\t\t}\n\t\tcatch (ex) {\n\t\t\tawait vscode.window.showErrorMessage('Unable to show comparison');\n\t\t\treturn null;\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/merge-conflict/src/delayer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface ITask<T> {\n\t(): T;\n}\n\nexport class Delayer<T> {\n\n\tpublic defaultDelay: number;\n\tprivate timeout: any; // Timer\n\tprivate completionPromise: Promise<T> | null;\n\tprivate onSuccess: ((value: T | PromiseLike<T> | undefined) => void) | null;\n\tprivate task: ITask<T> | null;\n\n\tconstructor(defaultDelay: number) {\n\t\tthis.defaultDelay = defaultDelay;\n\t\tthis.timeout = null;\n\t\tthis.completionPromise = null;\n\t\tthis.onSuccess = null;\n\t\tthis.task = null;\n\t}\n\n\tpublic trigger(task: ITask<T>, delay: number = this.defaultDelay): Promise<T> {\n\t\tthis.task = task;\n\t\tif (delay >= 0) {\n\t\t\tthis.cancelTimeout();\n\t\t}\n\n\t\tif (!this.completionPromise) {\n\t\t\tthis.completionPromise = new Promise<T | undefined>((resolve) => {\n\t\t\t\tthis.onSuccess = resolve;\n\t\t\t}).then(() => {\n\t\t\t\tthis.completionPromise = null;\n\t\t\t\tthis.onSuccess = null;\n\t\t\t\tconst result = this.task!();\n\t\t\t\tthis.task = null;\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\n\t\tif (delay >= 0 || this.timeout === null) {\n\t\t\tthis.timeout = setTimeout(() => {\n\t\t\t\tthis.timeout = null;\n\t\t\t\tthis.onSuccess!(undefined);\n\t\t\t}, delay >= 0 ? delay : this.defaultDelay);\n\t\t}\n\n\t\treturn this.completionPromise;\n\t}\n\n\tpublic forceDelivery(): Promise<T> | null {\n\t\tif (!this.completionPromise) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.cancelTimeout();\n\t\tconst result = this.completionPromise;\n\t\tthis.onSuccess!(undefined);\n\t\treturn result;\n\t}\n\n\tpublic isTriggered(): boolean {\n\t\treturn this.timeout !== null;\n\t}\n\n\tpublic cancel(): void {\n\t\tthis.cancelTimeout();\n\t\tthis.completionPromise = null;\n\t}\n\n\tprivate cancelTimeout(): void {\n\t\tif (this.timeout !== null) {\n\t\t\tclearTimeout(this.timeout);\n\t\t\tthis.timeout = null;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/documentMergeConflict.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as interfaces from './interfaces';\nimport * as vscode from 'vscode';\nimport type TelemetryReporter from '@vscode/extension-telemetry';\n\nexport class DocumentMergeConflict implements interfaces.IDocumentMergeConflict {\n\n\tpublic range: vscode.Range;\n\tpublic current: interfaces.IMergeRegion;\n\tpublic incoming: interfaces.IMergeRegion;\n\tpublic commonAncestors: interfaces.IMergeRegion[];\n\tpublic splitter: vscode.Range;\n\tprivate applied = false;\n\n\tconstructor(descriptor: interfaces.IDocumentMergeConflictDescriptor, private readonly telemetryReporter: TelemetryReporter) {\n\t\tthis.range = descriptor.range;\n\t\tthis.current = descriptor.current;\n\t\tthis.incoming = descriptor.incoming;\n\t\tthis.commonAncestors = descriptor.commonAncestors;\n\t\tthis.splitter = descriptor.splitter;\n\t}\n\n\tpublic commitEdit(type: interfaces.CommitType, editor: vscode.TextEditor, edit?: vscode.TextEditorEdit): Thenable<boolean> {\n\t\tfunction commitTypeToString(type: interfaces.CommitType): string {\n\t\t\tswitch (type) {\n\t\t\t\tcase interfaces.CommitType.Current:\n\t\t\t\t\treturn 'current';\n\t\t\t\tcase interfaces.CommitType.Incoming:\n\t\t\t\t\treturn 'incoming';\n\t\t\t\tcase interfaces.CommitType.Both:\n\t\t\t\t\treturn 'both';\n\t\t\t}\n\t\t}\n\n\t\t/* __GDPR__\n\t\t\t\"mergeMarkers.accept\" : {\n\t\t\t\t\"owner\": \"hediet\",\n\t\t\t\t\"comment\": \"Used to understand how the inline merge editor experience is used.\",\n\t\t\t\t\"resolution\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Indicates how the merge conflict was resolved by the user\" }\n\t\t\t}\n\t\t*/\n\t\tthis.telemetryReporter.sendTelemetryEvent('mergeMarkers.accept', { resolution: commitTypeToString(type) });\n\n\t\tif (edit) {\n\n\t\t\tthis.applyEdit(type, editor.document, edit);\n\t\t\treturn Promise.resolve(true);\n\t\t}\n\n\t\treturn editor.edit((edit) => this.applyEdit(type, editor.document, edit));\n\t}\n\n\tpublic applyEdit(type: interfaces.CommitType, document: vscode.TextDocument, edit: { replace(range: vscode.Range, newText: string): void }): void {\n\t\tif (this.applied) {\n\t\t\treturn;\n\t\t}\n\t\tthis.applied = true;\n\n\t\t// Each conflict is a set of ranges as follows, note placements or newlines\n\t\t// which may not in spans\n\t\t// [ Conflict Range             -- (Entire content below)\n\t\t//   [ Current Header ]\\n       -- >>>>> Header\n\t\t//   [ Current Content ]        -- (content)\n\t\t//   [ Splitter ]\\n             -- =====\n\t\t//   [ Incoming Content ]       -- (content)\n\t\t//   [ Incoming Header ]\\n      -- <<<<< Incoming\n\t\t// ]\n\t\tif (type === interfaces.CommitType.Current) {\n\t\t\t// Replace [ Conflict Range ] with [ Current Content ]\n\t\t\tconst content = document.getText(this.current.content);\n\t\t\tthis.replaceRangeWithContent(content, edit);\n\t\t}\n\t\telse if (type === interfaces.CommitType.Incoming) {\n\t\t\tconst content = document.getText(this.incoming.content);\n\t\t\tthis.replaceRangeWithContent(content, edit);\n\t\t}\n\t\telse if (type === interfaces.CommitType.Both) {\n\t\t\t// Replace [ Conflict Range ] with [ Current Content ] + \\n + [ Incoming Content ]\n\n\t\t\tconst currentContent = document.getText(this.current.content);\n\t\t\tconst incomingContent = document.getText(this.incoming.content);\n\n\t\t\tedit.replace(this.range, currentContent.concat(incomingContent));\n\t\t}\n\t}\n\n\tprivate replaceRangeWithContent(content: string, edit: { replace(range: vscode.Range, newText: string): void }) {\n\t\tif (this.isNewlineOnly(content)) {\n\t\t\tedit.replace(this.range, '');\n\t\t\treturn;\n\t\t}\n\n\t\t// Replace [ Conflict Range ] with [ Current Content ]\n\t\tedit.replace(this.range, content);\n\t}\n\n\tprivate isNewlineOnly(text: string) {\n\t\treturn text === '\\n' || text === '\\r\\n';\n\t}\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/documentTracker.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { MergeConflictParser } from './mergeConflictParser';\nimport * as interfaces from './interfaces';\nimport { Delayer } from './delayer';\nimport TelemetryReporter from '@vscode/extension-telemetry';\n\nclass ScanTask {\n\tpublic origins: Set<string> = new Set<string>();\n\tpublic delayTask: Delayer<interfaces.IDocumentMergeConflict[]>;\n\n\tconstructor(delayTime: number, initialOrigin: string) {\n\t\tthis.origins.add(initialOrigin);\n\t\tthis.delayTask = new Delayer<interfaces.IDocumentMergeConflict[]>(delayTime);\n\t}\n\n\tpublic addOrigin(name: string): void {\n\t\tthis.origins.add(name);\n\t}\n\n\tpublic hasOrigin(name: string): boolean {\n\t\treturn this.origins.has(name);\n\t}\n}\n\nclass OriginDocumentMergeConflictTracker implements interfaces.IDocumentMergeConflictTracker {\n\tconstructor(private parent: DocumentMergeConflictTracker, private origin: string) {\n\t}\n\n\tgetConflicts(document: vscode.TextDocument): PromiseLike<interfaces.IDocumentMergeConflict[]> {\n\t\treturn this.parent.getConflicts(document, this.origin);\n\t}\n\n\tisPending(document: vscode.TextDocument): boolean {\n\t\treturn this.parent.isPending(document, this.origin);\n\t}\n\n\tforget(document: vscode.TextDocument) {\n\t\tthis.parent.forget(document);\n\t}\n}\n\nexport default class DocumentMergeConflictTracker implements vscode.Disposable, interfaces.IDocumentMergeConflictTrackerService {\n\tprivate cache: Map<string, ScanTask> = new Map();\n\tprivate delayExpireTime: number = 0;\n\n\tconstructor(private readonly telemetryReporter: TelemetryReporter) { }\n\n\tgetConflicts(document: vscode.TextDocument, origin: string): PromiseLike<interfaces.IDocumentMergeConflict[]> {\n\t\t// Attempt from cache\n\n\t\tconst key = this.getCacheKey(document);\n\n\t\tif (!key) {\n\t\t\t// Document doesn't have a uri, can't cache it, so return\n\t\t\treturn Promise.resolve(this.getConflictsOrEmpty(document, [origin]));\n\t\t}\n\n\t\tlet cacheItem = this.cache.get(key);\n\t\tif (!cacheItem) {\n\t\t\tcacheItem = new ScanTask(this.delayExpireTime, origin);\n\t\t\tthis.cache.set(key, cacheItem);\n\t\t}\n\t\telse {\n\t\t\tcacheItem.addOrigin(origin);\n\t\t}\n\n\t\treturn cacheItem.delayTask.trigger(() => {\n\t\t\tconst conflicts = this.getConflictsOrEmpty(document, Array.from(cacheItem!.origins));\n\n\t\t\tthis.cache?.delete(key!);\n\n\t\t\treturn conflicts;\n\t\t});\n\t}\n\n\tisPending(document: vscode.TextDocument, origin: string): boolean {\n\t\tif (!document) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = this.getCacheKey(document);\n\t\tif (!key) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst task = this.cache.get(key);\n\t\tif (!task) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn task.hasOrigin(origin);\n\t}\n\n\tcreateTracker(origin: string): interfaces.IDocumentMergeConflictTracker {\n\t\treturn new OriginDocumentMergeConflictTracker(this, origin);\n\t}\n\n\tforget(document: vscode.TextDocument) {\n\t\tconst key = this.getCacheKey(document);\n\n\t\tif (key) {\n\t\t\tthis.cache.delete(key);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.cache.clear();\n\t}\n\n\tprivate readonly seenDocumentsWithConflicts = new Set<string>();\n\n\tprivate getConflictsOrEmpty(document: vscode.TextDocument, _origins: string[]): interfaces.IDocumentMergeConflict[] {\n\t\tconst containsConflict = MergeConflictParser.containsConflict(document);\n\n\t\tif (!containsConflict) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst conflicts = MergeConflictParser.scanDocument(document, this.telemetryReporter);\n\n\t\tconst key = document.uri.toString();\n\t\t// Don't report telemetry for the same document twice. This is an approximation, but good enough.\n\t\t// Otherwise redo/undo could trigger this event multiple times.\n\t\tif (!this.seenDocumentsWithConflicts.has(key)) {\n\t\t\tthis.seenDocumentsWithConflicts.add(key);\n\n\t\t\t/* __GDPR__\n\t\t\t\t\"mergeMarkers.documentWithConflictMarkersOpened\" : {\n\t\t\t\t\t\"owner\": \"hediet\",\n\t\t\t\t\t\"comment\": \"Used to determine how many documents with conflicts are opened.\",\n\t\t\t\t\t\"conflictCount\": { \"classification\": \"SystemMetaData\", \"purpose\": \"FeatureInsight\", \"isMeasurement\": true, \"comment\": \"Total number of conflict counts\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis.telemetryReporter.sendTelemetryEvent('mergeMarkers.documentWithConflictMarkersOpened', {}, {\n\t\t\t\tconflictCount: conflicts.length,\n\t\t\t});\n\t\t}\n\n\t\treturn conflicts;\n\t}\n\n\tprivate getCacheKey(document: vscode.TextDocument): string | null {\n\t\tif (document.uri) {\n\t\t\treturn document.uri.toString();\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n"
  },
  {
    "path": "extensions/merge-conflict/src/interfaces.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\n\nexport interface IMergeRegion {\n\tname: string;\n\theader: vscode.Range;\n\tcontent: vscode.Range;\n\tdecoratorContent: vscode.Range;\n}\n\nexport const enum CommitType {\n\tCurrent,\n\tIncoming,\n\tBoth\n}\n\nexport interface IExtensionConfiguration {\n\tenableCodeLens: boolean;\n\tenableDecorations: boolean;\n\tenableEditorOverview: boolean;\n}\n\nexport interface IDocumentMergeConflict extends IDocumentMergeConflictDescriptor {\n\tcommitEdit(type: CommitType, editor: vscode.TextEditor, edit?: vscode.TextEditorEdit): Thenable<boolean>;\n\tapplyEdit(type: CommitType, document: vscode.TextDocument, edit: { replace(range: vscode.Range, newText: string): void }): void;\n}\n\nexport interface IDocumentMergeConflictDescriptor {\n\trange: vscode.Range;\n\tcurrent: IMergeRegion;\n\tincoming: IMergeRegion;\n\tcommonAncestors: IMergeRegion[];\n\tsplitter: vscode.Range;\n}\n\nexport interface IDocumentMergeConflictTracker {\n\tgetConflicts(document: vscode.TextDocument): PromiseLike<IDocumentMergeConflict[]>;\n\tisPending(document: vscode.TextDocument): boolean;\n\tforget(document: vscode.TextDocument): void;\n}\n\nexport interface IDocumentMergeConflictTrackerService {\n\tcreateTracker(origin: string): IDocumentMergeConflictTracker;\n\tforget(document: vscode.TextDocument): void;\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/mergeConflictMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport MergeConflictServices from './services';\n\nexport function activate(context: vscode.ExtensionContext) {\n\t// Register disposables\n\tconst services = new MergeConflictServices(context);\n\tservices.begin();\n\tcontext.subscriptions.push(services);\n}\n\nexport function deactivate() {\n}\n\n"
  },
  {
    "path": "extensions/merge-conflict/src/mergeConflictParser.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport * as interfaces from './interfaces';\nimport { DocumentMergeConflict } from './documentMergeConflict';\nimport TelemetryReporter from '@vscode/extension-telemetry';\n\nconst startHeaderMarker = '<<<<<<<';\nconst commonAncestorsMarker = '|||||||';\nconst splitterMarker = '=======';\nconst endFooterMarker = '>>>>>>>';\n\ninterface IScanMergedConflict {\n\tstartHeader: vscode.TextLine;\n\tcommonAncestors: vscode.TextLine[];\n\tsplitter?: vscode.TextLine;\n\tendFooter?: vscode.TextLine;\n}\n\nexport class MergeConflictParser {\n\n\tstatic scanDocument(document: vscode.TextDocument, telemetryReporter: TelemetryReporter): interfaces.IDocumentMergeConflict[] {\n\n\t\t// Scan each line in the document, we already know there is at least a <<<<<<< and\n\t\t// >>>>>> marker within the document, we need to group these into conflict ranges.\n\t\t// We initially build a scan match, that references the lines of the header, splitter\n\t\t// and footer. This is then converted into a full descriptor containing all required\n\t\t// ranges.\n\n\t\tlet currentConflict: IScanMergedConflict | null = null;\n\t\tconst conflictDescriptors: interfaces.IDocumentMergeConflictDescriptor[] = [];\n\n\t\tfor (let i = 0; i < document.lineCount; i++) {\n\t\t\tconst line = document.lineAt(i);\n\n\t\t\t// Ignore empty lines\n\t\t\tif (!line || line.isEmptyOrWhitespace) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Is this a start line? <<<<<<<\n\t\t\tif (line.text.startsWith(startHeaderMarker)) {\n\t\t\t\tif (currentConflict !== null) {\n\t\t\t\t\t// Error, we should not see a startMarker before we've seen an endMarker\n\t\t\t\t\tcurrentConflict = null;\n\n\t\t\t\t\t// Give up parsing, anything matched up this to this point will be decorated\n\t\t\t\t\t// anything after will not\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Create a new conflict starting at this line\n\t\t\t\tcurrentConflict = { startHeader: line, commonAncestors: [] };\n\t\t\t}\n\t\t\t// Are we within a conflict block and is this a common ancestors marker? |||||||\n\t\t\telse if (currentConflict && !currentConflict.splitter && line.text.startsWith(commonAncestorsMarker)) {\n\t\t\t\tcurrentConflict.commonAncestors.push(line);\n\t\t\t}\n\t\t\t// Are we within a conflict block and is this a splitter? =======\n\t\t\telse if (currentConflict && !currentConflict.splitter && line.text === splitterMarker) {\n\t\t\t\tcurrentConflict.splitter = line;\n\t\t\t}\n\t\t\t// Are we within a conflict block and is this a footer? >>>>>>>\n\t\t\telse if (currentConflict && line.text.startsWith(endFooterMarker)) {\n\t\t\t\tcurrentConflict.endFooter = line;\n\n\t\t\t\t// Create a full descriptor from the lines that we matched. This can return\n\t\t\t\t// null if the descriptor could not be completed.\n\t\t\t\tconst completeDescriptor = MergeConflictParser.scanItemTolMergeConflictDescriptor(document, currentConflict);\n\n\t\t\t\tif (completeDescriptor !== null) {\n\t\t\t\t\tconflictDescriptors.push(completeDescriptor);\n\t\t\t\t}\n\n\t\t\t\t// Reset the current conflict to be empty, so we can match the next\n\t\t\t\t// starting header marker.\n\t\t\t\tcurrentConflict = null;\n\t\t\t}\n\t\t}\n\n\t\treturn conflictDescriptors\n\t\t\t.filter(Boolean)\n\t\t\t.map(descriptor => new DocumentMergeConflict(descriptor, telemetryReporter));\n\t}\n\n\tprivate static scanItemTolMergeConflictDescriptor(document: vscode.TextDocument, scanned: IScanMergedConflict): interfaces.IDocumentMergeConflictDescriptor | null {\n\t\t// Validate we have all the required lines within the scan item.\n\t\tif (!scanned.startHeader || !scanned.splitter || !scanned.endFooter) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst tokenAfterCurrentBlock: vscode.TextLine = scanned.commonAncestors[0] || scanned.splitter;\n\n\t\t// Assume that descriptor.current.header, descriptor.incoming.header and descriptor.splitter\n\t\t// have valid ranges, fill in content and total ranges from these parts.\n\t\t// NOTE: We need to shift the decorator range back one character so the splitter does not end up with\n\t\t// two decoration colors (current and splitter), if we take the new line from the content into account\n\t\t// the decorator will wrap to the next line.\n\t\treturn {\n\t\t\tcurrent: {\n\t\t\t\theader: scanned.startHeader.range,\n\t\t\t\tdecoratorContent: new vscode.Range(\n\t\t\t\t\tscanned.startHeader.rangeIncludingLineBreak.end,\n\t\t\t\t\tMergeConflictParser.shiftBackOneCharacter(document, tokenAfterCurrentBlock.range.start, scanned.startHeader.rangeIncludingLineBreak.end)),\n\t\t\t\t// Current content is range between header (shifted for linebreak) and splitter or common ancestors mark start\n\t\t\t\tcontent: new vscode.Range(\n\t\t\t\t\tscanned.startHeader.rangeIncludingLineBreak.end,\n\t\t\t\t\ttokenAfterCurrentBlock.range.start),\n\t\t\t\tname: scanned.startHeader.text.substring(startHeaderMarker.length + 1)\n\t\t\t},\n\t\t\tcommonAncestors: scanned.commonAncestors.map((currentTokenLine, index, commonAncestors) => {\n\t\t\t\tconst nextTokenLine = commonAncestors[index + 1] || scanned.splitter;\n\t\t\t\treturn {\n\t\t\t\t\theader: currentTokenLine.range,\n\t\t\t\t\tdecoratorContent: new vscode.Range(\n\t\t\t\t\t\tcurrentTokenLine.rangeIncludingLineBreak.end,\n\t\t\t\t\t\tMergeConflictParser.shiftBackOneCharacter(document, nextTokenLine.range.start, currentTokenLine.rangeIncludingLineBreak.end)),\n\t\t\t\t\t// Each common ancestors block is range between one common ancestors token\n\t\t\t\t\t// (shifted for linebreak) and start of next common ancestors token or splitter\n\t\t\t\t\tcontent: new vscode.Range(\n\t\t\t\t\t\tcurrentTokenLine.rangeIncludingLineBreak.end,\n\t\t\t\t\t\tnextTokenLine.range.start),\n\t\t\t\t\tname: currentTokenLine.text.substring(commonAncestorsMarker.length + 1)\n\t\t\t\t};\n\t\t\t}),\n\t\t\tsplitter: scanned.splitter.range,\n\t\t\tincoming: {\n\t\t\t\theader: scanned.endFooter.range,\n\t\t\t\tdecoratorContent: new vscode.Range(\n\t\t\t\t\tscanned.splitter.rangeIncludingLineBreak.end,\n\t\t\t\t\tMergeConflictParser.shiftBackOneCharacter(document, scanned.endFooter.range.start, scanned.splitter.rangeIncludingLineBreak.end)),\n\t\t\t\t// Incoming content is range between splitter (shifted for linebreak) and footer start\n\t\t\t\tcontent: new vscode.Range(\n\t\t\t\t\tscanned.splitter.rangeIncludingLineBreak.end,\n\t\t\t\t\tscanned.endFooter.range.start),\n\t\t\t\tname: scanned.endFooter.text.substring(endFooterMarker.length + 1)\n\t\t\t},\n\t\t\t// Entire range is between current header start and incoming header end (including line break)\n\t\t\trange: new vscode.Range(scanned.startHeader.range.start, scanned.endFooter.rangeIncludingLineBreak.end)\n\t\t};\n\t}\n\n\tstatic containsConflict(document: vscode.TextDocument): boolean {\n\t\tif (!document) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst text = document.getText();\n\t\treturn text.includes(startHeaderMarker) && text.includes(endFooterMarker);\n\t}\n\n\tprivate static shiftBackOneCharacter(document: vscode.TextDocument, range: vscode.Position, unlessEqual: vscode.Position): vscode.Position {\n\t\tif (range.isEqual(unlessEqual)) {\n\t\t\treturn range;\n\t\t}\n\n\t\tlet line = range.line;\n\t\tlet character = range.character - 1;\n\n\t\tif (character < 0) {\n\t\t\tline--;\n\t\t\tcharacter = document.lineAt(line).range.end.character;\n\t\t}\n\n\t\treturn new vscode.Position(line, character);\n\t}\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/mergeDecorator.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport * as interfaces from './interfaces';\n\n\nexport default class MergeDecorator implements vscode.Disposable {\n\n\tprivate decorations: { [key: string]: vscode.TextEditorDecorationType } = {};\n\n\tprivate decorationUsesWholeLine: boolean = true; // Useful for debugging, set to false to see exact match ranges\n\n\tprivate config?: interfaces.IExtensionConfiguration;\n\tprivate tracker: interfaces.IDocumentMergeConflictTracker;\n\tprivate updating = new Map<vscode.TextEditor, boolean>();\n\n\tconstructor(private context: vscode.ExtensionContext, trackerService: interfaces.IDocumentMergeConflictTrackerService) {\n\t\tthis.tracker = trackerService.createTracker('decorator');\n\t}\n\n\tbegin(config: interfaces.IExtensionConfiguration) {\n\t\tthis.config = config;\n\t\tthis.registerDecorationTypes(config);\n\n\t\t// Check if we already have a set of active windows, attempt to track these.\n\t\tvscode.window.visibleTextEditors.forEach(e => this.applyDecorations(e));\n\n\t\tvscode.workspace.onDidOpenTextDocument(event => {\n\t\t\tthis.applyDecorationsFromEvent(event);\n\t\t}, null, this.context.subscriptions);\n\n\t\tvscode.workspace.onDidChangeTextDocument(event => {\n\t\t\tthis.applyDecorationsFromEvent(event.document);\n\t\t}, null, this.context.subscriptions);\n\n\t\tvscode.window.onDidChangeVisibleTextEditors((e) => {\n\t\t\t// Any of which could be new (not just the active one).\n\t\t\te.forEach(e => this.applyDecorations(e));\n\t\t}, null, this.context.subscriptions);\n\t}\n\n\tconfigurationUpdated(config: interfaces.IExtensionConfiguration) {\n\t\tthis.config = config;\n\t\tthis.registerDecorationTypes(config);\n\n\t\t// Re-apply the decoration\n\t\tvscode.window.visibleTextEditors.forEach(e => {\n\t\t\tthis.removeDecorations(e);\n\t\t\tthis.applyDecorations(e);\n\t\t});\n\t}\n\n\tprivate registerDecorationTypes(config: interfaces.IExtensionConfiguration) {\n\n\t\t// Dispose of existing decorations\n\t\tObject.keys(this.decorations).forEach(k => this.decorations[k].dispose());\n\t\tthis.decorations = {};\n\n\t\t// None of our features are enabled\n\t\tif (!config.enableDecorations || !config.enableEditorOverview) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create decorators\n\t\tif (config.enableDecorations || config.enableEditorOverview) {\n\t\t\tthis.decorations['current.content'] = vscode.window.createTextEditorDecorationType(\n\t\t\t\tthis.generateBlockRenderOptions('merge.currentContentBackground', 'editorOverviewRuler.currentContentForeground', config)\n\t\t\t);\n\n\t\t\tthis.decorations['incoming.content'] = vscode.window.createTextEditorDecorationType(\n\t\t\t\tthis.generateBlockRenderOptions('merge.incomingContentBackground', 'editorOverviewRuler.incomingContentForeground', config)\n\t\t\t);\n\n\t\t\tthis.decorations['commonAncestors.content'] = vscode.window.createTextEditorDecorationType(\n\t\t\t\tthis.generateBlockRenderOptions('merge.commonContentBackground', 'editorOverviewRuler.commonContentForeground', config)\n\t\t\t);\n\t\t}\n\n\t\tif (config.enableDecorations) {\n\t\t\tthis.decorations['current.header'] = vscode.window.createTextEditorDecorationType({\n\t\t\t\tisWholeLine: this.decorationUsesWholeLine,\n\t\t\t\tbackgroundColor: new vscode.ThemeColor('merge.currentHeaderBackground'),\n\t\t\t\tcolor: new vscode.ThemeColor('editor.foreground'),\n\t\t\t\toutlineStyle: 'solid',\n\t\t\t\toutlineWidth: '1pt',\n\t\t\t\toutlineColor: new vscode.ThemeColor('merge.border'),\n\t\t\t\tafter: {\n\t\t\t\t\tcontentText: ' ' + vscode.l10n.t(\"(Current Change)\"),\n\t\t\t\t\tcolor: new vscode.ThemeColor('descriptionForeground')\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.decorations['commonAncestors.header'] = vscode.window.createTextEditorDecorationType({\n\t\t\t\tisWholeLine: this.decorationUsesWholeLine,\n\t\t\t\tbackgroundColor: new vscode.ThemeColor('merge.commonHeaderBackground'),\n\t\t\t\tcolor: new vscode.ThemeColor('editor.foreground'),\n\t\t\t\toutlineStyle: 'solid',\n\t\t\t\toutlineWidth: '1pt',\n\t\t\t\toutlineColor: new vscode.ThemeColor('merge.border')\n\t\t\t});\n\n\t\t\tthis.decorations['splitter'] = vscode.window.createTextEditorDecorationType({\n\t\t\t\tcolor: new vscode.ThemeColor('editor.foreground'),\n\t\t\t\toutlineStyle: 'solid',\n\t\t\t\toutlineWidth: '1pt',\n\t\t\t\toutlineColor: new vscode.ThemeColor('merge.border'),\n\t\t\t\tisWholeLine: this.decorationUsesWholeLine,\n\t\t\t});\n\n\t\t\tthis.decorations['incoming.header'] = vscode.window.createTextEditorDecorationType({\n\t\t\t\tbackgroundColor: new vscode.ThemeColor('merge.incomingHeaderBackground'),\n\t\t\t\tcolor: new vscode.ThemeColor('editor.foreground'),\n\t\t\t\toutlineStyle: 'solid',\n\t\t\t\toutlineWidth: '1pt',\n\t\t\t\toutlineColor: new vscode.ThemeColor('merge.border'),\n\t\t\t\tisWholeLine: this.decorationUsesWholeLine,\n\t\t\t\tafter: {\n\t\t\t\t\tcontentText: ' ' + vscode.l10n.t(\"(Incoming Change)\"),\n\t\t\t\t\tcolor: new vscode.ThemeColor('descriptionForeground')\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tdispose() {\n\n\t\t// TODO: Replace with Map<string, T>\n\t\tObject.keys(this.decorations).forEach(name => {\n\t\t\tthis.decorations[name].dispose();\n\t\t});\n\n\t\tthis.decorations = {};\n\t}\n\n\tprivate generateBlockRenderOptions(backgroundColor: string, overviewRulerColor: string, config: interfaces.IExtensionConfiguration): vscode.DecorationRenderOptions {\n\n\t\tconst renderOptions: vscode.DecorationRenderOptions = {};\n\n\t\tif (config.enableDecorations) {\n\t\t\trenderOptions.backgroundColor = new vscode.ThemeColor(backgroundColor);\n\t\t\trenderOptions.isWholeLine = this.decorationUsesWholeLine;\n\t\t}\n\n\t\tif (config.enableEditorOverview) {\n\t\t\trenderOptions.overviewRulerColor = new vscode.ThemeColor(overviewRulerColor);\n\t\t\trenderOptions.overviewRulerLane = vscode.OverviewRulerLane.Full;\n\t\t}\n\n\t\treturn renderOptions;\n\t}\n\n\tprivate applyDecorationsFromEvent(eventDocument: vscode.TextDocument) {\n\t\tfor (const editor of vscode.window.visibleTextEditors) {\n\t\t\tif (editor.document === eventDocument) {\n\t\t\t\t// Attempt to apply\n\t\t\t\tthis.applyDecorations(editor);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async applyDecorations(editor: vscode.TextEditor) {\n\t\tif (!editor || !editor.document) { return; }\n\n\t\tif (!this.config || (!this.config.enableDecorations && !this.config.enableEditorOverview)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a pending scan from the same origin, exit early. (Cannot use this.tracker.isPending() because decorations are per editor.)\n\t\tif (this.updating.get(editor)) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.updating.set(editor, true);\n\n\t\t\tconst conflicts = await this.tracker.getConflicts(editor.document);\n\t\t\tif (vscode.window.visibleTextEditors.indexOf(editor) === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (conflicts.length === 0) {\n\t\t\t\tthis.removeDecorations(editor);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Store decorations keyed by the type of decoration, set decoration wants a \"style\"\n\t\t\t// to go with it, which will match this key (see constructor);\n\t\t\tconst matchDecorations: { [key: string]: vscode.Range[] } = {};\n\n\t\t\tconst pushDecoration = (key: string, d: vscode.Range) => {\n\t\t\t\tmatchDecorations[key] = matchDecorations[key] || [];\n\t\t\t\tmatchDecorations[key].push(d);\n\t\t\t};\n\n\t\t\tconflicts.forEach(conflict => {\n\t\t\t\t// TODO, this could be more effective, just call getMatchPositions once with a map of decoration to position\n\t\t\t\tif (!conflict.current.decoratorContent.isEmpty) {\n\t\t\t\t\tpushDecoration('current.content', conflict.current.decoratorContent);\n\t\t\t\t}\n\t\t\t\tif (!conflict.incoming.decoratorContent.isEmpty) {\n\t\t\t\t\tpushDecoration('incoming.content', conflict.incoming.decoratorContent);\n\t\t\t\t}\n\n\t\t\t\tconflict.commonAncestors.forEach(commonAncestorsRegion => {\n\t\t\t\t\tif (!commonAncestorsRegion.decoratorContent.isEmpty) {\n\t\t\t\t\t\tpushDecoration('commonAncestors.content', commonAncestorsRegion.decoratorContent);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (this.config!.enableDecorations) {\n\t\t\t\t\tpushDecoration('current.header', conflict.current.header);\n\t\t\t\t\tpushDecoration('splitter', conflict.splitter);\n\t\t\t\t\tpushDecoration('incoming.header', conflict.incoming.header);\n\n\t\t\t\t\tconflict.commonAncestors.forEach(commonAncestorsRegion => {\n\t\t\t\t\t\tpushDecoration('commonAncestors.header', commonAncestorsRegion.header);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// For each match we've generated, apply the generated decoration with the matching decoration type to the\n\t\t\t// editor instance. Keys in both matches and decorations should match.\n\t\t\tObject.keys(matchDecorations).forEach(decorationKey => {\n\t\t\t\tconst decorationType = this.decorations[decorationKey];\n\n\t\t\t\tif (decorationType) {\n\t\t\t\t\teditor.setDecorations(decorationType, matchDecorations[decorationKey]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} finally {\n\t\t\tthis.updating.delete(editor);\n\t\t}\n\t}\n\n\tprivate removeDecorations(editor: vscode.TextEditor) {\n\t\t// Remove all decorations, there might be none\n\t\tObject.keys(this.decorations).forEach(decorationKey => {\n\n\t\t\t// Race condition, while editing the settings, it's possible to\n\t\t\t// generate regions before the configuration has been refreshed\n\t\t\tconst decorationType = this.decorations[decorationKey];\n\n\t\t\tif (decorationType) {\n\t\t\t\teditor.setDecorations(decorationType, []);\n\t\t\t}\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "extensions/merge-conflict/src/services.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport DocumentTracker from './documentTracker';\nimport CodeLensProvider from './codelensProvider';\nimport CommandHandler from './commandHandler';\nimport ContentProvider from './contentProvider';\nimport Decorator from './mergeDecorator';\nimport * as interfaces from './interfaces';\nimport TelemetryReporter from '@vscode/extension-telemetry';\n\nconst ConfigurationSectionName = 'merge-conflict';\n\nexport default class ServiceWrapper implements vscode.Disposable {\n\n\tprivate services: vscode.Disposable[] = [];\n\tprivate telemetryReporter: TelemetryReporter;\n\n\tconstructor(private context: vscode.ExtensionContext) {\n\t\tconst { aiKey } = context.extension.packageJSON as { aiKey: string };\n\t\tthis.telemetryReporter = new TelemetryReporter(aiKey);\n\t\tcontext.subscriptions.push(this.telemetryReporter);\n\t}\n\n\tbegin() {\n\n\t\tconst configuration = this.createExtensionConfiguration();\n\t\tconst documentTracker = new DocumentTracker(this.telemetryReporter);\n\n\t\tthis.services.push(\n\t\t\tdocumentTracker,\n\t\t\tnew CommandHandler(documentTracker),\n\t\t\tnew CodeLensProvider(documentTracker),\n\t\t\tnew ContentProvider(this.context),\n\t\t\tnew Decorator(this.context, documentTracker),\n\t\t);\n\n\t\tthis.services.forEach((service: any) => {\n\t\t\tif (service.begin && service.begin instanceof Function) {\n\t\t\t\tservice.begin(configuration);\n\t\t\t}\n\t\t});\n\n\t\tvscode.workspace.onDidChangeConfiguration(() => {\n\t\t\tthis.services.forEach((service: any) => {\n\t\t\t\tif (service.configurationUpdated && service.configurationUpdated instanceof Function) {\n\t\t\t\t\tservice.configurationUpdated(this.createExtensionConfiguration());\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tcreateExtensionConfiguration(): interfaces.IExtensionConfiguration {\n\t\tconst workspaceConfiguration = vscode.workspace.getConfiguration(ConfigurationSectionName);\n\t\tconst codeLensEnabled: boolean = workspaceConfiguration.get('codeLens.enabled', true);\n\t\tconst decoratorsEnabled: boolean = workspaceConfiguration.get('decorators.enabled', true);\n\n\t\treturn {\n\t\t\tenableCodeLens: codeLensEnabled,\n\t\t\tenableDecorations: decoratorsEnabled,\n\t\t\tenableEditorOverview: decoratorsEnabled\n\t\t};\n\t}\n\n\tdispose() {\n\t\tthis.services.forEach(disposable => disposable.dispose());\n\t\tthis.services = [];\n\t}\n}\n"
  },
  {
    "path": "extensions/merge-conflict/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/microsoft-authentication/.vscodeignore",
    "content": ".vscode/**\n.vscode-test/**\nout/test/**\nout/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\nsrc/**\n.gitignore\nvsc-extension-quickstart.md\n**/tsconfig.json\n**/tslint.json\n**/*.map\n**/*.ts\npackageMocks/\n"
  },
  {
    "path": "extensions/microsoft-authentication/README.md",
    "content": "# Microsoft Authentication for Visual Studio Code\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension provides support for authenticating to Microsoft. It registers the `microsoft` Authentication Provider that can be leveraged by other extensions. This also provides the Microsoft authentication used by Settings Sync.\n\nAdditionally, it provides the `microsoft-sovereign-cloud` Authentication Provider that can be used to sign in to other Azure clouds like Azure for US Government or Azure China. Use the setting `microsoft-sovereign-cloud.endpoint` to select the authentication endpoint the provider should use. Please note that different scopes may also be required in different environments.\n"
  },
  {
    "path": "extensions/microsoft-authentication/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst path = require('path');\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tnode: {\n\t\tglobal: true,\n\t\t__filename: false,\n\t\t__dirname: false,\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n\tresolve: {\n\t\talias: {\n\t\t\t'./node/authServer': path.resolve(__dirname, 'src/browser/authServer'),\n\t\t\t'./node/buffer': path.resolve(__dirname, 'src/browser/buffer'),\n\t\t\t'./node/fetch': path.resolve(__dirname, 'src/browser/fetch'),\n\t\t\t'./node/authProvider': path.resolve(__dirname, 'src/browser/authProvider'),\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "extensions/microsoft-authentication/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\nconst CopyWebpackPlugin = require('copy-webpack-plugin');\nconst path = require('path');\n\nconst isWindows = process.platform === 'win32';\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t},\n\texternals: {\n\t\t// The @azure/msal-node-runtime package requires this native node module (.node).\n\t\t// It is currently only included on Windows, but the package handles unsupported platforms\n\t\t// gracefully.\n\t\t'./msal-node-runtime': 'commonjs ./msal-node-runtime'\n\t},\n\tresolve: {\n\t\talias: {\n\t\t\t'keytar': path.resolve(__dirname, 'packageMocks', 'keytar', 'index.js')\n\t\t}\n\t},\n\tplugins: [\n\t\t...withDefaults.nodePlugins(__dirname),\n\t\tnew CopyWebpackPlugin({\n\t\t\tpatterns: [\n\t\t\t\t{\n\t\t\t\t\t// The native files we need to ship with the extension\n\t\t\t\t\tfrom: '**/dist/msal*.(node|dll)',\n\t\t\t\t\tto: '[name][ext]',\n\t\t\t\t\t// These will only be present on Windows for now\n\t\t\t\t\tnoErrorOnMissing: !isWindows\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]\n});\n"
  },
  {
    "path": "extensions/microsoft-authentication/media/auth.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nhtml {\n\theight: 100%;\n}\n\nbody {\n\tbox-sizing: border-box;\n\tmin-height: 100%;\n\tmargin: 0;\n\tpadding: 15px 30px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tcolor: white;\n\tfont-family: \"Segoe UI\",\"Helvetica Neue\",\"Helvetica\",Arial,sans-serif;\n\tbackground-color: #2C2C32;\n}\n\n.branding {\n\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAlqADAAQAAAABAAAAlgAAAADkcSUjAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAxaElEQVR4Ae19CbgdRbXu6j2cecoECTIkICCGzAg+7qeQ9544QFQgiXpVEJTEe59ALsbMwE5AMZCQELgKeSoqDlyiQogCSUAC6FNCQhIwQMALCbNMGc68p37/v7prnz47++yzzzl76OCu851d3dXV1VXVf69atWqtVZaUg397IPJwSCKT46zgx16wh+19XSYnO6PjE7H4MDuZ7BSxXhQJ/On5KTWbTSMm3bYlvHXmJNxj2SatFLFVioeWn5lDDwAgMvOU2NG/3DMo2h691rLtr4bqBtVX1NVJRUOVBIIiyYSI3RkXO9q5NZmU5S98tu7XpmQF2AwAzCoNwMrAMm/CT3HkrgqJTI/KwodOD4ZDa5MVdUPtfe+KxONKiSob6+SIE46XqsYGK5FIBoLVtQEJiSRaWp+xktaNuzpqfirTLcBOZNJtdnjrDCk6wMrA8hOgWJcZoFSrT4nJogfPESu4Dv8AVLTTEqsC9MkSDHB2NIYfkZGnjJOqpiZQrkTCAmWyKqtDgXBAEs0tLyZtWRl7953/u/uiUR0sVgH2xuKERCJJnhc6lIFV6B7OuXyAJrIpqDzVlQ99TUKVt0scAEomQaXskBAONlEFrgpvLdkZk6r6Wjn6IxMx2qVeY0IsSVrhqnCgMiiJA62v4a5Vkmz/4a7PDWtmVXSIfGMSAGYVFGCpGvGh5VCiHohEAiJXi77sKx+eLZU1N0hHCyuTAJCCDqCAKIUCYxv4AcY6YnL0qeOkZuhQSeoo6b5OG+AC4ZJQRThQFQbAWt7Bvf8ZSNg3P3deA8ZUF2AzADCrMAArA4u9XMoQsQMp6nHlH5dKdcMcad+fJGVCCKRAxfMU1XKB1dYpI8acKI0jj5FkDNSti3LpzSgjCQQmrFA4HKiuIMAO2EnrtkBb+8pdXxr2OjOd+bAd2vQ2cro8mXPjwH/LwBp4H/a/hLvuCsr06cpky6KHfiK1jRdJ235M80ClABMtmMMfKJQDNB4j1VCstg4ZcTKANWpkZmCxAJZiABYIhgO1VRwi21HGj63OxI27pje9xGz5BlgZWOzVUgSPjEqufOheqWmcIq37YwBCWKsDDGlQULnAUh6L4CLFAh/fCmCNOSE7sNxi3IilxiUQCAdrayR+oCWBcn4q0eSy56c2PMc80+6yg2t4MEAKVgYWO7HYwcz8Ig9XSTz5kNQ0nC7tB6KoBmZ+bnAZdaVUhIMHVDxWQtQCYI3thWKZ8rrHLICiCwCslmIKFGn/GoPm9S+cW7ddswJgZw4Ta9NkC/n6HsrA6nufDewOV/Ap8x8cggHvMUztTpLO5igkCV2g4hMIJI3dY56mqBdwgXOlWP0DlhbNkhVgtoQDELza7Z1iJ2J3J2P2DX8/r+Evmsm2A2dukkBfAYbZSDkUrQco+IQ0XeY9eKwEraekovYkzP4OBhUrlGLEXYB1q6QnzXPYLUtuJ5SLcei1k62tMYDKDtTWnRusrf5/J9zbcv9xa5snc9aooLJti3xYbsVy1lEOxekBI01f8NBECVnbJVx1hHS2YSrnGf4y1SQTwAyYTJzpvr6lAWA2AWYlW1vidrQjGait/VS4pvaPx9/bvOn43+4/GwCzDcAoC0P+rKNd1ot9q1s5d489YIa/BQ9+Ap/yAxKsgJSJ8gGXUc94I1BD4Og/j91zDodYGFTmvf88VsYnpiWSt7ICNXWcoQoo2uNJ217298/X/8bky7ZcVKZYppcKE0OaDg0FDn9XPfwFCYc3YEYGUEUpTQeFUNTgyZniDBUyfJdecu9hVJjAYS+YbGuJ8z9QXXNaqL5uzQlrm3d88O79X+Ujt860MIu17ExDZJliFealkMJYMn1NQNZATnXlQ9+ScPXNEm3H02zKrZQK9PpoxQ5+PBJ3pVwqbkBJpFhjPiSNx47sWY7V60Nyy4BaQDQhdqCyJgRWX5LNLbuA8xUfaKz7sTtEkkhhMuBoU5QpVm792rdclKbzkyWoFj64WCrrAKo2SNMxhukSjb4CvoZe/pGBebyfP88ZTNx14KQX6BdV4McQSna2JZItLXGrsurEUEPdra8daPnv43934CIy+Qoqth2hDKx8v4hpkKbrAi++3AUbf4AlmqukvTmuiytgWfr3OBdg/bs533cpwMDgJ6BFEQtUVB4dGlz/kxPuab5TH8S2A1z9bGi+6/o+KY/8FKkUw6KH/ktqm/4Ngk8y6UHltvVCH39IrQx1SsXmoI9l5Tc72xS2Y50AWGtnaEjdF46/p3mtPuJqqmOUQ356YMZtYai8xITrfzsGb4Dg8392W6IZ8FOygImXslwe8KOzF0Dti2D8vZbO0KC6z37wdwfm/d2yvu8dvbPfXr7acw8YcULkrw0Sa34EoBovHZCmq3Jez7dlvwKkGMCoqIHn+E8tQtse5n1UwZn37HXVq0nOeO14sj0Ws44tD4U59FjWLEaaPue+IyXWskMqa11QUfCZQgaK6OtxhqeaIkpInjLUyiRBjJKMhRrrqkOh5IXlodB0S3/ilDR9/cngyx+RcOVg6WjtXZqe67OUUqVnJroQsgu+nTzF/oXUlsIUTIk/WaZY/e18A6r5D34MXbkV0vTBEoVKZ1Zpen8flv2+FCHLnq0YV4N2Zwcwb48pU6z+dDfVXiKnRKGh8HksJt+tIp44penZlmj68yBzD6DjRQ8pmQbwWR4u2aSau0oQg2JRT9EaUqZYfep9vEaKFGhFs2DDN6Si8m594Yk4RQyF+0gVMRlgwyTzb9qRIZu51C02+Uzc7WLaSS55eIvJh1WHwnVGWt0O+VM1eFgMg4dIXBY8OF+qar8HlRd0JciHRRutEoXUy/Q836R5kjIemnwmzpjJTcwlD7O6+crAytaZ5ppK013B5/wNy6W6/goIPkmlMBD1V5puCu8h5gs66GV6E7zHPZRRsmSrgOS7ZI3K84O9Bg/zN/wcuulfVYMHZ+3Mw+Hk+bmmuHT8pPgrZki/aG4qfVymWNneAfmp6Y5TDpm34T6s+306v9L0bA/ntSzAMZdK45qht4qXKVaPPeTM/GISWVcjnZV/xPB3mho8WL1ofPZY4AAuGHmWAZMpKv3cpPsgLlOsTC/BLNHMXn+YRAOPglE/ERoK3a1oMt1XrDQdDsne4YEEl/kv1vOzPcetUxlY6Z3kLNFEZdGG42Gk/hh00w9Xg4fedNPTy8n7OdBjgKRl+5RcudUqy7G8ADDS9DkPnApQbYNjjsOlsz1/SzTeZ/V2bKiQiZk/HUvp572VWcTrfaNYVLddvTUkgyYl5Rk2c1NARtRbUkIHX3nrKyNNn/fgp6BCcL8E0DUxuHShNL3ULzBFqVCR1KwwlZi3LshnQbkDizMkS61i2dkmqDa2zMQpr7tuDc3FQyOmNH0TtD4hTZ97/1ckFLxDEniBCbpvUZMofzQjHdzp5/6oZaoWuQHLMLOrXmgQO34hvugzUMJgfMnvIH5I9rXfgRfTJpqv9P4vU63r7cAYPESmx2X+A7NgQLoCtn68q7BLNL3VK3U9DT1pp6lsPjzoBVj8mqFWSzOfW549B7ZwP4W67RB1fgm7ACh24T84DZTsKlm2/WKZOX499Z1l512OdYoPG5yqkho8qBAoIXMf+K5UNiyAch4axbdXwiWaVAU9BwZQqdHPJCAPD82/55aSHbp17BlY/JrXQLVmOoa/VTtnSqjqVuFI2LI3itkJmX6nCLrICVceIRVVD8iNTy2RK6yrtVGGypWshVke7Bg8kCqJzF2/Gk45LoGMynEf5HGPl6WEIl/yAIlPTjstcmWyP86tW+ZZoWvCo65sbvrblVLVcCuGCFtiUb6MCjQshH/oOquAtQJMbgKzp6TUD7lKVjy9Ua57bJAaaUZ2dnd0kb1KxblKXtAYPMxd/zss0VwibTB4sEGlaF7sl8AXZP61TjhxX1qqirYO2alTPx0c3JHetbGbdq6SmqZLpXUfAEUnAo7NWA8NYLNjkFBXQJj4NpxkTpMrJj6ixgXPTLNTXut6uLkoyTR4WD0zpg5kB7+3EbrpZ6g0veQyqh5abyTuRBSP1dsM8iYwnMBTn91ph4afdKw0jDrWtqForq+oh6KKmWyDoegOLO/MbuXOO6V20BekdS9ngRwyu+ftsaZ2DPIfmI8je7Rtvlwx9vuatdRDo/FJNe/3gzDZg8FD3RjH4KE/SzTsinTy0WOH9OFCWrl8hD4GPwZYSSj/wmzBqm2y7Ff23H7cZ856Lzxk6LfjLc30nFw69R1PKwmsrqGQL57iAg6DK3c+CCadoOIyhnoh8dzXy6EVhvvohMQ7bQyN18mNf1sHUURdSYdGCj6pnDd349H4RmDwUD0AULH5hQBVT+WaZwF0YEYkGA5KKGRZrfsWyS++fHGgtvofYEpArArjpLaXl93jZYd5N9SE4oTkM5vAd0yQln1k0vvLI/HLsZXa1TbCX7n1nNyw43z5zujHBZ7iVLhaYHfQqRYbafrcB8ZhDHkEk5BG6YD7oP63LVV04Q8AKhIxGuZjsAOVBZtx4C1JJKYmb/78Y/r8aKLKrsYR1A0NBAtfryxPcIkuPPbajjeUVTuOhBcUfM11E6Aa4iy4sqb9/4fPJVCvNrhADFd+QCqr/irLd8zSCYFjht3zjDRLvft0SakwdniYd/+ZuG+LhMKNKk03fj77VFiJMiuDjnGwuoG860a4ED1RAKojbttSwxrB7zYGHuc1MS55AF4IGUjLIUO46RksuNp/lYpqmC/Bw1x+mVln1mhB07Ju6AoMjf8iL738FTy3UzhrjIzm8/IfyKjTfdCc+6bC1eYa/Z7jMcfggS33BsPamDjTtfQ0c55eFtO95XiPzT0m5jUGU0Z6XhvyQ3g6ViXVtr2LZeWUiOZH2044YVL0dT3x5w8oFhys2rIeqiEwX2rPN6hMqx0n+G37YuDdpsqoY56V67eNV1DphCHSxeuZO/obU/7GMjn7m/PANyFNX6MC3XiCzvgpJjk4mDQTe3P0lMb0TNd4rzfde+wt1+TzXk8d66gWxUYC8P4f2yvtLWfJjQAV9e7JA7NtPg8haTzsPzD7GyUt72GbMqksYH35PWJoxDBbUTUK85ptsvypb8q3x96mz/TOSPtbCTV4wGvlJGTu+kWwSr7GFwYPfWoP51RoA4e+1n2PSqdMlZs/97aKSCKngOJGUvDrXiyTDQnsfqX4Z7bOCqc6DsHwNRcnYGjsgJQbHVE3+FZZ/vQdcC7u7CGDnar6XQUtI+L4aJpz/01gdK8BTwL5Gx9Egwd2vJ//teUY+kIBsCRBgGqpLPvMGXLzZxxQcVbrNCCti5wFBCfRL+2juMGW0QoseAzRd8D30O2fzUlP6+nc5DWxN583jUMSCm2Dw/y6QV+R007aKUu3nqRrkpxMcDjrS6BQ10jT59z/K6luvAyg4syPQ6wLqr4UWIq8Nih5NYe+Vuk48FmAap72Az8YB1Q9VwrdfNA3w9wm3RybOD2d5yakX2N6+nWTZtLNPeYc17lXC10yp93NcxM8uU1Sj7HJa2JvRm+aHjueelsh1qiqOREzx7/Jsh0X6mSC7gY5NOYSyKRz2xC24zv3rccQ8iXsRYOv2/ECnEsRpc2jQ19ch77Ols0ST5woy6as06GPn5f5YLJV0tu1Jp83zRybuKc83uvm2Bt7jzOVwTTmwT9dGu6ERS+TvDSV58UKFViH5EaNAfB6PwXftVofTD6J4oJsQaXpYGRnr6+V79y/GUs0ZykPR9/lbgN9G7NdNjeoDGLoqw2h3jfJDWefJiumvJbaszBX0VTf6Hu2Hs3bNQwT1m+kgiIRiB1KFSxYZFNLghoGdYMvkRuf3iHXbzlOxQUEV6ahcZorTZ/1wAjoiO3AyzkFwx+c8XORHKjiv5+DLRz6sA8h9nZuOzBdbvjMLK1uLkOfn9vl1g3A2r8CM8I9mEFV4qU4MiXvOzHH3th7zIK85+nH5rynfCYdW2ugnJBK/Ctrx0qw6hm5fvsXFFwcGimxN4HS9DUQfH573YfwPTwFg4fjpJM7PKjmhcnlV3Bx1ucOfe07xI6dJDees0Y4pNPFRy5DX1cLfXsUkCtOxxZjyU/Br9M+fEFUiekClwFFeszmpKeZc+8102xeM9dNbPJ5z538FbrkEghWQOZ1pyx7apUmczcqUi/VTQeoZq37H3g9T8J90FDpgMGDoVR8kLdMf1EuZ8ivqgthdWO1LPv0eFn22ZecoY+yKX+syjivYWC/kLxjFjYba3k37RwHbYQ/gU85qgDS977WMgyhZhL1SGJovFSWPf1ReIs7T2aOe1ULunTt2Vgp+L0EQcSiEF1YWDqiSoluDwKGg++HE0vDexhwmfO+1iYv+S0ubVHUksTQ9zVZfvYdWqzK71SU0L+nOFIv517vB9W/0gZ+l9vHkOSCtyIluHz0yxK1x0GV5GmdoeCVDfwpAyqBogJ82Zg1Vtd/RIKBF8B7nSUX/OJf4drz90qVYjHOBimecKgUY90ShOfuMaJU8B6nEgt+gFePpZlqLCBH25/DBzNaQUVAkXfMhwEK21Wath3ceW5d+PIkxSTPH7tXmk+eiOn6I1Dwo2ZDqcHF2nHxNY79jaskWLleRh33S2irQqVQfVIFHSDh3XHWrpQJLdPGeWMee/9ZbFECJkSY7VbVYcWh+eey7AmAaspz+iETUO4uDgOuSUkpcebad8mKuGCrZFlnh2fKsr/9FtP/86TNVfSDWkbmIoqQylljPEaib0lTExaGwra8/lpQosB9GE1QIOEqPxPW0tSUMa9pwEnqnIkmk3s5/1EUCo8V0E0TiBJmyvJzVusj2Mfs6/d5cCiWaSS/IkqxGWaffD70qWBoMIgyIcq4Uq9Irxfzx3myA5t43JKamoCMHClSXw+aSlkoMpihzwyFhKFJ1/vdPE5ZXdfy3Q5oTqFI6E5BRTvW8SK2lx+voNKPNgLWA338TxC6A4sNphRbjSkw/s8+eaa07fsurFhI2dhhfF2lDWTQoaggQVTpA0eJHHY4XiPOwetrDVNgwrnqiBtApRDl5DOtYP78BQ5vAlCFsSxzl7zcClHClB2iyoYAVARrmf8koWso9DZYFfHwdX0Y9oHTRy/CrOxt8AkrIZJALjpcpm51Xl+I9+m9H3MU05UQxEOHiVRXibwO7SRSrwoOjahbgJkQWE0e8oVztmji9Fkj0wcWMPRVVKiKTtuBy+XGsx0xiVKqyYXlVdlG/vshuN2YGVisoH5dnLWoOOImyJPeAc/wC3QcGGa4xnUMLErfFFaltk5k5CiRN94QaW4GuCBrVPGDCyRvLfkC2Hj+6zEO9Nh9MzzOOWhm3hhXteGOlldBTc/HssxmxzrpGbsYQ182omua21OT3FZrFzBPT+e85u0ak8+km3OVxOGkZ2DxDn7iEXQaxREzx/4SDD1M6m3sEAqO2ewQakrU/O6Pvije7p5785hrvGSu89jk8V7PlMdcN/eS0pih8UgMje++LfI2qoklOLXUZkt1wOcDkFfv1x8cI874Vkw+VgCB2RlMHXmsRejegwGIZ8JYjlon1rtfkhUXtOrQNx1C3CIFVstbtfTHZrtm8qbnST9nvkxp6enMw/+DeSzmTA86Y4Qa8eyT16NHT8UMrRVGCWTqM89uTA3MU7zlmWtMM9fT09Lzm3zmHhOn0vGWafJPkAw9TOQoAIygUb8eyJxi6HE9xXchnflT/ywUQctkunPaleY552HStZgJhi3M+uZBNgVVF4CKSzOR4oGKVTG457FfQm7AYm2pm04d9dknPwFqMB4znjexvkjtg6J9mVk7jUBiIPWqw2zxmFGC2SNqh+oRPBnB5QJIQcRjPXDKMYBzzry/zARVH7Q9EXsL1uEfx1rfUkdZ8dBQG/Y2plDHuQOLNTDgumL03/Gmxkln6y61fPYLuFhHMzSGgfkjj3aYezL1pGgMBjA8V+rlUjoDKr3uZE3l7zoFakHLqDbc0bIRVk0nyopzHtO1Pi4eF8ukras+vj3qG7DYDIKLPNd3xr0lweYJ4C0ehx2iX6T0TkcTXAZIFEccBYBxFqgyL2QheMyQmKJkSNc0FpGJenHoCwWx3hfAWl8EVOosWXnuPh36etPwZJH/ZKEX5r2H3lCeC7PFKyzunv1Ruf6pP0BK/xnIvEAaqFvFt1jqgCpw0OLQWN8gMhLKjG+8JtIK/1ecNbKGJGLpNeU9BCbTnWOagsZgMQOFRGiAWPHpECVsVIuZnR+Gh8PpmflM3F6UwDawnvz3S0Bd+k6xTOW5eG10pOaMPRuLxXCuTyl90hkuTL6Sx0AIlxXDIKpHjRQZMsShXPTa56VcqSHQTdcXBbJnQ2BWSWPR1kelDUPfcoBKVXci9vtFd6oQr6j/wGJtqCNFjUeGOWMuxBLQcixekwriO/KRLwHv0Hj4CPBeRzqgov0qAaT8Fqps+C4m2kkYY0BmEa4KghIvlZXnnCG3nveWZ+hT6LHp5XBwD/RvKPSWo0wrZkMMc6zZGBbfgT+t66DRyY6nkagDPM1Qwh+Ci4FDYwMWsisprcfQ2IGhkYw+KRazONloLIq1vvZWiFa+BJP2dchgybQ1MBYt8dCnjfD/z8AolmkfZ0NXA0JcvpgDt0Wdzd/Al45XFODSD4dG/wQCjOCiAcnRI0WaBrtMPb8D12KmAgvIHa2bpS3+IQUVhz6G94nasLalwD8Dp1imgo5ukSulH/NjuQGUywrdA78JQch7yGLmB8TmeQONCS6CbPgRWDSGu5Z/vAF+CkNfTS1mfXtXya1TL9dHqCXQIaLmwm/DBFJe7znT09PMuYl7upfXGdLLc1K7/7p58/+yOWNUccTYtVhS+QgsaPaBcPE5BJd/gndoHDTYlpHHBeB36oC89drZCirObA8VixkltmldmwkE6Wnm3MSmiEzn6Wkmb3rMfPjPP7D4oK3u0/78Z5FX9jhMsVq551o79/5iRDo0gomvAs818liR8ad1PXVa12H5qA89AKqVf2BxrYwCw5lrPieHD31C2jub5OUXk2CCAw7L5UNwcUxMQKHLCjTAKvsPct2Om5Bkq24aqW859LkH8ggsDB1k3uli59/v/jqMYO9Rvj2AmWFHR0BefglMMhza0LKGMzD/hQDUgRyj2fpBl8l12zdL5K9HpuwBVHTvv0r7tUb5AZb6bVoMYEFL8lv3zINu0o/AsBM9CTCMWAbBHCEOATXB1Y7pvU4WcZk5/PXfZTRLy6Cq6ufke09+VsHFehq1bb++TR/Va+CzQjK4EXe/5MvWLoerSeyXDPdBAVCwpOvFlxQqRHBhJrZnt7M4TOU8MzPzUYe4VaG4gS6FatGetfK97ddjaJyLa47RrB+NIQh8PwTOClGXgVEsgsrIdi5f+zOs+l8Bwahj7UuzJz5E//mDgDVcPX9lt8iB/Y7euj+HRdbWMZqNtiakfvAc8F2PSmTHYV1Do7aE+UobONf2C6jYE6gL33b/gUV+KgWqdX+AT6oLoOnARWhnhwcDKM669JhPRSCPxf/XXhHZS01PHPuqZ7SW5of9E3CNZj8mVbJLrtl+loIr4oojTM4Sxn7CFbuB9enfUKhakpNj8h93VUuyGvsl130UVilw323R94MTCCg9YYygp7hI1RQaOpB6vQEDCA6H1PrkOp03v97kgx/HnpL6V1CbqWgCv7hevrttsSy0Ilq7EgtQ2Wump33QW6kq9B1YpiMvvW8YhJ+PqdO0Ds9+yYoj/Ojam56kHqYHmgRwMaZFzVtvOuAaNtzBlR/B5bSAGqPYGAFbi9QPuVq+t+NfJJqcJpEJ+4QuLrlDWjmkeqBvQ6HZ4eGydcdLAO6DKqpPhI4SVZOp6OeARYHhAsekKZjwo8OiJ+Z16kbRAOLNV3nm5NElO5RhyvJLTHea3MiJ/iRq6v+3VFjPy7VPflxBxRmj2mNqK/7pf3IHltnh4fJ7P4IZ3zZoUg6Hdxp+pQ6oTFfqEOieKKBwzDh17AKLwyH/mR/meLJ/L7QN9jhDIvdB9CtTr0qMNneIiKEPhmH7lEfku9vnOoa+WIw3C9amP4oR+/AbzA1Y7Cxanlz++08CCI9DRbcWPgnIqGeWSnvBpR0L8JiYh/qPH+bTf6RREa8FNoFcAqKtoJ/B5bQFewZhO7141IaD3u9DJLFOZu+o1VUHP26np3Uu3k8vwDLSdCzRzFr7ZciiHgAQsPwBuyobfEW2LyVFokxjCCIee8BkQMV02v8RXNSPenk3zOYxwhpBKm/LFkw9TB6eDySY+03MsjIeu3I6qmTXYM+gwfYuWbLlNLULoHZtUYdGVtD8pzc+vfLefOnXvPem5zN5M6V3v9YzsChNp2Ibpemz7p0l4dpfqOeUJFSPnQ0wvTXo4ViR5FxLgYqnBlxpMTuGSnc02SK4OqBST3AZIwfTnvTYeUL3fk3P05dzlsf8DOa+no45a6QzXe4ZFKr6APjOv8o12y4v6p5BWlHvj6m0idMrb/Jma6S5Zu5Nvyc9vft5ZmDpEk3E0em+7N5rIX1eIdFWzGyVq6bgKfdAqmSCF1wpapUJXHgEh8NXXoILoBa/C1JN6+CyqBOUPI7t9AatxKzxLrn0vkp1bPdPODQeDCxdook4QqVZa2/D7GchZDjcL5mwQH7zFfQh5p0KKjc2YPOCy0vF+Koo5+KzXtkNfwz7HHBpAp/r2wALJdSNGyPUNE6DEuGzsuTJcY49JgTKzpYsvq18PivWHVjdpOlrfwvd9RmuM/787Jes4HIB6QUaW6Tgw4+Czb1IqTyZ+NdeFtn3btKR0pMZ85GhxsFvg5V39wyqHgWB6na5ZutMZSnoaIV9XKrQn2+yP/egfV2NNNJ0xjXDN0ql2S8Z0vR8BgLHK0pgxV0cOY/xnDAflU8tGIu+9aYzWRgCt0UJOF9znMH1bVjOZzt6L8vZM4h9zD2Drt3+LxIf97WUz9d8LWSbBYtcAZBrPm/7+noP8jsUS5XzoEc16+4mqR6+RSrqzkjtl8xCc/lnRUw+7zHTTEgde8Bz0LCIzLys/5oPFjPwkxCQDnn+2bPgYO1fwSTjOrh6G4Ya5pn+jDE0grpS5lXb9FUJP7VTIls+5Kw1gnL5wrDXvJz8xpj1oYFUzrt83dGSCMAZf81Y8FQHO+Pv7bkp0CCj95j3mZdujhl7yZSCCyDSYZCXcBzACwnAKLYGxqLxts2QPxwvd39zo8w/+ddQGDxHqR73Rwa3rMX59kc3RjBD44cw690JvusCHRqppVrKobGAfeaIEy5feyImfNg2pOooSNO7lmgK+GAt2lArnihxYkyAYeijAUYl9pjpaF4lt00/TX70lVfVWJSqwgvH/AE5T8eQ2AEzMw7n7jpdOqJxJWPIlC/XtPQCM92XMQ/ccbt7BtU1/QwiidWai+Kc96H6c0C+xh1W7fWQvzTBNVHxQGX6vhu4lGphjxnsLCrJKDZvmp4yw1KLGVBW9RsBd0oLxv4FIJyAOr+NZRXkx7ZsGviie/tnxvQ8uablcl9PecBv2VDj0D2DBl0i127bLpEnjtU26VIQBNLvkxCQ+v1XQJfqGHxNUEjHGthBHZ7eSQU4d7qTbChcLtLbMPaYSdgnyQ/Py7zHjHGntGDscxhaMHS3/re6asy0XYvBi/eFsQnpwdsscy0930DymHsdvha7fWEhu7J2HDZAfxYAm+bsSYih0fjDMHXoT2yeZervPc+WxmeZ6+bYe6+pS7Y0Nw+1PKfiq+dp1wzRFFC8OA5+Co72MfS1H1gtt5w7Xn54/otZ95gx7pTmjH5T4vvGw2nHFvVbZcDFupsO8B6bjjPXTOxtqzfNHDP2BpPONHOcLY+5tysvvdeg3dgzqKr+Llmy/SbNYvYMMvlzibvK7A4M3ptep2xpJq8pL/3ZmdLT09xzzgpH61INfSyYTMWMsYCDWV4Iin5JqDVfAFDN1PbopAJrlNmCDos2BI+TW2Th2FMByg3ujhrZ78tWZlGvweWTs2cQttNrugx81+MQS3xAh0blu3IbGv04ftIqJTOqC93BxtF+pTrafw6mYqNl1bl36CyJ03AytbkE406JM6xF4z8Jge6vAK6wTgDcvWNzKaaEefhxO0NjVd2pON4li7dOUXDx3ZC37CUwmwnmdZrYpDP2ppljE5t86efp96XnY34TzDFjSh//Bv/kvAYd4aIFGFzgj3vMdGCPmSHbR8stU59z/E4BUI4fiNwr43WntHDcl8G/rJJqgIu+rfwtpfe2EbNG1zKouv5eiWxbqv1Au4JeZo0GDObFegvNdC1bPnNvT/eZdJOPsTfNlM09oddgys7ruVEI5hxIsDj0VYKfAwFvb54Jby4XYg3NWeoYiMtFvgCqqZDaLRp/OcB1JZakKOci3YLDD1Ta7/9JWgbBRq6TlkGD5sjiJx+V2X/2n2VQDu8/IC17V2L42A1xA/z64KUXKujQR5eL2F4tFn0RBHI8+KnVOvSpNkWOQ1+2+tGdEgP5s0Xjr8WOW/8GgS9oozqOKCZFzlbL7NccXjfoWAY1fEzqq3fJVds+4YhZImARXF9k3lL89MGwXqhPQH56UQcsts6CuOE93ahR5UF5rimXXshhco+Z9pY1MrTzJLn5vB3gHypSi7PejhrIsUqzAVLKha4afytEF1NVpyug6hLFocoDqT/vdWR7mDU2O5ZBVdUb5KqtEYey4+Pxqj87n9JAn5i/+wkdBGdJZ9WUFyCQxA6rHS/hCyfDxSWd/AwdOuurgHYEFNw7sMfMLZ+frmrOpCrc17lQgcMqeZNF434LmdhkDDHc8zAEgB8iM0b2P3eOhWVQtD0J58FXy5VPbpBZ25oo83r++TfyqxyQ5/fgLOlwEfrm818Vq3U8KNc2LEI74BrYwwBNDH0sK9b5GmZ9p4FKrdJZTr6Gvt7qZ6T0V47ZBHP5SRCr7JMwpfQ+B5f71euXzaGRE522/di0oP4TUpvcJXM3f/z1mUdAhxvB5jDvv+BUiovQpCA3f+WADN1xCuRJD6oEnIx2/4KjdVCFPWY6WtZJdcuJcvO5m3XoUyZbFQn7V3Jf7zJS+oVjnsIEcTx2Z31FKqAtQUGqUmXi32f/rJjWCY1lHeFgCb/caTYGqnsY+OFHAnO3LGJXBMIWWBkeaU498MOPUyVTE4LLyI++dc+vAa4vYvji0EGpfPe85p70mGAM0CoCIR6dJ/953lI99patCUX+4bBICjbvsUFwB/kIpPRj8KL44fhzSCGgGBh3Axn41aQdsGqHWPZbr99+zLgT3gsNGvrtROuBBF5QrzIvLbPQP6jzwWDxOvr41t2rAK5LIWvijIp5s5FdKi9j6KvlUsVbYECnQpTwmA59o6fZUHArPZtJptfwXv8IboT68Bk6xPgRXClg4cALLvZiEjIVKDraiXBo2PB6qR9xmG1z59kMr7PQGMpYPup7MFCcocqRB91y7mUA1VVYLOVyDypuPCBrS1EmYwam47OiFL2zZSPoG4Y+BVWFOg7xA6hYTYKKlJOU66oJZ0rr/rtTS0CHgpReuxs/jmVQCPywI0JxztlC34SDKZapGgWN02H+RaB963ffxHreDzGzwteC3bNtBSTvZZOgkIehjzxkLBqRH5y7WIswWqmmPD/FNIfnFsUMS7bDYKRxBgSqFEVwKOm5T5i/WKELROxl/W7R06RW+g+KJXZnTIYdNVzqh9ONBprjVUEqVj0zPQd1660TIZB7GIaXkAv9+2+mADy3Y2gcgoVTp6E0dCCgOg5g1pe8WH4wbQNkLQHhHjMEpJ8DBY0RvjK8osg27HvduACCYjNcH0zJi90W1Ayd7DyVkbGtzAiswwAsfBeHELCchhnqM+OuRqkIXoD2noEL8LxvvY3GPCTh2B2yYnq7sx3ITH75bo84t/v210uVl2ybBf5wBfhDNAvrpqXeUUN70O1Gwt0w8OnAOhIUa8ShCiwio7dZXW/X/YsuUOVNDlVevA1uBCp+4Qz5HPd1NlyamucCrA53KDykgcXu5Rc+c3VI9g5KymhspE3m//UR2FptBumw+3mV5j0M+KlGHBHZ+ikM7/dj32sMP7EYKBcFqsUP2YCFncu681igWLQcTx8KWUZPzE62awNtLcru6bEDLfrQvJ+m8CpQ3X4q3tzD0PqogXYt5XjFB1cmYPXIvPtvKCw9k+onCBopfWT8ZkjksLzV+aYadqSk9KgsX3gx/k2/pD/LpPs8LgMr/QUZXfprJ2Bh3sK+123P6/JWIVWK0utgzg2ozPkhNL6UgWVemjemAJU8VwT7XjcMHQ8h8eNqqFEIlaKeyB9ngb0FD/ByyN1baXm9fgh9A3ltd26FRWysnVqcHWJW/OR9kNJ/GoLU4vBcBilGzGBil8/iAhkFpEMpIPXhrLBMsbJBzBhqKLAmcjN17HsNXXpHjdu8+mwl9P9apk9eKRR+0p9szvU6HlnK2G1xGVi9vXqvoUZk4oUA140w8KW2B2hGARfWDThYP++x1tckmNjNo9dK/ONWKdN3UeKa+fTxRtecC+pXbZkPcH0PqsPU5GdX5v8DZakMZgg0cZrkXYfC4Yf7bkkn/x3idMf775eAigBEXGFYcgo3U79EQtXQ7cSCKXX6CxIMunoo3KUOPVwtaXIZWH3qfi5Yu4YakQk/go3A51XafUi4U+pTQweWGSpIZWD1pwtVrwtS+iUT1ko8/nFVJaKtZKENNQyFMnF/6l7Ye2wrCIc62GukDKz+drSR0l8z6TG4s5yIPXbew9BIXXqKI7oYbgOCvsbeepl7vWneY/JfDMqH4bhEMRj2hAXjZxCsp8vAcl5J/34NuK4av1OsTpjPte+GQa5jqNG/ErvuUjDhVbmY6bqQ6cgFU6ZLRUyzEdRnbFIeKANroB1vloAiH31VAlEsAbVsd6T0/bZw8tQoJ1Qhvy8m99ysPZxs2d8mVujnZWB5XmO/D7kEREONyEcPyMkTTsEuFX+ERir2boRdZSGDUrVCPqAPZYMFCNbX84Yluy+qe7MMrD70XdasxlCDAtVrJv4vWP+sgadkDIsElzI9uN0gIdfYPNGlXOnFmMsljdFeLNAHmxorE/v33bv7oqalaK4/rWhL2k8DeThFEcaf1ZKJ0+HY4wegXOS5YAuI31zx5OJI8cib9L5UImpojgdS2QHfS0DFrFA4GKxrrEjs3/9fuy8e9DktdbFaQgz4AeUCvD2g5nOuO6VrJv0fDItL4E4JogjVsOUScm7BYMfEB93FC+b/oIuFTEiAcMYx+wsGahvDyVjnq4nmfReDUn1RH6pGKlayPBQW4hUYO0qamV0z8WpYMV0KhUH0tY4Q+ZfSG/AZnBUmTuDTiFsVNcFgbWPIjna8YLfun1H38uvHgVLdnvJN5rbdF9OJQrxbn5RJf1Yw1IDqzZVPfhEbiP5aN1BLUkG9F0MNBQt+UiBxj71rhdCaHno07QoLt1YIgGA7M9BbGC1zM5Bk+4GnwUIt3XNxw69cKixnPmyHNk121Yvcji9TrMIiEEtA6HAqDV4z8U5I6T+hzmyD3GW9Hx5vCDIGAzZzrIn5/eFwhxITVlVdKFBVF7Q7W59IdLSev/viprF7vt74S4JqEtsFlKWDijUpU6z8vo+eS0sZamyBlN7aBEONejXUsGCoYQDjvVvT8GNAZGaEXoqVUvTLH8VS/snCnmvVDQFa/tjR1sdsO3AdwHS/Wz0LgAptnTmJZkGZaq7ZysDyvsxCHxtwLdoxCiPMn2AgewQc2mb2eJMJWAQV0xHzlXZpkA4YWCiNQ5kdCtQ0WuCf4NmscwOmsd/f8/VBD2u3gDKduUmCmahTpm4rAytTrxQyLWW/uGUoKNejMNQ4CTr13cFF8GggenDgpVY89wLr6BHgsQ7DOjidTff5dbI0DnlhAEqSHdjNNh5fiw3Llu75+pC/IB0q2aqoAHcE3XkovZblp881yVJW+VKuPWDcKV36QqU0qJT+dPiN6AIXX7cGHPA4G7COGiF1AFaffDfQsw55KMsCoBok2bqfT7sTz7l+zzcGbdNHc+uVZzZh8jGZwOtzKAOrz12Wpxu8LgkWbr0XUvopEKimGWp4gEUJmAGZl2L1DVgsAYAKhAO19ZJs3o9j+Zkkg8v3XFL/rLaM9frwmbZulj6AppaBNYDOG/CtpApcAmJYuPUnMNS4SNr2gmO2HP/0TDdgMjEBRmDxkjLvOVEs3pWA92hQqDpJtuxrR7k/hl/AFS9f3PQirolAZCBvI9XURxP7/1MGVv/7Lj93upJqLWzh1qWQ0s/pcqdECT6umKGQxwAV05R5j9L8C8A6vMehUAFlBcNhq7oGgNp/wLKTt8bDVatevbDmNT6TIoOtg15MpvyFMTEPoQysPHTigIugTzG5Gowy9OoXPPEdMPTXwykwAUVqxi2KFUwKMgUWKRYYpWhchn/wGGCxAU5BkLWLeQegrATW8cJWVTUB9Q6YqlsqrI4f/P3iEW+zvpNus8Nb3wAVM6sEA25E9wLKwOreHyU8gycf405pwdavwZ3S7ZIAP5+EOyUbUvoUuFxQxeLY76FSjjj+WC+giK6kFa4IWxVVYMr3vQ5ErgzG965+ceZxyqErhXpjUsEAZTqwDCzTE36JzYxx/tZzYFS2DkpzdMHZiRcF7866L5DjFhJE7IhRx8CNfi135COg7EBFdQig4izvJSwdLU80t/7k1SuOamfTCk2h0ruvDKz0HvHDuRGkLtx2OpistXZlw1C7+T2w3xBWwV9yuKpKhh0xApuIYJ+gZDJgVdUGaMQAQD0HfN2w59Wmnxu5kwOoxaBQEfJbRQtlYBWtq/v4IJdyjbx9b1Pzu3uvxXB4QbCmqT4MnqmiBgYL4Mq4aZ7diQleLPokhKM37P5G453mKTrkzcCyi6OuY5KLFpeBVbSu7seDPLKuCffZw5rfjU6OJ2LjIQyFm2S7E2B7MRBI/OmlbwzdbEpXQPWyjmfyFjL+/4JPu45FLkyEAAAAAElFTkSuQmCC');\n\tbackground-size: 24px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: left center;\n\tpadding-left: 36px;\n\tfont-size: 20px;\n\tletter-spacing: -0.04rem;\n\tfont-weight: 400;\n\tcolor: white;\n\ttext-decoration: none;\n}\n\n.message-container {\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin: 0 30px;\n}\n\n.message {\n\tfont-weight: 300;\n\tfont-size: 1.4rem;\n}\n\nbody.error .message {\n\tdisplay: none;\n}\n\nbody.error .error-message {\n\tdisplay: block;\n}\n\n.error-message {\n\tdisplay: none;\n\tfont-weight: 300;\n\tfont-size: 1.3rem;\n}\n\n.error-text {\n\tcolor: red;\n\tfont-size: 1rem;\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Light\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.woff2\") format(\"woff2\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.svg#web\") format(\"svg\");\n\tfont-weight: 200\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Semilight\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.woff2\") format(\"woff2\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.svg#web\") format(\"svg\");\n\tfont-weight: 300\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.svg#web\") format(\"svg\");\n\tfont-weight: 400\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Semibold\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.svg#web\") format(\"svg\");\n\tfont-weight: 600\n}\n\n@font-face {\n\tfont-family: 'Segoe UI';\n\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.eot?#iefix\") format(\"embedded-opentype\");\n\tsrc: local(\"Segoe UI Bold\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.svg#web\") format(\"svg\");\n\tfont-weight: 700\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/media/index.html",
    "content": "<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n\t<meta charset=\"utf-8\" />\n\t<title>Microsoft Account - Sign In</title>\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"auth.css\" />\n</head>\n\n<body>\n\t<a class=\"branding\" href=\"https://code.visualstudio.com/\">\n\t\tVisual Studio Code\n\t</a>\n\t<div class=\"message-container\">\n\t\t<div class=\"message\">\n\t\t\tYou are signed in now and can close this page.\n\t\t</div>\n\t\t<div class=\"error-message\">\n\t\t\tAn error occurred while signing in:\n\t\t\t<div class=\"error-text\"></div>\n\t\t</div>\n\t</div>\n\t<script>\n\t\tvar search = window.location.search;\n\t\tvar error = (/[?&^]error=([^&]+)/.exec(search) || [])[1];\n\t\tif (error) {\n\t\t\tdocument.querySelector('.error-text')\n\t\t\t\t.textContent = decodeURIComponent(error);\n\t\t\tdocument.querySelector('body')\n\t\t\t\t.classList.add('error');\n\t\t}\n\t</script>\n</body>\n\n</html>\n"
  },
  {
    "path": "extensions/microsoft-authentication/package.json",
    "content": "{\n  \"name\": \"microsoft-authentication\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"0.0.1\",\n  \"engines\": {\n    \"vscode\": \"^1.42.0\"\n  },\n  \"icon\": \"media/icon.png\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"activationEvents\": [],\n  \"enabledApiProposals\": [\n    \"idToken\",\n    \"nativeWindowHandle\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"extensionKind\": [\n    \"ui\",\n    \"workspace\"\n  ],\n  \"contributes\": {\n    \"authentication\": [\n      {\n        \"label\": \"Microsoft\",\n        \"id\": \"microsoft\"\n      },\n      {\n        \"label\": \"Microsoft Sovereign Cloud\",\n        \"id\": \"microsoft-sovereign-cloud\"\n      }\n    ],\n    \"configuration\": [\n      {\n        \"title\": \"Microsoft Sovereign Cloud\",\n        \"properties\": {\n          \"microsoft-sovereign-cloud.environment\": {\n            \"type\": \"string\",\n            \"markdownDescription\": \"%microsoft-sovereign-cloud.environment.description%\",\n            \"enum\": [\n              \"ChinaCloud\",\n              \"USGovernment\",\n              \"custom\"\n            ],\n            \"enumDescriptions\": [\n              \"%microsoft-sovereign-cloud.environment.enumDescriptions.AzureChinaCloud%\",\n              \"%microsoft-sovereign-cloud.environment.enumDescriptions.AzureUSGovernment%\",\n              \"%microsoft-sovereign-cloud.environment.enumDescriptions.custom%\"\n            ]\n          },\n          \"microsoft-sovereign-cloud.customEnvironment\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true,\n            \"markdownDescription\": \"%microsoft-sovereign-cloud.customEnvironment.description%\",\n            \"properties\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"%microsoft-sovereign-cloud.customEnvironment.name.description%\"\n              },\n              \"portalUrl\": {\n                \"type\": \"string\",\n                \"description\": \"%microsoft-sovereign-cloud.customEnvironment.portalUrl.description%\"\n              },\n              \"managementEndpointUrl\": {\n                \"type\": \"string\",\n                \"description\": \"%microsoft-sovereign-cloud.customEnvironment.managementEndpointUrl.description%\"\n              },\n              \"resourceManagerEndpointUrl\": {\n                \"type\": \"string\",\n                \"description\": \"%microsoft-sovereign-cloud.customEnvironment.resourceManagerEndpointUrl.description%\"\n              },\n              \"activeDirectoryEndpointUrl\": {\n                \"type\": \"string\",\n                \"description\": \"%microsoft-sovereign-cloud.customEnvironment.activeDirectoryEndpointUrl.description%\"\n              },\n              \"activeDirectoryResourceId\": {\n                \"type\": \"string\",\n                \"description\": \"%microsoft-sovereign-cloud.customEnvironment.activeDirectoryResourceId.description%\"\n              }\n            },\n            \"required\": [\n              \"name\",\n              \"portalUrl\",\n              \"managementEndpointUrl\",\n              \"resourceManagerEndpointUrl\",\n              \"activeDirectoryEndpointUrl\",\n              \"activeDirectoryResourceId\"\n            ]\n          }\n        }\n      },\n      {\n        \"title\": \"Microsoft\",\n        \"properties\": {\n          \"microsoft-authentication.implementation\": {\n            \"type\": \"string\",\n            \"default\": \"msal\",\n            \"enum\": [\n              \"msal\",\n              \"classic\"\n            ],\n            \"enumDescriptions\": [\n              \"%microsoft-authentication.implementation.enumDescriptions.msal%\",\n              \"%microsoft-authentication.implementation.enumDescriptions.classic%\"\n            ],\n            \"markdownDescription\": \"%microsoft-authentication.implementation.description%\",\n            \"tags\": [\n              \"onExP\"\n            ]\n          }\n        }\n      }\n    ]\n  },\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"main\": \"./out/extension.js\",\n  \"browser\": \"./dist/browser/extension.js\",\n  \"scripts\": {\n    \"vscode:prepublish\": \"npm run compile\",\n    \"compile\": \"gulp compile-extension:microsoft-authentication\",\n    \"compile-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none\",\n    \"watch\": \"gulp watch-extension:microsoft-authentication\",\n    \"watch-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\",\n    \"@types/node-fetch\": \"^2.5.7\",\n    \"@types/randombytes\": \"^2.0.0\",\n    \"@types/sha.js\": \"^2.4.0\",\n    \"@types/uuid\": \"8.0.0\"\n  },\n  \"dependencies\": {\n    \"@azure/ms-rest-azure-env\": \"^2.0.0\",\n    \"@azure/msal-node\": \"^2.16.2\",\n    \"@azure/msal-node-extensions\": \"^1.5.0\",\n    \"@vscode/extension-telemetry\": \"^0.9.8\",\n    \"keytar\": \"file:./packageMocks/keytar\",\n    \"vscode-tas-client\": \"^0.1.84\"\n  },\n  \"overrides\": {\n    \"@azure/msal-node-runtime\": \"^0.18.1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/package.nls.json",
    "content": "{\n\t\"displayName\": \"Microsoft Account\",\n\t\"description\": \"Microsoft authentication provider\",\n\t\"signIn\": \"Sign In\",\n\t\"signOut\": \"Sign Out\",\n\t\"microsoft-authentication.implementation.description\": {\n\t\t\"message\": \"The authentication implementation to use for signing in with a Microsoft account.\\n\\n*NOTE: The `classic` implementation is deprecated and will be removed, along with this setting, in a future release. If only the `classic` implementation works for you, please [open an issue](command:workbench.action.openIssueReporter) and explain what you are trying to log in to.*\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='[(command:workbench.action.openIssueReporter)]'}\",\n\t\t\t\"The `command:` syntax will turn into a link. Do not translate it.\"\n\t\t]\n\t},\n\t\"microsoft-authentication.implementation.enumDescriptions.msal\": \"Use the Microsoft Authentication Library (MSAL) to sign in with a Microsoft account.\",\n\t\"microsoft-authentication.implementation.enumDescriptions.classic\": \"(deprecated) Use the classic authentication flow to sign in with a Microsoft account.\",\n\t\"microsoft-sovereign-cloud.environment.description\": {\n\t\t\"message\": \"The Sovereign Cloud to use for authentication. If you select `custom`, you must also set the `#microsoft-sovereign-cloud.customEnvironment#` setting.\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='`#microsoft-sovereign-cloud.customEnvironment#`'}\",\n\t\t\t\"The `#microsoft-sovereign-cloud.customEnvironment#` syntax will turn into a link. Do not translate it.\"\n\t\t]\n\t},\n\t\"microsoft-sovereign-cloud.environment.enumDescriptions.AzureChinaCloud\": \"Azure China\",\n\t\"microsoft-sovereign-cloud.environment.enumDescriptions.AzureUSGovernment\": \"Azure US Government\",\n\t\"microsoft-sovereign-cloud.environment.enumDescriptions.custom\": \"A custom Microsoft Sovereign Cloud\",\n\t\"microsoft-sovereign-cloud.customEnvironment.description\": {\n\t\t\"message\": \"The custom configuration for the Sovereign Cloud to use with the Microsoft Sovereign Cloud authentication provider. This along with setting `#microsoft-sovereign-cloud.environment#` to `custom` is required to use this feature.\",\n\t\t\"comment\": [\n\t\t\t\"{Locked='`#microsoft-sovereign-cloud.environment#`'}\",\n\t\t\t\"The `#microsoft-sovereign-cloud.environment#` syntax will turn into a link. Do not translate it.\"\n\t\t]\n\t},\n\t\"microsoft-sovereign-cloud.customEnvironment.name.description\": \"The name of the custom Sovereign Cloud.\",\n\t\"microsoft-sovereign-cloud.customEnvironment.portalUrl.description\": \"The portal URL for the custom Sovereign Cloud.\",\n\t\"microsoft-sovereign-cloud.customEnvironment.managementEndpointUrl.description\": \"The management endpoint for the custom Sovereign Cloud.\",\n\t\"microsoft-sovereign-cloud.customEnvironment.resourceManagerEndpointUrl.description\": \"The resource manager endpoint for the custom Sovereign Cloud.\",\n\t\"microsoft-sovereign-cloud.customEnvironment.activeDirectoryEndpointUrl.description\": \"The Active Directory endpoint for the custom Sovereign Cloud.\",\n\t\"microsoft-sovereign-cloud.customEnvironment.activeDirectoryResourceId.description\": \"The Active Directory resource ID for the custom Sovereign Cloud.\"\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/packageMocks/dpapi/dpapi.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nclass defaultDpapi {\n\tprotectData() {\n\t\tthrow new Error('Dpapi bindings unavailable');\n\t}\n\tunprotectData() {\n\t\tthrow new Error('Dpapi bindings unavailable');\n\t}\n}\nconst Dpapi = new defaultDpapi();\nexport { Dpapi };\n"
  },
  {
    "path": "extensions/microsoft-authentication/packageMocks/keytar/index.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexports.setPassword = () => Promise.resolve();\nexports.getPassword = () => Promise.resolve();\nexports.deletePassword = () => Promise.resolve();\n"
  },
  {
    "path": "extensions/microsoft-authentication/packageMocks/keytar/package.json",
    "content": "{\n  \"name\": \"keytar\",\n  \"version\": \"7.9.0\",\n  \"description\": \"OVERRIDE Keytar since we don't need the feature\",\n  \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node\",\n  \"main\": \"index.js\"\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/AADHelper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as path from 'path';\nimport { isSupportedEnvironment } from './common/uri';\nimport { IntervalTimer, raceCancellationAndTimeoutError, SequencerByKey } from './common/async';\nimport { generateCodeChallenge, generateCodeVerifier, randomUUID } from './cryptoUtils';\nimport { BetterTokenStorage, IDidChangeInOtherWindowEvent } from './betterSecretStorage';\nimport { LoopbackAuthServer } from './node/authServer';\nimport { base64Decode } from './node/buffer';\nimport fetch from './node/fetch';\nimport { UriEventHandler } from './UriEventHandler';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport { Environment } from '@azure/ms-rest-azure-env';\n\nconst redirectUrl = 'https://vscode.dev/redirect';\nconst defaultActiveDirectoryEndpointUrl = Environment.AzureCloud.activeDirectoryEndpointUrl;\nconst DEFAULT_CLIENT_ID = 'aebc6443-996d-45c2-90f0-388ff96faa56';\nconst DEFAULT_TENANT = 'organizations';\nconst MSA_TID = '9188040d-6c67-4c5b-b112-36a304b66dad';\nconst MSA_PASSTHRU_TID = 'f8cdef31-a31e-4b4a-93e4-5f571e91255a';\n\nconst enum MicrosoftAccountType {\n\tAAD = 'aad',\n\tMSA = 'msa',\n\tUnknown = 'unknown'\n}\n\ninterface IToken {\n\taccessToken?: string; // When unable to refresh due to network problems, the access token becomes undefined\n\tidToken?: string; // depending on the scopes can be either supplied or empty\n\n\texpiresIn?: number; // How long access token is valid, in seconds\n\texpiresAt?: number; // UNIX epoch time at which token will expire\n\trefreshToken: string;\n\n\taccount: {\n\t\tlabel: string;\n\t\tid: string;\n\t\ttype: MicrosoftAccountType;\n\t};\n\tscope: string;\n\tsessionId: string; // The account id + the scope\n}\n\nexport interface IStoredSession {\n\tid: string;\n\trefreshToken: string;\n\tscope: string; // Scopes are alphabetized and joined with a space\n\taccount: {\n\t\tlabel: string;\n\t\tid: string;\n\t};\n\tendpoint: string | undefined;\n}\n\nexport interface ITokenResponse {\n\taccess_token: string;\n\texpires_in: number;\n\text_expires_in: number;\n\trefresh_token: string;\n\tscope: string;\n\ttoken_type: string;\n\tid_token?: string;\n}\n\nexport interface IMicrosoftTokens {\n\taccessToken: string;\n\tidToken?: string;\n}\n\ninterface IScopeData {\n\toriginalScopes?: string[];\n\tscopes: string[];\n\tscopeStr: string;\n\tscopesToSend: string;\n\tclientId: string;\n\ttenant: string;\n}\n\nexport const REFRESH_NETWORK_FAILURE = 'Network failure';\n\nexport class AzureActiveDirectoryService {\n\t// For details on why this is set to 2/3... see https://github.com/microsoft/vscode/issues/133201#issuecomment-966668197\n\tprivate static REFRESH_TIMEOUT_MODIFIER = 1000 * 2 / 3;\n\tprivate static POLLING_CONSTANT = 1000 * 60 * 30;\n\n\tprivate _tokens: IToken[] = [];\n\tprivate _refreshTimeouts: Map<string, NodeJS.Timeout> = new Map<string, NodeJS.Timeout>();\n\tprivate _sessionChangeEmitter: vscode.EventEmitter<vscode.AuthenticationProviderAuthenticationSessionsChangeEvent> = new vscode.EventEmitter<vscode.AuthenticationProviderAuthenticationSessionsChangeEvent>();\n\n\t// Used to keep track of current requests when not using the local server approach.\n\tprivate _pendingNonces = new Map<string, string[]>();\n\tprivate _codeExchangePromises = new Map<string, Promise<vscode.AuthenticationSession>>();\n\tprivate _codeVerfifiers = new Map<string, string>();\n\n\t// Used to keep track of tokens that we need to store but can't because we aren't the focused window.\n\tprivate _pendingTokensToStore: Map<string, IToken> = new Map<string, IToken>();\n\n\t// Used to sequence requests to the same scope.\n\tprivate _sequencer = new SequencerByKey<string>();\n\n\tconstructor(\n\t\tprivate readonly _logger: vscode.LogOutputChannel,\n\t\t_context: vscode.ExtensionContext,\n\t\tprivate readonly _uriHandler: UriEventHandler,\n\t\tprivate readonly _tokenStorage: BetterTokenStorage<IStoredSession>,\n\t\tprivate readonly _telemetryReporter: TelemetryReporter,\n\t\tprivate readonly _env: Environment\n\t) {\n\t\t_context.subscriptions.push(this._tokenStorage.onDidChangeInOtherWindow((e) => this.checkForUpdates(e)));\n\t\t_context.subscriptions.push(vscode.window.onDidChangeWindowState(async (e) => e.focused && await this.storePendingTokens()));\n\n\t\t// In the event that a window isn't focused for a long time, we should still try to store the tokens at some point.\n\t\tconst timer = new IntervalTimer();\n\t\ttimer.cancelAndSet(\n\t\t\t() => !vscode.window.state.focused && this.storePendingTokens(),\n\t\t\t// 5 hours + random extra 0-30 seconds so that each window doesn't try to store at the same time\n\t\t\t(18000000) + Math.floor(Math.random() * 30000));\n\t\t_context.subscriptions.push(timer);\n\t}\n\n\tpublic async initialize(): Promise<void> {\n\t\tthis._logger.trace('Reading sessions from secret storage...');\n\t\tconst sessions = await this._tokenStorage.getAll(item => this.sessionMatchesEndpoint(item));\n\t\tthis._logger.trace(`Got ${sessions.length} stored sessions`);\n\n\t\tconst refreshes = sessions.map(async session => {\n\t\t\tthis._logger.trace(`[${session.scope}] '${session.id}' Read stored session`);\n\t\t\tconst scopes = session.scope.split(' ');\n\t\t\tconst scopeData: IScopeData = {\n\t\t\t\tscopes,\n\t\t\t\tscopeStr: session.scope,\n\t\t\t\t// filter our special scopes\n\t\t\t\tscopesToSend: scopes.filter(s => !s.startsWith('VSCODE_')).join(' '),\n\t\t\t\tclientId: this.getClientId(scopes),\n\t\t\t\ttenant: this.getTenantId(scopes),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait this.refreshToken(session.refreshToken, scopeData, session.id);\n\t\t\t} catch (e) {\n\t\t\t\t// If we aren't connected to the internet, then wait and try to refresh again later.\n\t\t\t\tif (e.message === REFRESH_NETWORK_FAILURE) {\n\t\t\t\t\tthis._tokens.push({\n\t\t\t\t\t\taccessToken: undefined,\n\t\t\t\t\t\trefreshToken: session.refreshToken,\n\t\t\t\t\t\taccount: {\n\t\t\t\t\t\t\t...session.account,\n\t\t\t\t\t\t\ttype: MicrosoftAccountType.Unknown\n\t\t\t\t\t\t},\n\t\t\t\t\t\tscope: session.scope,\n\t\t\t\t\t\tsessionId: session.id\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvscode.window.showErrorMessage(vscode.l10n.t('You have been signed out because reading stored authentication information failed.'));\n\t\t\t\t\tthis._logger.error(e);\n\t\t\t\t\tawait this.removeSessionByIToken({\n\t\t\t\t\t\taccessToken: undefined,\n\t\t\t\t\t\trefreshToken: session.refreshToken,\n\t\t\t\t\t\taccount: {\n\t\t\t\t\t\t\t...session.account,\n\t\t\t\t\t\t\ttype: MicrosoftAccountType.Unknown\n\t\t\t\t\t\t},\n\t\t\t\t\t\tscope: session.scope,\n\t\t\t\t\t\tsessionId: session.id\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst result = await Promise.allSettled(refreshes);\n\t\tfor (const res of result) {\n\t\t\tif (res.status === 'rejected') {\n\t\t\t\tthis._logger.error(`Failed to initialize stored data: ${res.reason}`);\n\t\t\t\tthis.clearSessions();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (const token of this._tokens) {\n\t\t\t/* __GDPR__\n\t\t\t\t\"login\" : {\n\t\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\t\"comment\": \"Used to determine the usage of the Microsoft Auth Provider.\",\n\t\t\t\t\t\"scopes\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what scope combinations are being requested.\" },\n\t\t\t\t\t\"accountType\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what account types are being used.\" }\n\t\t\t\t}\n\t\t\t*/\n\t\t\tthis._telemetryReporter.sendTelemetryEvent('account', {\n\t\t\t\t// Get rid of guids from telemetry.\n\t\t\t\tscopes: JSON.stringify(token.scope.replace(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/i, '{guid}').split(' ')),\n\t\t\t\taccountType: token.account.type\n\t\t\t});\n\t\t}\n\t}\n\n\t//#region session operations\n\n\tpublic get onDidChangeSessions(): vscode.Event<vscode.AuthenticationProviderAuthenticationSessionsChangeEvent> {\n\t\treturn this._sessionChangeEmitter.event;\n\t}\n\n\tpublic getSessions(scopes?: string[], account?: vscode.AuthenticationSessionAccountInformation): Promise<vscode.AuthenticationSession[]> {\n\t\tif (!scopes) {\n\t\t\tthis._logger.info('Getting sessions for all scopes...');\n\t\t\tconst sessions = this._tokens\n\t\t\t\t.filter(token => !account?.label || token.account.label === account.label)\n\t\t\t\t.map(token => this.convertToSessionSync(token));\n\t\t\tthis._logger.info(`Got ${sessions.length} sessions for all scopes${account ? ` for account '${account.label}'` : ''}...`);\n\t\t\treturn Promise.resolve(sessions);\n\t\t}\n\n\t\tlet modifiedScopes = [...scopes];\n\t\tif (!modifiedScopes.includes('openid')) {\n\t\t\tmodifiedScopes.push('openid');\n\t\t}\n\t\tif (!modifiedScopes.includes('email')) {\n\t\t\tmodifiedScopes.push('email');\n\t\t}\n\t\tif (!modifiedScopes.includes('profile')) {\n\t\t\tmodifiedScopes.push('profile');\n\t\t}\n\t\tif (!modifiedScopes.includes('offline_access')) {\n\t\t\tmodifiedScopes.push('offline_access');\n\t\t}\n\t\tmodifiedScopes = modifiedScopes.sort();\n\n\t\tconst modifiedScopesStr = modifiedScopes.join(' ');\n\t\tconst clientId = this.getClientId(scopes);\n\t\tconst scopeData: IScopeData = {\n\t\t\tclientId,\n\t\t\toriginalScopes: scopes,\n\t\t\tscopes: modifiedScopes,\n\t\t\tscopeStr: modifiedScopesStr,\n\t\t\t// filter our special scopes\n\t\t\tscopesToSend: modifiedScopes.filter(s => !s.startsWith('VSCODE_')).join(' '),\n\t\t\ttenant: this.getTenantId(scopes),\n\t\t};\n\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] Queued getting sessions` + account ? ` for ${account?.label}` : '');\n\t\treturn this._sequencer.queue(modifiedScopesStr, () => this.doGetSessions(scopeData, account));\n\t}\n\n\tprivate async doGetSessions(scopeData: IScopeData, account?: vscode.AuthenticationSessionAccountInformation): Promise<vscode.AuthenticationSession[]> {\n\t\tthis._logger.info(`[${scopeData.scopeStr}] Getting sessions` + account ? ` for ${account?.label}` : '');\n\n\t\tconst matchingTokens = this._tokens\n\t\t\t.filter(token => token.scope === scopeData.scopeStr)\n\t\t\t.filter(token => !account?.label || token.account.label === account.label);\n\t\t// If we still don't have a matching token try to get a new token from an existing token by using\n\t\t// the refreshToken. This is documented here:\n\t\t// https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#refresh-the-access-token\n\t\t// \"Refresh tokens are valid for all permissions that your client has already received consent for.\"\n\t\tif (!matchingTokens.length) {\n\t\t\t// Get a token with the correct client id and account.\n\t\t\tlet token: IToken | undefined;\n\t\t\tfor (const t of this._tokens) {\n\t\t\t\t// No refresh token, so we can't make a new token from this session\n\t\t\t\tif (!t.refreshToken) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Need to make sure the account matches if we were provided one\n\t\t\t\tif (account?.label && t.account.label !== account.label) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// If the client id is the default client id, then check for the absence of the VSCODE_CLIENT_ID scope\n\t\t\t\tif (scopeData.clientId === DEFAULT_CLIENT_ID && !t.scope.includes('VSCODE_CLIENT_ID')) {\n\t\t\t\t\ttoken = t;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// If the client id is not the default client id, then check for the matching VSCODE_CLIENT_ID scope\n\t\t\t\tif (scopeData.clientId !== DEFAULT_CLIENT_ID && t.scope.includes(`VSCODE_CLIENT_ID:${scopeData.clientId}`)) {\n\t\t\t\t\ttoken = t;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (token) {\n\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Found a matching token with a different scopes '${token.scope}'. Attempting to get a new session using the existing session.`);\n\t\t\t\ttry {\n\t\t\t\t\tconst itoken = await this.doRefreshToken(token.refreshToken, scopeData);\n\t\t\t\t\tthis._sessionChangeEmitter.fire({ added: [this.convertToSessionSync(itoken)], removed: [], changed: [] });\n\t\t\t\t\tmatchingTokens.push(itoken);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthis._logger.error(`[${scopeData.scopeStr}] Attempted to get a new session using the existing session with scopes '${token.scope}' but it failed due to: ${err.message ?? err}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._logger.info(`[${scopeData.scopeStr}] Got ${matchingTokens.length} sessions`);\n\t\tconst results = await Promise.allSettled(matchingTokens.map(token => this.convertToSession(token, scopeData)));\n\t\treturn results\n\t\t\t.filter(result => result.status === 'fulfilled')\n\t\t\t.map(result => (result as PromiseFulfilledResult<vscode.AuthenticationSession>).value);\n\t}\n\n\tpublic createSession(scopes: string[], account?: vscode.AuthenticationSessionAccountInformation): Promise<vscode.AuthenticationSession> {\n\t\tlet modifiedScopes = [...scopes];\n\t\tif (!modifiedScopes.includes('openid')) {\n\t\t\tmodifiedScopes.push('openid');\n\t\t}\n\t\tif (!modifiedScopes.includes('email')) {\n\t\t\tmodifiedScopes.push('email');\n\t\t}\n\t\tif (!modifiedScopes.includes('profile')) {\n\t\t\tmodifiedScopes.push('profile');\n\t\t}\n\t\tif (!modifiedScopes.includes('offline_access')) {\n\t\t\tmodifiedScopes.push('offline_access');\n\t\t}\n\t\tmodifiedScopes = modifiedScopes.sort();\n\t\tconst scopeData: IScopeData = {\n\t\t\toriginalScopes: scopes,\n\t\t\tscopes: modifiedScopes,\n\t\t\tscopeStr: modifiedScopes.join(' '),\n\t\t\t// filter our special scopes\n\t\t\tscopesToSend: modifiedScopes.filter(s => !s.startsWith('VSCODE_')).join(' '),\n\t\t\tclientId: this.getClientId(scopes),\n\t\t\ttenant: this.getTenantId(scopes),\n\t\t};\n\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] Queued creating session`);\n\t\treturn this._sequencer.queue(scopeData.scopeStr, () => this.doCreateSession(scopeData, account));\n\t}\n\n\tprivate async doCreateSession(scopeData: IScopeData, account?: vscode.AuthenticationSessionAccountInformation): Promise<vscode.AuthenticationSession> {\n\t\tthis._logger.info(`[${scopeData.scopeStr}] Creating session` + account ? ` for ${account?.label}` : '');\n\n\t\tconst runsRemote = vscode.env.remoteName !== undefined;\n\t\tconst runsServerless = vscode.env.remoteName === undefined && vscode.env.uiKind === vscode.UIKind.Web;\n\n\t\tif (runsServerless && this._env.activeDirectoryEndpointUrl !== defaultActiveDirectoryEndpointUrl) {\n\t\t\tthrow new Error('Sign in to non-public clouds is not supported on the web.');\n\t\t}\n\n\t\treturn await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: vscode.l10n.t('Signing in to your account...'), cancellable: true }, async (_progress, token) => {\n\t\t\tif (runsRemote || runsServerless) {\n\t\t\t\treturn await this.createSessionWithoutLocalServer(scopeData, account?.label, token);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\treturn await this.createSessionWithLocalServer(scopeData, account?.label, token);\n\t\t\t} catch (e) {\n\t\t\t\tthis._logger.error(`[${scopeData.scopeStr}] Error creating session: ${e}`);\n\n\t\t\t\t// If the error was about starting the server, try directly hitting the login endpoint instead\n\t\t\t\tif (e.message === 'Error listening to server' || e.message === 'Closed' || e.message === 'Timeout waiting for port') {\n\t\t\t\t\treturn this.createSessionWithoutLocalServer(scopeData, account?.label, token);\n\t\t\t\t}\n\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate async createSessionWithLocalServer(scopeData: IScopeData, loginHint: string | undefined, token: vscode.CancellationToken): Promise<vscode.AuthenticationSession> {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] Starting login flow with local server`);\n\t\tconst codeVerifier = generateCodeVerifier();\n\t\tconst codeChallenge = await generateCodeChallenge(codeVerifier);\n\t\tconst qs = new URLSearchParams({\n\t\t\tresponse_type: 'code',\n\t\t\tresponse_mode: 'query',\n\t\t\tclient_id: scopeData.clientId,\n\t\t\tredirect_uri: redirectUrl,\n\t\t\tscope: scopeData.scopesToSend,\n\t\t\tcode_challenge_method: 'S256',\n\t\t\tcode_challenge: codeChallenge,\n\t\t});\n\t\tif (loginHint) {\n\t\t\tqs.set('login_hint', loginHint);\n\t\t} else {\n\t\t\tqs.set('prompt', 'select_account');\n\t\t}\n\t\tconst loginUrl = new URL(`${scopeData.tenant}/oauth2/v2.0/authorize?${qs.toString()}`, this._env.activeDirectoryEndpointUrl).toString();\n\t\tconst server = new LoopbackAuthServer(path.join(__dirname, '../media'), loginUrl);\n\t\tawait server.start();\n\n\t\tlet codeToExchange;\n\t\ttry {\n\t\t\tvscode.env.openExternal(vscode.Uri.parse(`http://127.0.0.1:${server.port}/signin?nonce=${encodeURIComponent(server.nonce)}`));\n\t\t\tconst { code } = await raceCancellationAndTimeoutError(server.waitForOAuthResponse(), token, 1000 * 60 * 5); // 5 minutes\n\t\t\tcodeToExchange = code;\n\t\t} finally {\n\t\t\tsetTimeout(() => {\n\t\t\t\tvoid server.stop();\n\t\t\t}, 5000);\n\t\t}\n\n\t\tconst session = await this.exchangeCodeForSession(codeToExchange, codeVerifier, scopeData);\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${session.id}' Sending change event for added session`);\n\t\tthis._sessionChangeEmitter.fire({ added: [session], removed: [], changed: [] });\n\t\tthis._logger.info(`[${scopeData.scopeStr}] '${session.id}' session successfully created!`);\n\t\treturn session;\n\t}\n\n\tprivate async createSessionWithoutLocalServer(scopeData: IScopeData, loginHint: string | undefined, token: vscode.CancellationToken): Promise<vscode.AuthenticationSession> {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] Starting login flow without local server`);\n\t\tlet callbackUri = await vscode.env.asExternalUri(vscode.Uri.parse(`${vscode.env.uriScheme}://vscode.microsoft-authentication`));\n\t\tconst nonce = generateCodeVerifier();\n\t\tconst callbackQuery = new URLSearchParams(callbackUri.query);\n\t\tcallbackQuery.set('nonce', encodeURIComponent(nonce));\n\t\tcallbackUri = callbackUri.with({\n\t\t\tquery: callbackQuery.toString()\n\t\t});\n\t\tconst state = encodeURIComponent(callbackUri.toString(true));\n\t\tconst codeVerifier = generateCodeVerifier();\n\t\tconst codeChallenge = await generateCodeChallenge(codeVerifier);\n\t\tconst signInUrl = new URL(`${scopeData.tenant}/oauth2/v2.0/authorize`, this._env.activeDirectoryEndpointUrl);\n\t\tconst qs = new URLSearchParams({\n\t\t\tresponse_type: 'code',\n\t\t\tclient_id: encodeURIComponent(scopeData.clientId),\n\t\t\tresponse_mode: 'query',\n\t\t\tredirect_uri: redirectUrl,\n\t\t\tstate,\n\t\t\tscope: scopeData.scopesToSend,\n\t\t\tcode_challenge_method: 'S256',\n\t\t\tcode_challenge: codeChallenge,\n\t\t});\n\t\tif (loginHint) {\n\t\t\tqs.append('login_hint', loginHint);\n\t\t} else {\n\t\t\tqs.append('prompt', 'select_account');\n\t\t}\n\t\tsignInUrl.search = qs.toString();\n\t\tconst uri = vscode.Uri.parse(signInUrl.toString());\n\t\tvscode.env.openExternal(uri);\n\n\n\t\tconst existingNonces = this._pendingNonces.get(scopeData.scopeStr) || [];\n\t\tthis._pendingNonces.set(scopeData.scopeStr, [...existingNonces, nonce]);\n\n\t\t// Register a single listener for the URI callback, in case the user starts the login process multiple times\n\t\t// before completing it.\n\t\tlet existingPromise = this._codeExchangePromises.get(scopeData.scopeStr);\n\t\tlet inputBox: vscode.InputBox | undefined;\n\t\tif (!existingPromise) {\n\t\t\tif (isSupportedEnvironment(callbackUri)) {\n\t\t\t\texistingPromise = this.handleCodeResponse(scopeData);\n\t\t\t} else {\n\t\t\t\tinputBox = vscode.window.createInputBox();\n\t\t\t\texistingPromise = this.handleCodeInputBox(inputBox, codeVerifier, scopeData);\n\t\t\t}\n\t\t\tthis._codeExchangePromises.set(scopeData.scopeStr, existingPromise);\n\t\t}\n\n\t\tthis._codeVerfifiers.set(nonce, codeVerifier);\n\n\t\treturn await raceCancellationAndTimeoutError(existingPromise, token, 1000 * 60 * 5) // 5 minutes\n\t\t\t.finally(() => {\n\t\t\t\tthis._pendingNonces.delete(scopeData.scopeStr);\n\t\t\t\tthis._codeExchangePromises.delete(scopeData.scopeStr);\n\t\t\t\tthis._codeVerfifiers.delete(nonce);\n\t\t\t\tinputBox?.dispose();\n\t\t\t});\n\t}\n\n\tpublic async removeSessionById(sessionId: string, writeToDisk: boolean = true): Promise<vscode.AuthenticationSession | undefined> {\n\t\tconst tokenIndex = this._tokens.findIndex(token => token.sessionId === sessionId);\n\t\tif (tokenIndex === -1) {\n\t\t\tthis._logger.warn(`'${sessionId}' Session not found to remove`);\n\t\t\treturn Promise.resolve(undefined);\n\t\t}\n\n\t\tconst token = this._tokens.splice(tokenIndex, 1)[0];\n\t\tthis._logger.trace(`[${token.scope}] '${sessionId}' Queued removing session`);\n\t\treturn this._sequencer.queue(token.scope, () => this.removeSessionByIToken(token, writeToDisk));\n\t}\n\n\tpublic async clearSessions() {\n\t\tthis._logger.trace('Logging out of all sessions');\n\t\tthis._tokens = [];\n\t\tawait this._tokenStorage.deleteAll(item => this.sessionMatchesEndpoint(item));\n\n\t\tthis._refreshTimeouts.forEach(timeout => {\n\t\t\tclearTimeout(timeout);\n\t\t});\n\n\t\tthis._refreshTimeouts.clear();\n\t\tthis._logger.trace('All sessions logged out');\n\t}\n\n\tprivate async removeSessionByIToken(token: IToken, writeToDisk: boolean = true): Promise<vscode.AuthenticationSession | undefined> {\n\t\tthis._logger.info(`[${token.scope}] '${token.sessionId}' Logging out of session`);\n\t\tthis.removeSessionTimeout(token.sessionId);\n\n\t\tif (writeToDisk) {\n\t\t\tawait this._tokenStorage.delete(token.sessionId);\n\t\t}\n\n\t\tconst tokenIndex = this._tokens.findIndex(t => t.sessionId === token.sessionId);\n\t\tif (tokenIndex !== -1) {\n\t\t\tthis._tokens.splice(tokenIndex, 1);\n\t\t}\n\n\t\tconst session = this.convertToSessionSync(token);\n\t\tthis._logger.trace(`[${token.scope}] '${token.sessionId}' Sending change event for session that was removed`);\n\t\tthis._sessionChangeEmitter.fire({ added: [], removed: [session], changed: [] });\n\t\tthis._logger.info(`[${token.scope}] '${token.sessionId}' Logged out of session successfully!`);\n\t\treturn session;\n\t}\n\n\t//#endregion\n\n\t//#region timeout\n\n\tprivate setSessionTimeout(sessionId: string, refreshToken: string, scopeData: IScopeData, timeout: number) {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${sessionId}' Setting refresh timeout for ${timeout} milliseconds`);\n\t\tthis.removeSessionTimeout(sessionId);\n\t\tthis._refreshTimeouts.set(sessionId, setTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tconst refreshedToken = await this.refreshToken(refreshToken, scopeData, sessionId);\n\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${sessionId}' Sending change event for session that was refreshed`);\n\t\t\t\tthis._sessionChangeEmitter.fire({ added: [], removed: [], changed: [this.convertToSessionSync(refreshedToken)] });\n\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${sessionId}' refresh timeout complete`);\n\t\t\t} catch (e) {\n\t\t\t\tif (e.message !== REFRESH_NETWORK_FAILURE) {\n\t\t\t\t\tvscode.window.showErrorMessage(vscode.l10n.t('You have been signed out because reading stored authentication information failed.'));\n\t\t\t\t\tawait this.removeSessionById(sessionId);\n\t\t\t\t}\n\t\t\t}\n\t\t}, timeout));\n\t}\n\n\tprivate removeSessionTimeout(sessionId: string): void {\n\t\tconst timeout = this._refreshTimeouts.get(sessionId);\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\tthis._refreshTimeouts.delete(sessionId);\n\t\t}\n\t}\n\n\t//#endregion\n\n\t//#region convert operations\n\n\tprivate convertToTokenSync(json: ITokenResponse, scopeData: IScopeData, existingId?: string): IToken {\n\t\tlet claims = undefined;\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${existingId ?? 'new'}' Attempting to parse token response.`);\n\n\t\ttry {\n\t\t\tif (json.id_token) {\n\t\t\t\tclaims = JSON.parse(base64Decode(json.id_token.split('.')[1]));\n\t\t\t} else {\n\t\t\t\tthis._logger.warn(`[${scopeData.scopeStr}] '${existingId ?? 'new'}' Attempting to parse access_token instead since no id_token was included in the response.`);\n\t\t\t\tclaims = JSON.parse(base64Decode(json.access_token.split('.')[1]));\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthrow e;\n\t\t}\n\n\t\tconst id = `${claims.tid}/${(claims.oid ?? (claims.altsecid ?? '' + claims.ipd ?? ''))}`;\n\t\tconst sessionId = existingId || `${id}/${randomUUID()}`;\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${sessionId}' Token response parsed successfully.`);\n\t\treturn {\n\t\t\texpiresIn: json.expires_in,\n\t\t\texpiresAt: json.expires_in ? Date.now() + json.expires_in * 1000 : undefined,\n\t\t\taccessToken: json.access_token,\n\t\t\tidToken: json.id_token,\n\t\t\trefreshToken: json.refresh_token,\n\t\t\tscope: scopeData.scopeStr,\n\t\t\tsessionId,\n\t\t\taccount: {\n\t\t\t\tlabel: claims.preferred_username ?? claims.email ?? claims.unique_name ?? 'user@example.com',\n\t\t\t\tid,\n\t\t\t\ttype: claims.tid === MSA_TID || claims.tid === MSA_PASSTHRU_TID ? MicrosoftAccountType.MSA : MicrosoftAccountType.AAD\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Return a session object without checking for expiry and potentially refreshing.\n\t * @param token The token information.\n\t */\n\tprivate convertToSessionSync(token: IToken): vscode.AuthenticationSession {\n\t\treturn {\n\t\t\tid: token.sessionId,\n\t\t\taccessToken: token.accessToken!,\n\t\t\tidToken: token.idToken,\n\t\t\taccount: token.account,\n\t\t\tscopes: token.scope.split(' ')\n\t\t};\n\t}\n\n\tprivate async convertToSession(token: IToken, scopeData: IScopeData): Promise<vscode.AuthenticationSession> {\n\t\tif (token.accessToken && (!token.expiresAt || token.expiresAt > Date.now())) {\n\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Token available from cache${token.expiresAt ? `, expires in ${token.expiresAt - Date.now()} milliseconds` : ''}.`);\n\t\t\treturn {\n\t\t\t\tid: token.sessionId,\n\t\t\t\taccessToken: token.accessToken,\n\t\t\t\tidToken: token.idToken,\n\t\t\t\taccount: token.account,\n\t\t\t\tscopes: scopeData.originalScopes ?? scopeData.scopes\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Token expired or unavailable, trying refresh`);\n\t\t\tconst refreshedToken = await this.refreshToken(token.refreshToken, scopeData, token.sessionId);\n\t\t\tif (refreshedToken.accessToken) {\n\t\t\t\treturn {\n\t\t\t\t\tid: token.sessionId,\n\t\t\t\t\taccessToken: refreshedToken.accessToken,\n\t\t\t\t\tidToken: refreshedToken.idToken,\n\t\t\t\t\taccount: token.account,\n\t\t\t\t\t// We always prefer the original scopes requested since that array is used as a key in the AuthService\n\t\t\t\t\tscopes: scopeData.originalScopes ?? scopeData.scopes\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthrow new Error('Unavailable due to network problems');\n\t\t}\n\t}\n\n\t//#endregion\n\n\t//#region refresh logic\n\n\tprivate refreshToken(refreshToken: string, scopeData: IScopeData, sessionId?: string): Promise<IToken> {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${sessionId ?? 'new'}' Queued refreshing token`);\n\t\treturn this._sequencer.queue(scopeData.scopeStr, () => this.doRefreshToken(refreshToken, scopeData, sessionId));\n\t}\n\n\tprivate async doRefreshToken(refreshToken: string, scopeData: IScopeData, sessionId?: string): Promise<IToken> {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${sessionId ?? 'new'}' Refreshing token`);\n\t\tconst postData = new URLSearchParams({\n\t\t\trefresh_token: refreshToken,\n\t\t\tclient_id: scopeData.clientId,\n\t\t\tgrant_type: 'refresh_token',\n\t\t\tscope: scopeData.scopesToSend\n\t\t}).toString();\n\n\t\ttry {\n\t\t\tconst json = await this.fetchTokenResponse(postData, scopeData);\n\t\t\tconst token = this.convertToTokenSync(json, scopeData, sessionId);\n\t\t\tif (token.expiresIn) {\n\t\t\t\tthis.setSessionTimeout(token.sessionId, token.refreshToken, scopeData, token.expiresIn * AzureActiveDirectoryService.REFRESH_TIMEOUT_MODIFIER);\n\t\t\t}\n\t\t\tthis.setToken(token, scopeData);\n\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Token refresh success`);\n\t\t\treturn token;\n\t\t} catch (e) {\n\t\t\tif (e.message === REFRESH_NETWORK_FAILURE) {\n\t\t\t\t// We were unable to refresh because of a network failure (i.e. the user lost internet access).\n\t\t\t\t// so set up a timeout to try again later. We only do this if we have a session id to reference later.\n\t\t\t\tif (sessionId) {\n\t\t\t\t\tthis.setSessionTimeout(sessionId, refreshToken, scopeData, AzureActiveDirectoryService.POLLING_CONSTANT);\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tthis._logger.error(`[${scopeData.scopeStr}] '${sessionId ?? 'new'}' Refreshing token failed: ${e.message}`);\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\t//#endregion\n\n\t//#region scope parsers\n\n\tprivate getClientId(scopes: string[]) {\n\t\treturn scopes.reduce<string | undefined>((prev, current) => {\n\t\t\tif (current.startsWith('VSCODE_CLIENT_ID:')) {\n\t\t\t\treturn current.split('VSCODE_CLIENT_ID:')[1];\n\t\t\t}\n\t\t\treturn prev;\n\t\t}, undefined) ?? DEFAULT_CLIENT_ID;\n\t}\n\n\tprivate getTenantId(scopes: string[]) {\n\t\treturn scopes.reduce<string | undefined>((prev, current) => {\n\t\t\tif (current.startsWith('VSCODE_TENANT:')) {\n\t\t\t\treturn current.split('VSCODE_TENANT:')[1];\n\t\t\t}\n\t\t\treturn prev;\n\t\t}, undefined) ?? DEFAULT_TENANT;\n\t}\n\n\t//#endregion\n\n\t//#region oauth flow\n\n\tprivate async handleCodeResponse(scopeData: IScopeData): Promise<vscode.AuthenticationSession> {\n\t\tlet uriEventListener: vscode.Disposable;\n\t\treturn new Promise((resolve: (value: vscode.AuthenticationSession) => void, reject) => {\n\t\t\turiEventListener = this._uriHandler.event(async (uri: vscode.Uri) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst query = new URLSearchParams(uri.query);\n\t\t\t\t\tlet code = query.get('code');\n\t\t\t\t\tlet nonce = query.get('nonce');\n\t\t\t\t\tif (Array.isArray(code)) {\n\t\t\t\t\t\tcode = code[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (!code) {\n\t\t\t\t\t\tthrow new Error('No code included in query');\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(nonce)) {\n\t\t\t\t\t\tnonce = nonce[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (!nonce) {\n\t\t\t\t\t\tthrow new Error('No nonce included in query');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst acceptedStates = this._pendingNonces.get(scopeData.scopeStr) || [];\n\t\t\t\t\t// Workaround double encoding issues of state in web\n\t\t\t\t\tif (!acceptedStates.includes(nonce) && !acceptedStates.includes(decodeURIComponent(nonce))) {\n\t\t\t\t\t\tthrow new Error('Nonce does not match.');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst verifier = this._codeVerfifiers.get(nonce) ?? this._codeVerfifiers.get(decodeURIComponent(nonce));\n\t\t\t\t\tif (!verifier) {\n\t\t\t\t\t\tthrow new Error('No available code verifier');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst session = await this.exchangeCodeForSession(code, verifier, scopeData);\n\t\t\t\t\tthis._sessionChangeEmitter.fire({ added: [session], removed: [], changed: [] });\n\t\t\t\t\tthis._logger.info(`[${scopeData.scopeStr}] '${session.id}' session successfully created!`);\n\t\t\t\t\tresolve(session);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}).then(result => {\n\t\t\turiEventListener.dispose();\n\t\t\treturn result;\n\t\t}).catch(err => {\n\t\t\turiEventListener.dispose();\n\t\t\tthrow err;\n\t\t});\n\t}\n\n\tprivate async handleCodeInputBox(inputBox: vscode.InputBox, verifier: string, scopeData: IScopeData): Promise<vscode.AuthenticationSession> {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] Starting login flow with input box`);\n\t\tinputBox.ignoreFocusOut = true;\n\t\tinputBox.title = vscode.l10n.t('Microsoft Authentication');\n\t\tinputBox.prompt = vscode.l10n.t('Provide the authorization code to complete the sign in flow.');\n\t\tinputBox.placeholder = vscode.l10n.t('Paste authorization code here...');\n\t\treturn new Promise((resolve: (value: vscode.AuthenticationSession) => void, reject) => {\n\t\t\tinputBox.show();\n\t\t\tinputBox.onDidAccept(async () => {\n\t\t\t\tconst code = inputBox.value;\n\t\t\t\tif (code) {\n\t\t\t\t\tinputBox.dispose();\n\t\t\t\t\tconst session = await this.exchangeCodeForSession(code, verifier, scopeData);\n\t\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${session.id}' sending session changed event because session was added.`);\n\t\t\t\t\tthis._sessionChangeEmitter.fire({ added: [session], removed: [], changed: [] });\n\t\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${session.id}' session successfully created!`);\n\t\t\t\t\tresolve(session);\n\t\t\t\t}\n\t\t\t});\n\t\t\tinputBox.onDidHide(() => {\n\t\t\t\tif (!inputBox.value) {\n\t\t\t\t\tinputBox.dispose();\n\t\t\t\t\treject('Cancelled');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async exchangeCodeForSession(code: string, codeVerifier: string, scopeData: IScopeData): Promise<vscode.AuthenticationSession> {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] Exchanging login code for session`);\n\t\tlet token: IToken | undefined;\n\t\ttry {\n\t\t\tconst postData = new URLSearchParams({\n\t\t\t\tgrant_type: 'authorization_code',\n\t\t\t\tcode: code,\n\t\t\t\tclient_id: scopeData.clientId,\n\t\t\t\tscope: scopeData.scopesToSend,\n\t\t\t\tcode_verifier: codeVerifier,\n\t\t\t\tredirect_uri: redirectUrl\n\t\t\t}).toString();\n\n\t\t\tconst json = await this.fetchTokenResponse(postData, scopeData);\n\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] Exchanging code for token succeeded!`);\n\t\t\ttoken = this.convertToTokenSync(json, scopeData);\n\t\t} catch (e) {\n\t\t\tthis._logger.error(`[${scopeData.scopeStr}] Error exchanging code for token: ${e}`);\n\t\t\tthrow e;\n\t\t}\n\n\t\tif (token.expiresIn) {\n\t\t\tthis.setSessionTimeout(token.sessionId, token.refreshToken, scopeData, token.expiresIn * AzureActiveDirectoryService.REFRESH_TIMEOUT_MODIFIER);\n\t\t}\n\t\tthis.setToken(token, scopeData);\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Exchanging login code for session succeeded!`);\n\t\treturn await this.convertToSession(token, scopeData);\n\t}\n\n\tprivate async fetchTokenResponse(postData: string, scopeData: IScopeData): Promise<ITokenResponse> {\n\t\tlet endpointUrl: string;\n\t\tif (this._env.activeDirectoryEndpointUrl !== defaultActiveDirectoryEndpointUrl) {\n\t\t\t// If this is for sovereign clouds, don't try using the proxy endpoint, which supports only public cloud\n\t\t\tendpointUrl = this._env.activeDirectoryEndpointUrl;\n\t\t} else {\n\t\t\tconst proxyEndpoints: { [providerId: string]: string } | undefined = await vscode.commands.executeCommand('workbench.getCodeExchangeProxyEndpoints');\n\t\t\tendpointUrl = proxyEndpoints?.microsoft || this._env.activeDirectoryEndpointUrl;\n\t\t}\n\t\tconst endpoint = new URL(`${scopeData.tenant}/oauth2/v2.0/token`, endpointUrl);\n\n\t\tlet attempts = 0;\n\t\twhile (attempts <= 3) {\n\t\t\tattempts++;\n\t\t\tlet result;\n\t\t\tlet errorMessage: string | undefined;\n\t\t\ttry {\n\t\t\t\tresult = await fetch(endpoint.toString(), {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded'\n\t\t\t\t\t},\n\t\t\t\t\tbody: postData\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\terrorMessage = e.message ?? e;\n\t\t\t}\n\n\t\t\tif (!result || result.status > 499) {\n\t\t\t\tif (attempts > 3) {\n\t\t\t\t\tthis._logger.error(`[${scopeData.scopeStr}] Fetching token failed: ${result ? await result.text() : errorMessage}`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Exponential backoff\n\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 5 * attempts * attempts * 1000));\n\t\t\t\tcontinue;\n\t\t\t} else if (!result.ok) {\n\t\t\t\t// For 4XX errors, the user may actually have an expired token or have changed\n\t\t\t\t// their password recently which is throwing a 4XX. For this, we throw an error\n\t\t\t\t// so that the user can be prompted to sign in again.\n\t\t\t\tthrow new Error(await result.text());\n\t\t\t}\n\n\t\t\treturn await result.json() as ITokenResponse;\n\t\t}\n\n\t\tthrow new Error(REFRESH_NETWORK_FAILURE);\n\t}\n\n\t//#endregion\n\n\t//#region storage operations\n\n\tprivate setToken(token: IToken, scopeData: IScopeData): void {\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Setting token`);\n\n\t\tconst existingTokenIndex = this._tokens.findIndex(t => t.sessionId === token.sessionId);\n\t\tif (existingTokenIndex > -1) {\n\t\t\tthis._tokens.splice(existingTokenIndex, 1, token);\n\t\t} else {\n\t\t\tthis._tokens.push(token);\n\t\t}\n\n\t\t// Don't await because setting the token is only useful for any new windows that open.\n\t\tvoid this.storeToken(token, scopeData);\n\t}\n\n\tprivate async storeToken(token: IToken, scopeData: IScopeData): Promise<void> {\n\t\tif (!vscode.window.state.focused) {\n\t\t\tif (this._pendingTokensToStore.has(token.sessionId)) {\n\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Window is not focused, replacing token to be stored`);\n\t\t\t} else {\n\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Window is not focused, pending storage of token`);\n\t\t\t}\n\t\t\tthis._pendingTokensToStore.set(token.sessionId, token);\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._tokenStorage.store(token.sessionId, {\n\t\t\tid: token.sessionId,\n\t\t\trefreshToken: token.refreshToken,\n\t\t\tscope: token.scope,\n\t\t\taccount: token.account,\n\t\t\tendpoint: this._env.activeDirectoryEndpointUrl,\n\t\t});\n\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Stored token`);\n\t}\n\n\tprivate async storePendingTokens(): Promise<void> {\n\t\tif (this._pendingTokensToStore.size === 0) {\n\t\t\tthis._logger.trace('No pending tokens to store');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = [...this._pendingTokensToStore.values()];\n\t\tthis._pendingTokensToStore.clear();\n\n\t\tthis._logger.trace(`Storing ${tokens.length} pending tokens...`);\n\t\tawait Promise.allSettled(tokens.map(async token => {\n\t\t\tthis._logger.trace(`[${token.scope}] '${token.sessionId}' Storing pending token`);\n\t\t\tawait this._tokenStorage.store(token.sessionId, {\n\t\t\t\tid: token.sessionId,\n\t\t\t\trefreshToken: token.refreshToken,\n\t\t\t\tscope: token.scope,\n\t\t\t\taccount: token.account,\n\t\t\t\tendpoint: this._env.activeDirectoryEndpointUrl,\n\t\t\t});\n\t\t\tthis._logger.trace(`[${token.scope}] '${token.sessionId}' Stored pending token`);\n\t\t}));\n\t\tthis._logger.trace('Done storing pending tokens');\n\t}\n\n\tprivate async checkForUpdates(e: IDidChangeInOtherWindowEvent<IStoredSession>): Promise<void> {\n\t\tfor (const key of e.added) {\n\t\t\tconst session = await this._tokenStorage.get(key);\n\t\t\tif (!session) {\n\t\t\t\tthis._logger.error('session not found that was apparently just added');\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!this.sessionMatchesEndpoint(session)) {\n\t\t\t\t// If the session wasn't made for this login endpoint, ignore this update\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst matchesExisting = this._tokens.some(token => token.scope === session.scope && token.sessionId === session.id);\n\t\t\tif (!matchesExisting && session.refreshToken) {\n\t\t\t\ttry {\n\t\t\t\t\tconst scopes = session.scope.split(' ');\n\t\t\t\t\tconst scopeData: IScopeData = {\n\t\t\t\t\t\tscopes,\n\t\t\t\t\t\tscopeStr: session.scope,\n\t\t\t\t\t\t// filter our special scopes\n\t\t\t\t\t\tscopesToSend: scopes.filter(s => !s.startsWith('VSCODE_')).join(' '),\n\t\t\t\t\t\tclientId: this.getClientId(scopes),\n\t\t\t\t\t\ttenant: this.getTenantId(scopes),\n\t\t\t\t\t};\n\t\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${session.id}' Session added in another window`);\n\t\t\t\t\tconst token = await this.refreshToken(session.refreshToken, scopeData, session.id);\n\t\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Sending change event for session that was added`);\n\t\t\t\t\tthis._sessionChangeEmitter.fire({ added: [this.convertToSessionSync(token)], removed: [], changed: [] });\n\t\t\t\t\tthis._logger.trace(`[${scopeData.scopeStr}] '${token.sessionId}' Session added in another window added here`);\n\t\t\t\t\tcontinue;\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Network failures will automatically retry on next poll.\n\t\t\t\t\tif (e.message !== REFRESH_NETWORK_FAILURE) {\n\t\t\t\t\t\tvscode.window.showErrorMessage(vscode.l10n.t('You have been signed out because reading stored authentication information failed.'));\n\t\t\t\t\t\tawait this.removeSessionById(session.id);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const { value } of e.removed) {\n\t\t\tthis._logger.trace(`[${value.scope}] '${value.id}' Session removed in another window`);\n\t\t\tif (!this.sessionMatchesEndpoint(value)) {\n\t\t\t\t// If the session wasn't made for this login endpoint, ignore this update\n\t\t\t\tthis._logger.trace(`[${value.scope}] '${value.id}' Session doesn't match endpoint. Skipping...`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tawait this.removeSessionById(value.id, false);\n\t\t\tthis._logger.trace(`[${value.scope}] '${value.id}' Session removed in another window removed here`);\n\t\t}\n\n\t\t// NOTE: We don't need to handle changed sessions because all that really would give us is a new refresh token\n\t\t// because access tokens are not stored in Secret Storage due to their short lifespan. This new refresh token\n\t\t// is not useful in this window because we really only care about the lifetime of the _access_ token which we\n\t\t// are already managing (see usages of `setSessionTimeout`).\n\t\t// However, in order to minimize the amount of times we store tokens, if a token was stored via another window,\n\t\t// we cancel any pending token storage operations.\n\t\tfor (const sessionId of e.updated) {\n\t\t\tif (this._pendingTokensToStore.delete(sessionId)) {\n\t\t\t\tthis._logger.trace(`'${sessionId}' Cancelled pending token storage because token was updated in another window`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate sessionMatchesEndpoint(session: IStoredSession): boolean {\n\t\t// For older sessions with no endpoint set, it can be assumed to be the default endpoint\n\t\tsession.endpoint ||= defaultActiveDirectoryEndpointUrl;\n\n\t\treturn session.endpoint === this._env.activeDirectoryEndpointUrl;\n\t}\n\n\t//#endregion\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/UriEventHandler.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport class UriEventHandler extends vscode.EventEmitter<vscode.Uri> implements vscode.UriHandler {\n\tprivate _disposable = vscode.window.registerUriHandler(this);\n\n\thandleUri(uri: vscode.Uri) {\n\t\tthis.fire(uri);\n\t}\n\n\toverride dispose(): void {\n\t\tsuper.dispose();\n\t\tthis._disposable.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/betterSecretStorage.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport Logger from './logger';\nimport { Event, EventEmitter, ExtensionContext, SecretStorage, SecretStorageChangeEvent } from 'vscode';\n\nexport interface IDidChangeInOtherWindowEvent<T> {\n\tadded: string[];\n\tupdated: string[];\n\tremoved: Array<{ key: string; value: T }>;\n}\n\nexport class BetterTokenStorage<T> {\n\t// set before and after _tokensPromise is set so getTokens can handle multiple operations.\n\tprivate _operationInProgress = false;\n\t// the current state. Don't use this directly and call getTokens() so that you ensure you\n\t// have awaited for all operations.\n\tprivate _tokensPromise: Promise<Map<string, T>> = Promise.resolve(new Map());\n\n\t// The vscode SecretStorage instance for this extension.\n\tprivate readonly _secretStorage: SecretStorage;\n\n\tprivate _didChangeInOtherWindow = new EventEmitter<IDidChangeInOtherWindowEvent<T>>();\n\tpublic onDidChangeInOtherWindow: Event<IDidChangeInOtherWindowEvent<T>> = this._didChangeInOtherWindow.event;\n\n\t/**\n\t *\n\t * @param keylistKey The key in the secret storage that will hold the list of keys associated with this instance of BetterTokenStorage\n\t * @param context the vscode Context used to register disposables and retreive the vscode.SecretStorage for this instance of VS Code\n\t */\n\tconstructor(private keylistKey: string, context: ExtensionContext) {\n\t\tthis._secretStorage = context.secrets;\n\t\tcontext.subscriptions.push(context.secrets.onDidChange((e) => this.handleSecretChange(e)));\n\t\tthis.initialize();\n\t}\n\n\tprivate initialize(): void {\n\t\tthis._operationInProgress = true;\n\t\tthis._tokensPromise = new Promise((resolve, _) => {\n\t\t\tthis._secretStorage.get(this.keylistKey).then(\n\t\t\t\tkeyListStr => {\n\t\t\t\t\tif (!keyListStr) {\n\t\t\t\t\t\tresolve(new Map());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst keyList: Array<string> = JSON.parse(keyListStr);\n\t\t\t\t\t// Gather promises that contain key value pairs our of secret storage\n\t\t\t\t\tconst promises = keyList.map(key => new Promise<{ key: string; value: string | undefined }>((res, rej) => {\n\t\t\t\t\t\tthis._secretStorage.get(key).then((value) => {\n\t\t\t\t\t\t\tres({ key, value });\n\t\t\t\t\t\t}, rej);\n\t\t\t\t\t}));\n\t\t\t\t\tPromise.allSettled(promises).then((results => {\n\t\t\t\t\t\tconst tokens = new Map<string, T>();\n\t\t\t\t\t\tresults.forEach(p => {\n\t\t\t\t\t\t\tif (p.status === 'fulfilled' && p.value.value) {\n\t\t\t\t\t\t\t\tconst secret = this.parseSecret(p.value.value);\n\t\t\t\t\t\t\t\ttokens.set(p.value.key, secret);\n\t\t\t\t\t\t\t} else if (p.status === 'rejected') {\n\t\t\t\t\t\t\t\tLogger.error(p.reason);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tLogger.error('Key was not found in SecretStorage.');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresolve(tokens);\n\t\t\t\t\t}));\n\t\t\t\t},\n\t\t\t\terr => {\n\t\t\t\t\tLogger.error(err);\n\t\t\t\t\tresolve(new Map());\n\t\t\t\t});\n\t\t});\n\t\tthis._operationInProgress = false;\n\t}\n\n\tasync get(key: string): Promise<T | undefined> {\n\t\tconst tokens = await this.getTokens();\n\t\treturn tokens.get(key);\n\t}\n\n\tasync getAll(predicate?: (item: T) => boolean): Promise<T[]> {\n\t\tconst tokens = await this.getTokens();\n\t\tconst values = new Array<T>();\n\t\tfor (const [_, value] of tokens) {\n\t\t\tif (!predicate || predicate(value)) {\n\t\t\t\tvalues.push(value);\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t}\n\n\tasync store(key: string, value: T): Promise<void> {\n\t\tconst tokens = await this.getTokens();\n\n\t\tconst isAddition = !tokens.has(key);\n\t\ttokens.set(key, value);\n\t\tconst valueStr = this.serializeSecret(value);\n\t\tthis._operationInProgress = true;\n\t\tthis._tokensPromise = new Promise((resolve, _) => {\n\t\t\tconst promises = [this._secretStorage.store(key, valueStr)];\n\n\t\t\t// if we are adding a secret we need to update the keylist too\n\t\t\tif (isAddition) {\n\t\t\t\tpromises.push(this.updateKeyList(tokens));\n\t\t\t}\n\n\t\t\tPromise.allSettled(promises).then(results => {\n\t\t\t\tresults.forEach(r => {\n\t\t\t\t\tif (r.status === 'rejected') {\n\t\t\t\t\t\tLogger.error(r.reason);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresolve(tokens);\n\t\t\t});\n\t\t});\n\t\tthis._operationInProgress = false;\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\tconst tokens = await this.getTokens();\n\t\tif (!tokens.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\ttokens.delete(key);\n\n\t\tthis._operationInProgress = true;\n\t\tthis._tokensPromise = new Promise((resolve, _) => {\n\t\t\tPromise.allSettled([\n\t\t\t\tthis._secretStorage.delete(key),\n\t\t\t\tthis.updateKeyList(tokens)\n\t\t\t]).then(results => {\n\t\t\t\tresults.forEach(r => {\n\t\t\t\t\tif (r.status === 'rejected') {\n\t\t\t\t\t\tLogger.error(r.reason);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresolve(tokens);\n\t\t\t});\n\t\t});\n\t\tthis._operationInProgress = false;\n\t}\n\n\tasync deleteAll(predicate?: (item: T) => boolean): Promise<void> {\n\t\tconst tokens = await this.getTokens();\n\t\tconst promises = [];\n\t\tfor (const [key, value] of tokens) {\n\t\t\tif (!predicate || predicate(value)) {\n\t\t\t\tpromises.push(this.delete(key));\n\t\t\t}\n\t\t}\n\t\tawait Promise.all(promises);\n\t}\n\n\tprivate async updateKeyList(tokens: Map<string, T>) {\n\t\tconst keyList = [];\n\t\tfor (const [key] of tokens) {\n\t\t\tkeyList.push(key);\n\t\t}\n\n\t\tconst keyListStr = JSON.stringify(keyList);\n\t\tawait this._secretStorage.store(this.keylistKey, keyListStr);\n\t}\n\n\tprotected parseSecret(secret: string): T {\n\t\treturn JSON.parse(secret);\n\t}\n\n\tprotected serializeSecret(secret: T): string {\n\t\treturn JSON.stringify(secret);\n\t}\n\n\t// This is the one way to get tokens to ensure all other operations that\n\t// came before you have been processed.\n\tprivate async getTokens(): Promise<Map<string, T>> {\n\t\tlet tokens;\n\t\tdo {\n\t\t\ttokens = await this._tokensPromise;\n\t\t} while (this._operationInProgress);\n\t\treturn tokens;\n\t}\n\n\t// This is a crucial function that handles whether or not the token has changed in\n\t// a different window of VS Code and sends the necessary event if it has.\n\t// Scenarios this should cover:\n\t// * Added in another window\n\t// * Updated in another window\n\t// * Deleted in another window\n\t// * Added in this window\n\t// * Updated in this window\n\t// * Deleted in this window\n\tprivate async handleSecretChange(e: SecretStorageChangeEvent) {\n\t\tconst key = e.key;\n\n\t\t// The KeyList is only a list of keys to aid initial start up of VS Code to know which\n\t\t// Keys are associated with this handler.\n\t\tif (key === this.keylistKey) {\n\t\t\treturn;\n\t\t}\n\t\tconst tokens = await this.getTokens();\n\n\t\tthis._operationInProgress = true;\n\t\tthis._tokensPromise = new Promise((resolve, _) => {\n\t\t\tthis._secretStorage.get(key).then(\n\t\t\t\tstorageSecretStr => {\n\t\t\t\t\tif (!storageSecretStr) {\n\t\t\t\t\t\t// true -> secret was deleted in another window\n\t\t\t\t\t\t// false -> secret was deleted in this window\n\t\t\t\t\t\tif (tokens.has(key)) {\n\t\t\t\t\t\t\tconst value = tokens.get(key)!;\n\t\t\t\t\t\t\ttokens.delete(key);\n\t\t\t\t\t\t\tthis._didChangeInOtherWindow.fire({ added: [], updated: [], removed: [{ key, value }] });\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn tokens;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst storageSecret = this.parseSecret(storageSecretStr);\n\t\t\t\t\tconst cachedSecret = tokens.get(key);\n\n\t\t\t\t\tif (!cachedSecret) {\n\t\t\t\t\t\t// token was added in another window\n\t\t\t\t\t\ttokens.set(key, storageSecret);\n\t\t\t\t\t\tthis._didChangeInOtherWindow.fire({ added: [key], updated: [], removed: [] });\n\t\t\t\t\t\treturn tokens;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cachedSecretStr = this.serializeSecret(cachedSecret);\n\t\t\t\t\tif (storageSecretStr !== cachedSecretStr) {\n\t\t\t\t\t\t// token was updated in another window\n\t\t\t\t\t\ttokens.set(key, storageSecret);\n\t\t\t\t\t\tthis._didChangeInOtherWindow.fire({ added: [], updated: [key], removed: [] });\n\t\t\t\t\t}\n\n\t\t\t\t\t// what's in our token cache and what's in storage must be the same\n\t\t\t\t\t// which means this should cover the last two scenarios of\n\t\t\t\t\t// Added in this window & Updated in this window.\n\t\t\t\t\treturn tokens;\n\t\t\t\t},\n\t\t\t\terr => {\n\t\t\t\t\tLogger.error(err);\n\t\t\t\t\treturn tokens;\n\t\t\t\t}).then(resolve);\n\t\t});\n\t\tthis._operationInProgress = false;\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/browser/authProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AuthenticationProvider, AuthenticationProviderAuthenticationSessionsChangeEvent, AuthenticationSession, EventEmitter } from 'vscode';\n\nexport class MsalAuthProvider implements AuthenticationProvider {\n\tprivate _onDidChangeSessions = new EventEmitter<AuthenticationProviderAuthenticationSessionsChangeEvent>();\n\tonDidChangeSessions = this._onDidChangeSessions.event;\n\n\tinitialize(): Thenable<void> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n\tgetSessions(): Thenable<AuthenticationSession[]> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tcreateSession(): Thenable<AuthenticationSession> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tremoveSession(): Thenable<void> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n\tdispose() {\n\t\tthis._onDidChangeSessions.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/browser/authServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function startServer(_: any): any {\n\tthrow new Error('Not implemented');\n}\n\nexport function createServer(_: any): any {\n\tthrow new Error('Not implemented');\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/browser/buffer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function base64Encode(text: string): string {\n\treturn btoa(text);\n}\n\nexport function base64Decode(text: string): string {\n\t// modification of https://stackoverflow.com/a/38552302\n\tconst replacedCharacters = text.replace(/-/g, '+').replace(/_/g, '/');\n\tconst decodedText = decodeURIComponent(atob(replacedCharacters).split('').map(function (c) {\n\t\treturn '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n\t}).join(''));\n\treturn decodedText;\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/browser/fetch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport default fetch;\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/accountAccess.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Disposable, Event, EventEmitter, LogOutputChannel, SecretStorage } from 'vscode';\nimport { AccountInfo } from '@azure/msal-node';\n\nexport interface IAccountAccess {\n\tonDidAccountAccessChange: Event<void>;\n\tisAllowedAccess(account: AccountInfo): boolean;\n\tsetAllowedAccess(account: AccountInfo, allowed: boolean): Promise<void>;\n}\n\nexport class ScopedAccountAccess implements IAccountAccess, Disposable {\n\tprivate readonly _onDidAccountAccessChangeEmitter = new EventEmitter<void>();\n\treadonly onDidAccountAccessChange = this._onDidAccountAccessChangeEmitter.event;\n\n\tprivate value = new Array<string>();\n\n\tprivate readonly _disposable: Disposable;\n\n\tprivate constructor(\n\t\tprivate readonly _accountAccessSecretStorage: IAccountAccessSecretStorage,\n\t\tdisposables: Disposable[] = []\n\t) {\n\t\tthis._disposable = Disposable.from(\n\t\t\t...disposables,\n\t\t\tthis._onDidAccountAccessChangeEmitter,\n\t\t\tthis._accountAccessSecretStorage.onDidChange(() => this.update())\n\t\t);\n\t}\n\n\tstatic async create(\n\t\tsecretStorage: SecretStorage,\n\t\tcloudName: string,\n\t\tlogger: LogOutputChannel,\n\t\tmigrations: { clientId: string; authority: string }[] | undefined,\n\t): Promise<ScopedAccountAccess> {\n\t\tconst storage = await AccountAccessSecretStorage.create(secretStorage, cloudName, logger, migrations);\n\t\tconst access = new ScopedAccountAccess(storage, [storage]);\n\t\tawait access.initialize();\n\t\treturn access;\n\t}\n\n\tdispose() {\n\t\tthis._disposable.dispose();\n\t}\n\n\tprivate async initialize(): Promise<void> {\n\t\tawait this.update();\n\t}\n\n\tisAllowedAccess(account: AccountInfo): boolean {\n\t\treturn this.value.includes(account.homeAccountId);\n\t}\n\n\tasync setAllowedAccess(account: AccountInfo, allowed: boolean): Promise<void> {\n\t\tif (allowed) {\n\t\t\tif (this.value.includes(account.homeAccountId)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this._accountAccessSecretStorage.store([...this.value, account.homeAccountId]);\n\t\t\treturn;\n\t\t}\n\t\tawait this._accountAccessSecretStorage.store(this.value.filter(id => id !== account.homeAccountId));\n\t}\n\n\tprivate async update() {\n\t\tconst current = new Set(this.value);\n\t\tconst value = await this._accountAccessSecretStorage.get();\n\n\t\tthis.value = value ?? [];\n\t\tif (current.size !== this.value.length || !this.value.every(id => current.has(id))) {\n\t\t\tthis._onDidAccountAccessChangeEmitter.fire();\n\t\t}\n\t}\n}\n\ninterface IAccountAccessSecretStorage {\n\tget(): Promise<string[] | undefined>;\n\tstore(value: string[]): Thenable<void>;\n\tdelete(): Thenable<void>;\n\tonDidChange: Event<void>;\n}\n\nclass AccountAccessSecretStorage implements IAccountAccessSecretStorage, Disposable {\n\tprivate _disposable: Disposable;\n\n\tprivate readonly _onDidChangeEmitter = new EventEmitter<void>();\n\treadonly onDidChange: Event<void> = this._onDidChangeEmitter.event;\n\n\tprivate readonly _key = `accounts-${this._cloudName}`;\n\n\tprivate constructor(\n\t\tprivate readonly _secretStorage: SecretStorage,\n\t\tprivate readonly _cloudName: string,\n\t\tprivate readonly _logger: LogOutputChannel,\n\t\tprivate readonly _migrations?: { clientId: string; authority: string }[],\n\t) {\n\t\tthis._disposable = Disposable.from(\n\t\t\tthis._onDidChangeEmitter,\n\t\t\tthis._secretStorage.onDidChange(e => {\n\t\t\t\tif (e.key === this._key) {\n\t\t\t\t\tthis._onDidChangeEmitter.fire();\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tstatic async create(\n\t\tsecretStorage: SecretStorage,\n\t\tcloudName: string,\n\t\tlogger: LogOutputChannel,\n\t\tmigrations?: { clientId: string; authority: string }[],\n\t): Promise<AccountAccessSecretStorage> {\n\t\tconst storage = new AccountAccessSecretStorage(secretStorage, cloudName, logger, migrations);\n\t\tawait storage.initialize();\n\t\treturn storage;\n\t}\n\n\t/**\n\t * TODO: Remove this method after a release with the migration\n\t */\n\tprivate async initialize(): Promise<void> {\n\t\tif (!this._migrations) {\n\t\t\treturn;\n\t\t}\n\t\tconst current = await this.get();\n\t\t// If the secret storage already has the new key, we have already run the migration\n\t\tif (current) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst allValues = new Set<string>();\n\t\t\tfor (const { clientId, authority } of this._migrations) {\n\t\t\t\tconst oldKey = `accounts-${this._cloudName}-${clientId}-${authority}`;\n\t\t\t\tconst value = await this._secretStorage.get(oldKey);\n\t\t\t\tif (value) {\n\t\t\t\t\tconst parsed = JSON.parse(value) as string[];\n\t\t\t\t\tparsed.forEach(v => allValues.add(v));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (allValues.size > 0) {\n\t\t\t\tawait this.store(Array.from(allValues));\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Migration is best effort\n\t\t\tthis._logger.error(`Failed to migrate account access secret storage: ${e}`);\n\t\t}\n\t}\n\n\tasync get(): Promise<string[] | undefined> {\n\t\tconst value = await this._secretStorage.get(this._key);\n\t\tif (!value) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn JSON.parse(value);\n\t}\n\n\tstore(value: string[]): Thenable<void> {\n\t\treturn this._secretStorage.store(this._key, JSON.stringify(value));\n\t}\n\n\tdelete(): Thenable<void> {\n\t\treturn this._secretStorage.delete(this._key);\n\t}\n\n\tdispose() {\n\t\tthis._disposable.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/async.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancellationError, CancellationToken, Disposable, Event } from 'vscode';\n\nexport class SequencerByKey<TKey> {\n\n\tprivate promiseMap = new Map<TKey, Promise<unknown>>();\n\n\tqueue<T>(key: TKey, promiseTask: () => Promise<T>): Promise<T> {\n\t\tconst runningPromise = this.promiseMap.get(key) ?? Promise.resolve();\n\t\tconst newPromise = runningPromise\n\t\t\t.catch(() => { })\n\t\t\t.then(promiseTask)\n\t\t\t.finally(() => {\n\t\t\t\tif (this.promiseMap.get(key) === newPromise) {\n\t\t\t\t\tthis.promiseMap.delete(key);\n\t\t\t\t}\n\t\t\t});\n\t\tthis.promiseMap.set(key, newPromise);\n\t\treturn newPromise;\n\t}\n}\n\nexport class IntervalTimer extends Disposable {\n\n\tprivate _token: any;\n\n\tconstructor() {\n\t\tsuper(() => this.cancel());\n\t\tthis._token = -1;\n\t}\n\n\tcancel(): void {\n\t\tif (this._token !== -1) {\n\t\t\tclearInterval(this._token);\n\t\t\tthis._token = -1;\n\t\t}\n\t}\n\n\tcancelAndSet(runner: () => void, interval: number): void {\n\t\tthis.cancel();\n\t\tthis._token = setInterval(() => {\n\t\t\trunner();\n\t\t}, interval);\n\t}\n}\n\n/**\n * Returns a promise that rejects with an {@CancellationError} as soon as the passed token is cancelled.\n * @see {@link raceCancellation}\n */\nfunction raceCancellationError<T>(promise: Promise<T>, token: CancellationToken): Promise<T> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst ref = token.onCancellationRequested(() => {\n\t\t\tref.dispose();\n\t\t\treject(new CancellationError());\n\t\t});\n\t\tpromise.then(resolve, reject).finally(() => ref.dispose());\n\t});\n}\n\nfunction raceTimeoutError<T>(promise: Promise<T>, timeout: number): Promise<T> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst ref = setTimeout(() => {\n\t\t\treject(new CancellationError());\n\t\t}, timeout);\n\t\tpromise.then(resolve, reject).finally(() => clearTimeout(ref));\n\t});\n}\n\nexport function raceCancellationAndTimeoutError<T>(promise: Promise<T>, token: CancellationToken, timeout: number): Promise<T> {\n\treturn raceCancellationError(raceTimeoutError(promise, timeout), token);\n}\n\n/**\n * Given an event, returns another event which only fires once.\n *\n * @param event The event source for the new event.\n */\nfunction once<T>(event: Event<T>): Event<T> {\n\treturn (listener, thisArgs = null, disposables?) => {\n\t\t// we need this, in case the event fires during the listener call\n\t\tlet didFire = false;\n\t\tlet result: Disposable | undefined = undefined;\n\t\tresult = event(e => {\n\t\t\tif (didFire) {\n\t\t\t\treturn;\n\t\t\t} else if (result) {\n\t\t\t\tresult.dispose();\n\t\t\t} else {\n\t\t\t\tdidFire = true;\n\t\t\t}\n\n\t\t\treturn listener.call(thisArgs, e);\n\t\t}, null, disposables);\n\n\t\tif (didFire) {\n\t\t\tresult.dispose();\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\n/**\n * Creates a promise out of an event, using the {@link Event.once} helper.\n */\nexport function toPromise<T>(event: Event<T>): Promise<T> {\n\treturn new Promise(resolve => once(event)(resolve));\n}\n\n//#region DeferredPromise\n\nexport type ValueCallback<T = unknown> = (value: T | Promise<T>) => void;\n\nconst enum DeferredOutcome {\n\tResolved,\n\tRejected\n}\n\n/**\n * Creates a promise whose resolution or rejection can be controlled imperatively.\n */\nexport class DeferredPromise<T> {\n\n\tprivate completeCallback!: ValueCallback<T>;\n\tprivate errorCallback!: (err: unknown) => void;\n\tprivate outcome?: { outcome: DeferredOutcome.Rejected; value: any } | { outcome: DeferredOutcome.Resolved; value: T };\n\n\tpublic get isRejected() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Rejected;\n\t}\n\n\tpublic get isResolved() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Resolved;\n\t}\n\n\tpublic get isSettled() {\n\t\treturn !!this.outcome;\n\t}\n\n\tpublic get value() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Resolved ? this.outcome?.value : undefined;\n\t}\n\n\tpublic readonly p: Promise<T>;\n\n\tconstructor() {\n\t\tthis.p = new Promise<T>((c, e) => {\n\t\t\tthis.completeCallback = c;\n\t\t\tthis.errorCallback = e;\n\t\t});\n\t}\n\n\tpublic complete(value: T) {\n\t\treturn new Promise<void>(resolve => {\n\t\t\tthis.completeCallback(value);\n\t\t\tthis.outcome = { outcome: DeferredOutcome.Resolved, value };\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic error(err: unknown) {\n\t\treturn new Promise<void>(resolve => {\n\t\t\tthis.errorCallback(err);\n\t\t\tthis.outcome = { outcome: DeferredOutcome.Rejected, value: err };\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic cancel() {\n\t\treturn this.error(new CancellationError());\n\t}\n}\n\n//#endregion\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/cachePlugin.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICachePlugin, TokenCacheContext } from '@azure/msal-node';\nimport { Disposable, EventEmitter, SecretStorage } from 'vscode';\n\nexport class SecretStorageCachePlugin implements ICachePlugin, Disposable {\n\tprivate readonly _onDidChange: EventEmitter<void> = new EventEmitter<void>();\n\treadonly onDidChange = this._onDidChange.event;\n\n\tprivate _disposable: Disposable;\n\n\tprivate _value: string | undefined;\n\n\tconstructor(\n\t\tprivate readonly _secretStorage: SecretStorage,\n\t\tprivate readonly _key: string\n\t) {\n\t\tthis._disposable = Disposable.from(\n\t\t\tthis._onDidChange,\n\t\t\tthis._registerChangeHandler()\n\t\t);\n\t}\n\n\tprivate _registerChangeHandler() {\n\t\treturn this._secretStorage.onDidChange(e => {\n\t\t\tif (e.key === this._key) {\n\t\t\t\tthis._onDidChange.fire();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync beforeCacheAccess(tokenCacheContext: TokenCacheContext): Promise<void> {\n\t\tconst data = await this._secretStorage.get(this._key);\n\t\tthis._value = data;\n\t\tif (data) {\n\t\t\ttokenCacheContext.tokenCache.deserialize(data);\n\t\t}\n\t}\n\n\tasync afterCacheAccess(tokenCacheContext: TokenCacheContext): Promise<void> {\n\t\tif (tokenCacheContext.cacheHasChanged) {\n\t\t\tconst value = tokenCacheContext.tokenCache.serialize();\n\t\t\tif (value !== this._value) {\n\t\t\t\tawait this._secretStorage.store(this._key, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis._disposable.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/env.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Uri } from 'vscode';\n\nconst VALID_DESKTOP_CALLBACK_SCHEMES = [\n\t'vscode',\n\t'vscode-insiders',\n\t// On Windows, some browsers don't seem to redirect back to OSS properly.\n\t// As a result, you get stuck in the auth flow. We exclude this from the\n\t// list until we can figure out a way to fix this behavior in browsers.\n\t// 'code-oss',\n\t'vscode-wsl',\n\t'vscode-exploration'\n];\n\nexport function isSupportedClient(uri: Uri): boolean {\n\treturn (\n\t\tVALID_DESKTOP_CALLBACK_SCHEMES.includes(uri.scheme) ||\n\t\t// vscode.dev & insiders.vscode.dev\n\t\t/(?:^|\\.)vscode\\.dev$/.test(uri.authority) ||\n\t\t// github.dev & codespaces\n\t\t/(?:^|\\.)github\\.dev$/.test(uri.authority) ||\n\t\t// localhost\n\t\t/^localhost:\\d+$/.test(uri.authority) ||\n\t\t// 127.0.0.1\n\t\t/^127\\.0\\.0\\.1:\\d+$/.test(uri.authority)\n\t);\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/event.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Event } from 'vscode';\n\n/**\n * The EventBufferer is useful in situations in which you want\n * to delay firing your events during some code.\n * You can wrap that code and be sure that the event will not\n * be fired during that wrap.\n *\n * ```\n * const emitter: Emitter;\n * const delayer = new EventDelayer();\n * const delayedEvent = delayer.wrapEvent(emitter.event);\n *\n * delayedEvent(console.log);\n *\n * delayer.bufferEvents(() => {\n *   emitter.fire(); // event will not be fired yet\n * });\n *\n * // event will only be fired at this point\n * ```\n */\nexport class EventBufferer {\n\n\tprivate data: { buffers: Function[] }[] = [];\n\n\twrapEvent<T>(event: Event<T>): Event<T>;\n\twrapEvent<T>(event: Event<T>, reduce: (last: T | undefined, event: T) => T): Event<T>;\n\twrapEvent<T, O>(event: Event<T>, reduce: (last: O | undefined, event: T) => O, initial: O): Event<O>;\n\twrapEvent<T, O>(event: Event<T>, reduce?: (last: T | O | undefined, event: T) => T | O, initial?: O): Event<O | T> {\n\t\treturn (listener, thisArgs?, disposables?) => {\n\t\t\treturn event(i => {\n\t\t\t\tconst data = this.data[this.data.length - 1];\n\n\t\t\t\t// Non-reduce scenario\n\t\t\t\tif (!reduce) {\n\t\t\t\t\t// Buffering case\n\t\t\t\t\tif (data) {\n\t\t\t\t\t\tdata.buffers.push(() => listener.call(thisArgs, i));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Not buffering case\n\t\t\t\t\t\tlistener.call(thisArgs, i);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Reduce scenario\n\t\t\t\tconst reduceData = data as typeof data & {\n\t\t\t\t\t/**\n\t\t\t\t\t * The accumulated items that will be reduced.\n\t\t\t\t\t */\n\t\t\t\t\titems?: T[];\n\t\t\t\t\t/**\n\t\t\t\t\t * The reduced result cached to be shared with other listeners.\n\t\t\t\t\t */\n\t\t\t\t\treducedResult?: T | O;\n\t\t\t\t};\n\n\t\t\t\t// Not buffering case\n\t\t\t\tif (!reduceData) {\n\t\t\t\t\t// TODO: Is there a way to cache this reduce call for all listeners?\n\t\t\t\t\tlistener.call(thisArgs, reduce(initial, i));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Buffering case\n\t\t\t\treduceData.items ??= [];\n\t\t\t\treduceData.items.push(i);\n\t\t\t\tif (reduceData.buffers.length === 0) {\n\t\t\t\t\t// Include a single buffered function that will reduce all events when we're done buffering events\n\t\t\t\t\tdata.buffers.push(() => {\n\t\t\t\t\t\t// cache the reduced result so that the value can be shared across all listeners\n\t\t\t\t\t\treduceData.reducedResult ??= initial\n\t\t\t\t\t\t\t? reduceData.items!.reduce(reduce as (last: O | undefined, event: T) => O, initial)\n\t\t\t\t\t\t\t: reduceData.items!.reduce(reduce as (last: T | undefined, event: T) => T);\n\t\t\t\t\t\tlistener.call(thisArgs, reduceData.reducedResult);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, undefined, disposables);\n\t\t};\n\t}\n\n\tbufferEvents<R = void>(fn: () => R): R {\n\t\tconst data = { buffers: new Array<Function>() };\n\t\tthis.data.push(data);\n\t\tconst r = fn();\n\t\tthis.data.pop();\n\t\tdata.buffers.forEach(flush => flush());\n\t\treturn r;\n\t}\n\n\tasync bufferEventsAsync<R = void>(fn: () => Promise<R>): Promise<R> {\n\t\tconst data = { buffers: new Array<Function>() };\n\t\tthis.data.push(data);\n\t\ttry {\n\t\t\tconst r = await fn();\n\t\t\treturn r;\n\t\t} finally {\n\t\t\tthis.data.pop();\n\t\t\tdata.buffers.forEach(flush => flush());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/experimentation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport { getExperimentationService, IExperimentationService, IExperimentationTelemetry, TargetPopulation } from 'vscode-tas-client';\n\nexport async function createExperimentationService(\n\tcontext: vscode.ExtensionContext,\n\texperimentationTelemetry: IExperimentationTelemetry,\n\tisPreRelease: boolean,\n): Promise<IExperimentationService> {\n\tconst id = context.extension.id;\n\tconst version = context.extension.packageJSON['version'];\n\n\tconst service = getExperimentationService(\n\t\tid,\n\t\tversion,\n\t\tisPreRelease ? TargetPopulation.Insiders : TargetPopulation.Public,\n\t\texperimentationTelemetry,\n\t\tcontext.globalState,\n\t) as unknown as IExperimentationService;\n\tawait service.initializePromise;\n\tawait service.initialFetch;\n\treturn service;\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/loggerOptions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { LogLevel as MsalLogLevel } from '@azure/msal-node';\nimport { env, LogLevel, LogOutputChannel } from 'vscode';\n\nexport class MsalLoggerOptions {\n\tpiiLoggingEnabled = false;\n\n\tconstructor(private readonly _output: LogOutputChannel) { }\n\n\tget logLevel(): MsalLogLevel {\n\t\treturn this._toMsalLogLevel(env.logLevel);\n\t}\n\n\tloggerCallback(level: MsalLogLevel, message: string, containsPii: boolean): void {\n\t\tif (containsPii) {\n\t\t\t// TODO: Should we still log the message if it contains PII? It's just going to\n\t\t\t// an output channel that doesn't leave the machine.\n\t\t\tthis._output.debug('Skipped logging message because it may contain PII');\n\t\t\treturn;\n\t\t}\n\n\t\t// Log to output channel one level lower than the MSAL log level\n\t\tswitch (level) {\n\t\t\tcase MsalLogLevel.Error:\n\t\t\t\tthis._output.error(message);\n\t\t\t\treturn;\n\t\t\tcase MsalLogLevel.Warning:\n\t\t\t\tthis._output.warn(message);\n\t\t\t\treturn;\n\t\t\tcase MsalLogLevel.Info:\n\t\t\t\tthis._output.debug(message);\n\t\t\t\treturn;\n\t\t\tcase MsalLogLevel.Verbose:\n\t\t\t\tthis._output.trace(message);\n\t\t\t\treturn;\n\t\t\tcase MsalLogLevel.Trace:\n\t\t\t\t// Do not log trace messages\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tthis._output.debug(message);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate _toMsalLogLevel(logLevel: LogLevel): MsalLogLevel {\n\t\tswitch (logLevel) {\n\t\t\tcase LogLevel.Trace:\n\t\t\t\treturn MsalLogLevel.Trace;\n\t\t\tcase LogLevel.Debug:\n\t\t\t\treturn MsalLogLevel.Verbose;\n\t\t\tcase LogLevel.Info:\n\t\t\t\treturn MsalLogLevel.Info;\n\t\t\tcase LogLevel.Warning:\n\t\t\t\treturn MsalLogLevel.Warning;\n\t\t\tcase LogLevel.Error:\n\t\t\t\treturn MsalLogLevel.Error;\n\t\t\tdefault:\n\t\t\t\treturn MsalLogLevel.Info;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/loopbackClientAndOpener.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type { ILoopbackClient, ServerAuthorizationCodeResponse } from '@azure/msal-node';\nimport type { UriEventHandler } from '../UriEventHandler';\nimport { Disposable, env, l10n, LogOutputChannel, Uri, window } from 'vscode';\nimport { DeferredPromise, toPromise } from './async';\nimport { isSupportedClient } from './env';\n\nexport interface ILoopbackClientAndOpener extends ILoopbackClient {\n\topenBrowser(url: string): Promise<void>;\n}\n\nexport class UriHandlerLoopbackClient implements ILoopbackClientAndOpener {\n\tprivate _responseDeferred: DeferredPromise<ServerAuthorizationCodeResponse> | undefined;\n\n\tconstructor(\n\t\tprivate readonly _uriHandler: UriEventHandler,\n\t\tprivate readonly _redirectUri: string,\n\t\tprivate readonly _logger: LogOutputChannel\n\t) { }\n\n\tasync listenForAuthCode(): Promise<ServerAuthorizationCodeResponse> {\n\t\tawait this._responseDeferred?.cancel();\n\t\tthis._responseDeferred = new DeferredPromise();\n\t\tconst result = await this._responseDeferred.p;\n\t\tthis._responseDeferred = undefined;\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new Error('No valid response received for authorization code.');\n\t}\n\n\tgetRedirectUri(): string {\n\t\t// We always return the constant redirect URL because\n\t\t// it will handle redirecting back to the extension\n\t\treturn this._redirectUri;\n\t}\n\n\tcloseServer(): void {\n\t\t// No-op\n\t}\n\n\tasync openBrowser(url: string): Promise<void> {\n\t\tconst callbackUri = await env.asExternalUri(Uri.parse(`${env.uriScheme}://vscode.microsoft-authentication`));\n\n\t\tif (isSupportedClient(callbackUri)) {\n\t\t\tvoid this._getCodeResponseFromUriHandler();\n\t\t} else {\n\t\t\t// Unsupported clients will be shown the code in the browser, but it will not redirect back since this\n\t\t\t// isn't a supported client. Instead, they will copy that code in the browser and paste it in an input box\n\t\t\t// that will be shown to them by the extension.\n\t\t\tvoid this._getCodeResponseFromQuickPick();\n\t\t}\n\n\t\tconst uri = Uri.parse(url + `&state=${encodeURI(callbackUri.toString(true))}`);\n\t\tawait env.openExternal(uri);\n\t}\n\n\tprivate async _getCodeResponseFromUriHandler(): Promise<void> {\n\t\tif (!this._responseDeferred) {\n\t\t\tthrow new Error('No listener for auth code');\n\t\t}\n\t\tconst url = await toPromise(this._uriHandler.event);\n\t\tthis._logger.debug(`Received URL event. Authority: ${url.authority}`);\n\t\tconst result = new URL(url.toString(true));\n\n\t\tthis._responseDeferred?.complete({\n\t\t\tcode: result.searchParams.get('code') ?? undefined,\n\t\t\tstate: result.searchParams.get('state') ?? undefined,\n\t\t\terror: result.searchParams.get('error') ?? undefined,\n\t\t\terror_description: result.searchParams.get('error_description') ?? undefined,\n\t\t\terror_uri: result.searchParams.get('error_uri') ?? undefined,\n\t\t});\n\t}\n\n\tprivate async _getCodeResponseFromQuickPick(): Promise<void> {\n\t\tif (!this._responseDeferred) {\n\t\t\tthrow new Error('No listener for auth code');\n\t\t}\n\t\tconst inputBox = window.createInputBox();\n\t\tinputBox.ignoreFocusOut = true;\n\t\tinputBox.title = l10n.t('Microsoft Authentication');\n\t\tinputBox.prompt = l10n.t('Provide the authorization code to complete the sign in flow.');\n\t\tinputBox.placeholder = l10n.t('Paste authorization code here...');\n\t\tinputBox.show();\n\t\tconst code = await new Promise<string | undefined>((resolve) => {\n\t\t\tlet resolvedValue: string | undefined = undefined;\n\t\t\tconst disposable = Disposable.from(\n\t\t\t\tinputBox,\n\t\t\t\tinputBox.onDidAccept(async () => {\n\t\t\t\t\tif (!inputBox.value) {\n\t\t\t\t\t\tinputBox.validationMessage = l10n.t('Authorization code is required.');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst code = inputBox.value;\n\t\t\t\t\tresolvedValue = code;\n\t\t\t\t\tresolve(code);\n\t\t\t\t\tinputBox.hide();\n\t\t\t\t}),\n\t\t\t\tinputBox.onDidChangeValue(() => {\n\t\t\t\t\tinputBox.validationMessage = undefined;\n\t\t\t\t}),\n\t\t\t\tinputBox.onDidHide(() => {\n\t\t\t\t\tdisposable.dispose();\n\t\t\t\t\tif (!resolvedValue) {\n\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tPromise.allSettled([this._responseDeferred?.p]).then(() => disposable.dispose());\n\t\t});\n\t\t// Something canceled the original deferred promise, so just return.\n\t\tif (this._responseDeferred.isSettled) {\n\t\t\treturn;\n\t\t}\n\t\tif (code) {\n\t\t\tthis._logger.debug('Received auth code from quick pick');\n\t\t\tthis._responseDeferred.complete({\n\t\t\t\tcode,\n\t\t\t\tstate: undefined,\n\t\t\t\terror: undefined,\n\t\t\t\terror_description: undefined,\n\t\t\t\terror_uri: undefined\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis._responseDeferred.complete({\n\t\t\tcode: undefined,\n\t\t\tstate: undefined,\n\t\t\terror: 'User cancelled',\n\t\t\terror_description: 'User cancelled',\n\t\t\terror_uri: undefined\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/publicClientCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport type { AccountInfo, AuthenticationResult, InteractiveRequest, RefreshTokenRequest, SilentFlowRequest } from '@azure/msal-node';\nimport type { Disposable, Event } from 'vscode';\n\nexport interface ICachedPublicClientApplication {\n\tonDidAccountsChange: Event<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>;\n\tonDidRemoveLastAccount: Event<void>;\n\tacquireTokenSilent(request: SilentFlowRequest): Promise<AuthenticationResult>;\n\tacquireTokenInteractive(request: InteractiveRequest): Promise<AuthenticationResult>;\n\tacquireTokenByRefreshToken(request: RefreshTokenRequest): Promise<AuthenticationResult | null>;\n\tremoveAccount(account: AccountInfo): Promise<void>;\n\taccounts: AccountInfo[];\n\tclientId: string;\n}\n\nexport interface ICachedPublicClientApplicationManager {\n\tonDidAccountsChange: Event<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>;\n\tgetOrCreate(clientId: string, refreshTokensToMigrate?: string[]): Promise<ICachedPublicClientApplication>;\n\tgetAll(): ICachedPublicClientApplication[];\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/scopeData.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst DEFAULT_CLIENT_ID = 'aebc6443-996d-45c2-90f0-388ff96faa56';\nconst DEFAULT_TENANT = 'organizations';\n\nconst OIDC_SCOPES = ['openid', 'email', 'profile', 'offline_access'];\nconst GRAPH_TACK_ON_SCOPE = 'User.Read';\n\nexport class ScopeData {\n\t/**\n\t * The full list of scopes including:\n\t * * the original scopes passed to the constructor\n\t * * internal VS Code scopes (e.g. `VSCODE_CLIENT_ID:...`)\n\t * * the default scopes (`openid`, `email`, `profile`, `offline_access`)\n\t */\n\treadonly allScopes: string[];\n\n\t/**\n\t * The full list of scopes as a space-separated string. For logging.\n\t */\n\treadonly scopeStr: string;\n\n\t/**\n\t * The list of scopes to send to the token endpoint. This is the same as `scopes` but without the internal VS Code scopes.\n\t */\n\treadonly scopesToSend: string[];\n\n\t/**\n\t * The client ID to use for the token request. This is the value of the `VSCODE_CLIENT_ID:...` scope if present, otherwise the default client ID.\n\t */\n\treadonly clientId: string;\n\n\t/**\n\t * The tenant ID or `organizations`, `common`, `consumers` to use for the token request. This is the value of the `VSCODE_TENANT:...` scope if present, otherwise it's the default.\n\t */\n\treadonly tenant: string;\n\n\t/**\n\t * The tenant ID to use for the token request. This will only ever be a GUID if one was specified via the `VSCODE_TENANT:...` scope, otherwise undefined.\n\t */\n\treadonly tenantId: string | undefined;\n\n\tconstructor(readonly originalScopes: readonly string[] = []) {\n\t\tconst modifiedScopes = [...originalScopes];\n\t\tmodifiedScopes.sort();\n\t\tthis.allScopes = modifiedScopes;\n\t\tthis.scopeStr = modifiedScopes.join(' ');\n\t\tthis.scopesToSend = this.getScopesToSend(modifiedScopes);\n\t\tthis.clientId = this.getClientId(this.allScopes);\n\t\tthis.tenant = this.getTenant(this.allScopes);\n\t\tthis.tenantId = this.getTenantId(this.tenant);\n\t}\n\n\tprivate getClientId(scopes: string[]): string {\n\t\treturn scopes.reduce<string | undefined>((prev, current) => {\n\t\t\tif (current.startsWith('VSCODE_CLIENT_ID:')) {\n\t\t\t\treturn current.split('VSCODE_CLIENT_ID:')[1];\n\t\t\t}\n\t\t\treturn prev;\n\t\t}, undefined) ?? DEFAULT_CLIENT_ID;\n\t}\n\n\tprivate getTenant(scopes: string[]): string {\n\t\treturn scopes.reduce<string | undefined>((prev, current) => {\n\t\t\tif (current.startsWith('VSCODE_TENANT:')) {\n\t\t\t\treturn current.split('VSCODE_TENANT:')[1];\n\t\t\t}\n\t\t\treturn prev;\n\t\t}, undefined) ?? DEFAULT_TENANT;\n\t}\n\n\tprivate getTenantId(tenant: string): string | undefined {\n\t\tswitch (tenant) {\n\t\t\tcase 'organizations':\n\t\t\tcase 'common':\n\t\t\tcase 'consumers':\n\t\t\t\t// These are not valid tenant IDs, so we return undefined\n\t\t\t\treturn undefined;\n\t\t\tdefault:\n\t\t\t\treturn this.tenant;\n\t\t}\n\t}\n\n\tprivate getScopesToSend(scopes: string[]): string[] {\n\t\tconst scopesToSend = scopes.filter(s => !s.startsWith('VSCODE_'));\n\n\t\tconst set = new Set(scopesToSend);\n\t\tfor (const scope of OIDC_SCOPES) {\n\t\t\tset.delete(scope);\n\t\t}\n\n\t\t// If we only had OIDC scopes, we need to add a tack-on scope to make the request valid\n\t\t// by forcing Identity into treating this as a Graph token request.\n\t\tif (!set.size) {\n\t\t\tscopesToSend.push(GRAPH_TACK_ON_SCOPE);\n\t\t}\n\t\treturn scopesToSend;\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/telemetryReporter.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport TelemetryReporter, { TelemetryEventProperties } from '@vscode/extension-telemetry';\nimport { IExperimentationTelemetry } from 'vscode-tas-client';\n\nexport const enum MicrosoftAccountType {\n\tAAD = 'aad',\n\tMSA = 'msa',\n\tUnknown = 'unknown'\n}\n\nexport class MicrosoftAuthenticationTelemetryReporter implements IExperimentationTelemetry {\n\tprivate sharedProperties: Record<string, string> = {};\n\tprotected _telemetryReporter: TelemetryReporter;\n\tconstructor(aiKey: string) {\n\t\tthis._telemetryReporter = new TelemetryReporter(aiKey);\n\t}\n\n\tget telemetryReporter(): TelemetryReporter {\n\t\treturn this._telemetryReporter;\n\t}\n\n\tsetSharedProperty(name: string, value: string): void {\n\t\tthis.sharedProperties[name] = value;\n\t}\n\n\tpostEvent(eventName: string, props: Map<string, string>): void {\n\t\tconst eventProperties: TelemetryEventProperties = { ...this.sharedProperties, ...Object.fromEntries(props) };\n\t\tthis._telemetryReporter.sendTelemetryEvent(\n\t\t\teventName,\n\t\t\teventProperties\n\t\t);\n\t}\n\n\tsendLoginEvent(scopes: readonly string[]): void {\n\t\t/* __GDPR__\n\t\t\t\"login\" : {\n\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\"comment\": \"Used to determine the usage of the Microsoft Auth Provider.\",\n\t\t\t\t\"scopes\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what scope combinations are being requested.\" }\n\t\t\t}\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('login', {\n\t\t\t// Get rid of guids from telemetry.\n\t\t\tscopes: JSON.stringify(this._scrubGuids(scopes)),\n\t\t});\n\t}\n\tsendLoginFailedEvent(): void {\n\t\t/* __GDPR__\n\t\t\t\"loginFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users run into issues with the login flow.\" }\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('loginFailed');\n\t}\n\tsendLogoutEvent(): void {\n\t\t/* __GDPR__\n\t\t\t\"logout\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users log out.\" }\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('logout');\n\t}\n\tsendLogoutFailedEvent(): void {\n\t\t/* __GDPR__\n\t\t\t\"logoutFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often fail to log out.\" }\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('logoutFailed');\n\t}\n\t/**\n\t * Sends an event for an account type available at startup.\n\t * @param scopes The scopes for the session\n\t * @param accountType The account type for the session\n\t * @todo Remove the scopes since we really don't care about them.\n\t */\n\tsendAccountEvent(scopes: string[], accountType: MicrosoftAccountType): void {\n\t\t/* __GDPR__\n\t\t\t\"login\" : {\n\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\"comment\": \"Used to determine the usage of the Microsoft Auth Provider.\",\n\t\t\t\t\"scopes\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what scope combinations are being requested.\" },\n\t\t\t\t\"accountType\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what account types are being used.\" }\n\t\t\t}\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('account', {\n\t\t\t// Get rid of guids from telemetry.\n\t\t\tscopes: JSON.stringify(this._scrubGuids(scopes)),\n\t\t\taccountType\n\t\t});\n\t}\n\n\tprotected _scrubGuids(scopes: readonly string[]): string[] {\n\t\treturn scopes.map(s => s.replace(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/i, '{guid}'));\n\t}\n}\n\nexport class MicrosoftSovereignCloudAuthenticationTelemetryReporter extends MicrosoftAuthenticationTelemetryReporter {\n\toverride sendLoginEvent(scopes: string[]): void {\n\t\t/* __GDPR__\n\t\t\t\"loginMicrosoftSovereignCloud\" : {\n\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\"comment\": \"Used to determine the usage of the Microsoft Auth Provider.\",\n\t\t\t\t\"scopes\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what scope combinations are being requested.\" }\n\t\t\t}\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('loginMicrosoftSovereignCloud', {\n\t\t\t// Get rid of guids from telemetry.\n\t\t\tscopes: JSON.stringify(this._scrubGuids(scopes)),\n\t\t});\n\t}\n\toverride sendLoginFailedEvent(): void {\n\t\t/* __GDPR__\n\t\t\t\"loginMicrosoftSovereignCloudFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users run into issues with the login flow.\" }\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('loginMicrosoftSovereignCloudFailed');\n\t}\n\toverride sendLogoutEvent(): void {\n\t\t/* __GDPR__\n\t\t\t\"logoutMicrosoftSovereignCloud\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users log out.\" }\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('logoutMicrosoftSovereignCloud');\n\t}\n\toverride sendLogoutFailedEvent(): void {\n\t\t/* __GDPR__\n\t\t\t\"logoutMicrosoftSovereignCloudFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often fail to log out.\" }\n\t\t*/\n\t\tthis._telemetryReporter.sendTelemetryEvent('logoutMicrosoftSovereignCloudFailed');\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/test/loopbackClientAndOpener.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { env, Uri, window } from 'vscode';\nimport * as sinon from 'sinon';\nimport { UriHandlerLoopbackClient } from '../loopbackClientAndOpener';\nimport { UriEventHandler } from '../../UriEventHandler';\n\nsuite('UriHandlerLoopbackClient', () => {\n\tconst redirectUri = 'http://localhost';\n\tlet uriHandler: UriEventHandler;\n\tlet client: UriHandlerLoopbackClient;\n\tlet envStub: sinon.SinonStubbedInstance<typeof env>;\n\tlet callbackUri: Uri;\n\n\tsetup(async () => {\n\t\tcallbackUri = await env.asExternalUri(Uri.parse(`${env.uriScheme}://vscode.microsoft-authentication`));\n\t\tenvStub = sinon.stub(env);\n\t\tenvStub.openExternal.resolves(true);\n\t\tenvStub.asExternalUri.callThrough();\n\t\turiHandler = new UriEventHandler();\n\t\tclient = new UriHandlerLoopbackClient(uriHandler, redirectUri, window.createOutputChannel('test', { log: true }));\n\t});\n\n\tteardown(() => {\n\t\tsinon.restore();\n\t\turiHandler.dispose();\n\t});\n\n\tsuite('openBrowser', () => {\n\t\ttest('should open browser with correct URL', async () => {\n\t\t\tconst testUrl = 'http://example.com?foo=5';\n\n\t\t\tawait client.openBrowser(testUrl);\n\n\t\t\tassert.ok(envStub.asExternalUri.calledOnce);\n\t\t\tassert.ok(envStub.openExternal.calledOnce);\n\n\t\t\tconst expectedUri = Uri.parse(testUrl + `&state=${encodeURI(callbackUri.toString(true))}`);\n\t\t\tconst value = envStub.openExternal.getCalls()[0].args[0];\n\t\t\tassert.strictEqual(value.toString(true), expectedUri.toString(true));\n\t\t});\n\t});\n\n\tsuite('getRedirectUri', () => {\n\t\ttest('should return the redirect URI', () => {\n\t\t\tconst result = client.getRedirectUri();\n\t\t\tassert.strictEqual(result, redirectUri);\n\t\t});\n\t});\n\n\tsuite('listenForAuthCode', () => {\n\t\ttest('should return auth code from URL', async () => {\n\t\t\tconst code = '1234';\n\t\t\tconst state = '5678';\n\t\t\tconst testUrl = Uri.parse(`http://example.com?code=${code}&state=${state}`);\n\t\t\tconst promise = client.listenForAuthCode();\n\t\t\turiHandler.handleUri(testUrl);\n\t\t\tconst result = await promise;\n\n\t\t\tassert.strictEqual(result.code, code);\n\t\t\tassert.strictEqual(result.state, state);\n\t\t});\n\n\t\ttest('should return auth error from URL', async () => {\n\t\t\tconst error = 'access_denied';\n\t\t\tconst errorDescription = 'reason';\n\t\t\tconst errorUri = 'uri';\n\t\t\tconst testUrl = Uri.parse(`http://example.com?error=${error}&error_description=${errorDescription}&error_uri=${errorUri}`);\n\n\t\t\tconst promise = client.listenForAuthCode();\n\t\t\turiHandler.handleUri(testUrl);\n\t\t\tconst result = await promise;\n\n\t\t\tassert.strictEqual(result.error, 'access_denied');\n\t\t\tassert.strictEqual(result.error_description, 'reason');\n\t\t\tassert.strictEqual(result.error_uri, 'uri');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/test/scopeData.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { ScopeData } from '../scopeData';\n\nsuite('ScopeData', () => {\n\ttest('should include default scopes if not present', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope']);\n\t\tassert.deepStrictEqual(scopeData.allScopes, ['custom_scope']);\n\t});\n\n\ttest('should not duplicate default scopes if already present', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope', 'openid', 'email', 'profile', 'offline_access']);\n\t\tassert.deepStrictEqual(scopeData.allScopes, ['custom_scope', 'email', 'offline_access', 'openid', 'profile']);\n\t});\n\n\ttest('should sort the scopes alphabetically', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope', 'profile', 'email', 'openid', 'offline_access']);\n\t\tassert.deepStrictEqual(scopeData.allScopes, ['custom_scope', 'email', 'offline_access', 'openid', 'profile']);\n\t});\n\n\ttest('should create a space-separated string of all scopes', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope', 'openid', 'email', 'offline_access', 'profile']);\n\t\tassert.strictEqual(scopeData.scopeStr, 'custom_scope email offline_access openid profile');\n\t});\n\n\ttest('should add TACK ON scope if all scopes are OIDC scopes', () => {\n\t\tconst scopeData = new ScopeData(['openid', 'email', 'offline_access', 'profile']);\n\t\tassert.deepStrictEqual(scopeData.scopesToSend, ['email', 'offline_access', 'openid', 'profile', 'User.Read']);\n\t});\n\n\ttest('should filter out internal VS Code scopes for scopesToSend', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope', 'VSCODE_CLIENT_ID:some_id']);\n\t\tassert.deepStrictEqual(scopeData.scopesToSend, ['custom_scope']);\n\t});\n\n\ttest('should use the default client ID if no VSCODE_CLIENT_ID scope is present', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope']);\n\t\tassert.strictEqual(scopeData.clientId, 'aebc6443-996d-45c2-90f0-388ff96faa56');\n\t});\n\n\ttest('should use the VSCODE_CLIENT_ID scope if present', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope', 'VSCODE_CLIENT_ID:some_id']);\n\t\tassert.strictEqual(scopeData.clientId, 'some_id');\n\t});\n\n\ttest('should use the default tenant ID if no VSCODE_TENANT scope is present', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope']);\n\t\tassert.strictEqual(scopeData.tenant, 'organizations');\n\t});\n\n\ttest('should use the VSCODE_TENANT scope if present', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope', 'VSCODE_TENANT:some_tenant']);\n\t\tassert.strictEqual(scopeData.tenant, 'some_tenant');\n\t});\n\n\ttest('should have tenantId be undefined if no VSCODE_TENANT scope is present', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope']);\n\t\tassert.strictEqual(scopeData.tenantId, undefined);\n\t});\n\n\ttest('should have tenantId be undefined if typical tenant values are present', () => {\n\t\tfor (const element of ['common', 'organizations', 'consumers']) {\n\t\t\tconst scopeData = new ScopeData(['custom_scope', `VSCODE_TENANT:${element}`]);\n\t\t\tassert.strictEqual(scopeData.tenantId, undefined);\n\t\t}\n\t});\n\n\ttest('should have tenantId be the value of VSCODE_TENANT scope if set to a specific value', () => {\n\t\tconst scopeData = new ScopeData(['custom_scope', 'VSCODE_TENANT:some_guid']);\n\t\tassert.strictEqual(scopeData.tenantId, 'some_guid');\n\t});\n});\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/common/uri.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { env, UIKind, Uri } from 'vscode';\n\nconst LOCALHOST_ADDRESSES = ['localhost', '127.0.0.1', '0:0:0:0:0:0:0:1', '::1'];\nfunction isLocalhost(uri: Uri): boolean {\n\tif (!/^https?$/i.test(uri.scheme)) {\n\t\treturn false;\n\t}\n\tconst host = uri.authority.split(':')[0];\n\treturn LOCALHOST_ADDRESSES.indexOf(host) >= 0;\n}\n\nexport function isSupportedEnvironment(uri: Uri): boolean {\n\tif (env.uiKind === UIKind.Desktop) {\n\t\treturn true;\n\t}\n\t// local development (localhost:* or 127.0.0.1:*)\n\tif (isLocalhost(uri)) {\n\t\treturn true;\n\t}\n\t// At this point we should only ever see https\n\tif (uri.scheme !== 'https') {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\t// vscode.dev & insiders.vscode.dev\n\t\t/(?:^|\\.)vscode\\.dev$/.test(uri.authority) ||\n\t\t// github.dev & codespaces\n\t\t/(?:^|\\.)github\\.dev$/.test(uri.authority) ||\n\t\t// github.dev/codespaces local setup (github.localhost)\n\t\t/(?:^|\\.)github\\.localhost$/.test(uri.authority)\n\t);\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/cryptoUtils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { base64Encode } from './node/buffer';\n\nexport function randomUUID() {\n\treturn crypto.randomUUID();\n}\n\nfunction dec2hex(dec: number): string {\n\treturn ('0' + dec.toString(16)).slice(-2);\n}\n\nexport function generateCodeVerifier(): string {\n\tconst array = new Uint32Array(56 / 2);\n\tcrypto.getRandomValues(array);\n\treturn Array.from(array, dec2hex).join('');\n}\n\nfunction sha256(plain: string | undefined) {\n\tconst encoder = new TextEncoder();\n\tconst data = encoder.encode(plain);\n\treturn crypto.subtle.digest('SHA-256', data);\n}\n\nfunction base64urlencode(a: ArrayBuffer) {\n\tlet str = '';\n\tconst bytes = new Uint8Array(a);\n\tconst len = bytes.byteLength;\n\tfor (let i = 0; i < len; i++) {\n\t\tstr += String.fromCharCode(bytes[i]);\n\t}\n\treturn base64Encode(str)\n\t\t.replace(/\\+/g, '-')\n\t\t.replace(/\\//g, '_')\n\t\t.replace(/=+$/, '');\n}\n\nexport async function generateCodeChallenge(v: string) {\n\tconst hashed = await sha256(v);\n\tconst base64encoded = base64urlencode(hashed);\n\treturn base64encoded;\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { commands, env, ExtensionContext, l10n, window, workspace } from 'vscode';\nimport * as extensionV1 from './extensionV1';\nimport * as extensionV2 from './extensionV2';\nimport { createExperimentationService } from './common/experimentation';\nimport { MicrosoftAuthenticationTelemetryReporter } from './common/telemetryReporter';\nimport { IExperimentationService } from 'vscode-tas-client';\nimport Logger from './logger';\n\nfunction shouldUseMsal(expService: IExperimentationService): boolean {\n\t// First check if there is a setting value to allow user to override the default\n\tconst inspect = workspace.getConfiguration('microsoft-authentication').inspect<'msal' | 'classic'>('implementation');\n\tif (inspect?.workspaceFolderValue !== undefined) {\n\t\tLogger.info(`Acquired MSAL enablement value from 'workspaceFolderValue'. Value: ${inspect.workspaceFolderValue}`);\n\t\treturn inspect.workspaceFolderValue === 'msal';\n\t}\n\tif (inspect?.workspaceValue !== undefined) {\n\t\tLogger.info(`Acquired MSAL enablement value from 'workspaceValue'. Value: ${inspect.workspaceValue}`);\n\t\treturn inspect.workspaceValue === 'msal';\n\t}\n\tif (inspect?.globalValue !== undefined) {\n\t\tLogger.info(`Acquired MSAL enablement value from 'globalValue'. Value: ${inspect.globalValue}`);\n\t\treturn inspect.globalValue === 'msal';\n\t}\n\n\t// Then check if the experiment value\n\tconst expValue = expService.getTreatmentVariable<boolean>('vscode', 'microsoft.useMsal');\n\tif (expValue !== undefined) {\n\t\tLogger.info(`Acquired MSAL enablement value from 'exp'. Value: ${expValue}`);\n\t\treturn expValue;\n\t}\n\n\tLogger.info('Acquired MSAL enablement value from default. Value: false');\n\t// If no setting or experiment value is found, default to true\n\treturn true;\n}\n\nlet useMsal: boolean | undefined;\nexport async function activate(context: ExtensionContext) {\n\tconst mainTelemetryReporter = new MicrosoftAuthenticationTelemetryReporter(context.extension.packageJSON.aiKey);\n\tconst expService = await createExperimentationService(\n\t\tcontext,\n\t\tmainTelemetryReporter,\n\t\tenv.uriScheme !== 'vscode', // isPreRelease\n\t);\n\tuseMsal = shouldUseMsal(expService);\n\tconst clientIdVersion = workspace.getConfiguration('microsoft-authentication').get<'v1' | 'v2'>('clientIdVersion', 'v1');\n\n\tcontext.subscriptions.push(workspace.onDidChangeConfiguration(async e => {\n\t\tif (!e.affectsConfiguration('microsoft-authentication')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (useMsal === shouldUseMsal(expService) && clientIdVersion === workspace.getConfiguration('microsoft-authentication').get<'v1' | 'v2'>('clientIdVersion', 'v1')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst reload = l10n.t('Reload');\n\t\tconst result = await window.showInformationMessage(\n\t\t\t'Reload required',\n\t\t\t{\n\t\t\t\tmodal: true,\n\t\t\t\tdetail: l10n.t('Microsoft Account configuration has been changed.'),\n\t\t\t},\n\t\t\treload\n\t\t);\n\n\t\tif (result === reload) {\n\t\t\tcommands.executeCommand('workbench.action.reloadWindow');\n\t\t}\n\t}));\n\t// Only activate the new extension if we are not running in a browser environment\n\tif (useMsal && typeof navigator === 'undefined') {\n\t\tawait extensionV2.activate(context, mainTelemetryReporter);\n\t} else {\n\t\tawait extensionV1.activate(context, mainTelemetryReporter.telemetryReporter);\n\t}\n}\n\nexport function deactivate() {\n\tif (useMsal) {\n\t\textensionV2.deactivate();\n\t} else {\n\t\textensionV1.deactivate();\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/extensionV1.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Environment, EnvironmentParameters } from '@azure/ms-rest-azure-env';\nimport { AzureActiveDirectoryService, IStoredSession } from './AADHelper';\nimport { BetterTokenStorage } from './betterSecretStorage';\nimport { UriEventHandler } from './UriEventHandler';\nimport TelemetryReporter from '@vscode/extension-telemetry';\nimport Logger from './logger';\n\nasync function initMicrosoftSovereignCloudAuthProvider(context: vscode.ExtensionContext, telemetryReporter: TelemetryReporter, uriHandler: UriEventHandler, tokenStorage: BetterTokenStorage<IStoredSession>): Promise<vscode.Disposable | undefined> {\n\tconst environment = vscode.workspace.getConfiguration('microsoft-sovereign-cloud').get<string | undefined>('environment');\n\tlet authProviderName: string | undefined;\n\tif (!environment) {\n\t\treturn undefined;\n\t}\n\n\tif (environment === 'custom') {\n\t\tconst customEnv = vscode.workspace.getConfiguration('microsoft-sovereign-cloud').get<EnvironmentParameters>('customEnvironment');\n\t\tif (!customEnv) {\n\t\t\tconst res = await vscode.window.showErrorMessage(vscode.l10n.t('You must also specify a custom environment in order to use the custom environment auth provider.'), vscode.l10n.t('Open settings'));\n\t\t\tif (res) {\n\t\t\t\tawait vscode.commands.executeCommand('workbench.action.openSettingsJson', 'microsoft-sovereign-cloud.customEnvironment');\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\ttry {\n\t\t\tEnvironment.add(customEnv);\n\t\t} catch (e) {\n\t\t\tconst res = await vscode.window.showErrorMessage(vscode.l10n.t('Error validating custom environment setting: {0}', e.message), vscode.l10n.t('Open settings'));\n\t\t\tif (res) {\n\t\t\t\tawait vscode.commands.executeCommand('workbench.action.openSettings', 'microsoft-sovereign-cloud.customEnvironment');\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\tauthProviderName = customEnv.name;\n\t} else {\n\t\tauthProviderName = environment;\n\t}\n\n\tconst env = Environment.get(authProviderName);\n\tif (!env) {\n\t\tconst res = await vscode.window.showErrorMessage(vscode.l10n.t('The environment `{0}` is not a valid environment.', authProviderName), vscode.l10n.t('Open settings'));\n\t\treturn undefined;\n\t}\n\n\tconst aadService = new AzureActiveDirectoryService(\n\t\tvscode.window.createOutputChannel(vscode.l10n.t('Microsoft Sovereign Cloud Authentication'), { log: true }),\n\t\tcontext,\n\t\turiHandler,\n\t\ttokenStorage,\n\t\ttelemetryReporter,\n\t\tenv);\n\tawait aadService.initialize();\n\n\tconst disposable = vscode.authentication.registerAuthenticationProvider('microsoft-sovereign-cloud', authProviderName, {\n\t\tonDidChangeSessions: aadService.onDidChangeSessions,\n\t\tgetSessions: (scopes: string[]) => aadService.getSessions(scopes),\n\t\tcreateSession: async (scopes: string[]) => {\n\t\t\ttry {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"login\" : {\n\t\t\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\t\t\"comment\": \"Used to determine the usage of the Microsoft Sovereign Cloud Auth Provider.\",\n\t\t\t\t\t\t\"scopes\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what scope combinations are being requested.\" }\n\t\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('loginMicrosoftSovereignCloud', {\n\t\t\t\t\t// Get rid of guids from telemetry.\n\t\t\t\t\tscopes: JSON.stringify(scopes.map(s => s.replace(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/i, '{guid}'))),\n\t\t\t\t});\n\n\t\t\t\treturn await aadService.createSession(scopes);\n\t\t\t} catch (e) {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"loginFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users run into issues with the login flow.\" }\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('loginMicrosoftSovereignCloudFailed');\n\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t},\n\t\tremoveSession: async (id: string) => {\n\t\t\ttry {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"logout\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users log out.\" }\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('logoutMicrosoftSovereignCloud');\n\n\t\t\t\tawait aadService.removeSessionById(id);\n\t\t\t} catch (e) {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"logoutFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often fail to log out.\" }\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('logoutMicrosoftSovereignCloudFailed');\n\t\t\t}\n\t\t}\n\t}, { supportsMultipleAccounts: true });\n\n\tcontext.subscriptions.push(disposable);\n\treturn disposable;\n}\n\nexport async function activate(context: vscode.ExtensionContext, telemetryReporter: TelemetryReporter) {\n\t// If we ever activate the old flow, then mark that we will need to migrate when the user upgrades to v2.\n\t// TODO: MSAL Migration. Remove this when we remove the old flow.\n\tcontext.globalState.update('msalMigration', false);\n\n\tconst uriHandler = new UriEventHandler();\n\tcontext.subscriptions.push(uriHandler);\n\tconst betterSecretStorage = new BetterTokenStorage<IStoredSession>('microsoft.login.keylist', context);\n\n\tconst loginService = new AzureActiveDirectoryService(\n\t\tLogger,\n\t\tcontext,\n\t\turiHandler,\n\t\tbetterSecretStorage,\n\t\ttelemetryReporter,\n\t\tEnvironment.AzureCloud);\n\tawait loginService.initialize();\n\n\tcontext.subscriptions.push(vscode.authentication.registerAuthenticationProvider('microsoft', 'Microsoft', {\n\t\tonDidChangeSessions: loginService.onDidChangeSessions,\n\t\tgetSessions: (scopes: string[], options?: vscode.AuthenticationProviderSessionOptions) => loginService.getSessions(scopes, options?.account),\n\t\tcreateSession: async (scopes: string[], options?: vscode.AuthenticationProviderSessionOptions) => {\n\t\t\ttry {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"login\" : {\n\t\t\t\t\t\t\"owner\": \"TylerLeonhardt\",\n\t\t\t\t\t\t\"comment\": \"Used to determine the usage of the Microsoft Auth Provider.\",\n\t\t\t\t\t\t\"scopes\": { \"classification\": \"PublicNonPersonalData\", \"purpose\": \"FeatureInsight\", \"comment\": \"Used to determine what scope combinations are being requested.\" }\n\t\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('login', {\n\t\t\t\t\t// Get rid of guids from telemetry.\n\t\t\t\t\tscopes: JSON.stringify(scopes.map(s => s.replace(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/i, '{guid}'))),\n\t\t\t\t});\n\n\t\t\t\treturn await loginService.createSession(scopes, options?.account);\n\t\t\t} catch (e) {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"loginFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users run into issues with the login flow.\" }\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('loginFailed');\n\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t},\n\t\tremoveSession: async (id: string) => {\n\t\t\ttry {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"logout\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often users log out.\" }\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('logout');\n\n\t\t\t\tawait loginService.removeSessionById(id);\n\t\t\t} catch (e) {\n\t\t\t\t/* __GDPR__\n\t\t\t\t\t\"logoutFailed\" : { \"owner\": \"TylerLeonhardt\", \"comment\": \"Used to determine how often fail to log out.\" }\n\t\t\t\t*/\n\t\t\t\ttelemetryReporter.sendTelemetryEvent('logoutFailed');\n\t\t\t}\n\t\t}\n\t}, { supportsMultipleAccounts: true }));\n\n\tlet microsoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, telemetryReporter, uriHandler, betterSecretStorage);\n\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(async e => {\n\t\tif (e.affectsConfiguration('microsoft-sovereign-cloud')) {\n\t\t\tmicrosoftSovereignCloudAuthProviderDisposable?.dispose();\n\t\t\tmicrosoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, telemetryReporter, uriHandler, betterSecretStorage);\n\t\t}\n\t}));\n\n\treturn;\n}\n\n// this method is called when your extension is deactivated\nexport function deactivate() { }\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/extensionV2.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Environment, EnvironmentParameters } from '@azure/ms-rest-azure-env';\nimport Logger from './logger';\nimport { MsalAuthProvider } from './node/authProvider';\nimport { UriEventHandler } from './UriEventHandler';\nimport { authentication, commands, ExtensionContext, l10n, window, workspace, Disposable } from 'vscode';\nimport { MicrosoftAuthenticationTelemetryReporter, MicrosoftSovereignCloudAuthenticationTelemetryReporter } from './common/telemetryReporter';\n\nasync function initMicrosoftSovereignCloudAuthProvider(\n\tcontext: ExtensionContext,\n\turiHandler: UriEventHandler\n): Promise<Disposable | undefined> {\n\tconst environment = workspace.getConfiguration('microsoft-sovereign-cloud').get<string | undefined>('environment');\n\tlet authProviderName: string | undefined;\n\tif (!environment) {\n\t\treturn undefined;\n\t}\n\n\tif (environment === 'custom') {\n\t\tconst customEnv = workspace.getConfiguration('microsoft-sovereign-cloud').get<EnvironmentParameters>('customEnvironment');\n\t\tif (!customEnv) {\n\t\t\tconst res = await window.showErrorMessage(l10n.t('You must also specify a custom environment in order to use the custom environment auth provider.'), l10n.t('Open settings'));\n\t\t\tif (res) {\n\t\t\t\tawait commands.executeCommand('workbench.action.openSettingsJson', 'microsoft-sovereign-cloud.customEnvironment');\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\ttry {\n\t\t\tEnvironment.add(customEnv);\n\t\t} catch (e) {\n\t\t\tconst res = await window.showErrorMessage(l10n.t('Error validating custom environment setting: {0}', e.message), l10n.t('Open settings'));\n\t\t\tif (res) {\n\t\t\t\tawait commands.executeCommand('workbench.action.openSettings', 'microsoft-sovereign-cloud.customEnvironment');\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\tauthProviderName = customEnv.name;\n\t} else {\n\t\tauthProviderName = environment;\n\t}\n\n\tconst env = Environment.get(authProviderName);\n\tif (!env) {\n\t\tawait window.showErrorMessage(l10n.t('The environment `{0}` is not a valid environment.', authProviderName), l10n.t('Open settings'));\n\t\treturn undefined;\n\t}\n\n\tconst authProvider = await MsalAuthProvider.create(\n\t\tcontext,\n\t\tnew MicrosoftSovereignCloudAuthenticationTelemetryReporter(context.extension.packageJSON.aiKey),\n\t\twindow.createOutputChannel(l10n.t('Microsoft Sovereign Cloud Authentication'), { log: true }),\n\t\turiHandler,\n\t\tenv\n\t);\n\tconst disposable = authentication.registerAuthenticationProvider(\n\t\t'microsoft-sovereign-cloud',\n\t\tauthProviderName,\n\t\tauthProvider,\n\t\t{ supportsMultipleAccounts: true }\n\t);\n\tcontext.subscriptions.push(disposable);\n\treturn disposable;\n}\n\nexport async function activate(context: ExtensionContext, mainTelemetryReporter: MicrosoftAuthenticationTelemetryReporter) {\n\tconst uriHandler = new UriEventHandler();\n\tcontext.subscriptions.push(uriHandler);\n\tconst authProvider = await MsalAuthProvider.create(\n\t\tcontext,\n\t\tmainTelemetryReporter,\n\t\tLogger,\n\t\turiHandler\n\t);\n\tcontext.subscriptions.push(authentication.registerAuthenticationProvider(\n\t\t'microsoft',\n\t\t'Microsoft',\n\t\tauthProvider,\n\t\t{ supportsMultipleAccounts: true }\n\t));\n\n\tlet microsoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, uriHandler);\n\n\tcontext.subscriptions.push(workspace.onDidChangeConfiguration(async e => {\n\t\tif (e.affectsConfiguration('microsoft-sovereign-cloud')) {\n\t\t\tmicrosoftSovereignCloudAuthProviderDisposable?.dispose();\n\t\t\tmicrosoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, uriHandler);\n\t\t}\n\t}));\n}\n\nexport function deactivate() { }\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/logger.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nconst Logger = vscode.window.createOutputChannel(vscode.l10n.t('Microsoft Authentication'), { log: true });\nexport default Logger;\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/authProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { AccountInfo, AuthenticationResult, ClientAuthError, ClientAuthErrorCodes, ServerError } from '@azure/msal-node';\nimport { AuthenticationGetSessionOptions, AuthenticationProvider, AuthenticationProviderAuthenticationSessionsChangeEvent, AuthenticationProviderSessionOptions, AuthenticationSession, AuthenticationSessionAccountInformation, CancellationError, EventEmitter, ExtensionContext, ExtensionKind, l10n, LogOutputChannel, window } from 'vscode';\nimport { Environment } from '@azure/ms-rest-azure-env';\nimport { CachedPublicClientApplicationManager } from './publicClientCache';\nimport { UriEventHandler } from '../UriEventHandler';\nimport { ICachedPublicClientApplication, ICachedPublicClientApplicationManager } from '../common/publicClientCache';\nimport { MicrosoftAccountType, MicrosoftAuthenticationTelemetryReporter } from '../common/telemetryReporter';\nimport { ScopeData } from '../common/scopeData';\nimport { EventBufferer } from '../common/event';\nimport { BetterTokenStorage } from '../betterSecretStorage';\nimport { IStoredSession } from '../AADHelper';\nimport { ExtensionHost, getMsalFlows } from './flows';\n\nconst redirectUri = 'https://vscode.dev/redirect';\nconst MSA_TID = '9188040d-6c67-4c5b-b112-36a304b66dad';\nconst MSA_PASSTHRU_TID = 'f8cdef31-a31e-4b4a-93e4-5f571e91255a';\n\nexport class MsalAuthProvider implements AuthenticationProvider {\n\n\tprivate readonly _disposables: { dispose(): void }[];\n\tprivate readonly _eventBufferer = new EventBufferer();\n\n\t/**\n\t * Event to signal a change in authentication sessions for this provider.\n\t */\n\tprivate readonly _onDidChangeSessionsEmitter = new EventEmitter<AuthenticationProviderAuthenticationSessionsChangeEvent>();\n\n\t/**\n\t * Event to signal a change in authentication sessions for this provider.\n\t *\n\t * NOTE: This event is handled differently in the Microsoft auth provider than \"typical\" auth providers. Normally,\n\t * this event would fire when the provider's sessions change... which are tied to a specific list of scopes. However,\n\t * since Microsoft identity doesn't care too much about scopes (you can mint a new token from an existing token),\n\t * we just fire this event whenever the account list changes... so essentially there is one session per account.\n\t *\n\t * This is not quite how the API should be used... but this event really is just for signaling that the account list\n\t * has changed.\n\t */\n\tonDidChangeSessions = this._onDidChangeSessionsEmitter.event;\n\n\tprivate constructor(\n\t\tprivate readonly _context: ExtensionContext,\n\t\tprivate readonly _telemetryReporter: MicrosoftAuthenticationTelemetryReporter,\n\t\tprivate readonly _logger: LogOutputChannel,\n\t\tprivate readonly _uriHandler: UriEventHandler,\n\t\tprivate readonly _publicClientManager: ICachedPublicClientApplicationManager,\n\t\tprivate readonly _env: Environment = Environment.AzureCloud\n\t) {\n\t\tthis._disposables = _context.subscriptions;\n\t\tconst accountChangeEvent = this._eventBufferer.wrapEvent(\n\t\t\tthis._publicClientManager.onDidAccountsChange,\n\t\t\t(last, newEvent) => {\n\t\t\t\tif (!last) {\n\t\t\t\t\treturn newEvent;\n\t\t\t\t}\n\t\t\t\tconst mergedEvent = {\n\t\t\t\t\tadded: [...(last.added ?? []), ...(newEvent.added ?? [])],\n\t\t\t\t\tdeleted: [...(last.deleted ?? []), ...(newEvent.deleted ?? [])],\n\t\t\t\t\tchanged: [...(last.changed ?? []), ...(newEvent.changed ?? [])]\n\t\t\t\t};\n\n\t\t\t\tconst dedupedEvent = {\n\t\t\t\t\tadded: Array.from(new Map(mergedEvent.added.map(item => [item.username, item])).values()),\n\t\t\t\t\tdeleted: Array.from(new Map(mergedEvent.deleted.map(item => [item.username, item])).values()),\n\t\t\t\t\tchanged: Array.from(new Map(mergedEvent.changed.map(item => [item.username, item])).values())\n\t\t\t\t};\n\n\t\t\t\treturn dedupedEvent;\n\t\t\t},\n\t\t\t{ added: new Array<AccountInfo>(), deleted: new Array<AccountInfo>(), changed: new Array<AccountInfo>() }\n\t\t)(e => this._handleAccountChange(e));\n\t\tthis._disposables.push(\n\t\t\tthis._onDidChangeSessionsEmitter,\n\t\t\taccountChangeEvent\n\t\t);\n\t}\n\n\tstatic async create(\n\t\tcontext: ExtensionContext,\n\t\ttelemetryReporter: MicrosoftAuthenticationTelemetryReporter,\n\t\tlogger: LogOutputChannel,\n\t\turiHandler: UriEventHandler,\n\t\tenv: Environment = Environment.AzureCloud\n\t): Promise<MsalAuthProvider> {\n\t\tconst publicClientManager = await CachedPublicClientApplicationManager.create(context.secrets, logger, env.name);\n\t\tcontext.subscriptions.push(publicClientManager);\n\t\tconst authProvider = new MsalAuthProvider(context, telemetryReporter, logger, uriHandler, publicClientManager, env);\n\t\tawait authProvider.initialize();\n\t\treturn authProvider;\n\t}\n\n\t/**\n\t * Migrate sessions from the old secret storage to MSAL.\n\t * TODO: MSAL Migration. Remove this when we remove the old flow.\n\t */\n\tprivate async _migrateSessions() {\n\t\tconst betterSecretStorage = new BetterTokenStorage<IStoredSession>('microsoft.login.keylist', this._context);\n\t\tconst sessions = await betterSecretStorage.getAll(item => {\n\t\t\titem.endpoint ||= Environment.AzureCloud.activeDirectoryEndpointUrl;\n\t\t\treturn item.endpoint === this._env.activeDirectoryEndpointUrl;\n\t\t});\n\t\tthis._context.globalState.update('msalMigration', true);\n\n\t\tconst clientTenantMap = new Map<string, { clientId: string; tenant: string; refreshTokens: string[] }>();\n\n\t\tfor (const session of sessions) {\n\t\t\tconst scopeData = new ScopeData(session.scope.split(' '));\n\t\t\tconst key = `${scopeData.clientId}:${scopeData.tenant}`;\n\t\t\tif (!clientTenantMap.has(key)) {\n\t\t\t\tclientTenantMap.set(key, { clientId: scopeData.clientId, tenant: scopeData.tenant, refreshTokens: [] });\n\t\t\t}\n\t\t\tclientTenantMap.get(key)!.refreshTokens.push(session.refreshToken);\n\t\t}\n\n\t\tfor (const { clientId, refreshTokens } of clientTenantMap.values()) {\n\t\t\tawait this._publicClientManager.getOrCreate(clientId, refreshTokens);\n\t\t}\n\t}\n\n\tprivate async initialize(): Promise<void> {\n\t\tif (!this._context.globalState.get('msalMigration', false)) {\n\t\t\tawait this._migrateSessions();\n\t\t}\n\n\t\t// Send telemetry for existing accounts\n\t\tfor (const cachedPca of this._publicClientManager.getAll()) {\n\t\t\tfor (const account of cachedPca.accounts) {\n\t\t\t\tif (!account.idTokenClaims?.tid) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst tid = account.idTokenClaims.tid;\n\t\t\t\tconst type = tid === MSA_TID || tid === MSA_PASSTHRU_TID ? MicrosoftAccountType.MSA : MicrosoftAccountType.AAD;\n\t\t\t\tthis._telemetryReporter.sendAccountEvent([], type);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * See {@link onDidChangeSessions} for more information on how this is used.\n\t * @param param0 Event that contains the added and removed accounts\n\t */\n\tprivate _handleAccountChange({ added, changed, deleted }: { added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }) {\n\t\tthis._logger.debug(`[_handleAccountChange] added: ${added.length}, changed: ${changed.length}, deleted: ${deleted.length}`);\n\t\tthis._onDidChangeSessionsEmitter.fire({\n\t\t\tadded: added.map(this.sessionFromAccountInfo),\n\t\t\tchanged: changed.map(this.sessionFromAccountInfo),\n\t\t\tremoved: deleted.map(this.sessionFromAccountInfo)\n\t\t});\n\t}\n\n\t//#region AuthenticationProvider methods\n\n\tasync getSessions(scopes: string[] | undefined, options?: AuthenticationGetSessionOptions): Promise<AuthenticationSession[]> {\n\t\tconst askingForAll = scopes === undefined;\n\t\tconst scopeData = new ScopeData(scopes);\n\t\t// Do NOT use `scopes` beyond this place in the code. Use `scopeData` instead.\n\t\tthis._logger.info('[getSessions]', askingForAll ? '[all]' : `[${scopeData.scopeStr}]`, 'starting');\n\n\t\t// This branch only gets called by Core for sign out purposes and initial population of the account menu. Since we are\n\t\t// living in a world where a \"session\" from Core's perspective is an account, we return 1 session per account.\n\t\t// See the large comment on `onDidChangeSessions` for more information.\n\t\tif (askingForAll) {\n\t\t\tconst allSessionsForAccounts = new Map<string, AuthenticationSession>();\n\t\t\tfor (const cachedPca of this._publicClientManager.getAll()) {\n\t\t\t\tfor (const account of cachedPca.accounts) {\n\t\t\t\t\tif (allSessionsForAccounts.has(account.homeAccountId)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tallSessionsForAccounts.set(account.homeAccountId, this.sessionFromAccountInfo(account));\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst allSessions = Array.from(allSessionsForAccounts.values());\n\t\t\tthis._logger.info('[getSessions] [all]', `returned ${allSessions.length} session(s)`);\n\t\t\treturn allSessions;\n\t\t}\n\n\t\tconst cachedPca = await this._publicClientManager.getOrCreate(scopeData.clientId);\n\t\tconst sessions = await this.getAllSessionsForPca(cachedPca, scopeData, options?.account);\n\t\tthis._logger.info(`[getSessions] [${scopeData.scopeStr}] returned ${sessions.length} session(s)`);\n\t\treturn sessions;\n\n\t}\n\n\tasync createSession(scopes: readonly string[], options: AuthenticationProviderSessionOptions): Promise<AuthenticationSession> {\n\t\tconst scopeData = new ScopeData(scopes);\n\t\t// Do NOT use `scopes` beyond this place in the code. Use `scopeData` instead.\n\n\t\tthis._logger.info('[createSession]', `[${scopeData.scopeStr}]`, 'starting');\n\t\tconst cachedPca = await this._publicClientManager.getOrCreate(scopeData.clientId);\n\n\t\t// Used for showing a friendlier message to the user when the explicitly cancel a flow.\n\t\tlet userCancelled: boolean | undefined;\n\t\tconst yes = l10n.t('Yes');\n\t\tconst no = l10n.t('No');\n\t\tconst promptToContinue = async (mode: string) => {\n\t\t\tif (userCancelled === undefined) {\n\t\t\t\t// We haven't had a failure yet so wait to prompt\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst message = userCancelled\n\t\t\t\t? l10n.t('Having trouble logging in? Would you like to try a different way? ({0})', mode)\n\t\t\t\t: l10n.t('You have not yet finished authorizing this extension to use your Microsoft Account. Would you like to try a different way? ({0})', mode);\n\t\t\tconst result = await window.showWarningMessage(message, yes, no);\n\t\t\tif (result !== yes) {\n\t\t\t\tthrow new CancellationError();\n\t\t\t}\n\t\t};\n\n\t\tconst flows = getMsalFlows({\n\t\t\textensionHost: typeof navigator === 'undefined'\n\t\t\t\t? this._context.extension.extensionKind === ExtensionKind.UI ? ExtensionHost.Local : ExtensionHost.Remote\n\t\t\t\t: ExtensionHost.WebWorker,\n\t\t});\n\n\t\tconst authority = new URL(scopeData.tenant, this._env.activeDirectoryEndpointUrl).toString();\n\t\tlet lastError: Error | undefined;\n\t\tfor (const flow of flows) {\n\t\t\tif (flow !== flows[0]) {\n\t\t\t\ttry {\n\t\t\t\t\tawait promptToContinue(flow.label);\n\t\t\t\t} finally {\n\t\t\t\t\tthis._telemetryReporter.sendLoginFailedEvent();\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst result = await flow.trigger({\n\t\t\t\t\tcachedPca,\n\t\t\t\t\tauthority,\n\t\t\t\t\tscopes: scopeData.scopesToSend,\n\t\t\t\t\tloginHint: options.account?.label,\n\t\t\t\t\twindowHandle: window.nativeHandle ? Buffer.from(window.nativeHandle) : undefined,\n\t\t\t\t\tlogger: this._logger,\n\t\t\t\t\turiHandler: this._uriHandler\n\t\t\t\t});\n\n\t\t\t\tconst session = this.sessionFromAuthenticationResult(result, scopeData.originalScopes);\n\t\t\t\tthis._telemetryReporter.sendLoginEvent(session.scopes);\n\t\t\t\tthis._logger.info('[createSession]', `[${scopeData.scopeStr}]`, 'returned session');\n\t\t\t\treturn session;\n\t\t\t} catch (e) {\n\t\t\t\tlastError = e;\n\t\t\t\tif (e instanceof ServerError || (e as ClientAuthError)?.errorCode === ClientAuthErrorCodes.userCanceled) {\n\t\t\t\t\tthis._telemetryReporter.sendLoginFailedEvent();\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t\t// Continue to next flow\n\t\t\t\tif (e instanceof CancellationError) {\n\t\t\t\t\tuserCancelled = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._telemetryReporter.sendLoginFailedEvent();\n\t\tthrow lastError ?? new Error('No auth flow succeeded');\n\t}\n\n\tasync removeSession(sessionId: string): Promise<void> {\n\t\tthis._logger.info('[removeSession]', sessionId, 'starting');\n\t\tconst promises = new Array<Promise<void>>();\n\t\tfor (const cachedPca of this._publicClientManager.getAll()) {\n\t\t\tconst accounts = cachedPca.accounts;\n\t\t\tfor (const account of accounts) {\n\t\t\t\tif (account.homeAccountId === sessionId) {\n\t\t\t\t\tthis._telemetryReporter.sendLogoutEvent();\n\t\t\t\t\tpromises.push(cachedPca.removeAccount(account));\n\t\t\t\t\tthis._logger.info(`[removeSession] [${sessionId}] [${cachedPca.clientId}] removing session...`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!promises.length) {\n\t\t\tthis._logger.info('[removeSession]', sessionId, 'session not found');\n\t\t\treturn;\n\t\t}\n\t\tconst results = await Promise.allSettled(promises);\n\t\tfor (const result of results) {\n\t\t\tif (result.status === 'rejected') {\n\t\t\t\tthis._telemetryReporter.sendLogoutFailedEvent();\n\t\t\t\tthis._logger.error('[removeSession]', sessionId, 'error removing session', result.reason);\n\t\t\t}\n\t\t}\n\n\t\tthis._logger.info('[removeSession]', sessionId, `attempted to remove ${promises.length} sessions`);\n\t}\n\n\t//#endregion\n\n\tprivate async getAllSessionsForPca(\n\t\tcachedPca: ICachedPublicClientApplication,\n\t\tscopeData: ScopeData,\n\t\taccountFilter?: AuthenticationSessionAccountInformation\n\t): Promise<AuthenticationSession[]> {\n\t\tlet filteredAccounts = accountFilter\n\t\t\t? cachedPca.accounts.filter(a => a.homeAccountId === accountFilter.id)\n\t\t\t: cachedPca.accounts;\n\n\t\t// Group accounts by homeAccountId\n\t\tconst accountGroups = new Map<string, AccountInfo[]>();\n\t\tfor (const account of filteredAccounts) {\n\t\t\tconst existing = accountGroups.get(account.homeAccountId) || [];\n\t\t\texisting.push(account);\n\t\t\taccountGroups.set(account.homeAccountId, existing);\n\t\t}\n\n\t\t// Filter to one account per homeAccountId\n\t\tfilteredAccounts = Array.from(accountGroups.values()).map(accounts => {\n\t\t\tif (accounts.length === 1) {\n\t\t\t\treturn accounts[0];\n\t\t\t}\n\n\t\t\t// If we have a specific tenant to target, prefer that one\n\t\t\tif (scopeData.tenantId) {\n\t\t\t\tconst matchingTenant = accounts.find(a => a.tenantId === scopeData.tenantId);\n\t\t\t\tif (matchingTenant) {\n\t\t\t\t\treturn matchingTenant;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Otherwise prefer the home tenant\n\t\t\treturn accounts.find(a => a.tenantId === a.idTokenClaims?.tid) || accounts[0];\n\t\t});\n\n\t\tconst authority = new URL(scopeData.tenant, this._env.activeDirectoryEndpointUrl).toString();\n\t\tconst sessions: AuthenticationSession[] = [];\n\t\treturn this._eventBufferer.bufferEventsAsync(async () => {\n\t\t\tfor (const account of filteredAccounts) {\n\t\t\t\ttry {\n\t\t\t\t\tlet forceRefresh: true | undefined;\n\t\t\t\t\tif (scopeData.tenantId) {\n\t\t\t\t\t\t// If the tenants do not match, then we need to skip the cache\n\t\t\t\t\t\t// to get a new token for the new tenant\n\t\t\t\t\t\tif (account.tenantId !== scopeData.tenantId) {\n\t\t\t\t\t\t\tforceRefresh = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If we are requesting the home tenant and we don't yet have\n\t\t\t\t\t\t// a token for the home tenant, we need to skip the cache\n\t\t\t\t\t\t// to get a new token for the home tenant\n\t\t\t\t\t\tif (account.tenantId !== account.idTokenClaims?.tid) {\n\t\t\t\t\t\t\tforceRefresh = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst result = await cachedPca.acquireTokenSilent({\n\t\t\t\t\t\taccount,\n\t\t\t\t\t\tauthority,\n\t\t\t\t\t\tscopes: scopeData.scopesToSend,\n\t\t\t\t\t\tredirectUri,\n\t\t\t\t\t\tforceRefresh\n\t\t\t\t\t});\n\t\t\t\t\tsessions.push(this.sessionFromAuthenticationResult(result, scopeData.originalScopes));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// If we can't get a token silently, the account is probably in a bad state so we should skip it\n\t\t\t\t\t// MSAL will log this already, so we don't need to log it again\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn sessions;\n\t\t});\n\t}\n\n\tprivate sessionFromAuthenticationResult(result: AuthenticationResult, scopes: readonly string[]): AuthenticationSession & { idToken: string } {\n\t\treturn {\n\t\t\taccessToken: result.accessToken,\n\t\t\tidToken: result.idToken,\n\t\t\tid: result.account?.homeAccountId ?? result.uniqueId,\n\t\t\taccount: {\n\t\t\t\tid: result.account?.homeAccountId ?? result.uniqueId,\n\t\t\t\tlabel: result.account?.username ?? 'Unknown',\n\t\t\t},\n\t\t\tscopes\n\t\t};\n\t}\n\n\tprivate sessionFromAccountInfo(account: AccountInfo): AuthenticationSession {\n\t\treturn {\n\t\t\taccessToken: '1234',\n\t\t\tid: account.homeAccountId,\n\t\t\tscopes: [],\n\t\t\taccount: {\n\t\t\t\tid: account.homeAccountId,\n\t\t\t\tlabel: account.username\n\t\t\t},\n\t\t\tidToken: account.idToken,\n\t\t};\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/authServer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as http from 'http';\nimport { URL } from 'url';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { randomBytes } from 'crypto';\n\nfunction sendFile(res: http.ServerResponse, filepath: string) {\n\tfs.readFile(filepath, (err, body) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t\tres.writeHead(404);\n\t\t\tres.end();\n\t\t} else {\n\t\t\tres.writeHead(200, {\n\t\t\t\t'content-length': body.length,\n\t\t\t});\n\t\t\tres.end(body);\n\t\t}\n\t});\n}\n\ninterface IOAuthResult {\n\tcode: string;\n\tstate: string;\n}\n\ninterface ILoopbackServer {\n\t/**\n\t * If undefined, the server is not started yet.\n\t */\n\tport: number | undefined;\n\n\t/**\n\t * The nonce used\n\t */\n\tnonce: string;\n\n\t/**\n\t * The state parameter used in the OAuth flow.\n\t */\n\tstate: string | undefined;\n\n\t/**\n\t * Starts the server.\n\t * @returns The port to listen on.\n\t * @throws If the server fails to start.\n\t * @throws If the server is already started.\n\t */\n\tstart(): Promise<number>;\n\t/**\n\t * Stops the server.\n\t * @throws If the server is not started.\n\t * @throws If the server fails to stop.\n\t */\n\tstop(): Promise<void>;\n\t/**\n\t * Returns a promise that resolves to the result of the OAuth flow.\n\t */\n\twaitForOAuthResponse(): Promise<IOAuthResult>;\n}\n\nexport class LoopbackAuthServer implements ILoopbackServer {\n\tprivate readonly _server: http.Server;\n\tprivate readonly _resultPromise: Promise<IOAuthResult>;\n\tprivate _startingRedirect: URL;\n\n\tpublic nonce = randomBytes(16).toString('base64');\n\tpublic port: number | undefined;\n\n\tpublic set state(state: string | undefined) {\n\t\tif (state) {\n\t\t\tthis._startingRedirect.searchParams.set('state', state);\n\t\t} else {\n\t\t\tthis._startingRedirect.searchParams.delete('state');\n\t\t}\n\t}\n\tpublic get state(): string | undefined {\n\t\treturn this._startingRedirect.searchParams.get('state') ?? undefined;\n\t}\n\n\tconstructor(serveRoot: string, startingRedirect: string) {\n\t\tif (!serveRoot) {\n\t\t\tthrow new Error('serveRoot must be defined');\n\t\t}\n\t\tif (!startingRedirect) {\n\t\t\tthrow new Error('startingRedirect must be defined');\n\t\t}\n\t\tthis._startingRedirect = new URL(startingRedirect);\n\t\tlet deferred: { resolve: (result: IOAuthResult) => void; reject: (reason: any) => void };\n\t\tthis._resultPromise = new Promise<IOAuthResult>((resolve, reject) => deferred = { resolve, reject });\n\n\t\tthis._server = http.createServer((req, res) => {\n\t\t\tconst reqUrl = new URL(req.url!, `http://${req.headers.host}`);\n\t\t\tswitch (reqUrl.pathname) {\n\t\t\t\tcase '/signin': {\n\t\t\t\t\tconst receivedNonce = (reqUrl.searchParams.get('nonce') ?? '').replace(/ /g, '+');\n\t\t\t\t\tif (receivedNonce !== this.nonce) {\n\t\t\t\t\t\tres.writeHead(302, { location: `/?error=${encodeURIComponent('Nonce does not match.')}` });\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t}\n\t\t\t\t\tres.writeHead(302, { location: this._startingRedirect.toString() });\n\t\t\t\t\tres.end();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase '/callback': {\n\t\t\t\t\tconst code = reqUrl.searchParams.get('code') ?? undefined;\n\t\t\t\t\tconst state = reqUrl.searchParams.get('state') ?? undefined;\n\t\t\t\t\tconst nonce = (reqUrl.searchParams.get('nonce') ?? '').replace(/ /g, '+');\n\t\t\t\t\tconst error = reqUrl.searchParams.get('error') ?? undefined;\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tres.writeHead(302, { location: `/?error=${reqUrl.searchParams.get('error_description')}` });\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t\tdeferred.reject(new Error(error));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (!code || !state || !nonce) {\n\t\t\t\t\t\tres.writeHead(400);\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.state !== state) {\n\t\t\t\t\t\tres.writeHead(302, { location: `/?error=${encodeURIComponent('State does not match.')}` });\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t\tdeferred.reject(new Error('State does not match.'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.nonce !== nonce) {\n\t\t\t\t\t\tres.writeHead(302, { location: `/?error=${encodeURIComponent('Nonce does not match.')}` });\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t\tdeferred.reject(new Error('Nonce does not match.'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdeferred.resolve({ code, state });\n\t\t\t\t\tres.writeHead(302, { location: '/' });\n\t\t\t\t\tres.end();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Serve the static files\n\t\t\t\tcase '/':\n\t\t\t\t\tsendFile(res, path.join(serveRoot, 'index.html'));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// substring to get rid of leading '/'\n\t\t\t\t\tsendFile(res, path.join(serveRoot, reqUrl.pathname.substring(1)));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic start(): Promise<number> {\n\t\treturn new Promise<number>((resolve, reject) => {\n\t\t\tif (this._server.listening) {\n\t\t\t\tthrow new Error('Server is already started');\n\t\t\t}\n\t\t\tconst portTimeout = setTimeout(() => {\n\t\t\t\treject(new Error('Timeout waiting for port'));\n\t\t\t}, 5000);\n\t\t\tthis._server.on('listening', () => {\n\t\t\t\tconst address = this._server.address();\n\t\t\t\tif (typeof address === 'string') {\n\t\t\t\t\tthis.port = parseInt(address);\n\t\t\t\t} else if (address instanceof Object) {\n\t\t\t\t\tthis.port = address.port;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Unable to determine port');\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(portTimeout);\n\n\t\t\t\t// set state which will be used to redirect back to vscode\n\t\t\t\tthis.state = `http://127.0.0.1:${this.port}/callback?nonce=${encodeURIComponent(this.nonce)}`;\n\n\t\t\t\tresolve(this.port);\n\t\t\t});\n\t\t\tthis._server.on('error', err => {\n\t\t\t\treject(new Error(`Error listening to server: ${err}`));\n\t\t\t});\n\t\t\tthis._server.on('close', () => {\n\t\t\t\treject(new Error('Closed'));\n\t\t\t});\n\t\t\tthis._server.listen(0, '127.0.0.1');\n\t\t});\n\t}\n\n\tpublic stop(): Promise<void> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tif (!this._server.listening) {\n\t\t\t\tthrow new Error('Server is not started');\n\t\t\t}\n\t\t\tthis._server.close((err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic waitForOAuthResponse(): Promise<IOAuthResult> {\n\t\treturn this._resultPromise;\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/buffer.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function base64Encode(text: string): string {\n\treturn Buffer.from(text, 'binary').toString('base64');\n}\n\nexport function base64Decode(text: string): string {\n\treturn Buffer.from(text, 'base64').toString('utf8');\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/cachedPublicClientApplication.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { PublicClientApplication, AccountInfo, SilentFlowRequest, AuthenticationResult, InteractiveRequest, LogLevel, RefreshTokenRequest } from '@azure/msal-node';\nimport { NativeBrokerPlugin } from '@azure/msal-node-extensions';\nimport { Disposable, SecretStorage, LogOutputChannel, window, ProgressLocation, l10n, EventEmitter } from 'vscode';\nimport { raceCancellationAndTimeoutError } from '../common/async';\nimport { SecretStorageCachePlugin } from '../common/cachePlugin';\nimport { MsalLoggerOptions } from '../common/loggerOptions';\nimport { ICachedPublicClientApplication } from '../common/publicClientCache';\nimport { IAccountAccess } from '../common/accountAccess';\n\nexport class CachedPublicClientApplication implements ICachedPublicClientApplication {\n\t// Core properties\n\tprivate _pca: PublicClientApplication;\n\tprivate _accounts: AccountInfo[] = [];\n\tprivate _sequencer = new Sequencer();\n\tprivate readonly _disposable: Disposable;\n\n\t// Cache properties\n\tprivate readonly _secretStorageCachePlugin = new SecretStorageCachePlugin(\n\t\tthis._secretStorage,\n\t\t// Include the prefix as a differentiator to other secrets\n\t\t`pca:${this._clientId}`\n\t);\n\n\t// Broker properties\n\tprivate readonly _isBrokerAvailable: boolean;\n\n\t//#region Events\n\n\tprivate readonly _onDidAccountsChangeEmitter = new EventEmitter<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>;\n\treadonly onDidAccountsChange = this._onDidAccountsChangeEmitter.event;\n\n\tprivate readonly _onDidRemoveLastAccountEmitter = new EventEmitter<void>();\n\treadonly onDidRemoveLastAccount = this._onDidRemoveLastAccountEmitter.event;\n\n\t//#endregion\n\n\tprivate constructor(\n\t\tprivate readonly _clientId: string,\n\t\tprivate readonly _secretStorage: SecretStorage,\n\t\tprivate readonly _accountAccess: IAccountAccess,\n\t\tprivate readonly _logger: LogOutputChannel,\n\t) {\n\t\tconst loggerOptions = new MsalLoggerOptions(_logger);\n\t\tconst nativeBrokerPlugin = new NativeBrokerPlugin();\n\t\tthis._isBrokerAvailable = nativeBrokerPlugin.isBrokerAvailable;\n\t\tthis._pca = new PublicClientApplication({\n\t\t\tauth: { clientId: _clientId },\n\t\t\tsystem: {\n\t\t\t\tloggerOptions: {\n\t\t\t\t\tcorrelationId: _clientId,\n\t\t\t\t\tloggerCallback: (level, message, containsPii) => loggerOptions.loggerCallback(level, message, containsPii),\n\t\t\t\t\tlogLevel: LogLevel.Trace\n\t\t\t\t}\n\t\t\t},\n\t\t\tbroker: { nativeBrokerPlugin },\n\t\t\tcache: { cachePlugin: this._secretStorageCachePlugin }\n\t\t});\n\t\tthis._disposable = Disposable.from(\n\t\t\tthis._registerOnSecretStorageChanged(),\n\t\t\tthis._onDidAccountsChangeEmitter,\n\t\t\tthis._onDidRemoveLastAccountEmitter,\n\t\t\tthis._secretStorageCachePlugin\n\t\t);\n\t}\n\n\tget accounts(): AccountInfo[] { return this._accounts; }\n\tget clientId(): string { return this._clientId; }\n\n\tstatic async create(\n\t\tclientId: string,\n\t\tsecretStorage: SecretStorage,\n\t\taccountAccess: IAccountAccess,\n\t\tlogger: LogOutputChannel\n\t): Promise<CachedPublicClientApplication> {\n\t\tconst app = new CachedPublicClientApplication(clientId, secretStorage, accountAccess, logger);\n\t\tawait app.initialize();\n\t\treturn app;\n\t}\n\n\tprivate async initialize(): Promise<void> {\n\t\tawait this._sequencer.queue(() => this._update());\n\t}\n\n\tdispose(): void {\n\t\tthis._disposable.dispose();\n\t}\n\n\tasync acquireTokenSilent(request: SilentFlowRequest): Promise<AuthenticationResult> {\n\t\tthis._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] starting...`);\n\t\tlet result = await this._sequencer.queue(() => this._pca.acquireTokenSilent(request));\n\t\tthis._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] got result`);\n\t\t// Check expiration of id token and if it's 5min before expiration, force a refresh.\n\t\t// this is what MSAL does for access tokens already so we're just adding it for id tokens since we care about those.\n\t\t// NOTE: Once we stop depending on id tokens for some things we can remove all of this.\n\t\tconst idTokenExpirationInSecs = (result.idTokenClaims as { exp?: number }).exp;\n\t\tif (idTokenExpirationInSecs) {\n\t\t\tconst fiveMinutesBefore = new Date(\n\t\t\t\t(idTokenExpirationInSecs - 5 * 60) // subtract 5 minutes\n\t\t\t\t* 1000 // convert to milliseconds\n\t\t\t);\n\t\t\tif (fiveMinutesBefore < new Date()) {\n\t\t\t\tthis._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] id token is expired or about to expire. Forcing refresh...`);\n\t\t\t\tconst newRequest = this._isBrokerAvailable\n\t\t\t\t\t// HACK: Broker doesn't support forceRefresh so we need to pass in claims which will force a refresh\n\t\t\t\t\t? { ...request, claims: '{ \"id_token\": {}}' }\n\t\t\t\t\t: { ...request, forceRefresh: true };\n\t\t\t\tresult = await this._sequencer.queue(() => this._pca.acquireTokenSilent(newRequest));\n\t\t\t\tthis._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] got forced result`);\n\t\t\t}\n\t\t\tconst newIdTokenExpirationInSecs = (result.idTokenClaims as { exp?: number }).exp;\n\t\t\tif (newIdTokenExpirationInSecs) {\n\t\t\t\tconst fiveMinutesBefore = new Date(\n\t\t\t\t\t(newIdTokenExpirationInSecs - 5 * 60) // subtract 5 minutes\n\t\t\t\t\t* 1000 // convert to milliseconds\n\t\t\t\t);\n\t\t\t\tif (fiveMinutesBefore < new Date()) {\n\t\t\t\t\tthis._logger.error(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] id token is still expired.`);\n\n\t\t\t\t\t// HACK: Only for the Broker we try one more time with different claims to force a refresh. Why? We've seen the Broker caching tokens by the claims requested, thus\n\t\t\t\t\t// there has been a situation where both tokens are expired.\n\t\t\t\t\tif (this._isBrokerAvailable) {\n\t\t\t\t\t\tthis._logger.error(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] forcing refresh with different claims...`);\n\t\t\t\t\t\tconst newRequest = { ...request, claims: '{ \"access_token\": {}}' };\n\t\t\t\t\t\tresult = await this._sequencer.queue(() => this._pca.acquireTokenSilent(newRequest));\n\t\t\t\t\t\tthis._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] got forced result with different claims`);\n\t\t\t\t\t\tconst newIdTokenExpirationInSecs = (result.idTokenClaims as { exp?: number }).exp;\n\t\t\t\t\t\tif (newIdTokenExpirationInSecs) {\n\t\t\t\t\t\t\tconst fiveMinutesBefore = new Date(\n\t\t\t\t\t\t\t\t(newIdTokenExpirationInSecs - 5 * 60) // subtract 5 minutes\n\t\t\t\t\t\t\t\t* 1000 // convert to milliseconds\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (fiveMinutesBefore < new Date()) {\n\t\t\t\t\t\t\t\tthis._logger.error(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] id token is still expired.`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!result.account) {\n\t\t\tthis._logger.error(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] no account found in result`);\n\t\t} else if (!result.fromCache && this._verifyIfUsingBroker(result)) {\n\t\t\tthis._logger.debug(`[acquireTokenSilent] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}] [${request.account.username}] firing event due to change`);\n\t\t\tthis._onDidAccountsChangeEmitter.fire({ added: [], changed: [result.account], deleted: [] });\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync acquireTokenInteractive(request: InteractiveRequest): Promise<AuthenticationResult> {\n\t\tthis._logger.debug(`[acquireTokenInteractive] [${this._clientId}] [${request.authority}] [${request.scopes?.join(' ')}] loopbackClientOverride: ${request.loopbackClient ? 'true' : 'false'}`);\n\t\treturn await window.withProgress(\n\t\t\t{\n\t\t\t\tlocation: ProgressLocation.Notification,\n\t\t\t\tcancellable: true,\n\t\t\t\ttitle: l10n.t('Signing in to Microsoft...')\n\t\t\t},\n\t\t\t(_process, token) => this._sequencer.queue(async () => {\n\t\t\t\tconst result = await raceCancellationAndTimeoutError(\n\t\t\t\t\tthis._pca.acquireTokenInteractive(request),\n\t\t\t\t\ttoken,\n\t\t\t\t\t1000 * 60 * 5\n\t\t\t\t);\n\t\t\t\tif (this._isBrokerAvailable) {\n\t\t\t\t\tawait this._accountAccess.setAllowedAccess(result.account!, true);\n\t\t\t\t}\n\t\t\t\t// Force an update so that the account cache is updated.\n\t\t\t\t// TODO:@TylerLeonhardt The problem is, we use the sequencer for\n\t\t\t\t// change events but we _don't_ use it for the accounts cache.\n\t\t\t\t// We should probably use it for the accounts cache as well.\n\t\t\t\tawait this._update();\n\t\t\t\treturn result;\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Allows for passing in a refresh token to get a new access token. This is the migration scenario.\n\t * TODO: MSAL Migration. Remove this when we remove the old flow.\n\t * @param request a {@link RefreshTokenRequest} object that contains the refresh token and other parameters.\n\t * @returns an {@link AuthenticationResult} object that contains the result of the token acquisition operation.\n\t */\n\tasync acquireTokenByRefreshToken(request: RefreshTokenRequest): Promise<AuthenticationResult | null> {\n\t\tthis._logger.debug(`[acquireTokenByRefreshToken] [${this._clientId}] [${request.authority}] [${request.scopes.join(' ')}]`);\n\t\tconst result = await this._sequencer.queue(async () => {\n\t\t\tconst result = await this._pca.acquireTokenByRefreshToken(request);\n\t\t\t// Force an update so that the account cache is updated.\n\t\t\t// TODO:@TylerLeonhardt The problem is, we use the sequencer for\n\t\t\t// change events but we _don't_ use it for the accounts cache.\n\t\t\t// We should probably use it for the accounts cache as well.\n\t\t\tawait this._update();\n\t\t\treturn result;\n\t\t});\n\t\tif (result) {\n\t\t\t// this._setupRefresh(result);\n\t\t\tif (this._isBrokerAvailable && result.account) {\n\t\t\t\tawait this._accountAccess.setAllowedAccess(result.account, true);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tremoveAccount(account: AccountInfo): Promise<void> {\n\t\tif (this._isBrokerAvailable) {\n\t\t\treturn this._accountAccess.setAllowedAccess(account, false);\n\t\t}\n\t\treturn this._sequencer.queue(() => this._pca.getTokenCache().removeAccount(account));\n\t}\n\n\tprivate _registerOnSecretStorageChanged() {\n\t\tif (this._isBrokerAvailable) {\n\t\t\treturn this._accountAccess.onDidAccountAccessChange(() => this._sequencer.queue(() => this._update()));\n\t\t}\n\t\treturn this._secretStorageCachePlugin.onDidChange(() => this._sequencer.queue(() => this._update()));\n\t}\n\n\tprivate _lastSeen = new Map<string, number>();\n\tprivate _verifyIfUsingBroker(result: AuthenticationResult): boolean {\n\t\t// If we're not brokering, we don't need to verify the date\n\t\t// the cache check will be sufficient\n\t\tif (!result.fromNativeBroker) {\n\t\t\treturn true;\n\t\t}\n\t\t// The nativeAccountId is what the broker uses to differenciate all\n\t\t// types of accounts. Even if the \"account\" is a duplicate of another because\n\t\t// it's actaully a guest account in another tenant.\n\t\tlet key = result.account!.nativeAccountId;\n\t\tif (!key) {\n\t\t\tthis._logger.error(`[verifyIfUsingBroker] [${this._clientId}] [${result.account!.username}] no nativeAccountId found. Using homeAccountId instead.`);\n\t\t\tkey = result.account!.homeAccountId;\n\t\t}\n\t\tconst lastSeen = this._lastSeen.get(key);\n\t\tconst lastTimeAuthed = result.account!.idTokenClaims!.iat!;\n\t\tif (!lastSeen) {\n\t\t\tthis._lastSeen.set(key, lastTimeAuthed);\n\t\t\treturn true;\n\t\t}\n\t\tif (lastSeen === lastTimeAuthed) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._lastSeen.set(key, lastTimeAuthed);\n\t\treturn true;\n\t}\n\n\tprivate async _update() {\n\t\tconst before = this._accounts;\n\t\tthis._logger.debug(`[update] [${this._clientId}] CachedPublicClientApplication update before: ${before.length}`);\n\t\t// Clear in-memory cache so we know we're getting account data from the SecretStorage\n\t\tthis._pca.clearCache();\n\t\tlet after = await this._pca.getAllAccounts();\n\t\tif (this._isBrokerAvailable) {\n\t\t\tafter = after.filter(a => this._accountAccess.isAllowedAccess(a));\n\t\t}\n\t\tthis._accounts = after;\n\t\tthis._logger.debug(`[update] [${this._clientId}] CachedPublicClientApplication update after: ${after.length}`);\n\n\t\tconst beforeSet = new Set(before.map(b => b.homeAccountId));\n\t\tconst afterSet = new Set(after.map(a => a.homeAccountId));\n\n\t\tconst added = after.filter(a => !beforeSet.has(a.homeAccountId));\n\t\tconst deleted = before.filter(b => !afterSet.has(b.homeAccountId));\n\t\tif (added.length > 0 || deleted.length > 0) {\n\t\t\tthis._onDidAccountsChangeEmitter.fire({ added, changed: [], deleted });\n\t\t\tthis._logger.debug(`[update] [${this._clientId}] CachedPublicClientApplication accounts changed. added: ${added.length}, deleted: ${deleted.length}`);\n\t\t\tif (!after.length) {\n\t\t\t\tthis._logger.debug(`[update] [${this._clientId}] CachedPublicClientApplication final account deleted. Firing event.`);\n\t\t\t\tthis._onDidRemoveLastAccountEmitter.fire();\n\t\t\t}\n\t\t}\n\t\tthis._logger.debug(`[update] [${this._clientId}] CachedPublicClientApplication update complete`);\n\t}\n}\n\nexport class Sequencer {\n\n\tprivate current: Promise<unknown> = Promise.resolve(null);\n\n\tqueue<T>(promiseTask: () => Promise<T>): Promise<T> {\n\t\treturn this.current = this.current.then(() => promiseTask(), () => promiseTask());\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/fetch.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nlet _fetch: typeof fetch;\ntry {\n\t_fetch = require('electron').net.fetch;\n} catch {\n\t_fetch = fetch;\n}\nexport default _fetch;\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/flows.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AuthenticationResult } from '@azure/msal-node';\nimport { Uri, LogOutputChannel, env } from 'vscode';\nimport { ICachedPublicClientApplication } from '../common/publicClientCache';\nimport { UriHandlerLoopbackClient } from '../common/loopbackClientAndOpener';\nimport { UriEventHandler } from '../UriEventHandler';\nimport { loopbackTemplate } from './loopbackTemplate';\n\nconst redirectUri = 'https://vscode.dev/redirect';\n\nexport const enum ExtensionHost {\n\tWebWorker,\n\tRemote,\n\tLocal\n}\n\ninterface IMsalFlowOptions {\n\tsupportsRemoteExtensionHost: boolean;\n\tsupportsWebWorkerExtensionHost: boolean;\n}\n\ninterface IMsalFlowTriggerOptions {\n\tcachedPca: ICachedPublicClientApplication;\n\tauthority: string;\n\tscopes: string[];\n\tloginHint?: string;\n\twindowHandle?: Buffer;\n\tlogger: LogOutputChannel;\n\turiHandler: UriEventHandler;\n}\n\ninterface IMsalFlow {\n\treadonly label: string;\n\treadonly options: IMsalFlowOptions;\n\ttrigger(options: IMsalFlowTriggerOptions): Promise<AuthenticationResult>;\n}\n\nclass DefaultLoopbackFlow implements IMsalFlow {\n\tlabel = 'default';\n\toptions: IMsalFlowOptions = {\n\t\tsupportsRemoteExtensionHost: false,\n\t\tsupportsWebWorkerExtensionHost: false\n\t};\n\n\tasync trigger({ cachedPca, authority, scopes, loginHint, windowHandle, logger }: IMsalFlowTriggerOptions): Promise<AuthenticationResult> {\n\t\tlogger.info('Trying default msal flow...');\n\t\treturn await cachedPca.acquireTokenInteractive({\n\t\t\topenBrowser: async (url: string) => { await env.openExternal(Uri.parse(url)); },\n\t\t\tscopes,\n\t\t\tauthority,\n\t\t\tsuccessTemplate: loopbackTemplate,\n\t\t\terrorTemplate: loopbackTemplate,\n\t\t\tloginHint,\n\t\t\tprompt: loginHint ? undefined : 'select_account',\n\t\t\twindowHandle\n\t\t});\n\t}\n}\n\nclass UrlHandlerFlow implements IMsalFlow {\n\tlabel = 'protocol handler';\n\toptions: IMsalFlowOptions = {\n\t\tsupportsRemoteExtensionHost: true,\n\t\tsupportsWebWorkerExtensionHost: false\n\t};\n\n\tasync trigger({ cachedPca, authority, scopes, loginHint, windowHandle, logger, uriHandler }: IMsalFlowTriggerOptions): Promise<AuthenticationResult> {\n\t\tlogger.info('Trying protocol handler flow...');\n\t\tconst loopbackClient = new UriHandlerLoopbackClient(uriHandler, redirectUri, logger);\n\t\treturn await cachedPca.acquireTokenInteractive({\n\t\t\topenBrowser: (url: string) => loopbackClient.openBrowser(url),\n\t\t\tscopes,\n\t\t\tauthority,\n\t\t\tloopbackClient,\n\t\t\tloginHint,\n\t\t\tprompt: loginHint ? undefined : 'select_account',\n\t\t\twindowHandle\n\t\t});\n\t}\n}\n\nconst allFlows: IMsalFlow[] = [\n\tnew DefaultLoopbackFlow(),\n\tnew UrlHandlerFlow()\n];\n\nexport interface IMsalFlowQuery {\n\textensionHost: ExtensionHost;\n}\n\nexport function getMsalFlows(query: IMsalFlowQuery): IMsalFlow[] {\n\treturn allFlows.filter(flow => {\n\t\tlet useFlow: boolean = true;\n\t\tswitch (query.extensionHost) {\n\t\t\tcase ExtensionHost.Remote:\n\t\t\t\tuseFlow &&= flow.options.supportsRemoteExtensionHost;\n\t\t\t\tbreak;\n\t\t\tcase ExtensionHost.WebWorker:\n\t\t\t\tuseFlow &&= flow.options.supportsWebWorkerExtensionHost;\n\t\t\t\tbreak;\n\t\t}\n\t\treturn useFlow;\n\t});\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/loopbackTemplate.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport const loopbackTemplate = `\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n\t<meta charset=\"utf-8\" />\n\t<title>Microsoft Account - Sign In</title>\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<style>\n\t\thtml {\n\t\t\theight: 100%;\n\t\t}\n\n\t\tbody {\n\t\t\tbox-sizing: border-box;\n\t\t\tmin-height: 100%;\n\t\t\tmargin: 0;\n\t\t\tpadding: 15px 30px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tcolor: white;\n\t\t\tfont-family: \"Segoe UI\",\"Helvetica Neue\",\"Helvetica\",Arial,sans-serif;\n\t\t\tbackground-color: #2C2C32;\n\t\t}\n\n\t\t.branding {\n\t\t\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAlqADAAQAAAABAAAAlgAAAADkcSUjAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAxaElEQVR4Ae19CbgdRbXu6j2cecoECTIkICCGzAg+7qeQ9544QFQgiXpVEJTEe59ALsbMwE5AMZCQELgKeSoqDlyiQogCSUAC6FNCQhIwQMALCbNMGc68p37/v7prnz47++yzzzl76OCu851d3dXV1VXVf69atWqtVZaUg397IPJwSCKT46zgx16wh+19XSYnO6PjE7H4MDuZ7BSxXhQJ/On5KTWbTSMm3bYlvHXmJNxj2SatFLFVioeWn5lDDwAgMvOU2NG/3DMo2h691rLtr4bqBtVX1NVJRUOVBIIiyYSI3RkXO9q5NZmU5S98tu7XpmQF2AwAzCoNwMrAMm/CT3HkrgqJTI/KwodOD4ZDa5MVdUPtfe+KxONKiSob6+SIE46XqsYGK5FIBoLVtQEJiSRaWp+xktaNuzpqfirTLcBOZNJtdnjrDCk6wMrA8hOgWJcZoFSrT4nJogfPESu4Dv8AVLTTEqsC9MkSDHB2NIYfkZGnjJOqpiZQrkTCAmWyKqtDgXBAEs0tLyZtWRl7953/u/uiUR0sVgH2xuKERCJJnhc6lIFV6B7OuXyAJrIpqDzVlQ99TUKVt0scAEomQaXskBAONlEFrgpvLdkZk6r6Wjn6IxMx2qVeY0IsSVrhqnCgMiiJA62v4a5Vkmz/4a7PDWtmVXSIfGMSAGYVFGCpGvGh5VCiHohEAiJXi77sKx+eLZU1N0hHCyuTAJCCDqCAKIUCYxv4AcY6YnL0qeOkZuhQSeoo6b5OG+AC4ZJQRThQFQbAWt7Bvf8ZSNg3P3deA8ZUF2AzADCrMAArA4u9XMoQsQMp6nHlH5dKdcMcad+fJGVCCKRAxfMU1XKB1dYpI8acKI0jj5FkDNSti3LpzSgjCQQmrFA4HKiuIMAO2EnrtkBb+8pdXxr2OjOd+bAd2vQ2cro8mXPjwH/LwBp4H/a/hLvuCsr06cpky6KHfiK1jRdJ235M80ClABMtmMMfKJQDNB4j1VCstg4ZcTKANWpkZmCxAJZiABYIhgO1VRwi21HGj63OxI27pje9xGz5BlgZWOzVUgSPjEqufOheqWmcIq37YwBCWKsDDGlQULnAUh6L4CLFAh/fCmCNOSE7sNxi3IilxiUQCAdrayR+oCWBcn4q0eSy56c2PMc80+6yg2t4MEAKVgYWO7HYwcz8Ig9XSTz5kNQ0nC7tB6KoBmZ+bnAZdaVUhIMHVDxWQtQCYI3thWKZ8rrHLICiCwCslmIKFGn/GoPm9S+cW7ddswJgZw4Ta9NkC/n6HsrA6nufDewOV/Ap8x8cggHvMUztTpLO5igkCV2g4hMIJI3dY56mqBdwgXOlWP0DlhbNkhVgtoQDELza7Z1iJ2J3J2P2DX8/r+Evmsm2A2dukkBfAYbZSDkUrQco+IQ0XeY9eKwEraekovYkzP4OBhUrlGLEXYB1q6QnzXPYLUtuJ5SLcei1k62tMYDKDtTWnRusrf5/J9zbcv9xa5snc9aooLJti3xYbsVy1lEOxekBI01f8NBECVnbJVx1hHS2YSrnGf4y1SQTwAyYTJzpvr6lAWA2AWYlW1vidrQjGait/VS4pvaPx9/bvOn43+4/GwCzDcAoC0P+rKNd1ot9q1s5d489YIa/BQ9+Ap/yAxKsgJSJ8gGXUc94I1BD4Og/j91zDodYGFTmvf88VsYnpiWSt7ICNXWcoQoo2uNJ217298/X/8bky7ZcVKZYppcKE0OaDg0FDn9XPfwFCYc3YEYGUEUpTQeFUNTgyZniDBUyfJdecu9hVJjAYS+YbGuJ8z9QXXNaqL5uzQlrm3d88O79X+Ujt860MIu17ExDZJliFealkMJYMn1NQNZATnXlQ9+ScPXNEm3H02zKrZQK9PpoxQ5+PBJ3pVwqbkBJpFhjPiSNx47sWY7V60Nyy4BaQDQhdqCyJgRWX5LNLbuA8xUfaKz7sTtEkkhhMuBoU5QpVm792rdclKbzkyWoFj64WCrrAKo2SNMxhukSjb4CvoZe/pGBebyfP88ZTNx14KQX6BdV4McQSna2JZItLXGrsurEUEPdra8daPnv43934CIy+Qoqth2hDKx8v4hpkKbrAi++3AUbf4AlmqukvTmuiytgWfr3OBdg/bs533cpwMDgJ6BFEQtUVB4dGlz/kxPuab5TH8S2A1z9bGi+6/o+KY/8FKkUw6KH/ktqm/4Ngk8y6UHltvVCH39IrQx1SsXmoI9l5Tc72xS2Y50AWGtnaEjdF46/p3mtPuJqqmOUQ356YMZtYai8xITrfzsGb4Dg8392W6IZ8FOygImXslwe8KOzF0Dti2D8vZbO0KC6z37wdwfm/d2yvu8dvbPfXr7acw8YcULkrw0Sa34EoBovHZCmq3Jez7dlvwKkGMCoqIHn+E8tQtse5n1UwZn37HXVq0nOeO14sj0Ws44tD4U59FjWLEaaPue+IyXWskMqa11QUfCZQgaK6OtxhqeaIkpInjLUyiRBjJKMhRrrqkOh5IXlodB0S3/ilDR9/cngyx+RcOVg6WjtXZqe67OUUqVnJroQsgu+nTzF/oXUlsIUTIk/WaZY/e18A6r5D34MXbkV0vTBEoVKZ1Zpen8flv2+FCHLnq0YV4N2Zwcwb48pU6z+dDfVXiKnRKGh8HksJt+tIp44penZlmj68yBzD6DjRQ8pmQbwWR4u2aSau0oQg2JRT9EaUqZYfep9vEaKFGhFs2DDN6Si8m594Yk4RQyF+0gVMRlgwyTzb9qRIZu51C02+Uzc7WLaSS55eIvJh1WHwnVGWt0O+VM1eFgMg4dIXBY8OF+qar8HlRd0JciHRRutEoXUy/Q836R5kjIemnwmzpjJTcwlD7O6+crAytaZ5ppK013B5/wNy6W6/goIPkmlMBD1V5puCu8h5gs66GV6E7zHPZRRsmSrgOS7ZI3K84O9Bg/zN/wcuulfVYMHZ+3Mw+Hk+bmmuHT8pPgrZki/aG4qfVymWNneAfmp6Y5TDpm34T6s+306v9L0bA/ntSzAMZdK45qht4qXKVaPPeTM/GISWVcjnZV/xPB3mho8WL1ofPZY4AAuGHmWAZMpKv3cpPsgLlOsTC/BLNHMXn+YRAOPglE/ERoK3a1oMt1XrDQdDsne4YEEl/kv1vOzPcetUxlY6Z3kLNFEZdGG42Gk/hh00w9Xg4fedNPTy8n7OdBjgKRl+5RcudUqy7G8ADDS9DkPnApQbYNjjsOlsz1/SzTeZ/V2bKiQiZk/HUvp572VWcTrfaNYVLddvTUkgyYl5Rk2c1NARtRbUkIHX3nrKyNNn/fgp6BCcL8E0DUxuHShNL3ULzBFqVCR1KwwlZi3LshnQbkDizMkS61i2dkmqDa2zMQpr7tuDc3FQyOmNH0TtD4hTZ97/1ckFLxDEniBCbpvUZMofzQjHdzp5/6oZaoWuQHLMLOrXmgQO34hvugzUMJgfMnvIH5I9rXfgRfTJpqv9P4vU63r7cAYPESmx2X+A7NgQLoCtn68q7BLNL3VK3U9DT1pp6lsPjzoBVj8mqFWSzOfW549B7ZwP4W67RB1fgm7ACh24T84DZTsKlm2/WKZOX499Z1l512OdYoPG5yqkho8qBAoIXMf+K5UNiyAch4axbdXwiWaVAU9BwZQqdHPJCAPD82/55aSHbp17BlY/JrXQLVmOoa/VTtnSqjqVuFI2LI3itkJmX6nCLrICVceIRVVD8iNTy2RK6yrtVGGypWshVke7Bg8kCqJzF2/Gk45LoGMynEf5HGPl6WEIl/yAIlPTjstcmWyP86tW+ZZoWvCo65sbvrblVLVcCuGCFtiUb6MCjQshH/oOquAtQJMbgKzp6TUD7lKVjy9Ua57bJAaaUZ2dnd0kb1KxblKXtAYPMxd/zss0VwibTB4sEGlaF7sl8AXZP61TjhxX1qqirYO2alTPx0c3JHetbGbdq6SmqZLpXUfAEUnAo7NWA8NYLNjkFBXQJj4NpxkTpMrJj6ixgXPTLNTXut6uLkoyTR4WD0zpg5kB7+3EbrpZ6g0veQyqh5abyTuRBSP1dsM8iYwnMBTn91ph4afdKw0jDrWtqForq+oh6KKmWyDoegOLO/MbuXOO6V20BekdS9ngRwyu+ftsaZ2DPIfmI8je7Rtvlwx9vuatdRDo/FJNe/3gzDZg8FD3RjH4KE/SzTsinTy0WOH9OFCWrl8hD4GPwZYSSj/wmzBqm2y7Ff23H7cZ856Lzxk6LfjLc30nFw69R1PKwmsrqGQL57iAg6DK3c+CCadoOIyhnoh8dzXy6EVhvvohMQ7bQyN18mNf1sHUURdSYdGCj6pnDd349H4RmDwUD0AULH5hQBVT+WaZwF0YEYkGA5KKGRZrfsWyS++fHGgtvofYEpArArjpLaXl93jZYd5N9SE4oTkM5vAd0yQln1k0vvLI/HLsZXa1TbCX7n1nNyw43z5zujHBZ7iVLhaYHfQqRYbafrcB8ZhDHkEk5BG6YD7oP63LVV04Q8AKhIxGuZjsAOVBZtx4C1JJKYmb/78Y/r8aKLKrsYR1A0NBAtfryxPcIkuPPbajjeUVTuOhBcUfM11E6Aa4iy4sqb9/4fPJVCvNrhADFd+QCqr/irLd8zSCYFjht3zjDRLvft0SakwdniYd/+ZuG+LhMKNKk03fj77VFiJMiuDjnGwuoG860a4ED1RAKojbttSwxrB7zYGHuc1MS55AF4IGUjLIUO46RksuNp/lYpqmC/Bw1x+mVln1mhB07Ju6AoMjf8iL738FTy3UzhrjIzm8/IfyKjTfdCc+6bC1eYa/Z7jMcfggS33BsPamDjTtfQ0c55eFtO95XiPzT0m5jUGU0Z6XhvyQ3g6ViXVtr2LZeWUiOZH2044YVL0dT3x5w8oFhys2rIeqiEwX2rPN6hMqx0n+G37YuDdpsqoY56V67eNV1DphCHSxeuZO/obU/7GMjn7m/PANyFNX6MC3XiCzvgpJjk4mDQTe3P0lMb0TNd4rzfde+wt1+TzXk8d66gWxUYC8P4f2yvtLWfJjQAV9e7JA7NtPg8haTzsPzD7GyUt72GbMqksYH35PWJoxDBbUTUK85ptsvypb8q3x96mz/TOSPtbCTV4wGvlJGTu+kWwSr7GFwYPfWoP51RoA4e+1n2PSqdMlZs/97aKSCKngOJGUvDrXiyTDQnsfqX4Z7bOCqc6DsHwNRcnYGjsgJQbHVE3+FZZ/vQdcC7u7CGDnar6XQUtI+L4aJpz/01gdK8BTwL5Gx9Egwd2vJ//teUY+kIBsCRBgGqpLPvMGXLzZxxQcVbrNCCti5wFBCfRL+2juMGW0QoseAzRd8D30O2fzUlP6+nc5DWxN583jUMSCm2Dw/y6QV+R007aKUu3nqRrkpxMcDjrS6BQ10jT59z/K6luvAyg4syPQ6wLqr4UWIq8Nih5NYe+Vuk48FmAap72Az8YB1Q9VwrdfNA3w9wm3RybOD2d5yakX2N6+nWTZtLNPeYc17lXC10yp93NcxM8uU1Sj7HJa2JvRm+aHjueelsh1qiqOREzx7/Jsh0X6mSC7gY5NOYSyKRz2xC24zv3rccQ8iXsRYOv2/ECnEsRpc2jQ19ch77Ols0ST5woy6as06GPn5f5YLJV0tu1Jp83zRybuKc83uvm2Bt7jzOVwTTmwT9dGu6ERS+TvDSV58UKFViH5EaNAfB6PwXftVofTD6J4oJsQaXpYGRnr6+V79y/GUs0ZykPR9/lbgN9G7NdNjeoDGLoqw2h3jfJDWefJiumvJbaszBX0VTf6Hu2Hs3bNQwT1m+kgiIRiB1KFSxYZFNLghoGdYMvkRuf3iHXbzlOxQUEV6ahcZorTZ/1wAjoiO3AyzkFwx+c8XORHKjiv5+DLRz6sA8h9nZuOzBdbvjMLK1uLkOfn9vl1g3A2r8CM8I9mEFV4qU4MiXvOzHH3th7zIK85+nH5rynfCYdW2ugnJBK/Ctrx0qw6hm5fvsXFFwcGimxN4HS9DUQfH573YfwPTwFg4fjpJM7PKjmhcnlV3Bx1ucOfe07xI6dJDees0Y4pNPFRy5DX1cLfXsUkCtOxxZjyU/Br9M+fEFUiekClwFFeszmpKeZc+8102xeM9dNbPJ5z538FbrkEghWQOZ1pyx7apUmczcqUi/VTQeoZq37H3g9T8J90FDpgMGDoVR8kLdMf1EuZ8ivqgthdWO1LPv0eFn22ZecoY+yKX+syjivYWC/kLxjFjYba3k37RwHbYQ/gU85qgDS977WMgyhZhL1SGJovFSWPf1ReIs7T2aOe1ULunTt2Vgp+L0EQcSiEF1YWDqiSoluDwKGg++HE0vDexhwmfO+1iYv+S0ubVHUksTQ9zVZfvYdWqzK71SU0L+nOFIv517vB9W/0gZ+l9vHkOSCtyIluHz0yxK1x0GV5GmdoeCVDfwpAyqBogJ82Zg1Vtd/RIKBF8B7nSUX/OJf4drz90qVYjHOBimecKgUY90ShOfuMaJU8B6nEgt+gFePpZlqLCBH25/DBzNaQUVAkXfMhwEK21Wath3ceW5d+PIkxSTPH7tXmk+eiOn6I1Dwo2ZDqcHF2nHxNY79jaskWLleRh33S2irQqVQfVIFHSDh3XHWrpQJLdPGeWMee/9ZbFECJkSY7VbVYcWh+eey7AmAaspz+iETUO4uDgOuSUkpcebad8mKuGCrZFlnh2fKsr/9FtP/86TNVfSDWkbmIoqQylljPEaib0lTExaGwra8/lpQosB9GE1QIOEqPxPW0tSUMa9pwEnqnIkmk3s5/1EUCo8V0E0TiBJmyvJzVusj2Mfs6/d5cCiWaSS/IkqxGWaffD70qWBoMIgyIcq4Uq9Irxfzx3myA5t43JKamoCMHClSXw+aSlkoMpihzwyFhKFJ1/vdPE5ZXdfy3Q5oTqFI6E5BRTvW8SK2lx+voNKPNgLWA338TxC6A4sNphRbjSkw/s8+eaa07fsurFhI2dhhfF2lDWTQoaggQVTpA0eJHHY4XiPOwetrDVNgwrnqiBtApRDl5DOtYP78BQ5vAlCFsSxzl7zcClHClB2iyoYAVARrmf8koWso9DZYFfHwdX0Y9oHTRy/CrOxt8AkrIZJALjpcpm51Xl+I9+m9H3MU05UQxEOHiVRXibwO7SRSrwoOjahbgJkQWE0e8oVztmji9Fkj0wcWMPRVVKiKTtuBy+XGsx0xiVKqyYXlVdlG/vshuN2YGVisoH5dnLWoOOImyJPeAc/wC3QcGGa4xnUMLErfFFaltk5k5CiRN94QaW4GuCBrVPGDCyRvLfkC2Hj+6zEO9Nh9MzzOOWhm3hhXteGOlldBTc/HssxmxzrpGbsYQ182omua21OT3FZrFzBPT+e85u0ak8+km3OVxOGkZ2DxDn7iEXQaxREzx/4SDD1M6m3sEAqO2ewQakrU/O6Pvije7p5785hrvGSu89jk8V7PlMdcN/eS0pih8UgMje++LfI2qoklOLXUZkt1wOcDkFfv1x8cI874Vkw+VgCB2RlMHXmsRejegwGIZ8JYjlon1rtfkhUXtOrQNx1C3CIFVstbtfTHZrtm8qbnST9nvkxp6enMw/+DeSzmTA86Y4Qa8eyT16NHT8UMrRVGCWTqM89uTA3MU7zlmWtMM9fT09Lzm3zmHhOn0vGWafJPkAw9TOQoAIygUb8eyJxi6HE9xXchnflT/ywUQctkunPaleY552HStZgJhi3M+uZBNgVVF4CKSzOR4oGKVTG457FfQm7AYm2pm04d9dknPwFqMB4znjexvkjtg6J9mVk7jUBiIPWqw2zxmFGC2SNqh+oRPBnB5QJIQcRjPXDKMYBzzry/zARVH7Q9EXsL1uEfx1rfUkdZ8dBQG/Y2plDHuQOLNTDgumL03/Gmxkln6y61fPYLuFhHMzSGgfkjj3aYezL1pGgMBjA8V+rlUjoDKr3uZE3l7zoFakHLqDbc0bIRVk0nyopzHtO1Pi4eF8ukras+vj3qG7DYDIKLPNd3xr0lweYJ4C0ehx2iX6T0TkcTXAZIFEccBYBxFqgyL2QheMyQmKJkSNc0FpGJenHoCwWx3hfAWl8EVOosWXnuPh36etPwZJH/ZKEX5r2H3lCeC7PFKyzunv1Ruf6pP0BK/xnIvEAaqFvFt1jqgCpw0OLQWN8gMhLKjG+8JtIK/1ecNbKGJGLpNeU9BCbTnWOagsZgMQOFRGiAWPHpECVsVIuZnR+Gh8PpmflM3F6UwDawnvz3S0Bd+k6xTOW5eG10pOaMPRuLxXCuTyl90hkuTL6Sx0AIlxXDIKpHjRQZMsShXPTa56VcqSHQTdcXBbJnQ2BWSWPR1kelDUPfcoBKVXci9vtFd6oQr6j/wGJtqCNFjUeGOWMuxBLQcixekwriO/KRLwHv0Hj4CPBeRzqgov0qAaT8Fqps+C4m2kkYY0BmEa4KghIvlZXnnCG3nveWZ+hT6LHp5XBwD/RvKPSWo0wrZkMMc6zZGBbfgT+t66DRyY6nkagDPM1Qwh+Ci4FDYwMWsisprcfQ2IGhkYw+KRazONloLIq1vvZWiFa+BJP2dchgybQ1MBYt8dCnjfD/z8AolmkfZ0NXA0JcvpgDt0Wdzd/Al45XFODSD4dG/wQCjOCiAcnRI0WaBrtMPb8D12KmAgvIHa2bpS3+IQUVhz6G94nasLalwD8Dp1imgo5ukSulH/NjuQGUywrdA78JQch7yGLmB8TmeQONCS6CbPgRWDSGu5Z/vAF+CkNfTS1mfXtXya1TL9dHqCXQIaLmwm/DBFJe7znT09PMuYl7upfXGdLLc1K7/7p58/+yOWNUccTYtVhS+QgsaPaBcPE5BJd/gndoHDTYlpHHBeB36oC89drZCirObA8VixkltmldmwkE6Wnm3MSmiEzn6Wkmb3rMfPjPP7D4oK3u0/78Z5FX9jhMsVq551o79/5iRDo0gomvAs818liR8ad1PXVa12H5qA89AKqVf2BxrYwCw5lrPieHD31C2jub5OUXk2CCAw7L5UNwcUxMQKHLCjTAKvsPct2Om5Bkq24aqW859LkH8ggsDB1k3uli59/v/jqMYO9Rvj2AmWFHR0BefglMMhza0LKGMzD/hQDUgRyj2fpBl8l12zdL5K9HpuwBVHTvv0r7tUb5AZb6bVoMYEFL8lv3zINu0o/AsBM9CTCMWAbBHCEOATXB1Y7pvU4WcZk5/PXfZTRLy6Cq6ufke09+VsHFehq1bb++TR/Va+CzQjK4EXe/5MvWLoerSeyXDPdBAVCwpOvFlxQqRHBhJrZnt7M4TOU8MzPzUYe4VaG4gS6FatGetfK97ddjaJyLa47RrB+NIQh8PwTOClGXgVEsgsrIdi5f+zOs+l8Bwahj7UuzJz5E//mDgDVcPX9lt8iB/Y7euj+HRdbWMZqNtiakfvAc8F2PSmTHYV1Do7aE+UobONf2C6jYE6gL33b/gUV+KgWqdX+AT6oLoOnARWhnhwcDKM669JhPRSCPxf/XXhHZS01PHPuqZ7SW5of9E3CNZj8mVbJLrtl+loIr4oojTM4Sxn7CFbuB9enfUKhakpNj8h93VUuyGvsl130UVilw323R94MTCCg9YYygp7hI1RQaOpB6vQEDCA6H1PrkOp03v97kgx/HnpL6V1CbqWgCv7hevrttsSy0Ilq7EgtQ2Wump33QW6kq9B1YpiMvvW8YhJ+PqdO0Ds9+yYoj/Ojam56kHqYHmgRwMaZFzVtvOuAaNtzBlR/B5bSAGqPYGAFbi9QPuVq+t+NfJJqcJpEJ+4QuLrlDWjmkeqBvQ6HZ4eGydcdLAO6DKqpPhI4SVZOp6OeARYHhAsekKZjwo8OiJ+Z16kbRAOLNV3nm5NElO5RhyvJLTHea3MiJ/iRq6v+3VFjPy7VPflxBxRmj2mNqK/7pf3IHltnh4fJ7P4IZ3zZoUg6Hdxp+pQ6oTFfqEOieKKBwzDh17AKLwyH/mR/meLJ/L7QN9jhDIvdB9CtTr0qMNneIiKEPhmH7lEfku9vnOoa+WIw3C9amP4oR+/AbzA1Y7Cxanlz++08CCI9DRbcWPgnIqGeWSnvBpR0L8JiYh/qPH+bTf6RREa8FNoFcAqKtoJ/B5bQFewZhO7141IaD3u9DJLFOZu+o1VUHP26np3Uu3k8vwDLSdCzRzFr7ZciiHgAQsPwBuyobfEW2LyVFokxjCCIee8BkQMV02v8RXNSPenk3zOYxwhpBKm/LFkw9TB6eDySY+03MsjIeu3I6qmTXYM+gwfYuWbLlNLULoHZtUYdGVtD8pzc+vfLefOnXvPem5zN5M6V3v9YzsChNp2Ibpemz7p0l4dpfqOeUJFSPnQ0wvTXo4ViR5FxLgYqnBlxpMTuGSnc02SK4OqBST3AZIwfTnvTYeUL3fk3P05dzlsf8DOa+no45a6QzXe4ZFKr6APjOv8o12y4v6p5BWlHvj6m0idMrb/Jma6S5Zu5Nvyc9vft5ZmDpEk3E0em+7N5rIX1eIdFWzGyVq6bgKfdAqmSCF1wpapUJXHgEh8NXXoILoBa/C1JN6+CyqBOUPI7t9AatxKzxLrn0vkp1bPdPODQeDCxdook4QqVZa2/D7GchZDjcL5mwQH7zFfQh5p0KKjc2YPOCy0vF+Koo5+KzXtkNfwz7HHBpAp/r2wALJdSNGyPUNE6DEuGzsuTJcY49JgTKzpYsvq18PivWHVjdpOlrfwvd9RmuM/787Jes4HIB6QUaW6Tgw4+Czb1IqTyZ+NdeFtn3btKR0pMZ85GhxsFvg5V39wyqHgWB6na5ZutMZSnoaIV9XKrQn2+yP/egfV2NNNJ0xjXDN0ql2S8Z0vR8BgLHK0pgxV0cOY/xnDAflU8tGIu+9aYzWRgCt0UJOF9znMH1bVjOZzt6L8vZM4h9zD2Drt3+LxIf97WUz9d8LWSbBYtcAZBrPm/7+noP8jsUS5XzoEc16+4mqR6+RSrqzkjtl8xCc/lnRUw+7zHTTEgde8Bz0LCIzLys/5oPFjPwkxCQDnn+2bPgYO1fwSTjOrh6G4Ya5pn+jDE0grpS5lXb9FUJP7VTIls+5Kw1gnL5wrDXvJz8xpj1oYFUzrt83dGSCMAZf81Y8FQHO+Pv7bkp0CCj95j3mZdujhl7yZSCCyDSYZCXcBzACwnAKLYGxqLxts2QPxwvd39zo8w/+ddQGDxHqR73Rwa3rMX59kc3RjBD44cw690JvusCHRqppVrKobGAfeaIEy5feyImfNg2pOooSNO7lmgK+GAt2lArnihxYkyAYeijAUYl9pjpaF4lt00/TX70lVfVWJSqwgvH/AE5T8eQ2AEzMw7n7jpdOqJxJWPIlC/XtPQCM92XMQ/ccbt7BtU1/QwiidWai+Kc96H6c0C+xh1W7fWQvzTBNVHxQGX6vhu4lGphjxnsLCrJKDZvmp4yw1KLGVBW9RsBd0oLxv4FIJyAOr+NZRXkx7ZsGviie/tnxvQ8uablcl9PecBv2VDj0D2DBl0i127bLpEnjtU26VIQBNLvkxCQ+v1XQJfqGHxNUEjHGthBHZ7eSQU4d7qTbChcLtLbMPaYSdgnyQ/Py7zHjHGntGDscxhaMHS3/re6asy0XYvBi/eFsQnpwdsscy0930DymHsdvha7fWEhu7J2HDZAfxYAm+bsSYih0fjDMHXoT2yeZervPc+WxmeZ6+bYe6+pS7Y0Nw+1PKfiq+dp1wzRFFC8OA5+Co72MfS1H1gtt5w7Xn54/otZ95gx7pTmjH5T4vvGw2nHFvVbZcDFupsO8B6bjjPXTOxtqzfNHDP2BpPONHOcLY+5tysvvdeg3dgzqKr+Llmy/SbNYvYMMvlzibvK7A4M3ptep2xpJq8pL/3ZmdLT09xzzgpH61INfSyYTMWMsYCDWV4Iin5JqDVfAFDN1PbopAJrlNmCDos2BI+TW2Th2FMByg3ujhrZ78tWZlGvweWTs2cQttNrugx81+MQS3xAh0blu3IbGv04ftIqJTOqC93BxtF+pTrafw6mYqNl1bl36CyJ03AytbkE406JM6xF4z8Jge6vAK6wTgDcvWNzKaaEefhxO0NjVd2pON4li7dOUXDx3ZC37CUwmwnmdZrYpDP2ppljE5t86efp96XnY34TzDFjSh//Bv/kvAYd4aIFGFzgj3vMdGCPmSHbR8stU59z/E4BUI4fiNwr43WntHDcl8G/rJJqgIu+rfwtpfe2EbNG1zKouv5eiWxbqv1Au4JeZo0GDObFegvNdC1bPnNvT/eZdJOPsTfNlM09oddgys7ruVEI5hxIsDj0VYKfAwFvb54Jby4XYg3NWeoYiMtFvgCqqZDaLRp/OcB1JZakKOci3YLDD1Ta7/9JWgbBRq6TlkGD5sjiJx+V2X/2n2VQDu8/IC17V2L42A1xA/z64KUXKujQR5eL2F4tFn0RBHI8+KnVOvSpNkWOQ1+2+tGdEgP5s0Xjr8WOW/8GgS9oozqOKCZFzlbL7NccXjfoWAY1fEzqq3fJVds+4YhZImARXF9k3lL89MGwXqhPQH56UQcsts6CuOE93ahR5UF5rimXXshhco+Z9pY1MrTzJLn5vB3gHypSi7PejhrIsUqzAVLKha4afytEF1NVpyug6hLFocoDqT/vdWR7mDU2O5ZBVdUb5KqtEYey4+Pxqj87n9JAn5i/+wkdBGdJZ9WUFyCQxA6rHS/hCyfDxSWd/AwdOuurgHYEFNw7sMfMLZ+frmrOpCrc17lQgcMqeZNF434LmdhkDDHc8zAEgB8iM0b2P3eOhWVQtD0J58FXy5VPbpBZ25oo83r++TfyqxyQ5/fgLOlwEfrm818Vq3U8KNc2LEI74BrYwwBNDH0sK9b5GmZ9p4FKrdJZTr6Gvt7qZ6T0V47ZBHP5SRCr7JMwpfQ+B5f71euXzaGRE522/di0oP4TUpvcJXM3f/z1mUdAhxvB5jDvv+BUiovQpCA3f+WADN1xCuRJD6oEnIx2/4KjdVCFPWY6WtZJdcuJcvO5m3XoUyZbFQn7V3Jf7zJS+oVjnsIEcTx2Z31FKqAtQUGqUmXi32f/rJjWCY1lHeFgCb/caTYGqnsY+OFHAnO3LGJXBMIWWBkeaU498MOPUyVTE4LLyI++dc+vAa4vYvji0EGpfPe85p70mGAM0CoCIR6dJ/953lI99patCUX+4bBICjbvsUFwB/kIpPRj8KL44fhzSCGgGBh3Axn41aQdsGqHWPZbr99+zLgT3gsNGvrtROuBBF5QrzIvLbPQP6jzwWDxOvr41t2rAK5LIWvijIp5s5FdKi9j6KvlUsVbYECnQpTwmA59o6fZUHArPZtJptfwXv8IboT68Bk6xPgRXClg4cALLvZiEjIVKDraiXBo2PB6qR9xmG1z59kMr7PQGMpYPup7MFCcocqRB91y7mUA1VVYLOVyDypuPCBrS1EmYwam47OiFL2zZSPoG4Y+BVWFOg7xA6hYTYKKlJOU66oJZ0rr/rtTS0CHgpReuxs/jmVQCPywI0JxztlC34SDKZapGgWN02H+RaB963ffxHreDzGzwteC3bNtBSTvZZOgkIehjzxkLBqRH5y7WIswWqmmPD/FNIfnFsUMS7bDYKRxBgSqFEVwKOm5T5i/WKELROxl/W7R06RW+g+KJXZnTIYdNVzqh9ONBprjVUEqVj0zPQd1660TIZB7GIaXkAv9+2+mADy3Y2gcgoVTp6E0dCCgOg5g1pe8WH4wbQNkLQHhHjMEpJ8DBY0RvjK8osg27HvduACCYjNcH0zJi90W1Ayd7DyVkbGtzAiswwAsfBeHELCchhnqM+OuRqkIXoD2noEL8LxvvY3GPCTh2B2yYnq7sx3ITH75bo84t/v210uVl2ybBf5wBfhDNAvrpqXeUUN70O1Gwt0w8OnAOhIUa8ShCiwio7dZXW/X/YsuUOVNDlVevA1uBCp+4Qz5HPd1NlyamucCrA53KDykgcXu5Rc+c3VI9g5KymhspE3m//UR2FptBumw+3mV5j0M+KlGHBHZ+ikM7/dj32sMP7EYKBcFqsUP2YCFncu681igWLQcTx8KWUZPzE62awNtLcru6bEDLfrQvJ+m8CpQ3X4q3tzD0PqogXYt5XjFB1cmYPXIvPtvKCw9k+onCBopfWT8ZkjksLzV+aYadqSk9KgsX3gx/k2/pD/LpPs8LgMr/QUZXfprJ2Bh3sK+123P6/JWIVWK0utgzg2ozPkhNL6UgWVemjemAJU8VwT7XjcMHQ8h8eNqqFEIlaKeyB9ngb0FD/ByyN1baXm9fgh9A3ltd26FRWysnVqcHWJW/OR9kNJ/GoLU4vBcBilGzGBil8/iAhkFpEMpIPXhrLBMsbJBzBhqKLAmcjN17HsNXXpHjdu8+mwl9P9apk9eKRR+0p9szvU6HlnK2G1xGVi9vXqvoUZk4oUA140w8KW2B2hGARfWDThYP++x1tckmNjNo9dK/ONWKdN3UeKa+fTxRtecC+pXbZkPcH0PqsPU5GdX5v8DZakMZgg0cZrkXYfC4Yf7bkkn/x3idMf775eAigBEXGFYcgo3U79EQtXQ7cSCKXX6CxIMunoo3KUOPVwtaXIZWH3qfi5Yu4YakQk/go3A51XafUi4U+pTQweWGSpIZWD1pwtVrwtS+iUT1ko8/nFVJaKtZKENNQyFMnF/6l7Ye2wrCIc62GukDKz+drSR0l8z6TG4s5yIPXbew9BIXXqKI7oYbgOCvsbeepl7vWneY/JfDMqH4bhEMRj2hAXjZxCsp8vAcl5J/34NuK4av1OsTpjPte+GQa5jqNG/ErvuUjDhVbmY6bqQ6cgFU6ZLRUyzEdRnbFIeKANroB1vloAiH31VAlEsAbVsd6T0/bZw8tQoJ1Qhvy8m99ysPZxs2d8mVujnZWB5XmO/D7kEREONyEcPyMkTTsEuFX+ERir2boRdZSGDUrVCPqAPZYMFCNbX84Yluy+qe7MMrD70XdasxlCDAtVrJv4vWP+sgadkDIsElzI9uN0gIdfYPNGlXOnFmMsljdFeLNAHmxorE/v33bv7oqalaK4/rWhL2k8DeThFEcaf1ZKJ0+HY4wegXOS5YAuI31zx5OJI8cib9L5UImpojgdS2QHfS0DFrFA4GKxrrEjs3/9fuy8e9DktdbFaQgz4AeUCvD2g5nOuO6VrJv0fDItL4E4JogjVsOUScm7BYMfEB93FC+b/oIuFTEiAcMYx+wsGahvDyVjnq4nmfReDUn1RH6pGKlayPBQW4hUYO0qamV0z8WpYMV0KhUH0tY4Q+ZfSG/AZnBUmTuDTiFsVNcFgbWPIjna8YLfun1H38uvHgVLdnvJN5rbdF9OJQrxbn5RJf1Yw1IDqzZVPfhEbiP5aN1BLUkG9F0MNBQt+UiBxj71rhdCaHno07QoLt1YIgGA7M9BbGC1zM5Bk+4GnwUIt3XNxw69cKixnPmyHNk121Yvcji9TrMIiEEtA6HAqDV4z8U5I6T+hzmyD3GW9Hx5vCDIGAzZzrIn5/eFwhxITVlVdKFBVF7Q7W59IdLSev/viprF7vt74S4JqEtsFlKWDijUpU6z8vo+eS0sZamyBlN7aBEONejXUsGCoYQDjvVvT8GNAZGaEXoqVUvTLH8VS/snCnmvVDQFa/tjR1sdsO3AdwHS/Wz0LgAptnTmJZkGZaq7ZysDyvsxCHxtwLdoxCiPMn2AgewQc2mb2eJMJWAQV0xHzlXZpkA4YWCiNQ5kdCtQ0WuCf4NmscwOmsd/f8/VBD2u3gDKduUmCmahTpm4rAytTrxQyLWW/uGUoKNejMNQ4CTr13cFF8GggenDgpVY89wLr6BHgsQ7DOjidTff5dbI0DnlhAEqSHdjNNh5fiw3Llu75+pC/IB0q2aqoAHcE3XkovZblp881yVJW+VKuPWDcKV36QqU0qJT+dPiN6AIXX7cGHPA4G7COGiF1AFaffDfQsw55KMsCoBok2bqfT7sTz7l+zzcGbdNHc+uVZzZh8jGZwOtzKAOrz12Wpxu8LgkWbr0XUvopEKimGWp4gEUJmAGZl2L1DVgsAYAKhAO19ZJs3o9j+Zkkg8v3XFL/rLaM9frwmbZulj6AppaBNYDOG/CtpApcAmJYuPUnMNS4SNr2gmO2HP/0TDdgMjEBRmDxkjLvOVEs3pWA92hQqDpJtuxrR7k/hl/AFS9f3PQirolAZCBvI9XURxP7/1MGVv/7Lj93upJqLWzh1qWQ0s/pcqdECT6umKGQxwAV05R5j9L8C8A6vMehUAFlBcNhq7oGgNp/wLKTt8bDVatevbDmNT6TIoOtg15MpvyFMTEPoQysPHTigIugTzG5Gowy9OoXPPEdMPTXwykwAUVqxi2KFUwKMgUWKRYYpWhchn/wGGCxAU5BkLWLeQegrATW8cJWVTUB9Q6YqlsqrI4f/P3iEW+zvpNus8Nb3wAVM6sEA25E9wLKwOreHyU8gycf405pwdavwZ3S7ZIAP5+EOyUbUvoUuFxQxeLY76FSjjj+WC+giK6kFa4IWxVVYMr3vQ5ErgzG965+ceZxyqErhXpjUsEAZTqwDCzTE36JzYxx/tZzYFS2DkpzdMHZiRcF7866L5DjFhJE7IhRx8CNfi135COg7EBFdQig4izvJSwdLU80t/7k1SuOamfTCk2h0ruvDKz0HvHDuRGkLtx2OpistXZlw1C7+T2w3xBWwV9yuKpKhh0xApuIYJ+gZDJgVdUGaMQAQD0HfN2w59Wmnxu5kwOoxaBQEfJbRQtlYBWtq/v4IJdyjbx9b1Pzu3uvxXB4QbCmqT4MnqmiBgYL4Mq4aZ7diQleLPokhKM37P5G453mKTrkzcCyi6OuY5KLFpeBVbSu7seDPLKuCffZw5rfjU6OJ2LjIQyFm2S7E2B7MRBI/OmlbwzdbEpXQPWyjmfyFjL+/4JPu45FLkyEAAAAAElFTkSuQmCC');\n\t\t\tbackground-size: 24px;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: left center;\n\t\t\tpadding-left: 36px;\n\t\t\tfont-size: 20px;\n\t\t\tletter-spacing: -0.04rem;\n\t\t\tfont-weight: 400;\n\t\t\tcolor: white;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.message-container {\n\t\t\tflex-grow: 1;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tmargin: 0 30px;\n\t\t}\n\n\t\t.message {\n\t\t\tfont-weight: 300;\n\t\t\tfont-size: 1.4rem;\n\t\t}\n\n\t\tbody.error .message {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tbody.error .error-message {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.error-message {\n\t\t\tdisplay: none;\n\t\t\tmax-width: 800px;\n\t\t\tfont-weight: 300;\n\t\t\tfont-size: 1.3rem;\n\t\t}\n\n\t\t.error-text {\n\t\t\tcolor: salmon;\n\t\t\tfont-size: 1rem;\n\t\t}\n\n\t\t@font-face {\n\t\t\tfont-family: 'Segoe UI';\n\t\t\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.eot?#iefix\") format(\"embedded-opentype\");\n\t\t\tsrc: local(\"Segoe UI Light\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.woff2\") format(\"woff2\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.svg#web\") format(\"svg\");\n\t\t\tfont-weight: 200\n\t\t}\n\n\t\t@font-face {\n\t\t\tfont-family: 'Segoe UI';\n\t\t\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot?#iefix\") format(\"embedded-opentype\");\n\t\t\tsrc: local(\"Segoe UI Semilight\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.woff2\") format(\"woff2\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.svg#web\") format(\"svg\");\n\t\t\tfont-weight: 300\n\t\t}\n\n\t\t@font-face {\n\t\t\tfont-family: 'Segoe UI';\n\t\t\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.eot?#iefix\") format(\"embedded-opentype\");\n\t\t\tsrc: local(\"Segoe UI\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/normal/latest.svg#web\") format(\"svg\");\n\t\t\tfont-weight: 400\n\t\t}\n\n\t\t@font-face {\n\t\t\tfont-family: 'Segoe UI';\n\t\t\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.eot?#iefix\") format(\"embedded-opentype\");\n\t\t\tsrc: local(\"Segoe UI Semibold\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semibold/latest.svg#web\") format(\"svg\");\n\t\t\tfont-weight: 600\n\t\t}\n\n\t\t@font-face {\n\t\t\tfont-family: 'Segoe UI';\n\t\t\tsrc: url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.eot\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.eot?#iefix\") format(\"embedded-opentype\");\n\t\t\tsrc: local(\"Segoe UI Bold\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff2\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.woff\") format(\"woff\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.ttf\") format(\"truetype\"),url(\"https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.svg#web\") format(\"svg\");\n\t\t\tfont-weight: 700\n\t\t}\n\t</style>\n</head>\n\n<body>\n\t<a class=\"branding\" href=\"https://code.visualstudio.com/\">\n\t\tVisual Studio Code\n\t</a>\n\t<div class=\"message-container\">\n\t\t<div class=\"message\">\n\t\t\tYou are signed in now and can close this page.\n\t\t</div>\n\t\t<div class=\"error-message\">\n\t\t\tAn error occurred while signing in:\n\t\t\t<div class=\"error-text\"></div>\n\t\t</div>\n\t</div>\n\t<script>\n\t\tvar search = new URLSearchParams(window.location.search);\n\t\tvar error = search.get('error');\n\t\tif (error) {\n\t\t\tconst description = search.get('error_description');\n\t\t\tdocument.querySelector('.error-text')\n\t\t\t\t.textContent = error + ' - ' + description;\n\t\t\tdocument.querySelector('body')\n\t\t\t\t.classList.add('error');\n\t\t}\n\t</script>\n</body>\n\n</html>\n`;\n"
  },
  {
    "path": "extensions/microsoft-authentication/src/node/publicClientCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AccountInfo } from '@azure/msal-node';\nimport { SecretStorage, LogOutputChannel, Disposable, EventEmitter, Memento, Event } from 'vscode';\nimport { ICachedPublicClientApplication, ICachedPublicClientApplicationManager } from '../common/publicClientCache';\nimport { CachedPublicClientApplication } from './cachedPublicClientApplication';\nimport { IAccountAccess, ScopedAccountAccess } from '../common/accountAccess';\n\nexport interface IPublicClientApplicationInfo {\n\tclientId: string;\n\tauthority: string;\n}\n\nexport class CachedPublicClientApplicationManager implements ICachedPublicClientApplicationManager {\n\t// The key is the clientId\n\tprivate readonly _pcas = new Map<string, ICachedPublicClientApplication>();\n\tprivate readonly _pcaDisposables = new Map<string, Disposable>();\n\n\tprivate _disposable: Disposable;\n\n\tprivate readonly _onDidAccountsChangeEmitter = new EventEmitter<{ added: AccountInfo[]; changed: AccountInfo[]; deleted: AccountInfo[] }>();\n\treadonly onDidAccountsChange = this._onDidAccountsChangeEmitter.event;\n\n\tprivate constructor(\n\t\tprivate readonly _pcasSecretStorage: IPublicClientApplicationSecretStorage,\n\t\tprivate readonly _accountAccess: IAccountAccess,\n\t\tprivate readonly _secretStorage: SecretStorage,\n\t\tprivate readonly _logger: LogOutputChannel,\n\t\tdisposables: Disposable[]\n\t) {\n\t\tthis._disposable = Disposable.from(\n\t\t\t...disposables,\n\t\t\tthis._registerSecretStorageHandler(),\n\t\t\tthis._onDidAccountsChangeEmitter\n\t\t);\n\t}\n\n\tstatic async create(\n\t\tsecretStorage: SecretStorage,\n\t\tlogger: LogOutputChannel,\n\t\tcloudName: string\n\t): Promise<CachedPublicClientApplicationManager> {\n\t\tconst pcasSecretStorage = await PublicClientApplicationsSecretStorage.create(secretStorage, cloudName);\n\t\t// TODO: Remove the migrations in a version\n\t\tconst migrations = await pcasSecretStorage.getOldValue();\n\t\tconst accountAccess = await ScopedAccountAccess.create(secretStorage, cloudName, logger, migrations);\n\t\tconst manager = new CachedPublicClientApplicationManager(pcasSecretStorage, accountAccess, secretStorage, logger, [pcasSecretStorage, accountAccess]);\n\t\tawait manager.initialize();\n\t\treturn manager;\n\t}\n\n\tprivate _registerSecretStorageHandler() {\n\t\treturn this._pcasSecretStorage.onDidChange(() => this._handleSecretStorageChange());\n\t}\n\n\tprivate async initialize() {\n\t\tthis._logger.debug('[initialize] Initializing PublicClientApplicationManager');\n\t\tlet clientIds: string[] | undefined;\n\t\ttry {\n\t\t\tclientIds = await this._pcasSecretStorage.get();\n\t\t} catch (e) {\n\t\t\t// data is corrupted\n\t\t\tthis._logger.error('[initialize] Error initializing PublicClientApplicationManager:', e);\n\t\t\tawait this._pcasSecretStorage.delete();\n\t\t}\n\t\tif (!clientIds) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst promises = new Array<Promise<ICachedPublicClientApplication>>();\n\t\tfor (const clientId of clientIds) {\n\t\t\ttry {\n\t\t\t\t// Load the PCA in memory\n\t\t\t\tpromises.push(this._doCreatePublicClientApplication(clientId));\n\t\t\t} catch (e) {\n\t\t\t\tthis._logger.error('[initialize] Error intitializing PCA:', clientId);\n\t\t\t}\n\t\t}\n\n\t\tconst results = await Promise.allSettled(promises);\n\t\tlet pcasChanged = false;\n\t\tfor (const result of results) {\n\t\t\tif (result.status === 'rejected') {\n\t\t\t\tthis._logger.error('[initialize] Error getting PCA:', result.reason);\n\t\t\t} else {\n\t\t\t\tif (!result.value.accounts.length) {\n\t\t\t\t\tpcasChanged = true;\n\t\t\t\t\tconst clientId = result.value.clientId;\n\t\t\t\t\tthis._pcaDisposables.get(clientId)?.dispose();\n\t\t\t\t\tthis._pcaDisposables.delete(clientId);\n\t\t\t\t\tthis._pcas.delete(clientId);\n\t\t\t\t\tthis._logger.debug(`[initialize] [${clientId}] PCA disposed because it's empty.`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pcasChanged) {\n\t\t\tawait this._storePublicClientApplications();\n\t\t}\n\t\tthis._logger.debug('[initialize] PublicClientApplicationManager initialized');\n\t}\n\n\tdispose() {\n\t\tthis._disposable.dispose();\n\t\tDisposable.from(...this._pcaDisposables.values()).dispose();\n\t}\n\n\tasync getOrCreate(clientId: string, refreshTokensToMigrate?: string[]): Promise<ICachedPublicClientApplication> {\n\t\tlet pca = this._pcas.get(clientId);\n\t\tif (pca) {\n\t\t\tthis._logger.debug(`[getOrCreate] [${clientId}] PublicClientApplicationManager cache hit`);\n\t\t} else {\n\t\t\tthis._logger.debug(`[getOrCreate] [${clientId}] PublicClientApplicationManager cache miss, creating new PCA...`);\n\t\t\tpca = await this._doCreatePublicClientApplication(clientId);\n\t\t\tawait this._storePublicClientApplications();\n\t\t\tthis._logger.debug(`[getOrCreate] [${clientId}] PCA created.`);\n\t\t}\n\n\t\t// TODO: MSAL Migration. Remove this when we remove the old flow.\n\t\tif (refreshTokensToMigrate?.length) {\n\t\t\tthis._logger.debug(`[getOrCreate] [${clientId}] Migrating refresh tokens to PCA...`);\n\t\t\tfor (const refreshToken of refreshTokensToMigrate) {\n\t\t\t\ttry {\n\t\t\t\t\t// Use the refresh token to acquire a result. This will cache the refresh token for future operations.\n\t\t\t\t\t// The scopes don't matter here since we can create any token from the refresh token.\n\t\t\t\t\tconst result = await pca.acquireTokenByRefreshToken({ refreshToken, forceCache: true, scopes: [] });\n\t\t\t\t\tif (result?.account) {\n\t\t\t\t\t\tthis._logger.debug(`[getOrCreate] [${clientId}] Refresh token migrated to PCA.`);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthis._logger.error(`[getOrCreate] [${clientId}] Error migrating refresh token:`, e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn pca;\n\t}\n\n\tprivate async _doCreatePublicClientApplication(clientId: string): Promise<ICachedPublicClientApplication> {\n\t\tconst pca = await CachedPublicClientApplication.create(clientId, this._secretStorage, this._accountAccess, this._logger);\n\t\tthis._pcas.set(clientId, pca);\n\t\tconst disposable = Disposable.from(\n\t\t\tpca,\n\t\t\tpca.onDidAccountsChange(e => this._onDidAccountsChangeEmitter.fire(e)),\n\t\t\tpca.onDidRemoveLastAccount(() => {\n\t\t\t\t// The PCA has no more accounts, so we can dispose it so we're not keeping it\n\t\t\t\t// around forever.\n\t\t\t\tdisposable.dispose();\n\t\t\t\tthis._pcaDisposables.delete(clientId);\n\t\t\t\tthis._pcas.delete(clientId);\n\t\t\t\tthis._logger.debug(`[_doCreatePublicClientApplication] [${clientId}] PCA disposed. Firing off storing of PCAs...`);\n\t\t\t\tvoid this._storePublicClientApplications();\n\t\t\t})\n\t\t);\n\t\tthis._pcaDisposables.set(clientId, disposable);\n\t\t// Fire for the initial state and only if accounts exist\n\t\tif (pca.accounts.length > 0) {\n\t\t\tthis._onDidAccountsChangeEmitter.fire({ added: pca.accounts, changed: [], deleted: [] });\n\t\t}\n\t\treturn pca;\n\t}\n\n\tgetAll(): ICachedPublicClientApplication[] {\n\t\treturn Array.from(this._pcas.values());\n\t}\n\n\tprivate async _handleSecretStorageChange() {\n\t\tthis._logger.debug(`[_handleSecretStorageChange] Handling PCAs secret storage change...`);\n\t\tlet result: string[] | undefined;\n\t\ttry {\n\t\t\tresult = await this._pcasSecretStorage.get();\n\t\t} catch (_e) {\n\t\t\t// The data in secret storage has been corrupted somehow so\n\t\t\t// we store what we have in this window\n\t\t\tawait this._storePublicClientApplications();\n\t\t\treturn;\n\t\t}\n\t\tif (!result) {\n\t\t\tthis._logger.debug(`[_handleSecretStorageChange] PCAs deleted in secret storage. Disposing all...`);\n\t\t\tDisposable.from(...this._pcaDisposables.values()).dispose();\n\t\t\tthis._pcas.clear();\n\t\t\tthis._pcaDisposables.clear();\n\t\t\tthis._logger.debug(`[_handleSecretStorageChange] Finished PCAs secret storage change.`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pcaKeysFromStorage = new Set(result);\n\t\t// Handle the deleted ones\n\t\tfor (const pcaKey of this._pcas.keys()) {\n\t\t\tif (!pcaKeysFromStorage.delete(pcaKey)) {\n\t\t\t\tthis._logger.debug(`[_handleSecretStorageChange] PCA was deleted in another window: ${pcaKey}`);\n\t\t\t}\n\t\t}\n\n\t\t// Handle the new ones\n\t\tfor (const clientId of pcaKeysFromStorage) {\n\t\t\ttry {\n\t\t\t\tthis._logger.debug(`[_handleSecretStorageChange] [${clientId}] Creating new PCA that was created in another window...`);\n\t\t\t\tawait this._doCreatePublicClientApplication(clientId);\n\t\t\t\tthis._logger.debug(`[_handleSecretStorageChange] [${clientId}] PCA created.`);\n\t\t\t} catch (_e) {\n\t\t\t\t// This really shouldn't happen, but should we do something about this?\n\t\t\t\tthis._logger.error(`Failed to create new PublicClientApplication: ${clientId}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tthis._logger.debug('[_handleSecretStorageChange] Finished handling PCAs secret storage change.');\n\t}\n\n\tprivate _storePublicClientApplications() {\n\t\treturn this._pcasSecretStorage.store(Array.from(this._pcas.keys()));\n\t}\n}\n\ninterface IPublicClientApplicationSecretStorage {\n\tget(): Promise<string[] | undefined>;\n\tgetOldValue(): Promise<{ clientId: string; authority: string }[] | undefined>;\n\tstore(value: string[]): Thenable<void>;\n\tdelete(): Thenable<void>;\n\tonDidChange: Event<void>;\n}\n\nclass PublicClientApplicationsSecretStorage implements IPublicClientApplicationSecretStorage, Disposable {\n\tprivate _disposable: Disposable;\n\n\tprivate readonly _onDidChangeEmitter = new EventEmitter<void>;\n\treadonly onDidChange: Event<void> = this._onDidChangeEmitter.event;\n\n\tprivate readonly _oldKey = `publicClientApplications-${this._cloudName}`;\n\tprivate readonly _key = `publicClients-${this._cloudName}`;\n\n\tprivate constructor(private readonly _secretStorage: SecretStorage, private readonly _cloudName: string) {\n\t\tthis._disposable = Disposable.from(\n\t\t\tthis._onDidChangeEmitter,\n\t\t\tthis._secretStorage.onDidChange(e => {\n\t\t\t\tif (e.key === this._key) {\n\t\t\t\t\tthis._onDidChangeEmitter.fire();\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tstatic async create(secretStorage: SecretStorage, cloudName: string): Promise<PublicClientApplicationsSecretStorage> {\n\t\tconst storage = new PublicClientApplicationsSecretStorage(secretStorage, cloudName);\n\t\tawait storage.initialize();\n\t\treturn storage;\n\t}\n\n\t/**\n\t * Runs the migration.\n\t * TODO: Remove this after a version.\n\t */\n\tprivate async initialize() {\n\t\tconst oldValue = await this.getOldValue();\n\t\tif (!oldValue) {\n\t\t\treturn;\n\t\t}\n\t\tconst newValue = await this.get() ?? [];\n\t\tfor (const { clientId } of oldValue) {\n\t\t\tif (!newValue.includes(clientId)) {\n\t\t\t\tnewValue.push(clientId);\n\t\t\t}\n\t\t}\n\t\tawait this.store(newValue);\n\t}\n\n\tasync get(): Promise<string[] | undefined> {\n\t\tconst value = await this._secretStorage.get(this._key);\n\t\tif (!value) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn JSON.parse(value);\n\t}\n\n\t/**\n\t * Old representation of data that included the authority. This should be removed in a version or 2.\n\t * @returns An array of objects with clientId and authority\n\t */\n\tasync getOldValue(): Promise<{ clientId: string; authority: string }[] | undefined> {\n\t\tconst value = await this._secretStorage.get(this._oldKey);\n\t\tif (!value) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst result: { clientId: string; authority: string }[] = [];\n\t\tfor (const stringifiedObj of JSON.parse(value)) {\n\t\t\tconst obj = JSON.parse(stringifiedObj);\n\t\t\tif (obj.clientId && obj.authority) {\n\t\t\t\tresult.push(obj);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tstore(value: string[]): Thenable<void> {\n\t\treturn this._secretStorage.store(this._key, JSON.stringify(value));\n\t}\n\n\tdelete(): Thenable<void> {\n\t\treturn this._secretStorage.delete(this._key);\n\t}\n\n\tdispose() {\n\t\tthis._disposable.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/microsoft-authentication/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"baseUrl\": \".\",\n\t\t\"experimentalDecorators\": true,\n\t\t\"module\": \"commonjs\",\n\t\t\"moduleResolution\": \"node\",\n\t\t\"noFallthroughCasesInSwitch\": true,\n\t\t\"noUnusedLocals\": false,\n\t\t\"outDir\": \"dist\",\n\t\t\"resolveJsonModule\": true,\n\t\t\"rootDir\": \"src\",\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"lib\": [\n\t\t\t\"WebWorker\"\n\t\t]\n\t},\n\t\"exclude\": [\n\t\t\"node_modules\"\n\t],\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.idToken.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.nativeWindowHandle.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/.gitignore",
    "content": "renderer-out\n"
  },
  {
    "path": "extensions/notebook-renderers/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/notebook-renderers/.vscodeignore",
    "content": "src/**\nnotebook/**\ntsconfig.json\n.gitignore\nesbuild.js\nsrc/**\n"
  },
  {
    "path": "extensions/notebook-renderers/README.md",
    "content": "# Builtin Notebook Output Renderers for Visual Studio Code\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nThis extension provides the following notebook renderers for VS Code:\n\n- Image renderer for png, jpeg and gif\n"
  },
  {
    "path": "extensions/notebook-renderers/esbuild.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\nconst path = require('path');\n\nconst srcDir = path.join(__dirname, 'src');\nconst outDir = path.join(__dirname, 'renderer-out');\n\nrequire('../esbuild-webview-common').run({\n\tentryPoints: [\n\t\tpath.join(srcDir, 'index.ts'),\n\t],\n\tsrcDir,\n\toutdir: outDir,\n}, process.argv);\n"
  },
  {
    "path": "extensions/notebook-renderers/package.json",
    "content": "{\n\t\"name\": \"builtin-notebook-renderers\",\n\t\"displayName\": \"%displayName%\",\n\t\"description\": \"%description%\",\n\t\"publisher\": \"vscode\",\n\t\"version\": \"1.0.0\",\n\t\"license\": \"MIT\",\n  \"icon\": \"media/icon.png\",\n\t\"engines\": {\n\t\t\"vscode\": \"^1.57.0\"\n\t},\n\t\"capabilities\": {\n\t\t\"virtualWorkspaces\": true,\n\t\t\"untrustedWorkspaces\": {\n\t\t\t\"supported\": true\n\t\t}\n\t},\n\t\"contributes\": {\n\t\t\"notebookRenderer\": [\n\t\t\t{\n\t\t\t\t\"id\": \"vscode.builtin-renderer\",\n\t\t\t\t\"entrypoint\": \"./renderer-out/index.js\",\n\t\t\t\t\"displayName\": \"VS Code Builtin Notebook Output Renderer\",\n\t\t\t\t\"requiresMessaging\": \"never\",\n\t\t\t\t\"mimeTypes\": [\n\t\t\t\t\t\"image/gif\",\n\t\t\t\t\t\"image/png\",\n\t\t\t\t\t\"image/jpeg\",\n\t\t\t\t\t\"image/git\",\n\t\t\t\t\t\"image/svg+xml\",\n\t\t\t\t\t\"text/html\",\n\t\t\t\t\t\"application/javascript\",\n\t\t\t\t\t\"application/vnd.code.notebook.error\",\n\t\t\t\t\t\"application/vnd.code.notebook.stdout\",\n\t\t\t\t\t\"application/x.notebook.stdout\",\n\t\t\t\t\t\"application/x.notebook.stream\",\n\t\t\t\t\t\"application/vnd.code.notebook.stderr\",\n\t\t\t\t\t\"application/x.notebook.stderr\",\n\t\t\t\t\t\"text/plain\"\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\t\"scripts\": {\n\t\t\"compile\": \"npx gulp compile-extension:notebook-renderers && npm run build-notebook\",\n\t\t\"watch\": \"npx gulp compile-watch:notebook-renderers\",\n\t\t\"build-notebook\": \"node ./esbuild\"\n\t},\n\t\"dependencies\": {},\n\t\"devDependencies\": {\n\t\t\"@types/jsdom\": \"^21.1.0\",\n\t\t\"@types/vscode-notebook-renderer\": \"^1.60.0\",\n\t\t\"jsdom\": \"^21.1.1\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/microsoft/vscode.git\"\n\t}\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/package.nls.json",
    "content": "{\n\t\"displayName\": \"Builtin Notebook Output Renderers\",\n\t\"description\": \"Provides basic output renderers for notebooks\"\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/src/ansi.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { RGBA, Color } from './color';\nimport { ansiColorIdentifiers } from './colorMap';\nimport { LinkOptions, linkify } from './linkify';\n\n\nexport function handleANSIOutput(text: string, linkOptions: LinkOptions): HTMLSpanElement {\n\n\tconst root: HTMLSpanElement = document.createElement('span');\n\tconst textLength: number = text.length;\n\n\tlet styleNames: string[] = [];\n\tlet customFgColor: RGBA | string | undefined;\n\tlet customBgColor: RGBA | string | undefined;\n\tlet customUnderlineColor: RGBA | string | undefined;\n\tlet colorsInverted: boolean = false;\n\tlet currentPos: number = 0;\n\tlet buffer: string = '';\n\n\twhile (currentPos < textLength) {\n\n\t\tlet sequenceFound: boolean = false;\n\n\t\t// Potentially an ANSI escape sequence.\n\t\t// See https://www.asciitable.com/ansi-escape-sequences.php & https://en.wikipedia.org/wiki/ANSI_escape_code\n\t\tif (text.charCodeAt(currentPos) === 27 && text.charAt(currentPos + 1) === '[') {\n\n\t\t\tconst startPos: number = currentPos;\n\t\t\tcurrentPos += 2; // Ignore 'Esc[' as it's in every sequence.\n\n\t\t\tlet ansiSequence: string = '';\n\n\t\t\twhile (currentPos < textLength) {\n\t\t\t\tconst char: string = text.charAt(currentPos);\n\t\t\t\tansiSequence += char;\n\n\t\t\t\tcurrentPos++;\n\n\t\t\t\t// Look for a known sequence terminating character.\n\t\t\t\tif (char.match(/^[ABCDHIJKfhmpsu]$/)) {\n\t\t\t\t\tsequenceFound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (sequenceFound) {\n\n\t\t\t\t// Flush buffer with previous styles.\n\t\t\t\tappendStylizedStringToContainer(root, buffer, linkOptions, styleNames, customFgColor, customBgColor, customUnderlineColor);\n\n\t\t\t\tbuffer = '';\n\n\t\t\t\t/*\n\t\t\t\t * Certain ranges that are matched here do not contain real graphics rendition sequences. For\n\t\t\t\t * the sake of having a simpler expression, they have been included anyway.\n\t\t\t\t */\n\t\t\t\tif (ansiSequence.match(/^(?:[34][0-8]|9[0-7]|10[0-7]|[0-9]|2[1-5,7-9]|[34]9|5[8,9]|1[0-9])(?:;[349][0-7]|10[0-7]|[013]|[245]|[34]9)?(?:;[012]?[0-9]?[0-9])*;?m$/)) {\n\n\t\t\t\t\tconst styleCodes: number[] = ansiSequence.slice(0, -1) // Remove final 'm' character.\n\t\t\t\t\t\t.split(';')\t\t\t\t\t\t\t\t\t\t   // Separate style codes.\n\t\t\t\t\t\t.filter(elem => elem !== '')\t\t\t           // Filter empty elems as '34;m' -> ['34', ''].\n\t\t\t\t\t\t.map(elem => parseInt(elem, 10));\t\t           // Convert to numbers.\n\n\t\t\t\t\tif (styleCodes[0] === 38 || styleCodes[0] === 48 || styleCodes[0] === 58) {\n\t\t\t\t\t\t// Advanced color code - can't be combined with formatting codes like simple colors can\n\t\t\t\t\t\t// Ignores invalid colors and additional info beyond what is necessary\n\t\t\t\t\t\tconst colorType = (styleCodes[0] === 38) ? 'foreground' : ((styleCodes[0] === 48) ? 'background' : 'underline');\n\n\t\t\t\t\t\tif (styleCodes[1] === 5) {\n\t\t\t\t\t\t\tset8BitColor(styleCodes, colorType);\n\t\t\t\t\t\t} else if (styleCodes[1] === 2) {\n\t\t\t\t\t\t\tset24BitColor(styleCodes, colorType);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetBasicFormatters(styleCodes);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\t// Unsupported sequence so simply hide it.\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tcurrentPos = startPos;\n\t\t\t}\n\t\t}\n\n\t\tif (sequenceFound === false) {\n\t\t\tbuffer += text.charAt(currentPos);\n\t\t\tcurrentPos++;\n\t\t}\n\t}\n\n\t// Flush remaining text buffer if not empty.\n\tif (buffer) {\n\t\tappendStylizedStringToContainer(root, buffer, linkOptions, styleNames, customFgColor, customBgColor, customUnderlineColor);\n\t}\n\n\treturn root;\n\n\t/**\n\t * Change the foreground or background color by clearing the current color\n\t * and adding the new one.\n\t * @param colorType If `'foreground'`, will change the foreground color, if\n\t * \t`'background'`, will change the background color, and if `'underline'`\n\t * will set the underline color.\n\t * @param color Color to change to. If `undefined` or not provided,\n\t * will clear current color without adding a new one.\n\t */\n\tfunction changeColor(colorType: 'foreground' | 'background' | 'underline', color?: RGBA | string | undefined): void {\n\t\tif (colorType === 'foreground') {\n\t\t\tcustomFgColor = color;\n\t\t} else if (colorType === 'background') {\n\t\t\tcustomBgColor = color;\n\t\t} else if (colorType === 'underline') {\n\t\t\tcustomUnderlineColor = color;\n\t\t}\n\t\tstyleNames = styleNames.filter(style => style !== `code-${colorType}-colored`);\n\t\tif (color !== undefined) {\n\t\t\tstyleNames.push(`code-${colorType}-colored`);\n\t\t}\n\t}\n\n\t/**\n\t * Swap foreground and background colors.  Used for color inversion.  Caller should check\n\t * [] flag to make sure it is appropriate to turn ON or OFF (if it is already inverted don't call\n\t */\n\tfunction reverseForegroundAndBackgroundColors(): void {\n\t\tconst oldFgColor: RGBA | string | undefined = customFgColor;\n\t\tchangeColor('foreground', customBgColor);\n\t\tchangeColor('background', oldFgColor);\n\t}\n\n\t/**\n\t * Calculate and set basic ANSI formatting. Supports ON/OFF of bold, italic, underline,\n\t * double underline,  crossed-out/strikethrough, overline, dim, blink, rapid blink,\n\t * reverse/invert video, hidden, superscript, subscript and alternate font codes,\n\t * clearing/resetting of foreground, background and underline colors,\n\t * setting normal foreground and background colors, and bright foreground and\n\t * background colors. Not to be used for codes containing advanced colors.\n\t * Will ignore invalid codes.\n\t * @param styleCodes Array of ANSI basic styling numbers, which will be\n\t * applied in order. New colors and backgrounds clear old ones; new formatting\n\t * does not.\n\t * @see {@link https://en.wikipedia.org/wiki/ANSI_escape_code#SGR }\n\t */\n\tfunction setBasicFormatters(styleCodes: number[]): void {\n\t\tfor (const code of styleCodes) {\n\t\t\tswitch (code) {\n\t\t\t\tcase 0: {  // reset (everything)\n\t\t\t\t\tstyleNames = [];\n\t\t\t\t\tcustomFgColor = undefined;\n\t\t\t\t\tcustomBgColor = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 1: { // bold\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-bold`);\n\t\t\t\t\tstyleNames.push('code-bold');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 2: { // dim\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-dim`);\n\t\t\t\t\tstyleNames.push('code-dim');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 3: { // italic\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-italic`);\n\t\t\t\t\tstyleNames.push('code-italic');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 4: { // underline\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-underline` && style !== `code-double-underline`));\n\t\t\t\t\tstyleNames.push('code-underline');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 5: { // blink\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-blink`);\n\t\t\t\t\tstyleNames.push('code-blink');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 6: { // rapid blink\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-rapid-blink`);\n\t\t\t\t\tstyleNames.push('code-rapid-blink');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 7: { // invert foreground and background\n\t\t\t\t\tif (!colorsInverted) {\n\t\t\t\t\t\tcolorsInverted = true;\n\t\t\t\t\t\treverseForegroundAndBackgroundColors();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 8: { // hidden\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-hidden`);\n\t\t\t\t\tstyleNames.push('code-hidden');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 9: { // strike-through/crossed-out\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-strike-through`);\n\t\t\t\t\tstyleNames.push('code-strike-through');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 10: { // normal default font\n\t\t\t\t\tstyleNames = styleNames.filter(style => !style.startsWith('code-font'));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: { // font codes (and 20 is 'blackletter' font code)\n\t\t\t\t\tstyleNames = styleNames.filter(style => !style.startsWith('code-font'));\n\t\t\t\t\tstyleNames.push(`code-font-${code - 10}`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 21: { // double underline\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-underline` && style !== `code-double-underline`));\n\t\t\t\t\tstyleNames.push('code-double-underline');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 22: { // normal intensity (bold off and dim off)\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-bold` && style !== `code-dim`));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 23: { // Neither italic or blackletter (font 10)\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-italic` && style !== `code-font-10`));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 24: { // not underlined (Neither singly nor doubly underlined)\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-underline` && style !== `code-double-underline`));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 25: { // not blinking\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-blink` && style !== `code-rapid-blink`));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 27: { // not reversed/inverted\n\t\t\t\t\tif (colorsInverted) {\n\t\t\t\t\t\tcolorsInverted = false;\n\t\t\t\t\t\treverseForegroundAndBackgroundColors();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 28: { // not hidden (reveal)\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-hidden`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 29: { // not crossed-out\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-strike-through`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 53: { // overlined\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-overline`);\n\t\t\t\t\tstyleNames.push('code-overline');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 55: { // not overlined\n\t\t\t\t\tstyleNames = styleNames.filter(style => style !== `code-overline`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 39: {  // default foreground color\n\t\t\t\t\tchangeColor('foreground', undefined);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 49: {  // default background color\n\t\t\t\t\tchangeColor('background', undefined);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 59: {  // default underline color\n\t\t\t\t\tchangeColor('underline', undefined);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 73: { // superscript\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-superscript` && style !== `code-subscript`));\n\t\t\t\t\tstyleNames.push('code-superscript');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 74: { // subscript\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-superscript` && style !== `code-subscript`));\n\t\t\t\t\tstyleNames.push('code-subscript');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 75: { // neither superscript or subscript\n\t\t\t\t\tstyleNames = styleNames.filter(style => (style !== `code-superscript` && style !== `code-subscript`));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tsetBasicColor(code);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Calculate and set styling for complicated 24-bit ANSI color codes.\n\t * @param styleCodes Full list of integer codes that make up the full ANSI\n\t * sequence, including the two defining codes and the three RGB codes.\n\t * @param colorType If `'foreground'`, will set foreground color, if\n\t * `'background'`, will set background color, and if it is `'underline'`\n\t * will set the underline color.\n\t * @see {@link https://en.wikipedia.org/wiki/ANSI_escape_code#24-bit }\n\t */\n\tfunction set24BitColor(styleCodes: number[], colorType: 'foreground' | 'background' | 'underline'): void {\n\t\tif (styleCodes.length >= 5 &&\n\t\t\tstyleCodes[2] >= 0 && styleCodes[2] <= 255 &&\n\t\t\tstyleCodes[3] >= 0 && styleCodes[3] <= 255 &&\n\t\t\tstyleCodes[4] >= 0 && styleCodes[4] <= 255) {\n\t\t\tconst customColor = new RGBA(styleCodes[2], styleCodes[3], styleCodes[4]);\n\t\t\tchangeColor(colorType, customColor);\n\t\t}\n\t}\n\n\t/**\n\t * Calculate and set styling for advanced 8-bit ANSI color codes.\n\t * @param styleCodes Full list of integer codes that make up the ANSI\n\t * sequence, including the two defining codes and the one color code.\n\t * @param colorType If `'foreground'`, will set foreground color, if\n\t * `'background'`, will set background color and if it is `'underline'`\n\t * will set the underline color.\n\t * @see {@link https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit }\n\t */\n\tfunction set8BitColor(styleCodes: number[], colorType: 'foreground' | 'background' | 'underline'): void {\n\t\tlet colorNumber = styleCodes[2];\n\t\tconst color = calcANSI8bitColor(colorNumber);\n\n\t\tif (color) {\n\t\t\tchangeColor(colorType, color);\n\t\t} else if (colorNumber >= 0 && colorNumber <= 15) {\n\t\t\tif (colorType === 'underline') {\n\t\t\t\t// for underline colors we just decode the 0-15 color number to theme color, set and return\n\t\t\t\tchangeColor(colorType, ansiColorIdentifiers[colorNumber].colorValue);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Need to map to one of the four basic color ranges (30-37, 90-97, 40-47, 100-107)\n\t\t\tcolorNumber += 30;\n\t\t\tif (colorNumber >= 38) {\n\t\t\t\t// Bright colors\n\t\t\t\tcolorNumber += 52;\n\t\t\t}\n\t\t\tif (colorType === 'background') {\n\t\t\t\tcolorNumber += 10;\n\t\t\t}\n\t\t\tsetBasicColor(colorNumber);\n\t\t}\n\t}\n\n\t/**\n\t * Calculate and set styling for basic bright and dark ANSI color codes. Uses\n\t * theme colors if available. Automatically distinguishes between foreground\n\t * and background colors; does not support color-clearing codes 39 and 49.\n\t * @param styleCode Integer color code on one of the following ranges:\n\t * [30-37, 90-97, 40-47, 100-107]. If not on one of these ranges, will do\n\t * nothing.\n\t */\n\tfunction setBasicColor(styleCode: number): void {\n\t\t// const theme = themeService.getColorTheme();\n\t\tlet colorType: 'foreground' | 'background' | undefined;\n\t\tlet colorIndex: number | undefined;\n\n\t\tif (styleCode >= 30 && styleCode <= 37) {\n\t\t\tcolorIndex = styleCode - 30;\n\t\t\tcolorType = 'foreground';\n\t\t} else if (styleCode >= 90 && styleCode <= 97) {\n\t\t\tcolorIndex = (styleCode - 90) + 8; // High-intensity (bright)\n\t\t\tcolorType = 'foreground';\n\t\t} else if (styleCode >= 40 && styleCode <= 47) {\n\t\t\tcolorIndex = styleCode - 40;\n\t\t\tcolorType = 'background';\n\t\t} else if (styleCode >= 100 && styleCode <= 107) {\n\t\t\tcolorIndex = (styleCode - 100) + 8; // High-intensity (bright)\n\t\t\tcolorType = 'background';\n\t\t}\n\n\t\tif (colorIndex !== undefined && colorType) {\n\t\t\tchangeColor(colorType, ansiColorIdentifiers[colorIndex]?.colorValue);\n\t\t}\n\t}\n}\n\nfunction appendStylizedStringToContainer(\n\troot: HTMLElement,\n\tstringContent: string,\n\tlinkOptions: LinkOptions,\n\tcssClasses: string[],\n\tcustomTextColor?: RGBA | string,\n\tcustomBackgroundColor?: RGBA | string,\n\tcustomUnderlineColor?: RGBA | string\n): void {\n\tif (!root || !stringContent) {\n\t\treturn;\n\t}\n\n\tlet container = document.createElement('span');\n\n\tif (container.childElementCount === 0) {\n\t\t// plain text\n\t\tcontainer = linkify(stringContent, linkOptions, true);\n\t}\n\n\tcontainer.className = cssClasses.join(' ');\n\tif (customTextColor) {\n\t\tcontainer.style.color = typeof customTextColor === 'string' ? customTextColor : Color.Format.CSS.formatRGB(new Color(customTextColor));\n\t}\n\tif (customBackgroundColor) {\n\t\tcontainer.style.backgroundColor = typeof customBackgroundColor === 'string' ? customBackgroundColor : Color.Format.CSS.formatRGB(new Color(customBackgroundColor));\n\t}\n\tif (customUnderlineColor) {\n\t\tcontainer.style.textDecorationColor = typeof customUnderlineColor === 'string' ? customUnderlineColor : Color.Format.CSS.formatRGB(new Color(customUnderlineColor));\n\t}\n\troot.appendChild(container);\n}\n\n/**\n * Calculate the color from the color set defined in the ANSI 8-bit standard.\n * Standard and high intensity colors are not defined in the standard as specific\n * colors, so these and invalid colors return `undefined`.\n * @see {@link https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit } for info.\n * @param colorNumber The number (ranging from 16 to 255) referring to the color\n * desired.\n */\nexport function calcANSI8bitColor(colorNumber: number): RGBA | undefined {\n\tif (colorNumber % 1 !== 0) {\n\t\t// Should be integer\n\t\treturn;\n\t} if (colorNumber >= 16 && colorNumber <= 231) {\n\t\t// Converts to one of 216 RGB colors\n\t\tcolorNumber -= 16;\n\n\t\tlet blue: number = colorNumber % 6;\n\t\tcolorNumber = (colorNumber - blue) / 6;\n\t\tlet green: number = colorNumber % 6;\n\t\tcolorNumber = (colorNumber - green) / 6;\n\t\tlet red: number = colorNumber;\n\n\t\t// red, green, blue now range on [0, 5], need to map to [0,255]\n\t\tconst convFactor: number = 255 / 5;\n\t\tblue = Math.round(blue * convFactor);\n\t\tgreen = Math.round(green * convFactor);\n\t\tred = Math.round(red * convFactor);\n\n\t\treturn new RGBA(red, green, blue);\n\t} else if (colorNumber >= 232 && colorNumber <= 255) {\n\t\t// Converts to a grayscale value\n\t\tcolorNumber -= 232;\n\t\tconst colorLevel: number = Math.round(colorNumber / 23 * 255);\n\t\treturn new RGBA(colorLevel, colorLevel, colorLevel);\n\t} else {\n\t\treturn;\n\t}\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/src/color.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const enum CharCode {\n\tNull = 0,\n\t/**\n\t * The `\\b` character.\n\t */\n\tBackspace = 8,\n\t/**\n\t * The `\\t` character.\n\t */\n\tTab = 9,\n\t/**\n\t * The `\\n` character.\n\t */\n\tLineFeed = 10,\n\t/**\n\t * The `\\r` character.\n\t */\n\tCarriageReturn = 13,\n\tSpace = 32,\n\t/**\n\t * The `!` character.\n\t */\n\tExclamationMark = 33,\n\t/**\n\t * The `\"` character.\n\t */\n\tDoubleQuote = 34,\n\t/**\n\t * The `#` character.\n\t */\n\tHash = 35,\n\t/**\n\t * The `$` character.\n\t */\n\tDollarSign = 36,\n\t/**\n\t * The `%` character.\n\t */\n\tPercentSign = 37,\n\t/**\n\t * The `&` character.\n\t */\n\tAmpersand = 38,\n\t/**\n\t * The `'` character.\n\t */\n\tSingleQuote = 39,\n\t/**\n\t * The `(` character.\n\t */\n\tOpenParen = 40,\n\t/**\n\t * The `)` character.\n\t */\n\tCloseParen = 41,\n\t/**\n\t * The `*` character.\n\t */\n\tAsterisk = 42,\n\t/**\n\t * The `+` character.\n\t */\n\tPlus = 43,\n\t/**\n\t * The `,` character.\n\t */\n\tComma = 44,\n\t/**\n\t * The `-` character.\n\t */\n\tDash = 45,\n\t/**\n\t * The `.` character.\n\t */\n\tPeriod = 46,\n\t/**\n\t * The `/` character.\n\t */\n\tSlash = 47,\n\n\tDigit0 = 48,\n\tDigit1 = 49,\n\tDigit2 = 50,\n\tDigit3 = 51,\n\tDigit4 = 52,\n\tDigit5 = 53,\n\tDigit6 = 54,\n\tDigit7 = 55,\n\tDigit8 = 56,\n\tDigit9 = 57,\n\n\t/**\n\t * The `:` character.\n\t */\n\tColon = 58,\n\t/**\n\t * The `;` character.\n\t */\n\tSemicolon = 59,\n\t/**\n\t * The `<` character.\n\t */\n\tLessThan = 60,\n\t/**\n\t * The `=` character.\n\t */\n\tEquals = 61,\n\t/**\n\t * The `>` character.\n\t */\n\tGreaterThan = 62,\n\t/**\n\t * The `?` character.\n\t */\n\tQuestionMark = 63,\n\t/**\n\t * The `@` character.\n\t */\n\tAtSign = 64,\n\n\tA = 65,\n\tB = 66,\n\tC = 67,\n\tD = 68,\n\tE = 69,\n\tF = 70,\n\tG = 71,\n\tH = 72,\n\tI = 73,\n\tJ = 74,\n\tK = 75,\n\tL = 76,\n\tM = 77,\n\tN = 78,\n\tO = 79,\n\tP = 80,\n\tQ = 81,\n\tR = 82,\n\tS = 83,\n\tT = 84,\n\tU = 85,\n\tV = 86,\n\tW = 87,\n\tX = 88,\n\tY = 89,\n\tZ = 90,\n\n\t/**\n\t * The `[` character.\n\t */\n\tOpenSquareBracket = 91,\n\t/**\n\t * The `\\` character.\n\t */\n\tBackslash = 92,\n\t/**\n\t * The `]` character.\n\t */\n\tCloseSquareBracket = 93,\n\t/**\n\t * The `^` character.\n\t */\n\tCaret = 94,\n\t/**\n\t * The `_` character.\n\t */\n\tUnderline = 95,\n\t/**\n\t * The ``(`)`` character.\n\t */\n\tBackTick = 96,\n\n\ta = 97,\n\tb = 98,\n\tc = 99,\n\td = 100,\n\te = 101,\n\tf = 102,\n\tg = 103,\n\th = 104,\n\ti = 105,\n\tj = 106,\n\tk = 107,\n\tl = 108,\n\tm = 109,\n\tn = 110,\n\to = 111,\n\tp = 112,\n\tq = 113,\n\tr = 114,\n\ts = 115,\n\tt = 116,\n\tu = 117,\n\tv = 118,\n\tw = 119,\n\tx = 120,\n\ty = 121,\n\tz = 122,\n\n\t/**\n\t * The `{` character.\n\t */\n\tOpenCurlyBrace = 123,\n\t/**\n\t * The `|` character.\n\t */\n\tPipe = 124,\n\t/**\n\t * The `}` character.\n\t */\n\tCloseCurlyBrace = 125,\n\t/**\n\t * The `~` character.\n\t */\n\tTilde = 126,\n\n\tU_Combining_Grave_Accent = 0x0300,\t\t\t\t\t\t\t\t//\tU+0300\tCombining Grave Accent\n\tU_Combining_Acute_Accent = 0x0301,\t\t\t\t\t\t\t\t//\tU+0301\tCombining Acute Accent\n\tU_Combining_Circumflex_Accent = 0x0302,\t\t\t\t\t\t\t//\tU+0302\tCombining Circumflex Accent\n\tU_Combining_Tilde = 0x0303,\t\t\t\t\t\t\t\t\t\t//\tU+0303\tCombining Tilde\n\tU_Combining_Macron = 0x0304,\t\t\t\t\t\t\t\t\t//\tU+0304\tCombining Macron\n\tU_Combining_Overline = 0x0305,\t\t\t\t\t\t\t\t\t//\tU+0305\tCombining Overline\n\tU_Combining_Breve = 0x0306,\t\t\t\t\t\t\t\t\t\t//\tU+0306\tCombining Breve\n\tU_Combining_Dot_Above = 0x0307,\t\t\t\t\t\t\t\t\t//\tU+0307\tCombining Dot Above\n\tU_Combining_Diaeresis = 0x0308,\t\t\t\t\t\t\t\t\t//\tU+0308\tCombining Diaeresis\n\tU_Combining_Hook_Above = 0x0309,\t\t\t\t\t\t\t\t//\tU+0309\tCombining Hook Above\n\tU_Combining_Ring_Above = 0x030A,\t\t\t\t\t\t\t\t//\tU+030A\tCombining Ring Above\n\tU_Combining_Double_Acute_Accent = 0x030B,\t\t\t\t\t\t//\tU+030B\tCombining Double Acute Accent\n\tU_Combining_Caron = 0x030C,\t\t\t\t\t\t\t\t\t\t//\tU+030C\tCombining Caron\n\tU_Combining_Vertical_Line_Above = 0x030D,\t\t\t\t\t\t//\tU+030D\tCombining Vertical Line Above\n\tU_Combining_Double_Vertical_Line_Above = 0x030E,\t\t\t\t//\tU+030E\tCombining Double Vertical Line Above\n\tU_Combining_Double_Grave_Accent = 0x030F,\t\t\t\t\t\t//\tU+030F\tCombining Double Grave Accent\n\tU_Combining_Candrabindu = 0x0310,\t\t\t\t\t\t\t\t//\tU+0310\tCombining Candrabindu\n\tU_Combining_Inverted_Breve = 0x0311,\t\t\t\t\t\t\t//\tU+0311\tCombining Inverted Breve\n\tU_Combining_Turned_Comma_Above = 0x0312,\t\t\t\t\t\t//\tU+0312\tCombining Turned Comma Above\n\tU_Combining_Comma_Above = 0x0313,\t\t\t\t\t\t\t\t//\tU+0313\tCombining Comma Above\n\tU_Combining_Reversed_Comma_Above = 0x0314,\t\t\t\t\t\t//\tU+0314\tCombining Reversed Comma Above\n\tU_Combining_Comma_Above_Right = 0x0315,\t\t\t\t\t\t\t//\tU+0315\tCombining Comma Above Right\n\tU_Combining_Grave_Accent_Below = 0x0316,\t\t\t\t\t\t//\tU+0316\tCombining Grave Accent Below\n\tU_Combining_Acute_Accent_Below = 0x0317,\t\t\t\t\t\t//\tU+0317\tCombining Acute Accent Below\n\tU_Combining_Left_Tack_Below = 0x0318,\t\t\t\t\t\t\t//\tU+0318\tCombining Left Tack Below\n\tU_Combining_Right_Tack_Below = 0x0319,\t\t\t\t\t\t\t//\tU+0319\tCombining Right Tack Below\n\tU_Combining_Left_Angle_Above = 0x031A,\t\t\t\t\t\t\t//\tU+031A\tCombining Left Angle Above\n\tU_Combining_Horn = 0x031B,\t\t\t\t\t\t\t\t\t\t//\tU+031B\tCombining Horn\n\tU_Combining_Left_Half_Ring_Below = 0x031C,\t\t\t\t\t\t//\tU+031C\tCombining Left Half Ring Below\n\tU_Combining_Up_Tack_Below = 0x031D,\t\t\t\t\t\t\t\t//\tU+031D\tCombining Up Tack Below\n\tU_Combining_Down_Tack_Below = 0x031E,\t\t\t\t\t\t\t//\tU+031E\tCombining Down Tack Below\n\tU_Combining_Plus_Sign_Below = 0x031F,\t\t\t\t\t\t\t//\tU+031F\tCombining Plus Sign Below\n\tU_Combining_Minus_Sign_Below = 0x0320,\t\t\t\t\t\t\t//\tU+0320\tCombining Minus Sign Below\n\tU_Combining_Palatalized_Hook_Below = 0x0321,\t\t\t\t\t//\tU+0321\tCombining Palatalized Hook Below\n\tU_Combining_Retroflex_Hook_Below = 0x0322,\t\t\t\t\t\t//\tU+0322\tCombining Retroflex Hook Below\n\tU_Combining_Dot_Below = 0x0323,\t\t\t\t\t\t\t\t\t//\tU+0323\tCombining Dot Below\n\tU_Combining_Diaeresis_Below = 0x0324,\t\t\t\t\t\t\t//\tU+0324\tCombining Diaeresis Below\n\tU_Combining_Ring_Below = 0x0325,\t\t\t\t\t\t\t\t//\tU+0325\tCombining Ring Below\n\tU_Combining_Comma_Below = 0x0326,\t\t\t\t\t\t\t\t//\tU+0326\tCombining Comma Below\n\tU_Combining_Cedilla = 0x0327,\t\t\t\t\t\t\t\t\t//\tU+0327\tCombining Cedilla\n\tU_Combining_Ogonek = 0x0328,\t\t\t\t\t\t\t\t\t//\tU+0328\tCombining Ogonek\n\tU_Combining_Vertical_Line_Below = 0x0329,\t\t\t\t\t\t//\tU+0329\tCombining Vertical Line Below\n\tU_Combining_Bridge_Below = 0x032A,\t\t\t\t\t\t\t\t//\tU+032A\tCombining Bridge Below\n\tU_Combining_Inverted_Double_Arch_Below = 0x032B,\t\t\t\t//\tU+032B\tCombining Inverted Double Arch Below\n\tU_Combining_Caron_Below = 0x032C,\t\t\t\t\t\t\t\t//\tU+032C\tCombining Caron Below\n\tU_Combining_Circumflex_Accent_Below = 0x032D,\t\t\t\t\t//\tU+032D\tCombining Circumflex Accent Below\n\tU_Combining_Breve_Below = 0x032E,\t\t\t\t\t\t\t\t//\tU+032E\tCombining Breve Below\n\tU_Combining_Inverted_Breve_Below = 0x032F,\t\t\t\t\t\t//\tU+032F\tCombining Inverted Breve Below\n\tU_Combining_Tilde_Below = 0x0330,\t\t\t\t\t\t\t\t//\tU+0330\tCombining Tilde Below\n\tU_Combining_Macron_Below = 0x0331,\t\t\t\t\t\t\t\t//\tU+0331\tCombining Macron Below\n\tU_Combining_Low_Line = 0x0332,\t\t\t\t\t\t\t\t\t//\tU+0332\tCombining Low Line\n\tU_Combining_Double_Low_Line = 0x0333,\t\t\t\t\t\t\t//\tU+0333\tCombining Double Low Line\n\tU_Combining_Tilde_Overlay = 0x0334,\t\t\t\t\t\t\t\t//\tU+0334\tCombining Tilde Overlay\n\tU_Combining_Short_Stroke_Overlay = 0x0335,\t\t\t\t\t\t//\tU+0335\tCombining Short Stroke Overlay\n\tU_Combining_Long_Stroke_Overlay = 0x0336,\t\t\t\t\t\t//\tU+0336\tCombining Long Stroke Overlay\n\tU_Combining_Short_Solidus_Overlay = 0x0337,\t\t\t\t\t\t//\tU+0337\tCombining Short Solidus Overlay\n\tU_Combining_Long_Solidus_Overlay = 0x0338,\t\t\t\t\t\t//\tU+0338\tCombining Long Solidus Overlay\n\tU_Combining_Right_Half_Ring_Below = 0x0339,\t\t\t\t\t\t//\tU+0339\tCombining Right Half Ring Below\n\tU_Combining_Inverted_Bridge_Below = 0x033A,\t\t\t\t\t\t//\tU+033A\tCombining Inverted Bridge Below\n\tU_Combining_Square_Below = 0x033B,\t\t\t\t\t\t\t\t//\tU+033B\tCombining Square Below\n\tU_Combining_Seagull_Below = 0x033C,\t\t\t\t\t\t\t\t//\tU+033C\tCombining Seagull Below\n\tU_Combining_X_Above = 0x033D,\t\t\t\t\t\t\t\t\t//\tU+033D\tCombining X Above\n\tU_Combining_Vertical_Tilde = 0x033E,\t\t\t\t\t\t\t//\tU+033E\tCombining Vertical Tilde\n\tU_Combining_Double_Overline = 0x033F,\t\t\t\t\t\t\t//\tU+033F\tCombining Double Overline\n\tU_Combining_Grave_Tone_Mark = 0x0340,\t\t\t\t\t\t\t//\tU+0340\tCombining Grave Tone Mark\n\tU_Combining_Acute_Tone_Mark = 0x0341,\t\t\t\t\t\t\t//\tU+0341\tCombining Acute Tone Mark\n\tU_Combining_Greek_Perispomeni = 0x0342,\t\t\t\t\t\t\t//\tU+0342\tCombining Greek Perispomeni\n\tU_Combining_Greek_Koronis = 0x0343,\t\t\t\t\t\t\t\t//\tU+0343\tCombining Greek Koronis\n\tU_Combining_Greek_Dialytika_Tonos = 0x0344,\t\t\t\t\t\t//\tU+0344\tCombining Greek Dialytika Tonos\n\tU_Combining_Greek_Ypogegrammeni = 0x0345,\t\t\t\t\t\t//\tU+0345\tCombining Greek Ypogegrammeni\n\tU_Combining_Bridge_Above = 0x0346,\t\t\t\t\t\t\t\t//\tU+0346\tCombining Bridge Above\n\tU_Combining_Equals_Sign_Below = 0x0347,\t\t\t\t\t\t\t//\tU+0347\tCombining Equals Sign Below\n\tU_Combining_Double_Vertical_Line_Below = 0x0348,\t\t\t\t//\tU+0348\tCombining Double Vertical Line Below\n\tU_Combining_Left_Angle_Below = 0x0349,\t\t\t\t\t\t\t//\tU+0349\tCombining Left Angle Below\n\tU_Combining_Not_Tilde_Above = 0x034A,\t\t\t\t\t\t\t//\tU+034A\tCombining Not Tilde Above\n\tU_Combining_Homothetic_Above = 0x034B,\t\t\t\t\t\t\t//\tU+034B\tCombining Homothetic Above\n\tU_Combining_Almost_Equal_To_Above = 0x034C,\t\t\t\t\t\t//\tU+034C\tCombining Almost Equal To Above\n\tU_Combining_Left_Right_Arrow_Below = 0x034D,\t\t\t\t\t//\tU+034D\tCombining Left Right Arrow Below\n\tU_Combining_Upwards_Arrow_Below = 0x034E,\t\t\t\t\t\t//\tU+034E\tCombining Upwards Arrow Below\n\tU_Combining_Grapheme_Joiner = 0x034F,\t\t\t\t\t\t\t//\tU+034F\tCombining Grapheme Joiner\n\tU_Combining_Right_Arrowhead_Above = 0x0350,\t\t\t\t\t\t//\tU+0350\tCombining Right Arrowhead Above\n\tU_Combining_Left_Half_Ring_Above = 0x0351,\t\t\t\t\t\t//\tU+0351\tCombining Left Half Ring Above\n\tU_Combining_Fermata = 0x0352,\t\t\t\t\t\t\t\t\t//\tU+0352\tCombining Fermata\n\tU_Combining_X_Below = 0x0353,\t\t\t\t\t\t\t\t\t//\tU+0353\tCombining X Below\n\tU_Combining_Left_Arrowhead_Below = 0x0354,\t\t\t\t\t\t//\tU+0354\tCombining Left Arrowhead Below\n\tU_Combining_Right_Arrowhead_Below = 0x0355,\t\t\t\t\t\t//\tU+0355\tCombining Right Arrowhead Below\n\tU_Combining_Right_Arrowhead_And_Up_Arrowhead_Below = 0x0356,\t//\tU+0356\tCombining Right Arrowhead And Up Arrowhead Below\n\tU_Combining_Right_Half_Ring_Above = 0x0357,\t\t\t\t\t\t//\tU+0357\tCombining Right Half Ring Above\n\tU_Combining_Dot_Above_Right = 0x0358,\t\t\t\t\t\t\t//\tU+0358\tCombining Dot Above Right\n\tU_Combining_Asterisk_Below = 0x0359,\t\t\t\t\t\t\t//\tU+0359\tCombining Asterisk Below\n\tU_Combining_Double_Ring_Below = 0x035A,\t\t\t\t\t\t\t//\tU+035A\tCombining Double Ring Below\n\tU_Combining_Zigzag_Above = 0x035B,\t\t\t\t\t\t\t\t//\tU+035B\tCombining Zigzag Above\n\tU_Combining_Double_Breve_Below = 0x035C,\t\t\t\t\t\t//\tU+035C\tCombining Double Breve Below\n\tU_Combining_Double_Breve = 0x035D,\t\t\t\t\t\t\t\t//\tU+035D\tCombining Double Breve\n\tU_Combining_Double_Macron = 0x035E,\t\t\t\t\t\t\t\t//\tU+035E\tCombining Double Macron\n\tU_Combining_Double_Macron_Below = 0x035F,\t\t\t\t\t\t//\tU+035F\tCombining Double Macron Below\n\tU_Combining_Double_Tilde = 0x0360,\t\t\t\t\t\t\t\t//\tU+0360\tCombining Double Tilde\n\tU_Combining_Double_Inverted_Breve = 0x0361,\t\t\t\t\t\t//\tU+0361\tCombining Double Inverted Breve\n\tU_Combining_Double_Rightwards_Arrow_Below = 0x0362,\t\t\t\t//\tU+0362\tCombining Double Rightwards Arrow Below\n\tU_Combining_Latin_Small_Letter_A = 0x0363, \t\t\t\t\t\t//\tU+0363\tCombining Latin Small Letter A\n\tU_Combining_Latin_Small_Letter_E = 0x0364, \t\t\t\t\t\t//\tU+0364\tCombining Latin Small Letter E\n\tU_Combining_Latin_Small_Letter_I = 0x0365, \t\t\t\t\t\t//\tU+0365\tCombining Latin Small Letter I\n\tU_Combining_Latin_Small_Letter_O = 0x0366, \t\t\t\t\t\t//\tU+0366\tCombining Latin Small Letter O\n\tU_Combining_Latin_Small_Letter_U = 0x0367, \t\t\t\t\t\t//\tU+0367\tCombining Latin Small Letter U\n\tU_Combining_Latin_Small_Letter_C = 0x0368, \t\t\t\t\t\t//\tU+0368\tCombining Latin Small Letter C\n\tU_Combining_Latin_Small_Letter_D = 0x0369, \t\t\t\t\t\t//\tU+0369\tCombining Latin Small Letter D\n\tU_Combining_Latin_Small_Letter_H = 0x036A, \t\t\t\t\t\t//\tU+036A\tCombining Latin Small Letter H\n\tU_Combining_Latin_Small_Letter_M = 0x036B, \t\t\t\t\t\t//\tU+036B\tCombining Latin Small Letter M\n\tU_Combining_Latin_Small_Letter_R = 0x036C, \t\t\t\t\t\t//\tU+036C\tCombining Latin Small Letter R\n\tU_Combining_Latin_Small_Letter_T = 0x036D, \t\t\t\t\t\t//\tU+036D\tCombining Latin Small Letter T\n\tU_Combining_Latin_Small_Letter_V = 0x036E, \t\t\t\t\t\t//\tU+036E\tCombining Latin Small Letter V\n\tU_Combining_Latin_Small_Letter_X = 0x036F, \t\t\t\t\t\t//\tU+036F\tCombining Latin Small Letter X\n\n\t/**\n\t * Unicode Character 'LINE SEPARATOR' (U+2028)\n\t * http://www.fileformat.info/info/unicode/char/2028/index.htm\n\t */\n\tLINE_SEPARATOR = 0x2028,\n\t/**\n\t * Unicode Character 'PARAGRAPH SEPARATOR' (U+2029)\n\t * http://www.fileformat.info/info/unicode/char/2029/index.htm\n\t */\n\tPARAGRAPH_SEPARATOR = 0x2029,\n\t/**\n\t * Unicode Character 'NEXT LINE' (U+0085)\n\t * http://www.fileformat.info/info/unicode/char/0085/index.htm\n\t */\n\tNEXT_LINE = 0x0085,\n\n\t// http://www.fileformat.info/info/unicode/category/Sk/list.htm\n\tU_CIRCUMFLEX = 0x005E,\t\t\t\t\t\t\t\t\t// U+005E\tCIRCUMFLEX\n\tU_GRAVE_ACCENT = 0x0060,\t\t\t\t\t\t\t\t// U+0060\tGRAVE ACCENT\n\tU_DIAERESIS = 0x00A8,\t\t\t\t\t\t\t\t\t// U+00A8\tDIAERESIS\n\tU_MACRON = 0x00AF,\t\t\t\t\t\t\t\t\t\t// U+00AF\tMACRON\n\tU_ACUTE_ACCENT = 0x00B4,\t\t\t\t\t\t\t\t// U+00B4\tACUTE ACCENT\n\tU_CEDILLA = 0x00B8,\t\t\t\t\t\t\t\t\t\t// U+00B8\tCEDILLA\n\tU_MODIFIER_LETTER_LEFT_ARROWHEAD = 0x02C2,\t\t\t\t// U+02C2\tMODIFIER LETTER LEFT ARROWHEAD\n\tU_MODIFIER_LETTER_RIGHT_ARROWHEAD = 0x02C3,\t\t\t\t// U+02C3\tMODIFIER LETTER RIGHT ARROWHEAD\n\tU_MODIFIER_LETTER_UP_ARROWHEAD = 0x02C4,\t\t\t\t// U+02C4\tMODIFIER LETTER UP ARROWHEAD\n\tU_MODIFIER_LETTER_DOWN_ARROWHEAD = 0x02C5,\t\t\t\t// U+02C5\tMODIFIER LETTER DOWN ARROWHEAD\n\tU_MODIFIER_LETTER_CENTRED_RIGHT_HALF_RING = 0x02D2,\t\t// U+02D2\tMODIFIER LETTER CENTRED RIGHT HALF RING\n\tU_MODIFIER_LETTER_CENTRED_LEFT_HALF_RING = 0x02D3,\t\t// U+02D3\tMODIFIER LETTER CENTRED LEFT HALF RING\n\tU_MODIFIER_LETTER_UP_TACK = 0x02D4,\t\t\t\t\t\t// U+02D4\tMODIFIER LETTER UP TACK\n\tU_MODIFIER_LETTER_DOWN_TACK = 0x02D5,\t\t\t\t\t// U+02D5\tMODIFIER LETTER DOWN TACK\n\tU_MODIFIER_LETTER_PLUS_SIGN = 0x02D6,\t\t\t\t\t// U+02D6\tMODIFIER LETTER PLUS SIGN\n\tU_MODIFIER_LETTER_MINUS_SIGN = 0x02D7,\t\t\t\t\t// U+02D7\tMODIFIER LETTER MINUS SIGN\n\tU_BREVE = 0x02D8,\t\t\t\t\t\t\t\t\t\t// U+02D8\tBREVE\n\tU_DOT_ABOVE = 0x02D9,\t\t\t\t\t\t\t\t\t// U+02D9\tDOT ABOVE\n\tU_RING_ABOVE = 0x02DA,\t\t\t\t\t\t\t\t\t// U+02DA\tRING ABOVE\n\tU_OGONEK = 0x02DB,\t\t\t\t\t\t\t\t\t\t// U+02DB\tOGONEK\n\tU_SMALL_TILDE = 0x02DC,\t\t\t\t\t\t\t\t\t// U+02DC\tSMALL TILDE\n\tU_DOUBLE_ACUTE_ACCENT = 0x02DD,\t\t\t\t\t\t\t// U+02DD\tDOUBLE ACUTE ACCENT\n\tU_MODIFIER_LETTER_RHOTIC_HOOK = 0x02DE,\t\t\t\t\t// U+02DE\tMODIFIER LETTER RHOTIC HOOK\n\tU_MODIFIER_LETTER_CROSS_ACCENT = 0x02DF,\t\t\t\t// U+02DF\tMODIFIER LETTER CROSS ACCENT\n\tU_MODIFIER_LETTER_EXTRA_HIGH_TONE_BAR = 0x02E5,\t\t\t// U+02E5\tMODIFIER LETTER EXTRA-HIGH TONE BAR\n\tU_MODIFIER_LETTER_HIGH_TONE_BAR = 0x02E6,\t\t\t\t// U+02E6\tMODIFIER LETTER HIGH TONE BAR\n\tU_MODIFIER_LETTER_MID_TONE_BAR = 0x02E7,\t\t\t\t// U+02E7\tMODIFIER LETTER MID TONE BAR\n\tU_MODIFIER_LETTER_LOW_TONE_BAR = 0x02E8,\t\t\t\t// U+02E8\tMODIFIER LETTER LOW TONE BAR\n\tU_MODIFIER_LETTER_EXTRA_LOW_TONE_BAR = 0x02E9,\t\t\t// U+02E9\tMODIFIER LETTER EXTRA-LOW TONE BAR\n\tU_MODIFIER_LETTER_YIN_DEPARTING_TONE_MARK = 0x02EA,\t\t// U+02EA\tMODIFIER LETTER YIN DEPARTING TONE MARK\n\tU_MODIFIER_LETTER_YANG_DEPARTING_TONE_MARK = 0x02EB,\t// U+02EB\tMODIFIER LETTER YANG DEPARTING TONE MARK\n\tU_MODIFIER_LETTER_UNASPIRATED = 0x02ED,\t\t\t\t\t// U+02ED\tMODIFIER LETTER UNASPIRATED\n\tU_MODIFIER_LETTER_LOW_DOWN_ARROWHEAD = 0x02EF,\t\t\t// U+02EF\tMODIFIER LETTER LOW DOWN ARROWHEAD\n\tU_MODIFIER_LETTER_LOW_UP_ARROWHEAD = 0x02F0,\t\t\t// U+02F0\tMODIFIER LETTER LOW UP ARROWHEAD\n\tU_MODIFIER_LETTER_LOW_LEFT_ARROWHEAD = 0x02F1,\t\t\t// U+02F1\tMODIFIER LETTER LOW LEFT ARROWHEAD\n\tU_MODIFIER_LETTER_LOW_RIGHT_ARROWHEAD = 0x02F2,\t\t\t// U+02F2\tMODIFIER LETTER LOW RIGHT ARROWHEAD\n\tU_MODIFIER_LETTER_LOW_RING = 0x02F3,\t\t\t\t\t// U+02F3\tMODIFIER LETTER LOW RING\n\tU_MODIFIER_LETTER_MIDDLE_GRAVE_ACCENT = 0x02F4,\t\t\t// U+02F4\tMODIFIER LETTER MIDDLE GRAVE ACCENT\n\tU_MODIFIER_LETTER_MIDDLE_DOUBLE_GRAVE_ACCENT = 0x02F5,\t// U+02F5\tMODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT\n\tU_MODIFIER_LETTER_MIDDLE_DOUBLE_ACUTE_ACCENT = 0x02F6,\t// U+02F6\tMODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT\n\tU_MODIFIER_LETTER_LOW_TILDE = 0x02F7,\t\t\t\t\t// U+02F7\tMODIFIER LETTER LOW TILDE\n\tU_MODIFIER_LETTER_RAISED_COLON = 0x02F8,\t\t\t\t// U+02F8\tMODIFIER LETTER RAISED COLON\n\tU_MODIFIER_LETTER_BEGIN_HIGH_TONE = 0x02F9,\t\t\t\t// U+02F9\tMODIFIER LETTER BEGIN HIGH TONE\n\tU_MODIFIER_LETTER_END_HIGH_TONE = 0x02FA,\t\t\t\t// U+02FA\tMODIFIER LETTER END HIGH TONE\n\tU_MODIFIER_LETTER_BEGIN_LOW_TONE = 0x02FB,\t\t\t\t// U+02FB\tMODIFIER LETTER BEGIN LOW TONE\n\tU_MODIFIER_LETTER_END_LOW_TONE = 0x02FC,\t\t\t\t// U+02FC\tMODIFIER LETTER END LOW TONE\n\tU_MODIFIER_LETTER_SHELF = 0x02FD,\t\t\t\t\t\t// U+02FD\tMODIFIER LETTER SHELF\n\tU_MODIFIER_LETTER_OPEN_SHELF = 0x02FE,\t\t\t\t\t// U+02FE\tMODIFIER LETTER OPEN SHELF\n\tU_MODIFIER_LETTER_LOW_LEFT_ARROW = 0x02FF,\t\t\t\t// U+02FF\tMODIFIER LETTER LOW LEFT ARROW\n\tU_GREEK_LOWER_NUMERAL_SIGN = 0x0375,\t\t\t\t\t// U+0375\tGREEK LOWER NUMERAL SIGN\n\tU_GREEK_TONOS = 0x0384,\t\t\t\t\t\t\t\t\t// U+0384\tGREEK TONOS\n\tU_GREEK_DIALYTIKA_TONOS = 0x0385,\t\t\t\t\t\t// U+0385\tGREEK DIALYTIKA TONOS\n\tU_GREEK_KORONIS = 0x1FBD,\t\t\t\t\t\t\t\t// U+1FBD\tGREEK KORONIS\n\tU_GREEK_PSILI = 0x1FBF,\t\t\t\t\t\t\t\t\t// U+1FBF\tGREEK PSILI\n\tU_GREEK_PERISPOMENI = 0x1FC0,\t\t\t\t\t\t\t// U+1FC0\tGREEK PERISPOMENI\n\tU_GREEK_DIALYTIKA_AND_PERISPOMENI = 0x1FC1,\t\t\t\t// U+1FC1\tGREEK DIALYTIKA AND PERISPOMENI\n\tU_GREEK_PSILI_AND_VARIA = 0x1FCD,\t\t\t\t\t\t// U+1FCD\tGREEK PSILI AND VARIA\n\tU_GREEK_PSILI_AND_OXIA = 0x1FCE,\t\t\t\t\t\t// U+1FCE\tGREEK PSILI AND OXIA\n\tU_GREEK_PSILI_AND_PERISPOMENI = 0x1FCF,\t\t\t\t\t// U+1FCF\tGREEK PSILI AND PERISPOMENI\n\tU_GREEK_DASIA_AND_VARIA = 0x1FDD,\t\t\t\t\t\t// U+1FDD\tGREEK DASIA AND VARIA\n\tU_GREEK_DASIA_AND_OXIA = 0x1FDE,\t\t\t\t\t\t// U+1FDE\tGREEK DASIA AND OXIA\n\tU_GREEK_DASIA_AND_PERISPOMENI = 0x1FDF,\t\t\t\t\t// U+1FDF\tGREEK DASIA AND PERISPOMENI\n\tU_GREEK_DIALYTIKA_AND_VARIA = 0x1FED,\t\t\t\t\t// U+1FED\tGREEK DIALYTIKA AND VARIA\n\tU_GREEK_DIALYTIKA_AND_OXIA = 0x1FEE,\t\t\t\t\t// U+1FEE\tGREEK DIALYTIKA AND OXIA\n\tU_GREEK_VARIA = 0x1FEF,\t\t\t\t\t\t\t\t\t// U+1FEF\tGREEK VARIA\n\tU_GREEK_OXIA = 0x1FFD,\t\t\t\t\t\t\t\t\t// U+1FFD\tGREEK OXIA\n\tU_GREEK_DASIA = 0x1FFE,\t\t\t\t\t\t\t\t\t// U+1FFE\tGREEK DASIA\n\n\tU_IDEOGRAPHIC_FULL_STOP = 0x3002,\t\t\t\t\t\t// U+3002\tIDEOGRAPHIC FULL STOP\n\tU_LEFT_CORNER_BRACKET = 0x300C,\t\t\t\t\t\t\t// U+300C\tLEFT CORNER BRACKET\n\tU_RIGHT_CORNER_BRACKET = 0x300D,\t\t\t\t\t\t// U+300D\tRIGHT CORNER BRACKET\n\tU_LEFT_BLACK_LENTICULAR_BRACKET = 0x3010,\t\t\t\t// U+3010\tLEFT BLACK LENTICULAR BRACKET\n\tU_RIGHT_BLACK_LENTICULAR_BRACKET = 0x3011,\t\t\t\t// U+3011\tRIGHT BLACK LENTICULAR BRACKET\n\n\n\tU_OVERLINE = 0x203E, // Unicode Character 'OVERLINE'\n\n\t/**\n\t * UTF-8 BOM\n\t * Unicode Character 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF)\n\t * http://www.fileformat.info/info/unicode/char/feff/index.htm\n\t */\n\tUTF8_BOM = 65279,\n\n\tU_FULLWIDTH_SEMICOLON = 0xFF1B,\t\t\t\t\t\t\t// U+FF1B\tFULLWIDTH SEMICOLON\n\tU_FULLWIDTH_COMMA = 0xFF0C,\t\t\t\t\t\t\t\t// U+FF0C\tFULLWIDTH COMMA\n}\n\nfunction roundFloat(number: number, decimalPoints: number): number {\n\tconst decimal = Math.pow(10, decimalPoints);\n\treturn Math.round(number * decimal) / decimal;\n}\n\nexport class RGBA {\n\t_rgbaBrand: void = undefined;\n\n\t/**\n\t * Red: integer in [0-255]\n\t */\n\treadonly r: number;\n\n\t/**\n\t * Green: integer in [0-255]\n\t */\n\treadonly g: number;\n\n\t/**\n\t * Blue: integer in [0-255]\n\t */\n\treadonly b: number;\n\n\t/**\n\t * Alpha: float in [0-1]\n\t */\n\treadonly a: number;\n\n\tconstructor(r: number, g: number, b: number, a: number = 1) {\n\t\tthis.r = Math.min(255, Math.max(0, r)) | 0;\n\t\tthis.g = Math.min(255, Math.max(0, g)) | 0;\n\t\tthis.b = Math.min(255, Math.max(0, b)) | 0;\n\t\tthis.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n\t}\n\n\tstatic equals(a: RGBA, b: RGBA): boolean {\n\t\treturn a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;\n\t}\n}\n\nexport class HSLA {\n\n\t_hslaBrand: void = undefined;\n\n\t/**\n\t * Hue: integer in [0, 360]\n\t */\n\treadonly h: number;\n\n\t/**\n\t * Saturation: float in [0, 1]\n\t */\n\treadonly s: number;\n\n\t/**\n\t * Luminosity: float in [0, 1]\n\t */\n\treadonly l: number;\n\n\t/**\n\t * Alpha: float in [0, 1]\n\t */\n\treadonly a: number;\n\n\tconstructor(h: number, s: number, l: number, a: number) {\n\t\tthis.h = Math.max(Math.min(360, h), 0) | 0;\n\t\tthis.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n\t\tthis.l = roundFloat(Math.max(Math.min(1, l), 0), 3);\n\t\tthis.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n\t}\n\n\tstatic equals(a: HSLA, b: HSLA): boolean {\n\t\treturn a.h === b.h && a.s === b.s && a.l === b.l && a.a === b.a;\n\t}\n\n\t/**\n\t * Converts an RGB color value to HSL. Conversion formula\n\t * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n\t * Assumes r, g, and b are contained in the set [0, 255] and\n\t * returns h in the set [0, 360], s, and l in the set [0, 1].\n\t */\n\tstatic fromRGBA(rgba: RGBA): HSLA {\n\t\tconst r = rgba.r / 255;\n\t\tconst g = rgba.g / 255;\n\t\tconst b = rgba.b / 255;\n\t\tconst a = rgba.a;\n\n\t\tconst max = Math.max(r, g, b);\n\t\tconst min = Math.min(r, g, b);\n\t\tlet h = 0;\n\t\tlet s = 0;\n\t\tconst l = (min + max) / 2;\n\t\tconst chroma = max - min;\n\n\t\tif (chroma > 0) {\n\t\t\ts = Math.min((l <= 0.5 ? chroma / (2 * l) : chroma / (2 - (2 * l))), 1);\n\n\t\t\tswitch (max) {\n\t\t\t\tcase r: h = (g - b) / chroma + (g < b ? 6 : 0); break;\n\t\t\t\tcase g: h = (b - r) / chroma + 2; break;\n\t\t\t\tcase b: h = (r - g) / chroma + 4; break;\n\t\t\t}\n\n\t\t\th *= 60;\n\t\t\th = Math.round(h);\n\t\t}\n\t\treturn new HSLA(h, s, l, a);\n\t}\n\n\tprivate static _hue2rgb(p: number, q: number, t: number): number {\n\t\tif (t < 0) {\n\t\t\tt += 1;\n\t\t}\n\t\tif (t > 1) {\n\t\t\tt -= 1;\n\t\t}\n\t\tif (t < 1 / 6) {\n\t\t\treturn p + (q - p) * 6 * t;\n\t\t}\n\t\tif (t < 1 / 2) {\n\t\t\treturn q;\n\t\t}\n\t\tif (t < 2 / 3) {\n\t\t\treturn p + (q - p) * (2 / 3 - t) * 6;\n\t\t}\n\t\treturn p;\n\t}\n\n\t/**\n\t * Converts an HSL color value to RGB. Conversion formula\n\t * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n\t * Assumes h in the set [0, 360] s, and l are contained in the set [0, 1] and\n\t * returns r, g, and b in the set [0, 255].\n\t */\n\tstatic toRGBA(hsla: HSLA): RGBA {\n\t\tconst h = hsla.h / 360;\n\t\tconst { s, l, a } = hsla;\n\t\tlet r: number, g: number, b: number;\n\n\t\tif (s === 0) {\n\t\t\tr = g = b = l; // achromatic\n\t\t} else {\n\t\t\tconst q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\t\tconst p = 2 * l - q;\n\t\t\tr = HSLA._hue2rgb(p, q, h + 1 / 3);\n\t\t\tg = HSLA._hue2rgb(p, q, h);\n\t\t\tb = HSLA._hue2rgb(p, q, h - 1 / 3);\n\t\t}\n\n\t\treturn new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a);\n\t}\n}\n\nexport class HSVA {\n\n\t_hsvaBrand: void = undefined;\n\n\t/**\n\t * Hue: integer in [0, 360]\n\t */\n\treadonly h: number;\n\n\t/**\n\t * Saturation: float in [0, 1]\n\t */\n\treadonly s: number;\n\n\t/**\n\t * Value: float in [0, 1]\n\t */\n\treadonly v: number;\n\n\t/**\n\t * Alpha: float in [0, 1]\n\t */\n\treadonly a: number;\n\n\tconstructor(h: number, s: number, v: number, a: number) {\n\t\tthis.h = Math.max(Math.min(360, h), 0) | 0;\n\t\tthis.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n\t\tthis.v = roundFloat(Math.max(Math.min(1, v), 0), 3);\n\t\tthis.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n\t}\n\n\tstatic equals(a: HSVA, b: HSVA): boolean {\n\t\treturn a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;\n\t}\n\n\t// from http://www.rapidtables.com/convert/color/rgb-to-hsv.htm\n\tstatic fromRGBA(rgba: RGBA): HSVA {\n\t\tconst r = rgba.r / 255;\n\t\tconst g = rgba.g / 255;\n\t\tconst b = rgba.b / 255;\n\t\tconst cmax = Math.max(r, g, b);\n\t\tconst cmin = Math.min(r, g, b);\n\t\tconst delta = cmax - cmin;\n\t\tconst s = cmax === 0 ? 0 : (delta / cmax);\n\t\tlet m: number;\n\n\t\tif (delta === 0) {\n\t\t\tm = 0;\n\t\t} else if (cmax === r) {\n\t\t\tm = ((((g - b) / delta) % 6) + 6) % 6;\n\t\t} else if (cmax === g) {\n\t\t\tm = ((b - r) / delta) + 2;\n\t\t} else {\n\t\t\tm = ((r - g) / delta) + 4;\n\t\t}\n\n\t\treturn new HSVA(Math.round(m * 60), s, cmax, rgba.a);\n\t}\n\n\t// from http://www.rapidtables.com/convert/color/hsv-to-rgb.htm\n\tstatic toRGBA(hsva: HSVA): RGBA {\n\t\tconst { h, s, v, a } = hsva;\n\t\tconst c = v * s;\n\t\tconst x = c * (1 - Math.abs((h / 60) % 2 - 1));\n\t\tconst m = v - c;\n\t\tlet [r, g, b] = [0, 0, 0];\n\n\t\tif (h < 60) {\n\t\t\tr = c;\n\t\t\tg = x;\n\t\t} else if (h < 120) {\n\t\t\tr = x;\n\t\t\tg = c;\n\t\t} else if (h < 180) {\n\t\t\tg = c;\n\t\t\tb = x;\n\t\t} else if (h < 240) {\n\t\t\tg = x;\n\t\t\tb = c;\n\t\t} else if (h < 300) {\n\t\t\tr = x;\n\t\t\tb = c;\n\t\t} else if (h <= 360) {\n\t\t\tr = c;\n\t\t\tb = x;\n\t\t}\n\n\t\tr = Math.round((r + m) * 255);\n\t\tg = Math.round((g + m) * 255);\n\t\tb = Math.round((b + m) * 255);\n\n\t\treturn new RGBA(r, g, b, a);\n\t}\n}\n\nexport class Color {\n\n\tstatic fromHex(hex: string): Color {\n\t\treturn Color.Format.CSS.parseHex(hex) || Color.red;\n\t}\n\n\treadonly rgba: RGBA;\n\tprivate _hsla?: HSLA;\n\tget hsla(): HSLA {\n\t\tif (this._hsla) {\n\t\t\treturn this._hsla;\n\t\t} else {\n\t\t\treturn HSLA.fromRGBA(this.rgba);\n\t\t}\n\t}\n\n\tprivate _hsva?: HSVA;\n\tget hsva(): HSVA {\n\t\tif (this._hsva) {\n\t\t\treturn this._hsva;\n\t\t}\n\t\treturn HSVA.fromRGBA(this.rgba);\n\t}\n\n\tconstructor(arg: RGBA | HSLA | HSVA) {\n\t\tif (!arg) {\n\t\t\tthrow new Error('Color needs a value');\n\t\t} else if (arg instanceof RGBA) {\n\t\t\tthis.rgba = arg;\n\t\t} else if (arg instanceof HSLA) {\n\t\t\tthis._hsla = arg;\n\t\t\tthis.rgba = HSLA.toRGBA(arg);\n\t\t} else if (arg instanceof HSVA) {\n\t\t\tthis._hsva = arg;\n\t\t\tthis.rgba = HSVA.toRGBA(arg);\n\t\t} else {\n\t\t\tthrow new Error('Invalid color ctor argument');\n\t\t}\n\t}\n\n\tequals(other: Color | null): boolean {\n\t\treturn !!other && RGBA.equals(this.rgba, other.rgba) && HSLA.equals(this.hsla, other.hsla) && HSVA.equals(this.hsva, other.hsva);\n\t}\n\n\t/**\n\t * http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t * Returns the number in the set [0, 1]. O => Darkest Black. 1 => Lightest white.\n\t */\n\tgetRelativeLuminance(): number {\n\t\tconst R = Color._relativeLuminanceForComponent(this.rgba.r);\n\t\tconst G = Color._relativeLuminanceForComponent(this.rgba.g);\n\t\tconst B = Color._relativeLuminanceForComponent(this.rgba.b);\n\t\tconst luminance = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n\n\t\treturn roundFloat(luminance, 4);\n\t}\n\n\tprivate static _relativeLuminanceForComponent(color: number): number {\n\t\tconst c = color / 255;\n\t\treturn (c <= 0.03928) ? c / 12.92 : Math.pow(((c + 0.055) / 1.055), 2.4);\n\t}\n\n\t/**\n\t * http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t * Returns the contrast ration number in the set [1, 21].\n\t */\n\tgetContrastRatio(another: Color): number {\n\t\tconst lum1 = this.getRelativeLuminance();\n\t\tconst lum2 = another.getRelativeLuminance();\n\t\treturn lum1 > lum2 ? (lum1 + 0.05) / (lum2 + 0.05) : (lum2 + 0.05) / (lum1 + 0.05);\n\t}\n\n\t/**\n\t *\thttp://24ways.org/2010/calculating-color-contrast\n\t *  Return 'true' if darker color otherwise 'false'\n\t */\n\tisDarker(): boolean {\n\t\tconst yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000;\n\t\treturn yiq < 128;\n\t}\n\n\t/**\n\t *\thttp://24ways.org/2010/calculating-color-contrast\n\t *  Return 'true' if lighter color otherwise 'false'\n\t */\n\tisLighter(): boolean {\n\t\tconst yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000;\n\t\treturn yiq >= 128;\n\t}\n\n\tisLighterThan(another: Color): boolean {\n\t\tconst lum1 = this.getRelativeLuminance();\n\t\tconst lum2 = another.getRelativeLuminance();\n\t\treturn lum1 > lum2;\n\t}\n\n\tisDarkerThan(another: Color): boolean {\n\t\tconst lum1 = this.getRelativeLuminance();\n\t\tconst lum2 = another.getRelativeLuminance();\n\t\treturn lum1 < lum2;\n\t}\n\n\tlighten(factor: number): Color {\n\t\treturn new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l + this.hsla.l * factor, this.hsla.a));\n\t}\n\n\tdarken(factor: number): Color {\n\t\treturn new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l - this.hsla.l * factor, this.hsla.a));\n\t}\n\n\ttransparent(factor: number): Color {\n\t\tconst { r, g, b, a } = this.rgba;\n\t\treturn new Color(new RGBA(r, g, b, a * factor));\n\t}\n\n\tisTransparent(): boolean {\n\t\treturn this.rgba.a === 0;\n\t}\n\n\tisOpaque(): boolean {\n\t\treturn this.rgba.a === 1;\n\t}\n\n\topposite(): Color {\n\t\treturn new Color(new RGBA(255 - this.rgba.r, 255 - this.rgba.g, 255 - this.rgba.b, this.rgba.a));\n\t}\n\n\tblend(c: Color): Color {\n\t\tconst rgba = c.rgba;\n\n\t\t// Convert to 0..1 opacity\n\t\tconst thisA = this.rgba.a;\n\t\tconst colorA = rgba.a;\n\n\t\tconst a = thisA + colorA * (1 - thisA);\n\t\tif (a < 1e-6) {\n\t\t\treturn Color.transparent;\n\t\t}\n\n\t\tconst r = this.rgba.r * thisA / a + rgba.r * colorA * (1 - thisA) / a;\n\t\tconst g = this.rgba.g * thisA / a + rgba.g * colorA * (1 - thisA) / a;\n\t\tconst b = this.rgba.b * thisA / a + rgba.b * colorA * (1 - thisA) / a;\n\n\t\treturn new Color(new RGBA(r, g, b, a));\n\t}\n\n\tmakeOpaque(opaqueBackground: Color): Color {\n\t\tif (this.isOpaque() || opaqueBackground.rgba.a !== 1) {\n\t\t\t// only allow to blend onto a non-opaque color onto a opaque color\n\t\t\treturn this;\n\t\t}\n\n\t\tconst { r, g, b, a } = this.rgba;\n\n\t\t// https://stackoverflow.com/questions/12228548/finding-equivalent-color-with-opacity\n\t\treturn new Color(new RGBA(\n\t\t\topaqueBackground.rgba.r - a * (opaqueBackground.rgba.r - r),\n\t\t\topaqueBackground.rgba.g - a * (opaqueBackground.rgba.g - g),\n\t\t\topaqueBackground.rgba.b - a * (opaqueBackground.rgba.b - b),\n\t\t\t1\n\t\t));\n\t}\n\n\tflatten(...backgrounds: Color[]): Color {\n\t\tconst background = backgrounds.reduceRight((accumulator, color) => {\n\t\t\treturn Color._flatten(color, accumulator);\n\t\t});\n\t\treturn Color._flatten(this, background);\n\t}\n\n\tprivate static _flatten(foreground: Color, background: Color) {\n\t\tconst backgroundAlpha = 1 - foreground.rgba.a;\n\t\treturn new Color(new RGBA(\n\t\t\tbackgroundAlpha * background.rgba.r + foreground.rgba.a * foreground.rgba.r,\n\t\t\tbackgroundAlpha * background.rgba.g + foreground.rgba.a * foreground.rgba.g,\n\t\t\tbackgroundAlpha * background.rgba.b + foreground.rgba.a * foreground.rgba.b\n\t\t));\n\t}\n\n\tprivate _toString?: string;\n\ttoString(): string {\n\t\tthis._toString ??= Color.Format.CSS.format(this);\n\t\treturn this._toString;\n\t}\n\n\tstatic getLighterColor(of: Color, relative: Color, factor?: number): Color {\n\t\tif (of.isLighterThan(relative)) {\n\t\t\treturn of;\n\t\t}\n\t\tfactor = factor ? factor : 0.5;\n\t\tconst lum1 = of.getRelativeLuminance();\n\t\tconst lum2 = relative.getRelativeLuminance();\n\t\tfactor = factor * (lum2 - lum1) / lum2;\n\t\treturn of.lighten(factor);\n\t}\n\n\tstatic getDarkerColor(of: Color, relative: Color, factor?: number): Color {\n\t\tif (of.isDarkerThan(relative)) {\n\t\t\treturn of;\n\t\t}\n\t\tfactor = factor ? factor : 0.5;\n\t\tconst lum1 = of.getRelativeLuminance();\n\t\tconst lum2 = relative.getRelativeLuminance();\n\t\tfactor = factor * (lum1 - lum2) / lum1;\n\t\treturn of.darken(factor);\n\t}\n\n\tstatic readonly white = new Color(new RGBA(255, 255, 255, 1));\n\tstatic readonly black = new Color(new RGBA(0, 0, 0, 1));\n\tstatic readonly red = new Color(new RGBA(255, 0, 0, 1));\n\tstatic readonly blue = new Color(new RGBA(0, 0, 255, 1));\n\tstatic readonly green = new Color(new RGBA(0, 255, 0, 1));\n\tstatic readonly cyan = new Color(new RGBA(0, 255, 255, 1));\n\tstatic readonly lightgrey = new Color(new RGBA(211, 211, 211, 1));\n\tstatic readonly transparent = new Color(new RGBA(0, 0, 0, 0));\n}\n\nexport namespace Color {\n\texport namespace Format {\n\t\texport namespace CSS {\n\n\t\t\texport function formatRGB(color: Color): string {\n\t\t\t\tif (color.rgba.a === 1) {\n\t\t\t\t\treturn `rgb(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b})`;\n\t\t\t\t}\n\n\t\t\t\treturn Color.Format.CSS.formatRGBA(color);\n\t\t\t}\n\n\t\t\texport function formatRGBA(color: Color): string {\n\t\t\t\treturn `rgba(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b}, ${+(color.rgba.a).toFixed(2)})`;\n\t\t\t}\n\n\t\t\texport function formatHSL(color: Color): string {\n\t\t\t\tif (color.hsla.a === 1) {\n\t\t\t\t\treturn `hsl(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%)`;\n\t\t\t\t}\n\n\t\t\t\treturn Color.Format.CSS.formatHSLA(color);\n\t\t\t}\n\n\t\t\texport function formatHSLA(color: Color): string {\n\t\t\t\treturn `hsla(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%, ${color.hsla.a.toFixed(2)})`;\n\t\t\t}\n\n\t\t\tfunction _toTwoDigitHex(n: number): string {\n\t\t\t\tconst r = n.toString(16);\n\t\t\t\treturn r.length !== 2 ? '0' + r : r;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Formats the color as #RRGGBB\n\t\t\t */\n\t\t\texport function formatHex(color: Color): string {\n\t\t\t\treturn `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}`;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Formats the color as #RRGGBBAA\n\t\t\t * If 'compact' is set, colors without transparancy will be printed as #RRGGBB\n\t\t\t */\n\t\t\texport function formatHexA(color: Color, compact = false): string {\n\t\t\t\tif (compact && color.rgba.a === 1) {\n\t\t\t\t\treturn Color.Format.CSS.formatHex(color);\n\t\t\t\t}\n\n\t\t\t\treturn `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}${_toTwoDigitHex(Math.round(color.rgba.a * 255))}`;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * The default format will use HEX if opaque and RGBA otherwise.\n\t\t\t */\n\t\t\texport function format(color: Color): string {\n\t\t\t\tif (color.isOpaque()) {\n\t\t\t\t\treturn Color.Format.CSS.formatHex(color);\n\t\t\t\t}\n\n\t\t\t\treturn Color.Format.CSS.formatRGBA(color);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Converts an Hex color value to a Color.\n\t\t\t * returns r, g, and b are contained in the set [0, 255]\n\t\t\t * @param hex string (#RGB, #RGBA, #RRGGBB or #RRGGBBAA).\n\t\t\t */\n\t\t\texport function parseHex(hex: string): Color | null {\n\t\t\t\tconst length = hex.length;\n\n\t\t\t\tif (length === 0) {\n\t\t\t\t\t// Invalid color\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (hex.charCodeAt(0) !== CharCode.Hash) {\n\t\t\t\t\t// Does not begin with a #\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (length === 7) {\n\t\t\t\t\t// #RRGGBB format\n\t\t\t\t\tconst r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n\t\t\t\t\tconst g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n\t\t\t\t\tconst b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n\t\t\t\t\treturn new Color(new RGBA(r, g, b, 1));\n\t\t\t\t}\n\n\t\t\t\tif (length === 9) {\n\t\t\t\t\t// #RRGGBBAA format\n\t\t\t\t\tconst r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n\t\t\t\t\tconst g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n\t\t\t\t\tconst b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n\t\t\t\t\tconst a = 16 * _parseHexDigit(hex.charCodeAt(7)) + _parseHexDigit(hex.charCodeAt(8));\n\t\t\t\t\treturn new Color(new RGBA(r, g, b, a / 255));\n\t\t\t\t}\n\n\t\t\t\tif (length === 4) {\n\t\t\t\t\t// #RGB format\n\t\t\t\t\tconst r = _parseHexDigit(hex.charCodeAt(1));\n\t\t\t\t\tconst g = _parseHexDigit(hex.charCodeAt(2));\n\t\t\t\t\tconst b = _parseHexDigit(hex.charCodeAt(3));\n\t\t\t\t\treturn new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b));\n\t\t\t\t}\n\n\t\t\t\tif (length === 5) {\n\t\t\t\t\t// #RGBA format\n\t\t\t\t\tconst r = _parseHexDigit(hex.charCodeAt(1));\n\t\t\t\t\tconst g = _parseHexDigit(hex.charCodeAt(2));\n\t\t\t\t\tconst b = _parseHexDigit(hex.charCodeAt(3));\n\t\t\t\t\tconst a = _parseHexDigit(hex.charCodeAt(4));\n\t\t\t\t\treturn new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b, (16 * a + a) / 255));\n\t\t\t\t}\n\n\t\t\t\t// Invalid color\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfunction _parseHexDigit(charCode: CharCode): number {\n\t\t\t\tswitch (charCode) {\n\t\t\t\t\tcase CharCode.Digit0: return 0;\n\t\t\t\t\tcase CharCode.Digit1: return 1;\n\t\t\t\t\tcase CharCode.Digit2: return 2;\n\t\t\t\t\tcase CharCode.Digit3: return 3;\n\t\t\t\t\tcase CharCode.Digit4: return 4;\n\t\t\t\t\tcase CharCode.Digit5: return 5;\n\t\t\t\t\tcase CharCode.Digit6: return 6;\n\t\t\t\t\tcase CharCode.Digit7: return 7;\n\t\t\t\t\tcase CharCode.Digit8: return 8;\n\t\t\t\t\tcase CharCode.Digit9: return 9;\n\t\t\t\t\tcase CharCode.a: return 10;\n\t\t\t\t\tcase CharCode.A: return 10;\n\t\t\t\t\tcase CharCode.b: return 11;\n\t\t\t\t\tcase CharCode.B: return 11;\n\t\t\t\t\tcase CharCode.c: return 12;\n\t\t\t\t\tcase CharCode.C: return 12;\n\t\t\t\t\tcase CharCode.d: return 13;\n\t\t\t\t\tcase CharCode.D: return 13;\n\t\t\t\t\tcase CharCode.e: return 14;\n\t\t\t\t\tcase CharCode.E: return 14;\n\t\t\t\t\tcase CharCode.f: return 15;\n\t\t\t\t\tcase CharCode.F: return 15;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/src/colorMap.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const ansiColorIdentifiers: { colorName: string; colorValue: string }[] = [];\nexport const ansiColorMap: { [key: string]: { index: number } } = {\n\t'terminal.ansiBlack': {\n\t\tindex: 0,\n\t},\n\t'terminal.ansiRed': {\n\t\tindex: 1,\n\t},\n\t'terminal.ansiGreen': {\n\t\tindex: 2,\n\t},\n\t'terminal.ansiYellow': {\n\t\tindex: 3,\n\t},\n\t'terminal.ansiBlue': {\n\t\tindex: 4,\n\t},\n\t'terminal.ansiMagenta': {\n\t\tindex: 5,\n\t},\n\t'terminal.ansiCyan': {\n\t\tindex: 6,\n\t},\n\t'terminal.ansiWhite': {\n\t\tindex: 7,\n\t},\n\t'terminal.ansiBrightBlack': {\n\t\tindex: 8,\n\t},\n\t'terminal.ansiBrightRed': {\n\t\tindex: 9,\n\t},\n\t'terminal.ansiBrightGreen': {\n\t\tindex: 10,\n\t},\n\t'terminal.ansiBrightYellow': {\n\t\tindex: 11,\n\t},\n\t'terminal.ansiBrightBlue': {\n\t\tindex: 12,\n\t},\n\t'terminal.ansiBrightMagenta': {\n\t\tindex: 13,\n\t},\n\t'terminal.ansiBrightCyan': {\n\t\tindex: 14,\n\t},\n\t'terminal.ansiBrightWhite': {\n\t\tindex: 15,\n\t}\n};\n\nfor (const id in ansiColorMap) {\n\tconst entry = ansiColorMap[id];\n\tconst colorName = id.substring(13);\n\tansiColorIdentifiers[entry.index] = { colorName, colorValue: 'var(--vscode-' + id.replace('.', '-') + ')' };\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/src/htmlHelper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const ttPolicy = (typeof window !== 'undefined') ?\n\twindow.trustedTypes?.createPolicy('notebookRenderer', {\n\t\tcreateHTML: value => value,\n\t\tcreateScript: value => value,\n\t}) : undefined;\n"
  },
  {
    "path": "extensions/notebook-renderers/src/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type { ActivationFunction, OutputItem, RendererContext } from 'vscode-notebook-renderer';\nimport { createOutputContent, appendOutput, scrollableClass } from './textHelper';\nimport { HtmlRenderingHook, IDisposable, IRichRenderContext, JavaScriptRenderingHook, OutputWithAppend, RenderOptions } from './rendererTypes';\nimport { ttPolicy } from './htmlHelper';\nimport { formatStackTrace } from './stackTraceHelper';\n\nfunction clearContainer(container: HTMLElement) {\n\twhile (container.firstChild) {\n\t\tcontainer.firstChild.remove();\n\t}\n}\n\nfunction renderImage(outputInfo: OutputItem, element: HTMLElement): IDisposable {\n\tconst blob = new Blob([outputInfo.data()], { type: outputInfo.mime });\n\tconst src = URL.createObjectURL(blob);\n\tconst disposable = {\n\t\tdispose: () => {\n\t\t\tURL.revokeObjectURL(src);\n\t\t}\n\t};\n\n\tif (element.firstChild) {\n\t\tconst display = element.firstChild as HTMLElement;\n\t\tif (display.firstChild && display.firstChild.nodeName === 'IMG' && display.firstChild instanceof HTMLImageElement) {\n\t\t\tdisplay.firstChild.src = src;\n\t\t\treturn disposable;\n\t\t}\n\t}\n\n\tconst image = document.createElement('img');\n\timage.src = src;\n\tconst alt = getAltText(outputInfo);\n\tif (alt) {\n\t\timage.alt = alt;\n\t}\n\timage.setAttribute('data-vscode-context', JSON.stringify({\n\t\twebviewSection: 'image',\n\t\toutputId: outputInfo.id,\n\t\t'preventDefaultContextMenuItems': true\n\t}));\n\tconst display = document.createElement('div');\n\tdisplay.classList.add('display');\n\tdisplay.appendChild(image);\n\telement.appendChild(display);\n\n\treturn disposable;\n}\n\nconst preservedScriptAttributes: (keyof HTMLScriptElement)[] = [\n\t'type', 'src', 'nonce', 'noModule', 'async',\n];\n\nconst domEval = (container: Element) => {\n\tconst arr = Array.from(container.getElementsByTagName('script'));\n\tfor (let n = 0; n < arr.length; n++) {\n\t\tconst node = arr[n];\n\t\tconst scriptTag = document.createElement('script');\n\t\tconst trustedScript = ttPolicy?.createScript(node.innerText) ?? node.innerText;\n\t\tscriptTag.text = trustedScript as string;\n\t\tfor (const key of preservedScriptAttributes) {\n\t\t\tconst val = node[key] || node.getAttribute && node.getAttribute(key);\n\t\t\tif (val) {\n\t\t\t\tscriptTag.setAttribute(key, val as any);\n\t\t\t}\n\t\t}\n\n\t\t// TODO@connor4312: should script with src not be removed?\n\t\tcontainer.appendChild(scriptTag).parentNode!.removeChild(scriptTag);\n\t}\n};\n\nfunction getAltText(outputInfo: OutputItem) {\n\tconst metadata = outputInfo.metadata;\n\tif (typeof metadata === 'object' && metadata && 'vscode_altText' in metadata && typeof metadata.vscode_altText === 'string') {\n\t\treturn metadata.vscode_altText;\n\t}\n\treturn undefined;\n}\n\nfunction fixUpSvgElement(outputInfo: OutputItem, element: HTMLElement) {\n\tif (outputInfo.mime.indexOf('svg') > -1) {\n\t\tconst svgElement = element.querySelector('svg');\n\t\tconst altText = getAltText(outputInfo);\n\t\tif (svgElement && altText) {\n\t\t\tconst title = document.createElement('title');\n\t\t\ttitle.innerText = altText;\n\t\t\tsvgElement.prepend(title);\n\t\t}\n\n\t\tif (svgElement) {\n\t\t\tsvgElement.classList.add('output-image');\n\n\t\t\tsvgElement.setAttribute('data-vscode-context', JSON.stringify({\n\t\t\t\twebviewSection: 'image',\n\t\t\t\toutputId: outputInfo.id,\n\t\t\t\t'preventDefaultContextMenuItems': true\n\t\t\t}));\n\t\t}\n\t}\n}\n\nasync function renderHTML(outputInfo: OutputItem, container: HTMLElement, signal: AbortSignal, hooks: Iterable<HtmlRenderingHook>): Promise<void> {\n\tclearContainer(container);\n\tlet element: HTMLElement = document.createElement('div');\n\tconst htmlContent = outputInfo.text();\n\tconst trustedHtml = ttPolicy?.createHTML(htmlContent) ?? htmlContent;\n\telement.innerHTML = trustedHtml as string;\n\tfixUpSvgElement(outputInfo, element);\n\n\tfor (const hook of hooks) {\n\t\telement = (await hook.postRender(outputInfo, element, signal)) ?? element;\n\t\tif (signal.aborted) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tcontainer.appendChild(element);\n\tdomEval(element);\n}\n\nasync function renderJavascript(outputInfo: OutputItem, container: HTMLElement, signal: AbortSignal, hooks: Iterable<JavaScriptRenderingHook>): Promise<void> {\n\tlet scriptText = outputInfo.text();\n\n\tfor (const hook of hooks) {\n\t\tscriptText = (await hook.preEvaluate(outputInfo, container, scriptText, signal)) ?? scriptText;\n\t\tif (signal.aborted) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst script = document.createElement('script');\n\tscript.type = 'module';\n\tscript.textContent = scriptText;\n\n\tconst element = document.createElement('div');\n\tconst trustedHtml = ttPolicy?.createHTML(script.outerHTML) ?? script.outerHTML;\n\telement.innerHTML = trustedHtml as string;\n\tcontainer.appendChild(element);\n\tdomEval(element);\n}\n\ninterface Event<T> {\n\t(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable;\n}\n\nfunction createDisposableStore(): { push(...disposables: IDisposable[]): void; dispose(): void } {\n\tconst localDisposables: IDisposable[] = [];\n\tconst disposable = {\n\t\tpush: (...disposables: IDisposable[]) => {\n\t\t\tlocalDisposables.push(...disposables);\n\t\t},\n\t\tdispose: () => {\n\t\t\tlocalDisposables.forEach(d => d.dispose());\n\t\t}\n\t};\n\n\treturn disposable;\n}\n\ntype DisposableStore = ReturnType<typeof createDisposableStore>;\n\nfunction renderError(\n\toutputInfo: OutputItem,\n\toutputElement: HTMLElement,\n\tctx: IRichRenderContext,\n\ttrustHtml: boolean\n): IDisposable {\n\tconst disposableStore = createDisposableStore();\n\n\tclearContainer(outputElement);\n\n\ttype ErrorLike = Partial<Error>;\n\n\tlet err: ErrorLike;\n\ttry {\n\t\terr = <ErrorLike>JSON.parse(outputInfo.text());\n\t} catch (e) {\n\t\tconsole.log(e);\n\t\treturn disposableStore;\n\t}\n\n\tconst headerMessage = err.name && err.message ? `${err.name}: ${err.message}` : err.name || err.message;\n\n\tif (err.stack) {\n\t\tconst minimalError = ctx.settings.minimalError && !!headerMessage?.length;\n\t\toutputElement.classList.add('traceback');\n\n\t\tconst { formattedStack, errorLocation } = formatStackTrace(err.stack);\n\n\t\tconst outputScrolling = !minimalError && scrollingEnabled(outputInfo, ctx.settings);\n\t\tconst lineLimit = minimalError ? 1000 : ctx.settings.lineLimit;\n\t\tconst outputOptions = { linesLimit: lineLimit, scrollable: outputScrolling, trustHtml, linkifyFilePaths: false };\n\n\t\tconst content = createOutputContent(outputInfo.id, formattedStack, outputOptions);\n\t\tconst stackTraceElement = document.createElement('div');\n\t\tstackTraceElement.appendChild(content);\n\t\toutputElement.classList.toggle('word-wrap', ctx.settings.outputWordWrap);\n\t\tdisposableStore.push(ctx.onDidChangeSettings(e => {\n\t\t\toutputElement.classList.toggle('word-wrap', e.outputWordWrap);\n\t\t}));\n\n\t\tif (minimalError) {\n\t\t\tcreateMinimalError(errorLocation, headerMessage, stackTraceElement, outputElement);\n\t\t} else {\n\t\t\tstackTraceElement.classList.toggle('scrollable', outputScrolling);\n\t\t\toutputElement.appendChild(stackTraceElement);\n\t\t\tinitializeScroll(stackTraceElement, disposableStore);\n\t\t}\n\t} else {\n\t\tconst header = document.createElement('div');\n\t\tif (headerMessage) {\n\t\t\theader.innerText = headerMessage;\n\t\t\toutputElement.appendChild(header);\n\t\t}\n\t}\n\n\toutputElement.classList.add('error');\n\treturn disposableStore;\n}\n\nfunction createMinimalError(errorLocation: string | undefined, headerMessage: string, stackTrace: HTMLDivElement, outputElement: HTMLElement) {\n\tconst outputDiv = document.createElement('div');\n\tconst headerSection = document.createElement('div');\n\theaderSection.classList.add('error-output-header');\n\n\tif (errorLocation && errorLocation.indexOf('<a') === 0) {\n\t\theaderSection.innerHTML = errorLocation;\n\t}\n\tconst header = document.createElement('span');\n\theader.innerText = headerMessage;\n\theaderSection.appendChild(header);\n\toutputDiv.appendChild(headerSection);\n\n\tfunction addButton(linkElement: HTMLElement) {\n\t\tconst button = document.createElement('li');\n\t\tbutton.appendChild(linkElement);\n\t\t// the :hover css selector doesn't work in the webview,\n\t\t// so we need to add the hover class manually\n\t\tbutton.onmouseover = function () {\n\t\t\tbutton.classList.add('hover');\n\t\t};\n\t\tbutton.onmouseout = function () {\n\t\t\tbutton.classList.remove('hover');\n\t\t};\n\t\treturn button;\n\t}\n\n\tconst buttons = document.createElement('ul');\n\tbuttons.classList.add('error-output-actions');\n\toutputDiv.appendChild(buttons);\n\n\tconst toggleStackLink = document.createElement('a');\n\ttoggleStackLink.innerText = 'Show Details';\n\ttoggleStackLink.href = '#!';\n\tbuttons.appendChild(addButton(toggleStackLink));\n\n\ttoggleStackLink.onclick = (e) => {\n\t\te.preventDefault();\n\t\tconst hidden = stackTrace.style.display === 'none';\n\t\tstackTrace.style.display = hidden ? '' : 'none';\n\t\ttoggleStackLink.innerText = hidden ? 'Hide Details' : 'Show Details';\n\t};\n\n\toutputDiv.appendChild(stackTrace);\n\tstackTrace.style.display = 'none';\n\toutputElement.appendChild(outputDiv);\n}\n\nfunction getPreviousMatchingContentGroup(outputElement: HTMLElement) {\n\tconst outputContainer = outputElement.parentElement;\n\tlet match: HTMLElement | undefined = undefined;\n\n\tlet previous = outputContainer?.previousSibling;\n\twhile (previous) {\n\t\tconst outputElement = (previous.firstChild as HTMLElement | null);\n\t\tif (!outputElement || !outputElement.classList.contains('output-stream')) {\n\t\t\tbreak;\n\t\t}\n\n\t\tmatch = outputElement.firstChild as HTMLElement;\n\t\tprevious = previous?.previousSibling;\n\t}\n\n\treturn match;\n}\n\nfunction onScrollHandler(e: globalThis.Event) {\n\tconst target = e.target as HTMLElement;\n\tif (target.scrollTop === 0) {\n\t\ttarget.classList.remove('more-above');\n\t} else {\n\t\ttarget.classList.add('more-above');\n\t}\n}\n\nfunction onKeypressHandler(e: KeyboardEvent) {\n\tif (e.ctrlKey || e.shiftKey) {\n\t\treturn;\n\t}\n\tif (e.code === 'ArrowDown' || e.code === 'ArrowUp' ||\n\t\te.code === 'End' || e.code === 'Home' ||\n\t\te.code === 'PageUp' || e.code === 'PageDown') {\n\t\t// These should change the scroll position, not adjust the selected cell in the notebook\n\t\te.stopPropagation();\n\t}\n}\n\n// if there is a scrollable output, it will be scrolled to the given value if provided or the bottom of the element\nfunction initializeScroll(scrollableElement: HTMLElement, disposables: DisposableStore, scrollTop?: number) {\n\tif (scrollableElement.classList.contains(scrollableClass)) {\n\t\tconst scrollbarVisible = scrollableElement.scrollHeight > scrollableElement.clientHeight;\n\t\tscrollableElement.classList.toggle('scrollbar-visible', scrollbarVisible);\n\t\tscrollableElement.scrollTop = scrollTop !== undefined ? scrollTop : scrollableElement.scrollHeight;\n\t\tif (scrollbarVisible) {\n\t\t\tscrollableElement.addEventListener('scroll', onScrollHandler);\n\t\t\tdisposables.push({ dispose: () => scrollableElement.removeEventListener('scroll', onScrollHandler) });\n\t\t\tscrollableElement.addEventListener('keydown', onKeypressHandler);\n\t\t\tdisposables.push({ dispose: () => scrollableElement.removeEventListener('keydown', onKeypressHandler) });\n\t\t}\n\t}\n}\n\n// Find the scrollTop of the existing scrollable output, return undefined if at the bottom or element doesn't exist\nfunction findScrolledHeight(container: HTMLElement): number | undefined {\n\tconst scrollableElement = container.querySelector('.' + scrollableClass);\n\tif (scrollableElement && scrollableElement.scrollHeight - scrollableElement.scrollTop - scrollableElement.clientHeight > 2) {\n\t\t// not scrolled to the bottom\n\t\treturn scrollableElement.scrollTop;\n\t}\n\treturn undefined;\n}\n\nfunction scrollingEnabled(output: OutputItem, options: RenderOptions) {\n\tconst metadata = output.metadata;\n\treturn (typeof metadata === 'object' && metadata\n\t\t&& 'scrollable' in metadata && typeof metadata.scrollable === 'boolean') ?\n\t\tmetadata.scrollable : options.outputScrolling;\n}\n\n//  div.cell_container\n//    div.output_container\n//      div.output.output-stream\t\t<-- outputElement parameter\n//        div.scrollable? tabindex=\"0\" \t<-- contentParent\n//          div output-item-id=\"{guid}\"\t<-- content from outputItem parameter\nfunction renderStream(outputInfo: OutputWithAppend, outputElement: HTMLElement, error: boolean, ctx: IRichRenderContext): IDisposable {\n\tconst disposableStore = createDisposableStore();\n\tconst outputScrolling = scrollingEnabled(outputInfo, ctx.settings);\n\tconst outputOptions = { linesLimit: ctx.settings.lineLimit, scrollable: outputScrolling, trustHtml: false, error, linkifyFilePaths: ctx.settings.linkifyFilePaths };\n\n\toutputElement.classList.add('output-stream');\n\n\tconst scrollTop = outputScrolling ? findScrolledHeight(outputElement) : undefined;\n\n\tconst previousOutputParent = getPreviousMatchingContentGroup(outputElement);\n\t// If the previous output item for the same cell was also a stream, append this output to the previous\n\tif (previousOutputParent) {\n\t\tconst existingContent = previousOutputParent.querySelector(`[output-item-id=\"${outputInfo.id}\"]`) as HTMLElement | null;\n\t\tif (existingContent) {\n\t\t\tappendOutput(outputInfo, existingContent, outputOptions);\n\t\t} else {\n\t\t\tconst newContent = createOutputContent(outputInfo.id, outputInfo.text(), outputOptions);\n\t\t\tpreviousOutputParent.appendChild(newContent);\n\t\t}\n\t\tpreviousOutputParent.classList.toggle('scrollbar-visible', previousOutputParent.scrollHeight > previousOutputParent.clientHeight);\n\t\tpreviousOutputParent.scrollTop = scrollTop !== undefined ? scrollTop : previousOutputParent.scrollHeight;\n\t} else {\n\t\tconst existingContent = outputElement.querySelector(`[output-item-id=\"${outputInfo.id}\"]`) as HTMLElement | null;\n\t\tlet contentParent = existingContent?.parentElement;\n\t\tif (existingContent && contentParent) {\n\t\t\tappendOutput(outputInfo, existingContent, outputOptions);\n\t\t} else {\n\t\t\tconst newContent = createOutputContent(outputInfo.id, outputInfo.text(), outputOptions);\n\t\t\tcontentParent = document.createElement('div');\n\t\t\tcontentParent.appendChild(newContent);\n\t\t\twhile (outputElement.firstChild) {\n\t\t\t\toutputElement.firstChild.remove();\n\t\t\t}\n\t\t\toutputElement.appendChild(contentParent);\n\t\t}\n\n\t\tcontentParent.classList.toggle('scrollable', outputScrolling);\n\t\toutputElement.classList.toggle('word-wrap', ctx.settings.outputWordWrap);\n\t\tdisposableStore.push(ctx.onDidChangeSettings(e => {\n\t\t\toutputElement.classList.toggle('word-wrap', e.outputWordWrap);\n\t\t}));\n\n\t\tinitializeScroll(contentParent, disposableStore, scrollTop);\n\t}\n\n\treturn disposableStore;\n}\n\nfunction renderText(outputInfo: OutputItem, outputElement: HTMLElement, ctx: IRichRenderContext): IDisposable {\n\tconst disposableStore = createDisposableStore();\n\tclearContainer(outputElement);\n\n\tconst text = outputInfo.text();\n\tconst outputScrolling = scrollingEnabled(outputInfo, ctx.settings);\n\tconst outputOptions = { linesLimit: ctx.settings.lineLimit, scrollable: outputScrolling, trustHtml: false, linkifyFilePaths: ctx.settings.linkifyFilePaths };\n\tconst content = createOutputContent(outputInfo.id, text, outputOptions);\n\tcontent.classList.add('output-plaintext');\n\tcontent.classList.toggle('word-wrap', ctx.settings.outputWordWrap);\n\tdisposableStore.push(ctx.onDidChangeSettings(e => {\n\t\tcontent.classList.toggle('word-wrap', e.outputWordWrap);\n\t}));\n\n\tcontent.classList.toggle('scrollable', outputScrolling);\n\toutputElement.appendChild(content);\n\tinitializeScroll(content, disposableStore);\n\n\treturn disposableStore;\n}\n\nexport const activate: ActivationFunction<void> = (ctx) => {\n\tconst disposables = new Map<string, IDisposable>();\n\tconst htmlHooks = new Set<HtmlRenderingHook>();\n\tconst jsHooks = new Set<JavaScriptRenderingHook>();\n\n\tconst latestContext = ctx as (RendererContext<void> & { readonly settings: RenderOptions; readonly onDidChangeSettings: Event<RenderOptions> });\n\n\tconst style = document.createElement('style');\n\tstyle.textContent = `\n\t#container div.output.remove-padding {\n\t\tpadding-left: 0;\n\t\tpadding-right: 0;\n\t}\n\t.output-plaintext,\n\t.output-stream,\n\t.traceback {\n\t\tdisplay: inline-block;\n\t\twidth: 100%;\n\t\tline-height: var(--notebook-cell-output-line-height);\n\t\tfont-family: var(--notebook-cell-output-font-family);\n\t\tfont-size: var(--notebook-cell-output-font-size);\n\t\tuser-select: text;\n\t\t-webkit-user-select: text;\n\t\t-ms-user-select: text;\n\t\tcursor: auto;\n\t\tword-wrap: break-word;\n\t\t/* text/stream output container should scroll but preserve newline character */\n\t\twhite-space: pre;\n\t}\n\t/* When wordwrap turned on, force it to pre-wrap */\n\t#container div.output_container .word-wrap {\n\t\twhite-space: pre-wrap;\n\t}\n\t#container div.output>div {\n\t\tpadding-left: var(--notebook-output-node-left-padding);\n\t\tpadding-right: var(--notebook-output-node-padding);\n\t\tbox-sizing: border-box;\n\t\tborder-width: 1px;\n\t\tborder-style: solid;\n\t\tborder-color: transparent;\n\t}\n\t#container div.output>div:focus {\n\t\toutline: 0;\n\t\tborder-color: var(--theme-input-focus-border-color);\n\t}\n\t#container div.output .scrollable {\n\t\toverflow-y: auto;\n\t\tmax-height: var(--notebook-cell-output-max-height);\n\t}\n\t#container div.output .scrollable.scrollbar-visible {\n\t\tborder-color: var(--vscode-editorWidget-border);\n\t}\n\t#container div.output .scrollable.scrollbar-visible:focus {\n\t\tborder-color: var(--theme-input-focus-border-color);\n\t}\n\t#container div.truncation-message {\n\t\tfont-style: italic;\n\t\tfont-family: var(--theme-font-family);\n\t\tpadding-top: 4px;\n\t}\n\t#container div.output .scrollable div {\n\t\tcursor: text;\n\t}\n\t#container div.output .scrollable div a {\n\t\tcursor: pointer;\n\t}\n\t#container div.output .scrollable.more-above {\n\t\tbox-shadow: var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset\n\t}\n\t.output-plaintext .code-bold,\n\t.output-stream .code-bold,\n\t.traceback .code-bold {\n\t\tfont-weight: bold;\n\t}\n\t.output-plaintext .code-italic,\n\t.output-stream .code-italic,\n\t.traceback .code-italic {\n\t\tfont-style: italic;\n\t}\n\t.output-plaintext .code-strike-through,\n\t.output-stream .code-strike-through,\n\t.traceback .code-strike-through {\n\t\ttext-decoration: line-through;\n\t}\n\t.output-plaintext .code-underline,\n\t.output-stream .code-underline,\n\t.traceback .code-underline {\n\t\ttext-decoration: underline;\n\t}\n\t#container ul.error-output-actions {\n\t\tmargin: 0px;\n\t\tpadding: 6px 0px 0px 6px;\n\t\tpadding-inline-start: 0px;\n\t}\n\t#container .error-output-actions li {\n\t\tpadding: 0px 4px 0px 4px;\n\t\tborder-radius: 5px;\n\t\theight: 20px;\n\t\tdisplay: inline-flex;\n\t\tcursor: pointer;\n\t\tborder: solid 1px var(--vscode-notebook-cellToolbarSeparator);\n\t}\n\t#container .error-output-actions li.hover {\n\t\tbackground-color: var(--vscode-toolbar-hoverBackground);\n\t}\n\t#container .error-output-actions li:focus-within {\n\t\tborder-color: var(--theme-input-focus-border-color);\n\t}\n\t#container .error-output-actions a:focus {\n\t\toutline: 0;\n\t}\n\t#container .error-output-actions li a {\n\t\tcolor: var(--vscode-foreground);\n\t\ttext-decoration: none;\n\t}\n\t#container .error-output-header a {\n\t\tpadding-right: 12px;\n\t}\n\t`;\n\tdocument.body.appendChild(style);\n\n\treturn {\n\t\trenderOutputItem: async (outputInfo, element, signal?: AbortSignal) => {\n\t\t\telement.classList.add('remove-padding');\n\t\t\tswitch (outputInfo.mime) {\n\t\t\t\tcase 'text/html':\n\t\t\t\tcase 'image/svg+xml': {\n\t\t\t\t\tif (!ctx.workspace.isTrusted) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait renderHTML(outputInfo, element, signal!, htmlHooks);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'application/javascript': {\n\t\t\t\t\tif (!ctx.workspace.isTrusted) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\trenderJavascript(outputInfo, element, signal!, jsHooks);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'image/gif':\n\t\t\t\tcase 'image/png':\n\t\t\t\tcase 'image/jpeg':\n\t\t\t\tcase 'image/git':\n\t\t\t\t\t{\n\t\t\t\t\t\tdisposables.get(outputInfo.id)?.dispose();\n\t\t\t\t\t\tconst disposable = renderImage(outputInfo, element);\n\t\t\t\t\t\tdisposables.set(outputInfo.id, disposable);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'application/vnd.code.notebook.error':\n\t\t\t\t\t{\n\t\t\t\t\t\tdisposables.get(outputInfo.id)?.dispose();\n\t\t\t\t\t\tconst disposable = renderError(outputInfo, element, latestContext, ctx.workspace.isTrusted);\n\t\t\t\t\t\tdisposables.set(outputInfo.id, disposable);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'application/vnd.code.notebook.stdout':\n\t\t\t\tcase 'application/x.notebook.stdout':\n\t\t\t\tcase 'application/x.notebook.stream':\n\t\t\t\t\t{\n\t\t\t\t\t\tdisposables.get(outputInfo.id)?.dispose();\n\t\t\t\t\t\tconst disposable = renderStream(outputInfo, element, false, latestContext);\n\t\t\t\t\t\tdisposables.set(outputInfo.id, disposable);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'application/vnd.code.notebook.stderr':\n\t\t\t\tcase 'application/x.notebook.stderr':\n\t\t\t\t\t{\n\t\t\t\t\t\tdisposables.get(outputInfo.id)?.dispose();\n\t\t\t\t\t\tconst disposable = renderStream(outputInfo, element, true, latestContext);\n\t\t\t\t\t\tdisposables.set(outputInfo.id, disposable);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'text/plain':\n\t\t\t\t\t{\n\t\t\t\t\t\tdisposables.get(outputInfo.id)?.dispose();\n\t\t\t\t\t\tconst disposable = renderText(outputInfo, element, latestContext);\n\t\t\t\t\t\tdisposables.set(outputInfo.id, disposable);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (outputInfo.mime.indexOf('text/') > -1) {\n\t\t\t\t\t\tdisposables.get(outputInfo.id)?.dispose();\n\t\t\t\t\t\tconst disposable = renderText(outputInfo, element, latestContext);\n\t\t\t\t\t\tdisposables.set(outputInfo.id, disposable);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (element.querySelector('div')) {\n\t\t\t\telement.querySelector('div')!.tabIndex = 0;\n\t\t\t}\n\n\t\t},\n\t\tdisposeOutputItem: (id: string | undefined) => {\n\t\t\tif (id) {\n\t\t\t\tdisposables.get(id)?.dispose();\n\t\t\t} else {\n\t\t\t\tdisposables.forEach(d => d.dispose());\n\t\t\t}\n\t\t},\n\t\texperimental_registerHtmlRenderingHook: (hook: HtmlRenderingHook): IDisposable => {\n\t\t\thtmlHooks.add(hook);\n\t\t\treturn {\n\t\t\t\tdispose: () => {\n\t\t\t\t\thtmlHooks.delete(hook);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\texperimental_registerJavaScriptRenderingHook: (hook: JavaScriptRenderingHook): IDisposable => {\n\t\t\tjsHooks.add(hook);\n\t\t\treturn {\n\t\t\t\tdispose: () => {\n\t\t\t\t\tjsHooks.delete(hook);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "extensions/notebook-renderers/src/linkify.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ttPolicy } from './htmlHelper';\n\nconst CONTROL_CODES = '\\\\u0000-\\\\u0020\\\\u007f-\\\\u009f';\nconst WEB_LINK_REGEX = new RegExp('(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\\\/\\\\/|data:|www\\\\.)[^\\\\s' + CONTROL_CODES + '\"]{2,}[^\\\\s' + CONTROL_CODES + '\"\\')}\\\\],:;.!?]', 'ug');\n\nconst WIN_ABSOLUTE_PATH = /(?<=^|\\s)(?:[a-zA-Z]:(?:(?:\\\\|\\/)[\\w\\.-]*)+)/;\nconst WIN_RELATIVE_PATH = /(?<=^|\\s)(?:(?:\\~|\\.)(?:(?:\\\\|\\/)[\\w\\.-]*)+)/;\nconst WIN_PATH = new RegExp(`(${WIN_ABSOLUTE_PATH.source}|${WIN_RELATIVE_PATH.source})`);\nconst POSIX_PATH = /(?<=^|\\s)((?:\\~|\\.)?(?:\\/[\\w\\.-]*)+)/;\nconst LINE_COLUMN = /(?:\\:([\\d]+))?(?:\\:([\\d]+))?/;\nconst isWindows = (typeof navigator !== 'undefined') ? navigator.userAgent && navigator.userAgent.indexOf('Windows') >= 0 : false;\nconst PATH_LINK_REGEX = new RegExp(`${isWindows ? WIN_PATH.source : POSIX_PATH.source}${LINE_COLUMN.source}`, 'g');\nconst HTML_LINK_REGEX = /<a\\s+(?:[^>]*?\\s+)?href=([\"'])(.*?)\\1[^>]*?>.*?<\\/a>/gi;\n\nconst MAX_LENGTH = 2000;\n\ntype LinkKind = 'web' | 'path' | 'html' | 'text';\ntype LinkPart = {\n\tkind: LinkKind;\n\tvalue: string;\n\tcaptures: string[];\n};\n\nexport type LinkOptions = {\n\ttrustHtml?: boolean;\n\tlinkifyFilePaths: boolean;\n};\n\nexport class LinkDetector {\n\n\t// used by unit tests\n\tstatic injectedHtmlCreator: (value: string) => string;\n\n\tprivate shouldGenerateHtml(trustHtml: boolean) {\n\t\treturn trustHtml && (!!LinkDetector.injectedHtmlCreator || !!ttPolicy);\n\t}\n\n\tprivate createHtml(value: string) {\n\t\tif (LinkDetector.injectedHtmlCreator) {\n\t\t\treturn LinkDetector.injectedHtmlCreator(value);\n\t\t}\n\t\telse {\n\t\t\treturn ttPolicy?.createHTML(value).toString();\n\t\t}\n\t}\n\n\t/**\n\t * Matches and handles web urls, absolute and relative file links in the string provided.\n\t * Returns <span/> element that wraps the processed string, where matched links are replaced by <a/>.\n\t * 'onclick' event is attached to all anchored links that opens them in the editor.\n\t * When splitLines is true, each line of the text, even if it contains no links, is wrapped in a <span>\n\t * and added as a child of the returned <span>.\n\t */\n\tlinkify(text: string, options: LinkOptions, splitLines?: boolean): HTMLElement {\n\t\tif (splitLines) {\n\t\t\tconst lines = text.split('\\n');\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tlines[i] = lines[i] + '\\n';\n\t\t\t}\n\t\t\tif (!lines[lines.length - 1]) {\n\t\t\t\t// Remove the last element ('') that split added.\n\t\t\t\tlines.pop();\n\t\t\t}\n\t\t\tconst elements = lines.map(line => this.linkify(line, options, false));\n\t\t\tif (elements.length === 1) {\n\t\t\t\t// Do not wrap single line with extra span.\n\t\t\t\treturn elements[0];\n\t\t\t}\n\t\t\tconst container = document.createElement('span');\n\t\t\telements.forEach(e => container.appendChild(e));\n\t\t\treturn container;\n\t\t}\n\n\t\tconst container = document.createElement('span');\n\t\tfor (const part of this.detectLinks(text, !!options.trustHtml, options.linkifyFilePaths)) {\n\t\t\ttry {\n\t\t\t\tlet span: HTMLSpanElement | null = null;\n\t\t\t\tswitch (part.kind) {\n\t\t\t\t\tcase 'text':\n\t\t\t\t\t\tcontainer.appendChild(document.createTextNode(part.value));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'web':\n\t\t\t\t\tcase 'path':\n\t\t\t\t\t\tcontainer.appendChild(this.createWebLink(part.value));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'html':\n\t\t\t\t\t\tspan = document.createElement('span');\n\t\t\t\t\t\tspan.innerHTML = this.createHtml(part.value)!;\n\t\t\t\t\t\tcontainer.appendChild(span);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tcontainer.appendChild(document.createTextNode(part.value));\n\t\t\t}\n\t\t}\n\t\treturn container;\n\t}\n\n\tprivate createWebLink(url: string): Node {\n\t\tconst link = this.createLink(url);\n\t\tlink.href = url;\n\t\treturn link;\n\t}\n\n\t// private createPathLink(text: string, path: string, lineNumber: number, columnNumber: number, workspaceFolder: string | undefined): Node {\n\t// \tif (path[0] === '/' && path[1] === '/') {\n\t// \t\t// Most likely a url part which did not match, for example ftp://path.\n\t// \t\treturn document.createTextNode(text);\n\t// \t}\n\n\t// \tconst options = { selection: { startLineNumber: lineNumber, startColumn: columnNumber } };\n\t// \tif (path[0] === '.') {\n\t// \t\tif (!workspaceFolder) {\n\t// \t\t\treturn document.createTextNode(text);\n\t// \t\t}\n\t// \t\tconst uri = workspaceFolder.toResource(path);\n\t// \t\tconst link = this.createLink(text);\n\t// \t\tthis.decorateLink(link, uri, (preserveFocus: boolean) => this.editorService.openEditor({ resource: uri, options: { ...options, preserveFocus } }));\n\t// \t\treturn link;\n\t// \t}\n\n\t// \tif (path[0] === '~') {\n\t// \t\tconst userHome = this.pathService.resolvedUserHome;\n\t// \t\tif (userHome) {\n\t// \t\t\tpath = osPath.join(userHome.fsPath, path.substring(1));\n\t// \t\t}\n\t// \t}\n\n\t// \tconst link = this.createLink(text);\n\t// \tlink.tabIndex = 0;\n\t// \tconst uri = URI.file(osPath.normalize(path));\n\t// \tthis.fileService.resolve(uri).then(stat => {\n\t// \t\tif (stat.isDirectory) {\n\t// \t\t\treturn;\n\t// \t\t}\n\t// \t\tthis.decorateLink(link, uri, (preserveFocus: boolean) => this.editorService.openEditor({ resource: uri, options: { ...options, preserveFocus } }));\n\t// \t}).catch(() => {\n\t// \t\t// If the uri can not be resolved we should not spam the console with error, remain quite #86587\n\t// \t});\n\t// \treturn link;\n\t// }\n\n\tprivate createLink(text: string): HTMLAnchorElement {\n\t\tconst link = document.createElement('a');\n\t\tlink.textContent = text;\n\t\treturn link;\n\t}\n\n\tprivate detectLinks(text: string, trustHtml: boolean, detectFilepaths: boolean): LinkPart[] {\n\t\tif (text.length > MAX_LENGTH) {\n\t\t\treturn [{ kind: 'text', value: text, captures: [] }];\n\t\t}\n\n\t\tconst regexes: RegExp[] = [];\n\t\tconst kinds: LinkKind[] = [];\n\t\tconst result: LinkPart[] = [];\n\n\t\tif (this.shouldGenerateHtml(trustHtml)) {\n\t\t\tregexes.push(HTML_LINK_REGEX);\n\t\t\tkinds.push('html');\n\t\t}\n\t\tregexes.push(WEB_LINK_REGEX);\n\t\tkinds.push('web');\n\t\tif (detectFilepaths) {\n\t\t\tregexes.push(PATH_LINK_REGEX);\n\t\t\tkinds.push('path');\n\t\t}\n\n\n\t\tconst splitOne = (text: string, regexIndex: number) => {\n\t\t\tif (regexIndex >= regexes.length) {\n\t\t\t\tresult.push({ value: text, kind: 'text', captures: [] });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst regex = regexes[regexIndex];\n\t\t\tlet currentIndex = 0;\n\t\t\tlet match;\n\t\t\tregex.lastIndex = 0;\n\t\t\twhile ((match = regex.exec(text)) !== null) {\n\t\t\t\tconst stringBeforeMatch = text.substring(currentIndex, match.index);\n\t\t\t\tif (stringBeforeMatch) {\n\t\t\t\t\tsplitOne(stringBeforeMatch, regexIndex + 1);\n\t\t\t\t}\n\t\t\t\tconst value = match[0];\n\t\t\t\tresult.push({\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tkind: kinds[regexIndex],\n\t\t\t\t\tcaptures: match.slice(1)\n\t\t\t\t});\n\t\t\t\tcurrentIndex = match.index + value.length;\n\t\t\t}\n\t\t\tconst stringAfterMatches = text.substring(currentIndex);\n\t\t\tif (stringAfterMatches) {\n\t\t\t\tsplitOne(stringAfterMatches, regexIndex + 1);\n\t\t\t}\n\t\t};\n\n\t\tsplitOne(text, 0);\n\t\treturn result;\n\t}\n}\n\nconst linkDetector = new LinkDetector();\nexport function linkify(text: string, linkOptions: LinkOptions, splitLines?: boolean) {\n\treturn linkDetector.linkify(text, linkOptions, splitLines);\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/src/rendererTypes.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { OutputItem, RendererContext } from 'vscode-notebook-renderer';\nimport { Event } from 'vscode';\n\nexport interface IDisposable {\n\tdispose(): void;\n}\n\nexport interface HtmlRenderingHook {\n\t/**\n\t * Invoked after the output item has been rendered but before it has been appended to the document.\n\t *\n\t * @return A new `HTMLElement` or `undefined` to continue using the provided element.\n\t */\n\tpostRender(outputItem: OutputItem, element: HTMLElement, signal: AbortSignal): HTMLElement | undefined | Promise<HTMLElement | undefined>;\n}\n\nexport interface JavaScriptRenderingHook {\n\t/**\n\t * Invoked before the script is evaluated.\n\t *\n\t * @return A new string of JavaScript or `undefined` to continue using the provided string.\n\t */\n\tpreEvaluate(outputItem: OutputItem, element: HTMLElement, script: string, signal: AbortSignal): string | undefined | Promise<string | undefined>;\n}\n\nexport interface RenderOptions {\n\treadonly lineLimit: number;\n\treadonly outputScrolling: boolean;\n\treadonly outputWordWrap: boolean;\n\treadonly linkifyFilePaths: boolean;\n\treadonly minimalError: boolean;\n}\n\nexport type IRichRenderContext = RendererContext<void> & { readonly settings: RenderOptions; readonly onDidChangeSettings: Event<RenderOptions> };\n\nexport type OutputElementOptions = {\n\tlinesLimit: number;\n\tscrollable?: boolean;\n\terror?: boolean;\n\ttrustHtml?: boolean;\n\tlinkifyFilePaths: boolean;\n};\n\nexport interface OutputWithAppend extends OutputItem {\n\tappendedText?(): string | undefined;\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/src/stackTraceHelper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function formatStackTrace(stack: string): { formattedStack: string; errorLocation?: string } {\n\tlet cleaned: string;\n\t// Ansi colors are described here:\n\t// https://en.wikipedia.org/wiki/ANSI_escape_code under the SGR section\n\n\t// Remove background colors. The ones from IPython don't work well with\n\t// themes 40-49 sets background color\n\tcleaned = stack.replace(/\\u001b\\[4\\dm/g, '');\n\n\t// Also remove specific foreground colors (38 is the ascii code for picking one) (they don't translate either)\n\t// Turn them into default foreground\n\tcleaned = cleaned.replace(/\\u001b\\[38;.*?\\d+m/g, '\\u001b[39m');\n\n\t// Turn all foreground colors after the --> to default foreground\n\tcleaned = cleaned.replace(/(;32m[ ->]*?)(\\d+)(.*)\\n/g, (_s, prefix, num, suffix) => {\n\t\tsuffix = suffix.replace(/\\u001b\\[3\\d+m/g, '\\u001b[39m');\n\t\treturn `${prefix}${num}${suffix}\\n`;\n\t});\n\n\tif (isIpythonStackTrace(cleaned)) {\n\t\treturn linkifyStack(cleaned);\n\t}\n\n\treturn { formattedStack: cleaned };\n}\n\nconst formatSequence = /\\u001b\\[.+?m/g;\nconst fileRegex = /File\\s+(?:\\u001b\\[.+?m)?(.+):(\\d+)/;\nconst lineNumberRegex = /^((?:\\u001b\\[.+?m)?[ \\->]+?)(\\d+)(?:\\u001b\\[0m)?( .*)/;\nconst cellRegex = /(?<prefix>Cell\\s+(?:\\u001b\\[.+?m)?In\\s*\\[(?<executionCount>\\d+)\\],\\s*)(?<lineLabel>line (?<lineNumber>\\d+)).*/;\n// older versions of IPython ~8.3.0\nconst inputRegex = /(?<prefix>Input\\s+?(?:\\u001b\\[.+?m)(?<cellLabel>In\\s*\\[(?<executionCount>\\d+)\\]))(?<postfix>.*)/;\n\nfunction isIpythonStackTrace(stack: string) {\n\treturn cellRegex.test(stack) || inputRegex.test(stack) || fileRegex.test(stack);\n}\n\nfunction stripFormatting(text: string) {\n\treturn text.replace(formatSequence, '').trim();\n}\n\ntype cellLocation = { kind: 'cell'; path: string };\ntype fileLocation = { kind: 'file'; path: string };\n\ntype location = cellLocation | fileLocation;\n\nfunction linkifyStack(stack: string): { formattedStack: string; errorLocation?: string } {\n\tconst lines = stack.split('\\n');\n\n\tlet fileOrCell: location | undefined;\n\tlet locationLink = '';\n\n\tfor (const i in lines) {\n\n\t\tconst original = lines[i];\n\t\tif (fileRegex.test(original)) {\n\t\t\tconst fileMatch = lines[i].match(fileRegex);\n\t\t\tfileOrCell = { kind: 'file', path: stripFormatting(fileMatch![1]) };\n\n\t\t\tcontinue;\n\t\t} else if (cellRegex.test(original)) {\n\t\t\tfileOrCell = {\n\t\t\t\tkind: 'cell',\n\t\t\t\tpath: stripFormatting(original.replace(cellRegex, 'vscode-notebook-cell:?execution_count=$<executionCount>'))\n\t\t\t};\n\t\t\tconst link = original.replace(cellRegex, `<a href=\\'${fileOrCell.path}&line=$<lineNumber>\\'>line $<lineNumber></a>`);\n\t\t\tlines[i] = original.replace(cellRegex, `$<prefix>${link}`);\n\t\t\tlocationLink = locationLink || link;\n\n\t\t\tcontinue;\n\t\t} else if (inputRegex.test(original)) {\n\t\t\tfileOrCell = {\n\t\t\t\tkind: 'cell',\n\t\t\t\tpath: stripFormatting(original.replace(inputRegex, 'vscode-notebook-cell:?execution_count=$<executionCount>'))\n\t\t\t};\n\t\t\tconst link = original.replace(inputRegex, `<a href=\\'${fileOrCell.path}\\'>$<cellLabel></a>`);\n\t\t\tlines[i] = original.replace(inputRegex, `Input ${link}$<postfix>`);\n\n\t\t\tcontinue;\n\t\t} else if (!fileOrCell || original.trim() === '') {\n\t\t\t// we don't have a location, so don't linkify anything\n\t\t\tfileOrCell = undefined;\n\n\t\t\tcontinue;\n\t\t} else if (lineNumberRegex.test(original)) {\n\t\t\tlines[i] = original.replace(lineNumberRegex, (_s, prefix, num, suffix) => {\n\t\t\t\treturn fileOrCell?.kind === 'file' ?\n\t\t\t\t\t`${prefix}<a href='${fileOrCell?.path}:${num}'>${num}</a>${suffix}` :\n\t\t\t\t\t`${prefix}<a href='${fileOrCell?.path}&line=${num}'>${num}</a>${suffix}`;\n\t\t\t});\n\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\tconst errorLocation = locationLink;\n\treturn { formattedStack: lines.join('\\n'), errorLocation };\n}\n"
  },
  {
    "path": "extensions/notebook-renderers/src/test/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport * as testRunner from '../../../../test/integration/electron/testrunner';\n\nconst options: import('mocha').MochaOptions = {\n\tui: 'tdd',\n\tcolor: true,\n\ttimeout: 60000\n};\n\n// These integration tests is being run in multiple environments (electron, web, remote)\n// so we need to set the suite name based on the environment as the suite name is used\n// for the test results file name\nlet suite = '';\nif (process.env.VSCODE_BROWSER) {\n\tsuite = `${process.env.VSCODE_BROWSER} Browser Integration notebook output renderer Tests`;\n} else if (process.env.REMOTE_VSCODE) {\n\tsuite = 'Remote Integration notebook output renderer Tests';\n} else {\n\tsuite = 'Integration notebook output renderer Tests';\n}\n\nif (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {\n\toptions.reporter = 'mocha-multi-reporters';\n\toptions.reporterOptions = {\n\t\treporterEnabled: 'spec, mocha-junit-reporter',\n\t\tmochaJunitReporterReporterOptions: {\n\t\t\ttestsuitesTitle: `${suite} ${process.platform}`,\n\t\t\tmochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\\w]/g, '-')}-results.xml`)\n\t\t}\n\t};\n}\n\ntestRunner.configure(options);\n\nexport = testRunner;\n"
  },
  {
    "path": "extensions/notebook-renderers/src/test/linkify.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { JSDOM } from \"jsdom\";\nimport { LinkDetector, linkify } from '../linkify';\n\nconst dom = new JSDOM();\nglobal.document = dom.window.document;\n\nsuite('Notebook builtin output link detection', () => {\n\n\tLinkDetector.injectedHtmlCreator = (value: string) => value;\n\n\ttest('no links', () => {\n\t\tconst htmlWithLinks = linkify('hello', { linkifyFilePaths: true, trustHtml: true }, true);\n\t\tassert.equal(htmlWithLinks.innerHTML, 'hello');\n\t});\n\n\ttest('web link detection', () => {\n\t\tconst htmlWithLinks = linkify('something www.example.com something', { linkifyFilePaths: true, trustHtml: true }, true);\n\t\tconst htmlWithLinks2 = linkify('something www.example.com something', { linkifyFilePaths: false, trustHtml: false }, true);\n\n\t\tassert.equal(htmlWithLinks.innerHTML, 'something <a href=\"www.example.com\">www.example.com</a> something');\n\t\tassert.equal(htmlWithLinks.textContent, 'something www.example.com something');\n\t\tassert.equal(htmlWithLinks2.innerHTML, 'something <a href=\"www.example.com\">www.example.com</a> something');\n\t\tassert.equal(htmlWithLinks2.textContent, 'something www.example.com something');\n\t});\n\n\ttest('html link detection', () => {\n\t\tconst htmlWithLinks = linkify('something <a href=\"www.example.com\">link</a> something', { linkifyFilePaths: true, trustHtml: true }, true);\n\t\tconst htmlWithLinks2 = linkify('something <a href=\"www.example.com\">link</a> something', { linkifyFilePaths: false, trustHtml: true }, true);\n\n\t\tassert.equal(htmlWithLinks.innerHTML, 'something <span><a href=\"www.example.com\">link</a></span> something');\n\t\tassert.equal(htmlWithLinks.textContent, 'something link something');\n\t\tassert.equal(htmlWithLinks2.innerHTML, 'something <span><a href=\"www.example.com\">link</a></span> something');\n\t\tassert.equal(htmlWithLinks2.textContent, 'something link something');\n\t});\n\n\ttest('html link without trust', () => {\n\t\tconst htmlWithLinks = linkify('something <a href=\"file.py\">link</a> something', { linkifyFilePaths: true, trustHtml: false }, true);\n\n\t\tassert.equal(htmlWithLinks.innerHTML, 'something &lt;a href=\"file.py\"&gt;link&lt;/a&gt; something');\n\t\tassert.equal(htmlWithLinks.textContent, 'something <a href=\"file.py\">link</a> something');\n\t});\n});\n\n"
  },
  {
    "path": "extensions/notebook-renderers/src/test/notebookRenderer.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as assert from 'assert';\nimport { activate } from '..';\nimport { RendererApi } from 'vscode-notebook-renderer';\nimport { IDisposable, IRichRenderContext, OutputWithAppend, RenderOptions } from '../rendererTypes';\nimport { JSDOM } from \"jsdom\";\nimport { LinkDetector } from '../linkify';\n\nconst dom = new JSDOM();\nglobal.document = dom.window.document;\n\nsuite('Notebook builtin output renderer', () => {\n\n\tconst error = {\n\t\tname: \"TypeError\",\n\t\tmessage: \"Expected type `str`, but received type `<class \\'int\\'>`\",\n\t\tstack: \"\\u001b[1;31m---------------------------------------------------------------------------\\u001b[0m\" +\n\t\t\t\"\\u001b[1;31mTypeError\\u001b[0m                                 Traceback (most recent call last)\" +\n\t\t\t\"\\u001b[1;32mc:\\\\src\\\\test\\\\ws1\\\\testing.py\\u001b[0m in \\u001b[0;36mline 2\\n\\u001b[0;32m      <a href='file:///c%3A/src/test/ws1/testing.py?line=34'>35</a>\\u001b[0m \\u001b[39m# %%\\u001b[39;00m\\n\\u001b[1;32m----> <a href='file:///c%3A/src/test/ws1/testing.py?line=35'>36</a>\\u001b[0m \\u001b[39mraise\\u001b[39;00m \\u001b[39mTypeError\\u001b[39;00m(\\u001b[39m'\\u001b[39m\\u001b[39merror = f\\u001b[39m\\u001b[39m\\\"\\u001b[39m\\u001b[39mExpected type `str`, but received type `\\u001b[39m\\u001b[39m{\\u001b[39m\\u001b[39mtype(name)}`\\u001b[39m\\u001b[39m\\\"\\u001b[39m\\u001b[39m'\\u001b[39m)\\n\" +\n\t\t\t\"\\u001b[1;31mTypeError\\u001b[0m: Expected type `str`, but received type `<class \\'int\\'>`\\\"\"\n\t};\n\n\tconst errorMimeType = 'application/vnd.code.notebook.error';\n\n\tconst stdoutMimeType = 'application/vnd.code.notebook.stdout';\n\tconst stderrMimeType = 'application/vnd.code.notebook.stderr';\n\n\tconst textLikeMimeTypes = [\n\t\tstdoutMimeType,\n\t\tstderrMimeType,\n\t\t'text/plain'\n\t];\n\n\ttype optionalRenderOptions = { [k in keyof RenderOptions]?: RenderOptions[k] };\n\n\ttype handler = (e: RenderOptions) => any;\n\n\tconst settingsChangedHandlers: handler[] = [];\n\tfunction fireSettingsChange(options: optionalRenderOptions) {\n\t\tsettingsChangedHandlers.forEach((handler) => handler(options as RenderOptions));\n\t}\n\n\tfunction createContext(settings?: optionalRenderOptions): IRichRenderContext {\n\t\tsettingsChangedHandlers.length = 0;\n\t\treturn {\n\t\t\tsetState(_value: void) { },\n\t\t\tgetState() { return undefined; },\n\t\t\tasync getRenderer(_id): Promise<RendererApi | undefined> { return undefined; },\n\t\t\tsettings: {\n\t\t\t\toutputWordWrap: true,\n\t\t\t\toutputScrolling: true,\n\t\t\t\tlineLimit: 30,\n\t\t\t\t...settings\n\t\t\t} as RenderOptions,\n\t\t\tonDidChangeSettings(listener: handler, _thisArgs?: any, disposables?: IDisposable[]) {\n\t\t\t\tsettingsChangedHandlers.push(listener);\n\n\t\t\t\tconst dispose = () => {\n\t\t\t\t\tsettingsChangedHandlers.splice(settingsChangedHandlers.indexOf(listener), 1);\n\t\t\t\t};\n\n\t\t\t\tdisposables?.push({ dispose });\n\t\t\t\treturn {\n\t\t\t\t\tdispose\n\t\t\t\t};\n\t\t\t},\n\t\t\tworkspace: {\n\t\t\t\tisTrusted: true\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction createElement(elementType: 'div' | 'span', classes: string[]) {\n\t\tconst el = global.document.createElement(elementType);\n\t\tclasses.forEach((c) => el.classList.add(c));\n\t\treturn el;\n\t}\n\n\t// Helper to generate HTML similar to what is passed to the renderer\n\t// <div class=\"cell_container\" >\n\t//   <div class=\"output_container\" >\n\t//     <div class=\"output\" >\n\tclass OutputHtml {\n\t\tprivate readonly cell = createElement('div', ['cell_container']);\n\t\tprivate readonly firstOutput: HTMLElement;\n\n\t\tconstructor() {\n\t\t\tconst outputContainer = createElement('div', ['output_container']);\n\t\t\tconst outputElement = createElement('div', ['output']);\n\n\t\t\tthis.cell.appendChild(outputContainer);\n\t\t\toutputContainer.appendChild(outputElement);\n\n\t\t\tthis.firstOutput = outputElement;\n\t\t}\n\n\t\tpublic get cellElement() {\n\t\t\treturn this.cell;\n\t\t}\n\n\t\tpublic getFirstOuputElement() {\n\t\t\treturn this.firstOutput;\n\t\t}\n\n\t\tpublic appendOutputElement() {\n\t\t\tconst outputElement = createElement('div', ['output']);\n\t\t\tconst outputContainer = createElement('div', ['output_container']);\n\t\t\tthis.cell.appendChild(outputContainer);\n\t\t\toutputContainer.appendChild(outputElement);\n\n\t\t\treturn outputElement;\n\t\t}\n\t}\n\n\tfunction createOutputItem(text: string, mime: string, id: string = '123', appendedText?: string): OutputWithAppend {\n\t\treturn {\n\t\t\tid: id,\n\t\t\tmime: mime,\n\t\t\tappendedText() {\n\t\t\t\treturn appendedText;\n\t\t\t},\n\t\t\ttext() {\n\t\t\t\treturn text;\n\t\t\t},\n\t\t\tblob() {\n\t\t\t\treturn [] as any;\n\t\t\t},\n\t\t\tjson() {\n\t\t\t\treturn '{ }';\n\t\t\t},\n\t\t\tdata() {\n\t\t\t\treturn [] as any;\n\t\t\t},\n\t\t\tmetadata: {}\n\t\t};\n\t}\n\n\ttextLikeMimeTypes.forEach((mimeType) => {\n\t\ttest(`Render with wordwrap and scrolling for mimetype ${mimeType}`, async () => {\n\t\t\tconst context = createContext({ outputWordWrap: true, outputScrolling: true });\n\t\t\tconst renderer = await activate(context);\n\t\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\t\tconst outputItem = createOutputItem('content', mimeType);\n\t\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\n\t\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\t\tassert.ok(outputElement.classList.contains('remove-padding'), `Padding should be removed for scrollable outputs ${outputElement.classList}`);\n\t\t\tif (mimeType === 'text/plain') {\n\t\t\t\tassert.ok(inserted.classList.contains('word-wrap'), `Word wrap should be enabled for text/plain ${outputElement.classList}`);\n\t\t\t} else {\n\t\t\t\tassert.ok(outputElement.classList.contains('word-wrap') && inserted.classList.contains('scrollable'),\n\t\t\t\t\t`output content classList should contain word-wrap and scrollable ${inserted.classList}`);\n\t\t\t}\n\t\t\tassert.ok(inserted.innerHTML.indexOf('>content</') > -1, `Content was not added to output element: ${outputElement.innerHTML}`);\n\t\t});\n\n\t\ttest(`Render without wordwrap or scrolling for mimetype ${mimeType}`, async () => {\n\t\t\tconst context = createContext({ outputWordWrap: false, outputScrolling: false });\n\t\t\tconst renderer = await activate(context);\n\t\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\t\tconst outputItem = createOutputItem('content', mimeType);\n\t\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\n\t\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\t\tassert.ok(outputElement.classList.contains('remove-padding'), `Padding should be removed for non-scrollable outputs: ${outputElement.classList}`);\n\t\t\tassert.ok(!outputElement.classList.contains('word-wrap') && !inserted.classList.contains('scrollable'),\n\t\t\t\t`output content classList should not contain word-wrap and scrollable ${inserted.classList}`);\n\t\t\tassert.ok(inserted.innerHTML.indexOf('>content</') > -1, `Content was not added to output element: ${outputElement.innerHTML}`);\n\t\t});\n\n\t\ttest(`Replace content in element for mimetype ${mimeType}`, async () => {\n\t\t\tconst context = createContext();\n\t\t\tconst renderer = await activate(context);\n\t\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\t\tconst outputItem = createOutputItem('content', mimeType);\n\t\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\t\t\tconst outputItem2 = createOutputItem('replaced content', mimeType);\n\t\t\tawait renderer!.renderOutputItem(outputItem2, outputElement);\n\n\t\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\t\tassert.ok(inserted.innerHTML.indexOf('>content</') === -1, `Old content was not removed to output element: ${outputElement.innerHTML}`);\n\t\t\tassert.ok(inserted.innerHTML.indexOf('>replaced content</') !== -1, `Content was not added to output element: ${outputElement.innerHTML}`);\n\t\t});\n\n\t});\n\n\ttest('Append streaming output', async () => {\n\t\tconst context = createContext({ outputWordWrap: false, outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst outputItem = createOutputItem('content', stdoutMimeType, '123', 'ignoredAppend');\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\t\tconst outputItem2 = createOutputItem('content\\nappended', stdoutMimeType, '123', '\\nappended');\n\t\tawait renderer!.renderOutputItem(outputItem2, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted.innerHTML.indexOf('>content</') !== -1, `Previous content should still exist: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('ignoredAppend') === -1, `Append value should not be used on first render: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>appended</') !== -1, `Content was not appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>content</') === inserted.innerHTML.lastIndexOf('>content</'), `Original content should not be duplicated: ${outputElement.innerHTML}`);\n\t});\n\n\ttest(`Appending multiple streaming outputs`, async () => {\n\t\tconst context = createContext({ outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputHtml = new OutputHtml();\n\t\tconst firstOutputElement = outputHtml.getFirstOuputElement();\n\t\tconst outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1');\n\t\tconst outputItem2 = createOutputItem(JSON.stringify(error), errorMimeType, '2');\n\t\tconst outputItem3 = createOutputItem('second stream content', stdoutMimeType, '3');\n\t\tawait renderer!.renderOutputItem(outputItem1, firstOutputElement);\n\t\tconst secondOutputElement = outputHtml.appendOutputElement();\n\t\tawait renderer!.renderOutputItem(outputItem2, secondOutputElement);\n\t\tconst thirdOutputElement = outputHtml.appendOutputElement();\n\t\tawait renderer!.renderOutputItem(outputItem3, thirdOutputElement);\n\n\t\tconst appendedItem1 = createOutputItem('', stdoutMimeType, '1', ' appended1');\n\t\tawait renderer!.renderOutputItem(appendedItem1, firstOutputElement);\n\t\tconst appendedItem3 = createOutputItem('', stdoutMimeType, '3', ' appended3');\n\t\tawait renderer!.renderOutputItem(appendedItem3, thirdOutputElement);\n\n\t\tassert.ok(firstOutputElement.innerHTML.indexOf('>first stream content') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(firstOutputElement.innerHTML.indexOf('appended1') > -1, `Content was not appended to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(secondOutputElement.innerHTML.indexOf('>TypeError</') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(thirdOutputElement.innerHTML.indexOf('>second stream content') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(thirdOutputElement.innerHTML.indexOf('appended3') > -1, `Content was not appended to output element: ${outputHtml.cellElement.innerHTML}`);\n\t});\n\n\ttest('Append large streaming outputs', async () => {\n\t\tconst context = createContext({ outputWordWrap: false, outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst lotsOfLines = new Array(4998).fill('line').join('\\n');\n\t\tconst firstOuput = lotsOfLines + 'expected1';\n\t\tconst outputItem = createOutputItem(firstOuput, stdoutMimeType, '123');\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\t\tconst appended = '\\n' + lotsOfLines + 'expectedAppend';\n\t\tconst outputItem2 = createOutputItem(firstOuput + appended, stdoutMimeType, '123', appended);\n\t\tawait renderer!.renderOutputItem(outputItem2, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted.innerHTML.indexOf('expected1') !== -1, `Last bit of previous content should still exist`);\n\t\tassert.ok(inserted.innerHTML.indexOf('expectedAppend') !== -1, `Content was not appended to output element`);\n\t});\n\n\ttest('Streaming outputs larger than the line limit are truncated', async () => {\n\t\tconst context = createContext({ outputWordWrap: false, outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst lotsOfLines = new Array(11000).fill('line').join('\\n');\n\t\tconst firstOuput = 'shouldBeTruncated' + lotsOfLines + 'expected1';\n\t\tconst outputItem = createOutputItem(firstOuput, stdoutMimeType, '123');\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted.innerHTML.indexOf('expected1') !== -1, `Last bit of content should exist`);\n\t\tassert.ok(inserted.innerHTML.indexOf('shouldBeTruncated') === -1, `Beginning content should be truncated`);\n\t});\n\n\ttest(`Render filepath links in text output when enabled`, async () => {\n\t\tLinkDetector.injectedHtmlCreator = (value: string) => value;\n\t\tconst context = createContext({ outputWordWrap: true, outputScrolling: true, linkifyFilePaths: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst outputItem = createOutputItem('./dir/file.txt', stdoutMimeType);\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(outputElement.innerHTML.indexOf('<a href=\"./dir/file.txt\">') !== -1, `inner HTML:\\n ${outputElement.innerHTML}`);\n\t});\n\n\ttest(`No filepath links in text output when disabled`, async () => {\n\t\tLinkDetector.injectedHtmlCreator = (value: string) => value;\n\t\tconst context = createContext({ outputWordWrap: true, outputScrolling: true, linkifyFilePaths: false });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst outputItem = createOutputItem('./dir/file.txt', stdoutMimeType);\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(outputElement.innerHTML.indexOf('<a href=\"./dir/file.txt\">') === -1, `inner HTML:\\n ${outputElement.innerHTML}`);\n\t});\n\n\ttest(`Render with wordwrap and scrolling for error output`, async () => {\n\t\tLinkDetector.injectedHtmlCreator = (value: string) => value;\n\t\tconst context = createContext({ outputWordWrap: true, outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst outputItem = createOutputItem(JSON.stringify(error), errorMimeType);\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(outputElement.classList.contains('remove-padding'), 'Padding should be removed for scrollable outputs');\n\t\tassert.ok(outputElement.classList.contains('word-wrap') && inserted.classList.contains('scrollable'),\n\t\t\t`output content classList should contain word-wrap and scrollable ${inserted.classList}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>Expected type `str`, but received type') > -1, `Content was not added to output element:\\n ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.textContent!.indexOf('Expected type `str`, but received type `<class \\'int\\'>`') > -1, `Content was not added to output element:\\n ${outputElement.textContent}`);\n\t\tassert.ok(inserted.textContent!.indexOf('<a href') === -1, 'HTML links should be rendered');\n\t});\n\n\ttest(`Replace content in element for error output`, async () => {\n\t\tconst context = createContext();\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst outputItem = createOutputItem(JSON.stringify(error), errorMimeType);\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\t\tconst error2: typeof error = { ...error, message: 'new message', stack: 'replaced content' };\n\t\tconst outputItem2 = createOutputItem(JSON.stringify(error2), errorMimeType);\n\t\tawait renderer!.renderOutputItem(outputItem2, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted.innerHTML.indexOf('Expected type `str`, but received type') === -1, `Content was not removed from output element:\\n ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>replaced content</') !== -1, `Content was not added to output element:\\n ${outputElement.innerHTML}`);\n\t});\n\n\ttest(`Multiple adjacent streaming outputs should be consolidated one element`, async () => {\n\t\tconst context = createContext();\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputHtml = new OutputHtml();\n\t\tconst outputElement = outputHtml.getFirstOuputElement();\n\t\tconst outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1');\n\t\tconst outputItem2 = createOutputItem('second stream content', stdoutMimeType, '2');\n\t\tconst outputItem3 = createOutputItem('third stream content', stderrMimeType, '3');\n\t\tawait renderer!.renderOutputItem(outputItem1, outputElement);\n\t\tawait renderer!.renderOutputItem(outputItem2, outputHtml.appendOutputElement());\n\t\tawait renderer!.renderOutputItem(outputItem3, outputHtml.appendOutputElement());\n\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>first stream content</') > -1, `Content was not added to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>second stream content</') > -1, `Content was not added to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>third stream content</') > -1, `Content was not added to output element: ${outputElement.innerHTML}`);\n\t});\n\n\ttest(`Consolidated streaming outputs should replace matching outputs correctly`, async () => {\n\t\tconst context = createContext({ outputScrolling: false });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputHtml = new OutputHtml();\n\t\tconst outputElement = outputHtml.getFirstOuputElement();\n\t\tconst outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1');\n\t\tconst outputItem2 = createOutputItem('second stream content', stdoutMimeType, '2');\n\t\tawait renderer!.renderOutputItem(outputItem1, outputElement);\n\t\tconst secondOutput = outputHtml.appendOutputElement();\n\t\tawait renderer!.renderOutputItem(outputItem2, secondOutput);\n\t\tconst newOutputItem1 = createOutputItem('replaced content', stdoutMimeType, '2');\n\t\tawait renderer!.renderOutputItem(newOutputItem1, secondOutput);\n\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>first stream content</') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>replaced content</') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>second stream content</') === -1, `Content was not replaced in output element: ${outputHtml.cellElement.innerHTML}`);\n\t});\n\n\ttest(`Consolidated streaming outputs should append matching outputs correctly`, async () => {\n\t\tconst context = createContext({ outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputHtml = new OutputHtml();\n\t\tconst outputElement = outputHtml.getFirstOuputElement();\n\t\tconst outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1');\n\t\tconst outputItem2 = createOutputItem('second stream content', stdoutMimeType, '2');\n\t\tawait renderer!.renderOutputItem(outputItem1, outputElement);\n\t\tconst secondOutput = outputHtml.appendOutputElement();\n\t\tawait renderer!.renderOutputItem(outputItem2, secondOutput);\n\t\tconst appendingOutput = createOutputItem('', stdoutMimeType, '2', ' appended');\n\t\tawait renderer!.renderOutputItem(appendingOutput, secondOutput);\n\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>first stream content</') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>second stream content') > -1, `Second content was not added to ouptut element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('appended') > -1, `Content was not appended to ouptut element: ${outputHtml.cellElement.innerHTML}`);\n\t});\n\n\ttest(`Streaming outputs interleaved with other mime types will produce separate outputs`, async () => {\n\t\tconst context = createContext({ outputScrolling: false });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputHtml = new OutputHtml();\n\t\tconst firstOutputElement = outputHtml.getFirstOuputElement();\n\t\tconst outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1');\n\t\tconst outputItem2 = createOutputItem(JSON.stringify(error), errorMimeType, '2');\n\t\tconst outputItem3 = createOutputItem('second stream content', stdoutMimeType, '3');\n\t\tawait renderer!.renderOutputItem(outputItem1, firstOutputElement);\n\t\tconst secondOutputElement = outputHtml.appendOutputElement();\n\t\tawait renderer!.renderOutputItem(outputItem2, secondOutputElement);\n\t\tconst thirdOutputElement = outputHtml.appendOutputElement();\n\t\tawait renderer!.renderOutputItem(outputItem3, thirdOutputElement);\n\n\t\tassert.ok(firstOutputElement.innerHTML.indexOf('>first stream content</') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(secondOutputElement.innerHTML.indexOf('>TypeError</') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t\tassert.ok(thirdOutputElement.innerHTML.indexOf('>second stream content</') > -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`);\n\t});\n\n\ttest(`Multiple adjacent streaming outputs, rerendering the first should erase the rest`, async () => {\n\t\tconst context = createContext();\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputHtml = new OutputHtml();\n\t\tconst outputElement = outputHtml.getFirstOuputElement();\n\t\tconst outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1');\n\t\tconst outputItem2 = createOutputItem('second stream content', stdoutMimeType, '2');\n\t\tconst outputItem3 = createOutputItem('third stream content', stderrMimeType, '3');\n\t\tawait renderer!.renderOutputItem(outputItem1, outputElement);\n\t\tawait renderer!.renderOutputItem(outputItem2, outputHtml.appendOutputElement());\n\t\tawait renderer!.renderOutputItem(outputItem3, outputHtml.appendOutputElement());\n\t\tconst newOutputItem1 = createOutputItem('replaced content', stderrMimeType, '1');\n\t\tawait renderer!.renderOutputItem(newOutputItem1, outputElement);\n\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>replaced content</') > -1, `Content was not added to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>first stream content</') === -1, `Content was not cleared: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>second stream content</') === -1, `Content was not cleared: ${outputElement.innerHTML}`);\n\t\tassert.ok(inserted.innerHTML.indexOf('>third stream content</') === -1, `Content was not cleared: ${outputElement.innerHTML}`);\n\t});\n\n\ttest(`Rendered output will wrap on settings change event`, async () => {\n\t\tconst context = createContext({ outputWordWrap: false, outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst outputItem = createOutputItem('content', stdoutMimeType);\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\t\tfireSettingsChange({ outputWordWrap: true, outputScrolling: true });\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(outputElement.classList.contains('word-wrap') && inserted.classList.contains('scrollable'),\n\t\t\t`output content classList should contain word-wrap and scrollable ${inserted.classList}`);\n\t});\n\n\ttest(`Settings event change listeners should not grow if output is re-rendered`, async () => {\n\t\tconst context = createContext({ outputWordWrap: false });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tawait renderer!.renderOutputItem(createOutputItem('content', stdoutMimeType), outputElement);\n\t\tconst handlerCount = settingsChangedHandlers.length;\n\t\tawait renderer!.renderOutputItem(createOutputItem('content', stdoutMimeType), outputElement);\n\n\t\tassert.equal(settingsChangedHandlers.length, handlerCount);\n\t});\n\n\tconst rawIPythonError = {\n\t\tname: \"NameError\",\n\t\tmessage: \"name 'x' is not defined\",\n\t\tstack: \"\\u001b[1;31m---------------------------------------------------------------------------\\u001b[0m\" +\n\t\t\t\"\\u001b[1;31mNameError\\u001b[0m                                 Traceback (most recent call last)\" +\n\t\t\t\"Cell \\u001b[1;32mIn[2], line 1\\u001b[0m\\n\\u001b[1;32m----> 1\\u001b[0m \\u001b[43mmyfunc\\u001b[49m\\u001b[43m(\\u001b[49m\\u001b[43m)\\u001b[49m\\n\" +\n\t\t\t\"Cell \\u001b[1;32mIn[1], line 2\\u001b[0m, in \\u001b[0;36mmyfunc\\u001b[1;34m()\\u001b[0m\\n\\u001b[0;32m      1\\u001b[0m \\u001b[38;5;28;01mdef\\u001b[39;00m \\u001b[38;5;21mmyfunc\\u001b[39m():\\n\\u001b[1;32m----> 2\\u001b[0m     \\u001b[38;5;28mprint\\u001b[39m(\\u001b[43mx\\u001b[49m)\\n\" +\n\t\t\t\"\\u001b[1;31mNameError\\u001b[0m: name 'x' is not defined\"\n\t};\n\n\ttest(`Should clean up raw IPython error stack traces`, async () => {\n\t\tLinkDetector.injectedHtmlCreator = (value: string) => value;\n\t\tconst context = createContext({ outputWordWrap: true, outputScrolling: true });\n\t\tconst renderer = await activate(context);\n\t\tassert.ok(renderer, 'Renderer not created');\n\n\t\tconst outputElement = new OutputHtml().getFirstOuputElement();\n\t\tconst outputItem = createOutputItem(JSON.stringify(rawIPythonError), errorMimeType);\n\t\tawait renderer!.renderOutputItem(outputItem, outputElement);\n\n\t\tconst inserted = outputElement.firstChild as HTMLElement;\n\t\tassert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`);\n\t\tassert.ok(outputElement.innerHTML.indexOf('class=\"code-background-colored\"') === -1, `inner HTML:\\n ${outputElement.innerHTML}`);\n\t});\n\n});\n\n"
  },
  {
    "path": "extensions/notebook-renderers/src/test/stackTraceHelper.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { formatStackTrace } from '../stackTraceHelper';\nimport * as assert from 'assert';\n\n// The stack frames for these tests can be retreived by using the raw json for a notebook with an error\nsuite('StackTraceHelper', () => {\n\n\ttest('Non Ipython stack trace is left alone', () => {\n\t\tconst stack = 'DivideError: integer division error\\n' +\n\t\t\t'Stacktrace:\\n' +\n\t\t\t'[1] divide_by_zero(x:: Int64)\\n' +\n\t\t\t'@Main c:\\\\src\\\\test\\\\3\\\\otherlanguages\\\\julia.ipynb: 3\\n' +\n\t\t\t'[2] top - level scope\\n' +\n\t\t\t'@c:\\\\src\\\\test\\\\3\\\\otherlanguages\\\\julia.ipynb: 1; ';\n\t\tassert.equal(formatStackTrace(stack).formattedStack, stack);\n\t});\n\n\tconst formatSequence = /\\u001b\\[.+?m/g;\n\tfunction stripAsciiFormatting(text: string) {\n\t\treturn text.replace(formatSequence, '');\n\t}\n\n\ttest('IPython stack line numbers are linkified', () => {\n\t\tconst stack =\n\t\t\t'\\u001b[1;31m---------------------------------------------------------------------------\\u001b[0m\\n' +\n\t\t\t'\\u001b[1;31mException\\u001b[0m                                 Traceback (most recent call last)\\n' +\n\t\t\t'Cell \\u001b[1;32mIn[3], line 2\\u001b[0m\\n' +\n\t\t\t'\\u001b[0;32m      1\\u001b[0m \\u001b[38;5;28;01mimport\\u001b[39;00m \\u001b[38;5;21;01mmyLib\\u001b[39;00m\\n' +\n\t\t\t'\\u001b[1;32m----> 2\\u001b[0m \\u001b[43mmyLib\\u001b[49m\\u001b[38;5;241;43m.\\u001b[39;49m\\u001b[43mthrowEx\\u001b[49m\\u001b[43m(\\u001b[49m\\u001b[43m)\\u001b[49m\\n' +\n\t\t\t'\\n' +\n\t\t\t'File \\u001b[1;32mC:\\\\venvs\\\\myLib.py:2\\u001b[0m, in \\u001b[0;36mthrowEx\\u001b[1;34m()\\u001b[0m\\n' +\n\t\t\t'\\u001b[0;32m      1\\u001b[0m \\u001b[38;5;28;01mdef\\u001b[39;00m \\u001b[38;5;21mthrowEx\\u001b[39m():\\n' +\n\t\t\t'\\u001b[1;32m----> 2\\u001b[0m     \\u001b[38;5;28;01mraise\\u001b[39;00m \\u001b[38;5;167;01mException\\u001b[39;00m\\n\\n' +\n\t\t\t'\\u001b[1;31mException\\u001b[0m\\n:';\n\n\t\tconst { formattedStack, errorLocation } = formatStackTrace(stack);\n\t\tconst cleanStack = stripAsciiFormatting(formattedStack);\n\t\tassert.ok(cleanStack.indexOf('Cell In[3], <a href=\\'vscode-notebook-cell:?execution_count=3&line=2\\'>line 2</a>') > 0, 'Missing line link in ' + cleanStack);\n\t\tassert.ok(cleanStack.indexOf('<a href=\\'vscode-notebook-cell:?execution_count=3&line=2\\'>2</a>') > 0, 'Missing frame link in ' + cleanStack);\n\t\tassert.ok(cleanStack.indexOf('<a href=\\'C:\\\\venvs\\\\myLib.py:2\\'>2</a>') > 0, 'Missing frame link in ' + cleanStack);\n\t\tassert.equal(errorLocation, '<a href=\\'vscode-notebook-cell:?execution_count=3&line=2\\'>line 2</a>');\n\t});\n\n\ttest('IPython stack line numbers are linkified for IPython 8.3', () => {\n\t\t// stack frames within functions do not list the line number, i.e.\n\t\t// 'Input In [1], in myfunc()' vs\n\t\t// 'Input In [2], in <cell line: 5>()'\n\t\tconst stack =\n\t\t\t'\\u001b[1;31m---------------------------------------------------------------------------\\u001b[0m\\n' +\n\t\t\t'\\u001b[1;31mException\\u001b[0m                                 Traceback (most recent call last)\\n' +\n\t\t\t'Input \\u001b[1;32mIn [2]\\u001b[0m, in \\u001b[0;36m<cell line: 5>\\u001b[1;34m()\\u001b[0m\\n' +\n\t\t\t'\\u001b[0;32m      3\\u001b[0m \\u001b[38;5;28mprint\\u001b[39m(\\u001b[38;5;124m\\'\\u001b[39m\\u001b[38;5;124mipykernel\\u001b[39m\\u001b[38;5;124m\\'\\u001b[39m, ipykernel\\u001b[38;5;241m.\\u001b[39m__version__)\\n' +\n\t\t\t'\\u001b[0;32m      4\\u001b[0m \\u001b[38;5;28mprint\\u001b[39m(\\u001b[38;5;124m\\'\\u001b[39m\\u001b[38;5;124mipython\\u001b[39m\\u001b[38;5;124m\\'\\u001b[39m, IPython\\u001b[38;5;241m.\\u001b[39m__version__)\\n' +\n\t\t\t'\\u001b[1;32m----> 5\\u001b[0m \\u001b[43mmyfunc\\u001b[49m\\u001b[43m(\\u001b[49m\\u001b[43m)\\u001b[49m\\n' +\n\t\t\t'\\n\\n' +\n\t\t\t'Input \\u001b[1;32mIn [1]\\u001b[0m, in \\u001b[0;36mmyfunc\\u001b[1;34m()\\u001b[0m\\n' +\n\t\t\t'\\u001b[0;32m      3\\u001b[0m \\u001b[38;5;28;01mdef\\u001b[39;00m \\u001b[38;5;21mmyfunc\\u001b[39m():\\n' +\n\t\t\t'\\u001b[1;32m----> 4\\u001b[0m     \\u001b[43mmyLib\\u001b[49m\\u001b[38;5;241;43m.\\u001b[39;49m\\u001b[43mthrowEx\\u001b[49m\\u001b[43m(\\u001b[49m\\u001b[43m)\\u001b[49m\\n' +\n\t\t\t'\\n\\n' +\n\t\t\t'File \\u001b[1;32mC:\\\\venvs\\\\myLib.py:2\\u001b[0m, in \\u001b[0;36mthrowEx\\u001b[1;34m()\\u001b[0m\\n' +\n\t\t\t'\\u001b[0;32m      1\\u001b[0m \\u001b[38;5;28;01mdef\\u001b[39;00m \\u001b[38;5;21mthrowEx\\u001b[39m():\\n' +\n\t\t\t'\\u001b[1;32m----> 2\\u001b[0m     \\u001b[38;5;28;01mraise\\u001b[39;00m \\u001b[38;5;167;01mException\\u001b[39;00m\\n' +\n\t\t\t'\\n' +\n\t\t\t'\\u001b[1;31mException\\u001b[0m:\\n';\n\n\t\tconst { formattedStack } = formatStackTrace(stack);\n\t\tconst formatted = stripAsciiFormatting(formattedStack);\n\t\tassert.ok(formatted.indexOf('Input <a href=\\'vscode-notebook-cell:?execution_count=2\\'>In [2]</a>, in <cell line: 5>') > 0, 'Missing cell link in ' + formatted);\n\t\tassert.ok(formatted.indexOf('Input <a href=\\'vscode-notebook-cell:?execution_count=1\\'>In [1]</a>, in myfunc()') > 0, 'Missing cell link in ' + formatted);\n\t\tassert.ok(formatted.indexOf('<a href=\\'vscode-notebook-cell:?execution_count=2&line=5\\'>5</a>') > 0, 'Missing frame link in ' + formatted);\n\t});\n\n\ttest('IPython stack trace lines without associated location are not linkified', () => {\n\t\tconst stack =\n\t\t\t'\\u001b[1;31m---------------------------------------------------------------------------\\u001b[0m\\n' +\n\t\t\t'\\u001b[1;31mException\\u001b[0m                                 Traceback (most recent call last)\\n' +\n\t\t\t'Cell \\u001b[1;32mIn[3], line 2\\u001b[0m\\n' +\n\t\t\t'\\n' +\n\t\t\t'unknown source\\n' +\n\t\t\t'\\u001b[0;32m      1\\u001b[0m \\u001b[38;5;28;01mdef\\u001b[39;00m \\u001b[38;5;21mthrowEx\\u001b[39m():\\n' +\n\t\t\t'\\u001b[1;32m----> 2\\u001b[0m     \\u001b[38;5;28;01mraise\\u001b[39;00m \\u001b[38;5;167;01mException\\u001b[39;00m\\n\\n' +\n\t\t\t'\\u001b[1;31mException\\u001b[0m\\n:';\n\n\t\tconst formatted = formatStackTrace(stack).formattedStack;\n\t\tassert.ok(!/<a href=.*>\\d<\\/a>/.test(formatted), formatted);\n\t});\n\n\ttest('IPython stack without line numbers are not linkified', () => {\n\t\tconst stack =\n\t\t\t'\\u001b[1;36m  Cell \\u001b[1;32mIn[6], line 1\\u001b[1;36m\\u001b[0m\\n' +\n\t\t\t'\\u001b[1;33m    print(\\u001b[0m\\n' +\n\t\t\t'\\u001b[1;37m          ^\\u001b[0m\\n' +\n\t\t\t'\\u001b[1;31mSyntaxError\\u001b[0m\\u001b[1;31m:\\u001b[0m incomplete input\\n' +\n\t\t\t// contrived examples to check for more false positives\n\t\t\t'1  print(\\n' +\n\t\t\t'a 1  print(\\n' +\n\t\t\t'   1a  print(\\n';\n\n\t\tconst formattedLines = formatStackTrace(stack).formattedStack.split('\\n');\n\t\tassert.ok(/<a href='vscode-notebook-cell.*>/.test(formattedLines[0]), 'line should contain a link: ' + formattedLines[0]);\n\t\tformattedLines.slice(1).forEach(line => assert.ok(!/<a href=.*>/.test(line), 'line should not contain a link: ' + line));\n\t});\n\n});\n"
  },
  {
    "path": "extensions/notebook-renderers/src/textHelper.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { handleANSIOutput } from './ansi';\nimport { LinkOptions } from './linkify';\nimport { OutputElementOptions, OutputWithAppend } from './rendererTypes';\nexport const scrollableClass = 'scrollable';\n\nconst softScrollableLineLimit = 5000;\nconst hardScrollableLineLimit = 8000;\n\n/**\n * Output is Truncated. View as a [scrollable element] or open in a [text editor]. Adjust cell output [settings...]\n */\nfunction generateViewMoreElement(outputId: string) {\n\n\tconst container = document.createElement('div');\n\tcontainer.classList.add('truncation-message');\n\tconst first = document.createElement('span');\n\tfirst.textContent = 'Output is truncated. View as a ';\n\tcontainer.appendChild(first);\n\n\tconst viewAsScrollableLink = document.createElement('a');\n\tviewAsScrollableLink.textContent = 'scrollable element';\n\tviewAsScrollableLink.href = `command:cellOutput.enableScrolling?${outputId}`;\n\tviewAsScrollableLink.ariaLabel = 'enable scrollable output';\n\tcontainer.appendChild(viewAsScrollableLink);\n\n\tconst second = document.createElement('span');\n\tsecond.textContent = ' or open in a ';\n\tcontainer.appendChild(second);\n\n\tconst openInTextEditorLink = document.createElement('a');\n\topenInTextEditorLink.textContent = 'text editor';\n\topenInTextEditorLink.href = `command:workbench.action.openLargeOutput?${outputId}`;\n\topenInTextEditorLink.ariaLabel = 'open output in text editor';\n\tcontainer.appendChild(openInTextEditorLink);\n\n\tconst third = document.createElement('span');\n\tthird.textContent = '. Adjust cell output ';\n\tcontainer.appendChild(third);\n\n\tconst layoutSettingsLink = document.createElement('a');\n\tlayoutSettingsLink.textContent = 'settings';\n\tlayoutSettingsLink.href = `command:workbench.action.openSettings?%5B%22%40tag%3AnotebookOutputLayout%22%5D`;\n\tlayoutSettingsLink.ariaLabel = 'notebook output settings';\n\tcontainer.appendChild(layoutSettingsLink);\n\n\tconst fourth = document.createElement('span');\n\tfourth.textContent = '...';\n\tcontainer.appendChild(fourth);\n\n\treturn container;\n}\n\nfunction generateNestedViewAllElement(outputId: string) {\n\tconst container = document.createElement('div');\n\n\tconst link = document.createElement('a');\n\tlink.textContent = '...';\n\tlink.href = `command:workbench.action.openLargeOutput?${outputId}`;\n\tlink.ariaLabel = 'Open full output in text editor';\n\tlink.title = 'Open full output in text editor';\n\tlink.style.setProperty('text-decoration', 'none');\n\tcontainer.appendChild(link);\n\n\treturn container;\n}\n\nfunction truncatedArrayOfString(id: string, buffer: string[], linesLimit: number, linkOptions: LinkOptions) {\n\tconst container = document.createElement('div');\n\tcontainer.setAttribute('data-vscode-context', JSON.stringify({\n\t\twebviewSection: 'text',\n\t\toutputId: id,\n\t\t'preventDefaultContextMenuItems': true\n\t}));\n\tconst lineCount = buffer.length;\n\n\tif (lineCount <= linesLimit) {\n\t\tconst spanElement = handleANSIOutput(buffer.join('\\n'), linkOptions);\n\t\tcontainer.appendChild(spanElement);\n\t\treturn container;\n\t}\n\n\tcontainer.appendChild(handleANSIOutput(buffer.slice(0, linesLimit - 5).join('\\n'), linkOptions));\n\n\t// truncated piece\n\tconst elipses = document.createElement('div');\n\telipses.innerText = '...';\n\tcontainer.appendChild(elipses);\n\n\tcontainer.appendChild(handleANSIOutput(buffer.slice(lineCount - 5).join('\\n'), linkOptions));\n\n\tcontainer.appendChild(generateViewMoreElement(id));\n\n\treturn container;\n}\n\nfunction scrollableArrayOfString(id: string, buffer: string[], linkOptions: LinkOptions) {\n\tconst element = document.createElement('div');\n\telement.setAttribute('data-vscode-context', JSON.stringify({\n\t\twebviewSection: 'text',\n\t\toutputId: id,\n\t\t'preventDefaultContextMenuItems': true\n\t}));\n\tif (buffer.length > softScrollableLineLimit) {\n\t\telement.appendChild(generateNestedViewAllElement(id));\n\t}\n\n\telement.appendChild(handleANSIOutput(buffer.slice(-1 * softScrollableLineLimit).join('\\n'), linkOptions));\n\n\treturn element;\n}\n\nconst outputLengths: Record<string, number> = {};\n\nfunction appendScrollableOutput(element: HTMLElement, id: string, appended: string, linkOptions: LinkOptions) {\n\tif (!outputLengths[id]) {\n\t\toutputLengths[id] = 0;\n\t}\n\n\tconst buffer = appended.split(/\\r\\n|\\r|\\n/g);\n\tconst appendedLength = buffer.length + outputLengths[id];\n\t// Only append outputs up to the hard limit of lines, then replace it with the last softLimit number of lines\n\tif (appendedLength > hardScrollableLineLimit) {\n\t\treturn false;\n\t}\n\telse {\n\t\telement.appendChild(handleANSIOutput(buffer.join('\\n'), linkOptions));\n\t\toutputLengths[id] = appendedLength;\n\t}\n\treturn true;\n}\n\nexport function createOutputContent(id: string, outputText: string, options: OutputElementOptions): HTMLElement {\n\tconst { linesLimit, error, scrollable, trustHtml, linkifyFilePaths } = options;\n\tconst linkOptions: LinkOptions = { linkifyFilePaths, trustHtml };\n\tconst buffer = outputText.split(/\\r\\n|\\r|\\n/g);\n\toutputLengths[id] = outputLengths[id] = Math.min(buffer.length, softScrollableLineLimit);\n\n\tlet outputElement: HTMLElement;\n\tif (scrollable) {\n\t\toutputElement = scrollableArrayOfString(id, buffer, linkOptions);\n\t} else {\n\t\toutputElement = truncatedArrayOfString(id, buffer, linesLimit, linkOptions);\n\t}\n\n\toutputElement.setAttribute('output-item-id', id);\n\tif (error) {\n\t\toutputElement.classList.add('error');\n\t}\n\n\treturn outputElement;\n}\n\nexport function appendOutput(outputInfo: OutputWithAppend, existingContent: HTMLElement, options: OutputElementOptions) {\n\tconst appendedText = outputInfo.appendedText?.();\n\tconst linkOptions = { linkifyFilePaths: options.linkifyFilePaths, trustHtml: options.trustHtml };\n\t// appending output only supported for scrollable ouputs currently\n\tif (appendedText && options.scrollable) {\n\t\tif (appendScrollableOutput(existingContent, outputInfo.id, appendedText, linkOptions)) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst newContent = createOutputContent(outputInfo.id, outputInfo.text(), options);\n\texistingContent.replaceWith(newContent);\n\twhile (newContent.nextSibling) {\n\t\t// clear out any stale content if we had previously combined streaming outputs into this one\n\t\tnewContent.nextSibling.remove();\n\t}\n\n}\n\n"
  },
  {
    "path": "extensions/notebook-renderers/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"lib\": [\n\t\t\t\"dom\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/npm/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/npm/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"sourceMaps\": true,\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/npm/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"command\": \"npm\",\n\t\"type\": \"shell\",\n\t\"presentation\": {\n\t\t\"reveal\": \"silent\",\n\t},\n\t\"args\": [\"run\", \"compile\"],\n\t\"isBackground\": true,\n\t\"problemMatcher\": \"$tsc-watch\"\n}"
  },
  {
    "path": "extensions/npm/.vscodeignore",
    "content": "src/**\nout/**\ntsconfig.json\n.vscode/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/npm/README.md",
    "content": "# Node npm\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\n### Task Running\n\nThis extension supports running npm scripts defined in the `package.json` as [tasks](https://code.visualstudio.com/docs/editor/tasks). Scripts with the name 'build', 'compile', or 'watch'\nare treated as build tasks.\n\nTo run scripts as tasks, use the **Tasks** menu.\n\nFor more information about auto detection of Tasks, see the [documentation](https://code.visualstudio.com/Docs/editor/tasks#_task-autodetection).\n\n### Script Explorer\n\nThe Npm Script Explorer shows the npm scripts found in your workspace. The explorer view is enabled by the setting `npm.enableScriptExplorer`. A script can be opened, run, or debug from the explorer.\n\n### Run Scripts from the Editor\n\nThe extension supports to run the selected script as a task when editing the `package.json`file. You can either run a script from\nthe hover shown on a script or using the command `Run Selected Npm Script`.\n\n### Run Scripts from a Folder in the Explorer\n\nThe extension supports running a script as a task from a folder in the Explorer. The command  `Run NPM Script in Folder...` shown in the Explorer context menu finds all scripts in `package.json` files that are contained in this folder. You can then select the script to be executed as a task from the resulting list. You enable this support with the `npm.runScriptFromFolder` which is `false` by default.\n\n### Others\n\nThe extension fetches data from <https://registry.npmjs.org> and <https://registry.bower.io> to provide auto-completion and information on hover features on npm dependencies.\n\n## Settings\n\n- `npm.autoDetect` - Enable detecting scripts as tasks, the default is `on`.\n- `npm.runSilent` - Run npm script with the `--silent` option, the default is `false`.\n- `npm.packageManager` - The package manager used to install dependencies: `auto`, `npm`, `yarn`, `pnpm` or `bun`. The default is `auto`, which detects your package manager based on files in your workspace.\n- `npm.scriptRunner` - The script runner used to run the scripts: `auto`, `npm`, `yarn`, `pnpm`, `bun` or `node`. The default is `auto`, which detects your script runner based on files in your workspace.\n- `npm.exclude` - Glob patterns for folders that should be excluded from automatic script detection. The pattern is matched against the **absolute path** of the package.json. For example, to exclude all test folders use '&ast;&ast;/test/&ast;&ast;'.\n- `npm.enableScriptExplorer` - Enable an explorer view for npm scripts.\n- `npm.scriptExplorerAction` - The default click action: `open` or `run`, the default is `open`.\n- `npm.enableRunFromFolder` - Enable running npm scripts from the context menu of folders in Explorer, the default is `false`.\n- `npm.scriptCodeLens.enable` - Enable/disable the code lenses to run a script, the default is `false`.\n"
  },
  {
    "path": "extensions/npm/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nconst config = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/npmBrowserMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'npmBrowserMain.js'\n\t},\n\tresolve: {\n\t\tfallback: {\n\t\t\t'child_process': false\n\t\t}\n\t}\n});\n\nmodule.exports = config;\n"
  },
  {
    "path": "extensions/npm/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/npmMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'npmMain.js',\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main'],\n\t\textensions: ['.ts', '.js'] // support ts-files and js-files\n\t}\n});\n"
  },
  {
    "path": "extensions/npm/package.json",
    "content": "{\n  \"name\": \"npm\",\n  \"publisher\": \"vscode\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.1\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"icon\": \"images/npm_icon.png\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"enabledApiProposals\": [\n    \"terminalQuickFixProvider\"\n  ],\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:npm\",\n    \"watch\": \"npx gulp watch-extension:npm\"\n  },\n  \"dependencies\": {\n    \"find-up\": \"^5.0.0\",\n    \"find-yarn-workspace-root\": \"^2.0.0\",\n    \"jsonc-parser\": \"^3.2.0\",\n    \"minimatch\": \"^5.1.6\",\n    \"request-light\": \"^0.7.0\",\n    \"which\": \"^4.0.0\",\n    \"which-pm\": \"^2.1.1\",\n    \"vscode-uri\": \"^3.0.8\"\n  },\n  \"devDependencies\": {\n    \"@types/minimatch\": \"^5.1.2\",\n    \"@types/node\": \"20.x\",\n    \"@types/which\": \"^3.0.0\"\n  },\n  \"main\": \"./out/npmMain\",\n  \"browser\": \"./dist/browser/npmBrowserMain\",\n  \"activationEvents\": [\n    \"onTaskType:npm\",\n    \"onLanguage:json\",\n    \"workspaceContains:package.json\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": {\n      \"supported\": \"limited\",\n      \"description\": \"%virtualWorkspaces%\"\n    },\n    \"untrustedWorkspaces\": {\n      \"supported\": \"limited\",\n      \"description\": \"%workspaceTrust%\"\n    }\n  },\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"ignore\",\n        \"extensions\": [\n          \".npmignore\"\n        ]\n      },\n      {\n        \"id\": \"properties\",\n        \"extensions\": [\n          \".npmrc\"\n        ]\n      }\n    ],\n    \"views\": {\n      \"explorer\": [\n        {\n          \"id\": \"npm\",\n          \"name\": \"%view.name%\",\n          \"when\": \"npm:showScriptExplorer\",\n          \"icon\": \"$(json)\",\n          \"visibility\": \"hidden\",\n          \"contextualTitle\": \"%view.name%\"\n        }\n      ]\n    },\n    \"commands\": [\n      {\n        \"command\": \"npm.runScript\",\n        \"title\": \"%command.run%\",\n        \"icon\": \"$(run)\"\n      },\n      {\n        \"command\": \"npm.debugScript\",\n        \"title\": \"%command.debug%\",\n        \"icon\": \"$(debug)\"\n      },\n      {\n        \"command\": \"npm.openScript\",\n        \"title\": \"%command.openScript%\"\n      },\n      {\n        \"command\": \"npm.runInstall\",\n        \"title\": \"%command.runInstall%\"\n      },\n      {\n        \"command\": \"npm.refresh\",\n        \"title\": \"%command.refresh%\",\n        \"icon\": \"$(refresh)\"\n      },\n      {\n        \"command\": \"npm.runSelectedScript\",\n        \"title\": \"%command.runSelectedScript%\"\n      },\n      {\n        \"command\": \"npm.runScriptFromFolder\",\n        \"title\": \"%command.runScriptFromFolder%\"\n      },\n      {\n        \"command\": \"npm.packageManager\",\n        \"title\": \"%command.packageManager%\"\n      }\n    ],\n    \"menus\": {\n      \"commandPalette\": [\n        {\n          \"command\": \"npm.refresh\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"npm.runScript\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"npm.debugScript\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"npm.openScript\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"npm.runInstall\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"npm.runSelectedScript\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"npm.runScriptFromFolder\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"npm.packageManager\",\n          \"when\": \"false\"\n        }\n      ],\n      \"editor/context\": [\n        {\n          \"command\": \"npm.runSelectedScript\",\n          \"when\": \"resourceFilename == 'package.json' && resourceScheme == file\",\n          \"group\": \"navigation@+1\"\n        }\n      ],\n      \"view/title\": [\n        {\n          \"command\": \"npm.refresh\",\n          \"when\": \"view == npm\",\n          \"group\": \"navigation\"\n        }\n      ],\n      \"view/item/context\": [\n        {\n          \"command\": \"npm.openScript\",\n          \"when\": \"view == npm && viewItem == packageJSON\",\n          \"group\": \"navigation@1\"\n        },\n        {\n          \"command\": \"npm.runInstall\",\n          \"when\": \"view == npm && viewItem == packageJSON\",\n          \"group\": \"navigation@2\"\n        },\n        {\n          \"command\": \"npm.openScript\",\n          \"when\": \"view == npm && viewItem == script\",\n          \"group\": \"navigation@1\"\n        },\n        {\n          \"command\": \"npm.runScript\",\n          \"when\": \"view == npm && viewItem == script\",\n          \"group\": \"navigation@2\"\n        },\n        {\n          \"command\": \"npm.runScript\",\n          \"when\": \"view == npm && viewItem == script\",\n          \"group\": \"inline\"\n        },\n        {\n          \"command\": \"npm.debugScript\",\n          \"when\": \"view == npm && viewItem == script\",\n          \"group\": \"inline\"\n        },\n        {\n          \"command\": \"npm.debugScript\",\n          \"when\": \"view == npm && viewItem == script\",\n          \"group\": \"navigation@3\"\n        }\n      ],\n      \"explorer/context\": [\n        {\n          \"when\": \"config.npm.enableRunFromFolder && explorerViewletVisible && explorerResourceIsFolder && resourceScheme == file\",\n          \"command\": \"npm.runScriptFromFolder\",\n          \"group\": \"2_workspace\"\n        }\n      ]\n    },\n    \"configuration\": {\n      \"id\": \"npm\",\n      \"type\": \"object\",\n      \"title\": \"Npm\",\n      \"properties\": {\n        \"npm.autoDetect\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"off\",\n            \"on\"\n          ],\n          \"default\": \"on\",\n          \"scope\": \"resource\",\n          \"description\": \"%config.npm.autoDetect%\"\n        },\n        \"npm.runSilent\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"scope\": \"resource\",\n          \"markdownDescription\": \"%config.npm.runSilent%\"\n        },\n        \"npm.packageManager\": {\n          \"scope\": \"resource\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"auto\",\n            \"npm\",\n            \"yarn\",\n            \"pnpm\",\n            \"bun\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.npm.packageManager.auto%\",\n            \"%config.npm.packageManager.npm%\",\n            \"%config.npm.packageManager.yarn%\",\n            \"%config.npm.packageManager.pnpm%\",\n            \"%config.npm.packageManager.bun%\"\n          ],\n          \"default\": \"auto\",\n          \"description\": \"%config.npm.packageManager%\"\n        },\n        \"npm.scriptRunner\": {\n          \"scope\": \"resource\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"auto\",\n            \"npm\",\n            \"yarn\",\n            \"pnpm\",\n            \"bun\",\n            \"node\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.npm.scriptRunner.auto%\",\n            \"%config.npm.scriptRunner.npm%\",\n            \"%config.npm.scriptRunner.yarn%\",\n            \"%config.npm.scriptRunner.pnpm%\",\n            \"%config.npm.scriptRunner.bun%\",\n            \"%config.npm.scriptRunner.node%\"\n          ],\n          \"default\": \"auto\",\n          \"description\": \"%config.npm.scriptRunner%\"\n        },\n        \"npm.exclude\": {\n          \"type\": [\n            \"string\",\n            \"array\"\n          ],\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"%config.npm.exclude%\",\n          \"scope\": \"resource\"\n        },\n        \"npm.enableScriptExplorer\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"scope\": \"resource\",\n          \"deprecationMessage\": \"The NPM Script Explorer is now available in 'Views' menu in the Explorer in all folders.\",\n          \"description\": \"%config.npm.enableScriptExplorer%\"\n        },\n        \"npm.enableRunFromFolder\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"scope\": \"resource\",\n          \"description\": \"%config.npm.enableRunFromFolder%\"\n        },\n        \"npm.scriptExplorerAction\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"open\",\n            \"run\"\n          ],\n          \"markdownDescription\": \"%config.npm.scriptExplorerAction%\",\n          \"scope\": \"window\",\n          \"default\": \"open\"\n        },\n        \"npm.scriptExplorerExclude\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"markdownDescription\": \"%config.npm.scriptExplorerExclude%\",\n          \"scope\": \"resource\",\n          \"default\": []\n        },\n        \"npm.fetchOnlinePackageInfo\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.npm.fetchOnlinePackageInfo%\",\n          \"default\": true,\n          \"scope\": \"window\",\n          \"tags\": [\n            \"usesOnlineServices\"\n          ]\n        },\n        \"npm.scriptHover\": {\n          \"type\": \"boolean\",\n          \"description\": \"%config.npm.scriptHover%\",\n          \"default\": true,\n          \"scope\": \"window\"\n        }\n      }\n    },\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"package.json\",\n        \"url\": \"https://json.schemastore.org/package\"\n      },\n      {\n        \"fileMatch\": \"bower.json\",\n        \"url\": \"https://json.schemastore.org/bower\"\n      }\n    ],\n    \"taskDefinitions\": [\n      {\n        \"type\": \"npm\",\n        \"required\": [\n          \"script\"\n        ],\n        \"properties\": {\n          \"script\": {\n            \"type\": \"string\",\n            \"description\": \"%taskdef.script%\"\n          },\n          \"path\": {\n            \"type\": \"string\",\n            \"description\": \"%taskdef.path%\"\n          }\n        },\n        \"when\": \"shellExecutionSupported\"\n      }\n    ],\n    \"terminalQuickFixes\": [\n      {\n        \"id\": \"ms-vscode.npm-command\",\n        \"commandLineMatcher\": \"npm\",\n        \"commandExitResult\": \"error\",\n        \"outputMatcher\": {\n          \"anchor\": \"bottom\",\n          \"length\": 8,\n          \"lineMatcher\": \"Did you mean (?:this|one of these)\\\\?((?:\\\\n.+?npm .+ #.+)+)\",\n          \"offset\": 2\n        }\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/npm/package.nls.json",
    "content": "{\n\t\"description\": \"Extension to add task support for npm scripts.\",\n\t\"displayName\": \"NPM support for VS Code\",\n\t\"workspaceTrust\": \"This extension executes tasks, which require trust to run.\",\n\t\"virtualWorkspaces\": \"Functionality that requires running the 'npm' command is not available in virtual workspaces.\",\n\t\"config.npm.autoDetect\": \"Controls whether npm scripts should be automatically detected.\",\n\t\"config.npm.runSilent\": \"Run npm commands with the `--silent` option.\",\n\t\"config.npm.packageManager\": \"The package manager used to install dependencies.\",\n\t\"config.npm.packageManager.npm\": \"Use npm as the package manager.\",\n\t\"config.npm.packageManager.yarn\": \"Use yarn as the package manager.\",\n\t\"config.npm.packageManager.pnpm\": \"Use pnpm as the package manager.\",\n\t\"config.npm.packageManager.bun\": \"Use bun as the package manager.\",\n\t\"config.npm.packageManager.auto\": \"Auto-detect which package manager to use based on lock files and installed package managers.\",\n\t\"config.npm.scriptRunner\": \"The script runner used to run scripts.\",\n\t\"config.npm.scriptRunner.npm\": \"Use npm as the script runner.\",\n\t\"config.npm.scriptRunner.yarn\": \"Use yarn as the script runner.\",\n\t\"config.npm.scriptRunner.pnpm\": \"Use pnpm as the script runner.\",\n\t\"config.npm.scriptRunner.bun\": \"Use bun as the script runner.\",\n\t\"config.npm.scriptRunner.node\": \"Use Node.js as the script runner.\",\n\t\"config.npm.scriptRunner.auto\": \"Auto-detect which script runner to use based on lock files and installed package managers.\",\n\t\"config.npm.exclude\": \"Configure glob patterns for folders that should be excluded from automatic script detection.\",\n\t\"config.npm.enableScriptExplorer\": \"Enable an explorer view for npm scripts when there is no top-level 'package.json' file.\",\n\t\"config.npm.scriptExplorerAction\": \"The default click action used in the NPM Scripts Explorer: `open` or `run`, the default is `open`.\",\n\t\"config.npm.scriptExplorerExclude\": \"An array of regular expressions that indicate which scripts should be excluded from the NPM Scripts view.\",\n\t\"config.npm.enableRunFromFolder\": \"Enable running npm scripts contained in a folder from the Explorer context menu.\",\n\t\"config.npm.fetchOnlinePackageInfo\": \"Fetch data from https://registry.npmjs.org and https://registry.bower.io to provide auto-completion and information on hover features on npm dependencies.\",\n\t\"config.npm.scriptHover\": \"Display hover with 'Run' and 'Debug' commands for scripts.\",\n\t\"npm.parseError\": \"Npm task detection: failed to parse the file {0}\",\n\t\"taskdef.script\": \"The npm script to customize.\",\n\t\"taskdef.path\": \"The path to the folder of the package.json file that provides the script. Can be omitted.\",\n\t\"view.name\": \"NPM Scripts\",\n\t\"command.refresh\": \"Refresh\",\n\t\"command.run\": \"Run\",\n\t\"command.debug\": \"Debug\",\n\t\"command.openScript\": \"Open\",\n\t\"command.runInstall\": \"Run Install\",\n\t\"command.runSelectedScript\": \"Run Script\",\n\t\"command.runScriptFromFolder\": \"Run NPM Script in Folder...\",\n\t\"command.packageManager\": \"Get Configured Package Manager\"\n}\n"
  },
  {
    "path": "extensions/npm/src/commands.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nimport {\n\tdetectNpmScriptsForFolder,\n\tfindScriptAtPosition,\n\trunScript,\n\tIFolderTaskItem\n} from './tasks';\n\n\nexport function runSelectedScript(context: vscode.ExtensionContext) {\n\tconst editor = vscode.window.activeTextEditor;\n\tif (!editor) {\n\t\treturn;\n\t}\n\tconst document = editor.document;\n\tconst contents = document.getText();\n\tconst script = findScriptAtPosition(editor.document, contents, editor.selection.anchor);\n\tif (script) {\n\t\trunScript(context, script, document);\n\t} else {\n\t\tconst message = vscode.l10n.t(\"Could not find a valid npm script at the selection.\");\n\t\tvscode.window.showErrorMessage(message);\n\t}\n}\n\nexport async function selectAndRunScriptFromFolder(context: vscode.ExtensionContext, selectedFolders: vscode.Uri[]) {\n\tif (selectedFolders.length === 0) {\n\t\treturn;\n\t}\n\tconst selectedFolder = selectedFolders[0];\n\n\tconst taskList: IFolderTaskItem[] = await detectNpmScriptsForFolder(context, selectedFolder);\n\n\tif (taskList && taskList.length > 0) {\n\t\tconst quickPick = vscode.window.createQuickPick<IFolderTaskItem>();\n\t\tquickPick.placeholder = 'Select an npm script to run in folder';\n\t\tquickPick.items = taskList;\n\n\t\tconst toDispose: vscode.Disposable[] = [];\n\n\t\tconst pickPromise = new Promise<IFolderTaskItem | undefined>((c) => {\n\t\t\ttoDispose.push(quickPick.onDidAccept(() => {\n\t\t\t\ttoDispose.forEach(d => d.dispose());\n\t\t\t\tc(quickPick.selectedItems[0]);\n\t\t\t}));\n\t\t\ttoDispose.push(quickPick.onDidHide(() => {\n\t\t\t\ttoDispose.forEach(d => d.dispose());\n\t\t\t\tc(undefined);\n\t\t\t}));\n\t\t});\n\t\tquickPick.show();\n\t\tconst result = await pickPromise;\n\t\tquickPick.dispose();\n\t\tif (result) {\n\t\t\tvscode.tasks.executeTask(result.task);\n\t\t}\n\t}\n\telse {\n\t\tvscode.window.showInformationMessage(`No npm scripts found in ${selectedFolder.fsPath}`, { modal: true });\n\t}\n}\n"
  },
  {
    "path": "extensions/npm/src/features/bowerJSONContribution.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { MarkdownString, CompletionItemKind, CompletionItem, DocumentSelector, SnippetString, workspace, Uri, l10n } from 'vscode';\nimport { IJSONContribution, ISuggestionsCollector } from './jsonContributions';\nimport { XHRRequest } from 'request-light';\nimport { Location } from 'jsonc-parser';\n\n\nconst USER_AGENT = 'Visual Studio Code';\n\nexport class BowerJSONContribution implements IJSONContribution {\n\n\tprivate topRanked = ['twitter', 'bootstrap', 'angular-1.1.6', 'angular-latest', 'angulerjs', 'd3', 'myjquery', 'jq', 'abcdef1234567890', 'jQuery', 'jquery-1.11.1', 'jquery',\n\t\t'sushi-vanilla-x-data', 'font-awsome', 'Font-Awesome', 'font-awesome', 'fontawesome', 'html5-boilerplate', 'impress.js', 'homebrew',\n\t\t'backbone', 'moment1', 'momentjs', 'moment', 'linux', 'animate.css', 'animate-css', 'reveal.js', 'jquery-file-upload', 'blueimp-file-upload', 'threejs', 'express', 'chosen',\n\t\t'normalize-css', 'normalize.css', 'semantic', 'semantic-ui', 'Semantic-UI', 'modernizr', 'underscore', 'underscore1',\n\t\t'material-design-icons', 'ionic', 'chartjs', 'Chart.js', 'nnnick-chartjs', 'select2-ng', 'select2-dist', 'phantom', 'skrollr', 'scrollr', 'less.js', 'leancss', 'parser-lib',\n\t\t'hui', 'bootstrap-languages', 'async', 'gulp', 'jquery-pjax', 'coffeescript', 'hammer.js', 'ace', 'leaflet', 'jquery-mobile', 'sweetalert', 'typeahead.js', 'soup', 'typehead.js',\n\t\t'sails', 'codeigniter2'];\n\n\tprivate xhr: XHRRequest;\n\n\tpublic constructor(xhr: XHRRequest) {\n\t\tthis.xhr = xhr;\n\t}\n\n\tpublic getDocumentSelector(): DocumentSelector {\n\t\treturn [{ language: 'json', scheme: '*', pattern: '**/bower.json' }, { language: 'json', scheme: '*', pattern: '**/.bower.json' }];\n\t}\n\n\tprivate isEnabled() {\n\t\treturn !!workspace.getConfiguration('npm').get('fetchOnlinePackageInfo');\n\t}\n\n\tpublic collectDefaultSuggestions(_resource: Uri, collector: ISuggestionsCollector): Thenable<any> {\n\t\tconst defaultValue = {\n\t\t\t'name': '${1:name}',\n\t\t\t'description': '${2:description}',\n\t\t\t'authors': ['${3:author}'],\n\t\t\t'version': '${4:1.0.0}',\n\t\t\t'main': '${5:pathToMain}',\n\t\t\t'dependencies': {}\n\t\t};\n\t\tconst proposal = new CompletionItem(l10n.t(\"Default bower.json\"));\n\t\tproposal.kind = CompletionItemKind.Class;\n\t\tproposal.insertText = new SnippetString(JSON.stringify(defaultValue, null, '\\t'));\n\t\tcollector.add(proposal);\n\t\treturn Promise.resolve(null);\n\t}\n\n\tpublic collectPropertySuggestions(_resource: Uri, location: Location, currentWord: string, addValue: boolean, isLast: boolean, collector: ISuggestionsCollector): Thenable<any> | null {\n\t\tif (!this.isEnabled()) {\n\t\t\treturn null;\n\t\t}\n\t\tif ((location.matches(['dependencies']) || location.matches(['devDependencies']))) {\n\t\t\tif (currentWord.length > 0) {\n\t\t\t\tconst queryUrl = 'https://registry.bower.io/packages/search/' + encodeURIComponent(currentWord);\n\n\t\t\t\treturn this.xhr({\n\t\t\t\t\turl: queryUrl,\n\t\t\t\t\theaders: { agent: USER_AGENT }\n\t\t\t\t}).then((success) => {\n\t\t\t\t\tif (success.status === 200) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst obj = JSON.parse(success.responseText);\n\t\t\t\t\t\t\tif (Array.isArray(obj)) {\n\t\t\t\t\t\t\t\tconst results = <{ name: string; description: string }[]>obj;\n\t\t\t\t\t\t\t\tfor (const result of results) {\n\t\t\t\t\t\t\t\t\tconst name = result.name;\n\t\t\t\t\t\t\t\t\tconst description = result.description || '';\n\t\t\t\t\t\t\t\t\tconst insertText = new SnippetString().appendText(JSON.stringify(name));\n\t\t\t\t\t\t\t\t\tif (addValue) {\n\t\t\t\t\t\t\t\t\t\tinsertText.appendText(': ').appendPlaceholder('latest');\n\t\t\t\t\t\t\t\t\t\tif (!isLast) {\n\t\t\t\t\t\t\t\t\t\t\tinsertText.appendText(',');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst proposal = new CompletionItem(name);\n\t\t\t\t\t\t\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\t\t\t\t\t\t\tproposal.insertText = insertText;\n\t\t\t\t\t\t\t\t\tproposal.filterText = JSON.stringify(name);\n\t\t\t\t\t\t\t\t\tproposal.documentation = description;\n\t\t\t\t\t\t\t\t\tcollector.add(proposal);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcollector.setAsIncomplete();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcollector.error(l10n.t(\"Request to the bower repository failed: {0}\", success.responseText));\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}, (error) => {\n\t\t\t\t\tcollector.error(l10n.t(\"Request to the bower repository failed: {0}\", error.responseText));\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.topRanked.forEach((name) => {\n\t\t\t\t\tconst insertText = new SnippetString().appendText(JSON.stringify(name));\n\t\t\t\t\tif (addValue) {\n\t\t\t\t\t\tinsertText.appendText(': ').appendPlaceholder('latest');\n\t\t\t\t\t\tif (!isLast) {\n\t\t\t\t\t\t\tinsertText.appendText(',');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst proposal = new CompletionItem(name);\n\t\t\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\t\t\tproposal.insertText = insertText;\n\t\t\t\t\tproposal.filterText = JSON.stringify(name);\n\t\t\t\t\tproposal.documentation = '';\n\t\t\t\t\tcollector.add(proposal);\n\t\t\t\t});\n\t\t\t\tcollector.setAsIncomplete();\n\t\t\t\treturn Promise.resolve(null);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic collectValueSuggestions(_resource: Uri, location: Location, collector: ISuggestionsCollector): Promise<any> | null {\n\t\tif (!this.isEnabled()) {\n\t\t\treturn null;\n\t\t}\n\t\tif ((location.matches(['dependencies', '*']) || location.matches(['devDependencies', '*']))) {\n\t\t\t// not implemented. Could be do done calling the bower command. Waiting for web API: https://github.com/bower/registry/issues/26\n\t\t\tconst proposal = new CompletionItem(l10n.t(\"latest\"));\n\t\t\tproposal.insertText = new SnippetString('\"${1:latest}\"');\n\t\t\tproposal.filterText = '\"\"';\n\t\t\tproposal.kind = CompletionItemKind.Value;\n\t\t\tproposal.documentation = 'The latest version of the package';\n\t\t\tcollector.add(proposal);\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic resolveSuggestion(_resource: Uri | undefined, item: CompletionItem): Thenable<CompletionItem | null> | null {\n\t\tif (item.kind === CompletionItemKind.Property && item.documentation === '') {\n\n\t\t\tlet label = item.label;\n\t\t\tif (typeof label !== 'string') {\n\t\t\t\tlabel = label.label;\n\t\t\t}\n\n\t\t\treturn this.getInfo(label).then(documentation => {\n\t\t\t\tif (documentation) {\n\t\t\t\t\titem.documentation = documentation;\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t});\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate getInfo(pack: string): Thenable<string | undefined> {\n\t\tconst queryUrl = 'https://registry.bower.io/packages/' + encodeURIComponent(pack);\n\n\t\treturn this.xhr({\n\t\t\turl: queryUrl,\n\t\t\theaders: { agent: USER_AGENT }\n\t\t}).then((success) => {\n\t\t\ttry {\n\t\t\t\tconst obj = JSON.parse(success.responseText);\n\t\t\t\tif (obj && obj.url) {\n\t\t\t\t\tlet url: string = obj.url;\n\t\t\t\t\tif (url.indexOf('git://') === 0) {\n\t\t\t\t\t\turl = url.substring(6);\n\t\t\t\t\t}\n\t\t\t\t\tif (url.length >= 4 && url.substr(url.length - 4) === '.git') {\n\t\t\t\t\t\turl = url.substring(0, url.length - 4);\n\t\t\t\t\t}\n\t\t\t\t\treturn url;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}, () => {\n\t\t\treturn undefined;\n\t\t});\n\t}\n\n\tpublic getInfoContribution(_resource: Uri, location: Location): Thenable<MarkdownString[] | null> | null {\n\t\tif (!this.isEnabled()) {\n\t\t\treturn null;\n\t\t}\n\t\tif ((location.matches(['dependencies', '*']) || location.matches(['devDependencies', '*']))) {\n\t\t\tconst pack = location.path[location.path.length - 1];\n\t\t\tif (typeof pack === 'string') {\n\t\t\t\treturn this.getInfo(pack).then(documentation => {\n\t\t\t\t\tif (documentation) {\n\t\t\t\t\t\tconst str = new MarkdownString();\n\t\t\t\t\t\tstr.appendText(documentation);\n\t\t\t\t\t\treturn [str];\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n"
  },
  {
    "path": "extensions/npm/src/features/date.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { l10n } from 'vscode';\n\n\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst month = day * 30;\nconst year = day * 365;\n\n/**\n * Create a localized of the time between now and the specified date.\n * @param date The date to generate the difference from.\n * @param appendAgoLabel Whether to append the \" ago\" to the end.\n * @param useFullTimeWords Whether to use full words (eg. seconds) instead of\n * shortened (eg. secs).\n * @param disallowNow Whether to disallow the string \"now\" when the difference\n * is less than 30 seconds.\n */\nexport function fromNow(date: number | Date, appendAgoLabel?: boolean, useFullTimeWords?: boolean, disallowNow?: boolean): string {\n\tif (typeof date !== 'number') {\n\t\tdate = date.getTime();\n\t}\n\n\tconst seconds = Math.round((new Date().getTime() - date) / 1000);\n\tif (seconds < -30) {\n\t\treturn l10n.t('in {0}', fromNow(new Date().getTime() + seconds * 1000, false));\n\t}\n\n\tif (!disallowNow && seconds < 30) {\n\t\treturn l10n.t('now');\n\t}\n\n\tlet value: number;\n\tif (seconds < minute) {\n\t\tvalue = seconds;\n\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} second ago', value)\n\t\t\t\t\t: l10n.t('{0} sec ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} seconds ago', value)\n\t\t\t\t\t: l10n.t('{0} secs ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} second', value)\n\t\t\t\t\t: l10n.t('{0} sec', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} seconds', value)\n\t\t\t\t\t: l10n.t('{0} secs', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < hour) {\n\t\tvalue = Math.floor(seconds / minute);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minute ago', value)\n\t\t\t\t\t: l10n.t('{0} min ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minutes ago', value)\n\t\t\t\t\t: l10n.t('{0} mins ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minute', value)\n\t\t\t\t\t: l10n.t('{0} min', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} minutes', value)\n\t\t\t\t\t: l10n.t('{0} mins', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < day) {\n\t\tvalue = Math.floor(seconds / hour);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hour ago', value)\n\t\t\t\t\t: l10n.t('{0} hr ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hours ago', value)\n\t\t\t\t\t: l10n.t('{0} hrs ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hour', value)\n\t\t\t\t\t: l10n.t('{0} hr', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} hours', value)\n\t\t\t\t\t: l10n.t('{0} hrs', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < week) {\n\t\tvalue = Math.floor(seconds / day);\n\t\tif (appendAgoLabel) {\n\t\t\treturn value === 1\n\t\t\t\t? l10n.t('{0} day ago', value)\n\t\t\t\t: l10n.t('{0} days ago', value);\n\t\t} else {\n\t\t\treturn value === 1\n\t\t\t\t? l10n.t('{0} day', value)\n\t\t\t\t: l10n.t('{0} days', value);\n\t\t}\n\t}\n\n\tif (seconds < month) {\n\t\tvalue = Math.floor(seconds / week);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} week ago', value)\n\t\t\t\t\t: l10n.t('{0} wk ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} weeks ago', value)\n\t\t\t\t\t: l10n.t('{0} wks ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} week', value)\n\t\t\t\t\t: l10n.t('{0} wk', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} weeks', value)\n\t\t\t\t\t: l10n.t('{0} wks', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (seconds < year) {\n\t\tvalue = Math.floor(seconds / month);\n\t\tif (appendAgoLabel) {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} month ago', value)\n\t\t\t\t\t: l10n.t('{0} mo ago', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} months ago', value)\n\t\t\t\t\t: l10n.t('{0} mos ago', value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === 1) {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} month', value)\n\t\t\t\t\t: l10n.t('{0} mo', value);\n\t\t\t} else {\n\t\t\t\treturn useFullTimeWords\n\t\t\t\t\t? l10n.t('{0} months', value)\n\t\t\t\t\t: l10n.t('{0} mos', value);\n\t\t\t}\n\t\t}\n\t}\n\n\tvalue = Math.floor(seconds / year);\n\tif (appendAgoLabel) {\n\t\tif (value === 1) {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} year ago', value)\n\t\t\t\t: l10n.t('{0} yr ago', value);\n\t\t} else {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} years ago', value)\n\t\t\t\t: l10n.t('{0} yrs ago', value);\n\t\t}\n\t} else {\n\t\tif (value === 1) {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} year', value)\n\t\t\t\t: l10n.t('{0} yr', value);\n\t\t} else {\n\t\t\treturn useFullTimeWords\n\t\t\t\t? l10n.t('{0} years', value)\n\t\t\t\t: l10n.t('{0} yrs', value);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/npm/src/features/jsonContributions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Location, getLocation, createScanner, SyntaxKind, ScanError, JSONScanner } from 'jsonc-parser';\nimport { BowerJSONContribution } from './bowerJSONContribution';\nimport { PackageJSONContribution } from './packageJSONContribution';\nimport { XHRRequest } from 'request-light';\n\nimport {\n\tCompletionItem, CompletionItemProvider, CompletionList, TextDocument, Position, Hover, HoverProvider,\n\tCancellationToken, Range, DocumentSelector, languages, Disposable, Uri, MarkdownString\n} from 'vscode';\n\nexport interface ISuggestionsCollector {\n\tadd(suggestion: CompletionItem): void;\n\terror(message: string): void;\n\tlog(message: string): void;\n\tsetAsIncomplete(): void;\n}\n\nexport interface IJSONContribution {\n\tgetDocumentSelector(): DocumentSelector;\n\tgetInfoContribution(resourceUri: Uri, location: Location): Thenable<MarkdownString[] | null> | null;\n\tcollectPropertySuggestions(resourceUri: Uri, location: Location, currentWord: string, addValue: boolean, isLast: boolean, result: ISuggestionsCollector): Thenable<any> | null;\n\tcollectValueSuggestions(resourceUri: Uri, location: Location, result: ISuggestionsCollector): Thenable<any> | null;\n\tcollectDefaultSuggestions(resourceUri: Uri, result: ISuggestionsCollector): Thenable<any>;\n\tresolveSuggestion?(resourceUri: Uri | undefined, item: CompletionItem): Thenable<CompletionItem | null> | null;\n}\n\nexport function addJSONProviders(xhr: XHRRequest, npmCommandPath: string | undefined): Disposable {\n\tconst contributions = [new PackageJSONContribution(xhr, npmCommandPath), new BowerJSONContribution(xhr)];\n\tconst subscriptions: Disposable[] = [];\n\tcontributions.forEach(contribution => {\n\t\tconst selector = contribution.getDocumentSelector();\n\t\tsubscriptions.push(languages.registerCompletionItemProvider(selector, new JSONCompletionItemProvider(contribution), '\"', ':'));\n\t\tsubscriptions.push(languages.registerHoverProvider(selector, new JSONHoverProvider(contribution)));\n\t});\n\treturn Disposable.from(...subscriptions);\n}\n\nexport class JSONHoverProvider implements HoverProvider {\n\n\tconstructor(private jsonContribution: IJSONContribution) {\n\t}\n\n\tpublic provideHover(document: TextDocument, position: Position, _token: CancellationToken): Thenable<Hover> | null {\n\t\tconst offset = document.offsetAt(position);\n\t\tconst location = getLocation(document.getText(), offset);\n\t\tif (!location.previousNode) {\n\t\t\treturn null;\n\t\t}\n\t\tconst node = location.previousNode;\n\t\tif (node && node.offset <= offset && offset <= node.offset + node.length) {\n\t\t\tconst promise = this.jsonContribution.getInfoContribution(document.uri, location);\n\t\t\tif (promise) {\n\t\t\t\treturn promise.then(htmlContent => {\n\t\t\t\t\tconst range = new Range(document.positionAt(node.offset), document.positionAt(node.offset + node.length));\n\t\t\t\t\tconst result: Hover = {\n\t\t\t\t\t\tcontents: htmlContent || [],\n\t\t\t\t\t\trange: range\n\t\t\t\t\t};\n\t\t\t\t\treturn result;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport class JSONCompletionItemProvider implements CompletionItemProvider {\n\n\tprivate lastResource: Uri | undefined;\n\n\tconstructor(private jsonContribution: IJSONContribution) {\n\t}\n\n\tpublic resolveCompletionItem(item: CompletionItem, _token: CancellationToken): Thenable<CompletionItem | null> {\n\t\tif (this.jsonContribution.resolveSuggestion) {\n\t\t\tconst resolver = this.jsonContribution.resolveSuggestion(this.lastResource, item);\n\t\t\tif (resolver) {\n\t\t\t\treturn resolver;\n\t\t\t}\n\t\t}\n\t\treturn Promise.resolve(item);\n\t}\n\n\tpublic provideCompletionItems(document: TextDocument, position: Position, _token: CancellationToken): Thenable<CompletionList | null> | null {\n\t\tthis.lastResource = document.uri;\n\n\n\t\tconst currentWord = this.getCurrentWord(document, position);\n\t\tlet overwriteRange: Range;\n\n\t\tconst items: CompletionItem[] = [];\n\t\tlet isIncomplete = false;\n\n\t\tconst offset = document.offsetAt(position);\n\t\tconst location = getLocation(document.getText(), offset);\n\n\t\tconst node = location.previousNode;\n\t\tif (node && node.offset <= offset && offset <= node.offset + node.length && (node.type === 'property' || node.type === 'string' || node.type === 'number' || node.type === 'boolean' || node.type === 'null')) {\n\t\t\toverwriteRange = new Range(document.positionAt(node.offset), document.positionAt(node.offset + node.length));\n\t\t} else {\n\t\t\toverwriteRange = new Range(document.positionAt(offset - currentWord.length), position);\n\t\t}\n\n\t\tconst proposed: { [key: string]: boolean } = {};\n\t\tconst collector: ISuggestionsCollector = {\n\t\t\tadd: (suggestion: CompletionItem) => {\n\t\t\t\tconst key = typeof suggestion.label === 'string'\n\t\t\t\t\t? suggestion.label\n\t\t\t\t\t: suggestion.label.label;\n\t\t\t\tif (!proposed[key]) {\n\t\t\t\t\tproposed[key] = true;\n\t\t\t\t\tsuggestion.range = { replacing: overwriteRange, inserting: new Range(overwriteRange.start, overwriteRange.start) };\n\t\t\t\t\titems.push(suggestion);\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetAsIncomplete: () => isIncomplete = true,\n\t\t\terror: (message: string) => console.error(message),\n\t\t\tlog: (message: string) => console.log(message)\n\t\t};\n\n\t\tlet collectPromise: Thenable<any> | null = null;\n\n\t\tif (location.isAtPropertyKey) {\n\t\t\tconst scanner = createScanner(document.getText(), true);\n\t\t\tconst addValue = !location.previousNode || !this.hasColonAfter(scanner, location.previousNode.offset + location.previousNode.length);\n\t\t\tconst isLast = this.isLast(scanner, document.offsetAt(position));\n\t\t\tcollectPromise = this.jsonContribution.collectPropertySuggestions(document.uri, location, currentWord, addValue, isLast, collector);\n\t\t} else {\n\t\t\tif (location.path.length === 0) {\n\t\t\t\tcollectPromise = this.jsonContribution.collectDefaultSuggestions(document.uri, collector);\n\t\t\t} else {\n\t\t\t\tcollectPromise = this.jsonContribution.collectValueSuggestions(document.uri, location, collector);\n\t\t\t}\n\t\t}\n\t\tif (collectPromise) {\n\t\t\treturn collectPromise.then(() => {\n\t\t\t\tif (items.length > 0 || isIncomplete) {\n\t\t\t\t\treturn new CompletionList(items, isIncomplete);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t});\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate getCurrentWord(document: TextDocument, position: Position) {\n\t\tlet i = position.character - 1;\n\t\tconst text = document.lineAt(position.line).text;\n\t\twhile (i >= 0 && ' \\t\\n\\r\\v\":{[,'.indexOf(text.charAt(i)) === -1) {\n\t\t\ti--;\n\t\t}\n\t\treturn text.substring(i + 1, position.character);\n\t}\n\n\tprivate isLast(scanner: JSONScanner, offset: number): boolean {\n\t\tscanner.setPosition(offset);\n\t\tlet nextToken = scanner.scan();\n\t\tif (nextToken === SyntaxKind.StringLiteral && scanner.getTokenError() === ScanError.UnexpectedEndOfString) {\n\t\t\tnextToken = scanner.scan();\n\t\t}\n\t\treturn nextToken === SyntaxKind.CloseBraceToken || nextToken === SyntaxKind.EOF;\n\t}\n\tprivate hasColonAfter(scanner: JSONScanner, offset: number): boolean {\n\t\tscanner.setPosition(offset);\n\t\treturn scanner.scan() === SyntaxKind.ColonToken;\n\t}\n\n}\n\nexport const xhrDisabled = () => Promise.reject({ responseText: 'Use of online resources is disabled.' });\n"
  },
  {
    "path": "extensions/npm/src/features/packageJSONContribution.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CompletionItemKind, CompletionItem, DocumentSelector, SnippetString, workspace, MarkdownString, Uri, l10n } from 'vscode';\nimport { IJSONContribution, ISuggestionsCollector } from './jsonContributions';\nimport { XHRRequest } from 'request-light';\nimport { Location } from 'jsonc-parser';\n\nimport * as cp from 'child_process';\nimport { dirname } from 'path';\nimport { fromNow } from './date';\n\nconst LIMIT = 40;\n\nconst USER_AGENT = 'Visual Studio Code';\n\nexport class PackageJSONContribution implements IJSONContribution {\n\n\tprivate mostDependedOn = ['lodash', 'async', 'underscore', 'request', 'commander', 'express', 'debug', 'chalk', 'colors', 'q', 'coffee-script',\n\t\t'mkdirp', 'optimist', 'through2', 'yeoman-generator', 'moment', 'bluebird', 'glob', 'gulp-util', 'minimist', 'cheerio', 'pug', 'redis', 'node-uuid',\n\t\t'socket', 'io', 'uglify-js', 'winston', 'through', 'fs-extra', 'handlebars', 'body-parser', 'rimraf', 'mime', 'semver', 'mongodb', 'jquery',\n\t\t'grunt', 'connect', 'yosay', 'underscore', 'string', 'xml2js', 'ejs', 'mongoose', 'marked', 'extend', 'mocha', 'superagent', 'js-yaml', 'xtend',\n\t\t'shelljs', 'gulp', 'yargs', 'browserify', 'minimatch', 'react', 'less', 'prompt', 'inquirer', 'ws', 'event-stream', 'inherits', 'mysql', 'esprima',\n\t\t'jsdom', 'stylus', 'when', 'readable-stream', 'aws-sdk', 'concat-stream', 'chai', 'Thenable', 'wrench'];\n\n\tprivate knownScopes = ['@types', '@angular', '@babel', '@nuxtjs', '@vue', '@bazel'];\n\n\tpublic getDocumentSelector(): DocumentSelector {\n\t\treturn [{ language: 'json', scheme: '*', pattern: '**/package.json' }];\n\t}\n\n\tpublic constructor(private xhr: XHRRequest, private npmCommandPath: string | undefined) {\n\t}\n\n\tpublic collectDefaultSuggestions(_resource: Uri, result: ISuggestionsCollector): Thenable<any> {\n\t\tconst defaultValue = {\n\t\t\t'name': '${1:name}',\n\t\t\t'description': '${2:description}',\n\t\t\t'authors': '${3:author}',\n\t\t\t'version': '${4:1.0.0}',\n\t\t\t'main': '${5:pathToMain}',\n\t\t\t'dependencies': {}\n\t\t};\n\t\tconst proposal = new CompletionItem(l10n.t(\"Default package.json\"));\n\t\tproposal.kind = CompletionItemKind.Module;\n\t\tproposal.insertText = new SnippetString(JSON.stringify(defaultValue, null, '\\t'));\n\t\tresult.add(proposal);\n\t\treturn Promise.resolve(null);\n\t}\n\n\tprivate isEnabled() {\n\t\treturn this.npmCommandPath || this.onlineEnabled();\n\t}\n\n\tprivate onlineEnabled() {\n\t\treturn !!workspace.getConfiguration('npm').get('fetchOnlinePackageInfo');\n\t}\n\n\tpublic collectPropertySuggestions(\n\t\t_resource: Uri,\n\t\tlocation: Location,\n\t\tcurrentWord: string,\n\t\taddValue: boolean,\n\t\tisLast: boolean,\n\t\tcollector: ISuggestionsCollector\n\t): Thenable<any> | null {\n\t\tif (!this.isEnabled()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ((location.matches(['dependencies']) || location.matches(['devDependencies']) || location.matches(['optionalDependencies']) || location.matches(['peerDependencies']))) {\n\t\t\tlet queryUrl: string;\n\t\t\tif (currentWord.length > 0) {\n\t\t\t\tif (currentWord[0] === '@') {\n\t\t\t\t\tif (currentWord.indexOf('/') !== -1) {\n\t\t\t\t\t\treturn this.collectScopedPackages(currentWord, addValue, isLast, collector);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const scope of this.knownScopes) {\n\t\t\t\t\t\tconst proposal = new CompletionItem(scope);\n\t\t\t\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\t\t\t\tproposal.insertText = new SnippetString().appendText(`\"${scope}/`).appendTabstop().appendText('\"');\n\t\t\t\t\t\tproposal.filterText = JSON.stringify(scope);\n\t\t\t\t\t\tproposal.documentation = '';\n\t\t\t\t\t\tproposal.command = {\n\t\t\t\t\t\t\ttitle: '',\n\t\t\t\t\t\t\tcommand: 'editor.action.triggerSuggest'\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcollector.add(proposal);\n\t\t\t\t\t}\n\t\t\t\t\tcollector.setAsIncomplete();\n\t\t\t\t}\n\n\t\t\t\tqueryUrl = `https://registry.npmjs.org/-/v1/search?size=${LIMIT}&text=${encodeURIComponent(currentWord)}`;\n\t\t\t\treturn this.xhr({\n\t\t\t\t\turl: queryUrl,\n\t\t\t\t\theaders: { agent: USER_AGENT }\n\t\t\t\t}).then((success) => {\n\t\t\t\t\tif (success.status === 200) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst obj = JSON.parse(success.responseText);\n\t\t\t\t\t\t\tif (obj && obj.objects && Array.isArray(obj.objects)) {\n\t\t\t\t\t\t\t\tconst results = <{ package: SearchPackageInfo }[]>obj.objects;\n\t\t\t\t\t\t\t\tfor (const result of results) {\n\t\t\t\t\t\t\t\t\tthis.processPackage(result.package, addValue, isLast, collector);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcollector.setAsIncomplete();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcollector.error(l10n.t(\"Request to the NPM repository failed: {0}\", success.responseText));\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}, (error) => {\n\t\t\t\t\tcollector.error(l10n.t(\"Request to the NPM repository failed: {0}\", error.responseText));\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.mostDependedOn.forEach((name) => {\n\t\t\t\t\tconst insertText = new SnippetString().appendText(JSON.stringify(name));\n\t\t\t\t\tif (addValue) {\n\t\t\t\t\t\tinsertText.appendText(': \"').appendTabstop().appendText('\"');\n\t\t\t\t\t\tif (!isLast) {\n\t\t\t\t\t\t\tinsertText.appendText(',');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst proposal = new CompletionItem(name);\n\t\t\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\t\t\tproposal.insertText = insertText;\n\t\t\t\t\tproposal.filterText = JSON.stringify(name);\n\t\t\t\t\tproposal.documentation = '';\n\t\t\t\t\tcollector.add(proposal);\n\t\t\t\t});\n\t\t\t\tthis.collectScopedPackages(currentWord, addValue, isLast, collector);\n\t\t\t\tcollector.setAsIncomplete();\n\t\t\t\treturn Promise.resolve(null);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate collectScopedPackages(currentWord: string, addValue: boolean, isLast: boolean, collector: ISuggestionsCollector): Thenable<any> {\n\t\tconst segments = currentWord.split('/');\n\t\tif (segments.length === 2 && segments[0].length > 1) {\n\t\t\tconst scope = segments[0].substr(1);\n\t\t\tlet name = segments[1];\n\t\t\tif (name.length < 4) {\n\t\t\t\tname = '';\n\t\t\t}\n\t\t\tconst queryUrl = `https://registry.npmjs.com/-/v1/search?text=scope:${scope}%20${name}&size=250`;\n\t\t\treturn this.xhr({\n\t\t\t\turl: queryUrl,\n\t\t\t\theaders: { agent: USER_AGENT }\n\t\t\t}).then((success) => {\n\t\t\t\tif (success.status === 200) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst obj = JSON.parse(success.responseText);\n\t\t\t\t\t\tif (obj && Array.isArray(obj.objects)) {\n\t\t\t\t\t\t\tconst objects = <{ package: SearchPackageInfo }[]>obj.objects;\n\t\t\t\t\t\t\tfor (const object of objects) {\n\t\t\t\t\t\t\t\tthis.processPackage(object.package, addValue, isLast, collector);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t\tcollector.setAsIncomplete();\n\t\t\t\t} else {\n\t\t\t\t\tcollector.error(l10n.t(\"Request to the NPM repository failed: {0}\", success.responseText));\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve(null);\n\t}\n\n\tpublic async collectValueSuggestions(resource: Uri, location: Location, result: ISuggestionsCollector): Promise<any> {\n\t\tif (!this.isEnabled()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ((location.matches(['dependencies', '*']) || location.matches(['devDependencies', '*']) || location.matches(['optionalDependencies', '*']) || location.matches(['peerDependencies', '*']))) {\n\t\t\tconst currentKey = location.path[location.path.length - 1];\n\t\t\tif (typeof currentKey === 'string') {\n\t\t\t\tconst info = await this.fetchPackageInfo(currentKey, resource);\n\t\t\t\tif (info && info.version) {\n\n\t\t\t\t\tlet name = JSON.stringify(info.version);\n\t\t\t\t\tlet proposal = new CompletionItem(name);\n\t\t\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\t\t\tproposal.insertText = name;\n\t\t\t\t\tproposal.documentation = l10n.t(\"The currently latest version of the package\");\n\t\t\t\t\tresult.add(proposal);\n\n\t\t\t\t\tname = JSON.stringify('^' + info.version);\n\t\t\t\t\tproposal = new CompletionItem(name);\n\t\t\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\t\t\tproposal.insertText = name;\n\t\t\t\t\tproposal.documentation = l10n.t(\"Matches the most recent major version (1.x.x)\");\n\t\t\t\t\tresult.add(proposal);\n\n\t\t\t\t\tname = JSON.stringify('~' + info.version);\n\t\t\t\t\tproposal = new CompletionItem(name);\n\t\t\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\t\t\tproposal.insertText = name;\n\t\t\t\t\tproposal.documentation = l10n.t(\"Matches the most recent minor version (1.2.x)\");\n\t\t\t\t\tresult.add(proposal);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate getDocumentation(description: string | undefined, version: string | undefined, time: string | undefined, homepage: string | undefined): MarkdownString {\n\t\tconst str = new MarkdownString();\n\t\tif (description) {\n\t\t\tstr.appendText(description);\n\t\t}\n\t\tif (version) {\n\t\t\tstr.appendText('\\n\\n');\n\t\t\tstr.appendText(time ? l10n.t(\"Latest version: {0} published {1}\", version, fromNow(Date.parse(time), true, true)) : l10n.t(\"Latest version: {0}\", version));\n\t\t}\n\t\tif (homepage) {\n\t\t\tstr.appendText('\\n\\n');\n\t\t\tstr.appendText(homepage);\n\t\t}\n\t\treturn str;\n\t}\n\n\tpublic resolveSuggestion(resource: Uri | undefined, item: CompletionItem): Thenable<CompletionItem | null> | null {\n\t\tif (item.kind === CompletionItemKind.Property && !item.documentation) {\n\n\t\t\tlet name = item.label;\n\t\t\tif (typeof name !== 'string') {\n\t\t\t\tname = name.label;\n\t\t\t}\n\n\t\t\treturn this.fetchPackageInfo(name, resource).then(info => {\n\t\t\t\tif (info) {\n\t\t\t\t\titem.documentation = this.getDocumentation(info.description, info.version, info.time, info.homepage);\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t});\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate isValidNPMName(name: string): boolean {\n\t\t// following rules from https://github.com/npm/validate-npm-package-name,\n\t\t// leading slash added as additional security measure\n\t\tif (!name || name.length > 214 || name.match(/^[-_.\\s]/)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst match = name.match(/^(?:@([^/~\\s)('!*]+?)[/])?([^/~)('!*\\s]+?)$/);\n\t\tif (match) {\n\t\t\tconst scope = match[1];\n\t\t\tif (scope && encodeURIComponent(scope) !== scope) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst name = match[2];\n\t\t\treturn encodeURIComponent(name) === name;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate async fetchPackageInfo(pack: string, resource: Uri | undefined): Promise<ViewPackageInfo | undefined> {\n\t\tif (!this.isValidNPMName(pack)) {\n\t\t\treturn undefined; // avoid unnecessary lookups\n\t\t}\n\t\tlet info: ViewPackageInfo | undefined;\n\t\tif (this.npmCommandPath) {\n\t\t\tinfo = await this.npmView(this.npmCommandPath, pack, resource);\n\t\t}\n\t\tif (!info && this.onlineEnabled()) {\n\t\t\tinfo = await this.npmjsView(pack);\n\t\t}\n\t\treturn info;\n\t}\n\n\tprivate npmView(npmCommandPath: string, pack: string, resource: Uri | undefined): Promise<ViewPackageInfo | undefined> {\n\t\treturn new Promise((resolve, _reject) => {\n\t\t\tconst args = ['view', '--json', '--', pack, 'description', 'dist-tags.latest', 'homepage', 'version', 'time'];\n\t\t\tconst cwd = resource && resource.scheme === 'file' ? dirname(resource.fsPath) : undefined;\n\n\t\t\t// corepack npm wrapper would automatically update package.json. disable that behavior.\n\t\t\t// COREPACK_ENABLE_AUTO_PIN disables the package.json overwrite, and\n\t\t\t// COREPACK_ENABLE_PROJECT_SPEC makes the npm view command succeed\n\t\t\t//   even if packageManager specified a package manager other than npm.\n\t\t\tconst env = { ...process.env, COREPACK_ENABLE_AUTO_PIN: '0', COREPACK_ENABLE_PROJECT_SPEC: '0' };\n\t\t\tlet options: cp.ExecFileOptions = { cwd, env };\n\t\t\tlet commandPath: string = npmCommandPath;\n\t\t\tif (process.platform === 'win32') {\n\t\t\t\toptions = { cwd, env, shell: true };\n\t\t\t\tcommandPath = `\"${npmCommandPath}\"`;\n\t\t\t}\n\t\t\tcp.execFile(commandPath, args, options, (error, stdout) => {\n\t\t\t\tif (!error) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst content = JSON.parse(stdout);\n\t\t\t\t\t\tconst version = content['dist-tags.latest'] || content['version'];\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tdescription: content['description'],\n\t\t\t\t\t\t\tversion,\n\t\t\t\t\t\t\ttime: content.time?.[version],\n\t\t\t\t\t\t\thomepage: content['homepage']\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresolve(undefined);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async npmjsView(pack: string): Promise<ViewPackageInfo | undefined> {\n\t\tconst queryUrl = 'https://registry.npmjs.org/' + encodeURIComponent(pack);\n\t\ttry {\n\t\t\tconst success = await this.xhr({\n\t\t\t\turl: queryUrl,\n\t\t\t\theaders: { agent: USER_AGENT }\n\t\t\t});\n\t\t\tconst obj = JSON.parse(success.responseText);\n\t\t\tconst version = obj['dist-tags']?.latest || Object.keys(obj.versions).pop() || '';\n\t\t\treturn {\n\t\t\t\tdescription: obj.description || '',\n\t\t\t\tversion,\n\t\t\t\ttime: obj.time?.[version],\n\t\t\t\thomepage: obj.homepage || ''\n\t\t\t};\n\t\t}\n\t\tcatch (e) {\n\t\t\t//ignore\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic getInfoContribution(resource: Uri, location: Location): Thenable<MarkdownString[] | null> | null {\n\t\tif (!this.isEnabled()) {\n\t\t\treturn null;\n\t\t}\n\t\tif ((location.matches(['dependencies', '*']) || location.matches(['devDependencies', '*']) || location.matches(['optionalDependencies', '*']) || location.matches(['peerDependencies', '*']))) {\n\t\t\tconst pack = location.path[location.path.length - 1];\n\t\t\tif (typeof pack === 'string') {\n\t\t\t\treturn this.fetchPackageInfo(pack, resource).then(info => {\n\t\t\t\t\tif (info) {\n\t\t\t\t\t\treturn [this.getDocumentation(info.description, info.version, info.time, info.homepage)];\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate processPackage(pack: SearchPackageInfo, addValue: boolean, isLast: boolean, collector: ISuggestionsCollector) {\n\t\tif (pack && pack.name) {\n\t\t\tconst name = pack.name;\n\t\t\tconst insertText = new SnippetString().appendText(JSON.stringify(name));\n\t\t\tif (addValue) {\n\t\t\t\tinsertText.appendText(': \"');\n\t\t\t\tif (pack.version) {\n\t\t\t\t\tinsertText.appendVariable('version', pack.version);\n\t\t\t\t} else {\n\t\t\t\t\tinsertText.appendTabstop();\n\t\t\t\t}\n\t\t\t\tinsertText.appendText('\"');\n\t\t\t\tif (!isLast) {\n\t\t\t\t\tinsertText.appendText(',');\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst proposal = new CompletionItem(name);\n\t\t\tproposal.kind = CompletionItemKind.Property;\n\t\t\tproposal.insertText = insertText;\n\t\t\tproposal.filterText = JSON.stringify(name);\n\t\t\tproposal.documentation = this.getDocumentation(pack.description, pack.version, undefined, pack?.links?.homepage);\n\t\t\tcollector.add(proposal);\n\t\t}\n\t}\n}\n\ninterface SearchPackageInfo {\n\tname: string;\n\tdescription?: string;\n\tversion?: string;\n\tlinks?: { homepage?: string };\n}\n\ninterface ViewPackageInfo {\n\tdescription: string;\n\tversion?: string;\n\ttime?: string;\n\thomepage?: string;\n}\n"
  },
  {
    "path": "extensions/npm/src/npmBrowserMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as httpRequest from 'request-light';\nimport * as vscode from 'vscode';\nimport { addJSONProviders } from './features/jsonContributions';\n\nexport async function activate(context: vscode.ExtensionContext): Promise<void> {\n\tcontext.subscriptions.push(addJSONProviders(httpRequest.xhr, undefined));\n}\n\nexport function deactivate(): void {\n}\n"
  },
  {
    "path": "extensions/npm/src/npmMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as httpRequest from 'request-light';\nimport * as vscode from 'vscode';\nimport { addJSONProviders } from './features/jsonContributions';\nimport { runSelectedScript, selectAndRunScriptFromFolder } from './commands';\nimport { NpmScriptsTreeDataProvider } from './npmView';\nimport { getScriptRunner, getPackageManager, invalidateTasksCache, NpmTaskProvider, hasPackageJson } from './tasks';\nimport { invalidateHoverScriptsCache, NpmScriptHoverProvider } from './scriptHover';\nimport { NpmScriptLensProvider } from './npmScriptLens';\nimport which from 'which';\n\nlet treeDataProvider: NpmScriptsTreeDataProvider | undefined;\n\nfunction invalidateScriptCaches() {\n\tinvalidateHoverScriptsCache();\n\tinvalidateTasksCache();\n\tif (treeDataProvider) {\n\t\ttreeDataProvider.refresh();\n\t}\n}\n\nexport async function activate(context: vscode.ExtensionContext): Promise<void> {\n\tconfigureHttpRequest();\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(e => {\n\t\tif (e.affectsConfiguration('http.proxy') || e.affectsConfiguration('http.proxyStrictSSL')) {\n\t\t\tconfigureHttpRequest();\n\t\t}\n\t}));\n\n\tconst npmCommandPath = await getNPMCommandPath();\n\tcontext.subscriptions.push(addJSONProviders(httpRequest.xhr, npmCommandPath));\n\tregisterTaskProvider(context);\n\n\ttreeDataProvider = registerExplorer(context);\n\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => {\n\t\tif (e.affectsConfiguration('npm.exclude') || e.affectsConfiguration('npm.autoDetect') || e.affectsConfiguration('npm.scriptExplorerExclude') || e.affectsConfiguration('npm.runSilent') || e.affectsConfiguration('npm.packageManager') || e.affectsConfiguration('npm.scriptRunner')) {\n\t\t\tinvalidateTasksCache();\n\t\t\tif (treeDataProvider) {\n\t\t\t\ttreeDataProvider.refresh();\n\t\t\t}\n\t\t}\n\t\tif (e.affectsConfiguration('npm.scriptExplorerAction')) {\n\t\t\tif (treeDataProvider) {\n\t\t\t\ttreeDataProvider.refresh();\n\t\t\t}\n\t\t}\n\t}));\n\n\tregisterHoverProvider(context);\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('npm.runSelectedScript', runSelectedScript));\n\n\tif (await hasPackageJson()) {\n\t\tvscode.commands.executeCommand('setContext', 'npm:showScriptExplorer', true);\n\t}\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('npm.runScriptFromFolder', selectAndRunScriptFromFolder));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('npm.refresh', () => {\n\t\tinvalidateScriptCaches();\n\t}));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('npm.scriptRunner', (args) => {\n\t\tif (args instanceof vscode.Uri) {\n\t\t\treturn getScriptRunner(args, context, true);\n\t\t}\n\t\treturn '';\n\t}));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('npm.packageManager', (args) => {\n\t\tif (args instanceof vscode.Uri) {\n\t\t\treturn getPackageManager(args, context, true);\n\t\t}\n\t\treturn '';\n\t}));\n\tcontext.subscriptions.push(new NpmScriptLensProvider());\n\n\tcontext.subscriptions.push(vscode.window.registerTerminalQuickFixProvider('ms-vscode.npm-command', {\n\t\tprovideTerminalQuickFixes({ outputMatch }) {\n\t\t\tif (!outputMatch) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lines = outputMatch.regexMatch[1];\n\t\t\tconst fixes: vscode.TerminalQuickFixTerminalCommand[] = [];\n\t\t\tfor (const line of lines.split('\\n')) {\n\t\t\t\t// search from the second char, since the lines might be prefixed with\n\t\t\t\t// \"npm ERR!\" which comes before the actual command suggestion.\n\t\t\t\tconst begin = line.indexOf('npm', 1);\n\t\t\t\tif (begin === -1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst end = line.lastIndexOf('#');\n\t\t\t\tfixes.push({ terminalCommand: line.slice(begin, end === -1 ? undefined : end - 1) });\n\t\t\t}\n\n\t\t\treturn fixes;\n\t\t},\n\t}));\n}\n\nasync function getNPMCommandPath(): Promise<string | undefined> {\n\tif (vscode.workspace.isTrusted && canRunNpmInCurrentWorkspace()) {\n\t\ttry {\n\t\t\treturn await which(process.platform === 'win32' ? 'npm.cmd' : 'npm');\n\t\t} catch (e) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction canRunNpmInCurrentWorkspace() {\n\tif (vscode.workspace.workspaceFolders) {\n\t\treturn vscode.workspace.workspaceFolders.some(f => f.uri.scheme === 'file');\n\t}\n\treturn false;\n}\n\nlet taskProvider: NpmTaskProvider;\nfunction registerTaskProvider(context: vscode.ExtensionContext): vscode.Disposable | undefined {\n\tif (vscode.workspace.workspaceFolders) {\n\t\tconst watcher = vscode.workspace.createFileSystemWatcher('**/package.json');\n\t\twatcher.onDidChange((_e) => invalidateScriptCaches());\n\t\twatcher.onDidDelete((_e) => invalidateScriptCaches());\n\t\twatcher.onDidCreate((_e) => invalidateScriptCaches());\n\t\tcontext.subscriptions.push(watcher);\n\n\t\tconst workspaceWatcher = vscode.workspace.onDidChangeWorkspaceFolders((_e) => invalidateScriptCaches());\n\t\tcontext.subscriptions.push(workspaceWatcher);\n\n\t\ttaskProvider = new NpmTaskProvider(context);\n\t\tconst disposable = vscode.tasks.registerTaskProvider('npm', taskProvider);\n\t\tcontext.subscriptions.push(disposable);\n\t\treturn disposable;\n\t}\n\treturn undefined;\n}\n\nfunction registerExplorer(context: vscode.ExtensionContext): NpmScriptsTreeDataProvider | undefined {\n\tif (vscode.workspace.workspaceFolders) {\n\t\tconst treeDataProvider = new NpmScriptsTreeDataProvider(context, taskProvider!);\n\t\tconst view = vscode.window.createTreeView('npm', { treeDataProvider: treeDataProvider, showCollapseAll: true });\n\t\tcontext.subscriptions.push(view);\n\t\treturn treeDataProvider;\n\t}\n\treturn undefined;\n}\n\nfunction registerHoverProvider(context: vscode.ExtensionContext): NpmScriptHoverProvider | undefined {\n\tif (vscode.workspace.workspaceFolders) {\n\t\tconst npmSelector: vscode.DocumentSelector = {\n\t\t\tlanguage: 'json',\n\t\t\tscheme: 'file',\n\t\t\tpattern: '**/package.json'\n\t\t};\n\t\tconst provider = new NpmScriptHoverProvider(context);\n\t\tcontext.subscriptions.push(vscode.languages.registerHoverProvider(npmSelector, provider));\n\t\treturn provider;\n\t}\n\treturn undefined;\n}\n\nfunction configureHttpRequest() {\n\tconst httpSettings = vscode.workspace.getConfiguration('http');\n\thttpRequest.configure(httpSettings.get<string>('proxy', ''), httpSettings.get<boolean>('proxyStrictSSL', true));\n}\n\nexport function deactivate(): void {\n}\n"
  },
  {
    "path": "extensions/npm/src/npmScriptLens.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport {\n\tCodeLens,\n\tCodeLensProvider,\n\tDisposable,\n\tEventEmitter,\n\tlanguages,\n\tTextDocument,\n\tUri,\n\tworkspace,\n\tl10n\n} from 'vscode';\nimport { readScripts } from './readScripts';\nimport { getRunScriptCommand } from './tasks';\n\n\nconst enum Constants {\n\tConfigKey = 'debug.javascript.codelens.npmScripts',\n}\n\nconst getFreshLensLocation = () => workspace.getConfiguration().get(Constants.ConfigKey);\n\n/**\n * Npm script lens provider implementation. Can show a \"Debug\" text above any\n * npm script, or the npm scripts section.\n */\nexport class NpmScriptLensProvider implements CodeLensProvider, Disposable {\n\tprivate lensLocation = getFreshLensLocation();\n\tprivate readonly changeEmitter = new EventEmitter<void>();\n\tprivate subscriptions: Disposable[] = [];\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly onDidChangeCodeLenses = this.changeEmitter.event;\n\n\tconstructor() {\n\t\tthis.subscriptions.push(\n\t\t\tthis.changeEmitter,\n\t\t\tworkspace.onDidChangeConfiguration(evt => {\n\t\t\t\tif (evt.affectsConfiguration(Constants.ConfigKey)) {\n\t\t\t\t\tthis.lensLocation = getFreshLensLocation();\n\t\t\t\t\tthis.changeEmitter.fire();\n\t\t\t\t}\n\t\t\t}),\n\t\t\tlanguages.registerCodeLensProvider(\n\t\t\t\t{\n\t\t\t\t\tlanguage: 'json',\n\t\t\t\t\tpattern: '**/package.json',\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t)\n\t\t);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic async provideCodeLenses(document: TextDocument): Promise<CodeLens[]> {\n\t\tif (this.lensLocation === 'never') {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst tokens = readScripts(document);\n\t\tif (!tokens) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst title = '$(debug-start) ' + l10n.t(\"Debug\");\n\t\tconst cwd = path.dirname(document.uri.fsPath);\n\t\tif (this.lensLocation === 'top') {\n\t\t\treturn [\n\t\t\t\tnew CodeLens(\n\t\t\t\t\ttokens.location.range,\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\tcommand: 'extension.js-debug.npmScript',\n\t\t\t\t\t\targuments: [cwd],\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\n\t\tif (this.lensLocation === 'all') {\n\t\t\tconst folder = Uri.joinPath(document.uri, '..');\n\t\t\treturn Promise.all(tokens.scripts.map(\n\t\t\t\tasync ({ name, nameRange }) => {\n\t\t\t\t\tconst runScriptCommand = await getRunScriptCommand(name, folder);\n\t\t\t\t\treturn new CodeLens(\n\t\t\t\t\t\tnameRange,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tcommand: 'extension.js-debug.createDebuggerTerminal',\n\t\t\t\t\t\t\targuments: [runScriptCommand.join(' '), workspace.getWorkspaceFolder(document.uri), { cwd }],\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t));\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic dispose() {\n\t\tthis.subscriptions.forEach(s => s.dispose());\n\t}\n}\n"
  },
  {
    "path": "extensions/npm/src/npmView.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as path from 'path';\nimport {\n\tcommands, Event, EventEmitter, ExtensionContext,\n\tRange,\n\tSelection, Task,\n\tTaskGroup, tasks, TextDocument, TextDocumentShowOptions, ThemeIcon, TreeDataProvider, TreeItem, TreeItemLabel, TreeItemCollapsibleState, Uri,\n\twindow, workspace, WorkspaceFolder, Position, Location, l10n\n} from 'vscode';\nimport { readScripts } from './readScripts';\nimport {\n\tcreateInstallationTask, getTaskName, isAutoDetectionEnabled, isWorkspaceFolder, INpmTaskDefinition,\n\tNpmTaskProvider,\n\tstartDebugging,\n\tdetectPackageManager,\n\tITaskWithLocation,\n\tINSTALL_SCRIPT\n} from './tasks';\n\n\nclass Folder extends TreeItem {\n\tpackages: PackageJSON[] = [];\n\tworkspaceFolder: WorkspaceFolder;\n\n\tconstructor(folder: WorkspaceFolder) {\n\t\tsuper(folder.name, TreeItemCollapsibleState.Expanded);\n\t\tthis.contextValue = 'folder';\n\t\tthis.resourceUri = folder.uri;\n\t\tthis.workspaceFolder = folder;\n\t\tthis.iconPath = ThemeIcon.Folder;\n\t}\n\n\taddPackage(packageJson: PackageJSON) {\n\t\tthis.packages.push(packageJson);\n\t}\n}\n\nconst packageName = 'package.json';\n\nclass PackageJSON extends TreeItem {\n\tpath: string;\n\tfolder: Folder;\n\tscripts: NpmScript[] = [];\n\n\tstatic getLabel(relativePath: string): string {\n\t\tif (relativePath.length > 0) {\n\t\t\treturn path.join(relativePath, packageName);\n\t\t}\n\t\treturn packageName;\n\t}\n\n\tconstructor(folder: Folder, relativePath: string) {\n\t\tsuper(PackageJSON.getLabel(relativePath), TreeItemCollapsibleState.Expanded);\n\t\tthis.folder = folder;\n\t\tthis.path = relativePath;\n\t\tthis.contextValue = 'packageJSON';\n\t\tif (relativePath) {\n\t\t\tthis.resourceUri = Uri.file(path.join(folder!.resourceUri!.fsPath, relativePath, packageName));\n\t\t} else {\n\t\t\tthis.resourceUri = Uri.file(path.join(folder!.resourceUri!.fsPath, packageName));\n\t\t}\n\t\tthis.iconPath = ThemeIcon.File;\n\t}\n\n\taddScript(script: NpmScript) {\n\t\tthis.scripts.push(script);\n\t}\n}\n\ntype ExplorerCommands = 'open' | 'run';\n\nclass NpmScript extends TreeItem {\n\ttask: Task;\n\tpackage: PackageJSON;\n\ttaskLocation?: Location;\n\n\tconstructor(_context: ExtensionContext, packageJson: PackageJSON, task: ITaskWithLocation) {\n\t\tconst name = packageJson.path.length > 0\n\t\t\t? task.task.name.substring(0, task.task.name.length - packageJson.path.length - 2)\n\t\t\t: task.task.name;\n\t\tsuper(name, TreeItemCollapsibleState.None);\n\t\tthis.taskLocation = task.location;\n\t\tconst command: ExplorerCommands = name === `${INSTALL_SCRIPT} ` ? 'run' : workspace.getConfiguration('npm').get<ExplorerCommands>('scriptExplorerAction') || 'open';\n\n\t\tconst commandList = {\n\t\t\t'open': {\n\t\t\t\ttitle: 'Edit Script',\n\t\t\t\tcommand: 'vscode.open',\n\t\t\t\targuments: [\n\t\t\t\t\tthis.taskLocation?.uri,\n\t\t\t\t\tthis.taskLocation ?\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tselection: new Range(this.taskLocation.range.start, this.taskLocation.range.start)\n\t\t\t\t\t\t} satisfies TextDocumentShowOptions\n\t\t\t\t\t\t: undefined\n\t\t\t\t]\n\t\t\t},\n\t\t\t'run': {\n\t\t\t\ttitle: 'Run Script',\n\t\t\t\tcommand: 'npm.runScript',\n\t\t\t\targuments: [this]\n\t\t\t}\n\t\t};\n\t\tthis.contextValue = 'script';\n\t\tthis.package = packageJson;\n\t\tthis.task = task.task;\n\t\tthis.command = commandList[command];\n\n\t\tif (this.task.group && this.task.group === TaskGroup.Clean) {\n\t\t\tthis.iconPath = new ThemeIcon('wrench-subaction');\n\t\t} else {\n\t\t\tthis.iconPath = new ThemeIcon('wrench');\n\t\t}\n\t\tif (this.task.detail) {\n\t\t\tthis.tooltip = this.task.detail;\n\t\t\tthis.description = this.task.detail;\n\t\t}\n\t}\n\n\tgetFolder(): WorkspaceFolder {\n\t\treturn this.package.folder.workspaceFolder;\n\t}\n}\n\nclass NoScripts extends TreeItem {\n\tconstructor(message: string) {\n\t\tsuper(message, TreeItemCollapsibleState.None);\n\t\tthis.contextValue = 'noscripts';\n\t}\n}\n\ntype TaskTree = Folder[] | PackageJSON[] | NoScripts[];\n\nexport class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {\n\tprivate taskTree: TaskTree | null = null;\n\tprivate extensionContext: ExtensionContext;\n\tprivate _onDidChangeTreeData: EventEmitter<TreeItem | null> = new EventEmitter<TreeItem | null>();\n\treadonly onDidChangeTreeData: Event<TreeItem | null> = this._onDidChangeTreeData.event;\n\n\tconstructor(private context: ExtensionContext, public taskProvider: NpmTaskProvider) {\n\t\tconst subscriptions = context.subscriptions;\n\t\tthis.extensionContext = context;\n\t\tsubscriptions.push(commands.registerCommand('npm.runScript', this.runScript, this));\n\t\tsubscriptions.push(commands.registerCommand('npm.debugScript', this.debugScript, this));\n\t\tsubscriptions.push(commands.registerCommand('npm.openScript', this.openScript, this));\n\t\tsubscriptions.push(commands.registerCommand('npm.runInstall', this.runInstall, this));\n\t}\n\n\tprivate async runScript(script: NpmScript) {\n\t\t// Call detectPackageManager to trigger the multiple lock files warning.\n\t\tawait detectPackageManager(script.getFolder().uri, this.context, true);\n\t\ttasks.executeTask(script.task);\n\t}\n\n\tprivate async debugScript(script: NpmScript) {\n\t\tstartDebugging(this.extensionContext, script.task.definition.script, path.dirname(script.package.resourceUri!.fsPath), script.getFolder());\n\t}\n\n\tprivate findScriptPosition(document: TextDocument, script?: NpmScript) {\n\t\tconst scripts = readScripts(document);\n\t\tif (!scripts) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!script) {\n\t\t\treturn scripts.location.range.start;\n\t\t}\n\n\t\tconst found = scripts.scripts.find(s => getTaskName(s.name, script.task.definition.path) === script.task.name);\n\t\treturn found?.nameRange.start;\n\t}\n\n\tprivate async runInstall(selection: PackageJSON) {\n\t\tlet uri: Uri | undefined = undefined;\n\t\tif (selection instanceof PackageJSON) {\n\t\t\turi = selection.resourceUri;\n\t\t}\n\t\tif (!uri) {\n\t\t\treturn;\n\t\t}\n\t\tconst task = await createInstallationTask(this.context, selection.folder.workspaceFolder, uri);\n\t\ttasks.executeTask(task);\n\t}\n\n\tprivate async openScript(selection: PackageJSON | NpmScript) {\n\t\tlet uri: Uri | undefined = undefined;\n\t\tif (selection instanceof PackageJSON) {\n\t\t\turi = selection.resourceUri!;\n\t\t} else if (selection instanceof NpmScript) {\n\t\t\turi = selection.package.resourceUri;\n\t\t}\n\t\tif (!uri) {\n\t\t\treturn;\n\t\t}\n\t\tconst document: TextDocument = await workspace.openTextDocument(uri);\n\t\tconst position = this.findScriptPosition(document, selection instanceof NpmScript ? selection : undefined) || new Position(0, 0);\n\t\tawait window.showTextDocument(document, { preserveFocus: true, selection: new Selection(position, position) });\n\t}\n\n\tpublic refresh() {\n\t\tthis.taskTree = null;\n\t\tthis._onDidChangeTreeData.fire(null);\n\t}\n\n\tgetTreeItem(element: TreeItem): TreeItem {\n\t\treturn element;\n\t}\n\n\tgetParent(element: TreeItem): TreeItem | null {\n\t\tif (element instanceof Folder) {\n\t\t\treturn null;\n\t\t}\n\t\tif (element instanceof PackageJSON) {\n\t\t\treturn element.folder;\n\t\t}\n\t\tif (element instanceof NpmScript) {\n\t\t\treturn element.package;\n\t\t}\n\t\tif (element instanceof NoScripts) {\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\t}\n\n\tasync getChildren(element?: TreeItem): Promise<TreeItem[]> {\n\t\tif (!this.taskTree) {\n\t\t\tconst taskItems = await this.taskProvider.tasksWithLocation;\n\t\t\tif (taskItems) {\n\t\t\t\tconst taskTree = this.buildTaskTree(taskItems);\n\t\t\t\tthis.taskTree = this.sortTaskTree(taskTree);\n\t\t\t\tif (this.taskTree.length === 0) {\n\t\t\t\t\tlet message = l10n.t(\"No scripts found.\");\n\t\t\t\t\tif (!isAutoDetectionEnabled()) {\n\t\t\t\t\t\tmessage = l10n.t('The setting \"npm.autoDetect\" is \"off\".');\n\t\t\t\t\t}\n\t\t\t\t\tthis.taskTree = [new NoScripts(message)];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (element instanceof Folder) {\n\t\t\treturn element.packages;\n\t\t}\n\t\tif (element instanceof PackageJSON) {\n\t\t\treturn element.scripts;\n\t\t}\n\t\tif (element instanceof NpmScript) {\n\t\t\treturn [];\n\t\t}\n\t\tif (element instanceof NoScripts) {\n\t\t\treturn [];\n\t\t}\n\t\tif (!element) {\n\t\t\tif (this.taskTree) {\n\t\t\t\treturn this.taskTree;\n\t\t\t}\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate isInstallTask(task: Task): boolean {\n\t\tconst fullName = getTaskName('install', task.definition.path);\n\t\treturn fullName === task.name;\n\t}\n\n\tprivate getTaskTreeItemLabel(taskTreeLabel: string | TreeItemLabel | undefined): string {\n\t\tif (taskTreeLabel === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (typeof taskTreeLabel === 'string') {\n\t\t\treturn taskTreeLabel;\n\t\t}\n\n\t\treturn taskTreeLabel.label;\n\t}\n\n\tprivate sortTaskTree(taskTree: TaskTree) {\n\t\treturn taskTree.sort((first: TreeItem, second: TreeItem) => {\n\t\t\tconst firstLabel = this.getTaskTreeItemLabel(first.label);\n\t\t\tconst secondLabel = this.getTaskTreeItemLabel(second.label);\n\t\t\treturn firstLabel.localeCompare(secondLabel);\n\t\t});\n\t}\n\n\tprivate buildTaskTree(tasks: ITaskWithLocation[]): TaskTree {\n\t\tconst folders: Map<String, Folder> = new Map();\n\t\tconst packages: Map<String, PackageJSON> = new Map();\n\n\t\tlet folder = null;\n\t\tlet packageJson = null;\n\n\t\tconst excludeConfig: Map<string, RegExp[]> = new Map();\n\n\t\ttasks.forEach(each => {\n\t\t\tconst location = each.location;\n\t\t\tif (location && !excludeConfig.has(location.uri.toString())) {\n\t\t\t\tconst regularExpressionsSetting = workspace.getConfiguration('npm', location.uri).get<string[]>('scriptExplorerExclude', []);\n\t\t\t\texcludeConfig.set(location.uri.toString(), regularExpressionsSetting?.map(value => RegExp(value)));\n\t\t\t}\n\t\t\tconst regularExpressions = (location && excludeConfig.has(location.uri.toString())) ? excludeConfig.get(location.uri.toString()) : undefined;\n\n\t\t\tif (regularExpressions && regularExpressions.some((regularExpression) => (<INpmTaskDefinition>each.task.definition).script.match(regularExpression))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isWorkspaceFolder(each.task.scope) && !this.isInstallTask(each.task)) {\n\t\t\t\tfolder = folders.get(each.task.scope.name);\n\t\t\t\tif (!folder) {\n\t\t\t\t\tfolder = new Folder(each.task.scope);\n\t\t\t\t\tfolders.set(each.task.scope.name, folder);\n\t\t\t\t}\n\t\t\t\tconst definition: INpmTaskDefinition = <INpmTaskDefinition>each.task.definition;\n\t\t\t\tconst relativePath = definition.path ? definition.path : '';\n\t\t\t\tconst fullPath = path.join(each.task.scope.name, relativePath);\n\t\t\t\tpackageJson = packages.get(fullPath);\n\t\t\t\tif (!packageJson) {\n\t\t\t\t\tpackageJson = new PackageJSON(folder, relativePath);\n\t\t\t\t\tfolder.addPackage(packageJson);\n\t\t\t\t\tpackages.set(fullPath, packageJson);\n\t\t\t\t}\n\t\t\t\tconst script = new NpmScript(this.extensionContext, packageJson, each);\n\t\t\t\tpackageJson.addScript(script);\n\t\t\t}\n\t\t});\n\t\tif (folders.size === 1) {\n\t\t\treturn [...packages.values()];\n\t\t}\n\t\treturn [...folders.values()];\n\t}\n}\n"
  },
  {
    "path": "extensions/npm/src/preferred-pm.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport findWorkspaceRoot = require('../node_modules/find-yarn-workspace-root');\nimport findUp from 'find-up';\nimport * as path from 'path';\nimport whichPM from 'which-pm';\nimport { Uri, workspace } from 'vscode';\n\ninterface PreferredProperties {\n\tisPreferred: boolean;\n\thasLockfile: boolean;\n}\n\nasync function pathExists(filePath: string) {\n\ttry {\n\t\tawait workspace.fs.stat(Uri.file(filePath));\n\t} catch {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nasync function isBunPreferred(pkgPath: string): Promise<PreferredProperties> {\n\tif (await pathExists(path.join(pkgPath, 'bun.lockb'))) {\n\t\treturn { isPreferred: true, hasLockfile: true };\n\t}\n\n\tif (await pathExists(path.join(pkgPath, 'bun.lock'))) {\n\t\treturn { isPreferred: true, hasLockfile: true };\n\t}\n\n\treturn { isPreferred: false, hasLockfile: false };\n}\n\nasync function isPNPMPreferred(pkgPath: string): Promise<PreferredProperties> {\n\tif (await pathExists(path.join(pkgPath, 'pnpm-lock.yaml'))) {\n\t\treturn { isPreferred: true, hasLockfile: true };\n\t}\n\tif (await pathExists(path.join(pkgPath, 'shrinkwrap.yaml'))) {\n\t\treturn { isPreferred: true, hasLockfile: true };\n\t}\n\tif (await findUp('pnpm-lock.yaml', { cwd: pkgPath })) {\n\t\treturn { isPreferred: true, hasLockfile: true };\n\t}\n\n\treturn { isPreferred: false, hasLockfile: false };\n}\n\nasync function isYarnPreferred(pkgPath: string): Promise<PreferredProperties> {\n\tif (await pathExists(path.join(pkgPath, 'yarn.lock'))) {\n\t\treturn { isPreferred: true, hasLockfile: true };\n\t}\n\n\ttry {\n\t\tif (typeof findWorkspaceRoot(pkgPath) === 'string') {\n\t\t\treturn { isPreferred: true, hasLockfile: false };\n\t\t}\n\t} catch (err) { }\n\n\treturn { isPreferred: false, hasLockfile: false };\n}\n\nasync function isNPMPreferred(pkgPath: string): Promise<PreferredProperties> {\n\tconst lockfileExists = await pathExists(path.join(pkgPath, 'package-lock.json'));\n\treturn { isPreferred: lockfileExists, hasLockfile: lockfileExists };\n}\n\nexport async function findPreferredPM(pkgPath: string): Promise<{ name: string; multipleLockFilesDetected: boolean }> {\n\tconst detectedPackageManagerNames: string[] = [];\n\tconst detectedPackageManagerProperties: PreferredProperties[] = [];\n\n\tconst npmPreferred = await isNPMPreferred(pkgPath);\n\tif (npmPreferred.isPreferred) {\n\t\tdetectedPackageManagerNames.push('npm');\n\t\tdetectedPackageManagerProperties.push(npmPreferred);\n\t}\n\n\tconst pnpmPreferred = await isPNPMPreferred(pkgPath);\n\tif (pnpmPreferred.isPreferred) {\n\t\tdetectedPackageManagerNames.push('pnpm');\n\t\tdetectedPackageManagerProperties.push(pnpmPreferred);\n\t}\n\n\tconst yarnPreferred = await isYarnPreferred(pkgPath);\n\tif (yarnPreferred.isPreferred) {\n\t\tdetectedPackageManagerNames.push('yarn');\n\t\tdetectedPackageManagerProperties.push(yarnPreferred);\n\t}\n\n\tconst bunPreferred = await isBunPreferred(pkgPath);\n\tif (bunPreferred.isPreferred) {\n\t\tdetectedPackageManagerNames.push('bun');\n\t\tdetectedPackageManagerProperties.push(bunPreferred);\n\t}\n\n\tconst pmUsedForInstallation: { name: string } | null = await whichPM(pkgPath);\n\n\tif (pmUsedForInstallation && !detectedPackageManagerNames.includes(pmUsedForInstallation.name)) {\n\t\tdetectedPackageManagerNames.push(pmUsedForInstallation.name);\n\t\tdetectedPackageManagerProperties.push({ isPreferred: true, hasLockfile: false });\n\t}\n\n\tlet lockfilesCount = 0;\n\tdetectedPackageManagerProperties.forEach(detected => lockfilesCount += detected.hasLockfile ? 1 : 0);\n\n\treturn {\n\t\tname: detectedPackageManagerNames[0] || 'npm',\n\t\tmultipleLockFilesDetected: lockfilesCount > 1\n\t};\n}\n"
  },
  {
    "path": "extensions/npm/src/readScripts.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { JSONVisitor, visit } from 'jsonc-parser';\nimport { Location, Position, Range, TextDocument } from 'vscode';\n\nexport interface INpmScriptReference {\n\tname: string;\n\tvalue: string;\n\tnameRange: Range;\n\tvalueRange: Range;\n}\n\nexport interface INpmScriptInfo {\n\tlocation: Location;\n\tscripts: INpmScriptReference[];\n}\n\nexport const readScripts = (document: TextDocument, buffer = document.getText()): INpmScriptInfo | undefined => {\n\tlet start: Position | undefined;\n\tlet end: Position | undefined;\n\tlet inScripts = false;\n\tlet buildingScript: { name: string; nameRange: Range } | void;\n\tlet level = 0;\n\n\tconst scripts: INpmScriptReference[] = [];\n\tconst visitor: JSONVisitor = {\n\t\tonError() {\n\t\t\t// no-op\n\t\t},\n\t\tonObjectBegin() {\n\t\t\tlevel++;\n\t\t},\n\t\tonObjectEnd(offset) {\n\t\t\tif (inScripts) {\n\t\t\t\tend = document.positionAt(offset);\n\t\t\t\tinScripts = false;\n\t\t\t}\n\t\t\tlevel--;\n\t\t},\n\t\tonLiteralValue(value: unknown, offset: number, length: number) {\n\t\t\tif (buildingScript && typeof value === 'string') {\n\t\t\t\tscripts.push({\n\t\t\t\t\t...buildingScript,\n\t\t\t\t\tvalue,\n\t\t\t\t\tvalueRange: new Range(document.positionAt(offset), document.positionAt(offset + length)),\n\t\t\t\t});\n\t\t\t\tbuildingScript = undefined;\n\t\t\t}\n\t\t},\n\t\tonObjectProperty(property: string, offset: number, length: number) {\n\t\t\tif (level === 1 && property === 'scripts') {\n\t\t\t\tinScripts = true;\n\t\t\t\tstart = document.positionAt(offset);\n\t\t\t} else if (inScripts) {\n\t\t\t\tbuildingScript = {\n\t\t\t\t\tname: property,\n\t\t\t\t\tnameRange: new Range(document.positionAt(offset), document.positionAt(offset + length))\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t};\n\n\tvisit(buffer, visitor);\n\n\tif (start === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn { location: new Location(document.uri, new Range(start, end ?? start)), scripts };\n};\n"
  },
  {
    "path": "extensions/npm/src/scriptHover.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { dirname } from 'path';\nimport {\n\tCancellationToken, commands, ExtensionContext,\n\tHover, HoverProvider, MarkdownString, l10n, Position, ProviderResult,\n\ttasks, TextDocument,\n\tUri, workspace\n} from 'vscode';\nimport { INpmScriptInfo, readScripts } from './readScripts';\nimport {\n\tcreateScriptRunnerTask,\n\tstartDebugging\n} from './tasks';\n\n\nlet cachedDocument: Uri | undefined = undefined;\nlet cachedScripts: INpmScriptInfo | undefined = undefined;\n\nexport function invalidateHoverScriptsCache(document?: TextDocument) {\n\tif (!document) {\n\t\tcachedDocument = undefined;\n\t\treturn;\n\t}\n\tif (document.uri === cachedDocument) {\n\t\tcachedDocument = undefined;\n\t}\n}\n\nexport class NpmScriptHoverProvider implements HoverProvider {\n\tprivate enabled: boolean;\n\n\tconstructor(private context: ExtensionContext) {\n\t\tcontext.subscriptions.push(commands.registerCommand('npm.runScriptFromHover', this.runScriptFromHover, this));\n\t\tcontext.subscriptions.push(commands.registerCommand('npm.debugScriptFromHover', this.debugScriptFromHover, this));\n\t\tcontext.subscriptions.push(workspace.onDidChangeTextDocument((e) => {\n\t\t\tinvalidateHoverScriptsCache(e.document);\n\t\t}));\n\n\t\tconst isEnabled = () => workspace.getConfiguration('npm').get<boolean>('scriptHover', true);\n\t\tthis.enabled = isEnabled();\n\t\tcontext.subscriptions.push(workspace.onDidChangeConfiguration((e) => {\n\t\t\tif (e.affectsConfiguration('npm.scriptHover')) {\n\t\t\t\tthis.enabled = isEnabled();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic provideHover(document: TextDocument, position: Position, _token: CancellationToken): ProviderResult<Hover> {\n\t\tif (!this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet hover: Hover | undefined = undefined;\n\n\t\tif (!cachedDocument || cachedDocument.fsPath !== document.uri.fsPath) {\n\t\t\tcachedScripts = readScripts(document);\n\t\t\tcachedDocument = document.uri;\n\t\t}\n\n\t\tcachedScripts?.scripts.forEach(({ name, nameRange }) => {\n\t\t\tif (nameRange.contains(position)) {\n\t\t\t\tconst contents: MarkdownString = new MarkdownString();\n\t\t\t\tcontents.isTrusted = true;\n\t\t\t\tcontents.appendMarkdown(this.createRunScriptMarkdown(name, document.uri));\n\t\t\t\tcontents.appendMarkdown(this.createDebugScriptMarkdown(name, document.uri));\n\t\t\t\thover = new Hover(contents);\n\t\t\t}\n\t\t});\n\t\treturn hover;\n\t}\n\n\tprivate createRunScriptMarkdown(script: string, documentUri: Uri): string {\n\t\tconst args = {\n\t\t\tdocumentUri: documentUri,\n\t\t\tscript: script,\n\t\t};\n\t\treturn this.createMarkdownLink(\n\t\t\tl10n.t(\"Run Script\"),\n\t\t\t'npm.runScriptFromHover',\n\t\t\targs,\n\t\t\tl10n.t(\"Run the script as a task\")\n\t\t);\n\t}\n\n\tprivate createDebugScriptMarkdown(script: string, documentUri: Uri): string {\n\t\tconst args = {\n\t\t\tdocumentUri: documentUri,\n\t\t\tscript: script,\n\t\t};\n\t\treturn this.createMarkdownLink(\n\t\t\tl10n.t(\"Debug Script\"),\n\t\t\t'npm.debugScriptFromHover',\n\t\t\targs,\n\t\t\tl10n.t(\"Runs the script under the debugger\"),\n\t\t\t'|'\n\t\t);\n\t}\n\n\tprivate createMarkdownLink(label: string, cmd: string, args: any, tooltip: string, separator?: string): string {\n\t\tconst encodedArgs = encodeURIComponent(JSON.stringify(args));\n\t\tlet prefix = '';\n\t\tif (separator) {\n\t\t\tprefix = ` ${separator} `;\n\t\t}\n\t\treturn `${prefix}[${label}](command:${cmd}?${encodedArgs} \"${tooltip}\")`;\n\t}\n\n\tpublic async runScriptFromHover(args: any) {\n\t\tconst script = args.script;\n\t\tconst documentUri = args.documentUri;\n\t\tconst folder = workspace.getWorkspaceFolder(documentUri);\n\t\tif (folder) {\n\t\t\tconst task = await createScriptRunnerTask(this.context, script, folder, documentUri);\n\t\t\tawait tasks.executeTask(task);\n\t\t}\n\t}\n\n\tpublic debugScriptFromHover(args: { script: string; documentUri: Uri }) {\n\t\tconst script = args.script;\n\t\tconst documentUri = args.documentUri;\n\t\tconst folder = workspace.getWorkspaceFolder(documentUri);\n\t\tif (folder) {\n\t\t\tstartDebugging(this.context, script, dirname(documentUri.fsPath), folder);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/npm/src/tasks.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n\tTaskDefinition, Task, TaskGroup, WorkspaceFolder, RelativePattern, ShellExecution, Uri, workspace,\n\tTaskProvider, TextDocument, tasks, TaskScope, QuickPickItem, window, Position, ExtensionContext, env,\n\tShellQuotedString, ShellQuoting, commands, Location, CancellationTokenSource, l10n\n} from 'vscode';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport minimatch from 'minimatch';\nimport { Utils } from 'vscode-uri';\nimport { findPreferredPM } from './preferred-pm';\nimport { readScripts } from './readScripts';\n\nconst excludeRegex = new RegExp('^(node_modules|.vscode-test)$', 'i');\n\nexport interface INpmTaskDefinition extends TaskDefinition {\n\tscript: string;\n\tpath?: string;\n}\n\nexport interface IFolderTaskItem extends QuickPickItem {\n\tlabel: string;\n\ttask: Task;\n}\n\ntype AutoDetect = 'on' | 'off';\n\nlet cachedTasks: ITaskWithLocation[] | undefined = undefined;\n\nexport const INSTALL_SCRIPT = 'install';\n\nexport interface ITaskLocation {\n\tdocument: Uri;\n\tline: Position;\n}\n\nexport interface ITaskWithLocation {\n\ttask: Task;\n\tlocation?: Location;\n}\n\nexport class NpmTaskProvider implements TaskProvider {\n\n\tconstructor(private context: ExtensionContext) {\n\t}\n\n\tget tasksWithLocation(): Promise<ITaskWithLocation[]> {\n\t\treturn provideNpmScripts(this.context, false);\n\t}\n\n\tpublic async provideTasks() {\n\t\tconst tasks = await provideNpmScripts(this.context, true);\n\t\treturn tasks.map(task => task.task);\n\t}\n\n\tpublic async resolveTask(_task: Task): Promise<Task | undefined> {\n\t\tconst npmTask = (<any>_task.definition).script;\n\t\tif (npmTask) {\n\t\t\tconst kind: INpmTaskDefinition = (<any>_task.definition);\n\t\t\tlet packageJsonUri: Uri;\n\t\t\tif (_task.scope === undefined || _task.scope === TaskScope.Global || _task.scope === TaskScope.Workspace) {\n\t\t\t\t// scope is required to be a WorkspaceFolder for resolveTask\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (kind.path) {\n\t\t\t\tpackageJsonUri = _task.scope.uri.with({ path: _task.scope.uri.path + '/' + kind.path + `${kind.path.endsWith('/') ? '' : '/'}` + 'package.json' });\n\t\t\t} else {\n\t\t\t\tpackageJsonUri = _task.scope.uri.with({ path: _task.scope.uri.path + '/package.json' });\n\t\t\t}\n\t\t\tlet task: Task;\n\t\t\tif (kind.script === INSTALL_SCRIPT) {\n\t\t\t\ttask = await createInstallationTask(this.context, _task.scope, packageJsonUri);\n\t\t\t} else {\n\t\t\t\ttask = await createScriptRunnerTask(this.context, kind.script, _task.scope, packageJsonUri);\n\t\t\t}\n\t\t\t// VSCode requires that task.definition must not change between resolutions\n\t\t\t// We need to restore task.definition to its original value\n\t\t\ttask.definition = kind;\n\t\t\treturn task;\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\nexport function invalidateTasksCache() {\n\tcachedTasks = undefined;\n}\n\nconst buildNames: string[] = ['build', 'compile', 'watch'];\nfunction isBuildTask(name: string): boolean {\n\tfor (const buildName of buildNames) {\n\t\tif (name.indexOf(buildName) !== -1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nconst testNames: string[] = ['test'];\nfunction isTestTask(name: string): boolean {\n\tfor (const testName of testNames) {\n\t\tif (name === testName) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\nconst preScripts: Set<string> = new Set([\n\t'install', 'pack', 'pack', 'publish', 'restart', 'shrinkwrap',\n\t'stop', 'test', 'uninstall', 'version'\n]);\n\nconst postScripts: Set<string> = new Set([\n\t'install', 'pack', 'pack', 'publish', 'publishOnly', 'restart', 'shrinkwrap',\n\t'stop', 'test', 'uninstall', 'version'\n]);\n\nfunction canHavePrePostScript(name: string): boolean {\n\treturn preScripts.has(name) || postScripts.has(name);\n}\n\nexport function isWorkspaceFolder(value: any): value is WorkspaceFolder {\n\treturn value && typeof value !== 'number';\n}\n\nexport async function getScriptRunner(folder: Uri, context?: ExtensionContext, showWarning?: boolean): Promise<string> {\n\tlet scriptRunner = workspace.getConfiguration('npm', folder).get<string>('scriptRunner', 'npm');\n\n\tif (scriptRunner === 'auto') {\n\t\tscriptRunner = await detectPackageManager(folder, context, showWarning);\n\t}\n\n\treturn scriptRunner;\n}\n\nexport async function getPackageManager(folder: Uri, context?: ExtensionContext, showWarning?: boolean): Promise<string> {\n\tlet packageManager = workspace.getConfiguration('npm', folder).get<string>('packageManager', 'npm');\n\n\tif (packageManager === 'auto') {\n\t\tpackageManager = await detectPackageManager(folder, context, showWarning);\n\t}\n\n\treturn packageManager;\n}\n\nexport async function detectPackageManager(folder: Uri, extensionContext?: ExtensionContext, showWarning: boolean = false): Promise<string> {\n\tconst { name, multipleLockFilesDetected: multiplePMDetected } = await findPreferredPM(folder.fsPath);\n\tconst neverShowWarning = 'npm.multiplePMWarning.neverShow';\n\tif (showWarning && multiplePMDetected && extensionContext && !extensionContext.globalState.get<boolean>(neverShowWarning)) {\n\t\tconst multiplePMWarning = l10n.t('Using {0} as the preferred package manager. Found multiple lockfiles for {1}.  To resolve this issue, delete the lockfiles that don\\'t match your preferred package manager or change the setting \"npm.packageManager\" to a value other than \"auto\".', name, folder.fsPath);\n\t\tconst neverShowAgain = l10n.t(\"Do not show again\");\n\t\tconst learnMore = l10n.t(\"Learn more\");\n\t\twindow.showInformationMessage(multiplePMWarning, learnMore, neverShowAgain).then(result => {\n\t\t\tswitch (result) {\n\t\t\t\tcase neverShowAgain: extensionContext.globalState.update(neverShowWarning, true); break;\n\t\t\t\tcase learnMore: env.openExternal(Uri.parse('https://docs.npmjs.com/cli/v9/configuring-npm/package-lock-json'));\n\t\t\t}\n\t\t});\n\t}\n\n\treturn name;\n}\n\nexport async function hasNpmScripts(): Promise<boolean> {\n\tconst folders = workspace.workspaceFolders;\n\tif (!folders) {\n\t\treturn false;\n\t}\n\tfor (const folder of folders) {\n\t\tif (isAutoDetectionEnabled(folder) && !excludeRegex.test(Utils.basename(folder.uri))) {\n\t\t\tconst relativePattern = new RelativePattern(folder, '**/package.json');\n\t\t\tconst paths = await workspace.findFiles(relativePattern, '**/node_modules/**');\n\t\t\tif (paths.length > 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nasync function* findNpmPackages(): AsyncGenerator<Uri> {\n\n\tconst visitedPackageJsonFiles: Set<string> = new Set();\n\n\tconst folders = workspace.workspaceFolders;\n\tif (!folders) {\n\t\treturn;\n\t}\n\tfor (const folder of folders) {\n\t\tif (isAutoDetectionEnabled(folder) && !excludeRegex.test(Utils.basename(folder.uri))) {\n\t\t\tconst relativePattern = new RelativePattern(folder, '**/package.json');\n\t\t\tconst paths = await workspace.findFiles(relativePattern, '**/{node_modules,.vscode-test}/**');\n\t\t\tfor (const path of paths) {\n\t\t\t\tif (!isExcluded(folder, path) && !visitedPackageJsonFiles.has(path.fsPath)) {\n\t\t\t\t\tyield path;\n\t\t\t\t\tvisitedPackageJsonFiles.add(path.fsPath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nexport async function detectNpmScriptsForFolder(context: ExtensionContext, folder: Uri): Promise<IFolderTaskItem[]> {\n\n\tconst folderTasks: IFolderTaskItem[] = [];\n\n\tif (excludeRegex.test(Utils.basename(folder))) {\n\t\treturn folderTasks;\n\t}\n\tconst relativePattern = new RelativePattern(folder.fsPath, '**/package.json');\n\tconst paths = await workspace.findFiles(relativePattern, '**/node_modules/**');\n\n\tconst visitedPackageJsonFiles: Set<string> = new Set();\n\tfor (const path of paths) {\n\t\tif (!visitedPackageJsonFiles.has(path.fsPath)) {\n\t\t\tconst tasks = await provideNpmScriptsForFolder(context, path, true);\n\t\t\tvisitedPackageJsonFiles.add(path.fsPath);\n\t\t\tfolderTasks.push(...tasks.map(t => ({ label: t.task.name, task: t.task })));\n\t\t}\n\t}\n\treturn folderTasks;\n}\n\nexport async function provideNpmScripts(context: ExtensionContext, showWarning: boolean): Promise<ITaskWithLocation[]> {\n\tif (!cachedTasks) {\n\t\tconst allTasks: ITaskWithLocation[] = [];\n\t\tfor await (const path of findNpmPackages()) {\n\t\t\tconst tasks = await provideNpmScriptsForFolder(context, path, showWarning);\n\t\t\tallTasks.push(...tasks);\n\t\t}\n\t\tcachedTasks = allTasks;\n\t}\n\treturn cachedTasks;\n}\n\nexport function isAutoDetectionEnabled(folder?: WorkspaceFolder): boolean {\n\treturn workspace.getConfiguration('npm', folder?.uri).get<AutoDetect>('autoDetect') === 'on';\n}\n\nfunction isExcluded(folder: WorkspaceFolder, packageJsonUri: Uri) {\n\tfunction testForExclusionPattern(path: string, pattern: string): boolean {\n\t\treturn minimatch(path, pattern, { dot: true });\n\t}\n\n\tconst exclude = workspace.getConfiguration('npm', folder.uri).get<string | string[]>('exclude');\n\tconst packageJsonFolder = path.dirname(packageJsonUri.fsPath);\n\n\tif (exclude) {\n\t\tif (Array.isArray(exclude)) {\n\t\t\tfor (const pattern of exclude) {\n\t\t\t\tif (testForExclusionPattern(packageJsonFolder, pattern)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (testForExclusionPattern(packageJsonFolder, exclude)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction isDebugScript(script: string): boolean {\n\tconst match = script.match(/--(inspect|debug)(-brk)?(=((\\[[0-9a-fA-F:]*\\]|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+|[a-zA-Z0-9\\.]*):)?(\\d+))?/);\n\treturn match !== null;\n}\n\nasync function provideNpmScriptsForFolder(context: ExtensionContext, packageJsonUri: Uri, showWarning: boolean): Promise<ITaskWithLocation[]> {\n\tconst emptyTasks: ITaskWithLocation[] = [];\n\n\tconst folder = workspace.getWorkspaceFolder(packageJsonUri);\n\tif (!folder) {\n\t\treturn emptyTasks;\n\t}\n\tconst scripts = await getScripts(packageJsonUri);\n\tif (!scripts) {\n\t\treturn emptyTasks;\n\t}\n\n\tconst result: ITaskWithLocation[] = [];\n\n\tfor (const { name, value, nameRange } of scripts.scripts) {\n\t\tconst task = await createScriptRunnerTask(context, name, folder!, packageJsonUri, value, showWarning);\n\t\tresult.push({ task, location: new Location(packageJsonUri, nameRange) });\n\t}\n\n\tif (!workspace.getConfiguration('npm', folder).get<string[]>('scriptExplorerExclude', []).find(e => e.includes(INSTALL_SCRIPT))) {\n\t\tresult.push({ task: await createInstallationTask(context, folder, packageJsonUri, 'install dependencies from package', showWarning) });\n\t}\n\treturn result;\n}\n\nexport function getTaskName(script: string, relativePath: string | undefined) {\n\tif (relativePath && relativePath.length) {\n\t\treturn `${script} - ${relativePath.substring(0, relativePath.length - 1)}`;\n\t}\n\treturn script;\n}\n\nfunction escapeCommandLine(cmd: string[]): (string | ShellQuotedString)[] {\n\treturn cmd.map(arg => {\n\t\tif (/\\s/.test(arg)) {\n\t\t\treturn { value: arg, quoting: arg.includes('--') ? ShellQuoting.Weak : ShellQuoting.Strong };\n\t\t} else {\n\t\t\treturn arg;\n\t\t}\n\t});\n}\n\nfunction getRelativePath(rootUri: Uri, packageJsonUri: Uri): string {\n\tconst absolutePath = packageJsonUri.path.substring(0, packageJsonUri.path.length - 'package.json'.length);\n\treturn absolutePath.substring(rootUri.path.length + 1);\n}\n\nexport async function getRunScriptCommand(script: string, folder: Uri, context?: ExtensionContext, showWarning = true): Promise<string[]> {\n\tconst scriptRunner = await getScriptRunner(folder, context, showWarning);\n\n\tif (scriptRunner === 'node') {\n\t\treturn ['node', '--run', script];\n\t} else {\n\t\tconst result = [scriptRunner, 'run'];\n\t\tif (workspace.getConfiguration('npm', folder).get<boolean>('runSilent')) {\n\t\t\tresult.push('--silent');\n\t\t}\n\t\tresult.push(script);\n\t\treturn result;\n\t}\n}\n\nexport async function createScriptRunnerTask(context: ExtensionContext, script: string, folder: WorkspaceFolder, packageJsonUri: Uri, scriptValue?: string, showWarning?: boolean): Promise<Task> {\n\tconst kind: INpmTaskDefinition = { type: 'npm', script };\n\n\tconst relativePackageJson = getRelativePath(folder.uri, packageJsonUri);\n\tif (relativePackageJson.length && !kind.path) {\n\t\tkind.path = relativePackageJson.substring(0, relativePackageJson.length - 1);\n\t}\n\tconst taskName = getTaskName(script, relativePackageJson);\n\tconst cwd = path.dirname(packageJsonUri.fsPath);\n\tconst args = await getRunScriptCommand(script, folder.uri, context, showWarning);\n\tconst scriptRunner = args.shift()!;\n\tconst task = new Task(kind, folder, taskName, 'npm', new ShellExecution(scriptRunner, escapeCommandLine(args), { cwd: cwd }));\n\ttask.detail = scriptValue;\n\n\tconst lowerCaseTaskName = script.toLowerCase();\n\tif (isBuildTask(lowerCaseTaskName)) {\n\t\ttask.group = TaskGroup.Build;\n\t} else if (isTestTask(lowerCaseTaskName)) {\n\t\ttask.group = TaskGroup.Test;\n\t} else if (canHavePrePostScript(lowerCaseTaskName)) {\n\t\ttask.group = TaskGroup.Clean; // hack: use Clean group to tag pre/post scripts\n\t} else if (scriptValue && isDebugScript(scriptValue)) {\n\t\t// todo@connor4312: all scripts are now debuggable, what is a 'debug script'?\n\t\ttask.group = TaskGroup.Rebuild; // hack: use Rebuild group to tag debug scripts\n\t}\n\treturn task;\n}\n\nasync function getInstallDependenciesCommand(folder: Uri, context?: ExtensionContext, showWarning = true): Promise<string[]> {\n\tconst packageManager = await getPackageManager(folder, context, showWarning);\n\tconst result = [packageManager, INSTALL_SCRIPT];\n\tif (workspace.getConfiguration('npm', folder).get<boolean>('runSilent')) {\n\t\tresult.push('--silent');\n\t}\n\treturn result;\n}\n\nexport async function createInstallationTask(context: ExtensionContext, folder: WorkspaceFolder, packageJsonUri: Uri, scriptValue?: string, showWarning?: boolean): Promise<Task> {\n\tconst kind: INpmTaskDefinition = { type: 'npm', script: INSTALL_SCRIPT };\n\n\tconst relativePackageJson = getRelativePath(folder.uri, packageJsonUri);\n\tif (relativePackageJson.length && !kind.path) {\n\t\tkind.path = relativePackageJson.substring(0, relativePackageJson.length - 1);\n\t}\n\tconst taskName = getTaskName(INSTALL_SCRIPT, relativePackageJson);\n\tconst cwd = path.dirname(packageJsonUri.fsPath);\n\tconst args = await getInstallDependenciesCommand(folder.uri, context, showWarning);\n\tconst packageManager = args.shift()!;\n\tconst task = new Task(kind, folder, taskName, 'npm', new ShellExecution(packageManager, escapeCommandLine(args), { cwd: cwd }));\n\ttask.detail = scriptValue;\n\ttask.group = TaskGroup.Clean;\n\n\treturn task;\n}\n\n\nexport function getPackageJsonUriFromTask(task: Task): Uri | null {\n\tif (isWorkspaceFolder(task.scope)) {\n\t\tif (task.definition.path) {\n\t\t\treturn Uri.file(path.join(task.scope.uri.fsPath, task.definition.path, 'package.json'));\n\t\t} else {\n\t\t\treturn Uri.file(path.join(task.scope.uri.fsPath, 'package.json'));\n\t\t}\n\t}\n\treturn null;\n}\n\nexport async function hasPackageJson(): Promise<boolean> {\n\t// Faster than `findFiles` for workspaces with a root package.json.\n\tif (await hasRootPackageJson()) {\n\t\treturn true;\n\t}\n\tconst token = new CancellationTokenSource();\n\t// Search for files for max 1 second.\n\tconst timeout = setTimeout(() => token.cancel(), 1000);\n\tconst files = await workspace.findFiles('**/package.json', undefined, 1, token.token);\n\tclearTimeout(timeout);\n\treturn files.length > 0;\n}\n\nasync function hasRootPackageJson(): Promise<boolean> {\n\tconst folders = workspace.workspaceFolders;\n\tif (!folders) {\n\t\treturn false;\n\t}\n\tfor (const folder of folders) {\n\t\tif (folder.uri.scheme === 'file') {\n\t\t\tconst packageJson = path.join(folder.uri.fsPath, 'package.json');\n\t\t\tif (await exists(packageJson)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nasync function exists(file: string): Promise<boolean> {\n\treturn new Promise<boolean>((resolve, _reject) => {\n\t\tfs.exists(file, (value) => {\n\t\t\tresolve(value);\n\t\t});\n\t});\n}\n\nexport async function runScript(context: ExtensionContext, script: string, document: TextDocument) {\n\tconst uri = document.uri;\n\tconst folder = workspace.getWorkspaceFolder(uri);\n\tif (folder) {\n\t\tconst task = await createScriptRunnerTask(context, script, folder, uri);\n\t\ttasks.executeTask(task);\n\t}\n}\n\nexport async function startDebugging(context: ExtensionContext, scriptName: string, cwd: string, folder: WorkspaceFolder) {\n\tconst runScriptCommand = await getRunScriptCommand(scriptName, folder.uri, context, true);\n\n\tcommands.executeCommand(\n\t\t'extension.js-debug.createDebuggerTerminal',\n\t\trunScriptCommand.join(' '),\n\t\tfolder,\n\t\t{ cwd },\n\t);\n}\n\n\nexport type StringMap = { [s: string]: string };\n\nexport function findScriptAtPosition(document: TextDocument, buffer: string, position: Position): string | undefined {\n\tconst read = readScripts(document, buffer);\n\tif (!read) {\n\t\treturn undefined;\n\t}\n\n\tfor (const script of read.scripts) {\n\t\tif (script.nameRange.start.isBeforeOrEqual(position) && script.valueRange.end.isAfterOrEqual(position)) {\n\t\t\treturn script.name;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nexport async function getScripts(packageJsonUri: Uri) {\n\tif (packageJsonUri.scheme !== 'file') {\n\t\treturn undefined;\n\t}\n\n\tconst packageJson = packageJsonUri.fsPath;\n\tif (!await exists(packageJson)) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst document: TextDocument = await workspace.openTextDocument(packageJsonUri);\n\t\treturn readScripts(document);\n\t} catch (e) {\n\t\tconst localizedParseError = l10n.t(\"Npm task detection: failed to parse the file {0}\", packageJsonUri.fsPath);\n\t\tthrow new Error(localizedParseError);\n\t}\n}\n"
  },
  {
    "path": "extensions/npm/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.terminalQuickFixProvider.d.ts\",\n\t]\n}\n"
  },
  {
    "path": "extensions/objective-c/.vscodeignore",
    "content": "test/**\ncgmanifest.json\nbuild/**\n"
  },
  {
    "path": "extensions/objective-c/build/update-grammars.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nvar updateGrammar = require('vscode-grammar-updater');\n\nasync function updateGrammars() {\n\tawait updateGrammar.update('jeff-hykin/better-objcpp-syntax', 'autogenerated/objcpp.tmLanguage.json', './syntaxes/objective-c++.tmLanguage.json', undefined, 'master');\n\tawait updateGrammar.update('jeff-hykin/better-objc-syntax', 'autogenerated/objc.tmLanguage.json', './syntaxes/objective-c.tmLanguage.json', undefined, 'master');\n}\n\nupdateGrammars();\n"
  },
  {
    "path": "extensions/objective-c/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jeff-hykin/better-objcpp-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jeff-hykin/better-objcpp-syntax\",\n\t\t\t\t\t\"commitHash\": \"5a7eb15eee382dd5aa388bc04fdb60a0d2128e14\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"description\": \"The files syntaxes/objective-c.tmLanguage.json and syntaxes/objective-c++.tmLanguage.json were derived from the language package https://github.com/jeff-hykin/cpp-textmate-grammar.\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jeff-hykin/better-objc-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jeff-hykin/better-objc-syntax\",\n\t\t\t\t\t\"commitHash\": \"119b75fb1f4d3e8726fa62588e3b935e0b719294\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.2.0\",\n\t\t\t\"description\": \"The files syntaxes/objective-c.tmLanguage.json and syntaxes/objective-c++.tmLanguage.json were derived from the language package https://github.com/jeff-hykin/cpp-textmate-grammar.\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/objective-c/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t]\n\t],\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/objective-c/package.json",
    "content": "{\n  \"name\": \"objective-c\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammars.js\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"objective-c\",\n        \"extensions\": [\n          \".m\"\n        ],\n        \"aliases\": [\n          \"Objective-C\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      },\n      {\n        \"id\": \"objective-cpp\",\n        \"extensions\": [\n          \".mm\"\n        ],\n        \"aliases\": [\n          \"Objective-C++\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"objective-c\",\n        \"scopeName\": \"source.objc\",\n        \"path\": \"./syntaxes/objective-c.tmLanguage.json\"\n      },\n      {\n        \"language\": \"objective-cpp\",\n        \"scopeName\": \"source.objcpp\",\n        \"path\": \"./syntaxes/objective-c++.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/objective-c/package.nls.json",
    "content": "{\n\t\"displayName\": \"Objective-C Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Objective-C files.\"\n}\n"
  },
  {
    "path": "extensions/objective-c/syntaxes/objective-c++.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jeff-hykin/better-objcpp-syntax/blob/master/autogenerated/objcpp.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jeff-hykin/better-objcpp-syntax/commit/5a7eb15eee382dd5aa388bc04fdb60a0d2128e14\",\n\t\"name\": \"Objective-C++\",\n\t\"scopeName\": \"source.objcpp\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#cpp_lang\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_1\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_2\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_3\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_4\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_5\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#apple_foundation_functional_macros\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_7\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_8\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_9\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_10\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_11\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_12\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_13\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_14\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_15\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_16\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_17\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_18\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_19\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_20\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_21\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_22\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_23\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_24\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_25\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_26\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_27\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_28\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_29\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_30\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#bracketed_content\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#c_lang\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"anonymous_pattern_1\": {\n\t\t\t\"begin\": \"((@)(interface|protocol))(?!.+;)\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*((:)(?:\\\\s*)([A-Za-z][A-Za-z0-9]*))?(\\\\s|\\\\n)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.other.inherited-class.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"meta.divider.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"meta.inherited-class.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.scope.interface.objcpp\",\n\t\t\t\"end\": \"((@)end)\\\\b\",\n\t\t\t\"name\": \"meta.interface-or-protocol.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_10\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(defs|encode)\\\\b\",\n\t\t\t\"name\": \"keyword.other.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_11\": {\n\t\t\t\"match\": \"\\\\bid\\\\b\",\n\t\t\t\"name\": \"storage.type.id.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_12\": {\n\t\t\t\"match\": \"\\\\b(IBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class|instancetype)\\\\b\",\n\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_13\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(class|protocol)\\\\b\",\n\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_14\": {\n\t\t\t\"begin\": \"((@)selector)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.selector.method-name.objcpp\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.selector.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\",\n\t\t\t\t\t\"name\": \"support.function.any-method.name-of-parameter.objcpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_15\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.modifier.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(synchronized|public|package|private|protected)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_16\": {\n\t\t\t\"match\": \"\\\\b(YES|NO|Nil|nil)\\\\b\",\n\t\t\t\"name\": \"constant.language.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_17\": {\n\t\t\t\"match\": \"\\\\bNSApp\\\\b\",\n\t\t\t\"name\": \"support.variable.foundation.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_18\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.cocoa.leopard.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.function.cocoa.leopard.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\s*)\\\\b(NS(Rect(ToCGRect|FromCGRect)|MakeCollectable|S(tringFromProtocol|ize(ToCGSize|FromCGSize))|Draw(NinePartImage|ThreePartImage)|P(oint(ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))\\\\b\"\n\t\t},\n\t\t\"anonymous_pattern_19\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading.cocoa.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.function.cocoa.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\s*)\\\\b(NS(R(ound(DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(CriticalAlertPanel(RelativeToWindow)?|InformationalAlertPanel(RelativeToWindow)?|AlertPanel(RelativeToWindow)?)|e(set(MapTable|HashTable)|c(ycleZone|t(Clip(List)?|F(ill(UsingOperation|List(UsingOperation|With(Grays|Colors(UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(dPixel|l(MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(s)?|WindowServerMemory|AlertPanel)|M(i(n(X|Y)|d(X|Y))|ouseInRect|a(p(Remove|Get|Member|Insert(IfAbsent|KnownAbsent)?)|ke(R(ect|ange)|Size|Point)|x(Range|X|Y)))|B(itsPer(SampleFromDepth|PixelFromDepth)|e(stDepth|ep|gin(CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(ho(uldRetainWithZone|w(sServicesMenuItem|AnimationEffect))|tringFrom(R(ect|ange)|MapTable|S(ize|elector)|HashTable|Class|Point)|izeFromString|e(t(ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(Big(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|Short|Host(ShortTo(Big|Little)|IntTo(Big|Little)|DoubleTo(Big|Little)|FloatTo(Big|Little)|Long(To(Big|Little)|LongTo(Big|Little)))|Int|Double|Float|L(ittle(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|ong(Long)?)))|H(ighlightRect|o(stByteOrder|meDirectory(ForUser)?)|eight|ash(Remove|Get|Insert(IfAbsent|KnownAbsent)?)|FSType(CodeFromFileType|OfFile))|N(umberOfColorComponents|ext(MapEnumeratorPair|HashEnumeratorItem))|C(o(n(tainsRect|vert(GlyphsToPackedGlyphs|Swapped(DoubleToHost|FloatToHost)|Host(DoubleToSwapped|FloatToSwapped)))|unt(MapTable|HashTable|Frames|Windows(ForContext)?)|py(M(emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(MapTables|HashTables))|lassFromString|reate(MapTable(WithZone)?|HashTable(WithZone)?|Zone|File(namePboardType|ContentsPboardType)))|TemporaryDirectory|I(s(ControllerMarker|EmptyRect|FreedObject)|n(setRect|crementExtraRefCount|te(r(sect(sRect|ionR(ect|ange))|faceStyleForKey)|gralRect)))|Zone(Realloc|Malloc|Name|Calloc|Fr(omPointer|ee))|O(penStepRootDirectory|ffsetRect)|D(i(sableScreenUpdates|videRect)|ottedFrameRect|e(c(imal(Round|Multiply|S(tring|ubtract)|Normalize|Co(py|mpa(ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(MemoryPages|Object))|raw(Gr(oove|ayBezel)|B(itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(hiteBezel|indowBackground)|LightBezel))|U(serName|n(ionR(ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(Bundle(Setup|Cleanup)|Setup(VirtualMachine)?|Needs(ToLoadClasses|VirtualMachine)|ClassesF(orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(oint(InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(n(d(MapTableEnumeration|HashTableEnumeration)|umerate(MapTable|HashTable)|ableScreenUpdates)|qual(R(ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(ileTypeForHFSTypeCode|ullUserName|r(ee(MapTable|HashTable)|ame(Rect(WithWidth(UsingOperation)?)?|Address)))|Wi(ndowList(ForContext)?|dth)|Lo(cationInRange|g(v|PageSize)?)|A(ccessibility(R(oleDescription(ForUIElement)?|aiseBadArgumentException)|Unignored(Children(ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(Main|Load)|vailableWindowDepths|ll(MapTable(Values|Keys)|HashTableObjects|ocate(MemoryPages|Collectable|Object)))))\\\\b\"\n\t\t},\n\t\t\"anonymous_pattern_2\": {\n\t\t\t\"begin\": \"((@)(implementation))\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*(?::\\\\s*([A-Za-z][A-Za-z0-9]*))?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.scope.implementation.objcpp\",\n\t\t\t\"end\": \"((@)end)\\\\b\",\n\t\t\t\"name\": \"meta.implementation.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implementation_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_20\": {\n\t\t\t\"match\": \"\\\\bNS(RuleEditor|G(arbageCollector|radient)|MapTable|HashTable|Co(ndition|llectionView(Item)?)|T(oolbarItemGroup|extInputClient|r(eeNode|ackingArea))|InvocationOperation|Operation(Queue)?|D(ictionaryController|ockTile)|P(ointer(Functions|Array)|athC(o(ntrol(Delegate)?|mponentCell)|ell(Delegate)?)|r(intPanelAccessorizing|edicateEditor(RowTemplate)?))|ViewController|FastEnumeration|Animat(ionContext|ablePropertyContainer))\\\\b\",\n\t\t\t\"name\": \"support.class.cocoa.leopard.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_21\": {\n\t\t\t\"match\": \"\\\\bNS(R(u(nLoop|ler(Marker|View))|e(sponder|cursiveLock|lativeSpecifier)|an(domSpecifier|geSpecifier))|G(etCommand|lyph(Generator|Storage|Info)|raphicsContext)|XML(Node|D(ocument|TD(Node)?)|Parser|Element)|M(iddleSpecifier|ov(ie(View)?|eCommand)|utable(S(tring|et)|C(haracterSet|opying)|IndexSet|D(ictionary|ata)|URLRequest|ParagraphStyle|A(ttributedString|rray))|e(ssagePort(NameServer)?|nu(Item(Cell)?|View)?|t(hodSignature|adata(Item|Query(ResultGroup|AttributeValueTuple)?)))|a(ch(BootstrapServer|Port)|trix))|B(itmapImageRep|ox|u(ndle|tton(Cell)?)|ezierPath|rowser(Cell)?)|S(hadow|c(anner|r(ipt(SuiteRegistry|C(o(ercionHandler|mmand(Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(er|View)|een))|t(epper(Cell)?|atus(Bar|Item)|r(ing|eam))|imple(HorizontalTypesetter|CString)|o(cketPort(NameServer)?|und|rtDescriptor)|p(e(cifierTest|ech(Recognizer|Synthesizer)|ll(Server|Checker))|litView)|e(cureTextField(Cell)?|t(Command)?|archField(Cell)?|rializer|gmentedC(ontrol|ell))|lider(Cell)?|avePanel)|H(ost|TTP(Cookie(Storage)?|URLResponse)|elpManager)|N(ib(Con(nector|trolConnector)|OutletConnector)?|otification(Center|Queue)?|u(ll|mber(Formatter)?)|etService(Browser)?|ameSpecifier)|C(ha(ngeSpelling|racterSet)|o(n(stantString|nection|trol(ler)?|ditionLock)|d(ing|er)|unt(Command|edSet)|pying|lor(Space|P(ick(ing(Custom|Default)|er)|anel)|Well|List)?|m(p(oundPredicate|arisonPredicate)|boBox(Cell)?))|u(stomImageRep|rsor)|IImageRep|ell|l(ipView|o(seCommand|neCommand)|assDescription)|a(ched(ImageRep|URLResponse)|lendar(Date)?)|reateCommand)|T(hread|ypesetter|ime(Zone|r)|o(olbar(Item(Validations)?)?|kenField(Cell)?)|ext(Block|Storage|Container|Tab(le(Block)?)?|Input|View|Field(Cell)?|List|Attachment(Cell)?)?|a(sk|b(le(Header(Cell|View)|Column|View)|View(Item)?))|reeController)|I(n(dex(S(pecifier|et)|Path)|put(Manager|S(tream|erv(iceProvider|er(MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(Rep|Cell|View)?)|O(ut(putStream|lineView)|pen(GL(Context|Pixel(Buffer|Format)|View)|Panel)|bj(CTypeSerializationCallBack|ect(Controller)?))|D(i(st(antObject(Request)?|ributed(NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(Controller)?|e(serializer|cimalNumber(Behaviors|Handler)?|leteCommand)|at(e(Components|Picker(Cell)?|Formatter)?|a)|ra(wer|ggingInfo))|U(ser(InterfaceValidations|Defaults(Controller)?)|RL(Re(sponse|quest)|Handle(Client)?|C(onnection|ache|redential(Storage)?)|Download(Delegate)?|Prot(ocol(Client)?|ectionSpace)|AuthenticationChallenge(Sender)?)?|n(iqueIDSpecifier|doManager|archiver))|P(ipe|o(sitionalSpecifier|pUpButton(Cell)?|rt(Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(steboard|nel|ragraphStyle|geLayout)|r(int(Info|er|Operation|Panel)|o(cessInfo|tocolChecker|perty(Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(numerator|vent|PSImageRep|rror|x(ception|istsCommand|pression))|V(iew(Animation)?|al(idated(ToobarItem|UserInterfaceItem)|ue(Transformer)?))|Keyed(Unarchiver|Archiver)|Qui(ckDrawView|tCommand)|F(ile(Manager|Handle|Wrapper)|o(nt(Manager|Descriptor|Panel)?|rm(Cell|atter)))|W(hoseSpecifier|indow(Controller)?|orkspace)|L(o(c(k(ing)?|ale)|gicalTest)|evelIndicator(Cell)?|ayoutManager)|A(ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(ication|e(Script|Event(Manager|Descriptor)))|ffineTransform|lert|r(chiver|ray(Controller)?)))\\\\b\",\n\t\t\t\"name\": \"support.class.cocoa.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_22\": {\n\t\t\t\"match\": \"\\\\bNS(R(oundingMode|ule(Editor(RowType|NestingMode)|rOrientation)|e(questUserAttentionType|lativePosition))|G(lyphInscription|radientDrawingOptions)|XML(NodeKind|D(ocumentContentKind|TDNodeKind)|ParserError)|M(ultibyteGlyphPacking|apTableOptions)|B(itmapFormat|oxType|ezierPathElement|ackgroundStyle|rowserDropOperation)|S(tr(ing(CompareOptions|DrawingOptions|EncodingConversionOptions)|eam(Status|Event))|p(eechBoundary|litViewDividerStyle)|e(archPathD(irectory|omainMask)|gmentS(tyle|witchTracking))|liderType|aveOptions)|H(TTPCookieAcceptPolicy|ashTableOptions)|N(otification(SuspensionBehavior|Coalescing)|umberFormatter(RoundingMode|Behavior|Style|PadPosition)|etService(sError|Options))|C(haracterCollection|o(lor(RenderingIntent|SpaceModel|PanelMode)|mp(oundPredicateType|arisonPredicateModifier))|ellStateValue|al(culationError|endarUnit))|T(ypesetterControlCharacterAction|imeZoneNameStyle|e(stComparisonOperation|xt(Block(Dimension|V(erticalAlignment|alueType)|Layer)|TableLayoutAlgorithm|FieldBezelStyle))|ableView(SelectionHighlightStyle|ColumnAutoresizingStyle)|rackingAreaOptions)|I(n(sertionPosition|te(rfaceStyle|ger))|mage(RepLoadStatus|Scaling|CacheMode|FrameStyle|LoadStatus|Alignment))|Ope(nGLPixelFormatAttribute|rationQueuePriority)|Date(Picker(Mode|Style)|Formatter(Behavior|Style))|U(RL(RequestCachePolicy|HandleStatus|C(acheStoragePolicy|redentialPersistence))|Integer)|P(o(stingStyle|int(ingDeviceType|erFunctionsOptions)|pUpArrowPosition)|athStyle|r(int(ing(Orientation|PaginationMode)|erTableStatus|PanelOptions)|opertyList(MutabilityOptions|Format)|edicateOperatorType))|ExpressionType|KeyValue(SetMutationKind|Change)|QTMovieLoopMode|F(indPanel(SubstringMatchType|Action)|o(nt(RenderingMode|FamilyClass)|cusRingPlacement))|W(hoseSubelementIdentifier|ind(ingRule|ow(B(utton|ackingLocation)|SharingType|CollectionBehavior)))|L(ine(MovementDirection|SweepDirection|CapStyle|JoinStyle)|evelIndicatorStyle)|Animation(BlockingMode|Curve))\\\\b\",\n\t\t\t\"name\": \"support.type.cocoa.leopard.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_23\": {\n\t\t\t\"match\": \"\\\\bC(I(Sampler|Co(ntext|lor)|Image(Accumulator)?|PlugIn(Registration)?|Vector|Kernel|Filter(Generator|Shape)?)|A(Renderer|MediaTiming(Function)?|BasicAnimation|ScrollLayer|Constraint(LayoutManager)?|T(iledLayer|extLayer|rans(ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(nimation(Group)?|ction)))\\\\b\",\n\t\t\t\"name\": \"support.class.quartz.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_24\": {\n\t\t\t\"match\": \"\\\\bC(G(Float|Point|Size|Rect)|IFormat|AConstraintAttribute)\\\\b\",\n\t\t\t\"name\": \"support.type.quartz.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_25\": {\n\t\t\t\"match\": \"\\\\bNS(R(ect(Edge)?|ange)|G(lyph(Relation|LayoutMode)?|radientType)|M(odalSession|a(trixMode|p(Table|Enumerator)))|B(itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(cr(oll(er(Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(Granularity|Direction|Affinity)|wapped(Double|Float)|aveOperationType)|Ha(sh(Table|Enumerator)|ndler(2)?)|C(o(ntrol(Size|Tint)|mp(ositingOperation|arisonResult))|ell(State|Type|ImagePosition|Attribute))|T(hreadPrivate|ypesetterGlyphInfo|i(ckMarkPosition|tlePosition|meInterval)|o(ol(TipTag|bar(SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(TabType|Alignment)|ab(State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(ContextAuxiliary|PixelFormatAuxiliary)|D(ocumentChangeType|atePickerElementFlags|ra(werState|gOperation))|UsableScrollerParts|P(oint|r(intingPageOrder|ogressIndicator(Style|Th(ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(nt(SymbolicTraits|TraitMask|Action)|cusRingType)|W(indow(OrderingMode|Depth)|orkspace(IconCreationOptions|LaunchOptions)|ritingDirection)|L(ineBreakMode|ayout(Status|Direction))|A(nimation(Progress|Effect)|ppl(ication(TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle))\\\\b\",\n\t\t\t\"name\": \"support.type.cocoa.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_26\": {\n\t\t\t\"match\": \"\\\\bNS(NotFound|Ordered(Ascending|Descending|Same))\\\\b\",\n\t\t\t\"name\": \"support.constant.cocoa.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_27\": {\n\t\t\t\"match\": \"\\\\bNS(MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification\\\\b\",\n\t\t\t\"name\": \"support.constant.notification.cocoa.leopard.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_28\": {\n\t\t\t\"match\": \"\\\\bNS(Menu(Did(RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(ystemColorsDidChange|plitView(DidResizeSubviews|WillResizeSubviews))|C(o(nt(extHelpModeDid(Deactivate|Activate)|rolT(intDidChange|extDid(BeginEditing|Change|EndEditing)))|lor(PanelColorDidChange|ListDidChange)|mboBox(Selection(IsChanging|DidChange)|Will(Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(oolbar(DidRemoveItem|WillAddItem)|ext(Storage(DidProcessEditing|WillProcessEditing)|Did(BeginEditing|Change|EndEditing)|View(DidChange(Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)))|ImageRepRegistryDidChange|OutlineView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)|Item(Did(Collapse|Expand)|Will(Collapse|Expand)))|Drawer(Did(Close|Open)|Will(Close|Open))|PopUpButton(CellWillPopUp|WillPopUp)|View(GlobalFrameDidChange|BoundsDidChange|F(ocusDidChange|rameDidChange))|FontSetChanged|W(indow(Did(Resi(ze|gn(Main|Key))|M(iniaturize|ove)|Become(Main|Key)|ChangeScreen(|Profile)|Deminiaturize|Update|E(ndSheet|xpose))|Will(M(iniaturize|ove)|BeginSheet|Close))|orkspace(SessionDid(ResignActive|BecomeActive)|Did(Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(Sleep|Unmount|PowerOff|LaunchApplication)))|A(ntialiasThresholdChanged|ppl(ication(Did(ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(nhide|pdate)|FinishLaunching)|Will(ResignActive|BecomeActive|Hide|Terminate|U(nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification\\\\b\",\n\t\t\t\"name\": \"support.constant.notification.cocoa.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_29\": {\n\t\t\t\"match\": \"\\\\bNS(RuleEditor(RowType(Simple|Compound)|NestingMode(Si(ngle|mple)|Compound|List))|GradientDraws(BeforeStartingLocation|AfterEndingLocation)|M(inusSetExpressionType|a(chPortDeallocate(ReceiveRight|SendRight|None)|pTable(StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(oxCustom|undleExecutableArchitecture(X86|I386|PPC(64)?)|etweenPredicateOperatorType|ackgroundStyle(Raised|Dark|L(ight|owered)))|S(tring(DrawingTruncatesLastVisibleLine|EncodingConversion(ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(e(ech(SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(GrammarFlag|SpellingFlag))|litViewDividerStyleThi(n|ck))|e(rvice(RequestTimedOutError|M(iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(inimum|aximum)|Application(NotFoundError|LaunchFailedError))|gmentStyle(Round(Rect|ed)|SmallSquare|Capsule|Textured(Rounded|Square)|Automatic)))|H(UDWindowMask|ashTable(StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(oModeColorPanel|etServiceNoAutoRename)|C(hangeRedone|o(ntainsPredicateOperatorType|l(orRenderingIntent(RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(None|ContentArea|TrackableArea|EditableTextArea))|T(imeZoneNameStyle(S(hort(Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(Regular|SourceList)|racking(Mouse(Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(ssumeInside|ctive(In(KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(n(tersectSetExpressionType|dexedColorSpaceModel)|mageScale(None|Proportionally(Down|UpOrDown)|AxesIndependently))|Ope(nGLPFAAllowOfflineRenderers|rationQueue(DefaultMaxConcurrentOperationCount|Priority(High|Normal|Very(High|Low)|Low)))|D(iacriticInsensitiveSearch|ownloadsDirectory)|U(nionSetExpressionType|TF(16(BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(ointerFunctions(Ma(chVirtualMemory|llocMemory)|Str(ongMemory|uctPersonality)|C(StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(paque(Memory|Personality)|bjectP(ointerPersonality|ersonality)))|at(hStyle(Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(Scaling|Copies|Orientation|P(a(perSize|ge(Range|SetupAccessory))|review)))|Executable(RuntimeMismatchError|NotLoadableError|ErrorM(inimum|aximum)|L(inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(Initial|Prior)|F(i(ndPanelSubstringMatchType(StartsWith|Contains|EndsWith|FullWord)|leRead(TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(ndow(BackingLocation(MainMemory|Default|VideoMemory)|Sharing(Read(Only|Write)|None)|CollectionBehavior(MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType)\\\\b\",\n\t\t\t\"name\": \"support.constant.cocoa.leopard.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_3\": {\n\t\t\t\"begin\": \"@\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)%\\n\\t\\t\\t\\t\\t\\t(\\\\d+\\\\$)?                             # field (argument #)\\n\\t\\t\\t\\t\\t\\t[#0\\\\- +']*                          # flags\\n\\t\\t\\t\\t\\t\\t((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?              # minimum field width\\n\\t\\t\\t\\t\\t\\t(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?         # precision\\n\\t\\t\\t\\t\\t\\t[@]                                  # conversion type\\n\\t\\t\\t\\t\\t\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_30\": {\n\t\t\t\"match\": \"\\\\bNS(R(GB(ModeColorPanel|ColorSpaceModel)|ight(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey)|ound(RectBezelStyle|Bankers|ed(BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(CapStyle|JoinStyle))|un(StoppedResponse|ContinuesResponse|AbortedResponse)|e(s(izableWindowMask|et(CursorRectsRunLoopOrdering|FunctionKey))|ce(ssedBezelStyle|iver(sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(evancyLevelIndicatorStyle|ative(Before|After))|gular(SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(n(domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(ModeMatrix|Button)))|G(IFFileType|lyph(Below|Inscribe(B(elow|ase)|Over(strike|Below)|Above)|Layout(WithPrevious|A(tAPoint|gainstAPoint))|A(ttribute(BidiLevel|Soft|Inscribe|Elastic)|bove))|r(ooveBorder|eaterThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|a(y(ModeColorPanel|ColorSpaceModel)|dient(None|Con(cave(Strong|Weak)|vex(Strong|Weak)))|phiteControlTint)))|XML(N(o(tationDeclarationKind|de(CompactEmptyElement|IsCDATA|OptionsNone|Use(SingleQuotes|DoubleQuotes)|Pre(serve(NamespaceOrder|C(haracterReferences|DATA)|DTD|Prefixes|E(ntities|mptyElements)|Quotes|Whitespace|A(ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(ocument(X(MLKind|HTMLKind|Include)|HTMLKind|T(idy(XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(arser(GTRequiredError|XMLDeclNot(StartedError|FinishedError)|Mi(splaced(XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(StartedError|FinishedError))|S(t(andaloneValueError|ringNot(StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(MTOKENRequiredError|o(t(ationNot(StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(haracterRef(In(DTDError|PrologError|EpilogError)|AtEOFError)|o(nditionalSectionNot(StartedError|FinishedError)|mment(NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(ternalError|valid(HexCharacterRefError|C(haracter(RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(NameError|Error)))|OutOfMemoryError|D(ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(RI(RequiredError|FragmentError)|n(declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(MissingSemiError|NoNameError|In(Internal(SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(ocessingInstructionNot(StartedError|FinishedError)|ematureDocumentEndError))|E(n(codingNotSupportedError|tity(Ref(In(DTDError|PrologError|EpilogError)|erence(MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(StartedError|FinishedError)|Is(ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(StartedError|FinishedError)|xt(ernalS(tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(iteralNot(StartedError|FinishedError)|T(RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(RedefinedError|HasNoValueError|Not(StartedError|FinishedError)|ListNot(StartedError|FinishedError)))|rocessingInstructionKind)|E(ntity(GeneralKind|DeclarationKind|UnparsedKind|P(ar(sedKind|ameterKind)|redefined))|lement(Declaration(MixedKind|UndefinedKind|E(lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(N(MToken(sKind|Kind)|otationKind)|CDATAKind|ID(Ref(sKind|Kind)|Kind)|DeclarationKind|En(tit(yKind|iesKind)|umerationKind)|Kind))|M(i(n(XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(nthCalendarUnit|deSwitchFunctionKey|use(Moved(Mask)?|E(ntered(Mask)?|ventSubtype|xited(Mask)?))|veToBezierPathElement|mentary(ChangeButton|Push(Button|InButton)|Light(Button)?))|enuFunctionKey|a(c(intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(XEdge|YEdge))|ACHOperatingSystem)|B(MPFileType|o(ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(Se(condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(zelBorder|velLineJoinStyle|low(Bottom|Top)|gin(sWith(Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(spaceCharacter|tabTextMovement|ingStore(Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(owser(NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(h(ift(JISStringEncoding|KeyMask)|ow(ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(s(ReqFunctionKey|tem(D(omainMask|efined(Mask)?)|FunctionKey))|mbolStringEncoding)|c(a(nnedOption|le(None|ToFit|Proportionally))|r(oll(er(NoPart|Increment(Page|Line|Arrow)|Decrement(Page|Line|Arrow)|Knob(Slot)?|Arrows(M(inEnd|axEnd)|None|DefaultSetting))|Wheel(Mask)?|LockFunctionKey)|eenChangedEventType))|t(opFunctionKey|r(ingDrawing(OneShot|DisableScreenFontSubstitution|Uses(DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(Status(Reading|NotOpen|Closed|Open(ing)?|Error|Writing|AtEnd)|Event(Has(BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(ndEncountered|rrorOccurred)))))|i(ngle(DateMode|UnderlineStyle)|ze(DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(condCalendarUnit|lect(By(Character|Paragraph|Word)|i(ng(Next|Previous)|onAffinity(Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(Momentary|Select(One|Any)))|quareLineCapStyle|witchButton|ave(ToOperation|Op(tions(Yes|No|Ask)|eration)|AsOperation)|mall(SquareBezelStyle|C(ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(ighlightModeMatrix|SBModeColorPanel|o(ur(Minute(SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(Never|OnlyFromMainDocumentDomain|Always)|e(lp(ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(MonthDa(yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(o(n(StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(ification(SuspensionBehavior(Hold|Coalesce|D(eliverImmediately|rop))|NoCoalescing|CoalescingOn(Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(cr(iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(itle|opLevelContainersSpecifierError|abs(BezelBorder|NoBorder|LineBorder))|I(nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(ll(Glyph|CellType)|m(eric(Search|PadKeyMask)|berFormatter(Round(Half(Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(10|Default)|S(cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(ercentStyle|ad(Before(Suffix|Prefix)|After(Suffix|Prefix))))))|e(t(Services(BadArgumentError|NotFoundError|C(ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(t(iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(hange(ReadOtherContents|GrayCell(Mask)?|BackgroundCell(Mask)?|Cleared|Done|Undone|Autosaved)|MYK(ModeColorPanel|ColorSpaceModel)|ircular(BezelStyle|Slider)|o(n(stantValueExpressionType|t(inuousCapacityLevelIndicatorStyle|entsCellMask|ain(sComparison|erSpecifierError)|rol(Glyph|KeyMask))|densedFontMask)|lor(Panel(RGBModeMask|GrayModeMask|HSBModeMask|C(MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(p(osite(XOR|Source(In|O(ut|ver)|Atop)|Highlight|C(opy|lear)|Destination(In|O(ut|ver)|Atop)|Plus(Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(stom(SelectorPredicateOperatorType|PaletteModeColorPanel)|r(sor(Update(Mask)?|PointingDevice)|veToBezierPathElement))|e(nterT(extAlignment|abStopType)|ll(State|H(ighlighted|as(Image(Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(Bordered|InsetButton)|Disabled|Editable|LightsBy(Gray|Background|Contents)|AllowsMixedState))|l(ipPagination|o(s(ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(ControlTint|DisplayFunctionKey|LineFunctionKey))|a(seInsensitive(Search|PredicateOption)|n(notCreateScriptCommandError|cel(Button|TextMovement))|chesDirectory|lculation(NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(itical(Request|AlertStyle)|ayonModeColorPanel))|T(hick(SquareBezelStyle|erSquareBezelStyle)|ypesetter(Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(ineBreakAction|atestBehavior))|i(ckMark(Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(olbarItemVisibilityPriority(Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(Compression(N(one|EXT)|CCITTFAX(3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(rminate(Now|Cancel|Later)|xt(Read(InapplicableDocumentTypeError|WriteErrorM(inimum|aximum))|Block(M(i(nimum(Height|Width)|ddleAlignment)|a(rgin|ximum(Height|Width)))|B(o(ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(Characters|Attributes)|CellType|ured(RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(Character|TextMovement|le(tP(oint(Mask|EventSubtype)?|roximity(Mask|EventSubtype)?)|Column(NoResizing|UserResizingMask|AutoresizingMask)|View(ReverseSequentialColumnAutoresizingStyle|GridNone|S(olid(HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(n(sert(CharFunctionKey|FunctionKey|LineFunctionKey)|t(Type|ernalS(criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(2022JPStringEncoding|Latin(1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(R(ight|ep(MatchesDevice|LoadStatus(ReadingHeader|Completed|InvalidData|Un(expectedEOF|knownType)|WillNeedAllData)))|Below|C(ellType|ache(BySize|Never|Default|Always))|Interpolation(High|None|Default|Low)|O(nly|verlaps)|Frame(Gr(oove|ayBezel)|Button|None|Photo)|L(oadStatus(ReadError|C(ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(lign(Right|Bottom(Right|Left)?|Center|Top(Right|Left)?|Left)|bove)))|O(n(State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|TextMovement)|SF1OperatingSystem|pe(n(GL(GO(Re(setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(R(obust|endererID)|M(inimumPolicy|ulti(sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(creenMask|te(ncilSize|reo)|ingleRenderer|upersample|ample(s|Buffers|Alpha))|NoRecovery|C(o(lor(Size|Float)|mpliant)|losestPolicy)|OffScreen|D(oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(cc(umSize|elerated)|ux(Buffers|DepthStencil)|l(phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(B(itfield|oolType)|S(hortType|tr(ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(Type|longType)|ArrayType))|D(i(s(c(losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(Selection|PredicateModifier))|o(c(ModalWindowMask|ument(Directory|ationDirectory))|ubleType|wn(TextMovement|ArrowFunctionKey))|e(s(cendingPageOrder|ktopDirectory)|cimalTabStopType|v(ice(NColorSpaceModel|IndependentModifierFlagsMask)|eloper(Directory|ApplicationDirectory))|fault(ControlTint|TokenStyle)|lete(Char(acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(yCalendarUnit|teFormatter(MediumStyle|Behavior(10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(wer(Clos(ingState|edState)|Open(ingState|State))|gOperation(Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(ser(CancelledError|D(irectory|omainMask)|FunctionKey)|RL(Handle(NotLoaded|Load(Succeeded|InProgress|Failed))|CredentialPersistence(None|Permanent|ForSession))|n(scaledWindowMask|cachedRead|i(codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(o(CloseGroupingRunLoopOrdering|FunctionKey)|e(finedDateComponent|rline(Style(Single|None|Thick|Double)|Pattern(Solid|D(ot|ash(Dot(Dot)?)?)))))|known(ColorSpaceModel|P(ointingDevice|ageOrder)|KeyS(criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(ustifiedTextAlignment|PEG(2000FileType|FileType)|apaneseEUC(GlyphPacking|StringEncoding))|P(o(s(t(Now|erFontMask|WhenIdle|ASAP)|iti(on(Replace|Be(fore|ginning)|End|After)|ve(IntType|DoubleType|FloatType)))|pUp(NoArrow|ArrowAt(Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(InCell(Mask)?|OnPushOffButton)|e(n(TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(Mask)?)|P(S(caleField|tatus(Title|Field)|aveButton)|N(ote(Title|Field)|ame(Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(a(perFeedButton|ge(Range(To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(useFunctionKey|ragraphSeparatorCharacter|ge(DownFunctionKey|UpFunctionKey))|r(int(ing(ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(NotFound|OK|Error)|FunctionKey)|o(p(ertyList(XMLFormat|MutableContainers(AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(BarStyle|SpinningStyle|Preferred(SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(ssedTab|vFunctionKey))|L(HeightForm|CancelButton|TitleField|ImageButton|O(KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(n(terCharacter|d(sWith(Comparison|PredicateOperatorType)|FunctionKey))|v(e(nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(Comparison|PredicateOperatorType)|ra(serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(clude(10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(i(ew(M(in(XMargin|YMargin)|ax(XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(lidationErrorM(inimum|aximum)|riableExpressionType))|Key(SpecifierEvaluationScriptError|Down(Mask)?|Up(Mask)?|PathExpressionType|Value(MinusSetMutation|SetSetMutation|Change(Re(placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(New|Old)|UnionSetMutation|ValidationError))|QTMovie(NormalPlayback|Looping(BackAndForthPlayback|Playback))|F(1(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(nd(PanelAction(Replace(A(ndFind|ll(InSelection)?))?|S(howFindPanel|e(tFindString|lectAll(InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(Read(No(SuchFileError|PermissionError)|CorruptFileError|In(validFileNameError|applicableStringEncodingError)|Un(supportedSchemeError|knownError))|HandlingPanel(CancelButton|OKButton)|NoSuchFileError|ErrorM(inimum|aximum)|Write(NoPermissionError|In(validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(nt(Mo(noSpaceTrait|dernSerifsClass)|BoldTrait|S(ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(o(ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(ntegerAdvancementsRenderingMode|talicTrait)|O(ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(nknownClass|IOptimizedTrait)|Panel(S(hadowEffectModeMask|t(andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(amilyClassMask|reeformSerifsClass)|Antialiased(RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(Below|Type(None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(attingError(M(inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(ExpressionType|KeyMask)|3(1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(RevertButton|S(ize(Title|Field)|etButton)|CurrentField|Preview(Button|Field))|l(oat(ingPointSamplesBitmapFormat|Type)|agsChanged(Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(heelModeColorPanel|indow(s(NTOperatingSystem|CP125(1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(InterfaceStyle|OperatingSystem))|M(iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(ctivation|ddingToRecents)|A(sync|nd(Hide(Others)?|Print)|llowingClassicStartup))|eek(day(CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(ntsBidiLevels|rningAlertStyle)|r(itingDirection(RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(i(stModeMatrix|ne(Moves(Right|Down|Up|Left)|B(order|reakBy(C(harWrapping|lipping)|Truncating(Middle|Head|Tail)|WordWrapping))|S(eparatorCharacter|weep(Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(ssThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey))|a(yout(RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(sc(iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(y(Type|PredicateModifier|EventMask)|choredSearch|imation(Blocking|Nonblocking(Threaded)?|E(ffect(DisappearingItemDefault|Poof)|ase(In(Out)?|Out))|Linear)|dPredicateType)|t(Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(obe(GB1CharacterCollection|CNS1CharacterCollection|Japan(1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(saveOperation|Pagination)|pp(lication(SupportDirectory|D(irectory|e(fined(Mask)?|legateReply(Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(Mask)?)|l(ternateKeyMask|pha(ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(sWrongScriptError|EvaluationScriptError)|bove(Bottom|Top)|WTEventType))\\\\b\",\n\t\t\t\"name\": \"support.constant.cocoa.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_4\": {\n\t\t\t\"begin\": \"\\\\b(id)\\\\s*(?=<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\"name\": \"meta.id-with-protocol.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_5\": {\n\t\t\t\"match\": \"\\\\b(NS_DURING|NS_HANDLER|NS_ENDHANDLER)\\\\b\",\n\t\t\t\"name\": \"keyword.control.macro.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_7\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(try|catch|finally|throw)\\\\b\",\n\t\t\t\"name\": \"keyword.control.exception.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_8\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(synchronized)\\\\b\",\n\t\t\t\"name\": \"keyword.control.synchronize.objcpp\"\n\t\t},\n\t\t\"anonymous_pattern_9\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(required|optional)\\\\b\",\n\t\t\t\"name\": \"keyword.control.protocol-specification.objcpp\"\n\t\t},\n\t\t\"apple_foundation_functional_macros\": {\n\t\t\t\"begin\": \"(\\\\b(?:API_AVAILABLE|API_DEPRECATED|API_UNAVAILABLE|NS_AVAILABLE|NS_AVAILABLE_MAC|NS_AVAILABLE_IOS|NS_DEPRECATED|NS_DEPRECATED_MAC|NS_DEPRECATED_IOS|NS_SWIFT_NAME))(?:(?:\\\\s)+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.apple-foundation.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.macro.arguments.begin.bracket.round.apple-foundation.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.macro.arguments.end.bracket.round.apple-foundation.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.macro.callable.apple-foundation.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_lang\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracketed_content\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.bracketed.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=predicateWithFormat:)(?<=NSPredicate )(predicateWithFormat:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\])\",\n\t\t\t\t\t\"name\": \"meta.function-call.predicate.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\bargument(Array|s)(:)\",\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.name-of-parameter.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\b\\\\w+(:)\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-method.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"@\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(AND|OR|NOT|IN)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.predicate.cocoa.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(ALL|ANY|SOME|NONE)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.language.predicate.cocoa.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.language.predicate.cocoa.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.predicate.cocoa.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bC(ASEINSENSITIVE|I)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.modifier.predicate.cocoa.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.predicate.cocoa.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\\\\\|[abefnrtv'\\\"?]|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-zA-Z0-9]+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#c_functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\w)(?<=[\\\\w\\\\])\\\"] )(\\\\w+(?:(:)|(?=\\\\])))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\])\",\n\t\t\t\t\t\"name\": \"meta.function-call.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\b\\\\w+(:)\",\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.name-of-parameter.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#c_functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"c_functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.C99.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)\\\\b(hypot(f|l)?|s(scanf|ystem|nprintf|ca(nf|lb(n(f|l)?|ln(f|l)?))|i(n(h(f|l)?|f|l)?|gn(al|bit))|tr(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(jmp|vbuf|locale|buf)|qrt(f|l)?|w(scanf|printf)|rand)|n(e(arbyint(f|l)?|xt(toward(f|l)?|after(f|l)?))|an(f|l)?)|c(s(in(h(f|l)?|f|l)?|qrt(f|l)?)|cos(h(f)?|f|l)?|imag(f|l)?|t(ime|an(h(f|l)?|f|l)?)|o(s(h(f|l)?|f|l)?|nj(f|l)?|pysign(f|l)?)|p(ow(f|l)?|roj(f|l)?)|e(il(f|l)?|xp(f|l)?)|l(o(ck|g(f|l)?)|earerr)|a(sin(h(f|l)?|f|l)?|cos(h(f|l)?|f|l)?|tan(h(f|l)?|f|l)?|lloc|rg(f|l)?|bs(f|l)?)|real(f|l)?|brt(f|l)?)|t(ime|o(upper|lower)|an(h(f|l)?|f|l)?|runc(f|l)?|gamma(f|l)?|mp(nam|file))|i(s(space|n(ormal|an)|cntrl|inf|digit|u(nordered|pper)|p(unct|rint)|finite|w(space|c(ntrl|type)|digit|upper|p(unct|rint)|lower|al(num|pha)|graph|xdigit|blank)|l(ower|ess(equal|greater)?)|al(num|pha)|gr(eater(equal)?|aph)|xdigit|blank)|logb(f|l)?|max(div|abs))|di(v|fftime)|_Exit|unget(c|wc)|p(ow(f|l)?|ut(s|c(har)?|wc(har)?)|error|rintf)|e(rf(c(f|l)?|f|l)?|x(it|p(2(f|l)?|f|l|m1(f|l)?)?))|v(s(scanf|nprintf|canf|printf|w(scanf|printf))|printf|f(scanf|printf|w(scanf|printf))|w(scanf|printf)|a_(start|copy|end|arg))|qsort|f(s(canf|e(tpos|ek))|close|tell|open|dim(f|l)?|p(classify|ut(s|c|w(s|c))|rintf)|e(holdexcept|set(e(nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(aiseexcept|ror)|get(e(nv|xceptflag)|round))|flush|w(scanf|ide|printf|rite)|loor(f|l)?|abs(f|l)?|get(s|c|pos|w(s|c))|re(open|e|ad|xp(f|l)?)|m(in(f|l)?|od(f|l)?|a(f|l|x(f|l)?)?))|l(d(iv|exp(f|l)?)|o(ngjmp|cal(time|econv)|g(1(p(f|l)?|0(f|l)?)|2(f|l)?|f|l|b(f|l)?)?)|abs|l(div|abs|r(int(f|l)?|ound(f|l)?))|r(int(f|l)?|ound(f|l)?)|gamma(f|l)?)|w(scanf|c(s(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?|mbs)|pbrk|ftime|len|r(chr|tombs)|xfrm)|to(b|mb)|rtomb)|printf|mem(set|c(hr|py|mp)|move))|a(s(sert|ctime|in(h(f|l)?|f|l)?)|cos(h(f|l)?|f|l)?|t(o(i|f|l(l)?)|exit|an(h(f|l)?|2(f|l)?|f|l)?)|b(s|ort))|g(et(s|c(har)?|env|wc(har)?)|mtime)|r(int(f|l)?|ound(f|l)?|e(name|alloc|wind|m(ove|quo(f|l)?|ainder(f|l)?))|a(nd|ise))|b(search|towc)|m(odf(f|l)?|em(set|c(hr|py|mp)|move)|ktime|alloc|b(s(init|towcs|rtowcs)|towc|len|r(towc|len))))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.function-call.leading.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?x) (?: (?= \\\\s )  (?:(?<=else|new|return) | (?<!\\\\w)) (\\\\s+))?\\n            \\t\\t\\t(\\\\b \\n            \\t\\t\\t\\t(?!(while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\\\\s*\\\\()(?:(?!NS)[A-Za-z_][A-Za-z0-9_]*+\\\\b | :: )++                  # actual name\\n            \\t\\t\\t)\\n            \\t\\t\\t \\\\s*(\\\\()\",\n\t\t\t\t\t\"name\": \"meta.function-call.objcpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"c_lang\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(break|continue|do|else|for|goto|if|_Pragma|return|while)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"typedef\",\n\t\t\t\t\t\"name\": \"keyword.other.typedef.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bin\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.in.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(const|extern|register|restrict|static|volatile|inline|__block)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bk[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"constant.other.variable.mac-classic.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bg[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.global.mac-classic.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bs[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.static.mac-classic.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n^\\\\s* ((\\\\#)\\\\s*define) \\\\s+\\t# define\\n((?<id>[a-zA-Z_$][\\\\w$]*))\\t  # macro name\\n(?:\\n  (\\\\()\\n\\t(\\n\\t  \\\\s* \\\\g<id> \\\\s*\\t\\t # first argument\\n\\t  ((,) \\\\s* \\\\g<id> \\\\s*)*  # additional arguments\\n\\t  (?:\\\\.\\\\.\\\\.)?\\t\\t\\t# varargs ellipsis?\\n\\t)\\n  (\\\\))\\n)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.define.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.macro.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(error|warning))\\\\b\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$3.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.diagnostic.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(include(?:_next)?|import))\\\\b\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.$3.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.include.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.include.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*line)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.line.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*undef))\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.undef.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*pragma))\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.pragma.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.sys-types.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.pthread.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) \\\\b\\n(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t\\n|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t\\n|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t\\n|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t\\n|uintmax_t|uintmax_t)\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.stdint.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.mac-classic.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) \\\\b\\n(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam\\n|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr\\n|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber\\n|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64\\n|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32\\n|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr\\n|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.mac-classic.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([A-Za-z0-9_]+_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function.objcpp\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\w)(?!\\\\s*(?:not|compl|sizeof|not_eq|bitand|xor|bitor|and|or|and_eq|xor_eq|or_eq|alignof|alignas|_Alignof|_Alignas|while|for|do|if|else|goto|switch|return|break|case|continue|default|void|char|short|int|signed|unsigned|long|float|double|bool|_Bool|_Complex|_Imaginary|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|NULL|true|false|memory_order|atomic_bool|atomic_char|atomic_schar|atomic_uchar|atomic_short|atomic_ushort|atomic_int|atomic_uint|atomic_long|atomic_ulong|atomic_llong|atomic_ullong|atomic_char16_t|atomic_char32_t|atomic_wchar_t|atomic_int_least8_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_least16_t|atomic_int_least32_t|atomic_uint_least32_t|atomic_int_least64_t|atomic_uint_least64_t|atomic_int_fast8_t|atomic_uint_fast8_t|atomic_int_fast16_t|atomic_uint_fast16_t|atomic_int_fast32_t|atomic_uint_fast32_t|atomic_int_fast64_t|atomic_uint_fast64_t|atomic_intptr_t|atomic_uintptr_t|atomic_size_t|atomic_ptrdiff_t|atomic_intmax_t|atomic_uintmax_t|struct|union|enum|typedef|auto|register|static|extern|thread_local|inline|_Noreturn|const|volatile|restrict|_Atomic)\\\\s*\\\\()(?=[a-zA-Z_]\\\\w*\\\\s*\\\\()\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.bracket.square.access.objcpp\",\n\t\t\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.object.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.array.bracket.square.objcpp\",\n\t\t\t\t\t\"match\": \"\\\\[\\\\s*\\\\]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.objcpp\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"repository\": {\n\t\t\t\t\"probably_a_parameter\": {\n\t\t\t\t\t\"match\": \"(?<=(?:[a-zA-Z_0-9] |[&*>\\\\]\\\\)]))\\\\s*([a-zA-Z_]\\\\w*)\\\\s*(?=(?:\\\\[\\\\]\\\\s*)?(?:,|\\\\)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.probably.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"access-method\": {\n\t\t\t\t\t\"name\": \"meta.function-call.member.objcpp\",\n\t\t\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))\\\\s*(?:(\\\\.)|(->))((?:(?:[a-zA-Z_][a-zA-Z_0-9]*)\\\\s*(?:(?:\\\\.)|(?:->)))*)\\\\s*([a-zA-Z_][a-zA-Z_0-9]*)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.object.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"->\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_][a-zA-Z_0-9]*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.object.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"everything.else.objcpp\",\n\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.member.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block_innards\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#c_function_call\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.initialization.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  (?:\\n\\t(?=\\\\s)(?<!else|new|return)\\n\\t(?<=\\\\w) \\\\s+(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)  # or word + space before name\\n  )\\n)\\n(\\n  (?:[A-Za-z_][A-Za-z0-9_]*+ | :: )++   # actual name\\n  |\\n  (?:(?<=operator) (?:[-*&<>=+!]+ | \\\\(\\\\) | \\\\[\\\\]))\\n)\\n\\\\s*(\\\\() # opening bracket\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.initialization.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.initialization.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"c_function_call\": {\n\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(?=\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*\\\\(  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"meta.function-call.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"comments\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.block.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"^/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*/$\\\\n?\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"comment.block.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.line.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"^// =(\\\\s*.*?)\\\\s*=\\\\s*$\\\\n?\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.banner.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"disabled\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*#\\\\s*if(n?def)?\\\\b.*$\",\n\t\t\t\t\t\"end\": \"^\\\\s*#\\\\s*endif\\\\b\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"line_continuation_character\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\)\\\\n\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.line-continuation.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"parens\": {\n\t\t\t\t\t\"name\": \"meta.parens.objcpp\",\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"parens-block\": {\n\t\t\t\t\t\"name\": \"meta.parens.block.objcpp\",\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!:):(?!:))\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.range-based.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"pragma-mark\": {\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.pragma.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.pragma-mark.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.pragma-mark.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"^\\\\s*(((#)\\\\s*pragma\\\\s+mark)\\\\s+(.*))\",\n\t\t\t\t\t\"name\": \"meta.section.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"operators\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<![\\\\w$])(sizeof)(?![\\\\w$])\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.sizeof.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.decrement.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.increment.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%=|\\\\+=|-=|\\\\*=|(?<!\\\\()/=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&=|\\\\^=|<<=|>>=|\\\\|=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"<<|>>\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\?)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"strings\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"string_escaped_char\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3]\\\\d{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"string_placeholder\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x) %\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(%)(?!\\\"\\\\s*(PRI|SCN))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.placeholder.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"storage_types\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)(?:void|char|short|int|signed|unsigned|long|float|double|bool|_Bool)(?!\\\\w))\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.built-in.primitive.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)(?:_Complex|_Imaginary|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|memory_order|atomic_bool|atomic_char|atomic_schar|atomic_uchar|atomic_short|atomic_ushort|atomic_int|atomic_uint|atomic_long|atomic_ulong|atomic_llong|atomic_ullong|atomic_char16_t|atomic_char32_t|atomic_wchar_t|atomic_int_least8_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_least16_t|atomic_int_least32_t|atomic_uint_least32_t|atomic_int_least64_t|atomic_uint_least64_t|atomic_int_fast8_t|atomic_uint_fast8_t|atomic_int_fast16_t|atomic_uint_fast16_t|atomic_int_fast32_t|atomic_uint_fast32_t|atomic_int_fast64_t|atomic_uint_fast64_t|atomic_intptr_t|atomic_uintptr_t|atomic_size_t|atomic_ptrdiff_t|atomic_intmax_t|atomic_uintmax_t)(?!\\\\w))\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.built-in.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:\\\\b(asm|__asm__|enum|struct|union)\\\\b)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"vararg_ellipses\": {\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\.\\\\.\\\\.(?!\\\\.)\",\n\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional-line\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\bdefined\\\\b\\\\s*$)|(?:\\\\bdefined\\\\b(?=\\\\s*\\\\(*\\\\s*(?:(?!defined\\\\b)[a-zA-Z_$][\\\\w$]*\\\\b)\\\\s*\\\\)*\\\\s*(?:\\\\n|//|/\\\\*|\\\\?|\\\\:|&&|\\\\|\\\\||\\\\\\\\\\\\s*\\\\n)))\",\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\bdefined\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.macro-name.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"constant.language.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled-elif\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-elif\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-elif-block\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-else\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-else-block\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-contents\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\\\s*\\\\()\\n(?=\\n  (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*\\\\(  # actual name\\n  |\\n  (?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.function.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-blocks\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-functions\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"function-innards\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function.definition.parameters.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#probably_a_parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"function-call-innards\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"default_statement\": {\n\t\t\t\t\t\"name\": \"meta.conditional.case.objcpp\",\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)default(?!\\\\w))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.case.default.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#conditional_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"case_statement\": {\n\t\t\t\t\t\"name\": \"meta.conditional.case.objcpp\",\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)case(?!\\\\w))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.case.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.case.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#conditional_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"switch_statement\": {\n\t\t\t\t\t\"name\": \"meta.block.switch.objcpp\",\n\t\t\t\t\t\"begin\": \"(((?<!\\\\w)switch(?!\\\\w)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.switch.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?:(?<=\\\\})|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.head.switch.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"((?:\\\\{|(?=;)))\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.switch.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#switch_conditional_parentheses\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.body.switch.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{)\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.switch.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#default_statement\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.tail.switch.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"(?<=})[\\\\s\\\\n]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s\\\\n]*(?=;)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"switch_conditional_parentheses\": {\n\t\t\t\t\t\"name\": \"meta.conditional.switch.objcpp\",\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.conditional.switch.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.conditional.switch.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#conditional_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"static_assert\": {\n\t\t\t\t\t\"begin\": \"(static_assert|_Static_assert)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.static_assert.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.static_assert.message.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=(?:L|u8|u|U\\\\s*\\\\\\\")?)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context_c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_call_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"conditional_context\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"member_access\": {\n\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:[a-zA-Z_]\\\\w*\\\\s*(?-mix:(?:(?:\\\\.\\\\*|\\\\.))|(?:(?:->\\\\*|->)))\\\\s*)*)\\\\s*(\\\\b(?!(?:void|char|short|int|signed|unsigned|long|float|double|bool|_Bool|_Complex|_Imaginary|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|memory_order|atomic_bool|atomic_char|atomic_schar|atomic_uchar|atomic_short|atomic_ushort|atomic_int|atomic_uint|atomic_long|atomic_ulong|atomic_llong|atomic_ullong|atomic_char16_t|atomic_char32_t|atomic_wchar_t|atomic_int_least8_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_least16_t|atomic_int_least32_t|atomic_uint_least32_t|atomic_int_least64_t|atomic_uint_least64_t|atomic_int_fast8_t|atomic_uint_fast8_t|atomic_int_fast16_t|atomic_uint_fast16_t|atomic_int_fast32_t|atomic_uint_fast32_t|atomic_int_fast64_t|atomic_uint_fast64_t|atomic_intptr_t|atomic_uintptr_t|atomic_size_t|atomic_ptrdiff_t|atomic_intmax_t|atomic_uintmax_t))[a-zA-Z_]\\\\w*\\\\b(?!\\\\())\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objcpp\",\n\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objcpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"method_access\": {\n\t\t\t\t\t\"contentName\": \"meta.function-call.member.objcpp\",\n\t\t\t\t\t\"begin\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:[a-zA-Z_]\\\\w*\\\\s*(?-mix:(?:(?:\\\\.\\\\*|\\\\.))|(?:(?:->\\\\*|->)))\\\\s*)*)\\\\s*([a-zA-Z_]\\\\w*)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objcpp\",\n\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objcpp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.member.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"numbers\": {\n\t\t\t\t\t\"begin\": \"(?<!\\\\w)(?=\\\\d|\\\\.\\\\d)\",\n\t\t\t\t\t\"end\": \"(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])(?:([0-9a-fA-F](?:(?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))(?:([0-9a-fA-F](?:(?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?(?:((?<!')([pP])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:([lLfF](?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))(?:([0-9](?:(?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))(?:([0-9](?:(?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?(?:((?<!')([eE])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:([lLfF](?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:(?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:(?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))+)(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:(?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)(?:((?<!')([pP])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:(?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)(?:((?<!')([eE])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))+\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?>\\\\\\\\\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.continuation.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cpp_lang\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(friend|explicit|virtual|override|final|noexcept)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(private:|protected:|public:)\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(catch|try|throw|using)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bdelete\\\\b(\\\\s*\\\\[\\\\])?|\\\\bnew\\\\b(?!])\",\n\t\t\t\t\t\"name\": \"keyword.control.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(f|m)[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.member.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bthis\\\\b\",\n\t\t\t\t\t\"name\": \"variable.language.this.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bnullptr\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\btemplate\\\\b\\\\s*\",\n\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(const_cast|dynamic_cast|reinterpret_cast|static_cast)\\\\b\\\\s*\",\n\t\t\t\t\t\"name\": \"keyword.operator.cast.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.objcpp\",\n\t\t\t\t\t\"match\": \"((?:[a-zA-Z_][a-zA-Z_0-9]*::)*)([a-zA-Z_][a-zA-Z_0-9]*)(::)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.scope.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.scope.name.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.operator.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(decltype|wchar_t|char16_t|char32_t)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(constexpr|export|mutable|typename|thread_local)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  ^ |                  # beginning of line\\n  (?:(?<!else|new|=))  # or word + space before name\\n)\\n((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\\n\\\\s*(\\\\()              # opening bracket\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.destructor.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  ^ |                  # beginning of line\\n  (?:(?<!else|new|=))  # or word + space before name\\n)\\n((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\\n\\\\s*(\\\\()              # opening bracket\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.destructor.prototype.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_lang\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"repository\": {\n\t\t\t\t\"template_definition\": {\n\t\t\t\t\t\"begin\": \"\\\\b(template)\\\\s*(<)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.template.angle-brackets.start.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.template.angle-brackets.end.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"template.definition.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_definition_argument\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"template_definition_argument\": {\n\t\t\t\t\t\"match\": \"\\\\s*(?:([a-zA-Z_][a-zA-Z_0-9]*\\\\s*)|((?:[a-zA-Z_][a-zA-Z_0-9]*\\\\s+)*)([a-zA-Z_][a-zA-Z_0-9]*)|([a-zA-Z_][a-zA-Z_0-9]*)\\\\s*(\\\\.\\\\.\\\\.)\\\\s*([a-zA-Z_][a-zA-Z_0-9]*)|((?:[a-zA-Z_][a-zA-Z_0-9]*\\\\s+)*)([a-zA-Z_][a-zA-Z_0-9]*)\\\\s*(=)\\\\s*(\\\\w+))(,|(?=>))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"meta.template.operator.ellipsis.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"meta.template.operator.comma.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"angle_brackets\": {\n\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"name\": \"meta.angle-brackets.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#angle_brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (?!while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\\n  (?:\\\\b[A-Za-z_][A-Za-z0-9_]*+\\\\b|::)*+ # actual name\\n)\\n\\\\s*(\\\\() # opening bracket\",\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"constructor\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?:^\\\\s*)  # beginning of line\\n((?!while|for|do|if|else|switch|catch|enumerate|r?iterate)[A-Za-z_][A-Za-z0-9_:]*) # actual name\\n\\\\s*(\\\\()  # opening bracket\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.constructor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.function.constructor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#probably_a_parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(:)\\n(\\n  (?=\\n    \\\\s*[A-Za-z_][A-Za-z0-9_:]* # actual name\\n    \\\\s* (\\\\() # opening bracket\\n  )\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\t\t\"name\": \"meta.function.constructor.initializer-list.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"special_block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(using)\\\\b\\\\s*(namespace)\\\\b\\\\s*((?:[_A-Za-z][_A-Za-z0-9]*\\\\b(::)?)*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.namespace.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \";\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.using-namespace-declaration.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(namespace)\\\\b\\\\s*([_A-Za-z][_A-Za-z0-9]*\\\\b)?+\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.namespace.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.namespace.$2.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\})|(?=(;|,|\\\\(|\\\\)|>|\\\\[|\\\\]|=))\",\n\t\t\t\t\t\t\t\"name\": \"meta.namespace-block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.scope.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.scope.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#constructor\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(?:(class)|(struct))\\\\b\\\\s*([_A-Za-z][_A-Za-z0-9]*\\\\b)?+(\\\\s*:\\\\s*(public|protected|private)\\\\s*([_A-Za-z][_A-Za-z0-9]*\\\\b)((\\\\s*,\\\\s*(public|protected|private)\\\\s*[_A-Za-z][_A-Za-z0-9]*\\\\b)*))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.struct.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.inherited.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(public|protected|private)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.access.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"[_A-Za-z][_A-Za-z0-9]*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.inherited.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\})|(?=(;|\\\\(|\\\\)|>|\\\\[|\\\\]|=))\",\n\t\t\t\t\t\t\t\"name\": \"meta.class-struct-block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle_brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(\\\\})(\\\\s*\\\\n)?\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.you-forgot-semicolon.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#constructor\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(extern)(?=\\\\s*\\\")\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\})|(?=\\\\w)|(?=\\\\s*#\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"name\": \"meta.extern-block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}|(?=\\\\s*#\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"strings\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(u|u8|U|L)?\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\u\\\\h{4}|\\\\\\\\U\\\\h{8}\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\"?\\\\\\\\abfnrtv]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[0-7]{1,3}\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\x\\\\h+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(u|u8|U|L)?R\\\"(?:([^ ()\\\\\\\\\\\\t]{0,16})|([^ ()\\\\\\\\\\\\t]*))\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\\\\2(\\\\3)\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.raw.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"cpp_lang_newish\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?-mix:##[a-zA-Z_]\\\\w*(?!\\\\w))\",\n\t\t\t\t\t\"name\": \"variable.other.macro.argument.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)((?:inline|constexpr|mutable|friend|explicit|virtual))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.modifier.specificer.functional.pre-parameters.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)((?:final|override|volatile|const|noexcept))(?!\\\\w)(?=\\\\s*(?:(?:(?:(?:\\\\{|;))|[\\\\n\\\\r])))\",\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.functional.post-parameters.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)((?:const|static|volatile|register|restrict|extern))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"storage.modifier.specifier.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)((?:private|protected|public)) *:\",\n\t\t\t\t\t\"name\": \"storage.type.modifier.access.control.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:throw|try|catch)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"keyword.control.exception.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(using|typedef)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"keyword.other.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#memory_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bthis\\\\b\",\n\t\t\t\t\t\"name\": \"variable.language.this.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template_definition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\btemplate\\\\b\\\\s*\",\n\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(const_cast|dynamic_cast|reinterpret_cast|static_cast)\\\\b\\\\s*\",\n\t\t\t\t\t\"name\": \"keyword.operator.cast.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scope_resolution\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(decltype|wchar_t|char16_t|char32_t)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(constexpr|export|mutable|typename|thread_local)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  ^ |                  # beginning of line\\n  (?:(?<!else|new|=))  # or word + space before name\\n)\\n((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\\n\\\\s*(\\\\()              # opening bracket\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.destructor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.destructor.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.destructor.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.destructor.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  ^ |                  # beginning of line\\n  (?:(?<!else|new|=))  # or word + space before name\\n)\\n((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\\n\\\\s*(\\\\()              # opening bracket\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.destructor.prototype.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.$1.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types_c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(const|extern|register|restrict|static|volatile|inline)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operator_overload\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings-c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n^\\\\s* ((\\\\#)\\\\s*define) \\\\s+\\t# define\\n((?<id>[a-zA-Z_$][\\\\w$]*))\\t  # macro name\\n(?:\\n  (\\\\()\\n\\t(\\n\\t  \\\\s* \\\\g<id> \\\\s*\\t\\t # first argument\\n\\t  ((,) \\\\s* \\\\g<id> \\\\s*)*  # additional arguments\\n\\t  (?:\\\\.\\\\.\\\\.)?\\t\\t\\t# varargs ellipsis?\\n\\t)\\n  (\\\\))\\n)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.define.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.macro.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(error|warning))\\\\b\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$3.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.diagnostic.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(include(?:_next)?|import))\\\\b\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.$3.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.include.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.include.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*line)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.line.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*undef))\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.undef.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*pragma))\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.pragma.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.sys-types.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.pthread.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) \\\\b\\n(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t\\n|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t\\n|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t\\n|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t\\n|uintmax_t|uintmax_t)\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.stdint.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)[a-zA-Z_](?:\\\\w)*_t(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens-c\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\\w)(?!\\\\s*(?:not|compl|sizeof|new|delete|not_eq|bitand|xor|bitor|and|or|throw|and_eq|xor_eq|or_eq|alignof|alignas|typeid|noexcept|static_cast|dynamic_cast|const_cast|reinterpret_cast|while|for|do|if|else|goto|switch|try|catch|return|break|case|continue|default|auto|void|char|short|int|signed|unsigned|long|float|double|bool|wchar_t|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|NULL|true|false|nullptr|class|struct|union|enum|const|static|volatile|register|restrict|extern|inline|constexpr|mutable|friend|explicit|virtual|volatile|const|noexcept|constexpr|mutable|constexpr|consteval|private|protected|public|this|template|namespace|using|operator|typedef|decltype|typename|asm|__asm__|concept|requires|export|thread_local|atomic_cancel|atomic_commit|atomic_noexcept|co_await|co_return|co_yield|import|module|reflexpr|synchronized)\\\\s*\\\\()(?=[a-zA-Z_]\\\\w*\\\\s*\\\\()\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"name\": \"meta.function.definition.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-innards-c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.bracket.square.access.objcpp\",\n\t\t\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards-c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.array.bracket.square.objcpp\",\n\t\t\t\t\t\"match\": \"(?-mix:(?<!delete))\\\\\\\\[\\\\\\\\s*\\\\\\\\]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.objcpp\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"repository\": {\n\t\t\t\t\"literal_numeric_seperator\": {\n\t\t\t\t\t\"match\": \"(?<!')'(?!')\",\n\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"number_literal\": {\n\t\t\t\t\t\"match\": \"((?<!\\\\w)(?:(?:(?:(0[xX])(?:([0-9a-fA-F](?:(?:(?:[0-9a-fA-F]|((?<!')'(?!')))))*))?((?:(?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F]))))(?:([0-9a-fA-F](?:(?:(?:[0-9a-fA-F]|((?<!')'(?!')))))*))?(?:([pP])(\\\\+)?(\\\\-)?((?:[0-9](?:(?:(?:[0-9]|(?:(?<!')'(?!')))))*)))?|(?:([0-9](?:(?:(?:[0-9]|((?<!')'(?!')))))*))?((?:(?:(?<=[0-9])\\\\.|\\\\.(?=[0-9]))))(?:([0-9](?:(?:(?:[0-9]|((?<!')'(?!')))))*))?(?:([eE])(\\\\+)?(\\\\-)?((?:[0-9](?:(?:(?:[0-9]|(?:(?<!')'(?!')))))*)))?)(?:([lLfF](?!\\\\w)))?|(?:(?:(?:(?:(?:(0[bB])((?:(?:(?:[01]|((?<!')'(?!')))))+)|(0)((?:(?:(?:[0-7]|((?<!')'(?!')))))+)))|(0[xX])([0-9a-fA-F](?:(?:(?:[0-9a-fA-F]|((?<!')'(?!')))))*)(?:([pP])(\\\\+)?(\\\\-)?((?:[0-9](?:(?:(?:[0-9]|(?:(?<!')'(?!')))))*)))?))|([0-9](?:(?:(?:[0-9]|((?<!')'(?!')))))*)(?:([eE])(\\\\+)?(\\\\-)?((?:[0-9](?:(?:(?:[0-9]|(?:(?<!')'(?!')))))*)))?)(?:((?:(?:(?:(?:(?:(?:(?:(?:(?:(?:(?:(?:LL[uU]|ll[uU]))|[uU]LL))|[uU]ll))|ll))|LL))|[uUlL]))(?!\\\\w)))?))(\\\\w*))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"24\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"25\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"26\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"27\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"28\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"29\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"30\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"31\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"32\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"33\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"34\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"35\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"36\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"37\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"38\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"39\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"40\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literal_numeric_seperator\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"41\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"42\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.user-defined.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"constants\": {\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:NULL|true|false|nullptr)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"constant.language.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"storage_types_c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:auto|void|char|short|int|signed|unsigned|long|float|double|bool|wchar_t)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.primitive.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(asm|__asm__|enum|union|struct)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"memory_operators\": {\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:(delete)\\\\s*(\\\\[\\\\])|(delete))|(new))(?!\\\\w)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.memory.delete.array.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.memory.delete.array.bracket.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.memory.delete.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.memory.new.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"keyword.operator.memory.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"template_call_innards\": {\n\t\t\t\t\t\"match\": \"<(?:[\\\\s<>,\\\\w])*>\\\\s*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.template.call.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#storage_types_c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)[a-zA-Z_]\\\\w*(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.user-defined.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.template.argument.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"template_definition\": {\n\t\t\t\t\t\"name\": \"meta.template.definition.objcpp\",\n\t\t\t\t\t\"begin\": \"(?-mix:(?<!\\\\w)(template)\\\\s*(<))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.start.template.definition.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?-mix:(>))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.angle-brackets.end.template.definition.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope_resolution\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_definition_argument\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template_call_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"template_definition_argument\": {\n\t\t\t\t\t\"match\": \"((?:(?:(?:(?:(?:(?:\\\\s*([a-zA-Z_]\\\\w*)|((?:[a-zA-Z_]\\\\w*\\\\s+)+)([a-zA-Z_]\\\\w*)))|([a-zA-Z_]\\\\w*)\\\\s*(\\\\.\\\\.\\\\.)\\\\s*([a-zA-Z_]\\\\w*)))|((?:[a-zA-Z_]\\\\w*\\\\s+)*)([a-zA-Z_]\\\\w*)\\\\s*([=])\\\\s*(\\\\w+)))\\\\s*(?:(?:(,)|(?=>))))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.argument.$1.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.argument.$2.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.ellipsis.template.definition.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.template.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.template.argument.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"scope_resolution\": {\n\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?::)*\\\\s*)([a-zA-Z_]\\\\w*)\\\\s*((?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?(::)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.scope-resolution.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope-resolution.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"angle_brackets\": {\n\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"name\": \"meta.angle-brackets.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#angle_brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.block.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (?!while|for|do|if|else|switch|catch|return)\\n  (?:\\\\b[A-Za-z_][A-Za-z0-9_]*+\\\\b|::)*+ # actual name\\n)\\n\\\\s*(\\\\() # opening bracket\",\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"constructor\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?:^\\\\s*)  # beginning of line\\n((?!while|for|do|if|else|switch|catch)[A-Za-z_][A-Za-z0-9_:]*) # actual name\\n\\\\s*(\\\\()  # opening bracket\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.constructor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.constructor.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.constructor.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.function.constructor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#probably_a_parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(:)\\n(\\n  (?=\\n    \\\\s*[A-Za-z_][A-Za-z0-9_:]* # actual name\\n    \\\\s* (\\\\() # opening bracket\\n  )\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.initializer-list.parameters.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\t\t\"name\": \"meta.function.constructor.initializer-list.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"special_block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"https://en.cppreference.com/w/cpp/language/namespace\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(using)\\\\s+(namespace)\\\\s+(?:((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?::)*)\\\\s*)?((?<!\\\\w)[a-zA-Z_]\\\\w*(?!\\\\w))(?=;|\\\\n)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.using.directive.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.namespace.directive.objcpp storage.type.namespace.directive.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \";\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.using-namespace-declaration.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<!\\\\w)(namespace)\\\\s+(?:(?:((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?::)*[a-zA-Z_]\\\\w*)|(?={)))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.namespace.definition.objcpp storage.type.namespace.definition.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)[a-zA-Z_]\\\\w*(?!\\\\w))\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"::\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.access.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\})|(?=(;|,|\\\\(|\\\\)|>|\\\\[|\\\\]|=))\",\n\t\t\t\t\t\t\t\"name\": \"meta.namespace-block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.scope.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.scope.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#constructor\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(?:(class)|(struct))\\\\b\\\\s*([_A-Za-z][_A-Za-z0-9]*\\\\b)?+(\\\\s*:\\\\s*(public|protected|private)\\\\s*([_A-Za-z][_A-Za-z0-9]*\\\\b)((\\\\s*,\\\\s*(public|protected|private)\\\\s*[_A-Za-z][_A-Za-z0-9]*\\\\b)*))?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.class.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.struct.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.inherited.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(public|protected|private)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.modifier.access.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"[_A-Za-z][_A-Za-z0-9]*\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.inherited.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\})|(;)|(?=(\\\\(|\\\\)|>|\\\\[|\\\\]|=))\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.class-struct-block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#angle_brackets\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(\\\\})(\\\\s*\\\\n)?\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.you-forgot-semicolon.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#constructor\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(extern)(?=\\\\s*\\\")\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\})|(?=\\\\w)|(?=\\\\s*#\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"name\": \"meta.extern-block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\}|(?=\\\\s*#\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_block\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"strings\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(u|u8|U|L)?\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\u\\\\h{4}|\\\\\\\\U\\\\h{8}\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\"?\\\\\\\\abfnrtv]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[0-7]{1,3}\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\x\\\\h+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(u|u8|U|L)?R\\\"(?:([^ ()\\\\\\\\\\\\t]{0,16})|([^ ()\\\\\\\\\\\\t]*))\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.encoding.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\\\\2(\\\\3)\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.delimiter-too-long.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.raw.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"probably_a_parameter\": {\n\t\t\t\t\t\"match\": \"(?:(?:([a-zA-Z_]\\\\w*)\\\\s*(?==)|(?<=\\\\w\\\\s|\\\\*\\\\/|[&*>\\\\]\\\\)])\\\\s*([a-zA-Z_]\\\\w*)\\\\s*(?=(?:\\\\[\\\\]\\\\s*)?(?:(?:,|\\\\))))))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.probably.defaulted.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.probably.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"operator_overload\": {\n\t\t\t\t\t\"begin\": \"((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?::)*)\\\\s*(operator)((?:(?:\\\\s*(?:\\\\+\\\\+|\\\\-\\\\-|\\\\(\\\\)|\\\\[\\\\]|\\\\->|\\\\+\\\\+|\\\\-\\\\-|\\\\+|\\\\-|!|~|\\\\*|&|\\\\->\\\\*|\\\\*|\\\\/|%|\\\\+|\\\\-|<<|>>|<=>|<|<=|>|>=|==|!=|&|\\\\^|\\\\||&&|\\\\|\\\\||=|\\\\+=|\\\\-=|\\\\*=|\\\\/=|%=|<<=|>>=|&=|\\\\^=|\\\\|=|,)|\\\\s+(?:(?:(?:new|new\\\\[\\\\]|delete|delete\\\\[\\\\])|(?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?::)*[a-zA-Z_]\\\\w*\\\\s*(?:&)?)))))\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.scope.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.operator.overload.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.operator.overloadee.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.definition.parameters.operator-overload.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#probably_a_parameter\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-innards-c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"access-method\": {\n\t\t\t\t\t\"name\": \"meta.function-call.member.objcpp\",\n\t\t\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))\\\\s*(?:(\\\\.)|(->))((?:(?:[a-zA-Z_][a-zA-Z_0-9]*)\\\\s*(?:(?:\\\\.)|(?:->)))*)\\\\s*([a-zA-Z_][a-zA-Z_0-9]*)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"->\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_][a-zA-Z_0-9]*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"everything.else.objcpp\",\n\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.member.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards-c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"access-member\": {\n\t\t\t\t\t\"name\": \"variable.other.object.access.objcpp\",\n\t\t\t\t\t\"match\": \"(?:(?:([a-zA-Z_]\\\\w*)|(?<=\\\\]|\\\\))))\\\\s*(?:(?:((?:(?:\\\\.|\\\\.\\\\*)))|((?:(?:->|->\\\\*)))))\\\\s*((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:\\\\.|->))\\\\s*)*)\\\\b(?!(?:auto|void|char|short|int|signed|unsigned|long|float|double|bool|wchar_t|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t))([a-zA-Z_]\\\\w*)\\\\b(?!\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"->\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_]\\\\w*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \".+\",\n\t\t\t\t\t\t\t\t\t\"name\": \"everything.else.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"block-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block_innards-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-method\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-member\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#c_function_call\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.initialization.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  (?:\\n\\t(?=\\\\s)(?<!else|new|return)\\n\\t(?<=\\\\w) \\\\s+(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)  # or word + space before name\\n  )\\n)\\n(\\n  (?:[A-Za-z_][A-Za-z0-9_]*+ | :: )++   # actual name\\n  |\\n  (?:(?<=operator) (?:[-*&<>=+!]+ | \\\\(\\\\) | \\\\[\\\\]))\\n)\\n\\\\s*(\\\\() # opening bracket\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.initialization.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.initialization.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens-block-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"c_function_call\": {\n\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|return|typeid|alignof|alignas|sizeof|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(?=\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*(?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?\\\\(  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"meta.function-call.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards-c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"comments-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.block.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"^/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*/$\\\\n?\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"comment.block.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.line.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"^// =(\\\\s*.*?)\\\\s*=\\\\s*$\\\\n?\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.banner.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"disabled\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*#\\\\s*if(n?def)?\\\\b.*$\",\n\t\t\t\t\t\"end\": \"^\\\\s*#\\\\s*endif\\\\b\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"line_continuation_character\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\)\\\\n\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.line-continuation.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"parens-c\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens-c\\b.objcpp\",\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"parens-block-c\": {\n\t\t\t\t\t\"name\": \"meta.block.parens.objcpp\",\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!:):(?!:)\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.range-based.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"pragma-mark\": {\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.pragma.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.pragma-mark.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.pragma-mark.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"^\\\\s*(((#)\\\\s*pragma\\\\s+mark)\\\\s+(.*))\",\n\t\t\t\t\t\"name\": \"meta.section.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"operators\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)((?:not|compl|sizeof|new|delete|not_eq|bitand|xor|bitor|and|or|and_eq|xor_eq|or_eq|alignof|alignas|typeid|noexcept))(?!\\\\w))\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.$1.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.decrement.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.increment.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%=|\\\\+=|-=|\\\\*=|(?<!\\\\()/=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&=|\\\\^=|<<=|>>=|\\\\|=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"<<|>>\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\t\t\"applyEndPatternLast\": true,\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#access-method\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#access-member\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#c_function_call\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"strings-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?-mix:(?<![\\\\da-fA-F])')\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"string_escaped_char-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3]\\\\d{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"string_placeholder-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x) %\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"vararg_ellipses-c\": {\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\.\\\\.\\\\.(?!\\\\.)\",\n\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional-line\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\bdefined\\\\b\\\\s*$)|(?:\\\\bdefined\\\\b(?=\\\\s*\\\\(*\\\\s*(?:(?!defined\\\\b)[a-zA-Z_$][\\\\w$]*\\\\b)\\\\s*\\\\)*\\\\s*(?:\\\\n|//|/\\\\*|\\\\?|\\\\:|&&|\\\\|\\\\||\\\\\\\\\\\\s*\\\\n)))\",\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\bdefined\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.macro-name.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#number_literal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled-elif\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-elif\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-elif-block\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.in-block.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objcpp\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-else\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-else-block\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-contents\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:##?[a-zA-Z_]\\\\w*(?!\\\\w))\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.macro.argument.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.block.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|return|typeid|alignof|alignas|sizeof|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\\\s*\\\\()\\n(?=\\n  (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*\\\\(  # actual name\\n  |\\n  (?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.function.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objcpp\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char-c\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-method\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-member\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-blocks\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-functions\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types_c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-method\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-member\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|return|typeid|alignof|alignas|sizeof|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"function-innards-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types_c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function.definition.parameters.objcpp\",\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|return|typeid|alignof|alignas|sizeof|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)|:\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#probably_a_parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"function-call-innards-c\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types_c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-method\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#access-member\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|return|typeid|alignof|alignas|sizeof|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:new)\\\\s*((?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?) # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.memory.new.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_innards\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<!\\\\w)(?!\\\\s*(?:not|compl|sizeof|new|delete|not_eq|bitand|xor|bitor|and|or|throw|and_eq|xor_eq|or_eq|alignof|alignas|typeid|noexcept|static_cast|dynamic_cast|const_cast|reinterpret_cast|while|for|do|if|else|goto|switch|try|catch|return|break|case|continue|default|auto|void|char|short|int|signed|unsigned|long|float|double|bool|wchar_t|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|NULL|true|false|nullptr|class|struct|union|enum|const|static|volatile|register|restrict|extern|inline|constexpr|mutable|friend|explicit|virtual|volatile|const|noexcept|constexpr|mutable|constexpr|consteval|private|protected|public|this|template|namespace|using|operator|typedef|decltype|typename|asm|__asm__|concept|requires|export|thread_local|atomic_cancel|atomic_commit|atomic_noexcept|co_await|co_return|co_yield|import|module|reflexpr|synchronized)\\\\s*\\\\()((?:[a-zA-Z_]\\\\w*\\\\s*(?:(?:<(?:[\\\\s<>,\\\\w])*>\\\\s*))?::)*)\\\\s*([a-zA-Z_]\\\\w*)\\\\s*(?:((?:<(?:[\\\\s<>,\\\\w])*>\\\\s*)))?(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#scope_resolution\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.objcpp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#template_call_innards\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objcpp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards-c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards-c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"disabled\": {\n\t\t\t\"begin\": \"^\\\\s*#\\\\s*if(n?def)?\\\\b.*$\",\n\t\t\t\"comment\": \"eat nested preprocessor if(def)s\",\n\t\t\t\"end\": \"^\\\\s*#\\\\s*endif\\\\b.*$\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"implementation_innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-implementation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-implementation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-other-implementation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_super\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface_innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-interface\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-interface\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-other-interface\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#properties\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method\": {\n\t\t\t\"begin\": \"^(-|\\\\+)\\\\s*\",\n\t\t\t\"end\": \"(?=\\\\{|#)|;\",\n\t\t\t\"name\": \"meta.function.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\\\\s*(\\\\w+\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.return-type.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_type_qualifier\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b\\\\w+(?=:)\",\n\t\t\t\t\t\"name\": \"entity.name.function.name-of-parameter.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((:))\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.name-of-parameter.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\\\\s*(\\\\w+\\\\b)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.argument-type.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_type_qualifier\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method_super\": {\n\t\t\t\"begin\": \"^(?=-|\\\\+)\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=#)\",\n\t\t\t\"name\": \"meta.function-with-body.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma-mark\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.pragma.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.pragma-mark.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(#\\\\s*(pragma\\\\s+mark)\\\\s+(.*))\",\n\t\t\t\"name\": \"meta.section.objcpp\"\n\t\t},\n\t\t\"preprocessor-rule-disabled-implementation\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0)\\\\b).*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"name\": \"comment.block.preprocessor.if-branch.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-disabled-interface\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0)\\\\b).*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"name\": \"comment.block.preprocessor.if-branch.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-implementation\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0*1)\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b).*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.objcpp\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#implementation_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-interface\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0*1)\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b).*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.objcpp\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-other-implementation\": {\n\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(if(n?def)?)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b).*?(?:(?=(?://|/\\\\*))|$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implementation_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-other-interface\": {\n\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(if(n?def)?)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objcpp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b).*?(?:(?=(?://|/\\\\*))|$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"properties\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)property)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.property.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.scope.end.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.property-with-attributes.objcpp\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(getter|setter|readonly|readwrite|assign|retain|copy|nonatomic|atomic|strong|weak|nonnull|nullable|null_resettable|null_unspecified|class|direct)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.property.attribute.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.property.objcpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"((@)property)\\\\b\",\n\t\t\t\t\t\"name\": \"meta.property.objcpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property_directive\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(dynamic|synthesize)\\\\b\",\n\t\t\t\"name\": \"keyword.other.property.directive.objcpp\"\n\t\t},\n\t\t\"protocol_list\": {\n\t\t\t\"begin\": \"(<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.objcpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.protocol-list.objcpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bNS(GlyphStorage|M(utableCopying|enuItem)|C(hangeSpelling|o(ding|pying|lorPicking(Custom|Default)))|T(oolbarItemValidations|ext(Input|AttachmentCell))|I(nputServ(iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(CTypeSerializationCallBack|ect)|D(ecimalNumberBehaviors|raggingInfo)|U(serInterfaceValidations|RL(HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(ToobarItem|UserInterfaceItem)|Locking)\\\\b\",\n\t\t\t\t\t\"name\": \"support.other.protocol.objcpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"protocol_type_qualifier\": {\n\t\t\t\"match\": \"\\\\b(in|out|inout|oneway|bycopy|byref|nonnull|nullable|_Nonnull|_Nullable|_Null_unspecified)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.protocol.objcpp\"\n\t\t},\n\t\t\"special_variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b_cmd\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.selector.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(self|super)\\\\b\",\n\t\t\t\t\t\"name\": \"variable.language.objcpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escaped_char\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3]\\\\d{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\"name\": \"constant.character.escape.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.objcpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_placeholder\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) %\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder.objcpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(%)(?!\\\"\\\\s*(PRI|SCN))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.placeholder.objcpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/objective-c/syntaxes/objective-c.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jeff-hykin/better-objc-syntax/blob/master/autogenerated/objc.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jeff-hykin/better-objc-syntax/commit/119b75fb1f4d3e8726fa62588e3b935e0b719294\",\n\t\"name\": \"Objective-C\",\n\t\"scopeName\": \"source.objc\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_1\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_2\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_3\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_4\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_5\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#apple_foundation_functional_macros\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_7\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_8\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_9\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_10\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_11\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_12\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_13\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_14\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_15\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_16\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_17\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_18\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_19\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_20\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_21\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_22\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_23\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_24\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_25\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_26\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_27\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_28\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_29\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#anonymous_pattern_30\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#bracketed_content\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#c_lang\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"anonymous_pattern_1\": {\n\t\t\t\"begin\": \"((@)(interface|protocol))(?!.+;)\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*((:)(?:\\\\s*)([A-Za-z][A-Za-z0-9]*))?(\\\\s|\\\\n)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.other.inherited-class.objc\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.objc\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"meta.divider.objc\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"meta.inherited-class.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.scope.interface.objc\",\n\t\t\t\"end\": \"((@)end)\\\\b\",\n\t\t\t\"name\": \"meta.interface-or-protocol.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_10\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(defs|encode)\\\\b\",\n\t\t\t\"name\": \"keyword.other.objc\"\n\t\t},\n\t\t\"anonymous_pattern_11\": {\n\t\t\t\"match\": \"\\\\bid\\\\b\",\n\t\t\t\"name\": \"storage.type.id.objc\"\n\t\t},\n\t\t\"anonymous_pattern_12\": {\n\t\t\t\"match\": \"\\\\b(IBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class|instancetype)\\\\b\",\n\t\t\t\"name\": \"storage.type.objc\"\n\t\t},\n\t\t\"anonymous_pattern_13\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(class|protocol)\\\\b\",\n\t\t\t\"name\": \"storage.type.objc\"\n\t\t},\n\t\t\"anonymous_pattern_14\": {\n\t\t\t\"begin\": \"((@)selector)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.selector.method-name.objc\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.selector.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\",\n\t\t\t\t\t\"name\": \"support.function.any-method.name-of-parameter.objc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_15\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.modifier.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(synchronized|public|package|private|protected)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.objc\"\n\t\t},\n\t\t\"anonymous_pattern_16\": {\n\t\t\t\"match\": \"\\\\b(YES|NO|Nil|nil)\\\\b\",\n\t\t\t\"name\": \"constant.language.objc\"\n\t\t},\n\t\t\"anonymous_pattern_17\": {\n\t\t\t\"match\": \"\\\\bNSApp\\\\b\",\n\t\t\t\"name\": \"support.variable.foundation.objc\"\n\t\t},\n\t\t\"anonymous_pattern_18\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.cocoa.leopard.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.function.cocoa.leopard.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\s*)\\\\b(NS(Rect(ToCGRect|FromCGRect)|MakeCollectable|S(tringFromProtocol|ize(ToCGSize|FromCGSize))|Draw(NinePartImage|ThreePartImage)|P(oint(ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))\\\\b\"\n\t\t},\n\t\t\"anonymous_pattern_19\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading.cocoa.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.function.cocoa.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\s*)\\\\b(NS(R(ound(DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(CriticalAlertPanel(RelativeToWindow)?|InformationalAlertPanel(RelativeToWindow)?|AlertPanel(RelativeToWindow)?)|e(set(MapTable|HashTable)|c(ycleZone|t(Clip(List)?|F(ill(UsingOperation|List(UsingOperation|With(Grays|Colors(UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(dPixel|l(MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(s)?|WindowServerMemory|AlertPanel)|M(i(n(X|Y)|d(X|Y))|ouseInRect|a(p(Remove|Get|Member|Insert(IfAbsent|KnownAbsent)?)|ke(R(ect|ange)|Size|Point)|x(Range|X|Y)))|B(itsPer(SampleFromDepth|PixelFromDepth)|e(stDepth|ep|gin(CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(ho(uldRetainWithZone|w(sServicesMenuItem|AnimationEffect))|tringFrom(R(ect|ange)|MapTable|S(ize|elector)|HashTable|Class|Point)|izeFromString|e(t(ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(Big(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|Short|Host(ShortTo(Big|Little)|IntTo(Big|Little)|DoubleTo(Big|Little)|FloatTo(Big|Little)|Long(To(Big|Little)|LongTo(Big|Little)))|Int|Double|Float|L(ittle(ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(ToHost|LongToHost))|ong(Long)?)))|H(ighlightRect|o(stByteOrder|meDirectory(ForUser)?)|eight|ash(Remove|Get|Insert(IfAbsent|KnownAbsent)?)|FSType(CodeFromFileType|OfFile))|N(umberOfColorComponents|ext(MapEnumeratorPair|HashEnumeratorItem))|C(o(n(tainsRect|vert(GlyphsToPackedGlyphs|Swapped(DoubleToHost|FloatToHost)|Host(DoubleToSwapped|FloatToSwapped)))|unt(MapTable|HashTable|Frames|Windows(ForContext)?)|py(M(emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(MapTables|HashTables))|lassFromString|reate(MapTable(WithZone)?|HashTable(WithZone)?|Zone|File(namePboardType|ContentsPboardType)))|TemporaryDirectory|I(s(ControllerMarker|EmptyRect|FreedObject)|n(setRect|crementExtraRefCount|te(r(sect(sRect|ionR(ect|ange))|faceStyleForKey)|gralRect)))|Zone(Realloc|Malloc|Name|Calloc|Fr(omPointer|ee))|O(penStepRootDirectory|ffsetRect)|D(i(sableScreenUpdates|videRect)|ottedFrameRect|e(c(imal(Round|Multiply|S(tring|ubtract)|Normalize|Co(py|mpa(ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(MemoryPages|Object))|raw(Gr(oove|ayBezel)|B(itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(hiteBezel|indowBackground)|LightBezel))|U(serName|n(ionR(ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(Bundle(Setup|Cleanup)|Setup(VirtualMachine)?|Needs(ToLoadClasses|VirtualMachine)|ClassesF(orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(oint(InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(n(d(MapTableEnumeration|HashTableEnumeration)|umerate(MapTable|HashTable)|ableScreenUpdates)|qual(R(ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(ileTypeForHFSTypeCode|ullUserName|r(ee(MapTable|HashTable)|ame(Rect(WithWidth(UsingOperation)?)?|Address)))|Wi(ndowList(ForContext)?|dth)|Lo(cationInRange|g(v|PageSize)?)|A(ccessibility(R(oleDescription(ForUIElement)?|aiseBadArgumentException)|Unignored(Children(ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(Main|Load)|vailableWindowDepths|ll(MapTable(Values|Keys)|HashTableObjects|ocate(MemoryPages|Collectable|Object)))))\\\\b\"\n\t\t},\n\t\t\"anonymous_pattern_2\": {\n\t\t\t\"begin\": \"((@)(implementation))\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*(?::\\\\s*([A-Za-z][A-Za-z0-9]*))?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.objc\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.scope.implementation.objc\",\n\t\t\t\"end\": \"((@)end)\\\\b\",\n\t\t\t\"name\": \"meta.implementation.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implementation_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_20\": {\n\t\t\t\"match\": \"\\\\bNS(RuleEditor|G(arbageCollector|radient)|MapTable|HashTable|Co(ndition|llectionView(Item)?)|T(oolbarItemGroup|extInputClient|r(eeNode|ackingArea))|InvocationOperation|Operation(Queue)?|D(ictionaryController|ockTile)|P(ointer(Functions|Array)|athC(o(ntrol(Delegate)?|mponentCell)|ell(Delegate)?)|r(intPanelAccessorizing|edicateEditor(RowTemplate)?))|ViewController|FastEnumeration|Animat(ionContext|ablePropertyContainer))\\\\b\",\n\t\t\t\"name\": \"support.class.cocoa.leopard.objc\"\n\t\t},\n\t\t\"anonymous_pattern_21\": {\n\t\t\t\"match\": \"\\\\bNS(R(u(nLoop|ler(Marker|View))|e(sponder|cursiveLock|lativeSpecifier)|an(domSpecifier|geSpecifier))|G(etCommand|lyph(Generator|Storage|Info)|raphicsContext)|XML(Node|D(ocument|TD(Node)?)|Parser|Element)|M(iddleSpecifier|ov(ie(View)?|eCommand)|utable(S(tring|et)|C(haracterSet|opying)|IndexSet|D(ictionary|ata)|URLRequest|ParagraphStyle|A(ttributedString|rray))|e(ssagePort(NameServer)?|nu(Item(Cell)?|View)?|t(hodSignature|adata(Item|Query(ResultGroup|AttributeValueTuple)?)))|a(ch(BootstrapServer|Port)|trix))|B(itmapImageRep|ox|u(ndle|tton(Cell)?)|ezierPath|rowser(Cell)?)|S(hadow|c(anner|r(ipt(SuiteRegistry|C(o(ercionHandler|mmand(Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(er|View)|een))|t(epper(Cell)?|atus(Bar|Item)|r(ing|eam))|imple(HorizontalTypesetter|CString)|o(cketPort(NameServer)?|und|rtDescriptor)|p(e(cifierTest|ech(Recognizer|Synthesizer)|ll(Server|Checker))|litView)|e(cureTextField(Cell)?|t(Command)?|archField(Cell)?|rializer|gmentedC(ontrol|ell))|lider(Cell)?|avePanel)|H(ost|TTP(Cookie(Storage)?|URLResponse)|elpManager)|N(ib(Con(nector|trolConnector)|OutletConnector)?|otification(Center|Queue)?|u(ll|mber(Formatter)?)|etService(Browser)?|ameSpecifier)|C(ha(ngeSpelling|racterSet)|o(n(stantString|nection|trol(ler)?|ditionLock)|d(ing|er)|unt(Command|edSet)|pying|lor(Space|P(ick(ing(Custom|Default)|er)|anel)|Well|List)?|m(p(oundPredicate|arisonPredicate)|boBox(Cell)?))|u(stomImageRep|rsor)|IImageRep|ell|l(ipView|o(seCommand|neCommand)|assDescription)|a(ched(ImageRep|URLResponse)|lendar(Date)?)|reateCommand)|T(hread|ypesetter|ime(Zone|r)|o(olbar(Item(Validations)?)?|kenField(Cell)?)|ext(Block|Storage|Container|Tab(le(Block)?)?|Input|View|Field(Cell)?|List|Attachment(Cell)?)?|a(sk|b(le(Header(Cell|View)|Column|View)|View(Item)?))|reeController)|I(n(dex(S(pecifier|et)|Path)|put(Manager|S(tream|erv(iceProvider|er(MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(Rep|Cell|View)?)|O(ut(putStream|lineView)|pen(GL(Context|Pixel(Buffer|Format)|View)|Panel)|bj(CTypeSerializationCallBack|ect(Controller)?))|D(i(st(antObject(Request)?|ributed(NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(Controller)?|e(serializer|cimalNumber(Behaviors|Handler)?|leteCommand)|at(e(Components|Picker(Cell)?|Formatter)?|a)|ra(wer|ggingInfo))|U(ser(InterfaceValidations|Defaults(Controller)?)|RL(Re(sponse|quest)|Handle(Client)?|C(onnection|ache|redential(Storage)?)|Download(Delegate)?|Prot(ocol(Client)?|ectionSpace)|AuthenticationChallenge(Sender)?)?|n(iqueIDSpecifier|doManager|archiver))|P(ipe|o(sitionalSpecifier|pUpButton(Cell)?|rt(Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(steboard|nel|ragraphStyle|geLayout)|r(int(Info|er|Operation|Panel)|o(cessInfo|tocolChecker|perty(Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(numerator|vent|PSImageRep|rror|x(ception|istsCommand|pression))|V(iew(Animation)?|al(idated(ToobarItem|UserInterfaceItem)|ue(Transformer)?))|Keyed(Unarchiver|Archiver)|Qui(ckDrawView|tCommand)|F(ile(Manager|Handle|Wrapper)|o(nt(Manager|Descriptor|Panel)?|rm(Cell|atter)))|W(hoseSpecifier|indow(Controller)?|orkspace)|L(o(c(k(ing)?|ale)|gicalTest)|evelIndicator(Cell)?|ayoutManager)|A(ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(ication|e(Script|Event(Manager|Descriptor)))|ffineTransform|lert|r(chiver|ray(Controller)?)))\\\\b\",\n\t\t\t\"name\": \"support.class.cocoa.objc\"\n\t\t},\n\t\t\"anonymous_pattern_22\": {\n\t\t\t\"match\": \"\\\\bNS(R(oundingMode|ule(Editor(RowType|NestingMode)|rOrientation)|e(questUserAttentionType|lativePosition))|G(lyphInscription|radientDrawingOptions)|XML(NodeKind|D(ocumentContentKind|TDNodeKind)|ParserError)|M(ultibyteGlyphPacking|apTableOptions)|B(itmapFormat|oxType|ezierPathElement|ackgroundStyle|rowserDropOperation)|S(tr(ing(CompareOptions|DrawingOptions|EncodingConversionOptions)|eam(Status|Event))|p(eechBoundary|litViewDividerStyle)|e(archPathD(irectory|omainMask)|gmentS(tyle|witchTracking))|liderType|aveOptions)|H(TTPCookieAcceptPolicy|ashTableOptions)|N(otification(SuspensionBehavior|Coalescing)|umberFormatter(RoundingMode|Behavior|Style|PadPosition)|etService(sError|Options))|C(haracterCollection|o(lor(RenderingIntent|SpaceModel|PanelMode)|mp(oundPredicateType|arisonPredicateModifier))|ellStateValue|al(culationError|endarUnit))|T(ypesetterControlCharacterAction|imeZoneNameStyle|e(stComparisonOperation|xt(Block(Dimension|V(erticalAlignment|alueType)|Layer)|TableLayoutAlgorithm|FieldBezelStyle))|ableView(SelectionHighlightStyle|ColumnAutoresizingStyle)|rackingAreaOptions)|I(n(sertionPosition|te(rfaceStyle|ger))|mage(RepLoadStatus|Scaling|CacheMode|FrameStyle|LoadStatus|Alignment))|Ope(nGLPixelFormatAttribute|rationQueuePriority)|Date(Picker(Mode|Style)|Formatter(Behavior|Style))|U(RL(RequestCachePolicy|HandleStatus|C(acheStoragePolicy|redentialPersistence))|Integer)|P(o(stingStyle|int(ingDeviceType|erFunctionsOptions)|pUpArrowPosition)|athStyle|r(int(ing(Orientation|PaginationMode)|erTableStatus|PanelOptions)|opertyList(MutabilityOptions|Format)|edicateOperatorType))|ExpressionType|KeyValue(SetMutationKind|Change)|QTMovieLoopMode|F(indPanel(SubstringMatchType|Action)|o(nt(RenderingMode|FamilyClass)|cusRingPlacement))|W(hoseSubelementIdentifier|ind(ingRule|ow(B(utton|ackingLocation)|SharingType|CollectionBehavior)))|L(ine(MovementDirection|SweepDirection|CapStyle|JoinStyle)|evelIndicatorStyle)|Animation(BlockingMode|Curve))\\\\b\",\n\t\t\t\"name\": \"support.type.cocoa.leopard.objc\"\n\t\t},\n\t\t\"anonymous_pattern_23\": {\n\t\t\t\"match\": \"\\\\bC(I(Sampler|Co(ntext|lor)|Image(Accumulator)?|PlugIn(Registration)?|Vector|Kernel|Filter(Generator|Shape)?)|A(Renderer|MediaTiming(Function)?|BasicAnimation|ScrollLayer|Constraint(LayoutManager)?|T(iledLayer|extLayer|rans(ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(nimation(Group)?|ction)))\\\\b\",\n\t\t\t\"name\": \"support.class.quartz.objc\"\n\t\t},\n\t\t\"anonymous_pattern_24\": {\n\t\t\t\"match\": \"\\\\bC(G(Float|Point|Size|Rect)|IFormat|AConstraintAttribute)\\\\b\",\n\t\t\t\"name\": \"support.type.quartz.objc\"\n\t\t},\n\t\t\"anonymous_pattern_25\": {\n\t\t\t\"match\": \"\\\\bNS(R(ect(Edge)?|ange)|G(lyph(Relation|LayoutMode)?|radientType)|M(odalSession|a(trixMode|p(Table|Enumerator)))|B(itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(cr(oll(er(Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(Granularity|Direction|Affinity)|wapped(Double|Float)|aveOperationType)|Ha(sh(Table|Enumerator)|ndler(2)?)|C(o(ntrol(Size|Tint)|mp(ositingOperation|arisonResult))|ell(State|Type|ImagePosition|Attribute))|T(hreadPrivate|ypesetterGlyphInfo|i(ckMarkPosition|tlePosition|meInterval)|o(ol(TipTag|bar(SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(TabType|Alignment)|ab(State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(ContextAuxiliary|PixelFormatAuxiliary)|D(ocumentChangeType|atePickerElementFlags|ra(werState|gOperation))|UsableScrollerParts|P(oint|r(intingPageOrder|ogressIndicator(Style|Th(ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(nt(SymbolicTraits|TraitMask|Action)|cusRingType)|W(indow(OrderingMode|Depth)|orkspace(IconCreationOptions|LaunchOptions)|ritingDirection)|L(ineBreakMode|ayout(Status|Direction))|A(nimation(Progress|Effect)|ppl(ication(TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle))\\\\b\",\n\t\t\t\"name\": \"support.type.cocoa.objc\"\n\t\t},\n\t\t\"anonymous_pattern_26\": {\n\t\t\t\"match\": \"\\\\bNS(NotFound|Ordered(Ascending|Descending|Same))\\\\b\",\n\t\t\t\"name\": \"support.constant.cocoa.objc\"\n\t\t},\n\t\t\"anonymous_pattern_27\": {\n\t\t\t\"match\": \"\\\\bNS(MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification\\\\b\",\n\t\t\t\"name\": \"support.constant.notification.cocoa.leopard.objc\"\n\t\t},\n\t\t\"anonymous_pattern_28\": {\n\t\t\t\"match\": \"\\\\bNS(Menu(Did(RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(ystemColorsDidChange|plitView(DidResizeSubviews|WillResizeSubviews))|C(o(nt(extHelpModeDid(Deactivate|Activate)|rolT(intDidChange|extDid(BeginEditing|Change|EndEditing)))|lor(PanelColorDidChange|ListDidChange)|mboBox(Selection(IsChanging|DidChange)|Will(Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(oolbar(DidRemoveItem|WillAddItem)|ext(Storage(DidProcessEditing|WillProcessEditing)|Did(BeginEditing|Change|EndEditing)|View(DidChange(Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)))|ImageRepRegistryDidChange|OutlineView(Selection(IsChanging|DidChange)|ColumnDid(Resize|Move)|Item(Did(Collapse|Expand)|Will(Collapse|Expand)))|Drawer(Did(Close|Open)|Will(Close|Open))|PopUpButton(CellWillPopUp|WillPopUp)|View(GlobalFrameDidChange|BoundsDidChange|F(ocusDidChange|rameDidChange))|FontSetChanged|W(indow(Did(Resi(ze|gn(Main|Key))|M(iniaturize|ove)|Become(Main|Key)|ChangeScreen(|Profile)|Deminiaturize|Update|E(ndSheet|xpose))|Will(M(iniaturize|ove)|BeginSheet|Close))|orkspace(SessionDid(ResignActive|BecomeActive)|Did(Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(Sleep|Unmount|PowerOff|LaunchApplication)))|A(ntialiasThresholdChanged|ppl(ication(Did(ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(nhide|pdate)|FinishLaunching)|Will(ResignActive|BecomeActive|Hide|Terminate|U(nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification\\\\b\",\n\t\t\t\"name\": \"support.constant.notification.cocoa.objc\"\n\t\t},\n\t\t\"anonymous_pattern_29\": {\n\t\t\t\"match\": \"\\\\bNS(RuleEditor(RowType(Simple|Compound)|NestingMode(Si(ngle|mple)|Compound|List))|GradientDraws(BeforeStartingLocation|AfterEndingLocation)|M(inusSetExpressionType|a(chPortDeallocate(ReceiveRight|SendRight|None)|pTable(StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(oxCustom|undleExecutableArchitecture(X86|I386|PPC(64)?)|etweenPredicateOperatorType|ackgroundStyle(Raised|Dark|L(ight|owered)))|S(tring(DrawingTruncatesLastVisibleLine|EncodingConversion(ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(e(ech(SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(GrammarFlag|SpellingFlag))|litViewDividerStyleThi(n|ck))|e(rvice(RequestTimedOutError|M(iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(inimum|aximum)|Application(NotFoundError|LaunchFailedError))|gmentStyle(Round(Rect|ed)|SmallSquare|Capsule|Textured(Rounded|Square)|Automatic)))|H(UDWindowMask|ashTable(StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(oModeColorPanel|etServiceNoAutoRename)|C(hangeRedone|o(ntainsPredicateOperatorType|l(orRenderingIntent(RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(None|ContentArea|TrackableArea|EditableTextArea))|T(imeZoneNameStyle(S(hort(Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(Regular|SourceList)|racking(Mouse(Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(ssumeInside|ctive(In(KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(n(tersectSetExpressionType|dexedColorSpaceModel)|mageScale(None|Proportionally(Down|UpOrDown)|AxesIndependently))|Ope(nGLPFAAllowOfflineRenderers|rationQueue(DefaultMaxConcurrentOperationCount|Priority(High|Normal|Very(High|Low)|Low)))|D(iacriticInsensitiveSearch|ownloadsDirectory)|U(nionSetExpressionType|TF(16(BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(ointerFunctions(Ma(chVirtualMemory|llocMemory)|Str(ongMemory|uctPersonality)|C(StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(paque(Memory|Personality)|bjectP(ointerPersonality|ersonality)))|at(hStyle(Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(Scaling|Copies|Orientation|P(a(perSize|ge(Range|SetupAccessory))|review)))|Executable(RuntimeMismatchError|NotLoadableError|ErrorM(inimum|aximum)|L(inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(Initial|Prior)|F(i(ndPanelSubstringMatchType(StartsWith|Contains|EndsWith|FullWord)|leRead(TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(ndow(BackingLocation(MainMemory|Default|VideoMemory)|Sharing(Read(Only|Write)|None)|CollectionBehavior(MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType)\\\\b\",\n\t\t\t\"name\": \"support.constant.cocoa.leopard.objc\"\n\t\t},\n\t\t\"anonymous_pattern_3\": {\n\t\t\t\"begin\": \"@\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)%\\n\\t\\t\\t\\t\\t\\t(\\\\d+\\\\$)?                             # field (argument #)\\n\\t\\t\\t\\t\\t\\t[#0\\\\- +']*                          # flags\\n\\t\\t\\t\\t\\t\\t((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?              # minimum field width\\n\\t\\t\\t\\t\\t\\t(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?         # precision\\n\\t\\t\\t\\t\\t\\t[@]                                  # conversion type\\n\\t\\t\\t\\t\\t\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_30\": {\n\t\t\t\"match\": \"\\\\bNS(R(GB(ModeColorPanel|ColorSpaceModel)|ight(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey)|ound(RectBezelStyle|Bankers|ed(BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(CapStyle|JoinStyle))|un(StoppedResponse|ContinuesResponse|AbortedResponse)|e(s(izableWindowMask|et(CursorRectsRunLoopOrdering|FunctionKey))|ce(ssedBezelStyle|iver(sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(evancyLevelIndicatorStyle|ative(Before|After))|gular(SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(n(domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(ModeMatrix|Button)))|G(IFFileType|lyph(Below|Inscribe(B(elow|ase)|Over(strike|Below)|Above)|Layout(WithPrevious|A(tAPoint|gainstAPoint))|A(ttribute(BidiLevel|Soft|Inscribe|Elastic)|bove))|r(ooveBorder|eaterThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|a(y(ModeColorPanel|ColorSpaceModel)|dient(None|Con(cave(Strong|Weak)|vex(Strong|Weak)))|phiteControlTint)))|XML(N(o(tationDeclarationKind|de(CompactEmptyElement|IsCDATA|OptionsNone|Use(SingleQuotes|DoubleQuotes)|Pre(serve(NamespaceOrder|C(haracterReferences|DATA)|DTD|Prefixes|E(ntities|mptyElements)|Quotes|Whitespace|A(ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(ocument(X(MLKind|HTMLKind|Include)|HTMLKind|T(idy(XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(arser(GTRequiredError|XMLDeclNot(StartedError|FinishedError)|Mi(splaced(XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(StartedError|FinishedError))|S(t(andaloneValueError|ringNot(StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(MTOKENRequiredError|o(t(ationNot(StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(haracterRef(In(DTDError|PrologError|EpilogError)|AtEOFError)|o(nditionalSectionNot(StartedError|FinishedError)|mment(NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(ternalError|valid(HexCharacterRefError|C(haracter(RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(NameError|Error)))|OutOfMemoryError|D(ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(RI(RequiredError|FragmentError)|n(declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(MissingSemiError|NoNameError|In(Internal(SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(ocessingInstructionNot(StartedError|FinishedError)|ematureDocumentEndError))|E(n(codingNotSupportedError|tity(Ref(In(DTDError|PrologError|EpilogError)|erence(MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(StartedError|FinishedError)|Is(ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(StartedError|FinishedError)|xt(ernalS(tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(iteralNot(StartedError|FinishedError)|T(RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(RedefinedError|HasNoValueError|Not(StartedError|FinishedError)|ListNot(StartedError|FinishedError)))|rocessingInstructionKind)|E(ntity(GeneralKind|DeclarationKind|UnparsedKind|P(ar(sedKind|ameterKind)|redefined))|lement(Declaration(MixedKind|UndefinedKind|E(lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(N(MToken(sKind|Kind)|otationKind)|CDATAKind|ID(Ref(sKind|Kind)|Kind)|DeclarationKind|En(tit(yKind|iesKind)|umerationKind)|Kind))|M(i(n(XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(nthCalendarUnit|deSwitchFunctionKey|use(Moved(Mask)?|E(ntered(Mask)?|ventSubtype|xited(Mask)?))|veToBezierPathElement|mentary(ChangeButton|Push(Button|InButton)|Light(Button)?))|enuFunctionKey|a(c(intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(XEdge|YEdge))|ACHOperatingSystem)|B(MPFileType|o(ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(Se(condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(zelBorder|velLineJoinStyle|low(Bottom|Top)|gin(sWith(Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(spaceCharacter|tabTextMovement|ingStore(Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(owser(NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(h(ift(JISStringEncoding|KeyMask)|ow(ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(s(ReqFunctionKey|tem(D(omainMask|efined(Mask)?)|FunctionKey))|mbolStringEncoding)|c(a(nnedOption|le(None|ToFit|Proportionally))|r(oll(er(NoPart|Increment(Page|Line|Arrow)|Decrement(Page|Line|Arrow)|Knob(Slot)?|Arrows(M(inEnd|axEnd)|None|DefaultSetting))|Wheel(Mask)?|LockFunctionKey)|eenChangedEventType))|t(opFunctionKey|r(ingDrawing(OneShot|DisableScreenFontSubstitution|Uses(DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(Status(Reading|NotOpen|Closed|Open(ing)?|Error|Writing|AtEnd)|Event(Has(BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(ndEncountered|rrorOccurred)))))|i(ngle(DateMode|UnderlineStyle)|ze(DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(condCalendarUnit|lect(By(Character|Paragraph|Word)|i(ng(Next|Previous)|onAffinity(Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(Momentary|Select(One|Any)))|quareLineCapStyle|witchButton|ave(ToOperation|Op(tions(Yes|No|Ask)|eration)|AsOperation)|mall(SquareBezelStyle|C(ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(ighlightModeMatrix|SBModeColorPanel|o(ur(Minute(SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(Never|OnlyFromMainDocumentDomain|Always)|e(lp(ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(MonthDa(yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(o(n(StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(ification(SuspensionBehavior(Hold|Coalesce|D(eliverImmediately|rop))|NoCoalescing|CoalescingOn(Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(cr(iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(itle|opLevelContainersSpecifierError|abs(BezelBorder|NoBorder|LineBorder))|I(nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(ll(Glyph|CellType)|m(eric(Search|PadKeyMask)|berFormatter(Round(Half(Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(10|Default)|S(cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(ercentStyle|ad(Before(Suffix|Prefix)|After(Suffix|Prefix))))))|e(t(Services(BadArgumentError|NotFoundError|C(ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(t(iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(hange(ReadOtherContents|GrayCell(Mask)?|BackgroundCell(Mask)?|Cleared|Done|Undone|Autosaved)|MYK(ModeColorPanel|ColorSpaceModel)|ircular(BezelStyle|Slider)|o(n(stantValueExpressionType|t(inuousCapacityLevelIndicatorStyle|entsCellMask|ain(sComparison|erSpecifierError)|rol(Glyph|KeyMask))|densedFontMask)|lor(Panel(RGBModeMask|GrayModeMask|HSBModeMask|C(MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(p(osite(XOR|Source(In|O(ut|ver)|Atop)|Highlight|C(opy|lear)|Destination(In|O(ut|ver)|Atop)|Plus(Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(stom(SelectorPredicateOperatorType|PaletteModeColorPanel)|r(sor(Update(Mask)?|PointingDevice)|veToBezierPathElement))|e(nterT(extAlignment|abStopType)|ll(State|H(ighlighted|as(Image(Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(Bordered|InsetButton)|Disabled|Editable|LightsBy(Gray|Background|Contents)|AllowsMixedState))|l(ipPagination|o(s(ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(ControlTint|DisplayFunctionKey|LineFunctionKey))|a(seInsensitive(Search|PredicateOption)|n(notCreateScriptCommandError|cel(Button|TextMovement))|chesDirectory|lculation(NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(itical(Request|AlertStyle)|ayonModeColorPanel))|T(hick(SquareBezelStyle|erSquareBezelStyle)|ypesetter(Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(ineBreakAction|atestBehavior))|i(ckMark(Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(olbarItemVisibilityPriority(Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(Compression(N(one|EXT)|CCITTFAX(3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(rminate(Now|Cancel|Later)|xt(Read(InapplicableDocumentTypeError|WriteErrorM(inimum|aximum))|Block(M(i(nimum(Height|Width)|ddleAlignment)|a(rgin|ximum(Height|Width)))|B(o(ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(Characters|Attributes)|CellType|ured(RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(Character|TextMovement|le(tP(oint(Mask|EventSubtype)?|roximity(Mask|EventSubtype)?)|Column(NoResizing|UserResizingMask|AutoresizingMask)|View(ReverseSequentialColumnAutoresizingStyle|GridNone|S(olid(HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(n(sert(CharFunctionKey|FunctionKey|LineFunctionKey)|t(Type|ernalS(criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(2022JPStringEncoding|Latin(1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(R(ight|ep(MatchesDevice|LoadStatus(ReadingHeader|Completed|InvalidData|Un(expectedEOF|knownType)|WillNeedAllData)))|Below|C(ellType|ache(BySize|Never|Default|Always))|Interpolation(High|None|Default|Low)|O(nly|verlaps)|Frame(Gr(oove|ayBezel)|Button|None|Photo)|L(oadStatus(ReadError|C(ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(lign(Right|Bottom(Right|Left)?|Center|Top(Right|Left)?|Left)|bove)))|O(n(State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|TextMovement)|SF1OperatingSystem|pe(n(GL(GO(Re(setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(R(obust|endererID)|M(inimumPolicy|ulti(sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(creenMask|te(ncilSize|reo)|ingleRenderer|upersample|ample(s|Buffers|Alpha))|NoRecovery|C(o(lor(Size|Float)|mpliant)|losestPolicy)|OffScreen|D(oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(cc(umSize|elerated)|ux(Buffers|DepthStencil)|l(phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(B(itfield|oolType)|S(hortType|tr(ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(Type|longType)|ArrayType))|D(i(s(c(losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(Selection|PredicateModifier))|o(c(ModalWindowMask|ument(Directory|ationDirectory))|ubleType|wn(TextMovement|ArrowFunctionKey))|e(s(cendingPageOrder|ktopDirectory)|cimalTabStopType|v(ice(NColorSpaceModel|IndependentModifierFlagsMask)|eloper(Directory|ApplicationDirectory))|fault(ControlTint|TokenStyle)|lete(Char(acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(yCalendarUnit|teFormatter(MediumStyle|Behavior(10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(wer(Clos(ingState|edState)|Open(ingState|State))|gOperation(Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(ser(CancelledError|D(irectory|omainMask)|FunctionKey)|RL(Handle(NotLoaded|Load(Succeeded|InProgress|Failed))|CredentialPersistence(None|Permanent|ForSession))|n(scaledWindowMask|cachedRead|i(codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(o(CloseGroupingRunLoopOrdering|FunctionKey)|e(finedDateComponent|rline(Style(Single|None|Thick|Double)|Pattern(Solid|D(ot|ash(Dot(Dot)?)?)))))|known(ColorSpaceModel|P(ointingDevice|ageOrder)|KeyS(criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(ustifiedTextAlignment|PEG(2000FileType|FileType)|apaneseEUC(GlyphPacking|StringEncoding))|P(o(s(t(Now|erFontMask|WhenIdle|ASAP)|iti(on(Replace|Be(fore|ginning)|End|After)|ve(IntType|DoubleType|FloatType)))|pUp(NoArrow|ArrowAt(Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(InCell(Mask)?|OnPushOffButton)|e(n(TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(Mask)?)|P(S(caleField|tatus(Title|Field)|aveButton)|N(ote(Title|Field)|ame(Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(a(perFeedButton|ge(Range(To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(useFunctionKey|ragraphSeparatorCharacter|ge(DownFunctionKey|UpFunctionKey))|r(int(ing(ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(NotFound|OK|Error)|FunctionKey)|o(p(ertyList(XMLFormat|MutableContainers(AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(BarStyle|SpinningStyle|Preferred(SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(ssedTab|vFunctionKey))|L(HeightForm|CancelButton|TitleField|ImageButton|O(KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(n(terCharacter|d(sWith(Comparison|PredicateOperatorType)|FunctionKey))|v(e(nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(Comparison|PredicateOperatorType)|ra(serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(clude(10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(i(ew(M(in(XMargin|YMargin)|ax(XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(lidationErrorM(inimum|aximum)|riableExpressionType))|Key(SpecifierEvaluationScriptError|Down(Mask)?|Up(Mask)?|PathExpressionType|Value(MinusSetMutation|SetSetMutation|Change(Re(placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(New|Old)|UnionSetMutation|ValidationError))|QTMovie(NormalPlayback|Looping(BackAndForthPlayback|Playback))|F(1(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(nd(PanelAction(Replace(A(ndFind|ll(InSelection)?))?|S(howFindPanel|e(tFindString|lectAll(InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(Read(No(SuchFileError|PermissionError)|CorruptFileError|In(validFileNameError|applicableStringEncodingError)|Un(supportedSchemeError|knownError))|HandlingPanel(CancelButton|OKButton)|NoSuchFileError|ErrorM(inimum|aximum)|Write(NoPermissionError|In(validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(nt(Mo(noSpaceTrait|dernSerifsClass)|BoldTrait|S(ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(o(ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(ntegerAdvancementsRenderingMode|talicTrait)|O(ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(nknownClass|IOptimizedTrait)|Panel(S(hadowEffectModeMask|t(andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(amilyClassMask|reeformSerifsClass)|Antialiased(RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(Below|Type(None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(attingError(M(inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(ExpressionType|KeyMask)|3(1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(RevertButton|S(ize(Title|Field)|etButton)|CurrentField|Preview(Button|Field))|l(oat(ingPointSamplesBitmapFormat|Type)|agsChanged(Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(heelModeColorPanel|indow(s(NTOperatingSystem|CP125(1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(InterfaceStyle|OperatingSystem))|M(iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(ctivation|ddingToRecents)|A(sync|nd(Hide(Others)?|Print)|llowingClassicStartup))|eek(day(CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(ntsBidiLevels|rningAlertStyle)|r(itingDirection(RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(i(stModeMatrix|ne(Moves(Right|Down|Up|Left)|B(order|reakBy(C(harWrapping|lipping)|Truncating(Middle|Head|Tail)|WordWrapping))|S(eparatorCharacter|weep(Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(ssThan(Comparison|OrEqualTo(Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(Mouse(D(own(Mask)?|ragged(Mask)?)|Up(Mask)?)|T(ext(Movement|Alignment)|ab(sBezelBorder|StopType))|ArrowFunctionKey))|a(yout(RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(sc(iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(y(Type|PredicateModifier|EventMask)|choredSearch|imation(Blocking|Nonblocking(Threaded)?|E(ffect(DisappearingItemDefault|Poof)|ase(In(Out)?|Out))|Linear)|dPredicateType)|t(Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(obe(GB1CharacterCollection|CNS1CharacterCollection|Japan(1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(saveOperation|Pagination)|pp(lication(SupportDirectory|D(irectory|e(fined(Mask)?|legateReply(Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(Mask)?)|l(ternateKeyMask|pha(ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(sWrongScriptError|EvaluationScriptError)|bove(Bottom|Top)|WTEventType))\\\\b\",\n\t\t\t\"name\": \"support.constant.cocoa.objc\"\n\t\t},\n\t\t\"anonymous_pattern_4\": {\n\t\t\t\"begin\": \"\\\\b(id)\\\\s*(?=<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\"name\": \"meta.id-with-protocol.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anonymous_pattern_5\": {\n\t\t\t\"match\": \"\\\\b(NS_DURING|NS_HANDLER|NS_ENDHANDLER)\\\\b\",\n\t\t\t\"name\": \"keyword.control.macro.objc\"\n\t\t},\n\t\t\"anonymous_pattern_7\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(try|catch|finally|throw)\\\\b\",\n\t\t\t\"name\": \"keyword.control.exception.objc\"\n\t\t},\n\t\t\"anonymous_pattern_8\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(synchronized)\\\\b\",\n\t\t\t\"name\": \"keyword.control.synchronize.objc\"\n\t\t},\n\t\t\"anonymous_pattern_9\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(required|optional)\\\\b\",\n\t\t\t\"name\": \"keyword.control.protocol-specification.objc\"\n\t\t},\n\t\t\"apple_foundation_functional_macros\": {\n\t\t\t\"begin\": \"(\\\\b(?:API_AVAILABLE|API_DEPRECATED|API_UNAVAILABLE|NS_AVAILABLE|NS_AVAILABLE_MAC|NS_AVAILABLE_IOS|NS_DEPRECATED|NS_DEPRECATED_MAC|NS_DEPRECATED_IOS|NS_SWIFT_NAME))(?:(?:\\\\s)+)?(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.apple-foundation.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.macro.arguments.begin.bracket.round.apple-foundation.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.macro.arguments.end.bracket.round.apple-foundation.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.preprocessor.macro.callable.apple-foundation.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_lang\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"bracketed_content\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.bracketed.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=predicateWithFormat:)(?<=NSPredicate )(predicateWithFormat:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\])\",\n\t\t\t\t\t\"name\": \"meta.function-call.predicate.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\bargument(Array|s)(:)\",\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.name-of-parameter.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\b\\\\w+(:)\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-method.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"@\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(AND|OR|NOT|IN)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.predicate.cocoa.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(ALL|ANY|SOME|NONE)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.language.predicate.cocoa.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.language.predicate.cocoa.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.predicate.cocoa.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\bC(ASEINSENSITIVE|I)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.modifier.predicate.cocoa.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.predicate.cocoa.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\\\\\|[abefnrtv'\\\"?]|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-zA-Z0-9]+)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#c_functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=\\\\w)(?<=[\\\\w\\\\])\\\"] )(\\\\w+(?:(:)|(?=\\\\])))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\])\",\n\t\t\t\t\t\"name\": \"meta.function-call.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"\\\\b\\\\w+(:)\",\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.name-of-parameter.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#c_functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#c_functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"c_functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.support.function.leading.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.C99.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\s*)\\\\b(hypot(f|l)?|s(scanf|ystem|nprintf|ca(nf|lb(n(f|l)?|ln(f|l)?))|i(n(h(f|l)?|f|l)?|gn(al|bit))|tr(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(jmp|vbuf|locale|buf)|qrt(f|l)?|w(scanf|printf)|rand)|n(e(arbyint(f|l)?|xt(toward(f|l)?|after(f|l)?))|an(f|l)?)|c(s(in(h(f|l)?|f|l)?|qrt(f|l)?)|cos(h(f)?|f|l)?|imag(f|l)?|t(ime|an(h(f|l)?|f|l)?)|o(s(h(f|l)?|f|l)?|nj(f|l)?|pysign(f|l)?)|p(ow(f|l)?|roj(f|l)?)|e(il(f|l)?|xp(f|l)?)|l(o(ck|g(f|l)?)|earerr)|a(sin(h(f|l)?|f|l)?|cos(h(f|l)?|f|l)?|tan(h(f|l)?|f|l)?|lloc|rg(f|l)?|bs(f|l)?)|real(f|l)?|brt(f|l)?)|t(ime|o(upper|lower)|an(h(f|l)?|f|l)?|runc(f|l)?|gamma(f|l)?|mp(nam|file))|i(s(space|n(ormal|an)|cntrl|inf|digit|u(nordered|pper)|p(unct|rint)|finite|w(space|c(ntrl|type)|digit|upper|p(unct|rint)|lower|al(num|pha)|graph|xdigit|blank)|l(ower|ess(equal|greater)?)|al(num|pha)|gr(eater(equal)?|aph)|xdigit|blank)|logb(f|l)?|max(div|abs))|di(v|fftime)|_Exit|unget(c|wc)|p(ow(f|l)?|ut(s|c(har)?|wc(har)?)|error|rintf)|e(rf(c(f|l)?|f|l)?|x(it|p(2(f|l)?|f|l|m1(f|l)?)?))|v(s(scanf|nprintf|canf|printf|w(scanf|printf))|printf|f(scanf|printf|w(scanf|printf))|w(scanf|printf)|a_(start|copy|end|arg))|qsort|f(s(canf|e(tpos|ek))|close|tell|open|dim(f|l)?|p(classify|ut(s|c|w(s|c))|rintf)|e(holdexcept|set(e(nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(aiseexcept|ror)|get(e(nv|xceptflag)|round))|flush|w(scanf|ide|printf|rite)|loor(f|l)?|abs(f|l)?|get(s|c|pos|w(s|c))|re(open|e|ad|xp(f|l)?)|m(in(f|l)?|od(f|l)?|a(f|l|x(f|l)?)?))|l(d(iv|exp(f|l)?)|o(ngjmp|cal(time|econv)|g(1(p(f|l)?|0(f|l)?)|2(f|l)?|f|l|b(f|l)?)?)|abs|l(div|abs|r(int(f|l)?|ound(f|l)?))|r(int(f|l)?|ound(f|l)?)|gamma(f|l)?)|w(scanf|c(s(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?|mbs)|pbrk|ftime|len|r(chr|tombs)|xfrm)|to(b|mb)|rtomb)|printf|mem(set|c(hr|py|mp)|move))|a(s(sert|ctime|in(h(f|l)?|f|l)?)|cos(h(f|l)?|f|l)?|t(o(i|f|l(l)?)|exit|an(h(f|l)?|2(f|l)?|f|l)?)|b(s|ort))|g(et(s|c(har)?|env|wc(har)?)|mtime)|r(int(f|l)?|ound(f|l)?|e(name|alloc|wind|m(ove|quo(f|l)?|ainder(f|l)?))|a(nd|ise))|b(search|towc)|m(odf(f|l)?|em(set|c(hr|py|mp)|move)|ktime|alloc|b(s(init|towcs|rtowcs)|towc|len|r(towc|len))))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.function-call.leading.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?x) (?: (?= \\\\s )  (?:(?<=else|new|return) | (?<!\\\\w)) (\\\\s+))?\\n            \\t\\t\\t(\\\\b \\n            \\t\\t\\t\\t(?!(while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\\\\s*\\\\()(?:(?!NS)[A-Za-z_][A-Za-z0-9_]*+\\\\b | :: )++                  # actual name\\n            \\t\\t\\t)\\n            \\t\\t\\t \\\\s*(\\\\()\",\n\t\t\t\t\t\"name\": \"meta.function-call.objc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"c_lang\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(break|continue|do|else|for|goto|if|_Pragma|return|while)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"typedef\",\n\t\t\t\t\t\"name\": \"keyword.other.typedef.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bin\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.in.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(const|extern|register|restrict|static|volatile|inline|__block)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.modifier.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bk[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"constant.other.variable.mac-classic.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bg[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.global.mac-classic.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bs[A-Z]\\\\w*\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.static.mac-classic.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n^\\\\s* ((\\\\#)\\\\s*define) \\\\s+\\t# define\\n((?<id>[a-zA-Z_$][\\\\w$]*))\\t  # macro name\\n(?:\\n  (\\\\()\\n\\t(\\n\\t  \\\\s* \\\\g<id> \\\\s*\\t\\t # first argument\\n\\t  ((,) \\\\s* \\\\g<id> \\\\s*)*  # additional arguments\\n\\t  (?:\\\\.\\\\.\\\\.)?\\t\\t\\t# varargs ellipsis?\\n\\t)\\n  (\\\\))\\n)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.define.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.macro.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(error|warning))\\\\b\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.diagnostic.$3.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.diagnostic.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"[^'\\\"]\",\n\t\t\t\t\t\t\t\"end\": \"(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.single.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(include(?:_next)?|import))\\\\b\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.$3.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.include.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.include.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.other.lt-gt.include.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*line)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.line.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*undef))\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.undef.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(?:((#)\\\\s*pragma))\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=(?://|/\\\\*))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\"name\": \"meta.preprocessor.pragma.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w\\\\-$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pragma.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.sys-types.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.pthread.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) \\\\b\\n(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t\\n|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t\\n|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t\\n|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t\\n|uintmax_t|uintmax_t)\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.stdint.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.mac-classic.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) \\\\b\\n(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam\\n|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr\\n|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber\\n|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64\\n|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32\\n|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr\\n|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.mac-classic.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([A-Za-z0-9_]+_t)\\\\b\",\n\t\t\t\t\t\"name\": \"support.type.posix-reserved.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function.objc\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\w)(?!\\\\s*(?:not|compl|sizeof|not_eq|bitand|xor|bitor|and|or|and_eq|xor_eq|or_eq|alignof|alignas|_Alignof|_Alignas|while|for|do|if|else|goto|switch|return|break|case|continue|default|void|char|short|int|signed|unsigned|long|float|double|bool|_Bool|_Complex|_Imaginary|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|NULL|true|false|memory_order|atomic_bool|atomic_char|atomic_schar|atomic_uchar|atomic_short|atomic_ushort|atomic_int|atomic_uint|atomic_long|atomic_ulong|atomic_llong|atomic_ullong|atomic_char16_t|atomic_char32_t|atomic_wchar_t|atomic_int_least8_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_least16_t|atomic_int_least32_t|atomic_uint_least32_t|atomic_int_least64_t|atomic_uint_least64_t|atomic_int_fast8_t|atomic_uint_fast8_t|atomic_int_fast16_t|atomic_uint_fast16_t|atomic_int_fast32_t|atomic_uint_fast32_t|atomic_int_fast64_t|atomic_uint_fast64_t|atomic_intptr_t|atomic_uintptr_t|atomic_size_t|atomic_ptrdiff_t|atomic_intmax_t|atomic_uintmax_t|struct|union|enum|typedef|auto|register|static|extern|thread_local|inline|_Noreturn|const|volatile|restrict|_Atomic)\\\\s*\\\\()(?=[a-zA-Z_]\\\\w*\\\\s*\\\\()\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.bracket.square.access.objc\",\n\t\t\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))?(\\\\[)(?!\\\\])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.object.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.square.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.square.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.array.bracket.square.objc\",\n\t\t\t\t\t\"match\": \"\\\\[\\\\s*\\\\]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.objc\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"repository\": {\n\t\t\t\t\"probably_a_parameter\": {\n\t\t\t\t\t\"match\": \"(?<=(?:[a-zA-Z_0-9] |[&*>\\\\]\\\\)]))\\\\s*([a-zA-Z_]\\\\w*)\\\\s*(?=(?:\\\\[\\\\]\\\\s*)?(?:,|\\\\)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.probably.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"access-method\": {\n\t\t\t\t\t\"name\": \"meta.function-call.member.objc\",\n\t\t\t\t\t\"begin\": \"([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\\\]\\\\)]))\\\\s*(?:(\\\\.)|(->))((?:(?:[a-zA-Z_][a-zA-Z_0-9]*)\\\\s*(?:(?:\\\\.)|(?:->)))*)\\\\s*([a-zA-Z_][a-zA-Z_0-9]*)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.object.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"->\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_][a-zA-Z_0-9]*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.object.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"everything.else.objc\",\n\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.member.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.block.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block_innards\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#c_function_call\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.initialization.objc\",\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?:\\n  (?:\\n\\t(?=\\\\s)(?<!else|new|return)\\n\\t(?<=\\\\w) \\\\s+(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)  # or word + space before name\\n  )\\n)\\n(\\n  (?:[A-Za-z_][A-Za-z0-9_]*+ | :: )++   # actual name\\n  |\\n  (?:(?<=operator) (?:[-*&<>=+!]+ | \\\\(\\\\) | \\\\[\\\\]))\\n)\\n\\\\s*(\\\\() # opening bracket\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.initialization.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.initialization.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"c_function_call\": {\n\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(?=\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*\\\\(  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"meta.function-call.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"comments\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.block.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"^/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*/$\\\\n?\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"comment.block.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.toc-list.banner.line.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"^// =(\\\\s*.*?)\\\\s*=\\\\s*$\\\\n?\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.banner.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"disabled\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*#\\\\s*if(n?def)?\\\\b.*$\",\n\t\t\t\t\t\"end\": \"^\\\\s*#\\\\s*endif\\\\b\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"line_continuation_character\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\)\\\\n\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.line-continuation.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"parens\": {\n\t\t\t\t\t\"name\": \"meta.parens.objc\",\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"parens-block\": {\n\t\t\t\t\t\"name\": \"meta.parens.block.objc\",\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!:):(?!:))\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.range-based.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"pragma-mark\": {\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.pragma.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.pragma.pragma-mark.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.pragma-mark.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"^\\\\s*(((#)\\\\s*pragma\\\\s+mark)\\\\s+(.*))\",\n\t\t\t\t\t\"name\": \"meta.section.objc\"\n\t\t\t\t},\n\t\t\t\t\"operators\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<![\\\\w$])(sizeof)(?![\\\\w$])\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.sizeof.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.decrement.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\+\\\\+\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.increment.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%=|\\\\+=|-=|\\\\*=|(?<!\\\\()/=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&=|\\\\^=|<<=|>>=|\\\\|=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"<<|>>\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"!=|<=|>=|==|<|>\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&&|!|\\\\|\\\\|\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"&|\\\\||\\\\^|~\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(\\\\?)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"strings\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"string_escaped_char\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3]\\\\d{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"string_placeholder\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x) %\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.placeholder.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(%)(?!\\\"\\\\s*(PRI|SCN))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.placeholder.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"storage_types\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)(?:void|char|short|int|signed|unsigned|long|float|double|bool|_Bool)(?!\\\\w))\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.built-in.primitive.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:(?<!\\\\w)(?:_Complex|_Imaginary|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|memory_order|atomic_bool|atomic_char|atomic_schar|atomic_uchar|atomic_short|atomic_ushort|atomic_int|atomic_uint|atomic_long|atomic_ulong|atomic_llong|atomic_ullong|atomic_char16_t|atomic_char32_t|atomic_wchar_t|atomic_int_least8_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_least16_t|atomic_int_least32_t|atomic_uint_least32_t|atomic_int_least64_t|atomic_uint_least64_t|atomic_int_fast8_t|atomic_uint_fast8_t|atomic_int_fast16_t|atomic_uint_fast16_t|atomic_int_fast32_t|atomic_uint_fast32_t|atomic_int_fast64_t|atomic_uint_fast64_t|atomic_intptr_t|atomic_uintptr_t|atomic_size_t|atomic_ptrdiff_t|atomic_intmax_t|atomic_uintmax_t)(?!\\\\w))\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.built-in.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?-mix:\\\\b(asm|__asm__|enum|struct|union)\\\\b)\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"vararg_ellipses\": {\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\.\\\\.\\\\.(?!\\\\.)\",\n\t\t\t\t\t\"name\": \"punctuation.vararg-ellipses.objc\"\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if(?:n?def)?\\\\b)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s*#\\\\s*(else|elif|endif)\\\\b\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.stray-$1.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-conditional-line\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:\\\\bdefined\\\\b\\\\s*$)|(?:\\\\bdefined\\\\b(?=\\\\s*\\\\(*\\\\s*(?:(?!defined\\\\b)[a-zA-Z_$][\\\\w$]*\\\\b)\\\\s*\\\\)*\\\\s*(?:\\\\n|//|/\\\\*|\\\\?|\\\\:|&&|\\\\|\\\\||\\\\\\\\\\\\s*\\\\n)))\",\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\bdefined\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.macro-name.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"constant.language.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[a-zA-Z_$][\\\\w$]*\",\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-elif-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-else-block\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-elif\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-disabled-elif\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0+\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:elif|else|endif)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objc\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-block\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*if\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"^\\\\s*((#)\\\\s*endif\\\\b)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?=\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.in-block.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.if-branch.in-block.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-elif\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-elif-block\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*elif\\\\b)(?=\\\\s*\\\\(*\\\\b0*1\\\\b\\\\)*\\\\s*(?:$|//|/\\\\*))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(?=.)(?!//|/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))\",\n\t\t\t\t\t\t\t\"end\": \"(?=//)|(?=/\\\\*(?!.*\\\\\\\\\\\\s*\\\\n))|(?<!\\\\\\\\)(?=\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-conditional-line\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\n\",\n\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:endif)\\\\b))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.in-block.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.elif-branch.objc\",\n\t\t\t\t\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*(elif)\\\\b)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*(?:else|elif|endif)\\\\b))\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-else\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-enabled-else-block\": {\n\t\t\t\t\t\"begin\": \"^\\\\s*((#)\\\\s*else\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.directive.conditional.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.directive.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*((#)\\\\s*endif\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-contents\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.block.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\\\s*\\\\()\\n(?=\\n  (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\\\s*\\\\(  # actual name\\n  |\\n  (?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\\\s*\\\\(\\n)\",\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\))(?!\\\\w)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"name\": \"meta.function.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\"|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_placeholder\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"'|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-blocks\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"}|(?=\\\\s*#\\\\s*(?:elif|else|endif)\\\\b)|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-blocks\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"preprocessor-rule-define-line-functions\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|(?<!\\\\\\\\)(?=\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-functions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#preprocessor-rule-define-line-contents\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"function-innards\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#vararg_ellipses\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function.definition.parameters.objc\",\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.begin.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parameters.end.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#probably_a_parameter\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"function-call-innards\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#storage_types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?x)\\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()\\n(\\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++  # actual name\\n|\\n(?:(?<=operator)(?:[-*&<>=+!]+|\\\\(\\\\)|\\\\[\\\\]))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"default_statement\": {\n\t\t\t\t\t\"name\": \"meta.conditional.case.objc\",\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)default(?!\\\\w))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.case.default.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#conditional_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"case_statement\": {\n\t\t\t\t\t\"name\": \"meta.conditional.case.objc\",\n\t\t\t\t\t\"begin\": \"((?<!\\\\w)case(?!\\\\w))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.case.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.case.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#conditional_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"switch_statement\": {\n\t\t\t\t\t\"name\": \"meta.block.switch.objc\",\n\t\t\t\t\t\"begin\": \"(((?<!\\\\w)switch(?!\\\\w)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.head.switch.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?:(?<=\\\\})|(?=[;>\\\\[\\\\]=]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.head.switch.objc\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\G ?\",\n\t\t\t\t\t\t\t\"end\": \"((?:\\\\{|(?=;)))\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.begin.bracket.curly.switch.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#switch_conditional_parentheses\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.body.switch.objc\",\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\{)\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.section.block.end.bracket.curly.switch.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#default_statement\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.tail.switch.objc\",\n\t\t\t\t\t\t\t\"begin\": \"(?<=})[\\\\s\\\\n]*\",\n\t\t\t\t\t\t\t\"end\": \"[\\\\s\\\\n]*(?=;)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"switch_conditional_parentheses\": {\n\t\t\t\t\t\"name\": \"meta.conditional.switch.objc\",\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.bracket.round.conditional.switch.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.bracket.round.conditional.switch.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#conditional_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"static_assert\": {\n\t\t\t\t\t\"begin\": \"(static_assert|_Static_assert)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.static_assert.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.static_assert.message.objc\",\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=(?:L|u8|u|U\\\\s*\\\\\\\")?)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string_context_c\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_call_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"conditional_context\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"member_access\": {\n\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:[a-zA-Z_]\\\\w*\\\\s*(?-mix:(?:(?:\\\\.\\\\*|\\\\.))|(?:(?:->\\\\*|->)))\\\\s*)*)\\\\s*(\\\\b(?!(?:void|char|short|int|signed|unsigned|long|float|double|bool|_Bool|_Complex|_Imaginary|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|memory_order|atomic_bool|atomic_char|atomic_schar|atomic_uchar|atomic_short|atomic_ushort|atomic_int|atomic_uint|atomic_long|atomic_ulong|atomic_llong|atomic_ullong|atomic_char16_t|atomic_char32_t|atomic_wchar_t|atomic_int_least8_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_least16_t|atomic_int_least32_t|atomic_uint_least32_t|atomic_int_least64_t|atomic_uint_least64_t|atomic_int_fast8_t|atomic_uint_fast8_t|atomic_int_fast16_t|atomic_uint_fast16_t|atomic_int_fast32_t|atomic_uint_fast32_t|atomic_int_fast64_t|atomic_uint_fast64_t|atomic_intptr_t|atomic_uintptr_t|atomic_size_t|atomic_ptrdiff_t|atomic_intmax_t|atomic_uintmax_t))[a-zA-Z_]\\\\w*\\\\b(?!\\\\())\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objc\",\n\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objc\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"method_access\": {\n\t\t\t\t\t\"contentName\": \"meta.function-call.member.objc\",\n\t\t\t\t\t\"begin\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))((?:[a-zA-Z_]\\\\w*\\\\s*(?-mix:(?:(?:\\\\.\\\\*|\\\\.))|(?:(?:->\\\\*|->)))\\\\s*)*)\\\\s*([a-zA-Z_]\\\\w*)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objc\",\n\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#member_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#method_access\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"((?:[a-zA-Z_]\\\\w*|(?<=\\\\]|\\\\)))\\\\s*)(?:((?:\\\\.\\\\*|\\\\.))|((?:->\\\\*|->)))\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#special_variables\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.object.access.objc\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(.+)\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot-access.objc\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pointer-access.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.member.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.begin.bracket.round.function.member.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arguments.end.bracket.round.function.member.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"numbers\": {\n\t\t\t\t\t\"begin\": \"(?<!\\\\w)(?=\\\\d|\\\\.\\\\d)\",\n\t\t\t\t\t\"end\": \"(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])(?:([0-9a-fA-F](?:(?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?((?:(?<=[0-9a-fA-F])\\\\.|\\\\.(?=[0-9a-fA-F])))(?:([0-9a-fA-F](?:(?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?(?:((?<!')([pP])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:([lLfF](?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))(?:([0-9](?:(?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?((?:(?<=[0-9])\\\\.|\\\\.(?=[0-9])))(?:([0-9](?:(?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*))?(?:((?<!')([eE])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:([lLfF](?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.point.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.floating-point.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0[bB])([01](?:(?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.binary.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.binary.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0)((?:(?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))+)(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.octal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G0[xX])([0-9a-fA-F](?:(?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)(?:((?<!')([pP])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.hexadecimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.hexadecimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.hexadecimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:(?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)(?:((?<!')([eE])(\\\\+)?(\\\\-)?((?-mix:(?:[0-9](?:(?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F]))))*)))))?(?:((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\\\w)))?(?!(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.exponent.decimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.plus.exponent.decimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.minus.exponent.decimal.objc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.exponent.decimal.objc\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.constant.numeric.objc\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.unit.suffix.integer.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(?:['0-9a-zA-Z_\\\\.']|(?<=[eEpP])[+-]))+\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.constant.numeric.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.objc\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?>\\\\\\\\\\\\s*\\\\n)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.continuation.objc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"disabled\": {\n\t\t\t\"begin\": \"^\\\\s*#\\\\s*if(n?def)?\\\\b.*$\",\n\t\t\t\"comment\": \"eat nested preprocessor if(def)s\",\n\t\t\t\"end\": \"^\\\\s*#\\\\s*endif\\\\b.*$\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"implementation_innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-implementation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-implementation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-other-implementation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_super\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface_innards\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-enabled-interface\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-disabled-interface\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preprocessor-rule-other-interface\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#properties\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method\": {\n\t\t\t\"begin\": \"^(-|\\\\+)\\\\s*\",\n\t\t\t\"end\": \"(?=\\\\{|#)|;\",\n\t\t\t\"name\": \"meta.function.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\\\\s*(\\\\w+\\\\b)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.return-type.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_type_qualifier\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b\\\\w+(?=:)\",\n\t\t\t\t\t\"name\": \"entity.name.function.name-of-parameter.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((:))\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.name-of-parameter.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.arguments.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\\\\s*(\\\\w+\\\\b)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.argument-type.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#protocol_type_qualifier\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method_super\": {\n\t\t\t\"begin\": \"^(?=-|\\\\+)\",\n\t\t\t\"end\": \"(?<=\\\\})|(?=#)\",\n\t\t\t\"name\": \"meta.function-with-body.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$base\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pragma-mark\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.pragma.objc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.toc-list.pragma-mark.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(#\\\\s*(pragma\\\\s+mark)\\\\s+(.*))\",\n\t\t\t\"name\": \"meta.section.objc\"\n\t\t},\n\t\t\"preprocessor-rule-disabled-implementation\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0)\\\\b).*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"name\": \"comment.block.preprocessor.if-branch.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-disabled-interface\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0)\\\\b).*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"name\": \"comment.block.preprocessor.if-branch.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-implementation\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0*1)\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b).*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.objc\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#implementation_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-enabled-interface\": {\n\t\t\t\"begin\": \"^\\\\s*(#(if)\\\\s+(0*1)\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.if.objc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.preprocessor.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(else)\\\\b).*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.else.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.else-branch.objc\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*endif\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#disabled\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pragma-mark\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*#\\\\s*(else|endif)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-other-implementation\": {\n\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(if(n?def)?)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b).*?(?:(?=(?://|/\\\\*))|$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implementation_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor-rule-other-interface\": {\n\t\t\t\"begin\": \"^\\\\s*(#\\\\s*(if(n?def)?)\\\\b.*?(?:(?=(?://|/\\\\*))|$))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.preprocessor.objc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\s*(#\\\\s*(endif)\\\\b).*?(?:(?=(?://|/\\\\*))|$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface_innards\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"properties\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)property)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.property.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.scope.end.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.property-with-attributes.objc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(getter|setter|readonly|readwrite|assign|retain|copy|nonatomic|atomic|strong|weak|nonnull|nullable|null_resettable|null_unspecified|class|direct)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.property.attribute.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.property.objc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"((@)property)\\\\b\",\n\t\t\t\t\t\"name\": \"meta.property.objc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property_directive\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)(dynamic|synthesize)\\\\b\",\n\t\t\t\"name\": \"keyword.other.property.directive.objc\"\n\t\t},\n\t\t\"protocol_list\": {\n\t\t\t\"begin\": \"(<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.objc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.protocol-list.objc\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\bNS(GlyphStorage|M(utableCopying|enuItem)|C(hangeSpelling|o(ding|pying|lorPicking(Custom|Default)))|T(oolbarItemValidations|ext(Input|AttachmentCell))|I(nputServ(iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(CTypeSerializationCallBack|ect)|D(ecimalNumberBehaviors|raggingInfo)|U(serInterfaceValidations|RL(HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(ToobarItem|UserInterfaceItem)|Locking)\\\\b\",\n\t\t\t\t\t\"name\": \"support.other.protocol.objc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"protocol_type_qualifier\": {\n\t\t\t\"match\": \"\\\\b(in|out|inout|oneway|bycopy|byref|nonnull|nullable|_Nonnull|_Nullable|_Null_unspecified)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.protocol.objc\"\n\t\t},\n\t\t\"special_variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b_cmd\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.selector.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(self|super)\\\\b\",\n\t\t\t\t\t\"name\": \"variable.language.objc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escaped_char\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\\\\\\\ (\\n\\\\\\\\\\t\\t\\t |\\n[abefnprtv'\\\"?]   |\\n[0-3]\\\\d{,2}\\t |\\n[4-7]\\\\d?\\t\\t|\\nx[a-fA-F0-9]{,2} |\\nu[a-fA-F0-9]{,4} |\\nU[a-fA-F0-9]{,8} )\",\n\t\t\t\t\t\"name\": \"constant.character.escape.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"invalid.illegal.unknown-escape.objc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_placeholder\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) %\\n(\\\\d+\\\\$)?\\t\\t\\t\\t\\t\\t   # field (argument #)\\n[#0\\\\- +']*\\t\\t\\t\\t\\t\\t  # flags\\n[,;:_]?\\t\\t\\t\\t\\t\\t\\t  # separator character (AltiVec)\\n((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?\\t\\t  # minimum field width\\n(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?\\t# precision\\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\\n[diouxXDOUeEfFgGaACcSspn%]\\t\\t   # conversion type\",\n\t\t\t\t\t\"name\": \"constant.other.placeholder.objc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(%)(?!\\\"\\\\s*(PRI|SCN))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.placeholder.objc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/open-remote-ssh/CHANGELOG.md",
    "content": "## 0.0.48\n- Support `%n` in ProxyCommand\n- fix: add missing direct @types/ssh2-stream dependency (#177)\n- fix Win32 internal error (#178)\n\n## 0.0.47\n- Add support for loong64 (#175)\n- Add s390x support (#174)\n- Support vscodium alpine reh (#142)\n\n## 0.0.46\n- Add riscv64 support (#147)\n\n## 0.0.45\n- Use windows-x64 server on windows-arm64\n\n## 0.0.44\n- Update ssh2 lib\n- Properly set extensionHost env variables\n\n## 0.0.43\n- Fix parsing multiple include directives\n\n## 0.0.42\n- Fix remote label to show port when connecting to a port other than 22\n\n## 0.0.41\n- Take into account parsed port from ssh destination. Fixes (#110)\n\n## 0.0.40\n- Update ssh-config package\n\n## 0.0.39\n\n- output error messages when downloading vscode server (#39)\n- Add PreferredAuthentications support (#97)\n\n## 0.0.38\n\n- Enable remote support for ppc64le (#93)\n\n## 0.0.37\n\n- Default to Current OS User in Connection String if No User Provided (#91)\n- Add support for (unofficial) DragonFly reh (#86)\n\n## 0.0.36\n\n- Make wget support continue download (#85)\n\n## 0.0.35\n\n- Fixes hardcoded agentsock for windows breaks pageant compatibility (#81)\n\n## 0.0.34\n\n- Add remote.SSH.connectTimeout setting\n- adding %r username replacement to proxycommand (#77)\n\n## 0.0.33\n\n- feat: support %r user substitution in proxycommand\n\n## 0.0.32\n\n- feat: use serverDownloadUrlTemplate from product.json (#59)\n\n## 0.0.31\n\n- feat: support glob patterns in SSH include directives\n\n## 0.0.30\n\n- feat: support file patterns in SSH include directives\n"
  },
  {
    "path": "extensions/open-remote-ssh/README.md",
    "content": "# Open Remote - SSH\n\n## SSH Host Requirements\n\nYou can connect to a running SSH server on the following platforms.\n\n**Supported**:\n\n- x86_64 Debian 8+, Ubuntu 16.04+, CentOS / RHEL 7+ Linux.\n- ARMv7l (AArch32) Raspbian Stretch/9+ (32-bit).\n- ARMv8l (AArch64) Ubuntu 18.04+ (64-bit).\n- macOS 10.14+ (Mojave)\n- Windows 10+\n- FreeBSD 13 (Requires manual remote-extension-host installation)\n- DragonFlyBSD (Requires manual remote-extension-host installation)\n\n## Requirements\n\n**Activation**\n\nEnable the extension in your `argv.json`\n\n```json\n{\n    ...\n    \"enable-proposed-api\": [\n        ...,\n        \"jeanp413.open-remote-ssh\",\n    ]\n    ...\n}\n```\n\nwhich you can open by running the `Preferences: Configure Runtime Arguments` command.\nThe file is located in `~/.vscode-oss/argv.json`.\n\n**Alpine linux**\n\nWhen running on alpine linux, the packages `libstdc++` and `bash` are necessary and can be installed via\nrunning\n\n```bash\nsudo apk add bash libstdc++\n```\n\n## SSH configuration file\n\n[OpenSSH](https://www.openssh.com/) supports using a [configuration file](https://linuxize.com/post/using-the-ssh-config-file/) to store all your different SSH connections. To use an SSH config file, run the `Remote-SSH: Open SSH Configuration File...` command.\n"
  },
  {
    "path": "extensions/open-remote-ssh/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t}\n});\n"
  },
  {
    "path": "extensions/open-remote-ssh/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\nconst { IgnorePlugin } = require('webpack');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n\texternals: {\n\t\tvscode: \"commonjs vscode\",\n\t\tbufferutil: \"commonjs bufferutil\",\n\t\t\"utf-8-validate\": \"commonjs utf-8-validate\",\n\t},\n\tplugins: [\n\t\tnew IgnorePlugin({\n\t\t\tresourceRegExp: /crypto\\/build\\/Release\\/sshcrypto\\.node$/,\n\t\t}),\n\t\tnew IgnorePlugin({\n\t\t\tresourceRegExp: /cpu-features/,\n\t\t})\n\t]\n});\n"
  },
  {
    "path": "extensions/open-remote-ssh/package.json",
    "content": "{\n  \"name\": \"open-remote-ssh\",\n  \"displayName\": \"Open Remote - SSH\",\n  \"publisher\": \"voideditor\",\n  \"description\": \"Use any remote machine with a SSH server as your development environment.\",\n  \"version\": \"0.0.48\",\n  \"icon\": \"resources/icon.png\",\n  \"engines\": {\n    \"vscode\": \"^1.70.2\"\n  },\n  \"extensionKind\": [\n    \"ui\"\n  ],\n  \"enabledApiProposals\": [\n    \"resolvers\",\n    \"contribViewsRemote\"\n  ],\n  \"keywords\": [\n    \"remote development\",\n    \"remote\",\n    \"ssh\"\n  ],\n  \"api\": \"none\",\n  \"activationEvents\": [\n    \"onCommand:openremotessh.openEmptyWindow\",\n    \"onCommand:openremotessh.openEmptyWindowInCurrentWindow\",\n    \"onCommand:openremotessh.openConfigFile\",\n    \"onCommand:openremotessh.showLog\",\n    \"onResolveRemoteAuthority:ssh-remote\",\n    \"onView:sshHosts\"\n  ],\n  \"main\": \"./out/extension.js\",\n  \"contributes\": {\n    \"configuration\": {\n      \"title\": \"Remote - SSH\",\n      \"properties\": {\n        \"remote.SSH.configFile\": {\n          \"type\": \"string\",\n          \"description\": \"The absolute file path to a custom SSH config file.\",\n          \"default\": \"\",\n          \"scope\": \"application\"\n        },\n        \"remote.SSH.connectTimeout\": {\n          \"type\": \"number\",\n          \"description\": \"Specifies the timeout in seconds used for the SSH command that connects to the remote.\",\n          \"default\": 60,\n          \"scope\": \"application\",\n          \"minimum\": 1\n        },\n        \"remote.SSH.defaultExtensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"List of extensions that should be installed automatically on all SSH hosts.\",\n          \"scope\": \"application\"\n        },\n        \"remote.SSH.enableDynamicForwarding\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether to use SSH dynamic forwarding to allow setting up new port tunnels over an existing SSH connection.\",\n          \"scope\": \"application\",\n          \"default\": true\n        },\n        \"remote.SSH.enableAgentForwarding\": {\n          \"type\": \"boolean\",\n          \"markdownDescription\": \"Enable fixing the remote environment so that the SSH config option `ForwardAgent` will take effect as expected from VS Code's remote extension host.\",\n          \"scope\": \"application\",\n          \"default\": true\n        },\n        \"remote.SSH.serverDownloadUrlTemplate\": {\n          \"type\": \"string\",\n          \"description\": \"The URL from where the vscode server will be downloaded. You can use the following variables and they will be replaced dynamically:\\n- ${quality}: vscode server quality, e.g. stable or insiders\\n- ${version}: vscode server version, e.g. 1.69.0\\n- ${commit}: vscode server release commit\\n- ${arch}: vscode server arch, e.g. x64, armhf, arm64\\n- ${release}: release number\",\n          \"scope\": \"application\",\n          \"default\": \"https://github.com/voideditor/binaries/releases/download/${version}/void-reh-${os}-${arch}-${version}.tar.gz\"\n        },\n        \"remote.SSH.remotePlatform\": {\n          \"type\": \"object\",\n          \"description\": \"A map of the remote hostname to the platform for that remote. Valid values: linux, macos, windows.\",\n          \"scope\": \"application\",\n          \"default\": {},\n          \"additionalProperties\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"linux\",\n              \"macos\",\n              \"windows\"\n            ]\n          }\n        },\n        \"remote.SSH.remoteServerListenOnSocket\": {\n          \"type\": \"boolean\",\n          \"description\": \"When true, the remote vscode server will listen on a socket path instead of opening a port. Only valid for Linux and macOS remotes. Requires `AllowStreamLocalForwarding` to be enabled for the SSH server.\",\n          \"default\": false\n        },\n        \"remote.SSH.experimental.serverBinaryName\": {\n          \"type\": \"string\",\n          \"description\": \"**Experimental:** The name of the server binary, use this **only if** you are using a client without a corresponding server release\",\n          \"scope\": \"application\",\n          \"default\": \"\"\n        }\n      }\n    },\n    \"views\": {\n      \"remote\": [\n        {\n          \"id\": \"sshHosts\",\n          \"name\": \"SSH Targets\",\n          \"group\": \"targets@1\",\n          \"remoteName\": \"ssh-remote\"\n        }\n      ]\n    },\n    \"commands\": [\n      {\n        \"command\": \"openremotessh.openEmptyWindow\",\n        \"title\": \"Connect to Host...\",\n        \"category\": \"Remote-SSH\"\n      },\n      {\n        \"command\": \"openremotessh.openEmptyWindowInCurrentWindow\",\n        \"title\": \"Connect Current Window to Host...\",\n        \"category\": \"Remote-SSH\"\n      },\n      {\n        \"command\": \"openremotessh.openConfigFile\",\n        \"title\": \"Open SSH Configuration File...\",\n        \"category\": \"Remote-SSH\"\n      },\n      {\n        \"command\": \"openremotessh.showLog\",\n        \"title\": \"Show Log\",\n        \"category\": \"Remote-SSH\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.emptyWindowInNewWindow\",\n        \"title\": \"Connect to Host in New Window\",\n        \"icon\": \"$(empty-window)\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.emptyWindowInCurrentWindow\",\n        \"title\": \"Connect to Host in Current Window\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.reopenFolderInCurrentWindow\",\n        \"title\": \"Open on SSH Host in Current Window\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.reopenFolderInNewWindow\",\n        \"title\": \"Open on SSH Host in New Window\",\n        \"icon\": \"$(folder-opened)\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.deleteFolderHistoryItem\",\n        \"title\": \"Remove From Recent List\",\n        \"icon\": \"$(x)\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.refresh\",\n        \"title\": \"Refresh\",\n        \"icon\": \"$(refresh)\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.configure\",\n        \"title\": \"Configure\",\n        \"icon\": \"$(gear)\"\n      },\n      {\n        \"command\": \"openremotessh.explorer.add\",\n        \"title\": \"Add New\",\n        \"icon\": \"$(plus)\"\n      }\n    ],\n    \"resourceLabelFormatters\": [\n      {\n        \"scheme\": \"vscode-remote\",\n        \"authority\": \"ssh-remote+*\",\n        \"formatting\": {\n          \"label\": \"${path}\",\n          \"separator\": \"/\",\n          \"tildify\": true,\n          \"workspaceSuffix\": \"SSH\"\n        }\n      }\n    ],\n    \"menus\": {\n      \"statusBar/remoteIndicator\": [\n        {\n          \"command\": \"openremotessh.openEmptyWindow\",\n          \"when\": \"remoteName =~ /^ssh-remote$/ && remoteConnectionState == connected\",\n          \"group\": \"remote_20_ssh_1general@1\"\n        },\n        {\n          \"command\": \"openremotessh.openEmptyWindowInCurrentWindow\",\n          \"when\": \"remoteName =~ /^ssh-remote$/ && remoteConnectionState == connected\",\n          \"group\": \"remote_20_ssh_1general@2\"\n        },\n        {\n          \"command\": \"openremotessh.openConfigFile\",\n          \"when\": \"remoteName =~ /^ssh-remote$/ && remoteConnectionState == connected\",\n          \"group\": \"remote_20_ssh_1general@3\"\n        },\n        {\n          \"command\": \"openremotessh.showLog\",\n          \"when\": \"remoteName =~ /^ssh-remote$/ && remoteConnectionState == connected\",\n          \"group\": \"remote_20_ssh_1general@4\"\n        },\n        {\n          \"command\": \"openremotessh.openEmptyWindow\",\n          \"when\": \"remoteConnectionState == disconnected\",\n          \"group\": \"remote_20_ssh_3local@1\"\n        },\n        {\n          \"command\": \"openremotessh.openEmptyWindowInCurrentWindow\",\n          \"when\": \"remoteConnectionState == disconnected\",\n          \"group\": \"remote_20_ssh_3local@2\"\n        },\n        {\n          \"command\": \"openremotessh.openConfigFile\",\n          \"when\": \"remoteConnectionState == disconnected\",\n          \"group\": \"remote_20_ssh_3local@3\"\n        },\n        {\n          \"command\": \"openremotessh.openEmptyWindow\",\n          \"when\": \"!remoteName && !virtualWorkspace\",\n          \"group\": \"remote_20_ssh_3local@5\"\n        },\n        {\n          \"command\": \"openremotessh.openEmptyWindowInCurrentWindow\",\n          \"when\": \"!remoteName && !virtualWorkspace\",\n          \"group\": \"remote_20_ssh_3local@6\"\n        },\n        {\n          \"command\": \"openremotessh.openConfigFile\",\n          \"when\": \"!remoteName && !virtualWorkspace\",\n          \"group\": \"remote_20_ssh_3local@7\"\n        }\n      ],\n      \"commandPalette\": [\n        {\n          \"command\": \"openremotessh.explorer.refresh\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.configure\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.add\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.emptyWindowInNewWindow\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.emptyWindowInCurrentWindow\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.reopenFolderInCurrentWindow\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.reopenFolderInNewWindow\",\n          \"when\": \"false\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.deleteFolderHistoryItem\",\n          \"when\": \"false\"\n        }\n      ],\n      \"view/title\": [\n        {\n          \"command\": \"openremotessh.explorer.add\",\n          \"when\": \"view == sshHosts\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.configure\",\n          \"when\": \"view == sshHosts\",\n          \"group\": \"navigation\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.refresh\",\n          \"when\": \"view == sshHosts\",\n          \"group\": \"navigation\"\n        }\n      ],\n      \"view/item/context\": [\n        {\n          \"command\": \"openremotessh.explorer.emptyWindowInNewWindow\",\n          \"when\": \"viewItem =~ /^openremotessh.explorer.host$/\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.emptyWindowInNewWindow\",\n          \"when\": \"viewItem =~ /^openremotessh.explorer.host$/\",\n          \"group\": \"navigation@2\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.emptyWindowInCurrentWindow\",\n          \"when\": \"viewItem =~ /^openremotessh.explorer.host$/\",\n          \"group\": \"navigation@1\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.reopenFolderInNewWindow\",\n          \"when\": \"viewItem == openremotessh.explorer.folder\",\n          \"group\": \"inline@1\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.reopenFolderInNewWindow\",\n          \"when\": \"viewItem == openremotessh.explorer.folder\",\n          \"group\": \"navigation@2\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.reopenFolderInCurrentWindow\",\n          \"when\": \"viewItem == openremotessh.explorer.folder\",\n          \"group\": \"navigation@1\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.deleteFolderHistoryItem\",\n          \"when\": \"viewItem =~ /^openremotessh.explorer.folder/\",\n          \"group\": \"navigation@3\"\n        },\n        {\n          \"command\": \"openremotessh.explorer.deleteFolderHistoryItem\",\n          \"when\": \"viewItem =~ /^openremotessh.explorer.folder/\",\n          \"group\": \"inline@2\"\n        }\n      ]\n    }\n  },\n  \"scripts\": {\n    \"vscode:prepublish\": \"npm run compile\",\n    \"compile\": \"gulp compile-extension:open-remote-ssh\",\n    \"compile-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none\",\n    \"watch\": \"gulp watch-extension:open-remote-ssh\",\n    \"watch-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose\"\n  },\n  \"devDependencies\": {\n    \"@types/ssh2\": \"^0.5.52\",\n    \"@types/ssh2-streams\": \"0.1.12\"\n  },\n  \"dependencies\": {\n    \"glob\": \"^9.3.1\",\n    \"simple-socks\": \"git+https://github.com/jeanp413/simple-socks#main\",\n    \"socks\": \"^2.5.0\",\n    \"@jeanp413/ssh-config\": \"^4.3.1\",\n    \"ssh2\": \"git+https://github.com/jeanp413/ssh2#master\"\n  }\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/authResolver.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as cp from 'child_process';\nimport * as fs from 'fs';\nimport * as net from 'net';\nimport * as stream from 'stream';\nimport { SocksClient, SocksClientOptions } from 'socks';\nimport * as vscode from 'vscode';\nimport * as ssh2 from 'ssh2';\nimport type { ParsedKey } from 'ssh2-streams';\nimport Log from './common/logger';\nimport SSHDestination from './ssh/sshDestination';\nimport SSHConnection, { SSHTunnelConfig } from './ssh/sshConnection';\nimport SSHConfiguration from './ssh/sshConfig';\nimport { gatherIdentityFiles } from './ssh/identityFiles';\nimport { untildify, exists as fileExists } from './common/files';\nimport { findRandomPort } from './common/ports';\nimport { disposeAll } from './common/disposable';\nimport { installCodeServer, ServerInstallError } from './serverSetup';\nimport { isWindows } from './common/platform';\nimport * as os from 'os';\n\nconst PASSWORD_RETRY_COUNT = 3;\nconst PASSPHRASE_RETRY_COUNT = 3;\n\nexport const REMOTE_SSH_AUTHORITY = 'ssh-remote';\n\nexport function getRemoteAuthority(host: string) {\n\treturn `${REMOTE_SSH_AUTHORITY}+${host}`;\n}\n\nclass TunnelInfo implements vscode.Disposable {\n\tconstructor(\n\t\treadonly localPort: number,\n\t\treadonly remotePortOrSocketPath: number | string,\n\t\tprivate disposables: vscode.Disposable[]\n\t) {\n\t}\n\n\tdispose() {\n\t\tdisposeAll(this.disposables);\n\t}\n}\n\ninterface SSHKey {\n\tfilename: string;\n\tparsedKey: ParsedKey;\n\tfingerprint: string;\n\tagentSupport?: boolean;\n\tisPrivate?: boolean;\n}\n\nexport class RemoteSSHResolver implements vscode.RemoteAuthorityResolver, vscode.Disposable {\n\n\tprivate proxyConnections: SSHConnection[] = [];\n\tprivate sshConnection: SSHConnection | undefined;\n\tprivate sshAgentSock: string | undefined;\n\tprivate proxyCommandProcess: cp.ChildProcessWithoutNullStreams | undefined;\n\n\tprivate socksTunnel: SSHTunnelConfig | undefined;\n\tprivate tunnels: TunnelInfo[] = [];\n\n\tprivate labelFormatterDisposable: vscode.Disposable | undefined;\n\n\tconstructor(\n\t\treadonly context: vscode.ExtensionContext,\n\t\treadonly logger: Log\n\t) {\n\t}\n\n\tresolve(authority: string, context: vscode.RemoteAuthorityResolverContext): Thenable<vscode.ResolverResult> {\n\t\tconst [type, dest] = authority.split('+');\n\t\tif (type !== REMOTE_SSH_AUTHORITY) {\n\t\t\tthrow new Error(`Invalid authority type for SSH resolver: ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`Resolving ssh remote authority '${authority}' (attemp #${context.resolveAttempt})`);\n\n\t\tconst sshDest = SSHDestination.parseEncoded(dest);\n\n\t\t// It looks like default values are not loaded yet when resolving a remote,\n\t\t// so let's hardcode the default values here\n\t\tconst remoteSSHconfig = vscode.workspace.getConfiguration('remote.SSH');\n\t\tconst enableDynamicForwarding = remoteSSHconfig.get<boolean>('enableDynamicForwarding', true)!;\n\t\tconst enableAgentForwarding = remoteSSHconfig.get<boolean>('enableAgentForwarding', true)!;\n\t\tconst serverDownloadUrlTemplate = remoteSSHconfig.get<string>('serverDownloadUrlTemplate');\n\t\tconst defaultExtensions = remoteSSHconfig.get<string[]>('defaultExtensions', []);\n\t\tconst remotePlatformMap = remoteSSHconfig.get<Record<string, string>>('remotePlatform', {});\n\t\tconst remoteServerListenOnSocket = remoteSSHconfig.get<boolean>('remoteServerListenOnSocket', false)!;\n\t\tconst connectTimeout = remoteSSHconfig.get<number>('connectTimeout', 60)!;\n\n\t\treturn vscode.window.withProgress({\n\t\t\ttitle: `Setting up SSH Host ${sshDest.hostname}`,\n\t\t\tlocation: vscode.ProgressLocation.Notification,\n\t\t\tcancellable: false\n\t\t}, async () => {\n\t\t\ttry {\n\t\t\t\tconst sshconfig = await SSHConfiguration.loadFromFS();\n\t\t\t\tconst sshHostConfig = sshconfig.getHostConfiguration(sshDest.hostname);\n\t\t\t\tconst sshHostName = sshHostConfig['HostName'] ? sshHostConfig['HostName'].replace('%h', sshDest.hostname) : sshDest.hostname;\n\t\t\t\tconst sshUser = sshHostConfig['User'] || sshDest.user || os.userInfo().username || ''; // https://github.com/openssh/openssh-portable/blob/5ec5504f1d328d5bfa64280cd617c3efec4f78f3/sshconnect.c#L1561-L1562\n\t\t\t\tconst sshPort = sshHostConfig['Port'] ? parseInt(sshHostConfig['Port'], 10) : (sshDest.port || 22);\n\n\t\t\t\tthis.sshAgentSock = sshHostConfig['IdentityAgent'] || process.env['SSH_AUTH_SOCK'] || (isWindows ? '\\\\\\\\.\\\\pipe\\\\openssh-ssh-agent' : undefined);\n\t\t\t\tthis.sshAgentSock = this.sshAgentSock ? untildify(this.sshAgentSock) : undefined;\n\t\t\t\tconst agentForward = enableAgentForwarding && (sshHostConfig['ForwardAgent'] || 'no').toLowerCase() === 'yes';\n\t\t\t\tconst agent = agentForward && this.sshAgentSock ? new ssh2.OpenSSHAgent(this.sshAgentSock) : undefined;\n\n\t\t\t\tconst preferredAuthentications = sshHostConfig['PreferredAuthentications'] ? sshHostConfig['PreferredAuthentications'].split(',').map(s => s.trim()) : ['publickey', 'password', 'keyboard-interactive'];\n\n\t\t\t\tconst identityFiles: string[] = (sshHostConfig['IdentityFile'] as unknown as string[]) || [];\n\t\t\t\tconst identitiesOnly = (sshHostConfig['IdentitiesOnly'] || 'no').toLowerCase() === 'yes';\n\t\t\t\tconst identityKeys = await gatherIdentityFiles(identityFiles, this.sshAgentSock, identitiesOnly, this.logger);\n\n\t\t\t\t// Create proxy jump connections if any\n\t\t\t\tlet proxyStream: ssh2.ClientChannel | stream.Duplex | undefined;\n\t\t\t\tif (sshHostConfig['ProxyJump']) {\n\t\t\t\t\tconst proxyJumps = sshHostConfig['ProxyJump'].split(',').filter(i => !!i.trim())\n\t\t\t\t\t\t.map(i => {\n\t\t\t\t\t\t\tconst proxy = SSHDestination.parse(i);\n\t\t\t\t\t\t\tconst proxyHostConfig = sshconfig.getHostConfiguration(proxy.hostname);\n\t\t\t\t\t\t\treturn [proxy, proxyHostConfig] as [SSHDestination, Record<string, string>];\n\t\t\t\t\t\t});\n\t\t\t\t\tfor (let i = 0; i < proxyJumps.length; i++) {\n\t\t\t\t\t\tconst [proxy, proxyHostConfig] = proxyJumps[i];\n\t\t\t\t\t\tconst proxyHostName = proxyHostConfig['HostName'] || proxy.hostname;\n\t\t\t\t\t\tconst proxyUser = proxyHostConfig['User'] || proxy.user || sshUser;\n\t\t\t\t\t\tconst proxyPort = proxyHostConfig['Port'] ? parseInt(proxyHostConfig['Port'], 10) : (proxy.port || sshPort);\n\n\t\t\t\t\t\tconst proxyAgentForward = enableAgentForwarding && (proxyHostConfig['ForwardAgent'] || 'no').toLowerCase() === 'yes';\n\t\t\t\t\t\tconst proxyAgent = proxyAgentForward && this.sshAgentSock ? new ssh2.OpenSSHAgent(this.sshAgentSock) : undefined;\n\n\t\t\t\t\t\tconst proxyIdentityFiles: string[] = (proxyHostConfig['IdentityFile'] as unknown as string[]) || [];\n\t\t\t\t\t\tconst proxyIdentitiesOnly = (proxyHostConfig['IdentitiesOnly'] || 'no').toLowerCase() === 'yes';\n\t\t\t\t\t\tconst proxyIdentityKeys = await gatherIdentityFiles(proxyIdentityFiles, this.sshAgentSock, proxyIdentitiesOnly, this.logger);\n\n\t\t\t\t\t\tconst proxyAuthHandler = this.getSSHAuthHandler(proxyUser, proxyHostName, proxyIdentityKeys, preferredAuthentications);\n\t\t\t\t\t\tconst proxyConnection = new SSHConnection({\n\t\t\t\t\t\t\thost: !proxyStream ? proxyHostName : undefined,\n\t\t\t\t\t\t\tport: !proxyStream ? proxyPort : undefined,\n\t\t\t\t\t\t\tsock: proxyStream,\n\t\t\t\t\t\t\tusername: proxyUser,\n\t\t\t\t\t\t\treadyTimeout: connectTimeout * 1000,\n\t\t\t\t\t\t\tstrictVendor: false,\n\t\t\t\t\t\t\tagentForward: proxyAgentForward,\n\t\t\t\t\t\t\tagent: proxyAgent,\n\t\t\t\t\t\t\tauthHandler: (arg0, arg1, arg2) => (proxyAuthHandler(arg0, arg1, arg2), undefined)\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.proxyConnections.push(proxyConnection);\n\n\t\t\t\t\t\tconst nextProxyJump = i < proxyJumps.length - 1 ? proxyJumps[i + 1] : undefined;\n\t\t\t\t\t\tconst destIP = nextProxyJump ? (nextProxyJump[1]['HostName'] || nextProxyJump[0].hostname) : sshHostName;\n\t\t\t\t\t\tconst destPort = nextProxyJump ? ((nextProxyJump[1]['Port'] && parseInt(nextProxyJump[1]['Port'], 10)) || nextProxyJump[0].port || 22) : sshPort;\n\t\t\t\t\t\tproxyStream = await proxyConnection.forwardOut('127.0.0.1', 0, destIP, destPort);\n\t\t\t\t\t}\n\t\t\t\t} else if (sshHostConfig['ProxyCommand']) {\n\t\t\t\t\tlet proxyArgs = (sshHostConfig['ProxyCommand'] as unknown as string[])\n\t\t\t\t\t\t.map((arg) => arg.replace('%h', sshHostName).replace('%n', sshDest.hostname).replace('%p', sshPort.toString()).replace('%r', sshUser));\n\t\t\t\t\tlet proxyCommand = proxyArgs.shift()!;\n\n\t\t\t\t\tlet options = {};\n\t\t\t\t\tif (isWindows && /\\.(bat|cmd)$/.test(proxyCommand)) {\n\t\t\t\t\t\tproxyCommand = `\"${proxyCommand}\"`;\n\t\t\t\t\t\tproxyArgs = proxyArgs.map((arg) => arg.includes(' ') ? `\"${arg}\"` : arg);\n\t\t\t\t\t\toptions = { shell: true, windowsHide: true, windowsVerbatimArguments: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.logger.trace(`Spawning ProxyCommand: ${proxyCommand} ${proxyArgs.join(' ')}`);\n\n\t\t\t\t\tconst child = cp.spawn(proxyCommand, proxyArgs, options);\n\t\t\t\t\tproxyStream = stream.Duplex.from({ readable: child.stdout, writable: child.stdin });\n\t\t\t\t\tthis.proxyCommandProcess = child;\n\t\t\t\t}\n\n\t\t\t\t// Create final shh connection\n\t\t\t\tconst sshAuthHandler = this.getSSHAuthHandler(sshUser, sshHostName, identityKeys, preferredAuthentications);\n\n\t\t\t\tthis.sshConnection = new SSHConnection({\n\t\t\t\t\thost: !proxyStream ? sshHostName : undefined,\n\t\t\t\t\tport: !proxyStream ? sshPort : undefined,\n\t\t\t\t\tsock: proxyStream,\n\t\t\t\t\tusername: sshUser,\n\t\t\t\t\treadyTimeout: connectTimeout * 1000,\n\t\t\t\t\tstrictVendor: false,\n\t\t\t\t\tagentForward,\n\t\t\t\t\tagent,\n\t\t\t\t\tauthHandler: (arg0, arg1, arg2) => (sshAuthHandler(arg0, arg1, arg2), undefined),\n\t\t\t\t});\n\t\t\t\tawait this.sshConnection.connect();\n\n\t\t\t\tconst envVariables: Record<string, string | null> = {};\n\t\t\t\tif (agentForward) {\n\t\t\t\t\tenvVariables['SSH_AUTH_SOCK'] = null;\n\t\t\t\t}\n\n\t\t\t\tconst installResult = await installCodeServer(this.sshConnection, serverDownloadUrlTemplate, defaultExtensions, Object.keys(envVariables), remotePlatformMap[sshDest.hostname], remoteServerListenOnSocket, this.logger);\n\n\t\t\t\tfor (const key of Object.keys(envVariables)) {\n\t\t\t\t\tif (installResult[key] !== undefined) {\n\t\t\t\t\t\tenvVariables[key] = installResult[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update terminal env variables\n\t\t\t\tthis.context.environmentVariableCollection.persistent = false;\n\t\t\t\tfor (const [key, value] of Object.entries(envVariables)) {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tthis.context.environmentVariableCollection.replace(key, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (enableDynamicForwarding) {\n\t\t\t\t\tconst socksPort = await findRandomPort();\n\t\t\t\t\tthis.socksTunnel = await this.sshConnection!.addTunnel({\n\t\t\t\t\t\tname: `ssh_tunnel_socks_${socksPort}`,\n\t\t\t\t\t\tlocalPort: socksPort,\n\t\t\t\t\t\tsocks: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst tunnelConfig = await this.openTunnel(0, installResult.listeningOn);\n\t\t\t\tthis.tunnels.push(tunnelConfig);\n\n\t\t\t\t// Enable ports view\n\t\t\t\tvscode.commands.executeCommand('setContext', 'forwardedPortsViewEnabled', true);\n\n\t\t\t\tthis.labelFormatterDisposable?.dispose();\n\t\t\t\tthis.labelFormatterDisposable = vscode.workspace.registerResourceLabelFormatter({\n\t\t\t\t\tscheme: 'vscode-remote',\n\t\t\t\t\tauthority: `${REMOTE_SSH_AUTHORITY}+*`,\n\t\t\t\t\tformatting: {\n\t\t\t\t\t\tlabel: '${path}',\n\t\t\t\t\t\tseparator: '/',\n\t\t\t\t\t\ttildify: true,\n\t\t\t\t\t\tworkspaceSuffix: `SSH: ${sshDest.hostname}` + (sshDest.port && sshDest.port !== 22 ? `:${sshDest.port}` : '')\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tconst resolvedResult: vscode.ResolverResult = new vscode.ResolvedAuthority('127.0.0.1', tunnelConfig.localPort, installResult.connectionToken);\n\t\t\t\tresolvedResult.extensionHostEnv = envVariables;\n\t\t\t\treturn resolvedResult;\n\t\t\t} catch (e: unknown) {\n\t\t\t\tthis.logger.error(`Error resolving authority`, e);\n\n\t\t\t\t// Initial connection\n\t\t\t\tif (context.resolveAttempt === 1) {\n\t\t\t\t\tthis.logger.show();\n\n\t\t\t\t\tconst closeRemote = 'Close Remote';\n\t\t\t\t\tconst retry = 'Retry';\n\t\t\t\t\tconst result = await vscode.window.showErrorMessage(`Could not establish connection to \"${sshDest.hostname}\"`, { modal: true }, closeRemote, retry);\n\t\t\t\t\tif (result === closeRemote) {\n\t\t\t\t\t\tawait vscode.commands.executeCommand('workbench.action.remote.close');\n\t\t\t\t\t} else if (result === retry) {\n\t\t\t\t\t\tawait vscode.commands.executeCommand('workbench.action.reloadWindow');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (e instanceof ServerInstallError || !(e instanceof Error)) {\n\t\t\t\t\tthrow vscode.RemoteAuthorityResolverError.NotAvailable(e instanceof Error ? e.message : String(e));\n\t\t\t\t} else {\n\t\t\t\t\tthrow vscode.RemoteAuthorityResolverError.TemporarilyNotAvailable(e.message);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate async openTunnel(localPort: number, remotePortOrSocketPath: number | string) {\n\t\tlocalPort = localPort > 0 ? localPort : await findRandomPort();\n\n\t\tconst disposables: vscode.Disposable[] = [];\n\t\tconst remotePort = typeof remotePortOrSocketPath === 'number' ? remotePortOrSocketPath : undefined;\n\t\tconst remoteSocketPath = typeof remotePortOrSocketPath === 'string' ? remotePortOrSocketPath : undefined;\n\t\tif (this.socksTunnel && remotePort) {\n\t\t\tconst forwardingServer = await new Promise<net.Server>((resolve, reject) => {\n\t\t\t\tthis.logger.trace(`Creating forwarding server ${localPort}(local) => ${this.socksTunnel!.localPort!}(socks) => ${remotePort}(remote)`);\n\t\t\t\tconst socksOptions: SocksClientOptions = {\n\t\t\t\t\tproxy: {\n\t\t\t\t\t\thost: '127.0.0.1',\n\t\t\t\t\t\tport: this.socksTunnel!.localPort!,\n\t\t\t\t\t\ttype: 5\n\t\t\t\t\t},\n\t\t\t\t\tcommand: 'connect',\n\t\t\t\t\tdestination: {\n\t\t\t\t\t\thost: '127.0.0.1',\n\t\t\t\t\t\tport: remotePort\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst server: net.Server = net.createServer()\n\t\t\t\t\t.on('error', reject)\n\t\t\t\t\t.on('connection', async (socket: net.Socket) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst socksConn = await SocksClient.createConnection(socksOptions);\n\t\t\t\t\t\t\tsocket.pipe(socksConn.socket);\n\t\t\t\t\t\t\tsocksConn.socket.pipe(socket);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tthis.logger.error(`Error while creating SOCKS connection`, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('listening', () => resolve(server))\n\t\t\t\t\t.listen(localPort);\n\t\t\t});\n\t\t\tdisposables.push({\n\t\t\t\tdispose: () => forwardingServer.close(() => {\n\t\t\t\t\tthis.logger.trace(`SOCKS forwading server closed`);\n\t\t\t\t}),\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.trace(`Opening tunnel ${localPort}(local) => ${remotePortOrSocketPath}(remote)`);\n\t\t\tconst tunnelConfig = await this.sshConnection!.addTunnel({\n\t\t\t\tname: `ssh_tunnel_${localPort}_${remotePortOrSocketPath}`,\n\t\t\t\tremoteAddr: '127.0.0.1',\n\t\t\t\tremotePort,\n\t\t\t\tremoteSocketPath,\n\t\t\t\tlocalPort\n\t\t\t});\n\t\t\tdisposables.push({\n\t\t\t\tdispose: () => {\n\t\t\t\t\tthis.sshConnection?.closeTunnel(tunnelConfig.name);\n\t\t\t\t\tthis.logger.trace(`Tunnel ${tunnelConfig.name} closed`);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn new TunnelInfo(localPort, remotePortOrSocketPath, disposables);\n\t}\n\n\tprivate getSSHAuthHandler(sshUser: string, sshHostName: string, identityKeys: SSHKey[], preferredAuthentications: string[]) {\n\t\tlet passwordRetryCount = PASSWORD_RETRY_COUNT;\n\t\tlet keyboardRetryCount = PASSWORD_RETRY_COUNT;\n\t\tidentityKeys = identityKeys.slice();\n\t\treturn async (methodsLeft: string[] | null, _partialSuccess: boolean | null, callback: (nextAuth: ssh2.AuthHandlerResult) => void) => {\n\t\t\tif (methodsLeft === null) {\n\t\t\t\tthis.logger.info(`Trying no-auth authentication`);\n\n\t\t\t\treturn callback({\n\t\t\t\t\ttype: 'none',\n\t\t\t\t\tusername: sshUser,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (methodsLeft.includes('publickey') && identityKeys.length && preferredAuthentications.includes('publickey')) {\n\t\t\t\tconst identityKey = identityKeys.shift()!;\n\n\t\t\t\tthis.logger.info(`Trying publickey authentication: ${identityKey.filename} ${identityKey.parsedKey.type} SHA256:${identityKey.fingerprint}`);\n\n\t\t\t\tif (identityKey.agentSupport) {\n\t\t\t\t\treturn callback({\n\t\t\t\t\t\ttype: 'agent',\n\t\t\t\t\t\tusername: sshUser,\n\t\t\t\t\t\tagent: new class extends ssh2.OpenSSHAgent {\n\t\t\t\t\t\t\t// Only return the current key\n\t\t\t\t\t\t\toverride getIdentities(callback: (err: Error | undefined, publicKeys?: ParsedKey[]) => void): void {\n\t\t\t\t\t\t\t\tcallback(undefined, [identityKey.parsedKey]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}(this.sshAgentSock!)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (identityKey.isPrivate) {\n\t\t\t\t\treturn callback({\n\t\t\t\t\t\ttype: 'publickey',\n\t\t\t\t\t\tusername: sshUser,\n\t\t\t\t\t\tkey: identityKey.parsedKey\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!await fileExists(identityKey.filename)) {\n\t\t\t\t\t// Try next identity file\n\t\t\t\t\treturn callback(null as any);\n\t\t\t\t}\n\n\t\t\t\tconst keyBuffer = await fs.promises.readFile(identityKey.filename);\n\t\t\t\tlet result = ssh2.utils.parseKey(keyBuffer); // First try without passphrase\n\t\t\t\tif (result instanceof Error && result.message === 'Encrypted private OpenSSH key detected, but no passphrase given') {\n\t\t\t\t\tlet passphraseRetryCount = PASSPHRASE_RETRY_COUNT;\n\t\t\t\t\twhile (result instanceof Error && passphraseRetryCount > 0) {\n\t\t\t\t\t\tconst passphrase = await vscode.window.showInputBox({\n\t\t\t\t\t\t\ttitle: `Enter passphrase for ${identityKey.filename}`,\n\t\t\t\t\t\t\tpassword: true,\n\t\t\t\t\t\t\tignoreFocusOut: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!passphrase) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = ssh2.utils.parseKey(keyBuffer, passphrase);\n\t\t\t\t\t\tpassphraseRetryCount--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!result || result instanceof Error) {\n\t\t\t\t\t// Try next identity file\n\t\t\t\t\treturn callback(null as any);\n\t\t\t\t}\n\n\t\t\t\tconst key = Array.isArray(result) ? result[0] : result;\n\t\t\t\treturn callback({\n\t\t\t\t\ttype: 'publickey',\n\t\t\t\t\tusername: sshUser,\n\t\t\t\t\tkey\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (methodsLeft.includes('password') && passwordRetryCount > 0 && preferredAuthentications.includes('password')) {\n\t\t\t\tif (passwordRetryCount === PASSWORD_RETRY_COUNT) {\n\t\t\t\t\tthis.logger.info(`Trying password authentication`);\n\t\t\t\t}\n\n\t\t\t\tconst password = await vscode.window.showInputBox({\n\t\t\t\t\ttitle: `Enter password for ${sshUser}@${sshHostName}`,\n\t\t\t\t\tpassword: true,\n\t\t\t\t\tignoreFocusOut: true\n\t\t\t\t});\n\t\t\t\tpasswordRetryCount--;\n\n\t\t\t\treturn callback(password\n\t\t\t\t\t? {\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\tusername: sshUser,\n\t\t\t\t\t\tpassword\n\t\t\t\t\t}\n\t\t\t\t\t: false);\n\t\t\t}\n\t\t\tif (methodsLeft.includes('keyboard-interactive') && keyboardRetryCount > 0 && preferredAuthentications.includes('keyboard-interactive')) {\n\t\t\t\tif (keyboardRetryCount === PASSWORD_RETRY_COUNT) {\n\t\t\t\t\tthis.logger.info(`Trying keyboard-interactive authentication`);\n\t\t\t\t}\n\n\t\t\t\treturn callback({\n\t\t\t\t\ttype: 'keyboard-interactive',\n\t\t\t\t\tusername: sshUser,\n\t\t\t\t\tprompt: async (_name, _instructions, _instructionsLang, prompts, finish) => {\n\t\t\t\t\t\tconst responses: string[] = [];\n\t\t\t\t\t\tfor (const prompt of prompts) {\n\t\t\t\t\t\t\tconst response = await vscode.window.showInputBox({\n\t\t\t\t\t\t\t\ttitle: `(${sshUser}@${sshHostName}) ${prompt.prompt}`,\n\t\t\t\t\t\t\t\tpassword: !prompt.echo,\n\t\t\t\t\t\t\t\tignoreFocusOut: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (response === undefined) {\n\t\t\t\t\t\t\t\tkeyboardRetryCount = 0;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tresponses.push(response);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeyboardRetryCount--;\n\t\t\t\t\t\tfinish(responses);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcallback(false);\n\t\t};\n\t}\n\n\tdispose() {\n\t\tdisposeAll(this.tunnels);\n\t\t// If there's proxy connections then just close the parent connection\n\t\tif (this.proxyConnections.length) {\n\t\t\tthis.proxyConnections[0].close();\n\t\t} else {\n\t\t\tthis.sshConnection?.close();\n\t\t}\n\t\tthis.proxyCommandProcess?.kill();\n\t\tthis.labelFormatterDisposable?.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/commands.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport * as fs from 'fs';\nimport { getRemoteAuthority } from './authResolver';\nimport { getSSHConfigPath } from './ssh/sshConfig';\nimport { exists as fileExists } from './common/files';\nimport SSHDestination from './ssh/sshDestination';\n\nexport async function promptOpenRemoteSSHWindow(reuseWindow: boolean) {\n\tconst host = await vscode.window.showInputBox({\n\t\ttitle: 'Enter [user@]hostname[:port]'\n\t});\n\n\tif (!host) {\n\t\treturn;\n\t}\n\n\tconst sshDest = new SSHDestination(host);\n\topenRemoteSSHWindow(sshDest.toEncodedString(), reuseWindow);\n}\n\nexport function openRemoteSSHWindow(host: string, reuseWindow: boolean) {\n\tvscode.commands.executeCommand('vscode.newWindow', { remoteAuthority: getRemoteAuthority(host), reuseWindow });\n}\n\nexport function openRemoteSSHLocationWindow(host: string, path: string, reuseWindow: boolean) {\n\tvscode.commands.executeCommand('vscode.openFolder', vscode.Uri.from({ scheme: 'vscode-remote', authority: getRemoteAuthority(host), path }), { forceNewWindow: !reuseWindow });\n}\n\nexport async function addNewHost() {\n\tconst sshConfigPath = getSSHConfigPath();\n\tif (!await fileExists(sshConfigPath)) {\n\t\tawait fs.promises.appendFile(sshConfigPath, '');\n\t}\n\n\tawait vscode.commands.executeCommand('vscode.open', vscode.Uri.file(sshConfigPath), { preview: false });\n\n\tconst textEditor = vscode.window.activeTextEditor;\n\tif (textEditor?.document.uri.fsPath !== sshConfigPath) {\n\t\treturn;\n\t}\n\n\tconst textDocument = textEditor.document;\n\tconst lastLine = textDocument.lineAt(textDocument.lineCount - 1);\n\n\tif (!lastLine.isEmptyOrWhitespace) {\n\t\tawait textEditor.edit((editBuilder: vscode.TextEditorEdit) => {\n\t\t\teditBuilder.insert(lastLine.range.end, '\\n');\n\t\t});\n\t}\n\n\tconst snippet = '\\nHost ${1:dev}\\n\\tHostName ${2:dev.example.com}\\n\\tUser ${3:john}';\n\tawait textEditor.insertSnippet(\n\t\tnew vscode.SnippetString(snippet),\n\t\tnew vscode.Position(textDocument.lineCount, 0)\n\t);\n}\n\nexport async function openSSHConfigFile() {\n\tconst sshConfigPath = getSSHConfigPath();\n\tif (!await fileExists(sshConfigPath)) {\n\t\tawait fs.promises.appendFile(sshConfigPath, '');\n\t}\n\tvscode.commands.executeCommand('vscode.open', vscode.Uri.file(sshConfigPath));\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/common/disposable.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\n\nexport function disposeAll(disposables: vscode.Disposable[]): void {\n\twhile (disposables.length) {\n\t\tconst item = disposables.pop();\n\t\tif (item) {\n\t\t\titem.dispose();\n\t\t}\n\t}\n}\n\nexport abstract class Disposable {\n\tprivate _isDisposed = false;\n\n\tprotected _disposables: vscode.Disposable[] = [];\n\n\tpublic dispose(): any {\n\t\tif (this._isDisposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDisposed = true;\n\t\tdisposeAll(this._disposables);\n\t}\n\n\tprotected _register<T extends vscode.Disposable>(value: T): T {\n\t\tif (this._isDisposed) {\n\t\t\tvalue.dispose();\n\t\t} else {\n\t\t\tthis._disposables.push(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected get isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/common/files.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as fs from 'fs';\nimport * as os from 'os';\n\nconst homeDir = os.homedir();\n\nexport async function exists(path: string) {\n\ttry {\n\t\tawait fs.promises.access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function untildify(path: string) {\n\treturn path.replace(/^~(?=$|\\/|\\\\)/, homeDir);\n}\n\nexport function normalizeToSlash(path: string) {\n\treturn path.replace(/\\\\/g, '/');\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/common/logger.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\n\ntype LogLevel = 'Trace' | 'Info' | 'Error';\n\nexport default class Log {\n\tprivate output: vscode.OutputChannel;\n\n\tconstructor(name: string) {\n\t\tthis.output = vscode.window.createOutputChannel(name);\n\t}\n\n\tprivate data2String(data: any): string {\n\t\tif (data instanceof Error) {\n\t\t\treturn data.stack || data.message;\n\t\t}\n\t\tif (data.success === false && data.message) {\n\t\t\treturn data.message;\n\t\t}\n\t\treturn data.toString();\n\t}\n\n\tpublic trace(message: string, data?: any): void {\n\t\tthis.logLevel('Trace', message, data);\n\t}\n\n\tpublic info(message: string, data?: any): void {\n\t\tthis.logLevel('Info', message, data);\n\t}\n\n\tpublic error(message: string, data?: any): void {\n\t\tthis.logLevel('Error', message, data);\n\t}\n\n\tpublic logLevel(level: LogLevel, message: string, data?: any): void {\n\t\tthis.output.appendLine(`[${level}  - ${this.now()}] ${message}`);\n\t\tif (data) {\n\t\t\tthis.output.appendLine(this.data2String(data));\n\t\t}\n\t}\n\n\tprivate now(): string {\n\t\tconst now = new Date();\n\t\treturn padLeft(now.getUTCHours() + '', 2, '0')\n\t\t\t+ ':' + padLeft(now.getMinutes() + '', 2, '0')\n\t\t\t+ ':' + padLeft(now.getUTCSeconds() + '', 2, '0') + '.' + now.getMilliseconds();\n\t}\n\n\tpublic show() {\n\t\tthis.output.show();\n\t}\n\n\tpublic dispose() {\n\t\tthis.output.dispose();\n\t}\n}\n\nfunction padLeft(s: string, n: number, pad = ' ') {\n\treturn pad.repeat(Math.max(0, n - s.length)) + s;\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/common/platform.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport const isWindows = process.platform === 'win32';\nexport const isMacintosh = process.platform === 'darwin';\nexport const isLinux = process.platform === 'linux';\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/common/ports.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as net from 'net';\n\n/**\n * Finds a random unused port assigned by the operating system. Will reject in case no free port can be found.\n */\nexport function findRandomPort(): Promise<number> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst server = net.createServer({ pauseOnConnect: true });\n\t\tserver.on('error', reject);\n\t\tserver.on('listening', () => {\n\t\t\tconst port = (server.address() as net.AddressInfo).port;\n\t\t\tserver.close(() => resolve(port));\n\t\t});\n\t\tserver.listen(0, '127.0.0.1');\n\t});\n}\n\n/**\n * Given a start point and a max number of retries, will find a port that\n * is openable. Will return 0 in case no free port can be found.\n */\nexport function findFreePort(startPort: number, giveUpAfter: number, timeout: number, stride = 1): Promise<number> {\n\tlet done = false;\n\n\treturn new Promise(resolve => {\n\t\tconst timeoutHandle = setTimeout(() => {\n\t\t\tif (!done) {\n\t\t\t\tdone = true;\n\t\t\t\treturn resolve(0);\n\t\t\t}\n\t\t}, timeout);\n\n\t\tdoFindFreePort(startPort, giveUpAfter, stride, (port) => {\n\t\t\tif (!done) {\n\t\t\t\tdone = true;\n\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t\treturn resolve(port);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction doFindFreePort(startPort: number, giveUpAfter: number, stride: number, clb: (port: number) => void): void {\n\tif (giveUpAfter === 0) {\n\t\treturn clb(0);\n\t}\n\n\tconst client = new net.Socket();\n\n\t// If we can connect to the port it means the port is already taken so we continue searching\n\tclient.once('connect', () => {\n\t\tdispose(client);\n\n\t\treturn doFindFreePort(startPort + stride, giveUpAfter - 1, stride, clb);\n\t});\n\n\tclient.once('data', () => {\n\t\t// this listener is required since node.js 8.x\n\t});\n\n\tclient.once('error', (err: Error & { code?: string }) => {\n\t\tdispose(client);\n\n\t\t// If we receive any non ECONNREFUSED error, it means the port is used but we cannot connect\n\t\tif (err.code !== 'ECONNREFUSED') {\n\t\t\treturn doFindFreePort(startPort + stride, giveUpAfter - 1, stride, clb);\n\t\t}\n\n\t\t// Otherwise it means the port is free to use!\n\t\treturn clb(startPort);\n\t});\n\n\tclient.connect(startPort, '127.0.0.1');\n}\n\n/**\n * Uses listen instead of connect. Is faster, but if there is another listener on 0.0.0.0 then this will take 127.0.0.1 from that listener.\n */\nexport function findFreePortFaster(startPort: number, giveUpAfter: number, timeout: number): Promise<number> {\n\tlet resolved = false;\n\tlet timeoutHandle: NodeJS.Timeout | undefined = undefined;\n\tlet countTried = 1;\n\tconst server = net.createServer({ pauseOnConnect: true });\n\tfunction doResolve(port: number, resolve: (port: number) => void) {\n\t\tif (!resolved) {\n\t\t\tresolved = true;\n\t\t\tserver.removeAllListeners();\n\t\t\tserver.close();\n\t\t\tif (timeoutHandle) {\n\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t}\n\t\t\tresolve(port);\n\t\t}\n\t}\n\treturn new Promise<number>(resolve => {\n\t\ttimeoutHandle = setTimeout(() => {\n\t\t\tdoResolve(0, resolve);\n\t\t}, timeout);\n\n\t\tserver.on('listening', () => {\n\t\t\tdoResolve(startPort, resolve);\n\t\t});\n\t\tserver.on('error', err => {\n\t\t\tif (err && ((<any>err).code === 'EADDRINUSE' || (<any>err).code === 'EACCES') && (countTried < giveUpAfter)) {\n\t\t\t\tstartPort++;\n\t\t\t\tcountTried++;\n\t\t\t\tserver.listen(startPort, '127.0.0.1');\n\t\t\t} else {\n\t\t\t\tdoResolve(0, resolve);\n\t\t\t}\n\t\t});\n\t\tserver.on('close', () => {\n\t\t\tdoResolve(0, resolve);\n\t\t});\n\t\tserver.listen(startPort, '127.0.0.1');\n\t});\n}\n\nfunction dispose(socket: net.Socket): void {\n\ttry {\n\t\tsocket.removeAllListeners('connect');\n\t\tsocket.removeAllListeners('error');\n\t\tsocket.end();\n\t\tsocket.destroy();\n\t\tsocket.unref();\n\t} catch (error) {\n\t\tconsole.error(error); // otherwise this error would get lost in the callback chain\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport Log from './common/logger';\nimport { RemoteSSHResolver, REMOTE_SSH_AUTHORITY } from './authResolver';\nimport { openSSHConfigFile, promptOpenRemoteSSHWindow } from './commands';\nimport { HostTreeDataProvider } from './hostTreeView';\nimport { getRemoteWorkspaceLocationData, RemoteLocationHistory } from './remoteLocationHistory';\n\nexport async function activate(context: vscode.ExtensionContext) {\n\tconst logger = new Log('Remote - SSH');\n\tcontext.subscriptions.push(logger);\n\n\tconst remoteSSHResolver = new RemoteSSHResolver(context, logger);\n\tcontext.subscriptions.push(vscode.workspace.registerRemoteAuthorityResolver(REMOTE_SSH_AUTHORITY, remoteSSHResolver));\n\tcontext.subscriptions.push(remoteSSHResolver);\n\n\tconst locationHistory = new RemoteLocationHistory(context);\n\tconst locationData = getRemoteWorkspaceLocationData();\n\tif (locationData) {\n\t\tawait locationHistory.addLocation(locationData[0], locationData[1]);\n\t}\n\n\tconst hostTreeDataProvider = new HostTreeDataProvider(locationHistory);\n\tcontext.subscriptions.push(vscode.window.createTreeView('sshHosts', { treeDataProvider: hostTreeDataProvider }));\n\tcontext.subscriptions.push(hostTreeDataProvider);\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotessh.openEmptyWindow', () => promptOpenRemoteSSHWindow(false)));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotessh.openEmptyWindowInCurrentWindow', () => promptOpenRemoteSSHWindow(true)));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotessh.openConfigFile', () => openSSHConfigFile()));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotessh.showLog', () => logger.show()));\n}\n\nexport function deactivate() {\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/hostTreeView.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport * as path from 'path';\nimport SSHConfiguration, { getSSHConfigPath } from './ssh/sshConfig';\nimport { RemoteLocationHistory } from './remoteLocationHistory';\nimport { Disposable } from './common/disposable';\nimport { addNewHost, openRemoteSSHLocationWindow, openRemoteSSHWindow, openSSHConfigFile } from './commands';\nimport SSHDestination from './ssh/sshDestination';\n\nclass HostItem {\n\tconstructor(\n\t\tpublic hostname: string,\n\t\tpublic locations: string[]\n\t) {\n\t}\n}\n\nclass HostLocationItem {\n\tconstructor(\n\t\tpublic path: string,\n\t\tpublic hostname: string\n\t) {\n\t}\n}\n\ntype DataTreeItem = HostItem | HostLocationItem;\n\nexport class HostTreeDataProvider extends Disposable implements vscode.TreeDataProvider<DataTreeItem> {\n\n\tprivate readonly _onDidChangeTreeData = this._register(new vscode.EventEmitter<DataTreeItem | DataTreeItem[] | void>());\n\tpublic readonly onDidChangeTreeData = this._onDidChangeTreeData.event;\n\n\tconstructor(\n\t\tprivate locationHistory: RemoteLocationHistory\n\t) {\n\t\tsuper();\n\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.add', () => addNewHost()));\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.configure', () => openSSHConfigFile()));\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.refresh', () => this.refresh()));\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.emptyWindowInNewWindow', e => this.openRemoteSSHWindow(e, false)));\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.emptyWindowInCurrentWindow', e => this.openRemoteSSHWindow(e, true)));\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.reopenFolderInNewWindow', e => this.openRemoteSSHLocationWindow(e, false)));\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.reopenFolderInCurrentWindow', e => this.openRemoteSSHLocationWindow(e, true)));\n\t\tthis._register(vscode.commands.registerCommand('openremotessh.explorer.deleteFolderHistoryItem', e => this.deleteHostLocation(e)));\n\n\t\tthis._register(vscode.workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('remote.SSH.configFile')) {\n\t\t\t\tthis.refresh();\n\t\t\t}\n\t\t}));\n\t\tthis._register(vscode.workspace.onDidSaveTextDocument(e => {\n\t\t\tif (e.uri.fsPath === getSSHConfigPath()) {\n\t\t\t\tthis.refresh();\n\t\t\t}\n\t\t}));\n\t}\n\n\tgetTreeItem(element: DataTreeItem): vscode.TreeItem {\n\t\tif (element instanceof HostLocationItem) {\n\t\t\tconst label = path.posix.basename(element.path).replace(/\\.code-workspace$/, ' (Workspace)');\n\t\t\tconst treeItem = new vscode.TreeItem(label);\n\t\t\ttreeItem.description = path.posix.dirname(element.path);\n\t\t\ttreeItem.iconPath = new vscode.ThemeIcon('folder');\n\t\t\ttreeItem.contextValue = 'openremotessh.explorer.folder';\n\t\t\treturn treeItem;\n\t\t}\n\n\t\tconst treeItem = new vscode.TreeItem(element.hostname);\n\t\ttreeItem.collapsibleState = element.locations.length ? vscode.TreeItemCollapsibleState.Collapsed : vscode.TreeItemCollapsibleState.None;\n\t\ttreeItem.iconPath = new vscode.ThemeIcon('vm');\n\t\ttreeItem.contextValue = 'openremotessh.explorer.host';\n\t\treturn treeItem;\n\t}\n\n\tasync getChildren(element?: HostItem): Promise<DataTreeItem[]> {\n\t\tif (!element) {\n\t\t\tconst sshConfigFile = await SSHConfiguration.loadFromFS();\n\t\t\tconst hosts = sshConfigFile.getAllConfiguredHosts();\n\t\t\treturn hosts.map(hostname => new HostItem(hostname, this.locationHistory.getHistory(hostname)));\n\t\t}\n\t\tif (element instanceof HostItem) {\n\t\t\treturn element.locations.map(location => new HostLocationItem(location, element.hostname));\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate refresh() {\n\t\tthis._onDidChangeTreeData.fire();\n\t}\n\n\tprivate async deleteHostLocation(element: HostLocationItem) {\n\t\tawait this.locationHistory.removeLocation(element.hostname, element.path);\n\t\tthis.refresh();\n\t}\n\n\tprivate async openRemoteSSHWindow(element: HostItem, reuseWindow: boolean) {\n\t\tconst sshDest = new SSHDestination(element.hostname);\n\t\topenRemoteSSHWindow(sshDest.toEncodedString(), reuseWindow);\n\t}\n\n\tprivate async openRemoteSSHLocationWindow(element: HostLocationItem, reuseWindow: boolean) {\n\t\tconst sshDest = new SSHDestination(element.hostname);\n\t\topenRemoteSSHLocationWindow(sshDest.toEncodedString(), element.path, reuseWindow);\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/remoteLocationHistory.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport { REMOTE_SSH_AUTHORITY } from './authResolver';\nimport SSHDestination from './ssh/sshDestination';\n\nexport class RemoteLocationHistory {\n\tprivate static STORAGE_KEY = 'remoteLocationHistory_v0';\n\n\tprivate remoteLocationHistory: Record<string, string[]> = {};\n\n\tconstructor(private context: vscode.ExtensionContext) {\n\t\t// context.globalState.update(RemoteLocationHistory.STORAGE_KEY, undefined);\n\t\tthis.remoteLocationHistory = context.globalState.get(RemoteLocationHistory.STORAGE_KEY) || {};\n\t}\n\n\tgetHistory(host: string): string[] {\n\t\treturn this.remoteLocationHistory[host] || [];\n\t}\n\n\tasync addLocation(host: string, path: string) {\n\t\tconst hostLocations = this.remoteLocationHistory[host] || [];\n\t\tif (!hostLocations.includes(path)) {\n\t\t\thostLocations.unshift(path);\n\t\t\tthis.remoteLocationHistory[host] = hostLocations;\n\n\t\t\tawait this.context.globalState.update(RemoteLocationHistory.STORAGE_KEY, this.remoteLocationHistory);\n\t\t}\n\t}\n\n\tasync removeLocation(host: string, path: string) {\n\t\tlet hostLocations = this.remoteLocationHistory[host] || [];\n\t\thostLocations = hostLocations.filter(l => l !== path);\n\t\tthis.remoteLocationHistory[host] = hostLocations;\n\n\t\tawait this.context.globalState.update(RemoteLocationHistory.STORAGE_KEY, this.remoteLocationHistory);\n\t}\n}\n\nexport function getRemoteWorkspaceLocationData(): [string, string] | undefined {\n\tlet location = vscode.workspace.workspaceFile;\n\tif (location && location.scheme === 'vscode-remote' && location.authority.startsWith(REMOTE_SSH_AUTHORITY) && location.path.endsWith('.code-workspace')) {\n\t\tconst [, host] = location.authority.split('+');\n\t\tconst sshDest = SSHDestination.parseEncoded(host);\n\t\treturn [sshDest.hostname, location.path];\n\t}\n\n\tlocation = vscode.workspace.workspaceFolders?.[0].uri;\n\tif (location && location.scheme === 'vscode-remote' && location.authority.startsWith(REMOTE_SSH_AUTHORITY)) {\n\t\tconst [, host] = location.authority.split('+');\n\t\tconst sshDest = SSHDestination.parseEncoded(host);\n\t\treturn [sshDest.hostname, location.path];\n\t}\n\n\treturn undefined;\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/serverConfig.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as vscode from 'vscode';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nlet vscodeProductJson: any;\nasync function getVSCodeProductJson() {\n\tif (!vscodeProductJson) {\n\t\tconst productJsonStr = await fs.promises.readFile(path.join(vscode.env.appRoot, 'product.json'), 'utf8');\n\t\tvscodeProductJson = JSON.parse(productJsonStr);\n\t}\n\n\treturn vscodeProductJson;\n}\n\nexport interface IServerConfig {\n\tversion: string;\n\tcommit: string;\n\tquality: string;\n\trelease?: string; // void-like specific\n\tserverApplicationName: string;\n\tserverDataFolderName: string;\n\tserverDownloadUrlTemplate?: string; // void-like specific\n}\n\nexport async function getVSCodeServerConfig(): Promise<IServerConfig> {\n\tconst productJson = await getVSCodeProductJson();\n\n\tconst customServerBinaryName = vscode.workspace.getConfiguration('remote.SSH.experimental').get<string>('serverBinaryName', '');\n\n\treturn {\n\t\tversion: vscode.version.replace('-insider', ''),\n\t\tcommit: productJson.commit,\n\t\tquality: productJson.quality,\n\t\trelease: productJson.release,\n\t\tserverApplicationName: customServerBinaryName || productJson.serverApplicationName,\n\t\tserverDataFolderName: productJson.serverDataFolderName,\n\t\tserverDownloadUrlTemplate: productJson.serverDownloadUrlTemplate,\n\t};\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/serverSetup.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as crypto from 'crypto';\nimport Log from './common/logger';\nimport { getVSCodeServerConfig } from './serverConfig';\nimport SSHConnection from './ssh/sshConnection';\n\nexport interface ServerInstallOptions {\n\tid: string;\n\tquality: string;\n\tcommit: string;\n\tversion: string;\n\trelease?: string; // void specific\n\textensionIds: string[];\n\tenvVariables: string[];\n\tuseSocketPath: boolean;\n\tserverApplicationName: string;\n\tserverDataFolderName: string;\n\tserverDownloadUrlTemplate: string;\n}\n\nexport interface ServerInstallResult {\n\texitCode: number;\n\tlisteningOn: number | string;\n\tconnectionToken: string;\n\tlogFile: string;\n\tosReleaseId: string;\n\tarch: string;\n\tplatform: string;\n\ttmpDir: string;\n\t[key: string]: any;\n}\n\nexport class ServerInstallError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n\nconst DEFAULT_DOWNLOAD_URL_TEMPLATE = 'https://github.com/voideditor/binaries/releases/download/${version}/void-reh-${os}-${arch}-${version}.tar.gz';\n\nexport async function installCodeServer(conn: SSHConnection, serverDownloadUrlTemplate: string | undefined, extensionIds: string[], envVariables: string[], platform: string | undefined, useSocketPath: boolean, logger: Log): Promise<ServerInstallResult> {\n\tlet shell = 'powershell';\n\n\t// detect platform and shell for windows\n\tif (!platform || platform === 'windows') {\n\t\tconst result = await conn.exec('uname -s');\n\n\t\tif (result.stdout) {\n\t\t\tif (result.stdout.includes('windows32')) {\n\t\t\t\tplatform = 'windows';\n\t\t\t} else if (result.stdout.includes('MINGW64')) {\n\t\t\t\tplatform = 'windows';\n\t\t\t\tshell = 'bash';\n\t\t\t}\n\t\t} else if (result.stderr) {\n\t\t\tif (result.stderr.includes('FullyQualifiedErrorId : CommandNotFoundException')) {\n\t\t\t\tplatform = 'windows';\n\t\t\t}\n\n\t\t\tif (result.stderr.includes('is not recognized as an internal or external command')) {\n\t\t\t\tplatform = 'windows';\n\t\t\t\tshell = 'cmd';\n\t\t\t}\n\t\t}\n\n\t\tif (platform) {\n\t\t\tlogger.trace(`Detected platform: ${platform}, ${shell}`);\n\t\t}\n\t}\n\n\tconst scriptId = crypto.randomBytes(12).toString('hex');\n\n\tconst vscodeServerConfig = await getVSCodeServerConfig();\n\tconst installOptions: ServerInstallOptions = {\n\t\tid: scriptId,\n\t\tversion: vscodeServerConfig.version,\n\t\tcommit: vscodeServerConfig.commit,\n\t\tquality: vscodeServerConfig.quality,\n\t\trelease: vscodeServerConfig.release,\n\t\textensionIds,\n\t\tenvVariables,\n\t\tuseSocketPath,\n\t\tserverApplicationName: vscodeServerConfig.serverApplicationName,\n\t\tserverDataFolderName: vscodeServerConfig.serverDataFolderName,\n\t\tserverDownloadUrlTemplate: serverDownloadUrlTemplate ?? vscodeServerConfig.serverDownloadUrlTemplate ?? DEFAULT_DOWNLOAD_URL_TEMPLATE,\n\t};\n\n\tlet commandOutput: { stdout: string; stderr: string };\n\tif (platform === 'windows') {\n\t\tconst installServerScript = generatePowerShellInstallScript(installOptions);\n\n\t\tlogger.trace('Server install command:', installServerScript);\n\n\t\tconst installDir = `$HOME\\\\${vscodeServerConfig.serverDataFolderName}\\\\install`;\n\t\tconst installScript = `${installDir}\\\\${vscodeServerConfig.commit}.ps1`;\n\t\tconst endRegex = new RegExp(`${scriptId}: end`);\n\t\t// investigate if it's possible to use `-EncodedCommand` flag\n\t\t// https://devblogs.microsoft.com/powershell/invoking-powershell-with-complex-expressions-using-scriptblocks/\n\t\tlet command = '';\n\t\tif (shell === 'powershell') {\n\t\t\tcommand = `md -Force ${installDir}; echo @'\\n${installServerScript}\\n'@ | Set-Content ${installScript}; powershell -ExecutionPolicy ByPass -File \"${installScript}\"`;\n\t\t} else if (shell === 'bash') {\n\t\t\tcommand = `mkdir -p ${installDir.replace(/\\\\/g, '/')} && echo '\\n${installServerScript.replace(/'/g, '\\'\"\\'\"\\'')}\\n' > ${installScript.replace(/\\\\/g, '/')} && powershell -ExecutionPolicy ByPass -File \"${installScript}\"`;\n\t\t} else if (shell === 'cmd') {\n\t\t\tconst script = installServerScript.trim()\n\t\t\t\t// remove comments\n\t\t\t\t.replace(/^#.*$/gm, '')\n\t\t\t\t// remove empty lines\n\t\t\t\t.replace(/\\n{2,}/gm, '\\n')\n\t\t\t\t// remove leading spaces\n\t\t\t\t.replace(/^\\s*/gm, '')\n\t\t\t\t// escape double quotes (from powershell/cmd)\n\t\t\t\t.replace(/\"/g, '\"\"\"')\n\t\t\t\t// escape single quotes (from cmd)\n\t\t\t\t.replace(/'/g, `''`)\n\t\t\t\t// escape redirect (from cmd)\n\t\t\t\t.replace(/>/g, `^>`)\n\t\t\t\t// escape new lines (from powershell/cmd)\n\t\t\t\t.replace(/\\n/g, '\\'`n\\'');\n\n\t\t\tcommand = `powershell \"md -Force ${installDir}\" && powershell \"echo '${script}'\" > ${installScript.replace('$HOME', '%USERPROFILE%')} && powershell -ExecutionPolicy ByPass -File \"${installScript.replace('$HOME', '%USERPROFILE%')}\"`;\n\n\t\t\tlogger.trace('Command length (8191 max):', command.length);\n\n\t\t\tif (command.length > 8191) {\n\t\t\t\tthrow new ServerInstallError(`Command line too long`);\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new ServerInstallError(`Not supported shell: ${shell}`);\n\t\t}\n\n\t\tcommandOutput = await conn.execPartial(command, (stdout: string) => endRegex.test(stdout));\n\t} else {\n\t\tconst installServerScript = generateBashInstallScript(installOptions);\n\n\t\tlogger.trace('Server install command:', installServerScript);\n\t\t// Fish shell does not support heredoc so let's workaround it using -c option,\n\t\t// also replace single quotes (') within the script with ('\\'') as there's no quoting within single quotes, see https://unix.stackexchange.com/a/24676\n\t\tcommandOutput = await conn.exec(`bash -c '${installServerScript.replace(/'/g, `'\\\\''`)}'`);\n\t}\n\n\tif (commandOutput.stderr) {\n\t\tlogger.trace('Server install command stderr:', commandOutput.stderr);\n\t}\n\tlogger.trace('Server install command stdout:', commandOutput.stdout);\n\n\tconst resultMap = parseServerInstallOutput(commandOutput.stdout, scriptId);\n\tif (!resultMap) {\n\t\tthrow new ServerInstallError(`Failed parsing install script output`);\n\t}\n\n\tconst exitCode = parseInt(resultMap.exitCode, 10);\n\tif (exitCode !== 0) {\n\t\tthrow new ServerInstallError(`Couldn't install vscode server on remote server, install script returned non-zero exit status`);\n\t}\n\n\tconst listeningOn = resultMap.listeningOn.match(/^\\d+$/)\n\t\t? parseInt(resultMap.listeningOn, 10)\n\t\t: resultMap.listeningOn;\n\n\tconst remoteEnvVars = Object.fromEntries(Object.entries(resultMap).filter(([key,]) => envVariables.includes(key)));\n\n\treturn {\n\t\texitCode,\n\t\tlisteningOn,\n\t\tconnectionToken: resultMap.connectionToken,\n\t\tlogFile: resultMap.logFile,\n\t\tosReleaseId: resultMap.osReleaseId,\n\t\tarch: resultMap.arch,\n\t\tplatform: resultMap.platform,\n\t\ttmpDir: resultMap.tmpDir,\n\t\t...remoteEnvVars\n\t};\n}\n\nfunction parseServerInstallOutput(str: string, scriptId: string): { [k: string]: string } | undefined {\n\tconst startResultStr = `${scriptId}: start`;\n\tconst endResultStr = `${scriptId}: end`;\n\n\tconst startResultIdx = str.indexOf(startResultStr);\n\tif (startResultIdx < 0) {\n\t\treturn undefined;\n\t}\n\n\tconst endResultIdx = str.indexOf(endResultStr, startResultIdx + startResultStr.length);\n\tif (endResultIdx < 0) {\n\t\treturn undefined;\n\t}\n\n\tconst installResult = str.substring(startResultIdx + startResultStr.length, endResultIdx);\n\n\tconst resultMap: { [k: string]: string } = {};\n\tconst resultArr = installResult.split(/\\r?\\n/);\n\tfor (const line of resultArr) {\n\t\tconst [key, value] = line.split('==');\n\t\tresultMap[key] = value;\n\t}\n\n\treturn resultMap;\n}\n\nfunction generateBashInstallScript({ id, quality, version, commit, release, extensionIds, envVariables, useSocketPath, serverApplicationName, serverDataFolderName, serverDownloadUrlTemplate }: ServerInstallOptions) {\n\tconst extensions = extensionIds.map(id => '--install-extension ' + id).join(' ');\n\treturn `\n# Server installation script\n\nTMP_DIR=\"\\${XDG_RUNTIME_DIR:-\"/tmp\"}\"\n\nDISTRO_VERSION=\"${version}\"\nDISTRO_COMMIT=\"${commit}\"\nDISTRO_QUALITY=\"${quality}\"\nDISTRO_VOID_RELEASE=\"${release ?? ''}\"\n\nSERVER_APP_NAME=\"${serverApplicationName}\"\nSERVER_INITIAL_EXTENSIONS=\"${extensions}\"\nSERVER_LISTEN_FLAG=\"${useSocketPath ? `--socket-path=\"$TMP_DIR/vscode-server-sock-${crypto.randomUUID()}\"` : '--port=0'}\"\nSERVER_DATA_DIR=\"$HOME/${serverDataFolderName}\"\nSERVER_DIR=\"$SERVER_DATA_DIR/bin/$DISTRO_COMMIT\"\nSERVER_SCRIPT=\"$SERVER_DIR/bin/$SERVER_APP_NAME\"\nSERVER_LOGFILE=\"$SERVER_DATA_DIR/.$DISTRO_COMMIT.log\"\nSERVER_PIDFILE=\"$SERVER_DATA_DIR/.$DISTRO_COMMIT.pid\"\nSERVER_TOKENFILE=\"$SERVER_DATA_DIR/.$DISTRO_COMMIT.token\"\nSERVER_ARCH=\nSERVER_CONNECTION_TOKEN=\nSERVER_DOWNLOAD_URL=\n\nLISTENING_ON=\nOS_RELEASE_ID=\nARCH=\nPLATFORM=\n\n# Mimic output from logs of remote-ssh extension\nprint_install_results_and_exit() {\n    echo \"${id}: start\"\n    echo \"exitCode==$1==\"\n    echo \"listeningOn==$LISTENING_ON==\"\n    echo \"connectionToken==$SERVER_CONNECTION_TOKEN==\"\n    echo \"logFile==$SERVER_LOGFILE==\"\n    echo \"osReleaseId==$OS_RELEASE_ID==\"\n    echo \"arch==$ARCH==\"\n    echo \"platform==$PLATFORM==\"\n    echo \"tmpDir==$TMP_DIR==\"\n    ${envVariables.map(envVar => `echo \"${envVar}==$${envVar}==\"`).join('\\n')}\n    echo \"${id}: end\"\n    exit 0\n}\n\n# Check if platform is supported\nKERNEL=\"$(uname -s)\"\ncase $KERNEL in\n    Darwin)\n        PLATFORM=\"darwin\"\n        ;;\n    Linux)\n        PLATFORM=\"linux\"\n        ;;\n    FreeBSD)\n        PLATFORM=\"freebsd\"\n        ;;\n    DragonFly)\n        PLATFORM=\"dragonfly\"\n        ;;\n    *)\n        echo \"Error platform not supported: $KERNEL\"\n        print_install_results_and_exit 1\n        ;;\nesac\n\n# Check machine architecture\nARCH=\"$(uname -m)\"\ncase $ARCH in\n    x86_64 | amd64)\n        SERVER_ARCH=\"x64\"\n        ;;\n    armv7l | armv8l)\n        SERVER_ARCH=\"armhf\"\n        ;;\n    arm64 | aarch64)\n        SERVER_ARCH=\"arm64\"\n        ;;\n    ppc64le)\n        SERVER_ARCH=\"ppc64le\"\n        ;;\n    riscv64)\n        SERVER_ARCH=\"riscv64\"\n        ;;\n    loongarch64)\n        SERVER_ARCH=\"loong64\"\n        ;;\n    s390x)\n        SERVER_ARCH=\"s390x\"\n        ;;\n    *)\n        echo \"Error architecture not supported: $ARCH\"\n        print_install_results_and_exit 1\n        ;;\nesac\n\n# https://www.freedesktop.org/software/systemd/man/os-release.html\nOS_RELEASE_ID=\"$(grep -i '^ID=' /etc/os-release 2>/dev/null | sed 's/^ID=//gi' | sed 's/\"//g')\"\nif [[ -z $OS_RELEASE_ID ]]; then\n    OS_RELEASE_ID=\"$(grep -i '^ID=' /usr/lib/os-release 2>/dev/null | sed 's/^ID=//gi' | sed 's/\"//g')\"\n    if [[ -z $OS_RELEASE_ID ]]; then\n        OS_RELEASE_ID=\"unknown\"\n    fi\nfi\n\n# Create installation folder\nif [[ ! -d $SERVER_DIR ]]; then\n    mkdir -p $SERVER_DIR\n    if (( $? > 0 )); then\n        echo \"Error creating server install directory\"\n        print_install_results_and_exit 1\n    fi\nfi\n\n# adjust platform for void download, if needed\nif [[ $OS_RELEASE_ID = alpine ]]; then\n    PLATFORM=$OS_RELEASE_ID\nfi\n\nSERVER_DOWNLOAD_URL=\"$(echo \"${serverDownloadUrlTemplate.replace(/\\$\\{/g, '\\\\${')}\" | sed \"s/\\\\\\${quality}/$DISTRO_QUALITY/g\" | sed \"s/\\\\\\${version}/$DISTRO_VERSION/g\" | sed \"s/\\\\\\${commit}/$DISTRO_COMMIT/g\" | sed \"s/\\\\\\${os}/$PLATFORM/g\" | sed \"s/\\\\\\${arch}/$SERVER_ARCH/g\" | sed \"s/\\\\\\${release}/$DISTRO_VOID_RELEASE/g\")\"\n\n# Check if server script is already installed\nif [[ ! -f $SERVER_SCRIPT ]]; then\n    case \"$PLATFORM\" in\n        darwin | linux | alpine )\n            ;;\n        *)\n            echo \"Error '$PLATFORM' needs manual installation of remote extension host\"\n            print_install_results_and_exit 1\n            ;;\n    esac\n\n    pushd $SERVER_DIR > /dev/null\n\n    if [[ ! -z $(which wget) ]]; then\n        wget --tries=3 --timeout=10 --continue --no-verbose -O vscode-server.tar.gz $SERVER_DOWNLOAD_URL\n    elif [[ ! -z $(which curl) ]]; then\n        curl --retry 3 --connect-timeout 10 --location --show-error --silent --output vscode-server.tar.gz $SERVER_DOWNLOAD_URL\n    else\n        echo \"Error no tool to download server binary\"\n        print_install_results_and_exit 1\n    fi\n\n    if (( $? > 0 )); then\n        echo \"Error downloading server from $SERVER_DOWNLOAD_URL\"\n        print_install_results_and_exit 1\n    fi\n\n    tar -xf vscode-server.tar.gz --strip-components 1\n    if (( $? > 0 )); then\n        echo \"Error while extracting server contents\"\n        print_install_results_and_exit 1\n    fi\n\n    if [[ ! -f $SERVER_SCRIPT ]]; then\n        echo \"Error server contents are corrupted\"\n        print_install_results_and_exit 1\n    fi\n\n    rm -f vscode-server.tar.gz\n\n    popd > /dev/null\nelse\n    echo \"Server script already installed in $SERVER_SCRIPT\"\nfi\n\n# Try to find if server is already running\nif [[ -f $SERVER_PIDFILE ]]; then\n    SERVER_PID=\"$(cat $SERVER_PIDFILE)\"\n    SERVER_RUNNING_PROCESS=\"$(ps -o pid,args -p $SERVER_PID | grep $SERVER_SCRIPT)\"\nelse\n    SERVER_RUNNING_PROCESS=\"$(ps -o pid,args -A | grep $SERVER_SCRIPT | grep -v grep)\"\nfi\n\nif [[ -z $SERVER_RUNNING_PROCESS ]]; then\n    if [[ -f $SERVER_LOGFILE ]]; then\n        rm $SERVER_LOGFILE\n    fi\n    if [[ -f $SERVER_TOKENFILE ]]; then\n        rm $SERVER_TOKENFILE\n    fi\n\n    touch $SERVER_TOKENFILE\n    chmod 600 $SERVER_TOKENFILE\n    SERVER_CONNECTION_TOKEN=\"${crypto.randomUUID()}\"\n    echo $SERVER_CONNECTION_TOKEN > $SERVER_TOKENFILE\n\n    $SERVER_SCRIPT --start-server --host=127.0.0.1 $SERVER_LISTEN_FLAG $SERVER_INITIAL_EXTENSIONS --connection-token-file $SERVER_TOKENFILE --telemetry-level off --enable-remote-auto-shutdown --accept-server-license-terms &> $SERVER_LOGFILE &\n    echo $! > $SERVER_PIDFILE\nelse\n    echo \"Server script is already running $SERVER_SCRIPT\"\nfi\n\nif [[ -f $SERVER_TOKENFILE ]]; then\n    SERVER_CONNECTION_TOKEN=\"$(cat $SERVER_TOKENFILE)\"\nelse\n    echo \"Error server token file not found $SERVER_TOKENFILE\"\n    print_install_results_and_exit 1\nfi\n\nif [[ -f $SERVER_LOGFILE ]]; then\n    for i in {1..5}; do\n        LISTENING_ON=\"$(cat $SERVER_LOGFILE | grep -E 'Extension host agent listening on .+' | sed 's/Extension host agent listening on //')\"\n        if [[ -n $LISTENING_ON ]]; then\n            break\n        fi\n        sleep 0.5\n    done\n\n    if [[ -z $LISTENING_ON ]]; then\n        echo \"Error server did not start successfully\"\n        print_install_results_and_exit 1\n    fi\nelse\n    echo \"Error server log file not found $SERVER_LOGFILE\"\n    print_install_results_and_exit 1\nfi\n\n# Finish server setup\nprint_install_results_and_exit 0\n`;\n}\n\nfunction generatePowerShellInstallScript({ id, quality, version, commit, release, extensionIds, envVariables, useSocketPath, serverApplicationName, serverDataFolderName, serverDownloadUrlTemplate }: ServerInstallOptions) {\n\tconst extensions = extensionIds.map(id => '--install-extension ' + id).join(' ');\n\tconst downloadUrl = serverDownloadUrlTemplate\n\t\t.replace(/\\$\\{quality\\}/g, quality)\n\t\t.replace(/\\$\\{version\\}/g, version)\n\t\t.replace(/\\$\\{commit\\}/g, commit)\n\t\t.replace(/\\$\\{os\\}/g, 'win32')\n\t\t.replace(/\\$\\{arch\\}/g, 'x64')\n\t\t.replace(/\\$\\{release\\}/g, release ?? '');\n\n\treturn `\n# Server installation script\n\n$TMP_DIR=\"$env:TEMP\\\\$([System.IO.Path]::GetRandomFileName())\"\n$ProgressPreference = \"SilentlyContinue\"\n\n$DISTRO_VERSION=\"${version}\"\n$DISTRO_COMMIT=\"${commit}\"\n$DISTRO_QUALITY=\"${quality}\"\n$DISTRO_VOID_RELEASE=\"${release ?? ''}\"\n\n$SERVER_APP_NAME=\"${serverApplicationName}\"\n$SERVER_INITIAL_EXTENSIONS=\"${extensions}\"\n$SERVER_LISTEN_FLAG=\"${useSocketPath ? `--socket-path=\"$TMP_DIR/vscode-server-sock-${crypto.randomUUID()}\"` : '--port=0'}\"\n$SERVER_DATA_DIR=\"$(Resolve-Path ~)\\\\${serverDataFolderName}\"\n$SERVER_DIR=\"$SERVER_DATA_DIR\\\\bin\\\\$DISTRO_COMMIT\"\n$SERVER_SCRIPT=\"$SERVER_DIR\\\\bin\\\\$SERVER_APP_NAME.cmd\"\n$SERVER_LOGFILE=\"$SERVER_DATA_DIR\\\\.$DISTRO_COMMIT.log\"\n$SERVER_PIDFILE=\"$SERVER_DATA_DIR\\\\.$DISTRO_COMMIT.pid\"\n$SERVER_TOKENFILE=\"$SERVER_DATA_DIR\\\\.$DISTRO_COMMIT.token\"\n$SERVER_ARCH=\n$SERVER_CONNECTION_TOKEN=\n$SERVER_DOWNLOAD_URL=\n\n$LISTENING_ON=\n$OS_RELEASE_ID=\n$ARCH=\n$PLATFORM=\"win32\"\n\nfunction printInstallResults($code) {\n    \"${id}: start\"\n    \"exitCode==$code==\"\n    \"listeningOn==$LISTENING_ON==\"\n    \"connectionToken==$SERVER_CONNECTION_TOKEN==\"\n    \"logFile==$SERVER_LOGFILE==\"\n    \"osReleaseId==$OS_RELEASE_ID==\"\n    \"arch==$ARCH==\"\n    \"platform==$PLATFORM==\"\n    \"tmpDir==$TMP_DIR==\"\n    ${envVariables.map(envVar => `\"${envVar}==$${envVar}==\"`).join('\\n')}\n    \"${id}: end\"\n}\n\n# Check machine architecture\n$ARCH=$env:PROCESSOR_ARCHITECTURE\n# Use x64 version for ARM64, as it's not yet available.\nif(($ARCH -eq \"AMD64\") -or ($ARCH -eq \"IA64\") -or ($ARCH -eq \"ARM64\")) {\n    $SERVER_ARCH=\"x64\"\n}\nelse {\n    \"Error architecture not supported: $ARCH\"\n    printInstallResults 1\n    exit 0\n}\n\n# Create installation folder\nif(!(Test-Path $SERVER_DIR)) {\n    try {\n        ni -it d $SERVER_DIR -f -ea si\n    } catch {\n        \"Error creating server install directory - $($_.ToString())\"\n        exit 1\n    }\n\n    if(!(Test-Path $SERVER_DIR)) {\n        \"Error creating server install directory\"\n        exit 1\n    }\n}\n\ncd $SERVER_DIR\n\n# Check if server script is already installed\nif(!(Test-Path $SERVER_SCRIPT)) {\n    del vscode-server.tar.gz\n\n    $REQUEST_ARGUMENTS = @{\n        Uri=\"${downloadUrl}\"\n        TimeoutSec=20\n        OutFile=\"vscode-server.tar.gz\"\n        UseBasicParsing=$True\n    }\n\n    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12\n\n    Invoke-RestMethod @REQUEST_ARGUMENTS\n\n    if(Test-Path \"vscode-server.tar.gz\") {\n        tar -xf vscode-server.tar.gz --strip-components 1\n\n        del vscode-server.tar.gz\n    }\n\n    if(!(Test-Path $SERVER_SCRIPT)) {\n        \"Error while installing the server binary\"\n        exit 1\n    }\n}\nelse {\n    \"Server script already installed in $SERVER_SCRIPT\"\n}\n\n# Try to find if server is already running\nif(Get-Process node -ErrorAction SilentlyContinue | Where-Object Path -Like \"$SERVER_DIR\\\\*\") {\n    echo \"Server script is already running $SERVER_SCRIPT\"\n}\nelse {\n    if(Test-Path $SERVER_LOGFILE) {\n        del $SERVER_LOGFILE\n    }\n    if(Test-Path $SERVER_PIDFILE) {\n        del $SERVER_PIDFILE\n    }\n    if(Test-Path $SERVER_TOKENFILE) {\n        del $SERVER_TOKENFILE\n    }\n\n    $SERVER_CONNECTION_TOKEN=\"${crypto.randomUUID()}\"\n    [System.IO.File]::WriteAllLines($SERVER_TOKENFILE, $SERVER_CONNECTION_TOKEN)\n\n    $SCRIPT_ARGUMENTS=\"--start-server --host=127.0.0.1 $SERVER_LISTEN_FLAG $SERVER_INITIAL_EXTENSIONS --connection-token-file $SERVER_TOKENFILE --telemetry-level off --enable-remote-auto-shutdown --accept-server-license-terms *> '$SERVER_LOGFILE'\"\n\n    $START_ARGUMENTS = @{\n        FilePath = \"powershell.exe\"\n        WindowStyle = \"hidden\"\n        ArgumentList = @(\n            \"-ExecutionPolicy\", \"Unrestricted\", \"-NoLogo\", \"-NoProfile\", \"-NonInteractive\", \"-c\", \"$SERVER_SCRIPT $SCRIPT_ARGUMENTS\"\n        )\n        PassThru = $True\n    }\n\n    $SERVER_ID = (start @START_ARGUMENTS).ID\n\n    if($SERVER_ID) {\n        [System.IO.File]::WriteAllLines($SERVER_PIDFILE, $SERVER_ID)\n    }\n}\n\nif(Test-Path $SERVER_TOKENFILE) {\n    $SERVER_CONNECTION_TOKEN=\"$(cat $SERVER_TOKENFILE)\"\n}\nelse {\n    \"Error server token file not found $SERVER_TOKENFILE\"\n    printInstallResults 1\n    exit 0\n}\n\nsleep -Milliseconds 500\n\n$SELECT_ARGUMENTS = @{\n    Path = $SERVER_LOGFILE\n    Pattern = \"Extension host agent listening on (\\\\d+)\"\n}\n\nfor($I = 1; $I -le 5; $I++) {\n    if(Test-Path $SERVER_LOGFILE) {\n        $GROUPS = (Select-String @SELECT_ARGUMENTS).Matches.Groups\n\n        if($GROUPS) {\n            $LISTENING_ON = $GROUPS[1].Value\n            break\n        }\n    }\n\n    sleep -Milliseconds 500\n}\n\nif(!(Test-Path $SERVER_LOGFILE)) {\n    \"Error server log file not found $SERVER_LOGFILE\"\n    printInstallResults 1\n    exit 0\n}\n\n# Finish server setup\nprintInstallResults 0\n\nif($SERVER_ID) {\n    while($True) {\n        if(!(gps -Id $SERVER_ID)) {\n            \"server died, exit\"\n            exit 0\n        }\n\n        sleep 30\n    }\n}\n`;\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/ssh/hostfile.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as os from 'os';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport { exists as folderExists } from '../common/files';\n\nconst PATH_SSH_USER_DIR = path.join(os.homedir(), '.ssh');\nconst KNOW_HOST_FILE = path.join(PATH_SSH_USER_DIR, 'known_hosts');\nconst HASH_MAGIC = '|1|';\nconst HASH_DELIM = '|';\n\nexport async function checkNewHostInHostkeys(host: string): Promise<boolean> {\n\tconst fileContent = await fs.promises.readFile(KNOW_HOST_FILE, { encoding: 'utf8' });\n\tconst lines = fileContent.split(/\\r?\\n/);\n\tfor (let line of lines) {\n\t\tline = line.trim();\n\t\tif (!line.startsWith(HASH_MAGIC)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [hostEncripted_] = line.split(' ');\n\t\tconst [salt_, hostHash_] = hostEncripted_.substring(HASH_MAGIC.length).split(HASH_DELIM);\n\t\tconst hostHash = crypto.createHmac('sha1', Buffer.from(salt_, 'base64')).update(host).digest();\n\t\tif (hostHash.toString('base64') === hostHash_) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport async function addHostToHostFile(host: string, hostKey: Buffer, type: string): Promise<void> {\n\tif (!folderExists(PATH_SSH_USER_DIR)) {\n\t\tawait fs.promises.mkdir(PATH_SSH_USER_DIR, 0o700);\n\t}\n\n\tconst salt = crypto.randomBytes(20);\n\tconst hostHash = crypto.createHmac('sha1', salt).update(host).digest();\n\n\tconst entry = `${HASH_MAGIC}${salt.toString('base64')}${HASH_DELIM}${hostHash.toString('base64')} ${type} ${hostKey.toString('base64')}\\n`;\n\tawait fs.promises.appendFile(KNOW_HOST_FILE, entry);\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/ssh/identityFiles.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport type { ParsedKey } from 'ssh2-streams';\nimport * as ssh2 from 'ssh2';\nimport { untildify, exists as fileExists } from '../common/files';\nimport Log from '../common/logger';\n\nconst homeDir = os.homedir();\nconst PATH_SSH_CLIENT_ID_DSA = path.join(homeDir, '.ssh', '/id_dsa');\nconst PATH_SSH_CLIENT_ID_ECDSA = path.join(homeDir, '.ssh', '/id_ecdsa');\nconst PATH_SSH_CLIENT_ID_RSA = path.join(homeDir, '.ssh', '/id_rsa');\nconst PATH_SSH_CLIENT_ID_ED25519 = path.join(homeDir, '.ssh', '/id_ed25519');\nconst PATH_SSH_CLIENT_ID_XMSS = path.join(homeDir, '.ssh', '/id_xmss');\nconst PATH_SSH_CLIENT_ID_ECDSA_SK = path.join(homeDir, '.ssh', '/id_ecdsa_sk');\nconst PATH_SSH_CLIENT_ID_ED25519_SK = path.join(homeDir, '.ssh', '/id_ed25519_sk');\n\nconst DEFAULT_IDENTITY_FILES: string[] = [\n\tPATH_SSH_CLIENT_ID_RSA,\n\tPATH_SSH_CLIENT_ID_ECDSA,\n\tPATH_SSH_CLIENT_ID_ECDSA_SK,\n\tPATH_SSH_CLIENT_ID_ED25519,\n\tPATH_SSH_CLIENT_ID_ED25519_SK,\n\tPATH_SSH_CLIENT_ID_XMSS,\n\tPATH_SSH_CLIENT_ID_DSA,\n];\n\nexport interface SSHKey {\n\tfilename: string;\n\tparsedKey: ParsedKey;\n\tfingerprint: string;\n\tagentSupport?: boolean;\n\tisPrivate?: boolean;\n}\n\n// From https://github.com/openssh/openssh-portable/blob/acb2059febaddd71ee06c2ebf63dcf211d9ab9f2/sshconnect2.c#L1689-L1690\nexport async function gatherIdentityFiles(identityFiles: string[], sshAgentSock: string | undefined, identitiesOnly: boolean, logger: Log) {\n\tidentityFiles = identityFiles.map(untildify).map(i => i.replace(/\\.pub$/, ''));\n\tif (identityFiles.length === 0) {\n\t\tidentityFiles.push(...DEFAULT_IDENTITY_FILES);\n\t}\n\n\tconst identityFileContentsResult = await Promise.allSettled(identityFiles.map(async keyPath => {\n\t\tkeyPath = await fileExists(keyPath + '.pub') ? keyPath + '.pub' : keyPath;\n\t\treturn fs.promises.readFile(keyPath);\n\t}));\n\tconst fileKeys: SSHKey[] = identityFileContentsResult.map((result, i) => {\n\t\tif (result.status === 'rejected') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parsedResult = ssh2.utils.parseKey(result.value);\n\t\tif (parsedResult instanceof Error || !parsedResult) {\n\t\t\tlogger.error(`Error while parsing SSH public key ${identityFiles[i]}:`, parsedResult);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parsedKey = Array.isArray(parsedResult) ? parsedResult[0] : parsedResult;\n\t\tconst fingerprint = crypto.createHash('sha256').update(parsedKey.getPublicSSH()).digest('base64');\n\n\t\treturn {\n\t\t\tfilename: identityFiles[i],\n\t\t\tparsedKey,\n\t\t\tfingerprint\n\t\t};\n\t}).filter(<T>(v: T | undefined): v is T => !!v);\n\n\tlet sshAgentParsedKeys: ParsedKey[] = [];\n\ttry {\n\t\tif (!sshAgentSock) {\n\t\t\tthrow new Error(`SSH_AUTH_SOCK environment variable not defined`);\n\t\t}\n\n\t\tsshAgentParsedKeys = await new Promise<ParsedKey[]>((resolve, reject) => {\n\t\t\tconst sshAgent = new ssh2.OpenSSHAgent(sshAgentSock);\n\t\t\tsshAgent.getIdentities((err, publicKeys) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(publicKeys || []);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} catch (e) {\n\t\tlogger.error(`Couldn't get identities from OpenSSH agent`, e);\n\t}\n\n\tconst sshAgentKeys: SSHKey[] = sshAgentParsedKeys.map(parsedKey => {\n\t\tconst fingerprint = crypto.createHash('sha256').update(parsedKey.getPublicSSH()).digest('base64');\n\t\treturn {\n\t\t\tfilename: parsedKey.comment,\n\t\t\tparsedKey,\n\t\t\tfingerprint,\n\t\t\tagentSupport: true\n\t\t};\n\t});\n\n\tconst agentKeys: SSHKey[] = [];\n\tconst preferredIdentityKeys: SSHKey[] = [];\n\tfor (const agentKey of sshAgentKeys) {\n\t\tconst foundIdx = fileKeys.findIndex(k => agentKey.parsedKey.type === k.parsedKey.type && agentKey.fingerprint === k.fingerprint);\n\t\tif (foundIdx >= 0) {\n\t\t\tpreferredIdentityKeys.push({ ...fileKeys[foundIdx], agentSupport: true });\n\t\t\tfileKeys.splice(foundIdx, 1);\n\t\t} else if (!identitiesOnly) {\n\t\t\tagentKeys.push(agentKey);\n\t\t}\n\t}\n\tpreferredIdentityKeys.push(...agentKeys);\n\tpreferredIdentityKeys.push(...fileKeys);\n\n\tlogger.trace(`Identity keys:`, preferredIdentityKeys.length ? preferredIdentityKeys.map(k => `${k.filename} ${k.parsedKey.type} SHA256:${k.fingerprint}`).join('\\n') : 'None');\n\n\treturn preferredIdentityKeys;\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/ssh/sshConfig.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as os from 'os';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport SSHConfig, { Directive, Line, Section } from '@jeanp413/ssh-config';\nimport * as vscode from 'vscode';\nimport { exists as fileExists, normalizeToSlash, untildify } from '../common/files';\nimport { isWindows } from '../common/platform';\nimport { glob } from 'glob';\n\nconst systemSSHConfig = isWindows ? path.resolve(process.env.ALLUSERSPROFILE || 'C:\\\\ProgramData', 'ssh\\\\ssh_config') : '/etc/ssh/ssh_config';\nconst defaultSSHConfigPath = path.resolve(os.homedir(), '.ssh/config');\n\nexport function getSSHConfigPath() {\n\tconst sshConfigPath = vscode.workspace.getConfiguration('remote.SSH').get<string>('configFile');\n\treturn sshConfigPath ? untildify(sshConfigPath) : defaultSSHConfigPath;\n}\n\nfunction isDirective(line: Line): line is Directive {\n\treturn line.type === SSHConfig.DIRECTIVE;\n}\n\nfunction isHostSection(line: Line): line is Section {\n\treturn isDirective(line) && line.param === 'Host' && !!line.value && !!(line as Section).config;\n}\n\nfunction isIncludeDirective(line: Line): line is Section {\n\treturn isDirective(line) && line.param === 'Include' && !!line.value;\n}\n\nconst SSH_CONFIG_PROPERTIES: Record<string, string> = {\n\t'host': 'Host',\n\t'hostname': 'HostName',\n\t'user': 'User',\n\t'port': 'Port',\n\t'identityagent': 'IdentityAgent',\n\t'identitiesonly': 'IdentitiesOnly',\n\t'identityfile': 'IdentityFile',\n\t'forwardagent': 'ForwardAgent',\n\t'preferredauthentications': 'PreferredAuthentications',\n\t'proxyjump': 'ProxyJump',\n\t'proxycommand': 'ProxyCommand',\n\t'include': 'Include',\n};\n\nfunction normalizeProp(prop: Directive) {\n\tprop.param = SSH_CONFIG_PROPERTIES[prop.param.toLowerCase()] || prop.param;\n}\n\nfunction normalizeSSHConfig(config: SSHConfig) {\n\tfor (const line of config) {\n\t\tif (isDirective(line)) {\n\t\t\tnormalizeProp(line);\n\t\t}\n\t\tif (isHostSection(line)) {\n\t\t\tnormalizeSSHConfig(line.config);\n\t\t}\n\t}\n\treturn config;\n}\n\nasync function parseSSHConfigFromFile(filePath: string, userConfig: boolean) {\n\tlet content = '';\n\tif (await fileExists(filePath)) {\n\t\tcontent = (await fs.promises.readFile(filePath, 'utf8')).trim();\n\t}\n\tconst config = normalizeSSHConfig(SSHConfig.parse(content));\n\n\tconst includedConfigs: [number, SSHConfig[]][] = [];\n\tfor (let i = 0; i < config.length; i++) {\n\t\tconst line = config[i];\n\t\tif (isIncludeDirective(line)) {\n\t\t\tconst values = (line.value as string).split(',').map(s => s.trim());\n\t\t\tconst configs: SSHConfig[] = [];\n\t\t\tfor (const value of values) {\n\t\t\t\tconst includePaths = await glob(normalizeToSlash(untildify(value)), {\n\t\t\t\t\tabsolute: true,\n\t\t\t\t\tcwd: normalizeToSlash(path.dirname(userConfig ? defaultSSHConfigPath : systemSSHConfig))\n\t\t\t\t});\n\t\t\t\tfor (const p of includePaths) {\n\t\t\t\t\tconfigs.push(await parseSSHConfigFromFile(p, userConfig));\n\t\t\t\t}\n\t\t\t}\n\t\t\tincludedConfigs.push([i, configs]);\n\t\t}\n\t}\n\tfor (const [idx, includeConfigs] of includedConfigs.reverse()) {\n\t\tconfig.splice(idx, 1, ...includeConfigs.flat());\n\t}\n\n\treturn config;\n}\n\nexport default class SSHConfiguration {\n\n\tstatic async loadFromFS(): Promise<SSHConfiguration> {\n\t\tconst config = await parseSSHConfigFromFile(getSSHConfigPath(), true);\n\t\tconfig.push(...await parseSSHConfigFromFile(systemSSHConfig, false));\n\n\t\treturn new SSHConfiguration(config);\n\t}\n\n\tconstructor(private sshConfig: SSHConfig) {\n\t}\n\n\tgetAllConfiguredHosts(): string[] {\n\t\tconst hosts = new Set<string>();\n\t\tfor (const line of this.sshConfig) {\n\t\t\tif (isHostSection(line)) {\n\t\t\t\tconst value = Array.isArray(line.value) ? line.value[0] : line.value;\n\t\t\t\tconst isPattern = /^!/.test(value) || /[?*]/.test(value);\n\t\t\t\tif (!isPattern) {\n\t\t\t\t\thosts.add(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [...hosts.keys()];\n\t}\n\n\tgetHostConfiguration(host: string): Record<string, string> {\n\t\t// Only a few directives return an array\n\t\t// https://github.com/jeanp413/ssh-config/blob/8d187bb8f1d83a51ff2b1d127e6b6269d24092b5/src/ssh-config.ts#L9C1-L9C118\n\t\treturn this.sshConfig.compute(host) as Record<string, string>;\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/ssh/sshConnection.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { EventEmitter } from 'events';\nimport * as net from 'net';\nimport * as fs from 'fs';\nimport * as stream from 'stream';\nimport { Client, ClientChannel, ClientErrorExtensions, ExecOptions, ShellOptions, ConnectConfig } from 'ssh2';\nimport { Server } from 'net';\nimport { SocksConnectionInfo, createServer as createSocksServer } from 'simple-socks';\n\nexport interface SSHConnectConfig extends ConnectConfig {\n\t/** Optional Unique ID attached to ssh connection. */\n\tuniqueId?: string;\n\t/** Automatic retry to connect, after disconnect. Default true */\n\treconnect?: boolean;\n\t/** Number of reconnect retry, after disconnect. Default 10 */\n\treconnectTries?: number;\n\t/** Delay after which reconnect should be done. Default 5000ms */\n\treconnectDelay?: number;\n\t/** Path to private key */\n\tidentity?: string | Buffer;\n}\n\nexport interface SSHTunnelConfig {\n\t/** Remote Address to connect */\n\tremoteAddr?: string;\n\t/** Local port to bind to. By default, it will bind to a random port, if not passed */\n\tlocalPort?: number;\n\t/** Remote Port to connect */\n\tremotePort?: number;\n\t/** Remote socket path to connect */\n\tremoteSocketPath?: string;\n\tsocks?: boolean;\n\t/**  Unique name */\n\tname?: string;\n}\n\nconst defaultOptions: Partial<SSHConnectConfig> = {\n\treconnect: false,\n\tport: 22,\n\treconnectTries: 3,\n\treconnectDelay: 5000\n};\n\nconst SSHConstants = {\n\t'CHANNEL': {\n\t\tSSH: 'ssh',\n\t\tTUNNEL: 'tunnel',\n\t\tX11: 'x11'\n\t},\n\t'STATUS': {\n\t\tBEFORECONNECT: 'beforeconnect',\n\t\tCONNECT: 'connect',\n\t\tBEFOREDISCONNECT: 'beforedisconnect',\n\t\tDISCONNECT: 'disconnect'\n\t}\n};\n\nexport default class SSHConnection extends EventEmitter {\n\tpublic config: SSHConnectConfig;\n\n\tprivate activeTunnels: { [index: string]: SSHTunnelConfig & { server: Server } } = {};\n\tprivate __$connectPromise: Promise<SSHConnection> | null = null;\n\tprivate __retries: number = 0;\n\tprivate __err: Error & ClientErrorExtensions & { code?: string } | null = null;\n\tprivate sshConnection: Client | null = null;\n\n\tconstructor(options: SSHConnectConfig) {\n\t\tsuper();\n\t\tthis.config = Object.assign({}, defaultOptions, options);\n\t\tthis.config.uniqueId = this.config.uniqueId || `${this.config.username}@${this.config.host}`;\n\t}\n\n\t/**\n\t  * Emit message on this channel\n\t  */\n\toverride emit(channel: string, status: string, payload?: any): boolean {\n\t\tsuper.emit(channel, status, this, payload);\n\t\treturn super.emit(`${channel}:${status}`, this, payload);\n\t}\n\n\t/**\n\t * Get shell socket\n\t */\n\tshell(options: ShellOptions = {}): Promise<ClientChannel> {\n\t\treturn this.connect().then(() => {\n\t\t\treturn new Promise<ClientChannel>((resolve, reject) => {\n\t\t\t\tthis.sshConnection!.shell(options, (err, stream) => err ? reject(err) : resolve(stream));\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Exec a command\n\t */\n\texec(cmd: string, params?: Array<string>, options: ExecOptions = {}): Promise<{ stdout: string; stderr: string }> {\n\t\tcmd += (Array.isArray(params) ? (' ' + params.join(' ')) : '');\n\t\treturn this.connect().then(() => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.sshConnection!.exec(cmd, options, (err, stream) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t}\n\t\t\t\t\tlet stdout = '';\n\t\t\t\t\tlet stderr = '';\n\t\t\t\t\tstream.on('close', function () {\n\t\t\t\t\t\treturn resolve({ stdout, stderr });\n\t\t\t\t\t}).on('data', function (data: Buffer | string) {\n\t\t\t\t\t\tstdout += data.toString();\n\t\t\t\t\t}).stderr.on('data', function (data: Buffer | string) {\n\t\t\t\t\t\tstderr += data.toString();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Exec a command\n\t */\n\texecPartial(cmd: string, tester: (stdout: string, stderr: string) => boolean, params?: Array<string>, options: ExecOptions = {}): Promise<{ stdout: string; stderr: string }> {\n\t\tcmd += (Array.isArray(params) ? (' ' + params.join(' ')) : '');\n\t\treturn this.connect().then(() => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.sshConnection!.exec(cmd, options, (err, stream) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t}\n\t\t\t\t\tlet stdout = '';\n\t\t\t\t\tlet stderr = '';\n\t\t\t\t\tlet resolved = false;\n\t\t\t\t\tstream.on('close', function () {\n\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\treturn resolve({ stdout, stderr });\n\t\t\t\t\t\t}\n\t\t\t\t\t}).on('data', function (data: Buffer | string) {\n\t\t\t\t\t\tstdout += data.toString();\n\n\t\t\t\t\t\tif (tester(stdout, stderr)) {\n\t\t\t\t\t\t\tresolved = true;\n\n\t\t\t\t\t\t\treturn resolve({ stdout, stderr });\n\t\t\t\t\t\t}\n\t\t\t\t\t}).stderr.on('data', function (data: Buffer | string) {\n\t\t\t\t\t\tstderr += data.toString();\n\n\t\t\t\t\t\tif (tester(stdout, stderr)) {\n\t\t\t\t\t\t\tresolved = true;\n\n\t\t\t\t\t\t\treturn resolve({ stdout, stderr });\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Forward out\n\t */\n\tforwardOut(srcIP: string, srcPort: number, destIP: string, destPort: number): Promise<ClientChannel> {\n\t\treturn this.connect().then(() => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.sshConnection!.forwardOut(srcIP, srcPort, destIP, destPort, (err, stream) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t}\n\t\t\t\t\tresolve(stream);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Get a Socks Port\n\t */\n\tgetSocksPort(localPort: number): Promise<number> {\n\t\treturn this.addTunnel({ name: '__socksServer', socks: true, localPort: localPort }).then((tunnel) => {\n\t\t\treturn tunnel.localPort!;\n\t\t});\n\t}\n\n\t/**\n\t * Close SSH Connection\n\t */\n\tclose(): Promise<void> {\n\t\tthis.emit(SSHConstants.CHANNEL.SSH, SSHConstants.STATUS.BEFOREDISCONNECT);\n\t\treturn this.closeTunnel().then(() => {\n\t\t\tif (this.sshConnection) {\n\t\t\t\tthis.sshConnection.end();\n\t\t\t\tthis.emit(SSHConstants.CHANNEL.SSH, SSHConstants.STATUS.DISCONNECT);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Connect the SSH Connection\n\t */\n\tconnect(c?: SSHConnectConfig): Promise<SSHConnection> {\n\t\tthis.config = Object.assign(this.config, c);\n\t\t++this.__retries;\n\n\t\tif (this.__$connectPromise) {\n\t\t\treturn this.__$connectPromise;\n\t\t}\n\n\t\tthis.__$connectPromise = new Promise((resolve, reject) => {\n\t\t\tthis.emit(SSHConstants.CHANNEL.SSH, SSHConstants.STATUS.BEFORECONNECT);\n\t\t\tif (!this.config || typeof this.config === 'function' || !(this.config.host || this.config.sock) || !this.config.username) {\n\t\t\t\treject(`Invalid SSH connection configuration host/username can't be empty`);\n\t\t\t\tthis.__$connectPromise = null;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.config.identity) {\n\t\t\t\tif (fs.existsSync(this.config.identity)) {\n\t\t\t\t\tthis.config.privateKey = fs.readFileSync(this.config.identity);\n\t\t\t\t}\n\t\t\t\tdelete this.config.identity;\n\t\t\t}\n\n\t\t\t//Start ssh server connection\n\t\t\tthis.sshConnection = new Client();\n\t\t\tthis.sshConnection.on('ready', (err: Error & ClientErrorExtensions) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tthis.emit(SSHConstants.CHANNEL.SSH, SSHConstants.STATUS.DISCONNECT, { err: err });\n\t\t\t\t\tthis.__$connectPromise = null;\n\t\t\t\t\treturn reject(err);\n\t\t\t\t}\n\t\t\t\tthis.emit(SSHConstants.CHANNEL.SSH, SSHConstants.STATUS.CONNECT);\n\t\t\t\tthis.__retries = 0;\n\t\t\t\tthis.__err = null;\n\t\t\t\tresolve(this);\n\t\t\t}).on('error', (err) => {\n\t\t\t\tthis.emit(SSHConstants.CHANNEL.SSH, SSHConstants.STATUS.DISCONNECT, { err: err });\n\t\t\t\tthis.__err = err;\n\t\t\t}).on('close', () => {\n\t\t\t\tthis.emit(SSHConstants.CHANNEL.SSH, SSHConstants.STATUS.DISCONNECT, { err: this.__err });\n\t\t\t\tif (this.config.reconnect && this.__retries <= this.config.reconnectTries! && this.__err && this.__err.level !== 'client-authentication' && this.__err.code !== 'ENOTFOUND') {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.__$connectPromise = null;\n\t\t\t\t\t\tresolve(this.connect());\n\t\t\t\t\t}, this.config.reconnectDelay);\n\t\t\t\t} else {\n\t\t\t\t\treject(this.__err);\n\t\t\t\t}\n\t\t\t}).connect(this.config);\n\t\t});\n\t\treturn this.__$connectPromise;\n\t}\n\n\t/**\n\t * Get existing tunnel by name\n\t */\n\tgetTunnel(name: string) {\n\t\treturn this.activeTunnels[name];\n\t}\n\n\t/**\n\t * Add new tunnel if not exist\n\t */\n\taddTunnel(SSHTunnelConfig: SSHTunnelConfig): Promise<SSHTunnelConfig & { server: Server }> {\n\t\tSSHTunnelConfig.name = SSHTunnelConfig.name || `${SSHTunnelConfig.remoteAddr}@${SSHTunnelConfig.remotePort || SSHTunnelConfig.remoteSocketPath}`;\n\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.BEFORECONNECT, { SSHTunnelConfig: SSHTunnelConfig });\n\t\tif (this.getTunnel(SSHTunnelConfig.name)) {\n\t\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.CONNECT, { SSHTunnelConfig: SSHTunnelConfig });\n\t\t\treturn Promise.resolve(this.getTunnel(SSHTunnelConfig.name));\n\t\t} else {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tlet server: net.Server;\n\t\t\t\tif (SSHTunnelConfig.socks) {\n\t\t\t\t\tserver = createSocksServer({\n\t\t\t\t\t\tconnectionFilter: (destination: SocksConnectionInfo, origin: SocksConnectionInfo, callback: (err?: any, dest?: stream.Duplex) => void) => {\n\t\t\t\t\t\t\tthis.connect().then(() => {\n\t\t\t\t\t\t\t\tthis.sshConnection!.forwardOut(\n\t\t\t\t\t\t\t\t\torigin.address,\n\t\t\t\t\t\t\t\t\torigin.port,\n\t\t\t\t\t\t\t\t\tdestination.address,\n\t\t\t\t\t\t\t\t\tdestination.port,\n\t\t\t\t\t\t\t\t\t(err, stream) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.DISCONNECT, { SSHTunnelConfig: SSHTunnelConfig, err: err });\n\t\t\t\t\t\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn callback(null, stream);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}).on('proxyError', (err: any) => {\n\t\t\t\t\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.DISCONNECT, { SSHTunnelConfig: SSHTunnelConfig, err: err });\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tserver = net.createServer()\n\t\t\t\t\t\t.on('connection', (socket) => {\n\t\t\t\t\t\t\tthis.connect().then(() => {\n\t\t\t\t\t\t\t\tif (SSHTunnelConfig.remotePort) {\n\t\t\t\t\t\t\t\t\tthis.sshConnection!.forwardOut('127.0.0.1', 0, SSHTunnelConfig.remoteAddr!, SSHTunnelConfig.remotePort!, (err, stream) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.DISCONNECT, { SSHTunnelConfig: SSHTunnelConfig, err: err });\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tstream.pipe(socket);\n\t\t\t\t\t\t\t\t\t\tsocket.pipe(stream);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.sshConnection!.openssh_forwardOutStreamLocal(SSHTunnelConfig.remoteSocketPath!, (err, stream) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.DISCONNECT, { SSHTunnelConfig: SSHTunnelConfig, err: err });\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tstream.pipe(socket);\n\t\t\t\t\t\t\t\t\t\tsocket.pipe(stream);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tSSHTunnelConfig.localPort = SSHTunnelConfig.localPort || 0;\n\t\t\t\tserver.on('listening', () => {\n\t\t\t\t\tSSHTunnelConfig.localPort = (server.address() as net.AddressInfo).port;\n\t\t\t\t\tthis.activeTunnels[SSHTunnelConfig.name!] = Object.assign({}, { server }, SSHTunnelConfig);\n\t\t\t\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.CONNECT, { SSHTunnelConfig: SSHTunnelConfig });\n\t\t\t\t\tresolve(this.activeTunnels[SSHTunnelConfig.name!]);\n\t\t\t\t}).on('error', (err: any) => {\n\t\t\t\t\tthis.emit(SSHConstants.CHANNEL.TUNNEL, SSHConstants.STATUS.DISCONNECT, { SSHTunnelConfig: SSHTunnelConfig, err: err });\n\t\t\t\t\tserver.close();\n\t\t\t\t\treject(err);\n\t\t\t\t\tdelete this.activeTunnels[SSHTunnelConfig.name!];\n\t\t\t\t}).listen(SSHTunnelConfig.localPort);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Close the tunnel\n\t */\n\tcloseTunnel(name?: string): Promise<void> {\n\t\tif (name && this.activeTunnels[name]) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst tunnel = this.activeTunnels[name];\n\t\t\t\tthis.emit(\n\t\t\t\t\tSSHConstants.CHANNEL.TUNNEL,\n\t\t\t\t\tSSHConstants.STATUS.BEFOREDISCONNECT,\n\t\t\t\t\t{ SSHTunnelConfig: tunnel }\n\t\t\t\t);\n\t\t\t\ttunnel.server.close(() => {\n\t\t\t\t\tthis.emit(\n\t\t\t\t\t\tSSHConstants.CHANNEL.TUNNEL,\n\t\t\t\t\t\tSSHConstants.STATUS.DISCONNECT,\n\t\t\t\t\t\t{ SSHTunnelConfig: this.activeTunnels[name] }\n\t\t\t\t\t);\n\t\t\t\t\tdelete this.activeTunnels[name];\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t});\n\t\t} else if (!name) {\n\t\t\tconst tunnels = Object.keys(this.activeTunnels).map((key) => this.closeTunnel(key));\n\t\t\treturn Promise.all(tunnels).then(() => { });\n\t\t}\n\n\t\treturn Promise.resolve();\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/src/ssh/sshDestination.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport default class SSHDestination {\n\tconstructor(\n\t\tpublic readonly hostname: string,\n\t\tpublic readonly user?: string,\n\t\tpublic readonly port?: number\n\t) {\n\t}\n\n\tstatic parse(dest: string): SSHDestination {\n\t\tlet user: string | undefined;\n\t\tconst atPos = dest.lastIndexOf('@');\n\t\tif (atPos !== -1) {\n\t\t\tuser = dest.substring(0, atPos);\n\t\t}\n\n\t\tlet port: number | undefined;\n\t\tconst colonPos = dest.lastIndexOf(':');\n\t\tif (colonPos !== -1) {\n\t\t\tport = parseInt(dest.substring(colonPos + 1), 10);\n\t\t}\n\n\t\tconst start = atPos !== -1 ? atPos + 1 : 0;\n\t\tconst end = colonPos !== -1 ? colonPos : dest.length;\n\t\tconst hostname = dest.substring(start, end);\n\n\t\treturn new SSHDestination(hostname, user, port);\n\t}\n\n\ttoString(): string {\n\t\tlet result = this.hostname;\n\t\tif (this.user) {\n\t\t\tresult = `${this.user}@` + result;\n\t\t}\n\t\tif (this.port) {\n\t\t\tresult = result + `:${this.port}`;\n\t\t}\n\t\treturn result;\n\t}\n\n\t// vscode.uri implementation lowercases the authority, so when reopen or restore\n\t// a remote session from the recently openend list the connection fails\n\tstatic parseEncoded(dest: string): SSHDestination {\n\t\ttry {\n\t\t\tconst data = JSON.parse(Buffer.from(dest, 'hex').toString());\n\t\t\treturn new SSHDestination(data.hostName, data.user, data.port);\n\t\t} catch {\n\t\t}\n\t\treturn SSHDestination.parse(dest.replace(/\\\\x([0-9a-f]{2})/g, (_, charCode) => String.fromCharCode(parseInt(charCode, 16))));\n\t}\n\n\ttoEncodedString(): string {\n\t\treturn this.toString().replace(/[A-Z]/g, (ch) => `\\\\x${ch.charCodeAt(0).toString(16).toLowerCase()}`);\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-ssh/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.resolvers.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.contribViewsRemote.d.ts\",\n\t]\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/README.md",
    "content": "# Remote - WSL Support\n\nInherited for Void from [Open Remote - WSL](https://github.com/jeanp413/open-remote-wsl).\n"
  },
  {
    "path": "extensions/open-remote-wsl/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t}\n});\n"
  },
  {
    "path": "extensions/open-remote-wsl/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t}\n});\n"
  },
  {
    "path": "extensions/open-remote-wsl/package.json",
    "content": "{\n\t\"name\": \"open-remote-wsl\",\n\t\"displayName\": \"Remote - WSL\",\n\t\"description\": \"Open any folder in the Windows Subsystem for Linux (WSL).\",\n\t\"version\": \"0.0.4\",\n\t\"icon\": \"resources/icon.png\",\n\t\"engines\": {\n\t\t\"vscode\": \"^1.70.2\"\n\t},\n\t\"extensionKind\": [\n\t\t\"ui\"\n\t],\n\t\"enabledApiProposals\": [\n\t\t\"resolvers\",\n\t\t\"contribViewsRemote\"\n\t],\n\t\"keywords\": [\n\t\t\"remote development\",\n\t\t\"remote\",\n\t\t\"wsl\"\n\t],\n\t\"api\": \"none\",\n\t\"activationEvents\": [\n\t\t\"onCommand:openremotewsl.connect\",\n\t\t\"onCommand:openremotewsl.connectInNewWindow\",\n\t\t\"onCommand:openremotewsl.connectUsingDistro\",\n\t\t\"onCommand:openremotewsl.connectUsingDistroInNewWindow\",\n\t\t\"onCommand:openremotewsl.showLog\",\n\t\t\"onResolveRemoteAuthority:wsl\",\n\t\t\"onView:wslTargets\"\n\t],\n\t\"main\": \"./out/extension.js\",\n\t\"contributes\": {\n\t\t\"configuration\": {\n\t\t\t\"title\": \"WSL\",\n\t\t\t\"properties\": {\n\t\t\t\t\"remote.WSL.serverDownloadUrlTemplate\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"The URL from where the vscode server will be downloaded. You can use the following variables and they will be replaced dynamically:\\n- ${quality}: vscode server quality, e.g. stable or insiders\\n- ${version}: vscode server version, e.g. 1.69.0\\n- ${commit}: vscode server release commit\\n- ${arch}: vscode server arch, e.g. x64, armhf, arm64\\n- ${release}: release number\",\n\t\t\t\t\t\"scope\": \"application\",\n\t\t\t\t\t\"default\": \"https://github.com/voideditor/binaries/releases/download/${version}/void-reh-${os}-${arch}-${version}.tar.gz\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"views\": {\n\t\t\t\"remote\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"wslTargets\",\n\t\t\t\t\t\"name\": \"WSL Targets\",\n\t\t\t\t\t\"group\": \"targets@1\",\n\t\t\t\t\t\"when\": \"(isWindows && !isWeb)\",\n\t\t\t\t\t\"remoteName\": \"wsl\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"commands\": [\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.connect\",\n\t\t\t\t\"title\": \"Connect to WSL\",\n\t\t\t\t\"category\": \"Remote-WSL\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.connectInNewWindow\",\n\t\t\t\t\"title\": \"Connect to WSL in New Window\",\n\t\t\t\t\"category\": \"Remote-WSL\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.connectUsingDistro\",\n\t\t\t\t\"title\": \"Connect to WSL using Distro...\",\n\t\t\t\t\"category\": \"Remote-WSL\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.connectUsingDistroInNewWindow\",\n\t\t\t\t\"title\": \"Connect to WSL using Distro in New Window...\",\n\t\t\t\t\"category\": \"Remote-WSL\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.showLog\",\n\t\t\t\t\"title\": \"Show Log\",\n\t\t\t\t\"category\": \"Remote-WSL\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.emptyWindowInNewWindow\",\n\t\t\t\t\"title\": \"Connect in New Window\",\n\t\t\t\t\"icon\": \"$(empty-window)\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.emptyWindowInCurrentWindow\",\n\t\t\t\t\"title\": \"Connect in Current Window\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.reopenFolderInCurrentWindow\",\n\t\t\t\t\"title\": \"Open in Current Window\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.reopenFolderInNewWindow\",\n\t\t\t\t\"title\": \"Open in New Window\",\n\t\t\t\t\"icon\": \"$(folder-opened)\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.deleteFolderHistoryItem\",\n\t\t\t\t\"title\": \"Remove From Recent List\",\n\t\t\t\t\"icon\": \"$(x)\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.refresh\",\n\t\t\t\t\"title\": \"Refresh\",\n\t\t\t\t\"icon\": \"$(refresh)\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.addDistro\",\n\t\t\t\t\"title\": \"Add a Distro\",\n\t\t\t\t\"icon\": \"$(plus)\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.setDefaultDistro\",\n\t\t\t\t\"title\": \"Set as Default Distro\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"command\": \"openremotewsl.explorer.deleteDistro\",\n\t\t\t\t\"title\": \"Delete Distro\"\n\t\t\t}\n\t\t],\n\t\t\"resourceLabelFormatters\": [\n\t\t\t{\n\t\t\t\t\"scheme\": \"vscode-remote\",\n\t\t\t\t\"authority\": \"wsl+*\",\n\t\t\t\t\"formatting\": {\n\t\t\t\t\t\"label\": \"${path}\",\n\t\t\t\t\t\"separator\": \"/\",\n\t\t\t\t\t\"tildify\": true,\n\t\t\t\t\t\"workspaceSuffix\": \"WSL\"\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t\"menus\": {\n\t\t\t\"statusBar/remoteIndicator\": [\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.connect\",\n\t\t\t\t\t\"when\": \"(isWindows && !isWeb)\",\n\t\t\t\t\t\"group\": \"remote_20_wsl_1general@1\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.connectUsingDistro\",\n\t\t\t\t\t\"when\": \"(isWindows && !isWeb)\",\n\t\t\t\t\t\"group\": \"remote_20_wsl_1general@2\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.showLog\",\n\t\t\t\t\t\"when\": \"remoteName =~ /^wsl$/\",\n\t\t\t\t\t\"group\": \"remote_20_wsl_1general@4\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"commandPalette\": [\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.connect\",\n\t\t\t\t\t\"when\": \"(isWindows && !isWeb)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.connectInNewWindow\",\n\t\t\t\t\t\"when\": \"(isWindows && !isWeb)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.connectUsingDistro\",\n\t\t\t\t\t\"when\": \"(isWindows && !isWeb)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.connectUsingDistroInNewWindow\",\n\t\t\t\t\t\"when\": \"(isWindows && !isWeb)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.refresh\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.addDistro\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.emptyWindowInNewWindow\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.emptyWindowInCurrentWindow\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.reopenFolderInCurrentWindow\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.reopenFolderInNewWindow\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.deleteFolderHistoryItem\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.setDefaultDistro\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.deleteDistro\",\n\t\t\t\t\t\"when\": \"false\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"view/title\": [\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.addDistro\",\n\t\t\t\t\t\"when\": \"view == wslTargets\",\n\t\t\t\t\t\"group\": \"navigation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.refresh\",\n\t\t\t\t\t\"when\": \"view == wslTargets\",\n\t\t\t\t\t\"group\": \"navigation\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"view/item/context\": [\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.emptyWindowInNewWindow\",\n\t\t\t\t\t\"when\": \"viewItem =~ /^openremotewsl.explorer.distro$/\",\n\t\t\t\t\t\"group\": \"inline@1\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.emptyWindowInNewWindow\",\n\t\t\t\t\t\"when\": \"viewItem =~ /^openremotewsl.explorer.distro$/\",\n\t\t\t\t\t\"group\": \"navigation@2\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.emptyWindowInCurrentWindow\",\n\t\t\t\t\t\"when\": \"viewItem =~ /^openremotewsl.explorer.distro$/\",\n\t\t\t\t\t\"group\": \"navigation@1\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.setDefaultDistro\",\n\t\t\t\t\t\"when\": \"viewItem =~ /^openremotewsl.explorer.distro$/\",\n\t\t\t\t\t\"group\": \"management@1\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.deleteDistro\",\n\t\t\t\t\t\"when\": \"viewItem =~ /^openremotewsl.explorer.distro$/\",\n\t\t\t\t\t\"group\": \"management@2\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.reopenFolderInNewWindow\",\n\t\t\t\t\t\"when\": \"viewItem == openremotewsl.explorer.folder\",\n\t\t\t\t\t\"group\": \"inline@1\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.reopenFolderInNewWindow\",\n\t\t\t\t\t\"when\": \"viewItem == openremotewsl.explorer.folder\",\n\t\t\t\t\t\"group\": \"navigation@2\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.reopenFolderInCurrentWindow\",\n\t\t\t\t\t\"when\": \"viewItem == openremotewsl.explorer.folder\",\n\t\t\t\t\t\"group\": \"navigation@1\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.deleteFolderHistoryItem\",\n\t\t\t\t\t\"when\": \"viewItem =~ /^openremotewsl.explorer.folder/\",\n\t\t\t\t\t\"group\": \"navigation@3\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"command\": \"openremotewsl.explorer.deleteFolderHistoryItem\",\n\t\t\t\t\t\"when\": \"viewItem =~ /^openremotewsl.explorer.folder/\",\n\t\t\t\t\t\"group\": \"inline@2\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"scripts\": {\n    \"vscode:prepublish\": \"npm run compile\",\n    \"compile\": \"gulp compile-extension:open-remote-wsl\",\n    \"compile-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none\",\n    \"watch\": \"gulp watch-extension:open-remote-wsl\",\n    \"watch-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose\"\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/authResolver.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport Log from './common/logger';\nimport { installCodeServer, ServerInstallError } from './serverSetup';\nimport { WSLManager } from './wsl/wslManager';\n\nexport const REMOTE_WSL_AUTHORITY = 'wsl';\n\nexport function getRemoteAuthority(distro: string) {\n\treturn `${REMOTE_WSL_AUTHORITY}+${distro}`;\n}\n\nclass Tunnel implements vscode.Tunnel {\n\tprivate _onDidDisposeEmitter = new vscode.EventEmitter<void>();\n\n\treadonly onDidDispose = this._onDidDisposeEmitter.event;\n\n\tconstructor(\n\t\treadonly remoteAddress: { port: number; host: string },\n\t\treadonly localAddress: { port: number; host: string }\n\t) {\n\t\t// If ipv6 localhost 0:0:0:0:0:0:0:1 or [::1] replace with localhost\n\t\tif (localAddress.host !== 'localhost' && localAddress.host !== '127.0.0.1') {\n\t\t\tlocalAddress.host = 'localhost';\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis._onDidDisposeEmitter.fire();\n\t}\n}\n\nexport class RemoteWSLResolver implements vscode.RemoteAuthorityResolver, vscode.Disposable {\n\n\tprivate labelFormatterDisposable: vscode.Disposable | undefined;\n\n\tconstructor(\n\t\tprivate readonly wslManager: WSLManager,\n\t\tprivate readonly logger: Log\n\t) {\n\t}\n\n\tresolve(authority: string, context: vscode.RemoteAuthorityResolverContext): Thenable<vscode.ResolverResult> {\n\t\tconst [type, distroName] = authority.split('+');\n\t\tif (type !== REMOTE_WSL_AUTHORITY) {\n\t\t\tthrow new Error(`Invalid authority type for WSL resolver: ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`Resolving wsl remote authority '${authority}' (attemp #${context.resolveAttempt})`);\n\n\t\t// It looks like default values are not loaded yet when resolving a remote,\n\t\t// so let's hardcode the default values here\n\t\tconst remoteSSHconfig = vscode.workspace.getConfiguration('remote.WSL');\n\t\tconst serverDownloadUrlTemplate = remoteSSHconfig.get<string>('serverDownloadUrlTemplate');\n\n\t\treturn vscode.window.withProgress({\n\t\t\ttitle: `Setting up WSL Distro: ${distroName}`,\n\t\t\tlocation: vscode.ProgressLocation.Notification,\n\t\t\tcancellable: false\n\t\t}, async () => {\n\t\t\ttry {\n\t\t\t\tconst installResult = await installCodeServer(this.wslManager, distroName, serverDownloadUrlTemplate, [], [], this.logger);\n\n\t\t\t\tthis.labelFormatterDisposable?.dispose();\n\t\t\t\tthis.labelFormatterDisposable = vscode.workspace.registerResourceLabelFormatter({\n\t\t\t\t\tscheme: 'vscode-remote',\n\t\t\t\t\tauthority: `${REMOTE_WSL_AUTHORITY}+*`,\n\t\t\t\t\tformatting: {\n\t\t\t\t\t\tlabel: '${path}',\n\t\t\t\t\t\tseparator: '/',\n\t\t\t\t\t\ttildify: true,\n\t\t\t\t\t\tworkspaceSuffix: `WSL: ${distroName}`,\n\t\t\t\t\t\tworkspaceTooltip: `Running in ${distroName}`\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn new vscode.ResolvedAuthority('127.0.0.1', installResult.listeningOn, installResult.connectionToken);\n\t\t\t} catch (e: unknown) {\n\t\t\t\tthis.logger.error(`Error resolving authority`, e);\n\n\t\t\t\t// Initial connection\n\t\t\t\tif (context.resolveAttempt === 1) {\n\t\t\t\t\tthis.logger.show();\n\n\t\t\t\t\tconst closeRemote = 'Close Remote';\n\t\t\t\t\tconst retry = 'Retry';\n\t\t\t\t\tconst result = await vscode.window.showErrorMessage(`Could not establish connection to WSL distro \"${distroName}\"`, { modal: true }, closeRemote, retry);\n\t\t\t\t\tif (result === closeRemote) {\n\t\t\t\t\t\tawait vscode.commands.executeCommand('workbench.action.remote.close');\n\t\t\t\t\t} else if (result === retry) {\n\t\t\t\t\t\tawait vscode.commands.executeCommand('workbench.action.reloadWindow');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (e instanceof ServerInstallError || !(e instanceof Error)) {\n\t\t\t\t\tthrow vscode.RemoteAuthorityResolverError.NotAvailable(e instanceof Error ? e.message : String(e));\n\t\t\t\t} else {\n\t\t\t\t\tthrow vscode.RemoteAuthorityResolverError.TemporarilyNotAvailable(e.message);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tasync tunnelFactory(tunnelOptions: vscode.TunnelOptions) {\n\t\treturn new Tunnel(\n\t\t\ttunnelOptions.remoteAddress,\n\t\t\t{\n\t\t\t\thost: tunnelOptions.remoteAddress.host,\n\t\t\t\tport: tunnelOptions.localAddressPort ?? tunnelOptions.remoteAddress.port\n\t\t\t}\n\t\t);\n\t}\n\n\tdispose() {\n\t\tthis.labelFormatterDisposable?.dispose();\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/commands.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getRemoteAuthority } from './authResolver';\nimport { WSLDistro, WSLManager, WSLOnlineDistro } from './wsl/wslManager';\nimport wslTerminal from './wsl/wslTerminal';\n\nasync function showDistrosPicker(wslManager: WSLManager, placeHolder: string): Promise<WSLDistro | undefined> {\n\tconst pickItemsPromise = wslManager.listDistros()\n\t\t.then(distros => distros.map(distroData => {\n\t\t\treturn {\n\t\t\t\t...distroData,\n\t\t\t\tlabel: `${distroData.name}`,\n\t\t\t\tdetail: distroData.isDefault ? 'default distro' : undefined,\n\t\t\t};\n\t\t}));\n\n\tconst picked = await vscode.window.showQuickPick(pickItemsPromise, { canPickMany: false, placeHolder });\n\treturn picked;\n}\n\nasync function showOnlineDistrosPicker(wslManager: WSLManager, placeHolder: string): Promise<WSLOnlineDistro | undefined> {\n\tconst pickItemsPromise = Promise.all([wslManager.listOnlineDistros(), wslManager.listDistros()])\n\t\t.then(([onlineDistros, localDistros]) => {\n\t\t\tconst distroToInstall = onlineDistros.filter(d => !localDistros.some(l => l.name === d.name));\n\t\t\treturn distroToInstall.map(distroData => {\n\t\t\t\treturn {\n\t\t\t\t\t...distroData,\n\t\t\t\t\tlabel: `${distroData.friendlyName}`,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\tconst picked = await vscode.window.showQuickPick(pickItemsPromise, { canPickMany: false, placeHolder });\n\treturn picked;\n}\n\nexport async function promptOpenRemoteWSLWindow(wslManager: WSLManager, useDefault: boolean, reuseWindow: boolean) {\n\tlet distroName: string | undefined;\n\tif (useDefault) {\n\t\tconst distros = await wslManager.listDistros();\n\t\tdistroName = distros.find(distro => distro.isDefault)?.name;\n\t} else {\n\t\tdistroName = (await showDistrosPicker(wslManager, 'Select WSL distro'))?.name;\n\t}\n\n\tif (!distroName) {\n\t\treturn;\n\t}\n\n\topenRemoteWSLWindow(distroName, reuseWindow);\n}\n\nexport async function promptInstallNewWSLDistro(wslManager: WSLManager) {\n\tconst distroName = (await showOnlineDistrosPicker(wslManager, 'Select the WSL distro to install'))?.name;\n\tif (!distroName) {\n\t\treturn;\n\t}\n\n\twslTerminal.runCommand(`wsl.exe --install -d ${distroName}`);\n}\n\nexport function openRemoteWSLWindow(distro: string, reuseWindow: boolean) {\n\tvscode.commands.executeCommand('vscode.newWindow', { remoteAuthority: getRemoteAuthority(distro), reuseWindow });\n}\n\nexport function openRemoteWSLLocationWindow(distro: string, path: string, reuseWindow: boolean) {\n\tvscode.commands.executeCommand('vscode.openFolder', vscode.Uri.from({ scheme: 'vscode-remote', authority: getRemoteAuthority(distro), path }), { forceNewWindow: !reuseWindow });\n}\n\nexport async function setDefaultWSLDistro(wslManager: WSLManager, distroName: string) {\n\tawait wslManager.setDefaultDistro(distroName);\n}\n\nexport async function deleteWSLDistro(wslManager: WSLManager, distroName: string) {\n\tconst deleteAction = 'Delete';\n\tconst resp = await vscode.window.showInformationMessage(`Are you sure you want to permanently delete the distro \"${distroName}\" including all its data?`, { modal: true }, deleteAction);\n\tif (resp === deleteAction) {\n\t\tawait wslManager.deleteDistro(distroName);\n\t\treturn true;\n\t}\n\treturn false;\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/common/async.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function timeout(millis: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, millis));\n}\n\nexport interface ITask<T> {\n\t(): T;\n}\n\nexport async function retry<T>(task: ITask<Promise<T>>, delay: number, retries: number): Promise<T> {\n\tlet lastError: Error | undefined;\n\n\tfor (let i = 0; i < retries; i++) {\n\t\ttry {\n\t\t\treturn await task();\n\t\t} catch (error) {\n\t\t\tlastError = error;\n\n\t\t\tawait timeout(delay);\n\t\t}\n\t}\n\n\tthrow lastError;\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/common/disposable.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport function disposeAll(disposables: vscode.Disposable[]): void {\n\twhile (disposables.length) {\n\t\tconst item = disposables.pop();\n\t\tif (item) {\n\t\t\titem.dispose();\n\t\t}\n\t}\n}\n\nexport abstract class Disposable {\n\tprivate _isDisposed = false;\n\n\tprotected _disposables: vscode.Disposable[] = [];\n\n\tpublic dispose(): any {\n\t\tif (this._isDisposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDisposed = true;\n\t\tdisposeAll(this._disposables);\n\t}\n\n\tprotected _register<T extends vscode.Disposable>(value: T): T {\n\t\tif (this._isDisposed) {\n\t\t\tvalue.dispose();\n\t\t} else {\n\t\t\tthis._disposables.push(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected get isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/common/event.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IDisposable {\n\tdispose(): void;\n}\n\nexport interface Event<T> {\n\t(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable;\n}\n\n/**\n * Returns a promise that resolves when the event fires, or when cancellation\n * is requested, whichever happens first.\n */\nexport function toPromise<T>(event: Event<T>): Promise<T>;\nexport function toPromise<T>(event: Event<T>, signal: AbortSignal): Promise<T | undefined>;\nexport function toPromise<T>(event: Event<T>, signal?: AbortSignal): Promise<T | undefined> {\n\tif (!signal) {\n\t\treturn new Promise<T>((resolve) => once(event, resolve));\n\t}\n\n\tif (signal.aborted) {\n\t\treturn Promise.resolve(undefined);\n\t}\n\n\treturn new Promise((resolve) => {\n\t\tconst d2 = once(event, (data) => {\n\t\t\t(signal as any).removeEventListener('abort', d1);\n\t\t\tresolve(data);\n\t\t});\n\n\t\tconst d1 = () => {\n\t\t\td2.dispose();\n\t\t\t(signal as any).removeEventListener('abort', d1);\n\t\t\tresolve(undefined);\n\t\t};\n\n\t\t(signal as any).addEventListener('abort', d1);\n\t});\n}\n\n/**\n * Adds a handler that handles one event on the emitter, then disposes itself.\n */\nexport const once = <T>(event: Event<T>, listener: (data: T) => void): IDisposable => {\n\tconst disposable = event((value) => {\n\t\tlistener(value);\n\t\tdisposable.dispose();\n\t});\n\n\treturn disposable;\n};\n\n/**\n * Base event emitter. Calls listeners when data is emitted.\n */\nexport class EventEmitter<T> {\n\tprivate listeners?: Array<(data: T) => void> | ((data: T) => void);\n\n\t/**\n\t * Event<T> function.\n\t */\n\tpublic readonly event: Event<T> = (listener, thisArgs, disposables) => {\n\t\tconst d = this.add(thisArgs ? listener.bind(thisArgs) : listener);\n\t\tdisposables?.push(d);\n\t\treturn d;\n\t};\n\n\t/**\n\t * Gets the number of event listeners.\n\t */\n\tpublic get size() {\n\t\tif (!this.listeners) {\n\t\t\treturn 0;\n\t\t} else if (typeof this.listeners === 'function') {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn this.listeners.length;\n\t\t}\n\t}\n\n\t/**\n\t * Emits event data.\n\t */\n\tpublic fire(value: T) {\n\t\tif (!this.listeners) {\n\t\t\t// no-op\n\t\t} else if (typeof this.listeners === 'function') {\n\t\t\tthis.listeners(value);\n\t\t} else {\n\t\t\tfor (const listener of this.listeners) {\n\t\t\t\tlistener(value);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Disposes of the emitter.\n\t */\n\tpublic dispose() {\n\t\tthis.listeners = undefined;\n\t}\n\n\tprivate add(listener: (data: T) => void): IDisposable {\n\t\tif (!this.listeners) {\n\t\t\tthis.listeners = listener;\n\t\t} else if (typeof this.listeners === 'function') {\n\t\t\tthis.listeners = [this.listeners, listener];\n\t\t} else {\n\t\t\tthis.listeners.push(listener);\n\t\t}\n\n\t\treturn { dispose: () => this.rm(listener) };\n\t}\n\n\tprivate rm(listener: (data: T) => void) {\n\t\tif (!this.listeners) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof this.listeners === 'function') {\n\t\t\tif (this.listeners === listener) {\n\t\t\t\tthis.listeners = undefined;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.listeners.indexOf(listener);\n\t\tif (index === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.listeners.length === 2) {\n\t\t\tthis.listeners = index === 0 ? this.listeners[1] : this.listeners[0];\n\t\t} else {\n\t\t\tthis.listeners = this.listeners.slice(0, index).concat(this.listeners.slice(index + 1));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/common/files.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs';\nimport * as os from 'os';\n\nconst homeDir = os.homedir();\n\nexport async function exists(path: string) {\n\ttry {\n\t\tawait fs.promises.access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function untildify(path: string) {\n\treturn path.replace(/^~(?=$|\\/|\\\\)/, homeDir);\n}\n\nexport function normalizeToSlash(path: string) {\n\treturn path.replace(/\\\\/g, '/');\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/common/logger.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\ntype LogLevel = 'Trace' | 'Info' | 'Error';\n\nexport default class Log {\n\tprivate output: vscode.OutputChannel;\n\n\tconstructor(name: string) {\n\t\tthis.output = vscode.window.createOutputChannel(name);\n\t}\n\n\tprivate data2String(data: any): string {\n\t\tif (data instanceof Error) {\n\t\t\treturn data.stack || data.message;\n\t\t}\n\t\tif (data.success === false && data.message) {\n\t\t\treturn data.message;\n\t\t}\n\t\treturn data.toString();\n\t}\n\n\tpublic trace(message: string, data?: any): void {\n\t\tthis.logLevel('Trace', message, data);\n\t}\n\n\tpublic info(message: string, data?: any): void {\n\t\tthis.logLevel('Info', message, data);\n\t}\n\n\tpublic error(message: string, data?: any): void {\n\t\tthis.logLevel('Error', message, data);\n\t}\n\n\tpublic logLevel(level: LogLevel, message: string, data?: any): void {\n\t\tthis.output.appendLine(`[${level}  - ${this.now()}] ${message}`);\n\t\tif (data) {\n\t\t\tthis.output.appendLine(this.data2String(data));\n\t\t}\n\t}\n\n\tprivate now(): string {\n\t\tconst now = new Date();\n\t\treturn padLeft(now.getUTCHours() + '', 2, '0')\n\t\t\t+ ':' + padLeft(now.getMinutes() + '', 2, '0')\n\t\t\t+ ':' + padLeft(now.getUTCSeconds() + '', 2, '0') + '.' + now.getMilliseconds();\n\t}\n\n\tpublic show() {\n\t\tthis.output.show();\n\t}\n\n\tpublic dispose() {\n\t\tthis.output.dispose();\n\t}\n}\n\nfunction padLeft(s: string, n: number, pad = ' ') {\n\treturn pad.repeat(Math.max(0, n - s.length)) + s;\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/common/platform.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const isWindows = process.platform === 'win32';\nexport const isMacintosh = process.platform === 'darwin';\nexport const isLinux = process.platform === 'linux';\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/common/ports.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as net from 'net';\n\n/**\n * Finds a random unused port assigned by the operating system. Will reject in case no free port can be found.\n */\nexport function findRandomPort(): Promise<number> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst server = net.createServer({ pauseOnConnect: true });\n\t\tserver.on('error', reject);\n\t\tserver.on('listening', () => {\n\t\t\tconst port = (server.address() as net.AddressInfo).port;\n\t\t\tserver.close(() => resolve(port));\n\t\t});\n\t\tserver.listen(0, '127.0.0.1');\n\t});\n}\n\n/**\n * Given a start point and a max number of retries, will find a port that\n * is openable. Will return 0 in case no free port can be found.\n */\nexport function findFreePort(startPort: number, giveUpAfter: number, timeout: number, stride = 1): Promise<number> {\n\tlet done = false;\n\n\treturn new Promise(resolve => {\n\t\tconst timeoutHandle = setTimeout(() => {\n\t\t\tif (!done) {\n\t\t\t\tdone = true;\n\t\t\t\treturn resolve(0);\n\t\t\t}\n\t\t}, timeout);\n\n\t\tdoFindFreePort(startPort, giveUpAfter, stride, (port) => {\n\t\t\tif (!done) {\n\t\t\t\tdone = true;\n\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t\treturn resolve(port);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction doFindFreePort(startPort: number, giveUpAfter: number, stride: number, clb: (port: number) => void): void {\n\tif (giveUpAfter === 0) {\n\t\treturn clb(0);\n\t}\n\n\tconst client = new net.Socket();\n\n\t// If we can connect to the port it means the port is already taken so we continue searching\n\tclient.once('connect', () => {\n\t\tdispose(client);\n\n\t\treturn doFindFreePort(startPort + stride, giveUpAfter - 1, stride, clb);\n\t});\n\n\tclient.once('data', () => {\n\t\t// this listener is required since node.js 8.x\n\t});\n\n\tclient.once('error', (err: Error & { code?: string }) => {\n\t\tdispose(client);\n\n\t\t// If we receive any non ECONNREFUSED error, it means the port is used but we cannot connect\n\t\tif (err.code !== 'ECONNREFUSED') {\n\t\t\treturn doFindFreePort(startPort + stride, giveUpAfter - 1, stride, clb);\n\t\t}\n\n\t\t// Otherwise it means the port is free to use!\n\t\treturn clb(startPort);\n\t});\n\n\tclient.connect(startPort, '127.0.0.1');\n}\n\n/**\n * Uses listen instead of connect. Is faster, but if there is another listener on 0.0.0.0 then this will take 127.0.0.1 from that listener.\n */\nexport function findFreePortFaster(startPort: number, giveUpAfter: number, timeout: number): Promise<number> {\n\tlet resolved = false;\n\tlet timeoutHandle: NodeJS.Timeout | undefined = undefined;\n\tlet countTried = 1;\n\tconst server = net.createServer({ pauseOnConnect: true });\n\tfunction doResolve(port: number, resolve: (port: number) => void) {\n\t\tif (!resolved) {\n\t\t\tresolved = true;\n\t\t\tserver.removeAllListeners();\n\t\t\tserver.close();\n\t\t\tif (timeoutHandle) {\n\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t}\n\t\t\tresolve(port);\n\t\t}\n\t}\n\treturn new Promise<number>(resolve => {\n\t\ttimeoutHandle = setTimeout(() => {\n\t\t\tdoResolve(0, resolve);\n\t\t}, timeout);\n\n\t\tserver.on('listening', () => {\n\t\t\tdoResolve(startPort, resolve);\n\t\t});\n\t\tserver.on('error', err => {\n\t\t\tif (err && ((<any>err).code === 'EADDRINUSE' || (<any>err).code === 'EACCES') && (countTried < giveUpAfter)) {\n\t\t\t\tstartPort++;\n\t\t\t\tcountTried++;\n\t\t\t\tserver.listen(startPort, '127.0.0.1');\n\t\t\t} else {\n\t\t\t\tdoResolve(0, resolve);\n\t\t\t}\n\t\t});\n\t\tserver.on('close', () => {\n\t\t\tdoResolve(0, resolve);\n\t\t});\n\t\tserver.listen(startPort, '127.0.0.1');\n\t});\n}\n\nfunction dispose(socket: net.Socket): void {\n\ttry {\n\t\tsocket.removeAllListeners('connect');\n\t\tsocket.removeAllListeners('error');\n\t\tsocket.end();\n\t\tsocket.destroy();\n\t\tsocket.unref();\n\t} catch (error) {\n\t\tconsole.error(error); // otherwise this error would get lost in the callback chain\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/distroTreeView.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as path from 'path';\nimport { RemoteLocationHistory } from './remoteLocationHistory';\nimport { Disposable } from './common/disposable';\nimport { openRemoteWSLWindow, openRemoteWSLLocationWindow, promptInstallNewWSLDistro, deleteWSLDistro, setDefaultWSLDistro } from './commands';\nimport { WSLManager } from './wsl/wslManager';\n\nclass DistroItem {\n\tconstructor(\n\t\tpublic name: string,\n\t\tpublic isDefault: boolean,\n\t\tpublic locations: string[]\n\t) {\n\t}\n}\n\nclass DistroLocationItem {\n\tconstructor(\n\t\tpublic path: string,\n\t\tpublic name: string\n\t) {\n\t}\n}\n\ntype DataTreeItem = DistroItem | DistroLocationItem;\n\nexport class DistroTreeDataProvider extends Disposable implements vscode.TreeDataProvider<DataTreeItem> {\n\n\tprivate readonly _onDidChangeTreeData = this._register(new vscode.EventEmitter<DataTreeItem | DataTreeItem[] | void>());\n\tpublic readonly onDidChangeTreeData = this._onDidChangeTreeData.event;\n\n\tconstructor(\n\t\tprivate readonly locationHistory: RemoteLocationHistory,\n\t\tprivate readonly wslManager: WSLManager\n\t) {\n\t\tsuper();\n\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.addDistro', () => promptInstallNewWSLDistro(wslManager)));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.refresh', () => this.refresh()));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.emptyWindowInNewWindow', e => this.openRemoteWSLWindow(e, false)));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.emptyWindowInCurrentWindow', e => this.openRemoteWSLWindow(e, true)));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.reopenFolderInNewWindow', e => this.openRemoteWSLocationWindow(e, false)));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.reopenFolderInCurrentWindow', e => this.openRemoteWSLocationWindow(e, true)));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.deleteFolderHistoryItem', e => this.deleteDistroLocation(e)));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.setDefaultDistro', e => this.setDefaultDistro(e)));\n\t\tthis._register(vscode.commands.registerCommand('openremotewsl.explorer.deleteDistro', e => this.deleteDistro(e)));\n\t}\n\n\tgetTreeItem(element: DataTreeItem): vscode.TreeItem {\n\t\tif (element instanceof DistroLocationItem) {\n\t\t\tconst label = path.posix.basename(element.path).replace(/\\.code-workspace$/, ' (Workspace)');\n\t\t\tconst treeItem = new vscode.TreeItem(label);\n\t\t\ttreeItem.description = path.posix.dirname(element.path);\n\t\t\ttreeItem.iconPath = new vscode.ThemeIcon('folder');\n\t\t\ttreeItem.contextValue = 'openremotewsl.explorer.folder';\n\t\t\treturn treeItem;\n\t\t}\n\n\t\tconst treeItem = new vscode.TreeItem(element.name);\n\t\ttreeItem.description = element.isDefault ? 'default distro' : undefined;\n\t\ttreeItem.collapsibleState = element.locations.length ? vscode.TreeItemCollapsibleState.Collapsed : vscode.TreeItemCollapsibleState.None;\n\t\ttreeItem.iconPath = new vscode.ThemeIcon('vm');\n\t\ttreeItem.contextValue = 'openremotewsl.explorer.distro';\n\t\treturn treeItem;\n\t}\n\n\tasync getChildren(element?: DistroItem): Promise<DataTreeItem[]> {\n\t\tif (!element) {\n\t\t\tconst distros = await this.wslManager.listDistros();\n\t\t\treturn distros.map(distro => new DistroItem(distro.name, distro.isDefault, this.locationHistory.getHistory(distro.name)));\n\t\t}\n\t\tif (element instanceof DistroItem) {\n\t\t\treturn element.locations.map(location => new DistroLocationItem(location, element.name));\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate refresh() {\n\t\tthis._onDidChangeTreeData.fire();\n\t}\n\n\tprivate async deleteDistroLocation(element: DistroLocationItem) {\n\t\tawait this.locationHistory.removeLocation(element.name, element.path);\n\t\tthis.refresh();\n\t}\n\n\tprivate async openRemoteWSLWindow(element: DistroItem, reuseWindow: boolean) {\n\t\topenRemoteWSLWindow(element.name, reuseWindow);\n\t}\n\n\tprivate async openRemoteWSLocationWindow(element: DistroLocationItem, reuseWindow: boolean) {\n\t\topenRemoteWSLLocationWindow(element.name, element.path, reuseWindow);\n\t}\n\n\tprivate async setDefaultDistro(element: DistroItem) {\n\t\tawait setDefaultWSLDistro(this.wslManager, element.name);\n\t\tthis.refresh();\n\t}\n\n\tprivate async deleteDistro(element: DistroItem) {\n\t\tawait deleteWSLDistro(this.wslManager, element.name);\n\t\tthis.refresh();\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport Log from './common/logger';\nimport { RemoteWSLResolver, REMOTE_WSL_AUTHORITY } from './authResolver';\nimport { promptOpenRemoteWSLWindow } from './commands';\nimport { DistroTreeDataProvider } from './distroTreeView';\nimport { getRemoteWorkspaceLocationData, RemoteLocationHistory } from './remoteLocationHistory';\nimport { WSLManager } from './wsl/wslManager';\nimport { isWindows } from './common/platform';\n\nexport async function activate(context: vscode.ExtensionContext) {\n\tif (!isWindows) {\n\t\treturn;\n\t}\n\n\tconst logger = new Log('Remote - WSL');\n\tcontext.subscriptions.push(logger);\n\n\tconst wslManager = new WSLManager(logger);\n\tconst remoteWSLResolver = new RemoteWSLResolver(wslManager, logger);\n\tcontext.subscriptions.push(vscode.workspace.registerRemoteAuthorityResolver(REMOTE_WSL_AUTHORITY, remoteWSLResolver));\n\tcontext.subscriptions.push(remoteWSLResolver);\n\n\tconst locationHistory = new RemoteLocationHistory(context);\n\tconst locationData = getRemoteWorkspaceLocationData();\n\tif (locationData) {\n\t\tawait locationHistory.addLocation(locationData[0], locationData[1]);\n\t}\n\n\tconst distroTreeDataProvider = new DistroTreeDataProvider(locationHistory, wslManager);\n\tcontext.subscriptions.push(vscode.window.createTreeView('wslTargets', { treeDataProvider: distroTreeDataProvider }));\n\tcontext.subscriptions.push(distroTreeDataProvider);\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotewsl.connect', () => promptOpenRemoteWSLWindow(wslManager, true, true)));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotewsl.connectInNewWindow', () => promptOpenRemoteWSLWindow(wslManager, true, false)));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotewsl.connectUsingDistro', () => promptOpenRemoteWSLWindow(wslManager, false, true)));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotewsl.connectUsingDistroInNewWindow', () => promptOpenRemoteWSLWindow(wslManager, false, false)));\n\tcontext.subscriptions.push(vscode.commands.registerCommand('openremotewsl.showLog', () => logger.show()));\n}\n\nexport function deactivate() {\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/remoteLocationHistory.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { REMOTE_WSL_AUTHORITY } from './authResolver';\n\nexport class RemoteLocationHistory {\n\tprivate static STORAGE_KEY = 'remoteLocationHistory_v0';\n\n\tprivate remoteLocationHistory: Record<string, string[]> = {};\n\n\tconstructor(private context: vscode.ExtensionContext) {\n\t\t// context.globalState.update(RemoteLocationHistory.STORAGE_KEY, undefined);\n\t\tthis.remoteLocationHistory = context.globalState.get(RemoteLocationHistory.STORAGE_KEY) || {};\n\t}\n\n\tgetHistory(host: string): string[] {\n\t\treturn this.remoteLocationHistory[host] || [];\n\t}\n\n\tasync addLocation(host: string, path: string) {\n\t\tconst hostLocations = this.remoteLocationHistory[host] || [];\n\t\tif (!hostLocations.includes(path)) {\n\t\t\thostLocations.unshift(path);\n\t\t\tthis.remoteLocationHistory[host] = hostLocations;\n\n\t\t\tawait this.context.globalState.update(RemoteLocationHistory.STORAGE_KEY, this.remoteLocationHistory);\n\t\t}\n\t}\n\n\tasync removeLocation(host: string, path: string) {\n\t\tlet hostLocations = this.remoteLocationHistory[host] || [];\n\t\thostLocations = hostLocations.filter(l => l !== path);\n\t\tthis.remoteLocationHistory[host] = hostLocations;\n\n\t\tawait this.context.globalState.update(RemoteLocationHistory.STORAGE_KEY, this.remoteLocationHistory);\n\t}\n}\n\nexport function getRemoteWorkspaceLocationData(): [string, string] | undefined {\n\tlet location = vscode.workspace.workspaceFile;\n\tif (location && location.scheme === 'vscode-remote' && location.authority.startsWith(REMOTE_WSL_AUTHORITY) && location.path.endsWith('.code-workspace')) {\n\t\tconst [, distroName] = location.authority.split('+');\n\t\treturn [distroName, location.path];\n\t}\n\n\tlocation = vscode.workspace.workspaceFolders?.[0].uri;\n\tif (location && location.scheme === 'vscode-remote' && location.authority.startsWith(REMOTE_WSL_AUTHORITY)) {\n\t\tconst [, distroName] = location.authority.split('+');\n\t\treturn [distroName, location.path];\n\t}\n\n\treturn undefined;\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/serverConfig.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nlet vscodeProductJson: any;\nasync function getVSCodeProductJson() {\n\tif (!vscodeProductJson) {\n\t\tconst productJsonStr = await fs.promises.readFile(path.join(vscode.env.appRoot, 'product.json'), 'utf8');\n\t\tvscodeProductJson = JSON.parse(productJsonStr);\n\t}\n\n\treturn vscodeProductJson;\n}\n\nexport interface IServerConfig {\n\tversion: string;\n\tcommit: string;\n\tquality: string;\n\trelease?: string; // void-like specific\n\tserverApplicationName: string;\n\tserverDataFolderName: string;\n\tserverDownloadUrlTemplate?: string; // void-like specific\n}\n\nexport async function getVSCodeServerConfig(): Promise<IServerConfig> {\n\tconst productJson = await getVSCodeProductJson();\n\n\treturn {\n\t\tversion: vscode.version.replace('-insider', ''),\n\t\tcommit: productJson.commit,\n\t\tquality: productJson.quality,\n\t\trelease: productJson.release,\n\t\tserverApplicationName: productJson.serverApplicationName,\n\t\tserverDataFolderName: productJson.serverDataFolderName,\n\t\tserverDownloadUrlTemplate: productJson.serverDownloadUrlTemplate,\n\t};\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/serverSetup.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as crypto from 'crypto';\nimport Log from './common/logger';\nimport { getVSCodeServerConfig } from './serverConfig';\nimport { WSLManager } from './wsl/wslManager';\n\nexport interface ServerInstallOptions {\n\tid: string;\n\tquality: string;\n\tcommit: string;\n\tversion: string;\n\trelease?: string; // void specific\n\textensionIds: string[];\n\tenvVariables: string[];\n\tserverApplicationName: string;\n\tserverDataFolderName: string;\n\tserverDownloadUrlTemplate: string;\n}\n\nexport interface ServerInstallResult {\n\texitCode: number;\n\tlisteningOn: number;\n\tconnectionToken: string;\n\tlogFile: string;\n\tosReleaseId: string;\n\tarch: string;\n\tplatform: string;\n\ttmpDir: string;\n\t[key: string]: any;\n}\n\nexport class ServerInstallError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n\nconst DEFAULT_DOWNLOAD_URL_TEMPLATE = 'https://github.com/voideditor/binaries/releases/download/${version}/void-reh-${os}-${arch}-${version}.tar.gz';\n\nexport async function installCodeServer(wslManager: WSLManager, distroName: string, serverDownloadUrlTemplate: string | undefined, extensionIds: string[], envVariables: string[], logger: Log): Promise<ServerInstallResult> {\n\tconst scriptId = crypto.randomBytes(12).toString('hex');\n\n\tconst vscodeServerConfig = await getVSCodeServerConfig();\n\tconst installOptions: ServerInstallOptions = {\n\t\tid: scriptId,\n\t\tversion: vscodeServerConfig.version,\n\t\tcommit: vscodeServerConfig.commit,\n\t\tquality: vscodeServerConfig.quality,\n\t\trelease: vscodeServerConfig.release,\n\t\textensionIds,\n\t\tenvVariables,\n\t\tserverApplicationName: vscodeServerConfig.serverApplicationName,\n\t\tserverDataFolderName: vscodeServerConfig.serverDataFolderName,\n\t\tserverDownloadUrlTemplate: serverDownloadUrlTemplate ?? vscodeServerConfig.serverDownloadUrlTemplate ?? DEFAULT_DOWNLOAD_URL_TEMPLATE,\n\t};\n\n\tconst installServerScript = generateBashInstallScript(installOptions);\n\n\t// Fish shell does not support heredoc so let's workaround it using -c option,\n\t// also replace single quotes (') within the script with ('\\'') as there's no quoting within single quotes, see https://unix.stackexchange.com/a/24676\n\tconst resp = await wslManager.exec('bash', ['-c', `'${installServerScript.replace(/'/g, `'\\\\''`)}'`], distroName);\n\n\tconst endScriptRegex = new RegExp(`${scriptId}: Server installation script done`, 'm');\n\tconst commandOutput = await Promise.race([\n\t\tresp.exitPromise.then(result => ({ stdout: resp.stdout, stderr: resp.stderr, exitCode: result.exitCode })),\n\t\tnew Promise<{ stdout: string; stderr: string; exitCode: number }>((resolve) => {\n\t\t\tresp.onStdoutData(buffer => {\n\t\t\t\tif (endScriptRegex.test(buffer.toString('utf8'))) {\n\t\t\t\t\tresolve({ stdout: resp.stdout, stderr: resp.stderr, exitCode: 0 });\n\t\t\t\t}\n\t\t\t});\n\t\t})\n\t]);\n\n\tif (commandOutput.exitCode) {\n\t\tlogger.trace('Server install command stderr:', commandOutput.stderr);\n\t}\n\tlogger.trace('Server install command stdout:', commandOutput.stdout);\n\n\tconst resultMap = parseServerInstallOutput(commandOutput.stdout, scriptId);\n\tif (!resultMap) {\n\t\tthrow new ServerInstallError(`Failed parsing install script output`);\n\t}\n\n\tconst exitCode = parseInt(resultMap.exitCode, 10);\n\tif (exitCode !== 0) {\n\t\tthrow new ServerInstallError(`Couldn't install void server on remote server, install script returned non-zero exit status`);\n\t}\n\n\tconst listeningOn = parseInt(resultMap.listeningOn, 10);\n\n\tconst remoteEnvVars = Object.fromEntries(Object.entries(resultMap).filter(([key,]) => envVariables.includes(key)));\n\n\treturn {\n\t\texitCode,\n\t\tlisteningOn,\n\t\tconnectionToken: resultMap.connectionToken,\n\t\tlogFile: resultMap.logFile,\n\t\tosReleaseId: resultMap.osReleaseId,\n\t\tarch: resultMap.arch,\n\t\tplatform: resultMap.platform,\n\t\ttmpDir: resultMap.tmpDir,\n\t\t...remoteEnvVars\n\t};\n}\n\nfunction parseServerInstallOutput(str: string, scriptId: string): { [k: string]: string } | undefined {\n\tconst startResultStr = `${scriptId}: start`;\n\tconst endResultStr = `${scriptId}: end`;\n\n\tconst startResultIdx = str.indexOf(startResultStr);\n\tif (startResultIdx < 0) {\n\t\treturn undefined;\n\t}\n\n\tconst endResultIdx = str.indexOf(endResultStr, startResultIdx + startResultStr.length);\n\tif (endResultIdx < 0) {\n\t\treturn undefined;\n\t}\n\n\tconst installResult = str.substring(startResultIdx + startResultStr.length, endResultIdx);\n\n\tconst resultMap: { [k: string]: string } = {};\n\tconst resultArr = installResult.split(/\\r?\\n/);\n\tfor (const line of resultArr) {\n\t\tconst [key, value] = line.split('==');\n\t\tresultMap[key] = value;\n\t}\n\n\treturn resultMap;\n}\n\nfunction generateBashInstallScript({ id, quality, version, commit, release, extensionIds, envVariables, serverApplicationName, serverDataFolderName, serverDownloadUrlTemplate }: ServerInstallOptions) {\n\tconst extensions = extensionIds.map(id => '--install-extension ' + id).join(' ');\n\treturn `\n# Server installation script\n\nTMP_DIR=\"\\${XDG_RUNTIME_DIR:-\"/tmp\"}\"\n\nDISTRO_VERSION=\"${version}\"\nDISTRO_COMMIT=\"${commit}\"\nDISTRO_QUALITY=\"${quality}\"\nDISTRO_VSCODIUM_RELEASE=\"${release ?? ''}\"\n\nSERVER_APP_NAME=\"${serverApplicationName}\"\nSERVER_INITIAL_EXTENSIONS=\"${extensions}\"\nSERVER_LISTEN_FLAG=\"--port=0\"\nSERVER_DATA_DIR=\"$HOME/${serverDataFolderName}\"\nSERVER_DIR=\"$SERVER_DATA_DIR/bin/$DISTRO_COMMIT\"\nSERVER_SCRIPT=\"$SERVER_DIR/bin/$SERVER_APP_NAME\"\nSERVER_LOGFILE=\"$SERVER_DATA_DIR/.$DISTRO_COMMIT.log\"\nSERVER_PIDFILE=\"$SERVER_DATA_DIR/.$DISTRO_COMMIT.pid\"\nSERVER_TOKENFILE=\"$SERVER_DATA_DIR/.$DISTRO_COMMIT.token\"\nSERVER_OS=\nSERVER_ARCH=\nSERVER_CONNECTION_TOKEN=\nSERVER_DOWNLOAD_URL=\n\nLISTENING_ON=\nOS_RELEASE_ID=\nARCH=\nPLATFORM=\n\n# Mimic output from logs of remote-ssh extension\nprint_install_results_and_exit() {\n\techo \"${id}: start\"\n\techo \"exitCode==$1==\"\n\techo \"listeningOn==$LISTENING_ON==\"\n\techo \"connectionToken==$SERVER_CONNECTION_TOKEN==\"\n\techo \"logFile==$SERVER_LOGFILE==\"\n\techo \"osReleaseId==$OS_RELEASE_ID==\"\n\techo \"arch==$ARCH==\"\n\techo \"platform==$PLATFORM==\"\n\techo \"tmpDir==$TMP_DIR==\"\n\t${envVariables.map(envVar => `echo \"${envVar}==$${envVar}==\"`).join('\\n')}\n\techo \"${id}: end\"\n\texit 0\n}\n\n# Check if platform is supported\nPLATFORM=\"$(uname -s)\"\ncase $PLATFORM in\n\tLinux)\n\t\tSERVER_OS=\"linux\"\n\t\t;;\n\t*)\n\t\techo \"Error platform not supported: $PLATFORM\"\n\t\tprint_install_results_and_exit 1\n\t\t;;\nesac\n\n# Check machine architecture\nARCH=\"$(uname -m)\"\ncase $ARCH in\n\tx86_64 | amd64)\n\t\tSERVER_ARCH=\"x64\"\n\t\t;;\n\tarmv7l | armv8l)\n\t\tSERVER_ARCH=\"armhf\"\n\t\t;;\n\tarm64 | aarch64)\n\t\tSERVER_ARCH=\"arm64\"\n\t\t;;\n\t*)\n\t\techo \"Error architecture not supported: $ARCH\"\n\t\tprint_install_results_and_exit 1\n\t\t;;\nesac\n\n# https://www.freedesktop.org/software/systemd/man/os-release.html\nOS_RELEASE_ID=\"$(grep -i '^ID=' /etc/os-release 2>/dev/null | sed 's/^ID=//gi' | sed 's/\"//g')\"\nif [[ -z $OS_RELEASE_ID ]]; then\n\tOS_RELEASE_ID=\"$(grep -i '^ID=' /usr/lib/os-release 2>/dev/null | sed 's/^ID=//gi' | sed 's/\"//g')\"\n\tif [[ -z $OS_RELEASE_ID ]]; then\n\t\tOS_RELEASE_ID=\"unknown\"\n\tfi\nfi\n\n# Create installation folder\nif [[ ! -d $SERVER_DIR ]]; then\n\tmkdir -p $SERVER_DIR\n\tif (( $? > 0 )); then\n\t\techo \"Error creating server install directory\"\n\t\tprint_install_results_and_exit 1\n\tfi\nfi\n\nSERVER_DOWNLOAD_URL=\"$(echo \"${serverDownloadUrlTemplate.replace(/\\$\\{/g, '\\\\${')}\" | sed \"s/\\\\\\${quality}/$DISTRO_QUALITY/g\" | sed \"s/\\\\\\${version}/$DISTRO_VERSION/g\" | sed \"s/\\\\\\${commit}/$DISTRO_COMMIT/g\" | sed \"s/\\\\\\${os}/$SERVER_OS/g\" | sed \"s/\\\\\\${arch}/$SERVER_ARCH/g\" | sed \"s/\\\\\\${release}/$DISTRO_VSCODIUM_RELEASE/g\")\"\n\n# Check if server script is already installed\nif [[ ! -f $SERVER_SCRIPT ]]; then\n\tif [[ \"$SERVER_OS\" = \"dragonfly\" ]] || [[ \"$SERVER_OS\" = \"freebsd\" ]]; then\n\t\techo \"Error \"$SERVER_OS\" needs manual installation of remote extension host\"\n\t\tprint_install_results_and_exit 1\n\tfi\n\n\tpushd $SERVER_DIR > /dev/null\n\n\tif [[ ! -z $(which wget) ]]; then\n\t\twget --tries=3 --timeout=10 --continue --no-verbose -O vscode-server.tar.gz $SERVER_DOWNLOAD_URL\n\telif [[ ! -z $(which curl) ]]; then\n\t\tcurl --retry 3 --connect-timeout 10 --location --show-error --silent --output vscode-server.tar.gz $SERVER_DOWNLOAD_URL\n\telse\n\t\techo \"Error no tool to download server binary\"\n\t\tprint_install_results_and_exit 1\n\tfi\n\n\tif (( $? > 0 )); then\n\t\techo \"Error downloading server from $SERVER_DOWNLOAD_URL\"\n\t\tprint_install_results_and_exit 1\n\tfi\n\n\ttar -xf vscode-server.tar.gz --strip-components 1\n\tif (( $? > 0 )); then\n\t\techo \"Error while extracting server contents\"\n\t\tprint_install_results_and_exit 1\n\tfi\n\n\tif [[ ! -f $SERVER_SCRIPT ]]; then\n\t\techo \"Error server contents are corrupted\"\n\t\tprint_install_results_and_exit 1\n\tfi\n\n\trm -f vscode-server.tar.gz\n\n\tpopd > /dev/null\nelse\n\techo \"Server script already installed in $SERVER_SCRIPT\"\nfi\n\n# Try to find if server is already running\nif [[ -f $SERVER_PIDFILE ]]; then\n\tSERVER_PID=\"$(cat $SERVER_PIDFILE)\"\n\tSERVER_RUNNING_PROCESS=\"$(ps -o pid,args -p $SERVER_PID | grep $SERVER_SCRIPT)\"\nelse\n\tSERVER_RUNNING_PROCESS=\"$(ps -o pid,args -A | grep $SERVER_SCRIPT | grep -v grep)\"\nfi\n\nif [[ -z $SERVER_RUNNING_PROCESS ]]; then\n\tif [[ -f $SERVER_LOGFILE ]]; then\n\t\trm $SERVER_LOGFILE\n\tfi\n\tif [[ -f $SERVER_TOKENFILE ]]; then\n\t\trm $SERVER_TOKENFILE\n\tfi\n\n\ttouch $SERVER_TOKENFILE\n\tchmod 600 $SERVER_TOKENFILE\n\tSERVER_CONNECTION_TOKEN=\"${crypto.randomUUID()}\"\n\techo $SERVER_CONNECTION_TOKEN > $SERVER_TOKENFILE\n\n\t$SERVER_SCRIPT --start-server --host=127.0.0.1 $SERVER_LISTEN_FLAG $SERVER_INITIAL_EXTENSIONS --connection-token-file $SERVER_TOKENFILE --telemetry-level off --use-host-proxy --disable-websocket-compression --without-browser-env-var --enable-remote-auto-shutdown --accept-server-license-terms &> $SERVER_LOGFILE &\n\techo $! > $SERVER_PIDFILE\nelse\n\techo \"Server script is already running $SERVER_SCRIPT\"\nfi\n\nif [[ -f $SERVER_TOKENFILE ]]; then\n\tSERVER_CONNECTION_TOKEN=\"$(cat $SERVER_TOKENFILE)\"\nelse\n\techo \"Error server token file not found $SERVER_TOKENFILE\"\n\tprint_install_results_and_exit 1\nfi\n\nif [[ -f $SERVER_LOGFILE ]]; then\n\tfor i in {1..5}; do\n\t\tLISTENING_ON=\"$(cat $SERVER_LOGFILE | grep -E 'Extension host agent listening on .+' | sed 's/Extension host agent listening on //')\"\n\t\tif [[ -n $LISTENING_ON ]]; then\n\t\t\tbreak\n\t\tfi\n\t\tsleep 0.5\n\tdone\n\n\tif [[ -z $LISTENING_ON ]]; then\n\t\techo \"Error server did not start sucessfully\"\n\t\tprint_install_results_and_exit 1\n\tfi\nelse\n\techo \"Error server log file not found $SERVER_LOGFILE\"\n\tprint_install_results_and_exit 1\nfi\n\n# Finish server setup and keep script running\nif [[ -z $SERVER_RUNNING_PROCESS ]]; then\n\techo \"${id}: start\"\n\techo \"exitCode==0==\"\n\techo \"listeningOn==$LISTENING_ON==\"\n\techo \"connectionToken==$SERVER_CONNECTION_TOKEN==\"\n\techo \"logFile==$SERVER_LOGFILE==\"\n\techo \"osReleaseId==$OS_RELEASE_ID==\"\n\techo \"arch==$ARCH==\"\n\techo \"platform==$PLATFORM==\"\n\techo \"tmpDir==$TMP_DIR==\"\n\t${envVariables.map(envVar => `echo \"${envVar}==$${envVar}==\"`).join('\\n')}\n\techo \"${id}: end\"\n\n\techo \"${id}: Server installation script done\"\n\n\tSERVER_PID=\"$(cat $SERVER_PIDFILE)\"\n\tSERVER_RUNNING_PROCESS=\"$(ps -o pid,args -p $SERVER_PID | grep $SERVER_SCRIPT)\"\n\twhile [[ -n $SERVER_RUNNING_PROCESS ]]; do\n\t\tsleep 300;\n\t\tSERVER_RUNNING_PROCESS=\"$(ps -o pid,args -p $SERVER_PID | grep $SERVER_SCRIPT)\"\n\tdone\nelse\n\tprint_install_results_and_exit 0\nfi\n`;\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/wsl/wslManager.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as cp from 'child_process';\nimport Log from '../common/logger';\nimport { EventEmitter } from '../common/event';\n\nconst wslBinary = 'wsl.exe';\n\nexport interface WSLDistro {\n\tisDefault: boolean;\n\tname: string;\n\tstate: string;\n\tversion: string;\n}\n\nexport interface WSLOnlineDistro {\n\tname: string;\n\tfriendlyName: string;\n}\n\nexport class WSLManager {\n\tconstructor(private readonly logger: Log) {\n\t}\n\n\tasync listDistros() {\n\t\tconst resp = this._runWSLCommand(['--list', '--verbose'], 'utf16le');\n\t\tconst { exitCode } = await resp.exitPromise;\n\t\tconst { stdout, stderr } = resp;\n\t\tif (exitCode) {\n\t\t\tthis.logger.trace(`Command wsl listDistros exited with code ${exitCode}`, stdout + '\\n\\n' + stderr);\n\t\t\tthrow new Error(`Command wsl listDistros exited with code ${exitCode}`);\n\t\t}\n\n\t\tconst regex = /(?<default>\\*|\\s)\\s+(?<name>[\\w\\.-]+)\\s+(?<state>[\\w]+)\\s+(?<version>\\d)/;\n\t\tconst distros: WSLDistro[] = [];\n\t\tfor (const line of stdout.split(/\\r?\\n/)) {\n\t\t\tconst matches = line.match(regex);\n\t\t\tif (matches && matches.groups) {\n\t\t\t\tdistros.push({\n\t\t\t\t\tisDefault: matches.groups.default === '*',\n\t\t\t\t\tname: matches.groups.name,\n\t\t\t\t\tstate: matches.groups.state,\n\t\t\t\t\tversion: matches.groups.version,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn distros;\n\t}\n\n\tasync listOnlineDistros() {\n\t\tconst resp = this._runWSLCommand(['--list', '--online'], 'utf16le');\n\t\tconst { exitCode } = await resp.exitPromise;\n\t\tconst { stdout, stderr } = resp;\n\t\tif (exitCode) {\n\t\t\tthis.logger.trace(`Command wsl listOnlineDistros exited with code ${exitCode}`, stdout + '\\n\\n' + stderr);\n\t\t\tthrow new Error(`Command wsl listOnlineDistros exited with code ${exitCode}`);\n\t\t}\n\n\t\tlet lines = stdout.split(/\\r?\\n/);\n\t\tconst idx = lines.findIndex(l => /\\s*NAME\\s+FRIENDLY NAME\\s*/.test(l));\n\t\tlines = lines.slice(idx + 1);\n\n\t\tconst regex = /(?<name>[\\w\\.-]+)\\s+(?<friendlyName>\\w.+\\w)/;\n\t\tconst distros: WSLOnlineDistro[] = [];\n\t\tfor (const line of lines) {\n\t\t\tconst matches = line.match(regex);\n\t\t\tif (matches && matches.groups) {\n\t\t\t\tdistros.push({\n\t\t\t\t\tname: matches.groups.name,\n\t\t\t\t\tfriendlyName: matches.groups.friendlyName,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn distros;\n\t}\n\n\tasync setDefaultDistro(distroName: string) {\n\t\tconst resp = this._runWSLCommand(['--set-default', distroName], 'utf16le');\n\t\tconst { exitCode } = await resp.exitPromise;\n\t\tconst { stdout, stderr } = resp;\n\t\tif (exitCode) {\n\t\t\tthis.logger.trace(`Command wsl setDefaultDistro exited with code ${exitCode}`, stdout + '\\n\\n' + stderr);\n\t\t\tthrow new Error(`Command wsl setDefaultDistro exited with code ${exitCode}`);\n\t\t}\n\t}\n\n\tasync deleteDistro(distroName: string) {\n\t\tconst resp = this._runWSLCommand(['--unregister', distroName], 'utf16le');\n\t\tconst { exitCode } = await resp.exitPromise;\n\t\tconst { stdout, stderr } = resp;\n\t\tif (exitCode) {\n\t\t\tthis.logger.trace(`Command wsl deleteDistro exited with code ${exitCode}`, stdout + '\\n\\n' + stderr);\n\t\t\tthrow new Error(`Command wsl deleteDistro exited with code ${exitCode}`);\n\t\t}\n\t}\n\n\tasync exec(cmd: string, args: string[], distro: string) {\n\t\treturn this._runWSLCommand(['--distribution', distro, '--', cmd, ...args], 'utf8');\n\t}\n\n\tprivate _runWSLCommand(args: string[], encoding: 'utf8' | 'utf16le') {\n\t\tthis.logger.trace(`Running WSL command: ${wslBinary} ${args.join(' ')}`);\n\n\t\tconst cmd = cp.spawn(wslBinary, args, { windowsHide: true, windowsVerbatimArguments: true });\n\n\t\tconst stdoutDataEmitter = new EventEmitter<Buffer>();\n\t\tconst stdoutData: Buffer[] = [];\n\t\tconst stderrDataEmitter = new EventEmitter<Buffer>();\n\t\tconst stderrData: Buffer[] = [];\n\t\tcmd.stdout.on('data', (data: Buffer) => {\n\t\t\tstdoutData.push(data);\n\t\t\tstdoutDataEmitter.fire(data);\n\t\t});\n\t\tcmd.stderr.on('data', (data: Buffer) => {\n\t\t\tstderrData.push(data);\n\t\t\tstderrDataEmitter.fire(data);\n\t\t});\n\n\t\tconst exitPromise = new Promise<{ exitCode: number }>((resolve, reject) => {\n\t\t\tcmd.on('error', (err) => {\n\t\t\t\tthis.logger.error(`Error running WSL command: ${wslBinary} ${args.join(' ')}`, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t\tcmd.on('exit', (code, _signal) => {\n\t\t\t\tresolve({ exitCode: code ?? 0 });\n\t\t\t});\n\t\t});\n\n\t\treturn {\n\t\t\tget stdout() {\n\t\t\t\treturn Buffer.concat(stdoutData).toString(encoding);\n\t\t\t},\n\t\t\tget stderr() {\n\t\t\t\treturn Buffer.concat(stderrData).toString(encoding);\n\t\t\t},\n\t\t\tget onStdoutData() {\n\t\t\t\treturn stdoutDataEmitter.event;\n\t\t\t},\n\t\t\tget onStderrData() {\n\t\t\t\treturn stderrDataEmitter.event;\n\t\t\t},\n\t\t\texitPromise\n\t\t};\n\t}\n}\n"
  },
  {
    "path": "extensions/open-remote-wsl/src/wsl/wslTerminal.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nclass WSLTerminal {\n\tstatic NAME = 'WSL';\n\n\tprivate getTerminal() {\n\t\tconst wslTerminal = vscode.window.terminals.find(t => t.name === WSLTerminal.NAME);\n\t\tif (wslTerminal) {\n\t\t\treturn wslTerminal;\n\t\t}\n\t\treturn vscode.window.createTerminal(WSLTerminal.NAME);\n\t}\n\n\trunCommand(command: string) {\n\t\tconst wslTerminal = this.getTerminal();\n\t\twslTerminal.show(false);\n\t\twslTerminal.sendText(command, true);\n\t}\n}\n\nexport default new WSLTerminal();\n"
  },
  {
    "path": "extensions/open-remote-wsl/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.resolvers.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.contribViewsRemote.d.ts\",\n\t]\n}\n"
  },
  {
    "path": "extensions/package.json",
    "content": "{\n  \"name\": \"vscode-extensions\",\n  \"version\": \"0.0.1\",\n  \"license\": \"MIT\",\n  \"description\": \"Dependencies shared by all extensions\",\n  \"dependencies\": {\n    \"typescript\": \"^5.8.2\"\n  },\n  \"scripts\": {\n    \"postinstall\": \"node ./postinstall.mjs\"\n  },\n  \"devDependencies\": {\n    \"@parcel/watcher\": \"2.5.1\",\n    \"esbuild\": \"0.25.0\",\n    \"vscode-grammar-updater\": \"^1.1.0\"\n  },\n  \"overrides\": {\n    \"node-gyp-build\": \"4.8.1\"\n  }\n}\n"
  },
  {
    "path": "extensions/perl/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/perl/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"textmate/perl.tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/textmate/perl.tmbundle\",\n\t\t\t\t\t\"commitHash\": \"a85927a902d6e5d7805f56a653f324d34dfad53a\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Copyright (c) textmate-perl.tmbundle project authors\",\n\t\t\t\t\"\",\n\t\t\t\t\"If not otherwise specified (see below), files in this repository fall under the following license:\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission to copy, use, modify, sell and distribute this\",\n\t\t\t\t\"software is granted. This software is provided \\\"as is\\\" without\",\n\t\t\t\t\"express or implied warranty, and with no claim as to its\",\n\t\t\t\t\"suitability for any purpose.\",\n\t\t\t\t\"\",\n\t\t\t\t\"An exception is made for files in readable text which contain their own license information,\",\n\t\t\t\t\"or files where an accompanying file exists (in the same directory) with a \\\"-license\\\" suffix added\",\n\t\t\t\t\"to the base-name name of the original file, and an extension of txt, html, or similar. For example\",\n\t\t\t\t\"\\\"tidy\\\" is accompanied by \\\"tidy-license.txt\\\".\"\n\t\t\t],\n\t\t\t\"license\": \"TextMate Bundle License\",\n\t\t\t\"description\": \"The files syntaxes/perl.tmLanguage.json and syntaxes/perl6.tmLanguage.json were derived from Perl.plist and Perl 6.tmLanguage from https://github.com/textmate/perl.tmbundle.\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/perl/package.json",
    "content": "{\n  \"name\": \"perl\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin textmate/perl.tmbundle Syntaxes/Perl.plist ./syntaxes/perl.tmLanguage.json Syntaxes/Perl%206.tmLanguage ./syntaxes/perl6.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"perl\",\n        \"aliases\": [\n          \"Perl\",\n          \"perl\"\n        ],\n        \"extensions\": [\n          \".pl\",\n          \".pm\",\n          \".pod\",\n          \".t\",\n          \".PL\",\n          \".psgi\"\n        ],\n        \"firstLine\": \"^#!.*\\\\bperl\\\\b\",\n        \"configuration\": \"./perl.language-configuration.json\"\n      },\n      {\n        \"id\": \"raku\",\n        \"aliases\": [\n          \"Raku\",\n          \"Perl6\",\n          \"perl6\"\n        ],\n        \"extensions\": [\n          \".raku\",\n          \".rakumod\",\n          \".rakutest\",\n          \".rakudoc\",\n          \".nqp\",\n          \".p6\",\n          \".pl6\",\n          \".pm6\"\n        ],\n        \"firstLine\": \"(^#!.*\\\\bperl6\\\\b)|use\\\\s+v6|raku|=begin\\\\spod|my\\\\sclass\",\n        \"configuration\": \"./perl6.language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"perl\",\n        \"scopeName\": \"source.perl\",\n        \"path\": \"./syntaxes/perl.tmLanguage.json\",\n        \"unbalancedBracketScopes\": [\n          \"variable.other.predefined.perl\"\n        ]\n      },\n      {\n        \"language\": \"raku\",\n        \"scopeName\": \"source.perl.6\",\n        \"path\": \"./syntaxes/perl6.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/perl/package.nls.json",
    "content": "{\n\t\"displayName\": \"Perl Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Perl files.\"\n}\n"
  },
  {
    "path": "extensions/perl/perl.language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"`\", \"`\"]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^(?:(?:=pod\\\\s*$)|(?:\\\\s*#region\\\\b))\",\n\t\t\t\"end\": \"^(?:(?:=cut\\\\s*$)|(?:\\\\s*#endregion\\\\b))\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/perl/perl6.language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"`\", \"`\"]\n\t]\n}\n"
  },
  {
    "path": "extensions/perl/syntaxes/perl.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/perl.tmbundle/blob/master/Syntaxes/Perl.plist\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/perl.tmbundle/commit/a85927a902d6e5d7805f56a653f324d34dfad53a\",\n\t\"name\": \"Perl\",\n\t\"scopeName\": \"source.perl\",\n\t\"comment\": \"\\n\\tTODO:\\tInclude RegExp syntax\\n\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#line_comment\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(?==[a-zA-Z]+)\",\n\t\t\t\"end\": \"^(=cut\\\\b.*$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#pod\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.documentation.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pod\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#variable\"\n\t\t},\n\t\t{\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"begin\": \"\\\\b(?=qr\\\\s*[^\\\\s\\\\w])\",\n\t\t\t\"comment\": \"string.regexp.compile.perl\",\n\t\t\t\"end\": \"((([egimosxradlupcn]*)))(?=(\\\\s+\\\\S|\\\\s*[;\\\\,\\\\#\\\\{\\\\}\\\\)]|\\\\s*$))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.compile.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.regexp-option.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(qr)\\\\s*\\\\{\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"string.regexp.compile.nested_braces.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_braces_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(qr)\\\\s*\\\\[\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"string.regexp.compile.nested_brackets.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_brackets_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(qr)\\\\s*<\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"name\": \"string.regexp.compile.nested_ltgt.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_ltgt_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(qr)\\\\s*\\\\(\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"string.regexp.compile.nested_parens.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"This is to prevent thinks like qr/foo$/ to treat $/ as a variable\",\n\t\t\t\t\t\t\t\"match\": \"\\\\$(?=[^\\\\s\\\\w\\\\\\\\'\\\\{\\\\[\\\\(\\\\<])\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(qr)\\\\s*'\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"name\": \"string.regexp.compile.single-quote.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(qr)\\\\s*([^\\\\s\\\\w'\\\\{\\\\[\\\\(\\\\<])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\2\",\n\t\t\t\t\t\"name\": \"string.regexp.compile.simple-delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"This is to prevent thinks like qr/foo$/ to treat $/ as a variable\",\n\t\t\t\t\t\t\t\"match\": \"\\\\$(?=[^\\\\s\\\\w'\\\\{\\\\[\\\\(\\\\<])\",\n\t\t\t\t\t\t\t\"name\": \"keyword.control.anchor.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"begin\": \"(?<!\\\\{|\\\\+|\\\\-)\\\\b(?=m\\\\s*[^\\\\sa-zA-Z0-9])\",\n\t\t\t\"comment\": \"string.regexp.find-m.perl\",\n\t\t\t\"end\": \"((([egimosxradlupcn]*)))(?=(\\\\s+\\\\S|\\\\s*[;\\\\,\\\\#\\\\{\\\\}\\\\)]|\\\\s*$))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.find-m.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.regexp-option.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(m)\\\\s*\\\\{\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"string.regexp.find-m.nested_braces.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_braces_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(m)\\\\s*\\\\[\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"string.regexp.find-m.nested_brackets.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_brackets_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(m)\\\\s*<\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"name\": \"string.regexp.find-m.nested_ltgt.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_ltgt_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(m)\\\\s*\\\\(\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"string.regexp.find-m.nested_parens.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(m)\\\\s*'\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"name\": \"string.regexp.find-m.single-quote.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?<!\\\\{|\\\\+|\\\\-)(m)(?!_)\\\\s*([^\\\\sa-zA-Z0-9'\\\\{\\\\[\\\\(\\\\<])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\2\",\n\t\t\t\t\t\"name\": \"string.regexp.find-m.simple-delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"This is to prevent thinks like qr/foo$/ to treat $/ as a variable\",\n\t\t\t\t\t\t\t\"match\": \"\\\\$(?=[^\\\\sa-zA-Z0-9'\\\\{\\\\[\\\\(\\\\<])\",\n\t\t\t\t\t\t\t\"name\": \"keyword.control.anchor.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.begin.perl\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.end.perl\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"constant.other.character-class.set.perl\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"comment\": \"This is to prevent thinks like qr/foo$/ to treat $/ as a variable\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\$(?=[^\\\\s\\\\w'\\\\{\\\\[\\\\(\\\\<])\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.anchor.perl\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"applyEndPatternLast\": 1,\n\t\t\t\"begin\": \"\\\\b(?=(?<!\\\\&)(s)(\\\\s+\\\\S|\\\\s*[;\\\\,\\\\{\\\\}\\\\(\\\\)\\\\[<]|$))\",\n\t\t\t\"comment\": \"string.regexp.replace.perl\",\n\t\t\t\"end\": \"((([egimosxradlupcn]*)))(?=(\\\\s+\\\\S|\\\\s*[;\\\\,\\\\{\\\\}\\\\)\\\\]>]|\\\\s*$))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.replace.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.regexp-option.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(s)\\\\s*\\\\{\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"string.regexp.nested_braces.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_braces\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(s)\\\\s*\\\\[\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"string.regexp.nested_brackets.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(s)\\\\s*<\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"name\": \"string.regexp.nested_ltgt.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_ltgt\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(s)\\\\s*\\\\(\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"string.regexp.nested_parens.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_parens\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"name\": \"string.regexp.format.nested_braces.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_braces_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"string.regexp.format.nested_brackets.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_brackets_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"<\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"name\": \"string.regexp.format.nested_ltgt.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_ltgt_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"string.regexp.format.nested_parens.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"name\": \"string.regexp.format.single_quote.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\\\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([^\\\\s\\\\w\\\\[({<;])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\1\",\n\t\t\t\t\t\"name\": \"string.regexp.format.simple_delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s+\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(?=s([^\\\\sa-zA-Z0-9\\\\[({<]).*\\\\1([egimosxradlupcn]*)([\\\\}\\\\)\\\\;\\\\,]|\\\\s+))\",\n\t\t\t\"comment\": \"string.regexp.replaceXXX\",\n\t\t\t\"end\": \"((([egimosxradlupcn]*)))(?=([\\\\}\\\\)\\\\;\\\\,]|\\\\s+|\\\\s*$))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.replace.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.regexp-option.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(s\\\\s*)([^\\\\sa-zA-Z0-9\\\\[({<])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\2)\",\n\t\t\t\t\t\"name\": \"string.regexp.replaceXXX.simple_delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"name\": \"string.regexp.replaceXXX.format.single_quote.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\['\\\\\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.perl.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([^\\\\sa-zA-Z0-9\\\\[({<])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\1\",\n\t\t\t\t\t\"name\": \"string.regexp.replaceXXX.format.simple_delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(?=(?<!\\\\\\\\)s\\\\s*([^\\\\s\\\\w\\\\[({<>]))\",\n\t\t\t\"comment\": \"string.regexp.replace.extended\",\n\t\t\t\"end\": \"((([egimosradlupc]*x[egimosradlupc]*)))\\\\b\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.replace.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.regexp-option.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(s)\\\\s*(.)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\2)\",\n\t\t\t\t\t\"name\": \"string.regexp.replace.extended.simple_delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'(?=[egimosradlupc]*x[egimosradlupc]*)\\\\b\",\n\t\t\t\t\t\"name\": \"string.regexp.replace.extended.simple_delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(.)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\1(?=[egimosradlupc]*x[egimosradlupc]*)\\\\b\",\n\t\t\t\t\t\"name\": \"string.regexp.replace.extended.simple_delimiter.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<=\\\\(|\\\\{|~|&|\\\\||if|unless|^)\\\\s*((\\\\/))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.find.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"string.regexp.find.perl\",\n\t\t\t\"end\": \"((\\\\1([egimosxradlupcn]*)))(?=(\\\\s+\\\\S|\\\\s*[;\\\\,\\\\#\\\\{\\\\}\\\\)]|\\\\s*$))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.find.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.regexp-option.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"This is to prevent thinks like /foo$/ to treat $/ as a variable\",\n\t\t\t\t\t\"match\": \"\\\\$(?=\\\\/)\",\n\t\t\t\t\t\"name\": \"keyword.control.anchor.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.other.key.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b(\\\\w+)\\\\s*(?==>)\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<={)\\\\s*\\\\w+\\\\s*(?=})\",\n\t\t\t\"name\": \"constant.other.bareword.perl\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(package)\\\\s+([^\\\\s;]+)\",\n\t\t\t\"name\": \"meta.class.perl\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.sub.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.method.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b(sub)(?:\\\\s+([-a-zA-Z0-9_]+))?\\\\s*(?:\\\\([\\\\$\\\\@\\\\*;]*\\\\))?[^\\\\w\\\\{]\",\n\t\t\t\"name\": \"meta.function.perl\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.perl\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*(BEGIN|UNITCHECK|CHECK|INIT|END|DESTROY)\\\\b\",\n\t\t\t\"name\": \"meta.function.perl\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(?=(\\\\t| {4}))\",\n\t\t\t\"end\": \"(?=[^\\\\t\\\\s])\",\n\t\t\t\"name\": \"meta.leading-tabs\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.odd-tab\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.even-tab\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\t| {4})(\\\\t| {4})?\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b(tr|y)\\\\s*([^A-Za-z0-9\\\\s])(.*?)(?<!\\\\\\\\)(\\\\\\\\{2})*(\\\\2)(.*?)(?<!\\\\\\\\)(\\\\\\\\{2})*(\\\\2)\",\n\t\t\t\"name\": \"string.regexp.replace.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(__FILE__|__LINE__|__PACKAGE__|__SUB__)\\\\b\",\n\t\t\t\"name\": \"constant.language.perl\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(__DATA__|__END__)\\\\n?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.language.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"comment.block.documentation.perl\",\n\t\t\t\"end\": \"\\\\z\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pod\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!->)\\\\b(continue|default|die|do|else|elsif|exit|for|foreach|given|goto|if|last|next|redo|return|select|unless|until|wait|when|while|switch|case|require|use|eval)\\\\b\",\n\t\t\t\"name\": \"keyword.control.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(my|our|local)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w)\\\\-[rwxoRWXOezsfdlpSbctugkTBMAC]\\\\b\",\n\t\t\t\"name\": \"keyword.operator.filetest.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(and|or|xor|as|not)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.logical.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(<=>|=>|->)\",\n\t\t\t\"name\": \"keyword.operator.comparison.perl\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#heredoc\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqq\\\\s*([^\\\\(\\\\{\\\\[\\\\<\\\\w\\\\s])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.qq.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqx\\\\s*([^'\\\\(\\\\{\\\\[\\\\<\\\\w\\\\s])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.qx.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqx\\\\s*'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.qx.single-quote.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<!->)\\\\bqw?\\\\s*([^\\\\(\\\\{\\\\[\\\\<\\\\w\\\\s])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.q.perl\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\['\\\\\\\\]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"`\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"`\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<!->)\\\\bqq\\\\s*\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.qq-paren.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqq\\\\s*\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.qq-brace.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_braces_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqq\\\\s*\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.qq-bracket.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_brackets_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqq\\\\s*\\\\<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.qq-ltgt.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_ltgt_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<!->)\\\\bqx\\\\s*\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.qx-paren.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqx\\\\s*\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.qx-brace.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_braces_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqx\\\\s*\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.qx-bracket.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_brackets_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqx\\\\s*\\\\<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.qx-ltgt.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_ltgt_interpolated\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<!->)\\\\bqw?\\\\s*\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.q-paren.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqw?\\\\s*\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.q-brace.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_braces\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqw?\\\\s*\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.q-bracket.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_brackets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\bqw?\\\\s*\\\\<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.q-ltgt.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_ltgt\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^__\\\\w+__\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.unquoted.program-block.perl\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(format)\\\\s+(\\\\w+)\\\\s*=\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.format.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\.\\\\s*$\",\n\t\t\t\"name\": \"meta.format.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b(x)\\\\s*(\\\\d+)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(ARGV|DATA|ENV|SIG|STDERR|STDIN|STDOUT|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|cmp|connect|cos|crypt|dbmclose|dbmopen|defined|delete|dump|each|endgrent|endhostent|endnetent|endprotoent|endpwent|endservent|eof|eq|eval|exec|exists|exp|fcntl|fileno|flock|fork|formline|ge|getc|getgrent|getgrgid|getgrnam|gethostbyaddr|gethostbyname|gethostent|getlogin|getnetbyaddr|getnetbyname|getnetent|getpeername|getpgrp|getppid|getpriority|getprotobyname|getprotobynumber|getprotoent|getpwent|getpwnam|getpwuid|getservbyname|getservbyport|getservent|getsockname|getsockopt|glob|gmtime|grep|gt|hex|import|index|int|ioctl|join|keys|kill|lc|lcfirst|le|length|link|listen|local|localtime|log|lstat|lt|m|map|mkdir|msgctl|msgget|msgrcv|msgsnd|ne|no|oct|open|opendir|ord|pack|pipe|pop|pos|print|printf|push|quotemeta|rand|read|readdir|readlink|recv|ref|rename|reset|reverse|rewinddir|rindex|rmdir|s|say|scalar|seek|seekdir|semctl|semget|semop|send|setgrent|sethostent|setnetent|setpgrp|setpriority|setprotoent|setpwent|setservent|setsockopt|shift|shmctl|shmget|shmread|shmwrite|shutdown|sin|sleep|socket|socketpair|sort|splice|split|sprintf|sqrt|srand|stat|study|substr|symlink|syscall|sysopen|sysread|system|syswrite|tell|telldir|tie|tied|time|times|tr|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|utime|values|vec|waitpid|wantarray|warn|write|y)\\\\b\",\n\t\t\t\"name\": \"support.function.perl\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"Match empty brackets for ↩ snippet\",\n\t\t\t\"match\": \"(\\\\{)(\\\\})\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.perl\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"Match empty parenthesis for ↩ snippet\",\n\t\t\t\"match\": \"(\\\\()(\\\\))\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"escaped_char\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\d+\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\c[^\\\\s\\\\\\\\]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\g(?:\\\\{(?:\\\\w*|-\\\\d+)\\\\}|\\\\d+)\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\k(?:\\\\{\\\\w*\\\\}|<\\\\w*>|'\\\\w*')\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\N\\\\{[^\\\\}]*\\\\}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\o\\\\{\\\\d*\\\\}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\(?:p|P)(?:\\\\{\\\\w*\\\\}|P)\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\x(?:[0-9a-zA-Z]{2}|\\\\{\\\\w*\\\\})?\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"heredoc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *')(HTML)(')))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"text.html.basic\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *')(XML)(')))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"text.xml\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *')(CSS)(')))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *')(JAVASCRIPT)(')))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.js\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *')(SQL)(')))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.sql\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *')(POSTSCRIPT)(')))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.postscript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.postscript\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.postscript\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *')([^']*)(')))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\\\\\\)((?![=\\\\d\\\\$\\\\( ])[^;,'\\\"`\\\\s\\\\)]*)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.raw.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.raw.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\")(HTML)(\\\")))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"text.html.basic\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\")(XML)(\\\")))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"text.xml\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\")(CSS)(\\\")))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\")(JAVASCRIPT)(\\\")))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.js\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\")(SQL)(\\\")))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.sql\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\")(POSTSCRIPT)(\\\")))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.postscript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.postscript\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.postscript\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *\\\")([^\\\"]*)(\\\")))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *)(HTML)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"text.html.basic\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *)(XML)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"text.xml\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *)(CSS)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.css\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *)(JAVASCRIPT)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.js\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *)(SQL)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.sql\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *)(POSTSCRIPT)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.postscript\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"^\",\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"source.postscript\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.postscript\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *)((?![=\\\\d\\\\$\\\\( ])[^;,'\\\"`\\\\s\\\\)]*)()))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.interpolated.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((((<<(~)?) *`)([^`]*)(`)))(.*)\\\\n?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.begin.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.end.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.shell.perl\",\n\t\t\t\t\t\"end\": \"^((?!\\\\5)\\\\s+)?((\\\\6))$\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.heredoc.interpolated.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=#)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.perl\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.number-sign.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_braces\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_braces\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_braces_interpolated\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_braces_interpolated\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_brackets\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_brackets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_brackets_interpolated\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_brackets_interpolated\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_ltgt\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_ltgt\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_ltgt_interpolated\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_ltgt_interpolated\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_parens\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nested_parens_interpolated\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"This is to prevent thinks like qr/foo$/ to treat $/ as a variable\",\n\t\t\t\t\t\"match\": \"\\\\$(?=[^\\\\s\\\\w'\\\\{\\\\[\\\\(\\\\<])\",\n\t\t\t\t\t\"name\": \"keyword.control.anchor.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nested_parens_interpolated\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pod\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^=(pod|back|cut)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.class.pod.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(=begin)\\\\s+(html)\\\\s*$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.pod.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.pod.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.embedded.html.basic\",\n\t\t\t\t\t\"end\": \"^(=end)\\\\s+(html)|^(?==cut)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.pod.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.pod.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.pod.perl\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.pod.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.pod.perl\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#pod-formatting\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"^(=(?:head[1-4]|item|over|encoding|begin|end|for))\\\\b\\\\s*(.*)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pod-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pod-formatting\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"markup.italic.pod.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"markup.italic.pod.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"I(?:<([^<>]+)>|<+(\\\\s+(?:(?<!\\\\s)>|[^>])+\\\\s+)>+)\",\n\t\t\t\t\t\"name\": \"entity.name.type.instance.pod.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"markup.bold.pod.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"markup.bold.pod.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"B(?:<([^<>]+)>|<+(\\\\s+(?:(?<!\\\\s)>|[^>])+\\\\s+)>+)\",\n\t\t\t\t\t\"name\": \"entity.name.type.instance.pod.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"markup.raw.pod.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"markup.raw.pod.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"C(?:<([^<>]+)>|<+(\\\\\\\\s+(?:(?<!\\\\\\\\s)>|[^>])+\\\\\\\\s+)>+)\",\n\t\t\t\t\t\"name\": \"entity.name.type.instance.pod.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"markup.underline.link.hyperlink.pod.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"L<([^>]+)>\",\n\t\t\t\t\t\"name\": \"entity.name.type.instance.pod.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[EFSXZ]<[^>]*>\",\n\t\t\t\t\t\"name\": \"entity.name.type.instance.pod.perl\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)&(?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.regexp.match.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)`(?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.regexp.pre-match.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)'(?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.regexp.post-match.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)\\\\+(?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.regexp.last-paren-match.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)\\\"(?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.list-separator.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)0(?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.predefined.program-name.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)[_ab\\\\*\\\\.\\\\/\\\\|,\\\\\\\\;#%=\\\\-~^:?!\\\\$<>\\\\(\\\\)\\\\[\\\\]@](?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.predefined.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$)[0-9]+(?![A-Za-z0-9_])\",\n\t\t\t\t\t\"name\": \"variable.other.subpattern.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"([\\\\$\\\\@\\\\%](#)?)([a-zA-Zx7f-xff\\\\$]|::)([a-zA-Z0-9_x7f-xff\\\\$]|::)*\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.global.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(\\\\$\\\\{)(?:[a-zA-Zx7f-xff\\\\$]|::)(?:[a-zA-Z0-9_x7f-xff\\\\$]|::)*(\\\\})\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.global.perl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"([\\\\$\\\\@\\\\%](#)?)[0-9_]\\\\b\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.global.special.perl\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/perl/syntaxes/perl6.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/textmate/perl.tmbundle/blob/master/Syntaxes/Perl%206.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/textmate/perl.tmbundle/commit/d9841a0878239fa43f88c640f8d458590f97e8f5\",\n\t\"name\": \"Perl 6\",\n\t\"scopeName\": \"source.perl.6\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"begin\": \"^=begin\",\n\t\t\t\"end\": \"^=end\",\n\t\t\t\"name\": \"comment.block.perl\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.perl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.perl\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.perl.6\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.perl.6\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(class|enum|grammar|knowhow|module|package|role|slang|subset)(\\\\s+)(((?:::|')?(?:([a-zA-Z_\\\\x{C0}-\\\\x{FF}\\\\$])([a-zA-Z0-9_\\\\x{C0}-\\\\x{FF}\\\\\\\\$]|[\\\\-'][a-zA-Z0-9_\\\\x{C0}-\\\\x{FF}\\\\$])*))+)\",\n\t\t\t\"name\": \"meta.class.perl.6\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<=\\\\s)'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\['\\\\\\\\]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.perl\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[abtnfre\\\"\\\\\\\\]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.perl\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"q(q|to|heredoc)*\\\\s*:?(q|to|heredoc)*\\\\s*/(.+)/\",\n\t\t\t\"end\": \"\\\\3\",\n\t\t\t\"name\": \"string.quoted.single.heredoc.perl\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*{{\",\n\t\t\t\"end\": \"}}\",\n\t\t\t\"name\": \"string.quoted.double.heredoc.brace.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_brace_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*\\\\(\\\\(\",\n\t\t\t\"end\": \"\\\\)\\\\)\",\n\t\t\t\"name\": \"string.quoted.double.heredoc.paren.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_paren_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*\\\\[\\\\[\",\n\t\t\t\"end\": \"\\\\]\\\\]\",\n\t\t\t\"name\": \"string.quoted.double.heredoc.bracket.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_bracket_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*{\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"name\": \"string.quoted.single.heredoc.brace.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_brace_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*/\",\n\t\t\t\"end\": \"/\",\n\t\t\t\"name\": \"string.quoted.single.heredoc.slash.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_slash_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"name\": \"string.quoted.single.heredoc.paren.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_paren_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*\\\\[\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"name\": \"string.quoted.single.heredoc.bracket.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_bracket_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*'\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"name\": \"string.quoted.single.heredoc.single.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_single_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(q|Q)(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*:?(x|exec|w|words|ww|quotewords|v|val|q|single|qq|double|s|scalar|a|array|h|hash|f|function|c|closure|b|blackslash|regexp|substr|trans|codes|p|path)*\\\\s*\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"name\": \"string.quoted.single.heredoc.double.perl\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_double_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b\\\\$\\\\w+\\\\b\",\n\t\t\t\"name\": \"variable.other.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(macro|sub|submethod|method|multi|proto|only|rule|token|regex|category)\\\\b\",\n\t\t\t\"name\": \"storage.type.declare.routine.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(self)\\\\b\",\n\t\t\t\"name\": \"variable.language.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(use|require)\\\\b\",\n\t\t\t\"name\": \"keyword.other.include.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(if|else|elsif|unless)\\\\b\",\n\t\t\t\"name\": \"keyword.control.conditional.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(let|my|our|state|temp|has|constant)\\\\b\",\n\t\t\t\"name\": \"storage.type.variable.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(for|loop|repeat|while|until|gather|given)\\\\b\",\n\t\t\t\"name\": \"keyword.control.repeat.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(take|do|when|next|last|redo|return|contend|maybe|defer|default|exit|make|continue|break|goto|leave|async|lift)\\\\b\",\n\t\t\t\"name\": \"keyword.control.flowcontrol.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(is|as|but|trusts|of|returns|handles|where|augment|supersede)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.type.constraints.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(BEGIN|CHECK|INIT|START|FIRST|ENTER|LEAVE|KEEP|UNDO|NEXT|LAST|PRE|POST|END|CATCH|CONTROL|TEMP)\\\\b\",\n\t\t\t\"name\": \"meta.function.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(die|fail|try|warn)\\\\b\",\n\t\t\t\"name\": \"keyword.control.control-handlers.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(prec|irs|ofs|ors|export|deep|binary|unary|reparsed|rw|parsed|cached|readonly|defequiv|will|ref|copy|inline|tighter|looser|equiv|assoc|required)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(NaN|Inf)\\\\b\",\n\t\t\t\"name\": \"constant.numeric.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(oo|fatal)\\\\b\",\n\t\t\t\"name\": \"keyword.other.pragma.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(Object|Any|Junction|Whatever|Capture|MatchSignature|Proxy|Matcher|Package|Module|ClassGrammar|Scalar|Array|Hash|KeyHash|KeySet|KeyBagPair|List|Seq|Range|Set|Bag|Mapping|Void|UndefFailure|Exception|Code|Block|Routine|Sub|MacroMethod|Submethod|Regex|Str|str|Blob|Char|ByteCodepoint|Grapheme|StrPos|StrLen|Version|NumComplex|num|complex|Bit|bit|bool|True|FalseIncreasing|Decreasing|Ordered|Callable|AnyCharPositional|Associative|Ordering|KeyExtractorComparator|OrderingPair|IO|KitchenSink|RoleInt|int|int1|int2|int4|int8|int16|int32|int64Rat|rat|rat1|rat2|rat4|rat8|rat16|rat32|rat64Buf|buf|buf1|buf2|buf4|buf8|buf16|buf32|buf64UInt|uint|uint1|uint2|uint4|uint8|uint16|uint32uint64|Abstraction|utf8|utf16|utf32)\\\\b\",\n\t\t\t\"name\": \"support.type.perl6\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(div|xx|x|mod|also|leg|cmp|before|after|eq|ne|le|lt|not|gt|ge|eqv|ff|fff|and|andthen|or|xor|orelse|extra|lcm|gcd)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.perl\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(\\\\$|@|%|&)(\\\\*|:|!|\\\\^|~|=|\\\\?|(<(?=.+>)))?([a-zA-Z_\\\\x{C0}-\\\\x{FF}\\\\$])([a-zA-Z0-9_\\\\x{C0}-\\\\x{FF}\\\\$]|[\\\\-'][a-zA-Z0-9_\\\\x{C0}-\\\\x{FF}\\\\$])*\",\n\t\t\t\"name\": \"variable.other.identifier.perl.6\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(eager|hyper|substr|index|rindex|grep|map|sort|join|lines|hints|chmod|split|reduce|min|max|reverse|truncate|zip|cat|roundrobin|classify|first|sum|keys|values|pairs|defined|delete|exists|elems|end|kv|any|all|one|wrap|shape|key|value|name|pop|push|shift|splice|unshift|floor|ceiling|abs|exp|log|log10|rand|sign|sqrt|sin|cos|tan|round|strand|roots|cis|unpolar|polar|atan2|pick|chop|p5chop|chomp|p5chomp|lc|lcfirst|uc|ucfirst|capitalize|normalize|pack|unpack|quotemeta|comb|samecase|sameaccent|chars|nfd|nfc|nfkd|nfkc|printf|sprintf|caller|evalfile|run|runinstead|nothing|want|bless|chr|ord|gmtime|time|eof|localtime|gethost|getpw|chroot|getlogin|getpeername|kill|fork|wait|perl|graphs|codes|bytes|clone|print|open|read|write|readline|say|seek|close|opendir|readdir|slurp|spurt|shell|run|pos|fmt|vec|link|unlink|symlink|uniq|pair|asin|atan|sec|cosec|cotan|asec|acosec|acotan|sinh|cosh|tanh|asinh|done|acos|acosh|atanh|sech|cosech|cotanh|sech|acosech|acotanh|asech|ok|nok|plan_ok|dies_ok|lives_ok|skip|todo|pass|flunk|force_todo|use_ok|isa_ok|diag|is_deeply|isnt|like|skip_rest|unlike|cmp_ok|eval_dies_ok|nok_error|eval_lives_ok|approx|is_approx|throws_ok|version_lt|plan|EVAL|succ|pred|times|nonce|once|signature|new|connect|operator|undef|undefine|sleep|from|to|infix|postfix|prefix|circumfix|postcircumfix|minmax|lazy|count|unwrap|getc|pi|e|context|void|quasi|body|each|contains|rewinddir|subst|can|isa|flush|arity|assuming|rewind|callwith|callsame|nextwith|nextsame|attr|eval_elsewhere|none|srand|trim|trim_start|trim_end|lastcall|WHAT|WHERE|HOW|WHICH|VAR|WHO|WHENCE|ACCEPTS|REJECTS|not|true|iterator|by|re|im|invert|flip|gist|flat|tree|is-prime|throws_like|trans)\\\\b\",\n\t\t\t\"name\": \"support.function.perl\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"qq_brace_string_content\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"end\": \"}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_brace_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qq_bracket_string_content\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_bracket_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qq_double_string_content\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_double_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qq_paren_string_content\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_paren_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qq_single_string_content\": {\n\t\t\t\"begin\": \"'\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_single_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qq_slash_string_content\": {\n\t\t\t\"begin\": \"\\\\\\\\/\",\n\t\t\t\"end\": \"\\\\\\\\/\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qq_slash_string_content\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/php/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"preLaunchTask\": \"npm\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/php/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"command\": \"npm\",\n\t\"type\": \"shell\",\n\t\"presentation\": {\n\t\t\"reveal\": \"silent\"\n\t},\n\t\"args\": [\"run\", \"compile\"],\n\t\"isBackground\": true,\n\t\"problemMatcher\": \"$tsc-watch\"\n}\n"
  },
  {
    "path": "extensions/php/.vscodeignore",
    "content": "test/**\nbuild/**\nout/test/**\nsrc/**\ntsconfig.json\ncgmanifest.json\n.vscode"
  },
  {
    "path": "extensions/php/build/update-grammar.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n//@ts-check\n\nimport * as vscodeGrammarUpdater from 'vscode-grammar-updater';\n\nfunction adaptInjectionScope(grammar) {\n\t// we're using the HTML grammar from https://github.com/textmate/html.tmbundle which has moved away from source.js.embedded.html\n\t// also we need to add source.css scope for PHP code in <style> tags, which are handled differently in atom\n\tconst oldInjectionKey = \"text.html.php - (meta.embedded | meta.tag), L:((text.html.php meta.tag) - (meta.embedded.block.php | meta.embedded.line.php)), L:(source.js.embedded.html - (meta.embedded.block.php | meta.embedded.line.php))\";\n\tconst newInjectionKey = \"text.html.php - (meta.embedded | meta.tag), L:((text.html.php meta.tag) - (meta.embedded.block.php | meta.embedded.line.php)), L:(source.js - (meta.embedded.block.php | meta.embedded.line.php)), L:(source.css - (meta.embedded.block.php | meta.embedded.line.php))\";\n\n\tconst injections = grammar.injections;\n\tconst injection = injections[oldInjectionKey];\n\tif (!injection) {\n\t\tthrow new Error(\"Can not find PHP injection to patch\");\n\t}\n\tdelete injections[oldInjectionKey];\n\tinjections[newInjectionKey] = injection;\n}\n\nfunction includeDerivativeHtml(grammar) {\n\tgrammar.patterns.forEach(pattern => {\n\t\tif (pattern.include === 'text.html.basic') {\n\t\t\tpattern.include = 'text.html.derivative';\n\t\t}\n\t});\n}\n\n// Workaround for https://github.com/microsoft/vscode/issues/40279\n// and https://github.com/microsoft/vscode-textmate/issues/59\nfunction fixBadRegex(grammar) {\n\tfunction fail(msg) {\n\t\tthrow new Error(`fixBadRegex callback couldn't patch ${msg}. It may be obsolete`);\n\t}\n\n\tconst scopeResolution = grammar.repository['scope-resolution'];\n\tif (scopeResolution) {\n\t\tconst match = scopeResolution.patterns[0].match;\n\t\tif (match === '(?i)([a-z_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\][a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]*)(?=\\\\s*::)') {\n\t\t\tscopeResolution.patterns[0].match = '([A-Za-z_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\][A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]*)(?=\\\\s*::)';\n\t\t} else {\n\t\t\tfail('scope-resolution.match');\n\t\t}\n\t} else {\n\t\tfail('scope-resolution');\n\t}\n\n\tconst functionCall = grammar.repository['function-call'];\n\tif (functionCall) {\n\t\tconst begin0 = functionCall.patterns[0].begin;\n\t\tif (begin0 === '(?xi)\\n(\\n  \\\\\\\\?(?<![a-z0-9_\\\\x{7f}-\\\\x{10ffff}])                            # Optional root namespace\\n  [a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*          # First namespace\\n  (?:\\\\\\\\[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)+ # Additional namespaces\\n)\\\\s*(\\\\()') {\n\t\t\tfunctionCall.patterns[0].begin = '(?x)\\n(\\n  \\\\\\\\?(?<![a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}])                            # Optional root namespace\\n  [a-zA-Z_\\\\x{7f}-\\\\x{10ffff}][a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}]*          # First namespace\\n  (?:\\\\\\\\[a-zA-Z_\\\\x{7f}-\\\\x{10ffff}][a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}]*)+ # Additional namespaces\\n)\\\\s*(\\\\()';\n\t\t} else {\n\t\t\tfail('function-call.begin0');\n\t\t}\n\n\t\tconst begin1 = functionCall.patterns[1].begin;\n\t\tif (begin1 === '(?i)(\\\\\\\\)?(?<![a-z0-9_\\\\x{7f}-\\\\x{10ffff}])([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(\\\\()') {\n\t\t\tfunctionCall.patterns[1].begin = '(\\\\\\\\)?(?<![a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}])([a-zA-Z_\\\\x{7f}-\\\\x{10ffff}][a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(\\\\()';\n\t\t} else {\n\t\t\tfail('function-call.begin1');\n\t\t}\n\t} else {\n\t\tfail('function-call');\n\t}\n}\n\nvscodeGrammarUpdater.update('KapitanOczywisty/language-php', 'grammars/php.cson', './syntaxes/php.tmLanguage.json', fixBadRegex);\nvscodeGrammarUpdater.update('KapitanOczywisty/language-php', 'grammars/html.cson', './syntaxes/html.tmLanguage.json', grammar => {\n\tadaptInjectionScope(grammar);\n\tincludeDerivativeHtml(grammar);\n});\n"
  },
  {
    "path": "extensions/php/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"language-php\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/KapitanOczywisty/language-php\",\n\t\t\t\t\t\"commitHash\": \"5e8f000cb5a20f44f7a7a89d07ad0774031c53f3\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.49.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/php/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\", // \"#\"\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"/**\",\n\t\t\t\"close\": \" */\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"`\",\n\t\t\t\"`\"\n\t\t]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"({(?!.*}).*|\\\\(|\\\\[|((else(\\\\s)?)?if|else|for(each)?|while|switch|case).*:)\\\\s*((/[/*].*|)?$|\\\\?>)\",\n\t\t\"decreaseIndentPattern\": \"^(.*\\\\*\\\\/)?\\\\s*((\\\\})|(\\\\)+[;,])|(\\\\]\\\\)*[;,])|\\\\b(else:)|\\\\b((end(if|for(each)?|while|switch));))\"\n\t},\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*(#|\\/\\/)region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*(#|\\/\\/)endregion\\\\b\"\n\t\t}\n\t},\n\t\"wordPattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\-\\\\`\\\\~\\\\!\\\\@\\\\#\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>\\\\/\\\\?\\\\s]+)\",\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t// e.g. /** | */\n\t\t\t\"beforeText\": \"^\\\\s*\\\\/\\\\*\\\\*(?!\\\\/)([^\\\\*]|\\\\*(?!\\\\/))*$\",\n\t\t\t\"afterText\": \"^\\\\s*\\\\*\\\\/$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g. /** ...|\n\t\t\t\"beforeText\": \"^\\\\s*\\\\/\\\\*\\\\*(?!\\\\/)([^\\\\*]|\\\\*(?!\\\\/))*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  * ...|\n\t\t\t\"beforeText\": \"^(\\\\t|(\\\\ \\\\ ))*\\\\ \\\\*(\\\\ ([^\\\\*]|\\\\*(?!\\\\/))*)?$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"* \",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// e.g.  */|\n\t\t\t\"beforeText\": \"^(\\\\t|(\\\\ \\\\ ))*\\\\ \\\\*\\\\/\\\\s*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// e.g.  *-----*/|\n\t\t\t\"beforeText\": \"^(\\\\t|(\\\\ \\\\ ))*\\\\ \\\\*[^/]*\\\\*\\\\/\\\\s*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// Decrease indentation after single line if/else if/else, for, foreach, or while\n\t\t\t\"previousLineText\": \"^\\\\s*(((else ?)?if|for(each)?|while)\\\\s*\\\\(.*\\\\)\\\\s*|else\\\\s*)$\",\n\t\t\t// But make sure line doesn't have braces or is not another if statement\n\t\t\t\"beforeText\": \"^\\\\s+([^{i\\\\s]|i(?!f\\\\b))\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"outdent\"\n\t\t\t}\n\t\t},\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/php/package.json",
    "content": "{\n  \"name\": \"php\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"php\",\n        \"extensions\": [\n          \".php\",\n          \".php4\",\n          \".php5\",\n          \".phtml\",\n          \".ctp\"\n        ],\n        \"aliases\": [\n          \"PHP\",\n          \"php\"\n        ],\n        \"firstLine\": \"^#!\\\\s*/.*\\\\bphp\\\\b\",\n        \"mimetypes\": [\n          \"application/x-php\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"php\",\n        \"scopeName\": \"source.php\",\n        \"path\": \"./syntaxes/php.tmLanguage.json\"\n      },\n      {\n        \"language\": \"php\",\n        \"scopeName\": \"text.html.php\",\n        \"path\": \"./syntaxes/html.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"text.html\": \"html\",\n          \"source.php\": \"php\",\n          \"source.sql\": \"sql\",\n          \"text.xml\": \"xml\",\n          \"source.js\": \"javascript\",\n          \"source.json\": \"json\",\n          \"source.css\": \"css\"\n        }\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"php\",\n        \"path\": \"./snippets/php.code-snippets\"\n      }\n    ]\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammar.mjs\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/php/package.nls.json",
    "content": "{\n\t\"displayName\": \"PHP Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching for PHP files.\"\n}\n"
  },
  {
    "path": "extensions/php/snippets/php.code-snippets",
    "content": "{\n\t\"$… = ( … ) ? … : …\": {\n\t\t\"prefix\": \"if?\",\n\t\t\"body\": \"$${1:retVal} = (${2:condition}) ? ${3:a} : ${4:b} ;\",\n\t\t\"description\": \"Ternary conditional assignment\"\n\t},\n\t\"$… = array (…)\": {\n\t\t\"prefix\": \"array\",\n\t\t\"body\": \"$${1:arrayName} = array($0);\",\n\t\t\"description\": \"Array initializer\"\n\t},\n\t\"$… = […]\": {\n\t\t\"prefix\": \"shorray\",\n\t\t\"body\": \"$${1:arrayName} = [$0];\",\n\t\t\"description\": \"Array initializer\"\n\t},\n\t\"… => …\": {\n\t\t\"prefix\": \"keyval,kvp\",\n\t\t\"body\": \"'$1' => $2$0\",\n\t\t\"description\": \"Key-Value pair\"\n\t},\n\t\"$a <=> $b\": {\n\t\t\"prefix\": \"spaceship\",\n\t\t\"body\": \"(${1:\\\\$a} <=> ${2:\\\\$b} === ${3|0,1,-1|})\",\n\t\t\"description\": \"Spaceship equality check\"\n\t},\n\t\"attribute\": {\n\t\t\"prefix\": \"attr\",\n\t\t\"body\": [\n\t\t\t\"#[\\\\\\\\Attribute]\",\n\t\t\t\"class ${1:My}Attribute${2: extends ${3:MyOther}Attribute} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Attribute\"\n\t},\n\t\"attribute target\": {\n\t\t\"prefix\": \"attr_target\",\n\t\t\"body\": \"\\\\Attribute::${1|TARGET_ALL,TARGET_CLASS,TARGET_FUNCTION,TARGET_METHOD,TARGET_PROPERTY,TARGET_CLASS_CONSTANT,TARGET_PARAMETER,IS_REPEATABLE|}$0\"\n\t},\n\t\"attribute with target\": {\n\t\t\"prefix\": \"attr_with_target\",\n\t\t\"body\": [\n\t\t\t\"#[\\\\\\\\Attribute(\\\\Attribute::${1|TARGET_ALL,TARGET_CLASS,TARGET_FUNCTION,TARGET_METHOD,TARGET_PROPERTY,TARGET_CLASS_CONSTANT,TARGET_PARAMETER,IS_REPEATABLE|}$2)]\",\n\t\t\t\"class ${3:My}Attribute${4: extends ${5:MyOther}Attribute} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Attribute - Chain targets with attr_target snippet\"\n\t},\n\t\"case …\": {\n\t\t\"prefix\": \"case\",\n\t\t\"body\": [\n\t\t\t\"case '${1:value}':\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"\\tbreak;\"\n\t\t],\n\t\t\"description\": \"Case Block\"\n\t},\n\t\"class …\": {\n\t\t\"prefix\": \"class\",\n\t\t\"body\": [\n\t\t\t\"${1:${2|final ,readonly |}}class ${3:${TM_FILENAME_BASE}}${4: extends ${5:AnotherClass}} ${6:implements ${7:Interface}}\",\n\t\t\t\"{\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\",\n\t\t\t\"\"\n\t\t],\n\t\t\"description\": \"Class definition\"\n\t},\n\t\"class __construct\": {\n\t\t\"prefix\": \"construct\",\n\t\t\"body\": [\n\t\t\t\"${1|public,private,protected|} function __construct(${2:${3:Type} $${4:var}${5: = ${6:null}}}$7) {\",\n\t\t\t\"\\t\\\\$this->${4:var} = $${4:var};$0\",\n\t\t\t\"}\"\n\t\t]\n\t},\n\t\"class function …\": {\n\t\t\"prefix\": \"class_fun\",\n\t\t\"body\": [\n\t\t\t\"${1|public ,private ,protected |}${2: static }function ${3:FunctionName}(${4:${5:${6:Type} }$${7:var}${8: = ${9:null}}}$10) : ${11:Returntype}\",\n\t\t\t\"{\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Function for classes, traits and enums\"\n\t},\n\t\"const\": {\n\t\t\"prefix\": \"const\",\n\t\t\"body\": \"${1|public ,private ,protected |}const ${2:NAME} = $3;\",\n\t\t\"description\": \"Constant for classes, traits, enums\"\n\t},\n\t\"enum\": {\n\t\t\"prefix\": \"enum\",\n\t\t\"body\": [\n\t\t\t\"enum $1 {\",\n\t\t\t\"\\tcase $2;$0\",\n\t\t\t\"}\"\n\t\t]\n\t},\n\t\"define(…, …)\": {\n\t\t\"prefix\": \"def\",\n\t\t\"body\": [\n\t\t\t\"define('$1', ${2:'$3'});\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"Definition\"\n\t},\n\t\"do … while …\": {\n\t\t\"prefix\": \"do\",\n\t\t\"body\": [\n\t\t\t\"do {\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"} while (${1:$${2:a} <= ${3:10}});\"\n\t\t],\n\t\t\"description\": \"Do-While loop\"\n\t},\n\t\"else …\": {\n\t\t\"prefix\": \"else\",\n\t\t\"body\": [\n\t\t\t\"else {\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Else block\"\n\t},\n\t\"elseif …\": {\n\t\t\"prefix\": \"elseif\",\n\t\t\"body\": [\n\t\t\t\"elseif (${1:condition}) {\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Elseif block\"\n\t},\n\t\"for …\": {\n\t\t\"prefix\": \"for\",\n\t\t\"body\": [\n\t\t\t\"for ($${1:i}=${2:0}; $${1:i} < $3; $${1:i}++) { \",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"For-loop\"\n\t},\n\t\"foreach …\": {\n\t\t\"prefix\": \"foreach\",\n\t\t\"body\": [\n\t\t\t\"foreach ($${1:variable} as $${2:key}${3: => $${4:value}}) {\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Foreach loop\"\n\t},\n\t\"function\": {\n\t\t\"prefix\": \"fun\",\n\t\t\"body\": [\n\t\t\t\"function ${1:FunctionName}($2)${3: : ${4:Returntype}} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Function - use param snippet for parameters\"\n\t},\n\t\"anonymous function\": {\n\t\t\"prefix\": \"fun_anonymous\",\n\t\t\"body\": [\n\t\t\t\"function ($1)${2: use ($${3:var})} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Anonymous Function\"\n\t},\n\t\"if …\": {\n\t\t\"prefix\": \"if\",\n\t\t\"body\": [\n\t\t\t\"if (${1:condition}) {\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"If block\"\n\t},\n\t\"if … else …\": {\n\t\t\"prefix\": \"ifelse\",\n\t\t\"body\": [\n\t\t\t\"if (${1:condition}) {\",\n\t\t\t\"\\t${2:# code...}\",\n\t\t\t\"} else {\",\n\t\t\t\"\\t${3:# code...}\",\n\t\t\t\"}\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"If Else block\"\n\t},\n\t\"match\": {\n\t\t\"prefix\": \"match\",\n\t\t\"body\": [\n\t\t\t\"match (${1:expression}) {\",\n\t\t\t\"\\t$2 => $3,\",\n\t\t\t\"\\t$4 => $5,$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Match expression; like switch with identity checks. Use keyval snippet to chain expressions\"\n\t},\n\t\"param\": {\n\t\t\"prefix\": \"param\",\n\t\t\"body\": \"${1:Type} $${2:var}${3: = ${4:null}}$5\",\n\t\t\"description\": \"Parameter definition\"\n\t},\n\t\"property\": {\n\t\t\"prefix\": \"property\",\n\t\t\"body\": \"${1|public ,private ,protected |}${2|static ,readonly |}${3:Type} $${4:var}${5: = ${6:null}};$0\",\n\t\t\"description\": \"Property\"\n\t},\n\t\"PHPDoc class …\": {\n\t\t\"prefix\": \"doc_class\",\n\t\t\"body\": [\n\t\t\t\"/**\",\n\t\t\t\" * ${8:undocumented class}\",\n\t\t\t\" */\",\n\t\t\t\"${1:${2|final ,readonly |}}class ${3:${TM_FILENAME_BASE}}${4: extends ${5:AnotherClass}} ${6:implements ${7:Interface}}\",\n\t\t\t\"{\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\",\n\t\t\t\"\"\n\t\t],\n\t\t\"description\": \"Documented Class Declaration\"\n\t},\n\t\"PHPDoc function …\": {\n\t\t\"prefix\": \"doc_fun\",\n\t\t\"body\": [\n\t\t\t\"/**\",\n\t\t\t\" * ${1:undocumented function summary}\",\n\t\t\t\" *\",\n\t\t\t\" * ${2:Undocumented function long description}\",\n\t\t\t\" *\",\n\t\t\t\"${3: * @param ${4:Type} $${5:var} ${6:Description}}\",\n\t\t\t\"${7: * @return ${8:type}}\",\n\t\t\t\"${9: * @throws ${10:conditon}}\",\n\t\t\t\" **/\",\n\t\t\t\"${11:public }function ${12:FunctionName}(${13:${14:${4:Type} }$${5:var}${15: = ${16:null}}}17)\",\n\t\t\t\"{\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Documented function\"\n\t},\n\t\"PHPDoc param …\": {\n\t\t\"prefix\": \"doc_param\",\n\t\t\"body\": [\n\t\t\t\"* @param ${1:Type} ${2:var} ${3:Description}$0\"\n\t\t],\n\t\t\"description\": \"Paramater documentation\"\n\t},\n\t\"PHPDoc trait\": {\n\t\t\"prefix\": \"doc_trait\",\n\t\t\"body\": [\n\t\t\t\"/**\",\n\t\t\t\" * $1\",\n\t\t\t\" */\",\n\t\t\t\"trait ${2:TraitName}\",\n\t\t\t\"{\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\",\n\t\t\t\"\"\n\t\t],\n\t\t\"description\": \"Trait\"\n\t},\n\t\"PHPDoc var\": {\n\t\t\"prefix\": \"doc_var\",\n\t\t\"body\": [\n\t\t\t\"/** @var ${1:Type} $${2:var} ${3:description} */\",\n\t\t\t\"${4:protected} $${2:var}${5: = ${6:null}};$0\"\n\t\t],\n\t\t\"description\": \"Documented Class Variable\"\n\t},\n\t\"Region End\": {\n\t\t\"prefix\": \"#endregion\",\n\t\t\"body\": [\n\t\t\t\"#endregion\"\n\t\t],\n\t\t\"description\": \"Folding Region End\"\n\t},\n\t\"Region Start\": {\n\t\t\"prefix\": \"#region\",\n\t\t\"body\": [\n\t\t\t\"#region\"\n\t\t],\n\t\t\"description\": \"Folding Region Start\"\n\t},\n\t\"switch …\": {\n\t\t\"prefix\": \"switch\",\n\t\t\"body\": [\n\t\t\t\"switch (\\\\$${1:variable}) {\",\n\t\t\t\"\\tcase '${2:value}':\",\n\t\t\t\"\\t\\t${3:# code...}\",\n\t\t\t\"\\t\\tbreak;\",\n\t\t\t\"\\t$0\",\n\t\t\t\"\\tdefault:\",\n\t\t\t\"\\t\\t${4:# code...}\",\n\t\t\t\"\\t\\tbreak;\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Switch block\"\n\t},\n\t\"$this->…\": {\n\t\t\"prefix\": \"this\",\n\t\t\"body\": \"\\\\$this->$0;\",\n\t\t\"description\": \"$this->...\"\n\t},\n\t\"Throw Exception\": {\n\t\t\"prefix\": \"throw\",\n\t\t\"body\": [\n\t\t\t\"throw new $1Exception(${2:\\\"${3:Error Processing Request}\\\"}${4:, ${5:1}});\",\n\t\t\t\"$0\"\n\t\t],\n\t\t\"description\": \"Throw exception\"\n\t},\n\t\"trait …\": {\n\t\t\"prefix\": \"trait\",\n\t\t\"body\": [\n\t\t\t\"trait ${1:TraitName}\",\n\t\t\t\"{\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\",\n\t\t\t\"\"\n\t\t],\n\t\t\"description\": \"Trait\"\n\t},\n\t\"Try Catch Block\": {\n\t\t\"prefix\": \"try\",\n\t\t\"body\": [\n\t\t\t\"try {\",\n\t\t\t\"\\t${1://code...}\",\n\t\t\t\"} catch (${2:\\\\Throwable} ${3:\\\\$th}) {\",\n\t\t\t\"\\t${4://throw \\\\$th;}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Try catch block\"\n\t},\n\t\"use function\": {\n\t\t\"prefix\": \"use_fun\",\n\t\t\"body\": \"use function $1;\"\n\t},\n\t\"use const\": {\n\t\t\"prefix\": \"use_const\",\n\t\t\"body\": \"use const $1;\"\n\t},\n\t\"use grouping\": {\n\t\t\"prefix\": \"use_group\",\n\t\t\"body\": [\n\t\t\t\"use${1| const , function |}$2\\\\{\",\n\t\t\t\"\\t$0,\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"Use grouping imports\"\n\t},\n\t\"use as \": {\n\t\t\"prefix\": \"use_as\",\n\t\t\"body\": \"use${1| const , function |}$2 as $3;\",\n\t\t\"description\": \"Use as alias\"\n\t},\n\t\"while …\": {\n\t\t\"prefix\": \"while\",\n\t\t\"body\": [\n\t\t\t\"while (${1:$${2:a} <= ${3:10}}) {\",\n\t\t\t\"\\t${0:# code...}\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"While-loop\"\n\t}\n}\n"
  },
  {
    "path": "extensions/php/syntaxes/html.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/KapitanOczywisty/language-php/blob/master/grammars/html.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/KapitanOczywisty/language-php/commit/ff64523c94c014d68f5dec189b05557649c5872a\",\n\t\"name\": \"PHP\",\n\t\"scopeName\": \"text.html.php\",\n\t\"injections\": {\n\t\t\"L:meta.embedded.php.blade\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.php.blade#blade\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"text.html.php - (meta.embedded | meta.tag), L:((text.html.php meta.tag) - (meta.embedded.block.php | meta.embedded.line.php)), L:(source.js - (meta.embedded.block.php | meta.embedded.line.php)), L:(source.css - (meta.embedded.block.php | meta.embedded.line.php))\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#php-tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"patterns\": [\n\t\t{\n\t\t\t\"begin\": \"\\\\A#!\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"comment.line.shebang.php\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"text.html.derivative\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"php-tag\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"<\\\\?(?i:php|=)?(?![^?]*\\\\?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\?)>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"source.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.block.php\",\n\t\t\t\t\t\"contentName\": \"source.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"<\\\\?(?i:php|=)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\?)>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"source.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.line.php\",\n\t\t\t\t\t\"contentName\": \"source.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/php/syntaxes/php.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/KapitanOczywisty/language-php/blob/master/grammars/php.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/KapitanOczywisty/language-php/commit/5e8f000cb5a20f44f7a7a89d07ad0774031c53f3\",\n\t\"scopeName\": \"source.php\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#attribute\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)(?:^|(?<=<\\\\?php))\\\\s*(namespace)\\\\s+([a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)(?=\\\\s*;)\",\n\t\t\t\"name\": \"meta.namespace.php\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.namespace.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?i)(?:^|(?<=<\\\\?php))\\\\s*(namespace)\\\\s+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.namespace.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})|(?=\\\\?>)\",\n\t\t\t\"name\": \"meta.namespace.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+\",\n\t\t\t\t\t\"name\": \"entity.name.type.namespace.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.namespace.begin.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.namespace.end.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s]+\",\n\t\t\t\t\t\"name\": \"invalid.illegal.identifier.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\s+(?=use\\\\b)\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?i)\\\\buse\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.other.use.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})|(?=;)|(?=\\\\?>)\",\n\t\t\t\"name\": \"meta.use.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(const|function)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.${1:/downcase}.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.use.begin.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.use.end.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#scope-resolution\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?xi)\\n\\\\b(as)\\n\\\\s+(final|abstract|public|private|protected|static)\\n\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.use-as.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.alias.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?xi)\\n\\\\b(as)\\n\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.use-as.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"^(?:final|abstract|public|private|protected|static)$\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \".+\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.alias.php\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)\\\\b(insteadof)\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.use-insteadof.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.class.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.expression.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#use-inner\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#use-inner\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?ix)\\n\\\\b(trait)\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.trait.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.trait.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.trait.end.bracket.curly.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.trait.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.trait.begin.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=}|\\\\?>)\",\n\t\t\t\t\t\"contentName\": \"meta.trait.body.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?ix)\\n\\\\b(interface)\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.interface.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.interface.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interface.end.bracket.curly.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.interface.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface-extends\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.interface.begin.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=}|\\\\?>)\",\n\t\t\t\t\t\"contentName\": \"meta.interface.body.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-constant\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?ix)\\n\\\\b(enum)\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\n(?: \\\\s* (:) \\\\s* (int | string) \\\\b )?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.return-value.php\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.other.type.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.enum.end.bracket.curly.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.enum.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-implements\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.enum.begin.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=}|\\\\?>)\",\n\t\t\t\t\t\"contentName\": \"meta.enum.body.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)\\\\b(case)\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.enum.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-constant\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?ix)\\n(?:\\n  \\\\b((?:(?:final|abstract|readonly)\\\\s+)*)(class)\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\n  |\\\\b(new)\\\\b\\\\s*(\\\\#\\\\[.*\\\\])?\\\\s*(?:(readonly)\\\\s+)?\\\\b(class)\\\\b # anonymous class\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"final|abstract\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.${0:/downcase}.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"readonly\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.class.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.php\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.other.new.php\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"storage.type.class.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.class.end.bracket.curly.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.class.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=class)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#named-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-extends\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-implements\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.class.begin.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=}|\\\\?>)\",\n\t\t\t\t\t\"contentName\": \"meta.class.body.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-constant\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#match_statement\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#switch_statement\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\s*\\\\b(yield\\\\s+from)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.yield-from.php\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?x)\\n\\\\b(\\n  break|case|continue|declare|default|die|do|\\n  else(if)?|end(declare|for(each)?|if|switch|while)|exit|\\n  for(each)?|if|return|switch|use|while|yield\\n)\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.${1:/downcase}.php\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?i)\\\\b((?:require|include)(?:_once)?)(\\\\s+|(?=\\\\())\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.include.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\s|;|$|\\\\?>)\",\n\t\t\t\"name\": \"meta.include.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(catch)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.exception.catch.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.catch.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n([a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ (?: \\\\s*\\\\|\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)*) # union or single exception class\\n\\\\s*\\n((\\\\$+)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)?           # Variable\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\|\",\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?i)(?=[\\\\\\\\a-z_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?xi)\\n( [a-z_\\\\x{7f}-\\\\x{10ffff}] [a-z0-9_\\\\x{7f}-\\\\x{10ffff}]* )\\n(?![a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.class.exception.php\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(catch|try|throw|exception|finally)\\\\b\",\n\t\t\t\"name\": \"keyword.control.exception.php\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?i)\\\\b(function)\\\\s*(?=&?\\\\s*\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\s*{)\",\n\t\t\t\"name\": \"meta.function.closure.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(&)?\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.function.parameters.php\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(use)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.function.use.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.closure.use.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(?i)((?:(&)\\\\s*)?(\\\\$+)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(?=,|\\\\))\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n(:)\\\\s*\\n(\\n  # nullable type\\n  (?:\\\\?\\\\s*)? [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ |\\n  # union, intersection or DNF type\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  (?: \\\\s*[|&]\\\\s*\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  )+\\n)\\n(?=\\\\s*(?:{|/[/*]|\\\\#|$))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.return-value.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#php-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?i)\\\\b(fn)\\\\s*(?=&?\\\\s*\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"=>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arrow.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.closure.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(&)\\\\s*)?(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.function.parameters.php\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n(:)\\\\s*\\n(\\n  # nullable type\\n  (?:\\\\?\\\\s*)? [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ |\\n  # union, intersection or DNF type\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  (?: \\\\s*[|&]\\\\s*\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  )+\\n)\\n(?=\\\\s*(?:=>|/[/*]|\\\\#|$))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.return-value.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#php-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n((?:(?:final|abstract|public|private|protected)\\\\s+)*)\\n(function)\\\\s+(__construct)\\n\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"final|abstract|public|private|protected\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.function.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.function.constructor.php\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.function.parameters.php\",\n\t\t\t\"end\": \"(?xi)\\n(\\\\)) \\\\s* ( : \\\\s*\\n  (?:\\\\?\\\\s*)? (?!\\\\s) [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\\\\\s\\\\|&()]+ (?<!\\\\s)\\n)?\\n(?=\\\\s*(?:{|/[/*]|\\\\#|$|;))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.return-type.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?xi)\\n((?:(?:public|private|protected|readonly)(?:\\\\s+|(?=\\\\?)))++)\\n(?: (\\n  # nullable type\\n  (?:\\\\?\\\\s*)? [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ |\\n  # union, intersection or DNF type\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  (?: \\\\s*[|&]\\\\s*\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  )+\\n) \\\\s+ )?\\n((?:(&)\\\\s*)?(\\\\$)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*) # Variable name with possible reference\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"public|private|protected|readonly\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#php-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*(?:,|\\\\)|/[/*]|\\\\#))\",\n\t\t\t\t\t\"name\": \"meta.function.parameter.promoted-property.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(?:,|\\\\)|/[/*]|\\\\#))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-default-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n((?:(?:final|abstract|public|private|protected|static)\\\\s+)*)\\n(function)\\\\s+\\n(?i:\\n  (__(?:call|construct|debugInfo|destruct|get|set|isset|unset|toString|\\n        clone|set_state|sleep|wakeup|autoload|invoke|callStatic|serialize|unserialize))\\n  |(?:(&)?\\\\s*([a-zA-Z_\\\\x{7f}-\\\\x{10ffff}][a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}]*))\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"final|abstract|public|private|protected|static\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.function.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.function.magic.php\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.php\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.function.parameters.php\",\n\t\t\t\"end\": \"(?xi)\\n(\\\\)) (?: \\\\s* (:) \\\\s* (\\n  # nullable type\\n  (?:\\\\?\\\\s*)? [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ |\\n  # union, intersection or DNF type\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  (?: \\\\s*[|&]\\\\s*\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  )+\\n) )?\\n(?=\\\\s*(?:{|/[/*]|\\\\#|$|;))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.return-value.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(static)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"storage.type.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(never)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.type.never.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#php-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?xi)\\n((?:(?:public|private|protected|static|readonly)(?:\\\\s+|(?=\\\\?)))++)                     # At least one modifier\\n(\\n  # nullable type\\n  (?:\\\\?\\\\s*)? [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ |\\n  # union, intersection or DNF type\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  (?: \\\\s*[|&]\\\\s*\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  )+\\n)?\\n\\\\s+ ((\\\\$)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)          # Variable name\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"public|private|protected|static|readonly\",\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#php-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#invoke-call\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#scope-resolution\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#variables\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.construct.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.bracket.round.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(array)(\\\\()(\\\\))\",\n\t\t\t\"name\": \"meta.array.empty.php\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(array)\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.construct.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.end.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.array.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)(\\\\()\\\\s*(array|real|double|float|int(?:eger)?|bool(?:ean)?|string|object|binary|unset)\\\\s*(\\\\))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage-type.begin.bracket.round.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.storage-type.end.bracket.round.php\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(array|real|double|float|int(eger)?|bool(ean)?|string|class|var|function|interface|trait|parent|self|object|mixed)\\\\b\",\n\t\t\t\"name\": \"storage.type.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(global|abstract|const|final|private|protected|public|static)\\\\b\",\n\t\t\t\"name\": \"storage.modifier.php\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#object\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.expression.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \":\",\n\t\t\t\"name\": \"punctuation.terminator.statement.php\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#heredoc\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#numbers\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\bclone\\\\b\",\n\t\t\t\"name\": \"keyword.other.clone.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\"name\": \"keyword.operator.spread.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\.=?\",\n\t\t\t\"name\": \"keyword.operator.string.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"=>\",\n\t\t\t\"name\": \"keyword.operator.key.php\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i)(\\\\=)(&)|(&)(?=[$a-z_])\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"@\",\n\t\t\t\"name\": \"keyword.operator.error-control.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"===|==|!==|!=|<>\",\n\t\t\t\"name\": \"keyword.operator.comparison.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"=|\\\\+=|\\\\-=|\\\\*\\\\*?=|/=|%=|&=|\\\\|=|\\\\^=|<<=|>>=|\\\\?\\\\?=\",\n\t\t\t\"name\": \"keyword.operator.assignment.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"<=>|<=|>=|<|>\",\n\t\t\t\"name\": \"keyword.operator.comparison.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\-\\\\-|\\\\+\\\\+\",\n\t\t\t\"name\": \"keyword.operator.increment-decrement.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\-|\\\\+|\\\\*\\\\*?|/|%\",\n\t\t\t\"name\": \"keyword.operator.arithmetic.php\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)(!|&&|\\\\|\\\\|)|\\\\b(and|or|xor|as)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.logical.php\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function-call\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"<<|>>|~|\\\\^|&|\\\\|\",\n\t\t\t\"name\": \"keyword.operator.bitwise.php\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?i)\\\\b(instanceof)\\\\s+(?=[\\\\\\\\$a-z_])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?i)(?=[^\\\\\\\\$a-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#instantiation\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.goto.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.other.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i)(goto)\\\\s+([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.goto-label.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i)^\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*(?<!default))\\\\s*:(?!:)\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#string-backtick\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#ternary_shorthand\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#null_coalescing\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#ternary_expression\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.curly.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.curly.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constants\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"attribute-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=\\\\\\\\?[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\\\\\\\\)\",\n\t\t\t\t\t\"end\": \"(?xi)\\n( [a-z_\\\\x{7f}-\\\\x{10ffff}] [a-z0-9_\\\\x{7f}-\\\\x{10ffff}]* )?\\n(?![a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.attribute.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n(\\\\\\\\)?\\\\b(Attribute|SensitiveParameter|AllowDynamicProperties|ReturnTypeWillChange)\\\\b\",\n\t\t\t\t\t\"name\": \"support.attribute.builtin.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=[\\\\\\\\a-z_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"end\": \"(?xi)\\n( [a-z_\\\\x{7f}-\\\\x{10ffff}] [a-z0-9_\\\\x{7f}-\\\\x{10ffff}]* )?\\n(?![a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.attribute.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attribute\": {\n\t\t\t\"begin\": \"\\\\#\\\\[\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"name\": \"meta.attribute.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#attribute-name\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#named-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-builtin\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n(\\\\\\\\)?\\\\b\\n(Attribute|(APC|Append)Iterator|Array(Access|Iterator|Object)\\n|Bad(Function|Method)CallException\\n|(Caching|CallbackFilter)Iterator|Collator|Collectable|Cond|Countable|CURLFile\\n|Date(Interval|Period|Time(Interface|Immutable|Zone)?)?|Directory(Iterator)?|DomainException\\n|DOM(Attr|CdataSection|CharacterData|Comment|Document(Fragment)?|Element|EntityReference\\n    |Implementation|NamedNodeMap|Node(list)?|ProcessingInstruction|Text|XPath)\\n|(Error)?Exception|EmptyIterator\\n|finfo\\n|Ev(Check|Child|Embed|Fork|Idle|Io|Loop|Periodic|Prepare|Signal|Stat|Timer|Watcher)?\\n|Event(Base|Buffer(Event)?|SslContext|Http(Request|Connection)?|Config|DnsBase|Util|Listener)?\\n|FANNConnection|(Filter|Filesystem)Iterator\\n|Gender\\\\\\\\Gender|GlobIterator|Gmagick(Draw|Pixel)?\\n|Haru(Annotation|Destination|Doc|Encoder|Font|Image|Outline|Page)\\n|Http((Inflate|Deflate)?Stream|Message|Request(Pool)?|Response|QueryString)\\n|HRTime\\\\\\\\(PerformanceCounter|StopWatch)\\n|Intl(Calendar|((CodePoint|RuleBased)?Break|Parts)?Iterator|DateFormatter|TimeZone)\\n|Imagick(Draw|Pixel(Iterator)?)?\\n|InfiniteIterator|InvalidArgumentException|Iterator(Aggregate|Iterator)?\\n|JsonSerializable\\n|KTaglib_(MPEG_(File|AudioProperties)|Tag|ID3v2_(Tag|(AttachedPicture)?Frame))\\n|Lapack|(Length|Locale|Logic)Exception|LimitIterator|Lua(Closure)?\\n|Mongo(BinData|Client|Code|Collection|CommandCursor|Cursor(Exception)?|Date|DB(Ref)?|DeleteBatch\\n      |Grid(FS(Cursor|File)?)|Id|InsertBatch|Int(32|64)|Log|Pool|Regex|ResultException|Timestamp\\n      |UpdateBatch|Write(Batch|ConcernException))?\\n|Memcache(d)?|MessageFormatter|MultipleIterator|Mutex\\n|mysqli(_(driver|stmt|warning|result))?\\n|MysqlndUh(Connection|PreparedStatement)\\n|NoRewindIterator|Normalizer|NumberFormatter\\n|OCI-(Collection|Lob)|OuterIterator|(OutOf(Bounds|Range)|Overflow)Exception\\n|ParentIterator|PDO(Statement)?|Phar(Data|FileInfo)?|php_user_filter|Pool\\n|QuickHash(Int(Set|StringHash)|StringIntHash)\\n|Recursive(Array|Caching|Directory|Fallback|Filter|Iterator|Regex|Tree)?Iterator\\n|Reflection(Class|Function(Abstract)?|Method|Object|Parameter|Property|(Zend)?Extension)?\\n|RangeException|Reflector|RegexIterator|ResourceBundle|RuntimeException|RRD(Creator|Graph|Updater)\\n|SAM(Connection|Message)|SCA(_(SoapProxy|LocalProxy))?\\n|SDO_(DAS_(ChangeSummary|Data(Factory|Object)|Relational|Setting|XML(_Document)?)\\n     |Data(Factory|Object)|Exception|List|Model_(Property|ReflectionDataObject|Type)|Sequence)\\n|SeekableIterator|Serializable|SessionHandler(Interface)?|SimpleXML(Iterator|Element)|SNMP\\n|Soap(Client|Fault|Header|Param|Server|Var)\\n|SphinxClient|Spoofchecker\\n|Spl(DoublyLinkedList|Enum|File(Info|Object)|FixedArray|(Max|Min)?Heap|Observer|ObjectStorage\\n    |(Priority)?Queue|Stack|Subject|Type|TempFileObject)\\n|SQLite(3(Result|Stmt)?|Database|Result|Unbuffered)\\n|stdClass|streamWrapper|SVM(Model)?|Swish(Result(s)?|Search)?|Sync(Event|Mutex|ReaderWriter|Semaphore)\\n|Thread(ed)?|tidy(Node)?|TokyoTyrant(Table|Iterator|Query)?|Transliterator|Traversable\\n|UConverter|(Underflow|UnexpectedValue)Exception\\n|V8Js(Exception)?|Varnish(Admin|Log|Stat)\\n|Worker|Weak(Map|Ref)\\n|XML(Diff\\\\\\\\(Base|DOM|File|Memory)|Reader|Writer)|XsltProcessor\\n|Yaf_(Route_(Interface|Map|Regex|Rewrite|Simple|Supervar)\\n     |Action_Abstract|Application|Config_(Simple|Ini|Abstract)|Controller_Abstract\\n     |Dispatcher|Exception|Loader|Plugin_Abstract|Registry|Request_(Abstract|Simple|Http)\\n     |Response_Abstract|Router|Session|View_(Simple|Interface))\\n|Yar_(Client(_Exception)?|Concurrent_Client|Server(_Exception)?)\\n|ZipArchive|ZMQ(Context|Device|Poll|Socket)?)\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.class.builtin.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=\\\\\\\\?[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\\\\\\\\)\",\n\t\t\t\t\t\"end\": \"(?xi)\\n( [a-z_\\\\x{7f}-\\\\x{10ffff}] [a-z0-9_\\\\x{7f}-\\\\x{10ffff}]* )?\\n(?![a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-builtin\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=[\\\\\\\\a-z_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"end\": \"(?xi)\\n( [a-z_\\\\x{7f}-\\\\x{10ffff}] [a-z0-9_\\\\x{7f}-\\\\x{10ffff}]* )?\\n(?![a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inheritance-single\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=\\\\\\\\?[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\\\\\\\\)\",\n\t\t\t\t\t\"end\": \"(?i)([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)?(?=[^a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.inherited-class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-builtin\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\",\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-extends\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(extends)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.extends.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?i)(?=[^A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance-single\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface-extends\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(extends)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.extends.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?i)(?={)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.classes.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance-single\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-implements\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(implements)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.implements.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?i)(?={)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.classes.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inheritance-single\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-constant\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(const)\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?=\\\\s)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.block.documentation.phpdoc.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#php_doc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"name\": \"comment.block.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^\\\\s+)?(?=//)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n|(?=\\\\?>)\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^\\\\s+)?(?=#)(?!#\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n|(?=\\\\?>)\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.number-sign.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\\\\\)?\\\\b\\n(DEFAULT_INCLUDE_PATH\\n|EAR_(INSTALL|EXTENSION)_DIR\\n|E_(ALL|COMPILE_(ERROR|WARNING)|CORE_(ERROR|WARNING)|DEPRECATED|ERROR|NOTICE\\n   |PARSE|RECOVERABLE_ERROR|STRICT|USER_(DEPRECATED|ERROR|NOTICE|WARNING)|WARNING)\\n|PHP_(ROUND_HALF_(DOWN|EVEN|ODD|UP)|(MAJOR|MINOR|RELEASE)_VERSION|MAXPATHLEN\\n     |BINDIR|SHLIB_SUFFIX|SYSCONFDIR|SAPI|CONFIG_FILE_(PATH|SCAN_DIR)\\n     |INT_(MAX|SIZE)|ZTS|OS|OUTPUT_HANDLER_(START|CONT|END)|DEBUG|DATADIR\\n     |URL_(SCHEME|HOST|USER|PORT|PASS|PATH|QUERY|FRAGMENT)|PREFIX\\n     |EXTRA_VERSION|EXTENSION_DIR|EOL|VERSION(_ID)?\\n     |WINDOWS_(NT_(SERVER|DOMAIN_CONTROLLER|WORKSTATION)\\n              |VERSION_(MAJOR|MINOR)|BUILD|SUITEMASK|SP_(MAJOR|MINOR)\\n              |PRODUCTTYPE|PLATFORM)\\n     |LIBDIR|LOCALSTATEDIR)\\n|STD(ERR|IN|OUT)|ZEND_(DEBUG_BUILD|THREAD_SAFE))\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.core.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\\\\\)?\\\\b\\n(__COMPILER_HALT_OFFSET__|AB(MON_(1|2|3|4|5|6|7|8|9|10|11|12)|DAY[1-7])\\n|AM_STR|ASSERT_(ACTIVE|BAIL|CALLBACK_QUIET_EVAL|WARNING)|ALT_DIGITS\\n|CASE_(UPPER|LOWER)|CHAR_MAX|CONNECTION_(ABORTED|NORMAL|TIMEOUT)|CODESET|COUNT_(NORMAL|RECURSIVE)\\n|CREDITS_(ALL|DOCS|FULLPAGE|GENERAL|GROUP|MODULES|QA|SAPI)\\n|CRYPT_(BLOWFISH|EXT_DES|MD5|SHA(256|512)|SALT_LENGTH|STD_DES)|CURRENCY_SYMBOL\\n|D_(T_)?FMT|DATE_(ATOM|COOKIE|ISO8601|RFC(822|850|1036|1123|2822|3339)|RSS|W3C)\\n|DAY_[1-7]|DECIMAL_POINT|DIRECTORY_SEPARATOR\\n|ENT_(COMPAT|IGNORE|(NO)?QUOTES)|EXTR_(IF_EXISTS|OVERWRITE|PREFIX_(ALL|IF_EXISTS|INVALID|SAME)|REFS|SKIP)\\n|ERA(_(D_(T_)?FMT)|T_FMT|YEAR)?|FRAC_DIGITS|GROUPING|HASH_HMAC|HTML_(ENTITIES|SPECIALCHARS)\\n|INF|INFO_(ALL|CREDITS|CONFIGURATION|ENVIRONMENT|GENERAL|LICENSEMODULES|VARIABLES)\\n|INI_(ALL|CANNER_(NORMAL|RAW)|PERDIR|SYSTEM|USER)|INT_(CURR_SYMBOL|FRAC_DIGITS)\\n|LC_(ALL|COLLATE|CTYPE|MESSAGES|MONETARY|NUMERIC|TIME)|LOCK_(EX|NB|SH|UN)\\n|LOG_(ALERT|AUTH(PRIV)?|CRIT|CRON|CONS|DAEMON|DEBUG|EMERG|ERR|INFO|LOCAL[1-7]|LPR|KERN|MAIL\\n     |NEWS|NODELAY|NOTICE|NOWAIT|ODELAY|PID|PERROR|WARNING|SYSLOG|UCP|USER)\\n|M_(1_PI|SQRT(1_2|2|3|PI)|2_(SQRT)?PI|PI(_(2|4))?|E(ULER)?|LN(10|2|PI)|LOG(10|2)E)\\n|MON_(1|2|3|4|5|6|7|8|9|10|11|12|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)\\n|N_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|NAN|NEGATIVE_SIGN|NO(EXPR|STR)\\n|P_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|PM_STR|POSITIVE_SIGN\\n|PATH(_SEPARATOR|INFO_(EXTENSION|(BASE|DIR|FILE)NAME))|RADIXCHAR\\n|SEEK_(CUR|END|SET)|SORT_(ASC|DESC|LOCALE_STRING|REGULAR|STRING)|STR_PAD_(BOTH|LEFT|RIGHT)\\n|T_FMT(_AMPM)?|THOUSEP|THOUSANDS_SEP\\n|UPLOAD_ERR_(CANT_WRITE|EXTENSION|(FORM|INI)_SIZE|NO_(FILE|TMP_DIR)|OK|PARTIAL)\\n|YES(EXPR|STR))\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.std.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\\\\\)?\\\\b\\n(GLOB_(MARK|BRACE|NO(SORT|CHECK|ESCAPE)|ONLYDIR|ERR|AVAILABLE_FLAGS)\\n|XML_(SAX_IMPL|(DTD|DOCUMENT(_(FRAG|TYPE))?|HTML_DOCUMENT|NOTATION|NAMESPACE_DECL|PI|COMMENT|DATA_SECTION|TEXT)_NODE\\n     |OPTION_(SKIP_(TAGSTART|WHITE)|CASE_FOLDING|TARGET_ENCODING)\\n     |ERROR_((BAD_CHAR|(ATTRIBUTE_EXTERNAL|BINARY|PARAM|RECURSIVE)_ENTITY)_REF|MISPLACED_XML_PI|SYNTAX|NONE\\n            |NO_(MEMORY|ELEMENTS)|TAG_MISMATCH|INCORRECT_ENCODING|INVALID_TOKEN|DUPLICATE_ATTRIBUTE\\n            |UNCLOSED_(CDATA_SECTION|TOKEN)|UNDEFINED_ENTITY|UNKNOWN_ENCODING|JUNK_AFTER_DOC_ELEMENT\\n            |PARTIAL_CHAR|EXTERNAL_ENTITY_HANDLING|ASYNC_ENTITY)\\n     |ENTITY_(((REF|DECL)_)?NODE)|ELEMENT(_DECL)?_NODE|LOCAL_NAMESPACE|ATTRIBUTE_(NMTOKEN(S)?|NOTATION|NODE)\\n     |CDATA|ID(REF(S)?)?|DECL_NODE|ENTITY|ENUMERATION)\\n|MHASH_(RIPEMD(128|160|256|320)|GOST|MD(2|4|5)|SHA(1|224|256|384|512)|SNEFRU256|HAVAL(128|160|192|224|256)\\n       |CRC23(B)?|TIGER(128|160)?|WHIRLPOOL|ADLER32)\\n|MYSQL_(BOTH|NUM|CLIENT_(SSL|COMPRESS|IGNORE_SPACE|INTERACTIVE|ASSOC))\\n|MYSQLI_(REPORT_(STRICT|INDEX|OFF|ERROR|ALL)|REFRESH_(GRANT|MASTER|BACKUP_LOG|STATUS|SLAVE|HOSTS|THREADS|TABLES|LOG)\\n        |READ_DEFAULT_(FILE|GROUP)|(GROUP|MULTIPLE_KEY|BINARY|BLOB)_FLAG|BOTH\\n        |STMT_ATTR_(CURSOR_TYPE|UPDATE_MAX_LENGTH|PREFETCH_ROWS)|STORE_RESULT\\n        |SERVER_QUERY_(NO_((GOOD_)?INDEX_USED)|WAS_SLOW)|SET_(CHARSET_NAME|FLAG)\\n        |NO_(DEFAULT_VALUE_FLAG|DATA)|NOT_NULL_FLAG|NUM(_FLAG)?\\n        |CURSOR_TYPE_(READ_ONLY|SCROLLABLE|NO_CURSOR|FOR_UPDATE)\\n        |CLIENT_(SSL|NO_SCHEMA|COMPRESS|IGNORE_SPACE|INTERACTIVE|FOUND_ROWS)\\n        |TYPE_(GEOMETRY|((MEDIUM|LONG|TINY)_)?BLOB|BIT|SHORT|STRING|SET|YEAR|NULL|NEWDECIMAL|NEWDATE|CHAR\\n              |TIME(STAMP)?|TINY|INT24|INTERVAL|DOUBLE|DECIMAL|DATE(TIME)?|ENUM|VAR_STRING|FLOAT|LONG(LONG)?)\\n        |TIME_STAMP_FLAG|INIT_COMMAND|ZEROFILL_FLAG|ON_UPDATE_NOW_FLAG\\n        |OPT_(NET_((CMD|READ)_BUFFER_SIZE)|CONNECT_TIMEOUT|INT_AND_FLOAT_NATIVE|LOCAL_INFILE)\\n        |DEBUG_TRACE_ENABLED|DATA_TRUNCATED|USE_RESULT|(ENUM|(PART|PRI|UNIQUE)_KEY|UNSIGNED)_FLAG\\n        |ASSOC|ASYNC|AUTO_INCREMENT_FLAG)\\n|MCRYPT_(RC(2|6)|RIJNDAEL_(128|192|256)|RAND|GOST|XTEA|MODE_(STREAM|NOFB|CBC|CFB|OFB|ECB)|MARS\\n        |BLOWFISH(_COMPAT)?|SERPENT|SKIPJACK|SAFER(64|128|PLUS)|CRYPT|CAST_(128|256)|TRIPLEDES|THREEWAY\\n        |TWOFISH|IDEA|(3)?DES|DECRYPT|DEV_(U)?RANDOM|PANAMA|ENCRYPT|ENIGNA|WAKE|LOKI97|ARCFOUR(_IV)?)\\n|STREAM_(REPORT_ERRORS|MUST_SEEK|MKDIR_RECURSIVE|BUFFER_(NONE|FULL|LINE)|SHUT_(RD)?WR\\n        |SOCK_(RDM|RAW|STREAM|SEQPACKET|DGRAM)|SERVER_(BIND|LISTEN)\\n        |NOTIFY_(REDIRECTED|RESOLVE|MIME_TYPE_IS|SEVERITY_(INFO|ERR|WARN)|COMPLETED|CONNECT|PROGRESS\\n                |FILE_SIZE_IS|FAILURE|AUTH_(REQUIRED|RESULT))\\n        |CRYPTO_METHOD_((SSLv2(3)?|SSLv3|TLS)_(CLIENT|SERVER))|CLIENT_((ASYNC_)?CONNECT|PERSISTENT)\\n        |CAST_(AS_STREAM|FOR_SELECT)|(IGNORE|IS)_URL|IPPROTO_(RAW|TCP|ICMP|IP|UDP)|OOB\\n        |OPTION_(READ_(BUFFER|TIMEOUT)|BLOCKING|WRITE_BUFFER)|URL_STAT_(LINK|QUIET)|USE_PATH\\n        |PEEK|PF_(INET(6)?|UNIX)|ENFORCE_SAFE_MODE|FILTER_(ALL|READ|WRITE))\\n|SUNFUNCS_RET_(DOUBLE|STRING|TIMESTAMP)\\n|SQLITE_(READONLY|ROW|MISMATCH|MISUSE|BOTH|BUSY|SCHEMA|NOMEM|NOTFOUND|NOTADB|NOLFS|NUM|CORRUPT\\n        |CONSTRAINT|CANTOPEN|TOOBIG|INTERRUPT|INTERNAL|IOERR|OK|DONE|PROTOCOL|PERM|ERROR|EMPTY\\n        |FORMAT|FULL|LOCKED|ABORT|ASSOC|AUTH)\\n|SQLITE3_(BOTH|BLOB|NUM|NULL|TEXT|INTEGER|OPEN_(READ(ONLY|WRITE)|CREATE)|FLOAT_ASSOC)\\n|CURL(M_(BAD_((EASY)?HANDLE)|CALL_MULTI_PERFORM|INTERNAL_ERROR|OUT_OF_MEMORY|OK)\\n     |MSG_DONE|SSH_AUTH_(HOST|NONE|DEFAULT|PUBLICKEY|PASSWORD|KEYBOARD)\\n     |CLOSEPOLICY_(SLOWEST|CALLBACK|OLDEST|LEAST_(RECENTLY_USED|TRAFFIC)\\n     |INFO_(REDIRECT_(COUNT|TIME)|REQUEST_SIZE|SSL_VERIFYRESULT|STARTTRANSFER_TIME\\n           |(SIZE|SPEED)_(DOWNLOAD|UPLOAD)|HTTP_CODE|HEADER_(OUT|SIZE)|NAMELOOKUP_TIME\\n           |CONNECT_TIME|CONTENT_(TYPE|LENGTH_(DOWNLOAD|UPLOAD))|CERTINFO|TOTAL_TIME\\n           |PRIVATE|PRETRANSFER_TIME|EFFECTIVE_URL|FILETIME)\\n     |OPT_(RESUME_FROM|RETURNTRANSFER|REDIR_PROTOCOLS|REFERER|READ(DATA|FUNCTION)|RANGE|RANDOM_FILE\\n          |MAX(CONNECTS|REDIRS)|BINARYTRANSFER|BUFFERSIZE\\n          |SSH_(HOST_PUBLIC_KEY_MD5|(PRIVATE|PUBLIC)_KEYFILE)|AUTH_TYPES)\\n          |SSL(CERT(TYPE|PASSWD)?|ENGINE(_DEFAULT)?|VERSION|KEY(TYPE|PASSWD)?)\\n          |SSL_(CIPHER_LIST|VERIFY(HOST|PEER))\\n          |STDERR|HTTP(GET|HEADER|200ALIASES|_VERSION|PROXYTUNNEL|AUTH)\\n          |HEADER(FUNCTION)?|NO(BODY|SIGNAL|PROGRESS)|NETRC|CRLF|CONNECTTIMEOUT(_MS)?\\n          |COOKIE(SESSION|JAR|FILE)?|CUSTOMREQUEST|CERTINFO|CLOSEPOLICY|CA(INFO|PATH)|TRANSFERTEXT\\n          |TCP_NODELAY|TIME(CONDITION|OUT(_MS)?|VALUE)|INTERFACE|INFILE(SIZE)?|IPRESOLVE\\n          |DNS_(CACHE_TIMEOUT|USE_GLOBAL_CACHE)|URL|USER(AGENT|PWD)|UNRESTRICTED_AUTH|UPLOAD\\n          |PRIVATE|PROGRESSFUNCTION|PROXY(TYPE|USERPWD|PORT|AUTH)?|PROTOCOLS|PORT\\n          |POST(REDIR|QUOTE|FIELDS)?|PUT|EGDSOCKET|ENCODING|VERBOSE|KRB4LEVEL|KEYPASSWD|QUOTE|FRESH_CONNECT\\n          |FTP(APPEND|LISTONLY|PORT|SSLAUTH)\\n          |FTP_(SSL|SKIP_PASV_IP|CREATE_MISSING_DIRS|USE_EP(RT|SV)|FILEMETHOD)\\n          |FILE(TIME)?|FORBID_REUSE|FOLLOWLOCATION|FAILONERROR|WRITE(FUNCTION|HEADER)|LOW_SPEED_(LIMIT|TIME)\\n          |AUTOREFERER)\\n     |PROXY_(HTTP|SOCKS(4|5))|PROTO_(SCP|SFTP|HTTP(S)?|TELNET|TFTP|DICT|FTP(S)?|FILE|LDAP(S)?|ALL)\\n     |E_((RECV|READ)_ERROR|GOT_NOTHING|MALFORMAT_USER\\n        |BAD_(CONTENT_ENCODING|CALLING_ORDER|PASSWORD_ENTERED|FUNCTION_ARGUMENT)\\n        |SSH|SSL_(CIPHER|CONNECT_ERROR|CERTPROBLEM|CACERT|PEER_CERTIFICATE|ENGINE_(NOTFOUND|SETFAILED))\\n        |SHARE_IN_USE|SEND_ERROR|HTTP_(RANGE_ERROR|NOT_FOUND|PORT_FAILED|POST_ERROR)\\n        |COULDNT_(RESOLVE_(HOST|PROXY)|CONNECT)|TOO_MANY_REDIRECTS|TELNET_OPTION_SYNTAX|OBSOLETE\\n        |OUT_OF_MEMORY|OPERATION|TIMEOUTED|OK|URL_MALFORMAT(_USER)?|UNSUPPORTED_PROTOCOL\\n        |UNKNOWN_TELNET_OPTION|PARTIAL_FILE\\n        |FTP_(BAD_DOWNLOAD_RESUME|SSL_FAILED|COULDNT_(RETR_FILE|GET_SIZE|STOR_FILE|SET_(BINARY|ASCII)|USE_REST)\\n             |CANT_(GET_HOST|RECONNECT)|USER_PASSWORD_INCORRECT|PORT_FAILED|QUOTE_ERROR|WRITE_ERROR\\n             |WEIRD_((PASS|PASV|SERVER|USER)_REPLY|227_FORMAT)|ACCESS_DENIED)\\n        |FILESIZE_EXCEEDED|FILE_COULDNT_READ_FILE|FUNCTION_NOT_FOUND|FAILED_INIT|WRITE_ERROR|LIBRARY_NOT_FOUND\\n        |LDAP_(SEARCH_FAILED|CANNOT_BIND|INVALID_URL)|ABORTED_BY_CALLBACK)\\n     |VERSION_NOW\\n     |FTP(METHOD_(MULTI|SINGLE|NO)CWD|SSL_(ALL|NONE|CONTROL|TRY)|AUTH_(DEFAULT|SSL|TLS))\\n     |AUTH_(ANY(SAFE)?|BASIC|DIGEST|GSSNEGOTIATE|NTLM))\\n|CURL_(HTTP_VERSION_(1_(0|1)|NONE)|NETRC_(REQUIRED|IGNORED|OPTIONAL)|TIMECOND_(IF(UN)?MODSINCE|LASTMOD)\\n      |IPRESOLVE_(V(4|6)|WHATEVER)|VERSION_(SSL|IPV6|KERBEROS4|LIBZ))\\n|IMAGETYPE_(GIF|XBM|BMP|SWF|COUNT|TIFF_(MM|II)|ICO|IFF|UNKNOWN|JB2|JPX|JP2|JPC|JPEG(2000)?|PSD|PNG|WBMP)\\n|INPUT_(REQUEST|GET|SERVER|SESSION|COOKIE|POST|ENV)|ICONV_(MIME_DECODE_(STRICT|CONTINUE_ON_ERROR)|IMPL|VERSION)\\n|DNS_(MX|SRV|SOA|HINFO|NS|NAPTR|CNAME|TXT|PTR|ANY|ALL|AAAA|A(6)?)\\n|DOM(STRING_SIZE_ERR)\\n|DOM_((SYNTAX|HIERARCHY_REQUEST|NO_(MODIFICATION_ALLOWED|DATA_ALLOWED)|NOT_(FOUND|SUPPORTED)|NAMESPACE\\n     |INDEX_SIZE|USE_ATTRIBUTE|VALID_(MODIFICATION|STATE|CHARACTER|ACCESS)|PHP|VALIDATION|WRONG_DOCUMENT)_ERR)\\n|JSON_(HEX_(TAG|QUOT|AMP|APOS)|NUMERIC_CHECK|ERROR_(SYNTAX|STATE_MISMATCH|NONE|CTRL_CHAR|DEPTH|UTF8)|FORCE_OBJECT)\\n|PREG_((D_UTF8(_OFFSET)?|NO|INTERNAL|(BACKTRACK|RECURSION)_LIMIT)_ERROR|GREP_INVERT\\n      |SPLIT_(NO_EMPTY|(DELIM|OFFSET)_CAPTURE)|SET_ORDER|OFFSET_CAPTURE|PATTERN_ORDER)\\n|PSFS_(PASS_ON|ERR_FATAL|FEED_ME|FLAG_(NORMAL|FLUSH_(CLOSE|INC)))\\n|PCRE_VERSION|POSIX_((F|R|W|X)_OK|S_IF(REG|BLK|SOCK|CHR|IFO))\\n|FNM_(NOESCAPE|CASEFOLD|PERIOD|PATHNAME)\\n|FILTER_(REQUIRE_(SCALAR|ARRAY)|NULL_ON_FAILURE|CALLBACK|DEFAULT|UNSAFE_RAW\\n        |SANITIZE_(MAGIC_QUOTES|STRING|STRIPPED|SPECIAL_CHARS|NUMBER_(INT|FLOAT)|URL\\n                  |EMAIL|ENCODED|FULL_SPCIAL_CHARS)\\n        |VALIDATE_(REGEXP|BOOLEAN|INT|IP|URL|EMAIL|FLOAT)\\n        |FORCE_ARRAY\\n        |FLAG_(SCHEME_REQUIRED|STRIP_(BACKTICK|HIGH|LOW)|HOST_REQUIRED|NONE|NO_(RES|PRIV)_RANGE|ENCODE_QUOTES\\n              |IPV(4|6)|PATH_REQUIRED|EMPTY_STRING_NULL|ENCODE_(HIGH|LOW|AMP)|QUERY_REQUIRED\\n              |ALLOW_(SCIENTIFIC|HEX|THOUSAND|OCTAL|FRACTION)))\\n|FILE_(BINARY|SKIP_EMPTY_LINES|NO_DEFAULT_CONTEXT|TEXT|IGNORE_NEW_LINES|USE_INCLUDE_PATH|APPEND)\\n|FILEINFO_(RAW|MIME(_(ENCODING|TYPE))?|SYMLINK|NONE|CONTINUE|DEVICES|PRESERVE_ATIME)\\n|FORCE_(DEFLATE|GZIP)\\n|LIBXML_(XINCLUDE|NSCLEAN|NO(XMLDECL|BLANKS|NET|CDATA|ERROR|EMPTYTAG|ENT|WARNING)\\n        |COMPACT|DTD(VALID|LOAD|ATTR)|((DOTTED|LOADED)_)?VERSION|PARSEHUGE|ERR_(NONE|ERROR|FATAL|WARNING)))\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.ext.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\\\\\)?\\\\b\\n(T_(RETURN|REQUIRE(_ONCE)?|GOTO|GLOBAL|(MINUS|MOD|MUL|XOR)_EQUAL|METHOD_C|ML_COMMENT|BREAK\\n   |BOOL_CAST|BOOLEAN_(AND|OR)|BAD_CHARACTER|SR(_EQUAL)?|STRING(_CAST|VARNAME)?|START_HEREDOC|STATIC\\n   |SWITCH|SL(_EQUAL)?|HALT_COMPILER|NS_(C|SEPARATOR)|NUM_STRING|NEW|NAMESPACE|CHARACTER|COMMENT\\n   |CONSTANT(_ENCAPSED_STRING)?|CONCAT_EQUAL|CONTINUE|CURLY_OPEN|CLOSE_TAG|CLONE|CLASS(_C)?\\n   |CASE|CATCH|TRY|THROW|IMPLEMENTS|ISSET|IS_((GREATER|SMALLER)_OR_EQUAL|(NOT_)?(IDENTICAL|EQUAL))\\n   |INSTANCEOF|INCLUDE(_ONCE)?|INC|INT_CAST|INTERFACE|INLINE_HTML|IF|OR_EQUAL|OBJECT_(CAST|OPERATOR)\\n   |OPEN_TAG(_WITH_ECHO)?|OLD_FUNCTION|DNUMBER|DIR|DIV_EQUAL|DOC_COMMENT|DOUBLE_(ARROW|CAST|COLON)\\n   |DOLLAR_OPEN_CURLY_BRACES|DO|DEC|DECLARE|DEFAULT|USE|UNSET(_CAST)?|PRINT|PRIVATE|PROTECTED|PUBLIC\\n   |PLUS_EQUAL|PAAMAYIM_NEKUDOTAYIM|EXTENDS|EXIT|EMPTY|ENCAPSED_AND_WHITESPACE\\n   |END(SWITCH|IF|DECLARE|FOR(EACH)?|WHILE)|END_HEREDOC|ECHO|EVAL|ELSE(IF)?|VAR(IABLE)?|FINAL|FILE\\n   |FOR(EACH)?|FUNC_C|FUNCTION|WHITESPACE|WHILE|LNUMBER|LIST|LINE|LOGICAL_(AND|OR|XOR)\\n   |ARRAY_(CAST)?|ABSTRACT|AS|AND_EQUAL))\\n\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.parser-token.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\",\n\t\t\t\t\t\"name\": \"constant.other.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n(?: (\\n  # nullable type\\n  (?:\\\\?\\\\s*)? [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ |\\n  # union, intersection or DNF type\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  (?: \\\\s*[|&]\\\\s*\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  )+\\n) \\\\s+ )?\\n((?:(&)\\\\s*)?(\\\\.\\\\.\\\\.)(\\\\$)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*) # Variable name with possible reference\\n(?=\\\\s*(?:,|\\\\)|/[/*]|\\\\#|$)) # A closing parentheses (end of argument list) or a comma or a comment\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#php-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.variadic.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.parameter.variadic.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?xi)\\n(\\n  # nullable type\\n  (?:\\\\?\\\\s*)? [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ |\\n  # union, intersection or DNF type\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  (?: \\\\s*[|&]\\\\s*\\n  (?: [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+ | \\\\(\\\\s* [a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+(?:\\\\s*&\\\\s*[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+)+ \\\\s*\\\\) )\\n  )+\\n)\\n\\\\s+ ((?:(&)\\\\s*)?(\\\\$)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*) # Variable name with possible reference\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#php-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*(?:,|\\\\)|/[/*]|\\\\#))\",\n\t\t\t\t\t\"name\": \"meta.function.parameter.typehinted.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(?:,|\\\\)|/[/*]|\\\\#))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#parameter-default-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n((?:(&)\\\\s*)?(\\\\$)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*) # Variable name with possible reference\\n(?=\\\\s*(?:,|\\\\)|/[/*]|\\\\#|$)) # A closing parentheses (end of argument list) or a comma or a comment\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.parameter.no-default.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?xi)\\n((?:(&)\\\\s*)?(\\\\$)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*) # Variable name with possible reference\\n\\\\s*(=)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s*(?:,|\\\\)|/[/*]|\\\\#))\",\n\t\t\t\t\t\"name\": \"meta.function.parameter.default.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-default-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"named-arguments\": {\n\t\t\t\"match\": \"(?i)(?<=^|\\\\(|,)\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(:)(?!:)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.parameter.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.php\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"function-call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(\\n  \\\\\\\\?(?<![a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}])                            # Optional root namespace\\n  [a-zA-Z_\\\\x{7f}-\\\\x{10ffff}][a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}]*          # First namespace\\n  (?:\\\\\\\\[a-zA-Z_\\\\x{7f}-\\\\x{10ffff}][a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}]*)+ # Additional namespaces\\n)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?i)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#named-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\\\\\)?(?<![a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}])([a-zA-Z_\\\\x{7f}-\\\\x{10ffff}][a-zA-Z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#namespace\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#support\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?i)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function-call.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#named-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(print|echo)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.construct.output.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"heredoc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(?=<<<\\\\s*(\\\"?)([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)(\\\\1)\\\\s*$)\",\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc_interior\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=<<<\\\\s*'([a-zA-Z_]+[a-zA-Z0-9_]*)'\\\\s*$)\",\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"name\": \"string.unquoted.nowdoc.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nowdoc_interior\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"heredoc_interior\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)(HTML)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.html\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)(XML)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.xml\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)([DS]QL)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.sql\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)(JAVASCRIPT|JS)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.js\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)(JSON)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.json\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.json\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)(CSS)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.css\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)(REGEXP?)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.regexp.heredoc.php\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\){1,2}[.$^\\\\[\\\\]{}]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.regex.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repitition.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repitition.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"({)\\\\d+(,\\\\d+)?(})\",\n\t\t\t\t\t\t\t\"name\": \"string.regexp.arbitrary-repitition.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\[(?:\\\\^?\\\\])?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"string.regexp.character-class.php\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\\\\\'\\\\[\\\\]]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[$^+*]\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.regexp.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(?<=^|\\\\s)(#)\\\\s(?=[[a-z0-9_\\\\x{7f}-\\\\x{10ffff},. \\\\t?!-][^\\\\x{00}-\\\\x{7f}]]*$)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"comment.line.number-sign.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(\\\"?)(BLADE)(\\\\2)(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.html.php.blade\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.php.blade\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<<<)\\\\s*(\\\"?)([a-z_\\\\x{7f}-\\\\x{10ffff}]+[a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)(\\\\2)(\\\\s*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\3)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nowdoc_interior\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'(HTML)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.html\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.html\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'(XML)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.xml\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.xml\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'([DS]QL)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.sql\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'(JAVASCRIPT|JS)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.js\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.js\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'(JSON)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.json\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.json\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'(CSS)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.css\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.css\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'(REGEXP?)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.regexp.nowdoc.php\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(\\\\\\\\){1,2}[.$^\\\\[\\\\]{}]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.regex.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repitition.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repitition.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"({)\\\\d+(,\\\\d+)?(})\",\n\t\t\t\t\t\t\t\"name\": \"string.regexp.arbitrary-repitition.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\[(?:\\\\^?\\\\])?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"string.regexp.character-class.php\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\\\\\'\\\\[\\\\]]\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[$^+*]\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.regexp.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?i)(?<=^|\\\\s)(#)\\\\s(?=[[a-z0-9_\\\\x{7f}-\\\\x{10ffff},. \\\\t?!-][^\\\\x{00}-\\\\x{7f}]]*$)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"comment.line.number-sign.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*'(BLADE)'(\\\\s*)$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.html.php.blade\",\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.php.blade\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(<<<)\\\\s*'([a-z_\\\\x{7f}-\\\\x{10ffff}]+[a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)'(\\\\s*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.trailing-whitespace.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"^\\\\s*(\\\\2)(?![A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nowdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"instantiation\": {\n\t\t\t\"begin\": \"(?i)(new)\\\\s+(?!class\\\\b)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.new.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?i)(?=[^a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(parent|static|self)(?![a-z0-9_\\\\x{7f}-\\\\x{10ffff}])\",\n\t\t\t\t\t\"name\": \"storage.type.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[0-7]{1,3}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.octal.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\x[0-9A-Fa-f]{1,2}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.hex.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\u{[0-9A-Fa-f]+}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.unicode.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[nrtvef$\\\\\\\\]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{(?=\\\\$.*?})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolation_double_quoted\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\"\",\n\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"invoke-call\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i)((\\\\$+)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)(?=\\\\s*\\\\()\",\n\t\t\t\"name\": \"meta.function-call.invoke.php\"\n\t\t},\n\t\t\"namespace\": {\n\t\t\t\"begin\": \"(?i)(?:(namespace)|[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)?(\\\\\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.language.namespace.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?i)(?![a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\\\\\\\\)\",\n\t\t\t\"name\": \"support.other.namespace.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\",\n\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numbers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0[xX][0-9a-fA-F]+(?:_[0-9a-fA-F]+)*\",\n\t\t\t\t\t\"name\": \"constant.numeric.hex.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0[bB][01]+(?:_[01]+)*\",\n\t\t\t\t\t\"name\": \"constant.numeric.binary.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0[oO][0-7]+(?:_[0-7]+)*\",\n\t\t\t\t\t\"name\": \"constant.numeric.octal.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0(?:_?[0-7]+)+\",\n\t\t\t\t\t\"name\": \"constant.numeric.octal.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?:\\n  (?:[0-9]+(?:_[0-9]+)*)?(\\\\.)[0-9]+(?:_[0-9]+)*(?:[eE][+-]?[0-9]+(?:_[0-9]+)*)?| # .3\\n  [0-9]+(?:_[0-9]+)*(\\\\.)(?:[0-9]+(?:_[0-9]+)*)?(?:[eE][+-]?[0-9]+(?:_[0-9]+)*)?| # 3.\\n  [0-9]+(?:_[0-9]+)*[eE][+-]?[0-9]+(?:_[0-9]+)*                                   # 2e-3\\n)\",\n\t\t\t\t\t\"name\": \"constant.numeric.decimal.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.decimal.period.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0|[1-9](?:_?[0-9]+)*\",\n\t\t\t\t\t\"name\": \"constant.numeric.decimal.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\??->)\\\\s*(\\\\$?{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(\\\\??->)\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.method-call.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#named-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i)(\\\\??->)\\\\s*((\\\\$+)?[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)?\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"php-types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\?\",\n\t\t\t\t\t\"name\": \"keyword.operator.nullable-type.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[|&]\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(null|int|float|bool|string|array|object|callable|iterable|true|false|mixed|void)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.type.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(parent|self)\\\\b\",\n\t\t\t\t\t\"name\": \"storage.type.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.bracket.round.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"punctuation.definition.type.end.bracket.round.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-default-types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-backtick\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"=>\",\n\t\t\t\t\t\"name\": \"keyword.operator.key.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"=\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"&(?=\\\\s*\\\\$)\",\n\t\t\t\t\t\"name\": \"storage.modifier.reference.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(array)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.construct.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.array.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.array.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.array.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-default-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.array.begin.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.array.end.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#instantiation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?xi)\\n(?=[a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]+\\n  (::)\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)?\\n)\",\n\t\t\t\t\t\"end\": \"(?i)(::)\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"php_doc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^(?!\\\\s*\\\\*).*?(?:(?=\\\\*\\\\/)|$\\\\n?)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.missing-asterisk.phpdoc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.phpdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.wrong-access-type.phpdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"^\\\\s*\\\\*\\\\s*(@access)\\\\s+((public|private|protected)|(.+))\\\\s*$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.phpdoc.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"markup.underline.link.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(@xlink)\\\\s+(.+)\\\\s*$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(@(?:global|param|property(-(read|write))?|return|throws|var))\\\\s+(?=[?A-Za-z_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]|\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.phpdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/)\",\n\t\t\t\t\t\"contentName\": \"meta.other.type.phpdoc.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#php_doc_types_array_multiple\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#php_doc_types_array_single\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#php_doc_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n@\\n(\\n  api|abstract|author|category|copyright|example|global|inherit[Dd]oc|internal|\\n  license|link|method|property(-(read|write))?|package|param|return|see|since|source|\\n  static|subpackage|throws|todo|var|version|uses|deprecated|final|ignore\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.other.phpdoc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.phpdoc.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"{(@(link|inherit[Dd]oc)).+?}\",\n\t\t\t\t\t\"name\": \"meta.tag.inline.phpdoc.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"php_doc_types\": {\n\t\t\t\"match\": \"(?i)\\\\??[a-z_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\][a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]*([|&]\\\\??[a-z_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\][a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]*)*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\?\",\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.nullable-type.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?x)\\\\b\\n(string|integer|int|boolean|bool|float|double|object|mixed\\n|array|resource|void|null|callback|false|true|self|static)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.type.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[|&]\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.bracket.round.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"php_doc_types_array_multiple\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.bracket.round.phpdoc.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))(\\\\[\\\\])|(?=\\\\*/)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.type.end.bracket.round.phpdoc.php\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.array.phpdoc.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#php_doc_types_array_multiple\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#php_doc_types_array_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#php_doc_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[|&]\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"php_doc_types_array_single\": {\n\t\t\t\"match\": \"(?i)([a-z_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\][a-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]*)(\\\\[\\\\])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#php_doc_types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.array.phpdoc.php\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regex-double-quoted\": {\n\t\t\t\"begin\": \"\\\"/(?=(\\\\\\\\.|[^\\\"/])++/[imsxeADSUXu]*\\\")\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(/)([imsxeADSUXu]*)(\\\")\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.double-quoted.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\\\\\){1,2}[.$^\\\\[\\\\]{}]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.regex.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation_double_quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"({)\\\\d+(,\\\\d+)?(})\",\n\t\t\t\t\t\"name\": \"string.regexp.arbitrary-repetition.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[(?:\\\\^?\\\\])?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"string.regexp.character-class.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation_double_quoted\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[$^+*]\",\n\t\t\t\t\t\"name\": \"keyword.operator.regexp.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regex-single-quoted\": {\n\t\t\t\"begin\": \"'/(?=(\\\\\\\\(?:\\\\\\\\(?:\\\\\\\\[\\\\\\\\']?|[^'])|.)|[^'/])++/[imsxeADSUXu]*')\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(/)([imsxeADSUXu]*)(')\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.single-quoted.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single_quote_regex_escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"({)\\\\d+(,\\\\d+)?(})\",\n\t\t\t\t\t\"name\": \"string.regexp.arbitrary-repetition.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[(?:\\\\^?\\\\])?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"name\": \"string.regexp.character-class.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[$^+*]\",\n\t\t\t\t\t\"name\": \"keyword.operator.regexp.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"scope-resolution\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([A-Za-z_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\][A-Za-z0-9_\\\\x{7f}-\\\\x{10ffff}\\\\\\\\]*)(?=\\\\s*::)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(self|static|parent)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-name\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)(::)\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.bracket.round.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.method-call.static.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#named-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(::)\\\\s*(class)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n(::)\\\\s*\\n(?:\\n  ((\\\\$+)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*) # Variable\\n  |\\n  ([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)       # Constant\\n)?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.class.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single_quote_regex_escape\": {\n\t\t\t\"match\": \"\\\\\\\\(?:\\\\\\\\(?:\\\\\\\\[\\\\\\\\']?|[^'])|.)\",\n\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t},\n\t\t\"sql-string-double-quoted\": {\n\t\t\t\"begin\": \"\\\"\\\\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER|AND|WITH)\\\\b)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"source.sql.embedded.php\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.sql.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(#)(\\\\\\\\\\\"|[^\\\"])*(?=\\\"|$)\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.sql\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(--)(\\\\\\\\\\\"|[^\\\"])*(?=\\\"|$)\",\n\t\t\t\t\t\"name\": \"comment.line.double-dash.sql\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\\\\\\\\"`']\",\n\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"'(?=((\\\\\\\\')|[^'\\\"])*(\\\"|$))\",\n\t\t\t\t\t\"name\": \"string.quoted.single.unclosed.sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"`(?=((\\\\\\\\`)|[^`\\\"])*(\\\"|$))\",\n\t\t\t\t\t\"name\": \"string.quoted.other.backtick.unclosed.sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"name\": \"string.quoted.single.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation_double_quoted\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"`\",\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"name\": \"string.quoted.other.backtick.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation_double_quoted\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation_double_quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sql-string-single-quoted\": {\n\t\t\t\"begin\": \"'\\\\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER|AND|WITH)\\\\b)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"source.sql.embedded.php\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.sql.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(#)(\\\\\\\\'|[^'])*(?='|$)\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.sql\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(--)(\\\\\\\\'|[^'])*(?='|$)\",\n\t\t\t\t\t\"name\": \"comment.line.double-dash.sql\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\\\\\'`\\\"]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"`(?=((\\\\\\\\`)|[^`'])*('|$))\",\n\t\t\t\t\t\"name\": \"string.quoted.other.backtick.unclosed.sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\"(?=((\\\\\\\\\\\")|[^\\\"'])*('|$))\",\n\t\t\t\t\t\"name\": \"string.quoted.double.unclosed.sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-backtick\": {\n\t\t\t\"begin\": \"`\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"`\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\`\",\n\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-double-quoted\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation_double_quoted\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-single-quoted\": {\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.php\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\\\\\']\",\n\t\t\t\t\t\"name\": \"constant.character.escape.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex-double-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#sql-string-double-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-double-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex-single-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#sql-string-single-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-single-quoted\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n\\\\b\\napc_(\\n  store|sma_info|compile_file|clear_cache|cas|cache_info|inc|dec|define_constants|delete(_file)?|\\n  exists|fetch|load_constants|add|bin_(dump|load)(file)?\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.apc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  shuffle|sizeof|sort|next|nat(case)?sort|count|compact|current|in_array|usort|uksort|uasort|\\n  pos|prev|end|each|extract|ksort|key(_exists)?|krsort|list|asort|arsort|rsort|reset|range|\\n  array(_(shift|sum|splice|search|slice|chunk|change_key_case|count_values|column|combine|\\n          (diff|intersect)(_(u)?(key|assoc))?|u(diff|intersect)(_(u)?assoc)?|unshift|unique|\\n          pop|push|pad|product|values|keys|key_exists|filter|fill(_keys)?|flip|walk(_recursive)?|\\n          reduce|replace(_recursive)?|reverse|rand|multisort|merge(_recursive)?|map)?)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.array.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  show_source|sys_getloadavg|sleep|highlight_(file|string)|constant|connection_(aborted|status)|\\n  time_(nanosleep|sleep_until)|ignore_user_abort|die|define(d)?|usleep|uniqid|unpack|__halt_compiler|\\n  php_(check_syntax|strip_whitespace)|pack|eval|exit|get_browser\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.basic_functions.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bbc(scale|sub|sqrt|comp|div|pow(mod)?|add|mod|mul)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.bcmath.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bblenc_encrypt\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.blenc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bbz(compress|close|open|decompress|errstr|errno|error|flush|write|read)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.bz2.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  (French|Gregorian|Jewish|Julian)ToJD|cal_(to_jd|info|days_in_month|from_jd)|unixtojd|\\n  jdto(unix|jewish)|easter_(date|days)|JD(MonthName|To(Gregorian|Julian|French)|DayOfWeek)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.calendar.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  class_alias|all_user_method(_array)?|is_(a|subclass_of)|__autoload|(class|interface|method|property|trait)_exists|\\n  get_(class(_(vars|methods))?|(called|parent)_class|object_vars|declared_(classes|interfaces|traits))\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.classobj.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  com_(create_guid|print_typeinfo|event_sink|load_typelib|get_active_object|message_pump)|\\n  variant_(sub|set(_type)?|not|neg|cast|cat|cmp|int|idiv|imp|or|div|date_(from|to)_timestamp|\\n           pow|eqv|fix|and|add|abs|round|get_type|xor|mod|mul)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.com.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(isset|unset|eval|empty|list)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.construct.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(print|echo)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.construct.output.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bctype_(space|cntrl|digit|upper|punct|print|lower|alnum|alpha|graph|xdigit)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.ctype.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\ncurl_(\\n  share_(close|init|setopt)|strerror|setopt(_array)?|copy_handle|close|init|unescape|pause|escape|\\n  errno|error|exec|version|file_create|reset|getinfo|\\n  multi_(strerror|setopt|select|close|init|info_read|(add|remove)_handle|getcontent|exec)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.curl.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  strtotime|str[fp]time|checkdate|time|timezone_name_(from_abbr|get)|idate|\\n  timezone_((location|offset|transitions|version)_get|(abbreviations|identifiers)_list|open)|\\n  date(_(sun(rise|set)|sun_info|sub|create(_(immutable_)?from_format)?|timestamp_(get|set)|timezone_(get|set)|time_set|\\n         isodate_set|interval_(create_from_date_string|format)|offset_get|diff|default_timezone_(get|set)|date_set|\\n         parse(_from_format)?|format|add|get_last_errors|modify))?|\\n  localtime|get(date|timeofday)|gm(strftime|date|mktime)|microtime|mktime\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.datetime.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bdba_(sync|handlers|nextkey|close|insert|optimize|open|delete|popen|exists|key_split|firstkey|fetch|list|replace)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.dba.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bdbx_(sort|connect|compare|close|escape_string|error|query|fetch_row)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.dbx.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(scandir|chdir|chroot|closedir|opendir|dir|rewinddir|readdir|getcwd)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.dir.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\neio_(\\n  sync(fs)?|sync_file_range|symlink|stat(vfs)?|sendfile|set_min_parallel|set_max_(idle|poll_(reqs|time)|parallel)|\\n  seek|n(threads|op|pending|reqs|ready)|chown|chmod|custom|close|cancel|truncate|init|open|dup2|unlink|utime|poll|\\n  event_loop|f(sync|stat(vfs)?|chown|chmod|truncate|datasync|utime|allocate)|write|lstat|link|rename|realpath|\\n  read(ahead|dir|link)?|rmdir|get_(event_stream|last_error)|grp(_(add|cancel|limit))?|mknod|mkdir|busy\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.eio.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nenchant_(\\n  dict_(store_replacement|suggest|check|is_in_session|describe|quick_check|add_to_(personal|session)|get_error)|\\n  broker_(set_ordering|init|dict_exists|describe|free(_dict)?|list_dicts|request_(pwl_)?dict|get_error)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.enchant.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(split(i)?|sql_regcase|ereg(i)?(_replace)?)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.ereg.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b((restore|set)_(error_handler|exception_handler)|trigger_error|debug_(print_)?backtrace|user_error|error_(log|reporting|get_last))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.errorfunc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(shell_exec|system|passthru|proc_(nice|close|terminate|open|get_status)|escapeshell(arg|cmd)|exec)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.exec.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(exif_(thumbnail|tagname|imagetype|read_data)|read_exif_data)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.exif.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nfann_(\\n  (duplicate|length|merge|shuffle|subset)_train_data|scale_(train(_data)?|(input|output)(_train_data)?)|\\n  set_(scaling_params|sarprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift)|\\n       cascade_(num_candidate_groups|candidate_(change_fraction|limit|stagnation_epochs)|\\n                output_(change_fraction|stagnation_epochs)|weight_multiplier|activation_(functions|steepnesses)|\\n                (max|min)_(cand|out)_epochs)|\\n       callback|training_algorithm|train_(error|stop)_function|(input|output)_scaling_params|error_log|\\n       quickprop_(decay|mu)|weight(_array)?|learning_(momentum|rate)|bit_fail_limit|\\n       activation_(function|steepness)(_(hidden|layer|output))?|\\n       rprop_((decrease|increase)_factor|delta_(max|min|zero)))|\\n  save(_train)?|num_(input|output)_train_data|copy|clear_scaling_params|cascadetrain_on_(file|data)|\\n  create_((sparse|shortcut|standard)(_array)?|train(_from_callback)?|from_file)|\\n  test(_data)?|train(_(on_(file|data)|epoch))?|init_weights|descale_(input|output|train)|destroy(_train)?|\\n  print_error|run|reset_(MSE|err(no|str))|read_train_from_file|randomize_weights|\\n  get_(sarprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift)|num_(input|output|layers)|\\n       network_type|MSE|connection_(array|rate)|bias_array|bit_fail(_limit)?|\\n       cascade_(num_(candidates|candidate_groups)|(candidate|output)_(change_fraction|limit|stagnation_epochs)|\\n                weight_multiplier|activation_(functions|steepnesses)(_count)?|(max|min)_(cand|out)_epochs)|\\n       total_(connections|neurons)|training_algorithm|train_(error|stop)_function|err(no|str)|\\n       quickprop_(decay|mu)|learning_(momentum|rate)|layer_array|activation_(function|steepness)|\\n       rprop_((decrease|increase)_factor|delta_(max|min|zero)))\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.fann.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  symlink|stat|set_file_buffer|chown|chgrp|chmod|copy|clearstatcache|touch|tempnam|tmpfile|\\n  is_(dir|(uploaded_)?file|executable|link|readable|writ(e)?able)|disk_(free|total)_space|diskfreespace|\\n  dirname|delete|unlink|umask|pclose|popen|pathinfo|parse_ini_(file|string)|fscanf|fstat|fseek|fnmatch|\\n  fclose|ftell|ftruncate|file(size|[acm]time|type|inode|owner|perms|group)?|file_(exists|(get|put)_contents)|\\n  f(open|puts|putcsv|passthru|eof|flush|write|lock|read|gets(s)?|getc(sv)?)|lstat|lchown|lchgrp|link(info)?|\\n  rename|rewind|read(file|link)|realpath(_cache_(get|size))?|rmdir|glob|move_uploaded_file|mkdir|basename\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.file.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(finfo_(set_flags|close|open|file|buffer)|mime_content_type)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.fileinfo.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bfilter_(has_var|input(_array)?|id|var(_array)?|list)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.filter.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bfastcgi_finish_request\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.fpm.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(call_user_(func|method)(_array)?|create_function|unregister_tick_function|forward_static_call(_array)?|function_exists|func_(num_args|get_arg(s)?)|register_(shutdown|tick)_function|get_defined_functions)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.funchand.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b((n)?gettext|textdomain|d((n)?gettext|c(n)?gettext)|bind(textdomain|_textdomain_codeset))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.gettext.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\ngmp_(\\n  scan[01]|strval|sign|sub|setbit|sqrt(rem)?|hamdist|neg|nextprime|com|clrbit|cmp|testbit|\\n  intval|init|invert|import|or|div(exact)?|div_(q|qr|r)|jacobi|popcount|pow(m)?|perfect_square|\\n  prob_prime|export|fact|legendre|and|add|abs|root(rem)?|random(_(bits|range))?|gcd(ext)?|xor|mod|mul\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.gmp.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bhash(_(hmac(_file)?|copy|init|update(_(file|stream))?|pbkdf2|equals|file|final|algos))?\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.hash.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  http_(support|send_(status|stream|content_(disposition|type)|data|file|last_modified)|head|\\n        negotiate_(charset|content_type|language)|chunked_decode|cache_(etag|last_modified)|throttle|\\n        inflate|deflate|date|post_(data|fields)|put_(data|file|stream)|persistent_handles_(count|clean|ident)|\\n        parse_(cookie|headers|message|params)|redirect|request(_(method_(exists|name|(un)?register)|body_encode))?|\\n        get(_request_(headers|body(_stream)?))?|match_(etag|modified|request_header)|build_(cookie|str|url))|\\n  ob_(etag|deflate|inflate)handler\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.http.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(iconv(_(str(pos|len|rpos)|substr|(get|set)_encoding|mime_(decode(_headers)?|encode)))?|ob_iconv_handler)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.iconv.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\biis_((start|stop)_(service|server)|set_(script_map|server_rights|dir_security|app_settings)|(add|remove)_server|get_(script_map|service_state|server_(rights|by_(comment|path))|dir_security))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.iisfunc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  iptc(embed|parse)|(jpeg|png)2wbmp|gd_info|getimagesize(fromstring)?|\\n  image(s[xy]|scale|(char|string)(up)?|set(style|thickness|tile|interpolation|pixel|brush)|savealpha|\\n        convolution|copy(resampled|resized|merge(gray)?)?|colors(forindex|total)|\\n        color(set|closest(alpha|hwb)?|transparent|deallocate|(allocate|exact|resolve)(alpha)?|at|match)|\\n        crop(auto)?|create(truecolor|from(string|jpeg|png|wbmp|webp|gif|gd(2(part)?)?|xpm|xbm))?|\\n        types|ttf(bbox|text)|truecolortopalette|istruecolor|interlace|2wbmp|destroy|dashedline|jpeg|\\n        _type_to_(extension|mime_type)|ps(slantfont|text|(encode|extend|free|load)font|bbox)|png|polygon|\\n        palette(copy|totruecolor)|ellipse|ft(text|bbox)|filter|fill|filltoborder|\\n        filled(arc|ellipse|polygon|rectangle)|font(height|width)|flip|webp|wbmp|line|loadfont|layereffect|\\n        antialias|affine(matrix(concat|get))?|alphablending|arc|rotate|rectangle|gif|gd(2)?|gammacorrect|\\n        grab(screen|window)|xbm)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.image.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  sys_get_temp_dir|set_(time_limit|include_path|magic_quotes_runtime)|cli_(get|set)_process_title|\\n  ini_(alter|get(_all)?|restore|set)|zend_(thread_id|version|logo_guid)|dl|php(credits|info|version)|\\n  php_(sapi_name|ini_(scanned_files|loaded_file)|uname|logo_guid)|putenv|extension_loaded|version_compare|\\n  assert(_options)?|restore_include_path|gc_(collect_cycles|disable|enable(d)?)|getopt|\\n  get_(cfg_var|current_user|defined_constants|extension_funcs|include_path|included_files|loaded_extensions|\\n       magic_quotes_(gpc|runtime)|required_files|resources)|\\n  get(env|lastmod|rusage|my(inode|[gup]id))|\\n  memory_get_(peak_)?usage|main|magic_quotes_runtime\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.info.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nibase_(\\n  set_event_handler|service_(attach|detach)|server_info|num_(fields|params)|name_result|connect|\\n  commit(_ret)?|close|trans|delete_user|drop_db|db_info|pconnect|param_info|prepare|err(code|msg)|\\n  execute|query|field_info|fetch_(assoc|object|row)|free_(event_handler|query|result)|wait_event|\\n  add_user|affected_rows|rollback(_ret)?|restore|gen_id|modify_user|maintain_db|backup|\\n  blob_(cancel|close|create|import|info|open|echo|add|get)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.interbase.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  normalizer_(normalize|is_normalized)|idn_to_(unicode|utf8|ascii)|\\n  numfmt_(set_(symbol|(text_)?attribute|pattern)|create|(parse|format)(_currency)?|\\n          get_(symbol|(text_)?attribute|pattern|error_(code|message)|locale))|\\n  collator_(sort(_with_sort_keys)?|set_(attribute|strength)|compare|create|asort|\\n            get_(strength|sort_key|error_(code|message)|locale|attribute))|\\n  transliterator_(create(_(inverse|from_rules))?|transliterate|list_ids|get_error_(code|message))|\\n  intl(cal|tz)_get_error_(code|message)|intl_(is_failure|error_name|get_error_(code|message))|\\n  datefmt_(set_(calendar|lenient|pattern|timezone(_id)?)|create|is_lenient|parse|format(_object)?|localtime|\\n           get_(calendar(_object)?|time(type|zone(_id)?)|datetype|pattern|error_(code|message)|locale))|\\n  locale_(set_default|compose|canonicalize|parse|filter_matches|lookup|accept_from_http|\\n          get_(script|display_(script|name|variant|language|region)|default|primary_language|keywords|all_variants|region))|\\n  resourcebundle_(create|count|locales|get(_(error_(code|message)))?)|\\n  grapheme_(str(i?str|r?i?pos|len)|substr|extract)|\\n  msgfmt_(set_pattern|create|(format|parse)(_message)?|get_(pattern|error_(code|message)|locale))\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.intl.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bjson_(decode|encode|last_error(_msg)?)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.json.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nldap_(\\n  start|tls|sort|search|sasl_bind|set_(option|rebind_proc)|(first|next)_(attribute|entry|reference)|\\n  connect|control_paged_result(_response)?|count_entries|compare|close|t61_to_8859|8859_to_t61|\\n  dn2ufn|delete|unbind|parse_(reference|result)|escape|errno|err2str|error|explode_dn|bind|\\n  free_result|list|add|rename|read|get_(option|dn|entries|values(_len)?|attributes)|modify(_batch)?|\\n  mod_(add|del|replace)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.ldap.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\blibxml_(set_(streams_context|external_entity_loader)|clear_errors|disable_entity_loader|use_internal_errors|get_(errors|last_error))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.libxml.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(ezmlm_hash|mail)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mail.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  (a)?(cos|sin|tan)(h)?|sqrt|srand|hypot|hexdec|ceil|is_(nan|(in)?finite)|octdec|dec(hex|oct|bin)|deg2rad|\\n  pi|pow|exp(m1)?|floor|fmod|lcg_value|log(1(p|0))?|atan2|abs|round|rand|rad2deg|getrandmax|\\n  mt_(srand|rand|getrandmax)|max|min|bindec|base_convert\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.math.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nmb_(\\n  str(cut|str|to(lower|upper)|istr|ipos|imwidth|pos|width|len|rchr|richr|ripos|rpos)|\\n  substitute_character|substr(_count)?|split|send_mail|http_(input|output)|check_encoding|\\n  convert_(case|encoding|kana|variables)|internal_encoding|output_handler|decode_(numericentity|mimeheader)|\\n  detect_(encoding|order)|parse_str|preferred_mime_name|encoding_aliases|encode_(numericentity|mimeheader)|\\n  ereg(i(_replace)?)?|ereg_(search(_(get(pos|regs)|init|regs|(set)?pos))?|replace(_callback)?|match)|\\n  list_encodings|language|regex_(set_options|encoding)|get_info\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mbstring.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  mcrypt_(\\n    cfb|create_iv|cbc|ofb|decrypt|encrypt|ecb|list_(algorithms|modes)|generic(_((de)?init|end))?|\\n    enc_(self_test|is_block_(algorithm|algorithm_mode|mode)|\\n    get_(supported_key_sizes|(block|iv|key)_size|(algorithms|modes)_name))|\\n    get_(cipher_name|(block|iv|key)_size)|\\n    module_(close|self_test|is_block_(algorithm|algorithm_mode|mode)|open|\\n            get_(supported_key_sizes|algo_(block|key)_size)))|\\n  mdecrypt_generic\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mcrypt.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bmemcache_debug\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.memcache.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bmhash(_(count|keygen_s2k|get_(hash_name|block_size)))?\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mhash.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(log_(cmd_(insert|delete|update)|killcursor|write_batch|reply|getmore)|bson_(decode|encode))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mongo.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nmysql_(\\n  stat|set_charset|select_db|num_(fields|rows)|connect|client_encoding|close|create_db|escape_string|\\n  thread_id|tablename|insert_id|info|data_seek|drop_db|db_(name|query)|unbuffered_query|pconnect|ping|\\n  errno|error|query|field_(seek|name|type|table|flags|len)|fetch_(object|field|lengths|assoc|array|row)|\\n  free_result|list_(tables|dbs|processes|fields)|affected_rows|result|real_escape_string|\\n  get_(client|host|proto|server)_info\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mysql.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nmysqli_(\\n  ssl_set|store_result|stat|send_(query|long_data)|set_(charset|opt|local_infile_(default|handler))|\\n  stmt_(store_result|send_long_data|next_result|close|init|data_seek|prepare|execute|fetch|free_result|\\n        attr_(get|set)|result_metadata|reset|get_(result|warnings)|more_results|bind_(param|result))|\\n  select_db|slave_query|savepoint|next_result|change_user|character_set_name|connect|commit|\\n  client_encoding|close|thread_safe|init|options|(enable|disable)_(reads_from_master|rpl_parse)|\\n  dump_debug_info|debug|data_seek|use_result|ping|poll|param_count|prepare|escape_string|execute|\\n  embedded_server_(start|end)|kill|query|field_seek|free_result|autocommit|rollback|report|refresh|\\n  fetch(_(object|fields|field(_direct)?|assoc|all|array|row))?|rpl_(parse_enabled|probe|query_type)|\\n  release_savepoint|reap_async_query|real_(connect|escape_string|query)|more_results|multi_query|\\n  get_(charset|connection_stats|client_(stats|info|version)|cache_stats|warnings|links_stats|metadata)|\\n  master_query|bind_(param|result)|begin_transaction\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mysqli.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bmysqlnd_memcache_(set|get_config)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mysqlnd-memcache.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bmysqlnd_ms_(set_(user_pick_server|qos)|dump_servers|query_is_select|fabric_select_(shard|global)|get_(stats|last_(used_connection|gtid))|xa_(commit|rollback|gc|begin)|match_wild)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mysqlnd-ms.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bmysqlnd_qc_(set_(storage_handler|cache_condition|is_select|user_handlers)|clear_cache|get_(normalized_query_trace_log|core_stats|cache_info|query_trace_log|available_handlers))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mysqlnd-qc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bmysqlnd_uh_(set_(statement|connection)_proxy|convert_to_mysqlnd)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.mysqlnd-uh.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  syslog|socket_(set_(blocking|timeout)|get_status)|set(raw)?cookie|http_response_code|openlog|\\n  headers_(list|sent)|header(_(register_callback|remove))?|checkdnsrr|closelog|inet_(ntop|pton)|ip2long|\\n  openlog|dns_(check_record|get_(record|mx))|define_syslog_variables|(p)?fsockopen|long2ip|\\n  get(servby(name|port)|host(name|by(name(l)?|addr))|protoby(name|number)|mxrr)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.network.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bnsapi_(virtual|response_headers|request_headers)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.nsapi.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  oci(statementtype|setprefetch|serverversion|savelob(file)?|numcols|new(collection|cursor|descriptor)|nlogon|\\n      column(scale|size|name|type(raw)?|isnull|precision)|coll(size|trim|assign(elem)?|append|getelem|max)|commit|\\n      closelob|cancel|internaldebug|definebyname|plogon|parse|error|execute|fetch(statement|into)?|\\n      free(statement|collection|cursor|desc)|write(temporarylob|lobtofile)|loadlob|log(on|off)|rowcount|rollback|\\n      result|bindbyname)|\\n  oci_(statement_type|set_(client_(info|identifier)|prefetch|edition|action|module_name)|server_version|\\n       num_(fields|rows)|new_(connect|collection|cursor|descriptor)|connect|commit|client_version|close|cancel|\\n       internal_debug|define_by_name|pconnect|password_change|parse|error|execute|bind_(array_)?by_name|\\n       field_(scale|size|name|type(_raw)?|is_null|precision)|fetch(_(object|assoc|all|array|row))?|\\n       free_(statement|descriptor)|lob_(copy|is_equal)|rollback|result|get_implicit_resultset)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.oci8.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bopcache_(compile_file|invalidate|reset|get_(status|configuration))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.opcache.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nopenssl_(\\n  sign|spki_(new|export(_challenge)?|verify)|seal|csr_(sign|new|export(_to_file)?|get_(subject|public_key))|\\n  cipher_iv_length|open|dh_compute_key|digest|decrypt|public_(decrypt|encrypt)|encrypt|error_string|\\n  pkcs12_(export(_to_file)?|read)|pkcs7_(sign|decrypt|encrypt|verify)|verify|free_key|random_pseudo_bytes|\\n  pkey_(new|export(_to_file)?|free|get_(details|public|private))|private_(decrypt|encrypt)|pbkdf2|\\n  get_((cipher|md)_methods|cert_locations|(public|private)key)|\\n  x509_(check_private_key|checkpurpose|parse|export(_to_file)?|fingerprint|free|read)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.openssl.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  output_(add_rewrite_var|reset_rewrite_vars)|flush|\\n  ob_(start|clean|implicit_flush|end_(clean|flush)|flush|list_handlers|gzhandler|\\n      get_(status|contents|clean|flush|length|level))\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.output.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bpassword_(hash|needs_rehash|verify|get_info)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.password.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\npcntl_(\\n  strerror|signal(_dispatch)?|sig(timedwait|procmask|waitinfo)|setpriority|errno|exec|fork|\\n  w(stopsig|termsig|if(stopped|signaled|exited))|wait(pid)?|alarm|getpriority|get_last_error\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.pcntl.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\npg_(\\n  socket|send_(prepare|execute|query(_params)?)|set_(client_encoding|error_verbosity)|select|host|\\n  num_(fields|rows)|consume_input|connection_(status|reset|busy)|connect(_poll)?|convert|copy_(from|to)|\\n  client_encoding|close|cancel_query|tty|transaction_status|trace|insert|options|delete|dbname|untrace|\\n  unescape_bytea|update|pconnect|ping|port|put_line|parameter_status|prepare|version|query(_params)?|\\n  escape_(string|identifier|literal|bytea)|end_copy|execute|flush|free_result|last_(notice|error|oid)|\\n  field_(size|num|name|type(_oid)?|table|is_null|prtlen)|affected_rows|result_(status|seek|error(_field)?)|\\n  fetch_(object|assoc|all(_columns)?|array|row|result)|get_(notify|pid|result)|meta_data|\\n  lo_(seek|close|create|tell|truncate|import|open|unlink|export|write|read(_all)?)|\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.pgsql.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(virtual|getallheaders|apache_((get|set)env|note|child_terminate|lookup_uri|response_headers|reset_timeout|request_headers|get_(version|modules)))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_apache.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bdom_import_simplexml\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_dom.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nftp_(\\n  ssl_connect|systype|site|size|set_option|nlist|nb_(continue|f?(put|get))|ch(dir|mod)|connect|cdup|close|\\n  delete|put|pwd|pasv|exec|quit|f(put|get)|login|alloc|rename|raw(list)?|rmdir|get(_option)?|mdtm|mkdir\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_ftp.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nimap_(\\n  (create|delete|list|rename|scan)(mailbox)?|status|sort|subscribe|set_quota|set(flag_full|acl)|search|savebody|\\n  num_(recent|msg)|check|close|clearflag_full|thread|timeout|open|header(info)?|headers|append|alerts|reopen|\\n  8bit|unsubscribe|undelete|utf7_(decode|encode)|utf8|uid|ping|errors|expunge|qprint|gc|\\n  fetch(structure|header|text|mime|body)|fetch_overview|lsub|list(scan|subscribed)|last_error|\\n  rfc822_(parse_(headers|adrlist)|write_address)|get(subscribed|acl|mailboxes)|get_quota(root)?|\\n  msgno|mime_header_decode|mail_(copy|compose|move)|mail|mailboxmsginfo|binary|body(struct)?|base64\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_imap.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nmssql_(\\n  select_db|num_(fields|rows)|next_result|connect|close|init|data_seek|pconnect|execute|query|\\n  field_(seek|name|type|length)|fetch_(object|field|assoc|array|row|batch)|free_(statement|result)|\\n  rows_affected|result|guid_string|get_last_message|min_(error|message)_severity|bind\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_mssql.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nodbc_(\\n  statistics|specialcolumns|setoption|num_(fields|rows)|next_result|connect|columns|columnprivileges|commit|\\n  cursor|close(_all)?|tables|tableprivileges|do|data_source|pconnect|primarykeys|procedures|procedurecolumns|\\n  prepare|error(msg)?|exec(ute)?|field_(scale|num|name|type|precision|len)|foreignkeys|free_result|\\n  fetch_(into|object|array|row)|longreadlen|autocommit|rollback|result(_all)?|gettypeinfo|binmode\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_odbc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bpreg_(split|quote|filter|last_error|replace(_callback)?|grep|match(_all)?)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_pcre.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(spl_(classes|object_hash|autoload(_(call|unregister|extensions|functions|register))?)|class_(implements|uses|parents)|iterator_(count|to_array|apply))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_spl.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bzip_(close|open|entry_(name|compressionmethod|compressedsize|close|open|filesize|read)|read)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.php_zip.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nposix_(\\n  strerror|set(s|e?u|[ep]?g)id|ctermid|ttyname|times|isatty|initgroups|uname|errno|kill|access|\\n  get(sid|cwd|uid|pid|ppid|pwnam|pwuid|pgid|pgrp|euid|egid|login|rlimit|gid|grnam|groups|grgid)|\\n  get_last_error|mknod|mkfifo\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.posix.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bset(thread|proc)title\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.proctitle.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\npspell_(\\n  store_replacement|suggest|save_wordlist|new(_(config|personal))?|check|clear_session|\\n  config_(save_repl|create|ignore|(data|dict)_dir|personal|runtogether|repl|mode)|add_to_(session|personal)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.pspell.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\breadline(_(completion_function|clear_history|callback_(handler_(install|remove)|read_char)|info|on_new_line|write_history|list_history|add_history|redisplay|read_history))?\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.readline.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\brecode(_(string|file))?\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.recode.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\brrd(c_disconnect|_(create|tune|info|update|error|version|first|fetch|last(update)?|restore|graph|xport))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.rrd.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  shm_((get|has|remove|put)_var|detach|attach|remove)|sem_(acquire|release|remove|get)|ftok|\\n  msg_((get|remove|set|stat)_queue|send|queue_exists|receive)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.sem.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nsession_(\\n  status|start|set_(save_handler|cookie_params)|save_path|name|commit|cache_(expire|limiter)|\\n  is_registered|id|destroy|decode|unset|unregister|encode|write_close|abort|reset|register(_shutdown)?|\\n  regenerate_id|get_cookie_params|module_name\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.session.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bshmop_(size|close|open|delete|write|read)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.shmop.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bsimplexml_(import_dom|load_(string|file))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.simplexml.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  snmp(walk(oid)?|realwalk|get(next)?|set)|\\n  snmp_(set_(valueretrieval|quick_print|enum_print|oid_(numeric_print|output_format))|read_mib|\\n        get_(valueretrieval|quick_print))|\\n  snmp[23]_(set|walk|real_walk|get(next)?)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.snmp.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(is_soap_fault|use_soap_error_handler)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.soap.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nsocket_(\\n  shutdown|strerror|send(to|msg)?|set_((non)?block|option)|select|connect|close|clear_error|bind|\\n  create(_(pair|listen))?|cmsg_space|import_stream|write|listen|last_error|accept|recv(from|msg)?|\\n  read|get(peer|sock)name|get_option\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.sockets.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nsqlite_(\\n  single_query|seek|has_(more|prev)|num_(fields|rows)|next|changes|column|current|close|\\n  create_(aggregate|function)|open|unbuffered_query|udf_(decode|encode)_binary|popen|prev|\\n  escape_string|error_string|exec|valid|key|query|field_name|factory|\\n  fetch_(string|single|column_types|object|all|array)|lib(encoding|version)|\\n  last_(insert_rowid|error)|array_query|rewind|busy_timeout\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.sqlite.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nsqlsrv_(\\n  send_stream_data|server_info|has_rows|num_(fields|rows)|next_result|connect|configure|commit|\\n  client_info|close|cancel|prepare|errors|execute|query|field_metadata|fetch(_(array|object))?|\\n  free_stmt|rows_affected|rollback|get_(config|field)|begin_transaction\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.sqlsrv.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nstats_(\\n  harmonic_mean|covariance|standard_deviation|skew|\\n  cdf_(noncentral_(chisquare|f)|negative_binomial|chisquare|cauchy|t|uniform|poisson|exponential|f|weibull|\\n       logistic|laplace|gamma|binomial|beta)|\\n  stat_(noncentral_t|correlation|innerproduct|independent_t|powersum|percentile|paired_t|gennch|binomial_coef)|\\n  dens_(normal|negative_binomial|chisquare|cauchy|t|pmf_(hypergeometric|poisson|binomial)|exponential|f|\\n        weibull|logistic|laplace|gamma|beta)|\\n  den_uniform|variance|kurtosis|absolute_deviation|\\n  rand_(setall|phrase_to_seeds|ranf|get_seeds|\\n        gen_(noncentral_[ft]|noncenral_chisquare|normal|chisquare|t|int|\\n             i(uniform|poisson|binomial(_negative)?)|exponential|f(uniform)?|gamma|beta))\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.stats.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  set_socket_blocking|\\n  stream_(socket_(shutdown|sendto|server|client|pair|enable_crypto|accept|recvfrom|get_name)|\\n    set_(chunk_size|timeout|(read|write)_buffer|blocking)|select|notification_callback|supports_lock|\\n    context_(set_(option|default|params)|create|get_(options|default|params))|copy_to_stream|is_local|\\n    encoding|filter_(append|prepend|register|remove)|wrapper_((un)?register|restore)|\\n    resolve_include_path|register_wrapper|get_(contents|transports|filters|wrappers|line|meta_data)|\\n    bucket_(new|prepend|append|make_writeable)\\n  )\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.streamsfuncs.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  money_format|md5(_file)?|metaphone|bin2hex|sscanf|sha1(_file)?|\\n  str(str|c?spn|n(at)?(case)?cmp|chr|coll|(case)?cmp|to(upper|lower)|tok|tr|istr|pos|pbrk|len|rchr|ri?pos|rev)|\\n  str_(getcsv|ireplace|pad|repeat|replace|rot13|shuffle|split|word_count)|\\n  strip(c?slashes|os)|strip_tags|similar_text|soundex|substr(_(count|compare|replace))?|setlocale|\\n  html(specialchars(_decode)?|entities)|html_entity_decode|hex2bin|hebrev(c)?|number_format|nl2br|nl_langinfo|\\n  chop|chunk_split|chr|convert_(cyr_string|uu(decode|encode))|count_chars|crypt|crc32|trim|implode|ord|\\n  uc(first|words)|join|parse_str|print(f)?|echo|explode|v?[fs]?printf|quoted_printable_(decode|encode)|\\n  quotemeta|wordwrap|lcfirst|[lr]trim|localeconv|levenshtein|addc?slashes|get_html_translation_table\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.string.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nsybase_(\\n  set_message_handler|select_db|num_(fields|rows)|connect|close|deadlock_retry_count|data_seek|\\n  unbuffered_query|pconnect|query|field_seek|fetch_(object|field|assoc|array|row)|free_result|\\n  affected_rows|result|get_last_message|min_(client|error|message|server)_severity\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.sybase.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(taint|is_tainted|untaint)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.taint.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  tidy_((get|set)opt|set_encoding|save_config|config_count|clean_repair|is_(xhtml|xml)|diagnose|\\n        (access|error|warning)_count|load_config|reset_config|(parse|repair)_(string|file)|\\n        get_(status|html(_ver)?|head|config|output|opt_doc|root|release|body))|\\n  ob_tidyhandler\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.tidy.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\btoken_(name|get_all)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.tokenizer.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\ntrader_(\\n  stoch(f|r|rsi)?|stddev|sin(h)?|sum|sub|set_(compat|unstable_period)|sqrt|sar(ext)?|sma|\\n  ht_(sine|trend(line|mode)|dc(period|phase)|phasor)|natr|cci|cos(h)?|correl|\\n  cdl(shootingstar|shortline|sticksandwich|stalledpattern|spinningtop|separatinglines|\\n      hikkake(mod)?|highwave|homingpigeon|hangingman|harami(cross)?|hammer|concealbabyswall|\\n      counterattack|closingmarubozu|thrusting|tasukigap|takuri|tristar|inneck|invertedhammer|\\n      identical3crows|2crows|onneck|doji(star)?|darkcloudcover|dragonflydoji|unique3river|\\n      upsidegap2crows|3(starsinsouth|inside|outside|whitesoldiers|linestrike|blackcrows)|\\n      piercing|engulfing|evening(doji)?star|kicking(bylength)?|longline|longleggeddoji|\\n      ladderbottom|advanceblock|abandonedbaby|risefall3methods|rickshawman|gapsidesidewhite|\\n      gravestonedoji|xsidegap3methods|morning(doji)?star|mathold|matchinglow|marubozu|\\n      belthold|breakaway)|\\n  ceil|cmo|tsf|typprice|t3|tema|tan(h)?|trix|trima|trange|obv|div|dema|dx|ultosc|ppo|\\n  plus_d[im]|errno|exp|ema|var|kama|floor|wclprice|willr|wma|ln|log10|bop|beta|bbands|\\n  linearreg(_(slope|intercept|angle))?|asin|acos|atan|atr|adosc|ad|add|adx(r)?|apo|avgprice|\\n  aroon(osc)?|rsi|roc|rocp|rocr(100)?|get_(compat|unstable_period)|min(index)?|minus_d[im]|\\n  minmax(index)?|mid(point|price)|mom|mult|medprice|mfi|macd(ext|fix)?|mavp|max(index)?|ma(ma)?\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.trader.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\buopz_(copy|compose|implement|overload|delete|undefine|extend|function|flags|restore|rename|redefine|backup)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.uopz.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b(http_build_query|(raw)?url(decode|encode)|parse_url|get_(headers|meta_tags)|base64_(decode|encode))\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.url.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  strval|settype|serialize|(bool|double|float)val|debug_zval_dump|intval|import_request_variables|isset|\\n  is_(scalar|string|null|numeric|callable|int(eger)?|object|double|float|long|array|resource|real|bool)|\\n  unset|unserialize|print_r|empty|var_(dump|export)|gettype|get_(defined_vars|resource_type)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.var.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bwddx_(serialize_(value|vars)|deserialize|packet_(start|end)|add_vars)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.wddx.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bxhprof_(sample_)?(disable|enable)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.xhprof.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\n\\\\b\\n(\\n  utf8_(decode|encode)|\\n  xml_(set_((notation|(end|start)_namespace|unparsed_entity)_decl_handler|\\n            (character_data|default|element|external_entity_ref|processing_instruction)_handler|object)|\\n       parse(_into_struct)?|parser_((get|set)_option|create(_ns)?|free)|error_string|\\n       get_(current_((column|line)_number|byte_index)|error_code))\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.xml.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nxmlrpc_(\\n  server_(call_method|create|destroy|add_introspection_data|register_(introspection_callback|method))|\\n  is_fault|decode(_request)?|parse_method_descriptions|encode(_request)?|(get|set)_type\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.xmlrpc.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\nxmlwriter_(\\n  (end|start|write)_(comment|cdata|dtd(_(attlist|entity|element))?|document|pi|attribute|element)|\\n  (start|write)_(attribute|element)_ns|write_raw|set_indent(_string)?|text|output_memory|open_(memory|uri)|\\n  full_end_element|flush|\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.xmlwriter.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?xi)\\\\b\\n(\\n  zlib_(decode|encode|get_coding_type)|readgzfile|\\n  gz(seek|compress|close|tell|inflate|open|decode|deflate|uncompress|puts|passthru|encode|eof|file|\\n     write|rewind|read|getc|getss?)\\n)\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.zlib.php\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\bis_int(eger)?\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.alias.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch_statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s+(?=switch\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\bswitch\\\\b(?!\\\\s*\\\\(.*\\\\)\\\\s*:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.section.switch-block.end.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.switch-statement.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.switch-expression.begin.bracket.round.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.switch-expression.end.bracket.round.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.section.switch-block.begin.bracket.curly.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=}|\\\\?>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"match_statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s+(?=match\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\bmatch\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.match.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\?>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.section.match-block.end.bracket.curly.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.match-statement.php\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.match-expression.begin.bracket.round.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)|(?=\\\\?>)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.match-expression.end.bracket.round.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.section.match-block.begin.bracket.curly.php\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=}|\\\\?>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"=>\",\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.definition.arrow.php\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"use-inner\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?i)\\\\b(as)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.use-as.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?i)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.alias.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.php\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var_basic\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)(\\\\$+)[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*\",\n\t\t\t\t\t\"name\": \"variable.other.php\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var_global\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\$)((_(COOKIE|FILES|GET|POST|REQUEST))|arg(v|c))\\\\b\",\n\t\t\t\"name\": \"variable.other.global.php\"\n\t\t},\n\t\t\"var_global_safer\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\$)((GLOBALS|_(ENV|SERVER|SESSION)))\",\n\t\t\t\"name\": \"variable.other.global.safer.php\"\n\t\t},\n\t\t\"var_language\": {\n\t\t\t\"match\": \"(\\\\$)this\\\\b\",\n\t\t\t\"name\": \"variable.language.this.php\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"variable-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var_global\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var_global_safer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.class.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.array.begin.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.index.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.index.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.index.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.array.end.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?xi)\\n((\\\\$)(?<name>[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*))\\\\s*\\n(?:\\n  (\\\\??->)\\\\s*(\\\\g<name>)\\n  |\\n  (\\\\[)(?:(\\\\d+)|((\\\\$)\\\\g<name>)|([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*))(\\\\])\\n)?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i)((\\\\${)(?<name>[a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)(}))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var_language\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var_global\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var_global_safer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var_basic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\${(?=.*?})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.php\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ternary_shorthand\": {\n\t\t\t\"match\": \"\\\\?:\",\n\t\t\t\"name\": \"keyword.operator.ternary.php\"\n\t\t},\n\t\t\"ternary_expression\": {\n\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!:):(?!:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.php\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)^\\\\s*([a-z_\\\\x{7f}-\\\\x{10ffff}][a-z0-9_\\\\x{7f}-\\\\x{10ffff}]*)\\\\s*(?=:(?!:))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"null_coalescing\": {\n\t\t\t\"match\": \"\\\\?\\\\?\",\n\t\t\t\"name\": \"keyword.operator.null-coalescing.php\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/php-language-features/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/php-language-features/.vscodeignore",
    "content": ".vscode/**\nsrc/**\nout/**\ntsconfig.json\nextension.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/php-language-features/README.md",
    "content": "# Language Features for PHP files\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\n## Features\n\nSee [PHP in Visual Studio Code](https://code.visualstudio.com/docs/languages/php) to learn about the features of this extension.\n"
  },
  {
    "path": "extensions/php-language-features/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/phpMain.ts',\n\t},\n\toutput: {\n\t\tfilename: 'phpMain.js'\n\t}\n});\n"
  },
  {
    "path": "extensions/php-language-features/package.json",
    "content": "{\n  \"name\": \"php-language-features\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"icon\": \"icons/logo.png\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"activationEvents\": [\n    \"onLanguage:php\"\n  ],\n  \"main\": \"./out/phpMain\",\n  \"categories\": [\n    \"Programming Languages\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": \"limited\",\n      \"description\": \"%workspaceTrust%\",\n      \"restrictedConfigurations\": [\n        \"php.validate.executablePath\"\n      ]\n    }\n  },\n  \"contributes\": {\n    \"configuration\": {\n      \"title\": \"%configuration.title%\",\n      \"type\": \"object\",\n      \"order\": 20,\n      \"properties\": {\n        \"php.suggest.basic\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%configuration.suggest.basic%\"\n        },\n        \"php.validate.enable\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"%configuration.validate.enable%\"\n        },\n        \"php.validate.executablePath\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"default\": null,\n          \"description\": \"%configuration.validate.executablePath%\",\n          \"scope\": \"machine-overridable\"\n        },\n        \"php.validate.run\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"onSave\",\n            \"onType\"\n          ],\n          \"default\": \"onSave\",\n          \"description\": \"%configuration.validate.run%\"\n        }\n      }\n    },\n    \"jsonValidation\": [\n      {\n        \"fileMatch\": \"composer.json\",\n        \"url\": \"https://getcomposer.org/schema.json\"\n      }\n    ]\n  },\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:php-language-features\",\n    \"watch\": \"npx gulp watch-extension:php-language-features\"\n  },\n  \"dependencies\": {\n    \"which\": \"^2.0.2\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\",\n    \"@types/which\": \"^2.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/php-language-features/package.nls.json",
    "content": "{\n\t\"configuration.suggest.basic\": \"Controls whether the built-in PHP language suggestions are enabled. The support suggests PHP globals and variables.\",\n\t\"configuration.validate.enable\": \"Enable/disable built-in PHP validation.\",\n\t\"configuration.validate.executablePath\": \"Points to the PHP executable.\",\n\t\"configuration.validate.run\": \"Whether the linter is run on save or on type.\",\n\t\"configuration.title\": \"PHP\",\n\t\"commands.categroy.php\": \"PHP\",\n\t\"command.untrustValidationExecutable\": \"Disallow PHP validation executable (defined as workspace setting)\",\n\t\"displayName\": \"PHP Language Features\",\n\t\"description\": \"Provides rich language support for PHP files.\",\n\t\"workspaceTrust\": \"The extension requires workspace trust when the `php.validate.executablePath` setting will load a version of PHP in the workspace.\"\n}\n"
  },
  {
    "path": "extensions/php-language-features/src/features/completionItemProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CompletionItemProvider, CompletionItem, CompletionItemKind, CancellationToken, TextDocument, Position, Range, TextEdit, workspace, CompletionContext } from 'vscode';\nimport * as phpGlobals from './phpGlobals';\nimport * as phpGlobalFunctions from './phpGlobalFunctions';\n\nexport default class PHPCompletionItemProvider implements CompletionItemProvider {\n\n\tpublic provideCompletionItems(document: TextDocument, position: Position, _token: CancellationToken, context: CompletionContext): Promise<CompletionItem[]> {\n\t\tconst result: CompletionItem[] = [];\n\n\t\tconst shouldProvideCompletionItems = workspace.getConfiguration('php').get<boolean>('suggest.basic', true);\n\t\tif (!shouldProvideCompletionItems) {\n\t\t\treturn Promise.resolve(result);\n\t\t}\n\n\t\tlet range = document.getWordRangeAtPosition(position);\n\t\tconst prefix = range ? document.getText(range) : '';\n\t\tif (!range) {\n\t\t\trange = new Range(position, position);\n\t\t}\n\n\t\tif (context.triggerCharacter === '>') {\n\t\t\tconst twoBeforeCursor = new Position(position.line, Math.max(0, position.character - 2));\n\t\t\tconst previousTwoChars = document.getText(new Range(twoBeforeCursor, position));\n\t\t\tif (previousTwoChars !== '->') {\n\t\t\t\treturn Promise.resolve(result);\n\t\t\t}\n\t\t}\n\n\t\tconst added: any = {};\n\t\tconst createNewProposal = function (kind: CompletionItemKind, name: string, entry: phpGlobals.IEntry | null): CompletionItem {\n\t\t\tconst proposal: CompletionItem = new CompletionItem(name);\n\t\t\tproposal.kind = kind;\n\t\t\tif (entry) {\n\t\t\t\tif (entry.description) {\n\t\t\t\t\tproposal.documentation = entry.description;\n\t\t\t\t}\n\t\t\t\tif (entry.signature) {\n\t\t\t\t\tproposal.detail = entry.signature;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn proposal;\n\t\t};\n\n\t\tconst matches = (name: string) => {\n\t\t\treturn prefix.length === 0 || name.length >= prefix.length && name.substr(0, prefix.length) === prefix;\n\t\t};\n\n\t\tif (matches('php') && range.start.character >= 2) {\n\t\t\tconst twoBeforePosition = new Position(range.start.line, range.start.character - 2);\n\t\t\tconst beforeWord = document.getText(new Range(twoBeforePosition, range.start));\n\n\t\t\tif (beforeWord === '<?') {\n\t\t\t\tconst proposal = createNewProposal(CompletionItemKind.Class, '<?php', null);\n\t\t\t\tproposal.textEdit = new TextEdit(new Range(twoBeforePosition, position), '<?php');\n\t\t\t\tresult.push(proposal);\n\t\t\t\treturn Promise.resolve(result);\n\t\t\t}\n\t\t}\n\n\t\tfor (const globalvariables in phpGlobals.globalvariables) {\n\t\t\tif (phpGlobals.globalvariables.hasOwnProperty(globalvariables) && matches(globalvariables)) {\n\t\t\t\tadded[globalvariables] = true;\n\t\t\t\tresult.push(createNewProposal(CompletionItemKind.Variable, globalvariables, phpGlobals.globalvariables[globalvariables]));\n\t\t\t}\n\t\t}\n\t\tfor (const globalfunctions in phpGlobalFunctions.globalfunctions) {\n\t\t\tif (phpGlobalFunctions.globalfunctions.hasOwnProperty(globalfunctions) && matches(globalfunctions)) {\n\t\t\t\tadded[globalfunctions] = true;\n\t\t\t\tresult.push(createNewProposal(CompletionItemKind.Function, globalfunctions, phpGlobalFunctions.globalfunctions[globalfunctions]));\n\t\t\t}\n\t\t}\n\t\tfor (const compiletimeconstants in phpGlobals.compiletimeconstants) {\n\t\t\tif (phpGlobals.compiletimeconstants.hasOwnProperty(compiletimeconstants) && matches(compiletimeconstants)) {\n\t\t\t\tadded[compiletimeconstants] = true;\n\t\t\t\tresult.push(createNewProposal(CompletionItemKind.Field, compiletimeconstants, phpGlobals.compiletimeconstants[compiletimeconstants]));\n\t\t\t}\n\t\t}\n\t\tfor (const keywords in phpGlobals.keywords) {\n\t\t\tif (phpGlobals.keywords.hasOwnProperty(keywords) && matches(keywords)) {\n\t\t\t\tadded[keywords] = true;\n\t\t\t\tresult.push(createNewProposal(CompletionItemKind.Keyword, keywords, phpGlobals.keywords[keywords]));\n\t\t\t}\n\t\t}\n\n\t\tconst text = document.getText();\n\t\tif (prefix[0] === '$') {\n\t\t\tconst variableMatch = /\\$([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)/g;\n\t\t\tlet match: RegExpExecArray | null = null;\n\t\t\twhile (match = variableMatch.exec(text)) {\n\t\t\t\tconst word = match[0];\n\t\t\t\tif (!added[word]) {\n\t\t\t\t\tadded[word] = true;\n\t\t\t\t\tresult.push(createNewProposal(CompletionItemKind.Variable, word, null));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst functionMatch = /function\\s+([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)\\s*\\(/g;\n\t\tlet match2: RegExpExecArray | null = null;\n\t\twhile (match2 = functionMatch.exec(text)) {\n\t\t\tconst word2 = match2[1];\n\t\t\tif (!added[word2]) {\n\t\t\t\tadded[word2] = true;\n\t\t\t\tresult.push(createNewProposal(CompletionItemKind.Function, word2, null));\n\t\t\t}\n\t\t}\n\t\treturn Promise.resolve(result);\n\t}\n}\n"
  },
  {
    "path": "extensions/php-language-features/src/features/hoverProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { HoverProvider, Hover, MarkedString, TextDocument, CancellationToken, Position, workspace } from 'vscode';\nimport { textToMarkedString } from './utils/markedTextUtil';\nimport * as phpGlobals from './phpGlobals';\nimport * as phpGlobalFunctions from './phpGlobalFunctions';\n\nexport default class PHPHoverProvider implements HoverProvider {\n\n\tpublic provideHover(document: TextDocument, position: Position, _token: CancellationToken): Hover | undefined {\n\t\tconst enable = workspace.getConfiguration('php').get<boolean>('suggest.basic', true);\n\t\tif (!enable) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst wordRange = document.getWordRangeAtPosition(position);\n\t\tif (!wordRange) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst name = document.getText(wordRange);\n\n\t\tconst entry = phpGlobalFunctions.globalfunctions[name] || phpGlobals.compiletimeconstants[name] || phpGlobals.globalvariables[name] || phpGlobals.keywords[name];\n\t\tif (entry && entry.description) {\n\t\t\tconst signature = name + (entry.signature || '');\n\t\t\tconst contents: MarkedString[] = [textToMarkedString(entry.description), { language: 'php', value: signature }];\n\t\t\treturn new Hover(contents, wordRange);\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"
  },
  {
    "path": "extensions/php-language-features/src/features/phpGlobalFunctions.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// THIS IS GENERATED FILE. DO NOT MODIFY.\n\nimport { IEntries } from './phpGlobals';\n\nexport const globalfunctions: IEntries = {\n\tdebug_backtrace: {\n\t\tdescription: 'Generates a backtrace',\n\t\tsignature: '([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]]): array'\n\t},\n\tdebug_print_backtrace: {\n\t\tdescription: 'Prints a backtrace',\n\t\tsignature: '([ int $options = 0 [, int $limit = 0 ]]): void'\n\t},\n\terror_clear_last: {\n\t\tdescription: 'Clear the most recent error',\n\t\tsignature: '(void): void'\n\t},\n\terror_get_last: {\n\t\tdescription: 'Get the last occurred error',\n\t\tsignature: '(void): array'\n\t},\n\terror_log: {\n\t\tdescription: 'Send an error message to the defined error handling routines',\n\t\tsignature: '( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]]): bool'\n\t},\n\terror_reporting: {\n\t\tdescription: 'Sets which PHP errors are reported',\n\t\tsignature: '([ int $level ]): int'\n\t},\n\trestore_error_handler: {\n\t\tdescription: 'Restores the previous error handler function',\n\t\tsignature: '(void): bool'\n\t},\n\trestore_exception_handler: {\n\t\tdescription: 'Restores the previously defined exception handler function',\n\t\tsignature: '(void): bool'\n\t},\n\tset_error_handler: {\n\t\tdescription: 'Sets a user-defined error handler function',\n\t\tsignature: '( callable $error_handler [, int $error_types = E_ALL | E_STRICT ]): mixed'\n\t},\n\tset_exception_handler: {\n\t\tdescription: 'Sets a user-defined exception handler function',\n\t\tsignature: '( callable $exception_handler ): callable'\n\t},\n\ttrigger_error: {\n\t\tdescription: 'Generates a user-level error/warning/notice message',\n\t\tsignature: '( string $error_msg [, int $error_type = E_USER_NOTICE ]): bool'\n\t},\n\tuser_error: {\n\t\tdescription: 'Alias of trigger_error',\n\t},\n\topcache_compile_file: {\n\t\tdescription: 'Compiles and caches a PHP script without executing it',\n\t\tsignature: '( string $file ): bool'\n\t},\n\topcache_get_configuration: {\n\t\tdescription: 'Get configuration information about the cache',\n\t\tsignature: '(void): array'\n\t},\n\topcache_get_status: {\n\t\tdescription: 'Get status information about the cache',\n\t\tsignature: '([ bool $get_scripts ]): array'\n\t},\n\topcache_invalidate: {\n\t\tdescription: 'Invalidates a cached script',\n\t\tsignature: '( string $script [, bool $force ]): bool'\n\t},\n\topcache_is_script_cached: {\n\t\tdescription: 'Tells whether a script is cached in OPCache',\n\t\tsignature: '( string $file ): bool'\n\t},\n\topcache_reset: {\n\t\tdescription: 'Resets the contents of the opcode cache',\n\t\tsignature: '(void): bool'\n\t},\n\tflush: {\n\t\tdescription: 'Flush system output buffer',\n\t\tsignature: '(void): void'\n\t},\n\tob_clean: {\n\t\tdescription: 'Clean (erase) the output buffer',\n\t\tsignature: '(void): void'\n\t},\n\tob_end_clean: {\n\t\tdescription: 'Clean (erase) the output buffer and turn off output buffering',\n\t\tsignature: '(void): bool'\n\t},\n\tob_end_flush: {\n\t\tdescription: 'Flush (send) the output buffer and turn off output buffering',\n\t\tsignature: '(void): bool'\n\t},\n\tob_flush: {\n\t\tdescription: 'Flush (send) the output buffer',\n\t\tsignature: '(void): void'\n\t},\n\tob_get_clean: {\n\t\tdescription: 'Get current buffer contents and delete current output buffer',\n\t\tsignature: '(void): string'\n\t},\n\tob_get_contents: {\n\t\tdescription: 'Return the contents of the output buffer',\n\t\tsignature: '(void): string'\n\t},\n\tob_get_flush: {\n\t\tdescription: 'Flush the output buffer, return it as a string and turn off output buffering',\n\t\tsignature: '(void): string'\n\t},\n\tob_get_length: {\n\t\tdescription: 'Return the length of the output buffer',\n\t\tsignature: '(void): int'\n\t},\n\tob_get_level: {\n\t\tdescription: 'Return the nesting level of the output buffering mechanism',\n\t\tsignature: '(void): int'\n\t},\n\tob_get_status: {\n\t\tdescription: 'Get status of output buffers',\n\t\tsignature: '([ bool $full_status = FALSE ]): array'\n\t},\n\tob_gzhandler: {\n\t\tdescription: 'ob_start callback function to gzip output buffer',\n\t\tsignature: '( string $buffer , int $mode ): string'\n\t},\n\tob_implicit_flush: {\n\t\tdescription: 'Turn implicit flush on/off',\n\t\tsignature: '([ int $flag = 1 ]): void'\n\t},\n\tob_list_handlers: {\n\t\tdescription: 'List all output handlers in use',\n\t\tsignature: '(void): array'\n\t},\n\tob_start: {\n\t\tdescription: 'Turn on output buffering',\n\t\tsignature: '([ callable $output_callback [, int $chunk_size = 0 [, int $flags ]]]): bool'\n\t},\n\toutput_add_rewrite_var: {\n\t\tdescription: 'Add URL rewriter values',\n\t\tsignature: '( string $name , string $value ): bool'\n\t},\n\toutput_reset_rewrite_vars: {\n\t\tdescription: 'Reset URL rewriter values',\n\t\tsignature: '(void): bool'\n\t},\n\tassert_options: {\n\t\tdescription: 'Set/get the various assert flags',\n\t\tsignature: '( int $what [, mixed $value ]): mixed'\n\t},\n\tassert: {\n\t\tdescription: 'Checks if assertion is FALSE',\n\t\tsignature: '( mixed $assertion [, string $description [, Throwable $exception ]]): bool'\n\t},\n\tcli_get_process_title: {\n\t\tdescription: 'Returns the current process title',\n\t\tsignature: '(void): string'\n\t},\n\tcli_set_process_title: {\n\t\tdescription: 'Sets the process title',\n\t\tsignature: '( string $title ): bool'\n\t},\n\tdl: {\n\t\tdescription: 'Loads a PHP extension at runtime',\n\t\tsignature: '( string $library ): bool'\n\t},\n\textension_loaded: {\n\t\tdescription: 'Find out whether an extension is loaded',\n\t\tsignature: '( string $name ): bool'\n\t},\n\tgc_collect_cycles: {\n\t\tdescription: 'Forces collection of any existing garbage cycles',\n\t\tsignature: '(void): int'\n\t},\n\tgc_disable: {\n\t\tdescription: 'Deactivates the circular reference collector',\n\t\tsignature: '(void): void'\n\t},\n\tgc_enable: {\n\t\tdescription: 'Activates the circular reference collector',\n\t\tsignature: '(void): void'\n\t},\n\tgc_enabled: {\n\t\tdescription: 'Returns status of the circular reference collector',\n\t\tsignature: '(void): bool'\n\t},\n\tgc_mem_caches: {\n\t\tdescription: 'Reclaims memory used by the Zend Engine memory manager',\n\t\tsignature: '(void): int'\n\t},\n\tgc_status: {\n\t\tdescription: 'Gets information about the garbage collector',\n\t\tsignature: '(void): array'\n\t},\n\tget_cfg_var: {\n\t\tdescription: 'Gets the value of a PHP configuration option',\n\t\tsignature: '( string $option ): mixed'\n\t},\n\tget_current_user: {\n\t\tdescription: 'Gets the name of the owner of the current PHP script',\n\t\tsignature: '(void): string'\n\t},\n\tget_defined_constants: {\n\t\tdescription: 'Returns an associative array with the names of all the constants and their values',\n\t\tsignature: '([ bool $categorize ]): array'\n\t},\n\tget_extension_funcs: {\n\t\tdescription: 'Returns an array with the names of the functions of a module',\n\t\tsignature: '( string $module_name ): array'\n\t},\n\tget_include_path: {\n\t\tdescription: 'Gets the current include_path configuration option',\n\t\tsignature: '(void): string'\n\t},\n\tget_included_files: {\n\t\tdescription: 'Returns an array with the names of included or required files',\n\t\tsignature: '(void): array'\n\t},\n\tget_loaded_extensions: {\n\t\tdescription: 'Returns an array with the names of all modules compiled and loaded',\n\t\tsignature: '([ bool $zend_extensions ]): array'\n\t},\n\tget_magic_quotes_gpc: {\n\t\tdescription: 'Gets the current configuration setting of magic_quotes_gpc',\n\t\tsignature: '(void): bool'\n\t},\n\tget_magic_quotes_runtime: {\n\t\tdescription: 'Gets the current active configuration setting of magic_quotes_runtime',\n\t\tsignature: '(void): bool'\n\t},\n\tget_required_files: {\n\t\tdescription: 'Alias of get_included_files',\n\t},\n\tget_resources: {\n\t\tdescription: 'Returns active resources',\n\t\tsignature: '([ string $type ]): resource'\n\t},\n\tgetenv: {\n\t\tdescription: 'Gets the value of an environment variable',\n\t\tsignature: '( string $varname [, bool $local_only ]): array'\n\t},\n\tgetlastmod: {\n\t\tdescription: 'Gets time of last page modification',\n\t\tsignature: '(void): int'\n\t},\n\tgetmygid: {\n\t\tdescription: 'Get PHP script owner\\'s GID',\n\t\tsignature: '(void): int'\n\t},\n\tgetmyinode: {\n\t\tdescription: 'Gets the inode of the current script',\n\t\tsignature: '(void): int'\n\t},\n\tgetmypid: {\n\t\tdescription: 'Gets PHP\\'s process ID',\n\t\tsignature: '(void): int'\n\t},\n\tgetmyuid: {\n\t\tdescription: 'Gets PHP script owner\\'s UID',\n\t\tsignature: '(void): int'\n\t},\n\tgetopt: {\n\t\tdescription: 'Gets options from the command line argument list',\n\t\tsignature: '( string $options [, array $longopts [, int $optind ]]): array'\n\t},\n\tgetrusage: {\n\t\tdescription: 'Gets the current resource usages',\n\t\tsignature: '([ int $who = 0 ]): array'\n\t},\n\tini_alter: {\n\t\tdescription: 'Alias of ini_set',\n\t},\n\tini_get_all: {\n\t\tdescription: 'Gets all configuration options',\n\t\tsignature: '([ string $extension [, bool $details ]]): array'\n\t},\n\tini_get: {\n\t\tdescription: 'Gets the value of a configuration option',\n\t\tsignature: '( string $varname ): string'\n\t},\n\tini_restore: {\n\t\tdescription: 'Restores the value of a configuration option',\n\t\tsignature: '( string $varname ): void'\n\t},\n\tini_set: {\n\t\tdescription: 'Sets the value of a configuration option',\n\t\tsignature: '( string $varname , string $newvalue ): string'\n\t},\n\tmagic_quotes_runtime: {\n\t\tdescription: 'Alias of set_magic_quotes_runtime',\n\t},\n\tmain: {\n\t\tdescription: 'Dummy for main',\n\t},\n\tmemory_get_peak_usage: {\n\t\tdescription: 'Returns the peak of memory allocated by PHP',\n\t\tsignature: '([ bool $real_usage ]): int'\n\t},\n\tmemory_get_usage: {\n\t\tdescription: 'Returns the amount of memory allocated to PHP',\n\t\tsignature: '([ bool $real_usage ]): int'\n\t},\n\tphp_ini_loaded_file: {\n\t\tdescription: 'Retrieve a path to the loaded php.ini file',\n\t\tsignature: '(void): string'\n\t},\n\tphp_ini_scanned_files: {\n\t\tdescription: 'Return a list of .ini files parsed from the additional ini dir',\n\t\tsignature: '(void): string'\n\t},\n\tphp_logo_guid: {\n\t\tdescription: 'Gets the logo guid',\n\t\tsignature: '(void): string'\n\t},\n\tphp_sapi_name: {\n\t\tdescription: 'Returns the type of interface between web server and PHP',\n\t\tsignature: '(void): string'\n\t},\n\tphp_uname: {\n\t\tdescription: 'Returns information about the operating system PHP is running on',\n\t\tsignature: '([ string $mode = \"a\" ]): string'\n\t},\n\tphpcredits: {\n\t\tdescription: 'Prints out the credits for PHP',\n\t\tsignature: '([ int $flag = CREDITS_ALL ]): bool'\n\t},\n\tphpinfo: {\n\t\tdescription: 'Outputs information about PHP\\'s configuration',\n\t\tsignature: '([ int $what = INFO_ALL ]): bool'\n\t},\n\tphpversion: {\n\t\tdescription: 'Gets the current PHP version',\n\t\tsignature: '([ string $extension ]): string'\n\t},\n\tputenv: {\n\t\tdescription: 'Sets the value of an environment variable',\n\t\tsignature: '( string $setting ): bool'\n\t},\n\trestore_include_path: {\n\t\tdescription: 'Restores the value of the include_path configuration option',\n\t\tsignature: '(void): void'\n\t},\n\tset_include_path: {\n\t\tdescription: 'Sets the include_path configuration option',\n\t\tsignature: '( string $new_include_path ): string'\n\t},\n\tset_magic_quotes_runtime: {\n\t\tdescription: 'Sets the current active configuration setting of magic_quotes_runtime',\n\t\tsignature: '( bool $new_setting ): bool'\n\t},\n\tset_time_limit: {\n\t\tdescription: 'Limits the maximum execution time',\n\t\tsignature: '( int $seconds ): bool'\n\t},\n\tsys_get_temp_dir: {\n\t\tdescription: 'Returns directory path used for temporary files',\n\t\tsignature: '(void): string'\n\t},\n\tversion_compare: {\n\t\tdescription: 'Compares two \"PHP-standardized\" version number strings',\n\t\tsignature: '( string $version1 , string $version2 , string $operator ): bool'\n\t},\n\tzend_logo_guid: {\n\t\tdescription: 'Gets the Zend guid',\n\t\tsignature: '(void): string'\n\t},\n\tzend_thread_id: {\n\t\tdescription: 'Returns a unique identifier for the current thread',\n\t\tsignature: '(void): int'\n\t},\n\tzend_version: {\n\t\tdescription: 'Gets the version of the current Zend engine',\n\t\tsignature: '(void): string'\n\t},\n\tbzclose: {\n\t\tdescription: 'Close a bzip2 file',\n\t\tsignature: '( resource $bz ): int'\n\t},\n\tbzcompress: {\n\t\tdescription: 'Compress a string into bzip2 encoded data',\n\t\tsignature: '( string $source [, int $blocksize = 4 [, int $workfactor = 0 ]]): mixed'\n\t},\n\tbzdecompress: {\n\t\tdescription: 'Decompresses bzip2 encoded data',\n\t\tsignature: '( string $source [, int $small = 0 ]): mixed'\n\t},\n\tbzerrno: {\n\t\tdescription: 'Returns a bzip2 error number',\n\t\tsignature: '( resource $bz ): int'\n\t},\n\tbzerror: {\n\t\tdescription: 'Returns the bzip2 error number and error string in an array',\n\t\tsignature: '( resource $bz ): array'\n\t},\n\tbzerrstr: {\n\t\tdescription: 'Returns a bzip2 error string',\n\t\tsignature: '( resource $bz ): string'\n\t},\n\tbzflush: {\n\t\tdescription: 'Force a write of all buffered data',\n\t\tsignature: '( resource $bz ): bool'\n\t},\n\tbzopen: {\n\t\tdescription: 'Opens a bzip2 compressed file',\n\t\tsignature: '( mixed $file , string $mode ): resource'\n\t},\n\tbzread: {\n\t\tdescription: 'Binary safe bzip2 file read',\n\t\tsignature: '( resource $bz [, int $length = 1024 ]): string'\n\t},\n\tbzwrite: {\n\t\tdescription: 'Binary safe bzip2 file write',\n\t\tsignature: '( resource $bz , string $data [, int $length ]): int'\n\t},\n\tPharException: {\n\t\tdescription: 'The PharException class provides a phar-specific exception class    for try/catch blocks',\n\t},\n\tzip_close: {\n\t\tdescription: 'Close a ZIP file archive',\n\t\tsignature: '( resource $zip ): void'\n\t},\n\tzip_entry_close: {\n\t\tdescription: 'Close a directory entry',\n\t\tsignature: '( resource $zip_entry ): bool'\n\t},\n\tzip_entry_compressedsize: {\n\t\tdescription: 'Retrieve the compressed size of a directory entry',\n\t\tsignature: '( resource $zip_entry ): int'\n\t},\n\tzip_entry_compressionmethod: {\n\t\tdescription: 'Retrieve the compression method of a directory entry',\n\t\tsignature: '( resource $zip_entry ): string'\n\t},\n\tzip_entry_filesize: {\n\t\tdescription: 'Retrieve the actual file size of a directory entry',\n\t\tsignature: '( resource $zip_entry ): int'\n\t},\n\tzip_entry_name: {\n\t\tdescription: 'Retrieve the name of a directory entry',\n\t\tsignature: '( resource $zip_entry ): string'\n\t},\n\tzip_entry_open: {\n\t\tdescription: 'Open a directory entry for reading',\n\t\tsignature: '( resource $zip , resource $zip_entry [, string $mode ]): bool'\n\t},\n\tzip_entry_read: {\n\t\tdescription: 'Read from an open directory entry',\n\t\tsignature: '( resource $zip_entry [, int $length = 1024 ]): string'\n\t},\n\tzip_open: {\n\t\tdescription: 'Open a ZIP file archive',\n\t\tsignature: '( string $filename ): resource'\n\t},\n\tzip_read: {\n\t\tdescription: 'Read next entry in a ZIP file archive',\n\t\tsignature: '( resource $zip ): resource'\n\t},\n\tdeflate_add: {\n\t\tdescription: 'Incrementally deflate data',\n\t\tsignature: '( resource $context , string $data [, int $flush_mode = ZLIB_SYNC_FLUSH ]): string'\n\t},\n\tdeflate_init: {\n\t\tdescription: 'Initialize an incremental deflate context',\n\t\tsignature: '( int $encoding [, array $options = array() ]): resource'\n\t},\n\tgzclose: {\n\t\tdescription: 'Close an open gz-file pointer',\n\t\tsignature: '( resource $zp ): bool'\n\t},\n\tgzcompress: {\n\t\tdescription: 'Compress a string',\n\t\tsignature: '( string $data [, int $level = -1 [, int $encoding = ZLIB_ENCODING_DEFLATE ]]): string'\n\t},\n\tgzdecode: {\n\t\tdescription: 'Decodes a gzip compressed string',\n\t\tsignature: '( string $data [, int $length ]): string'\n\t},\n\tgzdeflate: {\n\t\tdescription: 'Deflate a string',\n\t\tsignature: '( string $data [, int $level = -1 [, int $encoding = ZLIB_ENCODING_RAW ]]): string'\n\t},\n\tgzencode: {\n\t\tdescription: 'Create a gzip compressed string',\n\t\tsignature: '( string $data [, int $level = -1 [, int $encoding_mode = FORCE_GZIP ]]): string'\n\t},\n\tgzeof: {\n\t\tdescription: 'Test for EOF on a gz-file pointer',\n\t\tsignature: '( resource $zp ): int'\n\t},\n\tgzfile: {\n\t\tdescription: 'Read entire gz-file into an array',\n\t\tsignature: '( string $filename [, int $use_include_path = 0 ]): array'\n\t},\n\tgzgetc: {\n\t\tdescription: 'Get character from gz-file pointer',\n\t\tsignature: '( resource $zp ): string'\n\t},\n\tgzgets: {\n\t\tdescription: 'Get line from file pointer',\n\t\tsignature: '( resource $zp [, int $length ]): string'\n\t},\n\tgzgetss: {\n\t\tdescription: 'Get line from gz-file pointer and strip HTML tags',\n\t\tsignature: '( resource $zp , int $length [, string $allowable_tags ]): string'\n\t},\n\tgzinflate: {\n\t\tdescription: 'Inflate a deflated string',\n\t\tsignature: '( string $data [, int $length = 0 ]): string'\n\t},\n\tgzopen: {\n\t\tdescription: 'Open gz-file',\n\t\tsignature: '( string $filename , string $mode [, int $use_include_path = 0 ]): resource'\n\t},\n\tgzpassthru: {\n\t\tdescription: 'Output all remaining data on a gz-file pointer',\n\t\tsignature: '( resource $zp ): int'\n\t},\n\tgzputs: {\n\t\tdescription: 'Alias of gzwrite',\n\t},\n\tgzread: {\n\t\tdescription: 'Binary-safe gz-file read',\n\t\tsignature: '( resource $zp , int $length ): string'\n\t},\n\tgzrewind: {\n\t\tdescription: 'Rewind the position of a gz-file pointer',\n\t\tsignature: '( resource $zp ): bool'\n\t},\n\tgzseek: {\n\t\tdescription: 'Seek on a gz-file pointer',\n\t\tsignature: '( resource $zp , int $offset [, int $whence = SEEK_SET ]): int'\n\t},\n\tgztell: {\n\t\tdescription: 'Tell gz-file pointer read/write position',\n\t\tsignature: '( resource $zp ): int'\n\t},\n\tgzuncompress: {\n\t\tdescription: 'Uncompress a compressed string',\n\t\tsignature: '( string $data [, int $length = 0 ]): string'\n\t},\n\tgzwrite: {\n\t\tdescription: 'Binary-safe gz-file write',\n\t\tsignature: '( resource $zp , string $string [, int $length ]): int'\n\t},\n\tinflate_add: {\n\t\tdescription: 'Incrementally inflate encoded data',\n\t\tsignature: '( resource $context , string $encoded_data [, int $flush_mode = ZLIB_SYNC_FLUSH ]): string'\n\t},\n\tinflate_get_read_len: {\n\t\tdescription: 'Get number of bytes read so far',\n\t\tsignature: '( resource $resource ): int'\n\t},\n\tinflate_get_status: {\n\t\tdescription: 'Get decompression status',\n\t\tsignature: '( resource $resource ): int'\n\t},\n\tinflate_init: {\n\t\tdescription: 'Initialize an incremental inflate context',\n\t\tsignature: '( int $encoding [, array $options = array() ]): resource'\n\t},\n\treadgzfile: {\n\t\tdescription: 'Output a gz-file',\n\t\tsignature: '( string $filename [, int $use_include_path = 0 ]): int'\n\t},\n\tzlib_decode: {\n\t\tdescription: 'Uncompress any raw/gzip/zlib encoded data',\n\t\tsignature: '( string $data [, string $max_decoded_len ]): string'\n\t},\n\tzlib_encode: {\n\t\tdescription: 'Compress data with the specified encoding',\n\t\tsignature: '( string $data , int $encoding [, int $level = -1 ]): string'\n\t},\n\tzlib_get_coding_type: {\n\t\tdescription: 'Returns the coding type used for output compression',\n\t\tsignature: '(void): string'\n\t},\n\trandom_bytes: {\n\t\tdescription: 'Generates cryptographically secure pseudo-random bytes',\n\t\tsignature: '( int $length ): string'\n\t},\n\trandom_int: {\n\t\tdescription: 'Generates cryptographically secure pseudo-random integers',\n\t\tsignature: '( int $min , int $max ): int'\n\t},\n\thash_algos: {\n\t\tdescription: 'Return a list of registered hashing algorithms',\n\t\tsignature: '(void): array'\n\t},\n\thash_copy: {\n\t\tdescription: 'Copy hashing context',\n\t\tsignature: '( HashContext $context ): HashContext'\n\t},\n\thash_equals: {\n\t\tdescription: 'Timing attack safe string comparison',\n\t\tsignature: '( string $known_string , string $user_string ): bool'\n\t},\n\thash_file: {\n\t\tdescription: 'Generate a hash value using the contents of a given file',\n\t\tsignature: '( string $algo , string $filename [, bool $raw_output ]): string'\n\t},\n\thash_final: {\n\t\tdescription: 'Finalize an incremental hash and return resulting digest',\n\t\tsignature: '( HashContext $context [, bool $raw_output ]): string'\n\t},\n\thash_hkdf: {\n\t\tdescription: 'Generate a HKDF key derivation of a supplied key input',\n\t\tsignature: '( string $algo , string $ikm [, int $length = 0 [, string $info = \\'\\' [, string $salt = \\'\\' ]]]): string'\n\t},\n\thash_hmac_algos: {\n\t\tdescription: 'Return a list of registered hashing algorithms suitable for hash_hmac',\n\t\tsignature: '(void): array'\n\t},\n\thash_hmac_file: {\n\t\tdescription: 'Generate a keyed hash value using the HMAC method and the contents of a given file',\n\t\tsignature: '( string $algo , string $filename , string $key [, bool $raw_output ]): string'\n\t},\n\thash_hmac: {\n\t\tdescription: 'Generate a keyed hash value using the HMAC method',\n\t\tsignature: '( string $algo , string $data , string $key [, bool $raw_output ]): string'\n\t},\n\thash_init: {\n\t\tdescription: 'Initialize an incremental hashing context',\n\t\tsignature: '( string $algo [, int $options = 0 [, string $key ]]): HashContext'\n\t},\n\thash_pbkdf2: {\n\t\tdescription: 'Generate a PBKDF2 key derivation of a supplied password',\n\t\tsignature: '( string $algo , string $password , string $salt , int $iterations [, int $length = 0 [, bool $raw_output ]]): string'\n\t},\n\thash_update_file: {\n\t\tdescription: 'Pump data into an active hashing context from a file',\n\t\tsignature: '( HashContext $hcontext , string $filename [, resource $scontext ]): bool'\n\t},\n\thash_update_stream: {\n\t\tdescription: 'Pump data into an active hashing context from an open stream',\n\t\tsignature: '( HashContext $context , resource $handle [, int $length = -1 ]): int'\n\t},\n\thash_update: {\n\t\tdescription: 'Pump data into an active hashing context',\n\t\tsignature: '( HashContext $context , string $data ): bool'\n\t},\n\thash: {\n\t\tdescription: 'Generate a hash value (message digest)',\n\t\tsignature: '( string $algo , string $data [, bool $raw_output ]): string'\n\t},\n\topenssl_cipher_iv_length: {\n\t\tdescription: 'Gets the cipher iv length',\n\t\tsignature: '( string $method ): int'\n\t},\n\topenssl_csr_export_to_file: {\n\t\tdescription: 'Exports a CSR to a file',\n\t\tsignature: '( mixed $csr , string $outfilename [, bool $notext ]): bool'\n\t},\n\topenssl_csr_export: {\n\t\tdescription: 'Exports a CSR as a string',\n\t\tsignature: '( mixed $csr , string $out [, bool $notext ]): bool'\n\t},\n\topenssl_csr_get_public_key: {\n\t\tdescription: 'Returns the public key of a CSR',\n\t\tsignature: '( mixed $csr [, bool $use_shortnames ]): resource'\n\t},\n\topenssl_csr_get_subject: {\n\t\tdescription: 'Returns the subject of a CSR',\n\t\tsignature: '( mixed $csr [, bool $use_shortnames ]): array'\n\t},\n\topenssl_csr_new: {\n\t\tdescription: 'Generates a CSR',\n\t\tsignature: '( array $dn , resource $privkey [, array $configargs [, array $extraattribs ]]): mixed'\n\t},\n\topenssl_csr_sign: {\n\t\tdescription: 'Sign a CSR with another certificate (or itself) and generate a certificate',\n\t\tsignature: '( mixed $csr , mixed $cacert , mixed $priv_key , int $days [, array $configargs [, int $serial = 0 ]]): resource'\n\t},\n\topenssl_decrypt: {\n\t\tdescription: 'Decrypts data',\n\t\tsignature: '( string $data , string $method , string $key [, int $options = 0 [, string $iv = \"\" [, string $tag = \"\" [, string $aad = \"\" ]]]]): string'\n\t},\n\topenssl_dh_compute_key: {\n\t\tdescription: 'Computes shared secret for public value of remote DH public key and local DH key',\n\t\tsignature: '( string $pub_key , resource $dh_key ): string'\n\t},\n\topenssl_digest: {\n\t\tdescription: 'Computes a digest',\n\t\tsignature: '( string $data , string $method [, bool $raw_output ]): string'\n\t},\n\topenssl_encrypt: {\n\t\tdescription: 'Encrypts data',\n\t\tsignature: '( string $data , string $method , string $key [, int $options = 0 [, string $iv = \"\" [, string $tag = NULL [, string $aad = \"\" [, int $tag_length = 16 ]]]]]): string'\n\t},\n\topenssl_error_string: {\n\t\tdescription: 'Return openSSL error message',\n\t\tsignature: '(void): string'\n\t},\n\topenssl_free_key: {\n\t\tdescription: 'Free key resource',\n\t\tsignature: '( resource $key_identifier ): void'\n\t},\n\topenssl_get_cert_locations: {\n\t\tdescription: 'Retrieve the available certificate locations',\n\t\tsignature: '(void): array'\n\t},\n\topenssl_get_cipher_methods: {\n\t\tdescription: 'Gets available cipher methods',\n\t\tsignature: '([ bool $aliases ]): array'\n\t},\n\topenssl_get_curve_names: {\n\t\tdescription: 'Gets list of available curve names for ECC',\n\t\tsignature: '(void): array'\n\t},\n\topenssl_get_md_methods: {\n\t\tdescription: 'Gets available digest methods',\n\t\tsignature: '([ bool $aliases ]): array'\n\t},\n\topenssl_get_privatekey: {\n\t\tdescription: 'Alias of openssl_pkey_get_private',\n\t},\n\topenssl_get_publickey: {\n\t\tdescription: 'Alias of openssl_pkey_get_public',\n\t},\n\topenssl_open: {\n\t\tdescription: 'Open sealed data',\n\t\tsignature: '( string $sealed_data , string $open_data , string $env_key , mixed $priv_key_id [, string $method = \"RC4\" [, string $iv ]]): bool'\n\t},\n\topenssl_pbkdf2: {\n\t\tdescription: 'Generates a PKCS5 v2 PBKDF2 string',\n\t\tsignature: '( string $password , string $salt , int $key_length , int $iterations [, string $digest_algorithm = \"sha1\" ]): string'\n\t},\n\topenssl_pkcs12_export_to_file: {\n\t\tdescription: 'Exports a PKCS#12 Compatible Certificate Store File',\n\t\tsignature: '( mixed $x509 , string $filename , mixed $priv_key , string $pass [, array $args ]): bool'\n\t},\n\topenssl_pkcs12_export: {\n\t\tdescription: 'Exports a PKCS#12 Compatible Certificate Store File to variable',\n\t\tsignature: '( mixed $x509 , string $out , mixed $priv_key , string $pass [, array $args ]): bool'\n\t},\n\topenssl_pkcs12_read: {\n\t\tdescription: 'Parse a PKCS#12 Certificate Store into an array',\n\t\tsignature: '( string $pkcs12 , array $certs , string $pass ): bool'\n\t},\n\topenssl_pkcs7_decrypt: {\n\t\tdescription: 'Decrypts an S/MIME encrypted message',\n\t\tsignature: '( string $infilename , string $outfilename , mixed $recipcert [, mixed $recipkey ]): bool'\n\t},\n\topenssl_pkcs7_encrypt: {\n\t\tdescription: 'Encrypt an S/MIME message',\n\t\tsignature: '( string $infile , string $outfile , mixed $recipcerts , array $headers [, int $flags = 0 [, int $cipherid = OPENSSL_CIPHER_RC2_40 ]]): bool'\n\t},\n\topenssl_pkcs7_read: {\n\t\tdescription: 'Export the PKCS7 file to an array of PEM certificates',\n\t\tsignature: '( string $infilename , array $certs ): bool'\n\t},\n\topenssl_pkcs7_sign: {\n\t\tdescription: 'Sign an S/MIME message',\n\t\tsignature: '( string $infilename , string $outfilename , mixed $signcert , mixed $privkey , array $headers [, int $flags = PKCS7_DETACHED [, string $extracerts ]]): bool'\n\t},\n\topenssl_pkcs7_verify: {\n\t\tdescription: 'Verifies the signature of an S/MIME signed message',\n\t\tsignature: '( string $filename , int $flags [, string $outfilename [, array $cainfo [, string $extracerts [, string $content [, string $p7bfilename ]]]]]): mixed'\n\t},\n\topenssl_pkey_export_to_file: {\n\t\tdescription: 'Gets an exportable representation of a key into a file',\n\t\tsignature: '( mixed $key , string $outfilename [, string $passphrase [, array $configargs ]]): bool'\n\t},\n\topenssl_pkey_export: {\n\t\tdescription: 'Gets an exportable representation of a key into a string',\n\t\tsignature: '( mixed $key , string $out [, string $passphrase [, array $configargs ]]): bool'\n\t},\n\topenssl_pkey_free: {\n\t\tdescription: 'Frees a private key',\n\t\tsignature: '( resource $key ): void'\n\t},\n\topenssl_pkey_get_details: {\n\t\tdescription: 'Returns an array with the key details',\n\t\tsignature: '( resource $key ): array'\n\t},\n\topenssl_pkey_get_private: {\n\t\tdescription: 'Get a private key',\n\t\tsignature: '( mixed $key [, string $passphrase = \"\" ]): resource'\n\t},\n\topenssl_pkey_get_public: {\n\t\tdescription: 'Extract public key from certificate and prepare it for use',\n\t\tsignature: '( mixed $certificate ): resource'\n\t},\n\topenssl_pkey_new: {\n\t\tdescription: 'Generates a new private key',\n\t\tsignature: '([ array $configargs ]): resource'\n\t},\n\topenssl_private_decrypt: {\n\t\tdescription: 'Decrypts data with private key',\n\t\tsignature: '( string $data , string $decrypted , mixed $key [, int $padding = OPENSSL_PKCS1_PADDING ]): bool'\n\t},\n\topenssl_private_encrypt: {\n\t\tdescription: 'Encrypts data with private key',\n\t\tsignature: '( string $data , string $crypted , mixed $key [, int $padding = OPENSSL_PKCS1_PADDING ]): bool'\n\t},\n\topenssl_public_decrypt: {\n\t\tdescription: 'Decrypts data with public key',\n\t\tsignature: '( string $data , string $decrypted , mixed $key [, int $padding = OPENSSL_PKCS1_PADDING ]): bool'\n\t},\n\topenssl_public_encrypt: {\n\t\tdescription: 'Encrypts data with public key',\n\t\tsignature: '( string $data , string $crypted , mixed $key [, int $padding = OPENSSL_PKCS1_PADDING ]): bool'\n\t},\n\topenssl_random_pseudo_bytes: {\n\t\tdescription: 'Generate a pseudo-random string of bytes',\n\t\tsignature: '( int $length [, bool $crypto_strong ]): string'\n\t},\n\topenssl_seal: {\n\t\tdescription: 'Seal (encrypt) data',\n\t\tsignature: '( string $data , string $sealed_data , array $env_keys , array $pub_key_ids [, string $method = \"RC4\" [, string $iv ]]): int'\n\t},\n\topenssl_sign: {\n\t\tdescription: 'Generate signature',\n\t\tsignature: '( string $data , string $signature , mixed $priv_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ]): bool'\n\t},\n\topenssl_spki_export_challenge: {\n\t\tdescription: 'Exports the challenge assoicated with a signed public key and challenge',\n\t\tsignature: '( string $spkac ): string'\n\t},\n\topenssl_spki_export: {\n\t\tdescription: 'Exports a valid PEM formatted public key signed public key and challenge',\n\t\tsignature: '( string $spkac ): string'\n\t},\n\topenssl_spki_new: {\n\t\tdescription: 'Generate a new signed public key and challenge',\n\t\tsignature: '( resource $privkey , string $challenge [, int $algorithm = 0 ]): string'\n\t},\n\topenssl_spki_verify: {\n\t\tdescription: 'Verifies a signed public key and challenge',\n\t\tsignature: '( string $spkac ): string'\n\t},\n\topenssl_verify: {\n\t\tdescription: 'Verify signature',\n\t\tsignature: '( string $data , string $signature , mixed $pub_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ]): int'\n\t},\n\topenssl_x509_check_private_key: {\n\t\tdescription: 'Checks if a private key corresponds to a certificate',\n\t\tsignature: '( mixed $cert , mixed $key ): bool'\n\t},\n\topenssl_x509_checkpurpose: {\n\t\tdescription: 'Verifies if a certificate can be used for a particular purpose',\n\t\tsignature: '( mixed $x509cert , int $purpose [, array $cainfo = array() [, string $untrustedfile ]]): int'\n\t},\n\topenssl_x509_export_to_file: {\n\t\tdescription: 'Exports a certificate to file',\n\t\tsignature: '( mixed $x509 , string $outfilename [, bool $notext ]): bool'\n\t},\n\topenssl_x509_export: {\n\t\tdescription: 'Exports a certificate as a string',\n\t\tsignature: '( mixed $x509 , string $output [, bool $notext ]): bool'\n\t},\n\topenssl_x509_fingerprint: {\n\t\tdescription: 'Calculates the fingerprint, or digest, of a given X.509 certificate',\n\t\tsignature: '( mixed $x509 [, string $hash_algorithm = \"sha1\" [, bool $raw_output ]]): string'\n\t},\n\topenssl_x509_free: {\n\t\tdescription: 'Free certificate resource',\n\t\tsignature: '( resource $x509cert ): void'\n\t},\n\topenssl_x509_parse: {\n\t\tdescription: 'Parse an X509 certificate and return the information as an array',\n\t\tsignature: '( mixed $x509cert [, bool $shortnames ]): array'\n\t},\n\topenssl_x509_read: {\n\t\tdescription: 'Parse an X.509 certificate and return a resource identifier for  it',\n\t\tsignature: '( mixed $x509certdata ): resource'\n\t},\n\tpassword_get_info: {\n\t\tdescription: 'Returns information about the given hash',\n\t\tsignature: '( string $hash ): array'\n\t},\n\tpassword_hash: {\n\t\tdescription: 'Creates a password hash',\n\t\tsignature: '( string $password , int $algo [, array $options ]): integer'\n\t},\n\tpassword_needs_rehash: {\n\t\tdescription: 'Checks if the given hash matches the given options',\n\t\tsignature: '( string $hash , int $algo [, array $options ]): bool'\n\t},\n\tpassword_verify: {\n\t\tdescription: 'Verifies that a password matches a hash',\n\t\tsignature: '( string $password , string $hash ): bool'\n\t},\n\tsodium_add: {\n\t\tdescription: 'Add large numbers',\n\t\tsignature: '( string $val , string $addv ): void'\n\t},\n\tsodium_base642bin: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $b64 , int $id [, string $ignore ]): string'\n\t},\n\tsodium_bin2base64: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $bin , int $id ): string'\n\t},\n\tsodium_bin2hex: {\n\t\tdescription: 'Encode to hexadecimal',\n\t\tsignature: '( string $bin ): string'\n\t},\n\tsodium_compare: {\n\t\tdescription: 'Compare large numbers',\n\t\tsignature: '( string $buf1 , string $buf2 ): int'\n\t},\n\tsodium_crypto_aead_aes256gcm_decrypt: {\n\t\tdescription: 'Decrypt in combined mode with precalculation',\n\t\tsignature: '( string $ciphertext , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_aes256gcm_encrypt: {\n\t\tdescription: 'Encrypt in combined mode with precalculation',\n\t\tsignature: '( string $msg , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_aes256gcm_is_available: {\n\t\tdescription: 'Check if hardware supports AES256-GCM',\n\t\tsignature: '(void): bool'\n\t},\n\tsodium_crypto_aead_aes256gcm_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_aead_chacha20poly1305_decrypt: {\n\t\tdescription: 'Verify that the ciphertext includes a valid tag',\n\t\tsignature: '( string $ciphertext , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_chacha20poly1305_encrypt: {\n\t\tdescription: 'Encrypt a message',\n\t\tsignature: '( string $msg , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_chacha20poly1305_ietf_decrypt: {\n\t\tdescription: 'Verify that the ciphertext includes a valid tag',\n\t\tsignature: '( string $ciphertext , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_chacha20poly1305_ietf_encrypt: {\n\t\tdescription: 'Encrypt a message',\n\t\tsignature: '( string $msg , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_chacha20poly1305_ietf_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_aead_chacha20poly1305_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_aead_xchacha20poly1305_ietf_decrypt: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $ciphertext , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_xchacha20poly1305_ietf_encrypt: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $msg , string $ad , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_aead_xchacha20poly1305_ietf_keygen: {\n\t\tdescription: 'Description',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_auth_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_auth_verify: {\n\t\tdescription: 'Verifies that the tag is valid for the message',\n\t\tsignature: '( string $signature , string $msg , string $key ): bool'\n\t},\n\tsodium_crypto_auth: {\n\t\tdescription: 'Compute a tag for the message',\n\t\tsignature: '( string $msg , string $key ): string'\n\t},\n\tsodium_crypto_box_keypair_from_secretkey_and_publickey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $secret_key , string $public_key ): string'\n\t},\n\tsodium_crypto_box_keypair: {\n\t\tdescription: 'Randomly generate a secret key and a corresponding public key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_box_open: {\n\t\tdescription: 'Verify and decrypt a ciphertext',\n\t\tsignature: '( string $ciphertext , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_box_publickey_from_secretkey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_box_publickey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_box_seal_open: {\n\t\tdescription: 'Decrypt the ciphertext',\n\t\tsignature: '( string $ciphertext , string $key ): string'\n\t},\n\tsodium_crypto_box_seal: {\n\t\tdescription: 'Encrypt a message',\n\t\tsignature: '( string $msg , string $key ): string'\n\t},\n\tsodium_crypto_box_secretkey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_box_seed_keypair: {\n\t\tdescription: 'Deterministically derive the key pair from a single key',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_box: {\n\t\tdescription: 'Encrypt a message',\n\t\tsignature: '( string $msg , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_generichash_final: {\n\t\tdescription: 'Complete the hash',\n\t\tsignature: '( string $state [, int $length = SODIUM_CRYPTO_GENERICHASH_BYTES ]): string'\n\t},\n\tsodium_crypto_generichash_init: {\n\t\tdescription: 'Initialize a hash',\n\t\tsignature: '([ string $key [, int $length = SODIUM_CRYPTO_GENERICHASH_BYTES ]]): string'\n\t},\n\tsodium_crypto_generichash_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_generichash_update: {\n\t\tdescription: 'Add message to a hash',\n\t\tsignature: '( string $state , string $msg ): bool'\n\t},\n\tsodium_crypto_generichash: {\n\t\tdescription: 'Get a hash of the message',\n\t\tsignature: '( string $msg [, string $key [, int $length = SODIUM_CRYPTO_GENERICHASH_BYTES ]]): string'\n\t},\n\tsodium_crypto_kdf_derive_from_key: {\n\t\tdescription: 'Derive a subkey',\n\t\tsignature: '( int $subkey_len , int $subkey_id , string $context , string $key ): string'\n\t},\n\tsodium_crypto_kdf_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_kx_client_session_keys: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $client_keypair , string $server_key ): array'\n\t},\n\tsodium_crypto_kx_keypair: {\n\t\tdescription: 'Creates a new sodium keypair',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_kx_publickey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_kx_secretkey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_kx_seed_keypair: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $string ): string'\n\t},\n\tsodium_crypto_kx_server_session_keys: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $server_keypair , string $client_key ): array'\n\t},\n\tsodium_crypto_pwhash_scryptsalsa208sha256_str_verify: {\n\t\tdescription: 'Verify that the password is a valid password verification string',\n\t\tsignature: '( string $hash , string $password ): bool'\n\t},\n\tsodium_crypto_pwhash_scryptsalsa208sha256_str: {\n\t\tdescription: 'Get an ASCII encoded hash',\n\t\tsignature: '( string $password , int $opslimit , int $memlimit ): string'\n\t},\n\tsodium_crypto_pwhash_scryptsalsa208sha256: {\n\t\tdescription: 'Derives a key from a password',\n\t\tsignature: '( int $length , string $password , string $salt , int $opslimit , int $memlimit ): string'\n\t},\n\tsodium_crypto_pwhash_str_needs_rehash: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $password , int $opslimit , int $memlimit ): bool'\n\t},\n\tsodium_crypto_pwhash_str_verify: {\n\t\tdescription: 'Verifies that a password matches a hash',\n\t\tsignature: '( string $hash , string $password ): bool'\n\t},\n\tsodium_crypto_pwhash_str: {\n\t\tdescription: 'Get an ASCII-encoded hash',\n\t\tsignature: '( string $password , int $opslimit , int $memlimit ): string'\n\t},\n\tsodium_crypto_pwhash: {\n\t\tdescription: 'Derive a key from a password',\n\t\tsignature: '( int $length , string $password , string $salt , int $opslimit , int $memlimit [, int $alg ]): string'\n\t},\n\tsodium_crypto_scalarmult_base: {\n\t\tdescription: 'Alias of sodium_crypto_box_publickey_from_secretkey',\n\t},\n\tsodium_crypto_scalarmult: {\n\t\tdescription: 'Compute a shared secret given a user\\'s secret key and another user\\'s public key',\n\t\tsignature: '( string $n , string $p ): string'\n\t},\n\tsodium_crypto_secretbox_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_secretbox_open: {\n\t\tdescription: 'Verify and decrypt a ciphertext',\n\t\tsignature: '( string $ciphertext , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_secretbox: {\n\t\tdescription: 'Encrypt a message',\n\t\tsignature: '( string $string , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_secretstream_xchacha20poly1305_init_pull: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $header , string $key ): string'\n\t},\n\tsodium_crypto_secretstream_xchacha20poly1305_init_push: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $key ): array'\n\t},\n\tsodium_crypto_secretstream_xchacha20poly1305_keygen: {\n\t\tdescription: 'Description',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_secretstream_xchacha20poly1305_pull: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $state , string $c [, string $ad ]): array'\n\t},\n\tsodium_crypto_secretstream_xchacha20poly1305_push: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $state , string $msg [, string $ad [, int $tag ]]): string'\n\t},\n\tsodium_crypto_secretstream_xchacha20poly1305_rekey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $state ): void'\n\t},\n\tsodium_crypto_shorthash_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_shorthash: {\n\t\tdescription: 'Compute a fixed-size fingerprint for the message',\n\t\tsignature: '( string $msg , string $key ): string'\n\t},\n\tsodium_crypto_sign_detached: {\n\t\tdescription: 'Sign the message',\n\t\tsignature: '( string $msg , string $secretkey ): string'\n\t},\n\tsodium_crypto_sign_ed25519_pk_to_curve25519: {\n\t\tdescription: 'Convert an Ed25519 public key to a Curve25519 public key',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_sign_ed25519_sk_to_curve25519: {\n\t\tdescription: 'Convert an Ed25519 secret key to a Curve25519 secret key',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_sign_keypair_from_secretkey_and_publickey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $secret_key , string $public_key ): string'\n\t},\n\tsodium_crypto_sign_keypair: {\n\t\tdescription: 'Randomly generate a secret key and a corresponding public key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_sign_open: {\n\t\tdescription: 'Check that the signed message has a valid signature',\n\t\tsignature: '( string $string , string $public_key ): string'\n\t},\n\tsodium_crypto_sign_publickey_from_secretkey: {\n\t\tdescription: 'Extract the public key from the secret key',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_sign_publickey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $keypair ): string'\n\t},\n\tsodium_crypto_sign_secretkey: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_sign_seed_keypair: {\n\t\tdescription: 'Deterministically derive the key pair from a single key',\n\t\tsignature: '( string $key ): string'\n\t},\n\tsodium_crypto_sign_verify_detached: {\n\t\tdescription: 'Verify signature for the message',\n\t\tsignature: '( string $signature , string $msg , string $public_key ): bool'\n\t},\n\tsodium_crypto_sign: {\n\t\tdescription: 'Sign a message',\n\t\tsignature: '( string $msg , string $secret_key ): string'\n\t},\n\tsodium_crypto_stream_keygen: {\n\t\tdescription: 'Get random bytes for key',\n\t\tsignature: '(void): string'\n\t},\n\tsodium_crypto_stream_xor: {\n\t\tdescription: 'Encrypt a message',\n\t\tsignature: '( string $msg , string $nonce , string $key ): string'\n\t},\n\tsodium_crypto_stream: {\n\t\tdescription: 'Generate a deterministic sequence of bytes from a seed',\n\t\tsignature: '( int $length , string $nonce , string $key ): string'\n\t},\n\tsodium_hex2bin: {\n\t\tdescription: 'Decodes a hexadecimally encoded binary string',\n\t\tsignature: '( string $hex [, string $ignore ]): string'\n\t},\n\tsodium_increment: {\n\t\tdescription: 'Increment large number',\n\t\tsignature: '( string $val ): void'\n\t},\n\tsodium_memcmp: {\n\t\tdescription: 'Test for equality in constant-time',\n\t\tsignature: '( string $buf1 , string $buf2 ): int'\n\t},\n\tsodium_memzero: {\n\t\tdescription: 'Overwrite buf with zeros',\n\t\tsignature: '( string $buf ): void'\n\t},\n\tsodium_pad: {\n\t\tdescription: 'Add padding data',\n\t\tsignature: '( string $unpadded , int $length ): string'\n\t},\n\tsodium_unpad: {\n\t\tdescription: 'Remove padding data',\n\t\tsignature: '( string $padded , int $length ): string'\n\t},\n\tdba_close: {\n\t\tdescription: 'Close a DBA database',\n\t\tsignature: '( resource $handle ): void'\n\t},\n\tdba_delete: {\n\t\tdescription: 'Delete DBA entry specified by key',\n\t\tsignature: '( string $key , resource $handle ): bool'\n\t},\n\tdba_exists: {\n\t\tdescription: 'Check whether key exists',\n\t\tsignature: '( string $key , resource $handle ): bool'\n\t},\n\tdba_fetch: {\n\t\tdescription: 'Fetch data specified by key',\n\t\tsignature: '( string $key , resource $handle , int $skip ): string'\n\t},\n\tdba_firstkey: {\n\t\tdescription: 'Fetch first key',\n\t\tsignature: '( resource $handle ): string'\n\t},\n\tdba_handlers: {\n\t\tdescription: 'List all the handlers available',\n\t\tsignature: '([ bool $full_info ]): array'\n\t},\n\tdba_insert: {\n\t\tdescription: 'Insert entry',\n\t\tsignature: '( string $key , string $value , resource $handle ): bool'\n\t},\n\tdba_key_split: {\n\t\tdescription: 'Splits a key in string representation into array representation',\n\t\tsignature: '( mixed $key ): mixed'\n\t},\n\tdba_list: {\n\t\tdescription: 'List all open database files',\n\t\tsignature: '(void): array'\n\t},\n\tdba_nextkey: {\n\t\tdescription: 'Fetch next key',\n\t\tsignature: '( resource $handle ): string'\n\t},\n\tdba_open: {\n\t\tdescription: 'Open database',\n\t\tsignature: '( string $path , string $mode [, string $handler [, mixed $... ]]): resource'\n\t},\n\tdba_optimize: {\n\t\tdescription: 'Optimize database',\n\t\tsignature: '( resource $handle ): bool'\n\t},\n\tdba_popen: {\n\t\tdescription: 'Open database persistently',\n\t\tsignature: '( string $path , string $mode [, string $handler [, mixed $... ]]): resource'\n\t},\n\tdba_replace: {\n\t\tdescription: 'Replace or insert entry',\n\t\tsignature: '( string $key , string $value , resource $handle ): bool'\n\t},\n\tdba_sync: {\n\t\tdescription: 'Synchronize database',\n\t\tsignature: '( resource $handle ): bool'\n\t},\n\tpdo_drivers: {\n\t\tdescription: 'Return an array of available PDO drivers',\n\t\tsignature: '(void): array'\n\t},\n\tcal_days_in_month: {\n\t\tdescription: 'Return the number of days in a month for a given year and calendar',\n\t\tsignature: '( int $calendar , int $month , int $year ): int'\n\t},\n\tcal_from_jd: {\n\t\tdescription: 'Converts from Julian Day Count to a supported calendar',\n\t\tsignature: '( int $jd , int $calendar ): array'\n\t},\n\tcal_info: {\n\t\tdescription: 'Returns information about a particular calendar',\n\t\tsignature: '([ int $calendar = -1 ]): array'\n\t},\n\tcal_to_jd: {\n\t\tdescription: 'Converts from a supported calendar to Julian Day Count',\n\t\tsignature: '( int $calendar , int $month , int $day , int $year ): int'\n\t},\n\teaster_date: {\n\t\tdescription: 'Get Unix timestamp for midnight on Easter of a given year',\n\t\tsignature: '([ int $year = date(\"Y\") ]): int'\n\t},\n\teaster_days: {\n\t\tdescription: 'Get number of days after March 21 on which Easter falls for a given year',\n\t\tsignature: '([ int $year = date(\"Y\") [, int $method = CAL_EASTER_DEFAULT ]]): int'\n\t},\n\tfrenchtojd: {\n\t\tdescription: 'Converts a date from the French Republican Calendar to a Julian Day Count',\n\t\tsignature: '( int $month , int $day , int $year ): int'\n\t},\n\tgregoriantojd: {\n\t\tdescription: 'Converts a Gregorian date to Julian Day Count',\n\t\tsignature: '( int $month , int $day , int $year ): int'\n\t},\n\tjddayofweek: {\n\t\tdescription: 'Returns the day of the week',\n\t\tsignature: '( int $julianday [, int $mode = CAL_DOW_DAYNO ]): mixed'\n\t},\n\tjdmonthname: {\n\t\tdescription: 'Returns a month name',\n\t\tsignature: '( int $julianday , int $mode ): string'\n\t},\n\tjdtofrench: {\n\t\tdescription: 'Converts a Julian Day Count to the French Republican Calendar',\n\t\tsignature: '( int $juliandaycount ): string'\n\t},\n\tjdtogregorian: {\n\t\tdescription: 'Converts Julian Day Count to Gregorian date',\n\t\tsignature: '( int $julianday ): string'\n\t},\n\tjdtojewish: {\n\t\tdescription: 'Converts a Julian day count to a Jewish calendar date',\n\t\tsignature: '( int $juliandaycount [, bool $hebrew [, int $fl = 0 ]]): string'\n\t},\n\tjdtojulian: {\n\t\tdescription: 'Converts a Julian Day Count to a Julian Calendar Date',\n\t\tsignature: '( int $julianday ): string'\n\t},\n\tjdtounix: {\n\t\tdescription: 'Convert Julian Day to Unix timestamp',\n\t\tsignature: '( int $jday ): int'\n\t},\n\tjewishtojd: {\n\t\tdescription: 'Converts a date in the Jewish Calendar to Julian Day Count',\n\t\tsignature: '( int $month , int $day , int $year ): int'\n\t},\n\tjuliantojd: {\n\t\tdescription: 'Converts a Julian Calendar date to Julian Day Count',\n\t\tsignature: '( int $month , int $day , int $year ): int'\n\t},\n\tunixtojd: {\n\t\tdescription: 'Convert Unix timestamp to Julian Day',\n\t\tsignature: '([ int $timestamp = time() ]): int'\n\t},\n\tdate_add: {\n\t\tdescription: 'Adds an amount of days, months, years, hours, minutes and seconds to a   DateTime object',\n\t\tsignature: '( DateTime $object , DateInterval $interval ): DateTime'\n\t},\n\tdate_create: {\n\t\tdescription: 'Returns new DateTime object',\n\t\tsignature: '([ string $time = \"now\" [, DateTimeZone $timezone ]]): DateTime'\n\t},\n\tdate_create_from_format: {\n\t\tdescription: 'Parses a time string according to a specified format',\n\t\tsignature: '( string $format , string $time [, DateTimeZone $timezone ]): DateTime'\n\t},\n\tdate_get_last_errors: {\n\t\tdescription: 'Returns the warnings and errors',\n\t\tsignature: '(void): array'\n\t},\n\tdate_modify: {\n\t\tdescription: 'Alters the timestamp',\n\t\tsignature: '( DateTime $object , string $modify ): DateTime'\n\t},\n\tdate_date_set: {\n\t\tdescription: 'Sets the date',\n\t\tsignature: '( DateTime $object , int $year , int $month , int $day ): DateTime'\n\t},\n\tdate_isodate_set: {\n\t\tdescription: 'Sets the ISO date',\n\t\tsignature: '( DateTime $object , int $year , int $week [, int $day = 1 ]): DateTime'\n\t},\n\tdate_time_set: {\n\t\tdescription: 'Sets the time',\n\t\tsignature: '( DateTime $object , int $hour , int $minute [, int $second = 0 [, int $microseconds = 0 ]]): DateTime'\n\t},\n\tdate_timestamp_set: {\n\t\tdescription: 'Sets the date and time based on an Unix timestamp',\n\t\tsignature: '( DateTime $object , int $unixtimestamp ): DateTime'\n\t},\n\tdate_timezone_set: {\n\t\tdescription: 'Sets the time zone for the DateTime object',\n\t\tsignature: '( DateTime $object , DateTimeZone $timezone ): object'\n\t},\n\tdate_sub: {\n\t\tdescription: 'Subtracts an amount of days, months, years, hours, minutes and seconds from   a DateTime object',\n\t\tsignature: '( DateTime $object , DateInterval $interval ): DateTime'\n\t},\n\tdate_create_immutable: {\n\t\tdescription: 'Returns new DateTimeImmutable object',\n\t\tsignature: '([ string $time = \"now\" [, DateTimeZone $timezone ]]): DateTimeImmutable'\n\t},\n\tdate_create_immutable_from_format: {\n\t\tdescription: 'Parses a time string according to a specified format',\n\t\tsignature: '( string $format , string $time [, DateTimeZone $timezone ]): DateTimeImmutable'\n\t},\n\tdate_diff: {\n\t\tdescription: 'Returns the difference between two DateTime objects',\n\t\tsignature: '( DateTimeInterface $datetime2 [, bool $absolute , DateTimeInterface $datetime1 ]): DateInterval'\n\t},\n\tdate_format: {\n\t\tdescription: 'Returns date formatted according to given format',\n\t\tsignature: '( DateTimeInterface $object , string $format ): string'\n\t},\n\tdate_offset_get: {\n\t\tdescription: 'Returns the timezone offset',\n\t\tsignature: '( DateTimeInterface $object ): int'\n\t},\n\tdate_timestamp_get: {\n\t\tdescription: 'Gets the Unix timestamp',\n\t\tsignature: '( DateTimeInterface $object ): int'\n\t},\n\tdate_timezone_get: {\n\t\tdescription: 'Return time zone relative to given DateTime',\n\t\tsignature: '( DateTimeInterface $object ): DateTimeZone'\n\t},\n\ttimezone_open: {\n\t\tdescription: 'Creates new DateTimeZone object',\n\t\tsignature: '( string $timezone ): DateTimeZone'\n\t},\n\ttimezone_location_get: {\n\t\tdescription: 'Returns location information for a timezone',\n\t\tsignature: '( DateTimeZone $object ): array'\n\t},\n\ttimezone_name_get: {\n\t\tdescription: 'Returns the name of the timezone',\n\t\tsignature: '( DateTimeZone $object ): string'\n\t},\n\ttimezone_offset_get: {\n\t\tdescription: 'Returns the timezone offset from GMT',\n\t\tsignature: '( DateTimeInterface $datetime , DateTimeZone $object ): int'\n\t},\n\ttimezone_transitions_get: {\n\t\tdescription: 'Returns all transitions for the timezone',\n\t\tsignature: '([ int $timestamp_begin [, int $timestamp_end , DateTimeZone $object ]]): array'\n\t},\n\ttimezone_abbreviations_list: {\n\t\tdescription: 'Returns associative array containing dst, offset and the timezone name',\n\t\tsignature: '(void): array'\n\t},\n\ttimezone_identifiers_list: {\n\t\tdescription: 'Returns a numerically indexed array containing all defined timezone identifiers',\n\t\tsignature: '([ int $what = DateTimeZone::ALL [, string $country ]]): array'\n\t},\n\tcheckdate: {\n\t\tdescription: 'Validate a Gregorian date',\n\t\tsignature: '( int $month , int $day , int $year ): bool'\n\t},\n\tdate_default_timezone_get: {\n\t\tdescription: 'Gets the default timezone used by all date/time functions in a script',\n\t\tsignature: '(void): string'\n\t},\n\tdate_default_timezone_set: {\n\t\tdescription: 'Sets the default timezone used by all date/time functions in a script',\n\t\tsignature: '( string $timezone_identifier ): bool'\n\t},\n\tdate_interval_create_from_date_string: {\n\t\tdescription: 'Alias of DateInterval::createFromDateString',\n\t},\n\tdate_interval_format: {\n\t\tdescription: 'Alias of DateInterval::format',\n\t},\n\tdate_parse_from_format: {\n\t\tdescription: 'Get info about given date formatted according to the specified format',\n\t\tsignature: '( string $format , string $date ): array'\n\t},\n\tdate_parse: {\n\t\tdescription: 'Returns associative array with detailed info about given date',\n\t\tsignature: '( string $date ): array'\n\t},\n\tdate_sun_info: {\n\t\tdescription: 'Returns an array with information about sunset/sunrise and twilight begin/end',\n\t\tsignature: '( int $time , float $latitude , float $longitude ): array'\n\t},\n\tdate_sunrise: {\n\t\tdescription: 'Returns time of sunrise for a given day and location',\n\t\tsignature: '( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get(\"date.default_latitude\") [, float $longitude = ini_get(\"date.default_longitude\") [, float $zenith = ini_get(\"date.sunrise_zenith\") [, float $gmt_offset = 0 ]]]]]): mixed'\n\t},\n\tdate_sunset: {\n\t\tdescription: 'Returns time of sunset for a given day and location',\n\t\tsignature: '( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get(\"date.default_latitude\") [, float $longitude = ini_get(\"date.default_longitude\") [, float $zenith = ini_get(\"date.sunset_zenith\") [, float $gmt_offset = 0 ]]]]]): mixed'\n\t},\n\tdate: {\n\t\tdescription: 'Format a local time/date',\n\t\tsignature: '( string $format [, int $timestamp = time() ]): string'\n\t},\n\tgetdate: {\n\t\tdescription: 'Get date/time information',\n\t\tsignature: '([ int $timestamp = time() ]): array'\n\t},\n\tgettimeofday: {\n\t\tdescription: 'Get current time',\n\t\tsignature: '([ bool $return_float ]): mixed'\n\t},\n\tgmdate: {\n\t\tdescription: 'Format a GMT/UTC date/time',\n\t\tsignature: '( string $format [, int $timestamp = time() ]): string'\n\t},\n\tgmmktime: {\n\t\tdescription: 'Get Unix timestamp for a GMT date',\n\t\tsignature: '([ int $hour = gmdate(\"H\") [, int $minute = gmdate(\"i\") [, int $second = gmdate(\"s\") [, int $month = gmdate(\"n\") [, int $day = gmdate(\"j\") [, int $year = gmdate(\"Y\") [, int $is_dst = -1 ]]]]]]]): int'\n\t},\n\tgmstrftime: {\n\t\tdescription: 'Format a GMT/UTC time/date according to locale settings',\n\t\tsignature: '( string $format [, int $timestamp = time() ]): string'\n\t},\n\tidate: {\n\t\tdescription: 'Format a local time/date as integer',\n\t\tsignature: '( string $format [, int $timestamp = time() ]): int'\n\t},\n\tlocaltime: {\n\t\tdescription: 'Get the local time',\n\t\tsignature: '([ int $timestamp = time() [, bool $is_associative ]]): array'\n\t},\n\tmicrotime: {\n\t\tdescription: 'Return current Unix timestamp with microseconds',\n\t\tsignature: '([ bool $get_as_float ]): mixed'\n\t},\n\tmktime: {\n\t\tdescription: 'Get Unix timestamp for a date',\n\t\tsignature: '([ int $hour = date(\"H\") [, int $minute = date(\"i\") [, int $second = date(\"s\") [, int $month = date(\"n\") [, int $day = date(\"j\") [, int $year = date(\"Y\") [, int $is_dst = -1 ]]]]]]]): int'\n\t},\n\tstrftime: {\n\t\tdescription: 'Format a local time/date according to locale settings',\n\t\tsignature: '( string $format [, int $timestamp = time() ]): string'\n\t},\n\tstrptime: {\n\t\tdescription: 'Parse a time/date generated with strftime',\n\t\tsignature: '( string $date , string $format ): array'\n\t},\n\tstrtotime: {\n\t\tdescription: 'Parse about any English textual datetime description into a Unix timestamp',\n\t\tsignature: '( string $time [, int $now = time() ]): int'\n\t},\n\ttime: {\n\t\tdescription: 'Return current Unix timestamp',\n\t\tsignature: '(void): int'\n\t},\n\ttimezone_name_from_abbr: {\n\t\tdescription: 'Returns the timezone name from abbreviation',\n\t\tsignature: '( string $abbr [, int $gmtOffset = -1 [, int $isdst = -1 ]]): string'\n\t},\n\ttimezone_version_get: {\n\t\tdescription: 'Gets the version of the timezonedb',\n\t\tsignature: '(void): string'\n\t},\n\tchdir: {\n\t\tdescription: 'Change directory',\n\t\tsignature: '( string $directory ): bool'\n\t},\n\tchroot: {\n\t\tdescription: 'Change the root directory',\n\t\tsignature: '( string $directory ): bool'\n\t},\n\tclosedir: {\n\t\tdescription: 'Close directory handle',\n\t\tsignature: '([ resource $dir_handle ]): void'\n\t},\n\tdir: {\n\t\tdescription: 'Return an instance of the Directory class',\n\t\tsignature: '( string $directory [, resource $context ]): Directory'\n\t},\n\tgetcwd: {\n\t\tdescription: 'Gets the current working directory',\n\t\tsignature: '(void): string'\n\t},\n\topendir: {\n\t\tdescription: 'Open directory handle',\n\t\tsignature: '( string $path [, resource $context ]): resource'\n\t},\n\treaddir: {\n\t\tdescription: 'Read entry from directory handle',\n\t\tsignature: '([ resource $dir_handle ]): string'\n\t},\n\trewinddir: {\n\t\tdescription: 'Rewind directory handle',\n\t\tsignature: '([ resource $dir_handle ]): void'\n\t},\n\tscandir: {\n\t\tdescription: 'List files and directories inside the specified path',\n\t\tsignature: '( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]]): array'\n\t},\n\tfinfo_buffer: {\n\t\tdescription: 'Return information about a string buffer',\n\t\tsignature: '( resource $finfo , string $string [, int $options = FILEINFO_NONE [, resource $context ]]): string'\n\t},\n\tfinfo_close: {\n\t\tdescription: 'Close fileinfo resource',\n\t\tsignature: '( resource $finfo ): bool'\n\t},\n\tfinfo_file: {\n\t\tdescription: 'Return information about a file',\n\t\tsignature: '( resource $finfo , string $file_name [, int $options = FILEINFO_NONE [, resource $context ]]): string'\n\t},\n\tfinfo_open: {\n\t\tdescription: 'Create a new fileinfo resource',\n\t\tsignature: '([ int $options = FILEINFO_NONE [, string $magic_file ]]): resource'\n\t},\n\tfinfo_set_flags: {\n\t\tdescription: 'Set libmagic configuration options',\n\t\tsignature: '( resource $finfo , int $options ): bool'\n\t},\n\tmime_content_type: {\n\t\tdescription: 'Detect MIME Content-type for a file',\n\t\tsignature: '( string $filename ): string'\n\t},\n\tbasename: {\n\t\tdescription: 'Returns trailing name component of path',\n\t\tsignature: '( string $path [, string $suffix ]): string'\n\t},\n\tchgrp: {\n\t\tdescription: 'Changes file group',\n\t\tsignature: '( string $filename , mixed $group ): bool'\n\t},\n\tchmod: {\n\t\tdescription: 'Changes file mode',\n\t\tsignature: '( string $filename , int $mode ): bool'\n\t},\n\tchown: {\n\t\tdescription: 'Changes file owner',\n\t\tsignature: '( string $filename , mixed $user ): bool'\n\t},\n\tclearstatcache: {\n\t\tdescription: 'Clears file status cache',\n\t\tsignature: '([ bool $clear_realpath_cache [, string $filename ]]): void'\n\t},\n\tcopy: {\n\t\tdescription: 'Copies file',\n\t\tsignature: '( string $source , string $dest [, resource $context ]): bool'\n\t},\n\tdelete: {\n\t\tdescription: 'See unlink or unset',\n\t},\n\tdirname: {\n\t\tdescription: 'Returns a parent directory\\'s path',\n\t\tsignature: '( string $path [, int $levels = 1 ]): string'\n\t},\n\tdisk_free_space: {\n\t\tdescription: 'Returns available space on filesystem or disk partition',\n\t\tsignature: '( string $directory ): float'\n\t},\n\tdisk_total_space: {\n\t\tdescription: 'Returns the total size of a filesystem or disk partition',\n\t\tsignature: '( string $directory ): float'\n\t},\n\tdiskfreespace: {\n\t\tdescription: 'Alias of disk_free_space',\n\t},\n\tfclose: {\n\t\tdescription: 'Closes an open file pointer',\n\t\tsignature: '( resource $handle ): bool'\n\t},\n\tfeof: {\n\t\tdescription: 'Tests for end-of-file on a file pointer',\n\t\tsignature: '( resource $handle ): bool'\n\t},\n\tfflush: {\n\t\tdescription: 'Flushes the output to a file',\n\t\tsignature: '( resource $handle ): bool'\n\t},\n\tfgetc: {\n\t\tdescription: 'Gets character from file pointer',\n\t\tsignature: '( resource $handle ): string'\n\t},\n\tfgetcsv: {\n\t\tdescription: 'Gets line from file pointer and parse for CSV fields',\n\t\tsignature: '( resource $handle [, int $length = 0 [, string $delimiter = \",\" [, string $enclosure = \\'\"\\' [, string $escape = \"\\\\\" ]]]]): array'\n\t},\n\tfgets: {\n\t\tdescription: 'Gets line from file pointer',\n\t\tsignature: '( resource $handle [, int $length ]): string'\n\t},\n\tfgetss: {\n\t\tdescription: 'Gets line from file pointer and strip HTML tags',\n\t\tsignature: '( resource $handle [, int $length [, string $allowable_tags ]]): string'\n\t},\n\tfile_exists: {\n\t\tdescription: 'Checks whether a file or directory exists',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tfile_get_contents: {\n\t\tdescription: 'Reads entire file into a string',\n\t\tsignature: '( string $filename [, bool $use_include_path [, resource $context [, int $offset = 0 [, int $maxlen ]]]]): string'\n\t},\n\tfile_put_contents: {\n\t\tdescription: 'Write data to a file',\n\t\tsignature: '( string $filename , mixed $data [, int $flags = 0 [, resource $context ]]): int'\n\t},\n\tfile: {\n\t\tdescription: 'Reads entire file into an array',\n\t\tsignature: '( string $filename [, int $flags = 0 [, resource $context ]]): array'\n\t},\n\tfileatime: {\n\t\tdescription: 'Gets last access time of file',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfilectime: {\n\t\tdescription: 'Gets inode change time of file',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfilegroup: {\n\t\tdescription: 'Gets file group',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfileinode: {\n\t\tdescription: 'Gets file inode',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfilemtime: {\n\t\tdescription: 'Gets file modification time',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfileowner: {\n\t\tdescription: 'Gets file owner',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfileperms: {\n\t\tdescription: 'Gets file permissions',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfilesize: {\n\t\tdescription: 'Gets file size',\n\t\tsignature: '( string $filename ): int'\n\t},\n\tfiletype: {\n\t\tdescription: 'Gets file type',\n\t\tsignature: '( string $filename ): string'\n\t},\n\tflock: {\n\t\tdescription: 'Portable advisory file locking',\n\t\tsignature: '( resource $handle , int $operation [, int $wouldblock ]): bool'\n\t},\n\tfnmatch: {\n\t\tdescription: 'Match filename against a pattern',\n\t\tsignature: '( string $pattern , string $string [, int $flags = 0 ]): bool'\n\t},\n\tfopen: {\n\t\tdescription: 'Opens file or URL',\n\t\tsignature: '( string $filename , string $mode [, bool $use_include_path [, resource $context ]]): resource'\n\t},\n\tfpassthru: {\n\t\tdescription: 'Output all remaining data on a file pointer',\n\t\tsignature: '( resource $handle ): int'\n\t},\n\tfputcsv: {\n\t\tdescription: 'Format line as CSV and write to file pointer',\n\t\tsignature: '( resource $handle , array $fields [, string $delimiter = \",\" [, string $enclosure = \\'\"\\' [, string $escape_char = \"\\\\\" ]]]): int'\n\t},\n\tfputs: {\n\t\tdescription: 'Alias of fwrite',\n\t},\n\tfread: {\n\t\tdescription: 'Binary-safe file read',\n\t\tsignature: '( resource $handle , int $length ): string'\n\t},\n\tfscanf: {\n\t\tdescription: 'Parses input from a file according to a format',\n\t\tsignature: '( resource $handle , string $format [, mixed $... ]): mixed'\n\t},\n\tfseek: {\n\t\tdescription: 'Seeks on a file pointer',\n\t\tsignature: '( resource $handle , int $offset [, int $whence = SEEK_SET ]): int'\n\t},\n\tfstat: {\n\t\tdescription: 'Gets information about a file using an open file pointer',\n\t\tsignature: '( resource $handle ): array'\n\t},\n\tftell: {\n\t\tdescription: 'Returns the current position of the file read/write pointer',\n\t\tsignature: '( resource $handle ): int'\n\t},\n\tftruncate: {\n\t\tdescription: 'Truncates a file to a given length',\n\t\tsignature: '( resource $handle , int $size ): bool'\n\t},\n\tfwrite: {\n\t\tdescription: 'Binary-safe file write',\n\t\tsignature: '( resource $handle , string $string [, int $length ]): int'\n\t},\n\tglob: {\n\t\tdescription: 'Find pathnames matching a pattern',\n\t\tsignature: '( string $pattern [, int $flags = 0 ]): array'\n\t},\n\tis_dir: {\n\t\tdescription: 'Tells whether the filename is a directory',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tis_executable: {\n\t\tdescription: 'Tells whether the filename is executable',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tis_file: {\n\t\tdescription: 'Tells whether the filename is a regular file',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tis_link: {\n\t\tdescription: 'Tells whether the filename is a symbolic link',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tis_readable: {\n\t\tdescription: 'Tells whether a file exists and is readable',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tis_uploaded_file: {\n\t\tdescription: 'Tells whether the file was uploaded via HTTP POST',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tis_writable: {\n\t\tdescription: 'Tells whether the filename is writable',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tis_writeable: {\n\t\tdescription: 'Alias of is_writable',\n\t},\n\tlchgrp: {\n\t\tdescription: 'Changes group ownership of symlink',\n\t\tsignature: '( string $filename , mixed $group ): bool'\n\t},\n\tlchown: {\n\t\tdescription: 'Changes user ownership of symlink',\n\t\tsignature: '( string $filename , mixed $user ): bool'\n\t},\n\tlink: {\n\t\tdescription: 'Create a hard link',\n\t\tsignature: '( string $target , string $link ): bool'\n\t},\n\tlinkinfo: {\n\t\tdescription: 'Gets information about a link',\n\t\tsignature: '( string $path ): int'\n\t},\n\tlstat: {\n\t\tdescription: 'Gives information about a file or symbolic link',\n\t\tsignature: '( string $filename ): array'\n\t},\n\tmkdir: {\n\t\tdescription: 'Makes directory',\n\t\tsignature: '( string $pathname [, int $mode = 0777 [, bool $recursive [, resource $context ]]]): bool'\n\t},\n\tmove_uploaded_file: {\n\t\tdescription: 'Moves an uploaded file to a new location',\n\t\tsignature: '( string $filename , string $destination ): bool'\n\t},\n\tparse_ini_file: {\n\t\tdescription: 'Parse a configuration file',\n\t\tsignature: '( string $filename [, bool $process_sections [, int $scanner_mode = INI_SCANNER_NORMAL ]]): array'\n\t},\n\tparse_ini_string: {\n\t\tdescription: 'Parse a configuration string',\n\t\tsignature: '( string $ini [, bool $process_sections [, int $scanner_mode = INI_SCANNER_NORMAL ]]): array'\n\t},\n\tpathinfo: {\n\t\tdescription: 'Returns information about a file path',\n\t\tsignature: '( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ]): mixed'\n\t},\n\tpclose: {\n\t\tdescription: 'Closes process file pointer',\n\t\tsignature: '( resource $handle ): int'\n\t},\n\tpopen: {\n\t\tdescription: 'Opens process file pointer',\n\t\tsignature: '( string $command , string $mode ): resource'\n\t},\n\treadfile: {\n\t\tdescription: 'Outputs a file',\n\t\tsignature: '( string $filename [, bool $use_include_path [, resource $context ]]): int'\n\t},\n\treadlink: {\n\t\tdescription: 'Returns the target of a symbolic link',\n\t\tsignature: '( string $path ): string'\n\t},\n\trealpath_cache_get: {\n\t\tdescription: 'Get realpath cache entries',\n\t\tsignature: '(void): array'\n\t},\n\trealpath_cache_size: {\n\t\tdescription: 'Get realpath cache size',\n\t\tsignature: '(void): int'\n\t},\n\trealpath: {\n\t\tdescription: 'Returns canonicalized absolute pathname',\n\t\tsignature: '( string $path ): string'\n\t},\n\trename: {\n\t\tdescription: 'Renames a file or directory',\n\t\tsignature: '( string $oldname , string $newname [, resource $context ]): bool'\n\t},\n\trewind: {\n\t\tdescription: 'Rewind the position of a file pointer',\n\t\tsignature: '( resource $handle ): bool'\n\t},\n\trmdir: {\n\t\tdescription: 'Removes directory',\n\t\tsignature: '( string $dirname [, resource $context ]): bool'\n\t},\n\tset_file_buffer: {\n\t\tdescription: 'Alias of stream_set_write_buffer',\n\t},\n\tstat: {\n\t\tdescription: 'Gives information about a file',\n\t\tsignature: '( string $filename ): array'\n\t},\n\tsymlink: {\n\t\tdescription: 'Creates a symbolic link',\n\t\tsignature: '( string $target , string $link ): bool'\n\t},\n\ttempnam: {\n\t\tdescription: 'Create file with unique file name',\n\t\tsignature: '( string $dir , string $prefix ): string'\n\t},\n\ttmpfile: {\n\t\tdescription: 'Creates a temporary file',\n\t\tsignature: '(void): resource'\n\t},\n\ttouch: {\n\t\tdescription: 'Sets access and modification time of file',\n\t\tsignature: '( string $filename [, int $time = time() [, int $atime ]]): bool'\n\t},\n\tumask: {\n\t\tdescription: 'Changes the current umask',\n\t\tsignature: '([ int $mask ]): int'\n\t},\n\tunlink: {\n\t\tdescription: 'Deletes a file',\n\t\tsignature: '( string $filename [, resource $context ]): bool'\n\t},\n\ticonv_get_encoding: {\n\t\tdescription: 'Retrieve internal configuration variables of iconv extension',\n\t\tsignature: '([ string $type = \"all\" ]): mixed'\n\t},\n\ticonv_mime_decode_headers: {\n\t\tdescription: 'Decodes multiple MIME header fields at once',\n\t\tsignature: '( string $encoded_headers [, int $mode = 0 [, string $charset = ini_get(\"iconv.internal_encoding\") ]]): array'\n\t},\n\ticonv_mime_decode: {\n\t\tdescription: 'Decodes a MIME header field',\n\t\tsignature: '( string $encoded_header [, int $mode = 0 [, string $charset = ini_get(\"iconv.internal_encoding\") ]]): string'\n\t},\n\ticonv_mime_encode: {\n\t\tdescription: 'Composes a MIME header field',\n\t\tsignature: '( string $field_name , string $field_value [, array $preferences ]): string'\n\t},\n\ticonv_set_encoding: {\n\t\tdescription: 'Set current setting for character encoding conversion',\n\t\tsignature: '( string $type , string $charset ): bool'\n\t},\n\ticonv_strlen: {\n\t\tdescription: 'Returns the character count of string',\n\t\tsignature: '( string $str [, string $charset = ini_get(\"iconv.internal_encoding\") ]): int'\n\t},\n\ticonv_strpos: {\n\t\tdescription: 'Finds position of first occurrence of a needle within a haystack',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 [, string $charset = ini_get(\"iconv.internal_encoding\") ]]): int'\n\t},\n\ticonv_strrpos: {\n\t\tdescription: 'Finds the last occurrence of a needle within a haystack',\n\t\tsignature: '( string $haystack , string $needle [, string $charset = ini_get(\"iconv.internal_encoding\") ]): int'\n\t},\n\ticonv_substr: {\n\t\tdescription: 'Cut out part of a string',\n\t\tsignature: '( string $str , int $offset [, int $length = iconv_strlen($str, $charset) [, string $charset = ini_get(\"iconv.internal_encoding\") ]]): string'\n\t},\n\ticonv: {\n\t\tdescription: 'Convert string to requested character encoding',\n\t\tsignature: '( string $in_charset , string $out_charset , string $str ): string'\n\t},\n\tob_iconv_handler: {\n\t\tdescription: 'Convert character encoding as output buffer handler',\n\t\tsignature: '( string $contents , int $status ): string'\n\t},\n\tcollator_asort: {\n\t\tdescription: 'Sort array maintaining index association',\n\t\tsignature: '( array $arr [, int $sort_flag , Collator $coll ]): bool'\n\t},\n\tcollator_compare: {\n\t\tdescription: 'Compare two Unicode strings',\n\t\tsignature: '( string $str1 , string $str2 , Collator $coll ): int'\n\t},\n\tcollator_create: {\n\t\tdescription: 'Create a collator',\n\t\tsignature: '( string $locale ): Collator'\n\t},\n\tcollator_get_attribute: {\n\t\tdescription: 'Get collation attribute value',\n\t\tsignature: '( int $attr , Collator $coll ): int'\n\t},\n\tcollator_get_error_code: {\n\t\tdescription: 'Get collator\\'s last error code',\n\t\tsignature: '( Collator $coll ): int'\n\t},\n\tcollator_get_error_message: {\n\t\tdescription: 'Get text for collator\\'s last error code',\n\t\tsignature: '( Collator $coll ): string'\n\t},\n\tcollator_get_locale: {\n\t\tdescription: 'Get the locale name of the collator',\n\t\tsignature: '( int $type , Collator $coll ): string'\n\t},\n\tcollator_get_sort_key: {\n\t\tdescription: 'Get sorting key for a string',\n\t\tsignature: '( string $str , Collator $coll ): string'\n\t},\n\tcollator_get_strength: {\n\t\tdescription: 'Get current collation strength',\n\t\tsignature: '( Collator $coll ): int'\n\t},\n\tcollator_set_attribute: {\n\t\tdescription: 'Set collation attribute',\n\t\tsignature: '( int $attr , int $val , Collator $coll ): bool'\n\t},\n\tcollator_set_strength: {\n\t\tdescription: 'Set collation strength',\n\t\tsignature: '( int $strength , Collator $coll ): bool'\n\t},\n\tcollator_sort_with_sort_keys: {\n\t\tdescription: 'Sort array using specified collator and sort keys',\n\t\tsignature: '( array $arr , Collator $coll ): bool'\n\t},\n\tcollator_sort: {\n\t\tdescription: 'Sort array using specified collator',\n\t\tsignature: '( array $arr [, int $sort_flag , Collator $coll ]): bool'\n\t},\n\tnumfmt_create: {\n\t\tdescription: 'Create a number formatter',\n\t\tsignature: '( string $locale , int $style [, string $pattern ]): NumberFormatter'\n\t},\n\tnumfmt_format_currency: {\n\t\tdescription: 'Format a currency value',\n\t\tsignature: '( float $value , string $currency , NumberFormatter $fmt ): string'\n\t},\n\tnumfmt_format: {\n\t\tdescription: 'Format a number',\n\t\tsignature: '( number $value [, int $type , NumberFormatter $fmt ]): string'\n\t},\n\tnumfmt_get_attribute: {\n\t\tdescription: 'Get an attribute',\n\t\tsignature: '( int $attr , NumberFormatter $fmt ): int'\n\t},\n\tnumfmt_get_error_code: {\n\t\tdescription: 'Get formatter\\'s last error code',\n\t\tsignature: '( NumberFormatter $fmt ): int'\n\t},\n\tnumfmt_get_error_message: {\n\t\tdescription: 'Get formatter\\'s last error message',\n\t\tsignature: '( NumberFormatter $fmt ): string'\n\t},\n\tnumfmt_get_locale: {\n\t\tdescription: 'Get formatter locale',\n\t\tsignature: '([ int $type , NumberFormatter $fmt ]): string'\n\t},\n\tnumfmt_get_pattern: {\n\t\tdescription: 'Get formatter pattern',\n\t\tsignature: '( NumberFormatter $fmt ): string'\n\t},\n\tnumfmt_get_symbol: {\n\t\tdescription: 'Get a symbol value',\n\t\tsignature: '( int $attr , NumberFormatter $fmt ): string'\n\t},\n\tnumfmt_get_text_attribute: {\n\t\tdescription: 'Get a text attribute',\n\t\tsignature: '( int $attr , NumberFormatter $fmt ): string'\n\t},\n\tnumfmt_parse_currency: {\n\t\tdescription: 'Parse a currency number',\n\t\tsignature: '( string $value , string $currency [, int $position , NumberFormatter $fmt ]): float'\n\t},\n\tnumfmt_parse: {\n\t\tdescription: 'Parse a number',\n\t\tsignature: '( string $value [, int $type [, int $position , NumberFormatter $fmt ]]): mixed'\n\t},\n\tnumfmt_set_attribute: {\n\t\tdescription: 'Set an attribute',\n\t\tsignature: '( int $attr , int $value , NumberFormatter $fmt ): bool'\n\t},\n\tnumfmt_set_pattern: {\n\t\tdescription: 'Set formatter pattern',\n\t\tsignature: '( string $pattern , NumberFormatter $fmt ): bool'\n\t},\n\tnumfmt_set_symbol: {\n\t\tdescription: 'Set a symbol value',\n\t\tsignature: '( int $attr , string $value , NumberFormatter $fmt ): bool'\n\t},\n\tnumfmt_set_text_attribute: {\n\t\tdescription: 'Set a text attribute',\n\t\tsignature: '( int $attr , string $value , NumberFormatter $fmt ): bool'\n\t},\n\tlocale_accept_from_http: {\n\t\tdescription: 'Tries to find out best available locale based on HTTP \"Accept-Language\" header',\n\t\tsignature: '( string $header ): string'\n\t},\n\tlocale_canonicalize: {\n\t\tdescription: 'Canonicalize the locale string',\n\t\tsignature: '( string $locale ): string'\n\t},\n\tlocale_compose: {\n\t\tdescription: 'Returns a correctly ordered and delimited locale ID',\n\t\tsignature: '( array $subtags ): string'\n\t},\n\tlocale_filter_matches: {\n\t\tdescription: 'Checks if a language tag filter matches with locale',\n\t\tsignature: '( string $langtag , string $locale [, bool $canonicalize ]): bool'\n\t},\n\tlocale_get_all_variants: {\n\t\tdescription: 'Gets the variants for the input locale',\n\t\tsignature: '( string $locale ): array'\n\t},\n\tlocale_get_default: {\n\t\tdescription: 'Gets the default locale value from the INTL global \\'default_locale\\'',\n\t\tsignature: '(void): string'\n\t},\n\tlocale_get_display_language: {\n\t\tdescription: 'Returns an appropriately localized display name for language of the inputlocale',\n\t\tsignature: '( string $locale [, string $in_locale ]): string'\n\t},\n\tlocale_get_display_name: {\n\t\tdescription: 'Returns an appropriately localized display name for the input locale',\n\t\tsignature: '( string $locale [, string $in_locale ]): string'\n\t},\n\tlocale_get_display_region: {\n\t\tdescription: 'Returns an appropriately localized display name for region of the input locale',\n\t\tsignature: '( string $locale [, string $in_locale ]): string'\n\t},\n\tlocale_get_display_script: {\n\t\tdescription: 'Returns an appropriately localized display name for script of the input locale',\n\t\tsignature: '( string $locale [, string $in_locale ]): string'\n\t},\n\tlocale_get_display_variant: {\n\t\tdescription: 'Returns an appropriately localized display name for variants of the input locale',\n\t\tsignature: '( string $locale [, string $in_locale ]): string'\n\t},\n\tlocale_get_keywords: {\n\t\tdescription: 'Gets the keywords for the input locale',\n\t\tsignature: '( string $locale ): array'\n\t},\n\tlocale_get_primary_language: {\n\t\tdescription: 'Gets the primary language for the input locale',\n\t\tsignature: '( string $locale ): string'\n\t},\n\tlocale_get_region: {\n\t\tdescription: 'Gets the region for the input locale',\n\t\tsignature: '( string $locale ): string'\n\t},\n\tlocale_get_script: {\n\t\tdescription: 'Gets the script for the input locale',\n\t\tsignature: '( string $locale ): string'\n\t},\n\tlocale_lookup: {\n\t\tdescription: 'Searches the language tag list for the best match to the language',\n\t\tsignature: '( array $langtag , string $locale [, bool $canonicalize [, string $default ]]): string'\n\t},\n\tlocale_parse: {\n\t\tdescription: 'Returns a key-value array of locale ID subtag elements',\n\t\tsignature: '( string $locale ): array'\n\t},\n\tlocale_set_default: {\n\t\tdescription: 'Sets the default runtime locale',\n\t\tsignature: '( string $locale ): bool'\n\t},\n\tnormalizer_get_raw_decomposition: {\n\t\tdescription: 'Gets the Decomposition_Mapping property for the given UTF-8 encoded code point',\n\t\tsignature: '( string $input ): string'\n\t},\n\tnormalizer_is_normalized: {\n\t\tdescription: 'Checks if the provided string is already in the specified normalization   form',\n\t\tsignature: '( string $input [, int $form = Normalizer::FORM_C ]): bool'\n\t},\n\tnormalizer_normalize: {\n\t\tdescription: 'Normalizes the input provided and returns the normalized string',\n\t\tsignature: '( string $input [, int $form = Normalizer::FORM_C ]): string'\n\t},\n\tmsgfmt_create: {\n\t\tdescription: 'Constructs a new Message Formatter',\n\t\tsignature: '( string $locale , string $pattern ): MessageFormatter'\n\t},\n\tmsgfmt_format_message: {\n\t\tdescription: 'Quick format message',\n\t\tsignature: '( string $locale , string $pattern , array $args ): string'\n\t},\n\tmsgfmt_format: {\n\t\tdescription: 'Format the message',\n\t\tsignature: '( array $args , MessageFormatter $fmt ): string'\n\t},\n\tmsgfmt_get_error_code: {\n\t\tdescription: 'Get the error code from last operation',\n\t\tsignature: '( MessageFormatter $fmt ): int'\n\t},\n\tmsgfmt_get_error_message: {\n\t\tdescription: 'Get the error text from the last operation',\n\t\tsignature: '( MessageFormatter $fmt ): string'\n\t},\n\tmsgfmt_get_locale: {\n\t\tdescription: 'Get the locale for which the formatter was created',\n\t\tsignature: '( NumberFormatter $formatter ): string'\n\t},\n\tmsgfmt_get_pattern: {\n\t\tdescription: 'Get the pattern used by the formatter',\n\t\tsignature: '( MessageFormatter $fmt ): string'\n\t},\n\tmsgfmt_parse_message: {\n\t\tdescription: 'Quick parse input string',\n\t\tsignature: '( string $locale , string $pattern , string $source , string $value ): array'\n\t},\n\tmsgfmt_parse: {\n\t\tdescription: 'Parse input string according to pattern',\n\t\tsignature: '( string $value , MessageFormatter $fmt ): array'\n\t},\n\tmsgfmt_set_pattern: {\n\t\tdescription: 'Set the pattern used by the formatter',\n\t\tsignature: '( string $pattern , MessageFormatter $fmt ): bool'\n\t},\n\tintlcal_get_error_code: {\n\t\tdescription: 'Get last error code on the object',\n\t\tsignature: '( IntlCalendar $calendar ): int'\n\t},\n\tintlcal_get_error_message: {\n\t\tdescription: 'Get last error message on the object',\n\t\tsignature: '( IntlCalendar $calendar ): string'\n\t},\n\tintltz_get_error_code: {\n\t\tdescription: 'Get last error code on the object',\n\t\tsignature: '(void): int'\n\t},\n\tintltz_get_error_message: {\n\t\tdescription: 'Get last error message on the object',\n\t\tsignature: '(void): string'\n\t},\n\tdatefmt_create: {\n\t\tdescription: 'Create a date formatter',\n\t\tsignature: '( string $locale , int $datetype , int $timetype [, mixed $timezone = NULL [, mixed $calendar = NULL [, string $pattern = \"\" ]]]): IntlDateFormatter'\n\t},\n\tdatefmt_format: {\n\t\tdescription: 'Format the date/time value as a string',\n\t\tsignature: '( mixed $value , IntlDateFormatter $fmt ): string'\n\t},\n\tdatefmt_format_object: {\n\t\tdescription: 'Formats an object',\n\t\tsignature: '( object $object [, mixed $format = NULL [, string $locale = NULL ]]): string'\n\t},\n\tdatefmt_get_calendar: {\n\t\tdescription: 'Get the calendar type used for the IntlDateFormatter',\n\t\tsignature: '( IntlDateFormatter $fmt ): int'\n\t},\n\tdatefmt_get_datetype: {\n\t\tdescription: 'Get the datetype used for the IntlDateFormatter',\n\t\tsignature: '( IntlDateFormatter $fmt ): int'\n\t},\n\tdatefmt_get_error_code: {\n\t\tdescription: 'Get the error code from last operation',\n\t\tsignature: '( IntlDateFormatter $fmt ): int'\n\t},\n\tdatefmt_get_error_message: {\n\t\tdescription: 'Get the error text from the last operation',\n\t\tsignature: '( IntlDateFormatter $fmt ): string'\n\t},\n\tdatefmt_get_locale: {\n\t\tdescription: 'Get the locale used by formatter',\n\t\tsignature: '([ int $which , IntlDateFormatter $fmt ]): string'\n\t},\n\tdatefmt_get_pattern: {\n\t\tdescription: 'Get the pattern used for the IntlDateFormatter',\n\t\tsignature: '( IntlDateFormatter $fmt ): string'\n\t},\n\tdatefmt_get_timetype: {\n\t\tdescription: 'Get the timetype used for the IntlDateFormatter',\n\t\tsignature: '( IntlDateFormatter $fmt ): int'\n\t},\n\tdatefmt_get_timezone_id: {\n\t\tdescription: 'Get the timezone-id used for the IntlDateFormatter',\n\t\tsignature: '( IntlDateFormatter $fmt ): string'\n\t},\n\tdatefmt_get_calendar_object: {\n\t\tdescription: 'Get copy of formatterʼs calendar object',\n\t\tsignature: '(void): IntlCalendar'\n\t},\n\tdatefmt_get_timezone: {\n\t\tdescription: 'Get formatterʼs timezone',\n\t\tsignature: '(void): IntlTimeZone'\n\t},\n\tdatefmt_is_lenient: {\n\t\tdescription: 'Get the lenient used for the IntlDateFormatter',\n\t\tsignature: '( IntlDateFormatter $fmt ): bool'\n\t},\n\tdatefmt_localtime: {\n\t\tdescription: 'Parse string to a field-based time value',\n\t\tsignature: '( string $value [, int $position , IntlDateFormatter $fmt ]): array'\n\t},\n\tdatefmt_parse: {\n\t\tdescription: 'Parse string to a timestamp value',\n\t\tsignature: '( string $value [, int $position , IntlDateFormatter $fmt ]): int'\n\t},\n\tdatefmt_set_calendar: {\n\t\tdescription: 'Sets the calendar type used by the formatter',\n\t\tsignature: '( mixed $which , IntlDateFormatter $fmt ): bool'\n\t},\n\tdatefmt_set_lenient: {\n\t\tdescription: 'Set the leniency of the parser',\n\t\tsignature: '( bool $lenient , IntlDateFormatter $fmt ): bool'\n\t},\n\tdatefmt_set_pattern: {\n\t\tdescription: 'Set the pattern used for the IntlDateFormatter',\n\t\tsignature: '( string $pattern , IntlDateFormatter $fmt ): bool'\n\t},\n\tdatefmt_set_timezone_id: {\n\t\tdescription: 'Sets the time zone to use',\n\t\tsignature: '( string $zone , IntlDateFormatter $fmt ): bool'\n\t},\n\tdatefmt_set_timezone: {\n\t\tdescription: 'Sets formatterʼs timezone',\n\t\tsignature: '( mixed $zone , IntlDateFormatter $fmt ): bool'\n\t},\n\tresourcebundle_count: {\n\t\tdescription: 'Get number of elements in the bundle',\n\t\tsignature: '( ResourceBundle $r ): int'\n\t},\n\tresourcebundle_create: {\n\t\tdescription: 'Create a resource bundle',\n\t\tsignature: '( string $locale , string $bundlename [, bool $fallback ]): ResourceBundle'\n\t},\n\tresourcebundle_get_error_code: {\n\t\tdescription: 'Get bundle\\'s last error code',\n\t\tsignature: '( ResourceBundle $r ): int'\n\t},\n\tresourcebundle_get_error_message: {\n\t\tdescription: 'Get bundle\\'s last error message',\n\t\tsignature: '( ResourceBundle $r ): string'\n\t},\n\tresourcebundle_get: {\n\t\tdescription: 'Get data from the bundle',\n\t\tsignature: '( string|int $index [, bool $fallback , ResourceBundle $r ]): mixed'\n\t},\n\tresourcebundle_locales: {\n\t\tdescription: 'Get supported locales',\n\t\tsignature: '( string $bundlename ): array'\n\t},\n\ttransliterator_create: {\n\t\tdescription: 'Create a transliterator',\n\t\tsignature: '( string $id [, int $direction ]): Transliterator'\n\t},\n\ttransliterator_create_from_rules: {\n\t\tdescription: 'Create transliterator from rules',\n\t\tsignature: '( string $rules [, int $direction , string $id ]): Transliterator'\n\t},\n\ttransliterator_create_inverse: {\n\t\tdescription: 'Create an inverse transliterator',\n\t\tsignature: '(void): Transliterator'\n\t},\n\ttransliterator_get_error_code: {\n\t\tdescription: 'Get last error code',\n\t\tsignature: '(void): int'\n\t},\n\ttransliterator_get_error_message: {\n\t\tdescription: 'Get last error message',\n\t\tsignature: '(void): string'\n\t},\n\ttransliterator_list_ids: {\n\t\tdescription: 'Get transliterator IDs',\n\t\tsignature: '(void): array'\n\t},\n\ttransliterator_transliterate: {\n\t\tdescription: 'Transliterate a string',\n\t\tsignature: '( string $subject [, int $start [, int $end , mixed $transliterator ]]): string'\n\t},\n\tintl_get_error_code: {\n\t\tdescription: 'Get the last error code',\n\t\tsignature: '(void): int'\n\t},\n\tintl_get_error_message: {\n\t\tdescription: 'Get description of the last error',\n\t\tsignature: '(void): string'\n\t},\n\tgrapheme_extract: {\n\t\tdescription: 'Function to extract a sequence of default grapheme clusters from a text buffer, which must be encoded in UTF-8',\n\t\tsignature: '( string $haystack , int $size [, int $extract_type [, int $start = 0 [, int $next ]]]): string'\n\t},\n\tgrapheme_stripos: {\n\t\tdescription: 'Find position (in grapheme units) of first occurrence of a case-insensitive string',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 ]): int'\n\t},\n\tgrapheme_stristr: {\n\t\tdescription: 'Returns part of haystack string from the first occurrence of case-insensitive needle to the end of haystack',\n\t\tsignature: '( string $haystack , string $needle [, bool $before_needle ]): string'\n\t},\n\tgrapheme_strlen: {\n\t\tdescription: 'Get string length in grapheme units',\n\t\tsignature: '( string $input ): int'\n\t},\n\tgrapheme_strpos: {\n\t\tdescription: 'Find position (in grapheme units) of first occurrence of a string',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 ]): int'\n\t},\n\tgrapheme_strripos: {\n\t\tdescription: 'Find position (in grapheme units) of last occurrence of a case-insensitive string',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 ]): int'\n\t},\n\tgrapheme_strrpos: {\n\t\tdescription: 'Find position (in grapheme units) of last occurrence of a string',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 ]): int'\n\t},\n\tgrapheme_strstr: {\n\t\tdescription: 'Returns part of haystack string from the first occurrence of needle to the end of haystack',\n\t\tsignature: '( string $haystack , string $needle [, bool $before_needle ]): string'\n\t},\n\tgrapheme_substr: {\n\t\tdescription: 'Return part of a string',\n\t\tsignature: '( string $string , int $start [, int $length ]): string'\n\t},\n\tidn_to_ascii: {\n\t\tdescription: 'Convert domain name to IDNA ASCII form',\n\t\tsignature: '( string $domain [, int $options = IDNA_DEFAULT [, int $variant = INTL_IDNA_VARIANT_UTS46 [, array $idna_info ]]]): string'\n\t},\n\tidn_to_utf8: {\n\t\tdescription: 'Convert domain name from IDNA ASCII to Unicode',\n\t\tsignature: '( string $domain [, int $options = IDNA_DEFAULT [, int $variant = INTL_IDNA_VARIANT_UTS46 [, array $idna_info ]]]): string'\n\t},\n\tintl_error_name: {\n\t\tdescription: 'Get symbolic name for a given error code',\n\t\tsignature: '( int $error_code ): string'\n\t},\n\tintl_is_failure: {\n\t\tdescription: 'Check whether the given error code indicates failure',\n\t\tsignature: '( int $error_code ): bool'\n\t},\n\tmb_check_encoding: {\n\t\tdescription: 'Check if the string is valid for the specified encoding',\n\t\tsignature: '([ string $var [, string $encoding = mb_internal_encoding() ]]): bool'\n\t},\n\tmb_chr: {\n\t\tdescription: 'Get a specific character',\n\t\tsignature: '( int $cp [, string $encoding ]): string'\n\t},\n\tmb_convert_case: {\n\t\tdescription: 'Perform case folding on a string',\n\t\tsignature: '( string $str , int $mode [, string $encoding = mb_internal_encoding() ]): string'\n\t},\n\tmb_convert_encoding: {\n\t\tdescription: 'Convert character encoding',\n\t\tsignature: '( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ]): string'\n\t},\n\tmb_convert_kana: {\n\t\tdescription: 'Convert \"kana\" one from another (\"zen-kaku\", \"han-kaku\" and more)',\n\t\tsignature: '( string $str [, string $option = \"KV\" [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_convert_variables: {\n\t\tdescription: 'Convert character code in variable(s)',\n\t\tsignature: '( string $to_encoding , mixed $from_encoding , mixed $vars [, mixed $... ]): string'\n\t},\n\tmb_decode_mimeheader: {\n\t\tdescription: 'Decode string in MIME header field',\n\t\tsignature: '( string $str ): string'\n\t},\n\tmb_decode_numericentity: {\n\t\tdescription: 'Decode HTML numeric string reference to character',\n\t\tsignature: '( string $str , array $convmap [, string $encoding = mb_internal_encoding() [, bool $is_hex ]]): string'\n\t},\n\tmb_detect_encoding: {\n\t\tdescription: 'Detect character encoding',\n\t\tsignature: '( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict ]]): string'\n\t},\n\tmb_detect_order: {\n\t\tdescription: 'Set/Get character encoding detection order',\n\t\tsignature: '([ mixed $encoding_list = mb_detect_order() ]): mixed'\n\t},\n\tmb_encode_mimeheader: {\n\t\tdescription: 'Encode string for MIME header',\n\t\tsignature: '( string $str [, string $charset = determined by mb_language() [, string $transfer_encoding = \"B\" [, string $linefeed = \"\\r\\n\" [, int $indent = 0 ]]]]): string'\n\t},\n\tmb_encode_numericentity: {\n\t\tdescription: 'Encode character to HTML numeric string reference',\n\t\tsignature: '( string $str , array $convmap [, string $encoding = mb_internal_encoding() [, bool $is_hex ]]): string'\n\t},\n\tmb_encoding_aliases: {\n\t\tdescription: 'Get aliases of a known encoding type',\n\t\tsignature: '( string $encoding ): array'\n\t},\n\tmb_ereg_match: {\n\t\tdescription: 'Regular expression match for multibyte string',\n\t\tsignature: '( string $pattern , string $string [, string $option = \"msr\" ]): bool'\n\t},\n\tmb_ereg_replace_callback: {\n\t\tdescription: 'Perform a regular expression search and replace with multibyte support using a callback',\n\t\tsignature: '( string $pattern , callable $callback , string $string [, string $option = \"msr\" ]): string'\n\t},\n\tmb_ereg_replace: {\n\t\tdescription: 'Replace regular expression with multibyte support',\n\t\tsignature: '( string $pattern , string $replacement , string $string [, string $option = \"msr\" ]): string'\n\t},\n\tmb_ereg_search_getpos: {\n\t\tdescription: 'Returns start point for next regular expression match',\n\t\tsignature: '(void): int'\n\t},\n\tmb_ereg_search_getregs: {\n\t\tdescription: 'Retrieve the result from the last multibyte regular expression match',\n\t\tsignature: '(void): array'\n\t},\n\tmb_ereg_search_init: {\n\t\tdescription: 'Setup string and regular expression for a multibyte regular expression match',\n\t\tsignature: '( string $string [, string $pattern [, string $option = \"msr\" ]]): bool'\n\t},\n\tmb_ereg_search_pos: {\n\t\tdescription: 'Returns position and length of a matched part of the multibyte regular expression for a predefined multibyte string',\n\t\tsignature: '([ string $pattern [, string $option = \"ms\" ]]): array'\n\t},\n\tmb_ereg_search_regs: {\n\t\tdescription: 'Returns the matched part of a multibyte regular expression',\n\t\tsignature: '([ string $pattern [, string $option = \"ms\" ]]): array'\n\t},\n\tmb_ereg_search_setpos: {\n\t\tdescription: 'Set start point of next regular expression match',\n\t\tsignature: '( int $position ): bool'\n\t},\n\tmb_ereg_search: {\n\t\tdescription: 'Multibyte regular expression match for predefined multibyte string',\n\t\tsignature: '([ string $pattern [, string $option = \"ms\" ]]): bool'\n\t},\n\tmb_ereg: {\n\t\tdescription: 'Regular expression match with multibyte support',\n\t\tsignature: '( string $pattern , string $string [, array $regs ]): int'\n\t},\n\tmb_eregi_replace: {\n\t\tdescription: 'Replace regular expression with multibyte support ignoring case',\n\t\tsignature: '( string $pattern , string $replace , string $string [, string $option = \"msri\" ]): string'\n\t},\n\tmb_eregi: {\n\t\tdescription: 'Regular expression match ignoring case with multibyte support',\n\t\tsignature: '( string $pattern , string $string [, array $regs ]): int'\n\t},\n\tmb_get_info: {\n\t\tdescription: 'Get internal settings of mbstring',\n\t\tsignature: '([ string $type = \"all\" ]): mixed'\n\t},\n\tmb_http_input: {\n\t\tdescription: 'Detect HTTP input character encoding',\n\t\tsignature: '([ string $type = \"\" ]): mixed'\n\t},\n\tmb_http_output: {\n\t\tdescription: 'Set/Get HTTP output character encoding',\n\t\tsignature: '([ string $encoding = mb_http_output() ]): mixed'\n\t},\n\tmb_internal_encoding: {\n\t\tdescription: 'Set/Get internal character encoding',\n\t\tsignature: '([ string $encoding = mb_internal_encoding() ]): mixed'\n\t},\n\tmb_language: {\n\t\tdescription: 'Set/Get current language',\n\t\tsignature: '([ string $language = mb_language() ]): mixed'\n\t},\n\tmb_list_encodings: {\n\t\tdescription: 'Returns an array of all supported encodings',\n\t\tsignature: '(void): array'\n\t},\n\tmb_ord: {\n\t\tdescription: 'Get code point of character',\n\t\tsignature: '( string $str [, string $encoding ]): int'\n\t},\n\tmb_output_handler: {\n\t\tdescription: 'Callback function converts character encoding in output buffer',\n\t\tsignature: '( string $contents , int $status ): string'\n\t},\n\tmb_parse_str: {\n\t\tdescription: 'Parse GET/POST/COOKIE data and set global variable',\n\t\tsignature: '( string $encoded_string [, array $result ]): array'\n\t},\n\tmb_preferred_mime_name: {\n\t\tdescription: 'Get MIME charset string',\n\t\tsignature: '( string $encoding ): string'\n\t},\n\tmb_regex_encoding: {\n\t\tdescription: 'Set/Get character encoding for multibyte regex',\n\t\tsignature: '([ string $encoding = mb_regex_encoding() ]): mixed'\n\t},\n\tmb_regex_set_options: {\n\t\tdescription: 'Set/Get the default options for mbregex functions',\n\t\tsignature: '([ string $options = mb_regex_set_options() ]): string'\n\t},\n\tmb_scrub: {\n\t\tdescription: 'Description',\n\t\tsignature: '( string $str [, string $encoding ]): string'\n\t},\n\tmb_send_mail: {\n\t\tdescription: 'Send encoded mail',\n\t\tsignature: '( string $to , string $subject , string $message [, mixed $additional_headers [, string $additional_parameter ]]): bool'\n\t},\n\tmb_split: {\n\t\tdescription: 'Split multibyte string using regular expression',\n\t\tsignature: '( string $pattern , string $string [, int $limit = -1 ]): array'\n\t},\n\tmb_strcut: {\n\t\tdescription: 'Get part of string',\n\t\tsignature: '( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_strimwidth: {\n\t\tdescription: 'Get truncated string with specified width',\n\t\tsignature: '( string $str , int $start , int $width [, string $trimmarker = \"\" [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_stripos: {\n\t\tdescription: 'Finds position of first occurrence of a string within another, case insensitive',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]]): int'\n\t},\n\tmb_stristr: {\n\t\tdescription: 'Finds first occurrence of a string within another, case insensitive',\n\t\tsignature: '( string $haystack , string $needle [, bool $before_needle [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_strlen: {\n\t\tdescription: 'Get string length',\n\t\tsignature: '( string $str [, string $encoding = mb_internal_encoding() ]): string'\n\t},\n\tmb_strpos: {\n\t\tdescription: 'Find position of first occurrence of string in a string',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_strrchr: {\n\t\tdescription: 'Finds the last occurrence of a character in a string within another',\n\t\tsignature: '( string $haystack , string $needle [, bool $part [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_strrichr: {\n\t\tdescription: 'Finds the last occurrence of a character in a string within another, case insensitive',\n\t\tsignature: '( string $haystack , string $needle [, bool $part [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_strripos: {\n\t\tdescription: 'Finds position of last occurrence of a string within another, case insensitive',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]]): int'\n\t},\n\tmb_strrpos: {\n\t\tdescription: 'Find position of last occurrence of a string in a string',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]]): int'\n\t},\n\tmb_strstr: {\n\t\tdescription: 'Finds first occurrence of a string within another',\n\t\tsignature: '( string $haystack , string $needle [, bool $before_needle [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\tmb_strtolower: {\n\t\tdescription: 'Make a string lowercase',\n\t\tsignature: '( string $str [, string $encoding = mb_internal_encoding() ]): string'\n\t},\n\tmb_strtoupper: {\n\t\tdescription: 'Make a string uppercase',\n\t\tsignature: '( string $str [, string $encoding = mb_internal_encoding() ]): string'\n\t},\n\tmb_strwidth: {\n\t\tdescription: 'Return width of string',\n\t\tsignature: '( string $str [, string $encoding = mb_internal_encoding() ]): string'\n\t},\n\tmb_substitute_character: {\n\t\tdescription: 'Set/Get substitution character',\n\t\tsignature: '([ mixed $substchar = mb_substitute_character() ]): integer'\n\t},\n\tmb_substr_count: {\n\t\tdescription: 'Count the number of substring occurrences',\n\t\tsignature: '( string $haystack , string $needle [, string $encoding = mb_internal_encoding() ]): string'\n\t},\n\tmb_substr: {\n\t\tdescription: 'Get part of string',\n\t\tsignature: '( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]]): string'\n\t},\n\texif_imagetype: {\n\t\tdescription: 'Determine the type of an image',\n\t\tsignature: '( string $filename ): int'\n\t},\n\texif_read_data: {\n\t\tdescription: 'Reads the EXIF headers from an image file',\n\t\tsignature: '( mixed $stream [, string $sections [, bool $arrays [, bool $thumbnail ]]]): array'\n\t},\n\texif_tagname: {\n\t\tdescription: 'Get the header name for an index',\n\t\tsignature: '( int $index ): string'\n\t},\n\texif_thumbnail: {\n\t\tdescription: 'Retrieve the embedded thumbnail of an image',\n\t\tsignature: '( mixed $stream [, int $width [, int $height [, int $imagetype ]]]): string'\n\t},\n\tread_exif_data: {\n\t\tdescription: 'Alias of exif_read_data',\n\t},\n\tezmlm_hash: {\n\t\tdescription: 'Calculate the hash value needed by EZMLM',\n\t\tsignature: '( string $addr ): int'\n\t},\n\tmail: {\n\t\tdescription: 'Send mail',\n\t\tsignature: '( string $to , string $subject , string $message [, mixed $additional_headers [, string $additional_parameters ]]): bool'\n\t},\n\tbcadd: {\n\t\tdescription: 'Add two arbitrary precision numbers',\n\t\tsignature: '( string $left_operand , string $right_operand [, int $scale = 0 ]): string'\n\t},\n\tbccomp: {\n\t\tdescription: 'Compare two arbitrary precision numbers',\n\t\tsignature: '( string $left_operand , string $right_operand [, int $scale = 0 ]): int'\n\t},\n\tbcdiv: {\n\t\tdescription: 'Divide two arbitrary precision numbers',\n\t\tsignature: '( string $dividend , string $divisor [, int $scale = 0 ]): string'\n\t},\n\tbcmod: {\n\t\tdescription: 'Get modulus of an arbitrary precision number',\n\t\tsignature: '( string $dividend , string $divisor [, int $scale = 0 ]): string'\n\t},\n\tbcmul: {\n\t\tdescription: 'Multiply two arbitrary precision numbers',\n\t\tsignature: '( string $left_operand , string $right_operand [, int $scale = 0 ]): string'\n\t},\n\tbcpow: {\n\t\tdescription: 'Raise an arbitrary precision number to another',\n\t\tsignature: '( string $base , string $exponent [, int $scale = 0 ]): string'\n\t},\n\tbcpowmod: {\n\t\tdescription: 'Raise an arbitrary precision number to another, reduced by a specified modulus',\n\t\tsignature: '( string $base , string $exponent , string $modulus [, int $scale = 0 ]): string'\n\t},\n\tbcscale: {\n\t\tdescription: 'Set or get default scale parameter for all bc math functions',\n\t\tsignature: '( int $scale ): int'\n\t},\n\tbcsqrt: {\n\t\tdescription: 'Get the square root of an arbitrary precision number',\n\t\tsignature: '( string $operand [, int $scale = 0 ]): string'\n\t},\n\tbcsub: {\n\t\tdescription: 'Subtract one arbitrary precision number from another',\n\t\tsignature: '( string $left_operand , string $right_operand [, int $scale = 0 ]): string'\n\t},\n\tabs: {\n\t\tdescription: 'Absolute value',\n\t\tsignature: '( mixed $number ): number'\n\t},\n\tacos: {\n\t\tdescription: 'Arc cosine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tacosh: {\n\t\tdescription: 'Inverse hyperbolic cosine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tasin: {\n\t\tdescription: 'Arc sine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tasinh: {\n\t\tdescription: 'Inverse hyperbolic sine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tatan2: {\n\t\tdescription: 'Arc tangent of two variables',\n\t\tsignature: '( float $y , float $x ): float'\n\t},\n\tatan: {\n\t\tdescription: 'Arc tangent',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tatanh: {\n\t\tdescription: 'Inverse hyperbolic tangent',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tbase_convert: {\n\t\tdescription: 'Convert a number between arbitrary bases',\n\t\tsignature: '( string $number , int $frombase , int $tobase ): string'\n\t},\n\tbindec: {\n\t\tdescription: 'Binary to decimal',\n\t\tsignature: '( string $binary_string ): float'\n\t},\n\tceil: {\n\t\tdescription: 'Round fractions up',\n\t\tsignature: '( float $value ): float'\n\t},\n\tcos: {\n\t\tdescription: 'Cosine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tcosh: {\n\t\tdescription: 'Hyperbolic cosine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tdecbin: {\n\t\tdescription: 'Decimal to binary',\n\t\tsignature: '( int $number ): string'\n\t},\n\tdechex: {\n\t\tdescription: 'Decimal to hexadecimal',\n\t\tsignature: '( int $number ): string'\n\t},\n\tdecoct: {\n\t\tdescription: 'Decimal to octal',\n\t\tsignature: '( int $number ): string'\n\t},\n\tdeg2rad: {\n\t\tdescription: 'Converts the number in degrees to the radian equivalent',\n\t\tsignature: '( float $number ): float'\n\t},\n\texp: {\n\t\tdescription: 'Calculates the exponent of e',\n\t\tsignature: '( float $arg ): float'\n\t},\n\texpm1: {\n\t\tdescription: 'Returns exp(number) - 1, computed in a way that is accurate even   when the value of number is close to zero',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tfloor: {\n\t\tdescription: 'Round fractions down',\n\t\tsignature: '( float $value ): float'\n\t},\n\tfmod: {\n\t\tdescription: 'Returns the floating point remainder (modulo) of the division  of the arguments',\n\t\tsignature: '( float $x , float $y ): float'\n\t},\n\tgetrandmax: {\n\t\tdescription: 'Show largest possible random value',\n\t\tsignature: '(void): int'\n\t},\n\thexdec: {\n\t\tdescription: 'Hexadecimal to decimal',\n\t\tsignature: '( string $hex_string ): number'\n\t},\n\thypot: {\n\t\tdescription: 'Calculate the length of the hypotenuse of a right-angle triangle',\n\t\tsignature: '( float $x , float $y ): float'\n\t},\n\tintdiv: {\n\t\tdescription: 'Integer division',\n\t\tsignature: '( int $dividend , int $divisor ): int'\n\t},\n\tis_finite: {\n\t\tdescription: 'Finds whether a value is a legal finite number',\n\t\tsignature: '( float $val ): bool'\n\t},\n\tis_infinite: {\n\t\tdescription: 'Finds whether a value is infinite',\n\t\tsignature: '( float $val ): bool'\n\t},\n\tis_nan: {\n\t\tdescription: 'Finds whether a value is not a number',\n\t\tsignature: '( float $val ): bool'\n\t},\n\tlcg_value: {\n\t\tdescription: 'Combined linear congruential generator',\n\t\tsignature: '(void): float'\n\t},\n\tlog10: {\n\t\tdescription: 'Base-10 logarithm',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tlog1p: {\n\t\tdescription: 'Returns log(1 + number), computed in a way that is accurate even when   the value of number is close to zero',\n\t\tsignature: '( float $number ): float'\n\t},\n\tlog: {\n\t\tdescription: 'Natural logarithm',\n\t\tsignature: '( float $arg [, float $base = M_E ]): float'\n\t},\n\tmax: {\n\t\tdescription: 'Find highest value',\n\t\tsignature: '( array $values , mixed $value1 [, mixed $... ]): string'\n\t},\n\tmin: {\n\t\tdescription: 'Find lowest value',\n\t\tsignature: '( array $values , mixed $value1 [, mixed $... ]): string'\n\t},\n\tmt_getrandmax: {\n\t\tdescription: 'Show largest possible random value',\n\t\tsignature: '(void): int'\n\t},\n\tmt_rand: {\n\t\tdescription: 'Generate a random value via the Mersenne Twister Random Number Generator',\n\t\tsignature: '( int $min , int $max ): int'\n\t},\n\tmt_srand: {\n\t\tdescription: 'Seeds the Mersenne Twister Random Number Generator',\n\t\tsignature: '([ int $seed [, int $mode = MT_RAND_MT19937 ]]): void'\n\t},\n\toctdec: {\n\t\tdescription: 'Octal to decimal',\n\t\tsignature: '( string $octal_string ): number'\n\t},\n\tpi: {\n\t\tdescription: 'Get value of pi',\n\t\tsignature: '(void): float'\n\t},\n\tpow: {\n\t\tdescription: 'Exponential expression',\n\t\tsignature: '( number $base , number $exp ): number'\n\t},\n\trad2deg: {\n\t\tdescription: 'Converts the radian number to the equivalent number in degrees',\n\t\tsignature: '( float $number ): float'\n\t},\n\trand: {\n\t\tdescription: 'Generate a random integer',\n\t\tsignature: '( int $min , int $max ): int'\n\t},\n\tround: {\n\t\tdescription: 'Rounds a float',\n\t\tsignature: '( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]): float'\n\t},\n\tsin: {\n\t\tdescription: 'Sine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tsinh: {\n\t\tdescription: 'Hyperbolic sine',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tsqrt: {\n\t\tdescription: 'Square root',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tsrand: {\n\t\tdescription: 'Seed the random number generator',\n\t\tsignature: '([ int $seed ]): void'\n\t},\n\ttan: {\n\t\tdescription: 'Tangent',\n\t\tsignature: '( float $arg ): float'\n\t},\n\ttanh: {\n\t\tdescription: 'Hyperbolic tangent',\n\t\tsignature: '( float $arg ): float'\n\t},\n\tpcntl_alarm: {\n\t\tdescription: 'Set an alarm clock for delivery of a signal',\n\t\tsignature: '( int $seconds ): int'\n\t},\n\tpcntl_async_signals: {\n\t\tdescription: 'Enable/disable asynchronous signal handling or return the old setting',\n\t\tsignature: '([ bool $on ]): bool'\n\t},\n\tpcntl_errno: {\n\t\tdescription: 'Alias of pcntl_get_last_error',\n\t},\n\tpcntl_exec: {\n\t\tdescription: 'Executes specified program in current process space',\n\t\tsignature: '( string $path [, array $args [, array $envs ]]): void'\n\t},\n\tpcntl_fork: {\n\t\tdescription: 'Forks the currently running process',\n\t\tsignature: '(void): int'\n\t},\n\tpcntl_get_last_error: {\n\t\tdescription: 'Retrieve the error number set by the last pcntl function which failed',\n\t\tsignature: '(void): int'\n\t},\n\tpcntl_getpriority: {\n\t\tdescription: 'Get the priority of any process',\n\t\tsignature: '([ int $pid = getmypid() [, int $process_identifier = PRIO_PROCESS ]]): int'\n\t},\n\tpcntl_setpriority: {\n\t\tdescription: 'Change the priority of any process',\n\t\tsignature: '( int $priority [, int $pid = getmypid() [, int $process_identifier = PRIO_PROCESS ]]): bool'\n\t},\n\tpcntl_signal_dispatch: {\n\t\tdescription: 'Calls signal handlers for pending signals',\n\t\tsignature: '(void): bool'\n\t},\n\tpcntl_signal_get_handler: {\n\t\tdescription: 'Get the current handler for specified signal',\n\t\tsignature: '( int $signo ): mixed'\n\t},\n\tpcntl_signal: {\n\t\tdescription: 'Installs a signal handler',\n\t\tsignature: '( int $signo , callable|int $handler [, bool $restart_syscalls ]): bool'\n\t},\n\tpcntl_sigprocmask: {\n\t\tdescription: 'Sets and retrieves blocked signals',\n\t\tsignature: '( int $how , array $set [, array $oldset ]): bool'\n\t},\n\tpcntl_sigtimedwait: {\n\t\tdescription: 'Waits for signals, with a timeout',\n\t\tsignature: '( array $set [, array $siginfo [, int $seconds = 0 [, int $nanoseconds = 0 ]]]): int'\n\t},\n\tpcntl_sigwaitinfo: {\n\t\tdescription: 'Waits for signals',\n\t\tsignature: '( array $set [, array $siginfo ]): int'\n\t},\n\tpcntl_strerror: {\n\t\tdescription: 'Retrieve the system error message associated with the given errno',\n\t\tsignature: '( int $errno ): string'\n\t},\n\tpcntl_wait: {\n\t\tdescription: 'Waits on or returns the status of a forked child',\n\t\tsignature: '( int $status [, int $options = 0 [, array $rusage ]]): int'\n\t},\n\tpcntl_waitpid: {\n\t\tdescription: 'Waits on or returns the status of a forked child',\n\t\tsignature: '( int $pid , int $status [, int $options = 0 [, array $rusage ]]): int'\n\t},\n\tpcntl_wexitstatus: {\n\t\tdescription: 'Returns the return code of a terminated child',\n\t\tsignature: '( int $status ): int'\n\t},\n\tpcntl_wifexited: {\n\t\tdescription: 'Checks if status code represents a normal exit',\n\t\tsignature: '( int $status ): bool'\n\t},\n\tpcntl_wifsignaled: {\n\t\tdescription: 'Checks whether the status code represents a termination due to a signal',\n\t\tsignature: '( int $status ): bool'\n\t},\n\tpcntl_wifstopped: {\n\t\tdescription: 'Checks whether the child process is currently stopped',\n\t\tsignature: '( int $status ): bool'\n\t},\n\tpcntl_wstopsig: {\n\t\tdescription: 'Returns the signal which caused the child to stop',\n\t\tsignature: '( int $status ): int'\n\t},\n\tpcntl_wtermsig: {\n\t\tdescription: 'Returns the signal which caused the child to terminate',\n\t\tsignature: '( int $status ): int'\n\t},\n\tposix_access: {\n\t\tdescription: 'Determine accessibility of a file',\n\t\tsignature: '( string $file [, int $mode = POSIX_F_OK ]): bool'\n\t},\n\tposix_ctermid: {\n\t\tdescription: 'Get path name of controlling terminal',\n\t\tsignature: '(void): string'\n\t},\n\tposix_errno: {\n\t\tdescription: 'Alias of posix_get_last_error',\n\t},\n\tposix_get_last_error: {\n\t\tdescription: 'Retrieve the error number set by the last posix function that failed',\n\t\tsignature: '(void): int'\n\t},\n\tposix_getcwd: {\n\t\tdescription: 'Pathname of current directory',\n\t\tsignature: '(void): string'\n\t},\n\tposix_getegid: {\n\t\tdescription: 'Return the effective group ID of the current process',\n\t\tsignature: '(void): int'\n\t},\n\tposix_geteuid: {\n\t\tdescription: 'Return the effective user ID of the current process',\n\t\tsignature: '(void): int'\n\t},\n\tposix_getgid: {\n\t\tdescription: 'Return the real group ID of the current process',\n\t\tsignature: '(void): int'\n\t},\n\tposix_getgrgid: {\n\t\tdescription: 'Return info about a group by group id',\n\t\tsignature: '( int $gid ): array'\n\t},\n\tposix_getgrnam: {\n\t\tdescription: 'Return info about a group by name',\n\t\tsignature: '( string $name ): array'\n\t},\n\tposix_getgroups: {\n\t\tdescription: 'Return the group set of the current process',\n\t\tsignature: '(void): array'\n\t},\n\tposix_getlogin: {\n\t\tdescription: 'Return login name',\n\t\tsignature: '(void): string'\n\t},\n\tposix_getpgid: {\n\t\tdescription: 'Get process group id for job control',\n\t\tsignature: '( int $pid ): int'\n\t},\n\tposix_getpgrp: {\n\t\tdescription: 'Return the current process group identifier',\n\t\tsignature: '(void): int'\n\t},\n\tposix_getpid: {\n\t\tdescription: 'Return the current process identifier',\n\t\tsignature: '(void): int'\n\t},\n\tposix_getppid: {\n\t\tdescription: 'Return the parent process identifier',\n\t\tsignature: '(void): int'\n\t},\n\tposix_getpwnam: {\n\t\tdescription: 'Return info about a user by username',\n\t\tsignature: '( string $username ): array'\n\t},\n\tposix_getpwuid: {\n\t\tdescription: 'Return info about a user by user id',\n\t\tsignature: '( int $uid ): array'\n\t},\n\tposix_getrlimit: {\n\t\tdescription: 'Return info about system resource limits',\n\t\tsignature: '(void): array'\n\t},\n\tposix_getsid: {\n\t\tdescription: 'Get the current sid of the process',\n\t\tsignature: '( int $pid ): int'\n\t},\n\tposix_getuid: {\n\t\tdescription: 'Return the real user ID of the current process',\n\t\tsignature: '(void): int'\n\t},\n\tposix_initgroups: {\n\t\tdescription: 'Calculate the group access list',\n\t\tsignature: '( string $name , int $base_group_id ): bool'\n\t},\n\tposix_isatty: {\n\t\tdescription: 'Determine if a file descriptor is an interactive terminal',\n\t\tsignature: '( mixed $fd ): bool'\n\t},\n\tposix_kill: {\n\t\tdescription: 'Send a signal to a process',\n\t\tsignature: '( int $pid , int $sig ): bool'\n\t},\n\tposix_mkfifo: {\n\t\tdescription: 'Create a fifo special file (a named pipe)',\n\t\tsignature: '( string $pathname , int $mode ): bool'\n\t},\n\tposix_mknod: {\n\t\tdescription: 'Create a special or ordinary file (POSIX.1)',\n\t\tsignature: '( string $pathname , int $mode [, int $major = 0 [, int $minor = 0 ]]): bool'\n\t},\n\tposix_setegid: {\n\t\tdescription: 'Set the effective GID of the current process',\n\t\tsignature: '( int $gid ): bool'\n\t},\n\tposix_seteuid: {\n\t\tdescription: 'Set the effective UID of the current process',\n\t\tsignature: '( int $uid ): bool'\n\t},\n\tposix_setgid: {\n\t\tdescription: 'Set the GID of the current process',\n\t\tsignature: '( int $gid ): bool'\n\t},\n\tposix_setpgid: {\n\t\tdescription: 'Set process group id for job control',\n\t\tsignature: '( int $pid , int $pgid ): bool'\n\t},\n\tposix_setrlimit: {\n\t\tdescription: 'Set system resource limits',\n\t\tsignature: '( int $resource , int $softlimit , int $hardlimit ): bool'\n\t},\n\tposix_setsid: {\n\t\tdescription: 'Make the current process a session leader',\n\t\tsignature: '(void): int'\n\t},\n\tposix_setuid: {\n\t\tdescription: 'Set the UID of the current process',\n\t\tsignature: '( int $uid ): bool'\n\t},\n\tposix_strerror: {\n\t\tdescription: 'Retrieve the system error message associated with the given errno',\n\t\tsignature: '( int $errno ): string'\n\t},\n\tposix_times: {\n\t\tdescription: 'Get process times',\n\t\tsignature: '(void): array'\n\t},\n\tposix_ttyname: {\n\t\tdescription: 'Determine terminal device name',\n\t\tsignature: '( mixed $fd ): string'\n\t},\n\tposix_uname: {\n\t\tdescription: 'Get system name',\n\t\tsignature: '(void): array'\n\t},\n\tescapeshellarg: {\n\t\tdescription: 'Escape a string to be used as a shell argument',\n\t\tsignature: '( string $arg ): string'\n\t},\n\tescapeshellcmd: {\n\t\tdescription: 'Escape shell metacharacters',\n\t\tsignature: '( string $command ): string'\n\t},\n\texec: {\n\t\tdescription: 'Execute an external program',\n\t\tsignature: '( string $command [, array $output [, int $return_var ]]): string'\n\t},\n\tpassthru: {\n\t\tdescription: 'Execute an external program and display raw output',\n\t\tsignature: '( string $command [, int $return_var ]): void'\n\t},\n\tproc_close: {\n\t\tdescription: 'Close a process opened by proc_open and return the exit code of that process',\n\t\tsignature: '( resource $process ): int'\n\t},\n\tproc_get_status: {\n\t\tdescription: 'Get information about a process opened by proc_open',\n\t\tsignature: '( resource $process ): array'\n\t},\n\tproc_nice: {\n\t\tdescription: 'Change the priority of the current process',\n\t\tsignature: '( int $increment ): bool'\n\t},\n\tproc_open: {\n\t\tdescription: 'Execute a command and open file pointers for input/output',\n\t\tsignature: '( string $cmd , array $descriptorspec , array $pipes [, string $cwd [, array $env [, array $other_options ]]]): resource'\n\t},\n\tproc_terminate: {\n\t\tdescription: 'Kills a process opened by proc_open',\n\t\tsignature: '( resource $process [, int $signal = 15 ]): bool'\n\t},\n\tshell_exec: {\n\t\tdescription: 'Execute command via shell and return the complete output as a string',\n\t\tsignature: '( string $cmd ): string'\n\t},\n\tsystem: {\n\t\tdescription: 'Execute an external program and display the output',\n\t\tsignature: '( string $command [, int $return_var ]): string'\n\t},\n\tftok: {\n\t\tdescription: 'Convert a pathname and a project identifier to a System V IPC key',\n\t\tsignature: '( string $pathname , string $proj ): int'\n\t},\n\tmsg_get_queue: {\n\t\tdescription: 'Create or attach to a message queue',\n\t\tsignature: '( int $key [, int $perms = 0666 ]): resource'\n\t},\n\tmsg_queue_exists: {\n\t\tdescription: 'Check whether a message queue exists',\n\t\tsignature: '( int $key ): bool'\n\t},\n\tmsg_receive: {\n\t\tdescription: 'Receive a message from a message queue',\n\t\tsignature: '( resource $queue , int $desiredmsgtype , int $msgtype , int $maxsize , mixed $message [, bool $unserialize [, int $flags = 0 [, int $errorcode ]]]): bool'\n\t},\n\tmsg_remove_queue: {\n\t\tdescription: 'Destroy a message queue',\n\t\tsignature: '( resource $queue ): bool'\n\t},\n\tmsg_send: {\n\t\tdescription: 'Send a message to a message queue',\n\t\tsignature: '( resource $queue , int $msgtype , mixed $message [, bool $serialize [, bool $blocking [, int $errorcode ]]]): bool'\n\t},\n\tmsg_set_queue: {\n\t\tdescription: 'Set information in the message queue data structure',\n\t\tsignature: '( resource $queue , array $data ): bool'\n\t},\n\tmsg_stat_queue: {\n\t\tdescription: 'Returns information from the message queue data structure',\n\t\tsignature: '( resource $queue ): array'\n\t},\n\tsem_acquire: {\n\t\tdescription: 'Acquire a semaphore',\n\t\tsignature: '( resource $sem_identifier [, bool $nowait ]): bool'\n\t},\n\tsem_get: {\n\t\tdescription: 'Get a semaphore id',\n\t\tsignature: '( int $key [, int $max_acquire = 1 [, int $perm = 0666 [, int $auto_release = 1 ]]]): resource'\n\t},\n\tsem_release: {\n\t\tdescription: 'Release a semaphore',\n\t\tsignature: '( resource $sem_identifier ): bool'\n\t},\n\tsem_remove: {\n\t\tdescription: 'Remove a semaphore',\n\t\tsignature: '( resource $sem_identifier ): bool'\n\t},\n\tshm_attach: {\n\t\tdescription: 'Creates or open a shared memory segment',\n\t\tsignature: '( int $key [, int $memsize [, int $perm = 0666 ]]): resource'\n\t},\n\tshm_detach: {\n\t\tdescription: 'Disconnects from shared memory segment',\n\t\tsignature: '( resource $shm_identifier ): bool'\n\t},\n\tshm_get_var: {\n\t\tdescription: 'Returns a variable from shared memory',\n\t\tsignature: '( resource $shm_identifier , int $variable_key ): mixed'\n\t},\n\tshm_has_var: {\n\t\tdescription: 'Check whether a specific entry exists',\n\t\tsignature: '( resource $shm_identifier , int $variable_key ): bool'\n\t},\n\tshm_put_var: {\n\t\tdescription: 'Inserts or updates a variable in shared memory',\n\t\tsignature: '( resource $shm_identifier , int $variable_key , mixed $variable ): bool'\n\t},\n\tshm_remove_var: {\n\t\tdescription: 'Removes a variable from shared memory',\n\t\tsignature: '( resource $shm_identifier , int $variable_key ): bool'\n\t},\n\tshm_remove: {\n\t\tdescription: 'Removes shared memory from Unix systems',\n\t\tsignature: '( resource $shm_identifier ): bool'\n\t},\n\tshmop_close: {\n\t\tdescription: 'Close shared memory block',\n\t\tsignature: '( resource $shmid ): void'\n\t},\n\tshmop_delete: {\n\t\tdescription: 'Delete shared memory block',\n\t\tsignature: '( resource $shmid ): bool'\n\t},\n\tshmop_open: {\n\t\tdescription: 'Create or open shared memory block',\n\t\tsignature: '( int $key , string $flags , int $mode , int $size ): resource'\n\t},\n\tshmop_read: {\n\t\tdescription: 'Read data from shared memory block',\n\t\tsignature: '( resource $shmid , int $start , int $count ): string'\n\t},\n\tshmop_size: {\n\t\tdescription: 'Get size of shared memory block',\n\t\tsignature: '( resource $shmid ): int'\n\t},\n\tshmop_write: {\n\t\tdescription: 'Write data into shared memory block',\n\t\tsignature: '( resource $shmid , string $data , int $offset ): int'\n\t},\n\tjson_decode: {\n\t\tdescription: 'Decodes a JSON string',\n\t\tsignature: '( string $json [, bool $assoc [, int $depth = 512 [, int $options = 0 ]]]): mixed'\n\t},\n\tjson_encode: {\n\t\tdescription: 'Returns the JSON representation of a value',\n\t\tsignature: '( mixed $value [, int $options = 0 [, int $depth = 512 ]]): string'\n\t},\n\tjson_last_error_msg: {\n\t\tdescription: 'Returns the error string of the last json_encode() or json_decode() call',\n\t\tsignature: '(void): string'\n\t},\n\tjson_last_error: {\n\t\tdescription: 'Returns the last error occurred',\n\t\tsignature: '(void): int'\n\t},\n\tconnection_aborted: {\n\t\tdescription: 'Check whether client disconnected',\n\t\tsignature: '(void): int'\n\t},\n\tconnection_status: {\n\t\tdescription: 'Returns connection status bitfield',\n\t\tsignature: '(void): int'\n\t},\n\tconstant: {\n\t\tdescription: 'Returns the value of a constant',\n\t\tsignature: '( string $name ): mixed'\n\t},\n\tdefine: {\n\t\tdescription: 'Defines a named constant',\n\t\tsignature: '( string $name , mixed $value [, bool $case_insensitive ]): bool'\n\t},\n\tdefined: {\n\t\tdescription: 'Checks whether a given named constant exists',\n\t\tsignature: '( string $name ): bool'\n\t},\n\tdie: {\n\t\tdescription: 'Equivalent to exit',\n\t},\n\teval: {\n\t\tdescription: 'Evaluate a string as PHP code',\n\t\tsignature: '( string $code ): mixed'\n\t},\n\texit: {\n\t\tdescription: 'Output a message and terminate the current script',\n\t\tsignature: '( int $status ): void'\n\t},\n\tget_browser: {\n\t\tdescription: 'Tells what the user\\'s browser is capable of',\n\t\tsignature: '([ string $user_agent [, bool $return_array ]]): mixed'\n\t},\n\t__halt_compiler: {\n\t\tdescription: 'Halts the compiler execution',\n\t\tsignature: '(void): void'\n\t},\n\thighlight_file: {\n\t\tdescription: 'Syntax highlighting of a file',\n\t\tsignature: '( string $filename [, bool $return ]): mixed'\n\t},\n\thighlight_string: {\n\t\tdescription: 'Syntax highlighting of a string',\n\t\tsignature: '( string $str [, bool $return ]): mixed'\n\t},\n\thrtime: {\n\t\tdescription: 'Get the system\\'s high resolution time',\n\t\tsignature: '([ bool $get_as_number ]): mixed'\n\t},\n\tignore_user_abort: {\n\t\tdescription: 'Set whether a client disconnect should abort script execution',\n\t\tsignature: '([ bool $value ]): int'\n\t},\n\tpack: {\n\t\tdescription: 'Pack data into binary string',\n\t\tsignature: '( string $format [, mixed $... ]): string'\n\t},\n\tphp_check_syntax: {\n\t\tdescription: 'Check the PHP syntax of (and execute) the specified file',\n\t\tsignature: '( string $filename [, string $error_message ]): bool'\n\t},\n\tphp_strip_whitespace: {\n\t\tdescription: 'Return source with stripped comments and whitespace',\n\t\tsignature: '( string $filename ): string'\n\t},\n\tsapi_windows_cp_conv: {\n\t\tdescription: 'Convert string from one codepage to another',\n\t\tsignature: '( int|string $in_codepage , int|string $out_codepage , string $subject ): string'\n\t},\n\tsapi_windows_cp_get: {\n\t\tdescription: 'Get process codepage',\n\t\tsignature: '( string $kind ): int'\n\t},\n\tsapi_windows_cp_is_utf8: {\n\t\tdescription: 'Indicates whether the codepage is UTF-8 compatible',\n\t\tsignature: '(void): bool'\n\t},\n\tsapi_windows_cp_set: {\n\t\tdescription: 'Set process codepage',\n\t\tsignature: '( int $cp ): bool'\n\t},\n\tsapi_windows_vt100_support: {\n\t\tdescription: 'Get or set VT100 support for the specified stream associated to an output buffer of a Windows console.',\n\t\tsignature: '( resource $stream [, bool $enable ]): bool'\n\t},\n\tshow_source: {\n\t\tdescription: 'Alias of highlight_file',\n\t},\n\tsleep: {\n\t\tdescription: 'Delay execution',\n\t\tsignature: '( int $seconds ): int'\n\t},\n\tsys_getloadavg: {\n\t\tdescription: 'Gets system load average',\n\t\tsignature: '(void): array'\n\t},\n\ttime_nanosleep: {\n\t\tdescription: 'Delay for a number of seconds and nanoseconds',\n\t\tsignature: '( int $seconds , int $nanoseconds ): mixed'\n\t},\n\ttime_sleep_until: {\n\t\tdescription: 'Make the script sleep until the specified time',\n\t\tsignature: '( float $timestamp ): bool'\n\t},\n\tuniqid: {\n\t\tdescription: 'Generate a unique ID',\n\t\tsignature: '([ string $prefix = \"\" [, bool $more_entropy ]]): string'\n\t},\n\tunpack: {\n\t\tdescription: 'Unpack data from binary string',\n\t\tsignature: '( string $format , string $data [, int $offset = 0 ]): array'\n\t},\n\tusleep: {\n\t\tdescription: 'Delay execution in microseconds',\n\t\tsignature: '( int $micro_seconds ): void'\n\t},\n\tclass_implements: {\n\t\tdescription: 'Return the interfaces which are implemented by the given class or interface',\n\t\tsignature: '( mixed $class [, bool $autoload ]): array'\n\t},\n\tclass_parents: {\n\t\tdescription: 'Return the parent classes of the given class',\n\t\tsignature: '( mixed $class [, bool $autoload ]): array'\n\t},\n\tclass_uses: {\n\t\tdescription: 'Return the traits used by the given class',\n\t\tsignature: '( mixed $class [, bool $autoload ]): array'\n\t},\n\titerator_apply: {\n\t\tdescription: 'Call a function for every element in an iterator',\n\t\tsignature: '( Traversable $iterator , callable $function [, array $args ]): int'\n\t},\n\titerator_count: {\n\t\tdescription: 'Count the elements in an iterator',\n\t\tsignature: '( Traversable $iterator ): int'\n\t},\n\titerator_to_array: {\n\t\tdescription: 'Copy the iterator into an array',\n\t\tsignature: '( Traversable $iterator [, bool $use_keys ]): array'\n\t},\n\tspl_autoload_call: {\n\t\tdescription: 'Try all registered __autoload() functions to load the requested class',\n\t\tsignature: '( string $class_name ): void'\n\t},\n\tspl_autoload_extensions: {\n\t\tdescription: 'Register and return default file extensions for spl_autoload',\n\t\tsignature: '([ string $file_extensions ]): string'\n\t},\n\tspl_autoload_functions: {\n\t\tdescription: 'Return all registered __autoload() functions',\n\t\tsignature: '(void): array'\n\t},\n\tspl_autoload_register: {\n\t\tdescription: 'Register given function as __autoload() implementation',\n\t\tsignature: '([ callable $autoload_function [, bool $throw [, bool $prepend ]]]): bool'\n\t},\n\tspl_autoload_unregister: {\n\t\tdescription: 'Unregister given function as __autoload() implementation',\n\t\tsignature: '( mixed $autoload_function ): bool'\n\t},\n\tspl_autoload: {\n\t\tdescription: 'Default implementation for __autoload()',\n\t\tsignature: '( string $class_name [, string $file_extensions = spl_autoload_extensions() ]): void'\n\t},\n\tspl_classes: {\n\t\tdescription: 'Return available SPL classes',\n\t\tsignature: '(void): array'\n\t},\n\tspl_object_hash: {\n\t\tdescription: 'Return hash id for given object',\n\t\tsignature: '( object $obj ): string'\n\t},\n\tspl_object_id: {\n\t\tdescription: 'Return the integer object handle for given object',\n\t\tsignature: '( object $obj ): int'\n\t},\n\tset_socket_blocking: {\n\t\tdescription: 'Alias of stream_set_blocking',\n\t},\n\tstream_bucket_append: {\n\t\tdescription: 'Append bucket to brigade',\n\t\tsignature: '( resource $brigade , object $bucket ): void'\n\t},\n\tstream_bucket_make_writeable: {\n\t\tdescription: 'Return a bucket object from the brigade for operating on',\n\t\tsignature: '( resource $brigade ): object'\n\t},\n\tstream_bucket_new: {\n\t\tdescription: 'Create a new bucket for use on the current stream',\n\t\tsignature: '( resource $stream , string $buffer ): object'\n\t},\n\tstream_bucket_prepend: {\n\t\tdescription: 'Prepend bucket to brigade',\n\t\tsignature: '( resource $brigade , object $bucket ): void'\n\t},\n\tstream_context_create: {\n\t\tdescription: 'Creates a stream context',\n\t\tsignature: '([ array $options [, array $params ]]): resource'\n\t},\n\tstream_context_get_default: {\n\t\tdescription: 'Retrieve the default stream context',\n\t\tsignature: '([ array $options ]): resource'\n\t},\n\tstream_context_get_options: {\n\t\tdescription: 'Retrieve options for a stream/wrapper/context',\n\t\tsignature: '( resource $stream_or_context ): array'\n\t},\n\tstream_context_get_params: {\n\t\tdescription: 'Retrieves parameters from a context',\n\t\tsignature: '( resource $stream_or_context ): array'\n\t},\n\tstream_context_set_default: {\n\t\tdescription: 'Set the default stream context',\n\t\tsignature: '( array $options ): resource'\n\t},\n\tstream_context_set_option: {\n\t\tdescription: 'Sets an option for a stream/wrapper/context',\n\t\tsignature: '( resource $stream_or_context , string $wrapper , string $option , mixed $value , array $options ): bool'\n\t},\n\tstream_context_set_params: {\n\t\tdescription: 'Set parameters for a stream/wrapper/context',\n\t\tsignature: '( resource $stream_or_context , array $params ): bool'\n\t},\n\tstream_copy_to_stream: {\n\t\tdescription: 'Copies data from one stream to another',\n\t\tsignature: '( resource $source , resource $dest [, int $maxlength = -1 [, int $offset = 0 ]]): int'\n\t},\n\tstream_filter_append: {\n\t\tdescription: 'Attach a filter to a stream',\n\t\tsignature: '( resource $stream , string $filtername [, int $read_write [, mixed $params ]]): resource'\n\t},\n\tstream_filter_prepend: {\n\t\tdescription: 'Attach a filter to a stream',\n\t\tsignature: '( resource $stream , string $filtername [, int $read_write [, mixed $params ]]): resource'\n\t},\n\tstream_filter_register: {\n\t\tdescription: 'Register a user defined stream filter',\n\t\tsignature: '( string $filtername , string $classname ): bool'\n\t},\n\tstream_filter_remove: {\n\t\tdescription: 'Remove a filter from a stream',\n\t\tsignature: '( resource $stream_filter ): bool'\n\t},\n\tstream_get_contents: {\n\t\tdescription: 'Reads remainder of a stream into a string',\n\t\tsignature: '( resource $handle [, int $maxlength = -1 [, int $offset = -1 ]]): string'\n\t},\n\tstream_get_filters: {\n\t\tdescription: 'Retrieve list of registered filters',\n\t\tsignature: '(void): array'\n\t},\n\tstream_get_line: {\n\t\tdescription: 'Gets line from stream resource up to a given delimiter',\n\t\tsignature: '( resource $handle , int $length [, string $ending ]): string'\n\t},\n\tstream_get_meta_data: {\n\t\tdescription: 'Retrieves header/meta data from streams/file pointers',\n\t\tsignature: '( resource $stream ): array'\n\t},\n\tstream_get_transports: {\n\t\tdescription: 'Retrieve list of registered socket transports',\n\t\tsignature: '(void): array'\n\t},\n\tstream_get_wrappers: {\n\t\tdescription: 'Retrieve list of registered streams',\n\t\tsignature: '(void): array'\n\t},\n\tstream_is_local: {\n\t\tdescription: 'Checks if a stream is a local stream',\n\t\tsignature: '( mixed $stream_or_url ): bool'\n\t},\n\tstream_isatty: {\n\t\tdescription: 'Check if a stream is a TTY',\n\t\tsignature: '( resource $stream ): bool'\n\t},\n\tstream_notification_callback: {\n\t\tdescription: 'A callback function for the notification context parameter',\n\t\tsignature: '( int $notification_code , int $severity , string $message , int $message_code , int $bytes_transferred , int $bytes_max ): callable'\n\t},\n\tstream_register_wrapper: {\n\t\tdescription: 'Alias of stream_wrapper_register',\n\t},\n\tstream_resolve_include_path: {\n\t\tdescription: 'Resolve filename against the include path',\n\t\tsignature: '( string $filename ): string'\n\t},\n\tstream_select: {\n\t\tdescription: 'Runs the equivalent of the select() system call on the given   arrays of streams with a timeout specified by tv_sec and tv_usec',\n\t\tsignature: '( array $read , array $write , array $except , int $tv_sec [, int $tv_usec = 0 ]): int'\n\t},\n\tstream_set_blocking: {\n\t\tdescription: 'Set blocking/non-blocking mode on a stream',\n\t\tsignature: '( resource $stream , bool $mode ): bool'\n\t},\n\tstream_set_chunk_size: {\n\t\tdescription: 'Set the stream chunk size',\n\t\tsignature: '( resource $fp , int $chunk_size ): int'\n\t},\n\tstream_set_read_buffer: {\n\t\tdescription: 'Set read file buffering on the given stream',\n\t\tsignature: '( resource $stream , int $buffer ): int'\n\t},\n\tstream_set_timeout: {\n\t\tdescription: 'Set timeout period on a stream',\n\t\tsignature: '( resource $stream , int $seconds [, int $microseconds = 0 ]): bool'\n\t},\n\tstream_set_write_buffer: {\n\t\tdescription: 'Sets write file buffering on the given stream',\n\t\tsignature: '( resource $stream , int $buffer ): int'\n\t},\n\tstream_socket_accept: {\n\t\tdescription: 'Accept a connection on a socket created by stream_socket_server',\n\t\tsignature: '( resource $server_socket [, float $timeout = ini_get(\"default_socket_timeout\") [, string $peername ]]): resource'\n\t},\n\tstream_socket_client: {\n\t\tdescription: 'Open Internet or Unix domain socket connection',\n\t\tsignature: '( string $remote_socket [, int $errno [, string $errstr [, float $timeout = ini_get(\"default_socket_timeout\") [, int $flags = STREAM_CLIENT_CONNECT [, resource $context ]]]]]): resource'\n\t},\n\tstream_socket_enable_crypto: {\n\t\tdescription: 'Turns encryption on/off on an already connected socket',\n\t\tsignature: '( resource $stream , bool $enable [, int $crypto_type [, resource $session_stream ]]): mixed'\n\t},\n\tstream_socket_get_name: {\n\t\tdescription: 'Retrieve the name of the local or remote sockets',\n\t\tsignature: '( resource $handle , bool $want_peer ): string'\n\t},\n\tstream_socket_pair: {\n\t\tdescription: 'Creates a pair of connected, indistinguishable socket streams',\n\t\tsignature: '( int $domain , int $type , int $protocol ): array'\n\t},\n\tstream_socket_recvfrom: {\n\t\tdescription: 'Receives data from a socket, connected or not',\n\t\tsignature: '( resource $socket , int $length [, int $flags = 0 [, string $address ]]): string'\n\t},\n\tstream_socket_sendto: {\n\t\tdescription: 'Sends a message to a socket, whether it is connected or not',\n\t\tsignature: '( resource $socket , string $data [, int $flags = 0 [, string $address ]]): int'\n\t},\n\tstream_socket_server: {\n\t\tdescription: 'Create an Internet or Unix domain server socket',\n\t\tsignature: '( string $local_socket [, int $errno [, string $errstr [, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource $context ]]]]): resource'\n\t},\n\tstream_socket_shutdown: {\n\t\tdescription: 'Shutdown a full-duplex connection',\n\t\tsignature: '( resource $stream , int $how ): bool'\n\t},\n\tstream_supports_lock: {\n\t\tdescription: 'Tells whether the stream supports locking',\n\t\tsignature: '( resource $stream ): bool'\n\t},\n\tstream_wrapper_register: {\n\t\tdescription: 'Register a URL wrapper implemented as a PHP class',\n\t\tsignature: '( string $protocol , string $classname [, int $flags = 0 ]): bool'\n\t},\n\tstream_wrapper_restore: {\n\t\tdescription: 'Restores a previously unregistered built-in wrapper',\n\t\tsignature: '( string $protocol ): bool'\n\t},\n\tstream_wrapper_unregister: {\n\t\tdescription: 'Unregister a URL wrapper',\n\t\tsignature: '( string $protocol ): bool'\n\t},\n\ttoken_get_all: {\n\t\tdescription: 'Split given source into PHP tokens',\n\t\tsignature: '( string $source [, int $flags = 0 ]): array'\n\t},\n\ttoken_name: {\n\t\tdescription: 'Get the symbolic name of a given PHP token',\n\t\tsignature: '( int $token ): string'\n\t},\n\tbase64_decode: {\n\t\tdescription: 'Decodes data encoded with MIME base64',\n\t\tsignature: '( string $data [, bool $strict ]): string'\n\t},\n\tbase64_encode: {\n\t\tdescription: 'Encodes data with MIME base64',\n\t\tsignature: '( string $data ): string'\n\t},\n\tget_headers: {\n\t\tdescription: 'Fetches all the headers sent by the server in response to an HTTP request',\n\t\tsignature: '( string $url [, int $format = 0 [, resource $context ]]): array'\n\t},\n\tget_meta_tags: {\n\t\tdescription: 'Extracts all meta tag content attributes from a file and returns an array',\n\t\tsignature: '( string $filename [, bool $use_include_path ]): array'\n\t},\n\thttp_build_query: {\n\t\tdescription: 'Generate URL-encoded query string',\n\t\tsignature: '( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type ]]]): string'\n\t},\n\tparse_url: {\n\t\tdescription: 'Parse a URL and return its components',\n\t\tsignature: '( string $url [, int $component = -1 ]): mixed'\n\t},\n\trawurldecode: {\n\t\tdescription: 'Decode URL-encoded strings',\n\t\tsignature: '( string $str ): string'\n\t},\n\trawurlencode: {\n\t\tdescription: 'URL-encode according to RFC 3986',\n\t\tsignature: '( string $str ): string'\n\t},\n\turldecode: {\n\t\tdescription: 'Decodes URL-encoded string',\n\t\tsignature: '( string $str ): string'\n\t},\n\turlencode: {\n\t\tdescription: 'URL-encodes string',\n\t\tsignature: '( string $str ): string'\n\t},\n\tcurl_close: {\n\t\tdescription: 'Close a cURL session',\n\t\tsignature: '( resource $ch ): void'\n\t},\n\tcurl_copy_handle: {\n\t\tdescription: 'Copy a cURL handle along with all of its preferences',\n\t\tsignature: '( resource $ch ): resource'\n\t},\n\tcurl_errno: {\n\t\tdescription: 'Return the last error number',\n\t\tsignature: '( resource $ch ): int'\n\t},\n\tcurl_error: {\n\t\tdescription: 'Return a string containing the last error for the current session',\n\t\tsignature: '( resource $ch ): string'\n\t},\n\tcurl_escape: {\n\t\tdescription: 'URL encodes the given string',\n\t\tsignature: '( resource $ch , string $str ): string'\n\t},\n\tcurl_exec: {\n\t\tdescription: 'Perform a cURL session',\n\t\tsignature: '( resource $ch ): mixed'\n\t},\n\tcurl_file_create: {\n\t\tdescription: 'Create a CURLFile object',\n\t\tsignature: '( string $filename [, string $mimetype [, string $postname ]]): CURLFile'\n\t},\n\tcurl_getinfo: {\n\t\tdescription: 'Get information regarding a specific transfer',\n\t\tsignature: '( resource $ch [, int $opt ]): mixed'\n\t},\n\tcurl_init: {\n\t\tdescription: 'Initialize a cURL session',\n\t\tsignature: '([ string $url ]): resource'\n\t},\n\tcurl_multi_add_handle: {\n\t\tdescription: 'Add a normal cURL handle to a cURL multi handle',\n\t\tsignature: '( resource $mh , resource $ch ): int'\n\t},\n\tcurl_multi_close: {\n\t\tdescription: 'Close a set of cURL handles',\n\t\tsignature: '( resource $mh ): void'\n\t},\n\tcurl_multi_errno: {\n\t\tdescription: 'Return the last multi curl error number',\n\t\tsignature: '( resource $mh ): int'\n\t},\n\tcurl_multi_exec: {\n\t\tdescription: 'Run the sub-connections of the current cURL handle',\n\t\tsignature: '( resource $mh , int $still_running ): int'\n\t},\n\tcurl_multi_getcontent: {\n\t\tdescription: 'Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set',\n\t\tsignature: '( resource $ch ): string'\n\t},\n\tcurl_multi_info_read: {\n\t\tdescription: 'Get information about the current transfers',\n\t\tsignature: '( resource $mh [, int $msgs_in_queue ]): array'\n\t},\n\tcurl_multi_init: {\n\t\tdescription: 'Returns a new cURL multi handle',\n\t\tsignature: '(void): resource'\n\t},\n\tcurl_multi_remove_handle: {\n\t\tdescription: 'Remove a multi handle from a set of cURL handles',\n\t\tsignature: '( resource $mh , resource $ch ): int'\n\t},\n\tcurl_multi_select: {\n\t\tdescription: 'Wait for activity on any curl_multi connection',\n\t\tsignature: '( resource $mh [, float $timeout = 1.0 ]): int'\n\t},\n\tcurl_multi_setopt: {\n\t\tdescription: 'Set an option for the cURL multi handle',\n\t\tsignature: '( resource $mh , int $option , mixed $value ): bool'\n\t},\n\tcurl_multi_strerror: {\n\t\tdescription: 'Return string describing error code',\n\t\tsignature: '( int $errornum ): string'\n\t},\n\tcurl_pause: {\n\t\tdescription: 'Pause and unpause a connection',\n\t\tsignature: '( resource $ch , int $bitmask ): int'\n\t},\n\tcurl_reset: {\n\t\tdescription: 'Reset all options of a libcurl session handle',\n\t\tsignature: '( resource $ch ): void'\n\t},\n\tcurl_setopt_array: {\n\t\tdescription: 'Set multiple options for a cURL transfer',\n\t\tsignature: '( resource $ch , array $options ): bool'\n\t},\n\tcurl_setopt: {\n\t\tdescription: 'Set an option for a cURL transfer',\n\t\tsignature: '( resource $ch , int $option , mixed $value ): bool'\n\t},\n\tcurl_share_close: {\n\t\tdescription: 'Close a cURL share handle',\n\t\tsignature: '( resource $sh ): void'\n\t},\n\tcurl_share_errno: {\n\t\tdescription: 'Return the last share curl error number',\n\t\tsignature: '( resource $sh ): int'\n\t},\n\tcurl_share_init: {\n\t\tdescription: 'Initialize a cURL share handle',\n\t\tsignature: '(void): resource'\n\t},\n\tcurl_share_setopt: {\n\t\tdescription: 'Set an option for a cURL share handle',\n\t\tsignature: '( resource $sh , int $option , string $value ): bool'\n\t},\n\tcurl_share_strerror: {\n\t\tdescription: 'Return string describing the given error code',\n\t\tsignature: '( int $errornum ): string'\n\t},\n\tcurl_strerror: {\n\t\tdescription: 'Return string describing the given error code',\n\t\tsignature: '( int $errornum ): string'\n\t},\n\tcurl_unescape: {\n\t\tdescription: 'Decodes the given URL encoded string',\n\t\tsignature: '( resource $ch , string $str ): string'\n\t},\n\tcurl_version: {\n\t\tdescription: 'Gets cURL version information',\n\t\tsignature: '([ int $age = CURLVERSION_NOW ]): array'\n\t},\n\tftp_alloc: {\n\t\tdescription: 'Allocates space for a file to be uploaded',\n\t\tsignature: '( resource $ftp_stream , int $filesize [, string $result ]): bool'\n\t},\n\tftp_append: {\n\t\tdescription: 'Append the contents of a file to another file on the FTP server',\n\t\tsignature: '( resource $ftp , string $remote_file , string $local_file [, int $mode ]): bool'\n\t},\n\tftp_cdup: {\n\t\tdescription: 'Changes to the parent directory',\n\t\tsignature: '( resource $ftp_stream ): bool'\n\t},\n\tftp_chdir: {\n\t\tdescription: 'Changes the current directory on a FTP server',\n\t\tsignature: '( resource $ftp_stream , string $directory ): bool'\n\t},\n\tftp_chmod: {\n\t\tdescription: 'Set permissions on a file via FTP',\n\t\tsignature: '( resource $ftp_stream , int $mode , string $filename ): int'\n\t},\n\tftp_close: {\n\t\tdescription: 'Closes an FTP connection',\n\t\tsignature: '( resource $ftp_stream ): resource'\n\t},\n\tftp_connect: {\n\t\tdescription: 'Opens an FTP connection',\n\t\tsignature: '( string $host [, int $port = 21 [, int $timeout = 90 ]]): resource'\n\t},\n\tftp_delete: {\n\t\tdescription: 'Deletes a file on the FTP server',\n\t\tsignature: '( resource $ftp_stream , string $path ): bool'\n\t},\n\tftp_exec: {\n\t\tdescription: 'Requests execution of a command on the FTP server',\n\t\tsignature: '( resource $ftp_stream , string $command ): bool'\n\t},\n\tftp_fget: {\n\t\tdescription: 'Downloads a file from the FTP server and saves to an open file',\n\t\tsignature: '( resource $ftp_stream , resource $handle , string $remote_file [, int $mode [, int $resumepos = 0 ]]): bool'\n\t},\n\tftp_fput: {\n\t\tdescription: 'Uploads from an open file to the FTP server',\n\t\tsignature: '( resource $ftp_stream , string $remote_file , resource $handle [, int $mode [, int $startpos = 0 ]]): bool'\n\t},\n\tftp_get_option: {\n\t\tdescription: 'Retrieves various runtime behaviours of the current FTP stream',\n\t\tsignature: '( resource $ftp_stream , int $option ): mixed'\n\t},\n\tftp_get: {\n\t\tdescription: 'Downloads a file from the FTP server',\n\t\tsignature: '( resource $ftp_stream , string $local_file , string $remote_file [, int $mode [, int $resumepos = 0 ]]): bool'\n\t},\n\tftp_login: {\n\t\tdescription: 'Logs in to an FTP connection',\n\t\tsignature: '( resource $ftp_stream , string $username , string $password ): bool'\n\t},\n\tftp_mdtm: {\n\t\tdescription: 'Returns the last modified time of the given file',\n\t\tsignature: '( resource $ftp_stream , string $remote_file ): int'\n\t},\n\tftp_mkdir: {\n\t\tdescription: 'Creates a directory',\n\t\tsignature: '( resource $ftp_stream , string $directory ): string'\n\t},\n\tftp_mlsd: {\n\t\tdescription: 'Returns a list of files in the given directory',\n\t\tsignature: '( resource $ftp_stream , string $directory ): array'\n\t},\n\tftp_nb_continue: {\n\t\tdescription: 'Continues retrieving/sending a file (non-blocking)',\n\t\tsignature: '( resource $ftp_stream ): int'\n\t},\n\tftp_nb_fget: {\n\t\tdescription: 'Retrieves a file from the FTP server and writes it to an open file (non-blocking)',\n\t\tsignature: '( resource $ftp_stream , resource $handle , string $remote_file [, int $mode [, int $resumepos = 0 ]]): int'\n\t},\n\tftp_nb_fput: {\n\t\tdescription: 'Stores a file from an open file to the FTP server (non-blocking)',\n\t\tsignature: '( resource $ftp_stream , string $remote_file , resource $handle [, int $mode [, int $startpos = 0 ]]): int'\n\t},\n\tftp_nb_get: {\n\t\tdescription: 'Retrieves a file from the FTP server and writes it to a local file (non-blocking)',\n\t\tsignature: '( resource $ftp_stream , string $local_file , string $remote_file [, int $mode [, int $resumepos = 0 ]]): int'\n\t},\n\tftp_nb_put: {\n\t\tdescription: 'Stores a file on the FTP server (non-blocking)',\n\t\tsignature: '( resource $ftp_stream , string $remote_file , string $local_file [, int $mode [, int $startpos = 0 ]]): int'\n\t},\n\tftp_nlist: {\n\t\tdescription: 'Returns a list of files in the given directory',\n\t\tsignature: '( resource $ftp_stream , string $directory ): array'\n\t},\n\tftp_pasv: {\n\t\tdescription: 'Turns passive mode on or off',\n\t\tsignature: '( resource $ftp_stream , bool $pasv ): bool'\n\t},\n\tftp_put: {\n\t\tdescription: 'Uploads a file to the FTP server',\n\t\tsignature: '( resource $ftp_stream , string $remote_file , string $local_file [, int $mode [, int $startpos = 0 ]]): bool'\n\t},\n\tftp_pwd: {\n\t\tdescription: 'Returns the current directory name',\n\t\tsignature: '( resource $ftp_stream ): string'\n\t},\n\tftp_quit: {\n\t\tdescription: 'Alias of ftp_close',\n\t},\n\tftp_raw: {\n\t\tdescription: 'Sends an arbitrary command to an FTP server',\n\t\tsignature: '( resource $ftp_stream , string $command ): array'\n\t},\n\tftp_rawlist: {\n\t\tdescription: 'Returns a detailed list of files in the given directory',\n\t\tsignature: '( resource $ftp_stream , string $directory [, bool $recursive ]): array'\n\t},\n\tftp_rename: {\n\t\tdescription: 'Renames a file or a directory on the FTP server',\n\t\tsignature: '( resource $ftp_stream , string $oldname , string $newname ): bool'\n\t},\n\tftp_rmdir: {\n\t\tdescription: 'Removes a directory',\n\t\tsignature: '( resource $ftp_stream , string $directory ): bool'\n\t},\n\tftp_set_option: {\n\t\tdescription: 'Set miscellaneous runtime FTP options',\n\t\tsignature: '( resource $ftp_stream , int $option , mixed $value ): bool'\n\t},\n\tftp_site: {\n\t\tdescription: 'Sends a SITE command to the server',\n\t\tsignature: '( resource $ftp_stream , string $command ): bool'\n\t},\n\tftp_size: {\n\t\tdescription: 'Returns the size of the given file',\n\t\tsignature: '( resource $ftp_stream , string $remote_file ): int'\n\t},\n\tftp_ssl_connect: {\n\t\tdescription: 'Opens a Secure SSL-FTP connection',\n\t\tsignature: '( string $host [, int $port = 21 [, int $timeout = 90 ]]): resource'\n\t},\n\tftp_systype: {\n\t\tdescription: 'Returns the system type identifier of the remote FTP server',\n\t\tsignature: '( resource $ftp_stream ): string'\n\t},\n\tcheckdnsrr: {\n\t\tdescription: 'Check DNS records corresponding to a given Internet host name or IP address',\n\t\tsignature: '( string $host [, string $type = \"MX\" ]): bool'\n\t},\n\tcloselog: {\n\t\tdescription: 'Close connection to system logger',\n\t\tsignature: '(void): bool'\n\t},\n\tdefine_syslog_variables: {\n\t\tdescription: 'Initializes all syslog related variables',\n\t\tsignature: '(void): void'\n\t},\n\tdns_check_record: {\n\t\tdescription: 'Alias of checkdnsrr',\n\t},\n\tdns_get_mx: {\n\t\tdescription: 'Alias of getmxrr',\n\t},\n\tdns_get_record: {\n\t\tdescription: 'Fetch DNS Resource Records associated with a hostname',\n\t\tsignature: '( string $hostname [, int $type = DNS_ANY [, array $authns [, array $addtl [, bool $raw ]]]]): array'\n\t},\n\tfsockopen: {\n\t\tdescription: 'Open Internet or Unix domain socket connection',\n\t\tsignature: '( string $hostname [, int $port = -1 [, int $errno [, string $errstr [, float $timeout = ini_get(\"default_socket_timeout\") ]]]]): resource'\n\t},\n\tgethostbyaddr: {\n\t\tdescription: 'Get the Internet host name corresponding to a given IP address',\n\t\tsignature: '( string $ip_address ): string'\n\t},\n\tgethostbyname: {\n\t\tdescription: 'Get the IPv4 address corresponding to a given Internet host name',\n\t\tsignature: '( string $hostname ): string'\n\t},\n\tgethostbynamel: {\n\t\tdescription: 'Get a list of IPv4 addresses corresponding to a given Internet host   name',\n\t\tsignature: '( string $hostname ): array'\n\t},\n\tgethostname: {\n\t\tdescription: 'Gets the host name',\n\t\tsignature: '(void): string'\n\t},\n\tgetmxrr: {\n\t\tdescription: 'Get MX records corresponding to a given Internet host name',\n\t\tsignature: '( string $hostname , array $mxhosts [, array $weight ]): bool'\n\t},\n\tgetprotobyname: {\n\t\tdescription: 'Get protocol number associated with protocol name',\n\t\tsignature: '( string $name ): int'\n\t},\n\tgetprotobynumber: {\n\t\tdescription: 'Get protocol name associated with protocol number',\n\t\tsignature: '( int $number ): string'\n\t},\n\tgetservbyname: {\n\t\tdescription: 'Get port number associated with an Internet service and protocol',\n\t\tsignature: '( string $service , string $protocol ): int'\n\t},\n\tgetservbyport: {\n\t\tdescription: 'Get Internet service which corresponds to port and protocol',\n\t\tsignature: '( int $port , string $protocol ): string'\n\t},\n\theader_register_callback: {\n\t\tdescription: 'Call a header function',\n\t\tsignature: '( callable $callback ): bool'\n\t},\n\theader_remove: {\n\t\tdescription: 'Remove previously set headers',\n\t\tsignature: '([ string $name ]): void'\n\t},\n\theader: {\n\t\tdescription: 'Send a raw HTTP header',\n\t\tsignature: '( string $header [, bool $replace [, int $http_response_code ]]): void'\n\t},\n\theaders_list: {\n\t\tdescription: 'Returns a list of response headers sent (or ready to send)',\n\t\tsignature: '(void): array'\n\t},\n\theaders_sent: {\n\t\tdescription: 'Checks if or where headers have been sent',\n\t\tsignature: '([ string $file [, int $line ]]): bool'\n\t},\n\thttp_response_code: {\n\t\tdescription: 'Get or Set the HTTP response code',\n\t\tsignature: '([ int $response_code ]): mixed'\n\t},\n\tinet_ntop: {\n\t\tdescription: 'Converts a packed internet address to a human readable representation',\n\t\tsignature: '( string $in_addr ): string'\n\t},\n\tinet_pton: {\n\t\tdescription: 'Converts a human readable IP address to its packed in_addr representation',\n\t\tsignature: '( string $address ): string'\n\t},\n\tip2long: {\n\t\tdescription: 'Converts a string containing an (IPv4) Internet Protocol dotted address into a long integer',\n\t\tsignature: '( string $ip_address ): int'\n\t},\n\tlong2ip: {\n\t\tdescription: 'Converts an long integer address into a string in (IPv4) Internet standard dotted format',\n\t\tsignature: '( int $proper_address ): string'\n\t},\n\topenlog: {\n\t\tdescription: 'Open connection to system logger',\n\t\tsignature: '( string $ident , int $option , int $facility ): bool'\n\t},\n\tpfsockopen: {\n\t\tdescription: 'Open persistent Internet or Unix domain socket connection',\n\t\tsignature: '( string $hostname [, int $port = -1 [, int $errno [, string $errstr [, float $timeout = ini_get(\"default_socket_timeout\") ]]]]): resource'\n\t},\n\tsetcookie: {\n\t\tdescription: 'Send a cookie',\n\t\tsignature: '( string $name [, string $value = \"\" [, int $expires = 0 [, string $path = \"\" [, string $domain = \"\" [, bool $secure [, bool $httponly [, array $options = [] ]]]]]]]): bool'\n\t},\n\tsetrawcookie: {\n\t\tdescription: 'Send a cookie without urlencoding the cookie value',\n\t\tsignature: '( string $name [, string $value [, int $expires = 0 [, string $path [, string $domain [, bool $secure [, bool $httponly [, array $options = [] ]]]]]]]): bool'\n\t},\n\tsocket_get_status: {\n\t\tdescription: 'Alias of stream_get_meta_data',\n\t},\n\tsocket_set_blocking: {\n\t\tdescription: 'Alias of stream_set_blocking',\n\t},\n\tsocket_set_timeout: {\n\t\tdescription: 'Alias of stream_set_timeout',\n\t},\n\tsyslog: {\n\t\tdescription: 'Generate a system log message',\n\t\tsignature: '( int $priority , string $message ): bool'\n\t},\n\tsocket_accept: {\n\t\tdescription: 'Accepts a connection on a socket',\n\t\tsignature: '( resource $socket ): resource'\n\t},\n\tsocket_addrinfo_bind: {\n\t\tdescription: 'Create and bind to a socket from a given addrinfo',\n\t\tsignature: '( resource $addr ): resource'\n\t},\n\tsocket_addrinfo_connect: {\n\t\tdescription: 'Create and connect to a socket from a given addrinfo',\n\t\tsignature: '( resource $addr ): resource'\n\t},\n\tsocket_addrinfo_explain: {\n\t\tdescription: 'Get information about addrinfo',\n\t\tsignature: '( resource $addr ): array'\n\t},\n\tsocket_addrinfo_lookup: {\n\t\tdescription: 'Get array with contents of getaddrinfo about the given hostname',\n\t\tsignature: '( string $host [, string $service [, array $hints ]]): array'\n\t},\n\tsocket_bind: {\n\t\tdescription: 'Binds a name to a socket',\n\t\tsignature: '( resource $socket , string $address [, int $port = 0 ]): bool'\n\t},\n\tsocket_clear_error: {\n\t\tdescription: 'Clears the error on the socket or the last error code',\n\t\tsignature: '([ resource $socket ]): void'\n\t},\n\tsocket_close: {\n\t\tdescription: 'Closes a socket resource',\n\t\tsignature: '( resource $socket ): void'\n\t},\n\tsocket_cmsg_space: {\n\t\tdescription: 'Calculate message buffer size',\n\t\tsignature: '( int $level , int $type [, int $n = 0 ]): int'\n\t},\n\tsocket_connect: {\n\t\tdescription: 'Initiates a connection on a socket',\n\t\tsignature: '( resource $socket , string $address [, int $port = 0 ]): bool'\n\t},\n\tsocket_create_listen: {\n\t\tdescription: 'Opens a socket on port to accept connections',\n\t\tsignature: '( int $port [, int $backlog = 128 ]): resource'\n\t},\n\tsocket_create_pair: {\n\t\tdescription: 'Creates a pair of indistinguishable sockets and stores them in an array',\n\t\tsignature: '( int $domain , int $type , int $protocol , array $fd ): bool'\n\t},\n\tsocket_create: {\n\t\tdescription: 'Create a socket (endpoint for communication)',\n\t\tsignature: '( int $domain , int $type , int $protocol ): resource'\n\t},\n\tsocket_export_stream: {\n\t\tdescription: 'Export a socket extension resource into a stream that encapsulates a socket',\n\t\tsignature: '( resource $socket ): resource'\n\t},\n\tsocket_get_option: {\n\t\tdescription: 'Gets socket options for the socket',\n\t\tsignature: '( resource $socket , int $level , int $optname ): mixed'\n\t},\n\tsocket_getopt: {\n\t\tdescription: 'Alias of socket_get_option',\n\t},\n\tsocket_getpeername: {\n\t\tdescription: 'Queries the remote side of the given socket which may either result in host/port or in a Unix filesystem path, dependent on its type',\n\t\tsignature: '( resource $socket , string $address [, int $port ]): bool'\n\t},\n\tsocket_getsockname: {\n\t\tdescription: 'Queries the local side of the given socket which may either result in host/port or in a Unix filesystem path, dependent on its type',\n\t\tsignature: '( resource $socket , string $addr [, int $port ]): bool'\n\t},\n\tsocket_import_stream: {\n\t\tdescription: 'Import a stream',\n\t\tsignature: '( resource $stream ): resource'\n\t},\n\tsocket_last_error: {\n\t\tdescription: 'Returns the last error on the socket',\n\t\tsignature: '([ resource $socket ]): int'\n\t},\n\tsocket_listen: {\n\t\tdescription: 'Listens for a connection on a socket',\n\t\tsignature: '( resource $socket [, int $backlog = 0 ]): bool'\n\t},\n\tsocket_read: {\n\t\tdescription: 'Reads a maximum of length bytes from a socket',\n\t\tsignature: '( resource $socket , int $length [, int $type = PHP_BINARY_READ ]): string'\n\t},\n\tsocket_recv: {\n\t\tdescription: 'Receives data from a connected socket',\n\t\tsignature: '( resource $socket , string $buf , int $len , int $flags ): int'\n\t},\n\tsocket_recvfrom: {\n\t\tdescription: 'Receives data from a socket whether or not it is connection-oriented',\n\t\tsignature: '( resource $socket , string $buf , int $len , int $flags , string $name [, int $port ]): int'\n\t},\n\tsocket_recvmsg: {\n\t\tdescription: 'Read a message',\n\t\tsignature: '( resource $socket , array $message [, int $flags = 0 ]): int'\n\t},\n\tsocket_select: {\n\t\tdescription: 'Runs the select() system call on the given arrays of sockets with a specified timeout',\n\t\tsignature: '( array $read , array $write , array $except , int $tv_sec [, int $tv_usec = 0 ]): int'\n\t},\n\tsocket_send: {\n\t\tdescription: 'Sends data to a connected socket',\n\t\tsignature: '( resource $socket , string $buf , int $len , int $flags ): int'\n\t},\n\tsocket_sendmsg: {\n\t\tdescription: 'Send a message',\n\t\tsignature: '( resource $socket , array $message [, int $flags = 0 ]): int'\n\t},\n\tsocket_sendto: {\n\t\tdescription: 'Sends a message to a socket, whether it is connected or not',\n\t\tsignature: '( resource $socket , string $buf , int $len , int $flags , string $addr [, int $port = 0 ]): int'\n\t},\n\tsocket_set_block: {\n\t\tdescription: 'Sets blocking mode on a socket resource',\n\t\tsignature: '( resource $socket ): bool'\n\t},\n\tsocket_set_nonblock: {\n\t\tdescription: 'Sets nonblocking mode for file descriptor fd',\n\t\tsignature: '( resource $socket ): bool'\n\t},\n\tsocket_set_option: {\n\t\tdescription: 'Sets socket options for the socket',\n\t\tsignature: '( resource $socket , int $level , int $optname , mixed $optval ): bool'\n\t},\n\tsocket_setopt: {\n\t\tdescription: 'Alias of socket_set_option',\n\t},\n\tsocket_shutdown: {\n\t\tdescription: 'Shuts down a socket for receiving, sending, or both',\n\t\tsignature: '( resource $socket [, int $how = 2 ]): bool'\n\t},\n\tsocket_strerror: {\n\t\tdescription: 'Return a string describing a socket error',\n\t\tsignature: '( int $errno ): string'\n\t},\n\tsocket_write: {\n\t\tdescription: 'Write to a socket',\n\t\tsignature: '( resource $socket , string $buffer [, int $length = 0 ]): int'\n\t},\n\tapache_child_terminate: {\n\t\tdescription: 'Terminate apache process after this request',\n\t\tsignature: '(void): bool'\n\t},\n\tapache_get_modules: {\n\t\tdescription: 'Get a list of loaded Apache modules',\n\t\tsignature: '(void): array'\n\t},\n\tapache_get_version: {\n\t\tdescription: 'Fetch Apache version',\n\t\tsignature: '(void): string'\n\t},\n\tapache_getenv: {\n\t\tdescription: 'Get an Apache subprocess_env variable',\n\t\tsignature: '( string $variable [, bool $walk_to_top ]): string'\n\t},\n\tapache_lookup_uri: {\n\t\tdescription: 'Perform a partial request for the specified URI and return all info about it',\n\t\tsignature: '( string $filename ): object'\n\t},\n\tapache_note: {\n\t\tdescription: 'Get and set apache request notes',\n\t\tsignature: '( string $note_name [, string $note_value = \"\" ]): string'\n\t},\n\tapache_request_headers: {\n\t\tdescription: 'Fetch all HTTP request headers',\n\t\tsignature: '(void): array'\n\t},\n\tapache_reset_timeout: {\n\t\tdescription: 'Reset the Apache write timer',\n\t\tsignature: '(void): bool'\n\t},\n\tapache_response_headers: {\n\t\tdescription: 'Fetch all HTTP response headers',\n\t\tsignature: '(void): array'\n\t},\n\tapache_setenv: {\n\t\tdescription: 'Set an Apache subprocess_env variable',\n\t\tsignature: '( string $variable , string $value [, bool $walk_to_top ]): bool'\n\t},\n\tgetallheaders: {\n\t\tdescription: 'Fetch all HTTP request headers',\n\t\tsignature: '(void): array'\n\t},\n\tvirtual: {\n\t\tdescription: 'Perform an Apache sub-request',\n\t\tsignature: '( string $filename ): bool'\n\t},\n\tnsapi_request_headers: {\n\t\tdescription: 'Fetch all HTTP request headers',\n\t\tsignature: '(void): array'\n\t},\n\tnsapi_response_headers: {\n\t\tdescription: 'Fetch all HTTP response headers',\n\t\tsignature: '(void): array'\n\t},\n\tnsapi_virtual: {\n\t\tdescription: 'Perform an NSAPI sub-request',\n\t\tsignature: '( string $uri ): bool'\n\t},\n\tsession_abort: {\n\t\tdescription: 'Discard session array changes and finish session',\n\t\tsignature: '(void): bool'\n\t},\n\tsession_cache_expire: {\n\t\tdescription: 'Return current cache expire',\n\t\tsignature: '([ string $new_cache_expire ]): int'\n\t},\n\tsession_cache_limiter: {\n\t\tdescription: 'Get and/or set the current cache limiter',\n\t\tsignature: '([ string $cache_limiter ]): string'\n\t},\n\tsession_commit: {\n\t\tdescription: 'Alias of session_write_close',\n\t},\n\tsession_create_id: {\n\t\tdescription: 'Create new session id',\n\t\tsignature: '([ string $prefix ]): string'\n\t},\n\tsession_decode: {\n\t\tdescription: 'Decodes session data from a session encoded string',\n\t\tsignature: '( string $data ): bool'\n\t},\n\tsession_destroy: {\n\t\tdescription: 'Destroys all data registered to a session',\n\t\tsignature: '(void): bool'\n\t},\n\tsession_encode: {\n\t\tdescription: 'Encodes the current session data as a session encoded string',\n\t\tsignature: '(void): string'\n\t},\n\tsession_gc: {\n\t\tdescription: 'Perform session data garbage collection',\n\t\tsignature: '(void): int'\n\t},\n\tsession_get_cookie_params: {\n\t\tdescription: 'Get the session cookie parameters',\n\t\tsignature: '(void): array'\n\t},\n\tsession_id: {\n\t\tdescription: 'Get and/or set the current session id',\n\t\tsignature: '([ string $id ]): string'\n\t},\n\tsession_is_registered: {\n\t\tdescription: 'Find out whether a global variable is registered in a session',\n\t\tsignature: '( string $name ): bool'\n\t},\n\tsession_module_name: {\n\t\tdescription: 'Get and/or set the current session module',\n\t\tsignature: '([ string $module ]): string'\n\t},\n\tsession_name: {\n\t\tdescription: 'Get and/or set the current session name',\n\t\tsignature: '([ string $name ]): string'\n\t},\n\tsession_regenerate_id: {\n\t\tdescription: 'Update the current session id with a newly generated one',\n\t\tsignature: '([ bool $delete_old_session ]): bool'\n\t},\n\tsession_register_shutdown: {\n\t\tdescription: 'Session shutdown function',\n\t\tsignature: '(void): void'\n\t},\n\tsession_register: {\n\t\tdescription: 'Register one or more global variables with the current session',\n\t\tsignature: '( mixed $name [, mixed $... ]): bool'\n\t},\n\tsession_reset: {\n\t\tdescription: 'Re-initialize session array with original values',\n\t\tsignature: '(void): bool'\n\t},\n\tsession_save_path: {\n\t\tdescription: 'Get and/or set the current session save path',\n\t\tsignature: '([ string $path ]): string'\n\t},\n\tsession_set_cookie_params: {\n\t\tdescription: 'Set the session cookie parameters',\n\t\tsignature: '( int $lifetime [, string $path [, string $domain [, bool $secure [, bool $httponly , array $options ]]]]): bool'\n\t},\n\tsession_set_save_handler: {\n\t\tdescription: 'Sets user-level session storage functions',\n\t\tsignature: '( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp , object $sessionhandler [, bool $register_shutdown ]]]]): bool'\n\t},\n\tsession_start: {\n\t\tdescription: 'Start new or resume existing session',\n\t\tsignature: '([ array $options = array() ]): bool'\n\t},\n\tsession_status: {\n\t\tdescription: 'Returns the current session status',\n\t\tsignature: '(void): int'\n\t},\n\tsession_unregister: {\n\t\tdescription: 'Unregister a global variable from the current session',\n\t\tsignature: '( string $name ): bool'\n\t},\n\tsession_unset: {\n\t\tdescription: 'Free all session variables',\n\t\tsignature: '(void): bool'\n\t},\n\tsession_write_close: {\n\t\tdescription: 'Write session data and end session',\n\t\tsignature: '(void): bool'\n\t},\n\tpreg_filter: {\n\t\tdescription: 'Perform a regular expression search and replace',\n\t\tsignature: '( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int $count ]]): mixed'\n\t},\n\tpreg_grep: {\n\t\tdescription: 'Return array entries that match the pattern',\n\t\tsignature: '( string $pattern , array $input [, int $flags = 0 ]): array'\n\t},\n\tpreg_last_error: {\n\t\tdescription: 'Returns the error code of the last PCRE regex execution',\n\t\tsignature: '(void): int'\n\t},\n\tpreg_match_all: {\n\t\tdescription: 'Perform a global regular expression match',\n\t\tsignature: '( string $pattern , string $subject [, array $matches [, int $flags [, int $offset = 0 ]]]): int'\n\t},\n\tpreg_match: {\n\t\tdescription: 'Perform a regular expression match',\n\t\tsignature: '( string $pattern , string $subject [, array $matches [, int $flags = 0 [, int $offset = 0 ]]]): int'\n\t},\n\tpreg_quote: {\n\t\tdescription: 'Quote regular expression characters',\n\t\tsignature: '( string $str [, string $delimiter ]): string'\n\t},\n\tpreg_replace_callback_array: {\n\t\tdescription: 'Perform a regular expression search and replace using callbacks',\n\t\tsignature: '( array $patterns_and_callbacks , mixed $subject [, int $limit = -1 [, int $count ]]): mixed'\n\t},\n\tpreg_replace_callback: {\n\t\tdescription: 'Perform a regular expression search and replace using a callback',\n\t\tsignature: '( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int $count ]]): mixed'\n\t},\n\tpreg_replace: {\n\t\tdescription: 'Perform a regular expression search and replace',\n\t\tsignature: '( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int $count ]]): mixed'\n\t},\n\tpreg_split: {\n\t\tdescription: 'Split string by a regular expression',\n\t\tsignature: '( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]]): array'\n\t},\n\taddcslashes: {\n\t\tdescription: 'Quote string with slashes in a C style',\n\t\tsignature: '( string $str , string $charlist ): string'\n\t},\n\taddslashes: {\n\t\tdescription: 'Quote string with slashes',\n\t\tsignature: '( string $str ): string'\n\t},\n\tbin2hex: {\n\t\tdescription: 'Convert binary data into hexadecimal representation',\n\t\tsignature: '( string $str ): string'\n\t},\n\tchop: {\n\t\tdescription: 'Alias of rtrim',\n\t},\n\tchr: {\n\t\tdescription: 'Generate a single-byte string from a number',\n\t\tsignature: '( int $bytevalue ): string'\n\t},\n\tchunk_split: {\n\t\tdescription: 'Split a string into smaller chunks',\n\t\tsignature: '( string $body [, int $chunklen = 76 [, string $end = \"\\r\\n\" ]]): string'\n\t},\n\tconvert_cyr_string: {\n\t\tdescription: 'Convert from one Cyrillic character set to another',\n\t\tsignature: '( string $str , string $from , string $to ): string'\n\t},\n\tconvert_uudecode: {\n\t\tdescription: 'Decode a uuencoded string',\n\t\tsignature: '( string $data ): string'\n\t},\n\tconvert_uuencode: {\n\t\tdescription: 'Uuencode a string',\n\t\tsignature: '( string $data ): string'\n\t},\n\tcount_chars: {\n\t\tdescription: 'Return information about characters used in a string',\n\t\tsignature: '( string $string [, int $mode = 0 ]): mixed'\n\t},\n\tcrc32: {\n\t\tdescription: 'Calculates the crc32 polynomial of a string',\n\t\tsignature: '( string $str ): int'\n\t},\n\tcrypt: {\n\t\tdescription: 'One-way string hashing',\n\t\tsignature: '( string $str [, string $salt ]): string'\n\t},\n\techo: {\n\t\tdescription: 'Output one or more strings',\n\t\tsignature: '( string $arg1 [, string $... ]): void'\n\t},\n\texplode: {\n\t\tdescription: 'Split a string by a string',\n\t\tsignature: '( string $delimiter , string $string [, int $limit = PHP_INT_MAX ]): array'\n\t},\n\tfprintf: {\n\t\tdescription: 'Write a formatted string to a stream',\n\t\tsignature: '( resource $handle , string $format [, mixed $... ]): int'\n\t},\n\tget_html_translation_table: {\n\t\tdescription: 'Returns the translation table used by htmlspecialchars and htmlentities',\n\t\tsignature: '([ int $table = HTML_SPECIALCHARS [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = \"UTF-8\" ]]]): array'\n\t},\n\thebrev: {\n\t\tdescription: 'Convert logical Hebrew text to visual text',\n\t\tsignature: '( string $hebrew_text [, int $max_chars_per_line = 0 ]): string'\n\t},\n\thebrevc: {\n\t\tdescription: 'Convert logical Hebrew text to visual text with newline conversion',\n\t\tsignature: '( string $hebrew_text [, int $max_chars_per_line = 0 ]): string'\n\t},\n\thex2bin: {\n\t\tdescription: 'Decodes a hexadecimally encoded binary string',\n\t\tsignature: '( string $data ): string'\n\t},\n\thtml_entity_decode: {\n\t\tdescription: 'Convert HTML entities to their corresponding characters',\n\t\tsignature: '( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get(\"default_charset\") ]]): string'\n\t},\n\thtmlentities: {\n\t\tdescription: 'Convert all applicable characters to HTML entities',\n\t\tsignature: '( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get(\"default_charset\") [, bool $double_encode ]]]): string'\n\t},\n\thtmlspecialchars_decode: {\n\t\tdescription: 'Convert special HTML entities back to characters',\n\t\tsignature: '( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ]): string'\n\t},\n\thtmlspecialchars: {\n\t\tdescription: 'Convert special characters to HTML entities',\n\t\tsignature: '( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get(\"default_charset\") [, bool $double_encode ]]]): string'\n\t},\n\timplode: {\n\t\tdescription: 'Join array elements with a string',\n\t\tsignature: '( string $glue , array $pieces ): string'\n\t},\n\tjoin: {\n\t\tdescription: 'Alias of implode',\n\t},\n\tlcfirst: {\n\t\tdescription: 'Make a string\\'s first character lowercase',\n\t\tsignature: '( string $str ): string'\n\t},\n\tlevenshtein: {\n\t\tdescription: 'Calculate Levenshtein distance between two strings',\n\t\tsignature: '( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del ): int'\n\t},\n\tlocaleconv: {\n\t\tdescription: 'Get numeric formatting information',\n\t\tsignature: '(void): array'\n\t},\n\tltrim: {\n\t\tdescription: 'Strip whitespace (or other characters) from the beginning of a string',\n\t\tsignature: '( string $str [, string $character_mask ]): string'\n\t},\n\tmd5_file: {\n\t\tdescription: 'Calculates the md5 hash of a given file',\n\t\tsignature: '( string $filename [, bool $raw_output ]): string'\n\t},\n\tmd5: {\n\t\tdescription: 'Calculate the md5 hash of a string',\n\t\tsignature: '( string $str [, bool $raw_output ]): string'\n\t},\n\tmetaphone: {\n\t\tdescription: 'Calculate the metaphone key of a string',\n\t\tsignature: '( string $str [, int $phonemes = 0 ]): string'\n\t},\n\tmoney_format: {\n\t\tdescription: 'Formats a number as a currency string',\n\t\tsignature: '( string $format , float $number ): string'\n\t},\n\tnl_langinfo: {\n\t\tdescription: 'Query language and locale information',\n\t\tsignature: '( int $item ): string'\n\t},\n\tnl2br: {\n\t\tdescription: 'Inserts HTML line breaks before all newlines in a string',\n\t\tsignature: '( string $string [, bool $is_xhtml ]): string'\n\t},\n\tnumber_format: {\n\t\tdescription: 'Format a number with grouped thousands',\n\t\tsignature: '( float $number , int $decimals = 0 , string $dec_point = \".\" , string $thousands_sep = \",\" ): string'\n\t},\n\tord: {\n\t\tdescription: 'Convert the first byte of a string to a value between 0 and 255',\n\t\tsignature: '( string $string ): int'\n\t},\n\tparse_str: {\n\t\tdescription: 'Parses the string into variables',\n\t\tsignature: '( string $encoded_string [, array $result ]): void'\n\t},\n\tprint: {\n\t\tdescription: 'Output a string',\n\t\tsignature: '( string $arg ): int'\n\t},\n\tprintf: {\n\t\tdescription: 'Output a formatted string',\n\t\tsignature: '( string $format [, mixed $... ]): int'\n\t},\n\tquoted_printable_decode: {\n\t\tdescription: 'Convert a quoted-printable string to an 8 bit string',\n\t\tsignature: '( string $str ): string'\n\t},\n\tquoted_printable_encode: {\n\t\tdescription: 'Convert a 8 bit string to a quoted-printable string',\n\t\tsignature: '( string $str ): string'\n\t},\n\tquotemeta: {\n\t\tdescription: 'Quote meta characters',\n\t\tsignature: '( string $str ): string'\n\t},\n\trtrim: {\n\t\tdescription: 'Strip whitespace (or other characters) from the end of a string',\n\t\tsignature: '( string $str [, string $character_mask ]): string'\n\t},\n\tsetlocale: {\n\t\tdescription: 'Set locale information',\n\t\tsignature: '( int $category , array $locale [, string $... ]): string'\n\t},\n\tsha1_file: {\n\t\tdescription: 'Calculate the sha1 hash of a file',\n\t\tsignature: '( string $filename [, bool $raw_output ]): string'\n\t},\n\tsha1: {\n\t\tdescription: 'Calculate the sha1 hash of a string',\n\t\tsignature: '( string $str [, bool $raw_output ]): string'\n\t},\n\tsimilar_text: {\n\t\tdescription: 'Calculate the similarity between two strings',\n\t\tsignature: '( string $first , string $second [, float $percent ]): int'\n\t},\n\tsoundex: {\n\t\tdescription: 'Calculate the soundex key of a string',\n\t\tsignature: '( string $str ): string'\n\t},\n\tsprintf: {\n\t\tdescription: 'Return a formatted string',\n\t\tsignature: '( string $format [, mixed $... ]): string'\n\t},\n\tsscanf: {\n\t\tdescription: 'Parses input from a string according to a format',\n\t\tsignature: '( string $str , string $format [, mixed $... ]): mixed'\n\t},\n\tstr_getcsv: {\n\t\tdescription: 'Parse a CSV string into an array',\n\t\tsignature: '( string $input [, string $delimiter = \",\" [, string $enclosure = \\'\"\\' [, string $escape = \"\\\\\" ]]]): array'\n\t},\n\tstr_ireplace: {\n\t\tdescription: 'Case-insensitive version of str_replace',\n\t\tsignature: '( mixed $search , mixed $replace , mixed $subject [, int $count ]): mixed'\n\t},\n\tstr_pad: {\n\t\tdescription: 'Pad a string to a certain length with another string',\n\t\tsignature: '( string $input , int $pad_length [, string $pad_string = \" \" [, int $pad_type = STR_PAD_RIGHT ]]): string'\n\t},\n\tstr_repeat: {\n\t\tdescription: 'Repeat a string',\n\t\tsignature: '( string $input , int $multiplier ): string'\n\t},\n\tstr_replace: {\n\t\tdescription: 'Replace all occurrences of the search string with the replacement string',\n\t\tsignature: '( mixed $search , mixed $replace , mixed $subject [, int $count ]): mixed'\n\t},\n\tstr_rot13: {\n\t\tdescription: 'Perform the rot13 transform on a string',\n\t\tsignature: '( string $str ): string'\n\t},\n\tstr_shuffle: {\n\t\tdescription: 'Randomly shuffles a string',\n\t\tsignature: '( string $str ): string'\n\t},\n\tstr_split: {\n\t\tdescription: 'Convert a string to an array',\n\t\tsignature: '( string $string [, int $split_length = 1 ]): array'\n\t},\n\tstr_word_count: {\n\t\tdescription: 'Return information about words used in a string',\n\t\tsignature: '( string $string [, int $format = 0 [, string $charlist ]]): mixed'\n\t},\n\tstrcasecmp: {\n\t\tdescription: 'Binary safe case-insensitive string comparison',\n\t\tsignature: '( string $str1 , string $str2 ): int'\n\t},\n\tstrchr: {\n\t\tdescription: 'Alias of strstr',\n\t},\n\tstrcmp: {\n\t\tdescription: 'Binary safe string comparison',\n\t\tsignature: '( string $str1 , string $str2 ): int'\n\t},\n\tstrcoll: {\n\t\tdescription: 'Locale based string comparison',\n\t\tsignature: '( string $str1 , string $str2 ): int'\n\t},\n\tstrcspn: {\n\t\tdescription: 'Find length of initial segment not matching mask',\n\t\tsignature: '( string $subject , string $mask [, int $start [, int $length ]]): int'\n\t},\n\tstrip_tags: {\n\t\tdescription: 'Strip HTML and PHP tags from a string',\n\t\tsignature: '( string $str [, string $allowable_tags ]): string'\n\t},\n\tstripcslashes: {\n\t\tdescription: 'Un-quote string quoted with addcslashes',\n\t\tsignature: '( string $str ): string'\n\t},\n\tstripos: {\n\t\tdescription: 'Find the position of the first occurrence of a case-insensitive substring in a string',\n\t\tsignature: '( string $haystack , mixed $needle [, int $offset = 0 ]): int'\n\t},\n\tstripslashes: {\n\t\tdescription: 'Un-quotes a quoted string',\n\t\tsignature: '( string $str ): string'\n\t},\n\tstristr: {\n\t\tdescription: 'Case-insensitive strstr',\n\t\tsignature: '( string $haystack , mixed $needle [, bool $before_needle ]): string'\n\t},\n\tstrlen: {\n\t\tdescription: 'Get string length',\n\t\tsignature: '( string $string ): int'\n\t},\n\tstrnatcasecmp: {\n\t\tdescription: 'Case insensitive string comparisons using a \"natural order\" algorithm',\n\t\tsignature: '( string $str1 , string $str2 ): int'\n\t},\n\tstrnatcmp: {\n\t\tdescription: 'String comparisons using a \"natural order\" algorithm',\n\t\tsignature: '( string $str1 , string $str2 ): int'\n\t},\n\tstrncasecmp: {\n\t\tdescription: 'Binary safe case-insensitive string comparison of the first n characters',\n\t\tsignature: '( string $str1 , string $str2 , int $len ): int'\n\t},\n\tstrncmp: {\n\t\tdescription: 'Binary safe string comparison of the first n characters',\n\t\tsignature: '( string $str1 , string $str2 , int $len ): int'\n\t},\n\tstrpbrk: {\n\t\tdescription: 'Search a string for any of a set of characters',\n\t\tsignature: '( string $haystack , string $char_list ): string'\n\t},\n\tstrpos: {\n\t\tdescription: 'Find the position of the first occurrence of a substring in a string',\n\t\tsignature: '( string $haystack , mixed $needle [, int $offset = 0 ]): int'\n\t},\n\tstrrchr: {\n\t\tdescription: 'Find the last occurrence of a character in a string',\n\t\tsignature: '( string $haystack , mixed $needle ): string'\n\t},\n\tstrrev: {\n\t\tdescription: 'Reverse a string',\n\t\tsignature: '( string $string ): string'\n\t},\n\tstrripos: {\n\t\tdescription: 'Find the position of the last occurrence of a case-insensitive substring in a string',\n\t\tsignature: '( string $haystack , mixed $needle [, int $offset = 0 ]): int'\n\t},\n\tstrrpos: {\n\t\tdescription: 'Find the position of the last occurrence of a substring in a string',\n\t\tsignature: '( string $haystack , mixed $needle [, int $offset = 0 ]): int'\n\t},\n\tstrspn: {\n\t\tdescription: 'Finds the length of the initial segment of a string consisting   entirely of characters contained within a given mask',\n\t\tsignature: '( string $subject , string $mask [, int $start [, int $length ]]): int'\n\t},\n\tstrstr: {\n\t\tdescription: 'Find the first occurrence of a string',\n\t\tsignature: '( string $haystack , mixed $needle [, bool $before_needle ]): string'\n\t},\n\tstrtok: {\n\t\tdescription: 'Tokenize string',\n\t\tsignature: '( string $str , string $token ): string'\n\t},\n\tstrtolower: {\n\t\tdescription: 'Make a string lowercase',\n\t\tsignature: '( string $string ): string'\n\t},\n\tstrtoupper: {\n\t\tdescription: 'Make a string uppercase',\n\t\tsignature: '( string $string ): string'\n\t},\n\tstrtr: {\n\t\tdescription: 'Translate characters or replace substrings',\n\t\tsignature: '( string $str , string $from , string $to , array $replace_pairs ): string'\n\t},\n\tsubstr_compare: {\n\t\tdescription: 'Binary safe comparison of two strings from an offset, up to length characters',\n\t\tsignature: '( string $main_str , string $str , int $offset [, int $length [, bool $case_insensitivity ]]): int'\n\t},\n\tsubstr_count: {\n\t\tdescription: 'Count the number of substring occurrences',\n\t\tsignature: '( string $haystack , string $needle [, int $offset = 0 [, int $length ]]): int'\n\t},\n\tsubstr_replace: {\n\t\tdescription: 'Replace text within a portion of a string',\n\t\tsignature: '( mixed $string , mixed $replacement , mixed $start [, mixed $length ]): mixed'\n\t},\n\tsubstr: {\n\t\tdescription: 'Return part of a string',\n\t\tsignature: '( string $string , int $start [, int $length ]): string'\n\t},\n\ttrim: {\n\t\tdescription: 'Strip whitespace (or other characters) from the beginning and end of a string',\n\t\tsignature: '( string $str [, string $character_mask = \" \\t\\n\\r\\0\\x0B\" ]): string'\n\t},\n\tucfirst: {\n\t\tdescription: 'Make a string\\'s first character uppercase',\n\t\tsignature: '( string $str ): string'\n\t},\n\tucwords: {\n\t\tdescription: 'Uppercase the first character of each word in a string',\n\t\tsignature: '( string $str [, string $delimiters = \" \\t\\r\\n\\f\\v\" ]): string'\n\t},\n\tvfprintf: {\n\t\tdescription: 'Write a formatted string to a stream',\n\t\tsignature: '( resource $handle , string $format , array $args ): int'\n\t},\n\tvprintf: {\n\t\tdescription: 'Output a formatted string',\n\t\tsignature: '( string $format , array $args ): int'\n\t},\n\tvsprintf: {\n\t\tdescription: 'Return a formatted string',\n\t\tsignature: '( string $format , array $args ): string'\n\t},\n\twordwrap: {\n\t\tdescription: 'Wraps a string to a given number of characters',\n\t\tsignature: '( string $str [, int $width = 75 [, string $break = \"\\n\" [, bool $cut ]]]): string'\n\t},\n\tarray_change_key_case: {\n\t\tdescription: 'Changes the case of all keys in an array',\n\t\tsignature: '( array $array [, int $case = CASE_LOWER ]): array'\n\t},\n\tarray_chunk: {\n\t\tdescription: 'Split an array into chunks',\n\t\tsignature: '( array $array , int $size [, bool $preserve_keys ]): array'\n\t},\n\tarray_column: {\n\t\tdescription: 'Return the values from a single column in the input array',\n\t\tsignature: '( array $input , mixed $column_key [, mixed $index_key ]): array'\n\t},\n\tarray_combine: {\n\t\tdescription: 'Creates an array by using one array for keys and another for its values',\n\t\tsignature: '( array $keys , array $values ): array'\n\t},\n\tarray_count_values: {\n\t\tdescription: 'Counts all the values of an array',\n\t\tsignature: '( array $array ): array'\n\t},\n\tarray_diff_assoc: {\n\t\tdescription: 'Computes the difference of arrays with additional index check',\n\t\tsignature: '( array $array1 , array $array2 [, array $... ]): array'\n\t},\n\tarray_diff_key: {\n\t\tdescription: 'Computes the difference of arrays using keys for comparison',\n\t\tsignature: '( array $array1 , array $array2 [, array $... ]): array'\n\t},\n\tarray_diff_uassoc: {\n\t\tdescription: 'Computes the difference of arrays with additional index check which is performed by a user supplied callback function',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $key_compare_func ]): array'\n\t},\n\tarray_diff_ukey: {\n\t\tdescription: 'Computes the difference of arrays using a callback function on the keys for comparison',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $key_compare_func ]): array'\n\t},\n\tarray_diff: {\n\t\tdescription: 'Computes the difference of arrays',\n\t\tsignature: '( array $array1 , array $array2 [, array $... ]): array'\n\t},\n\tarray_fill_keys: {\n\t\tdescription: 'Fill an array with values, specifying keys',\n\t\tsignature: '( array $keys , mixed $value ): array'\n\t},\n\tarray_fill: {\n\t\tdescription: 'Fill an array with values',\n\t\tsignature: '( int $start_index , int $num , mixed $value ): array'\n\t},\n\tarray_filter: {\n\t\tdescription: 'Filters elements of an array using a callback function',\n\t\tsignature: '( array $array [, callable $callback [, int $flag = 0 ]]): array'\n\t},\n\tarray_flip: {\n\t\tdescription: 'Exchanges all keys with their associated values in an array',\n\t\tsignature: '( array $array ): string'\n\t},\n\tarray_intersect_assoc: {\n\t\tdescription: 'Computes the intersection of arrays with additional index check',\n\t\tsignature: '( array $array1 , array $array2 [, array $... ]): array'\n\t},\n\tarray_intersect_key: {\n\t\tdescription: 'Computes the intersection of arrays using keys for comparison',\n\t\tsignature: '( array $array1 , array $array2 [, array $... ]): array'\n\t},\n\tarray_intersect_uassoc: {\n\t\tdescription: 'Computes the intersection of arrays with additional index check, compares indexes by a callback function',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $key_compare_func ]): array'\n\t},\n\tarray_intersect_ukey: {\n\t\tdescription: 'Computes the intersection of arrays using a callback function on the keys for comparison',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $key_compare_func ]): array'\n\t},\n\tarray_intersect: {\n\t\tdescription: 'Computes the intersection of arrays',\n\t\tsignature: '( array $array1 , array $array2 [, array $... ]): array'\n\t},\n\tarray_key_exists: {\n\t\tdescription: 'Checks if the given key or index exists in the array',\n\t\tsignature: '( mixed $key , array $array ): bool'\n\t},\n\tarray_key_first: {\n\t\tdescription: 'Gets the first key of an array',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\tarray_key_last: {\n\t\tdescription: 'Gets the last key of an array',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\tarray_keys: {\n\t\tdescription: 'Return all the keys or a subset of the keys of an array',\n\t\tsignature: '( array $array , mixed $search_value [, bool $strict ]): array'\n\t},\n\tarray_map: {\n\t\tdescription: 'Applies the callback to the elements of the given arrays',\n\t\tsignature: '( callable $callback , array $array1 [, array $... ]): array'\n\t},\n\tarray_merge_recursive: {\n\t\tdescription: 'Merge one or more arrays recursively',\n\t\tsignature: '( array $array1 [, array $... ]): array'\n\t},\n\tarray_merge: {\n\t\tdescription: 'Merge one or more arrays',\n\t\tsignature: '( array $array1 [, array $... ]): array'\n\t},\n\tarray_multisort: {\n\t\tdescription: 'Sort multiple or multi-dimensional arrays',\n\t\tsignature: '( array $array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]]): string'\n\t},\n\tarray_pad: {\n\t\tdescription: 'Pad array to the specified length with a value',\n\t\tsignature: '( array $array , int $size , mixed $value ): array'\n\t},\n\tarray_pop: {\n\t\tdescription: 'Pop the element off the end of array',\n\t\tsignature: '( array $array ): array'\n\t},\n\tarray_product: {\n\t\tdescription: 'Calculate the product of values in an array',\n\t\tsignature: '( array $array ): number'\n\t},\n\tarray_push: {\n\t\tdescription: 'Push one or more elements onto the end of array',\n\t\tsignature: '( array $array [, mixed $... ]): int'\n\t},\n\tarray_rand: {\n\t\tdescription: 'Pick one or more random keys out of an array',\n\t\tsignature: '( array $array [, int $num = 1 ]): mixed'\n\t},\n\tarray_reduce: {\n\t\tdescription: 'Iteratively reduce the array to a single value using a callback function',\n\t\tsignature: '( array $array , callable $callback [, mixed $initial ]): mixed'\n\t},\n\tarray_replace_recursive: {\n\t\tdescription: 'Replaces elements from passed arrays into the first array recursively',\n\t\tsignature: '( array $array1 [, array $... ]): array'\n\t},\n\tarray_replace: {\n\t\tdescription: 'Replaces elements from passed arrays into the first array',\n\t\tsignature: '( array $array1 [, array $... ]): array'\n\t},\n\tarray_reverse: {\n\t\tdescription: 'Return an array with elements in reverse order',\n\t\tsignature: '( array $array [, bool $preserve_keys ]): array'\n\t},\n\tarray_search: {\n\t\tdescription: 'Searches the array for a given value and returns the first corresponding key if successful',\n\t\tsignature: '( mixed $needle , array $haystack [, bool $strict ]): mixed'\n\t},\n\tarray_shift: {\n\t\tdescription: 'Shift an element off the beginning of array',\n\t\tsignature: '( array $array ): array'\n\t},\n\tarray_slice: {\n\t\tdescription: 'Extract a slice of the array',\n\t\tsignature: '( array $array , int $offset [, int $length [, bool $preserve_keys ]]): array'\n\t},\n\tarray_splice: {\n\t\tdescription: 'Remove a portion of the array and replace it with something else',\n\t\tsignature: '( array $input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]]): array'\n\t},\n\tarray_sum: {\n\t\tdescription: 'Calculate the sum of values in an array',\n\t\tsignature: '( array $array ): number'\n\t},\n\tarray_udiff_assoc: {\n\t\tdescription: 'Computes the difference of arrays with additional index check, compares data by a callback function',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $value_compare_func ]): array'\n\t},\n\tarray_udiff_uassoc: {\n\t\tdescription: 'Computes the difference of arrays with additional index check, compares data and indexes by a callback function',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $value_compare_func , callable $key_compare_func ]): array'\n\t},\n\tarray_udiff: {\n\t\tdescription: 'Computes the difference of arrays by using a callback function for data comparison',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $value_compare_func ]): array'\n\t},\n\tarray_uintersect_assoc: {\n\t\tdescription: 'Computes the intersection of arrays with additional index check, compares data by a callback function',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $value_compare_func ]): array'\n\t},\n\tarray_uintersect_uassoc: {\n\t\tdescription: 'Computes the intersection of arrays with additional index check, compares data and indexes by separate callback functions',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $value_compare_func , callable $key_compare_func ]): array'\n\t},\n\tarray_uintersect: {\n\t\tdescription: 'Computes the intersection of arrays, compares data by a callback function',\n\t\tsignature: '( array $array1 , array $array2 [, array $... , callable $value_compare_func ]): array'\n\t},\n\tarray_unique: {\n\t\tdescription: 'Removes duplicate values from an array',\n\t\tsignature: '( array $array [, int $sort_flags = SORT_STRING ]): array'\n\t},\n\tarray_unshift: {\n\t\tdescription: 'Prepend one or more elements to the beginning of an array',\n\t\tsignature: '( array $array [, mixed $... ]): int'\n\t},\n\tarray_values: {\n\t\tdescription: 'Return all the values of an array',\n\t\tsignature: '( array $array ): array'\n\t},\n\tarray_walk_recursive: {\n\t\tdescription: 'Apply a user function recursively to every member of an array',\n\t\tsignature: '( array $array , callable $callback [, mixed $userdata ]): bool'\n\t},\n\tarray_walk: {\n\t\tdescription: 'Apply a user supplied function to every member of an array',\n\t\tsignature: '( array $array , callable $callback [, mixed $userdata ]): bool'\n\t},\n\tarray: {\n\t\tdescription: 'Create an array',\n\t\tsignature: '([ mixed $... ]): array'\n\t},\n\tarsort: {\n\t\tdescription: 'Sort an array in reverse order and maintain index association',\n\t\tsignature: '( array $array [, int $sort_flags = SORT_REGULAR ]): bool'\n\t},\n\tasort: {\n\t\tdescription: 'Sort an array and maintain index association',\n\t\tsignature: '( array $array [, int $sort_flags = SORT_REGULAR ]): bool'\n\t},\n\tcompact: {\n\t\tdescription: 'Create array containing variables and their values',\n\t\tsignature: '( mixed $varname1 [, mixed $... ]): array'\n\t},\n\tcount: {\n\t\tdescription: 'Count all elements in an array, or something in an object',\n\t\tsignature: '( mixed $array_or_countable [, int $mode = COUNT_NORMAL ]): int'\n\t},\n\tcurrent: {\n\t\tdescription: 'Return the current element in an array',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\teach: {\n\t\tdescription: 'Return the current key and value pair from an array and advance the array cursor',\n\t\tsignature: '( array $array ): array'\n\t},\n\tend: {\n\t\tdescription: 'Set the internal pointer of an array to its last element',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\textract: {\n\t\tdescription: 'Import variables into the current symbol table from an array',\n\t\tsignature: '( array $array [, int $flags = EXTR_OVERWRITE [, string $prefix ]]): int'\n\t},\n\tin_array: {\n\t\tdescription: 'Checks if a value exists in an array',\n\t\tsignature: '( mixed $needle , array $haystack [, bool $strict ]): bool'\n\t},\n\tkey_exists: {\n\t\tdescription: 'Alias of array_key_exists',\n\t},\n\tkey: {\n\t\tdescription: 'Fetch a key from an array',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\tkrsort: {\n\t\tdescription: 'Sort an array by key in reverse order',\n\t\tsignature: '( array $array [, int $sort_flags = SORT_REGULAR ]): bool'\n\t},\n\tksort: {\n\t\tdescription: 'Sort an array by key',\n\t\tsignature: '( array $array [, int $sort_flags = SORT_REGULAR ]): bool'\n\t},\n\tlist: {\n\t\tdescription: 'Assign variables as if they were an array',\n\t\tsignature: '( mixed $var1 [, mixed $... ]): array'\n\t},\n\tnatcasesort: {\n\t\tdescription: 'Sort an array using a case insensitive \"natural order\" algorithm',\n\t\tsignature: '( array $array ): bool'\n\t},\n\tnatsort: {\n\t\tdescription: 'Sort an array using a \"natural order\" algorithm',\n\t\tsignature: '( array $array ): bool'\n\t},\n\tnext: {\n\t\tdescription: 'Advance the internal pointer of an array',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\tpos: {\n\t\tdescription: 'Alias of current',\n\t},\n\tprev: {\n\t\tdescription: 'Rewind the internal array pointer',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\trange: {\n\t\tdescription: 'Create an array containing a range of elements',\n\t\tsignature: '( mixed $start , mixed $end [, number $step = 1 ]): array'\n\t},\n\treset: {\n\t\tdescription: 'Set the internal pointer of an array to its first element',\n\t\tsignature: '( array $array ): mixed'\n\t},\n\trsort: {\n\t\tdescription: 'Sort an array in reverse order',\n\t\tsignature: '( array $array [, int $sort_flags = SORT_REGULAR ]): bool'\n\t},\n\tshuffle: {\n\t\tdescription: 'Shuffle an array',\n\t\tsignature: '( array $array ): bool'\n\t},\n\tsizeof: {\n\t\tdescription: 'Alias of count',\n\t},\n\tsort: {\n\t\tdescription: 'Sort an array',\n\t\tsignature: '( array $array [, int $sort_flags = SORT_REGULAR ]): bool'\n\t},\n\tuasort: {\n\t\tdescription: 'Sort an array with a user-defined comparison function and maintain index association',\n\t\tsignature: '( array $array , callable $value_compare_func ): bool'\n\t},\n\tuksort: {\n\t\tdescription: 'Sort an array by keys using a user-defined comparison function',\n\t\tsignature: '( array $array , callable $key_compare_func ): bool'\n\t},\n\tusort: {\n\t\tdescription: 'Sort an array by values using a user-defined comparison function',\n\t\tsignature: '( array $array , callable $value_compare_func ): bool'\n\t},\n\t__autoload: {\n\t\tdescription: 'Attempt to load undefined class',\n\t\tsignature: '( string $class ): void'\n\t},\n\tcall_user_method_array: {\n\t\tdescription: 'Call a user method given with an array of parameters',\n\t\tsignature: '( string $method_name , object $obj , array $params ): mixed'\n\t},\n\tcall_user_method: {\n\t\tdescription: 'Call a user method on an specific object',\n\t\tsignature: '( string $method_name , object $obj [, mixed $... ]): mixed'\n\t},\n\tclass_alias: {\n\t\tdescription: 'Creates an alias for a class',\n\t\tsignature: '( string $original , string $alias [, bool $autoload ]): bool'\n\t},\n\tclass_exists: {\n\t\tdescription: 'Checks if the class has been defined',\n\t\tsignature: '( string $class_name [, bool $autoload ]): bool'\n\t},\n\tget_called_class: {\n\t\tdescription: 'The \"Late Static Binding\" class name',\n\t\tsignature: '(void): string'\n\t},\n\tget_class_methods: {\n\t\tdescription: 'Gets the class methods\\' names',\n\t\tsignature: '( mixed $class_name ): array'\n\t},\n\tget_class_vars: {\n\t\tdescription: 'Get the default properties of the class',\n\t\tsignature: '( string $class_name ): array'\n\t},\n\tget_class: {\n\t\tdescription: 'Returns the name of the class of an object',\n\t\tsignature: '([ object $object ]): string'\n\t},\n\tget_declared_classes: {\n\t\tdescription: 'Returns an array with the name of the defined classes',\n\t\tsignature: '(void): array'\n\t},\n\tget_declared_interfaces: {\n\t\tdescription: 'Returns an array of all declared interfaces',\n\t\tsignature: '(void): array'\n\t},\n\tget_declared_traits: {\n\t\tdescription: 'Returns an array of all declared traits',\n\t\tsignature: '(void): array'\n\t},\n\tget_object_vars: {\n\t\tdescription: 'Gets the properties of the given object',\n\t\tsignature: '( object $object ): array'\n\t},\n\tget_parent_class: {\n\t\tdescription: 'Retrieves the parent class name for object or class',\n\t\tsignature: '([ mixed $object ]): string'\n\t},\n\tinterface_exists: {\n\t\tdescription: 'Checks if the interface has been defined',\n\t\tsignature: '( string $interface_name [, bool $autoload ]): bool'\n\t},\n\tis_a: {\n\t\tdescription: 'Checks if the object is of this class or has this class as one of its parents',\n\t\tsignature: '( mixed $object , string $class_name [, bool $allow_string ]): bool'\n\t},\n\tis_subclass_of: {\n\t\tdescription: 'Checks if the object has this class as one of its parents or implements it',\n\t\tsignature: '( mixed $object , string $class_name [, bool $allow_string ]): bool'\n\t},\n\tmethod_exists: {\n\t\tdescription: 'Checks if the class method exists',\n\t\tsignature: '( mixed $object , string $method_name ): bool'\n\t},\n\tproperty_exists: {\n\t\tdescription: 'Checks if the object or class has a property',\n\t\tsignature: '( mixed $class , string $property ): bool'\n\t},\n\ttrait_exists: {\n\t\tdescription: 'Checks if the trait exists',\n\t\tsignature: '( string $traitname [, bool $autoload ]): bool'\n\t},\n\tctype_alnum: {\n\t\tdescription: 'Check for alphanumeric character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_alpha: {\n\t\tdescription: 'Check for alphabetic character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_cntrl: {\n\t\tdescription: 'Check for control character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_digit: {\n\t\tdescription: 'Check for numeric character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_graph: {\n\t\tdescription: 'Check for any printable character(s) except space',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_lower: {\n\t\tdescription: 'Check for lowercase character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_print: {\n\t\tdescription: 'Check for printable character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_punct: {\n\t\tdescription: 'Check for any printable character which is not whitespace or an   alphanumeric character',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_space: {\n\t\tdescription: 'Check for whitespace character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_upper: {\n\t\tdescription: 'Check for uppercase character(s)',\n\t\tsignature: '( string $text ): string'\n\t},\n\tctype_xdigit: {\n\t\tdescription: 'Check for character(s) representing a hexadecimal digit',\n\t\tsignature: '( string $text ): string'\n\t},\n\tfilter_has_var: {\n\t\tdescription: 'Checks if variable of specified type exists',\n\t\tsignature: '( int $type , string $variable_name ): bool'\n\t},\n\tfilter_id: {\n\t\tdescription: 'Returns the filter ID belonging to a named filter',\n\t\tsignature: '( string $filtername ): int'\n\t},\n\tfilter_input_array: {\n\t\tdescription: 'Gets external variables and optionally filters them',\n\t\tsignature: '( int $type [, mixed $definition [, bool $add_empty ]]): mixed'\n\t},\n\tfilter_input: {\n\t\tdescription: 'Gets a specific external variable by name and optionally filters it',\n\t\tsignature: '( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]]): mixed'\n\t},\n\tfilter_list: {\n\t\tdescription: 'Returns a list of all supported filters',\n\t\tsignature: '(void): array'\n\t},\n\tfilter_var_array: {\n\t\tdescription: 'Gets multiple variables and optionally filters them',\n\t\tsignature: '( array $data [, mixed $definition [, bool $add_empty ]]): mixed'\n\t},\n\tfilter_var: {\n\t\tdescription: 'Filters a variable with a specified filter',\n\t\tsignature: '( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]]): mixed'\n\t},\n\tcall_user_func_array: {\n\t\tdescription: 'Call a callback with an array of parameters',\n\t\tsignature: '( callable $callback , array $param_arr ): mixed'\n\t},\n\tcall_user_func: {\n\t\tdescription: 'Call the callback given by the first parameter',\n\t\tsignature: '( callable $callback [, mixed $... ]): mixed'\n\t},\n\tcreate_function: {\n\t\tdescription: 'Create an anonymous (lambda-style) function',\n\t\tsignature: '( string $args , string $code ): string'\n\t},\n\tforward_static_call_array: {\n\t\tdescription: 'Call a static method and pass the arguments as array',\n\t\tsignature: '( callable $function , array $parameters ): mixed'\n\t},\n\tforward_static_call: {\n\t\tdescription: 'Call a static method',\n\t\tsignature: '( callable $function [, mixed $... ]): mixed'\n\t},\n\tfunc_get_arg: {\n\t\tdescription: 'Return an item from the argument list',\n\t\tsignature: '( int $arg_num ): mixed'\n\t},\n\tfunc_get_args: {\n\t\tdescription: 'Returns an array comprising a function\\'s argument list',\n\t\tsignature: '(void): array'\n\t},\n\tfunc_num_args: {\n\t\tdescription: 'Returns the number of arguments passed to the function',\n\t\tsignature: '(void): int'\n\t},\n\tfunction_exists: {\n\t\tdescription: 'Return TRUE if the given function has been defined',\n\t\tsignature: '( string $function_name ): bool'\n\t},\n\tget_defined_functions: {\n\t\tdescription: 'Returns an array of all defined functions',\n\t\tsignature: '([ bool $exclude_disabled ]): array'\n\t},\n\tregister_shutdown_function: {\n\t\tdescription: 'Register a function for execution on shutdown',\n\t\tsignature: '( callable $callback [, mixed $... ]): void'\n\t},\n\tregister_tick_function: {\n\t\tdescription: 'Register a function for execution on each tick',\n\t\tsignature: '( callable $function [, mixed $... ]): bool'\n\t},\n\tunregister_tick_function: {\n\t\tdescription: 'De-register a function for execution on each tick',\n\t\tsignature: '( callable $function ): void'\n\t},\n\tboolval: {\n\t\tdescription: 'Get the boolean value of a variable',\n\t\tsignature: '( mixed $var ): boolean'\n\t},\n\tdebug_zval_dump: {\n\t\tdescription: 'Dumps a string representation of an internal zend value to output',\n\t\tsignature: '( mixed $variable [, mixed $... ]): void'\n\t},\n\tdoubleval: {\n\t\tdescription: 'Alias of floatval',\n\t},\n\tempty: {\n\t\tdescription: 'Determine whether a variable is empty',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tfloatval: {\n\t\tdescription: 'Get float value of a variable',\n\t\tsignature: '( mixed $var ): float'\n\t},\n\tget_defined_vars: {\n\t\tdescription: 'Returns an array of all defined variables',\n\t\tsignature: '(void): array'\n\t},\n\tget_resource_type: {\n\t\tdescription: 'Returns the resource type',\n\t\tsignature: '( resource $handle ): string'\n\t},\n\tgettype: {\n\t\tdescription: 'Get the type of a variable',\n\t\tsignature: '( mixed $var ): string'\n\t},\n\timport_request_variables: {\n\t\tdescription: 'Import GET/POST/Cookie variables into the global scope',\n\t\tsignature: '( string $types [, string $prefix ]): bool'\n\t},\n\tintval: {\n\t\tdescription: 'Get the integer value of a variable',\n\t\tsignature: '( mixed $var [, int $base = 10 ]): integer'\n\t},\n\tis_array: {\n\t\tdescription: 'Finds whether a variable is an array',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_bool: {\n\t\tdescription: 'Finds out whether a variable is a boolean',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_callable: {\n\t\tdescription: 'Verify that the contents of a variable can be called as a function',\n\t\tsignature: '( mixed $var [, bool $syntax_only [, string $callable_name ]]): bool'\n\t},\n\tis_countable: {\n\t\tdescription: 'Verify that the contents of a variable is a countable value',\n\t\tsignature: '( mixed $var ): array'\n\t},\n\tis_double: {\n\t\tdescription: 'Alias of is_float',\n\t},\n\tis_float: {\n\t\tdescription: 'Finds whether the type of a variable is float',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_int: {\n\t\tdescription: 'Find whether the type of a variable is integer',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_integer: {\n\t\tdescription: 'Alias of is_int',\n\t},\n\tis_iterable: {\n\t\tdescription: 'Verify that the contents of a variable is an iterable value',\n\t\tsignature: '( mixed $var ): array'\n\t},\n\tis_long: {\n\t\tdescription: 'Alias of is_int',\n\t},\n\tis_null: {\n\t\tdescription: 'Finds whether a variable is NULL',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_numeric: {\n\t\tdescription: 'Finds whether a variable is a number or a numeric string',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_object: {\n\t\tdescription: 'Finds whether a variable is an object',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_real: {\n\t\tdescription: 'Alias of is_float',\n\t},\n\tis_resource: {\n\t\tdescription: 'Finds whether a variable is a resource',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tis_scalar: {\n\t\tdescription: 'Finds whether a variable is a scalar',\n\t\tsignature: '( mixed $var ): resource'\n\t},\n\tis_string: {\n\t\tdescription: 'Find whether the type of a variable is string',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\tisset: {\n\t\tdescription: 'Determine if a variable is declared and is different than NULL',\n\t\tsignature: '( mixed $var [, mixed $... ]): bool'\n\t},\n\tprint_r: {\n\t\tdescription: 'Prints human-readable information about a variable',\n\t\tsignature: '( mixed $expression [, bool $return ]): mixed'\n\t},\n\tserialize: {\n\t\tdescription: 'Generates a storable representation of a value',\n\t\tsignature: '( mixed $value ): string'\n\t},\n\tsettype: {\n\t\tdescription: 'Set the type of a variable',\n\t\tsignature: '( mixed $var , string $type ): bool'\n\t},\n\tstrval: {\n\t\tdescription: 'Get string value of a variable',\n\t\tsignature: '( mixed $var ): string'\n\t},\n\tunserialize: {\n\t\tdescription: 'Creates a PHP value from a stored representation',\n\t\tsignature: '( string $str [, array $options ]): mixed'\n\t},\n\tunset: {\n\t\tdescription: 'Unset a given variable',\n\t\tsignature: '( mixed $var [, mixed $... ]): void'\n\t},\n\tvar_dump: {\n\t\tdescription: 'Dumps information about a variable',\n\t\tsignature: '( mixed $expression [, mixed $... ]): string'\n\t},\n\tvar_export: {\n\t\tdescription: 'Outputs or returns a parsable string representation of a variable',\n\t\tsignature: '( mixed $expression [, bool $return ]): mixed'\n\t},\n\txmlrpc_decode_request: {\n\t\tdescription: 'Decodes XML into native PHP types',\n\t\tsignature: '( string $xml , string $method [, string $encoding ]): mixed'\n\t},\n\txmlrpc_decode: {\n\t\tdescription: 'Decodes XML into native PHP types',\n\t\tsignature: '( string $xml [, string $encoding = \"iso-8859-1\" ]): mixed'\n\t},\n\txmlrpc_encode_request: {\n\t\tdescription: 'Generates XML for a method request',\n\t\tsignature: '( string $method , mixed $params [, array $output_options ]): string'\n\t},\n\txmlrpc_encode: {\n\t\tdescription: 'Generates XML for a PHP value',\n\t\tsignature: '( mixed $value ): string'\n\t},\n\txmlrpc_get_type: {\n\t\tdescription: 'Gets xmlrpc type for a PHP value',\n\t\tsignature: '( mixed $value ): string'\n\t},\n\txmlrpc_is_fault: {\n\t\tdescription: 'Determines if an array value represents an XMLRPC fault',\n\t\tsignature: '( array $arg ): bool'\n\t},\n\txmlrpc_parse_method_descriptions: {\n\t\tdescription: 'Decodes XML into a list of method descriptions',\n\t\tsignature: '( string $xml ): array'\n\t},\n\txmlrpc_server_add_introspection_data: {\n\t\tdescription: 'Adds introspection documentation',\n\t\tsignature: '( resource $server , array $desc ): int'\n\t},\n\txmlrpc_server_call_method: {\n\t\tdescription: 'Parses XML requests and call methods',\n\t\tsignature: '( resource $server , string $xml , mixed $user_data [, array $output_options ]): string'\n\t},\n\txmlrpc_server_create: {\n\t\tdescription: 'Creates an xmlrpc server',\n\t\tsignature: '(void): resource'\n\t},\n\txmlrpc_server_destroy: {\n\t\tdescription: 'Destroys server resources',\n\t\tsignature: '( resource $server ): bool'\n\t},\n\txmlrpc_server_register_introspection_callback: {\n\t\tdescription: 'Register a PHP function to generate documentation',\n\t\tsignature: '( resource $server , string $function ): bool'\n\t},\n\txmlrpc_server_register_method: {\n\t\tdescription: 'Register a PHP function to resource method matching method_name',\n\t\tsignature: '( resource $server , string $method_name , string $function ): bool'\n\t},\n\txmlrpc_set_type: {\n\t\tdescription: 'Sets xmlrpc type, base64 or datetime, for a PHP string value',\n\t\tsignature: '( string $value , string $type ): bool'\n\t},\n\tcom_create_guid: {\n\t\tdescription: 'Generate a globally unique identifier (GUID)',\n\t\tsignature: '(void): string'\n\t},\n\tcom_event_sink: {\n\t\tdescription: 'Connect events from a COM object to a PHP object',\n\t\tsignature: '( variant $comobject , object $sinkobject [, mixed $sinkinterface ]): bool'\n\t},\n\tcom_get_active_object: {\n\t\tdescription: 'Returns a handle to an already running instance of a COM object',\n\t\tsignature: '( string $progid [, int $code_page ]): variant'\n\t},\n\tcom_load_typelib: {\n\t\tdescription: 'Loads a Typelib',\n\t\tsignature: '( string $typelib_name [, bool $case_sensitive ]): bool'\n\t},\n\tcom_message_pump: {\n\t\tdescription: 'Process COM messages, sleeping for up to timeoutms milliseconds',\n\t\tsignature: '([ int $timeoutms = 0 ]): bool'\n\t},\n\tcom_print_typeinfo: {\n\t\tdescription: 'Print out a PHP class definition for a dispatchable interface',\n\t\tsignature: '( object $comobject [, string $dispinterface [, bool $wantsink ]]): bool'\n\t},\n\tvariant_abs: {\n\t\tdescription: 'Returns the absolute value of a variant',\n\t\tsignature: '( mixed $val ): mixed'\n\t},\n\tvariant_add: {\n\t\tdescription: '\"Adds\" two variant values together and returns the result',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_and: {\n\t\tdescription: 'Performs a bitwise AND operation between two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_cast: {\n\t\tdescription: 'Convert a variant into a new variant object of another type',\n\t\tsignature: '( variant $variant , int $type ): variant'\n\t},\n\tvariant_cat: {\n\t\tdescription: 'Concatenates two variant values together and returns the result',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_cmp: {\n\t\tdescription: 'Compares two variants',\n\t\tsignature: '( mixed $left , mixed $right [, int $lcid [, int $flags ]]): int'\n\t},\n\tvariant_date_from_timestamp: {\n\t\tdescription: 'Returns a variant date representation of a Unix timestamp',\n\t\tsignature: '( int $timestamp ): variant'\n\t},\n\tvariant_date_to_timestamp: {\n\t\tdescription: 'Converts a variant date/time value to Unix timestamp',\n\t\tsignature: '( variant $variant ): int'\n\t},\n\tvariant_div: {\n\t\tdescription: 'Returns the result from dividing two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_eqv: {\n\t\tdescription: 'Performs a bitwise equivalence on two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_fix: {\n\t\tdescription: 'Returns the integer portion of a variant',\n\t\tsignature: '( mixed $variant ): mixed'\n\t},\n\tvariant_get_type: {\n\t\tdescription: 'Returns the type of a variant object',\n\t\tsignature: '( variant $variant ): int'\n\t},\n\tvariant_idiv: {\n\t\tdescription: 'Converts variants to integers and then returns the result from dividing them',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_imp: {\n\t\tdescription: 'Performs a bitwise implication on two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_int: {\n\t\tdescription: 'Returns the integer portion of a variant',\n\t\tsignature: '( mixed $variant ): mixed'\n\t},\n\tvariant_mod: {\n\t\tdescription: 'Divides two variants and returns only the remainder',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_mul: {\n\t\tdescription: 'Multiplies the values of the two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_neg: {\n\t\tdescription: 'Performs logical negation on a variant',\n\t\tsignature: '( mixed $variant ): mixed'\n\t},\n\tvariant_not: {\n\t\tdescription: 'Performs bitwise not negation on a variant',\n\t\tsignature: '( mixed $variant ): mixed'\n\t},\n\tvariant_or: {\n\t\tdescription: 'Performs a logical disjunction on two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_pow: {\n\t\tdescription: 'Returns the result of performing the power function with two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_round: {\n\t\tdescription: 'Rounds a variant to the specified number of decimal places',\n\t\tsignature: '( mixed $variant , int $decimals ): mixed'\n\t},\n\tvariant_set_type: {\n\t\tdescription: 'Convert a variant into another type \"in-place\"',\n\t\tsignature: '( variant $variant , int $type ): void'\n\t},\n\tvariant_set: {\n\t\tdescription: 'Assigns a new value for a variant object',\n\t\tsignature: '( variant $variant , mixed $value ): void'\n\t},\n\tvariant_sub: {\n\t\tdescription: 'Subtracts the value of the right variant from the left variant value',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tvariant_xor: {\n\t\tdescription: 'Performs a logical exclusion on two variants',\n\t\tsignature: '( mixed $left , mixed $right ): mixed'\n\t},\n\tlibxml_clear_errors: {\n\t\tdescription: 'Clear libxml error buffer',\n\t\tsignature: '(void): void'\n\t},\n\tlibxml_disable_entity_loader: {\n\t\tdescription: 'Disable the ability to load external entities',\n\t\tsignature: '([ bool $disable ]): bool'\n\t},\n\tlibxml_get_errors: {\n\t\tdescription: 'Retrieve array of errors',\n\t\tsignature: '(void): array'\n\t},\n\tlibxml_get_last_error: {\n\t\tdescription: 'Retrieve last error from libxml',\n\t\tsignature: '(void): LibXMLError'\n\t},\n\tlibxml_set_external_entity_loader: {\n\t\tdescription: 'Changes the default external entity loader',\n\t\tsignature: '( callable $resolver_function ): bool'\n\t},\n\tlibxml_set_streams_context: {\n\t\tdescription: 'Set the streams context for the next libxml document load or write',\n\t\tsignature: '( resource $streams_context ): void'\n\t},\n\tlibxml_use_internal_errors: {\n\t\tdescription: 'Disable libxml errors and allow user to fetch error information as needed',\n\t\tsignature: '([ bool $use_errors ]): bool'\n\t},\n\tsimplexml_import_dom: {\n\t\tdescription: 'Get a SimpleXMLElement object from a DOM node',\n\t\tsignature: '( DOMNode $node [, string $class_name = \"SimpleXMLElement\" ]): SimpleXMLElement'\n\t},\n\tsimplexml_load_file: {\n\t\tdescription: 'Interprets an XML file into an object',\n\t\tsignature: '( string $filename [, string $class_name = \"SimpleXMLElement\" [, int $options = 0 [, string $ns = \"\" [, bool $is_prefix ]]]]): SimpleXMLElement'\n\t},\n\tsimplexml_load_string: {\n\t\tdescription: 'Interprets a string of XML into an object',\n\t\tsignature: '( string $data [, string $class_name = \"SimpleXMLElement\" [, int $options = 0 [, string $ns = \"\" [, bool $is_prefix ]]]]): SimpleXMLElement'\n\t},\n\tutf8_decode: {\n\t\tdescription: 'Converts a string with ISO-8859-1 characters encoded with UTF-8   to single-byte ISO-8859-1',\n\t\tsignature: '( string $data ): string'\n\t},\n\tutf8_encode: {\n\t\tdescription: 'Encodes an ISO-8859-1 string to UTF-8',\n\t\tsignature: '( string $data ): string'\n\t},\n\txml_error_string: {\n\t\tdescription: 'Get XML parser error string',\n\t\tsignature: '( int $code ): string'\n\t},\n\txml_get_current_byte_index: {\n\t\tdescription: 'Get current byte index for an XML parser',\n\t\tsignature: '( resource $parser ): int'\n\t},\n\txml_get_current_column_number: {\n\t\tdescription: 'Get current column number for an XML parser',\n\t\tsignature: '( resource $parser ): int'\n\t},\n\txml_get_current_line_number: {\n\t\tdescription: 'Get current line number for an XML parser',\n\t\tsignature: '( resource $parser ): int'\n\t},\n\txml_get_error_code: {\n\t\tdescription: 'Get XML parser error code',\n\t\tsignature: '( resource $parser ): int'\n\t},\n\txml_parse_into_struct: {\n\t\tdescription: 'Parse XML data into an array structure',\n\t\tsignature: '( resource $parser , string $data , array $values [, array $index ]): int'\n\t},\n\txml_parse: {\n\t\tdescription: 'Start parsing an XML document',\n\t\tsignature: '( resource $parser , string $data [, bool $is_final ]): int'\n\t},\n\txml_parser_create_ns: {\n\t\tdescription: 'Create an XML parser with namespace support',\n\t\tsignature: '([ string $encoding [, string $separator = \":\" ]]): resource'\n\t},\n\txml_parser_create: {\n\t\tdescription: 'Create an XML parser',\n\t\tsignature: '([ string $encoding ]): resource'\n\t},\n\txml_parser_free: {\n\t\tdescription: 'Free an XML parser',\n\t\tsignature: '( resource $parser ): bool'\n\t},\n\txml_parser_get_option: {\n\t\tdescription: 'Get options from an XML parser',\n\t\tsignature: '( resource $parser , int $option ): mixed'\n\t},\n\txml_parser_set_option: {\n\t\tdescription: 'Set options in an XML parser',\n\t\tsignature: '( resource $parser , int $option , mixed $value ): bool'\n\t},\n\txml_set_character_data_handler: {\n\t\tdescription: 'Set up character data handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txml_set_default_handler: {\n\t\tdescription: 'Set up default handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txml_set_element_handler: {\n\t\tdescription: 'Set up start and end element handlers',\n\t\tsignature: '( resource $parser , callable $start_element_handler , callable $end_element_handler ): bool'\n\t},\n\txml_set_end_namespace_decl_handler: {\n\t\tdescription: 'Set up end namespace declaration handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txml_set_external_entity_ref_handler: {\n\t\tdescription: 'Set up external entity reference handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txml_set_notation_decl_handler: {\n\t\tdescription: 'Set up notation declaration handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txml_set_object: {\n\t\tdescription: 'Use XML Parser within an object',\n\t\tsignature: '( resource $parser , object $object ): bool'\n\t},\n\txml_set_processing_instruction_handler: {\n\t\tdescription: 'Set up processing instruction (PI) handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txml_set_start_namespace_decl_handler: {\n\t\tdescription: 'Set up start namespace declaration handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txml_set_unparsed_entity_decl_handler: {\n\t\tdescription: 'Set up unparsed entity declaration handler',\n\t\tsignature: '( resource $parser , callable $handler ): bool'\n\t},\n\txmlwriter_end_attribute: {\n\t\tdescription: 'End attribute',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_cdata: {\n\t\tdescription: 'End current CDATA',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_comment: {\n\t\tdescription: 'Create end comment',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_document: {\n\t\tdescription: 'End current document',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_dtd_attlist: {\n\t\tdescription: 'End current DTD AttList',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_dtd_element: {\n\t\tdescription: 'End current DTD element',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_dtd_entity: {\n\t\tdescription: 'End current DTD Entity',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_dtd: {\n\t\tdescription: 'End current DTD',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_element: {\n\t\tdescription: 'End current element',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_end_pi: {\n\t\tdescription: 'End current PI',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_flush: {\n\t\tdescription: 'Flush current buffer',\n\t\tsignature: '([ bool $empty , resource $xmlwriter ]): mixed'\n\t},\n\txmlwriter_full_end_element: {\n\t\tdescription: 'End current element',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_open_memory: {\n\t\tdescription: 'Create new xmlwriter using memory for string output',\n\t\tsignature: '(void): resource'\n\t},\n\txmlwriter_open_uri: {\n\t\tdescription: 'Create new xmlwriter using source uri for output',\n\t\tsignature: '( string $uri ): resource'\n\t},\n\txmlwriter_output_memory: {\n\t\tdescription: 'Returns current buffer',\n\t\tsignature: '([ bool $flush , resource $xmlwriter ]): string'\n\t},\n\txmlwriter_set_indent_string: {\n\t\tdescription: 'Set string used for indenting',\n\t\tsignature: '( string $indentString , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_set_indent: {\n\t\tdescription: 'Toggle indentation on/off',\n\t\tsignature: '( bool $indent , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_attribute_ns: {\n\t\tdescription: 'Create start namespaced attribute',\n\t\tsignature: '( string $prefix , string $name , string $uri , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_attribute: {\n\t\tdescription: 'Create start attribute',\n\t\tsignature: '( string $name , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_cdata: {\n\t\tdescription: 'Create start CDATA tag',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_comment: {\n\t\tdescription: 'Create start comment',\n\t\tsignature: '( resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_document: {\n\t\tdescription: 'Create document tag',\n\t\tsignature: '([ string $version = 1.0 [, string $encoding [, string $standalone , resource $xmlwriter ]]]): bool'\n\t},\n\txmlwriter_start_dtd_attlist: {\n\t\tdescription: 'Create start DTD AttList',\n\t\tsignature: '( string $name , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_dtd_element: {\n\t\tdescription: 'Create start DTD element',\n\t\tsignature: '( string $qualifiedName , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_dtd_entity: {\n\t\tdescription: 'Create start DTD Entity',\n\t\tsignature: '( string $name , bool $isparam , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_dtd: {\n\t\tdescription: 'Create start DTD tag',\n\t\tsignature: '( string $qualifiedName [, string $publicId [, string $systemId , resource $xmlwriter ]]): bool'\n\t},\n\txmlwriter_start_element_ns: {\n\t\tdescription: 'Create start namespaced element tag',\n\t\tsignature: '( string $prefix , string $name , string $uri , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_element: {\n\t\tdescription: 'Create start element tag',\n\t\tsignature: '( string $name , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_start_pi: {\n\t\tdescription: 'Create start PI tag',\n\t\tsignature: '( string $target , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_text: {\n\t\tdescription: 'Write text',\n\t\tsignature: '( string $content , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_attribute_ns: {\n\t\tdescription: 'Write full namespaced attribute',\n\t\tsignature: '( string $prefix , string $name , string $uri , string $content , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_attribute: {\n\t\tdescription: 'Write full attribute',\n\t\tsignature: '( string $name , string $value , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_cdata: {\n\t\tdescription: 'Write full CDATA tag',\n\t\tsignature: '( string $content , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_comment: {\n\t\tdescription: 'Write full comment tag',\n\t\tsignature: '( string $content , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_dtd_attlist: {\n\t\tdescription: 'Write full DTD AttList tag',\n\t\tsignature: '( string $name , string $content , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_dtd_element: {\n\t\tdescription: 'Write full DTD element tag',\n\t\tsignature: '( string $name , string $content , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_dtd_entity: {\n\t\tdescription: 'Write full DTD Entity tag',\n\t\tsignature: '( string $name , string $content , bool $pe , string $pubid , string $sysid , string $ndataid , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_dtd: {\n\t\tdescription: 'Write full DTD tag',\n\t\tsignature: '( string $name [, string $publicId [, string $systemId [, string $subset , resource $xmlwriter ]]]): bool'\n\t},\n\txmlwriter_write_element_ns: {\n\t\tdescription: 'Write full namespaced element tag',\n\t\tsignature: '( string $prefix , string $name , string $uri [, string $content , resource $xmlwriter ]): bool'\n\t},\n\txmlwriter_write_element: {\n\t\tdescription: 'Write full element tag',\n\t\tsignature: '( string $name [, string $content , resource $xmlwriter ]): bool'\n\t},\n\txmlwriter_write_pi: {\n\t\tdescription: 'Writes a PI',\n\t\tsignature: '( string $target , string $content , resource $xmlwriter ): bool'\n\t},\n\txmlwriter_write_raw: {\n\t\tdescription: 'Write a raw XML text',\n\t\tsignature: '( string $content , resource $xmlwriter ): bool'\n\t},\n};\n"
  },
  {
    "path": "extensions/php-language-features/src/features/phpGlobals.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// file generated from PHP53Schema.xml using php-exclude_generate_php_globals.js\n\nexport interface IEntry { description?: string; signature?: string }\nexport interface IEntries { [name: string]: IEntry }\n\nexport const globalvariables: IEntries = {\n\t$GLOBALS: {\n\t\tdescription: 'An associative array containing references to all variables which are currently defined in the global scope of the script. The variable names are the keys of the array.',\n\t},\n\t$_SERVER: {\n\t\tdescription: '$_SERVER is an array containing information such as headers, paths, and script locations. The entries in this array are created by the web server. There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here. That said, a large number of these variables are accounted for in the CGI/1.1 specification, so you should be able to expect those.',\n\t},\n\t$_GET: {\n\t\tdescription: 'An associative array of variables passed to the current script via the URL parameters.',\n\t},\n\t$_POST: {\n\t\tdescription: 'An associative array of variables passed to the current script via the HTTP POST method.',\n\t},\n\t$_FILES: {\n\t\tdescription: 'An associative array of items uploaded to the current script via the HTTP POST method.',\n\t},\n\t$_REQUEST: {\n\t\tdescription: 'An associative array that by default contains the contents of $_GET, $_POST and $_COOKIE.',\n\t},\n\t$_SESSION: {\n\t\tdescription: 'An associative array containing session variables available to the current script. See the Session functions documentation for more information on how this is used.',\n\t},\n\t$_ENV: {\n\t\tdescription: 'An associative array of variables passed to the current script via the environment method. \\r\\n\\r\\nThese variables are imported into PHP\\'s global namespace from the environment under which the PHP parser is running. Many are provided by the shell under which PHP is running and different systems are likely running different kinds of shells, a definitive list is impossible. Please see your shell\\'s documentation for a list of defined environment variables. \\r\\n\\r\\nOther environment variables include the CGI variables, placed there regardless of whether PHP is running as a server module or CGI processor.',\n\t},\n\t$_COOKIE: {\n\t\tdescription: 'An associative array of variables passed to the current script via HTTP Cookies.',\n\t},\n\t$php_errormsg: {\n\t\tdescription: '$php_errormsg is a variable containing the text of the last error message generated by PHP. This variable will only be available within the scope in which the error occurred, and only if the track_errors configuration option is turned on (it defaults to off).',\n\t},\n\t$HTTP_RAW_POST_DATA: {\n\t\tdescription: '$HTTP_RAW_POST_DATA contains the raw POST data. See always_populate_raw_post_data',\n\t},\n\t$http_response_header: {\n\t\tdescription: 'The $http_response_header array is similar to the get_headers() function. When using the HTTP wrapper, $http_response_header will be populated with the HTTP response headers. $http_response_header will be created in the local scope.',\n\t},\n\t$argc: {\n\t\tdescription: 'Contains the number of arguments passed to the current script when running from the command line.',\n\t},\n\t$argv: {\n\t\tdescription: 'Contains an array of all the arguments passed to the script when running from the command line.',\n\t},\n\t$this: {\n\t\tdescription: 'Refers to the current object',\n\t},\n};\nexport const compiletimeconstants: IEntries = {\n\t__CLASS__: {\n\t\tdescription: 'The class name. (Added in PHP 4.3.0) As of PHP 5 this constant returns the class name as it was declared (case-sensitive). In PHP 4 its value is always lowercased.',\n\t},\n\t__DIR__: {\n\t\tdescription: 'The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__FILE__). This directory name does not have a trailing slash unless it is the root directory. (Added in PHP 5.3.0.)',\n\t},\n\t__FILE__: {\n\t\tdescription: 'The full path and filename of the file. If used inside an include, the name of the included file is returned. Since PHP 4.0.2, __FILE__ always contains an absolute path with symlinks resolved whereas in older versions it contained relative path under some circumstances.',\n\t},\n\t__FUNCTION__: {\n\t\tdescription: 'The function name. (Added in PHP 4.3.0) As of PHP 5 this constant returns the function name as it was declared (case-sensitive). In PHP 4 its value is always lowercased.',\n\t},\n\t__LINE__: {\n\t\tdescription: 'The current line number of the file.',\n\t},\n\t__METHOD__: {\n\t\tdescription: 'The class method name. (Added in PHP 5.0.0) The method name is returned as it was declared (case-sensitive).',\n\t},\n\t__NAMESPACE__: {\n\t\tdescription: 'The name of the current namespace (case-sensitive). This constant is defined in compile-time (Added in PHP 5.3.0).',\n\t},\n\tTRUE: {\n\t},\n\tFALSE: {\n\t},\n\tNULL: {\n\t},\n\tM_PI: {\n\t\tdescription: 'The constant Pi: 3.14159265358979323846',\n\t},\n\tM_E: {\n\t\tdescription: 'The constant e: 2.7182818284590452354',\n\t},\n\tM_LOG2E: {\n\t\tdescription: 'The constant log_2 e: 1.4426950408889634074',\n\t},\n\tM_LOG10E: {\n\t\tdescription: 'The constant log_10 e: 0.43429448190325182765',\n\t},\n\tM_LN2: {\n\t\tdescription: 'The constant log_e 2: 0.69314718055994530942',\n\t},\n\tM_LN10: {\n\t\tdescription: 'The constant log_e 10: 2.30258509299404568402',\n\t},\n\tM_PI_2: {\n\t\tdescription: 'The constant pi/2: 1.57079632679489661923',\n\t},\n\tM_PI_4: {\n\t\tdescription: 'The constant pi/4: 0.78539816339744830962',\n\t},\n\tM_1_PI: {\n\t\tdescription: 'The constant 1/pi: 0.31830988618379067154',\n\t},\n\tM_2_PI: {\n\t\tdescription: 'The constant 2/pi: 0.63661977236758134308',\n\t},\n\tM_SQRTPI: {\n\t\tdescription: 'The constant sqrt(pi): 1.77245385090551602729',\n\t},\n\tM_2_SQRTPI: {\n\t\tdescription: 'The constant 2/sqrt(pi): 1.12837916709551257390',\n\t},\n\tM_SQRT2: {\n\t\tdescription: 'The constant sqrt(2): 1.41421356237309504880',\n\t},\n\tM_SQRT3: {\n\t\tdescription: 'The constant sqrt(3): 1.73205080756887729352',\n\t},\n\tM_SQRT1_2: {\n\t\tdescription: 'The constant 1/sqrt(2): 0.7071067811865475244',\n\t},\n\tM_LNPI: {\n\t\tdescription: 'The constant log_e(pi): 1.14472988584940017414',\n\t},\n\tM_EULER: {\n\t\tdescription: 'Euler constant: 0.57721566490153286061',\n\t},\n\tPHP_ROUND_HALF_UP: {\n\t\tdescription: 'Round halves up = 1',\n\t},\n\tPHP_ROUND_HALF_DOWN: {\n\t\tdescription: 'Round halves down = 2',\n\t},\n\tPHP_ROUND_HALF_EVEN: {\n\t\tdescription: 'Round halves to even numbers = 3',\n\t},\n\tPHP_ROUND_HALF_ODD: {\n\t\tdescription: 'Round halvesto odd numbers = 4',\n\t},\n\tNAN: {\n\t\tdescription: 'NAN (as a float): Not A Number',\n\t},\n\tINF: {\n\t\tdescription: 'INF (as a float): The infinite',\n\t},\n\tPASSWORD_BCRYPT: {\n\t\tdescription: 'PASSWORD_BCRYPT is used to create new password hashes using the CRYPT_BLOWFISH algorithm.',\n\t},\n\tPASSWORD_DEFAULT: {\n\t\tdescription: 'The default algorithm to use for hashing if no algorithm is provided. This may change in newer PHP releases when newer, stronger hashing algorithms are supported.',\n\t},\n};\nexport const keywords: IEntries = {\n\tdefine: {\n\t\tdescription: 'Defines a named constant at runtime.',\n\t\tsignature: '( string $name , mixed $value [, bool $case_insensitive = false ] ): bool'\n\t},\n\tdie: {\n\t\tdescription: 'This language construct is equivalent to exit().',\n\t},\n\techo: {\n\t\tdescription: 'Outputs all parameters. \\r\\n\\r\\necho is not actually a function (it is a language construct), so you are not required to use parentheses with it. echo (unlike some other language constructs) does not behave like a function, so it cannot always be used in the context of a function. Additionally, if you want to pass more than one parameter to echo, the parameters must not be enclosed within parentheses.\\r\\n\\r\\necho also has a shortcut syntax, where you can immediately follow the opening tag with an equals sign. This short syntax only works with the short_open_tag configuration setting enabled.',\n\t\tsignature: '( string $arg1 [, string $... ] ): void'\n\t},\n\tempty: {\n\t\tdescription: 'Determine whether a variable is considered to be empty.',\n\t\tsignature: '( mixed $var ): bool'\n\t},\n\texit: {\n\t\tdescription: 'Terminates execution of the script. Shutdown functions and object destructors will always be executed even if exit() is called.',\n\t\tsignature: '([ string $status ] )\\r\\nvoid exit ( int $status ): void'\n\t},\n\teval: {\n\t\tdescription: 'Evaluates the string given in code_str as PHP code. Among other things, this can be useful for storing code in a database text field for later execution.\\r\\nThere are some factors to keep in mind when using eval(). Remember that the string passed must be valid PHP code, including things like terminating statements with a semicolon so the parser doesn\\'t die on the line after the eval(), and properly escaping things in code_str. To mix HTML output and PHP code you can use a closing PHP tag to leave PHP mode.\\r\\nAlso remember that variables given values under eval() will retain these values in the main script afterwards.',\n\t\tsignature: '( string $code_str ): mixed'\n\t},\n\tinclude: {\n\t\tdescription: 'The include statement includes and evaluates the specified file.',\n\t},\n\tinclude_once: {\n\t\tdescription: 'The include_once statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the include statement, with the only difference being that if the code from a file has already been included, it will not be included again. As the name suggests, it will be included just once. \\r\\n\\r\\ninclude_once may be used in cases where the same file might be included and evaluated more than once during a particular execution of a script, so in this case it may help avoid problems such as function redefinitions, variable value reassignments, etc.',\n\t},\n\tisset: {\n\t\tdescription: 'Determine if a variable is set and is not NULL. \\r\\n\\r\\nIf a variable has been unset with unset(), it will no longer be set. isset() will return FALSE if testing a variable that has been set to NULL. Also note that a NULL byte is not equivalent to the PHP NULL constant. \\r\\n\\r\\nIf multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered.',\n\t\tsignature: '( mixed $var [, mixed $... ] ): bool'\n\t},\n\tlist: {\n\t\tdescription: 'Like array(), this is not really a function, but a language construct. list() is used to assign a list of variables in one operation.',\n\t\tsignature: '( mixed $varname [, mixed $... ] ): array'\n\t},\n\trequire: {\n\t\tdescription: 'require is identical to include except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script whereas include only emits a warning (E_WARNING) which allows the script to continue.',\n\t},\n\trequire_once: {\n\t\tdescription: 'The require_once statement is identical to require except PHP will check if the file has already been included, and if so, not include (require) it again.',\n\t},\n\treturn: {\n\t\tdescription: 'If called from within a function, the return statement immediately ends execution of the current function, and returns its argument as the value of the function call. return will also end the execution of an eval() statement or script file. \\r\\n\\r\\nIf called from the global scope, then execution of the current script file is ended. If the current script file was included or required, then control is passed back to the calling file. Furthermore, if the current script file was included, then the value given to return will be returned as the value of the include call. If return is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini, then that script file\\'s execution is ended.',\n\t},\n\tprint: {\n\t\tdescription: 'Outputs arg. \\r\\n\\r\\nprint() is not actually a real function (it is a language construct) so you are not required to use parentheses with its argument list.',\n\t\tsignature: '( string $arg ): int'\n\t},\n\tunset: {\n\t\tdescription: 'unset() destroys the specified variables. \\r\\n\\r\\nThe behavior of unset() inside of a function can vary depending on what type of variable you are attempting to destroy. \\r\\n\\r\\nIf a globalized variable is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called.',\n\t\tsignature: '( mixed $var [, mixed $... ] ): void'\n\t},\n\tyield: {\n\t\tdescription: 'The heart of a generator function is the yield keyword. In its simplest form, a yield statement looks much like a return statement, except that instead of stopping execution of the function and returning, yield instead provides a value to the code looping over the generator and pauses execution of the generator function.',\n\t},\n\tabstract: {\n\t},\n\tand: {\n\t},\n\tarray: {\n\t},\n\tas: {\n\t},\n\tbreak: {\n\t},\n\tcase: {\n\t},\n\tcatch: {\n\t},\n\tclass: {\n\t},\n\tclone: {\n\t},\n\tconst: {\n\t},\n\tcontinue: {\n\t},\n\tdeclare: {\n\t},\n\tdefault: {\n\t},\n\tdo: {\n\t},\n\telse: {\n\t},\n\telseif: {\n\t},\n\tenddeclare: {\n\t},\n\tendfor: {\n\t},\n\tendforeach: {\n\t},\n\tendif: {\n\t},\n\tendswitch: {\n\t},\n\tendwhile: {\n\t},\n\textends: {\n\t},\n\tfinal: {\n\t},\n\tfinally: {\n\t},\n\tfor: {\n\t},\n\tforeach: {\n\t},\n\tfunction: {\n\t},\n\tglobal: {\n\t},\n\tgoto: {\n\t},\n\tif: {\n\t},\n\timplements: {\n\t},\n\tinterface: {\n\t},\n\tinstanceof: {\n\t},\n\tinsteadOf: {\n\t},\n\tnamespace: {\n\t},\n\tnew: {\n\t},\n\tor: {\n\t},\n\tparent: {\n\t},\n\tprivate: {\n\t},\n\tprotected: {\n\t},\n\tpublic: {\n\t},\n\tself: {\n\t},\n\tstatic: {\n\t},\n\tswitch: {\n\t},\n\tthrow: {\n\t},\n\ttrait: {\n\t},\n\ttry: {\n\t},\n\tuse: {\n\t},\n\tvar: {\n\t},\n\twhile: {\n\t},\n\txor: {\n\t},\n};\n"
  },
  {
    "path": "extensions/php-language-features/src/features/signatureHelpProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { SignatureHelpProvider, SignatureHelp, SignatureInformation, CancellationToken, TextDocument, Position, workspace } from 'vscode';\nimport * as phpGlobals from './phpGlobals';\nimport * as phpGlobalFunctions from './phpGlobalFunctions';\n\nconst _NL = '\\n'.charCodeAt(0);\nconst _TAB = '\\t'.charCodeAt(0);\nconst _WSB = ' '.charCodeAt(0);\nconst _LBracket = '['.charCodeAt(0);\nconst _RBracket = ']'.charCodeAt(0);\nconst _LCurly = '{'.charCodeAt(0);\nconst _RCurly = '}'.charCodeAt(0);\nconst _LParent = '('.charCodeAt(0);\nconst _RParent = ')'.charCodeAt(0);\nconst _Comma = ','.charCodeAt(0);\nconst _Quote = '\\''.charCodeAt(0);\nconst _DQuote = '\"'.charCodeAt(0);\nconst _USC = '_'.charCodeAt(0);\nconst _a = 'a'.charCodeAt(0);\nconst _z = 'z'.charCodeAt(0);\nconst _A = 'A'.charCodeAt(0);\nconst _Z = 'Z'.charCodeAt(0);\nconst _0 = '0'.charCodeAt(0);\nconst _9 = '9'.charCodeAt(0);\n\nconst BOF = 0;\n\n\nclass BackwardIterator {\n\tprivate lineNumber: number;\n\tprivate offset: number;\n\tprivate line: string;\n\tprivate model: TextDocument;\n\n\tconstructor(model: TextDocument, offset: number, lineNumber: number) {\n\t\tthis.lineNumber = lineNumber;\n\t\tthis.offset = offset;\n\t\tthis.line = model.lineAt(this.lineNumber).text;\n\t\tthis.model = model;\n\t}\n\n\tpublic hasNext(): boolean {\n\t\treturn this.lineNumber >= 0;\n\t}\n\n\tpublic next(): number {\n\t\tif (this.offset < 0) {\n\t\t\tif (this.lineNumber > 0) {\n\t\t\t\tthis.lineNumber--;\n\t\t\t\tthis.line = this.model.lineAt(this.lineNumber).text;\n\t\t\t\tthis.offset = this.line.length - 1;\n\t\t\t\treturn _NL;\n\t\t\t}\n\t\t\tthis.lineNumber = -1;\n\t\t\treturn BOF;\n\t\t}\n\t\tconst ch = this.line.charCodeAt(this.offset);\n\t\tthis.offset--;\n\t\treturn ch;\n\t}\n\n}\n\n\nexport default class PHPSignatureHelpProvider implements SignatureHelpProvider {\n\n\tpublic provideSignatureHelp(document: TextDocument, position: Position, _token: CancellationToken): Promise<SignatureHelp> | null {\n\t\tconst enable = workspace.getConfiguration('php').get<boolean>('suggest.basic', true);\n\t\tif (!enable) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst iterator = new BackwardIterator(document, position.character - 1, position.line);\n\n\t\tconst paramCount = this.readArguments(iterator);\n\t\tif (paramCount < 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst ident = this.readIdent(iterator);\n\t\tif (!ident) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst entry = phpGlobalFunctions.globalfunctions[ident] || phpGlobals.keywords[ident];\n\t\tif (!entry || !entry.signature) {\n\t\t\treturn null;\n\t\t}\n\t\tconst paramsString = entry.signature.substring(0, entry.signature.lastIndexOf(')') + 1);\n\t\tconst signatureInfo = new SignatureInformation(ident + paramsString, entry.description);\n\n\t\tconst re = /\\w*\\s+\\&?\\$[\\w_\\.]+|void/g;\n\t\tlet match: RegExpExecArray | null = null;\n\t\twhile ((match = re.exec(paramsString)) !== null) {\n\t\t\tsignatureInfo.parameters.push({ label: match[0], documentation: '' });\n\t\t}\n\t\tconst ret = new SignatureHelp();\n\t\tret.signatures.push(signatureInfo);\n\t\tret.activeSignature = 0;\n\t\tret.activeParameter = Math.min(paramCount, signatureInfo.parameters.length - 1);\n\t\treturn Promise.resolve(ret);\n\t}\n\n\tprivate readArguments(iterator: BackwardIterator): number {\n\t\tlet parentNesting = 0;\n\t\tlet bracketNesting = 0;\n\t\tlet curlyNesting = 0;\n\t\tlet paramCount = 0;\n\t\twhile (iterator.hasNext()) {\n\t\t\tconst ch = iterator.next();\n\t\t\tswitch (ch) {\n\t\t\t\tcase _LParent:\n\t\t\t\t\tparentNesting--;\n\t\t\t\t\tif (parentNesting < 0) {\n\t\t\t\t\t\treturn paramCount;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase _RParent: parentNesting++; break;\n\t\t\t\tcase _LCurly: curlyNesting--; break;\n\t\t\t\tcase _RCurly: curlyNesting++; break;\n\t\t\t\tcase _LBracket: bracketNesting--; break;\n\t\t\t\tcase _RBracket: bracketNesting++; break;\n\t\t\t\tcase _DQuote:\n\t\t\t\tcase _Quote:\n\t\t\t\t\twhile (iterator.hasNext() && ch !== iterator.next()) {\n\t\t\t\t\t\t// find the closing quote or double quote\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase _Comma:\n\t\t\t\t\tif (!parentNesting && !bracketNesting && !curlyNesting) {\n\t\t\t\t\t\tparamCount++;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tprivate isIdentPart(ch: number): boolean {\n\t\tif (ch === _USC || // _\n\t\t\tch >= _a && ch <= _z || // a-z\n\t\t\tch >= _A && ch <= _Z || // A-Z\n\t\t\tch >= _0 && ch <= _9 || // 0/9\n\t\t\tch >= 0x80 && ch <= 0xFFFF) { // nonascii\n\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate readIdent(iterator: BackwardIterator): string {\n\t\tlet identStarted = false;\n\t\tlet ident = '';\n\t\twhile (iterator.hasNext()) {\n\t\t\tconst ch = iterator.next();\n\t\t\tif (!identStarted && (ch === _WSB || ch === _TAB || ch === _NL)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this.isIdentPart(ch)) {\n\t\t\t\tidentStarted = true;\n\t\t\t\tident = String.fromCharCode(ch) + ident;\n\t\t\t} else if (identStarted) {\n\t\t\t\treturn ident;\n\t\t\t}\n\t\t}\n\t\treturn ident;\n\t}\n\n}\n"
  },
  {
    "path": "extensions/php-language-features/src/features/utils/async.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface ITask<T> {\n\t(): T;\n}\n\n/**\n * A helper to prevent accumulation of sequential async tasks.\n *\n * Imagine a mail man with the sole task of delivering letters. As soon as\n * a letter submitted for delivery, he drives to the destination, delivers it\n * and returns to his base. Imagine that during the trip, N more letters were submitted.\n * When the mail man returns, he picks those N letters and delivers them all in a\n * single trip. Even though N+1 submissions occurred, only 2 deliveries were made.\n *\n * The throttler implements this via the queue() method, by providing it a task\n * factory. Following the example:\n *\n * \t\tvar throttler = new Throttler();\n * \t\tvar letters = [];\n *\n * \t\tfunction letterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tthrottler.queue(() => { return makeTheTrip(); });\n * \t\t}\n */\nexport class Throttler<T> {\n\n\tprivate activePromise: Promise<T> | null;\n\tprivate queuedPromise: Promise<T> | null;\n\tprivate queuedPromiseFactory: ITask<Promise<T>> | null;\n\n\tconstructor() {\n\t\tthis.activePromise = null;\n\t\tthis.queuedPromise = null;\n\t\tthis.queuedPromiseFactory = null;\n\t}\n\n\tpublic queue(promiseFactory: ITask<Promise<T>>): Promise<T> {\n\t\tif (this.activePromise) {\n\t\t\tthis.queuedPromiseFactory = promiseFactory;\n\n\t\t\tif (!this.queuedPromise) {\n\t\t\t\tconst onComplete = () => {\n\t\t\t\t\tthis.queuedPromise = null;\n\n\t\t\t\t\tconst result = this.queue(this.queuedPromiseFactory!);\n\t\t\t\t\tthis.queuedPromiseFactory = null;\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\tthis.queuedPromise = new Promise<T>((resolve) => {\n\t\t\t\t\tthis.activePromise!.then(onComplete, onComplete).then(resolve);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\t\tthis.queuedPromise!.then(resolve, reject);\n\t\t\t});\n\t\t}\n\n\t\tthis.activePromise = promiseFactory();\n\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tthis.activePromise!.then((result: T) => {\n\t\t\t\tthis.activePromise = null;\n\t\t\t\tresolve(result);\n\t\t\t}, (err: any) => {\n\t\t\t\tthis.activePromise = null;\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n}\n\n/**\n * A helper to delay execution of a task that is being requested often.\n *\n * Following the throttler, now imagine the mail man wants to optimize the number of\n * trips proactively. The trip itself can be long, so the he decides not to make the trip\n * as soon as a letter is submitted. Instead he waits a while, in case more\n * letters are submitted. After said waiting period, if no letters were submitted, he\n * decides to make the trip. Imagine that N more letters were submitted after the first\n * one, all within a short period of time between each other. Even though N+1\n * submissions occurred, only 1 delivery was made.\n *\n * The delayer offers this behavior via the trigger() method, into which both the task\n * to be executed and the waiting period (delay) must be passed in as arguments. Following\n * the example:\n *\n * \t\tvar delayer = new Delayer(WAITING_PERIOD);\n * \t\tvar letters = [];\n *\n * \t\tfunction letterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tdelayer.trigger(() => { return makeTheTrip(); });\n * \t\t}\n */\nexport class Delayer<T> {\n\n\tpublic defaultDelay: number;\n\tprivate timeout: NodeJS.Timer | null;\n\tprivate completionPromise: Promise<T> | null;\n\tprivate onResolve: ((value: T | PromiseLike<T> | undefined) => void) | null;\n\tprivate task: ITask<T> | null;\n\n\tconstructor(defaultDelay: number) {\n\t\tthis.defaultDelay = defaultDelay;\n\t\tthis.timeout = null;\n\t\tthis.completionPromise = null;\n\t\tthis.onResolve = null;\n\t\tthis.task = null;\n\t}\n\n\tpublic trigger(task: ITask<T>, delay: number = this.defaultDelay): Promise<T> {\n\t\tthis.task = task;\n\t\tthis.cancelTimeout();\n\n\t\tif (!this.completionPromise) {\n\t\t\tthis.completionPromise = new Promise<T | undefined>((resolve) => {\n\t\t\t\tthis.onResolve = resolve;\n\t\t\t}).then(() => {\n\t\t\t\tthis.completionPromise = null;\n\t\t\t\tthis.onResolve = null;\n\n\t\t\t\tconst result = this.task!();\n\t\t\t\tthis.task = null;\n\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\n\t\tthis.timeout = setTimeout(() => {\n\t\t\tthis.timeout = null;\n\t\t\tthis.onResolve!(undefined);\n\t\t}, delay);\n\n\t\treturn this.completionPromise;\n\t}\n\n\tpublic isTriggered(): boolean {\n\t\treturn this.timeout !== null;\n\t}\n\n\tpublic cancel(): void {\n\t\tthis.cancelTimeout();\n\n\t\tif (this.completionPromise) {\n\t\t\tthis.completionPromise = null;\n\t\t}\n\t}\n\n\tprivate cancelTimeout(): void {\n\t\tif (this.timeout !== null) {\n\t\t\tclearTimeout(this.timeout);\n\t\t\tthis.timeout = null;\n\t\t}\n\t}\n}\n\n/**\n * A helper to delay execution of a task that is being requested often, while\n * preventing accumulation of consecutive executions, while the task runs.\n *\n * Simply combine the two mail man strategies from the Throttler and Delayer\n * helpers, for an analogy.\n */\nexport class ThrottledDelayer<T> extends Delayer<Promise<T>> {\n\n\tprivate throttler: Throttler<T>;\n\n\tconstructor(defaultDelay: number) {\n\t\tsuper(defaultDelay);\n\n\t\tthis.throttler = new Throttler<T>();\n\t}\n\n\tpublic override trigger(promiseFactory: ITask<Promise<T>>, delay?: number): Promise<Promise<T>> {\n\t\treturn super.trigger(() => this.throttler.queue(promiseFactory), delay);\n\t}\n}\n"
  },
  {
    "path": "extensions/php-language-features/src/features/utils/markedTextUtil.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { MarkedString } from 'vscode';\n\nexport function textToMarkedString(text: string): MarkedString {\n\treturn text.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n}"
  },
  {
    "path": "extensions/php-language-features/src/features/validationProvider.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as cp from 'child_process';\nimport { StringDecoder } from 'string_decoder';\nimport which from 'which';\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport { ThrottledDelayer } from './utils/async';\n\nconst enum Setting {\n\tRun = 'php.validate.run',\n\tEnable = 'php.validate.enable',\n\tExecutablePath = 'php.validate.executablePath',\n}\n\nexport class LineDecoder {\n\tprivate stringDecoder: StringDecoder;\n\tprivate remaining: string | null;\n\n\tconstructor(encoding: BufferEncoding = 'utf8') {\n\t\tthis.stringDecoder = new StringDecoder(encoding);\n\t\tthis.remaining = null;\n\t}\n\n\tpublic write(buffer: Buffer): string[] {\n\t\tconst result: string[] = [];\n\t\tconst value = this.remaining\n\t\t\t? this.remaining + this.stringDecoder.write(buffer)\n\t\t\t: this.stringDecoder.write(buffer);\n\n\t\tif (value.length < 1) {\n\t\t\treturn result;\n\t\t}\n\t\tlet start = 0;\n\t\tlet ch: number;\n\t\twhile (start < value.length && ((ch = value.charCodeAt(start)) === 13 || ch === 10)) {\n\t\t\tstart++;\n\t\t}\n\t\tlet idx = start;\n\t\twhile (idx < value.length) {\n\t\t\tch = value.charCodeAt(idx);\n\t\t\tif (ch === 13 || ch === 10) {\n\t\t\t\tresult.push(value.substring(start, idx));\n\t\t\t\tidx++;\n\t\t\t\twhile (idx < value.length && ((ch = value.charCodeAt(idx)) === 13 || ch === 10)) {\n\t\t\t\t\tidx++;\n\t\t\t\t}\n\t\t\t\tstart = idx;\n\t\t\t} else {\n\t\t\t\tidx++;\n\t\t\t}\n\t\t}\n\t\tthis.remaining = start < value.length ? value.substr(start) : null;\n\t\treturn result;\n\t}\n\n\tpublic end(): string | null {\n\t\treturn this.remaining;\n\t}\n}\n\nenum RunTrigger {\n\tonSave,\n\tonType\n}\n\nnamespace RunTrigger {\n\texport const strings = {\n\t\tonSave: 'onSave',\n\t\tonType: 'onType'\n\t};\n\texport const from = function (value: string): RunTrigger {\n\t\tif (value === 'onType') {\n\t\t\treturn RunTrigger.onType;\n\t\t} else {\n\t\t\treturn RunTrigger.onSave;\n\t\t}\n\t};\n}\n\nexport default class PHPValidationProvider {\n\n\tprivate static MatchExpression: RegExp = /(?:(?:Parse|Fatal) error): (.*)(?: in )(.*?)(?: on line )(\\d+)/;\n\tprivate static BufferArgs: string[] = ['-l', '-n', '-d', 'display_errors=On', '-d', 'log_errors=Off'];\n\tprivate static FileArgs: string[] = ['-l', '-n', '-d', 'display_errors=On', '-d', 'log_errors=Off', '-f'];\n\n\tprivate validationEnabled: boolean;\n\tprivate pauseValidation: boolean;\n\tprivate config: IPhpConfig | undefined;\n\tprivate loadConfigP: Promise<void>;\n\n\tprivate documentListener: vscode.Disposable | null = null;\n\tprivate diagnosticCollection?: vscode.DiagnosticCollection;\n\tprivate delayers?: { [key: string]: ThrottledDelayer<void> };\n\n\tconstructor() {\n\t\tthis.validationEnabled = true;\n\t\tthis.pauseValidation = false;\n\t\tthis.loadConfigP = this.loadConfiguration();\n\t}\n\n\tpublic activate(subscriptions: vscode.Disposable[]) {\n\t\tthis.diagnosticCollection = vscode.languages.createDiagnosticCollection();\n\t\tsubscriptions.push(this);\n\t\tsubscriptions.push(vscode.workspace.onDidChangeConfiguration(() => this.loadConfigP = this.loadConfiguration()));\n\n\t\tvscode.workspace.onDidOpenTextDocument(this.triggerValidate, this, subscriptions);\n\t\tvscode.workspace.onDidCloseTextDocument((textDocument) => {\n\t\t\tthis.diagnosticCollection!.delete(textDocument.uri);\n\t\t\tif (this.delayers) {\n\t\t\t\tdelete this.delayers[textDocument.uri.toString()];\n\t\t\t}\n\t\t}, null, subscriptions);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this.diagnosticCollection) {\n\t\t\tthis.diagnosticCollection.clear();\n\t\t\tthis.diagnosticCollection.dispose();\n\t\t}\n\t\tif (this.documentListener) {\n\t\t\tthis.documentListener.dispose();\n\t\t\tthis.documentListener = null;\n\t\t}\n\t}\n\n\tprivate async loadConfiguration(): Promise<void> {\n\t\tconst section = vscode.workspace.getConfiguration();\n\t\tconst oldExecutable = this.config?.executable;\n\t\tthis.validationEnabled = section.get<boolean>(Setting.Enable, true);\n\n\t\tthis.config = await getConfig();\n\n\t\tthis.delayers = Object.create(null);\n\t\tif (this.pauseValidation) {\n\t\t\tthis.pauseValidation = oldExecutable === this.config.executable;\n\t\t}\n\t\tif (this.documentListener) {\n\t\t\tthis.documentListener.dispose();\n\t\t\tthis.documentListener = null;\n\t\t}\n\t\tthis.diagnosticCollection!.clear();\n\t\tif (this.validationEnabled) {\n\t\t\tif (this.config.trigger === RunTrigger.onType) {\n\t\t\t\tthis.documentListener = vscode.workspace.onDidChangeTextDocument((e) => {\n\t\t\t\t\tthis.triggerValidate(e.document);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.documentListener = vscode.workspace.onDidSaveTextDocument(this.triggerValidate, this);\n\t\t\t}\n\t\t\t// Configuration has changed. Reevaluate all documents.\n\t\t\tvscode.workspace.textDocuments.forEach(this.triggerValidate, this);\n\t\t}\n\t}\n\n\tprivate async triggerValidate(textDocument: vscode.TextDocument): Promise<void> {\n\t\tawait this.loadConfigP;\n\t\tif (textDocument.languageId !== 'php' || this.pauseValidation || !this.validationEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (vscode.workspace.isTrusted) {\n\t\t\tconst key = textDocument.uri.toString();\n\t\t\tlet delayer = this.delayers![key];\n\t\t\tif (!delayer) {\n\t\t\t\tdelayer = new ThrottledDelayer<void>(this.config?.trigger === RunTrigger.onType ? 250 : 0);\n\t\t\t\tthis.delayers![key] = delayer;\n\t\t\t}\n\t\t\tdelayer.trigger(() => this.doValidate(textDocument));\n\t\t}\n\t}\n\n\tprivate doValidate(textDocument: vscode.TextDocument): Promise<void> {\n\t\treturn new Promise<void>(resolve => {\n\t\t\tconst executable = this.config!.executable;\n\t\t\tif (!executable) {\n\t\t\t\tthis.showErrorMessage(vscode.l10n.t(\"Cannot validate since a PHP installation could not be found. Use the setting 'php.validate.executablePath' to configure the PHP executable.\"));\n\t\t\t\tthis.pauseValidation = true;\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!path.isAbsolute(executable)) {\n\t\t\t\t// executable should either be resolved to an absolute path or undefined.\n\t\t\t\t// This is just to be sure.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst decoder = new LineDecoder();\n\t\t\tconst diagnostics: vscode.Diagnostic[] = [];\n\t\t\tconst processLine = (line: string) => {\n\t\t\t\tconst matches = line.match(PHPValidationProvider.MatchExpression);\n\t\t\t\tif (matches) {\n\t\t\t\t\tconst message = matches[1];\n\t\t\t\t\tconst line = parseInt(matches[3]) - 1;\n\t\t\t\t\tconst diagnostic: vscode.Diagnostic = new vscode.Diagnostic(\n\t\t\t\t\t\tnew vscode.Range(line, 0, line, 2 ** 31 - 1), // See https://github.com/microsoft/vscode/issues/80288#issuecomment-650636442 for discussion\n\t\t\t\t\t\tmessage\n\t\t\t\t\t);\n\t\t\t\t\tdiagnostics.push(diagnostic);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst options = (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders[0]) ? { cwd: vscode.workspace.workspaceFolders[0].uri.fsPath } : undefined;\n\t\t\tlet args: string[];\n\t\t\tif (this.config!.trigger === RunTrigger.onSave) {\n\t\t\t\targs = PHPValidationProvider.FileArgs.slice(0);\n\t\t\t\targs.push(textDocument.fileName);\n\t\t\t} else {\n\t\t\t\targs = PHPValidationProvider.BufferArgs;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst childProcess = cp.spawn(executable, args, options);\n\t\t\t\tchildProcess.on('error', (error: Error) => {\n\t\t\t\t\tif (this.pauseValidation) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.showError(error, executable);\n\t\t\t\t\tthis.pauseValidation = true;\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t\tif (childProcess.pid) {\n\t\t\t\t\tif (this.config!.trigger === RunTrigger.onType) {\n\t\t\t\t\t\tchildProcess.stdin.write(textDocument.getText());\n\t\t\t\t\t\tchildProcess.stdin.end();\n\t\t\t\t\t}\n\t\t\t\t\tchildProcess.stdout.on('data', (data: Buffer) => {\n\t\t\t\t\t\tdecoder.write(data).forEach(processLine);\n\t\t\t\t\t});\n\t\t\t\t\tchildProcess.stdout.on('end', () => {\n\t\t\t\t\t\tconst line = decoder.end();\n\t\t\t\t\t\tif (line) {\n\t\t\t\t\t\t\tprocessLine(line);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.diagnosticCollection!.set(textDocument.uri, diagnostics);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, executable);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate async showError(error: any, executable: string): Promise<void> {\n\t\tlet message: string | null = null;\n\t\tif (error.code === 'ENOENT') {\n\t\t\tif (this.config!.executable) {\n\t\t\t\tmessage = vscode.l10n.t(\"Cannot validate since {0} is not a valid php executable. Use the setting 'php.validate.executablePath' to configure the PHP executable.\", executable);\n\t\t\t} else {\n\t\t\t\tmessage = vscode.l10n.t(\"Cannot validate since no PHP executable is set. Use the setting 'php.validate.executablePath' to configure the PHP executable.\");\n\t\t\t}\n\t\t} else {\n\t\t\tmessage = error.message ? error.message : vscode.l10n.t(\"Failed to run php using path: {0}. Reason is unknown.\", executable);\n\t\t}\n\t\tif (!message) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.showErrorMessage(message);\n\t}\n\n\tprivate async showErrorMessage(message: string): Promise<void> {\n\t\tconst openSettings = vscode.l10n.t(\"Open Settings\");\n\t\tif (await vscode.window.showInformationMessage(message, openSettings) === openSettings) {\n\t\t\tvscode.commands.executeCommand('workbench.action.openSettings', Setting.ExecutablePath);\n\t\t}\n\t}\n}\n\ninterface IPhpConfig {\n\treadonly executable: string | undefined;\n\treadonly executableIsUserDefined: boolean | undefined;\n\treadonly trigger: RunTrigger;\n}\n\nasync function getConfig(): Promise<IPhpConfig> {\n\tconst section = vscode.workspace.getConfiguration();\n\n\tlet executable: string | undefined;\n\tlet executableIsUserDefined: boolean | undefined;\n\tconst inspect = section.inspect<string>(Setting.ExecutablePath);\n\tif (inspect && inspect.workspaceValue) {\n\t\texecutable = inspect.workspaceValue;\n\t\texecutableIsUserDefined = false;\n\t} else if (inspect && inspect.globalValue) {\n\t\texecutable = inspect.globalValue;\n\t\texecutableIsUserDefined = true;\n\t} else {\n\t\texecutable = undefined;\n\t\texecutableIsUserDefined = undefined;\n\t}\n\n\tif (executable && !path.isAbsolute(executable)) {\n\t\tconst first = vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders[0];\n\t\tif (first) {\n\t\t\texecutable = vscode.Uri.joinPath(first.uri, executable).fsPath;\n\t\t} else {\n\t\t\texecutable = undefined;\n\t\t}\n\t} else if (!executable) {\n\t\texecutable = await getPhpPath();\n\t}\n\n\tconst trigger = RunTrigger.from(section.get<string>(Setting.Run, RunTrigger.strings.onSave));\n\treturn {\n\t\texecutable,\n\t\texecutableIsUserDefined,\n\t\ttrigger\n\t};\n}\n\nasync function getPhpPath(): Promise<string | undefined> {\n\ttry {\n\t\treturn await which('php');\n\t} catch (e) {\n\t\treturn undefined;\n\t}\n}\n"
  },
  {
    "path": "extensions/php-language-features/src/phpMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nimport PHPCompletionItemProvider from './features/completionItemProvider';\nimport PHPHoverProvider from './features/hoverProvider';\nimport PHPSignatureHelpProvider from './features/signatureHelpProvider';\nimport PHPValidationProvider from './features/validationProvider';\n\nexport function activate(context: vscode.ExtensionContext): any {\n\n\tconst validator = new PHPValidationProvider();\n\tvalidator.activate(context.subscriptions);\n\n\t// add providers\n\tcontext.subscriptions.push(vscode.languages.registerCompletionItemProvider('php', new PHPCompletionItemProvider(), '>', '$'));\n\tcontext.subscriptions.push(vscode.languages.registerHoverProvider('php', new PHPHoverProvider()));\n\tcontext.subscriptions.push(vscode.languages.registerSignatureHelpProvider('php', new PHPSignatureHelpProvider(), '(', ','));\n}\n"
  },
  {
    "path": "extensions/php-language-features/src/typings/node.additions.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\ndeclare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;\ndeclare function clearTimeout(timeoutId: NodeJS.Timer): void;\ndeclare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;\ndeclare function clearInterval(intervalId: NodeJS.Timer): void;\ndeclare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any;\ndeclare function clearImmediate(immediateId: any): void;\n"
  },
  {
    "path": "extensions/php-language-features/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/postinstall.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst root = path.join(path.dirname(fileURLToPath(import.meta.url)), 'node_modules', 'typescript');\n\nfunction processRoot() {\n\tconst toKeep = new Set([\n\t\t'lib',\n\t\t'package.json',\n\t]);\n\tfor (const name of fs.readdirSync(root)) {\n\t\tif (!toKeep.has(name)) {\n\t\t\tconst filePath = path.join(root, name);\n\t\t\tconsole.log(`Removed ${filePath}`);\n\t\t\tfs.rmSync(filePath, { recursive: true });\n\t\t}\n\t}\n}\n\nfunction processLib() {\n\tconst toDelete = new Set([\n\t\t'tsc.js',\n\t\t'_tsc.js',\n\n\t\t'typescriptServices.js',\n\t\t'_typescriptServices.js',\n\t]);\n\n\tconst libRoot = path.join(root, 'lib');\n\n\tfor (const name of fs.readdirSync(libRoot)) {\n\t\tif (name === 'lib.d.ts' || name.match(/^lib\\..*\\.d\\.ts$/) || name === 'protocol.d.ts') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (name === 'typescript.js' || name === 'typescript.d.ts') {\n\t\t\t// used by html and extension editing\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (toDelete.has(name) || name.match(/\\.d\\.ts$/)) {\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(path.join(libRoot, name));\n\t\t\t\tconsole.log(`removed '${path.join(libRoot, name)}'`);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(e);\n\t\t\t}\n\t\t}\n\t}\n}\n\nprocessRoot();\nprocessLib();\n"
  },
  {
    "path": "extensions/powershell/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/powershell/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"PowerShell/EditorSyntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/PowerShell/EditorSyntax\",\n\t\t\t\t\t\"commitHash\": \"742f0b5d4b60f5930c0b47fcc1f646860521296e\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/powershell/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"<#\", \"#>\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"@'\", \"close\": \"\\n'@\", \"notIn\": [\"string\", \"comment\"]},\n\t\t{ \"open\": \"@\\\"\", \"close\": \"\\n\\\"@\", \"notIn\": [\"string\", \"comment\"]},\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"]},\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"]},\n\t\t[\"<#\", \"#>\"]\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#[rR]egion\\\\b\",\n\t\t\t\"end\": \"^\\\\s*#[eE]nd[rR]egion\\\\b\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/powershell/package.json",
    "content": "{\n  \"name\": \"powershell\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"powershell\",\n        \"extensions\": [\n          \".ps1\",\n          \".psm1\",\n          \".psd1\",\n          \".pssc\",\n          \".psrc\"\n        ],\n        \"aliases\": [\n          \"PowerShell\",\n          \"powershell\",\n          \"ps\",\n          \"ps1\",\n          \"pwsh\"\n        ],\n        \"firstLine\": \"^#!\\\\s*/.*\\\\bpwsh\\\\b\",\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"powershell\",\n        \"scopeName\": \"source.powershell\",\n        \"path\": \"./syntaxes/powershell.tmLanguage.json\"\n      }\n    ]\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin PowerShell/EditorSyntax PowerShellSyntax.tmLanguage ./syntaxes/powershell.tmLanguage.json\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/powershell/package.nls.json",
    "content": "{\n\t\"displayName\": \"Powershell Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in Powershell files.\"\n}\n"
  },
  {
    "path": "extensions/powershell/syntaxes/powershell.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/PowerShell/EditorSyntax/blob/master/PowerShellSyntax.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/PowerShell/EditorSyntax/commit/742f0b5d4b60f5930c0b47fcc1f646860521296e\",\n\t\"name\": \"PowerShell\",\n\t\"scopeName\": \"source.powershell\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"begin\": \"<#\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.block.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"#>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.block.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#commentEmbeddedDocs\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"[2-6]>&1|>>|>|<<|<|>|>\\\\||[1-6]>|[1-6]>>\",\n\t\t\t\"name\": \"keyword.operator.redirection.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#commands\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#commentLine\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#variable\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#subexpression\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#attribute\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#UsingDirective\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#type\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#hashtable\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#doubleQuotedString\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#scriptblock\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Needed to parse stuff correctly in 'argument mode'. (See about_parsing.)\",\n\t\t\t\"include\": \"#doubleQuotedStringEscapes\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"['\\\\x{2018}-\\\\x{201B}]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"['\\\\x{2018}-\\\\x{201B}]\",\n\t\t\t\"applyEndPatternLast\": true,\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"['\\\\x{2018}-\\\\x{201B}]{2}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.powershell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(@[\\\"\\\\x{201C}-\\\\x{201E}])\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^[\\\"\\\\x{201C}-\\\\x{201E}]@\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.heredoc.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variableNoProperty\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#doubleQuotedStringEscapes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(@['\\\\x{2018}-\\\\x{201B}])\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^['\\\\x{2018}-\\\\x{201B}]@\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.heredoc.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#numericConstant\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(@)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.array.begin.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.group.array-expression.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((\\\\$))(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.substatement.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.subexpression.powershell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"TODO: move to repo; make recursive.\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.group.complex.subexpression.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(\\\\b(([A-Za-z0-9\\\\-_\\\\.]+)\\\\.(?i:exe|com|cmd|bat))\\\\b)\",\n\t\t\t\"name\": \"support.function.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w|-|\\\\.)((?i:begin|break|catch|clean|continue|data|default|define|do|dynamicparam|else|elseif|end|exit|finally|for|from|if|in|inlinescript|parallel|param|process|return|sequence|switch|throw|trap|try|until|var|while)|%|\\\\?)(?!\\\\w)\",\n\t\t\t\"name\": \"keyword.control.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w|-|[^\\\\)]\\\\.)((?i:(foreach|where)(?!-object))|%|\\\\?)(?!\\\\w)\",\n\t\t\t\"name\": \"keyword.control.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<!\\\\w)(--%)(?!\\\\w)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \".+\",\n\t\t\t\t\t\"name\": \"string.unquoted.powershell\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"comment\": \"This should be moved to the repository at some point.\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"This should only be relevant inside a class but will require a rework of how classes are matched. This is a temp fix.\",\n\t\t\t\"match\": \"(?<!\\\\w)((?i:hidden|static))(?!\\\\w)\",\n\t\t\t\"name\": \"storage.modifier.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"capture should be entity.name.type, but it doesn't provide a good color in the default schema.\",\n\t\t\t\"match\": \"(?<!\\\\w|-)((?i:class)|%|\\\\?)(?:\\\\s)+((?:\\\\p{L}|\\\\d|_|-|)+)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w)-(?i:is(?:not)?|as)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.comparison.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w)-(?i:[ic]?(?:eq|ne|[gl][te]|(?:not)?(?:like|match|contains|in)|replace))(?!\\\\p{L})\",\n\t\t\t\"name\": \"keyword.operator.comparison.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w)-(?i:join|split)(?!\\\\p{L})|!\",\n\t\t\t\"name\": \"keyword.operator.unary.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w)-(?i:and|or|not|xor)(?!\\\\p{L})|!\",\n\t\t\t\"name\": \"keyword.operator.logical.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w)-(?i:band|bor|bnot|bxor|shl|shr)(?!\\\\p{L})\",\n\t\t\t\"name\": \"keyword.operator.bitwise.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\w)-(?i:f)(?!\\\\p{L})\",\n\t\t\t\"name\": \"keyword.operator.string-format.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"[+%*/-]?=|[+/*%-]\",\n\t\t\t\"name\": \"keyword.operator.assignment.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\|{2}|&{2}|;\",\n\t\t\t\"name\": \"punctuation.terminator.statement.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"&|(?<!\\\\w)\\\\.(?= )|`|,|\\\\|\",\n\t\t\t\"name\": \"keyword.operator.other.powershell\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"This is very imprecise, is there a syntax for 'must come after...' \",\n\t\t\t\"match\": \"(?<!\\\\s|^)\\\\.\\\\.(?=\\\\-?\\\\d|\\\\(|\\\\$)\",\n\t\t\t\"name\": \"keyword.operator.range.powershell\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"commentLine\": {\n\t\t\t\"begin\": \"(?<![`\\\\\\\\-])(#)#*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\\\\n?\",\n\t\t\t\"name\": \"comment.line.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#commentEmbeddedDocs\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#RequiresDirective\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attribute\": {\n\t\t\t\"begin\": \"(\\\\[)\\\\s*\\\\b(?i)(cmdletbinding|alias|outputtype|parameter|validatenotnull|validatenotnullorempty|validatecount|validateset|allownull|allowemptycollection|allowemptystring|validatescript|validaterange|validatepattern|validatelength|supportswildcards)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.bracket.begin.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"support.function.attribute.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.bracket.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.attribute.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.group.begin.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.group.end.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?i)\\\\b(mandatory|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|position|parametersetname|defaultparametersetname|supportsshouldprocess|supportspaging|positionalbinding|helpuri|confirmimpact|helpmessage)\\\\b(?:\\\\s+)?(=)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.attribute.powershell\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.powershell\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"commands\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Verb-Noun pattern:\",\n\t\t\t\t\t\"match\": \"(?:(\\\\p{L}|\\\\d|_|-|\\\\\\\\|\\\\:)*\\\\\\\\)?\\\\b(?i:Add|Approve|Assert|Backup|Block|Build|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Deploy|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Mount|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Write)\\\\-.+?(?:\\\\.(?i:exe|cmd|bat|ps1))?\\\\b\",\n\t\t\t\t\t\"name\": \"support.function.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Builtin cmdlets with reserved verbs\",\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?i:foreach-object)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"support.function.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Builtin cmdlets with reserved verbs\",\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?i:where-object)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"support.function.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Builtin cmdlets with reserved verbs\",\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?i:sort-object)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"support.function.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Builtin cmdlets with reserved verbs\",\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?i:tee-object)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"support.function.powershell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"commentEmbeddedDocs\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.string.documentation.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.documentation.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"these embedded doc keywords do not support arguments, must be the only thing on the line\",\n\t\t\t\t\t\"match\": \"(?:^|\\\\G)(?i:\\\\s*(\\\\.)(COMPONENT|DESCRIPTION|EXAMPLE|FUNCTIONALITY|INPUTS|LINK|NOTES|OUTPUTS|ROLE|SYNOPSIS))\\\\s*$\",\n\t\t\t\t\t\"name\": \"comment.documentation.embedded.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.string.documentation.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.documentation.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.documentation.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"these embedded doc keywords require arguments though the type required may be inconsistent, they may not all be able to use the same argument match\",\n\t\t\t\t\t\"match\": \"(?:^|\\\\G)(?i:\\\\s*(\\\\.)(EXTERNALHELP|FORWARDHELP(?:CATEGORY|TARGETNAME)|PARAMETER|REMOTEHELPRUNSPACE))\\\\s+(.+?)\\\\s*$\",\n\t\t\t\t\t\"name\": \"comment.documentation.embedded.powershell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"doubleQuotedStringEscapes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"`[`0abefnrtv'\\\"\\\\x{2018}-\\\\x{201E}$]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unicodeEscape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"unicodeEscape\": {\n\t\t\t\"comment\": \"`u{xxxx} added in PowerShell 6.0\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"`u\\\\{(?:(?:10)?([0-9a-fA-F]){1,4}|0?\\\\g<1>{1,5})}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"`u(?:\\\\{[0-9a-fA-F]{,6}.)?\",\n\t\t\t\t\t\"name\": \"invalid.character.escape.powershell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function\": {\n\t\t\t\"begin\": \"^(?:\\\\s*+)(?i)(function|filter|configuration|workflow)\\\\s+(?:(global|local|script|private):)?((?:\\\\p{L}|\\\\d|_|-|\\\\.)+)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.function.powershell\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.scope.powershell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.function.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\{|\\\\()\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#commentLine\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"subexpression\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.group.simple.subexpression.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolation\": {\n\t\t\t\"begin\": \"(((\\\\$)))((\\\\())\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.substatement.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.substatement.powershell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.substatement.begin.powershell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.begin.powershell\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.substatement.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"interpolated.complex.source.powershell\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.group.end.powershell\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.substatement.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.embedded.substatement.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numericConstant\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.hex.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\w)([-+]?0(?:x|X)[0-9a-fA-F_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\w)([-+]?(?:[0-9_]+)?\\\\.[0-9_]+(?:(?:e|E)[0-9]+)?(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.octal.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\w)([-+]?0(?:b|B)[01_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\w)([-+]?[0-9_]+(?:e|E)(?:[0-9_])?+(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\w)([-+]?[0-9_]+\\\\.(?:e|E)(?:[0-9_])?+(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\w)([-+]?[0-9_]+[\\\\.]?(?:F|f|D|d|M|m))((?i:[kmgtp]b)?)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?<!\\\\w)([-+]?[0-9_]+[\\\\.]?(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"scriptblock\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.braces.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.braces.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.scriptblock.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.bracket.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.bracket.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?!\\\\d+|\\\\.)(?:\\\\p{L}|\\\\p{N}|\\\\.)+\",\n\t\t\t\t\t\"name\": \"storage.type.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"These are special constants.\",\n\t\t\t\t\t\"match\": \"(\\\\$)(?i:(False|Null|True))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"These are the other built-in constants.\",\n\t\t\t\t\t\"match\": \"(\\\\$)(?i:(Error|ExecutionContext|Host|Home|PID|PsHome|PsVersionTable|ShellID))((?:\\\\.(?:\\\\p{L}|\\\\d|_)+)*\\\\b)?\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.automatic.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Automatic variables are not constants, but they are read-only. In monokai (default) color schema support.variable doesn't have color, so we use constant.\",\n\t\t\t\t\t\"match\": \"(\\\\$)((?:[$^?])|(?i:_|Args|ConsoleFileName|Event|EventArgs|EventSubscriber|ForEach|Input|LastExitCode|Matches|MyInvocation|NestedPromptLevel|Profile|PSBoundParameters|PsCmdlet|PsCulture|PSDebugContext|PSItem|PSCommandPath|PSScriptRoot|PsUICulture|Pwd|Sender|SourceArgs|SourceEventArgs|StackTrace|Switch|This)\\\\b)((?:\\\\.(?:\\\\p{L}|\\\\d|_)+)*\\\\b)?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.language.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Style preference variables as language variables so that they stand out.\",\n\t\t\t\t\t\"match\": \"(\\\\$)(?i:(ConfirmPreference|DebugPreference|ErrorActionPreference|ErrorView|FormatEnumerationLimit|InformationPreference|LogCommandHealthEvent|LogCommandLifecycleEvent|LogEngineHealthEvent|LogEngineLifecycleEvent|LogProviderHealthEvent|LogProviderLifecycleEvent|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount|MaximumHistoryCount|MaximumVariableCount|OFS|OutputEncoding|PSCulture|PSDebugContext|PSDefaultParameterValues|PSEmailServer|PSItem|PSModuleAutoLoadingPreference|PSModuleAutoloadingPreference|PSSenderInfo|PSSessionApplicationName|PSSessionConfigurationName|PSSessionOption|ProgressPreference|VerbosePreference|WarningPreference|WhatIfPreference))((?:\\\\.(?:\\\\p{L}|\\\\d|_)+)*\\\\b)?\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.scope.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$|@)(global|local|private|script|using|workflow):((?:\\\\p{L}|\\\\d|_)+))((?:\\\\.(?:\\\\p{L}|\\\\d|_)+)*\\\\b)?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.begin.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.scope.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.end.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$)(\\\\{)(global|local|private|script|using|workflow):([^}]*[^}`])(\\\\}))((?:\\\\.(?:\\\\p{L}|\\\\d|_)+)*\\\\b)?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.drive.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$|@)((?:\\\\p{L}|\\\\d|_)+:)?((?:\\\\p{L}|\\\\d|_)+))((?:\\\\.(?:\\\\p{L}|\\\\d|_)+)*\\\\b)?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.begin.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.drive.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.end.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$)(\\\\{)((?:\\\\p{L}|\\\\d|_)+:)?([^}]*[^}`])(\\\\}))((?:\\\\.(?:\\\\p{L}|\\\\d|_)+)*\\\\b)?\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"UsingDirective\": {\n\t\t\t\"match\": \"(?<!\\\\w)(?i:(using))\\\\s+(?i:(namespace|module))\\\\s+(?i:((?:\\\\w+(?:\\\\.)?)+))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.using.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.powershell\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"RequiresDirective\": {\n\t\t\t\"begin\": \"(?<=#)(?i:(requires))\\\\s\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.requires.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"meta.requires.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\-(?i:Modules|PSSnapin|RunAsAdministrator|ShellId|Version|Assembly|PSEdition)\",\n\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!-)\\\\b\\\\p{L}+|\\\\d+(?:\\\\.\\\\d+)*\",\n\t\t\t\t\t\"name\": \"variable.parameter.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#hashtable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variableNoProperty\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"These are special constants.\",\n\t\t\t\t\t\"match\": \"(\\\\$)(?i:(False|Null|True))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"These are the other built-in constants.\",\n\t\t\t\t\t\"match\": \"(\\\\$)(?i:(Error|ExecutionContext|Host|Home|PID|PsHome|PsVersionTable|ShellID))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.automatic.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Automatic variables are not constants, but they are read-only...\",\n\t\t\t\t\t\"match\": \"(\\\\$)((?:[$^?])|(?i:_|Args|ConsoleFileName|Event|EventArgs|EventSubscriber|ForEach|Input|LastExitCode|Matches|MyInvocation|NestedPromptLevel|Profile|PSBoundParameters|PsCmdlet|PsCulture|PSDebugContext|PSItem|PSCommandPath|PSScriptRoot|PsUICulture|Pwd|Sender|SourceArgs|SourceEventArgs|StackTrace|Switch|This)\\\\b)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.language.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"Style preference variables as language variables so that they stand out.\",\n\t\t\t\t\t\"match\": \"(\\\\$)(?i:(ConfirmPreference|DebugPreference|ErrorActionPreference|ErrorView|FormatEnumerationLimit|InformationPreference|LogCommandHealthEvent|LogCommandLifecycleEvent|LogEngineHealthEvent|LogEngineLifecycleEvent|LogProviderHealthEvent|LogProviderLifecycleEvent|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount|MaximumHistoryCount|MaximumVariableCount|OFS|OutputEncoding|PSCulture|PSDebugContext|PSDefaultParameterValues|PSEmailServer|PSItem|PSModuleAutoLoadingPreference|PSModuleAutoloadingPreference|PSSenderInfo|PSSessionApplicationName|PSSessionConfigurationName|PSSessionOption|ProgressPreference|VerbosePreference|WarningPreference|WhatIfPreference))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.scope.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$)(global|local|private|script|using|workflow):((?:\\\\p{L}|\\\\d|_)+))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.scope.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$)(\\\\{)(global|local|private|script|using|workflow):([^}]*[^}`])(\\\\}))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.drive.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.member.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$)((?:\\\\p{L}|\\\\d|_)+:)?((?:\\\\p{L}|\\\\d|_)+))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.begin\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.drive.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.end\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(?i:(\\\\$)(\\\\{)((?:\\\\p{L}|\\\\d|_)+:)?([^}]*[^}`])(\\\\}))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"hashtable\": {\n\t\t\t\"begin\": \"(@)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.hashtable.begin.powershell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.braces.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.braces.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.hashtable.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.powershell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.powershell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\b((?:\\\\'|\\\\\\\")?)(\\\\w+)((?:\\\\'|\\\\\\\")?)(?:\\\\s+)?(=)(?:\\\\s+)?\",\n\t\t\t\t\t\"name\": \"meta.hashtable.assignment.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#scriptblock\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"doubleQuotedString\": {\n\t\t\t\"begin\": \"[\\\"\\\\x{201C}-\\\\x{201E}]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"[\\\"\\\\x{201C}-\\\\x{201E}]\",\n\t\t\t\"applyEndPatternLast\": true,\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.powershell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.powershell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?i)\\\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\\\.[A-Z]{2,64}\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variableNoProperty\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#doubleQuotedStringEscapes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[\\\"\\\\x{201C}-\\\\x{201E}]{2}\",\n\t\t\t\t\t\"name\": \"constant.character.escape.powershell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"`\\\\s*$\",\n\t\t\t\t\t\"name\": \"keyword.other.powershell\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/pug/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/pug/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"davidrios/pug-tmbundle\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/davidrios/pug-tmbundle\",\n\t\t\t\t\t\"commitHash\": \"ae1dd60ca4aa4b45617f236d584216cd8d19eecf\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"description\": \"The file syntaxes/pug.tmLanguage.json was derived from Syntaxes/Pug.JSON-tmLanguage in https://github.com/davidrios/pug-tmbundle.\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/pug/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//-\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"\\\"\", \"\\\"\"]\n\t],\n\t\"folding\": {\n\t\t\"offSide\": true\n\t}\n}\n"
  },
  {
    "path": "extensions/pug/package.json",
    "content": "{\n  \"name\": \"pug\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin davidrios/pug-tmbundle Syntaxes/Pug.JSON-tmLanguage ./syntaxes/pug.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"jade\",\n        \"extensions\": [\n          \".pug\",\n          \".jade\"\n        ],\n        \"aliases\": [\n          \"Pug\",\n          \"Jade\",\n          \"jade\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"jade\",\n        \"scopeName\": \"text.pug\",\n        \"path\": \"./syntaxes/pug.tmLanguage.json\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[jade]\": {\n        \"diffEditor.ignoreTrimWhitespace\": false\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/pug/package.nls.json",
    "content": "{\n\t\"displayName\": \"Pug Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Pug files.\"\n}\n"
  },
  {
    "path": "extensions/pug/syntaxes/pug.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/davidrios/pug-tmbundle/blob/master/Syntaxes/Pug.JSON-tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/davidrios/pug-tmbundle/commit/ae1dd60ca4aa4b45617f236d584216cd8d19eecf\",\n\t\"name\": \"Pug\",\n\t\"scopeName\": \"text.pug\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"match\": \"^(!!!|doctype)(\\\\s*[a-zA-Z0-9-_]+)?\",\n\t\t\t\"name\": \"meta.tag.sgml.doctype.html\",\n\t\t\t\"comment\": \"Doctype declaration.\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*)//-\",\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"comment.unbuffered.block.pug\",\n\t\t\t\"comment\": \"Unbuffered (pug-only) comments.\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*)//\",\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"string.comment.buffered.block.pug\",\n\t\t\t\"comment\": \"Buffered (html) comments.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.comment.comment.block.pug\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"^\\\\s*(//)(?!-)\",\n\t\t\t\t\t\"name\": \"string.comment.buffered.block.pug\",\n\t\t\t\t\t\"comment\": \"Buffered comments inside buffered comments will generate invalid html.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"<!--\",\n\t\t\t\"end\": \"--\\\\s*>\",\n\t\t\t\"name\": \"comment.unbuffered.block.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"--\",\n\t\t\t\t\t\"name\": \"invalid.illegal.comment.comment.block.pug\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*)-$\",\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"source.js\",\n\t\t\t\"comment\": \"Unbuffered code block.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*)(script)((\\\\.$)|(?=[^\\\\n]*((text|application)/javascript|module).*\\\\.$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"meta.tag.other\",\n\t\t\t\"comment\": \"Script tag with JavaScript code.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=\\\\()\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=[.#])\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#complete_tag\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*)(style)((\\\\.$)|(?=[.#(].*\\\\.$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"meta.tag.other\",\n\t\t\t\"comment\": \"Style tag with CSS code.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=\\\\()\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=[.#])\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#complete_tag\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*):(sass)(?=\\\\(|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.language.name.sass.filter.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"source.sass.filter.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.sass\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*):(scss)(?=\\\\(|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.language.name.scss.filter.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"source.css.scss.filter.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*):(less)(?=\\\\(|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.language.name.less.filter.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"source.less.filter.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.less\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*):(stylus)(?=\\\\(|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.language.name.stylus.filter.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.stylus\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*):(coffee(-?script)?)(?=\\\\(|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.language.name.coffeescript.filter.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"source.coffeescript.filter.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.coffee\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*):(uglify-js)(?=\\\\(|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.language.name.js.filter.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"name\": \"source.js.filter.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*)((:(?=.))|(:$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.empty.generic.filter.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"comment\": \"Generic Pug filter.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?<=:)(?=.)\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"name\": \"name.generic.filter.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G\\\\(\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.name.generic.filter.pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[\\\\w-]\",\n\t\t\t\t\t\t\t\"name\": \"constant.language.name.generic.filter.pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\W\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.name.generic.filter.pug\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^(\\\\s*)(?:(?=\\\\.$)|(?:(?=[\\\\w.#].*?\\\\.$)(?=(?:(?:(?:(?:(?:#[\\\\w-]+)|(?:\\\\.[\\\\w-]+))|(?:(?:[#!]\\\\{[^}]*\\\\})|(?:\\\\w(?:(?:[\\\\w:-]+[\\\\w-])|(?:[\\\\w-]*)))))(?:(?:#[\\\\w-]+)|(?:\\\\.[\\\\w-]+)|(?:\\\\((?:[^()\\\\'\\\\\\\"]*(?:(?:\\\\'(?:[^\\\\']|(?:(?<!\\\\\\\\)\\\\\\\\\\\\'))*\\\\')|(?:\\\\\\\"(?:[^\\\\\\\"]|(?:(?<!\\\\\\\\)\\\\\\\\\\\\\\\"))*\\\\\\\")))*[^()]*\\\\))*)*)(?:(?:(?::\\\\s+)|(?<=\\\\)))(?:(?:(?:(?:#[\\\\w-]+)|(?:\\\\.[\\\\w-]+))|(?:(?:[#!]\\\\{[^}]*\\\\})|(?:\\\\w(?:(?:[\\\\w:-]+[\\\\w-])|(?:[\\\\w-]*)))))(?:(?:#[\\\\w-]+)|(?:\\\\.[\\\\w-]+)|(?:\\\\((?:[^()\\\\'\\\\\\\"]*(?:(?:\\\\'(?:[^\\\\']|(?:(?<!\\\\\\\\)\\\\\\\\\\\\'))*\\\\')|(?:\\\\\\\"(?:[^\\\\\\\"]|(?:(?<!\\\\\\\\)\\\\\\\\\\\\\\\"))*\\\\\\\")))*[^()]*\\\\))*)*))*)\\\\.$)(?:(?:(#[\\\\w-]+)|(\\\\.[\\\\w-]+))|((?:[#!]\\\\{[^}]*\\\\})|(?:\\\\w(?:(?:[\\\\w:-]+[\\\\w-])|(?:[\\\\w-]*)))))))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.selector.css entity.other.attribute-name.id.css.pug\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.selector.css entity.other.attribute-name.class.css.pug\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.tag.other entity.name.tag.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!(\\\\1\\\\s)|\\\\s*$)\",\n\t\t\t\"comment\": \"Generated from dot_block_tag.py\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.$\",\n\t\t\t\t\t\"name\": \"storage.type.function.pug.dot-block-dot\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#complete_tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^(?=.)\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"name\": \"text.block.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#embedded_html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#html_entity\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_error\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^\\\\s*\",\n\t\t\t\"end\": \"$\",\n\t\t\t\"comment\": \"All constructs that generally span a single line starting with any number of white-spaces.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#blocks_and_includes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unbuffered_code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#mixin_definition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#mixin_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#flow_control\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#flow_control_each\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#case_conds\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\|\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"name\": \"text.block.pipe.pug\",\n\t\t\t\t\t\"comment\": \"Tag pipe text line.\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#embedded_html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#html_entity\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_error\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#printed_expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=(#[^\\\\{\\\\w-])|[^\\\\w.#])\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"comment\": \"Line starting with characters incompatible with tag name/id/class is standalone text.\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"</?(?=[!#])\",\n\t\t\t\t\t\t\t\"end\": \">|$\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#interpolated_value\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#interpolated_error\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#embedded_html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#html_entity\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_error\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#complete_tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"blocks_and_includes\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.import.include.pug\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.control.import.include.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(extends|include|yield|append|prepend|block( (append|prepend))?)\\\\s+(.*)$\",\n\t\t\t\"name\": \"meta.first-class.pug\",\n\t\t\t\"comment\": \"Template blocks and includes.\"\n\t\t},\n\t\t\"unbuffered_code\": {\n\t\t\t\"begin\": \"(-|(([a-zA-Z0-9_]+)\\\\s+=))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.javascript.embedded.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\])|(({\\\\s*)?$)\",\n\t\t\t\"name\": \"source.js\",\n\t\t\t\"comment\": \"name = function() {}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#js_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#babel_parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"mixin_definition\": {\n\t\t\t\"match\": \"(mixin\\\\s+)([\\\\w-]+)(?:(\\\\()\\\\s*((?:[a-zA-Z_]\\\\w*\\\\s*)(?:,\\\\s*[a-zA-Z_]\\\\w*\\\\s*)*)(\\\\)))?$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.pug\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.tag.other entity.name.function.pug\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.js\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.js\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"mixin_call\": {\n\t\t\t\"begin\": \"((?:mixin\\\\s+)|\\\\+)([\\\\w-]+)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.pug\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.tag.other entity.name.function.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?!\\\\()|$\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\\))\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"args.mixin.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#js_parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([^\\\\s(),=/]+)\\\\s*=\\\\s*\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.tag.other entity.other.attribute-name.tag.pug\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"flow_control\": {\n\t\t\t\"begin\": \"(for|if|else if|else|until|while|unless|case)(\\\\s+|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"meta.control.flow.pug\",\n\t\t\t\"comment\": \"Pug control flow.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"name\": \"js.embedded.control.flow.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"flow_control_each\": {\n\t\t\t\"begin\": \"(each)(\\\\s+|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"meta.control.flow.pug.each\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([\\\\w$_]+)(?:\\\\s*,\\\\s*([\\\\w$_]+))?\",\n\t\t\t\t\t\"name\": \"variable.other.pug.each-var\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"name\": \"js.embedded.control.flow.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_when_paren\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"name\": \"js.when.control.flow.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#case_when_paren\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"invalid.illegal.name.tag.pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_conds\": {\n\t\t\t\"begin\": \"(default|when)((\\\\s+|(?=:))|$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$\",\n\t\t\t\"name\": \"meta.control.flow.pug\",\n\t\t\t\"comment\": \"Pug case conditionals.\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?!:)\",\n\t\t\t\t\t\"end\": \"(?=:\\\\s+)|$\",\n\t\t\t\t\t\"name\": \"js.embedded.control.flow.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_when_paren\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\\\\s+\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"name\": \"tag.case.control.flow.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#complete_tag\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"complete_tag\": {\n\t\t\t\"begin\": \"(?=[\\\\w.#])|(:\\\\s*)\",\n\t\t\t\"end\": \"(\\\\.?$)|(?=:.)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.pug.dot-block-dot\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#blocks_and_includes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unbuffered_code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#mixin_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#flow_control\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#flow_control_each\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=:)\\\\w.*$\",\n\t\t\t\t\t\"name\": \"invalid.illegal.name.tag.pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_id\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_classes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_mixin_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((\\\\.)\\\\s+$)|((:)\\\\s*$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.end.tag.pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.end.tag.pug\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#printed_expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_text\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag_name\": {\n\t\t\t\"begin\": \"([#!]\\\\{(?=.*?\\\\}))|(\\\\w(([\\\\w:-]+[\\\\w-])|([\\\\w-]*)))\",\n\t\t\t\"end\": \"(\\\\G(?<!\\\\5[^\\\\w-]))|\\\\}|$\",\n\t\t\t\"name\": \"meta.tag.other entity.name.tag.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?<=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"name\": \"meta.tag.other entity.name.tag.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"{\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.tag.pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag_id\": {\n\t\t\t\"match\": \"#[\\\\w-]+\",\n\t\t\t\"name\": \"meta.selector.css entity.other.attribute-name.id.css.pug\"\n\t\t},\n\t\t\"tag_classes\": {\n\t\t\t\"match\": \"\\\\.([^\\\\w-])?[\\\\w-]*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.tag.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.selector.css entity.other.attribute-name.class.css.pug\"\n\t\t},\n\t\t\"tag_attributes\": {\n\t\t\t\"begin\": \"(\\\\(\\\\s*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.name.attribute.tag.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"name\": \"meta.tag.other\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attribute_name_paren\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attribute_name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"!(?!=)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.tag.pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"=\\\\s*\",\n\t\t\t\t\t\"end\": \"$|(?=,|(?:\\\\s+[^!%&*\\\\-+~|<>?/])|\\\\))\",\n\t\t\t\t\t\"name\": \"attribute_value\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#js_parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#js_brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#js_braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[%&*\\\\-+~|<>:?/])\\\\s+\",\n\t\t\t\t\t\"end\": \"$|(?=,|(?:\\\\s+[^!%&*\\\\-+~|<>?/])|\\\\))\",\n\t\t\t\t\t\"name\": \"attribute_value2\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#js_parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#js_brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#js_braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag_attribute_name\": {\n\t\t\t\"match\": \"([^\\\\s(),=/!]+)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.tag.pug\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"tag_attribute_name_paren\": {\n\t\t\t\"begin\": \"\\\\(\\\\s*\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"name\": \"entity.other.attribute-name.tag.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attribute_name_paren\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_attribute_name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag_mixin_attributes\": {\n\t\t\t\"begin\": \"(&attributes\\\\()\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"name\": \"meta.tag.other\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"attributes(?=\\\\))\",\n\t\t\t\t\t\"name\": \"storage.type.keyword.pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag_text\": {\n\t\t\t\"begin\": \"(?=.)\",\n\t\t\t\"end\": \"$\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#embedded_html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#html_entity\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_error\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_pug_text\": {\n\t\t\t\"begin\": \"\",\n\t\t\t\"end\": \"(?=\\\\])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_pug_text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#embedded_html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#html_entity\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_error\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_pug\": {\n\t\t\t\"begin\": \"(?<!\\\\\\\\)(#\\\\[)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.pug\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.pug\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\"name\": \"inline.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#mixin_call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\\])(?=[\\\\w.#])|(:\\\\s*)\",\n\t\t\t\t\t\"end\": \"(?=\\\\]|(:.)|=|\\\\s)\",\n\t\t\t\t\t\"name\": \"tag.inline.pug\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_id\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_classes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_attributes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tag_mixin_attributes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline_pug\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.tag.pug\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unbuffered_code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#printed_expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\[\",\n\t\t\t\t\t\"name\": \"invalid.illegal.tag.pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline_pug_text\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"html_entity\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\",\n\t\t\t\t\t\"name\": \"constant.character.entity.html.text.pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[<>&]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.html_entity.text.pug\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolated_value\": {\n\t\t\t\"begin\": \"(?<!\\\\\\\\)[#!]\\\\{(?=.*?\\\\})\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"name\": \"string.interpolated.pug\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"{\",\n\t\t\t\t\t\"name\": \"invalid.illegal.tag.pug\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolated_error\": {\n\t\t\t\"match\": \"(?<!\\\\\\\\)[#!]\\\\{(?=[^}]*$)\",\n\t\t\t\"name\": \"invalid.illegal.tag.pug\"\n\t\t},\n\t\t\"printed_expression\": {\n\t\t\t\"begin\": \"(!?\\\\=)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\])|$\",\n\t\t\t\"name\": \"source.js\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#js_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"embedded_html\": {\n\t\t\t\"begin\": \"(?=<[^>]*>)\",\n\t\t\t\"end\": \"$|(?=>)\",\n\t\t\t\"name\": \"html\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_error\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"js_parens\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#js_parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"js_brackets\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#js_brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"js_braces\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#js_braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"babel_parens\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)|(({\\\\s*)?$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#babel_parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/python/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outDir\": \"${workspaceFolder}/out\",\n\t\t\t\"preLaunchTask\": \"npm\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/python/.vscode/tasks.json",
    "content": "// Available variables which can be used inside of strings.\n// ${workspaceFolder}: the root folder of the team\n// ${file}: the current opened file\n// ${fileBasename}: the current opened file's basename\n// ${fileDirname}: the current opened file's dirname\n// ${fileExtname}: the current opened file's extension\n// ${cwd}: the current working directory of the spawned process\n\n// A task runner that calls a custom npm script that compiles the extension.\n{\n\t\"version\": \"0.1.0\",\n\n\t// we want to run npm\n\t\"command\": \"npm\",\n\n\t// the command is a shell script\n\t\"isShellCommand\": true,\n\n\t// show the output window only if unrecognized errors occur.\n\t\"showOutput\": \"silent\",\n\n\t// we run the custom script \"compile\" as defined in package.json\n\t\"args\": [\"run\", \"compile\"],\n\n\t// The tsc compiler is started in watching mode\n\t\"isWatching\": true,\n\n\t// use the standard tsc in watch mode problem matcher to find compile problems in the output.\n\t\"problemMatcher\": \"$tsc-watch\"\n}"
  },
  {
    "path": "extensions/python/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n.vscode\n"
  },
  {
    "path": "extensions/python/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"MagicStack/MagicPython\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/MagicStack/MagicPython\",\n\t\t\t\t\t\"commitHash\": \"7d0f2b22a5ad8fccbd7341bc7b7a715169283044\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.1.1\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/python/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"\\\"\\\"\\\"\", \"\\\"\\\"\\\"\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\" },\n\t\t{ \"open\": \"[\", \"close\": \"]\" },\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"r\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"R\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"u\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"U\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"f\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"F\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"b\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"B\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"r'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"R'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"u'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"U'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"f'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"F'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"b'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"B'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"`\", \"`\"]\n\t],\n\t\"folding\": {\n\t\t\"offSide\": true,\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#\\\\s*region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*#\\\\s*endregion\\\\b\"\n\t\t}\n\t},\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t\"beforeText\": \"^\\\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async).*?:\\\\s*$\",\n\t\t\t\"action\": { \"indent\": \"indent\" }\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/python/package.json",
    "content": "{\n  \"name\": \"python\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"python\",\n        \"extensions\": [\n          \".py\",\n          \".rpy\",\n          \".pyw\",\n          \".cpy\",\n          \".gyp\",\n          \".gypi\",\n          \".pyi\",\n          \".ipy\",\n          \".pyt\"\n        ],\n        \"aliases\": [\n          \"Python\",\n          \"py\"\n        ],\n        \"filenames\": [\n          \"SConstruct\",\n          \"SConscript\"\n        ],\n        \"firstLine\": \"^#!\\\\s*/?.*\\\\bpython[0-9.-]*\\\\b\",\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"python\",\n        \"scopeName\": \"source.python\",\n        \"path\": \"./syntaxes/MagicPython.tmLanguage.json\"\n      },\n      {\n        \"scopeName\": \"source.regexp.python\",\n        \"path\": \"./syntaxes/MagicRegExp.tmLanguage.json\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[python]\": {\n        \"diffEditor.ignoreTrimWhitespace\": false,\n        \"editor.defaultColorDecorators\": \"never\"\n      }\n    }\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin MagicStack/MagicPython grammars/MagicPython.tmLanguage ./syntaxes/MagicPython.tmLanguage.json grammars/MagicRegExp.tmLanguage ./syntaxes/MagicRegExp.tmLanguage.json\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/python/package.nls.json",
    "content": "{\n\t\"displayName\": \"Python Language Basics\",\n\t\"description\": \"Provides syntax highlighting, bracket matching and folding in Python files.\"\n}\n"
  },
  {
    "path": "extensions/python/syntaxes/MagicPython.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/MagicStack/MagicPython/blob/master/grammars/MagicPython.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/MagicStack/MagicPython/commit/7d0f2b22a5ad8fccbd7341bc7b7a715169283044\",\n\t\"name\": \"MagicPython\",\n\t\"scopeName\": \"source.python\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#statement\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#expression\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"impossible\": {\n\t\t\t\"comment\": \"This is a special rule that should be used where no match is desired. It is not a good idea to match something like '1{0}' because in some cases that can result in infinite loops in token generation. So the rule instead matches and impossible expression to allow a match to fail and move to the next token.\",\n\t\t\t\"match\": \"$.^\"\n\t\t},\n\t\t\"statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statement-keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assignment-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#docstring-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"semicolon\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.deprecated.semicolon.python\",\n\t\t\t\t\t\"match\": \"\\\\;$\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.number-sign.python\",\n\t\t\t\t\t\"contentName\": \"meta.typehint.comment.python\",\n\t\t\t\t\t\"begin\": \"(?x)\\n  (?:\\n    \\\\# \\\\s* (type:)\\n    \\\\s*+ (?# we want `\\\\s*+` which is possessive quantifier since\\n             we do not actually want to backtrack when matching\\n             whitespace here)\\n    (?! $ | \\\\#)\\n  )\\n\",\n\t\t\t\t\t\"end\": \"(?:$|(?=\\\\#))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.typehint.comment.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.typehint.directive.notation.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"comment.typehint.ignore.notation.python\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n  \\\\G ignore\\n  (?= \\\\s* (?: $ | \\\\#))\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"comment.typehint.type.notation.python\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n  (?<!\\\\.)\\\\b(\\n    bool | bytes | float | int | object | str\\n    | List | Dict | Iterable | Sequence | Set\\n    | FrozenSet | Callable | Union | Tuple\\n    | Any | None\\n  )\\\\b\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"comment.typehint.punctuation.notation.python\",\n\t\t\t\t\t\t\t\"match\": \"([\\\\[\\\\]\\\\(\\\\),\\\\.\\\\=\\\\*]|(->))\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"comment.typehint.variable.notation.python\",\n\t\t\t\t\t\t\t\"match\": \"([[:alpha:]_]\\\\w*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-base\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"docstring-statement\": {\n\t\t\t\"begin\": \"^(?=\\\\s*[rR]?(\\\\'\\\\'\\\\'|\\\\\\\"\\\\\\\"\\\\\\\"|\\\\'|\\\\\\\"))\",\n\t\t\t\"comment\": \"the string either terminates correctly or by the beginning of a new line (this is for single line docstrings that aren't terminated) AND it's not followed by another docstring\",\n\t\t\t\"end\": \"((?<=\\\\1)|^)(?!\\\\s*[rR]?(\\\\'\\\\'\\\\'|\\\\\\\"\\\\\\\"\\\\\\\"|\\\\'|\\\\\\\"))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#docstring\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"docstring\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.docstring.multi.python\",\n\t\t\t\t\t\"begin\": \"(\\\\'\\\\'\\\\'|\\\\\\\"\\\\\\\"\\\\\\\")\",\n\t\t\t\t\t\"end\": \"(\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#docstring-prompt\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#docstring-guts-unicode\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.docstring.raw.multi.python\",\n\t\t\t\t\t\"begin\": \"([rR])(\\\\'\\\\'\\\\'|\\\\\\\"\\\\\\\"\\\\\\\")\",\n\t\t\t\t\t\"end\": \"(\\\\2)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#docstring-prompt\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.docstring.single.python\",\n\t\t\t\t\t\"begin\": \"(\\\\'|\\\\\\\")\",\n\t\t\t\t\t\"end\": \"(\\\\1)|(\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#docstring-guts-unicode\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.docstring.raw.single.python\",\n\t\t\t\t\t\"begin\": \"([rR])(\\\\'|\\\\\\\")\",\n\t\t\t\t\t\"end\": \"(\\\\2)|(\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"docstring-guts-unicode\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-line-continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"docstring-prompt\": {\n\t\t\t\"match\": \"(?x)\\n  (?:\\n    (?:^|\\\\G) \\\\s* (?# '\\\\G' is necessary for ST)\\n    ((?:>>>|\\\\.\\\\.\\\\.) \\\\s) (?=\\\\s*\\\\S)\\n  )\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"statement-keyword\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.function.python\",\n\t\t\t\t\t\"match\": \"\\\\b((async\\\\s+)?\\\\s*def)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.flow.python\",\n\t\t\t\t\t\"comment\": \"if `as` is eventually followed by `:` or line continuation\\nit's probably control flow like:\\n    with foo as bar, \\\\\\n         Foo as Bar:\\n      try:\\n        do_stuff()\\n      except Exception as e:\\n        pass\\n\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\.)as\\\\b(?=.*[:\\\\\\\\])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.import.python\",\n\t\t\t\t\t\"comment\": \"other legal use of `as` is in an import\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\.)as\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.flow.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\b(?<!\\\\.)(\\n    async | continue | del | assert | break | finally | for\\n    | from | elif | else | if | except | pass | raise\\n    | return | try | while | with\\n  )\\\\b\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.declaration.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\b(?<!\\\\.)(\\n    global | nonlocal\\n  )\\\\b\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.class.python\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\.)(class)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  ^\\\\s*(\\n    case | match\\n  )(?=\\\\s*([-+\\\\w\\\\d(\\\\[{'\\\":#]|$))\\\\b\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-bare\": {\n\t\t\t\"comment\": \"valid Python expressions w/o comments and line continuation\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#backticks\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-anno\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambda\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#generator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#curly-braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#item-access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#odd-function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#round-braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-exceptions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#magic-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ellipsis\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line-continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-base\": {\n\t\t\t\"comment\": \"valid Python expressions with comments and line continuation\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-bare\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line-continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression\": {\n\t\t\t\"comment\": \"All valid Python expressions\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-base\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Tokenize identifiers to help linters\",\n\t\t\t\t\t\"match\": \"(?x) \\\\b ([[:alpha:]_]\\\\w*) \\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member-access\": {\n\t\t\t\"name\": \"meta.member.access.python\",\n\t\t\t\"begin\": \"(\\\\.)\\\\s*(?!\\\\.)\",\n\t\t\t\"end\": \"(?x)\\n  # stop when you've just read non-whitespace followed by non-word\\n  # i.e. when finished reading an identifier or function call\\n  (?<=\\\\S)(?=\\\\W) |\\n  # stop when seeing the start of something that's not a word,\\n  # i.e. when seeing a non-identifier\\n  (^|(?<=\\\\s))(?=[^\\\\\\\\\\\\w\\\\s]) |\\n  $\\n\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.period.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-access-base\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-access-attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member-access-base\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#magic-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-object-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line-continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#item-access\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member-access-attribute\": {\n\t\t\t\"comment\": \"Highlight attribute access in otherwise non-specialized cases.\",\n\t\t\t\"name\": \"meta.attribute.python\",\n\t\t\t\"match\": \"(?x)\\n  \\\\b ([[:alpha:]_]\\\\w*) \\\\b\\n\"\n\t\t},\n\t\t\"special-names\": {\n\t\t\t\"name\": \"constant.other.caps.python\",\n\t\t\t\"match\": \"(?x)\\n  \\\\b\\n    # we want to see \\\"enough\\\", meaning 2 or more upper-case\\n    # letters in the beginning of the constant\\n    #\\n    # for more details refer to:\\n    #   https://github.com/MagicStack/MagicPython/issues/42\\n    (\\n      _* [[:upper:]] [_\\\\d]* [[:upper:]]\\n    )\\n    [[:upper:]\\\\d]* (_\\\\w*)?\\n  \\\\b\\n\"\n\t\t},\n\t\t\"curly-braces\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dict.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.dict.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.dict.python\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"list\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.list.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.list.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"odd-function-call\": {\n\t\t\t\"comment\": \"A bit obscured function call where there may have been an\\narbitrary number of other operations to get the function.\\nE.g. \\\"arr[idx](args)\\\"\\n\",\n\t\t\t\"begin\": \"(?x)\\n  (?<= \\\\] | \\\\) ) \\\\s*\\n  (?=\\\\()\\n\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-arguments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"round-braces\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line-continuation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\\\\\)\\\\s*(\\\\S.*$\\\\n?)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.continuation.line.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.line.continuation.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\\\\\)\\\\s*$\\\\n?\",\n\t\t\t\t\t\"end\": \"(?x)\\n  (?=^\\\\s*$)\\n  |\\n  (?! (\\\\s* [rR]? (\\\\'\\\\'\\\\'|\\\\\\\"\\\\\\\"\\\\\\\"|\\\\'|\\\\\\\"))\\n      |\\n      (\\\\G $)  (?# '\\\\G' is necessary for ST)\\n  )\\n\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.continuation.line.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assignment-operator\": {\n\t\t\t\"name\": \"keyword.operator.assignment.python\",\n\t\t\t\"match\": \"(?x)\\n     <<= | >>= | //= | \\\\*\\\\*=\\n    | \\\\+= | -= | /= | @=\\n    | \\\\*= | %= | ~= | \\\\^= | &= | \\\\|=\\n    | =(?!=)\\n\"\n\t\t},\n\t\t\"operator\": {\n\t\t\t\"match\": \"(?x)\\n    \\\\b(?<!\\\\.)\\n      (?:\\n        (and | or | not | in | is)                         (?# 1)\\n        |\\n        (for | if | else | await | (?:yield(?:\\\\s+from)?))  (?# 2)\\n      )\\n    (?!\\\\s*:)\\\\b\\n\\n    | (<< | >> | & | \\\\| | \\\\^ | ~)                          (?# 3)\\n\\n    | (\\\\*\\\\* | \\\\* | \\\\+ | - | % | // | / | @)                (?# 4)\\n\\n    | (!= | == | >= | <= | < | >)                          (?# 5)\\n\\n    | (:=)                                                 (?# 6)\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.logical.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.python\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.python\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"punctuation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.colon.python\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.element.python\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.python\",\n\t\t\t\t\t\"match\": \"\\\\b(True|False|None|NotImplemented|Ellipsis)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"number\": {\n\t\t\t\"name\": \"constant.numeric.python\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-float\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-dec\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-hex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-oct\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-bin\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#number-long\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.name.python\",\n\t\t\t\t\t\"match\": \"\\\\b[0-9]+\\\\w+\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"number-float\": {\n\t\t\t\"name\": \"constant.numeric.float.python\",\n\t\t\t\"match\": \"(?x)\\n  (?<! \\\\w)(?:\\n    (?:\\n      \\\\.[0-9](?: _?[0-9] )*\\n      |\\n      [0-9](?: _?[0-9] )* \\\\. [0-9](?: _?[0-9] )*\\n      |\\n      [0-9](?: _?[0-9] )* \\\\.\\n    ) (?: [eE][+-]?[0-9](?: _?[0-9] )* )?\\n    |\\n    [0-9](?: _?[0-9] )* (?: [eE][+-]?[0-9](?: _?[0-9] )* )\\n  )([jJ])?\\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.imaginary.number.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"number-dec\": {\n\t\t\t\"name\": \"constant.numeric.dec.python\",\n\t\t\t\"match\": \"(?x)\\n  (?<![\\\\w\\\\.])(?:\\n      [1-9](?: _?[0-9] )*\\n      |\\n      0+\\n      |\\n      [0-9](?: _?[0-9] )* ([jJ])\\n      |\\n      0 ([0-9]+)(?![eE\\\\.])\\n  )\\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.imaginary.number.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.dec.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"number-hex\": {\n\t\t\t\"name\": \"constant.numeric.hex.python\",\n\t\t\t\"match\": \"(?x)\\n  (?<![\\\\w\\\\.])\\n    (0[xX]) (_?[0-9a-fA-F])+\\n  \\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.number.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"number-oct\": {\n\t\t\t\"name\": \"constant.numeric.oct.python\",\n\t\t\t\"match\": \"(?x)\\n  (?<![\\\\w\\\\.])\\n    (0[oO]) (_?[0-7])+\\n  \\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.number.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"number-bin\": {\n\t\t\t\"name\": \"constant.numeric.bin.python\",\n\t\t\t\"match\": \"(?x)\\n  (?<![\\\\w\\\\.])\\n    (0[bB]) (_?[01])+\\n  \\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.number.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"number-long\": {\n\t\t\t\"name\": \"constant.numeric.bin.python\",\n\t\t\t\"comment\": \"this is to support python2 syntax for long ints\",\n\t\t\t\"match\": \"(?x)\\n  (?<![\\\\w\\\\.])\\n    ([1-9][0-9]* | 0) ([lL])\\n  \\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.number.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regexp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-single-three-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-double-three-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-single-one-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-double-one-line\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-multi-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-quoted-single-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-bin-quoted-multi-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-bin-quoted-single-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-quoted-multi-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-quoted-single-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-bin-quoted-multi-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-bin-quoted-single-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-fnorm-quoted-multi-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-fnorm-quoted-single-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-normf-quoted-multi-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-normf-quoted-single-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-raw-quoted-multi-line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-raw-quoted-single-line\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-unicode-guts\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-entity\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-brace-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-consume-escape\": {\n\t\t\t\"match\": \"\\\\\\\\['\\\"\\\\n\\\\\\\\]\"\n\t\t},\n\t\t\"string-raw-guts\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-formatting\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-brace-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-raw-bin-guts\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-entity\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-line-continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-guts\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-line-continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-raw-guts\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-illegal-single-brace\": {\n\t\t\t\"comment\": \"it is illegal to have a multiline brace inside a single-line string\",\n\t\t\t\"begin\": \"(\\\\{)(?=[^\\\\n}]*$\\\\n?)\",\n\t\t\t\"end\": \"(\\\\})|(?=\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-terminator-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#f-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-illegal-multi-brace\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#impossible\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"f-expression\": {\n\t\t\t\"comment\": \"All valid Python expressions, except comments and line continuation\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-bare\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-access\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Tokenize identifiers to help linters\",\n\t\t\t\t\t\"match\": \"(?x) \\\\b ([[:alpha:]_]\\\\w*) \\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"escape-sequence-unicode\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\\\\\ (\\n        u[0-9A-Fa-f]{4}\\n        | U[0-9A-Fa-f]{8}\\n        | N\\\\{[\\\\w\\\\s]+?\\\\}\\n     )\\n\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"escape-sequence\": {\n\t\t\t\"name\": \"constant.character.escape.python\",\n\t\t\t\"match\": \"(?x)\\n  \\\\\\\\ (\\n        x[0-9A-Fa-f]{2}\\n        | [0-7]{1,3}\\n        | [\\\\\\\\\\\"'abfnrtv]\\n     )\\n\"\n\t\t},\n\t\t\"string-line-continuation\": {\n\t\t\t\"name\": \"constant.language.python\",\n\t\t\t\"match\": \"\\\\\\\\$\"\n\t\t},\n\t\t\"string-formatting\": {\n\t\t\t\"name\": \"meta.format.percent.python\",\n\t\t\t\"match\": \"(?x)\\n  (\\n    % (\\\\([\\\\w\\\\s]*\\\\))?\\n      [-+#0 ]*\\n      (\\\\d+|\\\\*)? (\\\\.(\\\\d+|\\\\*))?\\n      ([hlL])?\\n      [diouxXeEfFgGcrsab%]\\n  )\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"string-brace-formatting\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.format.brace.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  (\\n    {{ | }}\\n    | (?:\\n      {\\n        \\\\w* (\\\\.[[:alpha:]_]\\\\w* | \\\\[[^\\\\]'\\\"]+\\\\])*\\n        (![rsa])?\\n        ( : \\\\w? [<>=^]? [-+ ]? \\\\#?\\n          \\\\d* ,? (\\\\.\\\\d+)? [bcdeEfFgGnosxX%]? )?\\n      })\\n  )\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.format.brace.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  (\\n    {\\n      \\\\w* (\\\\.[[:alpha:]_]\\\\w* | \\\\[[^\\\\]'\\\"]+\\\\])*\\n      (![rsa])?\\n      (:)\\n        [^'\\\"{}\\\\n]* (?:\\n          \\\\{ [^'\\\"}\\\\n]*? \\\\} [^'\\\"{}\\\\n]*\\n        )*\\n    }\\n  )\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-formatting\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-formatting-braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-formatting-singe-brace\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-formatting-singe-brace\": {\n\t\t\t\"name\": \"invalid.illegal.brace.python\",\n\t\t\t\"match\": \"(}(?!}))\"\n\t\t},\n\t\t\"import\": {\n\t\t\t\"comment\": \"Import statements used to correctly mark `from`, `import`, and `as`\\n\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(?<!\\\\.)(from)\\\\b(?=.+import)\",\n\t\t\t\t\t\"end\": \"$|(?=import)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.python\",\n\t\t\t\t\t\t\t\"match\": \"\\\\.+\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(?<!\\\\.)(import)\\\\b\",\n\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.python\",\n\t\t\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\.)as\\\\b\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.class.python\",\n\t\t\t\t\t\"begin\": \"(?x)\\n  \\\\s*(class)\\\\s+\\n    (?=\\n      [[:alpha:]_]\\\\w* \\\\s* (:|\\\\()\\n    )\\n\",\n\t\t\t\t\t\"end\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.class.begin.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#class-inheritance\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-object-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-possible-callables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.class.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\b ([[:alpha:]_]\\\\w*) \\\\b\\n\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-inheritance\": {\n\t\t\t\"name\": \"meta.class.inheritance.python\",\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.inheritance.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.inheritance.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.unpacking.arguments.python\",\n\t\t\t\t\t\"match\": \"(\\\\*\\\\*|\\\\*)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.python\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.python\",\n\t\t\t\t\t\"match\": \"=(?!=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.type.metaclass.python\",\n\t\t\t\t\t\"match\": \"\\\\bmetaclass\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-kwarg\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#call-wrapper-inheritance\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-base\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-access-class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inheritance-identifier\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-kwarg\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\b ([[:alpha:]_]\\\\w*) \\\\s*(=)(?!=)\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.python variable.parameter.class.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"inheritance-identifier\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\b ([[:alpha:]_]\\\\w*) \\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"member-access-class\": {\n\t\t\t\"name\": \"meta.member.access.python\",\n\t\t\t\"begin\": \"(\\\\.)\\\\s*(?!\\\\.)\",\n\t\t\t\"end\": \"(?<=\\\\S)(?=\\\\W)|$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.period.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#call-wrapper-inheritance\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-access-base\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inheritance-identifier\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"lambda\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?<=\\\\.)lambda|lambda(?=\\\\s*[\\\\.=]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(lambda)\\\\s*?(?=[,\\\\n]|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.lambda.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.lambda-function.python\",\n\t\t\t\t\t\"begin\": \"(?x)\\n  \\\\b (lambda) \\\\b\\n\",\n\t\t\t\t\t\"end\": \"(:)|(\\\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.lambda.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.lambda.begin.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.function.lambda.parameters.python\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.positional.parameter.python\",\n\t\t\t\t\t\t\t\"match\": \"/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.unpacking.parameter.python\",\n\t\t\t\t\t\t\t\"match\": \"(\\\\*\\\\*|\\\\*)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lambda-nested-incomplete\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#illegal-names\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([[:alpha:]_]\\\\w*)\\\\s*(?:(,)|(?=:|$))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.language.python\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.python\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#backticks\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#illegal-anno\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lambda-parameter-with-default\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line-continuation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#illegal-operator\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"lambda-incomplete\": {\n\t\t\t\"name\": \"storage.type.function.lambda.python\",\n\t\t\t\"match\": \"\\\\blambda(?=\\\\s*[,)])\"\n\t\t},\n\t\t\"lambda-nested-incomplete\": {\n\t\t\t\"name\": \"storage.type.function.lambda.python\",\n\t\t\t\"match\": \"\\\\blambda(?=\\\\s*[:,)])\"\n\t\t},\n\t\t\"lambda-parameter-with-default\": {\n\t\t\t\"begin\": \"(?x)\\n  \\\\b\\n  ([[:alpha:]_]\\\\w*) \\\\s* (=)\\n\",\n\t\t\t\"end\": \"(,)|(?=:|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.language.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.parameters.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"generator\": {\n\t\t\t\"comment\": \"Match \\\"for ... in\\\" construct used in generators and for loops to\\ncorrectly identify the \\\"in\\\" as a control flow keyword.\\n\",\n\t\t\t\"begin\": \"\\\\bfor\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\bin\\\\b\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-declaration\": {\n\t\t\t\"name\": \"meta.function.python\",\n\t\t\t\"begin\": \"(?x)\\n  \\\\s*\\n  (?:\\\\b(async) \\\\s+)? \\\\b(def)\\\\s+\\n    (?=\\n      [[:alpha:]_][[:word:]]* \\\\s* \\\\(\\n    )\\n\",\n\t\t\t\"end\": \"(:|(?=[#'\\\"\\\\n]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.async.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.function.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-def-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line-continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#return-annotation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-def-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-object-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-possible-callables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.function.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\b ([[:alpha:]_]\\\\w*) \\\\b\\n\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameters\": {\n\t\t\t\"name\": \"meta.function.parameters.python\",\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.positional.parameter.python\",\n\t\t\t\t\t\"match\": \"/\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.unpacking.parameter.python\",\n\t\t\t\t\t\"match\": \"(\\\\*\\\\*|\\\\*)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambda-incomplete\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-object-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-special\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  ([[:alpha:]_]\\\\w*)\\n    \\\\s* (?: (,) | (?=[)#\\\\n=]))\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.language.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#loose-default\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#annotated-parameter\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-special\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\b ((self)|(cls)) \\\\b \\\\s*(?:(,)|(?=\\\\)))\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.language.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.language.special.self.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.language.special.cls.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.parameters.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"loose-default\": {\n\t\t\t\"begin\": \"(=)\",\n\t\t\t\"end\": \"(,)|(?=\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.parameters.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"annotated-parameter\": {\n\t\t\t\"begin\": \"(?x)\\n  \\\\b\\n  ([[:alpha:]_]\\\\w*) \\\\s* (:)\\n\",\n\t\t\t\"end\": \"(,)|(?=\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.parameter.function.language.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.annotation.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.parameters.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.python\",\n\t\t\t\t\t\"match\": \"=(?!=)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-annotation\": {\n\t\t\t\"begin\": \"(->)\",\n\t\t\t\"end\": \"(?=:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.annotation.result.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"item-access\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.item-access.python\",\n\t\t\t\t\t\"begin\": \"(?x)\\n  \\\\b(?=\\n    [[:alpha:]_]\\\\w* \\\\s* \\\\[\\n  )\\n\",\n\t\t\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#item-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#item-index\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"item-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.indexed-name.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\b ([[:alpha:]_]\\\\w*) \\\\b\\n\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"item-index\": {\n\t\t\t\"begin\": \"(\\\\[)\",\n\t\t\t\"end\": \"(?=\\\\])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.item-access.arguments.python\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.slice.python\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decorator\": {\n\t\t\t\"name\": \"meta.function.decorator.python\",\n\t\t\t\"begin\": \"(?x)\\n  ^\\\\s*\\n  ((@)) \\\\s* (?=[[:alpha:]_]\\\\w*)\\n\",\n\t\t\t\"end\": \"(?x)\\n  ( \\\\) )\\n    # trailing whitespace and comments are legal\\n    (?: (.*?) (?=\\\\s*(?:\\\\#|$)) )\\n  | (?=\\\\n|\\\\#)\\n\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.decorator.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.decorator.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.decorator.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-arguments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decorator-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-callables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-object-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.function.decorator.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  ([[:alpha:]_]\\\\w*) | (\\\\.)\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.period.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line-continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.decorator.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\s* ([^([:alpha:]\\\\s_\\\\.#\\\\\\\\] .*?) (?=\\\\#|$)\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.decorator.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"call-wrapper-inheritance\": {\n\t\t\t\"comment\": \"same as a function call, but in inheritance context\",\n\t\t\t\"name\": \"meta.function-call.python\",\n\t\t\t\"begin\": \"(?x)\\n  \\\\b(?=\\n    ([[:alpha:]_]\\\\w*) \\\\s* (\\\\()\\n  )\\n\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inheritance-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-arguments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inheritance-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambda-incomplete\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-possible-callables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inheritance-identifier\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call\": {\n\t\t\t\"name\": \"meta.function-call.python\",\n\t\t\t\"comment\": \"Regular function call of the type \\\"name(args)\\\"\",\n\t\t\t\"begin\": \"(?x)\\n  \\\\b(?=\\n    ([[:alpha:]_]\\\\w*) \\\\s* (\\\\()\\n  )\\n\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#special-variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-arguments\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-possible-callables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Some color schemas support meta.function-call.generic scope\",\n\t\t\t\t\t\"name\": \"meta.function-call.generic.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\b ([[:alpha:]_]\\\\w*) \\\\b\\n\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-arguments\": {\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"end\": \"(?=\\\\))(?!\\\\)\\\\s*\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.function-call.arguments.python\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.arguments.python\",\n\t\t\t\t\t\"match\": \"(,)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  (?:(?<=[,(])|^) \\\\s* (\\\\*{1,2})\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.unpacking.arguments.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lambda-incomplete\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([[:alpha:]_]\\\\w*)\\\\s*(=)(?!=)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function-call.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.python\",\n\t\t\t\t\t\"match\": \"=(?!=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s*(\\\\))\\\\s*(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-callables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#illegal-object-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-exceptions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-possible-callables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-callables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#magic-names\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-exceptions\": {\n\t\t\t\"name\": \"support.type.exception.python\",\n\t\t\t\"match\": \"(?x) (?<!\\\\.) \\\\b(\\n  (\\n    Arithmetic | Assertion | Attribute | Buffer | BlockingIO\\n    | BrokenPipe | ChildProcess\\n    | (Connection (Aborted | Refused | Reset)?)\\n    | EOF | Environment | FileExists | FileNotFound\\n    | FloatingPoint | IO | Import | Indentation | Index | Interrupted\\n    | IsADirectory | NotADirectory | Permission | ProcessLookup\\n    | Timeout\\n    | Key | Lookup | Memory | Name | NotImplemented | OS | Overflow\\n    | Reference | Runtime | Recursion | Syntax | System\\n    | Tab | Type | UnboundLocal | Unicode(Encode|Decode|Translate)?\\n    | Value | Windows | ZeroDivision | ModuleNotFound\\n  ) Error\\n|\\n  ((Pending)?Deprecation | Runtime | Syntax | User | Future | Import\\n    | Unicode | Bytes | Resource\\n  )? Warning\\n|\\n  SystemExit | Stop(Async)?Iteration\\n  | KeyboardInterrupt\\n  | GeneratorExit | (Base)?Exception\\n)\\\\b\\n\"\n\t\t},\n\t\t\"builtin-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.function.builtin.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  (?<!\\\\.) \\\\b(\\n    __import__ | abs | aiter | all | any | anext | ascii | bin\\n    | breakpoint | callable | chr | compile | copyright | credits\\n    | delattr | dir | divmod | enumerate | eval | exec | exit\\n    | filter | format | getattr | globals | hasattr | hash | help\\n    | hex | id | input | isinstance | issubclass | iter | len\\n    | license | locals | map | max | memoryview | min | next\\n    | oct | open | ord | pow | print | quit | range | reload | repr\\n    | reversed | round | setattr | sorted | sum | vars | zip\\n  )\\\\b\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.legacy.builtin.python\",\n\t\t\t\t\t\"match\": \"(?x)\\n  (?<!\\\\.) \\\\b(\\n    file | reduce | intern | raw_input | unicode | cmp | basestring\\n    | execfile | long | xrange\\n  )\\\\b\\n\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-types\": {\n\t\t\t\"name\": \"support.type.python\",\n\t\t\t\"match\": \"(?x)\\n  (?<!\\\\.) \\\\b(\\n    bool | bytearray | bytes | classmethod | complex | dict\\n    | float | frozenset | int | list | object | property\\n    | set | slice | staticmethod | str | tuple | type\\n\\n    (?# Although 'super' is not a type, it's related to types,\\n        and is special enough to be highlighted differently from\\n        other built-ins)\\n    | super\\n  )\\\\b\\n\"\n\t\t},\n\t\t\"magic-function-names\": {\n\t\t\t\"comment\": \"these methods have magic interpretation by python and are generally called\\nindirectly through syntactic constructs\\n\",\n\t\t\t\"match\": \"(?x)\\n  \\\\b(\\n    __(?:\\n      abs | add | aenter | aexit | aiter | and | anext\\n      | await | bool | call | ceil | class_getitem\\n      | cmp | coerce | complex | contains | copy\\n      | deepcopy | del | delattr | delete | delitem\\n      | delslice | dir | div | divmod | enter | eq\\n      | exit | float | floor | floordiv | format | ge\\n      | get | getattr | getattribute | getinitargs\\n      | getitem | getnewargs | getslice | getstate | gt\\n      | hash | hex | iadd | iand | idiv | ifloordiv |\\n      | ilshift | imod | imul | index | init\\n      | instancecheck | int | invert | ior | ipow\\n      | irshift | isub | iter | itruediv | ixor | le\\n      | len | long | lshift | lt | missing | mod | mul\\n      | ne | neg | new | next | nonzero | oct | or | pos\\n      | pow | radd | rand | rdiv | rdivmod | reduce\\n      | reduce_ex | repr | reversed | rfloordiv |\\n      | rlshift | rmod | rmul | ror | round | rpow\\n      | rrshift | rshift | rsub | rtruediv | rxor | set\\n      | setattr | setitem | set_name | setslice\\n      | setstate | sizeof | str | sub | subclasscheck\\n      | truediv | trunc | unicode | xor | matmul\\n      | rmatmul | imatmul | init_subclass | set_name\\n      | fspath | bytes | prepare | length_hint\\n    )__\\n  )\\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.magic.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"magic-variable-names\": {\n\t\t\t\"comment\": \"magic variables which a class/module may have.\",\n\t\t\t\"match\": \"(?x)\\n  \\\\b(\\n    __(?:\\n      all | annotations | bases | builtins | class\\n      | closure | code | debug | defaults | dict | doc | file | func\\n      | globals | kwdefaults | match_args | members | metaclass | methods\\n      | module | mro | mro_entries | name | qualname | post_init | self\\n      | signature | slots | subclasses | version | weakref | wrapped\\n      | classcell | spec | path | package | future | traceback\\n    )__\\n  )\\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.variable.magic.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"magic-names\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#magic-function-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#magic-variable-names\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"illegal-names\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\b(?:\\n    (\\n      and | assert | async | await | break | class | continue | def\\n      | del | elif | else | except | finally | for | from | global\\n      | if | in | is | (?<=\\\\.)lambda | lambda(?=\\\\s*[\\\\.=])\\n      | nonlocal | not | or | pass | raise | return | try | while | with\\n      | yield\\n    ) | (\\n      as | import\\n    )\\n  )\\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.flow.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"special-variables\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\b (?<!\\\\.) (?:\\n    (self) | (cls)\\n  )\\\\b\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.language.special.self.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.language.special.cls.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"ellipsis\": {\n\t\t\t\"name\": \"constant.other.ellipsis.python\",\n\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t},\n\t\t\"backticks\": {\n\t\t\t\"name\": \"invalid.deprecated.backtick.python\",\n\t\t\t\"begin\": \"\\\\`\",\n\t\t\t\"end\": \"(?:\\\\`|(?<!\\\\\\\\)(\\\\n))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"illegal-operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.operator.python\",\n\t\t\t\t\t\"match\": \"&&|\\\\|\\\\||--|\\\\+\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.operator.python\",\n\t\t\t\t\t\"match\": \"[?$]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.operator.python\",\n\t\t\t\t\t\"comment\": \"We don't want `!` to flash when we're typing `!=`\",\n\t\t\t\t\t\"match\": \"!\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"illegal-object-name\": {\n\t\t\t\"comment\": \"It's illegal to name class or function \\\"True\\\"\",\n\t\t\t\"name\": \"keyword.illegal.name.python\",\n\t\t\t\"match\": \"\\\\b(True|False|None)\\\\b\"\n\t\t},\n\t\t\"illegal-anno\": {\n\t\t\t\"name\": \"invalid.illegal.annotation.python\",\n\t\t\t\"match\": \"->\"\n\t\t},\n\t\t\"regexp-base-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-quantifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-common\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fregexp-base-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fregexp-quantifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-formatting-braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\{.*?\\\\}\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-common\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-formatting-braces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"empty braces are illegal\",\n\t\t\t\t\t\"match\": \"({)(\\\\s*?)(})\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.brace.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.python\",\n\t\t\t\t\t\"match\": \"({{|}})\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-base-common\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.other.match.any.regexp\",\n\t\t\t\t\t\"match\": \"\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.other.match.begin.regexp\",\n\t\t\t\t\t\"match\": \"\\\\^\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.other.match.end.regexp\",\n\t\t\t\t\t\"match\": \"\\\\$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\t\t\"match\": \"[+*?]\\\\??\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.disjunction.regexp\",\n\t\t\t\t\t\"match\": \"\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-sequence\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-quantifier\": {\n\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\{(\\n    \\\\d+ | \\\\d+,(\\\\d+)? | ,\\\\d+\\n  )\\\\}\\n\"\n\t\t},\n\t\t\"fregexp-quantifier\": {\n\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\{\\\\{(\\n    \\\\d+ | \\\\d+,(\\\\d+)? | ,\\\\d+\\n  )\\\\}\\\\}\\n\"\n\t\t},\n\t\t\"regexp-backreference-number\": {\n\t\t\t\"name\": \"meta.backreference.regexp\",\n\t\t\t\"match\": \"(\\\\\\\\[1-9]\\\\d?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.backreference.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regexp-backreference\": {\n\t\t\t\"name\": \"meta.backreference.named.regexp\",\n\t\t\t\"match\": \"(?x)\\n  (\\\\()  (\\\\?P= \\\\w+(?:\\\\s+[[:alnum:]]+)?)  (\\\\))\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.begin.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.named.backreference.regexp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.end.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regexp-flags\": {\n\t\t\t\"name\": \"storage.modifier.flag.regexp\",\n\t\t\t\"match\": \"\\\\(\\\\?[aiLmsux]+\\\\)\"\n\t\t},\n\t\t\"regexp-escape-special\": {\n\t\t\t\"name\": \"support.other.escape.special.regexp\",\n\t\t\t\"match\": \"\\\\\\\\([AbBdDsSwWZ])\"\n\t\t},\n\t\t\"regexp-escape-character\": {\n\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\\\\\ (\\n        x[0-9A-Fa-f]{2}\\n        | 0[0-7]{1,2}\\n        | [0-7]{3}\\n     )\\n\"\n\t\t},\n\t\t\"regexp-escape-unicode\": {\n\t\t\t\"name\": \"constant.character.unicode.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\\\\\ (\\n        u[0-9A-Fa-f]{4}\\n        | U[0-9A-Fa-f]{8}\\n     )\\n\"\n\t\t},\n\t\t\"regexp-escape-catchall\": {\n\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\"match\": \"\\\\\\\\(.|\\\\n)\"\n\t\t},\n\t\t\"regexp-escape-sequence\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-special\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-backreference-number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-catchall\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-charecter-set-escapes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[abfnrtv\\\\\\\\]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-special\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\([0-7]{1,3})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-catchall\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"codetags\": {\n\t\t\t\"match\": \"(?:\\\\b(NOTE|XXX|HACK|FIXME|BUG|TODO)\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.codetag.notation.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comments-base\": {\n\t\t\t\"name\": \"comment.line.number-sign.python\",\n\t\t\t\"begin\": \"(\\\\#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"($)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-string-single-three\": {\n\t\t\t\"name\": \"comment.line.number-sign.python\",\n\t\t\t\"begin\": \"(\\\\#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"($|(?='''))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-string-double-three\": {\n\t\t\t\"name\": \"comment.line.number-sign.python\",\n\t\t\t\"begin\": \"(\\\\#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"($|(?=\\\"\\\"\\\"))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-character-set\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-flags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-named-group\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-backreference\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-lookahead\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-lookahead-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-lookbehind\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-lookbehind-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-parentheses-non-capturing\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-parentheses\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-character-set\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\[ \\\\^? \\\\] (?! .*?\\\\])\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.character.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?(\\\\])?\",\n\t\t\t\t\t\"end\": \"(\\\\]|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.begin.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.end.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp-charecter-set-escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\",\n\t\t\t\t\t\t\t\"match\": \"[^\\\\n]\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-named-group\": {\n\t\t\t\"name\": \"meta.named.regexp\",\n\t\t\t\"begin\": \"(?x)\\n  (\\\\()  (\\\\?P <\\\\w+(?:\\\\s+[[:alnum:]]+)?>)\\n\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.named.group.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-comments\": {\n\t\t\t\"name\": \"comment.regexp\",\n\t\t\t\"begin\": \"\\\\(\\\\?#\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-lookahead\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-lookahead-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-lookbehind\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-lookbehind-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-conditional\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?\\\\((\\\\w+(?:\\\\s+[[:alnum:]]+)?|\\\\d+)\\\\)\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.conditional.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-parentheses-non-capturing\": {\n\t\t\t\"begin\": \"\\\\(\\\\?:\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-one-regexp-parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-character-set\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-flags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-named-group\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-backreference\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-lookahead\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-lookahead-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-lookbehind\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-lookbehind-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-parentheses-non-capturing\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-character-set\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\[ \\\\^? \\\\] (?! .*?\\\\])\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.character.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?(\\\\])?\",\n\t\t\t\t\t\"end\": \"(\\\\]|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.begin.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.end.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp-charecter-set-escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\",\n\t\t\t\t\t\t\t\"match\": \"[^\\\\n]\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-named-group\": {\n\t\t\t\"name\": \"meta.named.regexp\",\n\t\t\t\"begin\": \"(?x)\\n  (\\\\()  (\\\\?P <\\\\w+(?:\\\\s+[[:alnum:]]+)?>)\\n\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.named.group.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-comments\": {\n\t\t\t\"name\": \"comment.regexp\",\n\t\t\t\"begin\": \"\\\\(\\\\?#\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-lookahead\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-lookahead-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-lookbehind\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-lookbehind-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-conditional\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?\\\\((\\\\w+(?:\\\\s+[[:alnum:]]+)?|\\\\d+)\\\\)\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.conditional.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-parentheses-non-capturing\": {\n\t\t\t\"begin\": \"\\\\(\\\\?:\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-three-regexp-parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\\'\\\\'\\\\'))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-single-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-character-set\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-flags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-named-group\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-backreference\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-lookahead\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-lookahead-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-lookbehind\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-lookbehind-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-parentheses-non-capturing\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-parentheses\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-character-set\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\[ \\\\^? \\\\] (?! .*?\\\\])\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.character.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?(\\\\])?\",\n\t\t\t\t\t\"end\": \"(\\\\]|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.begin.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.end.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp-charecter-set-escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\",\n\t\t\t\t\t\t\t\"match\": \"[^\\\\n]\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-named-group\": {\n\t\t\t\"name\": \"meta.named.regexp\",\n\t\t\t\"begin\": \"(?x)\\n  (\\\\()  (\\\\?P <\\\\w+(?:\\\\s+[[:alnum:]]+)?>)\\n\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.named.group.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-comments\": {\n\t\t\t\"name\": \"comment.regexp\",\n\t\t\t\"begin\": \"\\\\(\\\\?#\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-lookahead\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-lookahead-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-lookbehind\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-lookbehind-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-conditional\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?\\\\((\\\\w+(?:\\\\s+[[:alnum:]]+)?|\\\\d+)\\\\)\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.conditional.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-parentheses-non-capturing\": {\n\t\t\t\"begin\": \"\\\\(\\\\?:\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-one-regexp-parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"))|((?=(?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-character-set\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-flags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-named-group\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-backreference\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-lookahead\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-lookahead-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-lookbehind\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-lookbehind-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-parentheses-non-capturing\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-parentheses\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-character-set\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\[ \\\\^? \\\\] (?! .*?\\\\])\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.character.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?(\\\\])?\",\n\t\t\t\t\t\"end\": \"(\\\\]|(?=\\\"\\\"\\\"))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.begin.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.end.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp-charecter-set-escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\",\n\t\t\t\t\t\t\t\"match\": \"[^\\\\n]\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-named-group\": {\n\t\t\t\"name\": \"meta.named.regexp\",\n\t\t\t\"begin\": \"(?x)\\n  (\\\\()  (\\\\?P <\\\\w+(?:\\\\s+[[:alnum:]]+)?>)\\n\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.named.group.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-comments\": {\n\t\t\t\"name\": \"comment.regexp\",\n\t\t\t\"begin\": \"\\\\(\\\\?#\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-lookahead\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-lookahead-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-lookbehind\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<=\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-lookbehind-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<!\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-conditional\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?\\\\((\\\\w+(?:\\\\s+[[:alnum:]]+)?|\\\\d+)\\\\)\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.conditional.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-parentheses-non-capturing\": {\n\t\t\t\"begin\": \"\\\\(\\\\?:\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double-three-regexp-parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"(\\\\)|(?=\\\"\\\"\\\"))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-string-double-three\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-single-one-line\": {\n\t\t\t\"name\": \"string.regexp.quoted.single.python\",\n\t\t\t\"begin\": \"\\\\b(([uU]r)|([bB]r)|(r[bB]?))(\\\\')\",\n\t\t\t\"end\": \"(\\\\')|(?<!\\\\\\\\)(\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.deprecated.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-single-three-line\": {\n\t\t\t\"name\": \"string.regexp.quoted.multi.python\",\n\t\t\t\"begin\": \"\\\\b(([uU]r)|([bB]r)|(r[bB]?))(\\\\'\\\\'\\\\')\",\n\t\t\t\"end\": \"(\\\\'\\\\'\\\\')\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.deprecated.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-three-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-double-one-line\": {\n\t\t\t\"name\": \"string.regexp.quoted.single.python\",\n\t\t\t\"begin\": \"\\\\b(([uU]r)|([bB]r)|(r[bB]?))(\\\")\",\n\t\t\t\"end\": \"(\\\")|(?<!\\\\\\\\)(\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.deprecated.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-one-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-double-three-line\": {\n\t\t\t\"name\": \"string.regexp.quoted.multi.python\",\n\t\t\t\"begin\": \"\\\\b(([uU]r)|([bB]r)|(r[bB]?))(\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\"\\\"\\\")\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.deprecated.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#double-three-regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-raw-quoted-single-line\": {\n\t\t\t\"name\": \"string.quoted.raw.single.python\",\n\t\t\t\"begin\": \"\\\\b(([uU]R)|(R))((['\\\"]))\",\n\t\t\t\"end\": \"(\\\\4)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.deprecated.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-single-bad-brace1-formatting-raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-single-bad-brace2-formatting-raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-guts\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-bin-quoted-single-line\": {\n\t\t\t\"name\": \"string.quoted.binary.single.python\",\n\t\t\t\"begin\": \"(\\\\b[bB])((['\\\"]))\",\n\t\t\t\"end\": \"(\\\\2)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-entity\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-raw-bin-quoted-single-line\": {\n\t\t\t\"name\": \"string.quoted.raw.binary.single.python\",\n\t\t\t\"begin\": \"(\\\\b(?:R[bB]|[bB]R))((['\\\"]))\",\n\t\t\t\"end\": \"(\\\\2)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-bin-guts\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-single-line\": {\n\t\t\t\"name\": \"string.quoted.single.python\",\n\t\t\t\"begin\": \"(?:\\\\b([rR])(?=[uU]))?([uU])?((['\\\"]))\",\n\t\t\t\"end\": \"(\\\\3)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-single-bad-brace1-formatting-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-single-bad-brace2-formatting-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-unicode-guts\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-single-bad-brace1-formatting-unicode\": {\n\t\t\t\"comment\": \"template using {% ... %}\",\n\t\t\t\"begin\": \"(?x)\\n    (?= \\\\{%\\n          ( .*? (?!(['\\\"])|((?<!\\\\\\\\)\\\\n)) )\\n        %\\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?=(['\\\"])|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-line-continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-single-bad-brace1-formatting-raw\": {\n\t\t\t\"comment\": \"template using {% ... %}\",\n\t\t\t\"begin\": \"(?x)\\n    (?= \\\\{%\\n          ( .*? (?!(['\\\"])|((?<!\\\\\\\\)\\\\n)) )\\n        %\\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?=(['\\\"])|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-single-bad-brace2-formatting-unicode\": {\n\t\t\t\"comment\": \"odd format or format-like syntax\",\n\t\t\t\"begin\": \"(?x)\\n    (?!\\\\{\\\\{)\\n    (?= \\\\{ (\\n              \\\\w*? (?!(['\\\"])|((?<!\\\\\\\\)\\\\n)) [^!:\\\\.\\\\[}\\\\w]\\n           )\\n        .*?(?!(['\\\"])|((?<!\\\\\\\\)\\\\n))\\n        \\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?=(['\\\"])|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-entity\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-single-bad-brace2-formatting-raw\": {\n\t\t\t\"comment\": \"odd format or format-like syntax\",\n\t\t\t\"begin\": \"(?x)\\n    (?!\\\\{\\\\{)\\n    (?= \\\\{ (\\n              \\\\w*? (?!(['\\\"])|((?<!\\\\\\\\)\\\\n)) [^!:\\\\.\\\\[}\\\\w]\\n           )\\n        .*?(?!(['\\\"])|((?<!\\\\\\\\)\\\\n))\\n        \\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?=(['\\\"])|((?<!\\\\\\\\)\\\\n))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-raw-quoted-multi-line\": {\n\t\t\t\"name\": \"string.quoted.raw.multi.python\",\n\t\t\t\"begin\": \"\\\\b(([uU]R)|(R))('''|\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\\4)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.deprecated.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-multi-bad-brace1-formatting-raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-multi-bad-brace2-formatting-raw\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-guts\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-bin-quoted-multi-line\": {\n\t\t\t\"name\": \"string.quoted.binary.multi.python\",\n\t\t\t\"begin\": \"(\\\\b[bB])('''|\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\\2)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-entity\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-raw-bin-quoted-multi-line\": {\n\t\t\t\"name\": \"string.quoted.raw.binary.multi.python\",\n\t\t\t\"begin\": \"(\\\\b(?:R[bB]|[bB]R))('''|\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\\2)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-raw-bin-guts\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-quoted-multi-line\": {\n\t\t\t\"name\": \"string.quoted.multi.python\",\n\t\t\t\"begin\": \"(?:\\\\b([rR])(?=[uU]))?([uU])?('''|\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\\3)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-multi-bad-brace1-formatting-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-multi-bad-brace2-formatting-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-unicode-guts\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-multi-bad-brace1-formatting-unicode\": {\n\t\t\t\"comment\": \"template using {% ... %}\",\n\t\t\t\"begin\": \"(?x)\\n    (?= \\\\{%\\n          ( .*? (?!'''|\\\"\\\"\\\") )\\n        %\\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?='''|\\\"\\\"\\\")\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-line-continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-multi-bad-brace1-formatting-raw\": {\n\t\t\t\"comment\": \"template using {% ... %}\",\n\t\t\t\"begin\": \"(?x)\\n    (?= \\\\{%\\n          ( .*? (?!'''|\\\"\\\"\\\") )\\n        %\\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?='''|\\\"\\\"\\\")\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-multi-bad-brace2-formatting-unicode\": {\n\t\t\t\"comment\": \"odd format or format-like syntax\",\n\t\t\t\"begin\": \"(?x)\\n    (?!\\\\{\\\\{)\\n    (?= \\\\{ (\\n              \\\\w*? (?!'''|\\\"\\\"\\\") [^!:\\\\.\\\\[}\\\\w]\\n           )\\n        .*?(?!'''|\\\"\\\"\\\")\\n        \\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?='''|\\\"\\\"\\\")\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escape-sequence-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-entity\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-multi-bad-brace2-formatting-raw\": {\n\t\t\t\"comment\": \"odd format or format-like syntax\",\n\t\t\t\"begin\": \"(?x)\\n    (?!\\\\{\\\\{)\\n    (?= \\\\{ (\\n              \\\\w*? (?!'''|\\\"\\\"\\\") [^!:\\\\.\\\\[}\\\\w]\\n           )\\n        .*?(?!'''|\\\"\\\"\\\")\\n        \\\\}\\n    )\\n\",\n\t\t\t\"end\": \"(?='''|\\\"\\\"\\\")\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-consume-escape\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-formatting\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-fnorm-quoted-single-line\": {\n\t\t\t\"name\": \"meta.fstring.python\",\n\t\t\t\"begin\": \"(\\\\b[fF])([bBuU])?((['\\\"]))\",\n\t\t\t\"end\": \"(\\\\3)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.interpolated.python string.quoted.single.python storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python string.interpolated.python string.quoted.single.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-guts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-single-core\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-normf-quoted-single-line\": {\n\t\t\t\"name\": \"meta.fstring.python\",\n\t\t\t\"begin\": \"(\\\\b[bBuU])([fF])((['\\\"]))\",\n\t\t\t\"end\": \"(\\\\3)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.interpolated.python string.quoted.single.python storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python string.quoted.single.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python string.interpolated.python string.quoted.single.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-guts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-single-core\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-raw-quoted-single-line\": {\n\t\t\t\"name\": \"meta.fstring.python\",\n\t\t\t\"begin\": \"(\\\\b(?:[rR][fF]|[fF][rR]))((['\\\"]))\",\n\t\t\t\"end\": \"(\\\\2)|((?<!\\\\\\\\)\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.interpolated.python string.quoted.raw.single.python storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python string.quoted.raw.single.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.single.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-raw-guts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-raw-single-core\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-single-core\": {\n\t\t\t\"name\": \"string.interpolated.python string.quoted.single.python\",\n\t\t\t\"match\": \"(?x)\\n  (.+?)\\n    (\\n      (?# .* and .*? in multi-line match need special handling of\\n        newlines otherwise SublimeText and Atom will match slightly\\n        differently.\\n\\n        The guard for newlines has to be separate from the\\n        lookahead because of special $ matching rule.)\\n      ($\\\\n?)\\n      |\\n      (?=[\\\\\\\\\\\\}\\\\{]|(['\\\"])|((?<!\\\\\\\\)\\\\n))\\n    )\\n  (?# due to how multiline regexps are matched we need a special case\\n    for matching a newline character)\\n  | \\\\n\\n\"\n\t\t},\n\t\t\"fstring-raw-single-core\": {\n\t\t\t\"name\": \"string.interpolated.python string.quoted.raw.single.python\",\n\t\t\t\"match\": \"(?x)\\n  (.+?)\\n    (\\n      (?# .* and .*? in multi-line match need special handling of\\n        newlines otherwise SublimeText and Atom will match slightly\\n        differently.\\n\\n        The guard for newlines has to be separate from the\\n        lookahead because of special $ matching rule.)\\n      ($\\\\n?)\\n      |\\n      (?=[\\\\\\\\\\\\}\\\\{]|(['\\\"])|((?<!\\\\\\\\)\\\\n))\\n    )\\n  (?# due to how multiline regexps are matched we need a special case\\n    for matching a newline character)\\n  | \\\\n\\n\"\n\t\t},\n\t\t\"fstring-single-brace\": {\n\t\t\t\"comment\": \"value interpolation using { ... }\",\n\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\"end\": \"(?x)\\n  (\\\\})|(?=\\\\n)\\n\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-terminator-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#f-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-terminator-single\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(=(![rsa])?)(?=})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(=?![rsa])(?=})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  ( (?: =?) (?: ![rsa])? )\\n    ( : \\\\w? [<>=^]? [-+ ]? \\\\#?\\n      \\\\d* ,? (\\\\.\\\\d+)? [bcdeEfFgGnosxX%]? )(?=})\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-terminator-single-tail\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-terminator-single-tail\": {\n\t\t\t\"begin\": \"((?:=?)(?:![rsa])?)(:)(?=.*?{)\",\n\t\t\t\"end\": \"(?=})|(?=\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-single-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"([bcdeEfFgGnosxX%])(?=})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\.\\\\d+)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(,)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\d+)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\#)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"([-+ ])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"([<>=^])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\w)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-fnorm-quoted-multi-line\": {\n\t\t\t\"name\": \"meta.fstring.python\",\n\t\t\t\"begin\": \"(\\\\b[fF])([bBuU])?('''|\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\\3)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.interpolated.python string.quoted.multi.python storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python string.interpolated.python string.quoted.multi.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-guts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-multi-core\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-normf-quoted-multi-line\": {\n\t\t\t\"name\": \"meta.fstring.python\",\n\t\t\t\"begin\": \"(\\\\b[bBuU])([fF])('''|\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\\3)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.prefix.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.interpolated.python string.quoted.multi.python storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python string.quoted.multi.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-guts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-multi-core\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-raw-quoted-multi-line\": {\n\t\t\t\"name\": \"meta.fstring.python\",\n\t\t\t\"begin\": \"(\\\\b(?:[rR][fF]|[fF][rR]))('''|\\\"\\\"\\\")\",\n\t\t\t\"end\": \"(\\\\2)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.interpolated.python string.quoted.raw.multi.python storage.type.string.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.python string.quoted.raw.multi.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.python string.interpolated.python string.quoted.raw.multi.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-raw-guts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-raw-multi-core\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-multi-core\": {\n\t\t\t\"name\": \"string.interpolated.python string.quoted.multi.python\",\n\t\t\t\"match\": \"(?x)\\n  (.+?)\\n    (\\n      (?# .* and .*? in multi-line match need special handling of\\n        newlines otherwise SublimeText and Atom will match slightly\\n        differently.\\n\\n        The guard for newlines has to be separate from the\\n        lookahead because of special $ matching rule.)\\n      ($\\\\n?)\\n      |\\n      (?=[\\\\\\\\\\\\}\\\\{]|'''|\\\"\\\"\\\")\\n    )\\n  (?# due to how multiline regexps are matched we need a special case\\n    for matching a newline character)\\n  | \\\\n\\n\"\n\t\t},\n\t\t\"fstring-raw-multi-core\": {\n\t\t\t\"name\": \"string.interpolated.python string.quoted.raw.multi.python\",\n\t\t\t\"match\": \"(?x)\\n  (.+?)\\n    (\\n      (?# .* and .*? in multi-line match need special handling of\\n        newlines otherwise SublimeText and Atom will match slightly\\n        differently.\\n\\n        The guard for newlines has to be separate from the\\n        lookahead because of special $ matching rule.)\\n      ($\\\\n?)\\n      |\\n      (?=[\\\\\\\\\\\\}\\\\{]|'''|\\\"\\\"\\\")\\n    )\\n  (?# due to how multiline regexps are matched we need a special case\\n    for matching a newline character)\\n  | \\\\n\\n\"\n\t\t},\n\t\t\"fstring-multi-brace\": {\n\t\t\t\"comment\": \"value interpolation using { ... }\",\n\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\"end\": \"(?x)\\n  (\\\\})\\n\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-terminator-multi\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#f-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-terminator-multi\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(=(![rsa])?)(?=})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(=?![rsa])(?=})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  ( (?: =?) (?: ![rsa])? )\\n    ( : \\\\w? [<>=^]? [-+ ]? \\\\#?\\n      \\\\d* ,? (\\\\.\\\\d+)? [bcdeEfFgGnosxX%]? )(?=})\\n\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-terminator-multi-tail\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-terminator-multi-tail\": {\n\t\t\t\"begin\": \"((?:=?)(?:![rsa])?)(:)(?=.*?{)\",\n\t\t\t\"end\": \"(?=})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.format.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-illegal-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-multi-brace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"([bcdeEfFgGnosxX%])(?=})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\.\\\\d+)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(,)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\d+)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\#)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"([-+ ])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"([<>=^])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.format.python\",\n\t\t\t\t\t\"match\": \"(\\\\w)\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/python/syntaxes/MagicRegExp.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/MagicStack/MagicPython/blob/master/grammars/MagicRegExp.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/MagicStack/MagicPython/commit/c9b3409deb69acec31bbf7913830e93a046b30cc\",\n\t\"name\": \"MagicRegExp\",\n\t\"scopeName\": \"source.regexp.python\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#regexp-expression\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"regexp-base-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-quantifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-common\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fregexp-base-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fregexp-quantifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#fstring-formatting-braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\{.*?\\\\}\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-common\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"fstring-formatting-braces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"empty braces are illegal\",\n\t\t\t\t\t\"match\": \"({)(\\\\s*?)(})\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.brace.python\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.format.placeholder.other.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.python\",\n\t\t\t\t\t\"match\": \"({{|}})\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-base-common\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.other.match.any.regexp\",\n\t\t\t\t\t\"match\": \"\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.other.match.begin.regexp\",\n\t\t\t\t\t\"match\": \"\\\\^\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.other.match.end.regexp\",\n\t\t\t\t\t\"match\": \"\\\\$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\t\t\"match\": \"[+*?]\\\\??\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.disjunction.regexp\",\n\t\t\t\t\t\"match\": \"\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-sequence\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-quantifier\": {\n\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\{(\\n    \\\\d+ | \\\\d+,(\\\\d+)? | ,\\\\d+\\n  )\\\\}\\n\"\n\t\t},\n\t\t\"fregexp-quantifier\": {\n\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\{\\\\{(\\n    \\\\d+ | \\\\d+,(\\\\d+)? | ,\\\\d+\\n  )\\\\}\\\\}\\n\"\n\t\t},\n\t\t\"regexp-backreference-number\": {\n\t\t\t\"name\": \"meta.backreference.regexp\",\n\t\t\t\"match\": \"(\\\\\\\\[1-9]\\\\d?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.backreference.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regexp-backreference\": {\n\t\t\t\"name\": \"meta.backreference.named.regexp\",\n\t\t\t\"match\": \"(?x)\\n  (\\\\()  (\\\\?P= \\\\w+(?:\\\\s+[[:alnum:]]+)?)  (\\\\))\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.begin.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.named.backreference.regexp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.end.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regexp-flags\": {\n\t\t\t\"name\": \"storage.modifier.flag.regexp\",\n\t\t\t\"match\": \"\\\\(\\\\?[aiLmsux]+\\\\)\"\n\t\t},\n\t\t\"regexp-escape-special\": {\n\t\t\t\"name\": \"support.other.escape.special.regexp\",\n\t\t\t\"match\": \"\\\\\\\\([AbBdDsSwWZ])\"\n\t\t},\n\t\t\"regexp-escape-character\": {\n\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\\\\\ (\\n        x[0-9A-Fa-f]{2}\\n        | 0[0-7]{1,2}\\n        | [0-7]{3}\\n     )\\n\"\n\t\t},\n\t\t\"regexp-escape-unicode\": {\n\t\t\t\"name\": \"constant.character.unicode.regexp\",\n\t\t\t\"match\": \"(?x)\\n  \\\\\\\\ (\\n        u[0-9A-Fa-f]{4}\\n        | U[0-9A-Fa-f]{8}\\n     )\\n\"\n\t\t},\n\t\t\"regexp-escape-catchall\": {\n\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\"match\": \"\\\\\\\\(.|\\\\n)\"\n\t\t},\n\t\t\"regexp-escape-sequence\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-special\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-backreference-number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-catchall\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-charecter-set-escapes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[abfnrtv\\\\\\\\]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-special\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\([0-7]{1,3})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-character\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-unicode\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-escape-catchall\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"codetags\": {\n\t\t\t\"match\": \"(?:\\\\b(NOTE|XXX|HACK|FIXME|BUG|TODO)\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.codetag.notation.python\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"regexp-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-base-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-character-set\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-flags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-named-group\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-backreference\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-lookahead\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-lookahead-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-lookbehind\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-lookbehind-negative\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-parentheses-non-capturing\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-parentheses\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-character-set\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n  \\\\[ \\\\^? \\\\] (?! .*?\\\\])\\n\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.character.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?(\\\\])?\",\n\t\t\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.begin.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.character.set.end.regexp constant.other.set.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp-charecter-set-escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.set.regexp\",\n\t\t\t\t\t\t\t\"match\": \"[^\\\\n]\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-named-group\": {\n\t\t\t\"name\": \"meta.named.regexp\",\n\t\t\t\"begin\": \"(?x)\\n  (\\\\()  (\\\\?P <\\\\w+(?:\\\\s+[[:alnum:]]+)?>)\\n\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.named.group.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-comments\": {\n\t\t\t\"name\": \"comment.regexp\",\n\t\t\t\"begin\": \"\\\\(\\\\?#\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.comment.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#codetags\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-lookahead\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?=\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-lookahead-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?!\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookahead.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-lookbehind\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<=\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-lookbehind-negative\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?<!\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.lookbehind.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.lookbehind.negative.regexp punctuation.parenthesis.lookbehind.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-conditional\": {\n\t\t\t\"begin\": \"(\\\\()\\\\?\\\\((\\\\w+(?:\\\\s+[[:alnum:]]+)?|\\\\d+)\\\\)\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.conditional.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-parentheses-non-capturing\": {\n\t\t\t\"begin\": \"\\\\(\\\\?:\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp-parentheses\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.python\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regexp-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/r/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/r/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"REditorSupport/vscode-R\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/REditorSupport/vscode-R\",\n\t\t\t\t\t\"commitHash\": \"c937cdd39982995d8ee1f1125919f7c2d150b35d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"2.8.4\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/r/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"`\", \"`\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"%\", \"close\": \"%\", \"notIn\": [\"string\", \"comment\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"`\", \"`\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t]\n}\n"
  },
  {
    "path": "extensions/r/package.json",
    "content": "{\n  \"name\": \"r\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin REditorSupport/vscode-R syntax/r.json ./syntaxes/r.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"r\",\n        \"extensions\": [\n          \".r\",\n          \".rhistory\",\n          \".rprofile\",\n          \".rt\"\n        ],\n        \"aliases\": [\n          \"R\",\n          \"r\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"r\",\n        \"scopeName\": \"source.r\",\n        \"path\": \"./syntaxes/r.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/r/package.nls.json",
    "content": "{\n\t\"displayName\": \"R Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in R files.\"\n}\n"
  },
  {
    "path": "extensions/r/syntaxes/r.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/REditorSupport/vscode-R/blob/master/syntax/r.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/REditorSupport/vscode-R/commit/c937cdd39982995d8ee1f1125919f7c2d150b35d\",\n\t\"name\": \"R\",\n\t\"scopeName\": \"source.r\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#roxygen\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constants\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#storage-type\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#brackets\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function-declarations\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#lambda-functions\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#builtin-functions\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#function-calls\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#general-variables\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"comment.line.pragma.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.pragma.name.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"^(#pragma[ \\\\t]+mark)[ \\\\t](.*)\",\n\t\t\t\t\t\"name\": \"comment.line.pragma-mark.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=#)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.r\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.number-sign.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(pi|letters|LETTERS|month\\\\.abb|month\\\\.name)\\\\b\",\n\t\t\t\t\t\"name\": \"support.constant.misc.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(TRUE|FALSE|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_|Inf|NaN)\\\\b\",\n\t\t\t\t\t\"name\": \"constant.language.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b0(x|X)[0-9a-fA-F]+i\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.imaginary.hexadecimal.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b[0-9]+\\\\.?[0-9]*(?:(e|E)(\\\\+|-)?[0-9]+)?i\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.imaginary.decimal.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.[0-9]+(?:(e|E)(\\\\+|-)?[0-9]+)?i\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.imaginary.decimal.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b0(x|X)[0-9a-fA-F]+L\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.hexadecimal.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(?:[0-9]+\\\\.?[0-9]*)(?:(e|E)(\\\\+|-)?[0-9]+)?L\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b0(x|X)[0-9a-fA-F]+\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.float.hexadecimal.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b[0-9]+\\\\.?[0-9]*(?:(e|E)(\\\\+|-)?[0-9]+)?\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.float.decimal.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\.[0-9]+(?:(e|E)(\\\\+|-)?[0-9]+)?\\\\b\",\n\t\t\t\t\t\"name\": \"constant.numeric.float.decimal.r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"general-variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"([[:alpha:].][[:alnum:]._]*)\\\\s*(=)(?=[^=])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(`[^`]+`)\\\\s*(=)(?=[^=])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([\\\\d_][[:alnum:]._]+)\\\\b\",\n\t\t\t\t\t\"name\": \"invalid.illegal.variable.other.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([[:alnum:]_]+)(?=::)\",\n\t\t\t\t\t\"name\": \"entity.namespace.r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(break|next|repeat|else|in)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(ifelse|if|for|return|switch|while|invisible)\\\\b(?=\\\\s*\\\\()\",\n\t\t\t\t\t\"name\": \"keyword.control.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\-|\\\\+|\\\\*|\\\\/|%\\\\/%|%%|%\\\\*%|%o%|%x%|\\\\^)\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(:=|<-|<<-|->|->>)\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(==|<=|>=|!=|<>|<|>|%in%)\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(!|&{1,2}|[|]{1,2})\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\|>)\",\n\t\t\t\t\t\"name\": \"keyword.operator.pipe.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(%between%|%chin%|%like%|%\\\\+%|%\\\\+replace%|%:%|%do%|%dopar%|%>%|%<>%|%T>%|%\\\\$%)\",\n\t\t\t\t\t\"name\": \"keyword.operator.other.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\.\\\\.\\\\.|\\\\$|:|\\\\~|@)\",\n\t\t\t\t\t\"name\": \"keyword.other.r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"storage-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(character|complex|double|expression|integer|list|logical|numeric|single|raw)\\\\b(?=\\\\s*\\\\()\",\n\t\t\t\t\t\"name\": \"storage.type.r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[rR]\\\"(-*)\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\\\\1\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[rR]'(-*)\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\\\\1'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.raw.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[rR]\\\"(-*)\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\\\\1\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[rR]'(-*)\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\\\\1'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.raw.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[rR]\\\"(-*)\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\\\\1\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.raw.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[rR]'(-*)\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\\\\1'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.raw.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"brackets\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[(?!\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.brackets.single.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.brackets.single.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.brackets.double.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.brackets.double.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.item-access.arguments.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.braces.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-declarations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((?:`[^`\\\\\\\\]*(?:\\\\\\\\.[^`\\\\\\\\]*)*`)|(?:[[:alpha:].][[:alnum:]._]*))\\\\s*(<?<-|=(?!=))\\\\s*(function|\\\\\\\\)(?!\\\\w)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lambda-functions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"lambda-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(function)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parens.end.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.r\",\n\t\t\t\t\t\"contentName\": \"meta.function.parameters.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[a-zA-Z._][\\\\w.]*|`[^`]+`)\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.r\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?==)\",\n\t\t\t\t\t\t\t\"end\": \"(?=[,)])\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-calls\": {\n\t\t\t\"begin\": \"(?:\\\\b|(?=\\\\.))((?:[a-zA-Z._][\\\\w.]*|`[^`]+`))\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.function.r\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.begin.r\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.function-call.arguments.r\",\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.parens.end.r\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.r\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function-call.r\",\n\t\t\t\t\t\"contentName\": \"meta.function-call.parameters.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[a-zA-Z._][\\\\w.]*|`[^`]+`)(?=\\\\s[^=])\",\n\t\t\t\t\t\"name\": \"variable.other.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?==)\",\n\t\t\t\t\t\"end\": \"(?=[,)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.parameters.r\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"roxygen\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*(#')\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"$\\\\n?\",\n\t\t\t\t\t\"name\": \"comment.line.roxygen.r\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.r\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.parameter.r\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"match\": \"(@param)\\\\s*((?:[a-zA-Z._][\\\\w.]*|`[^`]+`))\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"@[a-zA-Z0-9]+\",\n\t\t\t\t\t\t\t\"name\": \"keyword.other.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(abbreviate|abs|acos|acosh|activeBindingFunction|addNA|addTaskCallback|agrep|agrepl|alist|all|all\\\\.equal|all\\\\.equal\\\\.character|all\\\\.equal\\\\.default|all\\\\.equal\\\\.environment|all\\\\.equal\\\\.envRefClass|all\\\\.equal\\\\.factor|all\\\\.equal\\\\.formula|all\\\\.equal\\\\.function|all\\\\.equal\\\\.language|all\\\\.equal\\\\.list|all\\\\.equal\\\\.numeric|all\\\\.equal\\\\.POSIXt|all\\\\.equal\\\\.raw|all\\\\.names|allowInterrupts|all\\\\.vars|any|anyDuplicated|anyDuplicated\\\\.array|anyDuplicated\\\\.data\\\\.frame|anyDuplicated\\\\.default|anyDuplicated\\\\.matrix|anyNA|anyNA\\\\.data\\\\.frame|anyNA\\\\.numeric_version|anyNA\\\\.POSIXlt|aperm|aperm\\\\.default|aperm\\\\.table|append|apply|Arg|args|array|arrayInd|as\\\\.array|as\\\\.array\\\\.default|as\\\\.call|as\\\\.character|as\\\\.character\\\\.condition|as\\\\.character\\\\.Date|as\\\\.character\\\\.default|as\\\\.character\\\\.error|as\\\\.character\\\\.factor|as\\\\.character\\\\.hexmode|as\\\\.character\\\\.numeric_version|as\\\\.character\\\\.octmode|as\\\\.character\\\\.POSIXt|as\\\\.character\\\\.srcref|as\\\\.complex|as\\\\.data\\\\.frame|as\\\\.data\\\\.frame\\\\.array|as\\\\.data\\\\.frame\\\\.AsIs|as\\\\.data\\\\.frame\\\\.character|as\\\\.data\\\\.frame\\\\.complex|as\\\\.data\\\\.frame\\\\.data\\\\.frame|as\\\\.data\\\\.frame\\\\.Date|as\\\\.data\\\\.frame\\\\.default|as\\\\.data\\\\.frame\\\\.difftime|as\\\\.data\\\\.frame\\\\.factor|as\\\\.data\\\\.frame\\\\.integer|as\\\\.data\\\\.frame\\\\.list|as\\\\.data\\\\.frame\\\\.logical|as\\\\.data\\\\.frame\\\\.matrix|as\\\\.data\\\\.frame\\\\.model\\\\.matrix|as\\\\.data\\\\.frame\\\\.noquote|as\\\\.data\\\\.frame\\\\.numeric|as\\\\.data\\\\.frame\\\\.numeric_version|as\\\\.data\\\\.frame\\\\.ordered|as\\\\.data\\\\.frame\\\\.POSIXct|as\\\\.data\\\\.frame\\\\.POSIXlt|as\\\\.data\\\\.frame\\\\.raw|as\\\\.data\\\\.frame\\\\.table|as\\\\.data\\\\.frame\\\\.ts|as\\\\.data\\\\.frame\\\\.vector|as\\\\.Date|as\\\\.Date\\\\.character|as\\\\.Date\\\\.default|as\\\\.Date\\\\.factor|as\\\\.Date\\\\.numeric|as\\\\.Date\\\\.POSIXct|as\\\\.Date\\\\.POSIXlt|as\\\\.difftime|as\\\\.double|as\\\\.double\\\\.difftime|as\\\\.double\\\\.POSIXlt|as\\\\.environment|as\\\\.expression|as\\\\.expression\\\\.default|as\\\\.factor|as\\\\.function|as\\\\.function\\\\.default|as\\\\.hexmode|asin|asinh|as\\\\.integer|as\\\\.list|as\\\\.list\\\\.data\\\\.frame|as\\\\.list\\\\.Date|as\\\\.list\\\\.default|as\\\\.list\\\\.difftime|as\\\\.list\\\\.environment|as\\\\.list\\\\.factor|as\\\\.list\\\\.function|as\\\\.list\\\\.numeric_version|as\\\\.list\\\\.POSIXct|as\\\\.list\\\\.POSIXlt|as\\\\.logical|as\\\\.logical\\\\.factor|as\\\\.matrix|as\\\\.matrix\\\\.data\\\\.frame|as\\\\.matrix\\\\.default|as\\\\.matrix\\\\.noquote|as\\\\.matrix\\\\.POSIXlt|as\\\\.name|asNamespace|as\\\\.null|as\\\\.null\\\\.default|as\\\\.numeric|as\\\\.numeric_version|as\\\\.octmode|as\\\\.ordered|as\\\\.package_version|as\\\\.pairlist|asplit|as\\\\.POSIXct|as\\\\.POSIXct\\\\.Date|as\\\\.POSIXct\\\\.default|as\\\\.POSIXct\\\\.numeric|as\\\\.POSIXct\\\\.POSIXlt|as\\\\.POSIXlt|as\\\\.POSIXlt\\\\.character|as\\\\.POSIXlt\\\\.Date|as\\\\.POSIXlt\\\\.default|as\\\\.POSIXlt\\\\.factor|as\\\\.POSIXlt\\\\.numeric|as\\\\.POSIXlt\\\\.POSIXct|as\\\\.qr|as\\\\.raw|asS3|asS4|assign|as\\\\.single|as\\\\.single\\\\.default|as\\\\.symbol|as\\\\.table|as\\\\.table\\\\.default|as\\\\.vector|as\\\\.vector\\\\.factor|atan|atan2|atanh|attach|attachNamespace|attr|attr\\\\.all\\\\.equal|attributes|autoload|autoloader|backsolve|baseenv|basename|besselI|besselJ|besselK|besselY|beta|bindingIsActive|bindingIsLocked|bindtextdomain|bitwAnd|bitwNot|bitwOr|bitwShiftL|bitwShiftR|bitwXor|body|bquote|break|browser|browserCondition|browserSetDebug|browserText|builtins|by|by\\\\.data\\\\.frame|by\\\\.default|bzfile|c|call|callCC|capabilities|casefold|cat|cbind|cbind\\\\.data\\\\.frame|c\\\\.Date|c\\\\.difftime|ceiling|c\\\\.factor|character|char\\\\.expand|charmatch|charToRaw|chartr|check_tzones|chkDots|chol|chol2inv|chol\\\\.default|choose|class|clearPushBack|close|closeAllConnections|close\\\\.connection|close\\\\.srcfile|close\\\\.srcfilealias|c\\\\.noquote|c\\\\.numeric_version|col|colMeans|colnames|colSums|commandArgs|comment|complex|computeRestarts|conditionCall|conditionCall\\\\.condition|conditionMessage|conditionMessage\\\\.condition|conflictRules|conflicts|Conj|contributors|cos|cosh|cospi|c\\\\.POSIXct|c\\\\.POSIXlt|crossprod|Cstack_info|cummax|cummin|cumprod|cumsum|curlGetHeaders|cut|cut\\\\.Date|cut\\\\.default|cut\\\\.POSIXt|c\\\\.warnings|data\\\\.class|data\\\\.frame|data\\\\.matrix|date|debug|debuggingState|debugonce|default\\\\.stringsAsFactors|delayedAssign|deparse|deparse1|det|detach|determinant|determinant\\\\.matrix|dget|diag|diff|diff\\\\.Date|diff\\\\.default|diff\\\\.difftime|diff\\\\.POSIXt|difftime|digamma|dim|dim\\\\.data\\\\.frame|dimnames|dimnames\\\\.data\\\\.frame|dir|dir\\\\.create|dir\\\\.exists|dirname|do\\\\.call|dontCheck|double|dput|dQuote|drop|droplevels|droplevels\\\\.data\\\\.frame|droplevels\\\\.factor|dump|duplicated|duplicated\\\\.array|duplicated\\\\.data\\\\.frame|duplicated\\\\.default|duplicated\\\\.matrix|duplicated\\\\.numeric_version|duplicated\\\\.POSIXlt|duplicated\\\\.warnings|dynGet|dyn\\\\.load|dyn\\\\.unload|eapply|eigen|emptyenv|enc2native|enc2utf8|encodeString|Encoding|endsWith|enquote|environment|environmentIsLocked|environmentName|env\\\\.profile|errorCondition|eval|eval\\\\.parent|evalq|exists|exp|expand\\\\.grid|expm1|expression|extSoftVersion|factor|factorial|fifo|file|file\\\\.access|file\\\\.append|file\\\\.choose|file\\\\.copy|file\\\\.create|file\\\\.exists|file\\\\.info|file\\\\.link|file\\\\.mode|file\\\\.mtime|file\\\\.path|file\\\\.remove|file\\\\.rename|file\\\\.show|file\\\\.size|file\\\\.symlink|Filter|Find|findInterval|find\\\\.package|findPackageEnv|findRestart|floor|flush|flush\\\\.connection|for|force|forceAndCall|formals|format|format\\\\.AsIs|formatC|format\\\\.data\\\\.frame|format\\\\.Date|format\\\\.default|format\\\\.difftime|formatDL|format\\\\.factor|format\\\\.hexmode|format\\\\.info|format\\\\.libraryIQR|format\\\\.numeric_version|format\\\\.octmode|format\\\\.packageInfo|format\\\\.POSIXct|format\\\\.POSIXlt|format\\\\.pval|format\\\\.summaryDefault|forwardsolve|function|gamma|gc|gcinfo|gc\\\\.time|gctorture|gctorture2|get|get0|getAllConnections|getCallingDLL|getCallingDLLe|getConnection|getDLLRegisteredRoutines|getDLLRegisteredRoutines\\\\.character|getDLLRegisteredRoutines\\\\.DLLInfo|getElement|geterrmessage|getExportedValue|getHook|getLoadedDLLs|getNamespace|getNamespaceExports|getNamespaceImports|getNamespaceInfo|getNamespaceName|getNamespaceUsers|getNamespaceVersion|getNativeSymbolInfo|getOption|getRversion|getSrcLines|getTaskCallbackNames|gettext|gettextf|getwd|gl|globalCallingHandlers|globalenv|gregexec|gregexpr|grep|grepl|grepRaw|grouping|gsub|gzcon|gzfile|I|iconv|iconvlist|icuGetCollate|icuSetCollate|identical|identity|if|ifelse|Im|importIntoEnv|infoRDS|inherits|integer|interaction|interactive|intersect|intToBits|intToUtf8|inverse\\\\.rle|invisible|invokeRestart|invokeRestartInteractively|isa|is\\\\.array|is\\\\.atomic|isatty|isBaseNamespace|is\\\\.call|is\\\\.character|is\\\\.complex|is\\\\.data\\\\.frame|isdebugged|is\\\\.double|is\\\\.element|is\\\\.environment|is\\\\.expression|is\\\\.factor|isFALSE|is\\\\.finite|is\\\\.function|isIncomplete|is\\\\.infinite|is\\\\.integer|is\\\\.language|is\\\\.list|is\\\\.loaded|is\\\\.logical|is\\\\.matrix|is\\\\.na|is\\\\.na\\\\.data\\\\.frame|is\\\\.name|isNamespace|isNamespaceLoaded|is\\\\.nan|is\\\\.na\\\\.numeric_version|is\\\\.na\\\\.POSIXlt|is\\\\.null|is\\\\.numeric|is\\\\.numeric\\\\.Date|is\\\\.numeric\\\\.difftime|is\\\\.numeric\\\\.POSIXt|is\\\\.numeric_version|is\\\\.object|ISOdate|ISOdatetime|isOpen|is\\\\.ordered|is\\\\.package_version|is\\\\.pairlist|is\\\\.primitive|is\\\\.qr|is\\\\.R|is\\\\.raw|is\\\\.recursive|isRestart|isS4|isSeekable|is\\\\.single|is\\\\.symbol|isSymmetric|isSymmetric\\\\.matrix|is\\\\.table|isTRUE|is\\\\.unsorted|is\\\\.vector|jitter|julian|julian\\\\.Date|julian\\\\.POSIXt|kappa|kappa\\\\.default|kappa\\\\.lm|kappa\\\\.qr|kronecker|l10n_info|labels|labels\\\\.default|La_library|lapply|La\\\\.svd|La_version|lazyLoad|lazyLoadDBexec|lazyLoadDBfetch|lbeta|lchoose|length|length\\\\.POSIXlt|lengths|levels|levels\\\\.default|lfactorial|lgamma|libcurlVersion|library|library\\\\.dynam|library\\\\.dynam\\\\.unload|licence|license|list|list2DF|list2env|list\\\\.dirs|list\\\\.files|load|loadedNamespaces|loadingNamespaceInfo|loadNamespace|local|lockBinding|lockEnvironment|log|log10|log1p|log2|logb|logical|lower\\\\.tri|ls|makeActiveBinding|make\\\\.names|make\\\\.unique|Map|mapply|marginSums|margin\\\\.table|match|match\\\\.arg|match\\\\.call|match\\\\.fun|Math\\\\.data\\\\.frame|Math\\\\.Date|Math\\\\.difftime|Math\\\\.factor|Math\\\\.POSIXt|mat\\\\.or\\\\.vec|matrix|max|max\\\\.col|mean|mean\\\\.Date|mean\\\\.default|mean\\\\.difftime|mean\\\\.POSIXct|mean\\\\.POSIXlt|memCompress|memDecompress|mem\\\\.maxNSize|mem\\\\.maxVSize|memory\\\\.profile|merge|merge\\\\.data\\\\.frame|merge\\\\.default|message|mget|min|missing|Mod|mode|months|months\\\\.Date|months\\\\.POSIXt|names|namespaceExport|namespaceImport|namespaceImportClasses|namespaceImportFrom|namespaceImportMethods|names\\\\.POSIXlt|nargs|nchar|ncol|NCOL|Negate|new\\\\.env|next|NextMethod|ngettext|nlevels|noquote|norm|normalizePath|nrow|NROW|nullfile|numeric|numeric_version|numToBits|numToInts|nzchar|objects|oldClass|OlsonNames|on\\\\.exit|open|open\\\\.connection|open\\\\.srcfile|open\\\\.srcfilealias|open\\\\.srcfilecopy|Ops\\\\.data\\\\.frame|Ops\\\\.Date|Ops\\\\.difftime|Ops\\\\.factor|Ops\\\\.numeric_version|Ops\\\\.ordered|Ops\\\\.POSIXt|options|order|ordered|outer|packageEvent|packageHasNamespace|packageNotFoundError|packageStartupMessage|package_version|packBits|pairlist|parent\\\\.env|parent\\\\.frame|parse|parseNamespaceFile|paste|paste0|path\\\\.expand|path\\\\.package|pcre_config|pi|pipe|plot|pmatch|pmax|pmax\\\\.int|pmin|pmin\\\\.int|polyroot|Position|pos\\\\.to\\\\.env|pretty|pretty\\\\.default|prettyNum|print|print\\\\.AsIs|print\\\\.by|print\\\\.condition|print\\\\.connection|print\\\\.data\\\\.frame|print\\\\.Date|print\\\\.default|print\\\\.difftime|print\\\\.Dlist|print\\\\.DLLInfo|print\\\\.DLLInfoList|print\\\\.DLLRegisteredRoutines|print\\\\.eigen|print\\\\.factor|print\\\\.function|print\\\\.hexmode|print\\\\.libraryIQR|print\\\\.listof|print\\\\.NativeRoutineList|print\\\\.noquote|print\\\\.numeric_version|print\\\\.octmode|print\\\\.packageInfo|print\\\\.POSIXct|print\\\\.POSIXlt|print\\\\.proc_time|print\\\\.restart|print\\\\.rle|print\\\\.simple\\\\.list|print\\\\.srcfile|print\\\\.srcref|print\\\\.summaryDefault|print\\\\.summary\\\\.table|print\\\\.summary\\\\.warnings|print\\\\.table|print\\\\.warnings|prmatrix|proc\\\\.time|prod|proportions|prop\\\\.table|provideDimnames|psigamma|pushBack|pushBackLength|q|qr|qr\\\\.coef|qr\\\\.default|qr\\\\.fitted|qr\\\\.Q|qr\\\\.qty|qr\\\\.qy|qr\\\\.R|qr\\\\.resid|qr\\\\.solve|qr\\\\.X|quarters|quarters\\\\.Date|quarters\\\\.POSIXt|quit|quote|range|range\\\\.default|rank|rapply|raw|rawConnection|rawConnectionValue|rawShift|rawToBits|rawToChar|rbind|rbind\\\\.data\\\\.frame|rcond|Re|readBin|readChar|read\\\\.dcf|readline|readLines|readRDS|readRenviron|Recall|Reduce|regexec|regexpr|reg\\\\.finalizer|registerS3method|registerS3methods|regmatches|remove|removeTaskCallback|rep|rep\\\\.Date|rep\\\\.difftime|repeat|rep\\\\.factor|rep\\\\.int|replace|rep_len|replicate|rep\\\\.numeric_version|rep\\\\.POSIXct|rep\\\\.POSIXlt|require|requireNamespace|restartDescription|restartFormals|retracemem|return|returnValue|rev|rev\\\\.default|R\\\\.home|rle|rm|RNGkind|RNGversion|round|round\\\\.Date|round\\\\.POSIXt|row|rowMeans|rownames|row\\\\.names|row\\\\.names\\\\.data\\\\.frame|row\\\\.names\\\\.default|rowsum|rowsum\\\\.data\\\\.frame|rowsum\\\\.default|rowSums|R_system_version|R\\\\.version|R\\\\.Version|R\\\\.version\\\\.string|sample|sample\\\\.int|sapply|save|save\\\\.image|saveRDS|scale|scale\\\\.default|scan|search|searchpaths|seek|seek\\\\.connection|seq|seq_along|seq\\\\.Date|seq\\\\.default|seq\\\\.int|seq_len|seq\\\\.POSIXt|sequence|sequence\\\\.default|serialize|serverSocket|setdiff|setequal|setHook|setNamespaceInfo|set\\\\.seed|setSessionTimeLimit|setTimeLimit|setwd|showConnections|shQuote|sign|signalCondition|signif|simpleCondition|simpleError|simpleMessage|simpleWarning|simplify2array|sin|single|sinh|sink|sink\\\\.number|sinpi|slice\\\\.index|socketAccept|socketConnection|socketSelect|socketTimeout|solve|solve\\\\.default|solve\\\\.qr|sort|sort\\\\.default|sort\\\\.int|sort\\\\.list|sort\\\\.POSIXlt|source|split|split\\\\.data\\\\.frame|split\\\\.Date|split\\\\.default|split\\\\.POSIXct|sprintf|sqrt|sQuote|srcfile|srcfilealias|srcfilecopy|srcref|standardGeneric|startsWith|stderr|stdin|stdout|stop|stopifnot|storage\\\\.mode|str2expression|str2lang|strftime|strptime|strrep|strsplit|strtoi|strtrim|structure|strwrap|sub|subset|subset\\\\.data\\\\.frame|subset\\\\.default|subset\\\\.matrix|substitute|substr|substring|sum|summary|summary\\\\.connection|summary\\\\.data\\\\.frame|Summary\\\\.data\\\\.frame|summary\\\\.Date|Summary\\\\.Date|summary\\\\.default|Summary\\\\.difftime|summary\\\\.factor|Summary\\\\.factor|summary\\\\.matrix|Summary\\\\.numeric_version|Summary\\\\.ordered|summary\\\\.POSIXct|Summary\\\\.POSIXct|summary\\\\.POSIXlt|Summary\\\\.POSIXlt|summary\\\\.proc_time|summary\\\\.srcfile|summary\\\\.srcref|summary\\\\.table|summary\\\\.warnings|suppressMessages|suppressPackageStartupMessages|suppressWarnings|suspendInterrupts|svd|sweep|switch|sys\\\\.call|sys\\\\.calls|Sys\\\\.chmod|Sys\\\\.Date|sys\\\\.frame|sys\\\\.frames|sys\\\\.function|Sys\\\\.getenv|Sys\\\\.getlocale|Sys\\\\.getpid|Sys\\\\.glob|Sys\\\\.info|sys\\\\.load\\\\.image|Sys\\\\.localeconv|sys\\\\.nframe|sys\\\\.on\\\\.exit|sys\\\\.parent|sys\\\\.parents|Sys\\\\.readlink|sys\\\\.save\\\\.image|Sys\\\\.setenv|Sys\\\\.setFileTime|Sys\\\\.setlocale|Sys\\\\.sleep|sys\\\\.source|sys\\\\.status|system|system2|system\\\\.file|system\\\\.time|Sys\\\\.time|Sys\\\\.timezone|Sys\\\\.umask|Sys\\\\.unsetenv|Sys\\\\.which|t|table|tabulate|tan|tanh|tanpi|tapply|taskCallbackManager|tcrossprod|t\\\\.data\\\\.frame|t\\\\.default|tempdir|tempfile|textConnection|textConnectionValue|tolower|topenv|toString|toString\\\\.default|toupper|trace|traceback|tracemem|tracingState|transform|transform\\\\.data\\\\.frame|transform\\\\.default|trigamma|trimws|trunc|truncate|truncate\\\\.connection|trunc\\\\.Date|trunc\\\\.POSIXt|try|tryCatch|tryInvokeRestart|typeof|unclass|undebug|union|unique|unique\\\\.array|unique\\\\.data\\\\.frame|unique\\\\.default|unique\\\\.matrix|unique\\\\.numeric_version|unique\\\\.POSIXlt|unique\\\\.warnings|units|units\\\\.difftime|unix\\\\.time|unlink|unlist|unloadNamespace|unlockBinding|unname|unserialize|unsplit|untrace|untracemem|unz|upper\\\\.tri|url|UseMethod|utf8ToInt|validEnc|validUTF8|vapply|vector|Vectorize|version|warning|warningCondition|warnings|weekdays|weekdays\\\\.Date|weekdays\\\\.POSIXt|which|which\\\\.max|which\\\\.min|while|with|withAutoprint|withCallingHandlers|with\\\\.default|within|within\\\\.data\\\\.frame|within\\\\.list|withRestarts|withVisible|write|writeBin|writeChar|write\\\\.dcf|writeLines|xor|xpdrows\\\\.data\\\\.frame|xtfrm|xtfrm\\\\.AsIs|xtfrm\\\\.data\\\\.frame|xtfrm\\\\.Date|xtfrm\\\\.default|xtfrm\\\\.difftime|xtfrm\\\\.factor|xtfrm\\\\.numeric_version|xtfrm\\\\.POSIXct|xtfrm\\\\.POSIXlt|xzfile|zapsmall)\\\\s*(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(abline|arrows|assocplot|axis|Axis|axis\\\\.Date|axis\\\\.POSIXct|axTicks|barplot|barplot\\\\.default|box|boxplot|boxplot\\\\.default|boxplot\\\\.matrix|bxp|cdplot|clip|close\\\\.screen|co\\\\.intervals|contour|contour\\\\.default|coplot|curve|dotchart|erase\\\\.screen|filled\\\\.contour|fourfoldplot|frame|grconvertX|grconvertY|grid|hist|hist\\\\.default|identify|image|image\\\\.default|layout|layout\\\\.show|lcm|legend|lines|lines\\\\.default|locator|matlines|matplot|matpoints|mosaicplot|mtext|pairs|pairs\\\\.default|panel\\\\.smooth|par|persp|pie|plot|plot\\\\.default|plot\\\\.design|plot\\\\.function|plot\\\\.new|plot\\\\.window|plot\\\\.xy|points|points\\\\.default|polygon|polypath|rasterImage|rect|rug|screen|segments|smoothScatter|spineplot|split\\\\.screen|stars|stem|strheight|stripchart|strwidth|sunflowerplot|symbols|text|text\\\\.default|title|xinch|xspline|xyinch|yinch)\\\\s*(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(adjustcolor|as\\\\.graphicsAnnot|as\\\\.raster|axisTicks|bitmap|blues9|bmp|boxplot\\\\.stats|cairo_pdf|cairo_ps|cairoSymbolFont|check\\\\.options|chull|CIDFont|cm|cm\\\\.colors|col2rgb|colorConverter|colorRamp|colorRampPalette|colors|colorspaces|colours|contourLines|convertColor|densCols|dev2bitmap|devAskNewPage|dev\\\\.capabilities|dev\\\\.capture|dev\\\\.control|dev\\\\.copy|dev\\\\.copy2eps|dev\\\\.copy2pdf|dev\\\\.cur|dev\\\\.flush|dev\\\\.hold|deviceIsInteractive|dev\\\\.interactive|dev\\\\.list|dev\\\\.new|dev\\\\.next|dev\\\\.off|dev\\\\.prev|dev\\\\.print|dev\\\\.set|dev\\\\.size|embedFonts|extendrange|getGraphicsEvent|getGraphicsEventEnv|graphics\\\\.off|gray|gray\\\\.colors|grey|grey\\\\.colors|grSoftVersion|hcl|hcl\\\\.colors|hcl\\\\.pals|heat\\\\.colors|Hershey|hsv|is\\\\.raster|jpeg|make\\\\.rgb|n2mfrow|nclass\\\\.FD|nclass\\\\.scott|nclass\\\\.Sturges|palette|palette\\\\.colors|palette\\\\.pals|pdf|pdfFonts|pdf\\\\.options|pictex|png|postscript|postscriptFonts|ps\\\\.options|quartz|quartzFont|quartzFonts|quartz\\\\.options|quartz\\\\.save|rainbow|recordGraphics|recordPlot|replayPlot|rgb|rgb2hsv|savePlot|setEPS|setGraphicsEventEnv|setGraphicsEventHandlers|setPS|svg|terrain\\\\.colors|tiff|topo\\\\.colors|trans3d|Type1Font|x11|X11|X11Font|X11Fonts|X11\\\\.options|xfig|xy\\\\.coords|xyTable|xyz\\\\.coords)\\\\s*(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(addNextMethod|allNames|Arith|as|asMethodDefinition|assignClassDef|assignMethodsMetaData|balanceMethodsList|cacheGenericsMetaData|cacheMetaData|cacheMethod|callGeneric|callNextMethod|canCoerce|cbind2|checkAtAssignment|checkSlotAssignment|classesToAM|classLabel|classMetaName|className|coerce|Compare|completeClassDefinition|completeExtends|completeSubclasses|Complex|conformMethod|defaultDumpName|defaultPrototype|doPrimitiveMethod|dumpMethod|dumpMethods|el|elNamed|empty\\\\.dump|emptyMethodsList|evalOnLoad|evalqOnLoad|evalSource|existsFunction|existsMethod|extends|externalRefMethod|finalDefaultMethod|findClass|findFunction|findMethod|findMethods|findMethodSignatures|findUnique|fixPre1\\\\.8|formalArgs|functionBody|generic\\\\.skeleton|getAllSuperClasses|getClass|getClassDef|getClasses|getDataPart|getFunction|getGeneric|getGenerics|getGroup|getGroupMembers|getLoadActions|getMethod|getMethods|getMethodsForDispatch|getMethodsMetaData|getPackageName|getRefClass|getSlots|getValidity|hasArg|hasLoadAction|hasMethod|hasMethods|implicitGeneric|inheritedSlotNames|initFieldArgs|initialize|initRefFields|insertClassMethods|insertMethod|insertSource|is|isClass|isClassDef|isClassUnion|isGeneric|isGrammarSymbol|isGroup|isRematched|isSealedClass|isSealedMethod|isVirtualClass|isXS3Class|kronecker|languageEl|linearizeMlist|listFromMethods|listFromMlist|loadMethod|Logic|makeClassRepresentation|makeExtends|makeGeneric|makeMethodsList|makePrototypeFromClassDef|makeStandardGeneric|matchSignature|Math|Math2|mergeMethods|metaNameUndo|MethodAddCoerce|methodSignatureMatrix|method\\\\.skeleton|MethodsList|MethodsListSelect|methodsPackageMetaName|missingArg|multipleClasses|new|newBasic|newClassRepresentation|newEmptyObject|Ops|packageSlot|possibleExtends|prohibitGeneric|promptClass|promptMethods|prototype|Quote|rbind2|reconcilePropertiesAndPrototype|registerImplicitGenerics|rematchDefinition|removeClass|removeGeneric|removeMethod|removeMethods|representation|requireMethods|resetClass|resetGeneric|S3Class|S3Part|sealClass|selectMethod|selectSuperClasses|setAs|setClass|setClassUnion|setDataPart|setGeneric|setGenericImplicit|setGroupGeneric|setIs|setLoadAction|setLoadActions|setMethod|setOldClass|setPackageName|setPrimitiveMethods|setRefClass|setReplaceMethod|setValidity|show|showClass|showDefault|showExtends|showMethods|showMlist|signature|SignatureMethod|sigToEnv|slot|slotNames|slotsFromS3|substituteDirect|substituteFunctionArgs|Summary|superClassDepth|testInheritedMethods|testVirtual|tryNew|unRematchDefinition|validObject|validSlotNames)\\\\s*(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(acf|acf2AR|add1|addmargins|add\\\\.scope|aggregate|aggregate\\\\.data\\\\.frame|aggregate\\\\.ts|AIC|alias|anova|ansari\\\\.test|aov|approx|approxfun|ar|ar\\\\.burg|arima|arima0|arima0\\\\.diag|arima\\\\.sim|ARMAacf|ARMAtoMA|ar\\\\.mle|ar\\\\.ols|ar\\\\.yw|as\\\\.dendrogram|as\\\\.dist|as\\\\.formula|as\\\\.hclust|asOneSidedFormula|as\\\\.stepfun|as\\\\.ts|ave|bandwidth\\\\.kernel|bartlett\\\\.test|BIC|binomial|binom\\\\.test|biplot|Box\\\\.test|bw\\\\.bcv|bw\\\\.nrd|bw\\\\.nrd0|bw\\\\.SJ|bw\\\\.ucv|C|cancor|case\\\\.names|ccf|chisq\\\\.test|cmdscale|coef|coefficients|complete\\\\.cases|confint|confint\\\\.default|confint\\\\.lm|constrOptim|contrasts|contr\\\\.helmert|contr\\\\.poly|contr\\\\.SAS|contr\\\\.sum|contr\\\\.treatment|convolve|cooks\\\\.distance|cophenetic|cor|cor\\\\.test|cov|cov2cor|covratio|cov\\\\.wt|cpgram|cutree|cycle|D|dbeta|dbinom|dcauchy|dchisq|decompose|delete\\\\.response|deltat|dendrapply|density|density\\\\.default|deriv|deriv3|deviance|dexp|df|DF2formula|dfbeta|dfbetas|dffits|df\\\\.kernel|df\\\\.residual|dgamma|dgeom|dhyper|diffinv|dist|dlnorm|dlogis|dmultinom|dnbinom|dnorm|dpois|drop1|drop\\\\.scope|drop\\\\.terms|dsignrank|dt|dummy\\\\.coef|dummy\\\\.coef\\\\.lm|dunif|dweibull|dwilcox|ecdf|eff\\\\.aovlist|effects|embed|end|estVar|expand\\\\.model\\\\.frame|extractAIC|factanal|factor\\\\.scope|family|fft|filter|fisher\\\\.test|fitted|fitted\\\\.values|fivenum|fligner\\\\.test|formula|frequency|friedman\\\\.test|ftable|Gamma|gaussian|get_all_vars|getCall|getInitial|glm|glm\\\\.control|glm\\\\.fit|hasTsp|hat|hatvalues|hclust|heatmap|HoltWinters|influence|influence\\\\.measures|integrate|interaction\\\\.plot|inverse\\\\.gaussian|IQR|is\\\\.empty\\\\.model|is\\\\.leaf|is\\\\.mts|isoreg|is\\\\.stepfun|is\\\\.ts|is\\\\.tskernel|KalmanForecast|KalmanLike|KalmanRun|KalmanSmooth|kernapply|kernel|kmeans|knots|kruskal\\\\.test|ksmooth|ks\\\\.test|lag|lag\\\\.plot|line|lm|lm\\\\.fit|lm\\\\.influence|lm\\\\.wfit|loadings|loess|loess\\\\.control|loess\\\\.smooth|logLik|loglin|lowess|ls\\\\.diag|lsfit|ls\\\\.print|mad|mahalanobis|makeARIMA|make\\\\.link|makepredictcall|manova|mantelhaen\\\\.test|mauchly\\\\.test|mcnemar\\\\.test|median|median\\\\.default|medpolish|model\\\\.extract|model\\\\.frame|model\\\\.frame\\\\.default|model\\\\.matrix|model\\\\.matrix\\\\.default|model\\\\.matrix\\\\.lm|model\\\\.offset|model\\\\.response|model\\\\.tables|model\\\\.weights|monthplot|mood\\\\.test|mvfft|na\\\\.action|na\\\\.contiguous|na\\\\.exclude|na\\\\.fail|na\\\\.omit|na\\\\.pass|napredict|naprint|naresid|nextn|nlm|nlminb|nls|nls\\\\.control|NLSstAsymptotic|NLSstClosestX|NLSstLfAsymptote|NLSstRtAsymptote|nobs|numericDeriv|offset|oneway\\\\.test|optim|optimHess|optimise|optimize|order\\\\.dendrogram|pacf|p\\\\.adjust|p\\\\.adjust\\\\.methods|Pair|pairwise\\\\.prop\\\\.test|pairwise\\\\.table|pairwise\\\\.t\\\\.test|pairwise\\\\.wilcox\\\\.test|pbeta|pbinom|pbirthday|pcauchy|pchisq|pexp|pf|pgamma|pgeom|phyper|plclust|plnorm|plogis|plot\\\\.ecdf|plot\\\\.spec\\\\.coherency|plot\\\\.spec\\\\.phase|plot\\\\.stepfun|plot\\\\.ts|pnbinom|pnorm|poisson|poisson\\\\.test|poly|polym|power|power\\\\.anova\\\\.test|power\\\\.prop\\\\.test|power\\\\.t\\\\.test|ppoints|ppois|ppr|PP\\\\.test|prcomp|predict|predict\\\\.glm|predict\\\\.lm|preplot|princomp|printCoefmat|profile|proj|promax|prop\\\\.test|prop\\\\.trend\\\\.test|psignrank|pt|ptukey|punif|pweibull|pwilcox|qbeta|qbinom|qbirthday|qcauchy|qchisq|qexp|qf|qgamma|qgeom|qhyper|qlnorm|qlogis|qnbinom|qnorm|qpois|qqline|qqnorm|qqplot|qsignrank|qt|qtukey|quade\\\\.test|quantile|quasi|quasibinomial|quasipoisson|qunif|qweibull|qwilcox|r2dtable|rbeta|rbinom|rcauchy|rchisq|read\\\\.ftable|rect\\\\.hclust|reformulate|relevel|reorder|replications|reshape|resid|residuals|residuals\\\\.glm|residuals\\\\.lm|rexp|rf|rgamma|rgeom|rhyper|rlnorm|rlogis|rmultinom|rnbinom|rnorm|rpois|rsignrank|rstandard|rstudent|rt|runif|runmed|rweibull|rwilcox|rWishart|scatter\\\\.smooth|screeplot|sd|se\\\\.contrast|selfStart|setNames|shapiro\\\\.test|sigma|simulate|smooth|smoothEnds|smooth\\\\.spline|sortedXyData|spec\\\\.ar|spec\\\\.pgram|spec\\\\.taper|spectrum|spline|splinefun|splinefunH|SSasymp|SSasympOff|SSasympOrig|SSbiexp|SSD|SSfol|SSfpl|SSgompertz|SSlogis|SSmicmen|SSweibull|start|stat\\\\.anova|step|stepfun|stl|StructTS|summary\\\\.aov|summary\\\\.glm|summary\\\\.lm|summary\\\\.manova|summary\\\\.stepfun|supsmu|symnum|termplot|terms|terms\\\\.formula|time|toeplitz|ts|tsdiag|ts\\\\.intersect|tsp|ts\\\\.plot|tsSmooth|ts\\\\.union|t\\\\.test|TukeyHSD|uniroot|update|update\\\\.default|update\\\\.formula|var|variable\\\\.names|varimax|var\\\\.test|vcov|weighted\\\\.mean|weighted\\\\.residuals|weights|wilcox\\\\.test|window|write\\\\.ftable|xtabs)\\\\s*(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(adist|alarm|apropos|aregexec|argsAnywhere|asDateBuilt|askYesNo|aspell|aspell_package_C_files|aspell_package_Rd_files|aspell_package_R_files|aspell_package_vignettes|aspell_write_personal_dictionary_file|as\\\\.person|as\\\\.personList|as\\\\.relistable|as\\\\.roman|assignInMyNamespace|assignInNamespace|available\\\\.packages|bibentry|browseEnv|browseURL|browseVignettes|bug\\\\.report|capture\\\\.output|changedFiles|charClass|checkCRAN|chooseBioCmirror|chooseCRANmirror|citation|cite|citeNatbib|citEntry|citFooter|citHeader|close\\\\.socket|combn|compareVersion|contrib\\\\.url|count\\\\.fields|create\\\\.post|data|dataentry|data\\\\.entry|de|debugcall|debugger|demo|de\\\\.ncols|de\\\\.restore|de\\\\.setup|download\\\\.file|download\\\\.packages|dump\\\\.frames|edit|emacs|example|file\\\\.edit|fileSnapshot|file_test|find|findLineNum|fix|fixInNamespace|flush\\\\.console|formatOL|formatUL|getAnywhere|getCRANmirrors|getFromNamespace|getParseData|getParseText|getS3method|getSrcDirectory|getSrcFilename|getSrcLocation|getSrcref|getTxtProgressBar|glob2rx|globalVariables|hasName|head|head\\\\.matrix|help|help\\\\.request|help\\\\.search|help\\\\.start|history|hsearch_db|hsearch_db_concepts|hsearch_db_keywords|installed\\\\.packages|install\\\\.packages|is\\\\.relistable|isS3method|isS3stdGeneric|limitedLabels|loadhistory|localeToCharset|lsf\\\\.str|ls\\\\.str|maintainer|make\\\\.packages\\\\.html|makeRweaveLatexCodeRunner|make\\\\.socket|memory\\\\.limit|memory\\\\.size|menu|methods|mirror2html|modifyList|new\\\\.packages|news|nsl|object\\\\.size|old\\\\.packages|osVersion|packageDate|packageDescription|packageName|package\\\\.skeleton|packageStatus|packageVersion|page|person|personList|pico|process\\\\.events|prompt|promptData|promptImport|promptPackage|rc\\\\.getOption|rc\\\\.options|rc\\\\.settings|rc\\\\.status|readCitationFile|read\\\\.csv|read\\\\.csv2|read\\\\.delim|read\\\\.delim2|read\\\\.DIF|read\\\\.fortran|read\\\\.fwf|read\\\\.socket|read\\\\.table|recover|relist|remove\\\\.packages|removeSource|Rprof|Rprofmem|RShowDoc|RSiteSearch|rtags|Rtangle|RtangleFinish|RtangleRuncode|RtangleSetup|RtangleWritedoc|RweaveChunkPrefix|RweaveEvalWithOpt|RweaveLatex|RweaveLatexFinish|RweaveLatexOptions|RweaveLatexSetup|RweaveLatexWritedoc|RweaveTryStop|savehistory|select\\\\.list|sessionInfo|setBreakpoint|setRepositories|setTxtProgressBar|stack|Stangle|str|strcapture|strOptions|summaryRprof|suppressForeignCheck|Sweave|SweaveHooks|SweaveSyntaxLatex|SweaveSyntaxNoweb|SweaveSyntConv|tail|tail\\\\.matrix|tar|timestamp|toBibtex|toLatex|txtProgressBar|type\\\\.convert|undebugcall|unstack|untar|unzip|update\\\\.packages|upgrade|URLdecode|URLencode|url\\\\.show|vi|View|vignette|warnErrList|write\\\\.csv|write\\\\.csv2|write\\\\.socket|write\\\\.table|xedit|xemacs|zip)\\\\s*(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.r\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/razor/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/razor/build/update-grammar.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\n\nimport * as vscodeGrammarUpdater from 'vscode-grammar-updater';\n\nfunction patchGrammar(grammar) {\n\tgrammar.scopeName = 'text.html.cshtml';\n\treturn grammar;\n}\n\nconst razorGrammarRepo = 'dotnet/razor';\nconst grammarPath = 'src/Razor/src/Microsoft.VisualStudio.RazorExtension/EmbeddedGrammars/aspnetcorerazor.tmLanguage.json';\nvscodeGrammarUpdater.update(razorGrammarRepo, grammarPath, './syntaxes/cshtml.tmLanguage.json', grammar => patchGrammar(grammar), 'main');\n\n\n"
  },
  {
    "path": "extensions/razor/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"dotnet/razor\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/dotnet/razor\",\n\t\t\t\t\t\"commitHash\": \"9b1e979b6c3fe7cfbe30f595b9b0994d20bd482c\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"MIT License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) .NET Foundation and Contributors\",\n\t\t\t\t\"All Rights Reserved\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\t\"SOFTWARE.\"\n\t\t\t]\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/razor/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [ \"<!--\", \"-->\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"<!--\", \"-->\"],\n\t\t[\"{\", \"}\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\"},\n\t\t{ \"open\": \"[\", \"close\": \"]\"},\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\" }\n\t],\n\t\"surroundingPairs\": [\n\t\t{ \"open\": \"'\", \"close\": \"'\" },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\" },\n\t\t{ \"open\": \"<\", \"close\": \">\" }\n\t]\n}\n"
  },
  {
    "path": "extensions/razor/package.json",
    "content": "{\n  \"name\": \"razor\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"0.10.x\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammar.mjs\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"razor\",\n        \"extensions\": [\n          \".cshtml\",\n          \".razor\"\n        ],\n        \"aliases\": [\n          \"Razor\",\n          \"razor\"\n        ],\n        \"mimetypes\": [\n          \"text/x-cshtml\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"razor\",\n        \"scopeName\": \"text.html.cshtml\",\n        \"path\": \"./syntaxes/cshtml.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"section.embedded.source.cshtml\": \"csharp\",\n          \"source.css\": \"css\",\n          \"source.js\": \"javascript\"\n        }\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/razor/package.nls.json",
    "content": "{\n\t\"displayName\": \"Razor Language Basics\",\n\t\"description\": \"Provides syntax highlighting, bracket matching and folding in Razor files.\"\n}\n"
  },
  {
    "path": "extensions/razor/syntaxes/cshtml.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/dotnet/razor/blob/master/src/Razor/src/Microsoft.VisualStudio.RazorExtension/EmbeddedGrammars/aspnetcorerazor.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/dotnet/razor/commit/9b1e979b6c3fe7cfbe30f595b9b0994d20bd482c\",\n\t\"name\": \"ASP.NET Razor\",\n\t\"scopeName\": \"text.html.cshtml\",\n\t\"injections\": {\n\t\t\"string.quoted.double.html\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#explicit-razor-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string.quoted.single.html\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#explicit-razor-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#razor-control-structures\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"text.html.basic\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"razor-control-structures\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#explicit-razor-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#directives\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#transitioned-csharp-control-structures\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"optionally-transitioned-razor-control-structures\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#explicit-razor-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#directives\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#optionally-transitioned-csharp-control-structures\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"escaped-transition\": {\n\t\t\t\"name\": \"constant.character.escape.razor.transition\",\n\t\t\t\"match\": \"@@\"\n\t\t},\n\t\t\"transition\": {\n\t\t\t\"match\": \"@\",\n\t\t\t\"name\": \"keyword.control.cshtml.transition\"\n\t\t},\n\t\t\"razor-codeblock\": {\n\t\t\t\"name\": \"meta.structure.razor.codeblock\",\n\t\t\t\"begin\": \"(@)(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.codeblock.open\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"source.cs\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.codeblock.close\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"razor-codeblock-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#text-tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wellformed-html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-single-line-markup\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#optionally-transitioned-razor-control-structures\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"razor-single-line-markup\": {\n\t\t\t\"match\": \"(\\\\@\\\\:)([^$]*)$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.singleLineMarkup\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#razor-control-structures\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"text-tag\": {\n\t\t\t\"begin\": \"(<text\\\\s*>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.cshtml.transition.textTag.open\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#wellformed-html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(</text>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.cshtml.transition.textTag.close\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"razor-comment\": {\n\t\t\t\"name\": \"meta.comment.razor\",\n\t\t\t\"begin\": \"(@)(\\\\*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.comment.star\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"comment.block.razor\",\n\t\t\t\"end\": \"(\\\\*)(@)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.comment.star\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"wellformed-html\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#void-tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#non-void-tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"void-tag\": {\n\t\t\t\"name\": \"meta.tag.structure.$3.void.html\",\n\t\t\t\"begin\": \"(?i)(<)(!)?(area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)(?=\\\\s|/?>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.razor.tagHelperOptOut\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.basic#attribute\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"/?>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"non-void-tag\": {\n\t\t\t\"begin\": \"(?=<(!)?([^/\\\\s>]+)(\\\\s|/?>))\",\n\t\t\t\"end\": \"(</)(\\\\2)\\\\s*(>)|(/>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)(!)?([^/\\\\s>]+)(?=\\\\s|/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.razor.tagHelperOptOut\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=/?>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#razor-control-structures\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic#attribute\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \">\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.html\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=</)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#wellformed-html\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"explicit-razor-expression\": {\n\t\t\t\"name\": \"meta.expression.explicit.cshtml\",\n\t\t\t\"begin\": \"(@)\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.cshtml\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#expression\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.cshtml\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"implicit-expression\": {\n\t\t\t\"name\": \"meta.expression.implicit.cshtml\",\n\t\t\t\"contentName\": \"source.cs\",\n\t\t\t\"begin\": \"(?<![[:alpha:][:alnum:]])(@)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#await-prefix\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?=[\\\\s<>\\\\{\\\\}\\\\)\\\\]'\\\"])\"\n\t\t},\n\t\t\"implicit-expression-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-invocation-start\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-accessor-start\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?=[\\\\s<>\\\\{\\\\}\\\\)\\\\]'\\\"])\"\n\t\t},\n\t\t\"implicit-expression-invocation-start\": {\n\t\t\t\"begin\": \"([_[:alpha:]][_[:alnum:]]*)(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-continuation\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?=[\\\\s<>\\\\{\\\\}\\\\)\\\\]'\\\"])\"\n\t\t},\n\t\t\"implicit-expression-accessor-start\": {\n\t\t\t\"begin\": \"([_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.object.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-continuation\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?=[\\\\s<>\\\\{\\\\}\\\\)\\\\]'\\\"])\"\n\t\t},\n\t\t\"implicit-expression-continuation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#balanced-parenthesis-csharp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#balanced-brackets-csharp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-invocation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-extension\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?=[\\\\s<>\\\\{\\\\}\\\\)\\\\]'\\\"])\"\n\t\t},\n\t\t\"implicit-expression-accessor\": {\n\t\t\t\"match\": \"(?<=\\\\.)[_[:alpha:]][_[:alnum:]]*\",\n\t\t\t\"name\": \"variable.other.object.property.cs\"\n\t\t},\n\t\t\"implicit-expression-invocation\": {\n\t\t\t\"match\": \"(?<=\\\\.)[_[:alpha:]][_[:alnum:]]*(?=\\\\()\",\n\t\t\t\"name\": \"entity.name.function.cs\"\n\t\t},\n\t\t\"implicit-expression-operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-dot-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-null-conditional-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implicit-expression-null-forgiveness-operator\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"implicit-expression-dot-operator\": {\n\t\t\t\"match\": \"(\\\\.)(?=[_[:alpha:]][_[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"implicit-expression-null-conditional-operator\": {\n\t\t\t\"match\": \"(\\\\?)(?=[.\\\\[])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.null-conditional.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"implicit-expression-null-forgiveness-operator\": {\n\t\t\t\"match\": \"(\\\\!)(?=(?:\\\\.[_[:alpha:]][_[:alnum:]]*)|\\\\?|[\\\\[\\\\(])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.logical.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"balanced-parenthesis-csharp\": {\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"razor.test.balanced.parenthesis\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"balanced-brackets-csharp\": {\n\t\t\t\"begin\": \"(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"razor.test.balanced.brackets\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.squarebracket.close.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"directives\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functions-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#page-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#addTagHelper-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#removeTagHelper-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tagHelperPrefix-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#model-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inherits-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#implements-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inject-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attribute-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#section-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#layout-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rendermode-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#preservewhitespace-directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typeparam-directive\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-directive\": {\n\t\t\t\"begin\": \"(@)(code)((?=\\\\{)|\\\\s+)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.code\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#directive-codeblock\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})|\\\\s\"\n\t\t},\n\t\t\"functions-directive\": {\n\t\t\t\"begin\": \"(@)(functions)((?=\\\\{)|\\\\s+)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.functions\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#directive-codeblock\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})|\\\\s\"\n\t\t},\n\t\t\"directive-codeblock\": {\n\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.codeblock.open\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.structure.razor.directive.codeblock\",\n\t\t\t\"contentName\": \"source.cs\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#class-or-struct-members\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.codeblock.close\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"page-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(page)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.page\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#string-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"addTagHelper-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(addTagHelper)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.addTagHelper\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tagHelper-directive-argument\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"removeTagHelper-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(removeTagHelper)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.removeTagHelper\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tagHelper-directive-argument\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"tagHelperPrefix-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(tagHelperPrefix)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.tagHelperPrefix\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#tagHelper-directive-argument\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"tagHelper-directive-argument\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#string-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#unquoted-string-argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"unquoted-string-argument\": {\n\t\t\t\"name\": \"string.quoted.double.cs\",\n\t\t\t\"match\": \"[^$]+\"\n\t\t},\n\t\t\"model-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(model)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.model\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"inherits-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(inherits)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.inherits\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"implements-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(implements)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.implements\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"layout-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(layout)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.layout\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"namespace-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(namespace)\\\\s+([^\\\\s]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.namespace\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespace-directive-argument\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"namespace-directive-argument\": {\n\t\t\t\"match\": \"([_[:alpha:]][_[:alnum:]]*)(\\\\.)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.type.namespace.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"inject-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(inject)\\\\s*([\\\\S\\\\s]+?)?\\\\s*([_[:alpha:]][_[:alnum:]]*)?\\\\s*(?=$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.inject\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.variable.property.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"rendermode-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(rendermode)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.rendermode\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"preservewhitespace-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(preservewhitespace)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.preservewhitespace\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#boolean-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"typeparam-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(typeparam)\\\\s+([^$]+)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.typeparam\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"attribute-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"begin\": \"(@)(attribute)\\\\b\\\\s+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.attribute\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#attribute-section\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=\\\\])|$\"\n\t\t},\n\t\t\"section-directive\": {\n\t\t\t\"name\": \"meta.directive.block\",\n\t\t\t\"begin\": \"(@)(section)\\\\b\\\\s+([_[:alpha:]][_[:alnum:]]*)?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.section\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.razor.directive.sectionName\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#directive-markupblock\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"directive-markupblock\": {\n\t\t\t\"name\": \"meta.structure.razor.directive.markblock\",\n\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.codeblock.open\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.directive.codeblock.close\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using-directive\": {\n\t\t\t\"name\": \"meta.directive\",\n\t\t\t\"match\": \"(@)(using)\\\\b\\\\s+(?!\\\\(|\\\\s)(.+?)?(;)?$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#using-static-directive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#using-alias-directive\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#using-standard-directive\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.control.razor.optionalSemicolon\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using-static-directive\": {\n\t\t\t\"match\": \"(static)\\\\b\\\\s+(.+)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.static.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using-alias-directive\": {\n\t\t\t\"match\": \"([_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*(=)\\\\s*(.+)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.type.alias.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.cs\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"using-standard-directive\": {\n\t\t\t\"match\": \"([_[:alpha:]][_[:alnum:]]*)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.type.namespace.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"optionally-transitioned-csharp-control-structures\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using-statement-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#if-statement-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#else-part\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#foreach-statement-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for-statement-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#while-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-statement-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lock-statement-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#do-statement-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#try-statement-with-optional-transition\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"transitioned-csharp-control-structures\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#using-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#if-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#else-part\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#foreach-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#while-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lock-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#do-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#try-statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"using-statement\": {\n\t\t\t\"name\": \"meta.statement.using.razor\",\n\t\t\t\"begin\": \"(?:(@))(using)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"using-statement-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.using.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@))(using)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.using.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"if-statement\": {\n\t\t\t\"name\": \"meta.statement.if.razor\",\n\t\t\t\"begin\": \"(?:(@))(if)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.if.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"if-statement-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.if.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@))(if)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.if.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"else-part\": {\n\t\t\t\"name\": \"meta.statement.else.razor\",\n\t\t\t\"begin\": \"(?:^|(?<=}))\\\\s*(else)\\\\b\\\\s*?(?: (if))?\\\\s*?(?=[\\\\n\\\\(\\\\{])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.else.cs\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.conditional.if.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"for-statement\": {\n\t\t\t\"name\": \"meta.statement.for.razor\",\n\t\t\t\"begin\": \"(?:(@))(for)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.for.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"for-statement-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.for.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@))(for)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.for.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"foreach-statement\": {\n\t\t\t\"name\": \"meta.statement.foreach.razor\",\n\t\t\t\"begin\": \"(?:(@)(await\\\\s+)?)(foreach)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#await-prefix\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.foreach.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#foreach-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"foreach-statement-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.foreach.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@)(await\\\\s+)?)(foreach)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#await-prefix\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.foreach.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#foreach-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"foreach-condition\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?:\\n  (\\\\bvar\\\\b)|\\n  (?<type-name>\\n    (?:\\n      (?:\\n        (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n        (?<name-and-type-args> # identifier + type arguments (if any)\\n          \\\\g<identifier>\\\\s*\\n          (?<type-args>\\\\s*<(?:[^<>]|\\\\g<type-args>)+>\\\\s*)?\\n        )\\n        (?:\\\\s*\\\\.\\\\s*\\\\g<name-and-type-args>)* | # Are there any more names being dotted into?\\n        (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n      )\\n      (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n      (?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*\\\\]\\\\s*)* # array suffix?\\n    )\\n  )\\n)\\\\s+\\n(\\\\g<identifier>)\\\\s+\\n\\\\b(in)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.var.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.in.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) # match foreach (var (x, y) in ...)\\n(?:\\\\b(var)\\\\b\\\\s*)?\\n(?<tuple>\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\\\s+\\n\\\\b(in)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.var.cs\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cs#tuple-declaration-deconstruction-element-list\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.in.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"do-statement\": {\n\t\t\t\"name\": \"meta.statement.do.razor\",\n\t\t\t\"begin\": \"(?:(@))(do)\\\\b\\\\s\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.do.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"do-statement-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.do.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@))(do)\\\\b\\\\s\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.do.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"while-statement\": {\n\t\t\t\"name\": \"meta.statement.while.razor\",\n\t\t\t\"begin\": \"(?:(@)|^\\\\s*|(?<=})\\\\s*)(while)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.while.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})|(;)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"switch-statement\": {\n\t\t\t\"name\": \"meta.statement.switch.razor\",\n\t\t\t\"begin\": \"(?:(@))(switch)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.switch.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"switch-statement-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.switch.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@))(switch)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.switch.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"switch-code-block\": {\n\t\t\t\"name\": \"meta.structure.razor.csharp.codeblock.switch\",\n\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#switch-label\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"lock-statement\": {\n\t\t\t\"name\": \"meta.statement.lock.razor\",\n\t\t\t\"begin\": \"(?:(@))(lock)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.lock.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"lock-statement-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.lock.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@))(lock)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.lock.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"try-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#try-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#catch-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#finally-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"try-statement-with-optional-transition\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#try-block-with-optional-transition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#catch-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#finally-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"try-block\": {\n\t\t\t\"name\": \"meta.statement.try.razor\",\n\t\t\t\"begin\": \"(?:(@))(try)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.try.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"try-block-with-optional-transition\": {\n\t\t\t\"name\": \"meta.statement.try.razor\",\n\t\t\t\"begin\": \"(?:^\\\\s*|(@))(try)\\\\b\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#transition\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.try.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"catch-clause\": {\n\t\t\t\"name\": \"meta.statement.catch.razor\",\n\t\t\t\"begin\": \"(?:^|(?<=}))\\\\s*(catch)\\\\b\\\\s*?(?=[\\\\n\\\\(\\\\{])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.try.catch.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#catch-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#when-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"catch-condition\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?<type-name>\\n  (?:\\n    (?:\\n      (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\\\s*\\\\:\\\\:\\\\s*)? # alias-qualification\\n      (?<name-and-type-args> # identifier + type arguments (if any)\\n        \\\\g<identifier>\\\\s*\\n        (?<type-args>\\\\s*<(?:[^<>]|\\\\g<type-args>)+>\\\\s*)?\\n      )\\n      (?:\\\\s*\\\\.\\\\s*\\\\g<name-and-type-args>)* | # Are there any more names being dotted into?\\n      (?<tuple>\\\\s*\\\\((?:[^\\\\(\\\\)]|\\\\g<tuple>)+\\\\))\\n    )\\n    (?:\\\\s*\\\\?\\\\s*)? # nullable suffix?\\n    (?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*\\\\]\\\\s*)* # array suffix?\\n  )\\n)\\\\s*\\n(?:(\\\\g<identifier>)\\\\b)?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.cs#type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.variable.local.cs\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"finally-clause\": {\n\t\t\t\"name\": \"meta.statement.finally.razor\",\n\t\t\t\"begin\": \"(?:^|(?<=}))\\\\s*(finally)\\\\b\\\\s*?(?=[\\\\n\\\\{])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.try.finally.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#csharp-code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(?<=})\"\n\t\t},\n\t\t\"await-prefix\": {\n\t\t\t\"name\": \"keyword.other.await.cs\",\n\t\t\t\"match\": \"(await)\\\\s+\"\n\t\t},\n\t\t\"csharp-code-block\": {\n\t\t\t\"name\": \"meta.structure.razor.csharp.codeblock\",\n\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#razor-codeblock-body\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.curlybrace.close.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"csharp-condition\": {\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.open.cs\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#local-variable-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cs#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.parenthesis.close.cs\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/references-view/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/references-view/.vscodeignore",
    "content": ".vscode/**\nsrc/**\nout/**\ntsconfig.json\n*.webpack.config.js\npackage-lock.json\n"
  },
  {
    "path": "extensions/references-view/README.md",
    "content": "# References View\n\nThis extension shows reference search results as separate view, just like search results. It complements the peek view presentation that is also built into VS Code. The following feature are available:\n\n* List All References via the Command Palette, the Context Menu, or via <kbd>Alt+Shift+F12</kbd>\n* View references in a dedicated tree view that sits in the sidebar\n* Navigate through search results via <kbd>F4</kbd> and  <kbd>Shift+F4</kbd>\n* Remove references from the list via inline commands\n\n![](https://raw.githubusercontent.com/microsoft/vscode-references-view/master/media/demo.png)\n\n**Note** that this extension is bundled with Visual Studio Code version 1.29 and later - it doesn't need to be installed anymore.\n\n## Requirements\n\nThis extension is just an alternative UI for reference search and extensions implementing reference search must still be installed.\n\n## Issues\n\nThis extension ships with Visual Studio Code and uses its issue tracker. Please file issue here: https://github.com/Microsoft/vscode/issues\n\n# Contributing\n\nThis project welcomes contributions and suggestions.  Most contributions require you to agree to a\nContributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us\nthe rights to use your contribution. For details, visit https://cla.microsoft.com.\n\nWhen you submit a pull request, a CLA-bot will automatically determine whether you need to provide\na CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions\nprovided by the bot. You will only need to do this once across all repos using our CLA.\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or\ncontact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n"
  },
  {
    "path": "extensions/references-view/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\nconst path = require('path');\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t},\n\toutput: {\n\t\tfilename: 'extension.js',\n\t\tpath: path.join(__dirname, 'dist')\n\t}\n});\n"
  },
  {
    "path": "extensions/references-view/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t}\n});\n"
  },
  {
    "path": "extensions/references-view/package.json",
    "content": "{\n  \"name\": \"references-view\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"icon\": \"media/icon.png\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.67.0\"\n  },\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Microsoft/vscode-references-view\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Microsoft/vscode-references-view/issues\"\n  },\n  \"activationEvents\": [\n    \"onCommand:references-view.find\",\n    \"onCommand:editor.action.showReferences\"\n  ],\n  \"main\": \"./out/extension\",\n  \"browser\": \"./dist/extension.js\",\n  \"contributes\": {\n    \"configuration\": {\n      \"properties\": {\n        \"references.preferredLocation\": {\n          \"description\": \"%config.references.preferredLocation%\",\n          \"type\": \"string\",\n          \"default\": \"peek\",\n          \"enum\": [\n            \"peek\",\n            \"view\"\n          ],\n          \"enumDescriptions\": [\n            \"%config.references.preferredLocation.peek%\",\n            \"%config.references.preferredLocation.view%\"\n          ]\n        }\n      }\n    },\n    \"viewsContainers\": {\n      \"activitybar\": [\n        {\n          \"id\": \"references-view\",\n          \"icon\": \"$(references)\",\n          \"title\": \"%container.title%\"\n        }\n      ]\n    },\n    \"views\": {\n      \"references-view\": [\n        {\n          \"id\": \"references-view.tree\",\n          \"name\": \"%view.title%\",\n          \"when\": \"reference-list.isActive\"\n        }\n      ]\n    },\n    \"commands\": [\n      {\n        \"command\": \"references-view.findReferences\",\n        \"title\": \"%cmd.references-view.findReferences%\",\n        \"category\": \"%cmd.category.references%\"\n      },\n      {\n        \"command\": \"references-view.findImplementations\",\n        \"title\": \"%cmd.references-view.findImplementations%\",\n        \"category\": \"%cmd.category.references%\"\n      },\n      {\n        \"command\": \"references-view.clearHistory\",\n        \"title\": \"%cmd.references-view.clearHistory%\",\n        \"category\": \"%cmd.category.references%\",\n        \"icon\": \"$(clear-all)\"\n      },\n      {\n        \"command\": \"references-view.clear\",\n        \"title\": \"%cmd.references-view.clear%\",\n        \"category\": \"%cmd.category.references%\",\n        \"icon\": \"$(clear-all)\"\n      },\n      {\n        \"command\": \"references-view.refresh\",\n        \"title\": \"%cmd.references-view.refresh%\",\n        \"category\": \"%cmd.category.references%\",\n        \"icon\": \"$(refresh)\"\n      },\n      {\n        \"command\": \"references-view.pickFromHistory\",\n        \"title\": \"%cmd.references-view.pickFromHistory%\",\n        \"category\": \"%cmd.category.references%\"\n      },\n      {\n        \"command\": \"references-view.removeReferenceItem\",\n        \"title\": \"%cmd.references-view.removeReferenceItem%\",\n        \"icon\": \"$(close)\"\n      },\n      {\n        \"command\": \"references-view.copy\",\n        \"title\": \"%cmd.references-view.copy%\"\n      },\n      {\n        \"command\": \"references-view.copyAll\",\n        \"title\": \"%cmd.references-view.copyAll%\"\n      },\n      {\n        \"command\": \"references-view.copyPath\",\n        \"title\": \"%cmd.references-view.copyPath%\"\n      },\n      {\n        \"command\": \"references-view.refind\",\n        \"title\": \"%cmd.references-view.refind%\",\n        \"icon\": \"$(refresh)\"\n      },\n      {\n        \"command\": \"references-view.showCallHierarchy\",\n        \"title\": \"%cmd.references-view.showCallHierarchy%\",\n        \"category\": \"Calls\"\n      },\n      {\n        \"command\": \"references-view.showOutgoingCalls\",\n        \"title\": \"%cmd.references-view.showOutgoingCalls%\",\n        \"category\": \"Calls\",\n        \"icon\": \"$(call-outgoing)\"\n      },\n      {\n        \"command\": \"references-view.showIncomingCalls\",\n        \"title\": \"%cmd.references-view.showIncomingCalls%\",\n        \"category\": \"Calls\",\n        \"icon\": \"$(call-incoming)\"\n      },\n      {\n        \"command\": \"references-view.removeCallItem\",\n        \"title\": \"%cmd.references-view.removeCallItem%\",\n        \"icon\": \"$(close)\"\n      },\n      {\n        \"command\": \"references-view.next\",\n        \"title\": \"%cmd.references-view.next%\",\n        \"enablement\": \"references-view.canNavigate\"\n      },\n      {\n        \"command\": \"references-view.prev\",\n        \"title\": \"%cmd.references-view.prev%\",\n        \"enablement\": \"references-view.canNavigate\"\n      },\n      {\n        \"command\": \"references-view.showTypeHierarchy\",\n        \"title\": \"%cmd.references-view.showTypeHierarchy%\",\n        \"category\": \"Types\"\n      },\n      {\n        \"command\": \"references-view.showSupertypes\",\n        \"title\": \"%cmd.references-view.showSupertypes%\",\n        \"category\": \"Types\",\n        \"icon\": \"$(type-hierarchy-super)\"\n      },\n      {\n        \"command\": \"references-view.showSubtypes\",\n        \"title\": \"%cmd.references-view.showSubtypes%\",\n        \"category\": \"Types\",\n        \"icon\": \"$(type-hierarchy-sub)\"\n      },\n      {\n        \"command\": \"references-view.removeTypeItem\",\n        \"title\": \"%cmd.references-view.removeTypeItem%\",\n        \"icon\": \"$(close)\"\n      }\n    ],\n    \"menus\": {\n      \"editor/context\": [\n        {\n          \"command\": \"references-view.findReferences\",\n          \"when\": \"editorHasReferenceProvider\",\n          \"group\": \"0_navigation@1\"\n        },\n        {\n          \"command\": \"references-view.findImplementations\",\n          \"when\": \"editorHasImplementationProvider\",\n          \"group\": \"0_navigation@2\"\n        },\n        {\n          \"command\": \"references-view.showCallHierarchy\",\n          \"when\": \"editorHasCallHierarchyProvider\",\n          \"group\": \"0_navigation@3\"\n        },\n        {\n          \"command\": \"references-view.showTypeHierarchy\",\n          \"when\": \"editorHasTypeHierarchyProvider\",\n          \"group\": \"0_navigation@4\"\n        }\n      ],\n      \"view/title\": [\n        {\n          \"command\": \"references-view.clear\",\n          \"group\": \"navigation@3\",\n          \"when\": \"view == references-view.tree && reference-list.hasResult\"\n        },\n        {\n          \"command\": \"references-view.clearHistory\",\n          \"group\": \"navigation@3\",\n          \"when\": \"view == references-view.tree && reference-list.hasHistory && !reference-list.hasResult\"\n        },\n        {\n          \"command\": \"references-view.refresh\",\n          \"group\": \"navigation@2\",\n          \"when\": \"view == references-view.tree && reference-list.hasResult\"\n        },\n        {\n          \"command\": \"references-view.showOutgoingCalls\",\n          \"group\": \"navigation@1\",\n          \"when\": \"view == references-view.tree && reference-list.hasResult && reference-list.source == callHierarchy &&  references-view.callHierarchyMode == showIncoming\"\n        },\n        {\n          \"command\": \"references-view.showIncomingCalls\",\n          \"group\": \"navigation@1\",\n          \"when\": \"view == references-view.tree && reference-list.hasResult && reference-list.source == callHierarchy &&  references-view.callHierarchyMode == showOutgoing\"\n        },\n        {\n          \"command\": \"references-view.showSupertypes\",\n          \"group\": \"navigation@1\",\n          \"when\": \"view == references-view.tree && reference-list.hasResult && reference-list.source == typeHierarchy &&  references-view.typeHierarchyMode != supertypes\"\n        },\n        {\n          \"command\": \"references-view.showSubtypes\",\n          \"group\": \"navigation@1\",\n          \"when\": \"view == references-view.tree && reference-list.hasResult && reference-list.source == typeHierarchy &&  references-view.typeHierarchyMode != subtypes\"\n        }\n      ],\n      \"view/item/context\": [\n        {\n          \"command\": \"references-view.removeReferenceItem\",\n          \"group\": \"inline\",\n          \"when\": \"view == references-view.tree && viewItem == file-item || view == references-view.tree && viewItem == reference-item\"\n        },\n        {\n          \"command\": \"references-view.removeCallItem\",\n          \"group\": \"inline\",\n          \"when\": \"view == references-view.tree && viewItem == call-item\"\n        },\n        {\n          \"command\": \"references-view.removeTypeItem\",\n          \"group\": \"inline\",\n          \"when\": \"view == references-view.tree && viewItem == type-item\"\n        },\n        {\n          \"command\": \"references-view.refind\",\n          \"group\": \"inline\",\n          \"when\": \"view == references-view.tree && viewItem == history-item\"\n        },\n        {\n          \"command\": \"references-view.removeReferenceItem\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == file-item || view == references-view.tree && viewItem == reference-item\"\n        },\n        {\n          \"command\": \"references-view.removeCallItem\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == call-item\"\n        },\n        {\n          \"command\": \"references-view.removeTypeItem\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == type-item\"\n        },\n        {\n          \"command\": \"references-view.refind\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == history-item\"\n        },\n        {\n          \"command\": \"references-view.copy\",\n          \"group\": \"2@1\",\n          \"when\": \"view == references-view.tree && viewItem == file-item || view == references-view.tree && viewItem == reference-item\"\n        },\n        {\n          \"command\": \"references-view.copyPath\",\n          \"group\": \"2@2\",\n          \"when\": \"view == references-view.tree && viewItem == file-item\"\n        },\n        {\n          \"command\": \"references-view.copyAll\",\n          \"group\": \"2@3\",\n          \"when\": \"view == references-view.tree && viewItem == file-item || view == references-view.tree && viewItem == reference-item\"\n        },\n        {\n          \"command\": \"references-view.showOutgoingCalls\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == call-item\"\n        },\n        {\n          \"command\": \"references-view.showIncomingCalls\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == call-item\"\n        },\n        {\n          \"command\": \"references-view.showSupertypes\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == type-item\"\n        },\n        {\n          \"command\": \"references-view.showSubtypes\",\n          \"group\": \"1\",\n          \"when\": \"view == references-view.tree && viewItem == type-item\"\n        }\n      ],\n      \"commandPalette\": [\n        {\n          \"command\": \"references-view.removeReferenceItem\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.removeCallItem\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.removeTypeItem\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.copy\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.copyAll\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.copyPath\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.refind\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.findReferences\",\n          \"when\": \"editorHasReferenceProvider\"\n        },\n        {\n          \"command\": \"references-view.clear\",\n          \"when\": \"reference-list.hasResult\"\n        },\n        {\n          \"command\": \"references-view.clearHistory\",\n          \"when\": \"reference-list.isActive && !reference-list.hasResult\"\n        },\n        {\n          \"command\": \"references-view.refresh\",\n          \"when\": \"reference-list.hasResult\"\n        },\n        {\n          \"command\": \"references-view.pickFromHistory\",\n          \"when\": \"reference-list.isActive\"\n        },\n        {\n          \"command\": \"references-view.next\",\n          \"when\": \"never\"\n        },\n        {\n          \"command\": \"references-view.prev\",\n          \"when\": \"never\"\n        }\n      ]\n    },\n    \"keybindings\": [\n      {\n        \"command\": \"references-view.findReferences\",\n        \"when\": \"editorHasReferenceProvider\",\n        \"key\": \"shift+alt+f12\"\n      },\n      {\n        \"command\": \"references-view.next\",\n        \"when\": \"reference-list.hasResult\",\n        \"key\": \"f4\"\n      },\n      {\n        \"command\": \"references-view.prev\",\n        \"when\": \"reference-list.hasResult\",\n        \"key\": \"shift+f4\"\n      },\n      {\n        \"command\": \"references-view.showCallHierarchy\",\n        \"when\": \"editorHasCallHierarchyProvider\",\n        \"key\": \"shift+alt+h\"\n      }\n    ]\n  },\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:references-view\",\n    \"watch\": \"npx gulp watch-extension:references-view\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  }\n}\n"
  },
  {
    "path": "extensions/references-view/package.nls.json",
    "content": "{\n\t\"displayName\": \"Reference Search View\",\n\t\"description\": \"Reference Search results as separate, stable view in the sidebar\",\n\t\"config.references.preferredLocation\": \"Controls whether 'Peek References' or 'Find References' is invoked when selecting CodeLens references.\",\n\t\"config.references.preferredLocation.peek\": \"Show references in peek editor.\",\n\t\"config.references.preferredLocation.view\": \"Show references in separate view.\",\n\t\"container.title\": \"References\",\n\t\"view.title\": \"Reference Search Results\",\n\t\"cmd.category.references\": \"References\",\n\t\"cmd.references-view.findReferences\": \"Find All References\",\n\t\"cmd.references-view.findImplementations\": \"Find All Implementations\",\n\t\"cmd.references-view.clearHistory\": \"Clear History\",\n\t\"cmd.references-view.clear\": \"Clear\",\n\t\"cmd.references-view.refresh\": \"Refresh\",\n\t\"cmd.references-view.pickFromHistory\": \"Show History\",\n\t\"cmd.references-view.removeReferenceItem\": \"Dismiss\",\n\t\"cmd.references-view.copy\": \"Copy\",\n\t\"cmd.references-view.copyAll\": \"Copy All\",\n\t\"cmd.references-view.copyPath\": \"Copy Path\",\n\t\"cmd.references-view.refind\": \"Rerun\",\n\t\"cmd.references-view.showCallHierarchy\": \"Show Call Hierarchy\",\n\t\"cmd.references-view.showOutgoingCalls\": \"Show Outgoing Calls\",\n\t\"cmd.references-view.showIncomingCalls\": \"Show Incoming Calls\",\n\t\"cmd.references-view.removeCallItem\": \"Dismiss\",\n\t\"cmd.references-view.next\": \"Go to Next Reference\",\n\t\"cmd.references-view.prev\": \"Go to Previous Reference\",\n\t\"cmd.references-view.showTypeHierarchy\": \"Show Type Hierarchy\",\n\t\"cmd.references-view.showSupertypes\": \"Show Supertypes\",\n\t\"cmd.references-view.showSubtypes\": \"Show Subtypes\",\n\t\"cmd.references-view.removeTypeItem\": \"Dismiss\"\n}\n"
  },
  {
    "path": "extensions/references-view/src/calls/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolsTree } from '../tree';\nimport { ContextKey } from '../utils';\nimport { CallItem, CallsDirection, CallsTreeInput } from './model';\n\nexport function register(tree: SymbolsTree, context: vscode.ExtensionContext): void {\n\n\tconst direction = new RichCallsDirection(context.workspaceState, CallsDirection.Incoming);\n\n\tfunction showCallHierarchy() {\n\t\tif (vscode.window.activeTextEditor) {\n\t\t\tconst input = new CallsTreeInput(new vscode.Location(vscode.window.activeTextEditor.document.uri, vscode.window.activeTextEditor.selection.active), direction.value);\n\t\t\ttree.setInput(input);\n\t\t}\n\t}\n\n\tfunction setCallsDirection(value: CallsDirection, anchor: CallItem | unknown) {\n\t\tdirection.value = value;\n\n\t\tlet newInput: CallsTreeInput | undefined;\n\t\tconst oldInput = tree.getInput();\n\t\tif (anchor instanceof CallItem) {\n\t\t\tnewInput = new CallsTreeInput(new vscode.Location(anchor.item.uri, anchor.item.selectionRange.start), direction.value);\n\t\t} else if (oldInput instanceof CallsTreeInput) {\n\t\t\tnewInput = new CallsTreeInput(oldInput.location, direction.value);\n\t\t}\n\t\tif (newInput) {\n\t\t\ttree.setInput(newInput);\n\t\t}\n\t}\n\n\tcontext.subscriptions.push(\n\t\tvscode.commands.registerCommand('references-view.showCallHierarchy', showCallHierarchy),\n\t\tvscode.commands.registerCommand('references-view.showOutgoingCalls', (item: CallItem | unknown) => setCallsDirection(CallsDirection.Outgoing, item)),\n\t\tvscode.commands.registerCommand('references-view.showIncomingCalls', (item: CallItem | unknown) => setCallsDirection(CallsDirection.Incoming, item)),\n\t\tvscode.commands.registerCommand('references-view.removeCallItem', removeCallItem)\n\t);\n}\n\nfunction removeCallItem(item: CallItem | unknown): void {\n\tif (item instanceof CallItem) {\n\t\titem.remove();\n\t}\n}\n\nclass RichCallsDirection {\n\n\tprivate static _key = 'references-view.callHierarchyMode';\n\n\tprivate _ctxMode = new ContextKey<'showIncoming' | 'showOutgoing'>('references-view.callHierarchyMode');\n\n\tconstructor(\n\t\tprivate _mem: vscode.Memento,\n\t\tprivate _value: CallsDirection = CallsDirection.Outgoing,\n\t) {\n\t\tconst raw = _mem.get<number>(RichCallsDirection._key);\n\t\tif (typeof raw === 'number' && raw >= 0 && raw <= 1) {\n\t\t\tthis.value = raw;\n\t\t} else {\n\t\t\tthis.value = _value;\n\t\t}\n\t}\n\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\tset value(value: CallsDirection) {\n\t\tthis._value = value;\n\t\tthis._ctxMode.set(this._value === CallsDirection.Incoming ? 'showIncoming' : 'showOutgoing');\n\t\tthis._mem.update(RichCallsDirection._key, value);\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/calls/model.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolItemDragAndDrop, SymbolItemEditorHighlights, SymbolItemNavigation, SymbolTreeInput } from '../references-view';\nimport { asResourceUrl, del, getThemeIcon, tail } from '../utils';\n\nexport class CallsTreeInput implements SymbolTreeInput<CallItem> {\n\n\treadonly title: string;\n\treadonly contextValue: string = 'callHierarchy';\n\n\tconstructor(\n\t\treadonly location: vscode.Location,\n\t\treadonly direction: CallsDirection,\n\t) {\n\t\tthis.title = direction === CallsDirection.Incoming\n\t\t\t? vscode.l10n.t('Callers Of')\n\t\t\t: vscode.l10n.t('Calls From');\n\t}\n\n\tasync resolve() {\n\n\t\tconst items = await Promise.resolve(vscode.commands.executeCommand<vscode.CallHierarchyItem[]>('vscode.prepareCallHierarchy', this.location.uri, this.location.range.start));\n\t\tconst model = new CallsModel(this.direction, items ?? []);\n\t\tconst provider = new CallItemDataProvider(model);\n\n\t\tif (model.roots.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn {\n\t\t\tprovider,\n\t\t\tget message() { return model.roots.length === 0 ? vscode.l10n.t('No results.') : undefined; },\n\t\t\tnavigation: model,\n\t\t\thighlights: model,\n\t\t\tdnd: model,\n\t\t\tdispose() {\n\t\t\t\tprovider.dispose();\n\t\t\t}\n\t\t};\n\t}\n\n\twith(location: vscode.Location): CallsTreeInput {\n\t\treturn new CallsTreeInput(location, this.direction);\n\t}\n}\n\n\nexport const enum CallsDirection {\n\tIncoming,\n\tOutgoing\n}\n\n\n\nexport class CallItem {\n\n\tchildren?: CallItem[];\n\n\tconstructor(\n\t\treadonly model: CallsModel,\n\t\treadonly item: vscode.CallHierarchyItem,\n\t\treadonly parent: CallItem | undefined,\n\t\treadonly locations: vscode.Location[] | undefined\n\t) { }\n\n\tremove(): void {\n\t\tthis.model.remove(this);\n\t}\n}\n\nclass CallsModel implements SymbolItemNavigation<CallItem>, SymbolItemEditorHighlights<CallItem>, SymbolItemDragAndDrop<CallItem> {\n\n\treadonly roots: CallItem[] = [];\n\n\tprivate readonly _onDidChange = new vscode.EventEmitter<CallsModel>();\n\treadonly onDidChange = this._onDidChange.event;\n\n\tconstructor(readonly direction: CallsDirection, items: vscode.CallHierarchyItem[]) {\n\t\tthis.roots = items.map(item => new CallItem(this, item, undefined, undefined));\n\t}\n\n\tprivate async _resolveCalls(call: CallItem): Promise<CallItem[]> {\n\t\tif (this.direction === CallsDirection.Incoming) {\n\t\t\tconst calls = await vscode.commands.executeCommand<vscode.CallHierarchyIncomingCall[]>('vscode.provideIncomingCalls', call.item);\n\t\t\treturn calls ? calls.map(item => new CallItem(this, item.from, call, item.fromRanges.map(range => new vscode.Location(item.from.uri, range)))) : [];\n\t\t} else {\n\t\t\tconst calls = await vscode.commands.executeCommand<vscode.CallHierarchyOutgoingCall[]>('vscode.provideOutgoingCalls', call.item);\n\t\t\treturn calls ? calls.map(item => new CallItem(this, item.to, call, item.fromRanges.map(range => new vscode.Location(call.item.uri, range)))) : [];\n\t\t}\n\t}\n\n\tasync getCallChildren(call: CallItem): Promise<CallItem[]> {\n\t\tif (!call.children) {\n\t\t\tcall.children = await this._resolveCalls(call);\n\t\t}\n\t\treturn call.children;\n\t}\n\n\t// -- navigation\n\n\tlocation(item: CallItem) {\n\t\treturn new vscode.Location(item.item.uri, item.item.range);\n\t}\n\n\tnearest(uri: vscode.Uri, _position: vscode.Position): CallItem | undefined {\n\t\treturn this.roots.find(item => item.item.uri.toString() === uri.toString()) ?? this.roots[0];\n\t}\n\n\tnext(from: CallItem): CallItem {\n\t\treturn this._move(from, true) ?? from;\n\t}\n\n\tprevious(from: CallItem): CallItem {\n\t\treturn this._move(from, false) ?? from;\n\t}\n\n\tprivate _move(item: CallItem, fwd: boolean): CallItem | void {\n\t\tif (item.children?.length) {\n\t\t\treturn fwd ? item.children[0] : tail(item.children);\n\t\t}\n\t\tconst array = this.roots.includes(item) ? this.roots : item.parent?.children;\n\t\tif (array?.length) {\n\t\t\tconst idx = array.indexOf(item);\n\t\t\tconst delta = fwd ? 1 : -1;\n\t\t\treturn array[idx + delta + array.length % array.length];\n\t\t}\n\t}\n\n\t// --- dnd\n\n\tgetDragUri(item: CallItem): vscode.Uri | undefined {\n\t\treturn asResourceUrl(item.item.uri, item.item.range);\n\t}\n\n\t// --- highlights\n\n\tgetEditorHighlights(item: CallItem, uri: vscode.Uri): vscode.Range[] | undefined {\n\t\tif (!item.locations) {\n\t\t\treturn item.item.uri.toString() === uri.toString() ? [item.item.selectionRange] : undefined;\n\t\t}\n\t\treturn item.locations\n\t\t\t.filter(loc => loc.uri.toString() === uri.toString())\n\t\t\t.map(loc => loc.range);\n\t}\n\n\tremove(item: CallItem) {\n\t\tconst isInRoot = this.roots.includes(item);\n\t\tconst siblings = isInRoot ? this.roots : item.parent?.children;\n\t\tif (siblings) {\n\t\t\tdel(siblings, item);\n\t\t\tthis._onDidChange.fire(this);\n\t\t}\n\t}\n}\n\nclass CallItemDataProvider implements vscode.TreeDataProvider<CallItem> {\n\n\tprivate readonly _emitter = new vscode.EventEmitter<CallItem | undefined>();\n\treadonly onDidChangeTreeData = this._emitter.event;\n\n\tprivate readonly _modelListener: vscode.Disposable;\n\n\tconstructor(private _model: CallsModel) {\n\t\tthis._modelListener = _model.onDidChange(e => this._emitter.fire(e instanceof CallItem ? e : undefined));\n\t}\n\n\tdispose(): void {\n\t\tthis._emitter.dispose();\n\t\tthis._modelListener.dispose();\n\t}\n\n\tgetTreeItem(element: CallItem): vscode.TreeItem {\n\n\t\tconst item = new vscode.TreeItem(element.item.name);\n\t\titem.description = element.item.detail;\n\t\titem.tooltip = item.label && element.item.detail ? `${item.label} - ${element.item.detail}` : item.label ? `${item.label}` : element.item.detail;\n\t\titem.contextValue = 'call-item';\n\t\titem.iconPath = getThemeIcon(element.item.kind);\n\n\t\ttype OpenArgs = [vscode.Uri, vscode.TextDocumentShowOptions];\n\t\tlet openArgs: OpenArgs;\n\n\t\tif (element.model.direction === CallsDirection.Outgoing) {\n\n\t\t\topenArgs = [element.item.uri, { selection: element.item.selectionRange.with({ end: element.item.selectionRange.start }) }];\n\n\t\t} else {\n\t\t\t// incoming call -> reveal first call instead of caller\n\t\t\tlet firstLoctionStart: vscode.Position | undefined;\n\t\t\tif (element.locations) {\n\t\t\t\tfor (const loc of element.locations) {\n\t\t\t\t\tif (loc.uri.toString() === element.item.uri.toString()) {\n\t\t\t\t\t\tfirstLoctionStart = firstLoctionStart?.isBefore(loc.range.start) ? firstLoctionStart : loc.range.start;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!firstLoctionStart) {\n\t\t\t\tfirstLoctionStart = element.item.selectionRange.start;\n\t\t\t}\n\t\t\topenArgs = [element.item.uri, { selection: new vscode.Range(firstLoctionStart, firstLoctionStart) }];\n\t\t}\n\n\t\titem.command = {\n\t\t\tcommand: 'vscode.open',\n\t\t\ttitle: vscode.l10n.t('Open Call'),\n\t\t\targuments: openArgs\n\t\t};\n\t\titem.collapsibleState = vscode.TreeItemCollapsibleState.Collapsed;\n\t\treturn item;\n\t}\n\n\tgetChildren(element?: CallItem | undefined) {\n\t\treturn element\n\t\t\t? this._model.getCallChildren(element)\n\t\t\t: this._model.roots;\n\t}\n\n\tgetParent(element: CallItem) {\n\t\treturn element.parent;\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as calls from './calls';\nimport * as references from './references';\nimport { SymbolTree, SymbolTreeInput } from './references-view';\nimport { SymbolsTree } from './tree';\nimport * as types from './types';\n\nexport function activate(context: vscode.ExtensionContext): SymbolTree {\n\n\tconst tree = new SymbolsTree();\n\n\treferences.register(tree, context);\n\tcalls.register(tree, context);\n\ttypes.register(tree, context);\n\n\tfunction setInput(input: SymbolTreeInput<unknown>) {\n\t\ttree.setInput(input);\n\t}\n\n\tfunction getInput(): SymbolTreeInput<unknown> | undefined {\n\t\treturn tree.getInput();\n\t}\n\n\treturn { setInput, getInput };\n}\n"
  },
  {
    "path": "extensions/references-view/src/highlights.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolItemEditorHighlights } from './references-view';\n\nexport class EditorHighlights<T> {\n\n\tprivate readonly _decorationType = vscode.window.createTextEditorDecorationType({\n\t\tbackgroundColor: new vscode.ThemeColor('editor.findMatchHighlightBackground'),\n\t\trangeBehavior: vscode.DecorationRangeBehavior.ClosedClosed,\n\t\toverviewRulerLane: vscode.OverviewRulerLane.Center,\n\t\toverviewRulerColor: new vscode.ThemeColor('editor.findMatchHighlightBackground'),\n\t});\n\n\tprivate readonly disposables: vscode.Disposable[] = [];\n\tprivate readonly _ignore = new Set<string>();\n\n\tconstructor(private readonly _view: vscode.TreeView<T>, private readonly _delegate: SymbolItemEditorHighlights<T>) {\n\t\tthis.disposables.push(\n\t\t\tvscode.workspace.onDidChangeTextDocument(e => this._ignore.add(e.document.uri.toString())),\n\t\t\tvscode.window.onDidChangeActiveTextEditor(() => _view.visible && this.update()),\n\t\t\t_view.onDidChangeVisibility(e => e.visible ? this._show() : this._hide()),\n\t\t\t_view.onDidChangeSelection(() => {\n\t\t\t\tif (_view.visible) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\tthis._show();\n\t}\n\n\tdispose() {\n\t\tvscode.Disposable.from(...this.disposables).dispose();\n\t\tfor (const editor of vscode.window.visibleTextEditors) {\n\t\t\teditor.setDecorations(this._decorationType, []);\n\t\t}\n\t}\n\n\tprivate _show(): void {\n\t\tconst { activeTextEditor: editor } = vscode.window;\n\t\tif (!editor || !editor.viewColumn) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._ignore.has(editor.document.uri.toString())) {\n\t\t\treturn;\n\t\t}\n\t\tconst [anchor] = this._view.selection;\n\t\tif (!anchor) {\n\t\t\treturn;\n\t\t}\n\t\tconst ranges = this._delegate.getEditorHighlights(anchor, editor.document.uri);\n\t\tif (ranges) {\n\t\t\teditor.setDecorations(this._decorationType, ranges);\n\t\t}\n\t}\n\n\tprivate _hide(): void {\n\t\tfor (const editor of vscode.window.visibleTextEditors) {\n\t\t\teditor.setDecorations(this._decorationType, []);\n\t\t}\n\t}\n\n\tupdate(): void {\n\t\tthis._hide();\n\t\tthis._show();\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/navigation.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolItemNavigation } from './references-view';\nimport { ContextKey } from './utils';\n\nexport class Navigation {\n\n\tprivate readonly _disposables: vscode.Disposable[] = [];\n\tprivate readonly _ctxCanNavigate = new ContextKey<boolean>('references-view.canNavigate');\n\n\tprivate _delegate?: SymbolItemNavigation<unknown>;\n\n\tconstructor(private readonly _view: vscode.TreeView<unknown>) {\n\t\tthis._disposables.push(\n\t\t\tvscode.commands.registerCommand('references-view.next', () => this.next(false)),\n\t\t\tvscode.commands.registerCommand('references-view.prev', () => this.previous(false)),\n\t\t);\n\t}\n\n\tdispose(): void {\n\t\tvscode.Disposable.from(...this._disposables).dispose();\n\t}\n\n\tupdate(delegate: SymbolItemNavigation<unknown> | undefined) {\n\t\tthis._delegate = delegate;\n\t\tthis._ctxCanNavigate.set(Boolean(this._delegate));\n\t}\n\n\tprivate _anchor(): undefined | unknown {\n\t\tif (!this._delegate) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst [sel] = this._view.selection;\n\t\tif (sel) {\n\t\t\treturn sel;\n\t\t}\n\t\tif (!vscode.window.activeTextEditor) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._delegate.nearest(vscode.window.activeTextEditor.document.uri, vscode.window.activeTextEditor.selection.active);\n\t}\n\n\tprivate _open(loc: vscode.Location, preserveFocus: boolean) {\n\t\tvscode.commands.executeCommand('vscode.open', loc.uri, {\n\t\t\tselection: new vscode.Selection(loc.range.start, loc.range.start),\n\t\t\tpreserveFocus\n\t\t});\n\t}\n\n\tprevious(preserveFocus: boolean): void {\n\t\tif (!this._delegate) {\n\t\t\treturn;\n\t\t}\n\t\tconst item = this._anchor();\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\t\tconst newItem = this._delegate.previous(item);\n\t\tconst newLocation = this._delegate.location(newItem);\n\t\tif (newLocation) {\n\t\t\tthis._view.reveal(newItem, { select: true, focus: true });\n\t\t\tthis._open(newLocation, preserveFocus);\n\t\t}\n\t}\n\n\tnext(preserveFocus: boolean): void {\n\t\tif (!this._delegate) {\n\t\t\treturn;\n\t\t}\n\t\tconst item = this._anchor();\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\t\tconst newItem = this._delegate.next(item);\n\t\tconst newLocation = this._delegate.location(newItem);\n\t\tif (newLocation) {\n\t\t\tthis._view.reveal(newItem, { select: true, focus: true });\n\t\t\tthis._open(newLocation, preserveFocus);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/references/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolsTree } from '../tree';\nimport { FileItem, ReferenceItem, ReferencesModel, ReferencesTreeInput } from './model';\n\nexport function register(tree: SymbolsTree, context: vscode.ExtensionContext): void {\n\n\tfunction findLocations(title: string, command: string) {\n\t\tif (vscode.window.activeTextEditor) {\n\t\t\tconst input = new ReferencesTreeInput(title, new vscode.Location(vscode.window.activeTextEditor.document.uri, vscode.window.activeTextEditor.selection.active), command);\n\t\t\ttree.setInput(input);\n\t\t}\n\t}\n\n\tcontext.subscriptions.push(\n\t\tvscode.commands.registerCommand('references-view.findReferences', () => findLocations('References', 'vscode.executeReferenceProvider')),\n\t\tvscode.commands.registerCommand('references-view.findImplementations', () => findLocations('Implementations', 'vscode.executeImplementationProvider')),\n\t\t// --- legacy name\n\t\tvscode.commands.registerCommand('references-view.find', (...args: any[]) => vscode.commands.executeCommand('references-view.findReferences', ...args)),\n\t\tvscode.commands.registerCommand('references-view.removeReferenceItem', removeReferenceItem),\n\t\tvscode.commands.registerCommand('references-view.copy', copyCommand),\n\t\tvscode.commands.registerCommand('references-view.copyAll', copyAllCommand),\n\t\tvscode.commands.registerCommand('references-view.copyPath', copyPathCommand),\n\t);\n\n\n\t// --- references.preferredLocation setting\n\n\tlet showReferencesDisposable: vscode.Disposable | undefined;\n\tconst config = 'references.preferredLocation';\n\tfunction updateShowReferences(event?: vscode.ConfigurationChangeEvent) {\n\t\tif (event && !event.affectsConfiguration(config)) {\n\t\t\treturn;\n\t\t}\n\t\tconst value = vscode.workspace.getConfiguration().get<string>(config);\n\n\t\tshowReferencesDisposable?.dispose();\n\t\tshowReferencesDisposable = undefined;\n\n\t\tif (value === 'view') {\n\t\t\tshowReferencesDisposable = vscode.commands.registerCommand('editor.action.showReferences', async (uri: vscode.Uri, position: vscode.Position, locations: vscode.Location[]) => {\n\t\t\t\tconst input = new ReferencesTreeInput(vscode.l10n.t('References'), new vscode.Location(uri, position), 'vscode.executeReferenceProvider', locations);\n\t\t\t\ttree.setInput(input);\n\t\t\t});\n\t\t}\n\t}\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration(updateShowReferences));\n\tcontext.subscriptions.push({ dispose: () => showReferencesDisposable?.dispose() });\n\tupdateShowReferences();\n}\n\nconst copyAllCommand = async (item: ReferenceItem | FileItem | unknown) => {\n\tif (item instanceof ReferenceItem) {\n\t\tcopyCommand(item.file.model);\n\t} else if (item instanceof FileItem) {\n\t\tcopyCommand(item.model);\n\t}\n};\n\nfunction removeReferenceItem(item: FileItem | ReferenceItem | unknown) {\n\tif (item instanceof FileItem) {\n\t\titem.remove();\n\t} else if (item instanceof ReferenceItem) {\n\t\titem.remove();\n\t}\n}\n\n\nasync function copyCommand(item: ReferencesModel | ReferenceItem | FileItem | unknown) {\n\tlet val: string | undefined;\n\tif (item instanceof ReferencesModel) {\n\t\tval = await item.asCopyText();\n\t} else if (item instanceof ReferenceItem) {\n\t\tval = await item.asCopyText();\n\t} else if (item instanceof FileItem) {\n\t\tval = await item.asCopyText();\n\t}\n\tif (val) {\n\t\tawait vscode.env.clipboard.writeText(val);\n\t}\n}\n\nasync function copyPathCommand(item: FileItem | unknown) {\n\tif (item instanceof FileItem) {\n\t\tif (item.uri.scheme === 'file') {\n\t\t\tvscode.env.clipboard.writeText(item.uri.fsPath);\n\t\t} else {\n\t\t\tvscode.env.clipboard.writeText(item.uri.toString(true));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/references/model.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolItemDragAndDrop, SymbolItemEditorHighlights, SymbolItemNavigation, SymbolTreeInput, SymbolTreeModel } from '../references-view';\nimport { asResourceUrl, del, getPreviewChunks, tail } from '../utils';\n\nexport class ReferencesTreeInput implements SymbolTreeInput<FileItem | ReferenceItem> {\n\n\treadonly contextValue: string;\n\n\tconstructor(\n\t\treadonly title: string,\n\t\treadonly location: vscode.Location,\n\t\tprivate readonly _command: string,\n\t\tprivate readonly _result?: vscode.Location[] | vscode.LocationLink[]\n\t) {\n\t\tthis.contextValue = _command;\n\t}\n\n\tasync resolve(): Promise<SymbolTreeModel<FileItem | ReferenceItem> | undefined> {\n\n\t\tlet model: ReferencesModel;\n\t\tif (this._result) {\n\t\t\tmodel = new ReferencesModel(this._result);\n\t\t} else {\n\t\t\tconst resut = await Promise.resolve(vscode.commands.executeCommand<vscode.Location[] | vscode.LocationLink[]>(this._command, this.location.uri, this.location.range.start));\n\t\t\tmodel = new ReferencesModel(resut ?? []);\n\t\t}\n\n\t\tif (model.items.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst provider = new ReferencesTreeDataProvider(model);\n\t\treturn {\n\t\t\tprovider,\n\t\t\tget message() { return model.message; },\n\t\t\tnavigation: model,\n\t\t\thighlights: model,\n\t\t\tdnd: model,\n\t\t\tdispose(): void {\n\t\t\t\tprovider.dispose();\n\t\t\t}\n\t\t};\n\t}\n\n\twith(location: vscode.Location): ReferencesTreeInput {\n\t\treturn new ReferencesTreeInput(this.title, location, this._command);\n\t}\n}\n\nexport class ReferencesModel implements SymbolItemNavigation<FileItem | ReferenceItem>, SymbolItemEditorHighlights<FileItem | ReferenceItem>, SymbolItemDragAndDrop<FileItem | ReferenceItem> {\n\n\tprivate _onDidChange = new vscode.EventEmitter<FileItem | ReferenceItem | undefined>();\n\treadonly onDidChangeTreeData = this._onDidChange.event;\n\n\treadonly items: FileItem[] = [];\n\n\tconstructor(locations: vscode.Location[] | vscode.LocationLink[]) {\n\t\tlet last: FileItem | undefined;\n\t\tfor (const item of locations.sort(ReferencesModel._compareLocations)) {\n\t\t\tconst loc = item instanceof vscode.Location\n\t\t\t\t? item\n\t\t\t\t: new vscode.Location(item.targetUri, item.targetRange);\n\n\t\t\tif (!last || ReferencesModel._compareUriIgnoreFragment(last.uri, loc.uri) !== 0) {\n\t\t\t\tlast = new FileItem(loc.uri.with({ fragment: '' }), [], this);\n\t\t\t\tthis.items.push(last);\n\t\t\t}\n\t\t\tlast.references.push(new ReferenceItem(loc, last));\n\t\t}\n\t}\n\n\tprivate static _compareUriIgnoreFragment(a: vscode.Uri, b: vscode.Uri): number {\n\t\tconst aStr = a.with({ fragment: '' }).toString();\n\t\tconst bStr = b.with({ fragment: '' }).toString();\n\t\tif (aStr < bStr) {\n\t\t\treturn -1;\n\t\t} else if (aStr > bStr) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tprivate static _compareLocations(a: vscode.Location | vscode.LocationLink, b: vscode.Location | vscode.LocationLink): number {\n\t\tconst aUri = a instanceof vscode.Location ? a.uri : a.targetUri;\n\t\tconst bUri = b instanceof vscode.Location ? b.uri : b.targetUri;\n\t\tif (aUri.toString() < bUri.toString()) {\n\t\t\treturn -1;\n\t\t} else if (aUri.toString() > bUri.toString()) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst aRange = a instanceof vscode.Location ? a.range : a.targetRange;\n\t\tconst bRange = b instanceof vscode.Location ? b.range : b.targetRange;\n\t\tif (aRange.start.isBefore(bRange.start)) {\n\t\t\treturn -1;\n\t\t} else if (aRange.start.isAfter(bRange.start)) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t// --- adapter\n\n\tget message() {\n\t\tif (this.items.length === 0) {\n\t\t\treturn vscode.l10n.t('No results.');\n\t\t}\n\t\tconst total = this.items.reduce((prev, cur) => prev + cur.references.length, 0);\n\t\tconst files = this.items.length;\n\t\tif (total === 1 && files === 1) {\n\t\t\treturn vscode.l10n.t('{0} result in {1} file', total, files);\n\t\t} else if (total === 1) {\n\t\t\treturn vscode.l10n.t('{0} result in {1} files', total, files);\n\t\t} else if (files === 1) {\n\t\t\treturn vscode.l10n.t('{0} results in {1} file', total, files);\n\t\t} else {\n\t\t\treturn vscode.l10n.t('{0} results in {1} files', total, files);\n\t\t}\n\t}\n\n\tlocation(item: FileItem | ReferenceItem) {\n\t\treturn item instanceof ReferenceItem\n\t\t\t? item.location\n\t\t\t: new vscode.Location(item.uri, item.references[0]?.location.range ?? new vscode.Position(0, 0));\n\t}\n\n\tnearest(uri: vscode.Uri, position: vscode.Position): FileItem | ReferenceItem | undefined {\n\n\t\tif (this.items.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// NOTE: this.items is sorted by location (uri/range)\n\t\tfor (const item of this.items) {\n\t\t\tif (item.uri.toString() === uri.toString()) {\n\t\t\t\t// (1) pick the item at the request position\n\t\t\t\tfor (const ref of item.references) {\n\t\t\t\t\tif (ref.location.range.contains(position)) {\n\t\t\t\t\t\treturn ref;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// (2) pick the first item after or last before the request position\n\t\t\t\tlet lastBefore: ReferenceItem | undefined;\n\t\t\t\tfor (const ref of item.references) {\n\t\t\t\t\tif (ref.location.range.end.isAfter(position)) {\n\t\t\t\t\t\treturn ref;\n\t\t\t\t\t}\n\t\t\t\t\tlastBefore = ref;\n\t\t\t\t}\n\t\t\t\tif (lastBefore) {\n\t\t\t\t\treturn lastBefore;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// (3) pick the file with the longest common prefix\n\t\tlet best = 0;\n\t\tconst bestValue = ReferencesModel._prefixLen(this.items[best].toString(), uri.toString());\n\n\t\tfor (let i = 1; i < this.items.length; i++) {\n\t\t\tconst value = ReferencesModel._prefixLen(this.items[i].uri.toString(), uri.toString());\n\t\t\tif (value > bestValue) {\n\t\t\t\tbest = i;\n\t\t\t}\n\t\t}\n\n\t\treturn this.items[best].references[0];\n\t}\n\n\tprivate static _prefixLen(a: string, b: string): number {\n\t\tlet pos = 0;\n\t\twhile (pos < a.length && pos < b.length && a.charCodeAt(pos) === b.charCodeAt(pos)) {\n\t\t\tpos += 1;\n\t\t}\n\t\treturn pos;\n\t}\n\n\tnext(item: FileItem | ReferenceItem): FileItem | ReferenceItem {\n\t\treturn this._move(item, true) ?? item;\n\t}\n\n\tprevious(item: FileItem | ReferenceItem): FileItem | ReferenceItem {\n\t\treturn this._move(item, false) ?? item;\n\t}\n\n\tprivate _move(item: FileItem | ReferenceItem, fwd: boolean): ReferenceItem | void {\n\n\t\tconst delta = fwd ? +1 : -1;\n\n\t\tconst _move = (item: FileItem): FileItem => {\n\t\t\tconst idx = (this.items.indexOf(item) + delta + this.items.length) % this.items.length;\n\t\t\treturn this.items[idx];\n\t\t};\n\n\t\tif (item instanceof FileItem) {\n\t\t\tif (fwd) {\n\t\t\t\treturn _move(item).references[0];\n\t\t\t} else {\n\t\t\t\treturn tail(_move(item).references);\n\t\t\t}\n\t\t}\n\n\t\tif (item instanceof ReferenceItem) {\n\t\t\tconst idx = item.file.references.indexOf(item) + delta;\n\t\t\tif (idx < 0) {\n\t\t\t\treturn tail(_move(item.file).references);\n\t\t\t} else if (idx >= item.file.references.length) {\n\t\t\t\treturn _move(item.file).references[0];\n\t\t\t} else {\n\t\t\t\treturn item.file.references[idx];\n\t\t\t}\n\t\t}\n\t}\n\n\tgetEditorHighlights(_item: FileItem | ReferenceItem, uri: vscode.Uri): vscode.Range[] | undefined {\n\t\tconst file = this.items.find(file => file.uri.toString() === uri.toString());\n\t\treturn file?.references.map(ref => ref.location.range);\n\t}\n\n\tremove(item: FileItem | ReferenceItem) {\n\t\tif (item instanceof FileItem) {\n\t\t\tdel(this.items, item);\n\t\t\tthis._onDidChange.fire(undefined);\n\t\t} else {\n\t\t\tdel(item.file.references, item);\n\t\t\tif (item.file.references.length === 0) {\n\t\t\t\tdel(this.items, item.file);\n\t\t\t\tthis._onDidChange.fire(undefined);\n\t\t\t} else {\n\t\t\t\tthis._onDidChange.fire(item.file);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync asCopyText() {\n\t\tlet result = '';\n\t\tfor (const item of this.items) {\n\t\t\tresult += `${await item.asCopyText()}\\n`;\n\t\t}\n\t\treturn result;\n\t}\n\n\tgetDragUri(item: FileItem | ReferenceItem): vscode.Uri | undefined {\n\t\tif (item instanceof FileItem) {\n\t\t\treturn item.uri;\n\t\t} else {\n\t\t\treturn asResourceUrl(item.file.uri, item.location.range);\n\t\t}\n\t}\n}\n\nclass ReferencesTreeDataProvider implements vscode.TreeDataProvider<FileItem | ReferenceItem> {\n\n\tprivate readonly _listener: vscode.Disposable;\n\tprivate readonly _onDidChange = new vscode.EventEmitter<FileItem | ReferenceItem | undefined>();\n\n\treadonly onDidChangeTreeData = this._onDidChange.event;\n\n\tconstructor(private readonly _model: ReferencesModel) {\n\t\tthis._listener = _model.onDidChangeTreeData(() => this._onDidChange.fire(undefined));\n\t}\n\n\tdispose(): void {\n\t\tthis._onDidChange.dispose();\n\t\tthis._listener.dispose();\n\t}\n\n\tasync getTreeItem(element: FileItem | ReferenceItem) {\n\t\tif (element instanceof FileItem) {\n\t\t\t// files\n\t\t\tconst result = new vscode.TreeItem(element.uri);\n\t\t\tresult.contextValue = 'file-item';\n\t\t\tresult.description = true;\n\t\t\tresult.iconPath = vscode.ThemeIcon.File;\n\t\t\tresult.collapsibleState = vscode.TreeItemCollapsibleState.Collapsed;\n\t\t\treturn result;\n\n\t\t} else {\n\t\t\t// references\n\t\t\tconst { range } = element.location;\n\t\t\tconst doc = await element.getDocument(true);\n\t\t\tconst { before, inside, after } = getPreviewChunks(doc, range);\n\n\t\t\tconst label: vscode.TreeItemLabel = {\n\t\t\t\tlabel: before + inside + after,\n\t\t\t\thighlights: [[before.length, before.length + inside.length]]\n\t\t\t};\n\n\t\t\tconst result = new vscode.TreeItem(label);\n\t\t\tresult.collapsibleState = vscode.TreeItemCollapsibleState.None;\n\t\t\tresult.contextValue = 'reference-item';\n\t\t\tresult.command = {\n\t\t\t\tcommand: 'vscode.open',\n\t\t\t\ttitle: vscode.l10n.t('Open Reference'),\n\t\t\t\targuments: [\n\t\t\t\t\telement.location.uri,\n\t\t\t\t\t{ selection: range.with({ end: range.start }) } satisfies vscode.TextDocumentShowOptions\n\t\t\t\t]\n\t\t\t};\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tasync getChildren(element?: FileItem | ReferenceItem) {\n\t\tif (!element) {\n\t\t\treturn this._model.items;\n\t\t}\n\t\tif (element instanceof FileItem) {\n\t\t\treturn element.references;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tgetParent(element: FileItem | ReferenceItem) {\n\t\treturn element instanceof ReferenceItem ? element.file : undefined;\n\t}\n}\n\nexport class FileItem {\n\n\tconstructor(\n\t\treadonly uri: vscode.Uri,\n\t\treadonly references: Array<ReferenceItem>,\n\t\treadonly model: ReferencesModel\n\t) { }\n\n\t// --- adapter\n\n\tremove(): void {\n\t\tthis.model.remove(this);\n\t}\n\n\tasync asCopyText() {\n\t\tlet result = `${vscode.workspace.asRelativePath(this.uri)}\\n`;\n\t\tfor (const ref of this.references) {\n\t\t\tresult += `  ${await ref.asCopyText()}\\n`;\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport class ReferenceItem {\n\n\tprivate _document: Thenable<vscode.TextDocument> | undefined;\n\n\tconstructor(\n\t\treadonly location: vscode.Location,\n\t\treadonly file: FileItem,\n\t) { }\n\n\tasync getDocument(warmUpNext?: boolean) {\n\t\tif (!this._document) {\n\t\t\tthis._document = vscode.workspace.openTextDocument(this.location.uri);\n\t\t}\n\t\tif (warmUpNext) {\n\t\t\t// load next document once this document has been loaded\n\t\t\tconst next = this.file.model.next(this.file);\n\t\t\tif (next instanceof FileItem && next !== this.file) {\n\t\t\t\tvscode.workspace.openTextDocument(next.uri);\n\t\t\t} else if (next instanceof ReferenceItem) {\n\t\t\t\tvscode.workspace.openTextDocument(next.location.uri);\n\t\t\t}\n\t\t}\n\t\treturn this._document;\n\t}\n\n\t// --- adapter\n\n\tremove(): void {\n\t\tthis.file.model.remove(this);\n\t}\n\n\tasync asCopyText() {\n\t\tconst doc = await this.getDocument();\n\t\tconst chunks = getPreviewChunks(doc, this.location.range, 21, false);\n\t\treturn `${this.location.range.start.line + 1}, ${this.location.range.start.character + 1}: ${chunks.before + chunks.inside + chunks.after}`;\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/references-view.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\n/**\n * This interface describes the shape for the references viewlet API. It includes\n * a single `setInput` function which must be called with a full implementation\n * of the `SymbolTreeInput`-interface. You can also use `getInput` function to\n * get the current `SymbolTreeInput`. To acquire this API use the default mechanics, e.g:\n *\n * ```ts\n * // get references viewlet API\n * const api = await vscode.extensions.getExtension<SymbolTree>('vscode.references-view').activate();\n *\n * // instantiate and set input which updates the view\n * const myInput: SymbolTreeInput<MyItems> = ...\n * api.setInput(myInput);\n * const currentInput = api.getInput();\n * ```\n */\nexport interface SymbolTree {\n\n\t/**\n\t * Set the contents of the references viewlet.\n\t *\n\t * @param input A symbol tree input object\n\t */\n\tsetInput(input: SymbolTreeInput<unknown>): void;\n\n\t/**\n\t * Get the contents of the references viewlet.\n\t *\n\t * @returns The current symbol tree input object\n\t */\n\tgetInput(): SymbolTreeInput<unknown> | undefined;\n}\n\n/**\n * A symbol tree input is the entry point for populating the references viewlet.\n * Inputs must be anchored at a code location, they must have a title, and they\n * must resolve to a model.\n */\nexport interface SymbolTreeInput<T> {\n\n\t/**\n\t * The value of the `reference-list.source` context key. Use this to control\n\t * input dependent commands.\n\t */\n\treadonly contextValue: string;\n\n\t/**\n\t * The (short) title of this input, like \"Implementations\" or \"Callers Of\"\n\t */\n\treadonly title: string;\n\n\t/**\n\t * The location at which this position is anchored. Locations are validated and inputs\n\t * with \"funny\" locations might be ignored\n\t */\n\treadonly location: vscode.Location;\n\n\t/**\n\t * Resolve this input to a model that contains the actual data. When there are no result\n\t * than `undefined` or `null` should be returned.\n\t */\n\tresolve(): vscode.ProviderResult<SymbolTreeModel<T>>;\n\n\t/**\n\t * This function is called when re-running from history. The symbols tree has tracked\n\t * the original location of this input and that is now passed to this input. The\n\t * implementation of this function should return a clone where the `location`-property\n\t * uses the provided `location`\n\t *\n\t * @param location The location at which the new input should be anchored.\n\t * @returns A new input which location is anchored at the position.\n\t */\n\twith(location: vscode.Location): SymbolTreeInput<T>;\n}\n\n/**\n * A symbol tree model which is used to populate the symbols tree.\n */\nexport interface SymbolTreeModel<T> {\n\n\t/**\n\t * A tree data provider which is used to populate the symbols tree.\n\t */\n\tprovider: vscode.TreeDataProvider<T>;\n\n\t/**\n\t * An optional message that is displayed above the tree. Whenever the provider\n\t * fires a change event this message is read again.\n\t */\n\tmessage: string | undefined;\n\n\t/**\n\t * Optional support for symbol navigation. When implemented, navigation commands like\n\t * \"Go to Next\" and \"Go to Previous\" will be working with this model.\n\t */\n\tnavigation?: SymbolItemNavigation<T>;\n\n\t/**\n\t * Optional support for editor highlights. WHen implemented, the editor will highlight\n\t * symbol ranges in the source code.\n\t */\n\thighlights?: SymbolItemEditorHighlights<T>;\n\n\t/**\n\t * Optional support for drag and drop.\n\t */\n\tdnd?: SymbolItemDragAndDrop<T>;\n\n\t/**\n\t * Optional dispose function which is invoked when this model is\n\t * needed anymore\n\t */\n\tdispose?(): void;\n}\n\n/**\n * Interface to support the built-in symbol navigation.\n */\nexport interface SymbolItemNavigation<T> {\n\t/**\n\t * Return the item that is the nearest to the given location or `undefined`\n\t */\n\tnearest(uri: vscode.Uri, position: vscode.Position): T | undefined;\n\t/**\n\t * Return the next item from the given item or the item itself.\n\t */\n\tnext(from: T): T;\n\t/**\n\t * Return the previous item from the given item or the item itself.\n\t */\n\tprevious(from: T): T;\n\t/**\n\t * Return the location of the given item.\n\t */\n\tlocation(item: T): vscode.Location | undefined;\n}\n\n/**\n * Interface to support the built-in editor highlights.\n */\nexport interface SymbolItemEditorHighlights<T> {\n\t/**\n\t * Given an item and an uri return an array of ranges to highlight.\n\t */\n\tgetEditorHighlights(item: T, uri: vscode.Uri): vscode.Range[] | undefined;\n}\n\nexport interface SymbolItemDragAndDrop<T> {\n\n\tgetDragUri(item: T): vscode.Uri | undefined;\n}\n"
  },
  {
    "path": "extensions/references-view/src/tree.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { EditorHighlights } from './highlights';\nimport { Navigation } from './navigation';\nimport { SymbolItemDragAndDrop, SymbolTreeInput } from './references-view';\nimport { ContextKey, isValidRequestPosition, WordAnchor } from './utils';\n\n\nexport class SymbolsTree {\n\n\treadonly viewId = 'references-view.tree';\n\n\tprivate readonly _ctxIsActive = new ContextKey<boolean>('reference-list.isActive');\n\tprivate readonly _ctxHasResult = new ContextKey<boolean>('reference-list.hasResult');\n\tprivate readonly _ctxInputSource = new ContextKey<string>('reference-list.source');\n\n\tprivate readonly _history = new TreeInputHistory(this);\n\tprivate readonly _provider = new TreeDataProviderDelegate();\n\tprivate readonly _dnd = new TreeDndDelegate();\n\tprivate readonly _tree: vscode.TreeView<unknown>;\n\tprivate readonly _navigation: Navigation;\n\n\tprivate _input?: SymbolTreeInput<unknown>;\n\tprivate _sessionDisposable?: vscode.Disposable;\n\n\tconstructor() {\n\t\tthis._tree = vscode.window.createTreeView<unknown>(this.viewId, {\n\t\t\ttreeDataProvider: this._provider,\n\t\t\tshowCollapseAll: true,\n\t\t\tdragAndDropController: this._dnd\n\t\t});\n\t\tthis._navigation = new Navigation(this._tree);\n\t}\n\n\tdispose(): void {\n\t\tthis._history.dispose();\n\t\tthis._tree.dispose();\n\t\tthis._sessionDisposable?.dispose();\n\t}\n\n\tgetInput(): SymbolTreeInput<unknown> | undefined {\n\t\treturn this._input;\n\t}\n\n\tasync setInput(input: SymbolTreeInput<unknown>) {\n\n\t\tif (!await isValidRequestPosition(input.location.uri, input.location.range.start)) {\n\t\t\tthis.clearInput();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._ctxInputSource.set(input.contextValue);\n\t\tthis._ctxIsActive.set(true);\n\t\tthis._ctxHasResult.set(true);\n\t\tvscode.commands.executeCommand(`${this.viewId}.focus`);\n\n\t\tconst newInputKind = !this._input || Object.getPrototypeOf(this._input) !== Object.getPrototypeOf(input);\n\t\tthis._input = input;\n\t\tthis._sessionDisposable?.dispose();\n\n\t\tthis._tree.title = input.title;\n\t\tthis._tree.message = newInputKind ? undefined : this._tree.message;\n\n\t\tconst modelPromise = Promise.resolve(input.resolve());\n\n\t\t// set promise to tree data provider to trigger tree loading UI\n\t\tthis._provider.update(modelPromise.then(model => model?.provider ?? this._history));\n\t\tthis._dnd.update(modelPromise.then(model => model?.dnd));\n\n\t\tconst model = await modelPromise;\n\t\tif (this._input !== input) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!model) {\n\t\t\tthis.clearInput();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._history.add(input);\n\t\tthis._tree.message = model.message;\n\n\t\t// navigation\n\t\tthis._navigation.update(model.navigation);\n\n\t\t// reveal & select\n\t\tconst selection = model.navigation?.nearest(input.location.uri, input.location.range.start);\n\t\tif (selection && this._tree.visible) {\n\t\t\tawait this._tree.reveal(selection, { select: true, focus: true, expand: true });\n\t\t}\n\n\t\tconst disposables: vscode.Disposable[] = [];\n\n\t\t// editor highlights\n\t\tlet highlights: EditorHighlights<unknown> | undefined;\n\t\tif (model.highlights) {\n\t\t\thighlights = new EditorHighlights(this._tree, model.highlights);\n\t\t\tdisposables.push(highlights);\n\t\t}\n\n\t\t// listener\n\t\tif (model.provider.onDidChangeTreeData) {\n\t\t\tdisposables.push(model.provider.onDidChangeTreeData(() => {\n\t\t\t\tthis._tree.title = input.title;\n\t\t\t\tthis._tree.message = model.message;\n\t\t\t\thighlights?.update();\n\t\t\t}));\n\t\t}\n\t\tif (typeof model.dispose === 'function') {\n\t\t\tdisposables.push(new vscode.Disposable(() => model.dispose!()));\n\t\t}\n\t\tthis._sessionDisposable = vscode.Disposable.from(...disposables);\n\t}\n\n\tclearInput(): void {\n\t\tthis._sessionDisposable?.dispose();\n\t\tthis._input = undefined;\n\t\tthis._ctxHasResult.set(false);\n\t\tthis._ctxInputSource.reset();\n\t\tthis._tree.title = vscode.l10n.t('References');\n\t\tthis._tree.message = this._history.size === 0\n\t\t\t? vscode.l10n.t('No results.')\n\t\t\t: vscode.l10n.t('No results. Try running a previous search again:');\n\t\tthis._provider.update(Promise.resolve(this._history));\n\t}\n}\n\n// --- tree data\n\ninterface ActiveTreeDataProviderWrapper {\n\tprovider: Promise<vscode.TreeDataProvider<any>>;\n}\n\nclass TreeDataProviderDelegate implements vscode.TreeDataProvider<undefined> {\n\n\tprovider?: Promise<vscode.TreeDataProvider<any>>;\n\n\tprivate _sessionDispoables?: vscode.Disposable;\n\tprivate _onDidChange = new vscode.EventEmitter<any>();\n\n\treadonly onDidChangeTreeData = this._onDidChange.event;\n\n\tupdate(provider: Promise<vscode.TreeDataProvider<any>>) {\n\n\t\tthis._sessionDispoables?.dispose();\n\t\tthis._sessionDispoables = undefined;\n\n\t\tthis._onDidChange.fire(undefined);\n\n\t\tthis.provider = provider;\n\n\t\tprovider.then(value => {\n\t\t\tif (this.provider === provider && value.onDidChangeTreeData) {\n\t\t\t\tthis._sessionDispoables = value.onDidChangeTreeData(this._onDidChange.fire, this._onDidChange);\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tthis.provider = undefined;\n\t\t\tconsole.error(err);\n\t\t});\n\t}\n\n\tasync getTreeItem(element: unknown) {\n\t\tthis._assertProvider();\n\t\treturn (await this.provider).getTreeItem(element);\n\t}\n\n\tasync getChildren(parent?: unknown | undefined) {\n\t\tthis._assertProvider();\n\t\treturn (await this.provider).getChildren(parent);\n\t}\n\n\tasync getParent(element: unknown) {\n\t\tthis._assertProvider();\n\t\tconst provider = await this.provider;\n\t\treturn provider.getParent ? provider.getParent(element) : undefined;\n\t}\n\n\tprivate _assertProvider(): asserts this is ActiveTreeDataProviderWrapper {\n\t\tif (!this.provider) {\n\t\t\tthrow new Error('MISSING provider');\n\t\t}\n\t}\n}\n\n// --- tree dnd\n\nclass TreeDndDelegate implements vscode.TreeDragAndDropController<undefined> {\n\n\tprivate _delegate: SymbolItemDragAndDrop<undefined> | undefined;\n\n\treadonly dropMimeTypes: string[] = [];\n\n\treadonly dragMimeTypes: string[] = ['text/uri-list'];\n\n\tupdate(delegate: Promise<SymbolItemDragAndDrop<unknown> | undefined>) {\n\t\tthis._delegate = undefined;\n\t\tdelegate.then(value => this._delegate = value);\n\t}\n\n\thandleDrag(source: undefined[], data: vscode.DataTransfer) {\n\t\tif (this._delegate) {\n\t\t\tconst urls: string[] = [];\n\t\t\tfor (const item of source) {\n\t\t\t\tconst uri = this._delegate.getDragUri(item);\n\t\t\t\tif (uri) {\n\t\t\t\t\turls.push(uri.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (urls.length > 0) {\n\t\t\t\tdata.set('text/uri-list', new vscode.DataTransferItem(urls.join('\\r\\n')));\n\t\t\t}\n\t\t}\n\t}\n\n\thandleDrop(): void | Thenable<void> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n}\n\n// --- history\n\nclass HistoryItem {\n\n\treadonly description: string;\n\n\tconstructor(\n\t\treadonly key: string,\n\t\treadonly word: string,\n\t\treadonly anchor: WordAnchor,\n\t\treadonly input: SymbolTreeInput<unknown>,\n\t) {\n\t\tthis.description = `${vscode.workspace.asRelativePath(input.location.uri)} • ${input.title.toLocaleLowerCase()}`;\n\t}\n}\n\nclass TreeInputHistory implements vscode.TreeDataProvider<HistoryItem> {\n\n\tprivate readonly _onDidChangeTreeData = new vscode.EventEmitter<HistoryItem | undefined>();\n\treadonly onDidChangeTreeData = this._onDidChangeTreeData.event;\n\n\tprivate readonly _disposables: vscode.Disposable[] = [];\n\tprivate readonly _ctxHasHistory = new ContextKey<boolean>('reference-list.hasHistory');\n\tprivate readonly _inputs = new Map<string, HistoryItem>();\n\n\tconstructor(private readonly _tree: SymbolsTree) {\n\n\t\tthis._disposables.push(\n\t\t\tvscode.commands.registerCommand('references-view.clear', () => _tree.clearInput()),\n\t\t\tvscode.commands.registerCommand('references-view.clearHistory', () => {\n\t\t\t\tthis.clear();\n\t\t\t\t_tree.clearInput();\n\t\t\t}),\n\t\t\tvscode.commands.registerCommand('references-view.refind', (item) => {\n\t\t\t\tif (item instanceof HistoryItem) {\n\t\t\t\t\tthis._reRunHistoryItem(item);\n\t\t\t\t}\n\t\t\t}),\n\t\t\tvscode.commands.registerCommand('references-view.refresh', () => {\n\t\t\t\tconst item = Array.from(this._inputs.values()).pop();\n\t\t\t\tif (item) {\n\t\t\t\t\tthis._reRunHistoryItem(item);\n\t\t\t\t}\n\t\t\t}),\n\t\t\tvscode.commands.registerCommand('_references-view.showHistoryItem', async (item) => {\n\t\t\t\tif (item instanceof HistoryItem) {\n\t\t\t\t\tconst position = item.anchor.guessedTrackedPosition() ?? item.input.location.range.start;\n\t\t\t\t\tawait vscode.commands.executeCommand('vscode.open', item.input.location.uri, { selection: new vscode.Range(position, position) });\n\t\t\t\t}\n\t\t\t}),\n\t\t\tvscode.commands.registerCommand('references-view.pickFromHistory', async () => {\n\t\t\t\tinterface HistoryPick extends vscode.QuickPickItem {\n\t\t\t\t\titem: HistoryItem;\n\t\t\t\t}\n\t\t\t\tconst entries = await this.getChildren();\n\t\t\t\tconst picks = entries.map((item): HistoryPick => ({\n\t\t\t\t\tlabel: item.word,\n\t\t\t\t\tdescription: item.description,\n\t\t\t\t\titem\n\t\t\t\t}));\n\t\t\t\tconst pick = await vscode.window.showQuickPick(picks, { placeHolder: vscode.l10n.t('Select previous reference search') });\n\t\t\t\tif (pick) {\n\t\t\t\t\tthis._reRunHistoryItem(pick.item);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n\n\tdispose(): void {\n\t\tvscode.Disposable.from(...this._disposables).dispose();\n\t\tthis._onDidChangeTreeData.dispose();\n\t}\n\n\tprivate _reRunHistoryItem(item: HistoryItem): void {\n\t\tthis._inputs.delete(item.key);\n\t\tconst newPosition = item.anchor.guessedTrackedPosition();\n\t\tlet newInput = item.input;\n\t\t// create a new input when having a tracked position which is\n\t\t// different than the original position.\n\t\tif (newPosition && !item.input.location.range.start.isEqual(newPosition)) {\n\t\t\tnewInput = item.input.with(new vscode.Location(item.input.location.uri, newPosition));\n\t\t}\n\t\tthis._tree.setInput(newInput);\n\t}\n\n\tasync add(input: SymbolTreeInput<unknown>) {\n\n\t\tconst doc = await vscode.workspace.openTextDocument(input.location.uri);\n\n\t\tconst anchor = new WordAnchor(doc, input.location.range.start);\n\t\tconst range = doc.getWordRangeAtPosition(input.location.range.start) ?? doc.getWordRangeAtPosition(input.location.range.start, /[^\\s]+/);\n\t\tconst word = range ? doc.getText(range) : '???';\n\n\t\tconst item = new HistoryItem(JSON.stringify([range?.start ?? input.location.range.start, input.location.uri, input.title]), word, anchor, input);\n\t\t// use filo-ordering of native maps\n\t\tthis._inputs.delete(item.key);\n\t\tthis._inputs.set(item.key, item);\n\t\tthis._ctxHasHistory.set(true);\n\t}\n\n\tclear(): void {\n\t\tthis._inputs.clear();\n\t\tthis._ctxHasHistory.set(false);\n\t\tthis._onDidChangeTreeData.fire(undefined);\n\t}\n\n\tget size() {\n\t\treturn this._inputs.size;\n\t}\n\n\t// --- tree data provider\n\n\tgetTreeItem(item: HistoryItem): vscode.TreeItem {\n\t\tconst result = new vscode.TreeItem(item.word);\n\t\tresult.description = item.description;\n\t\tresult.command = { command: '_references-view.showHistoryItem', arguments: [item], title: vscode.l10n.t('Rerun') };\n\t\tresult.collapsibleState = vscode.TreeItemCollapsibleState.None;\n\t\tresult.contextValue = 'history-item';\n\t\treturn result;\n\t}\n\n\tgetChildren() {\n\t\treturn Promise.all([...this._inputs.values()].reverse());\n\t}\n\n\tgetParent() {\n\t\treturn undefined;\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/types/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolsTree } from '../tree';\nimport { ContextKey } from '../utils';\nimport { TypeHierarchyDirection, TypeItem, TypesTreeInput } from './model';\n\nexport function register(tree: SymbolsTree, context: vscode.ExtensionContext): void {\n\n\tconst direction = new RichTypesDirection(context.workspaceState, TypeHierarchyDirection.Subtypes);\n\n\tfunction showTypeHierarchy() {\n\t\tif (vscode.window.activeTextEditor) {\n\t\t\tconst input = new TypesTreeInput(new vscode.Location(vscode.window.activeTextEditor.document.uri, vscode.window.activeTextEditor.selection.active), direction.value);\n\t\t\ttree.setInput(input);\n\t\t}\n\t}\n\n\tfunction setTypeHierarchyDirection(value: TypeHierarchyDirection, anchor: TypeItem | vscode.Location | unknown) {\n\t\tdirection.value = value;\n\n\t\tlet newInput: TypesTreeInput | undefined;\n\t\tconst oldInput = tree.getInput();\n\t\tif (anchor instanceof TypeItem) {\n\t\t\tnewInput = new TypesTreeInput(new vscode.Location(anchor.item.uri, anchor.item.selectionRange.start), direction.value);\n\t\t} else if (anchor instanceof vscode.Location) {\n\t\t\tnewInput = new TypesTreeInput(anchor, direction.value);\n\t\t} else if (oldInput instanceof TypesTreeInput) {\n\t\t\tnewInput = new TypesTreeInput(oldInput.location, direction.value);\n\t\t}\n\t\tif (newInput) {\n\t\t\ttree.setInput(newInput);\n\t\t}\n\t}\n\n\tcontext.subscriptions.push(\n\t\tvscode.commands.registerCommand('references-view.showTypeHierarchy', showTypeHierarchy),\n\t\tvscode.commands.registerCommand('references-view.showSupertypes', (item: TypeItem | vscode.Location | unknown) => setTypeHierarchyDirection(TypeHierarchyDirection.Supertypes, item)),\n\t\tvscode.commands.registerCommand('references-view.showSubtypes', (item: TypeItem | vscode.Location | unknown) => setTypeHierarchyDirection(TypeHierarchyDirection.Subtypes, item)),\n\t\tvscode.commands.registerCommand('references-view.removeTypeItem', removeTypeItem)\n\t);\n}\n\nfunction removeTypeItem(item: TypeItem | unknown): void {\n\tif (item instanceof TypeItem) {\n\t\titem.remove();\n\t}\n}\n\nclass RichTypesDirection {\n\n\tprivate static _key = 'references-view.typeHierarchyMode';\n\n\tprivate _ctxMode = new ContextKey<TypeHierarchyDirection>('references-view.typeHierarchyMode');\n\n\tconstructor(\n\t\tprivate _mem: vscode.Memento,\n\t\tprivate _value: TypeHierarchyDirection = TypeHierarchyDirection.Subtypes,\n\t) {\n\t\tconst raw = _mem.get<TypeHierarchyDirection>(RichTypesDirection._key);\n\t\tif (typeof raw === 'string') {\n\t\t\tthis.value = raw;\n\t\t} else {\n\t\t\tthis.value = _value;\n\t\t}\n\t}\n\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\tset value(value: TypeHierarchyDirection) {\n\t\tthis._value = value;\n\t\tthis._ctxMode.set(value);\n\t\tthis._mem.update(RichTypesDirection._key, value);\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/types/model.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SymbolItemDragAndDrop, SymbolItemEditorHighlights, SymbolItemNavigation, SymbolTreeInput } from '../references-view';\nimport { asResourceUrl, del, getThemeIcon, tail } from '../utils';\n\nexport class TypesTreeInput implements SymbolTreeInput<TypeItem> {\n\n\treadonly title: string;\n\treadonly contextValue: string = 'typeHierarchy';\n\n\tconstructor(\n\t\treadonly location: vscode.Location,\n\t\treadonly direction: TypeHierarchyDirection,\n\t) {\n\t\tthis.title = direction === TypeHierarchyDirection.Supertypes\n\t\t\t? vscode.l10n.t('Supertypes Of')\n\t\t\t: vscode.l10n.t('Subtypes Of');\n\t}\n\n\tasync resolve() {\n\n\t\tconst items = await Promise.resolve(vscode.commands.executeCommand<vscode.TypeHierarchyItem[]>('vscode.prepareTypeHierarchy', this.location.uri, this.location.range.start));\n\t\tconst model = new TypesModel(this.direction, items ?? []);\n\t\tconst provider = new TypeItemDataProvider(model);\n\n\t\tif (model.roots.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn {\n\t\t\tprovider,\n\t\t\tget message() { return model.roots.length === 0 ? vscode.l10n.t('No results.') : undefined; },\n\t\t\tnavigation: model,\n\t\t\thighlights: model,\n\t\t\tdnd: model,\n\t\t\tdispose() {\n\t\t\t\tprovider.dispose();\n\t\t\t}\n\t\t};\n\t}\n\n\twith(location: vscode.Location): TypesTreeInput {\n\t\treturn new TypesTreeInput(location, this.direction);\n\t}\n}\n\n\nexport const enum TypeHierarchyDirection {\n\tSubtypes = 'subtypes',\n\tSupertypes = 'supertypes'\n}\n\n\nexport class TypeItem {\n\n\tchildren?: TypeItem[];\n\n\tconstructor(\n\t\treadonly model: TypesModel,\n\t\treadonly item: vscode.TypeHierarchyItem,\n\t\treadonly parent: TypeItem | undefined,\n\t) { }\n\n\tremove(): void {\n\t\tthis.model.remove(this);\n\t}\n}\n\nclass TypesModel implements SymbolItemNavigation<TypeItem>, SymbolItemEditorHighlights<TypeItem>, SymbolItemDragAndDrop<TypeItem> {\n\n\treadonly roots: TypeItem[] = [];\n\n\tprivate readonly _onDidChange = new vscode.EventEmitter<TypesModel>();\n\treadonly onDidChange = this._onDidChange.event;\n\n\tconstructor(readonly direction: TypeHierarchyDirection, items: vscode.TypeHierarchyItem[]) {\n\t\tthis.roots = items.map(item => new TypeItem(this, item, undefined));\n\t}\n\n\tprivate async _resolveTypes(currentType: TypeItem): Promise<TypeItem[]> {\n\t\tif (this.direction === TypeHierarchyDirection.Supertypes) {\n\t\t\tconst types = await vscode.commands.executeCommand<vscode.TypeHierarchyItem[]>('vscode.provideSupertypes', currentType.item);\n\t\t\treturn types ? types.map(item => new TypeItem(this, item, currentType)) : [];\n\t\t} else {\n\t\t\tconst types = await vscode.commands.executeCommand<vscode.TypeHierarchyItem[]>('vscode.provideSubtypes', currentType.item);\n\t\t\treturn types ? types.map(item => new TypeItem(this, item, currentType)) : [];\n\t\t}\n\t}\n\n\tasync getTypeChildren(item: TypeItem): Promise<TypeItem[]> {\n\t\tif (!item.children) {\n\t\t\titem.children = await this._resolveTypes(item);\n\t\t}\n\t\treturn item.children;\n\t}\n\n\t// -- dnd\n\n\tgetDragUri(item: TypeItem): vscode.Uri | undefined {\n\t\treturn asResourceUrl(item.item.uri, item.item.range);\n\t}\n\n\t// -- navigation\n\n\tlocation(currentType: TypeItem) {\n\t\treturn new vscode.Location(currentType.item.uri, currentType.item.range);\n\t}\n\n\tnearest(uri: vscode.Uri, _position: vscode.Position): TypeItem | undefined {\n\t\treturn this.roots.find(item => item.item.uri.toString() === uri.toString()) ?? this.roots[0];\n\t}\n\n\tnext(from: TypeItem): TypeItem {\n\t\treturn this._move(from, true) ?? from;\n\t}\n\n\tprevious(from: TypeItem): TypeItem {\n\t\treturn this._move(from, false) ?? from;\n\t}\n\n\tprivate _move(item: TypeItem, fwd: boolean): TypeItem | void {\n\t\tif (item.children?.length) {\n\t\t\treturn fwd ? item.children[0] : tail(item.children);\n\t\t}\n\t\tconst array = this.roots.includes(item) ? this.roots : item.parent?.children;\n\t\tif (array?.length) {\n\t\t\tconst idx = array.indexOf(item);\n\t\t\tconst delta = fwd ? 1 : -1;\n\t\t\treturn array[idx + delta + array.length % array.length];\n\t\t}\n\t}\n\n\t// --- highlights\n\n\tgetEditorHighlights(currentType: TypeItem, uri: vscode.Uri): vscode.Range[] | undefined {\n\t\treturn currentType.item.uri.toString() === uri.toString() ? [currentType.item.selectionRange] : undefined;\n\t}\n\n\tremove(item: TypeItem) {\n\t\tconst isInRoot = this.roots.includes(item);\n\t\tconst siblings = isInRoot ? this.roots : item.parent?.children;\n\t\tif (siblings) {\n\t\t\tdel(siblings, item);\n\t\t\tthis._onDidChange.fire(this);\n\t\t}\n\t}\n}\n\nclass TypeItemDataProvider implements vscode.TreeDataProvider<TypeItem> {\n\n\tprivate readonly _emitter = new vscode.EventEmitter<TypeItem | undefined>();\n\treadonly onDidChangeTreeData = this._emitter.event;\n\n\tprivate readonly _modelListener: vscode.Disposable;\n\n\tconstructor(private _model: TypesModel) {\n\t\tthis._modelListener = _model.onDidChange(e => this._emitter.fire(e instanceof TypeItem ? e : undefined));\n\t}\n\n\tdispose(): void {\n\t\tthis._emitter.dispose();\n\t\tthis._modelListener.dispose();\n\t}\n\n\tgetTreeItem(element: TypeItem): vscode.TreeItem {\n\n\t\tconst item = new vscode.TreeItem(element.item.name);\n\t\titem.description = element.item.detail;\n\t\titem.contextValue = 'type-item';\n\t\titem.iconPath = getThemeIcon(element.item.kind);\n\t\titem.command = {\n\t\t\tcommand: 'vscode.open',\n\t\t\ttitle: vscode.l10n.t('Open Type'),\n\t\t\targuments: [\n\t\t\t\telement.item.uri,\n\t\t\t\t{ selection: element.item.selectionRange.with({ end: element.item.selectionRange.start }) } satisfies vscode.TextDocumentShowOptions\n\t\t\t]\n\t\t};\n\t\titem.collapsibleState = vscode.TreeItemCollapsibleState.Collapsed;\n\t\treturn item;\n\t}\n\n\tgetChildren(element?: TypeItem | undefined) {\n\t\treturn element\n\t\t\t? this._model.getTypeChildren(element)\n\t\t\t: this._model.roots;\n\t}\n\n\tgetParent(element: TypeItem) {\n\t\treturn element.parent;\n\t}\n}\n"
  },
  {
    "path": "extensions/references-view/src/utils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport function del<T>(array: T[], e: T): void {\n\tconst idx = array.indexOf(e);\n\tif (idx >= 0) {\n\t\tarray.splice(idx, 1);\n\t}\n}\n\nexport function tail<T>(array: T[]): T | undefined {\n\treturn array[array.length - 1];\n}\n\nexport function asResourceUrl(uri: vscode.Uri, range: vscode.Range): vscode.Uri {\n\treturn uri.with({ fragment: `L${1 + range.start.line},${1 + range.start.character}-${1 + range.end.line},${1 + range.end.character}` });\n}\n\nexport async function isValidRequestPosition(uri: vscode.Uri, position: vscode.Position) {\n\tconst doc = await vscode.workspace.openTextDocument(uri);\n\tlet range = doc.getWordRangeAtPosition(position);\n\tif (!range) {\n\t\trange = doc.getWordRangeAtPosition(position, /[^\\s]+/);\n\t}\n\treturn Boolean(range);\n}\n\nexport function getPreviewChunks(doc: vscode.TextDocument, range: vscode.Range, beforeLen: number = 8, trim: boolean = true) {\n\tconst previewStart = range.start.with({ character: Math.max(0, range.start.character - beforeLen) });\n\tconst wordRange = doc.getWordRangeAtPosition(previewStart);\n\tlet before = doc.getText(new vscode.Range(wordRange ? wordRange.start : previewStart, range.start));\n\tconst inside = doc.getText(range);\n\tconst previewEnd = range.end.translate(0, 331);\n\tlet after = doc.getText(new vscode.Range(range.end, previewEnd));\n\tif (trim) {\n\t\tbefore = before.replace(/^\\s*/g, '');\n\t\tafter = after.replace(/\\s*$/g, '');\n\t}\n\treturn { before, inside, after };\n}\n\nexport class ContextKey<V> {\n\n\tconstructor(readonly name: string) { }\n\n\tasync set(value: V) {\n\t\tawait vscode.commands.executeCommand('setContext', this.name, value);\n\t}\n\n\tasync reset() {\n\t\tawait vscode.commands.executeCommand('setContext', this.name, undefined);\n\t}\n}\n\nexport class WordAnchor {\n\n\tprivate readonly _version: number;\n\tprivate readonly _word: string | undefined;\n\n\tconstructor(private readonly _doc: vscode.TextDocument, private readonly _position: vscode.Position) {\n\t\tthis._version = _doc.version;\n\t\tthis._word = this._getAnchorWord(_doc, _position);\n\t}\n\n\tprivate _getAnchorWord(doc: vscode.TextDocument, pos: vscode.Position): string | undefined {\n\t\tconst range = doc.getWordRangeAtPosition(pos) || doc.getWordRangeAtPosition(pos, /[^\\s]+/);\n\t\treturn range && doc.getText(range);\n\t}\n\n\tguessedTrackedPosition(): vscode.Position | undefined {\n\t\t// funky entry\n\t\tif (!this._word) {\n\t\t\treturn this._position;\n\t\t}\n\n\t\t// no changes\n\t\tif (this._version === this._doc.version) {\n\t\t\treturn this._position;\n\t\t}\n\n\t\t// no changes here...\n\t\tconst wordNow = this._getAnchorWord(this._doc, this._position);\n\t\tif (this._word === wordNow) {\n\t\t\treturn this._position;\n\t\t}\n\n\t\t// changes: search _word downwards and upwards\n\t\tconst startLine = this._position.line;\n\t\tlet i = 0;\n\t\tlet line: number;\n\t\tlet checked: boolean;\n\t\tdo {\n\t\t\tchecked = false;\n\t\t\t// nth line down\n\t\t\tline = startLine + i;\n\t\t\tif (line < this._doc.lineCount) {\n\t\t\t\tchecked = true;\n\t\t\t\tconst ch = this._doc.lineAt(line).text.indexOf(this._word);\n\t\t\t\tif (ch >= 0) {\n\t\t\t\t\treturn new vscode.Position(line, ch);\n\t\t\t\t}\n\t\t\t}\n\t\t\ti += 1;\n\t\t\t// nth line up\n\t\t\tline = startLine - i;\n\t\t\tif (line >= 0) {\n\t\t\t\tchecked = true;\n\t\t\t\tconst ch = this._doc.lineAt(line).text.indexOf(this._word);\n\t\t\t\tif (ch >= 0) {\n\t\t\t\t\treturn new vscode.Position(line, ch);\n\t\t\t\t}\n\t\t\t}\n\t\t} while (i < 100 && checked);\n\n\t\t// fallback\n\t\treturn this._position;\n\t}\n}\n\n// vscode.SymbolKind.File === 0, Module === 1, etc...\nconst _themeIconIds = [\n\t'symbol-file', 'symbol-module', 'symbol-namespace', 'symbol-package', 'symbol-class', 'symbol-method',\n\t'symbol-property', 'symbol-field', 'symbol-constructor', 'symbol-enum', 'symbol-interface',\n\t'symbol-function', 'symbol-variable', 'symbol-constant', 'symbol-string', 'symbol-number', 'symbol-boolean',\n\t'symbol-array', 'symbol-object', 'symbol-key', 'symbol-null', 'symbol-enum-member', 'symbol-struct',\n\t'symbol-event', 'symbol-operator', 'symbol-type-parameter'\n];\n\nexport function getThemeIcon(kind: vscode.SymbolKind): vscode.ThemeIcon | undefined {\n\tconst id = _themeIconIds[kind];\n\treturn id ? new vscode.ThemeIcon(id) : undefined;\n}\n"
  },
  {
    "path": "extensions/references-view/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/restructuredtext/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/restructuredtext/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"trond-snekvik/vscode-rst\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/trond-snekvik/vscode-rst\",\n\t\t\t\t\t\"commitHash\": \"7f2d6bb4e20642b60f2979afcb594cfe4b48117a\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.5.3\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/restructuredtext/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"..\"\n\t},\n\t\"brackets\": [\n\t\t[\"(\", \")\"],\n\t\t[\"<\", \">\"],\n\t\t[\"[\", \"]\"]\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"(\", \")\"],\n\t\t[\"<\", \">\"],\n\t\t[\"`\", \"`\"],\n\t\t[\"*\", \"*\"],\n\t\t[\"|\", \"|\"],\n\t\t[\"[\", \"]\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"(\", \"close\": \")\" },\n\t\t{ \"open\": \"<\", \"close\": \">\" },\n\t\t{ \"open\": \"'\", \"close\": \"'\"},\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\"]},\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\"},\n\t\t{ \"open\": \"[\", \"close\": \"]\"}\n\t],\n\t\"autoCloseBefore\": \":})>`\\\\n \",\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t\"beforeText\": \"^\\\\s*\\\\.\\\\. *$|(?<!:)::(\\\\s|$)\",\n\t\t\t\"action\": { \"indent\": \"indent\" }\n\t\t}\n\t],\n\t\"wordPattern\": \"[\\\\w-]*\\\\w[\\\\w-]*\"\n}\n"
  },
  {
    "path": "extensions/restructuredtext/package.json",
    "content": "{\n\t\"name\": \"restructuredtext\",\n\t\"displayName\": \"%displayName%\",\n\t\"description\": \"%description%\",\n\t\"version\": \"1.0.0\",\n\t\"publisher\": \"vscode\",\n\t\"license\": \"MIT\",\n\t\"engines\": {\n\t\t\"vscode\": \"*\"\n\t},\n\t\"scripts\": {\n\t\t\"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin trond-snekvik/vscode-rst syntaxes/rst.tmLanguage.json ./syntaxes/rst.tmLanguage.json\"\n\t},\n\t\"categories\": [\"Programming Languages\"],\n\t\"contributes\": {\n\t\t\"languages\": [\n\t\t\t{\n\t\t\t\t\"id\": \"restructuredtext\",\n\t\t\t\t\"aliases\": [\n\t\t\t\t\t\"reStructuredText\"\n\t\t\t\t],\n\t\t\t\t\"configuration\": \"./language-configuration.json\",\n\t\t\t\t\"extensions\": [\n\t\t\t\t\t\".rst\"\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\t\"grammars\": [\n\t\t\t{\n\t\t\t\t\"language\": \"restructuredtext\",\n\t\t\t\t\"scopeName\": \"source.rst\",\n\t\t\t\t\"path\": \"./syntaxes/rst.tmLanguage.json\"\n\t\t\t}\n\t\t]\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/microsoft/vscode.git\"\n\t}\n}\n"
  },
  {
    "path": "extensions/restructuredtext/package.nls.json",
    "content": "{\n\t\"displayName\": \"reStructuredText Language Basics\",\n\t\"description\": \"Provides syntax highlighting in reStructuredText files.\"\n}\n"
  },
  {
    "path": "extensions/restructuredtext/syntaxes/rst.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/trond-snekvik/vscode-rst/blob/master/syntaxes/rst.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/trond-snekvik/vscode-rst/commit/7f2d6bb4e20642b60f2979afcb594cfe4b48117a\",\n\t\"scopeName\": \"source.rst\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#body\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#title\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline-markup\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#anchor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#replace-include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#footnote\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#substitution\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#blocks\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#table\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple-table\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#options-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"title\": {\n\t\t\t\"match\": \"^(\\\\*{3,}|#{3,}|\\\\={3,}|~{3,}|\\\\+{3,}|-{3,}|`{3,}|\\\\^{3,}|:{3,}|\\\"{3,}|_{3,}|'{3,})$\",\n\t\t\t\"name\": \"markup.heading\"\n\t\t},\n\t\t\"inline-markup\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ignore\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ref\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#monospaced\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#citation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#bold\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#italic\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#list\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#macro\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#reference\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#footnote-ref\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ignore\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"'[`*]+'\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<[`*]+>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"{[`*]+}\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\([`*]+\\\\)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\[[`*]+\\\\]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\"[`*]+\\\"\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"table\": {\n\t\t\t\"begin\": \"^\\\\s*\\\\+[=+-]+\\\\+\\\\s*$\",\n\t\t\t\"end\": \"^(?![+|])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.table\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[=+|-]\",\n\t\t\t\t\t\"name\": \"keyword.control.table\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"simple-table\": {\n\t\t\t\"match\": \"^[=\\\\s]+$\",\n\t\t\t\"name\": \"keyword.control.table\"\n\t\t},\n\t\t\"ref\": {\n\t\t\t\"begin\": \"(:ref:)`\",\n\t\t\t\"end\": \"`|^\\\\s*$\",\n\t\t\t\"name\": \"entity.name.tag\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"<.*?>\",\n\t\t\t\t\t\"name\": \"markup.underline.link\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"reference\": {\n\t\t\t\"match\": \"[\\\\w-]*[a-zA-Z\\\\d-]__?\\\\b\",\n\t\t\t\"name\": \"entity.name.tag\"\n\t\t},\n\t\t\"macro\": {\n\t\t\t\"match\": \"\\\\|[^\\\\|]+\\\\|\",\n\t\t\t\"name\": \"entity.name.tag\"\n\t\t},\n\t\t\"literal\": {\n\t\t\t\"match\": \"(:\\\\S+:)(`.*?`\\\\\\\\?)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"monospaced\": {\n\t\t\t\"begin\": \"(?<=[\\\\s\\\"'(\\\\[{<]|^)``[^\\\\s`]\",\n\t\t\t\"end\": \"``|^\\\\s*$\",\n\t\t\t\"name\": \"string.interpolated\"\n\t\t},\n\t\t\"citation\": {\n\t\t\t\"begin\": \"(?<=[\\\\s\\\"'(\\\\[{<]|^)`[^\\\\s`]\",\n\t\t\t\"end\": \"`_{,2}|^\\\\s*$\",\n\t\t\t\"name\": \"entity.name.tag\",\n\t\t\t\"applyEndPatternLast\": 0\n\t\t},\n\t\t\"bold\": {\n\t\t\t\"begin\": \"(?<=[\\\\s\\\"'(\\\\[{<]|^)\\\\*{2}[^\\\\s*]\",\n\t\t\t\"end\": \"\\\\*{2}|^\\\\s*$\",\n\t\t\t\"name\": \"markup.bold\"\n\t\t},\n\t\t\"italic\": {\n\t\t\t\"begin\": \"(?<=[\\\\s\\\"'(\\\\[{<]|^)\\\\*[^\\\\s*]\",\n\t\t\t\"end\": \"\\\\*|^\\\\s*$\",\n\t\t\t\"name\": \"markup.italic\"\n\t\t},\n\t\t\"escaped\": {\n\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\"name\": \"constant.character.escape\"\n\t\t},\n\t\t\"list\": {\n\t\t\t\"match\": \"^\\\\s*(\\\\d+\\\\.|\\\\* -|[a-zA-Z#]\\\\.|[iIvVxXmMcC]+\\\\.|\\\\(\\\\d+\\\\)|\\\\d+\\\\)|[*+-])\\\\s+\",\n\t\t\t\"name\": \"keyword.control\"\n\t\t},\n\t\t\"line-block\": {\n\t\t\t\"match\": \"^\\\\|\\\\s+\",\n\t\t\t\"name\": \"keyword.control\"\n\t\t},\n\t\t\"raw-html\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+raw\\\\s*::)\\\\s+(html)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.html\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"text.html.derivative\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"anchor\": {\n\t\t\t\"match\": \"^\\\\.{2}\\\\s+(_[^:]+:)\\\\s*\",\n\t\t\t\"name\": \"entity.name.tag.anchor\"\n\t\t},\n\t\t\"replace-include\": {\n\t\t\t\"match\": \"^\\\\s*(\\\\.{2})\\\\s+(\\\\|[^\\\\|]+\\\\|)\\\\s+(replace::)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"footnote\": {\n\t\t\t\"match\": \"^\\\\s*\\\\.{2}\\\\s+\\\\[(?:[\\\\w\\\\.-]+|[#*]|#\\\\w+)\\\\]\\\\s+\",\n\t\t\t\"name\": \"entity.name.tag\"\n\t\t},\n\t\t\"footnote-ref\": {\n\t\t\t\"match\": \"\\\\[(?:[\\\\w\\\\.-]+|[#*])\\\\]_\",\n\t\t\t\"name\": \"entity.name.tag\"\n\t\t},\n\t\t\"substitution\": {\n\t\t\t\"match\": \"^\\\\.{2}\\\\s*\\\\|([^|]+)\\\\|\",\n\t\t\t\"name\": \"entity.name.tag\"\n\t\t},\n\t\t\"options-list\": {\n\t\t\t\"match\": \"(?:(?:^|,\\\\s+)(?:[-+]\\\\w|--?[a-zA-Z][\\\\w-]+|/\\\\w+)(?:[ =](?:\\\\w+|<[^<>]+?>))?)+(?=  |\\\\t|$)\",\n\t\t\t\"name\": \"variable.parameter\"\n\t\t},\n\t\t\"blocks\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#domains\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#doctest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-py\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-console\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-javascript\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-yaml\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-cmake\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-kconfig\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block-dts\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#doctest-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#raw-html\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block-comment\": {\n\t\t\t\"begin\": \"^(\\\\s*)\\\\.{2}(\\\\s+|$)\",\n\t\t\t\"end\": \"^(?=\\\\S)|^\\\\s*$\",\n\t\t\t\"name\": \"comment.block\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s{3,}(?=\\\\S)\",\n\t\t\t\t\t\"while\": \"^\\\\s{3}.*|^\\\\s*$\",\n\t\t\t\t\t\"name\": \"comment.block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literal-block\": {\n\t\t\t\"begin\": \"^(\\\\s*)(.*)(::)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#inline-markup\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"block\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+\\\\S+::)(.*)\",\n\t\t\t\"end\": \"^(?!\\\\1\\\\s|\\\\s*$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block-param\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(:param\\\\s+(.+?):)(?:\\\\s|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(:.+?:)(?:$|\\\\s+(.*))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(0x[a-fA-F\\\\d]+|\\\\d+)\\\\b\",\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#inline-markup\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"domains\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#domain-cpp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#domain-py\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#domain-auto\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#domain-js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"domain-cpp\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(?:cpp|c):(?:class|struct|function|member|var|type|enum|enum-struct|enum-class|enumerator|union|concept)::)\\\\s*(?:(@\\\\w+)|(.*))\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.tag\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"domain-py\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+py:(?:module|function|data|exception|class|attribute|property|method|staticmethod|classmethod|decorator|decoratormethod)::)\\\\s*(.*)\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"domain-auto\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+auto(?:class|module|exception|function|decorator|data|method|attribute|property)::)\\\\s*(.*)\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.py\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"domain-js\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+js:\\\\w+::)\\\\s*(.*)\",\n\t\t\t\"end\": \"^(?!\\\\1[ \\\\t]|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"doctest\": {\n\t\t\t\"begin\": \"^(>>>)\\\\s*(.*)\",\n\t\t\t\"end\": \"^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"code-block-cpp\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(c|c\\\\+\\\\+|cpp|C|C\\\\+\\\\+|CPP|Cpp)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.cpp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cpp\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-console\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(console|shell|bash)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.console\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-py\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(python)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.py\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-javascript\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(javascript)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.js\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-yaml\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(ya?ml)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.yaml\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-cmake\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(cmake)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.cmake\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.cmake\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-kconfig\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*([kK]config)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.kconfig\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.kconfig\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-ruby\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(ruby)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.ruby\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block-dts\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\\\\s*(dts|DTS|devicetree)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.parameter.codeblock.dts\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.dts\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+(code|code-block)::)\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"doctest-block\": {\n\t\t\t\"begin\": \"^(\\\\s*)(\\\\.{2}\\\\s+doctest::)\\\\s*$\",\n\t\t\t\"while\": \"^\\\\1(?=\\\\s)|^\\\\s*$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-param\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.python\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/ruby/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/ruby/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Shopify/ruby-lsp\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Shopify/ruby-lsp\",\n\t\t\t\t\t\"commitHash\": \"958bb1aa0c7aa4b6119c947b69afa7f12b19dceb\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"The MIT License (MIT)\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2022-present, Shopify Inc.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in\",\n\t\t\t\t\"all copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\",\n\t\t\t\t\"THE SOFTWARE.\",\n\t\t\t\t\"\",\n\t\t\t\t\"================================================================================\",\n\t\t\t\t\"The following files and related configuration in package.json are based on a\",\n\t\t\t\t\"sequence of adaptions: grammars/ruby.cson.json, grammars/erb.cson.json,\",\n\t\t\t\t\"languages/erb.json.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2016 Peng Lv\",\n\t\t\t\t\"Copyright (c) 2017-2019 Stafford Brunk\",\n\t\t\t\t\"https://github.com/rubyide/vscode-ruby\",\n\t\t\t\t\"\",\n\t\t\t\t\"    Released under the MIT license\",\n\t\t\t\t\"    https://github.com/rubyide/vscode-ruby/blob/main/LICENSE.txt\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2014 GitHub Inc.\",\n\t\t\t\t\"https://github.com/atom/language-ruby\",\n\t\t\t\t\"\",\n\t\t\t\t\"    Released under the MIT license\",\n\t\t\t\t\"    https://github.com/atom/language-ruby/blob/master/LICENSE.md\",\n\t\t\t\t\"\",\n\t\t\t\t\"https://github.com/textmate/ruby.tmbundle\",\n\t\t\t\t\"    https://github.com/textmate/ruby.tmbundle#license\"\n\t\t\t],\n\t\t\t\"license\": \"MIT License\",\n\t\t\t\"version\": \"0.0.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/ruby/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\",\n\t\t\"blockComment\": [ \"=begin\", \"=end\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"`\", \"`\"]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"^\\\\s*((begin|class|(private|protected)\\\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|in|while|case)|([^#]*\\\\sdo\\\\b)|([^#]*=\\\\s*(case|if|unless)))\\\\b([^#\\\\{;]|(\\\"|'|\\/).*\\\\4)*(#.*)?$\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*([}\\\\]]([,)]?\\\\s*(#|$)|\\\\.[a-zA-Z_]\\\\w*\\\\b)|(end|rescue|ensure|else|elsif)\\\\b|(in|when)\\\\s)\"\n\t}\n}\n"
  },
  {
    "path": "extensions/ruby/package.json",
    "content": "{\n  \"name\": \"ruby\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin Shopify/ruby-lsp vscode/grammars/ruby.cson.json ./syntaxes/ruby.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"ruby\",\n        \"extensions\": [\n          \".rb\",\n          \".rbx\",\n          \".rjs\",\n          \".gemspec\",\n          \".rake\",\n          \".ru\",\n          \".erb\",\n          \".podspec\",\n          \".rbi\"\n        ],\n        \"filenames\": [\n          \"rakefile\",\n          \"gemfile\",\n          \"guardfile\",\n          \"podfile\",\n          \"capfile\",\n          \"cheffile\",\n          \"hobofile\",\n          \"vagrantfile\",\n          \"appraisals\",\n          \"rantfile\",\n          \"berksfile\",\n          \"berksfile.lock\",\n          \"thorfile\",\n          \"puppetfile\",\n          \"dangerfile\",\n          \"brewfile\",\n          \"fastfile\",\n          \"appfile\",\n          \"deliverfile\",\n          \"matchfile\",\n          \"scanfile\",\n          \"snapfile\",\n          \"gymfile\"\n        ],\n        \"aliases\": [\n          \"Ruby\",\n          \"rb\"\n        ],\n        \"firstLine\": \"^#!\\\\s*/.*\\\\bruby\\\\b\",\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"ruby\",\n        \"scopeName\": \"source.ruby\",\n        \"path\": \"./syntaxes/ruby.tmLanguage.json\"\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[ruby]\": {\n        \"editor.defaultColorDecorators\": \"never\"\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/ruby/package.nls.json",
    "content": "{\n\t\"displayName\": \"Ruby Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Ruby files.\"\n}\n"
  },
  {
    "path": "extensions/ruby/syntaxes/ruby.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/Shopify/ruby-lsp/blob/master/vscode/grammars/ruby.cson.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/Shopify/ruby-lsp/commit/958bb1aa0c7aa4b6119c947b69afa7f12b19dceb\",\n\t\"name\": \"Ruby\",\n\t\"scopeName\": \"source.ruby\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.class.ruby\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.class.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.ruby\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.ruby\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"class Namespace::ClassName < OtherNamespace::OtherClassName\",\n\t\t\t\"match\": \"\\\\b(class)\\\\s+(([a-zA-Z0-9_]+)((::)[a-zA-Z0-9_]+)*)\\\\s*((<)\\\\s*(([a-zA-Z0-9_]+)((::)[a-zA-Z0-9_]+)*))?\",\n\t\t\t\"name\": \"meta.class.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.module.ruby\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.module.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b(module)\\\\s+(([a-zA-Z0-9_]+)((::)[a-zA-Z0-9_]+)*)\",\n\t\t\t\"name\": \"meta.module.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.class.ruby\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.inheritance.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"\\\\b(class)\\\\s*(<<)\\\\s*\",\n\t\t\t\"name\": \"meta.class.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"else if is a common mistake carried over from other languages. it works if you put in a second end, but it’s never what you want.\",\n\t\t\t\"match\": \"(?<!\\\\.)\\\\belse(\\\\s)+if\\\\b\",\n\t\t\t\"name\": \"invalid.deprecated.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.ruby\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.augmented.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*([a-z]([A-Za-z0-9_])*)\\\\s*((&&|\\\\|\\\\|)=)\",\n\t\t\t\"comment\": \"A local variable and/or assignment\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.ruby\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.augmented.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(case|if|elsif|unless|until|while)\\\\b\\\\s*(\\\\()*?\\\\s*([a-z]([A-Za-z0-9_])*)\\\\s*((&&|\\\\|\\\\|)=)\",\n\t\t\t\"comment\": \"A local variable and/or assignment in a condition\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.ruby\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.augmented.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*([a-z]([A-Za-z0-9_])*)\\\\s*((\\\\+|\\\\*|-|\\\\/|%|\\\\*\\\\*|&|\\\\||\\\\^|<<|>>)=)\",\n\t\t\t\"comment\": \"A local variable operation assignment (+=, -=, *=, /=)\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.ruby\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.augmented.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(case|if|elsif|unless|until|while)\\\\b\\\\s*(\\\\()*?\\\\s*([a-z]([A-Za-z0-9_])*)\\\\s*((\\\\+|\\\\*|-|\\\\/|%|\\\\*\\\\*|&|\\\\||\\\\^|<<|>>)=)\",\n\t\t\t\"comment\": \"A local variable operation assignment in a condition\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*([a-z]([A-Za-z0-9_])*)\\\\s*(?==[^=>])\",\n\t\t\t\"comment\": \"A local variable assignment\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.ruby\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(case|if|elsif|unless|until|while)\\\\b\\\\s*(\\\\()*?\\\\s*([a-z]([A-Za-z0-9_])*)\\\\s*=[^=>]\",\n\t\t\t\"comment\": \"A local variable assignment in a condition\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.hashkey.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"symbols as hash key (1.9 syntax)\",\n\t\t\t\"match\": \"(?>[a-zA-Z_]\\\\w*(?>[?!])?)(:)(?!:)\",\n\t\t\t\"name\": \"constant.language.symbol.hashkey.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"symbols as hash key (1.8 syntax)\",\n\t\t\t\"match\": \"(?<!:)(:)(?>[a-zA-Z_]\\\\w*(?>[?!])?)(?=\\\\s*=>)\",\n\t\t\t\"name\": \"constant.language.symbol.hashkey.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"everything being a reserved word, not a value and needing a 'end' is a..\",\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(BEGIN|begin|case|class|else|elsif|END|end|ensure|for|if|in|module|rescue|then|unless|until|when|while)\\\\b(?![?!])\",\n\t\t\t\"name\": \"keyword.control.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"contextual smart pair support for block parameters\",\n\t\t\t\"match\": \"(?<!\\\\.)\\\\bdo\\\\b\",\n\t\t\t\"name\": \"keyword.control.start-block.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"contextual smart pair support\",\n\t\t\t\"match\": \"(?<={)(\\\\s+)\",\n\t\t\t\"name\": \"meta.syntax.ruby.start-block\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(alias|alias_method|break|next|redo|retry|return|super|undef|yield)\\\\b(?![?!])|\\\\bdefined\\\\?|\\\\b(block_given|iterator)\\\\?\",\n\t\t\t\"name\": \"keyword.control.pseudo-method.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bnil\\\\b(?![?!])\",\n\t\t\t\"name\": \"constant.language.nil.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(true|false)\\\\b(?![?!])\",\n\t\t\t\"name\": \"constant.language.boolean.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(__(FILE|LINE)__)\\\\b(?![?!])\",\n\t\t\t\"name\": \"variable.language.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\bself\\\\b(?![?!])\",\n\t\t\t\"name\": \"variable.language.self.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \" everything being a method but having a special function is a..\",\n\t\t\t\"match\": \"\\\\b(initialize|new|loop|include|extend|prepend|raise|fail|attr_reader|attr_writer|attr_accessor|attr|catch|throw|private|private_class_method|module_function|public|public_class_method|protected|refine|using)\\\\b(?![?!])\",\n\t\t\t\"name\": \"keyword.other.special-method.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(?<!\\\\.|::)(require|require_relative)\\\\b(?![?!])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.special-method.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"$|(?=#|})\",\n\t\t\t\"name\": \"meta.require.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@)[a-zA-Z_]\\\\w*\",\n\t\t\t\"name\": \"variable.other.readwrite.instance.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(@@)[a-zA-Z_]\\\\w*\",\n\t\t\t\"name\": \"variable.other.readwrite.class.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\$)[a-zA-Z_]\\\\w*\",\n\t\t\t\"name\": \"variable.other.readwrite.global.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.variable.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\$)(!|@|&|`|'|\\\\+|\\\\d+|~|=|/|\\\\\\\\|,|;|\\\\.|<|>|_|\\\\*|\\\\$|\\\\?|:|\\\"|-[0adFiIlpv])\",\n\t\t\t\"name\": \"variable.other.readwrite.global.pre-defined.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\\b(ENV)\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.constant.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"name\": \"meta.environment-variable.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b[A-Z]\\\\w*(?=((\\\\.|::)[A-Za-z]|\\\\[))\",\n\t\t\t\"name\": \"support.class.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b((abort|at_exit|autoload|binding|callcc|caller|caller_locations|chomp|chop|eval|exec|exit|fork|format|gets|global_variables|gsub|lambda|load|local_variables|open|p|print|printf|proc|putc|puts|rand|readline|readlines|select|set_trace_func|sleep|spawn|sprintf|srand|sub|syscall|system|test|trace_var|trap|untrace_var|warn)\\\\b(?![?!])|autoload\\\\?|exit!)\",\n\t\t\t\"name\": \"support.function.kernel.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b[_A-Z]\\\\w*\\\\b\",\n\t\t\t\"name\": \"variable.other.constant.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(->)\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.kernel.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"Lambda parameters.\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[&*_a-zA-Z])\",\n\t\t\t\t\t\"end\": \"(?=[,)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n(?=def\\\\b)                          # optimization to help Oniguruma fail fast\\n(?<=^|\\\\s)(def)\\\\s+\\n(\\n  (?>[a-zA-Z_]\\\\w*(?>\\\\.|::))?      # method prefix\\n  (?>                               # method name\\n    [a-zA-Z_]\\\\w*(?>[?!]|=(?!>))?\\n    |\\n    ===?|!=|>[>=]?|<=>|<[<=]?|[%&`/\\\\|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?\\n  )\\n)\\n\\\\s*(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.def.ruby\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.ruby\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"The method pattern comes from the symbol pattern. See there for an explanation.\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function.method.with-arguments.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[&*_a-zA-Z])\",\n\t\t\t\t\t\"end\": \"(?=[,)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n(?=def\\\\b)                          # optimization to help Oniguruma fail fast\\n(?<=^|\\\\s)(def)\\\\s+\\n(\\n  (?>[a-zA-Z_]\\\\w*(?>\\\\.|::))?      # method prefix\\n  (?>                               # method name\\n    [a-zA-Z_]\\\\w*(?>[?!]|=(?!>))?\\n    |\\n    ===?|!=|>[>=]?|<=>|<[<=]?|[%&`/\\\\|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?\\n  )\\n)\\n[ \\\\t]\\n(?=[ \\\\t]*[^\\\\s#;])                 # make sure the following is not comment\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.def.ruby\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"same as the previous rule, but without parentheses around the arguments\",\n\t\t\t\"end\": \"(?=;)|(?<=[\\\\w\\\\])}`'\\\"!?])(?=\\\\s*#|\\\\s*$)\",\n\t\t\t\"name\": \"meta.function.method.with-arguments.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=[&*_a-zA-Z])\",\n\t\t\t\t\t\"end\": \"(?=,|;|\\\\s*#|\\\\s*$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method_parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method_parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.def.ruby\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.function.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \" the optional name is just to catch the def also without a method-name\",\n\t\t\t\"match\": \"(?x)\\n(?=def\\\\b)                            # optimization to help Oniguruma fail fast\\n(?<=^|\\\\s)(def)\\\\b\\n(\\n  \\\\s+\\n  (\\n    (?>[a-zA-Z_]\\\\w*(?>\\\\.|::))?      # method prefix\\n    (?>                               # method name\\n      [a-zA-Z_]\\\\w*(?>[?!]|=(?!>))?\\n      |\\n      ===?|!=|>[>=]?|<=>|<[<=]?|[%&`/\\\\|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?\\n    )\\n  )\\n)?\",\n\t\t\t\"name\": \"meta.function.method.without-arguments.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?x)\\n\\\\b\\n(\\n  [\\\\d](?>_?\\\\d)*                             # 100_000\\n  (\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?   # fractional part\\n  ([eE][-+]?\\\\d(?>_?\\\\d)*)?                   # 1.23e-4\\n  |\\n  0\\n  (?:\\n    [xX]\\\\h(?>_?\\\\h)*|\\n    [oO]?[0-7](?>_?[0-7])*|\\n    [bB][01](?>_?[01])*|\\n    [dD]\\\\d(?>_?\\\\d)*\\n  )                                           # A base indicator can only be used with an integer\\n)\\\\b\",\n\t\t\t\"name\": \"constant.numeric.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \":'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"symbol literal with '' delimiter\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\['\\\\\\\\]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \":\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.symbol.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"symbol literal with \\\"\\\" delimiter\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.symbol.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Needs higher precedence than regular expressions.\",\n\t\t\t\"match\": \"(?<!\\\\()/=\",\n\t\t\t\"name\": \"keyword.operator.assignment.augmented.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"string literal with '' delimiter\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\'|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"string literal with interpolation and \\\"\\\" delimiter\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<!\\\\.)`\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"execute string (allows for interpolation)\",\n\t\t\t\"end\": \"`\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n(?<![\\\\w)])((/))(?![?*+])\\n(?=\\n  (?:\\\\\\\\/|[^/])*+          # Do NOT change the order\\n  /[eimnosux]*\\\\s*\\n  (?:\\n    [)\\\\]}#.,?:]|\\\\|\\\\||&&|<=>|=>|==|=~|!~|!=|;|$|\\n    if|else|elsif|then|do|end|unless|while|until|or|and\\n  )\\n  |\\n  $\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.regexp.interpolated.ruby\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"regular expression literal with interpolation\",\n\t\t\t\"contentName\": \"string.regexp.interpolated.ruby\",\n\t\t\t\"end\": \"((/[eimnosux]*))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%r{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}[eimnosux]*\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%r\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"][eimnosux]*\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%r\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)[eimnosux]*\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%r<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">[eimnosux]*\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%r([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1[eimnosux]*\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.regexp.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.regexp.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%I\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%I\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%I<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%I{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%I([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%i\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\]|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%i\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\)|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%i<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\>|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%i{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\}|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%i([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Cant be named because its not necessarily an escape.\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%W\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%W\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%W<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%W{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%W([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%w\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\]|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%w\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\)|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%w<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\>|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%w{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\}|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%w([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Cant be named because its not necessarily an escape.\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%[Qx]?\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%[Qx]?\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%[Qx]?{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%[Qx]?<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%[Qx]([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%([^\\\\w\\\\s=])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.interpolated.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%q\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\)|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%q<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\>|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%q\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\]|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%q{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\}|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%q([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.other.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Cant be named because its not necessarily an escape.\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%s\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\\\\\)|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%s<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\>|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%s\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\]|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%s{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\}|\\\\\\\\\\\\\\\\\",\n\t\t\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"%s([^\\\\w])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\1\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.symbol.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"constant.language.symbol.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Cant be named because its not necessarily an escape.\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.constant.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"symbols\",\n\t\t\t\"match\": \"(?x)\\n(?<!:)(:)\\n(?>\\n  [$a-zA-Z_]\\\\w*(?>[?!]|=(?![>=]))?\\n  |\\n  ===?|<=>|>[>=]?|<[<=]?|[%&`/\\\\|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?\\n  |\\n  @@?[a-zA-Z_]\\\\w*\\n)\",\n\t\t\t\"name\": \"constant.language.symbol.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^=begin\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"multiline comments\",\n\t\t\t\"end\": \"^=end\",\n\t\t\t\"name\": \"comment.block.documentation.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#yard\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=#)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\"name\": \"comment.line.number-sign.ruby\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2nd alternation = octal):\\n\\t\\t\\t?\\\\0      ?\\\\07     ?\\\\017\\n\\n\\t\\t\\texamples (3rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (4th alternation = meta-ctrl):\\n\\t\\t\\t?\\\\C-a    ?\\\\M-a    ?\\\\C-\\\\M-\\\\C-\\\\M-a\\n\\n\\t\\t\\texamples (4th alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\\\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t\",\n\t\t\t\"match\": \"(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|0[0-7]{0,2}(?![0-7])\\\\b|[^x0MC])|(\\\\\\\\[MC]-)+\\\\w|[^\\\\s\\\\\\\\])\",\n\t\t\t\"name\": \"constant.numeric.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"^__END__\\\\n\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"string.unquoted.program-block.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"__END__ marker\",\n\t\t\t\"contentName\": \"text.plain\",\n\t\t\t\"end\": \"(?=not)impossible\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=<?xml|<(?i:html\\\\b)|!DOCTYPE (?i:html\\\\b))\",\n\t\t\t\t\t\"end\": \"(?=not)impossible\",\n\t\t\t\t\t\"name\": \"text.html.embedded.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)HTML)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded HTML\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.html\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)HTML)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.html\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.html.basic\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)HAML)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded HAML\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.haml\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)HAML)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.haml\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.haml\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)XML)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded XML\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.xml\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)XML)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.xml\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.xml\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)SQL)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded SQL\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.sql\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)SQL)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.sql\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.sql\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:GRAPHQL|GQL))\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded GraphQL\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.graphql\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:GRAPHQL|GQL))\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.graphql\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.graphql\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)CSS)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded CSS\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.css\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)CSS)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.css\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)CPP)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded C++\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.cpp\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)CPP)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.cpp\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.cpp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)C)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded C\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.c\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)C)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.c\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.c\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:JS|JAVASCRIPT))\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded Javascript\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.js\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:JS|JAVASCRIPT))\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.js\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)JQUERY)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded jQuery Javascript\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.js.jquery\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)JQUERY)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.js.jquery\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.js.jquery\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:SH|SHELL))\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded Shell\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:SH|SHELL))\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.shell\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)LUA)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded Lua\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.lua\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)LUA)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.lua\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.lua\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)RUBY)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded Ruby\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)RUBY)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.ruby\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:YAML|YML))\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded YAML\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.yaml\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)(?:YAML|YML))\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.yaml\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.yaml\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?=(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)SLIM)\\\\b\\\\1))\",\n\t\t\t\"comment\": \"Heredoc with embedded Slim\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"name\": \"meta.embedded.block.slim\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?><<[-~]([\\\"'`]?)((?:[_\\\\w]+_|)SLIM)\\\\b\\\\1)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"text.slim\",\n\t\t\t\t\t\"end\": \"^\\\\s*\\\\2$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"text.slim\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?>=\\\\s*<<([\\\"'`]?)(\\\\w+)\\\\1)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^\\\\2$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?>((<<[-~]([\\\"'`]?)(\\\\w+)\\\\3,\\\\s?)*<<[-~]([\\\"'`]?)(\\\\w+)\\\\5))(.*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"heredoc with multiple inputs and indented terminator\",\n\t\t\t\"end\": \"^\\\\s*\\\\6$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.unquoted.heredoc.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?<={|{\\\\s+|[^A-Za-z0-9_:@$]do|^do|[^A-Za-z0-9_:@$]do\\\\s+|^do\\\\s+)(\\\\|)\",\n\t\t\t\"name\": \"meta.block.parameters.ruby\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.variable.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!\\\\|)(\\\\|)(?!\\\\|)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?![\\\\s,|(])\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\|\\\\s*)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G((?:&|\\\\*\\\\*?)?)([a-zA-Z_][\\\\w_]*)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.variable.ruby\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.block.ruby\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.variable.ruby\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"=>\",\n\t\t\t\"name\": \"punctuation.separator.key-value\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"->\",\n\t\t\t\"name\": \"support.function.kernel.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"<<=|%=|&{1,2}=|\\\\*=|\\\\*\\\\*=|\\\\+=|-=|\\\\^=|\\\\|{1,2}=|<<\",\n\t\t\t\"name\": \"keyword.operator.assignment.augmented.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"<=>|<(?!<|=)|>(?!<|=|>)|<=|>=|===|==|=~|!=|!~|(?<=[ \\\\t])\\\\?\",\n\t\t\t\"name\": \"keyword.operator.comparison.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!\\\\.)\\\\b(and|not|or)\\\\b(?![?!])\",\n\t\t\t\"name\": \"keyword.operator.logical.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<=^|[ \\\\t!])!|&&|\\\\|\\\\||\\\\^\",\n\t\t\t\"name\": \"keyword.operator.logical.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Safe navigation operator\",\n\t\t\t\"match\": \"(&\\\\.)\\\\s*(?![A-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.logical.ruby\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(%|&|\\\\*\\\\*|\\\\*|\\\\+|-|/)\",\n\t\t\t\"name\": \"keyword.operator.arithmetic.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"=\",\n\t\t\t\"name\": \"keyword.operator.assignment.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\||~|>>\",\n\t\t\t\"name\": \"keyword.operator.other.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.separator.statement.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \",\",\n\t\t\t\"name\": \"punctuation.separator.object.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Mark as namespace separator if double colons followed by capital letter\",\n\t\t\t\"match\": \"(::)\\\\s*(?=[A-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.ruby\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Mark as method separator if double colons not followed by capital letter\",\n\t\t\t\"match\": \"(\\\\.|::)\\\\s*(?![A-Z])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.method.ruby\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Must come after method and constant separators to prefer double colons\",\n\t\t\t\"match\": \":\",\n\t\t\t\"name\": \"punctuation.separator.other.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"{\",\n\t\t\t\"name\": \"punctuation.section.scope.begin.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"}\",\n\t\t\t\"name\": \"punctuation.section.scope.end.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\[\",\n\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"]\",\n\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\(|\\\\)\",\n\t\t\t\"name\": \"punctuation.section.function.ruby\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.function-call.ruby\",\n\t\t\t\"begin\": \"(?<=[^\\\\.]\\\\.|::)(?=[a-zA-Z][a-zA-Z0-9_!?]*[^a-zA-Z0-9_!?])\",\n\t\t\t\"end\": \"(?<=[a-zA-Z0-9_!?])(?=[^a-zA-Z0-9_!?])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.function.ruby\",\n\t\t\t\t\t\"match\": \"([a-zA-Z][a-zA-Z0-9_!?]*)(?=[^a-zA-Z0-9_!?])\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"([a-zA-Z]\\\\w*[!?]?)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.ruby\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.function-call.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"method_parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#braces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#params\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"repository\": {\n\t\t\t\t\"params\": {\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.variable.ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.symbol.hashkey.parameter.function.ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.constant.ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\G(&|\\\\*\\\\*?)?(?:([_a-zA-Z]\\\\w*[?!]?(:))|([_a-zA-Z]\\\\w*))\"\n\t\t\t\t},\n\t\t\t\t\"braces\": {\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.scope.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"brackets\": {\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.array.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.array.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"parens\": {\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parens\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#braces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"escaped_char\": {\n\t\t\t\"match\": \"\\\\\\\\(?:[0-7]{1,3}|x[\\\\da-fA-F]{1,2}|.)\",\n\t\t\t\"name\": \"constant.character.escape.ruby\"\n\t\t},\n\t\t\"heredoc\": {\n\t\t\t\"begin\": \"^<<[-~]?\\\\w+\",\n\t\t\t\"end\": \"$\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolated_ruby\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"#{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"source.ruby\",\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.embedded.line.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nest_curly_and_self\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(#@)[a-zA-Z_]\\\\w*\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.instance.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(#@@)[a-zA-Z_]\\\\w*\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.class.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(#\\\\$)[a-zA-Z_]\\\\w*\",\n\t\t\t\t\t\"name\": \"variable.other.readwrite.global.ruby\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_brackets\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_brackets_i\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_brackets_r\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"]\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_brackets_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_curly\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_curly_and_self\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#nest_curly_and_self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_curly_i\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_curly_r\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_curly_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_ltgt\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_ltgt_i\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_ltgt_r\": {\n\t\t\t\"begin\": \"<\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_ltgt_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_parens\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_parens_i\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens_i\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"nest_parens_r\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#nest_parens_r\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regex_sub\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolated_ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.ruby\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arbitrary-repetition.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"({)\\\\d+(,\\\\d+)?(})\",\n\t\t\t\t\t\"name\": \"string.regexp.arbitrary-repetition.ruby\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[(?:\\\\^?])?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"]\",\n\t\t\t\t\t\"name\": \"string.regexp.character-class.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\\\\?#\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escaped_char\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"string.regexp.group.ruby\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex_sub\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|\\\\s)(#)\\\\s(?=[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.\",\n\t\t\t\t\t\"end\": \"$\\\\n?\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"comment.line.number-sign.ruby\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_param_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_option\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_directive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_see\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_macro_attribute\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_see\": {\n\t\t\t\"comment\": \"separate rule for @see because name could contain url\",\n\t\t\t\"begin\": \"^(\\\\s*)(#)(\\\\s*)(@)(see)(?=\\\\s)(\\\\s+(.+?))?(?=\\\\s|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.line.parameter.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)\",\n\t\t\t\"contentName\": \"comment.line.string.yard.ruby\",\n\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_macro_attribute\": {\n\t\t\t\"comment\": \"separate rule for attribute and macro tags because name goes after []\",\n\t\t\t\"begin\": \"^(\\\\s*)(#)(\\\\s*)(@!)(attribute|macro)(\\\\s+((\\\\[).+(])))?(?=\\\\s)(\\\\s+([a-z_]\\\\w*:?))?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.line.type.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.line.parameter.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)\",\n\t\t\t\"contentName\": \"comment.line.string.yard.ruby\",\n\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_comment\": {\n\t\t\t\"comment\": \"For YARD tags that follow the tag-comment pattern\",\n\t\t\t\"begin\": \"^(\\\\s*)(#)(\\\\s*)(@)(abstract|api|author|deprecated|example|macro|note|overload|since|todo|version)(?=\\\\s|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)\",\n\t\t\t\"contentName\": \"comment.line.string.yard.ruby\",\n\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_param_types\": {\n\t\t\t\"comment\": \"For YARD tags that follow the tag-name-types-description or tag-types-name-description pattern\",\n\t\t\t\"begin\": \"^(\\\\s*)(#)(\\\\s*)(@)(attr|attr_reader|attr_writer|yieldparam|param)(?=\\\\s)(?>\\\\s+(?>([a-z_]\\\\w*:?)|((\\\\[).+(]))))?(?>\\\\s+(?>((\\\\[).+(]))|([a-z_]\\\\w*:?)))?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.line.parameter.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.line.type.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.line.type.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.line.parameter.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)\",\n\t\t\t\"contentName\": \"comment.line.string.yard.ruby\",\n\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_option\": {\n\t\t\t\"comment\": \"For YARD option tag that follow the tag-name-types-key-(value)-description pattern\",\n\t\t\t\"begin\": \"^(\\\\s*)(#)(\\\\s*)(@)(option)(?=\\\\s)(?>\\\\s+([a-z_]\\\\w*:?))?(?>\\\\s+((\\\\[).+(])))?(?>\\\\s+((\\\\S*)))?(?>\\\\s+((\\\\().+(\\\\))))?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"comment.line.parameter.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.line.type.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"comment.line.hashkey.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"comment.line.defaultvalue.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)\",\n\t\t\t\"contentName\": \"comment.line.string.yard.ruby\",\n\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_tag\": {\n\t\t\t\"comment\": \"For YARD tags that are just the tag\",\n\t\t\t\"match\": \"^(\\\\s*)(#)(\\\\s*)(@)(private)$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.line.number-sign.ruby\"\n\t\t},\n\t\t\"yard_types\": {\n\t\t\t\"comment\": \"For YARD tags that follow the tag-types-comment pattern\",\n\t\t\t\"begin\": \"^(\\\\s*)(#)(\\\\s*)(@)(raise|return|yield(?:return)?)(?=\\\\s)(\\\\s+((\\\\[).+(])))?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.line.type.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)\",\n\t\t\t\"contentName\": \"comment.line.string.yard.ruby\",\n\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_directive\": {\n\t\t\t\"comment\": \"For YARD directives\",\n\t\t\t\"begin\": \"^(\\\\s*)(#)(\\\\s*)(@!)(endgroup|group|method|parse|scope|visibility)(\\\\s+((\\\\[).+(])))?(?=\\\\s)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"comment.line.keyword.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"comment.line.type.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"comment.line.punctuation.yard.ruby\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)\",\n\t\t\t\"contentName\": \"comment.line.string.yard.ruby\",\n\t\t\t\"name\": \"comment.line.number-sign.ruby\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#yard_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"yard_continuation\": {\n\t\t\t\"match\": \"^\\\\s*#\",\n\t\t\t\"name\": \"punctuation.definition.comment.ruby\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/rust/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/rust/build/update-grammar.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n//@ts-check\n\nimport * as vscodeGrammarUpdater from 'vscode-grammar-updater';\n\nvscodeGrammarUpdater.update('dustypomerleau/rust-syntax', 'syntaxes/rust.tmLanguage.json', './syntaxes/rust.tmLanguage.json', undefined, 'main');\n"
  },
  {
    "path": "extensions/rust/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"rust-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/dustypomerleau/rust-syntax\",\n\t\t\t\t\t\"commitHash\": \"e90d3dbdb61b96e4afdce6f7a3572426b1a86d9d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"description\": \"A TextMate-style grammar for Rust.\",\n\t\t\t\"version\": \"0.6.1\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/rust/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t]\n\t],\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"^.*\\\\{[^}\\\"']*$|^.*\\\\([^\\\\)\\\"']*$\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*(\\\\s*\\\\/[*].*[*]\\\\/\\\\s*)*[})]\"\n\t},\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*//\\\\s*#?region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*//\\\\s*#?endregion\\\\b\"\n\t\t}\n\t},\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/rust/package.json",
    "content": "{\n  \"name\": \"rust\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammar.mjs\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"rust\",\n        \"extensions\": [\n          \".rs\"\n        ],\n        \"aliases\": [\n          \"Rust\",\n          \"rust\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"rust\",\n        \"path\": \"./syntaxes/rust.tmLanguage.json\",\n        \"scopeName\": \"source.rust\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/rust/package.nls.json",
    "content": "{\n\t\"displayName\": \"Rust Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Rust files.\"\n}\n"
  },
  {
    "path": "extensions/rust/syntaxes/rust.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/dustypomerleau/rust-syntax/blob/master/syntaxes/rust.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/dustypomerleau/rust-syntax/commit/e90d3dbdb61b96e4afdce6f7a3572426b1a86d9d\",\n\t\"name\": \"Rust\",\n\t\"scopeName\": \"source.rust\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"comment\": \"boxed slice literal\",\n\t\t\t\"begin\": \"(<)(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.brackets.angle.rust\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.brackets.square.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \">\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.brackets.angle.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gtypes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lvariables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lifetimes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"macro type metavariables\",\n\t\t\t\"name\": \"meta.macro.metavariable.type.rust\",\n\t\t\t\"match\": \"(\\\\$)((crate)|([A-Z][A-Za-z0-9_]*))((:)(block|expr|ident|item|lifetime|literal|meta|path?|stmt|tt|ty|vis))?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.macro.dollar.rust\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.other.crate.rust\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.metavariable.rust\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.key-value.rust\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"variable.other.metavariable.specifier.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"macro metavariables\",\n\t\t\t\"name\": \"meta.macro.metavariable.rust\",\n\t\t\t\"match\": \"(\\\\$)([a-z][A-Za-z0-9_]*)((:)(block|expr|ident|item|lifetime|literal|meta|path?|stmt|tt|ty|vis))?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.macro.dollar.rust\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.other.metavariable.name.rust\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.operator.key-value.rust\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"variable.other.metavariable.specifier.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"macro rules\",\n\t\t\t\"name\": \"meta.macro.rules.rust\",\n\t\t\t\"match\": \"\\\\b(macro_rules!)\\\\s+(([a-z0-9_]+)|([A-Z][a-z0-9_]*))\\\\s+(\\\\{)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.macro.rules.rust\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.function.macro.rust\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.macro.rust\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.brackets.curly.rust\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"modules\",\n\t\t\t\"match\": \"(mod)\\\\s+((?:r#(?!crate|[Ss]elf|super))?[a-z][A-Za-z0-9_]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.rust\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.module.rust\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"external crate imports\",\n\t\t\t\"name\": \"meta.import.rust\",\n\t\t\t\"begin\": \"\\\\b(extern)\\\\s+(crate)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.rust\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.crate.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \";\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.semi.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"use statements\",\n\t\t\t\"name\": \"meta.use.rust\",\n\t\t\t\"begin\": \"\\\\b(use)\\\\s\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \";\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.semi.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespaces\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lvariables\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#block-comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#attributes\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#lvariables\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#constants\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#gtypes\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#functions\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#types\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#lifetimes\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#macros\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#namespaces\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#punctuation\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#variables\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"documentation comments\",\n\t\t\t\t\t\"name\": \"comment.line.documentation.rust\",\n\t\t\t\t\t\"match\": \"(///).*$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"line comments\",\n\t\t\t\t\t\"name\": \"comment.line.double-slash.rust\",\n\t\t\t\t\t\"match\": \"(//).*$\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"block-comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"empty block comments\",\n\t\t\t\t\t\"name\": \"comment.block.rust\",\n\t\t\t\t\t\"match\": \"/\\\\*\\\\*/\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"block documentation comments\",\n\t\t\t\t\t\"name\": \"comment.block.documentation.rust\",\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"block comments\",\n\t\t\t\t\t\"name\": \"comment.block.rust\",\n\t\t\t\t\t\"begin\": \"/\\\\*(?!\\\\*)\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constants\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"ALL CAPS constants\",\n\t\t\t\t\t\"name\": \"constant.other.caps.rust\",\n\t\t\t\t\t\"match\": \"\\\\b[A-Z]{2}[A-Z0-9_]*\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"constant declarations\",\n\t\t\t\t\t\"match\": \"\\\\b(const)\\\\s+([A-Z][A-Za-z0-9_]*)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.caps.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"decimal integers and floats\",\n\t\t\t\t\t\"name\": \"constant.numeric.decimal.rust\",\n\t\t\t\t\t\"match\": \"\\\\b\\\\d[\\\\d_]*(\\\\.?)[\\\\d_]*(?:(E|e)([+-]?)([\\\\d_]+))?(f32|f64|i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.dot.decimal.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.exponent.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.exponent.sign.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.exponent.mantissa.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.numeric.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"hexadecimal integers\",\n\t\t\t\t\t\"name\": \"constant.numeric.hex.rust\",\n\t\t\t\t\t\"match\": \"\\\\b0x[\\\\da-fA-F_]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.numeric.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"octal integers\",\n\t\t\t\t\t\"name\": \"constant.numeric.oct.rust\",\n\t\t\t\t\t\"match\": \"\\\\b0o[0-7_]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.numeric.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"binary integers\",\n\t\t\t\t\t\"name\": \"constant.numeric.bin.rust\",\n\t\t\t\t\t\"match\": \"\\\\b0b[01_]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.numeric.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"booleans\",\n\t\t\t\t\t\"name\": \"constant.language.bool.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(true|false)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"escapes\": {\n\t\t\t\"comment\": \"escapes: ASCII, byte, Unicode, quote, regex\",\n\t\t\t\"name\": \"constant.character.escape.rust\",\n\t\t\t\"match\": \"(\\\\\\\\)(?:(?:(x[0-7][\\\\da-fA-F])|(u(\\\\{)[\\\\da-fA-F]{4,6}(\\\\}))|.))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.rust\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.bit.rust\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.unicode.rust\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.unicode.punctuation.rust\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.unicode.punctuation.rust\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"attributes\": {\n\t\t\t\"comment\": \"attributes\",\n\t\t\t\"name\": \"meta.attribute.rust\",\n\t\t\t\"begin\": \"(#)(\\\\!?)(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.attribute.rust\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.brackets.attribute.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.brackets.attribute.rust\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#lifetimes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#gtypes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"pub as a function\",\n\t\t\t\t\t\"match\": \"\\\\b(pub)(\\\\()\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"function definition\",\n\t\t\t\t\t\"name\": \"meta.function.definition.rust\",\n\t\t\t\t\t\"begin\": \"\\\\b(fn)\\\\s+((?:r#(?!crate|[Ss]elf|super))?[A-Za-z0-9_]+)((\\\\()|(<))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.fn.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.angle.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\{)|(;)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.curly.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.semi.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lvariables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#gtypes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lifetimes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#macros\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespaces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"function/method calls, chaining\",\n\t\t\t\t\t\"name\": \"meta.function.call.rust\",\n\t\t\t\t\t\"begin\": \"((?:r#(?!crate|[Ss]elf|super))?[A-Za-z0-9_]+)(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lvariables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#gtypes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lifetimes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#macros\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespaces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"function/method calls with turbofish\",\n\t\t\t\t\t\"name\": \"meta.function.call.rust\",\n\t\t\t\t\t\"begin\": \"((?:r#(?!crate|[Ss]elf|super))?[A-Za-z0-9_]+)(?=::<.*>\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lvariables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#constants\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#gtypes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lifetimes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#macros\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#namespaces\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#strings\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"control flow keywords\",\n\t\t\t\t\t\"name\": \"keyword.control.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(await|break|continue|do|else|for|if|loop|match|return|try|while|yield)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"storage keywords\",\n\t\t\t\t\t\"name\": \"keyword.other.rust storage.type.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(extern|let|macro|mod)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"const keyword\",\n\t\t\t\t\t\"name\": \"storage.modifier.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(const)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"type keyword\",\n\t\t\t\t\t\"name\": \"keyword.declaration.type.rust storage.type.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(type)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"enum keyword\",\n\t\t\t\t\t\"name\": \"keyword.declaration.enum.rust storage.type.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(enum)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"trait keyword\",\n\t\t\t\t\t\"name\": \"keyword.declaration.trait.rust storage.type.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(trait)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"struct keyword\",\n\t\t\t\t\t\"name\": \"keyword.declaration.struct.rust storage.type.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(struct)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"storage modifiers\",\n\t\t\t\t\t\"name\": \"storage.modifier.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(abstract|static)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"other keywords\",\n\t\t\t\t\t\"name\": \"keyword.other.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(as|async|become|box|dyn|move|final|gen|impl|in|override|priv|pub|ref|typeof|union|unsafe|unsized|use|virtual|where)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"fn\",\n\t\t\t\t\t\"name\": \"keyword.other.fn.rust\",\n\t\t\t\t\t\"match\": \"\\\\bfn\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"crate\",\n\t\t\t\t\t\"name\": \"keyword.other.crate.rust\",\n\t\t\t\t\t\"match\": \"\\\\bcrate\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"mut\",\n\t\t\t\t\t\"name\": \"storage.modifier.mut.rust\",\n\t\t\t\t\t\"match\": \"\\\\bmut\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"logical operators\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.rust\",\n\t\t\t\t\t\"match\": \"(\\\\^|\\\\||\\\\|\\\\||&&|<<|>>|!)(?!=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"logical AND, borrow references\",\n\t\t\t\t\t\"name\": \"keyword.operator.borrow.and.rust\",\n\t\t\t\t\t\"match\": \"&(?![&=])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"assignment operators\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.rust\",\n\t\t\t\t\t\"match\": \"(\\\\+=|-=|\\\\*=|/=|%=|\\\\^=|&=|\\\\|=|<<=|>>=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"single equal\",\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.equal.rust\",\n\t\t\t\t\t\"match\": \"(?<![<>])=(?!=|>)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"comparison operators\",\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.rust\",\n\t\t\t\t\t\"match\": \"(=(=)?(?!>)|!=|<=|(?<!=)>=)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"math operators\",\n\t\t\t\t\t\"name\": \"keyword.operator.math.rust\",\n\t\t\t\t\t\"match\": \"(([+%]|(\\\\*(?!\\\\w)))(?!=))|(-(?!>))|(/(?!/))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"less than, greater than (special case)\",\n\t\t\t\t\t\"match\": \"(?:\\\\b|(?:(\\\\))|(\\\\])|(\\\\})))[ \\\\t]+([<>])[ \\\\t]+(?:\\\\b|(?:(\\\\()|(\\\\[)|(\\\\{)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.square.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.curly.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.square.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.curly.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"namespace operator\",\n\t\t\t\t\t\"name\": \"keyword.operator.namespace.rust\",\n\t\t\t\t\t\"match\": \"::\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"dereference asterisk\",\n\t\t\t\t\t\"match\": \"(\\\\*)(?=\\\\w+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.dereference.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"subpattern binding\",\n\t\t\t\t\t\"name\": \"keyword.operator.subpattern.rust\",\n\t\t\t\t\t\"match\": \"@\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"dot access\",\n\t\t\t\t\t\"name\": \"keyword.operator.access.dot.rust\",\n\t\t\t\t\t\"match\": \"\\\\.(?!\\\\.)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"ranges, range patterns\",\n\t\t\t\t\t\"name\": \"keyword.operator.range.rust\",\n\t\t\t\t\t\"match\": \"\\\\.{2}(=|\\\\.)?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"colon\",\n\t\t\t\t\t\"name\": \"keyword.operator.key-value.rust\",\n\t\t\t\t\t\"match\": \":(?!:)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"dashrocket, skinny arrow\",\n\t\t\t\t\t\"name\": \"keyword.operator.arrow.skinny.rust\",\n\t\t\t\t\t\"match\": \"->|<-\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"hashrocket, fat arrow\",\n\t\t\t\t\t\"name\": \"keyword.operator.arrow.fat.rust\",\n\t\t\t\t\t\"match\": \"=>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"dollar macros\",\n\t\t\t\t\t\"name\": \"keyword.operator.macro.dollar.rust\",\n\t\t\t\t\t\"match\": \"\\\\$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"question mark operator, questionably sized, macro kleene matcher\",\n\t\t\t\t\t\"name\": \"keyword.operator.question.rust\",\n\t\t\t\t\t\"match\": \"\\\\?\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolations\": {\n\t\t\t\"comment\": \"curly brace interpolations\",\n\t\t\t\"name\": \"meta.interpolation.rust\",\n\t\t\t\"match\": \"({)[^\\\"{}]*(})\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.rust\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.rust\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"lifetimes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"named lifetime parameters\",\n\t\t\t\t\t\"match\": \"(['])([a-zA-Z_][0-9a-zA-Z_]*)(?!['])\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.lifetime.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.lifetime.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"borrowing references to named lifetimes\",\n\t\t\t\t\t\"match\": \"(\\\\&)(['])([a-zA-Z_][0-9a-zA-Z_]*)(?!['])\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.borrow.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.lifetime.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.lifetime.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"macros\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"macros\",\n\t\t\t\t\t\"name\": \"meta.macro.rust\",\n\t\t\t\t\t\"match\": \"(([a-z_][A-Za-z0-9_]*!)|([A-Z_][A-Za-z0-9_]*!))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.macro.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.macro.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespaces\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"namespace (non-type, non-function path segment)\",\n\t\t\t\t\t\"match\": \"(?<![A-Za-z0-9_])([A-Za-z0-9_]+)((?<!super|self)::)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.namespace.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"numeric types\",\n\t\t\t\t\t\"match\": \"(?<![A-Za-z])(f32|f64|i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.numeric.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"parameterized types\",\n\t\t\t\t\t\"begin\": \"\\\\b(_?[A-Z][A-Za-z0-9_]*)(<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.angle.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \">\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.brackets.angle.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#block-comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lvariables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#lifetimes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"primitive types\",\n\t\t\t\t\t\"name\": \"entity.name.type.primitive.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(bool|char|str)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"trait declarations\",\n\t\t\t\t\t\"match\": \"\\\\b(trait)\\\\s+(_?[A-Z][A-Za-z0-9_]*)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.declaration.trait.rust storage.type.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.trait.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"struct declarations\",\n\t\t\t\t\t\"match\": \"\\\\b(struct)\\\\s+(_?[A-Z][A-Za-z0-9_]*)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.declaration.struct.rust storage.type.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.struct.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"enum declarations\",\n\t\t\t\t\t\"match\": \"\\\\b(enum)\\\\s+(_?[A-Z][A-Za-z0-9_]*)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.declaration.enum.rust storage.type.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.enum.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"type declarations\",\n\t\t\t\t\t\"match\": \"\\\\b(type)\\\\s+(_?[A-Z][A-Za-z0-9_]*)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.declaration.type.rust storage.type.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.declaration.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"types\",\n\t\t\t\t\t\"name\": \"entity.name.type.rust\",\n\t\t\t\t\t\"match\": \"\\\\b_?[A-Z][A-Za-z0-9_]*\\\\b(?!!)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"gtypes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"option types\",\n\t\t\t\t\t\"name\": \"entity.name.type.option.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(Some|None)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"result types\",\n\t\t\t\t\t\"name\": \"entity.name.type.result.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(Ok|Err)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"punctuation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"comma\",\n\t\t\t\t\t\"name\": \"punctuation.comma.rust\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"curly braces\",\n\t\t\t\t\t\"name\": \"punctuation.brackets.curly.rust\",\n\t\t\t\t\t\"match\": \"[{}]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"parentheses, round brackets\",\n\t\t\t\t\t\"name\": \"punctuation.brackets.round.rust\",\n\t\t\t\t\t\"match\": \"[()]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"semicolon\",\n\t\t\t\t\t\"name\": \"punctuation.semi.rust\",\n\t\t\t\t\t\"match\": \";\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"square brackets\",\n\t\t\t\t\t\"name\": \"punctuation.brackets.square.rust\",\n\t\t\t\t\t\"match\": \"[\\\\[\\\\]]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"angle brackets\",\n\t\t\t\t\t\"name\": \"punctuation.brackets.angle.rust\",\n\t\t\t\t\t\"match\": \"(?<!=)[<>]\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"double-quoted strings and byte strings\",\n\t\t\t\t\t\"name\": \"string.quoted.double.rust\",\n\t\t\t\t\t\"begin\": \"(b?)(\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.byte.raw.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolations\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"double-quoted raw strings and raw byte strings\",\n\t\t\t\t\t\"name\": \"string.quoted.double.rust\",\n\t\t\t\t\t\"begin\": \"(b?r)(#*)(\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.byte.raw.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\")(\\\\2)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.raw.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"characters and bytes\",\n\t\t\t\t\t\"name\": \"string.quoted.single.char.rust\",\n\t\t\t\t\t\"begin\": \"(b)?(')\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.byte.raw.rust\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.char.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.char.rust\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#escapes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"lvariables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"self\",\n\t\t\t\t\t\"name\": \"variable.language.self.rust\",\n\t\t\t\t\t\"match\": \"\\\\b[Ss]elf\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"super\",\n\t\t\t\t\t\"name\": \"variable.language.super.rust\",\n\t\t\t\t\t\"match\": \"\\\\bsuper\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"variables\",\n\t\t\t\t\t\"name\": \"variable.other.rust\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!(?<!\\\\.)\\\\.)(?:r#(?!(crate|[Ss]elf|super)))?[a-z0-9_]+\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/scss/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/scss/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"atom/language-sass\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/atom/language-sass\",\n\t\t\t\t\t\"commitHash\": \"303bbf0c250fe380b9e57375598cfd916110758b\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"description\": \"The file syntaxes/scss.json was derived from the Atom package https://github.com/atom/language-sass which was originally converted from the TextMate bundle https://github.com/alexsancho/SASS.tmbundle.\",\n\t\t\t\"version\": \"0.61.4\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/scss/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"blockComment\": [\"/*\", \"*/\"],\n\t\t\"lineComment\": \"//\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{ \"open\": \"{\", \"close\": \"}\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"[\", \"close\": \"]\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"(\", \"close\": \")\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*\\\\/\\\\*\\\\s*#region\\\\b\\\\s*(.*?)\\\\s*\\\\*\\\\/\",\n\t\t\t\"end\": \"^\\\\s*\\\\/\\\\*\\\\s*#endregion\\\\b.*\\\\*\\\\/\"\n\t\t}\n\t},\n\t\"indentationRules\": {\n\t\t\"increaseIndentPattern\": \"(^.*\\\\{[^}]*$)\",\n\t\t\"decreaseIndentPattern\": \"^\\\\s*\\\\}\"\n\t},\n\t\"wordPattern\": \"(#?-?\\\\d*\\\\.\\\\d\\\\w*%?)|(::?[\\\\w-]*(?=[^,{;]*[,{]))|(([@$#.!])?[\\\\w-?]+%?|[@#!$.])\",\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t\"beforeText\": \"^[\\\\s]*///.*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"/// \"\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "extensions/scss/package.json",
    "content": "{\n  \"name\": \"scss\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin atom/language-sass grammars/scss.cson ./syntaxes/scss.tmLanguage.json grammars/sassdoc.cson ./syntaxes/sassdoc.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"scss\",\n        \"aliases\": [\n          \"SCSS\",\n          \"scss\"\n        ],\n        \"extensions\": [\n          \".scss\"\n        ],\n        \"mimetypes\": [\n          \"text/x-scss\",\n          \"text/scss\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"scss\",\n        \"scopeName\": \"source.css.scss\",\n        \"path\": \"./syntaxes/scss.tmLanguage.json\"\n      },\n      {\n        \"scopeName\": \"source.sassdoc\",\n        \"path\": \"./syntaxes/sassdoc.tmLanguage.json\"\n      }\n    ],\n    \"problemMatchers\": [\n      {\n        \"name\": \"node-sass\",\n        \"label\": \"Node Sass Compiler\",\n        \"owner\": \"node-sass\",\n        \"fileLocation\": \"absolute\",\n        \"pattern\": [\n          {\n            \"regexp\": \"^{$\"\n          },\n          {\n            \"regexp\": \"\\\\s*\\\"status\\\":\\\\s\\\\d+,\"\n          },\n          {\n            \"regexp\": \"\\\\s*\\\"file\\\":\\\\s\\\"(.*)\\\",\",\n            \"file\": 1\n          },\n          {\n            \"regexp\": \"\\\\s*\\\"line\\\":\\\\s(\\\\d+),\",\n            \"line\": 1\n          },\n          {\n            \"regexp\": \"\\\\s*\\\"column\\\":\\\\s(\\\\d+),\",\n            \"column\": 1\n          },\n          {\n            \"regexp\": \"\\\\s*\\\"message\\\":\\\\s\\\"(.*)\\\",\",\n            \"message\": 1\n          },\n          {\n            \"regexp\": \"\\\\s*\\\"formatted\\\":\\\\s(.*)\"\n          },\n          {\n            \"regexp\": \"^}$\"\n          }\n        ]\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/scss/package.nls.json",
    "content": "{\n\t\"displayName\": \"SCSS Language Basics\",\n\t\"description\": \"Provides syntax highlighting, bracket matching and folding in SCSS files.\"\n}\n"
  },
  {
    "path": "extensions/scss/syntaxes/sassdoc.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/atom/language-sass/blob/master/grammars/sassdoc.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/atom/language-sass/commit/303bbf0c250fe380b9e57375598cfd916110758b\",\n\t\"name\": \"SassDoc\",\n\t\"scopeName\": \"source.sassdoc\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"match\": \"(?x)\\n((@)(?:access))\\n\\\\s+\\n(private|public)\\n\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.language.access-type.sassdoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?x)\\n((@)author)\\n\\\\s+\\n(\\n  [^@\\\\s<>*/]\\n  (?:[^@<>*/]|\\\\*[^/])*\\n)\\n(?:\\n  \\\\s*\\n  (<)\\n  ([^>\\\\s]+)\\n  (>)\\n)?\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.type.instance.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"constant.other.email.link.underline.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.sassdoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.example.css.scss.sassdoc\",\n\t\t\t\"begin\": \"(?x)\\n((@)example)\\n\\\\s+\\n(css|scss)\",\n\t\t\t\"end\": \"(?=@|///$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.sassdoc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^///\\\\s+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"source.embedded.css.scss\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.css.scss\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.example.html.sassdoc\",\n\t\t\t\"begin\": \"(?x)\\n((@)example)\\n\\\\s+\\n(markup)\",\n\t\t\t\"end\": \"(?=@|///$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.sassdoc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^///\\\\s+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"source.embedded.html\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.html\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.example.js.sassdoc\",\n\t\t\t\"begin\": \"(?x)\\n((@)example)\\n\\\\s+\\n(javascript)\",\n\t\t\t\"end\": \"(?=@|///$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.sassdoc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"^///\\\\s+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"source.embedded.js\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?x)\\n((@)link)\\n\\\\s+\\n(?:\\n  # URL\\n  (\\n    (?=https?://)\\n    (?:[^\\\\s*]|\\\\*[^/])+\\n  )\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.link.underline.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.instance.sassdoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:arg|argument|param|parameter|requires?|see|colors?|fonts?|ratios?|sizes?)\\n)\\n\\\\s+\\n(\\n  [A-Za-z_$%]\\n  [\\\\-\\\\w$.\\\\[\\\\]]*\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.sassdoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"((@)(?:arg|argument|param|parameter|prop|property|requires?|see|sizes?))\\\\s+(?={)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#sassdoctype\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([A-Za-z_$%][\\\\-\\\\w$.\\\\[\\\\]]*)\",\n\t\t\t\t\t\"name\": \"variable.other.sassdoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.sassdoc\",\n\t\t\t\t\t\"match\": \"(?x)\\n(\\\\[)\\\\s*\\n[\\\\w$]+\\n(?:\\n  (?:\\\\[\\\\])?                                        # Foo[].bar properties within an array\\n  \\\\.                                                # Foo.Bar namespaced parameter\\n  [\\\\w$]+\\n)*\\n(?:\\n  \\\\s*\\n  (=)                                                # [foo=bar] Default parameter value\\n  \\\\s*\\n  (\\n    # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\\n    (?>\\n      \\\"(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!\\\"))|[^*\\\\\\\\])*?\\\" |  # [foo=\\\"bar\\\"] Double-quoted\\n      '(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!'))|[^*\\\\\\\\])*?' |  # [foo='bar'] Single-quoted\\n      \\\\[ (?:(?:\\\\*(?!/))|[^*])*? \\\\] |              # [foo=[1,2]] Array literal\\n      (?:(?:\\\\*(?!/))|\\\\s(?!\\\\s*\\\\])|\\\\[.*?(?:\\\\]|(?=\\\\*/))|[^*\\\\s\\\\[\\\\]])* # Everything else (sorry)\\n    )*\\n  )\\n)?\\n\\\\s*(?:(\\\\])((?:[^*\\\\s]|\\\\*[^\\\\s/])+)?|(?=\\\\*/))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.begin.bracket.square.sassdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.sassdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"source.embedded.js\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"source.js\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.end.bracket.square.sassdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.syntax.sassdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"begin\": \"(?x)\\n(\\n  (@)\\n  (?:returns?|throws?|exception|outputs?)\\n)\\n\\\\s+(?={)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\s|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#sassdoctype\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:type)\\n)\\n\\\\s+\\n(\\n  (?:\\n    [A-Za-z |]+\\n  )\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.type.instance.sassdoc\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#sassdoctypedelimiter\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:alias|group|name|requires?|see|icons?)\\n)\\n\\\\s+\\n(\\n  (?:\\n    [^{}@\\\\s*] | \\\\*[^/]\\n  )+\\n)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.class.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.type.instance.sassdoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.type.class.sassdoc\",\n\t\t\t\"match\": \"(?x)\\n(@)\\n(?:access|alias|author|content|deprecated|example|exception|group\\n|ignore|name|prop|property|requires?|returns?|see|since|throws?|todo\\n|type|outputs?)\\n\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.sassdoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"brackets\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"end\": \"}|(?=$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"sassdoctypedelimiter\": {\n\t\t\t\"match\": \"(\\\\|)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.delimiter.sassdoc\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"sassdoctype\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.type.sassdoc\",\n\t\t\t\t\t\"match\": \"\\\\G{(?:[^}*]|\\\\*[^/}])+$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G({)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.sassdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.begin.sassdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"entity.name.type.instance.sassdoc\",\n\t\t\t\t\t\"end\": \"((}))\\\\s*|(?=$)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.sassdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.end.sassdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/scss/syntaxes/scss.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/atom/language-sass/blob/master/grammars/scss.cson\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/atom/language-sass/commit/f52ab12f7f9346cc2568129d8c4419bd3d506b47\",\n\t\"name\": \"SCSS\",\n\t\"scopeName\": \"source.css.scss\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#variable_setting\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_forward\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_use\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_include\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_import\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#general\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#flow_control\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#rules\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#property_list\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_mixin\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_media\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_function\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_charset\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_option\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_namespace\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_fontface\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_page\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_keyframes\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_at_root\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#at_rule_supports\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \";\",\n\t\t\t\"name\": \"punctuation.terminator.rule.css\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"at_rule_charset\": {\n\t\t\t\"begin\": \"\\\\s*((@)charset\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.charset.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*((?=;|$))\",\n\t\t\t\"name\": \"meta.at-rule.charset.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_content\": {\n\t\t\t\"begin\": \"\\\\s*((@)content\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.content.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*((?=;))\",\n\t\t\t\"name\": \"meta.content.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_each\": {\n\t\t\t\"begin\": \"\\\\s*((@)each\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.each.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*((?=}))\",\n\t\t\t\"name\": \"meta.at-rule.each.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(in|,)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_else\": {\n\t\t\t\"begin\": \"\\\\s*((@)else(\\\\s*(if)?))\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.else.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\"name\": \"meta.at-rule.else.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conditional_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_extend\": {\n\t\t\t\"begin\": \"\\\\s*((@)extend\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.extend.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?=;)\",\n\t\t\t\"name\": \"meta.at-rule.extend.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_fontface\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((@)font-face\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.fontface.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.fontface.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_for\": {\n\t\t\t\"begin\": \"\\\\s*((@)for\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.for.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\"name\": \"meta.at-rule.for.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(==|!=|<=|>=|<|>|from|to|through)\",\n\t\t\t\t\t\"name\": \"keyword.control.operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_forward\": {\n\t\t\t\"begin\": \"\\\\s*((@)forward\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.forward.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?=;)\",\n\t\t\t\"name\": \"meta.at-rule.forward.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(as|hide|show)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([\\\\w-]+)(\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.module.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.wildcard.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b[\\\\w-]+\\\\b\",\n\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_function\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\s*((@)function\\\\b)\\\\s*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.function.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.function.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.function.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"\\\\s*((@)function\\\\b)\\\\s*\",\n\t\t\t\t\t\"name\": \"meta.at-rule.function.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_if\": {\n\t\t\t\"begin\": \"\\\\s*((@)if\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.if.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\"name\": \"meta.at-rule.if.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conditional_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_import\": {\n\t\t\t\"begin\": \"\\\\s*((@)import\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.import.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*((?=;)|(?=}))\",\n\t\t\t\"name\": \"meta.at-rule.import.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_line\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_include\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=@include)\\\\s+(?:([\\\\w-]+)\\\\s*(\\\\.))?([\\\\w-]+)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.access.module.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.include.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=@include)\\\\s+(?:([\\\\w-]+)\\\\s*(\\\\.))?([\\\\w-]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.include.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.access.module.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)include)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.at-rule.include.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.include.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_keyframes\": {\n\t\t\t\"begin\": \"(?<=^|\\\\s)(@)(?:-(?:webkit|moz)-)?keyframes\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.keyframes.scss\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=})\",\n\t\t\t\"name\": \"meta.at-rule.keyframes.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=@keyframes)\\\\s+((?:[_A-Za-z][-\\\\w]|-[_A-Za-z])[-\\\\w]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=@keyframes)\\\\s+(\\\")\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.scss\",\n\t\t\t\t\t\"contentName\": \"entity.name.function.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\h{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=@keyframes)\\\\s+(')\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.scss\",\n\t\t\t\t\t\"contentName\": \"entity.name.function.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\h{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.keyframes.begin.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.keyframes.end.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(?:(?:100|[1-9]\\\\d|\\\\d)%|from|to)(?=\\\\s*{)\",\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#flow_control\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property_list\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#rules\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_media\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((@)media)\\\\b\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.media.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.media.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_docblock\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_line\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(only)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"keyword.control.operator.css.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.media-query.begin.bracket.round.scss\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.media-query.end.bracket.round.scss\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"meta.property-list.media-query.scss\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(?<![-a-z])(?=[-a-z])\",\n\t\t\t\t\t\t\t\t\t\"end\": \"$|(?![-a-z])\",\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.property-name.media-query.scss\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.css#media-features\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"source.css#property-names\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(:)\\\\s*(?!(\\\\s*{))\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.scss\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\s*(;|(?=}|\\\\)))\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.scss\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"contentName\": \"meta.property-value.media-query.scss\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#general\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#conditional_operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css#media-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_mixin\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=@mixin)\\\\s+([\\\\w-]+)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.mixin.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=@mixin)\\\\s+([\\\\w-]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.mixin.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)mixin)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.mixin.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.mixin.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_namespace\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=@namespace)\\\\s+(?=url)\",\n\t\t\t\t\t\"end\": \"(?=;|$)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.namespace.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=@namespace)\\\\s+([\\\\w-]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.namespace-prefix.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;|$)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.namespace.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)namespace)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.namespace.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.at-rule.namespace.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_option\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.charset.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"^\\\\s*((@)option\\\\b)\\\\s*\",\n\t\t\t\"name\": \"meta.at-rule.option.scss\"\n\t\t},\n\t\t\"at_rule_page\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"^\\\\s*((@)page)(?=:|\\\\s)\\\\s*([-:\\\\w]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.at-rule.page.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\t\t\"name\": \"meta.at-rule.page.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_return\": {\n\t\t\t\"begin\": \"\\\\s*((@)(return)\\\\b)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.return.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*((?=;))\",\n\t\t\t\"name\": \"meta.at-rule.return.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_at_root\": {\n\t\t\t\"begin\": \"\\\\s*((@)(at-root))(\\\\s+|$)\",\n\t\t\t\"end\": \"\\\\s*(?={)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.at-root.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.at-rule.at-root.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_supports\": {\n\t\t\t\"begin\": \"(?<=^|\\\\s)(@)supports\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.supports.scss\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?={)|$\",\n\t\t\t\"name\": \"meta.at-rule.supports.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#properties\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\(\",\n\t\t\t\t\t\"name\": \"punctuation.definition.condition.begin.bracket.round.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\)\",\n\t\t\t\t\t\"name\": \"punctuation.definition.condition.end.bracket.round.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_use\": {\n\t\t\t\"begin\": \"\\\\s*((@)use\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.at-rule.use.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?=;)\",\n\t\t\t\"name\": \"meta.at-rule.use.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(as|with)\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.control.operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b[\\\\w-]+\\\\b\",\n\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\"name\": \"variable.language.expanded-namespace.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_warn\": {\n\t\t\t\"begin\": \"\\\\s*((@)(warn|debug|error)\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.warn.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?=;)\",\n\t\t\t\"name\": \"meta.at-rule.warn.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"at_rule_while\": {\n\t\t\t\"begin\": \"\\\\s*((@)while\\\\b)\\\\s*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.while.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.keyword.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(?=})\",\n\t\t\t\"name\": \"meta.at-rule.while.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conditional_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment_docblock\": {\n\t\t\t\"name\": \"comment.block.documentation.scss\",\n\t\t\t\"begin\": \"///\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.sassdoc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment_block\": {\n\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.scss\"\n\t\t},\n\t\t\"comment_line\": {\n\t\t\t\"begin\": \"//\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\n\",\n\t\t\t\"name\": \"comment.line.scss\"\n\t\t},\n\t\t\"constant_default\": {\n\t\t\t\"match\": \"!default\",\n\t\t\t\"name\": \"keyword.other.default.scss\"\n\t\t},\n\t\t\"constant_functions\": {\n\t\t\t\"begin\": \"(?:([\\\\w-]+)(\\\\.))?([\\\\w-]+)(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.access.module.scss\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.function.misc.scss\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"constant_important\": {\n\t\t\t\"match\": \"!important\",\n\t\t\t\"name\": \"keyword.other.important.scss\"\n\t\t},\n\t\t\"constant_mathematical_symbols\": {\n\t\t\t\"match\": \"\\\\b(\\\\+|-|\\\\*|/)\\\\b\",\n\t\t\t\"name\": \"support.constant.mathematical-symbols.scss\"\n\t\t},\n\t\t\"constant_optional\": {\n\t\t\t\"match\": \"!optional\",\n\t\t\t\"name\": \"keyword.other.optional.scss\"\n\t\t},\n\t\t\"constant_sass_functions\": {\n\t\t\t\"begin\": \"(headings|stylesheet-url|rgba?|hsla?|ie-hex-str|red|green|blue|alpha|opacity|hue|saturation|lightness|prefixed|prefix|-moz|-svg|-css2|-pie|-webkit|-ms|font-(?:files|url)|grid-image|image-(?:width|height|url|color)|sprites?|sprite-(?:map|map-name|file|url|position)|inline-(?:font-files|image)|opposite-position|grad-point|grad-end-position|color-stops|color-stops-in-percentages|grad-color-stops|(?:radial|linear)-(?:gradient|svg-gradient)|opacify|fade-?in|transparentize|fade-?out|lighten|darken|saturate|desaturate|grayscale|adjust-(?:hue|lightness|saturation|color)|scale-(?:lightness|saturation|color)|change-color|spin|complement|invert|mix|-compass-(?:list|space-list|slice|nth|list-size)|blank|compact|nth|first-value-of|join|length|append|nest|append-selector|headers|enumerate|range|percentage|unitless|unit|if|type-of|comparable|elements-of-type|quote|unquote|escape|e|sin|cos|tan|abs|round|ceil|floor|pi|translate(?:X|Y))(\\\\()\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.misc.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.function.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameters\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"flow_control\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_if\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_else\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_warn\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_for\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_while\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_each\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_return\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_attributes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \":\",\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#general\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[={}\\\\?;@]\",\n\t\t\t\t\t\"name\": \"invalid.illegal.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([\\\\w-]{1,})(\\\\()\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.misc.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([\\\\w-]{1,})\",\n\t\t\t\t\t\"name\": \"support.function.misc.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"general\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_docblock\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_line\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interpolation\": {\n\t\t\t\"begin\": \"#{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.begin.bracket.curly.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.interpolation.end.bracket.curly.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"variable.interpolation.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"conditional_operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comparison_operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_operators\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comparison_operators\": {\n\t\t\t\"match\": \"==|!=|<=|>=|<|>\",\n\t\t\t\"name\": \"keyword.operator.comparison.scss\"\n\t\t},\n\t\t\"logical_operators\": {\n\t\t\t\"match\": \"\\\\b(not|or|and)\\\\b\",\n\t\t\t\"name\": \"keyword.operator.logical.scss\"\n\t\t},\n\t\t\"map\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.map.begin.bracket.round.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.map.end.bracket.round.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.definition.variable.map.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_docblock\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_line\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([\\\\w-]+)\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.map.key.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#map\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"match\": \"[-+*/](?!\\\\s*[-+*/])\",\n\t\t\t\"name\": \"keyword.operator.css\"\n\t\t},\n\t\t\"parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function_attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^'\\\",) \\\\t]+\",\n\t\t\t\t\t\"name\": \"variable.parameter.url.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"properties\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![-a-z])(?=[-a-z])\",\n\t\t\t\t\t\"end\": \"$|(?![-a-z])\",\n\t\t\t\t\t\"name\": \"meta.property-name.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.css#property-names\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#at_rule_include\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(:)\\\\s*(?!(\\\\s*{))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\s*(;|(?=}|\\\\)))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.rule.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.property-value.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#general\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property_list\": {\n\t\t\t\"begin\": \"{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.property-list.begin.bracket.curly.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.property-list.end.bracket.curly.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.property-list.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#flow_control\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#rules\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#properties\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"property_values\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant_functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant_sass_functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant_important\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant_default\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant_optional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#numeric-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#property-keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#color-keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#property-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constant_mathematical_symbols\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.begin.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.end.bracket.round.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#general\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"rules\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#general\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_extend\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_content\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_include\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#at_rule_media\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selectors\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"selector_attribute\": {\n\t\t\t\"match\": \"(?xi)\\n(\\\\[)\\n\\\\s*\\n(\\n  (?:\\n    [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]       # Valid identifier characters\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)       # Escape sequence\\n    | \\\\#\\\\{                           # Interpolation (escaped to avoid Coffeelint errors)\\n    | \\\\.?\\\\$                          # Possible start of interpolation variable\\n    | }                                # Possible end of interpolation\\n  )+?\\n)\\n(?:\\n  \\\\s*([~|^$*]?=)\\\\s*\\n  (?:\\n    (\\n      (?:\\n        [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]       # Valid identifier characters\\n        | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)       # Escape sequence\\n        | \\\\#\\\\{                           # Interpolation (escaped to avoid Coffeelint errors)\\n        | \\\\.?\\\\$                          # Possible start of interpolation variable\\n        | }                                # Possible end of interpolation\\n      )+\\n    )\\n    |\\n    ((\\\")(.*?)(\\\"))\\n    |\\n    ((')(.*?)('))\\n  )\\n)?\\n\\\\s*\\n(\\\\])\",\n\t\t\t\"name\": \"meta.attribute-selector.scss\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.attribute-selector.begin.bracket.square.scss\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.attribute.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.scss\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"string.unquoted.attribute-value.scss\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.attribute-value.scss\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.scss\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.scss\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"string.quoted.single.attribute-value.scss\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.scss\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.scss\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.attribute-selector.end.bracket.square.scss\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"selector_class\": {\n\t\t\t\"match\": \"(?x)\\n(\\\\.)                                  # Valid class-name\\n(\\n  (?: [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]     # Valid identifier characters\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)       # Escape sequence\\n    | \\\\#\\\\{                           # Interpolation (escaped to avoid Coffeelint errors)\\n    | \\\\.?\\\\$                          # Possible start of interpolation variable\\n    | }                                # Possible end of interpolation\\n  )+\\n)                                      # Followed by either:\\n(?= $                                  # - End of the line\\n  | [\\\\s,\\\\#)\\\\[:{>+~|]                # - Another selector\\n  | \\\\.[^$]                            # - Class selector, negating module variable\\n  | /\\\\*                               # - A block comment\\n  | ;                                  # - A semicolon\\n)\",\n\t\t\t\"name\": \"entity.other.attribute-name.class.css\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"selector_custom\": {\n\t\t\t\"match\": \"\\\\b([a-zA-Z0-9]+(-[a-zA-Z0-9]+)+)(?=\\\\.|\\\\s++[^:]|\\\\s*[,\\\\[{]|:(link|visited|hover|active|focus|target|lang|disabled|enabled|checked|indeterminate|root|nth-(child|last-child|of-type|last-of-type)|first-child|last-child|first-of-type|last-of-type|only-child|only-of-type|empty|not|valid|invalid)(\\\\([0-9A-Za-z]*\\\\))?)\",\n\t\t\t\"name\": \"entity.name.tag.custom.scss\"\n\t\t},\n\t\t\"selector_id\": {\n\t\t\t\"match\": \"(?x)\\n(\\\\#)                                  # Valid id-name\\n(\\n  (?: [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]     # Valid identifier characters\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)       # Escape sequence\\n    | \\\\#\\\\{                           # Interpolation (escaped to avoid Coffeelint errors)\\n    | \\\\.?\\\\$                          # Possible start of interpolation variable\\n    | }                                # Possible end of interpolation\\n  )+\\n)                                      # Followed by either:\\n(?= $                                  # - End of the line\\n  | [\\\\s,\\\\#)\\\\[:{>+~|]                # - Another selector\\n  | \\\\.[^$]                            # - Class selector, negating module variable\\n  | /\\\\*                               # - A block comment\\n)\",\n\t\t\t\"name\": \"entity.other.attribute-name.id.css\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"selector_placeholder\": {\n\t\t\t\"match\": \"(?x)\\n(%)                                    # Valid placeholder-name\\n(\\n  (?: [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]     # Valid identifier characters\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)       # Escape sequence\\n    | \\\\#\\\\{                           # Interpolation (escaped to avoid Coffeelint errors)\\n    | \\\\.\\\\$                           # Possible start of interpolation module scope variable\\n    | \\\\$                              # Possible start of interpolation variable\\n    | }                                # Possible end of interpolation\\n  )+\\n)                                      # Followed by either:\\n(?= ;                                  # - End of statement\\n  | $                                  # - End of the line\\n  | [\\\\s,\\\\#)\\\\[:{>+~|]                # - Another selector\\n  | \\\\.[^$]                            # - Class selector, negating module variable\\n  | /\\\\*                               # - A block comment\\n)\",\n\t\t\t\"name\": \"entity.other.attribute-name.placeholder.css\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parent_selector_suffix\": {\n\t\t\t\"match\": \"(?x)\\n(?<=&)\\n(\\n  (?: [-a-zA-Z_0-9]|[^\\\\x00-\\\\x7F]     # Valid identifier characters\\n    | \\\\\\\\(?:[0-9a-fA-F]{1,6}|.)       # Escape sequence\\n    | \\\\#\\\\{                           # Interpolation (escaped to avoid Coffeelint errors)\\n    | \\\\$                              # Possible start of interpolation variable\\n    | }                                # Possible end of interpolation\\n  )+\\n)                                      # Followed by either:\\n(?= $                                  # - End of the line\\n  | [\\\\s,.\\\\#)\\\\[:{>+~|]               # - Another selector\\n  | /\\\\*                               # - A block comment\\n)\",\n\t\t\t\"name\": \"entity.other.attribute-name.parent-selector-suffix.css\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\([0-9a-fA-F]{1,6}|.)\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\$|}\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.identifier.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"selector_pseudo_class\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((:)\\\\bnth-(?:child|last-child|of-type|last-of-type))(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.pseudo-class.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.pseudo-class.begin.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.pseudo-class.end.bracket.round.css\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\d+\",\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.css\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<=\\\\d)n\\\\b|\\\\b(n|even|odd)\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"constant.other.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\w+\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#pseudo-classes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#pseudo-elements\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#functional-pseudo-classes\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"selectors\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#tag-names\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selector_custom\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selector_class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selector_id\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selector_pseudo_class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_wildcard\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#tag_parent_reference\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.css#pseudo-elements\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selector_attribute\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#selector_placeholder\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parent_selector_suffix\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_double\": {\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.double.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\h{1,6}|.)\",\n\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_single\": {\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"'\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"string.quoted.single.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\(\\\\h{1,6}|.)\",\n\t\t\t\t\t\"name\": \"constant.character.escape.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"tag_parent_reference\": {\n\t\t\t\"match\": \"&\",\n\t\t\t\"name\": \"entity.name.tag.reference.scss\"\n\t\t},\n\t\t\"tag_wildcard\": {\n\t\t\t\"match\": \"\\\\*\",\n\t\t\t\"name\": \"entity.name.tag.wildcard.scss\"\n\t\t},\n\t\t\"variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variables\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable_setting\": {\n\t\t\t\"begin\": \"(?=\\\\$[\\\\w-]+\\\\s*:)\",\n\t\t\t\"end\": \";\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.rule.scss\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.definition.variable.scss\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\$[\\\\w-]+(?=\\\\s*:)\",\n\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_docblock\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment_line\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#map\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#property_values\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \",\",\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.delimiter.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variables\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b([\\\\w-]+)(\\\\.)(\\\\$[\\\\w-]+)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.access.module.scss\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\$|\\\\-\\\\-)[A-Za-z0-9_-]+\\\\b\",\n\t\t\t\t\t\"name\": \"variable.scss\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/search-result/.vscodeignore",
    "content": "src/**\nout/**\ntsconfig.json\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\nsyntaxes/generateTMLanguage.js\n"
  },
  {
    "path": "extensions/search-result/README.md",
    "content": "# Language Features for Search Result files\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\nThis extension provides Syntax Highlighting, Symbol Information, Result Highlighting, and Go to Definition capabilities for the Search Results Editor.\n"
  },
  {
    "path": "extensions/search-result/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\nconst path = require('path');\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t},\n\toutput: {\n\t\tfilename: 'extension.js',\n\t\tpath: path.join(__dirname, 'dist')\n\t}\n});\n"
  },
  {
    "path": "extensions/search-result/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t}\n});\n"
  },
  {
    "path": "extensions/search-result/package.json",
    "content": "{\n  \"name\": \"search-result\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"icon\": \"images/icon.png\",\n  \"engines\": {\n    \"vscode\": \"^1.39.0\"\n  },\n  \"main\": \"./out/extension.js\",\n  \"browser\": \"./dist/extension.js\",\n  \"activationEvents\": [\n    \"onLanguage:search-result\"\n  ],\n  \"scripts\": {\n    \"generate-grammar\": \"node ./syntaxes/generateTMLanguage.js\",\n    \"vscode:prepublish\": \"node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:search-result ./tsconfig.json\"\n  },\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"enabledApiProposals\": [\n    \"documentFiltersExclusive\"\n  ],\n  \"contributes\": {\n    \"configurationDefaults\": {\n      \"[search-result]\": {\n        \"editor.lineNumbers\": \"off\"\n      }\n    },\n    \"languages\": [\n      {\n        \"id\": \"search-result\",\n        \"extensions\": [\n          \".code-search\"\n        ],\n        \"aliases\": [\n          \"Search Result\"\n        ]\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"search-result\",\n        \"scopeName\": \"text.searchResult\",\n        \"path\": \"./syntaxes/searchResult.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/search-result/package.nls.json",
    "content": "{\n\t\"displayName\": \"Search Result\",\n\t\"description\": \"Provides syntax highlighting and language features for tabbed search results.\"\n}\n"
  },
  {
    "path": "extensions/search-result/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport * as pathUtils from 'path';\n\nconst FILE_LINE_REGEX = /^(\\S.*):$/;\nconst RESULT_LINE_REGEX = /^(\\s+)(\\d+)(: |  )(\\s*)(.*)$/;\nconst ELISION_REGEX = /⟪ ([0-9]+) characters skipped ⟫/g;\nconst SEARCH_RESULT_SELECTOR = { language: 'search-result', exclusive: true };\nconst DIRECTIVES = ['# Query:', '# Flags:', '# Including:', '# Excluding:', '# ContextLines:'];\nconst FLAGS = ['RegExp', 'CaseSensitive', 'IgnoreExcludeSettings', 'WordMatch'];\n\nlet cachedLastParse: { version: number; parse: ParsedSearchResults; uri: vscode.Uri } | undefined;\nlet documentChangeListener: vscode.Disposable | undefined;\n\n\nexport function activate(context: vscode.ExtensionContext) {\n\n\tconst contextLineDecorations = vscode.window.createTextEditorDecorationType({ opacity: '0.7' });\n\tconst matchLineDecorations = vscode.window.createTextEditorDecorationType({ fontWeight: 'bold' });\n\n\tconst decorate = (editor: vscode.TextEditor) => {\n\t\tconst parsed = parseSearchResults(editor.document).filter(isResultLine);\n\t\tconst contextRanges = parsed.filter(line => line.isContext).map(line => line.prefixRange);\n\t\tconst matchRanges = parsed.filter(line => !line.isContext).map(line => line.prefixRange);\n\t\teditor.setDecorations(contextLineDecorations, contextRanges);\n\t\teditor.setDecorations(matchLineDecorations, matchRanges);\n\t};\n\n\tif (vscode.window.activeTextEditor && vscode.window.activeTextEditor.document.languageId === 'search-result') {\n\t\tdecorate(vscode.window.activeTextEditor);\n\t}\n\n\tcontext.subscriptions.push(\n\n\t\tvscode.languages.registerDocumentSymbolProvider(SEARCH_RESULT_SELECTOR, {\n\t\t\tprovideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.DocumentSymbol[] {\n\t\t\t\tconst results = parseSearchResults(document, token)\n\t\t\t\t\t.filter(isFileLine)\n\t\t\t\t\t.map(line => new vscode.DocumentSymbol(\n\t\t\t\t\t\tline.path,\n\t\t\t\t\t\t'',\n\t\t\t\t\t\tvscode.SymbolKind.File,\n\t\t\t\t\t\tline.allLocations.map(({ originSelectionRange }) => originSelectionRange!).reduce((p, c) => p.union(c), line.location.originSelectionRange!),\n\t\t\t\t\t\tline.location.originSelectionRange!,\n\t\t\t\t\t));\n\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}),\n\n\t\tvscode.languages.registerCompletionItemProvider(SEARCH_RESULT_SELECTOR, {\n\t\t\tprovideCompletionItems(document: vscode.TextDocument, position: vscode.Position): vscode.CompletionItem[] {\n\n\t\t\t\tconst line = document.lineAt(position.line);\n\t\t\t\tif (position.line > 3) { return []; }\n\t\t\t\tif (position.character === 0 || (position.character === 1 && line.text === '#')) {\n\t\t\t\t\tconst header = Array.from({ length: DIRECTIVES.length }).map((_, i) => document.lineAt(i).text);\n\n\t\t\t\t\treturn DIRECTIVES\n\t\t\t\t\t\t.filter(suggestion => header.every(line => line.indexOf(suggestion) === -1))\n\t\t\t\t\t\t.map(flag => ({ label: flag, insertText: (flag.slice(position.character)) + ' ' }));\n\t\t\t\t}\n\n\t\t\t\tif (line.text.indexOf('# Flags:') === -1) { return []; }\n\n\t\t\t\treturn FLAGS\n\t\t\t\t\t.filter(flag => line.text.indexOf(flag) === -1)\n\t\t\t\t\t.map(flag => ({ label: flag, insertText: flag + ' ' }));\n\t\t\t}\n\t\t}, '#'),\n\n\t\tvscode.languages.registerDefinitionProvider(SEARCH_RESULT_SELECTOR, {\n\t\t\tprovideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.DefinitionLink[] {\n\t\t\t\tconst lineResult = parseSearchResults(document, token)[position.line];\n\t\t\t\tif (!lineResult) { return []; }\n\t\t\t\tif (lineResult.type === 'file') {\n\t\t\t\t\treturn lineResult.allLocations.map(l => ({ ...l, originSelectionRange: lineResult.location.originSelectionRange }));\n\t\t\t\t}\n\n\t\t\t\tconst location = lineResult.locations.find(l => l.originSelectionRange.contains(position));\n\t\t\t\tif (!location) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tconst targetPos = new vscode.Position(\n\t\t\t\t\tlocation.targetSelectionRange.start.line,\n\t\t\t\t\tlocation.targetSelectionRange.start.character + (position.character - location.originSelectionRange.start.character)\n\t\t\t\t);\n\t\t\t\treturn [{\n\t\t\t\t\t...location,\n\t\t\t\t\ttargetSelectionRange: new vscode.Range(targetPos, targetPos),\n\t\t\t\t}];\n\t\t\t}\n\t\t}),\n\n\t\tvscode.languages.registerDocumentLinkProvider(SEARCH_RESULT_SELECTOR, {\n\t\t\tasync provideDocumentLinks(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.DocumentLink[]> {\n\t\t\t\treturn parseSearchResults(document, token)\n\t\t\t\t\t.filter(isFileLine)\n\t\t\t\t\t.map(({ location }) => ({ range: location.originSelectionRange!, target: location.targetUri }));\n\t\t\t}\n\t\t}),\n\n\t\tvscode.window.onDidChangeActiveTextEditor(editor => {\n\t\t\tif (editor?.document.languageId === 'search-result') {\n\t\t\t\t// Clear the parse whenever we open a new editor.\n\t\t\t\t// Conservative because things like the URI might remain constant even if the contents change, and re-parsing even large files is relatively fast.\n\t\t\t\tcachedLastParse = undefined;\n\n\t\t\t\tdocumentChangeListener?.dispose();\n\t\t\t\tdocumentChangeListener = vscode.workspace.onDidChangeTextDocument(doc => {\n\t\t\t\t\tif (doc.document.uri === editor.document.uri) {\n\t\t\t\t\t\tdecorate(editor);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tdecorate(editor);\n\t\t\t}\n\t\t}),\n\n\t\t{ dispose() { cachedLastParse = undefined; documentChangeListener?.dispose(); } }\n\t);\n}\n\n\nfunction relativePathToUri(path: string, resultsUri: vscode.Uri): vscode.Uri | undefined {\n\n\tconst userDataPrefix = '(Settings) ';\n\tif (path.startsWith(userDataPrefix)) {\n\t\treturn vscode.Uri.file(path.slice(userDataPrefix.length)).with({ scheme: 'vscode-userdata' });\n\t}\n\n\tif (pathUtils.isAbsolute(path)) {\n\t\tif (/^[\\\\\\/]Untitled-\\d*$/.test(path)) {\n\t\t\treturn vscode.Uri.file(path.slice(1)).with({ scheme: 'untitled', path: path.slice(1) });\n\t\t}\n\t\treturn vscode.Uri.file(path);\n\t}\n\n\tif (path.indexOf('~/') === 0) {\n\t\tconst homePath = process.env.HOME || process.env.HOMEPATH || '';\n\t\treturn vscode.Uri.file(pathUtils.join(homePath, path.slice(2)));\n\t}\n\n\tconst uriFromFolderWithPath = (folder: vscode.WorkspaceFolder, path: string): vscode.Uri =>\n\t\tvscode.Uri.joinPath(folder.uri, path);\n\n\tif (vscode.workspace.workspaceFolders) {\n\t\tconst multiRootFormattedPath = /^(.*) • (.*)$/.exec(path);\n\t\tif (multiRootFormattedPath) {\n\t\t\tconst [, workspaceName, workspacePath] = multiRootFormattedPath;\n\t\t\tconst folder = vscode.workspace.workspaceFolders.filter(wf => wf.name === workspaceName)[0];\n\t\t\tif (folder) {\n\t\t\t\treturn uriFromFolderWithPath(folder, workspacePath);\n\t\t\t}\n\t\t}\n\t\telse if (vscode.workspace.workspaceFolders.length === 1) {\n\t\t\treturn uriFromFolderWithPath(vscode.workspace.workspaceFolders[0], path);\n\t\t} else if (resultsUri.scheme !== 'untitled') {\n\t\t\t// We're in a multi-root workspace, but the path is not multi-root formatted\n\t\t\t// Possibly a saved search from a single root session. Try checking if the search result document's URI is in a current workspace folder.\n\t\t\tconst prefixMatch = vscode.workspace.workspaceFolders.filter(wf => resultsUri.toString().startsWith(wf.uri.toString()))[0];\n\t\t\tif (prefixMatch) {\n\t\t\t\treturn uriFromFolderWithPath(prefixMatch, path);\n\t\t\t}\n\t\t}\n\t}\n\n\tconsole.error(`Unable to resolve path ${path}`);\n\treturn undefined;\n}\n\ntype ParsedSearchFileLine = { type: 'file'; location: vscode.LocationLink; allLocations: vscode.LocationLink[]; path: string };\ntype ParsedSearchResultLine = { type: 'result'; locations: Required<vscode.LocationLink>[]; isContext: boolean; prefixRange: vscode.Range };\ntype ParsedSearchResults = Array<ParsedSearchFileLine | ParsedSearchResultLine>;\nconst isFileLine = (line: ParsedSearchResultLine | ParsedSearchFileLine): line is ParsedSearchFileLine => line.type === 'file';\nconst isResultLine = (line: ParsedSearchResultLine | ParsedSearchFileLine): line is ParsedSearchResultLine => line.type === 'result';\n\n\nfunction parseSearchResults(document: vscode.TextDocument, token?: vscode.CancellationToken): ParsedSearchResults {\n\n\tif (cachedLastParse && cachedLastParse.uri === document.uri && cachedLastParse.version === document.version) {\n\t\treturn cachedLastParse.parse;\n\t}\n\n\tconst lines = document.getText().split(/\\r?\\n/);\n\tconst links: ParsedSearchResults = [];\n\n\tlet currentTarget: vscode.Uri | undefined = undefined;\n\tlet currentTargetLocations: vscode.LocationLink[] | undefined = undefined;\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\t// TODO: This is probably always false, given we're pegging the thread...\n\t\tif (token?.isCancellationRequested) { return []; }\n\t\tconst line = lines[i];\n\n\t\tconst fileLine = FILE_LINE_REGEX.exec(line);\n\t\tif (fileLine) {\n\t\t\tconst [, path] = fileLine;\n\n\t\t\tcurrentTarget = relativePathToUri(path, document.uri);\n\t\t\tif (!currentTarget) { continue; }\n\t\t\tcurrentTargetLocations = [];\n\n\t\t\tconst location: vscode.LocationLink = {\n\t\t\t\ttargetRange: new vscode.Range(0, 0, 0, 1),\n\t\t\t\ttargetUri: currentTarget,\n\t\t\t\toriginSelectionRange: new vscode.Range(i, 0, i, line.length),\n\t\t\t};\n\n\n\t\t\tlinks[i] = { type: 'file', location, allLocations: currentTargetLocations, path };\n\t\t}\n\n\t\tif (!currentTarget) { continue; }\n\n\t\tconst resultLine = RESULT_LINE_REGEX.exec(line);\n\t\tif (resultLine) {\n\t\t\tconst [, indentation, _lineNumber, separator] = resultLine;\n\t\t\tconst lineNumber = +_lineNumber - 1;\n\t\t\tconst metadataOffset = (indentation + _lineNumber + separator).length;\n\t\t\tconst targetRange = new vscode.Range(Math.max(lineNumber - 3, 0), 0, lineNumber + 3, line.length);\n\n\t\t\tconst locations: Required<vscode.LocationLink>[] = [];\n\n\t\t\tlet lastEnd = metadataOffset;\n\t\t\tlet offset = 0;\n\t\t\tELISION_REGEX.lastIndex = metadataOffset;\n\t\t\tfor (let match: RegExpExecArray | null; (match = ELISION_REGEX.exec(line));) {\n\t\t\t\tlocations.push({\n\t\t\t\t\ttargetRange,\n\t\t\t\t\ttargetSelectionRange: new vscode.Range(lineNumber, offset, lineNumber, offset),\n\t\t\t\t\ttargetUri: currentTarget,\n\t\t\t\t\toriginSelectionRange: new vscode.Range(i, lastEnd, i, ELISION_REGEX.lastIndex - match[0].length),\n\t\t\t\t});\n\n\t\t\t\toffset += (ELISION_REGEX.lastIndex - lastEnd - match[0].length) + Number(match[1]);\n\t\t\t\tlastEnd = ELISION_REGEX.lastIndex;\n\t\t\t}\n\n\t\t\tif (lastEnd < line.length) {\n\t\t\t\tlocations.push({\n\t\t\t\t\ttargetRange,\n\t\t\t\t\ttargetSelectionRange: new vscode.Range(lineNumber, offset, lineNumber, offset),\n\t\t\t\t\ttargetUri: currentTarget,\n\t\t\t\t\toriginSelectionRange: new vscode.Range(i, lastEnd, i, line.length),\n\t\t\t\t});\n\t\t\t}\n\t\t\t// only show result lines in file-level peek\n\t\t\tif (separator.includes(':')) {\n\t\t\t\tcurrentTargetLocations?.push(...locations);\n\t\t\t}\n\n\t\t\t// Allow line number, indentation, etc to take you to definition as well.\n\t\t\tconst convenienceLocation: Required<vscode.LocationLink> = {\n\t\t\t\ttargetRange,\n\t\t\t\ttargetSelectionRange: new vscode.Range(lineNumber, 0, lineNumber, 1),\n\t\t\t\ttargetUri: currentTarget,\n\t\t\t\toriginSelectionRange: new vscode.Range(i, 0, i, metadataOffset - 1),\n\t\t\t};\n\t\t\tlocations.push(convenienceLocation);\n\t\t\tlinks[i] = { type: 'result', locations, isContext: separator === ' ', prefixRange: new vscode.Range(i, 0, i, metadataOffset) };\n\t\t}\n\t}\n\n\tcachedLastParse = {\n\t\tversion: document.version,\n\t\tparse: links,\n\t\turi: document.uri\n\t};\n\n\treturn links;\n}\n"
  },
  {
    "path": "extensions/search-result/syntaxes/generateTMLanguage.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// @ts-check\n\nconst mappings = [\n\t['bat', 'source.batchfile'],\n\t['c', 'source.c'],\n\t['clj', 'source.clojure'],\n\t['coffee', 'source.coffee'],\n\t['cpp', 'source.cpp', '\\\\.(?:cpp|c\\\\+\\\\+|cc|cxx|hxx|h\\\\+\\\\+|hh)'],\n\t['cs', 'source.cs'],\n\t['cshtml', 'text.html.cshtml'],\n\t['css', 'source.css'],\n\t['dart', 'source.dart'],\n\t['diff', 'source.diff'],\n\t['dockerfile', 'source.dockerfile', '(?:dockerfile|Dockerfile|containerfile|Containerfile)'],\n\t['fs', 'source.fsharp'],\n\t['go', 'source.go'],\n\t['groovy', 'source.groovy'],\n\t['h', 'source.objc'],\n\t['handlebars', 'text.html.handlebars', '\\\\.(?:handlebars|hbs)'],\n\t['hlsl', 'source.hlsl'],\n\t['hpp', 'source.objcpp'],\n\t['html', 'text.html.basic'],\n\t['ini', 'source.ini'],\n\t['java', 'source.java'],\n\t['jl', 'source.julia'],\n\t['js', 'source.js'],\n\t['json', 'source.json.comments'],\n\t['jsx', 'source.js.jsx'],\n\t['less', 'source.css.less'],\n\t['log', 'text.log'],\n\t['lua', 'source.lua'],\n\t['m', 'source.objc'],\n\t['makefile', 'source.makefile', '(?:makefile|Makefile)(?:\\\\..*)?'],\n\t['md', 'text.html.markdown'],\n\t['mm', 'source.objcpp'],\n\t['p6', 'source.perl.6'],\n\t['perl', 'source.perl', '\\\\.(?:perl|pl|pm)'],\n\t['php', 'source.php'],\n\t['ps1', 'source.powershell'],\n\t['pug', 'text.pug'],\n\t['py', 'source.python'],\n\t['r', 'source.r'],\n\t['rb', 'source.ruby'],\n\t['rs', 'source.rust'],\n\t['scala', 'source.scala'],\n\t['scss', 'source.css.scss'],\n\t['sh', 'source.shell'],\n\t['sql', 'source.sql'],\n\t['swift', 'source.swift'],\n\t['ts', 'source.ts'],\n\t['tsx', 'source.tsx'],\n\t['vb', 'source.asp.vb.net'],\n\t['xml', 'text.xml'],\n\t['yaml', 'source.yaml', '\\\\.(?:ya?ml)'],\n];\n\nconst scopes = {\n\troot: 'text.searchResult',\n\theader: {\n\t\tmeta: 'meta.header.search keyword.operator.word.search',\n\t\tkey: 'entity.other.attribute-name',\n\t\tvalue: 'entity.other.attribute-value string.unquoted',\n\t\tflags: {\n\t\t\tkeyword: 'keyword.other',\n\t\t},\n\t\tcontextLines: {\n\t\t\tnumber: 'constant.numeric.integer',\n\t\t\tinvalid: 'invalid.illegal',\n\t\t},\n\t\tquery: {\n\t\t\tescape: 'constant.character.escape',\n\t\t\tinvalid: 'invalid.illegal',\n\t\t}\n\t},\n\tresultBlock: {\n\t\tmeta: 'meta.resultBlock.search',\n\t\tpath: {\n\t\t\tmeta: 'string meta.path.search',\n\t\t\tdirname: 'meta.path.dirname.search',\n\t\t\tbasename: 'meta.path.basename.search',\n\t\t\tcolon: 'punctuation.separator',\n\t\t},\n\t\tresult: {\n\t\t\tmeta: 'meta.resultLine.search',\n\t\t\tmetaSingleLine: 'meta.resultLine.singleLine.search',\n\t\t\tmetaMultiLine: 'meta.resultLine.multiLine.search',\n\t\t\telision: 'comment meta.resultLine.elision',\n\t\t\tprefix: {\n\t\t\t\tmeta: 'constant.numeric.integer meta.resultLinePrefix.search',\n\t\t\t\tmetaContext: 'meta.resultLinePrefix.contextLinePrefix.search',\n\t\t\t\tmetaMatch: 'meta.resultLinePrefix.matchLinePrefix.search',\n\t\t\t\tlineNumber: 'meta.resultLinePrefix.lineNumber.search',\n\t\t\t\tcolon: 'punctuation.separator',\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst repository = {};\nmappings.forEach(([ext, scope, regexp]) =>\n\trepository[ext] = {\n\t\tname: scopes.resultBlock.meta,\n\t\tbegin: `^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*${regexp || `\\\\.${ext}`})(:)$`,\n\t\tend: '^(?!\\\\s)',\n\t\tbeginCaptures: {\n\t\t\t'0': { name: scopes.resultBlock.path.meta },\n\t\t\t'1': { name: scopes.resultBlock.path.dirname },\n\t\t\t'2': { name: scopes.resultBlock.path.basename },\n\t\t\t'3': { name: scopes.resultBlock.path.colon },\n\t\t},\n\t\tpatterns: [\n\t\t\t{\n\t\t\t\tname: [scopes.resultBlock.result.meta, scopes.resultBlock.result.metaMultiLine].join(' '),\n\t\t\t\tbegin: '^  (?:\\\\s*)((\\\\d+) )',\n\t\t\t\twhile: '^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))',\n\t\t\t\tbeginCaptures: {\n\t\t\t\t\t'0': { name: scopes.resultBlock.result.prefix.meta },\n\t\t\t\t\t'1': { name: scopes.resultBlock.result.prefix.metaContext },\n\t\t\t\t\t'2': { name: scopes.resultBlock.result.prefix.lineNumber },\n\t\t\t\t},\n\t\t\t\twhileCaptures: {\n\t\t\t\t\t'0': { name: scopes.resultBlock.result.prefix.meta },\n\t\t\t\t\t'1': { name: scopes.resultBlock.result.prefix.metaMatch },\n\t\t\t\t\t'2': { name: scopes.resultBlock.result.prefix.lineNumber },\n\t\t\t\t\t'3': { name: scopes.resultBlock.result.prefix.colon },\n\n\t\t\t\t\t'4': { name: scopes.resultBlock.result.prefix.metaContext },\n\t\t\t\t\t'5': { name: scopes.resultBlock.result.prefix.lineNumber },\n\t\t\t\t},\n\t\t\t\tpatterns: [{ include: scope }]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbegin: '^  (?:\\\\s*)((\\\\d+)(:))',\n\t\t\t\twhile: '(?=not)possible',\n\t\t\t\tname: [scopes.resultBlock.result.meta, scopes.resultBlock.result.metaSingleLine].join(' '),\n\t\t\t\tbeginCaptures: {\n\t\t\t\t\t'0': { name: scopes.resultBlock.result.prefix.meta },\n\t\t\t\t\t'1': { name: scopes.resultBlock.result.prefix.metaMatch },\n\t\t\t\t\t'2': { name: scopes.resultBlock.result.prefix.lineNumber },\n\t\t\t\t\t'3': { name: scopes.resultBlock.result.prefix.colon },\n\t\t\t\t},\n\t\t\t\tpatterns: [{ include: scope }]\n\t\t\t}\n\t\t]\n\t});\n\nconst header = [\n\t{\n\t\tbegin: '^(# Query): ',\n\t\tend: '\\n',\n\t\tname: scopes.header.meta,\n\t\tbeginCaptures: { '1': { name: scopes.header.key }, },\n\t\tpatterns: [\n\t\t\t{\n\t\t\t\tmatch: '(\\\\\\\\n)|(\\\\\\\\\\\\\\\\)',\n\t\t\t\tname: [scopes.header.value, scopes.header.query.escape].join(' ')\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: '\\\\\\\\.|\\\\\\\\$',\n\t\t\t\tname: [scopes.header.value, scopes.header.query.invalid].join(' ')\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: '[^\\\\\\\\\\\\\\n]+',\n\t\t\t\tname: [scopes.header.value].join(' ')\n\t\t\t},\n\t\t]\n\t},\n\t{\n\t\tbegin: '^(# Flags): ',\n\t\tend: '\\n',\n\t\tname: scopes.header.meta,\n\t\tbeginCaptures: { '1': { name: scopes.header.key }, },\n\t\tpatterns: [\n\t\t\t{\n\t\t\t\tmatch: '(RegExp|CaseSensitive|IgnoreExcludeSettings|WordMatch)',\n\t\t\t\tname: [scopes.header.value, 'keyword.other'].join(' ')\n\t\t\t},\n\t\t\t{ match: '.' },\n\t\t]\n\t},\n\t{\n\t\tbegin: '^(# ContextLines): ',\n\t\tend: '\\n',\n\t\tname: scopes.header.meta,\n\t\tbeginCaptures: { '1': { name: scopes.header.key }, },\n\t\tpatterns: [\n\t\t\t{\n\t\t\t\tmatch: '\\\\d',\n\t\t\t\tname: [scopes.header.value, scopes.header.contextLines.number].join(' ')\n\t\t\t},\n\t\t\t{ match: '.', name: scopes.header.contextLines.invalid },\n\t\t]\n\t},\n\t{\n\t\tmatch: '^(# (?:Including|Excluding)): (.*)$',\n\t\tname: scopes.header.meta,\n\t\tcaptures: {\n\t\t\t'1': { name: scopes.header.key },\n\t\t\t'2': { name: scopes.header.value }\n\t\t}\n\t},\n];\n\nconst plainText = [\n\t{\n\t\tmatch: '^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*)(:)$',\n\t\tname: [scopes.resultBlock.meta, scopes.resultBlock.path.meta].join(' '),\n\t\tcaptures: {\n\t\t\t'1': { name: scopes.resultBlock.path.dirname },\n\t\t\t'2': { name: scopes.resultBlock.path.basename },\n\t\t\t'3': { name: scopes.resultBlock.path.colon }\n\t\t}\n\t},\n\t{\n\t\tmatch: '^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+)( ))(.*))',\n\t\tname: [scopes.resultBlock.meta, scopes.resultBlock.result.meta].join(' '),\n\t\tcaptures: {\n\t\t\t'1': { name: [scopes.resultBlock.result.prefix.meta, scopes.resultBlock.result.prefix.metaMatch].join(' ') },\n\t\t\t'2': { name: scopes.resultBlock.result.prefix.lineNumber },\n\t\t\t'3': { name: scopes.resultBlock.result.prefix.colon },\n\n\t\t\t'4': { name: [scopes.resultBlock.result.prefix.meta, scopes.resultBlock.result.prefix.metaContext].join(' ') },\n\t\t\t'5': { name: scopes.resultBlock.result.prefix.lineNumber },\n\t\t}\n\t},\n\t{\n\t\tmatch: '⟪ [0-9]+ characters skipped ⟫',\n\t\tname: [scopes.resultBlock.meta, scopes.resultBlock.result.elision].join(' '),\n\t}\n];\n\nconst tmLanguage = {\n\t'information_for_contributors': 'This file is generated from ./generateTMLanguage.js.',\n\tname: 'Search Results',\n\tscopeName: scopes.root,\n\tpatterns: [\n\t\t...header,\n\t\t...mappings.map(([ext]) => ({ include: `#${ext}` })),\n\t\t...plainText\n\t],\n\trepository\n};\n\nrequire('fs').writeFileSync(\n\trequire('path').join(__dirname, './searchResult.tmLanguage.json'),\n\tJSON.stringify(tmLanguage, null, 2));\n"
  },
  {
    "path": "extensions/search-result/syntaxes/searchResult.tmLanguage.json",
    "content": "{\n  \"information_for_contributors\": \"This file is generated from ./generateTMLanguage.js.\",\n  \"name\": \"Search Results\",\n  \"scopeName\": \"text.searchResult\",\n  \"patterns\": [\n    {\n      \"begin\": \"^(# Query): \",\n      \"end\": \"\\n\",\n      \"name\": \"meta.header.search keyword.operator.word.search\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"entity.other.attribute-name\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"match\": \"(\\\\\\\\n)|(\\\\\\\\\\\\\\\\)\",\n          \"name\": \"entity.other.attribute-value string.unquoted constant.character.escape\"\n        },\n        {\n          \"match\": \"\\\\\\\\.|\\\\\\\\$\",\n          \"name\": \"entity.other.attribute-value string.unquoted invalid.illegal\"\n        },\n        {\n          \"match\": \"[^\\\\\\\\\\\\\\n]+\",\n          \"name\": \"entity.other.attribute-value string.unquoted\"\n        }\n      ]\n    },\n    {\n      \"begin\": \"^(# Flags): \",\n      \"end\": \"\\n\",\n      \"name\": \"meta.header.search keyword.operator.word.search\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"entity.other.attribute-name\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"match\": \"(RegExp|CaseSensitive|IgnoreExcludeSettings|WordMatch)\",\n          \"name\": \"entity.other.attribute-value string.unquoted keyword.other\"\n        },\n        {\n          \"match\": \".\"\n        }\n      ]\n    },\n    {\n      \"begin\": \"^(# ContextLines): \",\n      \"end\": \"\\n\",\n      \"name\": \"meta.header.search keyword.operator.word.search\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"entity.other.attribute-name\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"match\": \"\\\\d\",\n          \"name\": \"entity.other.attribute-value string.unquoted constant.numeric.integer\"\n        },\n        {\n          \"match\": \".\",\n          \"name\": \"invalid.illegal\"\n        }\n      ]\n    },\n    {\n      \"match\": \"^(# (?:Including|Excluding)): (.*)$\",\n      \"name\": \"meta.header.search keyword.operator.word.search\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"entity.other.attribute-name\"\n        },\n        \"2\": {\n          \"name\": \"entity.other.attribute-value string.unquoted\"\n        }\n      }\n    },\n    {\n      \"include\": \"#bat\"\n    },\n    {\n      \"include\": \"#c\"\n    },\n    {\n      \"include\": \"#clj\"\n    },\n    {\n      \"include\": \"#coffee\"\n    },\n    {\n      \"include\": \"#cpp\"\n    },\n    {\n      \"include\": \"#cs\"\n    },\n    {\n      \"include\": \"#cshtml\"\n    },\n    {\n      \"include\": \"#css\"\n    },\n    {\n      \"include\": \"#dart\"\n    },\n    {\n      \"include\": \"#diff\"\n    },\n    {\n      \"include\": \"#dockerfile\"\n    },\n    {\n      \"include\": \"#fs\"\n    },\n    {\n      \"include\": \"#go\"\n    },\n    {\n      \"include\": \"#groovy\"\n    },\n    {\n      \"include\": \"#h\"\n    },\n    {\n      \"include\": \"#handlebars\"\n    },\n    {\n      \"include\": \"#hlsl\"\n    },\n    {\n      \"include\": \"#hpp\"\n    },\n    {\n      \"include\": \"#html\"\n    },\n    {\n      \"include\": \"#ini\"\n    },\n    {\n      \"include\": \"#java\"\n    },\n    {\n      \"include\": \"#jl\"\n    },\n    {\n      \"include\": \"#js\"\n    },\n    {\n      \"include\": \"#json\"\n    },\n    {\n      \"include\": \"#jsx\"\n    },\n    {\n      \"include\": \"#less\"\n    },\n    {\n      \"include\": \"#log\"\n    },\n    {\n      \"include\": \"#lua\"\n    },\n    {\n      \"include\": \"#m\"\n    },\n    {\n      \"include\": \"#makefile\"\n    },\n    {\n      \"include\": \"#md\"\n    },\n    {\n      \"include\": \"#mm\"\n    },\n    {\n      \"include\": \"#p6\"\n    },\n    {\n      \"include\": \"#perl\"\n    },\n    {\n      \"include\": \"#php\"\n    },\n    {\n      \"include\": \"#ps1\"\n    },\n    {\n      \"include\": \"#pug\"\n    },\n    {\n      \"include\": \"#py\"\n    },\n    {\n      \"include\": \"#r\"\n    },\n    {\n      \"include\": \"#rb\"\n    },\n    {\n      \"include\": \"#rs\"\n    },\n    {\n      \"include\": \"#scala\"\n    },\n    {\n      \"include\": \"#scss\"\n    },\n    {\n      \"include\": \"#sh\"\n    },\n    {\n      \"include\": \"#sql\"\n    },\n    {\n      \"include\": \"#swift\"\n    },\n    {\n      \"include\": \"#ts\"\n    },\n    {\n      \"include\": \"#tsx\"\n    },\n    {\n      \"include\": \"#vb\"\n    },\n    {\n      \"include\": \"#xml\"\n    },\n    {\n      \"include\": \"#yaml\"\n    },\n    {\n      \"match\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*)(:)$\",\n      \"name\": \"meta.resultBlock.search string meta.path.search\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      }\n    },\n    {\n      \"match\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+)( ))(.*))\",\n      \"name\": \"meta.resultBlock.search meta.resultLine.search\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"constant.numeric.integer meta.resultLinePrefix.search meta.resultLinePrefix.matchLinePrefix.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        },\n        \"4\": {\n          \"name\": \"constant.numeric.integer meta.resultLinePrefix.search meta.resultLinePrefix.contextLinePrefix.search\"\n        },\n        \"5\": {\n          \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n        }\n      }\n    },\n    {\n      \"match\": \"⟪ [0-9]+ characters skipped ⟫\",\n      \"name\": \"meta.resultBlock.search comment meta.resultLine.elision\"\n    }\n  ],\n  \"repository\": {\n    \"bat\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.bat)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.batchfile\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.batchfile\"\n            }\n          ]\n        }\n      ]\n    },\n    \"c\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.c)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.c\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.c\"\n            }\n          ]\n        }\n      ]\n    },\n    \"clj\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.clj)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.clojure\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.clojure\"\n            }\n          ]\n        }\n      ]\n    },\n    \"coffee\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.coffee)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.coffee\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.coffee\"\n            }\n          ]\n        }\n      ]\n    },\n    \"cpp\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.(?:cpp|c\\\\+\\\\+|cc|cxx|hxx|h\\\\+\\\\+|hh))(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.cpp\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.cpp\"\n            }\n          ]\n        }\n      ]\n    },\n    \"cs\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.cs)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.cs\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.cs\"\n            }\n          ]\n        }\n      ]\n    },\n    \"cshtml\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.cshtml)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.cshtml\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.cshtml\"\n            }\n          ]\n        }\n      ]\n    },\n    \"css\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.css)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.css\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.css\"\n            }\n          ]\n        }\n      ]\n    },\n    \"dart\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.dart)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.dart\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.dart\"\n            }\n          ]\n        }\n      ]\n    },\n    \"diff\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.diff)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.diff\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.diff\"\n            }\n          ]\n        }\n      ]\n    },\n    \"dockerfile\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*(?:dockerfile|Dockerfile|containerfile|Containerfile))(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.dockerfile\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.dockerfile\"\n            }\n          ]\n        }\n      ]\n    },\n    \"fs\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.fs)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.fsharp\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.fsharp\"\n            }\n          ]\n        }\n      ]\n    },\n    \"go\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.go)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.go\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.go\"\n            }\n          ]\n        }\n      ]\n    },\n    \"groovy\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.groovy)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.groovy\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.groovy\"\n            }\n          ]\n        }\n      ]\n    },\n    \"h\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.h)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objc\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objc\"\n            }\n          ]\n        }\n      ]\n    },\n    \"handlebars\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.(?:handlebars|hbs))(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.handlebars\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.handlebars\"\n            }\n          ]\n        }\n      ]\n    },\n    \"hlsl\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.hlsl)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.hlsl\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.hlsl\"\n            }\n          ]\n        }\n      ]\n    },\n    \"hpp\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.hpp)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objcpp\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objcpp\"\n            }\n          ]\n        }\n      ]\n    },\n    \"html\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.html)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.basic\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.basic\"\n            }\n          ]\n        }\n      ]\n    },\n    \"ini\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.ini)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.ini\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.ini\"\n            }\n          ]\n        }\n      ]\n    },\n    \"java\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.java)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.java\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.java\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jl\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.jl)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.julia\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.julia\"\n            }\n          ]\n        }\n      ]\n    },\n    \"js\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.js)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.js\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.js\"\n            }\n          ]\n        }\n      ]\n    },\n    \"json\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.json)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.json.comments\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.json.comments\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.jsx)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.js.jsx\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.js.jsx\"\n            }\n          ]\n        }\n      ]\n    },\n    \"less\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.less)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.css.less\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.css.less\"\n            }\n          ]\n        }\n      ]\n    },\n    \"log\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.log)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.log\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.log\"\n            }\n          ]\n        }\n      ]\n    },\n    \"lua\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.lua)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.lua\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.lua\"\n            }\n          ]\n        }\n      ]\n    },\n    \"m\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.m)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objc\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objc\"\n            }\n          ]\n        }\n      ]\n    },\n    \"makefile\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*(?:makefile|Makefile)(?:\\\\..*)?)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.makefile\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.makefile\"\n            }\n          ]\n        }\n      ]\n    },\n    \"md\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.md)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.markdown\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.html.markdown\"\n            }\n          ]\n        }\n      ]\n    },\n    \"mm\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.mm)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objcpp\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.objcpp\"\n            }\n          ]\n        }\n      ]\n    },\n    \"p6\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.p6)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.perl.6\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.perl.6\"\n            }\n          ]\n        }\n      ]\n    },\n    \"perl\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.(?:perl|pl|pm))(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.perl\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.perl\"\n            }\n          ]\n        }\n      ]\n    },\n    \"php\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.php)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.php\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.php\"\n            }\n          ]\n        }\n      ]\n    },\n    \"ps1\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.ps1)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.powershell\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.powershell\"\n            }\n          ]\n        }\n      ]\n    },\n    \"pug\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.pug)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.pug\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.pug\"\n            }\n          ]\n        }\n      ]\n    },\n    \"py\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.py)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.python\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.python\"\n            }\n          ]\n        }\n      ]\n    },\n    \"r\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.r)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.r\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.r\"\n            }\n          ]\n        }\n      ]\n    },\n    \"rb\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.rb)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.ruby\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.ruby\"\n            }\n          ]\n        }\n      ]\n    },\n    \"rs\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.rs)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.rust\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.rust\"\n            }\n          ]\n        }\n      ]\n    },\n    \"scala\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.scala)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.scala\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.scala\"\n            }\n          ]\n        }\n      ]\n    },\n    \"scss\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.scss)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.css.scss\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.css.scss\"\n            }\n          ]\n        }\n      ]\n    },\n    \"sh\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.sh)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.shell\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.shell\"\n            }\n          ]\n        }\n      ]\n    },\n    \"sql\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.sql)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.sql\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.sql\"\n            }\n          ]\n        }\n      ]\n    },\n    \"swift\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.swift)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.swift\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.swift\"\n            }\n          ]\n        }\n      ]\n    },\n    \"ts\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.ts)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.ts\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.ts\"\n            }\n          ]\n        }\n      ]\n    },\n    \"tsx\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.tsx)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.tsx\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.tsx\"\n            }\n          ]\n        }\n      ]\n    },\n    \"vb\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.vb)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.asp.vb.net\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.asp.vb.net\"\n            }\n          ]\n        }\n      ]\n    },\n    \"xml\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.xml)(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.xml\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"text.xml\"\n            }\n          ]\n        }\n      ]\n    },\n    \"yaml\": {\n      \"name\": \"meta.resultBlock.search\",\n      \"begin\": \"^(?!\\\\s)(.*?)([^\\\\\\\\\\\\/\\\\n]*\\\\.(?:ya?ml))(:)$\",\n      \"end\": \"^(?!\\\\s)\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"string meta.path.search\"\n        },\n        \"1\": {\n          \"name\": \"meta.path.dirname.search\"\n        },\n        \"2\": {\n          \"name\": \"meta.path.basename.search\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"meta.resultLine.search meta.resultLine.multiLine.search\",\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+) )\",\n          \"while\": \"^  (?:\\\\s*)(?:((\\\\d+)(:))|((\\\\d+) ))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"whileCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            },\n            \"4\": {\n              \"name\": \"meta.resultLinePrefix.contextLinePrefix.search\"\n            },\n            \"5\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.yaml\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"^  (?:\\\\s*)((\\\\d+)(:))\",\n          \"while\": \"(?=not)possible\",\n          \"name\": \"meta.resultLine.search meta.resultLine.singleLine.search\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.integer meta.resultLinePrefix.search\"\n            },\n            \"1\": {\n              \"name\": \"meta.resultLinePrefix.matchLinePrefix.search\"\n            },\n            \"2\": {\n              \"name\": \"meta.resultLinePrefix.lineNumber.search\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"source.yaml\"\n            }\n          ]\n        }\n      ]\n    }\n  }\n}"
  },
  {
    "path": "extensions/search-result/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/shaderlab/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/shaderlab/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"shaders-tmLanguage\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/tgjones/shaders-tmLanguage\",\n\t\t\t\t\t\"commitHash\": \"c72c8b39380ba5a86c58ceed053b5d965ebf38b3\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/shaderlab/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [ \"/*\", \"*/\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"]\n\t]\n}\n"
  },
  {
    "path": "extensions/shaderlab/package.json",
    "content": "{\n  \"name\": \"shaderlab\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin tgjones/shaders-tmLanguage grammars/shaderlab.json ./syntaxes/shaderlab.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"shaderlab\",\n        \"extensions\": [\n          \".shader\"\n        ],\n        \"aliases\": [\n          \"ShaderLab\",\n          \"shaderlab\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"shaderlab\",\n        \"path\": \"./syntaxes/shaderlab.tmLanguage.json\",\n        \"scopeName\": \"source.shaderlab\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/shaderlab/package.nls.json",
    "content": "{\n\t\"displayName\": \"Shaderlab Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Shaderlab files.\"\n}\n"
  },
  {
    "path": "extensions/shaderlab/syntaxes/shaderlab.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/tgjones/shaders-tmLanguage/blob/master/grammars/shaderlab.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/tgjones/shaders-tmLanguage/commit/c72c8b39380ba5a86c58ceed053b5d965ebf38b3\",\n\t\"name\": \"ShaderLab\",\n\t\"scopeName\": \"source.shaderlab\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"name\": \"comment.line.double-slash.shaderlab\",\n\t\t\t\"begin\": \"//\",\n\t\t\t\"end\": \"$\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.basic.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Range|Float|Int|Color|Vector|2D|3D|Cube|Any)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#numbers\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"storage.type.structure.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Shader|Properties|SubShader|Pass|Category)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.type.propertyname.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Name|Tags|Fallback|CustomEditor|Cull|ZWrite|ZTest|Offset|Blend|BlendOp|ColorMask|AlphaToMask|LOD|Lighting|Stencil|Ref|ReadMask|WriteMask|Comp|CompBack|CompFront|Fail|ZFail|UsePass|GrabPass|Dependency|Material|Diffuse|Ambient|Shininess|Specular|Emission|Fog|Mode|Density|SeparateSpecular|SetTexture|Combine|ConstantColor|Matrix|AlphaTest|ColorMaterial|BindChannels|Bind)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Back|Front|On|Off|[RGBA]{1,3}|AmbientAndDiffuse|Emission)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.comparisonfunction.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Less|Greater|LEqual|GEqual|Equal|NotEqual|Always|Never)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.stenciloperation.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Keep|Zero|Replace|IncrSat|DecrSat|Invert|IncrWrap|DecrWrap)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.texturecombiners.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Previous|Primary|Texture|Constant|Lerp|Double|Quad|Alpha)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.fog.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Global|Linear|Exp2|Exp)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.bindchannels.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Vertex|Normal|Tangent|TexCoord0|TexCoord1)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.blendoperations.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:Add|Sub|RevSub|Min|Max|LogicalClear|LogicalSet|LogicalCopyInverted|LogicalCopy|LogicalNoop|LogicalInvert|LogicalAnd|LogicalNand|LogicalOr|LogicalNor|LogicalXor|LogicalEquiv|LogicalAndReverse|LogicalAndInverted|LogicalOrReverse|LogicalOrInverted)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.constant.property-value.blendfactors.shaderlab\",\n\t\t\t\"match\": \"\\\\b(?i:One|Zero|SrcColor|SrcAlpha|DstColor|DstAlpha|OneMinusSrcColor|OneMinusSrcAlpha|OneMinusDstColor|OneMinusDstAlpha)\\\\b\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.variable.reference.shaderlab\",\n\t\t\t\"match\": \"\\\\[([a-zA-Z_][a-zA-Z0-9_]*)\\\\](?!\\\\s*[a-zA-Z_][a-zA-Z0-9_]*\\\\s*\\\\(\\\")\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.attribute.shaderlab\",\n\t\t\t\"begin\": \"(\\\\[)\",\n\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.type.attributename.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\G([a-zA-Z]+)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numbers\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"support.variable.declaration.shaderlab\",\n\t\t\t\"match\": \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)\\\\s*\\\\(\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.cgblock\",\n\t\t\t\"begin\": \"\\\\b(CGPROGRAM|CGINCLUDE)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\b(ENDCG)\\\\b\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#hlsl-embedded\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"meta.hlslblock\",\n\t\t\t\"begin\": \"\\\\b(HLSLPROGRAM|HLSLINCLUDE)\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\b(ENDHLSL)\\\\b\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#hlsl-embedded\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"string.quoted.double.shaderlab\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"numbers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b([0-9]+\\\\.?[0-9]*)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"hlsl-embedded\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"source.hlsl\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.basic.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(fixed([1-4](x[1-4])?)?)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.transformations.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(UNITY_MATRIX_MVP|UNITY_MATRIX_MV|UNITY_MATRIX_M|UNITY_MATRIX_V|UNITY_MATRIX_P|UNITY_MATRIX_VP|UNITY_MATRIX_T_MV|UNITY_MATRIX_I_V|UNITY_MATRIX_IT_MV|_Object2World|_World2Object|unity_ObjectToWorld|unity_WorldToObject)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.camera.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(_WorldSpaceCameraPos|_ProjectionParams|_ScreenParams|_ZBufferParams|unity_OrthoParams|unity_CameraProjection|unity_CameraInvProjection|unity_CameraWorldClipPlanes)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.time.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(_Time|_SinTime|_CosTime|unity_DeltaTime)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.lighting.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(_LightColor0|_WorldSpaceLightPos0|_LightMatrix0|unity_4LightPosX0|unity_4LightPosY0|unity_4LightPosZ0|unity_4LightAtten0|unity_LightColor|_LightColor|unity_LightPosition|unity_LightAtten|unity_SpotDirection)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.fog.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(unity_AmbientSky|unity_AmbientEquator|unity_AmbientGround|UNITY_LIGHTMODEL_AMBIENT|unity_FogColor|unity_FogParams)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.various.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(unity_LODFade)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.preprocessor.targetplatform.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(SHADER_API_D3D9|SHADER_API_D3D11|SHADER_API_GLCORE|SHADER_API_OPENGL|SHADER_API_GLES|SHADER_API_GLES3|SHADER_API_METAL|SHADER_API_D3D11_9X|SHADER_API_PSSL|SHADER_API_XBOXONE|SHADER_API_PSP2|SHADER_API_WIIU|SHADER_API_MOBILE|SHADER_API_GLSL)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.preprocessor.targetmodel.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(SHADER_TARGET)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.preprocessor.unityversion.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(UNITY_VERSION)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.preprocessor.platformdifference.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(UNITY_BRANCH|UNITY_FLATTEN|UNITY_NO_SCREENSPACE_SHADOWS|UNITY_NO_LINEAR_COLORSPACE|UNITY_NO_RGBM|UNITY_NO_DXT5nm|UNITY_FRAMEBUFFER_FETCH_AVAILABLE|UNITY_USE_RGBA_FOR_POINT_SHADOWS|UNITY_ATTEN_CHANNEL|UNITY_HALF_TEXEL_OFFSET|UNITY_UV_STARTS_AT_TOP|UNITY_MIGHT_NOT_HAVE_DEPTH_Texture|UNITY_NEAR_CLIP_VALUE|UNITY_VPOS_TYPE|UNITY_CAN_COMPILE_TESSELLATION|UNITY_COMPILER_HLSL|UNITY_COMPILER_HLSL2GLSL|UNITY_COMPILER_CG|UNITY_REVERSED_Z)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.preprocessor.texture2D.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(UNITY_PASS_FORWARDBASE|UNITY_PASS_FORWARDADD|UNITY_PASS_DEFERRED|UNITY_PASS_SHADOWCASTER|UNITY_PASS_PREPASSBASE|UNITY_PASS_PREPASSFINAL)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.structures.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(appdata_base|appdata_tan|appdata_full|appdata_img)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.surface.shaderlab\",\n\t\t\t\t\t\"match\": \"\\\\b(SurfaceOutputStandardSpecular|SurfaceOutputStandard|SurfaceOutput|Input)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/shared.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n/** @typedef {import('webpack').Configuration} WebpackConfig **/\n\n'use strict';\n\nconst path = require('path');\nconst fs = require('fs');\nconst merge = require('merge-options');\nconst CopyWebpackPlugin = require('copy-webpack-plugin');\nconst { DefinePlugin, optimize } = require('webpack');\n\nconst tsLoaderOptions = {\n\tcompilerOptions: {\n\t\t'sourceMap': true,\n\t},\n\tonlyCompileBundledFiles: true,\n};\n\nfunction withNodeDefaults(/**@type WebpackConfig & { context: string }*/extConfig) {\n\tconst defaultConfig = {\n\t\tmode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')\n\t\ttarget: 'node', // extensions run in a node context\n\t\tnode: {\n\t\t\t__dirname: false // leave the __dirname-behaviour intact\n\t\t},\n\n\t\tresolve: {\n\t\t\tconditionNames: ['import', 'require', 'node-addons', 'node'],\n\t\t\tmainFields: ['module', 'main'],\n\t\t\textensions: ['.ts', '.js'], // support ts-files and js-files\n\t\t\textensionAlias: {\n\t\t\t\t// this is needed to resolve dynamic imports that now require the .js extension\n\t\t\t\t'.js': ['.js', '.ts'],\n\t\t\t}\n\t\t},\n\t\tmodule: {\n\t\t\trules: [{\n\t\t\t\ttest: /\\.ts$/,\n\t\t\t\texclude: /node_modules/,\n\t\t\t\tuse: [{\n\t\t\t\t\t// configure TypeScript loader:\n\t\t\t\t\t// * enable sources maps for end-to-end source maps\n\t\t\t\t\tloader: 'ts-loader',\n\t\t\t\t\toptions: tsLoaderOptions\n\t\t\t\t}, {\n\t\t\t\t\tloader: path.resolve(__dirname, 'mangle-loader.js'),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfigFile: path.join(extConfig.context, 'tsconfig.json')\n\t\t\t\t\t},\n\t\t\t\t},]\n\t\t\t}]\n\t\t},\n\t\texternals: {\n\t\t\t'electron': 'commonjs electron', // ignored to avoid bundling from node_modules\n\t\t\t'vscode': 'commonjs vscode', // ignored because it doesn't exist,\n\t\t\t'applicationinsights-native-metrics': 'commonjs applicationinsights-native-metrics', // ignored because we don't ship native module\n\t\t\t'@azure/functions-core': 'commonjs azure/functions-core', // optioinal dependency of appinsights that we don't use\n\t\t\t'@opentelemetry/tracing': 'commonjs @opentelemetry/tracing', // ignored because we don't ship this module\n\t\t\t'@opentelemetry/instrumentation': 'commonjs @opentelemetry/instrumentation', // ignored because we don't ship this module\n\t\t\t'@azure/opentelemetry-instrumentation-azure-sdk': 'commonjs @azure/opentelemetry-instrumentation-azure-sdk', // ignored because we don't ship this module\n\t\t},\n\t\toutput: {\n\t\t\t// all output goes into `dist`.\n\t\t\t// packaging depends on that and this must always be like it\n\t\t\tfilename: '[name].js',\n\t\t\tpath: path.join(extConfig.context, 'dist'),\n\t\t\tlibraryTarget: 'commonjs',\n\t\t},\n\t\t// yes, really source maps\n\t\tdevtool: 'source-map',\n\t\tplugins: nodePlugins(extConfig.context),\n\t};\n\n\treturn merge(defaultConfig, extConfig);\n}\n\n/**\n *\n * @param {string} context\n */\nfunction nodePlugins(context) {\n\t// Need to find the top-most `package.json` file\n\tconst folderName = path.relative(__dirname, context).split(/[\\\\\\/]/)[0];\n\tconst pkgPath = path.join(__dirname, folderName, 'package.json');\n\tconst pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n\tconst id = `${pkg.publisher}.${pkg.name}`;\n\treturn [\n\t\tnew CopyWebpackPlugin({\n\t\t\tpatterns: [\n\t\t\t\t{ from: 'src', to: '.', globOptions: { ignore: ['**/test/**', '**/*.ts'] }, noErrorOnMissing: true }\n\t\t\t]\n\t\t})\n\t];\n}\n/**\n * @typedef {{\n * \tconfigFile?: string\n * }} AdditionalBrowserConfig\n */\n\nfunction withBrowserDefaults(/**@type WebpackConfig & { context: string }*/extConfig, /** @type AdditionalBrowserConfig */ additionalOptions = {}) {\n\t/** @type WebpackConfig */\n\tconst defaultConfig = {\n\t\tmode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')\n\t\ttarget: 'webworker', // extensions run in a webworker context\n\t\tresolve: {\n\t\t\tmainFields: ['browser', 'module', 'main'],\n\t\t\textensions: ['.ts', '.js'], // support ts-files and js-files\n\t\t\tfallback: {\n\t\t\t\t'path': require.resolve('path-browserify'),\n\t\t\t\t'os': require.resolve('os-browserify'),\n\t\t\t\t'util': require.resolve('util')\n\t\t\t},\n\t\t\textensionAlias: {\n\t\t\t\t// this is needed to resolve dynamic imports that now require the .js extension\n\t\t\t\t'.js': ['.js', '.ts'],\n\t\t\t},\n\t\t},\n\t\tmodule: {\n\t\t\trules: [{\n\t\t\t\ttest: /\\.ts$/,\n\t\t\t\texclude: /node_modules/,\n\t\t\t\tuse: [\n\t\t\t\t\t{\n\t\t\t\t\t\t// configure TypeScript loader:\n\t\t\t\t\t\t// * enable sources maps for end-to-end source maps\n\t\t\t\t\t\tloader: 'ts-loader',\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t...tsLoaderOptions,\n\t\t\t\t\t\t\t//\t\t\t\t\t\t\t...(additionalOptions ? {} : { configFile: additionalOptions.configFile }),\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tloader: path.resolve(__dirname, 'mangle-loader.js'),\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tconfigFile: path.join(extConfig.context, additionalOptions?.configFile ?? 'tsconfig.json')\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttest: /\\.wasm$/,\n\t\t\t\ttype: 'asset/inline'\n\t\t\t}]\n\t\t},\n\t\texternals: {\n\t\t\t'vscode': 'commonjs vscode', // ignored because it doesn't exist,\n\t\t\t'applicationinsights-native-metrics': 'commonjs applicationinsights-native-metrics', // ignored because we don't ship native module\n\t\t\t'@azure/functions-core': 'commonjs azure/functions-core', // optioinal dependency of appinsights that we don't use\n\t\t\t'@opentelemetry/tracing': 'commonjs @opentelemetry/tracing', // ignored because we don't ship this module\n\t\t\t'@opentelemetry/instrumentation': 'commonjs @opentelemetry/instrumentation', // ignored because we don't ship this module\n\t\t\t'@azure/opentelemetry-instrumentation-azure-sdk': 'commonjs @azure/opentelemetry-instrumentation-azure-sdk', // ignored because we don't ship this module\n\t\t},\n\t\tperformance: {\n\t\t\thints: false\n\t\t},\n\t\toutput: {\n\t\t\t// all output goes into `dist`.\n\t\t\t// packaging depends on that and this must always be like it\n\t\t\tfilename: '[name].js',\n\t\t\tpath: path.join(extConfig.context, 'dist', 'browser'),\n\t\t\tlibraryTarget: 'commonjs',\n\t\t},\n\t\t// yes, really source maps\n\t\tdevtool: 'source-map',\n\t\tplugins: browserPlugins(extConfig.context)\n\t};\n\n\treturn merge(defaultConfig, extConfig);\n}\n\n/**\n *\n * @param {string} context\n */\nfunction browserPlugins(context) {\n\t// Need to find the top-most `package.json` file\n\t// const folderName = path.relative(__dirname, context).split(/[\\\\\\/]/)[0];\n\t// const pkgPath = path.join(__dirname, folderName, 'package.json');\n\t// const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n\t// const id = `${pkg.publisher}.${pkg.name}`;\n\treturn [\n\t\tnew optimize.LimitChunkCountPlugin({\n\t\t\tmaxChunks: 1\n\t\t}),\n\t\tnew CopyWebpackPlugin({\n\t\t\tpatterns: [\n\t\t\t\t{ from: 'src', to: '.', globOptions: { ignore: ['**/test/**', '**/*.ts'] }, noErrorOnMissing: true }\n\t\t\t]\n\t\t}),\n\t\tnew DefinePlugin({\n\t\t\t'process.platform': JSON.stringify('web'),\n\t\t\t'process.env': JSON.stringify({}),\n\t\t\t'process.env.BROWSER_ENV': JSON.stringify('true')\n\t\t})\n\t];\n}\n\nmodule.exports = withNodeDefaults;\nmodule.exports.node = withNodeDefaults;\nmodule.exports.browser = withBrowserDefaults;\nmodule.exports.nodePlugins = nodePlugins;\nmodule.exports.browserPlugins = browserPlugins;\n"
  },
  {
    "path": "extensions/shellscript/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/shellscript/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jeff-hykin/better-shell-syntax\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jeff-hykin/better-shell-syntax\",\n\t\t\t\t\t\"commitHash\": \"35020b0bd79a90d3b262b4c13a8bb0b33adc1f45\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.8.7\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/shellscript/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"#\"\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"`\", \"close\": \"`\", \"notIn\": [\"string\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"`\", \"`\"]\n\t],\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*#\\\\s*#?region\\\\b.*\",\n\t\t\t\"end\": \"^\\\\s*#\\\\s*#?endregion\\\\b.*\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "extensions/shellscript/package.json",
    "content": "{\n  \"name\": \"shellscript\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin jeff-hykin/better-shell-syntax autogenerated/shell.tmLanguage.json ./syntaxes/shell-unix-bash.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"shellscript\",\n        \"aliases\": [\n          \"Shell Script\",\n          \"shellscript\",\n          \"bash\",\n          \"fish\",\n          \"sh\",\n          \"zsh\",\n          \"ksh\",\n          \"csh\"\n        ],\n        \"extensions\": [\n          \".sh\",\n          \".bash\",\n          \".bashrc\",\n          \".bash_aliases\",\n          \".bash_profile\",\n          \".bash_login\",\n          \".ebuild\",\n          \".eclass\",\n          \".profile\",\n          \".bash_logout\",\n          \".xprofile\",\n          \".xsession\",\n          \".xsessionrc\",\n          \".Xsession\",\n          \".zsh\",\n          \".zshrc\",\n          \".zprofile\",\n          \".zlogin\",\n          \".zlogout\",\n          \".zshenv\",\n          \".zsh-theme\",\n          \".fish\",\n          \".ksh\",\n          \".csh\",\n          \".cshrc\",\n          \".tcshrc\",\n          \".yashrc\",\n          \".yash_profile\"\n        ],\n        \"filenames\": [\n          \"APKBUILD\",\n          \"PKGBUILD\",\n          \".envrc\",\n          \".hushlogin\",\n          \"zshrc\",\n          \"zshenv\",\n          \"zlogin\",\n          \"zprofile\",\n          \"zlogout\",\n          \"bashrc_Apple_Terminal\",\n          \"zshrc_Apple_Terminal\"\n        ],\n        \"filenamePatterns\": [\n          \".env.*\"\n        ],\n        \"firstLine\": \"^#!.*\\\\b(bash|fish|zsh|sh|ksh|dtksh|pdksh|mksh|ash|dash|yash|sh|csh|jcsh|tcsh|itcsh).*|^#\\\\s*-\\\\*-[^*]*mode:\\\\s*shell-script[^*]*-\\\\*-\",\n        \"configuration\": \"./language-configuration.json\",\n        \"mimetypes\": [\n          \"text/x-shellscript\"\n        ]\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"shellscript\",\n        \"scopeName\": \"source.shell\",\n        \"path\": \"./syntaxes/shell-unix-bash.tmLanguage.json\",\n        \"balancedBracketScopes\": [\n          \"*\"\n        ],\n        \"unbalancedBracketScopes\": [\n          \"meta.scope.case-pattern.shell\"\n        ]\n      }\n    ],\n    \"configurationDefaults\": {\n      \"[shellscript]\": {\n        \"files.eol\": \"\\n\",\n        \"editor.defaultColorDecorators\": \"never\"\n      }\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/shellscript/package.nls.json",
    "content": "{\n\t\"displayName\": \"Shell Script Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in Shell Script files.\"\n}\n"
  },
  {
    "path": "extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jeff-hykin/better-shell-syntax/blob/master/autogenerated/shell.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jeff-hykin/better-shell-syntax/commit/35020b0bd79a90d3b262b4c13a8bb0b33adc1f45\",\n\t\"name\": \"Shell Script\",\n\t\"scopeName\": \"source.shell\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#initial_context\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"alias_statement\": {\n\t\t\t\"begin\": \"(?:(?:[ \\\\t]*+)(alias)(?:[ \\\\t]*+)((?:(?:((?<!\\\\w)-\\\\w+\\\\b)(?:[ \\\\t]*+))*))(?:(?:[ \\\\t]*+)(?:((?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))(?:(?:(\\\\[)((?:(?:(?:(?:\\\\$?)(?:(?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))|@)|\\\\*)|(-?\\\\d+)))(\\\\]))?))(?:(?:(\\\\=)|(\\\\+\\\\=))|(\\\\-\\\\=))))\",\n\t\t\t\"end\": \"(?:(?= |\\\\t|$)|(?:(?:(?:(;)|(&&))|(\\\\|\\\\|))|(&)))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.alias.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)-\\\\w+\\\\b\",\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.argument.shell constant.other.option.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"string.unquoted.argument.shell constant.other.option.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.integer.shell\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.semicolon.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.statement.and.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.statement.or.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.statement.background.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.expression.assignment.alias.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"argument\": {\n\t\t\t\"begin\": \"(?:[ \\\\t]++)(?!(?:&|\\\\||\\\\(|\\\\[|#|\\\\n|$|;))\",\n\t\t\t\"end\": \"(?= |\\\\t|;|\\\\||&|$|\\\\n|\\\\)|\\\\`)\",\n\t\t\t\"beginCaptures\": {},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.argument.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"argument_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[ \\\\t]*+)((?:[^ \\t\\n>&;<>\\\\(\\\\)\\\\$`\\\\\\\\\\\"'<\\\\|]+)(?!>))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.argument.shell\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.language.special.wildcard.shell\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#numeric_literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(\\\\b(?:true|false)\\\\b)(?!\\\\w)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.language.$1.shell\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arithmetic_double\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)(?:\\\\s*)\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arithmetic.double.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arithmetic.double.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.arithmetic.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#math\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arithmetic_no_dollar\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arithmetic.single.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.arithmetic.single.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.arithmetic.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#math\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array_access_inline\": {\n\t\t\t\"match\": \"(?:(\\\\[)([^\\\\[\\\\]]+)(\\\\]))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_expansion\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.section.array.shell\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"array_value\": {\n\t\t\t\"begin\": \"(?:[ \\\\t]*+)(?:((?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))(?:(?:(\\\\[)((?:(?:(?:(?:\\\\$?)(?:(?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))|@)|\\\\*)|(-?\\\\d+)))(\\\\]))?))(?:(?:(\\\\=)|(\\\\+\\\\=))|(\\\\-\\\\=))(?:[ \\\\t]*+)(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.integer.shell\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:((?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))(\\\\=))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.array.shell entity.other.attribute-name.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.shell punctuation.definition.assignment.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\[)(.+?)(\\\\])(\\\\=))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.named-array.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.shell entity.other.attribute-name.bracket.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.named-array.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.assignment.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_unquoted\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"assignment_statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array_value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#modified_assignment_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_assignment_statement\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"basic_command_name\": {\n\t\t\t\"match\": \"(?:(?:(?!(?:!|&|\\\\||\\\\(|\\\\)|\\\\{|\\\\[|<|>|#|\\\\n|$|;|[ \\\\t]))(?!nocorrect |nocorrect\\t|nocorrect$|readonly |readonly\\t|readonly$|function |function\\t|function$|foreach |foreach\\t|foreach$|coproc |coproc\\t|coproc$|logout |logout\\t|logout$|export |export\\t|export$|select |select\\t|select$|repeat |repeat\\t|repeat$|pushd |pushd\\t|pushd$|until |until\\t|until$|while |while\\t|while$|local |local\\t|local$|case |case\\t|case$|done |done\\t|done$|elif |elif\\t|elif$|else |else\\t|else$|esac |esac\\t|esac$|popd |popd\\t|popd$|then |then\\t|then$|time |time\\t|time$|for |for\\t|for$|end |end\\t|end$|fi |fi\\t|fi$|do |do\\t|do$|in |in\\t|in$|if |if\\t|if$))(?:((?<=^|;|&|[ \\\\t])(?:readonly|declare|typeset|export|local)(?=[ \\\\t]|;|&|$))|((?!\\\"|'|\\\\\\\\\\\\n?$)(?:[^!'\\\"<> \\\\t\\\\n\\\\r]+?)))(?:(?= |\\\\t)|(?:(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$1.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.call.shell entity.name.command.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:continue|return|break)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"keyword.control.$0.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:unfunction|continue|autoload|unsetopt|bindkey|builtin|getopts|command|declare|unalias|history|unlimit|typeset|suspend|source|printf|unhash|disown|ulimit|return|which|alias|break|false|print|shift|times|umask|umask|unset|read|type|exec|eval|wait|echo|dirs|jobs|kill|hash|stat|exit|test|trap|true|let|set|pwd|cd|fg|bg|fc|:|\\\\.)(?!\\\\/))(?!\\\\w)(?!-)\",\n\t\t\t\t\t\t\t\"name\": \"support.function.builtin.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.statement.command.name.basic.shell\"\n\t\t},\n\t\t\"block_comment\": {\n\t\t\t\"begin\": \"(?:(?:\\\\s*+)(\\\\/\\\\*))\",\n\t\t\t\"end\": \"\\\\*\\\\/\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"comment.block.shell\"\n\t\t},\n\t\t\"boolean\": {\n\t\t\t\"match\": \"\\\\b(?:true|false)\\\\b\",\n\t\t\t\"name\": \"constant.language.$0.shell\"\n\t\t},\n\t\t\"case_statement\": {\n\t\t\t\"begin\": \"(?:(\\\\bcase\\\\b)(?:[ \\\\t]*+)(.+?)(?:[ \\\\t]*+)(\\\\bin\\\\b))\",\n\t\t\t\"end\": \"\\\\besac\\\\b\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.case.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.in.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.esac.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.case.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:[ \\\\t]*+)(\\\\* *\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.pattern.case.default.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\\))(?!(?:[ \\\\t]*+)(?:esac\\\\b|$))\",\n\t\t\t\t\t\"end\": \"(?:(?=\\\\besac\\\\b)|(\\\\)))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.pattern.case.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.case.entry.pattern.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_statement_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\",\n\t\t\t\t\t\"end\": \"(?:(;;)|(?=\\\\besac\\\\b))\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.terminator.statement.case.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.case.entry.body.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#typical_statements\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"case_statement_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\"name\": \"variable.language.special.quantifier.star.shell keyword.operator.quantifier.star.shell punctuation.definition.arbitrary-repetition.shell punctuation.definition.regex.arbitrary-repetition.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+\",\n\t\t\t\t\t\"name\": \"variable.language.special.quantifier.plus.shell keyword.operator.quantifier.plus.shell punctuation.definition.arbitrary-repetition.shell punctuation.definition.regex.arbitrary-repetition.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\?\",\n\t\t\t\t\t\"name\": \"variable.language.special.quantifier.question.shell keyword.operator.quantifier.question.shell punctuation.definition.arbitrary-repetition.shell punctuation.definition.regex.arbitrary-repetition.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"@\",\n\t\t\t\t\t\"name\": \"variable.language.special.at.shell keyword.operator.at.shell punctuation.definition.regex.at.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.orvariable.language.special.or.shell keyword.operator.alternation.ruby.shell punctuation.definition.regex.alternation.shell punctuation.separator.regex.alternation.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\tin| in| |\\\\t|;;)\\\\(\",\n\t\t\t\t\t\"name\": \"keyword.operator.pattern.case.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\S)(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell punctuation.definition.regex.group.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell punctuation.definition.regex.group.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.parenthese.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#case_statement_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.regexp.character-class.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[^) \\\\t\\\\n\\\\[\\\\?\\\\*\\\\|\\\\@]\",\n\t\t\t\t\t\"name\": \"string.unquoted.pattern.shell string.regexp.unquoted.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_name_range\": {\n\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\"end\": \"(?:(?= |\\\\t|;|\\\\||&|$|\\\\n|\\\\)|\\\\`)|(?=<))\",\n\t\t\t\"beginCaptures\": {},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.statement.command.name.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:continue|return|break)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"entity.name.function.call.shell entity.name.command.shell keyword.control.$0.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:(?:unfunction|continue|autoload|unsetopt|bindkey|builtin|getopts|command|declare|unalias|history|unlimit|typeset|suspend|source|printf|unhash|disown|ulimit|return|which|alias|break|false|print|shift|times|umask|umask|unset|read|type|exec|eval|wait|echo|dirs|jobs|kill|hash|stat|exit|test|trap|true|let|set|pwd|cd|fg|bg|fc|:|\\\\.)(?!\\\\/))(?!\\\\w)(?!-)\",\n\t\t\t\t\t\"name\": \"entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(?<!\\\\w)(?<=\\\\G|'|\\\"|\\\\}|\\\\))([^ \\\\n\\\\t\\\\r\\\"'=;&\\\\|`\\\\)\\\\{<>]+))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.call.shell entity.name.command.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(?:\\\\G|(?<! |\\\\t|;|\\\\||&|\\\\n|\\\\{|#))(?:(\\\\$?)((?:(\\\")|(')))))\",\n\t\t\t\t\t\"end\": \"(?<!\\\\G)(?<=(?:\\\\2))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.statement.command.name.quoted.shell punctuation.definition.string.shell entity.name.function.call.shell entity.name.command.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.statement.command.name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.statement.command.name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#continuation_of_single_quoted_command_name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#continuation_of_double_quoted_command_name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_unquoted\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"command_statement\": {\n\t\t\t\"begin\": \"(?:(?:[ \\\\t]*+)(?:(?!(?:!|&|\\\\||\\\\(|\\\\)|\\\\{|\\\\[|<|>|#|\\\\n|$|;|[ \\\\t]))(?!nocorrect |nocorrect\\t|nocorrect$|readonly |readonly\\t|readonly$|function |function\\t|function$|foreach |foreach\\t|foreach$|coproc |coproc\\t|coproc$|logout |logout\\t|logout$|export |export\\t|export$|select |select\\t|select$|repeat |repeat\\t|repeat$|pushd |pushd\\t|pushd$|until |until\\t|until$|while |while\\t|while$|local |local\\t|local$|case |case\\t|case$|done |done\\t|done$|elif |elif\\t|elif$|else |else\\t|else$|esac |esac\\t|esac$|popd |popd\\t|popd$|then |then\\t|then$|time |time\\t|time$|for |for\\t|for$|end |end\\t|end$|fi |fi\\t|fi$|do |do\\t|do$|in |in\\t|in$|if |if\\t|if$)(?!\\\\\\\\\\\\n?$)))\",\n\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\"beginCaptures\": {},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.statement.command.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#command_name_range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#option\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#argument\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"match\": \"(?:(?:^|(?:[ \\\\t]++))(?:((?:(#!)(?:.*)))|((?:(#)(?:.*)))))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"comment.line.number-sign.shell meta.shebang.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.shebang.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"comment.line.number-sign.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.shell\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#block_comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"compound-command\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.logical-expression.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.logical-expression.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.logical-expression.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#logical-expression\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=\\\\s|^){(?=\\\\s|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=^|;)\\\\s*(})\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.group.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"continuation_of_double_quoted_command_name\": {\n\t\t\t\"begin\": \"(?:\\\\G(?<=\\\"))\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"beginCaptures\": {},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"string.quoted.double.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\$\\\\n`\\\"\\\\\\\\]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"continuation_of_single_quoted_command_name\": {\n\t\t\t\"begin\": \"(?:\\\\G(?<='))\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"beginCaptures\": {},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"string.quoted.single.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.statement.command.name.continuation string.quoted.single entity.name.function.call entity.name.command\"\n\t\t},\n\t\t\"custom_command_names\": {\n\t\t\t\"patterns\": []\n\t\t},\n\t\t\"custom_commands\": {\n\t\t\t\"patterns\": []\n\t\t},\n\t\t\"double_quote_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\$`\\\"\\\\\\\\\\\\n]\",\n\t\t\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"double_quote_escape_char\": {\n\t\t\t\"match\": \"\\\\\\\\[\\\\$`\\\"\\\\\\\\\\\\n]\",\n\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t},\n\t\t\"floating_keyword\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|;|&| |\\\\t)(?:then|elif|else|done|end|do|if|fi)(?= |\\\\t|;|&|$)\",\n\t\t\t\t\t\"name\": \"keyword.control.$0.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"for_statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(\\\\bfor\\\\b)(?:(?:[ \\\\t]*+)((?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))(?:[ \\\\t]*+)(\\\\bin\\\\b)))\",\n\t\t\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.for.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.for.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.in.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.for.in.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_unquoted\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\bfor\\\\b)\",\n\t\t\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.for.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.for.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arithmetic_double\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function_definition\": {\n\t\t\t\"begin\": \"(?:[ \\\\t]*+)(?:(?:(\\\\bfunction\\\\b)(?:[ \\\\t]*+)([^ \\\\t\\\\n\\\\r\\\\(\\\\)=\\\"']+)(?:(?:(\\\\()(?:[ \\\\t]*+)(\\\\)))?))|(?:([^ \\\\t\\\\n\\\\r\\\\(\\\\)=\\\"']+)(?:[ \\\\t]*+)(\\\\()(?:[ \\\\t]*+)(\\\\))))\",\n\t\t\t\"end\": \"(?<=\\\\}|\\\\))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.shell\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.shell\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.shell\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.function.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:\\\\G(?:\\\\t| |\\\\n))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell punctuation.section.function.definition.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell punctuation.section.function.definition.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.body.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell punctuation.section.function.definition.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell punctuation.section.function.definition.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.function.body.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"applyEndPatternLast\": 1\n\t\t},\n\t\t\"heredoc\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:((?<!<)(?:<<-))(?:[ \\\\t]*+)(\\\"|')(?:[ \\\\t]*+)([^\\\"']+?)(?=\\\\s|;|&|<|\\\"|')((?:\\\\2))(.*))\",\n\t\t\t\t\t\"end\": \"(?:(?:^\\\\t*)(?:\\\\3)(?=\\\\s|;|&|$))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.quote.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.delimiter.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.quote.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#redirect_fix\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#typical_statements\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.$0.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.quoted.heredoc.indent.$3\",\n\t\t\t\t\t\"patterns\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:((?<!<)(?:<<)(?!<))(?:[ \\\\t]*+)(\\\"|')(?:[ \\\\t]*+)([^\\\"']+?)(?=\\\\s|;|&|<|\\\"|')((?:\\\\2))(.*))\",\n\t\t\t\t\t\"end\": \"(?:^(?:\\\\3)(?=\\\\s|;|&|$))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.quote.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.delimiter.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.quote.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#redirect_fix\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#typical_statements\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.delimiter.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.quoted.heredoc.no-indent.$3\",\n\t\t\t\t\t\"patterns\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:((?<!<)(?:<<-))(?:[ \\\\t]*+)([^\\\"' \\\\t]+)(?=\\\\s|;|&|<|\\\"|')(.*))\",\n\t\t\t\t\t\"end\": \"(?:(?:^\\\\t*)(?:\\\\2)(?=\\\\s|;|&|$))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.delimiter.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#redirect_fix\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#typical_statements\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.delimiter.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.indent.$2\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#double_quote_escape_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:((?<!<)(?:<<)(?!<))(?:[ \\\\t]*+)([^\\\"' \\\\t]+)(?=\\\\s|;|&|<|\\\"|')(.*))\",\n\t\t\t\t\t\"end\": \"(?:^(?:\\\\2)(?=\\\\s|;|&|$))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.heredoc.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.delimiter.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#redirect_fix\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#typical_statements\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.heredoc.delimiter.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"string.unquoted.heredoc.no-indent.$2\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#double_quote_escape_char\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"herestring\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*(('))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.herestring.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(')\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.single.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.herestring.shell\",\n\t\t\t\t\t\"contentName\": \"string.quoted.single.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<<<)\\\\s*((\\\"))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.herestring.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\")\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.double.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.herestring.shell\",\n\t\t\t\t\t\"contentName\": \"string.quoted.double.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#double_quote_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.herestring.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.unquoted.herestring.shell\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"match\": \"(<<<)\\\\s*(([^\\\\s)\\\\\\\\]|\\\\\\\\.)+)\",\n\t\t\t\t\t\"name\": \"meta.herestring.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"initial_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pipeline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_statement_seperator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assignment_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#loop\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_definition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arithmetic_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#misc_ranges\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#herestring\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#redirection\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pathname\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#floating_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#alias_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline_comment\": {\n\t\t\t\"match\": \"(\\\\/\\\\*)((?:(?:[^\\\\*]|(?:(?:\\\\*++)[^\\\\/]))*+)((?:(?:\\\\*++)\\\\/)))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"comment.block.shell punctuation.definition.comment.begin.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.block.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.shell punctuation.definition.comment.end.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\*\",\n\t\t\t\t\t\t\t\"name\": \"comment.block.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"interpolation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arithmetic_dollar\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#subshell_dollar\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"`\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.evaluation.backticks.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.evaluation.backticks.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.interpolated.backtick.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[`\\\\\\\\$]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\W)(?=#)(?!#{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.shell\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"#\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.shell\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"(?=`)\",\n\t\t\t\t\t\t\t\t\t\"name\": \"comment.line.number-sign.shell\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keyword\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|;|&|\\\\s)(then|else|elif|fi|for|in|do|done|select|continue|esac|while|until|return)(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|;|&|\\\\s)(?:export|declare|typeset|local|readonly)(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"name\": \"storage.modifier.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_comment\": {\n\t\t\t\"begin\": \"(?:\\\\s*+)(\\\\/\\\\/)\",\n\t\t\t\"end\": \"(?<=\\\\n)(?<!\\\\\\\\\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"comment.line.double-slash.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation_character\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"line_continuation\": {\n\t\t\t\"match\": \"\\\\\\\\(?=\\\\n)\",\n\t\t\t\"name\": \"constant.character.escape.line-continuation.shell\"\n\t\t},\n\t\t\"logical-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arithmetic_no_dollar\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"do we want a special rule for ( expr )?\",\n\t\t\t\t\t\"match\": \"=[=~]?|!=?|<|>|&&|\\\\|\\\\|\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\S)-(nt|ot|ef|eq|ne|l[te]|g[te]|[a-hknoprstuwxzOGLSN])\\\\b\",\n\t\t\t\t\t\"name\": \"keyword.operator.logical.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"logical_expression_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex_comparison\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arithmetic_no_dollar\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#boolean\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#redirect_number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pipeline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_statement_seperator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#herestring\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pathname\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#floating_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"logical_expression_double\": {\n\t\t\t\"begin\": \"\\\\[\\\\[\",\n\t\t\t\"end\": \"\\\\]\\\\]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.logical-expression.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.logical-expression.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.scope.logical-expression.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"logical_expression_single\": {\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.logical-expression.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.logical-expression.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"name\": \"meta.scope.logical-expression.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"loop\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|;|&|\\\\s)(for)\\\\s+(.+?)\\\\s+(in)(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.loop.shell\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=^|;|&|\\\\s)done(?=\\\\s|;|&|$|\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.for-in-loop.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|;|&|\\\\s)(while|until)(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=^|;|&|\\\\s)done(?=\\\\s|;|&|$|\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.while-loop.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|;|&|\\\\s)(select)\\\\s+((?:[^\\\\s\\\\\\\\]|\\\\\\\\.)+)(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.loop.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=^|;|&|\\\\s)(done)(?=\\\\s|;|&|$|\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.select-block.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^|;|&|\\\\s)if(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.if.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=^|;|&|\\\\s)fi(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.fi.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.if-block.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"math\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+{1,2}|-{1,2}|!|~|\\\\*{1,2}|/|%|<[<=]?|>[>=]?|==|!=|^|\\\\|{1,2}|&{1,2}|\\\\?|\\\\:|,|=|[*/%+\\\\-&^|]=|<<=|>>=\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0[xX][0-9A-Fa-f]+\",\n\t\t\t\t\t\"name\": \"constant.numeric.hex.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \";\",\n\t\t\t\t\t\"name\": \"punctuation.separator.semicolon.range\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0\\\\d+\",\n\t\t\t\t\t\"name\": \"constant.numeric.octal.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\d{1,2}#[0-9a-zA-Z@_]+\",\n\t\t\t\t\t\"name\": \"constant.numeric.other.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\d+\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_0-9]+)(?!\\\\w)\",\n\t\t\t\t\t\"name\": \"variable.other.normal.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"math_operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\+{1,2}|-{1,2}|!|~|\\\\*{1,2}|/|%|<[<=]?|>[>=]?|==|!=|^|\\\\|{1,2}|&{1,2}|\\\\?|\\\\:|,|=|[*/%+\\\\-&^|]=|<<=|>>=\",\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0[xX][0-9A-Fa-f]+\",\n\t\t\t\t\t\"name\": \"constant.numeric.hex.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"0\\\\d+\",\n\t\t\t\t\t\"name\": \"constant.numeric.octal.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\d{1,2}#[0-9a-zA-Z@_]+\",\n\t\t\t\t\t\"name\": \"constant.numeric.other.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\d+\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"misc_ranges\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#logical_expression_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#subshell_dollar\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![^ \\\\t])({)(?!\\\\w|\\\\$)\",\n\t\t\t\t\t\"end\": \"}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.group.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"modified_assignment_statement\": {\n\t\t\t\"begin\": \"(?<=^|;|&|[ \\\\t])(?:readonly|declare|typeset|export|local)(?=[ \\\\t]|;|&|$)\",\n\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"storage.modifier.$0.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.statement.shell meta.expression.assignment.modified.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\w)-\\\\w+\\\\b\",\n\t\t\t\t\t\"name\": \"string.unquoted.argument.shell constant.other.option.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array_value\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:((?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))(?:(?:(\\\\[)((?:(?:(?:(?:\\\\$?)(?:(?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))|@)|\\\\*)|(-?\\\\d+)))(\\\\]))?)(?:(?:(?:(\\\\=)|(\\\\+\\\\=))|(\\\\-\\\\=))?)(?:(?:(?<==| |\\\\t|^|\\\\{|\\\\(|\\\\[)(?:(?:(?:(?:(?:(0[xX][0-9A-Fa-f]+)|(0\\\\d+))|(\\\\d{1,2}#[0-9a-zA-Z@_]+))|(-?\\\\d+(?:\\\\.\\\\d+)))|(-?\\\\d+(?:\\\\.\\\\d+)+))|(-?\\\\d+))(?= |\\\\t|$|\\\\}|\\\\)|;))?))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.integer.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.hex.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.octal.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.other.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.decimal.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.version.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.integer.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"modifiers\": {\n\t\t\t\"match\": \"(?<=^|;|&|[ \\\\t])(?:readonly|declare|typeset|export|local)(?=[ \\\\t]|;|&|$)\",\n\t\t\t\"name\": \"storage.modifier.$0.shell\"\n\t\t},\n\t\t\"normal_assignment_statement\": {\n\t\t\t\"begin\": \"(?:[ \\\\t]*+)(?:((?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))(?:(?:(\\\\[)((?:(?:(?:(?:\\\\$?)(?:(?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w))|@)|\\\\*)|(-?\\\\d+)))(\\\\]))?))(?:(?:(\\\\=)|(\\\\+\\\\=))|(\\\\-\\\\=))\",\n\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.other.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.integer.shell\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.array.access.shell\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.shell\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.expression.assignment.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_assignment_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<= |\\\\t)(?! |\\\\t|\\\\w+=)\",\n\t\t\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.statement.command.env.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#command_name_range\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#option\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#argument\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#simple_unquoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"normal_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pipeline\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_statement_seperator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#misc_ranges\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#boolean\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#redirect_number\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric_literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#herestring\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#redirection\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pathname\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#floating_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parenthese\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"normal_statement\": {\n\t\t\t\"begin\": \"(?:(?!^[ \\\\t]*+$)(?:(?<=^until | until |\\\\tuntil |^while | while |\\\\twhile |^elif | elif |\\\\telif |^else | else |\\\\telse |^then | then |\\\\tthen |^do | do |\\\\tdo |^if | if |\\\\tif )|(?<=(?:^|;|\\\\||&|!|\\\\(|\\\\{|\\\\`)))(?:[ \\\\t]*+)(?!nocorrect\\\\W|nocorrect\\\\$|function\\\\W|function\\\\$|foreach\\\\W|foreach\\\\$|repeat\\\\W|repeat\\\\$|logout\\\\W|logout\\\\$|coproc\\\\W|coproc\\\\$|select\\\\W|select\\\\$|while\\\\W|while\\\\$|pushd\\\\W|pushd\\\\$|until\\\\W|until\\\\$|case\\\\W|case\\\\$|done\\\\W|done\\\\$|elif\\\\W|elif\\\\$|else\\\\W|else\\\\$|esac\\\\W|esac\\\\$|popd\\\\W|popd\\\\$|then\\\\W|then\\\\$|time\\\\W|time\\\\$|for\\\\W|for\\\\$|end\\\\W|end\\\\$|fi\\\\W|fi\\\\$|do\\\\W|do\\\\$|in\\\\W|in\\\\$|if\\\\W|if\\\\$))\",\n\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\"beginCaptures\": {},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"name\": \"meta.statement.shell\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typical_statements\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"normal_statement_seperator\": {\n\t\t\t\"match\": \"(?:(?:(?:(;)|(&&))|(\\\\|\\\\|))|(&))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.semicolon.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.statement.and.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.statement.or.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.statement.background.shell\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"numeric_literal\": {\n\t\t\t\"match\": \"(?<==| |\\\\t|^|\\\\{|\\\\(|\\\\[)(?:(?:(?:(?:(?:(0[xX][0-9A-Fa-f]+)|(0\\\\d+))|(\\\\d{1,2}#[0-9a-zA-Z@_]+))|(-?\\\\d+(?:\\\\.\\\\d+)))|(-?\\\\d+(?:\\\\.\\\\d+)+))|(-?\\\\d+))(?= |\\\\t|$|\\\\}|\\\\)|;)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.hex.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.octal.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.other.shell\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.decimal.shell\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.version.shell\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"constant.numeric.shell constant.numeric.integer.shell\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"option\": {\n\t\t\t\"begin\": \"(?:(?:[ \\\\t]++)(-)((?!(?:!|&|\\\\||\\\\(|\\\\)|\\\\{|\\\\[|<|>|#|\\\\n|$|;|[ \\\\t]))))\",\n\t\t\t\"end\": \"(?:(?=[ \\\\t])|(?:(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"string.unquoted.argument.shell constant.other.option.dash.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.unquoted.argument.shell constant.other.option.shell\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {},\n\t\t\t\"contentName\": \"string.unquoted.argument constant.other.option\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#option_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"option_context\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#misc_ranges\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#heredoc\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#herestring\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#redirection\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#pathname\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#floating_keyword\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parenthese\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parenthese.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.parenthese.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.parenthese.group.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pathname\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\s|:|=|^)~\",\n\t\t\t\t\t\"name\": \"keyword.operator.tilde.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\*|\\\\?\",\n\t\t\t\t\t\"name\": \"keyword.operator.glob.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([?*+@!])(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.extglob.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.extglob.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.extglob.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.structure.extglob.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"pipeline\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|;|&|\\\\s)(time)(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"name\": \"keyword.other.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[|!]\",\n\t\t\t\t\t\"name\": \"keyword.operator.pipe.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"redirect_fix\": {\n\t\t\t\"match\": \"(?:(>>?)(?:[ \\\\t]*+)([^ \\t\\n>&;<>\\\\(\\\\)\\\\$`\\\\\\\\\\\"'<\\\\|]+))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.redirect.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"string.unquoted.argument.shell\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"redirect_number\": {\n\t\t\t\"match\": \"(?<=[ \\\\t])(?:(?:(1)|(2)|(\\\\d+))(?=>))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.redirect.stdout.shell\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.redirect.stderr.shell\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.redirect.$3.shell\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"redirection\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[><]\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.interpolated.process-substitution.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![<>])(&>|\\\\d*>&\\\\d*|\\\\d*(>>|>|<)|\\\\d*<&|\\\\d*<>)(?![<>])\",\n\t\t\t\t\t\"name\": \"keyword.operator.redirect.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regex_comparison\": {\n\t\t\t\"match\": \"\\\\=~\",\n\t\t\t\"name\": \"keyword.operator.logical.regex.shell\"\n\t\t},\n\t\t\"regexp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:.+)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"simple_options\": {\n\t\t\t\"match\": \"(?:(?:[ \\\\t]++)\\\\-(?:\\\\w+))*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:[ \\\\t]++)(\\\\-)(\\\\w+)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.argument.shell constant.other.option.dash.shell\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"string.unquoted.argument.shell constant.other.option.shell\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"simple_unquoted\": {\n\t\t\t\"match\": \"[^ \\\\t\\\\n>&;<>\\\\(\\\\)\\\\$`\\\\\\\\\\\"'<\\\\|]\",\n\t\t\t\"name\": \"string.unquoted.shell\"\n\t\t},\n\t\t\"special_expansion\": {\n\t\t\t\"match\": \"!|:[-=?]?|\\\\*|@|##|#|%%|%|\\\\/\",\n\t\t\t\"name\": \"keyword.operator.expansion.shell\"\n\t\t},\n\t\t\"start_of_command\": {\n\t\t\t\"match\": \"(?:(?:[ \\\\t]*+)(?:(?!(?:!|&|\\\\||\\\\(|\\\\)|\\\\{|\\\\[|<|>|#|\\\\n|$|;|[ \\\\t]))(?!nocorrect |nocorrect\\t|nocorrect$|readonly |readonly\\t|readonly$|function |function\\t|function$|foreach |foreach\\t|foreach$|coproc |coproc\\t|coproc$|logout |logout\\t|logout$|export |export\\t|export$|select |select\\t|select$|repeat |repeat\\t|repeat$|pushd |pushd\\t|pushd$|until |until\\t|until$|while |while\\t|while$|local |local\\t|local$|case |case\\t|case$|done |done\\t|done$|elif |elif\\t|elif$|else |else\\t|else$|esac |esac\\t|esac$|popd |popd\\t|popd$|then |then\\t|then$|time |time\\t|time$|for |for\\t|for$|end |end\\t|end$|fi |fi\\t|fi$|do |do\\t|do$|in |in\\t|in$|if |if\\t|if$)(?!\\\\\\\\\\\\n?$)))\"\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.shell\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\$?\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[\\\\$\\\\n`\\\"\\\\\\\\]\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\$'\",\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.dollar.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\(?:a|b|e|f|n|r|t|v|\\\\\\\\|')\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.ansi-c.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\[0-9]{3}\\\"\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.octal.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\x[0-9a-fA-F]{2}\\\"\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.hex.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\c.\\\"\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.control-char.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"subshell_dollar\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:\\\\$\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.subshell.single.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.subshell.single.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"meta.scope.subshell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parenthese\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#initial_context\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=^|;|&|\\\\s)(?::|\\\\.)(?=\\\\s|;|&|$)\",\n\t\t\t\t\t\"name\": \"support.function.builtin.shell\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typical_statements\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#assignment_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#case_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#while_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function_definition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#command_statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#line_continuation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arithmetic_double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\$)(\\\\@(?!\\\\w)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.shell variable.parameter.positional.all.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.positional.all.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\$)([0-9](?!\\\\w)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.shell variable.parameter.positional.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.positional.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\$)([-*#?$!0_](?!\\\\w)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.shell variable.language.special.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.language.special.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(\\\\$)(\\\\{)(?:[ \\\\t]*+)(?=\\\\d))\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.shell variable.parameter.positional.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell variable.parameter.positional.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell variable.parameter.positional.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.parameter-expansion\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_expansion\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array_access_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[0-9]+\",\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.positional.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.normal.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?:(\\\\$)(\\\\{))\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.parameter-expansion\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#special_expansion\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array_access_inline\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?<!\\\\w)(?:[a-zA-Z_0-9-]+)(?!\\\\w)\",\n\t\t\t\t\t\t\t\"name\": \"variable.other.normal.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\$)((?:\\\\w+)(?!\\\\w)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.variable.shell variable.other.normal.shell\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.normal.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"while_statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(\\\\bwhile\\\\b)\",\n\t\t\t\t\t\"end\": \"(?=;|\\\\||&|\\\\n|\\\\)|\\\\`|\\\\{|\\\\}|[ \\\\t]*#|\\\\])(?<!\\\\\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.while.shell\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {},\n\t\t\t\t\t\"name\": \"meta.while.shell\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#line_continuation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#math_operators\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#option\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#simple_unquoted\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#normal_context\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/simple-browser/.gitignore",
    "content": "# Ignore built files\nmedia/*.js\nmedia/codicon.css\nmedia/codicon.ttf\n"
  },
  {
    "path": "extensions/simple-browser/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/simple-browser/.vscodeignore",
    "content": "test/**\ntest-workspace/**\nsrc/**\ntsconfig.json\nout/test/**\nout/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\ncgmanifest.json\n.gitignore\npackage-lock.json\npreview-src/**\nwebpack.config.js\nesbuild-preview.js\n"
  },
  {
    "path": "extensions/simple-browser/README.md",
    "content": "# Simple Browser\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.\n\nProvides a very basic browser preview using an iframe embedded in a [webviewW](). This extension is primarily meant to be used by other extensions for showing simple web content.\n"
  },
  {
    "path": "extensions/simple-browser/esbuild-preview.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// @ts-check\nconst path = require('path');\n\nconst srcDir = path.join(__dirname, 'preview-src');\nconst outDir = path.join(__dirname, 'media');\n\nrequire('../esbuild-webview-common').run({\n\tentryPoints: {\n\t\t'index': path.join(srcDir, 'index.ts'),\n\t\t'codicon': path.join(__dirname, 'node_modules', '@vscode', 'codicons', 'dist', 'codicon.css'),\n\t},\n\tsrcDir,\n\toutdir: outDir,\n\tadditionalOptions: {\n\t\tloader: {\n\t\t\t'.ttf': 'dataurl',\n\t\t}\n\t}\n}, process.argv);\n"
  },
  {
    "path": "extensions/simple-browser/extension-browser.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withBrowserDefaults = require('../shared.webpack.config').browser;\n\nmodule.exports = withBrowserDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts'\n\t}\n});\n"
  },
  {
    "path": "extensions/simple-browser/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t},\n\tentry: {\n\t\textension: './src/extension.ts',\n\t}\n});\n"
  },
  {
    "path": "extensions/simple-browser/media/main.css",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n:root {\n\t--container-paddding: 20px;\n\t--input-padding-vertical: 2px;\n\t--input-padding-horizontal: 4px;\n\t--input-margin-vertical: 4px;\n\t--input-margin-horizontal: 0;\n}\n\nhtml, body {\n\theight: 100%;\n\tmin-height: 100%;\n\tpadding: 0;\n\tmargin: 0;\n}\n\nbody {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n}\n\ninput:not([type='checkbox']),\ntextarea {\n\tdisplay: block;\n\twidth: 100%;\n\tborder: none;\n\tmargin-right: 0.3em;\n\tfont-family: var(--vscode-font-family);\n\tpadding: var(--input-padding-vertical) var(--input-padding-horizontal);\n\tcolor: var(--vscode-input-foreground);\n\toutline-color: var(--vscode-input-border);\n\tbackground-color: var(--vscode-input-background);\n}\n\ninput::placeholder,\ntextarea::placeholder {\n\tcolor: var(--vscode-input-placeholderForeground);\n}\n\nbutton {\n\tborder: none;\n\tpadding: 3px;\n\ttext-align: center;\n\toutline: 1px solid transparent;\n\tcolor: var(--vscode-icon-foreground);\n\tbackground: none;\n\tborder-radius: 5px;\n}\n\nbutton:hover:not(:disabled) {\n\tcursor: pointer;\n\tcolor: var(--vscode-toolbar-hoverForeground);\n\tbackground: var(--vscode-toolbar-hoverBackground);\n}\n\nbutton:disabled {\n\topacity: 0.5;\n}\n\ninput:focus,\nbutton:focus {\n\toutline-color: var(--vscode-focusBorder);\n}\n\n.header {\n\tdisplay: flex;\n\tmargin: 0.4em 1em;\n}\n\n.url-input {\n\tflex: 1;\n}\n\n.controls {\n\tdisplay: flex;\n}\n\n.controls button {\n\tdisplay: flex;\n\tmargin-right: 0.3em;\n}\n\n.content {\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\niframe {\n\twidth: 100%;\n\theight: 100%;\n\tborder: none;\n\tbackground: white; /* Browsers default to a white background */\n}\n\n.iframe-focused-alert {\n\tdisplay: none;\n\tposition: absolute;\n\tbottom: 1em;\n\tbackground: var(--vscode-editorWidget-background);\n\tcolor: var(--vscode-editorWidget-foreground);\n\tpadding: 0.2em 0.2em;\n\tborder-radius: 4px;\n\n\tfont-size: 8px;\n\tfont-family: monospace;\n\tuser-select: none;\n\tpointer-events: none;\n}\n\n.iframe-focused.enable-focus-lock-indicator .iframe-focused-alert {\n\tdisplay: block;\n}\n"
  },
  {
    "path": "extensions/simple-browser/package.json",
    "content": "{\n  \"name\": \"simple-browser\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"enabledApiProposals\": [\n    \"externalUriOpener\"\n  ],\n  \"version\": \"1.0.0\",\n  \"icon\": \"media/icon.png\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"aiKey\": \"0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255\",\n  \"engines\": {\n    \"vscode\": \"^1.70.0\"\n  },\n  \"main\": \"./out/extension\",\n  \"browser\": \"./dist/browser/extension\",\n  \"categories\": [\n    \"Other\"\n  ],\n  \"extensionKind\": [\n    \"ui\",\n    \"workspace\"\n  ],\n  \"activationEvents\": [\n    \"onCommand:simpleBrowser.api.open\",\n    \"onOpenExternalUri:http\",\n    \"onOpenExternalUri:https\",\n    \"onWebviewPanel:simpleBrowser.view\"\n  ],\n  \"capabilities\": {\n    \"virtualWorkspaces\": true,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"command\": \"simpleBrowser.show\",\n        \"title\": \"Show\",\n        \"category\": \"Simple Browser\"\n      }\n    ],\n    \"configuration\": [\n      {\n        \"title\": \"Simple Browser\",\n        \"properties\": {\n          \"simpleBrowser.focusLockIndicator.enabled\": {\n            \"type\": \"boolean\",\n            \"default\": true,\n            \"title\": \"Focus Lock Indicator Enabled\",\n            \"description\": \"%configuration.focusLockIndicator.enabled.description%\"\n          }\n        }\n      }\n    ]\n  },\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:markdown-language-features && npm run build-preview\",\n    \"watch\": \"npm run build-preview && gulp watch-extension:markdown-language-features\",\n    \"vscode:prepublish\": \"npm run build-ext && npm run build-preview\",\n    \"build-ext\": \"node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:markdown-language-features ./tsconfig.json\",\n    \"build-preview\": \"node ./esbuild-preview\",\n    \"compile-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none\",\n    \"watch-web\": \"npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose\"\n  },\n  \"dependencies\": {\n    \"@vscode/extension-telemetry\": \"^0.9.8\"\n  },\n  \"devDependencies\": {\n    \"@types/vscode-webview\": \"^1.57.0\",\n    \"@vscode/codicons\": \"^0.0.36\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/simple-browser/package.nls.json",
    "content": "{\n\t\"displayName\": \"Simple Browser\",\n\t\"description\": \"A very basic built-in webview for displaying web content.\",\n\t\"configuration.focusLockIndicator.enabled.description\": \"Enable/disable the floating indicator that shows when focused in the simple browser.\"\n}\n"
  },
  {
    "path": "extensions/simple-browser/preview-src/events.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function onceDocumentLoaded(f: () => void) {\n\tif (document.readyState === 'loading' || document.readyState as string === 'uninitialized') {\n\t\tdocument.addEventListener('DOMContentLoaded', f);\n\t} else {\n\t\tf();\n\t}\n}"
  },
  {
    "path": "extensions/simple-browser/preview-src/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { onceDocumentLoaded } from './events';\n\nconst vscode = acquireVsCodeApi();\n\nfunction getSettings() {\n\tconst element = document.getElementById('simple-browser-settings');\n\tif (element) {\n\t\tconst data = element.getAttribute('data-settings');\n\t\tif (data) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\t}\n\n\tthrow new Error(`Could not load settings`);\n}\n\nconst settings = getSettings();\n\nconst iframe = document.querySelector('iframe')!;\nconst header = document.querySelector('.header')!;\nconst input = header.querySelector<HTMLInputElement>('.url-input')!;\nconst forwardButton = header.querySelector<HTMLButtonElement>('.forward-button')!;\nconst backButton = header.querySelector<HTMLButtonElement>('.back-button')!;\nconst reloadButton = header.querySelector<HTMLButtonElement>('.reload-button')!;\nconst openExternalButton = header.querySelector<HTMLButtonElement>('.open-external-button')!;\n\nwindow.addEventListener('message', e => {\n\tswitch (e.data.type) {\n\t\tcase 'focus':\n\t\t\t{\n\t\t\t\tiframe.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 'didChangeFocusLockIndicatorEnabled':\n\t\t\t{\n\t\t\t\ttoggleFocusLockIndicatorEnabled(e.data.enabled);\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n});\n\nonceDocumentLoaded(() => {\n\tsetInterval(() => {\n\t\tconst iframeFocused = document.activeElement?.tagName === 'IFRAME';\n\t\tdocument.body.classList.toggle('iframe-focused', iframeFocused);\n\t}, 50);\n\n\tiframe.addEventListener('load', () => {\n\t\t// Noop\n\t});\n\n\tinput.addEventListener('change', e => {\n\t\tconst url = (e.target as HTMLInputElement).value;\n\t\tnavigateTo(url);\n\t});\n\n\tforwardButton.addEventListener('click', () => {\n\t\thistory.forward();\n\t});\n\n\tbackButton.addEventListener('click', () => {\n\t\thistory.back();\n\t});\n\n\topenExternalButton.addEventListener('click', () => {\n\t\tvscode.postMessage({\n\t\t\ttype: 'openExternal',\n\t\t\turl: input.value\n\t\t});\n\t});\n\n\treloadButton.addEventListener('click', () => {\n\t\t// This does not seem to trigger what we want\n\t\t// history.go(0);\n\n\t\t// This incorrectly adds entries to the history but does reload\n\t\t// It also always incorrectly always loads the value in the input bar,\n\t\t// which may not match the current page if the user has navigated\n\t\tnavigateTo(input.value);\n\t});\n\n\tnavigateTo(settings.url);\n\tinput.value = settings.url;\n\n\ttoggleFocusLockIndicatorEnabled(settings.focusLockIndicatorEnabled);\n\n\tfunction navigateTo(rawUrl: string): void {\n\t\ttry {\n\t\t\tconst url = new URL(rawUrl);\n\n\t\t\t// Try to bust the cache for the iframe\n\t\t\t// There does not appear to be any way to reliably do this except modifying the url\n\t\t\turl.searchParams.append('vscodeBrowserReqId', Date.now().toString());\n\n\t\t\tiframe.src = url.toString();\n\t\t} catch {\n\t\t\tiframe.src = rawUrl;\n\t\t}\n\n\t\tvscode.setState({ url: rawUrl });\n\t}\n});\n\nfunction toggleFocusLockIndicatorEnabled(enabled: boolean) {\n\tdocument.body.classList.toggle('enable-focus-lock-indicator', enabled);\n}\n\n"
  },
  {
    "path": "extensions/simple-browser/preview-src/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist/\",\n\t\t\"jsx\": \"react\",\n\t\t\"lib\": [\n\t\t\t\"es2018\",\n\t\t\t\"DOM\",\n\t\t\t\"DOM.Iterable\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "extensions/simple-browser/src/dispose.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport function disposeAll(disposables: vscode.Disposable[]) {\n\twhile (disposables.length) {\n\t\tconst item = disposables.pop();\n\t\titem?.dispose();\n\t}\n}\n\nexport abstract class Disposable {\n\tprivate _isDisposed = false;\n\n\tprotected _disposables: vscode.Disposable[] = [];\n\n\tpublic dispose(): any {\n\t\tif (this._isDisposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDisposed = true;\n\t\tdisposeAll(this._disposables);\n\t}\n\n\tprotected _register<T extends vscode.Disposable>(value: T): T {\n\t\tif (this._isDisposed) {\n\t\t\tvalue.dispose();\n\t\t} else {\n\t\t\tthis._disposables.push(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected get isDisposed() {\n\t\treturn this._isDisposed;\n\t}\n}\n"
  },
  {
    "path": "extensions/simple-browser/src/extension.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { SimpleBrowserManager } from './simpleBrowserManager';\nimport { SimpleBrowserView } from './simpleBrowserView';\n\ndeclare class URL {\n\tconstructor(input: string, base?: string | URL);\n\thostname: string;\n}\n\nconst openApiCommand = 'simpleBrowser.api.open';\nconst showCommand = 'simpleBrowser.show';\n\nconst enabledHosts = new Set<string>([\n\t'localhost',\n\t// localhost IPv4\n\t'127.0.0.1',\n\t// localhost IPv6\n\t'[0:0:0:0:0:0:0:1]',\n\t'[::1]',\n\t// all interfaces IPv4\n\t'0.0.0.0',\n\t// all interfaces IPv6\n\t'[0:0:0:0:0:0:0:0]',\n\t'[::]'\n]);\n\nconst openerId = 'simpleBrowser.open';\n\nexport function activate(context: vscode.ExtensionContext) {\n\n\tconst manager = new SimpleBrowserManager(context.extensionUri);\n\tcontext.subscriptions.push(manager);\n\n\tcontext.subscriptions.push(vscode.window.registerWebviewPanelSerializer(SimpleBrowserView.viewType, {\n\t\tdeserializeWebviewPanel: async (panel, state) => {\n\t\t\tmanager.restore(panel, state);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand(showCommand, async (url?: string) => {\n\t\tif (!url) {\n\t\t\turl = await vscode.window.showInputBox({\n\t\t\t\tplaceHolder: vscode.l10n.t(\"https://example.com\"),\n\t\t\t\tprompt: vscode.l10n.t(\"Enter url to visit\")\n\t\t\t});\n\t\t}\n\n\t\tif (url) {\n\t\t\tmanager.show(url);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand(openApiCommand, (url: vscode.Uri, showOptions?: {\n\t\tpreserveFocus?: boolean;\n\t\tviewColumn: vscode.ViewColumn;\n\t}) => {\n\t\tmanager.show(url, showOptions);\n\t}));\n\n\tcontext.subscriptions.push(vscode.window.registerExternalUriOpener(openerId, {\n\t\tcanOpenExternalUri(uri: vscode.Uri) {\n\t\t\t// We have to replace the IPv6 hosts with IPv4 because URL can't handle IPv6.\n\t\t\tconst originalUri = new URL(uri.toString(true));\n\t\t\tif (enabledHosts.has(originalUri.hostname)) {\n\t\t\t\treturn isWeb()\n\t\t\t\t\t? vscode.ExternalUriOpenerPriority.Default\n\t\t\t\t\t: vscode.ExternalUriOpenerPriority.Option;\n\t\t\t}\n\n\t\t\treturn vscode.ExternalUriOpenerPriority.None;\n\t\t},\n\t\topenExternalUri(resolveUri: vscode.Uri) {\n\t\t\treturn manager.show(resolveUri, {\n\t\t\t\tviewColumn: vscode.window.activeTextEditor ? vscode.ViewColumn.Beside : vscode.ViewColumn.Active\n\t\t\t});\n\t\t}\n\t}, {\n\t\tschemes: ['http', 'https'],\n\t\tlabel: vscode.l10n.t(\"Open in simple browser\"),\n\t}));\n}\n\nfunction isWeb(): boolean {\n\t// @ts-expect-error\n\treturn typeof navigator !== 'undefined' && vscode.env.uiKind === vscode.UIKind.Web;\n}\n"
  },
  {
    "path": "extensions/simple-browser/src/simpleBrowserManager.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { ShowOptions, SimpleBrowserView } from './simpleBrowserView';\n\nexport class SimpleBrowserManager {\n\n\tprivate _activeView?: SimpleBrowserView;\n\n\tconstructor(\n\t\tprivate readonly extensionUri: vscode.Uri,\n\t) { }\n\n\tdispose() {\n\t\tthis._activeView?.dispose();\n\t\tthis._activeView = undefined;\n\t}\n\n\tpublic show(inputUri: string | vscode.Uri, options?: ShowOptions): void {\n\t\tconst url = typeof inputUri === 'string' ? inputUri : inputUri.toString(true);\n\t\tif (this._activeView) {\n\t\t\tthis._activeView.show(url, options);\n\t\t} else {\n\t\t\tconst view = SimpleBrowserView.create(this.extensionUri, url, options);\n\t\t\tthis.registerWebviewListeners(view);\n\n\t\t\tthis._activeView = view;\n\t\t}\n\t}\n\n\tpublic restore(panel: vscode.WebviewPanel, state: any): void {\n\t\tconst url = state?.url ?? '';\n\t\tconst view = SimpleBrowserView.restore(this.extensionUri, url, panel);\n\t\tthis.registerWebviewListeners(view);\n\t\tthis._activeView ??= view;\n\t}\n\n\tprivate registerWebviewListeners(view: SimpleBrowserView) {\n\t\tview.onDispose(() => {\n\t\t\tif (this._activeView === view) {\n\t\t\t\tthis._activeView = undefined;\n\t\t\t}\n\t\t});\n\t}\n\n}\n"
  },
  {
    "path": "extensions/simple-browser/src/simpleBrowserView.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Disposable } from './dispose';\n\n\nexport interface ShowOptions {\n\treadonly preserveFocus?: boolean;\n\treadonly viewColumn?: vscode.ViewColumn;\n}\n\nexport class SimpleBrowserView extends Disposable {\n\n\tpublic static readonly viewType = 'simpleBrowser.view';\n\tprivate static readonly title = vscode.l10n.t(\"Simple Browser\");\n\n\tprivate static getWebviewLocalResourceRoots(extensionUri: vscode.Uri): readonly vscode.Uri[] {\n\t\treturn [\n\t\t\tvscode.Uri.joinPath(extensionUri, 'media')\n\t\t];\n\t}\n\n\tprivate static getWebviewOptions(extensionUri: vscode.Uri): vscode.WebviewOptions {\n\t\treturn {\n\t\t\tenableScripts: true,\n\t\t\tenableForms: true,\n\t\t\tlocalResourceRoots: SimpleBrowserView.getWebviewLocalResourceRoots(extensionUri),\n\t\t};\n\t}\n\n\tprivate readonly _webviewPanel: vscode.WebviewPanel;\n\n\tprivate readonly _onDidDispose = this._register(new vscode.EventEmitter<void>());\n\tpublic readonly onDispose = this._onDidDispose.event;\n\n\tpublic static create(\n\t\textensionUri: vscode.Uri,\n\t\turl: string,\n\t\tshowOptions?: ShowOptions\n\t): SimpleBrowserView {\n\t\tconst webview = vscode.window.createWebviewPanel(SimpleBrowserView.viewType, SimpleBrowserView.title, {\n\t\t\tviewColumn: showOptions?.viewColumn ?? vscode.ViewColumn.Active,\n\t\t\tpreserveFocus: showOptions?.preserveFocus\n\t\t}, {\n\t\t\tretainContextWhenHidden: true,\n\t\t\t...SimpleBrowserView.getWebviewOptions(extensionUri)\n\t\t});\n\t\treturn new SimpleBrowserView(extensionUri, url, webview);\n\t}\n\n\tpublic static restore(\n\t\textensionUri: vscode.Uri,\n\t\turl: string,\n\t\twebviewPanel: vscode.WebviewPanel,\n\t): SimpleBrowserView {\n\t\treturn new SimpleBrowserView(extensionUri, url, webviewPanel);\n\t}\n\n\tprivate constructor(\n\t\tprivate readonly extensionUri: vscode.Uri,\n\t\turl: string,\n\t\twebviewPanel: vscode.WebviewPanel,\n\t) {\n\t\tsuper();\n\n\t\tthis._webviewPanel = this._register(webviewPanel);\n\t\tthis._webviewPanel.webview.options = SimpleBrowserView.getWebviewOptions(extensionUri);\n\n\t\tthis._register(this._webviewPanel.webview.onDidReceiveMessage(e => {\n\t\t\tswitch (e.type) {\n\t\t\t\tcase 'openExternal':\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst url = vscode.Uri.parse(e.url);\n\t\t\t\t\t\tvscode.env.openExternal(url);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Noop\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._webviewPanel.onDidDispose(() => {\n\t\t\tthis.dispose();\n\t\t}));\n\n\t\tthis._register(vscode.workspace.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('simpleBrowser.focusLockIndicator.enabled')) {\n\t\t\t\tconst configuration = vscode.workspace.getConfiguration('simpleBrowser');\n\t\t\t\tthis._webviewPanel.webview.postMessage({\n\t\t\t\t\ttype: 'didChangeFocusLockIndicatorEnabled',\n\t\t\t\t\tfocusLockEnabled: configuration.get<boolean>('focusLockIndicator.enabled', true)\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\n\t\tthis.show(url);\n\t}\n\n\tpublic override dispose() {\n\t\tthis._onDidDispose.fire();\n\t\tsuper.dispose();\n\t}\n\n\tpublic show(url: string, options?: ShowOptions) {\n\t\tthis._webviewPanel.webview.html = this.getHtml(url);\n\t\tthis._webviewPanel.reveal(options?.viewColumn, options?.preserveFocus);\n\t}\n\n\tprivate getHtml(url: string) {\n\t\tconst configuration = vscode.workspace.getConfiguration('simpleBrowser');\n\n\t\tconst nonce = getNonce();\n\n\t\tconst mainJs = this.extensionResourceUrl('media', 'index.js');\n\t\tconst mainCss = this.extensionResourceUrl('media', 'main.css');\n\t\tconst codiconsUri = this.extensionResourceUrl('media', 'codicon.css');\n\n\t\treturn /* html */ `<!DOCTYPE html>\n\t\t\t<html>\n\t\t\t<head>\n\t\t\t\t<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\">\n\n\t\t\t\t<meta http-equiv=\"Content-Security-Policy\" content=\"\n\t\t\t\t\tdefault-src 'none';\n\t\t\t\t\tfont-src data:;\n\t\t\t\t\tstyle-src ${this._webviewPanel.webview.cspSource};\n\t\t\t\t\tscript-src 'nonce-${nonce}';\n\t\t\t\t\tframe-src *;\n\t\t\t\t\t\">\n\n\t\t\t\t<meta id=\"simple-browser-settings\" data-settings=\"${escapeAttribute(JSON.stringify({\n\t\t\turl: url,\n\t\t\tfocusLockEnabled: configuration.get<boolean>('focusLockIndicator.enabled', true)\n\t\t}))}\">\n\n\t\t\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"${mainCss}\">\n\t\t\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"${codiconsUri}\">\n\t\t\t</head>\n\t\t\t<body>\n\t\t\t\t<header class=\"header\">\n\t\t\t\t\t<nav class=\"controls\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttitle=\"${vscode.l10n.t(\"Back\")}\"\n\t\t\t\t\t\t\tclass=\"back-button icon\"><i class=\"codicon codicon-arrow-left\"></i></button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttitle=\"${vscode.l10n.t(\"Forward\")}\"\n\t\t\t\t\t\t\tclass=\"forward-button icon\"><i class=\"codicon codicon-arrow-right\"></i></button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttitle=\"${vscode.l10n.t(\"Reload\")}\"\n\t\t\t\t\t\t\tclass=\"reload-button icon\"><i class=\"codicon codicon-refresh\"></i></button>\n\t\t\t\t\t</nav>\n\n\t\t\t\t\t<input class=\"url-input\" type=\"text\">\n\n\t\t\t\t\t<nav class=\"controls\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttitle=\"${vscode.l10n.t(\"Open in browser\")}\"\n\t\t\t\t\t\t\tclass=\"open-external-button icon\"><i class=\"codicon codicon-link-external\"></i></button>\n\t\t\t\t\t</nav>\n\t\t\t\t</header>\n\t\t\t\t<div class=\"content\">\n\t\t\t\t\t<div class=\"iframe-focused-alert\">${vscode.l10n.t(\"Focus Lock\")}</div>\n\t\t\t\t\t<iframe sandbox=\"allow-scripts allow-forms allow-same-origin allow-downloads\"></iframe>\n\t\t\t\t</div>\n\n\t\t\t\t<script src=\"${mainJs}\" nonce=\"${nonce}\"></script>\n\t\t\t</body>\n\t\t\t</html>`;\n\t}\n\n\tprivate extensionResourceUrl(...parts: string[]): vscode.Uri {\n\t\treturn this._webviewPanel.webview.asWebviewUri(vscode.Uri.joinPath(this.extensionUri, ...parts));\n\t}\n}\n\nfunction escapeAttribute(value: string | vscode.Uri): string {\n\treturn value.toString().replace(/\"/g, '&quot;');\n}\n\nfunction getNonce() {\n\tlet text = '';\n\tconst possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tfor (let i = 0; i < 64; i++) {\n\t\ttext += possible.charAt(Math.floor(Math.random() * possible.length));\n\t}\n\treturn text;\n}\n"
  },
  {
    "path": "extensions/simple-browser/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"types\": []\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.externalUriOpener.d.ts\",\n\t]\n}\n"
  },
  {
    "path": "extensions/sql/.vscodeignore",
    "content": "test/**\ncgmanifest.json\nbuild/**\n"
  },
  {
    "path": "extensions/sql/build/update-grammar.mjs",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscodeGrammarUpdater from 'vscode-grammar-updater';\n\nvscodeGrammarUpdater.update('microsoft/vscode-mssql', 'syntaxes/SQL.plist', './syntaxes/sql.tmLanguage.json', undefined, 'main');\n"
  },
  {
    "path": "extensions/sql/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"microsoft/vscode-mssql\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/microsoft/vscode-mssql\",\n\t\t\t\t\t\"commitHash\": \"d07e0f838eabff968e4387841427d3c3af8aeec6\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"version\": \"1.29.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/sql/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"--\",\n\t\t\"blockComment\": [ \"/*\", \"*/\" ]\n\t},\n\t\"brackets\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t{ \"open\": \"\\\"\", \"close\": \"\\\"\", \"notIn\": [\"string\"] },\n\t\t{ \"open\": \"N'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] },\n\t\t{ \"open\": \"'\", \"close\": \"'\", \"notIn\": [\"string\", \"comment\"] }\n\t],\n\t\"surroundingPairs\": [\n\t\t[\"{\", \"}\"],\n\t\t[\"[\", \"]\"],\n\t\t[\"(\", \")\"],\n\t\t[\"\\\"\", \"\\\"\"],\n\t\t[\"'\", \"'\"],\n\t\t[\"`\", \"`\"]\n\t],\n\t\"folding\": {\n\t\t\"offSide\": true,\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*--\\\\s*#region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*--\\\\s*#endregion\\\\b\"\n\t\t}\n\t},\n\n\t// enhancedBrackets:[\n\t// \t{ openTrigger: 'n', open: /begin$/i, closeComplete: 'end', matchCase: true },\n\t// \t{ openTrigger: 'e', open: /case$/i, closeComplete: 'end', matchCase: true },\n\t// \t{ openTrigger: 'n', open: /when$/i, closeComplete: 'then', matchCase: true }\n\t// ],\n\t// noindentBrackets: '()',\n}\n"
  },
  {
    "path": "extensions/sql/package.json",
    "content": "{\n  \"name\": \"sql\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ./build/update-grammar.mjs\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"sql\",\n        \"extensions\": [\n          \".sql\",\n          \".dsql\"\n        ],\n        \"aliases\": [\n          \"MS SQL\",\n          \"T-SQL\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"sql\",\n        \"scopeName\": \"source.sql\",\n        \"path\": \"./syntaxes/sql.tmLanguage.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/sql/package.nls.json",
    "content": "{\n\t\"displayName\": \"SQL Language Basics\",\n\t\"description\": \"Provides syntax highlighting and bracket matching in SQL files.\"\n}\n"
  },
  {
    "path": "extensions/sql/syntaxes/sql.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/vscode-mssql/blob/master/syntaxes/SQL.plist\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/vscode-mssql/commit/d07e0f838eabff968e4387841427d3c3af8aeec6\",\n\t\"name\": \"SQL\",\n\t\"scopeName\": \"source.sql\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"match\": \"((?<!@)@)\\\\b(\\\\w+)\\\\b\",\n\t\t\t\"name\": \"text.variable\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(\\\\[)[^\\\\]]*(\\\\])\",\n\t\t\t\"name\": \"text.bracketed\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.create.sql\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.sql\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i:^\\\\s*(create(?:\\\\s+or\\\\s+replace)?)\\\\s+(aggregate|conversion|database|domain|function|group|(unique\\\\s+)?index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view)\\\\s+)(['\\\"`]?)(\\\\w+)\\\\4\",\n\t\t\t\"name\": \"meta.create.sql\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.create.sql\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i:^\\\\s*(drop)\\\\s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view))\",\n\t\t\t\"name\": \"meta.drop.sql\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.create.sql\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.table.sql\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.function.sql\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.other.cascade.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i:\\\\s*(drop)\\\\s+(table)\\\\s+(\\\\w+)(\\\\s+cascade)?\\\\b)\",\n\t\t\t\"name\": \"meta.drop.sql\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.create.sql\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.table.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?i:^\\\\s*(alter)\\\\s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|proc(edure)?|rule|schema|sequence|table|tablespace|trigger|type|user|view)\\\\s+)\",\n\t\t\t\"name\": \"meta.alter.sql\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.sql\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"constant.numeric.sql\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"constant.numeric.sql\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"constant.numeric.sql\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"constant.numeric.sql\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"constant.numeric.sql\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"storage.type.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(?xi)\\n\\n\\t\\t\\t\\t# normal stuff, capture 1\\n\\t\\t\\t\\t \\\\b(bigint|bigserial|bit|boolean|box|bytea|cidr|circle|date|double\\\\sprecision|inet|int|integer|line|lseg|macaddr|money|oid|path|point|polygon|real|serial|smallint|sysdate|text)\\\\b\\n\\n\\t\\t\\t\\t# numeric suffix, capture 2 + 3i\\n\\t\\t\\t\\t|\\\\b(bit\\\\svarying|character\\\\s(?:varying)?|tinyint|var\\\\schar|float|interval)\\\\((\\\\d+)\\\\)\\n\\n\\t\\t\\t\\t# optional numeric suffix, capture 4 + 5i\\n\\t\\t\\t\\t|\\\\b(char|number|varchar\\\\d?)\\\\b(?:\\\\((\\\\d+)\\\\))?\\n\\n\\t\\t\\t\\t# special case, capture 6 + 7i + 8i\\n\\t\\t\\t\\t|\\\\b(numeric|decimal)\\\\b(?:\\\\((\\\\d+),(\\\\d+)\\\\))?\\n\\n\\t\\t\\t\\t# special case, captures 9, 10i, 11\\n\\t\\t\\t\\t|\\\\b(times?)\\\\b(?:\\\\((\\\\d+)\\\\))?(\\\\swith(?:out)?\\\\stime\\\\szone\\\\b)?\\n\\n\\t\\t\\t\\t# special case, captures 12, 13, 14i, 15\\n\\t\\t\\t\\t|\\\\b(timestamp)(?:(s|tz))?\\\\b(?:\\\\((\\\\d+)\\\\))?(\\\\s(with|without)\\\\stime\\\\szone\\\\b)?\\n\\n\\t\\t\\t\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:\\\\b((?:primary|foreign)\\\\s+key|references|on\\\\sdelete(\\\\s+cascade)?|nocheck|check|constraint|collate|default)\\\\b)\",\n\t\t\t\"name\": \"storage.modifier.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b\\\\d+\\\\b\",\n\t\t\t\"name\": \"constant.numeric.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:\\\\b(select(\\\\s+(all|distinct))?|insert\\\\s+(ignore\\\\s+)?into|update|delete|from|set|where|group\\\\s+by|or|like|and|union(\\\\s+all)?|having|order\\\\s+by|limit|cross\\\\s+join|join|straight_join|(inner|(left|right|full)(\\\\s+outer)?)\\\\s+join|natural(\\\\s+(inner|(left|right|full)(\\\\s+outer)?))?\\\\s+join)\\\\b)\",\n\t\t\t\"name\": \"keyword.other.DML.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:\\\\b(on|off|((is\\\\s+)?not\\\\s+)?null)\\\\b)\",\n\t\t\t\"name\": \"keyword.other.DDL.create.II.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:\\\\bvalues\\\\b)\",\n\t\t\t\"name\": \"keyword.other.DML.II.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:\\\\b(begin(\\\\s+work)?|start\\\\s+transaction|commit(\\\\s+work)?|rollback(\\\\s+work)?)\\\\b)\",\n\t\t\t\"name\": \"keyword.other.LUW.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:\\\\b(grant(\\\\swith\\\\sgrant\\\\soption)?|revoke)\\\\b)\",\n\t\t\t\"name\": \"keyword.other.authorization.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:\\\\bin\\\\b)\",\n\t\t\t\"name\": \"keyword.other.data-integrity.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i:^\\\\s*(comment\\\\s+on\\\\s+(table|column|aggregate|constraint|database|domain|function|index|operator|rule|schema|sequence|trigger|type|view))\\\\s+.*?\\\\s+(is)\\\\s+)\",\n\t\t\t\"name\": \"keyword.other.object-comments.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\bAS\\\\b\",\n\t\t\t\"name\": \"keyword.other.alias.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(DESC|ASC)\\\\b\",\n\t\t\t\"name\": \"keyword.other.order.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\*\",\n\t\t\t\"name\": \"keyword.operator.star.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"[!<>]?=|<>|<|>\",\n\t\t\t\"name\": \"keyword.operator.comparison.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"-|\\\\+|/\",\n\t\t\t\"name\": \"keyword.operator.math.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\|\\\\|\",\n\t\t\t\"name\": \"keyword.operator.concatenator.sql\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(approx_count_distinct|approx_percentile_cont|approx_percentile_disc|avg|checksum_agg|count|count_big|group|grouping|grouping_id|max|min|sum|stdev|stdevp|var|varp)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.aggregate.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(cume_dist|first_value|lag|last_value|lead|percent_rank|percentile_cont|percentile_disc)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.analytic.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(bit_count|get_bit|left_shift|right_shift|set_bit)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.bitmanipulation.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(cast|convert|parse|try_cast|try_convert|try_parse)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.conversion.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(collationproperty|tertiary_weights)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.collation.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(asymkey_id|asymkeyproperty|certproperty|cert_id|crypt_gen_random|decryptbyasymkey|decryptbycert|decryptbykey|decryptbykeyautoasymkey|decryptbykeyautocert|decryptbypassphrase|encryptbyasymkey|encryptbycert|encryptbykey|encryptbypassphrase|hashbytes|is_objectsigned|key_guid|key_id|key_name|signbyasymkey|signbycert|symkeyproperty|verifysignedbycert|verifysignedbyasymkey)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.cryptographic.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(cursor_status)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.cursor.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(sysdatetime|sysdatetimeoffset|sysutcdatetime|current_time(stamp)?|getdate|getutcdate|datename|datepart|day|month|year|datefromparts|datetime2fromparts|datetimefromparts|datetimeoffsetfromparts|smalldatetimefromparts|timefromparts|datediff|dateadd|datetrunc|eomonth|switchoffset|todatetimeoffset|isdate|date_bucket)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.datetime.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(datalength|ident_current|ident_incr|ident_seed|identity|sql_variant_property)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.datatype.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(coalesce|nullif)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.expression.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?<!@)@@(?i)\\\\b(cursor_rows|connections|cpu_busy|datefirst|dbts|error|fetch_status|identity|idle|io_busy|langid|language|lock_timeout|max_connections|max_precision|nestlevel|options|packet_errors|pack_received|pack_sent|procid|remserver|rowcount|servername|servicename|spid|textsize|timeticks|total_errors|total_read|total_write|trancount|version)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.globalvar.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(json|isjson|json_object|json_array|json_value|json_query|json_modify|json_path_exists)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.json.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(choose|iif|greatest|least)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.logical.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(abs|acos|asin|atan|atn2|ceiling|cos|cot|degrees|exp|floor|log|log10|pi|power|radians|rand|round|sign|sin|sqrt|square|tan)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.mathematical.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(app_name|applock_mode|applock_test|assemblyproperty|col_length|col_name|columnproperty|database_principal_id|databasepropertyex|db_id|db_name|file_id|file_idex|file_name|filegroup_id|filegroup_name|filegroupproperty|fileproperty|fulltextcatalogproperty|fulltextserviceproperty|index_col|indexkey_property|indexproperty|object_definition|object_id|object_name|object_schema_name|objectproperty|objectpropertyex|original_db_name|parsename|schema_id|schema_name|scope_identity|serverproperty|stats_date|type_id|type_name|typeproperty)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.metadata.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(rank|dense_rank|ntile|row_number)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.ranking.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(generate_series|opendatasource|openjson|openrowset|openquery|openxml|predict|string_split)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.rowset.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(certencoded|certprivatekey|current_user|database_principal_id|has_perms_by_name|is_member|is_rolemember|is_srvrolemember|original_login|permissions|pwdcompare|pwdencrypt|schema_id|schema_name|session_user|suser_id|suser_sid|suser_sname|system_user|suser_name|user_id|user_name)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.security.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(ascii|char|charindex|concat|difference|format|left|len|lower|ltrim|nchar|nodes|patindex|quotename|replace|replicate|reverse|right|rtrim|soundex|space|str|string_agg|string_escape|string_split|stuff|substring|translate|trim|unicode|upper)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.string.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(binary_checksum|checksum|compress|connectionproperty|context_info|current_request_id|current_transaction_id|decompress|error_line|error_message|error_number|error_procedure|error_severity|error_state|formatmessage|get_filestream_transaction_context|getansinull|host_id|host_name|isnull|isnumeric|min_active_rowversion|newid|newsequentialid|rowcount_big|session_context|session_id|xact_state)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.system.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"match\": \"(?i)\\\\b(patindex|textptr|textvalid)\\\\b\\\\s*\\\\(\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.textimage.sql\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"constant.other.database-name.sql\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"constant.other.table-name.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(\\\\w+?)\\\\.(\\\\w+)\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#regexps\"\n\t\t},\n\t\t{\n\t\t\t\"match\": \"\\\\b(?i)(abort|abort_after_wait|absent|absolute|accent_sensitivity|acceptable_cursopt|acp|action|activation|add|address|admin|aes_128|aes_192|aes_256|affinity|after|aggregate|algorithm|all_constraints|all_errormsgs|all_indexes|all_levels|all_results|allow_connections|allow_dup_row|allow_encrypted_value_modifications|allow_page_locks|allow_row_locks|allow_snapshot_isolation|alter|altercolumn|always|anonymous|ansi_defaults|ansi_null_default|ansi_null_dflt_off|ansi_null_dflt_on|ansi_nulls|ansi_padding|ansi_warnings|appdomain|append|application|apply|arithabort|arithignore|array|assembly|asymmetric|asynchronous_commit|at|atan2|atomic|attach|attach_force_rebuild_log|attach_rebuild_log|audit|auth_realm|authentication|auto|auto_cleanup|auto_close|auto_create_statistics|auto_drop|auto_shrink|auto_update_statistics|auto_update_statistics_async|automated_backup_preference|automatic|autopilot|availability|availability_mode|backup|backup_priority|base64|basic|batches|batchsize|before|between|bigint|binary|binding|bit|block|blockers|blocksize|bmk|both|break|broker|broker_instance|bucket_count|buffer|buffercount|bulk_logged|by|call|caller|card|case|catalog|catch|cert|certificate|change_retention|change_tracking|change_tracking_context|changes|char|character|character_set|check_expiration|check_policy|checkconstraints|checkindex|checkpoint|checksum|cleanup_policy|clear|clear_port|close|clustered|codepage|collection|column_encryption_key|column_master_key|columnstore|columnstore_archive|colv_80_to_100|colv_100_to_80|commit_differential_base|committed|compatibility_level|compress_all_row_groups|compression|compression_delay|concat_null_yields_null|concatenate|configuration|connect|connection|containment|continue|continue_after_error|contract|contract_name|control|conversation|conversation_group_id|conversation_handle|copy|copy_only|count_rows|counter|create(\\\\\\\\s+or\\\\\\\\s+alter)?|credential|cross|cryptographic|cryptographic_provider|cube|cursor|cursor_close_on_commit|cursor_default|data|data_compression|data_flush_interval_seconds|data_mirroring|data_purity|data_source|database|database_name|database_snapshot|datafiletype|date_correlation_optimization|date|datefirst|dateformat|date_format|datetime|datetime2|datetimeoffset|day(s)?|db_chaining|dbid|dbidexec|dbo_only|deadlock_priority|deallocate|dec|decimal|declare|decrypt|decrypt_a|decryption|default_database|default_fulltext_language|default_language|default_logon_domain|default_schema|definition|delay|delayed_durability|delimitedtext|density_vector|dependent|des|description|desired_state|desx|differential|digest|disable|disable_broker|disable_def_cnst_chk|disabled|disk|distinct|distributed|distribution|drop|drop_existing|dts_buffers|dump|durability|dynamic|edition|elements|else|emergency|empty|enable|enable_broker|enabled|encoding|encrypted|encrypted_value|encryption|encryption_type|end|endpoint|endpoint_url|enhancedintegrity|entry|error_broker_conversations|errorfile|estimateonly|event|except|exec|executable|execute|exists|expand|expiredate|expiry_date|explicit|external|external_access|failover|failover_mode|failure_condition_level|fast|fast_forward|fastfirstrow|federated_service_account|fetch|field_terminator|fieldterminator|file|filelistonly|filegroup|filegrowth|filename|filestream|filestream_log|filestream_on|filetable|file_format|filter|first_row|fips_flagger|fire_triggers|first|firstrow|float|flush_interval_seconds|fmtonly|following|for|force|force_failover_allow_data_loss|force_service_allow_data_loss|forced|forceplan|formatfile|format_options|format_type|formsof|forward_only|free_cursors|free_exec_context|fullscan|fulltext|fulltextall|fulltextkey|function|generated|get|geography|geometry|global|go|goto|governor|guid|hadoop|hardening|hash|hashed|header_limit|headeronly|health_check_timeout|hidden|hierarchyid|histogram|histogram_steps|hits_cursors|hits_exec_context|hour(s)?|http|identity|identity_value|if|ifnull|ignore|ignore_constraints|ignore_dup_key|ignore_dup_row|ignore_triggers|image|immediate|implicit_transactions|include|include_null_values|incremental|index|inflectional|init|initiator|insensitive|insert|instead|int|integer|integrated|intersect|intermediate|interval_length_minutes|into|inuse_cursors|inuse_exec_context|io|is|isabout|iso_week|isolation|job_tracker_location|json|keep|keep_nulls|keep_replication|keepdefaults|keepfixed|keepidentity|keepnulls|kerberos|key|key_path|key_source|key_store_provider_name|keyset|kill|kilobytes_per_batch|labelonly|langid|language|last|lastrow|leading|legacy_cardinality_estimation|length|level|lifetime|lineage_80_to_100|lineage_100_to_80|listener_ip|listener_port|load|loadhistory|lob_compaction|local|local_service_name|locate|location|lock_escalation|lock_timeout|lockres|log|login|login_type|loop|manual|mark_in_use_for_removal|masked|master|match|matched|max_queue_readers|max_duration|max_outstanding_io_per_volume|maxdop|maxerrors|maxlength|maxtransfersize|max_plans_per_query|max_storage_size_mb|mediadescription|medianame|mediapassword|memogroup|memory_optimized|merge|message|message_forward_size|message_forwarding|microsecond|millisecond|minute(s)?|mirror_address|misses_cursors|misses_exec_context|mixed|modify|money|month|move|multi_user|must_change|name|namespace|nanosecond|native|native_compilation|nchar|ncharacter|nested_triggers|never|new_account|new_broker|newname|next|no|no_browsetable|no_checksum|no_compression|no_infomsgs|no_triggers|no_truncate|nocount|noexec|noexpand|noformat|noinit|nolock|nonatomic|nonclustered|nondurable|none|norecompute|norecovery|noreset|norewind|noskip|not|notification|nounload|now|nowait|ntext|ntlm|nulls|numeric|numeric_roundabort|nvarchar|object|objid|oem|offline|old_account|online|operation_mode|open|openjson|optimistic|option|orc|out|outer|output|over|override|owner|ownership|pad_index|page|page_checksum|page_verify|pagecount|paglock|param|parameter_sniffing|parameter_type_expansion|parameterization|parquet|parseonly|partial|partition|partner|password|path|pause|percentage|permission_set|persisted|period|physical_only|plan_forcing_mode|policy|pool|population|ports|preceding|precision|predicate|presume_abort|primary|primary_role|print|prior|priority |priority_level|private|proc(edure)?|procedure_name|profile|provider|quarter|query_capture_mode|query_governor_cost_limit|query_optimizer_hotfixes|query_store|queue|quoted_identifier|raiserror|range|raw|rcfile|rc2|rc4|rc4_128|rdbms|read_committed_snapshot|read|read_only|read_write|readcommitted|readcommittedlock|readonly|readpast|readuncommitted|readwrite|real|rebuild|receive|recmodel_70backcomp|recompile|reconfigure|recovery|recursive|recursive_triggers|redo_queue|reject_sample_value|reject_type|reject_value|relative|remote|remote_data_archive|remote_proc_transactions|remote_service_name|remove|removed_cursors|removed_exec_context|reorganize|repeat|repeatable|repeatableread|replace|replica|replicated|replnick_100_to_80|replnickarray_80_to_100|replnickarray_100_to_80|required|required_cursopt|resample|reset|resource|resource_manager_location|respect|restart|restore|restricted_user|resume|retaindays|retention|return|revert|rewind|rewindonly|returns|robust|role|rollup|root|round_robin|route|row|rowdump|rowguidcol|rowlock|row_terminator|rows|rows_per_batch|rowsets_only|rowterminator|rowversion|rsa_1024|rsa_2048|rsa_3072|rsa_4096|rsa_512|safe|safety|sample|save|scalar|schema|schemabinding|scoped|scroll|scroll_locks|sddl|second|secexpr|seconds|secondary|secondary_only|secondary_role|secret|security|securityaudit|selective|self|send|sent|sequence|serde_method|serializable|server|service|service_broker|service_name|service_objective|session_timeout|session|sessions|seterror|setopts|sets|shard_map_manager|shard_map_name|sharded|shared_memory|shortest_path|show_statistics|showplan_all|showplan_text|showplan_xml|showplan_xml_with_recompile|shrinkdb|shutdown|sid|signature|simple|single_blob|single_clob|single_nclob|single_user|singleton|site|size|size_based_cleanup_mode|skip|smalldatetime|smallint|smallmoney|snapshot|snapshot_import|snapshotrestorephase|soap|softnuma|sort_in_tempdb|sorted_data|sorted_data_reorg|spatial|sql|sql_bigint|sql_binary|sql_bit|sql_char|sql_date|sql_decimal|sql_double|sql_float|sql_guid|sql_handle|sql_longvarbinary|sql_longvarchar|sql_numeric|sql_real|sql_smallint|sql_time|sql_timestamp|sql_tinyint|sql_tsi_day|sql_tsi_frac_second|sql_tsi_hour|sql_tsi_minute|sql_tsi_month|sql_tsi_quarter|sql_tsi_second|sql_tsi_week|sql_tsi_year|sql_type_date|sql_type_time|sql_type_timestamp|sql_varbinary|sql_varchar|sql_variant|sql_wchar|sql_wlongvarchar|ssl|ssl_port|standard|standby|start|start_date|started|stat_header|state|statement|static|statistics|statistics_incremental|statistics_norecompute|statistics_only|statman|stats|stats_stream|status|stop|stop_on_error|stopat|stopatmark|stopbeforemark|stoplist|stopped|string_delimiter|subject|supplemental_logging|supported|suspend|symmetric|synchronous_commit|synonym|sysname|system|system_time|system_versioning|table|tableresults|tablock|tablockx|take|tape|target|target_index|target_partition|target_recovery_time|tcp|temporal_history_retention|text|textimage_on|then|thesaurus|throw|time|timeout|timestamp|tinyint|to|top|torn_page_detection|track_columns_updated|trailing|tran|transaction|transfer|transform_noise_words|triple_des|triple_des_3key|truncate|trustworthy|try|tsql|two_digit_year_cutoff|type|type_desc|type_warning|tzoffset|uid|unbounded|uncommitted|unique|uniqueidentifier|unlimited|unload|unlock|unsafe|updlock|url|use|useplan|useroptions|use_type_default|using|utcdatetime|valid_xml|validation|value|values|varbinary|varchar|vector|verbose|verifyonly|version|view_metadata|virtual_device|visiblity|wait_at_low_priority|waitfor|webmethod|week|weekday|weight|well_formed_xml|when|while|widechar|widechar_ansi|widenative|window|windows|with|within|within group|witness|without|without_array_wrapper|workload|wsdl|xact_abort|xlock|xml|xmlschema|xquery|xsinil|year|zone)\\\\b\",\n\t\t\t\"name\": \"keyword.other.sql\"\n\t\t},\n\t\t{\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.sql\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"comment\": \"Allow for special ↩ behavior\",\n\t\t\t\"match\": \"(\\\\()(\\\\))\",\n\t\t\t\"name\": \"meta.block.sql\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=--)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"--\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.sql\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\n\",\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-dash.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=#)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment-block\": {\n\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\"captures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\"name\": \"comment.block\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexps\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"/(?=\\\\S.*/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.regexp.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_interpolation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\/\",\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.slash.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"%r\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"We should probably handle nested bracket pairs!?! -- Allan\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.regexp.modr.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string_escape\": {\n\t\t\t\"match\": \"\\\\\\\\.\",\n\t\t\t\"name\": \"constant.character.escape.sql\"\n\t\t},\n\t\t\"string_interpolation\": {\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"match\": \"(#\\\\{)([^\\\\}]*)(\\\\})\",\n\t\t\t\"name\": \"string.interpolated.sql\"\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.\",\n\t\t\t\t\t\"match\": \"(N)?(')[^']*(')\",\n\t\t\t\t\t\"name\": \"string.quoted.single.sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"'\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"'\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.single.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.\",\n\t\t\t\t\t\"match\": \"(`)[^`\\\\\\\\]*(`)\",\n\t\t\t\t\t\"name\": \"string.quoted.other.backtick.sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"`\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.other.backtick.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"comment\": \"this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.\",\n\t\t\t\t\t\"match\": \"(\\\")[^\\\"#]*(\\\")\",\n\t\t\t\t\t\"name\": \"string.quoted.double.sql\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\"\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.quoted.double.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"%\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.sql\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"string.other.quoted.brackets.sql\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string_interpolation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/swift/.vscodeignore",
    "content": "test/**\ncgmanifest.json\n"
  },
  {
    "path": "extensions/swift/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"jtbandes/swift-tmlanguage\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jtbandes/swift-tmlanguage\",\n\t\t\t\t\t\"commitHash\": \"b8d2889b4af1d8bad41578317a6adade642555a3\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"license\": \"MIT\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"vscode-swift\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/owensd/vscode-swift\",\n\t\t\t\t\t\"commitHash\": \"cec27af6662e3799120b208e64483efdfe5521f5\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"The MIT License (MIT)\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2015 David Owens II\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\"\n\t\t\t],\n\t\t\t\"license\": \"MIT\",\n\t\t\t\"description\": \"The files in the 'snippets' subfolder in this folder are based on https://github.com/owensd/vscode-swift.\",\n\t\t\t\"version\": \"0.0.1\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/swift/language-configuration.json",
    "content": "{\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"`\",\n\t\t\t\"close\": \"`\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"`\",\n\t\t\t\"`\"\n\t\t]\n\t],\n\t\"onEnterRules\": [\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/swift/package.json",
    "content": "{\n  \"name\": \"swift\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"scripts\": {\n    \"update-grammar\": \"node ../node_modules/vscode-grammar-updater/bin jtbandes/swift-tmlanguage Swift.tmLanguage.json ./syntaxes/swift.tmLanguage.json\"\n  },\n  \"categories\": [\"Programming Languages\"],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"swift\",\n        \"aliases\": [\n          \"Swift\",\n          \"swift\"\n        ],\n        \"extensions\": [\n          \".swift\"\n        ],\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"swift\",\n        \"scopeName\": \"source.swift\",\n        \"path\": \"./syntaxes/swift.tmLanguage.json\"\n      }\n    ],\n    \"snippets\": [\n      {\n        \"language\": \"swift\",\n        \"path\": \"./snippets/swift.code-snippets\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/swift/package.nls.json",
    "content": "{\n\t\"displayName\": \"Swift Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting and bracket matching in Swift files.\"\n}\n"
  },
  {
    "path": "extensions/swift/snippets/swift.code-snippets",
    "content": "{\n\t\"print\": {\n\t\t\"prefix\": \"print\",\n\t\t\"body\": \"print(\\\"$1\\\")\\n$0\",\n\t\t\"description\": \"print(\\\"...\\\")\"\n\t},\n\t\"print value\": {\n\t\t\"prefix\": \"printv\",\n\t\t\"body\": \"print(\\\"\\\\($1)\\\")\\n$0\",\n\t\t\"description\": \"print(\\\"\\\\(...)\\\")\"\n\t},\n\t\"while\": {\n\t\t\"prefix\": \"while\",\n\t\t\"body\": [\n\t\t\t\"while ${1:condition} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"while statement\"\n\t},\n\t\"repeat-while\": {\n\t\t\"prefix\": \"repeat\",\n\t\t\"body\": [\n\t\t\t\"repeat {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"} while ${1:condition}\"\n\t\t],\n\t\t\"description\": \"repeat-while statement\"\n\t},\n\t\"for\": {\n\t\t\"prefix\": \"for\",\n\t\t\"body\": [\n\t\t\t\"for ${1:item} in ${2:collection} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"for-in statement\"\n\t},\n\t\"if\": {\n\t\t\"prefix\": \"if\",\n\t\t\"body\": [\n\t\t\t\"if ${1:condition} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"if statement\"\n\t},\n\t\"else if\": {\n\t\t\"prefix\": \"elif\",\n\t\t\"body\": [\n\t\t\t\"else if ${1:condition} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"else clause with a nested if statement\"\n\t},\n\t\"else\": {\n\t\t\"prefix\": \"else\",\n\t\t\"body\": [\n\t\t\t\"else {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"else clause\"\n\t},\n\t\"if let\": {\n\t\t\"prefix\": \"iflet\",\n\t\t\"body\": [\n\t\t\t\"if let ${1:value} = ${2:optional} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"if statement with optional binding\"\n\t},\n\t\"guard\": {\n\t\t\"prefix\": \"guard\",\n\t\t\"body\": [\n\t\t\t\"guard ${1:condition} else {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"guard statement\"\n\t},\n\t\"guard let\": {\n\t\t\"prefix\": \"guardlet\",\n\t\t\"body\": [\n\t\t\t\"guard let ${1:value} = ${2:optional} else {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"guard statement with optional binding\"\n\t},\n\t\"switch\": {\n\t\t\"prefix\": \"switch\",\n\t\t\"body\": [\n\t\t\t\"switch ${1:value} {\",\n\t\t\t\"case ${2:pattern}:\",\n\t\t\t\"\\t$0\",\n\t\t\t\"default:\",\n\t\t\t\"\\t\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"switch statement\"\n\t},\n\t\"do\": {\n\t\t\"prefix\": \"do\",\n\t\t\"body\": [\n\t\t\t\"do {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"} catch ${1:error} {\",\n\t\t\t\"\\t$2\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"do statement\"\n\t},\n\t\"func\": {\n\t\t\"prefix\": \"func\",\n\t\t\"body\": [\n\t\t\t\"func ${1:name}(${2:parameters}) -> ${3:Type} {\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"function declaration\"\n\t},\n\t\"struct\": {\n\t\t\"prefix\": \"struct\",\n\t\t\"body\": [\n\t\t\t\"struct ${1:Name} {\",\n\t\t\t\"\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"struct declaration\"\n\t},\n\t\"enum\": {\n\t\t\"prefix\": \"enum\",\n\t\t\"body\": [\n\t\t\t\"enum ${1:Name} {\",\n\t\t\t\"\",\n\t\t\t\"\\tcase $0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"enum declaration\"\n\t},\n\t\"class\": {\n\t\t\"prefix\": \"class\",\n\t\t\"body\": [\n\t\t\t\"class ${1:Name} {\",\n\t\t\t\"\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"class declaration\"\n\t},\n\t\"protocol\": {\n\t\t\"prefix\": \"protocol\",\n\t\t\"body\": [\n\t\t\t\"protocol ${1:Name} {\",\n\t\t\t\"\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"protocol declaration\"\n\t},\n\t\"extension\": {\n\t\t\"prefix\": \"extension\",\n\t\t\"body\": [\n\t\t\t\"extension ${1:Type} {\",\n\t\t\t\"\",\n\t\t\t\"\\t$0\",\n\t\t\t\"}\"\n\t\t],\n\t\t\"description\": \"extension declaration\"\n\t}\n}\n"
  },
  {
    "path": "extensions/swift/syntaxes/swift.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/jtbandes/swift-tmlanguage/blob/master/Swift.tmLanguage.json\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/jtbandes/swift-tmlanguage/commit/b8d2889b4af1d8bad41578317a6adade642555a3\",\n\t\"name\": \"Swift\",\n\t\"scopeName\": \"source.swift\",\n\t\"comment\": \"See swift.tmbundle/grammar-test.swift for test cases.\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#root\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"async-throws\": {\n\t\t\t\"match\": \"\\\\b(?:(throws\\\\s+async|rethrows\\\\s+async)|(throws|rethrows)|(async))\\\\b\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.await-must-precede-throws.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.exception.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.swift\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"attributes\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.attribute.available.swift\",\n\t\t\t\t\t\"begin\": \"((@)available)(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.attribute.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.attribute.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(swift|(?:iOS|macOS|OSX|watchOS|tvOS|visionOS|UIKitForMac)(?:ApplicationExtension)?)\\\\b(?:\\\\s+([0-9]+(?:\\\\.[0-9]+)*\\\\b))?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.platform.os.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(introduced|deprecated|obsoleted)\\\\s*(:)\\\\s*\",\n\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b[0-9]+(?:\\\\.[0-9]+)*\\\\b\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(message|renamed)\\\\s*(:)\\\\s*(?=\\\")\",\n\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literals\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(?:(\\\\*)|\\\\b(deprecated|unavailable|noasync)\\\\b)\\\\s*(.*?)(?=[,)])\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.platform.all.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.attribute.objc.swift\",\n\t\t\t\t\t\"begin\": \"((@)objc)(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.attribute.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.attribute.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\w*(?::(?:\\\\w*:)*(\\\\w*))?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.missing-colon-after-selector-piece.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"any other attribute\",\n\t\t\t\t\t\"name\": \"meta.attribute.swift\",\n\t\t\t\t\t\"begin\": \"(@)(?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>)\",\n\t\t\t\t\t\"end\": \"(?!\\\\G\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.attribute.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.attribute.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.arguments.attribute.swift\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expressions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Member functions in the standard library in Swift 3 which may be used with trailing closures and no parentheses\",\n\t\t\t\t\t\"name\": \"support.function.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:s(?:ort(?:ed)?|plit)|contains|index|partition|f(?:i(?:lter|rst)|orEach|latMap)|with(?:MutableCharacters|CString|U(?:nsafe(?:Mutable(?:BufferPointer|Pointer(?:s|To(?:Header|Elements)))|BufferPointer)|TF8Buffer))|m(?:in|a(?:p|x)))(?=\\\\s*[({])\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Member functions in the standard library in Swift 3\",\n\t\t\t\t\t\"name\": \"support.function.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:s(?:ymmetricDifference|t(?:oreBytes|arts|ride)|ortInPlace|u(?:ccessor|ffix|btract(?:ing|InPlace|WithOverflow)?)|quareRoot|amePosition)|h(?:oldsUnique(?:Reference|OrPinnedReference)|as(?:Suffix|Prefix))|ne(?:gate(?:d)?|xt)|c(?:o(?:untByEnumerating|py(?:Bytes)?)|lamp(?:ed)?|reate)|t(?:o(?:IntMax|Opaque|UIntMax)|ake(?:RetainedValue|UnretainedValue)|r(?:uncatingRemainder|a(?:nscodedLength|ilSurrogate)))|i(?:s(?:MutableAndUniquelyReferenced(?:OrPinned)?|S(?:trictSu(?:perset(?:Of)?|bset(?:Of)?)|u(?:perset(?:Of)?|bset(?:Of)?))|Continuation|T(?:otallyOrdered|railSurrogate)|Disjoint(?:With)?|Unique(?:Reference|lyReferenced(?:OrPinned)?)|Equal|Le(?:ss(?:ThanOrEqualTo)?|adSurrogate))|n(?:sert(?:ContentsOf)?|tersect(?:ion|InPlace)?|itialize(?:Memory|From)?|dex(?:Of|ForKey)))|o(?:verlaps|bjectAt)|d(?:i(?:stance(?:To)?|vide(?:d|WithOverflow)?)|e(?:s(?:cendant|troy)|code(?:CString)?|initialize|alloc(?:ate(?:Capacity)?)?)|rop(?:First|Last))|u(?:n(?:ion(?:InPlace)?|derestimateCount|wrappedOrError)|p(?:date(?:Value)?|percased))|join(?:ed|WithSeparator)|p(?:op(?:First|Last)|ass(?:Retained|Unretained)|re(?:decessor|fix))|e(?:scape(?:d)?|n(?:code|umerate(?:d)?)|lementsEqual|xclusiveOr(?:InPlace)?)|f(?:orm(?:Remainder|S(?:ymmetricDifference|quareRoot)|TruncatingRemainder|In(?:tersection|dex)|Union)|latten|rom(?:CString(?:RepairingIllFormedUTF8)?|Opaque))|w(?:i(?:thMemoryRebound|dth)|rite(?:To)?)|l(?:o(?:wercased|ad)|e(?:adSurrogate|xicographical(?:Compare|lyPrecedes)))|a(?:ss(?:ign(?:BackwardFrom|From)?|umingMemoryBound)|d(?:d(?:ing(?:Product)?|Product|WithOverflow)?|vanced(?:By)?)|utorelease|ppend(?:ContentsOf)?|lloc(?:ate)?|bs)|r(?:ound(?:ed)?|e(?:serveCapacity|tain|duce|place(?:Range|Subrange)?|verse(?:d)?|quest(?:NativeBuffer|UniqueMutableBackingBuffer)|lease|m(?:ove(?:Range|Subrange|Value(?:ForKey)?|First|Last|A(?:tIndex|ll))?|ainder(?:WithOverflow)?)))|ge(?:nerate|t(?:Objects|Element))|m(?:in(?:imum(?:Magnitude)?|Element)|ove(?:Initialize(?:Memory|BackwardFrom|From)?|Assign(?:From)?)?|ultipl(?:y(?:WithOverflow)?|ied)|easure|a(?:ke(?:Iterator|Description)|x(?:imum(?:Magnitude)?|Element)))|bindMemory)(?=\\\\s*\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Member functions in the standard library in Swift 2 only\",\n\t\t\t\t\t\"name\": \"support.function.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:s(?:uperclassMirror|amePositionIn|tartsWith)|nextObject|c(?:haracterAtIndex|o(?:untByEnumeratingWithState|pyWithZone)|ustom(?:Mirror|PlaygroundQuickLook))|is(?:EmptyInput|ASCII)|object(?:Enumerator|ForKey|AtIndex)|join|put|keyEnumerator|withUnsafeMutablePointerToValue|length|getMirror|m(?:oveInitializeAssignFrom|ember))(?=\\\\s*\\\\()\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-global-functions\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\b(type)(\\\\()\\\\s*(of)(:)\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.dynamic-type.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.parameter.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.argument-label.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Global functions available in Swift 3 which may be used with trailing closures and no parentheses\",\n\t\t\t\t\t\"name\": \"support.function.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:anyGenerator|autoreleasepool)(?=\\\\s*[({])\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Global functions available in Swift 3\",\n\t\t\t\t\t\"name\": \"support.function.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:s(?:tride(?:of(?:Value)?)?|izeof(?:Value)?|equence|wap)|numericCast|transcode|is(?:UniquelyReferenced(?:NonObjC)?|KnownUniquelyReferenced)|zip|d(?:ump|ebugPrint)|unsafe(?:BitCast|Downcast|Unwrap|Address(?:Of)?)|pr(?:int|econdition(?:Failure)?)|fatalError|with(?:Unsafe(?:MutablePointer|Pointer)|ExtendedLifetime|VaList)|a(?:ssert(?:ionFailure)?|lignof(?:Value)?|bs)|re(?:peatElement|adLine)|getVaList|m(?:in|ax))(?=\\\\s*\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Global functions available in Swift 2 only\",\n\t\t\t\t\t\"name\": \"support.function.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:s(?:ort|uffix|pli(?:ce|t))|insert|overlaps|d(?:istance|rop(?:First|Last))|join|prefix|extend|withUnsafe(?:MutablePointers|Pointers)|lazy|advance|re(?:flect|move(?:Range|Last|A(?:tIndex|ll))))(?=\\\\s*\\\\()\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-properties\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"The simpler (?<=\\\\bProcess\\\\.|\\\\bCommandLine\\\\.) breaks VS Code / Atom, see https://github.com/textmate/swift.tmbundle/issues/29\",\n\t\t\t\t\t\"name\": \"support.variable.swift\",\n\t\t\t\t\t\"match\": \"(?<=^Process\\\\.|\\\\WProcess\\\\.|^CommandLine\\\\.|\\\\WCommandLine\\\\.)(arguments|argc|unsafeArgv)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Properties in the standard library in Swift 3\",\n\t\t\t\t\t\"name\": \"support.variable.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:s(?:t(?:artIndex|ri(?:ngValue|de))|i(?:ze|gn(?:BitIndex|ificand(?:Bit(?:Count|Pattern)|Width)?|alingNaN)?)|u(?:perclassMirror|mmary|bscriptBaseAddress))|h(?:eader|as(?:hValue|PointerRepresentation))|n(?:ulTerminatedUTF8|ext(?:Down|Up)|a(?:n|tiveOwner))|c(?:haracters|ount(?:TrailingZeros)?|ustom(?:Mirror|PlaygroundQuickLook)|apacity)|i(?:s(?:S(?:ign(?:Minus|aling(?:NaN)?)|ubnormal)|N(?:ormal|aN)|Canonical|Infinite|Zero|Empty|Finite|ASCII)|n(?:dices|finity)|dentity)|owner|de(?:scription|bugDescription)|u(?:n(?:safelyUnwrapped|icodeScalar(?:s)?|derestimatedCount)|tf(?:16|8(?:Start|C(?:String|odeUnitCount))?)|intValue|ppercaseString|lp(?:OfOne)?)|p(?:i|ointee)|e(?:ndIndex|lements|xponent(?:Bit(?:Count|Pattern))?)|value(?:s)?|keys|quietNaN|f(?:irst(?:ElementAddress(?:IfContiguous)?)?|loatingPointClass)|l(?:ittleEndian|owercaseString|eastNo(?:nzeroMagnitude|rmalMagnitude)|a(?:st|zy))|a(?:l(?:ignment|l(?:ocatedElementCount|Zeros))|rray(?:PropertyIsNativeTypeChecked)?)|ra(?:dix|wValue)|greatestFiniteMagnitude|m(?:in|emory|ax)|b(?:yteS(?:ize|wapped)|i(?:nade|tPattern|gEndian)|uffer|ase(?:Address)?))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Properties in the standard library in Swift 2 only\",\n\t\t\t\t\t\"name\": \"support.variable.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:boolValue|disposition|end|objectIdentifier|quickLookObject|start|valueType)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Enum cases in the standard library - note that there is some overlap between these and the properties\",\n\t\t\t\t\t\"name\": \"support.variable.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:s(?:calarValue|i(?:ze|gnalingNaN)|o(?:und|me)|uppressed|prite|et)|n(?:one|egative(?:Subnormal|Normal|Infinity|Zero))|c(?:ol(?:or|lection)|ustomized)|t(?:o(?:NearestOr(?:Even|AwayFromZero)|wardZero)|uple|ext)|i(?:nt|mage)|optional|d(?:ictionary|o(?:uble|wn))|u(?:Int|p|rl)|p(?:o(?:sitive(?:Subnormal|Normal|Infinity|Zero)|int)|lus)|e(?:rror|mptyInput)|view|quietNaN|float|a(?:ttributedString|wayFromZero)|r(?:ectangle|ange)|generated|minus|b(?:ool|ezierPath))\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-types\": {\n\t\t\t\"comment\": \"Types provided in the standard library\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types-builtin-class-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types-builtin-enum-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types-builtin-protocol-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types-builtin-struct-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types-builtin-typealias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.type.any.swift\",\n\t\t\t\t\t\"match\": \"\\\\bAny\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-types-builtin-class-type\": {\n\t\t\t\"comment\": \"Builtin class types\",\n\t\t\t\"name\": \"support.class.swift\",\n\t\t\t\"match\": \"\\\\b(Managed(Buffer|ProtoBuffer)|NonObjectiveCBase|AnyGenerator)\\\\b\"\n\t\t},\n\t\t\"builtin-types-builtin-enum-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"CommandLine is an enum, but it acts like a constant\",\n\t\t\t\t\t\"name\": \"support.constant.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:CommandLine|Process(?=\\\\.))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"The return type of a function that never returns\",\n\t\t\t\t\t\"name\": \"support.constant.never.swift\",\n\t\t\t\t\t\"match\": \"\\\\bNever\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Enum types in the standard library in Swift 3\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:ImplicitlyUnwrappedOptional|Representation|MemoryLayout|FloatingPointClassification|SetIndexRepresentation|SetIteratorRepresentation|FloatingPointRoundingRule|UnicodeDecodingResult|Optional|DictionaryIndexRepresentation|AncestorRepresentation|DisplayStyle|PlaygroundQuickLook|Never|FloatingPointSign|Bit|DictionaryIteratorRepresentation)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Enum types in the standard library in Swift 2 only\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:MirrorDisposition|QuickLookObject)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-types-builtin-protocol-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Protocols in the standard library in Swift 3\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:Ra(?:n(?:domAccess(?:Collection|Indexable)|geReplaceable(?:Collection|Indexable))|wRepresentable)|M(?:irrorPath|utable(?:Collection|Indexable))|Bi(?:naryFloatingPoint|twiseOperations|directional(?:Collection|Indexable))|S(?:tr(?:ideable|eamable)|igned(?:Number|Integer)|e(?:tAlgebra|quence))|Hashable|C(?:o(?:llection|mparable)|ustom(?:Reflectable|StringConvertible|DebugStringConvertible|PlaygroundQuickLookable|LeafReflectable)|VarArg)|TextOutputStream|I(?:n(?:teger(?:Arithmetic)?|dexable(?:Base)?)|teratorProtocol)|OptionSet|Un(?:signedInteger|icodeCodec)|E(?:quatable|rror|xpressibleBy(?:BooleanLiteral|String(?:Interpolation|Literal)|NilLiteral|IntegerLiteral|DictionaryLiteral|UnicodeScalarLiteral|ExtendedGraphemeClusterLiteral|FloatLiteral|ArrayLiteral))|FloatingPoint|L(?:osslessStringConvertible|azy(?:SequenceProtocol|CollectionProtocol))|A(?:nyObject|bsoluteValuable))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Protocols in the standard library in Swift 2 only\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:Ran(?:domAccessIndexType|geReplaceableCollectionType)|GeneratorType|M(?:irror(?:Type|PathType)|utable(?:Sliceable|CollectionType))|B(?:i(?:twiseOperationsType|directionalIndexType)|oolean(?:Type|LiteralConvertible))|S(?:tring(?:InterpolationConvertible|LiteralConvertible)|i(?:nkType|gned(?:NumberType|IntegerType))|e(?:tAlgebraType|quenceType)|liceable)|NilLiteralConvertible|C(?:ollectionType|VarArgType)|Inte(?:rvalType|ger(?:Type|LiteralConvertible|ArithmeticType))|O(?:utputStreamType|ptionSetType)|DictionaryLiteralConvertible|Un(?:signedIntegerType|icode(?:ScalarLiteralConvertible|CodecType))|E(?:rrorType|xten(?:sibleCollectionType|dedGraphemeClusterLiteralConvertible))|F(?:orwardIndexType|loat(?:ingPointType|LiteralConvertible))|A(?:nyCollectionType|rrayLiteralConvertible))\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-types-builtin-struct-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Structs in the standard library in Swift 3\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:R(?:e(?:peat(?:ed)?|versed(?:RandomAccess(?:Collection|Index)|Collection|Index))|an(?:domAccessSlice|ge(?:Replaceable(?:RandomAccessSlice|BidirectionalSlice|Slice)|Generator)?))|Generator(?:Sequence|OfOne)|M(?:irror|utable(?:Ran(?:domAccessSlice|geReplaceable(?:RandomAccessSlice|BidirectionalSlice|Slice))|BidirectionalSlice|Slice)|anagedBufferPointer)|B(?:idirectionalSlice|ool)|S(?:t(?:aticString|ri(?:ng|deT(?:hrough(?:Generator|Iterator)?|o(?:Generator|Iterator)?)))|et(?:I(?:ndex|terator))?|lice)|HalfOpenInterval|C(?:haracter(?:View)?|o(?:ntiguousArray|untable(?:Range|ClosedRange)|llectionOfOne)|OpaquePointer|losed(?:Range(?:I(?:ndex|terator))?|Interval)|VaListPointer)|I(?:n(?:t(?:16|8|32|64)?|d(?:ices|ex(?:ing(?:Generator|Iterator))?))|terator(?:Sequence|OverOne)?)|Zip2(?:Sequence|Iterator)|O(?:paquePointer|bjectIdentifier)|D(?:ictionary(?:I(?:ndex|terator)|Literal)?|ouble|efault(?:RandomAccessIndices|BidirectionalIndices|Indices))|U(?:n(?:safe(?:RawPointer|Mutable(?:RawPointer|BufferPointer|Pointer)|BufferPointer(?:Generator|Iterator)?|Pointer)|icodeScalar(?:View)?|foldSequence|managed)|TF(?:16(?:View)?|8(?:View)?|32)|Int(?:16|8|32|64)?)|Join(?:Generator|ed(?:Sequence|Iterator))|PermutationGenerator|E(?:numerate(?:Generator|Sequence|d(?:Sequence|Iterator))|mpty(?:Generator|Collection|Iterator))|Fl(?:oat(?:80)?|atten(?:Generator|BidirectionalCollection(?:Index)?|Sequence|Collection(?:Index)?|Iterator))|L(?:egacyChildren|azy(?:RandomAccessCollection|Map(?:RandomAccessCollection|Generator|BidirectionalCollection|Sequence|Collection|Iterator)|BidirectionalCollection|Sequence|Collection|Filter(?:Generator|BidirectionalCollection|Sequence|Collection|I(?:ndex|terator))))|A(?:ny(?:RandomAccessCollection|Generator|BidirectionalCollection|Sequence|Hashable|Collection|I(?:ndex|terator))|utoreleasingUnsafeMutablePointer|rray(?:Slice)?))\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Structs in the standard library in Swift 2 only\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:R(?:everse(?:RandomAccess(?:Collection|Index)|Collection|Index)|awByte)|Map(?:Generator|Sequence|Collection)|S(?:inkOf|etGenerator)|Zip2Generator|DictionaryGenerator|Filter(?:Generator|Sequence|Collection(?:Index)?)|LazyForwardCollection|Any(?:RandomAccessIndex|BidirectionalIndex|Forward(?:Collection|Index)))\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"builtin-types-builtin-typealias\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Typealiases in the standard library in Swift 3\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:Raw(?:Significand|Exponent|Value)|B(?:ooleanLiteralType|uffer|ase)|S(?:t(?:orage|r(?:i(?:ngLiteralType|de)|eam(?:1|2)))|ubSequence)|NativeBuffer|C(?:hild(?:ren)?|Bool|S(?:hort|ignedChar)|odeUnit|Char(?:16|32)?|Int|Double|Unsigned(?:Short|Char|Int|Long(?:Long)?)|Float|WideChar|Long(?:Long)?)|I(?:n(?:t(?:Max|egerLiteralType)|d(?:ices|ex(?:Distance)?))|terator)|Distance|U(?:n(?:icodeScalar(?:Type|Index|View|LiteralType)|foldFirstSequence)|TF(?:16(?:Index|View)|8Index)|IntMax)|E(?:lement(?:s)?|x(?:tendedGraphemeCluster(?:Type|LiteralType)|ponent))|V(?:oid|alue)|Key|Float(?:32|LiteralType|64)|AnyClass)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Typealiases in the standard library in Swift 2 only\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:Generator|PlaygroundQuickLook|UWord|Word)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"code-block\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.scope.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.number-sign.swift\",\n\t\t\t\t\t\"match\": \"\\\\A^(#!).*$\\\\n?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.swift\",\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-nested\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.playground.swift\",\n\t\t\t\t\t\"begin\": \"/\\\\*:\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-nested\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.swift\",\n\t\t\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments-nested\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.unexpected-end-of-block-comment.swift\",\n\t\t\t\t\t\"match\": \"\\\\*/\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?(?=//)\",\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"comment.line.triple-slash.documentation.swift\",\n\t\t\t\t\t\t\t\"begin\": \"///\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.documentation.swift\",\n\t\t\t\t\t\t\t\"begin\": \"//:\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.swift\",\n\t\t\t\t\t\t\t\"begin\": \"//\",\n\t\t\t\t\t\t\t\"end\": \"$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments-nested\": {\n\t\t\t\"begin\": \"/\\\\*\",\n\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments-nested\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"compiler-control\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"comment.block.preprocessor.swift\",\n\t\t\t\t\t\"begin\": \"^\\\\s*(#)(if|elseif)\\\\s+(false)\\\\b.*?(?=$|//|/\\\\*)\",\n\t\t\t\t\t\"end\": \"(?=^\\\\s*(#(elseif|else|endif)\\\\b))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.preprocessor.conditional.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.preprocessor.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.preprocessor.conditional.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.boolean.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.preprocessor.conditional.swift\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.preprocessor.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.preprocessor.conditional.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"begin\": \"^\\\\s*(#)(if|elseif)\\\\s+\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*(?://|/\\\\*))|$\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.swift\",\n\t\t\t\t\t\t\t\"match\": \"(&&|\\\\|\\\\|)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.language.boolean.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\b(true|false)\\\\b\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(arch)\\\\s*(\\\\()\\\\s*(?:(arm|arm64|powerpc64|powerpc64le|i386|x86_64|s390x)|\\\\w+)\\\\s*(\\\\))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.condition.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.platform.architecture.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(os)\\\\s*(\\\\()\\\\s*(?:(macOS|OSX|iOS|tvOS|watchOS|visionOS|Android|Linux|FreeBSD|Windows|PS4)|\\\\w+)\\\\s*(\\\\))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.condition.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.platform.os.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(canImport)\\\\s*(\\\\()([\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*)(\\\\))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.condition.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(targetEnvironment)\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.condition.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"support.constant.platform.environment.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b(simulator|UIKitForMac)\\\\b\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\b(swift|compiler)\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"end\": \"(\\\\))|$\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.condition.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \">=|<\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\b[0-9]+(?:\\\\.[0-9]+)*\\\\b\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.preprocessor.conditional.swift\",\n\t\t\t\t\t\"match\": \"^\\\\s*(#)(else|endif)(.*?)(?=$|//|/\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.preprocessor.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.preprocessor.conditional.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\S+\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.preprocessor.sourcelocation.swift\",\n\t\t\t\t\t\"match\": \"^\\\\s*(#)(sourceLocation)((\\\\()([^)]*)(\\\\)))(.*?)(?=$|//|/\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.preprocessor.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.preprocessor.sourcelocation.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"(file)\\\\s*(:)\\\\s*(?=\\\")\",\n\t\t\t\t\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.variable.parameter.swift\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.swift\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#literals\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"match\": \"(line)\\\\s*(:)\\\\s*([0-9]+)\",\n\t\t\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"support.variable.parameter.swift\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.swift\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.swift\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.parameters.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \",\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\S+\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\t\t\"match\": \"\\\\S+\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"conditionals\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(if|guard|switch|for)\\\\b\",\n\t\t\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"while can be the end of a repeat-while statement so doesn't necessarily have braces after it\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(while)\\\\b\",\n\t\t\t\t\t\"end\": \"(?=\\\\{)|$\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-function-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-function-subscript\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-typed-variable-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-import\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-precedencegroup\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-protocol\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-extension\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-typealias\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-macro\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-available-types\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.async.swift\",\n\t\t\t\t\t\"match\": \"\\\\basync\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.exception.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:throws|rethrows)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.operator.type.opaque.swift\",\n\t\t\t\t\t\"match\": \"\\\\bsome\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.operator.type.existential.swift\",\n\t\t\t\t\t\"match\": \"\\\\bany\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:repeat|each)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:inout|isolated|borrowing|consuming)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.language.swift\",\n\t\t\t\t\t\"match\": \"\\\\bSelf\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![/=\\\\-+!*%<>&|\\\\^~.])(->)(?![/=\\\\-+!*%<>&|\\\\^~.])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.function.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: A & B\",\n\t\t\t\t\t\"match\": \"(?<![/=\\\\-+!*%<>&|\\\\^~.])(&)(?![/=\\\\-+!*%<>&|\\\\^~.])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.composition.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.type.optional.swift\",\n\t\t\t\t\t\"match\": \"[?!]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.function.variadic-parameter.swift\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 2: protocol<A, B>\",\n\t\t\t\t\t\"name\": \"keyword.other.type.composition.swift\",\n\t\t\t\t\t\"match\": \"\\\\bprotocol\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.type.metatype.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:Protocol|Type)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types-tuple-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types-collection-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-argument-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-available-types-collection-type\": {\n\t\t\t\"comment\": \"array and dictionary types [Value] and [Key: Value]\",\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"end\": \"\\\\]|(?=[>){}])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.collection-type.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.collection-type.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"end\": \"(?=\\\\]|[>){}])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.key-value.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-colon-in-dictionary-type.swift\",\n\t\t\t\t\t\t\t\"match\": \":\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-available-types-tuple-type\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"\\\\)|(?=[>\\\\]{}])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.tuple-type.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.tuple-type.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-extension\": {\n\t\t\t\"name\": \"meta.definition.type.$1.swift\",\n\t\t\t\"begin\": \"\\\\b(extension)\\\\s+((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\",\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0143: Conditional Conformances\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-inheritance-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.type.body.swift\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-function\": {\n\t\t\t\"name\": \"meta.definition.function.swift\",\n\t\t\t\"begin\": \"(?x)\\n\\\\b\\n(func)\\n\\\\s+\\n(\\n  (?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>)\\n  | (?:\\n    (\\n      (?<oph>                # operator-head\\n        [/=\\\\-+!*%<>&|^~?]\\n        | [\\\\x{00A1}-\\\\x{00A7}]\\n        | [\\\\x{00A9}\\\\x{00AB}]\\n        | [\\\\x{00AC}\\\\x{00AE}]\\n        | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n        | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n        | [\\\\x{2030}-\\\\x{203E}]\\n        | [\\\\x{2041}-\\\\x{2053}]\\n        | [\\\\x{2055}-\\\\x{205E}]\\n        | [\\\\x{2190}-\\\\x{23FF}]\\n        | [\\\\x{2500}-\\\\x{2775}]\\n        | [\\\\x{2794}-\\\\x{2BFF}]\\n        | [\\\\x{2E00}-\\\\x{2E7F}]\\n        | [\\\\x{3001}-\\\\x{3003}]\\n        | [\\\\x{3008}-\\\\x{3030}]\\n      )\\n      (\\n        \\\\g<oph>\\n        | (?<opc>                # operator-character\\n          [\\\\x{0300}-\\\\x{036F}]\\n          | [\\\\x{1DC0}-\\\\x{1DFF}]\\n          | [\\\\x{20D0}-\\\\x{20FF}]\\n          | [\\\\x{FE00}-\\\\x{FE0F}]\\n          | [\\\\x{FE20}-\\\\x{FE2F}]\\n          | [\\\\x{E0100}-\\\\x{E01EF}]\\n        )\\n      )*\\n    )\\n    | ( \\\\. ( \\\\g<oph> | \\\\g<opc> | \\\\. )+ )      # Dot operators\\n  )\\n)\\n\\\\s*\\n(?=\\\\(|<)\",\n\t\t\t\"end\": \"(?<=\\\\})|$(?# functions in protocol declarations or generated interfaces have no body)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-function-result\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-throws\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: generic constraints after the parameters and return type\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.function.body.swift\",\n\t\t\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-function-initializer\": {\n\t\t\t\"name\": \"meta.definition.function.initializer.swift\",\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(init[?!]*(?# only one is valid, but we want the in⇥ snippet to produce something that looks good))\\\\s*(?=\\\\(|<)\",\n\t\t\t\"end\": \"(?<=\\\\})|$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\"match\": \"(?<=[?!])[?!]+\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-throws\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: generic constraints after the parameters and return type\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.function.body.swift\",\n\t\t\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-function-result\": {\n\t\t\t\"name\": \"meta.function-result.swift\",\n\t\t\t\"begin\": \"(?<![/=\\\\-+!*%<>&|\\\\^~.])(->)(?![/=\\\\-+!*%<>&|\\\\^~.])\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)(?=\\\\{|\\\\bwhere\\\\b|;|=)|$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.function-result.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-function-subscript\": {\n\t\t\t\"name\": \"meta.definition.function.subscript.swift\",\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(subscript)\\\\s*(?=\\\\(|<)\",\n\t\t\t\"end\": \"(?<=\\\\})|$\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-function-result\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-throws\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.function.body.swift\",\n\t\t\t\t\t\"begin\": \"(\\\\{)\",\n\t\t\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-generic-argument-clause\": {\n\t\t\t\"name\": \"meta.generic-argument-clause.swift\",\n\t\t\t\"begin\": \"<\",\n\t\t\t\"end\": \">|(?=[)\\\\]{}])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.generic-argument-clause.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.generic-argument-clause.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-generic-parameter-clause\": {\n\t\t\t\"name\": \"meta.generic-parameter-clause.swift\",\n\t\t\t\"begin\": \"<\",\n\t\t\t\"end\": \">|(?=[^\\\\w\\\\d:<>\\\\s,=&`])(?# characters besides these are never valid in a generic param list -- even if it's not really a valid clause, we should stop trying to parse it if we see one of them.)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.generic-parameter-clause.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.generic-parameter-clause.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 2: constraints inside the generic param list\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.swift\",\n\t\t\t\t\t\"match\": \"\\\\beach\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b((?!\\\\d)\\\\w[\\\\w\\\\d]*)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.language.generic-parameter.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.generic-parameters.swift\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.generic-parameter-constraint.swift\",\n\t\t\t\t\t\"begin\": \"(:)\\\\s*\",\n\t\t\t\t\t\"end\": \"(?=[,>]|(?!\\\\G)\\\\bwhere\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.generic-parameter-constraint.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.other.inherited-class.swift\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\t\t\"end\": \"(?=[,>]|(?!\\\\G)\\\\bwhere\\\\b)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#declarations-type-identifier\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#declarations-type-operators\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-generic-where-clause\": {\n\t\t\t\"name\": \"meta.generic-where-clause.swift\",\n\t\t\t\"begin\": \"\\\\b(where)\\\\b\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)$|(?=[>{};\\\\n]|//|/\\\\*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.generic-constraint-introducer.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause-requirement-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-generic-where-clause-requirement-list\": {\n\t\t\t\"begin\": \"\\\\G|,\\\\s*\",\n\t\t\t\"end\": \"(?=[,>{};\\\\n]|//|/\\\\*)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#constraint\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.generic-where-clause.same-type-requirement.swift\",\n\t\t\t\t\t\"begin\": \"(?<![/=\\\\-+!*%<>&|\\\\^~.])(==)(?![/=\\\\-+!*%<>&|\\\\^~.])\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*[,>{};\\\\n]|//|/\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.generic-constraint.same-type.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.generic-where-clause.conformance-requirement.swift\",\n\t\t\t\t\t\"begin\": \"(?<![/=\\\\-+!*%<>&|\\\\^~.])(:)(?![/=\\\\-+!*%<>&|\\\\^~.])\",\n\t\t\t\t\t\"end\": \"(?=\\\\s*[,>{};\\\\n]|//|/\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.generic-constraint.conforms-to.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"contentName\": \"entity.other.inherited-class.swift\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\G\\\\s*\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*[,>{};\\\\n]|//|/\\\\*)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-import\": {\n\t\t\t\"name\": \"meta.import.swift\",\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(import)\\\\s+\",\n\t\t\t\"end\": \"(;)|$\\\\n?|(?=//|/\\\\*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?!;|$|//|/\\\\*)(?:(typealias|struct|class|actor|enum|protocol|var|func)\\\\s+)?\",\n\t\t\t\t\t\"end\": \"(?=;|$|//|/\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.swift\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?<=\\\\G|\\\\.)\\n(?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.swift\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?<=\\\\G|\\\\.)\\n\\\\$[0-9]+\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.swift\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(?<=\\\\G|\\\\.)\\n(?:\\n  (\\n    (?<oph>                # operator-head\\n      [/=\\\\-+!*%<>&|^~?]\\n      | [\\\\x{00A1}-\\\\x{00A7}]\\n      | [\\\\x{00A9}\\\\x{00AB}]\\n      | [\\\\x{00AC}\\\\x{00AE}]\\n      | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n      | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n      | [\\\\x{2030}-\\\\x{203E}]\\n      | [\\\\x{2041}-\\\\x{2053}]\\n      | [\\\\x{2055}-\\\\x{205E}]\\n      | [\\\\x{2190}-\\\\x{23FF}]\\n      | [\\\\x{2500}-\\\\x{2775}]\\n      | [\\\\x{2794}-\\\\x{2BFF}]\\n      | [\\\\x{2E00}-\\\\x{2E7F}]\\n      | [\\\\x{3001}-\\\\x{3003}]\\n      | [\\\\x{3008}-\\\\x{3030}]\\n    )\\n    (\\n      \\\\g<oph>\\n      | (?<opc>                # operator-character\\n        [\\\\x{0300}-\\\\x{036F}]\\n        | [\\\\x{1DC0}-\\\\x{1DFF}]\\n        | [\\\\x{20D0}-\\\\x{20FF}]\\n        | [\\\\x{FE00}-\\\\x{FE0F}]\\n        | [\\\\x{FE20}-\\\\x{FE2F}]\\n        | [\\\\x{E0100}-\\\\x{E01EF}]\\n      )\\n    )*\\n  )\\n  | ( \\\\. ( \\\\g<oph> | \\\\g<opc> | \\\\. )+ )      # Dot operators\\n)\\n(?=\\\\.|;|$|//|/\\\\*|\\\\s)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.dot-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\.\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.import.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\.\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\"begin\": \"(?!\\\\s*(;|$|//|/\\\\*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(;|$|//|/\\\\*))\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-inheritance-clause\": {\n\t\t\t\"name\": \"meta.inheritance-clause.swift\",\n\t\t\t\"begin\": \"(:)(?=\\\\s*\\\\{)|(:)\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)$|(?=[={}]|(?!\\\\G)\\\\bwhere\\\\b)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.empty-inheritance-clause.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.inheritance-clause.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\bclass\\\\b\",\n\t\t\t\t\t\"end\": \"(?=[={}]|(?!\\\\G)\\\\bwhere\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-inheritance-clause-more-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G\",\n\t\t\t\t\t\"end\": \"(?!\\\\G)$|(?=[={}]|(?!\\\\G)\\\\bwhere\\\\b)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-inheritance-clause-inherited-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-inheritance-clause-more-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-type-operators\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-inheritance-clause-inherited-type\": {\n\t\t\t\"name\": \"entity.other.inherited-class.swift\",\n\t\t\t\"begin\": \"(?=[`\\\\p{L}_])\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-identifier\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-inheritance-clause-more-types\": {\n\t\t\t\"name\": \"meta.inheritance-list.more-types\",\n\t\t\t\"begin\": \",\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)(?!//|/\\\\*)|(?=[,={}]|(?!\\\\G)\\\\bwhere\\\\b)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-inheritance-clause-inherited-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-inheritance-clause-more-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-operators\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-macro\": {\n\t\t\t\"name\": \"meta.definition.macro.swift\",\n\t\t\t\"begin\": \"(?x)\\n\\\\b\\n(macro)\\n\\\\s+\\n((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\n\\\\s*\\n(?=\\\\(|<|=)\",\n\t\t\t\"end\": \"$|(?=;|//|/\\\\*|\\\\}|=)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-function-result\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-throws\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: generic constraints after the parameters and return type\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-operator\": {\n\t\t\t\"name\": \"meta.definition.operator.swift\",\n\t\t\t\"begin\": \"(?x)\\n(?:\\n  \\\\b(prefix|infix|postfix)\\n  \\\\s+\\n)?\\n\\\\b\\n(operator)\\n\\\\s+\\n(\\n  (\\n    (?<oph>                  # operator-head\\n      [/=\\\\-+!*%<>&|^~?]\\n      | [\\\\x{00A1}-\\\\x{00A7}]\\n      | [\\\\x{00A9}\\\\x{00AB}]\\n      | [\\\\x{00AC}\\\\x{00AE}]\\n      | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n      | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n      | [\\\\x{2030}-\\\\x{203E}]\\n      | [\\\\x{2041}-\\\\x{2053}]\\n      | [\\\\x{2055}-\\\\x{205E}]\\n      | [\\\\x{2190}-\\\\x{23FF}]\\n      | [\\\\x{2500}-\\\\x{2775}]\\n      | [\\\\x{2794}-\\\\x{2BFF}]\\n      | [\\\\x{2E00}-\\\\x{2E7F}]\\n      | [\\\\x{3001}-\\\\x{3003}]\\n      | [\\\\x{3008}-\\\\x{3030}]\\n    )\\n    (\\n      \\\\g<oph>\\n      | \\\\.                  # Invalid dot\\n      | (?<opc>                # operator-character\\n        [\\\\x{0300}-\\\\x{036F}]\\n        | [\\\\x{1DC0}-\\\\x{1DFF}]\\n        | [\\\\x{20D0}-\\\\x{20FF}]\\n        | [\\\\x{FE00}-\\\\x{FE0F}]\\n        | [\\\\x{FE20}-\\\\x{FE2F}]\\n        | [\\\\x{E0100}-\\\\x{E01EF}]\\n      )\\n    )*+\\n  )\\n  | ( \\\\. ( \\\\g<oph> | \\\\g<opc> | \\\\. )++ )      # Dot operators\\n)\\n\\\\s*\",\n\t\t\t\"end\": \"(;)|$\\\\n?|(?=//|/\\\\*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.function.operator.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.function.operator.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"comment\": \"workaround for https://github.com/microsoft/vscode-textmate/issues/140#issuecomment-1793610346\",\n\t\t\t\t\t\"name\": \"entity.name.function.operator.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.dot-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\.\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.terminator.statement.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-operator-swift2\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-operator-swift3\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\"match\": \"((?!$|;|//|/\\\\*)\\\\S)+\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-operator-swift2\": {\n\t\t\t\"begin\": \"\\\\G(\\\\{)\",\n\t\t\t\"end\": \"(\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.operator.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.operator.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(associativity)\\\\s+(left|right)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.operator.associativity.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(precedence)\\\\s+([0-9]+)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\b(assignment)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-operator-swift3\": {\n\t\t\t\"match\": \"\\\\G(:)\\\\s*((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.other.inherited-class.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-types-precedencegroup\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"declarations-parameter-clause\": {\n\t\t\t\"name\": \"meta.parameter-clause.swift\",\n\t\t\t\"begin\": \"(\\\\()\",\n\t\t\t\"end\": \"(\\\\))(?:\\\\s*(async)\\\\b)?\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-parameter-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-parameter-list\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"External parameter labels are considered part of the function name\",\n\t\t\t\t\t\"match\": \"((?<q1>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q1>))\\\\s+((?<q2>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q2>))(?=\\\\s*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"If no external label is given, the name is both the external label and the internal variable name\",\n\t\t\t\t\t\"match\": \"(((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>)))(?=\\\\s*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \":\\\\s*(?!\\\\s)\",\n\t\t\t\t\t\"end\": \"(?=[,)])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-colon-in-parameter-list.swift\",\n\t\t\t\t\t\t\t\"match\": \":\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"a parameter's default value\",\n\t\t\t\t\t\t\t\"begin\": \"=\",\n\t\t\t\t\t\t\t\"end\": \"(?=[,)])\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expressions\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-precedencegroup\": {\n\t\t\t\"name\": \"meta.definition.precedencegroup.swift\",\n\t\t\t\"begin\": \"\\\\b(precedencegroup)\\\\s+((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*(?=\\\\{)\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.precedencegroup.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.precedencegroup.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.precedencegroup.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.precedencegroup.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(higherThan|lowerThan)\\\\s*:\\\\s*((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.other.inherited-class.swift\",\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#declarations-types-precedencegroup\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(associativity)\\\\b(?:\\\\s*:\\\\s*(right|left|none)\\\\b)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.operator.associativity.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\b(assignment)\\\\b(?:\\\\s*:\\\\s*(true|false)\\\\b)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.language.boolean.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-protocol\": {\n\t\t\t\"name\": \"meta.definition.type.protocol.swift\",\n\t\t\t\"begin\": \"\\\\b(protocol)\\\\s+((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\",\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.$1.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-inheritance-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0142: Permit where clauses to constrain associated types\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.type.body.swift\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-protocol-protocol-method\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-protocol-protocol-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-protocol-associated-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-protocol-associated-type\": {\n\t\t\t\"name\": \"meta.definition.associatedtype.swift\",\n\t\t\t\"begin\": \"\\\\b(associatedtype)\\\\s+((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)$|(?=[;}]|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.declaration-specifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.language.associatedtype.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-inheritance-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0142: Permit where clauses to constrain associated types\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-typealias-assignment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-protocol-protocol-initializer\": {\n\t\t\t\"name\": \"meta.definition.function.initializer.swift\",\n\t\t\t\"begin\": \"(?<!\\\\.)\\\\b(init[?!]*(?# only one is valid, but we want the in⇥ snippet to produce something that looks good))\\\\s*(?=\\\\(|<)\",\n\t\t\t\"end\": \"$|(?=;|//|/\\\\*|\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\t\t\"match\": \"(?<=[?!])[?!]+\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-throws\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: generic constraints after the parameters and return type\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.function-body-not-allowed-in-protocol.swift\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-protocol-protocol-method\": {\n\t\t\t\"name\": \"meta.definition.function.swift\",\n\t\t\t\"begin\": \"(?x)\\n\\\\b\\n(func)\\n\\\\s+\\n(\\n  (?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>)\\n    | (?:\\n      (\\n        (?<oph>                # operator-head\\n          [/=\\\\-+!*%<>&|^~?]\\n          | [\\\\x{00A1}-\\\\x{00A7}]\\n          | [\\\\x{00A9}\\\\x{00AB}]\\n          | [\\\\x{00AC}\\\\x{00AE}]\\n          | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n          | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n          | [\\\\x{2030}-\\\\x{203E}]\\n          | [\\\\x{2041}-\\\\x{2053}]\\n          | [\\\\x{2055}-\\\\x{205E}]\\n          | [\\\\x{2190}-\\\\x{23FF}]\\n          | [\\\\x{2500}-\\\\x{2775}]\\n          | [\\\\x{2794}-\\\\x{2BFF}]\\n          | [\\\\x{2E00}-\\\\x{2E7F}]\\n          | [\\\\x{3001}-\\\\x{3003}]\\n          | [\\\\x{3008}-\\\\x{3030}]\\n        )\\n        (\\n          \\\\g<oph>\\n          | (?<opc>                # operator-character\\n            [\\\\x{0300}-\\\\x{036F}]\\n            | [\\\\x{1DC0}-\\\\x{1DFF}]\\n            | [\\\\x{20D0}-\\\\x{20FF}]\\n            | [\\\\x{FE00}-\\\\x{FE0F}]\\n            | [\\\\x{FE20}-\\\\x{FE2F}]\\n            | [\\\\x{E0100}-\\\\x{E01EF}]\\n          )\\n        )*\\n      )\\n      | ( \\\\. ( \\\\g<oph> | \\\\g<opc> | \\\\. )+ )      # Dot operators\\n    )\\n  )\\n\\\\s*\\n(?=\\\\(|<)\",\n\t\t\t\"end\": \"$|(?=;|//|/\\\\*|\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.function.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-function-result\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-throws\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: generic constraints after the parameters and return type\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.function-body-not-allowed-in-protocol.swift\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.function.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.type.$1.swift\",\n\t\t\t\t\t\"begin\": \"\\\\b(class(?!\\\\s+(?:func|var|let)\\\\b)|struct|actor)\\\\b\\\\s*((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.$1.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.$1.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Swift 3: generic constraints after the generic param list\",\n\t\t\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-inheritance-clause\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.definition.type.body.swift\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-enum\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-enum\": {\n\t\t\t\"name\": \"meta.definition.type.$1.swift\",\n\t\t\t\"begin\": \"\\\\b(enum)\\\\s+((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\",\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.$1.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.$1.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: generic constraints after the generic param list\",\n\t\t\t\t\t\"include\": \"#declarations-generic-where-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-inheritance-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.type.body.swift\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.type.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-type-enum-enum-case-clause\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-enum-associated-values\": {\n\t\t\t\"begin\": \"\\\\G\\\\(\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(?:(_)|((?<q1>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*\\\\k<q1>))\\n\\\\s+\\n(((?<q2>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*\\\\k<q2>))\\n\\\\s*(:)\",\n\t\t\t\t\t\"end\": \"(?=[,)\\\\]])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.distinct-labels-not-allowed.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.argument-label.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*\\\\k<q>))\\\\s*(:)\",\n\t\t\t\t\t\"end\": \"(?=[,)\\\\]])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.function.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.argument-label.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"an element without a label (i.e. anything else)\",\n\t\t\t\t\t\"begin\": \"(?![,)\\\\]])(?=\\\\S)\",\n\t\t\t\t\t\"end\": \"(?=[,)\\\\]])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-colon-in-parameter-list.swift\",\n\t\t\t\t\t\t\t\"match\": \":\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-enum-enum-case\": {\n\t\t\t\"begin\": \"(?x)((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*\",\n\t\t\t\"end\": \"(?<=\\\\))|(?![=(])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"variable.other.enummember.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-enum-associated-values\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-enum-raw-value-assignment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-enum-enum-case-clause\": {\n\t\t\t\"begin\": \"\\\\b(case)\\\\b\\\\s*\",\n\t\t\t\"end\": \"(?=[;}])|(?!\\\\G)(?!//|/\\\\*)(?=[^\\\\s,])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.case.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-enum-enum-case\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-enum-more-cases\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-enum-more-cases\": {\n\t\t\t\"name\": \"meta.enum-case.more-cases\",\n\t\t\t\"begin\": \",\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)(?!//|/\\\\*)(?=[;}]|[^\\\\s,])\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-enum-enum-case\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-type-enum-more-cases\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-enum-raw-value-assignment\": {\n\t\t\t\"begin\": \"(=)\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-identifier\": {\n\t\t\t\"begin\": \"((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*\",\n\t\t\t\"end\": \"(?!<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.type-name.swift\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#builtin-types\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=<)\",\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-generic-argument-clause\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-type-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Swift 3: A & B\",\n\t\t\t\t\t\"match\": \"(?<![/=\\\\-+!*%<>&|\\\\^~.])(&)(?![/=\\\\-+!*%<>&|\\\\^~.])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.composition.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0390: Noncopyable structs and enums\",\n\t\t\t\t\t\"match\": \"(?<![/=\\\\-+!*%<>&|\\\\^~.])(~)(?![/=\\\\-+!*%<>&|\\\\^~.])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.requirement-suppression.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-typealias\": {\n\t\t\t\"name\": \"meta.definition.typealias.swift\",\n\t\t\t\"begin\": \"\\\\b(typealias)\\\\s+((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)$|(?=;|//|/\\\\*|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.other.declaration-specifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.type.typealias.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\G(?=<)\",\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#declarations-generic-parameter-clause\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-typealias-assignment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-typealias-assignment\": {\n\t\t\t\"begin\": \"(=)\\\\s*\",\n\t\t\t\"end\": \"(?!\\\\G)$|(?=;|//|/\\\\*|$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-typed-variable-declaration\": {\n\t\t\t\"begin\": \"(?x)\\n\\\\b(?:(async)\\\\s+)?(let|var)\\\\b\\\\s+\\n(?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>)\\\\s*\\n:\",\n\t\t\t\"end\": \"(?=$|[={])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.other.declaration-specifier.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations-available-types\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declarations-types-precedencegroup\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Precedence groups in the standard library\",\n\t\t\t\t\t\"name\": \"support.type.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(?:BitwiseShift|Assignment|RangeFormation|Casting|Addition|NilCoalescing|Comparison|LogicalConjunction|LogicalDisjunction|Default|Ternary|Multiplication|FunctionArrow)Precedence\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions\": {\n\t\t\t\"comment\": \"trailing closures need to be parsed before other member references\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-trailing-closure\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-reference\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-trailing-closure\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"foo { body } -- a call with a trailing closure and no argument clause\",\n\t\t\t\t\t\"name\": \"meta.function-call.trailing-closure-only.swift\",\n\t\t\t\t\t\"match\": \"(#?(?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"foo: { body } -- labeled-trailing-closure (SE-0279)\",\n\t\t\t\t\t\"match\": \"((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*(:)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.trailing-closure-label.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.argument-label.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-without-trailing-closures\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#member-references\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#code-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-closure-parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-types\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-global-functions\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#builtin-properties\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-compound-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#conditionals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#keywords\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-availability-condition\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-function-or-macro-call-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-macro-expansion\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-subscript-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-parenthesized-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.discard-value.swift\",\n\t\t\t\t\t\"match\": \"\\\\b_\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-availability-condition\": {\n\t\t\t\"begin\": \"\\\\B(#(?:un)?available)(\\\\()\",\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.function.availability-condition.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\s*\\\\b((?:iOS|macOS|OSX|watchOS|tvOS|visionOS|UIKitForMac)(?:ApplicationExtension)?)\\\\b(?:\\\\s+([0-9]+(?:\\\\.[0-9]+)*\\\\b))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.platform.os.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(\\\\*)\\\\s*(.*?)(?=[,)])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.platform.all.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.character-not-allowed-here.swift\",\n\t\t\t\t\t\"match\": \"[^\\\\s,)]+\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-closure-parameter\": {\n\t\t\t\"name\": \"variable.language.closure-parameter.swift\",\n\t\t\t\"match\": \"\\\\$[0-9]+\"\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-compound-name\": {\n\t\t\t\"comment\": \"a reference to a function with disambiguating argument labels, such as foo(_:), foo(bar:), etc.\",\n\t\t\t\"match\": \"(?x)\\n((?<q1>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q1>))           # function name\\n\\\\(\\n  (\\n    (\\n      ((?<q2>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q2>))   # argument label\\n      :                        # colon\\n    )+\\n  )\\n\\\\)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.name.function.compound-name.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.swift\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.entity.swift\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.compound-name.swift\",\n\t\t\t\t\t\t\t\"match\": \"(?<q>`?)(?!_:)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>):\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.swift\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.swift\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-expression-element-list\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"an element with a label\",\n\t\t\t\t\t\"begin\": \"((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*(:)\",\n\t\t\t\t\t\"end\": \"(?=[,)\\\\]])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.argument-label.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"an element without a label (i.e. anything else)\",\n\t\t\t\t\t\"begin\": \"(?![,)\\\\]])(?=\\\\S)\",\n\t\t\t\t\t\"end\": \"(?=[,)\\\\]])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-function-or-macro-call-expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"foo(args) -- a call whose callee is a highlightable name\",\n\t\t\t\t\t\"name\": \"meta.function-call.swift\",\n\t\t\t\t\t\"begin\": \"(#?(?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\\\\s*(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.any-method.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-expression-element-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"[Int](args) -- a call whose callee is a more complicated expression\",\n\t\t\t\t\t\"name\": \"meta.function-call.swift\",\n\t\t\t\t\t\"begin\": \"(?<=[`\\\\])}>\\\\p{L}_\\\\p{N}\\\\p{M}])\\\\s*(\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-expression-element-list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-macro-expansion\": {\n\t\t\t\"name\": \"support.function.any-method.swift\",\n\t\t\t\"match\": \"(#(?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\"\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-parenthesized-expression\": {\n\t\t\t\"comment\": \"correctly matching closure expressions is too hard (depends on trailing \\\"in\\\") so we just tack on some basics to the end of parenthesized-expression\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"end\": \"(\\\\))\\\\s*((?:\\\\b(?:async|throws|rethrows)\\\\s)*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.tuple.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.section.tuple.end.swift\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.rethrows-only-allowed-on-function-declarations.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\brethrows\\\\b\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#async-throws\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-expression-element-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressions-without-trailing-closures-or-member-references-subscript-expression\": {\n\t\t\t\"name\": \"meta.subscript-expression.swift\",\n\t\t\t\"begin\": \"(?<=[`\\\\p{L}_\\\\p{N}\\\\p{M}])\\\\s*(\\\\[)\",\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions-without-trailing-closures-or-member-references-expression-element-list\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.branch.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:if|else|guard|where|switch|case|default|fallthrough)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.transfer.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:continue|break|fallthrough|return)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:while|for|in|each)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.operator.type.existential.swift\",\n\t\t\t\t\t\"match\": \"\\\\bany\\\\b(?=\\\\s*`?[\\\\p{L}_])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"extra scopes for repeat-while snippet\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(repeat)\\\\b(\\\\s*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.trailing.repeat.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.defer.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\bdefer\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:(await\\\\s+try)|(await))\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.try-must-precede-await.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.await.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.exception.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:catch|throw|try)\\\\b|\\\\btry[?!]\\\\B\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.exception.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:throws|rethrows)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"extra scopes for do-catch snippet\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(do)\\\\b(\\\\s*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.exception.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.trailing.do.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:(async)\\\\s+)?(let|var)\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.declaration-specifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.declaration-specifier.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:associatedtype|operator|typealias)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.$1.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(class|enum|extension|precedencegroup|protocol|struct|actor)\\\\b(?=\\\\s*`?[\\\\p{L}_])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:inout|static|final|lazy|mutating|nonmutating|optional|indirect|required|override|dynamic|convenience|infix|prefix|postfix|distributed|nonisolated|borrowing|consuming)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.function.swift\",\n\t\t\t\t\t\"match\": \"\\\\binit[?!]|\\\\binit\\\\b|(?<!\\\\.)\\\\b(?:func|deinit|subscript|didSet|get|set|willSet)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.declaration-specifier.accessibility.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:fileprivate|private|internal|public|open|package)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"matches weak, unowned, unowned(safe), unowned(unsafe)\",\n\t\t\t\t\t\"name\": \"keyword.other.capture-specifier.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\bunowned\\\\((?:safe|unsafe)\\\\)|(?<!\\\\.)\\\\b(?:weak|unowned)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\.)(?:(dynamicType|self)|(Protocol|Type))\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.type.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.type.metatype.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.language.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\b(?:super|self|Self)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.variable.swift\",\n\t\t\t\t\t\"match\": \"\\\\B(?:#file|#filePath|#fileID|#line|#column|#function|#dsohandle)\\\\b|\\\\b(?:__FILE__|__LINE__|__COLUMN__|__FUNCTION__|__DSO_HANDLE__)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.import.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\bimport\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0366: \\\"consume behaves as a contextual keyword. In order to avoid interfering with existing code that calls functions named consume, the operand to consume must begin with another identifier, and must consist of an identifier or postfix expression\\\"\",\n\t\t\t\t\t\"name\": \"keyword.control.consume.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\bconsume(?=\\\\s+`?[\\\\p{L}_])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0377: \\\"copy is a contextual keyword, parsed as an operator if it is immediately followed by an identifier on the same line, like the consume x operator before it\\\"\",\n\t\t\t\t\t\"name\": \"keyword.control.copy.swift\",\n\t\t\t\t\t\"match\": \"(?<!\\\\.)\\\\bcopy(?=\\\\s+`?[\\\\p{L}_])\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-boolean\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-numeric\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.nil.swift\",\n\t\t\t\t\t\"match\": \"\\\\bnil\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"object \\\"literals\\\" used in playgrounds\",\n\t\t\t\t\t\"name\": \"support.function.object-literal.swift\",\n\t\t\t\t\t\"match\": \"\\\\B#(colorLiteral|imageLiteral|fileLiteral)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.function.builtin-macro.swift\",\n\t\t\t\t\t\"match\": \"\\\\B#externalMacro\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.function.key-path.swift\",\n\t\t\t\t\t\"match\": \"\\\\B#keyPath\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\B(#selector)(\\\\()(?:\\\\s*(getter|setter)\\\\s*(:))?\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.function.selector-reference.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.begin.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.parameter.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.argument-label.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.arguments.end.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expressions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-boolean\": {\n\t\t\t\"name\": \"constant.language.boolean.swift\",\n\t\t\t\"match\": \"\\\\b(true|false)\\\\b\"\n\t\t},\n\t\t\"literals-numeric\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"0.1, -4_2.5, 6.022e23, 10E-5\",\n\t\t\t\t\t\"name\": \"constant.numeric.float.decimal.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)[0-9][0-9_]*(?=\\\\.[0-9]|[eE])(?:\\\\.[0-9][0-9_]*)?(?:[eE][-+]?[0-9][0-9_]*)?\\\\b(?!\\\\.[0-9])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"-0x1.ap2_3, 0x31p-4\",\n\t\t\t\t\t\"name\": \"constant.numeric.float.hexadecimal.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)(0x[0-9a-fA-F][0-9a-fA-F_]*)(?:\\\\.[0-9a-fA-F][0-9a-fA-F_]*)?[pP][-+]?[0-9][0-9_]*\\\\b(?!\\\\.[0-9])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"0x1p, 0x1p_2, 0x1.5pa, 0x1.1p+1f, 0x1pz\",\n\t\t\t\t\t\"name\": \"invalid.illegal.numeric.float.invalid-exponent.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)(0x[0-9a-fA-F][0-9a-fA-F_]*)(?:\\\\.[0-9a-fA-F][0-9a-fA-F_]*)?(?:[pP][-+]?\\\\w*)\\\\b(?!\\\\.[0-9])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"0x1.5w (note that 0x1.f may be a valid expression)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.numeric.float.missing-exponent.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)(0x[0-9a-fA-F][0-9a-fA-F_]*)\\\\.[0-9][\\\\w.]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"-.5, .2f (note that 1.-.5 may be a valid expression)\",\n\t\t\t\t\t\"name\": \"invalid.illegal.numeric.float.missing-leading-zero.swift\",\n\t\t\t\t\t\"match\": \"(?<=\\\\s|^)\\\\-?\\\\.[0-9][\\\\w.]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"0b_0_1, 0x_1p+3q\",\n\t\t\t\t\t\"name\": \"invalid.illegal.numeric.leading-underscore.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)0[box]_[0-9a-fA-F_]*(?:[pPeE][+-]?\\\\w+)?[\\\\w.]+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"tuple positional member: not really a numeric literal, but not invalid\",\n\t\t\t\t\t\"match\": \"(?<=[\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)[0-9]+\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"0b010, 0b1_0\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.binary.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)0b[01][01_]*\\\\b(?!\\\\.[0-9])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"0o1, 0o7_3\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.octal.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)0o[0-7][0-7_]*\\\\b(?!\\\\.[0-9])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"02, 3_456\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)[0-9][0-9_]*\\\\b(?!\\\\.[0-9])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"0x4, 0xF_7\",\n\t\t\t\t\t\"name\": \"constant.numeric.integer.hexadecimal.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)(?<![\\\\[\\\\](){}\\\\p{L}_\\\\p{N}\\\\p{M}]\\\\.)0x[0-9a-fA-F][0-9a-fA-F_]*\\\\b(?!\\\\.[0-9])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.numeric.other.swift\",\n\t\t\t\t\t\"match\": \"(\\\\B\\\\-|\\\\b)[0-9][\\\\w.]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal\": {\n\t\t\t\"comment\": \"SE-0354 & SE-0355\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.regexp.block.swift\",\n\t\t\t\t\t\"begin\": \"(#+)/\\\\n\",\n\t\t\t\t\t\"end\": \"/\\\\1\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-regex-guts\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-line-comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Single-line regular expression literals must be matched all in one go\\n in order to avoid ambiguities with operators, and to adhere to certain\\n parsing rules in SE-0354/SE-0355, such as:\\n - A regex literal will not be parsed if it contains an unbalanced ).\\n - A regex may end with a space only if it began with an escaped space\",\n\t\t\t\t\t\"name\": \"string.regexp.line.swift\",\n\t\t\t\t\t\"match\": \"(?x)\\n(?!/\\\\s)         # non-extended regex literals may not start with a space or tab\\n(?!//)          # disambiguation with line comments (redundant since comment rules occur earlier)\\n(((\\\\#+)?)/)     # (1) for captures, (2) for matching end, (3) for conditionals\\n(\\\\\\\\\\\\s)? # (4) may start with an escaped space or tab\\n(?<guts>\\n  (?>   # no backtracking, avoids issues with negative lookbehind at end\\n    (?:\\n      \\\\\\\\Q\\n        (?:(?!\\\\\\\\E)(?!/\\\\2).)*+\\n        (?:\\\\\\\\E\\n          # A quoted sequence may not have a closing E, in which case it extends to the end of the regex\\n          | (?(3)|(?<!\\\\s))(?=/\\\\2)\\n        )\\n      | \\\\\\\\.\\n      | \\\\(\\\\?\\\\#[^)]*\\\\)\\n      | \\\\(\\\\?\\n          # InterpolatedCallout\\n          (?>(\\\\{(?:\\\\g<-1>|(?!{).*?)\\\\}))\\n          (?:\\\\[(?!\\\\d)\\\\w+\\\\])?\\n          [X<>]?\\n        \\\\)\\n      | (?<class>\\\\[ (?:\\\\\\\\. | [^\\\\[\\\\]] | \\\\g<class>)+ \\\\])\\n      | \\\\(\\\\g<guts>?+\\\\)\\n      | (?:(?!/\\\\2)[^()\\\\[\\\\\\\\])+  # any character (until end)\\n    )+\\n  )\\n)?+\\n# may end with a space only if it is an extended literal or contains only a single escaped space\\n(?(3)|(?(5)(?<!\\\\s)))\\n(/\\\\2)     # (12)\\n| \\\\#+/.+(\\\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-regex-guts\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.regexp.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.regexp.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.returns-not-allowed.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal-backreference-or-subpattern\": {\n\t\t\t\"comment\": \"These patterns are separated to work around issues like https://github.com/microsoft/vscode-textmate/issues/164\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"'\\\\g{' NamedOrNumberRef '}'\",\n\t\t\t\t\t\"match\": \"(?x)(\\\\\\\\g\\\\{) (?: ((?!\\\\d)\\\\w+) (?:([+-])(\\\\d+))? | ([+-]?\\\\d+) (?:([+-])(\\\\d+))? ) (\\\\})\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"'\\\\g' NumberRef\",\n\t\t\t\t\t\"match\": \"(?x)(\\\\\\\\g) ([+-]?\\\\d+) (?:([+-])(\\\\d+))?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"'\\\\k<' NamedOrNumberRef '>'\\n '\\\\g<' NamedOrNumberRef '>'\",\n\t\t\t\t\t\"match\": \"(?x)(\\\\\\\\[gk]<) (?: ((?!\\\\d)\\\\w+) (?:([+-])(\\\\d+))? | ([+-]?\\\\d+) (?:([+-])(\\\\d+))? ) (>)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"\\\"\\\\k'\\\" NamedOrNumberRef \\\"'\\\"\\n \\\"\\\\g'\\\" NamedOrNumberRef \\\"'\\\"\",\n\t\t\t\t\t\"match\": \"(?x)(\\\\\\\\[gk]') (?: ((?!\\\\d)\\\\w+) (?:([+-])(\\\\d+))? | ([+-]?\\\\d+) (?:([+-])(\\\\d+))? ) (')\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"'\\\\k{' NamedRef '}'\",\n\t\t\t\t\t\"match\": \"(?x)(\\\\\\\\k\\\\{) ((?!\\\\d)\\\\w+) (?:([+-])(\\\\d+))? (\\\\})\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[1-9][0-9]+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"'(?P=' NamedRef ')'\",\n\t\t\t\t\t\"match\": \"(?x)(\\\\(\\\\?(?:P[=>]|&)) ((?!\\\\d)\\\\w+) (?:([+-])(\\\\d+))? (\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\",\n\t\t\t\t\t\"match\": \"\\\\(\\\\?R\\\\)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"'(?' NumberRef ')'\",\n\t\t\t\t\t\"match\": \"(?x)(\\\\(\\\\?) ([+-]?\\\\d+) (?:([+-])(\\\\d+))? (\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal-backtracking-directive-or-global-matching-option\": {\n\t\t\t\"match\": \"(?x)\\n(\\\\(\\\\*)\\n(?:\\n  (ACCEPT|FAIL|F|MARK(?=:)|(?=:)|COMMIT|PRUNE|SKIP|THEN)\\n    (?:(:)([^)]+))?\\n  | (?:(LIMIT_(?:DEPTH|HEAP|MATCH))(=)(\\\\d+))\\n  | (\\n      CRLF | CR | ANYCRLF | ANY | LF | NUL\\n      | BSR_ANYCRLF | BSR_UNICODE\\n      | NOTEMPTY_ATSTART | NOTEMPTY\\n      | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR\\n      | NO_JIT | NO_START_OPT | UTF | UCP\\n    )\\n)\\n(\\\\))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.regexp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.regexp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"variable.language.tag.regexp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.regexp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.regexp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.regexp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"keyword.control.directive.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"literals-regular-expression-literal-callout\": {\n\t\t\t\"name\": \"meta.callout.regexp\",\n\t\t\t\"match\": \"(?x)\\n# PCRECallout\\n(\\\\()(?<keyw>\\\\?C)\\n  (?:\\n    (?<num>\\\\d+)\\n    | `(?<name>(?:[^`]|``)*)`\\n    | '(?<name>(?:[^']|'')*)'\\n    | \\\"(?<name>(?:[^\\\"]|\\\"\\\")*)\\\"\\n    | \\\\^(?<name>(?:[^\\\\^]|\\\\^\\\\^)*)\\\\^\\n    | %(?<name>(?:[^%]|%%)*)%\\n    | \\\\#(?<name>(?:[^#]|\\\\#\\\\#)*)\\\\#\\n    | \\\\$(?<name>(?:[^$]|\\\\$\\\\$)*)\\\\$\\n    | \\\\{(?<name>(?:[^}]|\\\\}\\\\})*)\\\\}\\n  )?\\n(\\\\))\\n# NamedCallout\\n| (\\\\()(?<keyw>\\\\*)\\n    (?<name>(?!\\\\d)\\\\w+)\\n    (?:\\\\[(?<tag>(?!\\\\d)\\\\w+)\\\\])?\\n    (?:\\\\{ [^,}]+ (?:,[^,}]+)* \\\\})?\\n  (\\\\))\\n# InterpolatedCallout\\n| (\\\\()(?<keyw>\\\\?)\\n    (?>(\\\\{(?:\\\\g<-1>|(?!{).*?)\\\\}))\\n    (?:\\\\[(?<tag>(?!\\\\d)\\\\w+)\\\\])?\\n    (?<keyw>[X<>]?)\\n  (\\\\))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"8\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"9\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"10\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"11\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"12\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t},\n\t\t\t\t\"13\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t},\n\t\t\t\t\"14\": {\n\t\t\t\t\t\"name\": \"keyword.control.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"15\": {\n\t\t\t\t\t\"name\": \"entity.name.function.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"16\": {\n\t\t\t\t\t\"name\": \"variable.language.tag-name.regexp\"\n\t\t\t\t},\n\t\t\t\t\"17\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t},\n\t\t\t\t\"18\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t},\n\t\t\t\t\"19\": {\n\t\t\t\t\t\"name\": \"keyword.control.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"21\": {\n\t\t\t\t\t\"name\": \"variable.language.tag-name.regexp\"\n\t\t\t\t},\n\t\t\t\t\"22\": {\n\t\t\t\t\t\"name\": \"keyword.control.callout.regexp\"\n\t\t\t\t},\n\t\t\t\t\"23\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"literals-regular-expression-literal-character-properties\": {\n\t\t\t\"name\": \"constant.other.character-class.set.regexp\",\n\t\t\t\"match\": \"(?x)\\n\\\\\\\\[pP]\\\\{ ([\\\\s\\\\w-]+(?:=[\\\\s\\\\w-]+)?) \\\\}\\n| (\\\\[:) ([\\\\s\\\\w-]+(?:=[\\\\s\\\\w-]+)?) (:\\\\])\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"support.variable.character-property.regexp\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"support.variable.character-property.regexp\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"literals-regular-expression-literal-custom-char-class\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.character-class.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?\",\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-custom-char-class-members\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal-custom-char-class-members\": {\n\t\t\t\"comment\": \"TODO: should also include atoms?\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"\\\\b inside a character class represents a backspace\",\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-custom-char-class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-quote\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-set-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-unicode-scalars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-character-properties\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal-group-option-toggle\": {\n\t\t\t\"comment\": \"A matching option sequence may be part of an \\\"isolated group\\\" which has an implicit scope that wraps the remaining elements of the current group\",\n\t\t\t\"name\": \"keyword.other.option-toggle.regexp\",\n\t\t\t\"match\": \"(?x)\\n\\\\(\\\\?\\n(?:\\n  \\\\^(?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})*\\n  | (?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})+\\n  | (?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})* - (?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})*\\n)\\n\\\\)\"\n\t\t},\n\t\t\"literals-regular-expression-literal-group-or-conditional\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.absent.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\()(\\\\?~)\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.absent.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-regex-guts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.conditional.regexp\",\n\t\t\t\t\t\"begin\": \"(?x)\\n# KnownConditionalStart\\n(\\\\() (?<cond>\\\\?\\\\()\\n  (?:\\n    (?<NumberRef> (?<num>[+-]?\\\\d+)(?:(?<op>[+-])(?<num>\\\\d+))? )\\n    | (?<cond>R) \\\\g<NumberRef>?\\n    | (?<cond>R&) (?<NamedRef> (?<name>(?!\\\\d)\\\\w+) (?:(?<op>[+-])(?<num>\\\\d+))? )\\n    | (?<cond><) (?:\\\\g<NamedRef>|\\\\g<NumberRef>) (?<cond>>)\\n    | (?<cond>') (?:\\\\g<NamedRef>|\\\\g<NumberRef>) (?<cond>')\\n    | (?<cond>DEFINE)\\n    | (?<cond>VERSION)(?<compar>>?=)(?<num>\\\\d+\\\\.\\\\d+)\\n  )\\n(?<cond>\\\\))\\n| (\\\\()(?<cond>\\\\?)(?=\\\\()\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.recursion-level.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"16\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"17\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"18\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"19\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"20\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.integer.decimal.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"21\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"22\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"23\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-regex-guts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.regexp\",\n\t\t\t\t\t\"begin\": \"(?x)\\n(\\\\()\\n(\\n  # BasicGroupKind\\n  (\\\\?)\\n  (?:\\n    ([:|>=!*] | <[=!*])\\n    # named groups\\n    | P?< (?:((?!\\\\d)\\\\w+) (-))? ((?!\\\\d)\\\\w+) >\\n    | ' (?:((?!\\\\d)\\\\w+) (-))? ((?!\\\\d)\\\\w+) '\\n    # matching options\\n    | (?:\\n      \\\\^(?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})*\\n      | (?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})+\\n      | (?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})* - (?:[iJmnsUxwDPSW]|xx|y\\\\{[gw]\\\\})*\\n    ):  # case without : is handled by group-option-toggle\\n  )\\n  # PCRE2GroupKind\\n  | \\\\*(\\n    atomic\\n    |pla|positive_lookahead\\n    |nla|negative_lookahead\\n    |plb|positive_lookbehind\\n    |nlb|negative_lookbehind\\n    |napla|non_atomic_positive_lookahead\\n    |naplb|non_atomic_positive_lookbehind\\n    |sr|script_run\\n    |asr|atomic_script_run\\n  ):\\n)?+\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.group-options.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.balancing-group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.balancing-group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.group-name.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-regex-guts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal-line-comment\": {\n\t\t\t\"name\": \"comment.line.regexp\",\n\t\t\t\"match\": \"(\\\\#).*$\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"literals-regular-expression-literal-quote\": {\n\t\t\t\"name\": \"string.quoted.other.regexp.swift\",\n\t\t\t\"begin\": \"\\\\\\\\Q\",\n\t\t\t\"end\": \"\\\\\\\\E|(\\\\n)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t},\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.returns-not-allowed.regexp\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"literals-regular-expression-literal-regex-guts\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-quote\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.regexp\",\n\t\t\t\t\t\"begin\": \"\\\\(\\\\?\\\\#\",\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.begin.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.end.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.embedded.expression.regexp\",\n\t\t\t\t\t\"begin\": \"<\\\\{\",\n\t\t\t\t\t\"end\": \"\\\\}>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-unicode-scalars\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-character-properties\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.anchor.regexp\",\n\t\t\t\t\t\"match\": \"[$^]|\\\\\\\\[AbBGyYzZ]|\\\\\\\\K\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-backtracking-directive-or-global-matching-option\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-callout\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-backreference-or-subpattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.character-class.regexp\",\n\t\t\t\t\t\"match\": \"\\\\.|\\\\\\\\[CdDhHNORsSvVwWX]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.entity.control-character.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\c.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[^c]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.or.regexp\",\n\t\t\t\t\t\"match\": \"\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\t\t\"match\": \"[*+?]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\t\t\"match\": \"\\\\{\\\\s*\\\\d+\\\\s*(?:,\\\\s*\\\\d*\\\\s*)?\\\\}|\\\\{\\\\s*,\\\\s*\\\\d+\\\\s*\\\\}\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-custom-char-class\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-group-option-toggle\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literals-regular-expression-literal-group-or-conditional\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal-set-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.intersection.regexp.swift\",\n\t\t\t\t\t\"match\": \"&&\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.subtraction.regexp.swift\",\n\t\t\t\t\t\"match\": \"--\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.symmetric-difference.regexp.swift\",\n\t\t\t\t\t\"match\": \"\\\\~\\\\~\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-regular-expression-literal-unicode-scalars\": {\n\t\t\t\"name\": \"constant.character.numeric.regexp\",\n\t\t\t\"match\": \"(?x)\\n\\\\\\\\u\\\\{\\\\s*(?:[0-9a-fA-F]+\\\\s*)+\\\\}\\n| \\\\\\\\u[0-9a-fA-F]{4}\\n| \\\\\\\\x\\\\{[0-9a-fA-F]+\\\\}\\n| \\\\\\\\x[0-9a-fA-F]{0,2}\\n| \\\\\\\\U[0-9a-fA-F]{8}\\n| \\\\\\\\o\\\\{[0-7]+\\\\}\\n| \\\\\\\\0[0-7]{0,3}\\n| \\\\\\\\N\\\\{(?:U\\\\+[0-9a-fA-F]{1,8} | [\\\\s\\\\w-]+)\\\\}\"\n\t\t},\n\t\t\"literals-string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0168: Multi-Line String Literals\",\n\t\t\t\t\t\"name\": \"string.quoted.double.block.swift\",\n\t\t\t\t\t\"begin\": \"\\\"\\\"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"(#*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-closing-delimiter.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.content-after-opening-delimiter.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\G.+(?=\\\"\\\"\\\")|\\\\G.+\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.newline.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\\\\\s*\\\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-string-string-guts\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Allow \\\\(\\\"\\\"\\\"...\\\"\\\"\\\") to appear inside a block string\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.content-before-closing-delimiter.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\S((?!\\\\\\\\\\\\().)*(?=\\\"\\\"\\\")\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.double.block.raw.swift\",\n\t\t\t\t\t\"begin\": \"#\\\"\\\"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"#(#*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-closing-delimiter.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.content-after-opening-delimiter.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\G.+(?=\\\"\\\"\\\")|\\\\G.+\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.character.escape.newline.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\\\\\#\\\\s*\\\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-string-raw-string-guts\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Allow \\\\(\\\"\\\"\\\"...\\\"\\\"\\\") to appear inside a block string\",\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.content-before-closing-delimiter.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\S((?!\\\\\\\\#\\\\().)*(?=\\\"\\\"\\\")\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.double.block.raw.swift\",\n\t\t\t\t\t\"begin\": \"(##+)\\\"\\\"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\\\"\\\"\\\\1(#*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-closing-delimiter.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.content-after-opening-delimiter.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\G.+(?=\\\"\\\"\\\")|\\\\G.+\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.quoted.double.single-line.swift\",\n\t\t\t\t\t\"begin\": \"\\\"\",\n\t\t\t\t\t\"end\": \"\\\"(#*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-closing-delimiter.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.returns-not-allowed.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\r|\\\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-string-string-guts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0168: raw string literals (more than one #, grammar limitations prevent us from supporting escapes)\",\n\t\t\t\t\t\"name\": \"string.quoted.double.single-line.raw.swift\",\n\t\t\t\t\t\"begin\": \"(##+)\\\"\",\n\t\t\t\t\t\"end\": \"\\\"\\\\1(#*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.raw.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.raw.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-closing-delimiter.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.returns-not-allowed.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\r|\\\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"SE-0168: raw string literals (one #, escapes supported)\",\n\t\t\t\t\t\"name\": \"string.quoted.double.single-line.raw.swift\",\n\t\t\t\t\t\"begin\": \"#\\\"\",\n\t\t\t\t\t\"end\": \"\\\"#(#*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.raw.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.raw.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.extra-closing-delimiter.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"invalid.illegal.returns-not-allowed.swift\",\n\t\t\t\t\t\t\t\"match\": \"\\\\r|\\\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#literals-string-raw-string-guts\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-string-raw-string-guts\": {\n\t\t\t\"comment\": \"the same as #string-guts but with # in escapes\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.swift\",\n\t\t\t\t\t\"match\": \"\\\\\\\\#[0\\\\\\\\tnr\\\"']\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.unicode.swift\",\n\t\t\t\t\t\"match\": \"\\\\\\\\#u\\\\{[0-9a-fA-F]{1,8}\\\\}\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"source.swift\",\n\t\t\t\t\t\"name\": \"meta.embedded.line.swift\",\n\t\t\t\t\t\"begin\": \"\\\\\\\\#\\\\(\",\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"source.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Nested parens\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.escape-not-recognized\",\n\t\t\t\t\t\"match\": \"\\\\\\\\#.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literals-string-string-guts\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.swift\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[0\\\\\\\\tnr\\\"']\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.unicode.swift\",\n\t\t\t\t\t\"match\": \"\\\\\\\\u\\\\{[0-9a-fA-F]{1,8}\\\\}\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"source.swift\",\n\t\t\t\t\t\"name\": \"meta.embedded.line.swift\",\n\t\t\t\t\t\"begin\": \"\\\\\\\\\\\\(\",\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"source.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"$self\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Nested parens\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\"end\": \"\\\\)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"invalid.illegal.escape-not-recognized\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"member-reference\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=\\\\.)((?<q>`?)[\\\\p{L}_][\\\\p{L}_\\\\p{N}\\\\p{M}]*(\\\\k<q>))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.identifier.swift\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Type casting\",\n\t\t\t\t\t\"name\": \"keyword.operator.type-casting.swift\",\n\t\t\t\t\t\"match\": \"\\\\b(is\\\\b|as([!?]\\\\B|\\\\b))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"This rule helps us speed up the matching.\",\n\t\t\t\t\t\"begin\": \"(?x)\\n(?=\\n  (?<oph>                # operator-head\\n    [/=\\\\-+!*%<>&|^~?]\\n    | [\\\\x{00A1}-\\\\x{00A7}]\\n    | [\\\\x{00A9}\\\\x{00AB}]\\n    | [\\\\x{00AC}\\\\x{00AE}]\\n    | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n    | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n    | [\\\\x{2030}-\\\\x{203E}]\\n    | [\\\\x{2041}-\\\\x{2053}]\\n    | [\\\\x{2055}-\\\\x{205E}]\\n    | [\\\\x{2190}-\\\\x{23FF}]\\n    | [\\\\x{2500}-\\\\x{2775}]\\n    | [\\\\x{2794}-\\\\x{2BFF}]\\n    | [\\\\x{2E00}-\\\\x{2E7F}]\\n    | [\\\\x{3001}-\\\\x{3003}]\\n    | [\\\\x{3008}-\\\\x{3030}]\\n  )\\n  | \\\\.\\n  (\\n    \\\\g<oph>              # operator-head\\n    | \\\\.\\n    | [\\\\x{0300}-\\\\x{036F}]        # operator-character\\n    | [\\\\x{1DC0}-\\\\x{1DFF}]\\n    | [\\\\x{20D0}-\\\\x{20FF}]\\n    | [\\\\x{FE00}-\\\\x{FE0F}]\\n    | [\\\\x{FE20}-\\\\x{FE2F}]\\n    | [\\\\x{E0100}-\\\\x{E01EF}]\\n  )\\n)\",\n\t\t\t\t\t\"end\": \"(?!\\\\G)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Prefix unary operator\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n\\\\G                    # Matching from the beginning ensures\\n                    # that we start with operator-head\\n(?<=^|[\\\\s(\\\\[{,;:])\\n(\\n  (?!(//|/\\\\*|\\\\*/))\\n  (\\n    [/=\\\\-+!*%<>&|^~?]        # operator-head\\n    | [\\\\x{00A1}-\\\\x{00A7}]\\n    | [\\\\x{00A9}\\\\x{00AB}]\\n    | [\\\\x{00AC}\\\\x{00AE}]\\n    | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n    | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n    | [\\\\x{2030}-\\\\x{203E}]\\n    | [\\\\x{2041}-\\\\x{2053}]\\n    | [\\\\x{2055}-\\\\x{205E}]\\n    | [\\\\x{2190}-\\\\x{23FF}]\\n    | [\\\\x{2500}-\\\\x{2775}]\\n    | [\\\\x{2794}-\\\\x{2BFF}]\\n    | [\\\\x{2E00}-\\\\x{2E7F}]\\n    | [\\\\x{3001}-\\\\x{3003}]\\n    | [\\\\x{3008}-\\\\x{3030}]\\n  \\n    | [\\\\x{0300}-\\\\x{036F}]        # operator-character\\n    | [\\\\x{1DC0}-\\\\x{1DFF}]\\n    | [\\\\x{20D0}-\\\\x{20FF}]\\n    | [\\\\x{FE00}-\\\\x{FE0F}]\\n    | [\\\\x{FE20}-\\\\x{FE2F}]\\n    | [\\\\x{E0100}-\\\\x{E01EF}]\\n  )\\n)++\\n(?![\\\\s)\\\\]},;:]|\\\\z)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.increment-or-decrement.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(\\\\+\\\\+|\\\\-\\\\-)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.unary.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(\\\\+|\\\\-)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.not.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G!$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.bitwise.not.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G~$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.custom.prefix.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Postfix unary operator\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n\\\\G                    # Matching from the beginning ensures\\n                    # that we start with operator-head\\n(?<!^|[\\\\s(\\\\[{,;:])\\n(\\n  (?!(//|/\\\\*|\\\\*/))\\n  (\\n    [/=\\\\-+!*%<>&|^~?]        # operator-head\\n    | [\\\\x{00A1}-\\\\x{00A7}]\\n    | [\\\\x{00A9}\\\\x{00AB}]\\n    | [\\\\x{00AC}\\\\x{00AE}]\\n    | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n    | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n    | [\\\\x{2030}-\\\\x{203E}]\\n    | [\\\\x{2041}-\\\\x{2053}]\\n    | [\\\\x{2055}-\\\\x{205E}]\\n    | [\\\\x{2190}-\\\\x{23FF}]\\n    | [\\\\x{2500}-\\\\x{2775}]\\n    | [\\\\x{2794}-\\\\x{2BFF}]\\n    | [\\\\x{2E00}-\\\\x{2E7F}]\\n    | [\\\\x{3001}-\\\\x{3003}]\\n    | [\\\\x{3008}-\\\\x{3030}]\\n  \\n    | [\\\\x{0300}-\\\\x{036F}]        # operator-character\\n    | [\\\\x{1DC0}-\\\\x{1DFF}]\\n    | [\\\\x{20D0}-\\\\x{20FF}]\\n    | [\\\\x{FE00}-\\\\x{FE0F}]\\n    | [\\\\x{FE20}-\\\\x{FE2F}]\\n    | [\\\\x{E0100}-\\\\x{E01EF}]\\n  )\\n)++\\n(?=[\\\\s)\\\\]},;:]|\\\\z)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.increment-or-decrement.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(\\\\+\\\\+|\\\\-\\\\-)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.increment-or-decrement.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G!$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.custom.postfix.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Infix operator\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n\\\\G                    # Matching from the beginning ensures\\n                    # that we start with operator-head\\n(\\n  (?!(//|/\\\\*|\\\\*/))\\n  (\\n    [/=\\\\-+!*%<>&|^~?]        # operator-head\\n    | [\\\\x{00A1}-\\\\x{00A7}]\\n    | [\\\\x{00A9}\\\\x{00AB}]\\n    | [\\\\x{00AC}\\\\x{00AE}]\\n    | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n    | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n    | [\\\\x{2030}-\\\\x{203E}]\\n    | [\\\\x{2041}-\\\\x{2053}]\\n    | [\\\\x{2055}-\\\\x{205E}]\\n    | [\\\\x{2190}-\\\\x{23FF}]\\n    | [\\\\x{2500}-\\\\x{2775}]\\n    | [\\\\x{2794}-\\\\x{2BFF}]\\n    | [\\\\x{2E00}-\\\\x{2E7F}]\\n    | [\\\\x{3001}-\\\\x{3003}]\\n    | [\\\\x{3008}-\\\\x{3030}]\\n  \\n    | [\\\\x{0300}-\\\\x{036F}]        # operator-character\\n    | [\\\\x{1DC0}-\\\\x{1DFF}]\\n    | [\\\\x{20D0}-\\\\x{20FF}]\\n    | [\\\\x{FE00}-\\\\x{FE0F}]\\n    | [\\\\x{FE20}-\\\\x{FE2F}]\\n    | [\\\\x{E0100}-\\\\x{E01EF}]\\n  )\\n)++\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G=$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(\\\\+|\\\\-|\\\\*|/|%|<<|>>|&|\\\\^|\\\\||&&|\\\\|\\\\|)=$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(\\\\+|\\\\-|\\\\*|/)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.overflow.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G&(\\\\+|\\\\-|\\\\*)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.remainder.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G%$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.comparison.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(==|!=|>|<|>=|<=|~=)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.coalescing.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G\\\\?\\\\?$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(&&|\\\\|\\\\|)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.bitwise.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(&|\\\\||\\\\^|<<|>>)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.bitwise.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G(===|!==)$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G\\\\?$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.custom.infix.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Dot prefix unary operator\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n\\\\G                    # Matching from the beginning ensures\\n                    # that we start with operator-head\\n(?<=^|[\\\\s(\\\\[{,;:])\\n\\\\.                    # dot\\n(\\n  (?!(//|/\\\\*|\\\\*/))\\n  (\\n    \\\\.                # dot\\n    | [/=\\\\-+!*%<>&|^~?]        # operator-head\\n    | [\\\\x{00A1}-\\\\x{00A7}]\\n    | [\\\\x{00A9}\\\\x{00AB}]\\n    | [\\\\x{00AC}\\\\x{00AE}]\\n    | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n    | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n    | [\\\\x{2030}-\\\\x{203E}]\\n    | [\\\\x{2041}-\\\\x{2053}]\\n    | [\\\\x{2055}-\\\\x{205E}]\\n    | [\\\\x{2190}-\\\\x{23FF}]\\n    | [\\\\x{2500}-\\\\x{2775}]\\n    | [\\\\x{2794}-\\\\x{2BFF}]\\n    | [\\\\x{2E00}-\\\\x{2E7F}]\\n    | [\\\\x{3001}-\\\\x{3003}]\\n    | [\\\\x{3008}-\\\\x{3030}]\\n  \\n    | [\\\\x{0300}-\\\\x{036F}]        # operator-character\\n    | [\\\\x{1DC0}-\\\\x{1DFF}]\\n    | [\\\\x{20D0}-\\\\x{20FF}]\\n    | [\\\\x{FE00}-\\\\x{FE0F}]\\n    | [\\\\x{FE20}-\\\\x{FE2F}]\\n    | [\\\\x{E0100}-\\\\x{E01EF}]\\n  )\\n)++\\n(?![\\\\s)\\\\]},;:]|\\\\z)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.custom.prefix.dot.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Dot postfix unary operator\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n\\\\G                    # Matching from the beginning ensures\\n                    # that we start with operator-head\\n(?<!^|[\\\\s(\\\\[{,;:])\\n\\\\.                    # dot\\n(\\n  (?!(//|/\\\\*|\\\\*/))\\n  (\\n    \\\\.                # dot\\n    | [/=\\\\-+!*%<>&|^~?]        # operator-head\\n    | [\\\\x{00A1}-\\\\x{00A7}]\\n    | [\\\\x{00A9}\\\\x{00AB}]\\n    | [\\\\x{00AC}\\\\x{00AE}]\\n    | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n    | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n    | [\\\\x{2030}-\\\\x{203E}]\\n    | [\\\\x{2041}-\\\\x{2053}]\\n    | [\\\\x{2055}-\\\\x{205E}]\\n    | [\\\\x{2190}-\\\\x{23FF}]\\n    | [\\\\x{2500}-\\\\x{2775}]\\n    | [\\\\x{2794}-\\\\x{2BFF}]\\n    | [\\\\x{2E00}-\\\\x{2E7F}]\\n    | [\\\\x{3001}-\\\\x{3003}]\\n    | [\\\\x{3008}-\\\\x{3030}]\\n  \\n    | [\\\\x{0300}-\\\\x{036F}]        # operator-character\\n    | [\\\\x{1DC0}-\\\\x{1DFF}]\\n    | [\\\\x{20D0}-\\\\x{20FF}]\\n    | [\\\\x{FE00}-\\\\x{FE0F}]\\n    | [\\\\x{FE20}-\\\\x{FE2F}]\\n    | [\\\\x{E0100}-\\\\x{E01EF}]\\n  )\\n)++\\n(?=[\\\\s)\\\\]},;:]|\\\\z)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.custom.postfix.dot.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"comment\": \"Dot infix operator\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n\\\\G                    # Matching from the beginning ensures\\n                    # that we start with operator-head\\n\\\\.                    # dot\\n(\\n  (?!(//|/\\\\*|\\\\*/))\\n  (\\n    \\\\.                # dot\\n    | [/=\\\\-+!*%<>&|^~?]        # operator-head\\n    | [\\\\x{00A1}-\\\\x{00A7}]\\n    | [\\\\x{00A9}\\\\x{00AB}]\\n    | [\\\\x{00AC}\\\\x{00AE}]\\n    | [\\\\x{00B0}-\\\\x{00B1}\\\\x{00B6}\\\\x{00BB}\\\\x{00BF}\\\\x{00D7}\\\\x{00F7}]\\n    | [\\\\x{2016}-\\\\x{2017}\\\\x{2020}-\\\\x{2027}]\\n    | [\\\\x{2030}-\\\\x{203E}]\\n    | [\\\\x{2041}-\\\\x{2053}]\\n    | [\\\\x{2055}-\\\\x{205E}]\\n    | [\\\\x{2190}-\\\\x{23FF}]\\n    | [\\\\x{2500}-\\\\x{2775}]\\n    | [\\\\x{2794}-\\\\x{2BFF}]\\n    | [\\\\x{2E00}-\\\\x{2E7F}]\\n    | [\\\\x{3001}-\\\\x{3003}]\\n    | [\\\\x{3008}-\\\\x{3030}]\\n  \\n    | [\\\\x{0300}-\\\\x{036F}]        # operator-character\\n    | [\\\\x{1DC0}-\\\\x{1DFF}]\\n    | [\\\\x{20D0}-\\\\x{20FF}]\\n    | [\\\\x{FE00}-\\\\x{FE0F}]\\n    | [\\\\x{FE20}-\\\\x{FE2F}]\\n    | [\\\\x{E0100}-\\\\x{E01EF}]\\n  )\\n)++\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.range.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \"\\\\G\\\\.\\\\.[.<]$\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.custom.infix.dot.swift\",\n\t\t\t\t\t\t\t\t\t\t\t\"match\": \".+\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.swift\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"root\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#compiler-control\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declarations\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressions\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/terminal-suggest/.gitignore",
    "content": "third_party/\n"
  },
  {
    "path": "extensions/terminal-suggest/.vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Launch Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"stopOnEntry\": false,\n\t\t\t\"sourceMaps\": true,\n\t\t\t\"outFiles\": [\"${workspaceFolder}/client/out/**/*.js\"],\n\t\t\t\"preLaunchTask\": \"npm\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "extensions/terminal-suggest/.vscode/tasks.json",
    "content": "{\n\t\"version\": \"2.0.0\",\n\t\"command\": \"npm\",\n\t\"type\": \"shell\",\n\t\"presentation\": {\n\t\t\"reveal\": \"silent\",\n\t},\n\t\"args\": [\"run\", \"compile\"],\n\t\"isBackground\": true,\n\t\"problemMatcher\": \"$tsc-watch\"\n}"
  },
  {
    "path": "extensions/terminal-suggest/.vscodeignore",
    "content": "src/**\nout/**\ntsconfig.json\n.vscode/**\nextension.webpack.config.js\nextension-browser.webpack.config.js\npackage-lock.json\nfixtures/**\nscripts/**\ntestWorkspace/**\n"
  },
  {
    "path": "extensions/terminal-suggest/README.md",
    "content": "# Terminal Suggestions\n\n**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled. To enable the completions from this extension, set `terminal.integrated.suggest.enabled` to `true`.\n\n## Features\n\nProvides terminal suggestions for zsh, bash, fish, and pwsh.\n"
  },
  {
    "path": "extensions/terminal-suggest/ThirdPartyNotices.txt",
    "content": "THIRD-PARTY SOFTWARE NOTICES AND INFORMATION\r\nFor Microsoft terminal-suggest\r\n\r\nThis file is based on or incorporates material from the projects listed below (\"Third Party OSS\"). The original copyright\r\nnotice and the license under which Microsoft received such Third Party OSS, are set forth below. Such licenses and notice\r\nare provided for informational purposes only. Microsoft licenses the Third Party OSS to you under the licensing terms for\r\nthe Microsoft product or service. Microsoft reserves all other rights not expressly granted under this agreement, whether\r\nby implication, estoppel or otherwise.†\r\n\r\n1. withfig/autocomplete - IDE-style autocomplete for your existing terminal & shell (https://github.com/withfig/autocomplete)\r\n\r\nCopyright (c) 2021 Hercules Labs Inc. (Fig)\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n"
  },
  {
    "path": "extensions/terminal-suggest/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/withfig/autocomplete\",\n\t\t\t\t\t\"commitHash\": \"1cc34dc1ba530bb620bd380c25cfb9eb2264be89\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"2.684.0\",\n\t\t\t\"license\": {\n\t\t\t\t\"type\": \"MIT\",\n\t\t\t\t\"url\": \"https://github.com/withfig/autocomplete/blob/main/LICENSE.md\"\n\t\t\t},\n\t\t\t\"description\": \"IDE-style autocomplete for your existing terminal & shell from withfig/autocomplete.\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"amazon-q-developer-cli\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/aws/amazon-q-developer-cli\",\n\t\t\t\t\t\"commitHash\": \"f66e0b0e917ab185eef528dc36eca56b78ca8b5d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"MIT License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2024 Amazon.com, Inc. or its affiliates.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\t\"SOFTWARE.\"\n\t\t\t],\n\t\t\t\"version\": \"f66e0b0e917ab185eef528dc36eca56b78ca8b5d\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"@fig/autocomplete-shared\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/withfig/autocomplete-tools\",\n\t\t\t\t\t\"commitHash\": \"104377c19a91ca8a312cb38c115a74468f6227cb\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"MIT License\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (c) 2021 Hercules Labs Inc. (Fig)\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, free of charge, to any person obtaining a copy\",\n\t\t\t\t\"of this software and associated documentation files (the \\\"Software\\\"), to deal\",\n\t\t\t\t\"in the Software without restriction, including without limitation the rights\",\n\t\t\t\t\"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\",\n\t\t\t\t\"copies of the Software, and to permit persons to whom the Software is\",\n\t\t\t\t\"furnished to do so, subject to the following conditions:\",\n\t\t\t\t\"\",\n\t\t\t\t\"The above copyright notice and this permission notice shall be included in all\",\n\t\t\t\t\"copies or substantial portions of the Software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\",\n\t\t\t\t\"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\",\n\t\t\t\t\"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\",\n\t\t\t\t\"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\",\n\t\t\t\t\"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\",\n\t\t\t\t\"SOFTWARE.\"\n\t\t\t],\n\t\t\t\"version\": \"1.1.2\"\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/zsh-users/zsh\",\n\t\t\t\t\t\"commitHash\": \"435cb1b748ce1f2f5c38edc1d64f4ee2424f9b3a\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"5.9\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Unless otherwise noted in the header of specific files, files in this distribution have the licence shown below.\",\n\t\t\t\t\"\",\n\t\t\t\t\"However, note that certain shell functions are licensed under versions of the GNU General Public Licence.  Anyone distributing the shell as a binary including those files needs to take account of this.  Search shell functions for \\\"Copyright\\\" for specific copyright information. None of the core functions are affected by this, so those files may simply be omitted.\",\n\t\t\t\t\"\",\n\t\t\t\t\"--\",\n\t\t\t\t\"\",\n\t\t\t\t\"The Z Shell is copyright (c) 1992-2017 Paul Falstad, Richard Coleman, Zoltán Hidvégi, Andrew Main, Peter Stephenson, Sven Wischnowsky, and others.  All rights reserved.  Individual authors, whether or not specifically named, retain copyright in all changes; in what follows, they are referred to as `the Zsh Development Group'.  This is for convenience only and this body has no legal status.  The Z shell is distributed under the following licence; any provisions made in individual files take precedence.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Permission is hereby granted, without written agreement and without licence or royalty fees, to use, copy, modify, and distribute this software and to distribute modified versions of this software for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"In no event shall the Zsh Development Group be liable to any party for direct, indirect, special, incidental, or consequential damages arising out of the use of this software and its documentation, even if the Zsh Development Group have been advised of the possibility of such damage.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The Zsh Development Group specifically disclaim any warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.  The software provided hereunder is on an \\\"as is\\\" basis, and the Zsh Development Group have no obligation to provide maintenance, support, updates, enhancements, or modifications.\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/fish-shell/fish-shell\",\n\t\t\t\t\t\"commitHash\": \"6627d403d33b4e74b49aa4db2a4f17709628cdc8\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"3.7.1\",\n\t\t\t\"licenseDetail\": [\n\t\t\t\t\"Fish is a smart and user-friendly command line shell.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Copyright (C) 2005-2009 Axel Liljencrantz\",\n\t\t\t\t\"Copyright (C) 2009- fish-shell contributors\",\n\t\t\t\t\"\",\n\t\t\t\t\"fish is free software.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Most of fish is licensed under the GNU General Public License version 2, and\",\n\t\t\t\t\"you can redistribute it and/or modify it under the terms of the GNU GPL as\",\n\t\t\t\t\"published by the Free Software Foundation.\",\n\t\t\t\t\"\",\n\t\t\t\t\"fish also includes software licensed under the Python Software Foundation License version 2, the MIT\",\n\t\t\t\t\"license, and the GNU Library General Public License version 2.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Full licensing information is contained in doc_src/license.rst.\",\n\t\t\t\t\"\",\n\t\t\t\t\"This program is distributed in the hope that it will be useful, but WITHOUT\",\n\t\t\t\t\"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\",\n\t\t\t\t\"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\",\n\t\t\t\t\"more details.\"\n\t\t\t]\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/terminalSuggestMain.ts'\n\t},\n\toutput: {\n\t\tfilename: 'terminalSuggestMain.js'\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main'],\n\t\textensions: ['.ts', '.js'] // support ts-files and js-files\n\t}\n});\n"
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/basic/input.sh",
    "content": "### Case 1\na b\\\\ c\n\n### Case 2\na \"b\"\n\n### Case 3\na 'b'\n\n### Case 4\na $'b'\n\n### Case 5\na $commit\n\n### Case 6\na $$\n\n### Case 7\na $((b))\n\n### Case 8\na $(b)\n\n### Case 9\na \\`b\\`\n\n### Case 10\na $(\\`b\\`)\n"
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/basic/output.txt",
    "content": "// Case 1\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 7,\n  \"text\": \"a b\\\\\\\\ c\",\n  \"innerText\": \"a b\\\\\\\\ c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 7,\n      \"text\": \"a b\\\\\\\\ c\",\n      \"innerText\": \"a b\\\\\\\\ c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"word\",\n          \"endIndex\": 5,\n          \"text\": \"b\\\\\\\\\",\n          \"innerText\": \"b\\\\\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 6,\n          \"type\": \"word\",\n          \"endIndex\": 7,\n          \"text\": \"c\",\n          \"innerText\": \"c\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 2\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 5,\n  \"text\": \"a \\\"b\\\"\",\n  \"innerText\": \"a \\\"b\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 5,\n      \"text\": \"a \\\"b\\\"\",\n      \"innerText\": \"a \\\"b\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"string\",\n          \"endIndex\": 5,\n          \"text\": \"\\\"b\\\"\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 3\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 5,\n  \"text\": \"a 'b'\",\n  \"innerText\": \"a 'b'\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 5,\n      \"text\": \"a 'b'\",\n      \"innerText\": \"a 'b'\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"raw_string\",\n          \"endIndex\": 5,\n          \"text\": \"'b'\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 4\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a $'b'\",\n  \"innerText\": \"a $'b'\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 6,\n      \"text\": \"a $'b'\",\n      \"innerText\": \"a $'b'\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"ansi_c_string\",\n          \"endIndex\": 6,\n          \"text\": \"$'b'\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 5\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 9,\n  \"text\": \"a $commit\",\n  \"innerText\": \"a $commit\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 9,\n      \"text\": \"a $commit\",\n      \"innerText\": \"a $commit\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"simple_expansion\",\n          \"endIndex\": 9,\n          \"text\": \"$commit\",\n          \"innerText\": \"$commit\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 6\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 4,\n  \"text\": \"a $$\",\n  \"innerText\": \"a $$\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 4,\n      \"text\": \"a $$\",\n      \"innerText\": \"a $$\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"special_expansion\",\n          \"endIndex\": 4,\n          \"text\": \"$$\",\n          \"innerText\": \"$$\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 7\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 8,\n  \"text\": \"a $((b))\",\n  \"innerText\": \"a $((b))\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 8,\n      \"text\": \"a $((b))\",\n      \"innerText\": \"a $((b))\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"arithmetic_expansion\",\n          \"endIndex\": 8,\n          \"text\": \"$((b))\",\n          \"innerText\": \"$((b))\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 8\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a $(b)\",\n  \"innerText\": \"a $(b)\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 6,\n      \"text\": \"a $(b)\",\n      \"innerText\": \"a $(b)\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"command_substitution\",\n          \"endIndex\": 6,\n          \"text\": \"$(b)\",\n          \"innerText\": \"$(b)\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"command\",\n              \"endIndex\": 5,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"word\",\n                  \"endIndex\": 5,\n                  \"text\": \"b\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 9\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 7,\n  \"text\": \"a \\\\`b\\\\`\",\n  \"innerText\": \"a \\\\`b\\\\`\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 7,\n      \"text\": \"a \\\\`b\\\\`\",\n      \"innerText\": \"a \\\\`b\\\\`\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 3,\n          \"type\": \"word\",\n          \"endIndex\": 7,\n          \"text\": \"`b\\\\`\",\n          \"innerText\": \"`b`\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 10\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 10,\n  \"text\": \"a $(\\\\`b\\\\`)\",\n  \"innerText\": \"a $(\\\\`b\\\\`)\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 10,\n      \"text\": \"a $(\\\\`b\\\\`)\",\n      \"innerText\": \"a $(\\\\`b\\\\`)\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"command_substitution\",\n          \"endIndex\": 10,\n          \"text\": \"$(\\\\`b\\\\`)\",\n          \"innerText\": \"$(\\\\`b\\\\`)\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"command\",\n              \"endIndex\": 9,\n              \"text\": \"\\\\`b\\\\`\",\n              \"innerText\": \"\\\\`b\\\\`\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 5,\n                  \"type\": \"word\",\n                  \"endIndex\": 9,\n                  \"text\": \"`b\\\\`\",\n                  \"innerText\": \"`b`\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}"
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/multipleStatements/input.sh",
    "content": "### Case 1\na && b\n\n### Case 2\na || b\n\n### Case 3\na | b\n\n### Case 4\na |& b\n\n### Case 5\n(a; b)\n\n### Case 6\n(a; b;)\n\n### Case 7\n{a; b}\n\n### Case 8\n{a; b;}\n\n### Case 9\na; b\n\n### Case 10\na & b\n\n### Case 11\na &; b\n\n### Case 12\na ; b;\n\n### Case 13\na && b || c\n\n### Case 14\na && b | c\n\n### Case 15\na | b && c\n\n### Case 16\n(a) | b && c"
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/multipleStatements/output.txt",
    "content": "// Case 1\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a && b\",\n  \"innerText\": \"a && b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 6,\n      \"text\": \"a && b\",\n      \"innerText\": \"a && b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a \",\n          \"innerText\": \"a \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"word\",\n              \"endIndex\": 1,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 5,\n          \"type\": \"command\",\n          \"endIndex\": 6,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 5,\n              \"type\": \"word\",\n              \"endIndex\": 6,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 2\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a || b\",\n  \"innerText\": \"a || b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 6,\n      \"text\": \"a || b\",\n      \"innerText\": \"a || b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a \",\n          \"innerText\": \"a \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"word\",\n              \"endIndex\": 1,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 5,\n          \"type\": \"command\",\n          \"endIndex\": 6,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 5,\n              \"type\": \"word\",\n              \"endIndex\": 6,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 3\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 5,\n  \"text\": \"a | b\",\n  \"innerText\": \"a | b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"pipeline\",\n      \"endIndex\": 5,\n      \"text\": \"a | b\",\n      \"innerText\": \"a | b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a \",\n          \"innerText\": \"a \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"word\",\n              \"endIndex\": 1,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 4,\n          \"type\": \"command\",\n          \"endIndex\": 5,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 4\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a |& b\",\n  \"innerText\": \"a |& b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"pipeline\",\n      \"endIndex\": 6,\n      \"text\": \"a |& b\",\n      \"innerText\": \"a |& b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a \",\n          \"innerText\": \"a \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"word\",\n              \"endIndex\": 1,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 5,\n          \"type\": \"command\",\n          \"endIndex\": 6,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 5,\n              \"type\": \"word\",\n              \"endIndex\": 6,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 5\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"(a; b)\",\n  \"innerText\": \"(a; b)\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"subshell\",\n      \"endIndex\": 6,\n      \"text\": \"(a; b)\",\n      \"innerText\": \"(a; b)\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 1,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 1,\n              \"type\": \"word\",\n              \"endIndex\": 2,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 4,\n          \"type\": \"command\",\n          \"endIndex\": 5,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 6\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 7,\n  \"text\": \"(a; b;)\",\n  \"innerText\": \"(a; b;)\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"subshell\",\n      \"endIndex\": 7,\n      \"text\": \"(a; b;)\",\n      \"innerText\": \"(a; b;)\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 1,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 1,\n              \"type\": \"word\",\n              \"endIndex\": 2,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 4,\n          \"type\": \"command\",\n          \"endIndex\": 5,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 7\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"{a; b}\",\n  \"innerText\": \"{a; b}\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"compound_statement\",\n      \"endIndex\": 6,\n      \"text\": \"{a; b}\",\n      \"innerText\": \"{a; b}\",\n      \"complete\": false,\n      \"children\": [\n        {\n          \"startIndex\": 1,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 1,\n              \"type\": \"word\",\n              \"endIndex\": 2,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 4,\n          \"type\": \"command\",\n          \"endIndex\": 6,\n          \"text\": \"b}\",\n          \"innerText\": \"b}\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 6,\n              \"text\": \"b}\",\n              \"innerText\": \"b}\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 8\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 7,\n  \"text\": \"{a; b;}\",\n  \"innerText\": \"{a; b;}\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"compound_statement\",\n      \"endIndex\": 7,\n      \"text\": \"{a; b;}\",\n      \"innerText\": \"{a; b;}\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 1,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 1,\n              \"type\": \"word\",\n              \"endIndex\": 2,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 4,\n          \"type\": \"command\",\n          \"endIndex\": 5,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 9\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 4,\n  \"text\": \"a; b\",\n  \"innerText\": \"a; b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 1,\n      \"text\": \"a\",\n      \"innerText\": \"a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    },\n    {\n      \"startIndex\": 3,\n      \"type\": \"command\",\n      \"endIndex\": 4,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 3,\n          \"type\": \"word\",\n          \"endIndex\": 4,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 10\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 5,\n  \"text\": \"a & b\",\n  \"innerText\": \"a & b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 2,\n      \"text\": \"a \",\n      \"innerText\": \"a \",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    },\n    {\n      \"startIndex\": 4,\n      \"type\": \"command\",\n      \"endIndex\": 5,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 4,\n          \"type\": \"word\",\n          \"endIndex\": 5,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 11\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a &; b\",\n  \"innerText\": \"a &; b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 2,\n      \"text\": \"a \",\n      \"innerText\": \"a \",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    },\n    {\n      \"startIndex\": 5,\n      \"type\": \"command\",\n      \"endIndex\": 6,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 5,\n          \"type\": \"word\",\n          \"endIndex\": 6,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 12\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a ; b;\",\n  \"innerText\": \"a ; b;\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 2,\n      \"text\": \"a \",\n      \"innerText\": \"a \",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    },\n    {\n      \"startIndex\": 4,\n      \"type\": \"command\",\n      \"endIndex\": 5,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 4,\n          \"type\": \"word\",\n          \"endIndex\": 5,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 13\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 11,\n  \"text\": \"a && b || c\",\n  \"innerText\": \"a && b || c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 11,\n      \"text\": \"a && b || c\",\n      \"innerText\": \"a && b || c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a \",\n          \"innerText\": \"a \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"word\",\n              \"endIndex\": 1,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 5,\n          \"type\": \"command\",\n          \"endIndex\": 7,\n          \"text\": \"b \",\n          \"innerText\": \"b \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 5,\n              \"type\": \"word\",\n              \"endIndex\": 6,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 10,\n          \"type\": \"command\",\n          \"endIndex\": 11,\n          \"text\": \"c\",\n          \"innerText\": \"c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 10,\n              \"type\": \"word\",\n              \"endIndex\": 11,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 14\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 10,\n  \"text\": \"a && b | c\",\n  \"innerText\": \"a && b | c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 10,\n      \"text\": \"a && b | c\",\n      \"innerText\": \"a && b | c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"command\",\n          \"endIndex\": 2,\n          \"text\": \"a \",\n          \"innerText\": \"a \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"word\",\n              \"endIndex\": 1,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"startIndex\": 5,\n          \"type\": \"pipeline\",\n          \"endIndex\": 10,\n          \"text\": \"b | c\",\n          \"innerText\": \"b | c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 5,\n              \"type\": \"command\",\n              \"endIndex\": 7,\n              \"text\": \"b \",\n              \"innerText\": \"b \",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 5,\n                  \"type\": \"word\",\n                  \"endIndex\": 6,\n                  \"text\": \"b\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            },\n            {\n              \"startIndex\": 9,\n              \"type\": \"command\",\n              \"endIndex\": 10,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 9,\n                  \"type\": \"word\",\n                  \"endIndex\": 10,\n                  \"text\": \"c\",\n                  \"innerText\": \"c\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 15\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 10,\n  \"text\": \"a | b && c\",\n  \"innerText\": \"a | b && c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 10,\n      \"text\": \"a | b && c\",\n      \"innerText\": \"a | b && c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"pipeline\",\n          \"endIndex\": 6,\n          \"text\": \"a | b \",\n          \"innerText\": \"a | b \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"command\",\n              \"endIndex\": 2,\n              \"text\": \"a \",\n              \"innerText\": \"a \",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 0,\n                  \"type\": \"word\",\n                  \"endIndex\": 1,\n                  \"text\": \"a\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            },\n            {\n              \"startIndex\": 4,\n              \"type\": \"command\",\n              \"endIndex\": 6,\n              \"text\": \"b \",\n              \"innerText\": \"b \",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"word\",\n                  \"endIndex\": 5,\n                  \"text\": \"b\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"startIndex\": 9,\n          \"type\": \"command\",\n          \"endIndex\": 10,\n          \"text\": \"c\",\n          \"innerText\": \"c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 9,\n              \"type\": \"word\",\n              \"endIndex\": 10,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 16\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 12,\n  \"text\": \"(a) | b && c\",\n  \"innerText\": \"(a) | b && c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 12,\n      \"text\": \"(a) | b && c\",\n      \"innerText\": \"(a) | b && c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"pipeline\",\n          \"endIndex\": 8,\n          \"text\": \"(a) | b \",\n          \"innerText\": \"(a) | b \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"subshell\",\n              \"endIndex\": 3,\n              \"text\": \"(a)\",\n              \"innerText\": \"(a)\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 1,\n                  \"type\": \"command\",\n                  \"endIndex\": 2,\n                  \"text\": \"a\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 1,\n                      \"type\": \"word\",\n                      \"endIndex\": 2,\n                      \"text\": \"a\",\n                      \"innerText\": \"a\",\n                      \"complete\": true,\n                      \"children\": []\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"startIndex\": 6,\n              \"type\": \"command\",\n              \"endIndex\": 8,\n              \"text\": \"b \",\n              \"innerText\": \"b \",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 6,\n                  \"type\": \"word\",\n                  \"endIndex\": 7,\n                  \"text\": \"b\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"startIndex\": 11,\n          \"type\": \"command\",\n          \"endIndex\": 12,\n          \"text\": \"c\",\n          \"innerText\": \"c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 11,\n              \"type\": \"word\",\n              \"endIndex\": 12,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}"
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/primaryExpressions/input.sh",
    "content": "### Case 1\na \"\\${b}\"\n\n### Case 2\na \"'b'\"\n\n### Case 3\na \"\\${b:+\"c\"}\"\n\n### Case 4\na b\"c\"\n\n### Case 5\na '\\${b}'\n\n### Case 6\na $'\\${b}'\n\n### Case 7\na $'b''c'd$$$e\\${f}\"g\"\n\n### Case 8\na $'b\\\\'c'\n\n### Case 9\na 'b\\\\'c'\n\n### Case 10\na \"b$\"\n\n### Case 11\na \"$b\"\n\n### Case 12\na \"$(b \"c\" && d)\""
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/primaryExpressions/output.txt",
    "content": "// Case 1\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 9,\n  \"text\": \"a \\\"\\\\${b}\\\"\",\n  \"innerText\": \"a \\\"\\\\${b}\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 9,\n      \"text\": \"a \\\"\\\\${b}\\\"\",\n      \"innerText\": \"a \\\"\\\\${b}\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"string\",\n          \"endIndex\": 9,\n          \"text\": \"\\\"\\\\${b}\\\"\",\n          \"innerText\": \"${b}\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 2\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 7,\n  \"text\": \"a \\\"'b'\\\"\",\n  \"innerText\": \"a \\\"'b'\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 7,\n      \"text\": \"a \\\"'b'\\\"\",\n      \"innerText\": \"a \\\"'b'\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"string\",\n          \"endIndex\": 7,\n          \"text\": \"\\\"'b'\\\"\",\n          \"innerText\": \"'b'\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 3\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 14,\n  \"text\": \"a \\\"\\\\${b:+\\\"c\\\"}\\\"\",\n  \"innerText\": \"a \\\"\\\\${b:+\\\"c\\\"}\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 14,\n      \"text\": \"a \\\"\\\\${b:+\\\"c\\\"}\\\"\",\n      \"innerText\": \"a \\\"\\\\${b:+\\\"c\\\"}\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"concatenation\",\n          \"endIndex\": 14,\n          \"text\": \"\\\"\\\\${b:+\\\"c\\\"}\\\"\",\n          \"innerText\": \"${b:+c}\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 2,\n              \"type\": \"string\",\n              \"endIndex\": 10,\n              \"text\": \"\\\"\\\\${b:+\\\"\",\n              \"innerText\": \"${b:+\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 10,\n              \"type\": \"word\",\n              \"endIndex\": 11,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 11,\n              \"type\": \"string\",\n              \"endIndex\": 14,\n              \"text\": \"\\\"}\\\"\",\n              \"innerText\": \"}\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 4\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a b\\\"c\\\"\",\n  \"innerText\": \"a b\\\"c\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 6,\n      \"text\": \"a b\\\"c\\\"\",\n      \"innerText\": \"a b\\\"c\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"concatenation\",\n          \"endIndex\": 6,\n          \"text\": \"b\\\"c\\\"\",\n          \"innerText\": \"bc\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 2,\n              \"type\": \"word\",\n              \"endIndex\": 3,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 3,\n              \"type\": \"string\",\n              \"endIndex\": 6,\n              \"text\": \"\\\"c\\\"\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 5\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 9,\n  \"text\": \"a '\\\\${b}'\",\n  \"innerText\": \"a '\\\\${b}'\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 9,\n      \"text\": \"a '\\\\${b}'\",\n      \"innerText\": \"a '\\\\${b}'\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"raw_string\",\n          \"endIndex\": 9,\n          \"text\": \"'\\\\${b}'\",\n          \"innerText\": \"\\\\${b}\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 6\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 10,\n  \"text\": \"a $'\\\\${b}'\",\n  \"innerText\": \"a $'\\\\${b}'\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 10,\n      \"text\": \"a $'\\\\${b}'\",\n      \"innerText\": \"a $'\\\\${b}'\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"ansi_c_string\",\n          \"endIndex\": 10,\n          \"text\": \"$'\\\\${b}'\",\n          \"innerText\": \"\\\\${b}\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 7\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 22,\n  \"text\": \"a $'b''c'd$$$e\\\\${f}\\\"g\\\"\",\n  \"innerText\": \"a $'b''c'd$$$e\\\\${f}\\\"g\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 22,\n      \"text\": \"a $'b''c'd$$$e\\\\${f}\\\"g\\\"\",\n      \"innerText\": \"a $'b''c'd$$$e\\\\${f}\\\"g\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"concatenation\",\n          \"endIndex\": 22,\n          \"text\": \"$'b''c'd$$$e\\\\${f}\\\"g\\\"\",\n          \"innerText\": \"bcd$$$e${f}g\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 2,\n              \"type\": \"ansi_c_string\",\n              \"endIndex\": 6,\n              \"text\": \"$'b'\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 6,\n              \"type\": \"raw_string\",\n              \"endIndex\": 9,\n              \"text\": \"'c'\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 9,\n              \"type\": \"word\",\n              \"endIndex\": 10,\n              \"text\": \"d\",\n              \"innerText\": \"d\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 10,\n              \"type\": \"special_expansion\",\n              \"endIndex\": 12,\n              \"text\": \"$$\",\n              \"innerText\": \"$$\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 12,\n              \"type\": \"simple_expansion\",\n              \"endIndex\": 14,\n              \"text\": \"$e\",\n              \"innerText\": \"$e\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 15,\n              \"type\": \"word\",\n              \"endIndex\": 19,\n              \"text\": \"${f}\",\n              \"innerText\": \"${f}\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 19,\n              \"type\": \"string\",\n              \"endIndex\": 22,\n              \"text\": \"\\\"g\\\"\",\n              \"innerText\": \"g\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 8\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 10,\n  \"text\": \"a $'b\\\\\\\\'c'\",\n  \"innerText\": \"a $'b\\\\\\\\'c'\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 10,\n      \"text\": \"a $'b\\\\\\\\'c'\",\n      \"innerText\": \"a $'b\\\\\\\\'c'\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"concatenation\",\n          \"endIndex\": 10,\n          \"text\": \"$'b\\\\\\\\'c'\",\n          \"innerText\": \"b\\\\\\\\c\",\n          \"complete\": false,\n          \"children\": [\n            {\n              \"startIndex\": 2,\n              \"type\": \"ansi_c_string\",\n              \"endIndex\": 8,\n              \"text\": \"$'b\\\\\\\\'\",\n              \"innerText\": \"b\\\\\\\\\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 8,\n              \"type\": \"word\",\n              \"endIndex\": 9,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 9,\n              \"type\": \"raw_string\",\n              \"endIndex\": 10,\n              \"text\": \"'\",\n              \"innerText\": \"\",\n              \"complete\": false,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 9\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 9,\n  \"text\": \"a 'b\\\\\\\\'c'\",\n  \"innerText\": \"a 'b\\\\\\\\'c'\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 9,\n      \"text\": \"a 'b\\\\\\\\'c'\",\n      \"innerText\": \"a 'b\\\\\\\\'c'\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"concatenation\",\n          \"endIndex\": 9,\n          \"text\": \"'b\\\\\\\\'c'\",\n          \"innerText\": \"b\\\\\\\\c\",\n          \"complete\": false,\n          \"children\": [\n            {\n              \"startIndex\": 2,\n              \"type\": \"raw_string\",\n              \"endIndex\": 7,\n              \"text\": \"'b\\\\\\\\'\",\n              \"innerText\": \"b\\\\\\\\\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 7,\n              \"type\": \"word\",\n              \"endIndex\": 8,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 8,\n              \"type\": \"raw_string\",\n              \"endIndex\": 9,\n              \"text\": \"'\",\n              \"innerText\": \"\",\n              \"complete\": false,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 10\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a \\\"b$\\\"\",\n  \"innerText\": \"a \\\"b$\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 6,\n      \"text\": \"a \\\"b$\\\"\",\n      \"innerText\": \"a \\\"b$\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"string\",\n          \"endIndex\": 6,\n          \"text\": \"\\\"b$\\\"\",\n          \"innerText\": \"b$\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 11\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"a \\\"$b\\\"\",\n  \"innerText\": \"a \\\"$b\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 6,\n      \"text\": \"a \\\"$b\\\"\",\n      \"innerText\": \"a \\\"$b\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"string\",\n          \"endIndex\": 6,\n          \"text\": \"\\\"$b\\\"\",\n          \"innerText\": \"$b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 3,\n              \"type\": \"simple_expansion\",\n              \"endIndex\": 5,\n              \"text\": \"$b\",\n              \"innerText\": \"$b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 12\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 17,\n  \"text\": \"a \\\"$(b \\\"c\\\" && d)\\\"\",\n  \"innerText\": \"a \\\"$(b \\\"c\\\" && d)\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 17,\n      \"text\": \"a \\\"$(b \\\"c\\\" && d)\\\"\",\n      \"innerText\": \"a \\\"$(b \\\"c\\\" && d)\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"string\",\n          \"endIndex\": 17,\n          \"text\": \"\\\"$(b \\\"c\\\" && d)\\\"\",\n          \"innerText\": \"$(b \\\"c\\\" && d)\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 3,\n              \"type\": \"command_substitution\",\n              \"endIndex\": 16,\n              \"text\": \"$(b \\\"c\\\" && d)\",\n              \"innerText\": \"$(b \\\"c\\\" && d)\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 5,\n                  \"type\": \"list\",\n                  \"endIndex\": 15,\n                  \"text\": \"b \\\"c\\\" && d\",\n                  \"innerText\": \"b \\\"c\\\" && d\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 5,\n                      \"type\": \"command\",\n                      \"endIndex\": 11,\n                      \"text\": \"b \\\"c\\\" \",\n                      \"innerText\": \"b \\\"c\\\" \",\n                      \"complete\": true,\n                      \"children\": [\n                        {\n                          \"startIndex\": 5,\n                          \"type\": \"word\",\n                          \"endIndex\": 6,\n                          \"text\": \"b\",\n                          \"innerText\": \"b\",\n                          \"complete\": true,\n                          \"children\": []\n                        },\n                        {\n                          \"startIndex\": 7,\n                          \"type\": \"string\",\n                          \"endIndex\": 10,\n                          \"text\": \"\\\"c\\\"\",\n                          \"innerText\": \"c\",\n                          \"complete\": true,\n                          \"children\": []\n                        }\n                      ]\n                    },\n                    {\n                      \"startIndex\": 14,\n                      \"type\": \"command\",\n                      \"endIndex\": 15,\n                      \"text\": \"d\",\n                      \"innerText\": \"d\",\n                      \"complete\": true,\n                      \"children\": [\n                        {\n                          \"startIndex\": 14,\n                          \"type\": \"word\",\n                          \"endIndex\": 15,\n                          \"text\": \"d\",\n                          \"innerText\": \"d\",\n                          \"complete\": true,\n                          \"children\": []\n                        }\n                      ]\n                    }\n                  ]\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}"
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/variables/input.sh",
    "content": "### Case 1\nENV=a b\n\n### Case 2\nENV=a b c d --op=e\n\n### Case 3\nENV=a ENV=b a\n\n### Case 4\nENV=a ENV=b a && ENV=c c\n\n### Case 5\nENV=\"a b\" c\n\n### Case 6\nENV='a b' c\n\n### Case 7\nENV=`cmd` a\n\n### Case 8\nENV+='100' b\n\n### Case 9\nENV+=a ENV=b\n\n### Case 10\nENV+=a ENV=b && foo\n\n### Case 11\nENV=\"a\n\n### Case 12\nENV='a\n\n### Case 13\nENV=a ENV=`b\n\n### Case 14\nENV=`ENV=\"a\" b` && ENV=\"c\" d\n\n### Case 15\nc $(ENV=a foo)\n\n### Case 16\nENV=a; b\n\n### Case 17\nENV=a ; b\n\n### Case 18\nENV=a & b\n\n### Case 19\nENV=a|b\n\n### Case 20\nENV[0]=a b\n\n### Case 21\nENV[0]=a; b\n\n### Case 22\nENV[1]=`a b\n\n### Case 23\nENV[2]+=\"a b \"\n\n### Case 24\nMY_VAR='echo'hi$'quote'\"command: $(ps | VAR=2 grep ps)\"\n\n### Case 25\nENV=\"a\"'b'c d\n\n### Case 26\nENV=a\"b\"'c'"
  },
  {
    "path": "extensions/terminal-suggest/fixtures/shell-parser/variables/output.txt",
    "content": "// Case 1\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 7,\n  \"text\": \"ENV=a b\",\n  \"innerText\": \"ENV=a b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 7,\n      \"text\": \"ENV=a b\",\n      \"innerText\": \"ENV=a b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 6,\n          \"type\": \"command\",\n          \"endIndex\": 7,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 6,\n              \"type\": \"word\",\n              \"endIndex\": 7,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 2\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 18,\n  \"text\": \"ENV=a b c d --op=e\",\n  \"innerText\": \"ENV=a b c d --op=e\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 18,\n      \"text\": \"ENV=a b c d --op=e\",\n      \"innerText\": \"ENV=a b c d --op=e\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 6,\n          \"type\": \"command\",\n          \"endIndex\": 18,\n          \"text\": \"b c d --op=e\",\n          \"innerText\": \"b c d --op=e\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 6,\n              \"type\": \"word\",\n              \"endIndex\": 7,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 8,\n              \"type\": \"word\",\n              \"endIndex\": 9,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 10,\n              \"type\": \"word\",\n              \"endIndex\": 11,\n              \"text\": \"d\",\n              \"innerText\": \"d\",\n              \"complete\": true,\n              \"children\": []\n            },\n            {\n              \"startIndex\": 12,\n              \"type\": \"word\",\n              \"endIndex\": 18,\n              \"text\": \"--op=e\",\n              \"innerText\": \"--op=e\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 3\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 13,\n  \"text\": \"ENV=a ENV=b a\",\n  \"innerText\": \"ENV=a ENV=b a\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 13,\n      \"text\": \"ENV=a ENV=b a\",\n      \"innerText\": \"ENV=a ENV=b a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 6,\n          \"type\": \"assignment\",\n          \"endIndex\": 11,\n          \"text\": \"ENV=b\",\n          \"innerText\": \"ENV=b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 10,\n              \"type\": \"word\",\n              \"endIndex\": 11,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 6,\n            \"type\": \"variable_name\",\n            \"endIndex\": 9,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 12,\n          \"type\": \"command\",\n          \"endIndex\": 13,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 12,\n              \"type\": \"word\",\n              \"endIndex\": 13,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 4\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 24,\n  \"text\": \"ENV=a ENV=b a && ENV=c c\",\n  \"innerText\": \"ENV=a ENV=b a && ENV=c c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 24,\n      \"text\": \"ENV=a ENV=b a && ENV=c c\",\n      \"innerText\": \"ENV=a ENV=b a && ENV=c c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment_list\",\n          \"endIndex\": 14,\n          \"text\": \"ENV=a ENV=b a \",\n          \"innerText\": \"ENV=a ENV=b a \",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"assignment\",\n              \"endIndex\": 5,\n              \"text\": \"ENV=a\",\n              \"innerText\": \"ENV=a\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"word\",\n                  \"endIndex\": 5,\n                  \"text\": \"a\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 0,\n                \"type\": \"variable_name\",\n                \"endIndex\": 3,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"=\"\n            },\n            {\n              \"startIndex\": 6,\n              \"type\": \"assignment\",\n              \"endIndex\": 11,\n              \"text\": \"ENV=b\",\n              \"innerText\": \"ENV=b\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 10,\n                  \"type\": \"word\",\n                  \"endIndex\": 11,\n                  \"text\": \"b\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 6,\n                \"type\": \"variable_name\",\n                \"endIndex\": 9,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"=\"\n            },\n            {\n              \"startIndex\": 12,\n              \"type\": \"command\",\n              \"endIndex\": 14,\n              \"text\": \"a \",\n              \"innerText\": \"a \",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 12,\n                  \"type\": \"word\",\n                  \"endIndex\": 13,\n                  \"text\": \"a\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ],\n          \"hasCommand\": true\n        },\n        {\n          \"startIndex\": 17,\n          \"type\": \"assignment_list\",\n          \"endIndex\": 24,\n          \"text\": \"ENV=c c\",\n          \"innerText\": \"ENV=c c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 17,\n              \"type\": \"assignment\",\n              \"endIndex\": 22,\n              \"text\": \"ENV=c\",\n              \"innerText\": \"ENV=c\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 21,\n                  \"type\": \"word\",\n                  \"endIndex\": 22,\n                  \"text\": \"c\",\n                  \"innerText\": \"c\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 17,\n                \"type\": \"variable_name\",\n                \"endIndex\": 20,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"=\"\n            },\n            {\n              \"startIndex\": 23,\n              \"type\": \"command\",\n              \"endIndex\": 24,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 23,\n                  \"type\": \"word\",\n                  \"endIndex\": 24,\n                  \"text\": \"c\",\n                  \"innerText\": \"c\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ],\n          \"hasCommand\": true\n        }\n      ]\n    }\n  ]\n}\n\n// Case 5\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 11,\n  \"text\": \"ENV=\\\"a b\\\" c\",\n  \"innerText\": \"ENV=\\\"a b\\\" c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 11,\n      \"text\": \"ENV=\\\"a b\\\" c\",\n      \"innerText\": \"ENV=\\\"a b\\\" c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 9,\n          \"text\": \"ENV=\\\"a b\\\"\",\n          \"innerText\": \"ENV=\\\"a b\\\"\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"string\",\n              \"endIndex\": 9,\n              \"text\": \"\\\"a b\\\"\",\n              \"innerText\": \"a b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 10,\n          \"type\": \"command\",\n          \"endIndex\": 11,\n          \"text\": \"c\",\n          \"innerText\": \"c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 10,\n              \"type\": \"word\",\n              \"endIndex\": 11,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 6\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 11,\n  \"text\": \"ENV='a b' c\",\n  \"innerText\": \"ENV='a b' c\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 11,\n      \"text\": \"ENV='a b' c\",\n      \"innerText\": \"ENV='a b' c\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 9,\n          \"text\": \"ENV='a b'\",\n          \"innerText\": \"ENV='a b'\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"raw_string\",\n              \"endIndex\": 9,\n              \"text\": \"'a b'\",\n              \"innerText\": \"a b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 10,\n          \"type\": \"command\",\n          \"endIndex\": 11,\n          \"text\": \"c\",\n          \"innerText\": \"c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 10,\n              \"type\": \"word\",\n              \"endIndex\": 11,\n              \"text\": \"c\",\n              \"innerText\": \"c\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 7\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 11,\n  \"text\": \"ENV=`cmd` a\",\n  \"innerText\": \"ENV=`cmd` a\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 11,\n      \"text\": \"ENV=`cmd` a\",\n      \"innerText\": \"ENV=`cmd` a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 9,\n          \"text\": \"ENV=`cmd`\",\n          \"innerText\": \"ENV=`cmd`\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"command_substitution\",\n              \"endIndex\": 9,\n              \"text\": \"`cmd`\",\n              \"innerText\": \"`cmd`\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 5,\n                  \"type\": \"command\",\n                  \"endIndex\": 8,\n                  \"text\": \"cmd\",\n                  \"innerText\": \"cmd\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 5,\n                      \"type\": \"word\",\n                      \"endIndex\": 8,\n                      \"text\": \"cmd\",\n                      \"innerText\": \"cmd\",\n                      \"complete\": true,\n                      \"children\": []\n                    }\n                  ]\n                }\n              ]\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 10,\n          \"type\": \"command\",\n          \"endIndex\": 11,\n          \"text\": \"a\",\n          \"innerText\": \"a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 10,\n              \"type\": \"word\",\n              \"endIndex\": 11,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 8\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 12,\n  \"text\": \"ENV+='100' b\",\n  \"innerText\": \"ENV+='100' b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 12,\n      \"text\": \"ENV+='100' b\",\n      \"innerText\": \"ENV+='100' b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 10,\n          \"text\": \"ENV+='100'\",\n          \"innerText\": \"ENV+='100'\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 5,\n              \"type\": \"raw_string\",\n              \"endIndex\": 10,\n              \"text\": \"'100'\",\n              \"innerText\": \"100\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"+=\"\n        },\n        {\n          \"startIndex\": 11,\n          \"type\": \"command\",\n          \"endIndex\": 12,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 11,\n              \"type\": \"word\",\n              \"endIndex\": 12,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 9\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 12,\n  \"text\": \"ENV+=a ENV=b\",\n  \"innerText\": \"ENV+=a ENV=b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 12,\n      \"text\": \"ENV+=a ENV=b\",\n      \"innerText\": \"ENV+=a ENV=b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 6,\n          \"text\": \"ENV+=a\",\n          \"innerText\": \"ENV+=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 5,\n              \"type\": \"word\",\n              \"endIndex\": 6,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"+=\"\n        },\n        {\n          \"startIndex\": 7,\n          \"type\": \"assignment\",\n          \"endIndex\": 12,\n          \"text\": \"ENV=b\",\n          \"innerText\": \"ENV=b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 11,\n              \"type\": \"word\",\n              \"endIndex\": 12,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 7,\n            \"type\": \"variable_name\",\n            \"endIndex\": 10,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}\n\n// Case 10\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 19,\n  \"text\": \"ENV+=a ENV=b && foo\",\n  \"innerText\": \"ENV+=a ENV=b && foo\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 19,\n      \"text\": \"ENV+=a ENV=b && foo\",\n      \"innerText\": \"ENV+=a ENV=b && foo\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment_list\",\n          \"endIndex\": 12,\n          \"text\": \"ENV+=a ENV=b\",\n          \"innerText\": \"ENV+=a ENV=b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"assignment\",\n              \"endIndex\": 6,\n              \"text\": \"ENV+=a\",\n              \"innerText\": \"ENV+=a\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 5,\n                  \"type\": \"word\",\n                  \"endIndex\": 6,\n                  \"text\": \"a\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 0,\n                \"type\": \"variable_name\",\n                \"endIndex\": 3,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"+=\"\n            },\n            {\n              \"startIndex\": 7,\n              \"type\": \"assignment\",\n              \"endIndex\": 12,\n              \"text\": \"ENV=b\",\n              \"innerText\": \"ENV=b\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 11,\n                  \"type\": \"word\",\n                  \"endIndex\": 12,\n                  \"text\": \"b\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 7,\n                \"type\": \"variable_name\",\n                \"endIndex\": 10,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"=\"\n            }\n          ],\n          \"hasCommand\": false\n        },\n        {\n          \"startIndex\": 16,\n          \"type\": \"command\",\n          \"endIndex\": 19,\n          \"text\": \"foo\",\n          \"innerText\": \"foo\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 16,\n              \"type\": \"word\",\n              \"endIndex\": 19,\n              \"text\": \"foo\",\n              \"innerText\": \"foo\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 11\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"ENV=\\\"a\",\n  \"innerText\": \"ENV=\\\"a\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 6,\n      \"text\": \"ENV=\\\"a\",\n      \"innerText\": \"ENV=\\\"a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 6,\n          \"text\": \"ENV=\\\"a\",\n          \"innerText\": \"ENV=\\\"a\",\n          \"complete\": false,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"string\",\n              \"endIndex\": 6,\n              \"text\": \"\\\"a\",\n              \"innerText\": \"a\",\n              \"complete\": false,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}\n\n// Case 12\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 6,\n  \"text\": \"ENV='a\",\n  \"innerText\": \"ENV='a\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 6,\n      \"text\": \"ENV='a\",\n      \"innerText\": \"ENV='a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 6,\n          \"text\": \"ENV='a\",\n          \"innerText\": \"ENV='a\",\n          \"complete\": false,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"raw_string\",\n              \"endIndex\": 6,\n              \"text\": \"'a\",\n              \"innerText\": \"a\",\n              \"complete\": false,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}\n\n// Case 13\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 12,\n  \"text\": \"ENV=a ENV=`b\",\n  \"innerText\": \"ENV=a ENV=`b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 12,\n      \"text\": \"ENV=a ENV=`b\",\n      \"innerText\": \"ENV=a ENV=`b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 6,\n          \"type\": \"assignment\",\n          \"endIndex\": 12,\n          \"text\": \"ENV=`b\",\n          \"innerText\": \"ENV=`b\",\n          \"complete\": false,\n          \"children\": [\n            {\n              \"startIndex\": 10,\n              \"type\": \"command_substitution\",\n              \"endIndex\": 12,\n              \"text\": \"`b\",\n              \"innerText\": \"`b\",\n              \"complete\": false,\n              \"children\": [\n                {\n                  \"startIndex\": 11,\n                  \"type\": \"command\",\n                  \"endIndex\": 12,\n                  \"text\": \"b\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 11,\n                      \"type\": \"word\",\n                      \"endIndex\": 12,\n                      \"text\": \"b\",\n                      \"innerText\": \"b\",\n                      \"complete\": true,\n                      \"children\": []\n                    }\n                  ]\n                }\n              ]\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 6,\n            \"type\": \"variable_name\",\n            \"endIndex\": 9,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}\n\n// Case 14\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 28,\n  \"text\": \"ENV=`ENV=\\\"a\\\" b` && ENV=\\\"c\\\" d\",\n  \"innerText\": \"ENV=`ENV=\\\"a\\\" b` && ENV=\\\"c\\\" d\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"list\",\n      \"endIndex\": 28,\n      \"text\": \"ENV=`ENV=\\\"a\\\" b` && ENV=\\\"c\\\" d\",\n      \"innerText\": \"ENV=`ENV=\\\"a\\\" b` && ENV=\\\"c\\\" d\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment_list\",\n          \"endIndex\": 15,\n          \"text\": \"ENV=`ENV=\\\"a\\\" b`\",\n          \"innerText\": \"ENV=`ENV=\\\"a\\\" b`\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"assignment\",\n              \"endIndex\": 15,\n              \"text\": \"ENV=`ENV=\\\"a\\\" b`\",\n              \"innerText\": \"ENV=`ENV=\\\"a\\\" b`\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"command_substitution\",\n                  \"endIndex\": 15,\n                  \"text\": \"`ENV=\\\"a\\\" b`\",\n                  \"innerText\": \"`ENV=\\\"a\\\" b`\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 5,\n                      \"type\": \"assignment_list\",\n                      \"endIndex\": 14,\n                      \"text\": \"ENV=\\\"a\\\" b\",\n                      \"innerText\": \"ENV=\\\"a\\\" b\",\n                      \"complete\": true,\n                      \"children\": [\n                        {\n                          \"startIndex\": 5,\n                          \"type\": \"assignment\",\n                          \"endIndex\": 12,\n                          \"text\": \"ENV=\\\"a\\\"\",\n                          \"innerText\": \"ENV=\\\"a\\\"\",\n                          \"complete\": true,\n                          \"children\": [\n                            {\n                              \"startIndex\": 9,\n                              \"type\": \"string\",\n                              \"endIndex\": 12,\n                              \"text\": \"\\\"a\\\"\",\n                              \"innerText\": \"a\",\n                              \"complete\": true,\n                              \"children\": []\n                            }\n                          ],\n                          \"name\": {\n                            \"startIndex\": 5,\n                            \"type\": \"variable_name\",\n                            \"endIndex\": 8,\n                            \"text\": \"ENV\",\n                            \"innerText\": \"ENV\",\n                            \"complete\": true,\n                            \"children\": []\n                          },\n                          \"operator\": \"=\"\n                        },\n                        {\n                          \"startIndex\": 13,\n                          \"type\": \"command\",\n                          \"endIndex\": 14,\n                          \"text\": \"b\",\n                          \"innerText\": \"b\",\n                          \"complete\": true,\n                          \"children\": [\n                            {\n                              \"startIndex\": 13,\n                              \"type\": \"word\",\n                              \"endIndex\": 14,\n                              \"text\": \"b\",\n                              \"innerText\": \"b\",\n                              \"complete\": true,\n                              \"children\": []\n                            }\n                          ]\n                        }\n                      ],\n                      \"hasCommand\": true\n                    }\n                  ]\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 0,\n                \"type\": \"variable_name\",\n                \"endIndex\": 3,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"=\"\n            }\n          ],\n          \"hasCommand\": false\n        },\n        {\n          \"startIndex\": 19,\n          \"type\": \"assignment_list\",\n          \"endIndex\": 28,\n          \"text\": \"ENV=\\\"c\\\" d\",\n          \"innerText\": \"ENV=\\\"c\\\" d\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 19,\n              \"type\": \"assignment\",\n              \"endIndex\": 26,\n              \"text\": \"ENV=\\\"c\\\"\",\n              \"innerText\": \"ENV=\\\"c\\\"\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 23,\n                  \"type\": \"string\",\n                  \"endIndex\": 26,\n                  \"text\": \"\\\"c\\\"\",\n                  \"innerText\": \"c\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 19,\n                \"type\": \"variable_name\",\n                \"endIndex\": 22,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"=\"\n            },\n            {\n              \"startIndex\": 27,\n              \"type\": \"command\",\n              \"endIndex\": 28,\n              \"text\": \"d\",\n              \"innerText\": \"d\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 27,\n                  \"type\": \"word\",\n                  \"endIndex\": 28,\n                  \"text\": \"d\",\n                  \"innerText\": \"d\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ],\n          \"hasCommand\": true\n        }\n      ]\n    }\n  ]\n}\n\n// Case 15\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 14,\n  \"text\": \"c $(ENV=a foo)\",\n  \"innerText\": \"c $(ENV=a foo)\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"command\",\n      \"endIndex\": 14,\n      \"text\": \"c $(ENV=a foo)\",\n      \"innerText\": \"c $(ENV=a foo)\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"word\",\n          \"endIndex\": 1,\n          \"text\": \"c\",\n          \"innerText\": \"c\",\n          \"complete\": true,\n          \"children\": []\n        },\n        {\n          \"startIndex\": 2,\n          \"type\": \"command_substitution\",\n          \"endIndex\": 14,\n          \"text\": \"$(ENV=a foo)\",\n          \"innerText\": \"$(ENV=a foo)\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"assignment_list\",\n              \"endIndex\": 13,\n              \"text\": \"ENV=a foo\",\n              \"innerText\": \"ENV=a foo\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"assignment\",\n                  \"endIndex\": 9,\n                  \"text\": \"ENV=a\",\n                  \"innerText\": \"ENV=a\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 8,\n                      \"type\": \"word\",\n                      \"endIndex\": 9,\n                      \"text\": \"a\",\n                      \"innerText\": \"a\",\n                      \"complete\": true,\n                      \"children\": []\n                    }\n                  ],\n                  \"name\": {\n                    \"startIndex\": 4,\n                    \"type\": \"variable_name\",\n                    \"endIndex\": 7,\n                    \"text\": \"ENV\",\n                    \"innerText\": \"ENV\",\n                    \"complete\": true,\n                    \"children\": []\n                  },\n                  \"operator\": \"=\"\n                },\n                {\n                  \"startIndex\": 10,\n                  \"type\": \"command\",\n                  \"endIndex\": 13,\n                  \"text\": \"foo\",\n                  \"innerText\": \"foo\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 10,\n                      \"type\": \"word\",\n                      \"endIndex\": 13,\n                      \"text\": \"foo\",\n                      \"innerText\": \"foo\",\n                      \"complete\": true,\n                      \"children\": []\n                    }\n                  ]\n                }\n              ],\n              \"hasCommand\": true\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 16\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 8,\n  \"text\": \"ENV=a; b\",\n  \"innerText\": \"ENV=a; b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 5,\n      \"text\": \"ENV=a\",\n      \"innerText\": \"ENV=a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    },\n    {\n      \"startIndex\": 7,\n      \"type\": \"command\",\n      \"endIndex\": 8,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 7,\n          \"type\": \"word\",\n          \"endIndex\": 8,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 17\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 9,\n  \"text\": \"ENV=a ; b\",\n  \"innerText\": \"ENV=a ; b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 5,\n      \"text\": \"ENV=a\",\n      \"innerText\": \"ENV=a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    },\n    {\n      \"startIndex\": 8,\n      \"type\": \"command\",\n      \"endIndex\": 9,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 8,\n          \"type\": \"word\",\n          \"endIndex\": 9,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 18\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 9,\n  \"text\": \"ENV=a & b\",\n  \"innerText\": \"ENV=a & b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 5,\n      \"text\": \"ENV=a\",\n      \"innerText\": \"ENV=a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"word\",\n              \"endIndex\": 5,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    },\n    {\n      \"startIndex\": 8,\n      \"type\": \"command\",\n      \"endIndex\": 9,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 8,\n          \"type\": \"word\",\n          \"endIndex\": 9,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 19\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 7,\n  \"text\": \"ENV=a|b\",\n  \"innerText\": \"ENV=a|b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"pipeline\",\n      \"endIndex\": 7,\n      \"text\": \"ENV=a|b\",\n      \"innerText\": \"ENV=a|b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment_list\",\n          \"endIndex\": 5,\n          \"text\": \"ENV=a\",\n          \"innerText\": \"ENV=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 0,\n              \"type\": \"assignment\",\n              \"endIndex\": 5,\n              \"text\": \"ENV=a\",\n              \"innerText\": \"ENV=a\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"word\",\n                  \"endIndex\": 5,\n                  \"text\": \"a\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ],\n              \"name\": {\n                \"startIndex\": 0,\n                \"type\": \"variable_name\",\n                \"endIndex\": 3,\n                \"text\": \"ENV\",\n                \"innerText\": \"ENV\",\n                \"complete\": true,\n                \"children\": []\n              },\n              \"operator\": \"=\"\n            }\n          ],\n          \"hasCommand\": false\n        },\n        {\n          \"startIndex\": 6,\n          \"type\": \"command\",\n          \"endIndex\": 7,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 6,\n              \"type\": \"word\",\n              \"endIndex\": 7,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n\n// Case 20\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 10,\n  \"text\": \"ENV[0]=a b\",\n  \"innerText\": \"ENV[0]=a b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 10,\n      \"text\": \"ENV[0]=a b\",\n      \"innerText\": \"ENV[0]=a b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 8,\n          \"text\": \"ENV[0]=a\",\n          \"innerText\": \"ENV[0]=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 7,\n              \"type\": \"word\",\n              \"endIndex\": 8,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"subscript\",\n            \"endIndex\": 6,\n            \"text\": \"ENV[0]\",\n            \"innerText\": \"ENV[0]\",\n            \"complete\": true,\n            \"children\": [\n              {\n                \"startIndex\": 4,\n                \"type\": \"word\",\n                \"endIndex\": 5,\n                \"text\": \"0\",\n                \"innerText\": \"0\",\n                \"complete\": true,\n                \"children\": []\n              }\n            ],\n            \"name\": {\n              \"startIndex\": 0,\n              \"type\": \"variable_name\",\n              \"endIndex\": 3,\n              \"text\": \"ENV\",\n              \"innerText\": \"ENV\",\n              \"complete\": true,\n              \"children\": []\n            }\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 9,\n          \"type\": \"command\",\n          \"endIndex\": 10,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 9,\n              \"type\": \"word\",\n              \"endIndex\": 10,\n              \"text\": \"b\",\n              \"innerText\": \"b\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 21\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 11,\n  \"text\": \"ENV[0]=a; b\",\n  \"innerText\": \"ENV[0]=a; b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 8,\n      \"text\": \"ENV[0]=a\",\n      \"innerText\": \"ENV[0]=a\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 8,\n          \"text\": \"ENV[0]=a\",\n          \"innerText\": \"ENV[0]=a\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 7,\n              \"type\": \"word\",\n              \"endIndex\": 8,\n              \"text\": \"a\",\n              \"innerText\": \"a\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"subscript\",\n            \"endIndex\": 6,\n            \"text\": \"ENV[0]\",\n            \"innerText\": \"ENV[0]\",\n            \"complete\": true,\n            \"children\": [\n              {\n                \"startIndex\": 4,\n                \"type\": \"word\",\n                \"endIndex\": 5,\n                \"text\": \"0\",\n                \"innerText\": \"0\",\n                \"complete\": true,\n                \"children\": []\n              }\n            ],\n            \"name\": {\n              \"startIndex\": 0,\n              \"type\": \"variable_name\",\n              \"endIndex\": 3,\n              \"text\": \"ENV\",\n              \"innerText\": \"ENV\",\n              \"complete\": true,\n              \"children\": []\n            }\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    },\n    {\n      \"startIndex\": 10,\n      \"type\": \"command\",\n      \"endIndex\": 11,\n      \"text\": \"b\",\n      \"innerText\": \"b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 10,\n          \"type\": \"word\",\n          \"endIndex\": 11,\n          \"text\": \"b\",\n          \"innerText\": \"b\",\n          \"complete\": true,\n          \"children\": []\n        }\n      ]\n    }\n  ]\n}\n\n// Case 22\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 11,\n  \"text\": \"ENV[1]=`a b\",\n  \"innerText\": \"ENV[1]=`a b\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 11,\n      \"text\": \"ENV[1]=`a b\",\n      \"innerText\": \"ENV[1]=`a b\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 11,\n          \"text\": \"ENV[1]=`a b\",\n          \"innerText\": \"ENV[1]=`a b\",\n          \"complete\": false,\n          \"children\": [\n            {\n              \"startIndex\": 7,\n              \"type\": \"command_substitution\",\n              \"endIndex\": 11,\n              \"text\": \"`a b\",\n              \"innerText\": \"`a b\",\n              \"complete\": false,\n              \"children\": [\n                {\n                  \"startIndex\": 8,\n                  \"type\": \"command\",\n                  \"endIndex\": 11,\n                  \"text\": \"a b\",\n                  \"innerText\": \"a b\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 8,\n                      \"type\": \"word\",\n                      \"endIndex\": 9,\n                      \"text\": \"a\",\n                      \"innerText\": \"a\",\n                      \"complete\": true,\n                      \"children\": []\n                    },\n                    {\n                      \"startIndex\": 10,\n                      \"type\": \"word\",\n                      \"endIndex\": 11,\n                      \"text\": \"b\",\n                      \"innerText\": \"b\",\n                      \"complete\": true,\n                      \"children\": []\n                    }\n                  ]\n                }\n              ]\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"subscript\",\n            \"endIndex\": 6,\n            \"text\": \"ENV[1]\",\n            \"innerText\": \"ENV[1]\",\n            \"complete\": true,\n            \"children\": [\n              {\n                \"startIndex\": 4,\n                \"type\": \"word\",\n                \"endIndex\": 5,\n                \"text\": \"1\",\n                \"innerText\": \"1\",\n                \"complete\": true,\n                \"children\": []\n              }\n            ],\n            \"name\": {\n              \"startIndex\": 0,\n              \"type\": \"variable_name\",\n              \"endIndex\": 3,\n              \"text\": \"ENV\",\n              \"innerText\": \"ENV\",\n              \"complete\": true,\n              \"children\": []\n            }\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}\n\n// Case 23\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 14,\n  \"text\": \"ENV[2]+=\\\"a b \\\"\",\n  \"innerText\": \"ENV[2]+=\\\"a b \\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 14,\n      \"text\": \"ENV[2]+=\\\"a b \\\"\",\n      \"innerText\": \"ENV[2]+=\\\"a b \\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 14,\n          \"text\": \"ENV[2]+=\\\"a b \\\"\",\n          \"innerText\": \"ENV[2]+=\\\"a b \\\"\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 8,\n              \"type\": \"string\",\n              \"endIndex\": 14,\n              \"text\": \"\\\"a b \\\"\",\n              \"innerText\": \"a b \",\n              \"complete\": true,\n              \"children\": []\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"subscript\",\n            \"endIndex\": 6,\n            \"text\": \"ENV[2]\",\n            \"innerText\": \"ENV[2]\",\n            \"complete\": true,\n            \"children\": [\n              {\n                \"startIndex\": 4,\n                \"type\": \"word\",\n                \"endIndex\": 5,\n                \"text\": \"2\",\n                \"innerText\": \"2\",\n                \"complete\": true,\n                \"children\": []\n              }\n            ],\n            \"name\": {\n              \"startIndex\": 0,\n              \"type\": \"variable_name\",\n              \"endIndex\": 3,\n              \"text\": \"ENV\",\n              \"innerText\": \"ENV\",\n              \"complete\": true,\n              \"children\": []\n            }\n          },\n          \"operator\": \"+=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}\n\n// Case 24\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 55,\n  \"text\": \"MY_VAR='echo'hi$'quote'\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n  \"innerText\": \"MY_VAR='echo'hi$'quote'\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 55,\n      \"text\": \"MY_VAR='echo'hi$'quote'\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n      \"innerText\": \"MY_VAR='echo'hi$'quote'\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 55,\n          \"text\": \"MY_VAR='echo'hi$'quote'\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n          \"innerText\": \"MY_VAR='echo'hi$'quote'\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 7,\n              \"type\": \"concatenation\",\n              \"endIndex\": 55,\n              \"text\": \"'echo'hi$'quote'\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n              \"innerText\": \"echohiquotecommand: $(ps | VAR=2 grep ps)\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 7,\n                  \"type\": \"raw_string\",\n                  \"endIndex\": 13,\n                  \"text\": \"'echo'\",\n                  \"innerText\": \"echo\",\n                  \"complete\": true,\n                  \"children\": []\n                },\n                {\n                  \"startIndex\": 13,\n                  \"type\": \"word\",\n                  \"endIndex\": 15,\n                  \"text\": \"hi\",\n                  \"innerText\": \"hi\",\n                  \"complete\": true,\n                  \"children\": []\n                },\n                {\n                  \"startIndex\": 15,\n                  \"type\": \"ansi_c_string\",\n                  \"endIndex\": 23,\n                  \"text\": \"$'quote'\",\n                  \"innerText\": \"quote\",\n                  \"complete\": true,\n                  \"children\": []\n                },\n                {\n                  \"startIndex\": 23,\n                  \"type\": \"string\",\n                  \"endIndex\": 55,\n                  \"text\": \"\\\"command: $(ps | VAR=2 grep ps)\\\"\",\n                  \"innerText\": \"command: $(ps | VAR=2 grep ps)\",\n                  \"complete\": true,\n                  \"children\": [\n                    {\n                      \"startIndex\": 33,\n                      \"type\": \"command_substitution\",\n                      \"endIndex\": 54,\n                      \"text\": \"$(ps | VAR=2 grep ps)\",\n                      \"innerText\": \"$(ps | VAR=2 grep ps)\",\n                      \"complete\": true,\n                      \"children\": [\n                        {\n                          \"startIndex\": 35,\n                          \"type\": \"pipeline\",\n                          \"endIndex\": 53,\n                          \"text\": \"ps | VAR=2 grep ps\",\n                          \"innerText\": \"ps | VAR=2 grep ps\",\n                          \"complete\": true,\n                          \"children\": [\n                            {\n                              \"startIndex\": 35,\n                              \"type\": \"command\",\n                              \"endIndex\": 38,\n                              \"text\": \"ps \",\n                              \"innerText\": \"ps \",\n                              \"complete\": true,\n                              \"children\": [\n                                {\n                                  \"startIndex\": 35,\n                                  \"type\": \"word\",\n                                  \"endIndex\": 37,\n                                  \"text\": \"ps\",\n                                  \"innerText\": \"ps\",\n                                  \"complete\": true,\n                                  \"children\": []\n                                }\n                              ]\n                            },\n                            {\n                              \"startIndex\": 40,\n                              \"type\": \"assignment_list\",\n                              \"endIndex\": 53,\n                              \"text\": \"VAR=2 grep ps\",\n                              \"innerText\": \"VAR=2 grep ps\",\n                              \"complete\": true,\n                              \"children\": [\n                                {\n                                  \"startIndex\": 40,\n                                  \"type\": \"assignment\",\n                                  \"endIndex\": 45,\n                                  \"text\": \"VAR=2\",\n                                  \"innerText\": \"VAR=2\",\n                                  \"complete\": true,\n                                  \"children\": [\n                                    {\n                                      \"startIndex\": 44,\n                                      \"type\": \"word\",\n                                      \"endIndex\": 45,\n                                      \"text\": \"2\",\n                                      \"innerText\": \"2\",\n                                      \"complete\": true,\n                                      \"children\": []\n                                    }\n                                  ],\n                                  \"name\": {\n                                    \"startIndex\": 40,\n                                    \"type\": \"variable_name\",\n                                    \"endIndex\": 43,\n                                    \"text\": \"VAR\",\n                                    \"innerText\": \"VAR\",\n                                    \"complete\": true,\n                                    \"children\": []\n                                  },\n                                  \"operator\": \"=\"\n                                },\n                                {\n                                  \"startIndex\": 46,\n                                  \"type\": \"command\",\n                                  \"endIndex\": 53,\n                                  \"text\": \"grep ps\",\n                                  \"innerText\": \"grep ps\",\n                                  \"complete\": true,\n                                  \"children\": [\n                                    {\n                                      \"startIndex\": 46,\n                                      \"type\": \"word\",\n                                      \"endIndex\": 50,\n                                      \"text\": \"grep\",\n                                      \"innerText\": \"grep\",\n                                      \"complete\": true,\n                                      \"children\": []\n                                    },\n                                    {\n                                      \"startIndex\": 51,\n                                      \"type\": \"word\",\n                                      \"endIndex\": 53,\n                                      \"text\": \"ps\",\n                                      \"innerText\": \"ps\",\n                                      \"complete\": true,\n                                      \"children\": []\n                                    }\n                                  ]\n                                }\n                              ],\n                              \"hasCommand\": true\n                            }\n                          ]\n                        }\n                      ]\n                    }\n                  ]\n                }\n              ]\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 6,\n            \"text\": \"MY_VAR\",\n            \"innerText\": \"MY_VAR\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}\n\n// Case 25\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 13,\n  \"text\": \"ENV=\\\"a\\\"'b'c d\",\n  \"innerText\": \"ENV=\\\"a\\\"'b'c d\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 13,\n      \"text\": \"ENV=\\\"a\\\"'b'c d\",\n      \"innerText\": \"ENV=\\\"a\\\"'b'c d\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 11,\n          \"text\": \"ENV=\\\"a\\\"'b'c\",\n          \"innerText\": \"ENV=\\\"a\\\"'b'c\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"concatenation\",\n              \"endIndex\": 11,\n              \"text\": \"\\\"a\\\"'b'c\",\n              \"innerText\": \"abc\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"string\",\n                  \"endIndex\": 7,\n                  \"text\": \"\\\"a\\\"\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": []\n                },\n                {\n                  \"startIndex\": 7,\n                  \"type\": \"raw_string\",\n                  \"endIndex\": 10,\n                  \"text\": \"'b'\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                },\n                {\n                  \"startIndex\": 10,\n                  \"type\": \"word\",\n                  \"endIndex\": 11,\n                  \"text\": \"c\",\n                  \"innerText\": \"c\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        },\n        {\n          \"startIndex\": 12,\n          \"type\": \"command\",\n          \"endIndex\": 13,\n          \"text\": \"d\",\n          \"innerText\": \"d\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 12,\n              \"type\": \"word\",\n              \"endIndex\": 13,\n              \"text\": \"d\",\n              \"innerText\": \"d\",\n              \"complete\": true,\n              \"children\": []\n            }\n          ]\n        }\n      ],\n      \"hasCommand\": true\n    }\n  ]\n}\n\n// Case 26\n{\n  \"startIndex\": 0,\n  \"type\": \"program\",\n  \"endIndex\": 11,\n  \"text\": \"ENV=a\\\"b\\\"'c'\",\n  \"innerText\": \"ENV=a\\\"b\\\"'c'\",\n  \"complete\": true,\n  \"children\": [\n    {\n      \"startIndex\": 0,\n      \"type\": \"assignment_list\",\n      \"endIndex\": 11,\n      \"text\": \"ENV=a\\\"b\\\"'c'\",\n      \"innerText\": \"ENV=a\\\"b\\\"'c'\",\n      \"complete\": true,\n      \"children\": [\n        {\n          \"startIndex\": 0,\n          \"type\": \"assignment\",\n          \"endIndex\": 11,\n          \"text\": \"ENV=a\\\"b\\\"'c'\",\n          \"innerText\": \"ENV=a\\\"b\\\"'c'\",\n          \"complete\": true,\n          \"children\": [\n            {\n              \"startIndex\": 4,\n              \"type\": \"concatenation\",\n              \"endIndex\": 11,\n              \"text\": \"a\\\"b\\\"'c'\",\n              \"innerText\": \"abc\",\n              \"complete\": true,\n              \"children\": [\n                {\n                  \"startIndex\": 4,\n                  \"type\": \"word\",\n                  \"endIndex\": 5,\n                  \"text\": \"a\",\n                  \"innerText\": \"a\",\n                  \"complete\": true,\n                  \"children\": []\n                },\n                {\n                  \"startIndex\": 5,\n                  \"type\": \"string\",\n                  \"endIndex\": 8,\n                  \"text\": \"\\\"b\\\"\",\n                  \"innerText\": \"b\",\n                  \"complete\": true,\n                  \"children\": []\n                },\n                {\n                  \"startIndex\": 8,\n                  \"type\": \"raw_string\",\n                  \"endIndex\": 11,\n                  \"text\": \"'c'\",\n                  \"innerText\": \"c\",\n                  \"complete\": true,\n                  \"children\": []\n                }\n              ]\n            }\n          ],\n          \"name\": {\n            \"startIndex\": 0,\n            \"type\": \"variable_name\",\n            \"endIndex\": 3,\n            \"text\": \"ENV\",\n            \"innerText\": \"ENV\",\n            \"complete\": true,\n            \"children\": []\n          },\n          \"operator\": \"=\"\n        }\n      ],\n      \"hasCommand\": false\n    }\n  ]\n}"
  },
  {
    "path": "extensions/terminal-suggest/package.json",
    "content": "{\n  \"name\": \"terminal-suggest\",\n  \"publisher\": \"vscode\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.1\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"icon\": \"./src/media/icon.png\",\n  \"engines\": {\n    \"vscode\": \"^1.95.0\"\n  },\n  \"categories\": [\n    \"Other\"\n  ],\n  \"enabledApiProposals\": [\n    \"terminalCompletionProvider\",\n    \"terminalShellEnv\"\n  ],\n  \"scripts\": {\n    \"compile\": \"npx gulp compile-extension:terminal-suggest\",\n    \"watch\": \"npx gulp watch-extension:terminal-suggest\",\n    \"pull-zshbuiltins\": \"ts-node ./scripts/pullZshBuiltins.ts\",\n    \"pull-fishbuiltins\": \"ts-node ./scripts/pullFishBuiltins.ts\"\n  },\n  \"main\": \"./out/terminalSuggestMain\",\n  \"activationEvents\": [\n    \"onTerminalCompletionsRequested\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/package.nls.json",
    "content": "{\n\t\"description\": \"Extension to add terminal completions for zsh, bash, and fish terminals.\",\n\t\"displayName\": \"Terminal Suggest for VS Code\",\n\t\"view.name\": \"Terminal Suggest\"\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/clone-fig.ps1",
    "content": "git clone https://github.com/withfig/autocomplete third_party/autocomplete\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/clone-fig.sh",
    "content": "git clone https://github.com/withfig/autocomplete third_party/autocomplete\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/pullFishBuiltins.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { cleanupText, checkWindows, execAsync, copyright } from './terminalScriptHelpers';\n\ncheckWindows();\n\ninterface ICommandDetails {\n\tdescription: string;\n\targs: string | undefined;\n\tshortDescription?: string;\n}\n\nlet fishBuiltinsCommandDescriptionsCache = new Map<string, ICommandDetails>();\n\n// Fallback descriptions for commands that don't return proper help information\nconst fallbackDescriptions: Record<string, ICommandDetails> = {\n\t'[': {\n\t\tshortDescription: 'Test if a statement is true',\n\t\tdescription: 'Evaluate an expression and return a status of true (0) or false (non-zero). Unlike the `test` command, the `[` command requires a closing `]`.',\n\t\targs: 'EXPRESSION ]'\n\t},\n\t'break': {\n\t\tshortDescription: 'Exit the current loop',\n\t\tdescription: 'Terminate the execution of the nearest enclosing `while` or `for` loop and proceed with the next command after the loop.',\n\t\targs: undefined\n\t},\n\t'breakpoint': {\n\t\tshortDescription: 'Launch debug mode',\n\t\tdescription: 'Pause execution and launch an interactive debug prompt. This is useful for inspecting the state of a script at a specific point.',\n\t\targs: undefined\n\t},\n\t'case': {\n\t\tshortDescription: 'Match a value against patterns',\n\t\tdescription: 'Within a `switch` block, the `case` command specifies patterns to match against the given value, executing the associated block if a match is found.',\n\t\targs: 'PATTERN...'\n\t},\n\t'continue': {\n\t\tshortDescription: 'Skip to the next iteration of a loop',\n\t\tdescription: 'Within a `while` or `for` loop, `continue` skips the remaining commands in the current iteration and proceeds to the next iteration of the loop.',\n\t\targs: undefined\n\t},\n\t'else': {\n\t\tshortDescription: 'Execute commands if the previous condition was false',\n\t\tdescription: 'In an `if` block, the `else` section contains commands that execute if none of the preceding `if` or `else if` conditions were true.',\n\t\targs: undefined\n\t},\n\t'end': {\n\t\tshortDescription: 'Terminate a block of code',\n\t\tdescription: 'Conclude a block of code initiated by constructs like `if`, `switch`, `while`, `for`, or `function`.',\n\t\targs: undefined\n\t},\n\t'eval': {\n\t\tshortDescription: 'Execute arguments as a command',\n\t\tdescription: 'Concatenate all arguments into a single command and execute it. This allows for dynamic construction and execution of commands.',\n\t\targs: 'COMMAND...'\n\t},\n\t'false': {\n\t\tshortDescription: 'Return an unsuccessful result',\n\t\tdescription: 'A command that returns a non-zero exit status, indicating failure. It is often used in scripts to represent a false condition.',\n\t\targs: undefined\n\t},\n\t'realpath': {\n\t\tshortDescription: 'Resolve and print the absolute path',\n\t\tdescription: 'Convert each provided path to its absolute, canonical form by resolving symbolic links and relative path components.',\n\t\targs: 'PATH...'\n\t},\n\t':': {\n\t\tshortDescription: 'No operation command',\n\t\tdescription: 'The `:` command is a no-op (no operation) command that returns a successful (zero) exit status. It can be used as a placeholder in scripts where a command is syntactically required but no action is desired.',\n\t\targs: undefined\n\t},\n\t'test': {\n\t\tshortDescription: 'Evaluate conditional expressions',\n\t\tdescription: 'The `test` command evaluates conditional expressions and sets the exit status to 0 if the expression is true, and 1 if it is false. It supports various operators to evaluate expressions related to strings, numbers, and file attributes.',\n\t\targs: 'EXPRESSION'\n\t},\n\t'true': {\n\t\tshortDescription: 'Return a successful result',\n\t\tdescription: 'The `true` command always returns a successful (zero) exit status. It is often used in scripts and conditional statements where an unconditional success result is needed.',\n\t\targs: undefined\n\t},\n\t'printf': {\n\t\tshortDescription: 'Display formatted text',\n\t\tdescription: 'The `printf` command formats and prints text according to a specified format string. Unlike `echo`, `printf` does not append a newline unless explicitly included in the format.',\n\t\targs: 'FORMAT [ARGUMENT...]'\n\t}\n};\n\n\nasync function createCommandDescriptionsCache(): Promise<void> {\n\tconst cachedCommandDescriptions: Map<string, { shortDescription?: string; description: string; args: string | undefined }> = new Map();\n\n\ttry {\n\t\t// Get list of all builtins\n\t\tconst builtinsOutput = await execAsync('fish -c \"builtin -n\"').then(r => r.stdout.trim());\n\t\tconst builtins = builtinsOutput.split('\\n');\n\n\t\tconsole.log(`Found ${builtins.length} Fish builtin commands`);\n\n\t\tfor (const cmd of builtins) {\n\t\t\ttry {\n\t\t\t\t// Get help info for each builtin\n\t\t\t\tconst helpOutput = await execAsync(`fish -c \"${cmd} --help 2>&1\"`).then(r => r.stdout);\n\t\t\t\tlet set = false;\n\t\t\t\tif (helpOutput && !helpOutput.includes('No help for function') && !helpOutput.includes('See the web documentation')) {\n\t\t\t\t\tconst cleanHelpText = cleanupText(helpOutput);\n\n\t\t\t\t\t// Split the text into lines to process\n\t\t\t\t\tconst lines = cleanHelpText.split('\\n');\n\n\n\t\t\t\t\t// Extract the short description, args, and full description\n\t\t\t\t\tconst { shortDescription, args, description } = extractHelpContent(cmd, lines);\n\n\t\t\t\t\tcachedCommandDescriptions.set(cmd, {\n\t\t\t\t\t\tshortDescription,\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\targs\n\t\t\t\t\t});\n\t\t\t\t\tset = description !== '';\n\t\t\t\t}\n\t\t\t\tif (!set) {\n\t\t\t\t\t// Use fallback descriptions for commands that don't return proper help\n\t\t\t\t\tif (fallbackDescriptions[cmd]) {\n\t\t\t\t\t\tconsole.info(`Using fallback description for ${cmd}`);\n\t\t\t\t\t\tcachedCommandDescriptions.set(cmd, fallbackDescriptions[cmd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.info(`No fallback description exists for ${cmd}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Use fallback descriptions for commands that throw an error\n\t\t\t\tif (fallbackDescriptions[cmd]) {\n\t\t\t\t\tconsole.info('Using fallback description for', cmd);\n\t\t\t\t\tcachedCommandDescriptions.set(cmd, fallbackDescriptions[cmd]);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.info(`Error getting help for ${cmd}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error('Error creating Fish builtins cache:', e);\n\t\tprocess.exit(1);\n\t}\n\n\tfishBuiltinsCommandDescriptionsCache = cachedCommandDescriptions;\n}\n\n/**\n * Extracts short description, args, and full description from help text lines\n */\nfunction extractHelpContent(cmd: string, lines: string[]): { shortDescription: string; args: string | undefined; description: string } {\n\tlet shortDescription = '';\n\tlet args: string | undefined;\n\tlet description = '';\n\n\t// Skip the first line (usually just command name and basic usage)\n\tlet i = 1;\n\n\t// Skip any leading empty lines\n\twhile (i < lines.length && lines[i].trim().length === 0) {\n\t\ti++;\n\t}\n\n\t// The next non-empty line after the command name is typically\n\t// either the short description or additional usage info\n\tconst startLine = i;\n\n\t// Find where the short description starts\n\tif (i < lines.length) {\n\t\t// First, check if the line has a command prefix and remove it\n\t\tlet firstContentLine = lines[i].trim();\n\t\tconst cmdPrefixRegex = new RegExp(`^${cmd}\\\\s*-\\\\s*`, 'i');\n\t\tfirstContentLine = firstContentLine.replace(cmdPrefixRegex, '');\n\n\t\t// First non-empty line is the short description\n\t\tshortDescription = firstContentLine;\n\t\ti++;\n\n\t\t// Next non-empty line (after short description) is typically args\n\t\twhile (i < lines.length && lines[i].trim().length === 0) {\n\t\t\ti++;\n\t\t}\n\n\t\tif (i < lines.length) {\n\t\t\t// Found a line after the short description - that's our args\n\t\t\targs = lines[i].trim();\n\t\t\ti++;\n\t\t}\n\t}\n\n\t// Find the DESCRIPTION marker which marks the end of args section\n\tlet descriptionIndex = -1;\n\tfor (let j = i; j < lines.length; j++) {\n\t\tif (lines[j].trim() === 'DESCRIPTION') {\n\t\t\tdescriptionIndex = j;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// If DESCRIPTION marker is found, consider everything between i and descriptionIndex as part of args\n\tif (descriptionIndex > i) {\n\t\t// Combine lines from i up to (but not including) descriptionIndex\n\t\tconst additionalArgs = lines.slice(i, descriptionIndex).join('\\n').trim();\n\t\tif (additionalArgs) {\n\t\t\targs = args ? `${args}\\n${additionalArgs}` : additionalArgs;\n\t\t}\n\t\ti = descriptionIndex + 1; // Move past the DESCRIPTION line\n\t}\n\n\t// The rest is the full description (skipping any empty lines after args)\n\twhile (i < lines.length && lines[i].trim().length === 0) {\n\t\ti++;\n\t}\n\n\t// Combine the remaining lines into the full description\n\tdescription = lines.slice(Math.max(i, startLine)).join('\\n').trim();\n\n\t// If description is empty, use the short description\n\tif (!description && shortDescription) {\n\t\tdescription = shortDescription;\n\t}\n\n\t// Extract just the first sentence for short description\n\tconst firstPeriodIndex = shortDescription.indexOf('.');\n\tif (firstPeriodIndex > 0) {\n\t\tshortDescription = shortDescription.substring(0, firstPeriodIndex + 1).trim();\n\t} else if (shortDescription.length > 100) {\n\t\tshortDescription = shortDescription.substring(0, 100) + '...';\n\t}\n\n\treturn {\n\t\tshortDescription,\n\t\targs,\n\t\tdescription\n\t};\n}\n\nconst main = async () => {\n\ttry {\n\t\tawait createCommandDescriptionsCache();\n\t\tconsole.log('Created Fish command descriptions cache with', fishBuiltinsCommandDescriptionsCache.size, 'entries');\n\n\t\t// Save the cache to a TypeScript file\n\t\tconst cacheFilePath = path.join(__dirname, '../src/shell/fishBuiltinsCache.ts');\n\t\tconst cacheObject = Object.fromEntries(fishBuiltinsCommandDescriptionsCache);\n\t\tconst tsContent = `${copyright}\\n\\nexport const fishBuiltinsCommandDescriptionsCache = ${JSON.stringify(cacheObject, null, 2)} as const;`;\n\t\tawait fs.writeFile(cacheFilePath, tsContent, 'utf8');\n\t\tconsole.log('Saved Fish command descriptions cache to fishBuiltinsCache.ts with', Object.keys(cacheObject).length, 'entries');\n\t} catch (error) {\n\t\tconsole.error('Error:', error);\n\t}\n};\n\nmain();\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/pullZshBuiltins.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { checkWindows, execAsync, copyright } from './terminalScriptHelpers';\n\ncheckWindows();\n\nconst latestZshVersion = 5.9;\n\nconst shortDescriptions: Map<string, string> = new Map([\n\t['.', 'Source a file'],\n\t[':', 'No effect'],\n\t['alias', 'Define or view aliases'],\n\t['autoload', 'Autoload a function'],\n\t['bg', 'Put a job in the background'],\n\t['bindkey', 'Manipulate keymap names'],\n\t['break', 'Exit from a loop'],\n\t['builtin', 'Executes a builtin'],\n\t['bye', 'Exit the shell'],\n\t['cap', 'Manipulating POSIX capability sets'],\n\t['cd', 'Change the current directory'],\n\t['chdir', 'Change the current directory'],\n\t['clone', 'Clone shell onto another terminal'],\n\t['command', 'Execute a command'],\n\t['comparguments', 'Complete arguments'],\n\t['compcall', 'Complete call'],\n\t['compctl', 'Complete control'],\n\t['compdescribe', 'Complete describe'],\n\t['compfiles', 'Complete files'],\n\t['compgroups', 'Complete groups'],\n\t['compquote', 'Complete quote'],\n\t['comptags', 'Complete tags'],\n\t['comptry', 'Complete try'],\n\t['compvalues', 'Complete values'],\n\t['continue', 'Resume the next loop iteration'],\n\t['declare', 'Set or display parameter attributes/values'],\n\t['dirs', 'Interact with directory stack'],\n\t['disable', 'Disable shell features'],\n\t['disown', 'Remove job from job table'],\n\t['echo', 'Write on standard output'],\n\t['echotc', 'Echo terminal capabilities'],\n\t['echoti', 'Echo terminal info'],\n\t['emulate', 'Emulate a shell'],\n\t['enable', 'Enable shell features'],\n\t['eval', 'Execute arguments in shell'],\n\t['exec', 'Replace shell with command'],\n\t['exit', 'Exit the shell'],\n\t['export', 'Export to environment'],\n\t['false', 'Return exit status of 1'],\n\t['fc', 'Fix command'],\n\t['fg', 'Put a job in the foreground'],\n\t['float', 'Floating point arithmetic'],\n\t['functions', 'List functions'],\n\t['getcap', 'Get capabilities'],\n\t['getln', 'Get line from buffer'],\n\t['getopts', 'Parse positional parameters'],\n\t['hash', 'Remember command locations'],\n\t['history', 'Command history'],\n\t['integer', 'Integer arithmetic'],\n\t['jobs', 'List active jobs'],\n\t['kill', 'Send a signal to a process'],\n\t['let', 'Evaluate arithmetic expression'],\n\t['limit', 'Set or display resource limits'],\n\t['local', 'Create a local variable'],\n\t['logout', 'Exit the shell'],\n\t['noglob', 'Disable filename expansion'],\n\t['popd', 'Remove directory from stack'],\n\t['print', 'Print arguments'],\n\t['printf', 'Format and print data'],\n\t['pushd', 'Add directory to stack'],\n\t['pushln', 'Push arguments onto the buffer'],\n\t['pwd', 'Print working directory'],\n\t['r', 'Re-execute command'],\n\t['read', 'Read a line from input'],\n\t['readonly', 'Mark variables as read-only'],\n\t['rehash', 'Recompute command hash table'],\n\t['return', 'Return from a function'],\n\t['sched', 'Schedule commands'],\n\t['set', 'Set shell options'],\n\t['setcap', 'Set capabilities'],\n\t['setopt', 'Set shell options'],\n\t['shift', 'Shift positional parameters'],\n\t['source', 'Source a file'],\n\t['stat', 'Display file status'],\n\t['suspend', 'Suspend the shell'],\n\t['test', 'Evaluate a conditional expression'],\n\t['times', 'Display shell times'],\n\t['trap', 'Set signal handlers'],\n\t['true', 'Return exit status of 0'],\n\t['ttyctl', 'Control terminal attributes'],\n\t['type', 'Describe a command'],\n\t['typeset', 'Set or display parameter attributes/values'],\n\t['ulimit', 'Set or display resource limits'],\n\t['umask', 'Set file creation mask'],\n\t['unalias', 'Removes aliases'],\n\t['unfunction', 'Remove function definition'],\n\t['unhash', 'Remove command from hash table'],\n\t['unlimit', 'Remove resource limits'],\n\t['unset', 'Unset values and attributes of variables'],\n\t['unsetopt', 'Unset shell options'],\n\t['vared', 'Edit shell variables'],\n\t['wait', 'Wait for a process'],\n\t['whence', 'Locate a command'],\n\t['where', 'Locate a command'],\n\t['which', 'Locate a command'],\n\t['zcompile', 'Compile functions'],\n\t['zformat', 'Format strings'],\n\t['zftp', 'Zsh FTP client'],\n\t['zle', 'Zsh line editor'],\n\t['zmodload', 'Load a module'],\n\t['zparseopts', 'Parse options'],\n\t['zprof', 'Zsh profiler'],\n\t['zpty', 'Zsh pseudo terminal'],\n\t['zregexparse', 'Parse regex'],\n\t['zsocket', 'Zsh socket interface'],\n\t['zstyle', 'Define styles'],\n\t['ztcp', 'Manipulate TCP sockets'],\n]);\n\ninterface ICommandDetails {\n\tdescription: string;\n\targs: string | undefined;\n\tshortDescription?: string;\n}\n\nlet zshBuiltinsCommandDescriptionsCache = new Map<string, ICommandDetails>();\n\nasync function createCommandDescriptionsCache(): Promise<void> {\n\tconst cachedCommandDescriptions: Map<string, { shortDescription?: string; description: string; args: string | undefined }> = new Map();\n\tlet output = '';\n\tconst zshVersionOutput = await execAsync('zsh --version').then(r => r.stdout);\n\tconst zshVersionMatch = zshVersionOutput.match(/zsh (\\d+\\.\\d+)/);\n\tif (!zshVersionMatch) {\n\t\tconsole.error('\\x1b[31mFailed to determine zsh version\\x1b[0m');\n\t\tprocess.exit(1);\n\t}\n\tconst zshVersion = parseFloat(zshVersionMatch[1]);\n\tif (zshVersion < latestZshVersion) {\n\t\tconsole.error(`\\x1b[31mZsh version must be ${latestZshVersion} or higher\\x1b[0m`);\n\t\tprocess.exit(1);\n\t}\n\ttry {\n\t\toutput = await execAsync('pandoc --from man --to markdown --wrap=none < $(man -w zshbuiltins)').then(r => r.stdout);\n\t} catch {\n\t}\n\n\tconst commands: Map<string, string[]> = new Map();\n\tconst commandRegex = /^\\*\\*(?<command>[a-z\\.:]+)\\*\\*(?:\\s\\*.+\\*)?(?:\\s\\\\\\[.+\\\\\\])?$/;\n\tif (output) {\n\t\tconst lines = output.split('\\n');\n\t\tlet currentCommand: string | undefined;\n\t\tlet currentCommandStart = 0;\n\t\tlet seenOutput = false;\n\t\tlet i = 0;\n\t\tfor (; i < lines.length; i++) {\n\t\t\tif (!currentCommand || seenOutput) {\n\t\t\t\tconst match = lines[i].match(commandRegex);\n\t\t\t\tif (match?.groups?.command) {\n\t\t\t\t\tif (currentCommand) {\n\t\t\t\t\t\tcommands.set(currentCommand, lines.slice(currentCommandStart, i));\n\t\t\t\t\t}\n\t\t\t\t\tcurrentCommand = match.groups.command;\n\t\t\t\t\tcurrentCommandStart = i;\n\t\t\t\t\tseenOutput = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!currentCommand) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// There may be several examples of usage\n\t\t\tif (!seenOutput) {\n\t\t\t\tseenOutput = lines[i].length > 0 && !lines[i].match(commandRegex);\n\t\t\t}\n\t\t}\n\t\tif (currentCommand) {\n\t\t\tcommands.set(currentCommand, lines.slice(currentCommandStart, i - 1));\n\t\t}\n\t}\n\n\tif (commands.size === 0) {\n\t\tconsole.error('\\x1b[31mFailed to parse command descriptions\\x1b[30m');\n\t\tprocess.exit(1);\n\t}\n\n\tfor (const [command, lines] of commands) {\n\t\tconst shortDescription = shortDescriptions.get(command);\n\t\tlet argsEnd = 0;\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst line = lines[++argsEnd];\n\t\t\t\tif (line.trim().length > 0 && !line.match(commandRegex)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t\tconst formattedArgs = lines.slice(0, argsEnd - 1).join('\\n');\n\t\tconst args = (await execAsync(`pandoc --from markdown --to plain <<< \"${formattedArgs}\"`)).stdout.trim();\n\t\tconst description = lines.slice(argsEnd).map(e => formatLineAsMarkdown(e)).join('\\n').trim();\n\t\tif (shortDescription) {\n\t\t\tcachedCommandDescriptions.set(command, {\n\t\t\t\tshortDescription,\n\t\t\t\tdescription,\n\t\t\t\targs\n\t\t\t});\n\t\t} else {\n\t\t\tcachedCommandDescriptions.set(command, {\n\t\t\t\tdescription,\n\t\t\t\targs\n\t\t\t});\n\t\t}\n\t}\n\n\tzshBuiltinsCommandDescriptionsCache = cachedCommandDescriptions;\n}\n\nfunction formatLineAsMarkdown(text: string): string {\n\t// Detect any inline code blocks which use the form `code' (backtick, single quote) and convert\n\t// them to standard markdown `code` (backtick, backtick). This doesn't attempt to remove\n\t// formatting inside the code blocks. We probably need to use the original .troff format to do\n\t// this\n\tconst formattedText = text.replace(/\\\\`([^']+)\\\\'/g, '`$1`');\n\treturn formattedText;\n}\n\nconst main = async () => {\n\ttry {\n\t\tawait createCommandDescriptionsCache();\n\t\tconsole.log('created command descriptions cache with ', zshBuiltinsCommandDescriptionsCache.size, 'entries');\n\n\t\tconst missingShortDescription: string[] = [];\n\t\tfor (const [command, entry] of zshBuiltinsCommandDescriptionsCache.entries()) {\n\t\t\tif (entry.shortDescription === undefined) {\n\t\t\t\tmissingShortDescription.push(command);\n\t\t\t}\n\t\t}\n\t\tif (missingShortDescription.length > 0) {\n\t\t\tconsole.log('\\x1b[31mmissing short description for commands:\\n' + missingShortDescription.join('\\n') + '\\x1b[0m');\n\t\t}\n\n\t\t// Save the cache to a TypeScript file\n\t\tconst cacheFilePath = path.join(__dirname, '../src/shell/zshBuiltinsCache.ts');\n\t\tconst cacheObject = Object.fromEntries(zshBuiltinsCommandDescriptionsCache);\n\t\tconst tsContent = `${copyright}\\n\\nexport const zshBuiltinsCommandDescriptionsCache = ${JSON.stringify(cacheObject, null, 2)} as const;`;\n\t\tawait fs.writeFile(cacheFilePath, tsContent, 'utf8');\n\t\tconsole.log('saved command descriptions cache to zshBuiltinsCache.ts with ', Object.keys(cacheObject).length, 'entries');\n\t} catch (error) {\n\t\tconsole.error('Error:', error);\n\t}\n};\n\nmain();\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/terminalScriptHelpers.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { platform } from 'os';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nexport const execAsync = promisify(exec);\n\n/**\n * Cleans up text from terminal control sequences and formatting artifacts\n */\nexport function cleanupText(text: string): string {\n\t// Remove ANSI escape codes\n\tlet cleanedText = text.replace(/\\x1b\\[\\d+m/g, '');\n\n\t// Remove backspace sequences (like a\\bb which tries to print a, move back, print b)\n\t// This regex looks for a character followed by a backspace and another character\n\tconst backspaceRegex = /.\\x08./g;\n\twhile (backspaceRegex.test(cleanedText)) {\n\t\tcleanedText = cleanedText.replace(backspaceRegex, match => match.charAt(2));\n\t}\n\n\t// Remove any remaining backspaces and their preceding characters\n\tcleanedText = cleanedText.replace(/.\\x08/g, '');\n\n\t// Remove underscores that are used for formatting in some fish help output\n\tcleanedText = cleanedText.replace(/_\\b/g, '');\n\n\treturn cleanedText;\n}\n\n/**\n * Copyright notice for generated files\n */\nexport const copyright = `/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/`;\n\n/**\n * Checks if the script is running on Windows and exits if so\n */\nexport function checkWindows(): void {\n\tif (platform() === 'win32') {\n\t\tconsole.error('\\x1b[31mThis command is not supported on Windows\\x1b[0m');\n\t\tprocess.exit(1);\n\t}\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/update-specs.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// @ts-check\n\nconst fs = require('fs');\nconst path = require('path');\n\nconst upstreamSpecs = require('../out/constants.js').upstreamSpecs;\nconst extRoot = path.resolve(path.join(__dirname, '..'));\nconst replaceStrings = [\n\t[\n\t\t'import { filepaths } from \"@fig/autocomplete-generators\";',\n\t\t'import { filepaths } from \\'../../helpers/filepaths\\';'\n\t],\n];\nconst indentSearch = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1].map(e => new RegExp('^' + ' '.repeat(e * 2), 'gm'));\nconst indentReplaceValue = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1].map(e => '\\t'.repeat(e));\n\nconst specSpecificReplaceStrings = new Map([\n\t['git', [\n\t\t[\n\t\t\t'import { ai } from \"@fig/autocomplete-generators\";',\n\t\t\t'function ai(...args: any[]): undefined { return undefined; }'\n\t\t], [\n\t\t\t'prompt: async ({ executeCommand }) => {',\n\t\t\t'prompt: async ({ executeCommand }: any) => {'\n\t\t], [\n\t\t\t'message: async ({ executeCommand }) =>',\n\t\t\t'message: async ({ executeCommand }: any) =>'\n\t\t]\n\t]],\n]);\n\nfor (const spec of upstreamSpecs) {\n\tconst source = path.join(extRoot, `third_party/autocomplete/src/${spec}.ts`);\n\tconst destination = path.join(extRoot, `src/completions/upstream/${spec}.ts`);\n\tfs.copyFileSync(source, destination);\n\n\tlet content = fs.readFileSync(destination).toString();\n\tfor (const replaceString of replaceStrings) {\n\t\tcontent = content.replaceAll(replaceString[0], replaceString[1]);\n\t}\n\tfor (let i = 0; i < indentSearch.length; i++) {\n\t\tcontent = content.replaceAll(indentSearch[i], indentReplaceValue[i]);\n\t}\n\tconst thisSpecReplaceStrings = specSpecificReplaceStrings.get(spec);\n\tif (thisSpecReplaceStrings) {\n\t\tfor (const replaceString of thisSpecReplaceStrings) {\n\t\t\tcontent = content.replaceAll(replaceString[0], replaceString[1]);\n\t\t}\n\t}\n\n\tfs.writeFileSync(destination, content);\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/update-specs.ps1",
    "content": "node \"$PSScriptRoot/update-specs.js\"\n"
  },
  {
    "path": "extensions/terminal-suggest/scripts/update-specs.sh",
    "content": "node ./update-specs.js\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/cd.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst cdSpec: Fig.Spec = {\n\tname: 'cd',\n\tdescription: 'Change the shell working directory',\n\targs: {\n\t\tname: 'folder',\n\t\ttemplate: 'folders',\n\n\t\tsuggestions: [\n\t\t\t{\n\t\t\t\tname: '-',\n\t\t\t\tdescription: 'Switch to the last used folder',\n\t\t\t\thidden: true,\n\t\t\t},\n\t\t],\n\t}\n};\n\nexport default cdSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/code-insiders.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport code, { commonOptions, extensionManagementOptions, troubleshootingOptions } from './code';\n\nconst codeInsidersCompletionSpec: Fig.Spec = {\n\t...code,\n\tname: 'code-insiders',\n\tdescription: 'Visual Studio Code Insiders',\n\toptions: [\n\t\t...commonOptions,\n\t\t...extensionManagementOptions('code-insiders'),\n\t\t...troubleshootingOptions('code-insiders'),\n\t],\n};\n\nexport default codeInsidersCompletionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/code-tunnel-insiders.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { commonOptions, extensionManagementOptions, troubleshootingOptions, globalTunnelOptions, codeTunnelSubcommands, extTunnelSubcommand, codeTunnelOptions } from './code';\nimport codeTunnelCompletionSpec, { codeTunnelSpecOptions } from './code-tunnel';\n\nconst codeTunnelInsidersCompletionSpec: Fig.Spec = {\n\t...codeTunnelCompletionSpec,\n\tname: 'code-tunnel-insiders',\n\tdescription: 'Create a tunnel that\\'s accessible on vscode.dev from anywhere, with insider features.',\n\tsubcommands: [...codeTunnelSubcommands, extTunnelSubcommand],\n\toptions: [\n\t\t...commonOptions,\n\t\t...extensionManagementOptions('code-tunnel-insiders'),\n\t\t...troubleshootingOptions('code-tunnel-insiders'),\n\t\t...globalTunnelOptions,\n\t\t...codeTunnelOptions,\n\t\t...codeTunnelSpecOptions\n\t]\n};\n\nexport default codeTunnelInsidersCompletionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/code-tunnel.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport code, { codeTunnelSubcommands, commonOptions, extensionManagementOptions, troubleshootingOptions, globalTunnelOptions, extTunnelSubcommand, codeTunnelOptions } from './code';\n\n\nexport const codeTunnelSpecOptions: Fig.Option[] = [\n\t{\n\t\tname: '--cli-data-dir',\n\t\tdescription: 'Directory where CLI metadata should be stored',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'cli_data_dir',\n\t\t\tisOptional: true,\n\t\t},\n\t},\n\t{\n\t\tname: '--log-to-file',\n\t\tdescription: 'Log to a file in addition to stdout. Used when running as a service',\n\t\thidden: true,\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'log_to_file',\n\t\t\tisOptional: true,\n\t\t\ttemplate: 'filepaths',\n\t\t},\n\t},\n\t{\n\t\tname: '--log',\n\t\tdescription: 'Log level to use',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'log',\n\t\t\tisOptional: true,\n\t\t\tsuggestions: [\n\t\t\t\t'trace',\n\t\t\t\t'debug',\n\t\t\t\t'info',\n\t\t\t\t'warn',\n\t\t\t\t'error',\n\t\t\t\t'critical',\n\t\t\t\t'off',\n\t\t\t],\n\t\t},\n\t},\n\t{\n\t\tname: '--telemetry-level',\n\t\tdescription: 'Sets the initial telemetry level',\n\t\thidden: true,\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'telemetry_level',\n\t\t\tisOptional: true,\n\t\t\tsuggestions: [\n\t\t\t\t'off',\n\t\t\t\t'crash',\n\t\t\t\t'error',\n\t\t\t\t'all',\n\t\t\t],\n\t\t},\n\t},\n\t{\n\t\tname: '--verbose',\n\t\tdescription: 'Print verbose output (implies --wait)',\n\t},\n\t{\n\t\tname: '--disable-telemetry',\n\t\tdescription: 'Disable telemetry for the current command, even if it was previously accepted as part of the license prompt or specified in \\'--telemetry-level\\'',\n\t},\n\t{\n\t\tname: ['-h', '--help'],\n\t\tdescription: 'Print help',\n\t},\n];\n\nconst codeTunnelCompletionSpec: Fig.Spec = {\n\t...code,\n\tname: 'code-tunnel',\n\tdescription: 'Create a tunnel that\\'s accessible on vscode.dev from anywhere.',\n\tsubcommands: [\n\t\t...codeTunnelSubcommands,\n\t\textTunnelSubcommand\n\t],\n\toptions: [\n\t\t...commonOptions,\n\t\t...extensionManagementOptions('code-tunnel'),\n\t\t...troubleshootingOptions('code-tunnel'),\n\t\t...globalTunnelOptions,\n\t\t...codeTunnelOptions\n\t]\n};\n\nexport default codeTunnelCompletionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/code.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { filepaths } from '../helpers/filepaths';\n\nexport const commonOptions: Fig.Option[] = [\n\t{\n\t\tname: '-',\n\t\tdescription: `Read from stdin (e.g. 'ps aux | grep code | code -')`,\n\t},\n\t{\n\t\tname: ['-d', '--diff'],\n\t\tdescription: 'Compare two files with each other',\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: 'file',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'file',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: ['-m', '--merge'],\n\t\tdescription:\n\t\t\t'Perform a three-way merge by providing paths for two modified versions of a file, the common origin of both modified versions and the output file to save merge results',\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: 'path1',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'path2',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'base',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'result',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: ['-a', '--add'],\n\t\tdescription: 'Add folder(s) to the last active window',\n\t\targs: {\n\t\t\tname: 'folder',\n\t\t\ttemplate: 'folders',\n\t\t\tisVariadic: true,\n\t\t},\n\t},\n\t{\n\t\tname: ['-g', '--goto'],\n\t\tdescription:\n\t\t\t'Open a file at the path on the specified line and character position',\n\t\targs: {\n\t\t\tname: 'file:line[:character]',\n\t\t\ttemplate: 'filepaths',\n\t\t},\n\t},\n\t{\n\t\tname: ['-n', '--new-window'],\n\t\tdescription: 'Force to open a new window',\n\t},\n\t{\n\t\tname: ['-r', '--reuse-window'],\n\t\tdescription: 'Force to open a file or folder in an already opened window',\n\t},\n\t{\n\t\tname: ['-w', '--wait'],\n\t\tdescription: 'Wait for the files to be closed before returning',\n\t},\n\t{\n\t\tname: '--locale',\n\t\tdescription: 'The locale to use (e.g. en-US or zh-TW)',\n\t\targs: {\n\t\t\tname: 'locale',\n\t\t\tsuggestions: [\n\t\t\t\t// Supported locales: https://code.visualstudio.com/docs/getstarted/locales#_available-locales\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'en', icon: '🇺🇸', description: 'English (US)' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'zh-CN', icon: '🇨🇳', description: 'Simplified Chinese' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'zh-TW', icon: '🇹🇼', description: 'Traditional Chinese' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'fr', icon: '🇫🇷', description: 'French' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'de', icon: '🇩🇪', description: 'German' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'it', icon: '🇮🇹', description: 'Italian' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'es', icon: '🇪🇸', description: 'Spanish' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'ja', icon: '🇯🇵', description: 'Japanese' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'ko', icon: '🇰🇷', description: 'Korean' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'ru', icon: '🇷🇺', description: 'Russian' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'bg', icon: '🇧🇬', description: 'Bulgarian' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'hu', icon: '🇭🇺', description: 'Hungarian' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'pt-br', icon: '🇧🇷', description: 'Portuguese (Brazil)' },\n\t\t\t\t// allow-any-unicode-next-line\n\t\t\t\t{ name: 'tr', icon: '🇹🇷', description: 'Turkish' },\n\t\t\t],\n\t\t},\n\t},\n\t{\n\t\tname: '--user-data-dir',\n\t\tdescription:\n\t\t\t'Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code',\n\t\targs: {\n\t\t\tname: 'dir',\n\t\t\ttemplate: 'folders',\n\t\t},\n\t},\n\t{\n\t\tname: '--profile',\n\t\tdescription:\n\t\t\t'Opens the provided folder or workspace with the given profile and associates the profile with the workspace. If the profile does not exist, a new empty one is created. A folder or workspace must be provided for the profile to take effect',\n\t\targs: {\n\t\t\tname: 'settingsProfileName',\n\t\t},\n\t},\n\t{\n\t\tname: ['-h', '--help'],\n\t\tdescription: 'Print usage',\n\t},\n\t{\n\t\tname: '--locate-shell-integration-path',\n\t\tdescription:\n\t\t\t'Print the path to the shell integration script for the provided shell',\n\t\targs: {\n\t\t\tisOptional: false,\n\t\t\tname: 'shell',\n\t\t\tdescription: 'The shell to locate the integration script for',\n\t\t\tsuggestions: [\n\t\t\t\t'bash',\n\t\t\t\t'fish',\n\t\t\t\t'pwsh',\n\t\t\t\t'zsh',\n\t\t\t]\n\t\t}\n\t}\n];\n\nexport const extensionManagementOptions = (cliName: string): Fig.Option[] => [\n\t{\n\t\tname: '--extensions-dir',\n\t\tdescription: 'Set the root path for extensions',\n\t\targs: {\n\t\t\tname: 'dir',\n\t\t\ttemplate: 'folders',\n\t\t},\n\t},\n\t{\n\t\tname: '--list-extensions',\n\t\tdescription: 'List the installed extensions',\n\t},\n\t{\n\t\tname: '--show-versions',\n\t\tdescription:\n\t\t\t'Show versions of installed extensions, when using --list-extensions',\n\t},\n\t{\n\t\tname: '--category',\n\t\tdescription:\n\t\t\t'Filters installed extensions by provided category, when using --list-extensions',\n\t\targs: {\n\t\t\tname: 'category',\n\t\t\tsuggestions: [\n\t\t\t\t'azure',\n\t\t\t\t'data science',\n\t\t\t\t'debuggers',\n\t\t\t\t'extension packs',\n\t\t\t\t'education',\n\t\t\t\t'formatters',\n\t\t\t\t'keymaps',\n\t\t\t\t'language packs',\n\t\t\t\t'linters',\n\t\t\t\t'machine learning',\n\t\t\t\t'notebooks',\n\t\t\t\t'programming languages',\n\t\t\t\t'scm providers',\n\t\t\t\t'snippets',\n\t\t\t\t'testing',\n\t\t\t\t'themes',\n\t\t\t\t'visualization',\n\t\t\t\t'other',\n\t\t\t],\n\t\t},\n\t},\n\t{\n\t\tname: '--install-extension',\n\t\tdescription:\n\t\t\t`Installs or updates an extension. The argument is either an extension id or a path to a VSIX. The identifier of an extension is '\\${ publisher }.\\${ name }'. Use '--force' argument to update to latest version. To install a specific version provide '@\\${version}'. For example: 'vscode.csharp@1.2.3'`,\n\t\targs: {\n\t\t\tname: 'extension-id[@version] | path-to-vsix',\n\t\t\tgenerators: [\n\t\t\t\tcreateCodeGenerators(cliName),\n\t\t\t\tfilepaths({\n\t\t\t\t\textensions: ['vsix'],\n\t\t\t\t}),\n\t\t\t],\n\t\t},\n\t},\n\t{\n\t\tname: '--pre-release',\n\t\tdescription:\n\t\t\t'Installs the pre-release version of the extension, when using --install-extension',\n\t},\n\t{\n\t\tname: '--uninstall-extension',\n\t\tdescription: 'Uninstalls an extension',\n\t\targs: {\n\t\t\tname: 'extension-id',\n\t\t\tgenerators: createCodeGenerators(cliName)\n\t\t},\n\t},\n\t{\n\t\tname: '--enable-proposed-api',\n\t\tdescription:\n\t\t\t'Enables proposed API features for extensions. Can receive one or more extension IDs to enable individually',\n\t},\n];\n\nexport const troubleshootingOptions = (cliName: string): Fig.Option[] => [\n\t{\n\t\tname: ['-v', '--version'],\n\t\tdescription: 'Print version',\n\t},\n\t{\n\t\tname: '--verbose',\n\t\tdescription: 'Print verbose output (implies --wait)',\n\t},\n\t{\n\t\tname: '--log',\n\t\tdescription: `Log level to use. Default is 'info' when unspecified`,\n\t\targs: {\n\t\t\tname: 'level',\n\t\t\tdefault: 'info',\n\t\t\tsuggestions: [\n\t\t\t\t'critical',\n\t\t\t\t'error',\n\t\t\t\t'warn',\n\t\t\t\t'info',\n\t\t\t\t'debug',\n\t\t\t\t'trace',\n\t\t\t\t'off',\n\t\t\t],\n\t\t},\n\t},\n\t{\n\t\tname: ['-s', '--status'],\n\t\tdescription: 'Print process usage and diagnostics information',\n\t},\n\t{\n\t\tname: '--prof-startup',\n\t\tdescription: 'Run CPU profiler during startup',\n\t},\n\t{\n\t\tname: '--disable-extensions',\n\t\tdescription: 'Disable all installed extensions',\n\t},\n\t{\n\t\tname: '--disable-extension',\n\t\tdescription: 'Disable an extension',\n\t\targs: {\n\t\t\tname: 'extension-id',\n\t\t\tgenerators: createCodeGenerators(cliName)\n\t\t},\n\t},\n\t{\n\t\tname: '--sync',\n\t\tdescription: 'Turn sync on or off',\n\t\targs: {\n\t\t\tname: 'sync',\n\t\t\tdescription: 'Whether to enable sync',\n\t\t\tsuggestions: ['on', 'off'],\n\t\t},\n\t},\n\t{\n\t\tname: '--inspect-extensions',\n\t\tdescription:\n\t\t\t'Allow debugging and profiling of extensions. Check the developer tools for the connection URI',\n\t\targs: {\n\t\t\tname: 'port',\n\t\t},\n\t},\n\t{\n\t\tname: '--inspect-brk-extensions',\n\t\tdescription:\n\t\t\t'Allow debugging and profiling of extensions with the extension host being paused after start. Check the developer tools for the connection URI',\n\t\targs: {\n\t\t\tname: 'port',\n\t\t},\n\t},\n\t{\n\t\tname: '--disable-gpu',\n\t\tdescription: 'Disable GPU hardware acceleration',\n\t},\n\t{\n\t\tname: '--max-memory',\n\t\tdescription: 'Max memory size for a window (in Mbytes)',\n\t\targs: {\n\t\t\tname: 'memory',\n\t\t\tdescription: 'Memory in megabytes',\n\t\t},\n\t},\n\t{\n\t\tname: '--telemetry',\n\t\tdescription: 'Shows all telemetry events which VS code collects',\n\t},\n];\n\nexport function createCodeGenerators(cliName: string): Fig.Generator {\n\treturn {\n\t\tscript: [cliName, '--list-extensions', '--show-versions'],\n\t\tpostProcess: parseInstalledExtensions\n\t};\n}\n\nexport function parseInstalledExtensions(out: string): Fig.Suggestion[] | undefined {\n\tconst extensions = out.split('\\n').filter(Boolean).map((line) => {\n\t\tconst [id, version] = line.split('@');\n\t\treturn {\n\t\t\tname: id,\n\t\t\ttype: 'option' as Fig.SuggestionType,\n\t\t\tdescription: `Version: ${version}`\n\t\t};\n\t});\n\treturn extensions;\n}\n\nexport const commonAuthOptions: Fig.Option[] = [\n\t{\n\t\tname: '--access-token',\n\t\tdescription: 'An access token to store for authentication',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'access_token',\n\t\t\tisOptional: true,\n\t\t},\n\t},\n\t{\n\t\tname: '--refresh-token',\n\t\tdescription: 'An access token to store for authentication',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'refresh_token',\n\t\t\tisOptional: true,\n\t\t},\n\t},\n\t{\n\t\tname: '--provider',\n\t\tdescription: 'The auth provider to use. If not provided, a prompt will be shown',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'provider',\n\t\t\tisOptional: true,\n\t\t\tsuggestions: [\n\t\t\t\t'microsoft',\n\t\t\t\t'github',\n\t\t\t],\n\t\t},\n\t}\n];\n\nexport const tunnelHelpOptions: Fig.Option[] = [\n\t{\n\t\tname: ['-h', '--help'],\n\t\tdescription: 'Print help',\n\t},\n];\n\nexport const globalTunnelOptions: Fig.Option[] = [\n\t{\n\t\tname: '--cli-data-dir',\n\t\tdescription: 'Directory where CLI metadata should be stored',\n\t\targs: {\n\t\t\tname: 'cli_data_dir',\n\t\t},\n\t},\n\t{\n\t\tname: '--verbose',\n\t\tdescription: 'Print verbose output (implies --wait)',\n\t},\n\t{\n\t\tname: '--log',\n\t\tdescription: 'Log level to use',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'log',\n\t\t\tisOptional: true,\n\t\t\tsuggestions: [\n\t\t\t\t'trace',\n\t\t\t\t'debug',\n\t\t\t\t'info',\n\t\t\t\t'warn',\n\t\t\t\t'error',\n\t\t\t\t'critical',\n\t\t\t\t'off',\n\t\t\t],\n\t\t},\n\t},\n];\n\n\nexport const codeTunnelOptions = [\n\t{\n\t\tname: '--extensions-dir',\n\t\tdescription: 'Set the root path for extensions',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'extensions_dir',\n\t\t\tisOptional: true,\n\t\t},\n\t},\n\t{\n\t\tname: '--user-data-dir',\n\t\tdescription: 'Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of the editor',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'user_data_dir',\n\t\t\tisOptional: true,\n\t\t},\n\t},\n\t{\n\t\tname: '--use-version',\n\t\tdescription: 'Sets the editor version to use for this command. The preferred version can be persisted with `code version use <version>`. Can be \\'stable\\', \\'insiders\\', a version number, or an absolute path to an existing install',\n\t\tisRepeatable: true,\n\t\targs: {\n\t\t\tname: 'use_version',\n\t\t\tisOptional: true,\n\t\t},\n\t},\n];\n\nexport const extTunnelSubcommand = {\n\tname: 'ext',\n\tdescription: 'Manage editor extensions',\n\tsubcommands: [\n\t\t{\n\t\t\tname: 'list',\n\t\t\tdescription: 'List installed extensions',\n\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions,\n\t\t\t{\n\t\t\t\tname: '--category',\n\t\t\t\tdescription: 'Filters installed extensions by provided category, when using --list-extensions',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'category',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--show-versions',\n\t\t\t\tdescription: 'Show versions of installed extensions, when using --list-extensions',\n\t\t\t},\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tname: 'install',\n\t\t\tdescription: 'Install an extension',\n\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions,\n\t\t\t{\n\t\t\t\tname: '--pre-release',\n\t\t\t\tdescription: 'Installs the pre-release version of the extension',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--donot-include-pack-and-dependencies',\n\t\t\t\tdescription: `Don't include installing pack and dependencies of the extension`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--force',\n\t\t\t\tdescription: `Update to the latest version of the extension if it's already installed`,\n\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: 'ext-id | id',\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: 'uninstall',\n\t\t\tdescription: 'Uninstall an extension',\n\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\targs: {\n\t\t\t\tname: 'ext-id | id',\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: 'update',\n\t\t\tdescription: 'Update the installed extensions',\n\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions]\n\t\t},\n\t],\n\t...globalTunnelOptions,\n\t...codeTunnelOptions\n};\n\n\nexport const codeTunnelSubcommands = [\n\t{\n\t\tname: 'tunnel',\n\t\tdescription: 'Create a tunnel that\\'s accessible on vscode.dev from anywhere. Run`code tunnel --help` for more usage info',\n\t\tsubcommands: [\n\t\t\t{\n\t\t\t\tname: 'prune',\n\t\t\t\tdescription: 'Delete all servers which are currently not running',\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'kill',\n\t\t\t\tdescription: 'Stops any running tunnel on the system',\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'restart',\n\t\t\t\tdescription: 'Restarts any running tunnel on the system',\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'status',\n\t\t\t\tdescription: 'Gets whether there is a tunnel running on the current machine',\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'rename',\n\t\t\t\tdescription: 'Rename the name of this machine associated with port forwarding service',\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t\targs: {\n\t\t\t\t\tname: 'name',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'status',\n\t\t\t\tdescription: 'Print process usage and diagnostics information',\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'unregister',\n\t\t\t\tdescription: 'Remove this machine\\'s association with the port forwarding service',\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'user',\n\t\t\t\tsubcommands: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'login',\n\t\t\t\t\t\tdescription: 'Log in to port forwarding service',\n\t\t\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions, ...commonAuthOptions],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'logout',\n\t\t\t\t\t\tdescription: 'Log out of port forwarding service',\n\t\t\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'show',\n\t\t\t\t\t\tdescription: 'Show the account that\\'s logged into port forwarding service',\n\t\t\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'help',\n\t\t\t\t\t\tdescription: 'Print this message or the help of the given subcommand(s)',\n\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t{ name: 'login', description: 'Log in to port forwarding service' },\n\t\t\t\t\t\t\t{ name: 'logout', description: 'Log out of port forwarding service' },\n\t\t\t\t\t\t\t{ name: 'show', description: 'Show the account that\\'s logged into port forwarding service' },\n\t\t\t\t\t\t\t{ name: 'help', description: 'Print this message or the help of the given subcommand(s)' },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'service',\n\t\t\t\tdescription: '(Preview) Manages the tunnel when installed as a system service,',\n\t\t\t\tsubcommands: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'install',\n\t\t\t\t\t\tdescription: 'Installs or re-installs the tunnel service on the machine',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: '--name',\n\t\t\t\t\t\t\t\tdescription: 'Sets the machine name for port forwarding service',\n\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: 'name',\n\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: '--accept-server-license-terms',\n\t\t\t\t\t\t\t\tdescription: 'If set, the user accepts the server license terms and the server will be started without a user prompt',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t...globalTunnelOptions, ...tunnelHelpOptions\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'uninstall',\n\t\t\t\t\t\tdescription: 'Uninstalls and stops the tunnel service',\n\t\t\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'log',\n\t\t\t\t\t\tdescription: 'Shows logs for the running service',\n\t\t\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'help',\n\t\t\t\t\t\tdescription: 'Print this message or the help of the given subcommand(s)',\n\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t{ name: 'install', description: 'Installs or re-installs the tunnel service on the machine' },\n\t\t\t\t\t\t\t{ name: 'uninstall', description: 'Uninstalls and stops the tunnel service' },\n\t\t\t\t\t\t\t{ name: 'log', description: 'Shows logs for the running service' },\n\t\t\t\t\t\t\t{ name: 'help', description: 'Print this message or the help of the given subcommand(s)' },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\toptions: [...globalTunnelOptions, ...tunnelHelpOptions],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'help',\n\t\t\t\tdescription: 'Print this message or the help of the given subcommand(s)',\n\t\t\t\tsubcommands: [\n\t\t\t\t\t{ name: 'prune', description: 'Delete all servers which are currently not running' },\n\t\t\t\t\t{ name: 'kill', description: 'Stops any running tunnel on the system' },\n\t\t\t\t\t{ name: 'restart', description: 'Restarts any running tunnel on the system' },\n\t\t\t\t\t{ name: 'status', description: 'Gets whether there is a tunnel running on the current machine' },\n\t\t\t\t\t{ name: 'rename', description: 'Rename the name of this machine associated with port forwarding service' },\n\t\t\t\t\t{ name: 'unregister', description: 'Remove this machine\\'s association with the port forwarding service' },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'user',\n\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t{ name: 'login', description: 'Log in to port forwarding service' },\n\t\t\t\t\t\t\t{ name: 'logout', description: 'Log out of port forwarding service' },\n\t\t\t\t\t\t\t{ name: 'show', description: 'Show the account that\\'s logged into port forwarding service' },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'service',\n\t\t\t\t\t\tdescription: '(Preview) Manages the tunnel when installed as a system service,',\n\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t{ name: 'install', description: 'Installs or re-installs the tunnel service on the machine' },\n\t\t\t\t\t\t\t{ name: 'uninstall', description: 'Uninstalls and stops the tunnel service' },\n\t\t\t\t\t\t\t{ name: 'log', description: 'Shows logs for the running service' },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: 'help', description: 'Print this message or the help of the given subcommand(s)' },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: '--install-extension',\n\t\t\t\tdescription: 'Requests that extensions be preloaded and installed on connecting servers',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'install_extension',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--server-data-dir',\n\t\t\t\tdescription: 'Specifies the directory that server data is kept in',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'server_data_dir',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--extensions-dir',\n\t\t\t\tdescription: 'Set the root path for extensions',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'extensions_dir',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--user-data-dir',\n\t\t\t\tdescription: 'Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of the editor',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'user_data_dir',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--use-version',\n\t\t\t\tdescription: 'Sets the editor version to use for this command. The preferred version can be persisted with `code version use <version>`. Can be \\'stable\\', \\'insiders\\', a version number, or an absolute path to an existing install',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'use_version',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--random-name',\n\t\t\t\tdescription: 'Randomly name machine for port forwarding service',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--no-sleep',\n\t\t\t\tdescription: 'Prevents the machine going to sleep while this command runs',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--accept-server-license-terms',\n\t\t\t\tdescription: 'If set, the user accepts the server license terms and the server will be started without a user prompt',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--name',\n\t\t\t\tdescription: 'Sets the machine name for port forwarding service',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'name',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: ['-h', '--help'],\n\t\t\t\tdescription: 'Print help',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--log',\n\t\t\t\tdescription: 'Log level to use',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'log',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t'trace',\n\t\t\t\t\t\t'debug',\n\t\t\t\t\t\t'info',\n\t\t\t\t\t\t'warn',\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\t'critical',\n\t\t\t\t\t\t'off',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--verbose',\n\t\t\t\tdescription: 'Print verbose output (implies --wait)',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--cli-data-dir',\n\t\t\t\tdescription: 'Directory where CLI metadata should be stored',\n\t\t\t\targs: {\n\t\t\t\t\tname: 'cli_data_dir',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: 'status',\n\t\tdescription: 'Print process usage and diagnostics information',\n\t},\n\t{\n\t\tname: 'version',\n\t\tdescription: `Changes the version of the editor you're using`,\n\t\toptions: globalTunnelOptions\n\t},\n\t{\n\t\tname: 'serve-web',\n\t\tdescription: 'Runs a local web version of Code - OSS',\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: '--host',\n\t\t\t\tdescription: 'Host to listen on, defaults to \\'localhost\\'',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'host',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--socket-path',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'socket_path',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--port',\n\t\t\t\tdescription: 'Port to listen on. If 0 is passed a random free port is picked',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'port',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--connection-token',\n\t\t\t\tdescription: 'A secret that must be included with all requests',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'connection_token',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--connection-token-file',\n\t\t\t\tdescription: 'A file containing a secret that must be included with all requests',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'connection_token_file',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--server-base-path',\n\t\t\t\tdescription: 'Specifies the path under which the web UI and the code server is provided',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'server_base_path',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--server-data-dir',\n\t\t\t\tdescription: 'Specifies the directory that server data is kept in',\n\t\t\t\tisRepeatable: true,\n\t\t\t\targs: {\n\t\t\t\t\tname: 'server_data_dir',\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--without-connection-token',\n\t\t\t\tdescription: 'Run without a connection token. Only use this if the connection is secured by other means',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '--accept-server-license-terms',\n\t\t\t\tdescription: 'If set, the user accepts the server license terms and the server will be started without a user prompt',\n\t\t\t},\n\t\t\t...globalTunnelOptions, ...tunnelHelpOptions,\n\t\t]\n\t},\n\t{\n\t\tname: 'help',\n\t\tdescription: 'Print this message or the help of the given subcommand(s)',\n\t\tsubcommands: [\n\t\t\t{\n\t\t\t\tname: 'tunnel',\n\t\t\t\tdescription: 'Create a tunnel that\\'s accessible on vscode.dev from anywhere. Run`code tunnel --help` for more usage info',\n\t\t\t\tsubcommands: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'prune',\n\t\t\t\t\t\tdescription: 'Delete all servers which are currently not running',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'kill',\n\t\t\t\t\t\tdescription: 'Stops any running tunnel on the system',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'restart',\n\t\t\t\t\t\tdescription: 'Restarts any running tunnel on the system',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'status',\n\t\t\t\t\t\tdescription: 'Gets whether there is a tunnel running on the current machine',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rename',\n\t\t\t\t\t\tdescription: 'Rename the name of this machine associated with port forwarding service',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'unregister',\n\t\t\t\t\t\tdescription: `Remove this machine's association with the port forwarding service`,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'user',\n\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'login',\n\t\t\t\t\t\t\t\tdescription: 'Log in to port forwarding service',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'logout',\n\t\t\t\t\t\t\t\tdescription: 'Log out of port forwarding service',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'show',\n\t\t\t\t\t\t\t\tdescription: 'Show the account that\\'s logged into port forwarding service',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'service',\n\t\t\t\t\t\tdescription: '(Preview) Manages the tunnel when installed as a system service,',\n\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'install',\n\t\t\t\t\t\t\t\tdescription: 'Installs or re-installs the tunnel service on the machine',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'uninstall',\n\t\t\t\t\t\t\t\tdescription: 'Uninstalls and stops the tunnel service',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'log',\n\t\t\t\t\t\t\t\tdescription: 'Shows logs for the running service',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t},\n\t\t\textTunnelSubcommand,\n\t\t\t{\n\t\t\t\tname: 'status',\n\t\t\t\tdescription: 'Print process usage and diagnostics information',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'version',\n\t\t\t\tdescription: `Changes the version of the editor you're using`,\n\t\t\t\tsubcommands: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'use',\n\t\t\t\t\t\tdescription: 'Switches the version of the editor in use',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'show',\n\t\t\t\t\t\tdescription: 'Shows the currently configured editor version',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'serve-web',\n\t\t\t\tdescription: 'Runs a local web version of Code - OSS',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'command-shell',\n\t\t\t\tdescription: 'Runs the control server on process stdin/stdout',\n\t\t\t\thidden: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'update',\n\t\t\t\tdescription: 'Updates the CLI',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'help',\n\t\t\t\tdescription: 'Print this message or the help of the given subcommand(s)',\n\t\t\t},\n\t\t],\n\t},\n];\n\nconst codeCompletionSpec: Fig.Spec = {\n\tname: 'code',\n\tdescription: 'Visual Studio Code',\n\targs: {\n\t\ttemplate: ['filepaths', 'folders'],\n\t\tisVariadic: true,\n\t},\n\tsubcommands: codeTunnelSubcommands,\n\toptions: [\n\t\t...commonOptions,\n\t\t...extensionManagementOptions('code'),\n\t\t...troubleshootingOptions('code'),\n\t],\n};\n\nexport default codeCompletionSpec;\n\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/index.d.ts",
    "content": "/* eslint-disable @typescript-eslint/ban-types */\ndeclare namespace Fig {\n\t/**\n\t * Templates are generators prebuilt by Fig.\n\t * @remarks\n\t * Here are the three templates:\n\t * - filepaths: show folders and filepaths. Allow autoexecute on filepaths\n\t * - folders: show folders only. Allow autoexecute on folders\n\t * - history: show suggestions for all items in history matching this pattern\n\t * - help: show subcommands. Only includes the 'siblings' of the nearest 'parent' subcommand\n\t */\n\ttype TemplateStrings = \"filepaths\" | \"folders\" | \"history\" | \"help\";\n\n\t/**\n\t * A template which is a single TemplateString or an array of TemplateStrings\n\t *\n\t * @remarks\n\t * Templates are generators prebuilt by Fig. Here are the three templates:\n\t * - filepaths: show folders and filepaths. Allow autoexecute on filepaths\n\t * - folders: show folders only. Allow autoexecute on folders\n\t * - history: show suggestions for all items in history matching this pattern\n\t * - help: show subcommands. Only includes the 'siblings' of the nearest 'parent' subcommand\n\t *\n\t * @example\n\t * `cd` uses the \"folders\" template\n\t * `ls` used  [\"filepaths\", \"folders\"]. Why both? Because if I `ls` a directory, we want to enable a user to autoexecute on this directory. If we just did \"filepaths\" they couldn't autoexecute.\n\t *\n\t */\n\ttype Template = TemplateStrings | TemplateStrings[];\n\n\ttype HistoryContext = {\n\t\tcurrentWorkingDirectory: string;\n\t\ttime: number;\n\t\texitCode: number;\n\t\tshell: string;\n\t};\n\n\ttype TemplateSuggestionContext =\n\t\t| { templateType: \"filepaths\" }\n\t\t| { templateType: \"folders\" }\n\t\t| { templateType: \"help\" }\n\t\t| ({ templateType: \"history\" } & Partial<HistoryContext>);\n\n\ttype TemplateSuggestion = Modify<\n\t\tSuggestion,\n\t\t{ name?: string; context: TemplateSuggestionContext }\n\t>;\n\n\t/**\n\t *\n\t * The SpecLocation object defines well... the location of the completion spec we want to load.\n\t * Specs can be \"global\" (ie hosted by Fig's cloud) or \"local\" (ie stored on your local machine)\n\t *\n\t * @remarks\n\t * **The `SpecLocation` Object**\n\t *\n\t * The SpecLocation object defines well... the location of the completion spec we want to load.\n\t * Specs can be \"global\" (ie hosted by Fig's cloud) or \"local\" (ie stored on your local machine).\n\t *\n\t * - Global `SpecLocation`:\n\t * Load specs hosted in Fig's Cloud. Assume the current working directory is here: https://github.com/withfig/autocomplete/tree/master/src. Now set the value for the \"name\" prop to the relative location of your spec (without the .js file extension)\n\t * ```js\n\t * // e.g.\n\t * { type: \"global\", name: \"aws/s3\" } // Loads up the aws s3 completion spec\n\t * { type: \"global\", name: \"python/http.server\" } // Loads up the http.server completion spec\n\t * ```\n\t *\n\t * - Local `SpecLocation`:\n\t * Load specs saved on your local system / machine. Assume the current working directory is the user's current working directory.\n\t * The `name` prop should take the name of the spec (without the .js file extension) e.g. my_cli_tool\n\t * The `path` prop should take an absolute path OR a relative path (relative to the user's current working directory). The path should be to the directory that contains the `.fig` folder. Fig will then assume your spec is located in `.fig/autocomplete/build/`\n\t * ```js\n\t * // e.g.\n\t * { type: \"global\", path: \"node_modules/cowsay\", name: \"cowsay_cli\" }  // will look for `cwd/node_modules/cowsay/.fig/autocomplete/build/cowsay_cli.js`\n\t * { type: \"global\", path: \"~\", name: \"my_cli\" }  // will look for `~/.fig/autocomplete/build/my_cli.js`\n\t * ```\n\t * @irreplaceable\n\t */\n\ttype SpecLocation =\n\t\t| { type: \"local\"; path?: string; name: string }\n\t\t| { type: \"global\"; name: string };\n\n\t/**\n\t * Dynamically load up another completion spec at runtime.\n\t *\n\t * See [`loadSpec` property in Subcommand Object](https://fig.io/docs/reference/subcommand#loadspec).\n\t */\n\ttype LoadSpec =\n\t\t| string\n\t\t| Subcommand\n\t\t| ((\n\t\t\ttoken: string,\n\t\t\texecuteCommand: ExecuteCommandFunction\n\t\t) => Promise<SpecLocation | SpecLocation[] | Subcommand>);\n\n\t/**\n\t * The type of a suggestion object.\n\t * @remarks\n\t * The type determines:\n\t * - the default icon Fig uses (e.g. a file or folder searches for the system icon, a subcommand has a specific icon etc)\n\t * - whether we allow users to auto-execute a command\n\t */\n\ttype SuggestionType =\n\t\t| \"folder\"\n\t\t| \"file\"\n\t\t| \"arg\"\n\t\t| \"subcommand\"\n\t\t| \"option\"\n\t\t| \"special\"\n\t\t| \"mixin\"\n\t\t| \"shortcut\";\n\n\t/**\n\t * A single object of type `T` or an array of objects of type `T`.\n\t */\n\ttype SingleOrArray<T> = T | T[];\n\n\t/**\n\t * An async function that returns the version of a given CLI tool.\n\t * @remarks\n\t * This is used in completion specs that want to version themselves the same way CLI tools are versioned. See fig.io/docs\n\t *\n\t * @param executeCommand -an async function that allows you to execute a shell command on the user's system and get the output as a string.\n\t * @returns The version of a CLI tool\n\t *\n\t * @example\n\t * `1.0.22`\n\t *\n\t * @example\n\t * `v26`\n\t *\n\t */\n\ttype GetVersionCommand = (executeCommand: ExecuteCommandFunction) => Promise<string>;\n\n\t/**\n\t * Context about a current shell session.\n\t */\n\ttype ShellContext = {\n\t\t/**\n\t\t * The current directory the shell is in\n\t\t */\n\t\tcurrentWorkingDirectory: string;\n\t\t/**\n\t\t * Exported environment variables from the shell\n\t\t */\n\t\tenvironmentVariables: Record<string, string>;\n\t\t/**\n\t\t * The name of the current process\n\t\t */\n\t\tcurrentProcess: string;\n\t\t/**\n\t\t * @hidden\n\t\t * @deprecated\n\t\t */\n\t\tsshPrefix: string;\n\t};\n\n\ttype GeneratorContext = ShellContext & {\n\t\tisDangerous?: boolean;\n\t\tsearchTerm: string;\n\t};\n\n\t/**\n\t * A function which can have a `T` argument and a `R` result.\n\t * @param param - A param of type `R`\n\t * @returns Something of type `R`\n\t */\n\ttype Function<T = void, R = void> = (param: T) => R;\n\n\t/**\n\t * A utility type to modify a property type\n\t * @irreplaceable\n\t */\n\ttype Modify<T, R> = Omit<T, keyof R> & R;\n\n\t/**\n\t * A `string` OR a `function` which can have a `T` argument and a `R` result.\n\t * @param param - A param of type `R`\n\t * @returns Something of type `R`\n\t */\n\ttype StringOrFunction<T = void, R = void> = string | Function<T, R>;\n\n\t/**\n\t * @excluded\n\t * @irreplaceable\n\t */\n\ttype ArgDiff = Modify<Fig.Arg, { remove?: true }>;\n\n\t/**\n\t * @excluded\n\t * @irreplaceable\n\t */\n\ttype OptionDiff = Modify<\n\t\tFig.Option,\n\t\t{\n\t\t\targs?: ArgDiff | ArgDiff[];\n\t\t\tremove?: true;\n\t\t}\n\t>;\n\n\t/**\n\t * @excluded\n\t * @irreplaceable\n\t */\n\ttype SubcommandDiff = Modify<\n\t\tFig.Subcommand,\n\t\t{\n\t\t\tsubcommands?: SubcommandDiff[];\n\t\t\toptions?: OptionDiff[];\n\t\t\targs?: ArgDiff | ArgDiff[];\n\t\t\tremove?: true;\n\t\t}\n\t>;\n\n\t/**\n\t * @excluded\n\t * @irreplaceable\n\t */\n\ttype SpecDiff = Omit<SubcommandDiff, \"name\" | \"remove\">;\n\n\t/**\n\t * @excluded\n\t * @irreplaceable\n\t */\n\ttype VersionDiffMap = Record<string, SpecDiff>;\n\n\t/**\n\t * A spec object.\n\t * Can be one of\n\t * 1. A subcommand\n\t * 2. A function that dynamically computes a subcommand\n\t * 3. A function that returns the path to a versioned spec files (that exports a base subcommand and { versions: VersionDiffMap }\n\t */\n\ttype Spec =\n\t\t| Subcommand\n\t\t| ((version?: string) => Subcommand)\n\t\t| ((version?: string) => {\n\t\t\tversionedSpecPath: string;\n\t\t\tversion?: string;\n\t\t});\n\n\ttype ExecuteCommandInput = {\n\t\t/**\n\t\t * The command to execute\n\t\t */\n\t\tcommand: string;\n\t\t/**\n\t\t * The arguments to the command to be run\n\t\t */\n\t\targs: string[];\n\t\t/**\n\t\t * The directory to run the command in\n\t\t */\n\t\tcwd?: string;\n\t\t/**\n\t\t * The environment variables to set when executing the command, `undefined` will unset the variable if it set\n\t\t */\n\t\tenv?: Record<string, string | undefined>;\n\t\t/**\n\t\t * Duration of timeout in milliseconds, if the command takes longer than the timeout a error will be thrown.\n\t\t * @defaultValue 5000\n\t\t */\n\t\ttimeout?: number;\n\t};\n\n\t/**\n\t * The output of running a command\n\t */\n\ttype ExecuteCommandOutput = {\n\t\t/**\n\t\t * The stdout (1) of running a command\n\t\t */\n\t\tstdout: string;\n\t\t/**\n\t\t * The stderr (2) of running a command\n\t\t */\n\t\tstderr: string;\n\t\t/**\n\t\t * The exit status of running a command\n\t\t */\n\t\tstatus: number;\n\t};\n\n\t/**\n\t * An async function to execute a command\n\t * @returns The output of the command\n\t */\n\ttype ExecuteCommandFunction = (args: ExecuteCommandInput) => Promise<ExecuteCommandOutput>;\n\n\ttype CacheMaxAge = {\n\t\tstrategy: \"max-age\";\n\t\t/**\n\t\t * The time to live for the cache in milliseconds.\n\t\t * @example\n\t\t * 3600\n\t\t */\n\t\tttl: number;\n\t};\n\n\ttype CacheStaleWhileRevalidate = {\n\t\tstrategy?: \"stale-while-revalidate\";\n\t\t/**\n\t\t * The time to live for the cache in milliseconds.\n\t\t * @example\n\t\t * 3600\n\t\t */\n\t\tttl?: number;\n\t};\n\n\ttype Cache = (CacheMaxAge | CacheStaleWhileRevalidate) & {\n\t\t/**\n\t\t * Whether the cache should be based on the directory the user was currently in or not.\n\t\t * @defaultValue false\n\t\t */\n\t\tcacheByDirectory?: boolean;\n\n\t\t/**\n\t\t * Hardcoded cache key that can be used to cache a single generator across\n\t\t * multiple argument locations in a spec.\n\t\t */\n\t\tcacheKey?: string;\n\t};\n\n\ttype TriggerOnChange = {\n\t\t/** Trigger on any change to the token */\n\t\ton: \"change\";\n\t};\n\n\ttype TriggerOnThreshold = {\n\t\t/** Trigger when the length of the token changes past a threshold */\n\t\ton: \"threshold\";\n\t\tlength: number;\n\t};\n\n\ttype TriggerOnMatch = {\n\t\t/** Trigger when the index of a string changes */\n\t\ton: \"match\";\n\t\tstring: string | string[];\n\t};\n\n\ttype Trigger =\n\t\t| string\n\t\t| ((newToken: string, oldToken: string) => boolean)\n\t\t| TriggerOnChange\n\t\t| TriggerOnThreshold\n\t\t| TriggerOnMatch;\n\n\t/**\n\t * The BaseSuggestion object is the root of the Suggestion, Subcommand, and Option objects.\n\t * It is where key properties like description, icon, and displayName are found\n\t * @excluded\n\t */\n\tinterface BaseSuggestion {\n\t\t/**\n\t\t * The string that is displayed in the UI for a given suggestion.\n\t\t * @defaultValue the name prop\n\t\t *\n\t\t * @example\n\t\t * The npm CLI has a subcommand called `install`. If we wanted\n\t\t * to display some custom text like `Install an NPM package 📦` we would set\n\t\t * `name: \"install\"` and `displayName: \"Install an NPM package 📦\"`\n\t\t */\n\t\tdisplayName?: string;\n\t\t/**\n\t\t * The value that's inserted into the terminal when a user presses enter/tab or clicks on a menu item.\n\t\t *\n\t\t * @remarks\n\t\t * You can use `\\n` to insert a newline or `\\b` to insert a backspace.\n\t\t * You can also optionally specify {cursor} in the string and Fig will automatically place the cursor there after insert.\n\t\t *\n\t\t * @defaultValue The value of the name prop.\n\t\t *\n\t\t * @example\n\t\t * For the `git commit` subcommand, the `-m` option has an insert value of `-m '{cursor}'`\n\t\t */\n\t\tinsertValue?: string;\n\t\t/**\n\t\t * When the suggestion is inserted, replace the command with this string\n\t\t *\n\t\t * @remarks\n\t\t * You can use `\\n` to insert a newline or `\\b` to insert a backspace.\n\t\t * You can also optionally specify {cursor} in the string and Fig will automatically place the cursor there after insert.\n\t\t * Note that currently the entire edit buffer will be replaced. Eventually, only the root command will be replaced, preserving pipes and continuations.\n\t\t */\n\t\treplaceValue?: string;\n\t\t/**\n\t\t * The text that gets rendered at the bottom of the autocomplete box (or the side if you hit ⌘i)\n\t\t *\n\t\t * @example\n\t\t * \"Your commit message\"\n\t\t */\n\t\tdescription?: string;\n\t\t/**\n\t\t * The icon that is rendered is based on the type.\n\t\t *\n\t\t * @remarks\n\t\t * Icons can be a 1 character string, a URL, or Fig's [icon protocol](https://fig.io/docs/reference/suggestion/icon-api) (fig://) which lets you generate\n\t\t * colorful and fun systems icons.\n\t\t *\n\t\t * @defaultValue related to the type of the object (e.g. `Suggestion`, `Subcommand`, `Option`, `Arg`)\n\t\t *\n\t\t * @example\n\t\t * `A`\n\t\t * @example\n\t\t * `😊`\n\t\t * @example\n\t\t * `https://www.herokucdn.com/favicon.ico`\n\t\t * @example\n\t\t * `fig://icon?type=file`\n\t\t *\n\t\t */\n\t\ticon?: string;\n\t\t/**\n\t\t * Specifies whether the suggestion is \"dangerous\".\n\t\t *\n\t\t * @remarks\n\t\t * If true, Fig will not enable its autoexecute functionality. Autoexecute means if a user selects a suggestion it will insert the text and run the command. We signal this by changing the icon to red.\n\t\t * Setting `isDangerous` to `true` will make it harder for a user to accidentally run a dangerous command.\n\t\t *\n\t\t * @defaultValue false\n\t\t *\n\t\t * @example\n\t\t * This is used in the `rm` spec. Why? Because we don't want users to accidentally delete their files so we make it just a little bit harder...\n\t\t */\n\t\tisDangerous?: boolean;\n\t\t/**\n\t\t * The number used to rank suggestions in autocomplete. Number must be from 0-100. Higher priorities rank higher.\n\t\t *\n\t\t * @defaultValue 50\n\t\t * @remarks\n\t\t * Fig ranks suggestions by recency. To do this, we check if a suggestion has been selected before. If yes and the suggestions has:\n\t\t * - a priority between 50-75, the priority will be replaced with 75, then we will add the timestamp of when that suggestion was selected as a decimal.\n\t\t * - a priority outside of 50-75, the priority will be increased by the timestamp of when that suggestion was selected as a decimal.\n\t\t * If it has not been selected before, Fig will keep the same priority as was set in the completion spec\n\t\t * If it was not set in the spec, it will default to 50.\n\t\t *\n\t\t * @example\n\t\t * Let's say a user has previously selected a suggestion at unix timestamp 1634087677:\n\t\t *     - If completion spec did not set a priority (Fig treats this as priority 50), its priority would change to 75 + 0.1634087677 = 75.1634087677;\n\t\t *     - If completion spec set a priority of 49 or less, its priority would change to 49 + 0.1634087677 = 49.1634087677;\n\t\t *     - If completion spec set a priority of 76 or more, its priority would change to 76 + 0.1634087677 = 76.1634087677;\n\t\t *     - If a user had never selected a suggestion, then its priority would just stay as is (or if not set, default to 50).\n\t\t *\n\t\t * @example\n\t\t * If you want your suggestions to always be:\n\t\t *     - at the top order, rank them 76 or above.\n\t\t *     - at the bottom, rank them 49 or below\n\t\t */\n\t\tpriority?: number;\n\t\t/**\n\t\t * Specifies whether a suggestion should be hidden from results.\n\t\t * @remarks\n\t\t * Fig will only show it if the user exactly types the name.\n\t\t * @defaultValue false\n\t\t * @example\n\t\t * The \"-\" suggestion is hidden in the `cd` spec. You will only see it if you type exactly  `cd -`\n\t\t */\n\t\thidden?: boolean;\n\t\t/**\n\t\t *\n\t\t * Specifies whether a suggestion is deprecated.\n\t\t * @remarks\n\t\t * It is possible to specify a suggestion to replace the deprecated one.\n\t\t * - The `description` of the deprecated object (e.g `deprecated: { description: 'The --no-ansi option has been deprecated in v2' }`) is used to provide infos about the deprecation.\n\t\t * - `deprecated: true` and `deprecated: { }` behave the same and will just display the suggestion as deprecated.\n\t\t * @example\n\t\t * ```js\n\t\t * deprecated: { insertValue: '--ansi never', description: 'The --no-ansi option has been deprecated in v2' }\n\t\t * ```\n\t\t */\n\t\tdeprecated?: boolean | Omit<BaseSuggestion, \"deprecated\">;\n\n\t\t/**\n\t\t * Specifies which component to use to render the preview window.\n\t\t *\n\t\t * @remarks This should be the path within the `src` directory to the component without the extension.\n\t\t *\n\t\t * @example 'ls/filepathPreview'\n\t\t */\n\t\tpreviewComponent?: string;\n\n\t\t/**\n\t\t * This is a way to pass data to the Autocomplete Engine that is not formalized in the spec, do not use this in specs as it may change at any time\n\t\t *\n\t\t * @ignore\n\t\t */\n\t\t_internal?: Record<string, unknown>;\n\t}\n\n\t/**\n\t * Each item in Fig's autocomplete popup window is a Suggestion object. It is probably the most important object in Fig.\n\t * Subcommand and Option objects compile down to Suggestion objects. Generators return Suggestion objects.\n\t * The main things you can customize in your suggestion object is the text that's displayed, the icon, and what's inserted after being selected. In saying that, most of these have very sane defaults.\n\t */\n\tinterface Suggestion extends BaseSuggestion {\n\t\t/**\n\t\t * The string Fig uses when filtering over a list of suggestions to check for a match.\n\t\t * @remarks\n\t\t * When a a user is typing in the terminal, the query term (the token they are currently typing) filters over all suggestions in a list by checking if the queryTerm matches the prefix of the name.\n\t\t * The `displayName` prop also defaults to the value of name.\n\t\t *\n\t\t * The `name` props of suggestion, subcommand, option, and arg objects are all different. It's important to read them all carefully.\n\t\t *\n\t\t * @example\n\t\t * If a user types git `c`, any Suggestion objects with a name prop that has a value starting with \"c\" will match.\n\t\t *\n\t\t */\n\t\tname?: SingleOrArray<string>;\n\t\t/**\n\t\t * The type of a suggestion object.\n\t\t * @remarks\n\t\t * The type determines\n\t\t * - the default icon Fig uses (e.g. a file or folder searches for the system icon, a subcommand has a specific icon etc)\n\t\t * - whether we allow users to auto-execute a command\n\t\t */\n\t\ttype?: SuggestionType;\n\t}\n\n\t/**\n\t * The subcommand object represent the tree structure of a completion spec. We sometimes also call it the skeleton.\n\t *\n\t * A subcommand can nest options, arguments, and more subcommands (it's recursive)\n\t */\n\tinterface Subcommand extends BaseSuggestion {\n\t\t/**\n\t\t * The name of the subcommand. Should exactly match the name defined by the CLI tool.\n\t\t *\n\t\t * @remarks\n\t\t * If a subcommand has multiple aliases, they should be included as an array.\n\t\t *\n\t\t * Note that Fig's autocomplete engine requires this `name` to match the text typed by the user in the shell.\n\t\t *\n\t\t * To customize the title that is displayed to the user, use `displayName`.\n\t\t *\n\t\t *\n\t\t * @example\n\t\t * For `git checkout`, the subcommand `checkout` would have `name: \"checkout\"`\n\t\t * @example\n\t\t * For `npm install`, the subcommand `install` would have `name: [\"install\", \"i\"]` as these two values both represent the same subcommand.\n\t\t */\n\t\tname: SingleOrArray<string>;\n\n\t\t/**\n\t\t * An array of `Subcommand` objects representing all the subcommands that exist beneath the current command.\n\t\t *     *\n\t\t * To support large CLI tools, `Subcommands` can be nested recursively.\n\t\t *\n\t\t * @example\n\t\t * A CLI tool like `aws` is composed of many top-level subcommands (`s3`, `ec2`, `eks`...), each of which include child subcommands of their own.\n\t\t */\n\t\tsubcommands?: Subcommand[];\n\n\t\t/**\n\t\t * Specifies whether the command requires a subcommand. This is false by default.\n\t\t *\n\t\t * A space will always be inserted after this command if `requiresSubcommand` is true.\n\t\t * If the property is omitted, a space will be inserted if there is at least one required argument.\n\t\t */\n\t\trequiresSubcommand?: boolean;\n\n\t\t/**\n\t\t * An array of `Option` objects representing the options that are available on this subcommand.\n\t\t *\n\t\t * @example\n\t\t * A command like `git commit` accepts various flags and options, such as `--message` and `--all`. These `Option` objects would be included in the `options` field.\n\t\t */\n\t\toptions?: Option[];\n\n\t\t/**\n\t\t * An array of `Arg` objects representing the various parameters or \"arguments\" that can be passed to this subcommand.\n\t\t *\n\t\t */\n\t\targs?: SingleOrArray<Arg>;\n\t\t/**\n\t\t * This option allows to enforce the suggestion filtering strategy for a specific subcommand.\n\t\t * @remarks\n\t\t * Users always want to have the most accurate results at the top of the suggestions list.\n\t\t * For example we can enable fuzzy search on a subcommand that always requires fuzzy search to show the best suggestions.\n\t\t * This property is also useful when subcommands or options have a prefix (e.g. the npm package scope) because enabling fuzzy search users can omit that part (see the second example below)\n\t\t * @example\n\t\t * yarn workspace [name] with fuzzy search is way more useful since we can omit the npm package scope\n\t\t * @example\n\t\t * fig settings <setting name> uses fuzzy search to prevent having to add the `autocomplete.` prefix to each searched setting\n\t\t * ```typescript\n\t\t * const figSpec: Fig.Spec {\n\t\t *   name: \"fig\",\n\t\t *   subcommands: [\n\t\t *     {\n\t\t *       name: \"settings\",\n\t\t *       filterStrategy: \"fuzzy\",\n\t\t *       subcommands: [\n\t\t *         {\n\t\t *           name: \"autocomplete.theme\", // if a user writes `fig settings theme` it gets the correct suggestions\n\t\t *         },\n\t\t *         // ... other settings\n\t\t *       ]\n\t\t *     },\n\t\t *     // ... other fig subcommands\n\t\t *   ]\n\t\t * }\n\t\t * ```\n\t\t */\n\t\tfilterStrategy?: \"fuzzy\" | \"prefix\" | \"default\";\n\t\t/**\n\t\t * A list of Suggestion objects that are appended to the suggestions shown beneath a subcommand.\n\t\t *\n\t\t * @remarks\n\t\t * You can use this field to suggest common workflows.\n\t\t *\n\t\t */\n\t\tadditionalSuggestions?: (string | Suggestion)[];\n\t\t/**\n\t\t * Dynamically load another completion spec at runtime.\n\t\t *\n\t\t * @param tokens - a tokenized array of the text the user has typed in the shell.\n\t\t * @param executeCommand - an async function that can execute a shell command on behalf of the user. The output is a string.\n\t\t * @returns A `SpecLocation` object or an array of `SpecLocation` objects.\n\t\t *\n\t\t * @remarks\n\t\t * `loadSpec` can be invoked as string (recommended) or a function (advanced).\n\t\t *\n\t\t * The API tells the autocomplete engine where to look for a completion spec. If you pass a string, the engine will attempt to locate a matching spec that is hosted by Fig.\n\t\t *\n\t\t * @example\n\t\t * Suppose you have an internal CLI tool that wraps `kubectl`. Instead of copying the `kubectl` completion spec, you can include the spec at runtime.\n\t\t * ```typescript\n\t\t * {\n\t\t *   name: \"kube\",\n\t\t *   description: \"a wrapper around kubectl\"\n\t\t *   loadSpec: \"kubectl\"\n\t\t * }\n\t\t * ```\n\t\t * @example\n\t\t * In the `aws` completion spec, `loadSpec` is used to optimize performance. The completion spec is split into multiple files, each of which can be loaded separately.\n\t\t * ```typescript\n\t\t * {\n\t\t *   name: \"s3\",\n\t\t *   loadSpec: \"aws/s3\"\n\t\t * }\n\t\t * ```\n\t\t */\n\t\tloadSpec?: LoadSpec;\n\t\t/**\n\t\t * Dynamically *generate* a `Subcommand` object a runtime. The generated `Subcommand` is merged with the current subcommand.\n\t\t *\n\t\t * @remarks\n\t\t * This API is often used by CLI tools where the structure of the CLI tool is not *static*. For instance, if the tool can be extended by plugins or otherwise shows different subcommands or options depending on the environment.\n\t\t *\n\t\t * @param tokens - a tokenized array of the text the user has typed in the shell.\n\t\t * @param executeCommand - an async function that can execute a shell command on behalf of the user. The output is a string.\n\t\t * @returns a `Fig.Spec` object\n\t\t *\n\t\t * @example\n\t\t * The `python` spec uses `generateSpec` to include the`django-admin` spec if `django manage.py` exists.\n\t\t * ```typescript\n\t\t * generateSpec: async (tokens, executeCommand) => {\n\t\t *    // Load the contents of manage.py\n\t\t *    const managePyContents = await executeCommand(\"cat manage.py\");\n\t\t *    // Heuristic to determine if project uses django\n\t\t *    if (managePyContents.contains(\"django\")) {\n\t\t *      return {\n\t\t *        name: \"python\",\n\t\t *        subcommands: [{ name: \"manage.py\", loadSpec: \"django-admin\" }],\n\t\t *      };\n\t\t *    }\n\t\t *  },\n\t\t * ```\n\t\t */\n\t\tgenerateSpec?: (tokens: string[], executeCommand: ExecuteCommandFunction) => Promise<Spec | undefined>;\n\n\t\t/**\n\t\t * Generating a spec can be expensive, but due to current guarantees they are not cached.\n\t\t * This function generates a cache key which is used to cache the result of generateSpec.\n\t\t * If `undefined` is returned, the cache will not be used.\n\t\t */\n\t\tgenerateSpecCacheKey?: Function<{ tokens: string[] }, string | undefined> | string;\n\n\t\t/**\n\t\t * Configure how the autocomplete engine will map the raw tokens to a given completion spec.\n\t\t *\n\t\t * @param flagsArePosixNoncompliant - Indicates that flags with one hyphen may have *more* than one character. Enabling this directive, turns off support for option chaining.\n\t\t * @param optionsMustPrecedeArguments - Options will not be suggested after any argument of the Subcommand has been typed.\n\t\t * @param optionArgSeparators - Indicate that options which take arguments will require one of the specified separators between the 'verbose' option name and the argument.\n\t\t *\n\t\t * @example\n\t\t * The `-work` option from the `go` spec is parsed as a single flag when `parserDirectives.flagsArePosixNoncompliant` is set to true. Normally, this would be chained and parsed as `-w -o -r -k` if `flagsArePosixNoncompliant` is not set to true.\n\t\t */\n\t\tparserDirectives?: {\n\t\t\tflagsArePosixNoncompliant?: boolean;\n\t\t\toptionsMustPrecedeArguments?: boolean;\n\t\t\toptionArgSeparators?: SingleOrArray<string>;\n\t\t};\n\n\t\t/**\n\t\t * Specifies whether or not to cache the result of loadSpec and generateSpec\n\t\t *\n\t\t * @remarks\n\t\t * Caching is good because it reduces the time to completion on subsequent calls to a dynamic subcommand, but when the data does not outlive the cache this allows a mechanism for opting out of it.\n\t\t */\n\t\tcache?: boolean;\n\t}\n\n\t/**\n\t * The option object represent CLI options (sometimes called flags).\n\t *\n\t * A option can have an argument. An option can NOT have subcommands or other option\n\t */\n\tinterface Option extends BaseSuggestion {\n\t\t/**\n\t\t * The exact name of the subcommand as defined in the CLI tool.\n\t\t *\n\t\t * @remarks\n\t\t * Fig's parser relies on your option name being exactly what the user would type. (e.g. if the user types `git \"-m\"`, you must have `name: \"-m\"` and not something like `name: \"your message\"` or even with an `=` sign like`name: \"-m=\"`)\n\t\t *\n\t\t * If you want to customize what the text the popup says, use `displayName`.\n\t\t *\n\t\t * The name prop in an Option object compiles down to the name prop in a Suggestion object\n\t\t *\n\t\t * Final note: the name prop can be a string (most common) or an array of strings\n\t\t *\n\t\t *\n\t\t * @example\n\t\t * For `git commit -m` in the, message option nested beneath `commit` would have `name: [\"-m\", \"--message\"]`\n\t\t * @example\n\t\t * For `ls -l` the `-l` option would have `name: \"-l\"`\n\t\t */\n\t\tname: SingleOrArray<string>;\n\n\t\t/**\n\t\t * An array of arg objects or a single arg object\n\t\t *\n\t\t * @remarks\n\t\t * If a subcommand takes an argument, please at least include an empty Arg Object. (e.g. `{ }`). Why? If you don't, Fig will assume the subcommand does not take an argument. When the user types their argument\n\t\t * If the argument is optional, signal this by saying `isOptional: true`.\n\t\t *\n\t\t * @example\n\t\t * `npm run` takes one mandatory argument. This can be represented by `args: { }`\n\t\t * @example\n\t\t * `git push` takes two optional arguments. This can be represented by: `args: [{ isOptional: true }, { isOptional: true }]`\n\t\t * @example\n\t\t * `git clone` takes one mandatory argument and one optional argument. This can be represented by: `args: [{ }, { isOptional: true }]`\n\t\t */\n\t\targs?: SingleOrArray<Arg>;\n\t\t/**\n\t\t *\n\t\t * Signals whether an option is persistent, meaning that it will still be available\n\t\t * as an option for all child subcommands.\n\t\t *\n\t\t * @remarks\n\t\t * As of now there is no way to disable this\n\t\t * persistence for certain children. Also see\n\t\t * https://github.com/spf13/cobra/blob/master/user_guide.md#persistent-flags.\n\t\t *\n\t\t * @defaultValue false\n\t\t *\n\t\t * @example\n\t\t * Say the `git` spec had an option at the top level with `{ name: \"--help\", isPersistent: true }`.\n\t\t * Then the spec would recognize both `git --help` and `git commit --help`\n\t\t * as a valid as we are passing the `--help` option to all `git` subcommands.\n\t\t *\n\t\t */\n\t\tisPersistent?: boolean;\n\t\t/**\n\t\t * Signals whether an option is required.\n\t\t *\n\t\t * @defaultValue false (option is NOT required)\n\t\t * @example\n\t\t * The `-m` option of `git commit` is required\n\t\t *\n\t\t */\n\t\tisRequired?: boolean;\n\t\t/**\n\t\t *\n\t\t * Signals whether an equals sign is required to pass an argument to an option (e.g. `git commit --message=\"msg\"`)\n\t\t * @defaultValue false (does NOT require an equal)\n\t\t *\n\t\t * @example\n\t\t * When `requiresEqual: true` the user MUST do `--opt=value` and cannot do `--opt value`\n\t\t *\n\t\t * @deprecated use `requiresSeparator` instead\n\t\t *\n\t\t */\n\t\trequiresEquals?: boolean;\n\t\t/**\n\t\t *\n\t\t * Signals whether one of the separators specified in parserDirectives is required to pass an argument to an option (e.g. `git commit --message[separator]\"msg\"`)\n\t\t * If set to true this will automatically insert an equal after the option name.\n\t\t * If set to a separator (string) this will automatically insert the separator specified after the option name.\n\t\t * @defaultValue false (does NOT require a separator)\n\t\t *\n\t\t * @example\n\t\t * When `requiresSeparator: true` the user MUST do `--opt=value` and cannot do `--opt value`\n\t\t * @example\n\t\t * When `requiresSeparator: ':'` the user MUST do `--opt:value` and cannot do `--opt value`\n\t\t */\n\t\trequiresSeparator?: boolean | string;\n\t\t/**\n\t\t *\n\t\t * Signals whether an option can be passed multiple times.\n\t\t *\n\t\t * @defaultValue false (option is NOT repeatable)\n\t\t *\n\t\t * @remarks\n\t\t * Passing `isRepeatable: true` will allow an option to be passed any number\n\t\t * of times, while passing `isRepeatable: 2` will allow it to be passed\n\t\t * twice, etc. Passing `isRepeatable: false` is the same as passing\n\t\t * `isRepeatable: 1`.\n\t\t *\n\t\t * If you explicitly specify the isRepeatable option in a spec, this\n\t\t * constraint will be enforced at the parser level, meaning after the option\n\t\t * (say `-o`) has been passed the maximum number of times, Fig's parser will\n\t\t * not recognize `-o` as an option if the user types it again.\n\t\t *\n\t\t * @example\n\t\t * In `npm install` doesn't specify `isRepeatable` for `{ name: [\"-D\", \"--save-dev\"] }`.\n\t\t * When the user types `npm install -D`, Fig will no longer suggest `-D`.\n\t\t * If the user types `npm install -D -D`. Fig will still parse the second\n\t\t * `-D` as an option.\n\t\t *\n\t\t * Suppose `npm install` explicitly specified `{ name: [\"-D\", \"--save-dev\"], isRepeatable: false }`.\n\t\t * Now if the user types `npm install -D -D`, Fig will instead parse the second\n\t\t * `-D` as the argument to the `install` subcommand instead of as an option.\n\t\t *\n\t\t * @example\n\t\t * SSH has `{ name: \"-v\", isRepeatable: 3 }`. When the user types `ssh -vv`, Fig\n\t\t * will still suggest `-v`, when the user types `ssh -vvv` Fig will stop\n\t\t * suggesting `-v` as an option. Finally if the user types `ssh -vvvv` Fig's\n\t\t * parser will recognize that this is not a valid string of chained options\n\t\t * and will treat this as an argument to `ssh`.\n\t\t *\n\t\t */\n\t\tisRepeatable?: boolean | number;\n\t\t/**\n\t\t *\n\t\t * Signals whether an option is mutually exclusive with other options (ie if the user has this option, Fig should not show the options specified).\n\t\t * @defaultValue false\n\t\t *\n\t\t * @remarks\n\t\t * Options that are mutually exclusive with flags the user has already passed will not be shown in the suggestions list.\n\t\t *\n\t\t * @example\n\t\t * You might see `[-a | --interactive | --patch]` in a man page. This means each of these options are mutually exclusive on each other.\n\t\t * If we were defining the exclusive prop of the \"-a\" option, then we would have `exclusive: [\"--interactive\", \"--patch\"]`\n\t\t *\n\t\t */\n\t\texclusiveOn?: string[];\n\t\t/**\n\t\t *\n\t\t *\n\t\t * Signals whether an option depends on other options (ie if the user has this option, Fig should only show these options until they are all inserted).\n\t\t *\n\t\t * @defaultValue false\n\t\t *\n\t\t * @remarks\n\t\t * If the user has an unmet dependency for a flag they've already typed, this dependency will have boosted priority in the suggestion list.\n\t\t *\n\t\t * @example\n\t\t * In a tool like firebase, we may want to delete a specific extension. The command might be `firebase delete --project ABC --extension 123` This would mean we delete the 123 extension from the ABC project.\n\t\t * In this case, `--extension` dependsOn `--project`\n\t\t *\n\t\t */\n\t\tdependsOn?: string[];\n\t}\n\n\t/**\n\t * The arg object represent CLI arguments (sometimes called positional arguments).\n\t *\n\t * An argument is different to a subcommand object and option object. It does not compile down to a suggestion object. Rather, it represents custom user input. If you want to generate suggestions for this custom user input, you should use the generator prop nested beneath an Arg object\n\t */\n\tinterface Arg {\n\t\t/**\n\t\t * The name of an argument. This is different to the `name` prop for subcommands, options, and suggestion objects so please read carefully.\n\t\t * This `name` prop signals a normal, human readable string. It usually signals to the user the type of argument they are inserting if there are no available suggestions.\n\t\t * Unlike subcommands and options, Fig does NOT use this value for parsing. Therefore, it can be whatever you want.\n\t\t *\n\t\t * @example\n\t\t * The name prop for the `git commit -m <msg>` arg object is \"msg\". But you could also make it \"message\" or \"your message\". It is only used for description purposes (you see it when you type the message), not for parsing!\n\t\t */\n\t\tname?: string;\n\n\t\t/**\n\t\t * The text that gets rendered at the bottom of the autocomplete box a) when the user is inputting an argument and there are no suggestions and b) for all generated suggestions for an argument\n\t\t * Keep it short and direct!\n\t\t *\n\t\t * @example\n\t\t * \"Your commit message\"\n\t\t */\n\t\tdescription?: string;\n\n\t\t/**\n\t\t * Specifies whether the suggestions generated for this argument are \"dangerous\".\n\t\t *\n\t\t * @remarks\n\t\t * If true, Fig will not enable its autoexecute functionality. Autoexecute means if a user selects a suggestion it will insert the text and run the command. We signal this by changing the icon to red.\n\t\t * Turning on isDangerous will make it harder for a user to accidentally run a dangerous command.\n\t\t *\n\t\t * @defaultValue false\n\t\t *\n\t\t * @example\n\t\t * This is used for all arguments in the `rm` spec.\n\t\t */\n\t\tisDangerous?: boolean;\n\n\t\t/**\n\t\t * A list of Suggestion objects that are shown when a user is typing an argument.\n\t\t *\n\t\t * @remarks\n\t\t * These suggestions are static meaning you know them beforehand and they are not generated at runtime. If you want to generate suggestions at runtime, use a generator\n\t\t *\n\t\t * @example\n\t\t * For `git reset <branch or commit>`, a two common arguments to pass are \"head\" and \"head^\". Therefore, the spec suggests both of these by using the suggestion prop\n\t\t */\n\t\tsuggestions?: (string | Suggestion)[];\n\t\t/**\n\t\t * A template which is a single TemplateString or an array of TemplateStrings\n\t\t *\n\t\t * @remarks\n\t\t * Templates are generators prebuilt by Fig. Here are the three templates:\n\t\t * - filepaths: show folders and filepaths. Allow autoexecute on filepaths\n\t\t * - folders: show folders only. Allow autoexecute on folders\n\t\t * - history: show suggestions for all items in history matching this pattern\n\t\t * - help: show subcommands. Only includes the 'siblings' of the nearest 'parent' subcommand\n\t\t *\n\t\t * @example\n\t\t * `cd` uses the \"folders\" template\n\t\t * @example\n\t\t * `ls` used  [\"filepaths\", \"folders\"]. Why both? Because if I `ls` a directory, we want to enable a user to autoexecute on this directory. If we just did \"filepaths\" they couldn't autoexecute.\n\t\t *\n\t\t */\n\t\ttemplate?: Template;\n\t\t/**\n\t\t *\n\t\t * Generators let you dynamically generate suggestions for arguments by running shell commands on a user's device.\n\t\t *\n\t\t * This takes a single generator or an array of generators\n\t\t */\n\t\tgenerators?: SingleOrArray<Generator>;\n\t\t/**\n\t\t * This option allows to enforce the suggestion filtering strategy for a specific argument suggestions.\n\t\t * @remarks\n\t\t * Users always want to have the most accurate results at the top of the suggestions list.\n\t\t * For example we can enable fuzzy search on an argument that always requires fuzzy search to show the best suggestions.\n\t\t * This property is also useful when argument suggestions have a prefix (e.g. the npm package scope) because enabling fuzzy search users can omit that part (see the second example below)\n\t\t * @example\n\t\t * npm uninstall [packages...] uses fuzzy search to allow searching for installed packages ignoring the package scope\n\t\t * ```typescript\n\t\t * const figSpec: Fig.Spec {\n\t\t *   name: \"npm\",\n\t\t *   subcommands: [\n\t\t *     {\n\t\t *       args: {\n\t\t *         name: \"packages\",\n\t\t *         filterStrategy: \"fuzzy\", // search in suggestions provided by the generator (in this case) using fuzzy search\n\t\t *         generators: generateNpmDeps,\n\t\t *         isVariadic: true,\n\t\t *       },\n\t\t *     },\n\t\t *     // ... other npm commands\n\t\t *   ],\n\t\t * }\n\t\t * ```\n\t\t */\n\t\tfilterStrategy?: \"fuzzy\" | \"prefix\" | \"default\";\n\t\t/**\n\t\t * Provide a suggestion at the top of the list with the current token that is being typed by the user.\n\t\t */\n\t\tsuggestCurrentToken?: boolean;\n\t\t/**\n\t\t * Specifies that the argument is variadic and therefore repeats infinitely.\n\t\t *\n\t\t * @remarks\n\t\t * Man pages represent variadic arguments with an ellipsis e.g. `git add <pathspec...>`\n\t\t *\n\t\t * @example\n\t\t * `echo` takes a variadic argument (`echo hello world ...`)\n\t\t * @example\n\t\t * `git add` also takes a variadic argument\n\t\t */\n\t\tisVariadic?: boolean;\n\n\t\t/**\n\t\t * Specifies whether options can interrupt variadic arguments. There is\n\t\t * slightly different behavior when this is used on an option argument and\n\t\t * on a subcommand argument:\n\t\t *\n\t\t * - When an option breaks a *variadic subcommand argument*, after the option\n\t\t * and any arguments are parsed, the parser will continue parsing variadic\n\t\t * arguments to the subcommand\n\t\t * - When an option breaks a *variadic option argument*, after the breaking\n\t\t * option and any arguments are parsed, the original variadic options\n\t\t * arguments will be terminated. See the second examples below for details.\n\t\t *\n\t\t *\n\t\t * @defaultValue true\n\t\t *\n\t\t * @example\n\t\t * When true for git add's argument:\n\t\t * `git add file1 -v file2` will interpret `-v` as an option NOT an\n\t\t * argument, and will continue interpreting file2 as a variadic argument to\n\t\t * add after\n\t\t *\n\t\t * @example\n\t\t * When true for -T's argument, where -T is a variadic list of tags:\n\t\t * `cmd -T tag1 tag2 -p project tag3` will interpret `-p` as an option, but\n\t\t * will then terminate the list of tags. So tag3 is not parsed as an\n\t\t * argument to `-T`, but rather as a subcommand argument to `cmd` if `cmd`\n\t\t * takes any arguments.\n\t\t *\n\t\t * @example\n\t\t * When false:\n\t\t * `echo hello -n world` will treat -n as an argument NOT an option.\n\t\t * However, in `echo -n hello world` it will treat -n as an option as\n\t\t * variadic arguments haven't started yet\n\t\t *\n\t\t */\n\t\toptionsCanBreakVariadicArg?: boolean;\n\n\t\t/**\n\t\t * `true` if an argument is optional (ie the CLI spec says it is not mandatory to include an argument, but you can if you want to).\n\t\t *\n\t\t * @remarks\n\t\t * NOTE: It is important you include this for our parsing. If you don't, Fig will assume the argument is mandatory. When we assume an argument is mandatory, we force the user to input the argument and hide all other suggestions.\n\t\t *\n\t\t * @example\n\t\t * `git push [remote] [branch]` takes two optional args.\n\t\t */\n\t\tisOptional?: boolean;\n\t\t/**\n\t\t * Syntactic sugar over the `loadSpec` prop.\n\t\t *\n\t\t * @remarks\n\t\t * Specifies that the argument is an entirely new command which Fig should start completing on from scratch.\n\t\t *\n\t\t * @example\n\t\t * `time` and `builtin` have only one argument and this argument has the `isCommand` property. If I type `time git`, Fig will load up the git completion spec because the isCommand property is set.\n\t\t */\n\t\tisCommand?: boolean;\n\t\t/**\n\t\t * The same as the `isCommand` prop, except Fig will look for a completion spec in the `.fig/autocomplete/build` folder in the user's current working directory.\n\t\t *\n\t\t * @remarks\n\t\t * See our docs for more on building completion specs for local scripts [Fig for Teams](https://fig.io/docs/)\n\t\t * @example\n\t\t * `python` take one argument which is a `.py` file. If I have a `main.py` file on my desktop and my current working directory is my desktop, if I type `python main.py[space]` Fig will look for a completion spec in `~/Desktop/.fig/autocomplete/build/main.py.js`\n\t\t */\n\t\tisScript?: boolean;\n\t\t/**\n\t\t * The same as the `isCommand` prop, except you specify a string to prepend to what the user inputs and fig will load the completion spec accordingly.\n\t\t * @remarks\n\t\t * If isModule: \"python/\", Fig would load up the `python/USER_INPUT.js` completion spec from the `~/.fig/autocomplete` folder.\n\t\t * @example\n\t\t * For `python -m`, the user can input a specific module such as http.server. Each module is effectively a mini CLI tool that should have its own completions. Therefore the argument object for -m has `isModule: \"python/\"`. Whatever the modules user inputs, Fig will look under the `~/.fig/autocomplete/python/` directory for completion spec.\n\t\t *\n\t\t * @deprecated use `loadSpec` instead\n\t\t */\n\t\tisModule?: string;\n\n\t\t/**\n\t\t * This will debounce every keystroke event for this particular arg.\n\t\t * @remarks\n\t\t * If there are no keystroke events after 100ms, Fig will execute all the generators in this arg and return the suggestions.\n\t\t *\n\t\t * @example\n\t\t * `npm install` and `pip install` send debounced network requests after inactive typing from users.\n\t\t */\n\t\tdebounce?: boolean;\n\t\t/**\n\t\t * The default value for an optional argument.\n\t\t *\n\t\t * @remarks\n\t\t * Note: This is currently not used anywhere in Fig's autocomplete popup, but will be soon.\n\t\t *\n\t\t */\n\t\tdefault?: string;\n\t\t/**\n\t\t * See [`loadSpec` in Subcommand Object](https://fig.io/docs/reference/subcommand#loadspec).\n\t\t *\n\t\t * @remarks\n\t\t * There is a very high chance you want to use one of the following:\n\t\t * 1. `isCommand` (See [Arg Object](https://fig.io/docs/reference/arg#iscommand))\n\t\t * 2. `isScript` (See [Arg Object](https://fig.io/docs/reference/arg#isscript))\n\t\t *\n\t\t */\n\t\tloadSpec?: LoadSpec;\n\n\t\t/**\n\t\t * The `arg.parserDirective.alias` prop defines whether Fig's tokenizer should expand out an alias into separate tokens then offer completions accordingly.\n\t\t *\n\t\t * @remarks\n\t\t * This is similar to how Fig is able to offer autocomplete for user defined shell aliases, but occurs at the completion spec level.\n\t\t *\n\t\t * @param token - The token that the user has just typed that is an alias for something else\n\t\t * @param executeCommand -an async function that allows you to execute a shell command on the user's system and get the output as a string.\n\t\t * @returns The expansion of the alias that Fig's bash parser will reparse as if it were typed out in full, rather than the alias.\n\t\t *\n\t\t * If for some reason you know exactly what it will be, you may also just pass in the expanded alias, not a function that returns the expanded alias.\n\t\t *\n\t\t * @example\n\t\t * git takes git aliases. These aliases are defined in a user's gitconfig file. Let's say a user has an alias for `p=push`, then if a user typed `git p[space]`, this function would take the `p` token, return `push` and then offer suggestions as if the user had typed `git push[space]`\n\t\t *\n\t\t * @example\n\t\t * `npm run <script>` also takes an arg called \"script\". This arg is technically an alias for another shell command that is specified in the package.json.\n\t\t * If the user typed `npm run start[space]`, the package.json had script `start=node index.js`, then Fig would start offering suggestions for as if you had just typed `node index.js[space]`\n\t\t *\n\t\t * Note: In both cases, the alias function is only used to expand a given alias NOT to generate the list of aliases. To generate a list of aliases, scripts etc, use a generator.\n\t\t */\n\t\tparserDirectives?: {\n\t\t\talias?: string | ((token: string, exec: ExecuteCommandFunction) => Promise<string>);\n\t\t};\n\t}\n\n\t/**\n\t * The generator object is used to generate suggestions for an arg object. To do this, it runs a defined shell command on the user's device, gets the output, and returns a list of Suggestion objects.\n\t *\n\t */\n\tinterface Generator {\n\t\t/**\n\t\t * A template which is a single `TemplateString` or an array of `TemplateStrings`.\n\t\t *\n\t\t * @remarks\n\t\t * Templates are generators prebuilt by Fig. Here are the three templates:\n\t\t * - filepaths: show folders and filepaths. Allow autoexecute on filepaths\n\t\t * - folders: show folders only. Allow autoexecute on folders\n\t\t * - history: show suggestions for all items in history matching this pattern\n\t\t * - help: show subcommands. Only includes the 'siblings' of the nearest 'parent' subcommand\n\t\t *\n\t\t * @example\n\t\t * `cd` uses the \"folders\" template\n\t\t * @example\n\t\t * `ls` uses  [\"filepaths\", \"folders\"]. Why both? Because if I `ls` a directory, we want to enable a user to autoexecute on this directory. If we just did \"filepaths\" they couldn't autoexecute.\n\t\t *\n\t\t */\n\t\ttemplate?: Template;\n\t\t/**\n\t\t *\n\t\t * A function to filter and modify suggestions returned by a template\n\t\t *\n\t\t * @param templateSuggestions - the array of suggestion objects returned by the given template.\n\t\t * @returns An array of `Suggestion` objects.\n\t\t *\n\t\t * @example\n\t\t * The python spec has an arg object which has a template for \"filepaths\". However, we don't want to suggest non `.py` files. Therefore, we take the output of the template, filter out all files that don't end in `.py`, keep all folders that end with `/` and return the list of suggestions.\n\t\t */\n\t\tfilterTemplateSuggestions?: Function<TemplateSuggestion[], Suggestion[]>;\n\t\t/**\n\t\t *\n\t\t * The command you wish to run on the user's device at their shell session's current working directory.\n\t\t *\n\t\t * @remarks\n\t\t * You can either specify\n\t\t * 1. a command and args to be executed (like `[\"ls\"]` or `[\"git\", \"branch\"]`)\n\t\t * 2. a function to generate the command and args to be executed. The function takes in an array of tokens of the user input and should output a array of string (command and args). You use a function when the script you run is dependent upon one of the tokens the user has already input (for instance an app name, a Kubernetes token etc.)\n\t\t * After executing the script, the stdout output will be passed to one of `splitOn` or `postProcess` for further processing to produce suggestion objects.\n\t\t *\n\t\t * @example\n\t\t * `git checkout <branch>` takes one argument which is a git branch. Its arg object has a generator with a `script: [\"git\", \"branch\"]\"`. The stdout output of this shell command is then passed into the postProcess function to generate the final suggestions.\n\t\t */\n\t\tscript?:\n\t\t| string[]\n\t\t| Function<string[], string[] | undefined> // <-- VS Code edit to make results correct\n\t\t| ExecuteCommandInput\n\t\t| Function<string[], ExecuteCommandInput>;\n\t\t/**\n\t\t * Set the execution timeout of the command specified in the `script` prop.\n\t\t * @defaultValue 5000\n\t\t */\n\t\tscriptTimeout?: number;\n\t\t/**\n\t\t *\n\t\t * Process the string output from the `script` prop and return a list of suggestions\n\t\t *\n\t\t * @param out - The output of the script that was executed on the user's device\n\t\t * @param tokens - a tokenized array of what the user has typed\n\t\t * @returns An array of `Suggestion` objects.\n\t\t *\n\t\t */\n\t\tpostProcess?: (out: string, tokens: string[]) => (Suggestion | null)[] | undefined; // <-- VS Code edit to make results correct\n\t\t/**\n\t\t * Syntactic sugar for `postProcess` function\n\t\t *\n\t\t * @remarks\n\t\t * This takes in the text output of `script`, splits it on the string you provide here, and then automatically generates an array of suggestion objects for each item.\n\t\t *\n\t\t * @example\n\t\t * Specify `\\n` and Fig will split on new lines, and turn each line into a suggestion object with `name` prop equal to the value on the line.\n\t\t */\n\t\tsplitOn?: string;\n\t\t/**\n\t\t *\n\t\t * A function run on every keystroke that determines whether Fig should invalidate its cached list of suggestions and instead regenerate its list of suggestions.\n\t\t *\n\t\t * @remarks\n\t\t * A note on how Fig works: Suggestions vs Filtered Suggestions\n\t\t * Suggestions: Whenever you type a space indicating the start of a new token, Fig will regenerate a new list of suggestions e.g. `git[space]` will generate a list of suggestions for every subcommand, option, and arg\n\t\t * Filtered Suggestions: When you type within the same token (e.g. `git c` -> `git ch`), Fig takes the token you are currently typing in and uses it to filter over the list of suggestions you have cached. e.g. `git c`. The list of suggestions is the same as before, but the filtered suggestions are now `commit`, `clean`, `clone`, and `checkout`.\n\t\t *\n\t\t * **Why don't we recalculate suggestions on each keystroke?**\n\t\t * 1. It's expensive\n\t\t * 2. We don't need to. The caching works nicely\n\t\t *\n\t\t * **So what does the trigger do?**\n\t\t * The trigger function is run on every keystroke and tells us whether or not we should invalidate the cache and regenerate a list of suggestions.\n\t\t * The trigger function is almost always used with a `custom` generator and the `getQueryTerm` function to make the autocomplete experience really good (it's how suggestions for `cd` work)\n\t\t * It is especially beneficial when you want to generate suggestions for an argument contained inside a single string that is not separated by a space.\n\t\t *\n\t\t * **What is important to remember?**\n\t\t * This function looks at the CHANGE in a token, not the current state of the token. If my token goes from `desktop` to `desktop/`, should I regenerate suggestions? Remember, users can paste text so theoretically any change is possible. It is totally valid for oldToken to be an empty string and newToken to be a 50 character string!\n\t\t *\n\t\t *\n\t\t * @param newToken - The new token that was just typed by the user e.g. \"desktop/\"\"\n\t\t * @param oldToken - The old token that was there before e.g. \"desktop\"\n\t\t * @returns A boolean of whether or not we should regenerate suggestions\n\t\t *\n\t\t * @defaultValue\n\t\t * `false`\n\t\t * It means that the function returns false ie we do not regenerate suggestion on each keystroke and instead, keep our cached list of suggestions while the user is editing the current token.\n\t\t *\n\t\t * @example\n\t\t * `chmod`: If I type `chmod u` we should generate suggestions for `u+x`, `u+r`, `u-w` etc. Whereas if I typed `chmod 7` we should generate suggestions for `755` or `777` etc.\n\t\t * The suggestion we generate depends on the new information we have. The oldToken was an empty string, the new token could be a `7` or a `u` etc...\n\t\t *\n\t\t *   All this function's job is to say whether or not we should generate new suggestions. It does not specify how to create these new suggestions. This is the job of the `script` or `custom` props. Annoyingly, you may have to implement some of the same parsing logic again. However, because this is javascript, just create a function so you don't have to repeat yourself :)\n\t\t *\n\t\t *   Note: yes, we could have generate a list of suggestions at the start for every single permutation of 777 or u+x etc, however, there are so many and this is just not performant!\n\t\t *\n\t\t * @example\n\t\t * `cd`: Let's say a user has \"cd desktop\" currently typed then the user types a \"/\" so the changes to \"cd ~/desktop/\".\n\t\t * The old token is \"~/desktop\", new token is \"desktop/\". This is a perfect time for us to generate a new list of suggestions. We previously had all the folders in my ~ directory as suggestions, but after the total number of `/` in the tokens changed, we should trigger a new set of suggestions to be generated. This new set of suggestions should then generate suggestions for the desktop directory, not the ~ directory.\n\t\t */\n\t\ttrigger?: Trigger;\n\t\t/**\n\t\t * A function that takes the token that the user has typed and determines which part of it should be used to filter over all the suggestions.\n\t\t *\n\t\t * @param token - The full token the user is currently typing\n\t\t * @returns The query term that Fig will use to filter over suggestions\n\t\t *\n\t\t * @remarks\n\t\t * Read the note above on how triggers work. Triggers and query term may seem similar but are actually different.\n\t\t *\n\t\t * The `trigger` function defines when to regenerate new suggestions.\n\t\t * The `query` term defines what characters we should use to filter over these suggestions.\n\t\t * The `getQueryTerm` function defines the queryTerm\n\t\t *\n\t\t * @example\n\t\t * `cd` has a `getQueryTerm` function that takes the token the user has typed and returns everything after the last \"/\".\n\t\t * if the user types cd `~/desktop/a`, the list of suggestions will be all the folders on the user's desktop. We want to filter over these folders with the query term `\"a\"` not `~/desktop/a`\n\t\t *\n\t\t */\n\t\tgetQueryTerm?: StringOrFunction<string, string>;\n\t\t/**\n\t\t * An async function that is similar to the function version of `script`, however, it gives you full control.\n\t\t *\n\t\t * @remarks\n\t\t * This function is effectively `script` and `postProcess` combined. It is very useful in combination with `trigger` and `getQueryTerm` to generate suggestions as the user is typing inside a token. Read the description of `trigger` for more.\n\t\t *\n\t\t * @param tokens - a tokenized array of what the user has typed\n\t\t * @param executeCommand - an async function that allows you to execute a shell command on the user's system and get the output as a string.\n\t\t * @param shellContext - an object containing a user's currentWorkingDirectory, currentProcess, and if relevant, the sshPrefix string that can be used if the user is in an SSH session.\n\t\t *\n\t\t * @returns An array of suggestion objects\n\t\t *\n\t\t * @example\n\t\t * In `cd` the custom function will combine the current working directory with everything up to the last `\"/\"` in the last token. It will then run `ls` at this path and generate a list of suggestions accordingly.\n\t\t * e.g. if the user was currently in their home directory and typed \"cd desktop/abcdef\", then the custom function would return a list of directories at the `~/desktop` directory\n\t\t * if the user was currently in their home directory and typed \"cd desktop/my_folder/second_folder/aaaaa\", then the custom function would return a list of directories at the `~/desktop/my_folder/second_folder` directory\n\t\t * if the user was currently in their home directory and typed \"cd /usr/bin/\", then the custom function would return a list of directories at the `/usr/bin/` directory\n\t\t *\n\t\t * @example\n\t\t * ```ts\n\t\t * const generator: Fig.Generator = {\n\t\t *   custom: async (tokens, executeCommand) => {\n\t\t *     const out = await executeCommand(\"ls\");\n\t\t *     return out.split(\"\\n\").map((elm) => ({ name: elm }));\n\t\t *   },\n\t\t * };\n\t\t * ```\n\t\t */\n\t\tcustom?: (\n\t\t\ttokens: string[],\n\t\t\texecuteCommand: ExecuteCommandFunction,\n\t\t\tgeneratorContext: GeneratorContext\n\t\t) => Promise<(Suggestion | null)[] | undefined>; // <-- VS Code edit to make results correct\n\t\t/**\n\t\t *\n\t\t * Cache the response of generators for a specific period time and optionally by directory the commands were executed in.\n\t\t *\n\t\t * @remarks\n\t\t * For commands that take a long time to run, Fig gives you the option to cache their response. You can cache the response globally or just by the directory they were run in.\n\t\t * We currently have two cache strategies:\n\t\t * - `stale-while-revalidate` (default): when cache becomes stale fig will return the stale data while fetching the updated one. This strategy accepts a `ttl` (time to live) to configure how long it takes for the cache to become stale.\n\t\t * - `max-age`: will show a loading indicator when cache is stale. You need to specify a `ttl` for how long it takes for the cache to become stale.\n\t\t * You can also optionally turn on the ability to just cache by directory (`cacheByDirectory: true`)\n\t\t *\n\t\t * @example\n\t\t * The kubernetes spec makes use of this.\n\t\t *\n\t\t */\n\t\tcache?: Cache;\n\t}\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/npx.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst completionSpec: Fig.Spec = {\n\tname: 'npx',\n\tdescription: 'Execute binaries from npm packages',\n\targs: {\n\t\tname: 'command',\n\t\tisCommand: true,\n\t\tgenerators: {\n\t\t\tscript: [\n\t\t\t\t'bash',\n\t\t\t\t'-c',\n\t\t\t\t'until [[ -d node_modules/ ]] || [[ $PWD = \\'/\\' ]]; do cd ..; done; ls -1 node_modules/.bin/',\n\t\t\t],\n\t\t\tpostProcess: function (out) {\n\t\t\t\treturn out\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((name) => ({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\ticon: 'fig://icon?type=command',\n\t\t\t\t\t\tloadSpec: name,\n\t\t\t\t\t}));\n\t\t\t},\n\t\t},\n\t\tisOptional: true,\n\t},\n\n\toptions: [\n\t\t{\n\t\t\tname: ['--package', '-p'],\n\t\t\tdescription: 'Package to be installed',\n\t\t\targs: {\n\t\t\t\tname: 'package',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: '--cache',\n\t\t\targs: {\n\t\t\t\tname: 'path',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t\tdescription: 'Location of the npm cache',\n\t\t},\n\t\t{\n\t\t\tname: '--always-spawn',\n\t\t\tdescription: 'Always spawn a child process to execute the command',\n\t\t},\n\t\t{\n\t\t\tname: '-y',\n\t\t\tdescription: 'Execute npx command without prompting for confirmation',\n\t\t},\n\t\t{\n\t\t\tdescription: 'Skip installation if a package is missing',\n\t\t\tname: '--no-install',\n\t\t},\n\t\t{\n\t\t\targs: {\n\t\t\t\tname: 'path',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t\tdescription: 'Path to user npmrc',\n\t\t\tname: '--userconfig',\n\t\t},\n\t\t{\n\t\t\tname: ['--call', '-c'],\n\t\t\targs: {\n\t\t\t\tname: 'script',\n\t\t\t},\n\t\t\tdescription: 'Execute string as if inside `npm run-script`',\n\t\t},\n\t\t{\n\t\t\tname: ['--shell', '-s'],\n\t\t\tdescription: 'Shell to execute the command with, if any',\n\t\t\targs: {\n\t\t\t\tname: 'shell',\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bash',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'fish',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'zsh',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\targs: {\n\t\t\t\tname: 'shell-fallback',\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bash',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'fish',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'zsh',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tname: '--shell-auto-fallback',\n\t\t\tdescription:\n\t\t\t\t'Generate shell code to use npx as the \"command not found\" fallback',\n\t\t},\n\t\t{\n\t\t\tname: '--ignore-existing',\n\t\t\tdescription:\n\t\t\t\t'Ignores existing binaries in $PATH, or in the localproject. This forces npx to do a temporary install and use the latest version',\n\t\t},\n\t\t{\n\t\t\tname: ['--quiet', '-q'],\n\t\t\tdescription:\n\t\t\t\t'Suppress output from npx itself. Subcommands will not be affected',\n\t\t},\n\t\t{\n\t\t\tname: '--npm',\n\t\t\targs: {\n\t\t\t\tname: 'path to binary',\n\t\t\t\ttemplate: 'filepaths',\n\t\t\t},\n\t\t\tdescription: 'Npm binary to use for internal operations',\n\t\t},\n\t\t{\n\t\t\targs: {},\n\t\t\tdescription: 'Extra node argument when calling a node binary',\n\t\t\tname: ['--node-arg', '-n'],\n\t\t},\n\t\t{\n\t\t\tdescription: 'Show version number',\n\t\t\tname: ['--version', '-v'],\n\t\t},\n\t\t{\n\t\t\tdescription: 'Show help',\n\t\t\tname: ['--help', '-h'],\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/set-location.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nconst cdSpec: Fig.Spec = {\n\tname: 'Set-Location',\n\tdescription: 'Change the shell working directory',\n\targs: {\n\t\tname: 'folder',\n\t\ttemplate: 'folders',\n\t\tsuggestions: [\n\t\t\t{\n\t\t\t\tname: '-',\n\t\t\t\tdescription: 'Go to previous directory in history stack',\n\t\t\t\thidden: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: '+',\n\t\t\t\tdescription: 'Go to next directory in history stack',\n\t\t\t\thidden: true,\n\t\t\t},\n\t\t],\n\t}\n};\n\nexport default cdSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/apt.ts",
    "content": "import { filepaths } from '../../helpers/filepaths';\n\nconst packages: Fig.Generator = {\n\t// only trigger when the token length transitions to or from 0\n\ttrigger: (current, previous) =>\n\t\tcurrent.length === 0 || (previous.length === 0 && current.length > 0),\n\n\t// have to use `custom` to skip running the script when length is 0\n\tcustom: async (tokens, executeShellCommand) => {\n\t\tconst finalToken = tokens[tokens.length - 1];\n\t\tif (finalToken.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\tconst { stdout } = await executeShellCommand({\n\t\t\tcommand: \"apt\",\n\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\targs: [\"list\"],\n\t\t});\n\n\t\t// Only lines matching the first character, delete characters after '/'\n\t\treturn stdout\n\t\t\t.trim()\n\t\t\t.split(\"\\n\")\n\t\t\t.filter((name) => name.startsWith(finalToken))\n\t\t\t.map((name) => name.replace(/\\/.*/, \"\"))\n\t\t\t.map((name) => ({\n\t\t\t\tname,\n\t\t\t\tdescription: \"Package\",\n\t\t\t\ticon: \"📦\",\n\t\t\t\t// make the suggestions... actually show up\n\t\t\t\t// see https://github.com/withfig/autocomplete/pull/1429#discussion_r950688126\n\t\t\t\tpriority: 50,\n\t\t\t}));\n\t},\n};\n\nconst installedPackages: Fig.Generator = {\n\tscript: [\"apt\", \"list\", \"--installed\"],\n\tpostProcess: function (a) {\n\t\treturn a\n\t\t\t.trim()\n\t\t\t.split(\"\\n\")\n\t\t\t.map((b) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: b.substring(0, b.indexOf(\"/\")),\n\t\t\t\t\tdescription: \"Package\",\n\t\t\t\t\ticon: \"📦\",\n\t\t\t\t};\n\t\t\t});\n\t},\n};\n\nconst upgradablePackages: Fig.Generator = {\n\tscript: [\"apt\", \"list\", \"--upgradable\"],\n\tpostProcess: function (a) {\n\t\treturn a\n\t\t\t.trim()\n\t\t\t.split(\"\\n\")\n\t\t\t.map((b) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: b.substring(0, b.indexOf(\"/\")),\n\t\t\t\t\tdescription: \"Package\",\n\t\t\t\t\ticon: \"📦\",\n\t\t\t\t};\n\t\t\t});\n\t},\n};\n\nconst yesNoOptions: Fig.Option[] = [\n\t{\n\t\tname: \"-y\",\n\t\tdescription: \"Assume yes to all prompts\",\n\t\texclusiveOn: [\"--assume-no\"],\n\t},\n\t{\n\t\tname: \"--assume-no\",\n\t\tdescription: \"Assume no to all prompts\",\n\t\texclusiveOn: [\"-y\"],\n\t},\n];\n\nconst installationOptions: Fig.Option[] = [\n\t{\n\t\tname: [\"-d\", \"--download-only\"],\n\t\tdescription:\n\t\t\t\"For any operation that would download packages, download them, but do nothing else\",\n\t},\n\t{\n\t\tname: \"--no-download\",\n\t\tdescription:\n\t\t\t\"Do not download packages, attempt to use already downloaded packages\",\n\t},\n];\n\nconst simulate: Fig.Option[] = [\n\t{\n\t\tname: [\"-s\", \"--simulate\"],\n\t\tdescription:\n\t\t\t\"Simulate running this command and show it's output, without actually changing anything\",\n\t},\n];\n\nconst completionSpec: Fig.Spec = {\n\tname: \"apt\",\n\tdescription: \"Package manager for Debian-based Linux distributions\",\n\tsubcommands: [\n\t\t{\n\t\t\tname: \"update\",\n\t\t\tdescription: \"Update the package database\",\n\t\t\toptions: [...yesNoOptions],\n\t\t},\n\t\t{\n\t\t\tname: \"upgrade\",\n\t\t\tdescription: \"Install all available upgrades\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"Package(s) to upgrade\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t\tgenerators: upgradablePackages,\n\t\t\t},\n\t\t\toptions: [...installationOptions, ...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: \"full-upgrade\",\n\t\t\tdescription:\n\t\t\t\t\"Install available upgrades, removing currently installed packages if needed to upgrade the system as a whole\",\n\t\t\toptions: [...installationOptions, ...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: \"install\",\n\t\t\tdescription: \"Install package(s)\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to install\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: [packages, filepaths({ extensions: [\"deb\"] })],\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...installationOptions,\n\t\t\t\t...yesNoOptions,\n\t\t\t\t...simulate,\n\t\t\t\t{\n\t\t\t\t\tname: \"--reinstall\",\n\t\t\t\t\tdescription: \"Reinstall the package if it is already installed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--fix-broken\"],\n\t\t\t\t\tdescription: \"Attempt to fix broken packages\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"reinstall\",\n\t\t\tdescription: \"Reinstall package(s)\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to reinstall\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: installedPackages,\n\t\t\t},\n\t\t\toptions: [...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: \"remove\",\n\t\t\tdescription: \"Remove package(s)\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to remove\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: installedPackages,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...yesNoOptions,\n\t\t\t\t...simulate,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--fix-broken\"],\n\t\t\t\t\tdescription: \"Attempt to fix broken packages\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"purge\",\n\t\t\tdescription: \"Remove package(s) and their configuration files\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to purge\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: installedPackages,\n\t\t\t},\n\t\t\toptions: [...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: [\"autoremove\", \"auto-remove\"],\n\t\t\tdescription: \"Remove unused packages\",\n\t\t\toptions: [...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: \"list\",\n\t\t\tdescription: \"List packages\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--installed\",\n\t\t\t\t\tdescription: \"List installed packages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--upgradable\",\n\t\t\t\t\tdescription: \"List upgradable packages\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"search\",\n\t\t\tdescription: \"Search for packages\",\n\t\t\targs: {\n\t\t\t\tname: \"query\",\n\t\t\t\tdescription: \"The query to search for\",\n\t\t\t},\n\t\t\toptions: [...yesNoOptions],\n\t\t},\n\t\t{\n\t\t\tname: \"show\",\n\t\t\tdescription: \"Show package details\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to show\",\n\t\t\t\tgenerators: packages,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"satisfy\",\n\t\t\tdescription: \"Satisfy package dependencies\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to satisfy\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: packages,\n\t\t\t},\n\t\t\toptions: [...installationOptions, ...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: \"clean\",\n\t\t\tdescription: \"Remove downloaded package files\",\n\t\t\toptions: [...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: \"edit-sources\",\n\t\t\tdescription: \"Edit the list of package sources\",\n\t\t\toptions: [...yesNoOptions],\n\t\t},\n\t\t{\n\t\t\t// docs for this weren't the greatest, some descriptions might be slightly (or very) wrong.\n\t\t\tname: \"source\",\n\t\t\tdescription: \"Fetch package source files\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to get source files for\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: packages,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...installationOptions,\n\t\t\t\t...yesNoOptions,\n\t\t\t\t...simulate,\n\t\t\t\t{\n\t\t\t\t\tname: \"--compile\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Compile the package to a binary using dpkg-buildpackage\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--only-source\",\n\t\t\t\t\t// no idea how this works\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--host-architecture\",\n\t\t\t\t\tdescription: \"The architecture to build for\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"architecture\",\n\t\t\t\t\t\tdescription: \"The architecture to build for\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\t// I don't understand this either\n\t\t\tname: \"build-dep\",\n\t\t\tdescription:\n\t\t\t\t\"Install/remove packages in an attempt to satisfy the build dependencies for a source package\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to build dependencies for\",\n\t\t\t\tgenerators: packages,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...installationOptions,\n\t\t\t\t...yesNoOptions,\n\t\t\t\t...simulate,\n\t\t\t\t{\n\t\t\t\t\tname: \"--host-architecture\",\n\t\t\t\t\tdescription: \"The architecture to build for\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"architecture\",\n\t\t\t\t\t\tdescription: \"The architecture to build for\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--only-source\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"download\",\n\t\t\tdescription: \"Download package binary into the current directory\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to download\",\n\t\t\t\tgenerators: packages,\n\t\t\t},\n\t\t\toptions: [...installationOptions, ...yesNoOptions],\n\t\t},\n\t\t{\n\t\t\tname: [\"autoclean\", \"auto-clean\"],\n\t\t\tdescription:\n\t\t\t\t\"Like clean, but only removes package files that can no longer be downloaded\",\n\t\t\toptions: [...installationOptions, ...yesNoOptions, ...simulate],\n\t\t},\n\t\t{\n\t\t\tname: \"changelog\",\n\t\t\tdescription: \"Show the changelog for a package\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tdescription: \"The package you want to show the changelog for\",\n\t\t\t\tgenerators: packages,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [...installationOptions, ...yesNoOptions],\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: [\"-h\", \"--help\"],\n\t\t\tdescription: \"Print help message and exit\",\n\t\t\tisPersistent: true,\n\t\t\tpriority: 40,\n\t\t},\n\t\t{\n\t\t\tname: [\"-v\", \"--version\"],\n\t\t\tdescription: \"Print version information and exit\",\n\t\t\tisPersistent: true,\n\t\t\tpriority: 40,\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/brew.ts",
    "content": "const servicesGenerator = (action: string): Fig.Generator => ({\n\tscript: [\"bash\", \"-c\", \"brew services list | sed -e 's/ .*//' | tail -n +2\"],\n\tpostProcess: function (out) {\n\t\treturn out\n\t\t\t.split(\"\\n\")\n\t\t\t.filter((line) => !line.includes(\"unbound\"))\n\t\t\t.map((line) => ({\n\t\t\t\tname: line,\n\t\t\t\ticon: \"fig://icon?type=package\",\n\t\t\t\tdescription: `${action} ${line}`,\n\t\t\t}));\n\t},\n});\n\nconst repositoriesGenerator = (): Fig.Generator => ({\n\tscript: [\"brew\", \"tap\"],\n\tpostProcess: (out) => {\n\t\treturn out.split(\"\\n\").map((line) => ({ name: line }));\n\t},\n});\n\nconst formulaeGenerator: Fig.Generator = {\n\tscript: [\"brew\", \"list\", \"-1\"],\n\tpostProcess: function (out) {\n\t\treturn out\n\t\t\t.split(\"\\n\")\n\t\t\t.filter((line) => !line.includes(\"=\"))\n\t\t\t.map((formula) => ({\n\t\t\t\tname: formula,\n\t\t\t\ticon: \"🍺\",\n\t\t\t\tdescription: \"Installed formula\",\n\t\t\t}));\n\t},\n};\n\nconst outdatedformulaeGenerator: Fig.Generator = {\n\tscript: [\"brew\", \"outdated\", \"-q\"],\n\tpostProcess: function (out) {\n\t\treturn out.split(\"\\n\").map((formula) => ({\n\t\t\tname: formula,\n\t\t\ticon: \"🍺\",\n\t\t\tdescription: \"Outdated formula\",\n\t\t}));\n\t},\n};\n\nconst generateAllFormulae: Fig.Generator = {\n\tscript: [\"brew\", \"formulae\"],\n\tpostProcess: function (out) {\n\t\treturn out.split(\"\\n\").map((formula) => ({\n\t\t\tname: formula,\n\t\t\ticon: \"🍺\",\n\t\t\tdescription: \"Formula\",\n\t\t\tpriority: 51,\n\t\t}));\n\t},\n};\n\nconst generateAllCasks: Fig.Generator = {\n\tscript: [\"brew\", \"casks\"],\n\tpostProcess: function (out) {\n\t\treturn out.split(\"\\n\").map((cask) => ({\n\t\t\tname: cask,\n\t\t\ticon: \"🍺\",\n\t\t\tdescription: \"Cask\",\n\t\t\tpriority: 52,\n\t\t}));\n\t},\n};\nconst generateAliases: Fig.Generator = {\n\tscript: [\n\t\t\"bash\",\n\t\t\"-c\",\n\t\t'find ~/.brew-aliases/ -type f ! -name \"*.*\" -d 1 | sed \"s/.*\\\\///\"',\n\t],\n\tpostProcess: function (out) {\n\t\treturn out\n\t\t\t.split(\"\\n\")\n\t\t\t.filter((line) => line && line.trim() !== \"\")\n\t\t\t.map((line) => ({\n\t\t\t\tname: line,\n\t\t\t\ticon: \"fig://icon?type=command\",\n\t\t\t\tdescription: `Execute alias ${line}`,\n\t\t\t}));\n\t},\n};\n\nconst commonOptions: Fig.Option[] = [\n\t{\n\t\tname: [\"-d\", \"--debug\"],\n\t\tdescription: \"Display any debugging information\",\n\t},\n\t{\n\t\tname: [\"-q\", \"--quiet\"],\n\t\tdescription: \"Make some output more quiet\",\n\t},\n\t{\n\t\tname: [\"-v\", \"--verbose\"],\n\t\tdescription: \"Make some output more verbose\",\n\t},\n\t{ name: [\"-h\", \"--help\"], description: \"Show help message\" },\n];\n\nconst completionSpec: Fig.Spec = {\n\tname: \"brew\",\n\tdescription: \"Package manager for macOS\",\n\tsubcommands: [\n\t\t{\n\t\t\tname: \"list\",\n\t\t\tdescription: \"List all installed formulae\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"--formula\", \"--formulae\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List only formulae, or treat all named arguments as formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--cask\", \"--casks\"],\n\t\t\t\t\tdescription: \"List only casks, or treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unbrewed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List files in Homebrew's prefix not installed by Homebrew. (disabled; replaced by brew --prefix --unbrewed)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--full-name\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print formulae with fully-qualified names. Unless --full-name, --versions or\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pinned\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List only pinned formulae, or only the specified (pinned) formulae if formula are provided\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--versions\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show the version number for installed formulae, or only the specified formulae if formula are provided\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--multiple\",\n\t\t\t\t\tdescription: \"Only show formulae with multiple versions installed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pinned\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List only pinned formulae, or only the specified (pinned) formulae if formula are provided. See also pin, unpin\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-1\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Force output to be one entry per line. This is the default when output is not to a terminal\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-l\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List formulae and/or casks in long format. Has no effect when a formula or cask name is passed as an argument\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-r\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Reverse the order of the formulae and/or casks sort to list the oldest entries first. Has no effect when a formula or cask name is passed as an argument\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-t\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Sort formulae and/or casks by time modified, listing most recently modified first. Has no effect when a formula or cask name is passed as an argument\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"ls\",\n\t\t\tdescription: \"List all installed formulae\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--formula\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List only formulae, or treat all named arguments as formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cask\",\n\t\t\t\t\tdescription: \"List only casks, or treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unbrewed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List files in Homebrew's prefix not installed by Homebrew. (disabled; replaced by brew --prefix --unbrewed)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--full-name\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print formulae with fully-qualified names. Unless --full-name, --versions or\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pinned\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List only pinned formulae, or only the specified (pinned) formulae if formula are provided\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--versions\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show the version number for installed formulae, or only the specified formulae if formula are provided\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--multiple\",\n\t\t\t\t\tdescription: \"Only show formulae with multiple versions installed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pinned\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List only pinned formulae, or only the specified (pinned) formulae if formula are provided\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-1\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Force output to be one entry per line. This is the default when output is not to a terminal\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-l\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List formulae and/or casks in long format. Has no effect when a formula or cask name is passed as an argument\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-r\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Reverse the order of the formulae and/or casks sort to list the oldest entries first. Has no effect when a formula or cask name is passed as an argument\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-t\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Sort formulae and/or casks by time modified, listing most recently modified first. Has no effect when a formula or cask name is passed as an argument\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"leaves\",\n\t\t\tdescription:\n\t\t\t\t\"List installed formulae that are not dependencies of another installed formula\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-r\", \"--installed-on-request\"],\n\t\t\t\t\tdescription: \"Show manually installed formula\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--installed-as-dependency\"],\n\t\t\t\t\tdescription: \"Show installed formula as dependencies\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"doctor\",\n\t\t\tdescription: \"Check your system for potential problems\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--list-checks\",\n\t\t\t\t\tdescription: \"List all audit methods\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-D\", \"--audit-debug\"],\n\t\t\t\t\tdescription: \"Enable debugging and profiling of audit methods\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"abv\", \"info\"],\n\t\t\tdescription: \"Display brief statistics for your Homebrew installation\",\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tdescription: \"Formula or cask to summarize\",\n\t\t\t\tgenerators: [generateAllFormulae, generateAllCasks],\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"--cask\", \"--casks\"],\n\t\t\t\t\tdescription: \"List only casks, or treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--analytics\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List global Homebrew analytics data or, if specified, installation and build error data for formula\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--days\",\n\t\t\t\t\tdescription: \"How many days of analytics data to retrieve\",\n\t\t\t\t\texclusiveOn: [\"--analytics\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"days\",\n\t\t\t\t\t\tdescription: \"Number of days of data to retrieve\",\n\t\t\t\t\t\tsuggestions: [\"30\", \"90\", \"365\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--category\",\n\t\t\t\t\tdescription: \"Which type of analytics data to retrieve\",\n\t\t\t\t\texclusiveOn: [\"--analytics\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tgenerators: {\n\t\t\t\t\t\t\tcustom: async (ctx) => {\n\t\t\t\t\t\t\t\t// if anything provided after the subcommand does not begin with '-'\n\t\t\t\t\t\t\t\t// then a formula has been provided and we should provide info on it\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tctx.slice(2, ctx.length - 1).some((token) => token[0] !== \"-\")\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\treturn [\"install\", \"install-on-request\", \"build-error\"].map(\n\t\t\t\t\t\t\t\t\t\t(sugg) => ({\n\t\t\t\t\t\t\t\t\t\t\tname: sugg,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// if no formulas are specified, then we should provide system info\n\t\t\t\t\t\t\t\treturn [\"cask-install\", \"os-version\"].map((sugg) => ({\n\t\t\t\t\t\t\t\t\tname: sugg,\n\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--github\",\n\t\t\t\t\tdescription: \"Open the GitHub source page for formula in a browser\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--json\",\n\t\t\t\t\tdescription: \"Print a JSON representation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--installed\",\n\t\t\t\t\texclusiveOn: [\"--json\"],\n\t\t\t\t\tdescription: \"Print JSON of formulae that are currently installed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--all\",\n\t\t\t\t\texclusiveOn: [\"--json\"],\n\t\t\t\t\tdescription: \"Print JSON of all available formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Show more verbose analytics data for formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--formula\",\n\t\t\t\t\tdescription: \"Treat all named arguments as formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cash\",\n\t\t\t\t\tdescription: \"Treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription: \"Display any debugging information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"List only the names of outdated kegs\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Get help with services command\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"update\",\n\t\t\tdescription: \"Fetch the newest version of Homebrew and all formulae\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"Always do a slower, full update check\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print the directories checked and git operations performed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Display a trace of all shell commands as they are executed\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Show help message\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--merge\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use git merge to apply updates (rather than git rebase)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--preinstall\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Run on auto-updates (e.g. before brew install). Skips some slower steps\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"outdated\",\n\t\t\tdescription:\n\t\t\t\t\"List installed casks and formulae that have an updated version available\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription: \"Display any debugging information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"List only the names of outdated kegs\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Include detailed version information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Show help message for the outdated command\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--cask\", description: \"List only outdated casks\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--fetch-HEAD\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Fetch the upstream repository to detect if the HEAD installation of the formula is outdated\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--formula\", description: \"List only outdated formulae\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--greedy\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print outdated casks with auto_updates or version :latest\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--greedy-latest\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print outdated casks including those with version :latest\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--greedy-auto-updates\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print outdated casks including those with auto_updates true\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--json\", description: \"Print output in JSON format\" },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"pin\",\n\t\t\tdescription: \"Pin formula, preventing them from being upgraded\",\n\t\t\toptions: commonOptions,\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"unpin\",\n\t\t\tdescription: \"Unpin formula, allowing them to be upgraded\",\n\t\t\toptions: commonOptions,\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"upgrade\",\n\t\t\tdescription:\n\t\t\t\t\"Upgrade outdated casks and outdated, unpinned formulae using the same options they were originally installed with, plus any appended brew formula options\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If brewing fails, open an interactive debugging session with access to IRB or a shell inside the temporary build directory\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install formulae without checking for previously installed keg-only or non-migrated versions. When installing casks, overwrite existing files (binaries and symlinks are excluded, unless originally from the same cask)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Print the verification and postinstall steps\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show what would be upgraded, but do not actually upgrade anything\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--build-from-source\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Compile formula from source even if a bottle is provided. Dependencies will still be installed from bottles if they are available\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--interactive\"],\n\t\t\t\t\tdescription: \"Download and patch formula, then open a shell\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-g\", \"--git\"], description: \"Create a Git repository\" },\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Make some output more quiet\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Show this message\" },\n\t\t\t\t{\n\t\t\t\t\tname: [\"--formula\", \"--formulae\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Treat all named arguments as formulae. If no named arguments are specified, upgrade only outdated formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--env\",\n\t\t\t\t\tdescription: \"Disabled other than for internal Homebrew use\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-dependencies\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"An unsupported Homebrew development flag to skip installing any dependencies of any kind. If the dependencies are not already present, the formula will have issues. If you're not developing Homebrew, consider adjusting your PATH rather than using this flag\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--only-dependencies\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install the dependencies with specified options but do not install the formula itself\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cc\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Attempt to compile using the specified compiler, which should be the name of the compiler's executable\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"compiler\",\n\t\t\t\t\t\tsuggestions: [\"gcc-7\", \"llvm_clang\", \"clang\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--force-bottle\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install from a bottle if it exists for the current or newest version of macOS, even if it would not normally be used for installation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--include-test\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install testing dependencies required to run brew test formula\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--HEAD\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If formula defines it, install the HEAD version, aka. main, trunk, unstable, master\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--fetch-HEAD\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Fetch the upstream repository to detect if the HEAD installation of the formula is outdated. Otherwise, the repository's HEAD will only be checked for updates when a new stable or development version has been released\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-pinned\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Set a successful exit status even if pinned formulae are not upgraded\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--keep-tmp\",\n\t\t\t\t\tdescription: \"Retain the temporary files created during installation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--build-bottle\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Prepare the formula for eventual bottling during installation, skipping any post-install steps\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--bottle-arch\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optimise bottles for the specified architecture rather than the oldest architecture supported by the version of macOS the bottles are built on\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--display-times\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print install times for each formula at the end of the run\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--cask\", \"--casks\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Treat all named arguments as casks. If no named arguments are specified, upgrade only outdated casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--binaries\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable linking of helper executables (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--no-binaries\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-binaries\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable linking of helper executables (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--binaries\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--require-sha\",\n\t\t\t\t\tdescription: \"Require all casks to have a checksum\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--quarantine\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable quarantining of downloads (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--no-quarantine\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-quarantine\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable quarantining of downloads (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--quarantine\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--skip-cask-deps\",\n\t\t\t\t\tdescription: \"Skip installing cask dependencies\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--greedy\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Also include casks with auto_updates true or version :latest\",\n\t\t\t\t\texclusiveOn: [\"--greedy-latest\", \"--greedy-auto-updates\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--greedy-latest\",\n\t\t\t\t\tdescription: \"Also include casks with version :latest\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--greedy-auto-updates\",\n\t\t\t\t\tdescription: \"Also include casks with auto_updates true\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--appdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Applications (default: /Applications)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--colorpickerdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Color Pickers (default: ~/Library/ColorPickers)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prefpanedir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Preference Panes (default: ~/Library/PreferencePanes)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--qlplugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for QuickLook Plugins (default: ~/Library/QuickLook)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--mdimporterdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Spotlight Plugins (default: ~/Library/Spotlight)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--dictionarydir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Dictionaries (default: ~/Library/Dictionaries)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--fontdir\",\n\t\t\t\t\tdescription: \"Target location for Fonts (default: ~/Library/Fonts)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--servicedir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Services (default: ~/Library/Services)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--input-methoddir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Input Methods (default: ~/Library/Input Methods)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--internet-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Internet Plugins (default: ~/Library/Internet Plug-Ins)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--audio-unit-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Audio Unit Plugins (default: ~/Library/Audio/Plug-Ins/Components)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--vst-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for VST Plugins (default: ~/Library/Audio/Plug-Ins/VST)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--vst3-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for VST3 Plugins (default: ~/Library/Audio/Plug-Ins/VST3)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--screen-saverdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Screen Savers (default: ~/Library/Screen Savers)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--language\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Comma-separated list of language codes to prefer for cask installation. The first matching language is used, otherwise it reverts to the cask's default language. The default value is the language of your system\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t\tname: \"outdated_formula|outdated_cask\",\n\t\t\t\tgenerators: outdatedformulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"search\",\n\t\t\tdescription:\n\t\t\t\t\"Perform a substring search of cask tokens and formula names\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--formula\",\n\t\t\t\t\tdescription: \"Search online and locally for formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cask\",\n\t\t\t\t\tdescription: \"Search online and locally for casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--desc\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Search for formulae with a description matching text and casks with a name matching text\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pull-request\",\n\t\t\t\t\tdescription: \"Search for GitHub pull requests containing text\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--open\",\n\t\t\t\t\tdescription: \"Search for only open GitHub pull requests\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--closed\",\n\t\t\t\t\tdescription: \"Search for only closed GitHub pull requests\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--repology\", \"--macports\"],\n\t\t\t\t\tdescription: \"Search for text in the given database\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--fink\", \"--opensuse\"],\n\t\t\t\t\tdescription: \"Search for text in the given database\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--fedora\", \"--debian\"],\n\t\t\t\t\tdescription: \"Search for text in the given database\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ubuntu\",\n\t\t\t\t\tdescription: \"Search for text in the given database\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"config\",\n\t\t\tdescription: \"Show Homebrew and system configuration info\",\n\t\t},\n\t\t{\n\t\t\tname: \"postinstall\",\n\t\t\tdescription: \"Rerun the post install step for formula\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription: \"Display any debugging information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Make some output more verbose\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Make some output more quiet\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Show this message\" },\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"install\",\n\t\t\tdescription: \"Install <formula>\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install formulae without checking for previously installed keg-only or non-migrated versions. When installing casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Print the verification and postinstall steps\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--build-from-source\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Compile formula from source even if a bottle is provided. Dependencies will still be installed from bottles if they are available\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--interactive\"],\n\t\t\t\t\tdescription: \"Download and patch formula\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-g\", \"--git\"], description: \"Create a Git repository\" },\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Make some output more quiet\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Show this message\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--formula\",\n\t\t\t\t\tdescription: \"Treat all named arguments as formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--env\",\n\t\t\t\t\tdescription: \"Disabled other than for internal Homebrew use\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-dependencies\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"An unsupported Homebrew development flag to skip installing any dependencies of any kind. If the dependencies are not already present, the formula will have issues. If you're not developing Homebrew, consider adjusting your PATH rather than using this flag\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--only-dependencies\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install the dependencies with specified options but do not install the formula itself\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cc\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Attempt to compile using the specified compiler, which should be the name of the compiler's executable\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"compiler\",\n\t\t\t\t\t\tsuggestions: [\"gcc-7\", \"llvm_clang\", \"clang\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--force-bottle\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install from a bottle if it exists for the current or newest version of macOS, even if it would not normally be used for installation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--include-test\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install testing dependencies required to run brew test formula\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--HEAD\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If formula defines it, install the HEAD version, aka. main, trunk, unstable, master\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--fetch-HEAD\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Fetch the upstream repository to detect if the HEAD installation of the formula is outdated. Otherwise, the repository's HEAD will only be checked for updates when a new stable or development version has been released\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--keep-tmp\",\n\t\t\t\t\tdescription: \"Retain the temporary files created during installation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--build-bottle\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Prepare the formula for eventual bottling during installation, skipping any post-install steps\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--bottle-arch\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optimise bottles for the specified architecture rather than the oldest architecture supported by the version of macOS the bottles are built on\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--display-times\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print install times for each formula at the end of the run\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cask\",\n\t\t\t\t\tdescription: \"--casks Treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--binaries\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable linking of helper executables (default: enabled)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-binaries\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable linking of helper executables (default: enabled)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--require-sha\",\n\t\t\t\t\tdescription: \"Require all casks to have a checksum\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--quarantine\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable quarantining of downloads (default: enabled)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-quarantine\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable quarantining of downloads (default: enabled)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--skip-cask-deps\",\n\t\t\t\t\tdescription: \"Skip installing cask dependencies\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--appdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Applications (default: /Applications)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--colorpickerdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Color Pickers (default: ~/Library/ColorPickers)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prefpanedir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Preference Panes (default: ~/Library/PreferencePanes)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--qlplugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for QuickLook Plugins (default: ~/Library/QuickLook)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--mdimporterdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Spotlight Plugins (default: ~/Library/Spotlight)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--dictionarydir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Dictionaries (default: ~/Library/Dictionaries)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--fontdir\",\n\t\t\t\t\tdescription: \"Target location for Fonts (default: ~/Library/Fonts)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--servicedir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Services (default: ~/Library/Services)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--input-methoddir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Input Methods (default: ~/Library/Input Methods)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--internet-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Internet Plugins (default: ~/Library/Internet Plug-Ins)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--audio-unit-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Audio Unit Plugins (default: ~/Library/Audio/Plug-Ins/Components)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--vst-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for VST Plugins (default: ~/Library/Audio/Plug-Ins/VST)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--vst3-plugindir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for VST3 Plugins (default: ~/Library/Audio/Plug-Ins/VST3)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--screen-saverdir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target location for Screen Savers (default: ~/Library/Screen Savers)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"location\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--language\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Comma-separated list of language codes to prefer for cask installation. The first matching language is used, otherwise it reverts to the cask's default language. The default value is the language of your system\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tdescription: \"Formula or cask to install\",\n\t\t\t\tgenerators: [generateAllFormulae, generateAllCasks],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"reinstall\",\n\t\t\tdescription:\n\t\t\t\t\"Uninstall and then reinstall a formula or cask using the same options it was originally installed with, plus any appended options specific to a formula\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If brewing fails, open an interactive debugging session with access to IRB or a shell inside the temporary build directory\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install formulae without checking for previously installed keg-only or non-migrated versions. When installing casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Print the verification and postinstall steps\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--build-from-source\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Compile formula from source even if a bottle is provided. Dependencies will still be installed from bottles if they are available\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--interactive\"],\n\t\t\t\t\tdescription: \"Download and patch formula\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-g\", \"--git\"], description: \"Create a Git repository\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--formula\",\n\t\t\t\t\tdescription: \"Treat all named arguments as formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--force-bottle\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install from a bottle if it exists for the current or newest version of macOS, even if it would not normally be used for installation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--keep-tmp\",\n\t\t\t\t\tdescription: \"Retain the temporary files created during installation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--display-times\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print install times for each formula at the end of the run\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cask\",\n\t\t\t\t\tdescription: \"--casks Treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--binaries\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable linking of helper executables (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--no-binaries\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-binaries\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable linking of helper executables (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--binaries\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--require-sha\",\n\t\t\t\t\tdescription: \"Require all casks to have a checksum\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--quarantine\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable quarantining of downloads (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--no-quarantine\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-quarantine\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable/enable quarantining of downloads (default: enabled)\",\n\t\t\t\t\texclusiveOn: [\"--quarantine\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--skip-cask-deps\",\n\t\t\t\t\tdescription: \"Skip installing cask dependencies\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"uninstall\", \"remove\", \"rm\"],\n\t\t\tdescription: \"Uninstall a formula or cask\",\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// NOTE: this is actually a command even if it has the double dash in the front\n\t\t\tname: \"--prefix\",\n\t\t\tdescription: \"Prefix of <formula>\",\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--unbrewed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List files in Homebrew's prefix not installed by Homebrew\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--installed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Outputs nothing and returns a failing status code if formula is not installed\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"cask\",\n\t\t\tdescription:\n\t\t\t\t\"Homebrew Cask provides a friendly CLI workflow for the administration of macOS applications distributed as binaries\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"install\",\n\t\t\t\t\tdescription: \"Installs the given cask\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"cask\",\n\t\t\t\t\t\tdescription: \"Cask to install\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"uninstall\",\n\t\t\t\t\tdescription: \"Uninstalls the given cask\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t...commonOptions,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--zap\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Remove all files associated with a cask. May remove files which are shared between applications\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--ignore-dependencies\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Don't fail uninstall, even if formula is a dependency of any installed formulae\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--formula\",\n\t\t\t\t\t\t\tdescription: \"Treat all named arguments as formulae\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--cask\",\n\t\t\t\t\t\t\tdescription: \"Treat all named arguments as casks\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisVariadic: true,\n\n\t\t\t\t\t\tgenerators: {\n\t\t\t\t\t\t\tscript: [\"brew\", \"list\", \"-1\", \"--cask\"],\n\t\t\t\t\t\t\tpostProcess: function (out) {\n\t\t\t\t\t\t\t\treturn out.split(\"\\n\").map((formula) => {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tname: formula,\n\t\t\t\t\t\t\t\t\t\ticon: \"🍺\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Installed formula\",\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"cleanup\",\n\t\t\tdescription:\n\t\t\t\t\"Remove stale lock files and outdated downloads for all formulae and casks and remove old versions of installed formulae\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"--prune\", \"--prune=all\"],\n\t\t\t\t\tdescription: \"Remove all cache files older than specified days\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show what would be removed, but do not actually remove anything\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-s\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Scrub the cache, including downloads for even the latest versions\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prune-prefix\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Only prune the symlinks and directories from the prefix and remove no other files\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t\tgenerators: servicesGenerator(\"Cleanup\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"services\",\n\t\t\tdescription:\n\t\t\t\t\"Manage background services with macOS' launchctl(1) daemon manager\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--file\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the plist file from this location to start or run the service\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--all\",\n\t\t\t\t\tdescription: \"Run subcommand on all services\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Make some output more verbose\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Get help with services command\",\n\t\t\t\t},\n\t\t\t],\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"cleanup\",\n\t\t\t\t\tdescription: \"Remove all unused services\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"List all services\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"run\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Run the service formula without registering to launch at login (or boot)\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--all\",\n\t\t\t\t\t\t\tdescription: \"Start all services\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tgenerators: servicesGenerator(\"Run\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"start\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Start the service formula immediately and register it to launch at login\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--all\",\n\t\t\t\t\t\t\tdescription: \"Start all services\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tgenerators: servicesGenerator(\"Start\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"stop\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Stop the service formula immediately and unregister it from launching at\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--all\",\n\t\t\t\t\t\t\tdescription: \"Start all services\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tgenerators: servicesGenerator(\"Stop\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"restart\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Stop (if necessary) and start the service formula immediately and register it to launch at login (or boot)\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--all\",\n\t\t\t\t\t\t\tdescription: \"Start all services\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tgenerators: servicesGenerator(\"Restart\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"analytics\",\n\t\t\tdescription: \"Manages analytics preferences\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"on\",\n\t\t\t\t\tdescription: \"Turns on analytics\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"off\",\n\t\t\t\t\tdescription: \"Turns off analytics\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"regenerate-uuid\",\n\t\t\t\t\tdescription: \"Regenerate the UUID used for analytics\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"autoremove\",\n\t\t\tdescription:\n\t\t\t\t\"Uninstall formulae that were only installed as a dependency of another formula and are now no longer needed\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List what would be uninstalled, but do not actually uninstall anything\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"tap\",\n\t\t\tdescription: \"Tap a formula repository\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--full\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Convert a shallow clone to a full clone without untapping\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow\",\n\t\t\t\t\tdescription: \"Fetch tap as a shallow clone rather than a full clone\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--force-auto-update\",\n\t\t\t\t\tdescription: \"Auto-update tap even if it is not hosted on GitHub\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--repair\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Migrate tapped formulae from symlink-based to directory-based structure\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--list-pinned\",\n\t\t\t\t\tdescription: \"List all pinned taps\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"user/repo or URL\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"untap\",\n\t\t\tdescription: \"Remove a tapped formula repository\",\n\t\t\targs: {\n\t\t\t\tname: \"repository\",\n\t\t\t\tgenerators: repositoriesGenerator(),\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Untap even if formulae or casks from this tap are currently installed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription: \"Display any debugging information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Make some output more quiet\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Make some output more verbose\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Show help message\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"link\",\n\t\t\tdescription:\n\t\t\t\t\"Symlink all of formula's installed files into Homebrew's prefix\",\n\t\t\targs: {\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--overwrite\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Delete files that already exist in the prefix while linking\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List files which would be linked or deleted by brew link --overwrite without actually linking or deleting any files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"Allow keg-only formulae to be linked\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--HEAD\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Link the HEAD version of the formula if it is installed\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"unlink\",\n\t\t\tdescription: \"Remove symlinks for formula from Homebrew's prefix\",\n\t\t\targs: {\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tgenerators: formulaeGenerator,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List files which would be unlinked without actually unlinking or deleting any files\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"formulae\",\n\t\t\tdescription: \"List all available formulae\",\n\t\t},\n\t\t{\n\t\t\tname: \"casks\",\n\t\t\tdescription: \"List all available casks\",\n\t\t},\n\t\t{\n\t\t\tname: \"edit\",\n\t\t\tdescription: \"\",\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tdescription: \"Formula or cask to install\",\n\t\t\t\tgenerators: [generateAllFormulae, generateAllCasks],\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"--formula\", \"--formulae\"],\n\t\t\t\t\tdescription: \"Treat all named arguments as formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--cask\", \"--casks\"],\n\t\t\t\t\tdescription: \"Treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"home\", \"homepage\"],\n\t\t\tdescription:\n\t\t\t\t\"Open a formula, cask's homepage in a browser, or open Homebrew's own homepage if no argument is provided\",\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t\tname: \"formula\",\n\t\t\t\tdescription: \"Formula or cask to open homepage for\",\n\t\t\t\tgenerators: [generateAllFormulae, generateAllCasks],\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"--formula\", \"--formulae\"],\n\t\t\t\t\tdescription: \"Treat all named arguments as formulae\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--cask\", \"--casks\"],\n\t\t\t\t\tdescription: \"Treat all named arguments as casks\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"alias\",\n\t\t\tdescription: \"Manage custom user created brew aliases\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--edit\",\n\t\t\t\t\tdescription: \"Edit aliases in a text editor\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--debug\"],\n\t\t\t\t\tdescription: \"Display any debugging information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Make some output more quiet\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Make some output more verbose\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Show help message\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"alias\",\n\t\t\t\tgenerators: generateAliases,\n\t\t\t\tdescription: \"Display the alias command\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"developer\",\n\t\t\tdescription: \"Display the current state of Homebrew's developer mode\",\n\t\t\targs: {\n\t\t\t\tname: \"state\",\n\t\t\t\tdescription: \"Turn Homebrew's developer mode on or off respectively\",\n\t\t\t\tsuggestions: [\"on\", \"off\"],\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"--version\",\n\t\t\tdescription: \"The current Homebrew version\",\n\t\t},\n\t],\n\targs: {\n\t\tname: \"alias\",\n\t\tgenerators: generateAliases,\n\t\tdescription: \"Custom user defined brew alias\",\n\t\tisOptional: true,\n\t},\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/cat.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"cat\",\n\tdescription: \"Concatenate and print files\",\n\targs: {\n\t\tisVariadic: true,\n\t\ttemplate: \"filepaths\",\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-b\",\n\t\t\tdescription: \"Number the non-blank output lines, starting at 1\",\n\t\t},\n\n\t\t{\n\t\t\tname: \"-e\",\n\t\t\tdescription:\n\t\t\t\t\"Display non-printing characters (see the -v option), and display a dollar sign (‘$’) at the end of each line\",\n\t\t},\n\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription:\n\t\t\t\t\"Set an exclusive advisory lock on the standard output file descriptor.  This lock is set using fcntl(2) with the F_SETLKW command. If the output file is already locked, cat will block until the lock is acquired\",\n\t\t},\n\n\t\t{ name: \"-n\", description: \"Number the output lines, starting at 1\" },\n\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription:\n\t\t\t\t\"Squeeze multiple adjacent empty lines, causing the output to be single spaced\",\n\t\t},\n\n\t\t{\n\t\t\tname: \"-t\",\n\t\t\tdescription:\n\t\t\t\t\"Display non-printing characters (see the -v option), and display tab characters as ‘^I’\",\n\t\t},\n\n\t\t{ name: \"-u\", description: \"Disable output buffering\" },\n\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Display non-printing characters so they are visible.  Control characters print as ‘^X’ for control-X; the delete character (octal 0177) prints as ‘^?’.  Non-ASCII characters (with the high bit set) are printed as ‘M-’ (for meta) followed by the character for the low 7 bits\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/chmod.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"chmod\",\n\tdescription: \"Change file modes or Access Control Lists\",\n\targs: [\n\t\t{\n\t\t\tname: \"mode\",\n\t\t\tsuggestions: [\n\t\t\t\t// Some of the most common chmod's (non-exhaustive)\n\t\t\t\t{\n\t\t\t\t\tname: \"u+x\",\n\t\t\t\t\ttype: \"arg\",\n\t\t\t\t\tdescription: \"Give execute permission for the user\",\n\t\t\t\t\ticon: \"🔐\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"a+rx\",\n\t\t\t\t\ttype: \"arg\",\n\t\t\t\t\tdescription: \"Adds read and execute permissions for all classes\",\n\t\t\t\t\ticon: \"🔐\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"744\",\n\t\t\t\t\ttype: \"arg\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Sets read, write, and execute permissions for user, and sets read permission for Group and Others\",\n\t\t\t\t\ticon: \"🔐\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"664\",\n\t\t\t\t\ttype: \"arg\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Sets read and write permissions for user and Group, and provides read to Others\",\n\t\t\t\t\ticon: \"🔐\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"777\",\n\t\t\t\t\ttype: \"arg\",\n\t\t\t\t\tdescription: \"⚠️ allows all actions for all users\",\n\t\t\t\t\ticon: \"🔐\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\t// Modifying\n\t\t\ttemplate: \"filepaths\",\n\t\t},\n\t],\n\n\toptions: [\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription:\n\t\t\t\t\"Do not display a diagnostic message if chmod could not modify the mode for file, nor modify the exit status to reflect such failures\",\n\t\t},\n\t\t{\n\t\t\tname: \"-H\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, symbolic links on the command line are followed and hence unaffected by the command.  (Symbolic links encountered during tree traversal are not followed.)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-h\",\n\t\t\tdescription:\n\t\t\t\t\"If the file is a symbolic link, change the mode of the link itself rather than the file that the link points to\",\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, all symbolic links are followed\",\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, no symbolic links are followed. This is the default\",\n\t\t},\n\t\t{\n\t\t\tname: \"-R\",\n\t\t\tdescription:\n\t\t\t\t\"Change the modes of the file hierarchies rooted in the files, instead of just the files themselves. Beware of unintentionally matching the ``..'' hard link to the parent directory when using wildcards like ``.*''\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Cause chmod to be verbose, showing filenames as the mode is modified. If the -v flag is specified more than once, the old and new modes of the file will also be printed, in both octal and symbolic notation\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/chown.ts",
    "content": "export const existingUsersandGroups: Fig.Generator = {\n\tcustom: async function (tokens, executeShellCommand) {\n\t\tconst colonAdded = tokens.find((token) => token.includes(\":\"));\n\t\tconst nFlagUsed = tokens.find((token) => /^-.*n.*/.test(token));\n\n\t\tlet shell: string;\n\t\t// Using `:` as a trigger, check to see if a colon is added\n\t\t// in the current command. If it is, get the system groups\n\t\t// else retrieve the list of system users\n\t\tif (colonAdded) {\n\t\t\tconst { stdout } = await executeShellCommand({\n\t\t\t\tcommand: \"bash\",\n\t\t\t\targs: [\n\t\t\t\t\t\"-c\",\n\t\t\t\t\t\"dscl . -list /Groups PrimaryGroupID | tr -s ' '| sort -r\",\n\t\t\t\t],\n\t\t\t});\n\t\t\tshell = stdout;\n\t\t} else {\n\t\t\tconst { stdout } = await executeShellCommand({\n\t\t\t\tcommand: \"bash\",\n\t\t\t\targs: [\"-c\", \"dscl . -list /Users UniqueID | tr -s ' '| sort -r\"],\n\t\t\t});\n\t\t\tshell = stdout;\n\t\t}\n\n\t\treturn (\n\t\t\tshell\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t// The shell command retrieves a table\n\t\t\t\t// with rows that look like `user uid`\n\t\t\t\t// so each row is split again to get the\n\t\t\t\t// user/group and uid/gid\n\t\t\t\t.map((line) => line.split(\" \"))\n\t\t\t\t.map((value) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t// If the user has entered the option n\n\t\t\t\t\t\t// suggest the uid/gid instead of user/group\n\t\t\t\t\t\tname: nFlagUsed ? value[1] : value[0],\n\t\t\t\t\t\tdescription: colonAdded\n\t\t\t\t\t\t\t? `Group - ${nFlagUsed ? value[0] : `gid: ${value[1]}`}`\n\t\t\t\t\t\t\t: `User - ${nFlagUsed ? value[0] : `uid: ${value[1]}`}`,\n\t\t\t\t\t\ticon: colonAdded ? \"👥\" : \"👤\",\n\t\t\t\t\t\tpriority: 90,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t);\n\t},\n\ttrigger: \":\",\n\tgetQueryTerm: \":\",\n};\n\nconst completionSpec: Fig.Spec = {\n\tname: \"chown\",\n\tdescription:\n\t\t\"Change the user and/or group ownership of a given file, directory, or symbolic link\",\n\targs: [\n\t\t{\n\t\t\tname: \"owner[:group] or :group\",\n\t\t\tgenerators: existingUsersandGroups,\n\t\t},\n\t\t{\n\t\t\tname: \"file/directory\",\n\t\t\tisVariadic: true,\n\t\t\ttemplate: [\"filepaths\", \"folders\"],\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription:\n\t\t\t\t\"Don't report any failure to change file owner or group, nor modify the exit status to reflect such failures\",\n\t\t},\n\t\t{\n\t\t\tname: \"-h\",\n\t\t\tdescription:\n\t\t\t\t\"If the file is a symbolic link, change the user ID and/or the group ID of the link itself\",\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription:\n\t\t\t\t\"Interpret user ID and group ID as numeric, avoiding name lookups\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Cause chown to be verbose, showing files as the owner is modified\",\n\t\t},\n\t\t{\n\t\t\tname: \"-R\",\n\t\t\tdescription:\n\t\t\t\t\"Change the user ID and/or the group ID for the file hierarchies rooted in the files instead of just the files themselves\",\n\t\t},\n\t\t{\n\t\t\tname: \"-H\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, symbolic links on the command line are followed\",\n\t\t\texclusiveOn: [\"-L\", \"-P\"],\n\t\t\tdependsOn: [\"-R\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, all symbolic links are followed\",\n\t\t\texclusiveOn: [\"-H\", \"-P\"],\n\t\t\tdependsOn: [\"-R\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, no symbolic links are followed\",\n\t\t\texclusiveOn: [\"-H\", \"-L\"],\n\t\t\tdependsOn: [\"-R\"],\n\t\t},\n\t],\n};\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/cp.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"cp\",\n\tdescription: \"Copy files and directories\",\n\targs: [\n\t\t{\n\t\t\tname: \"source\",\n\t\t\ttemplate: [\"filepaths\", \"folders\"],\n\t\t\tisVariadic: true,\n\t\t},\n\t\t{\n\t\t\tname: \"target\",\n\t\t\ttemplate: [\"filepaths\", \"folders\"],\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"-a\",\n\t\t\tdescription:\n\t\t\t\t\"Preserves structure and attributes of files but not directory structure\",\n\t\t},\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription:\n\t\t\t\t\"If the destination file cannot be opened, remove it and create a new file, without prompting for confirmation\",\n\t\t\texclusiveOn: [\"-n\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-H\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, symbolic links on the command line are followed\",\n\t\t\texclusiveOn: [\"-L\", \"-P\"],\n\t\t\tdependsOn: [\"-R\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"Cause cp to write a prompt to the standard error output before copying a file that would overwrite an existing file\",\n\t\t\texclusiveOn: [\"-n\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, all symbolic links are followed\",\n\t\t\texclusiveOn: [\"-H\", \"-P\"],\n\t\t\tdependsOn: [\"-R\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription: \"Do not overwrite an existing file\",\n\t\t\texclusiveOn: [\"-f\", \"-i\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription:\n\t\t\t\t\"If the -R option is specified, no symbolic links are followed\",\n\t\t\texclusiveOn: [\"-H\", \"-L\"],\n\t\t\tdependsOn: [\"-R\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-R\",\n\t\t\tdescription:\n\t\t\t\t\"If source designates a directory, cp copies the directory and the entire subtree connected at that point. If source ends in a /, the contents of the directory are copied rather than the directory itself\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription: \"Cause cp to be verbose, showing files as they are copied\",\n\t\t},\n\t\t{\n\t\t\tname: \"-X\",\n\t\t\tdescription: \"Do not copy Extended Attributes (EAs) or resource forks\",\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription: \"Copy files using clonefile\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/curl.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"curl\",\n\tdescription: \"Transfer a URL\",\n\targs: { name: \"URL\", template: \"history\" },\n\toptions: [\n\t\t{\n\t\t\tname: [\"-a\", \"--append\"],\n\t\t\tdescription: \"Append to target file when uploading\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-E\", \"--cert\"],\n\t\t\tdescription: \"Client certificate file and password\",\n\t\t\targs: {\n\t\t\t\tname: \"certificate[:password]\",\n\t\t\t\tgenerators: {\n\t\t\t\t\tgetQueryTerm: \":\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-K\", \"--config\"],\n\t\t\tdescription: \"Read config from a file\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-C\", \"--continue-at\"],\n\t\t\tdescription: \"Resumed transfer offset\",\n\t\t\targs: { name: \"offset\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-b\", \"--cookie\"],\n\t\t\tdescription: \"Send cookies from string/file\",\n\t\t\targs: { name: \"data or filename\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-c\", \"--cookie-jar\"],\n\t\t\tdescription: \"Write cookies to <filename> after operation\",\n\t\t\targs: { name: \"filename\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-d\", \"--data\"],\n\t\t\tdescription: \"HTTP POST data\",\n\t\t\tinsertValue: \"-d '{cursor}'\",\n\t\t\targs: { name: \"data\" },\n\t\t\tisRepeatable: true,\n\t\t},\n\t\t{ name: [\"-q\", \"--disable\"], description: \"Disable .curlrc\" },\n\t\t{\n\t\t\tname: [\"-D\", \"--dump-header\"],\n\t\t\tdescription: \"Write the received headers to <filename>\",\n\t\t\targs: { name: \"filename\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-f\", \"--fail\"],\n\t\t\tdescription: \"Fail silently (no output at all) on HTTP errors\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-F\", \"--form\"],\n\t\t\tdescription: \"Specify multipart MIME data\",\n\t\t\targs: { name: \"content\" },\n\t\t\tisRepeatable: true,\n\t\t},\n\t\t{\n\t\t\tname: [\"-P\", \"--ftp-port\"],\n\t\t\tdescription: \"Use PORT instead of PASV\",\n\t\t\targs: { name: \"address\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-G\", \"--get\"],\n\t\t\tdescription: \"Put the post data in the URL and use GET\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-g\", \"--globoff\"],\n\t\t\tdescription: \"Disable URL sequences and ranges using {} and []\",\n\t\t},\n\t\t{ name: [\"-I\", \"--head\"], description: \"Show document info only\" },\n\t\t{\n\t\t\tname: [\"-H\", \"--header\"],\n\t\t\tdescription: \"Pass custom header(s) to server\",\n\t\t\targs: {\n\t\t\t\tname: \"header/file\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"Content-Type: application/json\" },\n\t\t\t\t\t{ name: \"Content-Type: application/x-www-form-urlencoded\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{ name: [\"-h\", \"--help\"], description: \"This help text\" },\n\t\t{ name: [\"-0\", \"--http1.0\"], description: \"Use HTTP 1.0\" },\n\t\t{\n\t\t\tname: [\"-i\", \"--include\"],\n\t\t\tdescription: \"Include protocol response headers in the output\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-k\", \"--insecure\"],\n\t\t\tdescription: \"Allow insecure server connections when using SSL\",\n\t\t},\n\t\t{ name: [\"-4\", \"--ipv4\"], description: \"Resolve names to IPv4 addresses\" },\n\t\t{ name: [\"-6\", \"--ipv6\"], description: \"Resolve names to IPv6 addresses\" },\n\t\t{\n\t\t\tname: [\"-j\", \"--junk-session-cookies\"],\n\t\t\tdescription: \"Ignore session cookies read from file\",\n\t\t},\n\t\t{ name: [\"-l\", \"--list-only\"], description: \"List only mode\" },\n\t\t{ name: [\"-L\", \"--location\"], description: \"Follow redirects\" },\n\t\t{ name: [\"-M\", \"--manual\"], description: \"Display the full manual\" },\n\t\t{\n\t\t\tname: [\"-m\", \"--max-time\"],\n\t\t\tdescription: \"Maximum time allowed for the transfer\",\n\t\t\targs: { name: \"seconds\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-n\", \"--netrc\"],\n\t\t\tdescription: \"Must read .netrc for user name and password\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-:\", \"--next\"],\n\t\t\tdescription: \"Make next URL use its separate set of options\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-N\", \"--no-buffer\"],\n\t\t\tdescription: \"Disable buffering of the output stream\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-o\", \"--output\"],\n\t\t\tdescription: \"Write to file instead of stdout\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-#\", \"--progress-bar\"],\n\t\t\tdescription: \"Display transfer progress as a bar\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-x\", \"--proxy\"],\n\t\t\tdescription: \"[protocol://]host[:port] Use this proxy\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-U\", \"--proxy-user\"],\n\t\t\tdescription: \"Proxy user and password\",\n\t\t\targs: { name: \"user:password\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-p\", \"--proxytunnel\"],\n\t\t\tdescription: \"Operate through an HTTP proxy tunnel (using CONNECT)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-Q\", \"--quote\"],\n\t\t\tdescription: \"Send command(s) to server before transfer\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-r\", \"--range\"],\n\t\t\tdescription: \"Retrieve only the bytes within RANGE\",\n\t\t\targs: { name: \"range\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-e\", \"--referer\"],\n\t\t\tdescription: \"Referrer URL\",\n\t\t\targs: { name: \"URL\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-J\", \"--remote-header-name\"],\n\t\t\tdescription: \"Use the header-provided filename\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-O\", \"--remote-name\"],\n\t\t\tdescription: \"Write output to a file named as the remote file\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-R\", \"--remote-time\"],\n\t\t\tdescription: \"Set the remote file's time on the local output\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-X\", \"--request\"],\n\t\t\tdescription: \"Specify request command to use\",\n\t\t\targs: {\n\t\t\t\tname: \"command\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"GET\" },\n\t\t\t\t\t{ name: \"HEAD\" },\n\t\t\t\t\t{ name: \"POST\" },\n\t\t\t\t\t{ name: \"PUT\" },\n\t\t\t\t\t{ name: \"DELETE\" },\n\t\t\t\t\t{ name: \"CONNECT\" },\n\t\t\t\t\t{ name: \"OPTIONS\" },\n\t\t\t\t\t{ name: \"TRACE\" },\n\t\t\t\t\t{ name: \"PATCH\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-S\", \"--show-error\"],\n\t\t\tdescription: \"Show error even when -s is used\",\n\t\t},\n\t\t{ name: [\"-s\", \"--silent\"], description: \"Silent mode\" },\n\t\t{\n\t\t\tname: [\"-Y\", \"--speed-limit\"],\n\t\t\tdescription: \"Stop transfers slower than this\",\n\t\t\targs: { name: \"speed\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-y\", \"--speed-time\"],\n\t\t\tdescription: \"Trigger 'speed-limit' abort after this time\",\n\t\t\targs: { name: \"seconds\" },\n\t\t},\n\t\t{ name: [\"-2\", \"--sslv2\"], description: \"Use SSLv2\" },\n\t\t{ name: [\"-3\", \"--sslv3\"], description: \"Use SSLv3\" },\n\t\t{\n\t\t\tname: [\"-t\", \"--telnet-option\"],\n\t\t\tdescription: \"Set telnet option\",\n\t\t\targs: { name: \"val\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-z\", \"--time-cond\"],\n\t\t\tdescription: \"Transfer based on a time condition\",\n\t\t\targs: { name: \"time\" },\n\t\t},\n\t\t{ name: [\"-1\", \"--tlsv1\"], description: \"Use TLSv1.0 or greater\" },\n\t\t{\n\t\t\tname: [\"-T\", \"--upload-file\"],\n\t\t\tdescription: \"Transfer local FILE to destination\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{ name: [\"-B\", \"--use-ascii\"], description: \"Use ASCII/text transfer\" },\n\t\t{\n\t\t\tname: [\"-u\", \"--user\"],\n\t\t\tdescription: \"Server user and password\",\n\t\t\targs: { name: \"user:password\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-A\", \"--user-agent\"],\n\t\t\tdescription: \"Send User-Agent <name> to server\",\n\t\t\targs: { name: \"name\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\tdescription: \"Make the operation more talkative\",\n\t\t},\n\t\t{ name: [\"-V\", \"--version\"], description: \"Show version number and quit\" },\n\t\t{\n\t\t\tname: [\"-w\", \"--write-out\"],\n\t\t\tdescription: \"Use output FORMAT after completion\",\n\t\t\targs: { name: \"format\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--abstract-unix-socket\",\n\t\t\tdescription: \"Connect via abstract Unix domain socket\",\n\t\t\targs: { name: \"path\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--alt-svc\",\n\t\t\tdescription: \"Name> Enable alt-svc with this cache file\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{ name: \"--anyauth\", description: \"Pick any authentication method\" },\n\t\t{ name: \"--basic\", description: \"Use HTTP Basic Authentication\" },\n\t\t{\n\t\t\tname: \"--cacert\",\n\t\t\tdescription: \"CA certificate to verify peer against\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--capath\",\n\t\t\tdescription: \"CA directory to verify peer against\",\n\t\t\targs: { name: \"dir\", template: \"folders\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--cert-status\",\n\t\t\tdescription: \"Verify the status of the server certificate\",\n\t\t},\n\t\t{\n\t\t\tname: \"--cert-type\",\n\t\t\tdescription: \"Certificate file type\",\n\t\t\targs: {\n\t\t\t\tname: \"type\",\n\t\t\t\tsuggestions: [{ name: \"DER\" }, { name: \"PEM\" }, { name: \"ENG\" }],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--ciphers\",\n\t\t\tdescription: \"Of ciphers> SSL ciphers to use\",\n\t\t\targs: { name: \"list\" },\n\t\t},\n\t\t{ name: \"--compressed\", description: \"Request compressed response\" },\n\t\t{ name: \"--compressed-ssh\", description: \"Enable SSH compression\" },\n\t\t{\n\t\t\tname: \"--connect-timeout\",\n\t\t\tdescription: \"Maximum time allowed for connection\",\n\t\t\targs: { name: \"seconds\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--connect-to\",\n\t\t\tdescription: \"Connect to host\",\n\t\t\targs: { name: \"HOST1:PORT1:HOST2:PORT2\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--create-dirs\",\n\t\t\tdescription: \"Create necessary local directory hierarchy\",\n\t\t},\n\t\t{ name: \"--crlf\", description: \"Convert LF to CRLF in upload\" },\n\t\t{\n\t\t\tname: \"--crlfile\",\n\t\t\tdescription: \"Get a CRL list in PEM format from the given file\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--data-ascii\",\n\t\t\tdescription: \"HTTP POST ASCII data\",\n\t\t\targs: { name: \"data\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--data-binary\",\n\t\t\tdescription: \"HTTP POST binary data\",\n\t\t\targs: { name: \"data\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--data-raw\",\n\t\t\tdescription: \"HTTP POST data, '@' allowed\",\n\t\t\targs: { name: \"data\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--data-urlencode\",\n\t\t\tdescription: \"HTTP POST data url encoded\",\n\t\t\targs: { name: \"data\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--delegation\",\n\t\t\tdescription: \"GSS-API delegation permission\",\n\t\t\targs: { name: \"LEVEL\" },\n\t\t},\n\t\t{ name: \"--digest\", description: \"Use HTTP Digest Authentication\" },\n\t\t{ name: \"--disable-eprt\", description: \"Inhibit using EPRT or LPRT\" },\n\t\t{ name: \"--disable-epsv\", description: \"Inhibit using EPSV\" },\n\t\t{\n\t\t\tname: \"--disallow-username-in-url\",\n\t\t\tdescription: \"Disallow username in url\",\n\t\t},\n\t\t{\n\t\t\tname: \"--dns-interface\",\n\t\t\tdescription: \"Interface to use for DNS requests\",\n\t\t\targs: { name: \"interface\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--dns-ipv4-addr\",\n\t\t\tdescription: \"IPv4 address to use for DNS requests\",\n\t\t\targs: { name: \"address\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--dns-ipv6-addr\",\n\t\t\tdescription: \"IPv6 address to use for DNS requests\",\n\t\t\targs: { name: \"address\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--dns-servers\",\n\t\t\tdescription: \"DNS server addrs to use\",\n\t\t\targs: { name: \"addresses\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--doh-url\",\n\t\t\tdescription: \"Resolve host names over DOH\",\n\t\t\targs: { name: \"URL\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--egd-file\",\n\t\t\tdescription: \"EGD socket path for random data\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--engine\",\n\t\t\tdescription: \"Crypto engine to use\",\n\t\t\targs: { name: \"name\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--etag-compare\",\n\t\t\tdescription:\n\t\t\t\t\"Make a conditional HTTP request for the ETag read from the given file\",\n\t\t\targs: { name: \"file\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--etag-save\",\n\t\t\tdescription: \"Save an HTTP ETag to the specified file\",\n\t\t\targs: { name: \"file\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--expect100-timeout\",\n\t\t\tdescription: \"How long to wait for 100-continue\",\n\t\t\targs: { name: \"seconds\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--fail-early\",\n\t\t\tdescription: \"Fail on first transfer error, do not continue\",\n\t\t},\n\t\t{\n\t\t\tname: \"--fail-with-body\",\n\t\t\tdescription:\n\t\t\t\t\"On HTTP errors, return an error and also output any HTML response\",\n\t\t},\n\t\t{ name: \"--false-start\", description: \"Enable TLS False Start\" },\n\t\t{\n\t\t\tname: \"--form-string\",\n\t\t\tdescription: \"Specify multipart MIME data\",\n\t\t\targs: { name: \"string\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--ftp-account\",\n\t\t\tdescription: \"Account data string\",\n\t\t\targs: { name: \"data\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--ftp-alternative-to-user\",\n\t\t\tdescription: \"String to replace USER [name]\",\n\t\t\targs: { name: \"command\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--ftp-create-dirs\",\n\t\t\tdescription: \"Create the remote dirs if not present\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ftp-method\",\n\t\t\tdescription: \"Control CWD usage\",\n\t\t\targs: { name: \"method\" },\n\t\t},\n\t\t{ name: \"--ftp-pasv\", description: \"Use PASV/EPSV instead of PORT\" },\n\t\t{ name: \"--ftp-pret\", description: \"Send PRET before PASV\" },\n\t\t{ name: \"--ftp-skip-pasv-ip\", description: \"Skip the IP address for PASV\" },\n\t\t{ name: \"--ftp-ssl-ccc\", description: \"Send CCC after authenticating\" },\n\t\t{\n\t\t\tname: \"--ftp-ssl-ccc-mode\",\n\t\t\tdescription: \"Set CCC mode\",\n\t\t\targs: {\n\t\t\t\tname: \"mode\",\n\t\t\t\tsuggestions: [{ name: \"active\" }, { name: \"passive\" }],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--ftp-ssl-control\",\n\t\t\tdescription: \"Require SSL/TLS for FTP login, clear for transfer\",\n\t\t},\n\t\t{\n\t\t\tname: \"--happy-eyeballs-timeout-ms\",\n\t\t\tdescription:\n\t\t\t\t\"How long to wait in milliseconds for IPv6 before trying IPv4\",\n\t\t\targs: { name: \"milliseconds\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--haproxy-protocol\",\n\t\t\tdescription: \"Send HAProxy PROXY protocol v1 header\",\n\t\t},\n\t\t{\n\t\t\tname: \"--hostpubmd5\",\n\t\t\tdescription: \"Acceptable MD5 hash of the host public key\",\n\t\t\targs: { name: \"md5\" },\n\t\t},\n\t\t{ name: \"--http0.9\", description: \"Allow HTTP 0.9 responses\" },\n\t\t{ name: \"--http1.1\", description: \"Use HTTP 1.1\" },\n\t\t{ name: \"--http2\", description: \"Use HTTP 2\" },\n\t\t{\n\t\t\tname: \"--http2-prior-knowledge\",\n\t\t\tdescription: \"Use HTTP 2 without HTTP/1.1 Upgrade\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-content-length\",\n\t\t\tdescription: \"Ignore the size of the remote resource\",\n\t\t},\n\t\t{\n\t\t\tname: \"--interface\",\n\t\t\tdescription: \"Use network INTERFACE (or address)\",\n\t\t\targs: { name: \"name\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--keepalive-time\",\n\t\t\tdescription: \"Interval time for keepalive probes\",\n\t\t\targs: { name: \"seconds\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--key\",\n\t\t\tdescription: \"Private key file name\",\n\t\t\targs: { name: \"key\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--key-type\",\n\t\t\tdescription: \"Private key file type\",\n\t\t\targs: {\n\t\t\t\tname: \"type\",\n\t\t\t\tsuggestions: [{ name: \"DER\" }, { name: \"PEM\" }, { name: \"ENG\" }],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--krb\",\n\t\t\tdescription: \"Enable Kerberos with security <level>\",\n\t\t\targs: { name: \"level\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--libcurl\",\n\t\t\tdescription: \"Dump libcurl equivalent code of this command line\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--limit-rate\",\n\t\t\tdescription: \"Limit transfer speed to RATE\",\n\t\t\targs: { name: \"speed\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--local-port\",\n\t\t\tdescription: \"Force use of RANGE for local port numbers\",\n\t\t\targs: { name: \"num/range\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--location-trusted\",\n\t\t\tdescription: \"Like --location, and send auth to other hosts\",\n\t\t},\n\t\t{\n\t\t\tname: \"--login-options\",\n\t\t\tdescription: \"Server login options\",\n\t\t\targs: { name: \"options\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--mail-auth\",\n\t\t\tdescription: \"Originator address of the original email\",\n\t\t\targs: { name: \"address\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--mail-from\",\n\t\t\tdescription: \"Mail from this address\",\n\t\t\targs: { name: \"address\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--mail-rcpt\",\n\t\t\tdescription: \"Mail to this address\",\n\t\t\targs: { name: \"address\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--max-filesize\",\n\t\t\tdescription: \"Maximum file size to download\",\n\t\t\targs: { name: \"bytes\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--max-redirs\",\n\t\t\tdescription: \"Maximum number of redirects allowed\",\n\t\t\targs: { name: \"num\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--metalink\",\n\t\t\tdescription: \"Process given URLs as metalink XML file\",\n\t\t},\n\t\t{\n\t\t\tname: \"--negotiate\",\n\t\t\tdescription: \"Use HTTP Negotiate (SPNEGO) authentication\",\n\t\t},\n\t\t{\n\t\t\tname: \"--netrc-file\",\n\t\t\tdescription: \"Specify FILE for netrc\",\n\t\t\targs: { name: \"filename\", template: \"filepaths\" },\n\t\t},\n\t\t{ name: \"--netrc-optional\", description: \"Use either .netrc or URL\" },\n\t\t{ name: \"--no-alpn\", description: \"Disable the ALPN TLS extension\" },\n\t\t{\n\t\t\tname: \"--no-keepalive\",\n\t\t\tdescription: \"Disable TCP keepalive on the connection\",\n\t\t},\n\t\t{ name: \"--no-npn\", description: \"Disable the NPN TLS extension\" },\n\t\t{ name: \"--no-sessionid\", description: \"Disable SSL session-ID reusing\" },\n\t\t{\n\t\t\tname: \"--noproxy\",\n\t\t\tdescription: \"List of hosts which do not use proxy\",\n\t\t\targs: { name: \"no-proxy-list\" },\n\t\t},\n\t\t{ name: \"--ntlm\", description: \"Use HTTP NTLM authentication\" },\n\t\t{\n\t\t\tname: \"--ntlm-wb\",\n\t\t\tdescription: \"Use HTTP NTLM authentication with winbind\",\n\t\t},\n\t\t{\n\t\t\tname: \"--oauth2-bearer\",\n\t\t\tdescription: \"OAuth 2 Bearer Token\",\n\t\t\targs: { name: \"token\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--pass\",\n\t\t\tdescription: \"Pass phrase for the private key\",\n\t\t\targs: { name: \"phrase\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--path-as-is\",\n\t\t\tdescription: \"Do not squash .. sequences in URL path\",\n\t\t},\n\t\t{\n\t\t\tname: \"--pinnedpubkey\",\n\t\t\tdescription: \"FILE/HASHES Public key to verify peer against\",\n\t\t\targs: { name: \"hashes\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--post301\",\n\t\t\tdescription: \"Do not switch to GET after following a 301\",\n\t\t},\n\t\t{\n\t\t\tname: \"--post302\",\n\t\t\tdescription: \"Do not switch to GET after following a 302\",\n\t\t},\n\t\t{\n\t\t\tname: \"--post303\",\n\t\t\tdescription: \"Do not switch to GET after following a 303\",\n\t\t},\n\t\t{\n\t\t\tname: \"--preproxy\",\n\t\t\tdescription: \"[protocol://]host[:port] Use this proxy first\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proto\",\n\t\t\tdescription: \"Enable/disable PROTOCOLS\",\n\t\t\targs: { name: \"protocols\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proto-default\",\n\t\t\tdescription: \"Use PROTOCOL for any URL missing a scheme\",\n\t\t\targs: { name: \"protocol\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proto-redir\",\n\t\t\tdescription: \"Enable/disable PROTOCOLS on redirect\",\n\t\t\targs: { name: \"protocols\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-anyauth\",\n\t\t\tdescription: \"Pick any proxy authentication method\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-basic\",\n\t\t\tdescription: \"Use Basic authentication on the proxy\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-cacert\",\n\t\t\tdescription: \"CA certificate to verify peer against for proxy\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-capath\",\n\t\t\tdescription: \"CA directory to verify peer against for proxy\",\n\t\t\targs: { name: \"dir\", template: \"folders\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-cert\",\n\t\t\tdescription: \"Set client certificate for proxy\",\n\t\t\targs: { name: \"cert[:passwd]\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-cert-type\",\n\t\t\tdescription: \"Client certificate type for HTTPS proxy\",\n\t\t\targs: { name: \"type\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-ciphers\",\n\t\t\tdescription: \"SSL ciphers to use for proxy\",\n\t\t\targs: { name: \"list\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-crlfile\",\n\t\t\tdescription: \"Set a CRL list for proxy\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-digest\",\n\t\t\tdescription: \"Use Digest authentication on the proxy\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-header\",\n\t\t\tdescription: \"Pass custom header(s) to proxy\",\n\t\t\targs: {\n\t\t\t\tname: \"header/file\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"Content-Type: application/json\" },\n\t\t\t\t\t{ name: \"Content-Type: application/x-www-form-urlencoded\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-insecure\",\n\t\t\tdescription: \"Do HTTPS proxy connections without verifying the proxy\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-key\",\n\t\t\tdescription: \"Private key for HTTPS proxy\",\n\t\t\targs: { name: \"key\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-key-type\",\n\t\t\tdescription: \"Private key file type for proxy\",\n\t\t\targs: { name: \"type\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-negotiate\",\n\t\t\tdescription: \"Use HTTP Negotiate (SPNEGO) authentication on the proxy\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-ntlm\",\n\t\t\tdescription: \"Use NTLM authentication on the proxy\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-pass\",\n\t\t\tdescription: \"Pass phrase for the private key for HTTPS proxy\",\n\t\t\targs: { name: \"phrase\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-pinnedpubkey\",\n\t\t\tdescription: \"FILE/HASHES public key to verify proxy with\",\n\t\t\targs: { name: \"hashes\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-service-name\",\n\t\t\tdescription: \"SPNEGO proxy service name\",\n\t\t\targs: { name: \"name\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-ssl-allow-beast\",\n\t\t\tdescription: \"Allow security flaw for interop for HTTPS proxy\",\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-tls13-ciphers\",\n\t\t\tdescription: \"List> TLS 1.3 proxy cipher suites\",\n\t\t\targs: { name: \"ciphersuite\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-tlsauthtype\",\n\t\t\tdescription: \"TLS authentication type for HTTPS proxy\",\n\t\t\targs: { name: \"type\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-tlspassword\",\n\t\t\tdescription: \"TLS password for HTTPS proxy\",\n\t\t\targs: { name: \"string\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy-tlsuser\",\n\t\t\tdescription: \"TLS username for HTTPS proxy\",\n\t\t\targs: { name: \"name\" },\n\t\t},\n\t\t{ name: \"--proxy-tlsv1\", description: \"Use TLSv1 for HTTPS proxy\" },\n\t\t{\n\t\t\tname: \"--proxy1.0\",\n\t\t\tdescription: \"Use HTTP/1.0 proxy on given port\",\n\t\t\targs: { name: \"host[:port]\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--pubkey\",\n\t\t\tdescription: \"SSH Public key file name\",\n\t\t\targs: { name: \"key\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--random-file\",\n\t\t\tdescription: \"File for reading random data from\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{ name: \"--raw\", description: 'Do HTTP \"raw\"; no transfer decoding' },\n\t\t{\n\t\t\tname: \"--remote-name-all\",\n\t\t\tdescription: \"Use the remote file name for all URLs\",\n\t\t},\n\t\t{\n\t\t\tname: \"--request-target\",\n\t\t\tdescription: \"Specify the target for this request\",\n\t\t},\n\t\t{\n\t\t\tname: \"--resolve\",\n\t\t\tdescription: \"Resolve the host+port to this address\",\n\t\t\targs: { name: \"host:port:address[,address]...\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--retry\",\n\t\t\tdescription: \"Retry request if transient problems occur\",\n\t\t\targs: { name: \"num\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--retry-connrefused\",\n\t\t\tdescription: \"Retry on connection refused (use with --retry)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--retry-delay\",\n\t\t\tdescription: \"Wait time between retries\",\n\t\t\targs: { name: \"seconds\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--retry-max-time\",\n\t\t\tdescription: \"Retry only within this period\",\n\t\t\targs: { name: \"seconds\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--sasl-ir\",\n\t\t\tdescription: \"Enable initial response in SASL authentication\",\n\t\t},\n\t\t{\n\t\t\tname: \"--service-name\",\n\t\t\tdescription: \"SPNEGO service name\",\n\t\t\targs: { name: \"name\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--socks4\",\n\t\t\tdescription: \"SOCKS4 proxy on given host + port\",\n\t\t\targs: { name: \"host[:port]\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--socks4a\",\n\t\t\tdescription: \"SOCKS4a proxy on given host + port\",\n\t\t\targs: { name: \"host[:port]\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--socks5\",\n\t\t\tdescription: \"SOCKS5 proxy on given host + port\",\n\t\t\targs: { name: \"host[:port]\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--socks5-basic\",\n\t\t\tdescription: \"Enable username/password auth for SOCKS5 proxies\",\n\t\t},\n\t\t{\n\t\t\tname: \"--socks5-gssapi\",\n\t\t\tdescription: \"Enable GSS-API auth for SOCKS5 proxies\",\n\t\t},\n\t\t{\n\t\t\tname: \"--socks5-gssapi-nec\",\n\t\t\tdescription: \"Compatibility with NEC SOCKS5 server\",\n\t\t},\n\t\t{\n\t\t\tname: \"--socks5-gssapi-service\",\n\t\t\tdescription: \"SOCKS5 proxy service name for GSS-API\",\n\t\t\targs: { name: \"name\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--socks5-hostname\",\n\t\t\tdescription: \"SOCKS5 proxy, pass host name to proxy\",\n\t\t\targs: { name: \"host[:port]\" },\n\t\t},\n\t\t{ name: \"--ssl\", description: \"Try SSL/TLS\" },\n\t\t{\n\t\t\tname: \"--ssl-auto-client-cert\",\n\t\t\tdescription: \"Obtain and use a client certificate automatically\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ssl-allow-beast\",\n\t\t\tdescription: \"Allow security flaw to improve interop\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ssl-no-revoke\",\n\t\t\tdescription: \"Disable cert revocation checks (Schannel)\",\n\t\t},\n\t\t{ name: \"--ssl-reqd\", description: \"Require SSL/TLS\" },\n\t\t{ name: \"--stderr\", description: \"Where to redirect stderr\" },\n\t\t{\n\t\t\tname: \"--styled-output\",\n\t\t\tdescription: \"Enable styled output for HTTP headers\",\n\t\t},\n\t\t{\n\t\t\tname: \"--suppress-connect-headers\",\n\t\t\tdescription: \"Suppress proxy CONNECT response headers\",\n\t\t},\n\t\t{ name: \"--tcp-fastopen\", description: \"Use TCP Fast Open\" },\n\t\t{ name: \"--tcp-nodelay\", description: \"Use the TCP_NODELAY option\" },\n\t\t{\n\t\t\tname: \"--tftp-blksize\",\n\t\t\tdescription: \"Set TFTP BLKSIZE option\",\n\t\t\targs: { name: \"value\" },\n\t\t},\n\t\t{ name: \"--tftp-no-options\", description: \"Do not send any TFTP options\" },\n\t\t{\n\t\t\tname: \"--tls-max\",\n\t\t\tdescription: \"Set maximum allowed TLS version\",\n\t\t\targs: { name: \"VERSION\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--tls13-ciphers\",\n\t\t\tdescription: \"Of TLS 1.3 ciphersuites> TLS 1.3 cipher suites to use\",\n\t\t\targs: { name: \"list\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--tlsauthtype\",\n\t\t\tdescription: \"TLS authentication type\",\n\t\t\targs: { name: \"type\" },\n\t\t},\n\t\t{ name: \"--tlspassword\", description: \"TLS password\" },\n\t\t{ name: \"--tlsuser\", description: \"TLS user name\", args: { name: \"name\" } },\n\t\t{ name: \"--tlsv1.0\", description: \"Use TLSv1.0 or greater\" },\n\t\t{ name: \"--tlsv1.1\", description: \"Use TLSv1.1 or greater\" },\n\t\t{ name: \"--tlsv1.2\", description: \"Use TLSv1.2 or greater\" },\n\t\t{ name: \"--tlsv1.3\", description: \"Use TLSv1.3 or greater\" },\n\t\t{\n\t\t\tname: \"--tr-encoding\",\n\t\t\tdescription: \"Request compressed transfer encoding\",\n\t\t},\n\t\t{\n\t\t\tname: \"--trace\",\n\t\t\tdescription: \"Write a debug trace to FILE\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--trace-ascii\",\n\t\t\tdescription: \"Like --trace, but without hex output\",\n\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--trace-time\",\n\t\t\tdescription: \"Add time stamps to trace/verbose output\",\n\t\t},\n\t\t{\n\t\t\tname: \"--unix-socket\",\n\t\t\tdescription: \"Connect through this Unix domain socket\",\n\t\t\targs: { name: \"path\" },\n\t\t},\n\t\t{ name: \"--url\", description: \"URL to work with\", args: { name: \"url\" } },\n\t\t{\n\t\t\tname: \"--xattr\",\n\t\t\tdescription: \"Store metadata in extended file attributes\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/df.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"df\",\n\tdescription: \"Display free disk space\",\n\targs: {\n\t\tname: \"file or filesystem\",\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-a\",\n\t\t\tdescription: \"Show all mount points\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-b\", \"-P\"],\n\t\t\tdescription: \"Use 512-byte blocks (default)\",\n\t\t\texclusiveOn: [\"-g\", \"-k\", \"-m\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-g\",\n\t\t\tdescription: \"Use 1073741824-byte (1-Gbyte) blocks\",\n\t\t\texclusiveOn: [\"-b\", \"-P\", \"-m\", \"-k\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription: \"Use 1048576-byte (1-Mbyte) blocks\",\n\t\t\texclusiveOn: [\"-b\", \"-P\", \"-g\", \"-k\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-k\",\n\t\t\tdescription: \"Use 1024-byte (1-Kbyte) blocks\",\n\t\t\texclusiveOn: [\"-b\", \"-P\", \"-g\", \"-m\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-H\",\n\t\t\tdescription: '\"Human-readable\" output, uses base 10 unit suffixes',\n\t\t\texclusiveOn: [\"-h\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-h\",\n\t\t\tdescription: '\"Human-readable\" output, uses base 2 unit suffixes',\n\t\t\texclusiveOn: [\"-H\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription: \"Include the number of free inodes\",\n\t\t},\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription: \"Only display information about locally-mounted filesystems\",\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription: \"Print out the previously obtained statistics\",\n\t\t},\n\t\t{\n\t\t\tname: \"-T\",\n\t\t\tdescription:\n\t\t\t\t\"Only print out statistics for filesystems of the specified types (comma separated)\",\n\t\t\targs: {\n\t\t\t\tname: \"filesystem\",\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/du.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"du\",\n\tdescription: \"Display disk usage statistics\",\n\toptions: [\n\t\t{\n\t\t\tname: \"-a\",\n\t\t\tdescription: \"Display an entry for each file in a file hierarchy\",\n\t\t\texclusiveOn: [\"-s\", \"-d\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription: \"Display a grand total\",\n\t\t},\n\t\t{\n\t\t\tname: \"-H\",\n\t\t\tdescription:\n\t\t\t\t\"Symbolic links on the command line are followed, symbolic links in file hierarchies are not followed\",\n\t\t\texclusiveOn: [\"-L\", \"-P\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-h\",\n\t\t\tdescription:\n\t\t\t\t'\"Human-readable\" output.  Use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte',\n\t\t\texclusiveOn: [\"-k\", \"-m\", \"-g\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-g\",\n\t\t\tdescription: \"Display block counts in 1073741824-byte (1-Gbyte) blocks\",\n\t\t\texclusiveOn: [\"-k\", \"-m\", \"-h\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-k\",\n\t\t\tdescription: \"Display block counts in 1024-byte (1-Kbyte) blocks\",\n\t\t\texclusiveOn: [\"-g\", \"-m\", \"-h\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription: \"Display block counts in 1048576-byte (1-Mbyte) blocks\",\n\t\t\texclusiveOn: [\"-g\", \"-k\", \"-h\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-I\",\n\t\t\tdescription: \"Ignore files and directories matching the specified mask\",\n\t\t\targs: {\n\t\t\t\tname: \"mask\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription:\n\t\t\t\t\"Symbolic links on the command line and in file hierarchies are followed\",\n\t\t\texclusiveOn: [\"-H\", \"-P\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-r\",\n\t\t\tdescription:\n\t\t\t\t\"Generate messages about directories that cannot be read, files that cannot be opened, and so on.  This is the default case.  This option exists solely for conformance with X/Open Portability Guide Issue 4 (``XPG4'')\",\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription: \"No symbolic links are followed.  This is the default\",\n\t\t\texclusiveOn: [\"-H\", \"-L\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription:\n\t\t\t\t\"Display an entry for all files and directories depth directories deep\",\n\t\t\texclusiveOn: [\"-a\", \"-s\"],\n\t\t\targs: {\n\t\t\t\tname: \"depth\",\n\t\t\t\tsuggestions: [\"0\", \"1\", \"2\"],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription:\n\t\t\t\t\"Display an entry for each specified file.  (Equivalent to -d 0)\",\n\t\t\texclusiveOn: [\"-a\", \"-d\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-x\",\n\t\t\tdescription:\n\t\t\t\t\"Display an entry for each specified file.  (Equivalent to -d 0)\",\n\t\t},\n\t],\n\targs: {\n\t\tisOptional: true,\n\t\tname: \"files\",\n\t\tisVariadic: true,\n\t\ttemplate: [\"filepaths\", \"folders\"],\n\t},\n};\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/echo.ts",
    "content": "const environmentVariableGenerator: Fig.Generator = {\n\tcustom: async (tokens, _, context) => {\n\t\tif (tokens.length < 3 || tokens[tokens.length - 1].startsWith(\"$\")) {\n\t\t\treturn Object.keys(context.environmentVariables).map((suggestion) => ({\n\t\t\t\tname: `$${suggestion}`,\n\t\t\t\ttype: \"arg\",\n\t\t\t\tdescription: \"Environment Variable\",\n\t\t\t}));\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\ttrigger: \"$\",\n};\n\nconst completionSpec: Fig.Spec = {\n\tname: \"echo\",\n\tdescription: \"Write arguments to the standard output\",\n\targs: {\n\t\tname: \"string\",\n\t\tisVariadic: true,\n\t\toptionsCanBreakVariadicArg: false,\n\t\tsuggestCurrentToken: true,\n\t\tgenerators: environmentVariableGenerator,\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription: \"Do not print the trailing newline character\",\n\t\t},\n\t\t{\n\t\t\tname: \"-e\",\n\t\t\tdescription: \"Interpret escape sequences\",\n\t\t},\n\t\t{\n\t\t\tname: \"-E\",\n\t\t\tdescription: \"Disable escape sequences\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/find.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"find\",\n\tdescription: \"Walk a file hierarchy\",\n\targs: [\n\t\t{\n\t\t\tname: \"path\",\n\t\t\tisOptional: true,\n\t\t\tisVariadic: true,\n\t\t\ttemplate: [\"folders\"],\n\t\t},\n\t\t{\n\t\t\t// TODO Suggestions for primaries and operands. See `man find`\n\t\t\tname: \"expression\",\n\t\t\tdescription: \"Composition of primaries and operands\",\n\t\t\tisOptional: true,\n\t\t\tisVariadic: true,\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"-E\",\n\t\t\tdescription:\n\t\t\t\t\"Interpret regular expressions followed by -regex and -iregex primaries as extended\",\n\t\t},\n\t\t{\n\t\t\tname: \"-H\",\n\t\t\tdescription:\n\t\t\t\t\"Cause the file information and file type returned for each symbolic link specified to be those referenced by the link\",\n\t\t\texclusiveOn: [\"-L\", \"-P\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription:\n\t\t\t\t\"Cause the file information and file type returned for each symbolic link to be those of the file referenced by the link\",\n\t\t\texclusiveOn: [\"-H\", \"-P\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription:\n\t\t\t\t\"Cause the file information and file type returned for each symbolic link to be those for the link itself\",\n\t\t\texclusiveOn: [\"-H\", \"-L\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-X\",\n\t\t\tdescription: \"Permit find to be safely used in conjunction with xargs\",\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription: \"Cause find to perform a depth-first traversal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription: \"Specify a file hierarch for find to traverse\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription:\n\t\t\t\t\"Cause find to traverse the file hierarchies in lexicographical order\",\n\t\t},\n\t\t{\n\t\t\tname: \"-x\",\n\t\t\tdescription:\n\t\t\t\t\"Prevent find from descending into directories that have a device number different than that of the file from which the descent began\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/git.ts",
    "content": "function ai(...args: any[]): undefined { return undefined; }\n\nconst filterMessages = (out: string): string => {\n\treturn out.startsWith(\"warning:\") || out.startsWith(\"error:\")\n\t\t? out.split(\"\\n\").slice(1).join(\"\\n\")\n\t\t: out;\n};\n\nconst postProcessTrackedFiles: Fig.Generator[\"postProcess\"] = (\n\tout,\n\tcontext\n) => {\n\tconst output = filterMessages(out);\n\n\tif (output.startsWith(\"fatal:\")) {\n\t\treturn [];\n\t}\n\n\tconst files = output.split(\"\\n\").map((file) => {\n\t\tconst arr = file.trim().split(\" \");\n\n\t\treturn { working: arr[0], file: arr.slice(1).join(\" \").trim() };\n\t});\n\n\treturn [\n\t\t...files.map((item) => {\n\t\t\tconst file = item.file.replace(/^\"|\"$/g, \"\");\n\t\t\tlet ext = \"\";\n\n\t\t\ttry {\n\t\t\t\text = file.split(\".\").slice(-1)[0];\n\t\t\t} catch (e) {}\n\n\t\t\tif (file.endsWith(\"/\")) {\n\t\t\t\text = \"folder\";\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tname: file,\n\t\t\t\ticon: `fig://icon?type=${ext}&color=ff0000&badge=${item.working}`,\n\t\t\t\tdescription: \"Changed tracked files\",\n\t\t\t\t// If the current file already is already added\n\t\t\t\t// we want to lower the priority\n\t\t\t\tpriority: context.some((ctx) => ctx.includes(file)) ? 50 : 100,\n\t\t\t};\n\t\t}),\n\t];\n};\n\ninterface PostProcessBranchesOptions {\n\tinsertWithoutRemotes?: true;\n}\n\nconst postProcessBranches =\n\t(options: PostProcessBranchesOptions = {}): Fig.Generator[\"postProcess\"] =>\n\t(out) => {\n\t\tconst { insertWithoutRemotes = false } = options;\n\n\t\tconst output = filterMessages(out);\n\n\t\tif (output.startsWith(\"fatal:\")) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst seen = new Set<string>();\n\t\treturn output\n\t\t\t.split(\"\\n\")\n\t\t\t.filter((line) => !line.trim().startsWith(\"HEAD\"))\n\t\t\t.map((branch) => {\n\t\t\t\tlet name = branch.trim();\n\t\t\t\tconst parts = branch.match(/\\S+/g);\n\t\t\t\tif (parts && parts.length > 1) {\n\t\t\t\t\tif (parts[0] === \"*\") {\n\t\t\t\t\t\t// We are in a detached HEAD state\n\t\t\t\t\t\tif (branch.includes(\"HEAD detached\")) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Current branch\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: branch.replace(\"*\", \"\").trim(),\n\t\t\t\t\t\t\tdescription: \"Current branch\",\n\t\t\t\t\t\t\tpriority: 100,\n\t\t\t\t\t\t\ticon: \"⭐️\",\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (parts[0] === \"+\") {\n\t\t\t\t\t\t// Branch checked out in another worktree.\n\t\t\t\t\t\tname = branch.replace(\"+\", \"\").trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet description = \"Branch\";\n\n\t\t\t\tif (insertWithoutRemotes && name.startsWith(\"remotes/\")) {\n\t\t\t\t\tname = name.slice(name.indexOf(\"/\", 8) + 1);\n\t\t\t\t\tdescription = \"Remote branch\";\n\t\t\t\t}\n\n\t\t\t\tconst space = name.indexOf(\" \");\n\t\t\t\tif (space !== -1) {\n\t\t\t\t\tname = name.slice(0, space);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\tdescription,\n\t\t\t\t\ticon: \"fig://icon?type=git\",\n\t\t\t\t\tpriority: 75,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter((suggestion) => {\n\t\t\t\tif (!suggestion) return false;\n\t\t\t\tif (seen.has(suggestion.name)) return false;\n\t\t\t\tseen.add(suggestion.name);\n\t\t\t\treturn true;\n\t\t\t});\n\t};\n\nexport const gitGenerators: Record<string, Fig.Generator> = {\n\t// Commit history\n\tcommits: {\n\t\tscript: [\"git\", \"--no-optional-locks\", \"log\", \"--oneline\"],\n\t\tpostProcess: function (out) {\n\t\t\tconst output = filterMessages(out);\n\n\t\t\tif (output.startsWith(\"fatal:\")) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn output.split(\"\\n\").map((line) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: line.substring(0, 7),\n\t\t\t\t\ticon: \"fig://icon?type=node\",\n\t\t\t\t\tdescription: line.substring(7),\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t},\n\n\t// user aliases\n\taliases: {\n\t\tscript: [\"git\", \"--no-optional-locks\", \"config\", \"--get-regexp\", \"^alias.\"],\n\t\tcache: {\n\t\t\tstrategy: \"stale-while-revalidate\",\n\t\t},\n\t\tpostProcess: (out) => {\n\t\t\tconst suggestions = out.split(\"\\n\").map((aliasLine) => {\n\t\t\t\tconst [name, ...parts] = aliasLine.slice(\"alias.\".length).split(\" \");\n\t\t\t\tconst value = parts.join(\" \");\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\tdescription: `Alias for '${value}'`,\n\t\t\t\t\ticon: \"fig://icon?type=commandkey\",\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst seen = new Set();\n\t\t\treturn suggestions.filter((suggestion) => {\n\t\t\t\tif (seen.has(suggestion.name)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tseen.add(suggestion.name);\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\t},\n\n\trevs: {\n\t\tscript: [\"git\", \"rev-list\", \"--all\", \"--oneline\"],\n\t\tpostProcess: function (out) {\n\t\t\tconst output = filterMessages(out);\n\n\t\t\tif (output.startsWith(\"fatal:\")) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn output.split(\"\\n\").map((line) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: line.substring(0, 7),\n\t\t\t\t\ticon: \"fig://icon?type=node\",\n\t\t\t\t\tdescription: line.substring(7),\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t},\n\n\t// Saved stashes\n\t// TODO: maybe only print names of stashes\n\tstashes: {\n\t\tscript: [\"git\", \"--no-optional-locks\", \"stash\", \"list\"],\n\t\tpostProcess: function (out) {\n\t\t\tconst output = filterMessages(out);\n\n\t\t\tif (output.startsWith(\"fatal:\")) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn output.split(\"\\n\").map((file) => {\n\t\t\t\treturn {\n\t\t\t\t\t// account for conventional commit messages\n\t\t\t\t\tname: file.split(\":\").slice(2).join(\":\"),\n\t\t\t\t\tinsertValue: file.split(\":\")[0],\n\t\t\t\t\ticon: `fig://icon?type=node`,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t},\n\n\t// Tree-ish\n\t// This needs to be fleshed out properly....\n\t// e.g. what is difference to commit-ish?\n\t// Refer to this:https://stackoverflow.com/questions/23303549/what-are-commit-ish-and-tree-ish-in-git/40910185\n\t// https://mirrors.edge.kernel.org/pub/software/scm/git/docs/#_identifier_terminology\n\n\ttreeish: {\n\t\tscript: [\"git\", \"--no-optional-locks\", \"diff\", \"--cached\", \"--name-only\"],\n\t\tpostProcess: function (out, tokens) {\n\t\t\tconst output = filterMessages(out);\n\n\t\t\tif (output.startsWith(\"fatal:\")) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn output.split(\"\\n\").map((file) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: file,\n\t\t\t\t\tinsertValue: (!tokens.includes(\"--\") ? \"-- \" : \"\") + file,\n\t\t\t\t\ticon: `fig://icon?type=file`,\n\t\t\t\t\tdescription: \"Staged file\",\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t},\n\n\t// All branches\n\tremoteLocalBranches: {\n\t\tscript: [\n\t\t\t\"git\",\n\t\t\t\"--no-optional-locks\",\n\t\t\t\"branch\",\n\t\t\t\"-a\",\n\t\t\t\"--no-color\",\n\t\t\t\"--sort=-committerdate\",\n\t\t],\n\t\tpostProcess: postProcessBranches({ insertWithoutRemotes: true }),\n\t},\n\n\tlocalBranches: {\n\t\tscript: [\n\t\t\t\"git\",\n\t\t\t\"--no-optional-locks\",\n\t\t\t\"branch\",\n\t\t\t\"--no-color\",\n\t\t\t\"--sort=-committerdate\",\n\t\t],\n\t\tpostProcess: postProcessBranches({ insertWithoutRemotes: true }),\n\t},\n\n\t// custom generator to display local branches by default or\n\t// remote branches if '-r' flag is used. See branch -d for use\n\tlocalOrRemoteBranches: {\n\t\tcustom: async (tokens, executeShellCommand) => {\n\t\t\tconst pp = postProcessBranches({ insertWithoutRemotes: true });\n\t\t\tif (tokens.includes(\"-r\")) {\n\t\t\t\treturn pp?.(\n\t\t\t\t\t(\n\t\t\t\t\t\tawait executeShellCommand({\n\t\t\t\t\t\t\tcommand: \"git\",\n\t\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t\t\"--no-optional-locks\",\n\t\t\t\t\t\t\t\t\"-r\",\n\t\t\t\t\t\t\t\t\"--no-color\",\n\t\t\t\t\t\t\t\t\"--sort=-committerdate\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t})\n\t\t\t\t\t).stdout,\n\t\t\t\t\ttokens\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn pp?.(\n\t\t\t\t\t(\n\t\t\t\t\t\tawait executeShellCommand({\n\t\t\t\t\t\t\tcommand: \"git\",\n\t\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t\t\"--no-optional-locks\",\n\t\t\t\t\t\t\t\t\"branch\",\n\t\t\t\t\t\t\t\t\"--no-color\",\n\t\t\t\t\t\t\t\t\"--sort=-committerdate\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t})\n\t\t\t\t\t).stdout,\n\t\t\t\t\ttokens\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t},\n\n\tremotes: {\n\t\tscript: [\"git\", \"--no-optional-locks\", \"remote\", \"-v\"],\n\t\tpostProcess: function (out) {\n\t\t\tconst remoteURLs = out\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.reduce<Record<string, string>>((dict, line) => {\n\t\t\t\t\tconst pair = line.split(\"\\t\");\n\t\t\t\t\tconst remote = pair[0];\n\t\t\t\t\tconst url = pair[1].split(\" \")[0];\n\n\t\t\t\t\tdict[remote] = url;\n\t\t\t\t\treturn dict;\n\t\t\t\t}, {});\n\n\t\t\treturn Object.keys(remoteURLs).map((remote) => {\n\t\t\t\tconst url = remoteURLs[remote];\n\t\t\t\tlet icon = \"box\";\n\t\t\t\tif (url.includes(\"github.com\")) {\n\t\t\t\t\ticon = \"github\";\n\t\t\t\t}\n\n\t\t\t\tif (url.includes(\"gitlab.com\")) {\n\t\t\t\t\ticon = \"gitlab\";\n\t\t\t\t}\n\n\t\t\t\tif (url.includes(\"heroku.com\")) {\n\t\t\t\t\ticon = \"heroku\";\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tname: remote,\n\t\t\t\t\ticon: `fig://icon?type=${icon}`,\n\t\t\t\t\tdescription: \"Remote\",\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t},\n\n\ttags: {\n\t\tscript: [\n\t\t\t\"git\",\n\t\t\t\"--no-optional-locks\",\n\t\t\t\"tag\",\n\t\t\t\"--list\",\n\t\t\t\"--sort=-committerdate\",\n\t\t],\n\t\tpostProcess: function (output) {\n\t\t\treturn output.split(\"\\n\").map((tag) => ({\n\t\t\t\tname: tag,\n\t\t\t\ticon: \"🏷️\",\n\t\t\t}));\n\t\t},\n\t},\n\n\t// Files for staging\n\tfiles_for_staging: {\n\t\tscript: [\"git\", \"--no-optional-locks\", \"status\", \"--short\"],\n\t\tpostProcess: (out, context) => {\n\t\t\t// This whole function is a mess\n\n\t\t\tconst output = filterMessages(out);\n\n\t\t\tif (output.startsWith(\"fatal:\")) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tlet files = output.split(\"\\n\").map((file) => {\n\t\t\t\t// From \"git --no-optional-locks status --short\"\n\t\t\t\t// M  dev/github.ts // test file that was added\n\t\t\t\t//  M dev/kubectl.ts // test file that was not added\n\t\t\t\t// A  test2.txt // new added and tracked file\n\t\t\t\t// ?? test.txt // new untracked file\n\t\t\t\tconst alreadyAdded = [\"M\", \"A\"].includes(file.charAt(0));\n\n\t\t\t\tfile = file.trim();\n\t\t\t\tconst arr = file.split(\" \");\n\n\t\t\t\treturn {\n\t\t\t\t\tworking: arr[0],\n\t\t\t\t\tfile: arr.slice(1).join(\" \").trim(),\n\t\t\t\t\talreadyAdded,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst paths = output.split(\"\\n\").map((file) => {\n\t\t\t\tconst arr = file\n\t\t\t\t\t.slice(0, file.lastIndexOf(\"/\") + 1)\n\t\t\t\t\t.trim()\n\t\t\t\t\t.split(\" \");\n\t\t\t\treturn arr.slice(1).join(\" \").trim();\n\t\t\t});\n\n\t\t\tconst dirArr = [];\n\t\t\tif (paths.length >= 2) {\n\t\t\t\tlet currentDir = paths[0];\n\t\t\t\tlet count = 1;\n\t\t\t\tfor (let i = 1; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].includes(currentDir) && i + 1 !== paths.length) {\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (count >= 2) {\n\t\t\t\t\t\t\tdirArr.push(currentDir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcount = 1;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentDir = paths[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Filter out the files that the user has already input in the current edit buffer\n\t\t\tfiles = files.filter((item) => {\n\t\t\t\tconst file = item.file.replace(/^\"|\"$/g, \"\");\n\t\t\t\treturn !context.some((ctx) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tctx === file ||\n\t\t\t\t\t\t// Need to add support for proper globbing one day\n\t\t\t\t\t\t(ctx.endsWith(\"*\") && file.startsWith(ctx.slice(0, -1))) ||\n\t\t\t\t\t\t(ctx.startsWith(\"*\") && file.endsWith(ctx.slice(1)))\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn [\n\t\t\t\t...dirArr.map((name) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: name + \"*\",\n\t\t\t\t\t\tdescription: \"Wildcard\",\n\t\t\t\t\t\ticon: \"fig://icon?type=asterisk\",\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\t...files.map((item) => {\n\t\t\t\t\tconst file = item.file.replace(/^\"|\"$/g, \"\");\n\t\t\t\t\tlet ext = \"\";\n\t\t\t\t\ttry {\n\t\t\t\t\t\text = file.split(\".\").slice(-1)[0];\n\t\t\t\t\t} catch (e) {}\n\n\t\t\t\t\tif (file.endsWith(\"/\")) {\n\t\t\t\t\t\text = \"folder\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the current file is already added\n\t\t\t\t\t// we want to lower the priority\n\t\t\t\t\tconst priority = item.alreadyAdded ? 50 : 100;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: file,\n\t\t\t\t\t\ticon: `fig://icon?type=${ext}&color=ff0000&badge=${item.working}`,\n\t\t\t\t\t\tdescription: \"Changed file\",\n\t\t\t\t\t\tpriority,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t];\n\t\t},\n\t},\n\n\tgetStagedFiles: {\n\t\tscript: [\n\t\t\t\"bash\",\n\t\t\t\"-c\",\n\t\t\t\"git --no-optional-locks status --short | sed -ne '/^M /p' -e '/A /p'\",\n\t\t],\n\t\tpostProcess: postProcessTrackedFiles,\n\t},\n\n\tgetUnstagedFiles: {\n\t\tscript: [\"git\", \"--no-optional-locks\", \"diff\", \"--name-only\"],\n\t\tsplitOn: \"\\n\",\n\t},\n\n\tgetChangedTrackedFiles: {\n\t\tscript: function (context) {\n\t\t\tif (context.includes(\"--staged\") || context.includes(\"--cached\")) {\n\t\t\t\treturn [\n\t\t\t\t\t\"bash\",\n\t\t\t\t\t\"-c\",\n\t\t\t\t\t`git --no-optional-locks status --short | sed -ne '/^M /p' -e '/A /p'`,\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\treturn [\n\t\t\t\t\t\"bash\",\n\t\t\t\t\t\"-c\",\n\t\t\t\t\t`git --no-optional-locks status --short | sed -ne '/M /p' -e '/A /p'`,\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\tpostProcess: postProcessTrackedFiles,\n\t},\n};\n\nconst configSuggestions: Fig.Suggestion[] = [\n\t{\n\t\tname: \"add.ignore-errors\",\n\t\tdescription:\n\t\t\t\"Tells 'git add' to continue adding files when some files cannot be added due to indexing errors. Equivalent to the `--ignore-errors` option of git-add[1]. `add.ignore-errors` is deprecated, as it does not follow the usual naming convention for configuration variables\",\n\t\tdeprecated: true,\n\t\thidden: true,\n\t},\n\t{\n\t\tname: \"add.interactive.useBuiltin\",\n\t\tdescription:\n\t\t\t\"Set to `false` to fall back to the original Perl implementation of the interactive version of git-add[1] instead of the built-in version. Is `true` by default\",\n\t},\n\t{\n\t\tname: \"advice.addEmbeddedRepo\",\n\t\tdescription:\n\t\t\t\"Advice on what to do when you've accidentally added one git repo inside of another\",\n\t},\n\t{\n\t\tname: \"advice.addEmptyPathspec\",\n\t\tdescription:\n\t\t\t\"Advice shown if a user runs the add command without providing the pathspec parameter\",\n\t},\n\t{\n\t\tname: \"advice.addIgnoredFile\",\n\t\tdescription:\n\t\t\t\"Advice shown if a user attempts to add an ignored file to the index\",\n\t},\n\t{\n\t\tname: \"advice.ambiguousFetchRefspec\",\n\t\tdescription:\n\t\t\t\"Advice shown when fetch refspec for multiple remotes map to the same remote-tracking branch namespace and causes branch tracking set-up to fail\",\n\t},\n\t{\n\t\tname: \"advice.amWorkDir\",\n\t\tdescription:\n\t\t\t\"Advice that shows the location of the patch file when git-am[1] fails to apply it\",\n\t},\n\t{\n\t\tname: \"advice.checkoutAmbiguousRemoteBranchName\",\n\t\tdescription:\n\t\t\t\"Advice shown when the argument to git-checkout[1] and git-switch[1] ambiguously resolves to a remote tracking branch on more than one remote in situations where an unambiguous argument would have otherwise caused a remote-tracking branch to be checked out. See the `checkout.defaultRemote` configuration variable for how to set a given remote to used by default in some situations where this advice would be printed\",\n\t},\n\t{\n\t\tname: \"advice.commitBeforeMerge\",\n\t\tdescription:\n\t\t\t\"Advice shown when git-merge[1] refuses to merge to avoid overwriting local changes\",\n\t},\n\t{\n\t\tname: \"advice.detachedHead\",\n\t\tdescription:\n\t\t\t\"Advice shown when you used git-switch[1] or git-checkout[1] to move to the detach HEAD state, to instruct how to create a local branch after the fact\",\n\t},\n\t{\n\t\tname: \"advice.fetchShowForcedUpdates\",\n\t\tdescription:\n\t\t\t\"Advice shown when git-fetch[1] takes a long time to calculate forced updates after ref updates, or to warn that the check is disabled\",\n\t},\n\t{\n\t\tname: \"advice.ignoredHook\",\n\t\tdescription:\n\t\t\t\"Advice shown if a hook is ignored because the hook is not set as executable\",\n\t},\n\t{\n\t\tname: \"advice.implicitIdentity\",\n\t\tdescription:\n\t\t\t\"Advice on how to set your identity configuration when your information is guessed from the system username and domain name\",\n\t},\n\t{\n\t\tname: \"advice.nestedTag\",\n\t\tdescription:\n\t\t\t\"Advice shown if a user attempts to recursively tag a tag object\",\n\t},\n\t{\n\t\tname: \"advice.pushAlreadyExists\",\n\t\tdescription:\n\t\t\t\"Shown when git-push[1] rejects an update that does not qualify for fast-forwarding (e.g., a tag.)\",\n\t},\n\t{\n\t\tname: \"advice.pushFetchFirst\",\n\t\tdescription:\n\t\t\t\"Shown when git-push[1] rejects an update that tries to overwrite a remote ref that points at an object we do not have\",\n\t},\n\t{\n\t\tname: \"advice.pushNeedsForce\",\n\t\tdescription:\n\t\t\t\"Shown when git-push[1] rejects an update that tries to overwrite a remote ref that points at an object that is not a commit-ish, or make the remote ref point at an object that is not a commit-ish\",\n\t},\n\t{\n\t\tname: \"advice.pushNonFFCurrent\",\n\t\tdescription:\n\t\t\t\"Advice shown when git-push[1] fails due to a non-fast-forward update to the current branch\",\n\t},\n\t{\n\t\tname: \"advice.pushNonFFMatching\",\n\t\tdescription:\n\t\t\t\"Advice shown when you ran git-push[1] and pushed 'matching refs' explicitly (i.e. you used ':', or specified a refspec that isn't your current branch) and it resulted in a non-fast-forward error\",\n\t},\n\t{\n\t\tname: \"advice.pushRefNeedsUpdate\",\n\t\tdescription:\n\t\t\t\"Shown when git-push[1] rejects a forced update of a branch when its remote-tracking ref has updates that we do not have locally\",\n\t},\n\t{\n\t\tname: \"advice.pushUnqualifiedRefname\",\n\t\tdescription:\n\t\t\t\"Shown when git-push[1] gives up trying to guess based on the source and destination refs what remote ref namespace the source belongs in, but where we can still suggest that the user push to either refs/heads/* or refs/tags/* based on the type of the source object\",\n\t},\n\t{\n\t\tname: \"advice.pushUpdateRejected\",\n\t\tdescription:\n\t\t\t\"Set this variable to 'false' if you want to disable 'pushNonFFCurrent', 'pushNonFFMatching', 'pushAlreadyExists', 'pushFetchFirst', 'pushNeedsForce', and 'pushRefNeedsUpdate' simultaneously\",\n\t},\n\t{\n\t\tname: \"advice.resetNoRefresh\",\n\t\tdescription:\n\t\t\t\"Advice to consider using the `--no-refresh` option to git-reset[1] when the command takes more than 2 seconds to refresh the index after reset\",\n\t},\n\t{\n\t\tname: \"advice.resolveConflict\",\n\t\tdescription:\n\t\t\t\"Advice shown by various commands when conflicts prevent the operation from being performed\",\n\t},\n\t{\n\t\tname: \"advice.rmHints\",\n\t\tdescription:\n\t\t\t\"In case of failure in the output of git-rm[1], show directions on how to proceed from the current state\",\n\t},\n\t{\n\t\tname: \"advice.sequencerInUse\",\n\t\tdescription: \"Advice shown when a sequencer command is already in progress\",\n\t},\n\t{\n\t\tname: \"advice.skippedCherryPicks\",\n\t\tdescription:\n\t\t\t\"Shown when git-rebase[1] skips a commit that has already been cherry-picked onto the upstream branch\",\n\t},\n\t{\n\t\tname: \"advice.statusAheadBehind\",\n\t\tdescription:\n\t\t\t\"Shown when git-status[1] computes the ahead/behind counts for a local ref compared to its remote tracking ref, and that calculation takes longer than expected. Will not appear if `status.aheadBehind` is false or the option `--no-ahead-behind` is given\",\n\t},\n\t{\n\t\tname: \"advice.statusHints\",\n\t\tdescription:\n\t\t\t\"Show directions on how to proceed from the current state in the output of git-status[1], in the template shown when writing commit messages in git-commit[1], and in the help message shown by git-switch[1] or git-checkout[1] when switching branch\",\n\t},\n\t{\n\t\tname: \"advice.statusUoption\",\n\t\tdescription:\n\t\t\t\"Advise to consider using the `-u` option to git-status[1] when the command takes more than 2 seconds to enumerate untracked files\",\n\t},\n\t{\n\t\tname: \"advice.submoduleAlternateErrorStrategyDie\",\n\t\tdescription:\n\t\t\t'Advice shown when a submodule.alternateErrorStrategy option configured to \"die\" causes a fatal error',\n\t},\n\t{\n\t\tname: \"advice.submodulesNotUpdated\",\n\t\tdescription:\n\t\t\t\"Advice shown when a user runs a submodule command that fails because `git submodule update --init` was not run\",\n\t},\n\t{\n\t\tname: \"advice.suggestDetachingHead\",\n\t\tdescription:\n\t\t\t\"Advice shown when git-switch[1] refuses to detach HEAD without the explicit `--detach` option\",\n\t},\n\t{\n\t\tname: \"advice.updateSparsePath\",\n\t\tdescription:\n\t\t\t\"Advice shown when either git-add[1] or git-rm[1] is asked to update index entries outside the current sparse checkout\",\n\t},\n\t{\n\t\tname: \"advice.waitingForEditor\",\n\t\tdescription:\n\t\t\t\"Print a message to the terminal whenever Git is waiting for editor input from the user\",\n\t},\n\t{\n\t\tname: \"alias.*\",\n\t\tinsertValue: \"alias.{cursor}\",\n\t\tdescription:\n\t\t\t\"Command aliases for the git[1] command wrapper - e.g. after defining `alias.last = cat-file commit HEAD`, the invocation `git last` is equivalent to `git cat-file commit HEAD`. To avoid confusion and troubles with script usage, aliases that hide existing Git commands are ignored. Arguments are split by spaces, the usual shell quoting and escaping is supported. A quote pair or a backslash can be used to quote them\",\n\t},\n\t{\n\t\tname: \"am.keepcr\",\n\t\tdescription:\n\t\t\t\"If true, git-am will call git-mailsplit for patches in mbox format with parameter `--keep-cr`. In this case git-mailsplit will not remove `\\\\r` from lines ending with `\\\\r\\\\n`. Can be overridden by giving `--no-keep-cr` from the command line. See git-am[1], git-mailsplit[1]\",\n\t},\n\t{\n\t\tname: \"am.threeWay\",\n\t\tdescription:\n\t\t\t\"By default, `git am` will fail if the patch does not apply cleanly. When set to true, this setting tells `git am` to fall back on 3-way merge if the patch records the identity of blobs it is supposed to apply to and we have those blobs available locally (equivalent to giving the `--3way` option from the command line). Defaults to `false`. See git-am[1]\",\n\t},\n\t{\n\t\tname: \"apply.ignoreWhitespace\",\n\t\tdescription:\n\t\t\t\"When set to 'change', tells 'git apply' to ignore changes in whitespace, in the same way as the `--ignore-space-change` option. When set to one of: no, none, never, false tells 'git apply' to respect all whitespace differences. See git-apply[1]\",\n\t},\n\t{\n\t\tname: \"apply.whitespace\",\n\t\tdescription:\n\t\t\t\"Tells 'git apply' how to handle whitespaces, in the same way as the `--whitespace` option. See git-apply[1]\",\n\t},\n\t{\n\t\tname: \"blame.blankBoundary\",\n\t\tdescription:\n\t\t\t\"Show blank commit object name for boundary commits in git-blame[1]. This option defaults to false\",\n\t},\n\t{\n\t\tname: \"blame.coloring\",\n\t\tdescription:\n\t\t\t\"This determines the coloring scheme to be applied to blame output. It can be 'repeatedLines', 'highlightRecent', or 'none' which is the default\",\n\t},\n\t{\n\t\tname: \"blame.date\",\n\t\tdescription:\n\t\t\t\"Specifies the format used to output dates in git-blame[1]. If unset the iso format is used. For supported values, see the discussion of the `--date` option at git-log[1]\",\n\t},\n\t{\n\t\tname: \"blame.ignoreRevsFile\",\n\t\tdescription:\n\t\t\t\"Ignore revisions listed in the file, one unabbreviated object name per line, in git-blame[1]. Whitespace and comments beginning with `#` are ignored. This option may be repeated multiple times. Empty file names will reset the list of ignored revisions. This option will be handled before the command line option `--ignore-revs-file`\",\n\t},\n\t{\n\t\tname: \"blame.markIgnoredLines\",\n\t\tdescription:\n\t\t\t\"Mark lines that were changed by an ignored revision that we attributed to another commit with a '?' in the output of git-blame[1]\",\n\t},\n\t{\n\t\tname: \"blame.markUnblamableLines\",\n\t\tdescription:\n\t\t\t\"Mark lines that were changed by an ignored revision that we could not attribute to another commit with a '*' in the output of git-blame[1]\",\n\t},\n\t{\n\t\tname: \"blame.showEmail\",\n\t\tdescription:\n\t\t\t\"Show the author email instead of author name in git-blame[1]. This option defaults to false\",\n\t},\n\t{\n\t\tname: \"blame.showRoot\",\n\t\tdescription:\n\t\t\t\"Do not treat root commits as boundaries in git-blame[1]. This option defaults to false\",\n\t},\n\t{\n\t\tname: \"branch.<name>.description\",\n\t\tinsertValue: \"branch.{cursor}.description\",\n\t\tdescription:\n\t\t\t\"Branch description, can be edited with `git branch --edit-description`. Branch description is automatically added in the format-patch cover letter or request-pull summary\",\n\t},\n\t{\n\t\tname: \"branch.<name>.merge\",\n\t\tinsertValue: \"branch.{cursor}.merge\",\n\t\tdescription:\n\t\t\t\"Defines, together with branch.<name>.remote, the upstream branch for the given branch. It tells 'git fetch'/'git pull'/'git rebase' which branch to merge and can also affect 'git push' (see push.default). When in branch <name>, it tells 'git fetch' the default refspec to be marked for merging in FETCH_HEAD. The value is handled like the remote part of a refspec, and must match a ref which is fetched from the remote given by \\\"branch.<name>.remote\\\". The merge information is used by 'git pull' (which at first calls 'git fetch') to lookup the default branch for merging. Without this option, 'git pull' defaults to merge the first refspec fetched. Specify multiple values to get an octopus merge. If you wish to setup 'git pull' so that it merges into <name> from another branch in the local repository, you can point branch.<name>.merge to the desired branch, and use the relative path setting `.` (a period) for branch.<name>.remote\",\n\t},\n\t{\n\t\tname: \"branch.<name>.mergeOptions\",\n\t\tinsertValue: \"branch.{cursor}.mergeOptions\",\n\t\tdescription:\n\t\t\t\"Sets default options for merging into branch <name>. The syntax and supported options are the same as those of git-merge[1], but option values containing whitespace characters are currently not supported\",\n\t},\n\t{\n\t\tname: \"branch.<name>.pushRemote\",\n\t\tinsertValue: \"branch.{cursor}.pushRemote\",\n\t\tdescription:\n\t\t\t\"When on branch <name>, it overrides `branch.<name>.remote` for pushing. It also overrides `remote.pushDefault` for pushing from branch <name>. When you pull from one place (e.g. your upstream) and push to another place (e.g. your own publishing repository), you would want to set `remote.pushDefault` to specify the remote to push to for all branches, and use this option to override it for a specific branch\",\n\t},\n\t{\n\t\tname: \"branch.<name>.rebase\",\n\t\tinsertValue: \"branch.{cursor}.rebase\",\n\t\tdescription:\n\t\t\t'When true, rebase the branch <name> on top of the fetched branch, instead of merging the default branch from the default remote when \"git pull\" is run. See \"pull.rebase\" for doing this in a non branch-specific manner',\n\t},\n\t{\n\t\tname: \"branch.<name>.remote\",\n\t\tinsertValue: \"branch.{cursor}.remote\",\n\t\tdescription:\n\t\t\t\"When on branch <name>, it tells 'git fetch' and 'git push' which remote to fetch from/push to. The remote to push to may be overridden with `remote.pushDefault` (for all branches). The remote to push to, for the current branch, may be further overridden by `branch.<name>.pushRemote`. If no remote is configured, or if you are not on any branch and there is more than one remote defined in the repository, it defaults to `origin` for fetching and `remote.pushDefault` for pushing. Additionally, `.` (a period) is the current local repository (a dot-repository), see `branch.<name>.merge`'s final note below\",\n\t},\n\t{\n\t\tname: \"branch.autoSetupMerge\",\n\t\tdescription:\n\t\t\t\"Tells 'git branch', 'git switch' and 'git checkout' to set up new branches so that git-pull[1] will appropriately merge from the starting point branch. Note that even if this option is not set, this behavior can be chosen per-branch using the `--track` and `--no-track` options. The valid settings are: `false` -- no automatic setup is done; `true` -- automatic setup is done when the starting point is a remote-tracking branch; `always` -- automatic setup is done when the starting point is either a local branch or remote-tracking branch; `inherit` -- if the starting point has a tracking configuration, it is copied to the new branch; `simple` -- automatic setup is done only when the starting point is a remote-tracking branch and the new branch has the same name as the remote branch. This option defaults to true\",\n\t},\n\t{\n\t\tname: \"branch.autoSetupRebase\",\n\t\tdescription:\n\t\t\t\"When a new branch is created with 'git branch', 'git switch' or 'git checkout' that tracks another branch, this variable tells Git to set up pull to rebase instead of merge (see \\\"branch.<name>.rebase\\\"). When `never`, rebase is never automatically set to true. When `local`, rebase is set to true for tracked branches of other local branches. When `remote`, rebase is set to true for tracked branches of remote-tracking branches. When `always`, rebase will be set to true for all tracking branches. See \\\"branch.autoSetupMerge\\\" for details on how to set up a branch to track another branch. This option defaults to never\",\n\t},\n\t{\n\t\tname: \"branch.sort\",\n\t\tdescription:\n\t\t\t'This variable controls the sort ordering of branches when displayed by git-branch[1]. Without the \"--sort=<value>\" option provided, the value of this variable will be used as the default. See git-for-each-ref[1] field names for valid values',\n\t},\n\t{\n\t\tname: \"browser.<tool>.cmd\",\n\t\tinsertValue: \"browser.{cursor}.cmd\",\n\t\tdescription:\n\t\t\t\"Specify the command to invoke the specified browser. The specified command is evaluated in shell with the URLs passed as arguments. (See git-web{litdd}browse[1].)\",\n\t},\n\t{\n\t\tname: \"browser.<tool>.path\",\n\t\tinsertValue: \"browser.{cursor}.path\",\n\t\tdescription:\n\t\t\t\"Override the path for the given tool that may be used to browse HTML help (see `-w` option in git-help[1]) or a working repository in gitweb (see git-instaweb[1])\",\n\t},\n\t{\n\t\tname: \"checkout.defaultRemote\",\n\t\tdescription:\n\t\t\t\"When you run `git checkout <something>` or `git switch <something>` and only have one remote, it may implicitly fall back on checking out and tracking e.g. `origin/<something>`. This stops working as soon as you have more than one remote with a `<something>` reference. This setting allows for setting the name of a preferred remote that should always win when it comes to disambiguation. The typical use-case is to set this to `origin`\",\n\t},\n\t{\n\t\tname: \"checkout.guess\",\n\t\tdescription:\n\t\t\t\"Provides the default value for the `--guess` or `--no-guess` option in `git checkout` and `git switch`. See git-switch[1] and git-checkout[1]\",\n\t},\n\t{\n\t\tname: \"checkout.thresholdForParallelism\",\n\t\tdescription:\n\t\t\t\"When running parallel checkout with a small number of files, the cost of subprocess spawning and inter-process communication might outweigh the parallelization gains. This setting allows to define the minimum number of files for which parallel checkout should be attempted. The default is 100\",\n\t},\n\t{\n\t\tname: \"checkout.workers\",\n\t\tdescription:\n\t\t\t\"The number of parallel workers to use when updating the working tree. The default is one, i.e. sequential execution. If set to a value less than one, Git will use as many workers as the number of logical cores available. This setting and `checkout.thresholdForParallelism` affect all commands that perform checkout. E.g. checkout, clone, reset, sparse-checkout, etc\",\n\t},\n\t{\n\t\tname: \"clean.requireForce\",\n\t\tdescription:\n\t\t\t\"A boolean to make git-clean do nothing unless given -f, -i or -n. Defaults to true\",\n\t},\n\t{\n\t\tname: \"clone.defaultRemoteName\",\n\t\tdescription:\n\t\t\t\"The name of the remote to create when cloning a repository. Defaults to `origin`, and can be overridden by passing the `--origin` command-line option to git-clone[1]\",\n\t},\n\t{\n\t\tname: \"clone.filterSubmodules\",\n\t\tdescription:\n\t\t\t\"If a partial clone filter is provided (see `--filter` in git-rev-list[1]) and `--recurse-submodules` is used, also apply the filter to submodules\",\n\t},\n\t{\n\t\tname: \"clone.rejectShallow\",\n\t\tdescription:\n\t\t\t\"Reject to clone a repository if it is a shallow one, can be overridden by passing option `--reject-shallow` in command line. See git-clone[1]\",\n\t},\n\t{\n\t\tname: \"color.advice\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable color in hints (e.g. when a push failed, see `advice.*` for a list). May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the error output goes to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.advice.hint\",\n\t\tdescription: \"Use customized color for hints\",\n\t},\n\t{\n\t\tname: \"color.blame.highlightRecent\",\n\t\tdescription:\n\t\t\t\"Specify the line annotation color for `git blame --color-by-age` depending upon the age of the line\",\n\t},\n\t{\n\t\tname: \"color.blame.repeatedLines\",\n\t\tdescription:\n\t\t\t\"Use the specified color to colorize line annotations for `git blame --color-lines`, if they come from the same commit as the preceding line. Defaults to cyan\",\n\t},\n\t{\n\t\tname: \"color.branch\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable color in the output of git-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the output is to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.branch.<slot>\",\n\t\tinsertValue: \"color.branch.{cursor}\",\n\t\tdescription:\n\t\t\t\"Use customized color for branch coloration. `<slot>` is one of `current` (the current branch), `local` (a local branch), `remote` (a remote-tracking branch in refs/remotes/), `upstream` (upstream tracking branch), `plain` (other refs)\",\n\t},\n\t{\n\t\tname: \"color.decorate.<slot>\",\n\t\tinsertValue: \"color.decorate.{cursor}\",\n\t\tdescription:\n\t\t\t\"Use customized color for 'git log --decorate' output. `<slot>` is one of `branch`, `remoteBranch`, `tag`, `stash` or `HEAD` for local branches, remote-tracking branches, tags, stash and HEAD, respectively and `grafted` for grafted commits\",\n\t},\n\t{\n\t\tname: \"color.diff\",\n\t\tdescription:\n\t\t\t\"Whether to use ANSI escape sequences to add color to patches. If this is set to `always`, git-diff[1], git-log[1], and git-show[1] will use color for all patches. If it is set to `true` or `auto`, those commands will only use color when output is to the terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.diff.<slot>\",\n\t\tinsertValue: \"color.diff.{cursor}\",\n\t\tdescription:\n\t\t\t\"Use customized color for diff colorization. `<slot>` specifies which part of the patch to use the specified color, and is one of `context` (context text - `plain` is a historical synonym), `meta` (metainformation), `frag` (hunk header), 'func' (function in hunk header), `old` (removed lines), `new` (added lines), `commit` (commit headers), `whitespace` (highlighting whitespace errors), `oldMoved` (deleted lines), `newMoved` (added lines), `oldMovedDimmed`, `oldMovedAlternative`, `oldMovedAlternativeDimmed`, `newMovedDimmed`, `newMovedAlternative` `newMovedAlternativeDimmed` (See the '<mode>' setting of '--color-moved' in git-diff[1] for details), `contextDimmed`, `oldDimmed`, `newDimmed`, `contextBold`, `oldBold`, and `newBold` (see git-range-diff[1] for details)\",\n\t},\n\t{\n\t\tname: \"color.grep\",\n\t\tdescription:\n\t\t\t\"When set to `always`, always highlight matches. When `false` (or `never`), never. When set to `true` or `auto`, use color only when the output is written to the terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.grep.<slot>\",\n\t\tinsertValue: \"color.grep.{cursor}\",\n\t\tdescription:\n\t\t\t\"Use customized color for grep colorization. `<slot>` specifies which part of the line to use the specified color, and is one of\",\n\t},\n\t{\n\t\tname: \"color.interactive\",\n\t\tdescription:\n\t\t\t'When set to `always`, always use colors for interactive prompts and displays (such as those used by \"git-add --interactive\" and \"git-clean --interactive\"). When false (or `never`), never. When set to `true` or `auto`, use colors only when the output is to the terminal. If unset, then the value of `color.ui` is used (`auto` by default)',\n\t},\n\t{\n\t\tname: \"color.interactive.<slot>\",\n\t\tinsertValue: \"color.interactive.{cursor}\",\n\t\tdescription:\n\t\t\t\"Use customized color for 'git add --interactive' and 'git clean --interactive' output. `<slot>` may be `prompt`, `header`, `help` or `error`, for four distinct types of normal output from interactive commands\",\n\t},\n\t{\n\t\tname: \"color.pager\",\n\t\tdescription:\n\t\t\t\"A boolean to specify whether `auto` color modes should colorize output going to the pager. Defaults to true; set this to false if your pager does not understand ANSI color codes\",\n\t},\n\t{\n\t\tname: \"color.push\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable color in push errors. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the error output goes to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.push.error\",\n\t\tdescription: \"Use customized color for push errors\",\n\t},\n\t{\n\t\tname: \"color.remote\",\n\t\tdescription:\n\t\t\t'If set, keywords at the start of the line are highlighted. The keywords are \"error\", \"warning\", \"hint\" and \"success\", and are matched case-insensitively. May be set to `always`, `false` (or `never`) or `auto` (or `true`). If unset, then the value of `color.ui` is used (`auto` by default)',\n\t},\n\t{\n\t\tname: \"color.remote.<slot>\",\n\t\tinsertValue: \"color.remote.{cursor}\",\n\t\tdescription:\n\t\t\t\"Use customized color for each remote keyword. `<slot>` may be `hint`, `warning`, `success` or `error` which match the corresponding keyword\",\n\t},\n\t{\n\t\tname: \"color.showBranch\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable color in the output of git-show-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the output is to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.status\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable color in the output of git-status[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the output is to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.status.<slot>\",\n\t\tinsertValue: \"color.status.{cursor}\",\n\t\tdescription:\n\t\t\t\"Use customized color for status colorization. `<slot>` is one of `header` (the header text of the status message), `added` or `updated` (files which are added but not committed), `changed` (files which are changed but not added in the index), `untracked` (files which are not tracked by Git), `branch` (the current branch), `nobranch` (the color the 'no branch' warning is shown in, defaulting to red), `localBranch` or `remoteBranch` (the local and remote branch names, respectively, when branch and tracking information is displayed in the status short-format), or `unmerged` (files which have unmerged changes)\",\n\t},\n\t{\n\t\tname: \"color.transport\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable color when pushes are rejected. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the error output goes to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)\",\n\t},\n\t{\n\t\tname: \"color.transport.rejected\",\n\t\tdescription: \"Use customized color when a push was rejected\",\n\t},\n\t{\n\t\tname: \"color.ui\",\n\t\tdescription:\n\t\t\t\"This variable determines the default value for variables such as `color.diff` and `color.grep` that control the use of color per command family. Its scope will expand as more commands learn configuration to set a default for the `--color` option. Set it to `false` or `never` if you prefer Git commands not to use color unless enabled explicitly with some other configuration or the `--color` option. Set it to `always` if you want all output not intended for machine consumption to use color, to `true` or `auto` (this is the default since Git 1.8.4) if you want such output to use color when written to the terminal\",\n\t},\n\t{\n\t\tname: \"column.branch\",\n\t\tdescription:\n\t\t\t\"Specify whether to output branch listing in `git branch` in columns. See `column.ui` for details\",\n\t},\n\t{\n\t\tname: \"column.clean\",\n\t\tdescription:\n\t\t\t\"Specify the layout when list items in `git clean -i`, which always shows files and directories in columns. See `column.ui` for details\",\n\t},\n\t{\n\t\tname: \"column.status\",\n\t\tdescription:\n\t\t\t\"Specify whether to output untracked files in `git status` in columns. See `column.ui` for details\",\n\t},\n\t{\n\t\tname: \"column.tag\",\n\t\tdescription:\n\t\t\t\"Specify whether to output tag listing in `git tag` in columns. See `column.ui` for details\",\n\t},\n\t{\n\t\tname: \"column.ui\",\n\t\tdescription:\n\t\t\t\"Specify whether supported commands should output in columns. This variable consists of a list of tokens separated by spaces or commas:\",\n\t},\n\t{\n\t\tname: \"commit.cleanup\",\n\t\tdescription:\n\t\t\t\"This setting overrides the default of the `--cleanup` option in `git commit`. See git-commit[1] for details. Changing the default can be useful when you always want to keep lines that begin with comment character `#` in your log message, in which case you would do `git config commit.cleanup whitespace` (note that you will have to remove the help lines that begin with `#` in the commit log template yourself, if you do this)\",\n\t},\n\t{\n\t\tname: \"commit.status\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable inclusion of status information in the commit message template when using an editor to prepare the commit message. Defaults to true\",\n\t},\n\t{\n\t\tname: \"commit.template\",\n\t\tdescription:\n\t\t\t\"Specify the pathname of a file to use as the template for new commit messages\",\n\t},\n\t{\n\t\tname: \"commit.verbose\",\n\t\tdescription:\n\t\t\t\"A boolean or int to specify the level of verbose with `git commit`. See git-commit[1]\",\n\t},\n\t{\n\t\tname: \"commitGraph.generationVersion\",\n\t\tdescription:\n\t\t\t\"Specifies the type of generation number version to use when writing or reading the commit-graph file. If version 1 is specified, then the corrected commit dates will not be written or read. Defaults to 2\",\n\t},\n\t{\n\t\tname: \"commitGraph.maxNewFilters\",\n\t\tdescription:\n\t\t\t\"Specifies the default value for the `--max-new-filters` option of `git commit-graph write` (c.f., git-commit-graph[1])\",\n\t},\n\t{\n\t\tname: \"commitGraph.readChangedPaths\",\n\t\tdescription:\n\t\t\t\"If true, then git will use the changed-path Bloom filters in the commit-graph file (if it exists, and they are present). Defaults to true. See git-commit-graph[1] for more information\",\n\t},\n\t{\n\t\tname: \"committer.email\",\n\t\tdescription:\n\t\t\t\"The `user.name` and `user.email` variables determine what ends up in the `author` and `committer` field of commit objects. If you need the `author` or `committer` to be different, the `author.name`, `author.email`, `committer.name` or `committer.email` variables can be set. Also, all of these can be overridden by the `GIT_AUTHOR_NAME`, `GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_NAME`, `GIT_COMMITTER_EMAIL` and `EMAIL` environment variables\",\n\t},\n\t{\n\t\tname: \"completion.commands\",\n\t\tdescription:\n\t\t\t\"This is only used by git-completion.bash to add or remove commands from the list of completed commands. Normally only porcelain commands and a few select others are completed. You can add more commands, separated by space, in this variable. Prefixing the command with '-' will remove it from the existing list\",\n\t},\n\t{\n\t\tname: \"core.abbrev\",\n\t\tdescription:\n\t\t\t'Set the length object names are abbreviated to. If unspecified or set to \"auto\", an appropriate value is computed based on the approximate number of packed objects in your repository, which hopefully is enough for abbreviated object names to stay unique for some time. If set to \"no\", no abbreviation is made and the object names are shown in their full length. The minimum length is 4',\n\t},\n\t{\n\t\tname: \"core.alternateRefsCommand\",\n\t\tdescription:\n\t\t\t\"When advertising tips of available history from an alternate, use the shell to execute the specified command instead of git-for-each-ref[1]. The first argument is the absolute path of the alternate. Output must contain one hex object id per line (i.e., the same as produced by `git for-each-ref --format='%(objectname)'`)\",\n\t},\n\t{\n\t\tname: \"core.alternateRefsPrefixes\",\n\t\tdescription:\n\t\t\t\"When listing references from an alternate, list only references that begin with the given prefix. Prefixes match as if they were given as arguments to git-for-each-ref[1]. To list multiple prefixes, separate them with whitespace. If `core.alternateRefsCommand` is set, setting `core.alternateRefsPrefixes` has no effect\",\n\t},\n\t{\n\t\tname: \"core.askPass\",\n\t\tdescription:\n\t\t\t\"Some commands (e.g. svn and http interfaces) that interactively ask for a password can be told to use an external program given via the value of this variable. Can be overridden by the `GIT_ASKPASS` environment variable. If not set, fall back to the value of the `SSH_ASKPASS` environment variable or, failing that, a simple password prompt. The external program shall be given a suitable prompt as command-line argument and write the password on its STDOUT\",\n\t},\n\t{\n\t\tname: \"core.attributesFile\",\n\t\tdescription:\n\t\t\t\"In addition to `.gitattributes` (per-directory) and `.git/info/attributes`, Git looks into this file for attributes (see gitattributes[5]). Path expansions are made the same way as for `core.excludesFile`. Its default value is `$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/attributes` is used instead\",\n\t},\n\t{\n\t\tname: \"core.autocrlf\",\n\t\tdescription:\n\t\t\t'Setting this variable to \"true\" is the same as setting the `text` attribute to \"auto\" on all files and core.eol to \"crlf\". Set to true if you want to have `CRLF` line endings in your working directory and the repository has LF line endings. This variable can be set to \\'input\\', in which case no output conversion is performed',\n\t},\n\t{\n\t\tname: \"core.bare\",\n\t\tdescription:\n\t\t\t\"If true this repository is assumed to be 'bare' and has no working directory associated with it. If this is the case a number of commands that require a working directory will be disabled, such as git-add[1] or git-merge[1]\",\n\t},\n\t{\n\t\tname: \"core.bigFileThreshold\",\n\t\tdescription:\n\t\t\t\"The size of files considered \\\"big\\\", which as discussed below changes the behavior of numerous git commands, as well as how such files are stored within the repository. The default is 512 MiB. Common unit suffixes of 'k', 'm', or 'g' are supported\",\n\t},\n\t{\n\t\tname: \"core.checkRoundtripEncoding\",\n\t\tdescription:\n\t\t\t\"A comma and/or whitespace separated list of encodings that Git performs UTF-8 round trip checks on if they are used in an `working-tree-encoding` attribute (see gitattributes[5]). The default value is `SHIFT-JIS`\",\n\t},\n\t{\n\t\tname: \"core.checkStat\",\n\t\tdescription:\n\t\t\t\"When missing or is set to `default`, many fields in the stat structure are checked to detect if a file has been modified since Git looked at it. When this configuration variable is set to `minimal`, sub-second part of mtime and ctime, the uid and gid of the owner of the file, the inode number (and the device number, if Git was compiled to use it), are excluded from the check among these fields, leaving only the whole-second part of mtime (and ctime, if `core.trustCtime` is set) and the filesize to be checked\",\n\t},\n\t{\n\t\tname: \"core.commentChar\",\n\t\tdescription:\n\t\t\t\"Commands such as `commit` and `tag` that let you edit messages consider a line that begins with this character commented, and removes them after the editor returns (default '#')\",\n\t},\n\t{\n\t\tname: \"core.commitGraph\",\n\t\tdescription:\n\t\t\t\"If true, then git will read the commit-graph file (if it exists) to parse the graph structure of commits. Defaults to true. See git-commit-graph[1] for more information\",\n\t},\n\t{\n\t\tname: \"core.compression\",\n\t\tdescription:\n\t\t\t\"An integer -1..9, indicating a default compression level. -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. If set, this provides a default to other compression variables, such as `core.looseCompression` and `pack.compression`\",\n\t},\n\t{\n\t\tname: \"core.createObject\",\n\t\tdescription:\n\t\t\t\"You can set this to 'link', in which case a hardlink followed by a delete of the source are used to make sure that object creation will not overwrite existing objects\",\n\t},\n\t{\n\t\tname: \"core.deltaBaseCacheLimit\",\n\t\tdescription:\n\t\t\t\"Maximum number of bytes per thread to reserve for caching base objects that may be referenced by multiple deltified objects. By storing the entire decompressed base objects in a cache Git is able to avoid unpacking and decompressing frequently used base objects multiple times\",\n\t},\n\t{\n\t\tname: \"core.editor\",\n\t\tdescription:\n\t\t\t\"Commands such as `commit` and `tag` that let you edit messages by launching an editor use the value of this variable when it is set, and the environment variable `GIT_EDITOR` is not set. See git-var[1]\",\n\t},\n\t{\n\t\tname: \"core.eol\",\n\t\tdescription:\n\t\t\t\"Sets the line ending type to use in the working directory for files that are marked as text (either by having the `text` attribute set, or by having `text=auto` and Git auto-detecting the contents as text). Alternatives are 'lf', 'crlf' and 'native', which uses the platform's native line ending. The default value is `native`. See gitattributes[5] for more information on end-of-line conversion. Note that this value is ignored if `core.autocrlf` is set to `true` or `input`\",\n\t},\n\t{\n\t\tname: \"core.excludesFile\",\n\t\tdescription:\n\t\t\t\"Specifies the pathname to the file that contains patterns to describe paths that are not meant to be tracked, in addition to `.gitignore` (per-directory) and `.git/info/exclude`. Defaults to `$XDG_CONFIG_HOME/git/ignore`. If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/ignore` is used instead. See gitignore[5]\",\n\t},\n\t{\n\t\tname: \"core.fileMode\",\n\t\tdescription:\n\t\t\t\"Tells Git if the executable bit of files in the working tree is to be honored\",\n\t},\n\t{\n\t\tname: \"core.filesRefLockTimeout\",\n\t\tdescription:\n\t\t\t\"The length of time, in milliseconds, to retry when trying to lock an individual reference. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 100 (i.e., retry for 100ms)\",\n\t},\n\t{\n\t\tname: \"core.fsmonitor\",\n\t\tdescription:\n\t\t\t\"If set to true, enable the built-in file system monitor daemon for this working directory (git-fsmonitor{litdd}daemon[1])\",\n\t},\n\t{\n\t\tname: \"core.fsmonitorHookVersion\",\n\t\tdescription:\n\t\t\t'Sets the protocol version to be used when invoking the \"fsmonitor\" hook',\n\t},\n\t{\n\t\tname: \"core.fsync\",\n\t\tdescription:\n\t\t\t\"A comma-separated list of components of the repository that should be hardened via the core.fsyncMethod when created or modified. You can disable hardening of any component by prefixing it with a '-'. Items that are not hardened may be lost in the event of an unclean system shutdown. Unless you have special requirements, it is recommended that you leave this option empty or pick one of `committed`, `added`, or `all`\",\n\t},\n\t{\n\t\tname: \"core.fsyncMethod\",\n\t\tdescription:\n\t\t\t\"A value indicating the strategy Git will use to harden repository data using fsync and related primitives\",\n\t},\n\t{\n\t\tname: \"core.fsyncObjectFiles\",\n\t\tdescription:\n\t\t\t\"This boolean will enable 'fsync()' when writing object files. This setting is deprecated. Use core.fsync instead\",\n\t},\n\t{\n\t\tname: \"core.gitProxy\",\n\t\tdescription:\n\t\t\t'A \"proxy command\" to execute (as \\'command host port\\') instead of establishing direct connection to the remote server when using the Git protocol for fetching. If the variable value is in the \"COMMAND for DOMAIN\" format, the command is applied only on hostnames ending with the specified domain string. This variable may be set multiple times and is matched in the given order; the first match wins',\n\t},\n\t{\n\t\tname: \"core.hideDotFiles\",\n\t\tdescription:\n\t\t\t\"(Windows-only) If true, mark newly-created directories and files whose name starts with a dot as hidden. If 'dotGitOnly', only the `.git/` directory is hidden, but no other files starting with a dot. The default mode is 'dotGitOnly'\",\n\t},\n\t{\n\t\tname: \"core.hooksPath\",\n\t\tdescription:\n\t\t\t\"By default Git will look for your hooks in the `$GIT_DIR/hooks` directory. Set this to different path, e.g. `/etc/git/hooks`, and Git will try to find your hooks in that directory, e.g. `/etc/git/hooks/pre-receive` instead of in `$GIT_DIR/hooks/pre-receive`\",\n\t},\n\t{\n\t\tname: \"core.ignoreCase\",\n\t\tdescription:\n\t\t\t'Internal variable which enables various workarounds to enable Git to work better on filesystems that are not case sensitive, like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing finds \"makefile\" when Git expects \"Makefile\", Git will assume it is really the same file, and continue to remember it as \"Makefile\"',\n\t},\n\t{\n\t\tname: \"core.ignoreStat\",\n\t\tdescription:\n\t\t\t'If true, Git will avoid using lstat() calls to detect if files have changed by setting the \"assume-unchanged\" bit for those tracked files which it has updated identically in both the index and working tree',\n\t},\n\t{\n\t\tname: \"core.logAllRefUpdates\",\n\t\tdescription:\n\t\t\t'Enable the reflog. Updates to a ref <ref> is logged to the file \"`$GIT_DIR/logs/<ref>`\", by appending the new and old SHA-1, the date/time and the reason of the update, but only when the file exists. If this configuration variable is set to `true`, missing \"`$GIT_DIR/logs/<ref>`\" file is automatically created for branch heads (i.e. under `refs/heads/`), remote refs (i.e. under `refs/remotes/`), note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`. If it is set to `always`, then a missing reflog is automatically created for any ref under `refs/`',\n\t},\n\t{\n\t\tname: \"core.looseCompression\",\n\t\tdescription:\n\t\t\t\"An integer -1..9, indicating the compression level for objects that are not in a pack file. -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. If not set, defaults to core.compression. If that is not set, defaults to 1 (best speed)\",\n\t},\n\t{\n\t\tname: \"core.multiPackIndex\",\n\t\tdescription:\n\t\t\t\"Use the multi-pack-index file to track multiple packfiles using a single index. See git-multi-pack-index[1] for more information. Defaults to true\",\n\t},\n\t{\n\t\tname: \"core.notesRef\",\n\t\tdescription:\n\t\t\t\"When showing commit messages, also show notes which are stored in the given ref. The ref must be fully qualified. If the given ref does not exist, it is not an error but means that no notes should be printed\",\n\t},\n\t{\n\t\tname: \"core.packedGitLimit\",\n\t\tdescription:\n\t\t\t\"Maximum number of bytes to map simultaneously into memory from pack files. If Git needs to access more than this many bytes at once to complete an operation it will unmap existing regions to reclaim virtual address space within the process\",\n\t},\n\t{\n\t\tname: \"core.packedGitWindowSize\",\n\t\tdescription:\n\t\t\t\"Number of bytes of a pack file to map into memory in a single mapping operation. Larger window sizes may allow your system to process a smaller number of large pack files more quickly. Smaller window sizes will negatively affect performance due to increased calls to the operating system's memory manager, but may improve performance when accessing a large number of large pack files\",\n\t},\n\t{\n\t\tname: \"core.packedRefsTimeout\",\n\t\tdescription:\n\t\t\t\"The length of time, in milliseconds, to retry when trying to lock the `packed-refs` file. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 1000 (i.e., retry for 1 second)\",\n\t},\n\t{\n\t\tname: \"core.pager\",\n\t\tdescription:\n\t\t\t\"Text viewer for use by Git commands (e.g., 'less'). The value is meant to be interpreted by the shell. The order of preference is the `$GIT_PAGER` environment variable, then `core.pager` configuration, then `$PAGER`, and then the default chosen at compile time (usually 'less')\",\n\t},\n\t{\n\t\tname: \"core.precomposeUnicode\",\n\t\tdescription:\n\t\t\t\"This option is only used by Mac OS implementation of Git. When core.precomposeUnicode=true, Git reverts the unicode decomposition of filenames done by Mac OS. This is useful when sharing a repository between Mac OS and Linux or Windows. (Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7). When false, file names are handled fully transparent by Git, which is backward compatible with older versions of Git\",\n\t},\n\t{\n\t\tname: \"core.preferSymlinkRefs\",\n\t\tdescription:\n\t\t\t'Instead of the default \"symref\" format for HEAD and other symbolic reference files, use symbolic links. This is sometimes needed to work with old scripts that expect HEAD to be a symbolic link',\n\t},\n\t{\n\t\tname: \"core.preloadIndex\",\n\t\tdescription: \"Enable parallel index preload for operations like 'git diff'\",\n\t},\n\t{\n\t\tname: \"core.protectHFS\",\n\t\tdescription:\n\t\t\t\"If set to true, do not allow checkout of paths that would be considered equivalent to `.git` on an HFS+ filesystem. Defaults to `true` on Mac OS, and `false` elsewhere\",\n\t},\n\t{\n\t\tname: \"core.protectNTFS\",\n\t\tdescription:\n\t\t\t'If set to true, do not allow checkout of paths that would cause problems with the NTFS filesystem, e.g. conflict with 8.3 \"short\" names. Defaults to `true` on Windows, and `false` elsewhere',\n\t},\n\t{\n\t\tname: \"core.quotePath\",\n\t\tdescription:\n\t\t\t'Commands that output paths (e.g. \\'ls-files\\', \\'diff\\'), will quote \"unusual\" characters in the pathname by enclosing the pathname in double-quotes and escaping those characters with backslashes in the same way C escapes control characters (e.g. `\\\\t` for TAB, `\\\\n` for LF, `\\\\\\\\` for backslash) or bytes with values larger than 0x80 (e.g. octal `\\\\302\\\\265` for \"micro\" in UTF-8). If this variable is set to false, bytes higher than 0x80 are not considered \"unusual\" any more. Double-quotes, backslash and control characters are always escaped regardless of the setting of this variable. A simple space character is not considered \"unusual\". Many commands can output pathnames completely verbatim using the `-z` option. The default value is true',\n\t},\n\t{\n\t\tname: \"core.repositoryFormatVersion\",\n\t\tdescription:\n\t\t\t\"Internal variable identifying the repository format and layout version\",\n\t},\n\t{\n\t\tname: \"core.restrictinheritedhandles\",\n\t\tdescription:\n\t\t\t\"Windows-only: override whether spawned processes inherit only standard file handles (`stdin`, `stdout` and `stderr`) or all handles. Can be `auto`, `true` or `false`. Defaults to `auto`, which means `true` on Windows 7 and later, and `false` on older Windows versions\",\n\t},\n\t{\n\t\tname: \"core.safecrlf\",\n\t\tdescription:\n\t\t\t'If true, makes Git check if converting `CRLF` is reversible when end-of-line conversion is active. Git will verify if a command modifies a file in the work tree either directly or indirectly. For example, committing a file followed by checking out the same file should yield the original file in the work tree. If this is not the case for the current setting of `core.autocrlf`, Git will reject the file. The variable can be set to \"warn\", in which case Git will only warn about an irreversible conversion but continue the operation',\n\t},\n\t{\n\t\tname: \"core.sharedRepository\",\n\t\tdescription:\n\t\t\t\"When 'group' (or 'true'), the repository is made shareable between several users in a group (making sure all the files and objects are group-writable). When 'all' (or 'world' or 'everybody'), the repository will be readable by all users, additionally to being group-shareable. When 'umask' (or 'false'), Git will use permissions reported by umask(2). When '0xxx', where '0xxx' is an octal number, files in the repository will have this mode value. '0xxx' will override user's umask value (whereas the other options will only override requested parts of the user's umask value). Examples: '0660' will make the repo read/write-able for the owner and group, but inaccessible to others (equivalent to 'group' unless umask is e.g. '0022'). '0640' is a repository that is group-readable but not group-writable. See git-init[1]. False by default\",\n\t},\n\t{\n\t\tname: \"core.sparseCheckout\",\n\t\tdescription:\n\t\t\t'Enable \"sparse checkout\" feature. See git-sparse-checkout[1] for more information',\n\t},\n\t{\n\t\tname: \"core.sparseCheckoutCone\",\n\t\tdescription:\n\t\t\t'Enables the \"cone mode\" of the sparse checkout feature. When the sparse-checkout file contains a limited set of patterns, this mode provides significant performance advantages. The \"non-cone mode\" can be requested to allow specifying more flexible patterns by setting this variable to \\'false\\'. See git-sparse-checkout[1] for more information',\n\t},\n\t{\n\t\tname: \"core.splitIndex\",\n\t\tdescription:\n\t\t\t\"If true, the split-index feature of the index will be used. See git-update-index[1]. False by default\",\n\t},\n\t{\n\t\tname: \"core.sshCommand\",\n\t\tdescription:\n\t\t\t\"If this variable is set, `git fetch` and `git push` will use the specified command instead of `ssh` when they need to connect to a remote system. The command is in the same form as the `GIT_SSH_COMMAND` environment variable and is overridden when the environment variable is set\",\n\t},\n\t{\n\t\tname: \"core.symlinks\",\n\t\tdescription:\n\t\t\t\"If false, symbolic links are checked out as small plain files that contain the link text. git-update-index[1] and git-add[1] will not change the recorded type to regular file. Useful on filesystems like FAT that do not support symbolic links\",\n\t},\n\t{\n\t\tname: \"core.trustctime\",\n\t\tdescription:\n\t\t\t\"If false, the ctime differences between the index and the working tree are ignored; useful when the inode change time is regularly modified by something outside Git (file system crawlers and some backup systems). See git-update-index[1]. True by default\",\n\t},\n\t{\n\t\tname: \"core.unsetenvvars\",\n\t\tdescription:\n\t\t\t\"Windows-only: comma-separated list of environment variables' names that need to be unset before spawning any other process. Defaults to `PERL5LIB` to account for the fact that Git for Windows insists on using its own Perl interpreter\",\n\t},\n\t{\n\t\tname: \"core.untrackedCache\",\n\t\tdescription:\n\t\t\t\"Determines what to do about the untracked cache feature of the index. It will be kept, if this variable is unset or set to `keep`. It will automatically be added if set to `true`. And it will automatically be removed, if set to `false`. Before setting it to `true`, you should check that mtime is working properly on your system. See git-update-index[1]. `keep` by default, unless `feature.manyFiles` is enabled which sets this setting to `true` by default\",\n\t},\n\t{\n\t\tname: \"core.useReplaceRefs\",\n\t\tdescription:\n\t\t\t\"If set to `false`, behave as if the `--no-replace-objects` option was given on the command line. See git[1] and git-replace[1] for more information\",\n\t},\n\t{\n\t\tname: \"core.warnAmbiguousRefs\",\n\t\tdescription:\n\t\t\t\"If true, Git will warn you if the ref name you passed it is ambiguous and might match multiple refs in the repository. True by default\",\n\t},\n\t{\n\t\tname: \"core.whitespace\",\n\t\tdescription:\n\t\t\t\"A comma separated list of common whitespace problems to notice. 'git diff' will use `color.diff.whitespace` to highlight them, and 'git apply --whitespace=error' will consider them as errors. You can prefix `-` to disable any of them (e.g. `-trailing-space`):\",\n\t},\n\t{\n\t\tname: \"core.worktree\",\n\t\tdescription:\n\t\t\t\"Set the path to the root of the working tree. If `GIT_COMMON_DIR` environment variable is set, core.worktree is ignored and not used for determining the root of working tree. This can be overridden by the `GIT_WORK_TREE` environment variable and the `--work-tree` command-line option. The value can be an absolute path or relative to the path to the .git directory, which is either specified by --git-dir or GIT_DIR, or automatically discovered. If --git-dir or GIT_DIR is specified but none of --work-tree, GIT_WORK_TREE and core.worktree is specified, the current working directory is regarded as the top level of your working tree\",\n\t},\n\t{\n\t\tname: \"credential.helper\",\n\t\tdescription:\n\t\t\t\"Specify an external helper to be called when a username or password credential is needed; the helper may consult external storage to avoid prompting the user for the credentials. This is normally the name of a credential helper with possible arguments, but may also be an absolute path with arguments or, if preceded by `!`, shell commands\",\n\t},\n\t{\n\t\tname: \"credential.useHttpPath\",\n\t\tdescription:\n\t\t\t'When acquiring credentials, consider the \"path\" component of an http or https URL to be important. Defaults to false. See gitcredentials[7] for more information',\n\t},\n\t{\n\t\tname: \"credential.username\",\n\t\tdescription:\n\t\t\t\"If no username is set for a network authentication, use this username by default. See credential.<context>.* below, and gitcredentials[7]\",\n\t},\n\t{\n\t\tname: \"credentialCache.ignoreSIGHUP\",\n\t\tdescription:\n\t\t\t\"Tell git-credential-cache--daemon to ignore SIGHUP, instead of quitting\",\n\t},\n\t{\n\t\tname: \"credentialStore.lockTimeoutMS\",\n\t\tdescription:\n\t\t\t\"The length of time, in milliseconds, for git-credential-store to retry when trying to lock the credentials file. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 1000 (i.e., retry for 1s)\",\n\t},\n\t{\n\t\tname: \"credential.<url>.helper\",\n\t\tinsertValue: \"credential.{cursor}.helper\",\n\t\tdescription:\n\t\t\t\"Specify an external helper to be called when a username or password credential is needed; the helper may consult external storage to avoid prompting the user for the credentials. This is normally the name of a credential helper with possible arguments, but may also be an absolute path with arguments or, if preceded by `!`, shell commands\",\n\t},\n\t{\n\t\tname: \"credential.<url>.useHttpPath\",\n\t\tinsertValue: \"credential.{cursor}.useHttpPath\",\n\t\tdescription:\n\t\t\t'When acquiring credentials, consider the \"path\" component of an http or https URL to be important. Defaults to false. See gitcredentials[7] for more information',\n\t},\n\t{\n\t\tname: \"credential.<url>.username\",\n\t\tinsertValue: \"credential.{cursor}.username\",\n\t\tdescription:\n\t\t\t\"If no username is set for a network authentication, use this username by default. See credential.<context>.* below, and gitcredentials[7]\",\n\t},\n\t{\n\t\tname: \"credentialCache.<url>.ignoreSIGHUP\",\n\t\tinsertValue: \"credentialCache.{cursor}.ignoreSIGHUP\",\n\t\tdescription:\n\t\t\t\"Tell git-credential-cache--daemon to ignore SIGHUP, instead of quitting\",\n\t},\n\t{\n\t\tname: \"credentialStore.<url>.lockTimeoutMS\",\n\t\tinsertValue: \"credentialStore.{cursor}.lockTimeoutMS\",\n\t\tdescription:\n\t\t\t\"The length of time, in milliseconds, for git-credential-store to retry when trying to lock the credentials file. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 1000 (i.e., retry for 1s)\",\n\t},\n\t{\n\t\tname: \"diff.<driver>.binary\",\n\t\tinsertValue: \"diff.{cursor}.binary\",\n\t\tdescription:\n\t\t\t\"Set this option to true to make the diff driver treat files as binary. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"diff.<driver>.cachetextconv\",\n\t\tinsertValue: \"diff.{cursor}.cachetextconv\",\n\t\tdescription:\n\t\t\t\"Set this option to true to make the diff driver cache the text conversion outputs. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"diff.<driver>.command\",\n\t\tinsertValue: \"diff.{cursor}.command\",\n\t\tdescription:\n\t\t\t\"The custom diff driver command. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"diff.<driver>.textconv\",\n\t\tinsertValue: \"diff.{cursor}.textconv\",\n\t\tdescription:\n\t\t\t\"The command that the diff driver should call to generate the text-converted version of a file. The result of the conversion is used to generate a human-readable diff. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"diff.<driver>.wordRegex\",\n\t\tinsertValue: \"diff.{cursor}.wordRegex\",\n\t\tdescription:\n\t\t\t\"The regular expression that the diff driver should use to split words in a line. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"diff.<driver>.xfuncname\",\n\t\tinsertValue: \"diff.{cursor}.xfuncname\",\n\t\tdescription:\n\t\t\t\"The regular expression that the diff driver should use to recognize the hunk header. A built-in pattern may also be used. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"diff.algorithm\",\n\t\tdescription: \"Choose a diff algorithm\",\n\t},\n\t{\n\t\tname: \"diff.autoRefreshIndex\",\n\t\tdescription:\n\t\t\t\"When using 'git diff' to compare with work tree files, do not consider stat-only change as changed. Instead, silently run `git update-index --refresh` to update the cached stat information for paths whose contents in the work tree match the contents in the index. This option defaults to true. Note that this affects only 'git diff' Porcelain, and not lower level 'diff' commands such as 'git diff-files'\",\n\t},\n\t{\n\t\tname: \"diff.colorMoved\",\n\t\tdescription:\n\t\t\t\"If set to either a valid `<mode>` or a true value, moved lines in a diff are colored differently, for details of valid modes see '--color-moved' in git-diff[1]. If simply set to true the default color mode will be used. When set to false, moved lines are not colored\",\n\t},\n\t{\n\t\tname: \"diff.colorMovedWS\",\n\t\tdescription:\n\t\t\t\"When moved lines are colored using e.g. the `diff.colorMoved` setting, this option controls the `<mode>` how spaces are treated for details of valid modes see '--color-moved-ws' in git-diff[1]\",\n\t},\n\t{\n\t\tname: \"diff.context\",\n\t\tdescription:\n\t\t\t\"Generate diffs with <n> lines of context instead of the default of 3. This value is overridden by the -U option\",\n\t},\n\t{\n\t\tname: \"diff.dirstat\",\n\t\tdescription:\n\t\t\t\"A comma separated list of `--dirstat` parameters specifying the default behavior of the `--dirstat` option to git-diff[1] and friends. The defaults can be overridden on the command line (using `--dirstat=<param1,param2,...>`). The fallback defaults (when not changed by `diff.dirstat`) are `changes,noncumulative,3`. The following parameters are available:\",\n\t},\n\t{\n\t\tname: \"diff.external\",\n\t\tdescription:\n\t\t\t'If this config variable is set, diff generation is not performed using the internal diff machinery, but using the given command. Can be overridden with the `GIT_EXTERNAL_DIFF\\' environment variable. The command is called with parameters as described under \"git Diffs\" in git[1]. Note: if you want to use an external diff program only on a subset of your files, you might want to use gitattributes[5] instead',\n\t},\n\t{\n\t\tname: \"diff.guitool\",\n\t\tdescription:\n\t\t\t\"Controls which diff tool is used by git-difftool[1] when the -g/--gui flag is specified. This variable overrides the value configured in `merge.guitool`. The list below shows the valid built-in values. Any other value is treated as a custom diff tool and requires that a corresponding difftool.<guitool>.cmd variable is defined\",\n\t},\n\t{\n\t\tname: \"diff.ignoreSubmodules\",\n\t\tdescription:\n\t\t\t\"Sets the default value of --ignore-submodules. Note that this affects only 'git diff' Porcelain, and not lower level 'diff' commands such as 'git diff-files'. 'git checkout' and 'git switch' also honor this setting when reporting uncommitted changes. Setting it to 'all' disables the submodule summary normally shown by 'git commit' and 'git status' when `status.submoduleSummary` is set unless it is overridden by using the --ignore-submodules command-line option. The 'git submodule' commands are not affected by this setting. By default this is set to untracked so that any untracked submodules are ignored\",\n\t},\n\t{\n\t\tname: \"diff.indentHeuristic\",\n\t\tdescription:\n\t\t\t\"Set this option to `false` to disable the default heuristics that shift diff hunk boundaries to make patches easier to read\",\n\t},\n\t{\n\t\tname: \"diff.interHunkContext\",\n\t\tdescription:\n\t\t\t\"Show the context between diff hunks, up to the specified number of lines, thereby fusing the hunks that are close to each other. This value serves as the default for the `--inter-hunk-context` command line option\",\n\t},\n\t{\n\t\tname: \"diff.mnemonicPrefix\",\n\t\tdescription:\n\t\t\t'If set, \\'git diff\\' uses a prefix pair that is different from the standard \"a/\" and \"b/\" depending on what is being compared. When this configuration is in effect, reverse diff output also swaps the order of the prefixes:',\n\t},\n\t{\n\t\tname: \"diff.noprefix\",\n\t\tdescription:\n\t\t\t\"If set, 'git diff' does not show any source or destination prefix\",\n\t},\n\t{\n\t\tname: \"diff.orderFile\",\n\t\tdescription:\n\t\t\t\"File indicating how to order files within a diff. See the '-O' option to git-diff[1] for details. If `diff.orderFile` is a relative pathname, it is treated as relative to the top of the working tree\",\n\t},\n\t{\n\t\tname: \"diff.relative\",\n\t\tdescription:\n\t\t\t\"If set to 'true', 'git diff' does not show changes outside of the directory and show pathnames relative to the current directory\",\n\t},\n\t{\n\t\tname: \"diff.renameLimit\",\n\t\tdescription:\n\t\t\t\"The number of files to consider in the exhaustive portion of copy/rename detection; equivalent to the 'git diff' option `-l`. If not set, the default value is currently 1000. This setting has no effect if rename detection is turned off\",\n\t},\n\t{\n\t\tname: \"diff.renames\",\n\t\tdescription:\n\t\t\t'Whether and how Git detects renames. If set to \"false\", rename detection is disabled. If set to \"true\", basic rename detection is enabled. If set to \"copies\" or \"copy\", Git will detect copies, as well. Defaults to true. Note that this affects only \\'git diff\\' Porcelain like git-diff[1] and git-log[1], and not lower level commands such as git-diff-files[1]',\n\t},\n\t{\n\t\tname: \"diff.statGraphWidth\",\n\t\tdescription:\n\t\t\t\"Limit the width of the graph part in --stat output. If set, applies to all commands generating --stat output except format-patch\",\n\t},\n\t{\n\t\tname: \"diff.submodule\",\n\t\tdescription:\n\t\t\t'Specify the format in which differences in submodules are shown. The \"short\" format just shows the names of the commits at the beginning and end of the range. The \"log\" format lists the commits in the range like git-submodule[1] `summary` does. The \"diff\" format shows an inline diff of the changed contents of the submodule. Defaults to \"short\"',\n\t},\n\t{\n\t\tname: \"diff.suppressBlankEmpty\",\n\t\tdescription:\n\t\t\t\"A boolean to inhibit the standard behavior of printing a space before each empty output line. Defaults to false\",\n\t},\n\t{\n\t\tname: \"diff.tool\",\n\t\tdescription:\n\t\t\t\"Controls which diff tool is used by git-difftool[1]. This variable overrides the value configured in `merge.tool`. The list below shows the valid built-in values. Any other value is treated as a custom diff tool and requires that a corresponding difftool.<tool>.cmd variable is defined\",\n\t},\n\t{\n\t\tname: \"diff.wordRegex\",\n\t\tdescription:\n\t\t\t'A POSIX Extended Regular Expression used to determine what is a \"word\" when performing word-by-word difference calculations. Character sequences that match the regular expression are \"words\", all other characters are *ignorable* whitespace',\n\t},\n\t{\n\t\tname: \"diff.wsErrorHighlight\",\n\t\tdescription:\n\t\t\t\"Highlight whitespace errors in the `context`, `old` or `new` lines of the diff. Multiple values are separated by comma, `none` resets previous values, `default` reset the list to `new` and `all` is a shorthand for `old,new,context`. The whitespace errors are colored with `color.diff.whitespace`. The command line option `--ws-error-highlight=<kind>` overrides this setting\",\n\t},\n\t{\n\t\tname: \"difftool.<tool>.cmd\",\n\t\tinsertValue: \"difftool.{cursor}.cmd\",\n\t\tdescription:\n\t\t\t\"Specify the command to invoke the specified diff tool. The specified command is evaluated in shell with the following variables available: 'LOCAL' is set to the name of the temporary file containing the contents of the diff pre-image and 'REMOTE' is set to the name of the temporary file containing the contents of the diff post-image\",\n\t},\n\t{\n\t\tname: \"difftool.<tool>.path\",\n\t\tinsertValue: \"difftool.{cursor}.path\",\n\t\tdescription:\n\t\t\t\"Override the path for the given tool. This is useful in case your tool is not in the PATH\",\n\t},\n\t{\n\t\tname: \"difftool.prompt\",\n\t\tdescription: \"Prompt before each invocation of the diff tool\",\n\t},\n\t{\n\t\tname: \"extensions.objectFormat\",\n\t\tdescription:\n\t\t\t\"Specify the hash algorithm to use. The acceptable values are `sha1` and `sha256`. If not specified, `sha1` is assumed. It is an error to specify this key unless `core.repositoryFormatVersion` is 1\",\n\t},\n\t{\n\t\tname: \"extensions.worktreeConfig\",\n\t\tdescription:\n\t\t\t\"If enabled, then worktrees will load config settings from the `$GIT_DIR/config.worktree` file in addition to the `$GIT_COMMON_DIR/config` file. Note that `$GIT_COMMON_DIR` and `$GIT_DIR` are the same for the main working tree, while other working trees have `$GIT_DIR` equal to `$GIT_COMMON_DIR/worktrees/<id>/`. The settings in the `config.worktree` file will override settings from any other config files\",\n\t},\n\t{\n\t\tname: \"fastimport.unpackLimit\",\n\t\tdescription:\n\t\t\t\"If the number of objects imported by git-fast-import[1] is below this limit, then the objects will be unpacked into loose object files. However if the number of imported objects equals or exceeds this limit then the pack will be stored as a pack. Storing the pack from a fast-import can make the import operation complete faster, especially on slow filesystems. If not set, the value of `transfer.unpackLimit` is used instead\",\n\t},\n\t{\n\t\tname: \"feature.*\",\n\t\tinsertValue: \"feature.{cursor}\",\n\t\tdescription:\n\t\t\t\"The config settings that start with `feature.` modify the defaults of a group of other config settings. These groups are created by the Git developer community as recommended defaults and are subject to change. In particular, new config options may be added with different defaults\",\n\t},\n\t{\n\t\tname: \"feature.experimental\",\n\t\tdescription:\n\t\t\t\"Enable config options that are new to Git, and are being considered for future defaults. Config settings included here may be added or removed with each release, including minor version updates. These settings may have unintended interactions since they are so new. Please enable this setting if you are interested in providing feedback on experimental features. The new default values are:\",\n\t},\n\t{\n\t\tname: \"feature.manyFiles\",\n\t\tdescription:\n\t\t\t\"Enable config options that optimize for repos with many files in the working directory. With many files, commands such as `git status` and `git checkout` may be slow and these new defaults improve performance:\",\n\t},\n\t{\n\t\tname: \"fetch.fsck.<msg-id>\",\n\t\tinsertValue: \"fetch.fsck.{cursor}\",\n\t\tdescription:\n\t\t\t\"Acts like `fsck.<msg-id>`, but is used by git-fetch-pack[1] instead of git-fsck[1]. See the `fsck.<msg-id>` documentation for details\",\n\t},\n\t{\n\t\tname: \"fetch.fsck.skipList\",\n\t\tdescription:\n\t\t\t\"Acts like `fsck.skipList`, but is used by git-fetch-pack[1] instead of git-fsck[1]. See the `fsck.skipList` documentation for details\",\n\t},\n\t{\n\t\tname: \"fetch.fsckObjects\",\n\t\tdescription:\n\t\t\t\"If it is set to true, git-fetch-pack will check all fetched objects. See `transfer.fsckObjects` for what's checked. Defaults to false. If not set, the value of `transfer.fsckObjects` is used instead\",\n\t},\n\t{\n\t\tname: \"fetch.negotiationAlgorithm\",\n\t\tdescription:\n\t\t\t'Control how information about the commits in the local repository is sent when negotiating the contents of the packfile to be sent by the server. Set to \"consecutive\" to use an algorithm that walks over consecutive commits checking each one. Set to \"skipping\" to use an algorithm that skips commits in an effort to converge faster, but may result in a larger-than-necessary packfile; or set to \"noop\" to not send any information at all, which will almost certainly result in a larger-than-necessary packfile, but will skip the negotiation step. Set to \"default\" to override settings made previously and use the default behaviour. The default is normally \"consecutive\", but if `feature.experimental` is true, then the default is \"skipping\". Unknown values will cause \\'git fetch\\' to error out',\n\t},\n\t{\n\t\tname: \"fetch.output\",\n\t\tdescription:\n\t\t\t\"Control how ref update status is printed. Valid values are `full` and `compact`. Default value is `full`. See section OUTPUT in git-fetch[1] for detail\",\n\t},\n\t{\n\t\tname: \"fetch.parallel\",\n\t\tdescription:\n\t\t\t\"Specifies the maximal number of fetch operations to be run in parallel at a time (submodules, or remotes when the `--multiple` option of git-fetch[1] is in effect)\",\n\t},\n\t{\n\t\tname: \"fetch.prune\",\n\t\tdescription:\n\t\t\t\"If true, fetch will automatically behave as if the `--prune` option was given on the command line. See also `remote.<name>.prune` and the PRUNING section of git-fetch[1]\",\n\t},\n\t{\n\t\tname: \"fetch.pruneTags\",\n\t\tdescription:\n\t\t\t\"If true, fetch will automatically behave as if the `refs/tags/*:refs/tags/*` refspec was provided when pruning, if not set already. This allows for setting both this option and `fetch.prune` to maintain a 1=1 mapping to upstream refs. See also `remote.<name>.pruneTags` and the PRUNING section of git-fetch[1]\",\n\t},\n\t{\n\t\tname: \"fetch.recurseSubmodules\",\n\t\tdescription:\n\t\t\t\"This option controls whether `git fetch` (and the underlying fetch in `git pull`) will recursively fetch into populated submodules. This option can be set either to a boolean value or to 'on-demand'. Setting it to a boolean changes the behavior of fetch and pull to recurse unconditionally into submodules when set to true or to not recurse at all when set to false. When set to 'on-demand', fetch and pull will only recurse into a populated submodule when its superproject retrieves a commit that updates the submodule's reference. Defaults to 'on-demand', or to the value of 'submodule.recurse' if set\",\n\t},\n\t{\n\t\tname: \"fetch.showForcedUpdates\",\n\t\tdescription:\n\t\t\t\"Set to false to enable `--no-show-forced-updates` in git-fetch[1] and git-pull[1] commands. Defaults to true\",\n\t},\n\t{\n\t\tname: \"fetch.unpackLimit\",\n\t\tdescription:\n\t\t\t\"If the number of objects fetched over the Git native transfer is below this limit, then the objects will be unpacked into loose object files. However if the number of received objects equals or exceeds this limit then the received pack will be stored as a pack, after adding any missing delta bases. Storing the pack from a push can make the push operation complete faster, especially on slow filesystems. If not set, the value of `transfer.unpackLimit` is used instead\",\n\t},\n\t{\n\t\tname: \"fetch.writeCommitGraph\",\n\t\tdescription:\n\t\t\t\"Set to true to write a commit-graph after every `git fetch` command that downloads a pack-file from a remote. Using the `--split` option, most executions will create a very small commit-graph file on top of the existing commit-graph file(s). Occasionally, these files will merge and the write may take longer. Having an updated commit-graph file helps performance of many Git commands, including `git merge-base`, `git push -f`, and `git log --graph`. Defaults to false\",\n\t},\n\t{\n\t\tname: \"filter.<driver>.clean\",\n\t\tinsertValue: \"filter.{cursor}.clean\",\n\t\tdescription:\n\t\t\t\"The command which is used to convert the content of a worktree file to a blob upon checkin. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"filter.<driver>.smudge\",\n\t\tinsertValue: \"filter.{cursor}.smudge\",\n\t\tdescription:\n\t\t\t\"The command which is used to convert the content of a blob object to a worktree file upon checkout. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"format.attach\",\n\t\tdescription:\n\t\t\t\"Enable multipart/mixed attachments as the default for 'format-patch'. The value can also be a double quoted string which will enable attachments as the default and set the value as the boundary. See the --attach option in git-format-patch[1]\",\n\t},\n\t{\n\t\tname: \"format.cc\",\n\t\tdescription:\n\t\t\t\"Additional recipients to include in a patch to be submitted by mail. See the --to and --cc options in git-format-patch[1]\",\n\t},\n\t{\n\t\tname: \"format.coverFromDescription\",\n\t\tdescription:\n\t\t\t\"The default mode for format-patch to determine which parts of the cover letter will be populated using the branch's description. See the `--cover-from-description` option in git-format-patch[1]\",\n\t},\n\t{\n\t\tname: \"format.coverLetter\",\n\t\tdescription:\n\t\t\t'A boolean that controls whether to generate a cover-letter when format-patch is invoked, but in addition can be set to \"auto\", to generate a cover-letter only when there\\'s more than one patch. Default is false',\n\t},\n\t{\n\t\tname: \"format.encodeEmailHeaders\",\n\t\tdescription:\n\t\t\t'Encode email headers that have non-ASCII characters with \"Q-encoding\" (described in RFC 2047) for email transmission. Defaults to true',\n\t},\n\t{\n\t\tname: \"format.filenameMaxLength\",\n\t\tdescription:\n\t\t\t\"The maximum length of the output filenames generated by the `format-patch` command; defaults to 64. Can be overridden by the `--filename-max-length=<n>` command line option\",\n\t},\n\t{\n\t\tname: \"format.from\",\n\t\tdescription:\n\t\t\t'Provides the default value for the `--from` option to format-patch. Accepts a boolean value, or a name and email address. If false, format-patch defaults to `--no-from`, using commit authors directly in the \"From:\" field of patch mails. If true, format-patch defaults to `--from`, using your committer identity in the \"From:\" field of patch mails and including a \"From:\" field in the body of the patch mail if different. If set to a non-boolean value, format-patch uses that value instead of your committer identity. Defaults to false',\n\t},\n\t{\n\t\tname: \"format.headers\",\n\t\tdescription:\n\t\t\t\"Additional email headers to include in a patch to be submitted by mail. See git-format-patch[1]\",\n\t},\n\t{\n\t\tname: \"format.notes\",\n\t\tdescription:\n\t\t\t\"Provides the default value for the `--notes` option to format-patch. Accepts a boolean value, or a ref which specifies where to get notes. If false, format-patch defaults to `--no-notes`. If true, format-patch defaults to `--notes`. If set to a non-boolean value, format-patch defaults to `--notes=<ref>`, where `ref` is the non-boolean value. Defaults to false\",\n\t},\n\t{\n\t\tname: \"format.numbered\",\n\t\tdescription:\n\t\t\t'A boolean which can enable or disable sequence numbers in patch subjects. It defaults to \"auto\" which enables it only if there is more than one patch. It can be enabled or disabled for all messages by setting it to \"true\" or \"false\". See --numbered option in git-format-patch[1]',\n\t},\n\t{\n\t\tname: \"format.outputDirectory\",\n\t\tdescription:\n\t\t\t\"Set a custom directory to store the resulting files instead of the current working directory. All directory components will be created\",\n\t},\n\t{\n\t\tname: \"format.pretty\",\n\t\tdescription:\n\t\t\t\"The default pretty format for log/show/whatchanged command, See git-log[1], git-show[1], git-whatchanged[1]\",\n\t},\n\t{\n\t\tname: \"format.signature\",\n\t\tdescription:\n\t\t\t'The default for format-patch is to output a signature containing the Git version number. Use this variable to change that default. Set this variable to the empty string (\"\") to suppress signature generation',\n\t},\n\t{\n\t\tname: \"format.signatureFile\",\n\t\tdescription:\n\t\t\t\"Works just like format.signature except the contents of the file specified by this variable will be used as the signature\",\n\t},\n\t{\n\t\tname: \"format.signOff\",\n\t\tdescription:\n\t\t\t\"A boolean value which lets you enable the `-s/--signoff` option of format-patch by default. *Note:* Adding the `Signed-off-by` trailer to a patch should be a conscious act and means that you certify you have the rights to submit this work under the same open source license. Please see the 'SubmittingPatches' document for further discussion\",\n\t},\n\t{\n\t\tname: \"format.subjectPrefix\",\n\t\tdescription:\n\t\t\t\"The default for format-patch is to output files with the '[PATCH]' subject prefix. Use this variable to change that prefix\",\n\t},\n\t{\n\t\tname: \"format.suffix\",\n\t\tdescription:\n\t\t\t\"The default for format-patch is to output files with the suffix `.patch`. Use this variable to change that suffix (make sure to include the dot if you want it)\",\n\t},\n\t{\n\t\tname: \"format.thread\",\n\t\tdescription:\n\t\t\t\"The default threading style for 'git format-patch'. Can be a boolean value, or `shallow` or `deep`. `shallow` threading makes every mail a reply to the head of the series, where the head is chosen from the cover letter, the `--in-reply-to`, and the first patch mail, in this order. `deep` threading makes every mail a reply to the previous one. A true boolean value is the same as `shallow`, and a false value disables threading\",\n\t},\n\t{\n\t\tname: \"format.useAutoBase\",\n\t\tdescription:\n\t\t\t'A boolean value which lets you enable the `--base=auto` option of format-patch by default. Can also be set to \"whenAble\" to allow enabling `--base=auto` if a suitable base is available, but to skip adding base info otherwise without the format dying',\n\t},\n\t{\n\t\tname: \"fsck.<msg-id>\",\n\t\tinsertValue: \"fsck.{cursor}\",\n\t\tdescription:\n\t\t\t\"During fsck git may find issues with legacy data which wouldn't be generated by current versions of git, and which wouldn't be sent over the wire if `transfer.fsckObjects` was set. This feature is intended to support working with legacy repositories containing such data\",\n\t},\n\t{\n\t\tname: \"fsck.skipList\",\n\t\tdescription:\n\t\t\t\"The path to a list of object names (i.e. one unabbreviated SHA-1 per line) that are known to be broken in a non-fatal way and should be ignored. On versions of Git 2.20 and later comments ('#'), empty lines, and any leading and trailing whitespace is ignored. Everything but a SHA-1 per line will error out on older versions\",\n\t},\n\t{\n\t\tname: \"gc.<pattern>.reflogExpire\",\n\t\tinsertValue: \"gc.{cursor}.reflogExpire\",\n\t\tdescription:\n\t\t\t'\\'git reflog expire\\' removes reflog entries older than this time; defaults to 90 days. The value \"now\" expires all entries immediately, and \"never\" suppresses expiration altogether. With \"<pattern>\" (e.g. \"refs/stash\") in the middle the setting applies only to the refs that match the <pattern>',\n\t},\n\t{\n\t\tname: \"gc.<pattern>.reflogExpireUnreachable\",\n\t\tinsertValue: \"gc.{cursor}.reflogExpireUnreachable\",\n\t\tdescription:\n\t\t\t'\\'git reflog expire\\' removes reflog entries older than this time and are not reachable from the current tip; defaults to 30 days. The value \"now\" expires all entries immediately, and \"never\" suppresses expiration altogether. With \"<pattern>\" (e.g. \"refs/stash\") in the middle, the setting applies only to the refs that match the <pattern>',\n\t},\n\t{\n\t\tname: \"gc.aggressiveDepth\",\n\t\tdescription:\n\t\t\t\"The depth parameter used in the delta compression algorithm used by 'git gc --aggressive'. This defaults to 50, which is the default for the `--depth` option when `--aggressive` isn't in use\",\n\t},\n\t{\n\t\tname: \"gc.aggressiveWindow\",\n\t\tdescription:\n\t\t\t\"The window size parameter used in the delta compression algorithm used by 'git gc --aggressive'. This defaults to 250, which is a much more aggressive window size than the default `--window` of 10\",\n\t},\n\t{\n\t\tname: \"gc.auto\",\n\t\tdescription:\n\t\t\t\"When there are approximately more than this many loose objects in the repository, `git gc --auto` will pack them. Some Porcelain commands use this command to perform a light-weight garbage collection from time to time. The default value is 6700\",\n\t},\n\t{\n\t\tname: \"gc.autoDetach\",\n\t\tdescription:\n\t\t\t\"Make `git gc --auto` return immediately and run in background if the system supports it. Default is true\",\n\t},\n\t{\n\t\tname: \"gc.autoPackLimit\",\n\t\tdescription:\n\t\t\t\"When there are more than this many packs that are not marked with `*.keep` file in the repository, `git gc --auto` consolidates them into one larger pack. The default value is 50. Setting this to 0 disables it. Setting `gc.auto` to 0 will also disable this\",\n\t},\n\t{\n\t\tname: \"gc.bigPackThreshold\",\n\t\tdescription:\n\t\t\t\"If non-zero, all packs larger than this limit are kept when `git gc` is run. This is very similar to `--keep-largest-pack` except that all packs that meet the threshold are kept, not just the largest pack. Defaults to zero. Common unit suffixes of 'k', 'm', or 'g' are supported\",\n\t},\n\t{\n\t\tname: \"gc.cruftPacks\",\n\t\tdescription:\n\t\t\t\"Store unreachable objects in a cruft pack (see git-repack[1]) instead of as loose objects. The default is `false`\",\n\t},\n\t{\n\t\tname: \"gc.logExpiry\",\n\t\tdescription:\n\t\t\t\"If the file gc.log exists, then `git gc --auto` will print its content and exit with status zero instead of running unless that file is more than 'gc.logExpiry' old. Default is \\\"1.day\\\". See `gc.pruneExpire` for more ways to specify its value\",\n\t},\n\t{\n\t\tname: \"gc.packRefs\",\n\t\tdescription:\n\t\t\t\"Running `git pack-refs` in a repository renders it unclonable by Git versions prior to 1.5.1.2 over dumb transports such as HTTP. This variable determines whether 'git gc' runs `git pack-refs`. This can be set to `notbare` to enable it within all non-bare repos or it can be set to a boolean value. The default is `true`\",\n\t},\n\t{\n\t\tname: \"gc.pruneExpire\",\n\t\tdescription:\n\t\t\t\"When 'git gc' is run, it will call 'prune --expire 2.weeks.ago' (and 'repack --cruft --cruft-expiration 2.weeks.ago' if using cruft packs via `gc.cruftPacks` or `--cruft`). Override the grace period with this config variable. The value \\\"now\\\" may be used to disable this grace period and always prune unreachable objects immediately, or \\\"never\\\" may be used to suppress pruning. This feature helps prevent corruption when 'git gc' runs concurrently with another process writing to the repository; see the \\\"NOTES\\\" section of git-gc[1]\",\n\t},\n\t{\n\t\tname: \"gc.rerereResolved\",\n\t\tdescription:\n\t\t\t\"Records of conflicted merge you resolved earlier are kept for this many days when 'git rerere gc' is run. You can also use more human-readable \\\"1.month.ago\\\", etc. The default is 60 days. See git-rerere[1]\",\n\t},\n\t{\n\t\tname: \"gc.rerereUnresolved\",\n\t\tdescription:\n\t\t\t\"Records of conflicted merge you have not resolved are kept for this many days when 'git rerere gc' is run. You can also use more human-readable \\\"1.month.ago\\\", etc. The default is 15 days. See git-rerere[1]\",\n\t},\n\t{\n\t\tname: \"gc.worktreePruneExpire\",\n\t\tdescription:\n\t\t\t\"When 'git gc' is run, it calls 'git worktree prune --expire 3.months.ago'. This config variable can be used to set a different grace period. The value \\\"now\\\" may be used to disable the grace period and prune `$GIT_DIR/worktrees` immediately, or \\\"never\\\" may be used to suppress pruning\",\n\t},\n\t{\n\t\tname: \"gc.writeCommitGraph\",\n\t\tdescription:\n\t\t\t\"If true, then gc will rewrite the commit-graph file when git-gc[1] is run. When using `git gc --auto` the commit-graph will be updated if housekeeping is required. Default is true. See git-commit-graph[1] for details\",\n\t},\n\t{\n\t\tname: \"gitcvs.allBinary\",\n\t\tdescription:\n\t\t\t\"This is used if `gitcvs.usecrlfattr` does not resolve the correct '-kb' mode to use. If true, all unresolved files are sent to the client in mode '-kb'. This causes the client to treat them as binary files, which suppresses any newline munging it otherwise might do. Alternatively, if it is set to \\\"guess\\\", then the contents of the file are examined to decide if it is binary, similar to `core.autocrlf`\",\n\t},\n\t{\n\t\tname: \"gitcvs.commitMsgAnnotation\",\n\t\tdescription:\n\t\t\t'Append this string to each commit message. Set to empty string to disable this feature. Defaults to \"via git-CVS emulator\"',\n\t},\n\t{\n\t\tname: \"gitcvs.dbDriver\",\n\t\tdescription:\n\t\t\t\"Used Perl DBI driver. You can specify any available driver for this here, but it might not work. git-cvsserver is tested with 'DBD::SQLite', reported to work with 'DBD::Pg', and reported *not* to work with 'DBD::mysql'. Experimental feature. May not contain double colons (`:`). Default: 'SQLite'. See git-cvsserver[1]\",\n\t},\n\t{\n\t\tname: \"gitcvs.dbName\",\n\t\tdescription:\n\t\t\t\"Database used by git-cvsserver to cache revision information derived from the Git repository. The exact meaning depends on the used database driver, for SQLite (which is the default driver) this is a filename. Supports variable substitution (see git-cvsserver[1] for details). May not contain semicolons (`;`). Default: '%Ggitcvs.%m.sqlite'\",\n\t},\n\t{\n\t\tname: \"gitcvs.dbTableNamePrefix\",\n\t\tdescription:\n\t\t\t\"Database table name prefix. Prepended to the names of any database tables used, allowing a single database to be used for several repositories. Supports variable substitution (see git-cvsserver[1] for details). Any non-alphabetic characters will be replaced with underscores\",\n\t},\n\t{\n\t\tname: \"gitcvs.dbUser\",\n\t\tdescription:\n\t\t\t\"Database user and password. Only useful if setting `gitcvs.dbDriver`, since SQLite has no concept of database users and/or passwords. 'gitcvs.dbUser' supports variable substitution (see git-cvsserver[1] for details)\",\n\t},\n\t{\n\t\tname: \"gitcvs.enabled\",\n\t\tdescription:\n\t\t\t\"Whether the CVS server interface is enabled for this repository. See git-cvsserver[1]\",\n\t},\n\t{\n\t\tname: \"gitcvs.logFile\",\n\t\tdescription:\n\t\t\t\"Path to a log file where the CVS server interface well... logs various stuff. See git-cvsserver[1]\",\n\t},\n\t{\n\t\tname: \"gitcvs.usecrlfattr\",\n\t\tdescription:\n\t\t\t\"If true, the server will look up the end-of-line conversion attributes for files to determine the `-k` modes to use. If the attributes force Git to treat a file as text, the `-k` mode will be left blank so CVS clients will treat it as text. If they suppress text conversion, the file will be set with '-kb' mode, which suppresses any newline munging the client might otherwise do. If the attributes do not allow the file type to be determined, then `gitcvs.allBinary` is used. See gitattributes[5]\",\n\t},\n\t{\n\t\tname: \"gitweb.snapshot\",\n\t\tdescription: \"See gitweb.conf[5] for description\",\n\t},\n\t{\n\t\tname: \"gitweb.url\",\n\t\tdescription: \"See gitweb[1] for description\",\n\t},\n\t{\n\t\tname: \"gpg.<format>.program\",\n\t\tinsertValue: \"gpg.{cursor}.program\",\n\t\tdescription:\n\t\t\t'Use this to customize the program used for the signing format you chose. (see `gpg.program` and `gpg.format`) `gpg.program` can still be used as a legacy synonym for `gpg.openpgp.program`. The default value for `gpg.x509.program` is \"gpgsm\" and `gpg.ssh.program` is \"ssh-keygen\"',\n\t},\n\t{\n\t\tname: \"gpg.format\",\n\t\tdescription:\n\t\t\t'Specifies which key format to use when signing with `--gpg-sign`. Default is \"openpgp\". Other possible values are \"x509\", \"ssh\"',\n\t},\n\t{\n\t\tname: \"gpg.minTrustLevel\",\n\t\tdescription:\n\t\t\t\"Specifies a minimum trust level for signature verification. If this option is unset, then signature verification for merge operations require a key with at least `marginal` trust. Other operations that perform signature verification require a key with at least `undefined` trust. Setting this option overrides the required trust-level for all operations. Supported values, in increasing order of significance:\",\n\t},\n\t{\n\t\tname: \"gpg.program\",\n\t\tdescription:\n\t\t\t'Use this custom program instead of \"`gpg`\" found on `$PATH` when making or verifying a PGP signature. The program must support the same command-line interface as GPG, namely, to verify a detached signature, \"`gpg --verify $signature - <$file`\" is run, and the program is expected to signal a good signature by exiting with code 0, and to generate an ASCII-armored detached signature, the standard input of \"`gpg -bsau $key`\" is fed with the contents to be signed, and the program is expected to send the result to its standard output',\n\t},\n\t{\n\t\tname: \"gpg.ssh.allowedSignersFile\",\n\t\tdescription:\n\t\t\t'A file containing ssh public keys which you are willing to trust. The file consists of one or more lines of principals followed by an ssh public key. e.g.: `user1@example.com,user2@example.com ssh-rsa AAAAX1...` See ssh-keygen(1) \"ALLOWED SIGNERS\" for details. The principal is only used to identify the key and is available when verifying a signature',\n\t},\n\t{\n\t\tname: \"gpg.ssh.defaultKeyCommand\",\n\t\tdescription:\n\t\t\t\"This command that will be run when user.signingkey is not set and a ssh signature is requested. On successful exit a valid ssh public key prefixed with `key::` is expected in the first line of its output. This allows for a script doing a dynamic lookup of the correct public key when it is impractical to statically configure `user.signingKey`. For example when keys or SSH Certificates are rotated frequently or selection of the right key depends on external factors unknown to git\",\n\t},\n\t{\n\t\tname: \"gpg.ssh.revocationFile\",\n\t\tdescription:\n\t\t\t'Either a SSH KRL or a list of revoked public keys (without the principal prefix). See ssh-keygen(1) for details. If a public key is found in this file then it will always be treated as having trust level \"never\" and signatures will show as invalid',\n\t},\n\t{\n\t\tname: \"grep.column\",\n\t\tdescription: \"If set to true, enable the `--column` option by default\",\n\t},\n\t{\n\t\tname: \"grep.extendedRegexp\",\n\t\tdescription:\n\t\t\t\"If set to true, enable `--extended-regexp` option by default. This option is ignored when the `grep.patternType` option is set to a value other than 'default'\",\n\t},\n\t{\n\t\tname: \"grep.fallbackToNoIndex\",\n\t\tdescription:\n\t\t\t\"If set to true, fall back to git grep --no-index if git grep is executed outside of a git repository. Defaults to false\",\n\t},\n\t{\n\t\tname: \"grep.lineNumber\",\n\t\tdescription: \"If set to true, enable `-n` option by default\",\n\t},\n\t{\n\t\tname: \"grep.patternType\",\n\t\tdescription:\n\t\t\t\"Set the default matching behavior. Using a value of 'basic', 'extended', 'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`, `--fixed-strings`, or `--perl-regexp` option accordingly, while the value 'default' will use the `grep.extendedRegexp` option to choose between 'basic' and 'extended'\",\n\t},\n\t{\n\t\tname: \"grep.threads\",\n\t\tdescription:\n\t\t\t\"Number of grep worker threads to use. See `grep.threads` in git-grep[1] for more information\",\n\t},\n\t{\n\t\tname: \"gui.blamehistoryctx\",\n\t\tdescription:\n\t\t\t\"Specifies the radius of history context in days to show in gitk[1] for the selected commit, when the `Show History Context` menu item is invoked from 'git gui blame'. If this variable is set to zero, the whole history is shown\",\n\t},\n\t{\n\t\tname: \"gui.commitMsgWidth\",\n\t\tdescription:\n\t\t\t'Defines how wide the commit message window is in the git-gui[1]. \"75\" is the default',\n\t},\n\t{\n\t\tname: \"gui.copyBlameThreshold\",\n\t\tdescription:\n\t\t\t\"Specifies the threshold to use in 'git gui blame' original location detection, measured in alphanumeric characters. See the git-blame[1] manual for more information on copy detection\",\n\t},\n\t{\n\t\tname: \"gui.diffContext\",\n\t\tdescription:\n\t\t\t'Specifies how many context lines should be used in calls to diff made by the git-gui[1]. The default is \"5\"',\n\t},\n\t{\n\t\tname: \"gui.displayUntracked\",\n\t\tdescription:\n\t\t\t'Determines if git-gui[1] shows untracked files in the file list. The default is \"true\"',\n\t},\n\t{\n\t\tname: \"gui.encoding\",\n\t\tdescription:\n\t\t\t\"Specifies the default character encoding to use for displaying of file contents in git-gui[1] and gitk[1]. It can be overridden by setting the 'encoding' attribute for relevant files (see gitattributes[5]). If this option is not set, the tools default to the locale encoding\",\n\t},\n\t{\n\t\tname: \"gui.fastCopyBlame\",\n\t\tdescription:\n\t\t\t\"If true, 'git gui blame' uses `-C` instead of `-C -C` for original location detection. It makes blame significantly faster on huge repositories at the expense of less thorough copy detection\",\n\t},\n\t{\n\t\tname: \"gui.matchTrackingBranch\",\n\t\tdescription:\n\t\t\t'Determines if new branches created with git-gui[1] should default to tracking remote branches with matching names or not. Default: \"false\"',\n\t},\n\t{\n\t\tname: \"gui.newBranchTemplate\",\n\t\tdescription:\n\t\t\t\"Is used as suggested name when creating new branches using the git-gui[1]\",\n\t},\n\t{\n\t\tname: \"gui.pruneDuringFetch\",\n\t\tdescription:\n\t\t\t'\"true\" if git-gui[1] should prune remote-tracking branches when performing a fetch. The default value is \"false\"',\n\t},\n\t{\n\t\tname: \"gui.spellingDictionary\",\n\t\tdescription:\n\t\t\t'Specifies the dictionary used for spell checking commit messages in the git-gui[1]. When set to \"none\" spell checking is turned off',\n\t},\n\t{\n\t\tname: \"gui.trustmtime\",\n\t\tdescription:\n\t\t\t\"Determines if git-gui[1] should trust the file modification timestamp or not. By default the timestamps are not trusted\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.argPrompt\",\n\t\tinsertValue: \"guitool.{cursor}.argPrompt\",\n\t\tdescription:\n\t\t\t\"Request a string argument from the user, and pass it to the tool through the `ARGS` environment variable. Since requesting an argument implies confirmation, the 'confirm' option has no effect if this is enabled. If the option is set to 'true', 'yes', or '1', the dialog uses a built-in generic prompt; otherwise the exact value of the variable is used\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.cmd\",\n\t\tinsertValue: \"guitool.{cursor}.cmd\",\n\t\tdescription:\n\t\t\t\"Specifies the shell command line to execute when the corresponding item of the git-gui[1] `Tools` menu is invoked. This option is mandatory for every tool. The command is executed from the root of the working directory, and in the environment it receives the name of the tool as `GIT_GUITOOL`, the name of the currently selected file as 'FILENAME', and the name of the current branch as 'CUR_BRANCH' (if the head is detached, 'CUR_BRANCH' is empty)\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.confirm\",\n\t\tinsertValue: \"guitool.{cursor}.confirm\",\n\t\tdescription: \"Show a confirmation dialog before actually running the tool\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.needsFile\",\n\t\tinsertValue: \"guitool.{cursor}.needsFile\",\n\t\tdescription:\n\t\t\t\"Run the tool only if a diff is selected in the GUI. It guarantees that 'FILENAME' is not empty\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.noConsole\",\n\t\tinsertValue: \"guitool.{cursor}.noConsole\",\n\t\tdescription:\n\t\t\t\"Run the command silently, without creating a window to display its output\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.noRescan\",\n\t\tinsertValue: \"guitool.{cursor}.noRescan\",\n\t\tdescription:\n\t\t\t\"Don't rescan the working directory for changes after the tool finishes execution\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.prompt\",\n\t\tinsertValue: \"guitool.{cursor}.prompt\",\n\t\tdescription:\n\t\t\t\"Specifies the general prompt string to display at the top of the dialog, before subsections for 'argPrompt' and 'revPrompt'. The default value includes the actual command\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.revPrompt\",\n\t\tinsertValue: \"guitool.{cursor}.revPrompt\",\n\t\tdescription:\n\t\t\t\"Request a single valid revision from the user, and set the `REVISION` environment variable. In other aspects this option is similar to 'argPrompt', and can be used together with it\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.revUnmerged\",\n\t\tinsertValue: \"guitool.{cursor}.revUnmerged\",\n\t\tdescription:\n\t\t\t\"Show only unmerged branches in the 'revPrompt' subdialog. This is useful for tools similar to merge or rebase, but not for things like checkout or reset\",\n\t},\n\t{\n\t\tname: \"guitool.<name>.title\",\n\t\tinsertValue: \"guitool.{cursor}.title\",\n\t\tdescription:\n\t\t\t\"Specifies the title to use for the prompt dialog. The default is the tool name\",\n\t},\n\t{\n\t\tname: \"help.autoCorrect\",\n\t\tdescription:\n\t\t\t\"If git detects typos and can identify exactly one valid command similar to the error, git will try to suggest the correct command or even run the suggestion automatically. Possible config values are: - 0 (default): show the suggested command. - positive number: run the suggested command after specified\",\n\t},\n\t{\n\t\tname: \"help.browser\",\n\t\tdescription:\n\t\t\t\"Specify the browser that will be used to display help in the 'web' format. See git-help[1]\",\n\t},\n\t{\n\t\tname: \"help.format\",\n\t\tdescription:\n\t\t\t\"Override the default help format used by git-help[1]. Values 'man', 'info', 'web' and 'html' are supported. 'man' is the default. 'web' and 'html' are the same\",\n\t},\n\t{\n\t\tname: \"help.htmlPath\",\n\t\tdescription:\n\t\t\t\"Specify the path where the HTML documentation resides. File system paths and URLs are supported. HTML pages will be prefixed with this path when help is displayed in the 'web' format. This defaults to the documentation path of your Git installation\",\n\t},\n\t{\n\t\tname: \"http.cookieFile\",\n\t\tdescription:\n\t\t\t\"The pathname of a file containing previously stored cookie lines, which should be used in the Git http session, if they match the server. The file format of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format (see `curl(1)`). NOTE that the file specified with http.cookieFile is used only as input unless http.saveCookies is set\",\n\t},\n\t{\n\t\tname: \"http.curloptResolve\",\n\t\tdescription:\n\t\t\t\"Hostname resolution information that will be used first by libcurl when sending HTTP requests. This information should be in one of the following formats:\",\n\t},\n\t{\n\t\tname: \"http.delegation\",\n\t\tdescription:\n\t\t\t\"Control GSSAPI credential delegation. The delegation is disabled by default in libcurl since version 7.21.7. Set parameter to tell the server what it is allowed to delegate when it comes to user credentials. Used with GSS/kerberos. Possible values are:\",\n\t},\n\t{\n\t\tname: \"http.emptyAuth\",\n\t\tdescription:\n\t\t\t\"Attempt authentication without seeking a username or password. This can be used to attempt GSS-Negotiate authentication without specifying a username in the URL, as libcurl normally requires a username for authentication\",\n\t},\n\t{\n\t\tname: \"http.extraHeader\",\n\t\tdescription:\n\t\t\t\"Pass an additional HTTP header when communicating with a server. If more than one such entry exists, all of them are added as extra headers. To allow overriding the settings inherited from the system config, an empty value will reset the extra headers to the empty list\",\n\t},\n\t{\n\t\tname: \"http.followRedirects\",\n\t\tdescription:\n\t\t\t\"Whether git should follow HTTP redirects. If set to `true`, git will transparently follow any redirect issued by a server it encounters. If set to `false`, git will treat all redirects as errors. If set to `initial`, git will follow redirects only for the initial request to a remote, but not for subsequent follow-up HTTP requests. Since git uses the redirected URL as the base for the follow-up requests, this is generally sufficient. The default is `initial`\",\n\t},\n\t{\n\t\tname: \"http.lowSpeedLimit\",\n\t\tdescription:\n\t\t\t\"If the HTTP transfer speed is less than 'http.lowSpeedLimit' for longer than 'http.lowSpeedTime' seconds, the transfer is aborted. Can be overridden by the `GIT_HTTP_LOW_SPEED_LIMIT` and `GIT_HTTP_LOW_SPEED_TIME` environment variables\",\n\t},\n\t{\n\t\tname: \"http.maxRequests\",\n\t\tdescription:\n\t\t\t\"How many HTTP requests to launch in parallel. Can be overridden by the `GIT_HTTP_MAX_REQUESTS` environment variable. Default is 5\",\n\t},\n\t{\n\t\tname: \"http.minSessions\",\n\t\tdescription:\n\t\t\t\"The number of curl sessions (counted across slots) to be kept across requests. They will not be ended with curl_easy_cleanup() until http_cleanup() is invoked. If USE_CURL_MULTI is not defined, this value will be capped at 1. Defaults to 1\",\n\t},\n\t{\n\t\tname: \"http.noEPSV\",\n\t\tdescription:\n\t\t\t'A boolean which disables using of EPSV ftp command by curl. This can helpful with some \"poor\" ftp servers which don\\'t support EPSV mode. Can be overridden by the `GIT_CURL_FTP_NO_EPSV` environment variable. Default is false (curl will use EPSV)',\n\t},\n\t{\n\t\tname: \"http.pinnedPubkey\",\n\t\tdescription:\n\t\t\t\"Public key of the https service. It may either be the filename of a PEM or DER encoded public key file or a string starting with 'sha256//' followed by the base64 encoded sha256 hash of the public key. See also libcurl 'CURLOPT_PINNEDPUBLICKEY'. git will exit with an error if this option is set but not supported by cURL\",\n\t},\n\t{\n\t\tname: \"http.postBuffer\",\n\t\tdescription:\n\t\t\t\"Maximum size in bytes of the buffer used by smart HTTP transports when POSTing data to the remote system. For requests larger than this buffer size, HTTP/1.1 and Transfer-Encoding: chunked is used to avoid creating a massive pack file locally. Default is 1 MiB, which is sufficient for most requests\",\n\t},\n\t{\n\t\tname: \"http.proxy\",\n\t\tdescription:\n\t\t\t\"Override the HTTP proxy, normally configured using the 'http_proxy', 'https_proxy', and 'all_proxy' environment variables (see `curl(1)`). In addition to the syntax understood by curl, it is possible to specify a proxy string with a user name but no password, in which case git will attempt to acquire one in the same way it does for other credentials. See gitcredentials[7] for more information. The syntax thus is '[protocol://][user[:password]@]proxyhost[:port]'. This can be overridden on a per-remote basis; see remote.<name>.proxy\",\n\t},\n\t{\n\t\tname: \"http.proxyAuthMethod\",\n\t\tdescription:\n\t\t\t\"Set the method with which to authenticate against the HTTP proxy. This only takes effect if the configured proxy string contains a user name part (i.e. is of the form 'user@host' or 'user@host:port'). This can be overridden on a per-remote basis; see `remote.<name>.proxyAuthMethod`. Both can be overridden by the `GIT_HTTP_PROXY_AUTHMETHOD` environment variable. Possible values are:\",\n\t},\n\t{\n\t\tname: \"http.proxySSLCAInfo\",\n\t\tdescription:\n\t\t\t\"Pathname to the file containing the certificate bundle that should be used to verify the proxy with when using an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CAINFO` environment variable\",\n\t},\n\t{\n\t\tname: \"http.proxySSLCert\",\n\t\tdescription:\n\t\t\t\"The pathname of a file that stores a client certificate to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CERT` environment variable\",\n\t},\n\t{\n\t\tname: \"http.proxySSLCertPasswordProtected\",\n\t\tdescription:\n\t\t\t\"Enable Git's password prompt for the proxy SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED` environment variable\",\n\t},\n\t{\n\t\tname: \"http.proxySSLKey\",\n\t\tdescription:\n\t\t\t\"The pathname of a file that stores a private key to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_KEY` environment variable\",\n\t},\n\t{\n\t\tname: \"http.saveCookies\",\n\t\tdescription:\n\t\t\t\"If set, store cookies received during requests to the file specified by http.cookieFile. Has no effect if http.cookieFile is unset\",\n\t},\n\t{\n\t\tname: \"http.schannelCheckRevoke\",\n\t\tdescription:\n\t\t\t'Used to enforce or disable certificate revocation checks in cURL when http.sslBackend is set to \"schannel\". Defaults to `true` if unset. Only necessary to disable this if Git consistently errors and the message is about checking the revocation status of a certificate. This option is ignored if cURL lacks support for setting the relevant SSL option at runtime',\n\t},\n\t{\n\t\tname: \"http.schannelUseSSLCAInfo\",\n\t\tdescription:\n\t\t\t\"As of cURL v7.60.0, the Secure Channel backend can use the certificate bundle provided via `http.sslCAInfo`, but that would override the Windows Certificate Store. Since this is not desirable by default, Git will tell cURL not to use that bundle by default when the `schannel` backend was configured via `http.sslBackend`, unless `http.schannelUseSSLCAInfo` overrides this behavior\",\n\t},\n\t{\n\t\tname: \"http.sslBackend\",\n\t\tdescription:\n\t\t\t'Name of the SSL backend to use (e.g. \"openssl\" or \"schannel\"). This option is ignored if cURL lacks support for choosing the SSL backend at runtime',\n\t},\n\t{\n\t\tname: \"http.sslCAInfo\",\n\t\tdescription:\n\t\t\t\"File containing the certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAINFO` environment variable\",\n\t},\n\t{\n\t\tname: \"http.sslCAPath\",\n\t\tdescription:\n\t\t\t\"Path containing files with the CA certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAPATH` environment variable\",\n\t},\n\t{\n\t\tname: \"http.sslCert\",\n\t\tdescription:\n\t\t\t\"File containing the SSL certificate when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CERT` environment variable\",\n\t},\n\t{\n\t\tname: \"http.sslCertPasswordProtected\",\n\t\tdescription:\n\t\t\t\"Enable Git's password prompt for the SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_SSL_CERT_PASSWORD_PROTECTED` environment variable\",\n\t},\n\t{\n\t\tname: \"http.sslKey\",\n\t\tdescription:\n\t\t\t\"File containing the SSL private key when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_KEY` environment variable\",\n\t},\n\t{\n\t\tname: \"http.sslTry\",\n\t\tdescription:\n\t\t\t\"Attempt to use AUTH SSL/TLS and encrypted data transfers when connecting via regular FTP protocol. This might be needed if the FTP server requires it for security reasons or you wish to connect securely whenever remote FTP server supports it. Default is false since it might trigger certificate verification errors on misconfigured servers\",\n\t},\n\t{\n\t\tname: \"http.sslVerify\",\n\t\tdescription:\n\t\t\t\"Whether to verify the SSL certificate when fetching or pushing over HTTPS. Defaults to true. Can be overridden by the `GIT_SSL_NO_VERIFY` environment variable\",\n\t},\n\t{\n\t\tname: \"http.sslVersion\",\n\t\tdescription:\n\t\t\t\"The SSL version to use when negotiating an SSL connection, if you want to force the default. The available and default version depend on whether libcurl was built against NSS or OpenSSL and the particular configuration of the crypto library in use. Internally this sets the 'CURLOPT_SSL_VERSION' option; see the libcurl documentation for more details on the format of this option and for the ssl version supported. Currently the possible values of this option are:\",\n\t},\n\t{\n\t\tname: \"http.userAgent\",\n\t\tdescription:\n\t\t\t\"The HTTP USER_AGENT string presented to an HTTP server. The default value represents the version of the client Git such as git/1.7.1. This option allows you to override this value to a more common value such as Mozilla/4.0. This may be necessary, for instance, if connecting through a firewall that restricts HTTP connections to a set of common USER_AGENT strings (but not including those like git/1.7.1). Can be overridden by the `GIT_HTTP_USER_AGENT` environment variable\",\n\t},\n\t{\n\t\tname: \"http.version\",\n\t\tdescription:\n\t\t\t\"Use the specified HTTP protocol version when communicating with a server. If you want to force the default. The available and default version depend on libcurl. Currently the possible values of this option are:\",\n\t},\n\t{\n\t\tname: \"http.<url>.cookieFile\",\n\t\tinsertValue: \"http.{cursor}.cookieFile\",\n\t\tdescription:\n\t\t\t\"The pathname of a file containing previously stored cookie lines, which should be used in the Git http session, if they match the server. The file format of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format (see `curl(1)`). NOTE that the file specified with http.cookieFile is used only as input unless http.saveCookies is set\",\n\t},\n\t{\n\t\tname: \"http.<url>.curloptResolve\",\n\t\tinsertValue: \"http.{cursor}.curloptResolve\",\n\t\tdescription:\n\t\t\t\"Hostname resolution information that will be used first by libcurl when sending HTTP requests. This information should be in one of the following formats:\",\n\t},\n\t{\n\t\tname: \"http.<url>.delegation\",\n\t\tinsertValue: \"http.{cursor}.delegation\",\n\t\tdescription:\n\t\t\t\"Control GSSAPI credential delegation. The delegation is disabled by default in libcurl since version 7.21.7. Set parameter to tell the server what it is allowed to delegate when it comes to user credentials. Used with GSS/kerberos. Possible values are:\",\n\t},\n\t{\n\t\tname: \"http.<url>.emptyAuth\",\n\t\tinsertValue: \"http.{cursor}.emptyAuth\",\n\t\tdescription:\n\t\t\t\"Attempt authentication without seeking a username or password. This can be used to attempt GSS-Negotiate authentication without specifying a username in the URL, as libcurl normally requires a username for authentication\",\n\t},\n\t{\n\t\tname: \"http.<url>.extraHeader\",\n\t\tinsertValue: \"http.{cursor}.extraHeader\",\n\t\tdescription:\n\t\t\t\"Pass an additional HTTP header when communicating with a server. If more than one such entry exists, all of them are added as extra headers. To allow overriding the settings inherited from the system config, an empty value will reset the extra headers to the empty list\",\n\t},\n\t{\n\t\tname: \"http.<url>.followRedirects\",\n\t\tinsertValue: \"http.{cursor}.followRedirects\",\n\t\tdescription:\n\t\t\t\"Whether git should follow HTTP redirects. If set to `true`, git will transparently follow any redirect issued by a server it encounters. If set to `false`, git will treat all redirects as errors. If set to `initial`, git will follow redirects only for the initial request to a remote, but not for subsequent follow-up HTTP requests. Since git uses the redirected URL as the base for the follow-up requests, this is generally sufficient. The default is `initial`\",\n\t},\n\t{\n\t\tname: \"http.<url>.lowSpeedLimit\",\n\t\tinsertValue: \"http.{cursor}.lowSpeedLimit\",\n\t\tdescription:\n\t\t\t\"If the HTTP transfer speed is less than 'http.lowSpeedLimit' for longer than 'http.lowSpeedTime' seconds, the transfer is aborted. Can be overridden by the `GIT_HTTP_LOW_SPEED_LIMIT` and `GIT_HTTP_LOW_SPEED_TIME` environment variables\",\n\t},\n\t{\n\t\tname: \"http.<url>.maxRequests\",\n\t\tinsertValue: \"http.{cursor}.maxRequests\",\n\t\tdescription:\n\t\t\t\"How many HTTP requests to launch in parallel. Can be overridden by the `GIT_HTTP_MAX_REQUESTS` environment variable. Default is 5\",\n\t},\n\t{\n\t\tname: \"http.<url>.minSessions\",\n\t\tinsertValue: \"http.{cursor}.minSessions\",\n\t\tdescription:\n\t\t\t\"The number of curl sessions (counted across slots) to be kept across requests. They will not be ended with curl_easy_cleanup() until http_cleanup() is invoked. If USE_CURL_MULTI is not defined, this value will be capped at 1. Defaults to 1\",\n\t},\n\t{\n\t\tname: \"http.<url>.noEPSV\",\n\t\tinsertValue: \"http.{cursor}.noEPSV\",\n\t\tdescription:\n\t\t\t'A boolean which disables using of EPSV ftp command by curl. This can helpful with some \"poor\" ftp servers which don\\'t support EPSV mode. Can be overridden by the `GIT_CURL_FTP_NO_EPSV` environment variable. Default is false (curl will use EPSV)',\n\t},\n\t{\n\t\tname: \"http.<url>.pinnedPubkey\",\n\t\tinsertValue: \"http.{cursor}.pinnedPubkey\",\n\t\tdescription:\n\t\t\t\"Public key of the https service. It may either be the filename of a PEM or DER encoded public key file or a string starting with 'sha256//' followed by the base64 encoded sha256 hash of the public key. See also libcurl 'CURLOPT_PINNEDPUBLICKEY'. git will exit with an error if this option is set but not supported by cURL\",\n\t},\n\t{\n\t\tname: \"http.<url>.postBuffer\",\n\t\tinsertValue: \"http.{cursor}.postBuffer\",\n\t\tdescription:\n\t\t\t\"Maximum size in bytes of the buffer used by smart HTTP transports when POSTing data to the remote system. For requests larger than this buffer size, HTTP/1.1 and Transfer-Encoding: chunked is used to avoid creating a massive pack file locally. Default is 1 MiB, which is sufficient for most requests\",\n\t},\n\t{\n\t\tname: \"http.<url>.proxy\",\n\t\tinsertValue: \"http.{cursor}.proxy\",\n\t\tdescription:\n\t\t\t\"Override the HTTP proxy, normally configured using the 'http_proxy', 'https_proxy', and 'all_proxy' environment variables (see `curl(1)`). In addition to the syntax understood by curl, it is possible to specify a proxy string with a user name but no password, in which case git will attempt to acquire one in the same way it does for other credentials. See gitcredentials[7] for more information. The syntax thus is '[protocol://][user[:password]@]proxyhost[:port]'. This can be overridden on a per-remote basis; see remote.<name>.proxy\",\n\t},\n\t{\n\t\tname: \"http.<url>.proxyAuthMethod\",\n\t\tinsertValue: \"http.{cursor}.proxyAuthMethod\",\n\t\tdescription:\n\t\t\t\"Set the method with which to authenticate against the HTTP proxy. This only takes effect if the configured proxy string contains a user name part (i.e. is of the form 'user@host' or 'user@host:port'). This can be overridden on a per-remote basis; see `remote.<name>.proxyAuthMethod`. Both can be overridden by the `GIT_HTTP_PROXY_AUTHMETHOD` environment variable. Possible values are:\",\n\t},\n\t{\n\t\tname: \"http.<url>.proxySSLCAInfo\",\n\t\tinsertValue: \"http.{cursor}.proxySSLCAInfo\",\n\t\tdescription:\n\t\t\t\"Pathname to the file containing the certificate bundle that should be used to verify the proxy with when using an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CAINFO` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.proxySSLCert\",\n\t\tinsertValue: \"http.{cursor}.proxySSLCert\",\n\t\tdescription:\n\t\t\t\"The pathname of a file that stores a client certificate to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CERT` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.proxySSLCertPasswordProtected\",\n\t\tinsertValue: \"http.{cursor}.proxySSLCertPasswordProtected\",\n\t\tdescription:\n\t\t\t\"Enable Git's password prompt for the proxy SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.proxySSLKey\",\n\t\tinsertValue: \"http.{cursor}.proxySSLKey\",\n\t\tdescription:\n\t\t\t\"The pathname of a file that stores a private key to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_KEY` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.saveCookies\",\n\t\tinsertValue: \"http.{cursor}.saveCookies\",\n\t\tdescription:\n\t\t\t\"If set, store cookies received during requests to the file specified by http.cookieFile. Has no effect if http.cookieFile is unset\",\n\t},\n\t{\n\t\tname: \"http.<url>.schannelCheckRevoke\",\n\t\tinsertValue: \"http.{cursor}.schannelCheckRevoke\",\n\t\tdescription:\n\t\t\t'Used to enforce or disable certificate revocation checks in cURL when http.sslBackend is set to \"schannel\". Defaults to `true` if unset. Only necessary to disable this if Git consistently errors and the message is about checking the revocation status of a certificate. This option is ignored if cURL lacks support for setting the relevant SSL option at runtime',\n\t},\n\t{\n\t\tname: \"http.<url>.schannelUseSSLCAInfo\",\n\t\tinsertValue: \"http.{cursor}.schannelUseSSLCAInfo\",\n\t\tdescription:\n\t\t\t\"As of cURL v7.60.0, the Secure Channel backend can use the certificate bundle provided via `http.sslCAInfo`, but that would override the Windows Certificate Store. Since this is not desirable by default, Git will tell cURL not to use that bundle by default when the `schannel` backend was configured via `http.sslBackend`, unless `http.schannelUseSSLCAInfo` overrides this behavior\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslBackend\",\n\t\tinsertValue: \"http.{cursor}.sslBackend\",\n\t\tdescription:\n\t\t\t'Name of the SSL backend to use (e.g. \"openssl\" or \"schannel\"). This option is ignored if cURL lacks support for choosing the SSL backend at runtime',\n\t},\n\t{\n\t\tname: \"http.<url>.sslCAInfo\",\n\t\tinsertValue: \"http.{cursor}.sslCAInfo\",\n\t\tdescription:\n\t\t\t\"File containing the certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAINFO` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslCAPath\",\n\t\tinsertValue: \"http.{cursor}.sslCAPath\",\n\t\tdescription:\n\t\t\t\"Path containing files with the CA certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAPATH` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslCert\",\n\t\tinsertValue: \"http.{cursor}.sslCert\",\n\t\tdescription:\n\t\t\t\"File containing the SSL certificate when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CERT` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslCertPasswordProtected\",\n\t\tinsertValue: \"http.{cursor}.sslCertPasswordProtected\",\n\t\tdescription:\n\t\t\t\"Enable Git's password prompt for the SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_SSL_CERT_PASSWORD_PROTECTED` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslKey\",\n\t\tinsertValue: \"http.{cursor}.sslKey\",\n\t\tdescription:\n\t\t\t\"File containing the SSL private key when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_KEY` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslTry\",\n\t\tinsertValue: \"http.{cursor}.sslTry\",\n\t\tdescription:\n\t\t\t\"Attempt to use AUTH SSL/TLS and encrypted data transfers when connecting via regular FTP protocol. This might be needed if the FTP server requires it for security reasons or you wish to connect securely whenever remote FTP server supports it. Default is false since it might trigger certificate verification errors on misconfigured servers\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslVerify\",\n\t\tinsertValue: \"http.{cursor}.sslVerify\",\n\t\tdescription:\n\t\t\t\"Whether to verify the SSL certificate when fetching or pushing over HTTPS. Defaults to true. Can be overridden by the `GIT_SSL_NO_VERIFY` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.sslVersion\",\n\t\tinsertValue: \"http.{cursor}.sslVersion\",\n\t\tdescription:\n\t\t\t\"The SSL version to use when negotiating an SSL connection, if you want to force the default. The available and default version depend on whether libcurl was built against NSS or OpenSSL and the particular configuration of the crypto library in use. Internally this sets the 'CURLOPT_SSL_VERSION' option; see the libcurl documentation for more details on the format of this option and for the ssl version supported. Currently the possible values of this option are:\",\n\t},\n\t{\n\t\tname: \"http.<url>.userAgent\",\n\t\tinsertValue: \"http.{cursor}.userAgent\",\n\t\tdescription:\n\t\t\t\"The HTTP USER_AGENT string presented to an HTTP server. The default value represents the version of the client Git such as git/1.7.1. This option allows you to override this value to a more common value such as Mozilla/4.0. This may be necessary, for instance, if connecting through a firewall that restricts HTTP connections to a set of common USER_AGENT strings (but not including those like git/1.7.1). Can be overridden by the `GIT_HTTP_USER_AGENT` environment variable\",\n\t},\n\t{\n\t\tname: \"http.<url>.version\",\n\t\tinsertValue: \"http.{cursor}.version\",\n\t\tdescription:\n\t\t\t\"Use the specified HTTP protocol version when communicating with a server. If you want to force the default. The available and default version depend on libcurl. Currently the possible values of this option are:\",\n\t},\n\t{\n\t\tname: \"i18n.commitEncoding\",\n\t\tdescription:\n\t\t\t\"Character encoding the commit messages are stored in; Git itself does not care per se, but this information is necessary e.g. when importing commits from emails or in the gitk graphical history browser (and possibly at other places in the future or in other porcelains). See e.g. git-mailinfo[1]. Defaults to 'utf-8'\",\n\t},\n\t{\n\t\tname: \"i18n.logOutputEncoding\",\n\t\tdescription:\n\t\t\t\"Character encoding the commit messages are converted to when running 'git log' and friends\",\n\t},\n\t{\n\t\tname: \"imap.authMethod\",\n\t\tdescription:\n\t\t\t\"Specify authenticate method for authentication with IMAP server. If Git was built with the NO_CURL option, or if your curl version is older than 7.34.0, or if you're running git-imap-send with the `--no-curl` option, the only supported method is 'CRAM-MD5'. If this is not set then 'git imap-send' uses the basic IMAP plaintext LOGIN command\",\n\t},\n\t{\n\t\tname: \"imap.folder\",\n\t\tdescription:\n\t\t\t'The folder to drop the mails into, which is typically the Drafts folder. For example: \"INBOX.Drafts\", \"INBOX/Drafts\" or \"[Gmail]/Drafts\". Required',\n\t},\n\t{\n\t\tname: \"imap.host\",\n\t\tdescription:\n\t\t\t\"A URL identifying the server. Use an `imap://` prefix for non-secure connections and an `imaps://` prefix for secure connections. Ignored when imap.tunnel is set, but required otherwise\",\n\t},\n\t{\n\t\tname: \"imap.pass\",\n\t\tdescription: \"The password to use when logging in to the server\",\n\t},\n\t{\n\t\tname: \"imap.port\",\n\t\tdescription:\n\t\t\t\"An integer port number to connect to on the server. Defaults to 143 for imap:// hosts and 993 for imaps:// hosts. Ignored when imap.tunnel is set\",\n\t},\n\t{\n\t\tname: \"imap.preformattedHTML\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable the use of html encoding when sending a patch. An html encoded patch will be bracketed with <pre> and have a content type of text/html. Ironically, enabling this option causes Thunderbird to send the patch as a plain/text, format=fixed email. Default is `false`\",\n\t},\n\t{\n\t\tname: \"imap.sslverify\",\n\t\tdescription:\n\t\t\t\"A boolean to enable/disable verification of the server certificate used by the SSL/TLS connection. Default is `true`. Ignored when imap.tunnel is set\",\n\t},\n\t{\n\t\tname: \"imap.tunnel\",\n\t\tdescription:\n\t\t\t\"Command used to setup a tunnel to the IMAP server through which commands will be piped instead of using a direct network connection to the server. Required when imap.host is not set\",\n\t},\n\t{\n\t\tname: \"imap.user\",\n\t\tdescription: \"The username to use when logging in to the server\",\n\t},\n\t{\n\t\tname: \"includeIf.<condition>.path\",\n\t\tinsertValue: \"includeIf.{cursor}.path\",\n\t\tdescription:\n\t\t\t'Special variables to include other configuration files. See the \"CONFIGURATION FILE\" section in the main git-config[1] documentation, specifically the \"Includes\" and \"Conditional Includes\" subsections',\n\t},\n\t{\n\t\tname: \"index.recordEndOfIndexEntries\",\n\t\tdescription:\n\t\t\t\"Specifies whether the index file should include an \\\"End Of Index Entry\\\" section. This reduces index load time on multiprocessor machines but produces a message \\\"ignoring EOIE extension\\\" when reading the index using Git versions before 2.20. Defaults to 'true' if index.threads has been explicitly enabled, 'false' otherwise\",\n\t},\n\t{\n\t\tname: \"index.recordOffsetTable\",\n\t\tdescription:\n\t\t\t\"Specifies whether the index file should include an \\\"Index Entry Offset Table\\\" section. This reduces index load time on multiprocessor machines but produces a message \\\"ignoring IEOT extension\\\" when reading the index using Git versions before 2.20. Defaults to 'true' if index.threads has been explicitly enabled, 'false' otherwise\",\n\t},\n\t{\n\t\tname: \"index.sparse\",\n\t\tdescription:\n\t\t\t\"When enabled, write the index using sparse-directory entries. This has no effect unless `core.sparseCheckout` and `core.sparseCheckoutCone` are both enabled. Defaults to 'false'\",\n\t},\n\t{\n\t\tname: \"index.threads\",\n\t\tdescription:\n\t\t\t\"Specifies the number of threads to spawn when loading the index. This is meant to reduce index load time on multiprocessor machines. Specifying 0 or 'true' will cause Git to auto-detect the number of CPU's and set the number of threads accordingly. Specifying 1 or 'false' will disable multithreading. Defaults to 'true'\",\n\t},\n\t{\n\t\tname: \"index.version\",\n\t\tdescription:\n\t\t\t\"Specify the version with which new index files should be initialized. This does not affect existing repositories. If `feature.manyFiles` is enabled, then the default is 4\",\n\t},\n\t{\n\t\tname: \"init.defaultBranch\",\n\t\tdescription:\n\t\t\t\"Allows overriding the default branch name e.g. when initializing a new repository\",\n\t},\n\t{\n\t\tname: \"init.templateDir\",\n\t\tdescription:\n\t\t\t'Specify the directory from which templates will be copied. (See the \"TEMPLATE DIRECTORY\" section of git-init[1].)',\n\t},\n\t{\n\t\tname: \"instaweb.browser\",\n\t\tdescription:\n\t\t\t\"Specify the program that will be used to browse your working repository in gitweb. See git-instaweb[1]\",\n\t},\n\t{\n\t\tname: \"instaweb.httpd\",\n\t\tdescription:\n\t\t\t\"The HTTP daemon command-line to start gitweb on your working repository. See git-instaweb[1]\",\n\t},\n\t{\n\t\tname: \"instaweb.local\",\n\t\tdescription:\n\t\t\t\"If true the web server started by git-instaweb[1] will be bound to the local IP (127.0.0.1)\",\n\t},\n\t{\n\t\tname: \"instaweb.modulePath\",\n\t\tdescription:\n\t\t\t\"The default module path for git-instaweb[1] to use instead of /usr/lib/apache2/modules. Only used if httpd is Apache\",\n\t},\n\t{\n\t\tname: \"instaweb.port\",\n\t\tdescription:\n\t\t\t\"The port number to bind the gitweb httpd to. See git-instaweb[1]\",\n\t},\n\t{\n\t\tname: \"interactive.diffFilter\",\n\t\tdescription:\n\t\t\t\"When an interactive command (such as `git add --patch`) shows a colorized diff, git will pipe the diff through the shell command defined by this configuration variable. The command may mark up the diff further for human consumption, provided that it retains a one-to-one correspondence with the lines in the original diff. Defaults to disabled (no filtering)\",\n\t},\n\t{\n\t\tname: \"interactive.singleKey\",\n\t\tdescription:\n\t\t\t\"In interactive commands, allow the user to provide one-letter input with a single key (i.e., without hitting enter). Currently this is used by the `--patch` mode of git-add[1], git-checkout[1], git-restore[1], git-commit[1], git-reset[1], and git-stash[1]. Note that this setting is silently ignored if portable keystroke input is not available; requires the Perl module Term::ReadKey\",\n\t},\n\t{\n\t\tname: \"log.abbrevCommit\",\n\t\tdescription:\n\t\t\t\"If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume `--abbrev-commit`. You may override this option with `--no-abbrev-commit`\",\n\t},\n\t{\n\t\tname: \"log.date\",\n\t\tdescription:\n\t\t\t\"Set the default date-time mode for the 'log' command. Setting a value for log.date is similar to using 'git log''s `--date` option. See git-log[1] for details\",\n\t},\n\t{\n\t\tname: \"log.decorate\",\n\t\tdescription:\n\t\t\t\"Print out the ref names of any commits that are shown by the log command. If 'short' is specified, the ref name prefixes 'refs/heads/', 'refs/tags/' and 'refs/remotes/' will not be printed. If 'full' is specified, the full ref name (including prefix) will be printed. If 'auto' is specified, then if the output is going to a terminal, the ref names are shown as if 'short' were given, otherwise no ref names are shown. This is the same as the `--decorate` option of the `git log`\",\n\t},\n\t{\n\t\tname: \"log.diffMerges\",\n\t\tdescription:\n\t\t\t\"Set default diff format to be used for merge commits. See `--diff-merges` in git-log[1] for details. Defaults to `separate`\",\n\t},\n\t{\n\t\tname: \"log.excludeDecoration\",\n\t\tdescription:\n\t\t\t\"Exclude the specified patterns from the log decorations. This is similar to the `--decorate-refs-exclude` command-line option, but the config option can be overridden by the `--decorate-refs` option\",\n\t},\n\t{\n\t\tname: \"log.follow\",\n\t\tdescription:\n\t\t\t\"If `true`, `git log` will act as if the `--follow` option was used when a single <path> is given. This has the same limitations as `--follow`, i.e. it cannot be used to follow multiple files and does not work well on non-linear history\",\n\t},\n\t{\n\t\tname: \"log.graphColors\",\n\t\tdescription:\n\t\t\t\"A list of colors, separated by commas, that can be used to draw history lines in `git log --graph`\",\n\t},\n\t{\n\t\tname: \"log.initialDecorationSet\",\n\t\tdescription:\n\t\t\t\"By default, `git log` only shows decorations for certain known ref namespaces. If 'all' is specified, then show all refs as decorations\",\n\t},\n\t{\n\t\tname: \"log.mailmap\",\n\t\tdescription:\n\t\t\t\"If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume `--use-mailmap`, otherwise assume `--no-use-mailmap`. True by default\",\n\t},\n\t{\n\t\tname: \"log.showRoot\",\n\t\tdescription:\n\t\t\t\"If true, the initial commit will be shown as a big creation event. This is equivalent to a diff against an empty tree. Tools like git-log[1] or git-whatchanged[1], which normally hide the root commit will now show it. True by default\",\n\t},\n\t{\n\t\tname: \"log.showSignature\",\n\t\tdescription:\n\t\t\t\"If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume `--show-signature`\",\n\t},\n\t{\n\t\tname: \"lsrefs.unborn\",\n\t\tdescription:\n\t\t\t'May be \"advertise\" (the default), \"allow\", or \"ignore\". If \"advertise\", the server will respond to the client sending \"unborn\" (as described in gitprotocol-v2[5]) and will advertise support for this feature during the protocol v2 capability advertisement. \"allow\" is the same as \"advertise\" except that the server will not advertise support for this feature; this is useful for load-balanced servers that cannot be updated atomically (for example), since the administrator could configure \"allow\", then after a delay, configure \"advertise\"',\n\t},\n\t{\n\t\tname: \"mailinfo.scissors\",\n\t\tdescription:\n\t\t\t'If true, makes git-mailinfo[1] (and therefore git-am[1]) act by default as if the --scissors option was provided on the command-line. When active, this features removes everything from the message body before a scissors line (i.e. consisting mainly of \">8\", \"8<\" and \"-\")',\n\t},\n\t{\n\t\tname: \"mailmap.blob\",\n\t\tdescription:\n\t\t\t\"Like `mailmap.file`, but consider the value as a reference to a blob in the repository. If both `mailmap.file` and `mailmap.blob` are given, both are parsed, with entries from `mailmap.file` taking precedence. In a bare repository, this defaults to `HEAD:.mailmap`. In a non-bare repository, it defaults to empty\",\n\t},\n\t{\n\t\tname: \"mailmap.file\",\n\t\tdescription:\n\t\t\t\"The location of an augmenting mailmap file. The default mailmap, located in the root of the repository, is loaded first, then the mailmap file pointed to by this variable. The location of the mailmap file may be in a repository subdirectory, or somewhere outside of the repository itself. See git-shortlog[1] and git-blame[1]\",\n\t},\n\t{\n\t\tname: \"maintenance.<task>.enabled\",\n\t\tinsertValue: \"maintenance.{cursor}.enabled\",\n\t\tdescription:\n\t\t\t\"This boolean config option controls whether the maintenance task with name `<task>` is run when no `--task` option is specified to `git maintenance run`. These config values are ignored if a `--task` option exists. By default, only `maintenance.gc.enabled` is true\",\n\t},\n\t{\n\t\tname: \"maintenance.<task>.schedule\",\n\t\tinsertValue: \"maintenance.{cursor}.schedule\",\n\t\tdescription:\n\t\t\t'This config option controls whether or not the given `<task>` runs during a `git maintenance run --schedule=<frequency>` command. The value must be one of \"hourly\", \"daily\", or \"weekly\"',\n\t},\n\t{\n\t\tname: \"maintenance.auto\",\n\t\tdescription:\n\t\t\t\"This boolean config option controls whether some commands run `git maintenance run --auto` after doing their normal work. Defaults to true\",\n\t},\n\t{\n\t\tname: \"maintenance.commit-graph.auto\",\n\t\tdescription:\n\t\t\t\"This integer config option controls how often the `commit-graph` task should be run as part of `git maintenance run --auto`. If zero, then the `commit-graph` task will not run with the `--auto` option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of reachable commits that are not in the commit-graph file is at least the value of `maintenance.commit-graph.auto`. The default value is 100\",\n\t},\n\t{\n\t\tname: \"maintenance.incremental-repack.auto\",\n\t\tdescription:\n\t\t\t\"This integer config option controls how often the `incremental-repack` task should be run as part of `git maintenance run --auto`. If zero, then the `incremental-repack` task will not run with the `--auto` option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of pack-files not in the multi-pack-index is at least the value of `maintenance.incremental-repack.auto`. The default value is 10\",\n\t},\n\t{\n\t\tname: \"maintenance.loose-objects.auto\",\n\t\tdescription:\n\t\t\t\"This integer config option controls how often the `loose-objects` task should be run as part of `git maintenance run --auto`. If zero, then the `loose-objects` task will not run with the `--auto` option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of loose objects is at least the value of `maintenance.loose-objects.auto`. The default value is 100\",\n\t},\n\t{\n\t\tname: \"maintenance.strategy\",\n\t\tdescription:\n\t\t\t\"This string config option provides a way to specify one of a few recommended schedules for background maintenance. This only affects which tasks are run during `git maintenance run --schedule=X` commands, provided no `--task=<task>` arguments are provided. Further, if a `maintenance.<task>.schedule` config value is set, then that value is used instead of the one provided by `maintenance.strategy`. The possible strategy strings are:\",\n\t},\n\t{\n\t\tname: \"man.<tool>.cmd\",\n\t\tinsertValue: \"man.{cursor}.cmd\",\n\t\tdescription:\n\t\t\t\"Specify the command to invoke the specified man viewer. The specified command is evaluated in shell with the man page passed as argument. (See git-help[1].)\",\n\t},\n\t{\n\t\tname: \"man.<tool>.path\",\n\t\tinsertValue: \"man.{cursor}.path\",\n\t\tdescription:\n\t\t\t\"Override the path for the given tool that may be used to display help in the 'man' format. See git-help[1]\",\n\t},\n\t{\n\t\tname: \"man.viewer\",\n\t\tdescription:\n\t\t\t\"Specify the programs that may be used to display help in the 'man' format. See git-help[1]\",\n\t},\n\t{\n\t\tname: \"merge.<driver>.driver\",\n\t\tinsertValue: \"merge.{cursor}.driver\",\n\t\tdescription:\n\t\t\t\"Defines the command that implements a custom low-level merge driver. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"merge.<driver>.name\",\n\t\tinsertValue: \"merge.{cursor}.name\",\n\t\tdescription:\n\t\t\t\"Defines a human-readable name for a custom low-level merge driver. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"merge.<driver>.recursive\",\n\t\tinsertValue: \"merge.{cursor}.recursive\",\n\t\tdescription:\n\t\t\t\"Names a low-level merge driver to be used when performing an internal merge between common ancestors. See gitattributes[5] for details\",\n\t},\n\t{\n\t\tname: \"merge.autoStash\",\n\t\tdescription:\n\t\t\t\"When set to true, automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run merge on a dirty worktree. However, use with care: the final stash application after a successful merge might result in non-trivial conflicts. This option can be overridden by the `--no-autostash` and `--autostash` options of git-merge[1]. Defaults to false\",\n\t},\n\t{\n\t\tname: \"merge.branchdesc\",\n\t\tdescription:\n\t\t\t\"In addition to branch names, populate the log message with the branch description text associated with them. Defaults to false\",\n\t},\n\t{\n\t\tname: \"merge.conflictStyle\",\n\t\tdescription:\n\t\t\t'Specify the style in which conflicted hunks are written out to working tree files upon merge. The default is \"merge\", which shows a `<<<<<<<` conflict marker, changes made by one side, a `=======` marker, changes made by the other side, and then a `>>>>>>>` marker. An alternate style, \"diff3\", adds a `|||||||` marker and the original text before the `=======` marker. The \"merge\" style tends to produce smaller conflict regions than diff3, both because of the exclusion of the original text, and because when a subset of lines match on the two sides they are just pulled out of the conflict region. Another alternate style, \"zdiff3\", is similar to diff3 but removes matching lines on the two sides from the conflict region when those matching lines appear near either the beginning or end of a conflict region',\n\t},\n\t{\n\t\tname: \"merge.defaultToUpstream\",\n\t\tdescription:\n\t\t\t\"If merge is called without any commit argument, merge the upstream branches configured for the current branch by using their last observed values stored in their remote-tracking branches. The values of the `branch.<current branch>.merge` that name the branches at the remote named by `branch.<current branch>.remote` are consulted, and then they are mapped via `remote.<remote>.fetch` to their corresponding remote-tracking branches, and the tips of these tracking branches are merged. Defaults to true\",\n\t},\n\t{\n\t\tname: \"merge.directoryRenames\",\n\t\tdescription:\n\t\t\t'Whether Git detects directory renames, affecting what happens at merge time to new files added to a directory on one side of history when that directory was renamed on the other side of history. If merge.directoryRenames is set to \"false\", directory rename detection is disabled, meaning that such new files will be left behind in the old directory. If set to \"true\", directory rename detection is enabled, meaning that such new files will be moved into the new directory. If set to \"conflict\", a conflict will be reported for such paths. If merge.renames is false, merge.directoryRenames is ignored and treated as false. Defaults to \"conflict\"',\n\t},\n\t{\n\t\tname: \"merge.ff\",\n\t\tdescription:\n\t\t\t\"By default, Git does not create an extra merge commit when merging a commit that is a descendant of the current commit. Instead, the tip of the current branch is fast-forwarded. When set to `false`, this variable tells Git to create an extra merge commit in such a case (equivalent to giving the `--no-ff` option from the command line). When set to `only`, only such fast-forward merges are allowed (equivalent to giving the `--ff-only` option from the command line)\",\n\t},\n\t{\n\t\tname: \"merge.guitool\",\n\t\tdescription:\n\t\t\t\"Controls which merge tool is used by git-mergetool[1] when the -g/--gui flag is specified. The list below shows the valid built-in values. Any other value is treated as a custom merge tool and requires that a corresponding mergetool.<guitool>.cmd variable is defined\",\n\t},\n\t{\n\t\tname: \"merge.log\",\n\t\tdescription:\n\t\t\t\"In addition to branch names, populate the log message with at most the specified number of one-line descriptions from the actual commits that are being merged. Defaults to false, and true is a synonym for 20\",\n\t},\n\t{\n\t\tname: \"merge.renameLimit\",\n\t\tdescription:\n\t\t\t\"The number of files to consider in the exhaustive portion of rename detection during a merge. If not specified, defaults to the value of diff.renameLimit. If neither merge.renameLimit nor diff.renameLimit are specified, currently defaults to 7000. This setting has no effect if rename detection is turned off\",\n\t},\n\t{\n\t\tname: \"merge.renames\",\n\t\tdescription:\n\t\t\t'Whether Git detects renames. If set to \"false\", rename detection is disabled. If set to \"true\", basic rename detection is enabled. Defaults to the value of diff.renames',\n\t},\n\t{\n\t\tname: \"merge.renormalize\",\n\t\tdescription:\n\t\t\t'Tell Git that canonical representation of files in the repository has changed over time (e.g. earlier commits record text files with CRLF line endings, but recent ones use LF line endings). In such a repository, Git can convert the data recorded in commits to a canonical form before performing a merge to reduce unnecessary conflicts. For more information, see section \"Merging branches with differing checkin/checkout attributes\" in gitattributes[5]',\n\t},\n\t{\n\t\tname: \"merge.stat\",\n\t\tdescription:\n\t\t\t\"Whether to print the diffstat between ORIG_HEAD and the merge result at the end of the merge. True by default\",\n\t},\n\t{\n\t\tname: \"merge.suppressDest\",\n\t\tdescription:\n\t\t\t'By adding a glob that matches the names of integration branches to this multi-valued configuration variable, the default merge message computed for merges into these integration branches will omit \"into <branch name>\" from its title',\n\t},\n\t{\n\t\tname: \"merge.tool\",\n\t\tdescription:\n\t\t\t\"Controls which merge tool is used by git-mergetool[1]. The list below shows the valid built-in values. Any other value is treated as a custom merge tool and requires that a corresponding mergetool.<tool>.cmd variable is defined\",\n\t},\n\t{\n\t\tname: \"merge.verbosity\",\n\t\tdescription:\n\t\t\t\"Controls the amount of output shown by the recursive merge strategy. Level 0 outputs nothing except a final error message if conflicts were detected. Level 1 outputs only conflicts, 2 outputs conflicts and file changes. Level 5 and above outputs debugging information. The default is level 2. Can be overridden by the `GIT_MERGE_VERBOSITY` environment variable\",\n\t},\n\t{\n\t\tname: \"merge.verifySignatures\",\n\t\tdescription:\n\t\t\t\"If true, this is equivalent to the --verify-signatures command line option. See git-merge[1] for details\",\n\t},\n\t{\n\t\tname: \"mergetool.<tool>.cmd\",\n\t\tinsertValue: \"mergetool.{cursor}.cmd\",\n\t\tdescription:\n\t\t\t\"Specify the command to invoke the specified merge tool. The specified command is evaluated in shell with the following variables available: 'BASE' is the name of a temporary file containing the common base of the files to be merged, if available; 'LOCAL' is the name of a temporary file containing the contents of the file on the current branch; 'REMOTE' is the name of a temporary file containing the contents of the file from the branch being merged; 'MERGED' contains the name of the file to which the merge tool should write the results of a successful merge\",\n\t},\n\t{\n\t\tname: \"mergetool.<tool>.hideResolved\",\n\t\tinsertValue: \"mergetool.{cursor}.hideResolved\",\n\t\tdescription:\n\t\t\t\"Allows the user to override the global `mergetool.hideResolved` value for a specific tool. See `mergetool.hideResolved` for the full description\",\n\t},\n\t{\n\t\tname: \"mergetool.<tool>.path\",\n\t\tinsertValue: \"mergetool.{cursor}.path\",\n\t\tdescription:\n\t\t\t\"Override the path for the given tool. This is useful in case your tool is not in the PATH\",\n\t},\n\t{\n\t\tname: \"mergetool.<tool>.trustExitCode\",\n\t\tinsertValue: \"mergetool.{cursor}.trustExitCode\",\n\t\tdescription:\n\t\t\t\"For a custom merge command, specify whether the exit code of the merge command can be used to determine whether the merge was successful. If this is not set to true then the merge target file timestamp is checked and the merge assumed to have been successful if the file has been updated, otherwise the user is prompted to indicate the success of the merge\",\n\t},\n\t{\n\t\tname: \"mergetool.hideResolved\",\n\t\tdescription:\n\t\t\t\"During a merge Git will automatically resolve as many conflicts as possible and write the 'MERGED' file containing conflict markers around any conflicts that it cannot resolve; 'LOCAL' and 'REMOTE' normally represent the versions of the file from before Git's conflict resolution. This flag causes 'LOCAL' and 'REMOTE' to be overwriten so that only the unresolved conflicts are presented to the merge tool. Can be configured per-tool via the `mergetool.<tool>.hideResolved` configuration variable. Defaults to `false`\",\n\t},\n\t{\n\t\tname: \"mergetool.keepBackup\",\n\t\tdescription:\n\t\t\t\"After performing a merge, the original file with conflict markers can be saved as a file with a `.orig` extension. If this variable is set to `false` then this file is not preserved. Defaults to `true` (i.e. keep the backup files)\",\n\t},\n\t{\n\t\tname: \"mergetool.keepTemporaries\",\n\t\tdescription:\n\t\t\t\"When invoking a custom merge tool, Git uses a set of temporary files to pass to the tool. If the tool returns an error and this variable is set to `true`, then these temporary files will be preserved, otherwise they will be removed after the tool has exited. Defaults to `false`\",\n\t},\n\t{\n\t\tname: \"mergetool.meld.hasOutput\",\n\t\tdescription:\n\t\t\t\"Older versions of `meld` do not support the `--output` option. Git will attempt to detect whether `meld` supports `--output` by inspecting the output of `meld --help`. Configuring `mergetool.meld.hasOutput` will make Git skip these checks and use the configured value instead. Setting `mergetool.meld.hasOutput` to `true` tells Git to unconditionally use the `--output` option, and `false` avoids using `--output`\",\n\t},\n\t{\n\t\tname: \"mergetool.meld.useAutoMerge\",\n\t\tdescription:\n\t\t\t\"When the `--auto-merge` is given, meld will merge all non-conflicting parts automatically, highlight the conflicting parts and wait for user decision. Setting `mergetool.meld.useAutoMerge` to `true` tells Git to unconditionally use the `--auto-merge` option with `meld`. Setting this value to `auto` makes git detect whether `--auto-merge` is supported and will only use `--auto-merge` when available. A value of `false` avoids using `--auto-merge` altogether, and is the default value\",\n\t},\n\t{\n\t\tname: \"mergetool.prompt\",\n\t\tdescription:\n\t\t\t\"Prompt before each invocation of the merge resolution program\",\n\t},\n\t{\n\t\tname: \"mergetool.vimdiff.layout\",\n\t\tdescription:\n\t\t\t\"The vimdiff backend uses this variable to control how its split windows look like. Applies even if you are using Neovim (`nvim`) or gVim (`gvim`) as the merge tool. See BACKEND SPECIFIC HINTS section\",\n\t},\n\t{\n\t\tname: \"mergetool.writeToTemp\",\n\t\tdescription:\n\t\t\t\"Git writes temporary 'BASE', 'LOCAL', and 'REMOTE' versions of conflicting files in the worktree by default. Git will attempt to use a temporary directory for these files when set `true`. Defaults to `false`\",\n\t},\n\t{\n\t\tname: \"notes.<name>.mergeStrategy\",\n\t\tinsertValue: \"notes.{cursor}.mergeStrategy\",\n\t\tdescription:\n\t\t\t'Which merge strategy to choose when doing a notes merge into refs/notes/<name>. This overrides the more general \"notes.mergeStrategy\". See the \"NOTES MERGE STRATEGIES\" section in git-notes[1] for more information on the available strategies',\n\t},\n\t{\n\t\tname: \"notes.displayRef\",\n\t\tdescription:\n\t\t\t\"The (fully qualified) refname from which to show notes when showing commit messages. The value of this variable can be set to a glob, in which case notes from all matching refs will be shown. You may also specify this configuration variable several times. A warning will be issued for refs that do not exist, but a glob that does not match any refs is silently ignored\",\n\t},\n\t{\n\t\tname: \"notes.mergeStrategy\",\n\t\tdescription:\n\t\t\t'Which merge strategy to choose by default when resolving notes conflicts. Must be one of `manual`, `ours`, `theirs`, `union`, or `cat_sort_uniq`. Defaults to `manual`. See \"NOTES MERGE STRATEGIES\" section of git-notes[1] for more information on each strategy',\n\t},\n\t{\n\t\tname: \"notes.rewrite.<command>\",\n\t\tinsertValue: \"notes.rewrite.{cursor}\",\n\t\tdescription:\n\t\t\t'When rewriting commits with <command> (currently `amend` or `rebase`) and this variable is set to `true`, Git automatically copies your notes from the original to the rewritten commit. Defaults to `true`, but see \"notes.rewriteRef\" below',\n\t},\n\t{\n\t\tname: \"notes.rewriteMode\",\n\t\tdescription:\n\t\t\t'When copying notes during a rewrite (see the \"notes.rewrite.<command>\" option), determines what to do if the target commit already has a note. Must be one of `overwrite`, `concatenate`, `cat_sort_uniq`, or `ignore`. Defaults to `concatenate`',\n\t},\n\t{\n\t\tname: \"notes.rewriteRef\",\n\t\tdescription:\n\t\t\t\"When copying notes during a rewrite, specifies the (fully qualified) ref whose notes should be copied. The ref may be a glob, in which case notes in all matching refs will be copied. You may also specify this configuration several times\",\n\t},\n\t{\n\t\tname: \"pack.allowPackReuse\",\n\t\tdescription:\n\t\t\t\"When true, and when reachability bitmaps are enabled, pack-objects will try to send parts of the bitmapped packfile verbatim. This can reduce memory and CPU usage to serve fetches, but might result in sending a slightly larger pack. Defaults to true\",\n\t},\n\t{\n\t\tname: \"pack.compression\",\n\t\tdescription:\n\t\t\t'An integer -1..9, indicating the compression level for objects in a pack file. -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. If not set, defaults to core.compression. If that is not set, defaults to -1, the zlib default, which is \"a default compromise between speed and compression (currently equivalent to level 6)\"',\n\t},\n\t{\n\t\tname: \"pack.deltaCacheLimit\",\n\t\tdescription:\n\t\t\t\"The maximum size of a delta, that is cached in git-pack-objects[1]. This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found. Defaults to 1000. Maximum value is 65535\",\n\t},\n\t{\n\t\tname: \"pack.deltaCacheSize\",\n\t\tdescription:\n\t\t\t\"The maximum memory in bytes used for caching deltas in git-pack-objects[1] before writing them out to a pack. This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found. Repacking large repositories on machines which are tight with memory might be badly impacted by this though, especially if this cache pushes the system into swapping. A value of 0 means no limit. The smallest size of 1 byte may be used to virtually disable this cache. Defaults to 256 MiB\",\n\t},\n\t{\n\t\tname: \"pack.depth\",\n\t\tdescription:\n\t\t\t\"The maximum delta depth used by git-pack-objects[1] when no maximum depth is given on the command line. Defaults to 50. Maximum value is 4095\",\n\t},\n\t{\n\t\tname: \"pack.indexVersion\",\n\t\tdescription:\n\t\t\t\"Specify the default pack index version. Valid values are 1 for legacy pack index used by Git versions prior to 1.5.2, and 2 for the new pack index with capabilities for packs larger than 4 GB as well as proper protection against the repacking of corrupted packs. Version 2 is the default. Note that version 2 is enforced and this config option ignored whenever the corresponding pack is larger than 2 GB\",\n\t},\n\t{\n\t\tname: \"pack.island\",\n\t\tdescription:\n\t\t\t'An extended regular expression configuring a set of delta islands. See \"DELTA ISLANDS\" in git-pack-objects[1] for details',\n\t},\n\t{\n\t\tname: \"pack.islandCore\",\n\t\tdescription:\n\t\t\t'Specify an island name which gets to have its objects be packed first. This creates a kind of pseudo-pack at the front of one pack, so that the objects from the specified island are hopefully faster to copy into any pack that should be served to a user requesting these objects. In practice this means that the island specified should likely correspond to what is the most commonly cloned in the repo. See also \"DELTA ISLANDS\" in git-pack-objects[1]',\n\t},\n\t{\n\t\tname: \"pack.packSizeLimit\",\n\t\tdescription:\n\t\t\t\"The maximum size of a pack. This setting only affects packing to a file when repacking, i.e. the git:// protocol is unaffected. It can be overridden by the `--max-pack-size` option of git-repack[1]. Reaching this limit results in the creation of multiple packfiles\",\n\t},\n\t{\n\t\tname: \"pack.preferBitmapTips\",\n\t\tdescription:\n\t\t\t'When selecting which commits will receive bitmaps, prefer a commit at the tip of any reference that is a suffix of any value of this configuration over any other commits in the \"selection window\"',\n\t},\n\t{\n\t\tname: \"pack.threads\",\n\t\tdescription:\n\t\t\t\"Specifies the number of threads to spawn when searching for best delta matches. This requires that git-pack-objects[1] be compiled with pthreads otherwise this option is ignored with a warning. This is meant to reduce packing time on multiprocessor machines. The required amount of memory for the delta search window is however multiplied by the number of threads. Specifying 0 will cause Git to auto-detect the number of CPU's and set the number of threads accordingly\",\n\t},\n\t{\n\t\tname: \"pack.useBitmaps\",\n\t\tdescription:\n\t\t\t\"When true, git will use pack bitmaps (if available) when packing to stdout (e.g., during the server side of a fetch). Defaults to true. You should not generally need to turn this off unless you are debugging pack bitmaps\",\n\t},\n\t{\n\t\tname: \"pack.useSparse\",\n\t\tdescription:\n\t\t\t\"When true, git will default to using the '--sparse' option in 'git pack-objects' when the '--revs' option is present. This algorithm only walks trees that appear in paths that introduce new objects. This can have significant performance benefits when computing a pack to send a small change. However, it is possible that extra objects are added to the pack-file if the included commits contain certain types of direct renames. Default is `true`\",\n\t},\n\t{\n\t\tname: \"pack.window\",\n\t\tdescription:\n\t\t\t\"The size of the window used by git-pack-objects[1] when no window size is given on the command line. Defaults to 10\",\n\t},\n\t{\n\t\tname: \"pack.windowMemory\",\n\t\tdescription:\n\t\t\t'The maximum size of memory that is consumed by each thread in git-pack-objects[1] for pack window memory when no limit is given on the command line. The value can be suffixed with \"k\", \"m\", or \"g\". When left unconfigured (or set explicitly to 0), there will be no limit',\n\t},\n\t{\n\t\tname: \"pack.writeBitmapHashCache\",\n\t\tdescription:\n\t\t\t'When true, git will include a \"hash cache\" section in the bitmap index (if one is written). This cache can be used to feed git\\'s delta heuristics, potentially leading to better deltas between bitmapped and non-bitmapped objects (e.g., when serving a fetch between an older, bitmapped pack and objects that have been pushed since the last gc). The downside is that it consumes 4 bytes per object of disk space. Defaults to true',\n\t},\n\t{\n\t\tname: \"pack.writeBitmapLookupTable\",\n\t\tdescription:\n\t\t\t'When true, Git will include a \"lookup table\" section in the bitmap index (if one is written). This table is used to defer loading individual bitmaps as late as possible. This can be beneficial in repositories that have relatively large bitmap indexes. Defaults to false',\n\t},\n\t{\n\t\tname: \"pack.writeBitmaps\",\n\t\tdescription: \"This is a deprecated synonym for `repack.writeBitmaps`\",\n\t\tdeprecated: true,\n\t\thidden: true,\n\t},\n\t{\n\t\tname: \"pack.writeReverseIndex\",\n\t\tdescription:\n\t\t\t\"When true, git will write a corresponding .rev file (see: gitformat-pack[5]) for each new packfile that it writes in all places except for git-fast-import[1] and in the bulk checkin mechanism. Defaults to false\",\n\t},\n\t{\n\t\tname: \"pager.<cmd>\",\n\t\tinsertValue: \"pager.{cursor}\",\n\t\tdescription:\n\t\t\t\"If the value is boolean, turns on or off pagination of the output of a particular Git subcommand when writing to a tty. Otherwise, turns on pagination for the subcommand using the pager specified by the value of `pager.<cmd>`. If `--paginate` or `--no-pager` is specified on the command line, it takes precedence over this option. To disable pagination for all commands, set `core.pager` or `GIT_PAGER` to `cat`\",\n\t},\n\t{\n\t\tname: \"pretty.<name>\",\n\t\tinsertValue: \"pretty.{cursor}\",\n\t\tdescription:\n\t\t\t'Alias for a --pretty= format string, as specified in git-log[1]. Any aliases defined here can be used just as the built-in pretty formats could. For example, running `git config pretty.changelog \"format:* %H %s\"` would cause the invocation `git log --pretty=changelog` to be equivalent to running `git log \"--pretty=format:* %H %s\"`. Note that an alias with the same name as a built-in format will be silently ignored',\n\t},\n\t{\n\t\tname: \"protocol.<name>.allow\",\n\t\tinsertValue: \"protocol.{cursor}.allow\",\n\t\tdescription:\n\t\t\t\"Set a policy to be used by protocol `<name>` with clone/fetch/push commands. See `protocol.allow` above for the available policies\",\n\t},\n\t{\n\t\tname: \"protocol.allow\",\n\t\tdescription:\n\t\t\t\"If set, provide a user defined default policy for all protocols which don't explicitly have a policy (`protocol.<name>.allow`). By default, if unset, known-safe protocols (http, https, git, ssh, file) have a default policy of `always`, known-dangerous protocols (ext) have a default policy of `never`, and all other protocols have a default policy of `user`. Supported policies:\",\n\t},\n\t{\n\t\tname: \"protocol.version\",\n\t\tdescription:\n\t\t\t\"If set, clients will attempt to communicate with a server using the specified protocol version. If the server does not support it, communication falls back to version 0. If unset, the default is `2`. Supported versions:\",\n\t},\n\t{\n\t\tname: \"pull.ff\",\n\t\tdescription:\n\t\t\t\"By default, Git does not create an extra merge commit when merging a commit that is a descendant of the current commit. Instead, the tip of the current branch is fast-forwarded. When set to `false`, this variable tells Git to create an extra merge commit in such a case (equivalent to giving the `--no-ff` option from the command line). When set to `only`, only such fast-forward merges are allowed (equivalent to giving the `--ff-only` option from the command line). This setting overrides `merge.ff` when pulling\",\n\t},\n\t{\n\t\tname: \"pull.octopus\",\n\t\tdescription:\n\t\t\t\"The default merge strategy to use when pulling multiple branches at once\",\n\t},\n\t{\n\t\tname: \"pull.rebase\",\n\t\tdescription:\n\t\t\t'When true, rebase branches on top of the fetched branch, instead of merging the default branch from the default remote when \"git pull\" is run. See \"branch.<name>.rebase\" for setting this on a per-branch basis',\n\t},\n\t{\n\t\tname: \"pull.twohead\",\n\t\tdescription:\n\t\t\t\"The default merge strategy to use when pulling a single branch\",\n\t},\n\t{\n\t\tname: \"push.autoSetupRemote\",\n\t\tdescription:\n\t\t\t\"If set to \\\"true\\\" assume `--set-upstream` on default push when no upstream tracking exists for the current branch; this option takes effect with push.default options 'simple', 'upstream', and 'current'. It is useful if by default you want new branches to be pushed to the default remote (like the behavior of 'push.default=current') and you also want the upstream tracking to be set. Workflows most likely to benefit from this option are 'simple' central workflows where all branches are expected to have the same name on the remote\",\n\t},\n\t{\n\t\tname: \"push.default\",\n\t\tdescription:\n\t\t\t\"Defines the action `git push` should take if no refspec is given (whether from the command-line, config, or elsewhere). Different values are well-suited for specific workflows; for instance, in a purely central workflow (i.e. the fetch source is equal to the push destination), `upstream` is probably what you want. Possible values are:\",\n\t},\n\t{\n\t\tname: \"push.followTags\",\n\t\tdescription:\n\t\t\t\"If set to true enable `--follow-tags` option by default. You may override this configuration at time of push by specifying `--no-follow-tags`\",\n\t},\n\t{\n\t\tname: \"push.gpgSign\",\n\t\tdescription:\n\t\t\t\"May be set to a boolean value, or the string 'if-asked'. A true value causes all pushes to be GPG signed, as if `--signed` is passed to git-push[1]. The string 'if-asked' causes pushes to be signed if the server supports it, as if `--signed=if-asked` is passed to 'git push'. A false value may override a value from a lower-priority config file. An explicit command-line flag always overrides this config option\",\n\t},\n\t{\n\t\tname: \"push.negotiate\",\n\t\tdescription:\n\t\t\t'If set to \"true\", attempt to reduce the size of the packfile sent by rounds of negotiation in which the client and the server attempt to find commits in common. If \"false\", Git will rely solely on the server\\'s ref advertisement to find commits in common',\n\t},\n\t{\n\t\tname: \"push.pushOption\",\n\t\tdescription:\n\t\t\t\"When no `--push-option=<option>` argument is given from the command line, `git push` behaves as if each <value> of this variable is given as `--push-option=<value>`\",\n\t},\n\t{\n\t\tname: \"push.recurseSubmodules\",\n\t\tdescription:\n\t\t\t\"Make sure all submodule commits used by the revisions to be pushed are available on a remote-tracking branch. If the value is 'check' then Git will verify that all submodule commits that changed in the revisions to be pushed are available on at least one remote of the submodule. If any commits are missing, the push will be aborted and exit with non-zero status. If the value is 'on-demand' then all submodules that changed in the revisions to be pushed will be pushed. If on-demand was not able to push all necessary revisions it will also be aborted and exit with non-zero status. If the value is 'no' then default behavior of ignoring submodules when pushing is retained. You may override this configuration at time of push by specifying '--recurse-submodules=check|on-demand|no'. If not set, 'no' is used by default, unless 'submodule.recurse' is set (in which case a 'true' value means 'on-demand')\",\n\t},\n\t{\n\t\tname: \"push.useBitmaps\",\n\t\tdescription:\n\t\t\t'If set to \"false\", disable use of bitmaps for \"git push\" even if `pack.useBitmaps` is \"true\", without preventing other git operations from using bitmaps. Default is true',\n\t},\n\t{\n\t\tname: \"push.useForceIfIncludes\",\n\t\tdescription:\n\t\t\t'If set to \"true\", it is equivalent to specifying `--force-if-includes` as an option to git-push[1] in the command line. Adding `--no-force-if-includes` at the time of push overrides this configuration setting',\n\t},\n\t{\n\t\tname: \"rebase.abbreviateCommands\",\n\t\tdescription:\n\t\t\t\"If set to true, `git rebase` will use abbreviated command names in the todo list resulting in something like this:\",\n\t},\n\t{\n\t\tname: \"rebase.autoSquash\",\n\t\tdescription: \"If set to true enable `--autosquash` option by default\",\n\t},\n\t{\n\t\tname: \"rebase.autoStash\",\n\t\tdescription:\n\t\t\t\"When set to true, automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run rebase on a dirty worktree. However, use with care: the final stash application after a successful rebase might result in non-trivial conflicts. This option can be overridden by the `--no-autostash` and `--autostash` options of git-rebase[1]. Defaults to false\",\n\t},\n\t{\n\t\tname: \"rebase.backend\",\n\t\tdescription:\n\t\t\t\"Default backend to use for rebasing. Possible choices are 'apply' or 'merge'. In the future, if the merge backend gains all remaining capabilities of the apply backend, this setting may become unused\",\n\t},\n\t{\n\t\tname: \"rebase.forkPoint\",\n\t\tdescription: \"If set to false set `--no-fork-point` option by default\",\n\t},\n\t{\n\t\tname: \"rebase.instructionFormat\",\n\t\tdescription:\n\t\t\t\"A format string, as specified in git-log[1], to be used for the todo list during an interactive rebase. The format will automatically have the long commit hash prepended to the format\",\n\t},\n\t{\n\t\tname: \"rebase.missingCommitsCheck\",\n\t\tdescription:\n\t\t\t'If set to \"warn\", git rebase -i will print a warning if some commits are removed (e.g. a line was deleted), however the rebase will still proceed. If set to \"error\", it will print the previous warning and stop the rebase, \\'git rebase --edit-todo\\' can then be used to correct the error. If set to \"ignore\", no checking is done. To drop a commit without warning or error, use the `drop` command in the todo list. Defaults to \"ignore\"',\n\t},\n\t{\n\t\tname: \"rebase.rescheduleFailedExec\",\n\t\tdescription:\n\t\t\t\"Automatically reschedule `exec` commands that failed. This only makes sense in interactive mode (or when an `--exec` option was provided). This is the same as specifying the `--reschedule-failed-exec` option\",\n\t},\n\t{\n\t\tname: \"rebase.stat\",\n\t\tdescription:\n\t\t\t\"Whether to show a diffstat of what changed upstream since the last rebase. False by default\",\n\t},\n\t{\n\t\tname: \"rebase.updateRefs\",\n\t\tdescription: \"If set to true enable `--update-refs` option by default\",\n\t},\n\t{\n\t\tname: \"receive.advertiseAtomic\",\n\t\tdescription:\n\t\t\t\"By default, git-receive-pack will advertise the atomic push capability to its clients. If you don't want to advertise this capability, set this variable to false\",\n\t},\n\t{\n\t\tname: \"receive.advertisePushOptions\",\n\t\tdescription:\n\t\t\t\"When set to true, git-receive-pack will advertise the push options capability to its clients. False by default\",\n\t},\n\t{\n\t\tname: \"receive.autogc\",\n\t\tdescription:\n\t\t\t'By default, git-receive-pack will run \"git-gc --auto\" after receiving data from git-push and updating refs. You can stop it by setting this variable to false',\n\t},\n\t{\n\t\tname: \"receive.certNonceSeed\",\n\t\tdescription:\n\t\t\t'By setting this variable to a string, `git receive-pack` will accept a `git push --signed` and verifies it by using a \"nonce\" protected by HMAC using this string as a secret key',\n\t},\n\t{\n\t\tname: \"receive.certNonceSlop\",\n\t\tdescription:\n\t\t\t'When a `git push --signed` sent a push certificate with a \"nonce\" that was issued by a receive-pack serving the same repository within this many seconds, export the \"nonce\" found in the certificate to `GIT_PUSH_CERT_NONCE` to the hooks (instead of what the receive-pack asked the sending side to include). This may allow writing checks in `pre-receive` and `post-receive` a bit easier. Instead of checking `GIT_PUSH_CERT_NONCE_SLOP` environment variable that records by how many seconds the nonce is stale to decide if they want to accept the certificate, they only can check `GIT_PUSH_CERT_NONCE_STATUS` is `OK`',\n\t},\n\t{\n\t\tname: \"receive.denyCurrentBranch\",\n\t\tdescription:\n\t\t\t'If set to true or \"refuse\", git-receive-pack will deny a ref update to the currently checked out branch of a non-bare repository. Such a push is potentially dangerous because it brings the HEAD out of sync with the index and working tree. If set to \"warn\", print a warning of such a push to stderr, but allow the push to proceed. If set to false or \"ignore\", allow such pushes with no message. Defaults to \"refuse\"',\n\t},\n\t{\n\t\tname: \"receive.denyDeleteCurrent\",\n\t\tdescription:\n\t\t\t\"If set to true, git-receive-pack will deny a ref update that deletes the currently checked out branch of a non-bare repository\",\n\t},\n\t{\n\t\tname: \"receive.denyDeletes\",\n\t\tdescription:\n\t\t\t\"If set to true, git-receive-pack will deny a ref update that deletes the ref. Use this to prevent such a ref deletion via a push\",\n\t},\n\t{\n\t\tname: \"receive.denyNonFastForwards\",\n\t\tdescription:\n\t\t\t\"If set to true, git-receive-pack will deny a ref update which is not a fast-forward. Use this to prevent such an update via a push, even if that push is forced. This configuration variable is set when initializing a shared repository\",\n\t},\n\t{\n\t\tname: \"receive.fsck.<msg-id>\",\n\t\tinsertValue: \"receive.fsck.{cursor}\",\n\t\tdescription:\n\t\t\t\"Acts like `fsck.<msg-id>`, but is used by git-receive-pack[1] instead of git-fsck[1]. See the `fsck.<msg-id>` documentation for details\",\n\t},\n\t{\n\t\tname: \"receive.fsck.skipList\",\n\t\tdescription:\n\t\t\t\"Acts like `fsck.skipList`, but is used by git-receive-pack[1] instead of git-fsck[1]. See the `fsck.skipList` documentation for details\",\n\t},\n\t{\n\t\tname: \"receive.fsckObjects\",\n\t\tdescription:\n\t\t\t\"If it is set to true, git-receive-pack will check all received objects. See `transfer.fsckObjects` for what's checked. Defaults to false. If not set, the value of `transfer.fsckObjects` is used instead\",\n\t},\n\t{\n\t\tname: \"receive.hideRefs\",\n\t\tdescription:\n\t\t\t\"This variable is the same as `transfer.hideRefs`, but applies only to `receive-pack` (and so affects pushes, but not fetches). An attempt to update or delete a hidden ref by `git push` is rejected\",\n\t},\n\t{\n\t\tname: \"receive.keepAlive\",\n\t\tdescription:\n\t\t\t\"After receiving the pack from the client, `receive-pack` may produce no output (if `--quiet` was specified) while processing the pack, causing some networks to drop the TCP connection. With this option set, if `receive-pack` does not transmit any data in this phase for `receive.keepAlive` seconds, it will send a short keepalive packet. The default is 5 seconds; set to 0 to disable keepalives entirely\",\n\t},\n\t{\n\t\tname: \"receive.maxInputSize\",\n\t\tdescription:\n\t\t\t\"If the size of the incoming pack stream is larger than this limit, then git-receive-pack will error out, instead of accepting the pack file. If not set or set to 0, then the size is unlimited\",\n\t},\n\t{\n\t\tname: \"receive.procReceiveRefs\",\n\t\tdescription:\n\t\t\t'This is a multi-valued variable that defines reference prefixes to match the commands in `receive-pack`. Commands matching the prefixes will be executed by an external hook \"proc-receive\", instead of the internal `execute_commands` function. If this variable is not defined, the \"proc-receive\" hook will never be used, and all commands will be executed by the internal `execute_commands` function',\n\t},\n\t{\n\t\tname: \"receive.shallowUpdate\",\n\t\tdescription:\n\t\t\t\"If set to true, .git/shallow can be updated when new refs require new shallow roots. Otherwise those refs are rejected\",\n\t},\n\t{\n\t\tname: \"receive.unpackLimit\",\n\t\tdescription:\n\t\t\t\"If the number of objects received in a push is below this limit then the objects will be unpacked into loose object files. However if the number of received objects equals or exceeds this limit then the received pack will be stored as a pack, after adding any missing delta bases. Storing the pack from a push can make the push operation complete faster, especially on slow filesystems. If not set, the value of `transfer.unpackLimit` is used instead\",\n\t},\n\t{\n\t\tname: \"receive.updateServerInfo\",\n\t\tdescription:\n\t\t\t\"If set to true, git-receive-pack will run git-update-server-info after receiving data from git-push and updating refs\",\n\t},\n\t{\n\t\tname: \"remote.<name>.fetch\",\n\t\tinsertValue: \"remote.{cursor}.fetch\",\n\t\tdescription:\n\t\t\t'The default set of \"refspec\" for git-fetch[1]. See git-fetch[1]',\n\t},\n\t{\n\t\tname: \"remote.<name>.mirror\",\n\t\tinsertValue: \"remote.{cursor}.mirror\",\n\t\tdescription:\n\t\t\t\"If true, pushing to this remote will automatically behave as if the `--mirror` option was given on the command line\",\n\t},\n\t{\n\t\tname: \"remote.<name>.partialclonefilter\",\n\t\tinsertValue: \"remote.{cursor}.partialclonefilter\",\n\t\tdescription:\n\t\t\t\"The filter that will be applied when fetching from this promisor remote. Changing or clearing this value will only affect fetches for new commits. To fetch associated objects for commits already present in the local object database, use the `--refetch` option of git-fetch[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.promisor\",\n\t\tinsertValue: \"remote.{cursor}.promisor\",\n\t\tdescription:\n\t\t\t\"When set to true, this remote will be used to fetch promisor objects\",\n\t},\n\t{\n\t\tname: \"remote.<name>.proxy\",\n\t\tinsertValue: \"remote.{cursor}.proxy\",\n\t\tdescription:\n\t\t\t\"For remotes that require curl (http, https and ftp), the URL to the proxy to use for that remote. Set to the empty string to disable proxying for that remote\",\n\t},\n\t{\n\t\tname: \"remote.<name>.proxyAuthMethod\",\n\t\tinsertValue: \"remote.{cursor}.proxyAuthMethod\",\n\t\tdescription:\n\t\t\t\"For remotes that require curl (http, https and ftp), the method to use for authenticating against the proxy in use (probably set in `remote.<name>.proxy`). See `http.proxyAuthMethod`\",\n\t},\n\t{\n\t\tname: \"remote.<name>.prune\",\n\t\tinsertValue: \"remote.{cursor}.prune\",\n\t\tdescription:\n\t\t\t\"When set to true, fetching from this remote by default will also remove any remote-tracking references that no longer exist on the remote (as if the `--prune` option was given on the command line). Overrides `fetch.prune` settings, if any\",\n\t},\n\t{\n\t\tname: \"remote.<name>.pruneTags\",\n\t\tinsertValue: \"remote.{cursor}.pruneTags\",\n\t\tdescription:\n\t\t\t\"When set to true, fetching from this remote by default will also remove any local tags that no longer exist on the remote if pruning is activated in general via `remote.<name>.prune`, `fetch.prune` or `--prune`. Overrides `fetch.pruneTags` settings, if any\",\n\t},\n\t{\n\t\tname: \"remote.<name>.push\",\n\t\tinsertValue: \"remote.{cursor}.push\",\n\t\tdescription:\n\t\t\t'The default set of \"refspec\" for git-push[1]. See git-push[1]',\n\t},\n\t{\n\t\tname: \"remote.<name>.pushurl\",\n\t\tinsertValue: \"remote.{cursor}.pushurl\",\n\t\tdescription: \"The push URL of a remote repository. See git-push[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.receivepack\",\n\t\tinsertValue: \"remote.{cursor}.receivepack\",\n\t\tdescription:\n\t\t\t\"The default program to execute on the remote side when pushing. See option --receive-pack of git-push[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.skipDefaultUpdate\",\n\t\tinsertValue: \"remote.{cursor}.skipDefaultUpdate\",\n\t\tdescription:\n\t\t\t\"If true, this remote will be skipped by default when updating using git-fetch[1] or the `update` subcommand of git-remote[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.skipFetchAll\",\n\t\tinsertValue: \"remote.{cursor}.skipFetchAll\",\n\t\tdescription:\n\t\t\t\"If true, this remote will be skipped by default when updating using git-fetch[1] or the `update` subcommand of git-remote[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.tagOpt\",\n\t\tinsertValue: \"remote.{cursor}.tagOpt\",\n\t\tdescription:\n\t\t\t\"Setting this value to --no-tags disables automatic tag following when fetching from remote <name>. Setting it to --tags will fetch every tag from remote <name>, even if they are not reachable from remote branch heads. Passing these flags directly to git-fetch[1] can override this setting. See options --tags and --no-tags of git-fetch[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.uploadpack\",\n\t\tinsertValue: \"remote.{cursor}.uploadpack\",\n\t\tdescription:\n\t\t\t\"The default program to execute on the remote side when fetching. See option --upload-pack of git-fetch-pack[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.url\",\n\t\tinsertValue: \"remote.{cursor}.url\",\n\t\tdescription:\n\t\t\t\"The URL of a remote repository. See git-fetch[1] or git-push[1]\",\n\t},\n\t{\n\t\tname: \"remote.<name>.vcs\",\n\t\tinsertValue: \"remote.{cursor}.vcs\",\n\t\tdescription:\n\t\t\t\"Setting this to a value <vcs> will cause Git to interact with the remote with the git-remote-<vcs> helper\",\n\t},\n\t{\n\t\tname: \"remote.pushDefault\",\n\t\tdescription:\n\t\t\t\"The remote to push to by default. Overrides `branch.<name>.remote` for all branches, and is overridden by `branch.<name>.pushRemote` for specific branches\",\n\t},\n\t{\n\t\tname: \"remotes.<group>\",\n\t\tinsertValue: \"remotes.{cursor}\",\n\t\tdescription:\n\t\t\t'The list of remotes which are fetched by \"git remote update <group>\". See git-remote[1]',\n\t},\n\t{\n\t\tname: \"repack.cruftThreads\",\n\t\tdescription:\n\t\t\t\"Parameters used by git-pack-objects[1] when generating a cruft pack and the respective parameters are not given over the command line. See similarly named `pack.*` configuration variables for defaults and meaning\",\n\t},\n\t{\n\t\tname: \"repack.packKeptObjects\",\n\t\tdescription:\n\t\t\t\"If set to true, makes `git repack` act as if `--pack-kept-objects` was passed. See git-repack[1] for details. Defaults to `false` normally, but `true` if a bitmap index is being written (either via `--write-bitmap-index` or `repack.writeBitmaps`)\",\n\t},\n\t{\n\t\tname: \"repack.updateServerInfo\",\n\t\tdescription:\n\t\t\t\"If set to false, git-repack[1] will not run git-update-server-info[1]. Defaults to true. Can be overridden when true by the `-n` option of git-repack[1]\",\n\t},\n\t{\n\t\tname: \"repack.useDeltaBaseOffset\",\n\t\tdescription:\n\t\t\t'By default, git-repack[1] creates packs that use delta-base offset. If you need to share your repository with Git older than version 1.4.4, either directly or via a dumb protocol such as http, then you need to set this option to \"false\" and repack. Access from old Git versions over the native protocol are unaffected by this option',\n\t},\n\t{\n\t\tname: \"repack.useDeltaIslands\",\n\t\tdescription:\n\t\t\t\"If set to true, makes `git repack` act as if `--delta-islands` was passed. Defaults to `false`\",\n\t},\n\t{\n\t\tname: \"repack.writeBitmaps\",\n\t\tdescription:\n\t\t\t'When true, git will write a bitmap index when packing all objects to disk (e.g., when `git repack -a` is run). This index can speed up the \"counting objects\" phase of subsequent packs created for clones and fetches, at the cost of some disk space and extra time spent on the initial repack. This has no effect if multiple packfiles are created. Defaults to true on bare repos, false otherwise',\n\t},\n\t{\n\t\tname: \"rerere.autoUpdate\",\n\t\tdescription:\n\t\t\t\"When set to true, `git-rerere` updates the index with the resulting contents after it cleanly resolves conflicts using previously recorded resolution. Defaults to false\",\n\t},\n\t{\n\t\tname: \"rerere.enabled\",\n\t\tdescription:\n\t\t\t'Activate recording of resolved conflicts, so that identical conflict hunks can be resolved automatically, should they be encountered again. By default, git-rerere[1] is enabled if there is an `rr-cache` directory under the `$GIT_DIR`, e.g. if \"rerere\" was previously used in the repository',\n\t},\n\t{\n\t\tname: \"revert.reference\",\n\t\tdescription:\n\t\t\t\"Setting this variable to true makes `git revert` behave as if the `--reference` option is given\",\n\t},\n\t{\n\t\tname: \"safe.bareRepository\",\n\t\tdescription:\n\t\t\t\"Specifies which bare repositories Git will work with. The currently supported values are:\",\n\t},\n\t{\n\t\tname: \"safe.directory\",\n\t\tdescription:\n\t\t\t\"These config entries specify Git-tracked directories that are considered safe even if they are owned by someone other than the current user. By default, Git will refuse to even parse a Git config of a repository owned by someone else, let alone run its hooks, and this config setting allows users to specify exceptions, e.g. for intentionally shared repositories (see the `--shared` option in git-init[1])\",\n\t},\n\t{\n\t\tname: \"sendemail.forbidSendmailVariables\",\n\t\tdescription:\n\t\t\t'To avoid common misconfiguration mistakes, git-send-email[1] will abort with a warning if any configuration options for \"sendmail\" exist. Set this variable to bypass the check',\n\t},\n\t{\n\t\tname: \"sendemail.identity\",\n\t\tdescription:\n\t\t\t\"A configuration identity. When given, causes values in the 'sendemail.<identity>' subsection to take precedence over values in the 'sendemail' section. The default identity is the value of `sendemail.identity`\",\n\t},\n\t{\n\t\tname: \"sendemail.signedoffcc\",\n\t\tdescription: \"Deprecated alias for `sendemail.signedoffbycc`\",\n\t\tdeprecated: true,\n\t\thidden: true,\n\t},\n\t{\n\t\tname: \"sendemail.smtpBatchSize\",\n\t\tdescription:\n\t\t\t\"Number of messages to be sent per connection, after that a relogin will happen. If the value is 0 or undefined, send all messages in one connection. See also the `--batch-size` option of git-send-email[1]\",\n\t},\n\t{\n\t\tname: \"sendemail.smtpEncryption\",\n\t\tdescription:\n\t\t\t\"See git-send-email[1] for description. Note that this setting is not subject to the 'identity' mechanism\",\n\t},\n\t{\n\t\tname: \"sendemail.smtpReloginDelay\",\n\t\tdescription:\n\t\t\t\"Seconds wait before reconnecting to smtp server. See also the `--relogin-delay` option of git-send-email[1]\",\n\t},\n\t{\n\t\tname: \"sendemail.smtpsslcertpath\",\n\t\tdescription:\n\t\t\t\"Path to ca-certificates (either a directory or a single file). Set it to an empty string to disable certificate verification\",\n\t},\n\t{\n\t\tname: \"sendemail.xmailer\",\n\t\tdescription: \"See git-send-email[1] for description\",\n\t},\n\t{\n\t\tname: \"sequence.editor\",\n\t\tdescription:\n\t\t\t\"Text editor used by `git rebase -i` for editing the rebase instruction file. The value is meant to be interpreted by the shell when it is used. It can be overridden by the `GIT_SEQUENCE_EDITOR` environment variable. When not configured the default commit message editor is used instead\",\n\t},\n\t{\n\t\tname: \"sendemail.<identity>.forbidSendmailVariables\",\n\t\tinsertValue: \"sendemail.{cursor}.forbidSendmailVariables\",\n\t\tdescription:\n\t\t\t'To avoid common misconfiguration mistakes, git-send-email[1] will abort with a warning if any configuration options for \"sendmail\" exist. Set this variable to bypass the check',\n\t},\n\t{\n\t\tname: \"sendemail.<identity>.signedoffcc\",\n\t\tinsertValue: \"sendemail.{cursor}.signedoffcc\",\n\t\tdescription: \"Deprecated alias for `sendemail.signedoffbycc`\",\n\t\tdeprecated: true,\n\t\thidden: true,\n\t},\n\t{\n\t\tname: \"sendemail.<identity>.smtpBatchSize\",\n\t\tinsertValue: \"sendemail.{cursor}.smtpBatchSize\",\n\t\tdescription:\n\t\t\t\"Number of messages to be sent per connection, after that a relogin will happen. If the value is 0 or undefined, send all messages in one connection. See also the `--batch-size` option of git-send-email[1]\",\n\t},\n\t{\n\t\tname: \"sendemail.<identity>.smtpEncryption\",\n\t\tinsertValue: \"sendemail.{cursor}.smtpEncryption\",\n\t\tdescription:\n\t\t\t\"See git-send-email[1] for description. Note that this setting is not subject to the 'identity' mechanism\",\n\t},\n\t{\n\t\tname: \"sendemail.<identity>.smtpReloginDelay\",\n\t\tinsertValue: \"sendemail.{cursor}.smtpReloginDelay\",\n\t\tdescription:\n\t\t\t\"Seconds wait before reconnecting to smtp server. See also the `--relogin-delay` option of git-send-email[1]\",\n\t},\n\t{\n\t\tname: \"sendemail.<identity>.smtpsslcertpath\",\n\t\tinsertValue: \"sendemail.{cursor}.smtpsslcertpath\",\n\t\tdescription:\n\t\t\t\"Path to ca-certificates (either a directory or a single file). Set it to an empty string to disable certificate verification\",\n\t},\n\t{\n\t\tname: \"sendemail.<identity>.xmailer\",\n\t\tinsertValue: \"sendemail.{cursor}.xmailer\",\n\t\tdescription: \"See git-send-email[1] for description\",\n\t},\n\t{\n\t\tname: \"sequence.<identity>.editor\",\n\t\tinsertValue: \"sequence.{cursor}.editor\",\n\t\tdescription:\n\t\t\t\"Text editor used by `git rebase -i` for editing the rebase instruction file. The value is meant to be interpreted by the shell when it is used. It can be overridden by the `GIT_SEQUENCE_EDITOR` environment variable. When not configured the default commit message editor is used instead\",\n\t},\n\t{\n\t\tname: \"showBranch.default\",\n\t\tdescription:\n\t\t\t\"The default set of branches for git-show-branch[1]. See git-show-branch[1]\",\n\t},\n\t{\n\t\tname: \"sparse.expectFilesOutsideOfPatterns\",\n\t\tdescription:\n\t\t\t\"Typically with sparse checkouts, files not matching any sparsity patterns are marked with a SKIP_WORKTREE bit in the index and are missing from the working tree. Accordingly, Git will ordinarily check whether files with the SKIP_WORKTREE bit are in fact present in the working tree contrary to expectations. If Git finds any, it marks those paths as present by clearing the relevant SKIP_WORKTREE bits. This option can be used to tell Git that such present-despite-skipped files are expected and to stop checking for them\",\n\t},\n\t{\n\t\tname: \"splitIndex.maxPercentChange\",\n\t\tdescription:\n\t\t\t\"When the split index feature is used, this specifies the percent of entries the split index can contain compared to the total number of entries in both the split index and the shared index before a new shared index is written. The value should be between 0 and 100. If the value is 0 then a new shared index is always written, if it is 100 a new shared index is never written. By default the value is 20, so a new shared index is written if the number of entries in the split index would be greater than 20 percent of the total number of entries. See git-update-index[1]\",\n\t},\n\t{\n\t\tname: \"splitIndex.sharedIndexExpire\",\n\t\tdescription:\n\t\t\t'When the split index feature is used, shared index files that were not modified since the time this variable specifies will be removed when a new shared index file is created. The value \"now\" expires all entries immediately, and \"never\" suppresses expiration altogether. The default value is \"2.weeks.ago\". Note that a shared index file is considered modified (for the purpose of expiration) each time a new split-index file is either created based on it or read from it. See git-update-index[1]',\n\t},\n\t{\n\t\tname: \"ssh.variant\",\n\t\tdescription:\n\t\t\t\"By default, Git determines the command line arguments to use based on the basename of the configured SSH command (configured using the environment variable `GIT_SSH` or `GIT_SSH_COMMAND` or the config setting `core.sshCommand`). If the basename is unrecognized, Git will attempt to detect support of OpenSSH options by first invoking the configured SSH command with the `-G` (print configuration) option and will subsequently use OpenSSH options (if that is successful) or no options besides the host and remote command (if it fails)\",\n\t},\n\t{\n\t\tname: \"stash.showIncludeUntracked\",\n\t\tdescription:\n\t\t\t\"If this is set to true, the `git stash show` command will show the untracked files of a stash entry. Defaults to false. See description of 'show' command in git-stash[1]\",\n\t},\n\t{\n\t\tname: \"stash.showPatch\",\n\t\tdescription:\n\t\t\t\"If this is set to true, the `git stash show` command without an option will show the stash entry in patch form. Defaults to false. See description of 'show' command in git-stash[1]\",\n\t},\n\t{\n\t\tname: \"stash.showStat\",\n\t\tdescription:\n\t\t\t\"If this is set to true, the `git stash show` command without an option will show diffstat of the stash entry. Defaults to true. See description of 'show' command in git-stash[1]\",\n\t},\n\t{\n\t\tname: \"status.aheadBehind\",\n\t\tdescription:\n\t\t\t\"Set to true to enable `--ahead-behind` and false to enable `--no-ahead-behind` by default in git-status[1] for non-porcelain status formats. Defaults to true\",\n\t},\n\t{\n\t\tname: \"status.branch\",\n\t\tdescription:\n\t\t\t\"Set to true to enable --branch by default in git-status[1]. The option --no-branch takes precedence over this variable\",\n\t},\n\t{\n\t\tname: \"status.displayCommentPrefix\",\n\t\tdescription:\n\t\t\t\"If set to true, git-status[1] will insert a comment prefix before each output line (starting with `core.commentChar`, i.e. `#` by default). This was the behavior of git-status[1] in Git 1.8.4 and previous. Defaults to false\",\n\t},\n\t{\n\t\tname: \"status.relativePaths\",\n\t\tdescription:\n\t\t\t\"By default, git-status[1] shows paths relative to the current directory. Setting this variable to `false` shows paths relative to the repository root (this was the default for Git prior to v1.5.4)\",\n\t},\n\t{\n\t\tname: \"status.renameLimit\",\n\t\tdescription:\n\t\t\t\"The number of files to consider when performing rename detection in git-status[1] and git-commit[1]. Defaults to the value of diff.renameLimit\",\n\t},\n\t{\n\t\tname: \"status.renames\",\n\t\tdescription:\n\t\t\t'Whether and how Git detects renames in git-status[1] and git-commit[1] . If set to \"false\", rename detection is disabled. If set to \"true\", basic rename detection is enabled. If set to \"copies\" or \"copy\", Git will detect copies, as well. Defaults to the value of diff.renames',\n\t},\n\t{\n\t\tname: \"status.short\",\n\t\tdescription:\n\t\t\t\"Set to true to enable --short by default in git-status[1]. The option --no-short takes precedence over this variable\",\n\t},\n\t{\n\t\tname: \"status.showStash\",\n\t\tdescription:\n\t\t\t\"If set to true, git-status[1] will display the number of entries currently stashed away. Defaults to false\",\n\t},\n\t{\n\t\tname: \"status.showUntrackedFiles\",\n\t\tdescription:\n\t\t\t\"By default, git-status[1] and git-commit[1] show files which are not currently tracked by Git. Directories which contain only untracked files, are shown with the directory name only. Showing untracked files means that Git needs to lstat() all the files in the whole repository, which might be slow on some systems. So, this variable controls how the commands displays the untracked files. Possible values are:\",\n\t},\n\t{\n\t\tname: \"status.submoduleSummary\",\n\t\tdescription:\n\t\t\t\"Defaults to false. If this is set to a non zero number or true (identical to -1 or an unlimited number), the submodule summary will be enabled and a summary of commits for modified submodules will be shown (see --summary-limit option of git-submodule[1]). Please note that the summary output command will be suppressed for all submodules when `diff.ignoreSubmodules` is set to 'all' or only for those submodules where `submodule.<name>.ignore=all`. The only exception to that rule is that status and commit will show staged submodule changes. To also view the summary for ignored submodules you can either use the --ignore-submodules=dirty command-line option or the 'git submodule summary' command, which shows a similar output but does not honor these settings\",\n\t},\n\t{\n\t\tname: \"submodule.<name>.active\",\n\t\tinsertValue: \"submodule.{cursor}.active\",\n\t\tdescription:\n\t\t\t\"Boolean value indicating if the submodule is of interest to git commands. This config option takes precedence over the submodule.active config option. See gitsubmodules[7] for details\",\n\t},\n\t{\n\t\tname: \"submodule.<name>.branch\",\n\t\tinsertValue: \"submodule.{cursor}.branch\",\n\t\tdescription:\n\t\t\t\"The remote branch name for a submodule, used by `git submodule update --remote`. Set this option to override the value found in the `.gitmodules` file. See git-submodule[1] and gitmodules[5] for details\",\n\t},\n\t{\n\t\tname: \"submodule.<name>.fetchRecurseSubmodules\",\n\t\tinsertValue: \"submodule.{cursor}.fetchRecurseSubmodules\",\n\t\tdescription:\n\t\t\t'This option can be used to control recursive fetching of this submodule. It can be overridden by using the --[no-]recurse-submodules command-line option to \"git fetch\" and \"git pull\". This setting will override that from in the gitmodules[5] file',\n\t},\n\t{\n\t\tname: \"submodule.<name>.ignore\",\n\t\tinsertValue: \"submodule.{cursor}.ignore\",\n\t\tdescription:\n\t\t\t'Defines under what circumstances \"git status\" and the diff family show a submodule as modified. When set to \"all\", it will never be considered modified (but it will nonetheless show up in the output of status and commit when it has been staged), \"dirty\" will ignore all changes to the submodules work tree and takes only differences between the HEAD of the submodule and the commit recorded in the superproject into account. \"untracked\" will additionally let submodules with modified tracked files in their work tree show up. Using \"none\" (the default when this option is not set) also shows submodules that have untracked files in their work tree as changed. This setting overrides any setting made in .gitmodules for this submodule, both settings can be overridden on the command line by using the \"--ignore-submodules\" option. The \\'git submodule\\' commands are not affected by this setting',\n\t},\n\t{\n\t\tname: \"submodule.<name>.update\",\n\t\tinsertValue: \"submodule.{cursor}.update\",\n\t\tdescription:\n\t\t\t\"The method by which a submodule is updated by 'git submodule update', which is the only affected command, others such as 'git checkout --recurse-submodules' are unaffected. It exists for historical reasons, when 'git submodule' was the only command to interact with submodules; settings like `submodule.active` and `pull.rebase` are more specific. It is populated by `git submodule init` from the gitmodules[5] file. See description of 'update' command in git-submodule[1]\",\n\t},\n\t{\n\t\tname: \"submodule.<name>.url\",\n\t\tinsertValue: \"submodule.{cursor}.url\",\n\t\tdescription:\n\t\t\t\"The URL for a submodule. This variable is copied from the .gitmodules file to the git config via 'git submodule init'. The user can change the configured URL before obtaining the submodule via 'git submodule update'. If neither submodule.<name>.active or submodule.active are set, the presence of this variable is used as a fallback to indicate whether the submodule is of interest to git commands. See git-submodule[1] and gitmodules[5] for details\",\n\t},\n\t{\n\t\tname: \"submodule.active\",\n\t\tdescription:\n\t\t\t\"A repeated field which contains a pathspec used to match against a submodule's path to determine if the submodule is of interest to git commands. See gitsubmodules[7] for details\",\n\t},\n\t{\n\t\tname: \"submodule.alternateErrorStrategy\",\n\t\tdescription:\n\t\t\t\"Specifies how to treat errors with the alternates for a submodule as computed via `submodule.alternateLocation`. Possible values are `ignore`, `info`, `die`. Default is `die`. Note that if set to `ignore` or `info`, and if there is an error with the computed alternate, the clone proceeds as if no alternate was specified\",\n\t},\n\t{\n\t\tname: \"submodule.alternateLocation\",\n\t\tdescription:\n\t\t\t\"Specifies how the submodules obtain alternates when submodules are cloned. Possible values are `no`, `superproject`. By default `no` is assumed, which doesn't add references. When the value is set to `superproject` the submodule to be cloned computes its alternates location relative to the superprojects alternate\",\n\t},\n\t{\n\t\tname: \"submodule.fetchJobs\",\n\t\tdescription:\n\t\t\t\"Specifies how many submodules are fetched/cloned at the same time. A positive integer allows up to that number of submodules fetched in parallel. A value of 0 will give some reasonable default. If unset, it defaults to 1\",\n\t},\n\t{\n\t\tname: \"submodule.propagateBranches\",\n\t\tdescription:\n\t\t\t\"[EXPERIMENTAL] A boolean that enables branching support when using `--recurse-submodules` or `submodule.recurse=true`. Enabling this will allow certain commands to accept `--recurse-submodules` and certain commands that already accept `--recurse-submodules` will now consider branches. Defaults to false\",\n\t},\n\t{\n\t\tname: \"submodule.recurse\",\n\t\tdescription:\n\t\t\t\"A boolean indicating if commands should enable the `--recurse-submodules` option by default. Defaults to false\",\n\t},\n\t{\n\t\tname: \"tag.forceSignAnnotated\",\n\t\tdescription:\n\t\t\t\"A boolean to specify whether annotated tags created should be GPG signed. If `--annotate` is specified on the command line, it takes precedence over this option\",\n\t},\n\t{\n\t\tname: \"tag.gpgSign\",\n\t\tdescription:\n\t\t\t'A boolean to specify whether all tags should be GPG signed. Use of this option when running in an automated script can result in a large number of tags being signed. It is therefore convenient to use an agent to avoid typing your gpg passphrase several times. Note that this option doesn\\'t affect tag signing behavior enabled by \"-u <keyid>\" or \"--local-user=<keyid>\" options',\n\t},\n\t{\n\t\tname: \"tag.sort\",\n\t\tdescription:\n\t\t\t'This variable controls the sort ordering of tags when displayed by git-tag[1]. Without the \"--sort=<value>\" option provided, the value of this variable will be used as the default',\n\t},\n\t{\n\t\tname: \"tar.umask\",\n\t\tdescription:\n\t\t\t'This variable can be used to restrict the permission bits of tar archive entries. The default is 0002, which turns off the world write bit. The special value \"user\" indicates that the archiving user\\'s umask will be used instead. See umask(2) and git-archive[1]',\n\t},\n\t{\n\t\tname: \"trace2.configParams\",\n\t\tdescription:\n\t\t\t'A comma-separated list of patterns of \"important\" config settings that should be recorded in the trace2 output. For example, `core.*,remote.*.url` would cause the trace2 output to contain events listing each configured remote. May be overridden by the `GIT_TRACE2_CONFIG_PARAMS` environment variable. Unset by default',\n\t},\n\t{\n\t\tname: \"trace2.destinationDebug\",\n\t\tdescription:\n\t\t\t\"Boolean. When true Git will print error messages when a trace target destination cannot be opened for writing. By default, these errors are suppressed and tracing is silently disabled. May be overridden by the `GIT_TRACE2_DST_DEBUG` environment variable\",\n\t},\n\t{\n\t\tname: \"trace2.envVars\",\n\t\tdescription:\n\t\t\t'A comma-separated list of \"important\" environment variables that should be recorded in the trace2 output. For example, `GIT_HTTP_USER_AGENT,GIT_CONFIG` would cause the trace2 output to contain events listing the overrides for HTTP user agent and the location of the Git configuration file (assuming any are set). May be overridden by the `GIT_TRACE2_ENV_VARS` environment variable. Unset by default',\n\t},\n\t{\n\t\tname: \"trace2.eventBrief\",\n\t\tdescription:\n\t\t\t\"Boolean. When true `time`, `filename`, and `line` fields are omitted from event output. May be overridden by the `GIT_TRACE2_EVENT_BRIEF` environment variable. Defaults to false\",\n\t},\n\t{\n\t\tname: \"trace2.eventNesting\",\n\t\tdescription:\n\t\t\t\"Integer. Specifies desired depth of nested regions in the event output. Regions deeper than this value will be omitted. May be overridden by the `GIT_TRACE2_EVENT_NESTING` environment variable. Defaults to 2\",\n\t},\n\t{\n\t\tname: \"trace2.eventTarget\",\n\t\tdescription:\n\t\t\t\"This variable controls the event target destination. It may be overridden by the `GIT_TRACE2_EVENT` environment variable. The following table shows possible values\",\n\t},\n\t{\n\t\tname: \"trace2.maxFiles\",\n\t\tdescription:\n\t\t\t\"Integer. When writing trace files to a target directory, do not write additional traces if we would exceed this many files. Instead, write a sentinel file that will block further tracing to this directory. Defaults to 0, which disables this check\",\n\t},\n\t{\n\t\tname: \"trace2.normalBrief\",\n\t\tdescription:\n\t\t\t\"Boolean. When true `time`, `filename`, and `line` fields are omitted from normal output. May be overridden by the `GIT_TRACE2_BRIEF` environment variable. Defaults to false\",\n\t},\n\t{\n\t\tname: \"trace2.normalTarget\",\n\t\tdescription:\n\t\t\t\"This variable controls the normal target destination. It may be overridden by the `GIT_TRACE2` environment variable. The following table shows possible values\",\n\t},\n\t{\n\t\tname: \"trace2.perfBrief\",\n\t\tdescription:\n\t\t\t\"Boolean. When true `time`, `filename`, and `line` fields are omitted from PERF output. May be overridden by the `GIT_TRACE2_PERF_BRIEF` environment variable. Defaults to false\",\n\t},\n\t{\n\t\tname: \"trace2.perfTarget\",\n\t\tdescription:\n\t\t\t\"This variable controls the performance target destination. It may be overridden by the `GIT_TRACE2_PERF` environment variable. The following table shows possible values\",\n\t},\n\t{\n\t\tname: \"transfer.advertiseSID\",\n\t\tdescription:\n\t\t\t\"Boolean. When true, client and server processes will advertise their unique session IDs to their remote counterpart. Defaults to false\",\n\t},\n\t{\n\t\tname: \"transfer.credentialsInUrl\",\n\t\tdescription:\n\t\t\t\"A configured URL can contain plaintext credentials in the form `<protocol>://<user>:<password>@<domain>/<path>`. You may want to warn or forbid the use of such configuration (in favor of using git-credential[1]). This will be used on git-clone[1], git-fetch[1], git-push[1], and any other direct use of the configured URL\",\n\t},\n\t{\n\t\tname: \"transfer.fsckObjects\",\n\t\tdescription:\n\t\t\t\"When `fetch.fsckObjects` or `receive.fsckObjects` are not set, the value of this variable is used instead. Defaults to false\",\n\t},\n\t{\n\t\tname: \"transfer.hideRefs\",\n\t\tdescription:\n\t\t\t\"String(s) `receive-pack` and `upload-pack` use to decide which refs to omit from their initial advertisements. Use more than one definition to specify multiple prefix strings. A ref that is under the hierarchies listed in the value of this variable is excluded, and is hidden when responding to `git push` or `git fetch`. See `receive.hideRefs` and `uploadpack.hideRefs` for program-specific versions of this config\",\n\t},\n\t{\n\t\tname: \"transfer.unpackLimit\",\n\t\tdescription:\n\t\t\t\"When `fetch.unpackLimit` or `receive.unpackLimit` are not set, the value of this variable is used instead. The default value is 100\",\n\t},\n\t{\n\t\tname: \"uploadarchive.allowUnreachable\",\n\t\tdescription:\n\t\t\t'If true, allow clients to use `git archive --remote` to request any tree, whether reachable from the ref tips or not. See the discussion in the \"SECURITY\" section of git-upload-archive[1] for more details. Defaults to `false`',\n\t},\n\t{\n\t\tname: \"uploadpack.allowAnySHA1InWant\",\n\t\tdescription:\n\t\t\t\"Allow `upload-pack` to accept a fetch request that asks for any object at all. Defaults to `false`\",\n\t},\n\t{\n\t\tname: \"uploadpack.allowFilter\",\n\t\tdescription:\n\t\t\t\"If this option is set, `upload-pack` will support partial clone and partial fetch object filtering\",\n\t},\n\t{\n\t\tname: \"uploadpack.allowReachableSHA1InWant\",\n\t\tdescription:\n\t\t\t'Allow `upload-pack` to accept a fetch request that asks for an object that is reachable from any ref tip. However, note that calculating object reachability is computationally expensive. Defaults to `false`. Even if this is false, a client may be able to steal objects via the techniques described in the \"SECURITY\" section of the gitnamespaces[7] man page; it\\'s best to keep private data in a separate repository',\n\t},\n\t{\n\t\tname: \"uploadpack.allowRefInWant\",\n\t\tdescription:\n\t\t\t\"If this option is set, `upload-pack` will support the `ref-in-want` feature of the protocol version 2 `fetch` command. This feature is intended for the benefit of load-balanced servers which may not have the same view of what OIDs their refs point to due to replication delay\",\n\t},\n\t{\n\t\tname: \"uploadpack.allowTipSHA1InWant\",\n\t\tdescription:\n\t\t\t'When `uploadpack.hideRefs` is in effect, allow `upload-pack` to accept a fetch request that asks for an object at the tip of a hidden ref (by default, such a request is rejected). See also `uploadpack.hideRefs`. Even if this is false, a client may be able to steal objects via the techniques described in the \"SECURITY\" section of the gitnamespaces[7] man page; it\\'s best to keep private data in a separate repository',\n\t},\n\t{\n\t\tname: \"uploadpack.hideRefs\",\n\t\tdescription:\n\t\t\t\"This variable is the same as `transfer.hideRefs`, but applies only to `upload-pack` (and so affects only fetches, not pushes). An attempt to fetch a hidden ref by `git fetch` will fail. See also `uploadpack.allowTipSHA1InWant`\",\n\t},\n\t{\n\t\tname: \"uploadpack.keepAlive\",\n\t\tdescription:\n\t\t\t\"When `upload-pack` has started `pack-objects`, there may be a quiet period while `pack-objects` prepares the pack. Normally it would output progress information, but if `--quiet` was used for the fetch, `pack-objects` will output nothing at all until the pack data begins. Some clients and networks may consider the server to be hung and give up. Setting this option instructs `upload-pack` to send an empty keepalive packet every `uploadpack.keepAlive` seconds. Setting this option to 0 disables keepalive packets entirely. The default is 5 seconds\",\n\t},\n\t{\n\t\tname: \"uploadpack.packObjectsHook\",\n\t\tdescription:\n\t\t\t\"If this option is set, when `upload-pack` would run `git pack-objects` to create a packfile for a client, it will run this shell command instead. The `pack-objects` command and arguments it _would_ have run (including the `git pack-objects` at the beginning) are appended to the shell command. The stdin and stdout of the hook are treated as if `pack-objects` itself was run. I.e., `upload-pack` will feed input intended for `pack-objects` to the hook, and expects a completed packfile on stdout\",\n\t},\n\t{\n\t\tname: \"uploadpackfilter.<filter>.allow\",\n\t\tinsertValue: \"uploadpackfilter.{cursor}.allow\",\n\t\tdescription:\n\t\t\t\"Explicitly allow or ban the object filter corresponding to `<filter>`, where `<filter>` may be one of: `blob:none`, `blob:limit`, `object:type`, `tree`, `sparse:oid`, or `combine`. If using combined filters, both `combine` and all of the nested filter kinds must be allowed. Defaults to `uploadpackfilter.allow`\",\n\t},\n\t{\n\t\tname: \"uploadpackfilter.allow\",\n\t\tdescription:\n\t\t\t\"Provides a default value for unspecified object filters (see: the below configuration variable). If set to `true`, this will also enable all filters which get added in the future. Defaults to `true`\",\n\t},\n\t{\n\t\tname: \"uploadpackfilter.tree.maxDepth\",\n\t\tdescription:\n\t\t\t\"Only allow `--filter=tree:<n>` when `<n>` is no more than the value of `uploadpackfilter.tree.maxDepth`. If set, this also implies `uploadpackfilter.tree.allow=true`, unless this configuration variable had already been set. Has no effect if unset\",\n\t},\n\t{\n\t\tname: \"url.<base>.insteadOf\",\n\t\tinsertValue: \"url.{cursor}.insteadOf\",\n\t\tdescription:\n\t\t\t\"Any URL that starts with this value will be rewritten to start, instead, with <base>. In cases where some site serves a large number of repositories, and serves them with multiple access methods, and some users need to use different access methods, this feature allows people to specify any of the equivalent URLs and have Git automatically rewrite the URL to the best alternative for the particular user, even for a never-before-seen repository on the site. When more than one insteadOf strings match a given URL, the longest match is used\",\n\t},\n\t{\n\t\tname: \"url.<base>.pushInsteadOf\",\n\t\tinsertValue: \"url.{cursor}.pushInsteadOf\",\n\t\tdescription:\n\t\t\t\"Any URL that starts with this value will not be pushed to; instead, it will be rewritten to start with <base>, and the resulting URL will be pushed to. In cases where some site serves a large number of repositories, and serves them with multiple access methods, some of which do not allow push, this feature allows people to specify a pull-only URL and have Git automatically use an appropriate URL to push, even for a never-before-seen repository on the site. When more than one pushInsteadOf strings match a given URL, the longest match is used. If a remote has an explicit pushurl, Git will ignore this setting for that remote\",\n\t},\n\t{\n\t\tname: \"user.signingKey\",\n\t\tdescription:\n\t\t\t'If git-tag[1] or git-commit[1] is not selecting the key you want it to automatically when creating a signed tag or commit, you can override the default selection with this variable. This option is passed unchanged to gpg\\'s --local-user parameter, so you may specify a key using any method that gpg supports. If gpg.format is set to `ssh` this can contain the path to either your private ssh key or the public key when ssh-agent is used. Alternatively it can contain a public key prefixed with `key::` directly (e.g.: \"key::ssh-rsa XXXXXX identifier\"). The private key needs to be available via ssh-agent. If not set git will call gpg.ssh.defaultKeyCommand (e.g.: \"ssh-add -L\") and try to use the first key available. For backward compatibility, a raw key which begins with \"ssh-\", such as \"ssh-rsa XXXXXX identifier\", is treated as \"key::ssh-rsa XXXXXX identifier\", but this form is deprecated; use the `key::` form instead',\n\t},\n\t{\n\t\tname: \"user.useConfigOnly\",\n\t\tdescription:\n\t\t\t\"Instruct Git to avoid trying to guess defaults for `user.email` and `user.name`, and instead retrieve the values only from the configuration. For example, if you have multiple email addresses and would like to use a different one for each repository, then with this configuration option set to `true` in the global config along with a name, Git will prompt you to set up an email before making new commits in a newly cloned repository. Defaults to `false`\",\n\t},\n\t{\n\t\tname: \"versionsort.prereleaseSuffix\",\n\t\tdescription:\n\t\t\t\"Deprecated alias for `versionsort.suffix`. Ignored if `versionsort.suffix` is set\",\n\t\tdeprecated: true,\n\t\thidden: true,\n\t},\n\t{\n\t\tname: \"versionsort.suffix\",\n\t\tdescription:\n\t\t\t'Even when version sort is used in git-tag[1], tagnames with the same base version but different suffixes are still sorted lexicographically, resulting e.g. in prerelease tags appearing after the main release (e.g. \"1.0-rc1\" after \"1.0\"). This variable can be specified to determine the sorting order of tags with different suffixes',\n\t},\n\t{\n\t\tname: \"web.browser\",\n\t\tdescription:\n\t\t\t\"Specify a web browser that may be used by some commands. Currently only git-instaweb[1] and git-help[1] may use it\",\n\t},\n\t{\n\t\tname: \"worktree.guessRemote\",\n\t\tdescription:\n\t\t\t'If no branch is specified and neither `-b` nor `-B` nor `--detach` is used, then `git worktree add` defaults to creating a new branch from HEAD. If `worktree.guessRemote` is set to true, `worktree add` tries to find a remote-tracking branch whose name uniquely matches the new branch name. If such a branch exists, it is checked out and set as \"upstream\" for the new branch. If no such match can be found, it falls back to creating a new branch from the current HEAD',\n\t},\n];\n\nconst addOptions: Fig.Option[] = [\n\t{\n\t\tname: [\"-n\", \"--dry-run\"],\n\t\tdescription:\n\t\t\t\"Don’t actually add the file(s), just show if they exist and/or will be ignored\",\n\t},\n\t{ name: [\"-v\", \"--verbose\"], description: \"Be verbose\" },\n\t{\n\t\tname: [\"-f\", \"--force\"],\n\t\tdescription: \"Allow adding otherwise ignored files\",\n\t},\n\t{\n\t\tname: [\"-i\", \"--interactive\"],\n\t\tdescription:\n\t\t\t\"Add modified contents in the working tree interactively to the index. Optional path arguments may be supplied to limit operation to a subset of the working tree. See “Interactive mode” for details\",\n\t},\n\t{\n\t\tname: [\"-p\", \"--patch\"],\n\t\tdescription:\n\t\t\t\"Interactively choose hunks of patch between the index and the work tree and add them to the index. This gives the user a chance to review the difference before adding modified contents to the index\",\n\t},\n\t{\n\t\tname: [\"-e\", \"--edit\"],\n\t\tdescription:\n\t\t\t\"Open the diff vs. the index in an editor and let the user edit it. After the editor was closed, adjust the hunk headers and apply the patch to the index\",\n\t},\n\t{\n\t\tname: [\"-u\", \"--update\"],\n\t\tdescription:\n\t\t\t\"Update the index just where it already has an entry matching <pathspec>. This removes as well as modifies index entries to match the working tree, but adds no new files\",\n\t},\n\t{\n\t\tname: [\"-A\", \"--all\", \"--no-ignore-removal\"],\n\t\tdescription:\n\t\t\t\"Update the index not only where the working tree has a file matching <pathspec> but also where the index already has an entry. This adds, modifies, and removes index entries to match the working tree\",\n\t},\n\t{\n\t\tname: [\"--no-all\", \"--ignore-removal\"],\n\t\tdescription:\n\t\t\t\"Update the index by adding new files that are unknown to the index and files modified in the working tree, but ignore files that have been removed from the working tree. This option is a no-op when no <pathspec> is used\",\n\t},\n\t{\n\t\tname: [\"-N\", \"--intent-to-add\"],\n\t\tdescription:\n\t\t\t\"Record only the fact that the path will be added later. An entry for the path is placed in the index with no content. This is useful for, among other things, showing the unstaged content of such files with git diff and committing them with git commit -a\",\n\t},\n\t{\n\t\tname: \"--refresh\",\n\t\tdescription:\n\t\t\t\"Don’t add the file(s), but only refresh their stat() information in the index\",\n\t},\n\t{\n\t\tname: \"--ignore-errors\",\n\t\tdescription:\n\t\t\t\"If some files could not be added because of errors indexing them, do not abort the operation, but continue adding the others. The command shall still exit with non-zero status. The configuration variable add.ignoreErrors can be set to true to make this the default behaviour\",\n\t},\n\t{\n\t\tname: \"--ignore-missing\",\n\t\tdescription:\n\t\t\t\"This option can only be used together with --dry-run. By using this option the user can check if any of the given files would be ignored, no matter if they are already present in the work tree or not\",\n\t},\n\t{\n\t\tname: \"--no-warn-embedded-repo\",\n\t\tdescription:\n\t\t\t\"By default, git add will warn when adding an embedded repository to the index without using git submodule add to create an entry in .gitmodules. This option will suppress the warning (e.g., if you are manually performing operations on submodules)\",\n\t},\n\t{\n\t\tname: \"--renormalize\",\n\t\tdescription:\n\t\t\t\"Apply the 'clean' process freshly to all tracked files to forcibly add them again to the index. This is useful after changing core.autocrlf configuration or the text attribute in order to correct files added with wrong CRLF/LF line endings. This option implies -u\",\n\t},\n\t{\n\t\tname: \"--chmod\",\n\t\tdescription:\n\t\t\t\"Override the executable bit of the added files. The executable bit is only changed in the index, the files on disk are left unchanged\",\n\t\trequiresSeparator: true,\n\t\targs: {\n\t\t\tsuggestions: [\"+x\", \"-x\"],\n\t\t},\n\t},\n\t{\n\t\tname: \"--pathspec-from-file\",\n\t\tdescription:\n\t\t\t\"Pathspec is passed in <file> instead of commandline args. If <file> is exactly - then standard input is used. Pathspec elements are separated by LF or CR/LF. Pathspec elements can be quoted as explained for the configuration variable core.quotePath (see git-config[1]). See also --pathspec-file-nul and global --literal-pathspecs\",\n\t\targs: {\n\t\t\tname: \"File\",\n\t\t\tdescription: \"File with pathspec\",\n\t\t\ttemplate: \"filepaths\",\n\t\t},\n\t},\n\t{\n\t\tname: \"--pathspec-file-nul\",\n\t\tdescription:\n\t\t\t\"Only meaningful with --pathspec-from-file. Pathspec elements are separated with NUL character and all other characters are taken literally (including newlines and quotes)\",\n\t},\n\t{\n\t\tname: \"--\",\n\t\tdescription:\n\t\t\t\"This option can be used to separate command-line options from the list of files\",\n\t},\n];\n\nconst headSuggestions = [\n\t{\n\t\tname: \"HEAD\",\n\t\ticon: \"🔻\",\n\t\tdescription: \"The most recent commit\",\n\t},\n\t{\n\t\tname: \"HEAD~<N>\",\n\t\tdescription: \"A specific number of commits\",\n\t\tinsertValue: \"HEAD~\",\n\t},\n];\n\n/** Git finds these commands as \"git-<name>\" on your PATH */\nconst optionalCommands: Record<string, Omit<Fig.Subcommand, \"name\">> = {\n\topen: {\n\t\tdescription: \"Open in your browser\",\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"-c\", \"--commit\"],\n\t\t\t\tdescription: \"Open current commit\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"-i\", \"--issue\"],\n\t\t\t\tdescription: \"Open issues page\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"-s\", \"--suffix\"],\n\t\t\t\tdescription: \"Append this suffix\",\n\t\t\t\targs: {\n\t\t\t\t\tname: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"-p\", \"--print\"],\n\t\t\t\tdescription: \"Just print the URL\",\n\t\t\t},\n\t\t],\n\t},\n\trecent: {\n\t\tdescription: \"Show recent local branches\",\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: \"-n\",\n\t\t\t\tdescription: \"Specify a number of branches to show\",\n\t\t\t\targs: {\n\t\t\t\t\tname: \"int\",\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tflow: {\n\t\tdescription: \"Extensions to follow Vincent Driessen's branching model\",\n\t\tloadSpec: \"git-flow\",\n\t},\n};\n\nconst daemonServices: Fig.Suggestion[] = [\n\t{\n\t\tname: \"upload-pack\",\n\t\tdescription:\n\t\t\t\"This serves git fetch-pack and git ls-remote clients. It is enabled by default, but a repository can disable it by setting daemon.uploadpack configuration item to false\",\n\t},\n\t{\n\t\tname: \"upload-archive\",\n\t\tdescription:\n\t\t\t\"This serves git archive --remote. It is disabled by default, but a repository can enable it by setting daemon.uploadarch configuration item to true\",\n\t},\n\t{\n\t\tname: \"receive-pack\",\n\t\tdescription:\n\t\t\t\"This serves git send-pack clients, allowing anonymous push. It is disabled by default, as there is no authentication in the protocol (in other words, anybody can push anything into the repository, including removal of refs). This is solely meant for a closed LAN setting where everybody is friendly. This service can be enabled by setting daemon.receivepack configuration item to true\",\n\t},\n];\n\nconst completionSpec: Fig.Spec = {\n\tname: \"git\",\n\tdescription: \"The stupid content tracker\",\n\tgenerateSpec: async (_, executeShellCommand) => {\n\t\tconst { stdout } = await executeShellCommand({\n\t\t\tcommand: \"git\",\n\t\t\targs: [\"help\", \"-a\"],\n\t\t});\n\t\tconst lines = stdout.trim().split(\"\\n\");\n\t\tconst start = lines.findIndex((val) => val.match(/external commands/i));\n\t\tconst commands: string[] = [];\n\t\tfor (let i = start + 1; i < lines.length; i += 1) {\n\t\t\tconst line = lines[i].trim();\n\t\t\tif (!line) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst command = line.split(/\\s+/)[0];\n\t\t\tcommands.push(command);\n\t\t}\n\t\treturn {\n\t\t\tname: \"git\",\n\t\t\tsubcommands: commands.map((name) => ({\n\t\t\t\tname,\n\t\t\t\t...(optionalCommands[name] ?? { description: `Run git-${name}` }),\n\t\t\t})),\n\t\t};\n\t},\n\targs: {\n\t\tname: \"alias\",\n\t\tdescription: \"Custom user defined git alias\",\n\t\tparserDirectives: {\n\t\t\talias: async (token, exec) => {\n\t\t\t\tconst { stdout, status } = await exec({\n\t\t\t\t\tcommand: \"git\",\n\t\t\t\t\targs: [\"config\", \"--get\", `alias.${token}`],\n\t\t\t\t});\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\tthrow new Error(\"Failed parsing alias\");\n\t\t\t\t}\n\t\t\t\treturn stdout;\n\t\t\t},\n\t\t},\n\t\tisOptional: true,\n\t\tgenerators: gitGenerators.aliases,\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"--version\",\n\t\t\tdescription: \"Output version\",\n\t\t},\n\t\t{\n\t\t\tname: \"--help\",\n\t\t\tdescription: \"Output help\",\n\t\t},\n\t\t{\n\t\t\tname: \"-C\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t\tdescription: \"Run as if git was started in <path>\",\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tinsertValue: \"-c {cursor}\",\n\t\t\tdescription: \"Pass a config parameter to the command\",\n\t\t\targs: {\n\t\t\t\tname: \"name=value\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--exec-path\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\tisOptional: true,\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t\tdescription: \"Get or set GIT_EXEC_PATH for core Git programs\",\n\t\t},\n\t\t{\n\t\t\tname: \"--html-path\",\n\t\t\tdescription: \"Print Git’s HTML documentation path\",\n\t\t},\n\t\t{\n\t\t\tname: \"--man-path\",\n\t\t\tdescription: \"Print the manpath for this version of Git\",\n\t\t},\n\t\t{\n\t\t\tname: \"--info-path\",\n\t\t\tdescription: \"Print the info path documenting this version of Git\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-p\", \"--paginate\"],\n\t\t\tdescription: \"Pipe output into `less` or custom $PAGER\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-pager\",\n\t\t\tdescription: \"Do not pipe Git output into a pager\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-replace-objects\",\n\t\t\tdescription: \"Do not use replacement refs\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-optional-locks\",\n\t\t\tdescription: \"Do not perform optional operations that require lock files\",\n\t\t},\n\t\t{\n\t\t\tname: \"--bare\",\n\t\t\tdescription: \"Treat the repository as a bare repository\",\n\t\t},\n\t\t{\n\t\t\tname: \"--git-dir\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t\tdescription: \"Set the path to the repository dir (`.git`)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--work-tree\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t\tdescription: \"Set working tree path\",\n\t\t},\n\t\t{\n\t\t\tname: \"--namespace\",\n\t\t\targs: {\n\t\t\t\tname: \"name\",\n\t\t\t},\n\t\t\tdescription: \"Set the Git namespace\",\n\t\t},\n\t],\n\tsubcommands: [\n\t\t{\n\t\t\tname: \"archive\",\n\t\t\tdescription: \"Create an archive of files from a named tree\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"tree-ish\",\n\t\t\t\t\tgenerators: gitGenerators.treeish,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"path\",\n\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\tisVariadic: true,\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--format\",\n\t\t\t\t\tdescription: \"Archive format\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"fmt\",\n\t\t\t\t\t\tsuggestions: [\"tar\", \"zip\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prefix\",\n\t\t\t\t\tdescription: \"Prepend prefix to each pathname in the archive\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"prefix\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--add-file\",\n\t\t\t\t\tdescription: \"Add untracked file to archive\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-o\", \"--output\"],\n\t\t\t\t\tdescription: \"Write the archive to this file\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--worktree-attributes\",\n\t\t\t\t\tdescription: \"Read .gitattributes in working directory\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Report archived files on stderr\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-NUM\",\n\t\t\t\t\tinsertValue: \"-\",\n\t\t\t\t\tdescription: \"Set compression level\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-l\", \"--list\"],\n\t\t\t\t\tdescription: \"List supported archive formats\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--remote\",\n\t\t\t\t\tdescription: \"Retrieve the archive from remote repository <repo>\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"repo\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--exec\",\n\t\t\t\t\tdescription: \"Path to the remote git-upload-archive command\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"command\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"blame\",\n\t\t\targs: {\n\t\t\t\tname: \"file\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--incremental\",\n\t\t\t\t\tdescription: \"Show blame entries as we find them, incrementally\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-b\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not show object names of boundary commits (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--root\",\n\t\t\t\t\tdescription: \"Do not treat root commits as boundaries (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-stats\",\n\t\t\t\t\tdescription: \"Show work cost statistics\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription: \"Force progress reporting\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--score-debug\",\n\t\t\t\t\tdescription: \"Show output score for blame entries\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--show-name\"],\n\t\t\t\t\tdescription: \"Show original filename (Default: auto)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--show-number\"],\n\t\t\t\t\tdescription: \"Show original linenumber (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--porcelain\"],\n\t\t\t\t\tdescription: \"Show in a format designed for machine consumption\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--line-porcelain\",\n\t\t\t\t\tdescription: \"Show porcelain format with per-line commit information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-c\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the same output mode as git-annotate (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-t\",\n\t\t\t\t\tdescription: \"Show raw timestamp (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-l\",\n\t\t\t\t\tdescription: \"Show long commit SHA1 (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-s\",\n\t\t\t\t\tdescription: \"Suppress author name and timestamp (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-e\", \"--show-email\"],\n\t\t\t\t\tdescription: \"Show author email instead of name (Default: off)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-w\",\n\t\t\t\t\tdescription: \"Ignore whitespace differences\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-rev\",\n\t\t\t\t\tdescription: \"Ignore <rev> when blaming\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"rev\",\n\t\t\t\t\t\tgenerators: gitGenerators.revs,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-revs-file\",\n\t\t\t\t\tdescription: \"Ignore revisions from <file>\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--color-lines\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Color redundant metadata from previous line differently\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--color-by-age\", description: \"Color lines by age\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--minimal\",\n\t\t\t\t\tdescription: \"Spend extra cycles to find better match\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-S\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use revisions from <file> instead of calling git-rev-list\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--contents\",\n\t\t\t\t\tdescription: \"Use <file>'s contents as the final image\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-C\",\n\t\t\t\t\tinsertValue: \"-C{cursor}\",\n\t\t\t\t\tdescription: \"Find line copies within and across files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-M\",\n\t\t\t\t\tinsertValue: \"-M{cursor}\",\n\t\t\t\t\tdescription: \"Find line movements within and across files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-L\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Process only line range <start>,<end> or function :<funcname>\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"start,end\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--abbrev\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\tdescription: \"Use <n> digits to display object names\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"commit\",\n\t\t\tdescription: \"Record changes to the repository\",\n\t\t\targs: {\n\t\t\t\tname: \"pathspec\",\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--message\"],\n\t\t\t\t\t// insertValue: \"-m '{cursor}'\",\n\t\t\t\t\tdescription: \"Use the given message as the commit message\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t\tgenerators: ai({\n\t\t\t\t\t\t\tname: \"git commit -m\",\n\t\t\t\t\t\t\tprompt: async ({ executeCommand }: any) => {\n\t\t\t\t\t\t\t\tconst { stdout } = await executeCommand({\n\t\t\t\t\t\t\t\t\tcommand: \"git\",\n\t\t\t\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t\t\t\t\"log\",\n\t\t\t\t\t\t\t\t\t\t\"--pretty=format:%s\",\n\t\t\t\t\t\t\t\t\t\t\"--abbrev-commit\",\n\t\t\t\t\t\t\t\t\t\t\"--max-count=20\",\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t'Generate a git commit message summary based on this git diff, the \"summary\" must be no more ' +\n\t\t\t\t\t\t\t\t\t\"than 70-75 characters, and it must describe both what the patch changes, as well as why the \" +\n\t\t\t\t\t\t\t\t\t`patch might be necessary.\\n\\nHere are some examples from the repo:\\n${stdout}`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessage: async ({ executeCommand }: any) =>\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tawait executeCommand({\n\t\t\t\t\t\t\t\t\t\tcommand: \"git\",\n\t\t\t\t\t\t\t\t\t\targs: [\"diff\", \"--staged\"],\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t).stdout,\n\t\t\t\t\t\t\tsplitOn: \"\\n\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-a\", \"--all\"],\n\t\t\t\t\tdescription: \"Stage all modified and deleted paths\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-am\",\n\t\t\t\t\tinsertValue: \"-am '{cursor}'\",\n\t\t\t\t\tdescription: \"Stage all and use given text as commit message\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Show unified diff of all file changes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--patch\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the interactive patch selection interface to chose which changes to commi\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-C\", \"--reuse-message\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Take an existing commit object, and reuse the log message and the authorship\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-c\", \"--reedit-message\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Like -C, but with -c the editor is invoked, so that the user can further edit\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--fixup\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Construct a commit message for use with rebase --autosquash. The commit messa\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--squash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Construct a commit message for use with rebase --autosquash. The commit messa\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--reset-author\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When used with -C/-c/--amend options, or when committing after a conflicting\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--short\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When doing a dry-run, give the output in the short-format. See git-status[1]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--branch\",\n\t\t\t\t\tdescription: \"Show the branch and tracking info even in short-format\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--porcelain\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When doing a dry-run, give the output in a porcelain-ready format. See git-st\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--long\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When doing a dry-run, give the output in the long-format. Implies --dry-run\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-z\", \"--null\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When showing short or porcelain status output, print the filename verbatim an\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-F\", \"--file\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Take the commit message from the given file. Use - to read the message from t\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--author\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Override the commit author. Specify an explicit author using the standard A U\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"author\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--date\",\n\t\t\t\t\tdescription: \"Override the author date used in the commit\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"date\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-t\", \"--template\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When editing the commit message, start the editor with the contents in the gi\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--signoff\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Add a Signed-off-by trailer by the committer at the end of the commit log mes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-signoff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Don't add a Signed-off-by trailer by the committer at the end of the commit l\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--no-verify\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option bypasses the pre-commit and commit-msg hooks. See also githooks[5]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-empty\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Usually recording a commit that has the exact same tree as its sole parent co\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-empty-message\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Like --allow-empty this command is primarily for use by foreign SCM interface\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cleanup\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option determines how the supplied commit message should be cleaned up b\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Determines how the supplied commit messaged should be cleaned up before committing\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"strip\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Strip leading and trailing empty lines, trailing whitepace, commentary and collapse consecutive empty lines\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"whitespace\",\n\t\t\t\t\t\t\t\tdescription: \"Same as strip except #commentary is not removed\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"verbatim\",\n\t\t\t\t\t\t\t\tdescription: \"Do not change the message at all\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"scissors\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Same as whitespace except that everything from (and including) the line found below is truncated\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"default\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Same as strip if the message is to be edited. Otherwise whitespace\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-e\", \"--edit\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The message taken from file with -F, command line with -m, and from commit ob\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-edit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the selected commit message without launching an editor. For example, git\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--amend\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Replace the tip of the current branch by creating a new commit. The recorded\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-post-rewrite\",\n\t\t\t\t\tdescription: \"Bypass the post-rewrite hook\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--include\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Before making a commit out of staged contents so far, stage the contents of p\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-o\", \"--only\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Make a commit by taking the updated working tree contents of the paths specif\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-from-file\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pathspec is passed in instead of commandline args. If is exactly - then stand\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-file-nul\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Only meaningful with --pathspec-from-file. Pathspec elements are separated wi\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-u\", \"--untracked-files\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show untracked files. The mode parameter is optional (defaults to all), and i\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tsuggestions: [\"no\", \"normal\", \"all\"],\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Suppress commit summary message\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--dry-run\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not create a commit, but show a list of paths that are to be committed, pa\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--status\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Include the output of git-status[1] in the commit message template when using\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-status\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not include the output of git-status[1] in the commit message template whe\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-S\", \"--gpg-sign\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"GPG-sign commits. The keyid argument is optional and defaults to the committe\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"keyid\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-gpg-sign\",\n\t\t\t\t\tdescription: \"Dont GPG-sign commits\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\tdescription: \"Do not interpret any more arguments as options\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"config\",\n\t\t\tdescription: \"Change Git configuration\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--local\",\n\t\t\t\t\tdescription: \"Default: write to the repository .git/config file\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"user.name\",\n\t\t\t\t\t\t\t\tdescription: \"Set config for username\",\n\t\t\t\t\t\t\t\tinsertValue: \"user.name '{cursor}'\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"user.email\",\n\t\t\t\t\t\t\t\tdescription: \"Set config for email\",\n\t\t\t\t\t\t\t\tinsertValue: \"user.email '{cursor}'\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--global\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For writing options: write to global ~/.gitconfig file rather than the repository .git/config\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--replace-all\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Default behavior is to replace at most one line. This replaces all lines matc\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--add\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Adds a new line to the option without altering any existing values. This is t\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--get\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Get the value for a given key (optionally filtered by a regex matching the va\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--get-all\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Like get, but returns all values for a multi-valued key\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--get-regexp\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Like --get-all, but interprets the name as a regular expression and writes ou\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"regexp\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--get-urlmatch\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When given a two-part name section.key, the value for section..key whose part\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"url\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--system\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For writing options: write to system-wide $(prefix)/etc/gitconfig rather than\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--worktree\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Similar to --local except that.git/config.worktree is read from or written to\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--file\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the given config file instead of the one specified by GIT_CONFIG\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"config-file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--blob\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Similar to --file but use the given blob instead of a file. E.g. you can use\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"blob\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--remove-section\",\n\t\t\t\t\tdescription: \"Remove the given section from the configuration file\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--rename-section\",\n\t\t\t\t\tdescription: \"Rename the given section to a new name\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unset\",\n\t\t\t\t\tdescription: \"Remove the line matching the key from config file\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unset-all\",\n\t\t\t\t\tdescription: \"Remove all lines matching the key from config file\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-l\", \"--list\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List all variables set in config file, along with their values\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--fixed-value\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When used with the value-pattern argument, treat value-pattern as an exact st\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--type\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Git config will ensure that any input or output is valid under the given type\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"type\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"bool\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"bool-or-int\",\n\t\t\t\t\t\t\t\"path\",\n\t\t\t\t\t\t\t\"expiry-date\",\n\t\t\t\t\t\t\t\"color\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-type\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Un-sets the previously set type specifier (if one was previously set). This o\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-z\", \"--null\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For all options that output values and/or keys, always end values with the nu\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--name-only\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Output only the names of config variables for --list or --get-regexp\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-origin\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Augment the output of all queried config options with the origin type (file\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-scope\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Similar to --show-origin in that it augments the output of all queried config\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--get-colorbool\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Find the color setting for name (e.g. color.diff) and output \"true\" or \"false',\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--get-color\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Find the color configured for name (e.g. color.diff.new) and output it as the\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"default\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-e\", \"--edit\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Opens an editor to modify the specified config file; either --system, --globa\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--includes\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Respect include.* directives in config files when looking up values. Defaults\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-includes\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Respect include.* directives in config files when looking up values. Defaults\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--default\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When using --get, and the requested variable is not found, behave as if were\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"value\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"setting\",\n\t\t\t\t\t// All git config keys are valid\n\t\t\t\t\tsuggestCurrentToken: true,\n\t\t\t\t\tsuggestions: configSuggestions.map((suggestion) => ({\n\t\t\t\t\t\t...suggestion,\n\t\t\t\t\t\ticon: \"⚙️\",\n\t\t\t\t\t})),\n\t\t\t\t\tgenerators: {\n\t\t\t\t\t\tscript: [\"git\", \"config\", \"--get-regexp\", \".*\"],\n\t\t\t\t\t\t// This is inefficient but it doesn't need to be faster - most\n\t\t\t\t\t\t// of the time, you don't need to run `git config` commands,\n\t\t\t\t\t\t// and when you do it's typically one or two at most.\n\t\t\t\t\t\tpostProcess: (out) =>\n\t\t\t\t\t\t\tout\n\t\t\t\t\t\t\t\t.trim()\n\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t.map((line) => line.slice(0, line.indexOf(\" \")))\n\t\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t\t(line) =>\n\t\t\t\t\t\t\t\t\t\tline.startsWith(\"alias.\") ||\n\t\t\t\t\t\t\t\t\t\tline.startsWith(\"branch.\") ||\n\t\t\t\t\t\t\t\t\t\tline.startsWith(\"remote.\") ||\n\t\t\t\t\t\t\t\t\t\t!configSuggestions.find(({ name }) => line === name)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map((name) => ({ name, icon: \"⚙️\" })),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"value\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"rebase\",\n\t\t\tdescription: \"Reapply commits on top of another base tip\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--onto\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Starting point at which to create the new commits. If the --onto option is not specified, the starting point is <upstream>. May be any valid commit, and not just an existing branch name. As a special case, you may use 'A...B' as a shortcut for the merge base of A and B if there is exactly one merge base. You can leave out at most one of A and B, in which case it defaults to HEAD\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"newbase\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--keep-base\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Set the starting point at which to create the new commits to the merge base of <upstream> <branch>. Running git rebase --keep-base <upstream> <branch> is equivalent to running git rebase --onto <upstream>…​ <upstream>. This option is useful in the case where one is developing a feature on top of an upstream branch. While the feature is being worked on, the upstream branch may advance and it may not be the best idea to keep rebasing on top of the upstream but to keep the base commit as-is. Although both this option and --fork-point find the merge base between <upstream> and <branch>, this option uses the merge base as the starting point on which new commits will be created, whereas --fork-point uses the merge base to determine the set of commits which will be rebased\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--continue\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Restart the rebasing process after having resolved a merge conflict\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--abort\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Abort the rebase operation and reset HEAD to the original branch. If <branch> was provided when the rebase operation was started, then HEAD will be reset to <branch>. Otherwise HEAD will be reset to where it was when the rebase operation was started\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--quit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Abort the rebase operation but HEAD is not reset back to the original branch. The index and working tree are also left unchanged as a result. If a temporary stash entry was created using --autostash, it will be saved to the stash list\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--apply\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use applying strategies to rebase (calling git-am internally). This option may become a no-op in the future once the merge backend handles everything the apply one does\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--empty\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"How to handle commits that are not empty to start and are not clean cherry-picks of any upstream commit, but which become empty after rebasing (because they contain a subset of already upstream changes). With drop (the default), commits that become empty are dropped. With keep, such commits are kept. With ask (implied by --interactive), the rebase will halt when an empty commit is applied allowing you to choose whether to drop it, edit files more, or just commit the empty changes. Other options, like --exec, will use the default of drop unless -i/--interactive is explicitly specified. Note that commits which start empty are kept (unless --no-keep-empty is specified), and commits which are clean cherry-picks (as determined by git log --cherry-mark ...) are detected and dropped as a preliminary step (unless --reapply-cherry-picks is passed)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"drop\", \"keep\", \"ask\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-keep-empty\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not keep commits that start empty before the rebase (i.e. that do not change anything from its parent) in the result. The default is to keep commits which start empty, since creating such commits requires passing the --allow-empty override flag to git commit, signifying that a user is very intentionally creating such a commit and thus wants to keep it. Usage of this flag will probably be rare, since you can get rid of commits that start empty by just firing up an interactive rebase and removing the lines corresponding to the commits you don’t want. This flag exists as a convenient shortcut, such as for cases where external tools generate many empty commits and you want them all removed. For commits which do not start empty but become empty after rebasing, see the --empty flag\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--keep-empty\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Keep commits that start empty before the rebase (i.e. that do not change anything from its parent) in the result. The default is to keep commits which start empty, since creating such commits requires passing the --allow-empty override flag to git commit, signifying that a user is very intentionally creating such a commit and thus wants to keep it. Usage of this flag will probably be rare, since you can get rid of commits that start empty by just firing up an interactive rebase and removing the lines corresponding to the commits you don’t want. This flag exists as a convenient shortcut, such as for cases where external tools generate many empty commits and you want them all removed. For commits which do not start empty but become empty after rebasing, see the --empty flag\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--reapply-cherry-picks\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Reapply all clean cherry-picks of any upstream commit instead of preemptively dropping them. (If these commits then become empty after rebasing, because they contain a subset of already upstream changes, the behavior towards them is controlled by the --empty flag). By default (or if --no-reapply-cherry-picks is given), these commits will be automatically dropped. Because this necessitates reading all upstream commits, this can be expensive in repos with a large number of upstream commits that need to be read. --reapply-cherry-picks allows rebase to forgo reading all upstream commits, potentially improving performance\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-reapply-cherry-picks\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not reapply all clean cherry-picks of any upstream commit instead of preemptively dropping them\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-empty-message\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"No-op. Rebasing commits with an empty message used to fail and this option would override that behavior, allowing commits with empty messages to be rebased. Now commits with an empty message do not cause rebasing to halt\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--skip\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Restart the rebasing process by skipping the current patch\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--edit-todo\",\n\t\t\t\t\tdescription: \"Edit the todo list during an interactive rebase\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-current-patch\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show the current patch in an interactive rebase or when rebase is stopped because of conflicts. This is the equivalent of git show REBASE_HEAD\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--merge\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use merging strategies to rebase. When the recursive (default) merge strategy is used, this allows rebase to be aware of renames on the upstream side. This is the default. Note that a rebase merge works by replaying each commit from the working branch on top of the <upstream> branch. Because of this, when a merge conflict happens, the side reported as ours is the so-far rebased series, starting with <upstream>, and theirs is the working branch. In other words, the sides are swapped\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--strategy\"],\n\t\t\t\t\tisRepeatable: true,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the given merge strategy. If there is no -s option git merge-recursive is used instead. This implies --merge. Because git rebase replays each commit from the working branch on top of the <upstream> branch using the given strategy, using the ours strategy simply empties all patches from the <branch>, which makes little sense\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"strategy\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tsuggestions: [\"resolve\", \"recursive\", \"octopus\", \"ours\", \"subtree\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-X\", \"--strategy-option\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pass the <strategy-option> through to the merge strategy. This implies --merge and, if no strategy has been specified, -s recursive. Note the reversal of ours and theirs as noted above for the -m option\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"ours\",\n\t\t\t\t\t\t\t\"theirs\",\n\t\t\t\t\t\t\t\"patience\",\n\t\t\t\t\t\t\t\"diff-algorithm\",\n\t\t\t\t\t\t\t\"diff-algorithm=patience\",\n\t\t\t\t\t\t\t\"diff-algorithm=minimal\",\n\t\t\t\t\t\t\t\"diff-algorithm=histogram\",\n\t\t\t\t\t\t\t\"diff-algorithm=myers\",\n\t\t\t\t\t\t\t\"ignore-space-change\",\n\t\t\t\t\t\t\t\"ignore-all-space\",\n\t\t\t\t\t\t\t\"ignore-space-at-eol\",\n\t\t\t\t\t\t\t\"ignore-cr-at-eol\",\n\t\t\t\t\t\t\t\"renormalize\",\n\t\t\t\t\t\t\t\"no-renormalize\",\n\t\t\t\t\t\t\t\"no-renames\",\n\t\t\t\t\t\t\t\"find-renames\",\n\t\t\t\t\t\t\t\"subtree\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--rerere-autoupdate\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-rerere-autoupdate\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-S\", \"--gpg-sign\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"GPG-sign commits. The keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space. --no-gpg-sign is useful to countermand both commit.gpgSign configuration variable, and earlier --gpg-sign\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"keyid\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-gpg-sign\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not GPG-sign commits.--no-gpg-sign is useful to countermand both commit.gpgSign configuration variable, and earlier --gpg-sign\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Be quiet. Implies --no-stat\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Be verbose. Implies --stat\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--stat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show a diffstat of what changed upstream since the last rebase. The diffstat is also controlled by the configuration option rebase.stat\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--no-stat\"],\n\t\t\t\t\tdescription: \"Do not show a diffstat as part of the rebase process\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-verify\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option bypasses the pre-rebase hook. See also githooks[5]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--verify\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allows the pre-rebase hook to run, which is the default. This option can be used to override --no-verify. See also githooks[5]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-C\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Ensure at least <n> lines of surrounding context match before and after each change. When fewer lines of surrounding context exist they all must match. By default no context is ever ignored. Implies --apply\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--no-ff\", \"--force-rebase\", \"-f\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Individually replay all rebased commits instead of fast-forwarding over the unchanged ones. This ensures that the entire history of the rebased branch is composed of new commits. You may find this helpful after reverting a topic branch merge, as this option recreates the topic branch with fresh commits so it can be remerged successfully without needing to 'revert the reversion' (see the revert-a-faulty-merge How-To for details)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--fork-point\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use reflog to find a better common ancestor between <upstream> and <branch> when calculating which commits have been introduced by <branch>. When --fork-point is active, fork_point will be used instead of <upstream> to calculate the set of commits to rebase, where fork_point is the result of git merge-base --fork-point <upstream> <branch> command (see git-merge-base[1]). If fork_point ends up being empty, the <upstream> will be used as a fallback. If <upstream> is given on the command line, then the default is --no-fork-point, otherwise the default is --fork-point. If your branch was based on <upstream> but <upstream> was rewound and your branch contains commits which were dropped, this option can be used with --keep-base in order to drop those commits from your branch\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-fork-point\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not use reflog to find a better common ancestor between <upstream> and <branch> when calculating which commits have been introduced by <branch>. When --fork-point is active, fork_point will be used instead of <upstream> to calculate the set of commits to rebase, where fork_point is the result of git merge-base --fork-point <upstream> <branch> command (see git-merge-base[1]). If fork_point ends up being empty, the <upstream> will be used as a fallback. If <upstream> is given on the command line, then the default is --no-fork-point, otherwise the default is --fork-point. If your branch was based on <upstream> but <upstream> was rewound and your branch contains commits which were dropped, this option can be used with --keep-base in order to drop those commits from your branch\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-whitespace\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Ignore whitespace differences when trying to reconcile differences. Currently, each backend implements an approximation of this behavior: apply backend: When applying a patch, ignore changes in whitespace in context lines. Unfortunately, this means that if the 'old' lines being replaced by the patch differ only in whitespace from the existing file, you will get a merge conflict instead of a successful patch application. merge backend: Treat lines with only whitespace changes as unchanged when merging. Unfortunately, this means that any patch hunks that were intended to modify whitespace and nothing else will be dropped, even if the other side had no changes that conflicted\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--whitespace\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This flag is passed to the git apply program (see git-apply[1]) that applies the patch. Implies --apply\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--committer-date-is-author-date\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of using the current time as the committer date, use the author date of the commit being rebased as the committer date. This option implies --force-rebase\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--ignore-date\", \"--reset-author-date\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of using the author date of the original commit, use the current time as the author date of the rebased commit. This option implies --force-rebase\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--signoff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Add a Signed-off-by trailer to all the rebased commits. Note that if --interactive is given then only commits marked to be picked, edited or reworded will have the trailer added\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--interactive\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Make a list of the commits which are about to be rebased. Let the user edit that list before rebasing. This mode can also be used to split commits (see SPLITTING COMMITS below). The commit list format can be changed by setting the configuration option rebase.instructionFormat. A customized instruction format will automatically have the long commit hash prepended to the format\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-r\", \"--rebase-merges\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, a rebase will simply drop merge commits from the todo list, and put the rebased commits into a single, linear branch. With --rebase-merges, the rebase will instead try to preserve the branching structure within the commits that are to be rebased, by recreating the merge commits. Any resolved merge conflicts or manual amendments in these merge commits will have to be resolved/re-applied manually. By default, or when no-rebase-cousins was specified, commits which do not have <upstream> as direct ancestor will keep their original branch point, i.e. commits that would be excluded by git-log[1]'s --ancestry-path option will keep their original ancestry by default. If the rebase-cousins mode is turned on, such commits are instead rebased onto <upstream> (or <onto>, if specified). The --rebase-merges mode is similar in spirit to the deprecated --preserve-merges but works with interactive rebases, where commits can be reordered, inserted and dropped at will. It is currently only possible to recreate the merge commits using the recursive merge strategy; Different merge strategies can be used only via explicit exec git merge -s <strategy> [...] commands\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"rebase-cousins\", \"no-rebase-cousins\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-x\", \"--exec\"],\n\t\t\t\t\tinsertValue: \"-x '{cursor}'\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Append 'exec <cmd>' after each line creating a commit in the final history. <cmd> will be interpreted as one or more shell commands. Any command that fails will interrupt the rebase, with exit code 1. You may execute several commands by either using one instance of --exec with several commands: git rebase -i --exec 'cmd1 && cmd2 && ...' or by giving more than one --exec: git rebase -i --exec 'cmd1' --exec 'cmd2' --exec ... If --autosquash is used, 'exec' lines will not be appended for the intermediate commits, and will only appear at the end of each squash/fixup series. This uses the --interactive machinery internally, but it can be run without an explicit --interactive\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"cmd\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--root\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Rebase all commits reachable from <branch>, instead of limiting them with an <upstream>. This allows you to rebase the root commit(s) on a branch. When used with --onto, it will skip changes already contained in <newbase> (instead of <upstream>) whereas without --onto it will operate on every change. When used together with both --onto and --preserve-merges, all root commits will be rewritten to have <newbase> as parent instead\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--autosquash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When the commit log message begins with 'squash! …​' (or 'fixup! …​'), and there is already a commit in the todo list that matches the same ..., automatically modify the todo list of rebase -i so that the commit marked for squashing comes right after the commit to be modified, and change the action of the moved commit from pick to squash (or fixup). A commit matches the ... if the commit subject matches, or if the ... refers to the commit’s hash. As a fall-back, partial matches of the commit subject work, too. The recommended way to create fixup/squash commits is by using the --fixup/--squash options of git-commit[1]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-autosquash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When the commit log message begins with 'squash! …' (or 'fixup! …'), and there is already a commit in the todo list that matches the same ..., automatically modify the todo list of rebase -i so that the commit marked for squashing comes right after the commit to be modified, and change the action of the moved commit from pick to squash (or fixup). A commit matches the ... if the commit subject matches, or if the ... refers to the commit’s hash. As a fall-back, partial matches of the commit subject work, too. The recommended way to create fixup/squash commits is by using the --fixup/--squash options of git-commit[1]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--autostash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run rebase on a dirty worktree. However, use with care: the final stash application after a successful rebase might result in non-trivial conflicts\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-autostash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run rebase on a dirty worktree. However, use with care: the final stash application after a successful rebase might result in non-trivial conflicts\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--reschedule-failed-exec\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Automatically reschedule exec commands that failed. This only makes sense in interactive mode (or when an --exec option was provided)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-reschedule-failed-exec\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not automatically reschedule exec commands that failed. This only makes sense in interactive mode (or when an --exec option was provided)\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"base\",\n\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-\",\n\t\t\t\t\t\t\tdescription: \"Use the last ref as the base\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"new base\",\n\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"add\",\n\t\t\tdescription: \"Add file contents to the index\",\n\t\t\toptions: addOptions,\n\t\t\targs: {\n\t\t\t\tname: \"pathspec\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\n\t\t\t\t// We have a special setting for dot in the vuejs app\n\n\t\t\t\t// suggestions: [\n\t\t\t\t//     {\n\t\t\t\t//         name: \".\",\n\t\t\t\t//         description: \"current directory\",\n\t\t\t\t//         insertValue: \".\",\n\t\t\t\t//         icon: \"fig://icon?type=folder\"\n\t\t\t\t//     }\n\t\t\t\t// ],\n\t\t\t\tgenerators: [gitGenerators.files_for_staging, { template: \"folders\" }],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"stage\",\n\t\t\tdescription: \"Add file contents to the staging area\",\n\t\t\toptions: addOptions,\n\t\t\targs: {\n\t\t\t\tname: \"pathspec\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\n\t\t\t\t// We have a special setting for dot in the vuejs app\n\n\t\t\t\t// suggestions: [\n\t\t\t\t//     {\n\t\t\t\t//         name: \".\",\n\t\t\t\t//         description: \"current directory\",\n\t\t\t\t//         insertValue: \".\",\n\t\t\t\t//         icon: \"fig://icon?type=folder\"\n\t\t\t\t//     }\n\t\t\t\t// ],\n\t\t\t\tgenerators: gitGenerators.files_for_staging,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"status\",\n\t\t\tdescription: \"Show the working tree status\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--short\"],\n\t\t\t\t\tdescription: \"Give the output in the short-format\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Be verbose\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-b\", \"--branch\"],\n\t\t\t\t\tdescription: \"Show branch information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-stash\",\n\t\t\t\t\tdescription: \"Show stash information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--porcelain\",\n\t\t\t\t\tdescription: \"Give the output in the short-format\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"version\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ahead-behind\",\n\t\t\t\t\tdescription: \"Display full ahead/behind values\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-ahead-behind\",\n\t\t\t\t\tdescription: \"Do not display full ahead/behind values\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--column\",\n\t\t\t\t\tdescription: \"Display full ahead/behind values\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"options\",\n\t\t\t\t\t\tdescription: \"Defaults to always\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-column\",\n\t\t\t\t\tdescription: \"Do not display untracked files in columns\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"options\",\n\t\t\t\t\t\tdescription: \"Defaults to never\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--long\",\n\t\t\t\t\tdescription: \"Show status in long format (default)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-z\", \"--null\"],\n\t\t\t\t\tdescription: \"Terminate entries with NUL\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-u\", \"--untracked-files\"],\n\t\t\t\t\tdescription: \"Show untracked files\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"all\",\n\t\t\t\t\t\t\t\tdescription: \"(Default)\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"normal\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"no\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-submodules\",\n\t\t\t\t\tdescription: \"Ignore changes to submodules when looking for changes\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"when\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"all\",\n\t\t\t\t\t\t\t\tdescription: \"(Default)\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dirty\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"untracked\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"none\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignored\",\n\t\t\t\t\tdescription: \"Show ignored files\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"traditional\",\n\t\t\t\t\t\t\t\tdescription: \"(Default)\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"matching\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"no\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-renames\",\n\t\t\t\t\tdescription: \"Do not detect renames\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--renames\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Turn on rename detection regardless of user configuration\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--find-renames\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Turn on rename detection, optionally setting the similarity threshold\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"pathspec\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\n\t\t\t\t// We have a special setting for dot in the vuejs app\n\n\t\t\t\t// suggestions: [\n\t\t\t\t//     {\n\t\t\t\t//         name: \".\",\n\t\t\t\t//         description: \"current directory\",\n\t\t\t\t//         insertValue: \".\",\n\t\t\t\t//         icon: \"fig://icon?type=folder\"\n\t\t\t\t//     }\n\t\t\t\t// ],\n\t\t\t\tgenerators: gitGenerators.files_for_staging,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"clean\",\n\t\t\tdescription: \"Shows which files would be removed from working directory\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"-d\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Normally, when no <path> is specified, git clean will not recurse into untracked directories to avoid removing too much. Specify -d to have it recurse into such directories as well. If any paths are specified, -d is irrelevant; all untracked files matching the specified paths (with exceptions for nested git directories mentioned under --force) will be removed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the Git configuration variable clean.requireForce is not set to false, git clean will refuse to delete files or directories unless given -f or -i\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--interactive\"],\n\t\t\t\t\tdescription: \"Show what would be done and clean files interactively\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Don’t actually remove anything, just show what would be done\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Be quiet, only report errors, but not the files that are successfully removed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-e\", \"--exclude\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the given exclude pattern in addition to the standard ignore rules\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"pattern\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-x\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Don’t use the standard ignore rules (see gitignore(5)), but still use the ignore rules given with -e options from the command line. This allows removing all untracked files, including build products. This can be used (possibly in conjunction with git restore or git reset) to create a pristine working directory to test a clean build\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-X\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Remove only files ignored by Git. This may be useful to rebuild everything from scratch, but keep manually created files\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"revert\",\n\t\t\tdescription:\n\t\t\t\t\"Create new commit that undoes all of the changes made in <commit>, then apply it to the current branch\",\n\t\t\targs: {\n\t\t\t\tname: \"commit\",\n\t\t\t\tisOptional: true,\n\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"ls-remote\",\n\t\t\tdescription: \"List references in a remote repository\",\n\t\t},\n\t\t{\n\t\t\tname: \"push\",\n\t\t\tdescription: \"Update remote refs\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--all\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Push all branches (i.e. refs under refs/heads/); cannot be used with other <refspec>\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prune\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Remove remote branches that don't have a local counterpart\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--mirror\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of naming each ref to push, specifies that all refs under refs/ be mirrored to the remote repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription: \"Do everything except actually send the updates\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--porcelain\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Produce machine-readable output. The output status line for each ref will be tab-separated and sent to stdout instead of stderr\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--delete\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"All listed refs are deleted from the remote repository. This is the same as prefixing all refs with a colon\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--tags\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command line\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--follow-tags\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Push all the refs that would be pushed without this option, and also push annotated tags in refs/tags that are missing from the remote but are pointing at commit-ish that are reachable from the refs being pushed. This can also be specified with configuration variable push.followTags\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--signed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"GPG-sign the push request to update refs on the receiving side, to allow it to be checked by the hooks and/or be logged. If false or --no-signed, no signing will be attempted. If true or --signed, the push will fail if the server does not support signed pushes. If set to if-asked, sign if and only if the server supports signed pushes. The push will also fail if the actual call to gpg --sign fails. See git-receive-pack(1) for the details on the receiving end\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"true\", \"false\", \"if-asked\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-signed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"GPG-sign the push request to update refs on the receiving side, to allow it to be checked by the hooks and/or be logged. If false or --no-signed, no signing will be attempted. If true or --signed, the push will fail if the server does not support signed pushes. If set to if-asked, sign if and only if the server supports signed pushes. The push will also fail if the actual call to gpg --sign fails. See git-receive-pack(1) for the details on the receiving end\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--atomic\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use an atomic transaction on the remote side if available. Either all refs are updated, or on error, no refs are updated. If the server does not support atomic pushes the push will fail\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-atomic\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use an atomic transaction on the remote side if available. Either all refs are updated, or on error, no refs are updated. If the server does not support atomic pushes the push will fail\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Usually, the command refuses to update a remote ref that is not an ancestor of the local ref used to overwrite it. Also, when --force-with-lease option is used, the command refuses to update a remote ref whose current value does not match what is expected. This flag disables these checks, and can cause the remote repository to lose commits; use it with care\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--repo\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option is equivalent to the <repository> argument. If both are specified, the command-line argument takes precedence\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"repository\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-u\", \"--set-upstream\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull(1) and other commands\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--thin\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"These options are passed to git-send-pack(1). A thin transfer significantly reduces the amount of sent data when the sender and receiver share many of the same objects in common. The default is --thin\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-thin\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"These options are passed to git-send-pack(1). A thin transfer significantly reduces the amount of sent data when the sender and receiver share many of the same objects in common. The default is --thin\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Suppress all output, including the listing of updated refs, unless an error occurs. Progress is not reported to the standard error stream\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-v\", \"--verbose\"], description: \"Run verbosely\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified. This flag forces progress status even if the standard error stream is not directed to a terminal\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-recurse-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"May be used to make sure all submodule commits used by the revisions to be pushed are available on a remote-tracking branch. If check is used Git will verify that all submodule commits that changed in the revisions to be pushed are available on at least one remote of the submodule. If any commits are missing the push will be aborted and exit with non-zero status. If on-demand is used all submodules that changed in the revisions to be pushed will be pushed. If on-demand was not able to push all necessary revisions it will also be aborted and exit with non-zero status. If only is used all submodules will be recursively pushed while the superproject is left unpushed. A value of no or using --no-recurse-submodules can be used to override the push.recurseSubmodules configuration variable when no submodule recursion is required\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"May be used to make sure all submodule commits used by the revisions to be pushed are available on a remote-tracking branch. If check is used Git will verify that all submodule commits that changed in the revisions to be pushed are available on at least one remote of the submodule. If any commits are missing the push will be aborted and exit with non-zero status. If on-demand is used all submodules that changed in the revisions to be pushed will be pushed. If on-demand was not able to push all necessary revisions it will also be aborted and exit with non-zero status. If only is used all submodules will be recursively pushed while the superproject is left unpushed. A value of no or using --no-recurse-submodules can be used to override the push.recurseSubmodules configuration variable when no submodule recursion is required\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tsuggestions: [\"check\", \"on-demand\", \"only\", \"no\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--verify\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Turn on the pre-push hook. The default is --verify, giving the hook a chance to prevent the push. With\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-verify\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Turn off the pre-push hook. The default is --verify, giving the hook a chance to prevent the push. With\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-4\", \"--ipv4\"],\n\t\t\t\t\tdescription: \"Use IPv4 addresses only, ignoring IPv6 addresses\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-6\", \"--ipv6\"],\n\t\t\t\t\tdescription: \"Use IPv6 addresses only, ignoring IPv4 addresses\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-o\", \"--push-option\"],\n\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Transmit the given string to the server, which passes them to the pre-receive as well as the post-receive hook. The given string must not contain a NUL or LF character. When multiple --push-option=<option> are given, they are all sent to the other side in the order listed on the command line. When no --push-option=<option> is given from the command line, the values of configuration variable push.pushOption are used instead\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--receive-pack\", \"--exec\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Path to the git-receive-pack program on the remote end. Sometimes useful when pushing to a remote repository over ssh, and you do not have the program in a directory on the default $PATH\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"git-receive-pack\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-force-with-lease\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Cancel all the previous --force-with-lease on the command line\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--force-with-lease\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Protect the named ref (alone), if it is going to be updated, by requiring its current value to be the same as the specified value <expect> (which is allowed to be different from the remote-tracking branch we have for the refname, or we do not even have to have such a remote-tracking branch when this form is used). If <expect> is the empty string, then the named ref must not already exist\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"refname[:expect]\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"remote\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"branch\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"pull\",\n\t\t\tdescription: \"Integrate with another repository\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"--rebase\", \"-r\"],\n\t\t\t\t\tisDangerous: true,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Fetch the remote’s copy of current branch and rebases it into the local copy\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tname: \"remote\",\n\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\tsuggestions: [\"false\", \"true\", \"merges\", \"preserve\", \"interactive\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ name: \"--no-rebase\", description: \"Override earlier --rebase\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--commit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Perform the merge and commit the result. This option can be used to override --no-commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-commit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Perform the merge and stop just before creating a merge commit, to give the user a chance to inspect and further tweak the merge result before committing\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--edit\", \"-e\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Invoke an editor before committing successful mechanical merge to further edit the auto-generated merge message, so that the user can explain and justify the merge\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-edit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The --no-edit option can be used to accept the auto-generated message (this is generally discouraged). The --edit (or -e) option is still useful if you are giving a draft message with the -m option from the command line and want to edit it in the editor\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cleanup\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option determines how the merge message will be cleaned up before committing. See git-commit[1] for more details. In addition, if the <mode> is given a value of scissors, scissors will be appended to MERGE_MSG before being passed on to the commit machinery in the case of a merge conflict\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"strip\",\n\t\t\t\t\t\t\t\"whitespace\",\n\t\t\t\t\t\t\t\"verbatim\",\n\t\t\t\t\t\t\t\"scissors\",\n\t\t\t\t\t\t\t\"default\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When possible resolve the merge as a fast-forward (only update the branch pointer to match the merged branch; do not create a merge commit). When not possible (when the merged-in history is not a descendant of the current history), create a merge commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-ff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a merge commit in all cases, even when the merge could instead be resolved as a fast-forward\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ff-only\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Resolve the merge as a fast-forward when possible. When not possible, refuse to merge and exit with a non-zero status\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-S\", \"--gpg-sign\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"GPG-sign the resulting merge commit. The keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"keyid\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-gpg-sign\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Is useful to countermand both commit.gpgSign configuration variable, and earlier --gpg-sign\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--log\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"In addition to branch names, populate the log message with one-line descriptions from at most <n> actual commits that are being merged. See also git-fmt-merge-msg[1]\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-log\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not list one-line descriptions from the actual commits being merged\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--signoff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Add a Signed-off-by trailer by the committer at the end of the commit log message. The meaning of a signoff depends on the project to which you’re committing. For example, it may certify that the committer has the rights to submit the work under the project’s license or agrees to some contributor representation, such as a Developer Certificate of Origin. (See http://developercertificate.org for the one used by the Linux kernel and Git projects.) Consult the documentation or leadership of the project to which you’re contributing to understand how the signoffs are used in that project\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-signoff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Can be used to countermand an earlier --signoff option on the command line\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--stat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show a diffstat at the end of the merge. The diffstat is also controlled by the configuration option merge.stat\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--no-stat\"],\n\t\t\t\t\tdescription: \"Do not show a diffstat at the end of the merge\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--squash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"With --squash, --commit is not allowed, and will fail. Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the next git commit command to create a merge commit). This allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-squash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Perform the merge and commit the result. This option can be used to override --squash\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-verify\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option bypasses the pre-merge and commit-msg hooks. See also githooks[5]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--strategy\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the given merge strategy; can be supplied more than once to specify them in the order they should be tried. If there is no -s option, a built-in list of strategies is used instead (git merge-recursive when merging a single head, git merge-octopus otherwise)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"strategy\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tsuggestions: [\"resolve\", \"recursive\", \"octopus\", \"ours\", \"subtree\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-X\", \"--strategy-option\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pass merge strategy specific option through to the merge strategy\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"ours\",\n\t\t\t\t\t\t\t\"theirs\",\n\t\t\t\t\t\t\t\"patience\",\n\t\t\t\t\t\t\t\"diff-algorithm\",\n\t\t\t\t\t\t\t\"diff-algorithm=patience\",\n\t\t\t\t\t\t\t\"diff-algorithm=minimal\",\n\t\t\t\t\t\t\t\"diff-algorithm=histogram\",\n\t\t\t\t\t\t\t\"diff-algorithm=myers\",\n\t\t\t\t\t\t\t\"ignore-space-change\",\n\t\t\t\t\t\t\t\"ignore-all-space\",\n\t\t\t\t\t\t\t\"ignore-space-at-eol\",\n\t\t\t\t\t\t\t\"ignore-cr-at-eol\",\n\t\t\t\t\t\t\t\"renormalize\",\n\t\t\t\t\t\t\t\"no-renormalize\",\n\t\t\t\t\t\t\t\"no-renames\",\n\t\t\t\t\t\t\t\"find-renames\",\n\t\t\t\t\t\t\t\"subtree\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--verify-signatures\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Verify that the tip commit of the side branch being merged is signed with a valid key, i.e. a key that has a valid uid: in the default trust model, this means the signing key has been signed by a trusted key. If the tip commit of the side branch is not signed with a valid key, the merge is aborted\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-verify-signatures\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not verify that the tip commit of the side branch being merged is signed with a valid key\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--summary\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Synonym to --stat ; this is deprecated and will be removed in the future\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-summary\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Synonym to --no-stat ; this is deprecated and will be removed in the future\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Operate quietly. Implies --no-progress\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-v\", \"--verbose\"], description: \"Be verbose\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--autostash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run the operation on a dirty worktree. However, use with care: the final stash application after a successful merge might result in non-trivial conflicts\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-autostash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not automatically create a temporary stash entry before the operation begins, and apply it after the operation ends\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-unrelated-histories\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, git merge command refuses to merge histories that do not share a common ancestor. This option can be used to override this safety when merging histories of two projects that started their lives independently. As that is a very rare occasion, no configuration variable to enable this by default exists and will not be added\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--all\",\n\t\t\t\t\tdescription: \"Fetch all remotes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-a\", \"--append\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--atomic\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use an atomic transaction to update local refs. Either all refs are updated, or on error, no refs are updated\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--depth\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"depth\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Limit fetching to the specified number of commits from the tip of each remote branch history\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--deepen\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"depth\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Similar to --depth, except it specifies the number of commits from the current shallow boundary instead of from the tip of each remote branch history\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow-since\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"date\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deepen or shorten the history of a shallow repository to include all reachable commits after <date>\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow-exclude\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"revision\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deepen or shorten the history of a shallow repository to exclude commits reachable from a specified remote branch or tag. This option can be specified multiple times\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unshallow\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the source repository is shallow, fetch as much as possible so that the current repository has the same history as the source repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--update-shallow\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default when fetching from a shallow repository, git fetch refuses refs that require updating .git/shallow\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--negotiation-tip\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit|glob\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, Git will report, to the server, commits reachable from all local refs to find common commits in an attempt to reduce the size of the to-be-received packfile\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--dry-run\",\n\t\t\t\t\tdescription: \"Show what would be done, without making any changes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"This option overrides that check\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-k\", \"--keep\"],\n\t\t\t\t\tdescription: \"Keep downloaded pack\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--prune\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Before fetching, remove any remote-tracking references that no longer exist on the remote\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-P\", \"--prune-tags\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Before fetching, remove any local tags that no longer exist on the remote if --prune is enabled\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-tags\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally. This option disables this automatic tag following\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--refmap\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"refspec\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When fetching refs listed on the command line, use the specified refspec (can be given more than once) to map the refs to remote-tracking branches, instead of the values of remote.*.fetch configuration variables for the remote repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-t\", \"--tags\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally. This option disables this automatic tag following\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"yes\", \"on-demand\", \"no\"],\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When fetching refs listed on the command line, use the specified refspec (can be given more than once) to map the refs to remote-tracking branches, instead of the values of remote.*.fetch configuration variables for the remote repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-recurse-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable recursive fetching of submodules (this has the same effect as using the --recurse-submodules=no option)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-j\", \"--jobs\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Number of parallel children to be used for all forms of fetching\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--set-upstream\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the remote is fetched successfully, add upstream (tracking) reference, used by argument-less git-pull[1] and other commands\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--upload-pack\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"upload-pack\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When given, and the repository to fetch from is handled by git fetch-pack, --exec=<upload-pack> is passed to the command to specify non-default path for the command run on the other end\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-o\", \"--server-option\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Transmit the given string to the server when communicating using protocol version 2. The given string must not contain a NUL or LF character\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-forced-updates\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, git checks if a branch is force-updated during fetch. This can be disabled through fetch.showForcedUpdates, but the --show-forced-updates option guarantees this check occurs\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-show-forced-updates\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, git checks if a branch is force-updated during fetch. Pass --no-show-forced-updates or set fetch.showForcedUpdates to false to skip this check for performance reasons\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-4\", \"--ipv4\"],\n\t\t\t\t\tdescription: \"Use IPv4 addresses only, ignoring IPv6 addresses\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-6\", \"--ipv6\"],\n\t\t\t\t\tdescription: \"Use IPv6 addresses only, ignoring IPv4 addresses\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"remote\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"branch\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"diff\",\n\t\t\tdescription: \"Show changes between commits, commit and working tree, etc\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--staged\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show difference between the files in the staging area and the latest version\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cached\",\n\t\t\t\t\tdescription: \"Show difference between staged changes and last commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--help\",\n\t\t\t\t\tdescription: \"Shows different options\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--numstat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Shows number of added and deleted lines in decimal notation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--name-only\",\n\t\t\t\t\tdescription: \"Show only names of changed files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shortstat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Output only the last line of the --stat format containing total number of modified files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--stat\",\n\t\t\t\t\tdescription: \"Generate a diffstat\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tname: \"[=< width >[,< name-width >[,< count >]]]\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Separates paths from options for disambiguation purposes\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\toptionsCanBreakVariadicArg: false,\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\tname: \"[< path >...]\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"commit or file\",\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\tgenerators: [\n\t\t\t\t\tgitGenerators.commits,\n\t\t\t\t\tgitGenerators.remoteLocalBranches,\n\t\t\t\t\tgitGenerators.getChangedTrackedFiles,\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"reset\",\n\t\t\tdescription: \"Reset current HEAD to the specified state\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--keep\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Safe: files which are different between the current HEAD and the given commit. Will abort if there are uncommitted changes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--soft\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Remove the last commit from the current branch, but the file changes will stay in your working tree\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--hard\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"⚠️WARNING: you will lose all uncommitted changes in addition to the changes introduced in the last commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--mixed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Keep the changes in your working tree but not on the index\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-N\",\n\t\t\t\t\tdescription: \"Mark removed paths as intent-to-add\",\n\t\t\t\t\tdependsOn: [\"--mixed\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--merge\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Resets the index and updates the files in the working tree that are different\" +\n\t\t\t\t\t\t\" between 'commit' and HEAD\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Be quiet, only report errors\",\n\t\t\t\t\texclusiveOn: [\"--no-quiet\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-quiet\",\n\t\t\t\t\tdescription: \"Inverse of --quiet\",\n\t\t\t\t\texclusiveOn: [\"-q\", \"--quiet\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-from-file\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pathspec is passed in file <file> instead of commandline args\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: [\"folders\", \"filepaths\"],\n\t\t\t\t\t\tsuggestions: [\"-\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-file-nul\",\n\t\t\t\t\tdescription: \"Pathspec elements are separated with NUL character\",\n\t\t\t\t\tdependsOn: [\"--pathspec-from-file\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--patch\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Interactively select hunks in the difference between the index and <tree-ish>\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\tgenerators: [\n\t\t\t\t\tgitGenerators.treeish,\n\t\t\t\t\tgitGenerators.commits,\n\t\t\t\t\tgitGenerators.remoteLocalBranches,\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"log\",\n\t\t\tdescription: \"Show commit logs\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--follow\",\n\t\t\t\t\tdescription: \"Show history of given file\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Suppress diff output\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-signature\",\n\t\t\t\t\tdescription: \"Check the validity of a signed commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--source\",\n\t\t\t\t\tdescription: \"Show source\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--oneline\",\n\t\t\t\t\tdescription: \"Show each commit as a single line\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"-u\", \"--patch\"],\n\t\t\t\t\tdescription: \"Display the full diff of each commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--stat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Include which files were altered and the relative number of lines that were added or deleted from each of them\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--grep\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Search for commits with a commit message that matches <pattern>\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"pattern\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--author\",\n\t\t\t\t\tdescription: \"Search for commits by a particular author\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"pattern\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"since\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tdescription: \"Commit ID, branch name, HEAD, or revision reference\",\n\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"until\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tdescription: \"Commit ID, branch name, HEAD, or revision reference\",\n\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"remote\",\n\t\t\tdescription: \"Manage remote repository\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription: \"Add a remote named <name> for the repository at <url>\",\n\t\t\t\t\targs: [{ name: \"name\" }, { name: \"repository url\" }],\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-t\",\n\t\t\t\t\t\t\tdescription: \"A refspec to track only <branch> is created\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-m\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"A symbolic-ref refs/remotes/<name>/HEAD is set up to point at remote’s <master> branch\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"master\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-f\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Git fetch <name> is run immediately after the remote information is set up\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--tags\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Git fetch <name> imports every tag from the remote repository\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--no-tags\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Git fetch <name> does not import tags from the remote repository\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--mirror\",\n\t\t\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\t\t\tdescription: \"Create fetch or push mirror\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tsuggestions: [\"fetch\", \"push\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"set-head\",\n\t\t\t\t\tdescription: \"Sets or deletes the default branch\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"--auto\", \"-a\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The remote is queried to determine its HEAD, then the symbolic-ref refs/remotes/<name>/HEAD is set to the same branch\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"--delete\", \"-d\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The symbolic ref refs/remotes/<name>/HEAD is deleted\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"set-branches\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches after the initial setup for a remote\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--add\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Instead of replacing the list of currently tracked branches, adds to that list\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"rm\", \"remove\"],\n\t\t\t\t\tdescription: \"Removes given remote [name]\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"remote\",\n\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"rename\",\n\t\t\t\t\tdescription: \"Removes given remote [name]\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"old remote\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"new remote name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"get-url\",\n\t\t\t\t\tdescription: \"Retrieves the URLs for a remote\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--push\",\n\t\t\t\t\t\t\tdescription: \"Push URLs are queried rather than fetch URLs\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--all\",\n\t\t\t\t\t\t\tdescription: \"All URLs for the remote will be listed\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"set-url\",\n\t\t\t\t\tdescription: \"Changes the URLs for the remote\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"newurl\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"oldurl\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--push\",\n\t\t\t\t\t\t\tdescription: \"Push URLs are manipulated instead of fetch URLs\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--add\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Instead of changing existing URLs, new URL is added\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--delete\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Instead of changing existing URLs, all URLs matching regex <url> are deleted for remote <name>\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"show\",\n\t\t\t\t\tdescription: \"Gives some information about the remote [name]\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-n\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The remote heads are not queried first with git ls-remote <name>; cached information is used instead\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"prune\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Equivalent to git fetch --prune [name], except that no new references will be fetched\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-n\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--dry-run\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Report what branches would be pruned, but do not actually prune them\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"update\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Fetch updates for remotes or remote groups in the repository as defined by remotes.<group>\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-p\", \"--prune\"],\n\t\t\t\t\t\t\tdescription: \"\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"group\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"remote\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Be a little more verbose and show remote url after name. NOTE: This must be placed between remote and subcommand\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"fetch\",\n\t\t\tdescription: \"Download objects and refs from another repository\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"remote\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tgenerators: gitGenerators.remotes,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"branch\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"refspec\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--all\",\n\t\t\t\t\tdescription: \"Fetch all remotes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-a\", \"--append\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--atomic\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use an atomic transaction to update local refs. Either all refs are updated, or on error, no refs are updated\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--depth\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"depth\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Limit fetching to the specified number of commits from the tip of each remote branch history\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--deepen\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"depth\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Similar to --depth, except it specifies the number of commits from the current shallow boundary instead of from the tip of each remote branch history\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow-since\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"date\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deepen or shorten the history of a shallow repository to include all reachable commits after <date>\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow-exclude\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"revision\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deepen or shorten the history of a shallow repository to exclude commits reachable from a specified remote branch or tag. This option can be specified multiple times\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unshallow\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the source repository is shallow, fetch as much as possible so that the current repository has the same history as the source repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--update-shallow\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default when fetching from a shallow repository, git fetch refuses refs that require updating .git/shallow\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--negotiation-tip\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit|glob\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, Git will report, to the server, commits reachable from all local refs to find common commits in an attempt to reduce the size of the to-be-received packfile\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--dry-run\",\n\t\t\t\t\tdescription: \"Show what would be done, without making any changes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--write-fetch-head\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Write the list of remote refs fetched in the FETCH_HEAD file directly under $GIT_DIR. This is the default\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-write-fetch-head\",\n\t\t\t\t\tdescription: \"Tells Git not to write the file\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"This option overrides that check\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-k\", \"--keep\"],\n\t\t\t\t\tdescription: \"Keep downloaded pack\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--multiple\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow several <repository> and <group> arguments to be specified. No <refspec>s may be specified\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--auto-maintenance\", \"--auto-gc\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Run git maintenance run --auto at the end to perform automatic repository maintenance if\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--no-auto-maintenance\", \"--no-auto-gc\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Don't run git maintenance run --auto at the end to perform automatic repository maintenance\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--write-commit-graph\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Write a commit-graph after fetching. This overrides the config setting fetch.writeCommitGraph\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-write-commit-graph\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Don't write a commit-graph after fetching. This overrides the config setting fetch.writeCommitGraph\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--prune\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Before fetching, remove any remote-tracking references that no longer exist on the remote\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-P\", \"--prune-tags\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Before fetching, remove any local tags that no longer exist on the remote if --prune is enabled\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--no-tags\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally. This option disables this automatic tag following\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--refmap\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"refspec\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When fetching refs listed on the command line, use the specified refspec (can be given more than once) to map the refs to remote-tracking branches, instead of the values of remote.*.fetch configuration variables for the remote repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-t\", \"--tags\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally. This option disables this automatic tag following\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"yes\", \"on-demand\", \"no\"],\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When fetching refs listed on the command line, use the specified refspec (can be given more than once) to map the refs to remote-tracking branches, instead of the values of remote.*.fetch configuration variables for the remote repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-j\", \"--jobs\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Number of parallel children to be used for all forms of fetching\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-recurse-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable recursive fetching of submodules (this has the same effect as using the --recurse-submodules=no option)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--set-upstream\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the remote is fetched successfully, add upstream (tracking) reference, used by argument-less git-pull[1] and other commands\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--submodule-prefix\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Prepend <path> to paths printed in informative messages such as ”Fetching submodule foo\". This option is used internally when recursing over submodules',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules-default\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"yes\", \"on-demand\"],\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option is used internally to temporarily provide a non-negative default value for the --recurse-submodules option\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-u\", \"--update-head-ok\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default git fetch refuses to update the head which corresponds to the current branch. This flag disables the check. This is purely for the internal use for git pull to communicate with git fetch, and unless you are implementing your own Porcelain you are not supposed to use it\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--upload-pack\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"upload-pack\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When given, and the repository to fetch from is handled by git fetch-pack, --exec=<upload-pack> is passed to the command to specify non-default path for the command run on the other end\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pass --quiet to git-fetch-pack and silence any other internally used git commands. Progress is not reported to the standard error stream\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Be verbose\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-o\", \"--server-option\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t},\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Transmit the given string to the server when communicating using protocol version 2. The given string must not contain a NUL or LF character\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-forced-updates\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, git checks if a branch is force-updated during fetch. This can be disabled through fetch.showForcedUpdates, but the --show-forced-updates option guarantees this check occurs\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-show-forced-updates\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, git checks if a branch is force-updated during fetch. Pass --no-show-forced-updates or set fetch.showForcedUpdates to false to skip this check for performance reasons\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-4\", \"--ipv4\"],\n\t\t\t\t\tdescription: \"Use IPv4 addresses only, ignoring IPv6 addresses\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-6\", \"--ipv6\"],\n\t\t\t\t\tdescription: \"Use IPv6 addresses only, ignoring IPv4 addresses\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--stdin\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Read refspecs, one per line, from stdin in addition to those provided as arguments. The \"tag <name>\" format is not supported',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"stash\",\n\t\t\tdescription: \"Temporarily stores all the modified tracked files\",\n\t\t\trequiresSubcommand: false,\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"push\", // TODO: support for no subcommand is missing\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Save your local modifications to a new stash entry and roll them back to HEAD\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-p\", \"--patch\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Interactively select hunks from the diff between HEAD and the working tree to be stashed\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-k\", \"--keep-index\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"All changed already added to the index are left intact\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-u\", \"--include-untracked\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"All untracked files are also stashed and then cleaned up\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-a\", \"--all\"],\n\t\t\t\t\t\t\tdescription: \"All ignored and untracked files are also stashed\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-m\", \"--message\"],\n\t\t\t\t\t\t\tinsertValue: \"-m {cursor}\",\n\t\t\t\t\t\t\tdescription: \"Use the given <msg> as the stash message\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ name: \"--pathspec-from-file\", description: \"\" }, // TODO: pathspec file nul and add description\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Separates pathsec from options for disambiguation purposes\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// TODO: pathspec\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"show\",\n\t\t\t\t\tdescription: \"Show the changes recorded in the stash entry as a diff\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"stash\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.stashes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"save\",\n\t\t\t\t\tdescription: \"Temporarily stores all the modified tracked files\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-p\", \"--patch\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Interactively select hunks from the diff between HEAD and the working tree to be stashed\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-k\", \"--keep-index\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"All changed already added to the index are left intact\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-u\", \"--include-untracked\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"All untracked files are also stashed and then cleaned up\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-a\", \"--all\"],\n\t\t\t\t\t\t\tdescription: \"All ignored and untracked files are also stashed\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"pop\",\n\t\t\t\t\tdescription: \"Restores the most recently stashed files\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--index\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Tries to reinstate not only the working tree's changes, but also the index's ones\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"stash\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.stashes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"Lists all stashed changesets\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"drop\",\n\t\t\t\t\tdescription: \"Discards the most recently stashed changeset\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"stash\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.stashes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"clear\",\n\t\t\t\t\tdescription: \"Remove all the stash entries\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"apply\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Like pop, but do not remove the state from the stash list\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--index\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Tries to reinstate not only the working tree's changes, but also the index's ones\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"stash\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.stashes,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"branch\",\n\t\t\t\t\tdescription: \"Creates and checks out a new branch named\",\n\t\t\t\t\tinsertValue: \"branch {cursor}\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"stash\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.stashes,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"create\",\n\t\t\t\t\tdescription: \"Creates a stash entry\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"store\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Store a given stash in the stash ref, updating the stash reflog\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-m\", \"--message\"],\n\t\t\t\t\t\t\tinsertValue: \"-m {cursor}\",\n\t\t\t\t\t\t\tdescription: \"Use the given <msg> as the stash message\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"reflog\",\n\t\t\tdescription: \"Show history of events with hashes\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--relative-date\",\n\t\t\t\t\tdescription: \"Show date info\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--all\",\n\t\t\t\t\tdescription: \"Show all refs\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"clone\",\n\t\t\tdescription: \"Clone a repository into a new directory\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"repository\",\n\t\t\t\t\tdescription: \"Git library to be cloned\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"directory\",\n\t\t\t\t\tdescription: \"Specify the new directory name or target folder\",\n\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-l\", \"--local\"],\n\t\t\t\t\tdescription: \"Bypasses the normal git aware transport mechanism\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-hardlinks\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Force the cloning process from a repository on a local filesystem to copy the files under the .git/objects directory instead of using hardlinks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--shared\"],\n\t\t\t\t\tisDangerous: true,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Automatically setup .git/objects/info/alternates to share the objects with the source repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--dry-run\",\n\t\t\t\t\tdescription: \"Do nothing; only show what would happen\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--reference\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the reference repository is on the local machine, automatically setup\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"repository\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--reference-if-able\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the reference repository is on the local machine, automatically setup. Non existing directory is skipped with a warning\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"repository\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--dissociate\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Borrow the objects from reference repositories specified with the --reference options only to reduce network transfer, and stop borrowing from them after a clone is made by making necessary local copies of borrowed objects\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Operate quietly. Progress is not reported to the standard error stream\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Run verbosely. Does not affect the reporting of progress status to the standard error stream\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Progress status is reported on the standard error stream by default when it is attached to a terminal, unless --quiet is specified. This flag forces progress status even if the standard error stream is not directed to a terminal\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--server-option\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Transmit the given string to the server when communicating using protocol version 2. The given string must not contain a NUL or LF character. The server’s handling of server options, including unknown ones, is server-specific. When multiple --server-option=<option> are given, they are all sent to the other side in the order listed on the command line\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--no-checkout\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"No checkout of HEAD is performed after the clone is complete\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--bare\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Make a bare Git repository. That is, instead of creating <directory> and placing the administrative files in <directory>/.git, make the <directory> itself the $GIT_DIR. This obviously implies the --no-checkout because there is nowhere to check out the working tree. Also the branch heads at the remote are copied directly to corresponding local branch heads, without mapping them to refs/remotes/origin/. When this option is used, neither remote-tracking branches nor the related configuration variables are created\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--sparse\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Initialize the sparse-checkout file so the working directory starts with only the files in the root of the repository. The sparse-checkout file can be modified to grow the working directory as needed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--filter\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the partial clone feature and request that the server sends a subset of reachable objects according to a given object filter. When using --filter, the supplied <filter-spec> is used for the partial clone filter. For example, --filter=blob:none will filter out all blobs (file contents) until needed by Git. Also, --filter=blob:limit=<size> will filter out all blobs of size at least <size>. For more details on filter specifications, see the --filter option in git-rev-list[1]\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"filter spec\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--mirror\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Set up a mirror of the source repository. This implies --bare. Compared to --bare, --mirror not only maps local branches of the source to local branches of the target, it maps all refs (including remote-tracking branches, notes etc.) and sets up a refspec configuration such that all these refs are overwritten by a git remote update in the target repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-o\", \"--origin\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of using the remote name origin to keep track of the upstream repository, use <name>. Overrides clone.defaultRemoteName from the config\",\n\t\t\t\t\targs: { name: \"name\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-b\", \"--branch\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of pointing the newly created HEAD to the branch pointed to by the cloned repository’s HEAD, point to <name> branch instead. In a non-bare repository, this is the branch that will be checked out. --branch can also take tags and detaches the HEAD at that commit in the resulting repository\",\n\t\t\t\t\targs: { name: \"branch name\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-u\", \"--upload-pack\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When given, and the repository to clone from is accessed via ssh, this specifies a non-default path for the command run on the other end\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"upload pack\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--template\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Specify the directory from which templates will be used\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"template directory\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-c\", \"--config\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Set a configuration variable in the newly-created repository; this takes effect immediately after the repository is initialized, but before the remote history is fetched or any files checked out. The key is in the same format as expected by git-config[1] (e.g., core.eol=true). If multiple values are given for the same key, each value will be written to the config file. This makes it safe, for example, to add additional fetch refspecs to the origin remote. Due to limitations of the current implementation, some configuration variables do not take effect until after the initial fetch and checkout. Configuration variables known to not take effect are: remote.<name>.mirror and remote.<name>.tagOpt. Use the corresponding --mirror and --no-tags options instead\",\n\t\t\t\t\targs: { name: \"key=value\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--depth\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a shallow clone with a history truncated to the specified number of commits. Implies --single-branch unless --no-single-branch is given to fetch the histories near the tips of all branches. If you want to clone submodules shallowly, also pass --shallow-submodules\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"depth\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow-since\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a shallow clone with a history after the specified time\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"date\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow-exclude\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a shallow clone with a history, excluding commits reachable from a specified remote branch or tag. This option can be specified multiple times\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"revision\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--single-branch\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Clone only the history leading to the tip of a single branch, either specified by the --branch option or the primary branch remote’s HEAD points at. Further fetches into the resulting repository will only update the remote-tracking branch for the branch this option was used for the initial cloning. If the HEAD at the remote did not point at any branch when --single-branch clone was made, no remote-tracking branch is created\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-single-branch\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not clone only the history leading to the tip of a single branch, either specified by the --branch option or the primary branch remote’s HEAD points at. Further fetches into the resulting repository will only update the remote-tracking branch for the branch this option was used for the initial cloning. If the HEAD at the remote did not point at any branch when --single-branch clone was made, no remote-tracking branch is created\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-tags\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Don’t clone any tags, and set remote.<remote>.tagOpt=--no-tags in the config, ensuring that future git pull and git fetch operations won’t follow any tags. Subsequent explicit tag fetches will still work, (see git-fetch[1])\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"After the clone is created, initialize and clone submodules within based on the provided pathspec. If no pathspec is provided, all submodules are initialized and cloned. This option can be given multiple times for pathspecs consisting of multiple entries\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tname: \"pathspec\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shallow-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"All submodules which are cloned will be shallow with a depth of 1\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-shallow-submodules\",\n\t\t\t\t\tdescription: \"Disable --shallow-submodules\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--remote-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"All submodules which are cloned will use the status of the submodule’s remote-tracking branch to update the submodule, rather than the superproject’s recorded SHA-1. Equivalent to passing --remote to git submodule update\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-remote-submodules\",\n\t\t\t\t\tdescription: \"Disable --remote-submodules\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-j\", \"--jobs\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The number of submodules fetched at the same time. Defaults to the submodule.fetchJobs option\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--separate-git-dir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of placing the cloned repository where it is supposed to be, place the cloned repository at the specified directory, then make a filesystem-agnostic Git symbolic link to there. The result is Git repository can be separated from working tree\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"git dir\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"init\",\n\t\t\tdescription:\n\t\t\t\t\"Create an empty Git repository or reinitialize an existing one\",\n\t\t\targs: {\n\t\t\t\tname: \"directory\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Only print error and warning messages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--bare\",\n\t\t\t\t\tdescription: \"Create a bare repository\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--object-format\",\n\t\t\t\t\tdescription: \"Specify the given object format\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"format\",\n\t\t\t\t\t\tsuggestions: [\"sha1\", \"sha256\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--template\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Specify the directory from which templates will be used\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"template_directory\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--separate-git-dir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of initializing the repository as a directory to either $GIT_DIR or ./.git/, create a text file there containing the path to the actual repository. This file acts as filesystem-agnostic Git symbolic link to the repository\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"git dir\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-b\", \"--initial-branch\"],\n\t\t\t\t\tdescription: \"Initial branch for new repo\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tname: \"branch-name\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--shared\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Specify that the Git repository is to be shared amongst several users. This allows users belonging to the same group to push into that repository\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"false\",\n\t\t\t\t\t\t\t\tdescription: \"Use permissions reported by umask(2)\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"true\",\n\t\t\t\t\t\t\t\tdescription: \"Make the repository group-writable\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"umask\",\n\t\t\t\t\t\t\t\tdescription: \"Use permissions reported by umask(2)\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"group\",\n\t\t\t\t\t\t\t\tdescription: \"Make the repository group-writable\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"all\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Same as group, but make the repository readable by all users\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"world\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Same as group, but make the repository readable by all users\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"everybody\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Same as group, but make the repository readable by all users\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"0xxx\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"0xxx is an octal number and each file will have mode 0xxx. 0xxx will override users' umask(2) value (and not only loosen permissions as group and all does)\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"mv\",\n\t\t\tdescription: \"Move or rename a file, a directory, or a symlink\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"source\",\n\t\t\t\t\tdescription: \"File to move\",\n\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"destination\",\n\t\t\t\t\tdescription: \"Location to move to\",\n\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Force renaming or moving of a file even if the target exists\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-k\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Skip move or rename actions which would lead to an error condition\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription: \"Do nothing; only show what would happen\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Report the names of files as they are moved\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"rm\",\n\t\t\tdescription: \"Remove files from the working tree and from the index\",\n\t\t\targs: {\n\t\t\t\tisVariadic: true,\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \".\",\n\t\t\t\t\t\tdescription: \"Current directory\",\n\t\t\t\t\t\ticon: \"fig://icon?type=folder\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tgenerators: gitGenerators.files_for_staging,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Used to separate command-line options from the list of files\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--cached\", description: \"Only remove from the index\" },\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"Override the up-to-date check\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command\",\n\t\t\t\t},\n\t\t\t\t{ name: \"-r\", description: \"Allow recursive removal\" },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"bisect\",\n\t\t\tdescription: \"Use binary search to find the commit that introduced a bug\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"start\",\n\t\t\t\t\tdescription: \"Reset bisect state and start bisection\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"bad\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.revs,\n\t\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"good\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: [gitGenerators.revs, gitGenerators.revs],\n\t\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--term-new\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Specify the alias to mark commits as new during the bisect process\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"term\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Specifying: fixed, would require using git bisect fixed instead of git bisect new\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--term-bad\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Specify the alias to mark commits as bad during the bisect process\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"term\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Specifying: broken, would require using git bisect broken instead of git bisect bad\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--term-good\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Specify the alias to mark commits as good during the bisect process\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"term\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Specifying: fixed, would require using git bisect fixed instead of git bisect good\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--term-old\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Specify the alias to mark commits as old during the bisect process\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"term\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Specifying: broken, would require using git bisect broken instead of git bisect old\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--no-checkout\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Do not checkout the new working tree at each iteration of the bisection process. Instead just update a special reference named BISECT_HEAD to make it point to the commit that should be tested\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--first-parent\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Follow only the first parent commit upon seeing a merge commit. In detecting regressions introduced through the merging of a branch, the merge commit will be identified as introduction of the bug and its ancestors will be ignored\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Stop taking subcommand arguments and options. Starts taking paths to bisect\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"bad\",\n\t\t\t\t\tdescription: \"Mark commits as bad\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"rev\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.revs,\n\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"new\",\n\t\t\t\t\tdescription: \"Mark commits as new\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"rev\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.revs,\n\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"old\",\n\t\t\t\t\tdescription: \"Mark commits as old\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"rev\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.revs,\n\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"good\",\n\t\t\t\t\tdescription: \"Mark commits as good\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"rev\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.revs,\n\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"next\",\n\t\t\t\t\tdescription: \"Find next bisection to test and check it out\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"terms\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show the terms used for old and new commits (default: bad, good)\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--term-old\",\n\t\t\t\t\t\t\tdescription: \"You can get just the old (respectively new) term\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--term-good\",\n\t\t\t\t\t\t\tdescription: \"You can get just the old (respectively new) term\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"skip\",\n\t\t\t\t\tdescription: \"Mark <rev>... untestable revisions\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"rev | range\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.revs,\n\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"reset\",\n\t\t\t\t\tdescription: \"Finish bisection search and go back to commit\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"visualize\", \"view\"],\n\t\t\t\t\tdescription: \"See the currently remaining suspects in gitk\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"replay\",\n\t\t\t\t\tdescription: \"Replay bisection log\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"logfile\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"log\",\n\t\t\t\t\tdescription: \"Show bisect log\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"run\",\n\t\t\t\t\tdescription: \"Use <cmd>... to automatically bisect\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"cmd\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tisCommand: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"help\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"Get help text\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"paths\",\n\t\t\t\ttemplate: [\"filepaths\", \"folders\"],\n\t\t\t},\n\t\t},\n\t\t{ name: \"grep\", description: \"Print lines matching a pattern\" },\n\t\t{ name: \"show\", description: \"Show various types of objects\" },\n\t\t{\n\t\t\tname: \"branch\",\n\t\t\tdescription: \"List, create, or delete branches\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-a\", \"--all\"],\n\t\t\t\t\texclusiveOn: [\"-r\", \"--remotes\"],\n\t\t\t\t\tdescription: \"List both remote-tracking and local branches\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--delete\"],\n\t\t\t\t\tdescription: \"Delete fully merged branch\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tgenerators: gitGenerators.localOrRemoteBranches,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: [\"-r\", \"--remotes\"],\n\t\t\t\t\t\t\t\tdescription: \"Deletes the remote-tracking branches\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-D\",\n\t\t\t\t\tdescription: \"Delete branch (even if not merged)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tgenerators: gitGenerators.localOrRemoteBranches,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: [\"-r\", \"--remotes\"],\n\t\t\t\t\t\t\t\tdescription: \"Deletes the remote-tracking branches\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--move\"],\n\t\t\t\t\tdescription: \"Move/rename a branch and its reflog\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-M\",\n\t\t\t\t\tdescription: \"Move/rename a branch, even if target exists\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{ name: [\"-c\", \"--copy\"], description: \"Copy a branch and its reflog\" },\n\t\t\t\t{ name: \"-C\", description: \"Copy a branch, even if target exists\" },\n\t\t\t\t{ name: [\"-l\", \"--list\"], description: \"List branch names\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--create-reflog\",\n\t\t\t\t\tdescription: \"Create the branch's reflog\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--edit-description\",\n\t\t\t\t\tdescription: \"Edit the description for the branch\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"Force creation, move/rename, deletion\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--merged\",\n\t\t\t\t\tdescription: \"Print only branches that are merged\",\n\t\t\t\t\targs: { name: \"commit\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-merged\",\n\t\t\t\t\tdescription: \"Print only branches that are not merged\",\n\t\t\t\t\targs: { name: \"commit\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--column\",\n\t\t\t\t\texclusiveOn: [\"--no-column\"],\n\t\t\t\t\tdescription: \"List branches in columns [=<style>]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-column\",\n\t\t\t\t\texclusiveOn: [\"--column\"],\n\t\t\t\t\tdescription: \"Doesn't display branch listing in columns\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--sort\",\n\t\t\t\t\tdescription: \"Field name to sort on\",\n\t\t\t\t\targs: { name: \"key\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--points-at\",\n\t\t\t\t\tdescription: \"Print only branches of the object\",\n\t\t\t\t\targs: { name: \"object\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--ignore-case\"],\n\t\t\t\t\tdescription: \"Sorting and filtering are case insensitive\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--format\",\n\t\t\t\t\tdescription: \"Format to use for the output\",\n\t\t\t\t\targs: { name: \"format\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-r\", \"--remotes\"],\n\t\t\t\t\texclusiveOn: [\"-a\", \"--all\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Lists or deletes (if used with -d) the remote-tracking branches\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--show-current\",\n\t\t\t\t\tdescription: \"Prints the name of the current branch\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tisRepeatable: 2,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Shows sha1 and commit subject line for each head, along with relationship to upstream branch when in list mode. If given twice, prints the path of the linked worktree and the name of the upstream branch\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Suppress non-error messages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--abbrev\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Shows the shortest prefix that is at least <n> hexdigits long that uniquely refers the object\",\n\t\t\t\t\texclusiveOn: [\"--no-abbrev\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"Number\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-abbrev\",\n\t\t\t\t\texclusiveOn: [\"--abbrev\"],\n\t\t\t\t\tdescription: \"Displays the full sha1s in the output listing\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-t\", \"--track\"],\n\t\t\t\t\texclusiveOn: [\"--no-track\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When creating a new branch, set up 'upstream' configuration\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"start point\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-track\",\n\t\t\t\t\texclusiveOn: [\"--track\", \"-t\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not set up 'upstream' configuration, even if the branch.autoSetupMerge configuration variable is true\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-u\", \"--set-upstream-to\"],\n\t\t\t\t\tdescription: \"Sets branch to upstream provided\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"upstream\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unset-upstream\",\n\t\t\t\t\tdescription: \"Removes the upstream information\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"upstream\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--contains\",\n\t\t\t\t\tdescription: \"Only lists branches which contain the specified commit\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-contains\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Only lists branches which don't contain the specified commit\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--color\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Color branches to highlight current, local, and remote-tracking branches\",\n\t\t\t\t\texclusiveOn: [\"--no-color\"],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"when\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"always\", \"never\", \"auto\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-color\",\n\t\t\t\t\tdescription: \"Turns off branch colors\",\n\t\t\t\t\texclusiveOn: [\"--color\"],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"checkout\",\n\t\t\tdescription: \"Switch branches or restore working tree files\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Progress status is reported on the standard error stream by default when it is attached to a terminal, unless --quiet is specified. This flag enables progress reporting even if not attached to a terminal, regardless of --quiet\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-progress\",\n\t\t\t\t\tdescription: \"Disable progress status reporting\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When switching branches, proceed even if the index or the working tree differs from HEAD. This is used to throw away local changes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-2\", \"--ours\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When checking out paths from the index, check out stage #2 (ours) for unmerged paths\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-3\", \"--theirs\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When checking out paths from the index, check out stage #3 (theirs) for unmerged paths\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-b\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a new branch named <new_branch> and start it at <start_point>; see git-branch[1] for details\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"New Branch\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-B\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Creates the branch <new_branch> and start it at <start_point>; if it already exists, then reset it to <start_point>. This is equivalent to running 'git branch' with '-f'; see git-branch[1] for details\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"New Branch\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-t\", \"--track\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When creating a new branch, set up 'upstream' configuration\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-track\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not set up 'upstream' configuration, even if the branch.autoSetupMerge configuration variable is true\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--guess\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If <branch> is not found but there does exist a tracking branch in exactly one remote (call it <remote>) with a matching name, treat as equivalent to $ git checkout -b <branch> --track <remote>/<branch>\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--no-guess\", description: \"Disable --guess\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"-l\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create the new branch’s reflog; see git-branch[1] for details\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--detach\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Rather than checking out a branch to work on it, check out a commit for inspection and discardable experiments. This is the default behavior of git checkout <commit> when <commit> is not a branch name\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--orphan\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a new orphan branch, named <new_branch>, started from <start_point> and switch to it\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"New Branch\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-skip-worktree-bits\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"In sparse checkout mode, git checkout -- <paths> would update only entries matched by <paths> and sparse patterns in $GIT_DIR/info/sparse-checkout. This option ignores the sparse patterns and adds back any files in <paths>\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--merge\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When switching branches, if you have local modifications to one or more files that are different between the current branch and the branch to which you are switching, the command refuses to switch branches in order to preserve your modifications in context\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--conflict\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The same as --merge option above, but changes the way the conflicting hunks are presented, overriding the merge.conflictStyle configuration variable. Possible values are 'merge' (default) and 'diff3' (in addition to what is shown by 'merge' style, shows the original contents)\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\"merge\", \"diff3\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--patch\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Interactively select hunks in the difference between the <tree-ish> (or the index, if unspecified) and the working tree\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-other-worktrees\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Git checkout refuses when the wanted ref is already checked out by another worktree. This option makes it check the ref out anyway. In other words, the ref can be held by more than one worktree\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--overwrite-ignore\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Silently overwrite ignored files when switching branches. This is the default behavior\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-overwrite-ignore\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use --no-overwrite-ignore to abort the operation when the new branch contains ignored files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Using --recurse-submodules will update the content of all active submodules according to the commit recorded in the superproject. If local modifications in a submodule would be overwritten the checkout will fail unless -f is used. If nothing (or --no-recurse-submodules) is used, submodules working trees will not be updated. Just like git-submodule[1], this will detach HEAD of the submodule\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-recurse-submodules\",\n\t\t\t\t\tdescription: \"Submodules working trees will not be updated\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--overlay\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"In the default overlay mode, git checkout never removes files from the index or the working tree\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-overlay\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When specifying --no-overlay, files that appear in the index and working tree, but not in <tree-ish> are removed, to make them match <tree-ish> exactly\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-from-file\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pathspec is passed in <file> instead of commandline args\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-file-nul\",\n\t\t\t\t\tdescription: \"Only meaningful with --pathspec-from-file\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"branch, file, tag or commit\",\n\t\t\t\t\tdescription: \"Branch, file, tag or commit to switch to\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\tgenerators: [\n\t\t\t\t\t\tgitGenerators.remoteLocalBranches,\n\t\t\t\t\t\tgitGenerators.tags,\n\t\t\t\t\t\t{ template: [\"filepaths\", \"folders\"] },\n\t\t\t\t\t],\n\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-\",\n\t\t\t\t\t\t\tdescription: \"Switch to the last used branch\",\n\t\t\t\t\t\t\ticon: \"fig://icon?type=git\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"Do not interpret more arguments as options\",\n\t\t\t\t\t\t\thidden: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"pathspec\",\n\t\t\t\t\tdescription: \"Limits the paths affected by the operation\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tisVariadic: true,\n\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"cherry-pick\",\n\t\t\tdescription: \"Apply the changes introduced by some existing commits\",\n\t\t\targs: {\n\t\t\t\tname: \"commit\",\n\t\t\t\tdescription: \"Commits to cherry-pick\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--continue\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Continue the operation in progress using the information in .git/sequencer\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--skip\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Skip the current commit and continue with the rest of the sequence\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--quit\",\n\t\t\t\t\tdescription: \"Forget about the current operation in progress\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--abort\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Cancel the operation and return to the pre-sequence state\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-e\", \"--edit\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"With this option, git cherry-pick will let you edit the commit message prior to committing\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cleanup\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option determines how the commit message will be cleaned up before being passed on to the commit machinery\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Determines how the supplied commit messaged should be cleaned up before committing\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"strip\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Strip leading and trailing empty lines, trailing whitepace, commentary and collapse consecutive empty lines\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"whitespace\",\n\t\t\t\t\t\t\t\tdescription: \"Same as strip except #commentary is not removed\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"verbatim\",\n\t\t\t\t\t\t\t\tdescription: \"Do not change the message at all\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"scissors\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Same as whitespace except that everything from (and including) the line found below is truncated\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"default\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Same as strip if the message is to be edited. Otherwise whitespace\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-x\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'When recording the commit, append a line that says \"(cherry picked from commit ...)\" to the original commit message in order to indicate which commit this change was cherry-picked from',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--mainline\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Specifies the parent number (starting from 1) of the mainline and allows cherry-pick to replay the change relative to the specified parent\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"parent-number\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--no-commit\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Applies changes necessary to cherry-pick each named commit to your working tree and the index without making any commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--signoff\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Add a Signed-off-by trailer at the end of the commit message\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-S\", \"--gpg-sign\"],\n\t\t\t\t\texclusiveOn: [\"--no-gpg-sign\"],\n\t\t\t\t\tdescription: \"GPG-sign commits\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"keyid\",\n\t\t\t\t\t\tdescription: \"Must be stuck to the option without a space\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-gpg-sign\",\n\t\t\t\t\texclusiveOn: [\"-S\", \"--gpg-sign\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Useful to countermand both commit.gpgSign configuration variable, and earlier --gpg-sign\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the current HEAD is the same as the parent of the cherry-pick'ed commit, the a fast forward to this commit will be performed\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-empty\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow empty commits to be preserved automatically in a cherry-pick\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-empty-message\",\n\t\t\t\t\tdescription: \"Allow commits with empty messages to be cherry picked\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--keep-redundant-commits\",\n\t\t\t\t\tdescription: \"Creates an empty commit object. Implies --allow-empty\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--strategy\",\n\t\t\t\t\tdescription: \"Use the given merge strategy. Should only be used once\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"strategy\",\n\t\t\t\t\t\tsuggestions: [\"resolve\", \"recursive\", \"octopus\", \"ours\", \"subtree\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-X\", \"--strategy-option\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pass the merge strategy-specific option through to the merge strategy\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"ours\",\n\t\t\t\t\t\t\t\"theirs\",\n\t\t\t\t\t\t\t\"patience\",\n\t\t\t\t\t\t\t\"diff-algorithm\",\n\t\t\t\t\t\t\t\"diff-algorithm=patience\",\n\t\t\t\t\t\t\t\"diff-algorithm=minimal\",\n\t\t\t\t\t\t\t\"diff-algorithm=histogram\",\n\t\t\t\t\t\t\t\"diff-algorithm=myers\",\n\t\t\t\t\t\t\t\"ignore-space-change\",\n\t\t\t\t\t\t\t\"ignore-all-space\",\n\t\t\t\t\t\t\t\"ignore-space-at-eol\",\n\t\t\t\t\t\t\t\"ignore-cr-at-eol\",\n\t\t\t\t\t\t\t\"renormalize\",\n\t\t\t\t\t\t\t\"no-renormalize\",\n\t\t\t\t\t\t\t\"no-renames\",\n\t\t\t\t\t\t\t\"find-renames\",\n\t\t\t\t\t\t\t\"subtree\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--rerere-autoupdate\",\n\t\t\t\t\texclusiveOn: [\"--no-rerere-autoupdate\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-rerere-autoupdate\",\n\t\t\t\t\texclusiveOn: [\"--rerere-autoupdate\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"submodule\",\n\t\t\tdescription: \"Initialize, update or inspect submodules\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Add the given repository as a submodule at the given path to the changeset to be committed next to the current project\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-b\",\n\t\t\t\t\t\t\tdescription: \"Branch of repository to add as submodule\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription: \"Allow adding an otherwise ignored submodule path\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--name\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"It sets the submodule’s name to the given string instead of defaulting to its path\",\n\t\t\t\t\t\t\tinsertValue: \"--name '{cursor}'\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\tdescription: \"Directory name\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--reference\",\n\t\t\t\t\t\t\tdescription: \"Remote repository to be cloned\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"repository\",\n\t\t\t\t\t\t\t\tdescription: \"Remote repository to be cloned\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--depth\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Create a shallow clone with a history truncated to the specified number of revisions\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"depth\",\n\t\t\t\t\t\t\t\tdescription: \"Specified number of revisions\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"End of subcommand options\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"repository\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"status\",\n\t\t\t\t\tdescription: \"Show the status of the submodules\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--cached\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Will instead print the SHA-1 recorded in the superproject for each submodule\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--recursive\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Will recurse into nested submodules, and show their status as well\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"End of subcommand options\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"init\",\n\t\t\t\t\tdescription: \"Initialize the submodules recorded in the index\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"End of subcommand options\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"deinit\",\n\t\t\t\t\tdescription: \"Unregister the given submodules\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The submodule’s working tree will be removed even if it contains local modifications\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--all\",\n\t\t\t\t\t\t\tdescription: \"Unregister all submodules in the working tree\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"End of subcommand options\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"update\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Update the registered submodules to match what the superproject expects by cloning missing submodules, fetching missing commits in submodules and updating the working tree of the submodules\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--init\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Initialize all submodules for which 'git submodule init' has not been called so far before updating\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--remote\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Instead of using the superproject’s recorded SHA-1 to update the submodule, use the status of the submodule’s remote-tracking branch\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-N\", \"--no-fetch\"],\n\t\t\t\t\t\t\tdescription: \"Don’t fetch new objects from the remote site\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--no-recommend-shallow\",\n\t\t\t\t\t\t\tdescription: \"Ignore the suggestions\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--recommend-shallow\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The initial clone of a submodule will use the recommended submodule.<name>.shallow as provided by the .gitmodules file\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Throw away local changes in submodules when switching to a different commit; and always run a checkout operation in the submodule, even if the commit listed in the index of the containing repository matches the commit checked out in the submodule\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--checkout\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The commit recorded in the superproject will be checked out in the submodule on a detached HEAD\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--rebase\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The current branch of the submodule will be rebased onto the commit recorded in the superproject\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--merge\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"The commit recorded in the superproject will be merged into the current branch in the submodule\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--reference\",\n\t\t\t\t\t\t\tdescription: \"Remote repository\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"repository\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--depth\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Create a shallow clone with a history truncated to the specified number of revisions\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"depth\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--recursive\",\n\t\t\t\t\t\t\tdescription: \"Traverse submodules recursively\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--jobs\",\n\t\t\t\t\t\t\tdescription: \"Clone new submodules in parallel with as many jobs\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--single-branch\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Clone only one branch during update: HEAD or one specified by --branch\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--no-single-branch\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Don't clone only one branch during update: HEAD or one specified by --branch\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ name: \"--\", description: \"End of subcommand options\" },\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"set-branch\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Sets the default remote tracking branch for the submodule\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-b\", \"--branch\"],\n\t\t\t\t\t\t\tdescription: \"Branch of repository to add as submodule\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\t\tdescription: \"Remote branch to be specified\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-d\", \"--default\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Removes the submodule.<name>.branch configuration key, which causes the tracking branch to default to the remote HEAD\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"End of subcommand options\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\tdescription: \"Path to submodule\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"set-url\",\n\t\t\t\t\tdescription: \"Sets the URL of the specified submodule to <newurl>\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"End of command options\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\t\tdescription: \"Path to specified submodule\",\n\t\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"newurl\",\n\t\t\t\t\t\t\tdescription: \"New url of submodule\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"summary\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show commit summary between the given commit (defaults to HEAD) and working tree/index\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--cached\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"This command will recurse into the registered submodules, and sync any nested submodules within\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--files\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Show the series of commits in the submodule between the index of the super project and the working tree of the submodule\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-n\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Limit the summary size (number of commits shown in total). Giving 0 will disable the summary; a negative number means unlimited (the default). This limit only applies to modified submodules. The size is always limited to 1 for added/deleted/typechanged submodules\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--summary-limit\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Limit the summary size (number of commits shown in total). Giving 0 will disable the summary; a negative number means unlimited (the default). This limit only applies to modified submodules. The size is always limited to 1 for added/deleted/typechanged submodules\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"Everything after this is an argument\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"commit\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"foreach\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Evaluates an arbitrary shell command in each checked out submodule\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--recursive\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"This command will recurse into the registered submodules, and sync any nested submodules within\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"command\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"sync\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Synchronizes submodules' remote URL configuration setting to the value specified in .gitmodules\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--recursive\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"This command will recurse into the registered submodules, and sync any nested submodules within\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--\",\n\t\t\t\t\t\t\tdescription: \"Everything after this is an argument\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"absorbgitdirs\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If a git directory of a submodule is inside the submodule, move the git directory of the submodule into its superproject’s $GIT_DIR/modules path and then connect the git directory and its working directory by setting the core.worktree and adding a .git file pointing to the git directory embedded in the superprojects git directory\",\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Only print error messages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cached\",\n\t\t\t\t\tdescription: \"The commit stored in the index is used instead\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"merge\",\n\t\t\tdescription: \"Join two or more development histories together\",\n\t\t\targs: {\n\t\t\t\tname: \"branch\",\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: gitGenerators.remoteLocalBranches,\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t\t// A single dash can be used as arg to merge as short hand for the previous branch\n\t\t\t\t// https://github.com/git/git/blob/master/Documentation/RelNotes/1.7.6.txt#L84\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"-\", description: \"Shorthand for the previous branch\" },\n\t\t\t\t],\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--commit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Perform the merge and commit the result. This option can be used to override --no-commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-commit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Perform the merge and stop just before creating a merge commit, to give the user a chance to inspect and further tweak the merge result before committing\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--edit\", \"-e\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Invoke an editor before committing successful mechanical merge to further edit the auto-generated merge message, so that the user can explain and justify the merge\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-edit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The --no-edit option can be used to accept the auto-generated message (this is generally discouraged). The --edit (or -e) option is still useful if you are giving a draft message with the -m option from the command line and want to edit it in the editor\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cleanup\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option determines how the merge message will be cleaned up before committing. See git-commit[1] for more details. In addition, if the <mode> is given a value of scissors, scissors will be appended to MERGE_MSG before being passed on to the commit machinery in the case of a merge conflict\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"strip\",\n\t\t\t\t\t\t\t\"whitespace\",\n\t\t\t\t\t\t\t\"verbatim\",\n\t\t\t\t\t\t\t\"scissors\",\n\t\t\t\t\t\t\t\"default\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When possible resolve the merge as a fast-forward (only update the branch pointer to match the merged branch; do not create a merge commit). When not possible (when the merged-in history is not a descendant of the current history), create a merge commit\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-ff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a merge commit in all cases, even when the merge could instead be resolved as a fast-forward\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ff-only\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Resolve the merge as a fast-forward when possible. When not possible, refuse to merge and exit with a non-zero status\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-S\", \"--gpg-sign\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"GPG-sign the resulting merge commit. The keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"keyid\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-gpg-sign\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Is useful to countermand both commit.gpgSign configuration variable, and earlier --gpg-sign\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--log\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"In addition to branch names, populate the log message with one-line descriptions from at most <n> actual commits that are being merged. See also git-fmt-merge-msg[1]\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-log\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not list one-line descriptions from the actual commits being merged\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--signoff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Add a Signed-off-by trailer by the committer at the end of the commit log message. The meaning of a signoff depends on the project to which you’re committing. For example, it may certify that the committer has the rights to submit the work under the project’s license or agrees to some contributor representation, such as a Developer Certificate of Origin. (See http://developercertificate.org for the one used by the Linux kernel and Git projects.) Consult the documentation or leadership of the project to which you’re contributing to understand how the signoffs are used in that project\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-signoff\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Can be used to countermand an earlier --signoff option on the command line\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--stat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show a diffstat at the end of the merge. The diffstat is also controlled by the configuration option merge.stat\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-n\", \"--no-stat\"],\n\t\t\t\t\tdescription: \"Do not show a diffstat at the end of the merge\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--squash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"With --squash, --commit is not allowed, and will fail. Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the next git commit command to create a merge commit). This allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-squash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Perform the merge and commit the result. This option can be used to override --squash\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-verify\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"This option bypasses the pre-merge and commit-msg hooks. See also githooks[5]\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--strategy\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use the given merge strategy; can be supplied more than once to specify them in the order they should be tried. If there is no -s option, a built-in list of strategies is used instead (git merge-recursive when merging a single head, git merge-octopus otherwise)\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"strategy\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\tsuggestions: [\"resolve\", \"recursive\", \"octopus\", \"ours\", \"subtree\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-X\", \"--strategy-option\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pass merge strategy specific option through to the merge strategy\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"option\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"ours\",\n\t\t\t\t\t\t\t\"theirs\",\n\t\t\t\t\t\t\t\"patience\",\n\t\t\t\t\t\t\t\"diff-algorithm\",\n\t\t\t\t\t\t\t\"diff-algorithm=patience\",\n\t\t\t\t\t\t\t\"diff-algorithm=minimal\",\n\t\t\t\t\t\t\t\"diff-algorithm=histogram\",\n\t\t\t\t\t\t\t\"diff-algorithm=myers\",\n\t\t\t\t\t\t\t\"ignore-space-change\",\n\t\t\t\t\t\t\t\"ignore-all-space\",\n\t\t\t\t\t\t\t\"ignore-space-at-eol\",\n\t\t\t\t\t\t\t\"ignore-cr-at-eol\",\n\t\t\t\t\t\t\t\"renormalize\",\n\t\t\t\t\t\t\t\"no-renormalize\",\n\t\t\t\t\t\t\t\"no-renames\",\n\t\t\t\t\t\t\t\"find-renames\",\n\t\t\t\t\t\t\t\"subtree\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--verify-signatures\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Verify that the tip commit of the side branch being merged is signed with a valid key, i.e. a key that has a valid uid: in the default trust model, this means the signing key has been signed by a trusted key. If the tip commit of the side branch is not signed with a valid key, the merge is aborted\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-verify-signatures\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not verify that the tip commit of the side branch being merged is signed with a valid key\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--summary\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Synonym to --stat ; this is deprecated and will be removed in the future\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-summary\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Synonym to --no-stat ; this is deprecated and will be removed in the future\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Operate quietly. Implies --no-progress\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-v\", \"--verbose\"], description: \"Be verbose\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Turn progress on/off explicitly. If neither is specified, progress is shown if standard error is connected to a terminal. Note that not all merge strategies may support progress reporting\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Turn progress on/off explicitly. If neither is specified, progress is shown if standard error is connected to a terminal. Note that not all merge strategies may support progress reporting\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--autostash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run the operation on a dirty worktree. However, use with care: the final stash application after a successful merge might result in non-trivial conflicts\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-autostash\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not automatically create a temporary stash entry before the operation begins, and apply it after the operation ends\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-unrelated-histories\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"By default, git merge command refuses to merge histories that do not share a common ancestor. This option can be used to override this safety when merging histories of two projects that started their lives independently. As that is a very rare occasion, no configuration variable to enable this by default exists and will not be added\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-m\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Set the commit message to be used for the merge commit (in case one is created). If --log is specified, a shortlog of the commits being merged will be appended to the specified message. The git fmt-merge-msg command can be used to give a good default for automated git merge invocations. The automated message can include the branch description\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"message\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-F\", \"--file\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Read the commit message to be used for the merge commit (in case one is created). If --log is specified, a shortlog of the commits being merged will be appended to the specified message\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--rerere-autoupdate\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-rerere-autoupdate\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--overwrite-ignore\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Silently overwrite ignored files from the merge result. This is the default behavior. Use --no-overwrite-ignore to abort\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-overwrite-ignore\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not silently overwrite ignored files from the merge result\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--abort\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Abort the current conflict resolution process, and try to reconstruct the pre-merge state. If an autostash entry is present, apply it to the worktree. If there were uncommitted worktree changes present when the merge started, git merge --abort will in some cases be unable to reconstruct these changes. It is therefore recommended to always commit or stash your changes before running git merge. git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present unless MERGE_AUTOSTASH is also present in which case git merge --abort applies the stash entry to the worktree whereas git reset --merge will save the stashed changes in the stash list\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--quit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Forget about the current merge in progress. Leave the index and the working tree as-is. If MERGE_AUTOSTASH is present, the stash entry will be saved to the stash list\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--continue\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"After a git merge stops due to conflicts you can conclude the merge by running git merge --continue (see 'HOW TO RESOLVE CONFLICTS' section below)\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"mergetool\",\n\t\t\tdescription: \"Open the git tool to fix conflicts\",\n\t\t},\n\t\t{\n\t\t\tname: \"tag\",\n\t\t\tdescription:\n\t\t\t\t\"Create, list, delete or verify a tag object signed with GPG\",\n\t\t\toptions: [\n\t\t\t\t{ name: [\"-l\", \"--list\"], description: \"List tag names\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"-n\",\n\t\t\t\t\tdescription: \"Print <n> lines of each tag message\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t\tsuggestions: [{ name: \"1\" }, { name: \"2\" }, { name: \"3\" }],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ name: [\"-d\", \"--delete\"], description: \"Delete tags\" },\n\t\t\t\t{ name: [\"-v\", \"--verify\"], description: \"Verify tags\" },\n\t\t\t\t{\n\t\t\t\t\tname: [\"-a\", \"--annotate\"],\n\t\t\t\t\tdescription: \"Annotated tag, needs a message\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--message\"],\n\t\t\t\t\tinsertValue: \"-m '{cursor}'\",\n\t\t\t\t\tdescription: \"Tag message\",\n\t\t\t\t\targs: { name: \"message\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--points-at\",\n\t\t\t\t\tdescription: \"List tags of the given object\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"object\",\n\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t\tsuggestions: headSuggestions,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"tagname\",\n\t\t\t\tdescription: \"Select a tag\",\n\t\t\t\tgenerators: gitGenerators.tags,\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"restore\",\n\t\t\tdescription: \"Restore working tree files\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-s\", \"--source\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Restore the working tree files with the content from the given tree\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"tree\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--patch\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Interactively select hunks in the difference between the restore source and the restore location\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-W\", \"--worktree\"],\n\t\t\t\t\tdescription: \"Use the worktree as the restore location\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-S\", \"--staged\"],\n\t\t\t\t\tdescription: \"Use staging as the restore location\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Progress status is reported on the standard error stream by default when it is attached to a terminal\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-progress\",\n\t\t\t\t\tdescription: \"Disable progress status reporting\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-2\", \"--ours\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When restoring paths from the index, check out stage #2 (ours) for unmerged paths\",\n\t\t\t\t\texclusiveOn: [\"--theirs\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-3\", \"--theirs\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When re out paths from the index, check out stage #3 (theirs) for unmerged paths\",\n\t\t\t\t\texclusiveOn: [\"--ours\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--merge\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When restoring files on the working tree from the index, recreate the conflicted merge in the unmerged paths\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--conflict\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The same as --merge option, but changes the way the conflicting hunks are presented\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"style\",\n\t\t\t\t\t\tsuggestions: [\"merge\", \"diff3\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-unmerged\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When restoring files on the working tree from the index, do not abort the operation if there are unmerged entries\",\n\t\t\t\t\texclusiveOn: [\"--ours\", \"--theirs\", \"--merge\", \"--conflict\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-skip-worktree-bits\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"In sparse checkout mode, by default is to only update entries matched by <pathspec> and sparse patterns in $GIT_DIR/info/sparse-checkout\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If <pathspec> names an active submodule and the restore location includes the working tree, the submodule will only be updated if this option is given, in which case its working tree will be restored to the commit recorded in the superproject, and any local modifications overwritten\",\n\t\t\t\t\texclusiveOn: [\"--no-recurse-submodules\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-recurse-submodules\",\n\t\t\t\t\tdescription: \"Submodules working trees will not be updated\",\n\t\t\t\t\texclusiveOn: [\"--recurse-submodules\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--overlay\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"In overlay mode, the command never removes files when restoring\",\n\t\t\t\t\texclusiveOn: [\"--no-overlay\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-overlay\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"In no-overlay mode, tracked files that do not appear in the --source tree are removed, to make them match <tree> exactly\",\n\t\t\t\t\texclusiveOn: [\"--overlay\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-from-file\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Pathspec is passed in <file> instead of commandline args. If <file> is exactly - then standard input is used\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pathspec-file-nul\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Only meaningful with --pathspec-from-file. Pathspec elements are separated with NUL character and all other characters are taken literally (including newlines and quotes)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\tdescription: \"Do not interpret any more arguments as options\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"pathspec\",\n\t\t\t\tisOptional: true,\n\t\t\t\tisVariadic: true,\n\t\t\t\tgenerators: gitGenerators.files_for_staging,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"switch\",\n\t\t\tdescription: \"Switch branches\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-c\", \"--create\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create a new branch named <new-branch> starting at <start-point> before switching to the branch\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"new branch\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"start point\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-C\", \"--force-create\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Similar to --create except that if <new-branch> already exists it will be reset to <start-point>\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"new branch\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"start point\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-d\", \"--detach\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Switch to a commit for inspection and discardable experiments\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--guess\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If <branch> is not found but there does exist a tracking branch in exactly one remote (call it <remote>) with a matching name\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-guess\",\n\t\t\t\t\tdescription: \"Disable --guess\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"An alias for --discard-changes\",\n\t\t\t\t\tisDangerous: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--discard-changes\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Proceed even if the index or the working tree differs from HEAD. Both the index and working tree are restored to match the switching target\",\n\t\t\t\t\tisDangerous: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-m\", \"--merge\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If you have local modifications to one or more files that are different between the current branch and the branch to which you are switching, the command refuses to switch branches in order to preserve your modifications in context\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--conflict\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The same as --merge option above, but changes the way the conflicting hunks are presented, overriding the merge.conflictStyle configuration variable\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"style\",\n\t\t\t\t\t\tsuggestions: [\"merge\", \"diff3\"],\n\t\t\t\t\t\tdefault: \"merge\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-q\", \"--quiet\"],\n\t\t\t\t\tdescription: \"Quiet, suppress feedback messages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--progress\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Progress status is reported on the standard error stream by default when it is attached to a terminal\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-progress\",\n\t\t\t\t\tdescription: \"Disable progress status reporting\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-t\", \"--track\"],\n\t\t\t\t\texclusiveOn: [\"--no-track\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When creating a new branch, set up 'upstream' configuration\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"branch\",\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"start point\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-track\",\n\t\t\t\t\texclusiveOn: [\"--track\", \"-t\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not set up 'upstream' configuration, even if the branch.autoSetupMerge configuration variable is true\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--orphan\",\n\t\t\t\t\tdescription: \"Create a new orphan branch, named <new-branch>\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"new branch\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--ignore-other-worktrees\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Git switch refuses when the wanted ref is already checked out by another worktree\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recurse-submodules\",\n\t\t\t\t\texclusiveOn: [\"--no-recurse-submodules\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Updates the content of all active submodules according to the commit recorded in the superproject\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-recurse-submodules\",\n\t\t\t\t\texclusiveOn: [\"--recurse-submodules\"],\n\t\t\t\t\tdescription: \"Submodules working trees will not be updated\",\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"branch name\",\n\t\t\t\t\tdescription: \"Branch or commit to switch to\",\n\t\t\t\t\tgenerators: gitGenerators.localBranches,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"-\",\n\t\t\t\t\t\t\tdescription: \"Switch to the last used branch\",\n\t\t\t\t\t\t\ticon: \"fig://icon?type=git\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"start point\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t\tgenerators: gitGenerators.commits,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"worktree\",\n\t\t\tdescription: \"Manage multiple working trees\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription: \"Create <path> and checkout <commit-ish> into it\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"By default, add refuses to create a new working tree when <commit-ish> is a branch name and is already checked out by another working tree, or if <path> is already assigned to some working tree but is missing (for instance, if <path> was deleted manually). This option overrides these safeguards. To add a missing but locked working tree path, specify --force twice\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-d\", \"--detach\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'With add, detach HEAD in the new working tree. See \"DETACHED HEAD\" in git-checkout[1]',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--checkout\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'By default, add checks out <commit-ish>, however, --no-checkout can be used to suppress checkout in order to make customizations, such as configuring sparse-checkout. See \"Sparse checkout\" in git-read-tree[1]',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--lock\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Keep the working tree locked after creation. This is the equivalent of git worktree lock after git worktree add, but without a race condition\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-b\", \"-B\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"With add, create a new branch named <new-branch> starting at <commit-ish>, and check out <new-branch> into the new working tree. If <commit-ish> is omitted, it defaults to HEAD. By default, -b refuses to create a new branch if it already exists. -B overrides this safeguard, resetting <new-branch> to <commit-ish>\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"new-branch\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"List details of each working tree\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--porcelain\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"With list, output in an easy-to-parse format for scripts. This format will remain stable across Git versions and regardless of user configuration. See below for details\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"With list, output additional information about worktrees (see below)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--expire\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"With list, annotate missing working trees as prunable if they are older than <time>\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"time\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"lock\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If a working tree is on a portable device or network share which is not always mounted, lock it to prevent its administrative files from being pruned automatically\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"worktree\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Working trees can be identified by path, either relative or absolute\",\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--reason\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"With lock or with add --lock, an explanation <reason> why the working tree is locked\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"reason\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"move\",\n\t\t\t\t\tdescription: \"Move a working tree to a new location\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"worktree\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Working trees can be identified by path, either relative or absolute\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"new-path\",\n\t\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Move refuses to move a locked working tree unless --force is specified twice. If the destination is already assigned to some other working tree but is missing (for instance, if <new-path> was deleted manually), then --force allows the move to proceed; use --force twice if the destination is locked\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"prune\",\n\t\t\t\t\tdescription: \"Prune working tree information in $GIT_DIR/worktrees\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-n\", \"--dry-run\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"With prune, do not remove anything; just report what it would remove\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\t\t\tdescription: \"With prune, report all removals\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--expire\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"With prune, only expire unused working trees older than <time>\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"time\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"remove\",\n\t\t\t\t\tdescription: \"Remove a working tree\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"worktree\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Working trees can be identified by path, either relative or absolute\",\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Remove refuses to remove an unclean working tree unless --force is used. To remove a locked working tree, specify --force twice\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"repair\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Repair working tree administrative files, if possible, if they have become corrupted or outdated due to external factors\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"unlock\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Unlock a working tree, allowing it to be pruned, moved or deleted\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"worktree\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Working trees can be identified by path, either relative or absolute\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"apply\",\n\t\t\tdescription: \"Apply a patch to files and/or to the index\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--exclude\",\n\t\t\t\t\tdescription: \"Don't apply changes matching the given path\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--include\",\n\t\t\t\t\tdescription: \"Apply changes matching the given path\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-p\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Remove <num> leading slashes from traditional diff paths\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"num\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-add\",\n\t\t\t\t\tdescription: \"Ignore additions made by the patch\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--stat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of applying the patch, output diffstat for the input\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--numstat\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Show number of added and deleted lines in decimal notation\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--summary\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of applying the patch, output a summary for the input\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--check\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Instead of applying the patch, see if the patch is applicable\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--index\",\n\t\t\t\t\tdescription: \"Make sure the patch is applicable to the current index\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-N\", \"--intent-to-add\"],\n\t\t\t\t\tdescription: \"Mark new files with `git add --intent-to-add`\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--cached\",\n\t\t\t\t\tdescription: \"Apply a patch without touching the working tree\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unsafe-paths\",\n\t\t\t\t\tdescription: \"Accept a patch that touches outside the working area\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--apply\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Also apply the patch (use with --stat/--summary/--check)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-3\", \"--3way\"],\n\t\t\t\t\tdescription: \"Attempt three-way merge if a patch does not apply\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--build-fake-ancestor\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Build a temporary index based on embedded index information\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-z\",\n\t\t\t\t\tdescription: \"Paths are separated with NUL character\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-C\",\n\t\t\t\t\tdescription: \"Ensure at least <n> lines of context match\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"n\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--whitespace\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Detect new or modified lines that have whitespace errors\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"action\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"nowarn\",\n\t\t\t\t\t\t\t\tdescription: \"Turns off the trailing whitespace warning\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"warn\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Outputs warnings for a few such errors, but applies the patch as-is (default)\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"fix\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Outputs warnings for a few such errors, and applies the patch after fixing them\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"error\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Outputs warnings for a few such errors, and refuses to apply the patch\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"error-all\",\n\t\t\t\t\t\t\t\tdescription: \"Similar to `error` but shows all errors\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"--ignore-space-change\", \"--ignore-whitespace\"],\n\t\t\t\t\tdescription: \"Ignore changes in whitespace when finding context\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-R\", \"--reverse\"],\n\t\t\t\t\tdescription: \"Apply the patch in reverse\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--unidiff-zero\",\n\t\t\t\t\tdescription: \"Don't expect at least one line of context\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--reject\",\n\t\t\t\t\tdescription: \"Leave the rejected hunks in corresponding *.rej files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-overlap\",\n\t\t\t\t\tdescription: \"Allow overlapping hunks\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\t\t\tdescription: \"Be verbose\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--inaccurate-eof\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Tolerate incorrectly detected missing new-line at the end of file\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--recount\",\n\t\t\t\t\tdescription: \"Do not trust the line counts in the hunk headers\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--directory\",\n\t\t\t\t\tdescription: \"Prepend <root> to all filenames\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"root\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"patch\",\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"daemon\",\n\t\t\tdescription: \"A really simple server for Git repositories\",\n\t\t\targs: {\n\t\t\t\tname: \"directory\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"A directory to add to the whitelist of allowed directories. Unless --strict-paths is specified this will also include subdirectories of each named directory\",\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--strict-paths\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Match paths exactly (i.e. don’t allow \"/foo/repo\" when the real path is \"/foo/repo.git\" or \"/foo/repo/.git\") and don’t do user-relative paths.  git daemon will refuse to start when this option is enabled and no whitelist is specified',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--base-path\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Remap all the path requests as relative to the given path\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"path\", template: \"folders\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--base-path-relaxed\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If --base-path is enabled and repo lookup fails, with this option git daemon will attempt to lookup without prefixing the base path. This is useful for switching to --base-path usage, while still allowing the old paths\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--interpolated-path\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"To support virtual hosting, an interpolated path template can be used to dynamically construct alternate paths. The template supports %H for the target hostname as supplied by the client but converted to all lowercase, %CH for the canonical hostname, %IP for the server’s IP address, %P for the port number, and %D for the absolute path of the named repository. After interpolation, the path is validated against the directory whitelist\",\n\t\t\t\t\targs: { name: \"path-template\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--export-all\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow pulling from all directories that look like Git repositories (have the objects and refs subdirectories), even if they do not have the git-daemon-export-ok file\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--inetd\",\n\t\t\t\t\tdescription: \"Have the server run as an inetd service\",\n\t\t\t\t\texclusiveOn: [\"--pid-file\", \"--user\", \"--group\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--listen\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Listen on a specific IP address or hostname. IP addresses can be either an IPv4 address or an IPv6 address if supported. If IPv6 is not supported, then --listen=hostname is also not supported and --listen must be given an IPv4 address. Can be given more than once. Incompatible with --inetd option\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"host_or_ipaddr\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--port\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Listen on an alternative port. Incompatible with --inetd option\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"port\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--init-timeout\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Timeout (in seconds) between the moment the connection is established and the client request is received (typically a rather low value, since that should be basically immediate)\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"timeout\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--max-connections\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Maximum number of concurrent clients, defaults to 32. Set it to zero for no limit\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"maximum\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--syslog\",\n\t\t\t\t\tdescription: \"Short for --log-destination=syslog\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--log-destination\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Send log messages to the specified destination. Note that this option does not imply --verbose, thus by default only error conditions will be logged. The default destination is syslog if --inetd or --detach is specified, otherwise stderr\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"destination\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"stderr\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Write to standard error. Note that if --detach is specified, the process disconnects from the real standard error, making this destination effectively equivalent to none\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"syslog\",\n\t\t\t\t\t\t\t\tdescription: \"Write to syslog, using the git-daemon identifier\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ name: \"none\", description: \"Disable all logging\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--user-path\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow ~user notation to be used in requests. When specified with no parameter, requests to git://host/~alice/foo is taken as a request to access foo repository in the home directory of user alice. If --user-path=some-path is specified, the same request is taken as a request to access the some-path/foo repository in the home directory of user alice\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\ttemplate: \"folders\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--verbose\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Log details about the incoming connections and requested files\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--detach\",\n\t\t\t\t\tdescription: \"Detach from the shell. Implies --syslog\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pid-file\",\n\t\t\t\t\tdescription: \"Save the process id in the provided file\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"file\", template: \"filepaths\" },\n\t\t\t\t\texclusiveOn: [\"--inetd\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--user\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Change daemon’s uid and gid before entering the service loop. When only --user is given without --group, the primary group ID for the user is used. The values of the option are given to getpwnam(3) and getgrnam(3) and numeric IDs are not supported\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\texclusiveOn: [\"--inetd\"],\n\t\t\t\t\targs: { name: \"user\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--group\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Change daemon’s gid before entering the service loop. The value of this option is given to getgrnam(3) and numeric IDs are not supported\",\n\t\t\t\t\texclusiveOn: [\"--inetd\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--enable\",\n\t\t\t\t\tdescription: \"Enable the service site-wide per default\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"service\", suggestions: daemonServices },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--disable\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Disable the service site-wide per default. Note that a service disabled site-wide can still be enabled per repository if it is marked overridable and the repository enables the service with a configuration item\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"service\", suggestions: daemonServices },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-override\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow overriding the site-wide default with per repository configuration. By default, all the services may be overridden\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"service\", suggestions: daemonServices },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--forbid-override\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Forbid overriding the site-wide default with per repository configuration. By default, all the services may be overridden\",\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"service\", suggestions: daemonServices },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--informative-errors\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'When informative errors are turned on, git-daemon will report more verbose errors to the client, differentiating conditions like \"no such repository\" from \"repository not exported\". This is more convenient for clients, but may leak information about the existence of unexported repositories. When informative errors are not enabled, all errors report \"access denied\" to the client',\n\t\t\t\t\texclusiveOn: [\"--no-informative-errors\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-informative-errors\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Turn off informative errors. This option is the default. See --informative-errors for more information\",\n\t\t\t\t\texclusiveOn: [\"--informative-errors\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--access-hook\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Every time a client connects, first run an external command specified by the <path> with service name (e.g. \"upload-pack\"), path to the repository, hostname (%H), canonical hostname (%CH), IP address (%IP), and TCP port (%P) as its command-line arguments. The external command can decide to decline the service by exiting with a non-zero status (or to allow it by exiting with a zero status). It can also look at the $REMOTE_ADDR and $REMOTE_PORT environment variables to learn about the requestor when making this decision.\\n\\nThe external command can optionally write a single line to its standard output to be sent to the requestor as an error message when it declines the service',\n\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\targs: { name: \"path\", template: \"filepaths\" },\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n\tadditionalSuggestions: [\n\t\t{\n\t\t\tname: \"commit -m 'msg'\",\n\t\t\tdescription: \"Git commit shortcut\",\n\t\t\tinsertValue: \"commit -m '{cursor}'\",\n\t\t\ticon: \"fig://template?color=2ecc71&badge=🔥\",\n\t\t\t// type: \"shortcut\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/grep.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"grep\",\n\tdescription:\n\t\t\"Matches patterns in input text. Supports simple patterns and regular expressions\",\n\targs: [\n\t\t{\n\t\t\tname: \"search pattern\",\n\t\t\tsuggestCurrentToken: true,\n\t\t},\n\t\t{\n\t\t\tname: \"file\",\n\t\t\ttemplate: \"filepaths\",\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"--help\",\n\t\t\tdescription:\n\t\t\t\t\"Print a usage message briefly summarizing these command-line options and the bug-reporting address, then exit\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-E\", \"--extended-regexp\"],\n\t\t\tdescription:\n\t\t\t\t\"Interpret PATTERN as an extended regular expression (-E is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-F\", \"--fixed-string\"],\n\t\t\tdescription:\n\t\t\t\t\"Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-G\", \"--basic-regexp\"],\n\t\t\tdescription:\n\t\t\t\t\"Interpret PATTERN as a basic regular expression (BRE, see below). This is the default\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-e\", \"--regexp\"],\n\t\t\tdescription:\n\t\t\t\t\"Use PATTERN as the pattern. This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-). (-e is specified by POSIX.)\",\n\t\t\targs: {\n\t\t\t\tname: \"pattern\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-i\", \"--ignore-case\", \"-y\"],\n\t\t\tdescription:\n\t\t\t\t\"Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-v\", \"--invert-match\"],\n\t\t\tdescription:\n\t\t\t\t\"Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-w\", \"--word-regexp\"],\n\t\t\tdescription:\n\t\t\t\t\"Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-x\", \"--line-regexp\"],\n\t\t\tdescription:\n\t\t\t\t\"Select only those matches that exactly match the whole line. (-x is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-c\", \"--count\"],\n\t\t\tdescription:\n\t\t\t\t\"Suppress normal output; instead print a count of matching lines for each input file. With the -v, --invert-match option, count non-matching lines. (-c is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--color\",\n\t\t\tdescription:\n\t\t\t\t\"Surround the matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields and groups of context lines) with escape sequences to display them in color on the terminal. The colors are defined by the environment variable GREP_COLORS. The deprecated environment variable GREP_COLOR is still supported, but its setting does not have priority\",\n\t\t\targs: {\n\t\t\t\tname: \"WHEN\",\n\t\t\t\tdefault: \"auto\",\n\t\t\t\tsuggestions: [\"never\", \"always\", \"auto\"],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-L\", \"--files-without-match\"],\n\t\t\texclusiveOn: [\"-l\", \"--files-with-matches\"],\n\t\t\tdescription:\n\t\t\t\t\"Suppress normal output; instead print the name of each input file from which no output would normally have been printed. The scanning will stop on the first match\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-l\", \"--files-with-matches\"],\n\t\t\texclusiveOn: [\"-L\", \"--files-without-match\"],\n\t\t\tdescription:\n\t\t\t\t\"Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match. (-l is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-m\", \"--max-count\"],\n\t\t\tdescription:\n\t\t\t\t\"Stop reading a file after NUM matching lines. If the input is standard input from a regular file, and NUM matching lines are output, grep ensures that the standard input is positioned to just after the last matching line before exiting, regardless of the presence of trailing context lines. This enables a calling process to resume a search. When grep stops after NUM matching lines, it outputs any trailing context lines. When the -c or --count option is also used, grep does not output a count greater than NUM. When the -v or --invert-match option is also used, grep stops after outputting NUM non-matching lines\",\n\t\t\targs: {\n\t\t\t\tname: \"NUM\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-o\", \"--only-matching\"],\n\t\t\tdescription:\n\t\t\t\t\"Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-q\", \"--quiet\", \"--silent\"],\n\t\t\tdescription:\n\t\t\t\t\"Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. Also see the -s or --no-messages option. (-q is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-s\", \"--no-messages\"],\n\t\t\tdescription:\n\t\t\t\t\"Suppress error messages about nonexistent or unreadable files. Portability note: unlike GNU grep, 7th Edition Unix grep did not conform to POSIX, because it lacked -q and its -s option behaved like GNU grep's -q option. USG -style grep also lacked -q but its -s option behaved like GNU grep. Portable shell scripts should avoid both -q and -s and should redirect standard and error output to /dev/null instead. (-s is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-b\", \"--byte-offset\"],\n\t\t\tdescription:\n\t\t\t\t\"Print the 0-based byte offset within the input file before each line of output. If -o (--only-matching) is specified, print the offset of the matching part itself\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-H\", \"--with-filename\"],\n\t\t\tdescription:\n\t\t\t\t\"Print the file name for each match. This is the default when there is more than one file to search\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-h\", \"--no-filename\"],\n\t\t\tdescription:\n\t\t\t\t\"Suppress the prefixing of file names on output. This is the default when there is only one file (or only standard input) to search\",\n\t\t},\n\t\t{\n\t\t\tname: \"--label\",\n\t\t\tdescription:\n\t\t\t\t\"Display input actually coming from standard input as input coming from file LABEL. This is especially useful when implementing tools like zgrep, e.g., gzip -cd foo.gz | grep --label=foo -H something\",\n\t\t\targs: {\n\t\t\t\tname: \"LABEL\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-n\", \"--line-number\"],\n\t\t\tdescription:\n\t\t\t\t\"Prefix each line of output with the 1-based line number within its input file. (-n is specified by POSIX.)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-T\", \"--initial-tab\"],\n\t\t\tdescription:\n\t\t\t\t\"Make sure that the first character of actual line content lies on a tab stop, so that the alignment of tabs looks normal. This is useful with options that prefix their output to the actual content: -H,-n, and -b. In order to improve the probability that lines from a single file will all start at the same column, this also causes the line number and byte offset (if present) to be printed in a minimum size field width\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-u\", \"--unix-byte-offsets\"],\n\t\t\tdescription:\n\t\t\t\t\"Report Unix-style byte offsets. This switch causes grep to report byte offsets as if the file were a Unix-style text file, i.e., with CR characters stripped off. This will produce results identical to running grep on a Unix machine. This option has no effect unless -b option is also used; it has no effect on platforms other than MS-DOS and MS -Windows\",\n\t\t},\n\t\t{\n\t\t\tname: \"--null\",\n\t\t\tdescription:\n\t\t\t\t\"Output a zero byte (the ASCII NUL character) instead of the character that normally follows a file name. For example, grep -lZ outputs a zero byte after each file name instead of the usual newline. This option makes the output unambiguous, even in the presence of file names containing unusual characters like newlines. This option can be used with commands like find -print0, perl -0, sort -z, and xargs -0 to process arbitrary file names, even those that contain newline characters\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-A\", \"--after-context\"],\n\t\t\tdescription: \"Print num lines of trailing context after each match\",\n\t\t\targs: {\n\t\t\t\tname: \"NUM\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-B\", \"--before-context\"],\n\t\t\tdescription:\n\t\t\t\t\"Print num lines of leading context before each match. See also the -A and -C options\",\n\t\t\targs: {\n\t\t\t\tname: \"NUM\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-C\", \"--context\"],\n\t\t\tdescription:\n\t\t\t\t\"Print NUM lines of output context. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given\",\n\t\t\targs: {\n\t\t\t\tname: \"NUM\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-a\", \"--text\"],\n\t\t\tdescription:\n\t\t\t\t\"Treat all files as ASCII text. Normally grep will simply print ``Binary file ... matches'' if files contain binary characters. Use of this option forces grep to output lines matching the specified pattern\",\n\t\t},\n\t\t{\n\t\t\tname: \"--binary-files\",\n\t\t\tdescription: \"Controls searching and printing of binary files\",\n\t\t\targs: {\n\t\t\t\tname: \"value\",\n\t\t\t\tdefault: \"binary\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"binary\",\n\t\t\t\t\t\tdescription: \"Search binary files but do not print them\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"without-match\",\n\t\t\t\t\t\tdescription: \"Do not search binary files\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"text\",\n\t\t\t\t\t\tdescription: \"Treat all files as text\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-D\", \"--devices\"],\n\t\t\tdescription: \"Specify the demanded action for devices, FIFOs and sockets\",\n\t\t\targs: {\n\t\t\t\tname: \"action\",\n\t\t\t\tdefault: \"read\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"read\",\n\t\t\t\t\t\tdescription: \"Read as if they were normal files\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"skip\",\n\t\t\t\t\t\tdescription: \"Devices will be silently skipped\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-d\", \"--directories\"],\n\t\t\tdescription: \"Specify the demanded action for directories\",\n\t\t\targs: {\n\t\t\t\tname: \"action\",\n\t\t\t\tdefault: \"read\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"read\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Directories are read in the same manner as normal files\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"skip\",\n\t\t\t\t\t\tdescription: \"Silently ignore the directories\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"recurse\",\n\t\t\t\t\t\tdescription: \"Read directories recursively\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--exclude\",\n\t\t\tdescription:\n\t\t\t\t\"Note that --exclude patterns take priority over --include patterns, and if no --include pattern is specified, all files are searched that are not excluded. Patterns are matched to the full path specified, not only to the filename component\",\n\t\t\targs: {\n\t\t\t\tname: \"GLOB\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--exclude-dir\",\n\t\t\tdescription:\n\t\t\t\t\"If -R is specified, only directories matching the given filename pattern are searched.  Note that --exclude-dir patterns take priority over --include-dir patterns\",\n\t\t\tisRepeatable: true,\n\t\t\targs: {\n\t\t\t\tname: \"dir\",\n\t\t\t\ttemplate: \"folders\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-I\",\n\t\t\tdescription:\n\t\t\t\t\"Ignore binary files. This option is equivalent to --binary-file=without-match option\",\n\t\t},\n\t\t{\n\t\t\tname: \"--include\",\n\t\t\tdescription:\n\t\t\t\t\"If specified, only files matching the given filename pattern are searched. Note that --exclude patterns take priority over --include patterns. Patterns are matched to the full path specified, not only to the filename component\",\n\t\t\targs: {\n\t\t\t\tname: \"GLOB\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--include-dir\",\n\t\t\tdescription:\n\t\t\t\t\"If -R is specified, only directories matching the given filename pattern are searched. Note that --exclude-dir patterns take priority over --include-dir patterns\",\n\t\t\targs: {\n\t\t\t\tname: \"dir\",\n\t\t\t\ttemplate: \"folders\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-R\", \"-r\", \"--recursive\"],\n\t\t\tdescription: \"Recursively search subdirectories listed\",\n\t\t},\n\t\t{\n\t\t\tname: \"--line-buffered\",\n\t\t\tdescription:\n\t\t\t\t\"Force output to be line buffered. By default, output is line buffered when standard output is a terminal and block buffered otherwise\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-U\", \"--binary\"],\n\t\t\tdescription: \"Search binary files, but do not attempt to print them\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-J\", \"-bz2decompress\"],\n\t\t\tdescription:\n\t\t\t\t\"Decompress the bzip2(1) compressed file before looking for the text\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-V\", \"--version\"],\n\t\t\tdescription: \"Print version number of grep to the standard output stream\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-P\", \"--perl-regexp\"],\n\t\t\tdescription: \"Interpret pattern as a Perl regular expression\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-f\", \"--file\"],\n\t\t\tdescription:\n\t\t\t\t\"Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)\",\n\t\t\targs: {\n\t\t\t\tname: \"FILE\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t],\n\tadditionalSuggestions: [\n\t\t{\n\t\t\tname: \"-RIn\",\n\t\t\tdescription:\n\t\t\t\t\"Search for a pattern [R]ecursively in the current directory, showing matching line [n]umbers, [I]gnoring non-text files\",\n\t\t\tinsertValue: \"-RI{cursor}\",\n\t\t},\n\t\t{\n\t\t\tname: \"-Hn\",\n\t\t\tdescription:\n\t\t\t\t\"Print file name with the corresponding line number (n) for each match\",\n\t\t\tinsertValue: \"-H{cursor}\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/head.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"head\",\n\tdescription: \"Output the first part of files\",\n\targs: {\n\t\tname: \"file\",\n\t\ttemplate: \"filepaths\",\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: [\"-c\", \"--bytes\"],\n\t\t\tdescription: \"Print the first [numBytes] bytes of each file\",\n\t\t\targs: { name: \"numBytes\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-n\", \"--lines\"],\n\t\t\tdescription: \"Print the first [numLines] lines instead of the first 10\",\n\t\t\targs: { name: \"numLines\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-q\", \"--quiet\", \"--silent\"],\n\t\t\tdescription: \"Never print headers giving file names\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\tdescription: \"Always print headers giving file names\",\n\t\t},\n\t\t{ name: \"--help\", description: \"Display this help and exit\" },\n\t\t{\n\t\t\tname: \"--version\",\n\t\t\tdescription: \"Output version information and exit\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/kill.ts",
    "content": "// Compatibility: macOS\n\nfunction processIcon(path: string): string {\n\tconst idx = path.indexOf(\".app/\");\n\tif (idx === -1) {\n\t\treturn \"fig://icon?type=gear\";\n\t}\n\treturn \"fig://\" + path.slice(0, idx + 4);\n}\n\nconst completionSpec: Fig.Spec = {\n\tname: \"kill\",\n\tdescription: \"Terminate or signal a process\",\n\targs: {\n\t\tname: \"pid\",\n\t\tisVariadic: true,\n\t\tgenerators: {\n\t\t\tscript: [\"bash\", \"-c\", \"ps axo pid,comm | sed 1d\"],\n\t\t\tpostProcess: (result: string) => {\n\t\t\t\treturn result.split(\"\\n\").map((line) => {\n\t\t\t\t\tconst [pid, path] = line.trim().split(/\\s+/);\n\t\t\t\t\tconst name = path.slice(path.lastIndexOf(\"/\") + 1);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: pid,\n\t\t\t\t\t\tdescription: path,\n\t\t\t\t\t\tdisplayName: `${pid} (${name})`,\n\t\t\t\t\t\ticon: processIcon(path),\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription: \"A symbolic signal name specifying the signal to be sent\",\n\t\t\targs: {\n\t\t\t\tname: \"signal_name\",\n\t\t\t\tgenerators: {\n\t\t\t\t\t// Bash's `kill` builtin has different output to /bin/kill\n\t\t\t\t\tscript: [\"env\", \"kill\", \"-l\"],\n\t\t\t\t\tpostProcess: (out) =>\n\t\t\t\t\t\tout.match(/\\w+/g)?.map((name) => ({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tdescription: `Send ${name} instead of TERM`,\n\t\t\t\t\t\t\ticon: \"fig://icon?type=string\",\n\t\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription:\n\t\t\t\t\"If no operand is given, list the signal names; otherwise, write the signal name corresponding to exit_status\",\n\t\t\targs: {\n\t\t\t\tname: \"exit_status\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/killall.ts",
    "content": "// Linux incompatible\n\nconst signals = [\n\t\"hup\",\n\t\"int\",\n\t\"quit\",\n\t\"ill\",\n\t\"trap\",\n\t\"abrt\",\n\t\"emt\",\n\t\"fpe\",\n\t\"kill\",\n\t\"bus\",\n\t\"segv\",\n\t\"sys\",\n\t\"pipe\",\n\t\"alrm\",\n\t// This is the default signal\n\t// \"term\",\n\t\"urg\",\n\t\"stop\",\n\t\"tstp\",\n\t\"cont\",\n\t\"chld\",\n\t\"ttin\",\n\t\"ttou\",\n\t\"io\",\n\t\"xcpu\",\n\t\"xfsz\",\n\t\"vtalrm\",\n\t\"prof\",\n\t\"winch\",\n\t\"info\",\n\t\"usr1\",\n\t\"usr2\",\n];\n\nconst completionSpec: Fig.Spec = {\n\tname: \"killall\",\n\tdescription: \"Kill processes by name\",\n\targs: {\n\t\tname: \"process_name\",\n\t\tisVariadic: true,\n\t\tgenerators: {\n\t\t\t// All processes, only display the path\n\t\t\tscript: [\"bash\", \"-c\", \"ps -A -o comm | sort -u\"],\n\t\t\tpostProcess: (out) =>\n\t\t\t\tout\n\t\t\t\t\t.trim()\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((path) => {\n\t\t\t\t\t\tconst appExtIndex = path.indexOf(\".app/\");\n\t\t\t\t\t\tconst isApp = appExtIndex !== -1;\n\t\t\t\t\t\tconst name = path.slice(path.lastIndexOf(\"/\") + 1);\n\t\t\t\t\t\tconst nameChars = new Set(name);\n\t\t\t\t\t\tconst badChars = [\"(\", \"_\", \".\"];\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tdescription: path,\n\t\t\t\t\t\t\tpriority:\n\t\t\t\t\t\t\t\t!badChars.some((char) => nameChars.has(char)) && isApp\n\t\t\t\t\t\t\t\t\t? 51\n\t\t\t\t\t\t\t\t\t: 40,\n\t\t\t\t\t\t\ticon: isApp\n\t\t\t\t\t\t\t\t? \"fig://\" + path.slice(0, appExtIndex + 4)\n\t\t\t\t\t\t\t\t: \"fig://icon?type=gear\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t},\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription: \"Be verbose (dry run) and display number of user processes\",\n\t\t},\n\t\t{\n\t\t\tname: \"-e\",\n\t\t\tdescription:\n\t\t\t\t\"Use the effective user ID instead of the real user ID for matching processes with -u\",\n\t\t},\n\t\t{\n\t\t\tname: \"-help\",\n\t\t\tdescription: \"Display help and exit\",\n\t\t},\n\t\t{\n\t\t\tname: \"-I\",\n\t\t\tdescription: \"Request confirmation before killing each process\",\n\t\t},\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription: \"List the names of the available signals and exit\",\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription: \"Match the process name as a regular expression\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription: \"Be verbose\",\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription: \"Be verbose (dry run)\",\n\t\t},\n\t\t...signals.map((signal) => ({\n\t\t\tname: \"-SIG\" + signal.toUpperCase(),\n\t\t\tdescription: `Send ${signal.toUpperCase()} instead of TERM`,\n\t\t})),\n\t\t{\n\t\t\tname: \"-u\",\n\t\t\tdescription:\n\t\t\t\t\"Limit potentially matching processes to those belonging to the user\",\n\t\t\targs: {\n\t\t\t\tname: \"user\",\n\t\t\t\tgenerators: {\n\t\t\t\t\tscript: [\"bash\", \"-c\", \"dscl . -list /Users | grep -v '^_'\"],\n\t\t\t\t\tpostProcess: (out) =>\n\t\t\t\t\t\tout\n\t\t\t\t\t\t\t.trim()\n\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t.map((username) => ({\n\t\t\t\t\t\t\t\tname: username,\n\t\t\t\t\t\t\t\ticon: \"fig://template?badge=👤\",\n\t\t\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-t\",\n\t\t\tdescription:\n\t\t\t\t\"Limit matching processes to those running on the specified TTY\",\n\t\t\targs: {\n\t\t\t\tname: \"tty\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription: \"Limit matching processes to those matching the given name\",\n\t\t\targs: {\n\t\t\t\tname: \"name\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-q\",\n\t\t\tdescription: \"Suppress error message if no processes are matched\",\n\t\t},\n\t\t{\n\t\t\tname: \"-z\",\n\t\t\tdescription: \"Do not skip zombies\",\n\t\t},\n\t],\n};\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/less.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"less\",\n\tdescription: \"Opposite of more\",\n\targs: {\n\t\tisVariadic: true,\n\t\ttemplate: \"filepaths\",\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: [\"-?\", \"--help\"],\n\t\t\tdescription:\n\t\t\t\t'This option displays a summary of the commands accepted by less (the same as the h command).  (Depending on how your shell interprets the question mark, it may be necessary to quote the question mark, thus: \"-?\"',\n\t\t},\n\t\t{\n\t\t\tname: [\"-a\", \"--search-skip-screen\"],\n\t\t\tdescription: `By default, forward searches start at the top of the displayed\nscreen and backwards searches start at the bottom of the\ndisplayed screen (except for repeated searches invoked by the n\nor N commands, which start after or before the \"target\" line\nrespectively; see the -j option for more about the target line).\nThe -a option causes forward searches to instead start at the\nbottom of the screen and backward searches to start at the top\nof the screen, thus skipping all lines displayed on the screen`,\n\t\t},\n\t\t{\n\t\t\tname: [\"-A\", \"--SEARCH-SKIP-SCREEN\"],\n\t\t\tdescription: `Causes all forward searches (not just non-repeated searches) to\nstart just after the target line, and all backward searches to\nstart just before the target line.  Thus, forward searches will\nskip part of the displayed screen (from the first line up to and\nincluding the target line).  Similarly backwards searches will\nskip the displayed screen from the last line up to and including\nthe target line.  This was the default behavior in less versions\nprior to 441`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-b\", \"--buffers\"],\n\t\t\targs: { name: \"n\" },\n\t\t\tdescription: `Specifies the amount of buffer space less will use for each\nfile, in units of kilobytes (1024 bytes).  By default 64 KB of\nbuffer space is used for each file (unless the file is a pipe;\nsee the -B option).  The -b option specifies instead that n\nkilobytes of buffer space should be used for each file.  If n is\n-1, buffer space is unlimited; that is, the entire file can be\nread into memory`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-B\", \"--auto-buffers\"],\n\t\t\tdescription: `By default, when data is read from a pipe, buffers are allocated\nautomatically as needed.  If a large amount of data is read from\nthe pipe, this can cause a large amount of memory to be\nallocated.  The -B option disables this automatic allocation of\nbuffers for pipes, so that only 64 KB (or the amount of space\nspecified by the -b option) is used for the pipe.  Warning: use\nof -B can result in erroneous display, since only the most\nrecently viewed part of the piped data is kept in memory; any\nearlier data is lost`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-c\", \"--clear-screen\"],\n\t\t\tdescription: `Causes full screen repaints to be painted from the top line\ndown.  By default, full screen repaints are done by scrolling\nfrom the bottom of the screen`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-C\", \"--CLEAR-SCREEN\"],\n\t\t\tdescription: `Same as -c, for compatibility with older versions of less`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-d\", \"--dumb\"],\n\t\t\tdescription: `The -d option suppresses the error message normally displayed if\nthe terminal is dumb; that is, lacks some important capability,\nsuch as the ability to clear the screen or scroll backward.  The\n-d option does not otherwise change the behavior of less on a\ndumb terminal`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-D\", \"--color\"],\n\t\t\targs: { name: \"xcolor\" },\n\t\t\tdescription: `Changes the color of different parts of the displayed text.  x\nis a single character which selects the type of text whose color\nis being set:\nB      Binary characters.\nC      Control characters.\nE      Errors and informational messages.\nM      Mark letters in the status column.\nN      Line numbers enabled via the -N option.\nP      Prompts.\nR      The rscroll character.\nS      Search results.\nW      The highlight enabled via the -w option.\nd      Bold text.\nk      Blinking text.\ns      Standout text.\nu      Underlined text.\nThe uppercase letters can be used only when the --use-color\noption is enabled.  When text color is specified by both an\nuppercase letter and a lowercase letter, the uppercase letter\ntakes precedence.  For example, error messages are normally\ndisplayed as standout text.  So if both \"s\" and \"E\" are given a\ncolor, the \"E\" color applies to error messages, and the \"s\"\ncolor applies to other standout text.  The \"d\" and \"u\" letters\nrefer to bold and underline text formed by overstriking with\nbackspaces (see the -u option), not to text using ANSI escape\nsequences with the -R option.\nA lowercase letter may be followed by a + to indicate that both\nthe normal format change and the specified color should both be\nused.  For example, -Dug displays underlined text as green\nwithout underlining; the green color has replaced the usual\nunderline formatting.  But -Du+g displays underlined text as\nboth green and in underlined format.\ncolor is either a 4-bit color string or an 8-bit color string:\nA 4-bit color string is zero, one or two characters, where the\nfirst character specifies the foreground color and the second\nspecifies the background color as follows:\nb      Blue\nc      Cyan\ng      Green\nk      Black\nm      Magenta\nr      Red\nw      White\ny      Yellow\nThe corresponding upper-case letter denotes a brighter shade of\nthe color.  For example, -DNGk displays line numbers as bright\ngreen text on a black background, and -DEbR displays error\nmessages as blue text on a bright red background.  If either\ncharacter is a \"-\" or is omitted, the corresponding color is set\nto that of normal text.\nAn 8-bit color string is one or two decimal integers separated\nby a dot, where the first integer specifies the foreground color\nand the second specifies the background color.  Each integer is\na value between 0 and 255 inclusive which selects a \"CSI 38;5\"\ncolor value (see\nhttps://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters)\nIf either integer is a \"-\" or is omitted, the corresponding\ncolor is set to that of normal text.  On MS-DOS versions of\nless, 8-bit color is not supported; instead, decimal values are\ninterpreted as 4-bit CHAR_INFO.Attributes values (see\nhttps://docs.microsoft.com/en-us/windows/console/char-info-str)`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-e\", \"--quit-at-eof\"],\n\t\t\tdescription: `Causes less to automatically exit the second time it reaches\nend-of-file.  By default, the only way to exit less is via the\n\"q\" command`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-E\", \"--QUIT-AT-EOF\"],\n\t\t\tdescription: `Causes less to automatically exit the first time it reaches end-\nof-file`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-f\", \"--force\"],\n\t\t\tdescription: `Forces non-regular files to be opened.  (A non-regular file is a\ndirectory or a device special file.)  Also suppresses the\nwarning message when a binary file is opened.  By default, less\nwill refuse to open non-regular files.  Note that some operating\nsystems will not allow directories to be read, even if -f is\nset`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-F\", \"--quit-if-one-screen\"],\n\t\t\tdescription: `Causes less to automatically exit if the entire file can be\ndisplayed on the first screen`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-g\", \"--hilite-search\"],\n\t\t\tdescription: `Normally, less will highlight ALL strings which match the last\nsearch command.  The -g option changes this behavior to\nhighlight only the particular string which was found by the last\nsearch command.  This can cause less to run somewhat faster than\nthe default`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-G\", \"--HILITE-SEARCH\"],\n\t\t\tdescription: `The -G option suppresses all highlighting of strings found by\nsearch commands`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-h\", \"--max-back-scroll\"],\n\t\t\targs: { name: \"n\" },\n\t\t\tdescription: `Specifies a maximum number of lines to scroll backward.  If it\nis necessary to scroll backward more than n lines, the screen is\nrepainted in a forward direction instead.  (If the terminal does\nnot have the ability to scroll backward, -h0 is implied.)`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-i\", \"--ignore-case\"],\n\t\t\tdescription: `Causes searches to ignore case; that is, uppercase and lowercase\nare considered identical.  This option is ignored if any\nuppercase letters appear in the search pattern; in other words,\nif a pattern contains uppercase letters, then that search does\nnot ignore case`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-I\", \"--IGNORE-CASE\"],\n\t\t\tdescription: `Like -i, but searches ignore case even if the pattern contains\nuppercase letters`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-j\", \"--jump-target\"],\n\t\t\targs: { name: \"n\" },\n\t\t\tdescription: `Specifies a line on the screen where the \"target\" line is to be\npositioned.  The target line is the line specified by any\ncommand to search for a pattern, jump to a line number, jump to\na file percentage or jump to a tag.  The screen line may be\nspecified by a number: the top line on the screen is 1, the next\nis 2, and so on.  The number may be negative to specify a line\nrelative to the bottom of the screen: the bottom line on the\nscreen is -1, the second to the bottom is -2, and so on.\nAlternately, the screen line may be specified as a fraction of\nthe height of the screen, starting with a decimal point: .5 is\nin the middle of the screen, .3 is three tenths down from the\nfirst line, and so on.  If the line is specified as a fraction,\nthe actual line number is recalculated if the terminal window is\nresized, so that the target line remains at the specified\nfraction of the screen height.  If any form of the -j option is\nused, repeated forward searches (invoked with \"n\" or \"N\") begin\nat the line immediately after the target line, and repeated\nbackward searches begin at the target line, unless changed by -a\nor -A.  For example, if \"-j4\" is used, the target line is the\nfourth line on the screen, so forward searches begin at the\nfifth line on the screen.  However nonrepeated searches (invoked\nwith \"/\" or \"?\") always begin at the start or end of the current\nscreen respectively`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-J\", \"--status-column\"],\n\t\t\tdescription: `Displays a status column at the left edge of the screen.  The\nstatus column shows the lines that matched the current search,\nand any lines that are marked (via the m or M command)`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-k\", \"--lesskey-file\"],\n\t\t\targs: { name: \"filename\", template: \"filepaths\" },\n\t\t\tdescription: `Causes less to open and interpret the named file as a lesskey(1)\nfile.  Multiple -k options may be specified.  If the LESSKEY or\nLESSKEY_SYSTEM environment variable is set, or if a lesskey file\nis found in a standard place (see KEY BINDINGS), it is also used\nas a lesskey file`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-K\", \"--quit-on-intr\"],\n\t\t\tdescription: `Causes less to exit immediately (with status 2) when an\ninterrupt character (usually ^C) is typed.  Normally, an\ninterrupt character causes less to stop whatever it is doing and\nreturn to its command prompt.  Note that use of this option\nmakes it impossible to return to the command prompt from the \"F\"\ncommand`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-L\", \"--no-lessopen\"],\n\t\t\tdescription: `Ignore the LESSOPEN environment variable (see the INPUT\nPREPROCESSOR section below).  This option can be set from within\nless, but it will apply only to files opened subsequently, not\nto the file which is currently open`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-m\", \"--long-prompt\"],\n\t\t\tdescription: `Causes less to prompt verbosely (like more), with the percent\ninto the file.  By default, less prompts with a colon`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-M\", \"--LONG-PROMPT\"],\n\t\t\tdescription: `Causes less to prompt even more verbosely than more`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-n\", \"--line-numbers\"],\n\t\t\tdescription: `Suppresses line numbers.  The default (to use line numbers) may\ncause less to run more slowly in some cases, especially with a\nvery large input file.  Suppressing line numbers with the -n\noption will avoid this problem.  Using line numbers means: the\nline number will be displayed in the verbose prompt and in the =\ncommand, and the v command will pass the current line number to\nthe editor (see also the discussion of LESSEDIT in PROMPTS\nbelow)`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-N\", \"--LINE-NUMBERS\"],\n\t\t\tdescription: `Causes a line number to be displayed at the beginning of each\nline in the display`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-o\", \"--log-file\"],\n\t\t\targs: { name: \"filename\", template: \"filepaths\" },\n\t\t\tdescription: `Causes less to copy its input to the named file as it is being\nviewed.  This applies only when the input file is a pipe, not an\nordinary file.  If the file already exists, less will ask for\nconfirmation before overwriting it`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-O\", \"--LOG-FILE\"],\n\t\t\targs: { name: \"filename\", template: \"filepaths\" },\n\t\t\tdescription: `The -O option is like -o, but it will overwrite an existing file\nwithout asking for confirmation.\nIf no log file has been specified, the -o and -O options can be\nused from within less to specify a log file.  Without a file\nname, they will simply report the name of the log file.  The \"s\"\ncommand is equivalent to specifying -o from within less`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-p\", \"--pattern\"],\n\t\t\targs: { name: \"pattern\" },\n\t\t\tdescription: `The -p option on the command line is equivalent to specifying\n+/pattern; that is, it tells less to start at the first\noccurrence of pattern in the file`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-P\", \"--prompt\"],\n\t\t\targs: { name: \"prompt\" },\n\t\t\tdescription: `Provides a way to tailor the three prompt styles to your own\npreference.  This option would normally be put in the LESS\nenvironment variable, rather than being typed in with each less\ncommand.  Such an option must either be the last option in the\nLESS variable, or be terminated by a dollar sign.\n-Ps followed by a string changes the default (short) prompt to\nthat string.\n-Pm changes the medium (-m) prompt.\n-PM changes the long (-M) prompt.\n-Ph changes the prompt for the help screen.\n-P= changes the message printed by the = command.\n-Pw changes the message printed while waiting for data (in the\nF command).\nAll prompt strings consist of a sequence of letters and special\nescape sequences.  See the section on PROMPTS for more details`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-q\", \"--quiet\", \"--silent\"],\n\t\t\tdescription: `Causes moderately \"quiet\" operation: the terminal bell is not\nrung if an attempt is made to scroll past the end of the file or\nbefore the beginning of the file.  If the terminal has a \"visual\nbell\", it is used instead.  The bell will be rung on certain\nother errors, such as typing an invalid character.  The default\nis to ring the terminal bell in all such cases`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-Q\", \"--QUIET\", \"--SILENT\"],\n\t\t\tdescription: `Causes totally \"quiet\" operation: the terminal bell is never\nrung.  If the terminal has a \"visual bell\", it is used in all\ncases where the terminal bell would have been rung`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-r\", \"--raw-control-chars\"],\n\t\t\tdescription: `Causes \"raw\" control characters to be displayed.  The default is\nto display control characters using the caret notation; for\nexample, a control-A (octal 001) is displayed as \"^A\".  Warning:\nwhen the -r option is used, less cannot keep track of the actual\nappearance of the screen (since this depends on how the screen\nresponds to each type of control character).  Thus, various\ndisplay problems may result, such as long lines being split in\nthe wrong place.\nUSE OF THE -r OPTION IS NOT RECOMMENDED`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-R\", \"--RAW-CONTROL-CHARS\"],\n\t\t\tdescription: `Like -r, but only ANSI \"color\" escape sequences and OSC 8\nhyperlink sequences are output in \"raw\" form.  Unlike -r, the\nscreen appearance is maintained correctly, provided that there\nare no escape sequences in the file other than these types of\nescape sequences.  Color escape sequences are only supported\nwhen the color is changed within one line, not across lines.  In\nother words, the beginning of each line is assumed to be normal\n(non-colored), regardless of any escape sequences in previous\nlines.  For the purpose of keeping track of screen appearance,\nthese escape sequences are assumed to not move the cursor.\nOSC 8 hyperlinks are sequences of the form:\nESC ] 8 ; \nANSI color escape sequences are sequences of the form:\nESC [ ... m\nwhere the \"...\" is zero or more color specification characters.\nYou can make less think that characters other than \"m\" can end\nANSI color escape sequences by setting the environment variable\nLESSANSIENDCHARS to the list of characters which can end a color\nescape sequence.  And you can make less think that characters\nother than the standard ones may appear between the ESC and the\nm by setting the environment variable LESSANSIMIDCHARS to the\nlist of characters which can appear`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-s\", \"--squeeze-blank-lines\"],\n\t\t\tdescription: `Causes consecutive blank lines to be squeezed into a single\nblank line.  This is useful when viewing nroff output`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-S\", \"--chop-long-lines\"],\n\t\t\tdescription: `Causes lines longer than the screen width to be chopped\n(truncated) rather than wrapped.  That is, the portion of a long\nline that does not fit in the screen width is not displayed\nuntil you press RIGHT-ARROW.  The default is to wrap long lines;\nthat is, display the remainder on the next line`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-t\", \"--tag\"],\n\t\t\targs: { name: \"tag\" },\n\t\t\tdescription: `The -t option, followed immediately by a TAG, will edit the file\ncontaining that tag.  For this to work, tag information must be\navailable; for example, there may be a file in the current\ndirectory called \"tags\", which was previously built by ctags(1)\nor an equivalent command.  If the environment variable\nLESSGLOBALTAGS is set, it is taken to be the name of a command\ncompatible with global(1), and that command is executed to find\nthe tag.  (See http://www.gnu.org/software/global/global.html).\nThe -t option may also be specified from within less (using the\n- command) as a way of examining a new file.  The command \":t\"\nis equivalent to specifying -t from within less`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-T\", \"--tag-file\"],\n\t\t\targs: { name: \"tagsfile\" },\n\t\t\tdescription: `Specifies a tags file to be used instead of \"tags\"`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-u\", \"--underline-special\"],\n\t\t\tdescription: `Causes backspaces and carriage returns to be treated as\nprintable characters; that is, they are sent to the terminal\nwhen they appear in the input`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-U\", \"--UNDERLINE-SPECIAL\"],\n\t\t\tdescription: `Causes backspaces, tabs, carriage returns and \"formatting\ncharacters\" (as defined by Unicode) to be treated as control\ncharacters; that is, they are handled as specified by the -r\noption.\nBy default, if neither -u nor -U is given, backspaces which\nappear adjacent to an underscore character are treated\nspecially: the underlined text is displayed using the terminal's\nhardware underlining capability.  Also, backspaces which appear\nbetween two identical characters are treated specially: the\noverstruck text is printed using the terminal's hardware\nboldface capability.  Other backspaces are deleted, along with\nthe preceding character.  Carriage returns immediately followed\nby a newline are deleted.  Other carriage returns are handled as\nspecified by the -r option.  Unicode formatting characters, such\nas the Byte Order Mark, are sent to the terminal.  Text which is\noverstruck or underlined can be searched for if neither -u nor\n-U is in effect`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-V\", \"--version\"],\n\t\t\tdescription: `Displays the version number of less`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-w\", \"--hilite-unread\"],\n\t\t\tdescription: `Temporarily highlights the first \"new\" line after a forward\nmovement of a full page.  The first \"new\" line is the line\nimmediately following the line previously at the bottom of the\nscreen.  Also highlights the target line after a g or p command.\nThe highlight is removed at the next command which causes\nmovement.  The entire line is highlighted, unless the -J option\nis in effect, in which case only the status column is\nhighlighted`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-W\", \"--HILITE-UNREAD\"],\n\t\t\tdescription: `Like -w, but temporarily highlights the first new line after any\nforward movement command larger than one line`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-x\", \"--tabs=\"],\n\t\t\targs: { name: \"n,...\" },\n\t\t\tdescription: `Sets tab stops.  If only one n is specified, tab stops are set\nat multiples of n.  If multiple values separated by commas are\nspecified, tab stops are set at those positions, and then\ncontinue with the same spacing as the last two.  For example,\n-x9,17 will set tabs at positions 9, 17, 25, 33, etc.  The\ndefault for n is 8`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-X\", \"--no-init\"],\n\t\t\tdescription: `Disables sending the termcap initialization and deinitialization\nstrings to the terminal.  This is sometimes desirable if the\ndeinitialization string does something unnecessary, like\nclearing the screen`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-y\", \"--max-forw-scroll\"],\n\t\t\targs: { name: \"n\" },\n\t\t\tdescription: `Specifies a maximum number of lines to scroll forward.  If it is\nnecessary to scroll forward more than n lines, the screen is\nrepainted instead.  The -c or -C option may be used to repaint\nfrom the top of the screen if desired.  By default, any forward\nmovement causes scrolling`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-z\", \"--window\"],\n\t\t\targs: { name: \"n\" },\n\t\t\tdescription: `Changes the default scrolling window size to n lines.  The\ndefault is one screenful.  The z and w commands can also be used\nto change the window size.  The \"z\" may be omitted for\ncompatibility with some versions of more.  If the number n is\nnegative, it indicates n lines less than the current screen\nsize.  For example, if the screen is 24 lines, -z-4 sets the\nscrolling window to 20 lines.  If the screen is resized to 40\nlines, the scrolling window automatically changes to 36 lines`,\n\t\t},\n\n\t\t{\n\t\t\tname: \"--quotes\",\n\t\t\tdescription: `Changes the filename quoting character.  This may be necessary\nif you are trying to name a file which contains both spaces and\nquote characters.  Followed by a single character, this changes\nthe quote character to that character.  Filenames containing a\nspace should then be surrounded by that character rather than by\ndouble quotes.  Followed by two characters, changes the open\nquote to the first character, and the close quote to the second\ncharacter.  Filenames containing a space should then be preceded\nby the open quote character and followed by the close quote\ncharacter.  Note that even after the quote characters are\nchanged, this option remains -\" (a dash followed by a double\nquote)`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-~\", \"--tilde\"],\n\t\t\tdescription: `Normally lines after end of file are displayed as a single tilde\n(~).  This option causes lines after end of file to be displayed\nas blank lines`,\n\t\t},\n\n\t\t{\n\t\t\tname: [\"-#\", \"--shift\"],\n\t\t\tdescription: `Specifies the default number of positions to scroll horizontally\nin the RIGHTARROW and LEFTARROW commands.  If the number\nspecified is zero, it sets the default number of positions to\none half of the screen width.  Alternately, the number may be\nspecified as a fraction of the width of the screen, starting\nwith a decimal point: .5 is half of the screen width, .3 is\nthree tenths of the screen width, and so on.  If the number is\nspecified as a fraction, the actual number of scroll positions\nis recalculated if the terminal window is resized, so that the\nactual scroll remains at the specified fraction of the screen\nwidth`,\n\t\t},\n\n\t\t{\n\t\t\tname: \"--follow-name\",\n\t\t\tdescription: `Normally, if the input file is renamed while an F command is\nexecuting, less will continue to display the contents of the\noriginal file despite its name change.  If --follow-name is\nspecified, during an F command less will periodically attempt to\nreopen the file by name.  If the reopen succeeds and the file is\na different file from the original (which means that a new file\nhas been created with the same name as the original (now\nrenamed) file), less will display the contents of that new file`,\n\t\t},\n\t\t{\n\t\t\tname: \"--incsearch\",\n\t\t\tdescription: `Subsequent search commands will be \"incremental\"; that is, less\nwill advance to the next line containing the search pattern as\neach character of the pattern is typed in`,\n\t\t},\n\n\t\t{\n\t\t\tname: \"--line-num-width\",\n\t\t\tdescription: `Sets the minimum width of the line number field when the -N\noption is in effect.  The default is 7 characters`,\n\t\t},\n\t\t{\n\t\t\tname: \"--mouse\",\n\t\t\tdescription: `Enables mouse input: scrolling the mouse wheel down moves\nforward in the file, scrolling the mouse wheel up moves\nbackwards in the file, and clicking the mouse sets the \"#\" mark\nto the line where the mouse is clicked.  The number of lines to\nscroll when the wheel is moved can be set by the --wheel-lines\noption.  Mouse input works only on terminals which support X11\nmouse reporting, and on the Windows version of less`,\n\t\t},\n\t\t{\n\t\t\tname: \"--MOUSE\",\n\t\t\tdescription: `Like --mouse, except the direction scrolled on mouse wheel\nmovement is reversed`,\n\t\t},\n\t\t{\n\t\t\tname: \"--no-keypad\",\n\t\t\tdescription: `Disables sending the keypad initialization and deinitialization\nstrings to the terminal.  This is sometimes useful if the keypad\nstrings make the numeric keypad behave in an undesirable manner`,\n\t\t},\n\t\t{\n\t\t\tname: \"--no-histdups\",\n\t\t\tdescription: `This option changes the behavior so that if a search string or\nfile name is typed in, and the same string is already in the\nhistory list, the existing copy is removed from the history list\nbefore the new one is added.  Thus, a given string will appear\nonly once in the history list.  Normally, a string may appear\nmultiple times`,\n\t\t},\n\t\t{\n\t\t\tname: \"--rscroll\",\n\t\t\tdescription: `This option changes the character used to mark truncated lines.\nIt may begin with a two-character attribute indicator like\nLESSBINFMT does.  If there is no attribute indicator, standout\nis used.  If set to \"-\", truncated lines are not marked`,\n\t\t},\n\t\t{\n\t\t\tname: \"--save-marks\",\n\t\t\tdescription: `Save marks in the history file, so marks are retained across\ndifferent invocations of less`,\n\t\t},\n\t\t{\n\t\t\tname: \"--status-col-width\",\n\t\t\tdescription: `Sets the width of the status column when the -J option is in\neffect.  The default is 2 characters`,\n\t\t},\n\t\t{\n\t\t\tname: \"--use-backslash\",\n\t\t\tdescription: `This option changes the interpretations of options which follow\nthis one.  After the --use-backslash option, any backslash in an\noption string is removed and the following character is taken\nliterally.  This allows a dollar sign to be included in option\nstrings`,\n\t\t},\n\t\t{\n\t\t\tname: \"--use-color\",\n\t\t\tdescription: `Enables the colored text in various places.  The -D option can\nbe used to change the colors.  Colored text works only if the\nterminal supports ANSI color escape sequences (as defined in\nECMA-48 SGR; see\nhttps://www.ecma-international.org/publications-and-\nstandards/standards/ecma-48)`,\n\t\t},\n\t\t{\n\t\t\tname: \"--wheel-lines\",\n\t\t\targs: { name: \"n\" },\n\t\t\tdescription: `Set the number of lines to scroll when the mouse wheel is rolled`,\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/ls.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"ls\",\n\tdescription: \"List directory contents\",\n\targs: {\n\t\tisVariadic: true,\n\t\ttemplate: [\"filepaths\", \"folders\"],\n\t\tfilterStrategy: \"fuzzy\",\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-@\",\n\t\t\tdescription:\n\t\t\t\t\"Display extended attribute keys and sizes in long (-l) output\",\n\t\t},\n\t\t{\n\t\t\tname: \"-1\",\n\t\t\tdescription:\n\t\t\t\t\"(The numeric digit ``one''.)  Force output to be one entry per line.  This is the default when output is not to a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-A\",\n\t\t\tdescription:\n\t\t\t\t\"List all entries except for . and ...  Always set for the super-user\",\n\t\t},\n\t\t{\n\t\t\tname: \"-a\",\n\t\t\tdescription: \"Include directory entries whose names begin with a dot (.)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-B\",\n\t\t\tdescription:\n\t\t\t\t\"Force printing of non-printable characters (as defined by ctype(3) and current locale settings) in file names as xxx, where xxx is the numeric value of the character in octal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-b\",\n\t\t\tdescription: \"As -B, but use C escape codes whenever possible\",\n\t\t},\n\t\t{\n\t\t\tname: \"-C\",\n\t\t\tdescription:\n\t\t\t\t\"Force multi-column output; this is the default when output is to a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription:\n\t\t\t\t\"Use time when file status was last changed for sorting (-t) or long printing (-l)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription:\n\t\t\t\t\"Directories are listed as plain files (not searched recursively)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-e\",\n\t\t\tdescription:\n\t\t\t\t\"Print the Access Control List (ACL) associated with the file, if present, in long (-l) output\",\n\t\t},\n\t\t{\n\t\t\tname: \"-F\",\n\t\t\tdescription:\n\t\t\t\t\"Display a slash (/) immediately after each pathname that is a directory, an asterisk (*) after each that is executable, an at sign (@) after each symbolic link, an equals sign (=) after each socket, a percent sign (%) after each whiteout, and a vertical bar (|) after each that is a FIFO\",\n\t\t},\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription: \"Output is not sorted.  This option turns on the -a option\",\n\t\t},\n\t\t{\n\t\t\tname: \"-G\",\n\t\t\tdescription:\n\t\t\t\t\"Enable colorized output.  This option is equivalent to defining CLICOLOR in the environment.  (See below.)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-g\",\n\t\t\tdescription:\n\t\t\t\t\"This option is only available for compatibility with POSIX; it is used to display the group name in the long (-l) format output (the owner name is suppressed)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-H\",\n\t\t\tdescription:\n\t\t\t\t\"Symbolic links on the command line are followed.  This option is assumed if none of the -F, -d, or -l options are specified\",\n\t\t},\n\t\t{\n\t\t\tname: \"-h\",\n\t\t\tdescription:\n\t\t\t\t\"When used with the -l option, use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte in order to reduce the number of digits to three or less using base 2 for sizes\",\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"For each file, print the file's file serial number (inode number)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-k\",\n\t\t\tdescription:\n\t\t\t\t\"If the -s option is specified, print the file size allocation in kilobytes, not blocks.  This option overrides the environment variable BLOCKSIZE\",\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription:\n\t\t\t\t\"Follow all symbolic links to final target and list the file or directory the link references rather than the link itself.  This option cancels the -P option\",\n\t\t},\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription:\n\t\t\t\t\"(The lowercase letter ``ell''.)  List in long format.  (See below.)  A total sum for all the file sizes is output on a line before the long listing\",\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription:\n\t\t\t\t\"Stream output format; list files across the page, separated by commas\",\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription:\n\t\t\t\t\"Display user and group IDs numerically, rather than converting to a user or group name in a long (-l) output.  This option turns on the -l option\",\n\t\t},\n\t\t{\n\t\t\tname: \"-O\",\n\t\t\tdescription: \"Include the file flags in a long (-l) output\",\n\t\t},\n\t\t{ name: \"-o\", description: \"List in long format, but omit the group id\" },\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription:\n\t\t\t\t\"If argument is a symbolic link, list the link itself rather than the object the link references.  This option cancels the -H and -L options\",\n\t\t},\n\t\t{\n\t\t\tname: \"-p\",\n\t\t\tdescription:\n\t\t\t\t\"Write a slash (`/') after each filename if that file is a directory\",\n\t\t},\n\t\t{\n\t\t\tname: \"-q\",\n\t\t\tdescription:\n\t\t\t\t\"Force printing of non-graphic characters in file names as the character `?'; this is the default when output is to a terminal\",\n\t\t},\n\t\t{ name: \"-R\", description: \"Recursively list subdirectories encountered\" },\n\t\t{\n\t\t\tname: \"-r\",\n\t\t\tdescription:\n\t\t\t\t\"Reverse the order of the sort to get reverse lexicographical order or the oldest entries first (or largest files last, if combined with sort by size\",\n\t\t},\n\t\t{ name: \"-S\", description: \"Sort files by size\" },\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription:\n\t\t\t\t\"Display the number of file system blocks actually used by each file, in units of 512 bytes, where partial units are rounded up to the next integer value.  If the output is to a terminal, a total sum for all the file sizes is output on a line before the listing.  The environment variable BLOCKSIZE overrides the unit size of 512 bytes\",\n\t\t},\n\t\t{\n\t\t\tname: \"-T\",\n\t\t\tdescription:\n\t\t\t\t\"When used with the -l (lowercase letter ``ell'') option, display complete time information for the file, including month, day, hour, minute, second, and year\",\n\t\t},\n\t\t{\n\t\t\tname: \"-t\",\n\t\t\tdescription:\n\t\t\t\t\"Sort by time modified (most recently modified first) before sorting the operands by lexicographical order\",\n\t\t},\n\t\t{\n\t\t\tname: \"-u\",\n\t\t\tdescription:\n\t\t\t\t\"Use time of last access, instead of last modification of the file for sorting (-t) or long printing (-l)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-U\",\n\t\t\tdescription:\n\t\t\t\t\"Use time of file creation, instead of last modification for sorting (-t) or long output (-l)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Force unedited printing of non-graphic characters; this is the default when output is not to a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-W\",\n\t\t\tdescription: \"Display whiteouts when scanning directories.  (-S) flag)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-w\",\n\t\t\tdescription:\n\t\t\t\t\"Force raw printing of non-printable characters.  This is the default when output is not to a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-x\",\n\t\t\tdescription:\n\t\t\t\t\"The same as -C, except that the multi-column output is produced with entries sorted across, rather than down, the columns\",\n\t\t},\n\t\t{\n\t\t\tname: \"-%\",\n\t\t\tdescription:\n\t\t\t\t\"Distinguish dataless files and directories with a '%' character in long (-l) output, and don't materialize dataless directories when listing them\",\n\t\t},\n\t\t{\n\t\t\tname: \"-,\",\n\t\t\tdescription: `When the -l option is set, print file sizes grouped and separated by thousands using the non-monetary separator returned\nby localeconv(3), typically a comma or period.  If no locale is set, or the locale does not have a non-monetary separator, this\noption has no effect.  This option is not defined in IEEE Std 1003.1-2001 (“POSIX.1”)`,\n\t\t\tdependsOn: [\"-l\"],\n\t\t},\n\t\t{\n\t\t\tname: \"--color\",\n\t\t\tdescription: `Output colored escape sequences based on when, which may be set to either always, auto, or never`,\n\t\t\trequiresSeparator: true,\n\t\t\targs: {\n\t\t\t\tname: \"when\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: [\"always\", \"yes\", \"force\"],\n\t\t\t\t\t\tdescription: \"Will make ls always output color\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"auto\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Will make ls output escape sequences based on termcap(5), but only if stdout is a tty and either the -G flag is specified or the COLORTERM environment variable is set and not empty\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: [\"never\", \"no\", \"none\"],\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Will disable color regardless of environment variables\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/mkdir.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"mkdir\",\n\tdescription: \"Make directories\",\n\targs: {\n\t\tname: \"directory name\",\n\t\ttemplate: \"folders\",\n\t\tsuggestCurrentToken: true,\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: [\"-m\", \"--mode\"],\n\t\t\tdescription: \"Set file mode (as in chmod), not a=rwx - umask\",\n\t\t\targs: { name: \"MODE\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"-p\", \"--parents\"],\n\t\t\tdescription: \"No error if existing, make parent directories as needed\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\tdescription: \"Print a message for each created directory\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-Z\", \"--context\"],\n\t\t\tdescription:\n\t\t\t\t\"Set the SELinux security context of each created directory to CTX\",\n\t\t\targs: { name: \"CTX\" },\n\t\t},\n\t\t{ name: \"--help\", description: \"Display this help and exit\" },\n\t\t{\n\t\t\tname: \"--version\",\n\t\t\tdescription: \"Output version information and exit\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/more.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"more\",\n\tdescription: \"Opposite of less\",\n\toptions: [\n\t\t{\n\t\t\tname: [\"-d\", \"--silent\"],\n\t\t\tdescription:\n\t\t\t\t\"Prompt with '[Press space to continue, 'q' to quit.]', and display '[Press 'h' for instructions.]' instead of ringing the bell when an illegal key is pressed\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-l\", \"--logical\"],\n\t\t\tdescription: \"Do not pause after any line containing a ^L (form feed)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-f\", \"--no-pause\"],\n\t\t\tdescription: \"Count logical lines, rather than screen lines\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-p\", \"--print-over\"],\n\t\t\tdescription: \"Instead, clear the whole screen and then display the text\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-c\", \"--clean-print\"],\n\t\t\tdescription:\n\t\t\t\t\"Instead, paint each screen from the top, clearing the remainder of each line as it is displayed\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-s\", \"--squeeze\"],\n\t\t\tdescription: \"Squeeze multiple blank lines into one\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-u\", \"--plain\"],\n\t\t\tdescription: \"Silently ignored as backwards compatibility\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-n\", \"--lines\"],\n\t\t\tdescription: \"Specify the number of lines per screenful\",\n\t\t\targs: { name: \"n\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--help\",\n\t\t\tdescription: \"Display help text\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-V\", \"--version\"],\n\t\t\tdescription: \"Display version information\",\n\t\t},\n\t],\n\targs: {\n\t\tisVariadic: true,\n\t\ttemplate: \"filepaths\",\n\t},\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/mv.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"mv\",\n\tdescription: \"Move & rename files and folders\",\n\targs: [\n\t\t{\n\t\t\tname: \"source\",\n\t\t\tisVariadic: true,\n\t\t\ttemplate: [\"filepaths\", \"folders\"],\n\t\t},\n\t\t{\n\t\t\tname: \"target\",\n\t\t\ttemplate: [\"filepaths\", \"folders\"],\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription:\n\t\t\t\t\"Do not prompt for confirmation before overwriting the destination path\",\n\t\t\texclusiveOn: [\"-i\", \"-n\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"Cause mv to write a prompt to standard error before moving a file that would overwrite an existing file\",\n\t\t\texclusiveOn: [\"-f\", \"-n\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription: \"Do not overwrite existing file\",\n\t\t\texclusiveOn: [\"-f\", \"-i\"],\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription: \"Cause mv to be verbose, showing files after they are moved\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/nano.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"nano\",\n\tdescription: \"Nano's ANOther editor, an enhanced free Pico clone\",\n\targs: {\n\t\ttemplate: \"filepaths\",\n\t},\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/node.ts",
    "content": "import { filepaths } from '../../helpers/filepaths';\n\nconst completionSpec: Fig.Subcommand = {\n\tname: \"node\",\n\tdescription: \"Run the node interpreter\",\n\targs: {\n\t\tname: \"node script\",\n\t\tisScript: true,\n\t\tgenerators: filepaths({\n\t\t\textensions: [\"mjs\", \"js\", \"cjs\"],\n\t\t\teditFileSuggestions: { priority: 76 },\n\t\t}),\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: [\"-e\", \"--eval=...\"],\n\t\t\tinsertValue: \"-e '{cursor}'\",\n\t\t\tdescription: \"Evaluate script\",\n\t\t\targs: {},\n\t\t},\n\t\t{\n\t\t\tname: \"--watch\",\n\t\t\tdescription: \"Watch input files\",\n\t\t},\n\t\t{\n\t\t\tname: \"--watch-path\",\n\t\t\tdescription: \"Specify a watch directory or file\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t\tisRepeatable: true,\n\t\t},\n\t\t{\n\t\t\tname: \"--watch-preserve-output\",\n\t\t\tdescription:\n\t\t\t\t\"Disable the clearing of the console when watch mode restarts the process\",\n\t\t\tdependsOn: [\"--watch\", \"--watch-path\"],\n\t\t},\n\t\t{\n\t\t\tname: \"--env-file\",\n\t\t\tdescription: \"Specify a file containing environment variables\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t\tisRepeatable: true,\n\t\t},\n\t\t{\n\t\t\tname: [\"-p\", \"--print\"],\n\t\t\tdescription: \"Evaluate script and print result\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-c\", \"--check\"],\n\t\t\tdescription: \"Syntax check script without executing\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-v\", \"--version\"],\n\t\t\tdescription: \"Print Node.js version\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-i\", \"--interactive\"],\n\t\t\tdescription:\n\t\t\t\t\"Always enter the REPL even if stdin does not appear to be a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-h\", \"--help\"],\n\t\t\tdescription: \"Print node command line options (currently set)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--inspect\",\n\t\t\trequiresSeparator: true,\n\t\t\targs: {\n\t\t\t\tname: \"[host:]port\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t\tdescription: \"Activate inspector on host:port (default: 127.0.0.1:9229)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--preserve-symlinks\",\n\t\t\tdescription:\n\t\t\t\t\"Follows symlinks to directories when examining source code and templates for translation strings\",\n\t\t},\n\t],\n\tgenerateSpec: async (tokens, executeShellCommand) => {\n\t\tif (\n\t\t\t(\n\t\t\t\tawait executeShellCommand({\n\t\t\t\t\tcommand: \"bash\",\n\t\t\t\t\targs: [\"-c\", \"isAdonisJsonPresentCommand\"],\n\t\t\t\t})\n\t\t\t).status === 0\n\t\t) {\n\t\t\treturn {\n\t\t\t\tname: \"node\",\n\t\t\t\tsubcommands: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"ace\",\n\t\t\t\t\t\tdescription: \"Run AdonisJS command-line\",\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\t\t\t\tdescription: \"Display AdonisJS Ace help\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: [\"-v\", \"--version\"],\n\t\t\t\t\t\t\t\tdescription: \"Display AdonisJS version\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"build\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Compile project from Typescript to Javascript. Also compiles the frontend assets if using webpack encore\",\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-prod\", \"--production\"],\n\t\t\t\t\t\t\t\t\t\tdescription: \"Build for production\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--assets\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Build frontend assets when webpack encore is installed\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--no-assets\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Disable building assets\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--ignore-ts-errors\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Ignore typescript errors and complete the build process\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--tsconfig\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Path to the TypeScript project configuration file\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\t\t\t\t\t\tdescription: \"Path to tsconfig.json\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--encore-args\",\n\t\t\t\t\t\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\t\t\t\t\t\tinsertValue: \"--encore-args='{cursor}'\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"CLI options to pass to the encore command line\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--client\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Select the package manager to decide which lock file to copy to the build folder\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: [\"configure\", \"invoke\"],\n\t\t\t\t\t\t\t\tdescription: \"Configure a given AdonisJS package\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Name of the package you want to configure\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"@adonisjs/auth\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Trigger auto configuring auth package\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"@adonisjs/shield\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Trigger auto configuring shield package\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"@adonisjs/redis\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Trigger auto configuring redis package\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"@adonisjs/mail\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Trigger auto configuring mail package\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"repl\",\n\t\t\t\t\t\t\t\tdescription: \"Start a new REPL session\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"serve\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Start the AdonisJS HTTP server, along with the file watcher. Also starts the webpack dev server when webpack encore is installed\",\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--assets\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Start webpack dev server when encore is installed\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--no-assets\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Disable webpack dev server\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-w\", \"--watch\"],\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Watch for file changes and re-start the HTTP server on change\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-p\", \"--poll\"],\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Detect file changes by polling files instead of listening to filesystem events\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--node-args\",\n\t\t\t\t\t\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\t\t\t\t\t\tinsertValue: \"--node-args='{cursor}'\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"CLI options to pass to the node command line\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--encore-args\",\n\t\t\t\t\t\t\t\t\t\trequiresSeparator: true,\n\t\t\t\t\t\t\t\t\t\tinsertValue: \"--encore-args='{cursor}'\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"CLI options to pass to the encore command line\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"db:seed\",\n\t\t\t\t\t\t\t\tdescription: \"Execute database seeder files\",\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-c\", \"--connection\"],\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Define a custom database connection for the seeders\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-i\", \"--interactive\"],\n\t\t\t\t\t\t\t\t\t\tdescription: \"Run seeders in interactive mode\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-f\", \"--files\"],\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"file\",\n\t\t\t\t\t\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Define a custom set of seeders files names to run\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dump:rcfile\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Dump contents of .adonisrc.json file along with defaults\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"generate:key\",\n\t\t\t\t\t\t\t\tdescription: \"Generate a new APP_KEY secret\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"generate:manifest\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Generate ace commands manifest file. Manifest file speeds up commands lookup\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"list:routes\",\n\t\t\t\t\t\t\t\tdescription: \"List application routes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:command\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new ace command\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:controller\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new HTTP controller\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Name of the controller class\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-r\", \"--resource\"],\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Add resourceful methods to the controller class\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-e\", \"--exact\"],\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Create the controller with the exact name as provided\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:exception\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new custom exception class\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:listener\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new event listener class\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:mailer\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new mailer class\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Mailer class name\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:middleware\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new middleware\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Middleware class name\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:migration\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new migration file\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Name of the migration file\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--connection\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"The connection flag is used to lookup the directory for the migration file\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--folder\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Pre-select a migration directory\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--create\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Define the table name for creating a new table\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--table\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Define the table name for altering an existing table\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:model\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new Lucid model\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Name of the model class\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-m\", \"--migration\"],\n\t\t\t\t\t\t\t\t\t\tdescription: \"Generate the migration for the model\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-c\", \"--controller\"],\n\t\t\t\t\t\t\t\t\t\tdescription: \"Generate the controller for the model\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:prldfile\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new preload file\",\n\t\t\t\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"events\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"Make events preload file\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:provider\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new provider class\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:seeder\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new Seeder file\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Name of the seeder class\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:validator\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new validator\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Name of the validator class\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-e\", \"--exact\"],\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Create the validator with the exact name as provided\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"make:view\",\n\t\t\t\t\t\t\t\tdescription: \"Make a new view template\",\n\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\tdescription: \"Name of the view\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-e\", \"--exact\"],\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Create the template file with the exact name as provided\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"migration:rollback\",\n\t\t\t\t\t\t\t\tdescription: \"Rollback migrations to a given batch number\",\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-c\", \"--connection\"],\n\t\t\t\t\t\t\t\t\t\tdescription: \"Define a custom database connection\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--force\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Explicitly force to run migrations in production\",\n\t\t\t\t\t\t\t\t\t\tisDangerous: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--dry-run\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Print SQL queries, instead of running the migrations\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--batch\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"number\",\n\t\t\t\t\t\t\t\t\t\t\tdescription: \"Use 0 to rollback to initial state\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdescription: \"Define custom batch number for rollback\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"migration:run\",\n\t\t\t\t\t\t\t\tdescription: \"Run pending migrations\",\n\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: [\"-c\", \"--connection\"],\n\t\t\t\t\t\t\t\t\t\tdescription: \"Define a custom database connection\",\n\t\t\t\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"name\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--force\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Explicitly force to run migrations in production\",\n\t\t\t\t\t\t\t\t\t\tisDangerous: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"--dry-run\",\n\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\"Print SQL queries, instead of running the migrations\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"migration:status\",\n\t\t\t\t\t\t\t\tdescription: \"Check migrations current status\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t},\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/npm.ts",
    "content": "function uninstallSubcommand(named: string | string[]): Fig.Subcommand {\n\treturn {\n\t\tname: named,\n\t\tdescription: \"Uninstall a package\",\n\t\targs: {\n\t\t\tname: \"package\",\n\t\t\tgenerators: dependenciesGenerator,\n\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\tisVariadic: true,\n\t\t},\n\t\toptions: npmUninstallOptions,\n\t};\n}\n\nconst atsInStr = (s: string) => (s.match(/@/g) || []).length;\n\nexport const createNpmSearchHandler =\n\t(keywords?: string[]) =>\n\tasync (\n\t\tcontext: string[],\n\t\texecuteShellCommand: Fig.ExecuteCommandFunction,\n\t\tshellContext: Fig.ShellContext\n\t): Promise<Fig.Suggestion[]> => {\n\t\tconst searchTerm = context[context.length - 1];\n\t\tif (searchTerm === \"\") {\n\t\t\treturn [];\n\t\t}\n\t\t// Add optional keyword parameter\n\t\tconst keywordParameter =\n\t\t\tkeywords && keywords.length > 0 ? `+keywords:${keywords.join(\",\")}` : \"\";\n\n\t\tconst queryPackagesUrl = keywordParameter\n\t\t\t? `https://api.npms.io/v2/search?size=20&q=${searchTerm}${keywordParameter}`\n\t\t\t: `https://api.npms.io/v2/search/suggestions?q=${searchTerm}&size=20`;\n\n\t\t// Query the API with the package name\n\t\tconst queryPackages = [\n\t\t\t\"-s\",\n\t\t\t\"-H\",\n\t\t\t\"Accept: application/json\",\n\t\t\tqueryPackagesUrl,\n\t\t];\n\t\t// We need to remove the '@' at the end of the searchTerm before querying versions\n\t\tconst queryVersions = [\n\t\t\t\"-s\",\n\t\t\t\"-H\",\n\t\t\t\"Accept: application/vnd.npm.install-v1+json\",\n\t\t\t`https://registry.npmjs.org/${searchTerm.slice(0, -1)}`,\n\t\t];\n\t\t// If the end of our token is '@', then we want to generate version suggestions\n\t\t// Otherwise, we want packages\n\t\tconst out = (query: string) =>\n\t\t\texecuteShellCommand({\n\t\t\t\tcommand: \"curl\",\n\t\t\t\targs: query[query.length - 1] === \"@\" ? queryVersions : queryPackages,\n\t\t\t});\n\t\t// If our token starts with '@', then a 2nd '@' tells us we want\n\t\t// versions.\n\t\t// Otherwise, '@' anywhere else in the string will indicate the same.\n\t\tconst shouldGetVersion = searchTerm.startsWith(\"@\")\n\t\t\t? atsInStr(searchTerm) > 1\n\t\t\t: searchTerm.includes(\"@\");\n\n\t\ttry {\n\t\t\tconst data = JSON.parse((await out(searchTerm)).stdout);\n\t\t\tif (shouldGetVersion) {\n\t\t\t\t// create dist tags suggestions\n\t\t\t\tconst versions = Object.entries(data[\"dist-tags\"] || {}).map(\n\t\t\t\t\t([key, value]) => ({\n\t\t\t\t\t\tname: key,\n\t\t\t\t\t\tdescription: value,\n\t\t\t\t\t})\n\t\t\t\t) as Fig.Suggestion[];\n\t\t\t\t// create versions\n\t\t\t\tversions.push(\n\t\t\t\t\t...Object.keys(data.versions)\n\t\t\t\t\t\t.map((version) => ({ name: version }) as Fig.Suggestion)\n\t\t\t\t\t\t.reverse()\n\t\t\t\t);\n\t\t\t\treturn versions;\n\t\t\t}\n\n\t\t\tconst results = keywordParameter ? data.results : data;\n\t\t\treturn results.map(\n\t\t\t\t(item: { package: { name: string; description: string } }) => ({\n\t\t\t\t\tname: item.package.name,\n\t\t\t\t\tdescription: item.package.description,\n\t\t\t\t})\n\t\t\t) as Fig.Suggestion[];\n\t\t} catch (error) {\n\t\t\tconsole.error({ error });\n\t\t\treturn [];\n\t\t}\n\t};\n\n// GENERATORS\nexport const npmSearchGenerator: Fig.Generator = {\n\ttrigger: (newToken, oldToken) => {\n\t\t// If the package name starts with '@', we want to trigger when\n\t\t// the 2nd '@' is typed because we'll need to generate version\n\t\t// suggetsions\n\t\t// e.g. @typescript-eslint/types\n\t\tif (oldToken.startsWith(\"@\")) {\n\t\t\treturn !(atsInStr(oldToken) > 1 && atsInStr(newToken) > 1);\n\t\t}\n\n\t\t// If the package name doesn't start with '@', then trigger when\n\t\t// we see the first '@' so we can generate version suggestions\n\t\treturn !(oldToken.includes(\"@\") && newToken.includes(\"@\"));\n\t},\n\tgetQueryTerm: \"@\",\n\tcache: {\n\t\tttl: 1000 * 60 * 60 * 24 * 2, // 2 days\n\t},\n\tcustom: createNpmSearchHandler(),\n};\n\nconst workspaceGenerator: Fig.Generator = {\n\t// script: \"cat $(npm prefix)/package.json\",\n\tcustom: async (tokens, executeShellCommand) => {\n\t\tconst { stdout: npmPrefix } = await executeShellCommand({\n\t\t\tcommand: \"npm\",\n\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\targs: [\"prefix\"],\n\t\t});\n\n\t\tconst { stdout: out } = await executeShellCommand({\n\t\t\tcommand: \"cat\",\n\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\targs: [`${npmPrefix}/package.json`],\n\t\t});\n\n\t\tconst suggestions: Fig.Suggestion[] = [];\n\t\ttry {\n\t\t\tif (out.trim() == \"\") {\n\t\t\t\treturn suggestions;\n\t\t\t}\n\n\t\t\tconst packageContent = JSON.parse(out);\n\t\t\tconst workspaces = packageContent[\"workspaces\"];\n\n\t\t\tif (workspaces) {\n\t\t\t\tfor (const workspace of workspaces) {\n\t\t\t\t\tsuggestions.push({\n\t\t\t\t\t\tname: workspace,\n\t\t\t\t\t\tdescription: \"Workspaces\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t\treturn suggestions;\n\t},\n};\n\n/** Generator that lists package.json dependencies */\nexport const dependenciesGenerator: Fig.Generator = {\n\ttrigger: (newToken) => newToken === \"-g\" || newToken === \"--global\",\n\tcustom: async function (tokens, executeShellCommand) {\n\t\tif (!tokens.includes(\"-g\") && !tokens.includes(\"--global\")) {\n\t\t\tconst { stdout: npmPrefix } = await executeShellCommand({\n\t\t\t\tcommand: \"npm\",\n\t\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\t\targs: [\"prefix\"],\n\t\t\t});\n\t\t\tconst { stdout: out } = await executeShellCommand({\n\t\t\t\tcommand: \"cat\",\n\t\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\t\targs: [`${npmPrefix}/package.json`],\n\t\t\t});\n\t\t\tconst packageContent = JSON.parse(out);\n\t\t\tconst dependencies = packageContent[\"dependencies\"] ?? {};\n\t\t\tconst devDependencies = packageContent[\"devDependencies\"];\n\t\t\tconst optionalDependencies = packageContent[\"optionalDependencies\"] ?? {};\n\t\t\tObject.assign(dependencies, devDependencies, optionalDependencies);\n\n\t\t\treturn Object.keys(dependencies)\n\t\t\t\t.filter((pkgName) => {\n\t\t\t\t\tconst isListed = tokens.some((current) => current === pkgName);\n\t\t\t\t\treturn !isListed;\n\t\t\t\t})\n\t\t\t\t.map((pkgName) => ({\n\t\t\t\t\tname: pkgName,\n\t\t\t\t\ticon: \"📦\",\n\t\t\t\t\tdescription: dependencies[pkgName]\n\t\t\t\t\t\t? \"dependency\"\n\t\t\t\t\t\t: optionalDependencies[pkgName]\n\t\t\t\t\t\t\t? \"optionalDependency\"\n\t\t\t\t\t\t\t: \"devDependency\",\n\t\t\t\t}));\n\t\t} else {\n\t\t\tconst { stdout } = await executeShellCommand({\n\t\t\t\tcommand: \"bash\",\n\t\t\t\targs: [\"-c\", \"ls -1 `npm root -g`\"],\n\t\t\t});\n\t\t\treturn stdout.split(\"\\n\").map((name) => ({\n\t\t\t\tname,\n\t\t\t\ticon: \"📦\",\n\t\t\t\tdescription: \"Global dependency\",\n\t\t\t}));\n\t\t}\n\t},\n};\n\n/** Generator that lists package.json scripts (with the respect to the `fig` field) */\nexport const npmScriptsGenerator: Fig.Generator = {\n\tcache: {\n\t\tstrategy: \"stale-while-revalidate\",\n\t\tcacheByDirectory: true,\n\t},\n\tscript: [\n\t\t\"bash\",\n\t\t\"-c\",\n\t\t\"until [[ -f package.json ]] || [[ $PWD = '/' ]]; do cd ..; done; cat package.json\",\n\t],\n\tpostProcess: function (out, [npmClient]) {\n\t\tif (out.trim() == \"\") {\n\t\t\treturn [];\n\t\t}\n\n\t\ttry {\n\t\t\tconst packageContent = JSON.parse(out);\n\t\t\tconst scripts = packageContent[\"scripts\"];\n\t\t\tconst figCompletions = packageContent[\"fig\"] || {};\n\n\t\t\tif (scripts) {\n\t\t\t\treturn Object.entries(scripts).map(([scriptName, scriptContents]) => {\n\t\t\t\t\tconst icon =\n\t\t\t\t\t\tnpmClient === \"yarn\"\n\t\t\t\t\t\t\t? \"fig://icon?type=yarn\"\n\t\t\t\t\t\t\t: \"fig://icon?type=npm\";\n\t\t\t\t\tconst customScripts: Fig.Suggestion = figCompletions[scriptName];\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: scriptName,\n\t\t\t\t\t\ticon,\n\t\t\t\t\t\tdescription: scriptContents as string,\n\t\t\t\t\t\tpriority: 51,\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * If there are custom definitions for the scripts\n\t\t\t\t\t\t * we want to override the default values\n\t\t\t\t\t\t * */\n\t\t\t\t\t\t...customScripts,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\n\t\treturn [];\n\t},\n};\n\nconst globalOption: Fig.Option = {\n\tname: [\"-g\", \"--global\"],\n\tdescription:\n\t\t\"Operates in 'global' mode, so that packages are installed into the prefix folder instead of the current working directory\",\n};\n\nconst jsonOption: Fig.Option = {\n\tname: \"--json\",\n\tdescription: \"Show output in json format\",\n};\n\nconst omitOption: Fig.Option = {\n\tname: \"--omit\",\n\tdescription: \"Dependency types to omit from the installation tree on disk\",\n\targs: {\n\t\tname: \"Package type\",\n\t\tdefault: \"dev\",\n\t\tsuggestions: [\"dev\", \"optional\", \"peer\"],\n\t},\n\tisRepeatable: 3,\n};\n\nconst parseableOption: Fig.Option = {\n\tname: [\"-p\", \"--parseable\"],\n\tdescription:\n\t\t\"Output parseable results from commands that write to standard output\",\n};\n\nconst longOption: Fig.Option = {\n\tname: [\"-l\", \"--long\"],\n\tdescription: \"Show extended information\",\n};\n\nconst workSpaceOptions: Fig.Option[] = [\n\t{\n\t\tname: [\"-w\", \"--workspace\"],\n\t\tdescription:\n\t\t\t\"Enable running a command in the context of the configured workspaces of the current project\",\n\t\targs: {\n\t\t\tname: \"workspace\",\n\t\t\tgenerators: workspaceGenerator,\n\t\t\tisVariadic: true,\n\t\t},\n\t},\n\t{\n\t\tname: [\"-ws\", \"--workspaces\"],\n\t\tdescription:\n\t\t\t\"Enable running a command in the context of all the configured workspaces\",\n\t},\n];\n\nconst npmUninstallOptions: Fig.Option[] = [\n\t{\n\t\tname: [\"-S\", \"--save\"],\n\t\tdescription: \"Package will be removed from your dependencies\",\n\t},\n\t{\n\t\tname: [\"-D\", \"--save-dev\"],\n\t\tdescription: \"Package will appear in your `devDependencies`\",\n\t},\n\t{\n\t\tname: [\"-O\", \"--save-optional\"],\n\t\tdescription: \"Package will appear in your `optionalDependencies`\",\n\t},\n\t{\n\t\tname: \"--no-save\",\n\t\tdescription: \"Prevents saving to `dependencies`\",\n\t},\n\t{\n\t\tname: \"-g\",\n\t\tdescription: \"Uninstall global package\",\n\t},\n\t...workSpaceOptions,\n];\n\nconst npmListOptions: Fig.Option[] = [\n\t{\n\t\tname: [\"-a\", \"-all\"],\n\t\tdescription: \"Show all outdated or installed packages\",\n\t},\n\tjsonOption,\n\tlongOption,\n\tparseableOption,\n\t{\n\t\tname: \"--depth\",\n\t\tdescription: \"The depth to go when recursing packages\",\n\t\targs: { name: \"depth\" },\n\t},\n\t{\n\t\tname: \"--link\",\n\t\tdescription: \"Limits output to only those packages that are linked\",\n\t},\n\t{\n\t\tname: \"--package-lock-only\",\n\t\tdescription:\n\t\t\t\"Current operation will only use the package-lock.json, ignoring node_modules\",\n\t},\n\t{\n\t\tname: \"--no-unicode\",\n\t\tdescription: \"Uses unicode characters in the tree output\",\n\t},\n\tglobalOption,\n\tomitOption,\n\t...workSpaceOptions,\n];\n\nconst registryOption: Fig.Option = {\n\tname: \"--registry\",\n\tdescription: \"The base URL of the npm registry\",\n\targs: { name: \"registry\" },\n};\n\nconst verboseOption: Fig.Option = {\n\tname: \"--verbose\",\n\tdescription: \"Show extra information\",\n\targs: { name: \"verbose\" },\n};\n\nconst otpOption: Fig.Option = {\n\tname: \"--otp\",\n\tdescription: \"One-time password from a two-factor authenticator\",\n\targs: { name: \"otp\" },\n};\n\nconst ignoreScriptsOption: Fig.Option = {\n\tname: \"--ignore-scripts\",\n\tdescription:\n\t\t\"If true, npm does not run scripts specified in package.json files\",\n};\n\nconst scriptShellOption: Fig.Option = {\n\tname: \"--script-shell\",\n\tdescription:\n\t\t\"The shell to use for scripts run with the npm exec, npm run and npm init <pkg> commands\",\n\targs: { name: \"script-shell\" },\n};\n\nconst dryRunOption: Fig.Option = {\n\tname: \"--dry-run\",\n\tdescription:\n\t\t\"Indicates that you don't want npm to make any changes and that it should only report what it would have done\",\n};\n\nconst completionSpec: Fig.Spec = {\n\tname: \"npm\",\n\tparserDirectives: {\n\t\tflagsArePosixNoncompliant: true,\n\t},\n\tdescription: \"Node package manager\",\n\tsubcommands: [\n\t\t{\n\t\t\tname: [\"install\", \"i\", \"add\"],\n\t\t\tdescription: \"Install a package and its dependencies\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tisOptional: true,\n\t\t\t\tgenerators: npmSearchGenerator,\n\t\t\t\tdebounce: true,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-P\", \"--save-prod\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Package will appear in your `dependencies`. This is the default unless `-D` or `-O` are present\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-D\", \"--save-dev\"],\n\t\t\t\t\tdescription: \"Package will appear in your `devDependencies`\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-O\", \"--save-optional\"],\n\t\t\t\t\tdescription: \"Package will appear in your `optionalDependencies`\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-save\",\n\t\t\t\t\tdescription: \"Prevents saving to `dependencies`\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-E\", \"--save-exact\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Saved dependencies will be configured with an exact version rather than using npm's default semver range operator\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-B\", \"--save-bundle\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Saved dependencies will also be added to your bundleDependencies list\",\n\t\t\t\t},\n\t\t\t\tglobalOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--global-style\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Causes npm to install the package into your local node_modules folder with the same layout it uses with the global node_modules folder\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--legacy-bundling\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Causes npm to install the package such that versions of npm prior to 1.4, such as the one included with node 0.8, can install the package\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--legacy-peer-deps\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Bypass peerDependency auto-installation. Emulate install behavior of NPM v4 through v6\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--strict-peer-deps\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If set to true, and --legacy-peer-deps is not set, then any conflicting peerDependencies will be treated as an install failure\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-package-lock\",\n\t\t\t\t\tdescription: \"Ignores package-lock.json files when installing\",\n\t\t\t\t},\n\t\t\t\tregistryOption,\n\t\t\t\tverboseOption,\n\t\t\t\tomitOption,\n\t\t\t\tignoreScriptsOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-audit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Submit audit reports alongside the current npm command to the default registry and all registries configured for scopes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-bin-links\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Tells npm to not create symlinks (or .cmd shims on Windows) for package executables\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-fund\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Hides the message at the end of each npm install acknowledging the number of dependencies looking for funding\",\n\t\t\t\t},\n\t\t\t\tdryRunOption,\n\t\t\t\t...workSpaceOptions,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"run\", \"run-script\"],\n\t\t\tdescription: \"Run arbitrary package scripts\",\n\t\t\toptions: [\n\t\t\t\t...workSpaceOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--if-present\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Npm will not exit with an error code when run-script is invoked for a script that isn't defined in the scripts section of package.json\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--silent\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t},\n\t\t\t\tignoreScriptsOption,\n\t\t\t\tscriptShellOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"args\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t\t// TODO: load the spec based on the runned script (see yarn spec `yarnScriptParsedDirectives`)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\targs: {\n\t\t\t\tname: \"script\",\n\t\t\t\tdescription: \"Script to run from your package.json\",\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: npmScriptsGenerator,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"init\",\n\t\t\tdescription: \"Trigger the initialization\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-y\", \"--yes\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Automatically answer 'yes' to any prompts that npm might print on the command line\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-w\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Create the folders and boilerplate expected while also adding a reference to your project workspaces property\",\n\t\t\t\t\targs: { name: \"dir\" },\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{ name: \"access\", description: \"Set access controls on private packages\" },\n\t\t{\n\t\t\tname: [\"adduser\", \"login\"],\n\t\t\tdescription: \"Add a registry user account\",\n\t\t\toptions: [\n\t\t\t\tregistryOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--scope\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Associate an operation with a scope for a scoped registry\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"scope\",\n\t\t\t\t\t\tdescription: \"Scope name\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"audit\",\n\t\t\tdescription: \"Run a security audit\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"fix\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If the fix argument is provided, then remediations will be applied to the package tree\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\tdryRunOption,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Removes various protections against unfortunate side effects, common mistakes, unnecessary performance degradation, and malicious input\",\n\t\t\t\t\t\t\tisDangerous: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...workSpaceOptions,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t...workSpaceOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--audit-level\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The minimum level of vulnerability for npm audit to exit with a non-zero exit code\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"audit\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t\"low\",\n\t\t\t\t\t\t\t\"moderate\",\n\t\t\t\t\t\t\t\"high\",\n\t\t\t\t\t\t\t\"critical\",\n\t\t\t\t\t\t\t\"none\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--package-lock-only\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Current operation will only use the package-lock.json, ignoring node_modules\",\n\t\t\t\t},\n\t\t\t\tjsonOption,\n\t\t\t\tomitOption,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"bin\",\n\t\t\tdescription: \"Print the folder where npm will install executables\",\n\t\t\toptions: [globalOption],\n\t\t},\n\t\t{\n\t\t\tname: [\"bugs\", \"issues\"],\n\t\t\tdescription: \"Report bugs for a package in a web browser\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tisOptional: true,\n\t\t\t\tgenerators: npmSearchGenerator,\n\t\t\t\tdebounce: true,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-browser\",\n\t\t\t\t\tdescription: \"Display in command line instead of browser\",\n\t\t\t\t\texclusiveOn: [\"--browser\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--browser\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The browser that is called by the npm bugs command to open websites\",\n\t\t\t\t\targs: { name: \"browser\" },\n\t\t\t\t\texclusiveOn: [\"--no-browser\"],\n\t\t\t\t},\n\t\t\t\tregistryOption,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"cache\",\n\t\t\tdescription: \"Manipulates packages cache\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription: \"Add the specified packages to the local cache\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"clean\",\n\t\t\t\t\tdescription: \"Delete all data out of the cache folder\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"verify\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Verify the contents of the cache folder, garbage collecting any unneeded data, and verifying the integrity of the cache index and all cached data\",\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--cache\",\n\t\t\t\t\targs: { name: \"cache\" },\n\t\t\t\t\tdescription: \"The location of npm's cache directory\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"ci\", \"clean-install\", \"install-clean\"],\n\t\t\tdescription: \"Install a project with a clean slate\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--audit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'When \"true\" submit audit reports alongside the current npm command to the default registry and all registries configured for scopes',\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"audit\",\n\t\t\t\t\t\tsuggestions: [\"true\", \"false\"],\n\t\t\t\t\t},\n\t\t\t\t\texclusiveOn: [\"--no-audit\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-audit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not submit audit reports alongside the current npm command\",\n\t\t\t\t\texclusiveOn: [\"--audit\"],\n\t\t\t\t},\n\t\t\t\tignoreScriptsOption,\n\t\t\t\tscriptShellOption,\n\t\t\t\tverboseOption,\n\t\t\t\tregistryOption,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"cit\",\n\t\t\tdescription: \"Install a project with a clean slate and run tests\",\n\t\t},\n\t\t{\n\t\t\tname: \"clean-install-test\",\n\t\t\tdescription: \"Install a project with a clean slate and run tests\",\n\t\t},\n\t\t{ name: \"completion\", description: \"Tab completion for npm\" },\n\t\t{\n\t\t\tname: [\"config\", \"c\"],\n\t\t\tdescription: \"Manage the npm configuration files\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"set\",\n\t\t\t\t\tdescription: \"Sets the config key to the value\",\n\t\t\t\t\targs: [{ name: \"key\" }, { name: \"value\" }],\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ name: [\"-g\", \"--global\"], description: \"Sets it globally\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"get\",\n\t\t\t\t\tdescription: \"Echo the config value to stdout\",\n\t\t\t\t\targs: { name: \"key\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"Show all the config settings\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ name: \"-g\", description: \"Lists globally installed packages\" },\n\t\t\t\t\t\t{ name: \"-l\", description: \"Also shows defaults\" },\n\t\t\t\t\t\tjsonOption,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"delete\",\n\t\t\t\t\tdescription: \"Deletes the key from all configuration files\",\n\t\t\t\t\targs: { name: \"key\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"edit\",\n\t\t\t\t\tdescription: \"Opens the config file in an editor\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ name: \"--global\", description: \"Edits the global config\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{ name: \"create\", description: \"Create a package.json file\" },\n\t\t{\n\t\t\tname: [\"dedupe\", \"ddp\"],\n\t\t\tdescription: \"Reduce duplication in the package tree\",\n\t\t},\n\t\t{\n\t\t\tname: \"deprecate\",\n\t\t\tdescription: \"Deprecate a version of a package\",\n\t\t\toptions: [registryOption],\n\t\t},\n\t\t{ name: \"dist-tag\", description: \"Modify package distribution tags\" },\n\t\t{\n\t\t\tname: [\"docs\", \"home\"],\n\t\t\tdescription: \"Open documentation for a package in a web browser\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tisOptional: true,\n\t\t\t\tgenerators: npmSearchGenerator,\n\t\t\t\tdebounce: true,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...workSpaceOptions,\n\t\t\t\tregistryOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-browser\",\n\t\t\t\t\tdescription: \"Display in command line instead of browser\",\n\t\t\t\t\texclusiveOn: [\"--browser\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--browser\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The browser that is called by the npm docs command to open websites\",\n\t\t\t\t\targs: { name: \"browser\" },\n\t\t\t\t\texclusiveOn: [\"--no-browser\"],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"doctor\",\n\t\t\tdescription: \"Check your npm environment\",\n\t\t\toptions: [registryOption],\n\t\t},\n\t\t{\n\t\t\tname: \"edit\",\n\t\t\tdescription: \"Edit an installed package\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--editor\",\n\t\t\t\t\tdescription: \"The command to run for npm edit or npm config edit\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"explore\",\n\t\t\tdescription: \"Browse an installed package\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: dependenciesGenerator,\n\t\t\t},\n\t\t},\n\t\t{ name: \"fund\", description: \"Retrieve funding information\" },\n\t\t{ name: \"get\", description: \"Echo the config value to stdout\" },\n\t\t{\n\t\t\tname: \"help\",\n\t\t\tdescription: \"Get help on npm\",\n\t\t\targs: {\n\t\t\t\tname: \"term\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tdescription: \"Terms to search for\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--viewer\",\n\t\t\t\t\tdescription: \"The program to use to view help content\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"viewer\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"help-search\",\n\t\t\tdescription: \"Search npm help documentation\",\n\t\t\targs: {\n\t\t\t\tname: \"text\",\n\t\t\t\tdescription: \"Text to search for\",\n\t\t\t},\n\t\t\toptions: [longOption],\n\t\t},\n\t\t{ name: \"hook\", description: \"Manage registry hooks\" },\n\t\t{\n\t\t\tname: \"install-ci-test\",\n\t\t\tdescription: \"Install a project with a clean slate and run tests\",\n\t\t},\n\t\t{ name: \"install-test\", description: \"Install package(s) and run tests\" },\n\t\t{ name: \"it\", description: \"Install package(s) and run tests\" },\n\t\t{\n\t\t\tname: \"link\",\n\t\t\tdescription: \"Symlink a package folder\",\n\t\t\targs: { name: \"path\", template: \"filepaths\" },\n\t\t},\n\t\t{ name: \"ln\", description: \"Symlink a package folder\" },\n\t\t{\n\t\t\tname: \"logout\",\n\t\t\tdescription: \"Log out of the registry\",\n\t\t\toptions: [\n\t\t\t\tregistryOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--scope\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Associate an operation with a scope for a scoped registry\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"scope\",\n\t\t\t\t\t\tdescription: \"Scope name\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"ls\", \"list\"],\n\t\t\tdescription: \"List installed packages\",\n\t\t\toptions: npmListOptions,\n\t\t\targs: { name: \"[@scope]/pkg\", isVariadic: true },\n\t\t},\n\t\t{\n\t\t\tname: \"org\",\n\t\t\tdescription: \"Manage orgs\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"set\",\n\t\t\t\t\tdescription: \"Add a user to an org or manage roles\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"orgname\",\n\t\t\t\t\t\t\tdescription: \"Organization name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"username\",\n\t\t\t\t\t\t\tdescription: \"User name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"role\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t\tsuggestions: [\"developer\", \"admin\", \"owner\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"rm\",\n\t\t\t\t\tdescription: \"Remove a user from an org\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"orgname\",\n\t\t\t\t\t\t\tdescription: \"Organization name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"username\",\n\t\t\t\t\t\t\tdescription: \"User name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"ls\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List users in an org or see what roles a particular user has in an org\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"orgname\",\n\t\t\t\t\t\t\tdescription: \"Organization name\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"username\",\n\t\t\t\t\t\t\tdescription: \"User name\",\n\t\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [registryOption, otpOption, jsonOption, parseableOption],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"outdated\",\n\t\t\tdescription: \"Check for outdated packages\",\n\t\t\targs: {\n\t\t\t\tname: \"[<@scope>/]<pkg>\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-a\", \"-all\"],\n\t\t\t\t\tdescription: \"Show all outdated or installed packages\",\n\t\t\t\t},\n\t\t\t\tjsonOption,\n\t\t\t\tlongOption,\n\t\t\t\tparseableOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"-g\",\n\t\t\t\t\tdescription: \"Checks globally\",\n\t\t\t\t},\n\t\t\t\t...workSpaceOptions,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"owner\", \"author\"],\n\t\t\tdescription: \"Manage package owners\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"ls\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List all the users who have access to modify a package and push new versions. Handy when you need to know who to bug for help\",\n\t\t\t\t\targs: { name: \"[@scope/]pkg\" },\n\t\t\t\t\toptions: [registryOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Add a new user as a maintainer of a package. This user is enabled to modify metadata, publish new versions, and add other owners\",\n\t\t\t\t\targs: [{ name: \"user\" }, { name: \"[@scope/]pkg\" }],\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"rm\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Remove a user from the package owner list. This immediately revokes their privileges\",\n\t\t\t\t\targs: [{ name: \"user\" }, { name: \"[@scope/]pkg\" }],\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"pack\",\n\t\t\tdescription: \"Create a tarball from a package\",\n\t\t\targs: {\n\t\t\t\tname: \"[<@scope>/]<pkg>\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\tjsonOption,\n\t\t\t\tdryRunOption,\n\t\t\t\t...workSpaceOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--pack-destination\",\n\t\t\t\t\tdescription: \"Directory in which npm pack will save tarballs\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"pack-destination\",\n\t\t\t\t\t\ttemplate: [\"folders\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"ping\",\n\t\t\tdescription: \"Ping npm registry\",\n\t\t\toptions: [registryOption],\n\t\t},\n\t\t{\n\t\t\tname: \"pkg\",\n\t\t\tdescription: \"Manages your package.json\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"get\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Retrieves a value key, defined in your package.json file. It is possible to get multiple values and values for child fields\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"field\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Name of the field to get. You can view child fields by separating them with a period\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t\toptions: [jsonOption, ...workSpaceOptions],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"set\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Sets a value in your package.json based on the field value. It is possible to set multiple values and values for child fields\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\t// Format is <field>=<value>. How to achieve this?\n\t\t\t\t\t\tname: \"field\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Name of the field to set. You can set child fields by separating them with a period\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\tjsonOption,\n\t\t\t\t\t\t...workSpaceOptions,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Removes various protections against unfortunate side effects, common mistakes, unnecessary performance degradation, and malicious input. Allow clobbering existing values in npm pkg\",\n\t\t\t\t\t\t\tisDangerous: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"delete\",\n\t\t\t\t\tdescription: \"Deletes a key from your package.json\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"key\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Name of the key to delete. You can delete child fields by separating them with a period\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t...workSpaceOptions,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Removes various protections against unfortunate side effects, common mistakes, unnecessary performance degradation, and malicious input. Allow clobbering existing values in npm pkg\",\n\t\t\t\t\t\t\tisDangerous: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"prefix\",\n\t\t\tdescription: \"Display prefix\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-g\", \"--global\"],\n\t\t\t\t\tdescription: \"Print the global prefix to standard out\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"profile\",\n\t\t\tdescription: \"Change settings on your registry profile\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"get\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Display all of the properties of your profile, or one or more specific properties\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"property\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tdescription: \"Property name\",\n\t\t\t\t\t},\n\t\t\t\t\toptions: [registryOption, jsonOption, parseableOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"set\",\n\t\t\t\t\tdescription: \"Set the value of a profile property\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"property\",\n\t\t\t\t\t\t\tdescription: \"Property name\",\n\t\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\t\"email\",\n\t\t\t\t\t\t\t\t\"fullname\",\n\t\t\t\t\t\t\t\t\"homepage\",\n\t\t\t\t\t\t\t\t\"freenode\",\n\t\t\t\t\t\t\t\t\"twitter\",\n\t\t\t\t\t\t\t\t\"github\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"value\",\n\t\t\t\t\t\t\tdescription: \"Property value\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [registryOption, jsonOption, parseableOption, otpOption],\n\t\t\t\t\tsubcommands: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"password\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Change your password. This is interactive, you'll be prompted for your current password and a new password\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"enable-2fa\",\n\t\t\t\t\tdescription: \"Enables two-factor authentication\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"mode\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Mode for two-factor authentication. Defaults to auth-and-writes mode\",\n\t\t\t\t\t\tisOptional: true,\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"auth-only\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Require an OTP when logging in or making changes to your account's authentication\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"auth-and-writes\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Requires an OTP at all the times auth-only does, and also requires one when publishing a module, setting the latest dist-tag, or changing access via npm access and npm owner\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"disable-2fa\",\n\t\t\t\t\tdescription: \"Disables two-factor authentication\",\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"prune\",\n\t\t\tdescription: \"Remove extraneous packages\",\n\t\t\targs: {\n\t\t\t\tname: \"[<@scope>/]<pkg>\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\tomitOption,\n\t\t\t\tdryRunOption,\n\t\t\t\tjsonOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--production\",\n\t\t\t\t\tdescription: \"Remove the packages specified in your devDependencies\",\n\t\t\t\t},\n\t\t\t\t...workSpaceOptions,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"publish\",\n\t\t\tdescription: \"Publish a package\",\n\t\t\targs: {\n\t\t\t\tname: \"tarball|folder\",\n\t\t\t\tisOptional: true,\n\t\t\t\tdescription:\n\t\t\t\t\t\"A url or file path to a gzipped tar archive containing a single folder with a package.json file inside | A folder containing a package.json file\",\n\t\t\t\ttemplate: [\"folders\"],\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--tag\",\n\t\t\t\t\tdescription: \"Registers the published package with the given tag\",\n\t\t\t\t\targs: { name: \"tag\" },\n\t\t\t\t},\n\t\t\t\t...workSpaceOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--access\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Sets scoped package to be publicly viewable if set to 'public'\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tdefault: \"restricted\",\n\t\t\t\t\t\tsuggestions: [\"restricted\", \"public\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdryRunOption,\n\t\t\t\totpOption,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"rebuild\", \"rb\"],\n\t\t\tdescription: \"Rebuild a package\",\n\t\t\targs: {\n\t\t\t\tname: \"[<@scope>/]<pkg>[@<version>]\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\tglobalOption,\n\t\t\t\t...workSpaceOptions,\n\t\t\t\tignoreScriptsOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-bin-links\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Tells npm to not create symlinks (or .cmd shims on Windows) for package executables\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"repo\",\n\t\t\tdescription: \"Open package repository page in the browser\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tisOptional: true,\n\t\t\t\tgenerators: npmSearchGenerator,\n\t\t\t\tdebounce: true,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...workSpaceOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-browser\",\n\t\t\t\t\tdescription: \"Display in command line instead of browser\",\n\t\t\t\t\texclusiveOn: [\"--browser\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--browser\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"The browser that is called by the npm repo command to open websites\",\n\t\t\t\t\targs: { name: \"browser\" },\n\t\t\t\t\texclusiveOn: [\"--no-browser\"],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"restart\",\n\t\t\tdescription: \"Restart a package\",\n\t\t\toptions: [\n\t\t\t\tignoreScriptsOption,\n\t\t\t\tscriptShellOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"arg\",\n\t\t\t\t\t\tdescription: \"Arguments to be passed to the restart script\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"root\",\n\t\t\tdescription: \"Display npm root\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-g\", \"--global\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print the effective global node_modules folder to standard out\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"search\", \"s\", \"se\", \"find\"],\n\t\t\tdescription: \"Search for packages\",\n\t\t\targs: {\n\t\t\t\tname: \"search terms\",\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\tlongOption,\n\t\t\t\tjsonOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--color\",\n\t\t\t\t\tdescription: \"Show colors\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"always\",\n\t\t\t\t\t\tsuggestions: [\"always\"],\n\t\t\t\t\t\tdescription: \"Always show colors\",\n\t\t\t\t\t},\n\t\t\t\t\texclusiveOn: [\"--no-color\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-color\",\n\t\t\t\t\tdescription: \"Do not show colors\",\n\t\t\t\t\texclusiveOn: [\"--color\"],\n\t\t\t\t},\n\t\t\t\tparseableOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-description\",\n\t\t\t\t\tdescription: \"Do not show descriptions\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--searchopts\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Space-separated options that are always passed to search\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"searchopts\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--searchexclude\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Space-separated options that limit the results from search\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"searchexclude\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tregistryOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--prefer-online\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If true, staleness checks for cached data will be forced, making the CLI look for updates immediately even for fresh package data\",\n\t\t\t\t\texclusiveOn: [\"--prefer-offline\", \"--offline\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prefer-offline\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If true, staleness checks for cached data will be bypassed, but missing data will be requested from the server\",\n\t\t\t\t\texclusiveOn: [\"--prefer-online\", \"--offline\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--offline\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Force offline mode: no network requests will be done during install\",\n\t\t\t\t\texclusiveOn: [\"--prefer-online\", \"--prefer-offline\"],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{ name: \"set\", description: \"Sets the config key to the value\" },\n\t\t{\n\t\t\tname: \"set-script\",\n\t\t\tdescription: \"Set tasks in the scripts section of package.json\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"script\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Name of the task to be added to the scripts section of package.json\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"command\",\n\t\t\t\t\tdescription: \"Command to run when script is called\",\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: workSpaceOptions,\n\t\t},\n\t\t{\n\t\t\tname: \"shrinkwrap\",\n\t\t\tdescription: \"Lock down dependency versions for publication\",\n\t\t},\n\t\t{\n\t\t\tname: \"star\",\n\t\t\tdescription: \"Mark your favorite packages\",\n\t\t\targs: {\n\t\t\t\tname: \"pkg\",\n\t\t\t\tdescription: \"Package to mark as favorite\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\tregistryOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-unicode\",\n\t\t\t\t\tdescription: \"Do not use unicode characters in the tree output\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"stars\",\n\t\t\tdescription: \"View packages marked as favorites\",\n\t\t\targs: {\n\t\t\t\tname: \"user\",\n\t\t\t\tisOptional: true,\n\t\t\t\tdescription: \"View packages marked as favorites by <user>\",\n\t\t\t},\n\t\t\toptions: [registryOption],\n\t\t},\n\t\t{\n\t\t\tname: \"start\",\n\t\t\tdescription: \"Start a package\",\n\t\t\toptions: [\n\t\t\t\tignoreScriptsOption,\n\t\t\t\tscriptShellOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"arg\",\n\t\t\t\t\t\tdescription: \"Arguments to be passed to the start script\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"stop\",\n\t\t\tdescription: \"Stop a package\",\n\t\t\toptions: [\n\t\t\t\tignoreScriptsOption,\n\t\t\t\tscriptShellOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"arg\",\n\t\t\t\t\t\tdescription: \"Arguments to be passed to the stop script\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"team\",\n\t\t\tdescription: \"Manage organization teams and team memberships\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"create\",\n\t\t\t\t\targs: { name: \"scope:team\" },\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"destroy\",\n\t\t\t\t\targs: { name: \"scope:team\" },\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\targs: [{ name: \"scope:team\" }, { name: \"user\" }],\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"rm\",\n\t\t\t\t\targs: [{ name: \"scope:team\" }, { name: \"user\" }],\n\t\t\t\t\toptions: [registryOption, otpOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"ls\",\n\t\t\t\t\targs: { name: \"scope|scope:team\" },\n\t\t\t\t\toptions: [registryOption, jsonOption, parseableOption],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"test\", \"tst\", \"t\"],\n\t\t\tdescription: \"Test a package\",\n\t\t\toptions: [ignoreScriptsOption, scriptShellOption],\n\t\t},\n\t\t{\n\t\t\tname: \"token\",\n\t\t\tdescription: \"Manage your authentication tokens\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"Shows a table of all active authentication tokens\",\n\t\t\t\t\toptions: [jsonOption, parseableOption],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"create\",\n\t\t\t\t\tdescription: \"Create a new authentication token\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--read-only\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"This is used to mark a token as unable to publish when configuring limited access tokens with the npm token create command\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--cidr\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"This is a list of CIDR address to be used when configuring limited access tokens with the npm token create command\",\n\t\t\t\t\t\t\tisRepeatable: true,\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"cidr\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"revoke\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Immediately removes an authentication token from the registry. You will no longer be able to use it\",\n\t\t\t\t\targs: { name: \"idtoken\" },\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [registryOption, otpOption],\n\t\t},\n\t\tuninstallSubcommand(\"uninstall\"),\n\t\tuninstallSubcommand([\"r\", \"rm\"]),\n\t\tuninstallSubcommand(\"un\"),\n\t\tuninstallSubcommand(\"remove\"),\n\t\tuninstallSubcommand(\"unlink\"),\n\t\t{\n\t\t\tname: \"unpublish\",\n\t\t\tdescription: \"Remove a package from the registry\",\n\t\t\targs: {\n\t\t\t\tname: \"[<@scope>/]<pkg>[@<version>]\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\tdryRunOption,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Allow unpublishing all versions of a published package. Removes various protections against unfortunate side effects, common mistakes, unnecessary performance degradation, and malicious input\",\n\t\t\t\t\tisDangerous: true,\n\t\t\t\t},\n\t\t\t\t...workSpaceOptions,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"unstar\",\n\t\t\tdescription: \"Remove an item from your favorite packages\",\n\t\t\targs: {\n\t\t\t\tname: \"pkg\",\n\t\t\t\tdescription: \"Package to unmark as favorite\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\tregistryOption,\n\t\t\t\totpOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-unicode\",\n\t\t\t\t\tdescription: \"Do not use unicode characters in the tree output\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"update\", \"upgrade\", \"up\"],\n\t\t\tdescription: \"Update a package\",\n\t\t\toptions: [\n\t\t\t\t{ name: \"-g\", description: \"Update global package\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--global-style\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Causes npm to install the package into your local node_modules folder with the same layout it uses with the global node_modules folder\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--legacy-bundling\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Causes npm to install the package such that versions of npm prior to 1.4, such as the one included with node 0.8, can install the package\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--strict-peer-deps\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If set to true, and --legacy-peer-deps is not set, then any conflicting peerDependencies will be treated as an install failure\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-package-lock\",\n\t\t\t\t\tdescription: \"Ignores package-lock.json files when installing\",\n\t\t\t\t},\n\t\t\t\tomitOption,\n\t\t\t\tignoreScriptsOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-audit\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Submit audit reports alongside the current npm command to the default registry and all registries configured for scopes\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-bin-links\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Tells npm to not create symlinks (or .cmd shims on Windows) for package executables\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-fund\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Hides the message at the end of each npm install acknowledging the number of dependencies looking for funding\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--save\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Update the semver values of direct dependencies in your project package.json\",\n\t\t\t\t},\n\t\t\t\tdryRunOption,\n\t\t\t\t...workSpaceOptions,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"version\",\n\t\t\tdescription: \"Bump a package version\",\n\t\t\toptions: [\n\t\t\t\t...workSpaceOptions,\n\t\t\t\tjsonOption,\n\t\t\t\t{\n\t\t\t\t\tname: \"--allow-same-version\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Prevents throwing an error when npm version is used to set the new version to the same value as the current version\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-commit-hooks\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not run git commit hooks when using the npm version command\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-git-tag-version\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Do not tag the commit when using the npm version command\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--preid\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'The \"prerelease identifier\" to use as a prefix for the \"prerelease\" part of a semver. Like the rc in 1.2.0-rc.8',\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"prerelease-id\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--sign-git-tag\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If set to true, then the npm version command will tag the version using -s to add a signature\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: [\"view\", \"v\", \"info\", \"show\"],\n\t\t\tdescription: \"View registry info\",\n\t\t\toptions: [...workSpaceOptions, jsonOption],\n\t\t},\n\t\t{\n\t\t\tname: \"whoami\",\n\t\t\tdescription: \"Display npm username\",\n\t\t\toptions: [registryOption],\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/nvm.ts",
    "content": "// args\nconst version: Fig.Arg = {\n\tname: \"version\",\n\tdescription: \"Node version\",\n\tsuggestions: [\n\t\t{\n\t\t\tname: \"node\",\n\t\t\tdescription: \"The latest version of node\",\n\t\t},\n\t\t{\n\t\t\tname: \"iojs\",\n\t\t\tdescription: \"The latest version of io.js\",\n\t\t},\n\t\t{\n\t\t\tname: \"system\",\n\t\t\tdescription: \"System-installed version of node\",\n\t\t},\n\t],\n};\n\nconst command: Fig.Arg = {\n\tname: \"command\",\n\tisVariadic: true,\n};\n\nconst args: Fig.Arg = {\n\tname: \"args\",\n\tisVariadic: true,\n};\n\nconst name: Fig.Arg = {\n\tname: \"name\",\n};\n\nconst ltsName: Fig.Arg = {\n\tname: \"LTS name\",\n};\n\nconst colorCodes: Fig.Arg = {\n\tname: \"color codes\",\n\tdescription: 'Using format \"yMeBg\"',\n};\n\n// options\nconst noColors: Fig.Option = {\n\tname: \"--no-colors\",\n\tdescription: \"Suppress colored output\",\n};\n\nconst noAlias: Fig.Option = {\n\tname: \"--no-alias\",\n\tdescription: \"Suppress `nvm alias` output\",\n};\n\nconst silent: Fig.Option = {\n\tname: \"--silent\",\n\tdescription: \"Silences stdout/stderr output\",\n};\n\nconst lts: Fig.Option = {\n\tname: \"--lts\",\n\tdescription:\n\t\t\"Uses automatic LTS (long-term support) alias `lts/*`, if available\",\n};\n\nconst ltsWithName: Fig.Option = {\n\tname: \"--lts\",\n\tdescription: \"Uses automatic alias for provided LTS line, if available\",\n\targs: ltsName,\n};\n\nconst completionSpec: Fig.Spec = {\n\tname: \"nvm\",\n\tdescription: \"Node Package Manager\",\n\tsubcommands: [\n\t\t{\n\t\t\tname: \"install\",\n\t\t\tdescription:\n\t\t\t\t\"Download and install a <version>. Uses .nvmrc if available and version is omitted\",\n\t\t\targs: { ...version, isOptional: true },\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"-s\",\n\t\t\t\t\tdescription: \"Skip binary download, install from source only\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--reinstall-packages-from\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When installing, reinstall packages installed in <version>\",\n\t\t\t\t\targs: version,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...lts,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When installing, only select from LTS (long-term support) versions\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...ltsWithName,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When installing, only select from versions for a specific LTS line\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--skip-default-packages\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When installing, skip the default-packages file if it exists\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--latest-npm\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"After installing, attempt to upgrade to the latest working npm on the given node version\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-progress\",\n\t\t\t\t\tdescription: \"Disable the progress bar on any downloads\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--alias\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)\",\n\t\t\t\t\targs: name,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--default\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"After installing, set default alias to the version specified. (same as: nvm alias default <version>)\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"uninstall\",\n\t\t\tdescription: \"Uninstall a version\",\n\t\t\targs: version,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\t...lts,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Uninstall using automatic LTS (long-term support) alias `lts/*`, if available\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...ltsWithName,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Uninstall using automatic alias for provided LTS line, if available\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"use\",\n\t\t\tdescription:\n\t\t\t\t\"Modify PATH to use <version>. Uses .nvmrc if available and version is omitted\",\n\t\t\targs: { ...version, isOptional: true },\n\t\t\toptions: [silent, lts, ltsWithName],\n\t\t},\n\t\t{\n\t\t\tname: \"exec\",\n\t\t\tdescription:\n\t\t\t\t\"Run <command> on <version>. Uses .nvmrc if available and version is omitted\",\n\t\t\targs: [{ ...version, isOptional: true }, command],\n\t\t\toptions: [silent, lts, ltsWithName],\n\t\t},\n\t\t{\n\t\t\tname: \"run\",\n\t\t\tdescription:\n\t\t\t\t\"Run `node` on <version> with <args> as arguments. Uses .nvmrc if available and version is omitted\",\n\t\t\targs: [{ ...version, isOptional: true }, args],\n\t\t\toptions: [silent, lts, ltsWithName],\n\t\t},\n\t\t{\n\t\t\tname: \"current\",\n\t\t\tdescription: \"Display currently activated version of Node\",\n\t\t},\n\t\t{\n\t\t\tname: \"ls\",\n\t\t\tdescription:\n\t\t\t\t\"List installed versions, matching a given <version> if provided\",\n\t\t\targs: version,\n\t\t\toptions: [noColors, noAlias],\n\t\t},\n\t\t{\n\t\t\tname: \"ls-remote\",\n\t\t\tdescription:\n\t\t\t\t\"List remote versions available for install, matching a given <version> if provided\",\n\t\t\targs: version,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\t...lts,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When listing, only show LTS (long-term support) versions\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...ltsWithName,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When listing, only show versions for a specific LTS line\",\n\t\t\t\t},\n\t\t\t\tnoColors,\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"version\",\n\t\t\tdescription: \"Resolve the given description to a single local version\",\n\t\t\targs: version,\n\t\t},\n\t\t{\n\t\t\tname: \"version-remote\",\n\t\t\tdescription: \"Resolve the given description to a single remote version\",\n\t\t\targs: version,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\t...lts,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When listing, only show LTS (long-term support) versions\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...ltsWithName,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"When listing, only show versions for a specific LTS line\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"deactivate\",\n\t\t\tdescription: \"Undo effects of `nvm` on current shell\",\n\t\t\toptions: [silent],\n\t\t},\n\t\t{\n\t\t\tname: \"alias\",\n\t\t\tdescription:\n\t\t\t\t\"Show all aliases beginning with <pattern> or Set an alias named <name> pointing to <version>\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"pattern or name\",\n\t\t\t\t\tdescription: \"Pattern or name\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"version\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"unalias\",\n\t\t\tdescription: \"Deletes the alias named <name>\",\n\t\t\targs: name,\n\t\t},\n\t\t{\n\t\t\tname: \"install-latest-npm\",\n\t\t\tdescription:\n\t\t\t\t\"Attempt to upgrade to the latest working `npm` on the current node version\",\n\t\t},\n\t\t{\n\t\t\tname: \"reinstall-packages\",\n\t\t\tdescription:\n\t\t\t\t\"Reinstall global `npm` packages contained in <version> to current version\",\n\t\t\targs: version,\n\t\t},\n\t\t{\n\t\t\tname: \"unload\",\n\t\t\tdescription: \"Unload `nvm` from shell\",\n\t\t},\n\t\t{\n\t\t\tname: \"which\",\n\t\t\tdescription:\n\t\t\t\t\"Display path to installed node version. Uses .nvmrc if available and version is omitted\",\n\t\t\targs: { ...version, isOptional: true },\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"current\",\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\t...silent,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Silences stdout/stderr output when a version is omitted\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"cache\",\n\t\t\targs: {\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dir\",\n\t\t\t\t\t\tdescription: \"Display path to the cache directory for nvm\",\n\t\t\t\t\t\ttype: \"subcommand\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"clear\",\n\t\t\t\t\t\tdescription: \"Empty cache directory for nvm\",\n\t\t\t\t\t\ttype: \"subcommand\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"set-colors\",\n\t\t\tdescription:\n\t\t\t\t'Set five text colors using format \"yMeBg\". Available when supported',\n\t\t\targs: colorCodes,\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"--help\",\n\t\t\tdescription: \"Show help page\",\n\t\t},\n\t\t{\n\t\t\tname: \"--version\",\n\t\t\tdescription: \"Print out the installed version of nvm\",\n\t\t},\n\t\tnoColors,\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/pnpm.ts",
    "content": "// GENERATORS\n\nimport { npmScriptsGenerator, npmSearchGenerator } from \"./npm\";\nimport { dependenciesGenerator, nodeClis } from \"./yarn\";\n\nconst filterMessages = (out: string): string => {\n\treturn out.startsWith(\"warning:\") || out.startsWith(\"error:\")\n\t\t? out.split(\"\\n\").slice(1).join(\"\\n\")\n\t\t: out;\n};\n\nconst searchBranches: Fig.Generator = {\n\tscript: [\"git\", \"branch\", \"--no-color\"],\n\tpostProcess: function (out) {\n\t\tconst output = filterMessages(out);\n\n\t\tif (output.startsWith(\"fatal:\")) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn output.split(\"\\n\").map((elm) => {\n\t\t\tlet name = elm.trim();\n\t\t\tconst parts = elm.match(/\\S+/g);\n\t\t\tif (parts && parts.length > 1) {\n\t\t\t\tif (parts[0] == \"*\") {\n\t\t\t\t\t// Current branch.\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: elm.replace(\"*\", \"\").trim(),\n\t\t\t\t\t\tdescription: \"Current branch\",\n\t\t\t\t\t\ticon: \"⭐️\",\n\t\t\t\t\t};\n\t\t\t\t} else if (parts[0] == \"+\") {\n\t\t\t\t\t// Branch checked out in another worktree.\n\t\t\t\t\tname = elm.replace(\"+\", \"\").trim();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tdescription: \"Branch\",\n\t\t\t\ticon: \"fig://icon?type=git\",\n\t\t\t};\n\t\t});\n\t},\n};\n\nconst generatorInstalledPackages: Fig.Generator = {\n\tscript: [\"pnpm\", \"ls\"],\n\tpostProcess: function (out) {\n\t\t/**\n\t\t * out\n\t\t * @example\n\t\t * ```\n\t\t * Legend: production dependency, optional only, dev only\n\t\t *\n\t\t * /xxxx/xxxx/<package-name> (PRIVATE)\n\t\t *\n\t\t * dependencies:\n\t\t * lodash 4.17.21\n\t\t * foo link:packages/foo\n\t\t *\n\t\t * devDependencies:\n\t\t * typescript 4.7.4\n\t\t * ```\n\t\t */\n\t\tif (out.includes(\"ERR_PNPM\")) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst output = out\n\t\t\t.split(\"\\n\")\n\t\t\t.slice(3)\n\t\t\t// remove empty lines, \"*dependencies:\" lines, local workspace packages (eg: \"foo\":\"workspace:*\")\n\t\t\t.filter(\n\t\t\t\t(item) =>\n\t\t\t\t\t!!item &&\n\t\t\t\t\t!item.toLowerCase().includes(\"dependencies\") &&\n\t\t\t\t\t!item.includes(\"link:\")\n\t\t\t)\n\t\t\t.map((item) => item.replace(/\\s/, \"@\")); // typescript 4.7.4 -> typescript@4.7.4\n\n\t\treturn output.map((pkg) => {\n\t\t\treturn {\n\t\t\t\tname: pkg,\n\t\t\t\ticon: \"fig://icon?type=package\",\n\t\t\t};\n\t\t});\n\t},\n};\n\nconst FILTER_OPTION: Fig.Option = {\n\tname: \"--filter\",\n\targs: {\n\t\ttemplate: \"filepaths\",\n\t\tname: \"Filepath / Package\",\n\t\tdescription:\n\t\t\t\"To only select packages under the specified directory, you may specify any absolute path, typically in POSIX format\",\n\t},\n\tdescription: `Filtering allows you to restrict commands to specific subsets of packages.\npnpm supports a rich selector syntax for picking packages by name or by relation.\nMore details: https://pnpm.io/filtering`,\n};\n\n/** Options that being appended for `pnpm i` and `add` */\nconst INSTALL_BASE_OPTIONS: Fig.Option[] = [\n\t{\n\t\tname: \"--offline\",\n\t\tdescription:\n\t\t\t\"If true, pnpm will use only packages already available in the store. If a package won't be found locally, the installation will fail\",\n\t},\n\t{\n\t\tname: \"--prefer-offline\",\n\t\tdescription:\n\t\t\t\"If true, staleness checks for cached data will be bypassed, but missing data will be requested from the server. To force full offline mode, use --offline\",\n\t},\n\t{\n\t\tname: \"--ignore-scripts\",\n\t\tdescription:\n\t\t\t\"Do not execute any scripts defined in the project package.json and its dependencies\",\n\t},\n\t{\n\t\tname: \"--reporter\",\n\t\tdescription: `Allows you to choose the reporter that will log debug info to the terminal about the installation progress`,\n\t\targs: {\n\t\t\tname: \"Reporter Type\",\n\t\t\tsuggestions: [\"silent\", \"default\", \"append-only\", \"ndjson\"],\n\t\t},\n\t},\n];\n\n/** Base options for pnpm i when run without any arguments */\nconst INSTALL_OPTIONS: Fig.Option[] = [\n\t{\n\t\tname: [\"-P\", \"--save-prod\"],\n\t\tdescription: `Pnpm will not install any package listed in devDependencies if the NODE_ENV environment variable is set to production.\nUse this flag to instruct pnpm to ignore NODE_ENV and take its production status from this flag instead`,\n\t},\n\t{\n\t\tname: [\"-D\", \"--save-dev\"],\n\t\tdescription:\n\t\t\t\"Only devDependencies are installed regardless of the NODE_ENV\",\n\t},\n\t{\n\t\tname: \"--no-optional\",\n\t\tdescription: \"OptionalDependencies are not installed\",\n\t},\n\t{\n\t\tname: \"--lockfile-only\",\n\t\tdescription:\n\t\t\t\"When used, only updates pnpm-lock.yaml and package.json instead of checking node_modules and downloading dependencies\",\n\t},\n\t{\n\t\tname: \"--frozen-lockfile\",\n\t\tdescription:\n\t\t\t\"If true, pnpm doesn't generate a lockfile and fails to install if the lockfile is out of sync with the manifest / an update is needed or no lockfile is present\",\n\t},\n\t{\n\t\tname: \"--use-store-server\",\n\t\tdescription:\n\t\t\t\"Starts a store server in the background. The store server will keep running after installation is done. To stop the store server, run pnpm server stop\",\n\t},\n\t{\n\t\tname: \"--shamefully-hoist\",\n\t\tdescription:\n\t\t\t\"Creates a flat node_modules structure, similar to that of npm or yarn. WARNING: This is highly discouraged\",\n\t},\n];\n\n/** Base options for pnpm add */\nconst INSTALL_PACKAGE_OPTIONS: Fig.Option[] = [\n\t{\n\t\tname: [\"-P\", \"--save-prod\"],\n\t\tdescription: \"Install the specified packages as regular dependencies\",\n\t},\n\t{\n\t\tname: [\"-D\", \"--save-dev\"],\n\t\tdescription: \"Install the specified packages as devDependencies\",\n\t},\n\t{\n\t\tname: [\"-O\", \"--save-optional\"],\n\t\tdescription: \"Install the specified packages as optionalDependencies\",\n\t},\n\t{\n\t\tname: \"--no-save\",\n\t\tdescription: \"Prevents saving to `dependencies`\",\n\t},\n\t{\n\t\tname: [\"-E\", \"--save-exact\"],\n\t\tdescription:\n\t\t\t\"Saved dependencies will be configured with an exact version rather than using pnpm's default semver range operator\",\n\t},\n\t{\n\t\tname: \"--save-peer\",\n\t\tdescription:\n\t\t\t\"Using --save-peer will add one or more packages to peerDependencies and install them as dev dependencies\",\n\t},\n\t{\n\t\tname: [\"--ignore-workspace-root-check\", \"-W#\"],\n\t\tdescription: `Adding a new dependency to the root workspace package fails, unless the --ignore-workspace-root-check or -W flag is used.\nFor instance, pnpm add debug -W`,\n\t},\n\t{\n\t\tname: [\"--global\", \"-g\"],\n\t\tdescription: `Install a package globally`,\n\t},\n\t{\n\t\tname: \"--workspace\",\n\t\tdescription: `Only adds the new dependency if it is found in the workspace`,\n\t},\n\tFILTER_OPTION,\n];\n\n// SUBCOMMANDS\nconst SUBCOMMANDS_MANAGE_DEPENDENCIES: Fig.Subcommand[] = [\n\t{\n\t\tname: \"add\",\n\t\tdescription: `Installs a package and any packages that it depends on. By default, any new package is installed as a production dependency`,\n\t\targs: {\n\t\t\tname: \"package\",\n\t\t\tgenerators: npmSearchGenerator,\n\t\t\tdebounce: true,\n\t\t\tisVariadic: true,\n\t\t},\n\t\toptions: [...INSTALL_BASE_OPTIONS, ...INSTALL_PACKAGE_OPTIONS],\n\t},\n\t{\n\t\tname: [\"install\", \"i\"],\n\t\tdescription: `Pnpm install is used to install all dependencies for a project.\nIn a CI environment, installation fails if a lockfile is present but needs an update.\nInside a workspace, pnpm install installs all dependencies in all the projects.\nIf you want to disable this behavior, set the recursive-install setting to false`,\n\t\tasync generateSpec(tokens) {\n\t\t\t// `pnpm i` with args is an `pnpm add` alias\n\t\t\tconst hasArgs =\n\t\t\t\ttokens.filter((token) => token.trim() !== \"\" && !token.startsWith(\"-\"))\n\t\t\t\t\t.length > 2;\n\n\t\t\treturn {\n\t\t\t\tname: \"install\",\n\t\t\t\toptions: [\n\t\t\t\t\t...INSTALL_BASE_OPTIONS,\n\t\t\t\t\t...(hasArgs ? INSTALL_PACKAGE_OPTIONS : INSTALL_OPTIONS),\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\targs: {\n\t\t\tname: \"package\",\n\t\t\tisOptional: true,\n\t\t\tgenerators: npmSearchGenerator,\n\t\t\tdebounce: true,\n\t\t\tisVariadic: true,\n\t\t},\n\t},\n\t{\n\t\tname: [\"install-test\", \"it\"],\n\t\tdescription:\n\t\t\t\"Runs pnpm install followed immediately by pnpm test. It takes exactly the same arguments as pnpm install\",\n\t\toptions: [...INSTALL_BASE_OPTIONS, ...INSTALL_OPTIONS],\n\t},\n\t{\n\t\tname: [\"update\", \"upgrade\", \"up\"],\n\t\tdescription: `Pnpm update updates packages to their latest version based on the specified range.\nWhen used without arguments, updates all dependencies. You can use patterns to update specific dependencies`,\n\t\targs: {\n\t\t\tname: \"Package\",\n\t\t\tisOptional: true,\n\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\tgenerators: dependenciesGenerator,\n\t\t\tisVariadic: true,\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--recursive\", \"-r\"],\n\t\t\t\tdescription:\n\t\t\t\t\t\"Concurrently runs update in all subdirectories with a package.json (excluding node_modules)\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--latest\", \"-L\"],\n\t\t\t\tdescription:\n\t\t\t\t\t\"Ignores the version range specified in package.json. Instead, the version specified by the latest tag will be used (potentially upgrading the packages across major versions)\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--global\",\n\t\t\t\tdescription: \"Update global packages\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"-P\", \"--save-prod\"],\n\t\t\t\tdescription: `Only update packages in dependencies and optionalDependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"-D\", \"--save-dev\"],\n\t\t\t\tdescription: \"Only update packages in devDependencies\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-optional\",\n\t\t\t\tdescription: \"Don't update packages in optionalDependencies\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--interactive\", \"-i\"],\n\t\t\t\tdescription:\n\t\t\t\t\t\"Show outdated dependencies and select which ones to update\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--workspace\",\n\t\t\t\tdescription: `Tries to link all packages from the workspace. Versions are updated to match the versions of packages inside the workspace.\nIf specific packages are updated, the command will fail if any of the updated dependencies are not found inside the workspace. For instance, the following command fails if express is not a workspace package: pnpm up -r --workspace express`,\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: [\"remove\", \"rm\", \"uninstall\", \"un\"],\n\t\tdescription: `Removes packages from node_modules and from the project's package.json`,\n\t\targs: {\n\t\t\tname: \"Package\",\n\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\tgenerators: dependenciesGenerator,\n\t\t\tisVariadic: true,\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--recursive\", \"-r\"],\n\t\t\t\tdescription: `When used inside a workspace, removes a dependency (or dependencies) from every workspace package.\nWhen used not inside a workspace, removes a dependency (or dependencies) from every package found in subdirectories`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--global\",\n\t\t\t\tdescription: \"Remove a global package\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"-P\", \"--save-prod\"],\n\t\t\t\tdescription: `Only remove the dependency from dependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"-D\", \"--save-dev\"],\n\t\t\t\tdescription: \"Only remove the dependency from devDependencies\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--save-optional\", \"-O\"],\n\t\t\t\tdescription: \"Only remove the dependency from optionalDependencies\",\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: [\"link\", \"ln\"],\n\t\tdescription: `Makes the current local package accessible system-wide, or in another location`,\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: \"Package\",\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: dependenciesGenerator,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\t{ template: \"filepaths\" },\n\t\t],\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--dir\", \"-C\"],\n\t\t\t\tdescription: `Changes the link location to <dir>`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--global\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Links the specified package (<pkg>) from global node_modules to the node_nodules of package from where this command was executed or specified via --dir option\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"unlink\",\n\t\tdescription: `Unlinks a system-wide package (inverse of pnpm link).\nIf called without arguments, all linked dependencies will be unlinked.\nThis is similar to yarn unlink, except pnpm re-installs the dependency after removing the external link`,\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: \"Package\",\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: dependenciesGenerator,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\t{ template: \"filepaths\" },\n\t\t],\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--recursive\", \"-r\"],\n\t\t\t\tdescription: `Unlink in every package found in subdirectories or in every workspace package, when executed inside a workspace`,\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: \"import\",\n\t\tdescription:\n\t\t\t\"Pnpm import generates a pnpm-lock.yaml from an npm package-lock.json (or npm-shrinkwrap.json) file\",\n\t},\n\t{\n\t\tname: [\"rebuild\", \"rb\"],\n\t\tdescription: `Rebuild a package`,\n\t\targs: [\n\t\t\t{\n\t\t\t\tname: \"Package\",\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: dependenciesGenerator,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\t{ template: \"filepaths\" },\n\t\t],\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--recursive\", \"-r\"],\n\t\t\t\tdescription: `This command runs the pnpm rebuild command in every package of the monorepo`,\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: \"prune\",\n\t\tdescription: `Removes unnecessary packages`,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: \"--prod\",\n\t\t\t\tdescription: `Remove the packages specified in devDependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-optional\",\n\t\t\t\tdescription: `Remove the packages specified in optionalDependencies`,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"fetch\",\n\t\tdescription: `EXPERIMENTAL FEATURE: Fetch packages from a lockfile into virtual store, package manifest is ignored: https://pnpm.io/cli/fetch`,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: \"--prod\",\n\t\t\t\tdescription: `Development packages will not be fetched`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--dev\",\n\t\t\t\tdescription: `Only development packages will be fetched`,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"patch\",\n\t\tdescription: `This command will cause a package to be extracted in a temporary directory intended to be editable at will`,\n\t\targs: {\n\t\t\tname: \"package\",\n\t\t\tgenerators: generatorInstalledPackages,\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: \"--edit-dir\",\n\t\t\t\tdescription: `The package that needs to be patched will be extracted to this directory`,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"patch-commit\",\n\t\targs: {\n\t\t\tname: \"dir\",\n\t\t},\n\t\tdescription: `Generate a patch out of a directory`,\n\t},\n\t{\n\t\tname: \"patch-remove\",\n\t\targs: {\n\t\t\tname: \"package\",\n\t\t\tisVariadic: true,\n\t\t\t// TODO: would be nice to have a generator of all patched packages\n\t\t},\n\t},\n];\n\nconst SUBCOMMANDS_RUN_SCRIPTS: Fig.Subcommand[] = [\n\t{\n\t\tname: [\"run\", \"run-script\"],\n\t\tdescription: \"Runs a script defined in the package's manifest file\",\n\t\targs: {\n\t\t\tname: \"Scripts\",\n\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\tgenerators: npmScriptsGenerator,\n\t\t\tisVariadic: true,\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"-r\", \"--recursive\"],\n\t\t\t\tdescription: `This runs an arbitrary command from each package's \"scripts\" object. If a package doesn't have the command, it is skipped. If none of the packages have the command, the command fails`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--if-present\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"You can use the --if-present flag to avoid exiting with a non-zero exit code when the script is undefined. This lets you run potentially undefined scripts without breaking the execution chain\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--parallel\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Completely disregard concurrency and topological sorting, running a given script immediately in all matching packages with prefixed streaming output. This is the preferred flag for long-running processes over many packages, for instance, a lengthy build process\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--stream\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Stream output from child processes immediately, prefixed with the originating package directory. This allows output from different packages to be interleaved\",\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: \"exec\",\n\t\tdescription: `Execute a shell command in scope of a project.\nnode_modules/.bin is added to the PATH, so pnpm exec allows executing commands of dependencies`,\n\t\targs: {\n\t\t\tname: \"Scripts\",\n\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\tgenerators: dependenciesGenerator,\n\t\t\tisVariadic: true,\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"-r\", \"--recursive\"],\n\t\t\t\tdescription: `Execute the shell command in every project of the workspace.\nThe name of the current package is available through the environment variable PNPM_PACKAGE_NAME (supported from pnpm v2.22.0 onwards)`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--parallel\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Completely disregard concurrency and topological sorting, running a given script immediately in all matching packages with prefixed streaming output. This is the preferred flag for long-running processes over many packages, for instance, a lengthy build process\",\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: [\"test\", \"t\", \"tst\"],\n\t\tdescription: `Runs an arbitrary command specified in the package's test property of its scripts object.\nThe intended usage of the property is to specify a command that runs unit or integration testing for your program`,\n\t},\n\t{\n\t\tname: \"start\",\n\t\tdescription: `Runs an arbitrary command specified in the package's start property of its scripts object. If no start property is specified on the scripts object, it will attempt to run node server.js as a default, failing if neither are present.\nThe intended usage of the property is to specify a command that starts your program`,\n\t},\n];\n\nconst SUBCOMMANDS_REVIEW_DEPS: Fig.Subcommand[] = [\n\t{\n\t\tname: \"audit\",\n\t\tdescription: `Checks for known security issues with the installed packages.\nIf security issues are found, try to update your dependencies via pnpm update.\nIf a simple update does not fix all the issues, use overrides to force versions that are not vulnerable.\nFor instance, if lodash@<2.1.0 is vulnerable, use overrides to force lodash@^2.1.0.\nDetails at: https://pnpm.io/cli/audit`,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: \"--audit-level\",\n\t\t\t\tdescription: `Only print advisories with severity greater than or equal to <severity>`,\n\t\t\t\targs: {\n\t\t\t\t\tname: \"Audit Level\",\n\t\t\t\t\tdefault: \"low\",\n\t\t\t\t\tsuggestions: [\"low\", \"moderate\", \"high\", \"critical\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--fix\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Add overrides to the package.json file in order to force non-vulnerable versions of the dependencies\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--json\",\n\t\t\t\tdescription: `Output audit report in JSON format`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--dev\", \"-D\"],\n\t\t\t\tdescription: `Only audit dev dependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--prod\", \"-P\"],\n\t\t\t\tdescription: `Only audit production dependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-optional\",\n\t\t\t\tdescription: `Don't audit optionalDependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--ignore-registry-errors\",\n\t\t\t\tdescription: `If the registry responds with a non-200 status code, the process should exit with 0. So the process will fail only if the registry actually successfully responds with found vulnerabilities`,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: [\"list\", \"ls\"],\n\t\tdescription: `This command will output all the versions of packages that are installed, as well as their dependencies, in a tree-structure.\nPositional arguments are name-pattern@version-range identifiers, which will limit the results to only the packages named. For example, pnpm list \"babel-*\" \"eslint-*\" semver@5`,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--recursive\", \"-r\"],\n\t\t\t\tdescription: `Perform command on every package in subdirectories or on every workspace package, when executed inside a workspace`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--json\",\n\t\t\t\tdescription: `Log output in JSON format`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--long\",\n\t\t\t\tdescription: `Show extended information`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--parseable\",\n\t\t\t\tdescription: `Outputs package directories in a parseable format instead of their tree view`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--global\",\n\t\t\t\tdescription: `List packages in the global install directory instead of in the current project`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--depth\",\n\t\t\t\tdescription: `Max display depth of the dependency tree.\npnpm ls --depth 0 will list direct dependencies only. pnpm ls --depth -1 will list projects only. Useful inside a workspace when used with the -r option`,\n\t\t\t\targs: { name: \"number\" },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--dev\", \"-D\"],\n\t\t\t\tdescription: `Only list dev dependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--prod\", \"-P\"],\n\t\t\t\tdescription: `Only list production dependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-optional\",\n\t\t\t\tdescription: `Don't list optionalDependencies`,\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: \"outdated\",\n\t\tdescription: `Checks for outdated packages. The check can be limited to a subset of the installed packages by providing arguments (patterns are supported)`,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--recursive\", \"-r\"],\n\t\t\t\tdescription: `Check for outdated dependencies in every package found in subdirectories, or in every workspace package when executed inside a workspace`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--long\",\n\t\t\t\tdescription: `Print details`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--global\",\n\t\t\t\tdescription: `List outdated global packages`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-table\",\n\t\t\t\tdescription: `Prints the outdated dependencies in a list format instead of the default table. Good for small consoles`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--compatible\",\n\t\t\t\tdescription: `Prints only versions that satisfy specifications in package.json`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--dev\", \"-D\"],\n\t\t\t\tdescription: `Only list dev dependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--prod\", \"-P\"],\n\t\t\t\tdescription: `Only list production dependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-optional\",\n\t\t\t\tdescription: `Doesn't check optionalDependencies`,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"why\",\n\t\tdescription: `Shows all packages that depend on the specified package`,\n\t\targs: {\n\t\t\tname: \"Scripts\",\n\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\tgenerators: dependenciesGenerator,\n\t\t\tisVariadic: true,\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: [\"--recursive\", \"-r\"],\n\t\t\t\tdescription: `Show the dependency tree for the specified package on every package in subdirectories or on every workspace package when executed inside a workspace`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--json\",\n\t\t\t\tdescription: `Log output in JSON format`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--long\",\n\t\t\t\tdescription: `Show verbose output`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--parseable\",\n\t\t\t\tdescription: `Show parseable output instead of tree view`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--global\",\n\t\t\t\tdescription: `List packages in the global install directory instead of in the current project`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--dev\", \"-D\"],\n\t\t\t\tdescription: `Only display the dependency tree for packages in devDependencies`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: [\"--prod\", \"-P\"],\n\t\t\t\tdescription: `Only display the dependency tree for packages in dependencies`,\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n];\n\nconst SUBCOMMANDS_MISC: Fig.Subcommand[] = [\n\t{\n\t\tname: \"publish\",\n\t\tdescription: `Publishes a package to the registry.\nWhen publishing a package inside a workspace, the LICENSE file from the root of the workspace is packed with the package (unless the package has a license of its own).\nYou may override some fields before publish, using the publishConfig field in package.json. You also can use the publishConfig.directory to customize the published subdirectory (usually using third party build tools).\nWhen running this command recursively (pnpm -r publish), pnpm will publish all the packages that have versions not yet published to the registry`,\n\t\targs: {\n\t\t\tname: \"Branch\",\n\t\t\tgenerators: searchBranches,\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: \"--tag\",\n\t\t\t\tdescription: `Publishes the package with the given tag. By default, pnpm publish updates the latest tag`,\n\t\t\t\targs: {\n\t\t\t\t\tname: \"<tag>\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--dry-run\",\n\t\t\t\tdescription: `Does everything a publish would do except actually publishing to the registry`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--ignore-scripts\",\n\t\t\t\tdescription: `Ignores any publish related lifecycle scripts (prepublishOnly, postpublish, and the like)`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-git-checks\",\n\t\t\t\tdescription: `Don't check if current branch is your publish branch, clean, and up-to-date`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--access\",\n\t\t\t\tdescription: `Tells the registry whether the published package should be public or restricted`,\n\t\t\t\targs: {\n\t\t\t\t\tname: \"Type\",\n\t\t\t\t\tsuggestions: [\"public\", \"private\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--force\",\n\t\t\t\tdescription: `Try to publish packages even if their current version is already found in the registry`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--report-summary\",\n\t\t\t\tdescription: `Save the list of published packages to pnpm-publish-summary.json. Useful when some other tooling is used to report the list of published packages`,\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: [\"recursive\", \"m\", \"multi\", \"-r\"],\n\t\tdescription: `Runs a pnpm command recursively on all subdirectories in the package or every available workspace`,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: \"--link-workspace-packages\",\n\t\t\t\tdescription: `Link locally available packages in workspaces of a monorepo into node_modules instead of re-downloading them from the registry. This emulates functionality similar to yarn workspaces.\nWhen this is set to deep, local packages can also be linked to subdependencies.\nBe advised that it is encouraged instead to use npmrc for this setting, to enforce the same behaviour in all environments. This option exists solely so you may override that if necessary`,\n\t\t\t\targs: {\n\t\t\t\t\tname: \"bool or `deep`\",\n\t\t\t\t\tsuggestions: [\"dee[\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--workspace-concurrency\",\n\t\t\t\tdescription: `Set the maximum number of tasks to run simultaneously. For unlimited concurrency use Infinity`,\n\t\t\t\targs: { name: \"<number>\" },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--bail\",\n\t\t\t\tdescription: `Stops when a task throws an error`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-bail\",\n\t\t\t\tdescription: `Don't stop when a task throws an error`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--sort\",\n\t\t\t\tdescription: `Packages are sorted topologically (dependencies before dependents)`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--no-sort\",\n\t\t\t\tdescription: `Disable packages sorting`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"--reverse\",\n\t\t\t\tdescription: `The order of packages is reversed`,\n\t\t\t},\n\t\t\tFILTER_OPTION,\n\t\t],\n\t},\n\t{\n\t\tname: \"server\",\n\t\tdescription: `Manage a store server`,\n\t\tsubcommands: [\n\t\t\t{\n\t\t\t\tname: \"start\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Starts a server that performs all interactions with the store. Other commands will delegate any store-related tasks to this server\",\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--background\",\n\t\t\t\t\t\tdescription: `Runs the server in the background, similar to daemonizing on UNIX systems`,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--network-concurrency\",\n\t\t\t\t\t\tdescription: `The maximum number of network requests to process simultaneously`,\n\t\t\t\t\t\targs: { name: \"number\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--protocol\",\n\t\t\t\t\t\tdescription: `The communication protocol used by the server. When this is set to auto, IPC is used on all systems except for Windows, which uses TCP`,\n\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\tname: \"Type\",\n\t\t\t\t\t\t\tsuggestions: [\"auto\", \"tcp\", \"ipc\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--port\",\n\t\t\t\t\t\tdescription: `The port number to use when TCP is used for communication. If a port is specified and the protocol is set to auto, regardless of system type, the protocol is automatically set to use TCP`,\n\t\t\t\t\t\targs: { name: \"port number\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--store-dir\",\n\t\t\t\t\t\tdescription: `The directory to use for the content addressable store`,\n\t\t\t\t\t\targs: { name: \"Path\", template: \"filepaths\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--lock\",\n\t\t\t\t\t\tdescription: `Set to make the package store immutable to external processes while the server is running or not`,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--no-lock\",\n\t\t\t\t\t\tdescription: `Set to make the package store mutable to external processes while the server is running or not`,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--ignore-stop-requests\",\n\t\t\t\t\t\tdescription: `Prevents you from stopping the server using pnpm server stop`,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"--ignore-upload-requests\",\n\t\t\t\t\t\tdescription: `Prevents creating a new side effect cache during install`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"stop\",\n\t\t\t\tdescription: \"Stops the store server\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"status\",\n\t\t\t\tdescription: \"Prints information about the running server\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"store\",\n\t\tdescription: \"Managing the package store\",\n\t\tsubcommands: [\n\t\t\t{\n\t\t\t\tname: \"status\",\n\t\t\t\tdescription: `Checks for modified packages in the store.\nReturns exit code 0 if the content of the package is the same as it was at the time of unpacking`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"add\",\n\t\t\t\tdescription: `Functionally equivalent to pnpm add,\nexcept this adds new packages to the store directly without modifying any projects or files outside of the store`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"prune\",\n\t\t\t\tdescription: `Removes orphan packages from the store.\nPruning the store will save disk space, however may slow down future installations involving pruned packages.\nUltimately, it is a safe operation, however not recommended if you have orphaned packages from a package you intend to reinstall.\nPlease read the FAQ for more information on unreferenced packages and best practices.\nPlease note that this is prohibited when a store server is running`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"path\",\n\t\t\t\tdescription: `Returns the path to the active store directory`,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"init\",\n\t\tdescription:\n\t\t\t\"Creates a basic package.json file in the current directory, if it doesn't exist already\",\n\t},\n\t{\n\t\tname: \"doctor\",\n\t\tdescription: \"Checks for known common issues with pnpm configuration\",\n\t},\n];\n\nconst subcommands = [\n\t...SUBCOMMANDS_MANAGE_DEPENDENCIES,\n\t...SUBCOMMANDS_REVIEW_DEPS,\n\t...SUBCOMMANDS_RUN_SCRIPTS,\n\t...SUBCOMMANDS_MISC,\n];\n\nconst recursiveSubcommandsNames = [\n\t\"add\",\n\t\"exec\",\n\t\"install\",\n\t\"list\",\n\t\"outdated\",\n\t\"publish\",\n\t\"rebuild\",\n\t\"remove\",\n\t\"run\",\n\t\"test\",\n\t\"unlink\",\n\t\"update\",\n\t\"why\",\n];\n\nconst recursiveSubcommands = subcommands.filter((subcommand) => {\n\tif (Array.isArray(subcommand.name)) {\n\t\treturn subcommand.name.some((name) =>\n\t\t\trecursiveSubcommandsNames.includes(name)\n\t\t);\n\t}\n\treturn recursiveSubcommandsNames.includes(subcommand.name);\n});\n\n// RECURSIVE SUBCOMMAND INDEX\nSUBCOMMANDS_MISC[1].subcommands = recursiveSubcommands;\n\n// common options\nconst COMMON_OPTIONS: Fig.Option[] = [\n\t{\n\t\tname: [\"-C\", \"--dir\"],\n\t\targs: {\n\t\t\tname: \"path\",\n\t\t\ttemplate: \"folders\",\n\t\t},\n\t\tisPersistent: true,\n\t\tdescription:\n\t\t\t\"Run as if pnpm was started in <path> instead of the current working directory\",\n\t},\n\t{\n\t\tname: [\"-w\", \"--workspace-root\"],\n\t\targs: {\n\t\t\tname: \"workspace\",\n\t\t},\n\t\tisPersistent: true,\n\t\tdescription:\n\t\t\t\"Run as if pnpm was started in the root of the <workspace> instead of the current working directory\",\n\t},\n\t{\n\t\tname: [\"-h\", \"--help\"],\n\t\tisPersistent: true,\n\t\tdescription: \"Output usage information\",\n\t},\n\t{\n\t\tname: [\"-v\", \"--version\"],\n\t\tdescription: \"Show pnpm's version\",\n\t},\n];\n\n// SPEC\nconst completionSpec: Fig.Spec = {\n\tname: \"pnpm\",\n\tdescription: \"Fast, disk space efficient package manager\",\n\targs: {\n\t\tname: \"Scripts\",\n\t\tfilterStrategy: \"fuzzy\",\n\t\tgenerators: npmScriptsGenerator,\n\t\tisVariadic: true,\n\t},\n\tfilterStrategy: \"fuzzy\",\n\tgenerateSpec: async (tokens, executeShellCommand) => {\n\t\tconst { script, postProcess } = dependenciesGenerator as Fig.Generator & {\n\t\t\tscript: string[];\n\t\t};\n\n\t\tif (postProcess === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst packages = postProcess(\n\t\t\t(\n\t\t\t\tawait executeShellCommand({\n\t\t\t\t\tcommand: script[0],\n\t\t\t\t\targs: script.slice(1),\n\t\t\t\t})\n\t\t\t).stdout,\n\t\t\ttokens\n\t\t)\n\t\t\t?.filter((e) => e !== null)\n\t\t\t.map(({ name }) => name as string);\n\n\t\tconst subcommands = packages\n\t\t\t?.filter((name) => nodeClis.has(name))\n\t\t\t.map((name) => ({\n\t\t\t\tname,\n\t\t\t\tloadSpec: name,\n\t\t\t\ticon: \"fig://icon?type=package\",\n\t\t\t}));\n\n\t\treturn {\n\t\t\tname: \"pnpm\",\n\t\t\tsubcommands,\n\t\t} as Fig.Spec;\n\t},\n\tsubcommands,\n\toptions: COMMON_OPTIONS,\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/ps.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"ps\",\n\tdescription: \"Report a snapshot of the current processes\",\n\toptions: [\n\t\t{ name: [\"-A\", \"-e\"], description: \"Select all processes\" },\n\t\t{\n\t\t\tname: \"-a\",\n\t\t\tdescription: \"Select all processes except both session leaders\",\n\t\t\targs: { name: \"getsid\" },\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription: \"Select all processes except session leaders\",\n\t\t},\n\t\t{\n\t\t\tname: \"--deselect\",\n\t\t\tdescription:\n\t\t\t\t\"Select all processes except those that fulfill the specified conditions\",\n\t\t},\n\t\t{\n\t\t\tname: \"-N\",\n\t\t\tdescription:\n\t\t\t\t\"Select all processes except those that fulfill the specified conditions (negates the selection)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--pid\",\n\t\t\tdescription: \"Select by process ID\",\n\t\t\targs: { name: \"pidlist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--ppid\",\n\t\t\tdescription:\n\t\t\t\t\"Select by parent process ID. This selects the processes with a parent process ID in pidlist\",\n\t\t\targs: { name: \"pidlist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--sid\",\n\t\t\tdescription: \"Select by session ID\",\n\t\t\targs: { name: \"sesslist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--tty\",\n\t\t\tdescription: \"Select by terminal\",\n\t\t\targs: { name: \"ttylist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"U\",\n\t\t\tdescription: \"Select by effective user ID (EUID) or name\",\n\t\t\targs: { name: \"userlist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"-U\",\n\t\t\tdescription: \"Select by real user ID (RUID) or name\",\n\t\t\targs: { name: \"userlist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"-u\",\n\t\t\tdescription: \"Select by effective user ID (EUID) or name\",\n\t\t\targs: { name: \"userlist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--User\",\n\t\t\tdescription: \"Select by real user ID (RUID) or name\",\n\t\t\targs: { name: \"userlist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--user\",\n\t\t\tdescription: \"Select by effective user ID (EUID) or name\",\n\t\t\targs: { name: \"userlist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription: \"Show different scheduler information for the -l option\",\n\t\t},\n\t\t{\n\t\t\tname: \"--context\",\n\t\t\tdescription: \"Display security context format (for SE Linux)\",\n\t\t},\n\t\t{ name: \"-f\", description: \"Do full-format listing\" },\n\t\t{ name: \"-F\", description: \"Extra full format\" },\n\t\t{\n\t\t\tname: [\"--format\", \"-o\", \"o\"],\n\t\t\tdescription: \"\",\n\t\t\targs: { name: \"format\" },\n\t\t\tisRepeatable: true,\n\t\t},\n\t\t{ name: [\"-M\", \"Z\"], description: \"(for SE Linux)\" },\n\t\t{ name: [\"-y\", \"-l\"], description: \"\" },\n\t\t{\n\t\t\tname: \"--cols\",\n\t\t\tdescription: \"Set screen width\",\n\t\t\targs: { name: \"n\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--columns\",\n\t\t\tdescription: \"Set screen width\",\n\t\t\targs: { name: \"n\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--cumulative\",\n\t\t\tdescription:\n\t\t\t\t\"Include some dead child process data (as a sum with the parent)\",\n\t\t},\n\t\t{ name: \"--forest\", description: \"ASCII art process tree\" },\n\t\t{ name: \"-H\", description: \"Show process hierarchy (forest)\" },\n\t\t{\n\t\t\tname: \"--headers\",\n\t\t\tdescription: \"Repeat header lines, one per page of output\",\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription: \"Set namelist file\",\n\t\t\targs: { name: \"namelist\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--lines\",\n\t\t\tdescription: \"Set screen height\",\n\t\t\targs: { name: \"n\" },\n\t\t},\n\t\t{\n\t\t\tname: [\"--no-headers\", \"--no-heading\"],\n\t\t\tdescription: \"Print no header line at all\",\n\t\t},\n\t\t{\n\t\t\tname: \"--rows\",\n\t\t\tdescription: \"Set screen height\",\n\t\t\targs: { name: \"n\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--sort\",\n\t\t\tdescription: \"Specify sorting order\",\n\t\t\targs: { name: \"spec\" },\n\t\t},\n\t\t{\n\t\t\tname: \"--width\",\n\t\t\tdescription: \"Set screen width\",\n\t\t\targs: { name: \"n\" },\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription: \"Show threads, possibly with LWP and NLWP columns\",\n\t\t},\n\t\t{\n\t\t\tname: \"-T\",\n\t\t\tdescription: \"Show threads, possibly with SPID column\",\n\t\t},\n\t\t{ name: \"--help\", description: \"Print a help message\" },\n\t\t{ name: \"--info\", description: \"Print debugging info\" },\n\t\t{ name: \"--version\", description: \"Print the procps version\" },\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/pwd.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"pwd\",\n\tdescription: \"Return working directory name\",\n\toptions: [\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription: \"Display the logical current working directory\",\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription: \"Display the physical current working directory\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/python.ts",
    "content": "import { filepaths } from '../../helpers/filepaths';\n\nconst completionSpec: Fig.Spec = {\n\tname: \"python\",\n\tdescription: \"Run the python interpreter\",\n\tgenerateSpec: async (tokens, executeShellCommand) => {\n\t\tconst isDjangoManagePyFilePresentCommand = \"cat manage.py | grep -q django\";\n\t\tif (\n\t\t\t(\n\t\t\t\tawait executeShellCommand({\n\t\t\t\t\tcommand: \"bash\",\n\t\t\t\t\targs: [\"-c\", isDjangoManagePyFilePresentCommand],\n\t\t\t\t})\n\t\t\t).status === 0\n\t\t) {\n\t\t\treturn {\n\t\t\t\tname: \"python\",\n\t\t\t\tsubcommands: [{ name: \"manage.py\", loadSpec: \"django-admin\" }],\n\t\t\t};\n\t\t}\n\t},\n\targs: {\n\t\tname: \"python script\",\n\t\tisScript: true,\n\t\tgenerators: filepaths({\n\t\t\textensions: [\"py\"],\n\t\t\teditFileSuggestions: { priority: 76 },\n\t\t}),\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tinsertValue: \"-c '{cursor}'\",\n\t\t\tdescription:\n\t\t\t\t\"Execute the Python code in command. command can be one or more statements separated by newlines, with significant leading whitespace as in normal module code\",\n\t\t\targs: {\n\t\t\t\tname: \"command\",\n\t\t\t\tisCommand: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription: \"Module\",\n\t\t\targs: {\n\t\t\t\tname: \"python module\",\n\t\t\t\tisModule: \"python/\",\n\t\t\t\tsuggestions: [\"http.server\"],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-?\", \"-h\", \"--help\"],\n\t\t\tdescription: \"Print a short description of all command line options\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-V\", \"--version\"],\n\t\t\tdescription: \"Print the Python version number and exit\",\n\t\t},\n\t\t{\n\t\t\tname: \"-b\",\n\t\t\tdescription:\n\t\t\t\t\"Issue a warning when comparing bytes or bytearray with str or bytes with int. Issue an error when the option is given twice (-bb)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-B\",\n\t\t\tdescription:\n\t\t\t\t\"If given, Python won’t try to write .pyc files on the import of source modules\",\n\t\t},\n\t\t{\n\t\t\tname: \"--check-hash-based-pycs\",\n\t\t\tdescription:\n\t\t\t\t\"Control the validation behavior of hash-based .pyc files. See Cached bytecode invalidation\",\n\t\t\targs: {\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"default\" },\n\t\t\t\t\t{ name: \"always\" },\n\t\t\t\t\t{ name: \"never\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription:\n\t\t\t\t\"Turn on parser debugging output (for expert only, depending on compilation options)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-E\",\n\t\t\tdescription:\n\t\t\t\t\"Ignore all PYTHON* environment variables, e.g. PYTHONPATH and PYTHONHOME, that might be set\",\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command, even when sys.stdin does not appear to be a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-I\",\n\t\t\tdescription:\n\t\t\t\t\"Run Python in isolated mode. This also implies -E and -s. In isolated mode sys.path contains neither the script’s directory nor the user’s site-packages directory\",\n\t\t},\n\t\t{\n\t\t\tname: \"-O\",\n\t\t\tdescription:\n\t\t\t\t\"Remove assert statements and any code conditional on the value of __debug__\",\n\t\t},\n\t\t{\n\t\t\tname: \"-OO\",\n\t\t\tdescription: \"Do -O and also discard docstrings\",\n\t\t},\n\t\t{\n\t\t\tname: \"-g\",\n\t\t\tdescription:\n\t\t\t\t\"Don’t display the copyright and version messages even in interactive mode\",\n\t\t},\n\t\t{\n\t\t\tname: \"-R\",\n\t\t\tdescription:\n\t\t\t\t\"Turn on hash randomization. This option only has an effect if the PYTHONHASHSEED environment variable is set to 0, since hash randomization is enabled by default\",\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription: \"Don’t add the user site-packages directory to sys.path\",\n\t\t},\n\t\t{\n\t\t\tname: \"-S\",\n\t\t\tdescription:\n\t\t\t\t\"Disable the import of the module site and the site-dependent manipulations of sys.path that it entails\",\n\t\t},\n\t\t{\n\t\t\tname: \"-u\",\n\t\t\tdescription:\n\t\t\t\t\"Force the stdout and stderr streams to be unbuffered. This option has no effect on the stdin stream\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Print a message each time a module is initialized, showing the place (filename or built-in module) from which it is loaded\",\n\t\t},\n\t\t{\n\t\t\tname: \"-W\",\n\t\t\tdescription:\n\t\t\t\t\"Warning control. Python’s warning machinery by default prints warning messages to sys.stderr\",\n\t\t\targs: {},\n\t\t},\n\t\t{\n\t\t\tname: \"-x\",\n\t\t\tdescription:\n\t\t\t\t\"Skip the first line of the source, allowing use of non-Unix forms of #!cmd. This is intended for a DOS specific hack only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-X\",\n\t\t\tdescription: \"Reserved for various implementation-specific options\",\n\t\t\targs: {\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"faulthandler\" },\n\t\t\t\t\t{ name: \"showrefcount\" },\n\t\t\t\t\t{ name: \"tracemalloc\" },\n\t\t\t\t\t{ name: \"showalloccount\" },\n\t\t\t\t\t{ name: \"importtime\" },\n\t\t\t\t\t{ name: \"dev\" },\n\t\t\t\t\t{ name: \"utf8\" },\n\t\t\t\t\t{ name: \"pycache_prefix=PATH\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/python3.ts",
    "content": "import { filepaths } from '../../helpers/filepaths';\n\nconst completionSpec: Fig.Spec = {\n\tname: \"python3\",\n\tdescription: \"Run the python interpreter\",\n\tgenerateSpec: async (tokens, executeShellCommand) => {\n\t\tconst isDjangoManagePyFilePresentCommand = \"cat manage.py | grep -q django\";\n\n\t\tif (\n\t\t\t(\n\t\t\t\tawait executeShellCommand({\n\t\t\t\t\tcommand: \"bash\",\n\t\t\t\t\targs: [\"-c\", isDjangoManagePyFilePresentCommand],\n\t\t\t\t})\n\t\t\t).status === 0\n\t\t) {\n\t\t\treturn {\n\t\t\t\tname: \"python3\",\n\t\t\t\tsubcommands: [{ name: \"manage.py\", loadSpec: \"django-admin\" }],\n\t\t\t};\n\t\t}\n\t},\n\targs: {\n\t\tname: \"python script\",\n\t\tisScript: true,\n\t\tgenerators: filepaths({\n\t\t\textensions: [\"py\"],\n\t\t\teditFileSuggestions: { priority: 76 },\n\t\t}),\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tinsertValue: \"-c '{cursor}'\",\n\t\t\tdescription:\n\t\t\t\t\"Execute the Python code in command. command can be one or more statements separated by newlines, with significant leading whitespace as in normal module code\",\n\t\t\targs: {\n\t\t\t\tname: \"command\",\n\t\t\t\tisCommand: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tinsertValue: \"-m '{cursor}'\",\n\t\t\tdescription:\n\t\t\t\t\"Search sys.path for the named module and execute its contents as the __main__ module\",\n\t\t\targs: {\n\t\t\t\tname: \"command\",\n\t\t\t\tisCommand: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-?\", \"-h\", \"--help\"],\n\t\t\tdescription: \"Print a short description of all command line options\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-V\", \"--version\"],\n\t\t\tdescription: \"Print the Python version number and exit\",\n\t\t},\n\t\t{\n\t\t\tname: \"-b\",\n\t\t\tdescription:\n\t\t\t\t\"Issue a warning when comparing bytes or bytearray with str or bytes with int. Issue an error when the option is given twice (-bb)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-B\",\n\t\t\tdescription:\n\t\t\t\t\"If given, Python won’t try to write .pyc files on the import of source modules\",\n\t\t},\n\t\t{\n\t\t\tname: \"--check-hash-based-pycs\",\n\t\t\tdescription:\n\t\t\t\t\"Control the validation behavior of hash-based .pyc files. See Cached bytecode invalidation\",\n\t\t\targs: {\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"default\" },\n\t\t\t\t\t{ name: \"always\" },\n\t\t\t\t\t{ name: \"never\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription:\n\t\t\t\t\"Turn on parser debugging output (for expert only, depending on compilation options)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-E\",\n\t\t\tdescription:\n\t\t\t\t\"Ignore all PYTHON* environment variables, e.g. PYTHONPATH and PYTHONHOME, that might be set\",\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command, even when sys.stdin does not appear to be a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-I\",\n\t\t\tdescription:\n\t\t\t\t\"Run Python in isolated mode. This also implies -E and -s. In isolated mode sys.path contains neither the script’s directory nor the user’s site-packages directory\",\n\t\t},\n\t\t{\n\t\t\tname: \"-O\",\n\t\t\tdescription:\n\t\t\t\t\"Remove assert statements and any code conditional on the value of __debug__\",\n\t\t},\n\t\t{\n\t\t\tname: \"-OO\",\n\t\t\tdescription: \"Do -O and also discard docstrings\",\n\t\t},\n\t\t{\n\t\t\tname: \"-g\",\n\t\t\tdescription:\n\t\t\t\t\"Don’t display the copyright and version messages even in interactive mode\",\n\t\t},\n\t\t{\n\t\t\tname: \"-R\",\n\t\t\tdescription:\n\t\t\t\t\"Turn on hash randomization. This option only has an effect if the PYTHONHASHSEED environment variable is set to 0, since hash randomization is enabled by default\",\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription: \"Don’t add the user site-packages directory to sys.path\",\n\t\t},\n\t\t{\n\t\t\tname: \"-S\",\n\t\t\tdescription:\n\t\t\t\t\"Disable the import of the module site and the site-dependent manipulations of sys.path that it entails\",\n\t\t},\n\t\t{\n\t\t\tname: \"-u\",\n\t\t\tdescription:\n\t\t\t\t\"Force the stdout and stderr streams to be unbuffered. This option has no effect on the stdin stream\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Print a message each time a module is initialized, showing the place (filename or built-in module) from which it is loaded\",\n\t\t},\n\t\t{\n\t\t\tname: \"-W\",\n\t\t\tdescription:\n\t\t\t\t\"Warning control. Python’s warning machinery by default prints warning messages to sys.stderr\",\n\t\t\targs: {},\n\t\t},\n\t\t{\n\t\t\tname: \"-x\",\n\t\t\tdescription:\n\t\t\t\t\"Skip the first line of the source, allowing use of non-Unix forms of #!cmd. This is intended for a DOS specific hack only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-X\",\n\t\t\tdescription: \"Reserved for various implementation-specific options\",\n\t\t\targs: {\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"faulthandler\" },\n\t\t\t\t\t{ name: \"showrefcount\" },\n\t\t\t\t\t{ name: \"tracemalloc\" },\n\t\t\t\t\t{ name: \"showalloccount\" },\n\t\t\t\t\t{ name: \"importtime\" },\n\t\t\t\t\t{ name: \"dev\" },\n\t\t\t\t\t{ name: \"utf8\" },\n\t\t\t\t\t{ name: \"pycache_prefix=PATH\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/rm.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"rm\",\n\tdescription: \"Remove directory entries\",\n\targs: {\n\t\tisVariadic: true,\n\t\ttemplate: [\"folders\", \"filepaths\"],\n\t},\n\n\toptions: [\n\t\t{\n\t\t\tname: [\"-r\", \"-R\"],\n\t\t\tdescription:\n\t\t\t\t\"Recursive. Attempt to remove the file hierarchy rooted in each file argument\",\n\t\t\tisDangerous: true,\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription: \"Overwrite regular files before deleting them\",\n\t\t\tisDangerous: true,\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription:\n\t\t\t\t\"Attempt to remove directories as well as other types of files\",\n\t\t},\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription:\n\t\t\t\t\"⚠️ Attempt to remove the files without prompting for confirmation\",\n\t\t\tisDangerous: true,\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription: \"Request confirmation before attempting to remove each file\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription: \"Be verbose when deleting files\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/rmdir.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"rmdir\",\n\tdescription: \"Remove directories\",\n\targs: {\n\t\tisVariadic: true,\n\t\ttemplate: \"folders\",\n\t},\n\n\toptions: [\n\t\t{\n\t\t\tname: \"-p\",\n\t\t\tdescription: \"Remove each directory of path\",\n\t\t\tisDangerous: true,\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/scp.ts",
    "content": "import { knownHosts, configHosts } from \"./ssh\";\n\nconst completionSpec: Fig.Spec = {\n\tname: \"scp\",\n\tdescription: \"Copies files or directories between hosts on a network\",\n\targs: [\n\t\t{\n\t\t\tname: \"sources\",\n\t\t\tdescription: \"File or directory, local or remote ([user@]host:[path])\",\n\t\t\tisVariadic: true,\n\t\t\tgenerators: [\n\t\t\t\tknownHosts,\n\t\t\t\tconfigHosts,\n\t\t\t\t{ template: [\"history\", \"filepaths\", \"folders\"] },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"target\",\n\t\t\tdescription: \"File or directory, local or remote ([user@]host:[path])\",\n\t\t\tgenerators: [\n\t\t\t\tknownHosts,\n\t\t\t\tconfigHosts,\n\t\t\t\t{ template: [\"history\", \"filepaths\", \"folders\"] },\n\t\t\t],\n\t\t},\n\t],\n\toptions: [\n\t\t{\n\t\t\tname: \"-3\",\n\t\t\tdescription: `Copies between two remote hosts are transferred through the local\nhost.  Without this option the data is copied directly between the\ntwo remote hosts.  Note that this option disables the progress\nmeter and selects batch mode for the second host, since scp cannot\nask for passwords or passphrases for both hosts`,\n\t\t},\n\t\t{\n\t\t\tname: \"-4\",\n\t\t\tdescription: \"Forces scp to use IPv4 addresses only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-6\",\n\t\t\tdescription: \"Forces scp to use IPv6 addresses only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-A\",\n\t\t\tdescription:\n\t\t\t\t\"Allows forwarding of ssh-agent(1) to the remote system. The default is not to forward an authentication agent\",\n\t\t},\n\t\t{\n\t\t\tname: \"-B\",\n\t\t\tdescription:\n\t\t\t\t\"Selects batch mode (prevents asking for passwords or passphrases)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-C\",\n\t\t\tdescription:\n\t\t\t\t\"Compression enable. Passes the -C flag to ssh(1) to enable compression\",\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription:\n\t\t\t\t\"Selects the cipher to use for encrypting the data transfer. This option is directly passed to ssh(1)\",\n\t\t\targs: {\n\t\t\t\tname: \"cipher\",\n\t\t\t\tdescription: \"The selected cipher specification\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-F\",\n\t\t\tdescription:\n\t\t\t\t\"Specifies an alternative per-user configuration file for ssh. This option is directly passed to ssh(1)\",\n\t\t\targs: {\n\t\t\t\tname: \"ssh_config\",\n\t\t\t\tdescription: \"The selected ssh config\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"Selects the file from which the identity (private key) for public key authentication is read. This option is directly passed to ssh(1)\",\n\t\t\targs: {\n\t\t\t\tname: \"identity_file\",\n\t\t\t\tdescription: \"Specified identity file\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-J\",\n\t\t\tdescription: `Connect to the target host by first making an scp connection to the\njump host described by destination and then establishing a TCP\nforwarding to the ultimate destination from there.  Multiple jump\nhops may be specified separated by comma characters.  This is a\nshortcut to specify a ProxyJump configuration directive.  This\noption is directly passed to ssh(1)`,\n\t\t\targs: {\n\t\t\t\tname: \"destination\",\n\t\t\t\tdescription: \"Scp destination\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription: \"Limits the used bandwidth, specified in Kbit/s\",\n\t\t\targs: {\n\t\t\t\tname: \"limit\",\n\t\t\t\tdescription: \"Limit bandwidth in Kbit/s\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-o\",\n\t\t\tdescription: `Can be used to pass options to ssh in the format used in\nssh_config(5).  This is useful for specifying options for which\nthere is no separate scp command-line flag.  For full details of\nthe options listed below, and their possible values, see\nssh_config(5)`,\n\t\t\targs: {\n\t\t\t\tname: \"option\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"AddressFamily\" },\n\t\t\t\t\t{ name: \"BatchMode\" },\n\t\t\t\t\t{ name: \"BindAddress\" },\n\t\t\t\t\t{ name: \"ChallengeResponseAuthentication\" },\n\t\t\t\t\t{ name: \"CheckHostIP\" },\n\t\t\t\t\t{ name: \"Cipher\" },\n\t\t\t\t\t{ name: \"Ciphers\" },\n\t\t\t\t\t{ name: \"ClearAllForwardings\" },\n\t\t\t\t\t{ name: \"Compression\" },\n\t\t\t\t\t{ name: \"CompressionLevel\" },\n\t\t\t\t\t{ name: \"ConnectionAttempts\" },\n\t\t\t\t\t{ name: \"ConnectTimeout\" },\n\t\t\t\t\t{ name: \"ControlMaster\" },\n\t\t\t\t\t{ name: \"ControlPath\" },\n\t\t\t\t\t{ name: \"ControlPersist\" },\n\t\t\t\t\t{ name: \"DynamicForward\" },\n\t\t\t\t\t{ name: \"EscapeChar\" },\n\t\t\t\t\t{ name: \"ExitOnForwardFailure\" },\n\t\t\t\t\t{ name: \"ForwardAgent\" },\n\t\t\t\t\t{ name: \"ForwardX11\" },\n\t\t\t\t\t{ name: \"ForwardX11Timeout\" },\n\t\t\t\t\t{ name: \"ForwardX11Trusted\" },\n\t\t\t\t\t{ name: \"GatewayPorts\" },\n\t\t\t\t\t{ name: \"GlobalKnownHostsFile\" },\n\t\t\t\t\t{ name: \"GSSAPIAuthentication\" },\n\t\t\t\t\t{ name: \"GSSAPIDelegateCredentials\" },\n\t\t\t\t\t{ name: \"HashKnownHosts\" },\n\t\t\t\t\t{ name: \"Host\" },\n\t\t\t\t\t{ name: \"HostbasedAuthentication\" },\n\t\t\t\t\t{ name: \"HostKeyAlgorithms\" },\n\t\t\t\t\t{ name: \"HostKeyAlias\" },\n\t\t\t\t\t{ name: \"HostName\" },\n\t\t\t\t\t{ name: \"IdentityFile\" },\n\t\t\t\t\t{ name: \"IdentitiesOnly\" },\n\t\t\t\t\t{ name: \"IPQoS\" },\n\t\t\t\t\t{ name: \"KbdInteractiveAuthentication\" },\n\t\t\t\t\t{ name: \"KbdInteractiveDevices\" },\n\t\t\t\t\t{ name: \"KexAlgorithms\" },\n\t\t\t\t\t{ name: \"LocalCommand\" },\n\t\t\t\t\t{ name: \"LocalForward\" },\n\t\t\t\t\t{ name: \"LogLevel\" },\n\t\t\t\t\t{ name: \"MACs\" },\n\t\t\t\t\t{ name: \"NoHostAuthenticationForLocalhost\" },\n\t\t\t\t\t{ name: \"NumberOfPasswordPrompts\" },\n\t\t\t\t\t{ name: \"PasswordAuthentication\" },\n\t\t\t\t\t{ name: \"PermitLocalCommand\" },\n\t\t\t\t\t{ name: \"PKCS11Provider\" },\n\t\t\t\t\t{ name: \"Port\" },\n\t\t\t\t\t{ name: \"PreferredAuthentications\" },\n\t\t\t\t\t{ name: \"Protocol\" },\n\t\t\t\t\t{ name: \"ProxyCommand\" },\n\t\t\t\t\t{ name: \"PubkeyAuthentication\" },\n\t\t\t\t\t{ name: \"RekeyLimit\" },\n\t\t\t\t\t{ name: \"RequestTTY\" },\n\t\t\t\t\t{ name: \"RhostsRSAAuthentication\" },\n\t\t\t\t\t{ name: \"RSAAuthentication\" },\n\t\t\t\t\t{ name: \"SendEnv\" },\n\t\t\t\t\t{ name: \"ServerAliveInterval\" },\n\t\t\t\t\t{ name: \"ServerAliveCountMax\" },\n\t\t\t\t\t{ name: \"StrictHostKeyChecking\" },\n\t\t\t\t\t{ name: \"TCPKeepAlive\" },\n\t\t\t\t\t{ name: \"Tunnel\" },\n\t\t\t\t\t{ name: \"TunnelDevice\" },\n\t\t\t\t\t{ name: \"UsePrivilegedPort\" },\n\t\t\t\t\t{ name: \"User\" },\n\t\t\t\t\t{ name: \"UserKnownHostsFile\" },\n\t\t\t\t\t{ name: \"VerifyHostKeyDNS\" },\n\t\t\t\t\t{ name: \"VisualHostKey\" },\n\t\t\t\t\t{ name: \"XAuthLocation\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-P\",\n\t\t\tdescription: `Specifies the port to connect to on the remote host.  Note that\nthis option is written with a capital ‘P’, because -p is already\nreserved for preserving the times and modes of the file`,\n\t\t\targs: {\n\t\t\t\tname: \"port\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-p\",\n\t\t\tdescription:\n\t\t\t\t\"Preserves modification times, access times, and modes from the original file\",\n\t\t},\n\t\t{\n\t\t\tname: \"-q\",\n\t\t\tdescription:\n\t\t\t\t\"Quiet mode: disables the progress meter as well as warning and diagnostic messages from ssh(1)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-r\",\n\t\t\tdescription:\n\t\t\t\t\"Recursively copy entire directories.  Note that scp follows symbolic links encountered in the tree traversal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-S\",\n\t\t\tdescription:\n\t\t\t\t\"Name of program to use for the encrypted connection.  The program must understand ssh(1) options\",\n\t\t\targs: {\n\t\t\t\tname: \"program\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-T\",\n\t\t\tdescription: `Disable strict filename checking.  By default when copying files\nfrom a remote host to a local directory scp checks that the\nreceived filenames match those requested on the command-line to\nprevent the remote end from sending unexpected or unwanted files.\nBecause of differences in how various operating systems and shells\ninterpret filename wildcards, these checks may cause wanted files\nto be rejected.  This option disables these checks at the expense\nof fully trusting that the server will not send unexpected\nfilenames`,\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Verbose mode.  Causes scp and ssh(1) to print debugging messages about their progress. This is helpful in debugging connection, authentication, and configuration problems\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/ssh.ts",
    "content": "const knownHostRegex = /(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]+/; // will match numerical IPs as well as domains/subdomains\n\nconst resolveAbsolutePath = (\n\tpath: string,\n\tbasePath: string,\n\thome: string\n): string => {\n\tif (path.startsWith(\"/\") || path.startsWith(\"~/\") || path === \"~\") {\n\t\treturn path.replace(\"~\", home);\n\t}\n\tif (\n\t\tbasePath.startsWith(\"/\") ||\n\t\tbasePath.startsWith(\"~/\") ||\n\t\tbasePath === \"~\"\n\t) {\n\t\treturn (\n\t\t\tbasePath.replace(\"~\", home) +\n\t\t\t(basePath.replace(\"~\", home).endsWith(\"/\") ? \"\" : \"/\") +\n\t\t\tpath\n\t\t);\n\t}\n\treturn basePath + (basePath.endsWith(\"/\") ? \"\" : \"/\") + path;\n};\n\nconst getConfigLines = async (\n\tfile: string,\n\texecuteShellCommand: Fig.ExecuteCommandFunction,\n\thome: string,\n\tbasePath: string\n) => {\n\tconst absolutePath = resolveAbsolutePath(file, basePath, home);\n\n\tconst { stdout } = await executeShellCommand({\n\t\tcommand: \"cat\",\n\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\targs: [absolutePath],\n\t});\n\tconst configLines = stdout.split(\"\\n\").map((line) => line.trim());\n\n\t// Get list of includes in the config file\n\tconst includes = configLines\n\t\t.filter((line) => line.toLowerCase().startsWith(\"include \"))\n\t\t.map((line) => line.split(\" \")[1]);\n\n\t// Get the lines of every include file\n\tconst includeLines: string[][] = await Promise.all(\n\t\tincludes.map((file) =>\n\t\t\tgetConfigLines(file, executeShellCommand, home, basePath)\n\t\t)\n\t);\n\n\t// Combine config lines with includes config lines\n\treturn [...configLines, ...includeLines.flat()];\n};\n\nexport const knownHosts: Fig.Generator = {\n\tcustom: async (tokens, executeCommand, context) => {\n\t\tconst { stdout } = await executeCommand({\n\t\t\tcommand: \"cat\",\n\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\targs: [`${context.environmentVariables[\"HOME\"]}/.ssh/known_hosts`],\n\t\t});\n\n\t\treturn stdout\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => {\n\t\t\t\tconst match = knownHostRegex.exec(line);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn String(match);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((value, index, self) => value && self.indexOf(value) === index)\n\t\t\t.map((knownHost) => ({\n\t\t\t\tname: (tokens[1].endsWith(\"@\") ? tokens[1] : \"\") + knownHost, // also suggest when user@ is provided\n\t\t\t\tdescription: \"SSH host\",\n\t\t\t}));\n\t},\n\ttrigger: \"@\",\n};\n\nexport const configHosts: Fig.Generator = {\n\tcustom: async (tokens, executeShellCommand, context) => {\n\t\tconst configLines = await getConfigLines(\n\t\t\t\"config\",\n\t\t\texecuteShellCommand,\n\t\t\tcontext.environmentVariables[\"HOME\"],\n\t\t\t\"~/.ssh\"\n\t\t);\n\n\t\treturn configLines\n\t\t\t.filter(\n\t\t\t\t(line) =>\n\t\t\t\t\tline.trim().toLowerCase().startsWith(\"host \") && !line.includes(\"*\")\n\t\t\t)\n\t\t\t.map((host) => ({\n\t\t\t\tname: host.split(\" \")[1],\n\t\t\t\tdescription: \"SSH host\",\n\t\t\t\tpriority: 90,\n\t\t\t}));\n\t},\n};\n\nconst completionSpec: Fig.Spec = {\n\tname: \"ssh\",\n\tdescription: \"Log into a remote machine\",\n\targs: {\n\t\tname: \"user@hostname\",\n\t\tdescription: \"Address of remote machine to log into\",\n\t\tgenerators: [knownHosts, configHosts, { template: \"history\" }],\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-1\",\n\t\t\tdescription: \"Forces ssh to try protocol version 1 only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-2\",\n\t\t\tdescription: \"Forces ssh to try protocol version 2 only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-4\",\n\t\t\tdescription: \"Forces ssh to use IPv4 addresses only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-6\",\n\t\t\tdescription: \"Forces ssh to use IPv6 addresses only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-A\",\n\t\t\tdescription: \"Enables forwarding of the authentication agent connection\",\n\t\t},\n\t\t{\n\t\t\tname: \"-a\",\n\t\t\tdescription: \"Disables forwarding of the authentication agent connection\",\n\t\t},\n\t\t{\n\t\t\tname: \"-b\",\n\t\t\tdescription:\n\t\t\t\t\"Use bind_address on the local machine as the source address of the connection\",\n\t\t\targs: {\n\t\t\t\tname: \"bind address\",\n\t\t\t\tdescription: \"Source address of the connection\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-C\",\n\t\t\tdescription:\n\t\t\t\t\"Requests compression of all data (including stdin, stdout, stderr, and data for forwarded X11 and TCP connections)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription:\n\t\t\t\t\"Selects the cipher specification for encrypting the session\",\n\t\t\targs: {\n\t\t\t\tname: \"cipher spec\",\n\t\t\t\tdescription: \"The selected cipher specification\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-D\",\n\t\t\tdescription:\n\t\t\t\t\"Specifies a local 'dynamic' application-level port forwarding\",\n\t\t\targs: {\n\t\t\t\tname: \"port\",\n\t\t\t\tdescription: \"Port of the bind address\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-e\",\n\t\t\tdescription:\n\t\t\t\t\"Sets the escape character for sessions with a pty (default: '~')\",\n\t\t\targs: {\n\t\t\t\tname: \"escape char\",\n\t\t\t\tdescription: \"Specified escape character\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-F\",\n\t\t\tdescription: \"Specifies an alternative per-user configuration file\",\n\t\t\targs: {\n\t\t\t\tname: \"configfile\",\n\t\t\t\tdescription: \"Path to alternative config file\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription:\n\t\t\t\t\"Requests ssh to go to background just before command execution\",\n\t\t},\n\t\t{\n\t\t\tname: \"-g\",\n\t\t\tdescription: \"Allows remote hosts to connect to local forwarded ports\",\n\t\t},\n\t\t{\n\t\t\tname: \"-I\",\n\t\t\tdescription:\n\t\t\t\t\"Specify the PKCS#11 shared library ssh should use to communicate with a PKCS#11 token providing the user's private RSA key\",\n\t\t\targs: {\n\t\t\t\tname: \"pkcs11\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"Selects a file from which the identity (private key) for public key authentication is read\",\n\t\t\tisRepeatable: true,\n\t\t\targs: {\n\t\t\t\tname: \"identity file\",\n\t\t\t\tdescription: \"Path to identity (private key)\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-K\",\n\t\t\tdescription:\n\t\t\t\t\"Enables GSSAPI-based authentication and forwarding (delegation) of GSSAPI credentials to the server\",\n\t\t},\n\t\t{\n\t\t\tname: \"-k\",\n\t\t\tdescription:\n\t\t\t\t\"Disables forwarding (delegation) of GSSAPI credentials to the server\",\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription:\n\t\t\t\t\"Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side\",\n\t\t\targs: {\n\t\t\t\tname: \"port:host:hostport\",\n\t\t\t\tdescription: \"Local port, followed by host and host port to forward to\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription: \"Specifies the user to log in as on the remote machine\",\n\t\t\targs: {\n\t\t\t\tname: \"login name\",\n\t\t\t\tdescription: \"Name of user logging into remote machine\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-M\",\n\t\t\tdescription:\n\t\t\t\t\"Places the ssh client into ``master'' mode for connection sharing\",\n\t\t\tisRepeatable: true,\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription:\n\t\t\t\t\"Additionally, for protocol version 2 a comma-separated list of MAC (message authentication code) algorithms can be specified in order of preference\",\n\t\t\targs: {\n\t\t\t\tname: \"mac spec\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-N\",\n\t\t\tdescription: \"Do not execute a remote command\",\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription:\n\t\t\t\t\"Redirects stdin from /dev/null (actually, prevents reading from stdin)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-O\",\n\t\t\tdescription: \"Control an active connection multiplexing master process\",\n\t\t\targs: {\n\t\t\t\tname: \"ctl cmd\",\n\t\t\t\tdescription: \"Command that's passed to the master process\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-o\",\n\t\t\tdescription:\n\t\t\t\t\"Can be used to give options in the format used in the configuration file\",\n\t\t\tisRepeatable: true,\n\t\t\targs: {\n\t\t\t\tname: \"option\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Options that can be specified in the format of the config file\",\n\t\t\t\tsuggestions: [\n\t\t\t\t\t{ name: \"AddressFamily\" },\n\t\t\t\t\t{ name: \"BatchMode\" },\n\t\t\t\t\t{ name: \"BindAddress\" },\n\t\t\t\t\t{ name: \"ChallengeResponseAuthentication\" },\n\t\t\t\t\t{ name: \"CheckHostIP\" },\n\t\t\t\t\t{ name: \"Cipher\" },\n\t\t\t\t\t{ name: \"Ciphers\" },\n\t\t\t\t\t{ name: \"ClearAllForwardings\" },\n\t\t\t\t\t{ name: \"Compression\" },\n\t\t\t\t\t{ name: \"CompressionLevel\" },\n\t\t\t\t\t{ name: \"ConnectionAttempts\" },\n\t\t\t\t\t{ name: \"ConnectTimeout\" },\n\t\t\t\t\t{ name: \"ControlMaster\" },\n\t\t\t\t\t{ name: \"ControlPath\" },\n\t\t\t\t\t{ name: \"ControlPersist\" },\n\t\t\t\t\t{ name: \"DynamicForward\" },\n\t\t\t\t\t{ name: \"EscapeChar\" },\n\t\t\t\t\t{ name: \"ExitOnForwardFailure\" },\n\t\t\t\t\t{ name: \"ForwardAgent\" },\n\t\t\t\t\t{ name: \"ForwardX11\" },\n\t\t\t\t\t{ name: \"ForwardX11Timeout\" },\n\t\t\t\t\t{ name: \"ForwardX11Trusted\" },\n\t\t\t\t\t{ name: \"GatewayPorts\" },\n\t\t\t\t\t{ name: \"GlobalKnownHostsFile\" },\n\t\t\t\t\t{ name: \"GSSAPIAuthentication\" },\n\t\t\t\t\t{ name: \"GSSAPIDelegateCredentials\" },\n\t\t\t\t\t{ name: \"HashKnownHosts\" },\n\t\t\t\t\t{ name: \"Host\" },\n\t\t\t\t\t{ name: \"HostbasedAuthentication\" },\n\t\t\t\t\t{ name: \"HostKeyAlgorithms\" },\n\t\t\t\t\t{ name: \"HostKeyAlias\" },\n\t\t\t\t\t{ name: \"HostName\" },\n\t\t\t\t\t{ name: \"IdentityFile\" },\n\t\t\t\t\t{ name: \"IdentitiesOnly\" },\n\t\t\t\t\t{ name: \"IPQoS\" },\n\t\t\t\t\t{ name: \"KbdInteractiveAuthentication\" },\n\t\t\t\t\t{ name: \"KbdInteractiveDevices\" },\n\t\t\t\t\t{ name: \"KexAlgorithms\" },\n\t\t\t\t\t{ name: \"LocalCommand\" },\n\t\t\t\t\t{ name: \"LocalForward\" },\n\t\t\t\t\t{ name: \"LogLevel\" },\n\t\t\t\t\t{ name: \"MACs\" },\n\t\t\t\t\t{ name: \"NoHostAuthenticationForLocalhost\" },\n\t\t\t\t\t{ name: \"NumberOfPasswordPrompts\" },\n\t\t\t\t\t{ name: \"PasswordAuthentication\" },\n\t\t\t\t\t{ name: \"PermitLocalCommand\" },\n\t\t\t\t\t{ name: \"PKCS11Provider\" },\n\t\t\t\t\t{ name: \"Port\" },\n\t\t\t\t\t{ name: \"PreferredAuthentications\" },\n\t\t\t\t\t{ name: \"Protocol\" },\n\t\t\t\t\t{ name: \"ProxyCommand\" },\n\t\t\t\t\t{ name: \"PubkeyAuthentication\" },\n\t\t\t\t\t{ name: \"RekeyLimit\" },\n\t\t\t\t\t{ name: \"RequestTTY\" },\n\t\t\t\t\t{ name: \"RhostsRSAAuthentication\" },\n\t\t\t\t\t{ name: \"RSAAuthentication\" },\n\t\t\t\t\t{ name: \"SendEnv\" },\n\t\t\t\t\t{ name: \"ServerAliveInterval\" },\n\t\t\t\t\t{ name: \"ServerAliveCountMax\" },\n\t\t\t\t\t{ name: \"StrictHostKeyChecking\" },\n\t\t\t\t\t{ name: \"TCPKeepAlive\" },\n\t\t\t\t\t{ name: \"Tunnel\" },\n\t\t\t\t\t{ name: \"TunnelDevice\" },\n\t\t\t\t\t{ name: \"UsePrivilegedPort\" },\n\t\t\t\t\t{ name: \"User\" },\n\t\t\t\t\t{ name: \"UserKnownHostsFile\" },\n\t\t\t\t\t{ name: \"VerifyHostKeyDNS\" },\n\t\t\t\t\t{ name: \"VisualHostKey\" },\n\t\t\t\t\t{ name: \"XAuthLocation\" },\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-p\",\n\t\t\tdescription: \"Port to connect to on the remote host\",\n\t\t\targs: {\n\t\t\t\tname: \"port\",\n\t\t\t\tdescription: \"Port to connect to\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-q\",\n\t\t\tdescription:\n\t\t\t\t\"Quiet mode.  Causes most warning and diagnostic messages to be suppressed\",\n\t\t},\n\t\t{\n\t\t\tname: \"-R\",\n\t\t\tdescription:\n\t\t\t\t\"Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side\",\n\t\t\targs: {\n\t\t\t\tname: \"port:host:hostport\",\n\t\t\t\tdescription: \"Local port, followed by host and host port to forward to\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-S\",\n\t\t\tdescription:\n\t\t\t\t\"Specifies the location of a control socket for connection sharing, or the string 'none' to disable connection sharing\",\n\t\t\targs: {\n\t\t\t\tname: \"ctl_path\",\n\t\t\t\tdescription: \"Location of the control socket\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription:\n\t\t\t\t\"May be used to request invocation of a subsystem on the remote system\",\n\t\t},\n\t\t{\n\t\t\tname: \"-T\",\n\t\t\tdescription: \"Disable pseudo-tty allocation\",\n\t\t},\n\t\t{\n\t\t\tname: \"-t\",\n\t\t\tdescription: \"Force pseudo-tty allocation\",\n\t\t\tisRepeatable: true,\n\t\t},\n\t\t{\n\t\t\tname: \"-V\",\n\t\t\tdescription: \"Display the version number and exit\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription:\n\t\t\t\t\"Verbose mode.  Causes ssh to print debugging messages about its progress\",\n\t\t\tisRepeatable: 3,\n\t\t},\n\t\t{\n\t\t\tname: \"-W\",\n\t\t\tdescription:\n\t\t\t\t\"Requests that standard input and output on the client be forwarded to host on port over the secure channel\",\n\t\t\targs: {\n\t\t\t\tname: \"host:port\",\n\t\t\t\tdescription: \"Host and port to forward to\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-w\",\n\t\t\tdescription:\n\t\t\t\t\"Requests tunnel device forwarding with the specified tun(4) devices between the client (local_tun) and the server (remote_tun)\",\n\t\t\targs: {\n\t\t\t\tname: \"local tun\",\n\t\t\t\tdescription: \"Local device to forward to\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-X\",\n\t\t\tdescription: \"Enables X11 forwarding\",\n\t\t},\n\t\t{\n\t\t\tname: \"-x\",\n\t\t\tdescription: \"Disables X11 forwarding\",\n\t\t},\n\t\t{\n\t\t\tname: \"-Y\",\n\t\t\tdescription: \"Enables trusted X11 forwarding\",\n\t\t},\n\t\t{\n\t\t\tname: \"-y\",\n\t\t\tdescription: \"Send log information using the syslog(3) system module\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/tail.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"tail\",\n\tdescription: \"Display the last part of a file\",\n\targs: {\n\t\tisVariadic: true,\n\t\ttemplate: \"filepaths\",\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription: \"Wait for additional data to be appended\",\n\t\t},\n\t\t{\n\t\t\tname: \"-r\",\n\t\t\tdescription: \"Display in reverse order\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/top.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"top\",\n\tdescription: \"Display Linux tasks\",\n\toptions: [\n\t\t{\n\t\t\tname: [\"-h\", \"-v\"],\n\t\t\tdescription: \"Show library version and usage prompt\",\n\t\t},\n\t\t{\n\t\t\tname: \"-b\",\n\t\t\tdescription: \"Starts top in Batch mode\",\n\t\t\targs: {\n\t\t\t\tname: \"operation\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription: \"Starts top with last remembered c state reversed\",\n\t\t\targs: {\n\t\t\t\tname: \"toggle\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription:\n\t\t\t\t\"Starts top with the last remembered 'i' state reversed. When this toggle is Off, tasks that are idled or zombied will not be displayed\",\n\t\t\targs: {\n\t\t\t\tname: \"toggle\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription: \"Starts top with secure mode forced\",\n\t\t\targs: {\n\t\t\t\tname: \"delay\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-pid\",\n\t\t\tdescription: \"Monitor pids\",\n\t\t\targs: {\n\t\t\t\tname: \"process ids\",\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/touch.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"touch\",\n\tdescription: \"Change file access and modification times\",\n\targs: {\n\t\tname: \"file\",\n\t\tisVariadic: true,\n\t\ttemplate: \"folders\",\n\t\tsuggestCurrentToken: true,\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-A\",\n\t\t\tdescription:\n\t\t\t\t\"Adjust the access and modification time stamps for the file by the specified value\",\n\t\t\targs: {\n\t\t\t\tname: \"time\",\n\t\t\t\tdescription: \"[-][[hh]mm]SS\",\n\t\t\t},\n\t\t},\n\t\t{ name: \"-a\", description: \"Change the access time of the file\" },\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription: \"Do not create the file if it does not exist\",\n\t\t},\n\t\t{\n\t\t\tname: \"-f\",\n\t\t\tdescription:\n\t\t\t\t\"Attempt to force the update, even if the file permissions do not currently permit it\",\n\t\t},\n\t\t{\n\t\t\tname: \"-h\",\n\t\t\tdescription:\n\t\t\t\t\"If the file is a symbolic link, change the times of the link itself rather than the file that the link points to\",\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription: \"Change the modification time of the file\",\n\t\t},\n\t\t{\n\t\t\tname: \"-r\",\n\t\t\tdescription:\n\t\t\t\t\"Use the access and modifications times from the specified file instead of the current time of day\",\n\t\t\targs: {\n\t\t\t\tname: \"file\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-t\",\n\t\t\tdescription:\n\t\t\t\t\"Change the access and modification times to the specified time instead of the current time of day\",\n\t\t\targs: {\n\t\t\t\tname: \"timestamp\",\n\t\t\t\tdescription: \"[[CC]YY]MMDDhhmm[.SS]\",\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/uname.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"uname\",\n\tdescription: \"Print operating system name\",\n\toptions: [\n\t\t{\n\t\t\tname: \"-a\",\n\t\t\tdescription: \"Print all available system information\",\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription: \"Print the machine hardware name\",\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription: \"Print the system hostname\",\n\t\t},\n\t\t{\n\t\t\tname: \"-p\",\n\t\t\tdescription: \"Print the machine processor architecture name\",\n\t\t},\n\t\t{\n\t\t\tname: \"-r\",\n\t\t\tdescription: \"Print the operating system release\",\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription: \"Print the operating system name\",\n\t\t},\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription: \"Print the operating system version\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/vim.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"vim\",\n\tdescription: \"Vi IMproved, a programmer's text editor\",\n\targs: {\n\t\ttemplate: \"filepaths\",\n\t\t// suggestCurrentToken: true,\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"-v\",\n\t\t\tdescription: \"Vi mode (like 'vi')\",\n\t\t},\n\t\t{\n\t\t\tname: \"-e\",\n\t\t\tdescription: \"Ex mode (like 'ex')\",\n\t\t},\n\t\t{\n\t\t\tname: \"-E\",\n\t\t\tdescription: \"Improved Ex mode\",\n\t\t},\n\t\t{\n\t\t\tname: \"-s\",\n\t\t\tdescription:\n\t\t\t\t\"Enable silent mode (when in ex mode), or Read Normal mode commands from file\",\n\t\t\targs: {\n\t\t\t\tname: \"scriptin\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-d\",\n\t\t\tdescription: \"Diff mode (like 'vimdiff')\",\n\t\t},\n\t\t{\n\t\t\tname: \"-y\",\n\t\t\tdescription: \"Easy mode (like 'evim', modeless)\",\n\t\t},\n\t\t{\n\t\t\tname: \"-R\",\n\t\t\tdescription: \"Readonly mode (like 'view')\",\n\t\t},\n\t\t{\n\t\t\tname: \"-Z\",\n\t\t\tdescription: \"Restricted mode (like 'rvim')\",\n\t\t},\n\t\t{\n\t\t\tname: \"-m\",\n\t\t\tdescription: \"Modifications (writing files) not allowed\",\n\t\t},\n\t\t{\n\t\t\tname: \"-M\",\n\t\t\tdescription: \"Modifications in text not allowed\",\n\t\t},\n\t\t{\n\t\t\tname: \"-b\",\n\t\t\tdescription: \"Binary mode\",\n\t\t},\n\t\t{\n\t\t\tname: \"-l\",\n\t\t\tdescription: \"Lisp mode\",\n\t\t},\n\t\t{\n\t\t\tname: \"-C\",\n\t\t\tdescription: \"Compatible with Vi: 'compatible'\",\n\t\t},\n\t\t{\n\t\t\tname: \"-N\",\n\t\t\tdescription: \"Not fully Vi compatible: 'nocompatible'\",\n\t\t},\n\t\t{\n\t\t\tname: \"-V\",\n\t\t\tdescription: \"Be verbose [level N] [log messages to fname]\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"N\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"fname\",\n\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"-D\",\n\t\t\tdescription: \"Debugging mode\",\n\t\t},\n\t\t{\n\t\t\tname: \"-n\",\n\t\t\tdescription: \"No swap file, use memory only\",\n\t\t},\n\t\t{\n\t\t\tname: \"-r\",\n\t\t\tdescription:\n\t\t\t\t\"Recover crashed session if filename is specified, otherwise list swap files and exit\",\n\t\t\targs: {\n\t\t\t\tname: \"filename\",\n\t\t\t\tisOptional: true,\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-L\",\n\t\t\tdescription: \"Same as -r\",\n\t\t\targs: {\n\t\t\t\tname: \"filename\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-T\",\n\t\t\tdescription: \"Set terminal type to <terminal>\",\n\t\t\targs: {\n\t\t\t\tname: \"terminal\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--not-a-term\",\n\t\t\tdescription: \"Skip warning for input/output not being a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ttyfail\",\n\t\t\tdescription: \"Exit if input or output is not a terminal\",\n\t\t},\n\t\t{\n\t\t\tname: \"-u\",\n\t\t\tdescription: \"Use <vimrc> instead of any .vimrc\",\n\t\t\targs: {\n\t\t\t\tname: \"vimrc\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--noplugin\",\n\t\t\tdescription: \"Don't load plugin scripts\",\n\t\t},\n\t\t{\n\t\t\tname: \"-p\",\n\t\t\tdescription: \"Open N tab pages (default: one for each file)\",\n\t\t\targs: {\n\t\t\t\tname: \"N\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-o\",\n\t\t\tdescription: \"Open N windows (default: one for each file)\",\n\t\t\targs: {\n\t\t\t\tname: \"N\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-O\",\n\t\t\tdescription: \"Like -o but split vertically\",\n\t\t\targs: {\n\t\t\t\tname: \"N\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"+\",\n\t\t\tdescription:\n\t\t\t\t\"Start at end of file, if line number is specified, start at that line\",\n\t\t\targs: {\n\t\t\t\tname: \"lnum\",\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--cmd\",\n\t\t\tdescription: \"Execute <command> before loading any vimrc file\",\n\t\t\targs: {\n\t\t\t\tname: \"command\",\n\t\t\t\tisCommand: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-c\",\n\t\t\tdescription: \"Execute <command> after loading the first file\",\n\t\t\targs: {\n\t\t\t\tname: \"command\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-S\",\n\t\t\tdescription: \"Source file <session> after loading the first file\",\n\t\t\targs: {\n\t\t\t\tname: \"session\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-w\",\n\t\t\tdescription: \"Append all typed commands to file <scriptout>\",\n\t\t\targs: {\n\t\t\t\tname: \"scriptout\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-W\",\n\t\t\tdescription: \"Write all typed commands to file <scriptout>\",\n\t\t\targs: {\n\t\t\t\tname: \"scriptout\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-x\",\n\t\t\tdescription: \"Edit encrypted files\",\n\t\t},\n\t\t{\n\t\t\tname: \"--startuptime\",\n\t\t\tdescription: \"Write startup timing messages to <file>\",\n\t\t\targs: {\n\t\t\t\tname: \"file\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"-i\",\n\t\t\tdescription: \"Use <viminfo> instead of .viminfo\",\n\t\t\targs: {\n\t\t\t\tname: \"viminfo\",\n\t\t\t\ttemplate: \"filepaths\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--clean\",\n\t\t\tdescription: \"'nocompatible', Vim defaults, no plugins, no viminfo\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-h\", \"--help\"],\n\t\t\tdescription: \"Print Help message and exit\",\n\t\t},\n\t\t{\n\t\t\tname: \"--version\",\n\t\t\tdescription: \"Print version information and exit\",\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/wget.ts",
    "content": "const completionSpec: Fig.Spec = {\n\tname: \"wget\",\n\tdescription: \"A non-interactive network retriever\",\n\targs: {\n\t\tisVariadic: true,\n\t\tname: \"url\",\n\t\tdescription: \"The url(s) to retrieve\",\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: [\"-V\", \"--version\"],\n\t\t\tdescription: \"Display the version of Wget and exit\",\n\t\t},\n\t\t{ name: [\"-h\", \"--help\"], description: \"Print this help\" },\n\t\t{\n\t\t\tname: [\"-b\", \"--background\"],\n\t\t\tdescription: \"Go to background after startup\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-e\", \"--execute=COMMAND\"],\n\t\t\tdescription: \"Execute a `.wgetrc'-style command\",\n\t\t},\n\t\t{ name: [\"-o\", \"--output-file=FILE\"], description: \"Log messages to FILE\" },\n\t\t{\n\t\t\tname: [\"-a\", \"--append-output=FILE\"],\n\t\t\tdescription: \"Append messages to FILE\",\n\t\t},\n\t\t{ name: [\"-q\", \"--quiet\"], description: \"Quiet (no output)\" },\n\t\t{\n\t\t\tname: [\"-v\", \"--verbose\"],\n\t\t\tdescription: \"Be verbose (this is the default)\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-nv\", \"--no-verbose\"],\n\t\t\tdescription: \"Turn off verboseness, without being quiet\",\n\t\t},\n\t\t{\n\t\t\tname: \"--report-speed=TYPE\",\n\t\t\tdescription: \"Output bandwidth as TYPE.  TYPE can be bits\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-i\", \"--input-file=FILE\"],\n\t\t\tdescription: \"Download URLs found in local or external FILE\",\n\t\t},\n\t\t{ name: [\"-F\", \"--force-html\"], description: \"Treat input file as HTML\" },\n\t\t{\n\t\t\tname: [\"-B\", \"--base=URL\"],\n\t\t\tdescription: \"Resolves HTML input-file links (-i -F) relative to URL\",\n\t\t},\n\t\t{ name: \"--config=FILE\", description: \"Specify config file to use\" },\n\t\t{ name: \"--no-config\", description: \"Do not read any config file\" },\n\t\t{\n\t\t\tname: \"--rejected-log=FILE\",\n\t\t\tdescription: \"Log reasons for URL rejection to FILE\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-t\", \"--tries=NUMBER\"],\n\t\t\tdescription: \"Set number of retries to NUMBER (0 unlimits)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--retry-connrefused\",\n\t\t\tdescription: \"Retry even if connection is refused\",\n\t\t},\n\t\t{\n\t\t\tname: \"--retry-on-http-error\",\n\t\t\tdescription: \"Comma-separated list of HTTP errors to retry\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-O\", \"--output-document=FILE\"],\n\t\t\tdescription: \"Write documents to FILE\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-nc\", \"--no-clobber\"],\n\t\t\tdescription:\n\t\t\t\t\"Skip downloads that would download to existing files (overwriting them)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-netrc\",\n\t\t\tdescription: \"Don't try to obtain credentials from .netrc\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-c\", \"--continue\"],\n\t\t\tdescription: \"Resume getting a partially-downloaded file\",\n\t\t},\n\t\t{\n\t\t\tname: \"--start-pos=OFFSET\",\n\t\t\tdescription: \"Start downloading from zero-based position OFFSET\",\n\t\t},\n\t\t{ name: \"--progress=TYPE\", description: \"Select progress gauge type\" },\n\t\t{\n\t\t\tname: \"--show-progress\",\n\t\t\tdescription: \"Display the progress bar in any verbosity mode\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-N\", \"--timestamping\"],\n\t\t\tdescription: \"Don't re-retrieve files unless newer than local\",\n\t\t},\n\t\t{ name: [\"-S\", \"--server-response\"], description: \"Print server response\" },\n\t\t{ name: \"--spider\", description: \"Don't download anything\" },\n\t\t{\n\t\t\tname: [\"-T\", \"--timeout=SECONDS\"],\n\t\t\tdescription: \"Set all timeout values to SECONDS\",\n\t\t},\n\t\t{\n\t\t\tname: \"--dns-timeout=SECS\",\n\t\t\tdescription: \"Set the DNS lookup timeout to SECS\",\n\t\t},\n\t\t{\n\t\t\tname: \"--connect-timeout=SECS\",\n\t\t\tdescription: \"Set the connect timeout to SECS\",\n\t\t},\n\t\t{\n\t\t\tname: \"--read-timeout=SECS\",\n\t\t\tdescription: \"Set the read timeout to SECS\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-w\", \"--wait=SECONDS\"],\n\t\t\tdescription: \"Wait SECONDS between retrievals\",\n\t\t},\n\t\t{\n\t\t\tname: \"--waitretry=SECONDS\",\n\t\t\tdescription: \"Wait 1..SECONDS between retries of a retrieval\",\n\t\t},\n\t\t{\n\t\t\tname: \"--random-wait\",\n\t\t\tdescription: \"Wait from 0.5*WAIT...1.5*WAIT secs between retrievals\",\n\t\t},\n\t\t{ name: \"--no-proxy\", description: \"Explicitly turn off proxy\" },\n\t\t{\n\t\t\tname: [\"-Q\", \"--quota=NUMBER\"],\n\t\t\tdescription: \"Set retrieval quota to NUMBER\",\n\t\t},\n\t\t{\n\t\t\tname: \"--bind-address=ADDRESS\",\n\t\t\tdescription: \"Bind to ADDRESS (hostname or IP) on local host\",\n\t\t},\n\t\t{ name: \"--limit-rate=RATE\", description: \"Limit download rate to RATE\" },\n\t\t{ name: \"--no-dns-cache\", description: \"Disable caching DNS lookups\" },\n\t\t{\n\t\t\tname: \"--restrict-file-names=OS\",\n\t\t\tdescription: \"Restrict chars in file names to ones OS allows\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-case\",\n\t\t\tdescription: \"Ignore case when matching files/directories\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-4\", \"--inet4-only\"],\n\t\t\tdescription: \"Connect only to IPv4 addresses\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-6\", \"--inet6-only\"],\n\t\t\tdescription: \"Connect only to IPv6 addresses\",\n\t\t},\n\t\t{\n\t\t\tname: \"--user=USER\",\n\t\t\tdescription: \"Set both ftp and http user to USER\",\n\t\t},\n\t\t{\n\t\t\tname: \"--password=PASS\",\n\t\t\tdescription: \"Set both ftp and http password to PASS\",\n\t\t},\n\t\t{ name: \"--ask-password\", description: \"Prompt for passwords\" },\n\t\t{ name: \"--no-iri\", description: \"Turn off IRI support\" },\n\t\t{\n\t\t\tname: \"--local-encoding=ENC\",\n\t\t\tdescription: \"Use ENC as the local encoding for IRIs\",\n\t\t},\n\t\t{\n\t\t\tname: \"--remote-encoding=ENC\",\n\t\t\tdescription: \"Use ENC as the default remote encoding\",\n\t\t},\n\t\t{ name: \"--unlink\", description: \"Remove file before clobber\" },\n\t\t{\n\t\t\tname: \"--xattr\",\n\t\t\tdescription: \"Turn on storage of metadata in extended file attributes\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-nd\", \"--no-directories\"],\n\t\t\tdescription: \"Don't create directories\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-x\", \"--force-directories\"],\n\t\t\tdescription: \"Force creation of directories\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-nH\", \"--no-host-directories\"],\n\t\t\tdescription: \"Don't create host directories\",\n\t\t},\n\t\t{\n\t\t\tname: \"--protocol-directories\",\n\t\t\tdescription: \"Use protocol name in directories\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-P\", \"--directory-prefix=PREFIX\"],\n\t\t\tdescription: \"Save files to PREFIX/\",\n\t\t},\n\t\t{\n\t\t\tname: \"--cut-dirs=NUMBER\",\n\t\t\tdescription: \"Ignore NUMBER remote directory components\",\n\t\t},\n\t\t{ name: \"--http-user=USER\", description: \"Set http user to USER\" },\n\t\t{\n\t\t\tname: \"--http-password=PASS\",\n\t\t\tdescription: \"Set http password to PASS\",\n\t\t},\n\t\t{ name: \"--no-cache\", description: \"Disallow server-cached data\" },\n\t\t{\n\t\t\tname: [\"-E\", \"--adjust-extension\"],\n\t\t\tdescription: \"Save HTML/CSS documents with proper extensions\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-length\",\n\t\t\tdescription: \"Ignore 'Content-Length' header field\",\n\t\t},\n\t\t{\n\t\t\tname: \"--header=STRING\",\n\t\t\tdescription: \"Insert STRING among the headers\",\n\t\t},\n\t\t{\n\t\t\tname: \"--compression=TYPE\",\n\t\t\tdescription:\n\t\t\t\t\"Choose compression, one of auto, gzip and none. (default: none)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--max-redirect\",\n\t\t\tdescription: \"Maximum redirections allowed per page\",\n\t\t},\n\t\t{ name: \"--proxy-user=USER\", description: \"Set USER as proxy username\" },\n\t\t{\n\t\t\tname: \"--proxy-password=PASS\",\n\t\t\tdescription: \"Set PASS as proxy password\",\n\t\t},\n\t\t{\n\t\t\tname: \"--referer=URL\",\n\t\t\tdescription: \"Include 'Referer: URL' header in HTTP request\",\n\t\t},\n\t\t{ name: \"--save-headers\", description: \"Save the HTTP headers to file\" },\n\t\t{\n\t\t\tname: [\"-U\", \"--user-agent=AGENT\"],\n\t\t\tdescription: \"Identify as AGENT instead of Wget/VERSION\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-http-keep-alive\",\n\t\t\tdescription: \"Disable HTTP keep-alive (persistent connections)\",\n\t\t},\n\t\t{ name: \"--no-cookies\", description: \"Don't use cookies\" },\n\t\t{\n\t\t\tname: \"--load-cookies=FILE\",\n\t\t\tdescription: \"Load cookies from FILE before session\",\n\t\t},\n\t\t{\n\t\t\tname: \"--save-cookies=FILE\",\n\t\t\tdescription: \"Save cookies to FILE after session\",\n\t\t},\n\t\t{\n\t\t\tname: \"--keep-session-cookies\",\n\t\t\tdescription: \"Load and save session (non-permanent) cookies\",\n\t\t},\n\t\t{\n\t\t\tname: \"--post-data=STRING\",\n\t\t\tdescription: \"Use the POST method; send STRING as the data\",\n\t\t},\n\t\t{\n\t\t\tname: \"--post-file=FILE\",\n\t\t\tdescription: \"Use the POST method; send contents of FILE\",\n\t\t},\n\t\t{\n\t\t\tname: \"--method=HTTPMethod\",\n\t\t\tdescription: 'Use method \"HTTPMethod\" in the request',\n\t\t},\n\t\t{\n\t\t\tname: \"--body-data=STRING\",\n\t\t\tdescription: \"Send STRING as data. --method MUST be set\",\n\t\t},\n\t\t{\n\t\t\tname: \"--body-file=FILE\",\n\t\t\tdescription: \"Send contents of FILE. --method MUST be set\",\n\t\t},\n\t\t{\n\t\t\tname: \"--content-on-error\",\n\t\t\tdescription: \"Output the received content on server errors\",\n\t\t},\n\t\t{\n\t\t\tname: \"--secure-protocol=PR\",\n\t\t\tdescription: \"Choose secure protocol, one of auto, SSLv2,\",\n\t\t},\n\t\t{ name: \"--https-only\", description: \"Only follow secure HTTPS links\" },\n\t\t{\n\t\t\tname: \"--no-check-certificate\",\n\t\t\tdescription: \"Don't validate the server's certificate\",\n\t\t},\n\t\t{ name: \"--certificate=FILE\", description: \"Client certificate file\" },\n\t\t{\n\t\t\tname: \"--certificate-type=TYPE\",\n\t\t\tdescription: \"Client certificate type, PEM or DER\",\n\t\t},\n\t\t{ name: \"--private-key=FILE\", description: \"Private key file\" },\n\t\t{\n\t\t\tname: \"--private-key-type=TYPE\",\n\t\t\tdescription: \"Private key type, PEM or DER\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ca-certificate=FILE\",\n\t\t\tdescription: \"File with the bundle of CAs\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ca-directory=DIR\",\n\t\t\tdescription: \"Directory where hash list of CAs is stored\",\n\t\t},\n\t\t{ name: \"--crl-file=FILE\", description: \"File with bundle of CRLs\" },\n\t\t{\n\t\t\tname: \"--ciphers=STR\",\n\t\t\tdescription:\n\t\t\t\t\"Set the priority string (GnuTLS) or cipher list string (OpenSSL) directly\",\n\t\t},\n\t\t{ name: [\"-r\", \"--recursive\"], description: \"Specify recursive download\" },\n\t\t{\n\t\t\tname: [\"-l\", \"--level=NUMBER\"],\n\t\t\tdescription: \"Maximum recursion depth (inf or 0 for infinite)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--delete-after\",\n\t\t\tdescription: \"Delete files locally after downloading them\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-k\", \"--convert-links\"],\n\t\t\tdescription: \"Make links in downloaded HTML or CSS point to local files\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-K\", \"--backup-converted\"],\n\t\t\tdescription: \"Before converting file X, back up as X.orig\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-m\", \"--mirror\"],\n\t\t\tdescription: \"Shortcut for -N -r -l inf --no-remove-listing\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-p\", \"--page-requisites\"],\n\t\t\tdescription: \"Get all images, etc. needed to display HTML page\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-A\", \"--accept=LIST\"],\n\t\t\tdescription: \"Comma-separated list of accepted extensions\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-R\", \"--reject=LIST\"],\n\t\t\tdescription: \"Comma-separated list of rejected extensions\",\n\t\t},\n\t\t{\n\t\t\tname: \"--accept-regex=REGEX\",\n\t\t\tdescription: \"Regex matching accepted URLs\",\n\t\t},\n\t\t{\n\t\t\tname: \"--reject-regex=REGEX\",\n\t\t\tdescription: \"Regex matching rejected URLs\",\n\t\t},\n\t\t{ name: \"--regex-type=TYPE\", description: \"Regex type (posix)\" },\n\t\t{\n\t\t\tname: [\"-D\", \"--domains=LIST\"],\n\t\t\tdescription: \"Comma-separated list of accepted domains\",\n\t\t},\n\t\t{\n\t\t\tname: \"--exclude-domains=LIST\",\n\t\t\tdescription: \"Comma-separated list of rejected domains\",\n\t\t},\n\t\t{\n\t\t\tname: \"--follow-ftp\",\n\t\t\tdescription: \"Follow FTP links from HTML documents\",\n\t\t},\n\t\t{\n\t\t\tname: \"--follow-tags=LIST\",\n\t\t\tdescription: \"Comma-separated list of followed HTML tags\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-tags=LIST\",\n\t\t\tdescription: \"Comma-separated list of ignored HTML tags\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-H\", \"--span-hosts\"],\n\t\t\tdescription: \"Go to foreign hosts when recursive\",\n\t\t},\n\t\t{ name: [\"-L\", \"--relative\"], description: \"Follow relative links only\" },\n\t\t{\n\t\t\tname: [\"-I\", \"--include-directories=LIST\"],\n\t\t\tdescription: \"List of allowed directories\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-X\", \"--exclude-directories=LIST\"],\n\t\t\tdescription: \"List of excluded directories\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-np\", \"--no-parent\"],\n\t\t\tdescription: \"Don't ascend to the parent directory\",\n\t\t},\n\t],\n};\n\n// GNU Wget 1.20.3, a non-interactive network retriever.\n// Usage: wget [OPTION]... [URL]...\n\n// Mandatory arguments to long options are mandatory for short options too.\n\n// Startup:\n//   -V,  --version                   display the version of Wget and exit\n//   -h,  --help                      print this help\n//   -b,  --background                go to background after startup\n//   -e,  --execute=COMMAND           execute a `.wgetrc'-style command\n\n// Logging and input file:\n//   -o,  --output-file=FILE          log messages to FILE\n//   -a,  --append-output=FILE        append messages to FILE\n//   -q,  --quiet                     quiet (no output)\n//   -v,  --verbose                   be verbose (this is the default)\n//   -nv, --no-verbose                turn off verboseness, without being quiet\n//        --report-speed=TYPE         output bandwidth as TYPE.  TYPE can be bits\n//   -i,  --input-file=FILE           download URLs found in local or external FILE\n//   -F,  --force-html                treat input file as HTML\n//   -B,  --base=URL                  resolves HTML input-file links (-i -F)\n//                                      relative to URL\n//        --config=FILE               specify config file to use\n//        --no-config                 do not read any config file\n//        --rejected-log=FILE         log reasons for URL rejection to FILE\n\n// Download:\n//   -t,  --tries=NUMBER              set number of retries to NUMBER (0 unlimits)\n//        --retry-connrefused         retry even if connection is refused\n//        --retry-on-http-error=ERRORS    comma-separated list of HTTP errors to retry\n//   -O,  --output-document=FILE      write documents to FILE\n//   -nc, --no-clobber                skip downloads that would download to\n//                                      existing files (overwriting them)\n//        --no-netrc                  don't try to obtain credentials from .netrc\n//   -c,  --continue                  resume getting a partially-downloaded file\n//        --start-pos=OFFSET          start downloading from zero-based position OFFSET\n//        --progress=TYPE             select progress gauge type\n//        --show-progress             display the progress bar in any verbosity mode\n//   -N,  --timestamping              don't re-retrieve files unless newer than\n//                                      local\n//        --no-if-modified-since      don't use conditional if-modified-since get\n//                                      requests in timestamping mode\n//        --no-use-server-timestamps  don't set the local file's timestamp by\n//                                      the one on the server\n//   -S,  --server-response           print server response\n//        --spider                    don't download anything\n//   -T,  --timeout=SECONDS           set all timeout values to SECONDS\n//        --dns-timeout=SECS          set the DNS lookup timeout to SECS\n//        --connect-timeout=SECS      set the connect timeout to SECS\n//        --read-timeout=SECS         set the read timeout to SECS\n//   -w,  --wait=SECONDS              wait SECONDS between retrievals\n//        --waitretry=SECONDS         wait 1..SECONDS between retries of a retrieval\n//        --random-wait               wait from 0.5*WAIT...1.5*WAIT secs between retrievals\n//        --no-proxy                  explicitly turn off proxy\n//   -Q,  --quota=NUMBER              set retrieval quota to NUMBER\n//        --bind-address=ADDRESS      bind to ADDRESS (hostname or IP) on local host\n//        --limit-rate=RATE           limit download rate to RATE\n//        --no-dns-cache              disable caching DNS lookups\n//        --restrict-file-names=OS    restrict chars in file names to ones OS allows\n//        --ignore-case               ignore case when matching files/directories\n//   -4,  --inet4-only                connect only to IPv4 addresses\n//   -6,  --inet6-only                connect only to IPv6 addresses\n//        --prefer-family=FAMILY      connect first to addresses of specified family,\n//                                      one of IPv6, IPv4, or none\n//        --user=USER                 set both ftp and http user to USER\n//        --password=PASS             set both ftp and http password to PASS\n//        --ask-password              prompt for passwords\n//        --use-askpass=COMMAND       specify credential handler for requesting\n//                                      username and password.  If no COMMAND is\n//                                      specified the WGET_ASKPASS or the SSH_ASKPASS\n//                                      environment variable is used.\n//        --no-iri                    turn off IRI support\n//        --local-encoding=ENC        use ENC as the local encoding for IRIs\n//        --remote-encoding=ENC       use ENC as the default remote encoding\n//        --unlink                    remove file before clobber\n//        --xattr                     turn on storage of metadata in extended file attributes\n\n// Directories:\n//   -nd, --no-directories            don't create directories\n//   -x,  --force-directories         force creation of directories\n//   -nH, --no-host-directories       don't create host directories\n//        --protocol-directories      use protocol name in directories\n//   -P,  --directory-prefix=PREFIX   save files to PREFIX/..\n//        --cut-dirs=NUMBER           ignore NUMBER remote directory components\n\n// HTTP options:\n//        --http-user=USER            set http user to USER\n//        --http-password=PASS        set http password to PASS\n//        --no-cache                  disallow server-cached data\n//        --default-page=NAME         change the default page name (normally\n//                                      this is 'index.html'.)\n//   -E,  --adjust-extension          save HTML/CSS documents with proper extensions\n//        --ignore-length             ignore 'Content-Length' header field\n//        --header=STRING             insert STRING among the headers\n//        --compression=TYPE          choose compression, one of auto, gzip and none. (default: none)\n//        --max-redirect              maximum redirections allowed per page\n//        --proxy-user=USER           set USER as proxy username\n//        --proxy-password=PASS       set PASS as proxy password\n//        --referer=URL               include 'Referer: URL' header in HTTP request\n//        --save-headers              save the HTTP headers to file\n//   -U,  --user-agent=AGENT          identify as AGENT instead of Wget/VERSION\n//        --no-http-keep-alive        disable HTTP keep-alive (persistent connections)\n//        --no-cookies                don't use cookies\n//        --load-cookies=FILE         load cookies from FILE before session\n//        --save-cookies=FILE         save cookies to FILE after session\n//        --keep-session-cookies      load and save session (non-permanent) cookies\n//        --post-data=STRING          use the POST method; send STRING as the data\n//        --post-file=FILE            use the POST method; send contents of FILE\n//        --method=HTTPMethod         use method \"HTTPMethod\" in the request\n//        --body-data=STRING          send STRING as data. --method MUST be set\n//        --body-file=FILE            send contents of FILE. --method MUST be set\n//        --content-disposition       honor the Content-Disposition header when\n//                                      choosing local file names (EXPERIMENTAL)\n//        --content-on-error          output the received content on server errors\n//        --auth-no-challenge         send Basic HTTP authentication information\n//                                      without first waiting for the server's\n//                                      challenge\n\n// HTTPS (SSL/TLS) options:\n//        --secure-protocol=PR        choose secure protocol, one of auto, SSLv2,\n//                                      SSLv3, TLSv1, TLSv1_1, TLSv1_2 and PFS\n//        --https-only                only follow secure HTTPS links\n//        --no-check-certificate      don't validate the server's certificate\n//        --certificate=FILE          client certificate file\n//        --certificate-type=TYPE     client certificate type, PEM or DER\n//        --private-key=FILE          private key file\n//        --private-key-type=TYPE     private key type, PEM or DER\n//        --ca-certificate=FILE       file with the bundle of CAs\n//        --ca-directory=DIR          directory where hash list of CAs is stored\n//        --crl-file=FILE             file with bundle of CRLs\n//        --pinnedpubkey=FILE/HASHES  Public key (PEM/DER) file, or any number\n//                                    of base64 encoded sha256 hashes preceded by\n//                                    'sha256//' and separated by ';', to verify\n//                                    peer against\n//        --random-file=FILE          file with random data for seeding the SSL PRNG\n\n//        --ciphers=STR           Set the priority string (GnuTLS) or cipher list string (OpenSSL) directly.\n//                                    Use with care. This option overrides --secure-protocol.\n//                                    The format and syntax of this string depend on the specific SSL/TLS engine.\n// HSTS options:\n//        --no-hsts                   disable HSTS\n//        --hsts-file                 path of HSTS database (will override default)\n\n// FTP options:\n//        --ftp-user=USER             set ftp user to USER\n//        --ftp-password=PASS         set ftp password to PASS\n//        --no-remove-listing         don't remove '.listing' files\n//        --no-glob                   turn off FTP file name globbing\n//        --no-passive-ftp            disable the \"passive\" transfer mode\n//        --preserve-permissions      preserve remote file permissions\n//        --retr-symlinks             when recursing, get linked-to files (not dir)\n\n// FTPS options:\n//        --ftps-implicit                 use implicit FTPS (default port is 990)\n//        --ftps-resume-ssl               resume the SSL/TLS session started in the control connection when\n//                                          opening a data connection\n//        --ftps-clear-data-connection    cipher the control channel only; all the data will be in plaintext\n//        --ftps-fallback-to-ftp          fall back to FTP if FTPS is not supported in the target server\n// WARC options:\n//        --warc-file=FILENAME        save request/response data to a .warc.gz file\n//        --warc-header=STRING        insert STRING into the warcinfo record\n//        --warc-max-size=NUMBER      set maximum size of WARC files to NUMBER\n//        --warc-cdx                  write CDX index files\n//        --warc-dedup=FILENAME       do not store records listed in this CDX file\n//        --no-warc-compression       do not compress WARC files with GZIP\n//        --no-warc-digests           do not calculate SHA1 digests\n//        --no-warc-keep-log          do not store the log file in a WARC record\n//        --warc-tempdir=DIRECTORY    location for temporary files created by the\n//                                      WARC writer\n\n// Recursive download:\n//   -r,  --recursive                 specify recursive download\n//   -l,  --level=NUMBER              maximum recursion depth (inf or 0 for infinite)\n//        --delete-after              delete files locally after downloading them\n//   -k,  --convert-links             make links in downloaded HTML or CSS point to\n//                                      local files\n//        --convert-file-only         convert the file part of the URLs only (usually known as the basename)\n//        --backups=N                 before writing file X, rotate up to N backup files\n//   -K,  --backup-converted          before converting file X, back up as X.orig\n//   -m,  --mirror                    shortcut for -N -r -l inf --no-remove-listing\n//   -p,  --page-requisites           get all images, etc. needed to display HTML page\n//        --strict-comments           turn on strict (SGML) handling of HTML comments\n\n// Recursive accept/reject:\n//   -A,  --accept=LIST               comma-separated list of accepted extensions\n//   -R,  --reject=LIST               comma-separated list of rejected extensions\n//        --accept-regex=REGEX        regex matching accepted URLs\n//        --reject-regex=REGEX        regex matching rejected URLs\n//        --regex-type=TYPE           regex type (posix)\n//   -D,  --domains=LIST              comma-separated list of accepted domains\n//        --exclude-domains=LIST      comma-separated list of rejected domains\n//        --follow-ftp                follow FTP links from HTML documents\n//        --follow-tags=LIST          comma-separated list of followed HTML tags\n//        --ignore-tags=LIST          comma-separated list of ignored HTML tags\n//   -H,  --span-hosts                go to foreign hosts when recursive\n//   -L,  --relative                  follow relative links only\n//   -I,  --include-directories=LIST  list of allowed directories\n//        --trust-server-names        use the name specified by the redirection\n//                                      URL's last component\n//   -X,  --exclude-directories=LIST  list of excluded directories\n//   -np, --no-parent                 don't ascend to the parent directory\n\n// Email bug reports, questions, discussions to <bug-wget@gnu.org>\n// and/or open issues at https://savannah.gnu.org/bugs/?func=additem&group=wget.\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/completions/upstream/yarn.ts",
    "content": "import { npmScriptsGenerator, npmSearchGenerator } from \"./npm\";\n\nexport const yarnScriptParserDirectives: Fig.Arg[\"parserDirectives\"] = {\n\talias: async (token, executeShellCommand) => {\n\t\tconst npmPrefix = await executeShellCommand({\n\t\t\tcommand: \"npm\",\n\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\targs: [\"prefix\"],\n\t\t});\n\t\tif (npmPrefix.status !== 0) {\n\t\t\tthrow new Error(\"npm prefix command failed\");\n\t\t}\n\t\tconst packageJson = await executeShellCommand({\n\t\t\tcommand: \"cat\",\n\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\targs: [`${npmPrefix.stdout.trim()}/package.json`],\n\t\t});\n\t\tconst script: string = JSON.parse(packageJson.stdout).scripts?.[token];\n\t\tif (!script) {\n\t\t\tthrow new Error(`Script not found: '${token}'`);\n\t\t}\n\t\treturn script;\n\t},\n};\n\nexport const nodeClis = new Set([\n\t\"vue\",\n\t\"vite\",\n\t\"nuxt\",\n\t\"react-native\",\n\t\"degit\",\n\t\"expo\",\n\t\"jest\",\n\t\"next\",\n\t\"electron\",\n\t\"prisma\",\n\t\"eslint\",\n\t\"prettier\",\n\t\"tsc\",\n\t\"typeorm\",\n\t\"babel\",\n\t\"remotion\",\n\t\"autocomplete-tools\",\n\t\"redwood\",\n\t\"rw\",\n\t\"create-completion-spec\",\n\t\"publish-spec-to-team\",\n\t\"capacitor\",\n\t\"cap\",\n]);\n\n// generate global package list from global package.json file\nconst getGlobalPackagesGenerator: Fig.Generator = {\n\tcustom: async (tokens, executeCommand, generatorContext) => {\n\t\tconst { stdout: yarnGlobalDir } = await executeCommand({\n\t\t\tcommand: \"yarn\",\n\t\t\targs: [\"global\", \"dir\"],\n\t\t});\n\n\t\tconst { stdout } = await executeCommand({\n\t\t\tcommand: \"cat\",\n\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\targs: [`${yarnGlobalDir.trim()}/package.json`],\n\t\t});\n\n\t\tif (stdout.trim() == \"\") return [];\n\n\t\ttry {\n\t\t\tconst packageContent = JSON.parse(stdout);\n\t\t\tconst dependencyScripts = packageContent[\"dependencies\"] || {};\n\t\t\tconst devDependencyScripts = packageContent[\"devDependencies\"] || {};\n\t\t\tconst dependencies = [\n\t\t\t\t...Object.keys(dependencyScripts),\n\t\t\t\t...Object.keys(devDependencyScripts),\n\t\t\t];\n\n\t\t\tconst filteredDependencies = dependencies.filter(\n\t\t\t\t(dependency) => !tokens.includes(dependency)\n\t\t\t);\n\n\t\t\treturn filteredDependencies.map((dependencyName) => ({\n\t\t\t\tname: dependencyName,\n\t\t\t\ticon: \"📦\",\n\t\t\t}));\n\t\t} catch (e) {}\n\n\t\treturn [];\n\t},\n};\n\n// generate package list of direct and indirect dependencies\nconst allDependenciesGenerator: Fig.Generator = {\n\tscript: [\"yarn\", \"list\", \"--depth=0\", \"--json\"],\n\tpostProcess: (out) => {\n\t\tif (out.trim() == \"\") return [];\n\n\t\ttry {\n\t\t\tconst packageContent = JSON.parse(out);\n\t\t\tconst dependencies = packageContent.data.trees;\n\t\t\treturn dependencies.map((dependency: { name: string }) => ({\n\t\t\t\tname: dependency.name.split(\"@\")[0],\n\t\t\t\ticon: \"📦\",\n\t\t\t}));\n\t\t} catch (e) {}\n\t\treturn [];\n\t},\n};\n\nconst configList: Fig.Generator = {\n\tscript: [\"yarn\", \"config\", \"list\"],\n\tpostProcess: function (out) {\n\t\tif (out.trim() == \"\") {\n\t\t\treturn [];\n\t\t}\n\n\t\ttry {\n\t\t\tconst startIndex = out.indexOf(\"{\");\n\t\t\tconst endIndex = out.indexOf(\"}\");\n\t\t\tlet output = out.substring(startIndex, endIndex + 1);\n\t\t\t// TODO: fix hacky code\n\t\t\t// reason: JSON parse was not working without double quotes\n\t\t\toutput = output\n\t\t\t\t.replace(/\\'/gi, '\"')\n\t\t\t\t.replace(\"lastUpdateCheck\", '\"lastUpdateCheck\"')\n\t\t\t\t.replace(\"registry\", '\"lastUpdateCheck\"');\n\t\t\tconst configObject = JSON.parse(output);\n\t\t\tif (configObject) {\n\t\t\t\treturn Object.keys(configObject).map((key) => ({ name: key }));\n\t\t\t}\n\t\t} catch (e) {}\n\n\t\treturn [];\n\t},\n};\n\nexport const dependenciesGenerator: Fig.Generator = {\n\tscript: [\n\t\t\"bash\",\n\t\t\"-c\",\n\t\t\"until [[ -f package.json ]] || [[ $PWD = '/' ]]; do cd ..; done; cat package.json\",\n\t],\n\tpostProcess: function (out, context = []) {\n\t\tif (out.trim() === \"\") {\n\t\t\treturn [];\n\t\t}\n\n\t\ttry {\n\t\t\tconst packageContent = JSON.parse(out);\n\t\t\tconst dependencies = packageContent[\"dependencies\"] ?? {};\n\t\t\tconst devDependencies = packageContent[\"devDependencies\"];\n\t\t\tconst optionalDependencies = packageContent[\"optionalDependencies\"] ?? {};\n\t\t\tObject.assign(dependencies, devDependencies, optionalDependencies);\n\n\t\t\treturn Object.keys(dependencies)\n\t\t\t\t.filter((pkgName) => {\n\t\t\t\t\tconst isListed = context.some((current) => current === pkgName);\n\t\t\t\t\treturn !isListed;\n\t\t\t\t})\n\t\t\t\t.map((pkgName) => ({\n\t\t\t\t\tname: pkgName,\n\t\t\t\t\ticon: \"📦\",\n\t\t\t\t\tdescription: dependencies[pkgName]\n\t\t\t\t\t\t? \"dependency\"\n\t\t\t\t\t\t: optionalDependencies[pkgName]\n\t\t\t\t\t\t\t? \"optionalDependency\"\n\t\t\t\t\t\t\t: \"devDependency\",\n\t\t\t\t}));\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\treturn [];\n\t\t}\n\t},\n};\n\nconst commonOptions: Fig.Option[] = [\n\t{ name: [\"-s\", \"--silent\"], description: \"Skip Yarn console logs\" },\n\t{\n\t\tname: \"--no-default-rc\",\n\t\tdescription:\n\t\t\t\"Prevent Yarn from automatically detecting yarnrc and npmrc files\",\n\t},\n\t{\n\t\tname: \"--use-yarnrc\",\n\t\tdescription:\n\t\t\t\"Specifies a yarnrc file that Yarn should use (.yarnrc only, not .npmrc) (default: )\",\n\t\targs: { name: \"path\", template: \"filepaths\" },\n\t},\n\t{\n\t\tname: \"--verbose\",\n\t\tdescription: \"Output verbose messages on internal operations\",\n\t},\n\t{\n\t\tname: \"--offline\",\n\t\tdescription:\n\t\t\t\"Trigger an error if any required dependencies are not available in local cache\",\n\t},\n\t{\n\t\tname: \"--prefer-offline\",\n\t\tdescription:\n\t\t\t\"Use network only if dependencies are not available in local cache\",\n\t},\n\t{\n\t\tname: [\"--enable-pnp\", \"--pnp\"],\n\t\tdescription: \"Enable the Plug'n'Play installation\",\n\t},\n\t{\n\t\tname: \"--json\",\n\t\tdescription: \"Format Yarn log messages as lines of JSON\",\n\t},\n\t{\n\t\tname: \"--ignore-scripts\",\n\t\tdescription: \"Don't run lifecycle scripts\",\n\t},\n\t{ name: \"--har\", description: \"Save HAR output of network traffic\" },\n\t{ name: \"--ignore-platform\", description: \"Ignore platform checks\" },\n\t{ name: \"--ignore-engines\", description: \"Ignore engines check\" },\n\t{\n\t\tname: \"--ignore-optional\",\n\t\tdescription: \"Ignore optional dependencies\",\n\t},\n\t{\n\t\tname: \"--force\",\n\t\tdescription:\n\t\t\t\"Install and build packages even if they were built before, overwrite lockfile\",\n\t},\n\t{\n\t\tname: \"--skip-integrity-check\",\n\t\tdescription: \"Run install without checking if node_modules is installed\",\n\t},\n\t{\n\t\tname: \"--check-files\",\n\t\tdescription: \"Install will verify file tree of packages for consistency\",\n\t},\n\t{\n\t\tname: \"--no-bin-links\",\n\t\tdescription: \"Don't generate bin links when setting up packages\",\n\t},\n\t{ name: \"--flat\", description: \"Only allow one version of a package\" },\n\t{\n\t\tname: [\"--prod\", \"--production\"],\n\t\tdescription:\n\t\t\t\"Instruct Yarn to ignore NODE_ENV and take its production-or-not status from this flag instead\",\n\t},\n\t{\n\t\tname: \"--no-lockfile\",\n\t\tdescription: \"Don't read or generate a lockfile\",\n\t},\n\t{ name: \"--pure-lockfile\", description: \"Don't generate a lockfile\" },\n\t{\n\t\tname: \"--frozen-lockfile\",\n\t\tdescription: \"Don't generate a lockfile and fail if an update is needed\",\n\t},\n\t{\n\t\tname: \"--update-checksums\",\n\t\tdescription: \"Update package checksums from current repository\",\n\t},\n\t{\n\t\tname: \"--link-duplicates\",\n\t\tdescription: \"Create hardlinks to the repeated modules in node_modules\",\n\t},\n\t{\n\t\tname: \"--link-folder\",\n\t\tdescription: \"Specify a custom folder to store global links\",\n\t\targs: { name: \"path\", template: \"folders\" },\n\t},\n\t{\n\t\tname: \"--global-folder\",\n\t\tdescription: \"Specify a custom folder to store global packages\",\n\t\targs: { name: \"path\", template: \"folders\" },\n\t},\n\t{\n\t\tname: \"--modules-folder\",\n\t\tdescription:\n\t\t\t\"Rather than installing modules into the node_modules folder relative to the cwd, output them here\",\n\t\targs: { name: \"path\", template: \"folders\" },\n\t},\n\t{\n\t\tname: \"--preferred-cache-folder\",\n\t\tdescription: \"Specify a custom folder to store the yarn cache if possible\",\n\t\targs: { name: \"path\", template: \"folders\" },\n\t},\n\t{\n\t\tname: \"--cache-folder\",\n\t\tdescription:\n\t\t\t\"Specify a custom folder that must be used to store the yarn cache\",\n\t\targs: { name: \"path\", template: \"folders\" },\n\t},\n\t{\n\t\tname: \"--mutex\",\n\t\tdescription: \"Use a mutex to ensure only one yarn instance is executing\",\n\t\targs: { name: \"type[:specifier]\" },\n\t},\n\t{\n\t\tname: \"--emoji\",\n\t\tdescription: \"Enables emoji in output\",\n\t\targs: {\n\t\t\tdefault: \"true\",\n\t\t\tsuggestions: [\"true\", \"false\"],\n\t\t},\n\t},\n\t{\n\t\tname: \"--cwd\",\n\t\tdescription: \"Working directory to use\",\n\t\targs: { name: \"cwd\", template: \"folders\" },\n\t},\n\t{\n\t\tname: [\"--proxy\", \"--https-proxy\"],\n\t\tdescription: \"\",\n\t\targs: { name: \"host\" },\n\t},\n\t{\n\t\tname: \"--registry\",\n\t\tdescription: \"Override configuration registry\",\n\t\targs: { name: \"url\" },\n\t},\n\t{ name: \"--no-progress\", description: \"Disable progress bar\" },\n\t{\n\t\tname: \"--network-concurrency\",\n\t\tdescription: \"Maximum number of concurrent network requests\",\n\t\targs: { name: \"number\" },\n\t},\n\t{\n\t\tname: \"--network-timeout\",\n\t\tdescription: \"TCP timeout for network requests\",\n\t\targs: { name: \"milliseconds\" },\n\t},\n\t{\n\t\tname: \"--non-interactive\",\n\t\tdescription: \"Do not show interactive prompts\",\n\t},\n\t{\n\t\tname: \"--scripts-prepend-node-path\",\n\t\tdescription: \"Prepend the node executable dir to the PATH in scripts\",\n\t},\n\t{\n\t\tname: \"--no-node-version-check\",\n\t\tdescription:\n\t\t\t\"Do not warn when using a potentially unsupported Node version\",\n\t},\n\t{\n\t\tname: \"--focus\",\n\t\tdescription:\n\t\t\t\"Focus on a single workspace by installing remote copies of its sibling workspaces\",\n\t},\n\t{\n\t\tname: \"--otp\",\n\t\tdescription: \"One-time password for two factor authentication\",\n\t\targs: { name: \"otpcode\" },\n\t},\n];\n\nexport const createCLIsGenerator: Fig.Generator = {\n\tscript: function (context) {\n\t\tif (context[context.length - 1] === \"\") return undefined;\n\t\tconst searchTerm = \"create-\" + context[context.length - 1];\n\t\treturn [\n\t\t\t\"curl\",\n\t\t\t\"-s\",\n\t\t\t\"-H\",\n\t\t\t\"Accept: application/json\",\n\t\t\t`https://api.npms.io/v2/search?q=${searchTerm}&size=20`,\n\t\t];\n\t},\n\tcache: {\n\t\tttl: 100 * 24 * 60 * 60 * 3, // 3 days\n\t},\n\tpostProcess: function (out) {\n\t\ttry {\n\t\t\treturn JSON.parse(out).results.map(\n\t\t\t\t(item: { package: { name: string; description: string } }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tname: item.package.name.substring(7),\n\t\t\t\t\t\tdescription: item.package.description,\n\t\t\t\t\t}) as Fig.Suggestion\n\t\t\t) as Fig.Suggestion[];\n\t\t} catch (e) {\n\t\t\treturn [];\n\t\t}\n\t},\n};\n\nconst completionSpec: Fig.Spec = {\n\tname: \"yarn\",\n\tdescription: \"Manage packages and run scripts\",\n\tgenerateSpec: async (tokens, executeShellCommand) => {\n\t\tconst binaries = (\n\t\t\tawait executeShellCommand({\n\t\t\t\tcommand: \"bash\",\n\t\t\t\targs: [\n\t\t\t\t\t\"-c\",\n\t\t\t\t\t`until [[ -d node_modules/ ]] || [[ $PWD = '/' ]]; do cd ..; done; ls -1 node_modules/.bin/`,\n\t\t\t\t],\n\t\t\t})\n\t\t).stdout.split(\"\\n\");\n\n\t\tconst subcommands = binaries\n\t\t\t.filter((name) => nodeClis.has(name))\n\t\t\t.map((name) => ({\n\t\t\t\tname: name,\n\t\t\t\tloadSpec: name === \"rw\" ? \"redwood\" : name,\n\t\t\t\ticon: \"fig://icon?type=package\",\n\t\t\t}));\n\n\t\treturn {\n\t\t\tname: \"yarn\",\n\t\t\tsubcommands,\n\t\t} as Fig.Spec;\n\t},\n\targs: {\n\t\tgenerators: npmScriptsGenerator,\n\t\tfilterStrategy: \"fuzzy\",\n\t\tparserDirectives: yarnScriptParserDirectives,\n\t\tisOptional: true,\n\t\tisCommand: true,\n\t},\n\toptions: [\n\t\t{\n\t\t\tname: \"--disable-pnp\",\n\t\t\tdescription: \"Disable the Plug'n'Play installation\",\n\t\t},\n\t\t{\n\t\t\tname: \"--emoji\",\n\t\t\tdescription: \"Enable emoji in output (default: true)\",\n\t\t\targs: {\n\t\t\t\tname: \"bool\",\n\t\t\t\tsuggestions: [{ name: \"true\" }, { name: \"false\" }],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"--enable-pnp\", \"--pnp\"],\n\t\t\tdescription: \"Enable the Plug'n'Play installation\",\n\t\t},\n\t\t{\n\t\t\tname: \"--flat\",\n\t\t\tdescription: \"Only allow one version of a package\",\n\t\t},\n\t\t{\n\t\t\tname: \"--focus\",\n\t\t\tdescription:\n\t\t\t\t\"Focus on a single workspace by installing remote copies of its sibling workspaces\",\n\t\t},\n\t\t{\n\t\t\tname: \"--force\",\n\t\t\tdescription:\n\t\t\t\t\"Install and build packages even if they were built before, overwrite lockfile\",\n\t\t},\n\t\t{\n\t\t\tname: \"--frozen-lockfile\",\n\t\t\tdescription: \"Don't generate a lockfile and fail if an update is needed\",\n\t\t},\n\t\t{\n\t\t\tname: \"--global-folder\",\n\t\t\tdescription: \"Specify a custom folder to store global packages\",\n\t\t\targs: {\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--har\",\n\t\t\tdescription: \"Save HAR output of network traffic\",\n\t\t},\n\t\t{\n\t\t\tname: \"--https-proxy\",\n\t\t\tdescription: \"\",\n\t\t\targs: {\n\t\t\t\tname: \"path\",\n\t\t\t\tsuggestions: [{ name: \"https://\" }],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-engines\",\n\t\t\tdescription: \"Ignore engines check\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-optional\",\n\t\t\tdescription: \"Ignore optional dependencies\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-platform\",\n\t\t\tdescription: \"Ignore platform checks\",\n\t\t},\n\t\t{\n\t\t\tname: \"--ignore-scripts\",\n\t\t\tdescription: \"Don't run lifecycle scripts\",\n\t\t},\n\t\t{\n\t\t\tname: \"--json\",\n\t\t\tdescription:\n\t\t\t\t\"Format Yarn log messages as lines of JSON (see jsonlines.org)\",\n\t\t},\n\t\t{\n\t\t\tname: \"--link-duplicates\",\n\t\t\tdescription: \"Create hardlinks to the repeated modules in node_modules\",\n\t\t},\n\t\t{\n\t\t\tname: \"--link-folder\",\n\t\t\tdescription: \"Specify a custom folder to store global links\",\n\t\t\targs: {\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--modules-folder\",\n\t\t\tdescription:\n\t\t\t\t\"Rather than installing modules into the node_modules folder relative to the cwd, output them here\",\n\t\t\targs: {\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--mutex\",\n\t\t\tdescription: \"Use a mutex to ensure only one yarn instance is executing\",\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"type\",\n\t\t\t\t\tsuggestions: [{ name: \":\" }],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"specifier\",\n\t\t\t\t\tsuggestions: [{ name: \":\" }],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"--network-concurrency\",\n\t\t\tdescription: \"Maximum number of concurrent network requests\",\n\t\t\targs: {\n\t\t\t\tname: \"number\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--network-timeout\",\n\t\t\tdescription: \"TCP timeout for network requests\",\n\t\t\targs: {\n\t\t\t\tname: \"milliseconds\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--no-bin-links\",\n\t\t\tdescription: \"Don't generate bin links when setting up packages\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-default-rc\",\n\t\t\tdescription:\n\t\t\t\t\"Prevent Yarn from automatically detecting yarnrc and npmrc files\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-lockfile\",\n\t\t\tdescription: \"Don't read or generate a lockfile\",\n\t\t},\n\t\t{\n\t\t\tname: \"--non-interactive\",\n\t\t\tdescription: \"Do not show interactive prompts\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-node-version-check\",\n\t\t\tdescription:\n\t\t\t\t\"Do not warn when using a potentially unsupported Node version\",\n\t\t},\n\t\t{\n\t\t\tname: \"--no-progress\",\n\t\t\tdescription: \"Disable progress bar\",\n\t\t},\n\t\t{\n\t\t\tname: \"--offline\",\n\t\t\tdescription:\n\t\t\t\t\"Trigger an error if any required dependencies are not available in local cache\",\n\t\t},\n\t\t{\n\t\t\tname: \"--otp\",\n\t\t\tdescription: \"One-time password for two factor authentication\",\n\t\t\targs: {\n\t\t\t\tname: \"otpcode\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--prefer-offline\",\n\t\t\tdescription:\n\t\t\t\t\"Use network only if dependencies are not available in local cache\",\n\t\t},\n\t\t{\n\t\t\tname: \"--preferred-cache-folder\",\n\t\t\tdescription:\n\t\t\t\t\"Specify a custom folder to store the yarn cache if possible\",\n\t\t\targs: {\n\t\t\t\ttemplate: \"folders\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"--prod\", \"--production\"],\n\t\t\tdescription: \"\",\n\t\t\targs: {},\n\t\t},\n\t\t{\n\t\t\tname: \"--proxy\",\n\t\t\tdescription: \"\",\n\t\t\targs: {\n\t\t\t\tname: \"host\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--pure-lockfile\",\n\t\t\tdescription: \"Don't generate a lockfile\",\n\t\t},\n\t\t{\n\t\t\tname: \"--registry\",\n\t\t\tdescription: \"Override configuration registry\",\n\t\t\targs: {\n\t\t\t\tname: \"url\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: [\"-s\", \"--silent\"],\n\t\t\tdescription:\n\t\t\t\t\"Skip Yarn console logs, other types of logs (script output) will be printed\",\n\t\t},\n\t\t{\n\t\t\tname: \"--scripts-prepend-node-path\",\n\t\t\tdescription: \"Prepend the node executable dir to the PATH in scripts\",\n\t\t\targs: {\n\t\t\t\tsuggestions: [{ name: \"true\" }, { name: \"false\" }],\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"--skip-integrity-check\",\n\t\t\tdescription: \"Run install without checking if node_modules is installed\",\n\t\t},\n\t\t{\n\t\t\tname: \"--strict-semver\",\n\t\t\tdescription: \"\",\n\t\t},\n\t\t...commonOptions,\n\t\t{\n\t\t\tname: [\"-v\", \"--version\"],\n\t\t\tdescription: \"Output the version number\",\n\t\t},\n\t\t{\n\t\t\tname: [\"-h\", \"--help\"],\n\t\t\tdescription: \"Output usage information\",\n\t\t},\n\t],\n\tsubcommands: [\n\t\t{\n\t\t\tname: \"add\",\n\t\t\tdescription: \"Installs a package and any packages that it depends on\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tgenerators: npmSearchGenerator,\n\t\t\t\tdebounce: true,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-W\", \"--ignore-workspace-root-check\"],\n\t\t\t\t\tdescription: \"Required to run yarn add inside a workspace root\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-D\", \"--dev\"],\n\t\t\t\t\tdescription: \"Save package to your `devDependencies`\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-P\", \"--peer\"],\n\t\t\t\t\tdescription: \"Save package to your `peerDependencies`\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-O\", \"--optional\"],\n\t\t\t\t\tdescription: \"Save package to your `optionalDependencies`\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-E\", \"--exact\"],\n\t\t\t\t\tdescription: \"Install exact version\",\n\t\t\t\t\tdependsOn: [\"--latest\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-T\", \"--tilde\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install most recent release with the same minor version\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-A\", \"--audit\"],\n\t\t\t\t\tdescription: \"Run vulnerability audit on installed packages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"audit\",\n\t\t\tdescription:\n\t\t\t\t\"Perform a vulnerability audit against the installed packages\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--summary\",\n\t\t\t\t\tdescription: \"Only print the summary\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--groups\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Only audit dependencies from listed groups. Default: devDependencies, dependencies, optionalDependencies\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"group_name\",\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--level\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Only print advisories with severity greater than or equal to one of the following: info|low|moderate|high|critical. Default: info\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"severity\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{ name: \"info\" },\n\t\t\t\t\t\t\t{ name: \"low\" },\n\t\t\t\t\t\t\t{ name: \"moderate\" },\n\t\t\t\t\t\t\t{ name: \"high\" },\n\t\t\t\t\t\t\t{ name: \"critical\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"autoclean\",\n\t\t\tdescription:\n\t\t\t\t\"Cleans and removes unnecessary files from package dependencies\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--init\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Creates the .yarnclean file if it does not exist, and adds the default entries\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-f\", \"--force\"],\n\t\t\t\t\tdescription: \"If a .yarnclean file exists, run the clean process\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"bin\",\n\t\t\tdescription: \"Displays the location of the yarn bin folder\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"cache\",\n\t\t\tdescription: \"Yarn cache list will print out every cached package\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"clean\",\n\t\t\t\t\tdescription: \"Clear global cache\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"dir\",\n\t\t\t\t\tdescription: \"Print yarn’s global cache path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"Print out every cached package\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--pattern\",\n\t\t\t\t\t\t\tdescription: \"Filter cached packages by pattern\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"pattern\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"config\",\n\t\t\tdescription: \"Configure yarn\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"set\",\n\t\t\t\t\tdescription: \"Sets the config key to a certain value\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-g\", \"--global\"],\n\t\t\t\t\t\t\tdescription: \"Set global config\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"get\",\n\t\t\t\t\tdescription: \"Print the value for a given key\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tgenerators: configList,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"delete\",\n\t\t\t\t\tdescription: \"Deletes a given key from the config\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tgenerators: configList,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"Displays the current configuration\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"create\",\n\t\t\tdescription: \"Creates new projects from any create-* starter kits\",\n\t\t\targs: {\n\t\t\t\tname: \"cli\",\n\t\t\t\tgenerators: createCLIsGenerator,\n\t\t\t\tloadSpec: async (token) => ({\n\t\t\t\t\tname: \"create-\" + token,\n\t\t\t\t\ttype: \"global\",\n\t\t\t\t}),\n\t\t\t\tisCommand: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"exec\",\n\t\t\tdescription: \"\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"generate-lock-entry\",\n\t\t\tdescription: \"Generates a lock file entry\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--use-manifest\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Specify which manifest file to use for generating lock entry\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--resolved\",\n\t\t\t\t\tdescription: \"Generate from <*.tgz>#<hash>\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"global\",\n\t\t\tdescription: \"Manage yarn globally\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription: \"Install globally packages on your operating system\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"package\",\n\t\t\t\t\t\tgenerators: npmSearchGenerator,\n\t\t\t\t\t\tdebounce: true,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"bin\",\n\t\t\t\t\tdescription: \"Displays the location of the yarn global bin folder\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"dir\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Displays the location of the global installation folder\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"ls\",\n\t\t\t\t\tdescription: \"List globally installed packages (deprecated)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"List globally installed packages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"remove\",\n\t\t\t\t\tdescription: \"Remove globally installed packages\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"package\",\n\t\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\t\tgenerators: getGlobalPackagesGenerator,\n\t\t\t\t\t\tisVariadic: true,\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t...commonOptions,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-W\", \"--ignore-workspace-root-check\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Required to run yarn remove inside a workspace root\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"upgrade\",\n\t\t\t\t\tdescription: \"Upgrade globally installed packages\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t...commonOptions,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-S\", \"--scope\"],\n\t\t\t\t\t\t\tdescription: \"Upgrade packages under the specified scope\",\n\t\t\t\t\t\t\targs: { name: \"scope\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-L\", \"--latest\"],\n\t\t\t\t\t\t\tdescription: \"List the latest version of packages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-E\", \"--exact\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Install exact version. Only used when --latest is specified\",\n\t\t\t\t\t\t\tdependsOn: [\"--latest\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-P\", \"--pattern\"],\n\t\t\t\t\t\t\tdescription: \"Upgrade packages that match pattern\",\n\t\t\t\t\t\t\targs: { name: \"pattern\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-T\", \"--tilde\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Install most recent release with the same minor version. Only used when --latest is specified\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-C\", \"--caret\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Install most recent release with the same major version. Only used when --latest is specified\",\n\t\t\t\t\t\t\tdependsOn: [\"--latest\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-A\", \"--audit\"],\n\t\t\t\t\t\t\tdescription: \"Run vulnerability audit on installed packages\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Output usage information\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"upgrade-interactive\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Display the outdated packages before performing any upgrade\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--latest\",\n\t\t\t\t\t\t\tdescription: \"Use the version tagged latest in the registry\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: \"--prefix\",\n\t\t\t\t\tdescription: \"Bin prefix to use to install binaries\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"prefix\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--latest\",\n\t\t\t\t\tdescription: \"Bin prefix to use to install binaries\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"help\",\n\t\t\tdescription: \"Output usage information\",\n\t\t},\n\t\t{\n\t\t\tname: \"import\",\n\t\t\tdescription: \"Generates yarn.lock from an npm package-lock.json file\",\n\t\t},\n\t\t{\n\t\t\tname: \"info\",\n\t\t\tdescription: \"Show information about a package\",\n\t\t},\n\t\t{\n\t\t\tname: \"init\",\n\t\t\tdescription: \"Interactively creates or updates a package.json file\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-y\", \"--yes\"],\n\t\t\t\t\tdescription: \"Use default options\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-p\", \"--private\"],\n\t\t\t\t\tdescription: \"Use default options and private true\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-i\", \"--install\"],\n\t\t\t\t\tdescription: \"Install a specific Yarn release\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"version\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"-2\",\n\t\t\t\t\tdescription: \"Generates the project using Yarn 2\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"install\",\n\t\t\tdescription: \"Install all the dependencies listed within package.json\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-A\", \"--audit\"],\n\t\t\t\t\tdescription: \"Run vulnerability audit on installed packages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"licenses\",\n\t\t\tdescription: \"\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"List licenses for installed packages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"generate-disclaimer\",\n\t\t\t\t\tdescription: \"List of licenses from all the packages\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"link\",\n\t\t\tdescription: \"Symlink a package folder during development\",\n\t\t\targs: {\n\t\t\t\tisOptional: true,\n\t\t\t\tname: \"package\",\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"list\",\n\t\t\tdescription: \"Lists all dependencies for the current working directory\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--depth\",\n\t\t\t\t\tdescription: \"Restrict the depth of the dependencies\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--pattern\",\n\t\t\t\t\tdescription: \"Filter the list of dependencies by the pattern\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"login\",\n\t\t\tdescription: \"Store registry username and email\",\n\t\t},\n\t\t{\n\t\t\tname: \"logout\",\n\t\t\tdescription: \"Clear registry username and email\",\n\t\t},\n\t\t{\n\t\t\tname: \"node\",\n\t\t\tdescription: \"\",\n\t\t},\n\t\t{\n\t\t\tname: \"outdated\",\n\t\t\tdescription: \"Checks for outdated package dependencies\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"owner\",\n\t\t\tdescription: \"Manage package owners\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription: \"Lists all of the owners of a package\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"package\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription: \"Adds the user as an owner of the package\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"package\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"remove\",\n\t\t\t\t\tdescription: \"Removes the user as an owner of the package\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"package\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"pack\",\n\t\t\tdescription: \"Creates a compressed gzip archive of package dependencies\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--filename\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Creates a compressed gzip archive of package dependencies and names the file filename\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"policies\",\n\t\t\tdescription: \"Defines project-wide policies for your project\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"set-version\",\n\t\t\t\t\tdescription: \"Will download the latest stable release\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--rc\",\n\t\t\t\t\t\t\tdescription: \"Download the latest rc release\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"publish\",\n\t\t\tdescription: \"Publishes a package to the npm registry\",\n\t\t\targs: { name: \"Tarball or Folder\", template: \"folders\" },\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Output usage information\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--major\",\n\t\t\t\t\tdescription: \"Auto-increment major version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--minor\",\n\t\t\t\t\tdescription: \"Auto-increment minor version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--patch\",\n\t\t\t\t\tdescription: \"Auto-increment patch version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--premajor\",\n\t\t\t\t\tdescription: \"Auto-increment premajor version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--preminor\",\n\t\t\t\t\tdescription: \"Auto-increment preminor version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prepatch\",\n\t\t\t\t\tdescription: \"Auto-increment prepatch version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prerelease\",\n\t\t\t\t\tdescription: \"Auto-increment prerelease version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--preid\",\n\t\t\t\t\tdescription: \"Add a custom identifier to the prerelease\",\n\t\t\t\t\targs: { name: \"preid\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--message\",\n\t\t\t\t\tdescription: \"Message\",\n\t\t\t\t\targs: { name: \"message\" },\n\t\t\t\t},\n\t\t\t\t{ name: \"--no-git-tag-version\", description: \"No git tag version\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-commit-hooks\",\n\t\t\t\t\tdescription: \"Bypass git hooks when committing new version\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--access\", description: \"Access\", args: { name: \"access\" } },\n\t\t\t\t{ name: \"--tag\", description: \"Tag\", args: { name: \"tag\" } },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"remove\",\n\t\t\tdescription: \"Remove installed package\",\n\t\t\targs: {\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: dependenciesGenerator,\n\t\t\t\tisVariadic: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-W\", \"--ignore-workspace-root-check\"],\n\t\t\t\t\tdescription: \"Required to run yarn remove inside a workspace root\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"run\",\n\t\t\tdescription: \"Runs a defined package script\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Output usage information\" },\n\t\t\t],\n\t\t\targs: [\n\t\t\t\t{\n\t\t\t\t\tname: \"script\",\n\t\t\t\t\tdescription: \"Script to run from your package.json\",\n\t\t\t\t\tgenerators: npmScriptsGenerator,\n\t\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\t\tparserDirectives: yarnScriptParserDirectives,\n\t\t\t\t\tisCommand: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"env\",\n\t\t\t\t\tsuggestions: [\"env\"],\n\t\t\t\t\tdescription: \"Lists environment variables available to scripts\",\n\t\t\t\t\tisOptional: true,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"tag\",\n\t\t\tdescription: \"Add, remove, or list tags on a package\",\n\t\t},\n\t\t{\n\t\t\tname: \"team\",\n\t\t\tdescription: \"Maintain team memberships\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"create\",\n\t\t\t\t\tdescription: \"Create a new team\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"<scope:team>\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"destroy\",\n\t\t\t\t\tdescription: \"Destroys an existing team\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"<scope:team>\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"add\",\n\t\t\t\t\tdescription: \"Add a user to an existing team\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"<scope:team>\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"<user>\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"remove\",\n\t\t\t\t\tdescription: \"Remove a user from a team they belong to\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"<scope:team> <user>\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"list\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"If performed on an organization name, will return a list of existing teams under that organization. If performed on a team, it will instead return a list of all users belonging to that particular team\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"<scope>|<scope:team>\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"unlink\",\n\t\t\tdescription: \"Unlink a previously created symlink for a package\",\n\t\t},\n\t\t{\n\t\t\tname: \"unplug\",\n\t\t\tdescription: \"\",\n\t\t},\n\t\t{\n\t\t\tname: \"upgrade\",\n\t\t\tdescription:\n\t\t\t\t\"Upgrades packages to their latest version based on the specified range\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tgenerators: dependenciesGenerator,\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tisVariadic: true,\n\t\t\t\tisOptional: true,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-S\", \"--scope\"],\n\t\t\t\t\tdescription: \"Upgrade packages under the specified scope\",\n\t\t\t\t\targs: { name: \"scope\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-L\", \"--latest\"],\n\t\t\t\t\tdescription: \"List the latest version of packages\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-E\", \"--exact\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install exact version. Only used when --latest is specified\",\n\t\t\t\t\tdependsOn: [\"--latest\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-P\", \"--pattern\"],\n\t\t\t\t\tdescription: \"Upgrade packages that match pattern\",\n\t\t\t\t\targs: { name: \"pattern\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-T\", \"--tilde\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install most recent release with the same minor version. Only used when --latest is specified\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-C\", \"--caret\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Install most recent release with the same major version. Only used when --latest is specified\",\n\t\t\t\t\tdependsOn: [\"--latest\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-A\", \"--audit\"],\n\t\t\t\t\tdescription: \"Run vulnerability audit on installed packages\",\n\t\t\t\t},\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Output usage information\" },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"upgrade-interactive\",\n\t\t\tdescription: \"Upgrades packages in interactive mode\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"--latest\",\n\t\t\t\t\tdescription: \"Use the version tagged latest in the registry\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"version\",\n\t\t\tdescription: \"Update version of your package\",\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{ name: [\"-h\", \"--help\"], description: \"Output usage information\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--new-version\",\n\t\t\t\t\tdescription: \"New version\",\n\t\t\t\t\targs: { name: \"version\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--major\",\n\t\t\t\t\tdescription: \"Auto-increment major version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--minor\",\n\t\t\t\t\tdescription: \"Auto-increment minor version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--patch\",\n\t\t\t\t\tdescription: \"Auto-increment patch version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--premajor\",\n\t\t\t\t\tdescription: \"Auto-increment premajor version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--preminor\",\n\t\t\t\t\tdescription: \"Auto-increment preminor version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prepatch\",\n\t\t\t\t\tdescription: \"Auto-increment prepatch version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--prerelease\",\n\t\t\t\t\tdescription: \"Auto-increment prerelease version number\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--preid\",\n\t\t\t\t\tdescription: \"Add a custom identifier to the prerelease\",\n\t\t\t\t\targs: { name: \"preid\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--message\",\n\t\t\t\t\tdescription: \"Message\",\n\t\t\t\t\targs: { name: \"message\" },\n\t\t\t\t},\n\t\t\t\t{ name: \"--no-git-tag-version\", description: \"No git tag version\" },\n\t\t\t\t{\n\t\t\t\t\tname: \"--no-commit-hooks\",\n\t\t\t\t\tdescription: \"Bypass git hooks when committing new version\",\n\t\t\t\t},\n\t\t\t\t{ name: \"--access\", description: \"Access\", args: { name: \"access\" } },\n\t\t\t\t{ name: \"--tag\", description: \"Tag\", args: { name: \"tag\" } },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"versions\",\n\t\t\tdescription:\n\t\t\t\t\"Displays version information of the currently installed Yarn, Node.js, and its dependencies\",\n\t\t},\n\t\t{\n\t\t\tname: \"why\",\n\t\t\tdescription: \"Show information about why a package is installed\",\n\t\t\targs: {\n\t\t\t\tname: \"package\",\n\t\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\t\tgenerators: allDependenciesGenerator,\n\t\t\t},\n\t\t\toptions: [\n\t\t\t\t...commonOptions,\n\t\t\t\t{\n\t\t\t\t\tname: [\"-h\", \"--help\"],\n\t\t\t\t\tdescription: \"Output usage information\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"--peers\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Print the peer dependencies that match the specified name\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: [\"-R\", \"--recursive\"],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List, for each workspace, what are all the paths that lead to the dependency\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"workspace\",\n\t\t\tdescription: \"Manage workspace\",\n\t\t\tfilterStrategy: \"fuzzy\",\n\t\t\tgenerateSpec: async (_tokens, executeShellCommand) => {\n\t\t\t\tconst version = (\n\t\t\t\t\tawait executeShellCommand({\n\t\t\t\t\t\tcommand: \"yarn\",\n\t\t\t\t\t\t// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays\n\t\t\t\t\t\targs: [\"--version\"],\n\t\t\t\t\t})\n\t\t\t\t).stdout;\n\t\t\t\tconst isYarnV1 = version.startsWith(\"1.\");\n\n\t\t\t\tconst getWorkspacesDefinitionsV1 = async () => {\n\t\t\t\t\tconst { stdout } = await executeShellCommand({\n\t\t\t\t\t\tcommand: \"yarn\",\n\t\t\t\t\t\targs: [\"workspaces\", \"info\"],\n\t\t\t\t\t});\n\n\t\t\t\t\tconst startJson = stdout.indexOf(\"{\");\n\t\t\t\t\tconst endJson = stdout.lastIndexOf(\"}\");\n\n\t\t\t\t\treturn Object.entries(\n\t\t\t\t\t\tJSON.parse(stdout.slice(startJson, endJson + 1)) as Record<\n\t\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\t{ location: string }\n\t\t\t\t\t\t>\n\t\t\t\t\t).map(([name, { location }]) => ({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tlocation,\n\t\t\t\t\t}));\n\t\t\t\t};\n\n\t\t\t\t// For yarn >= 2.0.0\n\t\t\t\tconst getWorkspacesDefinitionsVOther = async () => {\n\t\t\t\t\t// yarn workspaces list --json\n\t\t\t\t\tconst out = (\n\t\t\t\t\t\tawait executeShellCommand({\n\t\t\t\t\t\t\tcommand: \"yarn\",\n\t\t\t\t\t\t\targs: [\"workspaces\", \"list\", \"--json\"],\n\t\t\t\t\t\t})\n\t\t\t\t\t).stdout;\n\t\t\t\t\treturn out.split(\"\\n\").map((line) => JSON.parse(line.trim()));\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tconst workspacesDefinitions = isYarnV1\n\t\t\t\t\t\t? // transform Yarn V1 output to array of workspaces like Yarn V2\n\t\t\t\t\t\t\tawait getWorkspacesDefinitionsV1()\n\t\t\t\t\t\t: // in yarn v>=2.0.0, workspaces definitions are a list of JSON lines\n\t\t\t\t\t\t\tawait getWorkspacesDefinitionsVOther();\n\n\t\t\t\t\tconst subcommands: Fig.Subcommand[] = workspacesDefinitions.map(\n\t\t\t\t\t\t({ name, location }: { name: string; location: string }) => ({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tdescription: \"Workspaces\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tname: \"script\",\n\t\t\t\t\t\t\t\tgenerators: {\n\t\t\t\t\t\t\t\t\tcache: {\n\t\t\t\t\t\t\t\t\t\tstrategy: \"stale-while-revalidate\",\n\t\t\t\t\t\t\t\t\t\tttl: 60_000, // 60s\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tscript: [\"cat\", `${location}/package.json`],\n\t\t\t\t\t\t\t\t\tpostProcess: function (out: string) {\n\t\t\t\t\t\t\t\t\t\tif (out.trim() == \"\") {\n\t\t\t\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tconst packageContent = JSON.parse(out);\n\t\t\t\t\t\t\t\t\t\t\tconst scripts = packageContent[\"scripts\"];\n\t\t\t\t\t\t\t\t\t\t\tif (scripts) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn Object.keys(scripts).map((script) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\tname: script,\n\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: \"workspace\",\n\t\t\t\t\t\tsubcommands,\n\t\t\t\t\t};\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t\treturn { name: \"workspaces\" };\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"workspaces\",\n\t\t\tdescription: \"Show information about your workspaces\",\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: \"subcommand\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tsuggestions: [{ name: \"info\" }, { name: \"run\" }],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"flags\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"set\",\n\t\t\tdescription: \"Set global Yarn options\",\n\t\t\tsubcommands: [\n\t\t\t\t{\n\t\t\t\t\tname: \"resolution\",\n\t\t\t\t\tdescription: \"Enforce a package resolution\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"descriptor\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"A descriptor for the package, in the form of 'lodash@npm:^1.2.3'\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"resolution\",\n\t\t\t\t\t\t\tdescription: \"The version of the package to resolve\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: [\"-s\", \"--save\"],\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Persist the resolution inside the top-level manifest\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"version\",\n\t\t\t\t\tdescription: \"Lock the Yarn version used by the project\",\n\t\t\t\t\targs: {\n\t\t\t\t\t\tname: \"version\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Use the specified version, which can also be a Yarn 2 build (e.g 2.0.0-rc.30) or a Yarn 1 build (e.g 1.22.1)\",\n\t\t\t\t\t\ttemplate: \"filepaths\",\n\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"from-sources\",\n\t\t\t\t\t\t\t\tinsertValue: \"from sources\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"latest\",\n\t\t\t\t\t\t\t\"canary\",\n\t\t\t\t\t\t\t\"classic\",\n\t\t\t\t\t\t\t\"self\",\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"--only-if-needed\",\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Only lock the Yarn version if it isn't already locked\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n};\n\nexport default completionSpec;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/constants.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const upstreamSpecs = [\n\t'ls',\n\t'echo',\n\t'mkdir',\n\t'rm',\n\t'rmdir',\n\t'touch',\n\t'pwd',\n\t'brew',\n\t'cp',\n\t'mv',\n\t'cat',\n\t'less',\n\t'more',\n\t'head',\n\t'tail',\n\t'nano',\n\t'vim',\n\t'chmod',\n\t'chown',\n\t'uname',\n\t'top',\n\t'df',\n\t'du',\n\t'ps',\n\t'kill',\n\t'killall',\n\t'curl',\n\t'wget',\n\t'ssh',\n\t'scp',\n\t'apt',\n\t'grep',\n\t'find',\n\n\t'git',\n\t'npm',\n\t'yarn',\n\t'python',\n\t'python3',\n\t'pnpm',\n\t'node',\n\t'nvm',\n];\n\n\nexport const enum SettingsIds {\n\tSuggestPrefix = 'terminal.integrated.suggest',\n\tCachedWindowsExecutableExtensions = 'terminal.integrated.suggest.windowsExecutableExtensions',\n\tCachedWindowsExecutableExtensionsSuffixOnly = 'windowsExecutableExtensions',\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/env/pathExecutableCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as fs from 'fs/promises';\nimport * as vscode from 'vscode';\nimport { isExecutable } from '../helpers/executable';\nimport { osIsWindows } from '../helpers/os';\nimport type { ICompletionResource } from '../types';\nimport { getFriendlyResourcePath } from '../helpers/uri';\nimport { SettingsIds } from '../constants';\nimport * as filesystem from 'fs';\nimport * as path from 'path';\n\nconst isWindows = osIsWindows();\n\nexport class PathExecutableCache implements vscode.Disposable {\n\tprivate _disposables: vscode.Disposable[] = [];\n\n\tprivate _cachedPathValue: string | undefined;\n\tprivate _cachedWindowsExeExtensions: { [key: string]: boolean | undefined } | undefined;\n\tprivate _cachedExes: { completionResources: Set<ICompletionResource> | undefined; labels: Set<string> | undefined } | undefined;\n\n\tconstructor() {\n\t\tif (isWindows) {\n\t\t\tthis._cachedWindowsExeExtensions = vscode.workspace.getConfiguration(SettingsIds.SuggestPrefix).get(SettingsIds.CachedWindowsExecutableExtensionsSuffixOnly);\n\t\t\tthis._disposables.push(vscode.workspace.onDidChangeConfiguration(e => {\n\t\t\t\tif (e.affectsConfiguration(SettingsIds.CachedWindowsExecutableExtensions)) {\n\t\t\t\t\tthis._cachedWindowsExeExtensions = vscode.workspace.getConfiguration(SettingsIds.SuggestPrefix).get(SettingsIds.CachedWindowsExecutableExtensionsSuffixOnly);\n\t\t\t\t\tthis._cachedExes = undefined;\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n\n\tdispose() {\n\t\tfor (const d of this._disposables) {\n\t\t\td.dispose();\n\t\t}\n\t}\n\n\trefresh(): void {\n\t\tthis._cachedExes = undefined;\n\t\tthis._cachedPathValue = undefined;\n\t}\n\n\tasync getExecutablesInPath(env: ITerminalEnvironment = process.env): Promise<{ completionResources: Set<ICompletionResource> | undefined; labels: Set<string> | undefined } | undefined> {\n\t\t// Create cache key\n\t\tlet pathValue: string | undefined;\n\t\tif (isWindows) {\n\t\t\tconst caseSensitivePathKey = Object.keys(env).find(key => key.toLowerCase() === 'path');\n\t\t\tif (caseSensitivePathKey) {\n\t\t\t\tpathValue = env[caseSensitivePathKey];\n\t\t\t}\n\t\t} else {\n\t\t\tpathValue = env.PATH;\n\t\t}\n\t\tif (pathValue === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check cache\n\t\tif (this._cachedExes && this._cachedPathValue === pathValue) {\n\t\t\treturn this._cachedExes;\n\t\t}\n\n\t\t// Extract executables from PATH\n\t\tconst paths = pathValue.split(isWindows ? ';' : ':');\n\t\tconst pathSeparator = isWindows ? '\\\\' : '/';\n\t\tconst promises: Promise<Set<ICompletionResource> | undefined>[] = [];\n\t\tconst labels: Set<string> = new Set<string>();\n\t\tfor (const path of paths) {\n\t\t\tpromises.push(this._getFilesInPath(path, pathSeparator, labels));\n\t\t}\n\n\t\t// Merge all results\n\t\tconst executables = new Set<ICompletionResource>();\n\t\tconst resultSets = await Promise.all(promises);\n\t\tfor (const resultSet of resultSets) {\n\t\t\tif (resultSet) {\n\t\t\t\tfor (const executable of resultSet) {\n\t\t\t\t\texecutables.add(executable);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return\n\t\tthis._cachedPathValue = pathValue;\n\t\tthis._cachedExes = { completionResources: executables, labels };\n\t\treturn this._cachedExes;\n\t}\n\n\tprivate async _getFilesInPath(path: string, pathSeparator: string, labels: Set<string>): Promise<Set<ICompletionResource> | undefined> {\n\t\ttry {\n\t\t\tconst dirExists = await fs.stat(path).then(stat => stat.isDirectory()).catch(() => false);\n\t\t\tif (!dirExists) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst result = new Set<ICompletionResource>();\n\t\t\tconst fileResource = vscode.Uri.file(path);\n\t\t\tconst files = await vscode.workspace.fs.readDirectory(fileResource);\n\t\t\tfor (const [file, fileType] of files) {\n\t\t\t\tconst formattedPath = getFriendlyResourcePath(vscode.Uri.joinPath(fileResource, file), pathSeparator);\n\t\t\t\tif (!labels.has(file) && fileType !== vscode.FileType.Unknown && fileType !== vscode.FileType.Directory && await isExecutable(formattedPath, this._cachedWindowsExeExtensions)) {\n\t\t\t\t\tresult.add({ label: file, documentation: formattedPath, kind: vscode.TerminalCompletionItemKind.Method });\n\t\t\t\t\tlabels.add(file);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\t// Ignore errors for directories that can't be read\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nexport async function watchPathDirectories(context: vscode.ExtensionContext, env: ITerminalEnvironment, pathExecutableCache: PathExecutableCache | undefined): Promise<void> {\n\tconst pathDirectories = new Set<string>();\n\n\tconst envPath = env.PATH;\n\tif (envPath) {\n\t\tenvPath.split(path.delimiter).forEach(p => pathDirectories.add(p));\n\t}\n\n\tconst activeWatchers = new Set<string>();\n\n\t// Watch each directory\n\tfor (const dir of pathDirectories) {\n\t\ttry {\n\t\t\tif (activeWatchers.has(dir)) {\n\t\t\t\t// Skip if already watching or directory doesn't exist\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst stat = await fs.stat(dir);\n\t\t\tif (!stat.isDirectory()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst watcher = filesystem.watch(dir, { persistent: false }, () => {\n\t\t\t\tif (pathExecutableCache) {\n\t\t\t\t\t// Refresh cache when directory contents change\n\t\t\t\t\tpathExecutableCache.refresh();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tactiveWatchers.add(dir);\n\n\t\t\tcontext.subscriptions.push(new vscode.Disposable(() => {\n\t\t\t\ttry {\n\t\t\t\t\twatcher.close();\n\t\t\t\t\tactiveWatchers.delete(dir);\n\t\t\t\t} catch { } { }\n\t\t\t}));\n\t\t} catch { }\n\t}\n}\n\nexport type ITerminalEnvironment = { [key: string]: string | undefined };\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/README.md",
    "content": "This folder contains the `autocomplete-parser` project from https://github.com/aws/amazon-q-developer-cli/blob/main/packages/autocomplete-parser and its dependencies which were located in siblings folders and https://github.com/withfig/autocomplete-tools, both licenses under MIT. The fork was necessary for a few reasons:\n\n- They ship as ESM modules which we're not ready to consume just yet.\n- We want the more complete `autocomplete-parser` that contains the important `parseArguments` function that does the bulk of the smarts in parsing the fig commands.\n- We needed to strip out all the implementation-specific parts from their `api-bindings` project that deals with settings, IPC, fuzzy sorting, etc.\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/api-bindings/types.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface EnvironmentVariable {\n\tkey: string;\n\tvalue?: string;\n}\n\nexport interface ShellContext {\n\t/** The current PID of the shell process */\n\tpid?: number;\n\t/** /dev/ttys## of terminal session */\n\tttys?: string;\n\t/** the name of the process */\n\tprocessName?: string;\n\t/** the directory where the user ran the command */\n\tcurrentWorkingDirectory?: string;\n\t/** the value of $TERM_SESSION_ID */\n\tsessionId?: string;\n\t/** the integration version of figterm */\n\tintegrationVersion?: number;\n\t/** the parent terminal of figterm */\n\tterminal?: string;\n\t/** the hostname of the computer figterm is running on */\n\thostname?: string;\n\t/** path to the shell being used in the terminal */\n\tshellPath?: string;\n\t/** the environment variables of the shell, note that only exported variables are included */\n\tenvironmentVariables?: EnvironmentVariable[];\n\t/** the raw output of alias */\n\talias?: string;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete/fig/hooks.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as Types from '../../api-bindings/types';\nimport type { AliasMap } from '../../shell-parser';\n\nexport type FigState = {\n\tbuffer: string;\n\tcursorLocation: number;\n\tcwd: string | null;\n\tprocessUserIsIn: string | null;\n\tsshContextString: string | null;\n\taliases: AliasMap;\n\tenvironmentVariables: Record<string, string>;\n\tshellContext?: Types.ShellContext | undefined;\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete/generators/cache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nclass CacheEntry<T> {\n\tprivate lastFetch = 0;\n\n\tprivate promise: Promise<T> | undefined = undefined;\n\n\tvalue: T | undefined = undefined;\n\n\tprivate isInitialized = false;\n\n\tprivate get isFetching() {\n\t\treturn !!this.promise;\n\t}\n\n\tprivate async fetchSync(run: () => Promise<T>) {\n\t\tthis.lastFetch = Date.now();\n\t\tthis.promise = run();\n\t\tthis.value = await this.promise;\n\t\tif (!this.isInitialized) {\n\t\t\tthis.isInitialized = true;\n\t\t}\n\t\tthis.promise = undefined;\n\t\treturn this.value;\n\t}\n\n\tprivate async fetchAsync(run: () => Promise<T>): Promise<T | undefined> {\n\t\tif (this.isFetching) {\n\t\t\tawait this.promise;\n\t\t\treturn this.value;\n\t\t}\n\t\treturn this.fetchSync(run);\n\t}\n\n\tprivate async maxAgeCache(run: () => Promise<T>, maxAge: number) {\n\t\tif (Date.now() > maxAge + this.lastFetch) {\n\t\t\treturn this.fetchAsync(run);\n\t\t}\n\t\treturn this.value;\n\t}\n\n\tprivate async swrCache(run: () => Promise<T>, maxAge = 0) {\n\t\tif (!this.isFetching && Date.now() > this.lastFetch + maxAge) {\n\t\t\treturn this.fetchAsync(run);\n\t\t}\n\t\treturn this.value as T;\n\t}\n\n\tasync entry(run: () => Promise<T>, cache: Fig.Cache): Promise<T | undefined> {\n\t\tif (!this.isInitialized) {\n\t\t\treturn this.fetchAsync(run);\n\t\t}\n\t\tswitch (cache.strategy || 'stale-while-revalidate') {\n\t\t\tcase 'max-age':\n\t\t\t\treturn this.maxAgeCache(run, cache.ttl!);\n\t\t\tcase 'stale-while-revalidate':\n\t\t\t\t// cache.ttl must be defined when no strategy is specified\n\t\t\t\treturn this.swrCache(run, cache.ttl!);\n\t\t\tdefault:\n\t\t\t\treturn this.fetchAsync(run);\n\t\t}\n\t}\n}\n\nexport class Cache {\n\tprivate cache = new Map<string, CacheEntry<unknown>>();\n\n\tasync entry<T>(\n\t\tkey: string,\n\t\trun: () => Promise<T>,\n\t\tcache: Fig.Cache,\n\t): Promise<T> {\n\t\tif (!this.cache.has(key)) {\n\t\t\tthis.cache.set(key, new CacheEntry());\n\t\t}\n\t\treturn this.cache.get(key)!.entry(run, cache) as Promise<T>;\n\t}\n\n\tcurrentValue<T>(key: string, _cache: Fig.Cache): T | undefined {\n\t\tif (!this.cache.has(key)) {\n\t\t\tthis.cache.set(key, new CacheEntry());\n\t\t}\n\t\treturn this.cache.get(key)!.value as T | undefined;\n\t}\n\n\tclear() {\n\t\tthis.cache.clear();\n\t}\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete/generators/customSuggestionsGenerator.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nimport { IFigExecuteExternals } from '../../execute';\nimport {\n\trunCachedGenerator,\n\tGeneratorContext,\n\thaveContextForGenerator,\n} from './helpers';\n\nexport async function getCustomSuggestions(\n\tgenerator: Fig.Generator,\n\tcontext: GeneratorContext,\n\texecutableExternals: IFigExecuteExternals\n): Promise<Fig.Suggestion[] | undefined> {\n\tif (!generator.custom) {\n\t\treturn [];\n\t}\n\n\tif (!haveContextForGenerator(context)) {\n\t\tconsole.info('Don\\'t have context for custom generator');\n\t\treturn [];\n\t}\n\n\tconst {\n\t\ttokenArray,\n\t\tcurrentWorkingDirectory,\n\t\tcurrentProcess,\n\t\tisDangerous,\n\t\tsearchTerm,\n\t\tenvironmentVariables,\n\t} = context;\n\n\ttry {\n\t\tconst result = await runCachedGenerator(\n\t\t\tgenerator,\n\t\t\tcontext,\n\t\t\t() =>\n\t\t\t\tgenerator.custom!(tokenArray, executableExternals.executeCommand, {\n\t\t\t\t\tcurrentWorkingDirectory,\n\t\t\t\t\tcurrentProcess,\n\t\t\t\t\tsshPrefix: '',\n\t\t\t\t\tsearchTerm,\n\t\t\t\t\tenvironmentVariables,\n\t\t\t\t\tisDangerous,\n\t\t\t\t}),\n\t\t\tgenerator.cache?.cacheKey,\n\t\t);\n\n\t\treturn result?.map((name) => ({ ...name, type: name?.type || 'arg' }));\n\t} catch (e) {\n\t\tconsole.error('we had an error with the custom function generator', e);\n\n\t\treturn [];\n\t}\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete/generators/helpers.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Cache } from './cache';\nimport type { Annotation } from '../../autocomplete-parser/parseArguments';\nimport type { Suggestion } from '../../shared/internal';\nimport { getCWDForFilesAndFolders } from '../../shared/utils';\n\nexport type GeneratorContext = Fig.ShellContext & {\n\tannotations: Annotation[];\n\ttokenArray: string[];\n\tisDangerous?: boolean;\n\tsearchTerm: string;\n};\n\nexport type GeneratorState = {\n\tgenerator: Fig.Generator;\n\tcontext: GeneratorContext;\n\tloading: boolean;\n\tresult: Suggestion[];\n\trequest?: Promise<Fig.Suggestion[] | undefined>;\n};\n\nexport const haveContextForGenerator = (context: GeneratorContext): boolean =>\n\tBoolean(context.currentWorkingDirectory);\n\nexport const generatorCache = new Cache();\n\nexport async function runCachedGenerator<T>(\n\tgenerator: Fig.Generator,\n\tcontext: GeneratorContext,\n\tinitialRun: () => Promise<T>,\n\tcacheKey?: string /* This is generator.script or generator.script(...) */,\n): Promise<T> {\n\tconst cacheDefault = false; // getSetting<boolean>(SETTINGS.CACHE_ALL_GENERATORS) ?? false;\n\tlet { cache } = generator;\n\tif (!cache && cacheDefault) {\n\t\tcache = { strategy: 'stale-while-revalidate', ttl: 1_000 };\n\t}\n\tif (!cache) {\n\t\treturn initialRun();\n\t}\n\tconst { tokenArray, currentWorkingDirectory, searchTerm } = context;\n\n\tconst directory = generator.template\n\t\t? getCWDForFilesAndFolders(currentWorkingDirectory, searchTerm)\n\t\t: currentWorkingDirectory;\n\n\t// we cache generator results by script, if no script was provided we use the tokens instead\n\tconst key = [\n\t\tcache.cacheByDirectory ? directory : undefined,\n\t\tcacheKey || tokenArray.join(' '),\n\t].toString();\n\n\treturn generatorCache.entry(key, initialRun, cache);\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete/generators/scriptSuggestionsGenerator.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nimport { IFigExecuteExternals } from '../../execute';\nimport {\n\tGeneratorContext,\n\thaveContextForGenerator,\n\trunCachedGenerator,\n} from './helpers';\n\nexport async function getScriptSuggestions(\n\tgenerator: Fig.Generator,\n\tcontext: GeneratorContext,\n\tdefaultTimeout: number = 5000,\n\texecuteExternals: IFigExecuteExternals\n): Promise<Fig.Suggestion[] | undefined> {\n\tconst { script, postProcess, splitOn } = generator;\n\tif (!script) {\n\t\treturn [];\n\t}\n\n\tif (!haveContextForGenerator(context)) {\n\t\tconsole.info('Don\\'t have context for custom generator');\n\t\treturn [];\n\t}\n\n\ttry {\n\t\tconst { isDangerous, tokenArray, currentWorkingDirectory, environmentVariables } = context;\n\t\t// A script can either be a string or a function that returns a string.\n\t\t// If the script is a function, run it, and get the output string.\n\t\tconst commandToRun =\n\t\t\tscript && typeof script === 'function'\n\t\t\t\t? script(tokenArray)\n\t\t\t\t: script;\n\n\t\tif (!commandToRun) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet executeCommandInput: Fig.ExecuteCommandInput;\n\t\tif (Array.isArray(commandToRun)) {\n\t\t\texecuteCommandInput = {\n\t\t\t\tcommand: commandToRun[0],\n\t\t\t\targs: commandToRun.slice(1),\n\t\t\t\tcwd: currentWorkingDirectory,\n\t\t\t\tenv: environmentVariables\n\t\t\t};\n\t\t} else {\n\t\t\texecuteCommandInput = {\n\t\t\t\tcwd: currentWorkingDirectory,\n\t\t\t\t...commandToRun,\n\t\t\t};\n\t\t}\n\n\t\t// Use the longest duration timeout\n\t\tconst timeout = Math.max(\n\t\t\tdefaultTimeout,\n\t\t\tgenerator.scriptTimeout ?? 0,\n\t\t\texecuteCommandInput.timeout ?? 0,\n\t\t);\n\n\t\tconst { stdout } = await runCachedGenerator(\n\t\t\tgenerator,\n\t\t\tcontext,\n\t\t\t() => {\n\t\t\t\treturn executeExternals.executeCommandTimeout(executeCommandInput, timeout);\n\t\t\t},\n\t\t\tgenerator.cache?.cacheKey ?? JSON.stringify(executeCommandInput),\n\t\t);\n\t\t//\n\t\tlet result: Array<Fig.Suggestion | string | null> | undefined = [];\n\n\t\t// If we have a splitOn function\n\t\tif (splitOn) {\n\t\t\tresult = stdout.trim() === '' ? [] : stdout.trim().split(splitOn);\n\t\t} else if (postProcess) {\n\t\t\t// If we have a post process function\n\t\t\t// The function takes one input and outputs an array\n\t\t\t// runPipingConsoleMethods(() => {\n\t\t\tresult = postProcess(stdout, tokenArray);\n\t\t\t// });\n\t\t\tresult = result?.filter(\n\t\t\t\t(item) => item && (typeof item === 'string' || !!item.name),\n\t\t\t);\n\t\t}\n\n\t\t// Generator can either output an array of strings or an array of suggestion objects.\n\t\treturn result?.map((item) =>\n\t\t\ttypeof item === 'string'\n\t\t\t\t? { type: 'arg', name: item, insertValue: item, isDangerous }\n\t\t\t\t: { ...item, type: item?.type || 'arg' },\n\t\t);\n\t} catch (e) {\n\t\tconsole.error('we had an error with the script generator', e);\n\t\treturn [];\n\t}\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete/state/generators.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { getScriptSuggestions } from '../generators/scriptSuggestionsGenerator';\n// import { getCustomSuggestions } from '../generators/customSuggestionsGenerator';\nimport { AutocompleteState } from './types';\nimport { GeneratorState, GeneratorContext } from '../generators/helpers';\nimport { sleep } from '../../shared/utils';\nimport type { ArgumentParserResult } from '../../autocomplete-parser/parseArguments';\nimport { getCustomSuggestions } from '../generators/customSuggestionsGenerator';\nimport { IFigExecuteExternals } from '../../execute';\n\nexport const shellContextSelector = ({\n\tfigState,\n}: AutocompleteState): Fig.ShellContext => ({\n\tcurrentWorkingDirectory: figState.cwd || '',\n\tcurrentProcess: figState.processUserIsIn || '',\n\tenvironmentVariables: figState.environmentVariables,\n\tsshPrefix: '',\n});\n\nconst getGeneratorContext = (state: AutocompleteState): GeneratorContext => {\n\tconst { command, parserResult } = state;\n\tconst { currentArg, searchTerm, annotations, commandIndex } = parserResult;\n\tconst tokens = command?.tokens ?? [];\n\treturn {\n\t\t...shellContextSelector(state),\n\t\tannotations: annotations.slice(commandIndex),\n\t\ttokenArray: tokens.slice(commandIndex).map((token: any) => token.text),\n\t\tisDangerous: Boolean(currentArg?.isDangerous),\n\t\tsearchTerm,\n\t};\n};\n\nexport const createGeneratorState = (\n\t// setNamed: NamedSetState<AutocompleteState>,\n\tstate: AutocompleteState,\n\texecuteExternals?: IFigExecuteExternals\n): {\n\ttriggerGenerators: (result: ArgumentParserResult, executeExternals: IFigExecuteExternals) => GeneratorState[];\n} => {\n\t// function updateGenerator(\n\t// \tgeneratorState: GeneratorState,\n\t// \tgetUpdate: () => Partial<GeneratorState>,\n\t// ) {\n\t// \treturn setNamed('updateGenerator', (state) => {\n\t// \t\tlet { generatorStates } = state;\n\t// \t\t// Double check to make sure we don't update if things are stale\n\t// \t\tconst index = generatorStates.findIndex((s) => s === generatorState);\n\t// \t\tif (index === -1) {\n\t// \t\t\tconsole.info('stale update', { generatorStates, generatorState });\n\t// \t\t\treturn { generatorStates };\n\t// \t\t}\n\n\t// \t\tgeneratorStates = [...generatorStates];\n\t// \t\t// If we are still loading after update (e.g. debounced) then make sure\n\t// \t\t// we re-call this when we get a result.\n\t// \t\tgeneratorStates[index] = updateGeneratorOnResult({\n\t// \t\t\t...generatorState,\n\t// \t\t\t...getUpdate(),\n\t// \t\t});\n\t// \t\tconsole.info('updating generator', {\n\t// \t\t\tgeneratorState: generatorStates[index],\n\t// \t\t});\n\t// \t\treturn { generatorStates };\n\t// \t});\n\t// }\n\n\t// function updateGeneratorOnResult(generatorState: GeneratorState) {\n\t// \tconst { generator, loading, request } = generatorState;\n\t// \tif (loading && request) {\n\t// \t\trequest.then((result) =>\n\t// \t\t\tupdateGenerator(generatorState, () => ({\n\t// \t\t\t\tloading: false,\n\t// \t\t\t\tresult: result?.map((suggestion) => ({ ...suggestion, generator })),\n\t// \t\t\t})),\n\t// \t\t);\n\t// \t}\n\t// \treturn generatorState;\n\t// }\n\tconst triggerGenerator = (currentState: GeneratorState, executeExternals: IFigExecuteExternals) => {\n\t\tconst { generator, context } = currentState;\n\t\tlet request: Promise<Fig.Suggestion[] | undefined>;\n\n\t\tif (generator.template) {\n\t\t\t// TODO: Implement template generators\n\t\t\t// request = getTemplateSuggestions(generator, context);\n\t\t\trequest = Promise.resolve(undefined);\n\t\t}\n\t\telse if (generator.script) {\n\t\t\trequest = getScriptSuggestions(\n\t\t\t\tgenerator,\n\t\t\t\tcontext,\n\t\t\t\tundefined, // getSetting<number>(SETTINGS.SCRIPT_TIMEOUT, 5000),\n\t\t\t\texecuteExternals\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\trequest = getCustomSuggestions(generator, context, executeExternals);\n\t\t\t// filepaths/folders templates are now a sugar for two custom generators, we need to filter\n\t\t\t// the suggestion created by those two custom generators\n\t\t\t// if (generator.filterTemplateSuggestions) {\n\t\t\t// \trequest = (async () => {\n\t\t\t// \t\t// TODO: use symbols to detect if the the generator fn is filepaths/folders\n\t\t\t// \t\t// If the first custom suggestion has template meta properties then all the custom\n\t\t\t// \t\t// suggestions are too\n\t\t\t// \t\tconst suggestions = await request;\n\t\t\t// \t\tif (suggestions[0] && isTemplateSuggestion(suggestions[0])) {\n\t\t\t// \t\t\treturn generator.filterTemplateSuggestions!(\n\t\t\t// \t\t\t\tsuggestions as Fig.TemplateSuggestion[],\n\t\t\t// \t\t\t);\n\t\t\t// \t\t}\n\t\t\t// \t\treturn suggestions;\n\t\t\t// \t})();\n\t\t\t// }\n\t\t}\n\t\treturn { ...currentState, loading: true, request };\n\t};\n\n\tconst triggerGenerators = (\n\t\tparserResult: ArgumentParserResult,\n\t\texecuteExternals: IFigExecuteExternals,\n\t): GeneratorState[] => {\n\t\tconst {\n\t\t\tparserResult: { currentArg: previousArg, searchTerm: previousSearchTerm },\n\t\t} = state;\n\t\tconst { currentArg, searchTerm } = parserResult;\n\t\tconst generators = currentArg?.generators ?? [];\n\t\tconst context = getGeneratorContext({ ...state, parserResult });\n\n\t\treturn generators.map((generator: Fig.Generator, index: number) => {\n\t\t\tconst { trigger } = generator;\n\t\t\tconst previousGeneratorState = state.generatorStates[index];\n\t\t\tlet shouldTrigger = false;\n\t\t\tif (!previousGeneratorState || currentArg !== previousArg) {\n\t\t\t\tshouldTrigger = true;\n\t\t\t} else if (trigger === undefined) {\n\t\t\t\t// If trigger is undefined we never trigger, unless debounced in\n\t\t\t\t// which case we always trigger.\n\t\t\t\t// TODO: move debounce to generator.\n\t\t\t\tshouldTrigger = Boolean(currentArg?.debounce);\n\t\t\t} else {\n\t\t\t\tlet triggerFn: (a: string, b: string) => boolean;\n\t\t\t\tif (typeof trigger === 'string') {\n\t\t\t\t\ttriggerFn = (a, b) =>\n\t\t\t\t\t\ta.lastIndexOf(trigger) !== b.lastIndexOf(trigger);\n\t\t\t\t} else if (typeof trigger === 'function') {\n\t\t\t\t\ttriggerFn = trigger;\n\t\t\t\t} else {\n\t\t\t\t\tswitch (trigger.on) {\n\t\t\t\t\t\tcase 'threshold': {\n\t\t\t\t\t\t\ttriggerFn = (a, b) =>\n\t\t\t\t\t\t\t\ta.length > trigger.length && !(b.length > trigger.length);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 'match': {\n\t\t\t\t\t\t\tconst strings =\n\t\t\t\t\t\t\t\ttypeof trigger.string === 'string'\n\t\t\t\t\t\t\t\t\t? [trigger.string]\n\t\t\t\t\t\t\t\t\t: trigger.string;\n\t\t\t\t\t\t\ttriggerFn = (a, b) =>\n\t\t\t\t\t\t\t\tstrings.findIndex((x) => x === a) !==\n\t\t\t\t\t\t\t\tstrings.findIndex((x) => x === b);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 'change':\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\ttriggerFn = (a, b) => a !== b;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tshouldTrigger = triggerFn(searchTerm, previousSearchTerm);\n\t\t\t\t} catch (_err) {\n\t\t\t\t\tshouldTrigger = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!shouldTrigger) {\n\t\t\t\treturn previousGeneratorState;\n\t\t\t}\n\n\t\t\tconst result = previousGeneratorState?.result || [];\n\t\t\tconst generatorState = { generator, context, result, loading: true };\n\n\t\t\tconst getTriggeredState = () => triggerGenerator(generatorState, executeExternals);\n\t\t\tif (currentArg?.debounce) {\n\t\t\t\tsleep(\n\t\t\t\t\ttypeof currentArg.debounce === 'number' && currentArg.debounce > 0\n\t\t\t\t\t\t? currentArg.debounce\n\t\t\t\t\t\t: 200,\n\t\t\t\t); //.then(() => updateGenerator(generatorState, getTriggeredState));\n\t\t\t\treturn generatorState;\n\t\t\t}\n\t\t\treturn getTriggeredState();\n\t\t});\n\t};\n\treturn { triggerGenerators };\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete/state/types.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GeneratorState } from '../generators/helpers';\nimport type { ArgumentParserResult } from '../../autocomplete-parser/parseArguments';\nimport type { Suggestion } from '../../shared/internal';\nimport type { Command } from '../../shell-parser';\nimport type { FigState } from '../fig/hooks';\n\nexport enum Visibility {\n\tVISIBLE = 'visible',\n\t// Can happen in several cases:\n\t// 1. We've just inserted text\n\t// 2. User has backspaced to new token\n\t// 3. A large buffer change (scrolling through history, or pasting text)\n\t// 4. An error occurs\n\tHIDDEN_UNTIL_KEYPRESS = 'hidden_until_keypress',\n\t// Hide until explicitly shown (or we enter a new line), can happen when:\n\t// 1. The escape key is pressed\n\t// 2. A keybinding to hide autocomplete is pressed\n\t// 3. User enters a new token with onlyShowOnTab set\n\tHIDDEN_UNTIL_SHOWN = 'hidden_until_shown',\n\t// User inserted full suggestion. Wait until text is rendered, then hide\n\t// until keypress (2 state updates).\n\tHIDDEN_BY_INSERTION = 'insertion',\n}\n\n// type AutocompleteActions = {\n// \tsetParserResult: (\n// \t\tparserResult: ArgumentParserResult,\n// \t\thasBackspacedToNewToken: boolean,\n// \t\tlargeBufferChange: boolean,\n// \t) => void;\n// \terror: (error: string) => void;\n// \tsetVisibleState: (visibleState: Visibility) => void;\n// \tscroll: (index: number, visibleState: Visibility) => void;\n// \t// setFigState: React.Dispatch<React.SetStateAction<FigState>>;\n// \tupdateVisibilityPostInsert: (\n// \t\tsuggestion: Suggestion,\n// \t\tisFullCompletion: boolean,\n// \t) => void;\n// \tinsertTextForItem: (item: Suggestion, execute?: boolean) => void;\n// \tinsertCommonPrefix: () => void;\n// \t// setHistoryModeEnabled: React.Dispatch<React.SetStateAction<boolean>>;\n// \t// setUserFuzzySearchEnabled: React.Dispatch<React.SetStateAction<boolean>>;\n// \t// setSettings: React.Dispatch<React.SetStateAction<SettingsMap>>;\n// };\n\nexport type AutocompleteState = {\n\tfigState: FigState;\n\tparserResult: ArgumentParserResult;\n\tgeneratorStates: GeneratorState[];\n\tcommand: Command | null;\n\n\tvisibleState: Visibility;\n\tlastInsertedSuggestion: Suggestion | null;\n\tjustInserted: boolean;\n\n\tsuggestions: Suggestion[];\n\tselectedIndex: number;\n\thasChangedIndex: boolean;\n\n\thistoryModeEnabled: boolean;\n\t/**\n\t * Store the user preference about fuzzy search\n\t */\n\tuserFuzzySearchEnabled: boolean;\n\t/**\n\t * Sometimes we override fuzzy search user\n\t * preference so we also store the \"real\" current state of fuzzy search\n\t */\n\tfuzzySearchEnabled: boolean;\n\t// settings: SettingsMap;\n}; // & AutocompleteActions;\n\nexport declare type NamedSetState<T> = {\n\t(\n\t\tname: string,\n\t\tpartial: Partial<T> | ((s: T) => Partial<T>),\n\t\treplace?: boolean,\n\t): void;\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete-parser/caches.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Subcommand } from '../shared/internal';\n\nconst allCaches: Array<Map<string, unknown>> = [];\n\nexport const createCache = <T>() => {\n\tconst cache = new Map<string, T>();\n\tallCaches.push(cache);\n\treturn cache;\n};\n\nexport const resetCaches = () => {\n\tallCaches.forEach((cache) => {\n\t\tcache.clear();\n\t});\n};\n\n// window.resetCaches = resetCaches;\n\nexport const specCache = createCache<Subcommand>();\nexport const generateSpecCache = createCache<Subcommand>();\n\n// window.listCache = () => {\n//   console.log(specCache);\n//   console.log(generateSpecCache);\n// };\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete-parser/errors.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createErrorInstance } from '../shared/errors';\n\n// LoadSpecErrors\nexport const MissingSpecError = createErrorInstance('MissingSpecError');\nexport const WrongDiffVersionedSpecError = createErrorInstance(\n\t'WrongDiffVersionedSpecError',\n);\nexport const DisabledSpecError = createErrorInstance('DisabledSpecError');\nexport const LoadLocalSpecError = createErrorInstance('LoadLocalSpecError');\nexport const SpecCDNError = createErrorInstance('SpecCDNError');\n\n// ParsingErrors\nexport const ParsingHistoryError = createErrorInstance('ParsingHistoryError');\n\nexport const ParseArgumentsError = createErrorInstance('ParseArgumentsError');\nexport const UpdateStateError = createErrorInstance('UpdateStateError');\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/autocomplete-parser/parseArguments.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// import { filepaths, folders } from '@fig/autocomplete-generators';\nimport * as Internal from '../shared/internal';\nimport {\n\tfirstMatchingToken,\n\tmakeArray,\n\tSpecLocationSource,\n\tSuggestionFlag,\n\tSuggestionFlags,\n} from '../shared/utils';\n// import {\n// \texecuteCommand,\n// \texecuteLoginShell,\n// \tgetSetting,\n// \tisInDevMode,\n// \tSETTINGS,\n// } from '../../api-bindings-wrappers/src';\nimport {\n\tCommand,\n\tsubstituteAlias,\n} from '../shell-parser';\n// import {\n// \tgetSpecPath,\n// \tloadSubcommandCached,\n// \tserializeSpecLocation,\n// } from './loadSpec.js';\nimport {\n\tParseArgumentsError,\n\tParsingHistoryError,\n\tUpdateStateError,\n} from './errors.js';\nimport { convertSubcommand, initializeDefault } from '../fig-autocomplete-shared';\nimport { exec, type ExecException } from 'child_process';\nimport type { IFigExecuteExternals } from '../execute';\n\ntype ArgArrayState = {\n\targs: Array<Internal.Arg> | null;\n\tindex: number;\n\tvariadicCount?: number;\n};\n\nexport enum TokenType {\n\tNone = 'none',\n\tSubcommand = 'subcommand',\n\tOption = 'option',\n\tOptionArg = 'option_arg',\n\tSubcommandArg = 'subcommand_arg',\n\n\t// Option chain or option passed with arg in a single token.\n\tComposite = 'composite',\n}\n\nexport type BasicAnnotation =\n\t| {\n\t\ttext: string;\n\t\ttype: Exclude<TokenType, TokenType.Composite>;\n\n\t\t// Same as text, unless in CompositeAnnotation, where, e.g. in ls -lah\n\t\t// the \"a\" token has text: \"a\" but tokenName: -a\n\t\ttokenName?: string;\n\t}\n\t| {\n\t\ttext: string;\n\t\ttype: TokenType.Subcommand;\n\t\tspec: Internal.Subcommand;\n\t\tspecLocation: Internal.SpecLocation;\n\t};\n\ntype CompositeAnnotation = {\n\ttext: string;\n\ttype: TokenType.Composite;\n\tsubtokens: BasicAnnotation[];\n};\n\nexport type Annotation = BasicAnnotation | CompositeAnnotation;\n\nexport type ArgumentParserState = {\n\tcompletionObj: Internal.Subcommand;\n\n\toptionArgState: ArgArrayState;\n\tsubcommandArgState: ArgArrayState;\n\tannotations: Annotation[];\n\tpassedOptions: Internal.Option[];\n\n\tcommandIndex: number;\n\t// Used to exclude subcommand suggestions after user has entered a subcommand arg.\n\thaveEnteredSubcommandArgs: boolean;\n\tisEndOfOptions: boolean;\n};\n\n// Result with derived completionObj/currentArg from cached state.\nexport type ArgumentParserResult = {\n\tcompletionObj: Internal.Subcommand;\n\tcurrentArg: Internal.Arg | null;\n\tpassedOptions: Internal.Option[];\n\tsearchTerm: string;\n\tcommandIndex: number;\n\tsuggestionFlags: SuggestionFlags;\n\tannotations: Annotation[];\n};\n\nexport const createArgState = (args?: Internal.Arg[]): ArgArrayState => {\n\tconst updatedArgs: Internal.Arg[] = [];\n\n\tfor (const arg of args ?? []) {\n\t\tconst updatedGenerators = new Set<Fig.Generator>();\n\t\tfor (let i = 0; i < arg.generators.length; i += 1) {\n\t\t\tconst generator = arg.generators[i];\n\t\t\tconst templateArray = makeArray(generator.template ?? []);\n\n\t\t\tlet updatedGenerator: Fig.Generator | undefined;\n\t\t\t// TODO: Pass templates out as a result\n\t\t\tif (templateArray.includes('filepaths') && templateArray.includes('folders')) {\n\t\t\t\tupdatedGenerator = { template: ['filepaths', 'folders'] };\n\t\t\t} else if (templateArray.includes('filepaths')) {\n\t\t\t\tupdatedGenerator = { template: 'filepaths' };\n\t\t\t} else if (templateArray.includes('folders')) {\n\t\t\t\tupdatedGenerator = { template: 'folders' };\n\t\t\t}\n\n\t\t\tif (updatedGenerator && typeof generator !== 'string' && generator.filterTemplateSuggestions) {\n\t\t\t\tupdatedGenerator.filterTemplateSuggestions =\n\t\t\t\t\tgenerator.filterTemplateSuggestions;\n\t\t\t}\n\t\t\tupdatedGenerators.add(updatedGenerator ?? generator);\n\t\t}\n\n\t\tupdatedArgs.push({\n\t\t\t...arg,\n\t\t\tgenerators: [...updatedGenerators],\n\t\t});\n\t}\n\treturn {\n\t\targs: updatedArgs.length > 0 ? updatedArgs : null,\n\t\tindex: 0,\n\t};\n};\n\nexport const flattenAnnotations = (\n\tannotations: Annotation[],\n): BasicAnnotation[] => {\n\tconst result: BasicAnnotation[] = [];\n\tfor (let i = 0; i < annotations.length; i += 1) {\n\t\tconst annotation = annotations[i];\n\t\tif (annotation.type === TokenType.Composite) {\n\t\t\tresult.push(...annotation.subtokens);\n\t\t} else {\n\t\t\tresult.push(annotation);\n\t\t}\n\t}\n\treturn result;\n};\n\nexport const optionsAreEqual = (a: Internal.Option, b: Internal.Option) =>\n\ta.name.some((name) => b.name.includes(name));\n\nexport const countEqualOptions = (\n\toption: Internal.Option,\n\toptions: Internal.Option[],\n) =>\n\toptions.reduce(\n\t\t(count, opt) => (optionsAreEqual(option, opt) ? count + 1 : count),\n\t\t0,\n\t);\n\nexport const updateArgState = (argState: ArgArrayState): ArgArrayState => {\n\t// Consume an argument and update the arg state accordingly.\n\tconst { args, index, variadicCount } = argState;\n\n\tif (args && args[index] && args[index].isVariadic) {\n\t\treturn { args, index, variadicCount: (variadicCount || 0) + 1 };\n\t}\n\n\tif (args && args[index] && index < args.length - 1) {\n\t\treturn { args, index: index + 1 };\n\t}\n\n\treturn { args: null, index: 0 };\n};\n\nexport const getCurrentArg = (argState: ArgArrayState): Internal.Arg | null =>\n\t(argState.args && argState.args[argState.index]) || null;\n\nexport const isMandatoryOrVariadic = (arg: Internal.Arg | null): boolean =>\n\t!!arg && (arg.isVariadic || !arg.isOptional);\n\nconst preferOptionArg = (state: ArgumentParserState): boolean =>\n\tisMandatoryOrVariadic(getCurrentArg(state.optionArgState)) ||\n\t!getCurrentArg(state.subcommandArgState);\n\nconst getArgState = (state: ArgumentParserState): ArgArrayState =>\n\tpreferOptionArg(state) ? state.optionArgState : state.subcommandArgState;\n\nconst canConsumeOptions = (state: ArgumentParserState): boolean => {\n\tconst {\n\t\tsubcommandArgState,\n\t\toptionArgState,\n\t\tisEndOfOptions,\n\t\thaveEnteredSubcommandArgs,\n\t\tcompletionObj,\n\t} = state;\n\n\tif (\n\t\thaveEnteredSubcommandArgs &&\n\t\tcompletionObj.parserDirectives?.optionsMustPrecedeArguments === true\n\t) {\n\t\treturn false;\n\t}\n\n\tif (isEndOfOptions) {\n\t\treturn false;\n\t}\n\tconst subcommandArg = getCurrentArg(subcommandArgState);\n\tconst optionArg = getCurrentArg(optionArgState);\n\n\tif (isMandatoryOrVariadic(getCurrentArg(optionArgState))) {\n\t\t// If option arg is mandatory or variadic, we may still be able to consume\n\t\t// an option if options can break and we have already passed at least one\n\t\t// variadic option arg.\n\t\tif (\n\t\t\toptionArg?.isVariadic &&\n\t\t\toptionArgState.variadicCount &&\n\t\t\toptionArg.optionsCanBreakVariadicArg !== false\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tif (\n\t\tsubcommandArg &&\n\t\tsubcommandArgState.variadicCount &&\n\t\tsubcommandArg?.optionsCanBreakVariadicArg === false\n\t) {\n\t\t// If we are in the middle of a variadic subcommand arg, we cannot consume the\n\t\t// next token as an option if optionsCanBreakVariadicArg is false\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nexport const findOption = (\n\tspec: Internal.Subcommand,\n\ttoken: string,\n): Internal.Option => {\n\tconst option = spec.options[token] || spec.persistentOptions[token];\n\tif (!option) {\n\t\tthrow new UpdateStateError(`Option not found: ${token}`);\n\t}\n\treturn option;\n};\n\nexport const findSubcommand = (\n\tspec: Internal.Subcommand,\n\ttoken: string,\n): Internal.Subcommand => {\n\tconst subcommand = spec.subcommands[token];\n\tif (!subcommand) {\n\t\tthrow new UpdateStateError('Subcommand not found');\n\t}\n\treturn subcommand;\n};\n\nconst updateStateForSubcommand = (\n\tstate: ArgumentParserState,\n\ttoken: string,\n\tisFinalToken = false,\n): ArgumentParserState => {\n\tconst { completionObj, haveEnteredSubcommandArgs } = state;\n\tif (!completionObj.subcommands) {\n\t\tthrow new UpdateStateError('No subcommands');\n\t}\n\n\tif (haveEnteredSubcommandArgs) {\n\t\tthrow new UpdateStateError('Already entered subcommand args');\n\t}\n\n\tconst newCompletionObj = findSubcommand(state.completionObj, token);\n\n\tconst annotations: Annotation[] = [\n\t\t...state.annotations,\n\t\t{ text: token, type: TokenType.Subcommand },\n\t];\n\n\tif (isFinalToken) {\n\t\treturn { ...state, annotations };\n\t}\n\n\t// Mutate for parser directives and persistent options: these are carried\n\t// down deterministically.\n\tif (!newCompletionObj.parserDirectives && completionObj.parserDirectives) {\n\t\tnewCompletionObj.parserDirectives = completionObj.parserDirectives;\n\t}\n\n\tObject.assign(\n\t\tnewCompletionObj.persistentOptions,\n\t\tcompletionObj.persistentOptions,\n\t);\n\n\treturn {\n\t\t...state,\n\t\tannotations,\n\t\t// Inherit parserDirectives if not specified.\n\t\tcompletionObj: newCompletionObj,\n\t\tpassedOptions: [],\n\t\toptionArgState: createArgState(),\n\t\tsubcommandArgState: createArgState(newCompletionObj.args),\n\t};\n};\n\nconst updateStateForOption = (\n\tstate: ArgumentParserState,\n\ttoken: string,\n\tisFinalToken = false,\n): ArgumentParserState => {\n\tconst option = findOption(state.completionObj, token);\n\tlet { isRepeatable } = option;\n\tif (isRepeatable === false) {\n\t\tisRepeatable = 1;\n\t}\n\tif (isRepeatable !== true && isRepeatable !== undefined) {\n\t\tconst currentRepetitions = countEqualOptions(option, state.passedOptions);\n\t\tif (currentRepetitions >= isRepeatable) {\n\t\t\tthrow new UpdateStateError(\n\t\t\t\t`Cannot pass option again, already passed ${currentRepetitions} times, ` +\n\t\t\t\t`and can only be passed ${isRepeatable} times`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst annotations: Annotation[] = [\n\t\t...state.annotations,\n\t\t{ text: token, type: TokenType.Option },\n\t];\n\n\tif (isFinalToken) {\n\t\treturn { ...state, annotations };\n\t}\n\n\treturn {\n\t\t...state,\n\t\tannotations,\n\t\tpassedOptions: [...state.passedOptions, option],\n\t\toptionArgState: createArgState(option.args),\n\t};\n};\n\nconst updateStateForOptionArg = (\n\tstate: ArgumentParserState,\n\ttoken: string,\n\tisFinalToken = false,\n): ArgumentParserState => {\n\tif (!getCurrentArg(state.optionArgState)) {\n\t\tthrow new UpdateStateError('Cannot consume option arg.');\n\t}\n\n\tconst annotations: Annotation[] = [\n\t\t...state.annotations,\n\t\t{ text: token, type: TokenType.OptionArg },\n\t];\n\n\tif (isFinalToken) {\n\t\treturn { ...state, annotations };\n\t}\n\n\treturn {\n\t\t...state,\n\t\tannotations,\n\t\toptionArgState: updateArgState(state.optionArgState),\n\t};\n};\n\nconst updateStateForSubcommandArg = (\n\tstate: ArgumentParserState,\n\ttoken: string,\n\tisFinalToken = false,\n): ArgumentParserState => {\n\t// Consume token as subcommand arg if possible.\n\tif (!getCurrentArg(state.subcommandArgState)) {\n\t\tthrow new UpdateStateError('Cannot consume subcommand arg.');\n\t}\n\n\tconst annotations: Annotation[] = [\n\t\t...state.annotations,\n\t\t{ text: token, type: TokenType.SubcommandArg },\n\t];\n\n\tif (isFinalToken) {\n\t\treturn { ...state, annotations };\n\t}\n\n\treturn {\n\t\t...state,\n\t\tannotations,\n\t\tsubcommandArgState: updateArgState(state.subcommandArgState),\n\t\thaveEnteredSubcommandArgs: true,\n\t};\n};\n\nconst updateStateForChainedOptionToken = (\n\tstate: ArgumentParserState,\n\ttoken: string,\n\tisFinalToken = false,\n): ArgumentParserState => {\n\t// Handle composite option tokens, accounting for different types of inputs.\n\t// https://en.wikipedia.org/wiki/Command-line_interface#Option_conventions_in_Unix-like_systems\n\t// See https://stackoverflow.com/a/10818697\n\t// Handle -- as special option flag.\n\tif (isFinalToken && ['-', '--'].includes(token)) {\n\t\tthrow new UpdateStateError('Final token, not consuming as option');\n\t}\n\n\tif (token === '--') {\n\t\treturn {\n\t\t\t...state,\n\t\t\tisEndOfOptions: true,\n\t\t\tannotations: [\n\t\t\t\t...state.annotations,\n\t\t\t\t{ text: token, type: TokenType.Option },\n\t\t\t],\n\t\t\toptionArgState: { args: null, index: 0 },\n\t\t};\n\t}\n\n\tconst { parserDirectives } = state.completionObj;\n\tconst isLongOption =\n\t\tparserDirectives?.flagsArePosixNoncompliant ||\n\t\ttoken.startsWith('--') ||\n\t\t!token.startsWith('-');\n\n\tif (isLongOption) {\n\t\tconst optionSeparators = new Set(\n\t\t\tparserDirectives?.optionArgSeparators || '=',\n\t\t);\n\t\tconst separatorMatches = firstMatchingToken(token, optionSeparators);\n\n\t\tif (separatorMatches) {\n\t\t\t// Handle long option with equals --num=10, -pnf=10, opt=10.\n\t\t\tconst matchedSeparator = separatorMatches[0];\n\t\t\tconst [flag, ...optionArgParts] = token.split(matchedSeparator);\n\t\t\tconst optionArg = optionArgParts.join(matchedSeparator);\n\t\t\tconst optionState = updateStateForOption(state, flag);\n\n\t\t\tif ((optionState.optionArgState.args?.length ?? 0) > 1) {\n\t\t\t\tthrow new UpdateStateError(\n\t\t\t\t\t'Cannot pass argument with separator: option takes multiple args',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst finalState = updateStateForOptionArg(\n\t\t\t\toptionState,\n\t\t\t\toptionArg,\n\t\t\t\tisFinalToken,\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...finalState,\n\t\t\t\tannotations: [\n\t\t\t\t\t...state.annotations,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TokenType.Composite,\n\t\t\t\t\t\ttext: token,\n\t\t\t\t\t\tsubtokens: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: TokenType.Option,\n\t\t\t\t\t\t\t\ttext: `${flag}${matchedSeparator}`,\n\t\t\t\t\t\t\t\ttokenName: flag,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.OptionArg, text: optionArg },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\n\t\t// Normal long option\n\t\tconst finalState = updateStateForOption(state, token, isFinalToken);\n\t\tconst option = findOption(state.completionObj, token);\n\t\treturn option.requiresEquals || option.requiresSeparator\n\t\t\t? { ...finalState, optionArgState: { args: null, index: 0 } }\n\t\t\t: finalState;\n\t}\n\n\tlet optionState = state;\n\tlet optionArg = '';\n\tconst subtokens: BasicAnnotation[] = [];\n\tlet { passedOptions } = state;\n\n\tfor (let i = 1; i < token.length; i += 1) {\n\t\tconst [optionFlag, remaining] = [`-${token[i]}`, token.slice(i + 1)];\n\t\tpassedOptions = optionState.passedOptions;\n\t\ttry {\n\t\t\toptionState = updateStateForOption(optionState, optionFlag);\n\t\t} catch (err) {\n\t\t\tif (i > 1) {\n\t\t\t\toptionArg = token.slice(i);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\tsubtokens.push({\n\t\t\ttype: TokenType.Option,\n\t\t\ttext: i === 1 ? optionFlag : token[i],\n\t\t\ttokenName: optionFlag,\n\t\t});\n\n\t\tif (isMandatoryOrVariadic(getCurrentArg(optionState.optionArgState))) {\n\t\t\toptionArg = remaining;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (optionArg) {\n\t\tif ((optionState.optionArgState.args?.length ?? 0) > 1) {\n\t\t\tthrow new UpdateStateError(\n\t\t\t\t'Cannot chain option argument: option takes multiple args',\n\t\t\t);\n\t\t}\n\n\t\toptionState = updateStateForOptionArg(optionState, optionArg, isFinalToken);\n\t\tpassedOptions = optionState.passedOptions;\n\t\tsubtokens.push({ type: TokenType.OptionArg, text: optionArg });\n\t}\n\n\treturn {\n\t\t...optionState,\n\t\tannotations: [\n\t\t\t...state.annotations,\n\t\t\t{\n\t\t\t\ttype: TokenType.Composite,\n\t\t\t\ttext: token,\n\t\t\t\tsubtokens,\n\t\t\t},\n\t\t],\n\t\tpassedOptions: isFinalToken ? passedOptions : optionState.passedOptions,\n\t};\n};\n\nconst canConsumeSubcommands = (state: ArgumentParserState): boolean =>\n\t!isMandatoryOrVariadic(getCurrentArg(state.optionArgState)) &&\n\t!state.haveEnteredSubcommandArgs;\n\n// State machine for argument parser.\nfunction updateState(\n\tstate: ArgumentParserState,\n\ttoken: string,\n\tisFinalToken = false,\n): ArgumentParserState {\n\tif (canConsumeSubcommands(state)) {\n\t\ttry {\n\t\t\treturn updateStateForSubcommand(state, token, isFinalToken);\n\t\t} catch (_err) {\n\t\t\t// Continue to other token types if we can't consume subcommand.\n\t\t}\n\t}\n\n\tif (canConsumeOptions(state)) {\n\t\ttry {\n\t\t\treturn updateStateForChainedOptionToken(state, token, isFinalToken);\n\t\t} catch (_err) {\n\t\t\t// Continue to other token types if we can't consume option.\n\t\t}\n\t}\n\n\tif (preferOptionArg(state)) {\n\t\ttry {\n\t\t\treturn updateStateForOptionArg(state, token, isFinalToken);\n\t\t} catch (_err) {\n\t\t\t// Continue to other token types if we can't consume option arg.\n\t\t}\n\t}\n\n\treturn updateStateForSubcommandArg(state, token, isFinalToken);\n}\n\nconst getInitialState = (\n\tspec: Internal.Subcommand,\n\ttext?: string,\n\tspecLocation?: Internal.SpecLocation,\n): ArgumentParserState => ({\n\tcompletionObj: spec,\n\tpassedOptions: [],\n\n\tannotations:\n\t\ttext && specLocation\n\t\t\t? [{ text, type: TokenType.Subcommand, spec, specLocation }]\n\t\t\t: [],\n\tcommandIndex: 0,\n\n\toptionArgState: createArgState(),\n\tsubcommandArgState: createArgState(spec.args),\n\n\thaveEnteredSubcommandArgs: false,\n\tisEndOfOptions: false,\n});\n\nconst historyExecuteShellCommand: Fig.ExecuteCommandFunction = async () => {\n\tthrow new ParsingHistoryError(\n\t\t'Cannot run shell command while parsing history',\n\t);\n};\n\nfunction getExecuteShellCommandFunction(\n\tisParsingHistory = false,\n\texecuteExternals: IFigExecuteExternals,\n) {\n\tif (isParsingHistory) {\n\t\treturn historyExecuteShellCommand;\n\t}\n\treturn executeExternals.executeCommand;\n}\n\n// const getGenerateSpecCacheKey = (\n// \tcompletionObj: Internal.Subcommand,\n// \ttokenArray: string[],\n// ): string | undefined => {\n// \tlet cacheKey: string | undefined;\n\n// \tconst generateSpecCacheKey = completionObj?.generateSpecCacheKey;\n// \tif (generateSpecCacheKey) {\n// \t\tif (typeof generateSpecCacheKey === 'string') {\n// \t\t\tcacheKey = generateSpecCacheKey;\n// \t\t} else if (typeof generateSpecCacheKey === 'function') {\n// \t\t\tcacheKey = generateSpecCacheKey({\n// \t\t\t\ttokens: tokenArray,\n// \t\t\t});\n// \t\t} else {\n// \t\t\tconsole.error(\n// \t\t\t\t'generateSpecCacheKey must be a string or function',\n// \t\t\t\tgenerateSpecCacheKey,\n// \t\t\t);\n// \t\t}\n// \t}\n\n// \t// Return this late to ensure any generateSpecCacheKey side effects still happen\n// \t// if (isInDevMode()) {\n// \t// \treturn undefined;\n// \t// }\n// \tif (typeof cacheKey === 'string') {\n// \t\t// Prepend the spec name to the cacheKey to avoid collisions between specs.\n// \t\treturn `${tokenArray[0]}:${cacheKey}`;\n// \t}\n// \treturn undefined;\n// };\n\n// const generateSpecForState = async (\n// \tstate: ArgumentParserState,\n// \ttokenArray: string[],\n// \tisParsingHistory = false,\n// \t// localconsole: console.console = console,\n// ): Promise<ArgumentParserState> => {\n// \tconsole.debug('generateSpec', { state, tokenArray });\n// \tconst { completionObj } = state;\n// \tconst { generateSpec } = completionObj;\n// \tif (!generateSpec) {\n// \t\treturn state;\n// \t}\n\n// \ttry {\n// \t\tconst cacheKey = getGenerateSpecCacheKey(completionObj, tokenArray);\n// \t\tlet newSpec;\n// \t\tif (cacheKey && generateSpecCache.has(cacheKey)) {\n// \t\t\tnewSpec = generateSpecCache.get(cacheKey)!;\n// \t\t} else {\n// \t\t\tconst exec = getExecuteShellCommandFunction(isParsingHistory);\n// \t\t\tconst spec = await generateSpec(tokenArray, exec);\n// \t\t\tif (!spec) {\n// \t\t\t\tthrow new UpdateStateError('generateSpec must return a spec');\n// \t\t\t}\n// \t\t\tnewSpec = convertSubcommand(\n// \t\t\t\tspec,\n// \t\t\t\tinitializeDefault,\n// \t\t\t);\n// \t\t\tif (cacheKey) generateSpecCache.set(cacheKey, newSpec);\n// \t\t}\n\n// \t\tconst keepArgs = completionObj.args.length > 0;\n\n// \t\treturn {\n// \t\t\t...state,\n// \t\t\tcompletionObj: {\n// \t\t\t\t...completionObj,\n// \t\t\t\tsubcommands: { ...completionObj.subcommands, ...newSpec.subcommands },\n// \t\t\t\toptions: { ...completionObj.options, ...newSpec.options },\n// \t\t\t\tpersistentOptions: {\n// \t\t\t\t\t...completionObj.persistentOptions,\n// \t\t\t\t\t...newSpec.persistentOptions,\n// \t\t\t\t},\n// \t\t\t\targs: keepArgs ? completionObj.args : newSpec.args,\n// \t\t\t},\n// \t\t\tsubcommandArgState: keepArgs\n// \t\t\t\t? state.subcommandArgState\n// \t\t\t\t: createArgState(newSpec.args),\n// \t\t};\n// \t} catch (err) {\n// \t\tif (!(err instanceof ParsingHistoryError)) {\n// \t\t\tconsole.error(\n// \t\t\t\t`There was an error with spec (generator owner: ${completionObj.name\n// \t\t\t\t}, tokens: ${tokenArray.join(', ')}) generateSpec function`,\n// \t\t\t\terr,\n// \t\t\t);\n// \t\t}\n// \t}\n// \treturn state;\n// };\n\nexport const getResultFromState = (\n\tstate: ArgumentParserState,\n): ArgumentParserResult => {\n\tconst { completionObj, passedOptions, commandIndex, annotations } = state;\n\n\tconst lastAnnotation: Annotation | undefined =\n\t\tannotations[annotations.length - 1];\n\tlet argState = getArgState(state);\n\tlet searchTerm = lastAnnotation?.text ?? '';\n\n\tlet onlySuggestArgs = state.isEndOfOptions;\n\n\tif (lastAnnotation?.type === TokenType.Composite) {\n\t\targState = state.optionArgState;\n\n\t\tconst lastSubtoken =\n\t\t\tlastAnnotation.subtokens[lastAnnotation.subtokens.length - 1];\n\t\tif (lastSubtoken.type === TokenType.OptionArg) {\n\t\t\tsearchTerm = lastSubtoken.text;\n\t\t\tonlySuggestArgs = true;\n\t\t}\n\t}\n\n\tconst currentArg = getCurrentArg(argState);\n\n\t// Determine what to suggest from final state, always suggest args.\n\tlet suggestionFlags: SuggestionFlags = SuggestionFlag.Args;\n\n\t// Selectively enable options or subcommand suggestions if it makes sense.\n\tif (!onlySuggestArgs) {\n\t\tif (canConsumeSubcommands(state)) {\n\t\t\tsuggestionFlags |= SuggestionFlag.Subcommands;\n\t\t}\n\t\tif (canConsumeOptions(state)) {\n\t\t\tsuggestionFlags |= SuggestionFlag.Options;\n\t\t}\n\t}\n\n\treturn {\n\t\tcompletionObj,\n\t\tpassedOptions,\n\t\tcommandIndex,\n\t\tannotations,\n\n\t\tcurrentArg,\n\t\tsearchTerm,\n\t\tsuggestionFlags,\n\t};\n};\n\nexport const initialParserState = getResultFromState(\n\tgetInitialState({\n\t\tname: [''],\n\t\tsubcommands: {},\n\t\toptions: {},\n\t\tpersistentOptions: {},\n\t\tparserDirectives: {},\n\t\targs: [],\n\t}),\n);\n\n// const parseArgumentsCache = createCache<ArgumentParserState>();\n// const parseArgumentsGenerateSpecCache = createCache<ArgumentParserState>();\n// const figCaches = new Set<string>();\n// export const clearFigCaches = () => {\n// \tfor (const cache of figCaches) {\n// \t\tparseArgumentsGenerateSpecCache.delete(cache);\n// \t}\n// \treturn { unsubscribe: false };\n// };\n\n// const getCacheKey = (\n// \ttokenArray: string[],\n// \tcontext: Fig.ShellContext,\n// \tspecLocation: Internal.SpecLocation,\n// ): string =>\n// \t[\n// \t\ttokenArray.slice(0, -1).join(' '),\n// \t\t// serializeSpecLocation(specLocation),\n// \t\tcontext.currentWorkingDirectory,\n// \t\tcontext.currentProcess,\n// \t].join(',');\n\n// Parse all arguments in tokenArray.\nconst parseArgumentsCached = async (\n\tcommand: Command,\n\tcontext: Fig.ShellContext,\n\tspec: Fig.Spec,\n\texecuteExternals: IFigExecuteExternals,\n\t// authClient: AuthClient,\n\tisParsingHistory?: boolean,\n\tstartIndex = 0,\n\t// localconsole: console.console = console,\n): Promise<ArgumentParserState> => {\n\t// Route to cp.exec instead, we don't need to deal with ipc\n\tconst exec = getExecuteShellCommandFunction(isParsingHistory, executeExternals);\n\n\tlet currentCommand = command;\n\tlet tokens = currentCommand.tokens.slice(startIndex);\n\t// const tokenText = tokens.map((token) => token.text);\n\n\tconst specPath: Fig.SpecLocation = { type: 'global', name: 'fake' };\n\n\t// tokenTest[0] is the command and the spec they need\n\t// const locations = specLocations || [\n\t// \tawait getSpecPath(tokenText[0], context.currentWorkingDirectory),\n\t// ];\n\t// console.debug({ locations });\n\n\t// let cacheKey = '';\n\t// for (let i = 0; i < locations.length; i += 1) {\n\t// \tcacheKey = getCacheKey(tokenText, context, locations[i]);\n\t// \tif (\n\t// \t\t// !isInDevMode() &&\n\t// \t\t(parseArgumentsCache.has(cacheKey) ||\n\t// \t\t\tparseArgumentsGenerateSpecCache.has(cacheKey))\n\t// \t) {\n\t// \t\treturn (\n\t// \t\t\t(parseArgumentsGenerateSpecCache.get(\n\t// \t\t\t\tcacheKey,\n\t// \t\t\t) as ArgumentParserState) ||\n\t// \t\t\t(parseArgumentsCache.get(cacheKey) as ArgumentParserState)\n\t// \t\t);\n\t// \t}\n\t// }\n\n\t// let spec: Internal.Subcommand | undefined;\n\t// let specPath: Internal.SpecLocation | undefined;\n\t// for (let i = 0; i < locations.length; i += 1) {\n\t// \tspecPath = locations[i];\n\t// \tif (isParsingHistory && specPath?.type === SpecLocationSource.LOCAL) {\n\t// \t\tcontinue;\n\t// \t}\n\n\t// \tspec = await withTimeout(\n\t// \t\t5000,\n\t// \t\tloadSubcommandCached(specPath, context, console),\n\t// \t);\n\t// \tif (!specPath) {\n\t// \t\tthrow new Error('specPath is undefined');\n\t// \t}\n\n\t// \tif (!spec) {\n\t// \t\tconst path =\n\t// \t\t\tspecPath.type === SpecLocationSource.LOCAL ? specPath?.path : '';\n\t// \t\tconsole.warn(\n\t// \t\t\t`Failed to load spec ${specPath.name} from ${specPath.type} ${path}`,\n\t// \t\t);\n\t// \t} else {\n\t// \t\tcacheKey = getCacheKey(tokenText, context, specPath);\n\t// \t\tbreak;\n\t// \t}\n\t// }\n\n\tif (!spec || !specPath) {\n\t\tthrow new UpdateStateError('Failed loading spec');\n\t}\n\n\tlet state: ArgumentParserState = getInitialState(\n\t\tconvertSubcommand(spec, initializeDefault),\n\t\ttokens[0].text,\n\t\tspecPath,\n\t);\n\n\t// let generatedSpec = false;\n\n\tconst substitutedAliases = new Set<string>();\n\tlet aliasError: Error | undefined;\n\n\t// Returns true if we should return state immediately after calling.\n\t// const updateStateForLoadSpec = async (\n\t// \tloadSpec: typeof state.completionObj.loadSpec,\n\t// \tindex: number,\n\t// \ttoken?: string,\n\t// ) => {\n\t// \tconst loadSpecResult =\n\t// \t\ttypeof loadSpec === 'function'\n\t// \t\t\t? token !== undefined\n\t// \t\t\t\t? await loadSpec(token, exec)\n\t// \t\t\t\t: undefined\n\t// \t\t\t: loadSpec;\n\n\t// \tif (Array.isArray(loadSpecResult)) {\n\t// \t\tstate = await parseArgumentsCached(\n\t// \t\t\tcurrentCommand,\n\t// \t\t\tcontext,\n\t// \t\t\t// authClient,\n\t// \t\t\tloadSpecResult,\n\t// \t\t\tisParsingHistory,\n\t// \t\t\tstartIndex + index,\n\t// \t\t);\n\t// \t\tstate = { ...state, commandIndex: state.commandIndex + index };\n\t// \t\treturn true;\n\t// \t}\n\n\t// \tif (loadSpecResult) {\n\t// \t\tstate = {\n\t// \t\t\t...state,\n\t// \t\t\tcompletionObj: {\n\t// \t\t\t\t...loadSpecResult,\n\t// \t\t\t\tparserDirectives: {\n\t// \t\t\t\t\t...state.completionObj.parserDirectives,\n\t// \t\t\t\t\t...loadSpecResult.parserDirectives,\n\t// \t\t\t\t},\n\t// \t\t\t},\n\t// \t\t\toptionArgState: createArgState(),\n\t// \t\t\tpassedOptions: [],\n\t// \t\t\tsubcommandArgState: createArgState(loadSpecResult.args),\n\t// \t\t\thaveEnteredSubcommandArgs: false,\n\t// \t\t};\n\t// \t}\n\n\t// \treturn false;\n\t// };\n\n\t// if (await updateStateForLoadSpec(state.completionObj.loadSpec, 0)) {\n\t// \treturn state;\n\t// }\n\n\tfor (let i = 1; i < tokens.length; i += 1) {\n\t\t// TODO: Investigate generate spec\n\t\t// if (state.completionObj.generateSpec) {\n\t\t// \tstate = await generateSpecForState(\n\t\t// \t\tstate,\n\t\t// \t\ttokens.map((token) => token.text),\n\t\t// \t\tisParsingHistory,\n\t\t// \t);\n\t\t// \tgeneratedSpec = true;\n\t\t// }\n\n\t\tif (i === tokens.length - 1) {\n\t\t\t// Don't update state for last token.\n\t\t\tbreak;\n\t\t}\n\n\t\tconst token = tokens[i].text;\n\n\t\tconst lastArgObject = getCurrentArg(getArgState(state));\n\t\tconst lastArgType = preferOptionArg(state)\n\t\t\t? TokenType.OptionArg\n\t\t\t: TokenType.SubcommandArg;\n\n\t\tconst lastState = state;\n\n\t\tstate = updateState(state, token);\n\t\tconsole.debug('Parser state update', { state });\n\n\t\tconst { annotations } = state;\n\t\tconst lastAnnotation = annotations[annotations.length - 1];\n\t\tconst lastType =\n\t\t\tlastAnnotation.type === TokenType.Composite\n\t\t\t\t? lastAnnotation.subtokens[lastAnnotation.subtokens.length - 1].type\n\t\t\t\t: lastAnnotation.type;\n\n\t\tif (\n\t\t\tlastType === lastArgType &&\n\t\t\tlastArgObject?.parserDirectives?.alias &&\n\t\t\t!substitutedAliases.has(token)\n\t\t) {\n\t\t\tconst { alias } = lastArgObject.parserDirectives;\n\t\t\ttry {\n\t\t\t\tconst aliasValue =\n\t\t\t\t\ttypeof alias === 'string' ? alias : await alias(token, exec);\n\t\t\t\ttry {\n\t\t\t\t\tcurrentCommand = substituteAlias(command, tokens[i], aliasValue);\n\t\t\t\t\t// tokens[...i] should be the same, but tokens[i+1...] may be different.\n\t\t\t\t\tsubstitutedAliases.add(token);\n\t\t\t\t\ttokens = currentCommand.tokens.slice(startIndex);\n\t\t\t\t\tstate = lastState;\n\t\t\t\t\ti -= 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error('Error substituting alias:', err);\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tif (substitutedAliases.size === 0) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\taliasError = err as Error;\n\t\t\t}\n\t\t}\n\n\t\t// TODO: Investigate whether we want to support loadSpec, vs just importing them directly\n\t\t// let loadSpec =\n\t\t// \tlastType === TokenType.Subcommand\n\t\t// \t\t? state.completionObj.loadSpec\n\t\t// \t\t: undefined;\n\n\t\t// Recurse for load spec or special arg\n\t\t// if (lastType === lastArgType && lastArgObject) {\n\t\t// \tconst {\n\t\t// \t\tisCommand,\n\t\t// \t\tisModule,\n\t\t// \t\tisScript,\n\t\t// \t\tloadSpec: argLoadSpec,\n\t\t// \t} = lastArgObject;\n\t\t// \tif (argLoadSpec) {\n\t\t// \t\tloadSpec = argLoadSpec;\n\t\t// \t} else if (isCommand || isScript) {\n\t\t// \t\t// const specLocation = await getSpecPath(\n\t\t// \t\t// \ttoken,\n\t\t// \t\t// \tcontext.currentWorkingDirectory,\n\t\t// \t\t// \tBoolean(isScript),\n\t\t// \t\t// );\n\t\t// \t\t// loadSpec = [specLocation];\n\t\t// \t} else if (isModule) {\n\t\t// \t\tloadSpec = [\n\t\t// \t\t\t{\n\t\t// \t\t\t\tname: `${isModule}${token}`,\n\t\t// \t\t\t\ttype: SpecLocationSource.GLOBAL,\n\t\t// \t\t\t},\n\t\t// \t\t];\n\t\t// \t}\n\t\t// }\n\n\t\t// if (await updateStateForLoadSpec(loadSpec, i, token)) {\n\t\t// \treturn state;\n\t\t// }\n\n\t\t// If error with alias and corresponding arg was not used in a loadSpec,\n\t\t// throw the error.\n\t\tif (aliasError) {\n\t\t\tthrow aliasError;\n\t\t}\n\n\t\tsubstitutedAliases.clear();\n\t}\n\n\t// if (generatedSpec) {\n\t// \tif (tokenText[0] === 'fig') figCaches.add(cacheKey);\n\t// \tparseArgumentsGenerateSpecCache.set(cacheKey, state);\n\t// } else {\n\t// \tparseArgumentsCache.set(cacheKey, state);\n\t// }\n\n\treturn state;\n};\n\nconst firstTokenSpec: Internal.Subcommand = {\n\tname: ['firstTokenSpec'],\n\tsubcommands: {},\n\toptions: {},\n\tpersistentOptions: {},\n\tloadSpec: undefined,\n\targs: [\n\t\t{\n\t\t\tname: 'command',\n\t\t\tgenerators: [\n\t\t\t\t{\n\t\t\t\t\tcustom: async (_tokens, _exec, context) => {\n\t\t\t\t\t\tlet result: Fig.Suggestion[] = [];\n\t\t\t\t\t\tif (context?.currentProcess.includes('fish')) {\n\t\t\t\t\t\t\tconst commands = await executeLoginShell({\n\t\t\t\t\t\t\t\tcommand: 'complete -C \"\"',\n\t\t\t\t\t\t\t\texecutable: context.currentProcess,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tresult = commands.split('\\n').map((commandString) => {\n\t\t\t\t\t\t\t\tconst splitIndex = commandString.indexOf('\\t');\n\t\t\t\t\t\t\t\tconst name = commandString.slice(0, splitIndex + 1);\n\t\t\t\t\t\t\t\tconst description = commandString.slice(splitIndex + 1);\n\t\t\t\t\t\t\t\treturn { name, description, type: 'subcommand' };\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (context?.currentProcess.includes('bash')) {\n\t\t\t\t\t\t\tconst commands = await executeLoginShell({\n\t\t\t\t\t\t\t\tcommand: 'compgen -c',\n\t\t\t\t\t\t\t\texecutable: context.currentProcess,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tresult = commands\n\t\t\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t\t\t.map((name) => ({ name, type: 'subcommand' }));\n\t\t\t\t\t\t} else if (context?.currentProcess.includes('zsh')) {\n\t\t\t\t\t\t\tconst commands = await executeLoginShell({\n\t\t\t\t\t\t\t\tcommand: `for key in \\${(k)commands}; do echo $key; done && alias +r`,\n\t\t\t\t\t\t\t\texecutable: context.currentProcess,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tresult = commands\n\t\t\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t\t\t.map((name) => ({ name, type: 'subcommand' }));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst names = new Set();\n\t\t\t\t\t\treturn result.filter((suggestion) => {\n\t\t\t\t\t\t\tif (names.has(suggestion.name)) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnames.add(suggestion.name);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcache: {\n\t\t\t\t\t\tstrategy: 'stale-while-revalidate',\n\t\t\t\t\t\tttl: 10 * 1000, // 10s\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n\tparserDirectives: {},\n};\n\nconst executeLoginShell = async ({\n\tcommand,\n\texecutable,\n}: {\n\tcommand: string;\n\texecutable: string;\n}): Promise<string> => {\n\treturn new Promise((resolve, reject) => {\n\t\texec(`${executable} -c \"${command}\"`, (error: ExecException | null, stdout: string, stderr: string) => {\n\t\t\tif (error) {\n\t\t\t\treject(stderr);\n\t\t\t} else {\n\t\t\t\tresolve(stdout);\n\t\t\t}\n\t\t});\n\t});\n};\n\nexport const parseArguments = async (\n\tcommand: Command | null,\n\tcontext: Fig.ShellContext,\n\tspec: Fig.Spec,\n\texecuteExternals: IFigExecuteExternals,\n\t// authClient: AuthClient,\n\tisParsingHistory = false,\n\t// localconsole: console.console = console,\n): Promise<ArgumentParserResult> => {\n\tconst tokens = command?.tokens ?? [];\n\tif (!command || tokens.length === 0) {\n\t\tthrow new ParseArgumentsError('Invalid token array');\n\t}\n\n\tif (tokens.length === 1) {\n\t\tconst showFirstCommandCompletion = true;\n\t\tconst spec = showFirstCommandCompletion\n\t\t\t? firstTokenSpec\n\t\t\t: { ...firstTokenSpec, args: [] };\n\t\tlet specPath = { name: 'firstTokenSpec', type: SpecLocationSource.GLOBAL };\n\t\tif (tokens[0].text.includes('/')) {\n\t\t\t// special-case: Symfony has \"bin/console\" which can be invoked directly\n\t\t\t// and should not require a user to create script completions for it\n\t\t\tif (tokens[0].text === 'bin/console') {\n\t\t\t\tspecPath = { name: 'php/bin-console', type: SpecLocationSource.GLOBAL };\n\t\t\t} else {\n\t\t\t\tspecPath = { name: 'dotslash', type: SpecLocationSource.GLOBAL };\n\t\t\t}\n\t\t\t// spec = await loadSubcommandCached(specPath, context);\n\t\t}\n\t\treturn getResultFromState(getInitialState(spec, tokens[0].text, specPath));\n\t}\n\n\tlet state = await parseArgumentsCached(\n\t\tcommand,\n\t\tcontext,\n\t\t// authClient,\n\t\tspec,\n\t\texecuteExternals,\n\t\tisParsingHistory,\n\t\t0,\n\t);\n\n\tconst finalToken = tokens[tokens.length - 1].text;\n\ttry {\n\t\tstate = updateState(state, finalToken, true);\n\t} catch (_err) {\n\t\tstate = {\n\t\t\t...state,\n\t\t\tannotations: [\n\t\t\t\t...state.annotations,\n\t\t\t\t{ type: TokenType.None, text: finalToken },\n\t\t\t],\n\t\t};\n\t}\n\treturn getResultFromState(state);\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/execute.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { osIsWindows } from '../helpers/os';\nimport { spawnHelper2 } from '../shell/common';\nimport { withTimeout } from './shared/utils';\n\nexport const cleanOutput = (output: string) =>\n\toutput\n\t\t.replace(/\\r\\n/g, '\\n') // Replace carriage returns with just a normal return\n\t\t.replace(/\\x1b\\[\\?25h/g, '') // removes cursor character if present\n\t\t.replace(/^\\n+/, '') // strips new lines from start of output\n\t\t.replace(/\\n+$/, ''); // strips new lines from end of output\n\nexport const executeCommandTimeout = async (\n\tinput: Fig.ExecuteCommandInput,\n\ttimeout = osIsWindows() ? 20000 : 5000,\n): Promise<Fig.ExecuteCommandOutput> => {\n\tconst command = [input.command, ...input.args].join(' ');\n\ttry {\n\t\tconsole.debug(`About to run shell command '${command}'`);\n\t\tconst result = await withTimeout(\n\t\t\tMath.max(timeout, input.timeout ?? 0),\n\t\t\tspawnHelper2(input.command, input.args, {\n\t\t\t\tenv: input.env,\n\t\t\t\tcwd: input.cwd,\n\t\t\t\ttimeout: input.timeout,\n\t\t\t})\n\t\t);\n\n\t\tconst cleanStdout = cleanOutput(result.stdout);\n\t\tconst cleanStderr = cleanOutput(result.stderr);\n\n\t\tif (result.exitCode !== 0) {\n\t\t\tconsole.warn(\n\t\t\t\t`Command ${command} exited with exit code ${result.exitCode}: ${cleanStderr}`,\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tstatus: result.exitCode,\n\t\t\tstdout: cleanStdout,\n\t\t\tstderr: cleanStderr,\n\t\t};\n\t} catch (err) {\n\t\tconsole.error(`Error running shell command '${command}'`, { err });\n\t\tthrow err;\n\t}\n};\n\n\nexport const executeCommand: Fig.ExecuteCommandFunction = (args) =>\n\texecuteCommandTimeout(args);\n\nexport interface IFigExecuteExternals {\n\texecuteCommand: Fig.ExecuteCommandFunction;\n\texecuteCommandTimeout: (\n\t\tinput: Fig.ExecuteCommandInput,\n\t\ttimeout: number,\n\t) => Promise<Fig.ExecuteCommandOutput>;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/fig-autocomplete-shared/convert.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { makeArray } from './utils';\n\nexport type SuggestionType = Fig.SuggestionType | 'history' | 'auto-execute';\n\ntype Override<T, S> = Omit<T, keyof S> & S;\nexport type Suggestion = Override<Fig.Suggestion, { type?: SuggestionType }>;\n\nexport type Option<ArgT, OptionT> = OptionT & {\n\tname: string[];\n\targs: ArgT[];\n};\n\nexport type Subcommand<ArgT, OptionT, SubcommandT> = SubcommandT & {\n\tname: string[];\n\tsubcommands: Record<string, Subcommand<ArgT, OptionT, SubcommandT>>;\n\toptions: Record<string, Option<ArgT, OptionT>>;\n\tpersistentOptions: Record<string, Option<ArgT, OptionT>>;\n\targs: ArgT[];\n};\n\nconst makeNamedMap = <T extends { name: string[] }>(items: T[] | undefined): Record<string, T> => {\n\tconst nameMapping: Record<string, T> = {};\n\tif (!items) {\n\t\treturn nameMapping;\n\t}\n\n\tfor (let i = 0; i < items.length; i += 1) {\n\t\titems[i].name.forEach((name) => {\n\t\t\tnameMapping[name] = items[i];\n\t\t});\n\t}\n\treturn nameMapping;\n};\n\nexport type Initializer<ArgT, OptionT, SubcommandT> = {\n\tsubcommand: (subcommand: Fig.Subcommand) => SubcommandT;\n\toption: (option: Fig.Option) => OptionT;\n\targ: (arg: Fig.Arg) => ArgT;\n};\n\nfunction convertOption<ArgT, OptionT>(\n\toption: Fig.Option,\n\tinitialize: Omit<Initializer<ArgT, OptionT, never>, 'subcommand'>\n): Option<ArgT, OptionT> {\n\treturn {\n\t\t...initialize.option(option),\n\t\tname: makeArray(option.name),\n\t\targs: option.args ? makeArray(option.args).map(initialize.arg) : [],\n\t};\n}\n\nexport function convertSubcommand<ArgT, OptionT, SubcommandT>(\n\tsubcommand: Fig.Subcommand,\n\tinitialize: Initializer<ArgT, OptionT, SubcommandT>\n): Subcommand<ArgT, OptionT, SubcommandT> {\n\tconst { subcommands, options, args } = subcommand;\n\treturn {\n\t\t...initialize.subcommand(subcommand),\n\t\tname: makeArray(subcommand.name),\n\t\tsubcommands: makeNamedMap(subcommands?.map((s) => convertSubcommand(s, initialize))),\n\t\toptions: makeNamedMap(\n\t\t\toptions\n\t\t\t\t?.filter((option) => !option.isPersistent)\n\t\t\t\t?.map((option) => convertOption(option, initialize))\n\t\t),\n\t\tpersistentOptions: makeNamedMap(\n\t\t\toptions\n\t\t\t\t?.filter((option) => option.isPersistent)\n\t\t\t\t?.map((option) => convertOption(option, initialize))\n\t\t),\n\t\targs: args ? makeArray(args).map(initialize.arg) : [],\n\t};\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/fig-autocomplete-shared/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport type * as Internal from './convert';\nimport type * as Metadata from './specMetadata';\nimport { revertSubcommand } from './revert';\nimport { convertSubcommand } from './convert';\nimport { convertLoadSpec, initializeDefault } from './specMetadata';\nimport { SpecMixin, applyMixin, mergeSubcommands } from './mixins';\nimport { SpecLocationSource, makeArray } from './utils';\n\nexport {\n\tInternal,\n\trevertSubcommand,\n\tconvertSubcommand,\n\tMetadata,\n\tconvertLoadSpec,\n\tinitializeDefault,\n\tSpecMixin,\n\tapplyMixin,\n\tmergeSubcommands,\n\tmakeArray,\n\tSpecLocationSource,\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/fig-autocomplete-shared/mixins.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { makeArray } from './utils';\n\nexport type SpecMixin =\n\t| Fig.Subcommand\n\t| ((currentSpec: Fig.Subcommand, context: Fig.ShellContext) => Fig.Subcommand);\n\ntype NamedObject = { name: Fig.SingleOrArray<string> };\n\nconst concatArrays = <T>(a: T[] | undefined, b: T[] | undefined): T[] | undefined =>\n\ta && b ? [...a, ...b] : a || b;\n\nconst mergeNames = <T = string>(a: T | T[], b: T | T[]): T | T[] => [\n\t...new Set(concatArrays(makeArray(a), makeArray(b))),\n];\n\nconst mergeArrays = <T>(a: T[] | undefined, b: T[] | undefined): T[] | undefined =>\n\ta && b ? [...new Set(concatArrays(makeArray(a), makeArray(b)))] : a || b;\n\nconst mergeArgs = (arg: Fig.Arg, partial: Fig.Arg): Fig.Arg => ({\n\t...arg,\n\t...partial,\n\tsuggestions: concatArrays<Fig.Suggestion | string>(arg.suggestions, partial.suggestions),\n\tgenerators:\n\t\targ.generators && partial.generators\n\t\t\t? concatArrays(makeArray(arg.generators), makeArray(partial.generators))\n\t\t\t: arg.generators || partial.generators,\n\ttemplate:\n\t\targ.template && partial.template\n\t\t\t? mergeNames<Fig.TemplateStrings>(arg.template, partial.template)\n\t\t\t: arg.template || partial.template,\n});\n\nconst mergeArgArrays = (\n\targs: Fig.SingleOrArray<Fig.Arg> | undefined,\n\tpartials: Fig.SingleOrArray<Fig.Arg> | undefined\n): Fig.SingleOrArray<Fig.Arg> | undefined => {\n\tif (!args || !partials) {\n\t\treturn args || partials;\n\t}\n\tconst argArray = makeArray(args);\n\tconst partialArray = makeArray(partials);\n\tconst result = [];\n\tfor (let i = 0; i < Math.max(argArray.length, partialArray.length); i += 1) {\n\t\tconst arg = argArray[i];\n\t\tconst partial = partialArray[i];\n\t\tif (arg !== undefined && partial !== undefined) {\n\t\t\tresult.push(mergeArgs(arg, partial));\n\t\t} else if (partial !== undefined || arg !== undefined) {\n\t\t\tresult.push(arg || partial);\n\t\t}\n\t}\n\treturn result.length === 1 ? result[0] : result;\n};\n\nconst mergeOptions = (option: Fig.Option, partial: Fig.Option): Fig.Option => ({\n\t...option,\n\t...partial,\n\tname: mergeNames(option.name, partial.name),\n\targs: mergeArgArrays(option.args, partial.args),\n\texclusiveOn: mergeArrays(option.exclusiveOn, partial.exclusiveOn),\n\tdependsOn: mergeArrays(option.dependsOn, partial.dependsOn),\n});\n\nconst mergeNamedObjectArrays = <T extends NamedObject>(\n\tobjects: T[] | undefined,\n\tpartials: T[] | undefined,\n\tmergeItems: (a: T, b: T) => T\n): T[] | undefined => {\n\tif (!objects || !partials) {\n\t\treturn objects || partials;\n\t}\n\tconst mergedObjects = objects ? [...objects] : [];\n\n\tconst existingNameIndexMap: Record<string, number> = {};\n\tfor (let i = 0; i < objects.length; i += 1) {\n\t\tmakeArray(objects[i].name).forEach((name) => {\n\t\t\texistingNameIndexMap[name] = i;\n\t\t});\n\t}\n\n\tfor (let i = 0; i < partials.length; i += 1) {\n\t\tconst partial = partials[i];\n\t\tif (!partial) {\n\t\t\tthrow new Error('Invalid object passed to merge');\n\t\t}\n\t\tconst existingNames = makeArray(partial.name).filter((name) => name in existingNameIndexMap);\n\t\tif (existingNames.length === 0) {\n\t\t\tmergedObjects.push(partial);\n\t\t} else {\n\t\t\tconst index = existingNameIndexMap[existingNames[0]];\n\t\t\tif (existingNames.some((name) => existingNameIndexMap[name] !== index)) {\n\t\t\t\tthrow new Error('Names provided for option matched multiple existing options');\n\t\t\t}\n\t\t\tmergedObjects[index] = mergeItems(mergedObjects[index], partial);\n\t\t}\n\t}\n\treturn mergedObjects;\n};\n\nfunction mergeOptionArrays(\n\toptions: Fig.Option[] | undefined,\n\tpartials: Fig.Option[] | undefined\n): Fig.Option[] | undefined {\n\treturn mergeNamedObjectArrays(options, partials, mergeOptions);\n}\n\nfunction mergeSubcommandArrays(\n\tsubcommands: Fig.Subcommand[] | undefined,\n\tpartials: Fig.Subcommand[] | undefined\n): Fig.Subcommand[] | undefined {\n\treturn mergeNamedObjectArrays(subcommands, partials, mergeSubcommands);\n}\n\nexport function mergeSubcommands(\n\tsubcommand: Fig.Subcommand,\n\tpartial: Fig.Subcommand\n): Fig.Subcommand {\n\treturn {\n\t\t...subcommand,\n\t\t...partial,\n\t\tname: mergeNames(subcommand.name, partial.name),\n\t\targs: mergeArgArrays(subcommand.args, partial.args),\n\t\tadditionalSuggestions: concatArrays<Fig.Suggestion | string>(\n\t\t\tsubcommand.additionalSuggestions,\n\t\t\tpartial.additionalSuggestions\n\t\t),\n\t\tsubcommands: mergeSubcommandArrays(subcommand.subcommands, partial.subcommands),\n\t\toptions: mergeOptionArrays(subcommand.options, partial.options),\n\t\tparserDirectives:\n\t\t\tsubcommand.parserDirectives && partial.parserDirectives\n\t\t\t\t? { ...subcommand.parserDirectives, ...partial.parserDirectives }\n\t\t\t\t: subcommand.parserDirectives || partial.parserDirectives,\n\t};\n}\n\nexport const applyMixin = (\n\tspec: Fig.Subcommand,\n\tcontext: Fig.ShellContext,\n\tmixin: SpecMixin\n): Fig.Subcommand => {\n\tif (typeof mixin === 'function') {\n\t\treturn mixin(spec, context);\n\t}\n\tconst partial = mixin;\n\treturn mergeSubcommands(spec, partial);\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/fig-autocomplete-shared/revert.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Option, Subcommand } from './convert';\n\nfunction makeSingleOrArray<T>(arr: T[]): Fig.SingleOrArray<T> {\n\treturn arr.length === 1 ? (arr[0] as Fig.SingleOrArray<T>) : (arr as Fig.SingleOrArray<T>);\n}\n\nfunction revertOption<ArgT extends Fig.Arg, OptionT>(option: Option<ArgT, OptionT>): Fig.Option {\n\tconst { name, args } = option;\n\n\treturn {\n\t\tname: makeSingleOrArray(name),\n\t\targs,\n\t};\n}\n\nexport function revertSubcommand<ArgT extends Fig.Arg, OptionT, SubcommandT>(\n\tsubcommand: Subcommand<ArgT, OptionT, SubcommandT>,\n\tpostProcessingFn: (\n\t\toldSub: Subcommand<ArgT, OptionT, SubcommandT>,\n\t\tnewSub: Fig.Subcommand\n\t) => Fig.Subcommand\n): Fig.Subcommand {\n\tconst { name, subcommands, options, persistentOptions, args } = subcommand;\n\n\tconst newSubcommand: Fig.Subcommand = {\n\t\tname: makeSingleOrArray(name),\n\t\tsubcommands:\n\t\t\tObject.values(subcommands).length !== 0\n\t\t\t\t? Object.values(subcommands).map((sub) => revertSubcommand(sub, postProcessingFn))\n\t\t\t\t: undefined,\n\t\toptions:\n\t\t\tObject.values(options).length !== 0\n\t\t\t\t? [\n\t\t\t\t\t...Object.values(options).map((option) => revertOption(option)),\n\t\t\t\t\t...Object.values(persistentOptions).map((option) => revertOption(option)),\n\t\t\t\t]\n\t\t\t\t: undefined,\n\t\targs: Object.values(args).length !== 0 ? makeSingleOrArray(Object.values(args)) : undefined,\n\t};\n\treturn postProcessingFn(subcommand, newSubcommand);\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/fig-autocomplete-shared/specMetadata.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Subcommand, convertSubcommand, Initializer } from './convert';\nimport { makeArray, SpecLocationSource } from './utils';\n\ntype FigLoadSpecFn = Fig.LoadSpec extends infer U ? (U extends Function ? U : never) : never;\nexport type LoadSpec<ArgT = ArgMeta, OptionT = OptionMeta, SubcommandT = SubcommandMeta> =\n\t| Fig.SpecLocation[]\n\t| Subcommand<ArgT, OptionT, SubcommandT>\n\t| ((\n\t\t...args: Parameters<FigLoadSpecFn>\n\t) => Promise<Fig.SpecLocation[] | Subcommand<ArgT, OptionT, SubcommandT>>);\n\nexport type OptionMeta = Omit<Fig.Option, 'args' | 'name'>;\nexport type ArgMeta = Omit<Fig.Arg, 'template' | 'generators' | 'loadSpec'> & {\n\tgenerators: Fig.Generator[];\n\tloadSpec?: LoadSpec<ArgMeta, OptionMeta, SubcommandMeta>;\n};\n\ntype SubcommandMetaExcludes =\n\t| 'subcommands'\n\t| 'options'\n\t| 'loadSpec'\n\t| 'persistentOptions'\n\t| 'args'\n\t| 'name';\nexport type SubcommandMeta = Omit<Fig.Subcommand, SubcommandMetaExcludes> & {\n\tloadSpec?: LoadSpec<ArgMeta, OptionMeta, SubcommandMeta>;\n};\n\nexport function convertLoadSpec<ArgT, OptionT, SubcommandT>(\n\tloadSpec: Fig.LoadSpec,\n\tinitialize: Initializer<ArgT, OptionT, SubcommandT>\n): LoadSpec<ArgT, OptionT, SubcommandT> {\n\tif (typeof loadSpec === 'string') {\n\t\treturn [{ name: loadSpec, type: SpecLocationSource.GLOBAL }];\n\t}\n\n\tif (typeof loadSpec === 'function') {\n\t\treturn (...args) =>\n\t\t\tloadSpec(...args).then((result) => {\n\t\t\t\tif (Array.isArray(result)) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif ('type' in result) {\n\t\t\t\t\treturn [result];\n\t\t\t\t}\n\t\t\t\treturn convertSubcommand(result, initialize);\n\t\t\t});\n\t}\n\n\treturn convertSubcommand(loadSpec, initialize);\n}\n\nfunction initializeOptionMeta(option: Fig.Option): OptionMeta {\n\treturn option;\n}\n\n// Default initialization functions:\nfunction initializeArgMeta(arg: Fig.Arg): ArgMeta {\n\tconst { template, ...rest } = arg;\n\tconst generators = template ? [{ template }] : makeArray(arg.generators ?? []);\n\treturn {\n\t\t...rest,\n\t\tloadSpec: arg.loadSpec\n\t\t\t? convertLoadSpec(arg.loadSpec, {\n\t\t\t\toption: initializeOptionMeta,\n\t\t\t\tsubcommand: initializeSubcommandMeta,\n\t\t\t\targ: initializeArgMeta,\n\t\t\t})\n\t\t\t: undefined,\n\t\tgenerators: generators.map((generator) => {\n\t\t\tlet { trigger, getQueryTerm } = generator;\n\t\t\tif (generator.template) {\n\t\t\t\tconst templates = makeArray(generator.template);\n\t\t\t\tif (templates.includes('folders') || templates.includes('filepaths')) {\n\t\t\t\t\ttrigger = trigger ?? '/';\n\t\t\t\t\tgetQueryTerm = getQueryTerm ?? '/';\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ...generator, trigger, getQueryTerm };\n\t\t}),\n\t};\n}\n\nfunction initializeSubcommandMeta(subcommand: Fig.Subcommand): SubcommandMeta {\n\treturn {\n\t\t...subcommand,\n\t\tloadSpec: subcommand.loadSpec\n\t\t\t? convertLoadSpec(subcommand.loadSpec, {\n\t\t\t\tsubcommand: initializeSubcommandMeta,\n\t\t\t\toption: initializeOptionMeta,\n\t\t\t\targ: initializeArgMeta,\n\t\t\t})\n\t\t\t: undefined,\n\t};\n}\n\nexport const initializeDefault: Initializer<ArgMeta, OptionMeta, SubcommandMeta> = {\n\tsubcommand: initializeSubcommandMeta,\n\toption: initializeOptionMeta,\n\targ: initializeArgMeta,\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/fig-autocomplete-shared/utils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function makeArray<T>(object: T | T[]): T[] {\n\treturn Array.isArray(object) ? object : [object];\n}\n\nexport enum SpecLocationSource {\n\tGLOBAL = 'global',\n\tLOCAL = 'local',\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/figInterface.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { ArgumentParserResult, parseArguments } from './autocomplete-parser/parseArguments';\nimport type { FigState } from './autocomplete/fig/hooks';\nimport { createGeneratorState } from './autocomplete/state/generators';\nimport { Visibility, type AutocompleteState } from './autocomplete/state/types';\nimport { SuggestionFlag } from './shared/utils';\nimport { getCommand, type Command } from './shell-parser/command';\nimport { createCompletionItem } from '../helpers/completionItem';\nimport { TokenType } from '../tokens';\nimport type { ICompletionResource } from '../types';\nimport { osIsWindows } from '../helpers/os';\nimport { removeAnyFileExtension } from '../helpers/file';\nimport type { EnvironmentVariable } from './api-bindings/types';\nimport { asArray, availableSpecs } from '../terminalSuggestMain';\nimport { IFigExecuteExternals } from './execute';\n\nexport interface IFigSpecSuggestionsResult {\n\tfilesRequested: boolean;\n\tfoldersRequested: boolean;\n\tfileExtensions?: string[];\n\thasCurrentArg: boolean;\n\titems: vscode.TerminalCompletionItem[];\n}\n\nexport async function getFigSuggestions(\n\tspecs: Fig.Spec[],\n\tterminalContext: { commandLine: string; cursorPosition: number },\n\tavailableCommands: ICompletionResource[],\n\tprefix: string,\n\ttokenType: TokenType,\n\tshellIntegrationCwd: vscode.Uri | undefined,\n\tenv: Record<string, string>,\n\tname: string,\n\tprecedingText: string,\n\texecuteExternals: IFigExecuteExternals,\n\ttoken?: vscode.CancellationToken,\n): Promise<IFigSpecSuggestionsResult> {\n\tconst result: IFigSpecSuggestionsResult = {\n\t\tfilesRequested: false,\n\t\tfoldersRequested: false,\n\t\thasCurrentArg: false,\n\t\titems: [],\n\t};\n\tfor (const spec of specs) {\n\t\tconst specLabels = getFigSuggestionLabel(spec);\n\n\t\tif (!specLabels) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const specLabel of specLabels) {\n\t\t\tconst availableCommand = (osIsWindows()\n\t\t\t\t? availableCommands.find(command => (typeof command.label === 'string' ? command.label : command.label.label).match(new RegExp(`${specLabel}(\\\\.[^ ]+)?$`)))\n\t\t\t\t: availableCommands.find(command => (typeof command.label === 'string' ? command.label : command.label.label) === (specLabel)));\n\t\t\tif (!availableCommand || (token && token.isCancellationRequested)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// push it to the completion items\n\t\t\tif (tokenType === TokenType.Command) {\n\t\t\t\tif (availableCommand.kind !== vscode.TerminalCompletionItemKind.Alias) {\n\t\t\t\t\tconst description = getFixSuggestionDescription(spec);\n\t\t\t\t\tresult.items.push(createCompletionItem(\n\t\t\t\t\t\tterminalContext.cursorPosition,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: { label: specLabel, description },\n\t\t\t\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tavailableCommand.detail\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst commandAndAliases = (osIsWindows()\n\t\t\t\t? availableCommands.filter(command => specLabel === removeAnyFileExtension(command.definitionCommand ?? (typeof command.label === 'string' ? command.label : command.label.label)))\n\t\t\t\t: availableCommands.filter(command => specLabel === (command.definitionCommand ?? (typeof command.label === 'string' ? command.label : command.label.label))));\n\t\t\tif (\n\t\t\t\t!(osIsWindows()\n\t\t\t\t\t? commandAndAliases.some(e => precedingText.startsWith(`${removeAnyFileExtension((typeof e.label === 'string' ? e.label : e.label.label))} `))\n\t\t\t\t\t: commandAndAliases.some(e => precedingText.startsWith(`${typeof e.label === 'string' ? e.label : e.label.label} `)))\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst actualSpec = availableCommand.definitionCommand ? availableSpecs.find(s => s.name === availableCommand.definitionCommand) : spec;\n\t\t\tif (!actualSpec) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst completionItemResult = await getFigSpecSuggestions(actualSpec, terminalContext, prefix, shellIntegrationCwd, env, name, executeExternals, token);\n\t\t\tresult.hasCurrentArg ||= !!completionItemResult?.hasCurrentArg;\n\t\t\tif (completionItemResult) {\n\t\t\t\tresult.filesRequested ||= completionItemResult.filesRequested;\n\t\t\t\tresult.foldersRequested ||= completionItemResult.foldersRequested;\n\t\t\t\tresult.fileExtensions ||= completionItemResult.fileExtensions;\n\t\t\t\tif (completionItemResult.items) {\n\t\t\t\t\tresult.items.push(...completionItemResult.items);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n\nasync function getFigSpecSuggestions(\n\tspec: Fig.Spec,\n\tterminalContext: { commandLine: string; cursorPosition: number },\n\tprefix: string,\n\tshellIntegrationCwd: vscode.Uri | undefined,\n\tenv: Record<string, string>,\n\tname: string,\n\texecuteExternals: IFigExecuteExternals,\n\ttoken?: vscode.CancellationToken,\n): Promise<IFigSpecSuggestionsResult | undefined> {\n\tlet filesRequested = false;\n\tlet foldersRequested = false;\n\tlet fileExtensions: string[] | undefined;\n\n\tconst command = getCommand(terminalContext.commandLine, {}, terminalContext.cursorPosition);\n\tif (!command || !shellIntegrationCwd) {\n\t\treturn;\n\t}\n\tconst shellContext: Fig.ShellContext = {\n\t\tenvironmentVariables: env,\n\t\tcurrentWorkingDirectory: shellIntegrationCwd.fsPath,\n\t\tsshPrefix: '',\n\t\tcurrentProcess: name,\n\t\t// TODO: pass in aliases\n\t};\n\tconst parsedArguments: ArgumentParserResult = await parseArguments(command, shellContext, spec, executeExternals);\n\n\tconst items: vscode.TerminalCompletionItem[] = [];\n\t// TODO: Pass in and respect cancellation token\n\tconst completionItemResult = await collectCompletionItemResult(command, parsedArguments, prefix, terminalContext, shellIntegrationCwd, env, items, executeExternals);\n\tif (token?.isCancellationRequested) {\n\t\treturn undefined;\n\t}\n\n\tif (completionItemResult) {\n\t\tfilesRequested = completionItemResult.filesRequested;\n\t\tfoldersRequested = completionItemResult.foldersRequested;\n\t\tfileExtensions = completionItemResult.fileExtensions;\n\t}\n\n\treturn {\n\t\tfilesRequested,\n\t\tfoldersRequested,\n\t\tfileExtensions,\n\t\thasCurrentArg: !!parsedArguments.currentArg,\n\t\titems,\n\t};\n}\n\nexport type SpecArg = Fig.Arg | Fig.Suggestion | Fig.Option | string;\n\nexport async function collectCompletionItemResult(\n\tcommand: Command,\n\tparsedArguments: ArgumentParserResult,\n\tprefix: string,\n\tterminalContext: { commandLine: string; cursorPosition: number },\n\tshellIntegrationCwd: vscode.Uri | undefined,\n\tenv: Record<string, string>,\n\titems: vscode.TerminalCompletionItem[],\n\texecuteExternals: IFigExecuteExternals\n): Promise<{ filesRequested: boolean; foldersRequested: boolean; fileExtensions: string[] | undefined } | undefined> {\n\tlet filesRequested = false;\n\tlet foldersRequested = false;\n\tlet fileExtensions: string[] | undefined;\n\n\tconst addSuggestions = async (specArgs: SpecArg[] | Record<string, SpecArg> | undefined, kind: vscode.TerminalCompletionItemKind, parsedArguments?: ArgumentParserResult) => {\n\t\tif (kind === vscode.TerminalCompletionItemKind.Argument && parsedArguments?.currentArg?.generators) {\n\t\t\tconst generators = parsedArguments.currentArg.generators;\n\t\t\tconst initialFigState: FigState = {\n\t\t\t\tbuffer: terminalContext.commandLine,\n\t\t\t\tcursorLocation: terminalContext.cursorPosition,\n\t\t\t\tcwd: shellIntegrationCwd?.fsPath ?? null,\n\t\t\t\tprocessUserIsIn: null,\n\t\t\t\tsshContextString: null,\n\t\t\t\taliases: {},\n\t\t\t\tenvironmentVariables: env,\n\t\t\t\tshellContext: {\n\t\t\t\t\tcurrentWorkingDirectory: shellIntegrationCwd?.fsPath,\n\t\t\t\t\tenvironmentVariables: convertEnvRecordToArray(env),\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst state: AutocompleteState = {\n\t\t\t\tfigState: initialFigState,\n\t\t\t\tparserResult: parsedArguments,\n\t\t\t\tgeneratorStates: [],\n\t\t\t\tcommand,\n\n\t\t\t\tvisibleState: Visibility.HIDDEN_UNTIL_KEYPRESS,\n\t\t\t\tlastInsertedSuggestion: null,\n\t\t\t\tjustInserted: false,\n\n\t\t\t\tselectedIndex: 0,\n\t\t\t\tsuggestions: [],\n\t\t\t\thasChangedIndex: false,\n\n\t\t\t\thistoryModeEnabled: false,\n\t\t\t\tfuzzySearchEnabled: false,\n\t\t\t\tuserFuzzySearchEnabled: false,\n\t\t\t};\n\t\t\tconst s = createGeneratorState(state, executeExternals);\n\t\t\tconst generatorResults = s.triggerGenerators(parsedArguments, executeExternals);\n\t\t\tfor (const generatorResult of generatorResults) {\n\t\t\t\tfor (const item of (await generatorResult?.request) ?? []) {\n\t\t\t\t\tif (item.type === 'file') {\n\t\t\t\t\t\tfilesRequested = true;\n\t\t\t\t\t\tfoldersRequested = true;\n\t\t\t\t\t\tfileExtensions = item._internal?.fileExtensions as string[] | undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (item.type === 'folder') {\n\t\t\t\t\t\tfoldersRequested = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!item.name) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst suggestionLabels = getFigSuggestionLabel(item);\n\t\t\t\t\tif (!suggestionLabels) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const label of suggestionLabels) {\n\t\t\t\t\t\titems.push(createCompletionItem(\n\t\t\t\t\t\t\tterminalContext.cursorPosition,\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\t{ label },\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\ttypeof item === 'string' ? item : item.description,\n\t\t\t\t\t\t\tkind\n\t\t\t\t\t\t));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const generator of generators) {\n\t\t\t\t// Only some templates are supported, these are applied generally before calling\n\t\t\t\t// into the general fig code for now\n\t\t\t\tif (generator.template) {\n\t\t\t\t\tconst templates = Array.isArray(generator.template) ? generator.template : [generator.template];\n\t\t\t\t\tfor (const template of templates) {\n\t\t\t\t\t\tif (template === 'filepaths') {\n\t\t\t\t\t\t\tfilesRequested = true;\n\t\t\t\t\t\t} else if (template === 'folders') {\n\t\t\t\t\t\t\tfoldersRequested = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!specArgs) {\n\t\t\treturn { filesRequested, foldersRequested };\n\t\t}\n\t\tconst flagsToExclude = kind === vscode.TerminalCompletionItemKind.Flag ? parsedArguments?.passedOptions.map(option => option.name).flat() : undefined;\n\n\t\tfunction addItem(label: string, item: SpecArg) {\n\t\t\tif (flagsToExclude?.includes(label)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet itemKind = kind;\n\t\t\tconst lastArgType: string | undefined = parsedArguments?.annotations.at(-1)?.type;\n\t\t\tif (lastArgType === 'subcommand_arg') {\n\t\t\t\tif (typeof item === 'object' && 'args' in item && (asArray(item.args ?? [])).length > 0) {\n\t\t\t\t\titemKind = vscode.TerminalCompletionItemKind.Option;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (lastArgType === 'option_arg') {\n\t\t\t\titemKind = vscode.TerminalCompletionItemKind.OptionValue;\n\t\t\t}\n\n\t\t\t// Add <argName> for every argument\n\t\t\tlet detail: string | undefined;\n\t\t\tif (typeof item === 'object' && 'args' in item) {\n\t\t\t\tconst args = asArray(item.args);\n\t\t\t\tif (args.every(e => !!e?.name)) {\n\t\t\t\t\tif (args.length > 0) {\n\t\t\t\t\t\tdetail = ' ' + args.map(e => {\n\t\t\t\t\t\t\tlet result = `<${e!.name}>`;\n\t\t\t\t\t\t\tif (e?.isOptional) {\n\t\t\t\t\t\t\t\tresult = `[${result}]`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}).join(' ');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titems.push(\n\t\t\t\tcreateCompletionItem(\n\t\t\t\t\tterminalContext.cursorPosition,\n\t\t\t\t\tprefix,\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: detail ? { label, detail } : label\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\ttypeof item === 'string' ? item : item.description,\n\t\t\t\t\titemKind,\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tif (Array.isArray(specArgs)) {\n\t\t\tfor (const item of specArgs) {\n\t\t\t\tconst suggestionLabels = getFigSuggestionLabel(item);\n\t\t\t\tif (!suggestionLabels?.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (const label of suggestionLabels) {\n\t\t\t\t\taddItem(label, item);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [label, item] of Object.entries(specArgs)) {\n\t\t\t\taddItem(label, item);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (parsedArguments.suggestionFlags & SuggestionFlag.Args) {\n\t\tawait addSuggestions(parsedArguments.currentArg?.suggestions, vscode.TerminalCompletionItemKind.Argument, parsedArguments);\n\t}\n\tif (parsedArguments.suggestionFlags & SuggestionFlag.Subcommands) {\n\t\tawait addSuggestions(parsedArguments.completionObj.subcommands, vscode.TerminalCompletionItemKind.Method);\n\t}\n\tif (parsedArguments.suggestionFlags & SuggestionFlag.Options) {\n\t\tawait addSuggestions(parsedArguments.completionObj.options, vscode.TerminalCompletionItemKind.Flag, parsedArguments);\n\t}\n\n\treturn { filesRequested, foldersRequested, fileExtensions };\n}\n\nfunction convertEnvRecordToArray(env: Record<string, string>): EnvironmentVariable[] {\n\treturn Object.entries(env).map(([key, value]) => ({ key, value }));\n}\n\nexport function getFixSuggestionDescription(spec: Fig.Spec): string {\n\tif ('description' in spec) {\n\t\treturn spec.description ?? '';\n\t}\n\treturn '';\n}\n\nexport function getFigSuggestionLabel(spec: Fig.Spec | Fig.Arg | Fig.Suggestion | string): string[] | undefined {\n\tif (typeof spec === 'string') {\n\t\treturn [spec];\n\t}\n\tif (typeof spec.name === 'string') {\n\t\treturn [spec.name];\n\t}\n\tif (!Array.isArray(spec.name) || spec.name.length === 0) {\n\t\treturn;\n\t}\n\treturn spec.name;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shared/errors.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const createErrorInstance = (name: string) =>\n\tclass extends Error {\n\t\tconstructor(message?: string) {\n\t\t\tsuper(message);\n\t\t\tthis.name = `Fig.${name}`;\n\t\t}\n\t};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shared/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as Errors from './errors.js';\nimport * as Internal from './internal.js';\nimport * as Utils from './utils.js';\n\nexport { Errors, Internal, Utils };\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shared/internal.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Internal, Metadata } from '../fig-autocomplete-shared';\n\nexport type SpecLocation = Fig.SpecLocation & {\n\tdiffVersionedFile?: string;\n};\n\ntype Override<T, S> = Omit<T, keyof S> & S;\nexport type SuggestionType = Fig.SuggestionType | 'history' | 'auto-execute';\nexport type Suggestion<ArgT = Metadata.ArgMeta> = Override<\n\tFig.Suggestion,\n\t{\n\t\ttype?: SuggestionType;\n\t\t// Whether or not to add a space after suggestion, e.g. if user completes a\n\t\t// subcommand that takes a mandatory arg.\n\t\tshouldAddSpace?: boolean;\n\t\t// Whether or not to add a separator after suggestion, e.g. for options with requiresSeparator\n\t\tseparatorToAdd?: string;\n\t\targs?: ArgT[];\n\t\t// Generator information to determine whether suggestion should be filtered.\n\t\tgenerator?: Fig.Generator;\n\t\tgetQueryTerm?: (x: string) => string;\n\t\t// fuzzyMatchData?: (Result | null)[];\n\t\toriginalType?: SuggestionType;\n\t}\n>;\n\nexport type Arg = Metadata.ArgMeta;\nexport type Option = Internal.Option<Metadata.ArgMeta, Metadata.OptionMeta>;\nexport type Subcommand = Internal.Subcommand<\n\tMetadata.ArgMeta,\n\tMetadata.OptionMeta,\n\tMetadata.SubcommandMeta\n>;\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shared/test/utils.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { deepStrictEqual, ok } from 'node:assert';\nimport {\n\tmakeArray,\n\tmakeArrayIfExists,\n\tlongestCommonPrefix,\n\tcompareNamedObjectsAlphabetically,\n\tfieldsAreEqual,\n} from '../utils';\n\nfunction expect<T>(a: T): { toEqual: (b: T) => void } {\n\treturn {\n\t\ttoEqual: (b: T) => {\n\t\t\tdeepStrictEqual(a, b);\n\t\t}\n\t};\n}\n\nsuite('fig/shared/ fieldsAreEqual', () => {\n\ttest('should return immediately if two values are the same', () => {\n\t\texpect(fieldsAreEqual('hello', 'hello', [])).toEqual(true);\n\t\texpect(fieldsAreEqual('hello', 'hell', [])).toEqual(false);\n\t\texpect(fieldsAreEqual(1, 1, ['valueOf'])).toEqual(true);\n\t\texpect(fieldsAreEqual(null, null, [])).toEqual(true);\n\t\texpect(fieldsAreEqual(null, undefined, [])).toEqual(false);\n\t\texpect(fieldsAreEqual(undefined, undefined, [])).toEqual(true);\n\t\texpect(fieldsAreEqual(null, 'hello', [])).toEqual(false);\n\t\texpect(fieldsAreEqual(100, null, [])).toEqual(false);\n\t\texpect(fieldsAreEqual({}, {}, [])).toEqual(true);\n\t\texpect(\n\t\t\tfieldsAreEqual(\n\t\t\t\t() => { },\n\t\t\t\t() => { },\n\t\t\t\t[],\n\t\t\t),\n\t\t).toEqual(false);\n\t});\n\n\ttest('should return true if fields are equal', () => {\n\t\tconst fn = () => { };\n\t\texpect(\n\t\t\tfieldsAreEqual(\n\t\t\t\t{\n\t\t\t\t\ta: 'hello',\n\t\t\t\t\tb: 100,\n\t\t\t\t\tc: undefined,\n\t\t\t\t\td: false,\n\t\t\t\t\te: fn,\n\t\t\t\t\tf: { fa: true, fb: { fba: true } },\n\t\t\t\t\tg: null,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ta: 'hello',\n\t\t\t\t\tb: 100,\n\t\t\t\t\tc: undefined,\n\t\t\t\t\td: false,\n\t\t\t\t\te: fn,\n\t\t\t\t\tf: { fa: true, fb: { fba: true } },\n\t\t\t\t\tg: null,\n\t\t\t\t},\n\t\t\t\t['a', 'b', 'c', 'd', 'e', 'f', 'g'],\n\t\t\t),\n\t\t).toEqual(true);\n\t\texpect(fieldsAreEqual({ a: {} }, { a: {} }, ['a'])).toEqual(true);\n\t});\n\n\ttest('should return false if any field is not equal or fields are not specified', () => {\n\t\texpect(fieldsAreEqual({ a: null }, { a: {} }, ['a'])).toEqual(false);\n\t\texpect(fieldsAreEqual({ a: undefined }, { a: 'hello' }, ['a'])).toEqual(\n\t\t\tfalse,\n\t\t);\n\t\texpect(fieldsAreEqual({ a: false }, { a: true }, ['a'])).toEqual(false);\n\t\texpect(\n\t\t\tfieldsAreEqual(\n\t\t\t\t{ a: { b: { c: 'hello' } } },\n\t\t\t\t{ a: { b: { c: 'hell' } } },\n\t\t\t\t['a'],\n\t\t\t),\n\t\t).toEqual(false);\n\t\texpect(fieldsAreEqual({ a: 'true' }, { b: 'true' }, [])).toEqual(false);\n\t});\n});\n\nsuite('fig/shared/ makeArray', () => {\n\ttest('should transform an object into an array', () => {\n\t\texpect(makeArray(true)).toEqual([true]);\n\t});\n\n\ttest('should not transform arrays with one value', () => {\n\t\texpect(makeArray([true])).toEqual([true]);\n\t});\n\n\ttest('should not transform arrays with multiple values', () => {\n\t\texpect(makeArray([true, false])).toEqual([true, false]);\n\t});\n});\n\nsuite('fig/shared/ makeArrayIfExists', () => {\n\ttest('works', () => {\n\t\texpect(makeArrayIfExists(null)).toEqual(null);\n\t\texpect(makeArrayIfExists(undefined)).toEqual(null);\n\t\texpect(makeArrayIfExists('a')).toEqual(['a']);\n\t\texpect(makeArrayIfExists(['a'])).toEqual(['a']);\n\t});\n});\n\nsuite('fig/shared/ longestCommonPrefix', () => {\n\ttest('should return the shared match', () => {\n\t\texpect(longestCommonPrefix(['foo', 'foo bar', 'foo hello world'])).toEqual(\n\t\t\t'foo',\n\t\t);\n\t});\n\n\ttest('should return nothing if not all items starts by the same chars', () => {\n\t\texpect(longestCommonPrefix(['foo', 'foo bar', 'hello world'])).toEqual('');\n\t});\n});\n\nsuite('fig/shared/ compareNamedObjectsAlphabetically', () => {\n\ttest('should return 1 to sort alphabetically z against b for string', () => {\n\t\tok(compareNamedObjectsAlphabetically('z', 'b') > 0);\n\t});\n\n\ttest('should return 1 to sort alphabetically z against b for object with name', () => {\n\t\tok(compareNamedObjectsAlphabetically({ name: 'z' }, { name: 'b' }) > 0);\n\t});\n\n\ttest('should return 1 to sort alphabetically c against x for object with name', () => {\n\t\tok(compareNamedObjectsAlphabetically({ name: 'c' }, { name: 'x' }) < 0);\n\t});\n\n\ttest('should return 1 to sort alphabetically z against b for object with name array', () => {\n\t\tok(compareNamedObjectsAlphabetically({ name: ['z'] }, { name: ['b'] }) > 0);\n\t});\n\n\ttest('should return 1 to sort alphabetically c against x for object with name array', () => {\n\t\tok(compareNamedObjectsAlphabetically({ name: ['c'] }, { name: ['x'] }) < 0);\n\t});\n});\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shared/utils.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { osIsWindows } from '../../helpers/os.js';\nimport { createErrorInstance } from './errors.js';\n\n// Use bitwise representation of suggestion flags.\n// See here: https://stackoverflow.com/questions/39359740/what-are-enum-flags-in-typescript/\n//\n// Given a number `flags` we can test `if (flags & Subcommands)` to see if we\n// should be suggesting subcommands.\n//\n// This is more maintainable in the future if we add more options (e.g. if we\n// distinguish between subcommand args and option args) as we can just add a\n// number here instead of passing 3+ boolean flags everywhere.\nexport enum SuggestionFlag {\n\tNone = 0,\n\tSubcommands = 1 << 0,\n\tOptions = 1 << 1,\n\tArgs = 1 << 2,\n\tAny = (1 << 2) | (1 << 1) | (1 << 0),\n}\n\n// Combination of suggestion flags.\nexport type SuggestionFlags = number;\n\nexport enum SpecLocationSource {\n\tGLOBAL = 'global',\n\tLOCAL = 'local',\n}\n\nexport function makeArray<T>(object: T | T[]): T[] {\n\treturn Array.isArray(object) ? object : [object];\n}\n\nexport function firstMatchingToken(\n\tstr: string,\n\tchars: Set<string>,\n): string | undefined {\n\tfor (const char of str) {\n\t\tif (chars.has(char)) {\n\t\t\treturn char;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function makeArrayIfExists<T>(\n\tobj: T | T[] | null | undefined,\n): T[] | null {\n\treturn !obj ? null : makeArray(obj);\n}\n\nexport function isOrHasValue(\n\tobj: string | Array<string>,\n\tvalueToMatch: string,\n) {\n\treturn Array.isArray(obj) ? obj.includes(valueToMatch) : obj === valueToMatch;\n}\n\nexport const TimeoutError = createErrorInstance('TimeoutError');\n\nexport async function withTimeout<T>(\n\ttime: number,\n\tpromise: Promise<T>,\n): Promise<T> {\n\tlet timeout: NodeJS.Timeout;\n\treturn Promise.race<Promise<T>>([\n\t\tpromise,\n\t\tnew Promise<T>((_, reject) => {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\treject(new TimeoutError('Function timed out'));\n\t\t\t}, time);\n\t\t}),\n\t]).finally(() => {\n\t\tclearTimeout(timeout);\n\t});\n}\n\nexport const longestCommonPrefix = (strings: string[]): string => {\n\tconst sorted = strings.sort();\n\n\tconst { 0: firstItem, [sorted.length - 1]: lastItem } = sorted;\n\tconst firstItemLength = firstItem.length;\n\n\tlet i = 0;\n\n\twhile (i < firstItemLength && firstItem.charAt(i) === lastItem.charAt(i)) {\n\t\ti += 1;\n\t}\n\n\treturn firstItem.slice(0, i);\n};\n\nexport function findLast<T>(\n\tvalues: T[],\n\tpredicate: (v: T) => boolean,\n): T | undefined {\n\tfor (let i = values.length - 1; i >= 0; i -= 1) {\n\t\tif (predicate(values[i])) {\n\t\t\treturn values[i];\n\t\t}\n\t}\n\treturn undefined;\n}\n\ntype NamedObject =\n\t| {\n\t\tname?: string[] | string;\n\t}\n\t| string;\n\nexport function compareNamedObjectsAlphabetically<\n\tA extends NamedObject,\n\tB extends NamedObject,\n>(a: A, b: B): number {\n\tconst getName = (object: NamedObject): string =>\n\t\ttypeof object === 'string' ? object : makeArray(object.name)[0] || '';\n\treturn getName(a).localeCompare(getName(b));\n}\n\nexport const sleep = (ms: number): Promise<void> =>\n\tnew Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n\nexport type Func<S extends unknown[], T> = (...args: S) => T;\ntype EqualFunc<T> = (args: T, newArgs: T) => boolean;\n\n// Memoize a function (cache the most recent result based on the most recent args)\n// Optionally can pass an equals function to determine whether or not the old arguments\n// and new arguments are equal.\n//\n// e.g. let fn = (a, b) => a * 2\n//\n// If we memoize this then we recompute every time a or b changes. if we memoize with\n// isEqual = ([a, b], [newA, newB]) => newA === a\n// then we will only recompute when a changes.\nexport function memoizeOne<S extends unknown[], T>(\n\tfn: Func<S, T>,\n\tisEqual?: EqualFunc<S>,\n): Func<S, T> {\n\tlet lastArgs = [] as unknown[] as S;\n\tlet lastResult: T;\n\tlet hasBeenCalled = false;\n\tconst areArgsEqual: EqualFunc<S> =\n\t\tisEqual || ((args, newArgs) => args.every((x, idx) => x === newArgs[idx]));\n\treturn (...args: S): T => {\n\t\tif (!hasBeenCalled || !areArgsEqual(lastArgs, args)) {\n\t\t\thasBeenCalled = true;\n\t\t\tlastArgs = [...args] as unknown[] as S;\n\t\t\tlastResult = fn(...args);\n\t\t}\n\t\treturn lastResult;\n\t};\n}\n\nfunction isNonNullObj(v: unknown): v is Record<string, unknown> {\n\treturn typeof v === 'object' && v !== null;\n}\n\nfunction isEmptyObject(v: unknown): v is Record<string, never> {\n\treturn isNonNullObj(v) && Object.keys(v).length === 0;\n}\n\n// TODO: to fix this we may want to have the default fields as Object.keys(A)\n/**\n * If no fields are specified and A,B are not equal primitives/empty objects, this returns false\n * even if the objects are actually equal.\n */\nexport function fieldsAreEqual<T>(A: T, B: T, fields: (keyof T)[]): boolean {\n\tif (A === B || (isEmptyObject(A) && isEmptyObject(B))) {\n\t\treturn true;\n\t}\n\tif (!fields.length || !A || !B) {\n\t\treturn false;\n\t}\n\treturn fields.every((field) => {\n\t\tconst aField = A[field];\n\t\tconst bField = B[field];\n\n\t\tif (typeof aField !== typeof bField) {\n\t\t\treturn false;\n\t\t}\n\t\tif (isNonNullObj(aField) && isNonNullObj(bField)) {\n\t\t\tif (Object.keys(aField).length !== Object.keys(bField).length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn fieldsAreEqual(aField, bField, Object.keys(aField) as never[]);\n\t\t}\n\t\treturn aField === bField;\n\t});\n}\n\nexport const splitPath = (path: string): [string, string] => {\n\tconst idx = path.lastIndexOf('/') + 1;\n\treturn [path.slice(0, idx), path.slice(idx)];\n};\n\nexport const ensureTrailingSlash = (str: string) =>\n\tstr.endsWith('/') ? str : `${str}/`;\n\n// Outputs CWD with trailing `/`\nexport const getCWDForFilesAndFolders = (\n\tcwd: string | null,\n\tsearchTerm: string,\n): string => {\n\tif (cwd === null) {\n\t\treturn '/';\n\t}\n\tconst [dirname] = splitPath(searchTerm);\n\n\tif (dirname === '') {\n\t\treturn ensureTrailingSlash(cwd);\n\t}\n\n\treturn dirname.startsWith('~/') || dirname.startsWith('/')\n\t\t? dirname\n\t\t: `${cwd}/${dirname}`;\n};\n\nexport function localProtocol(domain: string, path: string) {\n\tlet modifiedDomain;\n\t//TODO@meganrogge\n\t// if (domain === 'path' && !window.fig?.constants?.newUriFormat) {\n\tif (domain === 'path') {\n\t\tmodifiedDomain = '';\n\t} else {\n\t\tmodifiedDomain = domain;\n\t}\n\n\tif (osIsWindows()) {\n\t\treturn `https://fig.${modifiedDomain}/${path}`;\n\t}\n\treturn `fig://${modifiedDomain}/${path}`;\n}\n\ntype ExponentialBackoffOptions = {\n\tattemptTimeout: number; // The maximum time in milliseconds to wait for a function to execute.\n\tbaseDelay: number; // The initial delay in milliseconds.\n\tmaxRetries: number; // The maximum number of retries.\n\tjitter: number; // A random factor to add to the delay on each retry.\n};\n\nexport async function exponentialBackoff<T>(\n\toptions: ExponentialBackoffOptions,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\tlet retries = 0;\n\tlet delay = options.baseDelay;\n\n\twhile (retries < options.maxRetries) {\n\t\ttry {\n\t\t\treturn await withTimeout(options.attemptTimeout, fn());\n\t\t} catch (_error) {\n\t\t\tretries += 1;\n\t\t\tdelay *= 2;\n\t\t\tdelay += Math.floor(Math.random() * options.jitter);\n\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\tsetTimeout(resolve, delay);\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow new Error('Failed to execute function after all retries.');\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shell-parser/command.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { NodeType, BaseNode, createTextNode, parse } from './parser.js';\nimport { ConvertCommandError, SubstituteAliasError } from './errors.js';\n\nexport * from './errors.js';\n\nexport type Token = {\n\ttext: string;\n\tnode: BaseNode;\n\toriginalNode: BaseNode;\n};\n\nexport type Command = {\n\ttokens: Token[];\n\ttree: BaseNode;\n\n\toriginalTree: BaseNode;\n};\n\nexport type AliasMap = Record<string, string>;\n\nconst descendantAtIndex = (\n\tnode: BaseNode,\n\tindex: number,\n\ttype?: NodeType,\n): BaseNode | null => {\n\tif (node.startIndex <= index && index <= node.endIndex) {\n\t\tconst descendant = node.children\n\t\t\t.map((child) => descendantAtIndex(child, index, type))\n\t\t\t.find(Boolean);\n\t\tif (descendant) {\n\t\t\treturn descendant;\n\t\t}\n\t\treturn !type || node.type === type ? node : null;\n\t}\n\treturn null;\n};\n\nexport const createTextToken = (\n\tcommand: Command,\n\tindex: number,\n\ttext: string,\n\toriginalNode?: BaseNode,\n): Token => {\n\tconst { tree, originalTree, tokens } = command;\n\n\tlet indexDiff = 0;\n\tconst tokenIndex = tokens.findIndex(\n\t\t(token) => index < token.originalNode.startIndex,\n\t);\n\tconst token = tokens[tokenIndex];\n\tif (tokenIndex === 0) {\n\t\tindexDiff = token.node.startIndex - token.originalNode.startIndex;\n\t} else if (tokenIndex === -1) {\n\t\tindexDiff = tree.text.length - originalTree.text.length;\n\t} else {\n\t\tindexDiff = token.node.endIndex - token.originalNode.endIndex;\n\t}\n\n\treturn {\n\t\toriginalNode:\n\t\t\toriginalNode || createTextNode(originalTree.text, index, text),\n\t\tnode: createTextNode(text, index + indexDiff, text),\n\t\ttext,\n\t};\n};\n\nconst convertCommandNodeToCommand = (tree: BaseNode): Command => {\n\tif (tree.type !== NodeType.Command) {\n\t\tthrow new ConvertCommandError('Cannot get tokens from non-command node');\n\t}\n\n\tconst command = {\n\t\toriginalTree: tree,\n\t\ttree,\n\t\ttokens: tree.children.map((child) => ({\n\t\t\toriginalNode: child,\n\t\t\tnode: child,\n\t\t\ttext: child.innerText,\n\t\t})),\n\t};\n\n\tconst { children, endIndex, text } = tree;\n\tif (\n\t\t+(children.length === 0 || children[children.length - 1].endIndex) <\n\t\tendIndex &&\n\t\ttext.endsWith(' ')\n\t) {\n\t\tcommand.tokens.push(createTextToken(command, endIndex, ''));\n\t}\n\treturn command;\n};\n\nconst shiftByAmount = (node: BaseNode, shift: number): BaseNode => ({\n\t...node,\n\tstartIndex: node.startIndex + shift,\n\tendIndex: node.endIndex + shift,\n\tchildren: node.children.map((child) => shiftByAmount(child, shift)),\n});\n\nexport const substituteAlias = (\n\tcommand: Command,\n\ttoken: Token,\n\talias: string,\n): Command => {\n\tif (command.tokens.find((t) => t === token) === undefined) {\n\t\tthrow new SubstituteAliasError('Token not in command');\n\t}\n\tconst { tree } = command;\n\n\tconst preAliasChars = token.node.startIndex - tree.startIndex;\n\tconst postAliasChars = token.node.endIndex - tree.endIndex;\n\n\tconst preAliasText = `${tree.text.slice(0, preAliasChars)}`;\n\tconst postAliasText = postAliasChars\n\t\t? `${tree.text.slice(postAliasChars)}`\n\t\t: '';\n\n\tconst commandBuffer = `${preAliasText}${alias}${postAliasText}`;\n\n\t// Parse command and shift indices to align with original command.\n\tconst parseTree = shiftByAmount(parse(commandBuffer), tree.startIndex);\n\n\tif (parseTree.children.length !== 1) {\n\t\tthrow new SubstituteAliasError('Invalid alias');\n\t}\n\n\tconst newCommand = convertCommandNodeToCommand(parseTree.children[0]);\n\n\tconst [aliasStart, aliasEnd] = [\n\t\ttoken.node.startIndex,\n\t\ttoken.node.startIndex + alias.length,\n\t];\n\n\tlet tokenIndexDiff = 0;\n\tlet lastTokenInAlias = false;\n\t// Map tokens from new command back to old command to attributing the correct original nodes.\n\tconst tokens = newCommand.tokens.map((newToken, index) => {\n\t\tconst tokenInAlias =\n\t\t\taliasStart < newToken.node.endIndex &&\n\t\t\tnewToken.node.startIndex < aliasEnd;\n\t\ttokenIndexDiff += tokenInAlias && lastTokenInAlias ? 1 : 0;\n\t\tconst { originalNode } = command.tokens[index - tokenIndexDiff];\n\t\tlastTokenInAlias = tokenInAlias;\n\t\treturn { ...newToken, originalNode };\n\t});\n\n\tif (newCommand.tokens.length - command.tokens.length !== tokenIndexDiff) {\n\t\tthrow new SubstituteAliasError('Error substituting alias');\n\t}\n\n\treturn {\n\t\toriginalTree: command.originalTree,\n\t\ttree: newCommand.tree,\n\t\ttokens,\n\t};\n};\n\nexport const expandCommand = (\n\tcommand: Command,\n\t_cursorIndex: number,\n\taliases: AliasMap,\n): Command => {\n\tlet expanded = command;\n\tconst usedAliases = new Set();\n\n\t// Check for aliases\n\tlet [name] = expanded.tokens;\n\twhile (\n\t\texpanded.tokens.length > 1 &&\n\t\tname &&\n\t\taliases[name.text] &&\n\t\t!usedAliases.has(name.text)\n\t) {\n\t\t// Remove quotes\n\t\tconst aliasValue = aliases[name.text].replace(/^'(.*)'$/g, '$1');\n\t\ttry {\n\t\t\texpanded = substituteAlias(expanded, name, aliasValue);\n\t\t} catch (_err) {\n\t\t\t// TODO(refactoring): add logger again\n\t\t\t// console.error('Error substituting alias');\n\t\t}\n\t\tusedAliases.add(name.text);\n\t\t[name] = expanded.tokens;\n\t}\n\n\treturn expanded;\n};\n\nexport const getCommand = (\n\tbuffer: string,\n\taliases: AliasMap,\n\tcursorIndex?: number,\n): Command | null => {\n\tconst index = cursorIndex === undefined ? buffer.length : cursorIndex;\n\tconst parseTree = parse(buffer);\n\tconst commandNode = descendantAtIndex(parseTree, index, NodeType.Command);\n\tif (commandNode === null) {\n\t\treturn null;\n\t}\n\tconst command = convertCommandNodeToCommand(commandNode);\n\treturn expandCommand(command, index, aliases);\n};\n\nconst statements = [\n\tNodeType.Program,\n\tNodeType.CompoundStatement,\n\tNodeType.Subshell,\n\tNodeType.Pipeline,\n\tNodeType.List,\n\tNodeType.Command,\n];\n\nexport const getTopLevelCommands = (parseTree: BaseNode): Command[] => {\n\tif (parseTree.type === NodeType.Command) {\n\t\treturn [convertCommandNodeToCommand(parseTree)];\n\t}\n\tif (!statements.includes(parseTree.type)) {\n\t\treturn [];\n\t}\n\tconst commands: Command[] = [];\n\tfor (let i = 0; i < parseTree.children.length; i += 1) {\n\t\tcommands.push(...getTopLevelCommands(parseTree.children[i]));\n\t}\n\treturn commands;\n};\n\nexport const getAllCommandsWithAlias = (\n\tbuffer: string,\n\taliases: AliasMap,\n): Command[] => {\n\tconst parseTree = parse(buffer);\n\tconst commands = getTopLevelCommands(parseTree);\n\treturn commands.map((command) =>\n\t\texpandCommand(command, command.tree.text.length, aliases),\n\t);\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shell-parser/errors.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createErrorInstance } from '../shared/errors';\n\nexport const SubstituteAliasError = createErrorInstance('SubstituteAliasError');\nexport const ConvertCommandError = createErrorInstance('ConvertCommandError');\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shell-parser/index.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport * from './parser.js';\nexport * from './command.js';\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shell-parser/parser.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Loosely follows the following grammar:\n// terminator = \";\" | \"&\" | \"&;\"\n// literal = string | ansi_c_string | raw_string | expansion | simple_expansion | word\n// concatenation = literal literal\n// command = (concatenation | literal)+\n//\n// variable_name = word\n// subscript = variable_name\"[\"literal\"]\"\n// assignment = (word | subscript)(\"=\" | \"+=\")literal\n// assignment_list = assignment+ command?\n//\n// statement =\n//    | \"{\" (statement terminator)+ \"}\"\n//    | \"(\" statements \")\"\n//    | statement \"||\" statement\n//    | statement \"&&\" statement\n//    | statement \"|\" statement\n//    | statement \"|&\" statement\n//    | command\n//    | assignment_list\n//\n// statements = (statement terminator)* statement terminator?\n// program = statements\n\nexport enum NodeType {\n\tProgram = 'program',\n\n\tAssignmentList = 'assignment_list',\n\tAssignment = 'assignment',\n\tVariableName = 'variable_name',\n\tSubscript = 'subscript',\n\n\tCompoundStatement = 'compound_statement',\n\tSubshell = 'subshell',\n\tCommand = 'command',\n\tPipeline = 'pipeline',\n\tList = 'list',\n\n\t// TODO: implement <(commands)\n\tProcessSubstitution = 'process_substitution',\n\n\t// Primary expressions\n\tConcatenation = 'concatenation',\n\tWord = 'word',\n\tString = 'string',\n\tExpansion = 'expansion',\n\tCommandSubstitution = 'command_substitution',\n\n\t// Leaf Nodes\n\tRawString = 'raw_string',\n\tAnsiCString = 'ansi_c_string',\n\tSimpleExpansion = 'simple_expansion',\n\tSpecialExpansion = 'special_expansion',\n\tArithmeticExpansion = 'arithmetic_expansion',\n}\n\nexport type LiteralNode =\n\t| BaseNode<NodeType.String>\n\t| BaseNode<NodeType.AnsiCString>\n\t| BaseNode<NodeType.RawString>\n\t| BaseNode<NodeType.CommandSubstitution>\n\t| BaseNode<NodeType.Concatenation>\n\t| BaseNode<NodeType.Expansion>\n\t| BaseNode<NodeType.ArithmeticExpansion>\n\t| BaseNode<NodeType.SimpleExpansion>\n\t| BaseNode<NodeType.SpecialExpansion>\n\t| BaseNode<NodeType.Word>;\n\nexport interface BaseNode<Type extends NodeType = NodeType> {\n\ttext: string;\n\t// Unquoted text in node.\n\tinnerText: string;\n\n\tstartIndex: number;\n\tendIndex: number;\n\n\tcomplete: boolean;\n\n\ttype: Type;\n\tchildren: BaseNode[];\n}\n\nexport interface ListNode extends BaseNode {\n\ttype: NodeType.List;\n\toperator: '||' | '&&' | '|' | '|&';\n}\n\nexport interface AssignmentListNode extends BaseNode {\n\ttype: NodeType.AssignmentList;\n\tchildren:\n\t| [...AssignmentNode[], BaseNode<NodeType.Command>]\n\t| AssignmentNode[];\n\thasCommand: boolean;\n}\n\nexport interface AssignmentNode extends BaseNode {\n\ttype: NodeType.Assignment;\n\toperator: '=' | '+=';\n\tname: BaseNode<NodeType.VariableName> | SubscriptNode;\n\tchildren: LiteralNode[];\n}\n\nexport interface SubscriptNode extends BaseNode {\n\ttype: NodeType.Subscript;\n\tname: BaseNode<NodeType.VariableName>;\n\tindex: LiteralNode;\n}\n\nconst operators = [';', '&', '&;', '|', '|&', '&&', '||'] as const;\n\ntype Operator = (typeof operators)[number];\n\nconst parseOperator = (str: string, index: number): Operator | null => {\n\tconst c = str.charAt(index);\n\tif (['&', ';', '|'].includes(c)) {\n\t\tconst op = str.slice(index, index + 2);\n\t\treturn operators.includes(op as unknown as Operator)\n\t\t\t? (op as Operator)\n\t\t\t: (c as Operator);\n\t}\n\treturn null;\n};\n\nconst getInnerText = (node: BaseNode): string => {\n\tconst { children, type, complete, text } = node;\n\tif (type === NodeType.Concatenation) {\n\t\treturn children.reduce((current, child) => current + child.innerText, '');\n\t}\n\n\tconst terminalCharsMapping: { [key: string]: [string, string] | undefined } = {\n\t\t[NodeType.String]: ['\"', '\"'],\n\t\t[NodeType.RawString]: ['\\'', '\\''],\n\t\t[NodeType.AnsiCString]: ['$\\'', '\\''],\n\t};\n\tconst terminalChars = terminalCharsMapping[type] ?? ['', ''];\n\n\tconst startChars = terminalChars[0];\n\tconst endChars = !complete ? '' : terminalChars[1];\n\n\tlet innerText = '';\n\tfor (let i = startChars.length; i < text.length - endChars.length; i += 1) {\n\t\tconst c = text.charAt(i);\n\t\tconst isWordEscape = c === '\\\\' && type === NodeType.Word;\n\t\tconst isStringEscape =\n\t\t\tc === '\\\\' &&\n\t\t\ttype === NodeType.String &&\n\t\t\t'$`\"\\\\\\n'.includes(text.charAt(i + 1));\n\n\t\tif (isWordEscape || isStringEscape) {\n\t\t\ti += 1;\n\t\t}\n\n\t\tinnerText += text.charAt(i);\n\t}\n\treturn innerText;\n};\n\nconst createNode = <T extends BaseNode = BaseNode>(\n\tstr: string,\n\tpartial: Partial<T>,\n): T => {\n\t// eslint-disable-next-line local/code-no-dangerous-type-assertions\n\tconst node = {\n\t\tstartIndex: 0,\n\t\ttype: NodeType.Word,\n\t\tendIndex: str.length,\n\t\ttext: '',\n\t\tinnerText: '',\n\t\tcomplete: true,\n\t\tchildren: [],\n\t\t...partial,\n\t} as BaseNode as T;\n\tconst text = str.slice(node.startIndex, node.endIndex);\n\tconst innerText = getInnerText({ ...node, text });\n\treturn { ...node, text, innerText };\n};\n\nexport const createTextNode = (\n\tstr: string,\n\tstartIndex: number,\n\ttext: string,\n): BaseNode =>\n\tcreateNode(str, { startIndex, text, endIndex: startIndex + text.length });\n\nconst nextWordIndex = (str: string, index: number) => {\n\tconst firstChar = str.slice(index).search(/\\S/);\n\tif (firstChar === -1) {\n\t\treturn -1;\n\t}\n\treturn index + firstChar;\n};\n\n// Parse simple variable expansion ($foo or $$)\nconst parseSimpleExpansion = (\n\tstr: string,\n\tindex: number,\n\tterminalChars: string[],\n):\n\t| BaseNode<NodeType.SimpleExpansion>\n\t| BaseNode<NodeType.SpecialExpansion>\n\t| null => {\n\tconst node: Partial<BaseNode<NodeType.SimpleExpansion>> = {\n\t\tstartIndex: index,\n\t\ttype: NodeType.SimpleExpansion,\n\t};\n\tif (str.length > index + 1 && '*@?-$0_'.includes(str.charAt(index + 1))) {\n\t\treturn createNode<BaseNode<NodeType.SpecialExpansion>>(str, {\n\t\t\t...node,\n\t\t\ttype: NodeType.SpecialExpansion,\n\t\t\tendIndex: index + 2,\n\t\t});\n\t}\n\tconst terminalSymbols = ['\\t', ' ', '\\n', '$', '\\\\', ...terminalChars];\n\tlet i = index + 1;\n\tfor (; i < str.length; i += 1) {\n\t\tif (terminalSymbols.includes(str.charAt(i))) {\n\t\t\t// Parse a literal $ if last token\n\t\t\treturn i === index + 1\n\t\t\t\t? null\n\t\t\t\t: createNode<BaseNode<NodeType.SimpleExpansion>>(str, {\n\t\t\t\t\t...node,\n\t\t\t\t\tendIndex: i,\n\t\t\t\t});\n\t\t}\n\t}\n\treturn createNode<BaseNode<NodeType.SimpleExpansion>>(str, {\n\t\t...node,\n\t\tendIndex: i,\n\t});\n};\n\n// Parse command substitution $(foo) or `foo`\nfunction parseCommandSubstitution(\n\tstr: string,\n\tstartIndex: number,\n\tterminalChar: string,\n): BaseNode<NodeType.CommandSubstitution> {\n\tconst index =\n\t\tstr.charAt(startIndex) === '`' ? startIndex + 1 : startIndex + 2;\n\tconst { statements: children, terminatorIndex } = parseStatements(\n\t\tstr,\n\t\tindex,\n\t\tterminalChar,\n\t);\n\tconst terminated = terminatorIndex !== -1;\n\treturn createNode<BaseNode<NodeType.CommandSubstitution>>(str, {\n\t\tstartIndex,\n\t\ttype: NodeType.CommandSubstitution,\n\t\tcomplete: terminated && children.length !== 0,\n\t\tendIndex: terminated ? terminatorIndex + 1 : str.length,\n\t\tchildren,\n\t});\n}\n\nconst parseString = parseLiteral<NodeType.String>(NodeType.String, '\"', '\"');\nconst parseRawString = parseLiteral<NodeType.RawString>(\n\tNodeType.RawString,\n\t'\\'',\n\t'\\'',\n);\nconst parseExpansion = parseLiteral<NodeType.Expansion>(\n\tNodeType.Expansion,\n\t'${',\n\t'}',\n);\nconst parseAnsiCString = parseLiteral<NodeType.AnsiCString>(\n\tNodeType.AnsiCString,\n\t'$\\'',\n\t'\\'',\n);\nconst parseArithmeticExpansion = parseLiteral<NodeType.ArithmeticExpansion>(\n\tNodeType.ArithmeticExpansion,\n\t'$((',\n\t'))',\n);\n\nfunction childAtIndex(\n\tstr: string,\n\tindex: number,\n\tinString: boolean,\n\tterminators: string[],\n): LiteralNode | null {\n\tconst lookahead = [\n\t\tstr.charAt(index),\n\t\tstr.charAt(index + 1),\n\t\tstr.charAt(index + 2),\n\t];\n\tswitch (lookahead[0]) {\n\t\tcase '$':\n\t\t\tif (lookahead[1] === '(') {\n\t\t\t\treturn lookahead[2] === '('\n\t\t\t\t\t? parseArithmeticExpansion(str, index)\n\t\t\t\t\t: parseCommandSubstitution(str, index, ')');\n\t\t\t}\n\t\t\tif (lookahead[1] === '{') {\n\t\t\t\treturn parseExpansion(str, index);\n\t\t\t}\n\t\t\tif (!inString && lookahead[1] === '\\'') {\n\t\t\t\treturn parseAnsiCString(str, index);\n\t\t\t}\n\t\t\treturn parseSimpleExpansion(str, index, terminators);\n\t\tcase '`':\n\t\t\treturn parseCommandSubstitution(str, index, '`');\n\t\tcase '\\'':\n\t\t\treturn inString ? null : parseRawString(str, index);\n\t\tcase '\"':\n\t\t\treturn inString ? null : parseString(str, index);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction parseLiteral<T extends NodeType>(\n\ttype: T,\n\tstartChars: string,\n\tendChars: string,\n) {\n\tconst canHaveChildren =\n\t\ttype === NodeType.Expansion || type === NodeType.String;\n\tconst isString = type === NodeType.String;\n\treturn (str: string, startIndex: number): BaseNode<T> => {\n\t\tconst children = [];\n\t\tfor (let i = startIndex + startChars.length; i < str.length; i += 1) {\n\t\t\tconst child = canHaveChildren\n\t\t\t\t? childAtIndex(str, i, isString, [endChars])\n\t\t\t\t: null;\n\t\t\tif (child !== null) {\n\t\t\t\tchildren.push(child);\n\t\t\t\ti = child.endIndex - 1;\n\t\t\t} else if (str.charAt(i) === '\\\\' && type !== NodeType.RawString) {\n\t\t\t\ti += 1;\n\t\t\t} else if (str.slice(i, i + endChars.length) === endChars) {\n\t\t\t\treturn createNode<BaseNode<T>>(str, {\n\t\t\t\t\tstartIndex,\n\t\t\t\t\ttype,\n\t\t\t\t\tchildren,\n\t\t\t\t\tendIndex: i + endChars.length,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn createNode<BaseNode<T>>(str, {\n\t\t\tstartIndex,\n\t\t\ttype,\n\t\t\tchildren,\n\t\t\tcomplete: false,\n\t\t});\n\t};\n}\n\nfunction parseStatements(\n\tstr: string,\n\tindex: number,\n\tterminalChar: string,\n\tmustTerminate = false,\n): {\n\tstatements: BaseNode[];\n\tterminatorIndex: number;\n} {\n\tconst statements = [];\n\n\tlet i = index;\n\twhile (i < str.length) {\n\t\t// Will only exit on EOF, terminalChar or terminator symbol (;, &, &;)\n\t\tlet statement = parseStatement(str, i, mustTerminate ? '' : terminalChar);\n\n\t\tconst opIndex = nextWordIndex(str, statement.endIndex);\n\t\tconst reachedEnd = opIndex === -1;\n\t\tif (!mustTerminate && !reachedEnd && terminalChar === str.charAt(opIndex)) {\n\t\t\tstatements.push(statement);\n\t\t\treturn { statements, terminatorIndex: opIndex };\n\t\t}\n\n\t\tif (reachedEnd) {\n\t\t\tstatements.push(statement);\n\t\t\tbreak;\n\t\t}\n\n\t\tconst op = !reachedEnd && parseOperator(str, opIndex);\n\t\tif (op) {\n\t\t\t// Terminator symbol, ; | & | &;\n\t\t\ti = opIndex + op.length;\n\t\t\tconst nextIndex = nextWordIndex(str, i);\n\t\t\tstatements.push(statement);\n\t\t\tif (nextIndex !== -1 && str.charAt(nextIndex) === terminalChar) {\n\t\t\t\treturn { statements, terminatorIndex: nextIndex };\n\t\t\t}\n\t\t} else {\n\t\t\t// Missing terminator but still have tokens left.\n\t\t\t// assignments do not require terminators\n\t\t\tstatement = createNode(str, {\n\t\t\t\t...statement,\n\t\t\t\tcomplete:\n\t\t\t\t\tstatement.type === NodeType.AssignmentList\n\t\t\t\t\t\t? statement.complete\n\t\t\t\t\t\t: false,\n\t\t\t});\n\t\t\tstatements.push(statement);\n\t\t\ti = opIndex;\n\t\t}\n\t}\n\treturn { statements, terminatorIndex: -1 };\n}\n\nconst parseConcatenationOrLiteralNode = (\n\tstr: string,\n\tstartIndex: number,\n\tterminalChar: string,\n): { children: LiteralNode[]; endIndex: number } => {\n\tconst children: LiteralNode[] = [];\n\n\tlet argumentChildren: LiteralNode[] = [];\n\tlet wordStart = -1;\n\n\tconst endWord = (endIndex: number) => {\n\t\tif (wordStart !== -1) {\n\t\t\tconst word = createNode<BaseNode<NodeType.Word>>(str, {\n\t\t\t\tstartIndex: wordStart,\n\t\t\t\tendIndex,\n\t\t\t});\n\t\t\targumentChildren.push(word);\n\t\t}\n\t\twordStart = -1;\n\t};\n\n\tconst endArgument = (endIndex: number) => {\n\t\tendWord(endIndex);\n\t\tlet [argument] = argumentChildren;\n\t\tif (argumentChildren.length > 1) {\n\t\t\tconst finalPart = argumentChildren[argumentChildren.length - 1];\n\t\t\targument = createNode<BaseNode<NodeType.Concatenation>>(str, {\n\t\t\t\tstartIndex: argumentChildren[0].startIndex,\n\t\t\t\ttype: NodeType.Concatenation,\n\t\t\t\tendIndex: finalPart.endIndex,\n\t\t\t\tcomplete: finalPart.complete,\n\t\t\t\tchildren: argumentChildren,\n\t\t\t});\n\t\t}\n\t\tif (argument) {\n\t\t\tchildren.push(argument);\n\t\t}\n\t\targumentChildren = [];\n\t};\n\n\tconst terminators = ['&', '|', ';', '\\n', '\\'', '\"', '`'];\n\tif (terminalChar) {\n\t\tterminators.push(terminalChar);\n\t}\n\n\tlet i = startIndex;\n\tfor (; i < str.length; i += 1) {\n\t\tconst c = str.charAt(i);\n\t\tconst op = parseOperator(str, i);\n\t\tif (op !== null || c === terminalChar) {\n\t\t\t// TODO: handle terminator like ; as first token.\n\t\t\tbreak;\n\t\t}\n\t\tconst childNode = childAtIndex(str, i, false, terminators);\n\t\tif (childNode !== null) {\n\t\t\tendWord(i);\n\t\t\targumentChildren.push(childNode);\n\t\t\ti = childNode.endIndex - 1;\n\t\t} else if ([' ', '\\t'].includes(c)) {\n\t\t\tendArgument(i);\n\t\t} else {\n\t\t\tif (c === '\\\\') {\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t\tif (wordStart === -1) {\n\t\t\t\twordStart = i;\n\t\t\t}\n\t\t}\n\t}\n\n\tendArgument(i);\n\n\treturn { children, endIndex: i };\n};\n\nfunction parseCommand(\n\tstr: string,\n\tidx: number,\n\tterminalChar: string,\n): BaseNode<NodeType.Command> {\n\tconst startIndex = Math.max(nextWordIndex(str, idx), idx);\n\tconst { children, endIndex } = parseConcatenationOrLiteralNode(\n\t\tstr,\n\t\tstartIndex,\n\t\tterminalChar,\n\t);\n\n\treturn createNode<BaseNode<NodeType.Command>>(str, {\n\t\tstartIndex,\n\t\ttype: NodeType.Command,\n\t\tcomplete: children.length > 0,\n\t\t// Extend command up to separator.\n\t\tendIndex: children.length > 0 ? endIndex : str.length,\n\t\tchildren,\n\t});\n}\n\nconst parseAssignmentNode = (\n\tstr: string,\n\tstartIndex: number,\n): AssignmentNode => {\n\tconst equalsIndex = str.indexOf('=', startIndex);\n\tconst operator = str.charAt(equalsIndex - 1) === '+' ? '+=' : '=';\n\tconst firstOperatorCharIndex =\n\t\toperator === '=' ? equalsIndex : equalsIndex - 1;\n\tconst firstSquareBracketIndex = str\n\t\t.slice(startIndex, firstOperatorCharIndex)\n\t\t.indexOf('[');\n\tlet nameNode: SubscriptNode | BaseNode<NodeType.VariableName>;\n\n\tconst variableName = createNode<BaseNode<NodeType.VariableName>>(str, {\n\t\ttype: NodeType.VariableName,\n\t\tstartIndex,\n\t\tendIndex:\n\t\t\tfirstSquareBracketIndex !== -1\n\t\t\t\t? firstSquareBracketIndex\n\t\t\t\t: firstOperatorCharIndex,\n\t});\n\n\tif (firstSquareBracketIndex !== -1) {\n\t\tconst index = createNode<BaseNode<NodeType.Word>>(str, {\n\t\t\ttype: NodeType.Word,\n\t\t\tstartIndex: firstSquareBracketIndex + 1,\n\t\t\tendIndex: firstOperatorCharIndex - 1,\n\t\t});\n\t\tnameNode = createNode<SubscriptNode>(str, {\n\t\t\ttype: NodeType.Subscript,\n\t\t\tname: variableName,\n\t\t\tstartIndex,\n\t\t\tendIndex: index.endIndex + 1,\n\t\t\tchildren: [index],\n\t\t});\n\t} else {\n\t\tnameNode = variableName;\n\t}\n\n\tconst { children, endIndex } = parseConcatenationOrLiteralNode(\n\t\tstr,\n\t\tequalsIndex + 1,\n\t\t' ',\n\t);\n\treturn createNode<AssignmentNode>(str, {\n\t\tname: nameNode,\n\t\tstartIndex,\n\t\tendIndex,\n\t\ttype: NodeType.Assignment,\n\t\toperator,\n\t\tchildren,\n\t\tcomplete: children[children.length - 1].complete,\n\t});\n};\n\nconst parseAssignments = (str: string, index: number): AssignmentNode[] => {\n\tconst variables: AssignmentNode[] = [];\n\tlet lastVariableEnd = index;\n\twhile (lastVariableEnd < str.length) {\n\t\tconst nextTokenStart = nextWordIndex(str, lastVariableEnd);\n\t\tif (/^[\\w[\\]]+\\+?=.*/.test(str.slice(nextTokenStart))) {\n\t\t\tconst assignmentNode = parseAssignmentNode(str, nextTokenStart);\n\t\t\tvariables.push(assignmentNode);\n\t\t\tlastVariableEnd = assignmentNode.endIndex;\n\t\t} else {\n\t\t\treturn variables;\n\t\t}\n\t}\n\treturn variables;\n};\n\nconst parseAssignmentListNodeOrCommandNode = (\n\tstr: string,\n\tstartIndex: number,\n\tterminalChar: string,\n): AssignmentListNode | BaseNode<NodeType.Command> => {\n\tconst assignments = parseAssignments(str, startIndex);\n\tif (assignments.length > 0) {\n\t\tconst lastAssignment = assignments[assignments.length - 1];\n\t\tconst operator = parseOperator(\n\t\t\tstr,\n\t\t\tnextWordIndex(str, lastAssignment.endIndex),\n\t\t);\n\t\tlet command: BaseNode<NodeType.Command> | undefined;\n\t\tif (\n\t\t\t!operator &&\n\t\t\tlastAssignment.complete &&\n\t\t\tlastAssignment.endIndex !== str.length\n\t\t) {\n\t\t\tcommand = parseCommand(str, lastAssignment.endIndex, terminalChar);\n\t\t}\n\t\t// if it makes sense to parse a command here do it else return the list\n\t\treturn createNode<AssignmentListNode>(str, {\n\t\t\ttype: NodeType.AssignmentList,\n\t\t\tstartIndex,\n\t\t\tendIndex: command ? command.endIndex : lastAssignment.endIndex,\n\t\t\thasCommand: !!command,\n\t\t\tchildren: command ? [...assignments, command] : assignments,\n\t\t});\n\t}\n\treturn parseCommand(str, startIndex, terminalChar);\n};\n\nconst reduceStatements = (\n\tstr: string,\n\tlhs: BaseNode,\n\trhs: BaseNode,\n\ttype: NodeType,\n): BaseNode =>\n\tcreateNode(str, {\n\t\ttype,\n\t\tstartIndex: lhs.startIndex,\n\t\tchildren: rhs.type === type ? [lhs, ...rhs.children] : [lhs, rhs],\n\t\tendIndex: rhs.endIndex,\n\t\tcomplete: lhs.complete && rhs.complete,\n\t});\n\nfunction parseStatement(\n\tstr: string,\n\tindex: number,\n\tterminalChar: string,\n): BaseNode {\n\tlet i = nextWordIndex(str, index);\n\ti = i === -1 ? index : i;\n\tlet statement = null;\n\tif (['{', '('].includes(str.charAt(i))) {\n\t\t// Parse compound statement or subshell\n\t\tconst isCompound = str.charAt(i) === '{';\n\t\tconst endChar = isCompound ? '}' : ')';\n\n\t\tconst { statements: children, terminatorIndex } = parseStatements(\n\t\t\tstr,\n\t\t\ti + 1,\n\t\t\tendChar,\n\t\t\tisCompound,\n\t\t);\n\t\tconst hasChildren = children.length > 0;\n\t\tconst terminated = terminatorIndex !== -1;\n\t\tlet endIndex = terminatorIndex + 1;\n\t\tif (!terminated) {\n\t\t\tendIndex = hasChildren\n\t\t\t\t? children[children.length - 1].endIndex\n\t\t\t\t: str.length;\n\t\t}\n\t\tstatement = createNode(str, {\n\t\t\tstartIndex: i,\n\t\t\ttype: isCompound ? NodeType.CompoundStatement : NodeType.Subshell,\n\t\t\tendIndex,\n\t\t\tcomplete: terminated && hasChildren,\n\t\t\tchildren,\n\t\t});\n\t} else {\n\t\t// statement = parseAssignmentListNodeOrCommandNode(str, i, terminalChar)\n\t\tstatement = parseAssignmentListNodeOrCommandNode(str, i, terminalChar);\n\t}\n\n\ti = statement.endIndex;\n\tconst opIndex = nextWordIndex(str, i);\n\tconst op = opIndex !== -1 && parseOperator(str, opIndex);\n\tif (\n\t\t!op ||\n\t\top === ';' ||\n\t\top === '&' ||\n\t\top === '&;' ||\n\t\t(opIndex !== -1 && terminalChar && str.charAt(opIndex) === terminalChar)\n\t) {\n\t\treturn statement;\n\t}\n\n\t// Recursively parse rightHandStatement if theres an operator.\n\tconst rightHandStatement = parseStatement(\n\t\tstr,\n\t\topIndex + op.length,\n\t\tterminalChar,\n\t);\n\tif (op === '&&' || op === '||') {\n\t\treturn reduceStatements(str, statement, rightHandStatement, NodeType.List);\n\t}\n\n\tif (op === '|' || op === '|&') {\n\t\tif (rightHandStatement.type === NodeType.List) {\n\t\t\tconst [oldFirstChild, ...otherChildren] = rightHandStatement.children;\n\t\t\tconst newFirstChild = reduceStatements(\n\t\t\t\tstr,\n\t\t\t\tstatement,\n\t\t\t\toldFirstChild,\n\t\t\t\tNodeType.Pipeline,\n\t\t\t);\n\t\t\treturn createNode(str, {\n\t\t\t\ttype: NodeType.List,\n\t\t\t\tstartIndex: newFirstChild.startIndex,\n\t\t\t\tchildren: [newFirstChild, ...otherChildren],\n\t\t\t\tendIndex: rightHandStatement.endIndex,\n\t\t\t\tcomplete: newFirstChild.complete && rightHandStatement.complete,\n\t\t\t});\n\t\t}\n\t\treturn reduceStatements(\n\t\t\tstr,\n\t\t\tstatement,\n\t\t\trightHandStatement,\n\t\t\tNodeType.Pipeline,\n\t\t);\n\t}\n\treturn statement;\n}\n\nexport const printTree = (root: BaseNode) => {\n\tconst getNodeText = (node: BaseNode, level = 0) => {\n\t\tconst indent = ' '.repeat(level);\n\t\tlet nodeText = `${indent}${node.type} [${node.startIndex},  ${node.endIndex}] - ${node.text}`;\n\t\tconst childrenText = node.children\n\t\t\t.map((child) => getNodeText(child, level + 1))\n\t\t\t.join('\\n');\n\t\tif (childrenText) {\n\t\t\tnodeText += `\\n${childrenText}`;\n\t\t}\n\t\tif (!node.complete) {\n\t\t\tnodeText += `\\n${indent}INCOMPLETE`;\n\t\t}\n\t\treturn nodeText;\n\t};\n\tconsole.log(getNodeText(root));\n};\n\nexport const parse = (str: string): BaseNode =>\n\tcreateNode<BaseNode<NodeType.Program>>(str, {\n\t\tstartIndex: 0,\n\t\ttype: NodeType.Program,\n\t\tchildren: parseStatements(str, 0, '').statements,\n\t});\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shell-parser/test/command.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { deepStrictEqual } from 'node:assert';\nimport { getCommand, Command } from \"../command\";\n\nsuite(\"fig/shell-parser/ getCommand\", () => {\n\tconst aliases = {\n\t\twoman: \"man\",\n\t\tquote: \"'q'\",\n\t\tg: \"git\",\n\t};\n\tconst getTokenText = (command: Command | null) => command?.tokens.map((token) => token.text) ?? [];\n\n\ttest(\"works without matching aliases\", () => {\n\t\tdeepStrictEqual(getTokenText(getCommand(\"git co \", {})), [\"git\", \"co\", \"\"]);\n\t\tdeepStrictEqual(getTokenText(getCommand(\"git co \", aliases)), [\"git\", \"co\", \"\"]);\n\t\tdeepStrictEqual(getTokenText(getCommand(\"woman \", {})), [\"woman\", \"\"]);\n\t\tdeepStrictEqual(getTokenText(getCommand(\"another string \", aliases)), [\n\t\t\t\"another\",\n\t\t\t\"string\",\n\t\t\t\"\",\n\t\t]);\n\t});\n\n\ttest(\"works with regular aliases\", () => {\n\t\t// Don't change a single token.\n\t\tdeepStrictEqual(getTokenText(getCommand(\"woman\", aliases)), [\"woman\"]);\n\t\t// Change first token if length > 1.\n\t\tdeepStrictEqual(getTokenText(getCommand(\"woman \", aliases)), [\"man\", \"\"]);\n\t\t// Don't change later tokens.\n\t\tdeepStrictEqual(getTokenText(getCommand(\"man woman \", aliases)), [\"man\", \"woman\", \"\"]);\n\t\t// Handle quotes\n\t\tdeepStrictEqual(getTokenText(getCommand(\"quote \", aliases)), [\"q\", \"\"]);\n\t});\n});\n"
  },
  {
    "path": "extensions/terminal-suggest/src/fig/shell-parser/test/parser.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { parse } from '../parser';\nimport { strictEqual } from 'node:assert';\n\nfunction parseCommand(command: string): string {\n\treturn JSON.stringify(parse(command), null, '  ');\n}\n\n/**\n *\n * @param filePath The path to the file to parse\n * @param nameComment The first character of each title line\n */\nfunction getData(\n\tfilePath: string,\n\tnameComment: string,\n): [name: string, value: string][] {\n\tif (!fs.existsSync(filePath)) {\n\t\tfs.writeFileSync(filePath, '');\n\t\treturn [];\n\t}\n\treturn fs\n\t\t.readFileSync(filePath, { encoding: 'utf8' })\n\t\t.replaceAll('\\r\\n', '\\n')\n\t\t.split('\\n\\n')\n\t\t.map((testCase) => {\n\t\t\tconst firstNewline = testCase.indexOf('\\n');\n\t\t\tconst title = testCase.slice(0, firstNewline);\n\t\t\tconst block = testCase.slice(firstNewline);\n\t\t\treturn [title.slice(nameComment.length).trim(), block.trim()];\n\t\t});\n}\n\n// function outputNewFile(\n// \tfilePath: string,\n// \tnameComment: string,\n// \tdata: [name: string, value: string][],\n// ) {\n// \tfs.writeFileSync(\n// \t\tfilePath,\n// \t\tdata.reduce(\n// \t\t\t(previous, current, index) =>\n// \t\t\t\t`${previous}${index > 0 ? '\\n\\n' : ''}${nameComment} ${current[0]}\\n${current[1]\n// \t\t\t\t}`,\n// \t\t\t'',\n// \t\t),\n// \t);\n// }\n\n// function notIncludedIn<K>(setA: Set<K>, setB: Set<K>): K[] {\n// \tconst notIncluded: K[] = [];\n// \tfor (const v of setA) {\n// \t\tif (!setB.has(v)) notIncluded.push(v);\n// \t}\n// \treturn notIncluded;\n// }\n\n// function mapKeysDiff<K, V>(mapA: Map<K, V>, mapB: Map<K, V>) {\n// \tconst keysA = new Set(mapA.keys());\n// \tconst keysB = new Set(mapB.keys());\n// \treturn [\n// \t\tnotIncludedIn(keysA, keysB), // keys of A not included in B\n// \t\tnotIncludedIn(keysB, keysA), // keys of B not included in A\n// \t];\n// }\n\nsuite('fig/shell-parser/ fixtures', () => {\n\tconst fixturesPath = path.join(__dirname, '../../../../fixtures/shell-parser');\n\tconst fixtures = fs.readdirSync(fixturesPath);\n\tfor (const fixture of fixtures) {\n\t\t// console.log('fixture', fixture);\n\t\tsuite(fixture, () => {\n\t\t\tconst inputFile = path.join(fixturesPath, fixture, 'input.sh');\n\t\t\tconst outputFile = path.join(fixturesPath, fixture, 'output.txt');\n\t\t\tconst inputData = new Map(getData(inputFile, '###'));\n\t\t\tconst outputData = new Map(getData(outputFile, '//'));\n\n\t\t\t// clean diffs and regenerate files if required.\n\t\t\t// if (!process.env.NO_FIXTURES_EDIT) {\n\t\t\t// \tconst [newInputs, extraOutputs] = mapKeysDiff(inputData, outputData);\n\t\t\t// \textraOutputs.forEach((v) => outputData.delete(v));\n\t\t\t// \tnewInputs.forEach((v) =>\n\t\t\t// \t\toutputData.set(v, parseCommand(inputData.get(v) ?? '')),\n\t\t\t// \t);\n\t\t\t// \tif (extraOutputs.length || newInputs.length) {\n\t\t\t// \t\toutputNewFile(outputFile, '//', [...outputData.entries()]);\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\tfor (const [caseName, input] of inputData.entries()) {\n\t\t\t\tif (caseName) {\n\t\t\t\t\ttest(caseName, () => {\n\t\t\t\t\t\tconst output = outputData.get(caseName);\n\t\t\t\t\t\tstrictEqual(parseCommand(input ?? ''), output);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "extensions/terminal-suggest/src/helpers/completionItem.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport type { ICompletionResource } from '../types';\n\nexport function createCompletionItem(cursorPosition: number, prefix: string, commandResource: ICompletionResource, detail?: string, documentation?: string | vscode.MarkdownString, kind?: vscode.TerminalCompletionItemKind): vscode.TerminalCompletionItem {\n\tconst endsWithSpace = prefix.endsWith(' ');\n\tconst lastWord = endsWithSpace ? '' : prefix.split(' ').at(-1) ?? '';\n\treturn {\n\t\tlabel: commandResource.label,\n\t\tdetail: detail ?? commandResource.detail ?? '',\n\t\tdocumentation,\n\t\treplacementIndex: cursorPosition - lastWord.length,\n\t\treplacementLength: lastWord.length,\n\t\tkind: kind ?? commandResource.kind ?? vscode.TerminalCompletionItemKind.Method\n\t};\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/helpers/executable.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { osIsWindows } from './os';\nimport * as fs from 'fs/promises';\n\nexport function isExecutable(filePath: string, configuredWindowsExecutableExtensions?: { [key: string]: boolean | undefined } | undefined): Promise<boolean> | boolean {\n\tif (osIsWindows()) {\n\t\tconst resolvedWindowsExecutableExtensions = resolveWindowsExecutableExtensions(configuredWindowsExecutableExtensions);\n\t\treturn resolvedWindowsExecutableExtensions.find(ext => filePath.endsWith(ext)) !== undefined;\n\t}\n\treturn isExecutableUnix(filePath);\n}\n\nexport async function isExecutableUnix(filePath: string): Promise<boolean> {\n\ttry {\n\t\tconst stats = await fs.stat(filePath);\n\t\t// On macOS/Linux, check if the executable bit is set\n\t\treturn (stats.mode & 0o100) !== 0;\n\t} catch (error) {\n\t\t// If the file does not exist or cannot be accessed, it's not executable\n\t\treturn false;\n\t}\n}\n\n\nfunction resolveWindowsExecutableExtensions(configuredWindowsExecutableExtensions?: { [key: string]: boolean | undefined }): string[] {\n\tconst resolvedWindowsExecutableExtensions: string[] = windowsDefaultExecutableExtensions;\n\tconst excluded = new Set<string>();\n\tif (configuredWindowsExecutableExtensions) {\n\t\tfor (const [key, value] of Object.entries(configuredWindowsExecutableExtensions)) {\n\t\t\tif (value === true) {\n\t\t\t\tresolvedWindowsExecutableExtensions.push(key);\n\t\t\t} else {\n\t\t\t\texcluded.add(key);\n\t\t\t}\n\t\t}\n\t}\n\treturn Array.from(new Set(resolvedWindowsExecutableExtensions)).filter(ext => !excluded.has(ext));\n}\n\nexport const windowsDefaultExecutableExtensions: string[] = [\n\t'.exe',   // Executable file\n\t'.bat',   // Batch file\n\t'.cmd',   // Command script\n\t'.com',   // Command file\n\n\t'.msi',   // Windows Installer package\n\n\t'.ps1',   // PowerShell script\n\n\t'.vbs',   // VBScript file\n\t'.js',    // JScript file\n\t'.jar',   // Java Archive (requires Java runtime)\n\t'.py',    // Python script (requires Python interpreter)\n\t'.rb',    // Ruby script (requires Ruby interpreter)\n\t'.pl',    // Perl script (requires Perl interpreter)\n\t'.sh',    // Shell script (via WSL or third-party tools)\n];\n"
  },
  {
    "path": "extensions/terminal-suggest/src/helpers/file.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function removeAnyFileExtension(label: string): string {\n\treturn label.replace(/\\.[a-zA-Z0-9!#\\$%&'\\(\\)\\-@\\^_`{}~\\+,;=\\[\\]]+$/, '');\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/helpers/filepaths.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function filepaths(options: { extensions?: string[]; editFileSuggestions?: { priority: number } }): Fig.Generator {\n\treturn {\n\t\tcustom: async (tokens, executeCommand, generatorContext) => {\n\t\t\tconst fileExtensionsMap: Record<string, string[]> = { fileExtensions: options.extensions || [] };\n\t\t\treturn [{ type: 'file', _internal: fileExtensionsMap }, { type: 'folder' }];\n\t\t},\n\t\ttrigger: (oldToken, newToken) => {\n\t\t\treturn true;\n\t\t},\n\t\tgetQueryTerm: (token) => token\n\t};\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/helpers/os.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as os from 'os';\n\nexport function osIsWindows(): boolean {\n\treturn os.platform() === 'win32';\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/helpers/promise.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport function createTimeoutPromise<T>(timeout: number, defaultValue: T): Promise<T> {\n\treturn new Promise(resolve => setTimeout(() => resolve(defaultValue), timeout));\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/helpers/uri.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport function getFriendlyResourcePath(uri: vscode.Uri, pathSeparator: string, kind?: vscode.TerminalCompletionItemKind): string {\n\tlet path = uri.fsPath;\n\t// Ensure drive is capitalized on Windows\n\tif (pathSeparator === '\\\\' && path.match(/^[a-zA-Z]:\\\\/)) {\n\t\tpath = `${path[0].toUpperCase()}:${path.slice(2)}`;\n\t}\n\tif (kind === vscode.TerminalCompletionItemKind.Folder) {\n\t\tif (!path.endsWith(pathSeparator)) {\n\t\t\tpath += pathSeparator;\n\t\t}\n\t}\n\treturn path;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/shell/bash.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport type { ICompletionResource } from '../types';\nimport { type ExecOptionsWithStringEncoding } from 'node:child_process';\nimport { execHelper, getAliasesHelper } from './common';\n\nexport async function getBashGlobals(options: ExecOptionsWithStringEncoding, existingCommands?: Set<string>): Promise<(string | ICompletionResource)[]> {\n\treturn [\n\t\t...await getAliases(options),\n\t\t...await getBuiltins(options, 'compgen -b', existingCommands)\n\t];\n}\n\nasync function getAliases(options: ExecOptionsWithStringEncoding): Promise<ICompletionResource[]> {\n\tconst args = process.platform === 'darwin' ? ['-icl', 'alias'] : ['-ic', 'alias'];\n\treturn getAliasesHelper('bash', args, /^alias (?<alias>[a-zA-Z0-9\\.:-]+)='(?<resolved>.+)'$/, options);\n}\n\nexport async function getBuiltins(\n\toptions: ExecOptionsWithStringEncoding,\n\tscriptToRun: string,\n\texistingCommands?: Set<string>,\n): Promise<(string | ICompletionResource)[]> {\n\tconst compgenOutput = await execHelper(scriptToRun, options);\n\tconst filter = (cmd: string) => cmd && !existingCommands?.has(cmd);\n\tconst builtins: string[] = compgenOutput.split('\\n').filter(filter);\n\tconst completions: ICompletionResource[] = [];\n\tif (builtins.find(r => r === '.')) {\n\t\tcompletions.push({\n\t\t\tlabel: '.',\n\t\t\tdetail: 'Source a file in the current shell',\n\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t});\n\t}\n\n\tfor (const cmd of builtins) {\n\t\tif (typeof cmd === 'string') {\n\t\t\ttry {\n\t\t\t\tconst helpOutput = (await execHelper(`help ${cmd}`, options))?.trim();\n\t\t\t\tconst helpLines = helpOutput?.split('\\n');\n\t\t\t\t//TODO: This still has some extra spaces in it\n\t\t\t\tconst outputDescription = helpLines.splice(1).map(line => line.trim()).join('');\n\t\t\t\tconst args = helpLines?.[0]?.split(' ').slice(1).join(' ').trim();\n\t\t\t\tconst { detail, documentation, description } = generateDetailAndDocs(outputDescription, args);\n\t\t\t\tcompletions.push({\n\t\t\t\t\tlabel: { label: cmd, description },\n\t\t\t\t\tdetail,\n\t\t\t\t\tdocumentation: new vscode.MarkdownString(documentation),\n\t\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t\t});\n\n\t\t\t} catch (e) {\n\t\t\t\t// Ignore errors\n\t\t\t\tconsole.log(`Error getting info for ${e}`);\n\t\t\t\tcompletions.push({\n\t\t\t\t\tlabel: cmd,\n\t\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn completions;\n}\n\nexport function generateDetailAndDocs(description?: string, args?: string): { detail?: string; documentation?: string; description?: string } {\n\tlet detail, documentation = '';\n\tconst firstSentence = (text: string): string => text.split('. ')[0] + '.';\n\tif (description) {\n\t\tdescription = firstSentence(description);\n\t\tdetail = args;\n\t\tdocumentation = description;\n\t}\n\treturn { detail, documentation, description };\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/shell/common.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { exec, spawn, type ExecOptionsWithStringEncoding, type SpawnOptionsWithoutStdio } from 'node:child_process';\nimport type { ICompletionResource } from '../types';\n\nexport async function spawnHelper(command: string, args: string[], options: SpawnOptionsWithoutStdio): Promise<string> {\n\t// This must be run with interactive, otherwise there's a good chance aliases won't\n\t// be set up. Note that this could differ from the actual aliases as it's a new bash\n\t// session, for the same reason this would not include aliases that are created\n\t// by simply running `alias ...` in the terminal.\n\treturn new Promise<string>((resolve, reject) => {\n\t\tconst child = spawn(command, args, options);\n\t\tlet stdout = '';\n\t\tchild.stdout.on('data', (data) => {\n\t\t\tstdout += data;\n\t\t});\n\t\tchild.on('close', (code) => {\n\t\t\tif (code !== 0) {\n\t\t\t\treject(new Error(`process exited with code ${code}`));\n\t\t\t} else {\n\t\t\t\tresolve(stdout);\n\t\t\t}\n\t\t});\n\t});\n}\n\nexport interface ISpawnHelperResult {\n\tstdout: string;\n\tstderr: string;\n\texitCode: number;\n}\nexport async function spawnHelper2(command: string, args: string[], options: SpawnOptionsWithoutStdio): Promise<ISpawnHelperResult> {\n\t// This must be run with interactive, otherwise there's a good chance aliases won't\n\t// be set up. Note that this could differ from the actual aliases as it's a new bash\n\t// session, for the same reason this would not include aliases that are created\n\t// by simply running `alias ...` in the terminal.\n\treturn new Promise<ISpawnHelperResult>((resolve, reject) => {\n\t\tconst stdout: string[] = [];\n\t\tconst stderr: string[] = [];\n\t\tconst child = spawn(command, args, options);\n\t\tchild.stdout.on('data', (data) => stdout.push(data));\n\t\tchild.stderr.on('data', (data) => stderr.push(data));\n\t\tchild.on('error', (error) => reject(error));\n\t\tchild.on('close', (code) => {\n\t\t\tresolve({\n\t\t\t\tstdout: stdout.join(''),\n\t\t\t\tstderr: stderr.join(''),\n\t\t\t\texitCode: code ?? -1\n\t\t\t});\n\t\t});\n\t});\n}\n\nexport async function execHelper(commandLine: string, options: ExecOptionsWithStringEncoding): Promise<string> {\n\treturn new Promise<string>((resolve, reject) => {\n\t\texec(commandLine, options, (error, stdout) => {\n\t\t\tif (error) {\n\t\t\t\treject(error);\n\t\t\t} else {\n\t\t\t\tresolve(stdout);\n\t\t\t}\n\t\t});\n\t});\n}\n\nexport async function getAliasesHelper(command: string, args: string[], regex: RegExp, options: ExecOptionsWithStringEncoding): Promise<ICompletionResource[]> {\n\t// This must be run with interactive, otherwise there's a good chance aliases won't\n\t// be set up. Note that this could differ from the actual aliases as it's a new bash\n\t// session, for the same reason this would not include aliases that are created\n\t// by simply running `alias ...` in the terminal.\n\tconst aliasOutput = await spawnHelper(command, args, options);\n\tconst result: ICompletionResource[] = [];\n\tfor (const line of aliasOutput.split('\\n')) {\n\t\tconst match = line.match(regex);\n\t\tif (!match?.groups) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet definitionCommand = '';\n\t\tlet definitionIndex = match.groups.resolved.indexOf(' ');\n\t\tif (definitionIndex === -1) {\n\t\t\tdefinitionIndex = match.groups.resolved.length;\n\t\t}\n\t\tdefinitionCommand = match.groups.resolved.substring(0, definitionIndex);\n\t\tresult.push({\n\t\t\tlabel: { label: match.groups.alias, description: match.groups.resolved },\n\t\t\tdetail: match.groups.resolved,\n\t\t\tkind: vscode.TerminalCompletionItemKind.Alias,\n\t\t\tdefinitionCommand,\n\t\t});\n\t}\n\treturn result;\n}\n\n"
  },
  {
    "path": "extensions/terminal-suggest/src/shell/fish.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport type { ICompletionResource } from '../types';\nimport { getAliasesHelper } from './common';\nimport { type ExecOptionsWithStringEncoding } from 'node:child_process';\nimport { fishBuiltinsCommandDescriptionsCache } from './fishBuiltinsCache';\n\nconst commandDescriptionsCache: Map<string, { shortDescription?: string; description: string; args: string | undefined }> | undefined = parseCache(fishBuiltinsCommandDescriptionsCache);\n\nexport async function getFishGlobals(options: ExecOptionsWithStringEncoding, existingCommands?: Set<string>): Promise<(string | ICompletionResource)[]> {\n\treturn [\n\t\t...await getAliases(options),\n\t\t...await getBuiltins(options),\n\t];\n}\n\nasync function getBuiltins(options: ExecOptionsWithStringEncoding): Promise<(string | ICompletionResource)[]> {\n\tconst completions: ICompletionResource[] = [];\n\n\t// Use the cache directly for all commands\n\tfor (const cmd of [...commandDescriptionsCache!.keys()]) {\n\t\ttry {\n\t\t\tconst result = getCommandDescription(cmd);\n\t\t\tif (result) {\n\t\t\t\tcompletions.push({\n\t\t\t\t\tlabel: { label: cmd, description: result.description },\n\t\t\t\t\tdetail: result.args,\n\t\t\t\t\tdocumentation: new vscode.MarkdownString(result.documentation),\n\t\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(`Fish command \"${cmd}\" not found in cache.`);\n\t\t\t\tcompletions.push({\n\t\t\t\t\tlabel: cmd,\n\t\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Ignore errors\n\t\t\tcompletions.push({\n\t\t\t\tlabel: cmd,\n\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t});\n\t\t}\n\t}\n\n\treturn completions;\n}\n\nexport function getCommandDescription(command: string): { documentation?: string; description?: string; args?: string | undefined } | undefined {\n\tif (!commandDescriptionsCache) {\n\t\treturn undefined;\n\t}\n\tconst result = commandDescriptionsCache.get(command);\n\tif (!result) {\n\t\treturn undefined;\n\t}\n\n\tif (result.shortDescription) {\n\t\treturn {\n\t\t\tdescription: result.shortDescription,\n\t\t\targs: result.args,\n\t\t\tdocumentation: result.description\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\tdescription: result.description,\n\t\t\targs: result.args,\n\t\t\tdocumentation: result.description\n\t\t};\n\t}\n}\n\nfunction parseCache(cache: Object): Map<string, { shortDescription?: string; description: string; args: string | undefined }> | undefined {\n\tif (!cache) {\n\t\treturn undefined;\n\t}\n\tconst result = new Map<string, { shortDescription?: string; description: string; args: string | undefined }>();\n\tfor (const [key, value] of Object.entries(cache)) {\n\t\tresult.set(key, value);\n\t}\n\treturn result;\n}\n\nasync function getAliases(options: ExecOptionsWithStringEncoding): Promise<ICompletionResource[]> {\n\treturn getAliasesHelper('fish', ['-ic', 'alias'], /^alias (?<alias>[a-zA-Z0-9\\.:-]+) (?<resolved>.+)$/, options);\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/shell/fishBuiltinsCache.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const fishBuiltinsCommandDescriptionsCache = {\n  \".\": {\n    \"shortDescription\": \"source - evaluate contents of file\",\n    \"description\": \"source evaluates the commands of the specified FILE in the current\\nshell as a new block of code. This is different from starting a new\\nprocess to perform the commands (i.e. fish < FILE) since the commands\\nwill be evaluated by the current shell, which means that changes in\\nshell variables will affect the current shell. If additional\\narguments are specified after the file name, they will be inserted\\ninto the argv variable. The argv variable will not include the name\\nof the sourced file.\\n\\nfish will search the working directory to resolve relative paths but\\nwill not search PATH .\\n\\nIf no file is specified and stdin is not the terminal, or if the file\\nname - is used, stdin will be read.\\n\\nThe exit status of source is the exit status of the last job to\\nexecute. If something goes wrong while opening or reading the file,\\nsource exits with a non-zero status.\\n\\n. (a single period) is an alias for the source command. The use of .\\nis deprecated in favour of source, and . will be removed in a future\\nversion of fish.\\n\\nsource creates a new local scope; set --local within a sourced block\\nwill not affect variables in the enclosing scope.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\n\\n   source ~/.config/fish/config.fish\\n   # Causes fish to re-read its initialization file.\\n\\nCAVEATS\\nIn fish versions prior to 2.3.0, the argv variable would have a\\nsingle element (the name of the sourced file) if no arguments are\\npresent. Otherwise, it would contain arguments without the name of\\nthe sourced file. That behavior was very confusing and unlike other\\nshells such as bash and zsh.\",\n    \"args\": \"source FILE [ARGUMENTS ...]\\nSOMECOMMAND | source\"\n  },\n  \":\": {\n    \"shortDescription\": \"No operation command\",\n    \"description\": \"The `:` command is a no-op (no operation) command that returns a successful (zero) exit status. It can be used as a placeholder in scripts where a command is syntactically required but no action is desired.\"\n  },\n  \"[\": {\n    \"shortDescription\": \"Test if a statement is true\",\n    \"description\": \"Evaluate an expression and return a status of true (0) or false (non-zero). Unlike the `test` command, the `[` command requires a closing `]`.\",\n    \"args\": \"EXPRESSION ]\"\n  },\n  \"_\": {\n    \"shortDescription\": \"\",\n    \"description\": \"\"\n  },\n  \"abbr\": {\n    \"shortDescription\": \"manage fish abbreviations\",\n    \"description\": \"abbr manages abbreviations - user-defined words that are replaced\\nwith longer phrases when entered.\\n\\nNOTE:\\n   Only typed-in commands use abbreviations. Abbreviations are not\\n   expanded in scripts.\\n\\nFor example, a frequently-run command like git checkout can be\\nabbreviated to gco.  After entering gco and pressing Space or Enter,\\nthe full text git checkout will appear in the command line.  To avoid\\nexpanding something that looks like an abbreviation, the default\\nControl+Space binding inserts a space without expanding.\\n\\nAn abbreviation may match a literal word, or it may match a pattern\\ngiven by a regular expression. When an abbreviation matches a word,\\nthat word is replaced by new text, called its expansion. This\\nexpansion may be a fixed new phrase, or it can be dynamically created\\nvia a fish function. This expansion occurs after pressing space or\\nenter.\\n\\nCombining these features, it is possible to create custom syntaxes,\\nwhere a regular expression recognizes matching tokens, and the\\nexpansion function interprets them. See the Examples section.\\n\\nChanged in version 3.6.0: Previous versions of this allowed saving\\nabbreviations in universal variables.  That's no longer possible.\\nExisting variables will still be imported and abbr --erase will also\\nerase the variables.  We recommend adding abbreviations to\\nconfig.fish by just adding the abbr --add command.  When you run\\nabbr, you will see output like this\\n\\n   > abbr\\n   abbr -a -- foo bar # imported from a universal variable, see `help abbr`\\n\\nIn that case you should take the part before the # comment and save\\nit in config.fish, then you can run abbr --erase to remove the\\nuniversal variable:\\n\\n   > abbr >> ~/.config/fish/config.fish\\n   > abbr --erase (abbr --list)\\n\\nADD SUBCOMMAND\\nabbr [-a | --add] NAME [--position command | anywhere] [-r | --regex PATTERN]\\n     [--set-cursor[=MARKER]] ([-f | --function FUNCTION] | EXPANSION)\\n\\nabbr --add creates a new abbreviation. With no other options, the\\nstring NAME is replaced by EXPANSION.\\n\\nWith --position command, the abbreviation will only expand when it is\\npositioned as a command, not as an argument to another command. With\\n--position anywhere the abbreviation may expand anywhere in the\\ncommand line. The default is command.\\n\\nWith --regex, the abbreviation matches using the regular expression\\ngiven by PATTERN, instead of the literal NAME. The pattern is\\ninterpreted using PCRE2 syntax and must match the entire token. If\\nmultiple abbreviations match the same token, the last abbreviation\\nadded is used.\\n\\nWith --set-cursor=MARKER, the cursor is moved to the first occurrence\\nof MARKER in the expansion. The MARKER value is erased. The MARKER\\nmay be omitted (i.e. simply --set-cursor), in which case it defaults\\nto %.\\n\\nWith -f FUNCTION or --function FUNCTION, FUNCTION is treated as the\\nname of a fish function instead of a literal replacement. When the\\nabbreviation matches, the function will be called with the matching\\ntoken as an argument. If the function's exit status is 0 (success),\\nthe token will be replaced by the function's output; otherwise the\\ntoken will be left unchanged. No EXPANSION may be given separately.\\n\\n   Examples\\n\\n   abbr --add gco git checkout\\n\\nAdd a new abbreviation where gco will be replaced with git checkout.\\n\\n   abbr -a --position anywhere -- -C --color\\n\\nAdd a new abbreviation where -C will be replaced with --color. The --\\nallows -C to be treated as the name of the abbreviation, instead of\\nan option.\\n\\n   abbr -a L --position anywhere --set-cursor \\\"% | less\\\"\\n\\nAdd a new abbreviation where L will be replaced with | less, placing\\nthe cursor before the pipe.\\n\\n   function last_history_item\\n       echo $history[1]\\n   end\\n   abbr -a !! --position anywhere --function last_history_item\\n\\nThis first creates a function last_history_item which outputs the\\nlast entered command. It then adds an abbreviation which replaces !!\\nwith the result of calling this function. Taken together, this is\\nsimilar to the !! history expansion feature of bash.\\n\\n   function vim_edit\\n       echo vim $argv\\n   end\\n   abbr -a vim_edit_texts --position command --regex \\\".+\\\\.txt\\\" --function vim_edit\\n\\nThis first creates a function vim_edit which prepends vim before its\\nargument. It then adds an abbreviation which matches commands ending\\nin .txt, and replaces the command with the result of calling this\\nfunction. This allows text files to be \\\"executed\\\" as a command to\\nopen them in vim, similar to the \\\"suffix alias\\\" feature in zsh.\\n\\n   abbr 4DIRS --set-cursor=! \\\"$(string join \\\\n -- 'for dir in */' 'cd $dir' '!' 'cd ..' 'end')\\\"\\n\\nThis creates an abbreviation \\\"4DIRS\\\" which expands to a multi-line\\nloop \\\"template.\\\" The template enters each directory and then leaves\\nit. The cursor is positioned ready to enter the command to run in\\neach directory, at the location of the !, which is itself erased.\\n\\nOTHER SUBCOMMANDS\\n\\n   abbr --rename OLD_NAME NEW_NAME\\n\\nRenames an abbreviation, from OLD_NAME to NEW_NAME\\n\\n   abbr [-s | --show]\\n\\nShow all abbreviations in a manner suitable for import and export\\n\\n   abbr [-l | --list]\\n\\nPrints the names of all abbreviation\\n\\n   abbr [-e | --erase] NAME\\n\\nErases the abbreviation with the given name\\n\\n   abbr -q or --query [NAME...]\\n\\nReturn 0 (true) if one of the NAME is an abbreviation.\\n\\n   abbr -h or --help\\n\\nDisplays help for the abbr command.\",\n    \"args\": \"abbr --add NAME [--position command | anywhere] [-r | --regex PATTERN]\\n[--set-cursor[=MARKER]] ([-f | --function FUNCTION] | EXPANSION)\\nabbr --erase NAME ...\\nabbr --rename OLD_WORD NEW_WORD\\nabbr --show\\nabbr --list\\nabbr --query NAME ...\"\n  },\n  \"and\": {\n    \"shortDescription\": \"conditionally execute a command\",\n    \"description\": \"and is used to execute a command if the previous command was\\nsuccessful (returned a status of 0).\\n\\nand statements may be used as part of the condition in an while or if\\nblock.\\n\\nand does not change the current exit status itself, but the command\\nit runs most likely will. The exit status of the last foreground\\ncommand to exit can always be accessed using the $status variable.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\nThe following code runs the make command to build a program. If the\\nbuild succeeds, make's exit status is 0, and the program is\\ninstalled. If either step fails, the exit status is 1, and make clean\\nis run, which removes the files created by the build process.\\n\\n   make; and make install; or make clean\\n\\nSEE ALSO\\n\\n• or command\\n\\n• not command\",\n    \"args\": \"PREVIOUS; and COMMAND\"\n  },\n  \"argparse\": {\n    \"shortDescription\": \"parse options passed to a fish script or function\",\n    \"description\": \"This command makes it easy for fish scripts and functions to handle\\narguments. You pass arguments that define the known options, followed\\nby a literal --, then the arguments to be parsed (which might also\\ninclude a literal --). argparse then sets variables to indicate the\\npassed options with their values, and sets $argv to the remaining\\narguments. See the usage section below.\\n\\nEach option specification (OPTION_SPEC) is written in the domain\\nspecific language described below. All OPTION_SPECs must appear after\\nany argparse flags and before the -- that separates them from the\\narguments to be parsed.\\n\\nEach option that is seen in the ARG list will result in variables\\nnamed _flag_X, where X is the short flag letter and the long flag\\nname (if they are defined). For example a --help option could cause\\nargparse to define one variable called _flag_h and another called\\n_flag_help.\\n\\nThe variables will be set with local scope (i.e., as if the script\\nhad done set -l _flag_X). If the flag is a boolean (that is, it just\\nis passed or not, it doesn't have a value) the values are the short\\nand long flags seen. If the option is not a boolean the values will\\nbe zero or more values corresponding to the values collected when the\\nARG list is processed. If the flag was not seen the flag variable\\nwill not be set.\\n\\nOPTIONS\\nThe following argparse options are available. They must appear before\\nall OPTION_SPECs:\\n\\n-n or --name\\n       The command name for use in error messages. By default the\\n       current function name will be used, or argparse if run outside\\n       of a function.\\n\\n-x or --exclusive OPTIONS\\n       A comma separated list of options that are mutually exclusive.\\n       You can use this more than once to define multiple sets of\\n       mutually exclusive options.  You give either the short or long\\n       version of each option, and you still need to otherwise define\\n       the options.\\n\\n-N or --min-args NUMBER\\n       The minimum number of acceptable non-option arguments. The\\n       default is zero.\\n\\n-X or --max-args NUMBER\\n       The maximum number of acceptable non-option arguments. The\\n       default is infinity.\\n\\n-i or --ignore-unknown\\n       Ignores unknown options, keeping them and their arguments in\\n       $argv instead.\\n\\n-s or --stop-nonopt\\n       Causes scanning the arguments to stop as soon as the first\\n       non-option argument is seen. Among other things, this is\\n       useful to implement subcommands that have their own options.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nUSAGE\\nTo use this command, pass the option specifications (OPTION_SPEC), a\\nmandatory --, and then the arguments to be parsed.\\n\\nA simple example:\\n\\n   argparse --name=my_function 'h/help' 'n/name=' -- $argv\\n   or return\\n\\nIf $argv is empty then there is nothing to parse and argparse returns\\nzero to indicate success. If $argv is not empty then it is checked\\nfor flags -h, --help, -n and --name. If they are found they are\\nremoved from the arguments and local variables called _flag_OPTION\\nare set so the script can determine which options were seen. If $argv\\ndoesn't have any errors, like a missing mandatory value for an\\noption, then argparse exits with a status of zero. Otherwise it\\nwrites appropriate error messages to stderr and exits with a status\\nof one.\\n\\nThe or return means that the function returns argparse's status if it\\nfailed, so if it goes on argparse succeeded.\\n\\nThe -- argument is required. You do not have to include any option\\nspecifications or arguments after the -- but you must include the --.\\nFor example, this is acceptable:\\n\\n   set -l argv foo\\n   argparse 'h/help' 'n/name' -- $argv\\n   argparse --min-args=1 -- $argv\\n\\nBut this is not:\\n\\n   set -l argv\\n   argparse 'h/help' 'n/name' $argv\\n\\nThe first -- seen is what allows the argparse command to reliably\\nseparate the option specifications and options to argparse itself\\n(like --ignore-unknown) from the command arguments, so it is\\nrequired.\\n\\nOPTION SPECIFICATIONS\\nEach option specification consists of:\\n\\n• An optional alphanumeric short flag character, followed by a / if\\n  the short flag can be used by someone invoking your command or, for\\n  backwards compatibility, a - if it should not be exposed as a valid\\n  short flag (in which case it will also not be exposed as a flag\\n  variable).\\n\\n• An optional long flag name, which if not present the short flag can\\n  be used, and if that is also not present, an error is reported\\n\\n• Nothing if the flag is a boolean that takes no argument or is an\\n  integer flag, or\\n\\n     • = if it requires a value and only the last instance of the\\n       flag is saved, or\\n\\n     • =? if it takes an optional value and only the last instance of\\n       the flag is saved, or\\n\\n     • =+ if it requires a value and each instance of the flag is\\n       saved.\\n\\n• Optionally a ! followed by fish script to validate the value.\\n  Typically this will be a function to run. If the exit status is\\n  zero the value for the flag is valid. If non-zero the value is\\n  invalid. Any error messages should be written to stdout (not\\n  stderr). See the section on Flag Value Validation for more\\n  information.\\n\\nSee the fish_opt command for a friendlier but more verbose way to\\ncreate option specifications.\\n\\nIf a flag is not seen when parsing the arguments then the\\ncorresponding _flag_X var(s) will not be set.\\n\\nINTEGER FLAG\\nSometimes commands take numbers directly as options, like foo -55. To\\nallow this one option spec can have the # modifier so that any\\ninteger will be understood as this flag, and the last number will be\\ngiven as its value (as if = was used).\\n\\nThe # must follow the short flag letter (if any), and other modifiers\\nlike = are not allowed, except for - (for backwards compatibility):\\n\\n   m#maximum\\n\\nThis does not read numbers given as +NNN, only those that look like\\nflags - -NNN.\\n\\nNOTE: OPTIONAL ARGUMENTS\\nAn option defined with =? can take optional arguments. Optional\\narguments have to be directly attached to the option they belong to.\\n\\nThat means the argument will only be used for the option if you use\\nit like:\\n\\n   cmd --flag=value\\n   # or\\n   cmd  -fvalue\\n\\nbut not if used like:\\n\\n   cmd --flag value\\n   # \\\"value\\\" here will be used as a positional argument\\n   # and \\\"--flag\\\" won't have an argument.\\n\\nIf this weren't the case, using an option without an optional\\nargument would be difficult if you also wanted to use positional\\narguments.\\n\\nFor example:\\n\\n   grep --color auto\\n   # Here \\\"auto\\\" will be used as the search string,\\n   # \\\"color\\\" will not have an argument and will fall back to the default,\\n   # which also *happens to be* auto.\\n   grep --color always\\n   # Here grep will still only use color \\\"auto\\\"matically\\n   # and search for the string \\\"always\\\".\\n\\nThis isn't specific to argparse but common to all things using\\ngetopt(3) (if they have optional arguments at all). That grep example\\nis how GNU grep actually behaves.\\n\\nFLAG VALUE VALIDATION\\nSometimes you need to validate the option values. For example, that\\nit is a valid integer within a specific range, or an ip address, or\\nsomething entirely different. You can always do this after argparse\\nreturns but you can also request that argparse perform the validation\\nby executing arbitrary fish script. To do so simply append an !\\n(exclamation-mark) then the fish script to be run. When that code is\\nexecuted three vars will be defined:\\n\\n• _argparse_cmd will be set to the value of the value of the argparse\\n  --name value.\\n\\n• _flag_name will be set to the short or long flag that being\\n  processed.\\n\\n• _flag_value will be set to the value associated with the flag being\\n  processed.\\n\\nThese variables are passed to the function as local exported\\nvariables.\\n\\nThe script should write any error messages to stdout, not stderr. It\\nshould return a status of zero if the flag value is valid otherwise a\\nnon-zero status to indicate it is invalid.\\n\\nFish ships with a _validate_int function that accepts a --min and\\n--max flag. Let's say your command accepts a -m or --max flag and the\\nminimum allowable value is zero and the maximum is 5. You would\\ndefine the option like this: m/max=!_validate_int --min 0 --max 5.\\nThe default if you just call _validate_int without those flags is to\\nsimply check that the value is a valid integer with no limits on the\\nmin or max value allowed.\\n\\nHere are some examples of flag validations:\\n\\n   # validate that a path is a directory\\n   argparse 'p/path=!test -d \\\"$_flag_value\\\"' -- --path $__fish_config_dir\\n   # validate that a function does not exist\\n   argparse 'f/func=!not functions -q \\\"$_flag_value\\\"' -- -f alias\\n   # validate that a string matches a regex\\n   argparse 'c/color=!string match -rq \\\\'^#?[0-9a-fA-F]{6}$\\\\' \\\"$_flag_value\\\"' -- -c 'c0ffee'\\n   # validate with a validator function\\n   argparse 'n/num=!_validate_int --min 0 --max 99' -- --num 42\\n\\nEXAMPLE OPTION_SPECS\\nSome OPTION_SPEC examples:\\n\\n• h/help means that both -h and --help are valid. The flag is a\\n  boolean and can be used more than once. If either flag is used then\\n  _flag_h and _flag_help will be set to however either flag was seen,\\n  as many times as it was seen. So it could be set to -h, -h and\\n  --help, and count $_flag_h would yield \\\"3\\\".\\n\\n• help means that only --help is valid. The flag is a boolean and can\\n  be used more than once. If it is used then _flag_help will be set\\n  as above. Also h-help (with an arbitrary short letter) for\\n  backwards compatibility.\\n\\n• longonly= is a flag --longonly that requires an option, there is no\\n  short flag or even short flag variable.\\n\\n• n/name= means that both -n and --name are valid. It requires a\\n  value and can be used at most once. If the flag is seen then\\n  _flag_n and _flag_name will be set with the single mandatory value\\n  associated with the flag.\\n\\n• n/name=? means that both -n and --name are valid. It accepts an\\n  optional value and can be used at most once. If the flag is seen\\n  then _flag_n and _flag_name will be set with the value associated\\n  with the flag if one was provided else it will be set with no\\n  values.\\n\\n• name=+ means that only --name is valid. It requires a value and can\\n  be used more than once. If the flag is seen then _flag_name will be\\n  set with the values associated with each occurrence.\\n\\n• x means that only -x is valid. It is a boolean that can be used\\n  more than once. If it is seen then _flag_x will be set as above.\\n\\n• x=, x=?, and x=+ are similar to the n/name examples above but there\\n  is no long flag alternative to the short flag -x.\\n\\n• #max (or #-max) means that flags matching the regex \\\"^--?\\\\d+$\\\" are\\n  valid. When seen they are assigned to the variable _flag_max. This\\n  allows any valid positive or negative integer to be specified by\\n  prefixing it with a single \\\"-\\\". Many commands support this idiom.\\n  For example head -3 /a/file to emit only the first three lines of\\n  /a/file.\\n\\n• n#max means that flags matching the regex \\\"^--?\\\\d+$\\\" are valid.\\n  When seen they are assigned to the variables _flag_n and _flag_max.\\n  This allows any valid positive or negative integer to be specified\\n  by prefixing it with a single \\\"-\\\". Many commands support this\\n  idiom. For example head -3 /a/file to emit only the first three\\n  lines of /a/file. You can also specify the value using either flag:\\n  -n NNN or --max NNN in this example.\\n\\n• #longonly causes the last integer option to be stored in\\n  _flag_longonly.\\n\\nAfter parsing the arguments the argv variable is set with local scope\\nto any values not already consumed during flag processing. If there\\nare no unbound values the variable is set but count $argv will be\\nzero.\\n\\nIf an error occurs during argparse processing it will exit with a\\nnon-zero status and print error messages to stderr.\\n\\nEXAMPLES\\nA simple use:\\n\\n   argparse h/help -- $argv\\n   or return\\n\\n   if set -q _flag_help\\n       # TODO: Print help here\\n       return 0\\n   end\\n\\nThis just wants one option - -h / --help. Any other option is an\\nerror. If it is given it prints help and exits.\\n\\nHow fish_add_path - add to the path parses its args:\\n\\n   argparse -x g,U -x P,U -x a,p g/global U/universal P/path p/prepend a/append h/help m/move v/verbose n/dry-run -- $argv\\n\\nThere are a variety of boolean flags, all with long and short\\nversions. A few of these cannot be used together, and that is what\\nthe -x flag is used for.  -x g,U means that --global and --universal\\nor their short equivalents conflict, and if they are used together\\nyou get an error.  In this case you only need to give the short or\\nlong flag, not the full option specification.\\n\\nAfter this it figures out which variable it should operate on\\naccording to the --path flag:\\n\\n   set -l var fish_user_paths\\n   set -q _flag_path\\n   and set var PATH\\n\\nLIMITATIONS\\nOne limitation with --ignore-unknown is that, if an unknown option is\\ngiven in a group with known options, the entire group will be kept in\\n$argv. argparse will not do any permutations here.\\n\\nFor instance:\\n\\n   argparse --ignore-unknown h -- -ho\\n   echo $_flag_h # is -h, because -h was given\\n   echo $argv # is still -ho\\n\\nThis limitation may be lifted in future.\\n\\nAdditionally, it can only parse known options up to the first unknown\\noption in the group - the unknown option could take options, so it\\nisn't clear what any character after an unknown option means.\",\n    \"args\": \"argparse [OPTIONS] OPTION_SPEC ... -- [ARG ...]\"\n  },\n  \"begin\": {\n    \"shortDescription\": \"start a new block of code\",\n    \"description\": \"begin is used to create a new block of code.\\n\\nA block allows the introduction of a new variable scope, redirection\\nof the input or output of a set of commands as a group, or to specify\\nprecedence when using the conditional commands like and.\\n\\nThe block is unconditionally executed. begin; ...; end is equivalent\\nto if true; ...; end.\\n\\nbegin does not change the current exit status itself. After the block\\nhas completed, $status will be set to the status returned by the most\\nrecent command.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\nThe following code sets a number of variables inside of a block\\nscope. Since the variables are set inside the block and have local\\nscope, they will be automatically deleted when the block ends.\\n\\n   begin\\n       set -l PIRATE Yarrr\\n\\n       ...\\n   end\\n\\n   echo $PIRATE\\n   # This will not output anything, since the PIRATE variable\\n   # went out of scope at the end of the block\\n\\nIn the following code, all output is redirected to the file out.html.\\n\\n   begin\\n       echo $xml_header\\n       echo $html_header\\n       if test -e $file\\n           ...\\n       end\\n       ...\\n   end > out.html\",\n    \"args\": \"begin; [COMMANDS ...]; end\"\n  },\n  \"bg\": {\n    \"shortDescription\": \"send jobs to background\",\n    \"description\": \"bg sends jobs to the background, resuming them if they are stopped.\\n\\nA background job is executed simultaneously with fish, and does not\\nhave access to the keyboard. If no job is specified, the last job to\\nbe used is put in the background. If PID is specified, the jobs\\ncontaining the specified process IDs are put in the background.\\n\\nFor compatibility with other shells, job expansion syntax is\\nsupported for bg. A PID of the format %1 will be interpreted as the\\nPID of job 1. Job numbers can be seen in the output of jobs.\\n\\nWhen at least one of the arguments isn't a valid job specifier, bg\\nwill print an error without backgrounding anything.\\n\\nWhen all arguments are valid job specifiers, bg will background all\\nmatching jobs that exist.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\nbg 123 456 789 will background the jobs that contain processes 123,\\n456 and 789.\\n\\nIf only 123 and 789 exist, it will still background them and print an\\nerror about 456.\\n\\nbg 123 banana or bg banana 123 will complain that \\\"banana\\\" is not a\\nvalid job specifier.\\n\\nbg %1 will background job 1.\",\n    \"args\": \"bg [PID ...]\"\n  },\n  \"bind\": {\n    \"shortDescription\": \"handle fish key bindings\",\n    \"description\": \"bind manages bindings.\\n\\nIt can add bindings if given a SEQUENCE of characters to bind to.\\nThese should be written as fish escape sequences. The most important\\nof these are \\\\c for the control key, and \\\\e for escape, and because\\nof historical reasons also the Alt key (sometimes also called\\n\\\"Meta\\\").\\n\\nFor example, Alt+W can be written as \\\\ew, and Control+X (^X) can be\\nwritten as \\\\cx. Note that Alt-based key bindings are case sensitive\\nand Control-based key bindings are not. This is a constraint of\\ntext-based terminals, not fish.\\n\\nThe generic key binding that matches if no other binding does can be\\nset by specifying a SEQUENCE of the empty string (that is, '' ). For\\nmost key bindings, it makes sense to bind this to the self-insert\\nfunction (i.e. bind '' self-insert). This will insert any keystrokes\\nnot specifically bound to into the editor. Non-printable characters\\nare ignored by the editor, so this will not result in control\\nsequences being inserted.\\n\\nIf the -k switch is used, the name of a key (such as 'down', 'up' or\\n'backspace') is used instead of a sequence. The names used are the\\nsame as the corresponding curses variables, but without the 'key'\\nprefix. (See terminfo(5) for more information, or use bind\\n--key-names for a list of all available named keys). Normally this\\nwill print an error if the current $TERM entry doesn't have a given\\nkey, unless the -s switch is given.\\n\\nTo find out what sequence a key combination sends, you can use\\nfish_key_reader.\\n\\nCOMMAND can be any fish command, but it can also be one of a set of\\nspecial input functions. These include functions for moving the\\ncursor, operating on the kill-ring, performing tab completion, etc.\\nUse bind --function-names for a complete list of these input\\nfunctions.\\n\\nWhen COMMAND is a shellscript command, it is a good practice to put\\nthe actual code into a function and simply bind to the function name.\\nThis way it becomes significantly easier to test the function while\\nediting, and the result is usually more readable as well.\\n\\nNOTE:\\n   Special input functions cannot be combined with ordinary shell\\n   script commands. The commands must be entirely a sequence of\\n   special input functions (from bind -f) or all shell script\\n   commands (i.e., valid fish script). To run special input functions\\n   from regular fish script, use commandline -f (see also\\n   commandline). If a script produces output, it should finish by\\n   calling commandline -f repaint to tell fish that a repaint is in\\n   order.\\n\\nIf no SEQUENCE is provided, all bindings (or just the bindings in the\\ngiven MODE) are printed. If SEQUENCE is provided but no COMMAND, just\\nthe binding matching that sequence is printed.\\n\\nTo save custom key bindings, put the bind statements into\\nconfig.fish. Alternatively, fish also automatically executes a\\nfunction called fish_user_key_bindings if it exists.\\n\\nKey bindings may use \\\"modes\\\", which mimics Vi's modal input behavior.\\nThe default mode is \\\"default\\\". Every key binding applies to a single\\nmode; you can specify which one with -M MODE. If the key binding\\nshould change the mode, you can specify the new mode with -m\\nNEW_MODE. The mode can be viewed and changed via the $fish_bind_mode\\nvariable. If you want to change the mode from inside a fish function,\\nuse set fish_bind_mode MODE.\\n\\nOPTIONS\\nThe following options are available:\\n\\n-k or --key\\n       Specify a key name, such as 'left' or 'backspace' instead of a\\n       character sequence\\n\\n-K or --key-names\\n       Display a list of available key names. Specifying -a or --all\\n       includes keys that don't have a known mapping\\n\\n-f or --function-names\\n       Display a list of available input functions\\n\\n-L or --list-modes\\n       Display a list of defined bind modes\\n\\n-M MODE or --mode MODE\\n       Specify a bind mode that the bind is used in. Defaults to\\n       \\\"default\\\"\\n\\n-m NEW_MODE or --sets-mode NEW_MODE\\n       Change the current mode to NEW_MODE after this binding is\\n       executed\\n\\n-e or --erase\\n       Erase the binding with the given sequence and mode instead of\\n       defining a new one.  Multiple sequences can be specified with\\n       this flag.  Specifying -a or --all with -M or --mode erases\\n       all binds in the given mode regardless of sequence.\\n       Specifying -a or --all without -M or --mode erases all binds\\n       in all modes regardless of sequence.\\n\\n-a or --all\\n       See --erase and --key-names\\n\\n--preset and --user\\n       Specify if bind should operate on user or preset bindings.\\n       User bindings take precedence over preset bindings when fish\\n       looks up mappings.  By default, all bind invocations work on\\n       the \\\"user\\\" level except for listing, which will show both\\n       levels.  All invocations except for inserting new bindings can\\n       operate on both levels at the same time (if both --preset and\\n       --user are given).  --preset should only be used in full\\n       binding sets (like when working on fish_vi_key_bindings).\\n\\n-s or --silent\\n       Silences some of the error messages, including for unknown key\\n       names and unbound sequences.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nSPECIAL INPUT FUNCTIONS\\nThe following special input functions are available:\\n\\nand    only execute the next function if the previous succeeded\\n       (note: only some functions report success)\\n\\naccept-autosuggestion\\n       accept the current autosuggestion\\n\\nbackward-char\\n       move one character to the left.  If the completion pager is\\n       active, select the previous completion instead.\\n\\nbackward-bigword\\n       move one whitespace-delimited word to the left\\n\\nbackward-delete-char\\n       deletes one character of input to the left of the cursor\\n\\nbackward-kill-bigword\\n       move the whitespace-delimited word to the left of the cursor\\n       to the killring\\n\\nbackward-kill-line\\n       move everything from the beginning of the line to the cursor\\n       to the killring\\n\\nbackward-kill-path-component\\n       move one path component to the left of the cursor to the\\n       killring. A path component is everything likely to belong to a\\n       path component, i.e. not any of the following: /={,}'\\\":@\\n       |;<>&, plus newlines and tabs.\\n\\nbackward-kill-word\\n       move the word to the left of the cursor to the killring. The\\n       \\\"word\\\" here is everything up to punctuation or whitespace.\\n\\nbackward-word\\n       move one word to the left\\n\\nbeginning-of-buffer\\n       moves to the beginning of the buffer, i.e. the start of the\\n       first line\\n\\nbeginning-of-history\\n       move to the beginning of the history\\n\\nbeginning-of-line\\n       move to the beginning of the line\\n\\nbegin-selection\\n       start selecting text\\n\\ncancel cancel the current commandline and replace it with a new empty\\n       one\\n\\ncancel-commandline\\n       cancel the current commandline and replace it with a new empty\\n       one, leaving the old one in place with a marker to show that\\n       it was cancelled\\n\\ncapitalize-word\\n       make the current word begin with a capital letter\\n\\nclear-screen\\n       clears the screen and redraws the prompt. if the terminal\\n       doesn't support clearing the screen it is the same as repaint.\\n\\ncomplete\\n       guess the remainder of the current token\\n\\ncomplete-and-search\\n       invoke the searchable pager on completion options (for\\n       convenience, this also moves backwards in the completion\\n       pager)\\n\\ndelete-char\\n       delete one character to the right of the cursor\\n\\ndelete-or-exit\\n       delete one character to the right of the cursor, or exit the\\n       shell if the commandline is empty\\n\\ndown-line\\n       move down one line\\n\\ndowncase-word\\n       make the current word lowercase\\n\\nend-of-buffer\\n       moves to the end of the buffer, i.e. the end of the first line\\n\\nend-of-history\\n       move to the end of the history\\n\\nend-of-line\\n       move to the end of the line\\n\\nend-selection\\n       end selecting text\\n\\nexpand-abbr\\n       expands any abbreviation currently under the cursor\\n\\nexecute\\n       run the current commandline\\n\\nexit   exit the shell\\n\\nforward-bigword\\n       move one whitespace-delimited word to the right\\n\\nforward-char\\n       move one character to the right; or if at the end of the\\n       commandline, accept the current autosuggestion.  If the\\n       completion pager is active, select the next completion\\n       instead.\\n\\nforward-single-char\\n       move one character to the right; or if at the end of the\\n       commandline, accept a single char from the current\\n       autosuggestion.\\n\\nforward-word\\n       move one word to the right; or if at the end of the\\n       commandline, accept one word from the current autosuggestion.\\n\\nhistory-pager\\n       invoke the searchable pager on history (incremental search);\\n       or if the history pager is already active, search further\\n       backwards in time.\\n\\nhistory-pager-delete\\n       permanently delete the history item selected in the history\\n       pager\\n\\nhistory-search-backward\\n       search the history for the previous match\\n\\nhistory-search-forward\\n       search the history for the next match\\n\\nhistory-prefix-search-backward\\n       search the history for the previous prefix match\\n\\nhistory-prefix-search-forward\\n       search the history for the next prefix match\\n\\nhistory-token-search-backward\\n       search the history for the previous matching argument\\n\\nhistory-token-search-forward\\n       search the history for the next matching argument\\n\\nforward-jump and backward-jump\\n       read another character and jump to its next occurence\\n       after/before the cursor\\n\\nforward-jump-till and backward-jump-till\\n       jump to right before the next occurence\\n\\nrepeat-jump and repeat-jump-reverse\\n       redo the last jump in the same/opposite direction\\n\\nkill-bigword\\n       move the next whitespace-delimited word to the killring\\n\\nkill-line\\n       move everything from the cursor to the end of the line to the\\n       killring\\n\\nkill-selection\\n       move the selected text to the killring\\n\\nkill-whole-line\\n       move the line (including the following newline) to the\\n       killring. If the line is the last line, its preceeding newline\\n       is also removed\\n\\nkill-inner-line\\n       move the line (without the following newline) to the killring\\n\\nkill-word\\n       move the next word to the killring\\n\\nnextd-or-forward-word\\n       if the commandline is empty, then move forward in the\\n       directory history, otherwise move one word to the right; or if\\n       at the end of the commandline, accept one word from the\\n       current autosuggestion.\\n\\nor     only execute the next function if the previous did not succeed\\n       (note: only some functions report failure)\\n\\npager-toggle-search\\n       toggles the search field if the completions pager is visible;\\n       or if used after history-pager, search forwards in time.\\n\\nprevd-or-backward-word\\n       if the commandline is empty, then move backward in the\\n       directory history, otherwise move one word to the left\\n\\nrepaint\\n       reexecutes the prompt functions and redraws the prompt (also\\n       force-repaint for backwards-compatibility)\\n\\nrepaint-mode\\n       reexecutes the fish_mode_prompt and redraws the prompt. This\\n       is useful for vi-mode. If no fish_mode_prompt exists or it\\n       prints nothing, it acts like a normal repaint.\\n\\nself-insert\\n       inserts the matching sequence into the command line\\n\\nself-insert-notfirst\\n       inserts the matching sequence into the command line, unless\\n       the cursor is at the beginning\\n\\nsuppress-autosuggestion\\n       remove the current autosuggestion. Returns true if there was a\\n       suggestion to remove.\\n\\nswap-selection-start-stop\\n       go to the other end of the highlighted text without changing\\n       the selection\\n\\ntranspose-chars\\n       transpose two characters to the left of the cursor\\n\\ntranspose-words\\n       transpose two words to the left of the cursor\\n\\ntogglecase-char\\n       toggle the capitalisation (case) of the character under the\\n       cursor\\n\\ntogglecase-selection\\n       toggle the capitalisation (case) of the selection\\n\\ninsert-line-under\\n       add a new line under the current line\\n\\ninsert-line-over\\n       add a new line over the current line\\n\\nup-line\\n       move up one line\\n\\nundo and redo\\n       revert or redo the most recent edits on the command line\\n\\nupcase-word\\n       make the current word uppercase\\n\\nyank   insert the latest entry of the killring into the buffer\\n\\nyank-pop\\n       rotate to the previous entry of the killring\\n\\nADDITIONAL FUNCTIONS\\nThe following functions are included as normal functions, but are\\nparticularly useful for input editing:\\n\\nup-or-search and down-or-search\\n       move the cursor or search the history depending on the cursor\\n       position and current mode\\n\\nedit_command_buffer\\n       open the visual editor (controlled by the VISUAL or EDITOR\\n       environment variables) with the current command-line contents\\n\\nfish_clipboard_copy\\n       copy the current selection to the system clipboard\\n\\nfish_clipboard_paste\\n       paste the current selection from the system clipboard before\\n       the cursor\\n\\nfish_commandline_append\\n       append the argument to the command-line. If the command-line\\n       already ends with the argument, this removes the suffix\\n       instead. Starts with the last command from history if the\\n       command-line is empty.\\n\\nfish_commandline_prepend\\n       prepend the argument to the command-line. If the command-line\\n       already starts with the argument, this removes the prefix\\n       instead. Starts with the last command from history if the\\n       command-line is empty.\\n\\nEXAMPLES\\nExit the shell when Control+D is pressed:\\n\\n   bind \\\\cd 'exit'\\n\\nPerform a history search when Page Up is pressed:\\n\\n   bind -k ppage history-search-backward\\n\\nTurn on Vi key bindings and rebind Control+C to clear the input line:\\n\\n   set -g fish_key_bindings fish_vi_key_bindings\\n   bind -M insert \\\\cc kill-whole-line repaint\\n\\nLaunch git diff and repaint the commandline afterwards when Control+G\\nis pressed:\\n\\n   bind \\\\cg 'git diff; commandline -f repaint'\\n\\nTERMINAL LIMITATIONS\\nUnix terminals, like the ones fish operates in, are at heart 70s\\ntechnology. They have some limitations that applications running\\ninside them can't workaround.\\n\\nFor instance, the control key modifies a character by setting the top\\nthree bits to 0. This means:\\n\\n• Many characters + control are indistinguishable from other keys.\\n  Control+I is tab, Control+J is newline (\\\\n).\\n\\n• Control and shift don't work simultaneously\\n\\nOther keys don't have a direct encoding, and are sent as escape\\nsequences. For example → (Right) often sends \\\\e\\\\[C. These can differ\\nfrom terminal to terminal, and the mapping is typically available in\\nterminfo(5). Sometimes however a terminal identifies as e.g.\\nxterm-256color for compatibility, but then implements xterm's\\nsequences incorrectly.\\n\\nSPECIAL CASE: THE ESCAPE CHARACTER\\nThe escape key can be used standalone, for example, to switch from\\ninsertion mode to normal mode when using Vi keybindings. Escape can\\nalso be used as a \\\"meta\\\" key, to indicate the start of an escape\\nsequence, like for function or arrow keys. Custom bindings can also\\nbe defined that begin with an escape character.\\n\\nHolding alt and something else also typically sends escape, for\\nexample holding alt+a will send an escape character and then an \\\"a\\\".\\n\\nfish waits for a period after receiving the escape character, to\\ndetermine whether it is standalone or part of an escape sequence.\\nWhile waiting, additional key presses make the escape key behave as a\\nmeta key. If no other key presses come in, it is handled as a\\nstandalone escape. The waiting period is set to 30 milliseconds (0.03\\nseconds). It can be configured by setting the fish_escape_delay_ms\\nvariable to a value between 10 and 5000 ms. This can be a universal\\nvariable that you set once from an interactive session.  So the\\nescape character has its own timeout configured with\\nfish_escape_delay_ms.\\n\\nSee also Key sequences.\",\n    \"args\": \"bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE] [--preset | --user] [-s | --silent] [-k | --key] SEQUENCE COMMAND ...\\nbind [(-M | --mode) MODE] [-k | --key] [--preset] [--user] SEQUENCE\\nbind (-K | --key-names) [-a | --all] [--preset] [--user]\\nbind (-f | --function-names)\\nbind (-L | --list-modes)\\nbind (-e | --erase) [(-M | --mode) MODE] [--preset] [--user] [-a | --all] | [-k | --key] SEQUENCE ...\"\n  },\n  \"block\": {\n    \"shortDescription\": \"temporarily block delivery of events\",\n    \"description\": \"block prevents events triggered by fish or the emit command from\\nbeing delivered and acted upon while the block is in place.\\n\\nIn functions, block can be useful while performing work that should\\nnot be interrupted by the shell.\\n\\nThe block can be removed. Any events which triggered while the block\\nwas in place will then be delivered.\\n\\nEvent blocks should not be confused with code blocks, which are\\ncreated with begin, if, while or for\\n\\nWithout options, the block command acts with function scope.\\n\\nThe following options are available:\\n\\n-l or --local\\n       Release the block automatically at the end of the current\\n       innermost code block scope.\\n\\n-g or --global\\n       Never automatically release the lock.\\n\\n-e or --erase\\n       Release global block.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nEXAMPLE\\n\\n   # Create a function that listens for events\\n   function --on-event foo foo; echo 'foo fired'; end\\n\\n   # Block the delivery of events\\n   block -g\\n\\n   emit foo\\n   # No output will be produced\\n\\n   block -e\\n   # 'foo fired' will now be printed\\n\\nNOTES\\nEvents are only received from the current fish process as there is no\\nway to send events from one fish process to another (yet).\",\n    \"args\": \"block [(--local | --global)]\\nblock --erase\"\n  },\n  \"break\": {\n    \"shortDescription\": \"Exit the current loop\",\n    \"description\": \"Terminate the execution of the nearest enclosing `while` or `for` loop and proceed with the next command after the loop.\"\n  },\n  \"breakpoint\": {\n    \"shortDescription\": \"Launch debug mode\",\n    \"description\": \"Pause execution and launch an interactive debug prompt. This is useful for inspecting the state of a script at a specific point.\"\n  },\n  \"builtin\": {\n    \"shortDescription\": \"run a builtin command\",\n    \"description\": \"builtin forces the shell to use a builtin command named BUILTIN,\\nrather than a function or external program.\\n\\nThe following options are available:\\n\\n-n or --names\\n       Lists the names of all defined builtins.\\n\\n-q or --query BUILTIN\\n       Tests if any of the specified builtins exist. If any exist, it\\n       returns 0, 1 otherwise.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nEXAMPLE\\n\\n   builtin jobs\\n   # executes the jobs builtin, even if a function named jobs exists\",\n    \"args\": \"builtin [OPTIONS] BUILTINNAME\\nbuiltin --query BUILTINNAME ...\\nbuiltin --names\"\n  },\n  \"case\": {\n    \"shortDescription\": \"Match a value against patterns\",\n    \"description\": \"Within a `switch` block, the `case` command specifies patterns to match against the given value, executing the associated block if a match is found.\",\n    \"args\": \"PATTERN...\"\n  },\n  \"cd\": {\n    \"shortDescription\": \"change directory\",\n    \"description\": \"cd changes the current working directory.\\n\\nIf DIRECTORY is given, it will become the new directory. If no\\nparameter is given, the HOME environment variable will be used.\\n\\nIf DIRECTORY is a relative path, all the paths in the CDPATH will be\\ntried as prefixes for it, in addition to PWD.  It is recommended to\\nkeep . as the first element of CDPATH, or PWD will be tried last.\\n\\nFish will also try to change directory if given a command that looks\\nlike a directory (starting with ., / or ~, or ending with /), without\\nexplicitly requiring cd.\\n\\nFish also ships a wrapper function around the builtin cd that\\nunderstands cd - as changing to the previous directory.  See also\\nprevd.  This wrapper function maintains a history of the 25 most\\nrecently visited directories in the $dirprev and $dirnext global\\nvariables.  If you make those universal variables your cd history is\\nshared among all fish instances.\\n\\nAs a special case, cd . is equivalent to cd $PWD, which is useful in\\ncases where a mountpoint has been recycled or a directory has been\\nremoved and recreated.\\n\\nThe --help or -h option displays help about using this command, and\\ndoes not change the directory.\\n\\nEXAMPLES\\n\\n   cd\\n   # changes the working directory to your home directory.\\n\\n   cd /usr/src/fish-shell\\n   # changes the working directory to /usr/src/fish-shell\\n\\nSEE ALSO\\nNavigate directories using the directory history or the directory\\nstack\",\n    \"args\": \"cd [DIRECTORY]\"\n  },\n  \"command\": {\n    \"shortDescription\": \"run a program\",\n    \"description\": \"command forces the shell to execute the program COMMANDNAME and\\nignore any functions or builtins with the same name.\\n\\nThe following options are available:\\n\\n-a or --all\\n       Prints all COMMAND found in PATH, in the order found.\\n\\n-q or --query\\n       Silence output and print nothing, setting only exit status.\\n       Implies --search.  For compatibility, this is also --quiet\\n       (deprecated).\\n\\n-v (or -s or --search)\\n       Prints the external command that would be executed, or prints\\n       nothing if no file with the specified name could be found in\\n       PATH.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nWith the -v option, command treats every argument as a separate\\ncommand to look up and sets the exit status to 0 if any of the\\nspecified commands were found, or 127 if no commands could be found.\\n--quiet used with -v prevents commands being printed, like type -q.\\n\\nEXAMPLES\\ncommand ls executes the ls program, even if an ls function also exists.\\ncommand -s ls prints the path to the ls program.\\ncommand -q git; and command git log runs git log only if git exists.\",\n    \"args\": \"command [OPTIONS] [COMMANDNAME [ARG ...]]\"\n  },\n  \"commandline\": {\n    \"shortDescription\": \"set or get the current command line buffer\",\n    \"description\": \"commandline can be used to set or get the current contents of the\\ncommand line buffer.\\n\\nWith no parameters, commandline returns the current value of the\\ncommand line.\\n\\nWith CMD specified, the command line buffer is erased and replaced\\nwith the contents of CMD.\\n\\nThe following options are available:\\n\\n-C or --cursor\\n       Set or get the current cursor position, not the contents of\\n       the buffer.  If no argument is given, the current cursor\\n       position is printed, otherwise the argument is interpreted as\\n       the new cursor position.  If one of the options -j, -p or -t\\n       is given, the position is relative to the respective substring\\n       instead of the entire command line buffer.\\n\\n-B or --selection-start\\n       Get current position of the selection start in the buffer.\\n\\n-E or --selection-end\\n       Get current position of the selection end in the buffer.\\n\\n-f or --function\\n       Causes any additional arguments to be interpreted as input\\n       functions, and puts them into the queue, so that they will be\\n       read before any additional actual key presses are.  This\\n       option cannot be combined with any other option.  See bind for\\n       a list of input functions.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nThe following options change the way commandline updates the command\\nline buffer:\\n\\n-a or --append\\n       Do not remove the current commandline, append the specified\\n       string at the end of it.\\n\\n-i or --insert\\n       Do not remove the current commandline, insert the specified\\n       string at the current cursor position\\n\\n-r or --replace\\n       Remove the current commandline and replace it with the\\n       specified string (default)\\n\\nThe following options change what part of the commandline is printed\\nor updated:\\n\\n-b or --current-buffer\\n       Select the entire commandline, not including any displayed\\n       autosuggestion (default).\\n\\n-j or --current-job\\n       Select the current job - a job here is one pipeline.  Stops at\\n       logical operators or terminators (;, &, and newlines).\\n\\n-p or --current-process\\n       Select the current process - a process here is one command.\\n       Stops at logical operators, terminators, and pipes.\\n\\n-s or --current-selection\\n       Selects the current selection\\n\\n-t or --current-token\\n       Selects the current token\\n\\nThe following options change the way commandline prints the current\\ncommandline buffer:\\n\\n-c or --cut-at-cursor\\n       Only print selection up until the current cursor position.  If\\n       combined with --tokenize, this will print up until the last\\n       completed token - excluding the token the cursor is in.  This\\n       is typically what you would want for instance in completions.\\n       To get both, use both commandline --cut-at-cursor --tokenize;\\n       commandline --cut-at-cursor --current-token, or commandline\\n       -co; commandline -ct for short.\\n\\n-o or --tokenize\\n       Tokenize the selection and print one string-type token per\\n       line.\\n\\nIf commandline is called during a call to complete a given string\\nusing complete -C STRING, commandline will consider the specified\\nstring to be the current contents of the command line.\\n\\nThe following options output metadata about the commandline state:\\n\\n-L or --line\\n       Print the line that the cursor is on, with the topmost line\\n       starting at 1.\\n\\n-S or --search-mode\\n       Evaluates to true if the commandline is performing a history\\n       search.\\n\\n-P or --paging-mode\\n       Evaluates to true if the commandline is showing pager\\n       contents, such as tab completions.\\n\\n--paging-full-mode\\n       Evaluates to true if the commandline is showing pager\\n       contents, such as tab completions and all lines are shown (no\\n       \\\"<n> more rows\\\" message).\\n\\n--is-valid\\n       Returns true when the commandline is syntactically valid and\\n       complete.  If it is, it would be executed when the execute\\n       bind function is called.  If the commandline is incomplete,\\n       return 2, if erroneus, return 1.\\n\\nEXAMPLE\\ncommandline -j $history[3] replaces the job under the cursor with the\\nthird item from the command line history.\\n\\nIf the commandline contains\\n\\n   > echo $flounder >&2 | less; and echo $catfish\\n\\n(with the cursor on the \\\"o\\\" of \\\"flounder\\\")\\n\\nThe echo $flounder >& is the first process, less the second and and\\necho $catfish the third.\\n\\necho $flounder >&2 | less is the first job, and echo $catfish the\\nsecond.\\n\\n$flounder is the current token.\\n\\nThe most common use for something like completions is\\n\\n   set -l tokens (commandline -opc)\\n\\nwhich gives the current process (what is being completed), tokenized\\ninto separate entries, up to but excluding the currently being\\ncompleted token\\n\\nIf you are then also interested in the in-progress token, add\\n\\n::     set -l current (commandline -ct)\\n\\nNote that this makes it easy to render fish's infix matching moot -\\nif possible it's best if the completions just print all possibilities\\nand leave the matching to the current token up to fish's logic.\\n\\nMore examples:\\n\\n   > commandline -t\\n   $flounder\\n   > commandline -ct\\n   $fl\\n   > commandline -b # or just commandline\\n   echo $flounder >&2 | less; and echo $catfish\\n   > commandline -p\\n   echo $flounder >&2\\n   > commandline -j\\n   echo $flounder >&2 | less\",\n    \"args\": \"commandline [OPTIONS] [CMD]\"\n  },\n  \"complete\": {\n    \"shortDescription\": \"edit command-specific tab-completions\",\n    \"description\": \"complete defines, removes or lists completions for a command.\\n\\nFor an introduction to writing your own completions, see Writing your\\nown completions in the fish manual.\\n\\nThe following options are available:\\n\\n-c or --command COMMAND\\n       Specifies that COMMAND is the name of the command. If there is\\n       no -c or -p, one non-option argument will be used as the\\n       command.\\n\\n-p or --path COMMAND\\n       Specifies that COMMAND is the absolute path of the command\\n       (optionally containing wildcards).\\n\\n-e or --erase\\n       Deletes the specified completion.\\n\\n-s or --short-option SHORT_OPTION\\n       Adds a short option to the completions list.\\n\\n-l or --long-option LONG_OPTION\\n       Adds a GNU-style long option to the completions list.\\n\\n-o or --old-option OPTION\\n       Adds an old-style short or long option (see below for\\n       details).\\n\\n-a or --arguments ARGUMENTS\\n       Adds the specified option arguments to the completions list.\\n\\n-k or --keep-order\\n       Keeps the order of ARGUMENTS instead of sorting\\n       alphabetically. Multiple complete calls with -k result in\\n       arguments of the later ones displayed first.\\n\\n-f or --no-files\\n       This completion may not be followed by a filename.\\n\\n-F or --force-files\\n       This completion may be followed by a filename, even if another\\n       applicable complete specified --no-files.\\n\\n-r or --require-parameter\\n       This completion must have an option argument, i.e. may not be\\n       followed by another option.\\n\\n-x or --exclusive\\n       Short for -r and -f.\\n\\n-w or --wraps WRAPPED_COMMAND\\n       Causes the specified command to inherit completions from\\n       WRAPPED_COMMAND (see below for details).\\n\\n-n or --condition CONDITION\\n       This completion should only be used if the CONDITION (a shell\\n       command) returns 0. This makes it possible to specify\\n       completions that should only be used in some cases. If\\n       multiple conditions are specified, fish will try them in the\\n       order they are specified until one fails or all succeeded.\\n\\n-C or --do-complete STRING\\n       Makes complete try to find all possible completions for the\\n       specified string. If there is no STRING, the current\\n       commandline is used instead.\\n\\n--escape\\n       When used with -C, escape special characters in completions.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nCommand-specific tab-completions in fish are based on the notion of\\noptions and arguments. An option is a parameter which begins with a\\nhyphen, such as -h, -help or --help. Arguments are parameters that do\\nnot begin with a hyphen. Fish recognizes three styles of options, the\\nsame styles as the GNU getopt library. These styles are:\\n\\n• Short options, like -a. Short options are a single character long,\\n  are preceded by a single hyphen and can be grouped together (like\\n  -la, which is equivalent to -l -a). Option arguments may be\\n  specified by appending the option with the value (-w32), or, if\\n  --require-parameter is given, in the following parameter (-w 32).\\n\\n• Old-style options, long like -Wall or -name or even short like -a.\\n  Old-style options can be more than one character long, are preceded\\n  by a single hyphen and may not be grouped together. Option\\n  arguments are specified by default following a space (-foo null) or\\n  after = (-foo=null).\\n\\n• GNU-style long options, like --colors. GNU-style long options can\\n  be more than one character long, are preceded by two hyphens, and\\n  can't be grouped together. Option arguments may be specified after\\n  a = (--quoting-style=shell), or, if --require-parameter is given,\\n  in the following parameter (--quoting-style shell).\\n\\nMultiple commands and paths can be given in one call to define the\\nsame completions for multiple commands.\\n\\nMultiple command switches and wrapped commands can also be given to\\ndefine multiple completions in one call.\\n\\nInvoking complete multiple times for the same command adds the new\\ndefinitions on top of any existing completions defined for the\\ncommand.\\n\\nWhen -a or --arguments is specified in conjunction with long, short,\\nor old-style options, the specified arguments are only completed as\\narguments for any of the specified options. If -a or --arguments is\\nspecified without any long, short, or old-style options, the\\nspecified arguments are used when completing non-option arguments to\\nthe command (except when completing an option argument that was\\nspecified with -r or --require-parameter).\\n\\nCommand substitutions found in ARGUMENTS should return a\\nnewline-separated list of arguments, and each argument may optionally\\nhave a tab character followed by the argument description.\\nDescription given this way override a description given with -d or\\n--description.\\n\\nDescriptions given with --description are also used to group options\\ngiven with -s, -o or -l. Options with the same (non-empty)\\ndescription will be listed as one candidate, and one of them will be\\npicked. If the description is empty or no description was given this\\nis skipped.\\n\\nThe -w or --wraps options causes the specified command to inherit\\ncompletions from another command, \\\"wrapping\\\" the other command. The\\nwrapping command can also have additional completions. A command can\\nwrap multiple commands, and wrapping is transitive: if A wraps B, and\\nB wraps C, then A automatically inherits all of C's completions.\\nWrapping can be removed using the -e or --erase options. Wrapping\\nonly works for completions specified with -c or --command and are\\nignored when specifying completions with -p or --path.\\n\\nWhen erasing completions, it is possible to either erase all\\ncompletions for a specific command by specifying complete -c COMMAND\\n-e, or by specifying a specific completion option to delete.\\n\\nWhen complete is called without anything that would define or erase\\ncompletions (options, arguments, wrapping, ...), it shows matching\\ncompletions instead. So complete without any arguments shows all\\nloaded completions, complete -c foo shows all loaded completions for\\nfoo. Since completions are autoloaded, you will have to trigger them\\nfirst.\\n\\nEXAMPLES\\nThe short-style option -o for the gcc command needs a file argument:\\n\\n   complete -c gcc -s o -r\\n\\nThe short-style option -d for the grep command requires one of read,\\nskip or recurse:\\n\\n   complete -c grep -s d -x -a \\\"read skip recurse\\\"\\n\\nThe su command takes any username as an argument. Usernames are given\\nas the first colon-separated field in the file /etc/passwd. This can\\nbe specified as:\\n\\n   complete -x -c su -d \\\"Username\\\" -a \\\"(cat /etc/passwd | cut -d : -f 1)\\\"\\n\\nThe rpm command has several different modes. If the -e or --erase\\nflag has been specified, rpm should delete one or more packages, in\\nwhich case several switches related to deleting packages are valid,\\nlike the nodeps switch.\\n\\nThis can be written as:\\n\\n   complete -c rpm -n \\\"__fish_contains_opt -s e erase\\\" -l nodeps -d \\\"Don't check dependencies\\\"\\n\\nwhere __fish_contains_opt is a function that checks the command line\\nbuffer for the presence of a specified set of options.\\n\\nTo implement an alias, use the -w or --wraps option:\\n\\n   complete -c hub -w git\\n\\nNow hub inherits all of the completions from git. Note this can also\\nbe specified in a function declaration (function thing -w\\notherthing).\\n\\n   complete -c git\\n\\nShows all completions for git.\\n\\nAny command foo that doesn't support grouping multiple short options\\nin one string (not supporting -xf as short for -x -f) or a short\\noption and its value in one string (not supporting -d9 instead of -d\\n9) should be specified as a single-character old-style option instead\\nof as a short-style option; for example, complete -c foo -o s;\\ncomplete -c foo -o v would never suggest foo -ov but rather foo -o\\n-v.\",\n    \"args\": \"complete ((-c | --command) | (-p | --path)) COMMAND [OPTIONS]\\ncomplete (-C | --do-complete) [--escape] STRING\"\n  },\n  \"contains\": {\n    \"shortDescription\": \"test if a word is present in a list\",\n    \"description\": \"contains tests whether the set VALUES contains the string KEY.  If\\nso, contains exits with code 0; if not, it exits with code 1.\\n\\nThe following options are available:\\n\\n-i or --index\\n       Print the index (number of the element in the set) of the\\n       first matching element.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nNote that contains interprets all arguments starting with a - as an\\noption to contains, until an -- argument is reached.\\n\\nSee the examples below.\\n\\nEXAMPLE\\nIf animals is a list of animals, the following will test if animals\\ncontains \\\"cat\\\":\\n\\n   if contains cat $animals\\n      echo Your animal list is evil!\\n   end\\n\\nThis code will add some directories to PATH if they aren't yet\\nincluded:\\n\\n   for i in ~/bin /usr/local/bin\\n       if not contains $i $PATH\\n           set PATH $PATH $i\\n       end\\n   end\\n\\nWhile this will check if function hasargs is being ran with the -q\\noption:\\n\\n   function hasargs\\n       if contains -- -q $argv\\n           echo '$argv contains a -q option'\\n       end\\n   end\\n\\nThe -- here stops contains from treating -q to an option to itself.\\nInstead it treats it as a normal string to check.\",\n    \"args\": \"contains [OPTIONS] KEY [VALUES ...]\"\n  },\n  \"continue\": {\n    \"shortDescription\": \"Skip to the next iteration of a loop\",\n    \"description\": \"Within a `while` or `for` loop, `continue` skips the remaining commands in the current iteration and proceeds to the next iteration of the loop.\"\n  },\n  \"count\": {\n    \"shortDescription\": \"\",\n    \"description\": \"\"\n  },\n  \"disown\": {\n    \"shortDescription\": \"remove a process from the list of jobs\",\n    \"description\": \"disown removes the specified job from the list of jobs. The job\\nitself continues to exist, but fish does not keep track of it any\\nlonger.\\n\\nJobs in the list of jobs are sent a hang-up signal when fish\\nterminates, which usually causes the job to terminate; disown allows\\nthese processes to continue regardless.\\n\\nIf no process is specified, the most recently-used job is removed\\n(like bg and fg).  If one or more PIDs are specified, jobs with the\\nspecified process IDs are removed from the job list. Invalid jobs are\\nignored and a warning is printed.\\n\\nIf a job is stopped, it is sent a signal to continue running, and a\\nwarning is printed. It is not possible to use the bg builtin to\\ncontinue a job once it has been disowned.\\n\\ndisown returns 0 if all specified jobs were disowned successfully,\\nand 1 if any problems were encountered.\\n\\nThe --help or -h option displays help about using this command.\\n\\nEXAMPLE\\nfirefox &; disown will start the Firefox web browser in the\\nbackground and remove it from the job list, meaning it will not be\\nclosed when the fish process is closed.\\n\\ndisown (jobs -p) removes all jobs from the job list without\\nterminating them.\",\n    \"args\": \"disown [PID ...]\"\n  },\n  \"echo\": {\n    \"shortDescription\": \"\",\n    \"description\": \"\"\n  },\n  \"else\": {\n    \"shortDescription\": \"Execute commands if the previous condition was false\",\n    \"description\": \"In an `if` block, the `else` section contains commands that execute if none of the preceding `if` or `else if` conditions were true.\"\n  },\n  \"emit\": {\n    \"shortDescription\": \"emit a generic event\",\n    \"description\": \"emit emits, or fires, an event. Events are delivered to, or caught\\nby, special functions called event handlers. The arguments are passed\\nto the event handlers as function arguments.\\n\\nThe --help or -h option displays help about using this command.\\n\\nEXAMPLE\\nThe following code first defines an event handler for the generic\\nevent named 'test_event', and then emits an event of that type.\\n\\n   function event_test --on-event test_event\\n       echo event test: $argv\\n   end\\n\\n   emit test_event something\\n\\nNOTES\\nNote that events are only sent to the current fish process as there\\nis no way to send events from one fish process to another.\",\n    \"args\": \"emit EVENT_NAME [ARGUMENTS ...]\"\n  },\n  \"end\": {\n    \"shortDescription\": \"Terminate a block of code\",\n    \"description\": \"Conclude a block of code initiated by constructs like `if`, `switch`, `while`, `for`, or `function`.\"\n  },\n  \"eval\": {\n    \"shortDescription\": \"Execute arguments as a command\",\n    \"description\": \"Concatenate all arguments into a single command and execute it. This allows for dynamic construction and execution of commands.\",\n    \"args\": \"COMMAND...\"\n  },\n  \"exec\": {\n    \"shortDescription\": \"execute command in current process\",\n    \"description\": \"exec replaces the currently running shell with a new command. On\\nsuccessful completion, exec never returns. exec cannot be used inside\\na pipeline.\\n\\nThe --help or -h option displays help about using this command.\\n\\nEXAMPLE\\nexec emacs starts up the emacs text editor, and exits fish. When\\nemacs exits, the session will terminate.\",\n    \"args\": \"exec COMMAND\"\n  },\n  \"exit\": {\n    \"shortDescription\": \"exit the shell\",\n    \"description\": \"exit is a special builtin that causes the shell to exit. Either 255\\nor the CODE supplied is used, whichever is lesser.  Otherwise, the\\nexit status will be that of the last command executed.\\n\\nIf exit is called while sourcing a file (using the source builtin)\\nthe rest of the file will be skipped, but the shell itself will not\\nexit.\\n\\nThe --help or -h option displays help about using this command.\",\n    \"args\": \"exit [CODE]\"\n  },\n  \"false\": {\n    \"shortDescription\": \"Return an unsuccessful result\",\n    \"description\": \"A command that returns a non-zero exit status, indicating failure. It is often used in scripts to represent a false condition.\"\n  },\n  \"fg\": {\n    \"shortDescription\": \"bring job to foreground\",\n    \"description\": \"The fg builtin brings the specified job to the foreground, resuming\\nit if it is stopped.  While a foreground job is executed, fish is\\nsuspended.  If no job is specified, the last job to be used is put in\\nthe foreground.  If PID is specified, the job containing a process\\nwith the specified process ID is put in the foreground.\\n\\nFor compatibility with other shells, job expansion syntax is\\nsupported for fg. A PID of the format %1 will foreground job 1.  Job\\nnumbers can be seen in the output of jobs.\\n\\nThe --help or -h option displays help about using this command.\\n\\nEXAMPLE\\nfg will put the last job in the foreground.\\n\\nfg %3 will put job 3 into the foreground.\",\n    \"args\": \"fg [PID]\"\n  },\n  \"for\": {\n    \"shortDescription\": \"perform a set of commands multiple times\",\n    \"description\": \"for is a loop construct. It will perform the commands specified by\\nCOMMANDS multiple times. On each iteration, the local variable\\nspecified by VARNAME is assigned a new value from VALUES. If VALUES\\nis empty, COMMANDS will not be executed at all. The VARNAME is\\nvisible when the loop terminates and will contain the last value\\nassigned to it. If VARNAME does not already exist it will be set in\\nthe local scope. For our purposes if the for block is inside a\\nfunction there must be a local variable with the same name. If the\\nfor block is not nested inside a function then global and universal\\nvariables of the same name will be used if they exist.\\n\\nMuch like set, for does not modify $status, but the evaluation of its\\nsubordinate commands can.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\n\\n   for i in foo bar baz; echo $i; end\\n\\n   # would output:\\n   foo\\n   bar\\n   baz\\n\\nNOTES\\nThe VARNAME was local to the for block in releases prior to 3.0.0.\\nThis means that if you did something like this:\\n\\n   for var in a b c\\n       if break_from_loop\\n           break\\n       end\\n   end\\n   echo $var\\n\\nThe last value assigned to var when the loop terminated would not be\\navailable outside the loop. What echo $var would write depended on\\nwhat it was set to before the loop was run. Likely nothing.\",\n    \"args\": \"for VARNAME in [VALUES ...]; COMMANDS ...; end\"\n  },\n  \"function\": {\n    \"shortDescription\": \"create a function\",\n    \"description\": \"function creates a new function NAME with the body BODY.\\n\\nA function is a list of commands that will be executed when the name\\nof the function is given as a command.\\n\\nThe following options are available:\\n\\n-a NAMES or --argument-names NAMES\\n       Assigns the value of successive command-line arguments to the\\n       names given in NAMES. These are the same arguments given in\\n       argv, and are still available there. See also Argument\\n       Handling.\\n\\n-d DESCRIPTION or --description DESCRIPTION\\n       A description of what the function does, suitable as a\\n       completion description.\\n\\n-w WRAPPED_COMMAND or --wraps WRAPPED_COMMAND\\n       Inherit completions from the given WRAPPED_COMMAND. See the\\n       documentation for complete for more information.\\n\\n-e EVENT_NAME or --on-event EVENT_NAME\\n       Run this function when the specified named event is emitted.\\n       Fish internally generates named events, for example, when\\n       showing the prompt. Custom events can be emitted using the\\n       emit command.\\n\\n-v VARIABLE_NAME or --on-variable VARIABLE_NAME\\n       Run this function when the variable VARIABLE_NAME changes\\n       value. Note that fish makes no guarantees on any particular\\n       timing or even that the function will be run for every single\\n       set. Rather it will be run when the variable has been set at\\n       least once, possibly skipping some values or being run when\\n       the variable has been set to the same value (except for\\n       universal variables set in other shells - only changes in the\\n       value will be picked up for those).\\n\\n-j PID or --on-job-exit PID\\n       Run this function when the job containing a child process with\\n       the given process identifier PID exits. Instead of a PID, the\\n       string 'caller' can be specified. This is only allowed when in\\n       a command substitution, and will result in the handler being\\n       triggered by the exit of the job which created this command\\n       substitution.\\n\\n-p PID or --on-process-exit PID\\n       Run this function when the fish child process with process ID\\n       PID exits. Instead of a PID, for backward compatibility,\\n       \\\"%self\\\" can be specified as an alias for $fish_pid, and the\\n       function will be run when the current fish instance exits.\\n\\n-s SIGSPEC or --on-signal SIGSPEC\\n       Run this function when the signal SIGSPEC is delivered.\\n       SIGSPEC can be a signal number, or the signal name, such as\\n       SIGHUP (or just HUP). Note that the signal must have been\\n       delivered to fish; for example, Ctrl-C sends SIGINT to the\\n       foreground process group, which will not be fish if you are\\n       running another command at the time. Observing a signal will\\n       prevent fish from exiting in response to that signal.\\n\\n-S or --no-scope-shadowing\\n       Allows the function to access the variables of calling\\n       functions. Normally, any variables inside the function that\\n       have the same name as variables from the calling function are\\n       \\\"shadowed\\\", and their contents are independent of the calling\\n       function.\\n\\n       It's important to note that this does not capture referenced\\n       variables or the scope at the time of function declaration! At\\n       this time, fish does not have any concept of closures, and\\n       variable lifetimes are never extended. In other words, by\\n       using --no-scope-shadowing the scope of the function each time\\n       it is run is shared with the scope it was called from rather\\n       than the scope it was defined in.\\n\\n-V or --inherit-variable NAME\\n       Snapshots the value of the variable NAME and defines a local\\n       variable with that same name and value when the function is\\n       defined. This is similar to a closure in other languages like\\n       Python but a bit different. Note the word \\\"snapshot\\\" in the\\n       first sentence. If you change the value of the variable after\\n       defining the function, even if you do so in the same scope\\n       (typically another function) the new value will not be used by\\n       the function you just created using this option. See the\\n       function notify example below for how this might be used.\\n\\nThe event handler switches (on-event, on-variable, on-job-exit,\\non-process-exit and on-signal) cause a function to run automatically\\nat specific events. New named events for --on-event can be fired\\nusing the emit builtin. Fish already generates a few events, see\\nEvent handlers for more.\\n\\nFunctions may not be named the same as a reserved keyword. These are\\nelements of fish syntax or builtin commands which are essential for\\nthe operations of the shell. Current reserved words are [, , and,\\nargparse, begin, break, builtin, case, command, continue, else, end,\\neval, exec, for, function, if, not, or, read, return, set, status,\\nstring, switch, test, time, and while.\\n\\nEXAMPLE\\n\\n   function ll\\n       ls -l $argv\\n   end\\n\\nwill run the ls command, using the -l option, while passing on any\\nadditional files and switches to ls.\\n\\n   function mkdir -d \\\"Create a directory and set CWD\\\"\\n       command mkdir $argv\\n       if test $status = 0\\n           switch $argv[(count $argv)]\\n               case '-*'\\n\\n               case '*'\\n                   cd $argv[(count $argv)]\\n                   return\\n           end\\n       end\\n   end\\n\\nThis will run the mkdir command, and if it is successful, change the\\ncurrent working directory to the one just created.\\n\\n   function notify\\n       set -l job (jobs -l -g)\\n       or begin; echo \\\"There are no jobs\\\" >&2; return 1; end\\n\\n       function _notify_job$job --on-job-exit $job --inherit-variable job\\n           echo -n \\\\a # beep\\n           functions -e _notify_job$job\\n       end\\n   end\\n\\nThis will beep when the most recent job completes.\\n\\nNOTES\\nEvents are only received from the current fish process as there is no\\nway to send events from one fish process to another.\\n\\nSEE MORE\\nFor more explanation of how functions fit into fish, see Functions.\",\n    \"args\": \"function NAME [OPTIONS]; BODY; end\"\n  },\n  \"functions\": {\n    \"shortDescription\": \"print or erase functions\",\n    \"description\": \"functions prints or erases functions.\\n\\nThe following options are available:\\n\\n-a or --all\\n       Lists all functions, even those whose name starts with an\\n       underscore.\\n\\n-c or --copy OLDNAME NEWNAME\\n       Creates a new function named NEWNAME, using the definition of\\n       the OLDNAME function.\\n\\n-d or --description DESCRIPTION\\n       Changes the description of this function.\\n\\n-e or --erase\\n       Causes the specified functions to be erased. This also means\\n       that it is prevented from autoloading in the current session.\\n       Use funcsave to remove the saved copy.\\n\\n-D or --details\\n       Reports the path name where the specified function is defined\\n       or could be autoloaded, stdin if the function was defined\\n       interactively or on the command line or by reading standard\\n       input, - if the function was created via source, and n/a if\\n       the function isn't available. (Functions created via alias\\n       will return -, because alias uses source internally.) If the\\n       --verbose option is also specified then five lines are\\n       written:\\n\\n       • the pathname as already described,\\n\\n       • autoloaded, not-autoloaded or n/a,\\n\\n       • the line number within the file or zero if not applicable,\\n\\n       • scope-shadowing if the function shadows the vars in the\\n         calling function (the normal case if it wasn't defined with\\n         --no-scope-shadowing), else no-scope-shadowing, or n/a if\\n         the function isn't defined,\\n\\n       • the function description minimally escaped so it is a single\\n         line, or n/a if the function isn't defined or has no\\n         description.\\n\\n       You should not assume that only five lines will be written\\n       since we may add additional information to the output in the\\n       future.\\n\\n--no-details\\n       Turns off function path reporting, so just the definition will\\n       be printed.\\n\\n-n or --names\\n       Lists the names of all defined functions.\\n\\n-q or --query\\n       Tests if the specified functions exist.\\n\\n-v or --verbose\\n       Make some output more verbose.\\n\\n-H or --handlers\\n       Show all event handlers.\\n\\n-t or --handlers-type TYPE\\n       Show all event handlers matching the given TYPE.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nThe default behavior of functions, when called with no arguments, is\\nto print the names of all defined functions. Unless the -a option is\\ngiven, no functions starting with underscores are included in the\\noutput.\\n\\nIf any non-option parameters are given, the definition of the\\nspecified functions are printed.\\n\\nCopying a function using -c copies only the body of the function, and\\ndoes not attach any event notifications from the original function.\\n\\nOnly one function's description can be changed in a single invocation\\nof functions -d.\\n\\nThe exit status of functions is the number of functions specified in\\nthe argument list that do not exist, which can be used in concert\\nwith the -q option.\\n\\nEXAMPLES\\n\\n   functions -n\\n   # Displays a list of currently-defined functions\\n\\n   functions -c foo bar\\n   # Copies the 'foo' function to a new function called 'bar'\\n\\n   functions -e bar\\n   # Erases the function ``bar``\\n\\nSEE MORE\\nFor more explanation of how functions fit into fish, see Functions.\",\n    \"args\": \"functions [-a | --all] [-n | --names]\\nfunctions [-D | --details] [-v] FUNCTION\\nfunctions -c OLDNAME NEWNAME\\nfunctions -d DESCRIPTION FUNCTION\\nfunctions [-e | -q] FUNCTION ...\"\n  },\n  \"history\": {\n    \"shortDescription\": \"show and manipulate command history\",\n    \"description\": \"history is used to search, delete, and otherwise manipulate the\\nhistory of interactive commands.\\n\\nThe following operations (sub-commands) are available:\\n\\nsearch Returns history items matching the search string. If no search\\n       string is provided it returns all history items. This is the\\n       default operation if no other operation is specified. You only\\n       have to explicitly say history search if you wish to search\\n       for one of the subcommands. The --contains search option will\\n       be used if you don't specify a different search option.\\n       Entries are ordered newest to oldest unless you use the\\n       --reverse flag. If stdout is attached to a tty the output will\\n       be piped through your pager by the history function. The\\n       history builtin simply writes the results to stdout.\\n\\ndelete Deletes history items. The --contains search option will be\\n       used if you don't specify a different search option. If you\\n       don't specify --exact a prompt will be displayed before any\\n       items are deleted asking you which entries are to be deleted.\\n       You can enter the word \\\"all\\\" to delete all matching entries.\\n       You can enter a single ID (the number in square brackets) to\\n       delete just that single entry. You can enter more than one ID,\\n       or an ID range separated by a space to delete multiple\\n       entries. Just press [enter] to not delete anything. Note that\\n       the interactive delete behavior is a feature of the history\\n       function. The history builtin only supports --exact\\n       --case-sensitive deletion.\\n\\nmerge  Immediately incorporates history changes from other sessions.\\n       Ordinarily fish ignores history changes from sessions started\\n       after the current one. This command applies those changes\\n       immediately.\\n\\nsave   Immediately writes all changes to the history file. The shell\\n       automatically saves the history file; this option is provided\\n       for internal use and should not normally need to be used by\\n       the user.\\n\\nclear  Clears the history file. A prompt is displayed before the\\n       history is erased asking you to confirm you really want to\\n       clear all history unless builtin history is used.\\n\\nclear-session\\n       Clears the history file from all activity of the current\\n       session. Note: If history merge or builtin history merge is\\n       run in a session, only the history after this will be erased.\\n\\nThe following options are available:\\n\\nThese flags can appear before or immediately after one of the\\nsub-commands listed above.\\n\\n-C or --case-sensitive\\n       Does a case-sensitive search. The default is case-insensitive.\\n       Note that prior to fish 2.4.0 the default was case-sensitive.\\n\\n-c or --contains\\n       Searches items in the history that contain the specified text\\n       string. This is the default for the --search flag. This is not\\n       currently supported by the delete subcommand.\\n\\n-e or --exact\\n       Searches or deletes items in the history that exactly match\\n       the specified text string. This is the default for the delete\\n       subcommand. Note that the match is case-insensitive by\\n       default. If you really want an exact match, including letter\\n       case, you must use the -C or --case-sensitive flag.\\n\\n-p or --prefix\\n       Searches items in the history that begin with the specified\\n       text string. This is not currently supported by the delete\\n       subcommand.\\n\\n-t or --show-time\\n       Prepends each history entry with the date and time the entry\\n       was recorded. By default it uses the strftime format # %c%n.\\n       You can specify another format; e.g., --show-time=\\\"%Y-%m-%d\\n       %H:%M:%S \\\" or --show-time=\\\"%a%I%p\\\". The short option, -t,\\n       doesn't accept a strftime format string; it only uses the\\n       default format. Any strftime format is allowed, including %s\\n       to get the raw UNIX seconds since the epoch.\\n\\n-z or --null\\n       Causes history entries written by the search operations to be\\n       terminated by a NUL character rather than a newline. This\\n       allows the output to be processed by read -z to correctly\\n       handle multiline history entries.\\n\\n-*NUMBER* -n NUMBER or --max NUMBER\\n       Limits the matched history items to the first NUMBER matching\\n       entries. This is only valid for history search.\\n\\n-R or --reverse\\n       Causes the history search results to be ordered oldest to\\n       newest. Which is the order used by most shells. The default is\\n       newest to oldest.\\n\\n-h or --help\\n       Displays help for this command.\\n\\nEXAMPLE\\n\\n   history clear\\n   # Deletes all history items\\n\\n   history search --contains \\\"foo\\\"\\n   # Outputs a list of all previous commands containing the string \\\"foo\\\".\\n\\n   history delete --prefix \\\"foo\\\"\\n   # Interactively deletes commands which start with \\\"foo\\\" from the history.\\n   # You can select more than one entry by entering their IDs separated by a space.\\n\\nCUSTOMIZING THE NAME OF THE HISTORY FILE\\nBy default interactive commands are logged to\\n$XDG_DATA_HOME/fish/fish_history (typically\\n~/.local/share/fish/fish_history).\\n\\nYou can set the fish_history variable to another name for the current\\nshell session. The default value (when the variable is unset) is fish\\nwhich corresponds to $XDG_DATA_HOME/fish/fish_history. If you set it\\nto e.g. fun, the history would be written to\\n$XDG_DATA_HOME/fish/fun_history. An empty string means history will\\nnot be stored at all. This is similar to the private session features\\nin web browsers.\\n\\nYou can change fish_history at any time (by using set -x fish_history\\n\\\"session_name\\\") and it will take effect right away. If you set it to\\n\\\"default\\\", it will use the default session name (which is \\\"fish\\\").\\n\\nOther shells such as bash and zsh use a variable named HISTFILE for a\\nsimilar purpose. Fish uses a different name to avoid conflicts and\\nsignal that the behavior is different (session name instead of a file\\npath). Also, if you set the var to anything other than fish or\\ndefault it will inhibit importing the bash history. That's because\\nthe most common use case for this feature is to avoid leaking private\\nor sensitive history when giving a presentation.\\n\\nNOTES\\nIf you specify both --prefix and --contains the last flag seen is\\nused.\\n\\nNote that for backwards compatibility each subcommand can also be\\nspecified as a long option. For example, rather than history search\\nyou can type history --search. Those long options are deprecated and\\nwill be removed in a future release.\",\n    \"args\": \"history [search] [--show-time] [--case-sensitive]\\n[--exact | --prefix | --contains] [--max N] [--null] [--reverse]\\n                 [SEARCH_STRING ...]\\nhistory delete [--case-sensitive]\\n               [--exact | --prefix | --contains] SEARCH_STRING ...\\nhistory merge\\nhistory save\\nhistory clear\\nhistory clear-session\"\n  },\n  \"if\": {\n    \"shortDescription\": \"conditionally execute a command\",\n    \"description\": \"if will execute the command CONDITION. If the condition's exit status\\nis 0, the commands COMMANDS_TRUE will execute.  If the exit status is\\nnot 0 and else is given, COMMANDS_FALSE will be executed.\\n\\nYou can use and or or in the condition. See the second example below.\\n\\nThe exit status of the last foreground command to exit can always be\\naccessed using the $status variable.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\nThe following code will print foo.txt exists if the file foo.txt\\nexists and is a regular file, otherwise it will print bar.txt exists\\nif the file bar.txt exists and is a regular file, otherwise it will\\nprint foo.txt and bar.txt do not exist.\\n\\n   if test -f foo.txt\\n       echo foo.txt exists\\n   else if test -f bar.txt\\n       echo bar.txt exists\\n   else\\n       echo foo.txt and bar.txt do not exist\\n   end\\n\\nThe following code will print \\\"foo.txt exists and is readable\\\" if\\nfoo.txt is a regular file and readable\\n\\n   if test -f foo.txt\\n      and test -r foo.txt\\n      echo \\\"foo.txt exists and is readable\\\"\\n   end\",\n    \"args\": \"if CONDITION; COMMANDS_TRUE ...;\\n[else if CONDITION2; COMMANDS_TRUE2 ...;]\\n[else; COMMANDS_FALSE ...;]\\nend\"\n  },\n  \"jobs\": {\n    \"shortDescription\": \"print currently running jobs\",\n    \"description\": \"jobs prints a list of the currently running jobs and their status.\\n\\njobs accepts the following options:\\n\\n-c or --command\\n       Prints the command name for each process in jobs.\\n\\n-g or --group\\n       Only prints the group ID of each job.\\n\\n-l or --last\\n       Prints only the last job to be started.\\n\\n-p or --pid\\n       Prints the process ID for each process in all jobs.\\n\\n-q or --query\\n       Prints no output for evaluation of jobs by exit status only.\\n       For compatibility with old fish versions this is also --quiet\\n       (but this is deprecated).\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nOn systems that support this feature, jobs will print the CPU usage\\nof each job since the last command was executed. The CPU usage is\\nexpressed as a percentage of full CPU activity. Note that on\\nmultiprocessor systems, the total activity may be more than 100%.\\n\\nArguments of the form PID or %JOBID restrict the output to jobs with\\nthe selected process identifiers or job numbers respectively.\\n\\nIf the output of jobs is redirected or if it is part of a command\\nsubstitution, the column header that is usually printed is omitted,\\nmaking it easier to parse.\\n\\nThe exit status of jobs is 0 if there are running background jobs and\\n1 otherwise.\\n\\nEXAMPLE\\njobs outputs a summary of the current jobs, such as two long-running\\ntasks in this example:\\n\\n   Job Group   State   Command\\n   2   26012   running nc -l 55232 < /dev/random &\\n   1   26011   running python tests/test_11.py &\",\n    \"args\": \"jobs [OPTIONS] [PID | %JOBID]\"\n  },\n  \"math\": {\n    \"shortDescription\": \"perform mathematics calculations\",\n    \"description\": \"math performs mathematical calculations.  It supports simple\\noperations such as addition, subtraction, and so on, as well as\\nfunctions like abs(), sqrt() and ln().\\n\\nBy default, the output shows up to 6 decimal places.  To change the\\nnumber of decimal places, use the --scale option, including --scale=0\\nfor integer output.  Trailing zeroes will always be trimmed.\\n\\nKeep in mind that parameter expansion happens before expressions are\\nevaluated.  This can be very useful in order to perform calculations\\ninvolving shell variables or the output of command substitutions, but\\nit also means that parenthesis (()) and the asterisk (*) glob\\ncharacter have to be escaped or quoted.  x can also be used to denote\\nmultiplication, but it needs to be followed by whitespace to\\ndistinguish it from hexadecimal numbers.\\n\\nParentheses for functions are optional - math sin pi prints 0.\\nHowever, a comma will bind to the inner function, so math pow sin 3,\\n5 is an error because it tries to give sin the arguments 3 and 5.\\nWhen in doubt, use parentheses.\\n\\nmath ignores whitespace between arguments and takes its input as\\nmultiple arguments (internally joined with a space), so math 2 +2 and\\nmath \\\"2 +    2\\\" work the same.  math 2 2 is an error.\\n\\nThe following options are available:\\n\\n-s N or --scale N\\n       Sets the scale of the result.  N must be an integer or the\\n       word \\\"max\\\" for the maximum scale.  A scale of zero causes\\n       results to be truncated, not rounded. Any non-integer\\n       component is thrown away.  So 3/2 returns 1 rather than 2\\n       which 1.5 would normally round to.  This is for compatibility\\n       with bc which was the basis for this command prior to fish\\n       3.0.0.  Scale values greater than zero causes the result to be\\n       rounded using the usual rules to the specified number of\\n       decimal places.\\n\\n-b BASE or --base BASE\\n       Sets the numeric base used for output (math always understands\\n       hexadecimal numbers as input).  It currently understands \\\"hex\\\"\\n       or \\\"16\\\" for hexadecimal and \\\"octal\\\" or \\\"8\\\" for octal and\\n       implies a scale of 0 (other scales cause an error), so it will\\n       truncate the result down to an integer.  This might change in\\n       the future.  Hex numbers will be printed with a 0x prefix.\\n       Octal numbers will have a prefix of 0 but aren't understood by\\n       math as input.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nRETURN VALUES\\nIf the expression is successfully evaluated and doesn't\\nover/underflow or return NaN the return status is zero (success) else\\none.\\n\\nSYNTAX\\nmath knows some operators, constants, functions and can (obviously)\\nread numbers.\\n\\nFor numbers, . is always the radix character regardless of locale -\\n2.5, not 2,5.  Scientific notation (10e5) and hexadecimal (0xFF) are\\nalso available.\\n\\nmath allows you to use underscores as visual separators for digit\\ngrouping. For example, you can write 1_000_000, 0x_89_AB_CD_EF, and\\n1.234_567_e89.\\n\\nOPERATORS\\nmath knows the following operators:\\n\\n+      for addition\\n\\n-      for subtraction\\n\\n* or x for multiplication. * is the glob character and needs to be\\n       quoted or escaped, x needs to be followed by whitespace or it\\n       looks like 0x hexadecimal notation.\\n\\n/      for division\\n\\n^      for exponentiation\\n\\n%      for modulo\\n\\n( or ) for grouping. These need to be quoted or escaped because ()\\n       denotes a command substitution.\\n\\nThey are all used in an infix manner - 5 + 2, not + 5 2.\\n\\nCONSTANTS\\nmath knows the following constants:\\n\\ne      Euler's number\\n\\npi     π, you know this one.  Half of Tau\\n\\ntau    Equivalent to 2π, or the number of radians in a circle\\n\\nUse them without a leading $ - pi - 3 should be about 0.\\n\\nFUNCTIONS\\nmath supports the following functions:\\n\\nabs    the absolute value, with positive sign\\n\\nacos   arc cosine\\n\\nasin   arc sine\\n\\natan   arc tangent\\n\\natan2  arc tangent of two variables\\n\\nbitand, bitor and bitxor\\n       perform bitwise operations.  These will throw away any\\n       non-integer parts and interpret the rest as an int.\\n\\n       Note: bitnot and bitnand don't exist. This is because numbers\\n       in math don't really have a width in terms of bits, and these\\n       operations necessarily care about leading zeroes.\\n\\n       If you need to negate a specific number you can do it with an\\n       xor with a mask, e.g.:\\n\\n          > math --base=hex bitxor 0x0F, 0xFF\\n          0xF0\\n\\n          > math --base=hex bitxor 0x2, 0x3\\n          # Here we mask with 0x3 == 0b111, so our number is 3 bits wide\\n          # Only the 1 bit isn't set.\\n          0x1\\n\\nceil   round number up to the nearest integer\\n\\ncos    the cosine\\n\\ncosh   hyperbolic cosine\\n\\nexp    the base-e exponential function\\n\\nfac    factorial - also known as x! (x * (x - 1) * (x - 2) * ... * 1)\\n\\nfloor  round number down to the nearest integer\\n\\nln     the base-e logarithm\\n\\nlog or log10\\n       the base-10 logarithm\\n\\nlog2   the base-2 logarithm\\n\\nmax    returns the largest of the given numbers - this takes an\\n       arbitrary number of arguments (but at least one)\\n\\nmin    returns the smallest of the given numbers - this takes an\\n       arbitrary number of arguments (but at least one)\\n\\nncr    \\\"from n choose r\\\" combination function - how many subsets of\\n       size r can be taken from n (order doesn't matter)\\n\\nnpr    the number of subsets of size r that can be taken from a set\\n       of n elements (including different order)\\n\\npow(x,y)\\n       returns x to the y (and can be written as x ^ y)\\n\\nround  rounds to the nearest integer, away from 0\\n\\nsin    the sine function\\n\\nsinh   the hyperbolic sine\\n\\nsqrt   the square root - (can also be written as x ^ 0.5)\\n\\ntan    the tangent\\n\\ntanh   the hyperbolic tangent\\n\\nAll of the trigonometric functions use radians (the pi-based scale,\\nnot 360°).\\n\\nEXAMPLES\\nmath 1+1 outputs 2.\\n\\nmath $status - 128 outputs the numerical exit status of the last\\ncommand minus 128.\\n\\nmath 10 / 6 outputs 1.666667.\\n\\nmath -s0 10.0 / 6.0 outputs 1.\\n\\nmath -s3 10 / 6 outputs 1.666.\\n\\nmath \\\"sin(pi)\\\" outputs 0.\\n\\nmath 5 \\\\* 2 or math \\\"5 * 2\\\" or math 5 \\\"*\\\" 2 all output 10.\\n\\nmath 0xFF outputs 255, math 0 x 3 outputs 0 (because it computes 0\\nmultiplied by 3).\\n\\nmath bitand 0xFE, 0x2e outputs 46.\\n\\nmath \\\"bitor(9,2)\\\" outputs 11.\\n\\nmath --base=hex 192 prints 0xc0.\\n\\nmath 'ncr(49,6)' prints 13983816 - that's the number of possible\\npicks in 6-from-49 lotto.\\n\\nmath max 5,2,3,1 prints 5.\\n\\nCOMPATIBILITY NOTES\\nFish 1.x and 2.x releases relied on the bc command for handling math\\nexpressions. Starting with fish 3.0.0 fish uses the tinyexpr library\\nand evaluates the expression without the involvement of any external\\ncommands.\\n\\nYou don't need to use -- before the expression, even if it begins\\nwith a minus sign which might otherwise be interpreted as an invalid\\noption. If you do insert -- before the expression, it will cause\\noption scanning to stop just like for every other command and it\\nwon't be part of the expression.\",\n    \"args\": \"math [(-s | --scale) N] [(-b | --base) BASE] EXPRESSION ...\"\n  },\n  \"not\": {\n    \"shortDescription\": \"negate the exit status of a job\",\n    \"description\": \"not negates the exit status of another command. If the exit status is\\nzero, not returns 1. Otherwise, not returns 0.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\nThe following code reports an error and exits if no file named spoon\\ncan be found.\\n\\n   if not test -f spoon\\n       echo There is no spoon\\n       exit 1\\n   end\",\n    \"args\": \"not COMMAND [OPTIONS ...]\"\n  },\n  \"or\": {\n    \"shortDescription\": \"conditionally execute a command\",\n    \"description\": \"or is used to execute a command if the previous command was not\\nsuccessful (returned a status of something other than 0).\\n\\nor statements may be used as part of the condition in an if or while\\nblock.\\n\\nor does not change the current exit status itself, but the command it\\nruns most likely will. The exit status of the last foreground command\\nto exit can always be accessed using the $status variable.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\nThe following code runs the make command to build a program. If the\\nbuild succeeds, the program is installed. If either step fails, make\\nclean is run, which removes the files created by the build process.\\n\\n   make; and make install; or make clean\\n\\nSEE ALSO\\n\\n• and command\",\n    \"args\": \"COMMAND1; or COMMAND2\"\n  },\n  \"path\": {\n    \"shortDescription\": \"manipulate and check paths\",\n    \"description\": \"path performs operations on paths.\\n\\nPATH arguments are taken from the command line unless standard input\\nis connected to a pipe or a file, in which case they are read from\\nstandard input, one PATH per line. It is an error to supply PATH\\narguments on both the command line and on standard input.\\n\\nArguments starting with - are normally interpreted as switches; --\\ncauses the following arguments not to be treated as switches even if\\nthey begin with -. Switches and required arguments are recognized\\nonly on the command line.\\n\\nWhen a path starts with -, path filter and path normalize will\\nprepend ./ on output to avoid it being interpreted as an option\\notherwise, so it's safe to pass path's output to other commands that\\ncan handle relative paths.\\n\\nAll subcommands accept a -q or --quiet switch, which suppresses the\\nusual output but exits with the documented status. In this case these\\ncommands will quit early, without reading all of the available input.\\n\\nAll subcommands also accept a -Z or --null-out switch, which makes\\nthem print output separated with NUL instead of newlines. This is for\\nfurther processing, e.g. passing to another path, or xargs -0. This\\nis not recommended when the output goes to the terminal or a command\\nsubstitution.\\n\\nAll subcommands also accept a -z or --null-in switch, which makes\\nthem accept arguments from stdin separated with NULL-bytes. Since\\nUnix paths can't contain NULL, that makes it possible to handle all\\npossible paths and read input from e.g. find -print0. If arguments\\nare given on the commandline this has no effect. This should mostly\\nbe unnecessary since path automatically starts splitting on NULL if\\none appears in the first PATH_MAX bytes, PATH_MAX being the operating\\nsystem's maximum length for a path plus a NULL byte.\\n\\nSome subcommands operate on the paths as strings and so work on\\nnonexistent paths, while others need to access the paths themselves\\nand so filter out nonexistent paths.\\n\\nThe following subcommands are available.\\n\\nBASENAME SUBCOMMAND\\n\\n   path basename [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\\n\\npath basename returns the last path component of the given path, by\\nremoving the directory prefix and removing trailing slashes. In other\\nwords, it is the part that is not the dirname. For files you might\\ncall it the \\\"filename\\\".\\n\\nIt returns 0 if there was a basename, i.e. if the path wasn't empty\\nor just slashes.\\n\\n   Examples\\n\\n   > path basename ./foo.mp4\\n   foo.mp4\\n\\n   > path basename ../banana\\n   banana\\n\\n   > path basename /usr/bin/\\n   bin\\n\\n   > path basename /usr/bin/*\\n   # This prints all files in /usr/bin/\\n   # A selection:\\n   cp\\n   fish\\n   grep\\n   rm\\n\\nDIRNAME SUBCOMMAND\\n\\n   path dirname [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\\n\\npath dirname returns the dirname for the given path. This is the part\\nbefore the last \\\"/\\\", discounting trailing slashes. In other words, it\\nis the part that is not the basename (discounting superfluous\\nslashes).\\n\\nIt returns 0 if there was a dirname, i.e. if the path wasn't empty or\\njust slashes.\\n\\n   Examples\\n\\n   > path dirname ./foo.mp4\\n   .\\n\\n   > path dirname ../banana\\n   ..\\n\\n   > path dirname /usr/bin/\\n   /usr\\n\\nEXTENSION SUBCOMMAND\\n\\n   path extension [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\\n\\npath extension returns the extension of the given path. This is the\\npart after (and including) the last \\\".\\\", unless that \\\".\\\" followed a\\n\\\"/\\\" or the basename is \\\".\\\" or \\\"..\\\", in which case there is no\\nextension and an empty line is printed.\\n\\nIf the filename ends in a \\\".\\\", only a \\\".\\\" is printed.\\n\\nIt returns 0 if there was an extension.\\n\\n   Examples\\n\\n   > path extension ./foo.mp4\\n   .mp4\\n\\n   > path extension ../banana\\n   # an empty line, status 1\\n\\n   > path extension ~/.config\\n   # an empty line, status 1\\n\\n   > path extension ~/.config.d\\n   .d\\n\\n   > path extension ~/.config.\\n   .\\n\\n   > set -l path (path change-extension '' ./foo.mp4)\\n   > set -l extension (path extension ./foo.mp4)\\n   > echo $path$extension\\n   # reconstructs the original path again.\\n   ./foo.mp4\\n\\nFILTER SUBCOMMAND\\n\\n   path filter [-z | --null-in] [-Z | --null-out] [-q | --quiet] \\\\\\n       [-d] [-f] [-l] [-r] [-w] [-x] \\\\\\n       [-v | --invert] [(-t | --type) TYPE] [(-p | --perm) PERMISSION] [PATH ...]\\n\\npath filter returns all of the given paths that match the given\\nchecks. In all cases, the paths need to exist, nonexistent paths are\\nalways filtered.\\n\\nThe available filters are:\\n\\n• -t or --type with the options: \\\"dir\\\", \\\"file\\\", \\\"link\\\", \\\"block\\\",\\n  \\\"char\\\", \\\"fifo\\\" and \\\"socket\\\", in which case the path needs to be a\\n  directory, file, link, block device, character device, named pipe\\n  or socket, respectively.\\n\\n• -d, -f and -l are short for --type=dir, --type=file and\\n  --type=link, respectively. There are no shortcuts for the other\\n  types.\\n\\n• -p or --perm with the options: \\\"read\\\", \\\"write\\\", and \\\"exec\\\", as well\\n  as \\\"suid\\\", \\\"sgid\\\", \\\"user\\\" (referring to the path owner) and \\\"group\\\"\\n  (referring to the path's group), in which case the path needs to\\n  have all of the given permissions for the current user.\\n\\n• -r, -w and -x are short for --perm=read, --perm=write and\\n  --perm=exec, respectively. There are no shortcuts for the other\\n  permissions.\\n\\nNote that the path needs to be any of the given types, but have all\\nof the given permissions. This is because having a path that is both\\nwritable and executable makes sense, but having a path that is both a\\ndirectory and a file doesn't. Links will count as the type of the\\nlinked-to file, so links to files count as files, links to\\ndirectories count as directories.\\n\\nThe filter options can either be given as multiple options, or\\ncomma-separated - path filter -t dir,file or path filter --type dir\\n--type file are equivalent.\\n\\nWith --invert, the meaning of the filtering is inverted - any path\\nthat wouldn't pass (including by not existing) passes, and any path\\nthat would pass fails.\\n\\nWhen a path starts with -, path filter will prepend ./ to avoid it\\nbeing interpreted as an option otherwise.\\n\\nIt returns 0 if at least one path passed the filter.\\n\\npath is is shorthand for path filter -q, i.e. just checking without\\nproducing output, see The is subcommand.\\n\\n   Examples\\n\\n   > path filter /usr/bin /usr/argagagji\\n   # The (hopefully) nonexistent argagagji is filtered implicitly:\\n   /usr/bin\\n\\n   > path filter --type file /usr/bin /usr/bin/fish\\n   # Only fish is a file\\n   /usr/bin/fish\\n\\n   > path filter --type file,dir --perm exec,write /usr/bin/fish /home/me\\n   # fish is a file, which passes, and executable, which passes,\\n   # but probably not writable, which fails.\\n   #\\n   # $HOME is a directory and both writable and executable, typically.\\n   # So it passes.\\n   /home/me\\n\\n   > path filter -fdxw /usr/bin/fish /home/me\\n   # This is the same as above: \\\"-f\\\" is \\\"--type=file\\\", \\\"-d\\\" is \\\"--type=dir\\\",\\n   # \\\"-x\\\" is short for \\\"--perm=exec\\\" and \\\"-w\\\" short for \\\"--perm=write\\\"!\\n   /home/me\\n\\n   > path filter -fx $PATH/*\\n   # Prints all possible commands - the first entry of each name is what fish would execute!\\n\\nIS SUBCOMMAND\\n\\n   path is [-z | --null-in] [-Z | --null-out] [-q | --quiet] \\\\\\n       [-d] [-f] [-l] [-r] [-w] [-x] \\\\\\n       [-v | --invert] [(-t | --type) TYPE] [(-p | --perm) PERMISSION] [PATH ...]\\n\\npath is is short for path filter -q. It returns true if any of the\\ngiven files passes the filter, but does not produce any output.\\n\\n--quiet can still be passed for compatibility but is redundant. The\\noptions are the same as for path filter.\\n\\n   Examples\\n\\n   > path is /usr/bin /usr/argagagji\\n   # /usr/bin exists, so this returns a status of 0 (true). It prints nothing.\\n   > path is /usr/argagagji\\n   # /usr/argagagji does not, so this returns a status of 1 (false). It also prints nothing.\\n   > path is -fx /bin/sh\\n   # /bin/sh is usually an executable file, so this returns true.\\n\\nMTIME SUBCOMMAND\\n\\n   path mtime [-z | --null-in] [-Z | --null-out] [-q | --quiet] [-R | --relative] [PATH ...]\\n\\npath mtime returns the last modification time (\\\"mtime\\\" in unix\\njargon) of the given paths, in seconds since the unix epoch (the\\nbeginning of the 1st of January 1970).\\n\\nWith --relative (or -R), it prints the number of seconds since the\\nmodification time. It only reads the current time once at start, so\\nin case multiple paths are given the times are all relative to the\\nstart of path mtime -R running.\\n\\nIf you want to know if a file is newer or older than another file,\\nconsider using test -nt instead. See the test documentation.\\n\\nIt returns 0 if reading mtime for any path succeeded.\\n\\n   Examples\\n\\n   > date +%s\\n   # This prints the current time as seconds since the epoch\\n   1657217847\\n\\n   > path mtime /etc/\\n   1657213796\\n\\n   > path mtime -R /etc/\\n   4078\\n   # So /etc/ on this system was last modified a little over an hour ago\\n\\n   # This is the same as\\n   > math (date +%s) - (path mtime /etc/)\\n\\nNORMALIZE SUBCOMMAND\\n\\n   path normalize [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\\n\\npath normalize returns the normalized versions of all paths. That\\nmeans it squashes duplicate \\\"/\\\" (except for two leading \\\"//\\\"),\\ncollapses \\\"../\\\" with earlier components and removes \\\".\\\" components.\\n\\nUnlike realpath or path resolve, it does not make the paths absolute.\\nIt also does not resolve any symlinks. As such it can operate on\\nnon-existent paths.\\n\\nBecause it operates on paths as strings and doesn't resolve symlinks,\\nit works sort of like pwd -L and cd. E.g. path normalize link/.. will\\nreturn ., just like cd link; cd .. would return to the current\\ndirectory. For a physical view of the filesystem, see path resolve.\\n\\nLeading \\\"./\\\" components are usually removed. But when a path starts\\nwith -, path normalize will add it instead to avoid confusion with\\noptions.\\n\\nIt returns 0 if any normalization was done, i.e. any given path\\nwasn't in canonical form.\\n\\n   Examples\\n\\n   > path normalize /usr/bin//../../etc/fish\\n   # The \\\"//\\\" is squashed and the \\\"..\\\" components neutralize the components before\\n   /etc/fish\\n\\n   > path normalize /bin//bash\\n   # The \\\"//\\\" is squashed, but /bin isn't resolved even if your system links it to /usr/bin.\\n   /bin/bash\\n\\n   > path normalize ./my/subdirs/../sub2\\n   my/sub2\\n\\n   > path normalize -- -/foo\\n   ./-/foo\\n\\nRESOLVE SUBCOMMAND\\n\\n   path resolve [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\\n\\npath resolve returns the normalized, physical and absolute versions\\nof all paths. That means it resolves symlinks and does what path\\nnormalize does: it squashes duplicate \\\"/\\\", collapses \\\"../\\\" with\\nearlier components and removes \\\".\\\" components. Then it turns that\\npath into the absolute path starting from the filesystem root \\\"/\\\".\\n\\nIt is similar to realpath, as it creates the \\\"real\\\", canonical\\nversion of the path. However, for paths that can't be resolved, e.g.\\nif they don't exist or form a symlink loop, it will resolve as far as\\nit can and normalize the rest.\\n\\nBecause it resolves symlinks, it works sort of like pwd -P. E.g. path\\nresolve link/.. will return the parent directory of what the link\\npoints to, just like cd link; cd (pwd -P)/.. would go to it. For a\\nlogical view of the filesystem, see path normalize.\\n\\nIt returns 0 if any normalization or resolution was done, i.e. any\\ngiven path wasn't in canonical form.\\n\\n   Examples\\n\\n   > path resolve /bin//sh\\n   # The \\\"//\\\" is squashed, and /bin is resolved if your system links it to /usr/bin.\\n   # sh here is bash (this is common on linux systems)\\n   /usr/bin/bash\\n\\n   > path resolve /bin/foo///bar/../baz\\n   # Assuming /bin exists and is a symlink to /usr/bin, but /bin/foo doesn't.\\n   # This resolves the /bin/ and normalizes the nonexistent rest:\\n   /usr/bin/foo/baz\\n\\nCHANGE-EXTENSION SUBCOMMAND\\n\\n   path change-extension [-z | --null-in] [-Z | --null-out] \\\\\\n       [-q | --quiet] EXTENSION [PATH ...]\\n\\npath change-extension returns the given paths, with their extension\\nchanged to the given new extension. The extension is the part after\\n(and including) the last \\\".\\\", unless that \\\".\\\" followed a \\\"/\\\" or the\\nbasename is \\\".\\\" or \\\"..\\\", in which case there is no previous extension\\nand the new one is simply added.\\n\\nIf the extension is empty, any previous extension is stripped, along\\nwith the \\\".\\\". This is, of course, the inverse of path extension.\\n\\nOne leading dot on the extension is ignored, so \\\".mp3\\\" and \\\"mp3\\\" are\\ntreated the same.\\n\\nIt returns 0 if it was given any paths.\\n\\n   Examples\\n\\n   > path change-extension mp4 ./foo.wmv\\n   ./foo.mp4\\n\\n   > path change-extension .mp4 ./foo.wmv\\n   ./foo.mp4\\n\\n   > path change-extension '' ../banana\\n   ../banana\\n   # but status 1, because there was no extension.\\n\\n   > path change-extension '' ~/.config\\n   /home/alfa/.config\\n   # status 1\\n\\n   > path change-extension '' ~/.config.d\\n   /home/alfa/.config\\n   # status 0\\n\\n   > path change-extension '' ~/.config.\\n   /home/alfa/.config\\n   # status 0\\n\\nSORT SUBCOMMAND\\n\\n   path sort [-z | --null-in] [-Z | --null-out] \\\\\\n       [-q | --quiet] [-r | --reverse] \\\\\\n       [--key=basename|dirname|path] [PATH ...]\\n\\npath sort returns the given paths in sorted order. They are sorted in\\nthe same order as globs - alphabetically, but with runs of numerical\\ndigits compared numerically.\\n\\nWith --reverse or -r the sort is reversed.\\n\\nWith --key= only the given part of the path is compared, e.g.\\n--key=dirname causes only the dirname to be compared, --key=basename\\nonly the basename and --key=path causes the entire path to be\\ncompared (this is the default).\\n\\nWith --unique or -u the sort is deduplicated, meaning only the first\\nof a run that have the same key is kept. So if you are sorting by\\nbasename, then only the first of each basename is used.\\n\\nThe sort used is stable, so sorting first by basename and then by\\ndirname works and causes the files to be grouped according to\\ndirectory.\\n\\nIt currently returns 0 if it was given any paths.\\n\\n   Examples\\n\\n   > path sort 10-foo 2-bar\\n   2-bar\\n   10-foo\\n\\n   > path sort --reverse 10-foo 2-bar\\n   10-foo\\n   2-bar\\n\\n   > path sort --unique --key=basename $fish_function_path/*.fish\\n   # prints a list of all function files fish would use, sorted by name.\\n\\nCOMBINING PATH\\npath is meant to be easy to combine with itself, other tools and\\nfish.\\n\\nThis is why\\n\\n• path's output is automatically split by fish if it goes into a\\n  command substitution, so just doing (path ...) handles all paths,\\n  even those containing newlines, correctly\\n\\n• path has --null-in to handle null-delimited input (typically\\n  automatically detected!), and --null-out to pass on null-delimited\\n  output\\n\\nSome examples of combining path:\\n\\n   # Expand all paths in the current directory, leave only executable files, and print their resolved path\\n   path filter -zZ -xf -- * | path resolve -z\\n\\n   # The same thing, but using find (note -maxdepth needs to come first or find will scream)\\n   # (this also depends on your particular version of find)\\n   # Note the `-z` is unnecessary for any sensible version of find - if `path` sees a NULL,\\n   # it will split on NULL automatically.\\n   find . -maxdepth 1 -type f -executable -print0 | path resolve -z\\n\\n   set -l paths (path filter -p exec $PATH/fish -Z | path resolve)\",\n    \"args\": \"path basename GENERAL_OPTIONS [PATH ...]\\npath dirname GENERAL_OPTIONS  [PATH ...]\\npath extension GENERAL_OPTIONS [PATH ...]\\npath filter GENERAL_OPTIONS [-v | --invert]\\n    [-d] [-f] [-l] [-r] [-w] [-x]\\n    [(-t | --type) TYPE] [(-p | --perm) PERMISSION] [PATH ...]\\npath is GENERAL_OPTIONS [(-v | --invert)] [(-t | --type) TYPE]\\n    [-d] [-f] [-l] [-r] [-w] [-x]\\n    [(-p | --perm) PERMISSION] [PATH ...]\\npath mtime GENERAL_OPTIONS [(-R | --relative)] [PATH ...]\\npath normalize GENERAL_OPTIONS [PATH ...]\\npath resolve GENERAL_OPTIONS [PATH ...]\\npath change-extension GENERAL_OPTIONS EXTENSION [PATH ...]\\npath sort GENERAL_OPTIONS [-r | --reverse]\\n    [-u | --unique] [--key=basename|dirname|path] [PATH ...]\\n\\nGENERAL_OPTIONS\\n    [-z | --null-in] [-Z | --null-out] [-q | --quiet]\"\n  },\n  \"printf\": {\n    \"shortDescription\": \"Display formatted text\",\n    \"description\": \"The `printf` command formats and prints text according to a specified format string. Unlike `echo`, `printf` does not append a newline unless explicitly included in the format.\",\n    \"args\": \"FORMAT [ARGUMENT...]\"\n  },\n  \"pwd\": {\n    \"shortDescription\": \"output the current working directory\",\n    \"description\": \"NOTE: This page documents the fish builtin pwd.  To see the\\ndocumentation on the pwd command you might have, use command man pwd.\\n\\npwd outputs (prints) the current working directory.\\n\\nThe following options are available:\\n\\n-L or --logical\\n       Output the logical working directory, without resolving\\n       symlinks (default behavior).\\n\\n-P or --physical\\n       Output the physical working directory, with symlinks resolved.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nSEE ALSO\\nNavigate directories using the directory history or the directory\\nstack\",\n    \"args\": \"pwd [-P | --physical]\\npwd [-L | --logical]\"\n  },\n  \"random\": {\n    \"shortDescription\": \"generate random number\",\n    \"description\": \"random generates a pseudo-random integer from a uniform distribution.\\nThe range (inclusive) depends on the arguments.\\n\\nNo arguments indicate a range of 0 to 32767 (inclusive).\\n\\nIf one argument is specified, the internal engine will be seeded with\\nthe argument for future invocations of random and no output will be\\nproduced.\\n\\nTwo arguments indicate a range from START to END (both START and END\\nincluded).\\n\\nThree arguments indicate a range from START to END with a spacing of\\nSTEP between possible outputs.\\n\\nrandom choice will select one random item from the succeeding\\narguments.\\n\\nThe -h or --help option displays help about using this command.\\n\\nNote that seeding the engine will NOT give the same result across\\ndifferent systems.\\n\\nYou should not consider random cryptographically secure, or even\\nstatistically accurate.\\n\\nEXAMPLE\\nThe following code will count down from a random even number between\\n10 and 20 to 1:\\n\\n   for i in (seq (random 10 2 20) -1 1)\\n       echo $i\\n   end\\n\\nAnd this will open a random picture from any of the subdirectories:\\n\\n   open (random choice **.jpg)\\n\\nOr, to only get even numbers from 2 to 20:\\n\\n   random 2 2 20\\n\\nOr odd numbers from 1 to 3:\\n\\n   random 1 2 3 # or 1 2 4\",\n    \"args\": \"random\\nrandom SEED\\nrandom START END\\nrandom START STEP END\\nrandom choice [ITEMS ...]\"\n  },\n  \"read\": {\n    \"shortDescription\": \"read line of input into variables\",\n    \"description\": \"read reads from standard input and either writes the result back to\\nstandard output (for use in command substitution), or stores the\\nresult in one or more shell variables. By default, read reads a\\nsingle line and splits it into variables on spaces or tabs.\\nAlternatively, a null character or a maximum number of characters can\\nbe used to terminate the input, and other delimiters can be given.\\nUnlike other shells, there is no default variable (such as REPLY) for\\nstoring the result - instead, it is printed on standard output.\\n\\nThe following options are available:\\n\\n-c CMD or --command CMD\\n       Sets the initial string in the interactive mode command buffer\\n       to CMD.\\n\\n-d or --delimiter DELIMITER\\n       Splits on DELIMITER. DELIMITER will be used as an entire\\n       string to split on, not a set of characters.\\n\\n-g or --global\\n       Makes the variables global.\\n\\n-s or --silent\\n       Masks characters written to the terminal, replacing them with\\n       asterisks. This is useful for reading things like passwords or\\n       other sensitive information.\\n\\n-f or --function\\n       Scopes the variable to the currently executing function. It is\\n       erased when the function ends.\\n\\n-l or --local\\n       Scopes the variable to the currently executing block. It is\\n       erased when the block ends. Outside of a block, this is the\\n       same as --function.\\n\\n-n or --nchars NCHARS\\n       Makes read return after reading NCHARS characters or the end\\n       of the line, whichever comes first.\\n\\n-p or --prompt PROMPT_CMD\\n       Uses the output of the shell command PROMPT_CMD as the prompt\\n       for the interactive mode. The default prompt command is\\n       set_color green; echo read; set_color normal; echo \\\"> \\\"\\n\\n-P or --prompt-str PROMPT_STR\\n       Uses the PROMPT_STR as the prompt for the interactive mode. It\\n       is equivalent to echo $PROMPT_STR and is provided solely to\\n       avoid the need to frame the prompt as a command. All special\\n       characters in the string are automatically escaped before\\n       being passed to the echo command.\\n\\n-R or --right-prompt RIGHT_PROMPT_CMD\\n       Uses the output of the shell command RIGHT_PROMPT_CMD as the\\n       right prompt for the interactive mode. There is no default\\n       right prompt command.\\n\\n-S or --shell\\n       Enables syntax highlighting, tab completions and command\\n       termination suitable for entering shellscript code in the\\n       interactive mode. NOTE: Prior to fish 3.0, the short opt for\\n       --shell was -s, but it has been changed for compatibility with\\n       bash's -s short opt for --silent.\\n\\n-t -or --tokenize\\n       Causes read to split the input into variables by the shell's\\n       tokenization rules. This means it will honor quotes and\\n       escaping. This option is of course incompatible with other\\n       options to control splitting like --delimiter and does not\\n       honor IFS (like fish's tokenizer). It saves the tokens in the\\n       manner they'd be passed to commands on the commandline, so\\n       e.g. a\\\\ b is stored as a b. Note that currently it leaves\\n       command substitutions intact along with the parentheses.\\n\\n-u or --unexport\\n       Prevents the variables from being exported to child processes\\n       (default behaviour).\\n\\n-U or --universal\\n       Causes the specified shell variable to be made universal.\\n\\n-x or --export\\n       Exports the variables to child processes.\\n\\n-a or --list\\n       Stores the result as a list in a single variable. This option\\n       is also available as --array for backwards compatibility.\\n\\n-z or --null\\n       Marks the end of the line with the NUL character, instead of\\n       newline. This also disables interactive mode.\\n\\n-L or --line\\n       Reads each line into successive variables, and stops after\\n       each variable has been filled. This cannot be combined with\\n       the --delimiter option.\\n\\nWithout the --line option, read reads a single line of input from\\nstandard input, breaks it into tokens, and then assigns one token to\\neach variable specified in VARIABLES. If there are more tokens than\\nvariables, the complete remainder is assigned to the last variable.\\n\\nIf no option to determine how to split like --delimiter, --line or\\n--tokenize is given, the variable IFS is used as a list of characters\\nto split on. Relying on the use of IFS is deprecated and this\\nbehaviour will be removed in future versions. The default value of\\nIFS contains space, tab and newline characters. As a special case, if\\nIFS is set to the empty string, each character of the input is\\nconsidered a separate token.\\n\\nWith the --line option, read reads a line of input from standard\\ninput into each provided variable, stopping when each variable has\\nbeen filled. The line is not tokenized.\\n\\nIf no variable names are provided, read enters a special case that\\nsimply provides redirection from standard input to standard output,\\nuseful for command substitution. For instance, the fish shell command\\nbelow can be used to read data that should be provided via a command\\nline argument from the console instead of hardcoding it in the\\ncommand itself, allowing the command to both be reused as-is in\\nvarious contexts with different input values and preventing possibly\\nsensitive text from being included in the shell history:\\n\\n   mysql -uuser -p(read)\\n\\nWhen running in this mode, read does not split the input in any way\\nand text is redirected to standard output without any further\\nprocessing or manipulation.\\n\\nIf -a or --array is provided, only one variable name is allowed and\\nthe tokens are stored as a list in this variable.\\n\\nSee the documentation for set for more details on the scoping rules\\nfor variables.\\n\\nWhen read reaches the end-of-file (EOF) instead of the terminator,\\nthe exit status is set to 1.  Otherwise, it is set to 0.\\n\\nIn order to protect the shell from consuming too many system\\nresources, read will only consume a maximum of 100 MiB (104857600\\nbytes); if the terminator is not reached before this limit then\\nVARIABLE is set to empty and the exit status is set to 122. This\\nlimit can be altered with the fish_read_limit variable. If set to 0\\n(zero), the limit is removed.\\n\\nEXAMPLE\\nread has a few separate uses.\\n\\nThe following code stores the value 'hello' in the shell variable\\nfoo.\\n\\n   echo hello|read foo\\n\\nThe while command is a neat way to handle command output\\nline-by-line:\\n\\n   printf '%s\\\\n' line1 line2 line3 line4 | while read -l foo\\n                     echo \\\"This is another line: $foo\\\"\\n                 end\\n\\nDelimiters given via \\\"-d\\\" are taken as one string:\\n\\n   echo a==b==c | read -d == -l a b c\\n   echo $a # a\\n   echo $b # b\\n   echo $c # c\\n\\n--tokenize honors quotes and escaping like the shell's argument\\npassing:\\n\\n   echo 'a\\\\ b' | read -t first second\\n   echo $first # outputs \\\"a b\\\", $second is empty\\n\\n   echo 'a\\\"foo bar\\\"b (command echo wurst)*\\\" \\\"{a,b}' | read -lt -l a b c\\n   echo $a # outputs 'afoo barb' (without the quotes)\\n   echo $b # outputs '(command echo wurst)* {a,b}' (without the quotes)\\n   echo $c # nothing\\n\\nFor an example on interactive use, see Querying for user input.\",\n    \"args\": \"read [OPTIONS] [VARIABLE ...]\"\n  },\n  \"realpath\": {\n    \"shortDescription\": \"Resolve and print the absolute path\",\n    \"description\": \"Convert each provided path to its absolute, canonical form by resolving symbolic links and relative path components.\",\n    \"args\": \"PATH...\"\n  },\n  \"return\": {\n    \"shortDescription\": \"stop the current inner function\",\n    \"description\": \"return halts a currently running function.  The exit status is set to\\nN if it is given.  If return is invoked outside of a function or dot\\nscript it is equivalent to exit.\\n\\nIt is often added inside of a conditional block such as an if\\nstatement or a switch statement to conditionally stop the executing\\nfunction and return to the caller; it can also be used to specify the\\nexit status of a function.\\n\\nIf at the top level of a script, it exits with the given status, like\\nexit.  If at the top level in an interactive session, it will set\\nstatus, but not exit the shell.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\nAn implementation of the false command as a fish function:\\n\\n   function false\\n       return 1\\n   end\",\n    \"args\": \"return [N]\"\n  },\n  \"set\": {\n    \"shortDescription\": \"display and change shell variables\",\n    \"description\": \"set manipulates shell variables.\\n\\nIf both NAME and VALUE are provided, set assigns any values to\\nvariable NAME.  Variables in fish are lists, multiple values are\\nallowed.  One or more variable INDEX can be specified including\\nranges (not for all options.)\\n\\nIf no VALUE is given, the variable will be set to the empty list.\\n\\nIf set is ran without arguments, it prints the names and values of\\nall shell variables in sorted order.  Passing scope or export flags\\nallows filtering this to only matching variables, so set --local\\nwould only show local variables.\\n\\nWith --erase and optionally a scope flag set will erase the matching\\nvariable (or the variable of that name in the smallest possible\\nscope).\\n\\nWith --show, set will describe the given variable names, explaining\\nhow they have been defined - in which scope with which values and\\noptions.\\n\\nThe following options control variable scope:\\n\\n-U or --universal\\n       Sets a universal variable.  The variable will be immediately\\n       available to all the user's fish instances on the machine, and\\n       will be persisted across restarts of the shell.\\n\\n-f or --function\\n       Sets a variable scoped to the executing function.  It is\\n       erased when the function ends.\\n\\n-l or --local\\n       Sets a locally-scoped variable in this block.  It is erased\\n       when the block ends.  Outside of a block, this is the same as\\n       --function.\\n\\n-g or --global\\n       Sets a globally-scoped variable.  Global variables are\\n       available to all functions running in the same shell.  They\\n       can be modified or erased.\\n\\nThese options modify how variables operate:\\n\\n--export or -x\\n       Causes the specified shell variable to be exported to child\\n       processes (making it an \\\"environment variable\\\").\\n\\n--unexport or -u\\n       Causes the specified shell variable to NOT be exported to\\n       child processes.\\n\\n--path Treat specified variable as a path variable; variable will be\\n       split on colons (:) and will be displayed joined by colons\\n       when quoted (echo \\\"$PATH\\\") or exported.\\n\\n--unpath\\n       Causes variable to no longer be treated as a path variable.\\n       Note: variables ending in \\\"PATH\\\" are automatically path\\n       variables.\\n\\nFurther options:\\n\\n-a or --append NAME VALUE ...\\n       Appends VALUES to the current set of values for variable NAME.\\n       Can be used with --prepend to both append and prepend at the\\n       same time.  This cannot be used when assigning to a variable\\n       slice.\\n\\n-p or --prepend NAME VALUE ...\\n       Prepends VALUES to the current set of values for variable\\n       NAME.  This can be used with --append to both append and\\n       prepend at the same time.  This cannot be used when assigning\\n       to a variable slice.\\n\\n-e or --erase NAME*[*INDEX]\\n       Causes the specified shell variables to be erased.  Supports\\n       erasing from multiple scopes at once.  Individual items in a\\n       variable at INDEX in brackets can be specified.\\n\\n-q or --query NAME*[*INDEX]\\n       Test if the specified variable names are defined.  If an INDEX\\n       is provided, check for items at that slot.  Does not output\\n       anything, but the shell status is set to the number of\\n       variables specified that were not defined, up to a maximum of\\n       255.  If no variable was given, it also returns 255.\\n\\n-n or --names\\n       List only the names of all defined variables, not their value.\\n       The names are guaranteed to be sorted.\\n\\n-S or --show\\n       Shows information about the given variables.  If no variable\\n       names are given then all variables are shown in sorted order.\\n       It shows the scopes the given variables are set in, along with\\n       the values in each and whether or not it is exported.  No\\n       other flags can be used with this option.\\n\\n-L or --long\\n       Do not abbreviate long values when printing set variables.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nIf a variable is set to more than one value, the variable will be a\\nlist with the specified elements.  If a variable is set to zero\\nelements, it will become a list with zero elements.\\n\\nIf the variable name is one or more list elements, such as PATH[1 3\\n7], only those list elements specified will be changed.  If you\\nspecify a negative index when expanding or assigning to a list\\nvariable, the index will be calculated from the end of the list.  For\\nexample, the index -1 means the last index of a list.\\n\\nThe scoping rules when creating or updating a variable are:\\n\\n• Variables may be explicitly set as universal, global, function, or\\n  local.  Variables with the same name but in a different scope will\\n  not be changed.\\n\\n• If the scope of a variable is not explicitly set but a variable by\\n  that name has been previously defined, the scope of the existing\\n  variable is used.  If the variable is already defined in multiple\\n  scopes, the variable with the narrowest scope will be updated.\\n\\n• If a variable's scope is not explicitly set and there is no\\n  existing variable by that name, the variable will be local to the\\n  currently executing function.  Note that this is different from\\n  using the -l or --local flag, in which case the variable will be\\n  local to the most-inner currently executing block, while without\\n  them the variable will be local to the function as a whole.  If no\\n  function is executing, the variable will be set in the global\\n  scope.\\n\\nThe exporting rules when creating or updating a variable are\\nidentical to the scoping rules for variables:\\n\\n• Variables may be explicitly set to either exported or not exported.\\n  When an exported variable goes out of scope, it is unexported.\\n\\n• If a variable is not explicitly set to be exported or not exported,\\n  but has been previously defined, the previous exporting rule for\\n  the variable is kept.\\n\\n• If a variable is not explicitly set to be either exported or\\n  unexported and has never before been defined, the variable will not\\n  be exported.\\n\\nIn query mode, the scope to be examined can be specified.  Whether\\nthe variable has to be a path variable or exported can also be\\nspecified.\\n\\nIn erase mode, if variable indices are specified, only the specified\\nslices of the list variable will be erased.\\n\\nset requires all options to come before any other arguments.  For\\nexample, set flags -l will have the effect of setting the value of\\nthe variable flags to '-l', not making the variable local.\\n\\nEXIT STATUS\\nIn assignment mode, set does not modify the exit status, but passes\\nalong whatever status was set, including by command substitutions.\\nThis allows capturing the output and exit status of a subcommand,\\nlike in if set output (command).\\n\\nIn query mode, the exit status is the number of variables that were\\nnot found.\\n\\nIn erase mode, set exits with a zero exit status in case of success,\\nwith a non-zero exit status if the commandline was invalid, if any of\\nthe variables did not exist or was a special read-only variable.\\n\\nEXAMPLES\\nPrint all global, exported variables:\\n\\n   > set -gx\\n\\nSet the value of the variable $foo to be 'hi'.:\\n\\n   > set foo hi\\n\\nAppend the value \\\"there\\\" to the variable $foo:\\n\\n   > set -a foo there\\n\\nRemove $smurf from the scope:\\n\\n   > set -e smurf\\n\\nRemove $smurf from the global and universal scopes:\\n\\n   > set -e -Ug smurf\\n\\nChange the fourth element of the $PATH list to ~/bin:\\n\\n   > set PATH[4] ~/bin\\n\\nOutputs the path to Python if type -p returns true:\\n\\n   if set python_path (type -p python)\\n       echo \\\"Python is at $python_path\\\"\\n   end\\n\\nSetting a variable doesn't modify $status; a command substitution\\nstill will, though:\\n\\n   > echo $status\\n   0\\n   > false\\n   > set foo bar\\n   > echo $status\\n   1\\n   > true\\n   > set foo banana (false)\\n   > echo $status\\n   1\\n\\nVAR=VALUE command sets a variable for just one command, like other\\nshells.  This runs fish with a temporary home directory:\\n\\n   > HOME=(mktemp -d) fish\\n\\n(which is essentially the same as):\\n\\n   > begin; set -lx HOME (mktemp -d); fish; end\\n\\nNOTES\\n\\n• Fish versions prior to 3.0 supported the syntax set PATH[1] PATH[4]\\n  /bin /sbin, which worked like set PATH[1 4] /bin /sbin.\",\n    \"args\": \"set\\nset (-f | --function) (-l | local) (-g | --global) (-U | --universal)\\nset [-Uflg] NAME [VALUE ...]\\nset [-Uflg] NAME[[INDEX ...]] [VALUE ...]\\nset (-a | --append) [-flgU] NAME VALUE ...\\nset (-q | --query) (-e | --erase) [-flgU] [NAME][[INDEX]] ...]\\nset (-S | --show) [NAME ...]\"\n  },\n  \"set_color\": {\n    \"shortDescription\": \"set the terminal color\",\n    \"description\": \"set_color is used to control the color and styling of text in the\\nterminal. VALUE describes that styling. VALUE can be a reserved color\\nname like red or an RGB color value given as 3 or 6 hexadecimal\\ndigits (\\\"F27\\\" or \\\"FF2277\\\"). A special keyword normal resets text\\nformatting to terminal defaults.\\n\\nValid colors include:\\n\\n   • black, red, green, yellow, blue, magenta, cyan, white\\n\\n   • brblack, brred, brgreen, bryellow, brblue, brmagenta, brcyan,\\n     brwhite\\n\\nThe br- (as in 'bright') forms are full-brightness variants of the 8\\nstandard-brightness colors on many terminals. brblack has higher\\nbrightness than black - towards gray.\\n\\nAn RGB value with three or six hex digits, such as A0FF33 or f2f can\\nbe used. Fish will choose the closest supported color. A three digit\\nvalue is equivalent to specifying each digit twice; e.g., set_color\\n2BC is the same as set_color 22BBCC. Hexadecimal RGB values can be in\\nlower or uppercase. Depending on the capabilities of your terminal\\n(and the level of support set_color has for it) the actual color may\\nbe approximated by a nearby matching reserved color name or set_color\\nmay not have an effect on color.\\n\\nA second color may be given as a desired fallback color. e.g.\\nset_color 124212 brblue will instruct set_color to use brblue if a\\nterminal is not capable of the exact shade of grey desired. This is\\nvery useful when an 8 or 16 color terminal might otherwise not use a\\ncolor.\\n\\nThe following options are available:\\n\\n-b or --background COLOR\\n       Sets the background color.\\n\\n-c or --print-colors\\n       Prints the given colors or a colored list of the 16 named\\n       colors.\\n\\n-o or --bold\\n       Sets bold mode.\\n\\n-d or --dim\\n       Sets dim mode.\\n\\n-i or --italics\\n       Sets italics mode.\\n\\n-r or --reverse\\n       Sets reverse mode.\\n\\n-u or --underline\\n       Sets underlined mode.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nUsing the normal keyword will reset foreground, background, and all\\nformatting back to default.\\n\\nNOTES\\n\\n1. Using the normal keyword will reset both background and foreground\\n   colors to whatever is the default for the terminal.\\n\\n2. Setting the background color only affects subsequently written\\n   characters. Fish provides no way to set the background color for\\n   the entire terminal window. Configuring the window background\\n   color (and other attributes such as its opacity) has to be done\\n   using whatever mechanisms the terminal provides. Look for a config\\n   option.\\n\\n3. Some terminals use the --bold escape sequence to switch to a\\n   brighter color set rather than increasing the weight of text.\\n\\n4. set_color works by printing sequences of characters to standard\\n   output. If used in command substitution or a pipe, these\\n   characters will also be captured. This may or may not be\\n   desirable. Checking the exit status of isatty stdout before using\\n   set_color can be useful to decide not to colorize output in a\\n   script.\\n\\nEXAMPLES\\n\\n   set_color red; echo \\\"Roses are red\\\"\\n   set_color blue; echo \\\"Violets are blue\\\"\\n   set_color 62A; echo \\\"Eggplants are dark purple\\\"\\n   set_color normal; echo \\\"Normal is nice\\\" # Resets the background too\\n\\nTERMINAL CAPABILITY DETECTION\\nFish uses some heuristics to determine what colors a terminal\\nsupports to avoid sending sequences that it won't understand.\\n\\nIn particular it will:\\n\\n• Enable 256 colors if TERM contains \\\"xterm\\\", except for known\\n  exceptions (like MacOS 10.6 Terminal.app)\\n\\n• Enable 24-bit (\\\"true-color\\\") even if the $TERM entry only reports\\n  256 colors. This includes modern xterm, VTE-based terminals like\\n  Gnome Terminal, Konsole and iTerm2.\\n\\n• Detect support for italics, dim, reverse and other modes.\\n\\nIf terminfo reports 256 color support for a terminal, 256 color\\nsupport will always be enabled.\\n\\nTo force true-color support on or off, set fish_term24bit to \\\"1\\\" for\\non and 0 for off - set -g fish_term24bit 1.\\n\\nTo debug color palette problems, tput colors may be useful to see the\\nnumber of colors in terminfo for a terminal. Fish launched as fish -d\\nterm_support will include diagnostic messages that indicate the color\\nsupport mode in use.\\n\\nThe set_color command uses the terminfo database to look up how to\\nchange terminal colors on whatever terminal is in use. Some systems\\nhave old and incomplete terminfo databases, and lack color\\ninformation for terminals that support it. Fish assumes that all\\nterminals can use the [ANSI\\nX3.64](https://en.wikipedia.org/wiki/ANSI_escape_code) escape\\nsequences if the terminfo definition indicates a color below 16 is\\nnot supported.\",\n    \"args\": \"set_color [OPTIONS] VALUE\"\n  },\n  \"source\": {\n    \"shortDescription\": \"evaluate contents of file\",\n    \"description\": \"source evaluates the commands of the specified FILE in the current\\nshell as a new block of code. This is different from starting a new\\nprocess to perform the commands (i.e. fish < FILE) since the commands\\nwill be evaluated by the current shell, which means that changes in\\nshell variables will affect the current shell. If additional\\narguments are specified after the file name, they will be inserted\\ninto the argv variable. The argv variable will not include the name\\nof the sourced file.\\n\\nfish will search the working directory to resolve relative paths but\\nwill not search PATH .\\n\\nIf no file is specified and stdin is not the terminal, or if the file\\nname - is used, stdin will be read.\\n\\nThe exit status of source is the exit status of the last job to\\nexecute. If something goes wrong while opening or reading the file,\\nsource exits with a non-zero status.\\n\\n. (a single period) is an alias for the source command. The use of .\\nis deprecated in favour of source, and . will be removed in a future\\nversion of fish.\\n\\nsource creates a new local scope; set --local within a sourced block\\nwill not affect variables in the enclosing scope.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\n\\n   source ~/.config/fish/config.fish\\n   # Causes fish to re-read its initialization file.\\n\\nCAVEATS\\nIn fish versions prior to 2.3.0, the argv variable would have a\\nsingle element (the name of the sourced file) if no arguments are\\npresent. Otherwise, it would contain arguments without the name of\\nthe sourced file. That behavior was very confusing and unlike other\\nshells such as bash and zsh.\",\n    \"args\": \"source FILE [ARGUMENTS ...]\\nSOMECOMMAND | source\"\n  },\n  \"status\": {\n    \"shortDescription\": \"query fish runtime information\",\n    \"description\": \"With no arguments, status displays a summary of the current login and\\njob control status of the shell.\\n\\nThe following operations (subcommands) are available:\\n\\nis-command-substitution, -c or --is-command-substitution\\n       Returns 0 if fish is currently executing a command\\n       substitution.\\n\\nis-block, -b or --is-block\\n       Returns 0 if fish is currently executing a block of code.\\n\\nis-breakpoint\\n       Returns 0 if fish is currently showing a prompt in the context\\n       of a breakpoint command. See also the fish_breakpoint_prompt\\n       function.\\n\\nis-interactive, -i or --is-interactive\\n       Returns 0 if fish is interactive - that is, connected to a\\n       keyboard.\\n\\nis-login, -l or --is-login\\n       Returns 0 if fish is a login shell - that is, if fish should\\n       perform login tasks such as setting up PATH.\\n\\nis-full-job-control or --is-full-job-control\\n       Returns 0 if full job control is enabled.\\n\\nis-interactive-job-control or --is-interactive-job-control\\n       Returns 0 if interactive job control is enabled.\\n\\nis-no-job-control or --is-no-job-control\\n       Returns 0 if no job control is enabled.\\n\\ncurrent-command\\n       Prints the name of the currently-running function or command,\\n       like the deprecated  variable.\\n\\ncurrent-commandline\\n       Prints the entirety of the currently-running commandline,\\n       inclusive of all jobs and operators.\\n\\nfilename, current-filename, -f or --current-filename\\n       Prints the filename of the currently-running script. If the\\n       current script was called via a symlink, this will return the\\n       symlink. If the current script was received by piping into\\n       source, then this will return -.\\n\\nbasename\\n       Prints just the filename of the running script, without any\\n       path components before.\\n\\ndirname\\n       Prints just the path to the running script, without the actual\\n       filename itself. This can be relative to PWD (including just\\n       \\\".\\\"), depending on how the script was called. This is the same\\n       as passing the filename to dirname(3). It's useful if you want\\n       to use other files in the current script's directory or\\n       similar.\\n\\nfish-path\\n       Prints the absolute path to the currently executing instance\\n       of fish. This is a best-effort attempt and the exact output is\\n       down to what the platform gives fish. In some cases you might\\n       only get \\\"fish\\\".\\n\\nfunction or current-function\\n       Prints the name of the currently called function if able, when\\n       missing displays \\\"Not a function\\\" (or equivalent translated\\n       string).\\n\\nline-number, current-line-number, -n or --current-line-number\\n       Prints the line number of the currently running script.\\n\\nstack-trace, print-stack-trace, -t or --print-stack-trace\\n       Prints a stack trace of all function calls on the call stack.\\n\\njob-control, -j or --job-control CONTROL_TYPE\\n       Sets the job control type to CONTROL_TYPE, which can be none,\\n       full, or interactive.\\n\\nfeatures\\n       Lists all available feature flags.\\n\\ntest-feature FEATURE\\n       Returns 0 when FEATURE is enabled, 1 if it is disabled, and 2\\n       if it is not recognized.\\n\\nNOTES\\nFor backwards compatibility most subcommands can also be specified as\\na long or short option. For example, rather than status is-login you\\ncan type status --is-login. The flag forms are deprecated and may be\\nremoved in a future release (but not before fish 4.0).\\n\\nYou can only specify one subcommand per invocation even if you use\\nthe flag form of the subcommand.\",\n    \"args\": \"status\\nstatus is-login\\nstatus is-interactive\\nstatus is-block\\nstatus is-breakpoint\\nstatus is-command-substitution\\nstatus is-no-job-control\\nstatus is-full-job-control\\nstatus is-interactive-job-control\\nstatus current-command\\nstatus current-commandline\\nstatus filename\\nstatus basename\\nstatus dirname\\nstatus fish-path\\nstatus function\\nstatus line-number\\nstatus stack-trace\\nstatus job-control CONTROL_TYPE\\nstatus features\\nstatus test-feature FEATURE\"\n  },\n  \"string\": {\n    \"shortDescription\": \"manipulate strings\",\n    \"description\": \"string performs operations on strings.\\n\\nSTRING arguments are taken from the command line unless standard\\ninput is connected to a pipe or a file, in which case they are read\\nfrom standard input, one STRING per line. It is an error to supply\\nSTRING arguments on the command line and on standard input.\\n\\nArguments beginning with - are normally interpreted as switches; --\\ncauses the following arguments not to be treated as switches even if\\nthey begin with -. Switches and required arguments are recognized\\nonly on the command line.\\n\\nMost subcommands accept a -q or --quiet switch, which suppresses the\\nusual output but exits with the documented status. In this case these\\ncommands will quit early, without reading all of the available input.\\n\\nThe following subcommands are available.\\n\\nCOLLECT SUBCOMMAND\\nstring collect [-a | --allow-empty] [-N | --no-trim-newlines] [STRING ...]\\n\\nstring collect collects its input into a single output argument,\\nwithout splitting the output when used in a command substitution.\\nThis is useful when trying to collect multiline output from another\\ncommand into a variable. Exit status: 0 if any output argument is\\nnon-empty, or 1 otherwise.\\n\\nA command like echo (cmd | string collect) is mostly equivalent to a\\nquoted command substitution (echo \\\"$(cmd)\\\"). The main difference is\\nthat the former evaluates to zero or one elements whereas the quoted\\ncommand substitution always evaluates to one element due to string\\ninterpolation.\\n\\nIf invoked with multiple arguments instead of input, string collect\\npreserves each argument separately, where the number of output\\narguments is equal to the number of arguments given to string\\ncollect.\\n\\nAny trailing newlines on the input are trimmed, just as with \\\"$(cmd)\\\"\\nsubstitution. Use --no-trim-newlines to disable this behavior, which\\nmay be useful when running a command such as set contents (cat\\nfilename | string collect -N).\\n\\nWith --allow-empty, string collect always prints one (empty)\\nargument. This can be used to prevent an argument from disappearing.\\n\\n   Examples\\n\\n   > echo \\\"zero $(echo one\\\\ntwo\\\\nthree) four\\\"\\n   zero one\\n   two\\n   three four\\n\\n   > echo \\\\\\\"(echo one\\\\ntwo\\\\nthree | string collect)\\\\\\\"\\n   \\\"one\\n   two\\n   three\\\"\\n\\n   > echo \\\\\\\"(echo one\\\\ntwo\\\\nthree | string collect -N)\\\\\\\"\\n   \\\"one\\n   two\\n   three\\n   \\\"\\n\\n   > echo foo(true | string collect --allow-empty)bar\\n   foobar\\n\\nESCAPE AND UNESCAPE SUBCOMMANDS\\nstring escape [-n | --no-quoted] [--style=] [STRING ...]\\nstring unescape [--style=] [STRING ...]\\n\\nstring escape escapes each STRING in one of three ways. The first is\\n--style=script. This is the default. It alters the string such that\\nit can be passed back to eval to produce the original argument again.\\nBy default, all special characters are escaped, and quotes are used\\nto simplify the output when possible. If -n or --no-quoted is given,\\nthe simplifying quoted format is not used. Exit status: 0 if at least\\none string was escaped, or 1 otherwise.\\n\\n--style=var ensures the string can be used as a variable name by hex\\nencoding any non-alphanumeric characters. The string is first\\nconverted to UTF-8 before being encoded.\\n\\n--style=url ensures the string can be used as a URL by hex encoding\\nany character which is not legal in a URL. The string is first\\nconverted to UTF-8 before being encoded.\\n\\n--style=regex escapes an input string for literal matching within a\\nregex expression. The string is first converted to UTF-8 before being\\nencoded.\\n\\nstring unescape performs the inverse of the string escape command. If\\nthe string to be unescaped is not properly formatted it is ignored.\\nFor example, doing string unescape --style=var (string escape\\n--style=var $str) will return the original string. There is no\\nsupport for unescaping --style=regex.\\n\\n   Examples\\n\\n   > echo \\\\x07 | string escape\\n   \\\\cg\\n\\n   > string escape --style=var 'a1 b2'\\\\u6161\\n   a1_20_b2_E6_85_A1\\n\\nJOIN AND JOIN0 SUBCOMMANDS\\nstring join [-q | --quiet] SEP [STRING ...]\\nstring join0 [-q | --quiet] [STRING ...]\\n\\nstring join joins its STRING arguments into a single string separated\\nby SEP, which can be an empty string. Exit status: 0 if at least one\\njoin was performed, or 1 otherwise. If -n or --no-empty is specified,\\nempty strings are excluded from consideration (e.g. string join -n +\\na b \\\"\\\" c would expand to a+b+c not a+b++c).\\n\\nstring join0 joins its STRING arguments into a single string\\nseparated by the zero byte (NUL), and adds a trailing NUL. This is\\nmost useful in conjunction with tools that accept NUL-delimited\\ninput, such as sort -z. Exit status: 0 if at least one join was\\nperformed, or 1 otherwise.\\n\\nBecause Unix uses NUL as the string terminator, passing the output of\\nstring join0 as an argument to a command (via a command substitution)\\nwon't actually work. Fish will pass the correct bytes along, but the\\ncommand won't be able to tell where the argument ends. This is a\\nlimitation of Unix' argument passing.\\n\\n   Examples\\n\\n   > seq 3 | string join ...\\n   1...2...3\\n\\n   # Give a list of NUL-separated filenames to du (this is a GNU extension)\\n   > string join0 file1 file2 file\\\\nwith\\\\nmultiple\\\\nlines | du --files0-from=-\\n\\n   # Just put the strings together without a separator\\n   > string join '' a b c\\n   abc\\n\\nLENGTH SUBCOMMAND\\nstring length [-q | --quiet] [-V | --visible] [STRING ...]\\n\\nstring length reports the length of each string argument in\\ncharacters. Exit status: 0 if at least one non-empty STRING was\\ngiven, or 1 otherwise.\\n\\nWith -V or --visible, it uses the visible width of the arguments.\\nThat means it will discount escape sequences fish knows about,\\naccount for $fish_emoji_width and $fish_ambiguous_width. It will also\\ncount each line (separated by \\\\n) on its own, and with a carriage\\nreturn (\\\\r) count only the widest stretch on a line. The intent is to\\nmeasure the number of columns the STRING would occupy in the current\\nterminal.\\n\\n   Examples\\n\\n   > string length 'hello, world'\\n   12\\n\\n   > set str foo\\n   > string length -q $str; echo $status\\n   0\\n   # Equivalent to test -n \\\"$str\\\"\\n\\n   > string length --visible (set_color red)foobar\\n   # the set_color is discounted, so this is the width of \\\"foobar\\\"\\n   6\\n\\n   > string length --visible 🐟🐟🐟🐟\\n   # depending on $fish_emoji_width, this is either 4 or 8\\n   # in new terminals it should be\\n   8\\n\\n   > string length --visible abcdef\\\\r123\\n   # this displays as \\\"123def\\\", so the width is 6\\n   6\\n\\n   > string length --visible a\\\\nbc\\n   # counts \\\"a\\\" and \\\"bc\\\" as separate lines, so it prints width for each\\n   1\\n   2\\n\\nLOWER SUBCOMMAND\\nstring lower [-q | --quiet] [STRING ...]\\n\\nstring lower converts each string argument to lowercase. Exit status:\\n0 if at least one string was converted to lowercase, else 1. This\\nmeans that in conjunction with the -q flag you can readily test\\nwhether a string is already lowercase.\\n\\nMATCH SUBCOMMAND\\nstring match [-a | --all] [-e | --entire] [-i | --ignore-case]\\n             [-g | --groups-only] [-r | --regex] [-n | --index]\\n             [-q | --quiet] [-v | --invert]\\n             PATTERN [STRING ...]\\n\\nstring match tests each STRING against PATTERN and prints matching\\nsubstrings. Only the first match for each STRING is reported unless\\n-a or --all is given, in which case all matches are reported.\\n\\nIf you specify the -e or --entire then each matching string is\\nprinted including any prefix or suffix not matched by the pattern\\n(equivalent to grep without the -o flag). You can, obviously, achieve\\nthe same result by prepending and appending * or .* depending on\\nwhether or not you have specified the --regex flag. The --entire flag\\nis simply a way to avoid having to complicate the pattern in that\\nfashion and make the intent of the string match clearer. Without\\n--entire and --regex, a PATTERN will need to match the entire STRING\\nbefore it will be reported.\\n\\nMatching can be made case-insensitive with --ignore-case or -i.\\n\\nIf --groups-only or -g is given, only the capturing groups will be\\nreported - meaning the full match will be skipped. This is\\nincompatible with --entire and --invert, and requires --regex. It is\\nuseful as a simple cutting tool instead of string replace, so you can\\nsimply choose \\\"this part\\\" of a string.\\n\\nIf --index or -n is given, each match is reported as a 1-based start\\nposition and a length. By default, PATTERN is interpreted as a glob\\npattern matched against each entire STRING argument. A glob pattern\\nis only considered a valid match if it matches the entire STRING.\\n\\nIf --regex or -r is given, PATTERN is interpreted as a\\nPerl-compatible regular expression, which does not have to match the\\nentire STRING. For a regular expression containing capturing groups,\\nmultiple items will be reported for each match, one for the entire\\nmatch and one for each capturing group. With this, only the matching\\npart of the STRING will be reported, unless --entire is given.\\n\\nWhen matching via regular expressions, string match automatically\\nsets variables for all named capturing groups ((?<name>expression)).\\nIt will create a variable with the name of the group, in the default\\nscope, for each named capturing group, and set it to the value of the\\ncapturing group in the first matched argument. If a named capture\\ngroup matched an empty string, the variable will be set to the empty\\nstring (like set var \\\"\\\"). If it did not match, the variable will be\\nset to nothing (like set var).  When --regex is used with --all, this\\nbehavior changes. Each named variable will contain a list of matches,\\nwith the first match contained in the first element, the second match\\nin the second, and so on. If the group was empty or did not match,\\nthe corresponding element will be an empty string.\\n\\nIf --invert or -v is used the selected lines will be only those which\\ndo not match the given glob pattern or regular expression.\\n\\nExit status: 0 if at least one match was found, or 1 otherwise.\\n\\n   Match Glob Examples\\n\\n   > string match '?' a\\n   a\\n\\n   > string match 'a*b' axxb\\n   axxb\\n\\n   > string match -i 'a??B' Axxb\\n   Axxb\\n\\n   > string match -- '-*' -h foo --version bar\\n   # To match things that look like options, we need a `--`\\n   # to tell string its options end there.\\n   -h\\n   --version\\n\\n   > echo 'ok?' | string match '*\\\\?'\\n   ok?\\n\\n   # Note that only the second STRING will match here.\\n   > string match 'foo' 'foo1' 'foo' 'foo2'\\n   foo\\n\\n   > string match -e 'foo' 'foo1' 'foo' 'foo2'\\n   foo1\\n   foo\\n   foo2\\n\\n   > string match 'foo?' 'foo1' 'foo' 'foo2'\\n   foo1\\n   foo2\\n\\n   Match Regex Examples\\n\\n   > string match -r 'cat|dog|fish' 'nice dog'\\n   dog\\n\\n   > string match -r -v \\\"c.*[12]\\\" {cat,dog}(seq 1 4)\\n   dog1\\n   dog2\\n   cat3\\n   dog3\\n   cat4\\n   dog4\\n\\n   > string match -r -- '-.*' -h foo --version bar\\n   # To match things that look like options, we need a `--`\\n   # to tell string its options end there.\\n   -h\\n   --version\\n\\n   > string match -r '(\\\\d\\\\d?):(\\\\d\\\\d):(\\\\d\\\\d)' 2:34:56\\n   2:34:56\\n   2\\n   34\\n   56\\n\\n   > string match -r '^(\\\\w{2,4})\\\\1$' papa mud murmur\\n   papa\\n   pa\\n   murmur\\n   mur\\n\\n   > string match -r -a -n at ratatat\\n   2 2\\n   4 2\\n   6 2\\n\\n   > string match -r -i '0x[0-9a-f]{1,8}' 'int magic = 0xBadC0de;'\\n   0xBadC0de\\n\\n   > echo $version\\n   3.1.2-1575-ga2ff32d90\\n   > string match -rq '(?<major>\\\\d+).(?<minor>\\\\d+).(?<revision>\\\\d+)' -- $version\\n   > echo \\\"You are using fish $major!\\\"\\n   You are using fish 3!\\n\\n   > string match -raq ' *(?<sentence>[^.!?]+)(?<punctuation>[.!?])?' \\\"hello, friend. goodbye\\\"\\n   > printf \\\"%s\\\\n\\\" -- $sentence\\n   hello, friend\\n   goodbye\\n   > printf \\\"%s\\\\n\\\" -- $punctuation\\n   .\\n\\n   > string match -rq '(?<word>hello)' 'hi'\\n   > count $word\\n   0\\n\\nPAD AND SHORTEN SUBCOMMANDS\\nstring pad [-r | --right] [(-c | --char) CHAR] [(-w | --width) INTEGER]\\n           [STRING ...]\\n\\nstring pad extends each STRING to the given visible width by adding\\nCHAR to the left. That means the width of all visible characters\\nadded together, excluding escape sequences and accounting for\\nfish_emoji_width and fish_ambiguous_width. It is the amount of\\ncolumns in a terminal the STRING occupies.\\n\\nThe escape sequences reflect what fish knows about, and how it\\ncomputes its output. Your terminal might support more escapes, or not\\nsupport escape sequences that fish knows about.\\n\\nIf -r or --right is given, add the padding after a string.\\n\\nIf -c or --char is given, pad with CHAR instead of whitespace.\\n\\nThe output is padded to the maximum width of all input strings. If -w\\nor --width is given, use at least that.\\n\\n   > string pad -w 10 abc abcdef\\n          abc\\n       abcdef\\n\\n   > string pad --right --char=🐟 \\\"fish are pretty\\\" \\\"rich. \\\"\\n   fish are pretty\\n   rich.  🐟🐟🐟🐟\\n\\n   > string pad -w$COLUMNS (date)\\n   # Prints the current time on the right edge of the screen.\\n\\nSEE ALSO\\n\\n• The printf command can do simple padding, for example printf %10s\\\\n\\n  works like string pad -w10.\\n\\n• string length with the --visible option can be used to show what\\n  fish thinks the width is.\\nstring shorten [(-c | --char) CHARS] [(-m | --max) INTEGER]\\n               [-N | --no-newline] [-l | --left] [-q | --quiet] [STRING ...]\\n\\nstring shorten truncates each STRING to the given visible width and\\nadds an ellipsis to indicate it. \\\"Visible width\\\" means the width of\\nall visible characters added together, excluding escape sequences and\\naccounting for fish_emoji_width and fish_ambiguous_width. It is the\\namount of columns in a terminal the STRING occupies.\\n\\nThe escape sequences reflect what fish knows about, and how it\\ncomputes its output. Your terminal might support more escapes, or not\\nsupport escape sequences that fish knows about.\\n\\nIf -m or --max is given, truncate at the given width. Otherwise, the\\nlowest non-zero width of all input strings is used. A max of 0 means\\nno shortening takes place, all STRINGs are printed as-is.\\n\\nIf -N or --no-newline is given, only the first line (or last line\\nwith --left) of each STRING is used, and an ellipsis is added if it\\nwas multiline. This only works for STRINGs being given as arguments,\\nmultiple lines given on stdin will be interpreted as separate STRINGs\\ninstead.\\n\\nIf -c or --char is given, add CHAR instead of an ellipsis. This can\\nalso be empty or more than one character.\\n\\nIf -l or --left is given, remove text from the left on instead, so\\nthis prints the longest suffix of the string that fits. With\\n--no-newline, this will take from the last line instead of the first.\\n\\nIf -q or --quiet is given, string shorten only runs for the return\\nvalue - if anything would be shortened, it returns 0, else 1.\\n\\nThe default ellipsis is …. If fish thinks your system is incapable\\nbecause of your locale, it will use ... instead.\\n\\nThe return value is 0 if any shortening occured, 1 otherwise.\\n\\n   > string shorten foo foobar\\n   # No width was given, we infer, and \\\"foo\\\" is the shortest.\\n   foo\\n   fo…\\n\\n   > string shorten --char=\\\"...\\\" foo foobar\\n   # The target width is 3 because of \\\"foo\\\",\\n   # and our ellipsis is 3 too, so we can't really show anything.\\n   # This is the default ellipsis if your locale doesn't allow \\\"…\\\".\\n   foo\\n   ...\\n\\n   > string shorten --char=\\\"\\\" --max 4 abcdef 123456\\n   # Leaving the char empty makes us not add an ellipsis\\n   # So this truncates at 4 columns:\\n   abcd\\n   1234\\n\\n   > touch \\\"a multiline\\\"\\\\n\\\"file\\\"\\n   > for file in *; string shorten -N -- $file; end\\n   # Shorten the multiline file so we only show one line per file:\\n   a multiline…\\n\\n   > ss -p | string shorten -m$COLUMNS -c \\\"\\\"\\n   # `ss` from Linux' iproute2 shows socket information, but prints extremely long lines.\\n   # This shortens input so it fits on the screen without overflowing lines.\\n\\n   > git branch | string match -rg '^\\\\* (.*)' | string shorten -m20\\n   # Take the current git branch and shorten it at 20 columns.\\n   # Here the branch is \\\"builtin-path-with-expand\\\"\\n   builtin-path-with-e…\\n\\n   > git branch | string match -rg '^\\\\* (.*)' | string shorten -m20 --left\\n   # Taking 20 columns from the right instead:\\n   …in-path-with-expand\\n\\nSEE ALSO\\n\\n• string's pad subcommand does the inverse of this command, adding\\n  padding to a specific width instead.\\n\\n• The printf command can do simple padding, for example printf %10s\\\\n\\n  works like string pad -w10.\\n\\n• string length with the --visible option can be used to show what\\n  fish thinks the width is.\\n\\nREPEAT SUBCOMMAND\\nstring repeat [(-n | --count) COUNT] [(-m | --max) MAX] [-N | --no-newline]\\n              [-q | --quiet] [STRING ...]\\n\\nstring repeat repeats the STRING -n or --count times. The -m or --max\\noption will limit the number of outputted characters (excluding the\\nnewline). This option can be used by itself or in conjunction with\\n--count. If both --count and --max are present, max char will be\\noutputed unless the final repeated string size is less than max, in\\nthat case, the string will repeat until count has been reached. Both\\n--count and --max will accept a number greater than or equal to zero,\\nin the case of zero, nothing will be outputed. If -N or --no-newline\\nis given, the output won't contain a newline character at the end.\\nExit status: 0 if yielded string is not empty, 1 otherwise.\\n\\n   Examples\\n   Repeat Examples\\n\\n   > string repeat -n 2 'foo '\\n   foo foo\\n\\n   > echo foo | string repeat -n 2\\n   foofoo\\n\\n   > string repeat -n 2 -m 5 'foo'\\n   foofo\\n\\n   > string repeat -m 5 'foo'\\n   foofo\\n\\nREPLACE SUBCOMMAND\\nstring replace [-a | --all] [-f | --filter] [-i | --ignore-case]\\n               [-r | --regex] [-q | --quiet] PATTERN REPLACEMENT [STRING ...]\\n\\nstring replace is similar to string match but replaces\\nnon-overlapping matching substrings with a replacement string and\\nprints the result. By default, PATTERN is treated as a literal\\nsubstring to be matched.\\n\\nIf -r or --regex is given, PATTERN is interpreted as a\\nPerl-compatible regular expression, and REPLACEMENT can contain\\nC-style escape sequences like t as well as references to capturing\\ngroups by number or name as $n or ${n}.\\n\\nIf you specify the -f or --filter flag then each input string is\\nprinted only if a replacement was done. This is useful where you\\nwould otherwise use this idiom: a_cmd | string match pattern | string\\nreplace pattern new_pattern. You can instead just write a_cmd |\\nstring replace --filter pattern new_pattern.\\n\\nExit status: 0 if at least one replacement was performed, or 1\\notherwise.\\n\\n   Replace Literal Examples\\n\\n   > string replace is was 'blue is my favorite'\\n   blue was my favorite\\n\\n   > string replace 3rd last 1st 2nd 3rd\\n   1st\\n   2nd\\n   last\\n\\n   > string replace -a ' '  'spaces to underscores'\\n   spaces_to_underscores\\n\\n   Replace Regex Examples\\n\\n   > string replace -r -a '[^\\\\d.]+' ' ' '0 one two 3.14 four 5x'\\n   0 3.14 5\\n\\n   > string replace -r '(\\\\w+)\\\\s+(\\\\w+)' '$2 $1 $$' 'left right'\\n   right left $\\n\\n   > string replace -r '\\\\s*newline\\\\s*' '\\\\n' 'put a newline here'\\n   put a\\n   here\\n\\nSPLIT AND SPLIT0 SUBCOMMANDS\\nstring split [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\\n             [-q | --quiet] [-r | --right] SEP [STRING ...]\\nstring split0 [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\\n              [-q | --quiet] [-r | --right] [STRING ...]\\n\\nstring split splits each STRING on the separator SEP, which can be an\\nempty string. If -m or --max is specified, at most MAX splits are\\ndone on each STRING. If -r or --right is given, splitting is\\nperformed right-to-left. This is useful in combination with -m or\\n--max. With -n or --no-empty, empty results are excluded from\\nconsideration (e.g. hello\\\\n\\\\nworld would expand to two strings and\\nnot three). Exit status: 0 if at least one split was performed, or 1\\notherwise.\\n\\nUse -f or --fields to print out specific fields. FIELDS is a\\ncomma-separated string of field numbers and/or spans. Each field is\\none-indexed, and will be printed on separate lines. If a given field\\ndoes not exist, then the command exits with status 1 and does not\\nprint anything, unless --allow-empty is used.\\n\\nSee also the --delimiter option of the read command.\\n\\nstring split0 splits each STRING on the zero byte (NUL). Options are\\nthe same as string split except that no separator is given.\\n\\nsplit0 has the important property that its output is not further\\nsplit when used in a command substitution, allowing for the command\\nsubstitution to produce elements containing newlines. This is most\\nuseful when used with Unix tools that produce zero bytes, such as\\nfind -print0 or sort -z. See split0 examples below.\\n\\n   Examples\\n\\n   > string split . example.com\\n   example\\n   com\\n\\n   > string split -r -m1 / /usr/local/bin/fish\\n   /usr/local/bin\\n   fish\\n\\n   > string split '' abc\\n   a\\n   b\\n   c\\n\\n   > string split --allow-empty -f1,3-4,5 '' abcd\\n   a\\n   c\\n   d\\n\\n   NUL Delimited Examples\\n\\n   > # Count files in a directory, without being confused by newlines.\\n   > count (find . -print0 | string split0)\\n   42\\n\\n   > # Sort a list of elements which may contain newlines\\n   > set foo beta alpha\\\\ngamma\\n   > set foo (string join0 $foo | sort -z | string split0)\\n   > string escape $foo[1]\\n   alpha\\\\ngamma\\n\\nSUB SUBCOMMAND\\nstring sub [(-s | --start) START] [(-e | --end) END] [(-l | --length) LENGTH]\\n           [-q | --quiet] [STRING ...]\\n\\nstring sub prints a substring of each string argument. The start/end\\nof the substring can be specified with -s/-e or --start/--end\\nfollowed by a 1-based index value. Positive index values are relative\\nto the start of the string and negative index values are relative to\\nthe end of the string. The default start value is 1. The length of\\nthe substring can be specified with -l or --length. If the length or\\nend is not specified, the substring continues to the end of each\\nSTRING. Exit status: 0 if at least one substring operation was\\nperformed, 1 otherwise. --length is mutually exclusive with --end.\\n\\n   Examples\\n\\n   > string sub --length 2 abcde\\n   ab\\n\\n   > string sub -s 2 -l 2 abcde\\n   bc\\n\\n   > string sub --start=-2 abcde\\n   de\\n\\n   > string sub --end=3 abcde\\n   abc\\n\\n   > string sub -e -1 abcde\\n   abcd\\n\\n   > string sub -s 2 -e -1 abcde\\n   bcd\\n\\n   > string sub -s -3 -e -2 abcde\\n   c\\n\\nTRIM SUBCOMMAND\\nstring trim [-l | --left] [-r | --right] [(-c | --chars) CHARS]\\n            [-q | --quiet] [STRING ...]\\n\\nstring trim removes leading and trailing whitespace from each STRING.\\nIf -l or --left is given, only leading whitespace is removed. If -r\\nor --right is given, only trailing whitespace is trimmed. The -c or\\n--chars switch causes the characters in CHARS to be removed instead\\nof whitespace. Exit status: 0 if at least one character was trimmed,\\nor 1 otherwise.\\n\\n   Examples\\n\\n   > string trim ' abc  '\\n   abc\\n\\n   > string trim --right --chars=yz xyzzy zany\\n   x\\n   zan\\n\\nUPPER SUBCOMMAND\\nstring upper [-q | --quiet] [STRING ...]\\n\\nstring upper converts each string argument to uppercase. Exit status:\\n0 if at least one string was converted to uppercase, else 1. This\\nmeans that in conjunction with the -q flag you can readily test\\nwhether a string is already uppercase.\\n\\nREGULAR EXPRESSIONS\\nBoth the match and replace subcommand support regular expressions\\nwhen used with the -r or --regex option. The dialect is that of\\nPCRE2.\\n\\nIn general, special characters are special by default, so a+ matches\\none or more \\\"a\\\"s, while a\\\\+ matches an \\\"a\\\" and then a \\\"+\\\". (a+)\\nmatches one or more \\\"a\\\"s in a capturing group ((?:XXXX) denotes a\\nnon-capturing group). For the replacement parameter of replace, $n\\nrefers to the n-th group of the match. In the match parameter, \\\\n\\n(e.g. \\\\1) refers back to groups.\\n\\nSome features include repetitions:\\n\\n• * refers to 0 or more repetitions of the previous expression\\n\\n• + 1 or more\\n\\n• ? 0 or 1.\\n\\n• {n} to exactly n (where n is a number)\\n\\n• {n,m} at least n, no more than m.\\n\\n• {n,} n or more\\n\\nCharacter classes, some of the more important:\\n\\n• . any character except newline\\n\\n• \\\\d a decimal digit and \\\\D, not a decimal digit\\n\\n• \\\\s whitespace and \\\\S, not whitespace\\n\\n• \\\\w a \\\"word\\\" character and \\\\W, a \\\"non-word\\\" character\\n\\n• [...] (where \\\"...\\\" is some characters) is a character set\\n\\n• [^...] is the inverse of the given character set\\n\\n• [x-y] is the range of characters from x-y\\n\\n• [[:xxx:]] is a named character set\\n\\n• [[:^xxx:]] is the inverse of a named character set\\n\\n• [[:alnum:]]  : \\\"alphanumeric\\\"\\n\\n• [[:alpha:]]  : \\\"alphabetic\\\"\\n\\n• [[:ascii:]]  : \\\"0-127\\\"\\n\\n• [[:blank:]]  : \\\"space or tab\\\"\\n\\n• [[:cntrl:]]  : \\\"control character\\\"\\n\\n• [[:digit:]]  : \\\"decimal digit\\\"\\n\\n• [[:graph:]]  : \\\"printing, excluding space\\\"\\n\\n• [[:lower:]]  : \\\"lower case letter\\\"\\n\\n• [[:print:]]  : \\\"printing, including space\\\"\\n\\n• [[:punct:]]  : \\\"printing, excluding alphanumeric\\\"\\n\\n• [[:space:]]  : \\\"white space\\\"\\n\\n• [[:upper:]]  : \\\"upper case letter\\\"\\n\\n• [[:word:]]   : \\\"same as w\\\"\\n\\n• [[:xdigit:]] : \\\"hexadecimal digit\\\"\\n\\nGroups:\\n\\n• (...) is a capturing group\\n\\n• (?:...) is a non-capturing group\\n\\n• \\\\n is a backreference (where n is the number of the group, starting\\n  with 1)\\n\\n• $n is a reference from the replacement expression to a group in the\\n  match expression.\\n\\nAnd some other things:\\n\\n• \\\\b denotes a word boundary, \\\\B is not a word boundary.\\n\\n• ^ is the start of the string or line, $ the end.\\n\\n• | is \\\"alternation\\\", i.e. the \\\"or\\\".\\n\\nCOMPARISON TO OTHER TOOLS\\nMost operations string supports can also be done by external tools.\\nSome of these include grep, sed and cut.\\n\\nIf you are familiar with these, it is useful to know how string\\ndiffers from them.\\n\\nIn contrast to these classics, string reads input either from stdin\\nor as arguments. string also does not deal with files, so it requires\\nredirections to be used with them.\\n\\nIn contrast to grep, string's match defaults to glob-mode, while\\nreplace defaults to literal matching. If set to regex-mode, they use\\nPCRE regular expressions, which is comparable to grep's -P option.\\nmatch defaults to printing just the match, which is like grep with -o\\n(use --entire to enable grep-like behavior).\\n\\nLike sed's s/old/new/ command, string replace still prints strings\\nthat don't match. sed's -n in combination with a /p modifier or\\ncommand is like string replace -f.\\n\\nstring split somedelimiter is a replacement for tr somedelimiter \\\\n.\",\n    \"args\": \"string collect [-a | --allow-empty] [-N | --no-trim-newlines] [STRING ...]\\nstring escape [-n | --no-quoted] [--style=] [STRING ...]\\nstring join [-q | --quiet] [-n | --no-empty] SEP [STRING ...]\\nstring join0 [-q | --quiet] [STRING ...]\\nstring length [-q | --quiet] [STRING ...]\\nstring lower [-q | --quiet] [STRING ...]\\nstring match [-a | --all] [-e | --entire] [-i | --ignore-case]\\n             [-g | --groups-only] [-r | --regex] [-n | --index]\\n             [-q | --quiet] [-v | --invert]\\n             PATTERN [STRING ...]\\nstring pad [-r | --right] [(-c | --char) CHAR] [(-w | --width) INTEGER]\\n           [STRING ...]\\nstring repeat [(-n | --count) COUNT] [(-m | --max) MAX] [-N | --no-newline]\\n              [-q | --quiet] [STRING ...]\\nstring replace [-a | --all] [-f | --filter] [-i | --ignore-case]\\n               [-r | --regex] [-q | --quiet] PATTERN REPLACE [STRING ...]\\nstring shorten [(-c | --char) CHARS] [(-m | --max) INTEGER]\\n               [-N | --no-newline] [-l | --left] [-q | --quiet] [STRING ...]\\nstring split [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\\n             [-q | --quiet] [-r | --right] SEP [STRING ...]\\nstring split0 [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\\n              [-q | --quiet] [-r | --right] [STRING ...]\\nstring sub [(-s | --start) START] [(-e | --end) END] [(-l | --length) LENGTH]\\n           [-q | --quiet] [STRING ...]\\nstring trim [-l | --left] [-r | --right] [(-c | --chars) CHARS]\\n            [-q | --quiet] [STRING ...]\\nstring unescape [--style=] [STRING ...]\\nstring upper [-q | --quiet] [STRING ...]\"\n  },\n  \"switch\": {\n    \"shortDescription\": \"conditionally execute a block of commands\",\n    \"description\": \"switch performs one of several blocks of commands, depending on\\nwhether a specified value equals one of several globbed values. case\\nis used together with the switch statement in order to determine\\nwhich block should be executed.\\n\\nEach case command is given one or more parameters. The first case\\ncommand with a parameter that matches the string specified in the\\nswitch command will be evaluated. case parameters may contain globs.\\nThese need to be escaped or quoted in order to avoid regular glob\\nexpansion using filenames.\\n\\nNote that fish does not fall through on case statements. Only the\\nfirst matching case is executed.\\n\\nNote that break cannot be used to exit a case/switch block early like\\nin other languages. It can only be used in loops.\\n\\nNote that command substitutions in a case statement will be evaluated\\neven if its body is not taken. All substitutions, including command\\nsubstitutions, must be performed before the value can be compared\\nagainst the parameter.\\n\\nEXAMPLE\\nIf the variable $animal contains the name of an animal, the following\\ncode would attempt to classify it:\\n\\n   switch $animal\\n       case cat\\n           echo evil\\n       case wolf dog human moose dolphin whale\\n           echo mammal\\n       case duck goose albatross\\n           echo bird\\n       case shark trout stingray\\n           echo fish\\n       case '*'\\n           echo I have no idea what a $animal is\\n   end\\n\\nIf the above code was run with $animal set to whale, the output would\\nbe mammal.\",\n    \"args\": \"switch VALUE; [case [GLOB ...]; [COMMANDS ...]; ...] end\"\n  },\n  \"test\": {\n    \"shortDescription\": \"Evaluate conditional expressions\",\n    \"description\": \"The `test` command evaluates conditional expressions and sets the exit status to 0 if the expression is true, and 1 if it is false. It supports various operators to evaluate expressions related to strings, numbers, and file attributes.\",\n    \"args\": \"EXPRESSION\"\n  },\n  \"time\": {\n    \"shortDescription\": \"measure how long a command or block takes\",\n    \"description\": \"NOTE: This page documents the fish keyword time.  To see the\\ndocumentation on the time command you might have, use command man\\ntime.\\n\\ntime causes fish to measure how long a command takes and print the\\nresults afterwards. The command can be a simple fish command or a\\nblock. The results can not currently be redirected.\\n\\nFor checking timing after a command has completed, check\\n$CMD_DURATION.\\n\\nYour system most likely also has a time command. To use that use\\nsomething like command time, as in command time sleep 10. Because\\nit's not inside fish, it won't have access to fish functions and\\nwon't be able to time blocks and such.\\n\\nHOW TO INTERPRET THE OUTPUT\\nTime outputs a few different values. Let's look at an example:\\n\\n   > time string repeat -n 10000000 y\\\\n | command grep y >/dev/null\\n   _______________________________________________________\\n   Executed in  805.98 millis    fish           external\\n      usr time  798.88 millis  763.88 millis   34.99 millis\\n      sys time  141.22 millis   40.20 millis  101.02 millis\\n\\nThe time after \\\"Executed in\\\" is what is known as the \\\"wall-clock\\ntime\\\". It is simply a measure of how long it took from the start of\\nthe command until it finished. Typically it is reasonably close to\\nCMD_DURATION, except for a slight skew because the two are taken at\\nslightly different times.\\n\\nThe other times are all measures of CPU time. That means they measure\\nhow long the CPU was used in this part, and they count multiple cores\\nseparately. So a program with four threads using all CPU for a second\\nwill have a time of 4 seconds.\\n\\nThe \\\"usr\\\" time is how much CPU time was spent inside the program\\nitself, the \\\"sys\\\" time is how long was spent in the kernel on behalf\\nof that program.\\n\\nThe \\\"fish\\\" time is how much CPU was spent in fish, the \\\"external\\\"\\ntime how much was spent in external commands.\\n\\nSo in this example, since string is a builtin, everything that string\\nrepeat did is accounted to fish. Any time it spends doing syscalls\\nlike write() is accounted for in the fish/sys time.\\n\\nAnd grep here is explicitly invoked as an external command, so its\\ntimes will be counted in the \\\"external\\\" column.\\n\\nNote that, as in this example, the CPU times can add up to more than\\nthe execution time. This is because things can be done in parallel -\\ngrep can match while string repeat writes.\\n\\nEXAMPLE\\n(for obvious reasons exact results will vary on your system)\\n\\n   > time sleep 1s\\n\\n   _______________________________________________________\\n   Executed in    1,01 secs   fish           external\\n      usr time    2,32 millis    0,00 micros    2,32 millis\\n      sys time    0,88 millis  877,00 micros    0,00 millis\\n\\n   > time for i in 1 2 3; sleep 1s; end\\n\\n   _______________________________________________________\\n   Executed in    3,01 secs   fish           external\\n      usr time    9,16 millis    2,94 millis    6,23 millis\\n      sys time    0,23 millis    0,00 millis    0,23 millis\\n\\nInline variable assignments need to follow the time keyword:\\n\\n   > time a_moment=1.5m sleep $a_moment\\n\\n   _______________________________________________________\\n   Executed in   90.00 secs      fish           external\\n      usr time    4.62 millis    4.62 millis    0.00 millis\\n      sys time    2.35 millis    0.41 millis    1.95 millis\",\n    \"args\": \"time COMMAND\"\n  },\n  \"true\": {\n    \"shortDescription\": \"Return a successful result\",\n    \"description\": \"The `true` command always returns a successful (zero) exit status. It is often used in scripts and conditional statements where an unconditional success result is needed.\"\n  },\n  \"type\": {\n    \"shortDescription\": \"locate a command and describe its type\",\n    \"description\": \"With no options, type indicates how each NAME would be interpreted if\\nused as a command name.\\n\\nThe following options are available:\\n\\n-a or --all\\n       Prints all of possible definitions of the specified names.\\n\\n-s or --short\\n       Suppresses function expansion when used with no options or\\n       with -a/--all.\\n\\n-f or --no-functions\\n       Suppresses function and builtin lookup.\\n\\n-t or --type\\n       Prints function, builtin, or file if NAME is a shell function,\\n       builtin, or disk file, respectively.\\n\\n-p or --path\\n       Prints the path to NAME if NAME resolves to an executable file\\n       in PATH, the path to the script containing the definition of\\n       the function NAME if NAME resolves to a function loaded from a\\n       file on disk (i.e. not interactively defined at the prompt),\\n       or nothing otherwise.\\n\\n-P or --force-path\\n       Returns the path to the executable file NAME, presuming NAME\\n       is found in the PATH environment variable, or nothing\\n       otherwise. --force-path explicitly resolves only the path to\\n       executable files in  PATH, regardless of whether NAME is\\n       shadowed by a function or builtin with the same name.\\n\\n-q or --query\\n       Suppresses all output; this is useful when testing the exit\\n       status. For compatibility with old fish versions this is also\\n       --quiet.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nThe -q, -p, -t and -P flags (and their long flag aliases) are\\nmutually exclusive. Only one can be specified at a time.\\n\\ntype returns 0 if at least one entry was found, 1 otherwise, and 2\\nfor invalid options or option combinations.\\n\\nEXAMPLE\\n\\n   > type fg\\n   fg is a builtin\",\n    \"args\": \"type [OPTIONS] NAME [...]\"\n  },\n  \"ulimit\": {\n    \"shortDescription\": \"set or get resource usage limits\",\n    \"description\": \"ulimit sets or outputs the resource usage limits of the shell and any\\nprocesses spawned by it. If a new limit value is omitted, the current\\nvalue of the limit of the resource is printed; otherwise, the\\nspecified limit is set to the new value.\\n\\nUse one of the following switches to specify which resource limit to\\nset or report:\\n\\n-b or --socket-buffers\\n       The maximum size of socket buffers.\\n\\n-c or --core-size\\n       The maximum size of core files created. By setting this limit\\n       to zero, core dumps can be disabled.\\n\\n-d or --data-size\\n       The maximum size of a process' data segment.\\n\\n-e or --nice\\n       Controls the maximum nice value; on Linux, this value is\\n       subtracted from 20 to give the effective value.\\n\\n-f or --file-size\\n       The maximum size of files created by a process.\\n\\n-i or --pending-signals\\n       The maximum number of signals that may be queued.\\n\\n-l or --lock-size\\n       The maximum size that may be locked into memory.\\n\\n-m or --resident-set-size\\n       The maximum resident set size.\\n\\n-n or --file-descriptor-count\\n       The maximum number of open file descriptors.\\n\\n-q or --queue-size\\n       The maximum size of data in POSIX message queues.\\n\\n-r or --realtime-priority\\n       The maximum realtime scheduling priority.\\n\\n-s or --stack-size\\n       The maximum stack size.\\n\\n-t or --cpu-time\\n       The maximum amount of CPU time in seconds.\\n\\n-u or --process-count\\n       The maximum number of processes available to the current user.\\n\\n-w or --swap-size\\n       The maximum swap space available to the current user.\\n\\n-v or --virtual-memory-size\\n       The maximum amount of virtual memory available to the shell.\\n\\n-y or --realtime-maxtime\\n       The maximum contiguous realtime CPU time in microseconds.\\n\\n-K or --kernel-queues\\n       The maximum number of kqueues (kernel queues) for the current\\n       user.\\n\\n-P or --ptys\\n       The maximum number of pseudo-terminals for the current user.\\n\\n-T or --threads\\n       The maximum number of simultaneous threads for the current\\n       user.\\n\\nNote that not all these limits are available in all operating\\nsystems; consult the documentation for setrlimit in your operating\\nsystem.\\n\\nThe value of limit can be a number in the unit specified for the\\nresource or one of the special values hard, soft, or unlimited, which\\nstand for the current hard limit, the current soft limit, and no\\nlimit, respectively.\\n\\nIf limit is given, it is the new value of the specified resource. If\\nno option is given, then -f is assumed. Values are in kilobytes,\\nexcept for -t, which is in seconds and -n and -u, which are unscaled\\nvalues. The exit status is 0 unless an invalid option or argument is\\nsupplied, or an error occurs while setting a new limit.\\n\\nulimit also accepts the following options that determine what type of\\nlimit to set:\\n\\n-H or --hard\\n       Sets hard resource limit.\\n\\n-S or --soft\\n       Sets soft resource limit.\\n\\nA hard limit can only be decreased. Once it is set it cannot be\\nincreased; a soft limit may be increased up to the value of the hard\\nlimit. If neither -H nor -S is specified, both the soft and hard\\nlimits are updated when assigning a new limit value, and the soft\\nlimit is used when reporting the current value.\\n\\nThe following additional options are also understood by ulimit:\\n\\n-a or --all\\n       Prints all current limits.\\n\\n-h or --help\\n       Displays help about using this command.\\n\\nThe fish implementation of ulimit should behave identically to the\\nimplementation in bash, except for these differences:\\n\\n• Fish ulimit supports GNU-style long options for all switches.\\n\\n• Fish ulimit does not support the -p option for getting the pipe\\n  size. The bash implementation consists of a compile-time check that\\n  empirically guesses this number by writing to a pipe and waiting\\n  for SIGPIPE. Fish does not do this because this method of\\n  determining pipe size is unreliable. Depending on bash version,\\n  there may also be further additional limits to set in bash that do\\n  not exist in fish.\\n\\n• Fish ulimit does not support getting or setting multiple limits in\\n  one command, except reporting all values using the -a switch.\\n\\nEXAMPLE\\nulimit -Hs 64 sets the hard stack size limit to 64 kB.\",\n    \"args\": \"ulimit [OPTIONS] [LIMIT]\"\n  },\n  \"wait\": {\n    \"shortDescription\": \"wait for jobs to complete\",\n    \"description\": \"wait waits for child jobs to complete.\\n\\nIf a PID is specified, the command waits for the job that the process\\nwith that process ID belongs to.\\n\\nIf a PROCESS_NAME is specified, the command waits for the jobs that\\nthe matched processes belong to.\\n\\nIf neither a pid nor a process name is specified, the command waits\\nfor all background jobs.\\n\\nIf the -n or --any flag is provided, the command returns as soon as\\nthe first job completes. If it is not provided, it returns after all\\njobs complete.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\n\\n   sleep 10 &\\n   wait $last_pid\\n\\nspawns sleep in the background, and then waits until it finishes.\\n\\n   for i in (seq 1 5); sleep 10 &; end\\n   wait\\n\\nspawns five jobs in the background, and then waits until all of them\\nfinishes.\\n\\n   for i in (seq 1 5); sleep 10 &; end\\n   hoge &\\n   wait sleep\\n\\nspawns five jobs and hoge in the background, and then waits until all\\nsleeps finish, and doesn't wait for hoge finishing.\",\n    \"args\": \"wait [-n | --any] [PID | PROCESS_NAME] ...\"\n  },\n  \"while\": {\n    \"shortDescription\": \"perform a set of commands multiple times\",\n    \"description\": \"while repeatedly executes CONDITION, and if the exit status is 0,\\nthen executes COMMANDS.\\n\\nThe exit status of the while loop is the exit status of the last\\niteration of the COMMANDS executed, or 0 if none were executed. (This\\nmatches other shells and is POSIX-compatible.)\\n\\nYou can use and or or for complex conditions. Even more complex\\ncontrol can be achieved with while true containing a break.\\n\\nThe -h or --help option displays help about using this command.\\n\\nEXAMPLE\\n\\n   while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end\\n   # outputs 'file exists' at 10 second intervals,\\n   # as long as the file foo.txt or bar.txt exists.\",\n    \"args\": \"while CONDITION; COMMANDS; end\"\n  }\n} as const;"
  },
  {
    "path": "extensions/terminal-suggest/src/shell/pwsh.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport type { ICompletionResource } from '../types';\nimport { type ExecOptionsWithStringEncoding } from 'node:child_process';\nimport { execHelper } from './common';\n\nexport async function getPwshGlobals(options: ExecOptionsWithStringEncoding, existingCommands?: Set<string>): Promise<(string | ICompletionResource)[]> {\n\treturn [\n\t\t...await getAliases(options, existingCommands),\n\t\t...await getCommands(options, existingCommands),\n\t];\n}\n\n/**\n * The numeric values associated with CommandType from Get-Command. It appears that this is a\n * bitfield based on the values but I think it's actually used as an enum where a CommandType can\n * only be a single one of these.\n *\n * Source:\n *\n * ```\n * [enum]::GetValues([System.Management.Automation.CommandTypes]) | ForEach-Object {\n *     [pscustomobject]@{\n *         Name  = $_\n *         Value = [int]$_\n *     }\n * }\n * ```\n */\nconst enum PwshCommandType {\n\tAlias = 1,\n\tFunction = 2,\n\tFilter = 4,\n\tCmdlet = 8,\n\tExternalScript = 16,\n\tApplication = 32,\n\tScript = 64,\n\tConfiguration = 256,\n\t// All = 383,\n}\n\nconst pwshCommandTypeToCompletionKind: Map<PwshCommandType, vscode.TerminalCompletionItemKind> = new Map([\n\t[PwshCommandType.Alias, vscode.TerminalCompletionItemKind.Alias],\n\t[PwshCommandType.Function, vscode.TerminalCompletionItemKind.Method],\n\t[PwshCommandType.Filter, vscode.TerminalCompletionItemKind.Method],\n\t[PwshCommandType.Cmdlet, vscode.TerminalCompletionItemKind.Method],\n\t[PwshCommandType.ExternalScript, vscode.TerminalCompletionItemKind.Method],\n\t[PwshCommandType.Application, vscode.TerminalCompletionItemKind.Method],\n\t[PwshCommandType.Script, vscode.TerminalCompletionItemKind.Method],\n\t[PwshCommandType.Configuration, vscode.TerminalCompletionItemKind.Argument],\n]);\n\nasync function getAliases(options: ExecOptionsWithStringEncoding, existingCommands?: Set<string>): Promise<ICompletionResource[]> {\n\tconst output = await execHelper('Get-Command -CommandType Alias | Select-Object Name, CommandType, Definition, DisplayName, ModuleName, @{Name=\"Version\";Expression={$_.Version.ToString()}} | ConvertTo-Json', {\n\t\t...options,\n\t\tmaxBuffer: 1024 * 1024 * 100 // This is a lot of content, increase buffer size\n\t});\n\tlet json: any;\n\ttry {\n\t\tjson = JSON.parse(output);\n\t} catch (e) {\n\t\tconsole.error('Error parsing output:', e);\n\t\treturn [];\n\t}\n\treturn (json as any[]).map(e => {\n\t\t// Aliases sometimes use the same Name and DisplayName, show them as methods in this case.\n\t\tconst isAlias = e.Name !== e.DisplayName;\n\t\tconst detailParts: string[] = [];\n\t\tif (e.Definition) {\n\t\t\tdetailParts.push(e.Definition);\n\t\t}\n\t\tif (e.ModuleName && e.Version) {\n\t\t\tdetailParts.push(`${e.ModuleName} v${e.Version}`);\n\t\t}\n\t\tlet definitionCommand = undefined;\n\t\tif (e.Definition) {\n\t\t\tlet definitionIndex = e.Definition.indexOf(' ');\n\t\t\tif (definitionIndex === -1) {\n\t\t\t\tdefinitionIndex = e.Definition.length;\n\t\t\t\tdefinitionCommand = e.Definition.substring(0, definitionIndex);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tlabel: e.Name,\n\t\t\tdetail: detailParts.join('\\n\\n'),\n\t\t\tkind: (isAlias\n\t\t\t\t? vscode.TerminalCompletionItemKind.Alias\n\t\t\t\t: vscode.TerminalCompletionItemKind.Method),\n\t\t\tdefinitionCommand,\n\t\t};\n\t});\n}\n\nasync function getCommands(options: ExecOptionsWithStringEncoding, existingCommands?: Set<string>): Promise<ICompletionResource[]> {\n\tconst output = await execHelper('Get-Command -All | Select-Object Name, CommandType, Definition, ModuleName, @{Name=\"Version\";Expression={$_.Version.ToString()}} | ConvertTo-Json', {\n\t\t...options,\n\t\tmaxBuffer: 1024 * 1024 * 100 // This is a lot of content, increase buffer size\n\t});\n\tlet json: any;\n\ttry {\n\t\tjson = JSON.parse(output);\n\t} catch (e) {\n\t\tconsole.error('Error parsing pwsh output:', e);\n\t\treturn [];\n\t}\n\treturn (\n\t\t(json as any[])\n\t\t\t.filter(e => e.CommandType !== PwshCommandType.Alias)\n\t\t\t.map(e => {\n\t\t\t\tconst detailParts: string[] = [];\n\t\t\t\tif (e.Definition) {\n\t\t\t\t\tdetailParts.push(e.Definition.trim());\n\t\t\t\t}\n\t\t\t\tif (e.ModuleName && e.Version) {\n\t\t\t\t\tdetailParts.push(`${e.ModuleName} v${e.Version}`);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tlabel: e.Name,\n\t\t\t\t\tdetail: detailParts.join('\\n\\n'),\n\t\t\t\t\tkind: pwshCommandTypeToCompletionKind.get(e.CommandType)\n\t\t\t\t};\n\t\t\t})\n\t);\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/shell/zsh.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport type { ICompletionResource } from '../types';\nimport { execHelper, getAliasesHelper } from './common';\nimport { type ExecOptionsWithStringEncoding } from 'node:child_process';\nimport { zshBuiltinsCommandDescriptionsCache } from './zshBuiltinsCache';\n\nconst commandDescriptionsCache: Map<string, { shortDescription?: string; description: string; args: string | undefined }> | undefined = parseCache(zshBuiltinsCommandDescriptionsCache);\n\nexport async function getZshGlobals(options: ExecOptionsWithStringEncoding, existingCommands?: Set<string>): Promise<(string | ICompletionResource)[]> {\n\treturn [\n\t\t...await getAliases(options),\n\t\t...await getBuiltins(options, existingCommands),\n\t];\n}\n\nasync function getAliases(options: ExecOptionsWithStringEncoding): Promise<ICompletionResource[]> {\n\tconst args = process.platform === 'darwin' ? ['-icl', 'alias'] : ['-ic', 'alias'];\n\treturn getAliasesHelper('zsh', args, /^(?<alias>[a-zA-Z0-9\\._:-]+)=(?<quote>['\"]?)(?<resolved>.+?)\\k<quote>$/, options);\n}\n\nasync function getBuiltins(\n\toptions: ExecOptionsWithStringEncoding,\n\texistingCommands?: Set<string>,\n): Promise<(string | ICompletionResource)[]> {\n\tconst compgenOutput = await execHelper('printf \"%s\\\\n\" ${(k)builtins}', options);\n\tconst filter = (cmd: string) => cmd && !existingCommands?.has(cmd);\n\tconst builtins: string[] = compgenOutput.split('\\n').filter(filter);\n\tconst completions: ICompletionResource[] = [];\n\tif (builtins.find(r => r === '.')) {\n\t\tcompletions.push({\n\t\t\tlabel: '.',\n\t\t\tdetail: 'Source a file in the current shell',\n\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t});\n\t}\n\n\n\tfor (const cmd of commandDescriptionsCache?.keys() ?? []) {\n\t\tif (typeof cmd === 'string') {\n\t\t\ttry {\n\t\t\t\tconst result = getCommandDescription(cmd);\n\t\t\t\tcompletions.push({\n\t\t\t\t\tlabel: { label: cmd, description: result?.description },\n\t\t\t\t\tdetail: result?.args,\n\t\t\t\t\tdocumentation: new vscode.MarkdownString(result?.documentation),\n\t\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t\t});\n\n\t\t\t} catch (e) {\n\t\t\t\t// Ignore errors\n\t\t\t\tconsole.log(`Error getting info for ${e}`);\n\t\t\t\tcompletions.push({\n\t\t\t\t\tlabel: cmd,\n\t\t\t\t\tkind: vscode.TerminalCompletionItemKind.Method\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn completions;\n}\n\nexport function getCommandDescription(command: string): { documentation?: string; description?: string; args?: string | undefined } | undefined {\n\tif (!zshBuiltinsCommandDescriptionsCache) {\n\t\treturn undefined;\n\t}\n\tconst result = commandDescriptionsCache?.get(command);\n\tif (result?.shortDescription) {\n\t\treturn {\n\t\t\tdescription: result.shortDescription,\n\t\t\targs: result.args,\n\t\t\tdocumentation: result.description\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\tdescription: result?.description,\n\t\t\targs: result?.args,\n\t\t\tdocumentation: result?.description\n\t\t};\n\t}\n}\n\nfunction parseCache(cache: Object): Map<string, { shortDescription?: string; description: string; args: string | undefined }> | undefined {\n\tif (!cache) {\n\t\treturn undefined;\n\t}\n\tconst result = new Map<string, { shortDescription?: string; description: string; args: string | undefined }>();\n\tfor (const [key, value] of Object.entries(cache)) {\n\t\tresult.set(key, value);\n\t}\n\treturn result;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/shell/zshBuiltinsCache.ts",
    "content": "\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const zshBuiltinsCommandDescriptionsCache = {\n  \".\": {\n    \"shortDescription\": \"Source a file\",\n    \"description\": \":   Read commands from *file* and execute them in the current shell environment.\\n\\n    If *file* does not contain a slash, or if **PATH_DIRS** is set, the shell looks in the components of **\\\\$path** to find the directory containing *file*. Files in the current directory are not read unless `**.**` appears somewhere in **\\\\$path**. If a file named `*file***.zwc**` is found, is newer than *file*, and is the compiled form (created with the **zcompile** builtin) of *file*, then commands are read from that file instead of *file*.\\n\\n    If any arguments *arg* are given, they become the positional parameters; the old positional parameters are restored when the *file* is done executing. However, if no arguments are given, the positional parameters remain those of the calling context, and no restoring is done.\\n\\n    If *file* was not found the return status is 127; if *file* was found but contained a syntax error the return status is 126; else the return status is the exit status of the last command executed.\",\n    \"args\": \". file [ arg ... ]\"\n  },\n  \":\": {\n    \"shortDescription\": \"No effect\",\n    \"description\": \":   This command does nothing, although normal argument expansions is performed which may have effects on shell parameters. A zero exit status is returned.\",\n    \"args\": \": [ arg ... ]\"\n  },\n  \"alias\": {\n    \"shortDescription\": \"Define or view aliases\",\n    \"description\": \":   For each *name* with a corresponding *value*, define an alias with that value. A trailing space in *value* causes the next word to be checked for alias expansion. If the **-g** flag is present, define a global alias; global aliases are expanded even if they do not occur in command position:\\n\\n    > % perldoc --help 2>&1 | grep 'built-in functions'\\n    >         -f   Search Perl built-in functions\\n    >     % alias -g HG='--help 2>&1 | grep'\\n    >     % perldoc HG 'built-in functions'\\n    >         -f   Search Perl built-in functions\\n\\n    If the **-s** flag is present, define a suffix alias: if the command word on a command line is in the form `*text***.***name*`, where *text* is any non-empty string, it is replaced by the text `*value* *text***.***name*`. Note that *name* is treated as a literal string, not a pattern. A trailing space in *value* is not special in this case. For example,\\n\\n    > alias -s ps='gv --'\\n\\n    will cause the command `**\\\\*.ps**` to be expanded to `**gv \\\\-- \\\\*.ps**`. As alias expansion is carried out earlier than globbing, the `**\\\\*.ps**` will then be expanded. Suffix aliases constitute a different name space from other aliases (so in the above example it is still possible to create an alias for the command **ps**) and the two sets are never listed together.\\n\\n    For each *name* with no *value*, print the value of *name*, if any. With no arguments, print all currently defined aliases other than suffix aliases. If the **-m** flag is given the arguments are taken as patterns (they should be quoted to preserve them from being interpreted as glob patterns), and the aliases matching these patterns are printed. When printing aliases and one of the **-g**, **-r** or **-s** flags is present, restrict the printing to global, regular or suffix aliases, respectively; a regular alias is one which is neither a global nor a suffix alias. Using `**+**` instead of `**-**`, or ending the option list with a single `**+**`, prevents the values of the aliases from being printed.\\n\\n    If the **-L** flag is present, then print each alias in a manner suitable for putting in a startup script. The exit status is nonzero if a *name* (with no *value*) is given for which no alias has been defined.\\n\\n    For more on aliases, include common problems, see the section ALIASING in *zshmisc*(1).\",\n    \"args\": \"alias [ {+|-}gmrsL ] [ name[=value] ... ]\"\n  },\n  \"autoload\": {\n    \"shortDescription\": \"Autoload a function\",\n    \"description\": \":   See the section `Autoloading Functions` in *zshmisc*(1) for full details. The **fpath** parameter will be searched to find the function definition when the function is first referenced.\\n\\n    If *name* consists of an absolute path, the function is defined to load from the file given (searching as usual for dump files in the given location). The name of the function is the basename (non-directory part) of the file. It is normally an error if the function is not found in the given location; however, if the option **-d** is given, searching for the function defaults to **\\\\$fpath**. If a function is loaded by absolute path, any functions loaded from it that are marked for **autoload** without an absolute path have the load path of the parent function temporarily prepended to **\\\\$fpath**.\\n\\n    If the option **-r** or **-R** is given, the function is searched for immediately and the location is recorded internally for use when the function is executed; a relative path is expanded using the value of **\\\\$PWD**. This protects against a change to **\\\\$fpath** after the call to **autoload**. With **-r**, if the function is not found, it is silently left unresolved until execution; with **-R**, an error message is printed and command processing aborted immediately the search fails, i.e. at the **autoload** command rather than at function execution..\\n\\n    The flag **-X** may be used only inside a shell function. It causes the calling function to be marked for autoloading and then immediately loaded and executed, with the current array of positional parameters as arguments. This replaces the previous definition of the function. If no function definition is found, an error is printed and the function remains undefined and marked for autoloading. If an argument is given, it is used as a directory (i.e. it does not include the name of the function) in which the function is to be found; this may be combined with the **-d** option to allow the function search to default to **\\\\$fpath** if it is not in the given location.\\n\\n    The flag **+X** attempts to load each *name* as an autoloaded function, but does *not* execute it. The exit status is zero (success) if the function was not previously defined *and* a definition for it was found. This does *not* replace any existing definition of the function. The exit status is nonzero (failure) if the function was already defined or when no definition was found. In the latter case the function remains undefined and marked for autoloading. If ksh-style autoloading is enabled, the function created will contain the contents of the file plus a call to the function itself appended to it, thus giving normal ksh autoloading behaviour on the first call to the function. If the **-m** flag is also given each *name* is treated as a pattern and all functions already marked for autoload that match the pattern are loaded.\\n\\n    With the **-t** flag, turn on execution tracing; with **-T**, turn on execution tracing only for the current function, turning it off on entry to any called functions that do not also have tracing enabled.\\n\\n    With the **-U** flag, alias expansion is suppressed when the function is loaded.\\n\\n    With the **-w** flag, the *name*s are taken as names of files compiled with the **zcompile** builtin, and all functions defined in them are marked for autoloading.\\n\\n    The flags **-z** and **-k** mark the function to be autoloaded using the zsh or ksh style, as if the option **KSH_AUTOLOAD** were unset or were set, respectively. The flags override the setting of the option at the time the function is loaded.\\n\\n    Note that the **autoload** command makes no attempt to ensure the shell options set during the loading or execution of the file have any particular value. For this, the **emulate** command can be used:\\n\\n    > emulate zsh -c 'autoload -Uz func'\\n\\n    arranges that when *func is loaded the shell is in native* **zsh** emulation, and this emulation is also applied when *func is run.*\\n\\n    Some of the functions of **autoload** *are also provided by* **functions** -u *or* **functions -U***, but* **autoload** *is a more comprehensive* interface.\",\n    \"args\": \"autoload [ {+|-}RTUXdkmrtWz ] [ -w ] [ name ... ]\"\n  },\n  \"bg\": {\n    \"shortDescription\": \"Put a job in the background\",\n    \"description\": \"*job \\\\...* **&** Put each specified *job in the background,* or the current job if none is specified.\",\n    \"args\": \"bg [ job ... ]\"\n  },\n  \"bindkey\": {\n    \"shortDescription\": \"Manipulate keymap names\",\n    \"description\": \":   See the section `Zle Builtins` in *zshzle(1).*\",\n    \"args\": \"bindkey\"\n  },\n  \"break\": {\n    \"shortDescription\": \"Exit from a loop\",\n    \"description\": \":   Exit from an enclosing **for***,* **while***,* **until***,* **select** *or* **repeat** *loop. If an arithmetic expression n* is specified, then break *n levels instead of just one.*\",\n    \"args\": \"break [ n ]\"\n  },\n  \"builtin\": {\n    \"shortDescription\": \"Executes a builtin\",\n    \"description\": \":   Executes the builtin *name, with the given args.*\",\n    \"args\": \"builtin name [ args ... ]\"\n  },\n  \"bye\": {\n    \"shortDescription\": \"Exit the shell\",\n    \"description\": \":   Same as **exit***.*\",\n    \"args\": \"bye\"\n  },\n  \"cap\": {\n    \"shortDescription\": \"Manipulating POSIX capability sets\",\n    \"description\": \":   See the section `The zsh/cap Module` in *zshmodules(1).*\",\n    \"args\": \"cap\"\n  },\n  \"cd\": {\n    \"shortDescription\": \"Change the current directory\",\n    \"description\": \"**cd** *\\\\[* **-qsLP** *\\\\] {***+***\\\\|***-***}n* Change the current directory. In the first form, change the current directory to *arg, or to the value of* **\\\\$HOME** *if* *arg is not specified. If arg is `***-***`, change to the* previous directory.\\n\\n> Otherwise, if *arg begins with a slash, attempt to change to the* directory given by *arg.*\\n>\\n> If *arg does not begin with a slash, the behaviour depends on whether* the current directory `**.***` occurs in the list of directories contained* in the shell parameter **cdpath***. If it does not, first attempt to change* to the directory *arg under the current directory, and if that fails* but **cdpath** *is set and contains at least one element attempt to change* to the directory *arg under each component of* **cdpath** *in turn until* successful. If `**.***` occurs in* **cdpath***, then* **cdpath** *is searched* strictly in order so that `**.***` is only tried at the appropriate point.*\\n>\\n> The order of testing **cdpath** *is modified if the option* **POSIX_CD** is set, as described in the documentation for the option.\\n>\\n> If no directory is found, the option **CDABLE_VARS** *is set, and a* parameter named *arg exists whose value begins with a slash, treat its* value as the directory. In that case, the parameter is added to the named directory hash table.\\n>\\n> The second form of **cd** *substitutes the string new* for the string *old in the name of the current directory,* and tries to change to this new directory.\\n>\\n> The third form of **cd** *extracts an entry from the directory* stack, and changes to that directory. An argument of the form `**+***n` identifies a stack entry by counting from the left* of the list shown by the **dirs** *command, starting with zero.* An argument of the form `**-***n` counts from the right.* If the **PUSHD_MINUS** *option is set, the meanings of `***+***`* and `**-***` in this context are swapped.* If the **POSIX_CD** *option is set, this form of* **cd** *is not recognised* and will be interpreted as the first form.\\n>\\n> If the **-q** *(quiet) option is specified, the hook function* **chpwd** and the functions in the array **chpwd_functions** *are not called.* This is useful for calls to **cd** *that do not change the environment* seen by an interactive user.\\n>\\n> If the **-s** *option is specified,* **cd** *refuses to change the current* directory if the given pathname contains symlinks. If the **-P** *option* is given or the **CHASE_LINKS** *option is set, symbolic links are resolved* to their true values. If the **-L** *option is given symbolic links are* retained in the directory (and not resolved) regardless of the state of the **CHASE_LINKS** *option.*\",\n    \"args\": \"cd [ -qsLP ] [ arg ]\\n\\ncd [ -qsLP ] old new\"\n  },\n  \"chdir\": {\n    \"shortDescription\": \"Change the current directory\",\n    \"description\": \":   Same as **cd***.*\",\n    \"args\": \"chdir\"\n  },\n  \"clone\": {\n    \"shortDescription\": \"Clone shell onto another terminal\",\n    \"description\": \":   See the section `The zsh/clone Module` in *zshmodules(1).*\",\n    \"args\": \"clone\"\n  },\n  \"command\": {\n    \"shortDescription\": \"Execute a command\",\n    \"description\": \":   The simple command argument is taken as an external command instead of a function or builtin and is executed. If the **POSIX_BUILTINS** *option* is set, builtins will also be executed but certain special properties of them are suppressed. The **-p** *flag causes a default path to be* searched instead of that in **\\\\$path***. With the* **-v** *flag,* **command** is similar to **whence** *and with* **-V***, it is equivalent to* **whence** -v*.*\\n\\n    See also the section `Precommand Modifiers` in *zshmisc(1).*\",\n    \"args\": \"command [ -pvV ] simple command\"\n  },\n  \"comparguments\": {\n    \"shortDescription\": \"Complete arguments\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"comparguments\"\n  },\n  \"compcall\": {\n    \"shortDescription\": \"Complete call\",\n    \"description\": \":   See the section `The zsh/compctl Module` in *zshmodules(1).*\",\n    \"args\": \"compcall\"\n  },\n  \"compctl\": {\n    \"shortDescription\": \"Complete control\",\n    \"description\": \":   See the section `The zsh/compctl Module` in *zshmodules(1).*\",\n    \"args\": \"compctl\"\n  },\n  \"compdescribe\": {\n    \"shortDescription\": \"Complete describe\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"compdescribe\"\n  },\n  \"compfiles\": {\n    \"shortDescription\": \"Complete files\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"compfiles\"\n  },\n  \"compgroups\": {\n    \"shortDescription\": \"Complete groups\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"compgroups\"\n  },\n  \"compquote\": {\n    \"shortDescription\": \"Complete quote\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"compquote\"\n  },\n  \"comptags\": {\n    \"shortDescription\": \"Complete tags\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"comptags\"\n  },\n  \"comptry\": {\n    \"shortDescription\": \"Complete try\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"comptry\"\n  },\n  \"compvalues\": {\n    \"shortDescription\": \"Complete values\",\n    \"description\": \":   See the section `The zsh/computil Module` in *zshmodules(1).*\",\n    \"args\": \"compvalues\"\n  },\n  \"continue\": {\n    \"shortDescription\": \"Resume the next loop iteration\",\n    \"description\": \":   Resume the next iteration of the enclosing **for***,* **while***,* **until***,* **select** *or* **repeat** *loop. If an arithmetic expression n is specified, break out of* *n-1 loops and resume at the nth enclosing loop.*\",\n    \"args\": \"continue [ n ]\"\n  },\n  \"declare\": {\n    \"shortDescription\": \"Set or display parameter attributes/values\",\n    \"description\": \":   Same as **typeset***.*\",\n    \"args\": \"declare\"\n  },\n  \"dirs\": {\n    \"shortDescription\": \"Interact with directory stack\",\n    \"description\": \"**dirs** *\\\\[* **-lpv** *\\\\]* With no arguments, print the contents of the directory stack. Directories are added to this stack with the **pushd** *command,* and removed with the **cd** *or* **popd** *commands.* If arguments are specified, load them onto the directory stack, replacing anything that was there, and push the current directory onto the stack.\\n\\n> **-c** clear the directory stack.\\n>\\n> **-l**\\n>\\n> :   print directory names in full instead of using of using **\\\\~** *expressions (see Dynamic and Static named directories in zshexpn(1)).*\\n>\\n> **-p**\\n>\\n> :   print directory entries one per line.\\n>\\n> **-v**\\n>\\n> :   number the directories in the stack when printing.\",\n    \"args\": \"dirs [ -c ] [ arg ... ]\"\n  },\n  \"disable\": {\n    \"shortDescription\": \"Disable shell features\",\n    \"description\": \":   Temporarily disable the *named hash table elements or patterns. The default* is to disable builtin commands. This allows you to use an external command with the same name as a builtin command. The **-a** *option* causes **disable** *to act on regular or global aliases. The* **-s** option causes **disable** *to act on suffix aliases. The* **-f** *option causes* **disable** *to act on shell functions. The* **-r** *options causes* **disable** *to act on reserved words. Without arguments all disabled* hash table elements from the corresponding hash table are printed. With the **-m** *flag the arguments are taken as patterns (which should be* quoted to prevent them from undergoing filename expansion), and all hash table elements from the corresponding hash table matching these patterns are disabled. Disabled objects can be enabled with the **enable** command.\\n\\n    With the option **-p***, name \\\\... refer to elements of the* shell\\\\'s pattern syntax as described in the section `Filename Generation`. Certain elements can be disabled separately, as given below.\\n\\n    Note that patterns not allowed by the current settings for the options **EXTENDED_GLOB***,* **KSH_GLOB** *and* **SH_GLOB** *are never enabled, regardless of the* setting here. For example, if **EXTENDED_GLOB** *is not active,* the pattern **\\\\^** *is ineffective even if `***disable -p \\\\\\\"\\\\^\\\\\\\"***` has* not been issued. The list below indicates any option settings that restrict the use of the pattern. It should be noted that setting **SH_GLOB** *has a wider effect than merely disabling patterns* as certain expressions, in particular those involving parentheses, are parsed differently.\\n\\n    The following patterns may be disabled; all the strings need quoting on the command line to prevent them from being interpreted immediately as patterns and the patterns are shown below in single quotes as a reminder.\\n\\n    **\\\\'?\\\\'** The pattern character **?** *wherever it occurs, including when preceding* a parenthesis with **KSH_GLOB***.*\\n\\n    **\\\\'\\\\*\\\\'**\\n\\n    :   The pattern character **\\\\*** *wherever it occurs, including recursive* globbing and when preceding a parenthesis with **KSH_GLOB***.*\\n\\n    **\\\\'\\\\[\\\\'**\\n\\n    :   Character classes.\\n\\n    **\\\\'\\\\<\\\\'** *(***NO_SH_GLOB***)*\\n\\n    :   Numeric ranges.\\n\\n    **\\\\'\\\\|\\\\'** *(***NO_SH_GLOB***)*\\n\\n    :   Alternation in grouped patterns, case statements, or KSH_GLOB parenthesised expressions.\\n\\n    **\\\\'(\\\\'** *(***NO_SH_GLOB***)*\\n\\n    :   Grouping using single parentheses. Disabling this does not disable the use of parentheses for **KSH_GLOB** *where they are introduced by a* special character, nor for glob qualifiers (use `**setopt** NO_BARE_GLOB_QUAL*` to disable glob qualifiers that use parentheses* only).\\n\\n    **\\\\'\\\\~\\\\'** *(***EXTENDED_GLOB***)*\\n\\n    :   Exclusion in the form *A***\\\\~***B.*\\n\\n    **\\\\'\\\\^\\\\'** *(***EXTENDED_GLOB***)*\\n\\n    :   Exclusion in the form *A***\\\\^***B.*\\n\\n    **\\\\'#\\\\'** *(***EXTENDED_GLOB***)*\\n\\n    :   The pattern character **\\\\#** *wherever it occurs, both for* repetition of a previous pattern and for indicating globbing flags.\\n\\n    **\\\\'?(\\\\'** *(***KSH_GLOB***)*\\n\\n    :   The grouping form **?(***\\\\...***)***. Note this is also* disabled if **\\\\'?\\\\'** *is disabled.*\\n\\n    **\\\\'\\\\*(\\\\'** *(***KSH_GLOB***)*\\n\\n    :   The grouping form **\\\\*(***\\\\...***)***. Note this is also* disabled if **\\\\'\\\\*\\\\'** *is disabled.*\\n\\n    **\\\\'+(\\\\'** *(***KSH_GLOB***)*\\n\\n    :   The grouping form **+(***\\\\...***)***.*\\n\\n    **\\\\'!(\\\\'** *(***KSH_GLOB***)*\\n\\n    :   The grouping form **!(***\\\\...***)***.*\\n\\n    **\\\\'@(\\\\'** *(***KSH_GLOB***)*\\n\\n    :   The grouping form **@(***\\\\...***)***.*\",\n    \"args\": \"disable [ -afmprs ] name ...\"\n  },\n  \"disown\": {\n    \"shortDescription\": \"Remove job from job table\",\n    \"description\": \"*job \\\\...* **&\\\\|**\\n\\n*job \\\\...* **&!** Remove the specified *jobs from the job table; the shell will* no longer report their status, and will not complain if you try to exit an interactive shell with them running or stopped. If no *job is specified, disown the current job.*\\n\\n> If the *jobs are currently stopped and the* **AUTO_CONTINUE** *option* is not set, a warning is printed containing information about how to make them running after they have been disowned. If one of the latter two forms is used, the *jobs will automatically be made running,* independent of the setting of the **AUTO_CONTINUE** *option.*\",\n    \"args\": \"disown [ job ... ]\"\n  },\n  \"echo\": {\n    \"shortDescription\": \"Write on standard output\",\n    \"description\": \":   Write each *arg on the standard output, with a space separating* each one. If the **-n** *flag is not present, print a newline at the end.* **echo** *recognizes the following escape sequences:*\\n\\n    **\\\\\\\\a**\\n\\n    :   bell character\\n\\n    **\\\\\\\\b**\\n\\n    :   backspace\\n\\n    **\\\\\\\\c**\\n\\n    :   suppress subsequent characters and final newline\\n\\n    **\\\\\\\\e**\\n\\n    :   escape\\n\\n    **\\\\\\\\f**\\n\\n    :   form feed\\n\\n    **\\\\\\\\n**\\n\\n    :   linefeed (newline)\\n\\n    **\\\\\\\\r**\\n\\n    :   carriage return\\n\\n    **\\\\\\\\t**\\n\\n    :   horizontal tab\\n\\n    **\\\\\\\\v**\\n\\n    :   vertical tab\\n\\n    **\\\\\\\\\\\\\\\\**\\n\\n    :   backslash\\n\\n    **\\\\\\\\0***NNN*\\n\\n    :   character code in octal\\n\\n    **\\\\\\\\x***NN*\\n\\n    :   character code in hexadecimal\\n\\n    **\\\\\\\\u***NNNN*\\n\\n    :   unicode character code in hexadecimal\\n\\n    **\\\\\\\\U***NNNNNNNN*\\n\\n    :   unicode character code in hexadecimal\\n\\n    The **-E** *flag, or the* **BSD_ECHO** *option, can be used to disable* these escape sequences. In the latter case, **-e** *flag can be used to* enable them.\\n\\n    Note that for standards compliance a double dash does not terminate option processing; instead, it is printed directly. However, a single dash does terminate option processing, so the first dash, possibly following options, is not printed, but everything following it is printed as an argument. The single dash behaviour is different from other shells. For a more portable way of printing text, see **printf***, and for a more controllable way of printing text within zsh,* see **print***.*\",\n    \"args\": \"echo [ -neE ] [ arg ... ]\"\n  },\n  \"echotc\": {\n    \"shortDescription\": \"Echo terminal capabilities\",\n    \"description\": \":   See the section `The zsh/termcap Module` in *zshmodules(1).*\",\n    \"args\": \"echotc\"\n  },\n  \"echoti\": {\n    \"shortDescription\": \"Echo terminal info\",\n    \"description\": \":   See the section `The zsh/terminfo Module` in *zshmodules(1).*\",\n    \"args\": \"echoti\"\n  },\n  \"emulate\": {\n    \"shortDescription\": \"Emulate a shell\",\n    \"description\": \":   Without any argument print current emulation mode.\\n\\n    With single argument set up zsh options to emulate the specified shell as much as possible. **csh** *will never be fully emulated.* If the argument is not one of the shells listed above, **zsh** will be used as a default; more precisely, the tests performed on the argument are the same as those used to determine the emulation at startup based on the shell name, see the section COMPATIBILITY in *zsh(1)* . In addition to setting shell options, the command also restores the pristine state of pattern enables, as if all patterns had been enabled using **enable -p***.*\\n\\n    If the **emulate** *command occurs inside a function that has been* marked for execution tracing with **functions -t** *then the* **xtrace** option will be turned on regardless of emulation mode or other options. Note that code executed inside the function by the **.***,* **source***, or* **eval** *commands is not considered to be running directly from the* function, hence does not provoke this behaviour.\\n\\n    If the **-R** *switch is given, all settable options* are reset to their default value corresponding to the specified emulation mode, except for certain options describing the interactive environment; otherwise, only those options likely to cause portability problems in scripts and functions are altered. If the **-L** *switch is given,* the options **LOCAL_OPTIONS***,* **LOCAL_PATTERNS** *and* **LOCAL_TRAPS** will be set as well, causing the effects of the **emulate** *command and any* **setopt***,* **disable -p** *or* **enable -p***, and* **trap** *commands to be local to* the immediately surrounding shell function, if any; normally these options are turned off in all emulation modes except **ksh***. The* **-L** *switch is mutually exclusive with the* use of **-c** *in flags.*\\n\\n    If there is a single argument and the **-l** *switch is given, the* options that would be set or unset (the latter indicated with the prefix `**no***`) are listed.* **-l** *can be combined with* **-L** *or* **-R** *and* the list will be modified in the appropriate way. Note the list does not depend on the current setting of options, i.e. it includes all options that may in principle change, not just those that would actually change.\\n\\n    The *flags may be any of the invocation-time flags described in* the section INVOCATION in *zsh(1),* except that `**-o EMACS***` and `***-o VI***` may not be used. Flags such* as `**+r***`/`***+o RESTRICTED***` may be prohibited in some circumstances.*\\n\\n    If **-c** *arg appears in flags, arg is evaluated while the* requested emulation is temporarily in effect. In this case the emulation mode and all options are restored to their previous values before **emulate** *returns. The* **-R** *switch may precede the name of the shell* to emulate; note this has a meaning distinct from including **-R** *in* *flags.*\\n\\n    Use of **-c** *enables `sticky` emulation mode for functions defined* within the evaluated expression: the emulation mode is associated thereafter with the function so that whenever the function is executed the emulation (respecting the **-R** *switch, if present) and all* options are set (and pattern disables cleared) before entry to the function, and the state is restored after exit. If the function is called when the sticky emulation is already in effect, either within an `**emulate** *shell* **-c***` expression or* within another function with the same sticky emulation, entry and exit from the function do not cause options to be altered (except due to standard processing such as the **LOCAL_OPTIONS** *option). This also* applies to functions marked for autoload within the sticky emulation; the appropriate set of options will be applied at the point the function is loaded as well as when it is run.\\n\\n    For example:\\n\\n    > emulate sh -c 'fni() { setopt cshnullglob; }\\n    >     fno() { fni; }'\\n    >     fno\\n\\n    The two functions **fni** *and* **fno** *are defined with sticky* **sh** emulation. **fno** *is then executed, causing options associated* with emulations to be set to their values in **sh***.* **fno** *then* calls **fni***; because* **fni** *is also marked for sticky* **sh** emulation, no option changes take place on entry to or exit from it. Hence the option **cshnullglob***, turned off by* **sh** *emulation, will* be turned on within **fni** *and remain on return to* **fno***. On exit* from **fno***, the emulation mode and all options will be restored to the* state they were in before entry to the temporary emulation.\\n\\n    The documentation above is typically sufficient for the intended purpose of executing code designed for other shells in a suitable environment. More detailed rules follow.\\n\\n    1\\\\.\\n\\n    :   The sticky emulation environment provided by `**emulate** *shell* **-c***` is identical to that provided by entry to* a function marked for sticky emulation as a consequence of being defined in such an environment. Hence, for example, the sticky emulation is inherited by subfunctions defined within functions with sticky emulation.\\n\\n    2\\\\.\\n\\n    :   No change of options takes place on entry to or exit from functions that are not marked for sticky emulation, other than those that would normally take place, even if those functions are called within sticky emulation.\\n\\n    3\\\\.\\n\\n    :   No special handling is provided for functions marked for **autoload** *nor for functions present in wordcode created by* the **zcompile** *command.*\\n\\n    4\\\\.\\n\\n    :   The presence or absence of the **-R** *switch to* **emulate** corresponds to different sticky emulation modes, so for example `**emulate sh -c***`, `***emulate -R sh -c***` and `***emulate csh -c***`* are treated as three distinct sticky emulations.\\n\\n    5\\\\.\\n\\n    :   Difference in shell options supplied in addition to the basic emulation also mean the sticky emulations are different, so for example `**emulate zsh -c***` and `***emulate zsh -o cbases -c***` are* treated as distinct sticky emulations.\",\n    \"args\": \"emulate [ -lLR ] [ {zsh|sh|ksh|csh} [ flags ... ] ]\"\n  },\n  \"enable\": {\n    \"shortDescription\": \"Enable shell features\",\n    \"description\": \":   Enable the *named hash table elements, presumably disabled* earlier with **disable***. The default is to enable builtin commands.* The **-a** *option causes* **enable** *to act on regular or global aliases.* The **-s** *option causes* **enable** *to act on suffix aliases.* The **-f** *option causes* **enable** *to act on shell functions. The* **-r** option causes **enable** *to act on reserved words. Without arguments* all enabled hash table elements from the corresponding hash table are printed. With the **-m** *flag the arguments are taken as patterns* (should be quoted) and all hash table elements from the corresponding hash table matching these patterns are enabled. Enabled objects can be disabled with the **disable** *builtin command.*\\n\\n    **enable -p** *reenables patterns disabled with* **disable -p***. Note* that it does not override globbing options; for example, `**enable -p** \\\\\\\"\\\\~\\\\\\\"*` does not cause the pattern character* **\\\\~** *to be active unless* the **EXTENDED_GLOB** *option is also set. To enable all possible* patterns (so that they may be individually disabled with **disable -p***),* use `**setopt EXTENDED_GLOB KSH_GLOB NO_SH_GLOB***`.*\",\n    \"args\": \"enable [ -afmprs ] name ...\"\n  },\n  \"eval\": {\n    \"shortDescription\": \"Execute arguments in shell\",\n    \"description\": \":   Read the arguments as input to the shell and execute the resulting command(s) in the current shell process. The return status is the same as if the commands had been executed directly by the shell; if there are no *args or they contain no commands (i.e. are* an empty string or whitespace) the return status is zero.\",\n    \"args\": \"eval [ arg ... ]\"\n  },\n  \"exec\": {\n    \"shortDescription\": \"Replace shell with command\",\n    \"description\": \":   Replace the current shell with *command rather than forking.* If *command is a shell builtin command or a shell function,* the shell executes it, and exits when the command is complete.\\n\\n    With **-c** *clear the environment; with* **-l** *prepend* **-** *to the* **argv\\\\[0\\\\]** *string of the command executed (to simulate a login shell);* with **-a** *argv0 set the* **argv\\\\[0\\\\]** *string of the command* executed. See the section `Precommand Modifiers` in *zshmisc(1).*\\n\\n    If the option **POSIX_BUILTINS** *is set, command is never* interpreted as a shell builtin command or shell function. This means further precommand modifiers such as **builtin** *and* **noglob** *are also not interpreted within the shell. Hence* *command is always found by searching the command path.*\\n\\n    If *command is omitted but any redirections are specified,* then the redirections will take effect in the current shell.\",\n    \"args\": \"exec [ -cl ] [ -a argv0 ] [ command [ arg ... ] ]\"\n  },\n  \"exit\": {\n    \"shortDescription\": \"Exit the shell\",\n    \"description\": \":   Exit the shell with the exit status specified by an arithmetic expression *n; if none* is specified, use the exit status from the last command executed. An EOF condition will also cause the shell to exit, unless the **IGNORE_EOF** *option is set.*\\n\\n    See notes at the end of the section JOBS in *zshmisc(1) for some possibly unexpected interactions* of the **exit** *command with jobs.*\",\n    \"args\": \"exit [ n ]\"\n  },\n  \"export\": {\n    \"shortDescription\": \"Export to environment\",\n    \"description\": \":   The specified *names are marked for automatic export* to the environment of subsequently executed commands. Equivalent to **typeset -gx***.* If a parameter specified does not already exist, it is created in the global scope.\",\n    \"args\": \"export [ name[=value] ... ]\"\n  },\n  \"false\": {\n    \"shortDescription\": \"Return exit status of 1\",\n    \"description\": \":   Do nothing and return an exit status of 1.\",\n    \"args\": \"false [ arg ... ]\"\n  },\n  \"fc\": {\n    \"shortDescription\": \"Fix command\",\n    \"description\": \"**fc** **-ARWI** *\\\\[ filename \\\\]* The **fc** *command controls the interactive history mechanism. Note* that reading and writing of history options is only performed if the shell is interactive. Usually this is detected automatically, but it can be forced by setting the **interactive** *option when starting the* shell.\\n\\n> The first two forms of this command select a range of events from *first to last from the history list. The arguments first* and *last may be specified as a number or as a string. A negative* number is used as an offset to the current history event number. A string specifies the most recent event beginning with the given string. All substitutions *old***=***new, if any, are then performed on the* text of the events.\\n>\\n> The range of events selected by numbers can be narrowed further by the following flags.\\n>\\n> **-I**\\n>\\n> :   restricts to only internal events (not from **\\\\$HISTFILE***)*\\n>\\n> **-L**\\n>\\n> :   restricts to only local events (not from other shells, see **SHARE_HISTORY** *in zshoptions(1) \\\\-- note that* **\\\\$HISTFILE** *is* considered local when read at startup)\\n>\\n> **-m**\\n>\\n> :   takes the first argument as a pattern (which should be quoted) and only the history events matching this pattern are considered\\n>\\n> If *first is not specified, it will be set to -1 (the most recent* event), or to -16 if the **-l** *flag is given.* If *last is not specified, it will be set to first,* or to -1 if the **-l** *flag is given.* However, if the current event has added entries to the history with `**print -s***` or `***fc -R***`, then the default last for* **-l** includes all new history entries since the current event began.\\n>\\n> When the **-l** *flag is given, the resulting events are listed on* standard output. Otherwise the editor program specified by **-e** *ename* is invoked on a file containing these history events. If **-e** *is not given, the* value of the parameter **FCEDIT** *is used; if that is not set the value of* the parameter **EDITOR** *is used; if that is not set a builtin default,* usually `**vi***` is used. If ename is `***-***`, no editor is invoked.* When editing is complete, the edited command is executed.\\n>\\n> The flag `**-s***` is equivalent to `***-e -***`.* The flag **-r** *reverses the order of the events and the* flag **-n** *suppresses event numbers when listing.*\\n>\\n> Also when listing,\\n>\\n> **-d**\\n>\\n> :   prints timestamps for each event\\n>\\n> **-f**\\n>\\n> :   prints full time-date stamps in the US `*MM***/***DD***/***YY hh***:***mm` format*\\n>\\n> **-E**\\n>\\n> :   prints full time-date stamps in the European `*dd***.***mm***.***yyyy hh***:***mm` format*\\n>\\n> **-i**\\n>\\n> :   prints full time-date stamps in ISO8601 `*yyyy***-***mm***-***dd hh***:***mm` format*\\n>\\n> **-t** *fmt*\\n>\\n> :   prints time and date stamps in the given format; *fmt is formatted with the strftime function with the zsh extensions* described for the **%D{***string***}** *prompt format in* the section EXPANSION OF PROMPT SEQUENCES in *zshmisc(1). The resulting formatted string must be* no more than 256 characters or will not be printed\\n>\\n> <!-- -->\\n>\\n> **-D**\\n>\\n> :   prints elapsed times; may be combined with one of the options above\\n>\\n> `**fc -p***` pushes the current history list onto a stack and switches to a* new history list. If the **-a** *option is also specified, this history list* will be automatically popped when the current function scope is exited, which is a much better solution than creating a trap function to call `**fc -P***`* manually. If no arguments are specified, the history list is left empty, **\\\\$HISTFILE** *is unset, and* **\\\\$HISTSIZE** *&* **\\\\$SAVEHIST** *are set to their* default values. If one argument is given, **\\\\$HISTFILE** *is set to that* filename, **\\\\$HISTSIZE** *&* **\\\\$SAVEHIST** *are left unchanged, and the history* file is read in (if it exists) to initialize the new list. If a second argument is specified, **\\\\$HISTSIZE** *&* **\\\\$SAVEHIST** *are instead set to the* single specified numeric value. Finally, if a third argument is specified, **\\\\$SAVEHIST** *is set to a separate value from* **\\\\$HISTSIZE***. You are free to* change these environment values for the new history list however you desire in order to manipulate the new history list.\\n>\\n> `**fc -P***` pops the history list back to an older list saved by `***fc -p***`.* The current list is saved to its **\\\\$HISTFILE** *before it is destroyed* (assuming that **\\\\$HISTFILE** *and* **\\\\$SAVEHIST** *are set appropriately, of* course). The values of **\\\\$HISTFILE***,* **\\\\$HISTSIZE***, and* **\\\\$SAVEHIST** *are* restored to the values they had when `**fc -p***` was called. Note that this* restoration can conflict with making these variables \\\\\\\"local\\\\\\\", so your best bet is to avoid local declarations for these variables in functions that use `**fc -p***`. The one other guaranteed-safe combination is declaring these* variables to be local at the top of your function and using the automatic option (**-a***) with `***fc -p***`. Finally, note that it is legal to manually* pop a push marked for automatic popping if you need to do so before the function exits.\\n>\\n> `**fc -R***` reads the history from the given file,* `**fc -W***` writes the history out to the given file,* and `**fc -A***` appends the history out to the given file.* If no filename is specified, the **\\\\$HISTFILE** *is assumed.* If the **-I** *option is added to* **-R***, only those events that are* not already contained within the internal history list are added. If the **-I** *option is added to* **-A** *or* **-W***, only those* events that are new since last incremental append/write to the history file are appended/written. In any case, the created file will have no more than **\\\\$SAVEHIST** entries.\",\n    \"args\": \"fc -P\"\n  },\n  \"fg\": {\n    \"shortDescription\": \"Put a job in the foreground\",\n    \"description\": \"*job \\\\...* Bring each specified *job in turn to the foreground.* If no *job is specified, resume the current job.*\",\n    \"args\": \"fg [ job ... ]\"\n  },\n  \"float\": {\n    \"shortDescription\": \"Floating point arithmetic\",\n    \"description\": \":   Equivalent to **typeset -E***, except that options irrelevant to floating* point numbers are not permitted.\",\n    \"args\": \"float [ {+|-}Hghlprtux ] [ {+|-}EFLRZ [ n ] ] [ name[=value] ... ]\"\n  },\n  \"functions\": {\n    \"shortDescription\": \"List functions\",\n    \"description\": \"**functions -c** *oldfn newfn*\\n\\n**functions -M** *\\\\[***-s***\\\\] mathfn \\\\[ min \\\\[ max \\\\[ shellfn \\\\] \\\\] \\\\]*\\n\\n**functions -M** *\\\\[* **-m** *pattern \\\\... \\\\]*\\n\\n**functions +M** *\\\\[* **-m** *\\\\] mathfn \\\\...* Equivalent to **typeset -f***, with the exception of the* **-c***,* **-x***,* **-M** *and* **-W** *options. For* **functions -u** *and* **functions -U***,* see **autoload***, which provides additional options. For* **functions -t** and **functions -T***, see* **typeset -f***.*\\n\\n> The **-x** *option indicates that any functions output will have* each leading tab for indentation, added by the shell to show syntactic structure, expanded to the given number *num of spaces. num* can also be 0 to suppress all indentation.\\n>\\n> The **-W** *option turns on the option* **WARN_NESTED_VAR** *for the named* function or functions only. The option is turned off at the start of nested functions (apart from anonoymous functions) unless the called function also has the **-W** *attribute.*\\n>\\n> The **-c** *option causes oldfn to be copied to newfn. The* copy is efficiently handled internally by reference counting. If *oldfn was marked for autoload it is first loaded and if this* fails the copy fails. Either function may subsequently be redefined without affecting the other. A typical idiom is that *oldfn is the* name of a library shell function which is then redefined to call **newfn***, thereby installing a modified version of the function.*\\n>\\n> *The* **-M** *and* **+M** *flags*\\n>\\n> Use of the **-M** *option may not be combined with any of the options* handled by **typeset -f***.*\\n>\\n> **functions -M** *mathfn defines mathfn as the name of* a mathematical function recognised in all forms of arithmetical expressions; see the section `Arithmetic Evaluation` in *zshmisc(1). By default mathfn may take* any number of comma-separated arguments. If *min is given,* it must have exactly *min args; if min and max are* both given, it must have at least *min and at most max* args. *max may be -1 to indicate that there is no upper limit.*\\n>\\n> By default the function is implemented by a shell function of the same name; if *shellfn is specified it gives the name of the corresponding* shell function while *mathfn remains the name used in arithmetical* expressions. The name of the function in **\\\\$0** *is mathfn (not* *shellfn as would usually be the case), provided the option* **FUNCTION_ARGZERO** *is in effect. The positional parameters in the shell* function correspond to the arguments of the mathematical function call.\\n>\\n> The result of the last arithmetical expression evaluated inside the shell function gives the result of the mathematical function. This is not limited to arithmetic substitutions of the form **\\\\$((***\\\\...***))***,* but also includes arithmetical expressions evaluated in any other way, including by the **let** *builtin,* by **((***\\\\...***))** *statements,* and even by the **return** *builtin* and by array subscripts. Therefore, care must be taken not to use syntactical constructs that perform arithmetic evaluation after evaluating what is to be the result of the function. For example:\\n>\\n> > # WRONG\\n> >     zmath_cube() {\\n> >       (( $1 * $1 * $1 ))\\n> >       return 0\\n> >     }\\n> >     functions -M cube 1 1 zmath_cube\\n> >     print $(( cube(3) ))\\n>\\n> This will print `**0***` because of the* **return***.*\\n>\\n> Commenting the **return** *out would lead to a different problem: the* **((***\\\\...***))** *statement would become* the last statement in the function, so the *return status (***\\\\$?***) of the* function would be non-zero (indicating failure) whenever the *arithmetic* result *of the function would happen to be zero (numerically):*\\n>\\n> > # WRONG\\n> >     zmath_cube() {\\n> >       (( $1 * $1 * $1 ))\\n> >     }\\n> >     functions -M cube 1 1 zmath_cube\\n> >     print $(( cube(0) ))\\n>\\n> Instead, the **true** *builtin can be used:*\\n>\\n> > # RIGHT\\n> >     zmath_cube() {\\n> >       (( $1 * $1 * $1 ))\\n> >       true\\n> >     }\\n> >     functions -M cube 1 1 zmath_cube\\n> >     print $(( cube(3) ))\\n>\\n> If the additional option **-s** *is given to* **functions -M***, the* argument to the function is a single string: anything between the opening and matching closing parenthesis is passed to the function as a single argument, even if it includes commas or white space. The minimum and maximum argument specifiers must therefore be 1 if given. An empty argument list is passed as a zero-length string. Thus, the following string function takes a single argument, including the commas, and prints 11:\\n>\\n> > stringfn() { (( $#1 )); true }\\n> >     functions -Ms stringfn\\n> >     print $(( stringfn(foo,bar,rod) ))\\n>\\n> **functions -M** *with no arguments lists all such user-defined functions in* the same form as a definition. With the additional option **-m** *and* a list of arguments, all functions whose *mathfn matches one of* the pattern arguments are listed.\\n>\\n> **function +M** *removes the list of mathematical functions; with the* additional option **-m** *the arguments are treated as patterns and* all functions whose *mathfn matches the pattern are removed. Note* that the shell function implementing the behaviour is not removed (regardless of whether its name coincides with *mathfn).*\",\n    \"args\": \"functions [ {+|-}UkmtTuWz ] [ -x num ] [ name ... ]\"\n  },\n  \"getcap\": {\n    \"shortDescription\": \"Get capabilities\",\n    \"description\": \":   See the section `The zsh/cap Module` in *zshmodules(1).*\",\n    \"args\": \"getcap\"\n  },\n  \"getln\": {\n    \"shortDescription\": \"Get line from buffer\",\n    \"description\": \":   Read the top value from the buffer stack and put it in the shell parameter *name. Equivalent to* **read -zr***.*\",\n    \"args\": \"getln [ -AclneE ] name ...\"\n  },\n  \"getopts\": {\n    \"shortDescription\": \"Parse positional parameters\",\n    \"description\": \":   Checks the *args for legal options. If the args are omitted,* use the positional parameters. A valid option argument begins with a `**+***` or a `***-***`. An argument not beginning with* a `**+***` or a `***-***`, or the argument `***--***`, ends the options.* Note that a single `**-***` is not considered a valid option argument.* *optstring contains the letters that* **getopts** recognizes. If a letter is followed by a `**:***`, that option* requires an argument. The options can be separated from the argument by blanks.\\n\\n    Each time it is invoked, **getopts** *places the option letter it finds* in the shell parameter *name, prepended with a `***+***` when* *arg begins with a `***+***`. The index of the next arg* is stored in **OPTIND***. The option argument, if any,* is stored in **OPTARG***.*\\n\\n    The first option to be examined may be changed by explicitly assigning to **OPTIND***.* **OPTIND** *has an initial value of* **1***, and is* normally set to **1** *upon entry to a shell function and restored* upon exit. (The **POSIX_BUILTINS** *option disables this, and also changes* the way the value is calculated to match other shells.) **OPTARG** is not reset and retains its value from the most recent call to **getopts***. If either of* **OPTIND** *or* **OPTARG** *is explicitly* unset, it remains unset, and the index or option argument is not stored. The option itself is still stored in *name in this case.*\\n\\n    A leading `**:***` in optstring causes* **getopts** *to store the* letter of any invalid option in **OPTARG***, and to set name to* `**?***` for an unknown option and to `***:***` when a required argument is* missing. Otherwise, **getopts** *sets name to `***?***` and prints* an error message when an option is invalid. The exit status is nonzero when there are no more options.\",\n    \"args\": \"getopts optstring name [ arg ... ]\"\n  },\n  \"hash\": {\n    \"shortDescription\": \"Remember command locations\",\n    \"description\": \":   **hash** *can be used to directly modify the contents of the command* hash table, and the named directory hash table. Normally one would modify these tables by modifying one\\\\'s **PATH** (for the command hash table) or by creating appropriate shell parameters (for the named directory hash table). The choice of hash table to work on is determined by the **-d** *option;* without the option the command hash table is used, and with the option the named directory hash table is used.\\n\\n    A command *name starting with a* **/** *is never hashed, whether by* explicit use of the **hash** *command or otherwise. Such a command* is always found by direct look up in the file system.\\n\\n    Given no arguments, and neither the **-r** *or* **-f** *options,* the selected hash table will be listed in full.\\n\\n    The **-r** *option causes the selected hash table to be emptied.* It will be subsequently rebuilt in the normal fashion. The **-f** *option causes the selected hash table to be fully* rebuilt immediately. For the command hash table this hashes all the absolute directories in the **PATH***,* and for the named directory hash table this adds all users\\\\' home directories. These two options cannot be used with any arguments.\\n\\n    The **-m** *option causes the arguments to be taken as patterns* (which should be quoted) and the elements of the hash table matching those patterns are printed. This is the only way to display a limited selection of hash table elements.\\n\\n    For each *name with a corresponding value, put `name` in* the selected hash table, associating it with the pathname `*value`.* In the command hash table, this means that whenever `*name` is used as a command argument, the shell will try* to execute the file given by `*value`.* In the named directory hash table, this means that `*value` may be referred to as `***\\\\~***name`.*\\n\\n    For each *name with no* corresponding *value, attempt to add name to the hash table,* checking what the appropriate **value** *is in the normal manner for* that hash table. If an appropriate **value** *can\\\\'t be found, then* the hash table will be unchanged.\\n\\n    The **-v** *option causes hash table entries to be listed as they are* added by explicit specification. If has no effect if used with **-f***.*\\n\\n    If the **-L** *flag is present, then each hash table entry is printed in* the form of a call to hash.\",\n    \"args\": \"hash [ -Ldfmrv ] [ name[=value] ] ...\"\n  },\n  \"history\": {\n    \"shortDescription\": \"Command history\",\n    \"description\": \":   Same as **fc -l***.*\",\n    \"args\": \"history\"\n  },\n  \"integer\": {\n    \"shortDescription\": \"Integer arithmetic\",\n    \"description\": \":   Equivalent to **typeset -i***, except that options irrelevant to* integers are not permitted.\",\n    \"args\": \"integer [ {+|-}Hghlprtux ] [ {+|-}LRZi [ n ] ] [ name[=value] ... ]\"\n  },\n  \"jobs\": {\n    \"shortDescription\": \"List active jobs\",\n    \"description\": \"**jobs -Z** *string* Lists information about each given job, or all jobs if *job is omitted. The* **-l** *flag lists process* IDs, and the **-p** *flag lists process groups.* If the **-r** *flag is specified only running jobs will be listed* and if the **-s** *flag is given only stopped jobs are shown.* If the **-d** *flag is given, the directory from which the job was* started (which may not be the current directory of the job) will also be shown.\\n\\n> The **-Z** *option replaces the shell\\\\'s argument and environment space with* the given string, truncated if necessary to fit. This will normally be visible in **ps** *(ps(1)) listings. This feature is typically* used by daemons, to indicate their state.\\n>\\n> Full job control is only available in the top-level interactive shell, not in commands run in the left hand side of pipelines or within the **(***\\\\...***)** *construct. However, a snapshot* of the job state at that point is taken, so it is still possible to use the **jobs** *builtin, or any parameter providing job information.* This gives information about the state of jobs at the point the subshell was created. If background processes are created within the subshell, then instead information about those processes is provided.\\n>\\n> For example,\\n>\\n> > sleep 10 &    # Job in background\\n> >     (             # Shell forks\\n> >     jobs          # Shows information about \\\"sleep 10 &\\\"\\n> >     sleep 5 &     # Process in background (no job control)\\n> >     jobs          # Shows information about \\\"sleep 5 &\\\"\\n> >     )\",\n    \"args\": \"jobs [ -dlprs ] [ job ... ]\"\n  },\n  \"kill\": {\n    \"shortDescription\": \"Send a signal to a process\",\n    \"description\": \"**kill** **-l** *\\\\[ sig \\\\... \\\\]* Sends either **SIGTERM** *or the specified signal to the given* jobs or processes. Signals are given by number or by names, with or without the `**SIG***`* prefix. If the signal being sent is not `**KILL***` or `***CONT***`, then the job* will be sent a `**CONT***` signal if it is stopped.* The argument *job can be the process ID of a job* not in the job list. In the second form, **kill -l***, if sig is not* specified the signal names are listed. Otherwise, for each *sig that is a name, the corresponding signal number is* listed. For each *sig that is a signal number or a number* representing the exit status of a process which was terminated or stopped by a signal the name of the signal is printed.\\n\\n> On some systems, alternative signal names are allowed for a few signals. Typical examples are **SIGCHLD** *and* **SIGCLD** *or* **SIGPOLL** *and* **SIGIO***, assuming they correspond to the same signal number.* **kill** -l *will only list the preferred form, however* **kill -l** *alt will* show if the alternative form corresponds to a signal number. For example, under Linux **kill -l IO** *and* **kill -l POLL** *both output 29, hence* **kill -IO** *and* **kill -POLL** *have the same effect.*\\n>\\n> Many systems will allow process IDs to be negative to kill a process group or zero to kill the current process group.\",\n    \"args\": \"kill [ -s signal_name | -n signal_number | -sig ] job ...\"\n  },\n  \"let\": {\n    \"shortDescription\": \"Evaluate arithmetic expression\",\n    \"description\": \":   Evaluate each *arg as an arithmetic expression.* See the section `Arithmetic Evaluation` in *zshmisc(1)* for a description of arithmetic expressions. The exit status is 0 if the value of the last expression is nonzero, 1 if it is zero, and 2 if an error occurred.\",\n    \"args\": \"let arg ...\"\n  },\n  \"limit\": {\n    \"shortDescription\": \"Set or display resource limits\",\n    \"description\": \":   Set or display resource limits. Unless the **-s** *flag is given,* the limit applies only the children of the shell. If **-s** *is* given without other arguments, the resource limits of the current shell is set to the previously set resource limits of the children.\\n\\n    If *limit is not specified, print the current limit placed* on *resource, otherwise* set the limit to the specified value. If the **-h** *flag* is given, use hard limits instead of soft limits. If no *resource is given, print all limits.*\\n\\n    When looping over multiple resources, the shell will abort immediately if it detects a badly formed argument. However, if it fails to set a limit for some other reason it will continue trying to set the remaining limits.\\n\\n    *resource can be one of:*\\n\\n    **addressspace**\\n\\n    :   Maximum amount of address space used.\\n\\n    **aiomemorylocked**\\n\\n    :   Maximum amount of memory locked in RAM for AIO operations.\\n\\n    **aiooperations**\\n\\n    :   Maximum number of AIO operations.\\n\\n    **cachedthreads**\\n\\n    :   Maximum number of cached threads.\\n\\n    **coredumpsize**\\n\\n    :   Maximum size of a core dump.\\n\\n    **cputime**\\n\\n    :   Maximum CPU seconds per process.\\n\\n    **datasize**\\n\\n    :   Maximum data size (including stack) for each process.\\n\\n    **descriptors**\\n\\n    :   Maximum value for a file descriptor.\\n\\n    **filesize**\\n\\n    :   Largest single file allowed.\\n\\n    **kqueues**\\n\\n    :   Maximum number of kqueues allocated.\\n\\n    **maxproc**\\n\\n    :   Maximum number of processes.\\n\\n    **maxpthreads**\\n\\n    :   Maximum number of threads per process.\\n\\n    **memorylocked**\\n\\n    :   Maximum amount of memory locked in RAM.\\n\\n    **memoryuse**\\n\\n    :   Maximum resident set size.\\n\\n    **msgqueue**\\n\\n    :   Maximum number of bytes in POSIX message queues.\\n\\n    **posixlocks**\\n\\n    :   Maximum number of POSIX locks per user.\\n\\n    **pseudoterminals**\\n\\n    :   Maximum number of pseudo-terminals.\\n\\n    **resident**\\n\\n    :   Maximum resident set size.\\n\\n    **sigpending**\\n\\n    :   Maximum number of pending signals.\\n\\n    **sockbufsize**\\n\\n    :   Maximum size of all socket buffers.\\n\\n    **stacksize**\\n\\n    :   Maximum stack size for each process.\\n\\n    **swapsize**\\n\\n    :   Maximum amount of swap used.\\n\\n    **vmemorysize**\\n\\n    :   Maximum amount of virtual memory.\\n\\n    Which of these resource limits are available depends on the system. *resource can be abbreviated to any unambiguous prefix. It* can also be an integer, which corresponds to the integer defined for the resource by the operating system.\\n\\n    If argument corresponds to a number which is out of the range of the resources configured into the shell, the shell will try to read or write the limit anyway, and will report an error if this fails. As the shell does not store such resources internally, an attempt to set the limit will fail unless the **-s** *option is present.*\\n\\n    *limit is a number, with an optional scaling factor, as follows:*\\n\\n    *n***h**\\n\\n    :   hours\\n\\n    *n***k**\\n\\n    :   kilobytes (default)\\n\\n    *n***m**\\n\\n    :   megabytes or minutes\\n\\n    *n***g**\\n\\n    :   gigabytes\\n\\n    \\\\[*mm***:***\\\\]ss*\\n\\n    :   minutes and seconds\\n\\n    The **limit** *command is not made available by default when the* shell starts in a mode emulating another shell. It can be made available with the command `**zmodload -F zsh/rlimits b:limit***`.*\",\n    \"args\": \"limit [ -hs ] [ resource [ limit ] ] ...\"\n  },\n  \"local\": {\n    \"shortDescription\": \"Create a local variable\",\n    \"description\": \":   Same as **typeset***, except that the options* **-g***, and* **-f** *are not permitted. In this case the* **-x** *option does not force* the use of **-g***, i.e. exported variables will be local to functions.*\",\n    \"args\": \"local [ {+|-}AHUahlprtux ] [ {+|-}EFLRZi [ n ] ] [ name[=value] ... ]\"\n  },\n  \"logout\": {\n    \"shortDescription\": \"Exit the shell\",\n    \"description\": \":   Same as **exit***, except that it only works in a login shell.*\",\n    \"args\": \"logout [ n ]\"\n  },\n  \"noglob\": {\n    \"shortDescription\": \"Disable filename expansion\",\n    \"description\": \":   See the section `Precommand Modifiers` in *zshmisc(1).*\",\n    \"args\": \"noglob simple command\"\n  },\n  \"popd\": {\n    \"shortDescription\": \"Remove directory from stack\",\n    \"description\": \":   Remove an entry from the directory stack, and perform a **cd** *to* the new top directory. With no argument, the current top entry is removed. An argument of the form `**+***n` identifies a stack* entry by counting from the left of the list shown by the **dirs** *command,* starting with zero. An argument of the form **-***n counts from the right.* If the **PUSHD_MINUS** *option is set, the meanings of `***+***` and* `**-***` in this context are swapped.*\\n\\n    If the **-q** *(quiet) option is specified, the hook function* **chpwd** and the functions in the array **\\\\$chpwd_functions** *are not called,* and the new directory stack is not printed. This is useful for calls to **popd** *that do not change the environment seen by an interactive user.*\",\n    \"args\": \"popd [ -q ] [ {+|-}n ]\"\n  },\n  \"print\": {\n    \"shortDescription\": \"Print arguments\",\n    \"description\": \"*\\\\[* **-v** *name \\\\] \\\\[* **-xX** *tabstop \\\\] \\\\[* **-R** *\\\\[* **-en** *\\\\]\\\\] \\\\[ arg \\\\... \\\\]* With the `**-f***` option the arguments are printed as described by* **printf***.* With no flags or with the flag `**-***`, the arguments are printed on* the standard output as described by **echo***, with the following differences:* the escape sequence `**\\\\\\\\M-***x` (or `***\\\\\\\\M***x`) metafies the character* *x (sets the highest bit),* `**\\\\\\\\C-***x` (or `***\\\\\\\\C***x`) produces a control character* (`**\\\\\\\\C-@***` and `***\\\\\\\\C-?***` give the characters NULL and delete),* a character code in octal is represented by `**\\\\\\\\***NNN`* (instead of `**\\\\\\\\0***NNN`),* and `**\\\\\\\\E***` is a synonym for `***\\\\\\\\e***`.* Finally, if not in an escape sequence, `**\\\\\\\\***` escapes the following character and is not printed.*\\n\\n> **-a** Print arguments with the column incrementing first. Only useful with the **-c** *and* **-C** *options.*\\n>\\n> **-b**\\n>\\n> :   Recognize all the escape sequences defined for the **bindkey** *command,* see the section `Zle Builtins` in *zshzle(1).*\\n>\\n> **-c**\\n>\\n> :   Print the arguments in columns. Unless **-a** *is also given, arguments are* printed with the row incrementing first.\\n>\\n> **-C** *cols*\\n>\\n> :   Print the arguments in *cols columns. Unless* **-a** *is also given,* arguments are printed with the row incrementing first.\\n>\\n> **-D**\\n>\\n> :   Treat the arguments as paths, replacing directory prefixes with **\\\\~** expressions corresponding to directory names, as appropriate.\\n>\\n> **-i**\\n>\\n> :   If given together with **-o** *or* **-O***, sorting is performed* case-independently.\\n>\\n> **-l**\\n>\\n> :   Print the arguments separated by newlines instead of spaces. Note: if the list of arguments is empty, **print -l** *will still output one empty* line. To print a possibly-empty list of arguments one per line, use **print -C1***, as in `***print -rC1 \\\\-- \\\\\\\"\\\\$list\\\\[@\\\\]\\\\\\\"***`.*\\n>\\n> **-m**\\n>\\n> :   Take the first argument as a pattern (should be quoted), and remove it from the argument list together with subsequent arguments that do not match this pattern.\\n>\\n> **-n**\\n>\\n> :   Do not add a newline to the output.\\n>\\n> **-N**\\n>\\n> :   Print the arguments separated and terminated by nulls. Again, **print -rNC1 \\\\-- \\\\\\\"\\\\$list\\\\[@\\\\]\\\\\\\"** *is a canonical way to print an* arbitrary list as null-delimited records.\\n>\\n> **-o**\\n>\\n> :   Print the arguments sorted in ascending order.\\n>\\n> **-O**\\n>\\n> :   Print the arguments sorted in descending order.\\n>\\n> **-p**\\n>\\n> :   Print the arguments to the input of the coprocess.\\n>\\n> **-P**\\n>\\n> :   Perform prompt expansion (see EXPANSION OF PROMPT SEQUENCES in *zshmisc(1)).* In combination with `**-f***`,* prompt escape sequences are parsed only within interpolated arguments, not within the format string.\\n>\\n> **-r**\\n>\\n> :   Ignore the escape conventions of **echo***.*\\n>\\n> **-R**\\n>\\n> :   Emulate the BSD **echo** *command, which does not process escape sequences* unless the **-e** *flag is given. The* **-n** *flag suppresses the trailing* newline. Only the **-e** *and* **-n** *flags are recognized after* **-R***; all other arguments and options are printed.*\\n>\\n> **-s**\\n>\\n> :   Place the results in the history list instead of on the standard output. Each argument to the **print** *command is treated as a single word in the* history, regardless of its content.\\n>\\n> **-S**\\n>\\n> :   Place the results in the history list instead of on the standard output. In this case only a single argument is allowed; it will be split into words as if it were a full shell command line. The effect is similar to reading the line from a history file with the **HIST_LEX_WORDS** *option active.*\\n>\\n> **-u** *n*\\n>\\n> :   Print the arguments to file descriptor *n.*\\n>\\n> **-v** *name*\\n>\\n> :   Store the printed arguments as the value of the parameter *name.*\\n>\\n> **-x** *tab-stop*\\n>\\n> :   Expand leading tabs on each line of output in the printed string assuming a tab stop every *tab-stop characters. This is appropriate* for formatting code that may be indented with tabs. Note that leading tabs of any argument to print, not just the first, are expanded, even if **print** *is using spaces to separate arguments (the column count* is maintained across arguments but may be incorrect on output owing to previous unexpanded tabs).\\n>\\n>     The start of the output of each print command is assumed to be aligned with a tab stop. Widths of multibyte characters are handled if the option **MULTIBYTE** *is in effect. This option is ignored if other* formatting options are in effect, namely column alignment or **printf** *style, or if output is to a special location such as shell* history or the command line editor.\\n>\\n> **-X** *tab-stop*\\n>\\n> :   This is similar to **-x***, except that all tabs in the printed string* are expanded. This is appropriate if tabs in the arguments are being used to produce a table format.\\n>\\n> **-z**\\n>\\n> :   Push the arguments onto the editing buffer stack, separated by spaces.\\n>\\n> If any of `**-m***`, `***-o***` or `***-O***` are used in combination with* `**-f***` and there are no arguments (after the removal process in the* case of `**-m***`) then nothing is printed.*\",\n    \"args\": \"print [ -abcDilmnNoOpPrsSz ] [ -u n ] [ -f format ] [ -C cols ]\"\n  },\n  \"printf\": {\n    \"shortDescription\": \"Format and print data\",\n    \"description\": \":   Print the arguments according to the format specification. Formatting rules are the same as used in C. The same escape sequences as for **echo** are recognised in the format. All C conversion specifications ending in one of **csdiouxXeEfgGn** *are handled. In addition to this, `***%b***` can be* used instead of `**%s***` to cause escape sequences in the argument to be* recognised and `**%q***` can be used to quote the argument in such a way* that allows it to be reused as shell input. With the numeric format specifiers, if the corresponding argument starts with a quote character, the numeric value of the following character is used as the number to print; otherwise the argument is evaluated as an arithmetic expression. See the section `Arithmetic Evaluation` in *zshmisc(1)* for a description of arithmetic expressions. With `**%n***`, the corresponding argument is taken as an* identifier which is created as an integer parameter.\\n\\n    Normally, conversion specifications are applied to each argument in order but they can explicitly specify the *nth argument is to be used by* replacing `**%***` by `***%***n***\\\\$***` and `***\\\\****` by `***\\\\****n***\\\\$***`.* It is recommended that you do not mix references of this explicit style with the normal style and the handling of such mixed styles may be subject to future change.\\n\\n    If arguments remain unused after formatting, the format string is reused until all arguments have been consumed. With the **print** *builtin, this* can be suppressed by using the **-r** *option. If more arguments are* required by the format than have been specified, the behaviour is as if zero or an empty string had been specified as the argument.\\n\\n    The **-v** *option causes the output to be stored as the value of the* parameter *name, instead of printed. If name is an array and* the format string is reused when consuming arguments then one array element will be used for each use of the format string.\",\n    \"args\": \"printf [ -v name ] format [ arg ... ]\"\n  },\n  \"pushd\": {\n    \"shortDescription\": \"Add directory to stack\",\n    \"description\": \"> The third form of **pushd** *changes directory by rotating the* directory list. An argument of the form `**+***n` identifies a stack* entry by counting from the left of the list shown by the **dirs** command, starting with zero. An argument of the form `**-***n` counts* from the right. If the **PUSHD_MINUS** *option is set, the meanings* of `**+***` and `***-***` in this context are swapped.*\\n>\\n> If the **-q** *(quiet) option is specified, the hook function* **chpwd** and the functions in the array **\\\\$chpwd_functions** *are not called,* and the new directory stack is not printed. This is useful for calls to **pushd** *that do not change the environment seen by an interactive user.*\\n>\\n> If the option **-q** *is not specified and the shell option* **PUSHD_SILENT** is not set, the directory stack will be printed after a **pushd** *is* performed.\\n>\\n> The options **-s***,* **-L** *and* **-P** *have the same meanings as for the* **cd** *builtin.*\",\n    \"args\": \"pushd [ -qsLP ] [ arg ]\\n\\npushd [ -qsLP ] old new\\n\\npushd [ -qsLP ] {+|-}n Change the current directory, and push the old\\ncurrent directory onto the directory stack. In the first form, change\\nthe current directory to arg. If arg is not specified, change to the\\nsecond directory on the stack (that is, exchange the top two entries),\\nor change to $HOME if the PUSHD_TO_HOME option is set or if there is\\nonly one entry on the stack. Otherwise, arg is interpreted as it would\\nbe by cd. The meaning of old and new in the second form is also the same\\nas for cd.\"\n  },\n  \"pushln\": {\n    \"shortDescription\": \"Push arguments onto the buffer\",\n    \"description\": \":   Equivalent to **print -nz***.*\",\n    \"args\": \"pushln [ arg ... ]\"\n  },\n  \"pwd\": {\n    \"shortDescription\": \"Print working directory\",\n    \"description\": \":   Print the absolute pathname of the current working directory. If the **-r** *or the* **-P** *flag is specified, or the* **CHASE_LINKS** option is set and the **-L** *flag is not given, the printed path will not* contain symbolic links.\",\n    \"args\": \"pwd [ -rLP ]\"\n  },\n  \"r\": {\n    \"shortDescription\": \"Re-execute command\",\n    \"description\": \":   Same as **fc -e -***.*\",\n    \"args\": \"r\"\n  },\n  \"read\": {\n    \"shortDescription\": \"Read a line from input\",\n    \"description\": \"*\\\\[* **-u** *n \\\\] \\\\[ \\\\[name\\\\]\\\\[***?***prompt\\\\] \\\\] \\\\[ name \\\\... \\\\]* Read one line and break it into fields using the characters in **\\\\$IFS** *as separators, except as noted below.* The first field is assigned to the first *name, the second field* to the second *name, etc., with leftover* fields assigned to the last *name.* If *name is omitted then* **REPLY** *is used for scalars and* **reply** *for arrays.*\\n\\n> **-r** Raw mode: a `**\\\\\\\\***` at the end of a line does not signify line* continuation and backslashes in the line don\\\\'t quote the following character and are not removed.\\n>\\n> **-s**\\n>\\n> :   Don\\\\'t echo back characters if reading from the terminal.\\n>\\n> **-q**\\n>\\n> :   Read only one character from the terminal and set *name to* `**y***` if this character was `***y***` or `***Y***` and to `***n***` otherwise.* With this flag set the return status is zero only if the character was `**y***` or `***Y***`. This option may be used with a timeout (see* **-t***); if* the read times out, or encounters end of file, status 2 is returned. Input is read from the terminal unless one of **-u** *or* **-p** *is present. This option* may also be used within zle widgets.\\n>\\n> **-k** *\\\\[ num \\\\]*\\n>\\n> :   Read only one (or *num) characters. All are assigned to the first* *name, without word splitting. This flag is ignored when* **-q** *is* present. Input is read from the terminal unless one of **-u** *or* **-p** is present. This option may also be used within zle widgets.\\n>\\n>     Note that despite the mnemonic `key` this option does read full characters, which may consist of multiple bytes if the option **MULTIBYTE** *is set.*\\n>\\n> **-z**\\n>\\n> :   Read one entry from the editor buffer stack and assign it to the first *name, without word splitting. Text is pushed onto the stack with* `**print -z***` or with* **push-line** *from the line editor (see* *zshzle(1)). This flag is ignored when the* **-k** *or* **-q** *flags are present.*\\n>\\n> **-e**\\n>\\n> **-E** The input read is printed (echoed) to the standard output. If the **-e** flag is used, no input is assigned to the parameters.\\n>\\n> **-A**\\n>\\n> :   The first *name is taken as the name of an array and all words are* assigned to it.\\n>\\n> **-c**\\n>\\n> **-l** These flags are allowed only if called inside a function used for completion (specified with the **-K** *flag to* **compctl***). If the* **-c** *flag is given, the words of the* current command are read. If the **-l** *flag is given, the whole* line is assigned as a scalar. If both flags are present, **-l** is used and **-c** *is ignored.*\\n>\\n> **-n**\\n>\\n> :   Together with **-c***, the number of the word the cursor is on is* read. With **-l***, the index of the character the cursor is on is* read. Note that the command name is word number 1, not word 0, and that when the cursor is at the end of the line, its character index is the length of the line plus one.\\n>\\n> **-u** *n*\\n>\\n> :   Input is read from file descriptor *n.*\\n>\\n> **-p**\\n>\\n> :   Input is read from the coprocess.\\n>\\n> **-d** *delim*\\n>\\n> :   Input is terminated by the first character of *delim instead of* by newline.\\n>\\n> **-t** *\\\\[ num \\\\]*\\n>\\n> :   Test if input is available before attempting to read. If *num* is present, it must begin with a digit and will be evaluated to give a number of seconds, which may be a floating point number; in this case the read times out if input is not available within this time. If *num is not present, it is taken to be zero, so that* **read** *returns immediately if no input is available.* If no input is available, return status 1 and do not set any variables. This option is not available when reading from the editor buffer with **-z***, when called from within completion with* **-c** *or* **-l***, with* **-q** *which clears the input queue before reading, or within zle where* other mechanisms should be used to test for input. Note that read does not attempt to alter the input processing mode. The default mode is canonical input, in which an entire line is read at a time, so usually `**read -t***` will not read anything until an entire line has* been typed. However, when reading from the terminal with **-k** input is processed one key at a time; in this case, only availability of the first character is tested, so that e.g. `**read -t -k 2***` can still* block on the second character. Use two instances of `**read -t -k***` if* this is not what is wanted.\\n>\\n> If the first argument contains a `**?***`, the remainder of this* word is used as a *prompt on standard error when the shell* is interactive.\\n>\\n> The value (exit status) of **read** *is 1 when an end-of-file is* encountered, or when **-c** *or* **-l** *is present and the command is* not called from a **compctl** *function, or as described for* **-q***.* Otherwise the value is 0.\\n>\\n> The behavior of some combinations of the **-k***,* **-p***,* **-q***,* **-u** and **-z** *flags is undefined. Presently* **-q** *cancels all the others,* **-p** *cancels* **-u***,* **-k** *cancels* **-z***, and otherwise* **-z** cancels both **-p** *and* **-u***.*\\n>\\n> The **-c** *or* **-l** *flags cancel any and all of* **-kpquz***.*\",\n    \"args\": \"read [ -rszpqAclneE ] [ -t [ num ] ] [ -k [ num ] ] [ -d delim ]\"\n  },\n  \"readonly\": {\n    \"shortDescription\": \"Mark variables as read-only\",\n    \"description\": \":   Same as **typeset -r***. With the* **POSIX_BUILTINS** *option set, same* as **typeset -gr***.*\",\n    \"args\": \"readonly\"\n  },\n  \"rehash\": {\n    \"shortDescription\": \"Recompute command hash table\",\n    \"description\": \":   Same as **hash -r***.*\",\n    \"args\": \"rehash\"\n  },\n  \"return\": {\n    \"shortDescription\": \"Return from a function\",\n    \"description\": \":   Causes a shell function or `**.***` script to return to* the invoking script with the return status specified by an arithmetic expression *n.* For example, the following prints `**42***`:*\\n\\n    > () { integer foo=40; return \\\"foo + 2\\\" }\\n    >     echo $?\\n\\n    If *n* is omitted, the return status is that of the last command executed.\\n\\n    If **return** *was executed from a trap in a* **TRAP***NAL function,* the effect is different for zero and non-zero return status. With zero status (or after an implicit return at the end of the trap), the shell will return to whatever it was previously processing; with a non-zero status, the shell will behave as interrupted except that the return status of the trap is retained. Note that the numeric value of the signal which caused the trap is passed as the first argument, so the statement `**return \\\\\\\"128+\\\\$1\\\\\\\"***` will return the same status as if the signal* had not been trapped.\",\n    \"args\": \"return [ n ]\"\n  },\n  \"sched\": {\n    \"shortDescription\": \"Schedule commands\",\n    \"description\": \":   See the section `The zsh/sched Module` in *zshmodules(1).*\",\n    \"args\": \"sched\"\n  },\n  \"set\": {\n    \"shortDescription\": \"Set shell options\",\n    \"description\": \"*\\\\[ arg \\\\... \\\\]* Set the options for the shell and/or set the positional parameters, or declare and set an array. If the **-s** *option is given, it causes the* specified arguments to be sorted before assigning them to the positional parameters (or to the array *name if* **-A** *is used). With* **+s** sort arguments in descending order. For the meaning of the other flags, see *zshoptions(1). Flags may be specified by name using the* **-o** *option. If no option* name is supplied with **-o***, the current option states are printed: see* the description of **setopt** *below for more information on the format.* With **+o** *they are printed in a form that can be used as input* to the shell.\\n\\n> If the **-A** *flag is specified, name is set to an array containing* the given *args; if no name is specified, all arrays are printed* together with their values.\\n>\\n> If **+A** *is used and name is an array, the* given arguments will replace the initial elements of that array; if no *name is specified, all arrays are printed without their values.*\\n>\\n> The behaviour of arguments after **-A** *name or* **+A** *name* depends on whether the option **KSH_ARRAYS** *is set. If it is not set, all* arguments following *name are treated as values for the array,* regardless of their form. If the option is set, normal option processing continues at that point; only regular arguments are treated as values for the array. This means that\\n>\\n> > set -A array -x -- foo\\n>\\n> sets **array** *to `***-x -- foo***` if* **KSH_ARRAYS** *is not set, but sets* the array to **foo** *and turns on the option `***-x***` if it is set.*\\n>\\n> If the **-A** *flag is not present, but there are arguments beyond the* options, the positional parameters are set. If the option list (if any) is terminated by `**--***`, and there are no further arguments, the* positional parameters will be unset.\\n>\\n> If no arguments and no `**--***` are given, then the names and values of* all parameters are printed on the standard output. If the only argument is `**+***`, the names of all parameters are printed.*\\n>\\n> For historical reasons, `**set -***` is treated as `***set +xv***`* and `**set -** *args` as `***set +xv \\\\--** *args` when in* any other emulation mode than zsh\\\\'s native mode.\",\n    \"args\": \"set [ {+|-}options | {+|-}o [ option_name ] ] ... [ {+|-}A [ name ] ]\"\n  },\n  \"setcap\": {\n    \"shortDescription\": \"Set capabilities\",\n    \"description\": \":   See the section `The zsh/cap Module` in *zshmodules(1).*\",\n    \"args\": \"setcap\"\n  },\n  \"setopt\": {\n    \"shortDescription\": \"Set shell options\",\n    \"description\": \":   Set the options for the shell. All options specified either with flags or by name are set.\\n\\n    If no arguments are supplied, the names of all options currently set are printed. The form is chosen so as to minimize the differences from the default options for the current emulation (the default emulation being native **zsh***, shown as* **\\\\<Z\\\\>** *in* *zshoptions(1)).* Options that are on by default for the emulation are shown with the prefix **no** *only if they are off, while other options are* shown without the prefix **no** *and only if they are on. In addition to* options changed from the default state by the user, any options activated automatically by the shell (for example, **SHIN_STDIN** *or* **INTERACTIVE***)* will be shown in the list. The format is further modified by the option **KSH_OPTION_PRINT***, however the rationale for choosing options with* or without the **no** *prefix remains the same in this case.*\\n\\n    If the **-m** *flag is given the arguments are taken as patterns* (which should be quoted to protect them from filename expansion), and all options with names matching these patterns are set.\\n\\n    Note that a bad option name does not cause execution of subsequent shell code to be aborted; this is behaviour is different from that of `**set** -o*`. This is because* **set** *is regarded as a special builtin by the* POSIX standard, but **setopt** *is not.*\",\n    \"args\": \"setopt [ {+|-}options | {+|-}o option_name ] [ -m ] [ name ... ]\"\n  },\n  \"shift\": {\n    \"shortDescription\": \"Shift positional parameters\",\n    \"description\": \":   The positional parameters **\\\\${***n+1***}** *\\\\... are renamed* to **\\\\$1** *\\\\..., where n is an arithmetic expression that* defaults to 1. If any *names are given then the arrays with these names are* shifted instead of the positional parameters.\\n\\n    If the option **-p** *is given arguments are instead removed (popped)* from the end rather than the start of the array.\",\n    \"args\": \"shift [ -p ] [ n ] [ name ... ]\"\n  },\n  \"source\": {\n    \"shortDescription\": \"Source a file\",\n    \"description\": \":   Same as `**.***`, except that the current directory is always searched and* is always searched first, before directories in **\\\\$path***.*\",\n    \"args\": \"source file [ arg ... ]\"\n  },\n  \"stat\": {\n    \"shortDescription\": \"Display file status\",\n    \"description\": \":   See the section `The zsh/stat Module` in *zshmodules(1).*\",\n    \"args\": \"stat\"\n  },\n  \"suspend\": {\n    \"shortDescription\": \"Suspend the shell\",\n    \"description\": \":   Suspend the execution of the shell (send it a **SIGTSTP***)* until it receives a **SIGCONT***.* Unless the **-f** *option is given, this will refuse to suspend a login shell.*\",\n    \"args\": \"suspend [ -f ]\"\n  },\n  \"test\": {\n    \"shortDescription\": \"Evaluate a conditional expression\",\n    \"description\": \"**\\\\[** *\\\\[ arg \\\\... \\\\]* **\\\\]** Like the system version of **test***. Added for compatibility;* use conditional expressions instead (see the section `Conditional Expressions`). The main differences between the conditional expression syntax and the **test** *and* **\\\\[** *builtins are: these commands are not handled* syntactically, so for example an empty variable expansion may cause an argument to be omitted; syntax errors cause status 2 to be returned instead of a shell error; and arithmetic operators expect integer arguments rather than arithmetic expressions.\\n\\n> The command attempts to implement POSIX and its extensions where these are specified. Unfortunately there are intrinsic ambiguities in the syntax; in particular there is no distinction between test operators and strings that resemble them. The standard attempts to resolve these for small numbers of arguments (up to four); for five or more arguments compatibility cannot be relied on. Users are urged wherever possible to use the `**\\\\[\\\\[***` test syntax which does not have these ambiguities.*\",\n    \"args\": \"test [ arg ... ]\"\n  },\n  \"times\": {\n    \"shortDescription\": \"Display shell times\",\n    \"description\": \":   Print the accumulated user and system times for the shell and for processes run from the shell.\",\n    \"args\": \"times\"\n  },\n  \"trap\": {\n    \"shortDescription\": \"Set signal handlers\",\n    \"description\": \":   *arg is a series of commands (usually quoted to protect it from* immediate evaluation by the shell) to be read and executed when the shell receives any of the signals specified by one or more *sig args.* Each *sig can be given as a number,* or as the name of a signal either with or without the string **SIG** in front (e.g. 1, HUP, and SIGHUP are all the same signal).\\n\\n    If *arg is `***-***`, then the specified signals are reset to their* defaults, or, if no *sig args are present, all traps are reset.*\\n\\n    If *arg is an empty string, then the specified signals* are ignored by the shell (and by the commands it invokes).\\n\\n    If *arg is omitted but one or more sig args are provided (i.e.* the first argument is a valid signal number or name), the effect is the same as if *arg had been specified as `***-***`.*\\n\\n    The **trap** *command with no arguments prints a list of commands* associated with each signal.\\n\\n    If *sig is* **ZERR** *then arg will be executed* after each command with a nonzero exit status. **ERR** *is an alias* for **ZERR** *on systems that have no* **SIGERR** *signal (this is the* usual case).\\n\\n    If *sig is* **DEBUG** *then arg will be executed* before each command if the option **DEBUG_BEFORE_CMD** *is set* (as it is by default), else after each command. Here, a `command` is what is described as a `sublist` in the shell grammar, see the section SIMPLE COMMANDS & PIPELINES in *zshmisc(1).* If **DEBUG_BEFORE_CMD** *is set various additional features are available.* First, it is possible to skip the next command by setting the option **ERR_EXIT***; see the description of the* **ERR_EXIT** *option in* *zshoptions(1). Also, the shell parameter* **ZSH_DEBUG_CMD** *is set to the string corresponding to the command* to be executed following the trap. Note that this string is reconstructed from the internal format and may not be formatted the same way as the original text. The parameter is unset after the trap is executed.\\n\\n    If *sig is* **0** *or* **EXIT** and the **trap** *statement is executed inside the body of a function,* then the command *arg is executed after the function completes.* The value of **\\\\$?** *at the start of execution is the exit status of the* shell or the return status of the function exiting. If *sig is* **0** *or* **EXIT** and the **trap** *statement is not executed inside the body of a function,* then the command *arg is executed when the shell terminates; the* trap runs before any **zshexit** *hook functions.*\\n\\n    **ZERR***,* **DEBUG***, and* **EXIT** *traps are not executed inside other* traps. **ZERR** *and* **DEBUG** *traps are kept within subshells, while* other traps are reset.\\n\\n    Note that traps defined with the **trap** *builtin are slightly different* from those defined as `**TRAP***NAL () { \\\\... }`, as the latter have* their own function environment (line numbers, local variables, etc.) while the former use the environment of the command in which they were called. For example,\\n\\n    > trap 'print $LINENO' DEBUG\\n\\n    will print the line number of a command executed after it has run, while\\n\\n    > TRAPDEBUG() { print $LINENO; }\\n\\n    will always print the number zero.\\n\\n    Alternative signal names are allowed as described under **kill** *above.* Defining a trap under either name causes any trap under an alternative name to be removed. However, it is recommended that for consistency users stick exclusively to one name or another.\",\n    \"args\": \"trap [ arg ] [ sig ... ]\"\n  },\n  \"true\": {\n    \"shortDescription\": \"Return exit status of 0\",\n    \"description\": \":   Do nothing and return an exit status of 0.\",\n    \"args\": \"true [ arg ... ]\"\n  },\n  \"ttyctl\": {\n    \"shortDescription\": \"Control terminal attributes\",\n    \"description\": \":   The **-f** *option freezes the tty (i.e. terminal or terminal emulator), and* **-u** *unfreezes it.* When the tty is frozen, no changes made to the tty settings by external programs will be honored by the shell, except for changes in the size of the screen; the shell will simply reset the settings to their previous values as soon as each command exits or is suspended. Thus, **stty** *and similar programs have* no effect when the tty is frozen. Freezing the tty does not cause the current state to be remembered: instead, it causes future changes to the state to be blocked.\\n\\n    Without options it reports whether the terminal is frozen or not.\\n\\n    Note that, regardless of whether the tty is frozen or not, the shell needs to change the settings when the line editor starts, so unfreezing the tty does not guarantee settings made on the command line are preserved. Strings of commands run between editing the command line will see a consistent tty state. See also the shell variable **STTY** *for a means of initialising* the tty before running external commands and/or freezing the tty around a single command.\",\n    \"args\": \"ttyctl [ -fu ]\"\n  },\n  \"type\": {\n    \"shortDescription\": \"Describe a command\",\n    \"description\": \":   Equivalent to **whence -v***.*\",\n    \"args\": \"type [ -wfpamsS ] name ...\"\n  },\n  \"typeset\": {\n    \"shortDescription\": \"Set or display parameter attributes/values\",\n    \"description\": \"*\\\\[* **+** *\\\\| SCALAR\\\\[***=***value\\\\] array\\\\[***=(***value \\\\...***)***\\\\] \\\\[ sep \\\\] \\\\]*\\n\\n**typeset** **-f** *\\\\[ {***+***\\\\|***-***}***TUkmtuz** *\\\\] \\\\[* **+** *\\\\] \\\\[ name \\\\... \\\\]* Set or display attributes and values for shell parameters.\\n\\n> Except as noted below for control flags that change the behavior, a parameter is created for each *name that does not already refer* to one. When inside a function, a new parameter is created for every *name (even those that already exist), and is unset again when the* function completes. See `Local Parameters` in *zshparam(1). The same rules apply to special shell parameters, which* retain their special attributes when made local.\\n>\\n> For each *name***=***value assignment, the parameter* *name is set to value. If the assignment is omitted and name* does *not refer to an existing parameter, a new parameter is intialized* to empty string, zero, or empty array (as appropriate), *unless the* shell option **TYPESET_TO_UNSET** *is set. When that option is set,* the parameter attributes are recorded but the parameter remains unset.\\n>\\n> If the shell option **TYPESET_SILENT** *is not set, for each remaining* *name that refers to a parameter that is already set, the name and* value of the parameter are printed in the form of an assignment. Nothing is printed for newly-created parameters, or when any attribute flags listed below are given along with the *name. Using* `**+***` instead of minus to introduce an attribute turns it off.*\\n>\\n> If no *name is present, the names and values of all parameters are* printed. In this case the attribute flags restrict the display to only those parameters that have the specified attributes, and using `**+***`* rather than `**-***` to introduce the flag suppresses printing of the values* of parameters when there is no parameter name.\\n>\\n> All forms of the command handle scalar assignment. Array assignment is possible if any of the reserved words **declare***,* **export***,* **float***,* **integer***,* **local***,* **readonly** *or* **typeset** *is matched when the* line is parsed (N.B. not when it is executed). In this case the arguments are parsed as assignments, except that the `**+=***` syntax and the* **GLOB_ASSIGN** *option are not supported, and scalar values after* **=** are *not split further into words, even if expanded (regardless of the* setting of the **KSH_TYPESET** *option; this option is obsolete).*\\n>\\n> Examples of the differences between command and reserved word parsing:\\n>\\n> > # Reserved word parsing\\n> >     typeset svar=$(echo one word) avar=(several words)\\n>\\n> The above creates a scalar parameter **svar** *and an array* parameter **avar** *as if the assignments had been*\\n>\\n> > svar=\\\"one word\\\"\\n> >     avar=(several words)\\n>\\n> On the other hand:\\n>\\n> > # Normal builtin interface\\n> >     builtin typeset svar=$(echo two words)\\n>\\n> The **builtin** *keyword causes the above to use the standard builtin* interface to **typeset** *in which argument parsing is performed in the same* way as for other commands. This example creates a scalar **svar** containing the value **two** *and another scalar parameter* **words** *with* no value. An array value in this case would either cause an error or be treated as an obscure set of glob qualifiers.\\n>\\n> Arbitrary arguments are allowed if they take the form of assignments after command line expansion; however, these only perform scalar assignment:\\n>\\n> > var='svar=val'\\n> >     typeset $var\\n>\\n> The above sets the scalar parameter **svar** *to the value* **val***.* Parentheses around the value within **var** *would not cause array* assignment as they will be treated as ordinary characters when **\\\\$var** is substituted. Any non-trivial expansion in the name part of the assignment causes the argument to be treated in this fashion:\\n>\\n> > typeset {var1,var2,var3}=name\\n>\\n> The above syntax is valid, and has the expected effect of setting the three parameters to the same value, but the command line is parsed as a set of three normal command line arguments to **typeset** *after* expansion. Hence it is not possible to assign to multiple arrays by this means.\\n>\\n> Note that each interface to any of the commands may be disabled separately. For example, `**disable -r typeset***` disables the reserved* word interface to **typeset***, exposing the builtin interface, while* `**disable typeset***` disables the builtin. Note that disabling the* reserved word interface for **typeset** *may cause problems with the* output of `**typeset -p***`, which assumes the reserved word interface is* available in order to restore array and associative array values.\\n>\\n> Unlike parameter assignment statements, **typeset***\\\\'s exit status on an* assignment that involves a command substitution does not reflect the exit status of the command substitution. Therefore, to test for an error in a command substitution, separate the declaration of the parameter from its initialization:\\n>\\n> > # WRONG\\n> >     typeset var1=$(exit 1) || echo \\\"Trouble with var1\\\"\\n> >\\n> >     # RIGHT\\n> >     typeset var1 && var1=$(exit 1) || echo \\\"Trouble with var1\\\"\\n>\\n> To initialize a parameter *param to a command output and mark it readonly,* use **typeset -r** *param or* **readonly** *param after the parameter* assignment statement.\\n>\\n> If no attribute flags are given, and either no *name arguments are* present or the flag **+m** *is used, then each parameter name printed is* preceded by a list of the attributes of that parameter (**array***,* **association***,* **exported***,* **float***,* **integer***,* **readonly***,* or **undefined** *for autoloaded parameters not yet loaded). If* **+m** *is* used with attribute flags, and all those flags are introduced with **+***, the matching parameter names are printed but their values* are not.\\n>\\n> The following control flags change the behavior of **typeset***:*\\n>\\n> **+** If `**+***` appears by itself in a separate word as the last option,* then the names of all parameters (functions with **-f***) are printed, but* the values (function bodies) are not. No *name arguments may appear,* and it is an error for any other options to follow `**+***`. The* effect of `**+***` is as if all attribute flags which precede it were* given with a `**+***` prefix. For example, `***typeset -U +***` is* equivalent to `**typeset +U***` and displays the names of all arrays having* the uniqueness attribute, whereas `**typeset -f -U +***` displays the* names of all autoloadable functions. If **+** *is the only option,* then type information (array, readonly, etc.) is also printed for each parameter, in the same manner as `**typeset +m \\\\\\\"\\\\*\\\\\\\"***`.*\\n>\\n> **-g**\\n>\\n> :   The **-g** *(global) means that any resulting parameter will not be* restricted to local scope. Note that this does not necessarily mean that the parameter will be global, as the flag will apply to any existing parameter (even if unset) from an enclosing function. This flag does not affect the parameter after creation, hence it has no effect when listing existing parameters, nor does the flag **+g** *have any effect except in* combination with **-m** *(see below).*\\n>\\n> **-m**\\n>\\n> :   If the **-m** *flag is given the name arguments are taken as patterns* (use quoting to prevent these from being interpreted as file patterns). With no attribute flags, all parameters (or functions with the **-f** flag) with matching names are printed (the shell option **TYPESET_SILENT** is not used in this case).\\n>\\n>     If the **+g** *flag is combined with* **-m***, a new local parameter is* created for every matching parameter that is not already local. Otherwise **-m** *applies all other flags or assignments to the existing parameters.*\\n>\\n>     Except when assignments are made with *name***=***value, using* **+m** *forces the matching parameters and their attributes to be printed,* even inside a function. Note that **-m** *is ignored if no patterns are* given, so `**typeset -m***` displays attributes but `***typeset -a +m***`* does not.\\n>\\n> **-p** *\\\\[ n \\\\]*\\n>\\n> :   If the **-p** *option is given, parameters and values are printed in the* form of a typeset command with an assignment, regardless of other flags and options. Note that the **-H** *flag on parameters is respected; no* value will be shown for these parameters.\\n>\\n>     **-p** *may be followed by an optional integer argument. Currently* only the value **1** *is supported. In this case arrays and associative* arrays are printed with newlines between indented elements for readability.\\n>\\n> **-T** *\\\\[ scalar\\\\[***=***value\\\\] array\\\\[***=(***value \\\\...***)***\\\\] \\\\[ sep \\\\] \\\\]*\\n>\\n> :   This flag has a different meaning when used with **-f***; see below.* Otherwise the **-T** *option requires zero, two, or three arguments to be* present. With no arguments, the list of parameters created in this fashion is shown. With two or three arguments, the first two are the name of a scalar and of an array parameter (in that order) that will be tied together in the manner of **\\\\$PATH** *and* **\\\\$path***. The optional third* argument is a single-character separator which will be used to join the elements of the array to form the scalar; if absent, a colon is used, as with **\\\\$PATH***. Only the first character of the separator is significant;* any remaining characters are ignored. Multibyte characters are not yet supported.\\n>\\n>     Only one of the scalar and array parameters may be assigned an initial value (the restrictions on assignment forms described above also apply).\\n>\\n>     Both the scalar and the array may be manipulated as normal. If one is unset, the other will automatically be unset too. There is no way of untying the variables without unsetting them, nor of converting the type of one of them with another **typeset** *command;* **+T** *does not work,* assigning an array to *scalar is an error, and assigning a scalar to* *array sets it to be a single-element array.*\\n>\\n>     Note that both `**typeset -xT \\\\...***` and `***export -T \\\\...***` work, but* only the scalar will be marked for export. Setting the value using the scalar version causes a split on all separators (which cannot be quoted). It is possible to apply **-T** *to two previously tied variables but with a* different separator character, in which case the variables remain joined as before but the separator is changed.\\n>\\n>     When an existing scalar is tied to a new array, the value of the scalar is preserved but no attribute other than export will be preserved.\\n>\\n> Attribute flags that transform the final value (**-L***,* **-R***,* **-Z***,* **-l***,* **-u***) are only applied to the expanded value at the point* of a parameter expansion expression using `**\\\\$***`. They are not applied* when a parameter is retrieved internally by the shell for any purpose.\\n>\\n> The following attribute flags may be specified:\\n>\\n> **-A** The names refer to associative array parameters; see `Array Parameters` in *zshparam(1).*\\n>\\n> **-L** *\\\\[ n \\\\]*\\n>\\n> :   Left justify and remove leading blanks from the value when the parameter is expanded. If *n is nonzero, it defines the width of the field.* If *n is zero, the width is determined by the width of the value of* the first assignment. In the case of numeric parameters, the length of the complete value assigned to the parameter is used to determine the width, not the value that would be output.\\n>\\n>     The width is the count of characters, which may be multibyte characters if the **MULTIBYTE** *option is in effect. Note that the screen* width of the character is not taken into account; if this is required, use padding with parameter expansion flags **\\\\${(ml***\\\\...***)***\\\\...***}** *as described in* `Parameter Expansion Flags` in *zshexpn(1).*\\n>\\n>     When the parameter is expanded, it is filled on the right with blanks or truncated if necessary to fit the field. Note truncation can lead to unexpected results with numeric parameters. Leading zeros are removed if the **-Z** *flag is also set.*\\n>\\n> **-R** *\\\\[ n \\\\]*\\n>\\n> :   Similar to **-L***, except that right justification is used;* when the parameter is expanded, the field is left filled with blanks or truncated from the end. May not be combined with the **-Z** flag.\\n>\\n> **-U**\\n>\\n> :   For arrays (but not for associative arrays), keep only the first occurrence of each duplicated value. This may also be set for tied parameters (see **-T***) or colon-separated special parameters like* **PATH** *or* **FIGNORE***, etc. Note the flag takes effect on assignment,* and the type of the variable being assigned to is determinative; for variables with shared values it is therefore recommended to set the flag for all interfaces, e.g. `**typeset -U PATH path***`.*\\n>\\n>     This flag has a different meaning when used with **-f***; see below.*\\n>\\n> **-Z** *\\\\[ n \\\\]*\\n>\\n> :   Specially handled if set along with the **-L** *flag.* Otherwise, similar to **-R***, except that leading zeros are used for* padding instead of blanks if the first non-blank character is a digit. Numeric parameters are specially handled: they are always eligible for padding with zeroes, and the zeroes are inserted at an appropriate place in the output.\\n>\\n> **-a**\\n>\\n> :   The names refer to array parameters. An array parameter may be created this way, but it may be assigned to in the **typeset** statement only if the reserved word form of **typeset** *is enabled* (as it is by default). When displaying, both normal and associative arrays are shown.\\n>\\n> **-f**\\n>\\n> :   The names refer to functions rather than parameters. No assignments can be made, and the only other valid flags are **-t***,* **-T***,* **-k***,* **-u***,* **-U** *and* **-z***. The flag* **-t** *turns on execution tracing* for this function; the flag **-T** *does the same, but turns off tracing* for any named (not anonymous) function called from the present one, unless that function also has the **-t** *or* **-T** *flag. The* **-u** *and* **-U** *flags cause the* function to be marked for autoloading; **-U** *also causes alias* expansion to be suppressed when the function is loaded. See the description of the `**autoload***` builtin for details.*\\n>\\n>     Note that the builtin **functions** *provides the same basic capabilities* as **typeset -f** *but gives access to a few extra options;* **autoload** gives further additional options for the case **typeset -fu** *and* **typeset -fU***.*\\n>\\n> **-h**\\n>\\n> :   Hide: only useful for special parameters (those marked `\\\\<S\\\\>` in the table in *zshparam(1)), and for local parameters with the same name as a special parameter,* though harmless for others. A special parameter with this attribute will not retain its special effect when made local. Thus after `**typeset -h** PATH*`, a function containing `***typeset PATH***` will create an ordinary* local parameter without the usual behaviour of **PATH***. Alternatively,* the local parameter may itself be given this attribute; hence inside a function `**typeset -h PATH***` creates an ordinary local parameter and the* special **PATH** *parameter is not altered in any way. It is also possible* to create a local parameter using `**typeset +h** *special`, where the* local copy of *special will retain its special properties regardless of* having the **-h** *attribute. Global special parameters loaded from shell* modules (currently those in **zsh/mapfile** *and* **zsh/parameter***) are* automatically given the **-h** *attribute to avoid name clashes.*\\n>\\n> **-H**\\n>\\n> :   Hide value: specifies that **typeset** *will not display the value of the* parameter when listing parameters; the display for such parameters is always as if the `**+***` flag had been given. Use of the parameter is* in other respects normal, and the option does not apply if the parameter is specified by name, or by pattern with the **-m** *option. This is on by* default for the parameters in the **zsh/parameter** *and* **zsh/mapfile** modules. Note, however, that unlike the **-h** *flag this is also useful* for non-special parameters.\\n>\\n> **-i** *\\\\[ n \\\\]*\\n>\\n> :   Use an internal integer representation. If *n is nonzero it* defines the output arithmetic base, otherwise it is determined by the first assignment. Bases from 2 to 36 inclusive are allowed.\\n>\\n> **-E** *\\\\[ n \\\\]*\\n>\\n> :   Use an internal double-precision floating point representation. On output the variable will be converted to scientific notation. If *n is* nonzero it defines the number of significant figures to display; the default is ten.\\n>\\n> **-F** *\\\\[ n \\\\]*\\n>\\n> :   Use an internal double-precision floating point representation. On output the variable will be converted to fixed-point decimal notation. If *n* is nonzero it defines the number of digits to display after the decimal point; the default is ten.\\n>\\n> **-l**\\n>\\n> :   Convert the result to lower case whenever the parameter is expanded. The value is *not converted when assigned.*\\n>\\n> **-r**\\n>\\n> :   The given *names are marked readonly. Note that if name is a* special parameter, the readonly attribute can be turned on, but cannot then be turned off.\\n>\\n>     If the **POSIX_BUILTINS** *option is set, the readonly attribute is* more restrictive: unset variables can be marked readonly and cannot then be set; furthermore, the readonly attribute cannot be removed from any variable.\\n>\\n>     It is still possible to change other attributes of the variable though, some of which like **-U** *or* **-Z** *would affect the value. More generally,* the readonly attribute should not be relied on as a security mechanism.\\n>\\n>     Note that in zsh (like in pdksh but unlike most other shells) it is still possible to create a local variable of the same name as this is considered a different variable (though this variable, too, can be marked readonly). Special variables that have been made readonly retain their value and readonly attribute when made local.\\n>\\n> **-t**\\n>\\n> :   Tags the named parameters. Tags have no special meaning to the shell. This flag has a different meaning when used with **-f***; see above.*\\n>\\n> **-u**\\n>\\n> :   Convert the result to upper case whenever the parameter is expanded. The value is *not converted when assigned.* This flag has a different meaning when used with **-f***; see above.*\\n>\\n> **-x**\\n>\\n> :   Mark for automatic export to the environment of subsequently executed commands. If the option **GLOBAL_EXPORT** *is set, this implies* the option **-g***, unless* **+g** *is also explicitly given; in other words* the parameter is not made local to the enclosing function. This is for compatibility with previous versions of zsh.\",\n    \"args\": \"typeset -T [ {+|-}Uglrux ] [ {+|-}LRZp [ n ] ]\"\n  },\n  \"ulimit\": {\n    \"shortDescription\": \"Set or display resource limits\",\n    \"description\": \":   Set or display resource limits of the shell and the processes started by the shell. The value of *limit can be a number in the unit specified* below or one of the values `**unlimited***`, which removes the limit on the* resource, or `**hard***`, which uses the current value of the hard limit on* the resource.\\n\\n    By default, only soft limits are manipulated. If the **-H** *flag* is given use hard limits instead of soft limits. If the **-S** *flag is given* together with the **-H** *flag set both hard and soft limits.*\\n\\n    If no options are used, the file size limit (**-f***) is assumed.*\\n\\n    If *limit is omitted the current value of the specified resources are* printed. When more than one resource value is printed, the limit name and unit is printed before each value.\\n\\n    When looping over multiple resources, the shell will abort immediately if it detects a badly formed argument. However, if it fails to set a limit for some other reason it will continue trying to set the remaining limits.\\n\\n    Not all the following resources are supported on all systems. Running **ulimit -a** *will show which are supported.*\\n\\n    **-a**\\n\\n    :   Lists all of the current resource limits.\\n\\n    **-b**\\n\\n    :   Socket buffer size in bytes (N.B. not kilobytes)\\n\\n    **-c**\\n\\n    :   512-byte blocks on the size of core dumps.\\n\\n    **-d**\\n\\n    :   Kilobytes on the size of the data segment.\\n\\n    **-f**\\n\\n    :   512-byte blocks on the size of files written.\\n\\n    **-i**\\n\\n    :   The number of pending signals.\\n\\n    **-k**\\n\\n    :   The number of kqueues allocated.\\n\\n    **-l**\\n\\n    :   Kilobytes on the size of locked-in memory.\\n\\n    **-m**\\n\\n    :   Kilobytes on the size of physical memory.\\n\\n    **-n**\\n\\n    :   open file descriptors.\\n\\n    **-p**\\n\\n    :   The number of pseudo-terminals.\\n\\n    **-q**\\n\\n    :   Bytes in POSIX message queues.\\n\\n    **-r**\\n\\n    :   Maximum real time priority. On some systems where this is not available, such as NetBSD, this has the same effect as **-T** for compatibility with **sh***.*\\n\\n    **-s**\\n\\n    :   Kilobytes on the size of the stack.\\n\\n    **-T**\\n\\n    :   The number of simultaneous threads available to the user.\\n\\n    **-t**\\n\\n    :   CPU seconds to be used.\\n\\n    **-u**\\n\\n    :   The number of processes available to the user.\\n\\n    **-v**\\n\\n    :   Kilobytes on the size of virtual memory. On some systems this refers to the limit called `address space`.\\n\\n    **-w**\\n\\n    :   Kilobytes on the size of swapped out memory.\\n\\n    **-x**\\n\\n    :   The number of locks on files.\\n\\n    A resource may also be specified by integer in the form `**-N** *resource`, where resource corresponds to the integer defined for* the resource by the operating system. This may be used to set the limits for resources known to the shell which do not correspond to option letters. Such limits will be shown by number in the output of `**ulimit -a***`.*\\n\\n    The number may alternatively be out of the range of limits compiled into the shell. The shell will try to read or write the limit anyway, and will report an error if this fails.\",\n    \"args\": \"ulimit [ -HSa ] [ { -bcdfiklmnpqrsTtvwx | -N resource } [ limit ] ... ]\"\n  },\n  \"umask\": {\n    \"shortDescription\": \"Set file creation mask\",\n    \"description\": \":   The umask is set to *mask. mask can be either* an octal number or a symbolic value as described in the *chmod(1) man page.* If *mask is omitted, the current value is printed. The* **-S** option causes the mask to be printed as a symbolic value. Otherwise, the mask is printed as an octal number. Note that in the symbolic form the permissions you specify are those which are to be allowed (not denied) to the users specified.\",\n    \"args\": \"umask [ -S ] [ mask ]\"\n  },\n  \"unalias\": {\n    \"shortDescription\": \"Removes aliases\",\n    \"description\": \":   Removes aliases. This command works the same as **unhash -a***, except that* the **-a** *option removes all regular or global aliases, or with* **-s** all suffix aliases: in this case no *name arguments may appear. The* options **-m** *(remove by pattern) and* **-s** *without* **-a** *(remove* listed suffix aliases) behave as for **unhash -a***. Note that* the meaning of **-a** *is different between* **unalias** *and* **unhash***.*\",\n    \"args\": \"unalias [ -ams ] name ...\"\n  },\n  \"unfunction\": {\n    \"shortDescription\": \"Remove function definition\",\n    \"description\": \":   Same as **unhash -f***.*\",\n    \"args\": \"unfunction\"\n  },\n  \"unhash\": {\n    \"shortDescription\": \"Remove command from hash table\",\n    \"description\": \":   Remove the element named *name from an internal hash table. The* default is remove elements from the command hash table. The **-a** option causes **unhash** *to remove regular or global aliases; note* when removing a global aliases that the argument must be quoted to prevent it from being expanded before being passed to the command. The **-s** *option causes* **unhash** *to remove suffix aliases.* The **-f** *option causes* **unhash** *to remove shell functions. The* **-d** *options causes* **unhash** *to remove named directories. If the* **-m** *flag is given* the arguments are taken as patterns (should be quoted) and all elements of the corresponding hash table with matching names will be removed.\",\n    \"args\": \"unhash [ -adfms ] name ...\"\n  },\n  \"unlimit\": {\n    \"shortDescription\": \"Remove resource limits\",\n    \"description\": \":   The resource limit for each *resource is set to the hard limit.* If the **-h** *flag is given and the shell has appropriate privileges,* the hard resource limit for each *resource is removed.* The resources of the shell process are only changed if the **-s** flag is given.\\n\\n    The **unlimit** *command is not made available by default when the* shell starts in a mode emulating another shell. It can be made available with the command `**zmodload -F zsh/rlimits b:unlimit***`.*\",\n    \"args\": \"unlimit [ -hs ] resource ...\"\n  },\n  \"unset\": {\n    \"shortDescription\": \"Unset values and attributes of variables\",\n    \"description\": \":   Each named parameter is unset. Local parameters remain local even if unset; they appear unset within scope, but the previous value will still reappear when the scope ends.\\n\\n    Individual elements of associative array parameters may be unset by using subscript syntax on *name, which should be quoted (or the entire command* prefixed with **noglob***) to protect the subscript from filename generation.*\\n\\n    If the **-m** *flag is specified the arguments are taken as patterns (should* be quoted) and all parameters with matching names are unset. Note that this cannot be used when unsetting associative array elements, as the subscript will be treated as part of the pattern.\\n\\n    The **-v** *flag specifies that name refers to parameters. This is the* default behaviour.\\n\\n    **unset -f** *is equivalent to* **unfunction***.*\",\n    \"args\": \"unset [ -fmv ] name ...\"\n  },\n  \"unsetopt\": {\n    \"shortDescription\": \"Unset shell options\",\n    \"description\": \":   Unset the options for the shell. All options specified either with flags or by name are unset. If no arguments are supplied, the names of all options currently unset are printed. If the **-m** *flag is given the arguments are taken as patterns* (which should be quoted to preserve them from being interpreted as glob patterns), and all options with names matching these patterns are unset.\",\n    \"args\": \"unsetopt [ {+|-}options | {+|-}o option_name ] [ name ... ]\"\n  },\n  \"vared\": {\n    \"shortDescription\": \"Edit shell variables\",\n    \"description\": \":   See the section `Zle Builtins` in *zshzle(1).*\",\n    \"args\": \"vared\"\n  },\n  \"wait\": {\n    \"shortDescription\": \"Wait for a process\",\n    \"description\": \":   Wait for the specified jobs or processes. If *job is not given* then all currently active child processes are waited for. Each *job can be either a job specification or the process ID* of a job in the job table. The exit status from this command is that of the job waited for. If *job represents an unknown job or process ID, a warning is printed* (unless the **POSIX_BUILTINS** *option is set) and the exit status is 127.*\\n\\n    It is possible to wait for recent processes (specified by process ID, not by job) that were running in the background even if the process has exited. Typically the process ID will be recorded by capturing the value of the variable **\\\\$!** *immediately after the process has been* started. There is a limit on the number of process IDs remembered by the shell; this is given by the value of the system configuration parameter **CHILD_MAX***. When this limit is reached, older process IDs* are discarded, least recently started processes first.\\n\\n    Note there is no protection against the process ID wrapping, i.e. if the wait is not executed soon enough there is a chance the process waited for is the wrong one. A conflict implies both process IDs have been generated by the shell, as other processes are not recorded, and that the user is potentially interested in both, so this problem is intrinsic to process IDs.\",\n    \"args\": \"wait [ job ... ]\"\n  },\n  \"whence\": {\n    \"shortDescription\": \"Locate a command\",\n    \"description\": \":   For each *name, indicate how it would be interpreted if used as a* command name.\\n\\n    If *name is not an alias, built-in command, external command, shell* function, hashed command, or a reserved word, the exit status shall be non-zero, and \\\\-- if **-v***,* **-c***, or* **-w** *was passed \\\\-- a message* will be written to standard output. (This is different from other shells that write that message to standard error.)\\n\\n    **whence** *is most useful when name is only the last path component* of a command, i.e. does not include a `**/***`; in particular, pattern* matching only succeeds if just the non-directory component of the command is passed.\\n\\n    **-v** Produce a more verbose report.\\n\\n    **-c**\\n\\n    :   Print the results in a **csh***-like format.* This takes precedence over **-v***.*\\n\\n    **-w**\\n\\n    :   For each *name, print `name***:** *word` where word* is one of **alias***,* **builtin***,* **command***,* **function***,* **hashed***,* **reserved** *or* **none***, according as name* corresponds to an alias, a built-in command, an external command, a shell function, a command defined with the **hash** *builtin, a* reserved word, or is not recognised. This takes precedence over **-v** *and* **-c***.*\\n\\n    **-f**\\n\\n    :   Causes the contents of a shell function to be displayed, which would otherwise not happen unless the **-c** flag were used.\\n\\n    **-p**\\n\\n    :   Do a path search for *name* even if it is an alias, reserved word, shell function or builtin.\\n\\n    **-a**\\n\\n    :   Do a search for all occurrences of *name* throughout the command path. Normally only the first occurrence is printed.\\n\\n    **-m**\\n\\n    :   The arguments are taken as patterns (pattern characters should be quoted), and the information is displayed for each command matching one of these patterns.\\n\\n    **-s**\\n\\n    :   If a pathname contains symlinks, print the symlink-free pathname as well.\\n\\n    **-S**\\n\\n    :   As **-s***, but if the pathname had to be resolved by following* multiple symlinks, the intermediate steps are printed, too. The symlink resolved at each step might be anywhere in the path.\\n\\n    **-x** *num*\\n\\n    :   Expand tabs when outputting shell functions using the **-c** *option.* This has the same effect as the **-x** *option to the* **functions** builtin.\",\n    \"args\": \"whence [ -vcwfpamsS ] [ -x num ] name ...\"\n  },\n  \"where\": {\n    \"shortDescription\": \"Locate a command\",\n    \"description\": \":   Equivalent to **whence -ca***.*\",\n    \"args\": \"where [ -wpmsS ] [ -x num ] name ...\"\n  },\n  \"which\": {\n    \"shortDescription\": \"Locate a command\",\n    \"description\": \":   Equivalent to **whence -c***.*\",\n    \"args\": \"which [ -wpamsS ] [ -x num ] name ...\"\n  },\n  \"zcompile\": {\n    \"shortDescription\": \"Compile functions\",\n    \"description\": \"**zcompile -t** *file \\\\[ name \\\\... \\\\]* This builtin command can be used to compile functions or scripts, storing the compiled form in a file, and to examine files containing the compiled form. This allows faster autoloading of functions and sourcing of scripts by avoiding parsing of the text when the files are read.\\n\\n> The first form (without the **-c***,* **-a** *or* **-t** *options) creates a* compiled file. If only the *file argument is given, the* output file has the name `*file***.zwc***` and will be placed in* the same directory as the *file. The shell will load the compiled* file instead of the normal function file when the function is autoloaded; see the section `Autoloading Functions` in *zshmisc(1)* for a description of how autoloaded functions are searched. The extension **.zwc** *stands for `zsh word code`.*\\n>\\n> If there is at least one *name argument, all the named files* are compiled into the output *file given as the first argument. If* *file does not end in* **.zwc***, this extension is automatically* appended. Files containing multiple compiled functions are called `digest` files, and are intended to be used as elements of the **FPATH***/***fpath** special array.\\n>\\n> The second form, with the **-c** *or* **-a** *options, writes the compiled* definitions for all the named functions into *file. For* **-c***, the* names must be functions currently defined in the shell, not those marked for autoloading. Undefined functions that are marked for autoloading may be written by using the **-a** *option, in which case the* **fpath** is searched and the contents of the definition files for those functions, if found, are compiled into *file. If both* **-c** *and* **-a** *are given, names of both defined functions and functions marked* for autoloading may be given. In either case, the functions in files written with the **-c** *or* **-a** *option will be autoloaded as if the* **KSH_AUTOLOAD** *option were unset.*\\n>\\n> The reason for handling loaded and not-yet-loaded functions with different options is that some definition files for autoloading define multiple functions, including the function with the same name as the file, and, at the end, call that function. In such cases the output of `**zcompile -c***` does not include the additional functions defined in* the file, and any other initialization code in the file is lost. Using `**zcompile -a***` captures all this extra information.*\\n>\\n> If the **-m** *option is combined with* **-c** *or* **-a***,* the *names are used as patterns and all functions whose names* match one of these patterns will be written. If no *name is given,* the definitions of all functions currently defined or marked as autoloaded will be written.\\n>\\n> Note the second form cannot be used for compiling functions that include redirections as part of the definition rather than within the body of the function; for example\\n>\\n> > fn1() { { ... } >~/logfile }\\n>\\n> can be compiled but\\n>\\n> > fn1() { ... } >~/logfile\\n>\\n> cannot. It is possible to use the first form of **zcompile** *to compile* autoloadable functions that include the full function definition instead of just the body of the function.\\n>\\n> The third form, with the **-t** *option, examines an existing* compiled file. Without further arguments, the names of the original files compiled into it are listed. The first line of output shows the version of the shell which compiled the file and how the file will be used (i.e. by reading it directly or by mapping it into memory). With arguments, nothing is output and the return status is set to zero if definitions for *all names were found in the compiled* file, and non-zero if the definition for at least one *name was not* found.\\n>\\n> Other options:\\n>\\n> **-U** Aliases are not expanded when compiling the *named files.*\\n>\\n> **-R**\\n>\\n> :   When the compiled file is read, its contents are copied into the shell\\\\'s memory, rather than memory-mapped (see **-M***). This* happens automatically on systems that do not support memory mapping.\\n>\\n>     When compiling scripts instead of autoloadable functions, it is often desirable to use this option; otherwise the whole file, including the code to define functions which have already been defined, will remain mapped, consequently wasting memory.\\n>\\n> **-M**\\n>\\n> :   The compiled file is mapped into the shell\\\\'s memory when read. This is done in such a way that multiple instances of the shell running on the same host will share this mapped file. If neither **-R** *nor* **-M** *is given, the* **zcompile** *builtin decides what to do based* on the size of the compiled file.\\n>\\n> **-k**\\n>\\n> **-z** These options are used when the compiled file contains functions which are to be autoloaded. If **-z** *is given, the* function will be autoloaded as if the **KSH_AUTOLOAD** *option is* *not set, even if it is set at the time the compiled file is* read, while if the **-k** *is given, the function will be loaded as if* **KSH_AUTOLOAD** *is set. These options also take precedence over* any **-k** *or* **-z** *options specified to the* **autoload** *builtin. If* neither of these options is given, the function will be loaded as determined by the setting of the **KSH_AUTOLOAD** *option at the time* the compiled file is read. These options may also appear as many times as necessary between the listed *names to specify the loading style of all following functions, up to* the next **-k** *or* **-z***.*\\n>\\n> The created file always contains two versions of the compiled format, one for big-endian machines and one for small-endian machines. The upshot of this is that the compiled file is machine independent and if it is read or mapped, only one half of the file is actually used (and mapped).\",\n    \"args\": \"zcompile [ -U ] [ -z | -k ] [ -R | -M ] file [ name ... ]\\n\\nzcompile -ca [ -m ] [ -R | -M ] file [ name ... ]\"\n  },\n  \"zformat\": {\n    \"shortDescription\": \"Format strings\",\n    \"description\": \":   See the section `The zsh/zutil Module` in *zshmodules(1).*\",\n    \"args\": \"zformat\"\n  },\n  \"zftp\": {\n    \"shortDescription\": \"Zsh FTP client\",\n    \"description\": \":   See the section `The zsh/zftp Module` in *zshmodules(1).*\",\n    \"args\": \"zftp\"\n  },\n  \"zle\": {\n    \"shortDescription\": \"Zsh line editor\",\n    \"description\": \":   See the section `Zle Builtins` in *zshzle(1).*\",\n    \"args\": \"zle\"\n  },\n  \"zmodload\": {\n    \"shortDescription\": \"Load a module\",\n    \"description\": \"**zmodload** **-R** *modalias \\\\...* Performs operations relating to zsh\\\\'s loadable modules. Loading of modules while the shell is running (`dynamical loading`) is not available on all operating systems, or on all installations on a particular operating system, although the **zmodload** *command itself is always* available and can be used to manipulate modules built into versions of the shell executable without dynamical loading.\\n\\n> Without arguments the names of all currently loaded binary modules are printed. The **-L** *option causes this list to be in the form of a* series of **zmodload** *commands. Forms with arguments are:*\\n>\\n> **zmodload** *\\\\[* **-is** *\\\\] name \\\\...*\\n>\\n> **zmodload** **-u** *\\\\[* **-i** *\\\\] name \\\\...* In the simplest case, **zmodload** *loads a binary module. The module must* be in a file with a name consisting of the specified *name followed by* a standard suffix, usually `**.so***` (`***.sl***` on HPUX).* If the module to be loaded is already loaded the duplicate module is ignored. If **zmodload** *detects an inconsistency, such as an* invalid module name or circular dependency list, the current code block is aborted. If it is available, the module is loaded if necessary, while if it is not available, non-zero status is silently returned. The option **-i** *is accepted for compatibility but has no effect.*\\n>\\n> > The *named module is searched for in the same way a command is, using* **\\\\$module_path** *instead of* **\\\\$path***. However, the path search is* performed even when the module name contains a `**/***`, which it usually does.* There is no way to prevent the path search.\\n> >\\n> > If the module supports features (see below), **zmodload** *tries to* enable all features when loading a module. If the module was successfully loaded but not all features could be enabled, **zmodload** *returns status 2.*\\n> >\\n> > If the option **-s** *is given, no error is printed if the module was not* available (though other errors indicating a problem with the module are printed). The return status indicates if the module was loaded. This is appropriate if the caller considers the module optional.\\n> >\\n> > With **-u***,* **zmodload** *unloads modules. The same name* must be given that was given when the module was loaded, but it is not necessary for the module to exist in the file system. The **-i** *option suppresses the error if the module is already* unloaded (or was never loaded).\\n> >\\n> > Each module has a boot and a cleanup function. The module will not be loaded if its boot function fails. Similarly a module can only be unloaded if its cleanup function runs successfully.\\n>\\n> **zmodload -F** *\\\\[* **-almLe**  **-P** *param \\\\] module \\\\[ \\\\[***+-***\\\\]feature \\\\... \\\\]*\\n>\\n> :   **zmodload -F** *allows more selective control over the features provided* by modules. With no options apart from **-F***, the module named* *module is loaded, if it was not already loaded, and the list of* *features is set to the required state. If no* *features are specified, the module is loaded, if it was not already* loaded, but the state of features is unchanged. Each feature may be preceded by a **+** *to turn the feature on, or* **-** *to turn it* off; the **+** *is assumed if neither character is present.* Any feature not explicitly mentioned is left in its current state; if the module was not previously loaded this means any such features will remain disabled. The return status is zero if all features were set, 1 if the module failed to load, and 2 if some features could not be set (for example, a parameter couldn\\\\'t be added because there was a different parameter of the same name) but the module was loaded.\\n>\\n>     The standard features are builtins, conditions, parameters and math functions; these are indicated by the prefix `**b:***`, `***c:***`* (`**C:***` for an infix condition), `***p:***` and `***f:***`, respectively,* followed by the name that the corresponding feature would have in the shell. For example, `**b:strftime***` indicates a builtin named* **strftime** *and* **p:EPOCHSECONDS** *indicates a parameter named* **EPOCHSECONDS***. The module may provide other (`abstract`) features of* its own as indicated by its documentation; these have no prefix.\\n>\\n>     With **-l** *or* **-L***, features provided by the module are listed. With* **-l** *alone, a list of features together with their states is shown, one* feature per line. With **-L** *alone, a* **zmodload -F** *command that would* cause enabled features of the module to be turned on is shown. With **-lL***, a* **zmodload -F** *command that would cause all the features to be* set to their current state is shown. If one of these combinations is given with the option **-P** *param then the parameter param is set to an* array of features, either features together with their state or (if **-L** *alone is given) enabled features.*\\n>\\n>     With the option **-L** *the module name may be omitted; then a list* of all enabled features for all modules providing features is printed in the form of **zmodload -F** *commands. If* **-l** *is also given,* the state of both enabled and disabled features is output in that form.\\n>\\n>     A set of features may be provided together with **-l** *or* **-L** *and a* module name; in that case only the state of those features is considered. Each feature may be preceded by **+** *or* **-** *but the* character has no effect. If no set of features is provided, all features are considered.\\n>\\n>     With **-e***, the command first tests that the module is loaded;* if it is not, status 1 is returned. If the module is loaded, the list of features given as an argument is examined. Any feature given with no prefix is simply tested to see if the module provides it; any feature given with a prefix **+** *or* **-** *is tested to* see if is provided and in the given state. If the tests on all features in the list succeed, status 0 is returned, else status 1.\\n>\\n>     With **-m***, each entry in the given list of features is taken* as a pattern to be matched against the list of features provided by the module. An initial **+** *or* **-** *must be given explicitly.* This may not be combined with the **-a** *option as autoloads must* be specified explicitly.\\n>\\n>     With **-a***, the given list of features is marked for autoload from* the specified module, which may not yet be loaded. An optional **+** may appear before the feature name. If the feature is prefixed with **-***, any existing autoload is removed. The options* **-l** *and* **-L** may be used to list autoloads. Autoloading is specific to individual features; when the module is loaded only the requested feature is enabled. Autoload requests are preserved if the module is subsequently unloaded until an explicit `**zmodload -Fa** *module* **-***feature` is issued. It is not an error to request an autoload* for a feature of a module that is already loaded.\\n>\\n>     When the module is loaded each autoload is checked against the features actually provided by the module; if the feature is not provided the autoload request is deleted. A warning message is output; if the module is being loaded to provide a different feature, and that autoload is successful, there is no effect on the status of the current command. If the module is already loaded at the time when **zmodload -Fa** *is* run, an error message is printed and status 1 returned.\\n>\\n>     **zmodload -Fa** *can be used with the* **-l***,* **-L***,* **-e** *and* **-P** *options for listing and testing the existence of autoloadable* features. In this case **-l** *is ignored if* **-L** *is specified.* **zmodload -FaL** *with no module name lists autoloads for all modules.*\\n>\\n>     Note that only standard features as described above can be autoloaded; other features require the module to be loaded before enabling.\\n>\\n> **zmodload** **-d** *\\\\[* **-L** *\\\\] \\\\[ name \\\\]*\\n>\\n> **zmodload** **-d** *name dep \\\\...*\\n>\\n> **zmodload** **-ud** *name \\\\[ dep \\\\... \\\\]* The **-d** *option can be used to specify module dependencies. The modules* named in the second and subsequent arguments will be loaded before the module named in the first argument.\\n>\\n> > With **-d** *and one argument, all dependencies for that module are listed.* With **-d** *and no arguments, all module dependencies are listed. This* listing is by default in a Makefile-like format. The **-L** *option* changes this format to a list of **zmodload -d** *commands.*\\n> >\\n> > If **-d** *and* **-u** *are both used, dependencies are removed. If only one* argument is given, all dependencies for that module are removed.\\n>\\n> **zmodload** **-ab** *\\\\[* **-L** *\\\\]*\\n>\\n> **zmodload** **-ab** *\\\\[* **-i** *\\\\] name \\\\[ builtin \\\\... \\\\]*\\n>\\n> **zmodload** **-ub** *\\\\[* **-i** *\\\\] builtin \\\\...* The **-ab** *option defines autoloaded builtins. It defines the specified* *builtins. When any of those builtins is called, the module specified* in the first argument is loaded and all its features are enabled (for selective control of features use `**zmodload -F -a***` as described* above). If only the *name is given, one builtin is defined, with* the same name as the module. **-i** *suppresses the error if the builtin* is already defined or autoloaded, but not if another builtin of the same name is already defined.\\n>\\n> > With **-ab** *and no arguments, all autoloaded builtins are listed, with the* module name (if different) shown in parentheses after the builtin name. The **-L** *option changes this format to a list of* **zmodload -a** commands.\\n> >\\n> > If **-b** *is used together with the* **-u** *option, it removes builtins* previously defined with **-ab***. This is only possible if the builtin is* not yet loaded. **-i** *suppresses the error if the builtin is already* removed (or never existed).\\n> >\\n> > Autoload requests are retained if the module is subsequently unloaded until an explicit `**zmodload -ub** *builtin` is issued.*\\n>\\n> **zmodload** **-ac** *\\\\[* **-IL** *\\\\]*\\n>\\n> **zmodload** **-ac** *\\\\[* **-iI** *\\\\] name \\\\[ cond \\\\... \\\\]*\\n>\\n> **zmodload** **-uc** *\\\\[* **-iI** *\\\\] cond \\\\...* The **-ac** *option is used to define autoloaded condition codes. The* *cond strings give the names of the conditions defined by the* module. The optional **-I** *option is used to define infix condition* names. Without this option prefix condition names are defined.\\n>\\n> > If given no condition names, all defined names are listed (as a series of **zmodload** *commands if the* **-L** *option is given).*\\n> >\\n> > The **-uc** *option removes definitions for autoloaded conditions.*\\n>\\n> **zmodload** **-ap** *\\\\[* **-L** *\\\\]*\\n>\\n> **zmodload** **-ap** *\\\\[* **-i** *\\\\] name \\\\[ parameter \\\\... \\\\]*\\n>\\n> **zmodload** **-up** *\\\\[* **-i** *\\\\] parameter \\\\...* The **-p** *option is like the* **-b** *and* **-c** *options, but makes* **zmodload** *work on autoloaded parameters instead.*\\n>\\n> **zmodload** **-af** *\\\\[* **-L** *\\\\]*\\n>\\n> **zmodload** **-af** *\\\\[* **-i** *\\\\] name \\\\[ function \\\\... \\\\]*\\n>\\n> **zmodload** **-uf** *\\\\[* **-i** *\\\\] function \\\\...* The **-f** *option is like the* **-b***,* **-p***, and* **-c** *options, but* makes **zmodload** *work on autoloaded math functions instead.*\\n>\\n> **zmodload** **-a** *\\\\[* **-L** *\\\\]*\\n>\\n> **zmodload** **-a** *\\\\[* **-i** *\\\\] name \\\\[ builtin \\\\... \\\\]*\\n>\\n> **zmodload** **-ua** *\\\\[* **-i** *\\\\] builtin \\\\...* Equivalent to **-ab** *and* **-ub***.*\\n>\\n> **zmodload -e** *\\\\[* **-A** *\\\\] \\\\[ string \\\\... \\\\]*\\n>\\n> :   The **-e** *option without arguments lists all loaded modules; if the* **-A** option is also given, module aliases corresponding to loaded modules are also shown. If arguments are provided, nothing is printed; the return status is set to zero if all *strings given as arguments* are names of loaded modules and to one if at least on *string is not* the name of a loaded module. This can be used to test for the availability of things implemented by modules. In this case, any aliases are automatically resolved and the **-A** *flag is not used.*\\n>\\n> **zmodload**  **-A** *\\\\[* **-L** *\\\\] \\\\[ modalias\\\\[***=***module\\\\] \\\\... \\\\]*\\n>\\n> :   For each argument, if both *modalias and module are given,* define *modalias to be an alias for the module module.* If the module *modalias is ever subsequently requested, either via a* call to **zmodload** *or implicitly, the shell will attempt to load* *module instead. If module is not given, show the definition of* *modalias. If no arguments are given, list all defined module aliases.* When listing, if the **-L** *flag was also given, list the definition as a* **zmodload** *command to recreate the alias.*\\n>\\n>     The existence of aliases for modules is completely independent of whether the name resolved is actually loaded as a module: while the alias exists, loading and unloading the module under any alias has exactly the same effect as using the resolved name, and does not affect the connection between the alias and the resolved name which can be removed either by **zmodload -R** *or by redefining the alias. Chains of aliases (i.e. where* the first resolved name is itself an alias) are valid so long as these are not circular. As the aliases take the same format as module names, they may include path separators: in this case, there is no requirement for any part of the path named to exist as the alias will be resolved first. For example, `**any/old/alias***` is always a valid alias.*\\n>\\n>     Dependencies added to aliased modules are actually added to the resolved module; these remain if the alias is removed. It is valid to create an alias whose name is one of the standard shell modules and which resolves to a different module. However, if a module has dependencies, it will not be possible to use the module name as an alias as the module will already be marked as a loadable module in its own right.\\n>\\n>     Apart from the above, aliases can be used in the **zmodload** *command* anywhere module names are required. However, aliases will not be shown in lists of loaded modules with a bare `**zmodload***`.*\\n>\\n> **zmodload**  **-R** *modalias \\\\...* \\n>\\n> :   For each *modalias argument that was previously defined as a module* alias via **zmodload -A***, delete the alias. If any was not defined, an* error is caused and the remainder of the line is ignored.\\n>\\n> Note that **zsh** *makes no distinction between modules that were linked* into the shell and modules that are loaded dynamically. In both cases this builtin command has to be used to make available the builtins and other things defined by modules (unless the module is autoloaded on these definitions). This is true even for systems that don\\\\'t support dynamic loading of modules.\",\n    \"args\": \"zmodload [ -a [ -bcpf [ -I ] ] ] [ -iL ] ...\\n\\nzmodload -u [ -abcdpf [ -I ] ] [ -iL ] ...\\n\\nzmodload -A [ -L ] [ modalias[=module] ... ]\"\n  },\n  \"zparseopts\": {\n    \"shortDescription\": \"Parse options\",\n    \"description\": \":   See the section `The zsh/zutil Module` in *zshmodules(1).*\",\n    \"args\": \"zparseopts\"\n  },\n  \"zprof\": {\n    \"shortDescription\": \"Zsh profiler\",\n    \"description\": \":   See the section `The zsh/zprof Module` in *zshmodules(1).*\",\n    \"args\": \"zprof\"\n  },\n  \"zpty\": {\n    \"shortDescription\": \"Zsh pseudo terminal\",\n    \"description\": \":   See the section `The zsh/zpty Module` in *zshmodules(1).*\",\n    \"args\": \"zpty\"\n  },\n  \"zregexparse\": {\n    \"shortDescription\": \"Parse regex\",\n    \"description\": \":   See the section `The zsh/zutil Module` in *zshmodules(1).*\",\n    \"args\": \"zregexparse\"\n  },\n  \"zsocket\": {\n    \"shortDescription\": \"Zsh socket interface\",\n    \"description\": \":   See the section `The zsh/net/socket Module` in *zshmodules(1).*\",\n    \"args\": \"zsocket\"\n  },\n  \"zstyle\": {\n    \"shortDescription\": \"Define styles\",\n    \"description\": \":   See the section `The zsh/zutil Module` in *zshmodules(1).*\",\n    \"args\": \"zstyle\"\n  },\n  \"ztcp\": {\n    \"shortDescription\": \"Manipulate TCP sockets\",\n    \"description\": \":   See the section `The zsh/net/tcp Module` in *zshmodules(1).*\",\n    \"args\": \"ztcp\"\n  }\n} as const;"
  },
  {
    "path": "extensions/terminal-suggest/src/terminalSuggestMain.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ExecOptionsWithStringEncoding } from 'child_process';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as vscode from 'vscode';\nimport cdSpec from './completions/cd';\nimport codeCompletionSpec from './completions/code';\nimport codeInsidersCompletionSpec from './completions/code-insiders';\nimport npxCompletionSpec from './completions/npx';\nimport setLocationSpec from './completions/set-location';\nimport { upstreamSpecs } from './constants';\nimport { ITerminalEnvironment, PathExecutableCache, watchPathDirectories } from './env/pathExecutableCache';\nimport { osIsWindows } from './helpers/os';\nimport { getFriendlyResourcePath } from './helpers/uri';\nimport { getBashGlobals } from './shell/bash';\nimport { getFishGlobals } from './shell/fish';\nimport { getPwshGlobals } from './shell/pwsh';\nimport { getZshGlobals } from './shell/zsh';\nimport { getTokenType, TokenType } from './tokens';\nimport type { ICompletionResource } from './types';\nimport { createCompletionItem } from './helpers/completionItem';\nimport { getFigSuggestions } from './fig/figInterface';\nimport { executeCommand, executeCommandTimeout, IFigExecuteExternals } from './fig/execute';\nimport { createTimeoutPromise } from './helpers/promise';\nimport codeTunnelCompletionSpec from './completions/code-tunnel';\nimport codeTunnelInsidersCompletionSpec from './completions/code-tunnel-insiders';\n\nexport const enum TerminalShellType {\n\tBash = 'bash',\n\tFish = 'fish',\n\tZsh = 'zsh',\n\tPowerShell = 'pwsh',\n\tPython = 'python'\n}\n\nconst isWindows = osIsWindows();\nconst cachedGlobals: Map<TerminalShellType, ICompletionResource[] | undefined> = new Map();\nlet pathExecutableCache: PathExecutableCache;\n\nexport const availableSpecs: Fig.Spec[] = [\n\tcdSpec,\n\tcodeInsidersCompletionSpec,\n\tcodeCompletionSpec,\n\tcodeTunnelCompletionSpec,\n\tcodeTunnelInsidersCompletionSpec,\n\tnpxCompletionSpec,\n\tsetLocationSpec,\n];\nfor (const spec of upstreamSpecs) {\n\tavailableSpecs.push(require(`./completions/upstream/${spec}`).default);\n}\n\nconst getShellSpecificGlobals: Map<TerminalShellType, (options: ExecOptionsWithStringEncoding, existingCommands?: Set<string>) => Promise<(string | ICompletionResource)[]>> = new Map([\n\t[TerminalShellType.Bash, getBashGlobals],\n\t[TerminalShellType.Zsh, getZshGlobals],\n\t// TODO: Ghost text in the command line prevents completions from working ATM for fish\n\t[TerminalShellType.Fish, getFishGlobals],\n\t[TerminalShellType.PowerShell, getPwshGlobals],\n]);\n\nasync function getShellGlobals(shellType: TerminalShellType, existingCommands?: Set<string>): Promise<ICompletionResource[] | undefined> {\n\ttry {\n\t\tconst cachedCommands = cachedGlobals.get(shellType);\n\t\tif (cachedCommands) {\n\t\t\treturn cachedCommands;\n\t\t}\n\t\tif (!shellType) {\n\t\t\treturn;\n\t\t}\n\t\tconst options: ExecOptionsWithStringEncoding = { encoding: 'utf-8', shell: shellType };\n\t\tconst mixedCommands: (string | ICompletionResource)[] | undefined = await getShellSpecificGlobals.get(shellType)?.(options, existingCommands);\n\t\tconst normalizedCommands = mixedCommands?.map(command => typeof command === 'string' ? ({ label: command }) : command);\n\t\tcachedGlobals.set(shellType, normalizedCommands);\n\t\treturn normalizedCommands;\n\n\t} catch (error) {\n\t\tconsole.error('Error fetching builtin commands:', error);\n\t\treturn;\n\t}\n}\n\n\nexport async function activate(context: vscode.ExtensionContext) {\n\tpathExecutableCache = new PathExecutableCache();\n\tcontext.subscriptions.push(pathExecutableCache);\n\tlet currentTerminalEnv: ITerminalEnvironment = process.env;\n\tcontext.subscriptions.push(vscode.window.registerTerminalCompletionProvider({\n\t\tid: 'terminal-suggest',\n\t\tasync provideTerminalCompletions(terminal: vscode.Terminal, terminalContext: vscode.TerminalCompletionContext, token: vscode.CancellationToken): Promise<vscode.TerminalCompletionItem[] | vscode.TerminalCompletionList | undefined> {\n\t\t\tcurrentTerminalEnv = terminal.shellIntegration?.env?.value ?? process.env;\n\t\t\tif (token.isCancellationRequested) {\n\t\t\t\tconsole.debug('#terminalCompletions token cancellation requested');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst shellType: string | undefined = 'shell' in terminal.state ? terminal.state.shell as string : undefined;\n\t\t\tconst terminalShellType = getTerminalShellType(shellType);\n\t\t\tif (!terminalShellType) {\n\t\t\t\tconsole.debug('#terminalCompletions No shell type found for terminal');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst commandsInPath = await pathExecutableCache.getExecutablesInPath(terminal.shellIntegration?.env?.value);\n\t\t\tconst shellGlobals = await getShellGlobals(terminalShellType, commandsInPath?.labels) ?? [];\n\t\t\tif (!commandsInPath?.completionResources) {\n\t\t\t\tconsole.debug('#terminalCompletions No commands found in path');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Order is important here, add shell globals first so they are prioritized over path commands\n\t\t\tconst commands = [...shellGlobals, ...commandsInPath.completionResources];\n\t\t\tconst prefix = getPrefix(terminalContext.commandLine, terminalContext.cursorPosition);\n\t\t\tconst pathSeparator = isWindows ? '\\\\' : '/';\n\t\t\tconst tokenType = getTokenType(terminalContext, terminalShellType);\n\t\t\tconst result = await Promise.race([\n\t\t\t\tgetCompletionItemsFromSpecs(\n\t\t\t\t\tavailableSpecs,\n\t\t\t\t\tterminalContext,\n\t\t\t\t\tcommands,\n\t\t\t\t\tprefix,\n\t\t\t\t\ttokenType,\n\t\t\t\t\tterminal.shellIntegration?.cwd,\n\t\t\t\t\tgetEnvAsRecord(currentTerminalEnv),\n\t\t\t\t\tterminal.name,\n\t\t\t\t\ttoken\n\t\t\t\t),\n\t\t\t\tcreateTimeoutPromise(300, undefined)\n\t\t\t]);\n\t\t\tif (!result) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (terminal.shellIntegration?.env) {\n\t\t\t\tconst homeDirCompletion = result.items.find(i => i.label === '~');\n\t\t\t\tif (homeDirCompletion && terminal.shellIntegration.env?.value?.HOME) {\n\t\t\t\t\thomeDirCompletion.documentation = getFriendlyResourcePath(vscode.Uri.file(terminal.shellIntegration.env.value.HOME), pathSeparator, vscode.TerminalCompletionItemKind.Folder);\n\t\t\t\t\thomeDirCompletion.kind = vscode.TerminalCompletionItemKind.Folder;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result.cwd && (result.filesRequested || result.foldersRequested)) {\n\t\t\t\treturn new vscode.TerminalCompletionList(result.items, { filesRequested: result.filesRequested, foldersRequested: result.foldersRequested, fileExtensions: result.fileExtensions, cwd: result.cwd, env: terminal.shellIntegration?.env?.value });\n\t\t\t}\n\t\t\treturn result.items;\n\t\t}\n\t}, '/', '\\\\'));\n\tawait watchPathDirectories(context, currentTerminalEnv, pathExecutableCache);\n}\n\n/**\n * Adjusts the current working directory based on a given prefix if it is a folder.\n * @param prefix - The folder path prefix.\n * @param currentCwd - The current working directory.\n * @returns The new working directory.\n */\nexport async function resolveCwdFromPrefix(prefix: string, currentCwd?: vscode.Uri): Promise<vscode.Uri | undefined> {\n\tif (!currentCwd) {\n\t\treturn;\n\t}\n\ttry {\n\t\t// Get the nearest folder path from the prefix. This ignores everything after the `/` as\n\t\t// they are what triggers changes in the directory.\n\t\tlet lastSlashIndex: number;\n\t\tif (isWindows) {\n\t\t\t// TODO: This support is very basic, ideally the slashes supported would depend upon the\n\t\t\t//       shell type. For example git bash under Windows does not allow using \\ as a path\n\t\t\t//       separator.\n\t\t\tlastSlashIndex = prefix.lastIndexOf('\\\\');\n\t\t\tif (lastSlashIndex === -1) {\n\t\t\t\tlastSlashIndex = prefix.lastIndexOf('/');\n\t\t\t}\n\t\t} else {\n\t\t\tlastSlashIndex = prefix.lastIndexOf('/');\n\t\t}\n\t\tconst relativeFolder = lastSlashIndex === -1 ? '' : prefix.slice(0, lastSlashIndex);\n\n\t\t// Resolve the absolute path of the prefix\n\t\tconst resolvedPath = path.resolve(currentCwd?.fsPath, relativeFolder);\n\n\t\tconst stat = await fs.stat(resolvedPath);\n\n\t\t// Check if the resolved path exists and is a directory\n\t\tif (stat.isDirectory()) {\n\t\t\treturn currentCwd.with({ path: resolvedPath });\n\t\t}\n\t} catch {\n\t\t// Ignore errors\n\t}\n\n\t// No valid path found\n\treturn undefined;\n}\n\nfunction getPrefix(commandLine: string, cursorPosition: number): string {\n\t// Return an empty string if the command line is empty after trimming\n\tif (commandLine.trim() === '') {\n\t\treturn '';\n\t}\n\n\t// Check if cursor is not at the end and there's non-whitespace after the cursor\n\tif (cursorPosition < commandLine.length && /\\S/.test(commandLine[cursorPosition])) {\n\t\treturn '';\n\t}\n\n\t// Extract the part of the line up to the cursor position\n\tconst beforeCursor = commandLine.slice(0, cursorPosition);\n\n\t// Find the last sequence of non-whitespace characters before the cursor\n\tconst match = beforeCursor.match(/(\\S+)\\s*$/);\n\n\t// Return the match if found, otherwise undefined\n\treturn match ? match[0] : '';\n}\n\nexport function asArray<T>(x: T | T[]): T[];\nexport function asArray<T>(x: T | readonly T[]): readonly T[];\nexport function asArray<T>(x: T | T[]): T[] {\n\treturn Array.isArray(x) ? x : [x];\n}\n\nexport async function getCompletionItemsFromSpecs(\n\tspecs: Fig.Spec[],\n\tterminalContext: vscode.TerminalCompletionContext,\n\tavailableCommands: ICompletionResource[],\n\tprefix: string,\n\ttokenType: TokenType,\n\tshellIntegrationCwd: vscode.Uri | undefined,\n\tenv: Record<string, string>,\n\tname: string,\n\ttoken?: vscode.CancellationToken,\n\texecuteExternals?: IFigExecuteExternals,\n): Promise<{ items: vscode.TerminalCompletionItem[]; filesRequested: boolean; foldersRequested: boolean; fileExtensions?: string[]; cwd?: vscode.Uri }> {\n\tconst items: vscode.TerminalCompletionItem[] = [];\n\tlet filesRequested = false;\n\tlet foldersRequested = false;\n\tlet hasCurrentArg = false;\n\tlet fileExtensions: string[] | undefined;\n\n\tlet precedingText = terminalContext.commandLine.slice(0, terminalContext.cursorPosition + 1);\n\tif (isWindows) {\n\t\tconst spaceIndex = precedingText.indexOf(' ');\n\t\tconst commandEndIndex = spaceIndex === -1 ? precedingText.length : spaceIndex;\n\t\tconst lastDotIndex = precedingText.lastIndexOf('.', commandEndIndex);\n\t\tif (lastDotIndex > 0) { // Don't treat dotfiles as extensions\n\t\t\tprecedingText = precedingText.substring(0, lastDotIndex) + precedingText.substring(spaceIndex);\n\t\t}\n\t}\n\n\tconst result = await getFigSuggestions(specs, terminalContext, availableCommands, prefix, tokenType, shellIntegrationCwd, env, name, precedingText, executeExternals ?? { executeCommand, executeCommandTimeout }, token);\n\tif (result) {\n\t\thasCurrentArg ||= result.hasCurrentArg;\n\t\tfilesRequested ||= result.filesRequested;\n\t\tfoldersRequested ||= result.foldersRequested;\n\t\tfileExtensions = result.fileExtensions;\n\t\tif (result.items) {\n\t\t\titems.push(...result.items);\n\t\t}\n\t}\n\n\tif (tokenType === TokenType.Command) {\n\t\t// Include builitin/available commands in the results\n\t\tconst labels = new Set(items.map((i) => typeof i.label === 'string' ? i.label : i.label.label));\n\t\tfor (const command of availableCommands) {\n\t\t\tconst commandTextLabel = typeof command.label === 'string' ? command.label : command.label.label;\n\t\t\tif (!labels.has(commandTextLabel)) {\n\t\t\t\titems.push(createCompletionItem(\n\t\t\t\t\tterminalContext.cursorPosition,\n\t\t\t\t\tprefix,\n\t\t\t\t\tcommand,\n\t\t\t\t\tcommand.detail,\n\t\t\t\t\tcommand.documentation,\n\t\t\t\t\tvscode.TerminalCompletionItemKind.Method\n\t\t\t\t));\n\t\t\t\tlabels.add(commandTextLabel);\n\t\t\t} else {\n\t\t\t\tconst existingItem = items.find(i => (typeof i.label === 'string' ? i.label : i.label.label) === commandTextLabel);\n\t\t\t\tif (!existingItem) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst preferredItem = compareItems(existingItem, command);\n\t\t\t\tif (preferredItem) {\n\t\t\t\t\tpreferredItem.kind = vscode.TerminalCompletionItemKind.Method;\n\t\t\t\t\titems.splice(items.indexOf(existingItem), 1, preferredItem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfilesRequested = true;\n\t\tfoldersRequested = true;\n\t}\n\t// For arguments when no fig suggestions are found these are fallback suggestions\n\telse if (!items.length && !filesRequested && !foldersRequested && !hasCurrentArg) {\n\t\tif (terminalContext.allowFallbackCompletions) {\n\t\t\tfilesRequested = true;\n\t\t\tfoldersRequested = true;\n\t\t}\n\t}\n\n\tlet cwd: vscode.Uri | undefined;\n\tif (shellIntegrationCwd && (filesRequested || foldersRequested)) {\n\t\tcwd = await resolveCwdFromPrefix(prefix, shellIntegrationCwd);\n\t}\n\n\treturn { items, filesRequested, foldersRequested, fileExtensions, cwd };\n}\n\nfunction compareItems(existingItem: vscode.TerminalCompletionItem, command: ICompletionResource): vscode.TerminalCompletionItem | undefined {\n\tlet score = typeof command.label === 'object' ? (command.label.detail !== undefined ? 1 : 0) : 0;\n\tscore += typeof command.label === 'object' ? (command.label.description !== undefined ? 2 : 0) : 0;\n\tscore += command.documentation ? typeof command.documentation === 'string' ? 2 : 3 : 0;\n\tif (score > 0) {\n\t\tscore -= typeof existingItem.label === 'object' ? (existingItem.label.detail !== undefined ? 1 : 0) : 0;\n\t\tscore -= typeof existingItem.label === 'object' ? (existingItem.label.description !== undefined ? 2 : 0) : 0;\n\t\tscore -= existingItem.documentation ? typeof existingItem.documentation === 'string' ? 2 : 3 : 0;\n\t\tif (score >= 0) {\n\t\t\treturn { ...command, replacementIndex: existingItem.replacementIndex, replacementLength: existingItem.replacementLength };\n\t\t}\n\t}\n}\n\nfunction getEnvAsRecord(shellIntegrationEnv: ITerminalEnvironment): Record<string, string> {\n\tconst env: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(shellIntegrationEnv ?? process.env)) {\n\t\tif (typeof value === 'string') {\n\t\t\tenv[key] = value;\n\t\t}\n\t}\n\tif (!shellIntegrationEnv) {\n\t\tsanitizeProcessEnvironment(env);\n\t}\n\treturn env;\n}\n\nfunction getTerminalShellType(shellType: string | undefined): TerminalShellType | undefined {\n\tswitch (shellType) {\n\t\tcase 'bash':\n\t\t\treturn TerminalShellType.Bash;\n\t\tcase 'zsh':\n\t\t\treturn TerminalShellType.Zsh;\n\t\tcase 'pwsh':\n\t\t\treturn TerminalShellType.PowerShell;\n\t\tcase 'fish':\n\t\t\treturn TerminalShellType.Fish;\n\t\tcase 'python':\n\t\t\treturn TerminalShellType.Python;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nexport function sanitizeProcessEnvironment(env: Record<string, string>, ...preserve: string[]): void {\n\tconst set = preserve.reduce<Record<string, boolean>>((set, key) => {\n\t\tset[key] = true;\n\t\treturn set;\n\t}, {});\n\tconst keysToRemove = [\n\t\t/^ELECTRON_.$/,\n\t\t/^VSCODE_(?!(PORTABLE|SHELL_LOGIN|ENV_REPLACE|ENV_APPEND|ENV_PREPEND)).$/,\n\t\t/^SNAP(|_.*)$/,\n\t\t/^GDK_PIXBUF_.$/,\n\t];\n\tconst envKeys = Object.keys(env);\n\tenvKeys\n\t\t.filter(key => !set[key])\n\t\t.forEach(envKey => {\n\t\t\tfor (let i = 0; i < keysToRemove.length; i++) {\n\t\t\t\tif (envKey.search(keysToRemove[i]) !== -1) {\n\t\t\t\t\tdelete env[envKey];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/cd.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport cdSpec from '../../completions/cd';\nimport { testPaths, type ISuiteSpec } from '../helpers';\n\nconst expectedCompletions = ['-'];\nconst cdExpectedCompletions = [{ label: 'cd', description: (cdSpec as any).description }];\nexport const cdTestSuiteSpec: ISuiteSpec = {\n\tname: 'cd',\n\tcompletionSpecs: cdSpec,\n\tavailableCommands: 'cd',\n\ttestSpecs: [\n\t\t// Typing a path\n\t\t{ input: '.|', expectedCompletions: cdExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: './|', expectedCompletions: cdExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: './.|', expectedCompletions: cdExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 'c|', expectedCompletions: cdExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'cd|', expectedCompletions: cdExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Basic arguments\n\t\t{ input: 'cd |', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: 'cd -|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\n\t\t// Relative paths\n\t\t{ input: 'cd c|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: 'cd child|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: 'cd .|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: 'cd ./|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: 'cd ./child|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: 'cd ..|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\n\t\t// Relative directories (changes cwd due to /)\n\t\t{ input: 'cd child/|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwdChild } },\n\t\t{ input: 'cd ../|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwdParent } },\n\t\t{ input: 'cd ../sibling|', expectedCompletions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwdParent } },\n\t]\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/code-insiders.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport codeInsidersCompletionSpec from '../../completions/code-insiders';\nimport type { ISuiteSpec } from '../helpers';\nimport { createCodeTestSpecs } from './code.test';\n\nexport const codeInsidersTestSuite: ISuiteSpec = {\n\tname: 'code-insiders',\n\tcompletionSpecs: codeInsidersCompletionSpec,\n\tavailableCommands: 'code-insiders',\n\ttestSpecs: createCodeTestSpecs('code-insiders')\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/code.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport codeCompletionSpec from '../../completions/code';\nimport { testPaths, type ISuiteSpec, type ITestSpec } from '../helpers';\nimport codeInsidersCompletionSpec from '../../completions/code-insiders';\n\nexport const codeSpecOptionsAndSubcommands = [\n\t'-a <folder>',\n\t'-d <file> <file>',\n\t'-g <file:line[:character]>',\n\t'-h',\n\t'-m <path1> <path2> <base> <result>',\n\t'-n',\n\t'-r',\n\t'-s',\n\t'-v',\n\t'-w',\n\t'-',\n\t'--add <folder>',\n\t'--category <category>',\n\t'--diff <file> <file>',\n\t'--disable-extension <extension-id>',\n\t'--disable-extensions',\n\t'--disable-gpu',\n\t'--enable-proposed-api',\n\t'--extensions-dir <dir>',\n\t'--goto <file:line[:character]>',\n\t'--help',\n\t'--inspect-brk-extensions <port>',\n\t'--inspect-extensions <port>',\n\t'--install-extension <extension-id[@version] | path-to-vsix>',\n\t'--list-extensions',\n\t'--locale <locale>',\n\t'--locate-shell-integration-path <shell>',\n\t'--log <level>',\n\t'--max-memory <memory>',\n\t'--merge <path1> <path2> <base> <result>',\n\t'--new-window',\n\t'--pre-release',\n\t'--prof-startup',\n\t'--profile <settingsProfileName>',\n\t'--reuse-window',\n\t'--show-versions',\n\t'--status',\n\t'--sync <sync>',\n\t'--telemetry',\n\t'--uninstall-extension <extension-id>',\n\t'--user-data-dir <dir>',\n\t'--verbose',\n\t'--version',\n\t'--wait',\n\t'tunnel',\n\t'serve-web',\n\t'help',\n\t'status',\n\t'version'\n];\n\nexport function createCodeTestSpecs(executable: string): ITestSpec[] {\n\tconst localeOptions = ['bg', 'de', 'en', 'es', 'fr', 'hu', 'it', 'ja', 'ko', 'pt-br', 'ru', 'tr', 'zh-CN', 'zh-TW'];\n\tconst categoryOptions = ['azure', 'data science', 'debuggers', 'extension packs', 'education', 'formatters', 'keymaps', 'language packs', 'linters', 'machine learning', 'notebooks', 'programming languages', 'scm providers', 'snippets', 'testing', 'themes', 'visualization', 'other'];\n\tconst logOptions = ['critical', 'error', 'warn', 'info', 'debug', 'trace', 'off'];\n\tconst syncOptions = ['on', 'off'];\n\n\tconst typingTests: ITestSpec[] = [];\n\tfor (let i = 1; i < executable.length; i++) {\n\t\tconst expectedCompletions = [{ label: executable, description: executable === codeCompletionSpec.name ? (codeCompletionSpec as any).description : (codeInsidersCompletionSpec as any).description }];\n\t\tconst input = `${executable.slice(0, i)}|`;\n\t\ttypingTests.push({ input, expectedCompletions, expectedResourceRequests: input.endsWith(' ') ? undefined : { type: 'both', cwd: testPaths.cwd } });\n\t}\n\n\treturn [\n\t\t// Typing the command\n\t\t...typingTests,\n\n\t\t// Basic arguments\n\t\t{ input: `${executable} |`, expectedCompletions: codeSpecOptionsAndSubcommands, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --locale |`, expectedCompletions: localeOptions },\n\t\t{ input: `${executable} --diff |`, expectedResourceRequests: { type: 'files', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --diff ./file1 |`, expectedResourceRequests: { type: 'files', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --merge |`, expectedResourceRequests: { type: 'files', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --merge ./file1 ./file2 |`, expectedResourceRequests: { type: 'files', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --merge ./file1 ./file2 ./base |`, expectedResourceRequests: { type: 'files', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --goto |`, expectedResourceRequests: { type: 'files', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --user-data-dir |`, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --profile |` },\n\t\t{ input: `${executable} --install-extension |`, expectedCompletions: [executable], expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --uninstall-extension |`, expectedCompletions: [executable] },\n\t\t{ input: `${executable} --disable-extension |`, expectedCompletions: [executable] },\n\t\t{ input: `${executable} --log |`, expectedCompletions: logOptions },\n\t\t{ input: `${executable} --sync |`, expectedCompletions: syncOptions },\n\t\t{ input: `${executable} --extensions-dir |`, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --list-extensions |`, expectedCompletions: codeSpecOptionsAndSubcommands.filter(c => c !== '--list-extensions'), expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --show-versions |`, expectedCompletions: codeSpecOptionsAndSubcommands.filter(c => c !== '--show-versions'), expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: `${executable} --category |`, expectedCompletions: categoryOptions },\n\t\t{ input: `${executable} --category a|`, expectedCompletions: categoryOptions },\n\n\t\t// Middle of command\n\t\t{ input: `${executable} | --locale`, expectedCompletions: codeSpecOptionsAndSubcommands, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t];\n}\n\nexport const codeTestSuite: ISuiteSpec = {\n\tname: 'code',\n\tcompletionSpecs: codeCompletionSpec,\n\tavailableCommands: 'code',\n\ttestSpecs: createCodeTestSpecs('code')\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/upstream/echo.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { testPaths, type ISuiteSpec } from '../../helpers';\nimport echoSpec from '../../../completions/upstream/echo';\n\nconst allOptions = [\n\t'-E',\n\t'-e',\n\t'-n',\n];\nconst echoExpectedCompletions = [{ label: 'echo', description: (echoSpec as any).description }];\nexport const echoTestSuiteSpec: ISuiteSpec = {\n\tname: 'echo',\n\tcompletionSpecs: echoSpec,\n\tavailableCommands: 'echo',\n\ttestSpecs: [\n\t\t// Empty input\n\t\t{ input: '|', expectedCompletions: echoExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 'e|', expectedCompletions: echoExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ec|', expectedCompletions: echoExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ech|', expectedCompletions: echoExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'echo|', expectedCompletions: echoExpectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Basic options\n\t\t{ input: 'echo |', expectedCompletions: allOptions },\n\n\t\t// Duplicate option\n\t\t// TODO: Duplicate options should not be presented https://github.com/microsoft/vscode/issues/239607\n\t\t// { input: 'echo -e -|', expectedCompletions: removeArrayEntries(allOptions, '-e') },\n\t\t// { input: 'echo -e -E -|', expectedCompletions: removeArrayEntries(allOptions, '-e', '-E') },\n\t]\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/upstream/git.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { testPaths, type ISuiteSpec } from '../../helpers';\nimport gitSpec from '../../../completions/upstream/git';\n\n// const gitSubcommandAndArgs = ['--bare', '--exec-path', '--git-dir', '--help', '--html-path', '--info-path', '--man-path', '--namespace', '--no-optional-locks', '--no-pager', '--no-replace-objects', '--paginate', '--version', '--work-tree', '-C', '-c', '-p', 'add', 'apply', 'archive', 'bisect', 'blame', 'branch', 'checkout', 'cherry-pick', 'clean', 'clone', 'commit', 'config', 'daemon', 'diff', 'fetch', 'grep', 'init', 'log', 'ls-remote', 'merge', 'mergetool', 'mv', 'pull', 'push', 'rebase', 'reflog', 'remote', 'reset', 'restore', 'revert', 'rm', 'show', 'stage', 'stash', 'status', 'submodule', 'switch', 'tag', 'worktree'];\n// const gitCommitArgs = ['--', '--all', '--allow-empty', '--allow-empty-message', '--amend', '--author', '--branch', '--cleanup', '--date', '--dry-run', '--edit', '--file', '--fixup', '--gpg-sign', '--include', '--long', '--message', '--no-edit', '--no-gpg-sign', '--no-post-rewrite', '--no-signoff', '--no-status', '--no-verify', '--null', '--only', '--patch', '--pathspec-file-nul', '--pathspec-from-file', '--porcelain', '--quiet', '--reedit-message', '--reset-author', '--reuse-message', '--short', '--signoff', '--squash', '--status', '--template', '--untracked-files', '--verbose', '-C', '-F', '-S', '-a', '-am', '-c', '-e', '-i', '-m', '-n', '-o', '-p', '-q', '-s', '-t', '-u', '-v', '-z'];\n// const gitMergeArgs = ['-', '--abort', '--allow-unrelated-histories', '--autostash', '--cleanup', '--commit', '--continue', '--edit', '--ff', '--ff-only', '--file', '--gpg-sign', '--log', '--no-autostash', '--no-commit', '--no-edit', '--no-ff', '--no-gpg-sign', '--no-log', '--no-overwrite-ignore', '--no-progress', '--no-rerere-autoupdate', '--no-signoff', '--no-squash', '--no-stat', '--no-summary', '--no-verify', '--no-verify-signatures', '--overwrite-ignore', '--progress', '--quiet', '--quit', '--rerere-autoupdate', '--signoff', '--squash', '--stat', '--strategy', '--strategy-option', '--summary', '--verbose', '--verify-signatures', '-F', '-S', '-X', '-e', '-m', '-n', '-q', '-s'];\n// const gitAddArgs = ['--', '--all', '--chmod', '--dry-run', '--edit', '--force', '--ignore-errors', '--ignore-missing', '--ignore-removal', '--intent-to-add', '--interactive', '--no-all', '--no-ignore-removal', '--no-warn-embedded-repo', '--patch', '--pathspec-file-nul', '--pathspec-from-file', '--refresh', '--renormalize', '--update', '--verbose', '-A', '-N', '-e', '-f', '-i', '-n', '-p', '-u', '-v'];\nconst expectedCompletions = [{ label: 'git', description: (gitSpec as any).description }];\n\nexport const gitTestSuiteSpec: ISuiteSpec = {\n\tname: 'git',\n\tcompletionSpecs: gitSpec,\n\tavailableCommands: 'git',\n\ttestSpecs: [\n\t\t// Empty input\n\t\t{ input: '|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 'g|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'gi|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'git|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// TODO: These currently read .gitconfig and end up returning different results depending on the system\n\t\t// Basic options\n\t\t// { input: 'git |', expectedCompletions: gitSubcommandAndArgs },\n\n\t\t// Complex options\n\t\t// { input: 'git add |', expectedCompletions: gitAddArgs, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t// { input: 'git commit |', expectedCompletions: gitCommitArgs },\n\t\t// { input: 'git merge |', expectedCompletions: gitMergeArgs }\n\t],\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/upstream/ls.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { testPaths, type ISuiteSpec } from '../../helpers';\nimport lsSpec from '../../../completions/upstream/ls';\n\nconst allOptions = [\n\t'-%',\n\t'-,',\n\t'--color <when>',\n\t'-1',\n\t'-@',\n\t'-A',\n\t'-B',\n\t'-C',\n\t'-F',\n\t'-G',\n\t'-H',\n\t'-L',\n\t'-O',\n\t'-P',\n\t'-R',\n\t'-S',\n\t'-T',\n\t'-U',\n\t'-W',\n\t'-a',\n\t'-b',\n\t'-c',\n\t'-d',\n\t'-e',\n\t'-f',\n\t'-g',\n\t'-h',\n\t'-i',\n\t'-k',\n\t'-l',\n\t'-m',\n\t'-n',\n\t'-o',\n\t'-p',\n\t'-q',\n\t'-r',\n\t'-s',\n\t'-t',\n\t'-u',\n\t'-v',\n\t'-w',\n\t'-x',\n];\nconst expectedCompletions = [{ label: 'ls', description: (lsSpec as any).description }];\nexport const lsTestSuiteSpec: ISuiteSpec = {\n\tname: 'ls',\n\tcompletionSpecs: lsSpec,\n\tavailableCommands: 'ls',\n\ttestSpecs: [\n\t\t// Empty input\n\t\t{ input: '|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 'l|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ls|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Basic options\n\t\t// TODO: The spec wants file paths and folders (which seems like it should only be folders),\n\t\t{ input: 'ls |', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ls -|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t{ input: 'ls -a|', expectedCompletions: allOptions },\n\n\t\t// Duplicate option\n\t\t{ input: 'ls -a -|', expectedCompletions: allOptions.filter(o => o !== '-a'), expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Relative paths\n\t\t{ input: 'ls c|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ls child|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ls .|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ls ./|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ls ./child|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'ls ..|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Relative directories (changes cwd due to /)\n\t\t{ input: 'ls child/|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwdChild } },\n\t\t{ input: 'ls ../|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwdParent } },\n\t\t{ input: 'ls ../sibling|', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwdParent } },\n\t]\n};\n\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/upstream/mkdir.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { testPaths, type ISuiteSpec } from '../../helpers';\nimport mkdirSpec from '../../../completions/upstream/mkdir';\n\nconst allOptions = [\n\t'--context <CTX>',\n\t'--help',\n\t'--mode <MODE>',\n\t'--parents',\n\t'--verbose',\n\t'--version',\n\t'-Z <CTX>',\n\t'-m <MODE>',\n\t'-p',\n\t'-v',\n];\nconst expectedCompletions = [{ label: 'mkdir', description: (mkdirSpec as any).description }];\nexport const mkdirTestSuiteSpec: ISuiteSpec = {\n\tname: 'mkdir',\n\tcompletionSpecs: mkdirSpec,\n\tavailableCommands: 'mkdir',\n\ttestSpecs: [\n\t\t// Empty input\n\t\t{ input: '|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 'm|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'mkdir|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Basic options\n\t\t{ input: 'mkdir |', expectedCompletions: allOptions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\n\t\t// Duplicate option\n\t\t// TODO: Duplicate options should not be presented https://github.com/microsoft/vscode/issues/239607\n\t\t// { input: 'mkdir -Z -|', expectedCompletions: removeArrayEntries(allOptions, '-z') },\n\t\t// { input: 'mkdir -Z -m -|', expectedCompletions: removeArrayEntries(allOptions, '-z', '-m') },\n\t]\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/upstream/rm.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { testPaths, type ISuiteSpec } from '../../helpers';\nimport rmSpec from '../../../completions/upstream/rm';\n\nconst allOptions = [\n\t'-P',\n\t'-R',\n\t'-d',\n\t'-f',\n\t'-i',\n\t'-r',\n\t'-v',\n];\nconst expectedCompletions = [{ label: 'rm', description: (rmSpec as any).description }];\nexport const rmTestSuiteSpec: ISuiteSpec = {\n\tname: 'rm',\n\tcompletionSpecs: rmSpec,\n\tavailableCommands: 'rm',\n\ttestSpecs: [\n\t\t// Empty input\n\t\t{ input: '|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 'r|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'rm|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Basic options\n\t\t{ input: 'rm |', expectedCompletions: allOptions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Duplicate option\n\t\t// TODO: Duplicate options should not be presented https://github.com/microsoft/vscode/issues/239607\n\t\t// { input: `rm -${allOptions[0]} -|`, expectedCompletions: removeArrayEntries(allOptions, allOptions[0]) },\n\t\t// { input: `rm -${allOptions[0]} -${allOptions[1]} -|`, expectedCompletions: removeArrayEntries(allOptions, allOptions[0], allOptions[1]) },\n\t]\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/upstream/rmdir.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { testPaths, type ISuiteSpec } from '../../helpers';\nimport rmdirSpec from '../../../completions/upstream/rmdir';\n\nconst allOptions = [\n\t'-p',\n];\nconst expectedCompletions = [{ label: 'rmdir', description: (rmdirSpec as any).description }];\n\nexport const rmdirTestSuiteSpec: ISuiteSpec = {\n\tname: 'rmdir',\n\tcompletionSpecs: rmdirSpec,\n\tavailableCommands: 'rmdir',\n\ttestSpecs: [\n\t\t// Empty input\n\t\t{ input: '|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 'r|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'rmdir|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Basic options\n\t\t{ input: 'rmdir |', expectedCompletions: allOptions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t]\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/completions/upstream/touch.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { testPaths, type ISuiteSpec } from '../../helpers';\nimport touchSpec from '../../../completions/upstream/touch';\n\nconst allOptions = [\n\t'-A <time>',\n\t'-a',\n\t'-c',\n\t'-f',\n\t'-h',\n\t'-m',\n\t'-r <file>',\n\t'-t <timestamp>',\n];\nconst expectedCompletions = [{ label: 'touch', description: (touchSpec as any).description }];\n\nexport const touchTestSuiteSpec: ISuiteSpec = {\n\tname: 'touch',\n\tcompletionSpecs: touchSpec,\n\tavailableCommands: 'touch',\n\ttestSpecs: [\n\t\t// Empty input\n\t\t{ input: '|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Typing the command\n\t\t{ input: 't|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t{ input: 'touch|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t// Basic options\n\t\t{ input: 'touch |', expectedCompletions: allOptions, expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t]\n};\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/env/pathExecutableCache.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { strictEqual } from 'node:assert';\nimport { PathExecutableCache } from '../../env/pathExecutableCache';\n\nsuite('PathExecutableCache', () => {\n\ttest('cache should return empty for empty PATH', async () => {\n\t\tconst cache = new PathExecutableCache();\n\t\tconst result = await cache.getExecutablesInPath({ PATH: '' });\n\t\tstrictEqual(Array.from(result!.completionResources!).length, 0);\n\t\tstrictEqual(Array.from(result!.labels!).length, 0);\n\t});\n\n\ttest('caching is working on successive calls', async () => {\n\t\tconst cache = new PathExecutableCache();\n\t\tconst env = { PATH: process.env.PATH };\n\t\tconst result = await cache.getExecutablesInPath(env);\n\t\tconst result2 = await cache.getExecutablesInPath(env);\n\t\tstrictEqual(result, result2);\n\t});\n\n\ttest('refresh clears the cache', async () => {\n\t\tconst cache = new PathExecutableCache();\n\t\tconst env = { PATH: process.env.PATH };\n\t\tconst result = await cache.getExecutablesInPath(env);\n\t\tcache.refresh();\n\t\tconst result2 = await cache.getExecutablesInPath(env);\n\t\tstrictEqual(result !== result2, true);\n\t});\n});\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/fig.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { testPaths, type ISuiteSpec } from './helpers';\nconst expectedCompletions = [{ label: 'foo', description: 'Foo' }];\nexport const figGenericTestSuites: ISuiteSpec[] = [\n\t{\n\t\tname: 'Fig name and description only',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t// Typing a path\n\t\t\t{ input: '|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'f|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'fo|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'foo|', expectedCompletions, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\n\t\t\t// Basic arguments (fallback)\n\t\t\t{ input: 'foo |', expectedCompletions: [], expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } }\n\t\t]\n\t},\n\t{\n\t\tname: 'Fig top-level args files only',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t\targs: {\n\t\t\t\t\ttemplate: 'filepaths',\n\t\t\t\t\tisVariadic: true,\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t{ input: 'foo |', expectedCompletions: [], expectedResourceRequests: { type: 'files', cwd: testPaths.cwd } },\n\t\t]\n\t},\n\t{\n\t\tname: 'Fig top-level args folders only',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t\targs: {\n\t\t\t\t\ttemplate: 'folders',\n\t\t\t\t\tisVariadic: true,\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t{ input: 'foo |', expectedCompletions: [], expectedResourceRequests: { type: 'folders', cwd: testPaths.cwd } },\n\t\t]\n\t},\n\t{\n\t\tname: 'Fig top-level args files and folders',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t\targs: {\n\t\t\t\t\ttemplate: ['filepaths', 'folders'],\n\t\t\t\t\tisVariadic: true,\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t{ input: 'foo |', expectedCompletions: [], expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t]\n\t},\n\t{\n\t\tname: 'Fig top-level options',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t\toptions: [\n\t\t\t\t\t{ name: '--bar', description: 'Bar' },\n\t\t\t\t\t{ name: '--baz', description: 'Baz' }\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t{ input: 'foo |', expectedCompletions: ['--bar', '--baz'] },\n\t\t\t{ input: 'foo bar|', expectedCompletions: ['--bar', '--baz'] },\n\t\t\t{ input: 'foo --bar |', expectedCompletions: ['--baz'] },\n\t\t\t{ input: 'foo --baz |', expectedCompletions: ['--bar'] },\n\t\t]\n\t},\n\t{\n\t\tname: 'Fig top-level option values',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '--bar',\n\t\t\t\t\t\tdescription: 'Bar',\n\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\tname: 'baz',\n\t\t\t\t\t\t\tsuggestions: [\n\t\t\t\t\t\t\t\t'a',\n\t\t\t\t\t\t\t\t'b',\n\t\t\t\t\t\t\t\t'c',\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t{ input: 'foo |', expectedCompletions: ['--bar <baz>'] },\n\t\t\t{ input: 'foo --bar |', expectedCompletions: ['a', 'b', 'c'] },\n\t\t\t{ input: 'foo --bar a|', expectedCompletions: ['a', 'b', 'c'] },\n\t\t\t{ input: 'foo --bar b|', expectedCompletions: ['a', 'b', 'c'] },\n\t\t\t{ input: 'foo --bar c|', expectedCompletions: ['a', 'b', 'c'] },\n\t\t]\n\t},\n\t{\n\t\tname: 'Fig script generator',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t\targs: {\n\t\t\t\t\tname: 'bar',\n\t\t\t\t\tgenerators: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tscript: () => ['echo abcd'],\n\t\t\t\t\t\t\tpostProcess: (out) => out.split('').map(item => {\n\t\t\t\t\t\t\t\treturn { name: item };\n\t\t\t\t\t\t\t}).filter(i => !!i)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t{ input: 'foo |', expectedCompletions: ['e', 'c', 'h', 'o', ' ', 'a', 'b', 'c', 'd'] },\n\t\t\t{ input: 'foo a|', expectedCompletions: ['e', 'c', 'h', 'o', ' ', 'a', 'b', 'c', 'd'] },\n\t\t\t{ input: 'foo b|', expectedCompletions: ['e', 'c', 'h', 'o', ' ', 'a', 'b', 'c', 'd'] },\n\t\t\t{ input: 'foo c|', expectedCompletions: ['e', 'c', 'h', 'o', ' ', 'a', 'b', 'c', 'd'] },\n\t\t]\n\t},\n\t{\n\t\tname: 'Fig custom generator',\n\t\tcompletionSpecs: [\n\t\t\t{\n\t\t\t\tname: 'foo',\n\t\t\t\tdescription: 'Foo',\n\t\t\t\targs: {\n\t\t\t\t\tname: 'bar',\n\t\t\t\t\tgenerators: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcustom: async (tokens: string[], executeCommand: Fig.ExecuteCommandFunction, generatorContext: Fig.GeneratorContext) => {\n\t\t\t\t\t\t\t\tif (tokens.length) {\n\t\t\t\t\t\t\t\t\treturn tokens.map(token => ({ name: token }));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\texecuteCommand({ command: 'echo', args: ['a\\tb\\nc\\td'] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tavailableCommands: 'foo',\n\t\ttestSpecs: [\n\t\t\t{ input: 'foo |', expectedCompletions: ['foo'] },\n\t\t\t{ input: 'foo a|', expectedCompletions: ['a', 'foo'] },\n\t\t\t{ input: 'foo b|', expectedCompletions: ['b', 'foo'] },\n\t\t\t{ input: 'foo c|', expectedCompletions: ['c', 'foo'] },\n\t\t]\n\t}\n];\n\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/helpers.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport * as vscode from 'vscode';\nimport type { ICompletionResource } from '../types';\nimport type { Uri } from 'vscode';\n\nexport interface ISuiteSpec {\n\tname: string;\n\tcompletionSpecs: Fig.Spec | Fig.Spec[];\n\t// TODO: This seems unnecessary, ideally getCompletionItemsFromSpecs would only consider the\n\t//       spec's completions\n\tavailableCommands: string | string[];\n\ttestSpecs: ITestSpec[];\n}\n\nexport interface ITestSpec {\n\tinput: string;\n\texpectedResourceRequests?: {\n\t\ttype: 'files' | 'folders' | 'both';\n\t\tcwd: Uri;\n\t};\n\texpectedCompletions?: (string | ICompletionResource)[];\n}\n\nconst fixtureDir = vscode.Uri.joinPath(vscode.Uri.file(__dirname), '../../testWorkspace');\n\n/**\n * A default set of paths shared across tests.\n */\nexport const testPaths = {\n\tfixtureDir,\n\tcwdParent: vscode.Uri.joinPath(fixtureDir, 'parent'),\n\tcwd: vscode.Uri.joinPath(fixtureDir, 'parent/home'),\n\tcwdChild: vscode.Uri.joinPath(fixtureDir, 'parent/home/child'),\n};\n\nexport function removeArrayEntries<T>(array: T[], ...elements: T[]): T[] {\n\tfor (const element of elements) {\n\t\tconst index = array.indexOf(element);\n\t\tif (index > -1) {\n\t\t\tarray.splice(index, 1);\n\t\t}\n\t}\n\treturn array;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/terminalSuggestMain.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { deepStrictEqual, strictEqual } from 'assert';\nimport 'mocha';\nimport { basename } from 'path';\nimport { asArray, getCompletionItemsFromSpecs } from '../terminalSuggestMain';\nimport { getTokenType } from '../tokens';\nimport { cdTestSuiteSpec as cdTestSuite } from './completions/cd.test';\nimport { codeSpecOptionsAndSubcommands, codeTestSuite } from './completions/code.test';\nimport { testPaths, type ISuiteSpec } from './helpers';\nimport { codeInsidersTestSuite } from './completions/code-insiders.test';\nimport { lsTestSuiteSpec } from './completions/upstream/ls.test';\nimport { echoTestSuiteSpec } from './completions/upstream/echo.test';\nimport { mkdirTestSuiteSpec } from './completions/upstream/mkdir.test';\nimport { rmTestSuiteSpec } from './completions/upstream/rm.test';\nimport { rmdirTestSuiteSpec } from './completions/upstream/rmdir.test';\nimport { touchTestSuiteSpec } from './completions/upstream/touch.test';\nimport { gitTestSuiteSpec } from './completions/upstream/git.test';\nimport { osIsWindows } from '../helpers/os';\nimport codeCompletionSpec from '../completions/code';\nimport { figGenericTestSuites } from './fig.test';\nimport { IFigExecuteExternals } from '../fig/execute';\n\nconst testSpecs2: ISuiteSpec[] = [\n\t{\n\t\tname: 'Fallback to default completions',\n\t\tcompletionSpecs: [],\n\t\tavailableCommands: [],\n\t\ttestSpecs: [\n\t\t\t{ input: '|', expectedCompletions: [], expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: '|.', expectedCompletions: [], expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: '|./', expectedCompletions: [], expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'fakecommand |', expectedCompletions: [], expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t]\n\t},\n\n\t...figGenericTestSuites,\n\n\t// completions/\n\tcdTestSuite,\n\tcodeTestSuite,\n\tcodeInsidersTestSuite,\n\n\t// completions/upstream/\n\techoTestSuiteSpec,\n\tlsTestSuiteSpec,\n\tmkdirTestSuiteSpec,\n\trmTestSuiteSpec,\n\trmdirTestSuiteSpec,\n\ttouchTestSuiteSpec,\n\tgitTestSuiteSpec,\n];\n\nif (osIsWindows()) {\n\ttestSpecs2.push({\n\t\tname: 'Handle options extensions on Windows',\n\t\tcompletionSpecs: [codeCompletionSpec],\n\t\tavailableCommands: [\n\t\t\t'code.bat',\n\t\t\t'code.cmd',\n\t\t\t'code.exe',\n\t\t\t'code.anything',\n\t\t],\n\t\ttestSpecs: [\n\t\t\t{ input: 'code |', expectedCompletions: codeSpecOptionsAndSubcommands, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'code.bat |', expectedCompletions: codeSpecOptionsAndSubcommands, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'code.cmd |', expectedCompletions: codeSpecOptionsAndSubcommands, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'code.exe |', expectedCompletions: codeSpecOptionsAndSubcommands, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t\t{ input: 'code.anything |', expectedCompletions: codeSpecOptionsAndSubcommands, expectedResourceRequests: { type: 'both', cwd: testPaths.cwd } },\n\t\t]\n\t});\n}\n\nsuite('Terminal Suggest', () => {\n\tfor (const suiteSpec of testSpecs2) {\n\t\tsuite(suiteSpec.name, () => {\n\t\t\tconst completionSpecs = asArray(suiteSpec.completionSpecs);\n\t\t\tconst availableCommands = asArray(suiteSpec.availableCommands);\n\t\t\tfor (const testSpec of suiteSpec.testSpecs) {\n\t\t\t\tlet expectedString = testSpec.expectedCompletions ? `[${testSpec.expectedCompletions.map(e => `'${e}'`).join(', ')}]` : '[]';\n\t\t\t\tif (testSpec.expectedResourceRequests) {\n\t\t\t\t\texpectedString += ` + ${testSpec.expectedResourceRequests.type}`;\n\t\t\t\t\tif (testSpec.expectedResourceRequests.cwd.fsPath !== testPaths.cwd.fsPath) {\n\t\t\t\t\t\texpectedString += ` @ ${basename(testSpec.expectedResourceRequests.cwd.fsPath)}/`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttest(`'${testSpec.input}' -> ${expectedString}`, async () => {\n\t\t\t\t\tconst commandLine = testSpec.input.split('|')[0];\n\t\t\t\t\tconst cursorPosition = testSpec.input.indexOf('|');\n\t\t\t\t\tconst prefix = commandLine.slice(0, cursorPosition).split(' ').at(-1) || '';\n\t\t\t\t\tconst filesRequested = testSpec.expectedResourceRequests?.type === 'files' || testSpec.expectedResourceRequests?.type === 'both';\n\t\t\t\t\tconst foldersRequested = testSpec.expectedResourceRequests?.type === 'folders' || testSpec.expectedResourceRequests?.type === 'both';\n\t\t\t\t\tconst terminalContext = { commandLine, cursorPosition, allowFallbackCompletions: true };\n\t\t\t\t\tconst result = await getCompletionItemsFromSpecs(\n\t\t\t\t\t\tcompletionSpecs,\n\t\t\t\t\t\tterminalContext,\n\t\t\t\t\t\tavailableCommands.map(c => { return { label: c }; }),\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tgetTokenType(terminalContext, undefined),\n\t\t\t\t\t\ttestPaths.cwd,\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t'testName',\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tnew MockFigExecuteExternals()\n\t\t\t\t\t);\n\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t// Add detail to the label if it exists\n\t\t\t\t\t\tresult.items.map(i => {\n\t\t\t\t\t\t\tif (typeof i.label === 'object' && i.label.detail) {\n\t\t\t\t\t\t\t\treturn `${i.label.label}${i.label.detail}`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn i.label;\n\t\t\t\t\t\t}).sort(),\n\t\t\t\t\t\t(testSpec.expectedCompletions ?? []).sort()\n\t\t\t\t\t);\n\t\t\t\t\tstrictEqual(result.filesRequested, filesRequested, 'Files requested different than expected, got: ' + result.filesRequested);\n\t\t\t\t\tstrictEqual(result.foldersRequested, foldersRequested, 'Folders requested different than expected, got: ' + result.foldersRequested);\n\t\t\t\t\tif (testSpec.expectedResourceRequests?.cwd) {\n\t\t\t\t\t\tstrictEqual(result.cwd?.fsPath, testSpec.expectedResourceRequests.cwd.fsPath, 'Non matching cwd');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nclass MockFigExecuteExternals implements IFigExecuteExternals {\n\tpublic async executeCommand(input: Fig.ExecuteCommandInput): Promise<Fig.ExecuteCommandOutput> {\n\t\treturn this.executeCommandTimeout(input);\n\t}\n\tasync executeCommandTimeout(input: Fig.ExecuteCommandInput): Promise<Fig.ExecuteCommandOutput> {\n\t\tconst command = [input.command, ...input.args].join(' ');\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tstatus: 0,\n\t\t\t\tstdout: input.command,\n\t\t\t\tstderr: '',\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tconsole.error(`Error running shell command '${command}'`, { err });\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "extensions/terminal-suggest/src/test/tokens.test.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport 'mocha';\nimport { strictEqual } from 'node:assert';\nimport { getTokenType, TokenType } from '../tokens';\nimport { TerminalShellType } from '../terminalSuggestMain';\n\nsuite('Terminal Suggest', () => {\n\ttest('simple command', () => {\n\t\tstrictEqual(getTokenType({ commandLine: 'echo', cursorPosition: 'echo'.length }, undefined), TokenType.Command);\n\t});\n\ttest('simple argument', () => {\n\t\tstrictEqual(getTokenType({ commandLine: 'echo hello', cursorPosition: 'echo hello'.length }, undefined), TokenType.Argument);\n\t});\n\ttest('simple command, cursor mid text', () => {\n\t\tstrictEqual(getTokenType({ commandLine: 'echo hello', cursorPosition: 'echo'.length }, undefined), TokenType.Command);\n\t});\n\ttest('simple argument, cursor mid text', () => {\n\t\tstrictEqual(getTokenType({ commandLine: 'echo hello', cursorPosition: 'echo hel'.length }, undefined), TokenType.Argument);\n\t});\n\tsuite('reset to command', () => {\n\t\ttest('|', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: 'echo hello | ', cursorPosition: 'echo hello | '.length }, undefined), TokenType.Command);\n\t\t});\n\t\ttest(';', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: 'echo hello; ', cursorPosition: 'echo hello; '.length }, undefined), TokenType.Command);\n\t\t});\n\t\ttest('&&', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: 'echo hello && ', cursorPosition: 'echo hello && '.length }, undefined), TokenType.Command);\n\t\t});\n\t\ttest('||', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: 'echo hello || ', cursorPosition: 'echo hello || '.length }, undefined), TokenType.Command);\n\t\t});\n\t});\n\tsuite('pwsh', () => {\n\t\ttest('simple command', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: 'Write-Host', cursorPosition: 'Write-Host'.length }, TerminalShellType.PowerShell), TokenType.Command);\n\t\t});\n\t\ttest('simple argument', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: 'Write-Host hello', cursorPosition: 'Write-Host hello'.length }, TerminalShellType.PowerShell), TokenType.Argument);\n\t\t});\n\t\ttest('reset char', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: `Write-Host hello -and `, cursorPosition: `Write-Host hello -and `.length }, TerminalShellType.PowerShell), TokenType.Command);\n\t\t});\n\t\ttest('arguments after reset char', () => {\n\t\t\tstrictEqual(getTokenType({ commandLine: `Write-Host hello -and $true `, cursorPosition: `Write-Host hello -and $true `.length }, TerminalShellType.PowerShell), TokenType.Argument);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "extensions/terminal-suggest/src/tokens.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TerminalShellType } from './terminalSuggestMain';\n\n\nexport const enum TokenType {\n\tCommand,\n\tArgument,\n}\n\nconst shellTypeResetChars = new Map<TerminalShellType, string[]>([\n\t[TerminalShellType.Bash, ['>', '>>', '<', '2>', '2>>', '&>', '&>>', '|', '|&', '&&', '||', '&', ';', '(', '{', '<<']],\n\t[TerminalShellType.Zsh, ['>', '>>', '<', '2>', '2>>', '&>', '&>>', '<>', '|', '|&', '&&', '||', '&', ';', '(', '{', '<<', '<<<', '<(']],\n\t[TerminalShellType.PowerShell, ['>', '>>', '<', '2>', '2>>', '*>', '*>>', '|', '-and', '-or', '-not', '!', '&', '-eq', '-ne', '-gt', '-lt', '-ge', '-le', '-like', '-notlike', '-match', '-notmatch', '-contains', '-notcontains', '-in', '-notin']]\n]);\n\nconst defaultShellTypeResetChars = shellTypeResetChars.get(TerminalShellType.Bash)!;\n\nexport function getTokenType(ctx: { commandLine: string; cursorPosition: number }, shellType: TerminalShellType | undefined): TokenType {\n\tconst spaceIndex = ctx.commandLine.substring(0, ctx.cursorPosition).lastIndexOf(' ');\n\tif (spaceIndex === -1) {\n\t\treturn TokenType.Command;\n\t}\n\tconst previousTokens = ctx.commandLine.substring(0, spaceIndex + 1).trim();\n\tconst commandResetChars = shellType === undefined ? defaultShellTypeResetChars : shellTypeResetChars.get(shellType) ?? defaultShellTypeResetChars;\n\tif (commandResetChars.some(e => previousTokens.endsWith(e))) {\n\t\treturn TokenType.Command;\n\t}\n\treturn TokenType.Argument;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/src/types.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\n\nexport interface ICompletionResource {\n\tlabel: string | vscode.CompletionItemLabel;\n\t/**\n\t * The definition command of the completion, this will be the resolved value of an alias\n\t * completion.\n\t */\n\tdefinitionCommand?: string;\n\tdocumentation?: string | vscode.MarkdownString;\n\tdetail?: string;\n\tkind?: vscode.TerminalCompletionItemKind;\n}\n"
  },
  {
    "path": "extensions/terminal-suggest/testWorkspace/parent/home/child/.keep",
    "content": ""
  },
  {
    "path": "extensions/terminal-suggest/tsconfig.json",
    "content": "{\n\t\"extends\": \"../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./out\",\n\t\t\"esModuleInterop\": true,\n\t\t\"experimentalDecorators\": true,\n\t\t\"types\": [\n\t\t\t\"node\"\n\t\t],\n\n\t\t// Needed to suppress warnings in upstream completions\n\t\t\"noImplicitReturns\": false,\n\t\t\"noUnusedParameters\": false\n\t},\n\t\"include\": [\n\t\t\"src/**/*\",\n\t\t\"src/completions/index.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.terminalCompletionProvider.d.ts\",\n\t\t\"../../src/vscode-dts/vscode.proposed.terminalShellEnv.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "extensions/theme-abyss/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-abyss/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"description\": \"The themes in this folders are copied from colorsublime.com. <<<TODO check the licenses, we can easily drop the themes>>>\",\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-abyss/package.json",
    "content": "{\n  \"name\": \"theme-abyss\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Abyss\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/abyss-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-abyss/package.nls.json",
    "content": "{\n\t\"displayName\": \"Abyss Theme\",\n\t\"description\": \"Abyss theme for Visual Studio Code\",\n\t\"themeLabel\": \"Abyss\"\n}\n"
  },
  {
    "path": "extensions/theme-abyss/themes/abyss-color-theme.json",
    "content": "{\n\t\"name\": \"Abyss\",\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6688cc\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6688cc\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comment\",\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#384887\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String\",\n\t\t\t\"scope\": \"string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#22aa44\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Number\",\n\t\t\t\"scope\": \"constant.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f280d0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Built-in constant\",\n\t\t\t\"scope\": \"constant.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f280d0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"User-defined constant\",\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character\",\n\t\t\t\t\"constant.other\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f280d0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable\",\n\t\t\t\"scope\": \"variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keyword\",\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#225588\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage\",\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#225588\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage type\",\n\t\t\t\"scope\": \"storage.type\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#9966b8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Class name\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.class\",\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.name.scope-resolution\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\",\n\t\t\t\t\"foreground\": \"#ffeebb\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Inherited class\",\n\t\t\t\"scope\": \"entity.other.inherited-class\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic underline\",\n\t\t\t\t\"foreground\": \"#ddbb88\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function name\",\n\t\t\t\"scope\": \"entity.name.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#ddbb88\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function argument\",\n\t\t\t\"scope\": \"variable.parameter\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#2277ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag name\",\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#225588\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag attribute\",\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#ddbb88\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library function\",\n\t\t\t\"scope\": \"support.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9966b8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library constant\",\n\t\t\t\"scope\": \"support.constant\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9966b8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library class/type\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.type\",\n\t\t\t\t\"support.class\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#9966b8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library variable\",\n\t\t\t\"scope\": \"support.other.variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#A22D44\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid deprecated\",\n\t\t\t\"scope\": \"invalid.deprecated\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#A22D44\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: header\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.diff\",\n\t\t\t\t\"meta.diff.header\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#E0EDDD\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: deleted\",\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#dc322f\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: changed\",\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#cb4b16\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: inserted\",\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#219186\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Quote\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#22aa44\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Styling\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.bold\",\n\t\t\t\t\"markup.italic\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#22aa44\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Strong\",\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Emphasis\",\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Inline\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9966b8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Headings\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.heading\",\n\t\t\t\t\"markup.heading.setext\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#6688cc\"\n\t\t\t}\n\t\t}\n\t],\n\t\"colors\": {\n\t\t\"editor.background\": \"#000c18\",\n\t\t\"editor.foreground\": \"#6688cc\",\n\t\t// Base\n\t\t// \"foreground\": \"\",\n\t\t\"focusBorder\": \"#596F99\",\n\t\t// \"contrastActiveBorder\": \"\",\n\t\t// \"contrastBorder\": \"\",\n\t\t// \"widget.shadow\": \"\",\n\t\t\"input.background\": \"#181f2f\",\n\t\t// \"input.border\": \"\",\n\t\t// \"input.foreground\": \"\",\n\t\t\"inputOption.activeBorder\": \"#1D4A87\",\n\t\t\"inputValidation.infoBorder\": \"#384078\",\n\t\t\"inputValidation.infoBackground\": \"#051336\",\n\t\t\"inputValidation.warningBackground\": \"#5B7E7A\",\n\t\t\"inputValidation.warningBorder\": \"#5B7E7A\",\n\t\t\"inputValidation.errorBackground\": \"#A22D44\",\n\t\t\"inputValidation.errorBorder\": \"#AB395B\",\n\t\t\"badge.background\": \"#0063a5\",\n\t\t\"progressBar.background\": \"#0063a5\",\n\t\t\"dropdown.background\": \"#181f2f\",\n\t\t// \"dropdown.foreground\": \"\",\n\t\t// \"dropdown.border\": \"\",\n\t\t\"button.background\": \"#2B3C5D\",\n\t\t// \"button.foreground\": \"\",\n\t\t\"list.activeSelectionBackground\": \"#08286b\",\n\t\t// \"list.activeSelectionForeground\": \"\",\n\t\t\"quickInputList.focusBackground\": \"#08286b\",\n\t\t\"list.hoverBackground\": \"#061940\",\n\t\t\"list.inactiveSelectionBackground\": \"#152037\",\n\t\t\"list.dropBackground\": \"#041D52\",\n\t\t\"list.highlightForeground\": \"#0063a5\",\n\t\t\"scrollbar.shadow\": \"#515E91AA\",\n\t\t\"scrollbarSlider.activeBackground\": \"#3B3F5188\",\n\t\t\"scrollbarSlider.background\": \"#1F2230AA\",\n\t\t\"scrollbarSlider.hoverBackground\": \"#3B3F5188\",\n\t\t// Editor\n\t\t\"editorWidget.background\": \"#262641\",\n\t\t\"editorCursor.foreground\": \"#ddbb88\",\n\t\t\"editorWhitespace.foreground\": \"#103050\",\n\t\t\"editor.lineHighlightBackground\": \"#082050\",\n\t\t\"editor.selectionBackground\": \"#770811\",\n\t\t\"editorIndentGuide.background\": \"#002952\",\n\t\t\"editorIndentGuide.activeBackground\": \"#204972\",\n\t\t\"editorHoverWidget.background\": \"#000c38\",\n\t\t\"editorHoverWidget.border\": \"#004c18\",\n\t\t\"editorLineNumber.foreground\": \"#406385\",\n\t\t\"editorLineNumber.activeForeground\": \"#80a2c2\",\n\t\t\"editorMarkerNavigation.background\": \"#060621\",\n\t\t\"editorMarkerNavigationError.background\": \"#AB395B\",\n\t\t\"editorMarkerNavigationWarning.background\": \"#5B7E7A\",\n\t\t\"editorLink.activeForeground\": \"#0063a5\",\n\t\t// \"editor.findMatchBackground\": \"\",\n\t\t\"editor.findMatchHighlightBackground\": \"#eeeeee44\",\n\t\t// \"editor.findRangeHighlightBackground\": \"\",\n\t\t// \"editor.hoverHighlightBackground\": \"\",\n\t\t// \"editor.inactiveSelectionBackground\": \"\",\n\t\t// \"editor.lineHighlightBorder\": \"\",\n\t\t// \"editor.rangeHighlightBackground\": \"\",\n\t\t// \"editor.selectionHighlightBackground\": \"\",\n\t\t// \"editor.wordHighlightBackground\": \"\",\n\t\t// \"editor.wordHighlightStrongBackground\": \"\",\n\t\t// Editor: Suggest Widget\n\t\t// \"editorSuggestWidget.background\": \"\",\n\t\t// \"editorSuggestWidget.border\": \"\",\n\t\t// \"editorSuggestWidget.foreground\": \"\",\n\t\t// \"editorSuggestWidget.highlightForeground\": \"\",\n\t\t// \"editorSuggestWidget.selectedBackground\": \"\",\n\t\t// Editor: Peek View\n\t\t\"peekViewResult.background\": \"#060621\",\n\t\t// \"peekViewResult.lineForeground\": \"\",\n\t\t// \"peekViewResult.selectionBackground\": \"\",\n\t\t// \"peekViewResult.selectionForeground\": \"\",\n\t\t\"peekViewEditor.background\": \"#10192c\",\n\t\t\"peekViewTitle.background\": \"#10192c\",\n\t\t\"peekView.border\": \"#2b2b4a\",\n\t\t\"peekViewEditor.matchHighlightBackground\": \"#eeeeee33\",\n\t\t// \"peekViewResult.fileForeground\": \"\",\n\t\t\"peekViewResult.matchHighlightBackground\": \"#eeeeee44\",\n\t\t// \"peekViewTitleLabel.foreground\": \"\",\n\t\t// \"peekViewTitleDescription.foreground\": \"\",\n\t\t// Ports\n\t\t\"ports.iconRunningProcessForeground\": \"#80a2c2\",\n\t\t// Editor: Diff\n\t\t\"diffEditor.insertedTextBackground\": \"#31958A55\",\n\t\t// \"diffEditor.insertedTextBorder\": \"\",\n\t\t\"diffEditor.removedTextBackground\": \"#892F4688\",\n\t\t// \"diffEditor.removedTextBorder\": \"\",\n\t\t// Editor: Minimap\n\t\t\"minimap.selectionHighlight\": \"#750000\",\n\t\t// Workbench: Title\n\t\t\"titleBar.activeBackground\": \"#10192c\",\n\t\t// \"titleBar.activeForeground\": \"\",\n\t\t// \"titleBar.inactiveBackground\": \"\",\n\t\t// \"titleBar.inactiveForeground\": \"\",\n\t\t// Workbench: Editors\n\t\t// \"editorGroupHeader.noTabsBackground\": \"\",\n\t\t\"editorGroup.border\": \"#2b2b4a\",\n\t\t\"editorGroup.dropBackground\": \"#25375daa\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#1c1c2a\",\n\t\t// Workbench: Tabs\n\t\t\"tab.border\": \"#2b2b4a\",\n\t\t// \"tab.activeBackground\": \"\",\n\t\t\"tab.inactiveBackground\": \"#10192c\",\n\t\t// \"tab.activeForeground\": \"\",\n\t\t// \"tab.inactiveForeground\": \"\",\n\t\t\"tab.lastPinnedBorder\": \"#2b3c5d\",\n\t\t// Workbench: Activity Bar\n\t\t\"activityBar.background\": \"#051336\",\n\t\t// \"activityBar.foreground\": \"\",\n\t\t// \"activityBarBadge.background\": \"\",\n\t\t// \"activityBarBadge.foreground\": \"\",\n\t\t// Workbench: Panel\n\t\t// \"panel.background\": \"\",\n\t\t\"panel.border\": \"#2b2b4a\",\n\t\t// \"panelTitle.activeBorder\": \"\",\n\t\t// \"panelTitle.activeForeground\": \"\",\n\t\t// \"panelTitle.inactiveForeground\": \"\",\n\t\t// Workbench: Side Bar\n\t\t\"sideBar.background\": \"#060621\",\n\t\t// \"sideBarTitle.foreground\": \"\",\n\t\t\"sideBarSectionHeader.background\": \"#10192c\",\n\t\t// Workbench: Status Bar\n\t\t\"statusBar.background\": \"#10192c\",\n\t\t\"statusBar.noFolderBackground\": \"#10192c\",\n\t\t\"statusBar.debuggingBackground\": \"#10192c\",\n\t\t// \"statusBar.foreground\": \"\",\n\t\t\"statusBarItem.remoteBackground\": \"#0063a5\",\n\t\t\"statusBarItem.prominentBackground\": \"#0063a5\",\n\t\t\"statusBarItem.prominentHoverBackground\": \"#0063a5dd\",\n\t\t// \"statusBarItem.activeBackground\": \"\",\n\t\t// \"statusBarItem.hoverBackground\": \"\",\n\t\t// Workbench: Debug\n\t\t\"debugToolBar.background\": \"#051336\",\n\t\t\"debugExceptionWidget.background\": \"#051336\",\n\t\t\"debugExceptionWidget.border\": \"#AB395B\",\n\t\t// Workbench: Quick Open\n\t\t\"pickerGroup.border\": \"#596F99\",\n\t\t\"pickerGroup.foreground\": \"#596F99\",\n\t\t// Workbench: Extensions\n\t\t\"extensionButton.prominentBackground\": \"#5f8b3b\",\n\t\t\"extensionButton.prominentHoverBackground\": \"#5f8b3bbb\",\n\t\t// Workbench: Terminal\n\t\t\"terminal.ansiBlack\": \"#111111\",\n\t\t\"terminal.ansiRed\": \"#ff9da4\",\n\t\t\"terminal.ansiGreen\": \"#d1f1a9\",\n\t\t\"terminal.ansiYellow\": \"#ffeead\",\n\t\t\"terminal.ansiBlue\": \"#bbdaff\",\n\t\t\"terminal.ansiMagenta\": \"#ebbbff\",\n\t\t\"terminal.ansiCyan\": \"#99ffff\",\n\t\t\"terminal.ansiWhite\": \"#cccccc\",\n\t\t\"terminal.ansiBrightBlack\": \"#333333\",\n\t\t\"terminal.ansiBrightRed\": \"#ff7882\",\n\t\t\"terminal.ansiBrightGreen\": \"#b8f171\",\n\t\t\"terminal.ansiBrightYellow\": \"#ffe580\",\n\t\t\"terminal.ansiBrightBlue\": \"#80baff\",\n\t\t\"terminal.ansiBrightMagenta\": \"#d778ff\",\n\t\t\"terminal.ansiBrightCyan\": \"#78ffff\",\n\t\t\"terminal.ansiBrightWhite\": \"#ffffff\"\n\t},\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/theme-defaults/fileicons/vs_minimal-icon-theme.json",
    "content": "{\n\t\"iconDefinitions\": {\n\t\t\"_root_folder_dark\": {\n\t\t\t\"iconPath\": \"./images/root-folder-dark.svg\"\n\t\t},\n\t\t\"_root_folder_open_dark\": {\n\t\t\t\"iconPath\": \"./images/root-folder-open-dark.svg\"\n\t\t},\n\t\t\"_folder_dark\": {\n\t\t\t\"iconPath\": \"./images/folder-dark.svg\"\n\t\t},\n\t\t\"_folder_open_dark\": {\n\t\t\t\"iconPath\": \"./images/folder-open-dark.svg\"\n\t\t},\n\t\t\"_file_dark\": {\n\t\t\t\"iconPath\": \"./images/document-dark.svg\"\n\t\t},\n\t\t\"_root_folder\": {\n\t\t\t\"iconPath\": \"./images/root-folder-light.svg\"\n\t\t},\n\t\t\"_root_folder_open\": {\n\t\t\t\"iconPath\": \"./images/root-folder-open-light.svg\"\n\t\t},\n\t\t\"_folder_light\": {\n\t\t\t\"iconPath\": \"./images/folder-light.svg\"\n\t\t},\n\t\t\"_folder_open_light\": {\n\t\t\t\"iconPath\": \"./images/folder-open-light.svg\"\n\t\t},\n\t\t\"_file_light\": {\n\t\t\t\"iconPath\": \"./images/document-light.svg\"\n\t\t}\n\t},\n\n\t\"folderExpanded\": \"_folder_open_dark\",\n\t\"folder\": \"_folder_dark\",\n\t\"file\": \"_file_dark\",\n\t\"rootFolderExpanded\": \"_root_folder_open_dark\",\n\t\"rootFolder\": \"_root_folder_dark\",\n\t\"fileExtensions\": {\n\t\t// icons by file extension\n\t},\n\t\"fileNames\": {\n\t\t// icons by file name\n\t},\n\t\"languageIds\": {\n\t\t// icons by language id\n\t},\n\t\"light\": {\n\t\t\"folderExpanded\": \"_folder_open_light\",\n\t\t\"folder\": \"_folder_light\",\n\t\t\"rootFolderExpanded\": \"_root_folder_open\",\n\t\t\"rootFolder\": \"_root_folder\",\n\t\t\"file\": \"_file_light\",\n\t\t\"fileExtensions\": {\n\t\t\t// icons by file extension\n\t\t},\n\t\t\"fileNames\": {\n\t\t\t// icons by file name\n\t\t},\n\t\t\"languageIds\": {\n\t\t\t// icons by language id\n\t\t}\n\t},\n\t\"highContrast\": {\n\t\t// overrides for high contrast\n\t}\n}"
  },
  {
    "path": "extensions/theme-defaults/package.json",
    "content": "{\n  \"name\": \"theme-defaults\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"categories\": [\n    \"Themes\"\n  ],\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Default Dark+\",\n        \"label\": \"%darkPlusColorThemeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/dark_plus.json\"\n      },\n      {\n        \"id\": \"Default Dark Modern\",\n        \"label\": \"%darkModernThemeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/dark_modern.json\"\n      },\n      {\n        \"id\": \"Default Light+\",\n        \"label\": \"%lightPlusColorThemeLabel%\",\n        \"uiTheme\": \"vs\",\n        \"path\": \"./themes/light_plus.json\"\n      },\n      {\n        \"id\": \"Default Light Modern\",\n        \"label\": \"%lightModernThemeLabel%\",\n        \"uiTheme\": \"vs\",\n        \"path\": \"./themes/light_modern.json\"\n      },\n      {\n        \"id\": \"Visual Studio Dark\",\n        \"label\": \"%darkColorThemeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/dark_vs.json\"\n      },\n      {\n        \"id\": \"Visual Studio Light\",\n        \"label\": \"%lightColorThemeLabel%\",\n        \"uiTheme\": \"vs\",\n        \"path\": \"./themes/light_vs.json\"\n      },\n      {\n        \"id\": \"Default High Contrast\",\n        \"label\": \"%hcColorThemeLabel%\",\n        \"uiTheme\": \"hc-black\",\n        \"path\": \"./themes/hc_black.json\"\n      },\n      {\n        \"id\": \"Default High Contrast Light\",\n        \"label\": \"%lightHcColorThemeLabel%\",\n        \"uiTheme\": \"hc-light\",\n        \"path\": \"./themes/hc_light.json\"\n      }\n    ],\n    \"iconThemes\": [\n      {\n        \"id\": \"vs-minimal\",\n        \"label\": \"%minimalIconThemeLabel%\",\n        \"path\": \"./fileicons/vs_minimal-icon-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-defaults/package.nls.json",
    "content": "{\n\t\"displayName\": \"Default Themes\",\n\t\"description\": \"The default Visual Studio light and dark themes\",\n\t\"darkPlusColorThemeLabel\": \"Dark+\",\n\t\"darkModernThemeLabel\": \"Dark Modern\",\n\t\"lightPlusColorThemeLabel\": \"Light+\",\n\t\"lightModernThemeLabel\": \"Light Modern\",\n\t\"darkColorThemeLabel\": \"Dark (Visual Studio)\",\n\t\"lightColorThemeLabel\": \"Light (Visual Studio)\",\n\t\"hcColorThemeLabel\": \"Dark High Contrast\",\n\t\"lightHcColorThemeLabel\": \"Light High Contrast\",\n\t\"minimalIconThemeLabel\": \"Minimal (Visual Studio Code)\"\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/dark_modern.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Default Dark Modern\",\n\t\"include\": \"./dark_plus.json\",\n\t\"colors\": {\n\t\t\"activityBar.activeBorder\": \"#0078D4\",\n\t\t\"activityBar.background\": \"#181818\",\n\t\t\"activityBar.border\": \"#2B2B2B\",\n\t\t\"activityBar.foreground\": \"#D7D7D7\",\n\t\t\"activityBar.inactiveForeground\": \"#868686\",\n\t\t\"activityBarBadge.background\": \"#0078D4\",\n\t\t\"activityBarBadge.foreground\": \"#FFFFFF\",\n\t\t\"badge.background\": \"#616161\",\n\t\t\"badge.foreground\": \"#F8F8F8\",\n\t\t\"button.background\": \"#0078D4\",\n\t\t\"button.border\": \"#FFFFFF12\",\n\t\t\"button.foreground\": \"#FFFFFF\",\n\t\t\"button.hoverBackground\": \"#026EC1\",\n\t\t\"button.secondaryBackground\": \"#313131\",\n\t\t\"button.secondaryForeground\": \"#CCCCCC\",\n\t\t\"button.secondaryHoverBackground\": \"#3C3C3C\",\n\t\t\"chat.slashCommandBackground\": \"#34414B\",\n\t\t\"chat.slashCommandForeground\": \"#40A6FF\",\n\t\t\"chat.editedFileForeground\": \"#E2C08D\",\n\t\t\"checkbox.background\": \"#313131\",\n\t\t\"checkbox.border\": \"#3C3C3C\",\n\t\t\"debugToolBar.background\": \"#181818\",\n\t\t\"descriptionForeground\": \"#9D9D9D\",\n\t\t\"dropdown.background\": \"#313131\",\n\t\t\"dropdown.border\": \"#3C3C3C\",\n\t\t\"dropdown.foreground\": \"#CCCCCC\",\n\t\t\"dropdown.listBackground\": \"#1F1F1F\",\n\t\t\"editor.background\": \"#1F1F1F\",\n\t\t\"editor.findMatchBackground\": \"#9E6A03\",\n\t\t\"editor.foreground\": \"#CCCCCC\",\n\t\t\"editorGroup.border\": \"#FFFFFF17\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#181818\",\n\t\t\"editorGroupHeader.tabsBorder\": \"#2B2B2B\",\n\t\t\"editorGutter.addedBackground\": \"#2EA043\",\n\t\t\"editorGutter.deletedBackground\": \"#F85149\",\n\t\t\"editorGutter.modifiedBackground\": \"#0078D4\",\n\t\t\"editorLineNumber.activeForeground\": \"#CCCCCC\",\n\t\t\"editorLineNumber.foreground\": \"#6E7681\",\n\t\t\"editorOverviewRuler.border\": \"#010409\",\n\t\t\"editorWidget.background\": \"#202020\",\n\t\t\"errorForeground\": \"#F85149\",\n\t\t\"focusBorder\": \"#0078D4\",\n\t\t\"foreground\": \"#CCCCCC\",\n\t\t\"icon.foreground\": \"#CCCCCC\",\n\t\t\"input.background\": \"#313131\",\n\t\t\"input.border\": \"#3C3C3C\",\n\t\t\"input.foreground\": \"#CCCCCC\",\n\t\t\"input.placeholderForeground\": \"#989898\",\n\t\t\"inputOption.activeBackground\": \"#2489DB82\",\n\t\t\"inputOption.activeBorder\": \"#2488DB\",\n\t\t\"keybindingLabel.foreground\": \"#CCCCCC\",\n\t\t\"menu.background\": \"#1F1F1F\",\n\t\t\"menu.selectionBackground\": \"#0078d4\",\n\t\t\"notificationCenterHeader.background\": \"#1F1F1F\",\n\t\t\"notificationCenterHeader.foreground\": \"#CCCCCC\",\n\t\t\"notifications.background\": \"#1F1F1F\",\n\t\t\"notifications.border\": \"#2B2B2B\",\n\t\t\"notifications.foreground\": \"#CCCCCC\",\n\t\t\"panel.background\": \"#181818\",\n\t\t\"panel.border\": \"#2B2B2B\",\n\t\t\"panelInput.border\": \"#2B2B2B\",\n\t\t\"panelTitle.activeBorder\": \"#0078D4\",\n\t\t\"panelTitle.activeForeground\": \"#CCCCCC\",\n\t\t\"panelTitle.inactiveForeground\": \"#9D9D9D\",\n\t\t\"peekViewEditor.background\": \"#1F1F1F\",\n\t\t\"peekViewEditor.matchHighlightBackground\": \"#BB800966\",\n\t\t\"peekViewResult.background\": \"#1F1F1F\",\n\t\t\"peekViewResult.matchHighlightBackground\": \"#BB800966\",\n\t\t\"pickerGroup.border\": \"#3C3C3C\",\n\t\t\"progressBar.background\": \"#0078D4\",\n\t\t\"quickInput.background\": \"#222222\",\n\t\t\"quickInput.foreground\": \"#CCCCCC\",\n\t\t\"settings.dropdownBackground\": \"#313131\",\n\t\t\"settings.dropdownBorder\": \"#3C3C3C\",\n\t\t\"settings.headerForeground\": \"#FFFFFF\",\n\t\t\"settings.modifiedItemIndicator\": \"#BB800966\",\n\t\t\"sideBar.background\": \"#181818\",\n\t\t\"sideBar.border\": \"#2B2B2B\",\n\t\t\"sideBar.foreground\": \"#CCCCCC\",\n\t\t\"sideBarSectionHeader.background\": \"#181818\",\n\t\t\"sideBarSectionHeader.border\": \"#2B2B2B\",\n\t\t\"sideBarSectionHeader.foreground\": \"#CCCCCC\",\n\t\t\"sideBarTitle.foreground\": \"#CCCCCC\",\n\t\t\"statusBar.background\": \"#181818\",\n\t\t\"statusBar.border\": \"#2B2B2B\",\n\t\t\"statusBar.debuggingBackground\": \"#0078D4\",\n\t\t\"statusBar.debuggingForeground\": \"#FFFFFF\",\n\t\t\"statusBar.focusBorder\": \"#0078D4\",\n\t\t\"statusBar.foreground\": \"#CCCCCC\",\n\t\t\"statusBar.noFolderBackground\": \"#1F1F1F\",\n\t\t\"statusBarItem.focusBorder\": \"#0078D4\",\n\t\t\"statusBarItem.prominentBackground\": \"#6E768166\",\n\t\t\"statusBarItem.remoteBackground\": \"#0078D4\",\n\t\t\"statusBarItem.remoteForeground\": \"#FFFFFF\",\n\t\t\"tab.activeBackground\": \"#1F1F1F\",\n\t\t\"tab.activeBorder\": \"#1F1F1F\",\n\t\t\"tab.activeBorderTop\": \"#0078D4\",\n\t\t\"tab.activeForeground\": \"#FFFFFF\",\n\t\t\"tab.selectedBorderTop\": \"#6caddf\",\n\t\t\"tab.border\": \"#2B2B2B\",\n\t\t\"tab.hoverBackground\": \"#1F1F1F\",\n\t\t\"tab.inactiveBackground\": \"#181818\",\n\t\t\"tab.inactiveForeground\": \"#9D9D9D\",\n\t\t\"tab.unfocusedActiveBorder\": \"#1F1F1F\",\n\t\t\"tab.unfocusedActiveBorderTop\": \"#2B2B2B\",\n\t\t\"tab.unfocusedHoverBackground\": \"#1F1F1F\",\n\t\t\"terminal.foreground\": \"#CCCCCC\",\n\t\t\"terminal.tab.activeBorder\": \"#0078D4\",\n\t\t\"textBlockQuote.background\": \"#2B2B2B\",\n\t\t\"textBlockQuote.border\": \"#616161\",\n\t\t\"textCodeBlock.background\": \"#2B2B2B\",\n\t\t\"textLink.activeForeground\": \"#4daafc\",\n\t\t\"textLink.foreground\": \"#4daafc\",\n\t\t\"textPreformat.foreground\": \"#D0D0D0\",\n\t\t\"textPreformat.background\": \"#3C3C3C\",\n\t\t\"textSeparator.foreground\": \"#21262D\",\n\t\t\"titleBar.activeBackground\": \"#181818\",\n\t\t\"titleBar.activeForeground\": \"#CCCCCC\",\n\t\t\"titleBar.border\": \"#2B2B2B\",\n\t\t\"titleBar.inactiveBackground\": \"#1F1F1F\",\n\t\t\"titleBar.inactiveForeground\": \"#9D9D9D\",\n\t\t\"welcomePage.tileBackground\": \"#2B2B2B\",\n\t\t\"welcomePage.progress.foreground\": \"#0078D4\",\n\t\t\"widget.border\": \"#313131\",\n\t},\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/dark_plus.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Dark+\",\n\t\"include\": \"./dark_vs.json\",\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"name\": \"Function declarations\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.function\",\n\t\t\t\t\"support.function\",\n\t\t\t\t\"support.constant.handlebars\",\n\t\t\t\t\"source.powershell variable.other.member\",\n\t\t\t\t\"entity.name.operator.custom-literal\" // See https://en.cppreference.com/w/cpp/language/user_literal\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#DCDCAA\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Types declaration and references\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.class\",\n\t\t\t\t\"support.type\",\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.other.attribute\",\n\t\t\t\t\"entity.name.scope-resolution\",\n\t\t\t\t\"entity.name.class\",\n\t\t\t\t\"storage.type.numeric.go\",\n\t\t\t\t\"storage.type.byte.go\",\n\t\t\t\t\"storage.type.boolean.go\",\n\t\t\t\t\"storage.type.string.go\",\n\t\t\t\t\"storage.type.uintptr.go\",\n\t\t\t\t\"storage.type.error.go\",\n\t\t\t\t\"storage.type.rune.go\",\n\t\t\t\t\"storage.type.cs\",\n\t\t\t\t\"storage.type.generic.cs\",\n\t\t\t\t\"storage.type.modifier.cs\",\n\t\t\t\t\"storage.type.variable.cs\",\n\t\t\t\t\"storage.type.annotation.java\",\n\t\t\t\t\"storage.type.generic.java\",\n\t\t\t\t\"storage.type.java\",\n\t\t\t\t\"storage.type.object.array.java\",\n\t\t\t\t\"storage.type.primitive.array.java\",\n\t\t\t\t\"storage.type.primitive.java\",\n\t\t\t\t\"storage.type.token.java\",\n\t\t\t\t\"storage.type.groovy\",\n\t\t\t\t\"storage.type.annotation.groovy\",\n\t\t\t\t\"storage.type.parameters.groovy\",\n\t\t\t\t\"storage.type.generic.groovy\",\n\t\t\t\t\"storage.type.object.array.groovy\",\n\t\t\t\t\"storage.type.primitive.array.groovy\",\n\t\t\t\t\"storage.type.primitive.groovy\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4EC9B0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Types declaration and references, TS grammar specific\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.type.cast.expr\",\n\t\t\t\t\"meta.type.new.expr\",\n\t\t\t\t\"support.constant.math\",\n\t\t\t\t\"support.constant.dom\",\n\t\t\t\t\"support.constant.json\",\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4EC9B0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Control flow / Special keywords\",\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.control\",\n\t\t\t\t\"source.cpp keyword.operator.new\",\n\t\t\t\t\"keyword.operator.delete\",\n\t\t\t\t\"keyword.other.using\",\n\t\t\t\t\"keyword.other.directive.using\",\n\t\t\t\t\"keyword.other.operator\",\n\t\t\t\t\"entity.name.operator\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#C586C0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable and parameter name\",\n\t\t\t\"scope\": [\n\t\t\t\t\"variable\",\n\t\t\t\t\"meta.definition.variable.name\",\n\t\t\t\t\"support.variable\",\n\t\t\t\t\"entity.name.variable\",\n\t\t\t\t\"constant.other.placeholder\", // placeholders in strings\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9CDCFE\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Constants and enums\",\n\t\t\t\"scope\": [\n\t\t\t\t\"variable.other.constant\",\n\t\t\t\t\"variable.other.enummember\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4FC1FF\",\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Object keys, TS grammar specific\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.object-literal.key\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9CDCFE\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS property value\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.constant.property-value\",\n\t\t\t\t\"support.constant.font-name\",\n\t\t\t\t\"support.constant.media-type\",\n\t\t\t\t\"support.constant.media\",\n\t\t\t\t\"constant.other.color.rgb-value\",\n\t\t\t\t\"constant.other.rgb-value\",\n\t\t\t\t\"support.constant.color\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CE9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Regular expression groups\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.group.regexp\",\n\t\t\t\t\"punctuation.definition.group.assertion.regexp\",\n\t\t\t\t\"punctuation.definition.character-class.regexp\",\n\t\t\t\t\"punctuation.character.set.begin.regexp\",\n\t\t\t\t\"punctuation.character.set.end.regexp\",\n\t\t\t\t\"keyword.operator.negation.regexp\",\n\t\t\t\t\"support.other.parenthesis.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CE9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character.character-class.regexp\",\n\t\t\t\t\"constant.other.character-class.set.regexp\",\n\t\t\t\t\"constant.other.character-class.regexp\",\n\t\t\t\t\"constant.character.set.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d16969\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.operator.or.regexp\",\n\t\t\t\t\"keyword.control.anchor.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#DCDCAA\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d7ba7d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character\",\n\t\t\t\t\"constant.other.option\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.character.escape\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d7ba7d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.label\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#C8C8C8\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticTokenColors\": {\n\t\t\"newOperator\":\"#C586C0\",\n\t\t\"stringLiteral\":\"#ce9178\",\n\t\t\"customLiteral\": \"#DCDCAA\",\n\t\t\"numberLiteral\": \"#b5cea8\",\n\t}\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/dark_vs.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Dark (Visual Studio)\",\n\t\"colors\": {\n\t\t\"checkbox.border\": \"#6B6B6B\",\n\t\t\"editor.background\": \"#1E1E1E\",\n\t\t\"editor.foreground\": \"#D4D4D4\",\n\t\t\"editor.inactiveSelectionBackground\": \"#3A3D41\",\n\t\t\"editorIndentGuide.background1\": \"#404040\",\n\t\t\"editorIndentGuide.activeBackground1\": \"#707070\",\n\t\t\"editor.selectionHighlightBackground\": \"#ADD6FF26\",\n\t\t\"list.dropBackground\": \"#383B3D\",\n\t\t\"activityBarBadge.background\": \"#007ACC\",\n\t\t\"sideBarTitle.foreground\": \"#BBBBBB\",\n\t\t\"input.placeholderForeground\": \"#A6A6A6\",\n\t\t\"menu.background\": \"#252526\",\n\t\t\"menu.foreground\": \"#CCCCCC\",\n\t\t\"menu.separatorBackground\": \"#454545\",\n\t\t\"menu.border\": \"#454545\",\n\t\t\"menu.selectionBackground\": \"#0078d4\",\n\t\t\"statusBarItem.remoteForeground\": \"#FFF\",\n\t\t\"statusBarItem.remoteBackground\": \"#16825D\",\n\t\t\"ports.iconRunningProcessForeground\": \"#369432\",\n\t\t\"sideBarSectionHeader.background\": \"#0000\",\n\t\t\"sideBarSectionHeader.border\": \"#ccc3\",\n\t\t\"tab.selectedBackground\": \"#222222\",\n\t\t\"tab.selectedForeground\": \"#ffffffa0\",\n\t\t\"tab.lastPinnedBorder\": \"#ccc3\",\n\t\t\"list.activeSelectionIconForeground\": \"#FFF\",\n\t\t\"terminal.inactiveSelectionBackground\": \"#3A3D41\",\n\t\t\"widget.border\": \"#303031\",\n\t\t\"actionBar.toggledBackground\": \"#383a49\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#D4D4D4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"emphasis\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"strong\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"header\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6A9955\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.numeric\",\n\t\t\t\t\"variable.other.enummember\",\n\t\t\t\t\"keyword.operator.plus.exponent\",\n\t\t\t\t\"keyword.operator.minus.exponent\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#646695\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.tag.css\",\n\t\t\t\t\"entity.name.tag.less\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d7ba7d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9cdcfe\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.attribute-name.class.css\",\n\t\t\t\t\"source.css entity.other.attribute-name.class\",\n\t\t\t\t\"entity.other.attribute-name.id.css\",\n\t\t\t\t\"entity.other.attribute-name.parent-selector.css\",\n\t\t\t\t\"entity.other.attribute-name.parent.less\",\n\t\t\t\t\"source.css entity.other.attribute-name.pseudo-class\",\n\t\t\t\t\"entity.other.attribute-name.pseudo-element.css\",\n\t\t\t\t\"source.css.less entity.other.attribute-name.id\",\n\t\t\t\t\"entity.other.attribute-name.scss\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d7ba7d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f44747\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.underline\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"punctuation.definition.quote.begin.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6A9955\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"punctuation.definition.list.begin.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6796e6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"brackets of XML/HTML tags\",\n\t\t\t\"scope\": \"punctuation.definition.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#808080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.preprocessor\",\n\t\t\t\t\"entity.name.function.preprocessor\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.structure.dictionary.key.python\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9cdcfe\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.diff.header\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage.type\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"storage.modifier\",\n\t\t\t\t\"keyword.operator.noexcept\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"meta.embedded.assembly\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.value\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d16969\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String interpolation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.template-expression.begin\",\n\t\t\t\t\"punctuation.definition.template-expression.end\",\n\t\t\t\t\"punctuation.section.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Reset JavaScript string interpolation expression\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.template.expression\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d4d4d4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.type.vendored.property-name\",\n\t\t\t\t\"support.type.property-name\",\n\t\t\t\t\"source.css variable\",\n\t\t\t\t\"source.coffee.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9cdcfe\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.control\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.operator\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d4d4d4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.operator.new\",\n\t\t\t\t\"keyword.operator.expression\",\n\t\t\t\t\"keyword.operator.cast\",\n\t\t\t\t\"keyword.operator.sizeof\",\n\t\t\t\t\"keyword.operator.alignof\",\n\t\t\t\t\"keyword.operator.typeid\",\n\t\t\t\t\"keyword.operator.alignas\",\n\t\t\t\t\"keyword.operator.instanceof\",\n\t\t\t\t\"keyword.operator.logical.python\",\n\t\t\t\t\"keyword.operator.wordlike\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.other.unit\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.section.embedded.begin.php\",\n\t\t\t\t\"punctuation.section.embedded.end.php\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"support.function.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9cdcfe\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.sha.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"coloring of the Java import and package identifiers\",\n\t\t\t\"scope\": [\n\t\t\t\t\"storage.modifier.import.java\",\n\t\t\t\t\"variable.language.wildcard.java\",\n\t\t\t\t\"storage.modifier.package.java\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d4d4d4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"this.self\",\n\t\t\t\"scope\": \"variable.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true,\n\t\"semanticTokenColors\": {\n\t\t\"newOperator\": \"#d4d4d4\",\n\t\t\"stringLiteral\": \"#ce9178\",\n\t\t\"customLiteral\": \"#D4D4D4\",\n\t\t\"numberLiteral\": \"#b5cea8\",\n\t}\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/hc_black.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Dark High Contrast\",\n\t\"colors\": {\n\t\t\"editor.background\": \"#000000\",\n\t\t\"editor.foreground\": \"#FFFFFF\",\n\t\t\"editorIndentGuide.background1\": \"#FFFFFF\",\n\t\t\"editorIndentGuide.activeBackground1\": \"#FFFFFF\",\n\t\t\"sideBarTitle.foreground\": \"#FFFFFF\",\n\t\t\"selection.background\": \"#008000\",\n\t\t\"editor.selectionBackground\": \"#FFFFFF\",\n\t\t\"statusBarItem.remoteBackground\": \"#00000000\",\n\t\t\"ports.iconRunningProcessForeground\": \"#FFFFFF\",\n\t\t\"editorWhitespace.foreground\": \"#7c7c7c\",\n\t\t\"actionBar.toggledBackground\": \"#383a49\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#FFFFFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"emphasis\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"strong\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.diff.header\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7ca668\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.numeric\",\n\t\t\t\t\"constant.other.color.rgb-value\",\n\t\t\t\t\"constant.other.rgb-value\",\n\t\t\t\t\"support.constant.color\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b46695\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.character\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.tag.css\",\n\t\t\t\t\"entity.name.tag.less\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d7ba7d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9cdcfe\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.attribute-name.class.css\",\n\t\t\t\t\"source.css entity.other.attribute-name.class\",\n\t\t\t\t\"entity.other.attribute-name.id.css\",\n\t\t\t\t\"entity.other.attribute-name.parent-selector.css\",\n\t\t\t\t\"entity.other.attribute-name.parent.less\",\n\t\t\t\t\"source.css entity.other.attribute-name.pseudo-class\",\n\t\t\t\t\"entity.other.attribute-name.pseudo-element.css\",\n\t\t\t\t\"source.css.less entity.other.attribute-name.id\",\n\t\t\t\t\"entity.other.attribute-name.scss\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d7ba7d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f44747\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.underline\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#6796e6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"brackets of XML/HTML tags\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.tag\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#808080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.structure.dictionary.key.python\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9cdcfe\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage.type\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage.modifier\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.value\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ce9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d16969\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String interpolation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.template-expression.begin\",\n\t\t\t\t\"punctuation.definition.template-expression.end\",\n\t\t\t\t\"punctuation.section.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Reset JavaScript string interpolation expression\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.template.expression\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ffffff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.type.vendored.property-name\",\n\t\t\t\t\"support.type.property-name\",\n\t\t\t\t\"source.css variable\",\n\t\t\t\t\"source.coffee.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d4d4d4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.control\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.operator\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d4d4d4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.operator.new\",\n\t\t\t\t\"keyword.operator.expression\",\n\t\t\t\t\"keyword.operator.cast\",\n\t\t\t\t\"keyword.operator.sizeof\",\n\t\t\t\t\"keyword.operator.logical.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.other.unit\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"support.function.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d4d4d4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.sha.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5cea8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"coloring of the Java import and package identifiers\",\n\t\t\t\"scope\": [\n\t\t\t\t\"storage.modifier.import.java\",\n\t\t\t\t\"variable.language.wildcard.java\",\n\t\t\t\t\"storage.modifier.package.java\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d4d4d4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"coloring of the TS this\",\n\t\t\t\"scope\": \"variable.language.this\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#569cd6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function declarations\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.function\",\n\t\t\t\t\"support.function\",\n\t\t\t\t\"support.constant.handlebars\",\n\t\t\t\t\"source.powershell variable.other.member\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#DCDCAA\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Types declaration and references\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.class\",\n\t\t\t\t\"support.type\",\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.name.scope-resolution\",\n\t\t\t\t\"entity.name.class\",\n\t\t\t\t\"storage.type.cs\",\n\t\t\t\t\"storage.type.generic.cs\",\n\t\t\t\t\"storage.type.modifier.cs\",\n\t\t\t\t\"storage.type.variable.cs\",\n\t\t\t\t\"storage.type.annotation.java\",\n\t\t\t\t\"storage.type.generic.java\",\n\t\t\t\t\"storage.type.java\",\n\t\t\t\t\"storage.type.object.array.java\",\n\t\t\t\t\"storage.type.primitive.array.java\",\n\t\t\t\t\"storage.type.primitive.java\",\n\t\t\t\t\"storage.type.token.java\",\n\t\t\t\t\"storage.type.groovy\",\n\t\t\t\t\"storage.type.annotation.groovy\",\n\t\t\t\t\"storage.type.parameters.groovy\",\n\t\t\t\t\"storage.type.generic.groovy\",\n\t\t\t\t\"storage.type.object.array.groovy\",\n\t\t\t\t\"storage.type.primitive.array.groovy\",\n\t\t\t\t\"storage.type.primitive.groovy\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4EC9B0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Types declaration and references, TS grammar specific\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.type.cast.expr\",\n\t\t\t\t\"meta.type.new.expr\",\n\t\t\t\t\"support.constant.math\",\n\t\t\t\t\"support.constant.dom\",\n\t\t\t\t\"support.constant.json\",\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4EC9B0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Control flow / Special keywords\",\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.control\",\n\t\t\t\t\"source.cpp keyword.operator.new\",\n\t\t\t\t\"source.cpp keyword.operator.delete\",\n\t\t\t\t\"keyword.other.using\",\n\t\t\t\t\"keyword.other.directive.using\",\n\t\t\t\t\"keyword.other.operator\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#C586C0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable and parameter name\",\n\t\t\t\"scope\": [\n\t\t\t\t\"variable\",\n\t\t\t\t\"meta.definition.variable.name\",\n\t\t\t\t\"support.variable\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9CDCFE\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Object keys, TS grammar specific\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.object-literal.key\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9CDCFE\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS property value\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.constant.property-value\",\n\t\t\t\t\"support.constant.font-name\",\n\t\t\t\t\"support.constant.media-type\",\n\t\t\t\t\"support.constant.media\",\n\t\t\t\t\"constant.other.color.rgb-value\",\n\t\t\t\t\"constant.other.rgb-value\",\n\t\t\t\t\"support.constant.color\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CE9178\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HC Search Editor context line override\",\n\t\t\t\"scope\": \"meta.resultLinePrefix.contextLinePrefix.search\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CBEDCB\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true,\n\t\"semanticTokenColors\": {\n\t\t\"newOperator\": \"#FFFFFF\",\n\t\t\"stringLiteral\": \"#ce9178\",\n\t\t\"customLiteral\": \"#DCDCAA\",\n\t\t\"numberLiteral\": \"#b5cea8\"\n\t}\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/hc_light.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Light High Contrast\",\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#292929\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"emphasis\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"strong\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.diff.header\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#062F4A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#515151\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.numeric\",\n\t\t\t\t\"variable.other.enummember\",\n\t\t\t\t\"keyword.operator.plus.exponent\",\n\t\t\t\t\"keyword.operator.minus.exponent\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#096d48\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#811F3F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.selector\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#264F78\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.attribute-name.class.css\",\n\t\t\t\t\"source.css entity.other.attribute-name.class\",\n\t\t\t\t\"entity.other.attribute-name.id.css\",\n\t\t\t\t\"entity.other.attribute-name.parent-selector.css\",\n\t\t\t\t\"entity.other.attribute-name.parent.less\",\n\t\t\t\t\"source.css entity.other.attribute-name.pseudo-class\",\n\t\t\t\t\"entity.other.attribute-name.pseudo-element.css\",\n\t\t\t\t\"source.css.less entity.other.attribute-name.id\",\n\t\t\t\t\"entity.other.attribute-name.scss\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#B5200D\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.underline\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000080\",\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\",\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#096d48\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#5A5A5A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451A5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.quote.begin.markdown\",\n\t\t\t\t\"punctuation.definition.list.begin.markdown\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451A5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"punctuation.definition.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"meta.preprocessor\", \"entity.name.function.preprocessor\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5200d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#096d48\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.structure.dictionary.key.python\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451A5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage.type\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"storage.modifier\", \"keyword.operator.noexcept\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"string\", \"meta.embedded.assembly\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"string.comment.buffered.block.pug\",\n\t\t\t\t\"string.quoted.pug\",\n\t\t\t\t\"string.interpolated.pug\",\n\t\t\t\t\"string.unquoted.plain.in.yaml\",\n\t\t\t\t\"string.unquoted.plain.out.yaml\",\n\t\t\t\t\"string.unquoted.block.yaml\",\n\t\t\t\t\"string.quoted.single.yaml\",\n\t\t\t\t\"string.quoted.double.xml\",\n\t\t\t\t\"string.quoted.single.xml\",\n\t\t\t\t\"string.unquoted.cdata.xml\",\n\t\t\t\t\"string.quoted.double.html\",\n\t\t\t\t\"string.quoted.single.html\",\n\t\t\t\t\"string.unquoted.html\",\n\t\t\t\t\"string.quoted.single.handlebars\",\n\t\t\t\t\"string.quoted.double.handlebars\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#811F3F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.template-expression.begin\",\n\t\t\t\t\"punctuation.definition.template-expression.end\",\n\t\t\t\t\"punctuation.section.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"meta.template.expression\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.constant.property-value\",\n\t\t\t\t\"support.constant.font-name\",\n\t\t\t\t\"support.constant.media-type\",\n\t\t\t\t\"support.constant.media\",\n\t\t\t\t\"constant.other.color.rgb-value\",\n\t\t\t\t\"constant.other.rgb-value\",\n\t\t\t\t\"support.constant.color\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451A5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.type.vendored.property-name\",\n\t\t\t\t\"support.type.property-name\",\n\t\t\t\t\"source.css variable\",\n\t\t\t\t\"source.coffee.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#264F78\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"support.type.property-name.json\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451A5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.control\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.operator\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.operator.new\",\n\t\t\t\t\"keyword.operator.expression\",\n\t\t\t\t\"keyword.operator.cast\",\n\t\t\t\t\"keyword.operator.sizeof\",\n\t\t\t\t\"keyword.operator.alignof\",\n\t\t\t\t\"keyword.operator.typeid\",\n\t\t\t\t\"keyword.operator.alignas\",\n\t\t\t\t\"keyword.operator.instanceof\",\n\t\t\t\t\"keyword.operator.logical.python\",\n\t\t\t\t\"keyword.operator.wordlike\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.other.unit\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#096d48\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.section.embedded.begin.php\",\n\t\t\t\t\"punctuation.section.embedded.end.php\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"support.function.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451A5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.sha.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#096d48\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"storage.modifier.import.java\",\n\t\t\t\t\"variable.language.wildcard.java\",\n\t\t\t\t\"storage.modifier.package.java\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"variable.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.function\",\n\t\t\t\t\"support.function\",\n\t\t\t\t\"support.constant.handlebars\",\n\t\t\t\t\"source.powershell variable.other.member\",\n\t\t\t\t\"entity.name.operator.custom-literal\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#5e2cbc\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.class\",\n\t\t\t\t\"support.type\",\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.other.attribute\",\n\t\t\t\t\"entity.name.scope-resolution\",\n\t\t\t\t\"entity.name.class\",\n\t\t\t\t\"storage.type.numeric.go\",\n\t\t\t\t\"storage.type.byte.go\",\n\t\t\t\t\"storage.type.boolean.go\",\n\t\t\t\t\"storage.type.string.go\",\n\t\t\t\t\"storage.type.uintptr.go\",\n\t\t\t\t\"storage.type.error.go\",\n\t\t\t\t\"storage.type.rune.go\",\n\t\t\t\t\"storage.type.cs\",\n\t\t\t\t\"storage.type.generic.cs\",\n\t\t\t\t\"storage.type.modifier.cs\",\n\t\t\t\t\"storage.type.variable.cs\",\n\t\t\t\t\"storage.type.annotation.java\",\n\t\t\t\t\"storage.type.generic.java\",\n\t\t\t\t\"storage.type.java\",\n\t\t\t\t\"storage.type.object.array.java\",\n\t\t\t\t\"storage.type.primitive.array.java\",\n\t\t\t\t\"storage.type.primitive.java\",\n\t\t\t\t\"storage.type.token.java\",\n\t\t\t\t\"storage.type.groovy\",\n\t\t\t\t\"storage.type.annotation.groovy\",\n\t\t\t\t\"storage.type.parameters.groovy\",\n\t\t\t\t\"storage.type.generic.groovy\",\n\t\t\t\t\"storage.type.object.array.groovy\",\n\t\t\t\t\"storage.type.primitive.array.groovy\",\n\t\t\t\t\"storage.type.primitive.groovy\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#185E73\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.type.cast.expr\",\n\t\t\t\t\"meta.type.new.expr\",\n\t\t\t\t\"support.constant.math\",\n\t\t\t\t\"support.constant.dom\",\n\t\t\t\t\"support.constant.json\",\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#185E73\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.control\",\n\t\t\t\t\"source.cpp keyword.operator.new\",\n\t\t\t\t\"source.cpp keyword.operator.delete\",\n\t\t\t\t\"keyword.other.using\",\n\t\t\t\t\"keyword.other.directive.using\",\n\t\t\t\t\"keyword.other.operator\",\n\t\t\t\t\"entity.name.operator\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b5200d\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"variable\",\n\t\t\t\t\"meta.definition.variable.name\",\n\t\t\t\t\"support.variable\",\n\t\t\t\t\"entity.name.variable\",\n\t\t\t\t\"constant.other.placeholder\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#001080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"variable.other.constant\", \"variable.other.enummember\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#02715D\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"meta.object-literal.key\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#001080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.constant.property-value\",\n\t\t\t\t\"support.constant.font-name\",\n\t\t\t\t\"support.constant.media-type\",\n\t\t\t\t\"support.constant.media\",\n\t\t\t\t\"constant.other.color.rgb-value\",\n\t\t\t\t\"constant.other.rgb-value\",\n\t\t\t\t\"support.constant.color\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451A5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.group.regexp\",\n\t\t\t\t\"punctuation.definition.group.assertion.regexp\",\n\t\t\t\t\"punctuation.definition.character-class.regexp\",\n\t\t\t\t\"punctuation.character.set.begin.regexp\",\n\t\t\t\t\"punctuation.character.set.end.regexp\",\n\t\t\t\t\"keyword.operator.negation.regexp\",\n\t\t\t\t\"support.other.parenthesis.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#D16969\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character.character-class.regexp\",\n\t\t\t\t\"constant.other.character-class.set.regexp\",\n\t\t\t\t\"constant.other.character-class.regexp\",\n\t\t\t\t\"constant.character.set.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#811F3F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\"keyword.operator.or.regexp\", \"keyword.control.anchor.regexp\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#EE0000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.character\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0F4A85\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.character.escape\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#EE0000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.label\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.info-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#316BCD\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.warn-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CD9731\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.error-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CD3131\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.debug-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#800080\"\n\t\t\t}\n\t\t}\n\t],\n\t\"colors\": {\n\t\t\"actionBar.toggledBackground\": \"#dddddd\",\n\t\t\"statusBarItem.remoteBackground\": \"#FFFFFF\",\n\t\t\"statusBarItem.remoteForeground\": \"#000000\"\n\t}\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/light_modern.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Default Light Modern\",\n\t\"include\": \"./light_plus.json\",\n\t\"colors\": {\n\t\t\"activityBar.activeBorder\": \"#005FB8\",\n\t\t\"activityBar.background\": \"#F8F8F8\",\n\t\t\"activityBar.border\": \"#E5E5E5\",\n\t\t\"activityBar.foreground\": \"#1F1F1F\",\n\t\t\"activityBar.inactiveForeground\": \"#616161\",\n\t\t\"activityBarBadge.background\": \"#005FB8\",\n\t\t\"activityBarBadge.foreground\": \"#FFFFFF\",\n\t\t\"badge.background\": \"#CCCCCC\",\n\t\t\"badge.foreground\": \"#3B3B3B\",\n\t\t\"button.background\": \"#005FB8\",\n\t\t\"button.border\": \"#0000001a\",\n\t\t\"button.foreground\": \"#FFFFFF\",\n\t\t\"button.hoverBackground\": \"#0258A8\",\n\t\t\"button.secondaryBackground\": \"#E5E5E5\",\n\t\t\"button.secondaryForeground\": \"#3B3B3B\",\n\t\t\"button.secondaryHoverBackground\": \"#CCCCCC\",\n\t\t\"chat.slashCommandBackground\": \"#D2ECFF\",\n\t\t\"chat.slashCommandForeground\": \"#306CA2\",\n\t\t\"chat.editedFileForeground\": \"#895503\",\n\t\t\"checkbox.background\": \"#F8F8F8\",\n\t\t\"checkbox.border\": \"#CECECE\",\n\t\t\"descriptionForeground\": \"#3B3B3B\",\n\t\t\"dropdown.background\": \"#FFFFFF\",\n\t\t\"dropdown.border\": \"#CECECE\",\n\t\t\"dropdown.foreground\": \"#3B3B3B\",\n\t\t\"dropdown.listBackground\": \"#FFFFFF\",\n\t\t\"editor.background\": \"#FFFFFF\",\n\t\t\"editor.foreground\": \"#3B3B3B\",\n\t\t\"editor.inactiveSelectionBackground\": \"#E5EBF1\",\n\t\t\"editor.selectionHighlightBackground\": \"#ADD6FF80\",\n\t\t\"editorGroup.border\": \"#E5E5E5\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#F8F8F8\",\n\t\t\"editorGroupHeader.tabsBorder\": \"#E5E5E5\",\n\t\t\"editorGutter.addedBackground\": \"#2EA043\",\n\t\t\"editorGutter.deletedBackground\": \"#F85149\",\n\t\t\"editorGutter.modifiedBackground\": \"#005FB8\",\n\t\t\"editorIndentGuide.background1\": \"#D3D3D3\",\n\t\t\"editorLineNumber.activeForeground\": \"#171184\",\n\t\t\"editorLineNumber.foreground\": \"#6E7681\",\n\t\t\"editorOverviewRuler.border\": \"#E5E5E5\",\n\t\t\"editorSuggestWidget.background\": \"#F8F8F8\",\n\t\t\"editorWidget.background\": \"#F8F8F8\",\n\t\t\"errorForeground\": \"#F85149\",\n\t\t\"focusBorder\": \"#005FB8\",\n\t\t\"foreground\": \"#3B3B3B\",\n\t\t\"icon.foreground\": \"#3B3B3B\",\n\t\t\"input.background\": \"#FFFFFF\",\n\t\t\"input.border\": \"#CECECE\",\n\t\t\"input.foreground\": \"#3B3B3B\",\n\t\t\"input.placeholderForeground\": \"#767676\",\n\t\t\"inputOption.activeBackground\": \"#BED6ED\",\n\t\t\"inputOption.activeBorder\": \"#005FB8\",\n\t\t\"inputOption.activeForeground\": \"#000000\",\n\t\t\"keybindingLabel.foreground\": \"#3B3B3B\",\n\t\t\"list.activeSelectionBackground\": \"#E8E8E8\",\n\t\t\"list.activeSelectionForeground\": \"#000000\",\n\t\t\"list.activeSelectionIconForeground\": \"#000000\",\n\t\t\"list.hoverBackground\": \"#F2F2F2\",\n\t\t\"list.focusAndSelectionOutline\": \"#005FB8\",\n\t\t\"menu.border\": \"#CECECE\",\n\t\t\"menu.selectionBackground\": \"#005FB8\",\n\t\t\"menu.selectionForeground\": \"#ffffff\",\n\t\t\"notebook.cellBorderColor\": \"#E5E5E5\",\n\t\t\"notebook.selectedCellBackground\": \"#C8DDF150\",\n\t\t\"notificationCenterHeader.background\": \"#FFFFFF\",\n\t\t\"notificationCenterHeader.foreground\": \"#3B3B3B\",\n\t\t\"notifications.background\": \"#FFFFFF\",\n\t\t\"notifications.border\": \"#E5E5E5\",\n\t\t\"notifications.foreground\": \"#3B3B3B\",\n\t\t\"panel.background\": \"#F8F8F8\",\n\t\t\"panel.border\": \"#E5E5E5\",\n\t\t\"panelInput.border\": \"#E5E5E5\",\n\t\t\"panelTitle.activeBorder\": \"#005FB8\",\n\t\t\"panelTitle.activeForeground\": \"#3B3B3B\",\n\t\t\"panelTitle.inactiveForeground\": \"#3B3B3B\",\n\t\t\"peekViewEditor.matchHighlightBackground\": \"#BB800966\",\n\t\t\"peekViewResult.background\": \"#FFFFFF\",\n\t\t\"peekViewResult.matchHighlightBackground\": \"#BB800966\",\n\t\t\"pickerGroup.border\": \"#E5E5E5\",\n\t\t\"pickerGroup.foreground\": \"#8B949E\",\n\t\t\"ports.iconRunningProcessForeground\": \"#369432\",\n\t\t\"progressBar.background\": \"#005FB8\",\n\t\t\"quickInput.background\": \"#F8F8F8\",\n\t\t\"quickInput.foreground\": \"#3B3B3B\",\n\t\t\"searchEditor.textInputBorder\": \"#CECECE\",\n\t\t\"settings.dropdownBackground\": \"#FFFFFF\",\n\t\t\"settings.dropdownBorder\": \"#CECECE\",\n\t\t\"settings.headerForeground\": \"#1F1F1F\",\n\t\t\"settings.modifiedItemIndicator\": \"#BB800966\",\n\t\t\"settings.numberInputBorder\": \"#CECECE\",\n\t\t\"settings.textInputBorder\": \"#CECECE\",\n\t\t\"sideBar.background\": \"#F8F8F8\",\n\t\t\"sideBar.border\": \"#E5E5E5\",\n\t\t\"sideBar.foreground\": \"#3B3B3B\",\n\t\t\"sideBarSectionHeader.background\": \"#F8F8F8\",\n\t\t\"sideBarSectionHeader.border\": \"#E5E5E5\",\n\t\t\"sideBarSectionHeader.foreground\": \"#3B3B3B\",\n\t\t\"sideBarTitle.foreground\": \"#3B3B3B\",\n\t\t\"statusBar.background\": \"#F8F8F8\",\n\t\t\"statusBar.foreground\": \"#3B3B3B\",\n\t\t\"statusBar.border\": \"#E5E5E5\",\n\t\t\"statusBarItem.hoverBackground\": \"#B8B8B850\",\n\t\t\"statusBarItem.compactHoverBackground\": \"#CCCCCC\",\n\t\t\"statusBar.debuggingBackground\": \"#FD716C\",\n\t\t\"statusBar.debuggingForeground\": \"#000000\",\n\t\t\"statusBar.focusBorder\": \"#005FB8\",\n\t\t\"statusBar.noFolderBackground\": \"#F8F8F8\",\n\t\t\"statusBarItem.errorBackground\": \"#C72E0F\",\n\t\t\"statusBarItem.focusBorder\": \"#005FB8\",\n\t\t\"statusBarItem.prominentBackground\": \"#6E768166\",\n\t\t\"statusBarItem.remoteBackground\": \"#005FB8\",\n\t\t\"statusBarItem.remoteForeground\": \"#FFFFFF\",\n\t\t\"tab.activeBackground\": \"#FFFFFF\",\n\t\t\"tab.activeBorder\": \"#F8F8F8\",\n\t\t\"tab.activeBorderTop\": \"#005FB8\",\n\t\t\"tab.activeForeground\": \"#3B3B3B\",\n\t\t\"tab.selectedBorderTop\": \"#68a3da\",\n\t\t\"tab.border\": \"#E5E5E5\",\n\t\t\"tab.hoverBackground\": \"#FFFFFF\",\n\t\t\"tab.inactiveBackground\": \"#F8F8F8\",\n\t\t\"tab.inactiveForeground\": \"#868686\",\n\t\t\"tab.lastPinnedBorder\": \"#D4D4D4\",\n\t\t\"tab.unfocusedActiveBorder\": \"#F8F8F8\",\n\t\t\"tab.unfocusedActiveBorderTop\": \"#E5E5E5\",\n\t\t\"tab.unfocusedHoverBackground\": \"#F8F8F8\",\n\t\t\"terminalCursor.foreground\": \"#005FB8\",\n\t\t\"terminal.foreground\": \"#3B3B3B\",\n\t\t\"terminal.inactiveSelectionBackground\": \"#E5EBF1\",\n\t\t\"terminal.tab.activeBorder\": \"#005FB8\",\n\t\t\"textBlockQuote.background\": \"#F8F8F8\",\n\t\t\"textBlockQuote.border\": \"#E5E5E5\",\n\t\t\"textCodeBlock.background\": \"#F8F8F8\",\n\t\t\"textLink.activeForeground\": \"#005FB8\",\n\t\t\"textLink.foreground\": \"#005FB8\",\n\t\t\"textPreformat.foreground\": \"#3B3B3B\",\n\t\t\"textPreformat.background\": \"#0000001F\",\n\t\t\"textSeparator.foreground\": \"#21262D\",\n\t\t\"titleBar.activeBackground\": \"#F8F8F8\",\n\t\t\"titleBar.activeForeground\": \"#1E1E1E\",\n\t\t\"titleBar.border\": \"#E5E5E5\",\n\t\t\"titleBar.inactiveBackground\": \"#F8F8F8\",\n\t\t\"titleBar.inactiveForeground\": \"#8B949E\",\n\t\t\"welcomePage.tileBackground\": \"#F3F3F3\",\n\t\t\"widget.border\": \"#E5E5E5\"\n\t},\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/light_plus.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Light+\",\n\t\"include\": \"./light_vs.json\",\n\t\"tokenColors\": [ // adds rules to the light vs rules\n\t\t{\n\t\t\t\"name\": \"Function declarations\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.function\",\n\t\t\t\t\"support.function\",\n\t\t\t\t\"support.constant.handlebars\",\n\t\t\t\t\"source.powershell variable.other.member\",\n\t\t\t\t\"entity.name.operator.custom-literal\" // See https://en.cppreference.com/w/cpp/language/user_literal\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#795E26\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Types declaration and references\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.class\",\n\t\t\t\t\"support.type\",\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.other.attribute\",\n\t\t\t\t\"entity.name.scope-resolution\",\n\t\t\t\t\"entity.name.class\",\n\t\t\t\t\"storage.type.numeric.go\",\n\t\t\t\t\"storage.type.byte.go\",\n\t\t\t\t\"storage.type.boolean.go\",\n\t\t\t\t\"storage.type.string.go\",\n\t\t\t\t\"storage.type.uintptr.go\",\n\t\t\t\t\"storage.type.error.go\",\n\t\t\t\t\"storage.type.rune.go\",\n\t\t\t\t\"storage.type.cs\",\n\t\t\t\t\"storage.type.generic.cs\",\n\t\t\t\t\"storage.type.modifier.cs\",\n\t\t\t\t\"storage.type.variable.cs\",\n\t\t\t\t\"storage.type.annotation.java\",\n\t\t\t\t\"storage.type.generic.java\",\n\t\t\t\t\"storage.type.java\",\n\t\t\t\t\"storage.type.object.array.java\",\n\t\t\t\t\"storage.type.primitive.array.java\",\n\t\t\t\t\"storage.type.primitive.java\",\n\t\t\t\t\"storage.type.token.java\",\n\t\t\t\t\"storage.type.groovy\",\n\t\t\t\t\"storage.type.annotation.groovy\",\n\t\t\t\t\"storage.type.parameters.groovy\",\n\t\t\t\t\"storage.type.generic.groovy\",\n\t\t\t\t\"storage.type.object.array.groovy\",\n\t\t\t\t\"storage.type.primitive.array.groovy\",\n\t\t\t\t\"storage.type.primitive.groovy\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#267f99\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Types declaration and references, TS grammar specific\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.type.cast.expr\",\n\t\t\t\t\"meta.type.new.expr\",\n\t\t\t\t\"support.constant.math\",\n\t\t\t\t\"support.constant.dom\",\n\t\t\t\t\"support.constant.json\",\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#267f99\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Control flow / Special keywords\",\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.control\",\n\t\t\t\t\"source.cpp keyword.operator.new\",\n\t\t\t\t\"source.cpp keyword.operator.delete\",\n\t\t\t\t\"keyword.other.using\",\n\t\t\t\t\"keyword.other.directive.using\",\n\t\t\t\t\"keyword.other.operator\",\n\t\t\t\t\"entity.name.operator\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AF00DB\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable and parameter name\",\n\t\t\t\"scope\": [\n\t\t\t\t\"variable\",\n\t\t\t\t\"meta.definition.variable.name\",\n\t\t\t\t\"support.variable\",\n\t\t\t\t\"entity.name.variable\",\n\t\t\t\t\"constant.other.placeholder\", // placeholders in strings\n\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#001080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Constants and enums\",\n\t\t\t\"scope\": [\n\t\t\t\t\"variable.other.constant\",\n\t\t\t\t\"variable.other.enummember\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0070C1\",\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Object keys, TS grammar specific\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.object-literal.key\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#001080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS property value\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.constant.property-value\",\n\t\t\t\t\"support.constant.font-name\",\n\t\t\t\t\"support.constant.media-type\",\n\t\t\t\t\"support.constant.media\",\n\t\t\t\t\"constant.other.color.rgb-value\",\n\t\t\t\t\"constant.other.rgb-value\",\n\t\t\t\t\"support.constant.color\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451a5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Regular expression groups\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.group.regexp\",\n\t\t\t\t\"punctuation.definition.group.assertion.regexp\",\n\t\t\t\t\"punctuation.definition.character-class.regexp\",\n\t\t\t\t\"punctuation.character.set.begin.regexp\",\n\t\t\t\t\"punctuation.character.set.end.regexp\",\n\t\t\t\t\"keyword.operator.negation.regexp\",\n\t\t\t\t\"support.other.parenthesis.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d16969\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character.character-class.regexp\",\n\t\t\t\t\"constant.other.character-class.set.regexp\",\n\t\t\t\t\"constant.other.character-class.regexp\",\n\t\t\t\t\"constant.character.set.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#811f3f\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.operator.or.regexp\",\n\t\t\t\t\"keyword.control.anchor.regexp\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#EE0000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character\",\n\t\t\t\t\"constant.other.option\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.character.escape\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#EE0000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.label\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true,\n\t\"semanticTokenColors\": {\n\t\t\"newOperator\": \"#AF00DB\",\n\t\t\"stringLiteral\": \"#a31515\",\n\t\t\"customLiteral\": \"#795E26\",\n\t\t\"numberLiteral\": \"#098658\",\n\t}\n}\n"
  },
  {
    "path": "extensions/theme-defaults/themes/light_vs.json",
    "content": "{\n\t\"$schema\": \"vscode://schemas/color-theme\",\n\t\"name\": \"Light (Visual Studio)\",\n\t\"colors\": {\n\t\t\"checkbox.border\": \"#919191\",\n\t\t\"editor.background\": \"#FFFFFF\",\n\t\t\"editor.foreground\": \"#000000\",\n\t\t\"editor.inactiveSelectionBackground\": \"#E5EBF1\",\n\t\t\"editorIndentGuide.background1\": \"#D3D3D3\",\n\t\t\"editorIndentGuide.activeBackground1\": \"#939393\",\n\t\t\"editor.selectionHighlightBackground\": \"#ADD6FF80\",\n\t\t\"editorSuggestWidget.background\": \"#F3F3F3\",\n\t\t\"activityBarBadge.background\": \"#007ACC\",\n\t\t\"sideBarTitle.foreground\": \"#6F6F6F\",\n\t\t\"list.hoverBackground\": \"#E8E8E8\",\n\t\t\"menu.border\": \"#D4D4D4\",\n\t\t\"input.placeholderForeground\": \"#767676\",\n\t\t\"searchEditor.textInputBorder\": \"#CECECE\",\n\t\t\"settings.textInputBorder\": \"#CECECE\",\n\t\t\"settings.numberInputBorder\": \"#CECECE\",\n\t\t\"statusBarItem.remoteForeground\": \"#FFF\",\n\t\t\"statusBarItem.remoteBackground\": \"#16825D\",\n\t\t\"ports.iconRunningProcessForeground\": \"#369432\",\n\t\t\"sideBarSectionHeader.background\": \"#0000\",\n\t\t\"sideBarSectionHeader.border\": \"#61616130\",\n\t\t\"tab.selectedForeground\": \"#333333b3\",\n\t\t\"tab.selectedBackground\": \"#ffffffa5\",\n\t\t\"tab.lastPinnedBorder\": \"#61616130\",\n\t\t\"notebook.cellBorderColor\": \"#E8E8E8\",\n\t\t\"notebook.selectedCellBackground\": \"#c8ddf150\",\n\t\t\"statusBarItem.errorBackground\": \"#c72e0f\",\n\t\t\"list.activeSelectionIconForeground\": \"#FFF\",\n\t\t\"list.focusAndSelectionOutline\": \"#90C2F9\",\n\t\t\"terminal.inactiveSelectionBackground\": \"#E5EBF1\",\n\t\t\"widget.border\": \"#d4d4d4\",\n\t\t\"actionBar.toggledBackground\": \"#dddddd\",\n\t\t\"diffEditor.unchangedRegionBackground\": \"#f8f8f8\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"emphasis\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"strong\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.diff.header\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#008000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.numeric\",\n\t\t\t\t\"variable.other.enummember\",\n\t\t\t\t\"keyword.operator.plus.exponent\",\n\t\t\t\t\"keyword.operator.minus.exponent\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#098658\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#811f3f\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css tags in selectors, xml tags\",\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#800000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.selector\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#800000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#e50000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.attribute-name.class.css\",\n\t\t\t\t\"source.css entity.other.attribute-name.class\",\n\t\t\t\t\"entity.other.attribute-name.id.css\",\n\t\t\t\t\"entity.other.attribute-name.parent-selector.css\",\n\t\t\t\t\"entity.other.attribute-name.parent.less\",\n\t\t\t\t\"source.css entity.other.attribute-name.pseudo-class\",\n\t\t\t\t\"entity.other.attribute-name.pseudo-element.css\",\n\t\t\t\t\"source.css.less entity.other.attribute-name.id\",\n\t\t\t\t\"entity.other.attribute-name.scss\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#800000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#cd3131\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.underline\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#000080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#800000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#098658\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#a31515\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451a5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.quote.begin.markdown\",\n\t\t\t\t\"punctuation.definition.list.begin.markdown\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451a5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#800000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"brackets of XML/HTML tags\",\n\t\t\t\"scope\": \"punctuation.definition.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#800000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.preprocessor\",\n\t\t\t\t\"entity.name.function.preprocessor\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#a31515\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.preprocessor.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#098658\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"meta.structure.dictionary.key.python\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451a5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"storage.type\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"storage.modifier\",\n\t\t\t\t\"keyword.operator.noexcept\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"meta.embedded.assembly\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#a31515\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"string.comment.buffered.block.pug\",\n\t\t\t\t\"string.quoted.pug\",\n\t\t\t\t\"string.interpolated.pug\",\n\t\t\t\t\"string.unquoted.plain.in.yaml\",\n\t\t\t\t\"string.unquoted.plain.out.yaml\",\n\t\t\t\t\"string.unquoted.block.yaml\",\n\t\t\t\t\"string.quoted.single.yaml\",\n\t\t\t\t\"string.quoted.double.xml\",\n\t\t\t\t\"string.quoted.single.xml\",\n\t\t\t\t\"string.unquoted.cdata.xml\",\n\t\t\t\t\"string.quoted.double.html\",\n\t\t\t\t\"string.quoted.single.html\",\n\t\t\t\t\"string.unquoted.html\",\n\t\t\t\t\"string.quoted.single.handlebars\",\n\t\t\t\t\"string.quoted.double.handlebars\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#811f3f\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String interpolation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.template-expression.begin\",\n\t\t\t\t\"punctuation.definition.template-expression.end\",\n\t\t\t\t\"punctuation.section.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Reset JavaScript string interpolation expression\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.template.expression\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.constant.property-value\",\n\t\t\t\t\"support.constant.font-name\",\n\t\t\t\t\"support.constant.media-type\",\n\t\t\t\t\"support.constant.media\",\n\t\t\t\t\"constant.other.color.rgb-value\",\n\t\t\t\t\"constant.other.rgb-value\",\n\t\t\t\t\"support.constant.color\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451a5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.type.vendored.property-name\",\n\t\t\t\t\"support.type.property-name\",\n\t\t\t\t\"source.css variable\",\n\t\t\t\t\"source.coffee.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#e50000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"support.type.property-name.json\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451a5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.control\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.operator\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.operator.new\",\n\t\t\t\t\"keyword.operator.expression\",\n\t\t\t\t\"keyword.operator.cast\",\n\t\t\t\t\"keyword.operator.sizeof\",\n\t\t\t\t\"keyword.operator.alignof\",\n\t\t\t\t\"keyword.operator.typeid\",\n\t\t\t\t\"keyword.operator.alignas\",\n\t\t\t\t\"keyword.operator.instanceof\",\n\t\t\t\t\"keyword.operator.logical.python\",\n\t\t\t\t\"keyword.operator.wordlike\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"keyword.other.unit\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#098658\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.section.embedded.begin.php\",\n\t\t\t\t\"punctuation.section.embedded.end.php\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#800000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"support.function.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0451a5\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.sha.git-rebase\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#098658\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"coloring of the Java import and package identifiers\",\n\t\t\t\"scope\": [\n\t\t\t\t\"storage.modifier.import.java\",\n\t\t\t\t\"variable.language.wildcard.java\",\n\t\t\t\t\"storage.modifier.package.java\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"this.self\",\n\t\t\t\"scope\": \"variable.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#0000ff\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true,\n\t\"semanticTokenColors\": {\n\t\t\"newOperator\": \"#0000ff\",\n\t\t\"stringLiteral\": \"#a31515\",\n\t\t\"customLiteral\": \"#000000\",\n\t\t\"numberLiteral\": \"#098658\",\n\t}\n}\n"
  },
  {
    "path": "extensions/theme-kimbie-dark/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-kimbie-dark/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-kimbie-dark/package.json",
    "content": "{\n  \"name\": \"theme-kimbie-dark\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Kimbie Dark\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/kimbie-dark-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-kimbie-dark/package.nls.json",
    "content": "{\n\t\"displayName\": \"Kimbie Dark Theme\",\n\t\"description\": \"Kimbie dark theme for Visual Studio Code\",\n\t\"themeLabel\": \"Kimbie Dark\"\n}\n"
  },
  {
    "path": "extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json",
    "content": "{\n\t\"name\": \"Kimbie Dark\",\n\t\"type\": \"dark\",\n\t\"colors\": {\n\t\t\"input.background\": \"#51412c\",\n\t\t\"dropdown.background\": \"#51412c\",\n\t\t\"editor.background\": \"#221a0f\",\n\t\t\"editor.foreground\": \"#d3af86\",\n\t\t\"focusBorder\": \"#a57a4c\",\n\t\t\"list.highlightForeground\": \"#e3b583\",\n\t\t\"list.activeSelectionBackground\": \"#7c5021\",\n\t\t\"list.hoverBackground\": \"#7c502166\",\n\t\t\"quickInputList.focusBackground\": \"#7c5021AA\",\n\t\t\"list.inactiveSelectionBackground\": \"#645342\",\n\t\t\"pickerGroup.foreground\": \"#e3b583\",\n\t\t\"pickerGroup.border\": \"#e3b583\",\n\t\t\"inputOption.activeBorder\": \"#a57a4c\",\n\t\t\"selection.background\": \"#84613daa\",\n\t\t\"editor.selectionBackground\": \"#84613daa\",\n\t\t\"minimap.selectionHighlight\": \"#84613daa\",\n\t\t\"editorWidget.background\": \"#131510\",\n\t\t\"editorHoverWidget.background\": \"#221a14\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#131510\",\n\t\t\"editorLineNumber.activeForeground\": \"#adadad\",\n\t\t\"tab.inactiveBackground\": \"#131510\",\n\t\t\"tab.lastPinnedBorder\": \"#51412c\",\n\t\t\"titleBar.activeBackground\": \"#423523\",\n\t\t\"statusBar.background\": \"#423523\",\n\t\t\"statusBar.debuggingBackground\": \"#423523\",\n\t\t\"statusBar.noFolderBackground\": \"#423523\",\n\t\t\"statusBarItem.remoteBackground\": \"#6e583b\",\n\t\t\"ports.iconRunningProcessForeground\": \"#369432\",\n\t\t\"activityBar.background\": \"#221a0f\",\n\t\t\"activityBar.foreground\": \"#d3af86\",\n\t\t\"sideBar.background\": \"#362712\",\n\t\t\"menu.background\": \"#362712\",\n\t\t\"menu.foreground\": \"#CCCCCC\",\n\t\t\"editor.lineHighlightBackground\": \"#5e452b\",\n\t\t\"editorCursor.foreground\": \"#d3af86\",\n\t\t\"editorWhitespace.foreground\": \"#a57a4c\",\n\t\t\"peekViewTitle.background\": \"#362712\",\n\t\t\"peekView.border\": \"#5e452b\",\n\t\t\"peekViewResult.background\": \"#362712\",\n\t\t\"peekViewEditor.background\": \"#221a14\",\n\t\t\"peekViewEditor.matchHighlightBackground\": \"#84613daa\",\n\t\t\"button.background\": \"#6e583b\",\n\t\t\"inputValidation.infoBorder\": \"#1b60a5\",\n\t\t\"inputValidation.infoBackground\": \"#2b2a42\",\n\t\t\"inputValidation.warningBackground\": \"#51412c\",\n\t\t// \"inputValidation.warningBorder\": \"#5B7E7A\",\n\t\t\"inputValidation.errorBackground\": \"#5f0d0d\",\n\t\t\"inputValidation.errorBorder\": \"#9d2f23\",\n\t\t\"badge.background\": \"#7f5d38\",\n\t\t\"progressBar.background\": \"#7f5d38\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d3af86\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d3af86\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Text\",\n\t\t\t\"scope\": \"variable.parameter.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d3af86\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comments\",\n\t\t\t\"scope\": [\n\t\t\t\t\"comment\",\n\t\t\t\t\"punctuation.definition.comment\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#a57a4c\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Punctuation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.string\",\n\t\t\t\t\"punctuation.definition.variable\",\n\t\t\t\t\"punctuation.definition.string\",\n\t\t\t\t\"punctuation.definition.parameters\",\n\t\t\t\t\"punctuation.definition.string\",\n\t\t\t\t\"punctuation.definition.array\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d3af86\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Delimiters\",\n\t\t\t\"scope\": \"none\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d3af86\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Operators\",\n\t\t\t\"scope\": \"keyword.operator\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d3af86\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keywords\",\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword\",\n\t\t\t\t\"keyword.control\",\n\t\t\t\t\"keyword.operator.new.cpp\",\n\t\t\t\t\"keyword.operator.delete.cpp\",\n\t\t\t\t\"keyword.other.using\",\n\t\t\t\t\"keyword.other.directive.using\",\n\t\t\t\t\"keyword.other.operator\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#98676a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variables\",\n\t\t\t\"scope\": \"variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#dc3958\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Functions\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.function\",\n\t\t\t\t\"meta.require\",\n\t\t\t\t\"support.function.any-method\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#8ab1b0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Classes\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.class\",\n\t\t\t\t\"entity.name.class\",\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.name.scope-resolution\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f06431\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Methods\",\n\t\t\t\"scope\": \"keyword.other.special-method\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#8ab1b0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage\",\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#98676a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Support\",\n\t\t\t\"scope\": \"support.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7e602c\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Strings, Inherited Class\",\n\t\t\t\"scope\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"constant.other.symbol\",\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#889b4a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Integers\",\n\t\t\t\"scope\": \"constant.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Floats\",\n\t\t\t\"scope\": \"none\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Boolean\",\n\t\t\t\"scope\": \"none\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Constants\",\n\t\t\t\"scope\": \"constant\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tags\",\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#dc3958\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Attributes\",\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Attribute IDs\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.attribute-name.id\",\n\t\t\t\t\"punctuation.definition.entity\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#8ab1b0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Selector\",\n\t\t\t\"scope\": \"meta.selector\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#98676a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Values\",\n\t\t\t\"scope\": \"none\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Headings\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.heading\",\n\t\t\t\t\"markup.heading.setext\",\n\t\t\t\t\"punctuation.definition.heading\",\n\t\t\t\t\"entity.name.section\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#8ab1b0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Units\",\n\t\t\t\"scope\": \"keyword.other.unit\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Bold\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.bold\",\n\t\t\t\t\"punctuation.definition.bold\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#f06431\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Italic\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.italic\",\n\t\t\t\t\"punctuation.definition.italic\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#98676a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Code\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#889b4a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Link Text\",\n\t\t\t\"scope\": \"string.other.link\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#dc3958\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Link Url\",\n\t\t\t\"scope\": \"meta.link\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Lists\",\n\t\t\t\"scope\": \"markup.list\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#dc3958\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Quotes\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f79a32\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Separator\",\n\t\t\t\"scope\": \"meta.separator\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#d3af86\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Inserted\",\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#889b4a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Deleted\",\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#dc3958\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Changed\",\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#98676a\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Colors\",\n\t\t\t\"scope\": \"constant.other.color\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7e602c\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Regular Expressions\",\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7e602c\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Escape Characters\",\n\t\t\t\"scope\": \"constant.character.escape\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7e602c\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Embedded\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.section.embedded\",\n\t\t\t\t\"variable.interpolation\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#088649\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#dc3958\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/theme-monokai/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-monokai/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-monokai/package.json",
    "content": "{\n  \"name\": \"theme-monokai\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Monokai\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/monokai-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-monokai/package.nls.json",
    "content": "{\n\t\"displayName\": \"Monokai Theme\",\n\t\"description\": \"Monokai theme for Visual Studio Code\",\n\t\"themeLabel\": \"Monokai\"\n}\n"
  },
  {
    "path": "extensions/theme-monokai/themes/monokai-color-theme.json",
    "content": "// This theme's colors are based on the original Monokai:\n//   #1e1f1c (tab well, borders)\n//   #272822 (editor background)\n//   #414339 (selection)\n//   #75715e (focus)\n//   #f8f8f2 (editor foreground)\n{\n\t\"type\": \"dark\",\n\t\"colors\": {\n\t\t\"dropdown.background\": \"#414339\",\n\t\t\"list.activeSelectionBackground\": \"#75715E\",\n\t\t\"quickInputList.focusBackground\": \"#414339\",\n\t\t\"dropdown.listBackground\": \"#1e1f1c\",\n\t\t\"list.inactiveSelectionBackground\": \"#414339\",\n\t\t\"list.hoverBackground\": \"#3e3d32\",\n\t\t\"list.dropBackground\": \"#414339\",\n\t\t\"list.highlightForeground\": \"#f8f8f2\",\n\t\t\"button.background\": \"#75715E\",\n\t\t\"editor.background\": \"#272822\",\n\t\t\"editor.foreground\": \"#f8f8f2\",\n\t\t\"selection.background\": \"#878b9180\",\n\t\t\"editor.selectionHighlightBackground\": \"#575b6180\",\n\t\t\"editor.selectionBackground\": \"#878b9180\",\n\t\t\"minimap.selectionHighlight\": \"#878b9180\",\n\t\t\"editor.wordHighlightBackground\": \"#4a4a7680\",\n\t\t\"editor.wordHighlightStrongBackground\": \"#6a6a9680\",\n\t\t\"editor.lineHighlightBackground\": \"#3e3d32\",\n\t\t\"editorLineNumber.activeForeground\": \"#c2c2bf\",\n\t\t\"editorCursor.foreground\": \"#f8f8f0\",\n\t\t\"editorWhitespace.foreground\": \"#464741\",\n\t\t\"editorIndentGuide.background\": \"#464741\",\n\t\t\"editorIndentGuide.activeBackground\": \"#767771\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#1e1f1c\",\n\t\t\"editorGroup.dropBackground\": \"#41433980\",\n\t\t\"tab.inactiveBackground\": \"#34352f\",\n\t\t\"tab.border\": \"#1e1f1c\",\n\t\t\"tab.inactiveForeground\": \"#ccccc7\", // needs to be bright so it's readable when another editor group is focused\n\t\t\"tab.lastPinnedBorder\": \"#414339\",\n\t\t\"widget.shadow\": \"#00000098\",\n\t\t\"progressBar.background\": \"#75715E\",\n\t\t\"badge.background\": \"#75715E\",\n\t\t\"badge.foreground\": \"#f8f8f2\",\n\t\t\"editorLineNumber.foreground\": \"#90908a\",\n\t\t\"panelTitle.activeForeground\": \"#f8f8f2\",\n\t\t\"panelTitle.activeBorder\": \"#75715E\",\n\t\t\"panelTitle.inactiveForeground\": \"#75715E\",\n\t\t\"panel.border\": \"#414339\",\n\t\t\"settings.focusedRowBackground\": \"#4143395A\",\n\t\t\"titleBar.activeBackground\": \"#1e1f1c\",\n\t\t\"statusBar.background\": \"#414339\",\n\t\t\"statusBar.noFolderBackground\": \"#414339\",\n\t\t\"statusBar.debuggingBackground\": \"#75715E\",\n\t\t\"statusBarItem.remoteBackground\": \"#AC6218\",\n\t\t\"ports.iconRunningProcessForeground\": \"#ccccc7\",\n\t\t\"activityBar.background\": \"#272822\",\n\t\t\"activityBar.foreground\": \"#f8f8f2\",\n\t\t\"sideBar.background\": \"#1e1f1c\",\n\t\t\"sideBarSectionHeader.background\": \"#272822\",\n\t\t\"menu.background\": \"#1e1f1c\",\n\t\t\"menu.foreground\": \"#cccccc\",\n\t\t\"pickerGroup.foreground\": \"#75715E\",\n\t\t\"input.background\": \"#414339\",\n\t\t\"inputOption.activeBorder\": \"#75715E\",\n\t\t\"focusBorder\": \"#99947c\",\n\t\t\"editorWidget.background\": \"#1e1f1c\",\n\t\t\"debugToolBar.background\": \"#1e1f1c\",\n\t\t\"diffEditor.insertedTextBackground\": \"#4b661680\", // middle of #272822 and #a6e22e\n\t\t\"diffEditor.removedTextBackground\": \"#90274A70\", // middle of #272822 and #f92672\n\t\t\"inputValidation.errorBackground\": \"#90274A\", // middle of #272822 and #f92672\n\t\t\"inputValidation.errorBorder\": \"#f92672\",\n\t\t\"inputValidation.warningBackground\": \"#848528\", // middle of #272822 and #e2e22e\n\t\t\"inputValidation.warningBorder\": \"#e2e22e\",\n\t\t\"inputValidation.infoBackground\": \"#546190\", // middle of #272822 and #819aff\n\t\t\"inputValidation.infoBorder\": \"#819aff\",\n\t\t\"editorHoverWidget.background\": \"#414339\",\n\t\t\"editorHoverWidget.border\": \"#75715E\",\n\t\t\"editorSuggestWidget.background\": \"#272822\",\n\t\t\"editorSuggestWidget.border\": \"#75715E\",\n\t\t\"editorGroup.border\": \"#34352f\",\n\t\t\"peekView.border\": \"#75715E\",\n\t\t\"peekViewEditor.background\": \"#272822\",\n\t\t\"peekViewResult.background\": \"#1e1f1c\",\n\t\t\"peekViewTitle.background\": \"#1e1f1c\",\n\t\t\"peekViewResult.selectionBackground\": \"#414339\",\n\t\t\"peekViewResult.matchHighlightBackground\": \"#75715E\",\n\t\t\"peekViewEditor.matchHighlightBackground\": \"#75715E\",\n\t\t\"terminal.ansiBlack\": \"#333333\",\n\t\t\"terminal.ansiRed\": \"#C4265E\", // the bright color with ~75% transparent on the background\n\t\t\"terminal.ansiGreen\": \"#86B42B\",\n\t\t\"terminal.ansiYellow\": \"#B3B42B\",\n\t\t\"terminal.ansiBlue\": \"#6A7EC8\",\n\t\t\"terminal.ansiMagenta\": \"#8C6BC8\",\n\t\t\"terminal.ansiCyan\": \"#56ADBC\",\n\t\t\"terminal.ansiWhite\": \"#e3e3dd\",\n\t\t\"terminal.ansiBrightBlack\": \"#666666\",\n\t\t\"terminal.ansiBrightRed\": \"#f92672\",\n\t\t\"terminal.ansiBrightGreen\": \"#A6E22E\",\n\t\t\"terminal.ansiBrightYellow\": \"#e2e22e\", // hue shifted #A6E22E\n\t\t\"terminal.ansiBrightBlue\": \"#819aff\", // hue shifted #AE81FF\n\t\t\"terminal.ansiBrightMagenta\": \"#AE81FF\",\n\t\t\"terminal.ansiBrightCyan\": \"#66D9EF\",\n\t\t\"terminal.ansiBrightWhite\": \"#f8f8f2\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F8F8F2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F8F8F2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comment\",\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#88846f\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String\",\n\t\t\t\"scope\": \"string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#E6DB74\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Template Definition\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.template-expression\",\n\t\t\t\t\"punctuation.section.embedded\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F92672\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Reset JavaScript string interpolation expression\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.template.expression\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F8F8F2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Number\",\n\t\t\t\"scope\": \"constant.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AE81FF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Built-in constant\",\n\t\t\t\"scope\": \"constant.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AE81FF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"User-defined constant\",\n\t\t\t\"scope\": \"constant.character, constant.other\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AE81FF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable\",\n\t\t\t\"scope\": \"variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#F8F8F2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keyword\",\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F92672\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage\",\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#F92672\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage type\",\n\t\t\t\"scope\": \"storage.type\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#66D9EF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Class name\",\n\t\t\t\"scope\": \"entity.name.type, entity.name.class, entity.name.namespace, entity.name.scope-resolution\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\",\n\t\t\t\t\"foreground\": \"#A6E22E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Inherited class\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic underline\",\n\t\t\t\t\"foreground\": \"#A6E22E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function name\",\n\t\t\t\"scope\": \"entity.name.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#A6E22E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function argument\",\n\t\t\t\"scope\": \"variable.parameter\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#FD971F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag name\",\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#F92672\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag attribute\",\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#A6E22E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library function\",\n\t\t\t\"scope\": \"support.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#66D9EF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library constant\",\n\t\t\t\"scope\": \"support.constant\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#66D9EF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library class/type\",\n\t\t\t\"scope\": \"support.type, support.class\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#66D9EF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library variable\",\n\t\t\t\"scope\": \"support.other.variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#F44747\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid deprecated\",\n\t\t\t\"scope\": \"invalid.deprecated\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F44747\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"JSON String\",\n\t\t\t\"scope\": \"meta.structure.dictionary.json string.quoted.double.json\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CFCFC2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.header\",\n\t\t\t\"scope\": \"meta.diff, meta.diff.header\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#75715E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.deleted\",\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F92672\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.inserted\",\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#A6E22E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.changed\",\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#E6DB74\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.numeric.line-number.find-in-files - match\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AE81FFA0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"entity.name.filename.find-in-files\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#E6DB74\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Quote\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F92672\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Lists\",\n\t\t\t\"scope\": \"markup.list\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#E6DB74\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Styling\",\n\t\t\t\"scope\": \"markup.bold, markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#66D9EF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Inline\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#FD971F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Headings\",\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#A6E22E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Setext Header\",\n\t\t\t\"scope\": \"markup.heading.setext\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#A6E22E\",\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Headings\",\n\t\t\t\"scope\": \"markup.heading.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Quote\",\n\t\t\t\"scope\": \"markup.quote.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#75715E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Bold\",\n\t\t\t\"scope\": \"markup.bold.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Link Title/Description\",\n\t\t\t\"scope\": \"string.other.link.title.markdown,string.other.link.description.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AE81FF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Underline Link/Image\",\n\t\t\t\"scope\": \"markup.underline.link.markdown,markup.underline.link.image.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#E6DB74\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Emphasis\",\n\t\t\t\"scope\": \"markup.italic.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Punctuation Definition Link\",\n\t\t\t\"scope\": \"markup.list.unnumbered.markdown, markup.list.numbered.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f8f8f2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown List Punctuation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.list.begin.markdown\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#A6E22E\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.info-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6796e6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.warn-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#cd9731\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.error-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f44747\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.debug-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b267e6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"this.self\",\n\t\t\t\"scope\": \"variable.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#FD971F\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/theme-monokai-dimmed/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-monokai-dimmed/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-monokai-dimmed/package.json",
    "content": "{\n  \"name\": \"theme-monokai-dimmed\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Monokai Dimmed\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/dimmed-monokai-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-monokai-dimmed/package.nls.json",
    "content": "{\n\t\"displayName\": \"Monokai Dimmed Theme\",\n\t\"description\": \"Monokai dimmed theme for Visual Studio Code\",\n\t\"themeLabel\": \"Monokai Dimmed\"\n}\n"
  },
  {
    "path": "extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json",
    "content": "{\n\t\"type\": \"dark\",\n\t\"colors\": {\n\t\t\"dropdown.background\": \"#525252\",\n\t\t\"list.activeSelectionBackground\": \"#707070\",\n\t\t\"quickInputList.focusBackground\": \"#707070\",\n\t\t\"list.inactiveSelectionBackground\": \"#4e4e4e\",\n\t\t\"list.hoverBackground\": \"#444444\",\n\t\t\"list.highlightForeground\": \"#e58520\",\n\t\t\"button.background\": \"#565656\",\n\t\t\"editor.background\": \"#1e1e1e\",\n\t\t\"editor.foreground\": \"#c5c8c6\",\n\t\t\"editor.selectionBackground\": \"#676b7180\",\n\t\t\"minimap.selectionHighlight\": \"#676b7180\",\n\t\t\"editor.selectionHighlightBackground\": \"#575b6180\",\n\t\t\"editor.lineHighlightBackground\": \"#303030\",\n\t\t\"editorLineNumber.activeForeground\": \"#949494\",\n\t\t\"editor.wordHighlightBackground\": \"#4747a180\",\n\t\t\"editor.wordHighlightStrongBackground\": \"#6767ce80\",\n\t\t\"editorCursor.foreground\": \"#c07020\",\n\t\t\"editorWhitespace.foreground\": \"#505037\",\n\t\t\"editorIndentGuide.background1\": \"#505037\",\n\t\t\"editorIndentGuide.activeBackground1\": \"#707057\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#282828\",\n\t\t\"tab.inactiveBackground\": \"#404040\",\n\t\t\"tab.border\": \"#303030\",\n\t\t\"tab.inactiveForeground\": \"#d8d8d8\",\n\t\t\"tab.lastPinnedBorder\": \"#505050\",\n\t\t\"peekView.border\": \"#3655b5\",\n\t\t\"panelTitle.activeForeground\": \"#ffffff\",\n\t\t\"statusBar.background\": \"#505050\",\n\t\t\"statusBar.debuggingBackground\": \"#505050\",\n\t\t\"statusBar.noFolderBackground\": \"#505050\",\n\t\t\"titleBar.activeBackground\": \"#505050\",\n\t\t\"statusBarItem.remoteBackground\": \"#3655b5\",\n\t\t\"ports.iconRunningProcessForeground\": \"#CCCCCC\",\n\t\t\"activityBar.background\": \"#353535\",\n\t\t\"activityBar.foreground\": \"#ffffff\",\n\t\t\"activityBarBadge.background\": \"#3655b5\",\n\t\t\"sideBar.background\": \"#272727\",\n\t\t\"sideBarSectionHeader.background\": \"#505050\",\n\t\t\"menu.background\": \"#272727\",\n\t\t\"menu.foreground\": \"#CCCCCC\",\n\t\t\"pickerGroup.foreground\": \"#b0b0b0\",\n\t\t\"inputOption.activeBorder\": \"#3655b5\",\n\t\t\"focusBorder\": \"#3655b5\",\n\t\t\"terminal.ansiBlack\": \"#1e1e1e\",\n\t\t\"terminal.ansiRed\": \"#C4265E\", // the bright color with ~75% transparent on the background\n\t\t\"terminal.ansiGreen\": \"#86B42B\",\n\t\t\"terminal.ansiYellow\": \"#B3B42B\",\n\t\t\"terminal.ansiBlue\": \"#6A7EC8\",\n\t\t\"terminal.ansiMagenta\": \"#8C6BC8\",\n\t\t\"terminal.ansiCyan\": \"#56ADBC\",\n\t\t\"terminal.ansiWhite\": \"#e3e3dd\",\n\t\t\"terminal.ansiBrightBlack\": \"#666666\",\n\t\t\"terminal.ansiBrightRed\": \"#f92672\",\n\t\t\"terminal.ansiBrightGreen\": \"#A6E22E\",\n\t\t\"terminal.ansiBrightYellow\": \"#e2e22e\", // hue shifted #A6E22E\n\t\t\"terminal.ansiBrightBlue\": \"#819aff\", // hue shifted #AE81FF\n\t\t\"terminal.ansiBrightMagenta\": \"#AE81FF\",\n\t\t\"terminal.ansiBrightCyan\": \"#66D9EF\",\n\t\t\"terminal.ansiBrightWhite\": \"#f8f8f2\",\n\t\t\"terminal.inactiveSelectionBackground\": \"#676b7140\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#C5C8C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#C5C8C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comment\",\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9A9B99\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String\",\n\t\t\t\"scope\": \"string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String Embedded Source\",\n\t\t\t\"scope\": \"string source\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D08442\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Number\",\n\t\t\t\"scope\": \"constant.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Built-in constant\",\n\t\t\t\"scope\": \"constant.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#408080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"User-defined constant\",\n\t\t\t\"scope\": \"constant.character, constant.other\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#8080FF\",\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Support\",\n\t\t\t\"scope\": \"support\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#C7444A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage\",\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Class name\",\n\t\t\t\"scope\": \"entity.name.class, entity.name.type, entity.name.namespace, entity.name.scope-resolution\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9B0000\",\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Inherited class\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#C7444A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function name\",\n\t\t\t\"scope\": \"entity.name.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#CE6700\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function argument\",\n\t\t\t\"scope\": \"variable.parameter\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library function\",\n\t\t\t\"scope\": \"support.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keyword\",\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#676867\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Class Variable\",\n\t\t\t\"scope\": \"variable.other, variable.js, punctuation.separator.variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#FF0B00\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Normal Variable\",\n\t\t\t\"scope\": \"variable.other.php, variable.other.normal\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function Object\",\n\t\t\t\"scope\": \"meta.function-call.object\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function Call Variable\",\n\t\t\t\"scope\": \"variable.other.property\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keyword Control / Special\",\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword.control\",\n\t\t\t\t\"keyword.operator.new.cpp\",\n\t\t\t\t\"keyword.operator.delete.cpp\",\n\t\t\t\t\"keyword.other.using\",\n\t\t\t\t\"keyword.other.directive.using\",\n\t\t\t\t\"keyword.other.operator\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag\",\n\t\t\t\"scope\": \"meta.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag Name\",\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Doctype\",\n\t\t\t\"scope\": \"meta.doctype, meta.tag.sgml-declaration.doctype, meta.tag.sgml.doctype\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag Inline Source\",\n\t\t\t\"scope\": \"meta.tag.inline source, text.html.php.source\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag Other\",\n\t\t\t\"scope\": \"meta.tag.other, entity.name.tag.style, entity.name.tag.script, meta.tag.block.script, source.js.embedded punctuation.definition.tag.html, source.css.embedded punctuation.definition.tag.html\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag Attribute\",\n\t\t\t\"scope\": \"entity.other.attribute-name, meta.tag punctuation.definition.string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag Value\",\n\t\t\t\"scope\": \"meta.tag string -source -punctuation, text source text meta.tag string -punctuation\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Meta Brace\",\n\t\t\t\"scope\": \"punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML ID\",\n\t\t\t\"scope\": \"meta.toc-list.id\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML String\",\n\t\t\t\"scope\": \"string.quoted.double.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html, punctuation.definition.string.end.html source, string.quoted.double.html source\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML Tags\",\n\t\t\t\"scope\": \"punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS ID\",\n\t\t\t\"scope\": \"meta.selector entity.other.attribute-name.id\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS Property Name\",\n\t\t\t\"scope\": \"source.css support.type.property-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#676867\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS Property Value\",\n\t\t\t\"scope\": \"meta.property-group support.constant.property-value, meta.property-value support.constant.property-value\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#C7444A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"JavaScript Variable\",\n\t\t\t\"scope\": \"variable.language.js\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CC555A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Template Definition\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.template-expression\",\n\t\t\t\t\"punctuation.section.embedded.coffee\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#D08442\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Reset JavaScript string interpolation expression\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.template.expression\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#C5C8C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"PHP Function Call\",\n\t\t\t\"scope\": \"meta.function-call.object.php\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"PHP Single Quote HMTL Fix\",\n\t\t\t\"scope\": \"punctuation.definition.string.end.php, punctuation.definition.string.begin.php\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"PHP Parenthesis HMTL Fix\",\n\t\t\t\"scope\": \"source.php.embedded.line.html\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#676867\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"PHP Punctuation Embedded\",\n\t\t\t\"scope\": \"punctuation.section.embedded.begin.php, punctuation.section.embedded.end.php\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D08442\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Ruby Symbol\",\n\t\t\t\"scope\": \"constant.other.symbol.ruby\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Ruby Variable\",\n\t\t\t\"scope\": \"variable.language.ruby\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Ruby Special Method\",\n\t\t\t\"scope\": \"keyword.other.special-method.ruby\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D9B700\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Ruby Embedded Source\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.section.embedded.begin.ruby\",\n\t\t\t\t\"punctuation.section.embedded.end.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#D08442\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"SQL\",\n\t\t\t\"scope\": \"keyword.other.DML.sql\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: header\",\n\t\t\t\"scope\": \"meta.diff, meta.diff.header\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#E0EDDD\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: deleted\",\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#dc322f\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: changed\",\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#cb4b16\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: inserted\",\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#219186\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Quote\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9872A2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Lists\",\n\t\t\t\"scope\": \"markup.list\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9AA83A\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Styling\",\n\t\t\t\"scope\": \"markup.bold, markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6089B4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Inline\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#FF0080\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Headings\",\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Setext Header\",\n\t\t\t\"scope\": \"markup.heading.setext\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D0B344\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Headings\",\n\t\t\t\"scope\": \"markup.heading.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Quote\",\n\t\t\t\"scope\": \"markup.quote.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Bold\",\n\t\t\t\"scope\": \"markup.bold.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Link Title/Description\",\n\t\t\t\"scope\": \"string.other.link.title.markdown,string.other.link.description.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AE81FF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Underline Link/Image\",\n\t\t\t\"scope\": \"markup.underline.link.markdown,markup.underline.link.image.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Emphasis\",\n\t\t\t\"scope\": \"markup.italic.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown Punctuation Definition Link\",\n\t\t\t\"scope\": \"markup.list.unnumbered.markdown, markup.list.numbered.markdown\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markdown List Punctuation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.list.begin.markdown\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.info-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6796e6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.warn-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#cd9731\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.error-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f44747\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.debug-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b267e6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"this.self\",\n\t\t\t\"scope\": \"variable.language\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#c7444a\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/theme-quietlight/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-quietlight/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-quietlight/package.json",
    "content": "{\n  \"name\": \"theme-quietlight\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Quiet Light\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs\",\n        \"path\": \"./themes/quietlight-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-quietlight/package.nls.json",
    "content": "{\n\t\"displayName\": \"Quiet Light Theme\",\n\t\"description\": \"Quiet light theme for Visual Studio Code\",\n\t\"themeLabel\": \"Quiet Light\"\n}\n"
  },
  {
    "path": "extensions/theme-quietlight/themes/quietlight-color-theme.json",
    "content": "{\n\t\"name\": \"Quiet Light\",\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#333333\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#333333\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comments\",\n\t\t\t\"scope\": [\n\t\t\t\t\"comment\",\n\t\t\t\t\"punctuation.definition.comment\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#AAAAAA\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comments: Preprocessor\",\n\t\t\t\"scope\": \"comment.block.preprocessor\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#AAAAAA\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comments: Documentation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"comment.documentation\",\n\t\t\t\t\"comment.block.documentation\",\n\t\t\t\t\"comment.block.documentation punctuation.definition.comment \"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#448C27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#cd3131\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid - Illegal\",\n\t\t\t\"scope\": \"invalid.illegal\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#660000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Operators\",\n\t\t\t\"scope\": \"keyword.operator\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#777777\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keywords\",\n\t\t\t\"scope\": [\n\t\t\t\t\"keyword\",\n\t\t\t\t\"storage\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4B69C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Types\",\n\t\t\t\"scope\": [\n\t\t\t\t\"storage.type\",\n\t\t\t\t\"support.type\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7A3E9D\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Language Constants\",\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.language\",\n\t\t\t\t\"support.constant\",\n\t\t\t\t\"variable.language\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9C5D27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variables\",\n\t\t\t\"scope\": [\n\t\t\t\t\"variable\",\n\t\t\t\t\"support.variable\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7A3E9D\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Functions\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.function\",\n\t\t\t\t\"support.function\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#AA3731\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Classes\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.name.scope-resolution\",\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\",\n\t\t\t\t\"support.class\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#7A3E9D\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Exceptions\",\n\t\t\t\"scope\": \"entity.name.exception\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#660000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Sections\",\n\t\t\t\"scope\": \"entity.name.section\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Numbers, Characters\",\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.numeric\",\n\t\t\t\t\"constant.character\",\n\t\t\t\t\"constant\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9C5D27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Strings\",\n\t\t\t\"scope\": \"string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#448C27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Strings: Escape Sequences\",\n\t\t\t\"scope\": \"constant.character.escape\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#777777\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Strings: Regular Expressions\",\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4B69C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Strings: Symbols\",\n\t\t\t\"scope\": \"constant.other.symbol\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9C5D27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Punctuation\",\n\t\t\t\"scope\": \"punctuation\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#777777\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML: Doctype Declaration\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.tag.sgml.doctype\",\n\t\t\t\t\"meta.tag.sgml.doctype string\",\n\t\t\t\t\"meta.tag.sgml.doctype entity.name.tag\",\n\t\t\t\t\"meta.tag.sgml punctuation.definition.tag.html\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AAAAAA\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML: Tags\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.tag\",\n\t\t\t\t\"punctuation.definition.tag.html\",\n\t\t\t\t\"punctuation.definition.tag.begin.html\",\n\t\t\t\t\"punctuation.definition.tag.end.html\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#91B3E0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML: Tag Names\",\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4B69C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML: Attribute Names\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.tag entity.other.attribute-name\",\n\t\t\t\t\"entity.other.attribute-name.html\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#8190A0\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"HTML: Entities\",\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character.entity\",\n\t\t\t\t\"punctuation.definition.entity\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9C5D27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS: Selectors\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.selector\",\n\t\t\t\t\"meta.selector entity\",\n\t\t\t\t\"meta.selector entity punctuation\",\n\t\t\t\t\"entity.name.tag.css\",\n\t\t\t\t\"entity.name.tag.less\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7A3E9D\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS: Property Names\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.property-name\",\n\t\t\t\t\"support.type.property-name\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9C5D27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS: Property Values\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.property-value\",\n\t\t\t\t\"meta.property-value constant.other\",\n\t\t\t\t\"support.constant.property-value\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#448C27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"CSS: Important Keyword\",\n\t\t\t\"scope\": \"keyword.other.important\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Changed\",\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Deletion\",\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Emphasis\",\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Error\",\n\t\t\t\"scope\": \"markup.error\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#660000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Insertion\",\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Link\",\n\t\t\t\"scope\": \"meta.link\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4B69C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Output\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.output\",\n\t\t\t\t\"markup.raw\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#777777\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Prompt\",\n\t\t\t\"scope\": \"markup.prompt\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#777777\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Heading\",\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#AA3731\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Strong\",\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Traceback\",\n\t\t\t\"scope\": \"markup.traceback\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#660000\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Underline\",\n\t\t\t\"scope\": \"markup.underline\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Quote\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7A3E9D\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Lists\",\n\t\t\t\"scope\": \"markup.list\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4B69C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Styling\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.bold\",\n\t\t\t\t\"markup.italic\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#448C27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Inline\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9C5D27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Extra: Diff Range\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.diff.range\",\n\t\t\t\t\"meta.diff.index\",\n\t\t\t\t\"meta.separator\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#434343\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Extra: Diff From\",\n\t\t\t\"scope\": [\"meta.diff.header.from-file\", \"punctuation.definition.from-file.diff\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4B69C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Extra: Diff To\",\n\t\t\t\"scope\": [\"meta.diff.header.to-file\", \"punctuation.definition.to-file.diff\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4B69C6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: deleted\",\n\t\t\t\"scope\": \"markup.deleted.diff\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#C73D20\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: changed\",\n\t\t\t\"scope\": \"markup.changed.diff\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#9C5D27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: inserted\",\n\t\t\t\"scope\": \"markup.inserted.diff\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#448C27\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"JSX: Tags\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.tag.js\",\n\t\t\t\t\"punctuation.definition.tag.begin.js\",\n\t\t\t\t\"punctuation.definition.tag.end.js\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t  \"foreground\": \"#91B3E0\"\n\t\t\t}\n      \t},\n      \t{\n\t\t\t\"name\": \"JSX: InnerText\",\n\t\t\t\"scope\": \"meta.jsx.children.js\",\n\t\t\t\"settings\": {\n\t\t\t  \"foreground\": \"#333333ff\"\n\t\t\t}\n      \t}\n\t],\n\t\"colors\": {\n\t\t\"focusBorder\": \"#9769dc\",\n\t\t\"pickerGroup.foreground\": \"#A6B39B\",\n\t\t\"pickerGroup.border\": \"#749351\",\n\t\t\"list.activeSelectionForeground\": \"#6c6c6c\",\n\t\t\"quickInputList.focusBackground\": \"#CADEB9\",\n\t\t\"list.hoverBackground\": \"#e0e0e0\",\n\t\t\"list.activeSelectionBackground\": \"#c4d9b1\",\n\t\t\"list.inactiveSelectionBackground\": \"#d3dbcd\",\n\t\t\"list.highlightForeground\": \"#9769dc\",\n\t\t\"selection.background\": \"#C9D0D9\",\n\t\t\"editor.background\": \"#F5F5F5\",\n\t\t\"editorWhitespace.foreground\": \"#AAAAAA\",\n\t\t\"editor.lineHighlightBackground\": \"#E4F6D4\",\n\t\t\"editorLineNumber.activeForeground\": \"#9769dc\",\n\t\t\"editor.selectionBackground\": \"#C9D0D9\",\n\t\t\"minimap.selectionHighlight\": \"#C9D0D9\",\n\t\t\"panel.background\": \"#F5F5F5\",\n\t\t\"sideBar.background\": \"#F2F2F2\",\n\t\t\"sideBarSectionHeader.background\": \"#ede8ef\",\n\t\t\"editorLineNumber.foreground\": \"#6D705B\",\n\t\t\"editorCursor.foreground\": \"#54494B\",\n\t\t\"inputOption.activeBorder\": \"#adafb7\",\n\t\t\"dropdown.background\": \"#F5F5F5\",\n\t\t\"editor.findMatchBackground\": \"#BF9CAC\",\n\t\t\"editor.findMatchHighlightBackground\": \"#edc9d899\",\n\t\t\"peekViewEditor.matchHighlightBackground\": \"#C2DFE3\",\n\t\t\"peekViewTitle.background\": \"#F2F8FC\",\n\t\t\"peekViewEditor.background\": \"#F2F8FC\",\n\t\t\"peekViewResult.background\": \"#F2F8FC\",\n\t\t\"peekView.border\": \"#705697\",\n\t\t\"peekViewResult.matchHighlightBackground\": \"#93C6D6\",\n\t\t\"tab.lastPinnedBorder\": \"#c9d0d9\",\n\t\t\"statusBar.background\": \"#705697\",\n\t\t\"welcomePage.tileBackground\": \"#f0f0f7\",\n\t\t\"statusBar.noFolderBackground\": \"#705697\",\n\t\t\"statusBar.debuggingBackground\": \"#705697\",\n\t\t\"statusBarItem.remoteBackground\": \"#4e3c69\",\n\t\t\"ports.iconRunningProcessForeground\": \"#749351\",\n\t\t\"activityBar.background\": \"#EDEDF5\",\n\t\t\"activityBar.foreground\": \"#705697\",\n\t\t\"activityBarBadge.background\": \"#705697\",\n\t\t\"titleBar.activeBackground\": \"#c4b7d7\",\n\t\t\"button.background\": \"#705697\",\n\t\t\"editorGroup.dropBackground\": \"#C9D0D988\",\n\t\t\"inputValidation.infoBorder\": \"#4ec1e5\",\n\t\t\"inputValidation.infoBackground\": \"#f2fcff\",\n\t\t\"inputValidation.warningBackground\": \"#fffee2\",\n\t\t\"inputValidation.warningBorder\": \"#ffe055\",\n\t\t\"inputValidation.errorBackground\": \"#ffeaea\",\n\t\t\"inputValidation.errorBorder\": \"#f1897f\",\n\t\t\"errorForeground\": \"#f1897f\",\n\t\t\"badge.background\": \"#705697AA\",\n\t\t\"progressBar.background\": \"#705697\",\n\t\t\"walkThrough.embeddedEditorBackground\": \"#00000014\",\n\t\t\"editorIndentGuide.background\": \"#aaaaaa60\",\n\t\t\"editorIndentGuide.activeBackground\": \"#777777b0\"\n\t},\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/theme-red/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-red/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-red/package.json",
    "content": "{\n  \"name\": \"theme-red\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Red\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/Red-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-red/package.nls.json",
    "content": "{\n\t\"displayName\": \"Red Theme\",\n\t\"description\": \"Red theme for Visual Studio Code\",\n\t\"themeLabel\": \"Red\"\n}\n"
  },
  {
    "path": "extensions/theme-red/themes/Red-color-theme.json",
    "content": "{\n\t\"name\": \"Red\",\n\t\"colors\": {\n\t\t// window\n\t\t\"activityBar.background\": \"#580000\",\n\t\t\"tab.inactiveBackground\": \"#300a0a\",\n\t\t\"tab.activeBackground\": \"#490000\",\n\t\t\"tab.lastPinnedBorder\": \"#ff000044\",\n\t\t\"sideBar.background\": \"#330000\",\n\t\t\"statusBar.background\": \"#700000\",\n\t\t\"statusBar.noFolderBackground\": \"#700000\",\n\t\t\"statusBarItem.remoteBackground\": \"#c33\",\n\t\t\"ports.iconRunningProcessForeground\": \"#DB7E58\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#330000\",\n\t\t\"titleBar.activeBackground\": \"#770000\",\n\t\t\"titleBar.inactiveBackground\": \"#772222\",\n\t\t\"selection.background\": \"#ff777788\",\n\t\t// editor\n\t\t\"editor.background\": \"#390000\",\n\t\t\"editorGroup.border\": \"#ff666633\",\n\t\t\"editorCursor.foreground\": \"#970000\",\n\t\t\"editor.foreground\": \"#F8F8F8\",\n\t\t\"editorWhitespace.foreground\": \"#c10000\",\n\t\t\"editor.selectionBackground\": \"#750000\",\n\t\t\"minimap.selectionHighlight\": \"#750000\",\n\t\t\"editorLineNumber.foreground\": \"#ff777788\",\n\t\t\"editorLineNumber.activeForeground\": \"#ffbbbb88\",\n\t\t\"editorWidget.background\": \"#300000\",\n\t\t\"editorHoverWidget.background\": \"#300000\",\n\t\t\"editorSuggestWidget.background\": \"#300000\",\n\t\t\"editorSuggestWidget.border\": \"#220000\",\n\t\t\"editor.lineHighlightBackground\": \"#ff000033\",\n\t\t\"editor.hoverHighlightBackground\": \"#ff000044\",\n\t\t\"editor.selectionHighlightBackground\": \"#f5500039\",\n\t\t\"editorLink.activeForeground\": \"#FFD0AA\",\n\t\t\"peekViewTitle.background\": \"#550000\",\n\t\t\"peekView.border\": \"#ff000044\",\n\t\t\"peekViewResult.background\": \"#400000\",\n\t\t\"peekViewEditor.background\": \"#300000\",\n\t\t// UI\n\t\t\"debugToolBar.background\": \"#660000\",\n\t\t\"focusBorder\": \"#ff6666aa\",\n\t\t\"button.background\": \"#833\",\n\t\t\"dropdown.background\": \"#580000\",\n\t\t\"input.background\": \"#580000\",\n\t\t\"inputOption.activeBorder\": \"#cc0000\",\n\t\t\"inputValidation.infoBackground\": \"#550000\",\n\t\t\"inputValidation.infoBorder\": \"#DB7E58\",\n\t\t\"list.hoverBackground\": \"#800000\",\n\t\t\"list.activeSelectionBackground\": \"#880000\",\n\t\t\"list.inactiveSelectionBackground\": \"#770000\",\n\t\t\"list.dropBackground\": \"#662222\",\n\t\t\"quickInputList.focusBackground\": \"#660000\",\n\t\t\"list.highlightForeground\": \"#ff4444\",\n\t\t\"pickerGroup.foreground\": \"#cc9999\",\n\t\t\"pickerGroup.border\": \"#ff000033\",\n\t\t\"badge.background\": \"#cc3333\",\n\t\t\"progressBar.background\": \"#cc3333\",\n\t\t\"errorForeground\": \"#ffeaea\",\n\t\t\"extensionButton.prominentBackground\": \"#cc3333\",\n\t\t\"extensionButton.prominentHoverBackground\": \"#cc333388\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F8F8F8\",\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#F8F8F8\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comment\",\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#e7c0c0ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Constant\",\n\t\t\t\"scope\": \"constant\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#994646ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keyword\",\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#f12727ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Entity\",\n\t\t\t\"scope\": \"entity\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#fec758ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage\",\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#ff6262ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String\",\n\t\t\t\"scope\": \"string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#cd8d8dff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Support\",\n\t\t\t\"scope\": \"support\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#9df39fff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable\",\n\t\t\t\"scope\": \"variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#fb9a4bff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ffffffff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Entity inherited-class\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"underline\",\n\t\t\t\t\"foreground\": \"#aa5507ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"constant.character\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ec0d1e\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"string constant\",\n\t\t\t\t\"constant.character.escape\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#ffe862ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String.regexp\",\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ffb454ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String variable\",\n\t\t\t\"scope\": \"string variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#edef7dff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Support.function\",\n\t\t\t\"scope\": \"support.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#ffb454ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Support.constant\",\n\t\t\t\"scope\": [ \"support.constant\", \"support.variable\"],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#eb939aff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Doctype/XML Processing\",\n\t\t\t\"scope\": [\n\t\t\t\t\"declaration.sgml.html declaration.doctype\",\n\t\t\t\t\"declaration.sgml.html declaration.doctype entity\",\n\t\t\t\t\"declaration.sgml.html declaration.doctype string\",\n\t\t\t\t\"declaration.xml-processing\",\n\t\t\t\t\"declaration.xml-processing entity\",\n\t\t\t\t\"declaration.xml-processing string\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#73817dff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Meta.tag.A\",\n\t\t\t\"scope\": [\n\t\t\t\t\"declaration.tag\",\n\t\t\t\t\"declaration.tag entity\",\n\t\t\t\t\"meta.tag\",\n\t\t\t\t\"meta.tag entity\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#ec0d1eff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css tag-name\",\n\t\t\t\"scope\": \"meta.selector.css entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#aa5507ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css#id\",\n\t\t\t\"scope\": \"meta.selector.css entity.other.attribute-name.id\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#fec758ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css.class\",\n\t\t\t\"scope\": \"meta.selector.css entity.other.attribute-name.class\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#41a83eff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css property-name:\",\n\t\t\t\"scope\": \"support.type.property-name.css\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#96dd3bff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css property-value;\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.property-group support.constant.property-value.css\",\n\t\t\t\t\"meta.property-value support.constant.property-value.css\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#ffe862ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css additional-constants\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.property-value support.constant.named-color.css\",\n\t\t\t\t\"meta.property-value constant\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#ffe862ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css @at-rule\",\n\t\t\t\"scope\": \"meta.preprocessor.at-rule keyword.control.at-rule\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#fd6209ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"css constructor.argument\",\n\t\t\t\"scope\": \"meta.constructor.argument.css\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#ec9799ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.header\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.diff\",\n\t\t\t\t\"meta.diff.header\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#f8f8f8ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.deleted\",\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ec9799ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.changed\",\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f8f8f8ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff.inserted\",\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#41a83eff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Quote\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f12727ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Lists\",\n\t\t\t\"scope\": \"markup.list\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ff6262ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Styling\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.bold\",\n\t\t\t\t\"markup.italic\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#fb9a4bff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Strong\",\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Emphasis\",\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Inline\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#cd8d8dff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Headings\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.heading\",\n\t\t\t\t\"markup.heading.setext\",\n\t\t\t\t\"punctuation.definition.heading\",\n\t\t\t\t\"entity.name.section\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#fec758ff\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String interpolation\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.definition.template-expression.begin\",\n\t\t\t\t\"punctuation.definition.template-expression.end\",\n\t\t\t\t\"punctuation.section.embedded\",\n\t\t\t\t\".format.placeholder\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#ec0d1e\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/theme-seti/.vscodeignore",
    "content": "build/**\ncgmanifest.json\nicons/preview.html\nCONTRIBUTING.md\n"
  },
  {
    "path": "extensions/theme-seti/CONTRIBUTING.md",
    "content": "# theme-seti\n\nThis is an icon theme that uses the icons from [`seti-ui`](https://github.com/jesseweed/seti-ui).\n\n## Previewing icons\n\nThere is a [`./icons/preview.html`](./icons/preview.html) file that can be opened to see all of the icons included in the theme.\nTo view this, it needs to be hosted by a web server. The easiest way is to open the file with the `Open with Live Server` command from the [Live Server extension](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer).\n\n\n## Updating icons\n\n- Make a PR against https://github.com/jesseweed/seti-ui with your icon changes.\n- Once accepted there, ping us or make a PR yourself that updates the theme and font here\n\nTo adopt the latest changes from https://github.com/jesseweed/seti-ui:\n\n- have the main branches of `https://github.com/jesseweed/seti-ui` and `https://github.com/microsoft/vscode` cloned in the same parent folder\n- in the `seti-ui` folder, run `npm install` and `npm run prepublishOnly`. This will generate updated icons and fonts.\n- in the `vscode/extensions/theme-seti` folder run  `npm run update`. This will launch the [icon theme update script](build/update-icon-theme.js) that updates the theme as well as the font based on content in `seti-ui`.\n- to test the icon theme, look at the icon preview as described above.\n- when done, create a PR with the changes in https://github.com/microsoft/vscode.\nAdd a screenshot of the preview page to accompany it.\n\n\n### Languages not shipped with `vscode`\n\nLanguages that are not shipped with `vscode` must be added to the `nonBuiltInLanguages` object inside of `update-icon-theme.js`.\n\nThese should match [the file mapping in `seti-ui`](https://github.com/jesseweed/seti-ui/blob/master/styles/components/icons/mapping.less).\n\nPlease try and keep this list in alphabetical order! Thank you.\n\n"
  },
  {
    "path": "extensions/theme-seti/README.md",
    "content": "# theme-seti\n\nThis is an icon theme that uses the icons from [`seti-ui`](https://github.com/jesseweed/seti-ui).\n\n## Updating icons\n\nThere is script that can be used to update icons, [./build/update-icon-theme.js](build/update-icon-theme.js).\n\nTo run this script, run `npm run update` from the `theme-seti` directory.\n\nThis can be run in one of two ways: looking at a local copy of `seti-ui` for icons, or getting them straight from GitHub.\n\nIf you want to run it from a local copy of `seti-ui`, first clone [`seti-ui`](https://github.com/jesseweed/seti-ui) to the folder next to your `vscode` repo (from the `theme-seti` directory, `../../`).\nThen, inside the `set-ui` directory, run `npm install` followed by `npm run prepublishOnly`. This will generate updated icons.\n\nIf you want to download the icons straight from GitHub, change the `FROM_DISK` variable to `false` inside of `update-icon-theme.js`.\n\n### Languages not shipped with `vscode`\n\nLanguages that are not shipped with `vscode` must be added to the `nonBuiltInLanguages` object inside of `update-icon-theme.js`.\n\nThese should match [the file mapping in `seti-ui`](https://github.com/jesseweed/seti-ui/blob/master/styles/components/icons/mapping.less).\n\nPlease try and keep this list in alphabetical order! Thank you.\n\n## Previewing icons\n\nThere is a [`./icons/preview.html`](./icons/preview.html) file that can be opened to see all of the icons included in the theme.\nNote that to view this, it needs to be hosted by a web server.\n\nWhen updating icons, it is always a good idea to make sure that they work properly by looking at this page.\nWhen submitting a PR that updates these icons, a screenshot of the preview page should accompany it.\n"
  },
  {
    "path": "extensions/theme-seti/ThirdPartyNotices.txt",
    "content": "\r\nTHIRD-PARTY SOFTWARE NOTICES AND INFORMATION\r\nFor Microsoft vscode-theme-seti\r\n\r\nThis file is based on or incorporates material from the projects listed below (\"Third Party OSS\"). The original copyright\r\nnotice and the license under which Microsoft received such Third Party OSS, are set forth below. Such licenses and notice\r\nare provided for informational purposes only. Microsoft licenses the Third Party OSS to you under the licensing terms for\r\nthe Microsoft product or service. Microsoft reserves all other rights not expressly granted under this agreement, whether\r\nby implication, estoppel or otherwise.†\r\n\r\n1.       Seti UI - A subtle dark colored UI theme for Atom. (https://github.com/jesseweed/seti-ui)\r\n\r\nCopyright (c) 2014 Jesse Weed\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "extensions/theme-seti/build/update-icon-theme.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst path = require('path');\nconst fs = require('fs');\nconst https = require('https');\nconst url = require('url');\nconst minimatch = require('minimatch');\n\n// list of languagesId not shipped with VSCode. The information is used to associate an icon with a language association\n// Please try and keep this list in alphabetical order! Thank you.\nconst nonBuiltInLanguages = { // { fileNames, extensions  }\n\t\"argdown\": { extensions: ['ad', 'adown', 'argdown', 'argdn'] },\n\t\"bicep\": { extensions: ['bicep'] },\n\t\"elixir\": { extensions: ['ex'] },\n\t\"elm\": { extensions: ['elm'] },\n\t\"erb\": { extensions: ['erb', 'rhtml', 'html.erb'] },\n\t\"github-issues\": { extensions: ['github-issues'] },\n\t\"gradle\": { extensions: ['gradle'] },\n\t\"godot\": { extensions: ['gd', 'godot', 'tres', 'tscn'] },\n\t\"haml\": { extensions: ['haml'] },\n\t\"haskell\": { extensions: ['hs'] },\n\t\"haxe\": { extensions: ['hx'] },\n\t\"jinja\": { extensions: ['jinja'] },\n\t\"kotlin\": { extensions: ['kt'] },\n\t\"mustache\": { extensions: ['mustache', 'mst', 'mu', 'stache'] },\n\t\"nunjucks\": { extensions: ['nunjucks', 'nunjs', 'nunj', 'nj', 'njk', 'tmpl', 'tpl'] },\n\t\"ocaml\": { extensions: ['ml', 'mli', 'mll', 'mly', 'eliom', 'eliomi'] },\n\t\"puppet\": { extensions: ['puppet'] },\n\t\"r\": { extensions: ['r', 'rhistory', 'rprofile', 'rt'] },\n\t\"rescript\": { extensions: ['res', 'resi'] },\n\t\"sass\": { extensions: ['sass'] },\n\t\"stylus\": { extensions: ['styl'] },\n\t\"terraform\": { extensions: ['tf', 'tfvars', 'hcl'] },\n\t\"todo\": { fileNames: ['todo'] },\n\t\"vala\": { extensions: ['vala'] },\n\t\"vue\": { extensions: ['vue'] }\n};\n\n// list of languagesId that inherit the icon from another language\nconst inheritIconFromLanguage = {\n\t\"jsonc\": 'json',\n\t\"jsonl\": 'json',\n\t\"postcss\": 'css',\n\t\"django-html\": 'html',\n\t\"blade\": 'php'\n};\n\nconst ignoreExtAssociation = {\n\t\"properties\": true\n};\n\nconst FROM_DISK = true; // set to true to take content from a repo checked out next to the vscode repo\n\nlet font, fontMappingsFile, fileAssociationFile, colorsFile;\nif (!FROM_DISK) {\n\tfont = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/_fonts/seti/seti.woff';\n\tfontMappingsFile = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/_fonts/seti.less';\n\tfileAssociationFile = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/components/icons/mapping.less';\n\tcolorsFile = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/ui-variables.less';\n} else {\n\tfont = '../../../seti-ui/styles/_fonts/seti/seti.woff';\n\tfontMappingsFile = '../../../seti-ui/styles/_fonts/seti.less';\n\tfileAssociationFile = '../../../seti-ui/styles/components/icons/mapping.less';\n\tcolorsFile = '../../../seti-ui/styles/ui-variables.less';\n}\n\nfunction getCommitSha(repoId) {\n\tconst commitInfo = 'https://api.github.com/repos/' + repoId + '/commits/master';\n\treturn download(commitInfo).then(function (content) {\n\t\ttry {\n\t\t\tconst lastCommit = JSON.parse(content);\n\t\t\treturn Promise.resolve({\n\t\t\t\tcommitSha: lastCommit.sha,\n\t\t\t\tcommitDate: lastCommit.commit.author.date\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconsole.error('Failed parsing ' + content);\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t}, function () {\n\t\tconsole.error('Failed loading ' + commitInfo);\n\t\treturn Promise.resolve(null);\n\t});\n}\n\nfunction download(source) {\n\tif (source.startsWith('.')) {\n\t\treturn readFile(source);\n\t}\n\treturn new Promise((c, e) => {\n\t\tconst _url = url.parse(source);\n\t\tconst options = { host: _url.host, port: _url.port, path: _url.path, headers: { 'User-Agent': 'NodeJS' } };\n\t\tlet content = '';\n\t\thttps.get(options, function (response) {\n\t\t\tresponse.on('data', function (data) {\n\t\t\t\tcontent += data.toString();\n\t\t\t}).on('end', function () {\n\t\t\t\tc(content);\n\t\t\t});\n\t\t}).on('error', function (err) {\n\t\t\te(err.message);\n\t\t});\n\t});\n}\n\nfunction readFile(fileName) {\n\treturn new Promise((c, e) => {\n\t\tfs.readFile(fileName, function (err, data) {\n\t\t\tif (err) {\n\t\t\t\te(err);\n\t\t\t} else {\n\t\t\t\tc(data.toString());\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction downloadBinary(source, dest) {\n\tif (source.startsWith('.')) {\n\t\treturn copyFile(source, dest);\n\t}\n\n\treturn new Promise((c, e) => {\n\t\thttps.get(source, function (response) {\n\t\t\tswitch (response.statusCode) {\n\t\t\t\tcase 200: {\n\t\t\t\t\tconst file = fs.createWriteStream(dest);\n\t\t\t\t\tresponse.on('data', function (chunk) {\n\t\t\t\t\t\tfile.write(chunk);\n\t\t\t\t\t}).on('end', function () {\n\t\t\t\t\t\tfile.end();\n\t\t\t\t\t\tc(null);\n\t\t\t\t\t}).on('error', function (err) {\n\t\t\t\t\t\tfs.unlink(dest);\n\t\t\t\t\t\te(err.message);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 301:\n\t\t\t\tcase 302:\n\t\t\t\tcase 303:\n\t\t\t\tcase 307:\n\t\t\t\t\tconsole.log('redirect to ' + response.headers.location);\n\t\t\t\t\tdownloadBinary(response.headers.location, dest).then(c, e);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\te(new Error('Server responded with status code ' + response.statusCode));\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction copyFile(fileName, dest) {\n\treturn new Promise((c, e) => {\n\t\tlet cbCalled = false;\n\t\tfunction handleError(err) {\n\t\t\tif (!cbCalled) {\n\t\t\t\te(err);\n\t\t\t\tcbCalled = true;\n\t\t\t}\n\t\t}\n\t\tconst rd = fs.createReadStream(fileName);\n\t\trd.on(\"error\", handleError);\n\t\tconst wr = fs.createWriteStream(dest);\n\t\twr.on(\"error\", handleError);\n\t\twr.on(\"close\", function () {\n\t\t\tif (!cbCalled) {\n\t\t\t\tc();\n\t\t\t\tcbCalled = true;\n\t\t\t}\n\t\t});\n\t\trd.pipe(wr);\n\t});\n}\n\nfunction darkenColor(color) {\n\tlet res = '#';\n\tfor (let i = 1; i < 7; i += 2) {\n\t\tconst newVal = Math.round(parseInt('0x' + color.substr(i, 2), 16) * 0.9);\n\t\tconst hex = newVal.toString(16);\n\t\tif (hex.length === 1) {\n\t\t\tres += '0';\n\t\t}\n\t\tres += hex;\n\t}\n\treturn res;\n}\n\nfunction mergeMapping(to, from, property) {\n\tif (from[property]) {\n\t\tif (to[property]) {\n\t\t\tto[property].push(...from[property]);\n\t\t} else {\n\t\t\tto[property] = from[property];\n\t\t}\n\t}\n}\n\nfunction getLanguageMappings() {\n\tconst langMappings = {};\n\tconst allExtensions = fs.readdirSync('..');\n\tfor (let i = 0; i < allExtensions.length; i++) {\n\t\tconst dirPath = path.join('..', allExtensions[i], 'package.json');\n\t\tif (fs.existsSync(dirPath)) {\n\t\t\tconst content = fs.readFileSync(dirPath).toString();\n\t\t\tconst jsonContent = JSON.parse(content);\n\t\t\tconst languages = jsonContent.contributes && jsonContent.contributes.languages;\n\t\t\tif (Array.isArray(languages)) {\n\t\t\t\tfor (let k = 0; k < languages.length; k++) {\n\t\t\t\t\tconst languageId = languages[k].id;\n\t\t\t\t\tif (languageId) {\n\t\t\t\t\t\tconst extensions = languages[k].extensions;\n\t\t\t\t\t\tconst mapping = {};\n\t\t\t\t\t\tif (Array.isArray(extensions)) {\n\t\t\t\t\t\t\tmapping.extensions = extensions.map(function (e) { return e.substr(1).toLowerCase(); });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst filenames = languages[k].filenames;\n\t\t\t\t\t\tif (Array.isArray(filenames)) {\n\t\t\t\t\t\t\tmapping.fileNames = filenames.map(function (f) { return f.toLowerCase(); });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst filenamePatterns = languages[k].filenamePatterns;\n\t\t\t\t\t\tif (Array.isArray(filenamePatterns)) {\n\t\t\t\t\t\t\tmapping.filenamePatterns = filenamePatterns.map(function (f) { return f.toLowerCase(); });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst existing = langMappings[languageId];\n\n\t\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t\t// multiple contributions to the same language\n\t\t\t\t\t\t\t// give preference to the contribution wth the configuration\n\t\t\t\t\t\t\tif (languages[k].configuration) {\n\t\t\t\t\t\t\t\tmergeMapping(mapping, existing, 'extensions');\n\t\t\t\t\t\t\t\tmergeMapping(mapping, existing, 'fileNames');\n\t\t\t\t\t\t\t\tmergeMapping(mapping, existing, 'filenamePatterns');\n\t\t\t\t\t\t\t\tlangMappings[languageId] = mapping;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmergeMapping(existing, mapping, 'extensions');\n\t\t\t\t\t\t\t\tmergeMapping(existing, mapping, 'fileNames');\n\t\t\t\t\t\t\t\tmergeMapping(existing, mapping, 'filenamePatterns');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlangMappings[languageId] = mapping;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfor (const languageId in nonBuiltInLanguages) {\n\t\tlangMappings[languageId] = nonBuiltInLanguages[languageId];\n\t}\n\treturn langMappings;\n}\n\nexports.copyFont = function () {\n\treturn downloadBinary(font, './icons/seti.woff');\n};\n\nexports.update = function () {\n\n\tconsole.log('Reading from ' + fontMappingsFile);\n\tconst def2Content = {};\n\tconst ext2Def = {};\n\tconst fileName2Def = {};\n\tconst def2ColorId = {};\n\tconst colorId2Value = {};\n\tconst lang2Def = {};\n\n\tfunction writeFileIconContent(info) {\n\t\tconst iconDefinitions = {};\n\t\tconst allDefs = Object.keys(def2Content).sort();\n\n\t\tfor (let i = 0; i < allDefs.length; i++) {\n\t\t\tconst def = allDefs[i];\n\t\t\tconst entry = { fontCharacter: def2Content[def] };\n\t\t\tconst colorId = def2ColorId[def];\n\t\t\tif (colorId) {\n\t\t\t\tconst colorValue = colorId2Value[colorId];\n\t\t\t\tif (colorValue) {\n\t\t\t\t\tentry.fontColor = colorValue;\n\n\t\t\t\t\tconst entryInverse = { fontCharacter: entry.fontCharacter, fontColor: darkenColor(colorValue) };\n\t\t\t\t\ticonDefinitions[def + '_light'] = entryInverse;\n\t\t\t\t}\n\t\t\t}\n\t\t\ticonDefinitions[def] = entry;\n\t\t}\n\n\t\tfunction getInvertSet(input) {\n\t\t\tconst result = {};\n\t\t\tfor (const assoc in input) {\n\t\t\t\tconst invertDef = input[assoc] + '_light';\n\t\t\t\tif (iconDefinitions[invertDef]) {\n\t\t\t\t\tresult[assoc] = invertDef;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst res = {\n\t\t\tinformation_for_contributors: [\n\t\t\t\t'This file has been generated from data in https://github.com/jesseweed/seti-ui',\n\t\t\t\t'- icon definitions: https://github.com/jesseweed/seti-ui/blob/master/styles/_fonts/seti.less',\n\t\t\t\t'- icon colors: https://github.com/jesseweed/seti-ui/blob/master/styles/ui-variables.less',\n\t\t\t\t'- file associations: https://github.com/jesseweed/seti-ui/blob/master/styles/components/icons/mapping.less',\n\t\t\t\t'If you want to provide a fix or improvement, please create a pull request against the jesseweed/seti-ui repository.',\n\t\t\t\t'Once accepted there, we are happy to receive an update request.',\n\t\t\t],\n\t\t\tfonts: [{\n\t\t\t\tid: \"seti\",\n\t\t\t\tsrc: [{ \"path\": \"./seti.woff\", \"format\": \"woff\" }],\n\t\t\t\tweight: \"normal\",\n\t\t\t\tstyle: \"normal\",\n\t\t\t\tsize: \"150%\"\n\t\t\t}],\n\t\t\ticonDefinitions: iconDefinitions,\n\t\t\t//\tfolder: \"_folder\",\n\t\t\tfile: \"_default\",\n\t\t\tfileExtensions: ext2Def,\n\t\t\tfileNames: fileName2Def,\n\t\t\tlanguageIds: lang2Def,\n\t\t\tlight: {\n\t\t\t\tfile: \"_default_light\",\n\t\t\t\tfileExtensions: getInvertSet(ext2Def),\n\t\t\t\tlanguageIds: getInvertSet(lang2Def),\n\t\t\t\tfileNames: getInvertSet(fileName2Def)\n\t\t\t},\n\t\t\tversion: 'https://github.com/jesseweed/seti-ui/commit/' + info.commitSha,\n\t\t};\n\n\t\tconst path = './icons/vs-seti-icon-theme.json';\n\t\tfs.writeFileSync(path, JSON.stringify(res, null, '\\t'));\n\t\tconsole.log('written ' + path);\n\t}\n\n\n\tlet match;\n\n\treturn download(fontMappingsFile).then(function (content) {\n\t\tconst regex = /@([\\w-]+):\\s*'(\\\\E[0-9A-F]+)';/g;\n\t\tconst contents = {};\n\t\twhile ((match = regex.exec(content)) !== null) {\n\t\t\tcontents[match[1]] = match[2];\n\t\t}\n\n\t\treturn download(fileAssociationFile).then(function (content) {\n\t\t\tconst regex2 = /\\.icon-(?:set|partial)\\(['\"]([\\w-\\.+]+)['\"],\\s*['\"]([\\w-]+)['\"],\\s*(@[\\w-]+)\\)/g;\n\t\t\twhile ((match = regex2.exec(content)) !== null) {\n\t\t\t\tconst pattern = match[1];\n\t\t\t\tlet def = '_' + match[2];\n\t\t\t\tconst colorId = match[3];\n\t\t\t\tlet storedColorId = def2ColorId[def];\n\t\t\t\tlet i = 1;\n\t\t\t\twhile (storedColorId && colorId !== storedColorId) { // different colors for the same def?\n\t\t\t\t\tdef = `_${match[2]}_${i}`;\n\t\t\t\t\tstoredColorId = def2ColorId[def];\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\tif (!def2ColorId[def]) {\n\t\t\t\t\tdef2ColorId[def] = colorId;\n\t\t\t\t\tdef2Content[def] = contents[match[2]];\n\t\t\t\t}\n\n\t\t\t\tif (def === '_default') {\n\t\t\t\t\tcontinue; // no need to assign default color.\n\t\t\t\t}\n\t\t\t\tif (pattern[0] === '.') {\n\t\t\t\t\text2Def[pattern.substr(1).toLowerCase()] = def;\n\t\t\t\t} else {\n\t\t\t\t\tfileName2Def[pattern.toLowerCase()] = def;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// replace extensions for languageId\n\t\t\tconst langMappings = getLanguageMappings();\n\t\t\tfor (let lang in langMappings) {\n\t\t\t\tconst mappings = langMappings[lang];\n\t\t\t\tconst exts = mappings.extensions || [];\n\t\t\t\tconst fileNames = mappings.fileNames || [];\n\t\t\t\tconst filenamePatterns = mappings.filenamePatterns || [];\n\t\t\t\tlet preferredDef = null;\n\t\t\t\t// use the first file extension association for the preferred definition\n\t\t\t\tfor (let i1 = 0; i1 < exts.length && !preferredDef; i1++) {\n\t\t\t\t\tpreferredDef = ext2Def[exts[i1]];\n\t\t\t\t}\n\t\t\t\t// use the first file name association for the preferred definition, if not availbale\n\t\t\t\tfor (let i1 = 0; i1 < fileNames.length && !preferredDef; i1++) {\n\t\t\t\t\tpreferredDef = fileName2Def[fileNames[i1]];\n\t\t\t\t}\n\t\t\t\tfor (let i1 = 0; i1 < filenamePatterns.length && !preferredDef; i1++) {\n\t\t\t\t\tlet pattern = filenamePatterns[i1];\n\t\t\t\t\tfor (const name in fileName2Def) {\n\t\t\t\t\t\tif (minimatch(name, pattern)) {\n\t\t\t\t\t\t\tpreferredDef = fileName2Def[name];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (preferredDef) {\n\t\t\t\t\tlang2Def[lang] = preferredDef;\n\t\t\t\t\tif (!nonBuiltInLanguages[lang] && !inheritIconFromLanguage[lang]) {\n\t\t\t\t\t\tfor (let i2 = 0; i2 < exts.length; i2++) {\n\t\t\t\t\t\t\t// remove the extension association, unless it is different from the preferred\n\t\t\t\t\t\t\tif (ext2Def[exts[i2]] === preferredDef || ignoreExtAssociation[exts[i2]]) {\n\t\t\t\t\t\t\t\tdelete ext2Def[exts[i2]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i2 = 0; i2 < fileNames.length; i2++) {\n\t\t\t\t\t\t\t// remove the fileName association, unless it is different from the preferred\n\t\t\t\t\t\t\tif (fileName2Def[fileNames[i2]] === preferredDef) {\n\t\t\t\t\t\t\t\tdelete fileName2Def[fileNames[i2]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i2 = 0; i2 < filenamePatterns.length; i2++) {\n\t\t\t\t\t\t\tlet pattern = filenamePatterns[i2];\n\t\t\t\t\t\t\t// remove the filenamePatterns association, unless it is different from the preferred\n\t\t\t\t\t\t\tfor (const name in fileName2Def) {\n\t\t\t\t\t\t\t\tif (minimatch(name, pattern) && fileName2Def[name] === preferredDef) {\n\t\t\t\t\t\t\t\t\tdelete fileName2Def[name];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const lang in inheritIconFromLanguage) {\n\t\t\t\tconst superLang = inheritIconFromLanguage[lang];\n\t\t\t\tconst def = lang2Def[superLang];\n\t\t\t\tif (def) {\n\t\t\t\t\tlang2Def[lang] = def;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('skipping icon def for ' + lang + ': no icon for ' + superLang + ' defined');\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\treturn download(colorsFile).then(function (content) {\n\t\t\t\tconst regex3 = /(@[\\w-]+):\\s*(#[0-9a-z]+)/g;\n\t\t\t\twhile ((match = regex3.exec(content)) !== null) {\n\t\t\t\t\tcolorId2Value[match[1]] = match[2];\n\t\t\t\t}\n\t\t\t\treturn getCommitSha('jesseweed/seti-ui').then(function (info) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\twriteFileIconContent(info);\n\n\t\t\t\t\t\tconst cgmanifestPath = './cgmanifest.json';\n\t\t\t\t\t\tconst cgmanifest = fs.readFileSync(cgmanifestPath).toString();\n\t\t\t\t\t\tconst cgmanifestContent = JSON.parse(cgmanifest);\n\t\t\t\t\t\tcgmanifestContent['registrations'][0]['component']['git']['commitHash'] = info.commitSha;\n\t\t\t\t\t\tfs.writeFileSync(cgmanifestPath, JSON.stringify(cgmanifestContent, null, '\\t'));\n\t\t\t\t\t\tconsole.log('updated ' + cgmanifestPath);\n\n\t\t\t\t\t\tconsole.log('Updated to jesseweed/seti-ui@' + info.commitSha.substr(0, 7) + ' (' + info.commitDate.substr(0, 10) + ')');\n\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}, console.error);\n};\n\nif (path.basename(process.argv[1]) === 'update-icon-theme.js') {\n\texports.copyFont().then(() => exports.update());\n}\n\n\n\n"
  },
  {
    "path": "extensions/theme-seti/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"seti-ui\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/jesseweed/seti-ui\",\n\t\t\t\t\t\"commitHash\": \"1cac4f30f93cc898103c62dde41823a09b0d7b74\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}"
  },
  {
    "path": "extensions/theme-seti/icons/preview.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<!--- Preview the icons in the Seti icon font. Use a simple-server or the LiveServer extension to view -->\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>seti font preview</title>\n\t<style>\n\t\tbody {\n\t\t\tfont-family: sans-serif;\n\t\t\tmargin: 0;\n\t\t\tpadding: 10px 20px;\n\t\t}\n\n\t\t.preview {\n\t\t\tline-height: 2em;\n\t\t}\n\n\t\t.preview_icon {\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 32px;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.icon {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 16px;\n\t\t\tline-height: 1;\n\t\t}\n\n\t\t.icon:before {\n\t\t\tfont-family: seti !important;\n\t\t\tfont-style: normal;\n\t\t\tfont-weight: normal !important;\n\t\t\tvertical-align: top;\n\t\t}\n\n\t\t.grid {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: 0.7fr 0.7fr 1fr 0.7fr 0.7fr 1fr;\n\t\t}\n\n\t\t.vs {\n\t\t\tbackground-color: #FFFFFF;\n\t\t\tcolor: #000000;\n\t\t}\n\n\t\t.vs-dark {\n\t\t\tbackground-color: #1E1E1E;\n\t\t\tcolor: #D4D4D4;\n\t\t}\n\t</style>\n\t<script>\n\t\tfunction fetchThemeFile() {\n\t\t\treturn fetch('./vs-seti-icon-theme.json').then(res => res.json());\n\t\t}\n\t\tfunction generateColumn(label, style, associations, htmContent) {\n\t\t\thtmContent.push('<div class=' + style + '>' + label);\n\t\t\tconst keys = Object.keys(associations).sort();\n\t\t\tfor (let association of keys) {\n\t\t\t\tconst id = associations[association];\n\t\t\t\thtmContent.push('<div class=\"preview\"><span class=\"preview_icon\"><span class=\"icon icon' + id + '\"></span></span><span>' + association + '</span></div>');\n\t\t\t}\n\t\t\thtmContent.push('</div>');\n\t\t}\n\t\tfunction generateIconsForScheme(label, set, style, htmContent) {\n\t\t\tgenerateColumn('language IDs', style, set.languageIds, htmContent);\n\t\t\tgenerateColumn('file extensions', style, set.fileExtensions, htmContent);\n\t\t\tgenerateColumn('file names', style, set.fileNames, htmContent);\n\t\t}\n\n\t\tfunction generateContent(themeFile) {\n\t\t\tlet htmContent = [];\n\t\t\tlet cssContent = [];\n\t\t\tconst version = themeFile.version.substr(themeFile.version.lastIndexOf('/') + 1);\n\t\t\tcssContent.push('@font-face {font-family: \"seti\"; src: url(\"./seti.woff?' + version + '\") format(\"woff\"); }');\n\n\t\t\tlet iconDefinitions = themeFile.iconDefinitions;\n\t\t\tfor (let id in iconDefinitions) {\n\t\t\t\tlet def = iconDefinitions[id];\n\t\t\t\tcssContent.push('.icon' + id + ':before { content: \"' + def.fontCharacter + '\"; color: ' + def.fontColor + '}');\n\t\t\t}\n\t\t\tlet style = document.createElement('style');\n\t\t\tstyle.type = 'text/css';\n\t\t\tstyle.media = 'screen';\n\t\t\tstyle.innerHTML = cssContent.join('\\n');\n\t\t\tdocument.head.appendChild(style);\n\n\t\t\thtmContent.push('<div class=\"grid\">');\n\t\t\tgenerateIconsForScheme('dark', themeFile, 'vs-dark', htmContent);\n\t\t\tgenerateIconsForScheme('light', themeFile.light, 'vs', htmContent);\n\t\t\thtmContent.push('</div>');\n\n\t\t\tdocument.body.innerHTML += htmContent.join('\\n');\n\t\t}\n\t\twindow.addEventListener(\"load\", function () {\n\t\t\tfetchThemeFile().then(generateContent);\n\t\t});\n\t</script>\n</head>\n\n<body>\n</body>\n\n</html>\n"
  },
  {
    "path": "extensions/theme-seti/icons/vs-seti-icon-theme.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been generated from data in https://github.com/jesseweed/seti-ui\",\n\t\t\"- icon definitions: https://github.com/jesseweed/seti-ui/blob/master/styles/_fonts/seti.less\",\n\t\t\"- icon colors: https://github.com/jesseweed/seti-ui/blob/master/styles/ui-variables.less\",\n\t\t\"- file associations: https://github.com/jesseweed/seti-ui/blob/master/styles/components/icons/mapping.less\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the jesseweed/seti-ui repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"fonts\": [\n\t\t{\n\t\t\t\"id\": \"seti\",\n\t\t\t\"src\": [\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"./seti.woff\",\n\t\t\t\t\t\"format\": \"woff\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"weight\": \"normal\",\n\t\t\t\"style\": \"normal\",\n\t\t\t\"size\": \"150%\"\n\t\t}\n\t],\n\t\"iconDefinitions\": {\n\t\t\"_R_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E001\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_R\": {\n\t\t\t\"fontCharacter\": \"\\\\E001\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_argdown_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E003\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_argdown\": {\n\t\t\t\"fontCharacter\": \"\\\\E003\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_asm_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E004\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_asm\": {\n\t\t\t\"fontCharacter\": \"\\\\E004\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_audio_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E005\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_audio\": {\n\t\t\t\"fontCharacter\": \"\\\\E005\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_babel_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E006\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_babel\": {\n\t\t\t\"fontCharacter\": \"\\\\E006\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_bazel_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E007\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_bazel\": {\n\t\t\t\"fontCharacter\": \"\\\\E007\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_bazel_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E007\",\n\t\t\t\"fontColor\": \"#455155\"\n\t\t},\n\t\t\"_bazel_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E007\",\n\t\t\t\"fontColor\": \"#4d5a5e\"\n\t\t},\n\t\t\"_bicep_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E008\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_bicep\": {\n\t\t\t\"fontCharacter\": \"\\\\E008\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_bower_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E009\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_bower\": {\n\t\t\t\"fontCharacter\": \"\\\\E009\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_bsl_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E00A\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_bsl\": {\n\t\t\t\"fontCharacter\": \"\\\\E00A\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_c_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E00C\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_c\": {\n\t\t\t\"fontCharacter\": \"\\\\E00C\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_c-sharp_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E00B\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_c-sharp\": {\n\t\t\t\"fontCharacter\": \"\\\\E00B\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_c_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E00C\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_c_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E00C\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_c_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E00C\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_c_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E00C\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_cake_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E00D\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_cake\": {\n\t\t\t\"fontCharacter\": \"\\\\E00D\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_cake_php_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E00E\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_cake_php\": {\n\t\t\t\"fontCharacter\": \"\\\\E00E\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_clock_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E012\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_clock\": {\n\t\t\t\"fontCharacter\": \"\\\\E012\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_clock_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E012\",\n\t\t\t\"fontColor\": \"#627379\"\n\t\t},\n\t\t\"_clock_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E012\",\n\t\t\t\"fontColor\": \"#6d8086\"\n\t\t},\n\t\t\"_clojure_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E013\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_clojure\": {\n\t\t\t\"fontCharacter\": \"\\\\E013\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_clojure_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E013\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_clojure_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E013\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_code-climate_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E014\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_code-climate\": {\n\t\t\t\"fontCharacter\": \"\\\\E014\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_code-search_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E015\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_code-search\": {\n\t\t\t\"fontCharacter\": \"\\\\E015\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_coffee_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E016\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_coffee\": {\n\t\t\t\"fontCharacter\": \"\\\\E016\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_coldfusion_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E018\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_coldfusion\": {\n\t\t\t\"fontCharacter\": \"\\\\E018\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_config_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E019\",\n\t\t\t\"fontColor\": \"#627379\"\n\t\t},\n\t\t\"_config\": {\n\t\t\t\"fontCharacter\": \"\\\\E019\",\n\t\t\t\"fontColor\": \"#6d8086\"\n\t\t},\n\t\t\"_cpp_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01A\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_cpp\": {\n\t\t\t\"fontCharacter\": \"\\\\E01A\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_cpp_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01A\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_cpp_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E01A\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_cpp_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01A\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_cpp_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E01A\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_crystal_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01B\",\n\t\t\t\"fontColor\": \"#bfc2c1\"\n\t\t},\n\t\t\"_crystal\": {\n\t\t\t\"fontCharacter\": \"\\\\E01B\",\n\t\t\t\"fontColor\": \"#d4d7d6\"\n\t\t},\n\t\t\"_crystal_embedded_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01C\",\n\t\t\t\"fontColor\": \"#bfc2c1\"\n\t\t},\n\t\t\"_crystal_embedded\": {\n\t\t\t\"fontCharacter\": \"\\\\E01C\",\n\t\t\t\"fontColor\": \"#d4d7d6\"\n\t\t},\n\t\t\"_css_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01D\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_css\": {\n\t\t\t\"fontCharacter\": \"\\\\E01D\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_csv_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01E\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_csv\": {\n\t\t\t\"fontCharacter\": \"\\\\E01E\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_cu_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01F\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_cu\": {\n\t\t\t\"fontCharacter\": \"\\\\E01F\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_cu_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E01F\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_cu_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E01F\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_d_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E020\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_d\": {\n\t\t\t\"fontCharacter\": \"\\\\E020\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_dart_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E021\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_dart\": {\n\t\t\t\"fontCharacter\": \"\\\\E021\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_db_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E022\",\n\t\t\t\"fontColor\": \"#dd4b78\"\n\t\t},\n\t\t\"_db\": {\n\t\t\t\"fontCharacter\": \"\\\\E022\",\n\t\t\t\"fontColor\": \"#f55385\"\n\t\t},\n\t\t\"_db_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E022\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_db_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E022\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_default_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E023\",\n\t\t\t\"fontColor\": \"#bfc2c1\"\n\t\t},\n\t\t\"_default\": {\n\t\t\t\"fontCharacter\": \"\\\\E023\",\n\t\t\t\"fontColor\": \"#d4d7d6\"\n\t\t},\n\t\t\"_docker_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_docker\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_docker_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#455155\"\n\t\t},\n\t\t\"_docker_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#4d5a5e\"\n\t\t},\n\t\t\"_docker_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_docker_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_docker_3_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#dd4b78\"\n\t\t},\n\t\t\"_docker_3\": {\n\t\t\t\"fontCharacter\": \"\\\\E025\",\n\t\t\t\"fontColor\": \"#f55385\"\n\t\t},\n\t\t\"_ejs_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E027\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_ejs\": {\n\t\t\t\"fontCharacter\": \"\\\\E027\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_elixir_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E028\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_elixir\": {\n\t\t\t\"fontCharacter\": \"\\\\E028\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_elixir_script_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E029\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_elixir_script\": {\n\t\t\t\"fontCharacter\": \"\\\\E029\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_elm_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E02A\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_elm\": {\n\t\t\t\"fontCharacter\": \"\\\\E02A\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_eslint_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E02C\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_eslint\": {\n\t\t\t\"fontCharacter\": \"\\\\E02C\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_eslint_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E02C\",\n\t\t\t\"fontColor\": \"#455155\"\n\t\t},\n\t\t\"_eslint_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E02C\",\n\t\t\t\"fontColor\": \"#4d5a5e\"\n\t\t},\n\t\t\"_ethereum_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E02D\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_ethereum\": {\n\t\t\t\"fontCharacter\": \"\\\\E02D\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_f-sharp_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E02E\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_f-sharp\": {\n\t\t\t\"fontCharacter\": \"\\\\E02E\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_favicon_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E02F\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_favicon\": {\n\t\t\t\"fontCharacter\": \"\\\\E02F\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_firebase_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E030\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_firebase\": {\n\t\t\t\"fontCharacter\": \"\\\\E030\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_firefox_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E031\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_firefox\": {\n\t\t\t\"fontCharacter\": \"\\\\E031\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_font_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E033\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_font\": {\n\t\t\t\"fontCharacter\": \"\\\\E033\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_git_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E034\",\n\t\t\t\"fontColor\": \"#3b4b52\"\n\t\t},\n\t\t\"_git\": {\n\t\t\t\"fontCharacter\": \"\\\\E034\",\n\t\t\t\"fontColor\": \"#41535b\"\n\t\t},\n\t\t\"_github_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E037\",\n\t\t\t\"fontColor\": \"#bfc2c1\"\n\t\t},\n\t\t\"_github\": {\n\t\t\t\"fontCharacter\": \"\\\\E037\",\n\t\t\t\"fontColor\": \"#d4d7d6\"\n\t\t},\n\t\t\"_gitlab_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E038\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_gitlab\": {\n\t\t\t\"fontCharacter\": \"\\\\E038\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_go_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E039\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_go\": {\n\t\t\t\"fontCharacter\": \"\\\\E039\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_go2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03A\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_go2\": {\n\t\t\t\"fontCharacter\": \"\\\\E03A\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_godot_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_godot\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_godot_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_godot_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_godot_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_godot_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_godot_3_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_godot_3\": {\n\t\t\t\"fontCharacter\": \"\\\\E03B\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_gradle_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03C\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_gradle\": {\n\t\t\t\"fontCharacter\": \"\\\\E03C\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_grails_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03D\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_grails\": {\n\t\t\t\"fontCharacter\": \"\\\\E03D\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_graphql_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03E\",\n\t\t\t\"fontColor\": \"#dd4b78\"\n\t\t},\n\t\t\"_graphql\": {\n\t\t\t\"fontCharacter\": \"\\\\E03E\",\n\t\t\t\"fontColor\": \"#f55385\"\n\t\t},\n\t\t\"_grunt_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E03F\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_grunt\": {\n\t\t\t\"fontCharacter\": \"\\\\E03F\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_gulp_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E040\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_gulp\": {\n\t\t\t\"fontCharacter\": \"\\\\E040\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_hacklang_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E041\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_hacklang\": {\n\t\t\t\"fontCharacter\": \"\\\\E041\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_haml_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E042\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_haml\": {\n\t\t\t\"fontCharacter\": \"\\\\E042\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_happenings_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E043\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_happenings\": {\n\t\t\t\"fontCharacter\": \"\\\\E043\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_haskell_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E044\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_haskell\": {\n\t\t\t\"fontCharacter\": \"\\\\E044\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_haxe_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_haxe\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_haxe_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_haxe_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_haxe_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_haxe_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_haxe_3_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_haxe_3\": {\n\t\t\t\"fontCharacter\": \"\\\\E045\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_heroku_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E046\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_heroku\": {\n\t\t\t\"fontCharacter\": \"\\\\E046\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_hex_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E047\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_hex\": {\n\t\t\t\"fontCharacter\": \"\\\\E047\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_html_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_html\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_html_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_html_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_html_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_html_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_html_3_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_html_3\": {\n\t\t\t\"fontCharacter\": \"\\\\E048\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_html_erb_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E049\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_html_erb\": {\n\t\t\t\"fontCharacter\": \"\\\\E049\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_ignored_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E04A\",\n\t\t\t\"fontColor\": \"#3b4b52\"\n\t\t},\n\t\t\"_ignored\": {\n\t\t\t\"fontCharacter\": \"\\\\E04A\",\n\t\t\t\"fontColor\": \"#41535b\"\n\t\t},\n\t\t\"_illustrator_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E04B\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_illustrator\": {\n\t\t\t\"fontCharacter\": \"\\\\E04B\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_image_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E04C\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_image\": {\n\t\t\t\"fontCharacter\": \"\\\\E04C\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_info_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E04D\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_info\": {\n\t\t\t\"fontCharacter\": \"\\\\E04D\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_ionic_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E04E\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_ionic\": {\n\t\t\t\"fontCharacter\": \"\\\\E04E\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_jade_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E04F\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_jade\": {\n\t\t\t\"fontCharacter\": \"\\\\E04F\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_java_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E050\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_java\": {\n\t\t\t\"fontCharacter\": \"\\\\E050\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_java_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E050\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_java_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E050\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_javascript_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E051\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_javascript\": {\n\t\t\t\"fontCharacter\": \"\\\\E051\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_javascript_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E051\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_javascript_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E051\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_javascript_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E051\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_javascript_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E051\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_jenkins_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E052\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_jenkins\": {\n\t\t\t\"fontCharacter\": \"\\\\E052\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_jinja_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E053\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_jinja\": {\n\t\t\t\"fontCharacter\": \"\\\\E053\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_json_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E055\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_json\": {\n\t\t\t\"fontCharacter\": \"\\\\E055\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_json_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E055\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_json_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E055\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_julia_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E056\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_julia\": {\n\t\t\t\"fontCharacter\": \"\\\\E056\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_karma_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E057\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_karma\": {\n\t\t\t\"fontCharacter\": \"\\\\E057\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_kotlin_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E058\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_kotlin\": {\n\t\t\t\"fontCharacter\": \"\\\\E058\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_less_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E059\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_less\": {\n\t\t\t\"fontCharacter\": \"\\\\E059\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_license_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05A\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_license\": {\n\t\t\t\"fontCharacter\": \"\\\\E05A\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_license_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05A\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_license_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E05A\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_license_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05A\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_license_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E05A\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_liquid_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05B\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_liquid\": {\n\t\t\t\"fontCharacter\": \"\\\\E05B\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_livescript_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05C\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_livescript\": {\n\t\t\t\"fontCharacter\": \"\\\\E05C\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_lock_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05D\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_lock\": {\n\t\t\t\"fontCharacter\": \"\\\\E05D\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_lua_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05E\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_lua\": {\n\t\t\t\"fontCharacter\": \"\\\\E05E\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_makefile_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_makefile\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_makefile_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_makefile_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_makefile_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#627379\"\n\t\t},\n\t\t\"_makefile_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#6d8086\"\n\t\t},\n\t\t\"_makefile_3_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_makefile_3\": {\n\t\t\t\"fontCharacter\": \"\\\\E05F\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_markdown_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E060\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_markdown\": {\n\t\t\t\"fontCharacter\": \"\\\\E060\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_maven_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E061\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_maven\": {\n\t\t\t\"fontCharacter\": \"\\\\E061\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_mdo_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E062\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_mdo\": {\n\t\t\t\"fontCharacter\": \"\\\\E062\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_mustache_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E063\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_mustache\": {\n\t\t\t\"fontCharacter\": \"\\\\E063\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_nim_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E065\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_nim\": {\n\t\t\t\"fontCharacter\": \"\\\\E065\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_notebook_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E066\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_notebook\": {\n\t\t\t\"fontCharacter\": \"\\\\E066\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_npm_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E067\",\n\t\t\t\"fontColor\": \"#3b4b52\"\n\t\t},\n\t\t\"_npm\": {\n\t\t\t\"fontCharacter\": \"\\\\E067\",\n\t\t\t\"fontColor\": \"#41535b\"\n\t\t},\n\t\t\"_npm_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E067\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_npm_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E067\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_npm_ignored_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E068\",\n\t\t\t\"fontColor\": \"#3b4b52\"\n\t\t},\n\t\t\"_npm_ignored\": {\n\t\t\t\"fontCharacter\": \"\\\\E068\",\n\t\t\t\"fontColor\": \"#41535b\"\n\t\t},\n\t\t\"_nunjucks_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E069\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_nunjucks\": {\n\t\t\t\"fontCharacter\": \"\\\\E069\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_ocaml_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E06A\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_ocaml\": {\n\t\t\t\"fontCharacter\": \"\\\\E06A\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_odata_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E06B\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_odata\": {\n\t\t\t\"fontCharacter\": \"\\\\E06B\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_pddl_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E06C\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_pddl\": {\n\t\t\t\"fontCharacter\": \"\\\\E06C\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_pdf_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E06D\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_pdf\": {\n\t\t\t\"fontCharacter\": \"\\\\E06D\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_perl_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E06E\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_perl\": {\n\t\t\t\"fontCharacter\": \"\\\\E06E\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_photoshop_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E06F\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_photoshop\": {\n\t\t\t\"fontCharacter\": \"\\\\E06F\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_php_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E070\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_php\": {\n\t\t\t\"fontCharacter\": \"\\\\E070\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_pipeline_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E071\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_pipeline\": {\n\t\t\t\"fontCharacter\": \"\\\\E071\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_plan_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E072\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_plan\": {\n\t\t\t\"fontCharacter\": \"\\\\E072\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_platformio_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E073\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_platformio\": {\n\t\t\t\"fontCharacter\": \"\\\\E073\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_powershell_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E074\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_powershell\": {\n\t\t\t\"fontCharacter\": \"\\\\E074\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_prisma_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E075\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_prisma\": {\n\t\t\t\"fontCharacter\": \"\\\\E075\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_prolog_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E077\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_prolog\": {\n\t\t\t\"fontCharacter\": \"\\\\E077\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_pug_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E078\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_pug\": {\n\t\t\t\"fontCharacter\": \"\\\\E078\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_puppet_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E079\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_puppet\": {\n\t\t\t\"fontCharacter\": \"\\\\E079\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_purescript_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E07A\",\n\t\t\t\"fontColor\": \"#bfc2c1\"\n\t\t},\n\t\t\"_purescript\": {\n\t\t\t\"fontCharacter\": \"\\\\E07A\",\n\t\t\t\"fontColor\": \"#d4d7d6\"\n\t\t},\n\t\t\"_python_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E07B\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_python\": {\n\t\t\t\"fontCharacter\": \"\\\\E07B\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_react_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E07D\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_react\": {\n\t\t\t\"fontCharacter\": \"\\\\E07D\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_react_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E07D\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_react_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E07D\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_reasonml_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E07E\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_reasonml\": {\n\t\t\t\"fontCharacter\": \"\\\\E07E\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_rescript_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E07F\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_rescript\": {\n\t\t\t\"fontCharacter\": \"\\\\E07F\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_rescript_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E07F\",\n\t\t\t\"fontColor\": \"#dd4b78\"\n\t\t},\n\t\t\"_rescript_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E07F\",\n\t\t\t\"fontColor\": \"#f55385\"\n\t\t},\n\t\t\"_rollup_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E080\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_rollup\": {\n\t\t\t\"fontCharacter\": \"\\\\E080\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_ruby_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E081\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_ruby\": {\n\t\t\t\"fontCharacter\": \"\\\\E081\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_rust_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E082\",\n\t\t\t\"fontColor\": \"#627379\"\n\t\t},\n\t\t\"_rust\": {\n\t\t\t\"fontCharacter\": \"\\\\E082\",\n\t\t\t\"fontColor\": \"#6d8086\"\n\t\t},\n\t\t\"_salesforce_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E083\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_salesforce\": {\n\t\t\t\"fontCharacter\": \"\\\\E083\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_sass_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E084\",\n\t\t\t\"fontColor\": \"#dd4b78\"\n\t\t},\n\t\t\"_sass\": {\n\t\t\t\"fontCharacter\": \"\\\\E084\",\n\t\t\t\"fontColor\": \"#f55385\"\n\t\t},\n\t\t\"_sbt_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E085\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_sbt\": {\n\t\t\t\"fontCharacter\": \"\\\\E085\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_scala_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E086\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_scala\": {\n\t\t\t\"fontCharacter\": \"\\\\E086\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_shell_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E089\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_shell\": {\n\t\t\t\"fontCharacter\": \"\\\\E089\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_slim_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E08A\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_slim\": {\n\t\t\t\"fontCharacter\": \"\\\\E08A\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_smarty_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E08B\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_smarty\": {\n\t\t\t\"fontCharacter\": \"\\\\E08B\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_spring_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E08C\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_spring\": {\n\t\t\t\"fontCharacter\": \"\\\\E08C\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_stylelint_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E08D\",\n\t\t\t\"fontColor\": \"#bfc2c1\"\n\t\t},\n\t\t\"_stylelint\": {\n\t\t\t\"fontCharacter\": \"\\\\E08D\",\n\t\t\t\"fontColor\": \"#d4d7d6\"\n\t\t},\n\t\t\"_stylelint_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E08D\",\n\t\t\t\"fontColor\": \"#455155\"\n\t\t},\n\t\t\"_stylelint_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E08D\",\n\t\t\t\"fontColor\": \"#4d5a5e\"\n\t\t},\n\t\t\"_stylus_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E08E\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_stylus\": {\n\t\t\t\"fontCharacter\": \"\\\\E08E\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_sublime_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E08F\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_sublime\": {\n\t\t\t\"fontCharacter\": \"\\\\E08F\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_svelte_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E090\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_svelte\": {\n\t\t\t\"fontCharacter\": \"\\\\E090\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_svg_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E091\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_svg\": {\n\t\t\t\"fontCharacter\": \"\\\\E091\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_svg_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E091\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_svg_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E091\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_swift_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E092\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_swift\": {\n\t\t\t\"fontCharacter\": \"\\\\E092\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_terraform_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E093\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_terraform\": {\n\t\t\t\"fontCharacter\": \"\\\\E093\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_tex_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_tex\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_tex_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_tex_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_tex_2_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_tex_2\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_tex_3_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#bfc2c1\"\n\t\t},\n\t\t\"_tex_3\": {\n\t\t\t\"fontCharacter\": \"\\\\E094\",\n\t\t\t\"fontColor\": \"#d4d7d6\"\n\t\t},\n\t\t\"_todo\": {\n\t\t\t\"fontCharacter\": \"\\\\E096\"\n\t\t},\n\t\t\"_tsconfig_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E097\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_tsconfig\": {\n\t\t\t\"fontCharacter\": \"\\\\E097\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_twig_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E098\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_twig\": {\n\t\t\t\"fontCharacter\": \"\\\\E098\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_typescript_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E099\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_typescript\": {\n\t\t\t\"fontCharacter\": \"\\\\E099\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_typescript_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E099\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_typescript_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E099\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_vala_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E09A\",\n\t\t\t\"fontColor\": \"#627379\"\n\t\t},\n\t\t\"_vala\": {\n\t\t\t\"fontCharacter\": \"\\\\E09A\",\n\t\t\t\"fontColor\": \"#6d8086\"\n\t\t},\n\t\t\"_video_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E09B\",\n\t\t\t\"fontColor\": \"#dd4b78\"\n\t\t},\n\t\t\"_video\": {\n\t\t\t\"fontCharacter\": \"\\\\E09B\",\n\t\t\t\"fontColor\": \"#f55385\"\n\t\t},\n\t\t\"_vite_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E09C\",\n\t\t\t\"fontColor\": \"#b7b73b\"\n\t\t},\n\t\t\"_vite\": {\n\t\t\t\"fontCharacter\": \"\\\\E09C\",\n\t\t\t\"fontColor\": \"#cbcb41\"\n\t\t},\n\t\t\"_vue_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E09D\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_vue\": {\n\t\t\t\"fontCharacter\": \"\\\\E09D\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_wasm_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E09E\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_wasm\": {\n\t\t\t\"fontCharacter\": \"\\\\E09E\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_wat_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E09F\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_wat\": {\n\t\t\t\"fontCharacter\": \"\\\\E09F\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_webpack_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A0\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_webpack\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A0\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_wgt_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A1\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_wgt\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A1\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_windows_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A2\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_windows\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A2\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_word_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A3\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_word\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A3\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_xls_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A4\",\n\t\t\t\"fontColor\": \"#7fae42\"\n\t\t},\n\t\t\"_xls\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A4\",\n\t\t\t\"fontColor\": \"#8dc149\"\n\t\t},\n\t\t\"_xml_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A5\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_xml\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A5\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_yarn_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A6\",\n\t\t\t\"fontColor\": \"#498ba7\"\n\t\t},\n\t\t\"_yarn\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A6\",\n\t\t\t\"fontColor\": \"#519aba\"\n\t\t},\n\t\t\"_yml_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A7\",\n\t\t\t\"fontColor\": \"#9068b0\"\n\t\t},\n\t\t\"_yml\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A7\",\n\t\t\t\"fontColor\": \"#a074c4\"\n\t\t},\n\t\t\"_zig_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A8\",\n\t\t\t\"fontColor\": \"#cc6d2e\"\n\t\t},\n\t\t\"_zig\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A8\",\n\t\t\t\"fontColor\": \"#e37933\"\n\t\t},\n\t\t\"_zip_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A9\",\n\t\t\t\"fontColor\": \"#b8383d\"\n\t\t},\n\t\t\"_zip\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A9\",\n\t\t\t\"fontColor\": \"#cc3e44\"\n\t\t},\n\t\t\"_zip_1_light\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A9\",\n\t\t\t\"fontColor\": \"#627379\"\n\t\t},\n\t\t\"_zip_1\": {\n\t\t\t\"fontCharacter\": \"\\\\E0A9\",\n\t\t\t\"fontColor\": \"#6d8086\"\n\t\t}\n\t},\n\t\"file\": \"_default\",\n\t\"fileExtensions\": {\n\t\t\"bsl\": \"_bsl\",\n\t\t\"mdo\": \"_mdo\",\n\t\t\"cls\": \"_salesforce\",\n\t\t\"apex\": \"_salesforce\",\n\t\t\"asm\": \"_asm\",\n\t\t\"s\": \"_asm\",\n\t\t\"bicep\": \"_bicep\",\n\t\t\"bzl\": \"_bazel\",\n\t\t\"bazel\": \"_bazel\",\n\t\t\"build\": \"_bazel\",\n\t\t\"workspace\": \"_bazel\",\n\t\t\"bazelignore\": \"_bazel\",\n\t\t\"bazelversion\": \"_bazel\",\n\t\t\"h\": \"_c_1\",\n\t\t\"aspx\": \"_html\",\n\t\t\"ascx\": \"_html_1\",\n\t\t\"asax\": \"_html_2\",\n\t\t\"master\": \"_html_2\",\n\t\t\"hh\": \"_cpp_1\",\n\t\t\"hpp\": \"_cpp_1\",\n\t\t\"hxx\": \"_cpp_1\",\n\t\t\"h++\": \"_cpp_1\",\n\t\t\"edn\": \"_clojure_1\",\n\t\t\"cfc\": \"_coldfusion\",\n\t\t\"cfm\": \"_coldfusion\",\n\t\t\"litcoffee\": \"_coffee\",\n\t\t\"config\": \"_config\",\n\t\t\"cr\": \"_crystal\",\n\t\t\"ecr\": \"_crystal_embedded\",\n\t\t\"slang\": \"_crystal_embedded\",\n\t\t\"cson\": \"_json\",\n\t\t\"css.map\": \"_css\",\n\t\t\"sss\": \"_css\",\n\t\t\"csv\": \"_csv\",\n\t\t\"xls\": \"_xls\",\n\t\t\"xlsx\": \"_xls\",\n\t\t\"cuh\": \"_cu_1\",\n\t\t\"hu\": \"_cu_1\",\n\t\t\"cake\": \"_cake\",\n\t\t\"ctp\": \"_cake_php\",\n\t\t\"d\": \"_d\",\n\t\t\"doc\": \"_word\",\n\t\t\"docx\": \"_word\",\n\t\t\"ejs\": \"_ejs\",\n\t\t\"ex\": \"_elixir\",\n\t\t\"exs\": \"_elixir_script\",\n\t\t\"elm\": \"_elm\",\n\t\t\"ico\": \"_favicon\",\n\t\t\"gitconfig\": \"_git\",\n\t\t\"gitkeep\": \"_git\",\n\t\t\"gitattributes\": \"_git\",\n\t\t\"gitmodules\": \"_git\",\n\t\t\"slide\": \"_go\",\n\t\t\"article\": \"_go\",\n\t\t\"gd\": \"_godot\",\n\t\t\"godot\": \"_godot_1\",\n\t\t\"tres\": \"_godot_2\",\n\t\t\"tscn\": \"_godot_3\",\n\t\t\"gradle\": \"_gradle\",\n\t\t\"gsp\": \"_grails\",\n\t\t\"gql\": \"_graphql\",\n\t\t\"graphql\": \"_graphql\",\n\t\t\"graphqls\": \"_graphql\",\n\t\t\"hack\": \"_hacklang\",\n\t\t\"haml\": \"_haml\",\n\t\t\"hs\": \"_haskell\",\n\t\t\"lhs\": \"_haskell\",\n\t\t\"hx\": \"_haxe\",\n\t\t\"hxs\": \"_haxe_1\",\n\t\t\"hxp\": \"_haxe_2\",\n\t\t\"hxml\": \"_haxe_3\",\n\t\t\"jade\": \"_jade\",\n\t\t\"class\": \"_java_1\",\n\t\t\"classpath\": \"_java\",\n\t\t\"js.map\": \"_javascript\",\n\t\t\"cjs.map\": \"_javascript\",\n\t\t\"mjs.map\": \"_javascript\",\n\t\t\"spec.js\": \"_javascript_1\",\n\t\t\"spec.cjs\": \"_javascript_1\",\n\t\t\"spec.mjs\": \"_javascript_1\",\n\t\t\"test.js\": \"_javascript_1\",\n\t\t\"test.cjs\": \"_javascript_1\",\n\t\t\"test.mjs\": \"_javascript_1\",\n\t\t\"es\": \"_javascript\",\n\t\t\"es5\": \"_javascript\",\n\t\t\"es7\": \"_javascript\",\n\t\t\"jinja\": \"_jinja\",\n\t\t\"jinja2\": \"_jinja\",\n\t\t\"kt\": \"_kotlin\",\n\t\t\"kts\": \"_kotlin\",\n\t\t\"liquid\": \"_liquid\",\n\t\t\"ls\": \"_livescript\",\n\t\t\"argdown\": \"_argdown\",\n\t\t\"ad\": \"_argdown\",\n\t\t\"mustache\": \"_mustache\",\n\t\t\"stache\": \"_mustache\",\n\t\t\"nim\": \"_nim\",\n\t\t\"nims\": \"_nim\",\n\t\t\"github-issues\": \"_github\",\n\t\t\"ipynb\": \"_notebook\",\n\t\t\"njk\": \"_nunjucks\",\n\t\t\"nunjucks\": \"_nunjucks\",\n\t\t\"nunjs\": \"_nunjucks\",\n\t\t\"nunj\": \"_nunjucks\",\n\t\t\"njs\": \"_nunjucks\",\n\t\t\"nj\": \"_nunjucks\",\n\t\t\"npm-debug.log\": \"_npm\",\n\t\t\"npmignore\": \"_npm_1\",\n\t\t\"npmrc\": \"_npm_1\",\n\t\t\"ml\": \"_ocaml\",\n\t\t\"mli\": \"_ocaml\",\n\t\t\"cmx\": \"_ocaml\",\n\t\t\"cmxa\": \"_ocaml\",\n\t\t\"odata\": \"_odata\",\n\t\t\"php.inc\": \"_php\",\n\t\t\"pipeline\": \"_pipeline\",\n\t\t\"pddl\": \"_pddl\",\n\t\t\"plan\": \"_plan\",\n\t\t\"happenings\": \"_happenings\",\n\t\t\"prisma\": \"_prisma\",\n\t\t\"pp\": \"_puppet\",\n\t\t\"epp\": \"_puppet\",\n\t\t\"purs\": \"_purescript\",\n\t\t\"spec.jsx\": \"_react_1\",\n\t\t\"test.jsx\": \"_react_1\",\n\t\t\"cjsx\": \"_react\",\n\t\t\"spec.tsx\": \"_react_1\",\n\t\t\"test.tsx\": \"_react_1\",\n\t\t\"re\": \"_reasonml\",\n\t\t\"res\": \"_rescript\",\n\t\t\"resi\": \"_rescript_1\",\n\t\t\"r\": \"_R\",\n\t\t\"rmd\": \"_R\",\n\t\t\"erb\": \"_html_erb\",\n\t\t\"erb.html\": \"_html_erb\",\n\t\t\"html.erb\": \"_html_erb\",\n\t\t\"sass\": \"_sass\",\n\t\t\"springbeans\": \"_spring\",\n\t\t\"slim\": \"_slim\",\n\t\t\"smarty.tpl\": \"_smarty\",\n\t\t\"tpl\": \"_smarty\",\n\t\t\"sbt\": \"_sbt\",\n\t\t\"scala\": \"_scala\",\n\t\t\"sol\": \"_ethereum\",\n\t\t\"styl\": \"_stylus\",\n\t\t\"svelte\": \"_svelte\",\n\t\t\"soql\": \"_db_1\",\n\t\t\"tf\": \"_terraform\",\n\t\t\"tf.json\": \"_terraform\",\n\t\t\"tfvars\": \"_terraform\",\n\t\t\"tfvars.json\": \"_terraform\",\n\t\t\"dtx\": \"_tex_2\",\n\t\t\"ins\": \"_tex_3\",\n\t\t\"toml\": \"_config\",\n\t\t\"twig\": \"_twig\",\n\t\t\"spec.ts\": \"_typescript_1\",\n\t\t\"test.ts\": \"_typescript_1\",\n\t\t\"vala\": \"_vala\",\n\t\t\"vapi\": \"_vala\",\n\t\t\"component\": \"_html_3\",\n\t\t\"vue\": \"_vue\",\n\t\t\"wasm\": \"_wasm\",\n\t\t\"wat\": \"_wat\",\n\t\t\"pro\": \"_prolog\",\n\t\t\"zig\": \"_zig\",\n\t\t\"jar\": \"_zip\",\n\t\t\"zip\": \"_zip_1\",\n\t\t\"wgt\": \"_wgt\",\n\t\t\"ai\": \"_illustrator\",\n\t\t\"psd\": \"_photoshop\",\n\t\t\"pdf\": \"_pdf\",\n\t\t\"eot\": \"_font\",\n\t\t\"ttf\": \"_font\",\n\t\t\"woff\": \"_font\",\n\t\t\"woff2\": \"_font\",\n\t\t\"otf\": \"_font\",\n\t\t\"avif\": \"_image\",\n\t\t\"gif\": \"_image\",\n\t\t\"jpg\": \"_image\",\n\t\t\"jpeg\": \"_image\",\n\t\t\"png\": \"_image\",\n\t\t\"pxm\": \"_image\",\n\t\t\"svg\": \"_svg\",\n\t\t\"svgx\": \"_image\",\n\t\t\"tiff\": \"_image\",\n\t\t\"webp\": \"_image\",\n\t\t\"sublime-project\": \"_sublime\",\n\t\t\"sublime-workspace\": \"_sublime\",\n\t\t\"mov\": \"_video\",\n\t\t\"ogv\": \"_video\",\n\t\t\"webm\": \"_video\",\n\t\t\"avi\": \"_video\",\n\t\t\"mpg\": \"_video\",\n\t\t\"mp4\": \"_video\",\n\t\t\"mp3\": \"_audio\",\n\t\t\"ogg\": \"_audio\",\n\t\t\"wav\": \"_audio\",\n\t\t\"flac\": \"_audio\",\n\t\t\"3ds\": \"_svg_1\",\n\t\t\"3dm\": \"_svg_1\",\n\t\t\"stl\": \"_svg_1\",\n\t\t\"obj\": \"_svg_1\",\n\t\t\"dae\": \"_svg_1\",\n\t\t\"babelrc\": \"_babel\",\n\t\t\"babelrc.js\": \"_babel\",\n\t\t\"babelrc.cjs\": \"_babel\",\n\t\t\"bazelrc\": \"_bazel_1\",\n\t\t\"bowerrc\": \"_bower\",\n\t\t\"dockerignore\": \"_docker_1\",\n\t\t\"codeclimate.yml\": \"_code-climate\",\n\t\t\"eslintrc\": \"_eslint\",\n\t\t\"eslintrc.js\": \"_eslint\",\n\t\t\"eslintrc.cjs\": \"_eslint\",\n\t\t\"eslintrc.yaml\": \"_eslint\",\n\t\t\"eslintrc.yml\": \"_eslint\",\n\t\t\"eslintrc.json\": \"_eslint\",\n\t\t\"eslintignore\": \"_eslint_1\",\n\t\t\"firebaserc\": \"_firebase\",\n\t\t\"gitlab-ci.yml\": \"_gitlab\",\n\t\t\"jshintrc\": \"_javascript_2\",\n\t\t\"jscsrc\": \"_javascript_2\",\n\t\t\"stylelintrc\": \"_stylelint\",\n\t\t\"stylelintrc.json\": \"_stylelint\",\n\t\t\"stylelintrc.yaml\": \"_stylelint\",\n\t\t\"stylelintrc.yml\": \"_stylelint\",\n\t\t\"stylelintrc.js\": \"_stylelint\",\n\t\t\"stylelintignore\": \"_stylelint_1\",\n\t\t\"direnv\": \"_config\",\n\t\t\"env\": \"_config\",\n\t\t\"static\": \"_config\",\n\t\t\"slugignore\": \"_config\",\n\t\t\"tmp\": \"_clock_1\",\n\t\t\"htaccess\": \"_config\",\n\t\t\"key\": \"_lock\",\n\t\t\"cert\": \"_lock\",\n\t\t\"cer\": \"_lock\",\n\t\t\"crt\": \"_lock\",\n\t\t\"pem\": \"_lock\",\n\t\t\"ds_store\": \"_ignored\"\n\t},\n\t\"fileNames\": {\n\t\t\"mix\": \"_hex\",\n\t\t\"karma.conf.js\": \"_karma\",\n\t\t\"karma.conf.cjs\": \"_karma\",\n\t\t\"karma.conf.mjs\": \"_karma\",\n\t\t\"karma.conf.coffee\": \"_karma\",\n\t\t\"readme.md\": \"_info\",\n\t\t\"readme.txt\": \"_info\",\n\t\t\"readme\": \"_info\",\n\t\t\"changelog.md\": \"_clock\",\n\t\t\"changelog.txt\": \"_clock\",\n\t\t\"changelog\": \"_clock\",\n\t\t\"changes.md\": \"_clock\",\n\t\t\"changes.txt\": \"_clock\",\n\t\t\"changes\": \"_clock\",\n\t\t\"version.md\": \"_clock\",\n\t\t\"version.txt\": \"_clock\",\n\t\t\"version\": \"_clock\",\n\t\t\"mvnw\": \"_maven\",\n\t\t\"pom.xml\": \"_maven\",\n\t\t\"tsconfig.json\": \"_tsconfig\",\n\t\t\"vite.config.js\": \"_vite\",\n\t\t\"vite.config.ts\": \"_vite\",\n\t\t\"vite.config.mjs\": \"_vite\",\n\t\t\"vite.config.mts\": \"_vite\",\n\t\t\"vite.config.cjs\": \"_vite\",\n\t\t\"vite.config.cts\": \"_vite\",\n\t\t\"swagger.json\": \"_json_1\",\n\t\t\"swagger.yml\": \"_json_1\",\n\t\t\"swagger.yaml\": \"_json_1\",\n\t\t\"mime.types\": \"_config\",\n\t\t\"jenkinsfile\": \"_jenkins\",\n\t\t\"babel.config.js\": \"_babel\",\n\t\t\"babel.config.json\": \"_babel\",\n\t\t\"babel.config.cjs\": \"_babel\",\n\t\t\"build\": \"_bazel\",\n\t\t\"build.bazel\": \"_bazel\",\n\t\t\"workspace\": \"_bazel\",\n\t\t\"workspace.bazel\": \"_bazel\",\n\t\t\"bower.json\": \"_bower\",\n\t\t\"docker-healthcheck\": \"_docker_2\",\n\t\t\"eslint.config.js\": \"_eslint\",\n\t\t\"firebase.json\": \"_firebase\",\n\t\t\"geckodriver\": \"_firefox\",\n\t\t\"gruntfile.js\": \"_grunt\",\n\t\t\"gruntfile.babel.js\": \"_grunt\",\n\t\t\"gruntfile.coffee\": \"_grunt\",\n\t\t\"gulpfile\": \"_gulp\",\n\t\t\"gulpfile.js\": \"_gulp\",\n\t\t\"ionic.config.json\": \"_ionic\",\n\t\t\"ionic.project\": \"_ionic\",\n\t\t\"platformio.ini\": \"_platformio\",\n\t\t\"rollup.config.js\": \"_rollup\",\n\t\t\"sass-lint.yml\": \"_sass\",\n\t\t\"stylelint.config.js\": \"_stylelint\",\n\t\t\"stylelint.config.cjs\": \"_stylelint\",\n\t\t\"stylelint.config.mjs\": \"_stylelint\",\n\t\t\"yarn.clean\": \"_yarn\",\n\t\t\"yarn.lock\": \"_yarn\",\n\t\t\"webpack.config.js\": \"_webpack\",\n\t\t\"webpack.config.cjs\": \"_webpack\",\n\t\t\"webpack.config.mjs\": \"_webpack\",\n\t\t\"webpack.config.ts\": \"_webpack\",\n\t\t\"webpack.config.build.js\": \"_webpack\",\n\t\t\"webpack.config.build.cjs\": \"_webpack\",\n\t\t\"webpack.config.build.mjs\": \"_webpack\",\n\t\t\"webpack.config.build.ts\": \"_webpack\",\n\t\t\"webpack.common.js\": \"_webpack\",\n\t\t\"webpack.common.cjs\": \"_webpack\",\n\t\t\"webpack.common.mjs\": \"_webpack\",\n\t\t\"webpack.common.ts\": \"_webpack\",\n\t\t\"webpack.dev.js\": \"_webpack\",\n\t\t\"webpack.dev.cjs\": \"_webpack\",\n\t\t\"webpack.dev.mjs\": \"_webpack\",\n\t\t\"webpack.dev.ts\": \"_webpack\",\n\t\t\"webpack.prod.js\": \"_webpack\",\n\t\t\"webpack.prod.cjs\": \"_webpack\",\n\t\t\"webpack.prod.mjs\": \"_webpack\",\n\t\t\"webpack.prod.ts\": \"_webpack\",\n\t\t\"license\": \"_license\",\n\t\t\"licence\": \"_license\",\n\t\t\"license.txt\": \"_license\",\n\t\t\"licence.txt\": \"_license\",\n\t\t\"license.md\": \"_license\",\n\t\t\"licence.md\": \"_license\",\n\t\t\"copying\": \"_license\",\n\t\t\"copying.txt\": \"_license\",\n\t\t\"copying.md\": \"_license\",\n\t\t\"compiling\": \"_license_1\",\n\t\t\"compiling.txt\": \"_license_1\",\n\t\t\"compiling.md\": \"_license_1\",\n\t\t\"contributing\": \"_license_2\",\n\t\t\"contributing.txt\": \"_license_2\",\n\t\t\"contributing.md\": \"_license_2\",\n\t\t\"qmakefile\": \"_makefile_1\",\n\t\t\"omakefile\": \"_makefile_2\",\n\t\t\"cmakelists.txt\": \"_makefile_3\",\n\t\t\"procfile\": \"_heroku\",\n\t\t\"todo\": \"_todo\",\n\t\t\"todo.txt\": \"_todo\",\n\t\t\"todo.md\": \"_todo\",\n\t\t\"npm-debug.log\": \"_npm_ignored\"\n\t},\n\t\"languageIds\": {\n\t\t\"bat\": \"_windows\",\n\t\t\"clojure\": \"_clojure\",\n\t\t\"coffeescript\": \"_coffee\",\n\t\t\"jsonc\": \"_json\",\n\t\t\"json\": \"_json\",\n\t\t\"c\": \"_c\",\n\t\t\"cpp\": \"_cpp\",\n\t\t\"cuda-cpp\": \"_cu\",\n\t\t\"csharp\": \"_c-sharp\",\n\t\t\"css\": \"_css\",\n\t\t\"dart\": \"_dart\",\n\t\t\"dockerfile\": \"_docker\",\n\t\t\"ignore\": \"_git\",\n\t\t\"fsharp\": \"_f-sharp\",\n\t\t\"git-commit\": \"_git\",\n\t\t\"go\": \"_go2\",\n\t\t\"groovy\": \"_grails\",\n\t\t\"handlebars\": \"_mustache\",\n\t\t\"html\": \"_html_3\",\n\t\t\"properties\": \"_config\",\n\t\t\"java\": \"_java\",\n\t\t\"javascriptreact\": \"_react\",\n\t\t\"javascript\": \"_javascript\",\n\t\t\"julia\": \"_julia\",\n\t\t\"tex\": \"_tex_1\",\n\t\t\"latex\": \"_tex\",\n\t\t\"less\": \"_less\",\n\t\t\"lua\": \"_lua\",\n\t\t\"makefile\": \"_makefile\",\n\t\t\"markdown\": \"_markdown\",\n\t\t\"objective-c\": \"_c_2\",\n\t\t\"objective-cpp\": \"_cpp_2\",\n\t\t\"perl\": \"_perl\",\n\t\t\"php\": \"_php\",\n\t\t\"powershell\": \"_powershell\",\n\t\t\"jade\": \"_pug\",\n\t\t\"python\": \"_python\",\n\t\t\"r\": \"_R\",\n\t\t\"razor\": \"_html\",\n\t\t\"ruby\": \"_ruby\",\n\t\t\"rust\": \"_rust\",\n\t\t\"scss\": \"_sass\",\n\t\t\"search-result\": \"_code-search\",\n\t\t\"shellscript\": \"_shell\",\n\t\t\"sql\": \"_db\",\n\t\t\"swift\": \"_swift\",\n\t\t\"typescript\": \"_typescript\",\n\t\t\"typescriptreact\": \"_react\",\n\t\t\"xml\": \"_xml\",\n\t\t\"dockercompose\": \"_docker_3\",\n\t\t\"yaml\": \"_yml\",\n\t\t\"argdown\": \"_argdown\",\n\t\t\"bicep\": \"_bicep\",\n\t\t\"elixir\": \"_elixir\",\n\t\t\"elm\": \"_elm\",\n\t\t\"erb\": \"_html_erb\",\n\t\t\"github-issues\": \"_github\",\n\t\t\"gradle\": \"_gradle\",\n\t\t\"godot\": \"_godot\",\n\t\t\"haml\": \"_haml\",\n\t\t\"haskell\": \"_haskell\",\n\t\t\"haxe\": \"_haxe\",\n\t\t\"jinja\": \"_jinja\",\n\t\t\"kotlin\": \"_kotlin\",\n\t\t\"mustache\": \"_mustache\",\n\t\t\"nunjucks\": \"_nunjucks\",\n\t\t\"ocaml\": \"_ocaml\",\n\t\t\"rescript\": \"_rescript\",\n\t\t\"sass\": \"_sass\",\n\t\t\"stylus\": \"_stylus\",\n\t\t\"terraform\": \"_terraform\",\n\t\t\"todo\": \"_todo\",\n\t\t\"vala\": \"_vala\",\n\t\t\"vue\": \"_vue\",\n\t\t\"jsonl\": \"_json\",\n\t\t\"postcss\": \"_css\",\n\t\t\"django-html\": \"_html_3\",\n\t\t\"blade\": \"_php\"\n\t},\n\t\"light\": {\n\t\t\"file\": \"_default_light\",\n\t\t\"fileExtensions\": {\n\t\t\t\"bsl\": \"_bsl_light\",\n\t\t\t\"mdo\": \"_mdo_light\",\n\t\t\t\"cls\": \"_salesforce_light\",\n\t\t\t\"apex\": \"_salesforce_light\",\n\t\t\t\"asm\": \"_asm_light\",\n\t\t\t\"s\": \"_asm_light\",\n\t\t\t\"bicep\": \"_bicep_light\",\n\t\t\t\"bzl\": \"_bazel_light\",\n\t\t\t\"bazel\": \"_bazel_light\",\n\t\t\t\"build\": \"_bazel_light\",\n\t\t\t\"workspace\": \"_bazel_light\",\n\t\t\t\"bazelignore\": \"_bazel_light\",\n\t\t\t\"bazelversion\": \"_bazel_light\",\n\t\t\t\"h\": \"_c_1_light\",\n\t\t\t\"aspx\": \"_html_light\",\n\t\t\t\"ascx\": \"_html_1_light\",\n\t\t\t\"asax\": \"_html_2_light\",\n\t\t\t\"master\": \"_html_2_light\",\n\t\t\t\"hh\": \"_cpp_1_light\",\n\t\t\t\"hpp\": \"_cpp_1_light\",\n\t\t\t\"hxx\": \"_cpp_1_light\",\n\t\t\t\"h++\": \"_cpp_1_light\",\n\t\t\t\"edn\": \"_clojure_1_light\",\n\t\t\t\"cfc\": \"_coldfusion_light\",\n\t\t\t\"cfm\": \"_coldfusion_light\",\n\t\t\t\"litcoffee\": \"_coffee_light\",\n\t\t\t\"config\": \"_config_light\",\n\t\t\t\"cr\": \"_crystal_light\",\n\t\t\t\"ecr\": \"_crystal_embedded_light\",\n\t\t\t\"slang\": \"_crystal_embedded_light\",\n\t\t\t\"cson\": \"_json_light\",\n\t\t\t\"css.map\": \"_css_light\",\n\t\t\t\"sss\": \"_css_light\",\n\t\t\t\"csv\": \"_csv_light\",\n\t\t\t\"xls\": \"_xls_light\",\n\t\t\t\"xlsx\": \"_xls_light\",\n\t\t\t\"cuh\": \"_cu_1_light\",\n\t\t\t\"hu\": \"_cu_1_light\",\n\t\t\t\"cake\": \"_cake_light\",\n\t\t\t\"ctp\": \"_cake_php_light\",\n\t\t\t\"d\": \"_d_light\",\n\t\t\t\"doc\": \"_word_light\",\n\t\t\t\"docx\": \"_word_light\",\n\t\t\t\"ejs\": \"_ejs_light\",\n\t\t\t\"ex\": \"_elixir_light\",\n\t\t\t\"exs\": \"_elixir_script_light\",\n\t\t\t\"elm\": \"_elm_light\",\n\t\t\t\"ico\": \"_favicon_light\",\n\t\t\t\"gitconfig\": \"_git_light\",\n\t\t\t\"gitkeep\": \"_git_light\",\n\t\t\t\"gitattributes\": \"_git_light\",\n\t\t\t\"gitmodules\": \"_git_light\",\n\t\t\t\"slide\": \"_go_light\",\n\t\t\t\"article\": \"_go_light\",\n\t\t\t\"gd\": \"_godot_light\",\n\t\t\t\"godot\": \"_godot_1_light\",\n\t\t\t\"tres\": \"_godot_2_light\",\n\t\t\t\"tscn\": \"_godot_3_light\",\n\t\t\t\"gradle\": \"_gradle_light\",\n\t\t\t\"gsp\": \"_grails_light\",\n\t\t\t\"gql\": \"_graphql_light\",\n\t\t\t\"graphql\": \"_graphql_light\",\n\t\t\t\"graphqls\": \"_graphql_light\",\n\t\t\t\"hack\": \"_hacklang_light\",\n\t\t\t\"haml\": \"_haml_light\",\n\t\t\t\"hs\": \"_haskell_light\",\n\t\t\t\"lhs\": \"_haskell_light\",\n\t\t\t\"hx\": \"_haxe_light\",\n\t\t\t\"hxs\": \"_haxe_1_light\",\n\t\t\t\"hxp\": \"_haxe_2_light\",\n\t\t\t\"hxml\": \"_haxe_3_light\",\n\t\t\t\"jade\": \"_jade_light\",\n\t\t\t\"class\": \"_java_1_light\",\n\t\t\t\"classpath\": \"_java_light\",\n\t\t\t\"js.map\": \"_javascript_light\",\n\t\t\t\"cjs.map\": \"_javascript_light\",\n\t\t\t\"mjs.map\": \"_javascript_light\",\n\t\t\t\"spec.js\": \"_javascript_1_light\",\n\t\t\t\"spec.cjs\": \"_javascript_1_light\",\n\t\t\t\"spec.mjs\": \"_javascript_1_light\",\n\t\t\t\"test.js\": \"_javascript_1_light\",\n\t\t\t\"test.cjs\": \"_javascript_1_light\",\n\t\t\t\"test.mjs\": \"_javascript_1_light\",\n\t\t\t\"es\": \"_javascript_light\",\n\t\t\t\"es5\": \"_javascript_light\",\n\t\t\t\"es7\": \"_javascript_light\",\n\t\t\t\"jinja\": \"_jinja_light\",\n\t\t\t\"jinja2\": \"_jinja_light\",\n\t\t\t\"kt\": \"_kotlin_light\",\n\t\t\t\"kts\": \"_kotlin_light\",\n\t\t\t\"liquid\": \"_liquid_light\",\n\t\t\t\"ls\": \"_livescript_light\",\n\t\t\t\"argdown\": \"_argdown_light\",\n\t\t\t\"ad\": \"_argdown_light\",\n\t\t\t\"mustache\": \"_mustache_light\",\n\t\t\t\"stache\": \"_mustache_light\",\n\t\t\t\"nim\": \"_nim_light\",\n\t\t\t\"nims\": \"_nim_light\",\n\t\t\t\"github-issues\": \"_github_light\",\n\t\t\t\"ipynb\": \"_notebook_light\",\n\t\t\t\"njk\": \"_nunjucks_light\",\n\t\t\t\"nunjucks\": \"_nunjucks_light\",\n\t\t\t\"nunjs\": \"_nunjucks_light\",\n\t\t\t\"nunj\": \"_nunjucks_light\",\n\t\t\t\"njs\": \"_nunjucks_light\",\n\t\t\t\"nj\": \"_nunjucks_light\",\n\t\t\t\"npm-debug.log\": \"_npm_light\",\n\t\t\t\"npmignore\": \"_npm_1_light\",\n\t\t\t\"npmrc\": \"_npm_1_light\",\n\t\t\t\"ml\": \"_ocaml_light\",\n\t\t\t\"mli\": \"_ocaml_light\",\n\t\t\t\"cmx\": \"_ocaml_light\",\n\t\t\t\"cmxa\": \"_ocaml_light\",\n\t\t\t\"odata\": \"_odata_light\",\n\t\t\t\"php.inc\": \"_php_light\",\n\t\t\t\"pipeline\": \"_pipeline_light\",\n\t\t\t\"pddl\": \"_pddl_light\",\n\t\t\t\"plan\": \"_plan_light\",\n\t\t\t\"happenings\": \"_happenings_light\",\n\t\t\t\"prisma\": \"_prisma_light\",\n\t\t\t\"pp\": \"_puppet_light\",\n\t\t\t\"epp\": \"_puppet_light\",\n\t\t\t\"purs\": \"_purescript_light\",\n\t\t\t\"spec.jsx\": \"_react_1_light\",\n\t\t\t\"test.jsx\": \"_react_1_light\",\n\t\t\t\"cjsx\": \"_react_light\",\n\t\t\t\"spec.tsx\": \"_react_1_light\",\n\t\t\t\"test.tsx\": \"_react_1_light\",\n\t\t\t\"re\": \"_reasonml_light\",\n\t\t\t\"res\": \"_rescript_light\",\n\t\t\t\"resi\": \"_rescript_1_light\",\n\t\t\t\"r\": \"_R_light\",\n\t\t\t\"rmd\": \"_R_light\",\n\t\t\t\"erb\": \"_html_erb_light\",\n\t\t\t\"erb.html\": \"_html_erb_light\",\n\t\t\t\"html.erb\": \"_html_erb_light\",\n\t\t\t\"sass\": \"_sass_light\",\n\t\t\t\"springbeans\": \"_spring_light\",\n\t\t\t\"slim\": \"_slim_light\",\n\t\t\t\"smarty.tpl\": \"_smarty_light\",\n\t\t\t\"tpl\": \"_smarty_light\",\n\t\t\t\"sbt\": \"_sbt_light\",\n\t\t\t\"scala\": \"_scala_light\",\n\t\t\t\"sol\": \"_ethereum_light\",\n\t\t\t\"styl\": \"_stylus_light\",\n\t\t\t\"svelte\": \"_svelte_light\",\n\t\t\t\"soql\": \"_db_1_light\",\n\t\t\t\"tf\": \"_terraform_light\",\n\t\t\t\"tf.json\": \"_terraform_light\",\n\t\t\t\"tfvars\": \"_terraform_light\",\n\t\t\t\"tfvars.json\": \"_terraform_light\",\n\t\t\t\"dtx\": \"_tex_2_light\",\n\t\t\t\"ins\": \"_tex_3_light\",\n\t\t\t\"toml\": \"_config_light\",\n\t\t\t\"twig\": \"_twig_light\",\n\t\t\t\"spec.ts\": \"_typescript_1_light\",\n\t\t\t\"test.ts\": \"_typescript_1_light\",\n\t\t\t\"vala\": \"_vala_light\",\n\t\t\t\"vapi\": \"_vala_light\",\n\t\t\t\"component\": \"_html_3_light\",\n\t\t\t\"vue\": \"_vue_light\",\n\t\t\t\"wasm\": \"_wasm_light\",\n\t\t\t\"wat\": \"_wat_light\",\n\t\t\t\"pro\": \"_prolog_light\",\n\t\t\t\"zig\": \"_zig_light\",\n\t\t\t\"jar\": \"_zip_light\",\n\t\t\t\"zip\": \"_zip_1_light\",\n\t\t\t\"wgt\": \"_wgt_light\",\n\t\t\t\"ai\": \"_illustrator_light\",\n\t\t\t\"psd\": \"_photoshop_light\",\n\t\t\t\"pdf\": \"_pdf_light\",\n\t\t\t\"eot\": \"_font_light\",\n\t\t\t\"ttf\": \"_font_light\",\n\t\t\t\"woff\": \"_font_light\",\n\t\t\t\"woff2\": \"_font_light\",\n\t\t\t\"otf\": \"_font_light\",\n\t\t\t\"avif\": \"_image_light\",\n\t\t\t\"gif\": \"_image_light\",\n\t\t\t\"jpg\": \"_image_light\",\n\t\t\t\"jpeg\": \"_image_light\",\n\t\t\t\"png\": \"_image_light\",\n\t\t\t\"pxm\": \"_image_light\",\n\t\t\t\"svg\": \"_svg_light\",\n\t\t\t\"svgx\": \"_image_light\",\n\t\t\t\"tiff\": \"_image_light\",\n\t\t\t\"webp\": \"_image_light\",\n\t\t\t\"sublime-project\": \"_sublime_light\",\n\t\t\t\"sublime-workspace\": \"_sublime_light\",\n\t\t\t\"mov\": \"_video_light\",\n\t\t\t\"ogv\": \"_video_light\",\n\t\t\t\"webm\": \"_video_light\",\n\t\t\t\"avi\": \"_video_light\",\n\t\t\t\"mpg\": \"_video_light\",\n\t\t\t\"mp4\": \"_video_light\",\n\t\t\t\"mp3\": \"_audio_light\",\n\t\t\t\"ogg\": \"_audio_light\",\n\t\t\t\"wav\": \"_audio_light\",\n\t\t\t\"flac\": \"_audio_light\",\n\t\t\t\"3ds\": \"_svg_1_light\",\n\t\t\t\"3dm\": \"_svg_1_light\",\n\t\t\t\"stl\": \"_svg_1_light\",\n\t\t\t\"obj\": \"_svg_1_light\",\n\t\t\t\"dae\": \"_svg_1_light\",\n\t\t\t\"babelrc\": \"_babel_light\",\n\t\t\t\"babelrc.js\": \"_babel_light\",\n\t\t\t\"babelrc.cjs\": \"_babel_light\",\n\t\t\t\"bazelrc\": \"_bazel_1_light\",\n\t\t\t\"bowerrc\": \"_bower_light\",\n\t\t\t\"dockerignore\": \"_docker_1_light\",\n\t\t\t\"codeclimate.yml\": \"_code-climate_light\",\n\t\t\t\"eslintrc\": \"_eslint_light\",\n\t\t\t\"eslintrc.js\": \"_eslint_light\",\n\t\t\t\"eslintrc.cjs\": \"_eslint_light\",\n\t\t\t\"eslintrc.yaml\": \"_eslint_light\",\n\t\t\t\"eslintrc.yml\": \"_eslint_light\",\n\t\t\t\"eslintrc.json\": \"_eslint_light\",\n\t\t\t\"eslintignore\": \"_eslint_1_light\",\n\t\t\t\"firebaserc\": \"_firebase_light\",\n\t\t\t\"gitlab-ci.yml\": \"_gitlab_light\",\n\t\t\t\"jshintrc\": \"_javascript_2_light\",\n\t\t\t\"jscsrc\": \"_javascript_2_light\",\n\t\t\t\"stylelintrc\": \"_stylelint_light\",\n\t\t\t\"stylelintrc.json\": \"_stylelint_light\",\n\t\t\t\"stylelintrc.yaml\": \"_stylelint_light\",\n\t\t\t\"stylelintrc.yml\": \"_stylelint_light\",\n\t\t\t\"stylelintrc.js\": \"_stylelint_light\",\n\t\t\t\"stylelintignore\": \"_stylelint_1_light\",\n\t\t\t\"direnv\": \"_config_light\",\n\t\t\t\"env\": \"_config_light\",\n\t\t\t\"static\": \"_config_light\",\n\t\t\t\"slugignore\": \"_config_light\",\n\t\t\t\"tmp\": \"_clock_1_light\",\n\t\t\t\"htaccess\": \"_config_light\",\n\t\t\t\"key\": \"_lock_light\",\n\t\t\t\"cert\": \"_lock_light\",\n\t\t\t\"cer\": \"_lock_light\",\n\t\t\t\"crt\": \"_lock_light\",\n\t\t\t\"pem\": \"_lock_light\",\n\t\t\t\"ds_store\": \"_ignored_light\"\n\t\t},\n\t\t\"languageIds\": {\n\t\t\t\"bat\": \"_windows_light\",\n\t\t\t\"clojure\": \"_clojure_light\",\n\t\t\t\"coffeescript\": \"_coffee_light\",\n\t\t\t\"jsonc\": \"_json_light\",\n\t\t\t\"json\": \"_json_light\",\n\t\t\t\"c\": \"_c_light\",\n\t\t\t\"cpp\": \"_cpp_light\",\n\t\t\t\"cuda-cpp\": \"_cu_light\",\n\t\t\t\"csharp\": \"_c-sharp_light\",\n\t\t\t\"css\": \"_css_light\",\n\t\t\t\"dart\": \"_dart_light\",\n\t\t\t\"dockerfile\": \"_docker_light\",\n\t\t\t\"ignore\": \"_git_light\",\n\t\t\t\"fsharp\": \"_f-sharp_light\",\n\t\t\t\"git-commit\": \"_git_light\",\n\t\t\t\"go\": \"_go2_light\",\n\t\t\t\"groovy\": \"_grails_light\",\n\t\t\t\"handlebars\": \"_mustache_light\",\n\t\t\t\"html\": \"_html_3_light\",\n\t\t\t\"properties\": \"_config_light\",\n\t\t\t\"java\": \"_java_light\",\n\t\t\t\"javascriptreact\": \"_react_light\",\n\t\t\t\"javascript\": \"_javascript_light\",\n\t\t\t\"julia\": \"_julia_light\",\n\t\t\t\"tex\": \"_tex_1_light\",\n\t\t\t\"latex\": \"_tex_light\",\n\t\t\t\"less\": \"_less_light\",\n\t\t\t\"lua\": \"_lua_light\",\n\t\t\t\"makefile\": \"_makefile_light\",\n\t\t\t\"markdown\": \"_markdown_light\",\n\t\t\t\"objective-c\": \"_c_2_light\",\n\t\t\t\"objective-cpp\": \"_cpp_2_light\",\n\t\t\t\"perl\": \"_perl_light\",\n\t\t\t\"php\": \"_php_light\",\n\t\t\t\"powershell\": \"_powershell_light\",\n\t\t\t\"jade\": \"_pug_light\",\n\t\t\t\"python\": \"_python_light\",\n\t\t\t\"r\": \"_R_light\",\n\t\t\t\"razor\": \"_html_light\",\n\t\t\t\"ruby\": \"_ruby_light\",\n\t\t\t\"rust\": \"_rust_light\",\n\t\t\t\"scss\": \"_sass_light\",\n\t\t\t\"search-result\": \"_code-search_light\",\n\t\t\t\"shellscript\": \"_shell_light\",\n\t\t\t\"sql\": \"_db_light\",\n\t\t\t\"swift\": \"_swift_light\",\n\t\t\t\"typescript\": \"_typescript_light\",\n\t\t\t\"typescriptreact\": \"_react_light\",\n\t\t\t\"xml\": \"_xml_light\",\n\t\t\t\"dockercompose\": \"_docker_3_light\",\n\t\t\t\"yaml\": \"_yml_light\",\n\t\t\t\"argdown\": \"_argdown_light\",\n\t\t\t\"bicep\": \"_bicep_light\",\n\t\t\t\"elixir\": \"_elixir_light\",\n\t\t\t\"elm\": \"_elm_light\",\n\t\t\t\"erb\": \"_html_erb_light\",\n\t\t\t\"github-issues\": \"_github_light\",\n\t\t\t\"gradle\": \"_gradle_light\",\n\t\t\t\"godot\": \"_godot_light\",\n\t\t\t\"haml\": \"_haml_light\",\n\t\t\t\"haskell\": \"_haskell_light\",\n\t\t\t\"haxe\": \"_haxe_light\",\n\t\t\t\"jinja\": \"_jinja_light\",\n\t\t\t\"kotlin\": \"_kotlin_light\",\n\t\t\t\"mustache\": \"_mustache_light\",\n\t\t\t\"nunjucks\": \"_nunjucks_light\",\n\t\t\t\"ocaml\": \"_ocaml_light\",\n\t\t\t\"rescript\": \"_rescript_light\",\n\t\t\t\"sass\": \"_sass_light\",\n\t\t\t\"stylus\": \"_stylus_light\",\n\t\t\t\"terraform\": \"_terraform_light\",\n\t\t\t\"vala\": \"_vala_light\",\n\t\t\t\"vue\": \"_vue_light\",\n\t\t\t\"jsonl\": \"_json_light\",\n\t\t\t\"postcss\": \"_css_light\",\n\t\t\t\"django-html\": \"_html_3_light\",\n\t\t\t\"blade\": \"_php_light\"\n\t\t},\n\t\t\"fileNames\": {\n\t\t\t\"mix\": \"_hex_light\",\n\t\t\t\"karma.conf.js\": \"_karma_light\",\n\t\t\t\"karma.conf.cjs\": \"_karma_light\",\n\t\t\t\"karma.conf.mjs\": \"_karma_light\",\n\t\t\t\"karma.conf.coffee\": \"_karma_light\",\n\t\t\t\"readme.md\": \"_info_light\",\n\t\t\t\"readme.txt\": \"_info_light\",\n\t\t\t\"readme\": \"_info_light\",\n\t\t\t\"changelog.md\": \"_clock_light\",\n\t\t\t\"changelog.txt\": \"_clock_light\",\n\t\t\t\"changelog\": \"_clock_light\",\n\t\t\t\"changes.md\": \"_clock_light\",\n\t\t\t\"changes.txt\": \"_clock_light\",\n\t\t\t\"changes\": \"_clock_light\",\n\t\t\t\"version.md\": \"_clock_light\",\n\t\t\t\"version.txt\": \"_clock_light\",\n\t\t\t\"version\": \"_clock_light\",\n\t\t\t\"mvnw\": \"_maven_light\",\n\t\t\t\"pom.xml\": \"_maven_light\",\n\t\t\t\"tsconfig.json\": \"_tsconfig_light\",\n\t\t\t\"vite.config.js\": \"_vite_light\",\n\t\t\t\"vite.config.ts\": \"_vite_light\",\n\t\t\t\"vite.config.mjs\": \"_vite_light\",\n\t\t\t\"vite.config.mts\": \"_vite_light\",\n\t\t\t\"vite.config.cjs\": \"_vite_light\",\n\t\t\t\"vite.config.cts\": \"_vite_light\",\n\t\t\t\"swagger.json\": \"_json_1_light\",\n\t\t\t\"swagger.yml\": \"_json_1_light\",\n\t\t\t\"swagger.yaml\": \"_json_1_light\",\n\t\t\t\"mime.types\": \"_config_light\",\n\t\t\t\"jenkinsfile\": \"_jenkins_light\",\n\t\t\t\"babel.config.js\": \"_babel_light\",\n\t\t\t\"babel.config.json\": \"_babel_light\",\n\t\t\t\"babel.config.cjs\": \"_babel_light\",\n\t\t\t\"build\": \"_bazel_light\",\n\t\t\t\"build.bazel\": \"_bazel_light\",\n\t\t\t\"workspace\": \"_bazel_light\",\n\t\t\t\"workspace.bazel\": \"_bazel_light\",\n\t\t\t\"bower.json\": \"_bower_light\",\n\t\t\t\"docker-healthcheck\": \"_docker_2_light\",\n\t\t\t\"eslint.config.js\": \"_eslint_light\",\n\t\t\t\"firebase.json\": \"_firebase_light\",\n\t\t\t\"geckodriver\": \"_firefox_light\",\n\t\t\t\"gruntfile.js\": \"_grunt_light\",\n\t\t\t\"gruntfile.babel.js\": \"_grunt_light\",\n\t\t\t\"gruntfile.coffee\": \"_grunt_light\",\n\t\t\t\"gulpfile\": \"_gulp_light\",\n\t\t\t\"gulpfile.js\": \"_gulp_light\",\n\t\t\t\"ionic.config.json\": \"_ionic_light\",\n\t\t\t\"ionic.project\": \"_ionic_light\",\n\t\t\t\"platformio.ini\": \"_platformio_light\",\n\t\t\t\"rollup.config.js\": \"_rollup_light\",\n\t\t\t\"sass-lint.yml\": \"_sass_light\",\n\t\t\t\"stylelint.config.js\": \"_stylelint_light\",\n\t\t\t\"stylelint.config.cjs\": \"_stylelint_light\",\n\t\t\t\"stylelint.config.mjs\": \"_stylelint_light\",\n\t\t\t\"yarn.clean\": \"_yarn_light\",\n\t\t\t\"yarn.lock\": \"_yarn_light\",\n\t\t\t\"webpack.config.js\": \"_webpack_light\",\n\t\t\t\"webpack.config.cjs\": \"_webpack_light\",\n\t\t\t\"webpack.config.mjs\": \"_webpack_light\",\n\t\t\t\"webpack.config.ts\": \"_webpack_light\",\n\t\t\t\"webpack.config.build.js\": \"_webpack_light\",\n\t\t\t\"webpack.config.build.cjs\": \"_webpack_light\",\n\t\t\t\"webpack.config.build.mjs\": \"_webpack_light\",\n\t\t\t\"webpack.config.build.ts\": \"_webpack_light\",\n\t\t\t\"webpack.common.js\": \"_webpack_light\",\n\t\t\t\"webpack.common.cjs\": \"_webpack_light\",\n\t\t\t\"webpack.common.mjs\": \"_webpack_light\",\n\t\t\t\"webpack.common.ts\": \"_webpack_light\",\n\t\t\t\"webpack.dev.js\": \"_webpack_light\",\n\t\t\t\"webpack.dev.cjs\": \"_webpack_light\",\n\t\t\t\"webpack.dev.mjs\": \"_webpack_light\",\n\t\t\t\"webpack.dev.ts\": \"_webpack_light\",\n\t\t\t\"webpack.prod.js\": \"_webpack_light\",\n\t\t\t\"webpack.prod.cjs\": \"_webpack_light\",\n\t\t\t\"webpack.prod.mjs\": \"_webpack_light\",\n\t\t\t\"webpack.prod.ts\": \"_webpack_light\",\n\t\t\t\"license\": \"_license_light\",\n\t\t\t\"licence\": \"_license_light\",\n\t\t\t\"license.txt\": \"_license_light\",\n\t\t\t\"licence.txt\": \"_license_light\",\n\t\t\t\"license.md\": \"_license_light\",\n\t\t\t\"licence.md\": \"_license_light\",\n\t\t\t\"copying\": \"_license_light\",\n\t\t\t\"copying.txt\": \"_license_light\",\n\t\t\t\"copying.md\": \"_license_light\",\n\t\t\t\"compiling\": \"_license_1_light\",\n\t\t\t\"compiling.txt\": \"_license_1_light\",\n\t\t\t\"compiling.md\": \"_license_1_light\",\n\t\t\t\"contributing\": \"_license_2_light\",\n\t\t\t\"contributing.txt\": \"_license_2_light\",\n\t\t\t\"contributing.md\": \"_license_2_light\",\n\t\t\t\"qmakefile\": \"_makefile_1_light\",\n\t\t\t\"omakefile\": \"_makefile_2_light\",\n\t\t\t\"cmakelists.txt\": \"_makefile_3_light\",\n\t\t\t\"procfile\": \"_heroku_light\",\n\t\t\t\"npm-debug.log\": \"_npm_ignored_light\"\n\t\t}\n\t},\n\t\"version\": \"https://github.com/jesseweed/seti-ui/commit/1cac4f30f93cc898103c62dde41823a09b0d7b74\"\n}"
  },
  {
    "path": "extensions/theme-seti/package.json",
    "content": "{\n  \"name\": \"vscode-theme-seti\",\n  \"private\": true,\n  \"version\": \"1.0.0\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"icon\": \"icons/seti-circular-128x128.png\",\n  \"scripts\": {\n    \"update\": \"node ./build/update-icon-theme.js\"\n  },\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"iconThemes\": [\n      {\n        \"id\": \"vs-seti\",\n        \"label\": \"%themeLabel%\",\n        \"path\": \"./icons/vs-seti-icon-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-seti/package.nls.json",
    "content": "{\n\t\"displayName\": \"Seti File Icon Theme\",\n\t\"description\": \"A file icon theme made out of the Seti UI file icons\",\n\t\"themeLabel\": \"Seti (Visual Studio Code)\"\n}\n"
  },
  {
    "path": "extensions/theme-solarized-dark/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-solarized-dark/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-solarized-dark/package.json",
    "content": "{\n  \"name\": \"theme-solarized-dark\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Solarized Dark\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/solarized-dark-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-solarized-dark/package.nls.json",
    "content": "{\n\t\"displayName\": \"Solarized Dark Theme\",\n\t\"description\": \"Solarized dark theme for Visual Studio Code\",\n\t\"themeLabel\": \"Solarized Dark\"\n}\n"
  },
  {
    "path": "extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json",
    "content": "{\n\t\"name\": \"Solarized (dark)\",\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#839496\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#839496\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comment\",\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#586E75\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String\",\n\t\t\t\"scope\": \"string\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#2AA198\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Regexp\",\n\t\t\t\"scope\": \"string.regexp\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#DC322F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Number\",\n\t\t\t\"scope\": \"constant.numeric\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#D33682\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable\",\n\t\t\t\"scope\": [\n\t\t\t\t\"variable.language\",\n\t\t\t\t\"variable.other\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#268BD2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keyword\",\n\t\t\t\"scope\": \"keyword\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#859900\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Storage\",\n\t\t\t\"scope\": \"storage\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#93A1A1\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Class name\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.name.class\",\n\t\t\t\t\"entity.name.type\",\n\t\t\t\t\"entity.name.namespace\",\n\t\t\t\t\"entity.name.scope-resolution\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#CB4B16\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function name\",\n\t\t\t\"scope\": \"entity.name.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#268BD2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable start\",\n\t\t\t\"scope\": \"punctuation.definition.variable\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#859900\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Embedded code markers\",\n\t\t\t\"scope\": [\n\t\t\t\t\"punctuation.section.embedded.begin\",\n\t\t\t\t\"punctuation.section.embedded.end\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#DC322F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Built-in constant\",\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.language\",\n\t\t\t\t\"meta.preprocessor\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#B58900\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Support.construct\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.function.construct\",\n\t\t\t\t\"keyword.other.new\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CB4B16\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"User-defined constant\",\n\t\t\t\"scope\": [\n\t\t\t\t\"constant.character\",\n\t\t\t\t\"constant.other\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CB4B16\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Inherited class\",\n\t\t\t\"scope\": [\n\t\t\t\t\"entity.other.inherited-class\",\n\t\t\t\t\"punctuation.separator.namespace.ruby\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6C71C4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function argument\",\n\t\t\t\"scope\": \"variable.parameter\",\n\t\t\t\"settings\": {}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag name\",\n\t\t\t\"scope\": \"entity.name.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#268BD2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag start/end\",\n\t\t\t\"scope\": \"punctuation.definition.tag\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#586E75\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Tag attribute\",\n\t\t\t\"scope\": \"entity.other.attribute-name\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#93A1A1\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library function\",\n\t\t\t\"scope\": \"support.function\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#268BD2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Continuation\",\n\t\t\t\"scope\": \"punctuation.separator.continuation\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#DC322F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library constant\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.constant\",\n\t\t\t\t\"support.variable\"\n\t\t\t],\n\t\t\t\"settings\": {}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library class/type\",\n\t\t\t\"scope\": [\n\t\t\t\t\"support.type\",\n\t\t\t\t\"support.class\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#859900\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library Exception\",\n\t\t\t\"scope\": \"support.type.exception\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#CB4B16\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Library variable\",\n\t\t\t\"scope\": \"support.other.variable\",\n\t\t\t\"settings\": {}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#DC322F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: header\",\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.diff\",\n\t\t\t\t\"meta.diff.header\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#268BD2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: deleted\",\n\t\t\t\"scope\": \"markup.deleted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#DC322F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: changed\",\n\t\t\t\"scope\": \"markup.changed\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#CB4B16\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"diff: inserted\",\n\t\t\t\"scope\": \"markup.inserted\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#859900\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Quote\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#859900\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Lists\",\n\t\t\t\"scope\": \"markup.list\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#B58900\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Styling\",\n\t\t\t\"scope\": [\n\t\t\t\t\"markup.bold\",\n\t\t\t\t\"markup.italic\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#D33682\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Strong\",\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Emphasis\",\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Inline\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#2AA198\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Headings\",\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\",\n\t\t\t\t\"foreground\": \"#268BD2\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Setext Header\",\n\t\t\t\"scope\": \"markup.heading.setext\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#268BD2\"\n\t\t\t}\n\t\t}\n\t],\n\t\"colors\": {\n\n\t\t// Base\n\t\t// \"foreground\": \"\",\n\t\t\"focusBorder\": \"#2AA19899\",\n\t\t// \"contrastActiveBorder\": \"\",\n\t\t// \"contrastBorder\": \"\",\n\n\t\t// \"widget.shadow\": \"\",\n\n\t\t\"selection.background\": \"#2AA19899\",\n\n\t\t\"input.background\": \"#003847\",\n\t\t\"input.foreground\": \"#93A1A1\",\n\t\t\"input.placeholderForeground\": \"#93A1A1AA\",\n\t\t// \"input.border\": \"\",\n\n\t\t\"inputOption.activeBorder\": \"#2AA19899\",\n\t\t\"inputValidation.infoBorder\": \"#363b5f\",\n\t\t\"inputValidation.infoBackground\": \"#052730\",\n\t\t\"inputValidation.warningBackground\": \"#5d5938\",\n\t\t\"inputValidation.warningBorder\": \"#9d8a5e\",\n\t\t\"inputValidation.errorBackground\": \"#571b26\",\n\t\t\"inputValidation.errorBorder\": \"#a92049\",\n\n\t\t\"errorForeground\": \"#ffeaea\",\n\n\t\t\"badge.background\": \"#047aa6\",\n\t\t\"progressBar.background\": \"#047aa6\",\n\n\t\t\"dropdown.background\": \"#00212B\",\n\t\t\"dropdown.border\": \"#2AA19899\",\n\t\t// \"dropdown.foreground\": \"\",\n\n\t\t\"button.background\": \"#2AA19899\",\n\t\t// \"button.foreground\": \"\",\n\n\t\t\"list.activeSelectionBackground\": \"#005A6F\",\n\t\t// \"list.activeSelectionForeground\": \"\",\n\t\t\"quickInputList.focusBackground\": \"#005A6F\",\n\t\t\"list.hoverBackground\": \"#004454AA\",\n\t\t\"list.inactiveSelectionBackground\": \"#00445488\",\n\t\t\"list.dropBackground\": \"#00445488\",\n\t\t\"list.highlightForeground\": \"#1ebcc5\",\n\n\t\t// \"scrollbar.shadow\": \"\",\n\t\t// \"scrollbarSlider.activeBackground\": \"\",\n\t\t// \"scrollbarSlider.background\": \"\",\n\t\t// \"scrollbarSlider.hoverBackground\": \"\",\n\n\t\t// Editor\n\t\t\"editor.background\": \"#002B36\",\n\t\t\"editor.foreground\": \"#839496\",\n\t\t\"editorWidget.background\": \"#00212B\",\n\t\t\"editorCursor.foreground\": \"#D30102\",\n\t\t\"editorWhitespace.foreground\": \"#93A1A180\",\n\t\t\"editor.lineHighlightBackground\": \"#073642\",\n\t\t\"editorLineNumber.activeForeground\": \"#949494\",\n\t\t\"editor.selectionBackground\": \"#274642\",\n\t\t\"minimap.selectionHighlight\": \"#274642\",\n\t\t\"editorIndentGuide.background\": \"#93A1A180\",\n\t\t\"editorIndentGuide.activeBackground\": \"#C3E1E180\",\n\t\t\"editorHoverWidget.background\": \"#004052\",\n\t\t// \"editorHoverWidget.border\": \"\",\n\t\t// \"editorLineNumber.foreground\": \"\",\n\t\t// \"editorMarkerNavigation.background\": \"\",\n\t\t\"editorMarkerNavigationError.background\": \"#AB395B\",\n\t\t\"editorMarkerNavigationWarning.background\": \"#5B7E7A\",\n\t\t// \"editorLink.activeForeground\": \"\",\n\t\t// \"editor.findMatchBackground\": \"\",\n\t\t// \"editor.findMatchHighlightBackground\": \"\",\n\t\t// \"editor.findRangeHighlightBackground\": \"\",\n\t\t// \"editor.hoverHighlightBackground\": \"\",\n\t\t// \"editor.inactiveSelectionBackground\": \"\",\n\t\t// \"editor.lineHighlightBorder\": \"\",\n\t\t// \"editor.rangeHighlightBackground\": \"\",\n\t\t\"editor.selectionHighlightBackground\": \"#005A6FAA\",\n\t\t\"editor.wordHighlightBackground\": \"#004454AA\",\n\t\t\"editor.wordHighlightStrongBackground\": \"#005A6FAA\",\n\n\t\t// Editor: Colorized Bracket Highlighting\n\t\t\"editorBracketHighlight.foreground1\": \"#cdcdcdff\",\n\t\t\"editorBracketHighlight.foreground2\": \"#b58900ff\",\n\t\t\"editorBracketHighlight.foreground3\": \"#d33682ff\",\n\n\t\t// Editor: Suggest\n\t\t// \"editorSuggestWidget.background\": \"\",\n\t\t// \"editorSuggestWidget.border\": \"\",\n\t\t// \"editorSuggestWidget.foreground\": \"\",\n\t\t// \"editorSuggestWidget.highlightForeground\": \"\",\n\t\t// \"editorSuggestWidget.selectedBackground\": \"\",\n\n\t\t// Editor: Peek View\n\t\t\"peekViewResult.background\": \"#00212B\",\n\t\t// \"peekViewResult.lineForeground\": \"\",\n\t\t// \"peekViewResult.selectionBackground\": \"\",\n\t\t// \"peekViewResult.selectionForeground\": \"\",\n\t\t\"peekViewEditor.background\": \"#10192c\",\n\t\t\"peekViewTitle.background\": \"#00212B\",\n\t\t\"peekView.border\": \"#2b2b4a\",\n\t\t\"peekViewEditor.matchHighlightBackground\": \"#7744AA40\",\n\t\t// \"peekViewResult.fileForeground\": \"\",\n\t\t// \"peekViewResult.matchHighlightBackground\": \"\",\n\t\t// \"peekViewTitleLabel.foreground\": \"\",\n\t\t// \"peekViewTitleDescription.foreground\": \"\",\n\n\t\t// Editor: Diff\n\t\t// \"diffEditor.insertedTextBackground\": \"\",\n\t\t// \"diffEditor.insertedTextBorder\": \"\",\n\t\t// \"diffEditor.removedTextBackground\": \"\",\n\t\t// \"diffEditor.removedTextBorder\": \"\",\n\n\t\t// Workbench: Title\n\t\t\"titleBar.activeBackground\": \"#002C39\",\n\t\t// \"titleBar.inactiveBackground\": \"\",\n\t\t// \"titleBar.activeForeground\": \"\",\n\t\t// \"titleBar.inactiveForeground\": \"\",\n\n\t\t// Workbench: Editors\n\t\t// \"editorGroupHeader.noTabsBackground\": \"\",\n\t\t\"editorGroup.border\": \"#00212B\",\n\t\t\"editorGroup.dropBackground\": \"#2AA19844\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#004052\",\n\n\t\t// Workbench: Tabs\n\t\t\"tab.activeForeground\": \"#d6dbdb\",\n\t\t\"tab.activeBackground\": \"#002B37\",\n\t\t\"tab.inactiveForeground\": \"#93A1A1\",\n\t\t\"tab.inactiveBackground\": \"#004052\",\n\t\t\"tab.border\": \"#003847\",\n\t\t\"tab.lastPinnedBorder\": \"#2AA19844\",\n\n\t\t// Workbench: Activity Bar\n\t\t\"activityBar.background\": \"#003847\",\n\t\t// \"activityBarBadge.background\": \"\",\n\t\t// \"activityBar.foreground\": \"\",\n\t\t// \"activityBarBadge.foreground\": \"\",\n\n\t\t// Workbench: Panel\n\t\t// \"panel.background\": \"\",\n\t\t\"panel.border\": \"#2b2b4a\",\n\t\t// \"panelTitle.activeBorder\": \"\",\n\t\t// \"panelTitle.activeForeground\": \"\",\n\t\t// \"panelTitle.inactiveForeground\": \"\",\n\n\t\t// Workbench: Side Bar\n\t\t\"sideBar.background\": \"#00212B\",\n\t\t\"sideBarTitle.foreground\": \"#93A1A1\",\n\t\t// \"sideBarSectionHeader.background\": \"\",\n\n\t\t// Workbench: Status Bar\n\t\t\"statusBar.foreground\": \"#93A1A1\",\n\t\t\"statusBar.background\": \"#00212B\",\n\t\t\"statusBar.debuggingBackground\": \"#00212B\",\n\t\t\"statusBar.noFolderBackground\": \"#00212B\",\n\t\t\"statusBarItem.remoteBackground\": \"#2AA19899\",\n\t\t\"ports.iconRunningProcessForeground\": \"#369432\",\n\t\t\"statusBarItem.prominentBackground\": \"#003847\",\n\t\t\"statusBarItem.prominentHoverBackground\": \"#003847\",\n\t\t// \"statusBarItem.activeBackground\": \"\",\n\t\t// \"statusBarItem.hoverBackground\": \"\",\n\n\t\t// Workbench: Debug\n\t\t\"debugToolBar.background\": \"#00212B\",\n\t\t\"debugExceptionWidget.background\": \"#00212B\",\n\t\t\"debugExceptionWidget.border\": \"#AB395B\",\n\n\t\t// Workbench: Quick Open\n\t\t\"pickerGroup.foreground\": \"#2AA19899\",\n\t\t\"pickerGroup.border\": \"#2AA19899\",\n\n\t\t// Workbench: Terminal\n\t\t// Colors sourced from the official palette http://ethanschoonover.com/solarized\n\t\t\"terminal.ansiBlack\": \"#073642\",\n\t\t\"terminal.ansiRed\": \"#dc322f\",\n\t\t\"terminal.ansiGreen\": \"#859900\",\n\t\t\"terminal.ansiYellow\": \"#b58900\",\n\t\t\"terminal.ansiBlue\": \"#268bd2\",\n\t\t\"terminal.ansiMagenta\": \"#d33682\",\n\t\t\"terminal.ansiCyan\": \"#2aa198\",\n\t\t\"terminal.ansiWhite\": \"#eee8d5\",\n\t\t\"terminal.ansiBrightBlack\": \"#002b36\",\n\t\t\"terminal.ansiBrightRed\": \"#cb4b16\",\n\t\t\"terminal.ansiBrightGreen\": \"#586e75\",\n\t\t\"terminal.ansiBrightYellow\": \"#657b83\",\n\t\t\"terminal.ansiBrightBlue\": \"#839496\",\n\t\t\"terminal.ansiBrightMagenta\": \"#6c71c4\",\n\t\t\"terminal.ansiBrightCyan\": \"#93a1a1\",\n\t\t\"terminal.ansiBrightWhite\": \"#fdf6e3\"\n\t},\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/theme-solarized-light/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-solarized-light/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-solarized-light/package.json",
    "content": "{\n  \"name\": \"theme-solarized-light\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Solarized Light\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs\",\n        \"path\": \"./themes/solarized-light-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-solarized-light/package.nls.json",
    "content": "{\n\t\"displayName\": \"Solarized Light Theme\",\n\t\"description\": \"Solarized light theme for Visual Studio Code\",\n\t\"themeLabel\": \"Solarized Light\"\n}\n"
  },
  {
    "path": "extensions/theme-tomorrow-night-blue/.vscodeignore",
    "content": "cgmanifest.json\n"
  },
  {
    "path": "extensions/theme-tomorrow-night-blue/cgmanifest.json",
    "content": "{\n\t\"registrations\": [\n\t\t{\n\t\t\t\"component\": {\n\t\t\t\t\"type\": \"git\",\n\t\t\t\t\"git\": {\n\t\t\t\t\t\"name\": \"Colorsublime-Themes\",\n\t\t\t\t\t\"repositoryUrl\": \"https://github.com/Colorsublime/Colorsublime-Themes\",\n\t\t\t\t\t\"commitHash\": \"c10fdd8b144486b7a4f3cb4e2251c66df222a825\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"version\": \"0.1.0\"\n\t\t}\n\t],\n\t\"version\": 1\n}\n"
  },
  {
    "path": "extensions/theme-tomorrow-night-blue/package.json",
    "content": "{\n  \"name\": \"theme-tomorrow-night-blue\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"*\"\n  },\n  \"categories\": [\"Themes\"],\n  \"contributes\": {\n    \"themes\": [\n      {\n        \"id\": \"Tomorrow Night Blue\",\n        \"label\": \"%themeLabel%\",\n        \"uiTheme\": \"vs-dark\",\n        \"path\": \"./themes/tomorrow-night-blue-color-theme.json\"\n      }\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/theme-tomorrow-night-blue/package.nls.json",
    "content": "{\n\t\"displayName\": \"Tomorrow Night Blue Theme\",\n\t\"description\": \"Tomorrow night blue theme for Visual Studio Code\",\n\t\"themeLabel\": \"Tomorrow Night Blue\"\n}\n"
  },
  {
    "path": "extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json",
    "content": "{\n\t\"type\": \"dark\",\n\t\"colors\": {\n\t\t\"focusBorder\": \"#bbdaff\",\n\t\t\"errorForeground\": \"#a92049\",\n\t\t\"input.background\": \"#001733\",\n\t\t\"dropdown.background\": \"#001733\",\n\t\t\"quickInputList.focusBackground\": \"#ffffff60\",\n\t\t\"list.activeSelectionBackground\": \"#ffffff60\",\n\t\t\"list.inactiveSelectionBackground\": \"#ffffff40\",\n\t\t\"list.hoverBackground\": \"#ffffff30\",\n\t\t\"list.highlightForeground\": \"#bbdaff\",\n\t\t\"pickerGroup.foreground\": \"#bbdaff\",\n\t\t\"editor.background\": \"#002451\",\n\t\t\"editor.foreground\": \"#ffffff\",\n\t\t\"editor.selectionBackground\": \"#003f8e\",\n\t\t\"minimap.selectionHighlight\": \"#003f8e\",\n\t\t\"editor.lineHighlightBackground\": \"#00346e\",\n\t\t\"editorLineNumber.activeForeground\": \"#949494\",\n\t\t\"editorCursor.foreground\": \"#ffffff\",\n\t\t\"editorWhitespace.foreground\": \"#404f7d\",\n\t\t\"editorWidget.background\": \"#001c40\",\n\t\t\"editorHoverWidget.background\": \"#001c40\",\n\t\t\"editorHoverWidget.border\": \"#ffffff44\",\n\t\t\"editorGroup.border\": \"#404f7d\",\n\t\t\"editorGroupHeader.tabsBackground\": \"#001733\",\n\t\t\"editorGroup.dropBackground\": \"#25375daa\",\n\t\t\"peekViewResult.background\": \"#001c40\",\n\t\t\"tab.inactiveBackground\": \"#001c40\",\n\t\t\"tab.lastPinnedBorder\": \"#007acc80\",\n\t\t\"debugToolBar.background\": \"#001c40\",\n\t\t\"titleBar.activeBackground\": \"#001126\",\n\t\t\"statusBar.background\": \"#001126\",\n\t\t\"statusBarItem.remoteBackground\": \"#0e639c\",\n\t\t\"ports.iconRunningProcessForeground\": \"#bbdaff\",\n\t\t\"statusBar.noFolderBackground\": \"#001126\",\n\t\t\"statusBar.debuggingBackground\": \"#001126\",\n\t\t\"activityBar.background\": \"#001733\",\n\t\t\"progressBar.background\": \"#bbdaffcc\",\n\t\t\"badge.background\": \"#bbdaffcc\",\n\t\t\"badge.foreground\": \"#001733\",\n\t\t\"sideBar.background\": \"#001c40\",\n\t\t\"terminal.ansiBlack\": \"#111111\",\n\t\t\"terminal.ansiRed\": \"#ff9da4\",\n\t\t\"terminal.ansiGreen\": \"#d1f1a9\",\n\t\t\"terminal.ansiYellow\": \"#ffeead\",\n\t\t\"terminal.ansiBlue\": \"#bbdaff\",\n\t\t\"terminal.ansiMagenta\": \"#ebbbff\",\n\t\t\"terminal.ansiCyan\": \"#99ffff\",\n\t\t\"terminal.ansiWhite\": \"#cccccc\",\n\t\t\"terminal.ansiBrightBlack\": \"#333333\",\n\t\t\"terminal.ansiBrightRed\": \"#ff7882\",\n\t\t\"terminal.ansiBrightGreen\": \"#b8f171\",\n\t\t\"terminal.ansiBrightYellow\": \"#ffe580\",\n\t\t\"terminal.ansiBrightBlue\": \"#80baff\",\n\t\t\"terminal.ansiBrightMagenta\": \"#d778ff\",\n\t\t\"terminal.ansiBrightCyan\": \"#78ffff\",\n\t\t\"terminal.ansiBrightWhite\": \"#ffffff\"\n\t},\n\t\"tokenColors\": [\n\t\t{\n\t\t\t\"settings\": {\n\t\t\t\t\"background\": \"#002451\",\n\t\t\t\t\"foreground\": \"#FFFFFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": [\n\t\t\t\t\"meta.embedded\",\n\t\t\t\t\"source.groovy.embedded\",\n\t\t\t\t\"meta.jsx.children\",\n\t\t\t\t\"string meta.image.inline.markdown\",\n\t\t\t\t\"variable.legacy.builtin.python\"\n\t\t\t],\n\t\t\t\"settings\": {\n\t\t\t\t//\"background\": \"#002451\",\n\t\t\t\t\"foreground\": \"#FFFFFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Comment\",\n\t\t\t\"scope\": \"comment\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#7285B7\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Foreground, Operator\",\n\t\t\t\"scope\": \"keyword.operator.class, keyword.operator, constant.other, source.php.embedded.line\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#FFFFFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Variable, String Link, Regular Expression, Tag Name, GitGutter deleted\",\n\t\t\t\"scope\": \"variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag, markup.deleted.git_gutter\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#FF9DA4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Number, Constant, Function Argument, Tag Attribute, Embedded\",\n\t\t\t\"scope\": \"constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#FFC58F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Class, Support\",\n\t\t\t\"scope\": \"entity.name.class, entity.name.type, entity.name.namespace, entity.name.scope-resolution, support.type, support.class\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#FFEEAD\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"String, Symbols, Inherited Class, Markup Heading, GitGutter inserted\",\n\t\t\t\"scope\": \"string, constant.other.symbol, entity.other.inherited-class, punctuation.separator.namespace.ruby, markup.heading, markup.inserted.git_gutter\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#D1F1A9\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Operator, Misc\",\n\t\t\t\"scope\": \"keyword.operator, constant.other.color\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#99FFFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Function, Special Method, Block Level, GitGutter changed\",\n\t\t\t\"scope\": \"entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level, markup.changed.git_gutter\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#BBDAFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Keyword, Storage\",\n\t\t\t\"scope\": \"keyword, storage, storage.type, entity.name.tag.css, entity.name.tag.less\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#EBBBFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Invalid\",\n\t\t\t\"scope\": \"invalid\",\n\t\t\t\"settings\": {\n\t\t\t\t//\"background\": \"#F99DA5\",\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#a92049\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Separator\",\n\t\t\t\"scope\": \"meta.separator\",\n\t\t\t\"settings\": {\n\t\t\t\t//\"background\": \"#BBDAFE\",\n\t\t\t\t\"foreground\": \"#FFFFFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Deprecated\",\n\t\t\t\"scope\": \"invalid.deprecated\",\n\t\t\t\"settings\": {\n\t\t\t\t//\"background\": \"#EBBBFF\",\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#cd9731\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Diff foreground\",\n\t\t\t\"scope\": \"markup.inserted.diff, markup.deleted.diff, meta.diff.header.to-file, meta.diff.header.from-file\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#FFFFFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Diff insertion\",\n\t\t\t\"scope\": \"markup.inserted.diff, meta.diff.header.to-file\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#718c00\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Diff deletion\",\n\t\t\t\"scope\": \"markup.deleted.diff, meta.diff.header.from-file\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#c82829\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Diff header\",\n\t\t\t\"scope\": \"meta.diff.header.from-file, meta.diff.header.to-file\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#4271ae\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Diff range\",\n\t\t\t\"scope\": \"meta.diff.range\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\",\n\t\t\t\t\"foreground\": \"#3e999f\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Quote\",\n\t\t\t\"scope\": \"markup.quote\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#FFC58F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Lists\",\n\t\t\t\"scope\": \"markup.list\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#BBDAFF\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Styling\",\n\t\t\t\"scope\": \"markup.bold, markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#FFC58F\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Strong\",\n\t\t\t\"scope\": \"markup.bold\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup: Emphasis\",\n\t\t\t\"scope\": \"markup.italic\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"italic\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"markup.strikethrough\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"strikethrough\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Inline\",\n\t\t\t\"scope\": \"markup.inline.raw\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"\",\n\t\t\t\t\"foreground\": \"#FF9DA4\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Markup Headings\",\n\t\t\t\"scope\": \"markup.heading\",\n\t\t\t\"settings\": {\n\t\t\t\t\"fontStyle\": \"bold\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.info-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#6796e6\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.warn-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#cd9731\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.error-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#f44747\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"scope\": \"token.debug-token\",\n\t\t\t\"settings\": {\n\t\t\t\t\"foreground\": \"#b267e6\"\n\t\t\t}\n\t\t}\n\t],\n\t\"semanticHighlighting\": true\n}\n"
  },
  {
    "path": "extensions/tsconfig.base.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"esModuleInterop\": true,\n\t\t\"target\": \"es2020\",\n\t\t\"lib\": [\n\t\t\t\"ES2016\",\n\t\t\t\"ES2017.Object\",\n\t\t\t\"ES2017.String\",\n\t\t\t\"ES2017.Intl\",\n\t\t\t\"ES2017.TypedArrays\",\n\t\t\t\"ES2018.AsyncIterable\",\n\t\t\t\"ES2018.AsyncGenerator\",\n\t\t\t\"ES2018.Promise\",\n\t\t\t\"ES2018.Regexp\",\n\t\t\t\"ES2018.Intl\",\n\t\t\t\"ES2019.Array\",\n\t\t\t\"ES2019.Object\",\n\t\t\t\"ES2019.String\",\n\t\t\t\"ES2019.Symbol\",\n\t\t\t\"ES2020.BigInt\",\n\t\t\t\"ES2020.Promise\",\n\t\t\t\"ES2020.String\",\n\t\t\t\"ES2020.Symbol.WellKnown\",\n\t\t\t\"ES2020.Intl\",\n\t\t\t\"ES2021.Promise\",\n\t\t\t\"ES2021.String\",\n\t\t\t\"ES2021.WeakRef\"\n\t\t],\n\t\t\"module\": \"commonjs\",\n\t\t\"strict\": true,\n\t\t\"exactOptionalPropertyTypes\": false,\n\t\t\"useUnknownInCatchVariables\": false,\n\t\t\"alwaysStrict\": true,\n\t\t\"noImplicitAny\": true,\n\t\t\"noImplicitReturns\": true,\n\t\t\"noImplicitOverride\": true,\n\t\t\"noUnusedLocals\": true,\n\t\t\"noUnusedParameters\": true,\n\t\t\"forceConsistentCasingInFileNames\": true\n\t}\n}\n"
  },
  {
    "path": "extensions/tunnel-forwarding/.npmrc",
    "content": "legacy-peer-deps=\"true\"\ntimeout=180000\n"
  },
  {
    "path": "extensions/tunnel-forwarding/.vscode/launch.json",
    "content": "{\n  // Use IntelliSense to learn about possible attributes.\n  // Hover to view descriptions of existing attributes.\n  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Extension\",\n      \"type\": \"extensionHost\",\n      \"request\": \"launch\",\n      \"args\": [\"--extensionDevelopmentPath=${workspaceFolder}\"],\n\t\t\t\"env\": { \"VSCODE_FORWARDING_IS_DEV\": \"1\" } // load the CLI from OSS\n    }\n  ]\n}\n"
  },
  {
    "path": "extensions/tunnel-forwarding/extension.webpack.config.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n//@ts-check\n\n'use strict';\n\nconst withDefaults = require('../shared.webpack.config');\n\nmodule.exports = withDefaults({\n\tcontext: __dirname,\n\tentry: {\n\t\textension: './src/extension.ts',\n\t},\n\tresolve: {\n\t\tmainFields: ['module', 'main']\n\t}\n});\n"
  },
  {
    "path": "extensions/tunnel-forwarding/package.json",
    "content": "{\n  \"name\": \"tunnel-forwarding\",\n  \"displayName\": \"%displayName%\",\n  \"description\": \"%description%\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"vscode\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.82.0\"\n  },\n  \"icon\": \"media/icon.png\",\n  \"capabilities\": {\n    \"virtualWorkspaces\": false,\n    \"untrustedWorkspaces\": {\n      \"supported\": true\n    }\n  },\n  \"enabledApiProposals\": [\n    \"resolvers\",\n    \"tunnelFactory\"\n  ],\n  \"activationEvents\": [\n    \"onTunnel\"\n  ],\n  \"contributes\": {\n    \"commands\": [\n      {\n        \"category\": \"%category%\",\n        \"command\": \"tunnel-forwarding.showLog\",\n        \"title\": \"%command.showLog%\",\n        \"enablement\": \"tunnelForwardingHasLog\"\n      },\n      {\n        \"category\": \"%category%\",\n        \"command\": \"tunnel-forwarding.restart\",\n        \"title\": \"%command.restart%\",\n        \"enablement\": \"tunnelForwardingIsRunning\"\n      }\n    ]\n  },\n  \"main\": \"./out/extension\",\n  \"scripts\": {\n    \"compile\": \"gulp compile-extension:tunnel-forwarding\",\n    \"watch\": \"gulp watch-extension:tunnel-forwarding\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.x\"\n  },\n  \"prettier\": {\n    \"printWidth\": 100,\n    \"trailingComma\": \"all\",\n    \"singleQuote\": true,\n    \"arrowParens\": \"avoid\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/microsoft/vscode.git\"\n  }\n}\n"
  },
  {
    "path": "extensions/tunnel-forwarding/src/deferredPromise.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport type ValueCallback<T = unknown> = (value: T | Promise<T>) => void;\n\nconst enum DeferredOutcome {\n\tResolved,\n\tRejected\n}\n\n/**\n * Copied from src\\vs\\base\\common\\async.ts\n */\nexport class DeferredPromise<T> {\n\n\tprivate completeCallback!: ValueCallback<T>;\n\tprivate errorCallback!: (err: unknown) => void;\n\tprivate outcome?: { outcome: DeferredOutcome.Rejected; value: any } | { outcome: DeferredOutcome.Resolved; value: T };\n\n\tpublic get isRejected() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Rejected;\n\t}\n\n\tpublic get isResolved() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Resolved;\n\t}\n\n\tpublic get isSettled() {\n\t\treturn !!this.outcome;\n\t}\n\n\tpublic get value() {\n\t\treturn this.outcome?.outcome === DeferredOutcome.Resolved ? this.outcome?.value : undefined;\n\t}\n\n\tpublic readonly p: Promise<T>;\n\n\tconstructor() {\n\t\tthis.p = new Promise<T>((c, e) => {\n\t\t\tthis.completeCallback = c;\n\t\t\tthis.errorCallback = e;\n\t\t});\n\t}\n\n\tpublic complete(value: T) {\n\t\treturn new Promise<void>(resolve => {\n\t\t\tthis.completeCallback(value);\n\t\t\tthis.outcome = { outcome: DeferredOutcome.Resolved, value };\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tpublic error(err: unknown) {\n\t\treturn new Promise<void>(resolve => {\n\t\t\tthis.errorCallback(err);\n\t\t\tthis.outcome = { outcome: DeferredOutcome.Rejected, value: err };\n\t\t\tresolve();\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "extensions/tunnel-forwarding/src/split.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Transform } from 'stream';\n\nexport const splitNewLines = () => new StreamSplitter('\\n'.charCodeAt(0));\n\n/**\n * Copied and simplified from src\\vs\\base\\node\\nodeStreams.ts\n *\n * Exception: does not include the split character in the output.\n */\nexport class StreamSplitter extends Transform {\n\tprivate buffer: Buffer | undefined;\n\n\tconstructor(private readonly splitter: number) {\n\t\tsuper();\n\t}\n\n\toverride _transform(chunk: Buffer, _encoding: string, callback: (error?: Error | null, data?: any) => void): void {\n\t\tif (!this.buffer) {\n\t\t\tthis.buffer = chunk;\n\t\t} else {\n\t\t\tthis.buffer = Buffer.concat([this.buffer, chunk]);\n\t\t}\n\n\t\tlet offset = 0;\n\t\twhile (offset < this.buffer.length) {\n\t\t\tconst index = this.buffer.indexOf(this.splitter, offset);\n\t\t\tif (index === -1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.push(this.buffer.subarray(offset, index));\n\t\t\toffset = index + 1;\n\t\t}\n\n\t\tthis.buffer = offset === this.buffer.length ? undefined : this.buffer.subarray(offset);\n\t\tcallback();\n\t}\n\n\toverride _flush(callback: (error?: Error | null, data?: any) => void): void {\n\t\tif (this.buffer) {\n\t\t\tthis.push(this.buffer);\n\t\t}\n\n\t\tcallback();\n\t}\n}\n"
  },
  {
    "path": "extensions/types/lib.textEncoder.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n// Define TextEncoder + TextDecoder globals for both browser and node runtimes\n//\n// Proper fix: https://github.com/microsoft/TypeScript/issues/31535\n\ndeclare var TextDecoder: typeof import('util').TextDecoder;\ndeclare var TextEncoder: typeof import('util').TextEncoder;\n"
  },
  {
    "path": "extensions/typescript-basics/.vscodeignore",
    "content": "build/**\nsrc/**\ntest/**\ntsconfig.json\ncgmanifest.json\nsyntaxes/Readme.md\n"
  },
  {
    "path": "extensions/typescript-basics/language-configuration.json",
    "content": "{\n\t// Note that this file should stay in sync with 'javascript-language-basics/javascript-language-configuration.json'\n\t\"comments\": {\n\t\t\"lineComment\": \"//\",\n\t\t\"blockComment\": [\n\t\t\t\"/*\",\n\t\t\t\"*/\"\n\t\t]\n\t},\n\t\"brackets\": [\n\t\t[\n\t\t\t\"${\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t]\n\t],\n\t\"autoClosingPairs\": [\n\t\t{\n\t\t\t\"open\": \"{\",\n\t\t\t\"close\": \"}\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"[\",\n\t\t\t\"close\": \"]\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"(\",\n\t\t\t\"close\": \")\"\n\t\t},\n\t\t{\n\t\t\t\"open\": \"'\",\n\t\t\t\"close\": \"'\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"\\\"\",\n\t\t\t\"close\": \"\\\"\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"`\",\n\t\t\t\"close\": \"`\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\",\n\t\t\t\t\"comment\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"open\": \"/**\",\n\t\t\t\"close\": \" */\",\n\t\t\t\"notIn\": [\n\t\t\t\t\"string\"\n\t\t\t]\n\t\t}\n\t],\n\t\"surroundingPairs\": [\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"'\",\n\t\t\t\"'\"\n\t\t],\n\t\t[\n\t\t\t\"\\\"\",\n\t\t\t\"\\\"\"\n\t\t],\n\t\t[\n\t\t\t\"`\",\n\t\t\t\"`\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t]\n\t],\n\t\"colorizedBracketPairs\": [\n\t\t[\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t],\n\t\t[\n\t\t\t\"[\",\n\t\t\t\"]\"\n\t\t],\n\t\t[\n\t\t\t\"{\",\n\t\t\t\"}\"\n\t\t],\n\t\t[\n\t\t\t\"<\",\n\t\t\t\">\"\n\t\t]\n\t],\n\t\"autoCloseBefore\": \";:.,=}])>` \\n\\t\",\n\t\"folding\": {\n\t\t\"markers\": {\n\t\t\t\"start\": \"^\\\\s*//\\\\s*#?region\\\\b\",\n\t\t\t\"end\": \"^\\\\s*//\\\\s*#?endregion\\\\b\"\n\t\t}\n\t},\n\t\"wordPattern\": {\n\t\t\"pattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\@\\\\~\\\\!\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>/\\\\?\\\\s]+)\",\n\t},\n\t\"indentationRules\": {\n\t\t\"decreaseIndentPattern\": {\n\t\t\t\"pattern\": \"^\\\\s*[\\\\}\\\\]\\\\)].*$\"\n\t\t},\n\t\t\"increaseIndentPattern\": {\n\t\t\t\"pattern\": \"^.*(\\\\{[^}]*|\\\\([^)]*|\\\\[[^\\\\]]*)$\"\n\t\t},\n\t\t// e.g.  * ...| or */| or *-----*/|\n\t\t\"unIndentedLinePattern\": {\n\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*[^/]*\\\\*/\\\\s*$|^(\\\\t|[ ])*[ ]\\\\*/\\\\s*$|^(\\\\t|[ ])*\\\\*([ ]([^\\\\*]|\\\\*(?!/))*)?$\"\n\t\t},\n\t\t\"indentNextLinePattern\": {\n\t\t\t\"pattern\": \"^((.*=>\\\\s*)|((.*[^\\\\w]+|\\\\s*)(if|while|for)\\\\s*\\\\(.*\\\\)\\\\s*))$\"\n\t\t}\n\t},\n\t\"onEnterRules\": [\n\t\t{\n\t\t\t// e.g. /** | */\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*\\\\*/$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g. /** ...|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \" * \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  * ...|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*\\\\*([ ]([^\\\\*]|\\\\*(?!/))*)?$\"\n\t\t\t},\n\t\t\t\"previousLineText\": {\n\t\t\t\t\"pattern\": \"(?=^(\\\\s*(/\\\\*\\\\*|\\\\*)).*)(?=(?!(\\\\s*\\\\*/)))\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"* \"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// e.g.  */|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*/\\\\s*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// e.g.  *-----*/|\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*[^/]*\\\\*/\\\\s*$\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"removeText\": 1\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"^\\\\s*(\\\\bcase\\\\s.+:|\\\\bdefault:)$\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*(\\\\bcase\\\\b|\\\\bdefault\\\\b))\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indent\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// Decrease indentation after single line if/else if/else, for, or while\n\t\t\t\"previousLineText\": \"^\\\\s*(((else ?)?if|for|while)\\\\s*\\\\(.*\\\\)\\\\s*|else\\\\s*)$\",\n\t\t\t// But make sure line doesn't have braces or is not another if statement\n\t\t\t\"beforeText\": \"^\\\\s+([^{i\\\\s]|i(?!f\\\\b))\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"outdent\"\n\t\t\t}\n\t\t},\n\t\t// Indent when pressing enter from inside ()\n\t\t{\n\t\t\t\"beforeText\": \"^.*\\\\([^\\\\)]*$\",\n\t\t\t\"afterText\": \"^\\\\s*\\\\).*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \"\\t\",\n\t\t\t}\n\t\t},\n\t\t// Indent when pressing enter from inside {}\n\t\t{\n\t\t\t\"beforeText\": \"^.*\\\\{[^\\\\}]*$\",\n\t\t\t\"afterText\": \"^\\\\s*\\\\}.*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \"\\t\",\n\t\t\t}\n\t\t},\n\t\t// Indent when pressing enter from inside []\n\t\t{\n\t\t\t\"beforeText\": \"^.*\\\\[[^\\\\]]*$\",\n\t\t\t\"afterText\": \"^\\\\s*\\\\].*$\",\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"indentOutdent\",\n\t\t\t\t\"appendText\": \"\\t\",\n\t\t\t}\n\t\t},\n\t\t// Add // when pressing enter from inside line comment\n\t\t{\n\t\t\t\"beforeText\": {\n\t\t\t\t\"pattern\": \"(?<!\\\\\\\\)(?<!\\\\w:)\\/\\/.*\"\n\t\t\t},\n\t\t\t\"afterText\": {\n\t\t\t\t\"pattern\": \"^(?!\\\\s*$).+\"\n\t\t\t},\n\t\t\t\"action\": {\n\t\t\t\t\"indent\": \"none\",\n\t\t\t\t\"appendText\": \"// \"\n\t\t\t}\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "extensions/typescript-basics/package.nls.json",
    "content": "{\n\t\"displayName\": \"TypeScript Language Basics\",\n\t\"description\": \"Provides snippets, syntax highlighting, bracket matching and folding in TypeScript files.\"\n}\n"
  },
  {
    "path": "extensions/typescript-basics/syntaxes/Readme.md",
    "content": "The file `TypeScript.tmLanguage.json` and `TypeScriptReact.tmLanguage.json` are derived from [TypeScript.tmLanguage](https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScript.tmLanguage) and [TypeScriptReact.tmLanguage](https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScriptReact.tmLanguage).\n\nTo update to the latest version:\n\n- `cd extensions/typescript-basics` and run `npm run update-grammars`\n- don't forget to run the integration tests at `./scripts/test-integration.sh`\n\nMigration notes and todos:\n\n- differentiate variable and function declarations from references\n  - I suggest we use a new scope segment 'function-call' to signal a function reference, and 'definition' to the declaration. An alternative is to use 'support.function' everywhere.\n  - I suggest we use a new scope segment 'definition' to the variable declarations. Haven't yet found a scope for references that other grammars use.\n\n- rename scope to return.type to return-type, which is already used in other grammars\n- rename entity.name.class to entity.name.type.class which is used in all other grammars I've seen\n\n- do we really want to have the list of all the 'library' types (Math, Dom...). It adds a lot of size to the grammar, lots of special rules and is not really correct as it depends on the JavaScript runtime which types are present.\n"
  },
  {
    "path": "extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json",
    "content": "{\n\t\"information_for_contributors\": [\n\t\t\"This file has been converted from https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScriptReact.tmLanguage\",\n\t\t\"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n\t\t\"Once accepted there, we are happy to receive an update request.\"\n\t],\n\t\"version\": \"https://github.com/microsoft/TypeScript-TmLanguage/commit/48f608692aa6d6ad7bd65b478187906c798234a8\",\n\t\"name\": \"TypeScriptReact\",\n\t\"scopeName\": \"source.tsx\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#directives\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#statements\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#shebang\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"shebang\": {\n\t\t\t\"name\": \"comment.line.shebang.tsx\",\n\t\t\t\"match\": \"\\\\A(#!).*(?=$)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"statements\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#control-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#after-operator-block-as-object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#label\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#var-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#interface-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#enum-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#namespace-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-alias-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-equals-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#export-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"control-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#switch-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#for-loop\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.trycatch.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|goto)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.loop.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(return)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[;}]|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.switch.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#if-statement\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.conditional.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.with.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(with)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(package)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.other.debugger.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"label\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressionWithoutIdentifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-function\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#cast\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#ternary-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#new-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#instanceof-expr\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-objects\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expressionPunctuations\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decorator\": {\n\t\t\t\"name\": \"meta.decorator.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))\\\\@\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.decorator.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\s)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-expr\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.tsx\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^let|[^\\\\._$[:alnum:]]let|^var|[^\\\\._$[:alnum:]]var)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructuring-variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructuring-variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-variable\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.tsx\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^const|[^\\\\._$[:alnum:]]const)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#destructuring-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#destructuring-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var.expr.tsx\",\n\t\t\t\t\t\"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^using|[^\\\\._$[:alnum:]]using|^await\\\\s+using|[^\\\\._$[:alnum:]]await\\\\s+using)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.type.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(,)\\\\s*((?!\\\\S)|(?=\\\\/\\\\/))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.comma.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#var-single-const\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.tsx\",\n\t\t\t\t\t\"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.tsx entity.name.function.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.tsx\",\n\t\t\t\t\t\"begin\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\\\!)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.tsx variable.other.constant.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.tsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.tsx variable.other.readwrite.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.tsx\",\n\t\t\t\t\t\"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.var-single-variable.expr.tsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.variable.tsx variable.other.constant.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-single-variable-type-annotation\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"var-single-variable-type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-variable\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-binding-pattern-variable.tsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.array-binding-pattern-variable.tsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-binding-pattern\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-binding-pattern-variable.tsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.array-binding-pattern-variable.tsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-binding-pattern-const\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#binding-element\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#binding-element-const\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-element-propertyName\": {\n\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\"end\": \"(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.destructuring.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.object.property.tsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"binding-element-const\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-binding-pattern-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-variable-rest-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-variable-rest\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.definition.variable.tsx variable.other.readwrite.tsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"destructuring-variable-rest-const\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.definition.variable.tsx variable.other.constant.tsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"object-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-element\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-binding-pattern-const\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-binding-element-const\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#binding-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-binding-pattern-const\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#binding-element-const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-parameter\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.parameter.object-binding-pattern.tsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-object-binding-element\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.paramter.array-binding-pattern.tsx\",\n\t\t\t\t\t\"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\]\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-object-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#object-binding-element-propertyName\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-binding-element\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-array-binding-pattern\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter-rest\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"destructuring-parameter-rest\": {\n\t\t\t\"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"parameter-object-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.object.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-object-binding-element\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-array-binding-pattern\": {\n\t\t\t\"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.binding-pattern.array.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-binding-element\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"field-declaration\": {\n\t\t\t\"name\": \"meta.field.declaration.tsx\",\n\t\t\t\"begin\": \"(?x)(?<!\\\\()(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s+)?(?=\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|\\\\}|$))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?x)(?=\\\\}|;|,|$|(^(?!\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|$))))|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\\\?)|(\\\\!))?(?=\\\\s*\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.definition.property.tsx entity.name.function.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.property.tsx variable.object.property.tsx\",\n\t\t\t\t\t\"match\": \"\\\\#?[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\",\n\t\t\t\t\t\"match\": \"\\\\?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.definiteassignment.tsx\",\n\t\t\t\t\t\"match\": \"\\\\!\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"variable-initializer\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!=|!)(=)(?!=)(?=\\\\s*\\\\S)(?!\\\\s*.*=>\\\\s*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|^|[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<!=|!)(=)(?!=)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))|(?=^\\\\s*$)|(?<![\\\\|\\\\&\\\\+\\\\-\\\\*\\\\/])(?<=\\\\S)(?<!=)(?=\\\\s*$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-declaration\": {\n\t\t\t\"name\": \"meta.function.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.function.tsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"meta.definition.function.tsx entity.name.function.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-expression\": {\n\t\t\t\"name\": \"meta.function.expression.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.function.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"meta.definition.function.tsx entity.name.function.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=;)|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-name\": {\n\t\t\t\"name\": \"meta.definition.function.tsx entity.name.function.tsx\",\n\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t},\n\t\t\"function-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-function-return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\",\n\t\t\t\t\t\"match\": \"\\\\*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.tsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?\\\\s*\\\\b(constructor)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.tsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:(?:\\\\s*\\\\b(new)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|(?:(\\\\*)\\\\s*)?)(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.new.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.tsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.property.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-literal-method-declaration\": {\n\t\t\t\"name\": \"meta.method.declaration.tsx\",\n\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.property.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.property.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\(|\\\\<)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#method-declaration-name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"method-declaration-name\": {\n\t\t\t\"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??)\\\\s*[\\\\(\\\\<])\",\n\t\t\t\"end\": \"(?=\\\\(|\\\\<)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.definition.method.tsx entity.name.function.tsx\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\",\n\t\t\t\t\t\"match\": \"\\\\?\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-function\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.tsx\",\n\t\t\t\t\t\"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?==>)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.tsx\",\n\t\t\t\t\t\"begin\": \"(?x) (?:\\n  (?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\n)? ((?<![})!\\\\]])\\\\s*\\n  (?=\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  )\\n)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#arrow-return-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.arrow.tsx\",\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((?<=\\\\}|\\\\S)(?<!=>)|((?!\\\\{)(?=\\\\S)))(?!\\\\/[\\\\/\\\\*])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"indexer-declaration\": {\n\t\t\t\"name\": \"meta.indexer.declaration.tsx\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])\\\\s*(\\\\?\\\\s*)?|$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"indexer-mapped-type-declaration\": {\n\t\t\t\"name\": \"meta.indexer.mappedtype.declaration.tsx\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([+-])?(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s+(in)\\\\s+\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.tsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.in.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\])([+-])?\\\\s*(\\\\?\\\\s*)?|$\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters\": {\n\t\t\t\"name\": \"meta.parameters.tsx\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.parameters.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-parameters-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-parameters-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#parameter-type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.tsx\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-declaration\": {\n\t\t\t\"name\": \"meta.class.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(class)\\\\b(?=\\\\s+|/[/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.class.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration-or-expression-patterns\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-expression\": {\n\t\t\t\"name\": \"meta.class.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(class)\\\\b(?=\\\\s+|[<{]|\\\\/[\\\\/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.type.class.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-declaration-or-expression-patterns\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-declaration-or-expression-patterns\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.class.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"interface-declaration\": {\n\t\t\t\"name\": \"meta.interface.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(interface)\\\\b(?=\\\\s+|/[/*])\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.interface.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.interface.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-or-interface-heritage\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(extends|implements)\\\\b)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\{)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#class-or-interface-heritage\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s*\\\\??\\\\.\\\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\\\s*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.other.inherited-class.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"class-or-interface-body\": {\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*\",\n\t\t\t\t\t\"end\": \"(?=\\\\s|[;),}\\\\]:\\\\-\\\\+]|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#access-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#property-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#async-modifier\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#after-operator-block-as-object-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"access-modifier\": {\n\t\t\t\"name\": \"storage.modifier.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"property-accessor\": {\n\t\t\t\"name\": \"storage.type.property.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"async-modifier\": {\n\t\t\t\"name\": \"storage.modifier.async.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(async)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"enum-declaration\": {\n\t\t\t\"name\": \"meta.enum.declaration.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:\\\\b(const)\\\\s+)?\\\\b(enum)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.enum.tsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.type.enum.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.enummember.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\}|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\])))\",\n\t\t\t\t\t\t\t\"end\": \"(?=,|\\\\}|$)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"namespace-declaration\": {\n\t\t\t\"name\": \"meta.namespace.declaration.tsx\",\n\t\t\t\"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(namespace|module)\\\\s+(?=[_$[:alpha:]\\\"'`]))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.namespace.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\})|(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.module.tsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-alias-declaration\": {\n\t\t\t\"name\": \"meta.type.declaration.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(type)\\\\b\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"storage.type.type.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.type.alias.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(=)\\\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.intrinsic.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(=)\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-equals-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.import-equals.external.tsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(require)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.require.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.import-equals.internal.tsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(?!require\\\\b)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=;|$|^)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.tsx\",\n\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-declaration\": {\n\t\t\t\"name\": \"meta.import.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type)(?!\\\\s+from))?(?!\\\\s*[:\\\\(])(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"keyword.control.import.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"keyword.control.type.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<!^import|[^\\\\._$[:alnum:]]import)(?=;|$|^)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#single-line-comment-consuming-line-ending\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=^import|[^\\\\._$[:alnum:]]import)(?!\\\\s*[\\\"'])\",\n\t\t\t\t\t\"end\": \"\\\\bfrom\\\\b\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.from.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"export-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)\\\\s+(as)\\\\s+(namespace)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.namespace.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.export.default.tsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?(?:(?:\\\\s*(=))|(?:\\\\s+(default)(?=\\\\s+)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#interface-declaration\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.export.tsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?\\\\b(?!(\\\\$)|(\\\\s*:))((?=\\\\s*[\\\\{*])|((?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s|,))(?!\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.export.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#import-export-declaration\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-declaration\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-block\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.from.tsx\",\n\t\t\t\t\t\"match\": \"\\\\bfrom\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-assert-clause\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-assert-clause\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(with)|(assert))\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.control.with.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"keyword.control.assert.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object-literal.key.tsx\",\n\t\t\t\t\t\"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.key-value.tsx\",\n\t\t\t\t\t\"match\": \":\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-block\": {\n\t\t\t\"name\": \"meta.block.tsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#import-export-clause\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"import-export-clause\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(?:(\\\\btype)\\\\s+)?(?:(\\\\bdefault)|(\\\\*)|(\\\\b[_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))))\\\\s+(as)\\\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.import-export-all.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.default.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"15\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.import-export-all.tsx\",\n\t\t\t\t\t\"match\": \"\\\\*\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.default.tsx\",\n\t\t\t\t\t\"match\": \"\\\\b(default)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\btype)\\\\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.type.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.alias.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"string.quoted.alias.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"switch-statement\": {\n\t\t\t\"name\": \"switch-statement.expr.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bswitch\\\\s*\\\\()\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"switch-expression.expr.tsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(switch)\\\\s*(\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"switch-block.expr.tsx\",\n\t\t\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"case-clause.expr.tsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.switch.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?=:)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(:)\\\\s*(\\\\{)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"case-clause.expr.tsx punctuation.definition.section.case-statement.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.block.tsx punctuation.definition.block.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\}\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.block.tsx punctuation.definition.block.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"contentName\": \"meta.block.tsx\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"(:)\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"case-clause.expr.tsx punctuation.definition.section.case-statement.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"for-loop\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))for(?=((\\\\s+|(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*))await)?\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)?(\\\\())\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.control.loop.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.loop.tsx\",\n\t\t\t\t\t\"match\": \"await\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#var-expr\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"if-statement\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bif\\\\s*(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))\\\\s*(?!\\\\{))\",\n\t\t\t\t\t\"end\": \"(?=;|$|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(if)\\\\s*(\\\\()\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.control.conditional.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"string.regexp.tsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.other.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"decl-block\": {\n\t\t\t\"name\": \"meta.block.tsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#statements\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"after-operator-block-as-object-literal\": {\n\t\t\t\"name\": \"meta.objectliteral.tsx\",\n\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--)(?<=[:=(,\\\\[?+!>]|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^yield|[^\\\\._$[:alnum:]]yield|^throw|[^\\\\._$[:alnum:]]throw|^in|[^\\\\._$[:alnum:]]in|^of|[^\\\\._$[:alnum:]]of|^typeof|[^\\\\._$[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-member\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-literal\": {\n\t\t\t\"name\": \"meta.objectliteral.tsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-member\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-member\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-literal-method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx meta.object-literal.key.tsx\",\n\t\t\t\t\t\"begin\": \"(?=\\\\[)\",\n\t\t\t\t\t\"end\": \"(?=:)|((?<=[\\\\]])(?=\\\\s*[\\\\(\\\\<]))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx meta.object-literal.key.tsx\",\n\t\t\t\t\t\"begin\": \"(?=[\\\\'\\\\\\\"\\\\`])\",\n\t\t\t\t\t\"end\": \"(?=:)|((?<=[\\\\'\\\\\\\"\\\\`])(?=((\\\\s*[\\\\(\\\\<,}])|(\\\\s+(as|satisifies)\\\\s+))))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx meta.object-literal.key.tsx\",\n\t\t\t\t\t\"begin\": \"(?x)(?=(\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)))\",\n\t\t\t\t\t\"end\": \"(?=:)|(?=\\\\s*([\\\\(\\\\<,}])|(\\\\s+as|satisifies\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.method.declaration.tsx\",\n\t\t\t\t\t\"begin\": \"(?<=[\\\\]\\\\'\\\\\\\"\\\\`])(?=\\\\s*[\\\\(\\\\<])\",\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"match\": \"(?![_$[:alpha:]])([[:digit:]]+)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"match\": \"(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)*\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"begin\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.spread.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.readwrite.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*([,}]|$))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.satisfies.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|^|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisifies)\\\\s+))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"begin\": \"(?=[_$[:alpha:]][_$[:alnum:]]*\\\\s*=)\",\n\t\t\t\t\t\"end\": \"(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.object.member.tsx\",\n\t\t\t\t\t\"begin\": \":\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.object-literal.key.tsx punctuation.separator.key-value.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=,|\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?(?=\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(?=\\\\<\\\\s*$)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(?<=\\\\>)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?<=\\\\>)\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decl-block\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"ternary-expression\": {\n\t\t\t\"begin\": \"(?!\\\\?\\\\.\\\\s*[^[:digit:]])(\\\\?)(?!\\\\?)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\s*(:)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.tsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-target\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-optionals\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\"end\": \"(?<=\\\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"meta.function-call.tsx\",\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#function-call-target\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-call-optionals\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call-target\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-function-call-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.function.tsx\",\n\t\t\t\t\t\"match\": \"(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-call-optionals\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function-call.tsx punctuation.accessor.optional.tsx\",\n\t\t\t\t\t\"match\": \"\\\\?\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.function-call.tsx keyword.operator.definiteassignment.tsx\",\n\t\t\t\t\t\"match\": \"\\\\!\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support-function-call-identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#support-objects\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-accessor\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.import.tsx\",\n\t\t\t\t\t\"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*[\\\\(]\\\\s*[\\\\\\\"\\\\'\\\\`]))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"new-expr\": {\n\t\t\t\"name\": \"new.expr.tsx\",\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.new.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"instanceof-expr\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.instanceof.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|(===|!==|==|!=)|(([\\\\&\\\\~\\\\^\\\\|]\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s+instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression-possibly-arrow\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[(=,])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[(=,]|=>|^return|[^\\\\._$[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)))\\\\s*$)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.async.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#possibly-arrow-return-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression-possibly-arrow-with-typeparameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#expression-inside-possibly-arrow-parens\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-inside-possibly-arrow-parens\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionWithoutIdentifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#decorator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#destructuring-parameter\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*[:,]|$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#variable-initializer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.tsx\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expressionPunctuations\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"paren-expression\": {\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"cast\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"expression-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.flow.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(await)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?=\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s*(\\\\*))?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.flow.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.generator.asterisk.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.delete.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))delete(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.in.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))in(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.of.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))of(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.instanceof.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.new.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typeof-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.void.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))void(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*($|[;,:})\\\\]]))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.as.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.satisfies.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=^|[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisfies)\\\\s+)|(\\\\s+\\\\<))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.spread.tsx\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.tsx\",\n\t\t\t\t\t\"match\": \"\\\\*=|(?<!\\\\()/=|%=|\\\\+=|\\\\-=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.bitwise.tsx\",\n\t\t\t\t\t\"match\": \"\\\\&=|\\\\^=|<<=|>>=|>>>=|\\\\|=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.shift.tsx\",\n\t\t\t\t\t\"match\": \"<<|>>>|>>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.comparison.tsx\",\n\t\t\t\t\t\"match\": \"===|!==|==|!=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.relational.tsx\",\n\t\t\t\t\t\"match\": \"<=|>=|<>|<|>\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=[_$[:alnum:]])(\\\\!)\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.logical.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.logical.tsx\",\n\t\t\t\t\t\"match\": \"\\\\!|&&|\\\\|\\\\||\\\\?\\\\?\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.bitwise.tsx\",\n\t\t\t\t\t\"match\": \"\\\\&|~|\\\\^|\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\",\n\t\t\t\t\t\"match\": \"\\\\=\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.decrement.tsx\",\n\t\t\t\t\t\"match\": \"--\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.increment.tsx\",\n\t\t\t\t\t\"match\": \"\\\\+\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.tsx\",\n\t\t\t\t\t\"match\": \"%|\\\\*|/|-|\\\\+\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)+(?:(/=)|(?:(/)(?![/*]))))\",\n\t\t\t\t\t\"end\": \"(?:(/=)|(?:(/)(?!\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.compound.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.arithmetic.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"typeof-operator\": {\n\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))typeof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"keyword.operator.expression.typeof.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=[,);}\\\\]=>:&|{\\\\?]|(extends\\\\s+)|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#boolean-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#null-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#undefined-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numericConstant-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#array-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#this-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#super-literal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"array-literal\": {\n\t\t\t\"name\": \"meta.array.literal.tsx\",\n\t\t\t\"begin\": \"\\\\s*(\\\\[)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"numeric-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.hex.tsx\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.binary.tsx\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.numeric.octal.tsx\",\n\t\t\t\t\t\"match\": \"\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"constant.numeric.decimal.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"7\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"8\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"9\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"10\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"11\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"12\": {\n\t\t\t\t\t\t\t\"name\": \"meta.delimiter.decimal.period.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"13\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"14\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.numeric.bigint.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"boolean-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.true.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))true(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.boolean.false.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))false(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"null-literal\": {\n\t\t\t\"name\": \"constant.language.null.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))null(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"this-literal\": {\n\t\t\t\"name\": \"variable.language.this.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))this\\\\b(?!\\\\$)\"\n\t\t},\n\t\t\"super-literal\": {\n\t\t\t\"name\": \"variable.language.super.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))super\\\\b(?!\\\\$)\"\n\t\t},\n\t\t\"undefined-literal\": {\n\t\t\t\"name\": \"constant.language.undefined.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))undefined(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"numericConstant-literal\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.nan.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))NaN(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.language.infinity.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Infinity(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"support-objects\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.language.arguments.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(arguments)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.promise.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(Promise)\\\\b(?!\\\\$)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(import)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(meta)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.import.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.importmeta.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(target)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.new.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.target.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) (?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]]))) \\\\s* (?:\\n  (?:(constructor|length|prototype|__proto__)\\\\b(?!\\\\$|\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\\\())\\n  |\\n  (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$)))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"support.variable.property.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"support.constant.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(exports)|(module)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\\\b(?!\\\\$)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"support.type.object.module.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#object-identifiers\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.property.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.property.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.constant.tsx\",\n\t\t\t\t\t\"match\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"variable.other.readwrite.tsx\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"object-identifiers\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"support.class.tsx\",\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\\\??\\\\.\\\\s*prototype\\\\b(?!\\\\$))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(?:\\n  (\\\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\\n  (\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.object.property.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.property.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:\\n  ([[:upper:]][_$[:digit:][:upper:]]*) |\\n  ([_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.constant.object.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.object.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.tsx\",\n\t\t\t\t\t\"begin\": \"(:)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])(?!\\\\s*[|&]\\\\s+)((?=^|[,);\\\\}\\\\]]|//)|(?==[^>])|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.tsx\",\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])((?=[,);\\\\}\\\\]]|\\\\/\\\\/)|(?==[^>])|(?=^\\\\s*$)|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"parameter-type-annotation\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.annotation.tsx\",\n\t\t\t\t\t\"begin\": \"(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[,)])|(?==[^>])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.return.type.tsx\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])(?=$|^|[{};,]|//)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.return.type.tsx\",\n\t\t\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<![:|&])((?=[{};,]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"return-type-core\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[:|&])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-return-type\": {\n\t\t\t\"name\": \"meta.return.type.arrow.tsx\",\n\t\t\t\"begin\": \"(?<=\\\\))\\\\s*(:)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.operator.type.annotation.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-return-type-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"possibly-arrow-return-type\": {\n\t\t\t\"begin\": \"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*=>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n\t\t\t\"contentName\": \"meta.arrow.tsx meta.return.type.arrow.tsx\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#arrow-return-type-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"arrow-return-type-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<=[:])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-parameters\": {\n\t\t\t\"name\": \"meta.type.parameters.tsx\",\n\t\t\t\"begin\": \"(<)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(>)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.modifier.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\",\n\t\t\t\t\t\"match\": \"(=)(?!>)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-arguments\": {\n\t\t\t\"name\": \"meta.type.parameters.tsx\",\n\t\t\t\"begin\": \"\\\\<\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\>\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.typeparameters.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-arguments-body\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-string\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#numeric-literal\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-primitive\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-builtin-literals\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-tuple\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-operators\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-conditional\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-fn-type-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-paren-or-function-parameters\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-function-return-type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-name\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-primitive\": {\n\t\t\t\"name\": \"support.type.primitive.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"type-builtin-literals\": {\n\t\t\t\"name\": \"support.type.builtin.tsx\",\n\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t},\n\t\t\"type-tuple\": {\n\t\t\t\"name\": \"meta.type.tuple.tsx\",\n\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\]\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.square.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\",\n\t\t\t\t\t\"match\": \"\\\\.\\\\.\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(\\\\?)?\\\\s*(:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.label.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.label.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-object\": {\n\t\t\t\"name\": \"meta.object.type.tsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.block.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#method-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#indexer-mapped-type-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#field-declaration\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\.\\\\.\\\\.\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.spread.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-comma\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#punctuation-semicolon\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-conditional\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends)\\\\s+\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=:)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"\\\\?\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \":\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.ternary.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-paren-or-function-parameters\": {\n\t\t\t\"name\": \"meta.type.paren.cover.tsx\",\n\t\t\t\"begin\": \"\\\\(\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"meta.brace.round.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=\\\\s*(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=:)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.rest.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-annotation\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"punctuation.separator.parameter.tsx\",\n\t\t\t\t\t\"match\": \",\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-fn-type-parameters\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b(?=\\\\s*\\\\<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.constructor.tsx storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.constructor.tsx keyword.control.new.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.constructor.tsx\",\n\t\t\t\t\t\"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b\\\\s*(?=\\\\()\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.modifier.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.control.new.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.tsx\",\n\t\t\t\t\t\"begin\": \"(?x)(\\n  (?=\\n    [(]\\\\s*(\\n      ([)]) |\\n      (\\\\.\\\\.\\\\.) |\\n      ([_$[:alnum:]]+\\\\s*(\\n        ([:,?=])|\\n        ([)]\\\\s*=>)\\n      ))\\n    )\\n  )\\n)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-parameters\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-function-return-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.return.tsx\",\n\t\t\t\t\t\"begin\": \"(=>)(?=\\\\s*\\\\S)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!=>)(?<![|&])(?=[,\\\\]\\\\)\\\\{\\\\}=;>:\\\\?]|//|$)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-function-return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.type.function.return.tsx\",\n\t\t\t\t\t\"begin\": \"=>\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.function.arrow.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<!=>)(?<![|&])((?=[,\\\\]\\\\)\\\\{\\\\}=;:\\\\?>]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-function-return-type-core\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-function-return-type-core\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?<==>)(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-predicate-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-operators\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#typeof-operator\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type-infer\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([&|])(?=\\\\s*\\\\{)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?<=\\\\})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-object\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"[&|]\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\S)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.keyof.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))keyof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.ternary.tsx\",\n\t\t\t\t\t\"match\": \"(\\\\?|\\\\:)\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.import.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*\\\\()\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-infer\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(infer)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s+(extends)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))?\",\n\t\t\t\t\t\"name\": \"meta.type.infer.tsx\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.infer.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.extends.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-predicate-operator\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(asserts)\\\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s(is)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.expression.is.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(asserts)\\\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx variable.language.this.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.parameter.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.type.asserts.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))asserts(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.expression.is.tsx\",\n\t\t\t\t\t\"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))is(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type-name\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(<)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.type.parameters.tsx\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(<)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(>)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"contentName\": \"meta.type.parameters.tsx\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments-body\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.module.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.tsx\",\n\t\t\t\t\t\"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"punctuation-comma\": {\n\t\t\t\"name\": \"punctuation.separator.comma.tsx\",\n\t\t\t\"match\": \",\"\n\t\t},\n\t\t\"punctuation-semicolon\": {\n\t\t\t\"name\": \"punctuation.terminator.statement.tsx\",\n\t\t\t\"match\": \";\"\n\t\t},\n\t\t\"punctuation-accessor\": {\n\t\t\t\"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.accessor.optional.tsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qstring-double\": {\n\t\t\t\"name\": \"string.quoted.double.tsx\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\")|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"qstring-single\": {\n\t\t\t\"name\": \"string.quoted.single.tsx\",\n\t\t\t\"begin\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(\\\\')|((?:[^\\\\\\\\\\\\n])$)\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"invalid.illegal.newline.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"string-character-escape\": {\n\t\t\t\"name\": \"constant.character.escape.tsx\",\n\t\t\t\"match\": \"\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\\\{[0-9A-Fa-f]+\\\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)\"\n\t\t},\n\t\t\"template\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"string.template.tsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.tsx punctuation.definition.string.template.begin.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.tsx punctuation.definition.string.template.end.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template-substitution-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-call\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n\t\t\t\t\t\"end\": \"(?=`)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))\",\n\t\t\t\t\t\t\t\"end\": \"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#support-function-call-identifiers\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.tsx\",\n\t\t\t\t\t\t\t\t\t\"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=`)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-substitution-element\": {\n\t\t\t\"name\": \"meta.template.expression.tsx\",\n\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"contentName\": \"meta.embedded.line.tsx\"\n\t\t},\n\t\t\"type-string\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-single\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#qstring-double\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-type\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#template-call\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"string.template.tsx\",\n\t\t\t\t\t\"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.tagged-template.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.tsx punctuation.definition.string.template.begin.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"`\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"string.template.tsx punctuation.definition.string.template.end.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#template-type-substitution-element\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string-character-escape\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"template-type-substitution-element\": {\n\t\t\t\"name\": \"meta.template.expression.tsx\",\n\t\t\t\"begin\": \"\\\\$\\\\{\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.template-expression.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"contentName\": \"meta.embedded.line.tsx\"\n\t\t},\n\t\t\"regex\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.regexp.tsx\",\n\t\t\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--|})(?<=[=(:,\\\\[?+!]|^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case|=>|&&|\\\\|\\\\||\\\\*\\\\/)\\\\s*(\\\\/)(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[\\\\()]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)+\\\\]|\\\\(([^\\\\)\\\\\\\\]|\\\\\\\\.)+\\\\))+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"string.regexp.tsx\",\n\t\t\t\t\t\"begin\": \"((?<![_$[:alnum:])\\\\]]|\\\\+\\\\+|--|}|\\\\*\\\\/)|((?<=^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case))\\\\s*)\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(/)([dgimsuvy]*)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regexp\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.anchor.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[bB]|\\\\^|\\\\$\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"\\\\\\\\[1-9]\\\\d*|\\\\\\\\k<([a-zA-Z_$][\\\\w$]*)>\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.other.back-reference.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.quantifier.regexp\",\n\t\t\t\t\t\"match\": \"[?+*]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)\\\\}\\\\??\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.operator.or.regexp\",\n\t\t\t\t\t\"match\": \"\\\\|\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.assertion.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?<!))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.assertion.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.look-ahead.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.negative-look-ahead.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.look-behind.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"meta.assertion.negative-look-behind.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\))\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.group.regexp\",\n\t\t\t\t\t\"begin\": \"\\\\((?:(\\\\?:)|(?:\\\\?<([a-zA-Z_$][\\\\w$]*)>))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.no-capture.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.group.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.character-class.set.regexp\",\n\t\t\t\t\t\"begin\": \"(\\\\[)(\\\\^)?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.negation.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\])\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.character-class.regexp\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"constant.other.character-class.range.regexp\",\n\t\t\t\t\t\t\t\"match\": \"(?:.|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\\\\-(?:[^\\\\]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.control.regexp\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#regex-character-class\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"regex-character-class\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.character-class.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\[wWsSdDtrnvf]|\\\\.\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.numeric.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.control.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\c[A-Z]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.backslash.regexp\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comment\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.documentation.tsx\",\n\t\t\t\t\t\"begin\": \"/\\\\*\\\\*(?!/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#docblock\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.tsx\",\n\t\t\t\t\t\"begin\": \"(/\\\\*)(?:\\\\s*((@)internal)(?=\\\\s|(\\\\*/)))?\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"\\\\*/\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"comment.line.double-slash.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=$)\",\n\t\t\t\t\t\"contentName\": \"comment.line.double-slash.tsx\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"single-line-comment-consuming-line-ending\": {\n\t\t\t\"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.whitespace.comment.leading.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"comment.line.double-slash.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"storage.type.internaldeclaration.tsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"punctuation.decorator.internaldeclaration.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=^)\",\n\t\t\t\"contentName\": \"comment.line.double-slash.tsx\"\n\t\t},\n\t\t\"directives\": {\n\t\t\t\"name\": \"comment.line.triple-slash.directive.tsx\",\n\t\t\t\"begin\": \"^(///)\\\\s*(?=<(reference|amd-dependency|amd-module)(\\\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\\\s*=\\\\s*((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))+\\\\s*/>\\\\s*$)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.comment.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(?=$)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.tag.tsx\",\n\t\t\t\t\t\"begin\": \"(<)(reference|amd-dependency|amd-module)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.directive.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.directive.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"/>\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.directive.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.other.attribute-name.directive.tsx\",\n\t\t\t\t\t\t\t\"match\": \"path|types|no-default-lib|lib|name|resolution-mode\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.tsx\",\n\t\t\t\t\t\t\t\"match\": \"=\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"docblock\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)(?:access|api))\\n\\\\s+\\n(private|protected|public)\\n\\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.access-type.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)author)\\n\\\\s+\\n(\\n  [^@\\\\s<>*/]\\n  (?:[^@<>*/]|\\\\*[^/])*\\n)\\n(?:\\n  \\\\s*\\n  (<)\\n  ([^>\\\\s]+)\\n  (>)\\n)?\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"constant.other.email.link.underline.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"6\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)borrows) \\\\s+\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <that namepath>\\n\\\\s+ (as) \\\\s+              # as\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <this namepath>\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.operator.control.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"meta.example.jsdoc\",\n\t\t\t\t\t\"begin\": \"((@)example)\\\\s+\",\n\t\t\t\t\t\"end\": \"(?=@|\\\\*/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"^\\\\s\\\\*\\\\s+\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"contentName\": \"constant.other.description.jsdoc\",\n\t\t\t\t\t\t\t\"begin\": \"\\\\G(<)caption(>)\",\n\t\t\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.inline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": \"(</)caption(>)|(?=\\\\*/)\",\n\t\t\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"entity.name.tag.inline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"source.embedded.tsx\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x) ((@)kind) \\\\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"constant.language.symbol-type.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)see)\\n\\\\s+\\n(?:\\n  # URL\\n  (\\n    (?=https?://)\\n    (?:[^\\\\s*]|\\\\*[^/])+\\n  )\\n  |\\n  # JSDoc namepath\\n  (\\n    (?!\\n      # Avoid matching bare URIs (also acceptable as links)\\n      https?://\\n      |\\n      # Avoid matching {@inline tags}; we match those below\\n      (?:\\\\[[^\\\\[\\\\]]*\\\\])? # Possible description [preceding]{@tag}\\n      {@(?:link|linkcode|linkplain|tutorial)\\\\b\\n    )\\n    # Matched namepath\\n    (?:[^@\\\\s*/]|\\\\*[^/])+\\n  )\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.link.underline.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n((@)template)\\n\\\\s+\\n# One or more valid identifiers\\n(\\n  [A-Za-z_$]         # First character: non-numeric word character\\n  [\\\\w$.\\\\[\\\\]]*        # Rest of identifier\\n  (?:                # Possible list of additional identifiers\\n    \\\\s* , \\\\s*\\n    [A-Za-z_$]\\n    [\\\\w$.\\\\[\\\\]]*\\n  )*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)((@)template)\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:arg|argument|const|constant|member|namespace|param|var)\\n)\\n\\\\s+\\n(\\n  [A-Za-z_$]\\n  [\\\\w$.\\\\[\\\\]]*\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)typedef)\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"(?:[^@\\\\s*/]|\\\\*[^/])+\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\",\n\t\t\t\t\t\t\t\"match\": \"(?x)\\n(\\\\[)\\\\s*\\n[\\\\w$]+\\n(?:\\n  (?:\\\\[\\\\])?                                        # Foo[ ].bar properties within an array\\n  \\\\.                                                # Foo.Bar namespaced parameter\\n  [\\\\w$]+\\n)*\\n(?:\\n  \\\\s*\\n  (=)                                                # [foo=bar] Default parameter value\\n  \\\\s*\\n  (\\n    # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\\n    (?>\\n      \\\"(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!\\\"))|[^*\\\\\\\\])*?\\\" |                      # [foo=\\\"bar\\\"] Double-quoted\\n      '(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!'))|[^*\\\\\\\\])*?' |                      # [foo='bar'] Single-quoted\\n      \\\\[ (?:(?:\\\\*(?!/))|[^*])*? \\\\] |                                # [foo=[1,2]] Array literal\\n      (?:(?:\\\\*(?!/))|\\\\s(?!\\\\s*\\\\])|\\\\[.*?(?:\\\\]|(?=\\\\*/))|[^*\\\\s\\\\[\\\\]])*   # Everything else\\n    )*\\n  )\\n)?\\n\\\\s*(?:(\\\\])((?:[^*\\\\s]|\\\\*[^\\\\s/])+)?|(?=\\\\*/))\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.begin.bracket.square.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"keyword.operator.assignment.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"source.embedded.tsx\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.definition.optional-value.end.bracket.square.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"invalid.illegal.syntax.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(?x)\\n(\\n  (@)\\n  (?:define|enum|exception|export|extends|lends|implements|modifies\\n  |namespace|private|protected|returns?|satisfies|suppress|this|throws|type\\n  |yields?)\\n)\\n\\\\s+(?={)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsdoctype\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(?x)\\n(\\n  (@)\\n  (?:alias|augments|callback|constructs|emits|event|fires|exports?\\n  |extends|external|function|func|host|lends|listens|interface|memberof!?\\n  |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\\n)\\n\\\\s+\\n(\\n  (?:\\n    [^{}@\\\\s*] | \\\\*[^/]\\n  )+\\n)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"variable.other.jsdoc\",\n\t\t\t\t\t\"begin\": \"((@)(?:default(?:value)?|license|version))\\\\s+(([''\\\"]))\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\3)|(?=$|\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.string.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^\\\\s*]+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"variable.other.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\",\n\t\t\t\t\t\"match\": \"(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\\\b\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#inline-tags\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\\\s+)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.block.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"brackets\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"{\",\n\t\t\t\t\t\"end\": \"}|(?=\\\\*/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"\\\\[\",\n\t\t\t\t\t\"end\": \"\\\\]|(?=\\\\*/)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"inline-tags\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.other.description.jsdoc\",\n\t\t\t\t\t\"match\": \"(\\\\[)[^\\\\]]+(\\\\])(?={@(?:link|linkcode|linkplain|tutorial))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.square.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.square.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\"begin\": \"({)((@)(?:link(?:code|plain)?|tutorial))\\\\s*\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"storage.type.class.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.inline.tag.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"}|(?=\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G((?=https?://)(?:[^|}\\\\s*]|\\\\*[/])+)(\\\\|)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.link.underline.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pipe.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"match\": \"\\\\G((?:[^{}@\\\\s|*]|\\\\*[^/])+)(\\\\|)?\",\n\t\t\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"variable.other.description.jsdoc\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\t\t\"name\": \"punctuation.separator.pipe.jsdoc\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsdoctype\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"contentName\": \"entity.name.type.instance.jsdoc\",\n\t\t\t\t\t\"begin\": \"\\\\G({)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"0\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"((}))\\\\s*|(?=\\\\*/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.type.instance.jsdoc\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#brackets\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes-in-expression\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-in-expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-without-attributes-in-expression\": {\n\t\t\t\"begin\": \"(?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-without-attributes\": {\n\t\t\t\"name\": \"meta.tag.without-attributes.tsx\",\n\t\t\t\"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>)\",\n\t\t\t\"end\": \"(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>)\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.tsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"support.class.component.tsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.tsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"support.class.component.tsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"contentName\": \"meta.jsx.children.tsx\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-children\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-in-expression\": {\n\t\t\t\"begin\": \"(?x)\\n  (?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*\\n  (?!<\\\\s*[_$[:alpha:]][_$[:alnum:]]*((\\\\s+extends\\\\s+[^=>])|,)) # look ahead is not type parameter of arrow\\n  (?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag\": {\n\t\t\t\"name\": \"meta.tag.tsx\",\n\t\t\t\"begin\": \"(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n\t\t\t\"end\": \"(/>)|(?:(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))?\\\\s*(>))\",\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"4\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"5\": {\n\t\t\t\t\t\"name\": \"entity.name.tag.tsx\"\n\t\t\t\t},\n\t\t\t\t\"6\": {\n\t\t\t\t\t\"name\": \"support.class.component.tsx\"\n\t\t\t\t},\n\t\t\t\t\"7\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\\\\.|-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.begin.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.namespace.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.separator.namespace.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"4\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.tag.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"5\": {\n\t\t\t\t\t\t\t\"name\": \"support.class.component.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=[/]?>)\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#type-arguments\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsx-tag-attributes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"(>)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.tag.end.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=</)\",\n\t\t\t\t\t\"contentName\": \"meta.jsx.children.tsx\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#jsx-children\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-children\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-without-attributes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-evaluated-code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-evaluated-code\": {\n\t\t\t\"contentName\": \"meta.embedded.expression.tsx\",\n\t\t\t\"begin\": \"\\\\{\",\n\t\t\t\"end\": \"\\\\}\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.section.embedded.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#expression\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-entities\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.entity.tsx\",\n\t\t\t\t\t\"match\": \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.tsx\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"3\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.entity.tsx\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attributes\": {\n\t\t\t\"name\": \"meta.tag.attributes.tsx\",\n\t\t\t\"begin\": \"\\\\s+\",\n\t\t\t\"end\": \"(?=[/]?>)\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#comment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attribute-name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attribute-assignment\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-string-double-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-string-single-quoted\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-evaluated-code\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-tag-attributes-illegal\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attribute-name\": {\n\t\t\t\"match\": \"(?x)\\n  \\\\s*\\n  (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\\n  ([_$[:alpha:]][-_$[:alnum:]]*)\\n  (?=\\\\s|=|/?>|/\\\\*|//)\",\n\t\t\t\"captures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"punctuation.separator.namespace.tsx\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"name\": \"entity.other.attribute-name.tsx\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"jsx-tag-attribute-assignment\": {\n\t\t\t\"name\": \"keyword.operator.assignment.tsx\",\n\t\t\t\"match\": \"=(?=\\\\s*(?:'|\\\"|{|/\\\\*|//|\\\\n))\"\n\t\t},\n\t\t\"jsx-string-double-quoted\": {\n\t\t\t\"name\": \"string.quoted.double.tsx\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-string-single-quoted\": {\n\t\t\t\"name\": \"string.quoted.single.tsx\",\n\t\t\t\"begin\": \"'\",\n\t\t\t\"end\": \"'\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.begin.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"endCaptures\": {\n\t\t\t\t\"0\": {\n\t\t\t\t\t\"name\": \"punctuation.definition.string.end.tsx\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#jsx-entities\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"jsx-tag-attributes-illegal\": {\n\t\t\t\"name\": \"invalid.illegal.attribute.tsx\",\n\t\t\t\"match\": \"\\\\S+\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "extensions/typescript-language-features/test-workspace/foo.ts",
    "content": ""
  },
  {
    "path": "extensions/typescript-language-features/test-workspace/foojs.js",
    "content": ""
  },
  {
    "path": "extensions/typescript-language-features/test-workspace/index.ts",
    "content": ""
  },
  {
    "path": "src/vs/editor/test/node/diffing/fixtures/deletion/2.tst",
    "content": ""
  },
  {
    "path": "src/vs/editor/test/node/diffing/fixtures/invalid-ranges/1.tst",
    "content": ""
  },
  {
    "path": "src/vs/editor/test/node/diffing/fixtures/trivial/1.txt",
    "content": ""
  },
  {
    "path": "src/vs/workbench/services/search/test/node/fixtures/examples/subfolder/anotherfolder/anotherfile.txt",
    "content": ""
  },
  {
    "path": "src/vs/workbench/services/search/test/node/fixtures2/36438/modules/do-not-find.txt",
    "content": ""
  },
  {
    "path": "src/vs/workbench/services/search/test/node/fixtures2/36438/more/modules/find.txt",
    "content": ""
  },
  {
    "path": "src/vs/workbench/services/textfile/test/node/encoding/fixtures/empty.txt",
    "content": ""
  }
]